kernel/bin-x86_64/kernel: file format elf64-x86-64 Disassembly of section .text: ffffffff80001000 : #endif static uint8_t bump_alloc_pool[FLANTERM_FB_BUMP_ALLOC_POOL_SIZE]; static size_t bump_alloc_ptr = 0; static void *bump_alloc(size_t s) { ffffffff80001000: f3 0f 1e fa endbr64 static bool base_offset_added = false; if (!base_offset_added) { ffffffff80001004: 80 3d f5 b0 00 00 00 cmpb $0x0,0xb0f5(%rip) # ffffffff8000c100 ffffffff8000100b: 75 07 jne ffffffff80001014 if ((uintptr_t)bump_alloc_pool & 0xf) { bump_alloc_ptr += 0x10 - ((uintptr_t)bump_alloc_pool & 0xf); } base_offset_added = true; ffffffff8000100d: c6 05 ec b0 00 00 01 movb $0x1,0xb0ec(%rip) # ffffffff8000c100 } if ((s & 0xf) != 0) { s += 0x10; s &= ~(size_t)0xf; ffffffff80001014: 48 8d 47 10 lea 0x10(%rdi),%rax ffffffff80001018: 48 83 e0 f0 and $0xfffffffffffffff0,%rax ffffffff8000101c: 40 f6 c7 0f test $0xf,%dil ffffffff80001020: 48 0f 45 f8 cmovne %rax,%rdi } size_t next_ptr = bump_alloc_ptr + s; ffffffff80001024: 48 8b 05 dd b0 00 00 mov 0xb0dd(%rip),%rax # ffffffff8000c108 ffffffff8000102b: 48 01 c7 add %rax,%rdi if (next_ptr > FLANTERM_FB_BUMP_ALLOC_POOL_SIZE) { ffffffff8000102e: 48 81 ff 28 52 0d 00 cmp $0xd5228,%rdi ffffffff80001035: 77 11 ja ffffffff80001048 return NULL; } void *ret = &bump_alloc_pool[bump_alloc_ptr]; bump_alloc_ptr = next_ptr; ffffffff80001037: 48 89 3d ca b0 00 00 mov %rdi,0xb0ca(%rip) # ffffffff8000c108 void *ret = &bump_alloc_pool[bump_alloc_ptr]; ffffffff8000103e: 48 05 20 c1 00 80 add $0xffffffff8000c120,%rax return ret; ffffffff80001044: c3 ret ffffffff80001045: 0f 1f 00 nopl (%rax) return NULL; ffffffff80001048: 31 c0 xor %eax,%eax } ffffffff8000104a: c3 ret ffffffff8000104b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80001050 : uint32_t g = (colour >> 8) & 0xff; uint32_t b = colour & 0xff; return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); } static void flanterm_fb_save_state(struct flanterm_context *_ctx) { ffffffff80001050: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; ctx->saved_state_text_fg = ctx->text_fg; ffffffff80001054: 48 8b 87 e0 02 00 00 mov 0x2e0(%rdi),%rax ctx->saved_state_text_bg = ctx->text_bg; ctx->saved_state_cursor_x = ctx->cursor_x; ffffffff8000105b: 48 8b 97 e8 02 00 00 mov 0x2e8(%rdi),%rdx ctx->saved_state_text_fg = ctx->text_fg; ffffffff80001062: 48 89 87 f8 02 00 00 mov %rax,0x2f8(%rdi) ctx->saved_state_cursor_x = ctx->cursor_x; ffffffff80001069: 48 8b 87 f0 02 00 00 mov 0x2f0(%rdi),%rax ffffffff80001070: 48 89 97 00 03 00 00 mov %rdx,0x300(%rdi) ffffffff80001077: 48 89 87 08 03 00 00 mov %rax,0x308(%rdi) ctx->saved_state_cursor_y = ctx->cursor_y; } ffffffff8000107e: c3 ret ffffffff8000107f: 90 nop ffffffff80001080 : static void flanterm_fb_restore_state(struct flanterm_context *_ctx) { ffffffff80001080: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; ctx->text_fg = ctx->saved_state_text_fg; ffffffff80001084: 48 8b 87 f8 02 00 00 mov 0x2f8(%rdi),%rax ctx->text_bg = ctx->saved_state_text_bg; ctx->cursor_x = ctx->saved_state_cursor_x; ffffffff8000108b: 48 8b 97 00 03 00 00 mov 0x300(%rdi),%rdx ctx->text_fg = ctx->saved_state_text_fg; ffffffff80001092: 48 89 87 e0 02 00 00 mov %rax,0x2e0(%rdi) ctx->cursor_x = ctx->saved_state_cursor_x; ffffffff80001099: 48 8b 87 08 03 00 00 mov 0x308(%rdi),%rax ffffffff800010a0: 48 89 97 e8 02 00 00 mov %rdx,0x2e8(%rdi) ffffffff800010a7: 48 89 87 f0 02 00 00 mov %rax,0x2f0(%rdi) ctx->cursor_y = ctx->saved_state_cursor_y; } ffffffff800010ae: c3 ret ffffffff800010af: 90 nop ffffffff800010b0 : static void flanterm_fb_swap_palette(struct flanterm_context *_ctx) { ffffffff800010b0: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; uint32_t tmp = ctx->text_bg; ctx->text_bg = ctx->text_fg; ctx->text_fg = tmp; ffffffff800010b4: 8b 97 e0 02 00 00 mov 0x2e0(%rdi),%edx ffffffff800010ba: 8b 87 e4 02 00 00 mov 0x2e4(%rdi),%eax ffffffff800010c0: 48 c1 e2 20 shl $0x20,%rdx ffffffff800010c4: 48 09 d0 or %rdx,%rax ffffffff800010c7: 48 89 87 e0 02 00 00 mov %rax,0x2e0(%rdi) } ffffffff800010ce: c3 ret ffffffff800010cf: 90 nop ffffffff800010d0 : static inline bool compare_char(struct flanterm_fb_char *a, struct flanterm_fb_char *b) { return !(a->c != b->c || a->bg != b->bg || a->fg != b->fg); } static void push_to_queue(struct flanterm_context *_ctx, struct flanterm_fb_char *c, size_t x, size_t y) { ffffffff800010d0: 49 89 f0 mov %rsi,%r8 ffffffff800010d3: 48 89 ce mov %rcx,%rsi struct flanterm_fb_context *ctx = (void *)_ctx; if (x >= _ctx->cols || y >= _ctx->rows) { ffffffff800010d6: 48 8b 8f e8 00 00 00 mov 0xe8(%rdi),%rcx static void push_to_queue(struct flanterm_context *_ctx, struct flanterm_fb_char *c, size_t x, size_t y) { ffffffff800010dd: 48 89 f8 mov %rdi,%rax if (x >= _ctx->cols || y >= _ctx->rows) { ffffffff800010e0: 48 39 ca cmp %rcx,%rdx ffffffff800010e3: 73 31 jae ffffffff80001116 ffffffff800010e5: 48 3b b7 e0 00 00 00 cmp 0xe0(%rdi),%rsi ffffffff800010ec: 73 28 jae ffffffff80001116 return; } size_t i = y * _ctx->cols + x; ffffffff800010ee: 48 0f af ce imul %rsi,%rcx struct flanterm_fb_queue_item *q = ctx->map[i]; ffffffff800010f2: 48 8b bf d8 02 00 00 mov 0x2d8(%rdi),%rdi size_t i = y * _ctx->cols + x; ffffffff800010f9: 48 01 d1 add %rdx,%rcx struct flanterm_fb_queue_item *q = ctx->map[i]; ffffffff800010fc: 4c 8d 0c cf lea (%rdi,%rcx,8),%r9 ffffffff80001100: 49 8b 39 mov (%r9),%rdi if (q == NULL) { ffffffff80001103: 48 85 ff test %rdi,%rdi ffffffff80001106: 74 18 je ffffffff80001120 q->x = x; q->y = y; ctx->map[i] = q; } q->c = *c; ffffffff80001108: 49 8b 00 mov (%r8),%rax ffffffff8000110b: 48 89 47 10 mov %rax,0x10(%rdi) ffffffff8000110f: 41 8b 40 08 mov 0x8(%r8),%eax ffffffff80001113: 89 47 18 mov %eax,0x18(%rdi) } ffffffff80001116: c3 ret ffffffff80001117: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff8000111e: 00 00 if (compare_char(&ctx->grid[i], c)) { ffffffff80001120: 48 8d 3c 49 lea (%rcx,%rcx,2),%rdi ffffffff80001124: 48 8b 88 c0 02 00 00 mov 0x2c0(%rax),%rcx ffffffff8000112b: 48 8d 0c b9 lea (%rcx,%rdi,4),%rcx return !(a->c != b->c || a->bg != b->bg || a->fg != b->fg); ffffffff8000112f: 41 8b 38 mov (%r8),%edi ffffffff80001132: 39 39 cmp %edi,(%rcx) ffffffff80001134: 74 2a je ffffffff80001160 q = &ctx->queue[ctx->queue_i++]; ffffffff80001136: 48 8b b8 d0 02 00 00 mov 0x2d0(%rax),%rdi ffffffff8000113d: 48 8d 4f 01 lea 0x1(%rdi),%rcx ffffffff80001141: 48 c1 e7 05 shl $0x5,%rdi ffffffff80001145: 48 03 b8 c8 02 00 00 add 0x2c8(%rax),%rdi ffffffff8000114c: 48 89 88 d0 02 00 00 mov %rcx,0x2d0(%rax) q->x = x; ffffffff80001153: 48 89 17 mov %rdx,(%rdi) q->y = y; ffffffff80001156: 48 89 77 08 mov %rsi,0x8(%rdi) ctx->map[i] = q; ffffffff8000115a: 49 89 39 mov %rdi,(%r9) ffffffff8000115d: eb a9 jmp ffffffff80001108 ffffffff8000115f: 90 nop return !(a->c != b->c || a->bg != b->bg || a->fg != b->fg); ffffffff80001160: 41 8b 78 08 mov 0x8(%r8),%edi ffffffff80001164: 39 79 08 cmp %edi,0x8(%rcx) ffffffff80001167: 75 cd jne ffffffff80001136 ffffffff80001169: 41 8b 78 04 mov 0x4(%r8),%edi ffffffff8000116d: 39 79 04 cmp %edi,0x4(%rcx) ffffffff80001170: 75 c4 jne ffffffff80001136 } ffffffff80001172: c3 ret ffffffff80001173: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff8000117a: 00 00 00 ffffffff8000117d: 0f 1f 00 nopl (%rax) ffffffff80001180 : static void flanterm_fb_revscroll(struct flanterm_context *_ctx) { ffffffff80001180: f3 0f 1e fa endbr64 ffffffff80001184: 41 55 push %r13 ffffffff80001186: 41 54 push %r12 ffffffff80001188: 55 push %rbp ffffffff80001189: 53 push %rbx ffffffff8000118a: 48 89 fb mov %rdi,%rbx ffffffff8000118d: 48 83 ec 10 sub $0x10,%rsp struct flanterm_fb_context *ctx = (void *)_ctx; for (size_t i = (_ctx->scroll_bottom_margin - 1) * _ctx->cols - 1; ffffffff80001191: 48 8b 47 70 mov 0x70(%rdi),%rax ffffffff80001195: 4c 8b 9f e8 00 00 00 mov 0xe8(%rdi),%r11 i >= _ctx->scroll_top_margin * _ctx->cols; i--) { ffffffff8000119c: 48 8b 6f 68 mov 0x68(%rdi),%rbp for (size_t i = (_ctx->scroll_bottom_margin - 1) * _ctx->cols - 1; ffffffff800011a0: 48 83 e8 01 sub $0x1,%rax i >= _ctx->scroll_top_margin * _ctx->cols; i--) { ffffffff800011a4: 4d 89 dc mov %r11,%r12 for (size_t i = (_ctx->scroll_bottom_margin - 1) * _ctx->cols - 1; ffffffff800011a7: 49 0f af c3 imul %r11,%rax i >= _ctx->scroll_top_margin * _ctx->cols; i--) { ffffffff800011ab: 4c 0f af e5 imul %rbp,%r12 if (i == (size_t)-1) { ffffffff800011af: 48 85 c0 test %rax,%rax ffffffff800011b2: 74 5c je ffffffff80001210 ffffffff800011b4: 4c 8d 50 ff lea -0x1(%rax),%r10 ffffffff800011b8: 4d 39 e2 cmp %r12,%r10 ffffffff800011bb: 72 53 jb ffffffff80001210 break; } struct flanterm_fb_char *c; struct flanterm_fb_queue_item *q = ctx->map[i]; ffffffff800011bd: 4c 8b af d8 02 00 00 mov 0x2d8(%rdi),%r13 ffffffff800011c4: eb 2d jmp ffffffff800011f3 ffffffff800011c6: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff800011cd: 00 00 00 if (q != NULL) { c = &q->c; ffffffff800011d0: 48 83 c6 10 add $0x10,%rsi } else { c = &ctx->grid[i]; } push_to_queue(_ctx, c, (i + _ctx->cols) % _ctx->cols, (i + _ctx->cols) / _ctx->cols); ffffffff800011d4: 4b 8d 04 13 lea (%r11,%r10,1),%rax ffffffff800011d8: 31 d2 xor %edx,%edx ffffffff800011da: 48 89 df mov %rbx,%rdi ffffffff800011dd: 49 f7 f3 div %r11 ffffffff800011e0: 48 89 c1 mov %rax,%rcx ffffffff800011e3: e8 e8 fe ff ff call ffffffff800010d0 if (i == (size_t)-1) { ffffffff800011e8: 49 83 ea 01 sub $0x1,%r10 ffffffff800011ec: 72 22 jb ffffffff80001210 ffffffff800011ee: 4d 39 e2 cmp %r12,%r10 ffffffff800011f1: 72 1d jb ffffffff80001210 struct flanterm_fb_queue_item *q = ctx->map[i]; ffffffff800011f3: 4b 8b 74 d5 00 mov 0x0(%r13,%r10,8),%rsi if (q != NULL) { ffffffff800011f8: 48 85 f6 test %rsi,%rsi ffffffff800011fb: 75 d3 jne ffffffff800011d0 c = &ctx->grid[i]; ffffffff800011fd: 48 8b 93 c0 02 00 00 mov 0x2c0(%rbx),%rdx ffffffff80001204: 4b 8d 04 52 lea (%r10,%r10,2),%rax ffffffff80001208: 48 8d 34 82 lea (%rdx,%rax,4),%rsi ffffffff8000120c: eb c6 jmp ffffffff800011d4 ffffffff8000120e: 66 90 xchg %ax,%ax } // Clear the first line of the screen. struct flanterm_fb_char empty; empty.c = ' '; empty.fg = ctx->text_fg; ffffffff80001210: 48 8b 83 e0 02 00 00 mov 0x2e0(%rbx),%rax empty.c = ' '; ffffffff80001217: c7 44 24 04 20 00 00 movl $0x20,0x4(%rsp) ffffffff8000121e: 00 empty.bg = ctx->text_bg; for (size_t i = 0; i < _ctx->cols; i++) { ffffffff8000121f: 31 d2 xor %edx,%edx empty.fg = ctx->text_fg; ffffffff80001221: 48 89 44 24 08 mov %rax,0x8(%rsp) for (size_t i = 0; i < _ctx->cols; i++) { ffffffff80001226: 4d 85 db test %r11,%r11 ffffffff80001229: 74 1e je ffffffff80001249 ffffffff8000122b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) push_to_queue(_ctx, &empty, i, _ctx->scroll_top_margin); ffffffff80001230: 48 89 e9 mov %rbp,%rcx ffffffff80001233: 48 8d 74 24 04 lea 0x4(%rsp),%rsi ffffffff80001238: 48 89 df mov %rbx,%rdi ffffffff8000123b: e8 90 fe ff ff call ffffffff800010d0 for (size_t i = 0; i < _ctx->cols; i++) { ffffffff80001240: 48 83 c2 01 add $0x1,%rdx ffffffff80001244: 49 39 d3 cmp %rdx,%r11 ffffffff80001247: 75 e7 jne ffffffff80001230 } } ffffffff80001249: 48 83 c4 10 add $0x10,%rsp ffffffff8000124d: 5b pop %rbx ffffffff8000124e: 5d pop %rbp ffffffff8000124f: 41 5c pop %r12 ffffffff80001251: 41 5d pop %r13 ffffffff80001253: c3 ret ffffffff80001254: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff8000125b: 00 00 00 ffffffff8000125e: 66 90 xchg %ax,%ax ffffffff80001260 : static void flanterm_fb_scroll(struct flanterm_context *_ctx) { ffffffff80001260: f3 0f 1e fa endbr64 ffffffff80001264: 41 56 push %r14 ffffffff80001266: 41 55 push %r13 ffffffff80001268: 41 54 push %r12 ffffffff8000126a: 55 push %rbp ffffffff8000126b: 53 push %rbx ffffffff8000126c: 48 89 fb mov %rdi,%rbx ffffffff8000126f: 48 83 ec 10 sub $0x10,%rsp struct flanterm_fb_context *ctx = (void *)_ctx; for (size_t i = (_ctx->scroll_top_margin + 1) * _ctx->cols; ffffffff80001273: 4c 8b 9f e8 00 00 00 mov 0xe8(%rdi),%r11 ffffffff8000127a: 48 8b 47 68 mov 0x68(%rdi),%rax i < _ctx->scroll_bottom_margin * _ctx->cols; i++) { ffffffff8000127e: 48 8b 6f 70 mov 0x70(%rdi),%rbp for (size_t i = (_ctx->scroll_top_margin + 1) * _ctx->cols; ffffffff80001282: 48 83 c0 01 add $0x1,%rax i < _ctx->scroll_bottom_margin * _ctx->cols; i++) { ffffffff80001286: 4d 89 dc mov %r11,%r12 for (size_t i = (_ctx->scroll_top_margin + 1) * _ctx->cols; ffffffff80001289: 49 0f af c3 imul %r11,%rax i < _ctx->scroll_bottom_margin * _ctx->cols; i++) { ffffffff8000128d: 4c 0f af e5 imul %rbp,%r12 ffffffff80001291: 4c 39 e0 cmp %r12,%rax ffffffff80001294: 73 62 jae ffffffff800012f8 ffffffff80001296: 49 89 c2 mov %rax,%r10 ffffffff80001299: 4c 8d 34 40 lea (%rax,%rax,2),%r14 ffffffff8000129d: 48 8b 87 d8 02 00 00 mov 0x2d8(%rdi),%rax ffffffff800012a4: 4d 29 dc sub %r11,%r12 ffffffff800012a7: 4d 29 da sub %r11,%r10 ffffffff800012aa: 49 c1 e6 02 shl $0x2,%r14 ffffffff800012ae: 4e 8d 2c d8 lea (%rax,%r11,8),%r13 ffffffff800012b2: eb 28 jmp ffffffff800012dc ffffffff800012b4: 0f 1f 40 00 nopl 0x0(%rax) struct flanterm_fb_char *c; struct flanterm_fb_queue_item *q = ctx->map[i]; if (q != NULL) { c = &q->c; ffffffff800012b8: 48 83 c6 10 add $0x10,%rsi } else { c = &ctx->grid[i]; } push_to_queue(_ctx, c, (i - _ctx->cols) % _ctx->cols, (i - _ctx->cols) / _ctx->cols); ffffffff800012bc: 4c 89 d0 mov %r10,%rax ffffffff800012bf: 31 d2 xor %edx,%edx ffffffff800012c1: 48 89 df mov %rbx,%rdi i < _ctx->scroll_bottom_margin * _ctx->cols; i++) { ffffffff800012c4: 49 83 c2 01 add $0x1,%r10 ffffffff800012c8: 49 f7 f3 div %r11 ffffffff800012cb: 49 83 c6 0c add $0xc,%r14 ffffffff800012cf: 48 89 c1 mov %rax,%rcx push_to_queue(_ctx, c, (i - _ctx->cols) % _ctx->cols, (i - _ctx->cols) / _ctx->cols); ffffffff800012d2: e8 f9 fd ff ff call ffffffff800010d0 i < _ctx->scroll_bottom_margin * _ctx->cols; i++) { ffffffff800012d7: 4d 39 d4 cmp %r10,%r12 ffffffff800012da: 74 1c je ffffffff800012f8 struct flanterm_fb_queue_item *q = ctx->map[i]; ffffffff800012dc: 4b 8b 74 d5 00 mov 0x0(%r13,%r10,8),%rsi if (q != NULL) { ffffffff800012e1: 48 85 f6 test %rsi,%rsi ffffffff800012e4: 75 d2 jne ffffffff800012b8 c = &ctx->grid[i]; ffffffff800012e6: 48 8b b3 c0 02 00 00 mov 0x2c0(%rbx),%rsi ffffffff800012ed: 4c 01 f6 add %r14,%rsi ffffffff800012f0: eb ca jmp ffffffff800012bc ffffffff800012f2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) } // Clear the last line of the screen. struct flanterm_fb_char empty; empty.c = ' '; empty.fg = ctx->text_fg; ffffffff800012f8: 48 8b 83 e0 02 00 00 mov 0x2e0(%rbx),%rax empty.c = ' '; ffffffff800012ff: c7 44 24 04 20 00 00 movl $0x20,0x4(%rsp) ffffffff80001306: 00 empty.bg = ctx->text_bg; for (size_t i = 0; i < _ctx->cols; i++) { push_to_queue(_ctx, &empty, i, _ctx->scroll_bottom_margin - 1); ffffffff80001307: 48 83 ed 01 sub $0x1,%rbp for (size_t i = 0; i < _ctx->cols; i++) { ffffffff8000130b: 31 d2 xor %edx,%edx empty.fg = ctx->text_fg; ffffffff8000130d: 48 89 44 24 08 mov %rax,0x8(%rsp) for (size_t i = 0; i < _ctx->cols; i++) { ffffffff80001312: 4d 85 db test %r11,%r11 ffffffff80001315: 74 22 je ffffffff80001339 ffffffff80001317: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff8000131e: 00 00 push_to_queue(_ctx, &empty, i, _ctx->scroll_bottom_margin - 1); ffffffff80001320: 48 89 e9 mov %rbp,%rcx ffffffff80001323: 48 8d 74 24 04 lea 0x4(%rsp),%rsi ffffffff80001328: 48 89 df mov %rbx,%rdi ffffffff8000132b: e8 a0 fd ff ff call ffffffff800010d0 for (size_t i = 0; i < _ctx->cols; i++) { ffffffff80001330: 48 83 c2 01 add $0x1,%rdx ffffffff80001334: 49 39 d3 cmp %rdx,%r11 ffffffff80001337: 75 e7 jne ffffffff80001320 } } ffffffff80001339: 48 83 c4 10 add $0x10,%rsp ffffffff8000133d: 5b pop %rbx ffffffff8000133e: 5d pop %rbp ffffffff8000133f: 41 5c pop %r12 ffffffff80001341: 41 5d pop %r13 ffffffff80001343: 41 5e pop %r14 ffffffff80001345: c3 ret ffffffff80001346: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff8000134d: 00 00 00 ffffffff80001350 : static void flanterm_fb_clear(struct flanterm_context *_ctx, bool move) { ffffffff80001350: f3 0f 1e fa endbr64 ffffffff80001354: 41 54 push %r12 ffffffff80001356: 41 89 f4 mov %esi,%r12d ffffffff80001359: 55 push %rbp ffffffff8000135a: 53 push %rbx ffffffff8000135b: 48 89 fb mov %rdi,%rbx ffffffff8000135e: 48 83 ec 10 sub $0x10,%rsp struct flanterm_fb_char empty; empty.c = ' '; empty.fg = ctx->text_fg; empty.bg = ctx->text_bg; for (size_t i = 0; i < _ctx->rows * _ctx->cols; i++) { ffffffff80001362: 4c 8b 9f e8 00 00 00 mov 0xe8(%rdi),%r11 ffffffff80001369: 48 8b af e0 00 00 00 mov 0xe0(%rdi),%rbp empty.fg = ctx->text_fg; ffffffff80001370: 48 8b 87 e0 02 00 00 mov 0x2e0(%rdi),%rax empty.c = ' '; ffffffff80001377: c7 44 24 04 20 00 00 movl $0x20,0x4(%rsp) ffffffff8000137e: 00 for (size_t i = 0; i < _ctx->rows * _ctx->cols; i++) { ffffffff8000137f: 49 0f af eb imul %r11,%rbp empty.fg = ctx->text_fg; ffffffff80001383: 48 89 44 24 08 mov %rax,0x8(%rsp) for (size_t i = 0; i < _ctx->rows * _ctx->cols; i++) { ffffffff80001388: 48 85 ed test %rbp,%rbp ffffffff8000138b: 74 24 je ffffffff800013b1 ffffffff8000138d: 45 31 d2 xor %r10d,%r10d push_to_queue(_ctx, &empty, i % _ctx->cols, i / _ctx->cols); ffffffff80001390: 4c 89 d0 mov %r10,%rax ffffffff80001393: 31 d2 xor %edx,%edx ffffffff80001395: 48 8d 74 24 04 lea 0x4(%rsp),%rsi ffffffff8000139a: 48 89 df mov %rbx,%rdi ffffffff8000139d: 49 f7 f3 div %r11 for (size_t i = 0; i < _ctx->rows * _ctx->cols; i++) { ffffffff800013a0: 49 83 c2 01 add $0x1,%r10 ffffffff800013a4: 48 89 c1 mov %rax,%rcx push_to_queue(_ctx, &empty, i % _ctx->cols, i / _ctx->cols); ffffffff800013a7: e8 24 fd ff ff call ffffffff800010d0 for (size_t i = 0; i < _ctx->rows * _ctx->cols; i++) { ffffffff800013ac: 49 39 ea cmp %rbp,%r10 ffffffff800013af: 75 df jne ffffffff80001390 } if (move) { ffffffff800013b1: 45 84 e4 test %r12b,%r12b ffffffff800013b4: 74 16 je ffffffff800013cc ctx->cursor_x = 0; ffffffff800013b6: 48 c7 83 e8 02 00 00 movq $0x0,0x2e8(%rbx) ffffffff800013bd: 00 00 00 00 ctx->cursor_y = 0; ffffffff800013c1: 48 c7 83 f0 02 00 00 movq $0x0,0x2f0(%rbx) ffffffff800013c8: 00 00 00 00 } } ffffffff800013cc: 48 83 c4 10 add $0x10,%rsp ffffffff800013d0: 5b pop %rbx ffffffff800013d1: 5d pop %rbp ffffffff800013d2: 41 5c pop %r12 ffffffff800013d4: c3 ret ffffffff800013d5: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff800013dc: 00 00 00 ffffffff800013df: 90 nop ffffffff800013e0 : static void flanterm_fb_set_cursor_pos(struct flanterm_context *_ctx, size_t x, size_t y) { ffffffff800013e0: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; if (x >= _ctx->cols) { ffffffff800013e4: 48 8b 87 e8 00 00 00 mov 0xe8(%rdi),%rax ffffffff800013eb: 48 39 c6 cmp %rax,%rsi ffffffff800013ee: 72 0f jb ffffffff800013ff if ((int)x < 0) { x = 0; } else { x = _ctx->cols - 1; ffffffff800013f0: 48 83 e8 01 sub $0x1,%rax ffffffff800013f4: 85 f6 test %esi,%esi ffffffff800013f6: be 00 00 00 00 mov $0x0,%esi ffffffff800013fb: 48 0f 49 f0 cmovns %rax,%rsi } } if (y >= _ctx->rows) { ffffffff800013ff: 48 8b 87 e0 00 00 00 mov 0xe0(%rdi),%rax ffffffff80001406: 48 39 c2 cmp %rax,%rdx ffffffff80001409: 72 0f jb ffffffff8000141a if ((int)y < 0) { y = 0; } else { y = _ctx->rows - 1; ffffffff8000140b: 48 83 e8 01 sub $0x1,%rax ffffffff8000140f: 85 d2 test %edx,%edx ffffffff80001411: ba 00 00 00 00 mov $0x0,%edx ffffffff80001416: 48 0f 49 d0 cmovns %rax,%rdx } } ctx->cursor_x = x; ffffffff8000141a: 48 89 b7 e8 02 00 00 mov %rsi,0x2e8(%rdi) ctx->cursor_y = y; ffffffff80001421: 48 89 97 f0 02 00 00 mov %rdx,0x2f0(%rdi) } ffffffff80001428: c3 ret ffffffff80001429: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) ffffffff80001430 : static void flanterm_fb_get_cursor_pos(struct flanterm_context *_ctx, size_t *x, size_t *y) { ffffffff80001430: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; *x = ctx->cursor_x >= _ctx->cols ? _ctx->cols - 1 : ctx->cursor_x; ffffffff80001434: 48 8b 87 e8 02 00 00 mov 0x2e8(%rdi),%rax static void flanterm_fb_get_cursor_pos(struct flanterm_context *_ctx, size_t *x, size_t *y) { ffffffff8000143b: 48 89 d1 mov %rdx,%rcx *x = ctx->cursor_x >= _ctx->cols ? _ctx->cols - 1 : ctx->cursor_x; ffffffff8000143e: 48 8b 97 e8 00 00 00 mov 0xe8(%rdi),%rdx ffffffff80001445: 48 39 d0 cmp %rdx,%rax ffffffff80001448: 4c 8d 42 ff lea -0x1(%rdx),%r8 ffffffff8000144c: 49 0f 43 c0 cmovae %r8,%rax ffffffff80001450: 48 89 06 mov %rax,(%rsi) *y = ctx->cursor_y >= _ctx->rows ? _ctx->rows - 1 : ctx->cursor_y; ffffffff80001453: 48 8b 87 f0 02 00 00 mov 0x2f0(%rdi),%rax ffffffff8000145a: 48 8b 97 e0 00 00 00 mov 0xe0(%rdi),%rdx ffffffff80001461: 48 8d 72 ff lea -0x1(%rdx),%rsi ffffffff80001465: 48 39 d0 cmp %rdx,%rax ffffffff80001468: 48 0f 43 c6 cmovae %rsi,%rax ffffffff8000146c: 48 89 01 mov %rax,(%rcx) } ffffffff8000146f: c3 ret ffffffff80001470 : static void flanterm_fb_move_character(struct flanterm_context *_ctx, size_t new_x, size_t new_y, size_t old_x, size_t old_y) { ffffffff80001470: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; if (old_x >= _ctx->cols || old_y >= _ctx->rows ffffffff80001474: 48 8b 87 e8 00 00 00 mov 0xe8(%rdi),%rax ffffffff8000147b: 48 39 c1 cmp %rax,%rcx ffffffff8000147e: 73 1f jae ffffffff8000149f ffffffff80001480: 4c 8b 97 e0 00 00 00 mov 0xe0(%rdi),%r10 || new_x >= _ctx->cols || new_y >= _ctx->rows) { ffffffff80001487: 48 39 c6 cmp %rax,%rsi ffffffff8000148a: 41 0f 93 c1 setae %r9b if (old_x >= _ctx->cols || old_y >= _ctx->rows ffffffff8000148e: 4d 39 d0 cmp %r10,%r8 ffffffff80001491: 41 0f 93 c3 setae %r11b || new_x >= _ctx->cols || new_y >= _ctx->rows) { ffffffff80001495: 45 08 d9 or %r11b,%r9b ffffffff80001498: 75 05 jne ffffffff8000149f ffffffff8000149a: 4c 39 d2 cmp %r10,%rdx ffffffff8000149d: 72 01 jb ffffffff800014a0 } else { c = &ctx->grid[i]; } push_to_queue(_ctx, c, new_x, new_y); } ffffffff8000149f: c3 ret size_t i = old_x + old_y * _ctx->cols; ffffffff800014a0: 49 0f af c0 imul %r8,%rax ffffffff800014a4: 48 01 c8 add %rcx,%rax struct flanterm_fb_queue_item *q = ctx->map[i]; ffffffff800014a7: 48 8b 8f d8 02 00 00 mov 0x2d8(%rdi),%rcx ffffffff800014ae: 48 8b 0c c1 mov (%rcx,%rax,8),%rcx if (q != NULL) { ffffffff800014b2: 48 85 c9 test %rcx,%rcx ffffffff800014b5: 74 19 je ffffffff800014d0 c = &q->c; ffffffff800014b7: 48 8d 41 10 lea 0x10(%rcx),%rax push_to_queue(_ctx, c, new_x, new_y); ffffffff800014bb: 48 89 d1 mov %rdx,%rcx ffffffff800014be: 48 89 f2 mov %rsi,%rdx ffffffff800014c1: 48 89 c6 mov %rax,%rsi ffffffff800014c4: e9 07 fc ff ff jmp ffffffff800010d0 ffffffff800014c9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) c = &ctx->grid[i]; ffffffff800014d0: 48 8d 0c 40 lea (%rax,%rax,2),%rcx ffffffff800014d4: 48 8b 87 c0 02 00 00 mov 0x2c0(%rdi),%rax ffffffff800014db: 48 8d 04 88 lea (%rax,%rcx,4),%rax ffffffff800014df: eb da jmp ffffffff800014bb ffffffff800014e1: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff800014e8: 00 00 00 ffffffff800014eb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff800014f0 : static void flanterm_fb_set_text_fg(struct flanterm_context *_ctx, size_t fg) { ffffffff800014f0: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; ctx->text_fg = ctx->ansi_colours[fg]; ffffffff800014f4: 8b 84 b7 48 02 00 00 mov 0x248(%rdi,%rsi,4),%eax ffffffff800014fb: 89 87 e0 02 00 00 mov %eax,0x2e0(%rdi) } ffffffff80001501: c3 ret ffffffff80001502: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80001509: 00 00 00 ffffffff8000150c: 0f 1f 40 00 nopl 0x0(%rax) ffffffff80001510 : static void flanterm_fb_set_text_bg(struct flanterm_context *_ctx, size_t bg) { ffffffff80001510: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; ctx->text_bg = ctx->ansi_colours[bg]; ffffffff80001514: 8b 84 b7 48 02 00 00 mov 0x248(%rdi,%rsi,4),%eax ffffffff8000151b: 89 87 e4 02 00 00 mov %eax,0x2e4(%rdi) } ffffffff80001521: c3 ret ffffffff80001522: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80001529: 00 00 00 ffffffff8000152c: 0f 1f 40 00 nopl 0x0(%rax) ffffffff80001530 : static void flanterm_fb_set_text_fg_bright(struct flanterm_context *_ctx, size_t fg) { ffffffff80001530: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; ctx->text_fg = ctx->ansi_bright_colours[fg]; ffffffff80001534: 8b 84 b7 68 02 00 00 mov 0x268(%rdi,%rsi,4),%eax ffffffff8000153b: 89 87 e0 02 00 00 mov %eax,0x2e0(%rdi) } ffffffff80001541: c3 ret ffffffff80001542: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80001549: 00 00 00 ffffffff8000154c: 0f 1f 40 00 nopl 0x0(%rax) ffffffff80001550 : static void flanterm_fb_set_text_bg_bright(struct flanterm_context *_ctx, size_t bg) { ffffffff80001550: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; ctx->text_bg = ctx->ansi_bright_colours[bg]; ffffffff80001554: 8b 84 b7 68 02 00 00 mov 0x268(%rdi,%rsi,4),%eax ffffffff8000155b: 89 87 e4 02 00 00 mov %eax,0x2e4(%rdi) } ffffffff80001561: c3 ret ffffffff80001562: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80001569: 00 00 00 ffffffff8000156c: 0f 1f 40 00 nopl 0x0(%rax) ffffffff80001570 : static void flanterm_fb_set_text_fg_rgb(struct flanterm_context *_ctx, uint32_t fg) { ffffffff80001570: f3 0f 1e fa endbr64 uint32_t r = (colour >> 16) & 0xff; ffffffff80001574: 89 f0 mov %esi,%eax return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80001576: 0f b6 8f 21 02 00 00 movzbl 0x221(%rdi),%ecx static void flanterm_fb_set_text_fg_rgb(struct flanterm_context *_ctx, uint32_t fg) { ffffffff8000157d: 89 f2 mov %esi,%edx uint32_t r = (colour >> 16) & 0xff; ffffffff8000157f: c1 e8 10 shr $0x10,%eax uint32_t g = (colour >> 8) & 0xff; ffffffff80001582: 0f b6 f6 movzbl %dh,%esi uint32_t b = colour & 0xff; ffffffff80001585: 0f b6 d2 movzbl %dl,%edx uint32_t r = (colour >> 16) & 0xff; ffffffff80001588: 0f b6 c0 movzbl %al,%eax return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff8000158b: d3 e0 shl %cl,%eax ffffffff8000158d: 0f b6 8f 23 02 00 00 movzbl 0x223(%rdi),%ecx ffffffff80001594: d3 e6 shl %cl,%esi ffffffff80001596: 0f b6 8f 25 02 00 00 movzbl 0x225(%rdi),%ecx ffffffff8000159d: 09 f0 or %esi,%eax ffffffff8000159f: d3 e2 shl %cl,%edx ffffffff800015a1: 09 d0 or %edx,%eax ffffffff800015a3: 89 87 e0 02 00 00 mov %eax,0x2e0(%rdi) struct flanterm_fb_context *ctx = (void *)_ctx; ctx->text_fg = convert_colour(_ctx, fg); } ffffffff800015a9: c3 ret ffffffff800015aa: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) ffffffff800015b0 : static void flanterm_fb_set_text_bg_rgb(struct flanterm_context *_ctx, uint32_t bg) { ffffffff800015b0: f3 0f 1e fa endbr64 uint32_t r = (colour >> 16) & 0xff; ffffffff800015b4: 89 f0 mov %esi,%eax return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff800015b6: 0f b6 8f 21 02 00 00 movzbl 0x221(%rdi),%ecx static void flanterm_fb_set_text_bg_rgb(struct flanterm_context *_ctx, uint32_t bg) { ffffffff800015bd: 89 f2 mov %esi,%edx uint32_t r = (colour >> 16) & 0xff; ffffffff800015bf: c1 e8 10 shr $0x10,%eax uint32_t g = (colour >> 8) & 0xff; ffffffff800015c2: 0f b6 f6 movzbl %dh,%esi uint32_t b = colour & 0xff; ffffffff800015c5: 0f b6 d2 movzbl %dl,%edx uint32_t r = (colour >> 16) & 0xff; ffffffff800015c8: 0f b6 c0 movzbl %al,%eax return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff800015cb: d3 e0 shl %cl,%eax ffffffff800015cd: 0f b6 8f 23 02 00 00 movzbl 0x223(%rdi),%ecx ffffffff800015d4: d3 e6 shl %cl,%esi ffffffff800015d6: 0f b6 8f 25 02 00 00 movzbl 0x225(%rdi),%ecx ffffffff800015dd: 09 f0 or %esi,%eax ffffffff800015df: d3 e2 shl %cl,%edx ffffffff800015e1: 09 d0 or %edx,%eax ffffffff800015e3: 89 87 e4 02 00 00 mov %eax,0x2e4(%rdi) struct flanterm_fb_context *ctx = (void *)_ctx; ctx->text_bg = convert_colour(_ctx, bg); } ffffffff800015e9: c3 ret ffffffff800015ea: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) ffffffff800015f0 : static void flanterm_fb_set_text_fg_default(struct flanterm_context *_ctx) { ffffffff800015f0: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; ctx->text_fg = ctx->default_fg; ffffffff800015f4: 8b 87 88 02 00 00 mov 0x288(%rdi),%eax ffffffff800015fa: 89 87 e0 02 00 00 mov %eax,0x2e0(%rdi) } ffffffff80001600: c3 ret ffffffff80001601: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80001608: 00 00 00 ffffffff8000160b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80001610 : static void flanterm_fb_set_text_bg_default(struct flanterm_context *_ctx) { ffffffff80001610: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; ctx->text_bg = 0xffffffff; ffffffff80001614: c7 87 e4 02 00 00 ff movl $0xffffffff,0x2e4(%rdi) ffffffff8000161b: ff ff ff } ffffffff8000161e: c3 ret ffffffff8000161f: 90 nop ffffffff80001620 : static void flanterm_fb_set_text_fg_default_bright(struct flanterm_context *_ctx) { ffffffff80001620: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; ctx->text_fg = ctx->default_fg_bright; ffffffff80001624: 8b 87 90 02 00 00 mov 0x290(%rdi),%eax ffffffff8000162a: 89 87 e0 02 00 00 mov %eax,0x2e0(%rdi) } ffffffff80001630: c3 ret ffffffff80001631: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80001638: 00 00 00 ffffffff8000163b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80001640 : static void flanterm_fb_set_text_bg_default_bright(struct flanterm_context *_ctx) { ffffffff80001640: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; ctx->text_bg = ctx->default_bg_bright; ffffffff80001644: 8b 87 94 02 00 00 mov 0x294(%rdi),%eax ffffffff8000164a: 89 87 e4 02 00 00 mov %eax,0x2e4(%rdi) } ffffffff80001650: c3 ret ffffffff80001651: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80001658: 00 00 00 ffffffff8000165b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80001660 : static void draw_cursor(struct flanterm_context *_ctx) { struct flanterm_fb_context *ctx = (void *)_ctx; if (ctx->cursor_x >= _ctx->cols || ctx->cursor_y >= _ctx->rows) { ffffffff80001660: 48 8b 97 e8 02 00 00 mov 0x2e8(%rdi),%rdx ffffffff80001667: 48 8b 87 e8 00 00 00 mov 0xe8(%rdi),%rax ffffffff8000166e: 48 39 c2 cmp %rax,%rdx ffffffff80001671: 0f 83 a1 00 00 00 jae ffffffff80001718 static void draw_cursor(struct flanterm_context *_ctx) { ffffffff80001677: 41 55 push %r13 ffffffff80001679: 41 54 push %r12 ffffffff8000167b: 55 push %rbp ffffffff8000167c: 53 push %rbx ffffffff8000167d: 48 89 fb mov %rdi,%rbx ffffffff80001680: 48 83 ec 18 sub $0x18,%rsp if (ctx->cursor_x >= _ctx->cols || ctx->cursor_y >= _ctx->rows) { ffffffff80001684: 48 8b 8f f0 02 00 00 mov 0x2f0(%rdi),%rcx ffffffff8000168b: 48 3b 8f e0 00 00 00 cmp 0xe0(%rdi),%rcx ffffffff80001692: 73 73 jae ffffffff80001707 return; } size_t i = ctx->cursor_x + ctx->cursor_y * _ctx->cols; ffffffff80001694: 48 0f af c1 imul %rcx,%rax c = ctx->grid[i]; } uint32_t tmp = c.fg; c.fg = c.bg; c.bg = tmp; ctx->plot_char(_ctx, &c, ctx->cursor_x, ctx->cursor_y); ffffffff80001698: 4c 8b 87 b0 01 00 00 mov 0x1b0(%rdi),%r8 size_t i = ctx->cursor_x + ctx->cursor_y * _ctx->cols; ffffffff8000169f: 48 8d 2c 10 lea (%rax,%rdx,1),%rbp struct flanterm_fb_queue_item *q = ctx->map[i]; ffffffff800016a3: 48 8b 87 d8 02 00 00 mov 0x2d8(%rdi),%rax if (q != NULL) { ctx->grid[i] = q->c; ffffffff800016aa: 4c 8d 64 6d 00 lea 0x0(%rbp,%rbp,2),%r12 struct flanterm_fb_queue_item *q = ctx->map[i]; ffffffff800016af: 4c 8b 2c e8 mov (%rax,%rbp,8),%r13 ctx->grid[i] = q->c; ffffffff800016b3: 49 c1 e4 02 shl $0x2,%r12 if (q != NULL) { ffffffff800016b7: 4d 85 ed test %r13,%r13 ffffffff800016ba: 74 64 je ffffffff80001720 c = q->c; ffffffff800016bc: 49 8b 45 10 mov 0x10(%r13),%rax ffffffff800016c0: 48 89 44 24 04 mov %rax,0x4(%rsp) ffffffff800016c5: 48 89 c6 mov %rax,%rsi ffffffff800016c8: 41 8b 45 18 mov 0x18(%r13),%eax ffffffff800016cc: 48 c1 ee 20 shr $0x20,%rsi c.fg = c.bg; ffffffff800016d0: 89 44 24 08 mov %eax,0x8(%rsp) c.bg = tmp; ffffffff800016d4: 89 74 24 0c mov %esi,0xc(%rsp) ctx->plot_char(_ctx, &c, ctx->cursor_x, ctx->cursor_y); ffffffff800016d8: 48 8d 74 24 04 lea 0x4(%rsp),%rsi ffffffff800016dd: 41 ff d0 call *%r8 ctx->grid[i] = q->c; ffffffff800016e0: 48 8b 83 c0 02 00 00 mov 0x2c0(%rbx),%rax ffffffff800016e7: 49 8b 55 10 mov 0x10(%r13),%rdx ffffffff800016eb: 4a 89 14 20 mov %rdx,(%rax,%r12,1) ffffffff800016ef: 41 8b 55 18 mov 0x18(%r13),%edx ffffffff800016f3: 42 89 54 20 08 mov %edx,0x8(%rax,%r12,1) ctx->map[i] = NULL; ffffffff800016f8: 48 8b 83 d8 02 00 00 mov 0x2d8(%rbx),%rax ffffffff800016ff: 48 c7 04 e8 00 00 00 movq $0x0,(%rax,%rbp,8) ffffffff80001706: 00 } } ffffffff80001707: 48 83 c4 18 add $0x18,%rsp ffffffff8000170b: 5b pop %rbx ffffffff8000170c: 5d pop %rbp ffffffff8000170d: 41 5c pop %r12 ffffffff8000170f: 41 5d pop %r13 ffffffff80001711: c3 ret ffffffff80001712: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) ffffffff80001718: c3 ret ffffffff80001719: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) c = ctx->grid[i]; ffffffff80001720: 48 8b 87 c0 02 00 00 mov 0x2c0(%rdi),%rax ffffffff80001727: 4a 8b 34 20 mov (%rax,%r12,1),%rsi ffffffff8000172b: 48 89 74 24 04 mov %rsi,0x4(%rsp) ffffffff80001730: 42 8b 74 20 08 mov 0x8(%rax,%r12,1),%esi uint32_t tmp = c.fg; ffffffff80001735: 8b 44 24 08 mov 0x8(%rsp),%eax c.fg = c.bg; ffffffff80001739: 89 74 24 08 mov %esi,0x8(%rsp) ctx->plot_char(_ctx, &c, ctx->cursor_x, ctx->cursor_y); ffffffff8000173d: 48 8d 74 24 04 lea 0x4(%rsp),%rsi c.bg = tmp; ffffffff80001742: 89 44 24 0c mov %eax,0xc(%rsp) ctx->plot_char(_ctx, &c, ctx->cursor_x, ctx->cursor_y); ffffffff80001746: 41 ff d0 call *%r8 } ffffffff80001749: 48 83 c4 18 add $0x18,%rsp ffffffff8000174d: 5b pop %rbx ffffffff8000174e: 5d pop %rbp ffffffff8000174f: 41 5c pop %r12 ffffffff80001751: 41 5d pop %r13 ffffffff80001753: c3 ret ffffffff80001754: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff8000175b: 00 00 00 ffffffff8000175e: 66 90 xchg %ax,%ax ffffffff80001760 : static void flanterm_fb_double_buffer_flush(struct flanterm_context *_ctx) { ffffffff80001760: f3 0f 1e fa endbr64 ffffffff80001764: 41 55 push %r13 ffffffff80001766: 41 54 push %r12 ffffffff80001768: 55 push %rbp ffffffff80001769: 53 push %rbx ffffffff8000176a: 48 89 fb mov %rdi,%rbx ffffffff8000176d: 48 83 ec 08 sub $0x8,%rsp struct flanterm_fb_context *ctx = (void *)_ctx; if (_ctx->cursor_enabled) { ffffffff80001771: 80 7f 09 00 cmpb $0x0,0x9(%rdi) ffffffff80001775: 0f 85 35 01 00 00 jne ffffffff800018b0 draw_cursor(_ctx); } for (size_t i = 0; i < ctx->queue_i; i++) { ffffffff8000177b: 48 83 bb d0 02 00 00 cmpq $0x0,0x2d0(%rbx) ffffffff80001782: 00 ffffffff80001783: 74 7b je ffffffff80001800 ffffffff80001785: 48 8b 83 d8 02 00 00 mov 0x2d8(%rbx),%rax ffffffff8000178c: 45 31 ed xor %r13d,%r13d ffffffff8000178f: 90 nop struct flanterm_fb_queue_item *q = &ctx->queue[i]; ffffffff80001790: 4c 89 ed mov %r13,%rbp size_t offset = q->y * _ctx->cols + q->x; ffffffff80001793: 4c 8b a3 e8 00 00 00 mov 0xe8(%rbx),%r12 struct flanterm_fb_queue_item *q = &ctx->queue[i]; ffffffff8000179a: 48 c1 e5 05 shl $0x5,%rbp ffffffff8000179e: 48 03 ab c8 02 00 00 add 0x2c8(%rbx),%rbp size_t offset = q->y * _ctx->cols + q->x; ffffffff800017a5: 48 8b 4d 08 mov 0x8(%rbp),%rcx ffffffff800017a9: 48 8b 55 00 mov 0x0(%rbp),%rdx ffffffff800017ad: 4c 0f af e1 imul %rcx,%r12 ffffffff800017b1: 49 01 d4 add %rdx,%r12 if (ctx->map[offset] == NULL) { ffffffff800017b4: 4a 83 3c e0 00 cmpq $0x0,(%rax,%r12,8) ffffffff800017b9: 74 38 je ffffffff800017f3 continue; } ctx->plot_char(_ctx, &q->c, q->x, q->y); ffffffff800017bb: 48 8d 75 10 lea 0x10(%rbp),%rsi ffffffff800017bf: 48 89 df mov %rbx,%rdi ffffffff800017c2: ff 93 b0 01 00 00 call *0x1b0(%rbx) ctx->grid[offset] = q->c; ffffffff800017c8: 48 8b 93 c0 02 00 00 mov 0x2c0(%rbx),%rdx ffffffff800017cf: 4b 8d 04 64 lea (%r12,%r12,2),%rax ffffffff800017d3: 48 8d 04 82 lea (%rdx,%rax,4),%rax ffffffff800017d7: 48 8b 55 10 mov 0x10(%rbp),%rdx ffffffff800017db: 48 89 10 mov %rdx,(%rax) ffffffff800017de: 8b 55 18 mov 0x18(%rbp),%edx ffffffff800017e1: 89 50 08 mov %edx,0x8(%rax) ctx->map[offset] = NULL; ffffffff800017e4: 48 8b 83 d8 02 00 00 mov 0x2d8(%rbx),%rax ffffffff800017eb: 4a c7 04 e0 00 00 00 movq $0x0,(%rax,%r12,8) ffffffff800017f2: 00 for (size_t i = 0; i < ctx->queue_i; i++) { ffffffff800017f3: 49 83 c5 01 add $0x1,%r13 ffffffff800017f7: 4c 3b ab d0 02 00 00 cmp 0x2d0(%rbx),%r13 ffffffff800017fe: 72 90 jb ffffffff80001790 } if ((ctx->old_cursor_x != ctx->cursor_x || ctx->old_cursor_y != ctx->cursor_y) || _ctx->cursor_enabled == false) { ffffffff80001800: 48 8b 93 10 03 00 00 mov 0x310(%rbx),%rdx ffffffff80001807: 48 8b 8b e8 02 00 00 mov 0x2e8(%rbx),%rcx ffffffff8000180e: 48 39 ca cmp %rcx,%rdx ffffffff80001811: 74 7d je ffffffff80001890 if (ctx->old_cursor_x < _ctx->cols && ctx->old_cursor_y < _ctx->rows) { ffffffff80001813: 48 8b 83 e8 00 00 00 mov 0xe8(%rbx),%rax ffffffff8000181a: 48 39 c2 cmp %rax,%rdx ffffffff8000181d: 73 3c jae ffffffff8000185b ffffffff8000181f: 48 8b b3 18 03 00 00 mov 0x318(%rbx),%rsi ffffffff80001826: 48 3b b3 e0 00 00 00 cmp 0xe0(%rbx),%rsi ffffffff8000182d: 73 2c jae ffffffff8000185b ctx->plot_char(_ctx, &ctx->grid[ctx->old_cursor_x + ctx->old_cursor_y * _ctx->cols], ctx->old_cursor_x, ctx->old_cursor_y); ffffffff8000182f: 48 0f af c6 imul %rsi,%rax ffffffff80001833: 48 89 df mov %rbx,%rdi ffffffff80001836: 48 01 d0 add %rdx,%rax ffffffff80001839: 48 8d 0c 40 lea (%rax,%rax,2),%rcx ffffffff8000183d: 48 8b 83 c0 02 00 00 mov 0x2c0(%rbx),%rax ffffffff80001844: 48 8d 04 88 lea (%rax,%rcx,4),%rax ffffffff80001848: 48 89 f1 mov %rsi,%rcx ffffffff8000184b: 48 89 c6 mov %rax,%rsi ffffffff8000184e: ff 93 b0 01 00 00 call *0x1b0(%rbx) } } ctx->old_cursor_x = ctx->cursor_x; ffffffff80001854: 48 8b 8b e8 02 00 00 mov 0x2e8(%rbx),%rcx ctx->old_cursor_y = ctx->cursor_y; ffffffff8000185b: 48 8b 83 f0 02 00 00 mov 0x2f0(%rbx),%rax ctx->old_cursor_x = ctx->cursor_x; ffffffff80001862: 48 89 8b 10 03 00 00 mov %rcx,0x310(%rbx) ctx->old_cursor_y = ctx->cursor_y; ffffffff80001869: 48 89 83 18 03 00 00 mov %rax,0x318(%rbx) ctx->queue_i = 0; ffffffff80001870: 48 c7 83 d0 02 00 00 movq $0x0,0x2d0(%rbx) ffffffff80001877: 00 00 00 00 } ffffffff8000187b: 48 83 c4 08 add $0x8,%rsp ffffffff8000187f: 5b pop %rbx ffffffff80001880: 5d pop %rbp ffffffff80001881: 41 5c pop %r12 ffffffff80001883: 41 5d pop %r13 ffffffff80001885: c3 ret ffffffff80001886: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff8000188d: 00 00 00 if ((ctx->old_cursor_x != ctx->cursor_x || ctx->old_cursor_y != ctx->cursor_y) || _ctx->cursor_enabled == false) { ffffffff80001890: 48 8b 83 f0 02 00 00 mov 0x2f0(%rbx),%rax ffffffff80001897: 48 39 83 18 03 00 00 cmp %rax,0x318(%rbx) ffffffff8000189e: 0f 85 6f ff ff ff jne ffffffff80001813 ffffffff800018a4: 80 7b 09 00 cmpb $0x0,0x9(%rbx) ffffffff800018a8: 75 b8 jne ffffffff80001862 ffffffff800018aa: e9 64 ff ff ff jmp ffffffff80001813 ffffffff800018af: 90 nop draw_cursor(_ctx); ffffffff800018b0: e8 ab fd ff ff call ffffffff80001660 ffffffff800018b5: e9 c1 fe ff ff jmp ffffffff8000177b ffffffff800018ba: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) ffffffff800018c0 : static void flanterm_fb_raw_putchar(struct flanterm_context *_ctx, uint8_t c) { ffffffff800018c0: f3 0f 1e fa endbr64 ffffffff800018c4: 55 push %rbp ffffffff800018c5: 53 push %rbx ffffffff800018c6: 89 f3 mov %esi,%ebx ffffffff800018c8: 48 83 ec 20 sub $0x20,%rsp struct flanterm_fb_context *ctx = (void *)_ctx; if (ctx->cursor_x >= _ctx->cols && (ctx->cursor_y < _ctx->scroll_bottom_margin - 1 || _ctx->scroll_enabled)) { ffffffff800018cc: 48 8b 97 e8 02 00 00 mov 0x2e8(%rdi),%rdx ffffffff800018d3: 48 8b af e8 00 00 00 mov 0xe8(%rdi),%rbp ffffffff800018da: 48 8b 8f f0 02 00 00 mov 0x2f0(%rdi),%rcx ffffffff800018e1: 48 39 ea cmp %rbp,%rdx ffffffff800018e4: 72 50 jb ffffffff80001936 ffffffff800018e6: 48 8b 47 70 mov 0x70(%rdi),%rax ffffffff800018ea: 48 8d 70 ff lea -0x1(%rax),%rsi ffffffff800018ee: 48 39 f1 cmp %rsi,%rcx ffffffff800018f1: 73 3d jae ffffffff80001930 ctx->cursor_x = 0; ffffffff800018f3: 48 c7 87 e8 02 00 00 movq $0x0,0x2e8(%rdi) ffffffff800018fa: 00 00 00 00 ctx->cursor_y++; ffffffff800018fe: 48 8d 51 01 lea 0x1(%rcx),%rdx if (ctx->cursor_y == _ctx->scroll_bottom_margin) { ffffffff80001902: 48 39 d0 cmp %rdx,%rax ffffffff80001905: 0f 84 7d 00 00 00 je ffffffff80001988 ctx->cursor_y++; ffffffff8000190b: 48 89 97 f0 02 00 00 mov %rdx,0x2f0(%rdi) ffffffff80001912: 48 89 d1 mov %rdx,%rcx ctx->cursor_y--; flanterm_fb_scroll(_ctx); } if (ctx->cursor_y >= _ctx->cols) { ffffffff80001915: 48 39 e9 cmp %rbp,%rcx ffffffff80001918: 72 5e jb ffffffff80001978 ctx->cursor_y = _ctx->cols - 1; ffffffff8000191a: 48 8d 4d ff lea -0x1(%rbp),%rcx ffffffff8000191e: be 01 00 00 00 mov $0x1,%esi ffffffff80001923: 31 d2 xor %edx,%edx ffffffff80001925: 48 89 8f f0 02 00 00 mov %rcx,0x2f0(%rdi) ffffffff8000192c: eb 0c jmp ffffffff8000193a ffffffff8000192e: 66 90 xchg %ax,%ax if (ctx->cursor_x >= _ctx->cols && (ctx->cursor_y < _ctx->scroll_bottom_margin - 1 || _ctx->scroll_enabled)) { ffffffff80001930: 80 7f 0a 00 cmpb $0x0,0xa(%rdi) ffffffff80001934: 75 bd jne ffffffff800018f3 struct flanterm_fb_char ch; ch.c = c; ch.fg = ctx->text_fg; ch.bg = ctx->text_bg; push_to_queue(_ctx, &ch, ctx->cursor_x++, ctx->cursor_y); ffffffff80001936: 48 8d 72 01 lea 0x1(%rdx),%rsi ch.c = c; ffffffff8000193a: 8b 87 e0 02 00 00 mov 0x2e0(%rdi),%eax push_to_queue(_ctx, &ch, ctx->cursor_x++, ctx->cursor_y); ffffffff80001940: 48 89 b7 e8 02 00 00 mov %rsi,0x2e8(%rdi) ch.c = c; ffffffff80001947: 0f b6 db movzbl %bl,%ebx push_to_queue(_ctx, &ch, ctx->cursor_x++, ctx->cursor_y); ffffffff8000194a: 48 8d 74 24 10 lea 0x10(%rsp),%rsi ch.c = c; ffffffff8000194f: 48 c1 e0 20 shl $0x20,%rax ffffffff80001953: 48 09 c3 or %rax,%rbx ch.bg = ctx->text_bg; ffffffff80001956: 8b 87 e4 02 00 00 mov 0x2e4(%rdi),%eax ch.c = c; ffffffff8000195c: 48 89 5c 24 10 mov %rbx,0x10(%rsp) ch.bg = ctx->text_bg; ffffffff80001961: 89 44 24 18 mov %eax,0x18(%rsp) push_to_queue(_ctx, &ch, ctx->cursor_x++, ctx->cursor_y); ffffffff80001965: e8 66 f7 ff ff call ffffffff800010d0 } ffffffff8000196a: 48 83 c4 20 add $0x20,%rsp ffffffff8000196e: 5b pop %rbx ffffffff8000196f: 5d pop %rbp ffffffff80001970: c3 ret ffffffff80001971: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) ffffffff80001978: be 01 00 00 00 mov $0x1,%esi ffffffff8000197d: 31 d2 xor %edx,%edx ffffffff8000197f: eb b9 jmp ffffffff8000193a ffffffff80001981: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) ffffffff80001988: 48 89 4c 24 08 mov %rcx,0x8(%rsp) flanterm_fb_scroll(_ctx); ffffffff8000198d: 48 89 3c 24 mov %rdi,(%rsp) ffffffff80001991: e8 ca f8 ff ff call ffffffff80001260 ffffffff80001996: 48 8b 4c 24 08 mov 0x8(%rsp),%rcx ffffffff8000199b: 48 8b 3c 24 mov (%rsp),%rdi ffffffff8000199f: e9 71 ff ff ff jmp ffffffff80001915 ffffffff800019a4: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff800019ab: 00 00 00 ffffffff800019ae: 66 90 xchg %ax,%ax ffffffff800019b0 : static void flanterm_fb_full_refresh(struct flanterm_context *_ctx) { ffffffff800019b0: f3 0f 1e fa endbr64 ffffffff800019b4: 41 55 push %r13 ffffffff800019b6: 41 54 push %r12 ffffffff800019b8: 55 push %rbp ffffffff800019b9: 53 push %rbx ffffffff800019ba: 48 89 fb mov %rdi,%rbx ffffffff800019bd: 48 83 ec 08 sub $0x8,%rsp struct flanterm_fb_context *ctx = (void *)_ctx; uint32_t default_bg = ctx->default_bg; for (size_t y = 0; y < ctx->height; y++) { ffffffff800019c1: 4c 8b a7 10 02 00 00 mov 0x210(%rdi),%r12 uint32_t default_bg = ctx->default_bg; ffffffff800019c8: 8b af 8c 02 00 00 mov 0x28c(%rdi),%ebp for (size_t y = 0; y < ctx->height; y++) { ffffffff800019ce: 4d 85 e4 test %r12,%r12 ffffffff800019d1: 0f 84 7c 00 00 00 je ffffffff80001a53 for (size_t x = 0; x < ctx->width; x++) { ffffffff800019d7: 48 8b bf 08 02 00 00 mov 0x208(%rdi),%rdi ffffffff800019de: 45 31 db xor %r11d,%r11d for (size_t y = 0; y < ctx->height; y++) { ffffffff800019e1: 45 31 d2 xor %r10d,%r10d ffffffff800019e4: 4c 8d 2c bd 00 00 00 lea 0x0(,%rdi,4),%r13 ffffffff800019eb: 00 ffffffff800019ec: 0f 1f 40 00 nopl 0x0(%rax) for (size_t x = 0; x < ctx->width; x++) { ffffffff800019f0: 48 85 ff test %rdi,%rdi ffffffff800019f3: 74 52 je ffffffff80001a47 if (ctx->canvas != NULL) { ctx->framebuffer[y * (ctx->pitch / sizeof(uint32_t)) + x] = ctx->canvas[y * ctx->width + x]; ffffffff800019f5: 48 8b 8b 00 02 00 00 mov 0x200(%rbx),%rcx ffffffff800019fc: 4c 8b 83 f8 01 00 00 mov 0x1f8(%rbx),%r8 ffffffff80001a03: 31 c0 xor %eax,%eax if (ctx->canvas != NULL) { ffffffff80001a05: 48 8b b3 a0 02 00 00 mov 0x2a0(%rbx),%rsi ctx->framebuffer[y * (ctx->pitch / sizeof(uint32_t)) + x] = ctx->canvas[y * ctx->width + x]; ffffffff80001a0c: 48 c1 e9 02 shr $0x2,%rcx ffffffff80001a10: 49 0f af ca imul %r10,%rcx ffffffff80001a14: 49 8d 14 88 lea (%r8,%rcx,4),%rdx if (ctx->canvas != NULL) { ffffffff80001a18: 48 85 f6 test %rsi,%rsi ffffffff80001a1b: 0f 84 a7 00 00 00 je ffffffff80001ac8 ffffffff80001a21: 4e 8d 0c 1e lea (%rsi,%r11,1),%r9 ffffffff80001a25: eb 11 jmp ffffffff80001a38 ffffffff80001a27: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80001a2e: 00 00 ctx->framebuffer[y * (ctx->pitch / sizeof(uint32_t)) + x] = ctx->canvas[y * ctx->width + x]; ffffffff80001a30: 48 8d 14 08 lea (%rax,%rcx,1),%rdx ffffffff80001a34: 49 8d 14 90 lea (%r8,%rdx,4),%rdx ffffffff80001a38: 41 8b 34 81 mov (%r9,%rax,4),%esi for (size_t x = 0; x < ctx->width; x++) { ffffffff80001a3c: 48 83 c0 01 add $0x1,%rax ctx->framebuffer[y * (ctx->pitch / sizeof(uint32_t)) + x] = ctx->canvas[y * ctx->width + x]; ffffffff80001a40: 89 32 mov %esi,(%rdx) for (size_t x = 0; x < ctx->width; x++) { ffffffff80001a42: 48 39 c7 cmp %rax,%rdi ffffffff80001a45: 75 e9 jne ffffffff80001a30 for (size_t y = 0; y < ctx->height; y++) { ffffffff80001a47: 49 83 c2 01 add $0x1,%r10 ffffffff80001a4b: 4d 01 eb add %r13,%r11 ffffffff80001a4e: 4d 39 e2 cmp %r12,%r10 ffffffff80001a51: 75 9d jne ffffffff800019f0 ctx->framebuffer[y * (ctx->pitch / sizeof(uint32_t)) + x] = default_bg; } } } for (size_t i = 0; i < (size_t)_ctx->rows * _ctx->cols; i++) { ffffffff80001a53: 48 8b 8b e8 00 00 00 mov 0xe8(%rbx),%rcx ffffffff80001a5a: 48 8b 83 e0 00 00 00 mov 0xe0(%rbx),%rax ffffffff80001a61: 31 ed xor %ebp,%ebp ffffffff80001a63: 48 0f af c1 imul %rcx,%rax ffffffff80001a67: 48 85 c0 test %rax,%rax ffffffff80001a6a: 74 43 je ffffffff80001aaf ffffffff80001a6c: 0f 1f 40 00 nopl 0x0(%rax) size_t x = i % _ctx->cols; ffffffff80001a70: 48 89 e8 mov %rbp,%rax ffffffff80001a73: 31 d2 xor %edx,%edx size_t y = i / _ctx->cols; ctx->plot_char(_ctx, &ctx->grid[i], x, y); ffffffff80001a75: 48 8d 74 6d 00 lea 0x0(%rbp,%rbp,2),%rsi ffffffff80001a7a: 48 89 df mov %rbx,%rdi ffffffff80001a7d: 48 f7 f1 div %rcx for (size_t i = 0; i < (size_t)_ctx->rows * _ctx->cols; i++) { ffffffff80001a80: 48 83 c5 01 add $0x1,%rbp ffffffff80001a84: 48 89 c1 mov %rax,%rcx ctx->plot_char(_ctx, &ctx->grid[i], x, y); ffffffff80001a87: 48 8b 83 c0 02 00 00 mov 0x2c0(%rbx),%rax ffffffff80001a8e: 48 8d 34 b0 lea (%rax,%rsi,4),%rsi ffffffff80001a92: ff 93 b0 01 00 00 call *0x1b0(%rbx) for (size_t i = 0; i < (size_t)_ctx->rows * _ctx->cols; i++) { ffffffff80001a98: 48 8b 8b e8 00 00 00 mov 0xe8(%rbx),%rcx ffffffff80001a9f: 48 8b 83 e0 00 00 00 mov 0xe0(%rbx),%rax ffffffff80001aa6: 48 0f af c1 imul %rcx,%rax ffffffff80001aaa: 48 39 c5 cmp %rax,%rbp ffffffff80001aad: 72 c1 jb ffffffff80001a70 } if (_ctx->cursor_enabled) { ffffffff80001aaf: 80 7b 09 00 cmpb $0x0,0x9(%rbx) ffffffff80001ab3: 75 33 jne ffffffff80001ae8 draw_cursor(_ctx); } } ffffffff80001ab5: 48 83 c4 08 add $0x8,%rsp ffffffff80001ab9: 5b pop %rbx ffffffff80001aba: 5d pop %rbp ffffffff80001abb: 41 5c pop %r12 ffffffff80001abd: 41 5d pop %r13 ffffffff80001abf: c3 ret ctx->framebuffer[y * (ctx->pitch / sizeof(uint32_t)) + x] = ctx->canvas[y * ctx->width + x]; ffffffff80001ac0: 48 8d 14 08 lea (%rax,%rcx,1),%rdx ffffffff80001ac4: 49 8d 14 90 lea (%r8,%rdx,4),%rdx for (size_t x = 0; x < ctx->width; x++) { ffffffff80001ac8: 48 83 c0 01 add $0x1,%rax ctx->framebuffer[y * (ctx->pitch / sizeof(uint32_t)) + x] = default_bg; ffffffff80001acc: 89 2a mov %ebp,(%rdx) for (size_t x = 0; x < ctx->width; x++) { ffffffff80001ace: 48 39 f8 cmp %rdi,%rax ffffffff80001ad1: 75 ed jne ffffffff80001ac0 for (size_t y = 0; y < ctx->height; y++) { ffffffff80001ad3: 49 83 c2 01 add $0x1,%r10 ffffffff80001ad7: 4d 01 eb add %r13,%r11 ffffffff80001ada: 4d 39 e2 cmp %r12,%r10 ffffffff80001add: 0f 85 0d ff ff ff jne ffffffff800019f0 ffffffff80001ae3: e9 6b ff ff ff jmp ffffffff80001a53 } ffffffff80001ae8: 48 83 c4 08 add $0x8,%rsp draw_cursor(_ctx); ffffffff80001aec: 48 89 df mov %rbx,%rdi } ffffffff80001aef: 5b pop %rbx ffffffff80001af0: 5d pop %rbp ffffffff80001af1: 41 5c pop %r12 ffffffff80001af3: 41 5d pop %r13 draw_cursor(_ctx); ffffffff80001af5: e9 66 fb ff ff jmp ffffffff80001660 ffffffff80001afa: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) ffffffff80001b00 : static void flanterm_fb_deinit(struct flanterm_context *_ctx, void (*_free)(void *, size_t)) { ffffffff80001b00: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; if (_free == NULL) { ffffffff80001b04: 48 85 f6 test %rsi,%rsi ffffffff80001b07: 0f 84 8b 00 00 00 je ffffffff80001b98 static void flanterm_fb_deinit(struct flanterm_context *_ctx, void (*_free)(void *, size_t)) { ffffffff80001b0d: 55 push %rbp ffffffff80001b0e: 48 89 f5 mov %rsi,%rbp ffffffff80001b11: 53 push %rbx ffffffff80001b12: 48 89 fb mov %rdi,%rbx ffffffff80001b15: 48 83 ec 08 sub $0x8,%rsp } #endif return; } _free(ctx->font_bits, ctx->font_bits_size); ffffffff80001b19: 48 8b b7 28 02 00 00 mov 0x228(%rdi),%rsi ffffffff80001b20: 48 8b bf 30 02 00 00 mov 0x230(%rdi),%rdi ffffffff80001b27: ff d5 call *%rbp _free(ctx->font_bool, ctx->font_bool_size); ffffffff80001b29: 48 8b b3 38 02 00 00 mov 0x238(%rbx),%rsi ffffffff80001b30: 48 8b bb 40 02 00 00 mov 0x240(%rbx),%rdi ffffffff80001b37: ff d5 call *%rbp _free(ctx->grid, ctx->grid_size); ffffffff80001b39: 48 8b b3 a8 02 00 00 mov 0x2a8(%rbx),%rsi ffffffff80001b40: 48 8b bb c0 02 00 00 mov 0x2c0(%rbx),%rdi ffffffff80001b47: ff d5 call *%rbp _free(ctx->queue, ctx->queue_size); ffffffff80001b49: 48 8b b3 b0 02 00 00 mov 0x2b0(%rbx),%rsi ffffffff80001b50: 48 8b bb c8 02 00 00 mov 0x2c8(%rbx),%rdi ffffffff80001b57: ff d5 call *%rbp _free(ctx->map, ctx->map_size); ffffffff80001b59: 48 8b bb d8 02 00 00 mov 0x2d8(%rbx),%rdi ffffffff80001b60: 48 8b b3 b8 02 00 00 mov 0x2b8(%rbx),%rsi ffffffff80001b67: ff d5 call *%rbp if (ctx->canvas != NULL) { ffffffff80001b69: 48 8b bb a0 02 00 00 mov 0x2a0(%rbx),%rdi ffffffff80001b70: 48 85 ff test %rdi,%rdi ffffffff80001b73: 74 09 je ffffffff80001b7e _free(ctx->canvas, ctx->canvas_size); ffffffff80001b75: 48 8b b3 98 02 00 00 mov 0x298(%rbx),%rsi ffffffff80001b7c: ff d5 call *%rbp } _free(ctx, sizeof(struct flanterm_fb_context)); } ffffffff80001b7e: 48 83 c4 08 add $0x8,%rsp _free(ctx, sizeof(struct flanterm_fb_context)); ffffffff80001b82: 48 89 df mov %rbx,%rdi ffffffff80001b85: 48 89 e8 mov %rbp,%rax ffffffff80001b88: be 20 03 00 00 mov $0x320,%esi } ffffffff80001b8d: 5b pop %rbx ffffffff80001b8e: 5d pop %rbp _free(ctx, sizeof(struct flanterm_fb_context)); ffffffff80001b8f: ff e0 jmp *%rax ffffffff80001b91: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) if (bump_allocated_instance == true) { ffffffff80001b98: 80 3d 62 a5 00 00 00 cmpb $0x0,0xa562(%rip) # ffffffff8000c101 ffffffff80001b9f: 74 17 je ffffffff80001bb8 bump_alloc_ptr = 0; ffffffff80001ba1: 48 c7 05 5c a5 00 00 movq $0x0,0xa55c(%rip) # ffffffff8000c108 ffffffff80001ba8: 00 00 00 00 bump_allocated_instance = false; ffffffff80001bac: c6 05 4e a5 00 00 00 movb $0x0,0xa54e(%rip) # ffffffff8000c101 ffffffff80001bb3: c3 ret ffffffff80001bb4: 0f 1f 40 00 nopl 0x0(%rax) ffffffff80001bb8: c3 ret ffffffff80001bb9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) ffffffff80001bc0 : static void plot_char_scaled_canvas(struct flanterm_context *_ctx, struct flanterm_fb_char *c, size_t x, size_t y) { ffffffff80001bc0: f3 0f 1e fa endbr64 ffffffff80001bc4: 41 57 push %r15 ffffffff80001bc6: 41 56 push %r14 ffffffff80001bc8: 41 55 push %r13 ffffffff80001bca: 41 54 push %r12 ffffffff80001bcc: 55 push %rbp ffffffff80001bcd: 53 push %rbx ffffffff80001bce: 48 89 fb mov %rdi,%rbx ffffffff80001bd1: 48 83 ec 48 sub $0x48,%rsp if (x >= _ctx->cols || y >= _ctx->rows) { ffffffff80001bd5: 48 3b 97 e8 00 00 00 cmp 0xe8(%rdi),%rdx ffffffff80001bdc: 0f 83 9b 01 00 00 jae ffffffff80001d7d ffffffff80001be2: 48 3b 8f e0 00 00 00 cmp 0xe0(%rdi),%rcx ffffffff80001be9: 0f 83 8e 01 00 00 jae ffffffff80001d7d ffffffff80001bef: 48 89 f7 mov %rsi,%rdi y = ctx->offset_y + y * ctx->glyph_height; ffffffff80001bf2: 48 8b b3 d0 01 00 00 mov 0x1d0(%rbx),%rsi x = ctx->offset_x + x * ctx->glyph_width; ffffffff80001bf9: 48 0f af 93 c8 01 00 imul 0x1c8(%rbx),%rdx ffffffff80001c00: 00 bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff80001c01: 48 8b ab b8 01 00 00 mov 0x1b8(%rbx),%rbp x = ctx->offset_x + x * ctx->glyph_width; ffffffff80001c08: 48 03 93 e8 01 00 00 add 0x1e8(%rbx),%rdx y = ctx->offset_y + y * ctx->glyph_height; ffffffff80001c0f: 48 89 f0 mov %rsi,%rax ffffffff80001c12: 48 89 74 24 10 mov %rsi,0x10(%rsp) ffffffff80001c17: 48 0f af c1 imul %rcx,%rax bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff80001c1b: 48 8b 8b 40 02 00 00 mov 0x240(%rbx),%rcx y = ctx->offset_y + y * ctx->glyph_height; ffffffff80001c22: 48 03 83 f0 01 00 00 add 0x1f0(%rbx),%rax bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff80001c29: 48 89 4c 24 18 mov %rcx,0x18(%rsp) ffffffff80001c2e: 8b 0f mov (%rdi),%ecx ffffffff80001c30: 48 0f af 8b c0 01 00 imul 0x1c0(%rbx),%rcx ffffffff80001c37: 00 ffffffff80001c38: 48 89 4c 24 20 mov %rcx,0x20(%rsp) for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff80001c3d: 48 85 f6 test %rsi,%rsi ffffffff80001c40: 0f 84 37 01 00 00 je ffffffff80001d7d uint8_t fy = gy / ctx->font_scale_y; ffffffff80001c46: 48 8b b3 e0 01 00 00 mov 0x1e0(%rbx),%rsi uint32_t *canvas_line = ctx->canvas + x + (y + gy) * ctx->width; ffffffff80001c4d: 48 8b 8b 08 02 00 00 mov 0x208(%rbx),%rcx for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff80001c54: 45 31 c9 xor %r9d,%r9d volatile uint32_t *fb_line = ctx->framebuffer + x + (y + gy) * (ctx->pitch / 4); ffffffff80001c57: 4c 8b 93 00 02 00 00 mov 0x200(%rbx),%r10 uint8_t fy = gy / ctx->font_scale_y; ffffffff80001c5e: 48 89 74 24 28 mov %rsi,0x28(%rsp) volatile uint32_t *fb_line = ctx->framebuffer + x + (y + gy) * (ctx->pitch / 4); ffffffff80001c63: 48 8b b3 f8 01 00 00 mov 0x1f8(%rbx),%rsi ffffffff80001c6a: 49 c1 ea 02 shr $0x2,%r10 ffffffff80001c6e: 48 89 74 24 40 mov %rsi,0x40(%rsp) ffffffff80001c73: 48 8d 34 8d 00 00 00 lea 0x0(,%rcx,4),%rsi ffffffff80001c7a: 00 ffffffff80001c7b: 48 0f af c8 imul %rax,%rcx ffffffff80001c7f: 48 89 74 24 38 mov %rsi,0x38(%rsp) ffffffff80001c84: 48 8b b3 a0 02 00 00 mov 0x2a0(%rbx),%rsi ffffffff80001c8b: 49 0f af c2 imul %r10,%rax ffffffff80001c8f: 4c 89 54 24 30 mov %r10,0x30(%rsp) for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff80001c94: 49 89 da mov %rbx,%r10 ffffffff80001c97: 48 01 d1 add %rdx,%rcx ffffffff80001c9a: 4c 8d 34 8e lea (%rsi,%rcx,4),%r14 ffffffff80001c9e: 4c 8d 3c 10 lea (%rax,%rdx,1),%r15 ffffffff80001ca2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) uint8_t fy = gy / ctx->font_scale_y; ffffffff80001ca8: 4c 89 c8 mov %r9,%rax ffffffff80001cab: 31 d2 xor %edx,%edx ffffffff80001cad: 48 f7 74 24 28 divq 0x28(%rsp) bool *glyph_pointer = glyph + (fy * ctx->font_width); ffffffff80001cb2: 0f b6 c8 movzbl %al,%ecx ffffffff80001cb5: 48 8b 44 24 20 mov 0x20(%rsp),%rax ffffffff80001cba: 48 01 c1 add %rax,%rcx ffffffff80001cbd: 48 8b 44 24 18 mov 0x18(%rsp),%rax ffffffff80001cc2: 48 0f af cd imul %rbp,%rcx ffffffff80001cc6: 48 01 c1 add %rax,%rcx for (size_t fx = 0; fx < ctx->font_width; fx++) { ffffffff80001cc9: 48 85 ed test %rbp,%rbp ffffffff80001ccc: 0f 84 8c 00 00 00 je ffffffff80001d5e for (size_t i = 0; i < ctx->font_scale_x; i++) { ffffffff80001cd2: 4d 8b a2 d8 01 00 00 mov 0x1d8(%r10),%r12 ffffffff80001cd9: 48 8b 44 24 40 mov 0x40(%rsp),%rax ffffffff80001cde: 4c 8d 2c 29 lea (%rcx,%rbp,1),%r13 ffffffff80001ce2: 4c 89 ce mov %r9,%rsi ffffffff80001ce5: 48 89 6c 24 08 mov %rbp,0x8(%rsp) ffffffff80001cea: 4e 8d 1c a5 00 00 00 lea 0x0(,%r12,4),%r11 ffffffff80001cf1: 00 ffffffff80001cf2: 4a 8d 1c b8 lea (%rax,%r15,4),%rbx ffffffff80001cf6: 4f 8d 04 33 lea (%r11,%r14,1),%r8 ffffffff80001cfa: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) ffffffff80001d00: 4d 85 e4 test %r12,%r12 ffffffff80001d03: 74 42 je ffffffff80001d47 fb_line[gx] = *glyph_pointer ? fg : bg; ffffffff80001d05: 48 89 0c 24 mov %rcx,(%rsp) ffffffff80001d09: 4c 89 c2 mov %r8,%rdx ffffffff80001d0c: 0f b6 29 movzbl (%rcx),%ebp ffffffff80001d0f: 49 89 d9 mov %rbx,%r9 ffffffff80001d12: 4c 29 da sub %r11,%rdx ffffffff80001d15: 0f 1f 00 nopl (%rax) uint32_t bg = c->bg == 0xffffffff ? canvas_line[gx] : c->bg; ffffffff80001d18: 8b 47 08 mov 0x8(%rdi),%eax ffffffff80001d1b: 83 f8 ff cmp $0xffffffff,%eax ffffffff80001d1e: 75 02 jne ffffffff80001d22 ffffffff80001d20: 8b 02 mov (%rdx),%eax uint32_t fg = c->fg == 0xffffffff ? canvas_line[gx] : c->fg; ffffffff80001d22: 8b 4f 04 mov 0x4(%rdi),%ecx ffffffff80001d25: 83 f9 ff cmp $0xffffffff,%ecx ffffffff80001d28: 75 02 jne ffffffff80001d2c ffffffff80001d2a: 8b 0a mov (%rdx),%ecx fb_line[gx] = *glyph_pointer ? fg : bg; ffffffff80001d2c: 40 84 ed test %bpl,%bpl ffffffff80001d2f: 0f 45 c1 cmovne %ecx,%eax for (size_t i = 0; i < ctx->font_scale_x; i++) { ffffffff80001d32: 48 83 c2 04 add $0x4,%rdx ffffffff80001d36: 49 83 c1 04 add $0x4,%r9 fb_line[gx] = *glyph_pointer ? fg : bg; ffffffff80001d3a: 41 89 41 fc mov %eax,-0x4(%r9) for (size_t i = 0; i < ctx->font_scale_x; i++) { ffffffff80001d3e: 49 39 d0 cmp %rdx,%r8 ffffffff80001d41: 75 d5 jne ffffffff80001d18 ffffffff80001d43: 48 8b 0c 24 mov (%rsp),%rcx glyph_pointer++; ffffffff80001d47: 48 83 c1 01 add $0x1,%rcx for (size_t fx = 0; fx < ctx->font_width; fx++) { ffffffff80001d4b: 4d 01 d8 add %r11,%r8 ffffffff80001d4e: 4c 01 db add %r11,%rbx ffffffff80001d51: 4c 39 e9 cmp %r13,%rcx ffffffff80001d54: 75 aa jne ffffffff80001d00 ffffffff80001d56: 48 8b 6c 24 08 mov 0x8(%rsp),%rbp ffffffff80001d5b: 49 89 f1 mov %rsi,%r9 for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff80001d5e: 48 8b 44 24 38 mov 0x38(%rsp),%rax ffffffff80001d63: 49 83 c1 01 add $0x1,%r9 ffffffff80001d67: 49 01 c6 add %rax,%r14 ffffffff80001d6a: 48 8b 44 24 30 mov 0x30(%rsp),%rax ffffffff80001d6f: 49 01 c7 add %rax,%r15 ffffffff80001d72: 4c 39 4c 24 10 cmp %r9,0x10(%rsp) ffffffff80001d77: 0f 85 2b ff ff ff jne ffffffff80001ca8 } ffffffff80001d7d: 48 83 c4 48 add $0x48,%rsp ffffffff80001d81: 5b pop %rbx ffffffff80001d82: 5d pop %rbp ffffffff80001d83: 41 5c pop %r12 ffffffff80001d85: 41 5d pop %r13 ffffffff80001d87: 41 5e pop %r14 ffffffff80001d89: 41 5f pop %r15 ffffffff80001d8b: c3 ret ffffffff80001d8c: 0f 1f 40 00 nopl 0x0(%rax) ffffffff80001d90 : static void plot_char_unscaled_canvas(struct flanterm_context *_ctx, struct flanterm_fb_char *c, size_t x, size_t y) { ffffffff80001d90: f3 0f 1e fa endbr64 ffffffff80001d94: 48 89 f8 mov %rdi,%rax if (x >= _ctx->cols || y >= _ctx->rows) { ffffffff80001d97: 48 3b 97 e8 00 00 00 cmp 0xe8(%rdi),%rdx ffffffff80001d9e: 0f 83 0c 01 00 00 jae ffffffff80001eb0 ffffffff80001da4: 48 3b 8f e0 00 00 00 cmp 0xe0(%rdi),%rcx ffffffff80001dab: 0f 83 ff 00 00 00 jae ffffffff80001eb0 static void plot_char_unscaled_canvas(struct flanterm_context *_ctx, struct flanterm_fb_char *c, size_t x, size_t y) { ffffffff80001db1: 41 56 push %r14 ffffffff80001db3: 48 89 f7 mov %rsi,%rdi ffffffff80001db6: 41 55 push %r13 ffffffff80001db8: 41 54 push %r12 ffffffff80001dba: 55 push %rbp ffffffff80001dbb: 53 push %rbx y = ctx->offset_y + y * ctx->glyph_height; ffffffff80001dbc: 4c 8b a0 d0 01 00 00 mov 0x1d0(%rax),%r12 bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff80001dc3: 8b 1e mov (%rsi),%ebx ffffffff80001dc5: 4c 8b 88 b8 01 00 00 mov 0x1b8(%rax),%r9 ffffffff80001dcc: 48 8b b0 c0 01 00 00 mov 0x1c0(%rax),%rsi x = ctx->offset_x + x * ctx->glyph_width; ffffffff80001dd3: 48 0f af 90 c8 01 00 imul 0x1c8(%rax),%rdx ffffffff80001dda: 00 y = ctx->offset_y + y * ctx->glyph_height; ffffffff80001ddb: 49 0f af cc imul %r12,%rcx bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff80001ddf: 4c 8b 80 40 02 00 00 mov 0x240(%rax),%r8 x = ctx->offset_x + x * ctx->glyph_width; ffffffff80001de6: 48 03 90 e8 01 00 00 add 0x1e8(%rax),%rdx y = ctx->offset_y + y * ctx->glyph_height; ffffffff80001ded: 49 0f af f1 imul %r9,%rsi ffffffff80001df1: 48 03 88 f0 01 00 00 add 0x1f0(%rax),%rcx for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff80001df8: 4d 85 e4 test %r12,%r12 ffffffff80001dfb: 0f 84 a1 00 00 00 je ffffffff80001ea2 volatile uint32_t *fb_line = ctx->framebuffer + x + (y + gy) * (ctx->pitch / 4); ffffffff80001e01: 48 8b a8 00 02 00 00 mov 0x200(%rax),%rbp uint32_t *canvas_line = ctx->canvas + x + (y + gy) * ctx->width; ffffffff80001e08: 4c 8b 90 08 02 00 00 mov 0x208(%rax),%r10 ffffffff80001e0f: 49 89 cb mov %rcx,%r11 ffffffff80001e12: 48 0f af f3 imul %rbx,%rsi volatile uint32_t *fb_line = ctx->framebuffer + x + (y + gy) * (ctx->pitch / 4); ffffffff80001e16: 4c 8b b0 f8 01 00 00 mov 0x1f8(%rax),%r14 ffffffff80001e1d: 48 8b 80 a0 02 00 00 mov 0x2a0(%rax),%rax for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff80001e24: 31 db xor %ebx,%ebx volatile uint32_t *fb_line = ctx->framebuffer + x + (y + gy) * (ctx->pitch / 4); ffffffff80001e26: 48 c1 ed 02 shr $0x2,%rbp ffffffff80001e2a: 49 0f af ca imul %r10,%rcx ffffffff80001e2e: 4e 8d 2c 95 00 00 00 lea 0x0(,%r10,4),%r13 ffffffff80001e35: 00 ffffffff80001e36: 4c 0f af dd imul %rbp,%r11 ffffffff80001e3a: 49 01 f0 add %rsi,%r8 ffffffff80001e3d: 49 01 d3 add %rdx,%r11 ffffffff80001e40: 48 01 ca add %rcx,%rdx ffffffff80001e43: 4c 8d 14 90 lea (%rax,%rdx,4),%r10 ffffffff80001e47: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80001e4e: 00 00 for (size_t fx = 0; fx < ctx->font_width; fx++) { ffffffff80001e50: 4d 85 c9 test %r9,%r9 ffffffff80001e53: 74 3b je ffffffff80001e90 ffffffff80001e55: 4b 8d 34 9e lea (%r14,%r11,4),%rsi ffffffff80001e59: 31 d2 xor %edx,%edx ffffffff80001e5b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) uint32_t bg = c->bg == 0xffffffff ? canvas_line[fx] : c->bg; ffffffff80001e60: 8b 47 08 mov 0x8(%rdi),%eax ffffffff80001e63: 83 f8 ff cmp $0xffffffff,%eax ffffffff80001e66: 75 04 jne ffffffff80001e6c ffffffff80001e68: 41 8b 04 92 mov (%r10,%rdx,4),%eax uint32_t fg = c->fg == 0xffffffff ? canvas_line[fx] : c->fg; ffffffff80001e6c: 8b 4f 04 mov 0x4(%rdi),%ecx ffffffff80001e6f: 83 f9 ff cmp $0xffffffff,%ecx ffffffff80001e72: 75 04 jne ffffffff80001e78 ffffffff80001e74: 41 8b 0c 92 mov (%r10,%rdx,4),%ecx fb_line[fx] = *(glyph_pointer++) ? fg : bg; ffffffff80001e78: 41 80 3c 10 00 cmpb $0x0,(%r8,%rdx,1) ffffffff80001e7d: 0f 45 c1 cmovne %ecx,%eax for (size_t fx = 0; fx < ctx->font_width; fx++) { ffffffff80001e80: 48 83 c2 01 add $0x1,%rdx ffffffff80001e84: 48 83 c6 04 add $0x4,%rsi fb_line[fx] = *(glyph_pointer++) ? fg : bg; ffffffff80001e88: 89 46 fc mov %eax,-0x4(%rsi) for (size_t fx = 0; fx < ctx->font_width; fx++) { ffffffff80001e8b: 49 39 d1 cmp %rdx,%r9 ffffffff80001e8e: 75 d0 jne ffffffff80001e60 for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff80001e90: 48 83 c3 01 add $0x1,%rbx ffffffff80001e94: 49 01 eb add %rbp,%r11 ffffffff80001e97: 4d 01 c8 add %r9,%r8 ffffffff80001e9a: 4d 01 ea add %r13,%r10 ffffffff80001e9d: 49 39 dc cmp %rbx,%r12 ffffffff80001ea0: 75 ae jne ffffffff80001e50 } ffffffff80001ea2: 5b pop %rbx ffffffff80001ea3: 5d pop %rbp ffffffff80001ea4: 41 5c pop %r12 ffffffff80001ea6: 41 5d pop %r13 ffffffff80001ea8: 41 5e pop %r14 ffffffff80001eaa: c3 ret ffffffff80001eab: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80001eb0: c3 ret ffffffff80001eb1: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80001eb8: 00 00 00 ffffffff80001ebb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80001ec0 : static void plot_char_unscaled_uncanvas(struct flanterm_context *_ctx, struct flanterm_fb_char *c, size_t x, size_t y) { ffffffff80001ec0: f3 0f 1e fa endbr64 if (x >= _ctx->cols || y >= _ctx->rows) { ffffffff80001ec4: 48 3b 97 e8 00 00 00 cmp 0xe8(%rdi),%rdx ffffffff80001ecb: 0f 83 ff 00 00 00 jae ffffffff80001fd0 ffffffff80001ed1: 48 89 f8 mov %rdi,%rax ffffffff80001ed4: 48 3b 8f e0 00 00 00 cmp 0xe0(%rdi),%rcx ffffffff80001edb: 0f 83 ef 00 00 00 jae ffffffff80001fd0 static void plot_char_unscaled_uncanvas(struct flanterm_context *_ctx, struct flanterm_fb_char *c, size_t x, size_t y) { ffffffff80001ee1: 41 57 push %r15 ffffffff80001ee3: 41 56 push %r14 ffffffff80001ee5: 41 55 push %r13 ffffffff80001ee7: 41 54 push %r12 ffffffff80001ee9: 55 push %rbp ffffffff80001eea: 53 push %rbx ffffffff80001eeb: 44 8b 46 08 mov 0x8(%rsi),%r8d uint32_t default_bg = ctx->default_bg; ffffffff80001eef: 44 8b 88 8c 02 00 00 mov 0x28c(%rax),%r9d uint32_t bg = c->bg == 0xffffffff ? default_bg : c->bg; ffffffff80001ef6: 8b 7e 04 mov 0x4(%rsi),%edi ffffffff80001ef9: 41 83 f8 ff cmp $0xffffffff,%r8d y = ctx->offset_y + y * ctx->glyph_height; ffffffff80001efd: 4c 8b a0 d0 01 00 00 mov 0x1d0(%rax),%r12 bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff80001f04: 44 8b 3e mov (%rsi),%r15d ffffffff80001f07: 48 8b 98 b8 01 00 00 mov 0x1b8(%rax),%rbx ffffffff80001f0e: 4c 8b 90 c0 01 00 00 mov 0x1c0(%rax),%r10 uint32_t bg = c->bg == 0xffffffff ? default_bg : c->bg; ffffffff80001f15: 45 0f 44 c1 cmove %r9d,%r8d uint32_t fg = c->fg == 0xffffffff ? default_bg : c->fg; ffffffff80001f19: 83 ff ff cmp $0xffffffff,%edi ffffffff80001f1c: 41 0f 44 f9 cmove %r9d,%edi bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff80001f20: 4c 8b 88 40 02 00 00 mov 0x240(%rax),%r9 x = ctx->offset_x + x * ctx->glyph_width; ffffffff80001f27: 48 0f af 90 c8 01 00 imul 0x1c8(%rax),%rdx ffffffff80001f2e: 00 ffffffff80001f2f: 48 03 90 e8 01 00 00 add 0x1e8(%rax),%rdx y = ctx->offset_y + y * ctx->glyph_height; ffffffff80001f36: 49 0f af cc imul %r12,%rcx ffffffff80001f3a: 48 03 88 f0 01 00 00 add 0x1f0(%rax),%rcx bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff80001f41: 4c 0f af d3 imul %rbx,%r10 for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff80001f45: 4d 85 e4 test %r12,%r12 ffffffff80001f48: 74 7a je ffffffff80001fc4 volatile uint32_t *fb_line = ctx->framebuffer + x + (y + gy) * (ctx->pitch / 4); ffffffff80001f4a: 48 8b a8 00 02 00 00 mov 0x200(%rax),%rbp ffffffff80001f51: 4d 0f af d7 imul %r15,%r10 ffffffff80001f55: 4c 8b b0 f8 01 00 00 mov 0x1f8(%rax),%r14 ffffffff80001f5c: 48 8d 04 1a lea (%rdx,%rbx,1),%rax ffffffff80001f60: 48 c1 ed 02 shr $0x2,%rbp ffffffff80001f64: 48 0f af cd imul %rbp,%rcx ffffffff80001f68: 4d 01 d1 add %r10,%r9 ffffffff80001f6b: 4c 8d 2c ad 00 00 00 lea 0x0(,%rbp,4),%r13 ffffffff80001f72: 00 for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff80001f73: 45 31 d2 xor %r10d,%r10d ffffffff80001f76: 48 01 c8 add %rcx,%rax ffffffff80001f79: 4c 8d 1c 0a lea (%rdx,%rcx,1),%r11 ffffffff80001f7d: 49 8d 34 86 lea (%r14,%rax,4),%rsi ffffffff80001f81: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) bool *glyph_pointer = glyph + (gy * ctx->font_width); ffffffff80001f88: 4c 89 ca mov %r9,%rdx for (size_t fx = 0; fx < ctx->font_width; fx++) { ffffffff80001f8b: 48 85 db test %rbx,%rbx ffffffff80001f8e: 74 22 je ffffffff80001fb2 ffffffff80001f90: 4b 8d 04 9e lea (%r14,%r11,4),%rax ffffffff80001f94: 0f 1f 40 00 nopl 0x0(%rax) fb_line[fx] = *(glyph_pointer++) ? fg : bg; ffffffff80001f98: 48 83 c2 01 add $0x1,%rdx ffffffff80001f9c: 89 f9 mov %edi,%ecx ffffffff80001f9e: 80 7a ff 00 cmpb $0x0,-0x1(%rdx) ffffffff80001fa2: 41 0f 44 c8 cmove %r8d,%ecx for (size_t fx = 0; fx < ctx->font_width; fx++) { ffffffff80001fa6: 48 83 c0 04 add $0x4,%rax fb_line[fx] = *(glyph_pointer++) ? fg : bg; ffffffff80001faa: 89 48 fc mov %ecx,-0x4(%rax) for (size_t fx = 0; fx < ctx->font_width; fx++) { ffffffff80001fad: 48 39 f0 cmp %rsi,%rax ffffffff80001fb0: 75 e6 jne ffffffff80001f98 for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff80001fb2: 49 83 c2 01 add $0x1,%r10 ffffffff80001fb6: 49 01 eb add %rbp,%r11 ffffffff80001fb9: 4c 01 ee add %r13,%rsi ffffffff80001fbc: 49 01 d9 add %rbx,%r9 ffffffff80001fbf: 4d 39 d4 cmp %r10,%r12 ffffffff80001fc2: 75 c4 jne ffffffff80001f88 } ffffffff80001fc4: 5b pop %rbx ffffffff80001fc5: 5d pop %rbp ffffffff80001fc6: 41 5c pop %r12 ffffffff80001fc8: 41 5d pop %r13 ffffffff80001fca: 41 5e pop %r14 ffffffff80001fcc: 41 5f pop %r15 ffffffff80001fce: c3 ret ffffffff80001fcf: 90 nop ffffffff80001fd0: c3 ret ffffffff80001fd1: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80001fd8: 00 00 00 ffffffff80001fdb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80001fe0 : static void plot_char_scaled_uncanvas(struct flanterm_context *_ctx, struct flanterm_fb_char *c, size_t x, size_t y) { ffffffff80001fe0: f3 0f 1e fa endbr64 if (x >= _ctx->cols || y >= _ctx->rows) { ffffffff80001fe4: 48 3b 97 e8 00 00 00 cmp 0xe8(%rdi),%rdx ffffffff80001feb: 0f 83 69 01 00 00 jae ffffffff8000215a static void plot_char_scaled_uncanvas(struct flanterm_context *_ctx, struct flanterm_fb_char *c, size_t x, size_t y) { ffffffff80001ff1: 41 57 push %r15 ffffffff80001ff3: 41 56 push %r14 ffffffff80001ff5: 41 55 push %r13 ffffffff80001ff7: 41 54 push %r12 ffffffff80001ff9: 55 push %rbp ffffffff80001ffa: 48 89 fd mov %rdi,%rbp ffffffff80001ffd: 53 push %rbx ffffffff80001ffe: 48 83 ec 20 sub $0x20,%rsp if (x >= _ctx->cols || y >= _ctx->rows) { ffffffff80002002: 48 3b 8f e0 00 00 00 cmp 0xe0(%rdi),%rcx ffffffff80002009: 0f 83 3c 01 00 00 jae ffffffff8000214b ffffffff8000200f: 44 8b 7e 08 mov 0x8(%rsi),%r15d uint32_t default_bg = ctx->default_bg; ffffffff80002013: 8b 87 8c 02 00 00 mov 0x28c(%rdi),%eax uint32_t bg = c->bg == 0xffffffff ? default_bg : c->bg; ffffffff80002019: 44 8b 76 04 mov 0x4(%rsi),%r14d bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff8000201d: 48 8b 9d 40 02 00 00 mov 0x240(%rbp),%rbx uint32_t bg = c->bg == 0xffffffff ? default_bg : c->bg; ffffffff80002024: 41 83 ff ff cmp $0xffffffff,%r15d ffffffff80002028: 44 0f 44 f8 cmove %eax,%r15d uint32_t fg = c->fg == 0xffffffff ? default_bg : c->fg; ffffffff8000202c: 41 83 fe ff cmp $0xffffffff,%r14d bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff80002030: 48 89 5c 24 08 mov %rbx,0x8(%rsp) ffffffff80002035: 48 8b 9d b8 01 00 00 mov 0x1b8(%rbp),%rbx uint32_t fg = c->fg == 0xffffffff ? default_bg : c->fg; ffffffff8000203c: 44 0f 44 f0 cmove %eax,%r14d x = ctx->offset_x + x * ctx->glyph_width; ffffffff80002040: 48 8b 87 c8 01 00 00 mov 0x1c8(%rdi),%rax ffffffff80002047: 48 0f af c2 imul %rdx,%rax bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff8000204b: 8b 16 mov (%rsi),%edx x = ctx->offset_x + x * ctx->glyph_width; ffffffff8000204d: 48 03 87 e8 01 00 00 add 0x1e8(%rdi),%rax bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff80002054: 48 0f af 95 c0 01 00 imul 0x1c0(%rbp),%rdx ffffffff8000205b: 00 y = ctx->offset_y + y * ctx->glyph_height; ffffffff8000205c: 48 8b bf d0 01 00 00 mov 0x1d0(%rdi),%rdi ffffffff80002063: 49 89 fb mov %rdi,%r11 ffffffff80002066: 48 89 3c 24 mov %rdi,(%rsp) ffffffff8000206a: 4c 0f af d9 imul %rcx,%r11 bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff8000206e: 48 89 54 24 10 mov %rdx,0x10(%rsp) y = ctx->offset_y + y * ctx->glyph_height; ffffffff80002073: 4c 03 9d f0 01 00 00 add 0x1f0(%rbp),%r11 for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff8000207a: 48 85 ff test %rdi,%rdi ffffffff8000207d: 0f 84 c8 00 00 00 je ffffffff8000214b volatile uint32_t *fb_line = ctx->framebuffer + x + (y + gy) * (ctx->pitch / 4); ffffffff80002083: 4c 8b ad 00 02 00 00 mov 0x200(%rbp),%r13 ffffffff8000208a: 48 8b bd f8 01 00 00 mov 0x1f8(%rbp),%rdi for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff80002091: 45 31 d2 xor %r10d,%r10d uint8_t fy = gy / ctx->font_scale_y; ffffffff80002094: 4c 8b a5 e0 01 00 00 mov 0x1e0(%rbp),%r12 volatile uint32_t *fb_line = ctx->framebuffer + x + (y + gy) * (ctx->pitch / 4); ffffffff8000209b: 49 c1 ed 02 shr $0x2,%r13 ffffffff8000209f: 48 89 7c 24 18 mov %rdi,0x18(%rsp) ffffffff800020a4: 4d 0f af dd imul %r13,%r11 ffffffff800020a8: 49 01 c3 add %rax,%r11 ffffffff800020ab: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) uint8_t fy = gy / ctx->font_scale_y; ffffffff800020b0: 4c 89 d0 mov %r10,%rax ffffffff800020b3: 31 d2 xor %edx,%edx ffffffff800020b5: 49 f7 f4 div %r12 bool *glyph_pointer = glyph + (fy * ctx->font_width); ffffffff800020b8: 0f b6 f0 movzbl %al,%esi ffffffff800020bb: 48 8b 44 24 10 mov 0x10(%rsp),%rax ffffffff800020c0: 48 01 c6 add %rax,%rsi ffffffff800020c3: 48 8b 44 24 08 mov 0x8(%rsp),%rax ffffffff800020c8: 48 0f af f3 imul %rbx,%rsi ffffffff800020cc: 48 01 c6 add %rax,%rsi for (size_t fx = 0; fx < ctx->font_width; fx++) { ffffffff800020cf: 48 85 db test %rbx,%rbx ffffffff800020d2: 74 66 je ffffffff8000213a for (size_t i = 0; i < ctx->font_scale_x; i++) { ffffffff800020d4: 4c 8b 85 d8 01 00 00 mov 0x1d8(%rbp),%r8 ffffffff800020db: 48 8b 4c 24 18 mov 0x18(%rsp),%rcx ffffffff800020e0: 4c 8d 0c 1e lea (%rsi,%rbx,1),%r9 ffffffff800020e4: 4b 8d 04 18 lea (%r8,%r11,1),%rax ffffffff800020e8: 4a 8d 3c 85 00 00 00 lea 0x0(,%r8,4),%rdi ffffffff800020ef: 00 ffffffff800020f0: 48 8d 0c 81 lea (%rcx,%rax,4),%rcx ffffffff800020f4: 0f 1f 40 00 nopl 0x0(%rax) ffffffff800020f8: 4d 85 c0 test %r8,%r8 ffffffff800020fb: 74 31 je ffffffff8000212e ffffffff800020fd: 80 3e 00 cmpb $0x0,(%rsi) ffffffff80002100: 44 89 fa mov %r15d,%edx ffffffff80002103: 48 89 c8 mov %rcx,%rax ffffffff80002106: 41 0f 45 d6 cmovne %r14d,%edx ffffffff8000210a: 48 29 f8 sub %rdi,%rax ffffffff8000210d: 40 f6 c7 04 test $0x4,%dil ffffffff80002111: 74 0d je ffffffff80002120 fb_line[gx] = *glyph_pointer ? fg : bg; ffffffff80002113: 89 10 mov %edx,(%rax) for (size_t i = 0; i < ctx->font_scale_x; i++) { ffffffff80002115: 48 83 c0 04 add $0x4,%rax ffffffff80002119: 48 39 c1 cmp %rax,%rcx ffffffff8000211c: 74 10 je ffffffff8000212e ffffffff8000211e: 66 90 xchg %ax,%ax fb_line[gx] = *glyph_pointer ? fg : bg; ffffffff80002120: 89 10 mov %edx,(%rax) for (size_t i = 0; i < ctx->font_scale_x; i++) { ffffffff80002122: 48 83 c0 08 add $0x8,%rax fb_line[gx] = *glyph_pointer ? fg : bg; ffffffff80002126: 89 50 fc mov %edx,-0x4(%rax) for (size_t i = 0; i < ctx->font_scale_x; i++) { ffffffff80002129: 48 39 c1 cmp %rax,%rcx ffffffff8000212c: 75 f2 jne ffffffff80002120 glyph_pointer++; ffffffff8000212e: 48 83 c6 01 add $0x1,%rsi for (size_t fx = 0; fx < ctx->font_width; fx++) { ffffffff80002132: 48 01 f9 add %rdi,%rcx ffffffff80002135: 4c 39 ce cmp %r9,%rsi ffffffff80002138: 75 be jne ffffffff800020f8 for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff8000213a: 49 83 c2 01 add $0x1,%r10 ffffffff8000213e: 4d 01 eb add %r13,%r11 ffffffff80002141: 4c 39 14 24 cmp %r10,(%rsp) ffffffff80002145: 0f 85 65 ff ff ff jne ffffffff800020b0 } ffffffff8000214b: 48 83 c4 20 add $0x20,%rsp ffffffff8000214f: 5b pop %rbx ffffffff80002150: 5d pop %rbp ffffffff80002151: 41 5c pop %r12 ffffffff80002153: 41 5d pop %r13 ffffffff80002155: 41 5e pop %r14 ffffffff80002157: 41 5f pop %r15 ffffffff80002159: c3 ret ffffffff8000215a: c3 ret ffffffff8000215b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80002160 : uint32_t *default_bg, uint32_t *default_fg, uint32_t *default_bg_bright, uint32_t *default_fg_bright, void *font, size_t font_width, size_t font_height, size_t font_spacing, size_t font_scale_x, size_t font_scale_y, size_t margin ) { ffffffff80002160: f3 0f 1e fa endbr64 ffffffff80002164: 41 57 push %r15 ffffffff80002166: 49 89 ff mov %rdi,%r15 ffffffff80002169: 41 56 push %r14 ffffffff8000216b: 41 55 push %r13 ffffffff8000216d: 49 89 cd mov %rcx,%r13 ffffffff80002170: 41 54 push %r12 ffffffff80002172: 4d 89 c4 mov %r8,%r12 ffffffff80002175: 55 push %rbp ffffffff80002176: 53 push %rbx ffffffff80002177: 48 83 ec 48 sub $0x48,%rsp ffffffff8000217b: 8b 84 24 88 00 00 00 mov 0x88(%rsp),%eax ffffffff80002182: 44 8b b4 24 80 00 00 mov 0x80(%rsp),%r14d ffffffff80002189: 00 ffffffff8000218a: 48 89 74 24 18 mov %rsi,0x18(%rsp) if (font_scale_x == 0 || font_scale_y == 0) { ffffffff8000218f: 48 83 bc 24 08 01 00 cmpq $0x0,0x108(%rsp) ffffffff80002196: 00 00 ) { ffffffff80002198: 48 89 54 24 08 mov %rdx,0x8(%rsp) ffffffff8000219d: 89 44 24 34 mov %eax,0x34(%rsp) ffffffff800021a1: 8b 84 24 90 00 00 00 mov 0x90(%rsp),%eax ffffffff800021a8: 4c 89 4c 24 20 mov %r9,0x20(%rsp) ffffffff800021ad: 48 8b ac 24 f8 00 00 mov 0xf8(%rsp),%rbp ffffffff800021b4: 00 ffffffff800021b5: 89 44 24 10 mov %eax,0x10(%rsp) ffffffff800021b9: 8b 84 24 98 00 00 00 mov 0x98(%rsp),%eax ffffffff800021c0: 44 88 74 24 33 mov %r14b,0x33(%rsp) ffffffff800021c5: 89 44 24 38 mov %eax,0x38(%rsp) ffffffff800021c9: 8b 84 24 a0 00 00 00 mov 0xa0(%rsp),%eax ffffffff800021d0: 89 44 24 2c mov %eax,0x2c(%rsp) ffffffff800021d4: 8b 84 24 a8 00 00 00 mov 0xa8(%rsp),%eax ffffffff800021db: 89 44 24 3c mov %eax,0x3c(%rsp) if (font_scale_x == 0 || font_scale_y == 0) { ffffffff800021df: 0f 84 b4 07 00 00 je ffffffff80002999 ffffffff800021e5: 48 83 bc 24 10 01 00 cmpq $0x0,0x110(%rsp) ffffffff800021ec: 00 00 ffffffff800021ee: 0f 84 a5 07 00 00 je ffffffff80002999 font_scale_x = 4; font_scale_y = 4; } } if (red_mask_size < 8 || red_mask_size != green_mask_size || red_mask_size != blue_mask_size) { ffffffff800021f4: 41 80 fe 07 cmp $0x7,%r14b ffffffff800021f8: 0f 96 c0 setbe %al ffffffff800021fb: 44 3a 74 24 10 cmp 0x10(%rsp),%r14b ffffffff80002200: 0f 95 c2 setne %dl ffffffff80002203: 08 d0 or %dl,%al ffffffff80002205: 0f 85 d0 08 00 00 jne ffffffff80002adb ffffffff8000220b: 44 3a 74 24 2c cmp 0x2c(%rsp),%r14b ffffffff80002210: 0f 85 c5 08 00 00 jne ffffffff80002adb return NULL; } if (_malloc == NULL) { ffffffff80002216: 4d 85 ff test %r15,%r15 ffffffff80002219: 0f 84 c9 08 00 00 je ffffffff80002ae8 return NULL; #endif } struct flanterm_fb_context *ctx = NULL; ctx = _malloc(sizeof(struct flanterm_fb_context)); ffffffff8000221f: bf 20 03 00 00 mov $0x320,%edi ffffffff80002224: 41 ff d7 call *%r15 ffffffff80002227: 48 89 c3 mov %rax,%rbx if (ctx == NULL) { ffffffff8000222a: 48 85 c0 test %rax,%rax ffffffff8000222d: 0f 84 a8 08 00 00 je ffffffff80002adb goto fail; } struct flanterm_context *_ctx = (void *)ctx; memset(ctx, 0, sizeof(struct flanterm_fb_context)); ffffffff80002233: 31 f6 xor %esi,%esi ffffffff80002235: ba 20 03 00 00 mov $0x320,%edx ffffffff8000223a: 48 89 c7 mov %rax,%rdi ffffffff8000223d: e8 2e 45 00 00 call ffffffff80006770 ctx->red_mask_size = red_mask_size; ctx->red_mask_shift = red_mask_shift + (red_mask_size - 8); ctx->green_mask_size = green_mask_size; ctx->green_mask_shift = green_mask_shift + (green_mask_size - 8); ffffffff80002242: 8b 74 24 10 mov 0x10(%rsp),%esi ctx->red_mask_shift = red_mask_shift + (red_mask_size - 8); ffffffff80002246: 0f b6 44 24 34 movzbl 0x34(%rsp),%eax ctx->green_mask_shift = green_mask_shift + (green_mask_size - 8); ffffffff8000224b: 0f b6 54 24 38 movzbl 0x38(%rsp),%edx ctx->red_mask_size = red_mask_size; ffffffff80002250: 0f b6 4c 24 33 movzbl 0x33(%rsp),%ecx ctx->green_mask_shift = green_mask_shift + (green_mask_size - 8); ffffffff80002255: 89 f7 mov %esi,%edi ctx->red_mask_shift = red_mask_shift + (red_mask_size - 8); ffffffff80002257: 42 8d 44 30 f8 lea -0x8(%rax,%r14,1),%eax ctx->red_mask_size = red_mask_size; ffffffff8000225c: 40 0f b6 f6 movzbl %sil,%esi ctx->green_mask_shift = green_mask_shift + (green_mask_size - 8); ffffffff80002260: 8d 54 3a f8 lea -0x8(%rdx,%rdi,1),%edx ctx->red_mask_size = red_mask_size; ffffffff80002264: 88 c5 mov %al,%ch ffffffff80002266: c1 e6 10 shl $0x10,%esi return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002269: 44 0f b6 f0 movzbl %al,%r14d ctx->red_mask_size = red_mask_size; ffffffff8000226d: 0f b7 c9 movzwl %cx,%ecx ffffffff80002270: 89 d7 mov %edx,%edi ffffffff80002272: 44 0f b6 da movzbl %dl,%r11d ffffffff80002276: c1 e7 18 shl $0x18,%edi ffffffff80002279: 09 f1 or %esi,%ecx ctx->blue_mask_size = blue_mask_size; ffffffff8000227b: 8b 74 24 2c mov 0x2c(%rsp),%esi ctx->red_mask_size = red_mask_size; ffffffff8000227f: 09 f9 or %edi,%ecx ctx->blue_mask_shift = blue_mask_shift + (blue_mask_size - 8); ffffffff80002281: 0f b6 7c 24 3c movzbl 0x3c(%rsp),%edi if (ansi_colours != NULL) { ffffffff80002286: 48 83 bc 24 b8 00 00 cmpq $0x0,0xb8(%rsp) ffffffff8000228d: 00 00 ctx->blue_mask_size = blue_mask_size; ffffffff8000228f: 40 88 b3 24 02 00 00 mov %sil,0x224(%rbx) ctx->blue_mask_shift = blue_mask_shift + (blue_mask_size - 8); ffffffff80002296: 8d 74 37 f8 lea -0x8(%rdi,%rsi,1),%esi ctx->red_mask_size = red_mask_size; ffffffff8000229a: 89 8b 20 02 00 00 mov %ecx,0x220(%rbx) return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff800022a0: 40 0f b6 fe movzbl %sil,%edi ctx->blue_mask_shift = blue_mask_shift + (blue_mask_size - 8); ffffffff800022a4: 40 88 b3 25 02 00 00 mov %sil,0x225(%rbx) return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff800022ab: 89 7c 24 10 mov %edi,0x10(%rsp) if (ansi_colours != NULL) { ffffffff800022af: 0f 84 d6 08 00 00 je ffffffff80002b8b for (size_t i = 0; i < 8; i++) { ffffffff800022b5: 45 31 c9 xor %r9d,%r9d ctx->ansi_colours[i] = convert_colour(_ctx, ansi_colours[i]); ffffffff800022b8: 48 8b bc 24 b8 00 00 mov 0xb8(%rsp),%rdi ffffffff800022bf: 00 ffffffff800022c0: 46 8b 04 8f mov (%rdi,%r9,4),%r8d uint32_t g = (colour >> 8) & 0xff; ffffffff800022c4: 44 89 c1 mov %r8d,%ecx ffffffff800022c7: 0f b6 fd movzbl %ch,%edi return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff800022ca: 44 89 d9 mov %r11d,%ecx uint32_t g = (colour >> 8) & 0xff; ffffffff800022cd: 41 89 fa mov %edi,%r10d uint32_t r = (colour >> 16) & 0xff; ffffffff800022d0: 44 89 c7 mov %r8d,%edi uint32_t b = colour & 0xff; ffffffff800022d3: 45 0f b6 c0 movzbl %r8b,%r8d uint32_t r = (colour >> 16) & 0xff; ffffffff800022d7: c1 ef 10 shr $0x10,%edi return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff800022da: 41 d3 e2 shl %cl,%r10d ffffffff800022dd: 44 89 f1 mov %r14d,%ecx uint32_t r = (colour >> 16) & 0xff; ffffffff800022e0: 40 0f b6 ff movzbl %dil,%edi return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff800022e4: d3 e7 shl %cl,%edi ffffffff800022e6: 0f b6 4c 24 10 movzbl 0x10(%rsp),%ecx ffffffff800022eb: 44 09 d7 or %r10d,%edi ffffffff800022ee: 41 d3 e0 shl %cl,%r8d ffffffff800022f1: 44 09 c7 or %r8d,%edi ffffffff800022f4: 42 89 bc 8b 48 02 00 mov %edi,0x248(%rbx,%r9,4) ffffffff800022fb: 00 for (size_t i = 0; i < 8; i++) { ffffffff800022fc: 49 83 c1 01 add $0x1,%r9 ffffffff80002300: 49 83 f9 08 cmp $0x8,%r9 ffffffff80002304: 75 b2 jne ffffffff800022b8 ctx->ansi_colours[5] = convert_colour(_ctx, 0x00aa00aa); // magenta ctx->ansi_colours[6] = convert_colour(_ctx, 0x0000aaaa); // cyan ctx->ansi_colours[7] = convert_colour(_ctx, 0x00aaaaaa); // grey } if (ansi_bright_colours != NULL) { ffffffff80002306: 48 83 bc 24 c0 00 00 cmpq $0x0,0xc0(%rsp) ffffffff8000230d: 00 00 ffffffff8000230f: 0f 84 ee 08 00 00 je ffffffff80002c03 for (size_t i = 0; i < 8; i++) { ffffffff80002315: 45 31 c9 xor %r9d,%r9d ctx->ansi_bright_colours[i] = convert_colour(_ctx, ansi_bright_colours[i]); ffffffff80002318: 48 8b bc 24 c0 00 00 mov 0xc0(%rsp),%rdi ffffffff8000231f: 00 return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002320: 44 89 f1 mov %r14d,%ecx ctx->ansi_bright_colours[i] = convert_colour(_ctx, ansi_bright_colours[i]); ffffffff80002323: 46 8b 04 8f mov (%rdi,%r9,4),%r8d uint32_t r = (colour >> 16) & 0xff; ffffffff80002327: 45 89 c2 mov %r8d,%r10d ffffffff8000232a: 41 c1 ea 10 shr $0x10,%r10d ffffffff8000232e: 45 0f b6 d2 movzbl %r10b,%r10d return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002332: 41 d3 e2 shl %cl,%r10d uint32_t g = (colour >> 8) & 0xff; ffffffff80002335: 44 89 c1 mov %r8d,%ecx uint32_t b = colour & 0xff; ffffffff80002338: 45 0f b6 c0 movzbl %r8b,%r8d uint32_t g = (colour >> 8) & 0xff; ffffffff8000233c: 0f b6 fd movzbl %ch,%edi return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff8000233f: 44 89 d9 mov %r11d,%ecx ffffffff80002342: d3 e7 shl %cl,%edi ffffffff80002344: 0f b6 4c 24 10 movzbl 0x10(%rsp),%ecx ffffffff80002349: 44 09 d7 or %r10d,%edi ffffffff8000234c: 41 d3 e0 shl %cl,%r8d ffffffff8000234f: 44 09 c7 or %r8d,%edi ffffffff80002352: 42 89 bc 8b 68 02 00 mov %edi,0x268(%rbx,%r9,4) ffffffff80002359: 00 for (size_t i = 0; i < 8; i++) { ffffffff8000235a: 49 83 c1 01 add $0x1,%r9 ffffffff8000235e: 49 83 f9 08 cmp $0x8,%r9 ffffffff80002362: 75 b4 jne ffffffff80002318 } if (default_bg != NULL) { ctx->default_bg = convert_colour(_ctx, *default_bg); } else { ctx->default_bg = 0x00000000; // background (black) ffffffff80002364: 45 31 c0 xor %r8d,%r8d if (default_bg != NULL) { ffffffff80002367: 48 83 bc 24 c8 00 00 cmpq $0x0,0xc8(%rsp) ffffffff8000236e: 00 00 ffffffff80002370: 74 31 je ffffffff800023a3 ctx->default_bg = convert_colour(_ctx, *default_bg); ffffffff80002372: 48 8b bc 24 c8 00 00 mov 0xc8(%rsp),%rdi ffffffff80002379: 00 ffffffff8000237a: 8b 3f mov (%rdi),%edi uint32_t g = (colour >> 8) & 0xff; ffffffff8000237c: 89 f9 mov %edi,%ecx uint32_t b = colour & 0xff; ffffffff8000237e: 44 0f b6 c7 movzbl %dil,%r8d uint32_t r = (colour >> 16) & 0xff; ffffffff80002382: c1 ef 10 shr $0x10,%edi uint32_t g = (colour >> 8) & 0xff; ffffffff80002385: 0f b6 cd movzbl %ch,%ecx uint32_t r = (colour >> 16) & 0xff; ffffffff80002388: 40 0f b6 ff movzbl %dil,%edi uint32_t g = (colour >> 8) & 0xff; ffffffff8000238c: 41 89 c9 mov %ecx,%r9d return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff8000238f: 89 d1 mov %edx,%ecx ffffffff80002391: 41 d3 e1 shl %cl,%r9d ffffffff80002394: 89 f1 mov %esi,%ecx ffffffff80002396: 41 d3 e0 shl %cl,%r8d ffffffff80002399: 89 c1 mov %eax,%ecx ffffffff8000239b: 45 09 c8 or %r9d,%r8d ffffffff8000239e: d3 e7 shl %cl,%edi ffffffff800023a0: 41 09 f8 or %edi,%r8d } if (default_fg != NULL) { ffffffff800023a3: 48 83 bc 24 d0 00 00 cmpq $0x0,0xd0(%rsp) ffffffff800023aa: 00 00 ffffffff800023ac: 44 89 83 8c 02 00 00 mov %r8d,0x28c(%rbx) ffffffff800023b3: 0f 84 a3 09 00 00 je ffffffff80002d5c ctx->default_fg = convert_colour(_ctx, *default_fg); ffffffff800023b9: 48 8b bc 24 d0 00 00 mov 0xd0(%rsp),%rdi ffffffff800023c0: 00 ffffffff800023c1: 8b 3f mov (%rdi),%edi uint32_t g = (colour >> 8) & 0xff; ffffffff800023c3: 89 f9 mov %edi,%ecx uint32_t b = colour & 0xff; ffffffff800023c5: 44 0f b6 c7 movzbl %dil,%r8d uint32_t r = (colour >> 16) & 0xff; ffffffff800023c9: c1 ef 10 shr $0x10,%edi uint32_t g = (colour >> 8) & 0xff; ffffffff800023cc: 0f b6 cd movzbl %ch,%ecx uint32_t r = (colour >> 16) & 0xff; ffffffff800023cf: 40 0f b6 ff movzbl %dil,%edi uint32_t g = (colour >> 8) & 0xff; ffffffff800023d3: 41 89 c9 mov %ecx,%r9d return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff800023d6: 89 d1 mov %edx,%ecx ffffffff800023d8: 41 d3 e1 shl %cl,%r9d ffffffff800023db: 89 f1 mov %esi,%ecx ffffffff800023dd: 41 d3 e0 shl %cl,%r8d ffffffff800023e0: 89 c1 mov %eax,%ecx ffffffff800023e2: 45 09 c8 or %r9d,%r8d ffffffff800023e5: d3 e7 shl %cl,%edi ffffffff800023e7: 41 09 f8 or %edi,%r8d ffffffff800023ea: 45 89 c2 mov %r8d,%r10d } else { ctx->default_fg = convert_colour(_ctx, 0x00aaaaaa); // foreground (grey) } if (default_bg_bright != NULL) { ffffffff800023ed: 48 83 bc 24 d8 00 00 cmpq $0x0,0xd8(%rsp) ffffffff800023f4: 00 00 ffffffff800023f6: 44 89 93 88 02 00 00 mov %r10d,0x288(%rbx) ffffffff800023fd: 0f 84 cf 08 00 00 je ffffffff80002cd2 ctx->default_bg_bright = convert_colour(_ctx, *default_bg_bright); ffffffff80002403: 48 8b bc 24 d8 00 00 mov 0xd8(%rsp),%rdi ffffffff8000240a: 00 ffffffff8000240b: 44 8b 07 mov (%rdi),%r8d uint32_t g = (colour >> 8) & 0xff; ffffffff8000240e: 44 89 c1 mov %r8d,%ecx ffffffff80002411: 0f b6 fd movzbl %ch,%edi return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002414: 89 d1 mov %edx,%ecx uint32_t g = (colour >> 8) & 0xff; ffffffff80002416: 41 89 f9 mov %edi,%r9d uint32_t b = colour & 0xff; ffffffff80002419: 41 0f b6 f8 movzbl %r8b,%edi uint32_t r = (colour >> 16) & 0xff; ffffffff8000241d: 41 c1 e8 10 shr $0x10,%r8d return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002421: 41 d3 e1 shl %cl,%r9d ffffffff80002424: 89 f1 mov %esi,%ecx uint32_t r = (colour >> 16) & 0xff; ffffffff80002426: 45 0f b6 c0 movzbl %r8b,%r8d return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff8000242a: d3 e7 shl %cl,%edi ffffffff8000242c: 89 c1 mov %eax,%ecx ffffffff8000242e: 44 09 cf or %r9d,%edi ffffffff80002431: 41 d3 e0 shl %cl,%r8d ffffffff80002434: 44 09 c7 or %r8d,%edi } else { ctx->default_bg_bright = convert_colour(_ctx, 0x00555555); // background (black) } if (default_fg_bright != NULL) { ffffffff80002437: 48 83 bc 24 e0 00 00 cmpq $0x0,0xe0(%rsp) ffffffff8000243e: 00 00 ffffffff80002440: 89 bb 94 02 00 00 mov %edi,0x294(%rbx) ffffffff80002446: 0f 84 60 08 00 00 je ffffffff80002cac ctx->default_fg_bright = convert_colour(_ctx, *default_fg_bright); ffffffff8000244c: 48 8b bc 24 e0 00 00 mov 0xe0(%rsp),%rdi ffffffff80002453: 00 ffffffff80002454: 8b 3f mov (%rdi),%edi uint32_t g = (colour >> 8) & 0xff; ffffffff80002456: 89 f9 mov %edi,%ecx ffffffff80002458: 0f b6 cd movzbl %ch,%ecx ffffffff8000245b: 41 89 c8 mov %ecx,%r8d return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff8000245e: 89 d1 mov %edx,%ecx uint32_t b = colour & 0xff; ffffffff80002460: 40 0f b6 d7 movzbl %dil,%edx return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002464: 41 d3 e0 shl %cl,%r8d ffffffff80002467: 89 f1 mov %esi,%ecx uint32_t r = (colour >> 16) & 0xff; ffffffff80002469: 89 fe mov %edi,%esi ffffffff8000246b: c1 ee 10 shr $0x10,%esi return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff8000246e: d3 e2 shl %cl,%edx ffffffff80002470: 89 c1 mov %eax,%ecx uint32_t r = (colour >> 16) & 0xff; ffffffff80002472: 40 0f b6 f6 movzbl %sil,%esi return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002476: 44 09 c2 or %r8d,%edx ffffffff80002479: d3 e6 shl %cl,%esi ffffffff8000247b: 09 f2 or %esi,%edx } ctx->text_fg = ctx->default_fg; ctx->text_bg = 0xffffffff; ctx->framebuffer = (void *)framebuffer; ffffffff8000247d: 48 8b 44 24 08 mov 0x8(%rsp),%rax ffffffff80002482: 89 93 90 02 00 00 mov %edx,0x290(%rbx) ctx->height = height; ctx->pitch = pitch; #define FONT_BYTES ((font_width * font_height * FLANTERM_FB_FONT_GLYPHS) / 8) if (font != NULL) { ffffffff80002488: 48 83 bc 24 e8 00 00 cmpq $0x0,0xe8(%rsp) ffffffff8000248f: 00 00 ctx->text_fg = ctx->default_fg; ffffffff80002491: 44 89 93 e0 02 00 00 mov %r10d,0x2e0(%rbx) ctx->framebuffer = (void *)framebuffer; ffffffff80002498: 48 89 83 f8 01 00 00 mov %rax,0x1f8(%rbx) ctx->pitch = pitch; ffffffff8000249f: 48 8b 44 24 20 mov 0x20(%rsp),%rax ctx->text_bg = 0xffffffff; ffffffff800024a4: c7 83 e4 02 00 00 ff movl $0xffffffff,0x2e4(%rbx) ffffffff800024ab: ff ff ff ctx->width = width; ffffffff800024ae: 4c 89 ab 08 02 00 00 mov %r13,0x208(%rbx) ctx->height = height; ffffffff800024b5: 4c 89 a3 10 02 00 00 mov %r12,0x210(%rbx) ctx->pitch = pitch; ffffffff800024bc: 48 89 83 00 02 00 00 mov %rax,0x200(%rbx) if (font != NULL) { ffffffff800024c3: 0f 84 2e 08 00 00 je ffffffff80002cf7 ctx->font_width = font_width; ffffffff800024c9: 48 8b 84 24 f0 00 00 mov 0xf0(%rsp),%rax ffffffff800024d0: 00 ctx->font_height = font_height; ctx->font_bits_size = FONT_BYTES; ffffffff800024d1: 48 89 ef mov %rbp,%rdi ctx->font_height = font_height; ffffffff800024d4: 48 89 ab c0 01 00 00 mov %rbp,0x1c0(%rbx) ctx->font_bits_size = FONT_BYTES; ffffffff800024db: 48 0f af f8 imul %rax,%rdi ctx->font_width = font_width; ffffffff800024df: 48 89 83 b8 01 00 00 mov %rax,0x1b8(%rbx) ctx->font_bits_size = FONT_BYTES; ffffffff800024e6: 48 c1 e7 08 shl $0x8,%rdi ffffffff800024ea: 48 c1 ef 03 shr $0x3,%rdi ffffffff800024ee: 48 89 bb 28 02 00 00 mov %rdi,0x228(%rbx) ctx->font_bits = _malloc(ctx->font_bits_size); ffffffff800024f5: 41 ff d7 call *%r15 ffffffff800024f8: 48 89 83 30 02 00 00 mov %rax,0x230(%rbx) ffffffff800024ff: 48 89 c7 mov %rax,%rdi if (ctx->font_bits == NULL) { ffffffff80002502: 48 85 c0 test %rax,%rax ffffffff80002505: 0f 84 0f 05 00 00 je ffffffff80002a1a goto fail; } memcpy(ctx->font_bits, font, ctx->font_bits_size); ffffffff8000250b: 48 8b 93 28 02 00 00 mov 0x228(%rbx),%rdx ffffffff80002512: 48 8b b4 24 e8 00 00 mov 0xe8(%rsp),%rsi ffffffff80002519: 00 ffffffff8000251a: e8 21 42 00 00 call ffffffff80006740 memcpy(ctx->font_bits, builtin_font, ctx->font_bits_size); } #undef FONT_BYTES ctx->font_width += font_spacing; ffffffff8000251f: 48 8b 84 24 00 01 00 mov 0x100(%rsp),%rax ffffffff80002526: 00 ffffffff80002527: 48 03 83 b8 01 00 00 add 0x1b8(%rbx),%rax ffffffff8000252e: 48 89 83 b8 01 00 00 mov %rax,0x1b8(%rbx) ctx->font_bool_size = FLANTERM_FB_FONT_GLYPHS * font_height * ctx->font_width * sizeof(bool); ffffffff80002535: 48 0f af c5 imul %rbp,%rax ffffffff80002539: 48 c1 e0 08 shl $0x8,%rax ffffffff8000253d: 48 89 83 38 02 00 00 mov %rax,0x238(%rbx) ffffffff80002544: 48 89 c7 mov %rax,%rdi ctx->font_bool = _malloc(ctx->font_bool_size); ffffffff80002547: 41 ff d7 call *%r15 ffffffff8000254a: 48 89 83 40 02 00 00 mov %rax,0x240(%rbx) ffffffff80002551: 48 89 c2 mov %rax,%rdx if (ctx->font_bool == NULL) { ffffffff80002554: 48 85 c0 test %rax,%rax ffffffff80002557: 0f 84 bd 04 00 00 je ffffffff80002a1a } ctx->font_scale_x = font_scale_x; ctx->font_scale_y = font_scale_y; ctx->glyph_width = ctx->font_width * font_scale_x; ffffffff8000255d: 4c 8b 93 b8 01 00 00 mov 0x1b8(%rbx),%r10 ffffffff80002564: 49 89 ee mov %rbp,%r14 ffffffff80002567: 45 31 e4 xor %r12d,%r12d if ((glyph[y] & (0x80 >> x))) { ffffffff8000256a: 48 89 de mov %rbx,%rsi ffffffff8000256d: 4c 8b ab 30 02 00 00 mov 0x230(%rbx),%r13 ctx->glyph_width = ctx->font_width * font_scale_x; ffffffff80002574: 49 c7 c1 40 ff ff ff mov $0xffffffffffffff40,%r9 if ((glyph[y] & (0x80 >> x))) { ffffffff8000257b: 41 b8 80 00 00 00 mov $0x80,%r8d ffffffff80002581: 4d 0f af f2 imul %r10,%r14 ffffffff80002585: 4e 8d 5c 2d 00 lea 0x0(%rbp,%r13,1),%r11 ffffffff8000258a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) for (size_t y = 0; y < font_height; y++) { ffffffff80002590: 4a 8d 3c 12 lea (%rdx,%r10,1),%rdi ffffffff80002594: 4b 8d 04 2c lea (%r12,%r13,1),%rax ffffffff80002598: 48 89 d3 mov %rdx,%rbx ffffffff8000259b: 48 85 ed test %rbp,%rbp ffffffff8000259e: 74 64 je ffffffff80002604 ffffffff800025a0: 4c 89 64 24 10 mov %r12,0x10(%rsp) ffffffff800025a5: 0f 1f 00 nopl (%rax) for (size_t x = 0; x < 8; x++) { ffffffff800025a8: 4c 89 74 24 08 mov %r14,0x8(%rsp) ffffffff800025ad: 31 c9 xor %ecx,%ecx ffffffff800025af: 90 nop if ((glyph[y] & (0x80 >> x))) { ffffffff800025b0: 44 0f b6 20 movzbl (%rax),%r12d ffffffff800025b4: 45 89 c6 mov %r8d,%r14d ffffffff800025b7: 41 d3 fe sar %cl,%r14d ffffffff800025ba: 45 85 e6 test %r12d,%r14d ctx->font_bool[offset] = true; ffffffff800025bd: 0f 95 04 0b setne (%rbx,%rcx,1) for (size_t x = 0; x < 8; x++) { ffffffff800025c1: 48 83 c1 01 add $0x1,%rcx ffffffff800025c5: 48 83 f9 08 cmp $0x8,%rcx ffffffff800025c9: 75 e5 jne ffffffff800025b0 ffffffff800025cb: 4c 8b 74 24 08 mov 0x8(%rsp),%r14 for (size_t x = 8; x < ctx->font_width; x++) { ffffffff800025d0: 48 8d 4b 08 lea 0x8(%rbx),%rcx ffffffff800025d4: 49 83 fa 08 cmp $0x8,%r10 ffffffff800025d8: 76 16 jbe ffffffff800025f0 if (i >= 0xc0 && i <= 0xdf) { ffffffff800025da: 49 83 f9 1f cmp $0x1f,%r9 ffffffff800025de: 0f 86 1c 04 00 00 jbe ffffffff80002a00 ctx->font_bool[offset] = (glyph[y] & 1); ffffffff800025e4: c6 01 00 movb $0x0,(%rcx) for (size_t x = 8; x < ctx->font_width; x++) { ffffffff800025e7: 48 83 c1 01 add $0x1,%rcx ffffffff800025eb: 48 39 f9 cmp %rdi,%rcx ffffffff800025ee: 75 ea jne ffffffff800025da for (size_t y = 0; y < font_height; y++) { ffffffff800025f0: 48 83 c0 01 add $0x1,%rax ffffffff800025f4: 4c 01 d7 add %r10,%rdi ffffffff800025f7: 4c 01 d3 add %r10,%rbx ffffffff800025fa: 49 39 c3 cmp %rax,%r11 ffffffff800025fd: 75 a9 jne ffffffff800025a8 ffffffff800025ff: 4c 8b 64 24 10 mov 0x10(%rsp),%r12 for (size_t i = 0; i < FLANTERM_FB_FONT_GLYPHS; i++) { ffffffff80002604: 49 83 c1 01 add $0x1,%r9 ffffffff80002608: 49 01 eb add %rbp,%r11 ffffffff8000260b: 4c 01 f2 add %r14,%rdx ffffffff8000260e: 49 01 ec add %rbp,%r12 ffffffff80002611: 49 83 f9 40 cmp $0x40,%r9 ffffffff80002615: 0f 85 75 ff ff ff jne ffffffff80002590 ctx->font_scale_x = font_scale_x; ffffffff8000261b: 48 8b 84 24 08 01 00 mov 0x108(%rsp),%rax ffffffff80002622: 00 ffffffff80002623: 31 d2 xor %edx,%edx ffffffff80002625: 48 89 f3 mov %rsi,%rbx ctx->glyph_width = ctx->font_width * font_scale_x; ffffffff80002628: 4c 0f af 94 24 08 01 imul 0x108(%rsp),%r10 ffffffff8000262f: 00 00 ctx->font_scale_x = font_scale_x; ffffffff80002631: 48 89 86 d8 01 00 00 mov %rax,0x1d8(%rsi) ctx->font_scale_y = font_scale_y; ffffffff80002638: 48 8b 84 24 10 01 00 mov 0x110(%rsp),%rax ffffffff8000263f: 00 ffffffff80002640: 48 89 86 e0 01 00 00 mov %rax,0x1e0(%rsi) ctx->glyph_height = font_height * font_scale_y; ffffffff80002647: 48 0f af e8 imul %rax,%rbp _ctx->cols = (ctx->width - margin * 2) / ctx->glyph_width; ffffffff8000264b: 48 8b 84 24 18 01 00 mov 0x118(%rsp),%rax ffffffff80002652: 00 ctx->glyph_width = ctx->font_width * font_scale_x; ffffffff80002653: 4c 89 96 c8 01 00 00 mov %r10,0x1c8(%rsi) _ctx->cols = (ctx->width - margin * 2) / ctx->glyph_width; ffffffff8000265a: 48 8d 3c 00 lea (%rax,%rax,1),%rdi ffffffff8000265e: 48 8b 86 08 02 00 00 mov 0x208(%rsi),%rax ctx->glyph_height = font_height * font_scale_y; ffffffff80002665: 48 89 ae d0 01 00 00 mov %rbp,0x1d0(%rsi) _ctx->cols = (ctx->width - margin * 2) / ctx->glyph_width; ffffffff8000266c: 48 29 f8 sub %rdi,%rax ffffffff8000266f: 49 f7 f2 div %r10 ffffffff80002672: 48 89 83 e8 00 00 00 mov %rax,0xe8(%rbx) _ctx->rows = (ctx->height - margin * 2) / ctx->glyph_height; ffffffff80002679: 48 89 c1 mov %rax,%rcx ffffffff8000267c: 48 89 d6 mov %rdx,%rsi ffffffff8000267f: 31 d2 xor %edx,%edx ffffffff80002681: 48 8b 83 10 02 00 00 mov 0x210(%rbx),%rax ctx->offset_x = margin + ((ctx->width - margin * 2) % ctx->glyph_width) / 2; ffffffff80002688: 48 d1 ee shr $1,%rsi ffffffff8000268b: 48 03 b4 24 18 01 00 add 0x118(%rsp),%rsi ffffffff80002692: 00 ffffffff80002693: 48 89 b3 e8 01 00 00 mov %rsi,0x1e8(%rbx) _ctx->rows = (ctx->height - margin * 2) / ctx->glyph_height; ffffffff8000269a: 48 29 f8 sub %rdi,%rax ffffffff8000269d: 48 f7 f5 div %rbp ctx->offset_y = margin + ((ctx->height - margin * 2) % ctx->glyph_height) / 2; ctx->grid_size = _ctx->rows * _ctx->cols * sizeof(struct flanterm_fb_char); ffffffff800026a0: 48 0f af c8 imul %rax,%rcx ctx->offset_y = margin + ((ctx->height - margin * 2) % ctx->glyph_height) / 2; ffffffff800026a4: 48 d1 ea shr $1,%rdx ffffffff800026a7: 48 03 94 24 18 01 00 add 0x118(%rsp),%rdx ffffffff800026ae: 00 _ctx->rows = (ctx->height - margin * 2) / ctx->glyph_height; ffffffff800026af: 48 89 83 e0 00 00 00 mov %rax,0xe0(%rbx) ctx->offset_y = margin + ((ctx->height - margin * 2) % ctx->glyph_height) / 2; ffffffff800026b6: 48 89 93 f0 01 00 00 mov %rdx,0x1f0(%rbx) ctx->grid_size = _ctx->rows * _ctx->cols * sizeof(struct flanterm_fb_char); ffffffff800026bd: 48 8d 3c 49 lea (%rcx,%rcx,2),%rdi ffffffff800026c1: 48 c1 e7 02 shl $0x2,%rdi ffffffff800026c5: 48 89 bb a8 02 00 00 mov %rdi,0x2a8(%rbx) ctx->grid = _malloc(ctx->grid_size); ffffffff800026cc: 41 ff d7 call *%r15 ffffffff800026cf: 48 89 83 c0 02 00 00 mov %rax,0x2c0(%rbx) if (ctx->grid == NULL) { ffffffff800026d6: 48 85 c0 test %rax,%rax ffffffff800026d9: 0f 84 3b 03 00 00 je ffffffff80002a1a goto fail; } for (size_t i = 0; i < _ctx->rows * _ctx->cols; i++) { ffffffff800026df: 48 8b bb e0 00 00 00 mov 0xe0(%rbx),%rdi ffffffff800026e6: 48 0f af bb e8 00 00 imul 0xe8(%rbx),%rdi ffffffff800026ed: 00 ffffffff800026ee: 48 85 ff test %rdi,%rdi ffffffff800026f1: 74 2d je ffffffff80002720 ffffffff800026f3: 48 8d 14 7f lea (%rdi,%rdi,2),%rdx ctx->grid[i].c = ' '; ctx->grid[i].fg = ctx->text_fg; ffffffff800026f7: 8b b3 e0 02 00 00 mov 0x2e0(%rbx),%esi ctx->grid[i].bg = ctx->text_bg; ffffffff800026fd: 8b 8b e4 02 00 00 mov 0x2e4(%rbx),%ecx ffffffff80002703: 48 8d 14 90 lea (%rax,%rdx,4),%rdx ctx->grid[i].c = ' '; ffffffff80002707: c7 00 20 00 00 00 movl $0x20,(%rax) for (size_t i = 0; i < _ctx->rows * _ctx->cols; i++) { ffffffff8000270d: 48 83 c0 0c add $0xc,%rax ctx->grid[i].fg = ctx->text_fg; ffffffff80002711: 89 70 f8 mov %esi,-0x8(%rax) ctx->grid[i].bg = ctx->text_bg; ffffffff80002714: 89 48 fc mov %ecx,-0x4(%rax) for (size_t i = 0; i < _ctx->rows * _ctx->cols; i++) { ffffffff80002717: 48 39 c2 cmp %rax,%rdx ffffffff8000271a: 75 eb jne ffffffff80002707 } ctx->queue_size = _ctx->rows * _ctx->cols * sizeof(struct flanterm_fb_queue_item); ffffffff8000271c: 48 c1 e7 05 shl $0x5,%rdi ffffffff80002720: 48 89 bb b0 02 00 00 mov %rdi,0x2b0(%rbx) ctx->queue = _malloc(ctx->queue_size); ffffffff80002727: 41 ff d7 call *%r15 ffffffff8000272a: 48 89 83 c8 02 00 00 mov %rax,0x2c8(%rbx) ffffffff80002731: 48 89 c7 mov %rax,%rdi if (ctx->queue == NULL) { ffffffff80002734: 48 85 c0 test %rax,%rax ffffffff80002737: 0f 84 dd 02 00 00 je ffffffff80002a1a goto fail; } ctx->queue_i = 0; ffffffff8000273d: 48 c7 83 d0 02 00 00 movq $0x0,0x2d0(%rbx) ffffffff80002744: 00 00 00 00 memset(ctx->queue, 0, ctx->queue_size); ffffffff80002748: 48 8b 93 b0 02 00 00 mov 0x2b0(%rbx),%rdx ffffffff8000274f: 31 f6 xor %esi,%esi ffffffff80002751: e8 1a 40 00 00 call ffffffff80006770 ctx->map_size = _ctx->rows * _ctx->cols * sizeof(struct flanterm_fb_queue_item *); ffffffff80002756: 48 8b bb e0 00 00 00 mov 0xe0(%rbx),%rdi ffffffff8000275d: 48 0f af bb e8 00 00 imul 0xe8(%rbx),%rdi ffffffff80002764: 00 ffffffff80002765: 48 c1 e7 03 shl $0x3,%rdi ffffffff80002769: 48 89 bb b8 02 00 00 mov %rdi,0x2b8(%rbx) ctx->map = _malloc(ctx->map_size); ffffffff80002770: 41 ff d7 call *%r15 ffffffff80002773: 48 89 83 d8 02 00 00 mov %rax,0x2d8(%rbx) ffffffff8000277a: 48 89 c7 mov %rax,%rdi if (ctx->map == NULL) { ffffffff8000277d: 48 85 c0 test %rax,%rax ffffffff80002780: 0f 84 94 02 00 00 je ffffffff80002a1a goto fail; } memset(ctx->map, 0, ctx->map_size); ffffffff80002786: 48 8b 93 b8 02 00 00 mov 0x2b8(%rbx),%rdx ffffffff8000278d: 31 f6 xor %esi,%esi ffffffff8000278f: e8 dc 3f 00 00 call ffffffff80006770 if (canvas != NULL) { ffffffff80002794: 48 83 bc 24 b0 00 00 cmpq $0x0,0xb0(%rsp) ffffffff8000279b: 00 00 ffffffff8000279d: 0f 84 e0 05 00 00 je ffffffff80002d83 ctx->canvas_size = ctx->width * ctx->height * sizeof(uint32_t); ffffffff800027a3: 48 8b bb 08 02 00 00 mov 0x208(%rbx),%rdi ffffffff800027aa: 48 0f af bb 10 02 00 imul 0x210(%rbx),%rdi ffffffff800027b1: 00 ffffffff800027b2: 48 c1 e7 02 shl $0x2,%rdi ffffffff800027b6: 48 89 bb 98 02 00 00 mov %rdi,0x298(%rbx) ctx->canvas = _malloc(ctx->canvas_size); ffffffff800027bd: 41 ff d7 call *%r15 ffffffff800027c0: 48 89 83 a0 02 00 00 mov %rax,0x2a0(%rbx) ffffffff800027c7: 48 89 c7 mov %rax,%rdi if (ctx->canvas == NULL) { ffffffff800027ca: 48 85 c0 test %rax,%rax ffffffff800027cd: 0f 84 47 02 00 00 je ffffffff80002a1a goto fail; } for (size_t i = 0; i < ctx->width * ctx->height; i++) { ffffffff800027d3: 4c 8b 9b 08 02 00 00 mov 0x208(%rbx),%r11 ffffffff800027da: 4c 0f af 9b 10 02 00 imul 0x210(%rbx),%r11 ffffffff800027e1: 00 ffffffff800027e2: 4d 85 db test %r11,%r11 ffffffff800027e5: 74 5a je ffffffff80002841 return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff800027e7: 44 0f b6 93 21 02 00 movzbl 0x221(%rbx),%r10d ffffffff800027ee: 00 ffffffff800027ef: 44 0f b6 8b 23 02 00 movzbl 0x223(%rbx),%r9d ffffffff800027f6: 00 for (size_t i = 0; i < ctx->width * ctx->height; i++) { ffffffff800027f7: 31 f6 xor %esi,%esi return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff800027f9: 44 0f b6 83 25 02 00 movzbl 0x225(%rbx),%r8d ffffffff80002800: 00 for (size_t i = 0; i < ctx->width * ctx->height; i++) { ffffffff80002801: 48 8b 94 24 b0 00 00 mov 0xb0(%rsp),%rdx ffffffff80002808: 00 ctx->canvas[i] = convert_colour(_ctx, canvas[i]); ffffffff80002809: 8b 2c b2 mov (%rdx,%rsi,4),%ebp return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff8000280c: 44 89 d1 mov %r10d,%ecx uint32_t r = (colour >> 16) & 0xff; ffffffff8000280f: 89 e8 mov %ebp,%eax ffffffff80002811: c1 e8 10 shr $0x10,%eax ffffffff80002814: 0f b6 c0 movzbl %al,%eax return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002817: d3 e0 shl %cl,%eax uint32_t g = (colour >> 8) & 0xff; ffffffff80002819: 89 e9 mov %ebp,%ecx uint32_t b = colour & 0xff; ffffffff8000281b: 40 0f b6 ed movzbl %bpl,%ebp uint32_t g = (colour >> 8) & 0xff; ffffffff8000281f: 0f b6 cd movzbl %ch,%ecx ffffffff80002822: 41 89 cc mov %ecx,%r12d return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002825: 44 89 c9 mov %r9d,%ecx ffffffff80002828: 41 d3 e4 shl %cl,%r12d ffffffff8000282b: 44 89 c1 mov %r8d,%ecx ffffffff8000282e: 44 09 e0 or %r12d,%eax ffffffff80002831: d3 e5 shl %cl,%ebp ffffffff80002833: 09 e8 or %ebp,%eax ffffffff80002835: 89 04 b7 mov %eax,(%rdi,%rsi,4) for (size_t i = 0; i < ctx->width * ctx->height; i++) { ffffffff80002838: 48 83 c6 01 add $0x1,%rsi ffffffff8000283c: 49 39 f3 cmp %rsi,%r11 ffffffff8000283f: 75 c8 jne ffffffff80002809 } } if (font_scale_x == 1 && font_scale_y == 1) { ffffffff80002841: 48 83 bc 24 08 01 00 cmpq $0x1,0x108(%rsp) ffffffff80002848: 00 01 ffffffff8000284a: 0f 85 6c 05 00 00 jne ffffffff80002dbc ffffffff80002850: 48 83 bc 24 10 01 00 cmpq $0x1,0x110(%rsp) ffffffff80002857: 00 01 ffffffff80002859: 48 c7 c0 90 1d 00 80 mov $0xffffffff80001d90,%rax ffffffff80002860: 0f 85 56 05 00 00 jne ffffffff80002dbc if (canvas == NULL) { ctx->plot_char = plot_char_unscaled_uncanvas; } else { ctx->plot_char = plot_char_unscaled_canvas; ffffffff80002866: 48 89 83 b0 01 00 00 mov %rax,0x1b0(%rbx) _ctx->restore_state = flanterm_fb_restore_state; _ctx->double_buffer_flush = flanterm_fb_double_buffer_flush; _ctx->full_refresh = flanterm_fb_full_refresh; _ctx->deinit = flanterm_fb_deinit; flanterm_context_reinit(_ctx); ffffffff8000286d: 48 89 df mov %rbx,%rdi _ctx->raw_putchar = flanterm_fb_raw_putchar; ffffffff80002870: 48 c7 83 f0 00 00 00 movq $0xffffffff800018c0,0xf0(%rbx) ffffffff80002877: c0 18 00 80 _ctx->clear = flanterm_fb_clear; ffffffff8000287b: 48 c7 83 f8 00 00 00 movq $0xffffffff80001350,0xf8(%rbx) ffffffff80002882: 50 13 00 80 _ctx->set_cursor_pos = flanterm_fb_set_cursor_pos; ffffffff80002886: 48 c7 83 00 01 00 00 movq $0xffffffff800013e0,0x100(%rbx) ffffffff8000288d: e0 13 00 80 _ctx->get_cursor_pos = flanterm_fb_get_cursor_pos; ffffffff80002891: 48 c7 83 08 01 00 00 movq $0xffffffff80001430,0x108(%rbx) ffffffff80002898: 30 14 00 80 _ctx->set_text_fg = flanterm_fb_set_text_fg; ffffffff8000289c: 48 c7 83 10 01 00 00 movq $0xffffffff800014f0,0x110(%rbx) ffffffff800028a3: f0 14 00 80 _ctx->set_text_bg = flanterm_fb_set_text_bg; ffffffff800028a7: 48 c7 83 18 01 00 00 movq $0xffffffff80001510,0x118(%rbx) ffffffff800028ae: 10 15 00 80 _ctx->set_text_fg_bright = flanterm_fb_set_text_fg_bright; ffffffff800028b2: 48 c7 83 20 01 00 00 movq $0xffffffff80001530,0x120(%rbx) ffffffff800028b9: 30 15 00 80 _ctx->set_text_bg_bright = flanterm_fb_set_text_bg_bright; ffffffff800028bd: 48 c7 83 28 01 00 00 movq $0xffffffff80001550,0x128(%rbx) ffffffff800028c4: 50 15 00 80 _ctx->set_text_fg_rgb = flanterm_fb_set_text_fg_rgb; ffffffff800028c8: 48 c7 83 30 01 00 00 movq $0xffffffff80001570,0x130(%rbx) ffffffff800028cf: 70 15 00 80 _ctx->set_text_bg_rgb = flanterm_fb_set_text_bg_rgb; ffffffff800028d3: 48 c7 83 38 01 00 00 movq $0xffffffff800015b0,0x138(%rbx) ffffffff800028da: b0 15 00 80 _ctx->set_text_fg_default = flanterm_fb_set_text_fg_default; ffffffff800028de: 48 c7 83 40 01 00 00 movq $0xffffffff800015f0,0x140(%rbx) ffffffff800028e5: f0 15 00 80 _ctx->set_text_bg_default = flanterm_fb_set_text_bg_default; ffffffff800028e9: 48 c7 83 48 01 00 00 movq $0xffffffff80001610,0x148(%rbx) ffffffff800028f0: 10 16 00 80 _ctx->set_text_fg_default_bright = flanterm_fb_set_text_fg_default_bright; ffffffff800028f4: 48 c7 83 50 01 00 00 movq $0xffffffff80001620,0x150(%rbx) ffffffff800028fb: 20 16 00 80 _ctx->set_text_bg_default_bright = flanterm_fb_set_text_bg_default_bright; ffffffff800028ff: 48 c7 83 58 01 00 00 movq $0xffffffff80001640,0x158(%rbx) ffffffff80002906: 40 16 00 80 _ctx->move_character = flanterm_fb_move_character; ffffffff8000290a: 48 c7 83 60 01 00 00 movq $0xffffffff80001470,0x160(%rbx) ffffffff80002911: 70 14 00 80 _ctx->scroll = flanterm_fb_scroll; ffffffff80002915: 48 c7 83 68 01 00 00 movq $0xffffffff80001260,0x168(%rbx) ffffffff8000291c: 60 12 00 80 _ctx->revscroll = flanterm_fb_revscroll; ffffffff80002920: 48 c7 83 70 01 00 00 movq $0xffffffff80001180,0x170(%rbx) ffffffff80002927: 80 11 00 80 _ctx->swap_palette = flanterm_fb_swap_palette; ffffffff8000292b: 48 c7 83 78 01 00 00 movq $0xffffffff800010b0,0x178(%rbx) ffffffff80002932: b0 10 00 80 _ctx->save_state = flanterm_fb_save_state; ffffffff80002936: 48 c7 83 80 01 00 00 movq $0xffffffff80001050,0x180(%rbx) ffffffff8000293d: 50 10 00 80 _ctx->restore_state = flanterm_fb_restore_state; ffffffff80002941: 48 c7 83 88 01 00 00 movq $0xffffffff80001080,0x188(%rbx) ffffffff80002948: 80 10 00 80 _ctx->double_buffer_flush = flanterm_fb_double_buffer_flush; ffffffff8000294c: 48 c7 83 90 01 00 00 movq $0xffffffff80001760,0x190(%rbx) ffffffff80002953: 60 17 00 80 _ctx->full_refresh = flanterm_fb_full_refresh; ffffffff80002957: 48 c7 83 98 01 00 00 movq $0xffffffff800019b0,0x198(%rbx) ffffffff8000295e: b0 19 00 80 _ctx->deinit = flanterm_fb_deinit; ffffffff80002962: 48 c7 83 a0 01 00 00 movq $0xffffffff80001b00,0x1a0(%rbx) ffffffff80002969: 00 1b 00 80 flanterm_context_reinit(_ctx); ffffffff8000296d: e8 6e 04 00 00 call ffffffff80002de0 flanterm_fb_full_refresh(_ctx); ffffffff80002972: 48 89 df mov %rbx,%rdi ffffffff80002975: e8 36 f0 ff ff call ffffffff800019b0 #ifndef FLANTERM_FB_DISABLE_BUMP_ALLOC if (_malloc == bump_alloc) { ffffffff8000297a: 49 81 ff 00 10 00 80 cmp $0xffffffff80001000,%r15 ffffffff80002981: 0f 84 29 04 00 00 je ffffffff80002db0 if (ctx != NULL) { _free(ctx, sizeof(struct flanterm_fb_context)); } return NULL; } ffffffff80002987: 48 83 c4 48 add $0x48,%rsp ffffffff8000298b: 48 89 d8 mov %rbx,%rax ffffffff8000298e: 5b pop %rbx ffffffff8000298f: 5d pop %rbp ffffffff80002990: 41 5c pop %r12 ffffffff80002992: 41 5d pop %r13 ffffffff80002994: 41 5e pop %r14 ffffffff80002996: 41 5f pop %r15 ffffffff80002998: c3 ret if (width >= (3840 + 3840 / 3) && height >= (2160 + 2160 / 3)) { ffffffff80002999: 49 81 fd ff 13 00 00 cmp $0x13ff,%r13 ffffffff800029a0: 76 25 jbe ffffffff800029c7 font_scale_y = 4; ffffffff800029a2: 48 c7 84 24 10 01 00 movq $0x4,0x110(%rsp) ffffffff800029a9: 00 04 00 00 00 font_scale_x = 4; ffffffff800029ae: 48 c7 84 24 08 01 00 movq $0x4,0x108(%rsp) ffffffff800029b5: 00 04 00 00 00 if (width >= (3840 + 3840 / 3) && height >= (2160 + 2160 / 3)) { ffffffff800029ba: 49 81 fc 3f 0b 00 00 cmp $0xb3f,%r12 ffffffff800029c1: 0f 87 2d f8 ff ff ja ffffffff800021f4 if (width >= (1920 + 1920 / 3) && height >= (1080 + 1080 / 3)) { ffffffff800029c7: 49 81 fd ff 09 00 00 cmp $0x9ff,%r13 ffffffff800029ce: 0f 97 c2 seta %dl ffffffff800029d1: 31 c0 xor %eax,%eax ffffffff800029d3: 49 81 fc 9f 05 00 00 cmp $0x59f,%r12 ffffffff800029da: 0f 97 c0 seta %al ffffffff800029dd: 48 21 d0 and %rdx,%rax ffffffff800029e0: 48 83 c0 01 add $0x1,%rax ffffffff800029e4: 48 89 84 24 08 01 00 mov %rax,0x108(%rsp) ffffffff800029eb: 00 ffffffff800029ec: 48 89 84 24 10 01 00 mov %rax,0x110(%rsp) ffffffff800029f3: 00 ffffffff800029f4: e9 fb f7 ff ff jmp ffffffff800021f4 ffffffff800029f9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) ctx->font_bool[offset] = (glyph[y] & 1); ffffffff80002a00: 44 0f b6 20 movzbl (%rax),%r12d for (size_t x = 8; x < ctx->font_width; x++) { ffffffff80002a04: 48 83 c1 01 add $0x1,%rcx ctx->font_bool[offset] = (glyph[y] & 1); ffffffff80002a08: 41 83 e4 01 and $0x1,%r12d ffffffff80002a0c: 44 88 61 ff mov %r12b,-0x1(%rcx) for (size_t x = 8; x < ctx->font_width; x++) { ffffffff80002a10: 48 39 f9 cmp %rdi,%rcx ffffffff80002a13: 75 eb jne ffffffff80002a00 ffffffff80002a15: e9 d6 fb ff ff jmp ffffffff800025f0 if (_malloc == bump_alloc) { ffffffff80002a1a: 49 81 ff 00 10 00 80 cmp $0xffffffff80001000,%r15 ffffffff80002a21: 0f 84 a1 03 00 00 je ffffffff80002dc8 if (_free == NULL) { ffffffff80002a27: 48 8b 44 24 18 mov 0x18(%rsp),%rax ffffffff80002a2c: 48 85 c0 test %rax,%rax ffffffff80002a2f: 0f 84 a6 00 00 00 je ffffffff80002adb if (ctx->canvas != NULL) { ffffffff80002a35: 48 8b bb a0 02 00 00 mov 0x2a0(%rbx),%rdi ffffffff80002a3c: 48 85 ff test %rdi,%rdi ffffffff80002a3f: 74 09 je ffffffff80002a4a _free(ctx->canvas, ctx->canvas_size); ffffffff80002a41: 48 8b b3 98 02 00 00 mov 0x298(%rbx),%rsi ffffffff80002a48: ff d0 call *%rax if (ctx->map != NULL) { ffffffff80002a4a: 48 8b bb d8 02 00 00 mov 0x2d8(%rbx),%rdi ffffffff80002a51: 48 85 ff test %rdi,%rdi ffffffff80002a54: 74 0e je ffffffff80002a64 _free(ctx->map, ctx->map_size); ffffffff80002a56: 48 8b b3 b8 02 00 00 mov 0x2b8(%rbx),%rsi ffffffff80002a5d: 48 8b 44 24 18 mov 0x18(%rsp),%rax ffffffff80002a62: ff d0 call *%rax if (ctx->queue != NULL) { ffffffff80002a64: 48 8b bb c8 02 00 00 mov 0x2c8(%rbx),%rdi ffffffff80002a6b: 48 85 ff test %rdi,%rdi ffffffff80002a6e: 74 0e je ffffffff80002a7e _free(ctx->queue, ctx->queue_size); ffffffff80002a70: 48 8b b3 b0 02 00 00 mov 0x2b0(%rbx),%rsi ffffffff80002a77: 48 8b 44 24 18 mov 0x18(%rsp),%rax ffffffff80002a7c: ff d0 call *%rax if (ctx->grid != NULL) { ffffffff80002a7e: 48 8b bb c0 02 00 00 mov 0x2c0(%rbx),%rdi ffffffff80002a85: 48 85 ff test %rdi,%rdi ffffffff80002a88: 74 0e je ffffffff80002a98 _free(ctx->grid, ctx->grid_size); ffffffff80002a8a: 48 8b b3 a8 02 00 00 mov 0x2a8(%rbx),%rsi ffffffff80002a91: 48 8b 44 24 18 mov 0x18(%rsp),%rax ffffffff80002a96: ff d0 call *%rax if (ctx->font_bool != NULL) { ffffffff80002a98: 48 8b bb 40 02 00 00 mov 0x240(%rbx),%rdi ffffffff80002a9f: 48 85 ff test %rdi,%rdi ffffffff80002aa2: 74 0e je ffffffff80002ab2 _free(ctx->font_bool, ctx->font_bool_size); ffffffff80002aa4: 48 8b b3 38 02 00 00 mov 0x238(%rbx),%rsi ffffffff80002aab: 48 8b 44 24 18 mov 0x18(%rsp),%rax ffffffff80002ab0: ff d0 call *%rax if (ctx->font_bits != NULL) { ffffffff80002ab2: 48 8b bb 30 02 00 00 mov 0x230(%rbx),%rdi ffffffff80002ab9: 48 85 ff test %rdi,%rdi ffffffff80002abc: 74 0e je ffffffff80002acc _free(ctx->font_bits, ctx->font_bits_size); ffffffff80002abe: 48 8b b3 28 02 00 00 mov 0x228(%rbx),%rsi ffffffff80002ac5: 48 8b 44 24 18 mov 0x18(%rsp),%rax ffffffff80002aca: ff d0 call *%rax _free(ctx, sizeof(struct flanterm_fb_context)); ffffffff80002acc: 48 8b 44 24 18 mov 0x18(%rsp),%rax ffffffff80002ad1: be 20 03 00 00 mov $0x320,%esi ffffffff80002ad6: 48 89 df mov %rbx,%rdi ffffffff80002ad9: ff d0 call *%rax return NULL; ffffffff80002adb: 31 db xor %ebx,%ebx ffffffff80002add: e9 a5 fe ff ff jmp ffffffff80002987 ffffffff80002ae2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) if (bump_allocated_instance == true) { ffffffff80002ae8: 80 3d 12 96 00 00 00 cmpb $0x0,0x9612(%rip) # ffffffff8000c101 ffffffff80002aef: 75 ea jne ffffffff80002adb if (width > FLANTERM_FB_WIDTH_LIMIT || height > FLANTERM_FB_HEIGHT_LIMIT) { ffffffff80002af1: 49 81 fd 80 07 00 00 cmp $0x780,%r13 ffffffff80002af8: 77 20 ja ffffffff80002b1a canvas = NULL; ffffffff80002afa: 48 c7 84 24 b0 00 00 movq $0x0,0xb0(%rsp) ffffffff80002b01: 00 00 00 00 00 _malloc = bump_alloc; ffffffff80002b06: 49 c7 c7 00 10 00 80 mov $0xffffffff80001000,%r15 if (width > FLANTERM_FB_WIDTH_LIMIT || height > FLANTERM_FB_HEIGHT_LIMIT) { ffffffff80002b0d: 49 81 fc b0 04 00 00 cmp $0x4b0,%r12 ffffffff80002b14: 0f 86 05 f7 ff ff jbe ffffffff8000221f size_t width_limit = width > FLANTERM_FB_WIDTH_LIMIT ? FLANTERM_FB_WIDTH_LIMIT : width; ffffffff80002b1a: ba 80 07 00 00 mov $0x780,%edx framebuffer = (uint32_t *)((uintptr_t)framebuffer + ((((height / 2) - (height_limit / 2)) * pitch) + (((width / 2) - (width_limit / 2)) * 4))); ffffffff80002b1f: 4c 89 e0 mov %r12,%rax size_t height_limit = height > FLANTERM_FB_HEIGHT_LIMIT ? FLANTERM_FB_HEIGHT_LIMIT : height; ffffffff80002b22: be b0 04 00 00 mov $0x4b0,%esi canvas = NULL; ffffffff80002b27: 48 c7 84 24 b0 00 00 movq $0x0,0xb0(%rsp) ffffffff80002b2e: 00 00 00 00 00 size_t width_limit = width > FLANTERM_FB_WIDTH_LIMIT ? FLANTERM_FB_WIDTH_LIMIT : width; ffffffff80002b33: 49 39 d5 cmp %rdx,%r13 _malloc = bump_alloc; ffffffff80002b36: 49 c7 c7 00 10 00 80 mov $0xffffffff80001000,%r15 size_t width_limit = width > FLANTERM_FB_WIDTH_LIMIT ? FLANTERM_FB_WIDTH_LIMIT : width; ffffffff80002b3d: 49 0f 46 d5 cmovbe %r13,%rdx size_t height_limit = height > FLANTERM_FB_HEIGHT_LIMIT ? FLANTERM_FB_HEIGHT_LIMIT : height; ffffffff80002b41: 49 39 f4 cmp %rsi,%r12 ffffffff80002b44: 49 0f 46 f4 cmovbe %r12,%rsi framebuffer = (uint32_t *)((uintptr_t)framebuffer + ((((height / 2) - (height_limit / 2)) * pitch) + (((width / 2) - (width_limit / 2)) * 4))); ffffffff80002b48: 48 d1 e8 shr $1,%rax ffffffff80002b4b: 49 89 d0 mov %rdx,%r8 ffffffff80002b4e: 48 89 f7 mov %rsi,%rdi ffffffff80002b51: 49 d1 e8 shr $1,%r8 height = height_limit; ffffffff80002b54: 49 89 f4 mov %rsi,%r12 framebuffer = (uint32_t *)((uintptr_t)framebuffer + ((((height / 2) - (height_limit / 2)) * pitch) + (((width / 2) - (width_limit / 2)) * 4))); ffffffff80002b57: 48 d1 ef shr $1,%rdi ffffffff80002b5a: 48 29 f8 sub %rdi,%rax ffffffff80002b5d: 48 8b 7c 24 20 mov 0x20(%rsp),%rdi ffffffff80002b62: 48 0f af c7 imul %rdi,%rax ffffffff80002b66: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi ffffffff80002b6b: 48 01 c7 add %rax,%rdi ffffffff80002b6e: 48 89 f8 mov %rdi,%rax ffffffff80002b71: 4c 89 ef mov %r13,%rdi width = width_limit; ffffffff80002b74: 49 89 d5 mov %rdx,%r13 framebuffer = (uint32_t *)((uintptr_t)framebuffer + ((((height / 2) - (height_limit / 2)) * pitch) + (((width / 2) - (width_limit / 2)) * 4))); ffffffff80002b77: 48 d1 ef shr $1,%rdi ffffffff80002b7a: 4c 29 c7 sub %r8,%rdi ffffffff80002b7d: 48 8d 04 b8 lea (%rax,%rdi,4),%rax ffffffff80002b81: 48 89 44 24 08 mov %rax,0x8(%rsp) height = height_limit; ffffffff80002b86: e9 94 f6 ff ff jmp ffffffff8000221f return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002b8b: bf aa 00 00 00 mov $0xaa,%edi ffffffff80002b90: 89 c1 mov %eax,%ecx ffffffff80002b92: 41 b8 55 00 00 00 mov $0x55,%r8d ctx->ansi_colours[0] = convert_colour(_ctx, 0x00000000); // black ffffffff80002b98: c7 83 48 02 00 00 00 movl $0x0,0x248(%rbx) ffffffff80002b9f: 00 00 00 return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002ba2: 41 89 f9 mov %edi,%r9d ffffffff80002ba5: 41 89 fa mov %edi,%r10d ffffffff80002ba8: 41 d3 e1 shl %cl,%r9d ffffffff80002bab: 89 d1 mov %edx,%ecx ffffffff80002bad: 41 d3 e0 shl %cl,%r8d ffffffff80002bb0: 41 d3 e2 shl %cl,%r10d ctx->ansi_colours[1] = convert_colour(_ctx, 0x00aa0000); // red ffffffff80002bb3: 44 89 8b 4c 02 00 00 mov %r9d,0x24c(%rbx) return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002bba: 44 89 c1 mov %r8d,%ecx ctx->ansi_colours[2] = convert_colour(_ctx, 0x0000aa00); // green ffffffff80002bbd: 44 89 93 50 02 00 00 mov %r10d,0x250(%rbx) return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002bc4: 44 09 c9 or %r9d,%ecx ffffffff80002bc7: 89 8b 54 02 00 00 mov %ecx,0x254(%rbx) ffffffff80002bcd: 89 f1 mov %esi,%ecx ffffffff80002bcf: d3 e7 shl %cl,%edi ffffffff80002bd1: 89 f9 mov %edi,%ecx ctx->ansi_colours[4] = convert_colour(_ctx, 0x000000aa); // blue ffffffff80002bd3: 89 bb 58 02 00 00 mov %edi,0x258(%rbx) return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002bd9: 44 09 d7 or %r10d,%edi ffffffff80002bdc: 44 09 c9 or %r9d,%ecx ctx->ansi_colours[6] = convert_colour(_ctx, 0x0000aaaa); // cyan ffffffff80002bdf: 89 bb 60 02 00 00 mov %edi,0x260(%rbx) return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002be5: 44 09 cf or %r9d,%edi if (ansi_bright_colours != NULL) { ffffffff80002be8: 48 83 bc 24 c0 00 00 cmpq $0x0,0xc0(%rsp) ffffffff80002bef: 00 00 return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002bf1: 89 8b 5c 02 00 00 mov %ecx,0x25c(%rbx) ffffffff80002bf7: 89 bb 64 02 00 00 mov %edi,0x264(%rbx) if (ansi_bright_colours != NULL) { ffffffff80002bfd: 0f 85 12 f7 ff ff jne ffffffff80002315 return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002c03: bf 55 00 00 00 mov $0x55,%edi ffffffff80002c08: 41 b8 ff 00 00 00 mov $0xff,%r8d ffffffff80002c0e: 89 c1 mov %eax,%ecx ffffffff80002c10: 45 89 c1 mov %r8d,%r9d ffffffff80002c13: 41 89 fb mov %edi,%r11d ffffffff80002c16: 41 d3 e1 shl %cl,%r9d ffffffff80002c19: 41 d3 e3 shl %cl,%r11d ffffffff80002c1c: 49 c1 e1 20 shl $0x20,%r9 ffffffff80002c20: 4c 89 d9 mov %r11,%rcx ffffffff80002c23: 41 89 fb mov %edi,%r11d ffffffff80002c26: 4c 09 c9 or %r9,%rcx ffffffff80002c29: 49 89 ca mov %rcx,%r10 ffffffff80002c2c: 89 d1 mov %edx,%ecx ffffffff80002c2e: 41 d3 e3 shl %cl,%r11d ffffffff80002c31: 4d 89 d9 mov %r11,%r9 ffffffff80002c34: 4c 89 d9 mov %r11,%rcx ffffffff80002c37: 49 c1 e1 20 shl $0x20,%r9 ffffffff80002c3b: 4c 09 c9 or %r9,%rcx ffffffff80002c3e: 45 89 c1 mov %r8d,%r9d ffffffff80002c41: 4c 09 d1 or %r10,%rcx ffffffff80002c44: 49 89 cb mov %rcx,%r11 ffffffff80002c47: 89 d1 mov %edx,%ecx ffffffff80002c49: 41 d3 e1 shl %cl,%r9d ffffffff80002c4c: 4c 89 c9 mov %r9,%rcx ffffffff80002c4f: 49 c1 e1 20 shl $0x20,%r9 ffffffff80002c53: 4c 09 c9 or %r9,%rcx ffffffff80002c56: 4c 09 d1 or %r10,%rcx ffffffff80002c59: 49 89 c9 mov %rcx,%r9 ffffffff80002c5c: 89 f1 mov %esi,%ecx ffffffff80002c5e: d3 e7 shl %cl,%edi ffffffff80002c60: 48 89 f9 mov %rdi,%rcx ffffffff80002c63: 48 c1 e1 20 shl $0x20,%rcx ffffffff80002c67: 48 09 cf or %rcx,%rdi ffffffff80002c6a: 89 f1 mov %esi,%ecx ffffffff80002c6c: 41 d3 e0 shl %cl,%r8d ffffffff80002c6f: 4c 89 c1 mov %r8,%rcx ffffffff80002c72: 48 c1 e1 20 shl $0x20,%rcx ffffffff80002c76: 4c 09 c1 or %r8,%rcx ffffffff80002c79: 4d 89 d8 mov %r11,%r8 ffffffff80002c7c: 49 09 f8 or %rdi,%r8 ffffffff80002c7f: 4c 09 cf or %r9,%rdi ctx->ansi_bright_colours[0] = convert_colour(_ctx, 0x00555555); // black ffffffff80002c82: 48 89 bb 70 02 00 00 mov %rdi,0x270(%rbx) return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002c89: 4c 89 df mov %r11,%rdi ffffffff80002c8c: 48 09 cf or %rcx,%rdi ffffffff80002c8f: 4c 09 c9 or %r9,%rcx ctx->ansi_bright_colours[0] = convert_colour(_ctx, 0x00555555); // black ffffffff80002c92: 4c 89 83 68 02 00 00 mov %r8,0x268(%rbx) ffffffff80002c99: 48 89 bb 78 02 00 00 mov %rdi,0x278(%rbx) ffffffff80002ca0: 48 89 8b 80 02 00 00 mov %rcx,0x280(%rbx) ffffffff80002ca7: e9 b8 f6 ff ff jmp ffffffff80002364 return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002cac: bf ff 00 00 00 mov $0xff,%edi ffffffff80002cb1: 89 d1 mov %edx,%ecx ffffffff80002cb3: 41 89 f8 mov %edi,%r8d ffffffff80002cb6: 41 d3 e0 shl %cl,%r8d ffffffff80002cb9: 89 f1 mov %esi,%ecx ffffffff80002cbb: 44 89 c2 mov %r8d,%edx ffffffff80002cbe: 41 89 f8 mov %edi,%r8d ffffffff80002cc1: 41 d3 e0 shl %cl,%r8d ffffffff80002cc4: 89 c1 mov %eax,%ecx ffffffff80002cc6: 44 09 c2 or %r8d,%edx ffffffff80002cc9: d3 e7 shl %cl,%edi ffffffff80002ccb: 09 fa or %edi,%edx ffffffff80002ccd: e9 ab f7 ff ff jmp ffffffff8000247d ffffffff80002cd2: 41 b8 55 00 00 00 mov $0x55,%r8d ffffffff80002cd8: 89 d1 mov %edx,%ecx ffffffff80002cda: 45 89 c1 mov %r8d,%r9d ffffffff80002cdd: 44 89 c7 mov %r8d,%edi ffffffff80002ce0: 41 d3 e1 shl %cl,%r9d ffffffff80002ce3: 89 f1 mov %esi,%ecx ffffffff80002ce5: d3 e7 shl %cl,%edi ffffffff80002ce7: 89 c1 mov %eax,%ecx ffffffff80002ce9: 44 09 cf or %r9d,%edi ffffffff80002cec: 41 d3 e0 shl %cl,%r8d ffffffff80002cef: 44 09 c7 or %r8d,%edi ffffffff80002cf2: e9 40 f7 ff ff jmp ffffffff80002437 ctx->font_width = font_width = 8; ffffffff80002cf7: 48 c7 83 b8 01 00 00 movq $0x8,0x1b8(%rbx) ffffffff80002cfe: 08 00 00 00 ctx->font_bits = _malloc(ctx->font_bits_size); ffffffff80002d02: bf 00 10 00 00 mov $0x1000,%edi ctx->font_height = font_height = 16; ffffffff80002d07: 48 c7 83 c0 01 00 00 movq $0x10,0x1c0(%rbx) ffffffff80002d0e: 10 00 00 00 ctx->font_bits_size = FONT_BYTES; ffffffff80002d12: 48 c7 83 28 02 00 00 movq $0x1000,0x228(%rbx) ffffffff80002d19: 00 10 00 00 ctx->font_bits = _malloc(ctx->font_bits_size); ffffffff80002d1d: 41 ff d7 call *%r15 ffffffff80002d20: 48 89 83 30 02 00 00 mov %rax,0x230(%rbx) ffffffff80002d27: 48 89 c7 mov %rax,%rdi if (ctx->font_bits == NULL) { ffffffff80002d2a: 48 85 c0 test %rax,%rax ffffffff80002d2d: 0f 84 e7 fc ff ff je ffffffff80002a1a memcpy(ctx->font_bits, builtin_font, ctx->font_bits_size); ffffffff80002d33: 48 8b 93 28 02 00 00 mov 0x228(%rbx),%rdx ffffffff80002d3a: 48 c7 c6 00 80 00 80 mov $0xffffffff80008000,%rsi ctx->font_height = font_height = 16; ffffffff80002d41: bd 10 00 00 00 mov $0x10,%ebp memcpy(ctx->font_bits, builtin_font, ctx->font_bits_size); ffffffff80002d46: e8 f5 39 00 00 call ffffffff80006740 font_spacing = 1; ffffffff80002d4b: 48 c7 84 24 00 01 00 movq $0x1,0x100(%rsp) ffffffff80002d52: 00 01 00 00 00 ffffffff80002d57: e9 c3 f7 ff ff jmp ffffffff8000251f return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002d5c: bf aa 00 00 00 mov $0xaa,%edi ffffffff80002d61: 89 d1 mov %edx,%ecx ffffffff80002d63: 41 89 f9 mov %edi,%r9d ffffffff80002d66: 41 89 f8 mov %edi,%r8d ffffffff80002d69: 41 d3 e1 shl %cl,%r9d ffffffff80002d6c: 89 f1 mov %esi,%ecx ffffffff80002d6e: 41 d3 e0 shl %cl,%r8d ffffffff80002d71: 89 c1 mov %eax,%ecx ffffffff80002d73: 45 09 c8 or %r9d,%r8d ffffffff80002d76: d3 e7 shl %cl,%edi ffffffff80002d78: 41 09 f8 or %edi,%r8d ffffffff80002d7b: 45 89 c2 mov %r8d,%r10d ffffffff80002d7e: e9 6a f6 ff ff jmp ffffffff800023ed if (font_scale_x == 1 && font_scale_y == 1) { ffffffff80002d83: 48 83 bc 24 10 01 00 cmpq $0x1,0x110(%rsp) ffffffff80002d8a: 00 01 ffffffff80002d8c: 75 16 jne ffffffff80002da4 ffffffff80002d8e: 48 83 bc 24 08 01 00 cmpq $0x1,0x108(%rsp) ffffffff80002d95: 00 01 ffffffff80002d97: 48 c7 c0 c0 1e 00 80 mov $0xffffffff80001ec0,%rax ffffffff80002d9e: 0f 84 c2 fa ff ff je ffffffff80002866 ffffffff80002da4: 48 c7 c0 e0 1f 00 80 mov $0xffffffff80001fe0,%rax ffffffff80002dab: e9 b6 fa ff ff jmp ffffffff80002866 bump_allocated_instance = true; ffffffff80002db0: c6 05 4a 93 00 00 01 movb $0x1,0x934a(%rip) # ffffffff8000c101 ffffffff80002db7: e9 cb fb ff ff jmp ffffffff80002987 if (font_scale_x == 1 && font_scale_y == 1) { ffffffff80002dbc: 48 c7 c0 c0 1b 00 80 mov $0xffffffff80001bc0,%rax ffffffff80002dc3: e9 9e fa ff ff jmp ffffffff80002866 bump_alloc_ptr = 0; ffffffff80002dc8: 48 c7 05 35 93 00 00 movq $0x0,0x9335(%rip) # ffffffff8000c108 ffffffff80002dcf: 00 00 00 00 return NULL; ffffffff80002dd3: 31 db xor %ebx,%ebx ffffffff80002dd5: e9 ad fb ff ff jmp ffffffff80002987 ffffffff80002dda: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) ffffffff80002de0 : }; #define CHARSET_DEFAULT 0 #define CHARSET_DEC_SPECIAL 1 void flanterm_context_reinit(struct flanterm_context *ctx) { ffffffff80002de0: f3 0f 1e fa endbr64 ctx->rrr = false; ctx->discard_next = false; ctx->bold = false; ctx->bg_bold = false; ctx->reverse_video = false; ctx->dec_private = false; ffffffff80002de4: 0f b7 05 b5 8b 00 00 movzwl 0x8bb5(%rip),%eax # ffffffff8000b9a0 ctx->tab_size = 8; ffffffff80002deb: 48 c7 07 08 00 00 00 movq $0x8,(%rdi) ctx->autoflush = true; ffffffff80002df2: 48 c7 47 08 01 01 01 movq $0x10101,0x8(%rdi) ffffffff80002df9: 00 ctx->dec_private = false; ffffffff80002dfa: 66 89 47 14 mov %ax,0x14(%rdi) ctx->insert_mode = false; ctx->unicode_remaining = 0; ctx->g_select = 0; ffffffff80002dfe: 66 89 47 28 mov %ax,0x28(%rdi) ctx->saved_cursor_x = 0; ctx->saved_cursor_y = 0; ctx->current_primary = (size_t)-1; ctx->current_bg = (size_t)-1; ctx->scroll_top_margin = 0; ctx->scroll_bottom_margin = ctx->rows; ffffffff80002e02: 48 8b 87 e0 00 00 00 mov 0xe0(%rdi),%rax ctx->discard_next = false; ffffffff80002e09: c7 47 10 00 00 00 00 movl $0x0,0x10(%rdi) ctx->unicode_remaining = 0; ffffffff80002e10: 48 c7 47 20 00 00 00 movq $0x0,0x20(%rdi) ffffffff80002e17: 00 ctx->charsets[1] = CHARSET_DEC_SPECIAL; ffffffff80002e18: c6 47 2a 01 movb $0x1,0x2a(%rdi) ctx->current_charset = 0; ffffffff80002e1c: 48 c7 47 30 00 00 00 movq $0x0,0x30(%rdi) ffffffff80002e23: 00 ctx->escape_offset = 0; ffffffff80002e24: 48 c7 47 38 00 00 00 movq $0x0,0x38(%rdi) ffffffff80002e2b: 00 ctx->esc_values_i = 0; ffffffff80002e2c: 48 c7 47 40 00 00 00 movq $0x0,0x40(%rdi) ffffffff80002e33: 00 ctx->saved_cursor_x = 0; ffffffff80002e34: 48 c7 47 48 00 00 00 movq $0x0,0x48(%rdi) ffffffff80002e3b: 00 ctx->saved_cursor_y = 0; ffffffff80002e3c: 48 c7 47 50 00 00 00 movq $0x0,0x50(%rdi) ffffffff80002e43: 00 ctx->current_primary = (size_t)-1; ffffffff80002e44: 48 c7 47 58 ff ff ff movq $0xffffffffffffffff,0x58(%rdi) ffffffff80002e4b: ff ctx->current_bg = (size_t)-1; ffffffff80002e4c: 48 c7 47 60 ff ff ff movq $0xffffffffffffffff,0x60(%rdi) ffffffff80002e53: ff ctx->scroll_top_margin = 0; ffffffff80002e54: 48 c7 47 68 00 00 00 movq $0x0,0x68(%rdi) ffffffff80002e5b: 00 ctx->scroll_bottom_margin = ctx->rows; ffffffff80002e5c: 48 89 47 70 mov %rax,0x70(%rdi) ctx->oob_output = FLANTERM_OOB_OUTPUT_ONLCR; ffffffff80002e60: 48 c7 87 b8 00 00 00 movq $0x10,0xb8(%rdi) ffffffff80002e67: 10 00 00 00 } ffffffff80002e6b: c3 ret ffffffff80002e6c: 0f 1f 40 00 nopl 0x0(%rax) ffffffff80002e70 : } return 0; } int mk_wcwidth(uint32_t ucs) { ffffffff80002e70: f3 0f 1e fa endbr64 ffffffff80002e74: 89 fa mov %edi,%edx { 0xE0100, 0xE01EF } }; /* test for 8-bit control characters */ if (ucs == 0) return 0; ffffffff80002e76: 31 c0 xor %eax,%eax if (ucs == 0) ffffffff80002e78: 85 ff test %edi,%edi ffffffff80002e7a: 74 71 je ffffffff80002eed if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0)) ffffffff80002e7c: 8d 47 81 lea -0x7f(%rdi),%eax ffffffff80002e7f: 83 f8 20 cmp $0x20,%eax return 1; ffffffff80002e82: b8 01 00 00 00 mov $0x1,%eax if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0)) ffffffff80002e87: 76 67 jbe ffffffff80002ef0 ffffffff80002e89: 83 ff 1f cmp $0x1f,%edi ffffffff80002e8c: 76 62 jbe ffffffff80002ef0 if (ucs < table[0].first || ucs > table[max].last) ffffffff80002e8e: 81 ff ff 02 00 00 cmp $0x2ff,%edi ffffffff80002e94: 76 57 jbe ffffffff80002eed ffffffff80002e96: 81 ff ef 01 0e 00 cmp $0xe01ef,%edi ffffffff80002e9c: 0f 87 be 00 00 00 ja ffffffff80002f60 int min = 0; ffffffff80002ea2: 31 f6 xor %esi,%esi ffffffff80002ea4: bf 8d 00 00 00 mov $0x8d,%edi ffffffff80002ea9: eb 0c jmp ffffffff80002eb7 ffffffff80002eab: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) min = mid + 1; ffffffff80002eb0: 8d 70 01 lea 0x1(%rax),%esi while (max >= min) { ffffffff80002eb3: 39 f7 cmp %esi,%edi ffffffff80002eb5: 7c 41 jl ffffffff80002ef8 mid = (min + max) / 2; ffffffff80002eb7: 8d 0c 37 lea (%rdi,%rsi,1),%ecx ffffffff80002eba: 89 c8 mov %ecx,%eax ffffffff80002ebc: c1 e8 1f shr $0x1f,%eax ffffffff80002ebf: 01 c8 add %ecx,%eax ffffffff80002ec1: d1 f8 sar $1,%eax if (ucs > table[mid].last) ffffffff80002ec3: 48 63 c8 movslq %eax,%rcx ffffffff80002ec6: 39 14 cd 64 b1 00 80 cmp %edx,-0x7fff4e9c(,%rcx,8) ffffffff80002ecd: 72 e1 jb ffffffff80002eb0 else if (ucs < table[mid].first) ffffffff80002ecf: 3b 14 cd 60 b1 00 80 cmp -0x7fff4ea0(,%rcx,8),%edx ffffffff80002ed6: 0f 83 d4 00 00 00 jae ffffffff80002fb0 max = mid - 1; ffffffff80002edc: 8d 78 ff lea -0x1(%rax),%edi ffffffff80002edf: eb d2 jmp ffffffff80002eb3 ffffffff80002ee1: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) ffffffff80002ee8: b8 01 00 00 00 mov $0x1,%eax (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */ (ucs >= 0xff00 && ucs <= 0xff60) || /* Fullwidth Forms */ (ucs >= 0xffe0 && ucs <= 0xffe6) || (ucs >= 0x20000 && ucs <= 0x2fffd) || (ucs >= 0x30000 && ucs <= 0x3fffd))); } ffffffff80002eed: c3 ret ffffffff80002eee: 66 90 xchg %ax,%ax ffffffff80002ef0: c3 ret ffffffff80002ef1: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) (ucs >= 0x1100 && ffffffff80002ef8: 81 fa ff 10 00 00 cmp $0x10ff,%edx ffffffff80002efe: 76 e8 jbe ffffffff80002ee8 ucs == 0x2329 || ucs == 0x232a || ffffffff80002f00: 8d 82 d7 dc ff ff lea -0x2329(%rdx),%eax ffffffff80002f06: 83 f8 01 cmp $0x1,%eax ffffffff80002f09: 76 08 jbe ffffffff80002f13 ffffffff80002f0b: 81 fa 5f 11 00 00 cmp $0x115f,%edx ffffffff80002f11: 77 06 ja ffffffff80002f19 ffffffff80002f13: b8 02 00 00 00 mov $0x2,%eax ffffffff80002f18: c3 ret (ucs >= 0x2e80 && ucs <= 0xa4cf && ffffffff80002f19: 8d 82 80 d1 ff ff lea -0x2e80(%rdx),%eax ucs == 0x2329 || ucs == 0x232a || ffffffff80002f1f: 3d 4f 76 00 00 cmp $0x764f,%eax ffffffff80002f24: 77 08 ja ffffffff80002f2e ffffffff80002f26: 81 fa 3f 30 00 00 cmp $0x303f,%edx ffffffff80002f2c: 75 e5 jne ffffffff80002f13 (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */ ffffffff80002f2e: 8d 8a 00 54 ff ff lea -0xac00(%rdx),%ecx ffffffff80002f34: b8 02 00 00 00 mov $0x2,%eax ucs != 0x303f) || /* CJK ... Yi */ ffffffff80002f39: 81 f9 a3 2b 00 00 cmp $0x2ba3,%ecx ffffffff80002f3f: 76 ac jbe ffffffff80002eed (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility Ideographs */ ffffffff80002f41: 8d 8a 00 07 ff ff lea -0xf900(%rdx),%ecx (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */ ffffffff80002f47: 81 f9 ff 01 00 00 cmp $0x1ff,%ecx ffffffff80002f4d: 76 9e jbe ffffffff80002eed (ucs >= 0xfe10 && ucs <= 0xfe19) || /* Vertical forms */ ffffffff80002f4f: 8d 8a f0 01 ff ff lea -0xfe10(%rdx),%ecx (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility Ideographs */ ffffffff80002f55: 83 f9 09 cmp $0x9,%ecx ffffffff80002f58: 76 93 jbe ffffffff80002eed ffffffff80002f5a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */ ffffffff80002f60: 8d 8a d0 01 ff ff lea -0xfe30(%rdx),%ecx ffffffff80002f66: b8 02 00 00 00 mov $0x2,%eax (ucs >= 0xfe10 && ucs <= 0xfe19) || /* Vertical forms */ ffffffff80002f6b: 83 f9 3f cmp $0x3f,%ecx ffffffff80002f6e: 0f 86 79 ff ff ff jbe ffffffff80002eed (ucs >= 0xff00 && ucs <= 0xff60) || /* Fullwidth Forms */ ffffffff80002f74: 8d 8a 00 01 ff ff lea -0xff00(%rdx),%ecx (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */ ffffffff80002f7a: 83 f9 60 cmp $0x60,%ecx ffffffff80002f7d: 0f 86 6a ff ff ff jbe ffffffff80002eed (ucs >= 0xffe0 && ucs <= 0xffe6) || ffffffff80002f83: 8d 8a 20 00 ff ff lea -0xffe0(%rdx),%ecx (ucs >= 0xff00 && ucs <= 0xff60) || /* Fullwidth Forms */ ffffffff80002f89: 83 f9 06 cmp $0x6,%ecx ffffffff80002f8c: 0f 86 5b ff ff ff jbe ffffffff80002eed (ucs >= 0xffe0 && ucs <= 0xffe6) || ffffffff80002f92: 89 d0 mov %edx,%eax ffffffff80002f94: 25 ff ff fe ff and $0xfffeffff,%eax ffffffff80002f99: 2d 00 00 02 00 sub $0x20000,%eax ffffffff80002f9e: 3d fd ff 00 00 cmp $0xfffd,%eax ffffffff80002fa3: 0f 96 c0 setbe %al ffffffff80002fa6: 0f b6 c0 movzbl %al,%eax return 1 + ffffffff80002fa9: 83 c0 01 add $0x1,%eax ffffffff80002fac: c3 ret ffffffff80002fad: 0f 1f 00 nopl (%rax) return 0; ffffffff80002fb0: 31 c0 xor %eax,%eax ffffffff80002fb2: c3 ret ffffffff80002fb3: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80002fba: 00 00 00 ffffffff80002fbd: 0f 1f 00 nopl (%rax) ffffffff80002fc0 : void flanterm_write(struct flanterm_context *ctx, const char *buf, size_t count) { ffffffff80002fc0: f3 0f 1e fa endbr64 ffffffff80002fc4: 41 57 push %r15 ffffffff80002fc6: 41 56 push %r14 ffffffff80002fc8: 41 55 push %r13 ffffffff80002fca: 4c 8d 2c 16 lea (%rsi,%rdx,1),%r13 ffffffff80002fce: 41 54 push %r12 ffffffff80002fd0: 55 push %rbp ffffffff80002fd1: 48 89 f5 mov %rsi,%rbp ffffffff80002fd4: 53 push %rbx ffffffff80002fd5: 48 89 fb mov %rdi,%rbx ffffffff80002fd8: 48 83 ec 28 sub $0x28,%rsp for (size_t i = 0; i < count; i++) { ffffffff80002fdc: 48 85 d2 test %rdx,%rdx ffffffff80002fdf: 0f 84 bf 00 00 00 je ffffffff800030a4 ffffffff80002fe5: 0f 1f 00 nopl (%rax) return -1; } static void flanterm_putchar(struct flanterm_context *ctx, uint8_t c) { if (ctx->discard_next || (c == 0x18 || c == 0x1a)) { ffffffff80002fe8: 80 7b 10 00 cmpb $0x0,0x10(%rbx) flanterm_putchar(ctx, buf[i]); ffffffff80002fec: 44 0f b6 65 00 movzbl 0x0(%rbp),%r12d if (ctx->discard_next || (c == 0x18 || c == 0x1a)) { ffffffff80002ff1: 0f 85 89 00 00 00 jne ffffffff80003080 ffffffff80002ff7: 44 89 e0 mov %r12d,%eax ffffffff80002ffa: 83 e0 fd and $0xfffffffd,%eax ffffffff80002ffd: 3c 18 cmp $0x18,%al ffffffff80002fff: 74 7f je ffffffff80003080 ctx->osc_escape = false; ctx->g_select = 0; return; } if (ctx->unicode_remaining != 0) { ffffffff80003001: 48 8b 43 20 mov 0x20(%rbx),%rax ffffffff80003005: 48 85 c0 test %rax,%rax ffffffff80003008: 74 17 je ffffffff80003021 if ((c & 0xc0) != 0x80) { ffffffff8000300a: 44 89 e2 mov %r12d,%edx ffffffff8000300d: 83 e2 c0 and $0xffffffc0,%edx ffffffff80003010: 80 fa 80 cmp $0x80,%dl ffffffff80003013: 0f 84 f7 00 00 00 je ffffffff80003110 ctx->unicode_remaining = 0; ffffffff80003019: 48 c7 43 20 00 00 00 movq $0x0,0x20(%rbx) ffffffff80003020: 00 } return; } unicode_error: if (c >= 0xc0 && c <= 0xf7) { ffffffff80003021: 41 8d 44 24 40 lea 0x40(%r12),%eax ffffffff80003026: 3c 37 cmp $0x37,%al ffffffff80003028: 0f 86 a2 00 00 00 jbe ffffffff800030d0 ctx->code_point = (uint64_t)(c & 0x07) << (6 * 3); } return; } if (ctx->escape == true) { ffffffff8000302e: 80 7b 0c 00 cmpb $0x0,0xc(%rbx) ffffffff80003032: 0f 85 c8 01 00 00 jne ffffffff80003200 escape_parse(ctx, c); return; } if (ctx->g_select) { ffffffff80003038: 0f b6 43 28 movzbl 0x28(%rbx),%eax ffffffff8000303c: 84 c0 test %al,%al ffffffff8000303e: 0f 85 8c 01 00 00 jne ffffffff800031d0 ctx->g_select = 0; return; } size_t x, y; ctx->get_cursor_pos(ctx, &x, &y); ffffffff80003044: 48 8d 54 24 18 lea 0x18(%rsp),%rdx ffffffff80003049: 48 8d 74 24 10 lea 0x10(%rsp),%rsi ffffffff8000304e: 48 89 df mov %rbx,%rdi ffffffff80003051: ff 93 08 01 00 00 call *0x108(%rbx) switch (c) { ffffffff80003057: 41 80 fc 1b cmp $0x1b,%r12b ffffffff8000305b: 0f 8f 5f 02 00 00 jg ffffffff800032c0 ffffffff80003061: 45 84 e4 test %r12b,%r12b ffffffff80003064: 0f 88 66 02 00 00 js ffffffff800032d0 ffffffff8000306a: 41 80 fc 1b cmp $0x1b,%r12b ffffffff8000306e: 0f 87 5c 02 00 00 ja ffffffff800032d0 ffffffff80003074: 41 0f b6 c4 movzbl %r12b,%eax ffffffff80003078: 3e ff 24 c5 00 90 00 notrack jmp *-0x7fff7000(,%rax,8) ffffffff8000307f: 80 ctx->discard_next = false; ffffffff80003080: c6 43 10 00 movb $0x0,0x10(%rbx) ctx->unicode_remaining = 0; ffffffff80003084: 48 c7 43 20 00 00 00 movq $0x0,0x20(%rbx) ffffffff8000308b: 00 ctx->control_sequence = false; ffffffff8000308c: c7 43 0b 00 00 00 00 movl $0x0,0xb(%rbx) ctx->g_select = 0; ffffffff80003093: c6 43 28 00 movb $0x0,0x28(%rbx) for (size_t i = 0; i < count; i++) { ffffffff80003097: 48 83 c5 01 add $0x1,%rbp ffffffff8000309b: 49 39 ed cmp %rbp,%r13 ffffffff8000309e: 0f 85 44 ff ff ff jne ffffffff80002fe8 if (ctx->autoflush) { ffffffff800030a4: 80 7b 08 00 cmpb $0x0,0x8(%rbx) ffffffff800030a8: 0f 84 da 00 00 00 je ffffffff80003188 ctx->double_buffer_flush(ctx); ffffffff800030ae: 48 8b 83 90 01 00 00 mov 0x190(%rbx),%rax } ffffffff800030b5: 48 83 c4 28 add $0x28,%rsp ctx->double_buffer_flush(ctx); ffffffff800030b9: 48 89 df mov %rbx,%rdi } ffffffff800030bc: 5b pop %rbx ffffffff800030bd: 5d pop %rbp ffffffff800030be: 41 5c pop %r12 ffffffff800030c0: 41 5d pop %r13 ffffffff800030c2: 41 5e pop %r14 ffffffff800030c4: 41 5f pop %r15 ctx->double_buffer_flush(ctx); ffffffff800030c6: ff e0 jmp *%rax ffffffff800030c8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) ffffffff800030cf: 00 ctx->code_point = (uint64_t)(c & 0x1f) << 6; ffffffff800030d0: 41 0f b6 d4 movzbl %r12b,%edx if (c >= 0xc0 && c <= 0xdf) { ffffffff800030d4: 3c 1f cmp $0x1f,%al ffffffff800030d6: 0f 86 c4 00 00 00 jbe ffffffff800031a0 } else if (c >= 0xe0 && c <= 0xef) { ffffffff800030dc: 41 83 c4 20 add $0x20,%r12d ffffffff800030e0: 41 80 fc 0f cmp $0xf,%r12b ffffffff800030e4: 0f 87 66 01 00 00 ja ffffffff80003250 ctx->code_point = (uint64_t)(c & 0x0f) << (6 * 2); ffffffff800030ea: 48 c1 e2 0c shl $0xc,%rdx for (size_t i = 0; i < count; i++) { ffffffff800030ee: 48 83 c5 01 add $0x1,%rbp ctx->unicode_remaining = 2; ffffffff800030f2: 48 c7 43 20 02 00 00 movq $0x2,0x20(%rbx) ffffffff800030f9: 00 ctx->code_point = (uint64_t)(c & 0x0f) << (6 * 2); ffffffff800030fa: 81 e2 ff ff 00 00 and $0xffff,%edx ffffffff80003100: 48 89 53 18 mov %rdx,0x18(%rbx) for (size_t i = 0; i < count; i++) { ffffffff80003104: 49 39 ed cmp %rbp,%r13 ffffffff80003107: 0f 85 db fe ff ff jne ffffffff80002fe8 ffffffff8000310d: eb 95 jmp ffffffff800030a4 ffffffff8000310f: 90 nop ctx->unicode_remaining--; ffffffff80003110: 48 83 e8 01 sub $0x1,%rax ctx->code_point |= (uint64_t)(c & 0x3f) << (6 * ctx->unicode_remaining); ffffffff80003114: 41 83 e4 3f and $0x3f,%r12d ffffffff80003118: 8d 0c 40 lea (%rax,%rax,2),%ecx ctx->unicode_remaining--; ffffffff8000311b: 48 89 43 20 mov %rax,0x20(%rbx) ctx->code_point |= (uint64_t)(c & 0x3f) << (6 * ctx->unicode_remaining); ffffffff8000311f: 01 c9 add %ecx,%ecx ffffffff80003121: 49 d3 e4 shl %cl,%r12 ffffffff80003124: 4c 0b 63 18 or 0x18(%rbx),%r12 ffffffff80003128: 4c 89 63 18 mov %r12,0x18(%rbx) if (ctx->unicode_remaining != 0) { ffffffff8000312c: 48 85 c0 test %rax,%rax ffffffff8000312f: 0f 85 62 ff ff ff jne ffffffff80003097 switch (code_point) { ffffffff80003135: 49 81 fc 48 22 00 00 cmp $0x2248,%r12 ffffffff8000313c: 0f 87 3e 01 00 00 ja ffffffff80003280 ffffffff80003142: 49 81 fc 18 22 00 00 cmp $0x2218,%r12 ffffffff80003149: 0f 87 38 0e 00 00 ja ffffffff80003f87 ffffffff8000314f: 49 81 fc 92 01 00 00 cmp $0x192,%r12 ffffffff80003156: 0f 87 12 03 00 00 ja ffffffff8000346e ffffffff8000315c: 49 81 fc a0 00 00 00 cmp $0xa0,%r12 ffffffff80003163: 0f 86 57 02 00 00 jbe ffffffff800033c0 ffffffff80003169: 49 8d 84 24 5f ff ff lea -0xa1(%r12),%rax ffffffff80003170: ff ffffffff80003171: 48 3d f1 00 00 00 cmp $0xf1,%rax ffffffff80003177: 0f 87 43 02 00 00 ja ffffffff800033c0 ffffffff8000317d: 3e ff 24 c5 e0 90 00 notrack jmp *-0x7fff6f20(,%rax,8) ffffffff80003184: 80 ffffffff80003185: 0f 1f 00 nopl (%rax) } ffffffff80003188: 48 83 c4 28 add $0x28,%rsp ffffffff8000318c: 5b pop %rbx ffffffff8000318d: 5d pop %rbp ffffffff8000318e: 41 5c pop %r12 ffffffff80003190: 41 5d pop %r13 ffffffff80003192: 41 5e pop %r14 ffffffff80003194: 41 5f pop %r15 ffffffff80003196: c3 ret ffffffff80003197: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff8000319e: 00 00 ctx->code_point = (uint64_t)(c & 0x1f) << 6; ffffffff800031a0: 48 c1 e2 06 shl $0x6,%rdx for (size_t i = 0; i < count; i++) { ffffffff800031a4: 48 83 c5 01 add $0x1,%rbp ctx->unicode_remaining = 1; ffffffff800031a8: 48 c7 43 20 01 00 00 movq $0x1,0x20(%rbx) ffffffff800031af: 00 ctx->code_point = (uint64_t)(c & 0x1f) << 6; ffffffff800031b0: 81 e2 c0 07 00 00 and $0x7c0,%edx ffffffff800031b6: 48 89 53 18 mov %rdx,0x18(%rbx) for (size_t i = 0; i < count; i++) { ffffffff800031ba: 49 39 ed cmp %rbp,%r13 ffffffff800031bd: 0f 85 25 fe ff ff jne ffffffff80002fe8 ffffffff800031c3: e9 dc fe ff ff jmp ffffffff800030a4 ffffffff800031c8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) ffffffff800031cf: 00 ctx->g_select--; ffffffff800031d0: 83 e8 01 sub $0x1,%eax switch (c) { ffffffff800031d3: 41 80 fc 30 cmp $0x30,%r12b ffffffff800031d7: 0f 84 8b 03 00 00 je ffffffff80003568 ffffffff800031dd: 41 80 fc 42 cmp $0x42,%r12b ffffffff800031e1: 0f 84 59 01 00 00 je ffffffff80003340 ctx->g_select = 0; ffffffff800031e7: c6 43 28 00 movb $0x0,0x28(%rbx) for (size_t i = 0; i < count; i++) { ffffffff800031eb: 48 83 c5 01 add $0x1,%rbp ffffffff800031ef: 49 39 ed cmp %rbp,%r13 ffffffff800031f2: 0f 85 f0 fd ff ff jne ffffffff80002fe8 ffffffff800031f8: e9 a7 fe ff ff jmp ffffffff800030a4 ffffffff800031fd: 0f 1f 00 nopl (%rax) ctx->escape_offset++; ffffffff80003200: 48 8b 43 38 mov 0x38(%rbx),%rax ffffffff80003204: 48 83 c0 01 add $0x1,%rax if (ctx->osc == true) { ffffffff80003208: 80 7b 0d 00 cmpb $0x0,0xd(%rbx) ctx->escape_offset++; ffffffff8000320c: 48 89 43 38 mov %rax,0x38(%rbx) if (ctx->osc == true) { ffffffff80003210: 0f 85 6a 03 00 00 jne ffffffff80003580 if (ctx->control_sequence == true) { ffffffff80003216: 80 7b 0b 00 cmpb $0x0,0xb(%rbx) ffffffff8000321a: 0f 85 87 03 00 00 jne ffffffff800035a7 ctx->get_cursor_pos(ctx, &x, &y); ffffffff80003220: 48 8d 54 24 18 lea 0x18(%rsp),%rdx ffffffff80003225: 48 8d 74 24 10 lea 0x10(%rsp),%rsi ffffffff8000322a: 48 89 df mov %rbx,%rdi ffffffff8000322d: ff 93 08 01 00 00 call *0x108(%rbx) switch (c) { ffffffff80003233: 41 8d 44 24 d8 lea -0x28(%r12),%eax ffffffff80003238: 3c 3b cmp $0x3b,%al ffffffff8000323a: 0f 87 18 02 00 00 ja ffffffff80003458 ffffffff80003240: 0f b6 c0 movzbl %al,%eax ffffffff80003243: 3e ff 24 c5 70 98 00 notrack jmp *-0x7fff6790(,%rax,8) ffffffff8000324a: 80 ffffffff8000324b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ctx->code_point = (uint64_t)(c & 0x07) << (6 * 3); ffffffff80003250: 48 c1 e2 12 shl $0x12,%rdx for (size_t i = 0; i < count; i++) { ffffffff80003254: 48 83 c5 01 add $0x1,%rbp ctx->unicode_remaining = 3; ffffffff80003258: 48 c7 43 20 03 00 00 movq $0x3,0x20(%rbx) ffffffff8000325f: 00 ctx->code_point = (uint64_t)(c & 0x07) << (6 * 3); ffffffff80003260: 81 e2 00 00 1c 00 and $0x1c0000,%edx ffffffff80003266: 48 89 53 18 mov %rdx,0x18(%rbx) for (size_t i = 0; i < count; i++) { ffffffff8000326a: 49 39 ed cmp %rbp,%r13 ffffffff8000326d: 0f 85 75 fd ff ff jne ffffffff80002fe8 ffffffff80003273: e9 2c fe ff ff jmp ffffffff800030a4 ffffffff80003278: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) ffffffff8000327f: 00 switch (code_point) { ffffffff80003280: 49 81 fc 6b 26 00 00 cmp $0x266b,%r12 ffffffff80003287: 0f 87 33 01 00 00 ja ffffffff800033c0 ffffffff8000328d: 49 81 fc ff 24 00 00 cmp $0x24ff,%r12 ffffffff80003294: 0f 86 95 03 00 00 jbe ffffffff8000362f ffffffff8000329a: 49 8d 84 24 00 db ff lea -0x2500(%r12),%rax ffffffff800032a1: ff ffffffff800032a2: 48 3d 6b 01 00 00 cmp $0x16b,%rax ffffffff800032a8: 0f 87 12 01 00 00 ja ffffffff800033c0 ffffffff800032ae: 3e ff 24 c5 50 9a 00 notrack jmp *-0x7fff65b0(,%rax,8) ffffffff800032b5: 80 ffffffff800032b6: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff800032bd: 00 00 00 switch (c) { ffffffff800032c0: 41 80 fc 7f cmp $0x7f,%r12b ffffffff800032c4: 0f 84 cd fd ff ff je ffffffff80003097 ffffffff800032ca: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) // Move to G0 set ctx->current_charset = 0; return; } if (ctx->insert_mode == true) { ffffffff800032d0: 80 7b 15 00 cmpb $0x0,0x15(%rbx) ffffffff800032d4: 74 35 je ffffffff8000330b for (size_t i = ctx->cols - 1; ; i--) { ffffffff800032d6: 48 8b 83 e8 00 00 00 mov 0xe8(%rbx),%rax ffffffff800032dd: 4c 8d 70 ff lea -0x1(%rax),%r14 ffffffff800032e1: eb 09 jmp ffffffff800032ec ffffffff800032e3: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff800032e8: 49 83 ee 01 sub $0x1,%r14 ctx->move_character(ctx, i + 1, y, i, y); ffffffff800032ec: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff800032f1: 49 8d 76 01 lea 0x1(%r14),%rsi ffffffff800032f5: 4c 89 f1 mov %r14,%rcx ffffffff800032f8: 48 89 df mov %rbx,%rdi ffffffff800032fb: 49 89 d0 mov %rdx,%r8 ffffffff800032fe: ff 93 60 01 00 00 call *0x160(%rbx) if (i == x) { ffffffff80003304: 4c 3b 74 24 10 cmp 0x10(%rsp),%r14 ffffffff80003309: 75 dd jne ffffffff800032e8 } } } // Translate character set switch (ctx->charsets[ctx->current_charset]) { ffffffff8000330b: 48 8b 53 30 mov 0x30(%rbx),%rdx case '`': FLANTERM_DEC_SPCL_PRN(0x04) ffffffff8000330f: 48 8b 83 f0 00 00 00 mov 0xf0(%rbx),%rax switch (ctx->charsets[ctx->current_charset]) { ffffffff80003316: 80 7c 13 29 01 cmpb $0x1,0x29(%rbx,%rdx,1) ffffffff8000331b: 0f 84 12 0b 00 00 je ffffffff80003e33 return; } break; } if (c >= 0x20 && c <= 0x7e) { ffffffff80003321: 41 8d 54 24 e0 lea -0x20(%r12),%edx ffffffff80003326: 80 fa 5e cmp $0x5e,%dl ffffffff80003329: 0f 86 be 02 00 00 jbe ffffffff800035ed ctx->raw_putchar(ctx, c); } else { ctx->raw_putchar(ctx, 0xfe); ffffffff8000332f: be fe 00 00 00 mov $0xfe,%esi ffffffff80003334: 48 89 df mov %rbx,%rdi ffffffff80003337: ff d0 call *%rax ffffffff80003339: e9 59 fd ff ff jmp ffffffff80003097 ffffffff8000333e: 66 90 xchg %ax,%ax ctx->charsets[ctx->g_select] = CHARSET_DEFAULT; break; ffffffff80003340: 0f b6 c0 movzbl %al,%eax ffffffff80003343: c6 44 03 29 00 movb $0x0,0x29(%rbx,%rax,1) ctx->g_select = 0; ffffffff80003348: c6 43 28 00 movb $0x0,0x28(%rbx) return; ffffffff8000334c: e9 9a fe ff ff jmp ffffffff800031eb if (y == ctx->scroll_bottom_margin - 1) { ffffffff80003351: 48 8b 43 70 mov 0x70(%rbx),%rax ffffffff80003355: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff8000335a: 48 83 e8 01 sub $0x1,%rax ffffffff8000335e: 48 39 d0 cmp %rdx,%rax ffffffff80003361: 0f 84 92 0a 00 00 je ffffffff80003df9 ctx->set_cursor_pos(ctx, (ctx->oob_output & FLANTERM_OOB_OUTPUT_ONLCR) ? 0 : x, y + 1); ffffffff80003367: 48 8b 83 00 01 00 00 mov 0x100(%rbx),%rax ffffffff8000336e: 48 83 c2 01 add $0x1,%rdx ffffffff80003372: 31 f6 xor %esi,%esi ffffffff80003374: f6 83 b8 00 00 00 10 testb $0x10,0xb8(%rbx) ffffffff8000337b: 75 05 jne ffffffff80003382 ffffffff8000337d: 48 8b 74 24 10 mov 0x10(%rsp),%rsi ffffffff80003382: 48 89 df mov %rbx,%rdi ffffffff80003385: ff d0 call *%rax ffffffff80003387: e9 0b fd ff ff jmp ffffffff80003097 switch (code_point) { ffffffff8000338c: 49 81 fc 20 23 00 00 cmp $0x2320,%r12 ffffffff80003393: 0f 84 59 0e 00 00 je ffffffff800041f2 ffffffff80003399: 49 81 fc 21 23 00 00 cmp $0x2321,%r12 ffffffff800033a0: 0f 84 42 0e 00 00 je ffffffff800041e8 case 0x2310: return 169; ffffffff800033a6: be a9 00 00 00 mov $0xa9,%esi switch (code_point) { ffffffff800033ab: 49 81 fc 10 23 00 00 cmp $0x2310,%r12 ffffffff800033b2: 0f 84 b8 02 00 00 je ffffffff80003670 ffffffff800033b8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) ffffffff800033bf: 00 size_t replacement_width = (size_t)mk_wcwidth(ctx->code_point); ffffffff800033c0: 44 89 e7 mov %r12d,%edi ffffffff800033c3: e8 a8 fa ff ff call ffffffff80002e70 ffffffff800033c8: 4c 63 f0 movslq %eax,%r14 if (replacement_width > 0) { ffffffff800033cb: 4d 85 f6 test %r14,%r14 ffffffff800033ce: 0f 84 c3 fc ff ff je ffffffff80003097 ctx->raw_putchar(ctx, 0xfe); ffffffff800033d4: be fe 00 00 00 mov $0xfe,%esi ffffffff800033d9: 48 89 df mov %rbx,%rdi ffffffff800033dc: ff 93 f0 00 00 00 call *0xf0(%rbx) for (size_t i = 1; i < replacement_width; i++) { ffffffff800033e2: 49 83 fe 01 cmp $0x1,%r14 ffffffff800033e6: 0f 84 ab fc ff ff je ffffffff80003097 ffffffff800033ec: 41 bc 01 00 00 00 mov $0x1,%r12d ffffffff800033f2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) ffffffff800033f8: 49 83 c4 01 add $0x1,%r12 ctx->raw_putchar(ctx, ' '); ffffffff800033fc: be 20 00 00 00 mov $0x20,%esi ffffffff80003401: 48 89 df mov %rbx,%rdi ffffffff80003404: ff 93 f0 00 00 00 call *0xf0(%rbx) for (size_t i = 1; i < replacement_width; i++) { ffffffff8000340a: 4d 39 e6 cmp %r12,%r14 ffffffff8000340d: 75 e9 jne ffffffff800033f8 ffffffff8000340f: e9 83 fc ff ff jmp ffffffff80003097 ctx->save_state(ctx); ffffffff80003414: 48 89 df mov %rbx,%rdi ffffffff80003417: ff 93 80 01 00 00 call *0x180(%rbx) ctx->saved_state_bold = ctx->bold; ffffffff8000341d: 0f b7 43 11 movzwl 0x11(%rbx),%eax ctx->saved_state_current_charset = ctx->current_charset; ffffffff80003421: 48 8b 53 58 mov 0x58(%rbx),%rdx ffffffff80003425: 48 8b 4b 30 mov 0x30(%rbx),%rcx ctx->saved_state_bold = ctx->bold; ffffffff80003429: 66 89 83 c0 00 00 00 mov %ax,0xc0(%rbx) ctx->saved_state_reverse_video = ctx->reverse_video; ffffffff80003430: 0f b6 43 13 movzbl 0x13(%rbx),%eax ctx->saved_state_current_charset = ctx->current_charset; ffffffff80003434: 48 89 8b c8 00 00 00 mov %rcx,0xc8(%rbx) ctx->saved_state_reverse_video = ctx->reverse_video; ffffffff8000343b: 88 83 c2 00 00 00 mov %al,0xc2(%rbx) ctx->saved_state_current_charset = ctx->current_charset; ffffffff80003441: 48 8b 43 60 mov 0x60(%rbx),%rax ffffffff80003445: 48 89 93 d0 00 00 00 mov %rdx,0xd0(%rbx) ffffffff8000344c: 48 89 83 d8 00 00 00 mov %rax,0xd8(%rbx) break; ffffffff80003453: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) for (size_t i = 0; i < count; i++) { ffffffff80003458: 48 83 c5 01 add $0x1,%rbp ctx->escape = false; ffffffff8000345c: c6 43 0c 00 movb $0x0,0xc(%rbx) for (size_t i = 0; i < count; i++) { ffffffff80003460: 49 39 ed cmp %rbp,%r13 ffffffff80003463: 0f 85 7f fb ff ff jne ffffffff80002fe8 ffffffff80003469: e9 36 fc ff ff jmp ffffffff800030a4 switch (code_point) { ffffffff8000346e: 49 81 fc c6 03 00 00 cmp $0x3c6,%r12 ffffffff80003475: 0f 87 80 01 00 00 ja ffffffff800035fb ffffffff8000347b: 49 81 fc 92 03 00 00 cmp $0x392,%r12 ffffffff80003482: 0f 86 38 ff ff ff jbe ffffffff800033c0 ffffffff80003488: 49 8d 84 24 6d fc ff lea -0x393(%r12),%rax ffffffff8000348f: ff ffffffff80003490: 48 83 f8 33 cmp $0x33,%rax ffffffff80003494: 0f 87 26 ff ff ff ja ffffffff800033c0 ffffffff8000349a: 3e ff 24 c5 b0 a5 00 notrack jmp *-0x7fff5a50(,%rax,8) ffffffff800034a1: 80 ctx->set_cursor_pos(ctx, 0, y); ffffffff800034a2: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff800034a7: 31 f6 xor %esi,%esi ffffffff800034a9: 48 89 df mov %rbx,%rdi ffffffff800034ac: ff 93 00 01 00 00 call *0x100(%rbx) return; ffffffff800034b2: e9 e0 fb ff ff jmp ffffffff80003097 ctx->set_cursor_pos(ctx, x - 1, y); ffffffff800034b7: 48 8b 44 24 10 mov 0x10(%rsp),%rax ffffffff800034bc: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff800034c1: 48 89 df mov %rbx,%rdi ffffffff800034c4: 48 8d 70 ff lea -0x1(%rax),%rsi ffffffff800034c8: ff 93 00 01 00 00 call *0x100(%rbx) return; ffffffff800034ce: e9 c4 fb ff ff jmp ffffffff80003097 if ((x / ctx->tab_size + 1) >= ctx->cols) { ffffffff800034d3: 48 8b 33 mov (%rbx),%rsi ffffffff800034d6: 48 8b 44 24 10 mov 0x10(%rsp),%rax ffffffff800034db: 31 d2 xor %edx,%edx ctx->set_cursor_pos(ctx, ctx->cols - 1, y); ffffffff800034dd: 48 8b 8b 00 01 00 00 mov 0x100(%rbx),%rcx ffffffff800034e4: 48 8b 7c 24 18 mov 0x18(%rsp),%rdi if ((x / ctx->tab_size + 1) >= ctx->cols) { ffffffff800034e9: 48 f7 f6 div %rsi ffffffff800034ec: 48 8b 93 e8 00 00 00 mov 0xe8(%rbx),%rdx ffffffff800034f3: 48 83 c0 01 add $0x1,%rax ffffffff800034f7: 48 39 d0 cmp %rdx,%rax ffffffff800034fa: 0f 83 22 09 00 00 jae ffffffff80003e22 ctx->set_cursor_pos(ctx, (x / ctx->tab_size + 1) * ctx->tab_size, y); ffffffff80003500: 48 89 fa mov %rdi,%rdx ffffffff80003503: 48 0f af f0 imul %rax,%rsi ffffffff80003507: 48 89 df mov %rbx,%rdi ffffffff8000350a: ff d1 call *%rcx return; ffffffff8000350c: e9 86 fb ff ff jmp ffffffff80003097 if (ctx->callback != NULL) { ffffffff80003511: 48 8b 83 a8 01 00 00 mov 0x1a8(%rbx),%rax ffffffff80003518: 48 85 c0 test %rax,%rax ffffffff8000351b: 0f 84 76 fb ff ff je ffffffff80003097 ctx->callback(ctx, FLANTERM_CB_BELL, 0, 0, 0); ffffffff80003521: 45 31 c0 xor %r8d,%r8d ffffffff80003524: 31 c9 xor %ecx,%ecx ffffffff80003526: 31 d2 xor %edx,%edx ffffffff80003528: be 14 00 00 00 mov $0x14,%esi ffffffff8000352d: 48 89 df mov %rbx,%rdi ffffffff80003530: ff d0 call *%rax ffffffff80003532: e9 60 fb ff ff jmp ffffffff80003097 ctx->escape_offset = 0; ffffffff80003537: 48 c7 43 38 00 00 00 movq $0x0,0x38(%rbx) ffffffff8000353e: 00 ctx->escape = true; ffffffff8000353f: c6 43 0c 01 movb $0x1,0xc(%rbx) return; ffffffff80003543: e9 4f fb ff ff jmp ffffffff80003097 ctx->current_charset = 1; ffffffff80003548: 48 c7 43 30 01 00 00 movq $0x1,0x30(%rbx) ffffffff8000354f: 00 return; ffffffff80003550: e9 42 fb ff ff jmp ffffffff80003097 ctx->current_charset = 0; ffffffff80003555: 48 c7 43 30 00 00 00 movq $0x0,0x30(%rbx) ffffffff8000355c: 00 return; ffffffff8000355d: e9 35 fb ff ff jmp ffffffff80003097 ffffffff80003562: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) ctx->charsets[ctx->g_select] = CHARSET_DEC_SPECIAL; break; ffffffff80003568: 0f b6 c0 movzbl %al,%eax ffffffff8000356b: c6 44 03 29 01 movb $0x1,0x29(%rbx,%rax,1) ctx->g_select = 0; ffffffff80003570: c6 43 28 00 movb $0x0,0x28(%rbx) return; ffffffff80003574: e9 72 fc ff ff jmp ffffffff800031eb ffffffff80003579: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) if (ctx->osc_escape && c == '\\') { ffffffff80003580: 41 80 fc 5c cmp $0x5c,%r12b ffffffff80003584: 75 06 jne ffffffff8000358c ffffffff80003586: 80 7b 0e 00 cmpb $0x0,0xe(%rbx) ffffffff8000358a: 75 0a jne ffffffff80003596 switch (c) { ffffffff8000358c: 41 80 fc 1b cmp $0x1b,%r12b ffffffff80003590: 0f 84 5a 08 00 00 je ffffffff80003df0 ctx->escape = false; ffffffff80003596: 45 31 c9 xor %r9d,%r9d ctx->osc_escape = false; ffffffff80003599: c6 43 0e 00 movb $0x0,0xe(%rbx) ctx->escape = false; ffffffff8000359d: 66 44 89 4b 0c mov %r9w,0xc(%rbx) ffffffff800035a2: e9 f0 fa ff ff jmp ffffffff80003097 if (ctx->escape_offset == 2) { ffffffff800035a7: 48 83 f8 02 cmp $0x2,%rax ffffffff800035ab: 0f 84 bc 09 00 00 je ffffffff80003f6d if (c >= '0' && c <= '9') { ffffffff800035b1: 41 8d 44 24 d0 lea -0x30(%r12),%eax if (ctx->esc_values_i == FLANTERM_MAX_ESC_VALUES) { ffffffff800035b6: 48 8b 53 40 mov 0x40(%rbx),%rdx if (c >= '0' && c <= '9') { ffffffff800035ba: 3c 09 cmp $0x9,%al ffffffff800035bc: 0f 87 8a 08 00 00 ja ffffffff80003e4c if (ctx->esc_values_i == FLANTERM_MAX_ESC_VALUES) { ffffffff800035c2: 48 83 fa 10 cmp $0x10,%rdx ffffffff800035c6: 0f 84 cb fa ff ff je ffffffff80003097 ctx->esc_values[ctx->esc_values_i] += c - '0'; ffffffff800035cc: 48 83 c2 1c add $0x1c,%rdx ffffffff800035d0: 45 0f be e4 movsbl %r12b,%r12d ctx->rrr = true; ffffffff800035d4: c6 43 0f 01 movb $0x1,0xf(%rbx) ctx->esc_values[ctx->esc_values_i] *= 10; ffffffff800035d8: 8b 44 93 08 mov 0x8(%rbx,%rdx,4),%eax ffffffff800035dc: 8d 04 80 lea (%rax,%rax,4),%eax ctx->esc_values[ctx->esc_values_i] += c - '0'; ffffffff800035df: 41 8d 44 44 d0 lea -0x30(%r12,%rax,2),%eax ffffffff800035e4: 89 44 93 08 mov %eax,0x8(%rbx,%rdx,4) return; ffffffff800035e8: e9 aa fa ff ff jmp ffffffff80003097 ctx->raw_putchar(ctx, c); ffffffff800035ed: 41 0f be f4 movsbl %r12b,%esi ffffffff800035f1: 48 89 df mov %rbx,%rdi ffffffff800035f4: ff d0 call *%rax ffffffff800035f6: e9 9c fa ff ff jmp ffffffff80003097 switch (code_point) { ffffffff800035fb: 49 81 fc a8 21 00 00 cmp $0x21a8,%r12 ffffffff80003602: 0f 87 b8 fd ff ff ja ffffffff800033c0 ffffffff80003608: 49 81 fc 8f 21 00 00 cmp $0x218f,%r12 ffffffff8000360f: 0f 86 8c 09 00 00 jbe ffffffff80003fa1 ffffffff80003615: 49 8d 84 24 70 de ff lea -0x2190(%r12),%rax ffffffff8000361c: ff ffffffff8000361d: 48 83 f8 18 cmp $0x18,%rax ffffffff80003621: 0f 87 99 fd ff ff ja ffffffff800033c0 ffffffff80003627: 3e ff 24 c5 50 a7 00 notrack jmp *-0x7fff58b0(,%rax,8) ffffffff8000362e: 80 ffffffff8000362f: 49 81 fc 02 23 00 00 cmp $0x2302,%r12 ffffffff80003636: 0f 84 0e 0b 00 00 je ffffffff8000414a ffffffff8000363c: 0f 87 4a fd ff ff ja ffffffff8000338c ffffffff80003642: 49 81 fc 64 22 00 00 cmp $0x2264,%r12 ffffffff80003649: 0f 84 2d 0b 00 00 je ffffffff8000417c ffffffff8000364f: 49 81 fc 65 22 00 00 cmp $0x2265,%r12 ffffffff80003656: 0f 84 16 0b 00 00 je ffffffff80004172 case 0x2261: return 240; ffffffff8000365c: be f0 00 00 00 mov $0xf0,%esi switch (code_point) { ffffffff80003661: 49 81 fc 61 22 00 00 cmp $0x2261,%r12 ffffffff80003668: 0f 85 52 fd ff ff jne ffffffff800033c0 ffffffff8000366e: 66 90 xchg %ax,%ax for (size_t i = 0; i < count; i++) { ffffffff80003670: 48 83 c5 01 add $0x1,%rbp ctx->raw_putchar(ctx, cc); ffffffff80003674: 48 89 df mov %rbx,%rdi ffffffff80003677: ff 93 f0 00 00 00 call *0xf0(%rbx) for (size_t i = 0; i < count; i++) { ffffffff8000367d: 49 39 ed cmp %rbp,%r13 ffffffff80003680: 0f 85 62 f9 ff ff jne ffffffff80002fe8 ffffffff80003686: e9 19 fa ff ff jmp ffffffff800030a4 ctx->g_select = c - '\''; ffffffff8000368b: 41 83 ec 27 sub $0x27,%r12d ffffffff8000368f: 44 88 63 28 mov %r12b,0x28(%rbx) break; ffffffff80003693: e9 c0 fd ff ff jmp ffffffff80003458 if (y == ctx->scroll_bottom_margin - 1) { ffffffff80003698: 48 8b 4b 70 mov 0x70(%rbx),%rcx ffffffff8000369c: 48 8b 44 24 18 mov 0x18(%rsp),%rax ffffffff800036a1: 48 8d 51 ff lea -0x1(%rcx),%rdx ffffffff800036a5: 48 39 c2 cmp %rax,%rdx ffffffff800036a8: 0f 84 e9 09 00 00 je ffffffff80004097 ctx->set_cursor_pos(ctx, x, y + 1); ffffffff800036ae: 48 8b 74 24 10 mov 0x10(%rsp),%rsi ffffffff800036b3: 48 8d 50 01 lea 0x1(%rax),%rdx ffffffff800036b7: 48 89 df mov %rbx,%rdi ffffffff800036ba: ff 93 00 01 00 00 call *0x100(%rbx) ffffffff800036c0: e9 93 fd ff ff jmp ffffffff80003458 ctx->bold = ctx->saved_state_bold; ffffffff800036c5: 0f b7 83 c0 00 00 00 movzwl 0xc0(%rbx),%eax ctx->current_primary = ctx->saved_state_current_primary; ffffffff800036cc: 48 8b 93 d0 00 00 00 mov 0xd0(%rbx),%rdx ctx->restore_state(ctx); ffffffff800036d3: 48 89 df mov %rbx,%rdi ctx->bold = ctx->saved_state_bold; ffffffff800036d6: 66 89 43 11 mov %ax,0x11(%rbx) ctx->reverse_video = ctx->saved_state_reverse_video; ffffffff800036da: 0f b6 83 c2 00 00 00 movzbl 0xc2(%rbx),%eax ctx->current_primary = ctx->saved_state_current_primary; ffffffff800036e1: 48 89 53 58 mov %rdx,0x58(%rbx) ctx->reverse_video = ctx->saved_state_reverse_video; ffffffff800036e5: 88 43 13 mov %al,0x13(%rbx) ctx->current_charset = ctx->saved_state_current_charset; ffffffff800036e8: 48 8b 83 c8 00 00 00 mov 0xc8(%rbx),%rax ffffffff800036ef: 48 89 43 30 mov %rax,0x30(%rbx) ctx->current_primary = ctx->saved_state_current_primary; ffffffff800036f3: 48 8b 83 d8 00 00 00 mov 0xd8(%rbx),%rax ffffffff800036fa: 48 89 43 60 mov %rax,0x60(%rbx) ctx->restore_state(ctx); ffffffff800036fe: ff 93 88 01 00 00 call *0x188(%rbx) } ffffffff80003704: e9 4f fd ff ff jmp ffffffff80003458 ctx->tab_size = 8; ffffffff80003709: 48 c7 03 08 00 00 00 movq $0x8,(%rbx) ctx->clear(ctx, true); ffffffff80003710: be 01 00 00 00 mov $0x1,%esi ffffffff80003715: 48 89 df mov %rbx,%rdi ctx->dec_private = false; ffffffff80003718: 0f b7 05 81 82 00 00 movzwl 0x8281(%rip),%eax # ffffffff8000b9a0 ctx->autoflush = true; ffffffff8000371f: 48 c7 43 08 01 01 01 movq $0x10101,0x8(%rbx) ffffffff80003726: 00 ctx->dec_private = false; ffffffff80003727: 66 89 43 14 mov %ax,0x14(%rbx) ctx->g_select = 0; ffffffff8000372b: 66 89 43 28 mov %ax,0x28(%rbx) ctx->scroll_bottom_margin = ctx->rows; ffffffff8000372f: 48 8b 83 e0 00 00 00 mov 0xe0(%rbx),%rax ctx->discard_next = false; ffffffff80003736: c7 43 10 00 00 00 00 movl $0x0,0x10(%rbx) ctx->unicode_remaining = 0; ffffffff8000373d: 48 c7 43 20 00 00 00 movq $0x0,0x20(%rbx) ffffffff80003744: 00 ctx->charsets[1] = CHARSET_DEC_SPECIAL; ffffffff80003745: c6 43 2a 01 movb $0x1,0x2a(%rbx) ctx->current_charset = 0; ffffffff80003749: 48 c7 43 30 00 00 00 movq $0x0,0x30(%rbx) ffffffff80003750: 00 ctx->escape_offset = 0; ffffffff80003751: 48 c7 43 38 00 00 00 movq $0x0,0x38(%rbx) ffffffff80003758: 00 ctx->esc_values_i = 0; ffffffff80003759: 48 c7 43 40 00 00 00 movq $0x0,0x40(%rbx) ffffffff80003760: 00 ctx->saved_cursor_x = 0; ffffffff80003761: 48 c7 43 48 00 00 00 movq $0x0,0x48(%rbx) ffffffff80003768: 00 ctx->saved_cursor_y = 0; ffffffff80003769: 48 c7 43 50 00 00 00 movq $0x0,0x50(%rbx) ffffffff80003770: 00 ctx->current_primary = (size_t)-1; ffffffff80003771: 48 c7 43 58 ff ff ff movq $0xffffffffffffffff,0x58(%rbx) ffffffff80003778: ff ctx->current_bg = (size_t)-1; ffffffff80003779: 48 c7 43 60 ff ff ff movq $0xffffffffffffffff,0x60(%rbx) ffffffff80003780: ff ctx->scroll_top_margin = 0; ffffffff80003781: 48 c7 43 68 00 00 00 movq $0x0,0x68(%rbx) ffffffff80003788: 00 ctx->scroll_bottom_margin = ctx->rows; ffffffff80003789: 48 89 43 70 mov %rax,0x70(%rbx) ctx->oob_output = FLANTERM_OOB_OUTPUT_ONLCR; ffffffff8000378d: 48 c7 83 b8 00 00 00 movq $0x10,0xb8(%rbx) ffffffff80003794: 10 00 00 00 ctx->clear(ctx, true); ffffffff80003798: ff 93 f8 00 00 00 call *0xf8(%rbx) break; ffffffff8000379e: e9 b5 fc ff ff jmp ffffffff80003458 ctx->osc = true; ffffffff800037a3: b8 01 00 00 00 mov $0x1,%eax ffffffff800037a8: 66 89 43 0d mov %ax,0xd(%rbx) return; ffffffff800037ac: e9 e6 f8 ff ff jmp ffffffff80003097 ffffffff800037b1: 48 8d 43 78 lea 0x78(%rbx),%rax ffffffff800037b5: 48 8d 93 b8 00 00 00 lea 0xb8(%rbx),%rdx ctx->esc_values[i] = 0; ffffffff800037bc: 48 c7 00 00 00 00 00 movq $0x0,(%rax) ffffffff800037c3: 48 83 c0 10 add $0x10,%rax ffffffff800037c7: 48 c7 40 f8 00 00 00 movq $0x0,-0x8(%rax) ffffffff800037ce: 00 for (size_t i = 0; i < FLANTERM_MAX_ESC_VALUES; i++) ffffffff800037cf: 48 39 c2 cmp %rax,%rdx ffffffff800037d2: 75 e8 jne ffffffff800037bc ctx->esc_values_i = 0; ffffffff800037d4: 48 c7 43 40 00 00 00 movq $0x0,0x40(%rbx) ffffffff800037db: 00 ctx->rrr = false; ffffffff800037dc: c6 43 0f 00 movb $0x0,0xf(%rbx) ctx->control_sequence = true; ffffffff800037e0: c6 43 0b 01 movb $0x1,0xb(%rbx) return; ffffffff800037e4: e9 ae f8 ff ff jmp ffffffff80003097 if (ctx->callback != NULL) { ffffffff800037e9: 48 8b 83 a8 01 00 00 mov 0x1a8(%rbx),%rax ffffffff800037f0: 48 85 c0 test %rax,%rax ffffffff800037f3: 0f 84 5f fc ff ff je ffffffff80003458 ctx->callback(ctx, FLANTERM_CB_PRIVATE_ID, 0, 0, 0); ffffffff800037f9: 45 31 c0 xor %r8d,%r8d ffffffff800037fc: 31 c9 xor %ecx,%ecx ffffffff800037fe: 31 d2 xor %edx,%edx ffffffff80003800: be 1e 00 00 00 mov $0x1e,%esi ffffffff80003805: 48 89 df mov %rbx,%rdi ffffffff80003808: ff d0 call *%rax ffffffff8000380a: e9 49 fc ff ff jmp ffffffff80003458 if (y == ctx->scroll_top_margin) { ffffffff8000380f: 48 8b 44 24 18 mov 0x18(%rsp),%rax ffffffff80003814: 48 39 43 68 cmp %rax,0x68(%rbx) ffffffff80003818: 0f 84 9a 08 00 00 je ffffffff800040b8 ctx->set_cursor_pos(ctx, 0, y - 1); ffffffff8000381e: 48 8d 50 ff lea -0x1(%rax),%rdx ffffffff80003822: 31 f6 xor %esi,%esi ffffffff80003824: 48 89 df mov %rbx,%rdi ffffffff80003827: ff 93 00 01 00 00 call *0x100(%rbx) ffffffff8000382d: e9 26 fc ff ff jmp ffffffff80003458 if (y == ctx->scroll_bottom_margin - 1) { ffffffff80003832: 48 8b 4b 70 mov 0x70(%rbx),%rcx ffffffff80003836: 48 8b 44 24 18 mov 0x18(%rsp),%rax ffffffff8000383b: 48 8d 51 ff lea -0x1(%rcx),%rdx ffffffff8000383f: 48 39 c2 cmp %rax,%rdx ffffffff80003842: 0f 84 28 08 00 00 je ffffffff80004070 ctx->set_cursor_pos(ctx, 0, y + 1); ffffffff80003848: 48 8d 50 01 lea 0x1(%rax),%rdx ffffffff8000384c: 31 f6 xor %esi,%esi ffffffff8000384e: 48 89 df mov %rbx,%rdi ffffffff80003851: ff 93 00 01 00 00 call *0x100(%rbx) ffffffff80003857: e9 fc fb ff ff jmp ffffffff80003458 case 0x00a2: return 155; ffffffff8000385c: be 9b 00 00 00 mov $0x9b,%esi ffffffff80003861: e9 0a fe ff ff jmp ffffffff80003670 case 0x00a1: return 173; ffffffff80003866: be ad 00 00 00 mov $0xad,%esi ffffffff8000386b: e9 00 fe ff ff jmp ffffffff80003670 case 0x00b1: return 241; ffffffff80003870: be f1 00 00 00 mov $0xf1,%esi ffffffff80003875: e9 f6 fd ff ff jmp ffffffff80003670 case 0x00b0: return 248; ffffffff8000387a: be f8 00 00 00 mov $0xf8,%esi ffffffff8000387f: e9 ec fd ff ff jmp ffffffff80003670 case 0x00ac: return 170; ffffffff80003884: be aa 00 00 00 mov $0xaa,%esi ffffffff80003889: e9 e2 fd ff ff jmp ffffffff80003670 case 0x00ab: return 174; ffffffff8000388e: be ae 00 00 00 mov $0xae,%esi ffffffff80003893: e9 d8 fd ff ff jmp ffffffff80003670 case 0x00aa: return 166; ffffffff80003898: be a6 00 00 00 mov $0xa6,%esi ffffffff8000389d: e9 ce fd ff ff jmp ffffffff80003670 case 0x00a5: return 157; ffffffff800038a2: be 9d 00 00 00 mov $0x9d,%esi ffffffff800038a7: e9 c4 fd ff ff jmp ffffffff80003670 case 0x00a3: return 156; ffffffff800038ac: be 9c 00 00 00 mov $0x9c,%esi ffffffff800038b1: e9 ba fd ff ff jmp ffffffff80003670 case 0x2663: return 5; ffffffff800038b6: be 05 00 00 00 mov $0x5,%esi ffffffff800038bb: e9 b0 fd ff ff jmp ffffffff80003670 case 0x2660: return 6; ffffffff800038c0: be 06 00 00 00 mov $0x6,%esi ffffffff800038c5: e9 a6 fd ff ff jmp ffffffff80003670 case 0x2642: return 11; ffffffff800038ca: be 0b 00 00 00 mov $0xb,%esi ffffffff800038cf: e9 9c fd ff ff jmp ffffffff80003670 case 0x2640: return 12; ffffffff800038d4: be 0c 00 00 00 mov $0xc,%esi ffffffff800038d9: e9 92 fd ff ff jmp ffffffff80003670 case 0x263c: return 15; ffffffff800038de: be 0f 00 00 00 mov $0xf,%esi ffffffff800038e3: e9 88 fd ff ff jmp ffffffff80003670 case 0x263b: return 2; ffffffff800038e8: be 02 00 00 00 mov $0x2,%esi ffffffff800038ed: e9 7e fd ff ff jmp ffffffff80003670 case 0x25d9: return 10; ffffffff800038f2: be 0a 00 00 00 mov $0xa,%esi ffffffff800038f7: e9 74 fd ff ff jmp ffffffff80003670 case 0x266b: return 14; ffffffff800038fc: be 0e 00 00 00 mov $0xe,%esi ffffffff80003901: e9 6a fd ff ff jmp ffffffff80003670 case 0x266a: return 13; ffffffff80003906: be 0d 00 00 00 mov $0xd,%esi ffffffff8000390b: e9 60 fd ff ff jmp ffffffff80003670 case 0x2524: return 180; ffffffff80003910: be b4 00 00 00 mov $0xb4,%esi ffffffff80003915: e9 56 fd ff ff jmp ffffffff80003670 case 0x251c: return 195; ffffffff8000391a: be c3 00 00 00 mov $0xc3,%esi ffffffff8000391f: e9 4c fd ff ff jmp ffffffff80003670 case 0x2518: return 217; ffffffff80003924: be d9 00 00 00 mov $0xd9,%esi ffffffff80003929: e9 42 fd ff ff jmp ffffffff80003670 case 0x2514: return 192; ffffffff8000392e: be c0 00 00 00 mov $0xc0,%esi ffffffff80003933: e9 38 fd ff ff jmp ffffffff80003670 case 0x2510: return 191; ffffffff80003938: be bf 00 00 00 mov $0xbf,%esi ffffffff8000393d: e9 2e fd ff ff jmp ffffffff80003670 case 0x250c: return 218; ffffffff80003942: be da 00 00 00 mov $0xda,%esi ffffffff80003947: e9 24 fd ff ff jmp ffffffff80003670 case 0x2502: return 179; ffffffff8000394c: be b3 00 00 00 mov $0xb3,%esi ffffffff80003951: e9 1a fd ff ff jmp ffffffff80003670 case 0x2500: return 196; ffffffff80003956: be c4 00 00 00 mov $0xc4,%esi ffffffff8000395b: e9 10 fd ff ff jmp ffffffff80003670 case 0x0192: return 159; ffffffff80003960: be 9f 00 00 00 mov $0x9f,%esi ffffffff80003965: e9 06 fd ff ff jmp ffffffff80003670 case 0x00ff: return 152; ffffffff8000396a: be 98 00 00 00 mov $0x98,%esi ffffffff8000396f: e9 fc fc ff ff jmp ffffffff80003670 case 0x00fc: return 129; ffffffff80003974: be 81 00 00 00 mov $0x81,%esi ffffffff80003979: e9 f2 fc ff ff jmp ffffffff80003670 case 0x00fb: return 150; ffffffff8000397e: be 96 00 00 00 mov $0x96,%esi ffffffff80003983: e9 e8 fc ff ff jmp ffffffff80003670 case 0x00fa: return 163; ffffffff80003988: be a3 00 00 00 mov $0xa3,%esi ffffffff8000398d: e9 de fc ff ff jmp ffffffff80003670 case 0x00f9: return 151; ffffffff80003992: be 97 00 00 00 mov $0x97,%esi ffffffff80003997: e9 d4 fc ff ff jmp ffffffff80003670 case 0x00f7: return 246; ffffffff8000399c: be f6 00 00 00 mov $0xf6,%esi ffffffff800039a1: e9 ca fc ff ff jmp ffffffff80003670 case 0x00f6: return 148; ffffffff800039a6: be 94 00 00 00 mov $0x94,%esi ffffffff800039ab: e9 c0 fc ff ff jmp ffffffff80003670 case 0x00f4: return 147; ffffffff800039b0: be 93 00 00 00 mov $0x93,%esi ffffffff800039b5: e9 b6 fc ff ff jmp ffffffff80003670 case 0x00f3: return 162; ffffffff800039ba: be a2 00 00 00 mov $0xa2,%esi ffffffff800039bf: e9 ac fc ff ff jmp ffffffff80003670 case 0x00f2: return 149; ffffffff800039c4: be 95 00 00 00 mov $0x95,%esi ffffffff800039c9: e9 a2 fc ff ff jmp ffffffff80003670 case 0x00f1: return 164; ffffffff800039ce: be a4 00 00 00 mov $0xa4,%esi ffffffff800039d3: e9 98 fc ff ff jmp ffffffff80003670 case 0x00ef: return 139; ffffffff800039d8: be 8b 00 00 00 mov $0x8b,%esi ffffffff800039dd: e9 8e fc ff ff jmp ffffffff80003670 case 0x2194: return 29; ffffffff800039e2: be 1d 00 00 00 mov $0x1d,%esi ffffffff800039e7: e9 84 fc ff ff jmp ffffffff80003670 case 0x2193: return 25; ffffffff800039ec: be 19 00 00 00 mov $0x19,%esi ffffffff800039f1: e9 7a fc ff ff jmp ffffffff80003670 case 0x2192: return 26; ffffffff800039f6: be 1a 00 00 00 mov $0x1a,%esi ffffffff800039fb: e9 70 fc ff ff jmp ffffffff80003670 case 0x2191: return 24; ffffffff80003a00: be 18 00 00 00 mov $0x18,%esi ffffffff80003a05: e9 66 fc ff ff jmp ffffffff80003670 case 0x2190: return 27; ffffffff80003a0a: be 1b 00 00 00 mov $0x1b,%esi ffffffff80003a0f: e9 5c fc ff ff jmp ffffffff80003670 case 0x00ee: return 140; ffffffff80003a14: be 8c 00 00 00 mov $0x8c,%esi ffffffff80003a19: e9 52 fc ff ff jmp ffffffff80003670 case 0x00ed: return 161; ffffffff80003a1e: be a1 00 00 00 mov $0xa1,%esi ffffffff80003a23: e9 48 fc ff ff jmp ffffffff80003670 case 0x00ec: return 141; ffffffff80003a28: be 8d 00 00 00 mov $0x8d,%esi ffffffff80003a2d: e9 3e fc ff ff jmp ffffffff80003670 case 0x00eb: return 137; ffffffff80003a32: be 89 00 00 00 mov $0x89,%esi ffffffff80003a37: e9 34 fc ff ff jmp ffffffff80003670 case 0x00ea: return 136; ffffffff80003a3c: be 88 00 00 00 mov $0x88,%esi ffffffff80003a41: e9 2a fc ff ff jmp ffffffff80003670 case 0x00e9: return 130; ffffffff80003a46: be 82 00 00 00 mov $0x82,%esi ffffffff80003a4b: e9 20 fc ff ff jmp ffffffff80003670 case 0x00e8: return 138; ffffffff80003a50: be 8a 00 00 00 mov $0x8a,%esi ffffffff80003a55: e9 16 fc ff ff jmp ffffffff80003670 case 0x00e7: return 135; ffffffff80003a5a: be 87 00 00 00 mov $0x87,%esi ffffffff80003a5f: e9 0c fc ff ff jmp ffffffff80003670 case 0x00e6: return 145; ffffffff80003a64: be 91 00 00 00 mov $0x91,%esi ffffffff80003a69: e9 02 fc ff ff jmp ffffffff80003670 case 0x00e5: return 134; ffffffff80003a6e: be 86 00 00 00 mov $0x86,%esi ffffffff80003a73: e9 f8 fb ff ff jmp ffffffff80003670 case 0x00e4: return 132; ffffffff80003a78: be 84 00 00 00 mov $0x84,%esi ffffffff80003a7d: e9 ee fb ff ff jmp ffffffff80003670 case 0x00e2: return 131; ffffffff80003a82: be 83 00 00 00 mov $0x83,%esi ffffffff80003a87: e9 e4 fb ff ff jmp ffffffff80003670 case 0x00e1: return 160; ffffffff80003a8c: be a0 00 00 00 mov $0xa0,%esi ffffffff80003a91: e9 da fb ff ff jmp ffffffff80003670 case 0x00e0: return 133; ffffffff80003a96: be 85 00 00 00 mov $0x85,%esi ffffffff80003a9b: e9 d0 fb ff ff jmp ffffffff80003670 case 0x00df: return 225; ffffffff80003aa0: be e1 00 00 00 mov $0xe1,%esi ffffffff80003aa5: e9 c6 fb ff ff jmp ffffffff80003670 case 0x00dc: return 154; ffffffff80003aaa: be 9a 00 00 00 mov $0x9a,%esi ffffffff80003aaf: e9 bc fb ff ff jmp ffffffff80003670 case 0x00d6: return 153; ffffffff80003ab4: be 99 00 00 00 mov $0x99,%esi ffffffff80003ab9: e9 b2 fb ff ff jmp ffffffff80003670 case 0x00d1: return 165; ffffffff80003abe: be a5 00 00 00 mov $0xa5,%esi ffffffff80003ac3: e9 a8 fb ff ff jmp ffffffff80003670 case 0x00c9: return 144; ffffffff80003ac8: be 90 00 00 00 mov $0x90,%esi ffffffff80003acd: e9 9e fb ff ff jmp ffffffff80003670 case 0x00c7: return 128; ffffffff80003ad2: be 80 00 00 00 mov $0x80,%esi ffffffff80003ad7: e9 94 fb ff ff jmp ffffffff80003670 case 0x00c6: return 146; ffffffff80003adc: be 92 00 00 00 mov $0x92,%esi ffffffff80003ae1: e9 8a fb ff ff jmp ffffffff80003670 case 0x00c5: return 143; ffffffff80003ae6: be 8f 00 00 00 mov $0x8f,%esi ffffffff80003aeb: e9 80 fb ff ff jmp ffffffff80003670 case 0x00c4: return 142; ffffffff80003af0: be 8e 00 00 00 mov $0x8e,%esi ffffffff80003af5: e9 76 fb ff ff jmp ffffffff80003670 case 0x00bf: return 168; ffffffff80003afa: be a8 00 00 00 mov $0xa8,%esi ffffffff80003aff: e9 6c fb ff ff jmp ffffffff80003670 case 0x00bd: return 171; ffffffff80003b04: be ab 00 00 00 mov $0xab,%esi ffffffff80003b09: e9 62 fb ff ff jmp ffffffff80003670 case 0x00bc: return 172; ffffffff80003b0e: be ac 00 00 00 mov $0xac,%esi ffffffff80003b13: e9 58 fb ff ff jmp ffffffff80003670 case 0x00bb: return 175; ffffffff80003b18: be af 00 00 00 mov $0xaf,%esi ffffffff80003b1d: e9 4e fb ff ff jmp ffffffff80003670 case 0x00ba: return 167; ffffffff80003b22: be a7 00 00 00 mov $0xa7,%esi ffffffff80003b27: e9 44 fb ff ff jmp ffffffff80003670 case 0x00b7: return 250; ffffffff80003b2c: be fa 00 00 00 mov $0xfa,%esi ffffffff80003b31: e9 3a fb ff ff jmp ffffffff80003670 case 0x00b5: return 230; ffffffff80003b36: be e6 00 00 00 mov $0xe6,%esi ffffffff80003b3b: e9 30 fb ff ff jmp ffffffff80003670 case 0x00b2: return 253; ffffffff80003b40: be fd 00 00 00 mov $0xfd,%esi ffffffff80003b45: e9 26 fb ff ff jmp ffffffff80003670 case 0x03c6: return 237; ffffffff80003b4a: be ed 00 00 00 mov $0xed,%esi ffffffff80003b4f: e9 1c fb ff ff jmp ffffffff80003670 case 0x03c4: return 231; ffffffff80003b54: be e7 00 00 00 mov $0xe7,%esi ffffffff80003b59: e9 12 fb ff ff jmp ffffffff80003670 case 0x03c3: return 229; ffffffff80003b5e: be e5 00 00 00 mov $0xe5,%esi ffffffff80003b63: e9 08 fb ff ff jmp ffffffff80003670 case 0x03c0: return 227; ffffffff80003b68: be e3 00 00 00 mov $0xe3,%esi ffffffff80003b6d: e9 fe fa ff ff jmp ffffffff80003670 case 0x03b5: return 238; ffffffff80003b72: be ee 00 00 00 mov $0xee,%esi ffffffff80003b77: e9 f4 fa ff ff jmp ffffffff80003670 case 0x03b4: return 235; ffffffff80003b7c: be eb 00 00 00 mov $0xeb,%esi ffffffff80003b81: e9 ea fa ff ff jmp ffffffff80003670 case 0x03a9: return 234; ffffffff80003b86: be ea 00 00 00 mov $0xea,%esi ffffffff80003b8b: e9 e0 fa ff ff jmp ffffffff80003670 case 0x03a6: return 232; ffffffff80003b90: be e8 00 00 00 mov $0xe8,%esi ffffffff80003b95: e9 d6 fa ff ff jmp ffffffff80003670 case 0x03a3: return 228; ffffffff80003b9a: be e4 00 00 00 mov $0xe4,%esi ffffffff80003b9f: e9 cc fa ff ff jmp ffffffff80003670 case 0x0398: return 233; ffffffff80003ba4: be e9 00 00 00 mov $0xe9,%esi ffffffff80003ba9: e9 c2 fa ff ff jmp ffffffff80003670 case 0x255c: return 189; ffffffff80003bae: be bd 00 00 00 mov $0xbd,%esi ffffffff80003bb3: e9 b8 fa ff ff jmp ffffffff80003670 case 0x255b: return 190; ffffffff80003bb8: be be 00 00 00 mov $0xbe,%esi ffffffff80003bbd: e9 ae fa ff ff jmp ffffffff80003670 case 0x255a: return 200; ffffffff80003bc2: be c8 00 00 00 mov $0xc8,%esi ffffffff80003bc7: e9 a4 fa ff ff jmp ffffffff80003670 case 0x2559: return 211; ffffffff80003bcc: be d3 00 00 00 mov $0xd3,%esi ffffffff80003bd1: e9 9a fa ff ff jmp ffffffff80003670 case 0x2558: return 212; ffffffff80003bd6: be d4 00 00 00 mov $0xd4,%esi ffffffff80003bdb: e9 90 fa ff ff jmp ffffffff80003670 case 0x2557: return 187; ffffffff80003be0: be bb 00 00 00 mov $0xbb,%esi ffffffff80003be5: e9 86 fa ff ff jmp ffffffff80003670 case 0x2556: return 183; ffffffff80003bea: be b7 00 00 00 mov $0xb7,%esi ffffffff80003bef: e9 7c fa ff ff jmp ffffffff80003670 case 0x2555: return 184; ffffffff80003bf4: be b8 00 00 00 mov $0xb8,%esi ffffffff80003bf9: e9 72 fa ff ff jmp ffffffff80003670 case 0x2554: return 201; ffffffff80003bfe: be c9 00 00 00 mov $0xc9,%esi ffffffff80003c03: e9 68 fa ff ff jmp ffffffff80003670 case 0x2553: return 214; ffffffff80003c08: be d6 00 00 00 mov $0xd6,%esi ffffffff80003c0d: e9 5e fa ff ff jmp ffffffff80003670 case 0x2552: return 213; ffffffff80003c12: be d5 00 00 00 mov $0xd5,%esi ffffffff80003c17: e9 54 fa ff ff jmp ffffffff80003670 case 0x2551: return 186; ffffffff80003c1c: be ba 00 00 00 mov $0xba,%esi ffffffff80003c21: e9 4a fa ff ff jmp ffffffff80003670 case 0x2550: return 205; ffffffff80003c26: be cd 00 00 00 mov $0xcd,%esi ffffffff80003c2b: e9 40 fa ff ff jmp ffffffff80003670 case 0x253c: return 197; ffffffff80003c30: be c5 00 00 00 mov $0xc5,%esi ffffffff80003c35: e9 36 fa ff ff jmp ffffffff80003670 case 0x2534: return 193; ffffffff80003c3a: be c1 00 00 00 mov $0xc1,%esi ffffffff80003c3f: e9 2c fa ff ff jmp ffffffff80003670 case 0x252c: return 194; ffffffff80003c44: be c2 00 00 00 mov $0xc2,%esi ffffffff80003c49: e9 22 fa ff ff jmp ffffffff80003670 case 0x25d8: return 8; ffffffff80003c4e: be 08 00 00 00 mov $0x8,%esi ffffffff80003c53: e9 18 fa ff ff jmp ffffffff80003670 case 0x25cb: return 9; ffffffff80003c58: be 09 00 00 00 mov $0x9,%esi ffffffff80003c5d: e9 0e fa ff ff jmp ffffffff80003670 case 0x25c4: return 17; ffffffff80003c62: be 11 00 00 00 mov $0x11,%esi ffffffff80003c67: e9 04 fa ff ff jmp ffffffff80003670 case 0x25bc: return 31; ffffffff80003c6c: be 1f 00 00 00 mov $0x1f,%esi ffffffff80003c71: e9 fa f9 ff ff jmp ffffffff80003670 case 0x25ba: return 16; ffffffff80003c76: be 10 00 00 00 mov $0x10,%esi ffffffff80003c7b: e9 f0 f9 ff ff jmp ffffffff80003670 case 0x25b2: return 30; ffffffff80003c80: be 1e 00 00 00 mov $0x1e,%esi ffffffff80003c85: e9 e6 f9 ff ff jmp ffffffff80003670 case 0x25ac: return 22; ffffffff80003c8a: be 16 00 00 00 mov $0x16,%esi ffffffff80003c8f: e9 dc f9 ff ff jmp ffffffff80003670 case 0x25a0: return 254; ffffffff80003c94: be fe 00 00 00 mov $0xfe,%esi ffffffff80003c99: e9 d2 f9 ff ff jmp ffffffff80003670 case 0x2593: return 178; ffffffff80003c9e: be b2 00 00 00 mov $0xb2,%esi ffffffff80003ca3: e9 c8 f9 ff ff jmp ffffffff80003670 case 0x2592: return 177; ffffffff80003ca8: be b1 00 00 00 mov $0xb1,%esi ffffffff80003cad: e9 be f9 ff ff jmp ffffffff80003670 case 0x2591: return 176; ffffffff80003cb2: be b0 00 00 00 mov $0xb0,%esi ffffffff80003cb7: e9 b4 f9 ff ff jmp ffffffff80003670 case 0x2590: return 222; ffffffff80003cbc: be de 00 00 00 mov $0xde,%esi ffffffff80003cc1: e9 aa f9 ff ff jmp ffffffff80003670 case 0x258c: return 221; ffffffff80003cc6: be dd 00 00 00 mov $0xdd,%esi ffffffff80003ccb: e9 a0 f9 ff ff jmp ffffffff80003670 case 0x2588: return 219; ffffffff80003cd0: be db 00 00 00 mov $0xdb,%esi ffffffff80003cd5: e9 96 f9 ff ff jmp ffffffff80003670 case 0x2584: return 220; ffffffff80003cda: be dc 00 00 00 mov $0xdc,%esi ffffffff80003cdf: e9 8c f9 ff ff jmp ffffffff80003670 case 0x2580: return 223; ffffffff80003ce4: be df 00 00 00 mov $0xdf,%esi ffffffff80003ce9: e9 82 f9 ff ff jmp ffffffff80003670 case 0x256c: return 206; ffffffff80003cee: be ce 00 00 00 mov $0xce,%esi ffffffff80003cf3: e9 78 f9 ff ff jmp ffffffff80003670 case 0x256b: return 215; ffffffff80003cf8: be d7 00 00 00 mov $0xd7,%esi ffffffff80003cfd: e9 6e f9 ff ff jmp ffffffff80003670 case 0x256a: return 216; ffffffff80003d02: be d8 00 00 00 mov $0xd8,%esi ffffffff80003d07: e9 64 f9 ff ff jmp ffffffff80003670 case 0x2569: return 202; ffffffff80003d0c: be ca 00 00 00 mov $0xca,%esi ffffffff80003d11: e9 5a f9 ff ff jmp ffffffff80003670 case 0x2568: return 208; ffffffff80003d16: be d0 00 00 00 mov $0xd0,%esi ffffffff80003d1b: e9 50 f9 ff ff jmp ffffffff80003670 case 0x2567: return 207; ffffffff80003d20: be cf 00 00 00 mov $0xcf,%esi ffffffff80003d25: e9 46 f9 ff ff jmp ffffffff80003670 case 0x2566: return 203; ffffffff80003d2a: be cb 00 00 00 mov $0xcb,%esi ffffffff80003d2f: e9 3c f9 ff ff jmp ffffffff80003670 case 0x2565: return 210; ffffffff80003d34: be d2 00 00 00 mov $0xd2,%esi ffffffff80003d39: e9 32 f9 ff ff jmp ffffffff80003670 case 0x2564: return 209; ffffffff80003d3e: be d1 00 00 00 mov $0xd1,%esi ffffffff80003d43: e9 28 f9 ff ff jmp ffffffff80003670 case 0x2563: return 185; ffffffff80003d48: be b9 00 00 00 mov $0xb9,%esi ffffffff80003d4d: e9 1e f9 ff ff jmp ffffffff80003670 case 0x2562: return 182; ffffffff80003d52: be b6 00 00 00 mov $0xb6,%esi ffffffff80003d57: e9 14 f9 ff ff jmp ffffffff80003670 case 0x2561: return 181; ffffffff80003d5c: be b5 00 00 00 mov $0xb5,%esi ffffffff80003d61: e9 0a f9 ff ff jmp ffffffff80003670 case 0x2560: return 204; ffffffff80003d66: be cc 00 00 00 mov $0xcc,%esi ffffffff80003d6b: e9 00 f9 ff ff jmp ffffffff80003670 case 0x255f: return 199; ffffffff80003d70: be c7 00 00 00 mov $0xc7,%esi ffffffff80003d75: e9 f6 f8 ff ff jmp ffffffff80003670 case 0x255e: return 198; ffffffff80003d7a: be c6 00 00 00 mov $0xc6,%esi ffffffff80003d7f: e9 ec f8 ff ff jmp ffffffff80003670 case 0x255d: return 188; ffffffff80003d84: be bc 00 00 00 mov $0xbc,%esi ffffffff80003d89: e9 e2 f8 ff ff jmp ffffffff80003670 case 0x03b1: return 224; ffffffff80003d8e: be e0 00 00 00 mov $0xe0,%esi ffffffff80003d93: e9 d8 f8 ff ff jmp ffffffff80003670 case 0x0393: return 226; ffffffff80003d98: be e2 00 00 00 mov $0xe2,%esi ffffffff80003d9d: e9 ce f8 ff ff jmp ffffffff80003670 case 0x00b6: return 20; ffffffff80003da2: be 14 00 00 00 mov $0x14,%esi ffffffff80003da7: e9 c4 f8 ff ff jmp ffffffff80003670 switch (code_point) { ffffffff80003dac: be 01 00 00 00 mov $0x1,%esi ffffffff80003db1: e9 ba f8 ff ff jmp ffffffff80003670 case 0x2666: return 4; ffffffff80003db6: be 04 00 00 00 mov $0x4,%esi ffffffff80003dbb: e9 b0 f8 ff ff jmp ffffffff80003670 switch (code_point) { ffffffff80003dc0: be 03 00 00 00 mov $0x3,%esi ffffffff80003dc5: e9 a6 f8 ff ff jmp ffffffff80003670 case 0x21a8: return 23; ffffffff80003dca: be 17 00 00 00 mov $0x17,%esi ffffffff80003dcf: e9 9c f8 ff ff jmp ffffffff80003670 case 0x2195: return 18; ffffffff80003dd4: be 12 00 00 00 mov $0x12,%esi ffffffff80003dd9: e9 92 f8 ff ff jmp ffffffff80003670 case 0x00a7: return 21; ffffffff80003dde: be 15 00 00 00 mov $0x15,%esi ffffffff80003de3: e9 88 f8 ff ff jmp ffffffff80003670 ffffffff80003de8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) ffffffff80003def: 00 ctx->osc_escape = true; ffffffff80003df0: c6 43 0e 01 movb $0x1,0xe(%rbx) return; ffffffff80003df4: e9 9e f2 ff ff jmp ffffffff80003097 ctx->scroll(ctx); ffffffff80003df9: 48 89 df mov %rbx,%rdi ffffffff80003dfc: ff 93 68 01 00 00 call *0x168(%rbx) ctx->set_cursor_pos(ctx, (ctx->oob_output & FLANTERM_OOB_OUTPUT_ONLCR) ? 0 : x, y); ffffffff80003e02: 48 8b 83 00 01 00 00 mov 0x100(%rbx),%rax ffffffff80003e09: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff80003e0e: 31 f6 xor %esi,%esi ffffffff80003e10: f6 83 b8 00 00 00 10 testb $0x10,0xb8(%rbx) ffffffff80003e17: 0f 85 65 f5 ff ff jne ffffffff80003382 ffffffff80003e1d: e9 5b f5 ff ff jmp ffffffff8000337d ctx->set_cursor_pos(ctx, ctx->cols - 1, y); ffffffff80003e22: 48 8d 72 ff lea -0x1(%rdx),%rsi ffffffff80003e26: 48 89 fa mov %rdi,%rdx ffffffff80003e29: 48 89 df mov %rbx,%rdi ffffffff80003e2c: ff d1 call *%rcx return; ffffffff80003e2e: e9 64 f2 ff ff jmp ffffffff80003097 switch (c) { ffffffff80003e33: 41 8d 54 24 d5 lea -0x2b(%r12),%edx ffffffff80003e38: 80 fa 53 cmp $0x53,%dl ffffffff80003e3b: 0f 87 e0 f4 ff ff ja ffffffff80003321 ffffffff80003e41: 0f b6 d2 movzbl %dl,%edx ffffffff80003e44: 3e ff 24 d5 18 a8 00 notrack jmp *-0x7fff57e8(,%rdx,8) ffffffff80003e4b: 80 if (ctx->rrr == true) { ffffffff80003e4c: 80 7b 0f 00 cmpb $0x0,0xf(%rbx) ffffffff80003e50: 0f 84 8a 01 00 00 je ffffffff80003fe0 ctx->esc_values_i++; ffffffff80003e56: 48 83 c2 01 add $0x1,%rdx ctx->rrr = false; ffffffff80003e5a: c6 43 0f 00 movb $0x0,0xf(%rbx) ctx->esc_values_i++; ffffffff80003e5e: 48 89 53 40 mov %rdx,0x40(%rbx) if (c == ';') ffffffff80003e62: 41 80 fc 3b cmp $0x3b,%r12b ffffffff80003e66: 0f 84 2b f2 ff ff je ffffffff80003097 if (ctx->dec_private == true) { ffffffff80003e6c: 0f b6 73 14 movzbl 0x14(%rbx),%esi switch (c) { ffffffff80003e70: 41 80 fc 4b cmp $0x4b,%r12b ffffffff80003e74: 0f 8f 8f 01 00 00 jg ffffffff80004009 ffffffff80003e7a: 41 80 fc 49 cmp $0x49,%r12b ffffffff80003e7e: 0f 8f 67 02 00 00 jg ffffffff800040eb for (size_t i = ctx->esc_values_i; i < FLANTERM_MAX_ESC_VALUES; i++) { ffffffff80003e84: 41 b8 01 00 00 00 mov $0x1,%r8d ffffffff80003e8a: 48 83 fa 0f cmp $0xf,%rdx ffffffff80003e8e: 0f 87 d2 09 00 00 ja ffffffff80004866 ffffffff80003e94: 48 8d bb b8 00 00 00 lea 0xb8(%rbx),%rdi ffffffff80003e9b: 48 8d 44 93 78 lea 0x78(%rbx,%rdx,4),%rax ctx->esc_values[i] = esc_default; ffffffff80003ea0: 44 89 c1 mov %r8d,%ecx ffffffff80003ea3: 49 89 f9 mov %rdi,%r9 ffffffff80003ea6: 49 29 c1 sub %rax,%r9 ffffffff80003ea9: 41 83 e1 04 and $0x4,%r9d ffffffff80003ead: 74 0c je ffffffff80003ebb ffffffff80003eaf: 44 89 00 mov %r8d,(%rax) for (size_t i = ctx->esc_values_i; i < FLANTERM_MAX_ESC_VALUES; i++) { ffffffff80003eb2: 48 83 c0 04 add $0x4,%rax ffffffff80003eb6: 48 39 c7 cmp %rax,%rdi ffffffff80003eb9: 74 0e je ffffffff80003ec9 ctx->esc_values[i] = esc_default; ffffffff80003ebb: 89 08 mov %ecx,(%rax) for (size_t i = ctx->esc_values_i; i < FLANTERM_MAX_ESC_VALUES; i++) { ffffffff80003ebd: 48 83 c0 08 add $0x8,%rax ctx->esc_values[i] = esc_default; ffffffff80003ec1: 89 48 fc mov %ecx,-0x4(%rax) for (size_t i = ctx->esc_values_i; i < FLANTERM_MAX_ESC_VALUES; i++) { ffffffff80003ec4: 48 39 c7 cmp %rax,%rdi ffffffff80003ec7: 75 f2 jne ffffffff80003ebb if (ctx->dec_private == true) { ffffffff80003ec9: 40 84 f6 test %sil,%sil ffffffff80003ecc: 0f 85 e8 02 00 00 jne ffffffff800041ba bool r = ctx->scroll_enabled; ffffffff80003ed2: 44 0f b6 73 0a movzbl 0xa(%rbx),%r14d ctx->get_cursor_pos(ctx, &x, &y); ffffffff80003ed7: 48 8d 54 24 18 lea 0x18(%rsp),%rdx ctx->scroll_enabled = false; ffffffff80003edc: c6 43 0a 00 movb $0x0,0xa(%rbx) ctx->get_cursor_pos(ctx, &x, &y); ffffffff80003ee0: 48 89 df mov %rbx,%rdi ffffffff80003ee3: 48 8d 74 24 10 lea 0x10(%rsp),%rsi ffffffff80003ee8: ff 93 08 01 00 00 call *0x108(%rbx) switch (c) { ffffffff80003eee: 41 8d 44 24 c0 lea -0x40(%r12),%eax ffffffff80003ef3: 3c 35 cmp $0x35,%al ffffffff80003ef5: 77 67 ja ffffffff80003f5e ffffffff80003ef7: 0f b6 c0 movzbl %al,%eax ffffffff80003efa: 3e ff 24 c5 b8 aa 00 notrack jmp *-0x7fff5548(,%rax,8) ffffffff80003f01: 80 x = 0; ffffffff80003f02: 31 ff xor %edi,%edi ffffffff80003f04: 48 89 7c 24 10 mov %rdi,0x10(%rsp) if (y + ctx->esc_values[0] > ctx->rows - 1) ffffffff80003f09: 48 8b 4c 24 18 mov 0x18(%rsp),%rcx ffffffff80003f0e: 48 8b 83 e0 00 00 00 mov 0xe0(%rbx),%rax ffffffff80003f15: 8b 53 78 mov 0x78(%rbx),%edx ffffffff80003f18: 48 8d 78 ff lea -0x1(%rax),%rdi ffffffff80003f1c: 48 8d 34 0a lea (%rdx,%rcx,1),%rsi ffffffff80003f20: 48 39 f7 cmp %rsi,%rdi ffffffff80003f23: 73 08 jae ffffffff80003f2d ctx->esc_values[0] = (ctx->rows - 1) - y; ffffffff80003f25: 29 c8 sub %ecx,%eax ffffffff80003f27: 8d 50 ff lea -0x1(%rax),%edx ffffffff80003f2a: 89 53 78 mov %edx,0x78(%rbx) if ((ctx->scroll_top_margin >= orig_y && ctx->scroll_top_margin <= dest_y) ffffffff80003f2d: 48 8b 73 68 mov 0x68(%rbx),%rsi || (ctx->scroll_bottom_margin >= orig_y && ctx->scroll_bottom_margin <= dest_y)) { ffffffff80003f31: 48 8b 43 70 mov 0x70(%rbx),%rax size_t dest_y = y + ctx->esc_values[0]; ffffffff80003f35: 48 01 ca add %rcx,%rdx if ((ctx->scroll_top_margin >= orig_y && ctx->scroll_top_margin <= dest_y) ffffffff80003f38: 48 39 ce cmp %rcx,%rsi ffffffff80003f3b: 72 05 jb ffffffff80003f42 ffffffff80003f3d: 48 39 f2 cmp %rsi,%rdx ffffffff80003f40: 73 05 jae ffffffff80003f47 || (ctx->scroll_bottom_margin >= orig_y && ctx->scroll_bottom_margin <= dest_y)) { ffffffff80003f42: 48 39 c8 cmp %rcx,%rax ffffffff80003f45: 72 09 jb ffffffff80003f50 if (will_be_in_scroll_region && dest_y >= ctx->scroll_bottom_margin) { ffffffff80003f47: 48 39 c2 cmp %rax,%rdx ffffffff80003f4a: 0f 83 dc 07 00 00 jae ffffffff8000472c ctx->set_cursor_pos(ctx, x, ctx->esc_values[0]); ffffffff80003f50: 48 8b 74 24 10 mov 0x10(%rsp),%rsi ffffffff80003f55: 48 89 df mov %rbx,%rdi ffffffff80003f58: ff 93 00 01 00 00 call *0x100(%rbx) ctx->scroll_enabled = r; ffffffff80003f5e: 44 88 73 0a mov %r14b,0xa(%rbx) ctx->control_sequence = false; ffffffff80003f62: 31 d2 xor %edx,%edx ffffffff80003f64: 66 89 53 0b mov %dx,0xb(%rbx) ffffffff80003f68: e9 2a f1 ff ff jmp ffffffff80003097 switch (c) { ffffffff80003f6d: 41 80 fc 3f cmp $0x3f,%r12b ffffffff80003f71: 0f 84 17 01 00 00 je ffffffff8000408e ffffffff80003f77: 41 80 fc 5b cmp $0x5b,%r12b ffffffff80003f7b: 0f 85 30 f6 ff ff jne ffffffff800035b1 ctx->discard_next = true; ffffffff80003f81: c6 43 10 01 movb $0x1,0x10(%rbx) goto cleanup; ffffffff80003f85: eb db jmp ffffffff80003f62 switch (code_point) { ffffffff80003f87: 49 8d 84 24 e7 dd ff lea -0x2219(%r12),%rax ffffffff80003f8e: ff ffffffff80003f8f: 48 83 f8 2f cmp $0x2f,%rax ffffffff80003f93: 0f 87 27 f4 ff ff ja ffffffff800033c0 ffffffff80003f99: 3e ff 24 c5 68 ac 00 notrack jmp *-0x7fff5398(,%rax,8) ffffffff80003fa0: 80 ffffffff80003fa1: 49 81 fc 7f 20 00 00 cmp $0x207f,%r12 ffffffff80003fa8: 0f 84 02 02 00 00 je ffffffff800041b0 ffffffff80003fae: 0f 87 dc 01 00 00 ja ffffffff80004190 ffffffff80003fb4: 49 81 fc 22 20 00 00 cmp $0x2022,%r12 ffffffff80003fbb: 0f 84 c5 01 00 00 je ffffffff80004186 case 0x203c: return 19; ffffffff80003fc1: be 13 00 00 00 mov $0x13,%esi switch (code_point) { ffffffff80003fc6: 49 81 fc 3c 20 00 00 cmp $0x203c,%r12 ffffffff80003fcd: 0f 84 9d f6 ff ff je ffffffff80003670 ffffffff80003fd3: e9 e8 f3 ff ff jmp ffffffff800033c0 ffffffff80003fd8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) ffffffff80003fdf: 00 } else if (c == ';') { ffffffff80003fe0: 41 80 fc 3b cmp $0x3b,%r12b ffffffff80003fe4: 0f 85 82 fe ff ff jne ffffffff80003e6c if (ctx->esc_values_i == FLANTERM_MAX_ESC_VALUES) { ffffffff80003fea: 48 83 fa 10 cmp $0x10,%rdx ffffffff80003fee: 0f 84 a3 f0 ff ff je ffffffff80003097 ctx->esc_values[ctx->esc_values_i] = 0; ffffffff80003ff4: c7 44 93 78 00 00 00 movl $0x0,0x78(%rbx,%rdx,4) ffffffff80003ffb: 00 ctx->esc_values_i++; ffffffff80003ffc: 48 83 c2 01 add $0x1,%rdx ffffffff80004000: 48 89 53 40 mov %rdx,0x40(%rbx) return; ffffffff80004004: e9 8e f0 ff ff jmp ffffffff80003097 switch (c) { ffffffff80004009: 41 80 fc 71 cmp $0x71,%r12b ffffffff8000400d: 0f 85 c3 00 00 00 jne ffffffff800040d6 esc_default = 0; break; ffffffff80004013: 45 31 c0 xor %r8d,%r8d for (size_t i = ctx->esc_values_i; i < FLANTERM_MAX_ESC_VALUES; i++) { ffffffff80004016: 48 83 fa 0f cmp $0xf,%rdx ffffffff8000401a: 0f 86 74 fe ff ff jbe ffffffff80003e94 if (ctx->dec_private == true) { ffffffff80004020: 40 84 f6 test %sil,%sil ffffffff80004023: 0f 85 46 08 00 00 jne ffffffff8000486f bool r = ctx->scroll_enabled; ffffffff80004029: 44 0f b6 73 0a movzbl 0xa(%rbx),%r14d ctx->get_cursor_pos(ctx, &x, &y); ffffffff8000402e: 48 8d 54 24 18 lea 0x18(%rsp),%rdx ctx->scroll_enabled = false; ffffffff80004033: c6 43 0a 00 movb $0x0,0xa(%rbx) ctx->get_cursor_pos(ctx, &x, &y); ffffffff80004037: 48 89 df mov %rbx,%rdi ffffffff8000403a: 48 8d 74 24 10 lea 0x10(%rsp),%rsi ffffffff8000403f: ff 93 08 01 00 00 call *0x108(%rbx) if (ctx->callback != NULL) { ffffffff80004045: 48 8b 83 a8 01 00 00 mov 0x1a8(%rbx),%rax ffffffff8000404c: 48 85 c0 test %rax,%rax ffffffff8000404f: 0f 84 09 ff ff ff je ffffffff80003f5e ctx->callback(ctx, FLANTERM_CB_KBD_LEDS, ctx->esc_values[0], 0, 0); ffffffff80004055: 8b 53 78 mov 0x78(%rbx),%edx ffffffff80004058: 45 31 c0 xor %r8d,%r8d ffffffff8000405b: 31 c9 xor %ecx,%ecx ffffffff8000405d: be 3c 00 00 00 mov $0x3c,%esi ffffffff80004062: 48 89 df mov %rbx,%rdi ffffffff80004065: ff d0 call *%rax ffffffff80004067: e9 f2 fe ff ff jmp ffffffff80003f5e ffffffff8000406c: 0f 1f 40 00 nopl 0x0(%rax) ctx->scroll(ctx); ffffffff80004070: 48 89 df mov %rbx,%rdi ffffffff80004073: ff 93 68 01 00 00 call *0x168(%rbx) ctx->set_cursor_pos(ctx, 0, y); ffffffff80004079: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff8000407e: 31 f6 xor %esi,%esi ffffffff80004080: 48 89 df mov %rbx,%rdi ffffffff80004083: ff 93 00 01 00 00 call *0x100(%rbx) ffffffff80004089: e9 ca f3 ff ff jmp ffffffff80003458 ctx->dec_private = true; ffffffff8000408e: c6 43 14 01 movb $0x1,0x14(%rbx) return; ffffffff80004092: e9 00 f0 ff ff jmp ffffffff80003097 ctx->scroll(ctx); ffffffff80004097: 48 89 df mov %rbx,%rdi ffffffff8000409a: ff 93 68 01 00 00 call *0x168(%rbx) ctx->set_cursor_pos(ctx, x, y); ffffffff800040a0: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff800040a5: 48 8b 74 24 10 mov 0x10(%rsp),%rsi ffffffff800040aa: 48 89 df mov %rbx,%rdi ffffffff800040ad: ff 93 00 01 00 00 call *0x100(%rbx) ffffffff800040b3: e9 a0 f3 ff ff jmp ffffffff80003458 ctx->revscroll(ctx); ffffffff800040b8: 48 89 df mov %rbx,%rdi ffffffff800040bb: ff 93 70 01 00 00 call *0x170(%rbx) ctx->set_cursor_pos(ctx, 0, y); ffffffff800040c1: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff800040c6: 31 f6 xor %esi,%esi ffffffff800040c8: 48 89 df mov %rbx,%rdi ffffffff800040cb: ff 93 00 01 00 00 call *0x100(%rbx) ffffffff800040d1: e9 82 f3 ff ff jmp ffffffff80003458 for (size_t i = ctx->esc_values_i; i < FLANTERM_MAX_ESC_VALUES; i++) { ffffffff800040d6: 48 83 fa 0f cmp $0xf,%rdx ffffffff800040da: 0f 87 31 06 00 00 ja ffffffff80004711 ffffffff800040e0: 41 b8 01 00 00 00 mov $0x1,%r8d ffffffff800040e6: e9 a9 fd ff ff jmp ffffffff80003e94 esc_default = 0; break; ffffffff800040eb: 45 31 c0 xor %r8d,%r8d for (size_t i = ctx->esc_values_i; i < FLANTERM_MAX_ESC_VALUES; i++) { ffffffff800040ee: 48 83 fa 0f cmp $0xf,%rdx ffffffff800040f2: 0f 86 9c fd ff ff jbe ffffffff80003e94 if (ctx->dec_private == true) { ffffffff800040f8: 40 84 f6 test %sil,%sil ffffffff800040fb: 0f 84 d1 fd ff ff je ffffffff80003ed2 ctx->dec_private = false; ffffffff80004101: c6 43 14 00 movb $0x0,0x14(%rbx) switch (c) { ffffffff80004105: 41 80 fc 6c cmp $0x6c,%r12b ffffffff80004109: 0f 85 53 fe ff ff jne ffffffff80003f62 switch (ctx->esc_values[0]) { ffffffff8000410f: 83 7b 78 19 cmpl $0x19,0x78(%rbx) ffffffff80004113: 0f 84 0a 06 00 00 je ffffffff80004723 if (ctx->callback != NULL) { ffffffff80004119: 48 8b 83 a8 01 00 00 mov 0x1a8(%rbx),%rax ffffffff80004120: 48 85 c0 test %rax,%rax ffffffff80004123: 0f 84 39 fe ff ff je ffffffff80003f62 ctx->callback(ctx, FLANTERM_CB_DEC, ctx->esc_values_i, (uintptr_t)ctx->esc_values, c); ffffffff80004129: 48 8d 4b 78 lea 0x78(%rbx),%rcx ffffffff8000412d: 4d 0f be c4 movsbq %r12b,%r8 ffffffff80004131: be 0a 00 00 00 mov $0xa,%esi ffffffff80004136: 48 89 df mov %rbx,%rdi ffffffff80004139: ff d0 call *%rax ffffffff8000413b: e9 22 fe ff ff jmp ffffffff80003f62 case 0x2248: return 247; ffffffff80004140: be f7 00 00 00 mov $0xf7,%esi ffffffff80004145: e9 26 f5 ff ff jmp ffffffff80003670 case 0x2302: return 127; ffffffff8000414a: be 7f 00 00 00 mov $0x7f,%esi ffffffff8000414f: e9 1c f5 ff ff jmp ffffffff80003670 case 0x2229: return 239; ffffffff80004154: be ef 00 00 00 mov $0xef,%esi ffffffff80004159: e9 12 f5 ff ff jmp ffffffff80003670 case 0x221a: return 251; ffffffff8000415e: be fb 00 00 00 mov $0xfb,%esi ffffffff80004163: e9 08 f5 ff ff jmp ffffffff80003670 case 0x2219: return 249; ffffffff80004168: be f9 00 00 00 mov $0xf9,%esi ffffffff8000416d: e9 fe f4 ff ff jmp ffffffff80003670 case 0x2265: return 242; ffffffff80004172: be f2 00 00 00 mov $0xf2,%esi ffffffff80004177: e9 f4 f4 ff ff jmp ffffffff80003670 case 0x2264: return 243; ffffffff8000417c: be f3 00 00 00 mov $0xf3,%esi ffffffff80004181: e9 ea f4 ff ff jmp ffffffff80003670 case 0x2022: return 7; ffffffff80004186: be 07 00 00 00 mov $0x7,%esi ffffffff8000418b: e9 e0 f4 ff ff jmp ffffffff80003670 case 0x20a7: return 158; ffffffff80004190: be 9e 00 00 00 mov $0x9e,%esi switch (code_point) { ffffffff80004195: 49 81 fc a7 20 00 00 cmp $0x20a7,%r12 ffffffff8000419c: 0f 84 ce f4 ff ff je ffffffff80003670 ffffffff800041a2: e9 19 f2 ff ff jmp ffffffff800033c0 ffffffff800041a7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff800041ae: 00 00 case 0x207f: return 252; ffffffff800041b0: be fc 00 00 00 mov $0xfc,%esi ffffffff800041b5: e9 b6 f4 ff ff jmp ffffffff80003670 ctx->dec_private = false; ffffffff800041ba: c6 43 14 00 movb $0x0,0x14(%rbx) if (ctx->esc_values_i == 0) { ffffffff800041be: 48 85 d2 test %rdx,%rdx ffffffff800041c1: 0f 84 9b fd ff ff je ffffffff80003f62 switch (c) { ffffffff800041c7: 41 80 fc 68 cmp $0x68,%r12b ffffffff800041cb: 0f 85 34 ff ff ff jne ffffffff80004105 switch (ctx->esc_values[0]) { ffffffff800041d1: 83 7b 78 19 cmpl $0x19,0x78(%rbx) ffffffff800041d5: 0f 85 3e ff ff ff jne ffffffff80004119 ctx->cursor_enabled = true; ffffffff800041db: c6 43 09 01 movb $0x1,0x9(%rbx) ffffffff800041df: e9 7e fd ff ff jmp ffffffff80003f62 ffffffff800041e4: 0f 1f 40 00 nopl 0x0(%rax) case 0x2321: return 245; ffffffff800041e8: be f5 00 00 00 mov $0xf5,%esi ffffffff800041ed: e9 7e f4 ff ff jmp ffffffff80003670 case 0x2320: return 244; ffffffff800041f2: be f4 00 00 00 mov $0xf4,%esi ffffffff800041f7: e9 74 f4 ff ff jmp ffffffff80003670 for (size_t i = x + ctx->esc_values[0]; i < ctx->cols; i++) ffffffff800041fc: 8b 53 78 mov 0x78(%rbx),%edx ffffffff800041ff: 4c 8b 64 24 10 mov 0x10(%rsp),%r12 ffffffff80004204: 48 8b 83 e8 00 00 00 mov 0xe8(%rbx),%rax ffffffff8000420b: 49 01 d4 add %rdx,%r12 ffffffff8000420e: 49 39 c4 cmp %rax,%r12 ffffffff80004211: 73 2d jae ffffffff80004240 ctx->move_character(ctx, i - ctx->esc_values[0], y, i, y); ffffffff80004213: 4c 8b 44 24 18 mov 0x18(%rsp),%r8 ffffffff80004218: 4c 89 e6 mov %r12,%rsi ffffffff8000421b: 4c 89 e1 mov %r12,%rcx ffffffff8000421e: 48 89 df mov %rbx,%rdi ffffffff80004221: 48 29 d6 sub %rdx,%rsi for (size_t i = x + ctx->esc_values[0]; i < ctx->cols; i++) ffffffff80004224: 49 83 c4 01 add $0x1,%r12 ctx->move_character(ctx, i - ctx->esc_values[0], y, i, y); ffffffff80004228: 4c 89 c2 mov %r8,%rdx ffffffff8000422b: ff 93 60 01 00 00 call *0x160(%rbx) for (size_t i = x + ctx->esc_values[0]; i < ctx->cols; i++) ffffffff80004231: 48 8b 83 e8 00 00 00 mov 0xe8(%rbx),%rax ffffffff80004238: 8b 53 78 mov 0x78(%rbx),%edx ffffffff8000423b: 49 39 c4 cmp %rax,%r12 ffffffff8000423e: 72 d3 jb ffffffff80004213 ctx->set_cursor_pos(ctx, ctx->cols - ctx->esc_values[0], y); ffffffff80004240: 48 29 d0 sub %rdx,%rax ffffffff80004243: 48 89 df mov %rbx,%rdi ffffffff80004246: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff8000424b: 48 89 c6 mov %rax,%rsi ffffffff8000424e: ff 93 00 01 00 00 call *0x100(%rbx) size_t count = ctx->esc_values[0] > ctx->cols ? ctx->cols : ctx->esc_values[0]; ffffffff80004254: 44 8b 63 78 mov 0x78(%rbx),%r12d ffffffff80004258: 48 8b 83 e8 00 00 00 mov 0xe8(%rbx),%rax ffffffff8000425f: 49 39 c4 cmp %rax,%r12 ffffffff80004262: 4c 0f 47 e0 cmova %rax,%r12 for (size_t i = 0; i < count; i++) ffffffff80004266: 45 31 ff xor %r15d,%r15d ffffffff80004269: 4d 85 e4 test %r12,%r12 ffffffff8000426c: 74 17 je ffffffff80004285 ffffffff8000426e: 49 83 c7 01 add $0x1,%r15 ctx->raw_putchar(ctx, ' '); ffffffff80004272: be 20 00 00 00 mov $0x20,%esi ffffffff80004277: 48 89 df mov %rbx,%rdi ffffffff8000427a: ff 93 f0 00 00 00 call *0xf0(%rbx) for (size_t i = 0; i < count; i++) ffffffff80004280: 4d 39 fc cmp %r15,%r12 ffffffff80004283: 75 e9 jne ffffffff8000426e ctx->set_cursor_pos(ctx, x, y); ffffffff80004285: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff8000428a: 48 8b 74 24 10 mov 0x10(%rsp),%rsi ffffffff8000428f: 48 89 df mov %rbx,%rdi ffffffff80004292: ff 93 00 01 00 00 call *0x100(%rbx) break; ffffffff80004298: e9 c1 fc ff ff jmp ffffffff80003f5e x = 0; ffffffff8000429d: 45 31 c0 xor %r8d,%r8d ffffffff800042a0: 4c 89 44 24 10 mov %r8,0x10(%rsp) if (ctx->esc_values[0] > y) ffffffff800042a5: 48 8b 4c 24 18 mov 0x18(%rsp),%rcx ffffffff800042aa: 8b 53 78 mov 0x78(%rbx),%edx ffffffff800042ad: 48 39 d1 cmp %rdx,%rcx ffffffff800042b0: 73 05 jae ffffffff800042b7 ctx->esc_values[0] = y; ffffffff800042b2: 89 4b 78 mov %ecx,0x78(%rbx) ffffffff800042b5: 89 ca mov %ecx,%edx size_t dest_y = y - ctx->esc_values[0]; ffffffff800042b7: 48 89 c8 mov %rcx,%rax ffffffff800042ba: 48 29 d0 sub %rdx,%rax if ((ctx->scroll_top_margin >= dest_y && ctx->scroll_top_margin <= orig_y) ffffffff800042bd: 48 8b 53 68 mov 0x68(%rbx),%rdx ffffffff800042c1: 48 39 c2 cmp %rax,%rdx ffffffff800042c4: 72 09 jb ffffffff800042cf ffffffff800042c6: 48 39 d1 cmp %rdx,%rcx ffffffff800042c9: 0f 83 2c 04 00 00 jae ffffffff800046fb || (ctx->scroll_bottom_margin >= dest_y && ctx->scroll_bottom_margin <= orig_y)) { ffffffff800042cf: 48 8b 73 70 mov 0x70(%rbx),%rsi ffffffff800042d3: 48 39 c6 cmp %rax,%rsi ffffffff800042d6: 72 09 jb ffffffff800042e1 ffffffff800042d8: 48 39 f1 cmp %rsi,%rcx ffffffff800042db: 0f 83 1a 04 00 00 jae ffffffff800046fb ctx->set_cursor_pos(ctx, x, dest_y); ffffffff800042e1: 48 8b 74 24 10 mov 0x10(%rsp),%rsi ffffffff800042e6: 48 89 c2 mov %rax,%rdx ffffffff800042e9: 48 89 df mov %rbx,%rdi ffffffff800042ec: ff 93 00 01 00 00 call *0x100(%rbx) break; ffffffff800042f2: e9 67 fc ff ff jmp ffffffff80003f5e case 0x221f: return 28; ffffffff800042f7: be 1c 00 00 00 mov $0x1c,%esi ffffffff800042fc: e9 6f f3 ff ff jmp ffffffff80003670 case '~': FLANTERM_DEC_SPCL_PRN(0xfa) ffffffff80004301: be fa 00 00 00 mov $0xfa,%esi ffffffff80004306: 48 89 df mov %rbx,%rdi ffffffff80004309: ff d0 call *%rax ffffffff8000430b: e9 87 ed ff ff jmp ffffffff80003097 case '}': FLANTERM_DEC_SPCL_PRN(0x9c) ffffffff80004310: be 9c 00 00 00 mov $0x9c,%esi ffffffff80004315: 48 89 df mov %rbx,%rdi ffffffff80004318: ff d0 call *%rax ffffffff8000431a: e9 78 ed ff ff jmp ffffffff80003097 case '{': FLANTERM_DEC_SPCL_PRN(0xe3) ffffffff8000431f: be e3 00 00 00 mov $0xe3,%esi ffffffff80004324: 48 89 df mov %rbx,%rdi ffffffff80004327: ff d0 call *%rax ffffffff80004329: e9 69 ed ff ff jmp ffffffff80003097 case 'z': FLANTERM_DEC_SPCL_PRN(0xf2) ffffffff8000432e: be f2 00 00 00 mov $0xf2,%esi ffffffff80004333: 48 89 df mov %rbx,%rdi ffffffff80004336: ff d0 call *%rax ffffffff80004338: e9 5a ed ff ff jmp ffffffff80003097 case 'y': FLANTERM_DEC_SPCL_PRN(0xf3) ffffffff8000433d: be f3 00 00 00 mov $0xf3,%esi ffffffff80004342: 48 89 df mov %rbx,%rdi ffffffff80004345: ff d0 call *%rax ffffffff80004347: e9 4b ed ff ff jmp ffffffff80003097 case 'x': FLANTERM_DEC_SPCL_PRN(0xb3) ffffffff8000434c: be b3 00 00 00 mov $0xb3,%esi ffffffff80004351: 48 89 df mov %rbx,%rdi ffffffff80004354: ff d0 call *%rax ffffffff80004356: e9 3c ed ff ff jmp ffffffff80003097 case 'w': FLANTERM_DEC_SPCL_PRN(0xc2) ffffffff8000435b: be c2 00 00 00 mov $0xc2,%esi ffffffff80004360: 48 89 df mov %rbx,%rdi ffffffff80004363: ff d0 call *%rax ffffffff80004365: e9 2d ed ff ff jmp ffffffff80003097 case 'v': FLANTERM_DEC_SPCL_PRN(0xc1) ffffffff8000436a: be c1 00 00 00 mov $0xc1,%esi ffffffff8000436f: 48 89 df mov %rbx,%rdi ffffffff80004372: ff d0 call *%rax ffffffff80004374: e9 1e ed ff ff jmp ffffffff80003097 case 'u': FLANTERM_DEC_SPCL_PRN(0xb4) ffffffff80004379: be b4 00 00 00 mov $0xb4,%esi ffffffff8000437e: 48 89 df mov %rbx,%rdi ffffffff80004381: ff d0 call *%rax ffffffff80004383: e9 0f ed ff ff jmp ffffffff80003097 case 't': FLANTERM_DEC_SPCL_PRN(0xc3) ffffffff80004388: be c3 00 00 00 mov $0xc3,%esi ffffffff8000438d: 48 89 df mov %rbx,%rdi ffffffff80004390: ff d0 call *%rax ffffffff80004392: e9 00 ed ff ff jmp ffffffff80003097 case 's': FLANTERM_DEC_SPCL_PRN(0x5f) ffffffff80004397: be 5f 00 00 00 mov $0x5f,%esi ffffffff8000439c: 48 89 df mov %rbx,%rdi ffffffff8000439f: ff d0 call *%rax ffffffff800043a1: e9 f1 ec ff ff jmp ffffffff80003097 case 'q': FLANTERM_DEC_SPCL_PRN(0xc4) ffffffff800043a6: be c4 00 00 00 mov $0xc4,%esi ffffffff800043ab: 48 89 df mov %rbx,%rdi ffffffff800043ae: ff d0 call *%rax ffffffff800043b0: e9 e2 ec ff ff jmp ffffffff80003097 case 'n': FLANTERM_DEC_SPCL_PRN(0xc5) ffffffff800043b5: be c5 00 00 00 mov $0xc5,%esi ffffffff800043ba: 48 89 df mov %rbx,%rdi ffffffff800043bd: ff d0 call *%rax ffffffff800043bf: e9 d3 ec ff ff jmp ffffffff80003097 case 'm': FLANTERM_DEC_SPCL_PRN(0xc0) ffffffff800043c4: be c0 00 00 00 mov $0xc0,%esi ffffffff800043c9: 48 89 df mov %rbx,%rdi ffffffff800043cc: ff d0 call *%rax ffffffff800043ce: e9 c4 ec ff ff jmp ffffffff80003097 case 'l': FLANTERM_DEC_SPCL_PRN(0xda) ffffffff800043d3: be da 00 00 00 mov $0xda,%esi ffffffff800043d8: 48 89 df mov %rbx,%rdi ffffffff800043db: ff d0 call *%rax ffffffff800043dd: e9 b5 ec ff ff jmp ffffffff80003097 case 'k': FLANTERM_DEC_SPCL_PRN(0xbf) ffffffff800043e2: be bf 00 00 00 mov $0xbf,%esi ffffffff800043e7: 48 89 df mov %rbx,%rdi ffffffff800043ea: ff d0 call *%rax ffffffff800043ec: e9 a6 ec ff ff jmp ffffffff80003097 case 'j': FLANTERM_DEC_SPCL_PRN(0xd9) ffffffff800043f1: be d9 00 00 00 mov $0xd9,%esi ffffffff800043f6: 48 89 df mov %rbx,%rdi ffffffff800043f9: ff d0 call *%rax ffffffff800043fb: e9 97 ec ff ff jmp ffffffff80003097 case 'h': FLANTERM_DEC_SPCL_PRN(0xb0) ffffffff80004400: be b0 00 00 00 mov $0xb0,%esi ffffffff80004405: 48 89 df mov %rbx,%rdi ffffffff80004408: ff d0 call *%rax ffffffff8000440a: e9 88 ec ff ff jmp ffffffff80003097 case 'g': FLANTERM_DEC_SPCL_PRN(0xf1) ffffffff8000440f: be f1 00 00 00 mov $0xf1,%esi ffffffff80004414: 48 89 df mov %rbx,%rdi ffffffff80004417: ff d0 call *%rax ffffffff80004419: e9 79 ec ff ff jmp ffffffff80003097 case 'f': FLANTERM_DEC_SPCL_PRN(0xf8) ffffffff8000441e: be f8 00 00 00 mov $0xf8,%esi ffffffff80004423: 48 89 df mov %rbx,%rdi ffffffff80004426: ff d0 call *%rax ffffffff80004428: e9 6a ec ff ff jmp ffffffff80003097 case 'a': FLANTERM_DEC_SPCL_PRN(0xb1) ffffffff8000442d: be b1 00 00 00 mov $0xb1,%esi ffffffff80004432: 48 89 df mov %rbx,%rdi ffffffff80004435: ff d0 call *%rax ffffffff80004437: e9 5b ec ff ff jmp ffffffff80003097 case '`': FLANTERM_DEC_SPCL_PRN(0x04) ffffffff8000443c: be 04 00 00 00 mov $0x4,%esi ffffffff80004441: 48 89 df mov %rbx,%rdi ffffffff80004444: ff d0 call *%rax ffffffff80004446: e9 4c ec ff ff jmp ffffffff80003097 case '_': FLANTERM_DEC_SPCL_PRN(0xff) ffffffff8000444b: be ff 00 00 00 mov $0xff,%esi ffffffff80004450: 48 89 df mov %rbx,%rdi ffffffff80004453: ff d0 call *%rax ffffffff80004455: e9 3d ec ff ff jmp ffffffff80003097 case '0': FLANTERM_DEC_SPCL_PRN(0xdb) ffffffff8000445a: be db 00 00 00 mov $0xdb,%esi ffffffff8000445f: 48 89 df mov %rbx,%rdi ffffffff80004462: ff d0 call *%rax ffffffff80004464: e9 2e ec ff ff jmp ffffffff80003097 case '.': FLANTERM_DEC_SPCL_PRN(0x19) ffffffff80004469: be 19 00 00 00 mov $0x19,%esi ffffffff8000446e: 48 89 df mov %rbx,%rdi ffffffff80004471: ff d0 call *%rax ffffffff80004473: e9 1f ec ff ff jmp ffffffff80003097 case '-': FLANTERM_DEC_SPCL_PRN(0x18) ffffffff80004478: be 18 00 00 00 mov $0x18,%esi ffffffff8000447d: 48 89 df mov %rbx,%rdi ffffffff80004480: ff d0 call *%rax ffffffff80004482: e9 10 ec ff ff jmp ffffffff80003097 case ',': FLANTERM_DEC_SPCL_PRN(0x1b) ffffffff80004487: be 1b 00 00 00 mov $0x1b,%esi ffffffff8000448c: 48 89 df mov %rbx,%rdi ffffffff8000448f: ff d0 call *%rax ffffffff80004491: e9 01 ec ff ff jmp ffffffff80003097 case '+': FLANTERM_DEC_SPCL_PRN(0x1a) ffffffff80004496: be 1a 00 00 00 mov $0x1a,%esi ffffffff8000449b: 48 89 df mov %rbx,%rdi ffffffff8000449e: ff d0 call *%rax ffffffff800044a0: e9 f2 eb ff ff jmp ffffffff80003097 size_t count = ctx->esc_values[0] > ctx->rows ? ctx->rows : ctx->esc_values[0]; ffffffff800044a5: 44 8b 63 78 mov 0x78(%rbx),%r12d ffffffff800044a9: 48 8b 83 e0 00 00 00 mov 0xe0(%rbx),%rax ffffffff800044b0: 49 39 c4 cmp %rax,%r12 ffffffff800044b3: 4c 0f 47 e0 cmova %rax,%r12 for (size_t i = 0; i < count; i++) { ffffffff800044b7: 4d 85 e4 test %r12,%r12 ffffffff800044ba: 0f 84 9e fa ff ff je ffffffff80003f5e ffffffff800044c0: 45 31 ff xor %r15d,%r15d ffffffff800044c3: 49 83 c7 01 add $0x1,%r15 ctx->scroll(ctx); ffffffff800044c7: 48 89 df mov %rbx,%rdi ffffffff800044ca: ff 93 68 01 00 00 call *0x168(%rbx) for (size_t i = 0; i < count; i++) { ffffffff800044d0: 4d 39 fc cmp %r15,%r12 ffffffff800044d3: 75 ee jne ffffffff800044c3 ffffffff800044d5: e9 84 fa ff ff jmp ffffffff80003f5e ctx->scroll_top_margin = y; ffffffff800044da: 48 8b 44 24 18 mov 0x18(%rsp),%rax size_t count = ctx->esc_values[0] > ctx->rows ? ctx->rows : ctx->esc_values[0]; ffffffff800044df: 44 8b 63 78 mov 0x78(%rbx),%r12d size_t old_scroll_top_margin = ctx->scroll_top_margin; ffffffff800044e3: 48 8b 53 68 mov 0x68(%rbx),%rdx ctx->scroll_top_margin = y; ffffffff800044e7: 48 89 43 68 mov %rax,0x68(%rbx) size_t count = ctx->esc_values[0] > ctx->rows ? ctx->rows : ctx->esc_values[0]; ffffffff800044eb: 48 8b 83 e0 00 00 00 mov 0xe0(%rbx),%rax ffffffff800044f2: 49 39 c4 cmp %rax,%r12 ffffffff800044f5: 4c 0f 47 e0 cmova %rax,%r12 for (size_t i = 0; i < count; i++) { ffffffff800044f9: 45 31 ff xor %r15d,%r15d ffffffff800044fc: 4d 85 e4 test %r12,%r12 ffffffff800044ff: 74 1c je ffffffff8000451d ffffffff80004501: 49 83 c7 01 add $0x1,%r15 ffffffff80004505: 48 89 54 24 08 mov %rdx,0x8(%rsp) ctx->revscroll(ctx); ffffffff8000450a: 48 89 df mov %rbx,%rdi ffffffff8000450d: ff 93 70 01 00 00 call *0x170(%rbx) for (size_t i = 0; i < count; i++) { ffffffff80004513: 4d 39 fc cmp %r15,%r12 ffffffff80004516: 48 8b 54 24 08 mov 0x8(%rsp),%rdx ffffffff8000451b: 75 e4 jne ffffffff80004501 ctx->scroll_top_margin = old_scroll_top_margin; ffffffff8000451d: 48 89 53 68 mov %rdx,0x68(%rbx) break; ffffffff80004521: e9 38 fa ff ff jmp ffffffff80003f5e switch (ctx->esc_values[0]) { ffffffff80004526: 8b 43 78 mov 0x78(%rbx),%eax ffffffff80004529: 83 f8 01 cmp $0x1,%eax ffffffff8000452c: 74 69 je ffffffff80004597 ffffffff8000452e: 83 f8 02 cmp $0x2,%eax ffffffff80004531: 74 2f je ffffffff80004562 ffffffff80004533: 85 c0 test %eax,%eax ffffffff80004535: 0f 85 23 fa ff ff jne ffffffff80003f5e for (size_t i = x; i < ctx->cols; i++) ffffffff8000453b: 4c 8b 64 24 10 mov 0x10(%rsp),%r12 ffffffff80004540: eb 12 jmp ffffffff80004554 ctx->raw_putchar(ctx, ' '); ffffffff80004542: be 20 00 00 00 mov $0x20,%esi ffffffff80004547: 48 89 df mov %rbx,%rdi for (size_t i = x; i < ctx->cols; i++) ffffffff8000454a: 49 83 c4 01 add $0x1,%r12 ctx->raw_putchar(ctx, ' '); ffffffff8000454e: ff 93 f0 00 00 00 call *0xf0(%rbx) for (size_t i = x; i < ctx->cols; i++) ffffffff80004554: 4c 3b a3 e8 00 00 00 cmp 0xe8(%rbx),%r12 ffffffff8000455b: 72 e5 jb ffffffff80004542 ffffffff8000455d: e9 23 fd ff ff jmp ffffffff80004285 ctx->set_cursor_pos(ctx, 0, y); ffffffff80004562: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff80004567: 31 f6 xor %esi,%esi ffffffff80004569: 48 89 df mov %rbx,%rdi for (size_t i = 0; i < ctx->cols; i++) ffffffff8000456c: 45 31 e4 xor %r12d,%r12d ctx->set_cursor_pos(ctx, 0, y); ffffffff8000456f: ff 93 00 01 00 00 call *0x100(%rbx) for (size_t i = 0; i < ctx->cols; i++) ffffffff80004575: eb 12 jmp ffffffff80004589 ctx->raw_putchar(ctx, ' '); ffffffff80004577: be 20 00 00 00 mov $0x20,%esi ffffffff8000457c: 48 89 df mov %rbx,%rdi for (size_t i = 0; i < ctx->cols; i++) ffffffff8000457f: 49 83 c4 01 add $0x1,%r12 ctx->raw_putchar(ctx, ' '); ffffffff80004583: ff 93 f0 00 00 00 call *0xf0(%rbx) for (size_t i = 0; i < ctx->cols; i++) ffffffff80004589: 4c 3b a3 e8 00 00 00 cmp 0xe8(%rbx),%r12 ffffffff80004590: 72 e5 jb ffffffff80004577 ffffffff80004592: e9 ee fc ff ff jmp ffffffff80004285 ctx->set_cursor_pos(ctx, 0, y); ffffffff80004597: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff8000459c: 31 f6 xor %esi,%esi ffffffff8000459e: 48 89 df mov %rbx,%rdi for (size_t i = 0; i < x; i++) ffffffff800045a1: 45 31 e4 xor %r12d,%r12d ctx->set_cursor_pos(ctx, 0, y); ffffffff800045a4: ff 93 00 01 00 00 call *0x100(%rbx) for (size_t i = 0; i < x; i++) ffffffff800045aa: eb 12 jmp ffffffff800045be ctx->raw_putchar(ctx, ' '); ffffffff800045ac: be 20 00 00 00 mov $0x20,%esi ffffffff800045b1: 48 89 df mov %rbx,%rdi for (size_t i = 0; i < x; i++) ffffffff800045b4: 49 83 c4 01 add $0x1,%r12 ctx->raw_putchar(ctx, ' '); ffffffff800045b8: ff 93 f0 00 00 00 call *0xf0(%rbx) for (size_t i = 0; i < x; i++) ffffffff800045be: 4c 3b 64 24 10 cmp 0x10(%rsp),%r12 ffffffff800045c3: 72 e7 jb ffffffff800045ac ffffffff800045c5: e9 94 f9 ff ff jmp ffffffff80003f5e switch (ctx->esc_values[0]) { ffffffff800045ca: 8b 43 78 mov 0x78(%rbx),%eax ffffffff800045cd: 83 f8 01 cmp $0x1,%eax ffffffff800045d0: 0f 84 b3 00 00 00 je ffffffff80004689 ffffffff800045d6: 0f 87 91 00 00 00 ja ffffffff8000466d size_t cols_diff = ctx->cols - (x + 1); ffffffff800045dc: 48 8b 83 e8 00 00 00 mov 0xe8(%rbx),%rax size_t rows_remaining = ctx->rows - (y + 1); ffffffff800045e3: 4c 8b a3 e0 00 00 00 mov 0xe0(%rbx),%r12 for (size_t i = 0; i < to_clear; i++) { ffffffff800045ea: 45 31 ff xor %r15d,%r15d size_t rows_remaining = ctx->rows - (y + 1); ffffffff800045ed: 4c 2b 64 24 18 sub 0x18(%rsp),%r12 ffffffff800045f2: 49 83 ec 01 sub $0x1,%r12 size_t to_clear = rows_remaining * ctx->cols + cols_diff + 1; ffffffff800045f6: 4c 0f af e0 imul %rax,%r12 ffffffff800045fa: 48 2b 44 24 10 sub 0x10(%rsp),%rax ffffffff800045ff: 49 01 c4 add %rax,%r12 for (size_t i = 0; i < to_clear; i++) { ffffffff80004602: eb 12 jmp ffffffff80004616 ctx->raw_putchar(ctx, ' '); ffffffff80004604: be 20 00 00 00 mov $0x20,%esi ffffffff80004609: 48 89 df mov %rbx,%rdi for (size_t i = 0; i < to_clear; i++) { ffffffff8000460c: 49 83 c7 01 add $0x1,%r15 ctx->raw_putchar(ctx, ' '); ffffffff80004610: ff 93 f0 00 00 00 call *0xf0(%rbx) for (size_t i = 0; i < to_clear; i++) { ffffffff80004616: 4d 39 fc cmp %r15,%r12 ffffffff80004619: 75 e9 jne ffffffff80004604 ffffffff8000461b: e9 65 fc ff ff jmp ffffffff80004285 if (ctx->esc_values[0] != 0) { ffffffff80004620: 8b 43 78 mov 0x78(%rbx),%eax ffffffff80004623: 85 c0 test %eax,%eax ffffffff80004625: 74 06 je ffffffff8000462d ctx->esc_values[0]--; ffffffff80004627: 83 e8 01 sub $0x1,%eax ffffffff8000462a: 89 43 78 mov %eax,0x78(%rbx) if (ctx->esc_values[1] != 0) { ffffffff8000462d: 8b 43 7c mov 0x7c(%rbx),%eax ffffffff80004630: 85 c0 test %eax,%eax ffffffff80004632: 74 06 je ffffffff8000463a ctx->esc_values[1]--; ffffffff80004634: 83 e8 01 sub $0x1,%eax ffffffff80004637: 89 43 7c mov %eax,0x7c(%rbx) if (ctx->esc_values[1] >= ctx->cols) ffffffff8000463a: 48 8b 83 e8 00 00 00 mov 0xe8(%rbx),%rax ffffffff80004641: 8b 73 7c mov 0x7c(%rbx),%esi ffffffff80004644: 48 39 c6 cmp %rax,%rsi ffffffff80004647: 72 06 jb ffffffff8000464f ctx->esc_values[1] = ctx->cols - 1; ffffffff80004649: 8d 70 ff lea -0x1(%rax),%esi ffffffff8000464c: 89 73 7c mov %esi,0x7c(%rbx) if (ctx->esc_values[0] >= ctx->rows) ffffffff8000464f: 48 8b 83 e0 00 00 00 mov 0xe0(%rbx),%rax ffffffff80004656: 8b 53 78 mov 0x78(%rbx),%edx ffffffff80004659: 48 39 c2 cmp %rax,%rdx ffffffff8000465c: 0f 82 f3 f8 ff ff jb ffffffff80003f55 ctx->esc_values[0] = ctx->rows - 1; ffffffff80004662: 8d 50 ff lea -0x1(%rax),%edx ffffffff80004665: 89 53 78 mov %edx,0x78(%rbx) ctx->set_cursor_pos(ctx, ctx->esc_values[1], ctx->esc_values[0]); ffffffff80004668: e9 e8 f8 ff ff jmp ffffffff80003f55 switch (ctx->esc_values[0]) { ffffffff8000466d: 83 e8 02 sub $0x2,%eax ffffffff80004670: 83 f8 01 cmp $0x1,%eax ffffffff80004673: 0f 87 e5 f8 ff ff ja ffffffff80003f5e ctx->clear(ctx, false); ffffffff80004679: 31 f6 xor %esi,%esi ffffffff8000467b: 48 89 df mov %rbx,%rdi ffffffff8000467e: ff 93 f8 00 00 00 call *0xf8(%rbx) break; ffffffff80004684: e9 d5 f8 ff ff jmp ffffffff80003f5e ctx->set_cursor_pos(ctx, 0, 0); ffffffff80004689: 31 d2 xor %edx,%edx ffffffff8000468b: 31 f6 xor %esi,%esi ffffffff8000468d: 48 89 df mov %rbx,%rdi for (size_t yc = 0; yc < ctx->rows; yc++) { ffffffff80004690: 45 31 ff xor %r15d,%r15d ctx->set_cursor_pos(ctx, 0, 0); ffffffff80004693: ff 93 00 01 00 00 call *0x100(%rbx) for (size_t yc = 0; yc < ctx->rows; yc++) { ffffffff80004699: 4c 3b bb e0 00 00 00 cmp 0xe0(%rbx),%r15 ffffffff800046a0: 0f 83 b8 f8 ff ff jae ffffffff80003f5e for (size_t xc = 0; xc < ctx->cols; xc++) { ffffffff800046a6: 45 31 e4 xor %r12d,%r12d ffffffff800046a9: 48 83 bb e8 00 00 00 cmpq $0x0,0xe8(%rbx) ffffffff800046b0: 00 ffffffff800046b1: 75 12 jne ffffffff800046c5 ffffffff800046b3: eb 40 jmp ffffffff800046f5 ffffffff800046b5: 0f 1f 00 nopl (%rax) ffffffff800046b8: 49 83 c4 01 add $0x1,%r12 ffffffff800046bc: 4c 3b a3 e8 00 00 00 cmp 0xe8(%rbx),%r12 ffffffff800046c3: 73 30 jae ffffffff800046f5 ctx->raw_putchar(ctx, ' '); ffffffff800046c5: be 20 00 00 00 mov $0x20,%esi ffffffff800046ca: 48 89 df mov %rbx,%rdi ffffffff800046cd: ff 93 f0 00 00 00 call *0xf0(%rbx) if (xc == x && yc == y) { ffffffff800046d3: 4c 39 64 24 10 cmp %r12,0x10(%rsp) ffffffff800046d8: 75 de jne ffffffff800046b8 ffffffff800046da: 4c 39 7c 24 18 cmp %r15,0x18(%rsp) ffffffff800046df: 75 d7 jne ffffffff800046b8 ctx->set_cursor_pos(ctx, x, y); ffffffff800046e1: 4c 89 fa mov %r15,%rdx ffffffff800046e4: 4c 89 e6 mov %r12,%rsi ffffffff800046e7: 48 89 df mov %rbx,%rdi ffffffff800046ea: ff 93 00 01 00 00 call *0x100(%rbx) if (b == true) ffffffff800046f0: e9 69 f8 ff ff jmp ffffffff80003f5e for (size_t yc = 0; yc < ctx->rows; yc++) { ffffffff800046f5: 49 83 c7 01 add $0x1,%r15 ffffffff800046f9: eb 9e jmp ffffffff80004699 if (will_be_in_scroll_region && dest_y < ctx->scroll_top_margin) { ffffffff800046fb: 48 39 d0 cmp %rdx,%rax ffffffff800046fe: 48 0f 42 c2 cmovb %rdx,%rax ffffffff80004702: e9 da fb ff ff jmp ffffffff800042e1 case 0x221e: return 236; ffffffff80004707: be ec 00 00 00 mov $0xec,%esi ffffffff8000470c: e9 5f ef ff ff jmp ffffffff80003670 if (ctx->dec_private == true) { ffffffff80004711: 40 84 f6 test %sil,%sil ffffffff80004714: 0f 84 b8 f7 ff ff je ffffffff80003ed2 ctx->dec_private = false; ffffffff8000471a: c6 43 14 00 movb $0x0,0x14(%rbx) if (ctx->esc_values_i == 0) { ffffffff8000471e: e9 a4 fa ff ff jmp ffffffff800041c7 ctx->cursor_enabled = false; ffffffff80004723: c6 43 09 00 movb $0x0,0x9(%rbx) ffffffff80004727: e9 36 f8 ff ff jmp ffffffff80003f62 dest_y = ctx->scroll_bottom_margin - 1; ffffffff8000472c: 48 8d 50 ff lea -0x1(%rax),%rdx ctx->set_cursor_pos(ctx, x, dest_y); ffffffff80004730: e9 1b f8 ff ff jmp ffffffff80003f50 for (size_t i = ctx->cols - 1; ; i--) { ffffffff80004735: 48 8b 83 e8 00 00 00 mov 0xe8(%rbx),%rax ffffffff8000473c: 4c 8d 60 ff lea -0x1(%rax),%r12 ffffffff80004740: eb 04 jmp ffffffff80004746 ffffffff80004742: 49 83 ec 01 sub $0x1,%r12 ctx->move_character(ctx, i + ctx->esc_values[0], y, i, y); ffffffff80004746: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff8000474b: 8b 73 78 mov 0x78(%rbx),%esi ffffffff8000474e: 4c 89 e1 mov %r12,%rcx ffffffff80004751: 48 89 df mov %rbx,%rdi ffffffff80004754: 4c 01 e6 add %r12,%rsi ffffffff80004757: 49 89 d0 mov %rdx,%r8 ffffffff8000475a: ff 93 60 01 00 00 call *0x160(%rbx) ctx->set_cursor_pos(ctx, i, y); ffffffff80004760: 4c 89 e6 mov %r12,%rsi ffffffff80004763: 48 89 df mov %rbx,%rdi ffffffff80004766: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff8000476b: ff 93 00 01 00 00 call *0x100(%rbx) ctx->raw_putchar(ctx, ' '); ffffffff80004771: be 20 00 00 00 mov $0x20,%esi ffffffff80004776: 48 89 df mov %rbx,%rdi ffffffff80004779: ff 93 f0 00 00 00 call *0xf0(%rbx) if (i == x) { ffffffff8000477f: 4c 3b 64 24 10 cmp 0x10(%rsp),%r12 ffffffff80004784: 75 bc jne ffffffff80004742 ctx->set_cursor_pos(ctx, x, y); ffffffff80004786: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff8000478b: 4c 89 e6 mov %r12,%rsi ffffffff8000478e: 48 89 df mov %rbx,%rdi ffffffff80004791: ff 93 00 01 00 00 call *0x100(%rbx) break; ffffffff80004797: e9 c2 f7 ff ff jmp ffffffff80003f5e if (ctx->esc_values_i == 0) { ffffffff8000479c: 48 8b 53 40 mov 0x40(%rbx),%rdx ffffffff800047a0: 48 85 d2 test %rdx,%rdx ffffffff800047a3: 0f 84 b5 f7 ff ff je ffffffff80003f5e if (ctx->callback != NULL) { ffffffff800047a9: 48 8b 83 a8 01 00 00 mov 0x1a8(%rbx),%rax ffffffff800047b0: 48 85 c0 test %rax,%rax ffffffff800047b3: 0f 84 a5 f7 ff ff je ffffffff80003f5e ctx->callback(ctx, FLANTERM_CB_LINUX, ctx->esc_values_i, (uintptr_t)ctx->esc_values, 0); ffffffff800047b9: 48 8d 4b 78 lea 0x78(%rbx),%rcx ffffffff800047bd: 45 31 c0 xor %r8d,%r8d ffffffff800047c0: be 50 00 00 00 mov $0x50,%esi ffffffff800047c5: 48 89 df mov %rbx,%rdi ffffffff800047c8: ff d0 call *%rax ffffffff800047ca: e9 8f f7 ff ff jmp ffffffff80003f5e if (x + ctx->esc_values[0] > ctx->cols - 1) ffffffff800047cf: 48 8b 4c 24 10 mov 0x10(%rsp),%rcx ffffffff800047d4: 48 8b 83 e8 00 00 00 mov 0xe8(%rbx),%rax ffffffff800047db: 8b 53 78 mov 0x78(%rbx),%edx ffffffff800047de: 48 8d 78 ff lea -0x1(%rax),%rdi ffffffff800047e2: 48 8d 34 0a lea (%rdx,%rcx,1),%rsi ffffffff800047e6: 48 39 f7 cmp %rsi,%rdi ffffffff800047e9: 73 08 jae ffffffff800047f3 ctx->esc_values[0] = (ctx->cols - 1) - x; ffffffff800047eb: 29 c8 sub %ecx,%eax ffffffff800047ed: 8d 50 ff lea -0x1(%rax),%edx ffffffff800047f0: 89 53 78 mov %edx,0x78(%rbx) ctx->set_cursor_pos(ctx, x + ctx->esc_values[0], y); ffffffff800047f3: 48 8d 34 0a lea (%rdx,%rcx,1),%rsi ffffffff800047f7: 48 89 df mov %rbx,%rdi ffffffff800047fa: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff800047ff: ff 93 00 01 00 00 call *0x100(%rbx) break; ffffffff80004805: e9 54 f7 ff ff jmp ffffffff80003f5e ctx->esc_values[0] -= 1; ffffffff8000480a: 8b 43 78 mov 0x78(%rbx),%eax if (ctx->esc_values[0] >= ctx->cols) ffffffff8000480d: 48 8b 93 e8 00 00 00 mov 0xe8(%rbx),%rdx ctx->esc_values[0] -= 1; ffffffff80004814: 83 e8 01 sub $0x1,%eax ffffffff80004817: 89 43 78 mov %eax,0x78(%rbx) if (ctx->esc_values[0] >= ctx->cols) ffffffff8000481a: 48 39 d0 cmp %rdx,%rax ffffffff8000481d: 72 06 jb ffffffff80004825 ctx->esc_values[0] = ctx->cols - 1; ffffffff8000481f: 83 ea 01 sub $0x1,%edx ffffffff80004822: 89 53 78 mov %edx,0x78(%rbx) ctx->set_cursor_pos(ctx, ctx->esc_values[0], y); ffffffff80004825: 8b 73 78 mov 0x78(%rbx),%esi ffffffff80004828: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff8000482d: 48 89 df mov %rbx,%rdi ffffffff80004830: ff 93 00 01 00 00 call *0x100(%rbx) break; ffffffff80004836: e9 23 f7 ff ff jmp ffffffff80003f5e if (ctx->esc_values[0] > x) ffffffff8000483b: 48 8b 44 24 10 mov 0x10(%rsp),%rax ffffffff80004840: 8b 53 78 mov 0x78(%rbx),%edx ffffffff80004843: 48 39 d0 cmp %rdx,%rax ffffffff80004846: 73 05 jae ffffffff8000484d ctx->esc_values[0] = x; ffffffff80004848: 89 43 78 mov %eax,0x78(%rbx) ffffffff8000484b: 89 c2 mov %eax,%edx ctx->set_cursor_pos(ctx, x - ctx->esc_values[0], y); ffffffff8000484d: 48 29 d0 sub %rdx,%rax ffffffff80004850: 48 89 df mov %rbx,%rdi ffffffff80004853: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff80004858: 48 89 c6 mov %rax,%rsi ffffffff8000485b: ff 93 00 01 00 00 call *0x100(%rbx) break; ffffffff80004861: e9 f8 f6 ff ff jmp ffffffff80003f5e if (ctx->dec_private == true) { ffffffff80004866: 40 84 f6 test %sil,%sil ffffffff80004869: 0f 84 63 f6 ff ff je ffffffff80003ed2 ctx->dec_private = false; ffffffff8000486f: c6 43 14 00 movb $0x0,0x14(%rbx) ffffffff80004873: e9 ea f6 ff ff jmp ffffffff80003f62 switch (ctx->esc_values[0]) { ffffffff80004878: 8b 43 78 mov 0x78(%rbx),%eax ffffffff8000487b: 83 f8 05 cmp $0x5,%eax ffffffff8000487e: 74 53 je ffffffff800048d3 ffffffff80004880: 83 f8 06 cmp $0x6,%eax ffffffff80004883: 0f 85 d5 f6 ff ff jne ffffffff80003f5e if (ctx->callback != NULL) { ffffffff80004889: 48 8b 83 a8 01 00 00 mov 0x1a8(%rbx),%rax ffffffff80004890: 48 85 c0 test %rax,%rax ffffffff80004893: 0f 84 c5 f6 ff ff je ffffffff80003f5e ctx->callback(ctx, FLANTERM_CB_POS_REPORT, x + 1, y + 1, 0); ffffffff80004899: 48 8b 7c 24 10 mov 0x10(%rsp),%rdi ffffffff8000489e: 48 8b 4c 24 18 mov 0x18(%rsp),%rcx ffffffff800048a3: 45 31 c0 xor %r8d,%r8d ffffffff800048a6: be 32 00 00 00 mov $0x32,%esi ffffffff800048ab: 48 8d 57 01 lea 0x1(%rdi),%rdx ffffffff800048af: 48 83 c1 01 add $0x1,%rcx ffffffff800048b3: 48 89 df mov %rbx,%rdi ffffffff800048b6: ff d0 call *%rax ffffffff800048b8: e9 a1 f6 ff ff jmp ffffffff80003f5e ctx->set_cursor_pos(ctx, ctx->saved_cursor_x, ctx->saved_cursor_y); ffffffff800048bd: 48 8b 53 50 mov 0x50(%rbx),%rdx ffffffff800048c1: 48 8b 73 48 mov 0x48(%rbx),%rsi ffffffff800048c5: 48 89 df mov %rbx,%rdi ffffffff800048c8: ff 93 00 01 00 00 call *0x100(%rbx) break; ffffffff800048ce: e9 8b f6 ff ff jmp ffffffff80003f5e if (ctx->callback != NULL) { ffffffff800048d3: 48 8b 83 a8 01 00 00 mov 0x1a8(%rbx),%rax ffffffff800048da: 48 85 c0 test %rax,%rax ffffffff800048dd: 0f 84 7b f6 ff ff je ffffffff80003f5e ctx->callback(ctx, FLANTERM_CB_STATUS_REPORT, 0, 0, 0); ffffffff800048e3: 45 31 c0 xor %r8d,%r8d ffffffff800048e6: 31 c9 xor %ecx,%ecx ffffffff800048e8: 31 d2 xor %edx,%edx ffffffff800048ea: be 28 00 00 00 mov $0x28,%esi ffffffff800048ef: 48 89 df mov %rbx,%rdi ffffffff800048f2: ff d0 call *%rax ffffffff800048f4: e9 65 f6 ff ff jmp ffffffff80003f5e ctx->get_cursor_pos(ctx, &ctx->saved_cursor_x, &ctx->saved_cursor_y); ffffffff800048f9: 48 8d 53 50 lea 0x50(%rbx),%rdx ffffffff800048fd: 48 8d 73 48 lea 0x48(%rbx),%rsi ffffffff80004901: 48 89 df mov %rbx,%rdi ffffffff80004904: ff 93 08 01 00 00 call *0x108(%rbx) break; ffffffff8000490a: e9 4f f6 ff ff jmp ffffffff80003f5e if (ctx->esc_values[0] == 0) { ffffffff8000490f: 83 7b 78 00 cmpl $0x0,0x78(%rbx) ffffffff80004913: 75 07 jne ffffffff8000491c ctx->esc_values[0] = 1; ffffffff80004915: c7 43 78 01 00 00 00 movl $0x1,0x78(%rbx) if (ctx->esc_values[1] == 0) { ffffffff8000491c: 83 7b 7c 00 cmpl $0x0,0x7c(%rbx) ffffffff80004920: 75 07 jne ffffffff80004929 ctx->esc_values[1] = 1; ffffffff80004922: c7 43 7c 01 00 00 00 movl $0x1,0x7c(%rbx) ctx->scroll_bottom_margin = ctx->rows; ffffffff80004929: 48 8b 93 e0 00 00 00 mov 0xe0(%rbx),%rdx if (ctx->esc_values_i > 0) { ffffffff80004930: 48 8b 43 40 mov 0x40(%rbx),%rax ctx->scroll_top_margin = 0; ffffffff80004934: 31 f6 xor %esi,%esi ffffffff80004936: 48 89 73 68 mov %rsi,0x68(%rbx) ctx->scroll_bottom_margin = ctx->rows; ffffffff8000493a: 48 89 53 70 mov %rdx,0x70(%rbx) if (ctx->esc_values_i > 0) { ffffffff8000493e: 48 85 c0 test %rax,%rax ffffffff80004941: 74 3d je ffffffff80004980 ctx->scroll_top_margin = ctx->esc_values[0] - 1; ffffffff80004943: 8b 4b 78 mov 0x78(%rbx),%ecx ffffffff80004946: 83 e9 01 sub $0x1,%ecx if (ctx->esc_values_i > 1) { ffffffff80004949: 48 83 e8 01 sub $0x1,%rax ctx->scroll_top_margin = ctx->esc_values[0] - 1; ffffffff8000494d: 48 89 4b 68 mov %rcx,0x68(%rbx) if (ctx->esc_values_i > 1) { ffffffff80004951: 74 2d je ffffffff80004980 ctx->scroll_bottom_margin = ctx->esc_values[1]; ffffffff80004953: 8b 43 7c mov 0x7c(%rbx),%eax ffffffff80004956: 48 89 43 70 mov %rax,0x70(%rbx) if (ctx->scroll_top_margin >= ctx->rows ffffffff8000495a: 48 39 d1 cmp %rdx,%rcx ffffffff8000495d: 73 05 jae ffffffff80004964 || ctx->scroll_bottom_margin > ctx->rows ffffffff8000495f: 48 39 c2 cmp %rax,%rdx ffffffff80004962: 73 28 jae ffffffff8000498c ctx->scroll_top_margin = 0; ffffffff80004964: 31 c9 xor %ecx,%ecx ctx->scroll_bottom_margin = ctx->rows; ffffffff80004966: 48 89 53 70 mov %rdx,0x70(%rbx) ctx->scroll_top_margin = 0; ffffffff8000496a: 48 89 4b 68 mov %rcx,0x68(%rbx) ctx->set_cursor_pos(ctx, 0, 0); ffffffff8000496e: 31 d2 xor %edx,%edx ffffffff80004970: 31 f6 xor %esi,%esi ffffffff80004972: 48 89 df mov %rbx,%rdi ffffffff80004975: ff 93 00 01 00 00 call *0x100(%rbx) break; ffffffff8000497b: e9 de f5 ff ff jmp ffffffff80003f5e if (ctx->scroll_top_margin >= ctx->rows ffffffff80004980: 48 8b 4b 68 mov 0x68(%rbx),%rcx || ctx->scroll_bottom_margin > ctx->rows ffffffff80004984: 48 89 d0 mov %rdx,%rax if (ctx->scroll_top_margin >= ctx->rows ffffffff80004987: 48 39 d1 cmp %rdx,%rcx ffffffff8000498a: 73 d8 jae ffffffff80004964 || ctx->scroll_top_margin >= (ctx->scroll_bottom_margin - 1)) { ffffffff8000498c: 48 83 e8 01 sub $0x1,%rax ffffffff80004990: 48 39 c1 cmp %rax,%rcx ffffffff80004993: 73 cf jae ffffffff80004964 ffffffff80004995: eb d7 jmp ffffffff8000496e if (!ctx->esc_values_i) ffffffff80004997: 4c 8b 63 40 mov 0x40(%rbx),%r12 ffffffff8000499b: 4d 85 e4 test %r12,%r12 ffffffff8000499e: 0f 84 c8 00 00 00 je ffffffff80004a6c for (; i < ctx->esc_values_i; i++) { ffffffff800049a4: 4c 89 e6 mov %r12,%rsi size_t i = 0; ffffffff800049a7: 45 31 e4 xor %r12d,%r12d if (ctx->esc_values[i] == 0) { ffffffff800049aa: 4a 8d 0c a3 lea (%rbx,%r12,4),%rcx ffffffff800049ae: 8b 51 78 mov 0x78(%rcx),%edx ffffffff800049b1: 83 fa 6b cmp $0x6b,%edx ffffffff800049b4: 77 71 ja ffffffff80004a27 ffffffff800049b6: 89 d0 mov %edx,%eax ffffffff800049b8: 3e ff 24 c5 e8 ad 00 notrack jmp *-0x7fff5218(,%rax,8) ffffffff800049bf: 80 if (ctx->esc_values_i == 0) { ffffffff800049c0: 48 8b 53 40 mov 0x40(%rbx),%rdx ffffffff800049c4: 48 85 d2 test %rdx,%rdx ffffffff800049c7: 0f 84 91 f5 ff ff je ffffffff80003f5e switch (c) { ffffffff800049cd: 41 80 fc 68 cmp $0x68,%r12b ffffffff800049d1: 0f 94 c0 sete %al switch (ctx->esc_values[0]) { ffffffff800049d4: 83 7b 78 04 cmpl $0x4,0x78(%rbx) ffffffff800049d8: 0f 84 86 00 00 00 je ffffffff80004a64 if (ctx->callback != NULL) { ffffffff800049de: 48 8b 83 a8 01 00 00 mov 0x1a8(%rbx),%rax ffffffff800049e5: 48 85 c0 test %rax,%rax ffffffff800049e8: 0f 84 70 f5 ff ff je ffffffff80003f5e ctx->callback(ctx, FLANTERM_CB_MODE, ctx->esc_values_i, (uintptr_t)ctx->esc_values, c); ffffffff800049ee: 48 8d 4b 78 lea 0x78(%rbx),%rcx ffffffff800049f2: 4d 0f be c4 movsbq %r12b,%r8 ffffffff800049f6: be 46 00 00 00 mov $0x46,%esi ffffffff800049fb: 48 89 df mov %rbx,%rdi ffffffff800049fe: ff d0 call *%rax ffffffff80004a00: e9 59 f5 ff ff jmp ffffffff80003f5e ctx->current_bg = ctx->esc_values[i] - offset; ffffffff80004a05: 48 8d 50 9c lea -0x64(%rax),%rdx if (ctx->reverse_video) { ffffffff80004a09: 80 7b 13 00 cmpb $0x0,0x13(%rbx) ctx->current_bg = ctx->esc_values[i] - offset; ffffffff80004a0d: 48 89 53 60 mov %rdx,0x60(%rbx) offset = 100; ffffffff80004a11: ba 64 00 00 00 mov $0x64,%edx if (ctx->reverse_video) { ffffffff80004a16: 75 3b jne ffffffff80004a53 ctx->set_text_bg_bright(ctx, ctx->esc_values[i] - offset); ffffffff80004a18: 48 29 d0 sub %rdx,%rax ffffffff80004a1b: 48 89 df mov %rbx,%rdi ffffffff80004a1e: 48 89 c6 mov %rax,%rsi ffffffff80004a21: ff 93 28 01 00 00 call *0x128(%rbx) continue; ffffffff80004a27: 4d 89 e7 mov %r12,%r15 for (; i < ctx->esc_values_i; i++) { ffffffff80004a2a: 48 8b 73 40 mov 0x40(%rbx),%rsi ffffffff80004a2e: 4d 8d 67 01 lea 0x1(%r15),%r12 ffffffff80004a32: 49 39 f4 cmp %rsi,%r12 ffffffff80004a35: 0f 83 23 f5 ff ff jae ffffffff80003f5e ffffffff80004a3b: e9 6a ff ff ff jmp ffffffff800049aa ctx->current_primary = ctx->esc_values[i] - offset; ffffffff80004a40: 48 8d 50 a6 lea -0x5a(%rax),%rdx if (ctx->reverse_video) { ffffffff80004a44: 80 7b 13 00 cmpb $0x0,0x13(%rbx) ctx->current_primary = ctx->esc_values[i] - offset; ffffffff80004a48: 48 89 53 58 mov %rdx,0x58(%rbx) offset = 90; ffffffff80004a4c: ba 5a 00 00 00 mov $0x5a,%edx if (ctx->reverse_video) { ffffffff80004a51: 75 c5 jne ffffffff80004a18 ctx->set_text_fg_bright(ctx, ctx->esc_values[i] - offset); ffffffff80004a53: 48 29 d0 sub %rdx,%rax ffffffff80004a56: 48 89 df mov %rbx,%rdi ffffffff80004a59: 48 89 c6 mov %rax,%rsi ffffffff80004a5c: ff 93 20 01 00 00 call *0x120(%rbx) continue; ffffffff80004a62: eb c3 jmp ffffffff80004a27 ctx->insert_mode = set; return; ffffffff80004a64: 88 43 15 mov %al,0x15(%rbx) ffffffff80004a67: e9 f2 f4 ff ff jmp ffffffff80003f5e if (ctx->reverse_video) { ffffffff80004a6c: 80 7b 13 00 cmpb $0x0,0x13(%rbx) ffffffff80004a70: 74 0d je ffffffff80004a7f ctx->reverse_video = false; ffffffff80004a72: c6 43 13 00 movb $0x0,0x13(%rbx) ctx->swap_palette(ctx); ffffffff80004a76: 48 89 df mov %rbx,%rdi ffffffff80004a79: ff 93 78 01 00 00 call *0x178(%rbx) ctx->set_text_bg_default(ctx); ffffffff80004a7f: 48 89 df mov %rbx,%rdi ctx->bold = false; ffffffff80004a82: 66 c7 43 11 00 00 movw $0x0,0x11(%rbx) continue; ffffffff80004a88: 4d 89 e7 mov %r12,%r15 ctx->current_primary = (size_t)-1; ffffffff80004a8b: 48 c7 43 58 ff ff ff movq $0xffffffffffffffff,0x58(%rbx) ffffffff80004a92: ff ctx->current_bg = (size_t)-1; ffffffff80004a93: 48 c7 43 60 ff ff ff movq $0xffffffffffffffff,0x60(%rbx) ffffffff80004a9a: ff ctx->set_text_bg_default(ctx); ffffffff80004a9b: ff 93 48 01 00 00 call *0x148(%rbx) ctx->set_text_fg_default(ctx); ffffffff80004aa1: 48 89 df mov %rbx,%rdi ffffffff80004aa4: ff 93 40 01 00 00 call *0x140(%rbx) continue; ffffffff80004aaa: e9 7b ff ff ff jmp ffffffff80004a2a ctx->esc_values[0] -= 1; ffffffff80004aaf: 8b 43 78 mov 0x78(%rbx),%eax if (ctx->esc_values[0] >= ctx->rows) ffffffff80004ab2: 48 8b 93 e0 00 00 00 mov 0xe0(%rbx),%rdx ctx->esc_values[0] -= 1; ffffffff80004ab9: 83 e8 01 sub $0x1,%eax ffffffff80004abc: 89 43 78 mov %eax,0x78(%rbx) if (ctx->esc_values[0] >= ctx->rows) ffffffff80004abf: 48 39 d0 cmp %rdx,%rax ffffffff80004ac2: 72 06 jb ffffffff80004aca ctx->esc_values[0] = ctx->rows - 1; ffffffff80004ac4: 83 ea 01 sub $0x1,%edx ffffffff80004ac7: 89 53 78 mov %edx,0x78(%rbx) ctx->set_cursor_pos(ctx, x, ctx->esc_values[0]); ffffffff80004aca: 8b 53 78 mov 0x78(%rbx),%edx ffffffff80004acd: e9 7e f4 ff ff jmp ffffffff80003f50 if (ctx->callback != NULL) { ffffffff80004ad2: 48 8b 83 a8 01 00 00 mov 0x1a8(%rbx),%rax ffffffff80004ad9: 48 85 c0 test %rax,%rax ffffffff80004adc: 0f 84 7c f4 ff ff je ffffffff80003f5e ctx->callback(ctx, FLANTERM_CB_PRIVATE_ID, 0, 0, 0); ffffffff80004ae2: 45 31 c0 xor %r8d,%r8d ffffffff80004ae5: 31 c9 xor %ecx,%ecx ffffffff80004ae7: 31 d2 xor %edx,%edx ffffffff80004ae9: be 1e 00 00 00 mov $0x1e,%esi ffffffff80004aee: 48 89 df mov %rbx,%rdi ffffffff80004af1: ff d0 call *%rax ffffffff80004af3: e9 66 f4 ff ff jmp ffffffff80003f5e if (ctx->reverse_video) { ffffffff80004af8: 80 7b 13 00 cmpb $0x0,0x13(%rbx) ctx->current_bg = (size_t)-1; ffffffff80004afc: 48 c7 43 60 ff ff ff movq $0xffffffffffffffff,0x60(%rbx) ffffffff80004b03: ff if (ctx->reverse_video) { ffffffff80004b04: 74 09 je ffffffff80004b0f ctx->swap_palette(ctx); ffffffff80004b06: 48 89 df mov %rbx,%rdi ffffffff80004b09: ff 93 78 01 00 00 call *0x178(%rbx) if (!ctx->bg_bold) { ffffffff80004b0f: 80 7b 12 00 cmpb $0x0,0x12(%rbx) ctx->set_text_bg_default(ctx); ffffffff80004b13: 48 89 df mov %rbx,%rdi if (!ctx->bg_bold) { ffffffff80004b16: 75 77 jne ffffffff80004b8f ctx->set_text_bg_default(ctx); ffffffff80004b18: ff 93 48 01 00 00 call *0x148(%rbx) if (ctx->reverse_video) { ffffffff80004b1e: 80 7b 13 00 cmpb $0x0,0x13(%rbx) ffffffff80004b22: 0f 84 ff fe ff ff je ffffffff80004a27 ctx->swap_palette(ctx); ffffffff80004b28: 48 89 df mov %rbx,%rdi ffffffff80004b2b: ff 93 78 01 00 00 call *0x178(%rbx) ffffffff80004b31: e9 f1 fe ff ff jmp ffffffff80004a27 ctx->current_bg = ctx->esc_values[i] - offset; ffffffff80004b36: 48 8d 50 d8 lea -0x28(%rax),%rdx if (ctx->reverse_video) { ffffffff80004b3a: 80 7b 13 00 cmpb $0x0,0x13(%rbx) ctx->current_bg = ctx->esc_values[i] - offset; ffffffff80004b3e: 48 89 53 60 mov %rdx,0x60(%rbx) if (ctx->reverse_video) { ffffffff80004b42: 75 53 jne ffffffff80004b97 || (ctx->bg_bold && !ctx->reverse_video)) { ffffffff80004b44: 80 7b 12 00 cmpb $0x0,0x12(%rbx) ffffffff80004b48: ba 28 00 00 00 mov $0x28,%edx ffffffff80004b4d: 0f 85 c5 fe ff ff jne ffffffff80004a18 ctx->set_text_bg(ctx, ctx->esc_values[i] - offset); ffffffff80004b53: 48 29 d0 sub %rdx,%rax ffffffff80004b56: 48 89 df mov %rbx,%rdi ffffffff80004b59: 48 89 c6 mov %rax,%rsi ffffffff80004b5c: ff 93 18 01 00 00 call *0x118(%rbx) ffffffff80004b62: e9 c0 fe ff ff jmp ffffffff80004a27 if (ctx->reverse_video) { ffffffff80004b67: 80 7b 13 00 cmpb $0x0,0x13(%rbx) ctx->current_primary = (size_t)-1; ffffffff80004b6b: 48 c7 43 58 ff ff ff movq $0xffffffffffffffff,0x58(%rbx) ffffffff80004b72: ff if (ctx->reverse_video) { ffffffff80004b73: 74 09 je ffffffff80004b7e ctx->swap_palette(ctx); ffffffff80004b75: 48 89 df mov %rbx,%rdi ffffffff80004b78: ff 93 78 01 00 00 call *0x178(%rbx) if (!ctx->bold) { ffffffff80004b7e: 80 7b 11 00 cmpb $0x0,0x11(%rbx) ctx->set_text_fg_default(ctx); ffffffff80004b82: 48 89 df mov %rbx,%rdi if (!ctx->bold) { ffffffff80004b85: 75 33 jne ffffffff80004bba ctx->set_text_fg_default(ctx); ffffffff80004b87: ff 93 40 01 00 00 call *0x140(%rbx) ffffffff80004b8d: eb 8f jmp ffffffff80004b1e ctx->set_text_bg_default_bright(ctx); ffffffff80004b8f: ff 93 58 01 00 00 call *0x158(%rbx) ffffffff80004b95: eb 87 jmp ffffffff80004b1e || (ctx->bg_bold && ctx->reverse_video)) { ffffffff80004b97: 80 7b 12 00 cmpb $0x0,0x12(%rbx) ffffffff80004b9b: ba 28 00 00 00 mov $0x28,%edx ffffffff80004ba0: 0f 85 ad fe ff ff jne ffffffff80004a53 ctx->set_text_fg(ctx, ctx->esc_values[i] - offset); ffffffff80004ba6: 48 29 d0 sub %rdx,%rax ffffffff80004ba9: 48 89 df mov %rbx,%rdi ffffffff80004bac: 48 89 c6 mov %rax,%rsi ffffffff80004baf: ff 93 10 01 00 00 call *0x110(%rbx) ffffffff80004bb5: e9 6d fe ff ff jmp ffffffff80004a27 ctx->set_text_fg_default_bright(ctx); ffffffff80004bba: ff 93 50 01 00 00 call *0x150(%rbx) if (ctx->reverse_video) { ffffffff80004bc0: e9 59 ff ff ff jmp ffffffff80004b1e if (ctx->current_primary != (size_t)-1) { ffffffff80004bc5: 48 8b 73 58 mov 0x58(%rbx),%rsi if (!ctx->reverse_video) { ffffffff80004bc9: 0f b6 43 13 movzbl 0x13(%rbx),%eax ctx->bold = false; ffffffff80004bcd: c6 43 11 00 movb $0x0,0x11(%rbx) ctx->set_text_fg(ctx, ctx->current_primary); ffffffff80004bd1: 48 89 df mov %rbx,%rdi if (ctx->current_primary != (size_t)-1) { ffffffff80004bd4: 48 83 fe ff cmp $0xffffffffffffffff,%rsi ffffffff80004bd8: 74 26 je ffffffff80004c00 if (!ctx->reverse_video) { ffffffff80004bda: 84 c0 test %al,%al ffffffff80004bdc: 0f 85 7a ff ff ff jne ffffffff80004b5c ffffffff80004be2: eb cb jmp ffffffff80004baf if (!ctx->reverse_video) { ffffffff80004be4: 80 7b 13 00 cmpb $0x0,0x13(%rbx) ffffffff80004be8: 0f 85 39 fe ff ff jne ffffffff80004a27 ctx->reverse_video = true; ffffffff80004bee: c6 43 13 01 movb $0x1,0x13(%rbx) ctx->swap_palette(ctx); ffffffff80004bf2: 48 89 df mov %rbx,%rdi ffffffff80004bf5: ff 93 78 01 00 00 call *0x178(%rbx) ffffffff80004bfb: e9 27 fe ff ff jmp ffffffff80004a27 if (!ctx->reverse_video) { ffffffff80004c00: 84 c0 test %al,%al ffffffff80004c02: 75 53 jne ffffffff80004c57 ctx->set_text_fg_default(ctx); ffffffff80004c04: ff 93 40 01 00 00 call *0x140(%rbx) ffffffff80004c0a: e9 18 fe ff ff jmp ffffffff80004a27 if (ctx->current_bg != (size_t)-1) { ffffffff80004c0f: 48 8b 73 60 mov 0x60(%rbx),%rsi if (!ctx->reverse_video) { ffffffff80004c13: 0f b6 43 13 movzbl 0x13(%rbx),%eax ctx->bg_bold = true; ffffffff80004c17: c6 43 12 01 movb $0x1,0x12(%rbx) ctx->set_text_bg_bright(ctx, ctx->current_bg); ffffffff80004c1b: 48 89 df mov %rbx,%rdi if (ctx->current_bg != (size_t)-1) { ffffffff80004c1e: 48 83 fe ff cmp $0xffffffffffffffff,%rsi ffffffff80004c22: 74 3e je ffffffff80004c62 if (!ctx->reverse_video) { ffffffff80004c24: 84 c0 test %al,%al ffffffff80004c26: 0f 85 30 fe ff ff jne ffffffff80004a5c ffffffff80004c2c: e9 f0 fd ff ff jmp ffffffff80004a21 if (ctx->current_primary != (size_t)-1) { ffffffff80004c31: 48 8b 73 58 mov 0x58(%rbx),%rsi if (!ctx->reverse_video) { ffffffff80004c35: 0f b6 43 13 movzbl 0x13(%rbx),%eax ctx->bold = true; ffffffff80004c39: c6 43 11 01 movb $0x1,0x11(%rbx) ctx->set_text_fg_bright(ctx, ctx->current_primary); ffffffff80004c3d: 48 89 df mov %rbx,%rdi if (ctx->current_primary != (size_t)-1) { ffffffff80004c40: 48 83 fe ff cmp $0xffffffffffffffff,%rsi ffffffff80004c44: 74 2b je ffffffff80004c71 if (!ctx->reverse_video) { ffffffff80004c46: 84 c0 test %al,%al ffffffff80004c48: 0f 85 d3 fd ff ff jne ffffffff80004a21 ffffffff80004c4e: e9 09 fe ff ff jmp ffffffff80004a5c if (!ctx->reverse_video) { ffffffff80004c53: 84 c0 test %al,%al ffffffff80004c55: 75 ad jne ffffffff80004c04 ctx->set_text_bg_default(ctx); ffffffff80004c57: ff 93 48 01 00 00 call *0x148(%rbx) ffffffff80004c5d: e9 c5 fd ff ff jmp ffffffff80004a27 if (!ctx->reverse_video) { ffffffff80004c62: 84 c0 test %al,%al ffffffff80004c64: 75 0f jne ffffffff80004c75 ctx->set_text_bg_default_bright(ctx); ffffffff80004c66: ff 93 58 01 00 00 call *0x158(%rbx) ffffffff80004c6c: e9 b6 fd ff ff jmp ffffffff80004a27 if (!ctx->reverse_video) { ffffffff80004c71: 84 c0 test %al,%al ffffffff80004c73: 75 f1 jne ffffffff80004c66 ctx->set_text_fg_default_bright(ctx); ffffffff80004c75: ff 93 50 01 00 00 call *0x150(%rbx) ffffffff80004c7b: e9 a7 fd ff ff jmp ffffffff80004a27 i++; ffffffff80004c80: 4d 8d 7c 24 01 lea 0x1(%r12),%r15 if (i >= ctx->esc_values_i) { ffffffff80004c85: 49 39 f7 cmp %rsi,%r15 ffffffff80004c88: 0f 83 d0 f2 ff ff jae ffffffff80003f5e switch (ctx->esc_values[i]) { ffffffff80004c8e: 8b 41 7c mov 0x7c(%rcx),%eax ffffffff80004c91: 83 f8 02 cmp $0x2,%eax ffffffff80004c94: 0f 84 a3 00 00 00 je ffffffff80004d3d ffffffff80004c9a: 83 f8 05 cmp $0x5,%eax ffffffff80004c9d: 0f 85 87 fd ff ff jne ffffffff80004a2a if (i + 1 >= ctx->esc_values_i) { ffffffff80004ca3: 4d 8d 7c 24 02 lea 0x2(%r12),%r15 ffffffff80004ca8: 49 39 f7 cmp %rsi,%r15 ffffffff80004cab: 0f 83 ad f2 ff ff jae ffffffff80003f5e uint32_t col = ctx->esc_values[i + 1]; ffffffff80004cb1: 8b 81 80 00 00 00 mov 0x80(%rcx),%eax if (col < 8) { ffffffff80004cb7: 83 f8 07 cmp $0x7,%eax ffffffff80004cba: 77 46 ja ffffffff80004d02 (fg ? ctx->set_text_fg : ctx->set_text_bg)(ctx, col); ffffffff80004cbc: 48 8b 8b 18 01 00 00 mov 0x118(%rbx),%rcx ffffffff80004cc3: 83 fa 26 cmp $0x26,%edx ffffffff80004cc6: 89 c6 mov %eax,%esi ffffffff80004cc8: 48 89 df mov %rbx,%rdi ffffffff80004ccb: 48 0f 44 8b 10 01 00 cmove 0x110(%rbx),%rcx ffffffff80004cd2: 00 ffffffff80004cd3: ff d1 call *%rcx ffffffff80004cd5: e9 50 fd ff ff jmp ffffffff80004a2a ctx->current_primary = ctx->esc_values[i] - offset; ffffffff80004cda: 48 8d 50 e2 lea -0x1e(%rax),%rdx if (ctx->reverse_video) { ffffffff80004cde: 80 7b 13 00 cmpb $0x0,0x13(%rbx) if ((ctx->bold && ctx->reverse_video) ffffffff80004ce2: 0f b6 4b 11 movzbl 0x11(%rbx),%ecx ctx->current_primary = ctx->esc_values[i] - offset; ffffffff80004ce6: 48 89 53 58 mov %rdx,0x58(%rbx) if (ctx->reverse_video) { ffffffff80004cea: 0f 85 91 00 00 00 jne ffffffff80004d81 offset = 30; ffffffff80004cf0: ba 1e 00 00 00 mov $0x1e,%edx if ((ctx->bold && !ctx->reverse_video) ffffffff80004cf5: 84 c9 test %cl,%cl ffffffff80004cf7: 0f 84 a9 fe ff ff je ffffffff80004ba6 ffffffff80004cfd: e9 51 fd ff ff jmp ffffffff80004a53 } else if (col < 16) { ffffffff80004d02: 83 f8 0f cmp $0xf,%eax ffffffff80004d05: 0f 87 ae 00 00 00 ja ffffffff80004db9 (fg ? ctx->set_text_fg_bright : ctx->set_text_bg_bright)(ctx, col - 8); ffffffff80004d0b: 48 8b 8b 28 01 00 00 mov 0x128(%rbx),%rcx ffffffff80004d12: 83 fa 26 cmp $0x26,%edx ffffffff80004d15: 8d 70 f8 lea -0x8(%rax),%esi ffffffff80004d18: 48 89 df mov %rbx,%rdi ffffffff80004d1b: 48 0f 44 8b 20 01 00 cmove 0x120(%rbx),%rcx ffffffff80004d22: 00 ffffffff80004d23: ff d1 call *%rcx ffffffff80004d25: e9 00 fd ff ff jmp ffffffff80004a2a if (ctx->reverse_video) { ffffffff80004d2a: 80 7b 13 00 cmpb $0x0,0x13(%rbx) ffffffff80004d2e: 0f 84 f3 fc ff ff je ffffffff80004a27 ctx->reverse_video = false; ffffffff80004d34: c6 43 13 00 movb $0x0,0x13(%rbx) ffffffff80004d38: e9 eb fd ff ff jmp ffffffff80004b28 if (i + 3 >= ctx->esc_values_i) { ffffffff80004d3d: 4d 8d 7c 24 04 lea 0x4(%r12),%r15 ffffffff80004d42: 49 39 f7 cmp %rsi,%r15 ffffffff80004d45: 0f 83 13 f2 ff ff jae ffffffff80003f5e rgb_value |= ctx->esc_values[i + 1] << 16; ffffffff80004d4b: 8b b1 80 00 00 00 mov 0x80(%rcx),%esi rgb_value |= ctx->esc_values[i + 2] << 8; ffffffff80004d51: 8b 81 84 00 00 00 mov 0x84(%rcx),%eax rgb_value |= ctx->esc_values[i + 1] << 16; ffffffff80004d57: c1 e6 10 shl $0x10,%esi rgb_value |= ctx->esc_values[i + 2] << 8; ffffffff80004d5a: c1 e0 08 shl $0x8,%eax ffffffff80004d5d: 09 c6 or %eax,%esi rgb_value |= ctx->esc_values[i + 3]; ffffffff80004d5f: 0b b1 88 00 00 00 or 0x88(%rcx),%esi (fg ? ctx->set_text_fg_rgb : ctx->set_text_bg_rgb)(ctx, rgb_value); ffffffff80004d65: 48 8b 83 38 01 00 00 mov 0x138(%rbx),%rax ffffffff80004d6c: 83 fa 26 cmp $0x26,%edx ffffffff80004d6f: 48 89 df mov %rbx,%rdi ffffffff80004d72: 48 0f 44 83 30 01 00 cmove 0x130(%rbx),%rax ffffffff80004d79: 00 ffffffff80004d7a: ff d0 call *%rax ffffffff80004d7c: e9 a9 fc ff ff jmp ffffffff80004a2a offset = 30; ffffffff80004d81: ba 1e 00 00 00 mov $0x1e,%edx if ((ctx->bold && ctx->reverse_video) ffffffff80004d86: 84 c9 test %cl,%cl ffffffff80004d88: 0f 85 8a fc ff ff jne ffffffff80004a18 ffffffff80004d8e: e9 c0 fd ff ff jmp ffffffff80004b53 if (ctx->current_bg != (size_t)-1) { ffffffff80004d93: 48 8b 73 60 mov 0x60(%rbx),%rsi if (!ctx->reverse_video) { ffffffff80004d97: 0f b6 43 13 movzbl 0x13(%rbx),%eax ctx->bg_bold = false; ffffffff80004d9b: c6 43 12 00 movb $0x0,0x12(%rbx) ctx->set_text_bg(ctx, ctx->current_bg); ffffffff80004d9f: 48 89 df mov %rbx,%rdi if (ctx->current_bg != (size_t)-1) { ffffffff80004da2: 48 83 fe ff cmp $0xffffffffffffffff,%rsi ffffffff80004da6: 0f 84 a7 fe ff ff je ffffffff80004c53 if (!ctx->reverse_video) { ffffffff80004dac: 84 c0 test %al,%al ffffffff80004dae: 0f 85 fb fd ff ff jne ffffffff80004baf ffffffff80004db4: e9 a3 fd ff ff jmp ffffffff80004b5c } else if (col < 256) { ffffffff80004db9: 3d ff 00 00 00 cmp $0xff,%eax ffffffff80004dbe: 0f 87 66 fc ff ff ja ffffffff80004a2a uint32_t rgb_value = col256[col - 16]; ffffffff80004dc4: 83 e8 10 sub $0x10,%eax ffffffff80004dc7: 8b 34 85 e0 b5 00 80 mov -0x7fff4a20(,%rax,4),%esi ffffffff80004dce: eb 95 jmp ffffffff80004d65 ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_>: ffffffff80004dd0: f3 0f 1e fa endbr64 ffffffff80004dd4: 55 push %rbp ffffffff80004dd5: 48 89 f5 mov %rsi,%rbp ffffffff80004dd8: 53 push %rbx ffffffff80004dd9: 48 89 fb mov %rdi,%rbx #if defined (__x86_64__) ffffffff80004ddc: 48 c7 c7 a2 b9 00 80 mov $0xffffffff8000b9a2,%rdi ffffffff80004de3: 48 83 ec 08 sub $0x8,%rsp #if defined (__x86_64__) ffffffff80004de7: e8 b4 21 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff80004dec: 48 89 ef mov %rbp,%rdi ffffffff80004def: e8 ac 21 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff80004df4: 48 c7 c7 aa b9 00 80 mov $0xffffffff8000b9aa,%rdi ffffffff80004dfb: e8 a0 21 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff80004e00: 48 83 c4 08 add $0x8,%rsp ffffffff80004e04: 48 89 d8 mov %rbx,%rax ffffffff80004e07: 5b pop %rbx ffffffff80004e08: 5d pop %rbp ffffffff80004e09: c3 ret ffffffff80004e0a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) ffffffff80004e10 <_ZN2KtlsIhEERNS_17KernelErrorStreamES2_T_>: ffffffff80004e10: f3 0f 1e fa endbr64 ffffffff80004e14: 55 push %rbp ffffffff80004e15: 48 89 fd mov %rdi,%rbp #if defined (__x86_64__) ffffffff80004e18: 48 c7 c7 a2 b9 00 80 mov $0xffffffff8000b9a2,%rdi ffffffff80004e1f: 53 push %rbx ffffffff80004e20: 89 f3 mov %esi,%ebx ffffffff80004e22: 48 83 ec 08 sub $0x8,%rsp #if defined (__x86_64__) ffffffff80004e26: e8 75 21 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff80004e2b: 8b 35 c7 72 00 00 mov 0x72c7(%rip),%esi # ffffffff8000c0f8 ffffffff80004e31: 0f b6 fb movzbl %bl,%edi ffffffff80004e34: e8 67 1a 00 00 call ffffffff800068a0 <_ZN3Lib11int2basestrEim> ffffffff80004e39: 48 89 c7 mov %rax,%rdi ffffffff80004e3c: e8 5f 21 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> #if defined (__x86_64__) ffffffff80004e41: 48 c7 c7 aa b9 00 80 mov $0xffffffff8000b9aa,%rdi ffffffff80004e48: e8 53 21 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff80004e4d: 48 83 c4 08 add $0x8,%rsp ffffffff80004e51: 48 89 e8 mov %rbp,%rax ffffffff80004e54: 5b pop %rbx ffffffff80004e55: 5d pop %rbp ffffffff80004e56: c3 ret ffffffff80004e57: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80004e5e: 00 00 ffffffff80004e60 <_ZN2KtlsImEERNS_17KernelErrorStreamES2_T_>: ffffffff80004e60: f3 0f 1e fa endbr64 ffffffff80004e64: 55 push %rbp ffffffff80004e65: 48 89 f5 mov %rsi,%rbp ffffffff80004e68: 53 push %rbx ffffffff80004e69: 48 89 fb mov %rdi,%rbx #if defined (__x86_64__) ffffffff80004e6c: 48 c7 c7 a2 b9 00 80 mov $0xffffffff8000b9a2,%rdi ffffffff80004e73: 48 83 ec 08 sub $0x8,%rsp #if defined (__x86_64__) ffffffff80004e77: e8 24 21 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff80004e7c: 8b 35 76 72 00 00 mov 0x7276(%rip),%esi # ffffffff8000c0f8 ffffffff80004e82: 48 89 ef mov %rbp,%rdi ffffffff80004e85: e8 26 1b 00 00 call ffffffff800069b0 <_ZN3Lib13u64_2_basestrEmm> ffffffff80004e8a: 48 89 c7 mov %rax,%rdi ffffffff80004e8d: e8 0e 21 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> #if defined (__x86_64__) ffffffff80004e92: 48 c7 c7 aa b9 00 80 mov $0xffffffff8000b9aa,%rdi ffffffff80004e99: e8 02 21 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff80004e9e: 48 83 c4 08 add $0x8,%rsp ffffffff80004ea2: 48 89 d8 mov %rbx,%rax ffffffff80004ea5: 5b pop %rbx ffffffff80004ea6: 5d pop %rbp ffffffff80004ea7: c3 ret ffffffff80004ea8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) ffffffff80004eaf: 00 ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE>: void Panic(const char *meditationString, System::PanicFrame* frame) { ffffffff80004eb0: f3 0f 1e fa endbr64 ffffffff80004eb4: 41 54 push %r12 ffffffff80004eb6: 55 push %rbp ffffffff80004eb7: 48 89 fd mov %rdi,%rbp kerr << "\nGuru Meditation" << "\n" << "\n"; ffffffff80004eba: 48 c7 c7 c0 17 0e 80 mov $0xffffffff800e17c0,%rdi void Panic(const char *meditationString, System::PanicFrame* frame) { ffffffff80004ec1: 53 push %rbx ffffffff80004ec2: 48 89 f3 mov %rsi,%rbx kerr << "\nGuru Meditation" << "\n" << "\n"; ffffffff80004ec5: 48 c7 c6 af b9 00 80 mov $0xffffffff8000b9af,%rsi ffffffff80004ecc: e8 ff fe ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80004ed1: 48 c7 c6 c0 b9 00 80 mov $0xffffffff8000b9c0,%rsi ffffffff80004ed8: 48 89 c7 mov %rax,%rdi ffffffff80004edb: e8 f0 fe ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80004ee0: 48 c7 c6 c0 b9 00 80 mov $0xffffffff8000b9c0,%rsi ffffffff80004ee7: 48 89 c7 mov %rax,%rdi ffffffff80004eea: e8 e1 fe ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "MeditationString: " << meditationString << Kt::newline; ffffffff80004eef: 48 c7 c6 c2 b9 00 80 mov $0xffffffff8000b9c2,%rsi ffffffff80004ef6: 48 c7 c7 c0 17 0e 80 mov $0xffffffff800e17c0,%rdi ffffffff80004efd: e8 ce fe ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80004f02: 48 c7 c6 c4 b9 00 80 mov $0xffffffff8000b9c4,%rsi ffffffff80004f09: 48 89 c7 mov %rax,%rdi ffffffff80004f0c: e8 bf fe ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80004f11: 48 89 ee mov %rbp,%rsi ffffffff80004f14: 48 89 c7 mov %rax,%rdi ffffffff80004f17: e8 b4 fe ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> base streamBaseType = base::dec; // C++ streaming operator like cout friend KernelOutStream &operator<<(KernelOutStream &t, const char *string) { Print(string); ffffffff80004f1c: 48 c7 c7 a2 b9 00 80 mov $0xffffffff8000b9a2,%rdi ffffffff80004f23: e8 78 20 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> } // C++ streaming operator like cout friend KernelOutStream &operator<<(KernelOutStream &t, const char chr) { Putchar(chr); ffffffff80004f28: bf 0a 00 00 00 mov $0xa,%edi ffffffff80004f2d: e8 3e 20 00 00 call ffffffff80006f70 <_ZN2Kt7PutcharEc> Print(string); ffffffff80004f32: 48 c7 c7 aa b9 00 80 mov $0xffffffff8000b9aa,%rdi ffffffff80004f39: e8 62 20 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> if (frame != nullptr) { ffffffff80004f3e: 48 85 db test %rbx,%rbx ffffffff80004f41: 0f 84 b9 02 00 00 je ffffffff80005200 <_Z5PanicPKcPN6System10PanicFrameE+0x350> kerr << "\t" << "InterruptVector: " << "0x" << base::hex << frame->InterruptVector << "\n"; ffffffff80004f47: 48 c7 c6 c2 b9 00 80 mov $0xffffffff8000b9c2,%rsi ffffffff80004f4e: 48 c7 c7 c0 17 0e 80 mov $0xffffffff800e17c0,%rdi ffffffff80004f55: e8 76 fe ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80004f5a: 48 c7 c6 d7 b9 00 80 mov $0xffffffff8000b9d7,%rsi ffffffff80004f61: 48 89 c7 mov %rax,%rdi ffffffff80004f64: e8 67 fe ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80004f69: 48 c7 c6 10 bd 00 80 mov $0xffffffff8000bd10,%rsi ffffffff80004f70: 48 89 c7 mov %rax,%rdi ffffffff80004f73: e8 58 fe ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80004f78: 48 c7 c7 a2 b9 00 80 mov $0xffffffff8000b9a2,%rdi ffffffff80004f7f: 48 89 c5 mov %rax,%rbp ffffffff80004f82: e8 19 20 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff80004f87: 48 c7 c7 aa b9 00 80 mov $0xffffffff8000b9aa,%rdi return t; } friend KernelOutStream &operator<<(KernelOutStream &t, base newBase) { t.streamBaseType = newBase; ffffffff80004f8e: c7 05 60 71 00 00 10 movl $0x10,0x7160(%rip) # ffffffff8000c0f8 ffffffff80004f95: 00 00 00 Print(string); ffffffff80004f98: e8 03 20 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff80004f9d: 0f b6 73 28 movzbl 0x28(%rbx),%esi ffffffff80004fa1: 48 89 ef mov %rbp,%rdi ffffffff80004fa4: e8 67 fe ff ff call ffffffff80004e10 <_ZN2KtlsIhEERNS_17KernelErrorStreamES2_T_> ffffffff80004fa9: 48 c7 c6 c0 b9 00 80 mov $0xffffffff8000b9c0,%rsi ffffffff80004fb0: 48 89 c7 mov %rax,%rdi ffffffff80004fb3: e8 18 fe ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> if (frame->InterruptVector == 0xE) { // In case of #PF the CPU pushes an error code to the frame ffffffff80004fb8: 0f b6 43 28 movzbl 0x28(%rbx),%eax ffffffff80004fbc: 3c 0e cmp $0xe,%al ffffffff80004fbe: 0f 84 40 02 00 00 je ffffffff80005204 <_Z5PanicPKcPN6System10PanicFrameE+0x354> else if (frame->InterruptVector == 0xD) { ffffffff80004fc4: 3c 0d cmp $0xd,%al ffffffff80004fc6: 0f 84 7f 05 00 00 je ffffffff8000554b <_Z5PanicPKcPN6System10PanicFrameE+0x69b> kerr << "\t" << "InstructionPointer: " << "0x" << base::hex << frame->IP << "\n"; ffffffff80004fcc: 48 c7 c6 c2 b9 00 80 mov $0xffffffff8000b9c2,%rsi ffffffff80004fd3: 48 c7 c7 c0 17 0e 80 mov $0xffffffff800e17c0,%rdi ffffffff80004fda: e8 f1 fd ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80004fdf: 48 c7 c6 9d ba 00 80 mov $0xffffffff8000ba9d,%rsi ffffffff80004fe6: 48 89 c7 mov %rax,%rdi ffffffff80004fe9: e8 e2 fd ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80004fee: 48 c7 c6 10 bd 00 80 mov $0xffffffff8000bd10,%rsi ffffffff80004ff5: 48 89 c7 mov %rax,%rdi ffffffff80004ff8: e8 d3 fd ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80004ffd: 48 c7 c7 a2 b9 00 80 mov $0xffffffff8000b9a2,%rdi ffffffff80005004: 48 89 c5 mov %rax,%rbp ffffffff80005007: e8 94 1f 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff8000500c: 48 c7 c7 aa b9 00 80 mov $0xffffffff8000b9aa,%rdi t.streamBaseType = newBase; ffffffff80005013: c7 05 db 70 00 00 10 movl $0x10,0x70db(%rip) # ffffffff8000c0f8 ffffffff8000501a: 00 00 00 Print(string); ffffffff8000501d: e8 7e 1f 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff80005022: 48 8b 33 mov (%rbx),%rsi ffffffff80005025: 48 89 ef mov %rbp,%rdi ffffffff80005028: e8 33 fe ff ff call ffffffff80004e60 <_ZN2KtlsImEERNS_17KernelErrorStreamES2_T_> ffffffff8000502d: 48 c7 c6 c0 b9 00 80 mov $0xffffffff8000b9c0,%rsi ffffffff80005034: 48 89 c7 mov %rax,%rdi ffffffff80005037: e8 94 fd ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "CodeSegment: " << "0x" << base::hex << frame->CS << "\n"; ffffffff8000503c: 48 c7 c6 c2 b9 00 80 mov $0xffffffff8000b9c2,%rsi ffffffff80005043: 48 c7 c7 c0 17 0e 80 mov $0xffffffff800e17c0,%rdi ffffffff8000504a: e8 81 fd ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000504f: 48 c7 c6 b2 ba 00 80 mov $0xffffffff8000bab2,%rsi ffffffff80005056: 48 89 c7 mov %rax,%rdi ffffffff80005059: e8 72 fd ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000505e: 48 c7 c6 10 bd 00 80 mov $0xffffffff8000bd10,%rsi ffffffff80005065: 48 89 c7 mov %rax,%rdi ffffffff80005068: e8 63 fd ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000506d: 48 c7 c7 a2 b9 00 80 mov $0xffffffff8000b9a2,%rdi ffffffff80005074: 48 89 c5 mov %rax,%rbp ffffffff80005077: e8 24 1f 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff8000507c: 48 c7 c7 aa b9 00 80 mov $0xffffffff8000b9aa,%rdi t.streamBaseType = newBase; ffffffff80005083: c7 05 6b 70 00 00 10 movl $0x10,0x706b(%rip) # ffffffff8000c0f8 ffffffff8000508a: 00 00 00 Print(string); ffffffff8000508d: e8 0e 1f 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff80005092: 48 8b 73 08 mov 0x8(%rbx),%rsi ffffffff80005096: 48 89 ef mov %rbp,%rdi ffffffff80005099: e8 c2 fd ff ff call ffffffff80004e60 <_ZN2KtlsImEERNS_17KernelErrorStreamES2_T_> ffffffff8000509e: 48 c7 c6 c0 b9 00 80 mov $0xffffffff8000b9c0,%rsi ffffffff800050a5: 48 89 c7 mov %rax,%rdi ffffffff800050a8: e8 23 fd ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "Flags: " << "0x" << base::hex << frame->Flags << "\n"; ffffffff800050ad: 48 c7 c6 c2 b9 00 80 mov $0xffffffff8000b9c2,%rsi ffffffff800050b4: 48 c7 c7 c0 17 0e 80 mov $0xffffffff800e17c0,%rdi ffffffff800050bb: e8 10 fd ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800050c0: 48 c7 c6 c0 ba 00 80 mov $0xffffffff8000bac0,%rsi ffffffff800050c7: 48 89 c7 mov %rax,%rdi ffffffff800050ca: e8 01 fd ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800050cf: 48 c7 c6 10 bd 00 80 mov $0xffffffff8000bd10,%rsi ffffffff800050d6: 48 89 c7 mov %rax,%rdi ffffffff800050d9: e8 f2 fc ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800050de: 48 c7 c7 a2 b9 00 80 mov $0xffffffff8000b9a2,%rdi ffffffff800050e5: 48 89 c5 mov %rax,%rbp ffffffff800050e8: e8 b3 1e 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff800050ed: 48 c7 c7 aa b9 00 80 mov $0xffffffff8000b9aa,%rdi t.streamBaseType = newBase; ffffffff800050f4: c7 05 fa 6f 00 00 10 movl $0x10,0x6ffa(%rip) # ffffffff8000c0f8 ffffffff800050fb: 00 00 00 Print(string); ffffffff800050fe: e8 9d 1e 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff80005103: 48 8b 73 10 mov 0x10(%rbx),%rsi ffffffff80005107: 48 89 ef mov %rbp,%rdi ffffffff8000510a: e8 51 fd ff ff call ffffffff80004e60 <_ZN2KtlsImEERNS_17KernelErrorStreamES2_T_> ffffffff8000510f: 48 c7 c6 c0 b9 00 80 mov $0xffffffff8000b9c0,%rsi ffffffff80005116: 48 89 c7 mov %rax,%rdi ffffffff80005119: e8 b2 fc ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "StackPointer: " << "0x" << base::hex << frame->SP << "\n"; ffffffff8000511e: 48 c7 c6 c2 b9 00 80 mov $0xffffffff8000b9c2,%rsi ffffffff80005125: 48 c7 c7 c0 17 0e 80 mov $0xffffffff800e17c0,%rdi ffffffff8000512c: e8 9f fc ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80005131: 48 c7 c6 c8 ba 00 80 mov $0xffffffff8000bac8,%rsi ffffffff80005138: 48 89 c7 mov %rax,%rdi ffffffff8000513b: e8 90 fc ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80005140: 48 c7 c6 10 bd 00 80 mov $0xffffffff8000bd10,%rsi ffffffff80005147: 48 89 c7 mov %rax,%rdi ffffffff8000514a: e8 81 fc ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000514f: 48 c7 c7 a2 b9 00 80 mov $0xffffffff8000b9a2,%rdi ffffffff80005156: 48 89 c5 mov %rax,%rbp ffffffff80005159: e8 42 1e 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff8000515e: 48 c7 c7 aa b9 00 80 mov $0xffffffff8000b9aa,%rdi t.streamBaseType = newBase; ffffffff80005165: c7 05 89 6f 00 00 10 movl $0x10,0x6f89(%rip) # ffffffff8000c0f8 ffffffff8000516c: 00 00 00 Print(string); ffffffff8000516f: e8 2c 1e 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff80005174: 48 8b 73 18 mov 0x18(%rbx),%rsi ffffffff80005178: 48 89 ef mov %rbp,%rdi ffffffff8000517b: e8 e0 fc ff ff call ffffffff80004e60 <_ZN2KtlsImEERNS_17KernelErrorStreamES2_T_> ffffffff80005180: 48 c7 c6 c0 b9 00 80 mov $0xffffffff8000b9c0,%rsi ffffffff80005187: 48 89 c7 mov %rax,%rdi ffffffff8000518a: e8 41 fc ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "StackSegment: " << "0x" << base::hex << frame->SS << "\n"; ffffffff8000518f: 48 c7 c6 c2 b9 00 80 mov $0xffffffff8000b9c2,%rsi ffffffff80005196: 48 c7 c7 c0 17 0e 80 mov $0xffffffff800e17c0,%rdi ffffffff8000519d: e8 2e fc ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800051a2: 48 c7 c6 d7 ba 00 80 mov $0xffffffff8000bad7,%rsi ffffffff800051a9: 48 89 c7 mov %rax,%rdi ffffffff800051ac: e8 1f fc ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800051b1: 48 c7 c6 10 bd 00 80 mov $0xffffffff8000bd10,%rsi ffffffff800051b8: 48 89 c7 mov %rax,%rdi ffffffff800051bb: e8 10 fc ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800051c0: 48 c7 c7 a2 b9 00 80 mov $0xffffffff8000b9a2,%rdi ffffffff800051c7: 48 89 c5 mov %rax,%rbp ffffffff800051ca: e8 d1 1d 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff800051cf: 48 c7 c7 aa b9 00 80 mov $0xffffffff8000b9aa,%rdi t.streamBaseType = newBase; ffffffff800051d6: c7 05 18 6f 00 00 10 movl $0x10,0x6f18(%rip) # ffffffff8000c0f8 ffffffff800051dd: 00 00 00 Print(string); ffffffff800051e0: e8 bb 1d 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff800051e5: 48 8b 73 20 mov 0x20(%rbx),%rsi ffffffff800051e9: 48 89 ef mov %rbp,%rdi ffffffff800051ec: e8 6f fc ff ff call ffffffff80004e60 <_ZN2KtlsImEERNS_17KernelErrorStreamES2_T_> ffffffff800051f1: 48 c7 c6 c0 b9 00 80 mov $0xffffffff8000b9c0,%rsi ffffffff800051f8: 48 89 c7 mov %rax,%rdi ffffffff800051fb: e8 d0 fb ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> asm ("cli"); ffffffff80005200: fa cli asm ("hlt"); ffffffff80005201: f4 hlt while (true) { ffffffff80005202: eb fc jmp ffffffff80005200 <_Z5PanicPKcPN6System10PanicFrameE+0x350> kerr << "\t" << "PageFaultPresent: " << base::dec << pf_frame->PageFaultError.Present << "\n"; ffffffff80005204: 48 c7 c6 c2 b9 00 80 mov $0xffffffff8000b9c2,%rsi ffffffff8000520b: 48 c7 c7 c0 17 0e 80 mov $0xffffffff800e17c0,%rdi frame = (System::PanicFrame*)&pf_frame->IP; ffffffff80005212: 48 8d 6b 08 lea 0x8(%rbx),%rbp kerr << "\t" << "PageFaultPresent: " << base::dec << pf_frame->PageFaultError.Present << "\n"; ffffffff80005216: e8 b5 fb ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000521b: 48 c7 c6 e9 b9 00 80 mov $0xffffffff8000b9e9,%rsi ffffffff80005222: 48 89 c7 mov %rax,%rdi ffffffff80005225: e8 a6 fb ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000522a: 48 c7 c7 a2 b9 00 80 mov $0xffffffff8000b9a2,%rdi ffffffff80005231: 49 89 c4 mov %rax,%r12 ffffffff80005234: e8 67 1d 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff80005239: 48 c7 c7 aa b9 00 80 mov $0xffffffff8000b9aa,%rdi t.streamBaseType = newBase; ffffffff80005240: c7 05 ae 6e 00 00 0a movl $0xa,0x6eae(%rip) # ffffffff8000c0f8 ffffffff80005247: 00 00 00 Print(string); ffffffff8000524a: e8 51 1d 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff8000524f: 0f b6 33 movzbl (%rbx),%esi ffffffff80005252: 4c 89 e7 mov %r12,%rdi ffffffff80005255: 83 e6 01 and $0x1,%esi ffffffff80005258: e8 b3 fb ff ff call ffffffff80004e10 <_ZN2KtlsIhEERNS_17KernelErrorStreamES2_T_> ffffffff8000525d: 48 c7 c6 c0 b9 00 80 mov $0xffffffff8000b9c0,%rsi ffffffff80005264: 48 89 c7 mov %rax,%rdi ffffffff80005267: e8 64 fb ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "PageFaultWrite: " << base::dec << pf_frame->PageFaultError.Write << "\n"; ffffffff8000526c: 48 c7 c6 c2 b9 00 80 mov $0xffffffff8000b9c2,%rsi ffffffff80005273: 48 c7 c7 c0 17 0e 80 mov $0xffffffff800e17c0,%rdi ffffffff8000527a: e8 51 fb ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000527f: 48 c7 c6 fc b9 00 80 mov $0xffffffff8000b9fc,%rsi ffffffff80005286: 48 89 c7 mov %rax,%rdi ffffffff80005289: e8 42 fb ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000528e: 48 c7 c7 a2 b9 00 80 mov $0xffffffff8000b9a2,%rdi ffffffff80005295: 49 89 c4 mov %rax,%r12 ffffffff80005298: e8 03 1d 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff8000529d: 48 c7 c7 aa b9 00 80 mov $0xffffffff8000b9aa,%rdi t.streamBaseType = newBase; ffffffff800052a4: c7 05 4a 6e 00 00 0a movl $0xa,0x6e4a(%rip) # ffffffff8000c0f8 ffffffff800052ab: 00 00 00 Print(string); ffffffff800052ae: e8 ed 1c 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff800052b3: 0f b6 33 movzbl (%rbx),%esi ffffffff800052b6: 4c 89 e7 mov %r12,%rdi ffffffff800052b9: 40 d0 ee shr $1,%sil ffffffff800052bc: 83 e6 01 and $0x1,%esi ffffffff800052bf: e8 4c fb ff ff call ffffffff80004e10 <_ZN2KtlsIhEERNS_17KernelErrorStreamES2_T_> ffffffff800052c4: 48 c7 c6 c0 b9 00 80 mov $0xffffffff8000b9c0,%rsi ffffffff800052cb: 48 89 c7 mov %rax,%rdi ffffffff800052ce: e8 fd fa ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "PageFaultUser: " << base::dec << pf_frame->PageFaultError.User << "\n"; ffffffff800052d3: 48 c7 c6 c2 b9 00 80 mov $0xffffffff8000b9c2,%rsi ffffffff800052da: 48 c7 c7 c0 17 0e 80 mov $0xffffffff800e17c0,%rdi ffffffff800052e1: e8 ea fa ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800052e6: 48 c7 c6 0d ba 00 80 mov $0xffffffff8000ba0d,%rsi ffffffff800052ed: 48 89 c7 mov %rax,%rdi ffffffff800052f0: e8 db fa ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800052f5: 48 c7 c7 a2 b9 00 80 mov $0xffffffff8000b9a2,%rdi ffffffff800052fc: 49 89 c4 mov %rax,%r12 ffffffff800052ff: e8 9c 1c 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff80005304: 48 c7 c7 aa b9 00 80 mov $0xffffffff8000b9aa,%rdi t.streamBaseType = newBase; ffffffff8000530b: c7 05 e3 6d 00 00 0a movl $0xa,0x6de3(%rip) # ffffffff8000c0f8 ffffffff80005312: 00 00 00 Print(string); ffffffff80005315: e8 86 1c 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff8000531a: 0f b6 33 movzbl (%rbx),%esi ffffffff8000531d: 4c 89 e7 mov %r12,%rdi ffffffff80005320: 40 c0 ee 02 shr $0x2,%sil ffffffff80005324: 83 e6 01 and $0x1,%esi ffffffff80005327: e8 e4 fa ff ff call ffffffff80004e10 <_ZN2KtlsIhEERNS_17KernelErrorStreamES2_T_> ffffffff8000532c: 48 c7 c6 c0 b9 00 80 mov $0xffffffff8000b9c0,%rsi ffffffff80005333: 48 89 c7 mov %rax,%rdi ffffffff80005336: e8 95 fa ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "PageFaultReservedWrite: " << base::dec << pf_frame->PageFaultError.ReservedWrite << "\n"; ffffffff8000533b: 48 c7 c6 c2 b9 00 80 mov $0xffffffff8000b9c2,%rsi ffffffff80005342: 48 c7 c7 c0 17 0e 80 mov $0xffffffff800e17c0,%rdi ffffffff80005349: e8 82 fa ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000534e: 48 c7 c6 1d ba 00 80 mov $0xffffffff8000ba1d,%rsi ffffffff80005355: 48 89 c7 mov %rax,%rdi ffffffff80005358: e8 73 fa ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000535d: 48 c7 c7 a2 b9 00 80 mov $0xffffffff8000b9a2,%rdi ffffffff80005364: 49 89 c4 mov %rax,%r12 ffffffff80005367: e8 34 1c 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff8000536c: 48 c7 c7 aa b9 00 80 mov $0xffffffff8000b9aa,%rdi t.streamBaseType = newBase; ffffffff80005373: c7 05 7b 6d 00 00 0a movl $0xa,0x6d7b(%rip) # ffffffff8000c0f8 ffffffff8000537a: 00 00 00 Print(string); ffffffff8000537d: e8 1e 1c 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff80005382: 0f b6 33 movzbl (%rbx),%esi ffffffff80005385: 4c 89 e7 mov %r12,%rdi ffffffff80005388: 40 c0 ee 03 shr $0x3,%sil ffffffff8000538c: 83 e6 01 and $0x1,%esi ffffffff8000538f: e8 7c fa ff ff call ffffffff80004e10 <_ZN2KtlsIhEERNS_17KernelErrorStreamES2_T_> ffffffff80005394: 48 c7 c6 c0 b9 00 80 mov $0xffffffff8000b9c0,%rsi ffffffff8000539b: 48 89 c7 mov %rax,%rdi ffffffff8000539e: e8 2d fa ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "PageFaultInstructionFetch: " << base::dec << pf_frame->PageFaultError.InstructionFetch << "\n"; ffffffff800053a3: 48 c7 c6 c2 b9 00 80 mov $0xffffffff8000b9c2,%rsi ffffffff800053aa: 48 c7 c7 c0 17 0e 80 mov $0xffffffff800e17c0,%rdi ffffffff800053b1: e8 1a fa ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800053b6: 48 c7 c6 36 ba 00 80 mov $0xffffffff8000ba36,%rsi ffffffff800053bd: 48 89 c7 mov %rax,%rdi ffffffff800053c0: e8 0b fa ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800053c5: 48 c7 c7 a2 b9 00 80 mov $0xffffffff8000b9a2,%rdi ffffffff800053cc: 49 89 c4 mov %rax,%r12 ffffffff800053cf: e8 cc 1b 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff800053d4: 48 c7 c7 aa b9 00 80 mov $0xffffffff8000b9aa,%rdi t.streamBaseType = newBase; ffffffff800053db: c7 05 13 6d 00 00 0a movl $0xa,0x6d13(%rip) # ffffffff8000c0f8 ffffffff800053e2: 00 00 00 Print(string); ffffffff800053e5: e8 b6 1b 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff800053ea: 0f b6 33 movzbl (%rbx),%esi ffffffff800053ed: 4c 89 e7 mov %r12,%rdi ffffffff800053f0: 40 c0 ee 04 shr $0x4,%sil ffffffff800053f4: 83 e6 01 and $0x1,%esi ffffffff800053f7: e8 14 fa ff ff call ffffffff80004e10 <_ZN2KtlsIhEERNS_17KernelErrorStreamES2_T_> ffffffff800053fc: 48 c7 c6 c0 b9 00 80 mov $0xffffffff8000b9c0,%rsi ffffffff80005403: 48 89 c7 mov %rax,%rdi ffffffff80005406: e8 c5 f9 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "PageFaultProtectionKey: " << base::dec << pf_frame->PageFaultError.ProtectionKey << "\n"; ffffffff8000540b: 48 c7 c6 c2 b9 00 80 mov $0xffffffff8000b9c2,%rsi ffffffff80005412: 48 c7 c7 c0 17 0e 80 mov $0xffffffff800e17c0,%rdi ffffffff80005419: e8 b2 f9 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000541e: 48 c7 c6 52 ba 00 80 mov $0xffffffff8000ba52,%rsi ffffffff80005425: 48 89 c7 mov %rax,%rdi ffffffff80005428: e8 a3 f9 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000542d: 48 c7 c7 a2 b9 00 80 mov $0xffffffff8000b9a2,%rdi ffffffff80005434: 49 89 c4 mov %rax,%r12 ffffffff80005437: e8 64 1b 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff8000543c: 48 c7 c7 aa b9 00 80 mov $0xffffffff8000b9aa,%rdi t.streamBaseType = newBase; ffffffff80005443: c7 05 ab 6c 00 00 0a movl $0xa,0x6cab(%rip) # ffffffff8000c0f8 ffffffff8000544a: 00 00 00 Print(string); ffffffff8000544d: e8 4e 1b 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff80005452: 0f b6 33 movzbl (%rbx),%esi ffffffff80005455: 4c 89 e7 mov %r12,%rdi ffffffff80005458: 40 c0 ee 05 shr $0x5,%sil ffffffff8000545c: 83 e6 01 and $0x1,%esi ffffffff8000545f: e8 ac f9 ff ff call ffffffff80004e10 <_ZN2KtlsIhEERNS_17KernelErrorStreamES2_T_> ffffffff80005464: 48 c7 c6 c0 b9 00 80 mov $0xffffffff8000b9c0,%rsi ffffffff8000546b: 48 89 c7 mov %rax,%rdi ffffffff8000546e: e8 5d f9 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "PageFaultShadowStack: " << base::dec << pf_frame->PageFaultError.ShadowStack << "\n"; ffffffff80005473: 48 c7 c6 c2 b9 00 80 mov $0xffffffff8000b9c2,%rsi ffffffff8000547a: 48 c7 c7 c0 17 0e 80 mov $0xffffffff800e17c0,%rdi ffffffff80005481: e8 4a f9 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80005486: 48 c7 c6 6b ba 00 80 mov $0xffffffff8000ba6b,%rsi ffffffff8000548d: 48 89 c7 mov %rax,%rdi ffffffff80005490: e8 3b f9 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80005495: 48 c7 c7 a2 b9 00 80 mov $0xffffffff8000b9a2,%rdi ffffffff8000549c: 49 89 c4 mov %rax,%r12 ffffffff8000549f: e8 fc 1a 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff800054a4: 48 c7 c7 aa b9 00 80 mov $0xffffffff8000b9aa,%rdi t.streamBaseType = newBase; ffffffff800054ab: c7 05 43 6c 00 00 0a movl $0xa,0x6c43(%rip) # ffffffff8000c0f8 ffffffff800054b2: 00 00 00 Print(string); ffffffff800054b5: e8 e6 1a 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff800054ba: 0f b6 33 movzbl (%rbx),%esi ffffffff800054bd: 4c 89 e7 mov %r12,%rdi ffffffff800054c0: 40 c0 ee 06 shr $0x6,%sil ffffffff800054c4: 83 e6 01 and $0x1,%esi ffffffff800054c7: e8 44 f9 ff ff call ffffffff80004e10 <_ZN2KtlsIhEERNS_17KernelErrorStreamES2_T_> ffffffff800054cc: 48 c7 c6 c0 b9 00 80 mov $0xffffffff8000b9c0,%rsi ffffffff800054d3: 48 89 c7 mov %rax,%rdi ffffffff800054d6: e8 f5 f8 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "PageFaultSGX: " << base::dec << pf_frame->PageFaultError.ShadowStack << "\n"; ffffffff800054db: 48 c7 c6 c2 b9 00 80 mov $0xffffffff8000b9c2,%rsi ffffffff800054e2: 48 c7 c7 c0 17 0e 80 mov $0xffffffff800e17c0,%rdi ffffffff800054e9: e8 e2 f8 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800054ee: 48 c7 c6 82 ba 00 80 mov $0xffffffff8000ba82,%rsi ffffffff800054f5: 48 89 c7 mov %rax,%rdi ffffffff800054f8: e8 d3 f8 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800054fd: 48 c7 c7 a2 b9 00 80 mov $0xffffffff8000b9a2,%rdi ffffffff80005504: 49 89 c4 mov %rax,%r12 ffffffff80005507: e8 94 1a 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff8000550c: 48 c7 c7 aa b9 00 80 mov $0xffffffff8000b9aa,%rdi t.streamBaseType = newBase; ffffffff80005513: c7 05 db 6b 00 00 0a movl $0xa,0x6bdb(%rip) # ffffffff8000c0f8 ffffffff8000551a: 00 00 00 Print(string); ffffffff8000551d: e8 7e 1a 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff80005522: 0f b6 33 movzbl (%rbx),%esi ffffffff80005525: 4c 89 e7 mov %r12,%rdi frame = (System::PanicFrame*)&pf_frame->IP; ffffffff80005528: 48 89 eb mov %rbp,%rbx kerr << "\t" << "PageFaultSGX: " << base::dec << pf_frame->PageFaultError.ShadowStack << "\n"; ffffffff8000552b: 40 c0 ee 06 shr $0x6,%sil ffffffff8000552f: 83 e6 01 and $0x1,%esi ffffffff80005532: e8 d9 f8 ff ff call ffffffff80004e10 <_ZN2KtlsIhEERNS_17KernelErrorStreamES2_T_> ffffffff80005537: 48 c7 c6 c0 b9 00 80 mov $0xffffffff8000b9c0,%rsi ffffffff8000553e: 48 89 c7 mov %rax,%rdi ffffffff80005541: e8 8a f8 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80005546: e9 81 fa ff ff jmp ffffffff80004fcc <_Z5PanicPKcPN6System10PanicFrameE+0x11c> kerr << "\t" << "ErrorCode: " << base::dec << gpf_frame->GeneralProtectionFaultError << "\n"; ffffffff8000554b: 48 c7 c6 c2 b9 00 80 mov $0xffffffff8000b9c2,%rsi ffffffff80005552: 48 c7 c7 c0 17 0e 80 mov $0xffffffff800e17c0,%rdi ffffffff80005559: e8 72 f8 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000555e: 48 c7 c6 91 ba 00 80 mov $0xffffffff8000ba91,%rsi ffffffff80005565: 48 89 c7 mov %rax,%rdi ffffffff80005568: e8 63 f8 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000556d: 48 c7 c7 a2 b9 00 80 mov $0xffffffff8000b9a2,%rdi ffffffff80005574: 48 89 c5 mov %rax,%rbp ffffffff80005577: e8 24 1a 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff8000557c: 48 c7 c7 aa b9 00 80 mov $0xffffffff8000b9aa,%rdi t.streamBaseType = newBase; ffffffff80005583: c7 05 6b 6b 00 00 0a movl $0xa,0x6b6b(%rip) # ffffffff8000c0f8 ffffffff8000558a: 00 00 00 Print(string); ffffffff8000558d: e8 0e 1a 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff80005592: 48 8b 33 mov (%rbx),%rsi ffffffff80005595: 48 89 ef mov %rbp,%rdi ffffffff80005598: e8 c3 f8 ff ff call ffffffff80004e60 <_ZN2KtlsImEERNS_17KernelErrorStreamES2_T_> ffffffff8000559d: 48 c7 c6 c0 b9 00 80 mov $0xffffffff8000b9c0,%rsi ffffffff800055a4: 48 89 c7 mov %rax,%rdi ffffffff800055a7: e8 24 f8 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800055ac: e9 1b fa ff ff jmp ffffffff80004fcc <_Z5PanicPKcPN6System10PanicFrameE+0x11c> ffffffff800055b1: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff800055b8: 00 00 00 ffffffff800055bb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff800055c0 <_ZdlPvm>: { Memory::g_heap->Free(block); } void operator delete(void* block, long unsigned int) { ffffffff800055c0: f3 0f 1e fa endbr64 ffffffff800055c4: 48 89 fe mov %rdi,%rsi Memory::g_heap->Free(block); ffffffff800055c7: 48 8b 3d 02 c2 0d 00 mov 0xdc202(%rip),%rdi # ffffffff800e17d0 <_ZN6Memory6g_heapE> ffffffff800055ce: e9 ed 16 00 00 jmp ffffffff80006cc0 <_ZN6Memory13HeapAllocator4FreeEPv> ffffffff800055d3: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff800055da: 00 00 00 ffffffff800055dd: 0f 1f 00 nopl (%rax) ffffffff800055e0 <_ZN3kcp13cstringstreamC1Ev>: #include "Stream.hpp" #include #include #include kcp::cstringstream::cstringstream() ffffffff800055e0: f3 0f 1e fa endbr64 ffffffff800055e4: c7 47 10 0a 00 00 00 movl $0xa,0x10(%rdi) { this->string = nullptr; ffffffff800055eb: 48 c7 07 00 00 00 00 movq $0x0,(%rdi) this->size = 0; ffffffff800055f2: 48 c7 47 08 00 00 00 movq $0x0,0x8(%rdi) ffffffff800055f9: 00 } ffffffff800055fa: c3 ret ffffffff800055fb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80005600 <_ZN3kcp13cstringstreamD1Ev>: kcp::cstringstream::~cstringstream() ffffffff80005600: f3 0f 1e fa endbr64 { delete this->string; ffffffff80005604: 48 8b 3f mov (%rdi),%rdi ffffffff80005607: 48 85 ff test %rdi,%rdi ffffffff8000560a: 74 14 je ffffffff80005620 <_ZN3kcp13cstringstreamD1Ev+0x20> ffffffff8000560c: be 01 00 00 00 mov $0x1,%esi ffffffff80005611: e9 aa ff ff ff jmp ffffffff800055c0 <_ZdlPvm> ffffffff80005616: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff8000561d: 00 00 00 } ffffffff80005620: c3 ret ffffffff80005621: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80005628: 00 00 00 ffffffff8000562b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80005630 <_ZN3kcp13cstringstreamlsEPKc>: } return *this; } kcp::cstringstream& kcp::cstringstream::operator<<(const char* str) { ffffffff80005630: f3 0f 1e fa endbr64 ffffffff80005634: 41 54 push %r12 ffffffff80005636: 55 push %rbp ffffffff80005637: 53 push %rbx while (*str != '\0') ffffffff80005638: 44 0f b6 26 movzbl (%rsi),%r12d kcp::cstringstream& kcp::cstringstream::operator<<(const char* str) { ffffffff8000563c: 48 89 fb mov %rdi,%rbx while (*str != '\0') ffffffff8000563f: 45 84 e4 test %r12b,%r12b ffffffff80005642: 74 49 je ffffffff8000568d <_ZN3kcp13cstringstreamlsEPKc+0x5d> ffffffff80005644: 48 89 f5 mov %rsi,%rbp ffffffff80005647: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff8000564e: 00 00 this->string = (char *)Memory::g_heap->Realloc((void *)this->string, this->size + 2); ffffffff80005650: 48 8b 43 08 mov 0x8(%rbx),%rax ffffffff80005654: 48 8b 33 mov (%rbx),%rsi ffffffff80005657: 48 8b 3d 72 c1 0d 00 mov 0xdc172(%rip),%rdi # ffffffff800e17d0 <_ZN6Memory6g_heapE> ffffffff8000565e: 48 8d 50 02 lea 0x2(%rax),%rdx ffffffff80005662: e8 e9 15 00 00 call ffffffff80006c50 <_ZN6Memory13HeapAllocator7ReallocEPvm> ffffffff80005667: 48 89 03 mov %rax,(%rbx) if (!this->string) ffffffff8000566a: 48 85 c0 test %rax,%rax ffffffff8000566d: 74 29 je ffffffff80005698 <_ZN3kcp13cstringstreamlsEPKc+0x68> char* ref = (char *)&string[size]; ffffffff8000566f: 48 03 43 08 add 0x8(%rbx),%rax *ref = c; ffffffff80005673: 44 88 20 mov %r12b,(%rax) *ref = '\0'; ffffffff80005676: c6 40 01 00 movb $0x0,0x1(%rax) this->size++; ffffffff8000567a: 48 83 43 08 01 addq $0x1,0x8(%rbx) while (*str != '\0') ffffffff8000567f: 44 0f b6 65 01 movzbl 0x1(%rbp),%r12d str++; ffffffff80005684: 48 83 c5 01 add $0x1,%rbp while (*str != '\0') ffffffff80005688: 45 84 e4 test %r12b,%r12b ffffffff8000568b: 75 c3 jne ffffffff80005650 <_ZN3kcp13cstringstreamlsEPKc+0x20> *this << (char*)str; return *this; } ffffffff8000568d: 48 89 d8 mov %rbx,%rax ffffffff80005690: 5b pop %rbx ffffffff80005691: 5d pop %rbp ffffffff80005692: 41 5c pop %r12 ffffffff80005694: c3 ret ffffffff80005695: 0f 1f 00 nopl (%rax) ffffffff80005698: 48 c7 c7 a2 b9 00 80 mov $0xffffffff8000b9a2,%rdi ffffffff8000569f: e8 fc 18 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff800056a4: 48 c7 c7 18 bd 00 80 mov $0xffffffff8000bd18,%rdi ffffffff800056ab: e8 f0 18 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff800056b0: 48 c7 c7 aa b9 00 80 mov $0xffffffff8000b9aa,%rdi ffffffff800056b7: e8 e4 18 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff800056bc: 48 c7 c7 a2 b9 00 80 mov $0xffffffff8000b9a2,%rdi ffffffff800056c3: e8 d8 18 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> Putchar(chr); ffffffff800056c8: bf 0a 00 00 00 mov $0xa,%edi ffffffff800056cd: e8 9e 18 00 00 call ffffffff80006f70 <_ZN2Kt7PutcharEc> Print(string); ffffffff800056d2: 48 c7 c7 aa b9 00 80 mov $0xffffffff8000b9aa,%rdi ffffffff800056d9: e8 c2 18 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> return *this; ffffffff800056de: eb 9f jmp ffffffff8000567f <_ZN3kcp13cstringstreamlsEPKc+0x4f> ffffffff800056e0 <_ZN3Hal10PrepareGDTEv>: using namespace Kt; GDTPointer gdtPointer{}; BasicGDT kernelGDT{}; void PrepareGDT() { ffffffff800056e0: f3 0f 1e fa endbr64 ffffffff800056e4: 48 83 ec 08 sub $0x8,%rsp base streamBaseType = base::dec; // C++ streaming operator like cout friend KernelOutStream &operator<<(KernelOutStream &t, const char *string) { Print(string); ffffffff800056e8: 48 c7 c7 e6 ba 00 80 mov $0xffffffff8000bae6,%rdi ffffffff800056ef: e8 ac 18 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> return t; } friend KernelOutStream &operator<<(KernelOutStream &t, std::uint64_t number) { Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff800056f4: be 10 00 00 00 mov $0x10,%esi ffffffff800056f9: 48 c7 c7 60 13 0e 80 mov $0xffffffff800e1360,%rdi return t; } friend KernelOutStream &operator<<(KernelOutStream &t, base newBase) { t.streamBaseType = newBase; ffffffff80005700: c7 05 ee 69 00 00 10 movl $0x10,0x69ee(%rip) # ffffffff8000c0f8 ffffffff80005707: 00 00 00 Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff8000570a: e8 a1 12 00 00 call ffffffff800069b0 <_ZN3Lib13u64_2_basestrEmm> ffffffff8000570f: 48 89 c7 mov %rax,%rdi ffffffff80005712: e8 89 18 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> Print(string); ffffffff80005717: 48 c7 c7 c0 b9 00 80 mov $0xffffffff8000b9c0,%rdi ffffffff8000571e: e8 7d 18 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> kout << "HardwareAbstraction: GDT at " << base::hex << (uint64_t)&kernelGDT << "\n"; kernelGDT = { ffffffff80005723: 48 b8 ff ff 00 00 00 movabs $0xa092000000ffff,%rax ffffffff8000572a: 92 a0 00 ffffffff8000572d: 48 ba ff ff 00 00 00 movabs $0xa09a000000ffff,%rdx ffffffff80005734: 9a a0 00 ffffffff80005737: 48 c7 05 1e bc 0d 00 movq $0xffff,0xdbc1e(%rip) # ffffffff800e1360 <_ZN3Hal9kernelGDTE> ffffffff8000573e: ff ff 00 00 ffffffff80005742: 48 89 05 27 bc 0d 00 mov %rax,0xdbc27(%rip) # ffffffff800e1370 <_ZN3Hal9kernelGDTE+0x10> ffffffff80005749: 48 89 05 30 bc 0d 00 mov %rax,0xdbc30(%rip) # ffffffff800e1380 <_ZN3Hal9kernelGDTE+0x20> ffffffff80005750: 48 b8 00 00 00 00 00 movabs $0xfa0000000000,%rax ffffffff80005757: fa 00 00 ffffffff8000575a: 48 89 05 27 bc 0d 00 mov %rax,0xdbc27(%rip) # ffffffff800e1388 <_ZN3Hal9kernelGDTE+0x28> 0x0 } }; gdtPointer = GDTPointer{ ffffffff80005761: b8 2f 00 00 00 mov $0x2f,%eax kernelGDT = { ffffffff80005766: 48 89 15 fb bb 0d 00 mov %rdx,0xdbbfb(%rip) # ffffffff800e1368 <_ZN3Hal9kernelGDTE+0x8> ffffffff8000576d: 48 89 15 04 bc 0d 00 mov %rdx,0xdbc04(%rip) # ffffffff800e1378 <_ZN3Hal9kernelGDTE+0x18> gdtPointer = GDTPointer{ ffffffff80005774: 66 89 05 15 bc 0d 00 mov %ax,0xdbc15(%rip) # ffffffff800e1390 <_ZN3Hal10gdtPointerE> ffffffff8000577b: 48 c7 05 0c bc 0d 00 movq $0xffffffff800e1360,0xdbc0c(%rip) # ffffffff800e1392 <_ZN3Hal10gdtPointerE+0x2> ffffffff80005782: 60 13 0e 80 .Size = sizeof(kernelGDT) - 1, .GDTAddress = (uint64_t)&kernelGDT }; } ffffffff80005786: 48 83 c4 08 add $0x8,%rsp ffffffff8000578a: c3 ret ffffffff8000578b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80005790 <_ZN3Hal13BridgeLoadGDTEv>: // Helpers implemented in gdt.asm extern "C" void LoadGDT(GDTPointer *gdtPointer); extern "C" void ReloadSegments(); void BridgeLoadGDT() { ffffffff80005790: f3 0f 1e fa endbr64 ffffffff80005794: 48 83 ec 08 sub $0x8,%rsp ffffffff80005798: 48 c7 c7 48 bd 00 80 mov $0xffffffff8000bd48,%rdi ffffffff8000579f: e8 fc 17 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> Putchar(chr); ffffffff800057a4: bf 0a 00 00 00 mov $0xa,%edi ffffffff800057a9: e8 c2 17 00 00 call ffffffff80006f70 <_ZN2Kt7PutcharEc> // Puts the GDT pointer structure into the GDTR kout << "HardwareAbstraction: Setting GDTR" << Kt::newline; LoadGDT(&gdtPointer); ffffffff800057ae: 48 c7 c7 90 13 0e 80 mov $0xffffffff800e1390,%rdi ffffffff800057b5: e8 36 18 00 00 call ffffffff80006ff0 Print(string); ffffffff800057ba: 48 c7 c7 70 bd 00 80 mov $0xffffffff8000bd70,%rdi ffffffff800057c1: e8 da 17 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> Putchar(chr); ffffffff800057c6: bf 0a 00 00 00 mov $0xa,%edi ffffffff800057cb: e8 a0 17 00 00 call ffffffff80006f70 <_ZN2Kt7PutcharEc> kout << "HardwareAbstraction: Reloading segments" << Kt::newline; ReloadSegments(); } ffffffff800057d0: 48 83 c4 08 add $0x8,%rsp ReloadSegments(); ffffffff800057d4: e9 1b 18 00 00 jmp ffffffff80006ff4 ffffffff800057d9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) ffffffff800057e0 <_ZN3Hal16ExceptionHandlerILm0EEEvPN6System10PanicFrameE>: "Security Exception", "Reserved" }; template __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff800057e0: f3 0f 1e fa endbr64 ffffffff800057e4: 41 53 push %r11 ffffffff800057e6: 41 52 push %r10 ffffffff800057e8: 41 51 push %r9 ffffffff800057ea: 41 50 push %r8 ffffffff800057ec: 57 push %rdi // kcp::cstringstream stream; // stream << "Caught " << base::hex << "0x" << i << " " << ExceptionStrings[i] << " in kernel"; frame->InterruptVector = i; Panic(ExceptionStrings[i], frame); ffffffff800057ed: 48 8b 3d 0c 68 00 00 mov 0x680c(%rip),%rdi # ffffffff8000c000 <_ZN3Hal16ExceptionStringsE> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff800057f4: 56 push %rsi ffffffff800057f5: 51 push %rcx ffffffff800057f6: 52 push %rdx ffffffff800057f7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff800057f8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff800057fd: c6 44 24 70 00 movb $0x0,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005802: fc cld ffffffff80005803: e8 a8 f6 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005808: 58 pop %rax ffffffff80005809: 5a pop %rdx ffffffff8000580a: 59 pop %rcx ffffffff8000580b: 5e pop %rsi ffffffff8000580c: 5f pop %rdi ffffffff8000580d: 41 58 pop %r8 ffffffff8000580f: 41 59 pop %r9 ffffffff80005811: 41 5a pop %r10 ffffffff80005813: 41 5b pop %r11 ffffffff80005815: 48 cf iretq ffffffff80005817: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff8000581e: 00 00 ffffffff80005820 <_ZN3Hal16ExceptionHandlerILm1EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005820: f3 0f 1e fa endbr64 ffffffff80005824: 41 53 push %r11 ffffffff80005826: 41 52 push %r10 ffffffff80005828: 41 51 push %r9 ffffffff8000582a: 41 50 push %r8 ffffffff8000582c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff8000582d: 48 8b 3d d4 67 00 00 mov 0x67d4(%rip),%rdi # ffffffff8000c008 <_ZN3Hal16ExceptionStringsE+0x8> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005834: 56 push %rsi ffffffff80005835: 51 push %rcx ffffffff80005836: 52 push %rdx ffffffff80005837: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005838: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff8000583d: c6 44 24 70 01 movb $0x1,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005842: fc cld ffffffff80005843: e8 68 f6 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005848: 58 pop %rax ffffffff80005849: 5a pop %rdx ffffffff8000584a: 59 pop %rcx ffffffff8000584b: 5e pop %rsi ffffffff8000584c: 5f pop %rdi ffffffff8000584d: 41 58 pop %r8 ffffffff8000584f: 41 59 pop %r9 ffffffff80005851: 41 5a pop %r10 ffffffff80005853: 41 5b pop %r11 ffffffff80005855: 48 cf iretq ffffffff80005857: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff8000585e: 00 00 ffffffff80005860 <_ZN3Hal16ExceptionHandlerILm2EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005860: f3 0f 1e fa endbr64 ffffffff80005864: 41 53 push %r11 ffffffff80005866: 41 52 push %r10 ffffffff80005868: 41 51 push %r9 ffffffff8000586a: 41 50 push %r8 ffffffff8000586c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff8000586d: 48 8b 3d 9c 67 00 00 mov 0x679c(%rip),%rdi # ffffffff8000c010 <_ZN3Hal16ExceptionStringsE+0x10> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005874: 56 push %rsi ffffffff80005875: 51 push %rcx ffffffff80005876: 52 push %rdx ffffffff80005877: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005878: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff8000587d: c6 44 24 70 02 movb $0x2,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005882: fc cld ffffffff80005883: e8 28 f6 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005888: 58 pop %rax ffffffff80005889: 5a pop %rdx ffffffff8000588a: 59 pop %rcx ffffffff8000588b: 5e pop %rsi ffffffff8000588c: 5f pop %rdi ffffffff8000588d: 41 58 pop %r8 ffffffff8000588f: 41 59 pop %r9 ffffffff80005891: 41 5a pop %r10 ffffffff80005893: 41 5b pop %r11 ffffffff80005895: 48 cf iretq ffffffff80005897: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff8000589e: 00 00 ffffffff800058a0 <_ZN3Hal16ExceptionHandlerILm3EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff800058a0: f3 0f 1e fa endbr64 ffffffff800058a4: 41 53 push %r11 ffffffff800058a6: 41 52 push %r10 ffffffff800058a8: 41 51 push %r9 ffffffff800058aa: 41 50 push %r8 ffffffff800058ac: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff800058ad: 48 8b 3d 64 67 00 00 mov 0x6764(%rip),%rdi # ffffffff8000c018 <_ZN3Hal16ExceptionStringsE+0x18> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff800058b4: 56 push %rsi ffffffff800058b5: 51 push %rcx ffffffff800058b6: 52 push %rdx ffffffff800058b7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff800058b8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff800058bd: c6 44 24 70 03 movb $0x3,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff800058c2: fc cld ffffffff800058c3: e8 e8 f5 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff800058c8: 58 pop %rax ffffffff800058c9: 5a pop %rdx ffffffff800058ca: 59 pop %rcx ffffffff800058cb: 5e pop %rsi ffffffff800058cc: 5f pop %rdi ffffffff800058cd: 41 58 pop %r8 ffffffff800058cf: 41 59 pop %r9 ffffffff800058d1: 41 5a pop %r10 ffffffff800058d3: 41 5b pop %r11 ffffffff800058d5: 48 cf iretq ffffffff800058d7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff800058de: 00 00 ffffffff800058e0 <_ZN3Hal16ExceptionHandlerILm4EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff800058e0: f3 0f 1e fa endbr64 ffffffff800058e4: 41 53 push %r11 ffffffff800058e6: 41 52 push %r10 ffffffff800058e8: 41 51 push %r9 ffffffff800058ea: 41 50 push %r8 ffffffff800058ec: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff800058ed: 48 8b 3d 2c 67 00 00 mov 0x672c(%rip),%rdi # ffffffff8000c020 <_ZN3Hal16ExceptionStringsE+0x20> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff800058f4: 56 push %rsi ffffffff800058f5: 51 push %rcx ffffffff800058f6: 52 push %rdx ffffffff800058f7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff800058f8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff800058fd: c6 44 24 70 04 movb $0x4,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005902: fc cld ffffffff80005903: e8 a8 f5 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005908: 58 pop %rax ffffffff80005909: 5a pop %rdx ffffffff8000590a: 59 pop %rcx ffffffff8000590b: 5e pop %rsi ffffffff8000590c: 5f pop %rdi ffffffff8000590d: 41 58 pop %r8 ffffffff8000590f: 41 59 pop %r9 ffffffff80005911: 41 5a pop %r10 ffffffff80005913: 41 5b pop %r11 ffffffff80005915: 48 cf iretq ffffffff80005917: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff8000591e: 00 00 ffffffff80005920 <_ZN3Hal16ExceptionHandlerILm5EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005920: f3 0f 1e fa endbr64 ffffffff80005924: 41 53 push %r11 ffffffff80005926: 41 52 push %r10 ffffffff80005928: 41 51 push %r9 ffffffff8000592a: 41 50 push %r8 ffffffff8000592c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff8000592d: 48 8b 3d f4 66 00 00 mov 0x66f4(%rip),%rdi # ffffffff8000c028 <_ZN3Hal16ExceptionStringsE+0x28> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005934: 56 push %rsi ffffffff80005935: 51 push %rcx ffffffff80005936: 52 push %rdx ffffffff80005937: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005938: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff8000593d: c6 44 24 70 05 movb $0x5,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005942: fc cld ffffffff80005943: e8 68 f5 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005948: 58 pop %rax ffffffff80005949: 5a pop %rdx ffffffff8000594a: 59 pop %rcx ffffffff8000594b: 5e pop %rsi ffffffff8000594c: 5f pop %rdi ffffffff8000594d: 41 58 pop %r8 ffffffff8000594f: 41 59 pop %r9 ffffffff80005951: 41 5a pop %r10 ffffffff80005953: 41 5b pop %r11 ffffffff80005955: 48 cf iretq ffffffff80005957: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff8000595e: 00 00 ffffffff80005960 <_ZN3Hal16ExceptionHandlerILm6EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005960: f3 0f 1e fa endbr64 ffffffff80005964: 41 53 push %r11 ffffffff80005966: 41 52 push %r10 ffffffff80005968: 41 51 push %r9 ffffffff8000596a: 41 50 push %r8 ffffffff8000596c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff8000596d: 48 8b 3d bc 66 00 00 mov 0x66bc(%rip),%rdi # ffffffff8000c030 <_ZN3Hal16ExceptionStringsE+0x30> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005974: 56 push %rsi ffffffff80005975: 51 push %rcx ffffffff80005976: 52 push %rdx ffffffff80005977: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005978: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff8000597d: c6 44 24 70 06 movb $0x6,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005982: fc cld ffffffff80005983: e8 28 f5 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005988: 58 pop %rax ffffffff80005989: 5a pop %rdx ffffffff8000598a: 59 pop %rcx ffffffff8000598b: 5e pop %rsi ffffffff8000598c: 5f pop %rdi ffffffff8000598d: 41 58 pop %r8 ffffffff8000598f: 41 59 pop %r9 ffffffff80005991: 41 5a pop %r10 ffffffff80005993: 41 5b pop %r11 ffffffff80005995: 48 cf iretq ffffffff80005997: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff8000599e: 00 00 ffffffff800059a0 <_ZN3Hal16ExceptionHandlerILm7EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff800059a0: f3 0f 1e fa endbr64 ffffffff800059a4: 41 53 push %r11 ffffffff800059a6: 41 52 push %r10 ffffffff800059a8: 41 51 push %r9 ffffffff800059aa: 41 50 push %r8 ffffffff800059ac: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff800059ad: 48 8b 3d 84 66 00 00 mov 0x6684(%rip),%rdi # ffffffff8000c038 <_ZN3Hal16ExceptionStringsE+0x38> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff800059b4: 56 push %rsi ffffffff800059b5: 51 push %rcx ffffffff800059b6: 52 push %rdx ffffffff800059b7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff800059b8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff800059bd: c6 44 24 70 07 movb $0x7,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff800059c2: fc cld ffffffff800059c3: e8 e8 f4 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff800059c8: 58 pop %rax ffffffff800059c9: 5a pop %rdx ffffffff800059ca: 59 pop %rcx ffffffff800059cb: 5e pop %rsi ffffffff800059cc: 5f pop %rdi ffffffff800059cd: 41 58 pop %r8 ffffffff800059cf: 41 59 pop %r9 ffffffff800059d1: 41 5a pop %r10 ffffffff800059d3: 41 5b pop %r11 ffffffff800059d5: 48 cf iretq ffffffff800059d7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff800059de: 00 00 ffffffff800059e0 <_ZN3Hal16ExceptionHandlerILm8EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff800059e0: f3 0f 1e fa endbr64 ffffffff800059e4: 41 53 push %r11 ffffffff800059e6: 41 52 push %r10 ffffffff800059e8: 41 51 push %r9 ffffffff800059ea: 41 50 push %r8 ffffffff800059ec: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff800059ed: 48 8b 3d 4c 66 00 00 mov 0x664c(%rip),%rdi # ffffffff8000c040 <_ZN3Hal16ExceptionStringsE+0x40> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff800059f4: 56 push %rsi ffffffff800059f5: 51 push %rcx ffffffff800059f6: 52 push %rdx ffffffff800059f7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff800059f8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff800059fd: c6 44 24 70 08 movb $0x8,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005a02: fc cld ffffffff80005a03: e8 a8 f4 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005a08: 58 pop %rax ffffffff80005a09: 5a pop %rdx ffffffff80005a0a: 59 pop %rcx ffffffff80005a0b: 5e pop %rsi ffffffff80005a0c: 5f pop %rdi ffffffff80005a0d: 41 58 pop %r8 ffffffff80005a0f: 41 59 pop %r9 ffffffff80005a11: 41 5a pop %r10 ffffffff80005a13: 41 5b pop %r11 ffffffff80005a15: 48 cf iretq ffffffff80005a17: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005a1e: 00 00 ffffffff80005a20 <_ZN3Hal16ExceptionHandlerILm9EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005a20: f3 0f 1e fa endbr64 ffffffff80005a24: 41 53 push %r11 ffffffff80005a26: 41 52 push %r10 ffffffff80005a28: 41 51 push %r9 ffffffff80005a2a: 41 50 push %r8 ffffffff80005a2c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005a2d: 48 8b 3d 14 66 00 00 mov 0x6614(%rip),%rdi # ffffffff8000c048 <_ZN3Hal16ExceptionStringsE+0x48> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005a34: 56 push %rsi ffffffff80005a35: 51 push %rcx ffffffff80005a36: 52 push %rdx ffffffff80005a37: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005a38: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005a3d: c6 44 24 70 09 movb $0x9,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005a42: fc cld ffffffff80005a43: e8 68 f4 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005a48: 58 pop %rax ffffffff80005a49: 5a pop %rdx ffffffff80005a4a: 59 pop %rcx ffffffff80005a4b: 5e pop %rsi ffffffff80005a4c: 5f pop %rdi ffffffff80005a4d: 41 58 pop %r8 ffffffff80005a4f: 41 59 pop %r9 ffffffff80005a51: 41 5a pop %r10 ffffffff80005a53: 41 5b pop %r11 ffffffff80005a55: 48 cf iretq ffffffff80005a57: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005a5e: 00 00 ffffffff80005a60 <_ZN3Hal16ExceptionHandlerILm10EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005a60: f3 0f 1e fa endbr64 ffffffff80005a64: 41 53 push %r11 ffffffff80005a66: 41 52 push %r10 ffffffff80005a68: 41 51 push %r9 ffffffff80005a6a: 41 50 push %r8 ffffffff80005a6c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005a6d: 48 8b 3d dc 65 00 00 mov 0x65dc(%rip),%rdi # ffffffff8000c050 <_ZN3Hal16ExceptionStringsE+0x50> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005a74: 56 push %rsi ffffffff80005a75: 51 push %rcx ffffffff80005a76: 52 push %rdx ffffffff80005a77: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005a78: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005a7d: c6 44 24 70 0a movb $0xa,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005a82: fc cld ffffffff80005a83: e8 28 f4 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005a88: 58 pop %rax ffffffff80005a89: 5a pop %rdx ffffffff80005a8a: 59 pop %rcx ffffffff80005a8b: 5e pop %rsi ffffffff80005a8c: 5f pop %rdi ffffffff80005a8d: 41 58 pop %r8 ffffffff80005a8f: 41 59 pop %r9 ffffffff80005a91: 41 5a pop %r10 ffffffff80005a93: 41 5b pop %r11 ffffffff80005a95: 48 cf iretq ffffffff80005a97: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005a9e: 00 00 ffffffff80005aa0 <_ZN3Hal16ExceptionHandlerILm11EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005aa0: f3 0f 1e fa endbr64 ffffffff80005aa4: 41 53 push %r11 ffffffff80005aa6: 41 52 push %r10 ffffffff80005aa8: 41 51 push %r9 ffffffff80005aaa: 41 50 push %r8 ffffffff80005aac: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005aad: 48 8b 3d a4 65 00 00 mov 0x65a4(%rip),%rdi # ffffffff8000c058 <_ZN3Hal16ExceptionStringsE+0x58> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005ab4: 56 push %rsi ffffffff80005ab5: 51 push %rcx ffffffff80005ab6: 52 push %rdx ffffffff80005ab7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005ab8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005abd: c6 44 24 70 0b movb $0xb,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005ac2: fc cld ffffffff80005ac3: e8 e8 f3 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005ac8: 58 pop %rax ffffffff80005ac9: 5a pop %rdx ffffffff80005aca: 59 pop %rcx ffffffff80005acb: 5e pop %rsi ffffffff80005acc: 5f pop %rdi ffffffff80005acd: 41 58 pop %r8 ffffffff80005acf: 41 59 pop %r9 ffffffff80005ad1: 41 5a pop %r10 ffffffff80005ad3: 41 5b pop %r11 ffffffff80005ad5: 48 cf iretq ffffffff80005ad7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005ade: 00 00 ffffffff80005ae0 <_ZN3Hal16ExceptionHandlerILm12EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005ae0: f3 0f 1e fa endbr64 ffffffff80005ae4: 41 53 push %r11 ffffffff80005ae6: 41 52 push %r10 ffffffff80005ae8: 41 51 push %r9 ffffffff80005aea: 41 50 push %r8 ffffffff80005aec: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005aed: 48 8b 3d 6c 65 00 00 mov 0x656c(%rip),%rdi # ffffffff8000c060 <_ZN3Hal16ExceptionStringsE+0x60> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005af4: 56 push %rsi ffffffff80005af5: 51 push %rcx ffffffff80005af6: 52 push %rdx ffffffff80005af7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005af8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005afd: c6 44 24 70 0c movb $0xc,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005b02: fc cld ffffffff80005b03: e8 a8 f3 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005b08: 58 pop %rax ffffffff80005b09: 5a pop %rdx ffffffff80005b0a: 59 pop %rcx ffffffff80005b0b: 5e pop %rsi ffffffff80005b0c: 5f pop %rdi ffffffff80005b0d: 41 58 pop %r8 ffffffff80005b0f: 41 59 pop %r9 ffffffff80005b11: 41 5a pop %r10 ffffffff80005b13: 41 5b pop %r11 ffffffff80005b15: 48 cf iretq ffffffff80005b17: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005b1e: 00 00 ffffffff80005b20 <_ZN3Hal16ExceptionHandlerILm13EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005b20: f3 0f 1e fa endbr64 ffffffff80005b24: 41 53 push %r11 ffffffff80005b26: 41 52 push %r10 ffffffff80005b28: 41 51 push %r9 ffffffff80005b2a: 41 50 push %r8 ffffffff80005b2c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005b2d: 48 8b 3d 34 65 00 00 mov 0x6534(%rip),%rdi # ffffffff8000c068 <_ZN3Hal16ExceptionStringsE+0x68> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005b34: 56 push %rsi ffffffff80005b35: 51 push %rcx ffffffff80005b36: 52 push %rdx ffffffff80005b37: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005b38: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005b3d: c6 44 24 70 0d movb $0xd,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005b42: fc cld ffffffff80005b43: e8 68 f3 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005b48: 58 pop %rax ffffffff80005b49: 5a pop %rdx ffffffff80005b4a: 59 pop %rcx ffffffff80005b4b: 5e pop %rsi ffffffff80005b4c: 5f pop %rdi ffffffff80005b4d: 41 58 pop %r8 ffffffff80005b4f: 41 59 pop %r9 ffffffff80005b51: 41 5a pop %r10 ffffffff80005b53: 41 5b pop %r11 ffffffff80005b55: 48 cf iretq ffffffff80005b57: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005b5e: 00 00 ffffffff80005b60 <_ZN3Hal16ExceptionHandlerILm14EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005b60: f3 0f 1e fa endbr64 ffffffff80005b64: 41 53 push %r11 ffffffff80005b66: 41 52 push %r10 ffffffff80005b68: 41 51 push %r9 ffffffff80005b6a: 41 50 push %r8 ffffffff80005b6c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005b6d: 48 8b 3d fc 64 00 00 mov 0x64fc(%rip),%rdi # ffffffff8000c070 <_ZN3Hal16ExceptionStringsE+0x70> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005b74: 56 push %rsi ffffffff80005b75: 51 push %rcx ffffffff80005b76: 52 push %rdx ffffffff80005b77: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005b78: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005b7d: c6 44 24 70 0e movb $0xe,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005b82: fc cld ffffffff80005b83: e8 28 f3 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005b88: 58 pop %rax ffffffff80005b89: 5a pop %rdx ffffffff80005b8a: 59 pop %rcx ffffffff80005b8b: 5e pop %rsi ffffffff80005b8c: 5f pop %rdi ffffffff80005b8d: 41 58 pop %r8 ffffffff80005b8f: 41 59 pop %r9 ffffffff80005b91: 41 5a pop %r10 ffffffff80005b93: 41 5b pop %r11 ffffffff80005b95: 48 cf iretq ffffffff80005b97: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005b9e: 00 00 ffffffff80005ba0 <_ZN3Hal16ExceptionHandlerILm15EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005ba0: f3 0f 1e fa endbr64 ffffffff80005ba4: 41 53 push %r11 ffffffff80005ba6: 41 52 push %r10 ffffffff80005ba8: 41 51 push %r9 ffffffff80005baa: 41 50 push %r8 ffffffff80005bac: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005bad: 48 8b 3d c4 64 00 00 mov 0x64c4(%rip),%rdi # ffffffff8000c078 <_ZN3Hal16ExceptionStringsE+0x78> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005bb4: 56 push %rsi ffffffff80005bb5: 51 push %rcx ffffffff80005bb6: 52 push %rdx ffffffff80005bb7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005bb8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005bbd: c6 44 24 70 0f movb $0xf,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005bc2: fc cld ffffffff80005bc3: e8 e8 f2 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005bc8: 58 pop %rax ffffffff80005bc9: 5a pop %rdx ffffffff80005bca: 59 pop %rcx ffffffff80005bcb: 5e pop %rsi ffffffff80005bcc: 5f pop %rdi ffffffff80005bcd: 41 58 pop %r8 ffffffff80005bcf: 41 59 pop %r9 ffffffff80005bd1: 41 5a pop %r10 ffffffff80005bd3: 41 5b pop %r11 ffffffff80005bd5: 48 cf iretq ffffffff80005bd7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005bde: 00 00 ffffffff80005be0 <_ZN3Hal16ExceptionHandlerILm16EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005be0: f3 0f 1e fa endbr64 ffffffff80005be4: 41 53 push %r11 ffffffff80005be6: 41 52 push %r10 ffffffff80005be8: 41 51 push %r9 ffffffff80005bea: 41 50 push %r8 ffffffff80005bec: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005bed: 48 8b 3d 8c 64 00 00 mov 0x648c(%rip),%rdi # ffffffff8000c080 <_ZN3Hal16ExceptionStringsE+0x80> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005bf4: 56 push %rsi ffffffff80005bf5: 51 push %rcx ffffffff80005bf6: 52 push %rdx ffffffff80005bf7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005bf8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005bfd: c6 44 24 70 10 movb $0x10,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005c02: fc cld ffffffff80005c03: e8 a8 f2 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005c08: 58 pop %rax ffffffff80005c09: 5a pop %rdx ffffffff80005c0a: 59 pop %rcx ffffffff80005c0b: 5e pop %rsi ffffffff80005c0c: 5f pop %rdi ffffffff80005c0d: 41 58 pop %r8 ffffffff80005c0f: 41 59 pop %r9 ffffffff80005c11: 41 5a pop %r10 ffffffff80005c13: 41 5b pop %r11 ffffffff80005c15: 48 cf iretq ffffffff80005c17: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005c1e: 00 00 ffffffff80005c20 <_ZN3Hal16ExceptionHandlerILm17EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005c20: f3 0f 1e fa endbr64 ffffffff80005c24: 41 53 push %r11 ffffffff80005c26: 41 52 push %r10 ffffffff80005c28: 41 51 push %r9 ffffffff80005c2a: 41 50 push %r8 ffffffff80005c2c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005c2d: 48 8b 3d 54 64 00 00 mov 0x6454(%rip),%rdi # ffffffff8000c088 <_ZN3Hal16ExceptionStringsE+0x88> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005c34: 56 push %rsi ffffffff80005c35: 51 push %rcx ffffffff80005c36: 52 push %rdx ffffffff80005c37: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005c38: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005c3d: c6 44 24 70 11 movb $0x11,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005c42: fc cld ffffffff80005c43: e8 68 f2 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005c48: 58 pop %rax ffffffff80005c49: 5a pop %rdx ffffffff80005c4a: 59 pop %rcx ffffffff80005c4b: 5e pop %rsi ffffffff80005c4c: 5f pop %rdi ffffffff80005c4d: 41 58 pop %r8 ffffffff80005c4f: 41 59 pop %r9 ffffffff80005c51: 41 5a pop %r10 ffffffff80005c53: 41 5b pop %r11 ffffffff80005c55: 48 cf iretq ffffffff80005c57: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005c5e: 00 00 ffffffff80005c60 <_ZN3Hal16ExceptionHandlerILm18EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005c60: f3 0f 1e fa endbr64 ffffffff80005c64: 41 53 push %r11 ffffffff80005c66: 41 52 push %r10 ffffffff80005c68: 41 51 push %r9 ffffffff80005c6a: 41 50 push %r8 ffffffff80005c6c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005c6d: 48 8b 3d 1c 64 00 00 mov 0x641c(%rip),%rdi # ffffffff8000c090 <_ZN3Hal16ExceptionStringsE+0x90> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005c74: 56 push %rsi ffffffff80005c75: 51 push %rcx ffffffff80005c76: 52 push %rdx ffffffff80005c77: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005c78: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005c7d: c6 44 24 70 12 movb $0x12,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005c82: fc cld ffffffff80005c83: e8 28 f2 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005c88: 58 pop %rax ffffffff80005c89: 5a pop %rdx ffffffff80005c8a: 59 pop %rcx ffffffff80005c8b: 5e pop %rsi ffffffff80005c8c: 5f pop %rdi ffffffff80005c8d: 41 58 pop %r8 ffffffff80005c8f: 41 59 pop %r9 ffffffff80005c91: 41 5a pop %r10 ffffffff80005c93: 41 5b pop %r11 ffffffff80005c95: 48 cf iretq ffffffff80005c97: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005c9e: 00 00 ffffffff80005ca0 <_ZN3Hal16ExceptionHandlerILm19EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005ca0: f3 0f 1e fa endbr64 ffffffff80005ca4: 41 53 push %r11 ffffffff80005ca6: 41 52 push %r10 ffffffff80005ca8: 41 51 push %r9 ffffffff80005caa: 41 50 push %r8 ffffffff80005cac: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005cad: 48 8b 3d e4 63 00 00 mov 0x63e4(%rip),%rdi # ffffffff8000c098 <_ZN3Hal16ExceptionStringsE+0x98> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005cb4: 56 push %rsi ffffffff80005cb5: 51 push %rcx ffffffff80005cb6: 52 push %rdx ffffffff80005cb7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005cb8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005cbd: c6 44 24 70 13 movb $0x13,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005cc2: fc cld ffffffff80005cc3: e8 e8 f1 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005cc8: 58 pop %rax ffffffff80005cc9: 5a pop %rdx ffffffff80005cca: 59 pop %rcx ffffffff80005ccb: 5e pop %rsi ffffffff80005ccc: 5f pop %rdi ffffffff80005ccd: 41 58 pop %r8 ffffffff80005ccf: 41 59 pop %r9 ffffffff80005cd1: 41 5a pop %r10 ffffffff80005cd3: 41 5b pop %r11 ffffffff80005cd5: 48 cf iretq ffffffff80005cd7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005cde: 00 00 ffffffff80005ce0 <_ZN3Hal16ExceptionHandlerILm20EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005ce0: f3 0f 1e fa endbr64 ffffffff80005ce4: 41 53 push %r11 ffffffff80005ce6: 41 52 push %r10 ffffffff80005ce8: 41 51 push %r9 ffffffff80005cea: 41 50 push %r8 ffffffff80005cec: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005ced: 48 8b 3d ac 63 00 00 mov 0x63ac(%rip),%rdi # ffffffff8000c0a0 <_ZN3Hal16ExceptionStringsE+0xa0> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005cf4: 56 push %rsi ffffffff80005cf5: 51 push %rcx ffffffff80005cf6: 52 push %rdx ffffffff80005cf7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005cf8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005cfd: c6 44 24 70 14 movb $0x14,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005d02: fc cld ffffffff80005d03: e8 a8 f1 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005d08: 58 pop %rax ffffffff80005d09: 5a pop %rdx ffffffff80005d0a: 59 pop %rcx ffffffff80005d0b: 5e pop %rsi ffffffff80005d0c: 5f pop %rdi ffffffff80005d0d: 41 58 pop %r8 ffffffff80005d0f: 41 59 pop %r9 ffffffff80005d11: 41 5a pop %r10 ffffffff80005d13: 41 5b pop %r11 ffffffff80005d15: 48 cf iretq ffffffff80005d17: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005d1e: 00 00 ffffffff80005d20 <_ZN3Hal16ExceptionHandlerILm21EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005d20: f3 0f 1e fa endbr64 ffffffff80005d24: 41 53 push %r11 ffffffff80005d26: 41 52 push %r10 ffffffff80005d28: 41 51 push %r9 ffffffff80005d2a: 41 50 push %r8 ffffffff80005d2c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005d2d: 48 8b 3d 74 63 00 00 mov 0x6374(%rip),%rdi # ffffffff8000c0a8 <_ZN3Hal16ExceptionStringsE+0xa8> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005d34: 56 push %rsi ffffffff80005d35: 51 push %rcx ffffffff80005d36: 52 push %rdx ffffffff80005d37: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005d38: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005d3d: c6 44 24 70 15 movb $0x15,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005d42: fc cld ffffffff80005d43: e8 68 f1 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005d48: 58 pop %rax ffffffff80005d49: 5a pop %rdx ffffffff80005d4a: 59 pop %rcx ffffffff80005d4b: 5e pop %rsi ffffffff80005d4c: 5f pop %rdi ffffffff80005d4d: 41 58 pop %r8 ffffffff80005d4f: 41 59 pop %r9 ffffffff80005d51: 41 5a pop %r10 ffffffff80005d53: 41 5b pop %r11 ffffffff80005d55: 48 cf iretq ffffffff80005d57: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005d5e: 00 00 ffffffff80005d60 <_ZN3Hal16ExceptionHandlerILm22EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005d60: f3 0f 1e fa endbr64 ffffffff80005d64: 41 53 push %r11 ffffffff80005d66: 41 52 push %r10 ffffffff80005d68: 41 51 push %r9 ffffffff80005d6a: 41 50 push %r8 ffffffff80005d6c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005d6d: 48 8b 3d 3c 63 00 00 mov 0x633c(%rip),%rdi # ffffffff8000c0b0 <_ZN3Hal16ExceptionStringsE+0xb0> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005d74: 56 push %rsi ffffffff80005d75: 51 push %rcx ffffffff80005d76: 52 push %rdx ffffffff80005d77: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005d78: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005d7d: c6 44 24 70 16 movb $0x16,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005d82: fc cld ffffffff80005d83: e8 28 f1 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005d88: 58 pop %rax ffffffff80005d89: 5a pop %rdx ffffffff80005d8a: 59 pop %rcx ffffffff80005d8b: 5e pop %rsi ffffffff80005d8c: 5f pop %rdi ffffffff80005d8d: 41 58 pop %r8 ffffffff80005d8f: 41 59 pop %r9 ffffffff80005d91: 41 5a pop %r10 ffffffff80005d93: 41 5b pop %r11 ffffffff80005d95: 48 cf iretq ffffffff80005d97: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005d9e: 00 00 ffffffff80005da0 <_ZN3Hal16ExceptionHandlerILm23EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005da0: f3 0f 1e fa endbr64 ffffffff80005da4: 41 53 push %r11 ffffffff80005da6: 41 52 push %r10 ffffffff80005da8: 41 51 push %r9 ffffffff80005daa: 41 50 push %r8 ffffffff80005dac: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005dad: 48 8b 3d 04 63 00 00 mov 0x6304(%rip),%rdi # ffffffff8000c0b8 <_ZN3Hal16ExceptionStringsE+0xb8> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005db4: 56 push %rsi ffffffff80005db5: 51 push %rcx ffffffff80005db6: 52 push %rdx ffffffff80005db7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005db8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005dbd: c6 44 24 70 17 movb $0x17,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005dc2: fc cld ffffffff80005dc3: e8 e8 f0 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005dc8: 58 pop %rax ffffffff80005dc9: 5a pop %rdx ffffffff80005dca: 59 pop %rcx ffffffff80005dcb: 5e pop %rsi ffffffff80005dcc: 5f pop %rdi ffffffff80005dcd: 41 58 pop %r8 ffffffff80005dcf: 41 59 pop %r9 ffffffff80005dd1: 41 5a pop %r10 ffffffff80005dd3: 41 5b pop %r11 ffffffff80005dd5: 48 cf iretq ffffffff80005dd7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005dde: 00 00 ffffffff80005de0 <_ZN3Hal16ExceptionHandlerILm24EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005de0: f3 0f 1e fa endbr64 ffffffff80005de4: 41 53 push %r11 ffffffff80005de6: 41 52 push %r10 ffffffff80005de8: 41 51 push %r9 ffffffff80005dea: 41 50 push %r8 ffffffff80005dec: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005ded: 48 8b 3d cc 62 00 00 mov 0x62cc(%rip),%rdi # ffffffff8000c0c0 <_ZN3Hal16ExceptionStringsE+0xc0> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005df4: 56 push %rsi ffffffff80005df5: 51 push %rcx ffffffff80005df6: 52 push %rdx ffffffff80005df7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005df8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005dfd: c6 44 24 70 18 movb $0x18,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005e02: fc cld ffffffff80005e03: e8 a8 f0 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005e08: 58 pop %rax ffffffff80005e09: 5a pop %rdx ffffffff80005e0a: 59 pop %rcx ffffffff80005e0b: 5e pop %rsi ffffffff80005e0c: 5f pop %rdi ffffffff80005e0d: 41 58 pop %r8 ffffffff80005e0f: 41 59 pop %r9 ffffffff80005e11: 41 5a pop %r10 ffffffff80005e13: 41 5b pop %r11 ffffffff80005e15: 48 cf iretq ffffffff80005e17: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005e1e: 00 00 ffffffff80005e20 <_ZN3Hal16ExceptionHandlerILm25EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005e20: f3 0f 1e fa endbr64 ffffffff80005e24: 41 53 push %r11 ffffffff80005e26: 41 52 push %r10 ffffffff80005e28: 41 51 push %r9 ffffffff80005e2a: 41 50 push %r8 ffffffff80005e2c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005e2d: 48 8b 3d 94 62 00 00 mov 0x6294(%rip),%rdi # ffffffff8000c0c8 <_ZN3Hal16ExceptionStringsE+0xc8> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005e34: 56 push %rsi ffffffff80005e35: 51 push %rcx ffffffff80005e36: 52 push %rdx ffffffff80005e37: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005e38: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005e3d: c6 44 24 70 19 movb $0x19,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005e42: fc cld ffffffff80005e43: e8 68 f0 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005e48: 58 pop %rax ffffffff80005e49: 5a pop %rdx ffffffff80005e4a: 59 pop %rcx ffffffff80005e4b: 5e pop %rsi ffffffff80005e4c: 5f pop %rdi ffffffff80005e4d: 41 58 pop %r8 ffffffff80005e4f: 41 59 pop %r9 ffffffff80005e51: 41 5a pop %r10 ffffffff80005e53: 41 5b pop %r11 ffffffff80005e55: 48 cf iretq ffffffff80005e57: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005e5e: 00 00 ffffffff80005e60 <_ZN3Hal16ExceptionHandlerILm26EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005e60: f3 0f 1e fa endbr64 ffffffff80005e64: 41 53 push %r11 ffffffff80005e66: 41 52 push %r10 ffffffff80005e68: 41 51 push %r9 ffffffff80005e6a: 41 50 push %r8 ffffffff80005e6c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005e6d: 48 8b 3d 5c 62 00 00 mov 0x625c(%rip),%rdi # ffffffff8000c0d0 <_ZN3Hal16ExceptionStringsE+0xd0> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005e74: 56 push %rsi ffffffff80005e75: 51 push %rcx ffffffff80005e76: 52 push %rdx ffffffff80005e77: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005e78: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005e7d: c6 44 24 70 1a movb $0x1a,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005e82: fc cld ffffffff80005e83: e8 28 f0 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005e88: 58 pop %rax ffffffff80005e89: 5a pop %rdx ffffffff80005e8a: 59 pop %rcx ffffffff80005e8b: 5e pop %rsi ffffffff80005e8c: 5f pop %rdi ffffffff80005e8d: 41 58 pop %r8 ffffffff80005e8f: 41 59 pop %r9 ffffffff80005e91: 41 5a pop %r10 ffffffff80005e93: 41 5b pop %r11 ffffffff80005e95: 48 cf iretq ffffffff80005e97: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005e9e: 00 00 ffffffff80005ea0 <_ZN3Hal16ExceptionHandlerILm27EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005ea0: f3 0f 1e fa endbr64 ffffffff80005ea4: 41 53 push %r11 ffffffff80005ea6: 41 52 push %r10 ffffffff80005ea8: 41 51 push %r9 ffffffff80005eaa: 41 50 push %r8 ffffffff80005eac: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005ead: 48 8b 3d 24 62 00 00 mov 0x6224(%rip),%rdi # ffffffff8000c0d8 <_ZN3Hal16ExceptionStringsE+0xd8> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005eb4: 56 push %rsi ffffffff80005eb5: 51 push %rcx ffffffff80005eb6: 52 push %rdx ffffffff80005eb7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005eb8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005ebd: c6 44 24 70 1b movb $0x1b,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005ec2: fc cld ffffffff80005ec3: e8 e8 ef ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005ec8: 58 pop %rax ffffffff80005ec9: 5a pop %rdx ffffffff80005eca: 59 pop %rcx ffffffff80005ecb: 5e pop %rsi ffffffff80005ecc: 5f pop %rdi ffffffff80005ecd: 41 58 pop %r8 ffffffff80005ecf: 41 59 pop %r9 ffffffff80005ed1: 41 5a pop %r10 ffffffff80005ed3: 41 5b pop %r11 ffffffff80005ed5: 48 cf iretq ffffffff80005ed7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005ede: 00 00 ffffffff80005ee0 <_ZN3Hal16ExceptionHandlerILm28EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005ee0: f3 0f 1e fa endbr64 ffffffff80005ee4: 41 53 push %r11 ffffffff80005ee6: 41 52 push %r10 ffffffff80005ee8: 41 51 push %r9 ffffffff80005eea: 41 50 push %r8 ffffffff80005eec: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005eed: 48 8b 3d ec 61 00 00 mov 0x61ec(%rip),%rdi # ffffffff8000c0e0 <_ZN3Hal16ExceptionStringsE+0xe0> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005ef4: 56 push %rsi ffffffff80005ef5: 51 push %rcx ffffffff80005ef6: 52 push %rdx ffffffff80005ef7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005ef8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005efd: c6 44 24 70 1c movb $0x1c,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005f02: fc cld ffffffff80005f03: e8 a8 ef ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005f08: 58 pop %rax ffffffff80005f09: 5a pop %rdx ffffffff80005f0a: 59 pop %rcx ffffffff80005f0b: 5e pop %rsi ffffffff80005f0c: 5f pop %rdi ffffffff80005f0d: 41 58 pop %r8 ffffffff80005f0f: 41 59 pop %r9 ffffffff80005f11: 41 5a pop %r10 ffffffff80005f13: 41 5b pop %r11 ffffffff80005f15: 48 cf iretq ffffffff80005f17: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005f1e: 00 00 ffffffff80005f20 <_ZN3Hal16ExceptionHandlerILm29EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005f20: f3 0f 1e fa endbr64 ffffffff80005f24: 41 53 push %r11 ffffffff80005f26: 41 52 push %r10 ffffffff80005f28: 41 51 push %r9 ffffffff80005f2a: 41 50 push %r8 ffffffff80005f2c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005f2d: 48 8b 3d b4 61 00 00 mov 0x61b4(%rip),%rdi # ffffffff8000c0e8 <_ZN3Hal16ExceptionStringsE+0xe8> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005f34: 56 push %rsi ffffffff80005f35: 51 push %rcx ffffffff80005f36: 52 push %rdx ffffffff80005f37: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005f38: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005f3d: c6 44 24 70 1d movb $0x1d,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005f42: fc cld ffffffff80005f43: e8 68 ef ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005f48: 58 pop %rax ffffffff80005f49: 5a pop %rdx ffffffff80005f4a: 59 pop %rcx ffffffff80005f4b: 5e pop %rsi ffffffff80005f4c: 5f pop %rdi ffffffff80005f4d: 41 58 pop %r8 ffffffff80005f4f: 41 59 pop %r9 ffffffff80005f51: 41 5a pop %r10 ffffffff80005f53: 41 5b pop %r11 ffffffff80005f55: 48 cf iretq ffffffff80005f57: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005f5e: 00 00 ffffffff80005f60 <_ZN3Hal16ExceptionHandlerILm30EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005f60: f3 0f 1e fa endbr64 ffffffff80005f64: 41 53 push %r11 ffffffff80005f66: 41 52 push %r10 ffffffff80005f68: 41 51 push %r9 ffffffff80005f6a: 41 50 push %r8 ffffffff80005f6c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005f6d: 48 8b 3d 7c 61 00 00 mov 0x617c(%rip),%rdi # ffffffff8000c0f0 <_ZN3Hal16ExceptionStringsE+0xf0> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005f74: 56 push %rsi ffffffff80005f75: 51 push %rcx ffffffff80005f76: 52 push %rdx ffffffff80005f77: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005f78: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005f7d: c6 44 24 70 1e movb $0x1e,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005f82: fc cld ffffffff80005f83: e8 28 ef ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005f88: 58 pop %rax ffffffff80005f89: 5a pop %rdx ffffffff80005f8a: 59 pop %rcx ffffffff80005f8b: 5e pop %rsi ffffffff80005f8c: 5f pop %rdi ffffffff80005f8d: 41 58 pop %r8 ffffffff80005f8f: 41 59 pop %r9 ffffffff80005f91: 41 5a pop %r10 ffffffff80005f93: 41 5b pop %r11 ffffffff80005f95: 48 cf iretq ffffffff80005f97: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005f9e: 00 00 ffffffff80005fa0 <_ZN3Hal10SetHandlerILi23ELi31EE3runEv>: }; } template struct SetHandler { static void run() { ffffffff80005fa0: f3 0f 1e fa endbr64 InterruptDescriptor* descriptor = (InterruptDescriptor*)(IDTR.Base + index * sizeof(InterruptDescriptor)); ffffffff80005fa4: 48 8b 05 f7 b3 0d 00 mov 0xdb3f7(%rip),%rax # ffffffff800e13a2 <_ZN3Hal4IDTRE+0x2> uint64_t offset = (uint64_t)handler; ffffffff80005fab: 48 c7 c2 a0 5d 00 80 mov $0xffffffff80005da0,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80005fb2: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff80005fb5: 66 89 90 70 01 00 00 mov %dx,0x170(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80005fbc: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80005fc0: 48 c1 ee 10 shr $0x10,%rsi InterruptDescriptor* descriptor = (InterruptDescriptor*)(IDTR.Base + index * sizeof(InterruptDescriptor)); ffffffff80005fc4: 48 8d 88 e0 01 00 00 lea 0x1e0(%rax),%rcx *ptr = InterruptDescriptor { ffffffff80005fcb: 89 90 78 01 00 00 mov %edx,0x178(%rax) uint64_t offset = (uint64_t)handler; ffffffff80005fd1: 48 c7 c2 e0 5d 00 80 mov $0xffffffff80005de0,%rdx *ptr = InterruptDescriptor { ffffffff80005fd8: 66 89 b0 76 01 00 00 mov %si,0x176(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80005fdf: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff80005fe2: 66 89 90 80 01 00 00 mov %dx,0x180(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80005fe9: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80005fed: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff80005ff1: 89 90 88 01 00 00 mov %edx,0x188(%rax) uint64_t offset = (uint64_t)handler; ffffffff80005ff7: 48 c7 c2 20 5e 00 80 mov $0xffffffff80005e20,%rdx *ptr = InterruptDescriptor { ffffffff80005ffe: 66 89 b0 86 01 00 00 mov %si,0x186(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006005: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff80006008: 66 89 90 90 01 00 00 mov %dx,0x190(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff8000600f: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006013: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff80006017: 89 90 98 01 00 00 mov %edx,0x198(%rax) uint64_t offset = (uint64_t)handler; ffffffff8000601d: 48 c7 c2 60 5e 00 80 mov $0xffffffff80005e60,%rdx *ptr = InterruptDescriptor { ffffffff80006024: 66 89 b0 96 01 00 00 mov %si,0x196(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000602b: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff8000602e: 66 89 90 a0 01 00 00 mov %dx,0x1a0(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006035: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006039: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff8000603d: 89 90 a8 01 00 00 mov %edx,0x1a8(%rax) uint64_t offset = (uint64_t)handler; ffffffff80006043: 48 c7 c2 a0 5e 00 80 mov $0xffffffff80005ea0,%rdx *ptr = InterruptDescriptor { ffffffff8000604a: 66 89 b0 a6 01 00 00 mov %si,0x1a6(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006051: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff80006054: 66 89 90 b0 01 00 00 mov %dx,0x1b0(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff8000605b: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000605f: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff80006063: 89 90 b8 01 00 00 mov %edx,0x1b8(%rax) uint64_t offset = (uint64_t)handler; ffffffff80006069: 48 c7 c2 e0 5e 00 80 mov $0xffffffff80005ee0,%rdx *ptr = InterruptDescriptor { ffffffff80006070: 66 89 b0 b6 01 00 00 mov %si,0x1b6(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006077: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff8000607a: 66 89 90 c0 01 00 00 mov %dx,0x1c0(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006081: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006085: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff80006089: 89 90 c8 01 00 00 mov %edx,0x1c8(%rax) uint64_t offset = (uint64_t)handler; ffffffff8000608f: 48 c7 c2 20 5f 00 80 mov $0xffffffff80005f20,%rdx *ptr = InterruptDescriptor { ffffffff80006096: 66 89 b0 c6 01 00 00 mov %si,0x1c6(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000609d: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff800060a0: 66 89 90 d0 01 00 00 mov %dx,0x1d0(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff800060a7: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800060ab: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff800060af: c7 80 72 01 00 00 08 movl $0x8f000008,0x172(%rax) ffffffff800060b6: 00 00 8f ffffffff800060b9: c7 80 7c 01 00 00 00 movl $0x0,0x17c(%rax) ffffffff800060c0: 00 00 00 ffffffff800060c3: c7 80 82 01 00 00 08 movl $0x8f000008,0x182(%rax) ffffffff800060ca: 00 00 8f ffffffff800060cd: c7 80 8c 01 00 00 00 movl $0x0,0x18c(%rax) ffffffff800060d4: 00 00 00 ffffffff800060d7: c7 80 92 01 00 00 08 movl $0x8f000008,0x192(%rax) ffffffff800060de: 00 00 8f ffffffff800060e1: c7 80 9c 01 00 00 00 movl $0x0,0x19c(%rax) ffffffff800060e8: 00 00 00 ffffffff800060eb: c7 80 a2 01 00 00 08 movl $0x8f000008,0x1a2(%rax) ffffffff800060f2: 00 00 8f ffffffff800060f5: c7 80 ac 01 00 00 00 movl $0x0,0x1ac(%rax) ffffffff800060fc: 00 00 00 ffffffff800060ff: c7 80 b2 01 00 00 08 movl $0x8f000008,0x1b2(%rax) ffffffff80006106: 00 00 8f ffffffff80006109: c7 80 bc 01 00 00 00 movl $0x0,0x1bc(%rax) ffffffff80006110: 00 00 00 ffffffff80006113: c7 80 c2 01 00 00 08 movl $0x8f000008,0x1c2(%rax) ffffffff8000611a: 00 00 8f ffffffff8000611d: c7 80 cc 01 00 00 00 movl $0x0,0x1cc(%rax) ffffffff80006124: 00 00 00 ffffffff80006127: c7 80 d2 01 00 00 08 movl $0x8f000008,0x1d2(%rax) ffffffff8000612e: 00 00 8f ffffffff80006131: 89 90 d8 01 00 00 mov %edx,0x1d8(%rax) uint64_t offset = (uint64_t)handler; ffffffff80006137: 48 c7 c2 60 5f 00 80 mov $0xffffffff80005f60,%rdx *ptr = InterruptDescriptor { ffffffff8000613e: 66 89 90 e0 01 00 00 mov %dx,0x1e0(%rax) ffffffff80006145: 66 89 b0 d6 01 00 00 mov %si,0x1d6(%rax) ffffffff8000614c: c7 80 dc 01 00 00 00 movl $0x0,0x1dc(%rax) ffffffff80006153: 00 00 00 ffffffff80006156: c7 80 e2 01 00 00 08 movl $0x8f000008,0x1e2(%rax) ffffffff8000615d: 00 00 8f .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006160: 48 89 d0 mov %rdx,%rax .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006163: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006167: 48 c1 e8 10 shr $0x10,%rax *ptr = InterruptDescriptor { ffffffff8000616b: 89 51 08 mov %edx,0x8(%rcx) ffffffff8000616e: 66 89 41 06 mov %ax,0x6(%rcx) ffffffff80006172: c7 41 0c 00 00 00 00 movl $0x0,0xc(%rcx) IDTEncodeInterrupt(I, (void*)&ExceptionHandler, TrapGate); SetHandler::run(); } ffffffff80006179: c3 ret ffffffff8000617a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) ffffffff80006180 <_ZN3Hal10SetHandlerILi11ELi31EE3runEv>: static void run() { ffffffff80006180: f3 0f 1e fa endbr64 InterruptDescriptor* descriptor = (InterruptDescriptor*)(IDTR.Base + index * sizeof(InterruptDescriptor)); ffffffff80006184: 48 8b 05 17 b2 0d 00 mov 0xdb217(%rip),%rax # ffffffff800e13a2 <_ZN3Hal4IDTRE+0x2> uint64_t offset = (uint64_t)handler; ffffffff8000618b: 48 c7 c2 a0 5a 00 80 mov $0xffffffff80005aa0,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006192: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff80006195: 66 89 90 b0 00 00 00 mov %dx,0xb0(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff8000619c: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800061a0: 48 c1 ee 10 shr $0x10,%rsi InterruptDescriptor* descriptor = (InterruptDescriptor*)(IDTR.Base + index * sizeof(InterruptDescriptor)); ffffffff800061a4: 48 8d 88 60 01 00 00 lea 0x160(%rax),%rcx *ptr = InterruptDescriptor { ffffffff800061ab: 89 90 b8 00 00 00 mov %edx,0xb8(%rax) uint64_t offset = (uint64_t)handler; ffffffff800061b1: 48 c7 c2 e0 5a 00 80 mov $0xffffffff80005ae0,%rdx *ptr = InterruptDescriptor { ffffffff800061b8: 66 89 b0 b6 00 00 00 mov %si,0xb6(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800061bf: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff800061c2: 66 89 90 c0 00 00 00 mov %dx,0xc0(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff800061c9: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800061cd: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff800061d1: 89 90 c8 00 00 00 mov %edx,0xc8(%rax) uint64_t offset = (uint64_t)handler; ffffffff800061d7: 48 c7 c2 20 5b 00 80 mov $0xffffffff80005b20,%rdx *ptr = InterruptDescriptor { ffffffff800061de: 66 89 b0 c6 00 00 00 mov %si,0xc6(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800061e5: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff800061e8: 66 89 90 d0 00 00 00 mov %dx,0xd0(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff800061ef: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800061f3: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff800061f7: 89 90 d8 00 00 00 mov %edx,0xd8(%rax) uint64_t offset = (uint64_t)handler; ffffffff800061fd: 48 c7 c2 60 5b 00 80 mov $0xffffffff80005b60,%rdx *ptr = InterruptDescriptor { ffffffff80006204: 66 89 b0 d6 00 00 00 mov %si,0xd6(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000620b: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff8000620e: 66 89 90 e0 00 00 00 mov %dx,0xe0(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006215: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006219: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff8000621d: 89 90 e8 00 00 00 mov %edx,0xe8(%rax) uint64_t offset = (uint64_t)handler; ffffffff80006223: 48 c7 c2 a0 5b 00 80 mov $0xffffffff80005ba0,%rdx *ptr = InterruptDescriptor { ffffffff8000622a: 66 89 b0 e6 00 00 00 mov %si,0xe6(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006231: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff80006234: 66 89 90 f0 00 00 00 mov %dx,0xf0(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff8000623b: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000623f: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff80006243: 89 90 f8 00 00 00 mov %edx,0xf8(%rax) uint64_t offset = (uint64_t)handler; ffffffff80006249: 48 c7 c2 e0 5b 00 80 mov $0xffffffff80005be0,%rdx *ptr = InterruptDescriptor { ffffffff80006250: 66 89 b0 f6 00 00 00 mov %si,0xf6(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006257: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff8000625a: 66 89 90 00 01 00 00 mov %dx,0x100(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006261: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006265: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff80006269: 89 90 08 01 00 00 mov %edx,0x108(%rax) uint64_t offset = (uint64_t)handler; ffffffff8000626f: 48 c7 c2 20 5c 00 80 mov $0xffffffff80005c20,%rdx *ptr = InterruptDescriptor { ffffffff80006276: 66 89 b0 06 01 00 00 mov %si,0x106(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000627d: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff80006280: 66 89 90 10 01 00 00 mov %dx,0x110(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006287: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000628b: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff8000628f: c7 80 b2 00 00 00 08 movl $0x8f000008,0xb2(%rax) ffffffff80006296: 00 00 8f ffffffff80006299: c7 80 bc 00 00 00 00 movl $0x0,0xbc(%rax) ffffffff800062a0: 00 00 00 ffffffff800062a3: c7 80 c2 00 00 00 08 movl $0x8f000008,0xc2(%rax) ffffffff800062aa: 00 00 8f ffffffff800062ad: c7 80 cc 00 00 00 00 movl $0x0,0xcc(%rax) ffffffff800062b4: 00 00 00 ffffffff800062b7: c7 80 d2 00 00 00 08 movl $0x8f000008,0xd2(%rax) ffffffff800062be: 00 00 8f ffffffff800062c1: c7 80 dc 00 00 00 00 movl $0x0,0xdc(%rax) ffffffff800062c8: 00 00 00 ffffffff800062cb: c7 80 e2 00 00 00 08 movl $0x8f000008,0xe2(%rax) ffffffff800062d2: 00 00 8f ffffffff800062d5: c7 80 ec 00 00 00 00 movl $0x0,0xec(%rax) ffffffff800062dc: 00 00 00 ffffffff800062df: c7 80 f2 00 00 00 08 movl $0x8f000008,0xf2(%rax) ffffffff800062e6: 00 00 8f ffffffff800062e9: c7 80 fc 00 00 00 00 movl $0x0,0xfc(%rax) ffffffff800062f0: 00 00 00 ffffffff800062f3: c7 80 02 01 00 00 08 movl $0x8f000008,0x102(%rax) ffffffff800062fa: 00 00 8f ffffffff800062fd: c7 80 0c 01 00 00 00 movl $0x0,0x10c(%rax) ffffffff80006304: 00 00 00 ffffffff80006307: c7 80 12 01 00 00 08 movl $0x8f000008,0x112(%rax) ffffffff8000630e: 00 00 8f ffffffff80006311: 89 90 18 01 00 00 mov %edx,0x118(%rax) uint64_t offset = (uint64_t)handler; ffffffff80006317: 48 c7 c2 60 5c 00 80 mov $0xffffffff80005c60,%rdx *ptr = InterruptDescriptor { ffffffff8000631e: 66 89 b0 16 01 00 00 mov %si,0x116(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006325: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff80006328: 66 89 90 20 01 00 00 mov %dx,0x120(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff8000632f: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006333: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff80006337: 89 90 28 01 00 00 mov %edx,0x128(%rax) uint64_t offset = (uint64_t)handler; ffffffff8000633d: 48 c7 c2 a0 5c 00 80 mov $0xffffffff80005ca0,%rdx *ptr = InterruptDescriptor { ffffffff80006344: 66 89 b0 26 01 00 00 mov %si,0x126(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000634b: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff8000634e: 66 89 90 30 01 00 00 mov %dx,0x130(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006355: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006359: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff8000635d: 89 90 38 01 00 00 mov %edx,0x138(%rax) uint64_t offset = (uint64_t)handler; ffffffff80006363: 48 c7 c2 e0 5c 00 80 mov $0xffffffff80005ce0,%rdx *ptr = InterruptDescriptor { ffffffff8000636a: 66 89 b0 36 01 00 00 mov %si,0x136(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006371: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff80006374: 66 89 90 40 01 00 00 mov %dx,0x140(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff8000637b: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000637f: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff80006383: 89 90 48 01 00 00 mov %edx,0x148(%rax) uint64_t offset = (uint64_t)handler; ffffffff80006389: 48 c7 c2 20 5d 00 80 mov $0xffffffff80005d20,%rdx *ptr = InterruptDescriptor { ffffffff80006390: 66 89 b0 46 01 00 00 mov %si,0x146(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006397: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff8000639a: 66 89 90 50 01 00 00 mov %dx,0x150(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff800063a1: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800063a5: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff800063a9: 89 90 58 01 00 00 mov %edx,0x158(%rax) uint64_t offset = (uint64_t)handler; ffffffff800063af: 48 c7 c2 60 5d 00 80 mov $0xffffffff80005d60,%rdx *ptr = InterruptDescriptor { ffffffff800063b6: 66 89 90 60 01 00 00 mov %dx,0x160(%rax) ffffffff800063bd: c7 80 1c 01 00 00 00 movl $0x0,0x11c(%rax) ffffffff800063c4: 00 00 00 ffffffff800063c7: c7 80 22 01 00 00 08 movl $0x8f000008,0x122(%rax) ffffffff800063ce: 00 00 8f ffffffff800063d1: c7 80 2c 01 00 00 00 movl $0x0,0x12c(%rax) ffffffff800063d8: 00 00 00 ffffffff800063db: c7 80 32 01 00 00 08 movl $0x8f000008,0x132(%rax) ffffffff800063e2: 00 00 8f ffffffff800063e5: c7 80 3c 01 00 00 00 movl $0x0,0x13c(%rax) ffffffff800063ec: 00 00 00 ffffffff800063ef: c7 80 42 01 00 00 08 movl $0x8f000008,0x142(%rax) ffffffff800063f6: 00 00 8f ffffffff800063f9: c7 80 4c 01 00 00 00 movl $0x0,0x14c(%rax) ffffffff80006400: 00 00 00 ffffffff80006403: c7 80 52 01 00 00 08 movl $0x8f000008,0x152(%rax) ffffffff8000640a: 00 00 8f ffffffff8000640d: 66 89 b0 56 01 00 00 mov %si,0x156(%rax) ffffffff80006414: c7 80 5c 01 00 00 00 movl $0x0,0x15c(%rax) ffffffff8000641b: 00 00 00 ffffffff8000641e: c7 80 62 01 00 00 08 movl $0x8f000008,0x162(%rax) ffffffff80006425: 00 00 8f .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006428: 48 89 d0 mov %rdx,%rax .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff8000642b: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000642f: 48 c1 e8 10 shr $0x10,%rax *ptr = InterruptDescriptor { ffffffff80006433: 89 51 08 mov %edx,0x8(%rcx) ffffffff80006436: 66 89 41 06 mov %ax,0x6(%rcx) ffffffff8000643a: c7 41 0c 00 00 00 00 movl $0x0,0xc(%rcx) SetHandler::run(); ffffffff80006441: e9 5a fb ff ff jmp ffffffff80005fa0 <_ZN3Hal10SetHandlerILi23ELi31EE3runEv> ffffffff80006446: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff8000644d: 00 00 00 ffffffff80006450 <_ZN3Hal13IDTInitializeEv>: }; template struct SetHandler {static void run() {}}; void IDTInitialize() { ffffffff80006450: f3 0f 1e fa endbr64 ffffffff80006454: 48 83 ec 08 sub $0x8,%rsp IDT = (InterruptDescriptor*)Memory::g_heap->Request(4096); ffffffff80006458: 48 8b 3d 71 b3 0d 00 mov 0xdb371(%rip),%rdi # ffffffff800e17d0 <_ZN6Memory6g_heapE> ffffffff8000645f: be 00 10 00 00 mov $0x1000,%esi ffffffff80006464: e8 57 07 00 00 call ffffffff80006bc0 <_ZN6Memory13HeapAllocator7RequestEm> IDTR.Limit = 0x0FF; ffffffff80006469: b8 ff 00 00 00 mov $0xff,%eax IDTR.Base = (uint64_t)&IDT; ffffffff8000646e: 48 c7 05 29 af 0d 00 movq $0xffffffff800e13b0,0xdaf29(%rip) # ffffffff800e13a2 <_ZN3Hal4IDTRE+0x2> ffffffff80006475: b0 13 0e 80 IDTR.Limit = 0x0FF; ffffffff80006479: 66 89 05 20 af 0d 00 mov %ax,0xdaf20(%rip) # ffffffff800e13a0 <_ZN3Hal4IDTRE> uint64_t offset = (uint64_t)handler; ffffffff80006480: 48 c7 c0 e0 57 00 80 mov $0xffffffff800057e0,%rax *ptr = InterruptDescriptor { ffffffff80006487: 66 89 05 22 af 0d 00 mov %ax,0xdaf22(%rip) # ffffffff800e13b0 <_ZN3Hal3IDTE> .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000648e: 48 89 c2 mov %rax,%rdx .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006491: 48 c1 e8 20 shr $0x20,%rax .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006495: 48 c1 ea 10 shr $0x10,%rdx *ptr = InterruptDescriptor { ffffffff80006499: 89 05 19 af 0d 00 mov %eax,0xdaf19(%rip) # ffffffff800e13b8 <_ZN3Hal3IDTE+0x8> uint64_t offset = (uint64_t)handler; ffffffff8000649f: 48 c7 c0 20 58 00 80 mov $0xffffffff80005820,%rax *ptr = InterruptDescriptor { ffffffff800064a6: 66 89 15 09 af 0d 00 mov %dx,0xdaf09(%rip) # ffffffff800e13b6 <_ZN3Hal3IDTE+0x6> .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800064ad: 48 89 c2 mov %rax,%rdx *ptr = InterruptDescriptor { ffffffff800064b0: 66 89 05 09 af 0d 00 mov %ax,0xdaf09(%rip) # ffffffff800e13c0 <_ZN3Lib6outputE> .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff800064b7: 48 c1 e8 20 shr $0x20,%rax .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800064bb: 48 c1 ea 10 shr $0x10,%rdx *ptr = InterruptDescriptor { ffffffff800064bf: 89 05 03 af 0d 00 mov %eax,0xdaf03(%rip) # ffffffff800e13c8 <_ZN3Lib6outputE+0x8> uint64_t offset = (uint64_t)handler; ffffffff800064c5: 48 c7 c0 60 58 00 80 mov $0xffffffff80005860,%rax *ptr = InterruptDescriptor { ffffffff800064cc: 66 89 15 f3 ae 0d 00 mov %dx,0xdaef3(%rip) # ffffffff800e13c6 <_ZN3Lib6outputE+0x6> .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800064d3: 48 89 c2 mov %rax,%rdx *ptr = InterruptDescriptor { ffffffff800064d6: 66 89 05 f3 ae 0d 00 mov %ax,0xdaef3(%rip) # ffffffff800e13d0 <_ZN3Lib6outputE+0x10> .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff800064dd: 48 c1 e8 20 shr $0x20,%rax .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800064e1: 48 c1 ea 10 shr $0x10,%rdx *ptr = InterruptDescriptor { ffffffff800064e5: 89 05 ed ae 0d 00 mov %eax,0xdaeed(%rip) # ffffffff800e13d8 <_ZN3Lib6outputE+0x18> uint64_t offset = (uint64_t)handler; ffffffff800064eb: 48 c7 c0 a0 58 00 80 mov $0xffffffff800058a0,%rax *ptr = InterruptDescriptor { ffffffff800064f2: 66 89 15 dd ae 0d 00 mov %dx,0xdaedd(%rip) # ffffffff800e13d6 <_ZN3Lib6outputE+0x16> .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800064f9: 48 89 c2 mov %rax,%rdx *ptr = InterruptDescriptor { ffffffff800064fc: 66 89 05 dd ae 0d 00 mov %ax,0xdaedd(%rip) # ffffffff800e13e0 <_ZN3Lib6outputE+0x20> .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006503: 48 c1 e8 20 shr $0x20,%rax .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006507: 48 c1 ea 10 shr $0x10,%rdx *ptr = InterruptDescriptor { ffffffff8000650b: 89 05 d7 ae 0d 00 mov %eax,0xdaed7(%rip) # ffffffff800e13e8 <_ZN3Lib6outputE+0x28> uint64_t offset = (uint64_t)handler; ffffffff80006511: 48 c7 c0 e0 58 00 80 mov $0xffffffff800058e0,%rax *ptr = InterruptDescriptor { ffffffff80006518: 66 89 15 c7 ae 0d 00 mov %dx,0xdaec7(%rip) # ffffffff800e13e6 <_ZN3Lib6outputE+0x26> .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000651f: 48 89 c2 mov %rax,%rdx *ptr = InterruptDescriptor { ffffffff80006522: 66 89 05 c7 ae 0d 00 mov %ax,0xdaec7(%rip) # ffffffff800e13f0 <_ZN3Lib6outputE+0x30> .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006529: 48 c1 e8 20 shr $0x20,%rax .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000652d: 48 c1 ea 10 shr $0x10,%rdx *ptr = InterruptDescriptor { ffffffff80006531: 89 05 c1 ae 0d 00 mov %eax,0xdaec1(%rip) # ffffffff800e13f8 <_ZN3Lib6outputE+0x38> uint64_t offset = (uint64_t)handler; ffffffff80006537: 48 c7 c0 20 59 00 80 mov $0xffffffff80005920,%rax *ptr = InterruptDescriptor { ffffffff8000653e: 66 89 15 b1 ae 0d 00 mov %dx,0xdaeb1(%rip) # ffffffff800e13f6 <_ZN3Lib6outputE+0x36> .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006545: 48 89 c2 mov %rax,%rdx *ptr = InterruptDescriptor { ffffffff80006548: 66 89 05 b1 ae 0d 00 mov %ax,0xdaeb1(%rip) # ffffffff800e1400 <_ZN3Lib6outputE+0x40> .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff8000654f: 48 c1 e8 20 shr $0x20,%rax .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006553: 48 c1 ea 10 shr $0x10,%rdx *ptr = InterruptDescriptor { ffffffff80006557: 89 05 ab ae 0d 00 mov %eax,0xdaeab(%rip) # ffffffff800e1408 <_ZN3Lib6outputE+0x48> uint64_t offset = (uint64_t)handler; ffffffff8000655d: 48 c7 c0 60 59 00 80 mov $0xffffffff80005960,%rax *ptr = InterruptDescriptor { ffffffff80006564: 66 89 15 9b ae 0d 00 mov %dx,0xdae9b(%rip) # ffffffff800e1406 <_ZN3Lib6outputE+0x46> .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000656b: 48 89 c2 mov %rax,%rdx *ptr = InterruptDescriptor { ffffffff8000656e: c7 05 3a ae 0d 00 08 movl $0x8f000008,0xdae3a(%rip) # ffffffff800e13b2 <_ZN3Hal3IDTE+0x2> ffffffff80006575: 00 00 8f .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006578: 48 c1 ea 10 shr $0x10,%rdx *ptr = InterruptDescriptor { ffffffff8000657c: c7 05 36 ae 0d 00 00 movl $0x0,0xdae36(%rip) # ffffffff800e13bc <_ZN3Hal3IDTE+0xc> ffffffff80006583: 00 00 00 ffffffff80006586: c7 05 32 ae 0d 00 08 movl $0x8f000008,0xdae32(%rip) # ffffffff800e13c2 <_ZN3Lib6outputE+0x2> ffffffff8000658d: 00 00 8f ffffffff80006590: c7 05 32 ae 0d 00 00 movl $0x0,0xdae32(%rip) # ffffffff800e13cc <_ZN3Lib6outputE+0xc> ffffffff80006597: 00 00 00 ffffffff8000659a: c7 05 2e ae 0d 00 08 movl $0x8f000008,0xdae2e(%rip) # ffffffff800e13d2 <_ZN3Lib6outputE+0x12> ffffffff800065a1: 00 00 8f ffffffff800065a4: c7 05 2e ae 0d 00 00 movl $0x0,0xdae2e(%rip) # ffffffff800e13dc <_ZN3Lib6outputE+0x1c> ffffffff800065ab: 00 00 00 ffffffff800065ae: c7 05 2a ae 0d 00 08 movl $0x8f000008,0xdae2a(%rip) # ffffffff800e13e2 <_ZN3Lib6outputE+0x22> ffffffff800065b5: 00 00 8f ffffffff800065b8: c7 05 2a ae 0d 00 00 movl $0x0,0xdae2a(%rip) # ffffffff800e13ec <_ZN3Lib6outputE+0x2c> ffffffff800065bf: 00 00 00 ffffffff800065c2: c7 05 26 ae 0d 00 08 movl $0x8f000008,0xdae26(%rip) # ffffffff800e13f2 <_ZN3Lib6outputE+0x32> ffffffff800065c9: 00 00 8f ffffffff800065cc: c7 05 26 ae 0d 00 00 movl $0x0,0xdae26(%rip) # ffffffff800e13fc <_ZN3Lib6outputE+0x3c> ffffffff800065d3: 00 00 00 ffffffff800065d6: c7 05 22 ae 0d 00 08 movl $0x8f000008,0xdae22(%rip) # ffffffff800e1402 <_ZN3Lib6outputE+0x42> ffffffff800065dd: 00 00 8f ffffffff800065e0: c7 05 22 ae 0d 00 00 movl $0x0,0xdae22(%rip) # ffffffff800e140c <_ZN3Lib6outputE+0x4c> ffffffff800065e7: 00 00 00 ffffffff800065ea: 66 89 05 1f ae 0d 00 mov %ax,0xdae1f(%rip) # ffffffff800e1410 <_ZN3Lib6outputE+0x50> .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff800065f1: 48 c1 e8 20 shr $0x20,%rax *ptr = InterruptDescriptor { ffffffff800065f5: 89 05 1d ae 0d 00 mov %eax,0xdae1d(%rip) # ffffffff800e1418 <_ZN3Lib6outputE+0x58> uint64_t offset = (uint64_t)handler; ffffffff800065fb: 48 c7 c0 a0 59 00 80 mov $0xffffffff800059a0,%rax *ptr = InterruptDescriptor { ffffffff80006602: 66 89 15 0d ae 0d 00 mov %dx,0xdae0d(%rip) # ffffffff800e1416 <_ZN3Lib6outputE+0x56> .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006609: 48 89 c2 mov %rax,%rdx *ptr = InterruptDescriptor { ffffffff8000660c: 66 89 05 0d ae 0d 00 mov %ax,0xdae0d(%rip) # ffffffff800e1420 <_ZN3Lib6outputE+0x60> .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006613: 48 c1 e8 20 shr $0x20,%rax .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006617: 48 c1 ea 10 shr $0x10,%rdx *ptr = InterruptDescriptor { ffffffff8000661b: 89 05 07 ae 0d 00 mov %eax,0xdae07(%rip) # ffffffff800e1428 <_ZN3Lib6outputE+0x68> uint64_t offset = (uint64_t)handler; ffffffff80006621: 48 c7 c0 e0 59 00 80 mov $0xffffffff800059e0,%rax *ptr = InterruptDescriptor { ffffffff80006628: 66 89 15 f7 ad 0d 00 mov %dx,0xdadf7(%rip) # ffffffff800e1426 <_ZN3Lib6outputE+0x66> .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000662f: 48 89 c2 mov %rax,%rdx *ptr = InterruptDescriptor { ffffffff80006632: 66 89 05 f7 ad 0d 00 mov %ax,0xdadf7(%rip) # ffffffff800e1430 <_ZN3Lib6outputE+0x70> .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006639: 48 c1 e8 20 shr $0x20,%rax .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000663d: 48 c1 ea 10 shr $0x10,%rdx *ptr = InterruptDescriptor { ffffffff80006641: 89 05 f1 ad 0d 00 mov %eax,0xdadf1(%rip) # ffffffff800e1438 <_ZN3Lib6outputE+0x78> uint64_t offset = (uint64_t)handler; ffffffff80006647: 48 c7 c0 20 5a 00 80 mov $0xffffffff80005a20,%rax *ptr = InterruptDescriptor { ffffffff8000664e: 66 89 15 e1 ad 0d 00 mov %dx,0xdade1(%rip) # ffffffff800e1436 <_ZN3Lib6outputE+0x76> .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006655: 48 89 c2 mov %rax,%rdx *ptr = InterruptDescriptor { ffffffff80006658: 66 89 05 e1 ad 0d 00 mov %ax,0xdade1(%rip) # ffffffff800e1440 <_ZN3Lib6outputE+0x80> .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff8000665f: 48 c1 e8 20 shr $0x20,%rax .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006663: 48 c1 ea 10 shr $0x10,%rdx *ptr = InterruptDescriptor { ffffffff80006667: 89 05 db ad 0d 00 mov %eax,0xdaddb(%rip) # ffffffff800e1448 <_ZN3Lib6outputE+0x88> uint64_t offset = (uint64_t)handler; ffffffff8000666d: 48 c7 c0 60 5a 00 80 mov $0xffffffff80005a60,%rax *ptr = InterruptDescriptor { ffffffff80006674: 66 89 15 cb ad 0d 00 mov %dx,0xdadcb(%rip) # ffffffff800e1446 <_ZN3Lib6outputE+0x86> .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000667b: 48 89 c2 mov %rax,%rdx ffffffff8000667e: 48 c1 ea 10 shr $0x10,%rdx *ptr = InterruptDescriptor { ffffffff80006682: 66 89 05 c7 ad 0d 00 mov %ax,0xdadc7(%rip) # ffffffff800e1450 <_ZN3Lib6outputE+0x90> .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006689: 48 c1 e8 20 shr $0x20,%rax *ptr = InterruptDescriptor { ffffffff8000668d: 66 89 15 c2 ad 0d 00 mov %dx,0xdadc2(%rip) # ffffffff800e1456 <_ZN3Lib6outputE+0x96> ffffffff80006694: 89 05 be ad 0d 00 mov %eax,0xdadbe(%rip) # ffffffff800e1458 <_ZN3Lib6outputE+0x98> ffffffff8000669a: c7 05 6e ad 0d 00 08 movl $0x8f000008,0xdad6e(%rip) # ffffffff800e1412 <_ZN3Lib6outputE+0x52> ffffffff800066a1: 00 00 8f ffffffff800066a4: c7 05 6e ad 0d 00 00 movl $0x0,0xdad6e(%rip) # ffffffff800e141c <_ZN3Lib6outputE+0x5c> ffffffff800066ab: 00 00 00 ffffffff800066ae: c7 05 6a ad 0d 00 08 movl $0x8f000008,0xdad6a(%rip) # ffffffff800e1422 <_ZN3Lib6outputE+0x62> ffffffff800066b5: 00 00 8f ffffffff800066b8: c7 05 6a ad 0d 00 00 movl $0x0,0xdad6a(%rip) # ffffffff800e142c <_ZN3Lib6outputE+0x6c> ffffffff800066bf: 00 00 00 ffffffff800066c2: c7 05 66 ad 0d 00 08 movl $0x8f000008,0xdad66(%rip) # ffffffff800e1432 <_ZN3Lib6outputE+0x72> ffffffff800066c9: 00 00 8f ffffffff800066cc: c7 05 66 ad 0d 00 00 movl $0x0,0xdad66(%rip) # ffffffff800e143c <_ZN3Lib6outputE+0x7c> ffffffff800066d3: 00 00 00 ffffffff800066d6: c7 05 62 ad 0d 00 08 movl $0x8f000008,0xdad62(%rip) # ffffffff800e1442 <_ZN3Lib6outputE+0x82> ffffffff800066dd: 00 00 8f ffffffff800066e0: c7 05 62 ad 0d 00 00 movl $0x0,0xdad62(%rip) # ffffffff800e144c <_ZN3Lib6outputE+0x8c> ffffffff800066e7: 00 00 00 ffffffff800066ea: c7 05 5e ad 0d 00 08 movl $0x8f000008,0xdad5e(%rip) # ffffffff800e1452 <_ZN3Lib6outputE+0x92> ffffffff800066f1: 00 00 8f ffffffff800066f4: c7 05 5e ad 0d 00 00 movl $0x0,0xdad5e(%rip) # ffffffff800e145c <_ZN3Lib6outputE+0x9c> ffffffff800066fb: 00 00 00 SetHandler::run(); ffffffff800066fe: e8 7d fa ff ff call ffffffff80006180 <_ZN3Hal10SetHandlerILi11ELi31EE3runEv> ffffffff80006703: 48 c7 c7 98 bd 00 80 mov $0xffffffff8000bd98,%rdi ffffffff8000670a: e8 91 08 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff8000670f: 48 c7 c7 c0 b9 00 80 mov $0xffffffff8000b9c0,%rdi ffffffff80006716: e8 85 08 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> asm("lidt %0" : : "m"(idtr)); ffffffff8000671b: 0f 01 1d 7e ac 0d 00 lidt 0xdac7e(%rip) # ffffffff800e13a0 <_ZN3Hal4IDTRE> ffffffff80006722: 48 c7 c7 d8 bd 00 80 mov $0xffffffff8000bdd8,%rdi ffffffff80006729: e8 72 08 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff8000672e: 48 c7 c7 c0 b9 00 80 mov $0xffffffff8000b9c0,%rdi kout << "HardwareAbstraction: Created exception interrupt vectors" << "\n"; LoadIDT(IDTR); kout << "HardwareAbstraction: Loaded new IDT" << "\n"; } ffffffff80006735: 48 83 c4 08 add $0x8,%rsp ffffffff80006739: e9 62 08 00 00 jmp ffffffff80006fa0 <_ZN2Kt5PrintEPKc> ffffffff8000673e: 66 90 xchg %ax,%ax ffffffff80006740 : // They CAN be moved to a different .cpp file. #include extern "C" { void *memcpy(void *dest, const void *src, std::size_t n) { ffffffff80006740: f3 0f 1e fa endbr64 ffffffff80006744: 48 89 f8 mov %rdi,%rax std::uint8_t *pdest = static_cast(dest); const std::uint8_t *psrc = static_cast(src); for (std::size_t i = 0; i < n; i++) { ffffffff80006747: 48 85 d2 test %rdx,%rdx ffffffff8000674a: 74 16 je ffffffff80006762 ffffffff8000674c: 31 c9 xor %ecx,%ecx ffffffff8000674e: 66 90 xchg %ax,%ax pdest[i] = psrc[i]; ffffffff80006750: 44 0f b6 04 0e movzbl (%rsi,%rcx,1),%r8d ffffffff80006755: 44 88 04 08 mov %r8b,(%rax,%rcx,1) for (std::size_t i = 0; i < n; i++) { ffffffff80006759: 48 83 c1 01 add $0x1,%rcx ffffffff8000675d: 48 39 ca cmp %rcx,%rdx ffffffff80006760: 75 ee jne ffffffff80006750 } return dest; } ffffffff80006762: c3 ret ffffffff80006763: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff8000676a: 00 00 00 ffffffff8000676d: 0f 1f 00 nopl (%rax) ffffffff80006770 : void *memset(void *s, int c, std::size_t n) { ffffffff80006770: f3 0f 1e fa endbr64 ffffffff80006774: 48 89 f8 mov %rdi,%rax ffffffff80006777: 48 89 f9 mov %rdi,%rcx ffffffff8000677a: 48 8d 3c 3a lea (%rdx,%rdi,1),%rdi std::uint8_t *p = static_cast(s); for (std::size_t i = 0; i < n; i++) { p[i] = static_cast(c); ffffffff8000677e: 41 89 f0 mov %esi,%r8d for (std::size_t i = 0; i < n; i++) { ffffffff80006781: 48 85 d2 test %rdx,%rdx ffffffff80006784: 74 2a je ffffffff800067b0 ffffffff80006786: 48 89 fa mov %rdi,%rdx ffffffff80006789: 48 29 c2 sub %rax,%rdx ffffffff8000678c: 83 e2 01 and $0x1,%edx ffffffff8000678f: 74 0f je ffffffff800067a0 ffffffff80006791: 48 8d 48 01 lea 0x1(%rax),%rcx p[i] = static_cast(c); ffffffff80006795: 40 88 30 mov %sil,(%rax) for (std::size_t i = 0; i < n; i++) { ffffffff80006798: 48 39 f9 cmp %rdi,%rcx ffffffff8000679b: 74 14 je ffffffff800067b1 ffffffff8000679d: 0f 1f 00 nopl (%rax) p[i] = static_cast(c); ffffffff800067a0: 44 88 01 mov %r8b,(%rcx) for (std::size_t i = 0; i < n; i++) { ffffffff800067a3: 48 83 c1 02 add $0x2,%rcx p[i] = static_cast(c); ffffffff800067a7: 44 88 41 ff mov %r8b,-0x1(%rcx) for (std::size_t i = 0; i < n; i++) { ffffffff800067ab: 48 39 f9 cmp %rdi,%rcx ffffffff800067ae: 75 f0 jne ffffffff800067a0 } return s; } ffffffff800067b0: c3 ret ffffffff800067b1: c3 ret ffffffff800067b2: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff800067b9: 00 00 00 ffffffff800067bc: 0f 1f 40 00 nopl 0x0(%rax) ffffffff800067c0 <_ZN3Lib13u64_2_basestrEmm.part.0>: str[si++] = tmp[rdi--]; str[si] = '\0'; return str; } char *u64_2_basestr(uint64_t num, size_t radix) ffffffff800067c0: 48 81 ec 20 01 00 00 sub $0x120,%rsp if (!num) { return (char *)"0"; } char base[] = "0123456789ABCDEFGH"; // IJKLMN .... ffffffff800067c7: 48 b8 30 31 32 33 34 movabs $0x3736353433323130,%rax ffffffff800067ce: 35 36 37 ffffffff800067d1: 48 89 44 24 0d mov %rax,0xd(%rsp) ffffffff800067d6: 48 b8 38 39 41 42 43 movabs $0x4645444342413938,%rax ffffffff800067dd: 44 45 46 ffffffff800067e0: 48 89 44 24 15 mov %rax,0x15(%rsp) if (radix < 2 || radix > (sizeof(base) - 1)) ffffffff800067e5: 48 8d 46 fe lea -0x2(%rsi),%rax char base[] = "0123456789ABCDEFGH"; // IJKLMN .... ffffffff800067e9: c7 44 24 1c 46 47 48 movl $0x484746,0x1c(%rsp) ffffffff800067f0: 00 if (radix < 2 || radix > (sizeof(base) - 1)) ffffffff800067f1: 48 83 f8 10 cmp $0x10,%rax ffffffff800067f5: 0f 87 8d 00 00 00 ja ffffffff80006888 <_ZN3Lib13u64_2_basestrEmm.part.0+0xc8> int si = 0; char tmp[256]; int rdi = -1; while (num) ffffffff800067fb: 45 31 c0 xor %r8d,%r8d ffffffff800067fe: 48 c7 c1 c0 13 0e 80 mov $0xffffffff800e13c0,%rcx ffffffff80006805: 48 85 ff test %rdi,%rdi ffffffff80006808: 74 65 je ffffffff8000686f <_ZN3Lib13u64_2_basestrEmm.part.0+0xaf> ffffffff8000680a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) { tmp[++rdi] = base[num % radix]; ffffffff80006810: 48 89 f8 mov %rdi,%rax ffffffff80006813: 31 d2 xor %edx,%edx ffffffff80006815: 4c 89 c1 mov %r8,%rcx ffffffff80006818: 48 f7 f6 div %rsi ffffffff8000681b: 0f b6 54 14 0d movzbl 0xd(%rsp,%rdx,1),%edx ffffffff80006820: 42 88 54 04 20 mov %dl,0x20(%rsp,%r8,1) num /= radix; ffffffff80006825: 48 89 fa mov %rdi,%rdx while (num) ffffffff80006828: 4d 8d 40 01 lea 0x1(%r8),%r8 num /= radix; ffffffff8000682c: 48 89 c7 mov %rax,%rdi while (num) ffffffff8000682f: 48 39 f2 cmp %rsi,%rdx ffffffff80006832: 73 dc jae ffffffff80006810 <_ZN3Lib13u64_2_basestrEmm.part.0+0x50> ffffffff80006834: 48 63 c1 movslq %ecx,%rax ffffffff80006837: 48 8d 7c 24 20 lea 0x20(%rsp),%rdi tmp[++rdi] = base[num % radix]; ffffffff8000683c: 31 d2 xor %edx,%edx ffffffff8000683e: 48 01 f8 add %rdi,%rax ffffffff80006841: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) } while (rdi >= 0) str[si++] = tmp[rdi--]; ffffffff80006848: 0f b6 30 movzbl (%rax),%esi while (rdi >= 0) ffffffff8000684b: 48 83 e8 01 sub $0x1,%rax str[si++] = tmp[rdi--]; ffffffff8000684f: 40 88 b2 c0 13 0e 80 mov %sil,-0x7ff1ec40(%rdx) while (rdi >= 0) ffffffff80006856: 48 89 d6 mov %rdx,%rsi ffffffff80006859: 48 83 c2 01 add $0x1,%rdx ffffffff8000685d: 48 39 ce cmp %rcx,%rsi ffffffff80006860: 75 e6 jne ffffffff80006848 <_ZN3Lib13u64_2_basestrEmm.part.0+0x88> str[si] = '\0'; ffffffff80006862: 83 c1 01 add $0x1,%ecx ffffffff80006865: 48 63 c9 movslq %ecx,%rcx ffffffff80006868: 48 81 c1 c0 13 0e 80 add $0xffffffff800e13c0,%rcx ffffffff8000686f: c6 01 00 movb $0x0,(%rcx) return str; } ffffffff80006872: 48 c7 c0 c0 13 0e 80 mov $0xffffffff800e13c0,%rax ffffffff80006879: 48 81 c4 20 01 00 00 add $0x120,%rsp ffffffff80006880: c3 ret ffffffff80006881: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) str[0] = '\0'; ffffffff80006888: c6 05 31 ab 0d 00 00 movb $0x0,0xdab31(%rip) # ffffffff800e13c0 <_ZN3Lib6outputE> } ffffffff8000688f: 48 c7 c0 c0 13 0e 80 mov $0xffffffff800e13c0,%rax ffffffff80006896: 48 81 c4 20 01 00 00 add $0x120,%rsp ffffffff8000689d: c3 ret ffffffff8000689e: 66 90 xchg %ax,%ax ffffffff800068a0 <_ZN3Lib11int2basestrEim>: { ffffffff800068a0: f3 0f 1e fa endbr64 if (!num) { ffffffff800068a4: 85 ff test %edi,%edi ffffffff800068a6: 0f 84 d4 00 00 00 je ffffffff80006980 <_ZN3Lib11int2basestrEim+0xe0> { ffffffff800068ac: 48 81 ec 20 01 00 00 sub $0x120,%rsp char base[] = "0123456789ABCDEFGH"; // IJKLMN .... ffffffff800068b3: 48 b8 30 31 32 33 34 movabs $0x3736353433323130,%rax ffffffff800068ba: 35 36 37 ffffffff800068bd: 48 89 44 24 0d mov %rax,0xd(%rsp) ffffffff800068c2: 48 b8 38 39 41 42 43 movabs $0x4645444342413938,%rax ffffffff800068c9: 44 45 46 ffffffff800068cc: 48 89 44 24 15 mov %rax,0x15(%rsp) if (radix < 2 || radix > (sizeof(base) - 1)) ffffffff800068d1: 48 8d 46 fe lea -0x2(%rsi),%rax char base[] = "0123456789ABCDEFGH"; // IJKLMN .... ffffffff800068d5: c7 44 24 1c 46 47 48 movl $0x484746,0x1c(%rsp) ffffffff800068dc: 00 if (radix < 2 || radix > (sizeof(base) - 1)) ffffffff800068dd: 48 83 f8 10 cmp $0x10,%rax ffffffff800068e1: 77 7d ja ffffffff80006960 <_ZN3Lib11int2basestrEim+0xc0> if (num < 0) ffffffff800068e3: 45 31 c9 xor %r9d,%r9d ffffffff800068e6: 85 ff test %edi,%edi ffffffff800068e8: 0f 88 a2 00 00 00 js ffffffff80006990 <_ZN3Lib11int2basestrEim+0xf0> str[si++] = '-'; ffffffff800068ee: 31 c9 xor %ecx,%ecx tmp[++rdi] = base[num % radix]; ffffffff800068f0: 48 63 c7 movslq %edi,%rax ffffffff800068f3: 31 d2 xor %edx,%edx ffffffff800068f5: 49 89 c8 mov %rcx,%r8 ffffffff800068f8: 48 f7 f6 div %rsi ffffffff800068fb: 0f b6 54 14 0d movzbl 0xd(%rsp,%rdx,1),%edx num /= radix; ffffffff80006900: 89 c7 mov %eax,%edi tmp[++rdi] = base[num % radix]; ffffffff80006902: 88 54 0c 20 mov %dl,0x20(%rsp,%rcx,1) while (num) ffffffff80006906: 48 8d 49 01 lea 0x1(%rcx),%rcx ffffffff8000690a: 85 c0 test %eax,%eax ffffffff8000690c: 75 e2 jne ffffffff800068f0 <_ZN3Lib11int2basestrEim+0x50> ffffffff8000690e: 48 8d 74 24 20 lea 0x20(%rsp),%rsi ffffffff80006913: 49 63 c9 movslq %r9d,%rcx ffffffff80006916: 49 63 c0 movslq %r8d,%rax ffffffff80006919: 48 01 f0 add %rsi,%rax ffffffff8000691c: 48 8d 91 c0 13 0e 80 lea -0x7ff1ec40(%rcx),%rdx ffffffff80006923: 4a 8d b4 01 c1 13 0e lea -0x7ff1ec3f(%rcx,%r8,1),%rsi ffffffff8000692a: 80 ffffffff8000692b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) str[si++] = tmp[rdi--]; ffffffff80006930: 0f b6 08 movzbl (%rax),%ecx while (rdi >= 0) ffffffff80006933: 48 83 c2 01 add $0x1,%rdx ffffffff80006937: 48 83 e8 01 sub $0x1,%rax str[si++] = tmp[rdi--]; ffffffff8000693b: 88 4a ff mov %cl,-0x1(%rdx) while (rdi >= 0) ffffffff8000693e: 48 39 f2 cmp %rsi,%rdx ffffffff80006941: 75 ed jne ffffffff80006930 <_ZN3Lib11int2basestrEim+0x90> str[si] = '\0'; ffffffff80006943: 43 8d 44 01 01 lea 0x1(%r9,%r8,1),%eax ffffffff80006948: 48 98 cltq ffffffff8000694a: c6 80 c0 13 0e 80 00 movb $0x0,-0x7ff1ec40(%rax) return str; ffffffff80006951: 48 c7 c0 c0 13 0e 80 mov $0xffffffff800e13c0,%rax } ffffffff80006958: 48 81 c4 20 01 00 00 add $0x120,%rsp ffffffff8000695f: c3 ret str[0] = '\0'; ffffffff80006960: c6 05 59 aa 0d 00 00 movb $0x0,0xdaa59(%rip) # ffffffff800e13c0 <_ZN3Lib6outputE> return str; ffffffff80006967: 48 c7 c0 c0 13 0e 80 mov $0xffffffff800e13c0,%rax } ffffffff8000696e: 48 81 c4 20 01 00 00 add $0x120,%rsp ffffffff80006975: c3 ret ffffffff80006976: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff8000697d: 00 00 00 ffffffff80006980: 48 c7 c0 c3 bc 00 80 mov $0xffffffff8000bcc3,%rax ffffffff80006987: c3 ret ffffffff80006988: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) ffffffff8000698f: 00 str[si++] = '-'; ffffffff80006990: c6 05 29 aa 0d 00 2d movb $0x2d,0xdaa29(%rip) # ffffffff800e13c0 <_ZN3Lib6outputE> num = -num; ffffffff80006997: f7 df neg %edi str[si++] = '-'; ffffffff80006999: 41 b9 01 00 00 00 mov $0x1,%r9d ffffffff8000699f: e9 4a ff ff ff jmp ffffffff800068ee <_ZN3Lib11int2basestrEim+0x4e> ffffffff800069a4: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff800069ab: 00 00 00 ffffffff800069ae: 66 90 xchg %ax,%ax ffffffff800069b0 <_ZN3Lib13u64_2_basestrEmm>: { ffffffff800069b0: f3 0f 1e fa endbr64 if (!num) { ffffffff800069b4: 48 85 ff test %rdi,%rdi ffffffff800069b7: 74 07 je ffffffff800069c0 <_ZN3Lib13u64_2_basestrEmm+0x10> ffffffff800069b9: e9 02 fe ff ff jmp ffffffff800067c0 <_ZN3Lib13u64_2_basestrEmm.part.0> ffffffff800069be: 66 90 xchg %ax,%ax } ffffffff800069c0: 48 c7 c0 c3 bc 00 80 mov $0xffffffff8000bcc3,%rax ffffffff800069c7: c3 ret ffffffff800069c8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) ffffffff800069cf: 00 ffffffff800069d0 : // Extern declarations for global constructors array. extern void (*__init_array[])(); extern void (*__init_array_end[])(); extern "C" void kmain() { ffffffff800069d0: f3 0f 1e fa endbr64 ffffffff800069d4: 53 push %rbx ffffffff800069d5: 48 83 ec 20 sub $0x20,%rsp if (LIMINE_BASE_REVISION_SUPPORTED == false) { ffffffff800069d9: 48 8b 05 40 97 ff ff mov -0x68c0(%rip),%rax # ffffffff80000120 <_ZN12_GLOBAL__N_120limine_base_revisionE+0x10> ffffffff800069e0: 48 85 c0 test %rax,%rax ffffffff800069e3: 0f 85 47 01 00 00 jne ffffffff80006b30 hcf(); } // Call global constructors. for (std::size_t i = 0; &__init_array[i] != __init_array_end; i++) { ffffffff800069e9: 48 c7 c0 17 bf 00 80 mov $0xffffffff8000bf17,%rax ffffffff800069f0: 48 3d 17 bf 00 80 cmp $0xffffffff8000bf17,%rax ffffffff800069f6: 74 17 je ffffffff80006a0f ffffffff800069f8: 48 89 c3 mov %rax,%rbx ffffffff800069fb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) __init_array[i](); ffffffff80006a00: ff 13 call *(%rbx) for (std::size_t i = 0; &__init_array[i] != __init_array_end; i++) { ffffffff80006a02: 48 83 c3 08 add $0x8,%rbx ffffffff80006a06: 48 81 fb 17 bf 00 80 cmp $0xffffffff8000bf17,%rbx ffffffff80006a0d: 75 f1 jne ffffffff80006a00 } if (framebuffer_request.response == nullptr ffffffff80006a0f: 48 8b 05 f2 96 ff ff mov -0x690e(%rip),%rax # ffffffff80000108 <_ZN12_GLOBAL__N_119framebuffer_requestE+0x28> || framebuffer_request.response->framebuffer_count < 1) { ffffffff80006a16: 48 85 c0 test %rax,%rax ffffffff80006a19: 0f 84 01 01 00 00 je ffffffff80006b20 ffffffff80006a1f: 48 8b 05 e2 96 ff ff mov -0x691e(%rip),%rax # ffffffff80000108 <_ZN12_GLOBAL__N_119framebuffer_requestE+0x28> ffffffff80006a26: 48 83 78 08 00 cmpq $0x0,0x8(%rax) ffffffff80006a2b: 0f 84 ef 00 00 00 je ffffffff80006b20 hcf(); } limine_framebuffer *framebuffer{framebuffer_request.response->framebuffers[0]}; ffffffff80006a31: 48 8b 05 d0 96 ff ff mov -0x6930(%rip),%rax # ffffffff80000108 <_ZN12_GLOBAL__N_119framebuffer_requestE+0x28> ffffffff80006a38: 48 8b 40 10 mov 0x10(%rax),%rax ffffffff80006a3c: 48 8b 00 mov (%rax),%rax Kt::Initialize( ffffffff80006a3f: 44 0f b6 50 28 movzbl 0x28(%rax),%r10d ffffffff80006a44: 44 0f b6 48 24 movzbl 0x24(%rax),%r9d ffffffff80006a49: 44 0f b6 40 23 movzbl 0x23(%rax),%r8d ffffffff80006a4e: 48 8b 48 18 mov 0x18(%rax),%rcx ffffffff80006a52: 48 8b 50 10 mov 0x10(%rax),%rdx ffffffff80006a56: 48 8b 70 08 mov 0x8(%rax),%rsi ffffffff80006a5a: 48 8b 38 mov (%rax),%rdi ffffffff80006a5d: 41 52 push %r10 ffffffff80006a5f: 44 0f b6 50 27 movzbl 0x27(%rax),%r10d ffffffff80006a64: 41 52 push %r10 ffffffff80006a66: 44 0f b6 50 26 movzbl 0x26(%rax),%r10d ffffffff80006a6b: 41 52 push %r10 ffffffff80006a6d: 0f b6 40 25 movzbl 0x25(%rax),%eax ffffffff80006a71: 50 push %rax ffffffff80006a72: e8 79 04 00 00 call ffffffff80006ef0 <_ZN2Kt10InitializeEPjmmmhhhhhh> framebuffer->blue_mask_size, framebuffer->blue_mask_shift ); #if defined (__x86_64__) Hal::PrepareGDT(); ffffffff80006a77: 48 83 c4 20 add $0x20,%rsp ffffffff80006a7b: e8 60 ec ff ff call ffffffff800056e0 <_ZN3Hal10PrepareGDTEv> Hal::BridgeLoadGDT(); ffffffff80006a80: e8 0b ed ff ff call ffffffff80005790 <_ZN3Hal13BridgeLoadGDTEv> #endif uint64_t hhdm_offset = hhdm_request.response->offset; ffffffff80006a85: 48 8b 05 fc 95 ff ff mov -0x6a04(%rip),%rax # ffffffff80000088 <_ZN12_GLOBAL__N_112hhdm_requestE+0x28> Memory::HHDMBase = hhdm_offset; ffffffff80006a8c: 48 8b 40 08 mov 0x8(%rax),%rax ffffffff80006a90: 48 89 05 31 ad 0d 00 mov %rax,0xdad31(%rip) # ffffffff800e17c8 <_ZN6Memory8HHDMBaseE> if (memmap_request.response != nullptr) { ffffffff80006a97: 48 8b 05 aa 95 ff ff mov -0x6a56(%rip),%rax # ffffffff80000048 <_ZN12_GLOBAL__N_114memmap_requestE+0x28> ffffffff80006a9e: 48 85 c0 test %rax,%rax ffffffff80006aa1: 0f 84 99 00 00 00 je ffffffff80006b40 ffffffff80006aa7: 48 c7 c7 20 be 00 80 mov $0xffffffff8000be20,%rdi kout << "MemoryManagement: Creating global HeapAllocator" << newline; auto result = Memory::Scan(memmap_request.response); auto allocator = Memory::HeapAllocator(result); ffffffff80006aae: 48 89 e3 mov %rsp,%rbx ffffffff80006ab1: e8 ea 04 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> Putchar(chr); ffffffff80006ab6: bf 0a 00 00 00 mov $0xa,%edi ffffffff80006abb: e8 b0 04 00 00 call ffffffff80006f70 <_ZN2Kt7PutcharEc> auto result = Memory::Scan(memmap_request.response); ffffffff80006ac0: 48 8b 3d 81 95 ff ff mov -0x6a7f(%rip),%rdi # ffffffff80000048 <_ZN12_GLOBAL__N_114memmap_requestE+0x28> ffffffff80006ac7: e8 e4 02 00 00 call ffffffff80006db0 <_ZN6Memory4ScanEP22limine_memmap_response> auto allocator = Memory::HeapAllocator(result); ffffffff80006acc: 48 89 df mov %rbx,%rdi auto result = Memory::Scan(memmap_request.response); ffffffff80006acf: 48 89 c6 mov %rax,%rsi auto allocator = Memory::HeapAllocator(result); ffffffff80006ad2: e8 89 00 00 00 call ffffffff80006b60 <_ZN6Memory13HeapAllocatorC1ENS_14LargestSectionE> Memory::g_heap = &allocator; ffffffff80006ad7: 48 89 1d f2 ac 0d 00 mov %rbx,0xdacf2(%rip) # ffffffff800e17d0 <_ZN6Memory6g_heapE> } else { Panic("Guru Meditation Error: System memory map missing!", nullptr); } #if defined (__x86_64__) Hal::IDTInitialize(); ffffffff80006ade: e8 6d f9 ff ff call ffffffff80006450 <_ZN3Hal13IDTInitializeEv> #endif kcp::cstringstream stream; ffffffff80006ae3: 48 89 df mov %rbx,%rdi ffffffff80006ae6: e8 f5 ea ff ff call ffffffff800055e0 <_ZN3kcp13cstringstreamC1Ev> stream<<"Hello, World"; ffffffff80006aeb: 48 c7 c6 c5 bc 00 80 mov $0xffffffff8000bcc5,%rsi ffffffff80006af2: 48 89 df mov %rbx,%rdi ffffffff80006af5: e8 36 eb ff ff call ffffffff80005630 <_ZN3kcp13cstringstreamlsEPKc> Memory::g_heap->Walk(); ffffffff80006afa: 48 8b 3d cf ac 0d 00 mov 0xdaccf(%rip),%rdi # ffffffff800e17d0 <_ZN6Memory6g_heapE> ffffffff80006b01: e8 da 01 00 00 call ffffffff80006ce0 <_ZN6Memory13HeapAllocator4WalkEv> hcf(); ffffffff80006b06: e8 d5 03 00 00 call ffffffff80006ee0 <_Z3hcfv> } ffffffff80006b0b: 48 89 df mov %rbx,%rdi ffffffff80006b0e: e8 ed ea ff ff call ffffffff80005600 <_ZN3kcp13cstringstreamD1Ev> ffffffff80006b13: 48 83 c4 20 add $0x20,%rsp ffffffff80006b17: 5b pop %rbx ffffffff80006b18: c3 ret ffffffff80006b19: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) hcf(); ffffffff80006b20: e8 bb 03 00 00 call ffffffff80006ee0 <_Z3hcfv> ffffffff80006b25: e9 07 ff ff ff jmp ffffffff80006a31 ffffffff80006b2a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) hcf(); ffffffff80006b30: e8 ab 03 00 00 call ffffffff80006ee0 <_Z3hcfv> ffffffff80006b35: e9 af fe ff ff jmp ffffffff800069e9 ffffffff80006b3a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) Panic("Guru Meditation Error: System memory map missing!", nullptr); ffffffff80006b40: 31 f6 xor %esi,%esi ffffffff80006b42: 48 c7 c7 50 be 00 80 mov $0xffffffff8000be50,%rdi ffffffff80006b49: 48 89 e3 mov %rsp,%rbx ffffffff80006b4c: e8 5f e3 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> ffffffff80006b51: eb 8b jmp ffffffff80006ade ffffffff80006b53: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80006b5a: 00 00 00 ffffffff80006b5d: 0f 1f 00 nopl (%rax) ffffffff80006b60 <_ZN6Memory13HeapAllocatorC1ENS_14LargestSectionE>: namespace Memory { constexpr size_t metadata_size = 8; // 8 bytes HeapAllocator::HeapAllocator(LargestSection section) ffffffff80006b60: f3 0f 1e fa endbr64 ffffffff80006b64: 41 54 push %r12 ffffffff80006b66: 49 89 d4 mov %rdx,%r12 ffffffff80006b69: 55 push %rbp ffffffff80006b6a: 48 89 f5 mov %rsi,%rbp ffffffff80006b6d: 53 push %rbx ffffffff80006b6e: 48 89 fb mov %rdi,%rbx ffffffff80006b71: 48 c7 47 10 00 00 00 movq $0x0,0x10(%rdi) ffffffff80006b78: 00 ffffffff80006b79: 48 c7 47 18 00 00 00 movq $0x0,0x18(%rdi) ffffffff80006b80: 00 Print(string); ffffffff80006b81: 48 c7 c7 88 be 00 80 mov $0xffffffff8000be88,%rdi ffffffff80006b88: e8 13 04 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> Putchar(chr); ffffffff80006b8d: bf 0a 00 00 00 mov $0xa,%edi ffffffff80006b92: e8 d9 03 00 00 call ffffffff80006f70 <_ZN2Kt7PutcharEc> namespace Memory { extern std::uint64_t HHDMBase; inline uint64_t HHDM(uint64_t address) { return HHDMBase + address; ffffffff80006b97: 48 8b 35 2a ac 0d 00 mov 0xdac2a(%rip),%rsi # ffffffff800e17c8 <_ZN6Memory8HHDMBaseE> { kout << "HeapAllocator: constructor called" << Kt::newline; // section contains the physical address, we need the virtual address, so we call the helper g_section = LargestSection { ffffffff80006b9e: 4c 89 63 08 mov %r12,0x8(%rbx) .address = HHDM(section.address), .size = section.size }; head = Node { ffffffff80006ba2: 48 c7 43 10 00 00 00 movq $0x0,0x10(%rbx) ffffffff80006ba9: 00 ffffffff80006baa: 48 01 ee add %rbp,%rsi g_section = LargestSection { ffffffff80006bad: 48 89 33 mov %rsi,(%rbx) head = Node { ffffffff80006bb0: 48 89 73 18 mov %rsi,0x18(%rbx) .size = 0, .next = (Node*)g_section.address }; head.next->size = g_section.size; ffffffff80006bb4: 4c 89 26 mov %r12,(%rsi) head.size = 0;//!!!!!! } ffffffff80006bb7: 5b pop %rbx ffffffff80006bb8: 5d pop %rbp ffffffff80006bb9: 41 5c pop %r12 ffffffff80006bbb: c3 ret ffffffff80006bbc: 0f 1f 40 00 nopl 0x0(%rax) ffffffff80006bc0 <_ZN6Memory13HeapAllocator7RequestEm>: void* HeapAllocator::Request(size_t size) { ffffffff80006bc0: f3 0f 1e fa endbr64 ffffffff80006bc4: 55 push %rbp Node* current = &head; Node* prev = nullptr; ffffffff80006bc5: 31 c9 xor %ecx,%ecx void* HeapAllocator::Request(size_t size) { ffffffff80006bc7: 48 89 fd mov %rdi,%rbp ffffffff80006bca: 53 push %rbx Node* current = &head; ffffffff80006bcb: 48 8d 5f 10 lea 0x10(%rdi),%rbx void* HeapAllocator::Request(size_t size) { ffffffff80006bcf: 48 83 ec 08 sub $0x8,%rsp ffffffff80006bd3: eb 0e jmp ffffffff80006be3 <_ZN6Memory13HeapAllocator7RequestEm+0x23> ffffffff80006bd5: 0f 1f 00 nopl (%rax) while (current != nullptr) { ffffffff80006bd8: 48 89 d9 mov %rbx,%rcx ffffffff80006bdb: 48 85 c0 test %rax,%rax ffffffff80006bde: 74 62 je ffffffff80006c42 <_ZN6Memory13HeapAllocator7RequestEm+0x82> ffffffff80006be0: 48 89 c3 mov %rax,%rbx if (current->size >= size) { ffffffff80006be3: 48 8b 13 mov (%rbx),%rdx Node copy = *current; ffffffff80006be6: 48 8b 43 08 mov 0x8(%rbx),%rax if (current->size >= size) { ffffffff80006bea: 48 39 f2 cmp %rsi,%rdx ffffffff80006bed: 72 e9 jb ffffffff80006bd8 <_ZN6Memory13HeapAllocator7RequestEm+0x18> size_t total_size_needed = size + sizeof(Metadata); Metadata* meta = (Metadata*)current; meta->size = size; ffffffff80006bef: 48 89 33 mov %rsi,(%rbx) prev->next = (Node*)((uint64_t)current + total_size_needed); ffffffff80006bf2: 48 8d 74 33 08 lea 0x8(%rbx,%rsi,1),%rsi Print(string); ffffffff80006bf7: 48 c7 c7 d2 bc 00 80 mov $0xffffffff8000bcd2,%rdi ffffffff80006bfe: 48 89 71 08 mov %rsi,0x8(%rcx) prev->next->next = copy.next; ffffffff80006c02: 48 89 46 08 mov %rax,0x8(%rsi) prev->next->size = copy.size; ffffffff80006c06: 48 8b 41 08 mov 0x8(%rcx),%rax ffffffff80006c0a: 48 89 10 mov %rdx,(%rax) ffffffff80006c0d: e8 8e 03 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff80006c12: 48 8b 7d 10 mov 0x10(%rbp),%rdi ffffffff80006c16: be 0a 00 00 00 mov $0xa,%esi t.streamBaseType = newBase; ffffffff80006c1b: c7 05 d3 54 00 00 0a movl $0xa,0x54d3(%rip) # ffffffff8000c0f8 ffffffff80006c22: 00 00 00 Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff80006c25: e8 86 fd ff ff call ffffffff800069b0 <_ZN3Lib13u64_2_basestrEmm> ffffffff80006c2a: 48 89 c7 mov %rax,%rdi ffffffff80006c2d: e8 6e 03 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> Print(string); ffffffff80006c32: 48 c7 c7 c0 b9 00 80 mov $0xffffffff8000b9c0,%rdi ffffffff80006c39: e8 62 03 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> kout << "head.size: " << base::dec << head.size << "\n"; return (void*)((uint64_t)meta + sizeof(Metadata)); ffffffff80006c3e: 48 8d 43 08 lea 0x8(%rbx),%rax prev = current; current = current->next; } return nullptr; } ffffffff80006c42: 48 83 c4 08 add $0x8,%rsp ffffffff80006c46: 5b pop %rbx ffffffff80006c47: 5d pop %rbp ffffffff80006c48: c3 ret ffffffff80006c49: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) ffffffff80006c50 <_ZN6Memory13HeapAllocator7ReallocEPvm>: void* HeapAllocator::Realloc(void* ptr, size_t size) { ffffffff80006c50: f3 0f 1e fa endbr64 ffffffff80006c54: 41 55 push %r13 ffffffff80006c56: 49 89 d5 mov %rdx,%r13 ffffffff80006c59: 41 54 push %r12 ffffffff80006c5b: 55 push %rbp ffffffff80006c5c: 48 89 f5 mov %rsi,%rbp auto new_ptr = Request(size); ffffffff80006c5f: 48 89 d6 mov %rdx,%rsi void* HeapAllocator::Realloc(void* ptr, size_t size) { ffffffff80006c62: 53 push %rbx ffffffff80006c63: 48 89 fb mov %rdi,%rbx ffffffff80006c66: 48 83 ec 08 sub $0x8,%rsp auto new_ptr = Request(size); ffffffff80006c6a: e8 51 ff ff ff call ffffffff80006bc0 <_ZN6Memory13HeapAllocator7RequestEm> ffffffff80006c6f: 49 89 c4 mov %rax,%r12 if (new_ptr == nullptr) { ffffffff80006c72: 48 85 c0 test %rax,%rax ffffffff80006c75: 74 2e je ffffffff80006ca5 <_ZN6Memory13HeapAllocator7ReallocEPvm+0x55> return nullptr; } if (ptr == nullptr) { ffffffff80006c77: 48 85 ed test %rbp,%rbp ffffffff80006c7a: 74 29 je ffffffff80006ca5 <_ZN6Memory13HeapAllocator7ReallocEPvm+0x55> return new_ptr; } memcpy(new_ptr, ptr, size); ffffffff80006c7c: 4c 89 ea mov %r13,%rdx ffffffff80006c7f: 48 89 ee mov %rbp,%rsi ffffffff80006c82: 48 89 c7 mov %rax,%rdi ffffffff80006c85: e8 b6 fa ff ff call ffffffff80006740 void HeapAllocator::Free(void* ptr) { Metadata* meta = (Metadata*)((uint64_t)ptr - sizeof(Metadata)); size_t size = meta->size; auto prev_next = head.next; ffffffff80006c8a: 48 8b 4b 18 mov 0x18(%rbx),%rcx Metadata* meta = (Metadata*)((uint64_t)ptr - sizeof(Metadata)); ffffffff80006c8e: 48 8d 45 f8 lea -0x8(%rbp),%rax size_t size = meta->size; ffffffff80006c92: 48 8b 55 f8 mov -0x8(%rbp),%rdx head.next = (Node*)meta; ffffffff80006c96: 48 89 43 18 mov %rax,0x18(%rbx) head.next->next = prev_next; ffffffff80006c9a: 48 89 4d 00 mov %rcx,0x0(%rbp) head.next->size = size; ffffffff80006c9e: 48 8b 43 18 mov 0x18(%rbx),%rax ffffffff80006ca2: 48 89 10 mov %rdx,(%rax) } ffffffff80006ca5: 48 83 c4 08 add $0x8,%rsp ffffffff80006ca9: 4c 89 e0 mov %r12,%rax ffffffff80006cac: 5b pop %rbx ffffffff80006cad: 5d pop %rbp ffffffff80006cae: 41 5c pop %r12 ffffffff80006cb0: 41 5d pop %r13 ffffffff80006cb2: c3 ret ffffffff80006cb3: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80006cba: 00 00 00 ffffffff80006cbd: 0f 1f 00 nopl (%rax) ffffffff80006cc0 <_ZN6Memory13HeapAllocator4FreeEPv>: void HeapAllocator::Free(void* ptr) { ffffffff80006cc0: f3 0f 1e fa endbr64 auto prev_next = head.next; ffffffff80006cc4: 48 8b 4f 18 mov 0x18(%rdi),%rcx Metadata* meta = (Metadata*)((uint64_t)ptr - sizeof(Metadata)); ffffffff80006cc8: 48 8d 46 f8 lea -0x8(%rsi),%rax size_t size = meta->size; ffffffff80006ccc: 48 8b 56 f8 mov -0x8(%rsi),%rdx head.next = (Node*)meta; ffffffff80006cd0: 48 89 47 18 mov %rax,0x18(%rdi) head.next->next = prev_next; ffffffff80006cd4: 48 89 0e mov %rcx,(%rsi) head.next->size = size; ffffffff80006cd7: 48 8b 47 18 mov 0x18(%rdi),%rax ffffffff80006cdb: 48 89 10 mov %rdx,(%rax) } ffffffff80006cde: c3 ret ffffffff80006cdf: 90 nop ffffffff80006ce0 <_ZN6Memory13HeapAllocator4WalkEv>: // Traverses the Allocator's linked list for debugging void HeapAllocator::Walk() { ffffffff80006ce0: f3 0f 1e fa endbr64 ffffffff80006ce4: 55 push %rbp ffffffff80006ce5: 53 push %rbx ffffffff80006ce6: 48 83 ec 08 sub $0x8,%rsp Node* current = {head.next}; ffffffff80006cea: 48 8b 5f 18 mov 0x18(%rdi),%rbx size_t i{0}; while (current != nullptr) { ffffffff80006cee: 48 85 db test %rbx,%rbx ffffffff80006cf1: 0f 84 a8 00 00 00 je ffffffff80006d9f <_ZN6Memory13HeapAllocator4WalkEv+0xbf> size_t i{0}; ffffffff80006cf7: 31 ed xor %ebp,%ebp ffffffff80006cf9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) ffffffff80006d00: 48 c7 c7 de bc 00 80 mov $0xffffffff8000bcde,%rdi ffffffff80006d07: e8 94 02 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff80006d0c: be 0a 00 00 00 mov $0xa,%esi ffffffff80006d11: 48 89 ef mov %rbp,%rdi t.streamBaseType = newBase; ffffffff80006d14: c7 05 da 53 00 00 0a movl $0xa,0x53da(%rip) # ffffffff8000c0f8 ffffffff80006d1b: 00 00 00 Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff80006d1e: e8 8d fc ff ff call ffffffff800069b0 <_ZN3Lib13u64_2_basestrEmm> kout << "Block " << base::dec << i << " {" << current->size << " bytes & address 0x" << base::hex << (uint64_t)current << "}" << Kt::newline; current = current->next; i++; ffffffff80006d23: 48 83 c5 01 add $0x1,%rbp ffffffff80006d27: 48 89 c7 mov %rax,%rdi ffffffff80006d2a: e8 71 02 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> Print(string); ffffffff80006d2f: 48 c7 c7 e5 bc 00 80 mov $0xffffffff8000bce5,%rdi ffffffff80006d36: e8 65 02 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff80006d3b: 8b 35 b7 53 00 00 mov 0x53b7(%rip),%esi # ffffffff8000c0f8 ffffffff80006d41: 48 8b 3b mov (%rbx),%rdi ffffffff80006d44: e8 67 fc ff ff call ffffffff800069b0 <_ZN3Lib13u64_2_basestrEmm> ffffffff80006d49: 48 89 c7 mov %rax,%rdi ffffffff80006d4c: e8 4f 02 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> Print(string); ffffffff80006d51: 48 c7 c7 e8 bc 00 80 mov $0xffffffff8000bce8,%rdi ffffffff80006d58: e8 43 02 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff80006d5d: be 10 00 00 00 mov $0x10,%esi ffffffff80006d62: 48 89 df mov %rbx,%rdi t.streamBaseType = newBase; ffffffff80006d65: c7 05 89 53 00 00 10 movl $0x10,0x5389(%rip) # ffffffff8000c0f8 ffffffff80006d6c: 00 00 00 Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff80006d6f: e8 3c fc ff ff call ffffffff800069b0 <_ZN3Lib13u64_2_basestrEmm> ffffffff80006d74: 48 89 c7 mov %rax,%rdi ffffffff80006d77: e8 24 02 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> Print(string); ffffffff80006d7c: 48 c7 c7 fc bc 00 80 mov $0xffffffff8000bcfc,%rdi ffffffff80006d83: e8 18 02 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> Putchar(chr); ffffffff80006d88: bf 0a 00 00 00 mov $0xa,%edi ffffffff80006d8d: e8 de 01 00 00 call ffffffff80006f70 <_ZN2Kt7PutcharEc> current = current->next; ffffffff80006d92: 48 8b 5b 08 mov 0x8(%rbx),%rbx while (current != nullptr) { ffffffff80006d96: 48 85 db test %rbx,%rbx ffffffff80006d99: 0f 85 61 ff ff ff jne ffffffff80006d00 <_ZN6Memory13HeapAllocator4WalkEv+0x20> } } ffffffff80006d9f: 48 83 c4 08 add $0x8,%rsp ffffffff80006da3: 5b pop %rbx ffffffff80006da4: 5d pop %rbp ffffffff80006da5: c3 ret ffffffff80006da6: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80006dad: 00 00 00 ffffffff80006db0 <_ZN6Memory4ScanEP22limine_memmap_response>: #include "Heap.hpp" using namespace Kt; namespace Memory { LargestSection Scan(limine_memmap_response* mmap) { ffffffff80006db0: f3 0f 1e fa endbr64 ffffffff80006db4: 41 56 push %r14 ffffffff80006db6: 41 55 push %r13 ffffffff80006db8: 41 54 push %r12 ffffffff80006dba: 55 push %rbp ffffffff80006dbb: 53 push %rbx LargestSection currentLargestSection{}; for (size_t i = 0; i < mmap->entry_count; i++) { ffffffff80006dbc: 4c 8b 6f 08 mov 0x8(%rdi),%r13 ffffffff80006dc0: 4d 85 ed test %r13,%r13 ffffffff80006dc3: 0f 84 ef 00 00 00 je ffffffff80006eb8 <_ZN6Memory4ScanEP22limine_memmap_response+0x108> ffffffff80006dc9: 49 89 fc mov %rdi,%r12 LargestSection currentLargestSection{}; ffffffff80006dcc: 45 31 ed xor %r13d,%r13d ffffffff80006dcf: 45 31 f6 xor %r14d,%r14d for (size_t i = 0; i < mmap->entry_count; i++) { ffffffff80006dd2: 31 db xor %ebx,%ebx ffffffff80006dd4: eb 19 jmp ffffffff80006def <_ZN6Memory4ScanEP22limine_memmap_response+0x3f> ffffffff80006dd6: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80006ddd: 00 00 00 ffffffff80006de0: 48 83 c3 01 add $0x1,%rbx ffffffff80006de4: 49 3b 5c 24 08 cmp 0x8(%r12),%rbx ffffffff80006de9: 0f 83 b1 00 00 00 jae ffffffff80006ea0 <_ZN6Memory4ScanEP22limine_memmap_response+0xf0> auto entry = mmap->entries[i]; ffffffff80006def: 49 8b 44 24 10 mov 0x10(%r12),%rax ffffffff80006df4: 48 8b 2c d8 mov (%rax,%rbx,8),%rbp if (entry->base == 0) { ffffffff80006df8: 48 83 7d 00 00 cmpq $0x0,0x0(%rbp) ffffffff80006dfd: 74 e1 je ffffffff80006de0 <_ZN6Memory4ScanEP22limine_memmap_response+0x30> continue; } if (entry->type == LIMINE_MEMMAP_USABLE) { ffffffff80006dff: 48 83 7d 10 00 cmpq $0x0,0x10(%rbp) ffffffff80006e04: 75 da jne ffffffff80006de0 <_ZN6Memory4ScanEP22limine_memmap_response+0x30> Print(string); ffffffff80006e06: 48 c7 c7 b0 be 00 80 mov $0xffffffff8000beb0,%rdi ffffffff80006e0d: e8 8e 01 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff80006e12: 48 8b 7d 08 mov 0x8(%rbp),%rdi ffffffff80006e16: be 0a 00 00 00 mov $0xa,%esi t.streamBaseType = newBase; ffffffff80006e1b: c7 05 d3 52 00 00 0a movl $0xa,0x52d3(%rip) # ffffffff8000c0f8 ffffffff80006e22: 00 00 00 Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff80006e25: e8 86 fb ff ff call ffffffff800069b0 <_ZN3Lib13u64_2_basestrEmm> ffffffff80006e2a: 48 89 c7 mov %rax,%rdi ffffffff80006e2d: e8 6e 01 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> Print(string); ffffffff80006e32: 48 c7 c7 fe bc 00 80 mov $0xffffffff8000bcfe,%rdi ffffffff80006e39: e8 62 01 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff80006e3e: 48 8b 7d 00 mov 0x0(%rbp),%rdi ffffffff80006e42: be 10 00 00 00 mov $0x10,%esi t.streamBaseType = newBase; ffffffff80006e47: c7 05 a7 52 00 00 10 movl $0x10,0x52a7(%rip) # ffffffff8000c0f8 ffffffff80006e4e: 00 00 00 Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff80006e51: e8 5a fb ff ff call ffffffff800069b0 <_ZN3Lib13u64_2_basestrEmm> ffffffff80006e56: 48 89 c7 mov %rax,%rdi ffffffff80006e59: e8 42 01 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> Print(string); ffffffff80006e5e: 48 c7 c7 13 bd 00 80 mov $0xffffffff8000bd13,%rdi ffffffff80006e65: e8 36 01 00 00 call ffffffff80006fa0 <_ZN2Kt5PrintEPKc> Putchar(chr); ffffffff80006e6a: bf 0a 00 00 00 mov $0xa,%edi ffffffff80006e6f: e8 fc 00 00 00 call ffffffff80006f70 <_ZN2Kt7PutcharEc> kout << "MemoryManagement: Found conventional memory section (size = " << base::dec << entry->length << " bytes, address = 0x" << base::hex << (uint64_t)entry->base << ")" << newline; if (entry->length > currentLargestSection.size) { ffffffff80006e74: 48 8b 45 08 mov 0x8(%rbp),%rax ffffffff80006e78: 49 39 c5 cmp %rax,%r13 ffffffff80006e7b: 0f 83 5f ff ff ff jae ffffffff80006de0 <_ZN6Memory4ScanEP22limine_memmap_response+0x30> currentLargestSection = { .address = (uint64_t)entry->base, ffffffff80006e81: 4c 8b 75 00 mov 0x0(%rbp),%r14 currentLargestSection = { ffffffff80006e85: 49 89 c5 mov %rax,%r13 for (size_t i = 0; i < mmap->entry_count; i++) { ffffffff80006e88: 48 83 c3 01 add $0x1,%rbx ffffffff80006e8c: 49 3b 5c 24 08 cmp 0x8(%r12),%rbx ffffffff80006e91: 0f 82 58 ff ff ff jb ffffffff80006def <_ZN6Memory4ScanEP22limine_memmap_response+0x3f> ffffffff80006e97: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80006e9e: 00 00 }; } } } [[unlikely]] if (currentLargestSection.address == 0) { ffffffff80006ea0: 4d 85 f6 test %r14,%r14 ffffffff80006ea3: 74 13 je ffffffff80006eb8 <_ZN6Memory4ScanEP22limine_memmap_response+0x108> Panic("Couldn't find a usable memory section.", nullptr); } return currentLargestSection; } ffffffff80006ea5: 5b pop %rbx ffffffff80006ea6: 4c 89 f0 mov %r14,%rax ffffffff80006ea9: 5d pop %rbp ffffffff80006eaa: 4c 89 ea mov %r13,%rdx ffffffff80006ead: 41 5c pop %r12 ffffffff80006eaf: 41 5d pop %r13 ffffffff80006eb1: 41 5e pop %r14 ffffffff80006eb3: c3 ret ffffffff80006eb4: 0f 1f 40 00 nopl 0x0(%rax) Panic("Couldn't find a usable memory section.", nullptr); ffffffff80006eb8: 45 31 f6 xor %r14d,%r14d ffffffff80006ebb: 31 f6 xor %esi,%esi ffffffff80006ebd: 48 c7 c7 f0 be 00 80 mov $0xffffffff8000bef0,%rdi ffffffff80006ec4: e8 e7 df ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80006ec9: 5b pop %rbx ffffffff80006eca: 4c 89 f0 mov %r14,%rax ffffffff80006ecd: 5d pop %rbp ffffffff80006ece: 4c 89 ea mov %r13,%rdx ffffffff80006ed1: 41 5c pop %r12 ffffffff80006ed3: 41 5d pop %r13 ffffffff80006ed5: 41 5e pop %r14 ffffffff80006ed7: c3 ret ffffffff80006ed8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) ffffffff80006edf: 00 ffffffff80006ee0 <_Z3hcfv>: * Copyright (c) Daniel Hammer, Limine Contributors (via Limine C++ example) */ // Halt and catch fire function. void hcf() { ffffffff80006ee0: f3 0f 1e fa endbr64 ffffffff80006ee4: 0f 1f 40 00 nopl 0x0(%rax) for (;;) { #if defined(__x86_64__) asm("hlt"); ffffffff80006ee8: f4 hlt for (;;) ffffffff80006ee9: eb fd jmp ffffffff80006ee8 <_Z3hcfv+0x8> ffffffff80006eeb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80006ef0 <_ZN2Kt10InitializeEPjmmmhhhhhh>: void Initialize(std::uint32_t *framebuffer, std::size_t width, std::size_t height, std::size_t pitch, std::uint8_t red_mask_size, std::uint8_t red_mask_shift, std::uint8_t green_mask_size, std::uint8_t green_mask_shift, std::uint8_t blue_mask_size, std::uint8_t blue_mask_shift ) { ffffffff80006ef0: f3 0f 1e fa endbr64 ffffffff80006ef4: 48 83 ec 08 sub $0x8,%rsp ffffffff80006ef8: 48 89 f8 mov %rdi,%rax ctx = flanterm_fb_init( ffffffff80006efb: 45 0f b6 c9 movzbl %r9b,%r9d ffffffff80006eff: 45 0f b6 c0 movzbl %r8b,%r8d ffffffff80006f03: 6a 00 push $0x0 ffffffff80006f05: 6a 00 push $0x0 ffffffff80006f07: 6a 00 push $0x0 ffffffff80006f09: 6a 01 push $0x1 ffffffff80006f0b: 6a 00 push $0x0 ffffffff80006f0d: 6a 00 push $0x0 ffffffff80006f0f: 6a 00 push $0x0 ffffffff80006f11: 6a 00 push $0x0 ffffffff80006f13: 6a 00 push $0x0 ffffffff80006f15: 6a 00 push $0x0 ffffffff80006f17: 6a 00 push $0x0 ffffffff80006f19: 6a 00 push $0x0 ffffffff80006f1b: 6a 00 push $0x0 ffffffff80006f1d: 6a 00 push $0x0 ffffffff80006f1f: 0f b6 bc 24 98 00 00 movzbl 0x98(%rsp),%edi ffffffff80006f26: 00 ffffffff80006f27: 57 push %rdi ffffffff80006f28: 0f b6 bc 24 98 00 00 movzbl 0x98(%rsp),%edi ffffffff80006f2f: 00 ffffffff80006f30: 57 push %rdi ffffffff80006f31: 0f b6 bc 24 98 00 00 movzbl 0x98(%rsp),%edi ffffffff80006f38: 00 ffffffff80006f39: 57 push %rdi ffffffff80006f3a: 0f b6 bc 24 98 00 00 movzbl 0x98(%rsp),%edi ffffffff80006f41: 00 ffffffff80006f42: 57 push %rdi ffffffff80006f43: 31 ff xor %edi,%edi ffffffff80006f45: 41 51 push %r9 ffffffff80006f47: 49 89 c9 mov %rcx,%r9 ffffffff80006f4a: 48 89 f1 mov %rsi,%rcx ffffffff80006f4d: 31 f6 xor %esi,%esi ffffffff80006f4f: 41 50 push %r8 ffffffff80006f51: 49 89 d0 mov %rdx,%r8 ffffffff80006f54: 48 89 c2 mov %rax,%rdx ffffffff80006f57: e8 04 b2 ff ff call ffffffff80002160 ffffffff80006f5c: 48 89 05 75 a8 0d 00 mov %rax,0xda875(%rip) # ffffffff800e17d8 <_ZN2Kt3ctxE> NULL, NULL, NULL, 0, 0, 1, 0, 0, 0 ); } ffffffff80006f63: 48 81 c4 a8 00 00 00 add $0xa8,%rsp ffffffff80006f6a: c3 ret ffffffff80006f6b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80006f70 <_ZN2Kt7PutcharEc>: void Putchar(char c) { ffffffff80006f70: f3 0f 1e fa endbr64 ffffffff80006f74: 48 83 ec 18 sub $0x18,%rsp flanterm_write(ctx, &c, 1); ffffffff80006f78: ba 01 00 00 00 mov $0x1,%edx void Putchar(char c) { ffffffff80006f7d: 40 88 7c 24 0c mov %dil,0xc(%rsp) flanterm_write(ctx, &c, 1); ffffffff80006f82: 48 8b 3d 4f a8 0d 00 mov 0xda84f(%rip),%rdi # ffffffff800e17d8 <_ZN2Kt3ctxE> ffffffff80006f89: 48 8d 74 24 0c lea 0xc(%rsp),%rsi ffffffff80006f8e: e8 2d c0 ff ff call ffffffff80002fc0 } ffffffff80006f93: 48 83 c4 18 add $0x18,%rsp ffffffff80006f97: c3 ret ffffffff80006f98: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) ffffffff80006f9f: 00 ffffffff80006fa0 <_ZN2Kt5PrintEPKc>: void Print(const char *text) { ffffffff80006fa0: f3 0f 1e fa endbr64 namespace Lib { inline int strlen(const char *string) { int c = 0; while (*string != '\0') { ffffffff80006fa4: 80 3f 00 cmpb $0x0,(%rdi) ffffffff80006fa7: 48 89 fe mov %rdi,%rsi ffffffff80006faa: 74 2c je ffffffff80006fd8 <_ZN2Kt5PrintEPKc+0x38> ffffffff80006fac: 48 89 f8 mov %rdi,%rax int c = 0; ffffffff80006faf: 31 d2 xor %edx,%edx ffffffff80006fb1: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) string++; ffffffff80006fb8: 48 83 c0 01 add $0x1,%rax c++; ffffffff80006fbc: 83 c2 01 add $0x1,%edx while (*string != '\0') { ffffffff80006fbf: 80 38 00 cmpb $0x0,(%rax) ffffffff80006fc2: 75 f4 jne ffffffff80006fb8 <_ZN2Kt5PrintEPKc+0x18> flanterm_write(ctx, text, Lib::strlen(text)); ffffffff80006fc4: 48 8b 3d 0d a8 0d 00 mov 0xda80d(%rip),%rdi # ffffffff800e17d8 <_ZN2Kt3ctxE> ffffffff80006fcb: 48 63 d2 movslq %edx,%rdx ffffffff80006fce: e9 ed bf ff ff jmp ffffffff80002fc0 ffffffff80006fd3: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80006fd8: 48 8b 3d f9 a7 0d 00 mov 0xda7f9(%rip),%rdi # ffffffff800e17d8 <_ZN2Kt3ctxE> ffffffff80006fdf: 31 d2 xor %edx,%edx ffffffff80006fe1: e9 da bf ff ff jmp ffffffff80002fc0 ffffffff80006fe6: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80006fed: 00 00 00 ffffffff80006ff0 : ffffffff80006ff0: 0f 01 17 lgdt (%rdi) ffffffff80006ff3: c3 ret ffffffff80006ff4 : ffffffff80006ff4: 6a 08 push $0x8 ffffffff80006ff6: 48 8d 05 03 00 00 00 lea 0x3(%rip),%rax # ffffffff80007000 ffffffff80006ffd: 50 push %rax ffffffff80006ffe: 48 cb lretq ffffffff80007000 : ffffffff80007000: 66 b8 10 00 mov $0x10,%ax ffffffff80007004: 8e d8 mov %eax,%ds ffffffff80007006: 8e c0 mov %eax,%es ffffffff80007008: 8e e0 mov %eax,%fs ffffffff8000700a: 8e e8 mov %eax,%gs ffffffff8000700c: 8e d0 mov %eax,%ss ffffffff8000700e: c3 ret kernel/bin-x86_64/kernel: file format elf64-x86-64 Disassembly of section .text: ffffffff80001000 : #endif static uint8_t bump_alloc_pool[FLANTERM_FB_BUMP_ALLOC_POOL_SIZE]; static size_t bump_alloc_ptr = 0; static void *bump_alloc(size_t s) { ffffffff80001000: f3 0f 1e fa endbr64 static bool base_offset_added = false; if (!base_offset_added) { ffffffff80001004: 80 3d f5 a0 00 00 00 cmpb $0x0,0xa0f5(%rip) # ffffffff8000b100 ffffffff8000100b: 75 07 jne ffffffff80001014 if ((uintptr_t)bump_alloc_pool & 0xf) { bump_alloc_ptr += 0x10 - ((uintptr_t)bump_alloc_pool & 0xf); } base_offset_added = true; ffffffff8000100d: c6 05 ec a0 00 00 01 movb $0x1,0xa0ec(%rip) # ffffffff8000b100 } if ((s & 0xf) != 0) { s += 0x10; s &= ~(size_t)0xf; ffffffff80001014: 48 8d 47 10 lea 0x10(%rdi),%rax ffffffff80001018: 48 83 e0 f0 and $0xfffffffffffffff0,%rax ffffffff8000101c: 40 f6 c7 0f test $0xf,%dil ffffffff80001020: 48 0f 45 f8 cmovne %rax,%rdi } size_t next_ptr = bump_alloc_ptr + s; ffffffff80001024: 48 8b 05 dd a0 00 00 mov 0xa0dd(%rip),%rax # ffffffff8000b108 ffffffff8000102b: 48 01 c7 add %rax,%rdi if (next_ptr > FLANTERM_FB_BUMP_ALLOC_POOL_SIZE) { ffffffff8000102e: 48 81 ff 28 52 0d 00 cmp $0xd5228,%rdi ffffffff80001035: 77 11 ja ffffffff80001048 return NULL; } void *ret = &bump_alloc_pool[bump_alloc_ptr]; bump_alloc_ptr = next_ptr; ffffffff80001037: 48 89 3d ca a0 00 00 mov %rdi,0xa0ca(%rip) # ffffffff8000b108 void *ret = &bump_alloc_pool[bump_alloc_ptr]; ffffffff8000103e: 48 05 20 b1 00 80 add $0xffffffff8000b120,%rax return ret; ffffffff80001044: c3 ret ffffffff80001045: 0f 1f 00 nopl (%rax) return NULL; ffffffff80001048: 31 c0 xor %eax,%eax } ffffffff8000104a: c3 ret ffffffff8000104b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80001050 : uint32_t g = (colour >> 8) & 0xff; uint32_t b = colour & 0xff; return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); } static void flanterm_fb_save_state(struct flanterm_context *_ctx) { ffffffff80001050: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; ctx->saved_state_text_fg = ctx->text_fg; ffffffff80001054: 48 8b 87 e0 02 00 00 mov 0x2e0(%rdi),%rax ctx->saved_state_text_bg = ctx->text_bg; ctx->saved_state_cursor_x = ctx->cursor_x; ffffffff8000105b: 48 8b 97 e8 02 00 00 mov 0x2e8(%rdi),%rdx ctx->saved_state_text_fg = ctx->text_fg; ffffffff80001062: 48 89 87 f8 02 00 00 mov %rax,0x2f8(%rdi) ctx->saved_state_cursor_x = ctx->cursor_x; ffffffff80001069: 48 8b 87 f0 02 00 00 mov 0x2f0(%rdi),%rax ffffffff80001070: 48 89 97 00 03 00 00 mov %rdx,0x300(%rdi) ffffffff80001077: 48 89 87 08 03 00 00 mov %rax,0x308(%rdi) ctx->saved_state_cursor_y = ctx->cursor_y; } ffffffff8000107e: c3 ret ffffffff8000107f: 90 nop ffffffff80001080 : static void flanterm_fb_restore_state(struct flanterm_context *_ctx) { ffffffff80001080: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; ctx->text_fg = ctx->saved_state_text_fg; ffffffff80001084: 48 8b 87 f8 02 00 00 mov 0x2f8(%rdi),%rax ctx->text_bg = ctx->saved_state_text_bg; ctx->cursor_x = ctx->saved_state_cursor_x; ffffffff8000108b: 48 8b 97 00 03 00 00 mov 0x300(%rdi),%rdx ctx->text_fg = ctx->saved_state_text_fg; ffffffff80001092: 48 89 87 e0 02 00 00 mov %rax,0x2e0(%rdi) ctx->cursor_x = ctx->saved_state_cursor_x; ffffffff80001099: 48 8b 87 08 03 00 00 mov 0x308(%rdi),%rax ffffffff800010a0: 48 89 97 e8 02 00 00 mov %rdx,0x2e8(%rdi) ffffffff800010a7: 48 89 87 f0 02 00 00 mov %rax,0x2f0(%rdi) ctx->cursor_y = ctx->saved_state_cursor_y; } ffffffff800010ae: c3 ret ffffffff800010af: 90 nop ffffffff800010b0 : static void flanterm_fb_swap_palette(struct flanterm_context *_ctx) { ffffffff800010b0: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; uint32_t tmp = ctx->text_bg; ctx->text_bg = ctx->text_fg; ctx->text_fg = tmp; ffffffff800010b4: 8b 97 e0 02 00 00 mov 0x2e0(%rdi),%edx ffffffff800010ba: 8b 87 e4 02 00 00 mov 0x2e4(%rdi),%eax ffffffff800010c0: 48 c1 e2 20 shl $0x20,%rdx ffffffff800010c4: 48 09 d0 or %rdx,%rax ffffffff800010c7: 48 89 87 e0 02 00 00 mov %rax,0x2e0(%rdi) } ffffffff800010ce: c3 ret ffffffff800010cf: 90 nop ffffffff800010d0 : static inline bool compare_char(struct flanterm_fb_char *a, struct flanterm_fb_char *b) { return !(a->c != b->c || a->bg != b->bg || a->fg != b->fg); } static void push_to_queue(struct flanterm_context *_ctx, struct flanterm_fb_char *c, size_t x, size_t y) { ffffffff800010d0: 49 89 f0 mov %rsi,%r8 ffffffff800010d3: 48 89 ce mov %rcx,%rsi struct flanterm_fb_context *ctx = (void *)_ctx; if (x >= _ctx->cols || y >= _ctx->rows) { ffffffff800010d6: 48 8b 8f e8 00 00 00 mov 0xe8(%rdi),%rcx static void push_to_queue(struct flanterm_context *_ctx, struct flanterm_fb_char *c, size_t x, size_t y) { ffffffff800010dd: 48 89 f8 mov %rdi,%rax if (x >= _ctx->cols || y >= _ctx->rows) { ffffffff800010e0: 48 39 ca cmp %rcx,%rdx ffffffff800010e3: 73 31 jae ffffffff80001116 ffffffff800010e5: 48 3b b7 e0 00 00 00 cmp 0xe0(%rdi),%rsi ffffffff800010ec: 73 28 jae ffffffff80001116 return; } size_t i = y * _ctx->cols + x; ffffffff800010ee: 48 0f af ce imul %rsi,%rcx struct flanterm_fb_queue_item *q = ctx->map[i]; ffffffff800010f2: 48 8b bf d8 02 00 00 mov 0x2d8(%rdi),%rdi size_t i = y * _ctx->cols + x; ffffffff800010f9: 48 01 d1 add %rdx,%rcx struct flanterm_fb_queue_item *q = ctx->map[i]; ffffffff800010fc: 4c 8d 0c cf lea (%rdi,%rcx,8),%r9 ffffffff80001100: 49 8b 39 mov (%r9),%rdi if (q == NULL) { ffffffff80001103: 48 85 ff test %rdi,%rdi ffffffff80001106: 74 18 je ffffffff80001120 q->x = x; q->y = y; ctx->map[i] = q; } q->c = *c; ffffffff80001108: 49 8b 00 mov (%r8),%rax ffffffff8000110b: 48 89 47 10 mov %rax,0x10(%rdi) ffffffff8000110f: 41 8b 40 08 mov 0x8(%r8),%eax ffffffff80001113: 89 47 18 mov %eax,0x18(%rdi) } ffffffff80001116: c3 ret ffffffff80001117: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff8000111e: 00 00 if (compare_char(&ctx->grid[i], c)) { ffffffff80001120: 48 8d 3c 49 lea (%rcx,%rcx,2),%rdi ffffffff80001124: 48 8b 88 c0 02 00 00 mov 0x2c0(%rax),%rcx ffffffff8000112b: 48 8d 0c b9 lea (%rcx,%rdi,4),%rcx return !(a->c != b->c || a->bg != b->bg || a->fg != b->fg); ffffffff8000112f: 41 8b 38 mov (%r8),%edi ffffffff80001132: 39 39 cmp %edi,(%rcx) ffffffff80001134: 74 2a je ffffffff80001160 q = &ctx->queue[ctx->queue_i++]; ffffffff80001136: 48 8b b8 d0 02 00 00 mov 0x2d0(%rax),%rdi ffffffff8000113d: 48 8d 4f 01 lea 0x1(%rdi),%rcx ffffffff80001141: 48 c1 e7 05 shl $0x5,%rdi ffffffff80001145: 48 03 b8 c8 02 00 00 add 0x2c8(%rax),%rdi ffffffff8000114c: 48 89 88 d0 02 00 00 mov %rcx,0x2d0(%rax) q->x = x; ffffffff80001153: 48 89 17 mov %rdx,(%rdi) q->y = y; ffffffff80001156: 48 89 77 08 mov %rsi,0x8(%rdi) ctx->map[i] = q; ffffffff8000115a: 49 89 39 mov %rdi,(%r9) ffffffff8000115d: eb a9 jmp ffffffff80001108 ffffffff8000115f: 90 nop return !(a->c != b->c || a->bg != b->bg || a->fg != b->fg); ffffffff80001160: 41 8b 78 08 mov 0x8(%r8),%edi ffffffff80001164: 39 79 08 cmp %edi,0x8(%rcx) ffffffff80001167: 75 cd jne ffffffff80001136 ffffffff80001169: 41 8b 78 04 mov 0x4(%r8),%edi ffffffff8000116d: 39 79 04 cmp %edi,0x4(%rcx) ffffffff80001170: 75 c4 jne ffffffff80001136 } ffffffff80001172: c3 ret ffffffff80001173: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff8000117a: 00 00 00 ffffffff8000117d: 0f 1f 00 nopl (%rax) ffffffff80001180 : static void flanterm_fb_revscroll(struct flanterm_context *_ctx) { ffffffff80001180: f3 0f 1e fa endbr64 ffffffff80001184: 41 55 push %r13 ffffffff80001186: 41 54 push %r12 ffffffff80001188: 55 push %rbp ffffffff80001189: 53 push %rbx ffffffff8000118a: 48 89 fb mov %rdi,%rbx ffffffff8000118d: 48 83 ec 10 sub $0x10,%rsp struct flanterm_fb_context *ctx = (void *)_ctx; for (size_t i = (_ctx->scroll_bottom_margin - 1) * _ctx->cols - 1; ffffffff80001191: 48 8b 47 70 mov 0x70(%rdi),%rax ffffffff80001195: 4c 8b 9f e8 00 00 00 mov 0xe8(%rdi),%r11 i >= _ctx->scroll_top_margin * _ctx->cols; i--) { ffffffff8000119c: 48 8b 6f 68 mov 0x68(%rdi),%rbp for (size_t i = (_ctx->scroll_bottom_margin - 1) * _ctx->cols - 1; ffffffff800011a0: 48 83 e8 01 sub $0x1,%rax i >= _ctx->scroll_top_margin * _ctx->cols; i--) { ffffffff800011a4: 4d 89 dc mov %r11,%r12 for (size_t i = (_ctx->scroll_bottom_margin - 1) * _ctx->cols - 1; ffffffff800011a7: 49 0f af c3 imul %r11,%rax i >= _ctx->scroll_top_margin * _ctx->cols; i--) { ffffffff800011ab: 4c 0f af e5 imul %rbp,%r12 if (i == (size_t)-1) { ffffffff800011af: 48 85 c0 test %rax,%rax ffffffff800011b2: 74 5c je ffffffff80001210 ffffffff800011b4: 4c 8d 50 ff lea -0x1(%rax),%r10 ffffffff800011b8: 4d 39 e2 cmp %r12,%r10 ffffffff800011bb: 72 53 jb ffffffff80001210 break; } struct flanterm_fb_char *c; struct flanterm_fb_queue_item *q = ctx->map[i]; ffffffff800011bd: 4c 8b af d8 02 00 00 mov 0x2d8(%rdi),%r13 ffffffff800011c4: eb 2d jmp ffffffff800011f3 ffffffff800011c6: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff800011cd: 00 00 00 if (q != NULL) { c = &q->c; ffffffff800011d0: 48 83 c6 10 add $0x10,%rsi } else { c = &ctx->grid[i]; } push_to_queue(_ctx, c, (i + _ctx->cols) % _ctx->cols, (i + _ctx->cols) / _ctx->cols); ffffffff800011d4: 4b 8d 04 13 lea (%r11,%r10,1),%rax ffffffff800011d8: 31 d2 xor %edx,%edx ffffffff800011da: 48 89 df mov %rbx,%rdi ffffffff800011dd: 49 f7 f3 div %r11 ffffffff800011e0: 48 89 c1 mov %rax,%rcx ffffffff800011e3: e8 e8 fe ff ff call ffffffff800010d0 if (i == (size_t)-1) { ffffffff800011e8: 49 83 ea 01 sub $0x1,%r10 ffffffff800011ec: 72 22 jb ffffffff80001210 ffffffff800011ee: 4d 39 e2 cmp %r12,%r10 ffffffff800011f1: 72 1d jb ffffffff80001210 struct flanterm_fb_queue_item *q = ctx->map[i]; ffffffff800011f3: 4b 8b 74 d5 00 mov 0x0(%r13,%r10,8),%rsi if (q != NULL) { ffffffff800011f8: 48 85 f6 test %rsi,%rsi ffffffff800011fb: 75 d3 jne ffffffff800011d0 c = &ctx->grid[i]; ffffffff800011fd: 48 8b 93 c0 02 00 00 mov 0x2c0(%rbx),%rdx ffffffff80001204: 4b 8d 04 52 lea (%r10,%r10,2),%rax ffffffff80001208: 48 8d 34 82 lea (%rdx,%rax,4),%rsi ffffffff8000120c: eb c6 jmp ffffffff800011d4 ffffffff8000120e: 66 90 xchg %ax,%ax } // Clear the first line of the screen. struct flanterm_fb_char empty; empty.c = ' '; empty.fg = ctx->text_fg; ffffffff80001210: 48 8b 83 e0 02 00 00 mov 0x2e0(%rbx),%rax empty.c = ' '; ffffffff80001217: c7 44 24 04 20 00 00 movl $0x20,0x4(%rsp) ffffffff8000121e: 00 empty.bg = ctx->text_bg; for (size_t i = 0; i < _ctx->cols; i++) { ffffffff8000121f: 31 d2 xor %edx,%edx empty.fg = ctx->text_fg; ffffffff80001221: 48 89 44 24 08 mov %rax,0x8(%rsp) for (size_t i = 0; i < _ctx->cols; i++) { ffffffff80001226: 4d 85 db test %r11,%r11 ffffffff80001229: 74 1e je ffffffff80001249 ffffffff8000122b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) push_to_queue(_ctx, &empty, i, _ctx->scroll_top_margin); ffffffff80001230: 48 89 e9 mov %rbp,%rcx ffffffff80001233: 48 8d 74 24 04 lea 0x4(%rsp),%rsi ffffffff80001238: 48 89 df mov %rbx,%rdi ffffffff8000123b: e8 90 fe ff ff call ffffffff800010d0 for (size_t i = 0; i < _ctx->cols; i++) { ffffffff80001240: 48 83 c2 01 add $0x1,%rdx ffffffff80001244: 49 39 d3 cmp %rdx,%r11 ffffffff80001247: 75 e7 jne ffffffff80001230 } } ffffffff80001249: 48 83 c4 10 add $0x10,%rsp ffffffff8000124d: 5b pop %rbx ffffffff8000124e: 5d pop %rbp ffffffff8000124f: 41 5c pop %r12 ffffffff80001251: 41 5d pop %r13 ffffffff80001253: c3 ret ffffffff80001254: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff8000125b: 00 00 00 ffffffff8000125e: 66 90 xchg %ax,%ax ffffffff80001260 : static void flanterm_fb_scroll(struct flanterm_context *_ctx) { ffffffff80001260: f3 0f 1e fa endbr64 ffffffff80001264: 41 56 push %r14 ffffffff80001266: 41 55 push %r13 ffffffff80001268: 41 54 push %r12 ffffffff8000126a: 55 push %rbp ffffffff8000126b: 53 push %rbx ffffffff8000126c: 48 89 fb mov %rdi,%rbx ffffffff8000126f: 48 83 ec 10 sub $0x10,%rsp struct flanterm_fb_context *ctx = (void *)_ctx; for (size_t i = (_ctx->scroll_top_margin + 1) * _ctx->cols; ffffffff80001273: 4c 8b 9f e8 00 00 00 mov 0xe8(%rdi),%r11 ffffffff8000127a: 48 8b 47 68 mov 0x68(%rdi),%rax i < _ctx->scroll_bottom_margin * _ctx->cols; i++) { ffffffff8000127e: 48 8b 6f 70 mov 0x70(%rdi),%rbp for (size_t i = (_ctx->scroll_top_margin + 1) * _ctx->cols; ffffffff80001282: 48 83 c0 01 add $0x1,%rax i < _ctx->scroll_bottom_margin * _ctx->cols; i++) { ffffffff80001286: 4d 89 dc mov %r11,%r12 for (size_t i = (_ctx->scroll_top_margin + 1) * _ctx->cols; ffffffff80001289: 49 0f af c3 imul %r11,%rax i < _ctx->scroll_bottom_margin * _ctx->cols; i++) { ffffffff8000128d: 4c 0f af e5 imul %rbp,%r12 ffffffff80001291: 4c 39 e0 cmp %r12,%rax ffffffff80001294: 73 62 jae ffffffff800012f8 ffffffff80001296: 49 89 c2 mov %rax,%r10 ffffffff80001299: 4c 8d 34 40 lea (%rax,%rax,2),%r14 ffffffff8000129d: 48 8b 87 d8 02 00 00 mov 0x2d8(%rdi),%rax ffffffff800012a4: 4d 29 dc sub %r11,%r12 ffffffff800012a7: 4d 29 da sub %r11,%r10 ffffffff800012aa: 49 c1 e6 02 shl $0x2,%r14 ffffffff800012ae: 4e 8d 2c d8 lea (%rax,%r11,8),%r13 ffffffff800012b2: eb 28 jmp ffffffff800012dc ffffffff800012b4: 0f 1f 40 00 nopl 0x0(%rax) struct flanterm_fb_char *c; struct flanterm_fb_queue_item *q = ctx->map[i]; if (q != NULL) { c = &q->c; ffffffff800012b8: 48 83 c6 10 add $0x10,%rsi } else { c = &ctx->grid[i]; } push_to_queue(_ctx, c, (i - _ctx->cols) % _ctx->cols, (i - _ctx->cols) / _ctx->cols); ffffffff800012bc: 4c 89 d0 mov %r10,%rax ffffffff800012bf: 31 d2 xor %edx,%edx ffffffff800012c1: 48 89 df mov %rbx,%rdi i < _ctx->scroll_bottom_margin * _ctx->cols; i++) { ffffffff800012c4: 49 83 c2 01 add $0x1,%r10 ffffffff800012c8: 49 f7 f3 div %r11 ffffffff800012cb: 49 83 c6 0c add $0xc,%r14 ffffffff800012cf: 48 89 c1 mov %rax,%rcx push_to_queue(_ctx, c, (i - _ctx->cols) % _ctx->cols, (i - _ctx->cols) / _ctx->cols); ffffffff800012d2: e8 f9 fd ff ff call ffffffff800010d0 i < _ctx->scroll_bottom_margin * _ctx->cols; i++) { ffffffff800012d7: 4d 39 d4 cmp %r10,%r12 ffffffff800012da: 74 1c je ffffffff800012f8 struct flanterm_fb_queue_item *q = ctx->map[i]; ffffffff800012dc: 4b 8b 74 d5 00 mov 0x0(%r13,%r10,8),%rsi if (q != NULL) { ffffffff800012e1: 48 85 f6 test %rsi,%rsi ffffffff800012e4: 75 d2 jne ffffffff800012b8 c = &ctx->grid[i]; ffffffff800012e6: 48 8b b3 c0 02 00 00 mov 0x2c0(%rbx),%rsi ffffffff800012ed: 4c 01 f6 add %r14,%rsi ffffffff800012f0: eb ca jmp ffffffff800012bc ffffffff800012f2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) } // Clear the last line of the screen. struct flanterm_fb_char empty; empty.c = ' '; empty.fg = ctx->text_fg; ffffffff800012f8: 48 8b 83 e0 02 00 00 mov 0x2e0(%rbx),%rax empty.c = ' '; ffffffff800012ff: c7 44 24 04 20 00 00 movl $0x20,0x4(%rsp) ffffffff80001306: 00 empty.bg = ctx->text_bg; for (size_t i = 0; i < _ctx->cols; i++) { push_to_queue(_ctx, &empty, i, _ctx->scroll_bottom_margin - 1); ffffffff80001307: 48 83 ed 01 sub $0x1,%rbp for (size_t i = 0; i < _ctx->cols; i++) { ffffffff8000130b: 31 d2 xor %edx,%edx empty.fg = ctx->text_fg; ffffffff8000130d: 48 89 44 24 08 mov %rax,0x8(%rsp) for (size_t i = 0; i < _ctx->cols; i++) { ffffffff80001312: 4d 85 db test %r11,%r11 ffffffff80001315: 74 22 je ffffffff80001339 ffffffff80001317: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff8000131e: 00 00 push_to_queue(_ctx, &empty, i, _ctx->scroll_bottom_margin - 1); ffffffff80001320: 48 89 e9 mov %rbp,%rcx ffffffff80001323: 48 8d 74 24 04 lea 0x4(%rsp),%rsi ffffffff80001328: 48 89 df mov %rbx,%rdi ffffffff8000132b: e8 a0 fd ff ff call ffffffff800010d0 for (size_t i = 0; i < _ctx->cols; i++) { ffffffff80001330: 48 83 c2 01 add $0x1,%rdx ffffffff80001334: 49 39 d3 cmp %rdx,%r11 ffffffff80001337: 75 e7 jne ffffffff80001320 } } ffffffff80001339: 48 83 c4 10 add $0x10,%rsp ffffffff8000133d: 5b pop %rbx ffffffff8000133e: 5d pop %rbp ffffffff8000133f: 41 5c pop %r12 ffffffff80001341: 41 5d pop %r13 ffffffff80001343: 41 5e pop %r14 ffffffff80001345: c3 ret ffffffff80001346: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff8000134d: 00 00 00 ffffffff80001350 : static void flanterm_fb_clear(struct flanterm_context *_ctx, bool move) { ffffffff80001350: f3 0f 1e fa endbr64 ffffffff80001354: 41 54 push %r12 ffffffff80001356: 41 89 f4 mov %esi,%r12d ffffffff80001359: 55 push %rbp ffffffff8000135a: 53 push %rbx ffffffff8000135b: 48 89 fb mov %rdi,%rbx ffffffff8000135e: 48 83 ec 10 sub $0x10,%rsp struct flanterm_fb_char empty; empty.c = ' '; empty.fg = ctx->text_fg; empty.bg = ctx->text_bg; for (size_t i = 0; i < _ctx->rows * _ctx->cols; i++) { ffffffff80001362: 4c 8b 9f e8 00 00 00 mov 0xe8(%rdi),%r11 ffffffff80001369: 48 8b af e0 00 00 00 mov 0xe0(%rdi),%rbp empty.fg = ctx->text_fg; ffffffff80001370: 48 8b 87 e0 02 00 00 mov 0x2e0(%rdi),%rax empty.c = ' '; ffffffff80001377: c7 44 24 04 20 00 00 movl $0x20,0x4(%rsp) ffffffff8000137e: 00 for (size_t i = 0; i < _ctx->rows * _ctx->cols; i++) { ffffffff8000137f: 49 0f af eb imul %r11,%rbp empty.fg = ctx->text_fg; ffffffff80001383: 48 89 44 24 08 mov %rax,0x8(%rsp) for (size_t i = 0; i < _ctx->rows * _ctx->cols; i++) { ffffffff80001388: 48 85 ed test %rbp,%rbp ffffffff8000138b: 74 24 je ffffffff800013b1 ffffffff8000138d: 45 31 d2 xor %r10d,%r10d push_to_queue(_ctx, &empty, i % _ctx->cols, i / _ctx->cols); ffffffff80001390: 4c 89 d0 mov %r10,%rax ffffffff80001393: 31 d2 xor %edx,%edx ffffffff80001395: 48 8d 74 24 04 lea 0x4(%rsp),%rsi ffffffff8000139a: 48 89 df mov %rbx,%rdi ffffffff8000139d: 49 f7 f3 div %r11 for (size_t i = 0; i < _ctx->rows * _ctx->cols; i++) { ffffffff800013a0: 49 83 c2 01 add $0x1,%r10 ffffffff800013a4: 48 89 c1 mov %rax,%rcx push_to_queue(_ctx, &empty, i % _ctx->cols, i / _ctx->cols); ffffffff800013a7: e8 24 fd ff ff call ffffffff800010d0 for (size_t i = 0; i < _ctx->rows * _ctx->cols; i++) { ffffffff800013ac: 49 39 ea cmp %rbp,%r10 ffffffff800013af: 75 df jne ffffffff80001390 } if (move) { ffffffff800013b1: 45 84 e4 test %r12b,%r12b ffffffff800013b4: 74 16 je ffffffff800013cc ctx->cursor_x = 0; ffffffff800013b6: 48 c7 83 e8 02 00 00 movq $0x0,0x2e8(%rbx) ffffffff800013bd: 00 00 00 00 ctx->cursor_y = 0; ffffffff800013c1: 48 c7 83 f0 02 00 00 movq $0x0,0x2f0(%rbx) ffffffff800013c8: 00 00 00 00 } } ffffffff800013cc: 48 83 c4 10 add $0x10,%rsp ffffffff800013d0: 5b pop %rbx ffffffff800013d1: 5d pop %rbp ffffffff800013d2: 41 5c pop %r12 ffffffff800013d4: c3 ret ffffffff800013d5: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff800013dc: 00 00 00 ffffffff800013df: 90 nop ffffffff800013e0 : static void flanterm_fb_set_cursor_pos(struct flanterm_context *_ctx, size_t x, size_t y) { ffffffff800013e0: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; if (x >= _ctx->cols) { ffffffff800013e4: 48 8b 87 e8 00 00 00 mov 0xe8(%rdi),%rax ffffffff800013eb: 48 39 c6 cmp %rax,%rsi ffffffff800013ee: 72 0f jb ffffffff800013ff if ((int)x < 0) { x = 0; } else { x = _ctx->cols - 1; ffffffff800013f0: 48 83 e8 01 sub $0x1,%rax ffffffff800013f4: 85 f6 test %esi,%esi ffffffff800013f6: be 00 00 00 00 mov $0x0,%esi ffffffff800013fb: 48 0f 49 f0 cmovns %rax,%rsi } } if (y >= _ctx->rows) { ffffffff800013ff: 48 8b 87 e0 00 00 00 mov 0xe0(%rdi),%rax ffffffff80001406: 48 39 c2 cmp %rax,%rdx ffffffff80001409: 72 0f jb ffffffff8000141a if ((int)y < 0) { y = 0; } else { y = _ctx->rows - 1; ffffffff8000140b: 48 83 e8 01 sub $0x1,%rax ffffffff8000140f: 85 d2 test %edx,%edx ffffffff80001411: ba 00 00 00 00 mov $0x0,%edx ffffffff80001416: 48 0f 49 d0 cmovns %rax,%rdx } } ctx->cursor_x = x; ffffffff8000141a: 48 89 b7 e8 02 00 00 mov %rsi,0x2e8(%rdi) ctx->cursor_y = y; ffffffff80001421: 48 89 97 f0 02 00 00 mov %rdx,0x2f0(%rdi) } ffffffff80001428: c3 ret ffffffff80001429: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) ffffffff80001430 : static void flanterm_fb_get_cursor_pos(struct flanterm_context *_ctx, size_t *x, size_t *y) { ffffffff80001430: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; *x = ctx->cursor_x >= _ctx->cols ? _ctx->cols - 1 : ctx->cursor_x; ffffffff80001434: 48 8b 87 e8 02 00 00 mov 0x2e8(%rdi),%rax static void flanterm_fb_get_cursor_pos(struct flanterm_context *_ctx, size_t *x, size_t *y) { ffffffff8000143b: 48 89 d1 mov %rdx,%rcx *x = ctx->cursor_x >= _ctx->cols ? _ctx->cols - 1 : ctx->cursor_x; ffffffff8000143e: 48 8b 97 e8 00 00 00 mov 0xe8(%rdi),%rdx ffffffff80001445: 48 39 d0 cmp %rdx,%rax ffffffff80001448: 4c 8d 42 ff lea -0x1(%rdx),%r8 ffffffff8000144c: 49 0f 43 c0 cmovae %r8,%rax ffffffff80001450: 48 89 06 mov %rax,(%rsi) *y = ctx->cursor_y >= _ctx->rows ? _ctx->rows - 1 : ctx->cursor_y; ffffffff80001453: 48 8b 87 f0 02 00 00 mov 0x2f0(%rdi),%rax ffffffff8000145a: 48 8b 97 e0 00 00 00 mov 0xe0(%rdi),%rdx ffffffff80001461: 48 8d 72 ff lea -0x1(%rdx),%rsi ffffffff80001465: 48 39 d0 cmp %rdx,%rax ffffffff80001468: 48 0f 43 c6 cmovae %rsi,%rax ffffffff8000146c: 48 89 01 mov %rax,(%rcx) } ffffffff8000146f: c3 ret ffffffff80001470 : static void flanterm_fb_move_character(struct flanterm_context *_ctx, size_t new_x, size_t new_y, size_t old_x, size_t old_y) { ffffffff80001470: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; if (old_x >= _ctx->cols || old_y >= _ctx->rows ffffffff80001474: 48 8b 87 e8 00 00 00 mov 0xe8(%rdi),%rax ffffffff8000147b: 48 39 c1 cmp %rax,%rcx ffffffff8000147e: 73 1f jae ffffffff8000149f ffffffff80001480: 4c 8b 97 e0 00 00 00 mov 0xe0(%rdi),%r10 || new_x >= _ctx->cols || new_y >= _ctx->rows) { ffffffff80001487: 48 39 c6 cmp %rax,%rsi ffffffff8000148a: 41 0f 93 c1 setae %r9b if (old_x >= _ctx->cols || old_y >= _ctx->rows ffffffff8000148e: 4d 39 d0 cmp %r10,%r8 ffffffff80001491: 41 0f 93 c3 setae %r11b || new_x >= _ctx->cols || new_y >= _ctx->rows) { ffffffff80001495: 45 08 d9 or %r11b,%r9b ffffffff80001498: 75 05 jne ffffffff8000149f ffffffff8000149a: 4c 39 d2 cmp %r10,%rdx ffffffff8000149d: 72 01 jb ffffffff800014a0 } else { c = &ctx->grid[i]; } push_to_queue(_ctx, c, new_x, new_y); } ffffffff8000149f: c3 ret size_t i = old_x + old_y * _ctx->cols; ffffffff800014a0: 49 0f af c0 imul %r8,%rax ffffffff800014a4: 48 01 c8 add %rcx,%rax struct flanterm_fb_queue_item *q = ctx->map[i]; ffffffff800014a7: 48 8b 8f d8 02 00 00 mov 0x2d8(%rdi),%rcx ffffffff800014ae: 48 8b 0c c1 mov (%rcx,%rax,8),%rcx if (q != NULL) { ffffffff800014b2: 48 85 c9 test %rcx,%rcx ffffffff800014b5: 74 19 je ffffffff800014d0 c = &q->c; ffffffff800014b7: 48 8d 41 10 lea 0x10(%rcx),%rax push_to_queue(_ctx, c, new_x, new_y); ffffffff800014bb: 48 89 d1 mov %rdx,%rcx ffffffff800014be: 48 89 f2 mov %rsi,%rdx ffffffff800014c1: 48 89 c6 mov %rax,%rsi ffffffff800014c4: e9 07 fc ff ff jmp ffffffff800010d0 ffffffff800014c9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) c = &ctx->grid[i]; ffffffff800014d0: 48 8d 0c 40 lea (%rax,%rax,2),%rcx ffffffff800014d4: 48 8b 87 c0 02 00 00 mov 0x2c0(%rdi),%rax ffffffff800014db: 48 8d 04 88 lea (%rax,%rcx,4),%rax ffffffff800014df: eb da jmp ffffffff800014bb ffffffff800014e1: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff800014e8: 00 00 00 ffffffff800014eb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff800014f0 : static void flanterm_fb_set_text_fg(struct flanterm_context *_ctx, size_t fg) { ffffffff800014f0: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; ctx->text_fg = ctx->ansi_colours[fg]; ffffffff800014f4: 8b 84 b7 48 02 00 00 mov 0x248(%rdi,%rsi,4),%eax ffffffff800014fb: 89 87 e0 02 00 00 mov %eax,0x2e0(%rdi) } ffffffff80001501: c3 ret ffffffff80001502: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80001509: 00 00 00 ffffffff8000150c: 0f 1f 40 00 nopl 0x0(%rax) ffffffff80001510 : static void flanterm_fb_set_text_bg(struct flanterm_context *_ctx, size_t bg) { ffffffff80001510: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; ctx->text_bg = ctx->ansi_colours[bg]; ffffffff80001514: 8b 84 b7 48 02 00 00 mov 0x248(%rdi,%rsi,4),%eax ffffffff8000151b: 89 87 e4 02 00 00 mov %eax,0x2e4(%rdi) } ffffffff80001521: c3 ret ffffffff80001522: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80001529: 00 00 00 ffffffff8000152c: 0f 1f 40 00 nopl 0x0(%rax) ffffffff80001530 : static void flanterm_fb_set_text_fg_bright(struct flanterm_context *_ctx, size_t fg) { ffffffff80001530: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; ctx->text_fg = ctx->ansi_bright_colours[fg]; ffffffff80001534: 8b 84 b7 68 02 00 00 mov 0x268(%rdi,%rsi,4),%eax ffffffff8000153b: 89 87 e0 02 00 00 mov %eax,0x2e0(%rdi) } ffffffff80001541: c3 ret ffffffff80001542: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80001549: 00 00 00 ffffffff8000154c: 0f 1f 40 00 nopl 0x0(%rax) ffffffff80001550 : static void flanterm_fb_set_text_bg_bright(struct flanterm_context *_ctx, size_t bg) { ffffffff80001550: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; ctx->text_bg = ctx->ansi_bright_colours[bg]; ffffffff80001554: 8b 84 b7 68 02 00 00 mov 0x268(%rdi,%rsi,4),%eax ffffffff8000155b: 89 87 e4 02 00 00 mov %eax,0x2e4(%rdi) } ffffffff80001561: c3 ret ffffffff80001562: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80001569: 00 00 00 ffffffff8000156c: 0f 1f 40 00 nopl 0x0(%rax) ffffffff80001570 : static void flanterm_fb_set_text_fg_rgb(struct flanterm_context *_ctx, uint32_t fg) { ffffffff80001570: f3 0f 1e fa endbr64 uint32_t r = (colour >> 16) & 0xff; ffffffff80001574: 89 f0 mov %esi,%eax return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80001576: 0f b6 8f 21 02 00 00 movzbl 0x221(%rdi),%ecx static void flanterm_fb_set_text_fg_rgb(struct flanterm_context *_ctx, uint32_t fg) { ffffffff8000157d: 89 f2 mov %esi,%edx uint32_t r = (colour >> 16) & 0xff; ffffffff8000157f: c1 e8 10 shr $0x10,%eax uint32_t g = (colour >> 8) & 0xff; ffffffff80001582: 0f b6 f6 movzbl %dh,%esi uint32_t b = colour & 0xff; ffffffff80001585: 0f b6 d2 movzbl %dl,%edx uint32_t r = (colour >> 16) & 0xff; ffffffff80001588: 0f b6 c0 movzbl %al,%eax return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff8000158b: d3 e0 shl %cl,%eax ffffffff8000158d: 0f b6 8f 23 02 00 00 movzbl 0x223(%rdi),%ecx ffffffff80001594: d3 e6 shl %cl,%esi ffffffff80001596: 0f b6 8f 25 02 00 00 movzbl 0x225(%rdi),%ecx ffffffff8000159d: 09 f0 or %esi,%eax ffffffff8000159f: d3 e2 shl %cl,%edx ffffffff800015a1: 09 d0 or %edx,%eax ffffffff800015a3: 89 87 e0 02 00 00 mov %eax,0x2e0(%rdi) struct flanterm_fb_context *ctx = (void *)_ctx; ctx->text_fg = convert_colour(_ctx, fg); } ffffffff800015a9: c3 ret ffffffff800015aa: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) ffffffff800015b0 : static void flanterm_fb_set_text_bg_rgb(struct flanterm_context *_ctx, uint32_t bg) { ffffffff800015b0: f3 0f 1e fa endbr64 uint32_t r = (colour >> 16) & 0xff; ffffffff800015b4: 89 f0 mov %esi,%eax return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff800015b6: 0f b6 8f 21 02 00 00 movzbl 0x221(%rdi),%ecx static void flanterm_fb_set_text_bg_rgb(struct flanterm_context *_ctx, uint32_t bg) { ffffffff800015bd: 89 f2 mov %esi,%edx uint32_t r = (colour >> 16) & 0xff; ffffffff800015bf: c1 e8 10 shr $0x10,%eax uint32_t g = (colour >> 8) & 0xff; ffffffff800015c2: 0f b6 f6 movzbl %dh,%esi uint32_t b = colour & 0xff; ffffffff800015c5: 0f b6 d2 movzbl %dl,%edx uint32_t r = (colour >> 16) & 0xff; ffffffff800015c8: 0f b6 c0 movzbl %al,%eax return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff800015cb: d3 e0 shl %cl,%eax ffffffff800015cd: 0f b6 8f 23 02 00 00 movzbl 0x223(%rdi),%ecx ffffffff800015d4: d3 e6 shl %cl,%esi ffffffff800015d6: 0f b6 8f 25 02 00 00 movzbl 0x225(%rdi),%ecx ffffffff800015dd: 09 f0 or %esi,%eax ffffffff800015df: d3 e2 shl %cl,%edx ffffffff800015e1: 09 d0 or %edx,%eax ffffffff800015e3: 89 87 e4 02 00 00 mov %eax,0x2e4(%rdi) struct flanterm_fb_context *ctx = (void *)_ctx; ctx->text_bg = convert_colour(_ctx, bg); } ffffffff800015e9: c3 ret ffffffff800015ea: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) ffffffff800015f0 : static void flanterm_fb_set_text_fg_default(struct flanterm_context *_ctx) { ffffffff800015f0: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; ctx->text_fg = ctx->default_fg; ffffffff800015f4: 8b 87 88 02 00 00 mov 0x288(%rdi),%eax ffffffff800015fa: 89 87 e0 02 00 00 mov %eax,0x2e0(%rdi) } ffffffff80001600: c3 ret ffffffff80001601: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80001608: 00 00 00 ffffffff8000160b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80001610 : static void flanterm_fb_set_text_bg_default(struct flanterm_context *_ctx) { ffffffff80001610: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; ctx->text_bg = 0xffffffff; ffffffff80001614: c7 87 e4 02 00 00 ff movl $0xffffffff,0x2e4(%rdi) ffffffff8000161b: ff ff ff } ffffffff8000161e: c3 ret ffffffff8000161f: 90 nop ffffffff80001620 : static void flanterm_fb_set_text_fg_default_bright(struct flanterm_context *_ctx) { ffffffff80001620: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; ctx->text_fg = ctx->default_fg_bright; ffffffff80001624: 8b 87 90 02 00 00 mov 0x290(%rdi),%eax ffffffff8000162a: 89 87 e0 02 00 00 mov %eax,0x2e0(%rdi) } ffffffff80001630: c3 ret ffffffff80001631: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80001638: 00 00 00 ffffffff8000163b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80001640 : static void flanterm_fb_set_text_bg_default_bright(struct flanterm_context *_ctx) { ffffffff80001640: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; ctx->text_bg = ctx->default_bg_bright; ffffffff80001644: 8b 87 94 02 00 00 mov 0x294(%rdi),%eax ffffffff8000164a: 89 87 e4 02 00 00 mov %eax,0x2e4(%rdi) } ffffffff80001650: c3 ret ffffffff80001651: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80001658: 00 00 00 ffffffff8000165b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80001660 : static void draw_cursor(struct flanterm_context *_ctx) { struct flanterm_fb_context *ctx = (void *)_ctx; if (ctx->cursor_x >= _ctx->cols || ctx->cursor_y >= _ctx->rows) { ffffffff80001660: 48 8b 97 e8 02 00 00 mov 0x2e8(%rdi),%rdx ffffffff80001667: 48 8b 87 e8 00 00 00 mov 0xe8(%rdi),%rax ffffffff8000166e: 48 39 c2 cmp %rax,%rdx ffffffff80001671: 0f 83 a1 00 00 00 jae ffffffff80001718 static void draw_cursor(struct flanterm_context *_ctx) { ffffffff80001677: 41 55 push %r13 ffffffff80001679: 41 54 push %r12 ffffffff8000167b: 55 push %rbp ffffffff8000167c: 53 push %rbx ffffffff8000167d: 48 89 fb mov %rdi,%rbx ffffffff80001680: 48 83 ec 18 sub $0x18,%rsp if (ctx->cursor_x >= _ctx->cols || ctx->cursor_y >= _ctx->rows) { ffffffff80001684: 48 8b 8f f0 02 00 00 mov 0x2f0(%rdi),%rcx ffffffff8000168b: 48 3b 8f e0 00 00 00 cmp 0xe0(%rdi),%rcx ffffffff80001692: 73 73 jae ffffffff80001707 return; } size_t i = ctx->cursor_x + ctx->cursor_y * _ctx->cols; ffffffff80001694: 48 0f af c1 imul %rcx,%rax c = ctx->grid[i]; } uint32_t tmp = c.fg; c.fg = c.bg; c.bg = tmp; ctx->plot_char(_ctx, &c, ctx->cursor_x, ctx->cursor_y); ffffffff80001698: 4c 8b 87 b0 01 00 00 mov 0x1b0(%rdi),%r8 size_t i = ctx->cursor_x + ctx->cursor_y * _ctx->cols; ffffffff8000169f: 48 8d 2c 10 lea (%rax,%rdx,1),%rbp struct flanterm_fb_queue_item *q = ctx->map[i]; ffffffff800016a3: 48 8b 87 d8 02 00 00 mov 0x2d8(%rdi),%rax if (q != NULL) { ctx->grid[i] = q->c; ffffffff800016aa: 4c 8d 64 6d 00 lea 0x0(%rbp,%rbp,2),%r12 struct flanterm_fb_queue_item *q = ctx->map[i]; ffffffff800016af: 4c 8b 2c e8 mov (%rax,%rbp,8),%r13 ctx->grid[i] = q->c; ffffffff800016b3: 49 c1 e4 02 shl $0x2,%r12 if (q != NULL) { ffffffff800016b7: 4d 85 ed test %r13,%r13 ffffffff800016ba: 74 64 je ffffffff80001720 c = q->c; ffffffff800016bc: 49 8b 45 10 mov 0x10(%r13),%rax ffffffff800016c0: 48 89 44 24 04 mov %rax,0x4(%rsp) ffffffff800016c5: 48 89 c6 mov %rax,%rsi ffffffff800016c8: 41 8b 45 18 mov 0x18(%r13),%eax ffffffff800016cc: 48 c1 ee 20 shr $0x20,%rsi c.fg = c.bg; ffffffff800016d0: 89 44 24 08 mov %eax,0x8(%rsp) c.bg = tmp; ffffffff800016d4: 89 74 24 0c mov %esi,0xc(%rsp) ctx->plot_char(_ctx, &c, ctx->cursor_x, ctx->cursor_y); ffffffff800016d8: 48 8d 74 24 04 lea 0x4(%rsp),%rsi ffffffff800016dd: 41 ff d0 call *%r8 ctx->grid[i] = q->c; ffffffff800016e0: 48 8b 83 c0 02 00 00 mov 0x2c0(%rbx),%rax ffffffff800016e7: 49 8b 55 10 mov 0x10(%r13),%rdx ffffffff800016eb: 4a 89 14 20 mov %rdx,(%rax,%r12,1) ffffffff800016ef: 41 8b 55 18 mov 0x18(%r13),%edx ffffffff800016f3: 42 89 54 20 08 mov %edx,0x8(%rax,%r12,1) ctx->map[i] = NULL; ffffffff800016f8: 48 8b 83 d8 02 00 00 mov 0x2d8(%rbx),%rax ffffffff800016ff: 48 c7 04 e8 00 00 00 movq $0x0,(%rax,%rbp,8) ffffffff80001706: 00 } } ffffffff80001707: 48 83 c4 18 add $0x18,%rsp ffffffff8000170b: 5b pop %rbx ffffffff8000170c: 5d pop %rbp ffffffff8000170d: 41 5c pop %r12 ffffffff8000170f: 41 5d pop %r13 ffffffff80001711: c3 ret ffffffff80001712: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) ffffffff80001718: c3 ret ffffffff80001719: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) c = ctx->grid[i]; ffffffff80001720: 48 8b 87 c0 02 00 00 mov 0x2c0(%rdi),%rax ffffffff80001727: 4a 8b 34 20 mov (%rax,%r12,1),%rsi ffffffff8000172b: 48 89 74 24 04 mov %rsi,0x4(%rsp) ffffffff80001730: 42 8b 74 20 08 mov 0x8(%rax,%r12,1),%esi uint32_t tmp = c.fg; ffffffff80001735: 8b 44 24 08 mov 0x8(%rsp),%eax c.fg = c.bg; ffffffff80001739: 89 74 24 08 mov %esi,0x8(%rsp) ctx->plot_char(_ctx, &c, ctx->cursor_x, ctx->cursor_y); ffffffff8000173d: 48 8d 74 24 04 lea 0x4(%rsp),%rsi c.bg = tmp; ffffffff80001742: 89 44 24 0c mov %eax,0xc(%rsp) ctx->plot_char(_ctx, &c, ctx->cursor_x, ctx->cursor_y); ffffffff80001746: 41 ff d0 call *%r8 } ffffffff80001749: 48 83 c4 18 add $0x18,%rsp ffffffff8000174d: 5b pop %rbx ffffffff8000174e: 5d pop %rbp ffffffff8000174f: 41 5c pop %r12 ffffffff80001751: 41 5d pop %r13 ffffffff80001753: c3 ret ffffffff80001754: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff8000175b: 00 00 00 ffffffff8000175e: 66 90 xchg %ax,%ax ffffffff80001760 : static void flanterm_fb_double_buffer_flush(struct flanterm_context *_ctx) { ffffffff80001760: f3 0f 1e fa endbr64 ffffffff80001764: 41 55 push %r13 ffffffff80001766: 41 54 push %r12 ffffffff80001768: 55 push %rbp ffffffff80001769: 53 push %rbx ffffffff8000176a: 48 89 fb mov %rdi,%rbx ffffffff8000176d: 48 83 ec 08 sub $0x8,%rsp struct flanterm_fb_context *ctx = (void *)_ctx; if (_ctx->cursor_enabled) { ffffffff80001771: 80 7f 09 00 cmpb $0x0,0x9(%rdi) ffffffff80001775: 0f 85 35 01 00 00 jne ffffffff800018b0 draw_cursor(_ctx); } for (size_t i = 0; i < ctx->queue_i; i++) { ffffffff8000177b: 48 83 bb d0 02 00 00 cmpq $0x0,0x2d0(%rbx) ffffffff80001782: 00 ffffffff80001783: 74 7b je ffffffff80001800 ffffffff80001785: 48 8b 83 d8 02 00 00 mov 0x2d8(%rbx),%rax ffffffff8000178c: 45 31 ed xor %r13d,%r13d ffffffff8000178f: 90 nop struct flanterm_fb_queue_item *q = &ctx->queue[i]; ffffffff80001790: 4c 89 ed mov %r13,%rbp size_t offset = q->y * _ctx->cols + q->x; ffffffff80001793: 4c 8b a3 e8 00 00 00 mov 0xe8(%rbx),%r12 struct flanterm_fb_queue_item *q = &ctx->queue[i]; ffffffff8000179a: 48 c1 e5 05 shl $0x5,%rbp ffffffff8000179e: 48 03 ab c8 02 00 00 add 0x2c8(%rbx),%rbp size_t offset = q->y * _ctx->cols + q->x; ffffffff800017a5: 48 8b 4d 08 mov 0x8(%rbp),%rcx ffffffff800017a9: 48 8b 55 00 mov 0x0(%rbp),%rdx ffffffff800017ad: 4c 0f af e1 imul %rcx,%r12 ffffffff800017b1: 49 01 d4 add %rdx,%r12 if (ctx->map[offset] == NULL) { ffffffff800017b4: 4a 83 3c e0 00 cmpq $0x0,(%rax,%r12,8) ffffffff800017b9: 74 38 je ffffffff800017f3 continue; } ctx->plot_char(_ctx, &q->c, q->x, q->y); ffffffff800017bb: 48 8d 75 10 lea 0x10(%rbp),%rsi ffffffff800017bf: 48 89 df mov %rbx,%rdi ffffffff800017c2: ff 93 b0 01 00 00 call *0x1b0(%rbx) ctx->grid[offset] = q->c; ffffffff800017c8: 48 8b 93 c0 02 00 00 mov 0x2c0(%rbx),%rdx ffffffff800017cf: 4b 8d 04 64 lea (%r12,%r12,2),%rax ffffffff800017d3: 48 8d 04 82 lea (%rdx,%rax,4),%rax ffffffff800017d7: 48 8b 55 10 mov 0x10(%rbp),%rdx ffffffff800017db: 48 89 10 mov %rdx,(%rax) ffffffff800017de: 8b 55 18 mov 0x18(%rbp),%edx ffffffff800017e1: 89 50 08 mov %edx,0x8(%rax) ctx->map[offset] = NULL; ffffffff800017e4: 48 8b 83 d8 02 00 00 mov 0x2d8(%rbx),%rax ffffffff800017eb: 4a c7 04 e0 00 00 00 movq $0x0,(%rax,%r12,8) ffffffff800017f2: 00 for (size_t i = 0; i < ctx->queue_i; i++) { ffffffff800017f3: 49 83 c5 01 add $0x1,%r13 ffffffff800017f7: 4c 3b ab d0 02 00 00 cmp 0x2d0(%rbx),%r13 ffffffff800017fe: 72 90 jb ffffffff80001790 } if ((ctx->old_cursor_x != ctx->cursor_x || ctx->old_cursor_y != ctx->cursor_y) || _ctx->cursor_enabled == false) { ffffffff80001800: 48 8b 93 10 03 00 00 mov 0x310(%rbx),%rdx ffffffff80001807: 48 8b 8b e8 02 00 00 mov 0x2e8(%rbx),%rcx ffffffff8000180e: 48 39 ca cmp %rcx,%rdx ffffffff80001811: 74 7d je ffffffff80001890 if (ctx->old_cursor_x < _ctx->cols && ctx->old_cursor_y < _ctx->rows) { ffffffff80001813: 48 8b 83 e8 00 00 00 mov 0xe8(%rbx),%rax ffffffff8000181a: 48 39 c2 cmp %rax,%rdx ffffffff8000181d: 73 3c jae ffffffff8000185b ffffffff8000181f: 48 8b b3 18 03 00 00 mov 0x318(%rbx),%rsi ffffffff80001826: 48 3b b3 e0 00 00 00 cmp 0xe0(%rbx),%rsi ffffffff8000182d: 73 2c jae ffffffff8000185b ctx->plot_char(_ctx, &ctx->grid[ctx->old_cursor_x + ctx->old_cursor_y * _ctx->cols], ctx->old_cursor_x, ctx->old_cursor_y); ffffffff8000182f: 48 0f af c6 imul %rsi,%rax ffffffff80001833: 48 89 df mov %rbx,%rdi ffffffff80001836: 48 01 d0 add %rdx,%rax ffffffff80001839: 48 8d 0c 40 lea (%rax,%rax,2),%rcx ffffffff8000183d: 48 8b 83 c0 02 00 00 mov 0x2c0(%rbx),%rax ffffffff80001844: 48 8d 04 88 lea (%rax,%rcx,4),%rax ffffffff80001848: 48 89 f1 mov %rsi,%rcx ffffffff8000184b: 48 89 c6 mov %rax,%rsi ffffffff8000184e: ff 93 b0 01 00 00 call *0x1b0(%rbx) } } ctx->old_cursor_x = ctx->cursor_x; ffffffff80001854: 48 8b 8b e8 02 00 00 mov 0x2e8(%rbx),%rcx ctx->old_cursor_y = ctx->cursor_y; ffffffff8000185b: 48 8b 83 f0 02 00 00 mov 0x2f0(%rbx),%rax ctx->old_cursor_x = ctx->cursor_x; ffffffff80001862: 48 89 8b 10 03 00 00 mov %rcx,0x310(%rbx) ctx->old_cursor_y = ctx->cursor_y; ffffffff80001869: 48 89 83 18 03 00 00 mov %rax,0x318(%rbx) ctx->queue_i = 0; ffffffff80001870: 48 c7 83 d0 02 00 00 movq $0x0,0x2d0(%rbx) ffffffff80001877: 00 00 00 00 } ffffffff8000187b: 48 83 c4 08 add $0x8,%rsp ffffffff8000187f: 5b pop %rbx ffffffff80001880: 5d pop %rbp ffffffff80001881: 41 5c pop %r12 ffffffff80001883: 41 5d pop %r13 ffffffff80001885: c3 ret ffffffff80001886: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff8000188d: 00 00 00 if ((ctx->old_cursor_x != ctx->cursor_x || ctx->old_cursor_y != ctx->cursor_y) || _ctx->cursor_enabled == false) { ffffffff80001890: 48 8b 83 f0 02 00 00 mov 0x2f0(%rbx),%rax ffffffff80001897: 48 39 83 18 03 00 00 cmp %rax,0x318(%rbx) ffffffff8000189e: 0f 85 6f ff ff ff jne ffffffff80001813 ffffffff800018a4: 80 7b 09 00 cmpb $0x0,0x9(%rbx) ffffffff800018a8: 75 b8 jne ffffffff80001862 ffffffff800018aa: e9 64 ff ff ff jmp ffffffff80001813 ffffffff800018af: 90 nop draw_cursor(_ctx); ffffffff800018b0: e8 ab fd ff ff call ffffffff80001660 ffffffff800018b5: e9 c1 fe ff ff jmp ffffffff8000177b ffffffff800018ba: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) ffffffff800018c0 : static void flanterm_fb_raw_putchar(struct flanterm_context *_ctx, uint8_t c) { ffffffff800018c0: f3 0f 1e fa endbr64 ffffffff800018c4: 55 push %rbp ffffffff800018c5: 53 push %rbx ffffffff800018c6: 89 f3 mov %esi,%ebx ffffffff800018c8: 48 83 ec 20 sub $0x20,%rsp struct flanterm_fb_context *ctx = (void *)_ctx; if (ctx->cursor_x >= _ctx->cols && (ctx->cursor_y < _ctx->scroll_bottom_margin - 1 || _ctx->scroll_enabled)) { ffffffff800018cc: 48 8b 97 e8 02 00 00 mov 0x2e8(%rdi),%rdx ffffffff800018d3: 48 8b af e8 00 00 00 mov 0xe8(%rdi),%rbp ffffffff800018da: 48 8b 8f f0 02 00 00 mov 0x2f0(%rdi),%rcx ffffffff800018e1: 48 39 ea cmp %rbp,%rdx ffffffff800018e4: 72 50 jb ffffffff80001936 ffffffff800018e6: 48 8b 47 70 mov 0x70(%rdi),%rax ffffffff800018ea: 48 8d 70 ff lea -0x1(%rax),%rsi ffffffff800018ee: 48 39 f1 cmp %rsi,%rcx ffffffff800018f1: 73 3d jae ffffffff80001930 ctx->cursor_x = 0; ffffffff800018f3: 48 c7 87 e8 02 00 00 movq $0x0,0x2e8(%rdi) ffffffff800018fa: 00 00 00 00 ctx->cursor_y++; ffffffff800018fe: 48 8d 51 01 lea 0x1(%rcx),%rdx if (ctx->cursor_y == _ctx->scroll_bottom_margin) { ffffffff80001902: 48 39 d0 cmp %rdx,%rax ffffffff80001905: 0f 84 7d 00 00 00 je ffffffff80001988 ctx->cursor_y++; ffffffff8000190b: 48 89 97 f0 02 00 00 mov %rdx,0x2f0(%rdi) ffffffff80001912: 48 89 d1 mov %rdx,%rcx ctx->cursor_y--; flanterm_fb_scroll(_ctx); } if (ctx->cursor_y >= _ctx->cols) { ffffffff80001915: 48 39 e9 cmp %rbp,%rcx ffffffff80001918: 72 5e jb ffffffff80001978 ctx->cursor_y = _ctx->cols - 1; ffffffff8000191a: 48 8d 4d ff lea -0x1(%rbp),%rcx ffffffff8000191e: be 01 00 00 00 mov $0x1,%esi ffffffff80001923: 31 d2 xor %edx,%edx ffffffff80001925: 48 89 8f f0 02 00 00 mov %rcx,0x2f0(%rdi) ffffffff8000192c: eb 0c jmp ffffffff8000193a ffffffff8000192e: 66 90 xchg %ax,%ax if (ctx->cursor_x >= _ctx->cols && (ctx->cursor_y < _ctx->scroll_bottom_margin - 1 || _ctx->scroll_enabled)) { ffffffff80001930: 80 7f 0a 00 cmpb $0x0,0xa(%rdi) ffffffff80001934: 75 bd jne ffffffff800018f3 struct flanterm_fb_char ch; ch.c = c; ch.fg = ctx->text_fg; ch.bg = ctx->text_bg; push_to_queue(_ctx, &ch, ctx->cursor_x++, ctx->cursor_y); ffffffff80001936: 48 8d 72 01 lea 0x1(%rdx),%rsi ch.c = c; ffffffff8000193a: 8b 87 e0 02 00 00 mov 0x2e0(%rdi),%eax push_to_queue(_ctx, &ch, ctx->cursor_x++, ctx->cursor_y); ffffffff80001940: 48 89 b7 e8 02 00 00 mov %rsi,0x2e8(%rdi) ch.c = c; ffffffff80001947: 0f b6 db movzbl %bl,%ebx push_to_queue(_ctx, &ch, ctx->cursor_x++, ctx->cursor_y); ffffffff8000194a: 48 8d 74 24 10 lea 0x10(%rsp),%rsi ch.c = c; ffffffff8000194f: 48 c1 e0 20 shl $0x20,%rax ffffffff80001953: 48 09 c3 or %rax,%rbx ch.bg = ctx->text_bg; ffffffff80001956: 8b 87 e4 02 00 00 mov 0x2e4(%rdi),%eax ch.c = c; ffffffff8000195c: 48 89 5c 24 10 mov %rbx,0x10(%rsp) ch.bg = ctx->text_bg; ffffffff80001961: 89 44 24 18 mov %eax,0x18(%rsp) push_to_queue(_ctx, &ch, ctx->cursor_x++, ctx->cursor_y); ffffffff80001965: e8 66 f7 ff ff call ffffffff800010d0 } ffffffff8000196a: 48 83 c4 20 add $0x20,%rsp ffffffff8000196e: 5b pop %rbx ffffffff8000196f: 5d pop %rbp ffffffff80001970: c3 ret ffffffff80001971: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) ffffffff80001978: be 01 00 00 00 mov $0x1,%esi ffffffff8000197d: 31 d2 xor %edx,%edx ffffffff8000197f: eb b9 jmp ffffffff8000193a ffffffff80001981: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) ffffffff80001988: 48 89 4c 24 08 mov %rcx,0x8(%rsp) flanterm_fb_scroll(_ctx); ffffffff8000198d: 48 89 3c 24 mov %rdi,(%rsp) ffffffff80001991: e8 ca f8 ff ff call ffffffff80001260 ffffffff80001996: 48 8b 4c 24 08 mov 0x8(%rsp),%rcx ffffffff8000199b: 48 8b 3c 24 mov (%rsp),%rdi ffffffff8000199f: e9 71 ff ff ff jmp ffffffff80001915 ffffffff800019a4: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff800019ab: 00 00 00 ffffffff800019ae: 66 90 xchg %ax,%ax ffffffff800019b0 : static void flanterm_fb_full_refresh(struct flanterm_context *_ctx) { ffffffff800019b0: f3 0f 1e fa endbr64 ffffffff800019b4: 41 55 push %r13 ffffffff800019b6: 41 54 push %r12 ffffffff800019b8: 55 push %rbp ffffffff800019b9: 53 push %rbx ffffffff800019ba: 48 89 fb mov %rdi,%rbx ffffffff800019bd: 48 83 ec 08 sub $0x8,%rsp struct flanterm_fb_context *ctx = (void *)_ctx; uint32_t default_bg = ctx->default_bg; for (size_t y = 0; y < ctx->height; y++) { ffffffff800019c1: 4c 8b a7 10 02 00 00 mov 0x210(%rdi),%r12 uint32_t default_bg = ctx->default_bg; ffffffff800019c8: 8b af 8c 02 00 00 mov 0x28c(%rdi),%ebp for (size_t y = 0; y < ctx->height; y++) { ffffffff800019ce: 4d 85 e4 test %r12,%r12 ffffffff800019d1: 0f 84 7c 00 00 00 je ffffffff80001a53 for (size_t x = 0; x < ctx->width; x++) { ffffffff800019d7: 48 8b bf 08 02 00 00 mov 0x208(%rdi),%rdi ffffffff800019de: 45 31 db xor %r11d,%r11d for (size_t y = 0; y < ctx->height; y++) { ffffffff800019e1: 45 31 d2 xor %r10d,%r10d ffffffff800019e4: 4c 8d 2c bd 00 00 00 lea 0x0(,%rdi,4),%r13 ffffffff800019eb: 00 ffffffff800019ec: 0f 1f 40 00 nopl 0x0(%rax) for (size_t x = 0; x < ctx->width; x++) { ffffffff800019f0: 48 85 ff test %rdi,%rdi ffffffff800019f3: 74 52 je ffffffff80001a47 if (ctx->canvas != NULL) { ctx->framebuffer[y * (ctx->pitch / sizeof(uint32_t)) + x] = ctx->canvas[y * ctx->width + x]; ffffffff800019f5: 48 8b 8b 00 02 00 00 mov 0x200(%rbx),%rcx ffffffff800019fc: 4c 8b 83 f8 01 00 00 mov 0x1f8(%rbx),%r8 ffffffff80001a03: 31 c0 xor %eax,%eax if (ctx->canvas != NULL) { ffffffff80001a05: 48 8b b3 a0 02 00 00 mov 0x2a0(%rbx),%rsi ctx->framebuffer[y * (ctx->pitch / sizeof(uint32_t)) + x] = ctx->canvas[y * ctx->width + x]; ffffffff80001a0c: 48 c1 e9 02 shr $0x2,%rcx ffffffff80001a10: 49 0f af ca imul %r10,%rcx ffffffff80001a14: 49 8d 14 88 lea (%r8,%rcx,4),%rdx if (ctx->canvas != NULL) { ffffffff80001a18: 48 85 f6 test %rsi,%rsi ffffffff80001a1b: 0f 84 a7 00 00 00 je ffffffff80001ac8 ffffffff80001a21: 4e 8d 0c 1e lea (%rsi,%r11,1),%r9 ffffffff80001a25: eb 11 jmp ffffffff80001a38 ffffffff80001a27: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80001a2e: 00 00 ctx->framebuffer[y * (ctx->pitch / sizeof(uint32_t)) + x] = ctx->canvas[y * ctx->width + x]; ffffffff80001a30: 48 8d 14 08 lea (%rax,%rcx,1),%rdx ffffffff80001a34: 49 8d 14 90 lea (%r8,%rdx,4),%rdx ffffffff80001a38: 41 8b 34 81 mov (%r9,%rax,4),%esi for (size_t x = 0; x < ctx->width; x++) { ffffffff80001a3c: 48 83 c0 01 add $0x1,%rax ctx->framebuffer[y * (ctx->pitch / sizeof(uint32_t)) + x] = ctx->canvas[y * ctx->width + x]; ffffffff80001a40: 89 32 mov %esi,(%rdx) for (size_t x = 0; x < ctx->width; x++) { ffffffff80001a42: 48 39 c7 cmp %rax,%rdi ffffffff80001a45: 75 e9 jne ffffffff80001a30 for (size_t y = 0; y < ctx->height; y++) { ffffffff80001a47: 49 83 c2 01 add $0x1,%r10 ffffffff80001a4b: 4d 01 eb add %r13,%r11 ffffffff80001a4e: 4d 39 e2 cmp %r12,%r10 ffffffff80001a51: 75 9d jne ffffffff800019f0 ctx->framebuffer[y * (ctx->pitch / sizeof(uint32_t)) + x] = default_bg; } } } for (size_t i = 0; i < (size_t)_ctx->rows * _ctx->cols; i++) { ffffffff80001a53: 48 8b 8b e8 00 00 00 mov 0xe8(%rbx),%rcx ffffffff80001a5a: 48 8b 83 e0 00 00 00 mov 0xe0(%rbx),%rax ffffffff80001a61: 31 ed xor %ebp,%ebp ffffffff80001a63: 48 0f af c1 imul %rcx,%rax ffffffff80001a67: 48 85 c0 test %rax,%rax ffffffff80001a6a: 74 43 je ffffffff80001aaf ffffffff80001a6c: 0f 1f 40 00 nopl 0x0(%rax) size_t x = i % _ctx->cols; ffffffff80001a70: 48 89 e8 mov %rbp,%rax ffffffff80001a73: 31 d2 xor %edx,%edx size_t y = i / _ctx->cols; ctx->plot_char(_ctx, &ctx->grid[i], x, y); ffffffff80001a75: 48 8d 74 6d 00 lea 0x0(%rbp,%rbp,2),%rsi ffffffff80001a7a: 48 89 df mov %rbx,%rdi ffffffff80001a7d: 48 f7 f1 div %rcx for (size_t i = 0; i < (size_t)_ctx->rows * _ctx->cols; i++) { ffffffff80001a80: 48 83 c5 01 add $0x1,%rbp ffffffff80001a84: 48 89 c1 mov %rax,%rcx ctx->plot_char(_ctx, &ctx->grid[i], x, y); ffffffff80001a87: 48 8b 83 c0 02 00 00 mov 0x2c0(%rbx),%rax ffffffff80001a8e: 48 8d 34 b0 lea (%rax,%rsi,4),%rsi ffffffff80001a92: ff 93 b0 01 00 00 call *0x1b0(%rbx) for (size_t i = 0; i < (size_t)_ctx->rows * _ctx->cols; i++) { ffffffff80001a98: 48 8b 8b e8 00 00 00 mov 0xe8(%rbx),%rcx ffffffff80001a9f: 48 8b 83 e0 00 00 00 mov 0xe0(%rbx),%rax ffffffff80001aa6: 48 0f af c1 imul %rcx,%rax ffffffff80001aaa: 48 39 c5 cmp %rax,%rbp ffffffff80001aad: 72 c1 jb ffffffff80001a70 } if (_ctx->cursor_enabled) { ffffffff80001aaf: 80 7b 09 00 cmpb $0x0,0x9(%rbx) ffffffff80001ab3: 75 33 jne ffffffff80001ae8 draw_cursor(_ctx); } } ffffffff80001ab5: 48 83 c4 08 add $0x8,%rsp ffffffff80001ab9: 5b pop %rbx ffffffff80001aba: 5d pop %rbp ffffffff80001abb: 41 5c pop %r12 ffffffff80001abd: 41 5d pop %r13 ffffffff80001abf: c3 ret ctx->framebuffer[y * (ctx->pitch / sizeof(uint32_t)) + x] = ctx->canvas[y * ctx->width + x]; ffffffff80001ac0: 48 8d 14 08 lea (%rax,%rcx,1),%rdx ffffffff80001ac4: 49 8d 14 90 lea (%r8,%rdx,4),%rdx for (size_t x = 0; x < ctx->width; x++) { ffffffff80001ac8: 48 83 c0 01 add $0x1,%rax ctx->framebuffer[y * (ctx->pitch / sizeof(uint32_t)) + x] = default_bg; ffffffff80001acc: 89 2a mov %ebp,(%rdx) for (size_t x = 0; x < ctx->width; x++) { ffffffff80001ace: 48 39 f8 cmp %rdi,%rax ffffffff80001ad1: 75 ed jne ffffffff80001ac0 for (size_t y = 0; y < ctx->height; y++) { ffffffff80001ad3: 49 83 c2 01 add $0x1,%r10 ffffffff80001ad7: 4d 01 eb add %r13,%r11 ffffffff80001ada: 4d 39 e2 cmp %r12,%r10 ffffffff80001add: 0f 85 0d ff ff ff jne ffffffff800019f0 ffffffff80001ae3: e9 6b ff ff ff jmp ffffffff80001a53 } ffffffff80001ae8: 48 83 c4 08 add $0x8,%rsp draw_cursor(_ctx); ffffffff80001aec: 48 89 df mov %rbx,%rdi } ffffffff80001aef: 5b pop %rbx ffffffff80001af0: 5d pop %rbp ffffffff80001af1: 41 5c pop %r12 ffffffff80001af3: 41 5d pop %r13 draw_cursor(_ctx); ffffffff80001af5: e9 66 fb ff ff jmp ffffffff80001660 ffffffff80001afa: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) ffffffff80001b00 : static void flanterm_fb_deinit(struct flanterm_context *_ctx, void (*_free)(void *, size_t)) { ffffffff80001b00: f3 0f 1e fa endbr64 struct flanterm_fb_context *ctx = (void *)_ctx; if (_free == NULL) { ffffffff80001b04: 48 85 f6 test %rsi,%rsi ffffffff80001b07: 0f 84 8b 00 00 00 je ffffffff80001b98 static void flanterm_fb_deinit(struct flanterm_context *_ctx, void (*_free)(void *, size_t)) { ffffffff80001b0d: 55 push %rbp ffffffff80001b0e: 48 89 f5 mov %rsi,%rbp ffffffff80001b11: 53 push %rbx ffffffff80001b12: 48 89 fb mov %rdi,%rbx ffffffff80001b15: 48 83 ec 08 sub $0x8,%rsp } #endif return; } _free(ctx->font_bits, ctx->font_bits_size); ffffffff80001b19: 48 8b b7 28 02 00 00 mov 0x228(%rdi),%rsi ffffffff80001b20: 48 8b bf 30 02 00 00 mov 0x230(%rdi),%rdi ffffffff80001b27: ff d5 call *%rbp _free(ctx->font_bool, ctx->font_bool_size); ffffffff80001b29: 48 8b b3 38 02 00 00 mov 0x238(%rbx),%rsi ffffffff80001b30: 48 8b bb 40 02 00 00 mov 0x240(%rbx),%rdi ffffffff80001b37: ff d5 call *%rbp _free(ctx->grid, ctx->grid_size); ffffffff80001b39: 48 8b b3 a8 02 00 00 mov 0x2a8(%rbx),%rsi ffffffff80001b40: 48 8b bb c0 02 00 00 mov 0x2c0(%rbx),%rdi ffffffff80001b47: ff d5 call *%rbp _free(ctx->queue, ctx->queue_size); ffffffff80001b49: 48 8b b3 b0 02 00 00 mov 0x2b0(%rbx),%rsi ffffffff80001b50: 48 8b bb c8 02 00 00 mov 0x2c8(%rbx),%rdi ffffffff80001b57: ff d5 call *%rbp _free(ctx->map, ctx->map_size); ffffffff80001b59: 48 8b bb d8 02 00 00 mov 0x2d8(%rbx),%rdi ffffffff80001b60: 48 8b b3 b8 02 00 00 mov 0x2b8(%rbx),%rsi ffffffff80001b67: ff d5 call *%rbp if (ctx->canvas != NULL) { ffffffff80001b69: 48 8b bb a0 02 00 00 mov 0x2a0(%rbx),%rdi ffffffff80001b70: 48 85 ff test %rdi,%rdi ffffffff80001b73: 74 09 je ffffffff80001b7e _free(ctx->canvas, ctx->canvas_size); ffffffff80001b75: 48 8b b3 98 02 00 00 mov 0x298(%rbx),%rsi ffffffff80001b7c: ff d5 call *%rbp } _free(ctx, sizeof(struct flanterm_fb_context)); } ffffffff80001b7e: 48 83 c4 08 add $0x8,%rsp _free(ctx, sizeof(struct flanterm_fb_context)); ffffffff80001b82: 48 89 df mov %rbx,%rdi ffffffff80001b85: 48 89 e8 mov %rbp,%rax ffffffff80001b88: be 20 03 00 00 mov $0x320,%esi } ffffffff80001b8d: 5b pop %rbx ffffffff80001b8e: 5d pop %rbp _free(ctx, sizeof(struct flanterm_fb_context)); ffffffff80001b8f: ff e0 jmp *%rax ffffffff80001b91: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) if (bump_allocated_instance == true) { ffffffff80001b98: 80 3d 62 95 00 00 00 cmpb $0x0,0x9562(%rip) # ffffffff8000b101 ffffffff80001b9f: 74 17 je ffffffff80001bb8 bump_alloc_ptr = 0; ffffffff80001ba1: 48 c7 05 5c 95 00 00 movq $0x0,0x955c(%rip) # ffffffff8000b108 ffffffff80001ba8: 00 00 00 00 bump_allocated_instance = false; ffffffff80001bac: c6 05 4e 95 00 00 00 movb $0x0,0x954e(%rip) # ffffffff8000b101 ffffffff80001bb3: c3 ret ffffffff80001bb4: 0f 1f 40 00 nopl 0x0(%rax) ffffffff80001bb8: c3 ret ffffffff80001bb9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) ffffffff80001bc0 : static void plot_char_scaled_canvas(struct flanterm_context *_ctx, struct flanterm_fb_char *c, size_t x, size_t y) { ffffffff80001bc0: f3 0f 1e fa endbr64 ffffffff80001bc4: 41 57 push %r15 ffffffff80001bc6: 41 56 push %r14 ffffffff80001bc8: 41 55 push %r13 ffffffff80001bca: 41 54 push %r12 ffffffff80001bcc: 55 push %rbp ffffffff80001bcd: 53 push %rbx ffffffff80001bce: 48 89 fb mov %rdi,%rbx ffffffff80001bd1: 48 83 ec 48 sub $0x48,%rsp if (x >= _ctx->cols || y >= _ctx->rows) { ffffffff80001bd5: 48 3b 97 e8 00 00 00 cmp 0xe8(%rdi),%rdx ffffffff80001bdc: 0f 83 9b 01 00 00 jae ffffffff80001d7d ffffffff80001be2: 48 3b 8f e0 00 00 00 cmp 0xe0(%rdi),%rcx ffffffff80001be9: 0f 83 8e 01 00 00 jae ffffffff80001d7d ffffffff80001bef: 48 89 f7 mov %rsi,%rdi y = ctx->offset_y + y * ctx->glyph_height; ffffffff80001bf2: 48 8b b3 d0 01 00 00 mov 0x1d0(%rbx),%rsi x = ctx->offset_x + x * ctx->glyph_width; ffffffff80001bf9: 48 0f af 93 c8 01 00 imul 0x1c8(%rbx),%rdx ffffffff80001c00: 00 bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff80001c01: 48 8b ab b8 01 00 00 mov 0x1b8(%rbx),%rbp x = ctx->offset_x + x * ctx->glyph_width; ffffffff80001c08: 48 03 93 e8 01 00 00 add 0x1e8(%rbx),%rdx y = ctx->offset_y + y * ctx->glyph_height; ffffffff80001c0f: 48 89 f0 mov %rsi,%rax ffffffff80001c12: 48 89 74 24 10 mov %rsi,0x10(%rsp) ffffffff80001c17: 48 0f af c1 imul %rcx,%rax bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff80001c1b: 48 8b 8b 40 02 00 00 mov 0x240(%rbx),%rcx y = ctx->offset_y + y * ctx->glyph_height; ffffffff80001c22: 48 03 83 f0 01 00 00 add 0x1f0(%rbx),%rax bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff80001c29: 48 89 4c 24 18 mov %rcx,0x18(%rsp) ffffffff80001c2e: 8b 0f mov (%rdi),%ecx ffffffff80001c30: 48 0f af 8b c0 01 00 imul 0x1c0(%rbx),%rcx ffffffff80001c37: 00 ffffffff80001c38: 48 89 4c 24 20 mov %rcx,0x20(%rsp) for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff80001c3d: 48 85 f6 test %rsi,%rsi ffffffff80001c40: 0f 84 37 01 00 00 je ffffffff80001d7d uint8_t fy = gy / ctx->font_scale_y; ffffffff80001c46: 48 8b b3 e0 01 00 00 mov 0x1e0(%rbx),%rsi uint32_t *canvas_line = ctx->canvas + x + (y + gy) * ctx->width; ffffffff80001c4d: 48 8b 8b 08 02 00 00 mov 0x208(%rbx),%rcx for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff80001c54: 45 31 c9 xor %r9d,%r9d volatile uint32_t *fb_line = ctx->framebuffer + x + (y + gy) * (ctx->pitch / 4); ffffffff80001c57: 4c 8b 93 00 02 00 00 mov 0x200(%rbx),%r10 uint8_t fy = gy / ctx->font_scale_y; ffffffff80001c5e: 48 89 74 24 28 mov %rsi,0x28(%rsp) volatile uint32_t *fb_line = ctx->framebuffer + x + (y + gy) * (ctx->pitch / 4); ffffffff80001c63: 48 8b b3 f8 01 00 00 mov 0x1f8(%rbx),%rsi ffffffff80001c6a: 49 c1 ea 02 shr $0x2,%r10 ffffffff80001c6e: 48 89 74 24 40 mov %rsi,0x40(%rsp) ffffffff80001c73: 48 8d 34 8d 00 00 00 lea 0x0(,%rcx,4),%rsi ffffffff80001c7a: 00 ffffffff80001c7b: 48 0f af c8 imul %rax,%rcx ffffffff80001c7f: 48 89 74 24 38 mov %rsi,0x38(%rsp) ffffffff80001c84: 48 8b b3 a0 02 00 00 mov 0x2a0(%rbx),%rsi ffffffff80001c8b: 49 0f af c2 imul %r10,%rax ffffffff80001c8f: 4c 89 54 24 30 mov %r10,0x30(%rsp) for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff80001c94: 49 89 da mov %rbx,%r10 ffffffff80001c97: 48 01 d1 add %rdx,%rcx ffffffff80001c9a: 4c 8d 34 8e lea (%rsi,%rcx,4),%r14 ffffffff80001c9e: 4c 8d 3c 10 lea (%rax,%rdx,1),%r15 ffffffff80001ca2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) uint8_t fy = gy / ctx->font_scale_y; ffffffff80001ca8: 4c 89 c8 mov %r9,%rax ffffffff80001cab: 31 d2 xor %edx,%edx ffffffff80001cad: 48 f7 74 24 28 divq 0x28(%rsp) bool *glyph_pointer = glyph + (fy * ctx->font_width); ffffffff80001cb2: 0f b6 c8 movzbl %al,%ecx ffffffff80001cb5: 48 8b 44 24 20 mov 0x20(%rsp),%rax ffffffff80001cba: 48 01 c1 add %rax,%rcx ffffffff80001cbd: 48 8b 44 24 18 mov 0x18(%rsp),%rax ffffffff80001cc2: 48 0f af cd imul %rbp,%rcx ffffffff80001cc6: 48 01 c1 add %rax,%rcx for (size_t fx = 0; fx < ctx->font_width; fx++) { ffffffff80001cc9: 48 85 ed test %rbp,%rbp ffffffff80001ccc: 0f 84 8c 00 00 00 je ffffffff80001d5e for (size_t i = 0; i < ctx->font_scale_x; i++) { ffffffff80001cd2: 4d 8b a2 d8 01 00 00 mov 0x1d8(%r10),%r12 ffffffff80001cd9: 48 8b 44 24 40 mov 0x40(%rsp),%rax ffffffff80001cde: 4c 8d 2c 29 lea (%rcx,%rbp,1),%r13 ffffffff80001ce2: 4c 89 ce mov %r9,%rsi ffffffff80001ce5: 48 89 6c 24 08 mov %rbp,0x8(%rsp) ffffffff80001cea: 4e 8d 1c a5 00 00 00 lea 0x0(,%r12,4),%r11 ffffffff80001cf1: 00 ffffffff80001cf2: 4a 8d 1c b8 lea (%rax,%r15,4),%rbx ffffffff80001cf6: 4f 8d 04 33 lea (%r11,%r14,1),%r8 ffffffff80001cfa: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) ffffffff80001d00: 4d 85 e4 test %r12,%r12 ffffffff80001d03: 74 42 je ffffffff80001d47 fb_line[gx] = *glyph_pointer ? fg : bg; ffffffff80001d05: 48 89 0c 24 mov %rcx,(%rsp) ffffffff80001d09: 4c 89 c2 mov %r8,%rdx ffffffff80001d0c: 0f b6 29 movzbl (%rcx),%ebp ffffffff80001d0f: 49 89 d9 mov %rbx,%r9 ffffffff80001d12: 4c 29 da sub %r11,%rdx ffffffff80001d15: 0f 1f 00 nopl (%rax) uint32_t bg = c->bg == 0xffffffff ? canvas_line[gx] : c->bg; ffffffff80001d18: 8b 47 08 mov 0x8(%rdi),%eax ffffffff80001d1b: 83 f8 ff cmp $0xffffffff,%eax ffffffff80001d1e: 75 02 jne ffffffff80001d22 ffffffff80001d20: 8b 02 mov (%rdx),%eax uint32_t fg = c->fg == 0xffffffff ? canvas_line[gx] : c->fg; ffffffff80001d22: 8b 4f 04 mov 0x4(%rdi),%ecx ffffffff80001d25: 83 f9 ff cmp $0xffffffff,%ecx ffffffff80001d28: 75 02 jne ffffffff80001d2c ffffffff80001d2a: 8b 0a mov (%rdx),%ecx fb_line[gx] = *glyph_pointer ? fg : bg; ffffffff80001d2c: 40 84 ed test %bpl,%bpl ffffffff80001d2f: 0f 45 c1 cmovne %ecx,%eax for (size_t i = 0; i < ctx->font_scale_x; i++) { ffffffff80001d32: 48 83 c2 04 add $0x4,%rdx ffffffff80001d36: 49 83 c1 04 add $0x4,%r9 fb_line[gx] = *glyph_pointer ? fg : bg; ffffffff80001d3a: 41 89 41 fc mov %eax,-0x4(%r9) for (size_t i = 0; i < ctx->font_scale_x; i++) { ffffffff80001d3e: 49 39 d0 cmp %rdx,%r8 ffffffff80001d41: 75 d5 jne ffffffff80001d18 ffffffff80001d43: 48 8b 0c 24 mov (%rsp),%rcx glyph_pointer++; ffffffff80001d47: 48 83 c1 01 add $0x1,%rcx for (size_t fx = 0; fx < ctx->font_width; fx++) { ffffffff80001d4b: 4d 01 d8 add %r11,%r8 ffffffff80001d4e: 4c 01 db add %r11,%rbx ffffffff80001d51: 4c 39 e9 cmp %r13,%rcx ffffffff80001d54: 75 aa jne ffffffff80001d00 ffffffff80001d56: 48 8b 6c 24 08 mov 0x8(%rsp),%rbp ffffffff80001d5b: 49 89 f1 mov %rsi,%r9 for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff80001d5e: 48 8b 44 24 38 mov 0x38(%rsp),%rax ffffffff80001d63: 49 83 c1 01 add $0x1,%r9 ffffffff80001d67: 49 01 c6 add %rax,%r14 ffffffff80001d6a: 48 8b 44 24 30 mov 0x30(%rsp),%rax ffffffff80001d6f: 49 01 c7 add %rax,%r15 ffffffff80001d72: 4c 39 4c 24 10 cmp %r9,0x10(%rsp) ffffffff80001d77: 0f 85 2b ff ff ff jne ffffffff80001ca8 } ffffffff80001d7d: 48 83 c4 48 add $0x48,%rsp ffffffff80001d81: 5b pop %rbx ffffffff80001d82: 5d pop %rbp ffffffff80001d83: 41 5c pop %r12 ffffffff80001d85: 41 5d pop %r13 ffffffff80001d87: 41 5e pop %r14 ffffffff80001d89: 41 5f pop %r15 ffffffff80001d8b: c3 ret ffffffff80001d8c: 0f 1f 40 00 nopl 0x0(%rax) ffffffff80001d90 : static void plot_char_unscaled_canvas(struct flanterm_context *_ctx, struct flanterm_fb_char *c, size_t x, size_t y) { ffffffff80001d90: f3 0f 1e fa endbr64 ffffffff80001d94: 48 89 f8 mov %rdi,%rax if (x >= _ctx->cols || y >= _ctx->rows) { ffffffff80001d97: 48 3b 97 e8 00 00 00 cmp 0xe8(%rdi),%rdx ffffffff80001d9e: 0f 83 0c 01 00 00 jae ffffffff80001eb0 ffffffff80001da4: 48 3b 8f e0 00 00 00 cmp 0xe0(%rdi),%rcx ffffffff80001dab: 0f 83 ff 00 00 00 jae ffffffff80001eb0 static void plot_char_unscaled_canvas(struct flanterm_context *_ctx, struct flanterm_fb_char *c, size_t x, size_t y) { ffffffff80001db1: 41 56 push %r14 ffffffff80001db3: 48 89 f7 mov %rsi,%rdi ffffffff80001db6: 41 55 push %r13 ffffffff80001db8: 41 54 push %r12 ffffffff80001dba: 55 push %rbp ffffffff80001dbb: 53 push %rbx y = ctx->offset_y + y * ctx->glyph_height; ffffffff80001dbc: 4c 8b a0 d0 01 00 00 mov 0x1d0(%rax),%r12 bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff80001dc3: 8b 1e mov (%rsi),%ebx ffffffff80001dc5: 4c 8b 88 b8 01 00 00 mov 0x1b8(%rax),%r9 ffffffff80001dcc: 48 8b b0 c0 01 00 00 mov 0x1c0(%rax),%rsi x = ctx->offset_x + x * ctx->glyph_width; ffffffff80001dd3: 48 0f af 90 c8 01 00 imul 0x1c8(%rax),%rdx ffffffff80001dda: 00 y = ctx->offset_y + y * ctx->glyph_height; ffffffff80001ddb: 49 0f af cc imul %r12,%rcx bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff80001ddf: 4c 8b 80 40 02 00 00 mov 0x240(%rax),%r8 x = ctx->offset_x + x * ctx->glyph_width; ffffffff80001de6: 48 03 90 e8 01 00 00 add 0x1e8(%rax),%rdx y = ctx->offset_y + y * ctx->glyph_height; ffffffff80001ded: 49 0f af f1 imul %r9,%rsi ffffffff80001df1: 48 03 88 f0 01 00 00 add 0x1f0(%rax),%rcx for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff80001df8: 4d 85 e4 test %r12,%r12 ffffffff80001dfb: 0f 84 a1 00 00 00 je ffffffff80001ea2 volatile uint32_t *fb_line = ctx->framebuffer + x + (y + gy) * (ctx->pitch / 4); ffffffff80001e01: 48 8b a8 00 02 00 00 mov 0x200(%rax),%rbp uint32_t *canvas_line = ctx->canvas + x + (y + gy) * ctx->width; ffffffff80001e08: 4c 8b 90 08 02 00 00 mov 0x208(%rax),%r10 ffffffff80001e0f: 49 89 cb mov %rcx,%r11 ffffffff80001e12: 48 0f af f3 imul %rbx,%rsi volatile uint32_t *fb_line = ctx->framebuffer + x + (y + gy) * (ctx->pitch / 4); ffffffff80001e16: 4c 8b b0 f8 01 00 00 mov 0x1f8(%rax),%r14 ffffffff80001e1d: 48 8b 80 a0 02 00 00 mov 0x2a0(%rax),%rax for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff80001e24: 31 db xor %ebx,%ebx volatile uint32_t *fb_line = ctx->framebuffer + x + (y + gy) * (ctx->pitch / 4); ffffffff80001e26: 48 c1 ed 02 shr $0x2,%rbp ffffffff80001e2a: 49 0f af ca imul %r10,%rcx ffffffff80001e2e: 4e 8d 2c 95 00 00 00 lea 0x0(,%r10,4),%r13 ffffffff80001e35: 00 ffffffff80001e36: 4c 0f af dd imul %rbp,%r11 ffffffff80001e3a: 49 01 f0 add %rsi,%r8 ffffffff80001e3d: 49 01 d3 add %rdx,%r11 ffffffff80001e40: 48 01 ca add %rcx,%rdx ffffffff80001e43: 4c 8d 14 90 lea (%rax,%rdx,4),%r10 ffffffff80001e47: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80001e4e: 00 00 for (size_t fx = 0; fx < ctx->font_width; fx++) { ffffffff80001e50: 4d 85 c9 test %r9,%r9 ffffffff80001e53: 74 3b je ffffffff80001e90 ffffffff80001e55: 4b 8d 34 9e lea (%r14,%r11,4),%rsi ffffffff80001e59: 31 d2 xor %edx,%edx ffffffff80001e5b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) uint32_t bg = c->bg == 0xffffffff ? canvas_line[fx] : c->bg; ffffffff80001e60: 8b 47 08 mov 0x8(%rdi),%eax ffffffff80001e63: 83 f8 ff cmp $0xffffffff,%eax ffffffff80001e66: 75 04 jne ffffffff80001e6c ffffffff80001e68: 41 8b 04 92 mov (%r10,%rdx,4),%eax uint32_t fg = c->fg == 0xffffffff ? canvas_line[fx] : c->fg; ffffffff80001e6c: 8b 4f 04 mov 0x4(%rdi),%ecx ffffffff80001e6f: 83 f9 ff cmp $0xffffffff,%ecx ffffffff80001e72: 75 04 jne ffffffff80001e78 ffffffff80001e74: 41 8b 0c 92 mov (%r10,%rdx,4),%ecx fb_line[fx] = *(glyph_pointer++) ? fg : bg; ffffffff80001e78: 41 80 3c 10 00 cmpb $0x0,(%r8,%rdx,1) ffffffff80001e7d: 0f 45 c1 cmovne %ecx,%eax for (size_t fx = 0; fx < ctx->font_width; fx++) { ffffffff80001e80: 48 83 c2 01 add $0x1,%rdx ffffffff80001e84: 48 83 c6 04 add $0x4,%rsi fb_line[fx] = *(glyph_pointer++) ? fg : bg; ffffffff80001e88: 89 46 fc mov %eax,-0x4(%rsi) for (size_t fx = 0; fx < ctx->font_width; fx++) { ffffffff80001e8b: 49 39 d1 cmp %rdx,%r9 ffffffff80001e8e: 75 d0 jne ffffffff80001e60 for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff80001e90: 48 83 c3 01 add $0x1,%rbx ffffffff80001e94: 49 01 eb add %rbp,%r11 ffffffff80001e97: 4d 01 c8 add %r9,%r8 ffffffff80001e9a: 4d 01 ea add %r13,%r10 ffffffff80001e9d: 49 39 dc cmp %rbx,%r12 ffffffff80001ea0: 75 ae jne ffffffff80001e50 } ffffffff80001ea2: 5b pop %rbx ffffffff80001ea3: 5d pop %rbp ffffffff80001ea4: 41 5c pop %r12 ffffffff80001ea6: 41 5d pop %r13 ffffffff80001ea8: 41 5e pop %r14 ffffffff80001eaa: c3 ret ffffffff80001eab: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80001eb0: c3 ret ffffffff80001eb1: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80001eb8: 00 00 00 ffffffff80001ebb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80001ec0 : static void plot_char_unscaled_uncanvas(struct flanterm_context *_ctx, struct flanterm_fb_char *c, size_t x, size_t y) { ffffffff80001ec0: f3 0f 1e fa endbr64 if (x >= _ctx->cols || y >= _ctx->rows) { ffffffff80001ec4: 48 3b 97 e8 00 00 00 cmp 0xe8(%rdi),%rdx ffffffff80001ecb: 0f 83 ff 00 00 00 jae ffffffff80001fd0 ffffffff80001ed1: 48 89 f8 mov %rdi,%rax ffffffff80001ed4: 48 3b 8f e0 00 00 00 cmp 0xe0(%rdi),%rcx ffffffff80001edb: 0f 83 ef 00 00 00 jae ffffffff80001fd0 static void plot_char_unscaled_uncanvas(struct flanterm_context *_ctx, struct flanterm_fb_char *c, size_t x, size_t y) { ffffffff80001ee1: 41 57 push %r15 ffffffff80001ee3: 41 56 push %r14 ffffffff80001ee5: 41 55 push %r13 ffffffff80001ee7: 41 54 push %r12 ffffffff80001ee9: 55 push %rbp ffffffff80001eea: 53 push %rbx ffffffff80001eeb: 44 8b 46 08 mov 0x8(%rsi),%r8d uint32_t default_bg = ctx->default_bg; ffffffff80001eef: 44 8b 88 8c 02 00 00 mov 0x28c(%rax),%r9d uint32_t bg = c->bg == 0xffffffff ? default_bg : c->bg; ffffffff80001ef6: 8b 7e 04 mov 0x4(%rsi),%edi ffffffff80001ef9: 41 83 f8 ff cmp $0xffffffff,%r8d y = ctx->offset_y + y * ctx->glyph_height; ffffffff80001efd: 4c 8b a0 d0 01 00 00 mov 0x1d0(%rax),%r12 bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff80001f04: 44 8b 3e mov (%rsi),%r15d ffffffff80001f07: 48 8b 98 b8 01 00 00 mov 0x1b8(%rax),%rbx ffffffff80001f0e: 4c 8b 90 c0 01 00 00 mov 0x1c0(%rax),%r10 uint32_t bg = c->bg == 0xffffffff ? default_bg : c->bg; ffffffff80001f15: 45 0f 44 c1 cmove %r9d,%r8d uint32_t fg = c->fg == 0xffffffff ? default_bg : c->fg; ffffffff80001f19: 83 ff ff cmp $0xffffffff,%edi ffffffff80001f1c: 41 0f 44 f9 cmove %r9d,%edi bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff80001f20: 4c 8b 88 40 02 00 00 mov 0x240(%rax),%r9 x = ctx->offset_x + x * ctx->glyph_width; ffffffff80001f27: 48 0f af 90 c8 01 00 imul 0x1c8(%rax),%rdx ffffffff80001f2e: 00 ffffffff80001f2f: 48 03 90 e8 01 00 00 add 0x1e8(%rax),%rdx y = ctx->offset_y + y * ctx->glyph_height; ffffffff80001f36: 49 0f af cc imul %r12,%rcx ffffffff80001f3a: 48 03 88 f0 01 00 00 add 0x1f0(%rax),%rcx bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff80001f41: 4c 0f af d3 imul %rbx,%r10 for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff80001f45: 4d 85 e4 test %r12,%r12 ffffffff80001f48: 74 7a je ffffffff80001fc4 volatile uint32_t *fb_line = ctx->framebuffer + x + (y + gy) * (ctx->pitch / 4); ffffffff80001f4a: 48 8b a8 00 02 00 00 mov 0x200(%rax),%rbp ffffffff80001f51: 4d 0f af d7 imul %r15,%r10 ffffffff80001f55: 4c 8b b0 f8 01 00 00 mov 0x1f8(%rax),%r14 ffffffff80001f5c: 48 8d 04 1a lea (%rdx,%rbx,1),%rax ffffffff80001f60: 48 c1 ed 02 shr $0x2,%rbp ffffffff80001f64: 48 0f af cd imul %rbp,%rcx ffffffff80001f68: 4d 01 d1 add %r10,%r9 ffffffff80001f6b: 4c 8d 2c ad 00 00 00 lea 0x0(,%rbp,4),%r13 ffffffff80001f72: 00 for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff80001f73: 45 31 d2 xor %r10d,%r10d ffffffff80001f76: 48 01 c8 add %rcx,%rax ffffffff80001f79: 4c 8d 1c 0a lea (%rdx,%rcx,1),%r11 ffffffff80001f7d: 49 8d 34 86 lea (%r14,%rax,4),%rsi ffffffff80001f81: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) bool *glyph_pointer = glyph + (gy * ctx->font_width); ffffffff80001f88: 4c 89 ca mov %r9,%rdx for (size_t fx = 0; fx < ctx->font_width; fx++) { ffffffff80001f8b: 48 85 db test %rbx,%rbx ffffffff80001f8e: 74 22 je ffffffff80001fb2 ffffffff80001f90: 4b 8d 04 9e lea (%r14,%r11,4),%rax ffffffff80001f94: 0f 1f 40 00 nopl 0x0(%rax) fb_line[fx] = *(glyph_pointer++) ? fg : bg; ffffffff80001f98: 48 83 c2 01 add $0x1,%rdx ffffffff80001f9c: 89 f9 mov %edi,%ecx ffffffff80001f9e: 80 7a ff 00 cmpb $0x0,-0x1(%rdx) ffffffff80001fa2: 41 0f 44 c8 cmove %r8d,%ecx for (size_t fx = 0; fx < ctx->font_width; fx++) { ffffffff80001fa6: 48 83 c0 04 add $0x4,%rax fb_line[fx] = *(glyph_pointer++) ? fg : bg; ffffffff80001faa: 89 48 fc mov %ecx,-0x4(%rax) for (size_t fx = 0; fx < ctx->font_width; fx++) { ffffffff80001fad: 48 39 f0 cmp %rsi,%rax ffffffff80001fb0: 75 e6 jne ffffffff80001f98 for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff80001fb2: 49 83 c2 01 add $0x1,%r10 ffffffff80001fb6: 49 01 eb add %rbp,%r11 ffffffff80001fb9: 4c 01 ee add %r13,%rsi ffffffff80001fbc: 49 01 d9 add %rbx,%r9 ffffffff80001fbf: 4d 39 d4 cmp %r10,%r12 ffffffff80001fc2: 75 c4 jne ffffffff80001f88 } ffffffff80001fc4: 5b pop %rbx ffffffff80001fc5: 5d pop %rbp ffffffff80001fc6: 41 5c pop %r12 ffffffff80001fc8: 41 5d pop %r13 ffffffff80001fca: 41 5e pop %r14 ffffffff80001fcc: 41 5f pop %r15 ffffffff80001fce: c3 ret ffffffff80001fcf: 90 nop ffffffff80001fd0: c3 ret ffffffff80001fd1: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80001fd8: 00 00 00 ffffffff80001fdb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80001fe0 : static void plot_char_scaled_uncanvas(struct flanterm_context *_ctx, struct flanterm_fb_char *c, size_t x, size_t y) { ffffffff80001fe0: f3 0f 1e fa endbr64 if (x >= _ctx->cols || y >= _ctx->rows) { ffffffff80001fe4: 48 3b 97 e8 00 00 00 cmp 0xe8(%rdi),%rdx ffffffff80001feb: 0f 83 69 01 00 00 jae ffffffff8000215a static void plot_char_scaled_uncanvas(struct flanterm_context *_ctx, struct flanterm_fb_char *c, size_t x, size_t y) { ffffffff80001ff1: 41 57 push %r15 ffffffff80001ff3: 41 56 push %r14 ffffffff80001ff5: 41 55 push %r13 ffffffff80001ff7: 41 54 push %r12 ffffffff80001ff9: 55 push %rbp ffffffff80001ffa: 48 89 fd mov %rdi,%rbp ffffffff80001ffd: 53 push %rbx ffffffff80001ffe: 48 83 ec 20 sub $0x20,%rsp if (x >= _ctx->cols || y >= _ctx->rows) { ffffffff80002002: 48 3b 8f e0 00 00 00 cmp 0xe0(%rdi),%rcx ffffffff80002009: 0f 83 3c 01 00 00 jae ffffffff8000214b ffffffff8000200f: 44 8b 7e 08 mov 0x8(%rsi),%r15d uint32_t default_bg = ctx->default_bg; ffffffff80002013: 8b 87 8c 02 00 00 mov 0x28c(%rdi),%eax uint32_t bg = c->bg == 0xffffffff ? default_bg : c->bg; ffffffff80002019: 44 8b 76 04 mov 0x4(%rsi),%r14d bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff8000201d: 48 8b 9d 40 02 00 00 mov 0x240(%rbp),%rbx uint32_t bg = c->bg == 0xffffffff ? default_bg : c->bg; ffffffff80002024: 41 83 ff ff cmp $0xffffffff,%r15d ffffffff80002028: 44 0f 44 f8 cmove %eax,%r15d uint32_t fg = c->fg == 0xffffffff ? default_bg : c->fg; ffffffff8000202c: 41 83 fe ff cmp $0xffffffff,%r14d bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff80002030: 48 89 5c 24 08 mov %rbx,0x8(%rsp) ffffffff80002035: 48 8b 9d b8 01 00 00 mov 0x1b8(%rbp),%rbx uint32_t fg = c->fg == 0xffffffff ? default_bg : c->fg; ffffffff8000203c: 44 0f 44 f0 cmove %eax,%r14d x = ctx->offset_x + x * ctx->glyph_width; ffffffff80002040: 48 8b 87 c8 01 00 00 mov 0x1c8(%rdi),%rax ffffffff80002047: 48 0f af c2 imul %rdx,%rax bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff8000204b: 8b 16 mov (%rsi),%edx x = ctx->offset_x + x * ctx->glyph_width; ffffffff8000204d: 48 03 87 e8 01 00 00 add 0x1e8(%rdi),%rax bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff80002054: 48 0f af 95 c0 01 00 imul 0x1c0(%rbp),%rdx ffffffff8000205b: 00 y = ctx->offset_y + y * ctx->glyph_height; ffffffff8000205c: 48 8b bf d0 01 00 00 mov 0x1d0(%rdi),%rdi ffffffff80002063: 49 89 fb mov %rdi,%r11 ffffffff80002066: 48 89 3c 24 mov %rdi,(%rsp) ffffffff8000206a: 4c 0f af d9 imul %rcx,%r11 bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width]; ffffffff8000206e: 48 89 54 24 10 mov %rdx,0x10(%rsp) y = ctx->offset_y + y * ctx->glyph_height; ffffffff80002073: 4c 03 9d f0 01 00 00 add 0x1f0(%rbp),%r11 for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff8000207a: 48 85 ff test %rdi,%rdi ffffffff8000207d: 0f 84 c8 00 00 00 je ffffffff8000214b volatile uint32_t *fb_line = ctx->framebuffer + x + (y + gy) * (ctx->pitch / 4); ffffffff80002083: 4c 8b ad 00 02 00 00 mov 0x200(%rbp),%r13 ffffffff8000208a: 48 8b bd f8 01 00 00 mov 0x1f8(%rbp),%rdi for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff80002091: 45 31 d2 xor %r10d,%r10d uint8_t fy = gy / ctx->font_scale_y; ffffffff80002094: 4c 8b a5 e0 01 00 00 mov 0x1e0(%rbp),%r12 volatile uint32_t *fb_line = ctx->framebuffer + x + (y + gy) * (ctx->pitch / 4); ffffffff8000209b: 49 c1 ed 02 shr $0x2,%r13 ffffffff8000209f: 48 89 7c 24 18 mov %rdi,0x18(%rsp) ffffffff800020a4: 4d 0f af dd imul %r13,%r11 ffffffff800020a8: 49 01 c3 add %rax,%r11 ffffffff800020ab: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) uint8_t fy = gy / ctx->font_scale_y; ffffffff800020b0: 4c 89 d0 mov %r10,%rax ffffffff800020b3: 31 d2 xor %edx,%edx ffffffff800020b5: 49 f7 f4 div %r12 bool *glyph_pointer = glyph + (fy * ctx->font_width); ffffffff800020b8: 0f b6 f0 movzbl %al,%esi ffffffff800020bb: 48 8b 44 24 10 mov 0x10(%rsp),%rax ffffffff800020c0: 48 01 c6 add %rax,%rsi ffffffff800020c3: 48 8b 44 24 08 mov 0x8(%rsp),%rax ffffffff800020c8: 48 0f af f3 imul %rbx,%rsi ffffffff800020cc: 48 01 c6 add %rax,%rsi for (size_t fx = 0; fx < ctx->font_width; fx++) { ffffffff800020cf: 48 85 db test %rbx,%rbx ffffffff800020d2: 74 66 je ffffffff8000213a for (size_t i = 0; i < ctx->font_scale_x; i++) { ffffffff800020d4: 4c 8b 85 d8 01 00 00 mov 0x1d8(%rbp),%r8 ffffffff800020db: 48 8b 4c 24 18 mov 0x18(%rsp),%rcx ffffffff800020e0: 4c 8d 0c 1e lea (%rsi,%rbx,1),%r9 ffffffff800020e4: 4b 8d 04 18 lea (%r8,%r11,1),%rax ffffffff800020e8: 4a 8d 3c 85 00 00 00 lea 0x0(,%r8,4),%rdi ffffffff800020ef: 00 ffffffff800020f0: 48 8d 0c 81 lea (%rcx,%rax,4),%rcx ffffffff800020f4: 0f 1f 40 00 nopl 0x0(%rax) ffffffff800020f8: 4d 85 c0 test %r8,%r8 ffffffff800020fb: 74 31 je ffffffff8000212e ffffffff800020fd: 80 3e 00 cmpb $0x0,(%rsi) ffffffff80002100: 44 89 fa mov %r15d,%edx ffffffff80002103: 48 89 c8 mov %rcx,%rax ffffffff80002106: 41 0f 45 d6 cmovne %r14d,%edx ffffffff8000210a: 48 29 f8 sub %rdi,%rax ffffffff8000210d: 40 f6 c7 04 test $0x4,%dil ffffffff80002111: 74 0d je ffffffff80002120 fb_line[gx] = *glyph_pointer ? fg : bg; ffffffff80002113: 89 10 mov %edx,(%rax) for (size_t i = 0; i < ctx->font_scale_x; i++) { ffffffff80002115: 48 83 c0 04 add $0x4,%rax ffffffff80002119: 48 39 c1 cmp %rax,%rcx ffffffff8000211c: 74 10 je ffffffff8000212e ffffffff8000211e: 66 90 xchg %ax,%ax fb_line[gx] = *glyph_pointer ? fg : bg; ffffffff80002120: 89 10 mov %edx,(%rax) for (size_t i = 0; i < ctx->font_scale_x; i++) { ffffffff80002122: 48 83 c0 08 add $0x8,%rax fb_line[gx] = *glyph_pointer ? fg : bg; ffffffff80002126: 89 50 fc mov %edx,-0x4(%rax) for (size_t i = 0; i < ctx->font_scale_x; i++) { ffffffff80002129: 48 39 c1 cmp %rax,%rcx ffffffff8000212c: 75 f2 jne ffffffff80002120 glyph_pointer++; ffffffff8000212e: 48 83 c6 01 add $0x1,%rsi for (size_t fx = 0; fx < ctx->font_width; fx++) { ffffffff80002132: 48 01 f9 add %rdi,%rcx ffffffff80002135: 4c 39 ce cmp %r9,%rsi ffffffff80002138: 75 be jne ffffffff800020f8 for (size_t gy = 0; gy < ctx->glyph_height; gy++) { ffffffff8000213a: 49 83 c2 01 add $0x1,%r10 ffffffff8000213e: 4d 01 eb add %r13,%r11 ffffffff80002141: 4c 39 14 24 cmp %r10,(%rsp) ffffffff80002145: 0f 85 65 ff ff ff jne ffffffff800020b0 } ffffffff8000214b: 48 83 c4 20 add $0x20,%rsp ffffffff8000214f: 5b pop %rbx ffffffff80002150: 5d pop %rbp ffffffff80002151: 41 5c pop %r12 ffffffff80002153: 41 5d pop %r13 ffffffff80002155: 41 5e pop %r14 ffffffff80002157: 41 5f pop %r15 ffffffff80002159: c3 ret ffffffff8000215a: c3 ret ffffffff8000215b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80002160 : uint32_t *default_bg, uint32_t *default_fg, uint32_t *default_bg_bright, uint32_t *default_fg_bright, void *font, size_t font_width, size_t font_height, size_t font_spacing, size_t font_scale_x, size_t font_scale_y, size_t margin ) { ffffffff80002160: f3 0f 1e fa endbr64 ffffffff80002164: 41 57 push %r15 ffffffff80002166: 49 89 ff mov %rdi,%r15 ffffffff80002169: 41 56 push %r14 ffffffff8000216b: 41 55 push %r13 ffffffff8000216d: 49 89 cd mov %rcx,%r13 ffffffff80002170: 41 54 push %r12 ffffffff80002172: 4d 89 c4 mov %r8,%r12 ffffffff80002175: 55 push %rbp ffffffff80002176: 53 push %rbx ffffffff80002177: 48 83 ec 48 sub $0x48,%rsp ffffffff8000217b: 8b 84 24 88 00 00 00 mov 0x88(%rsp),%eax ffffffff80002182: 44 8b b4 24 80 00 00 mov 0x80(%rsp),%r14d ffffffff80002189: 00 ffffffff8000218a: 48 89 74 24 18 mov %rsi,0x18(%rsp) if (font_scale_x == 0 || font_scale_y == 0) { ffffffff8000218f: 48 83 bc 24 08 01 00 cmpq $0x0,0x108(%rsp) ffffffff80002196: 00 00 ) { ffffffff80002198: 48 89 54 24 08 mov %rdx,0x8(%rsp) ffffffff8000219d: 89 44 24 34 mov %eax,0x34(%rsp) ffffffff800021a1: 8b 84 24 90 00 00 00 mov 0x90(%rsp),%eax ffffffff800021a8: 4c 89 4c 24 20 mov %r9,0x20(%rsp) ffffffff800021ad: 48 8b ac 24 f8 00 00 mov 0xf8(%rsp),%rbp ffffffff800021b4: 00 ffffffff800021b5: 89 44 24 10 mov %eax,0x10(%rsp) ffffffff800021b9: 8b 84 24 98 00 00 00 mov 0x98(%rsp),%eax ffffffff800021c0: 44 88 74 24 33 mov %r14b,0x33(%rsp) ffffffff800021c5: 89 44 24 38 mov %eax,0x38(%rsp) ffffffff800021c9: 8b 84 24 a0 00 00 00 mov 0xa0(%rsp),%eax ffffffff800021d0: 89 44 24 2c mov %eax,0x2c(%rsp) ffffffff800021d4: 8b 84 24 a8 00 00 00 mov 0xa8(%rsp),%eax ffffffff800021db: 89 44 24 3c mov %eax,0x3c(%rsp) if (font_scale_x == 0 || font_scale_y == 0) { ffffffff800021df: 0f 84 b4 07 00 00 je ffffffff80002999 ffffffff800021e5: 48 83 bc 24 10 01 00 cmpq $0x0,0x110(%rsp) ffffffff800021ec: 00 00 ffffffff800021ee: 0f 84 a5 07 00 00 je ffffffff80002999 font_scale_x = 4; font_scale_y = 4; } } if (red_mask_size < 8 || red_mask_size != green_mask_size || red_mask_size != blue_mask_size) { ffffffff800021f4: 41 80 fe 07 cmp $0x7,%r14b ffffffff800021f8: 0f 96 c0 setbe %al ffffffff800021fb: 44 3a 74 24 10 cmp 0x10(%rsp),%r14b ffffffff80002200: 0f 95 c2 setne %dl ffffffff80002203: 08 d0 or %dl,%al ffffffff80002205: 0f 85 d0 08 00 00 jne ffffffff80002adb ffffffff8000220b: 44 3a 74 24 2c cmp 0x2c(%rsp),%r14b ffffffff80002210: 0f 85 c5 08 00 00 jne ffffffff80002adb return NULL; } if (_malloc == NULL) { ffffffff80002216: 4d 85 ff test %r15,%r15 ffffffff80002219: 0f 84 c9 08 00 00 je ffffffff80002ae8 return NULL; #endif } struct flanterm_fb_context *ctx = NULL; ctx = _malloc(sizeof(struct flanterm_fb_context)); ffffffff8000221f: bf 20 03 00 00 mov $0x320,%edi ffffffff80002224: 41 ff d7 call *%r15 ffffffff80002227: 48 89 c3 mov %rax,%rbx if (ctx == NULL) { ffffffff8000222a: 48 85 c0 test %rax,%rax ffffffff8000222d: 0f 84 a8 08 00 00 je ffffffff80002adb goto fail; } struct flanterm_context *_ctx = (void *)ctx; memset(ctx, 0, sizeof(struct flanterm_fb_context)); ffffffff80002233: 31 f6 xor %esi,%esi ffffffff80002235: ba 20 03 00 00 mov $0x320,%edx ffffffff8000223a: 48 89 c7 mov %rax,%rdi ffffffff8000223d: e8 2e 45 00 00 call ffffffff80006770 ctx->red_mask_size = red_mask_size; ctx->red_mask_shift = red_mask_shift + (red_mask_size - 8); ctx->green_mask_size = green_mask_size; ctx->green_mask_shift = green_mask_shift + (green_mask_size - 8); ffffffff80002242: 8b 74 24 10 mov 0x10(%rsp),%esi ctx->red_mask_shift = red_mask_shift + (red_mask_size - 8); ffffffff80002246: 0f b6 44 24 34 movzbl 0x34(%rsp),%eax ctx->green_mask_shift = green_mask_shift + (green_mask_size - 8); ffffffff8000224b: 0f b6 54 24 38 movzbl 0x38(%rsp),%edx ctx->red_mask_size = red_mask_size; ffffffff80002250: 0f b6 4c 24 33 movzbl 0x33(%rsp),%ecx ctx->green_mask_shift = green_mask_shift + (green_mask_size - 8); ffffffff80002255: 89 f7 mov %esi,%edi ctx->red_mask_shift = red_mask_shift + (red_mask_size - 8); ffffffff80002257: 42 8d 44 30 f8 lea -0x8(%rax,%r14,1),%eax ctx->red_mask_size = red_mask_size; ffffffff8000225c: 40 0f b6 f6 movzbl %sil,%esi ctx->green_mask_shift = green_mask_shift + (green_mask_size - 8); ffffffff80002260: 8d 54 3a f8 lea -0x8(%rdx,%rdi,1),%edx ctx->red_mask_size = red_mask_size; ffffffff80002264: 88 c5 mov %al,%ch ffffffff80002266: c1 e6 10 shl $0x10,%esi return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002269: 44 0f b6 f0 movzbl %al,%r14d ctx->red_mask_size = red_mask_size; ffffffff8000226d: 0f b7 c9 movzwl %cx,%ecx ffffffff80002270: 89 d7 mov %edx,%edi ffffffff80002272: 44 0f b6 da movzbl %dl,%r11d ffffffff80002276: c1 e7 18 shl $0x18,%edi ffffffff80002279: 09 f1 or %esi,%ecx ctx->blue_mask_size = blue_mask_size; ffffffff8000227b: 8b 74 24 2c mov 0x2c(%rsp),%esi ctx->red_mask_size = red_mask_size; ffffffff8000227f: 09 f9 or %edi,%ecx ctx->blue_mask_shift = blue_mask_shift + (blue_mask_size - 8); ffffffff80002281: 0f b6 7c 24 3c movzbl 0x3c(%rsp),%edi if (ansi_colours != NULL) { ffffffff80002286: 48 83 bc 24 b8 00 00 cmpq $0x0,0xb8(%rsp) ffffffff8000228d: 00 00 ctx->blue_mask_size = blue_mask_size; ffffffff8000228f: 40 88 b3 24 02 00 00 mov %sil,0x224(%rbx) ctx->blue_mask_shift = blue_mask_shift + (blue_mask_size - 8); ffffffff80002296: 8d 74 37 f8 lea -0x8(%rdi,%rsi,1),%esi ctx->red_mask_size = red_mask_size; ffffffff8000229a: 89 8b 20 02 00 00 mov %ecx,0x220(%rbx) return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff800022a0: 40 0f b6 fe movzbl %sil,%edi ctx->blue_mask_shift = blue_mask_shift + (blue_mask_size - 8); ffffffff800022a4: 40 88 b3 25 02 00 00 mov %sil,0x225(%rbx) return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff800022ab: 89 7c 24 10 mov %edi,0x10(%rsp) if (ansi_colours != NULL) { ffffffff800022af: 0f 84 d6 08 00 00 je ffffffff80002b8b for (size_t i = 0; i < 8; i++) { ffffffff800022b5: 45 31 c9 xor %r9d,%r9d ctx->ansi_colours[i] = convert_colour(_ctx, ansi_colours[i]); ffffffff800022b8: 48 8b bc 24 b8 00 00 mov 0xb8(%rsp),%rdi ffffffff800022bf: 00 ffffffff800022c0: 46 8b 04 8f mov (%rdi,%r9,4),%r8d uint32_t g = (colour >> 8) & 0xff; ffffffff800022c4: 44 89 c1 mov %r8d,%ecx ffffffff800022c7: 0f b6 fd movzbl %ch,%edi return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff800022ca: 44 89 d9 mov %r11d,%ecx uint32_t g = (colour >> 8) & 0xff; ffffffff800022cd: 41 89 fa mov %edi,%r10d uint32_t r = (colour >> 16) & 0xff; ffffffff800022d0: 44 89 c7 mov %r8d,%edi uint32_t b = colour & 0xff; ffffffff800022d3: 45 0f b6 c0 movzbl %r8b,%r8d uint32_t r = (colour >> 16) & 0xff; ffffffff800022d7: c1 ef 10 shr $0x10,%edi return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff800022da: 41 d3 e2 shl %cl,%r10d ffffffff800022dd: 44 89 f1 mov %r14d,%ecx uint32_t r = (colour >> 16) & 0xff; ffffffff800022e0: 40 0f b6 ff movzbl %dil,%edi return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff800022e4: d3 e7 shl %cl,%edi ffffffff800022e6: 0f b6 4c 24 10 movzbl 0x10(%rsp),%ecx ffffffff800022eb: 44 09 d7 or %r10d,%edi ffffffff800022ee: 41 d3 e0 shl %cl,%r8d ffffffff800022f1: 44 09 c7 or %r8d,%edi ffffffff800022f4: 42 89 bc 8b 48 02 00 mov %edi,0x248(%rbx,%r9,4) ffffffff800022fb: 00 for (size_t i = 0; i < 8; i++) { ffffffff800022fc: 49 83 c1 01 add $0x1,%r9 ffffffff80002300: 49 83 f9 08 cmp $0x8,%r9 ffffffff80002304: 75 b2 jne ffffffff800022b8 ctx->ansi_colours[5] = convert_colour(_ctx, 0x00aa00aa); // magenta ctx->ansi_colours[6] = convert_colour(_ctx, 0x0000aaaa); // cyan ctx->ansi_colours[7] = convert_colour(_ctx, 0x00aaaaaa); // grey } if (ansi_bright_colours != NULL) { ffffffff80002306: 48 83 bc 24 c0 00 00 cmpq $0x0,0xc0(%rsp) ffffffff8000230d: 00 00 ffffffff8000230f: 0f 84 ee 08 00 00 je ffffffff80002c03 for (size_t i = 0; i < 8; i++) { ffffffff80002315: 45 31 c9 xor %r9d,%r9d ctx->ansi_bright_colours[i] = convert_colour(_ctx, ansi_bright_colours[i]); ffffffff80002318: 48 8b bc 24 c0 00 00 mov 0xc0(%rsp),%rdi ffffffff8000231f: 00 return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002320: 44 89 f1 mov %r14d,%ecx ctx->ansi_bright_colours[i] = convert_colour(_ctx, ansi_bright_colours[i]); ffffffff80002323: 46 8b 04 8f mov (%rdi,%r9,4),%r8d uint32_t r = (colour >> 16) & 0xff; ffffffff80002327: 45 89 c2 mov %r8d,%r10d ffffffff8000232a: 41 c1 ea 10 shr $0x10,%r10d ffffffff8000232e: 45 0f b6 d2 movzbl %r10b,%r10d return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002332: 41 d3 e2 shl %cl,%r10d uint32_t g = (colour >> 8) & 0xff; ffffffff80002335: 44 89 c1 mov %r8d,%ecx uint32_t b = colour & 0xff; ffffffff80002338: 45 0f b6 c0 movzbl %r8b,%r8d uint32_t g = (colour >> 8) & 0xff; ffffffff8000233c: 0f b6 fd movzbl %ch,%edi return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff8000233f: 44 89 d9 mov %r11d,%ecx ffffffff80002342: d3 e7 shl %cl,%edi ffffffff80002344: 0f b6 4c 24 10 movzbl 0x10(%rsp),%ecx ffffffff80002349: 44 09 d7 or %r10d,%edi ffffffff8000234c: 41 d3 e0 shl %cl,%r8d ffffffff8000234f: 44 09 c7 or %r8d,%edi ffffffff80002352: 42 89 bc 8b 68 02 00 mov %edi,0x268(%rbx,%r9,4) ffffffff80002359: 00 for (size_t i = 0; i < 8; i++) { ffffffff8000235a: 49 83 c1 01 add $0x1,%r9 ffffffff8000235e: 49 83 f9 08 cmp $0x8,%r9 ffffffff80002362: 75 b4 jne ffffffff80002318 } if (default_bg != NULL) { ctx->default_bg = convert_colour(_ctx, *default_bg); } else { ctx->default_bg = 0x00000000; // background (black) ffffffff80002364: 45 31 c0 xor %r8d,%r8d if (default_bg != NULL) { ffffffff80002367: 48 83 bc 24 c8 00 00 cmpq $0x0,0xc8(%rsp) ffffffff8000236e: 00 00 ffffffff80002370: 74 31 je ffffffff800023a3 ctx->default_bg = convert_colour(_ctx, *default_bg); ffffffff80002372: 48 8b bc 24 c8 00 00 mov 0xc8(%rsp),%rdi ffffffff80002379: 00 ffffffff8000237a: 8b 3f mov (%rdi),%edi uint32_t g = (colour >> 8) & 0xff; ffffffff8000237c: 89 f9 mov %edi,%ecx uint32_t b = colour & 0xff; ffffffff8000237e: 44 0f b6 c7 movzbl %dil,%r8d uint32_t r = (colour >> 16) & 0xff; ffffffff80002382: c1 ef 10 shr $0x10,%edi uint32_t g = (colour >> 8) & 0xff; ffffffff80002385: 0f b6 cd movzbl %ch,%ecx uint32_t r = (colour >> 16) & 0xff; ffffffff80002388: 40 0f b6 ff movzbl %dil,%edi uint32_t g = (colour >> 8) & 0xff; ffffffff8000238c: 41 89 c9 mov %ecx,%r9d return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff8000238f: 89 d1 mov %edx,%ecx ffffffff80002391: 41 d3 e1 shl %cl,%r9d ffffffff80002394: 89 f1 mov %esi,%ecx ffffffff80002396: 41 d3 e0 shl %cl,%r8d ffffffff80002399: 89 c1 mov %eax,%ecx ffffffff8000239b: 45 09 c8 or %r9d,%r8d ffffffff8000239e: d3 e7 shl %cl,%edi ffffffff800023a0: 41 09 f8 or %edi,%r8d } if (default_fg != NULL) { ffffffff800023a3: 48 83 bc 24 d0 00 00 cmpq $0x0,0xd0(%rsp) ffffffff800023aa: 00 00 ffffffff800023ac: 44 89 83 8c 02 00 00 mov %r8d,0x28c(%rbx) ffffffff800023b3: 0f 84 a3 09 00 00 je ffffffff80002d5c ctx->default_fg = convert_colour(_ctx, *default_fg); ffffffff800023b9: 48 8b bc 24 d0 00 00 mov 0xd0(%rsp),%rdi ffffffff800023c0: 00 ffffffff800023c1: 8b 3f mov (%rdi),%edi uint32_t g = (colour >> 8) & 0xff; ffffffff800023c3: 89 f9 mov %edi,%ecx uint32_t b = colour & 0xff; ffffffff800023c5: 44 0f b6 c7 movzbl %dil,%r8d uint32_t r = (colour >> 16) & 0xff; ffffffff800023c9: c1 ef 10 shr $0x10,%edi uint32_t g = (colour >> 8) & 0xff; ffffffff800023cc: 0f b6 cd movzbl %ch,%ecx uint32_t r = (colour >> 16) & 0xff; ffffffff800023cf: 40 0f b6 ff movzbl %dil,%edi uint32_t g = (colour >> 8) & 0xff; ffffffff800023d3: 41 89 c9 mov %ecx,%r9d return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff800023d6: 89 d1 mov %edx,%ecx ffffffff800023d8: 41 d3 e1 shl %cl,%r9d ffffffff800023db: 89 f1 mov %esi,%ecx ffffffff800023dd: 41 d3 e0 shl %cl,%r8d ffffffff800023e0: 89 c1 mov %eax,%ecx ffffffff800023e2: 45 09 c8 or %r9d,%r8d ffffffff800023e5: d3 e7 shl %cl,%edi ffffffff800023e7: 41 09 f8 or %edi,%r8d ffffffff800023ea: 45 89 c2 mov %r8d,%r10d } else { ctx->default_fg = convert_colour(_ctx, 0x00aaaaaa); // foreground (grey) } if (default_bg_bright != NULL) { ffffffff800023ed: 48 83 bc 24 d8 00 00 cmpq $0x0,0xd8(%rsp) ffffffff800023f4: 00 00 ffffffff800023f6: 44 89 93 88 02 00 00 mov %r10d,0x288(%rbx) ffffffff800023fd: 0f 84 cf 08 00 00 je ffffffff80002cd2 ctx->default_bg_bright = convert_colour(_ctx, *default_bg_bright); ffffffff80002403: 48 8b bc 24 d8 00 00 mov 0xd8(%rsp),%rdi ffffffff8000240a: 00 ffffffff8000240b: 44 8b 07 mov (%rdi),%r8d uint32_t g = (colour >> 8) & 0xff; ffffffff8000240e: 44 89 c1 mov %r8d,%ecx ffffffff80002411: 0f b6 fd movzbl %ch,%edi return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002414: 89 d1 mov %edx,%ecx uint32_t g = (colour >> 8) & 0xff; ffffffff80002416: 41 89 f9 mov %edi,%r9d uint32_t b = colour & 0xff; ffffffff80002419: 41 0f b6 f8 movzbl %r8b,%edi uint32_t r = (colour >> 16) & 0xff; ffffffff8000241d: 41 c1 e8 10 shr $0x10,%r8d return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002421: 41 d3 e1 shl %cl,%r9d ffffffff80002424: 89 f1 mov %esi,%ecx uint32_t r = (colour >> 16) & 0xff; ffffffff80002426: 45 0f b6 c0 movzbl %r8b,%r8d return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff8000242a: d3 e7 shl %cl,%edi ffffffff8000242c: 89 c1 mov %eax,%ecx ffffffff8000242e: 44 09 cf or %r9d,%edi ffffffff80002431: 41 d3 e0 shl %cl,%r8d ffffffff80002434: 44 09 c7 or %r8d,%edi } else { ctx->default_bg_bright = convert_colour(_ctx, 0x00555555); // background (black) } if (default_fg_bright != NULL) { ffffffff80002437: 48 83 bc 24 e0 00 00 cmpq $0x0,0xe0(%rsp) ffffffff8000243e: 00 00 ffffffff80002440: 89 bb 94 02 00 00 mov %edi,0x294(%rbx) ffffffff80002446: 0f 84 60 08 00 00 je ffffffff80002cac ctx->default_fg_bright = convert_colour(_ctx, *default_fg_bright); ffffffff8000244c: 48 8b bc 24 e0 00 00 mov 0xe0(%rsp),%rdi ffffffff80002453: 00 ffffffff80002454: 8b 3f mov (%rdi),%edi uint32_t g = (colour >> 8) & 0xff; ffffffff80002456: 89 f9 mov %edi,%ecx ffffffff80002458: 0f b6 cd movzbl %ch,%ecx ffffffff8000245b: 41 89 c8 mov %ecx,%r8d return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff8000245e: 89 d1 mov %edx,%ecx uint32_t b = colour & 0xff; ffffffff80002460: 40 0f b6 d7 movzbl %dil,%edx return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002464: 41 d3 e0 shl %cl,%r8d ffffffff80002467: 89 f1 mov %esi,%ecx uint32_t r = (colour >> 16) & 0xff; ffffffff80002469: 89 fe mov %edi,%esi ffffffff8000246b: c1 ee 10 shr $0x10,%esi return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff8000246e: d3 e2 shl %cl,%edx ffffffff80002470: 89 c1 mov %eax,%ecx uint32_t r = (colour >> 16) & 0xff; ffffffff80002472: 40 0f b6 f6 movzbl %sil,%esi return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002476: 44 09 c2 or %r8d,%edx ffffffff80002479: d3 e6 shl %cl,%esi ffffffff8000247b: 09 f2 or %esi,%edx } ctx->text_fg = ctx->default_fg; ctx->text_bg = 0xffffffff; ctx->framebuffer = (void *)framebuffer; ffffffff8000247d: 48 8b 44 24 08 mov 0x8(%rsp),%rax ffffffff80002482: 89 93 90 02 00 00 mov %edx,0x290(%rbx) ctx->height = height; ctx->pitch = pitch; #define FONT_BYTES ((font_width * font_height * FLANTERM_FB_FONT_GLYPHS) / 8) if (font != NULL) { ffffffff80002488: 48 83 bc 24 e8 00 00 cmpq $0x0,0xe8(%rsp) ffffffff8000248f: 00 00 ctx->text_fg = ctx->default_fg; ffffffff80002491: 44 89 93 e0 02 00 00 mov %r10d,0x2e0(%rbx) ctx->framebuffer = (void *)framebuffer; ffffffff80002498: 48 89 83 f8 01 00 00 mov %rax,0x1f8(%rbx) ctx->pitch = pitch; ffffffff8000249f: 48 8b 44 24 20 mov 0x20(%rsp),%rax ctx->text_bg = 0xffffffff; ffffffff800024a4: c7 83 e4 02 00 00 ff movl $0xffffffff,0x2e4(%rbx) ffffffff800024ab: ff ff ff ctx->width = width; ffffffff800024ae: 4c 89 ab 08 02 00 00 mov %r13,0x208(%rbx) ctx->height = height; ffffffff800024b5: 4c 89 a3 10 02 00 00 mov %r12,0x210(%rbx) ctx->pitch = pitch; ffffffff800024bc: 48 89 83 00 02 00 00 mov %rax,0x200(%rbx) if (font != NULL) { ffffffff800024c3: 0f 84 2e 08 00 00 je ffffffff80002cf7 ctx->font_width = font_width; ffffffff800024c9: 48 8b 84 24 f0 00 00 mov 0xf0(%rsp),%rax ffffffff800024d0: 00 ctx->font_height = font_height; ctx->font_bits_size = FONT_BYTES; ffffffff800024d1: 48 89 ef mov %rbp,%rdi ctx->font_height = font_height; ffffffff800024d4: 48 89 ab c0 01 00 00 mov %rbp,0x1c0(%rbx) ctx->font_bits_size = FONT_BYTES; ffffffff800024db: 48 0f af f8 imul %rax,%rdi ctx->font_width = font_width; ffffffff800024df: 48 89 83 b8 01 00 00 mov %rax,0x1b8(%rbx) ctx->font_bits_size = FONT_BYTES; ffffffff800024e6: 48 c1 e7 08 shl $0x8,%rdi ffffffff800024ea: 48 c1 ef 03 shr $0x3,%rdi ffffffff800024ee: 48 89 bb 28 02 00 00 mov %rdi,0x228(%rbx) ctx->font_bits = _malloc(ctx->font_bits_size); ffffffff800024f5: 41 ff d7 call *%r15 ffffffff800024f8: 48 89 83 30 02 00 00 mov %rax,0x230(%rbx) ffffffff800024ff: 48 89 c7 mov %rax,%rdi if (ctx->font_bits == NULL) { ffffffff80002502: 48 85 c0 test %rax,%rax ffffffff80002505: 0f 84 0f 05 00 00 je ffffffff80002a1a goto fail; } memcpy(ctx->font_bits, font, ctx->font_bits_size); ffffffff8000250b: 48 8b 93 28 02 00 00 mov 0x228(%rbx),%rdx ffffffff80002512: 48 8b b4 24 e8 00 00 mov 0xe8(%rsp),%rsi ffffffff80002519: 00 ffffffff8000251a: e8 21 42 00 00 call ffffffff80006740 memcpy(ctx->font_bits, builtin_font, ctx->font_bits_size); } #undef FONT_BYTES ctx->font_width += font_spacing; ffffffff8000251f: 48 8b 84 24 00 01 00 mov 0x100(%rsp),%rax ffffffff80002526: 00 ffffffff80002527: 48 03 83 b8 01 00 00 add 0x1b8(%rbx),%rax ffffffff8000252e: 48 89 83 b8 01 00 00 mov %rax,0x1b8(%rbx) ctx->font_bool_size = FLANTERM_FB_FONT_GLYPHS * font_height * ctx->font_width * sizeof(bool); ffffffff80002535: 48 0f af c5 imul %rbp,%rax ffffffff80002539: 48 c1 e0 08 shl $0x8,%rax ffffffff8000253d: 48 89 83 38 02 00 00 mov %rax,0x238(%rbx) ffffffff80002544: 48 89 c7 mov %rax,%rdi ctx->font_bool = _malloc(ctx->font_bool_size); ffffffff80002547: 41 ff d7 call *%r15 ffffffff8000254a: 48 89 83 40 02 00 00 mov %rax,0x240(%rbx) ffffffff80002551: 48 89 c2 mov %rax,%rdx if (ctx->font_bool == NULL) { ffffffff80002554: 48 85 c0 test %rax,%rax ffffffff80002557: 0f 84 bd 04 00 00 je ffffffff80002a1a } ctx->font_scale_x = font_scale_x; ctx->font_scale_y = font_scale_y; ctx->glyph_width = ctx->font_width * font_scale_x; ffffffff8000255d: 4c 8b 93 b8 01 00 00 mov 0x1b8(%rbx),%r10 ffffffff80002564: 49 89 ee mov %rbp,%r14 ffffffff80002567: 45 31 e4 xor %r12d,%r12d if ((glyph[y] & (0x80 >> x))) { ffffffff8000256a: 48 89 de mov %rbx,%rsi ffffffff8000256d: 4c 8b ab 30 02 00 00 mov 0x230(%rbx),%r13 ctx->glyph_width = ctx->font_width * font_scale_x; ffffffff80002574: 49 c7 c1 40 ff ff ff mov $0xffffffffffffff40,%r9 if ((glyph[y] & (0x80 >> x))) { ffffffff8000257b: 41 b8 80 00 00 00 mov $0x80,%r8d ffffffff80002581: 4d 0f af f2 imul %r10,%r14 ffffffff80002585: 4e 8d 5c 2d 00 lea 0x0(%rbp,%r13,1),%r11 ffffffff8000258a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) for (size_t y = 0; y < font_height; y++) { ffffffff80002590: 4a 8d 3c 12 lea (%rdx,%r10,1),%rdi ffffffff80002594: 4b 8d 04 2c lea (%r12,%r13,1),%rax ffffffff80002598: 48 89 d3 mov %rdx,%rbx ffffffff8000259b: 48 85 ed test %rbp,%rbp ffffffff8000259e: 74 64 je ffffffff80002604 ffffffff800025a0: 4c 89 64 24 10 mov %r12,0x10(%rsp) ffffffff800025a5: 0f 1f 00 nopl (%rax) for (size_t x = 0; x < 8; x++) { ffffffff800025a8: 4c 89 74 24 08 mov %r14,0x8(%rsp) ffffffff800025ad: 31 c9 xor %ecx,%ecx ffffffff800025af: 90 nop if ((glyph[y] & (0x80 >> x))) { ffffffff800025b0: 44 0f b6 20 movzbl (%rax),%r12d ffffffff800025b4: 45 89 c6 mov %r8d,%r14d ffffffff800025b7: 41 d3 fe sar %cl,%r14d ffffffff800025ba: 45 85 e6 test %r12d,%r14d ctx->font_bool[offset] = true; ffffffff800025bd: 0f 95 04 0b setne (%rbx,%rcx,1) for (size_t x = 0; x < 8; x++) { ffffffff800025c1: 48 83 c1 01 add $0x1,%rcx ffffffff800025c5: 48 83 f9 08 cmp $0x8,%rcx ffffffff800025c9: 75 e5 jne ffffffff800025b0 ffffffff800025cb: 4c 8b 74 24 08 mov 0x8(%rsp),%r14 for (size_t x = 8; x < ctx->font_width; x++) { ffffffff800025d0: 48 8d 4b 08 lea 0x8(%rbx),%rcx ffffffff800025d4: 49 83 fa 08 cmp $0x8,%r10 ffffffff800025d8: 76 16 jbe ffffffff800025f0 if (i >= 0xc0 && i <= 0xdf) { ffffffff800025da: 49 83 f9 1f cmp $0x1f,%r9 ffffffff800025de: 0f 86 1c 04 00 00 jbe ffffffff80002a00 ctx->font_bool[offset] = (glyph[y] & 1); ffffffff800025e4: c6 01 00 movb $0x0,(%rcx) for (size_t x = 8; x < ctx->font_width; x++) { ffffffff800025e7: 48 83 c1 01 add $0x1,%rcx ffffffff800025eb: 48 39 f9 cmp %rdi,%rcx ffffffff800025ee: 75 ea jne ffffffff800025da for (size_t y = 0; y < font_height; y++) { ffffffff800025f0: 48 83 c0 01 add $0x1,%rax ffffffff800025f4: 4c 01 d7 add %r10,%rdi ffffffff800025f7: 4c 01 d3 add %r10,%rbx ffffffff800025fa: 49 39 c3 cmp %rax,%r11 ffffffff800025fd: 75 a9 jne ffffffff800025a8 ffffffff800025ff: 4c 8b 64 24 10 mov 0x10(%rsp),%r12 for (size_t i = 0; i < FLANTERM_FB_FONT_GLYPHS; i++) { ffffffff80002604: 49 83 c1 01 add $0x1,%r9 ffffffff80002608: 49 01 eb add %rbp,%r11 ffffffff8000260b: 4c 01 f2 add %r14,%rdx ffffffff8000260e: 49 01 ec add %rbp,%r12 ffffffff80002611: 49 83 f9 40 cmp $0x40,%r9 ffffffff80002615: 0f 85 75 ff ff ff jne ffffffff80002590 ctx->font_scale_x = font_scale_x; ffffffff8000261b: 48 8b 84 24 08 01 00 mov 0x108(%rsp),%rax ffffffff80002622: 00 ffffffff80002623: 31 d2 xor %edx,%edx ffffffff80002625: 48 89 f3 mov %rsi,%rbx ctx->glyph_width = ctx->font_width * font_scale_x; ffffffff80002628: 4c 0f af 94 24 08 01 imul 0x108(%rsp),%r10 ffffffff8000262f: 00 00 ctx->font_scale_x = font_scale_x; ffffffff80002631: 48 89 86 d8 01 00 00 mov %rax,0x1d8(%rsi) ctx->font_scale_y = font_scale_y; ffffffff80002638: 48 8b 84 24 10 01 00 mov 0x110(%rsp),%rax ffffffff8000263f: 00 ffffffff80002640: 48 89 86 e0 01 00 00 mov %rax,0x1e0(%rsi) ctx->glyph_height = font_height * font_scale_y; ffffffff80002647: 48 0f af e8 imul %rax,%rbp _ctx->cols = (ctx->width - margin * 2) / ctx->glyph_width; ffffffff8000264b: 48 8b 84 24 18 01 00 mov 0x118(%rsp),%rax ffffffff80002652: 00 ctx->glyph_width = ctx->font_width * font_scale_x; ffffffff80002653: 4c 89 96 c8 01 00 00 mov %r10,0x1c8(%rsi) _ctx->cols = (ctx->width - margin * 2) / ctx->glyph_width; ffffffff8000265a: 48 8d 3c 00 lea (%rax,%rax,1),%rdi ffffffff8000265e: 48 8b 86 08 02 00 00 mov 0x208(%rsi),%rax ctx->glyph_height = font_height * font_scale_y; ffffffff80002665: 48 89 ae d0 01 00 00 mov %rbp,0x1d0(%rsi) _ctx->cols = (ctx->width - margin * 2) / ctx->glyph_width; ffffffff8000266c: 48 29 f8 sub %rdi,%rax ffffffff8000266f: 49 f7 f2 div %r10 ffffffff80002672: 48 89 83 e8 00 00 00 mov %rax,0xe8(%rbx) _ctx->rows = (ctx->height - margin * 2) / ctx->glyph_height; ffffffff80002679: 48 89 c1 mov %rax,%rcx ffffffff8000267c: 48 89 d6 mov %rdx,%rsi ffffffff8000267f: 31 d2 xor %edx,%edx ffffffff80002681: 48 8b 83 10 02 00 00 mov 0x210(%rbx),%rax ctx->offset_x = margin + ((ctx->width - margin * 2) % ctx->glyph_width) / 2; ffffffff80002688: 48 d1 ee shr $1,%rsi ffffffff8000268b: 48 03 b4 24 18 01 00 add 0x118(%rsp),%rsi ffffffff80002692: 00 ffffffff80002693: 48 89 b3 e8 01 00 00 mov %rsi,0x1e8(%rbx) _ctx->rows = (ctx->height - margin * 2) / ctx->glyph_height; ffffffff8000269a: 48 29 f8 sub %rdi,%rax ffffffff8000269d: 48 f7 f5 div %rbp ctx->offset_y = margin + ((ctx->height - margin * 2) % ctx->glyph_height) / 2; ctx->grid_size = _ctx->rows * _ctx->cols * sizeof(struct flanterm_fb_char); ffffffff800026a0: 48 0f af c8 imul %rax,%rcx ctx->offset_y = margin + ((ctx->height - margin * 2) % ctx->glyph_height) / 2; ffffffff800026a4: 48 d1 ea shr $1,%rdx ffffffff800026a7: 48 03 94 24 18 01 00 add 0x118(%rsp),%rdx ffffffff800026ae: 00 _ctx->rows = (ctx->height - margin * 2) / ctx->glyph_height; ffffffff800026af: 48 89 83 e0 00 00 00 mov %rax,0xe0(%rbx) ctx->offset_y = margin + ((ctx->height - margin * 2) % ctx->glyph_height) / 2; ffffffff800026b6: 48 89 93 f0 01 00 00 mov %rdx,0x1f0(%rbx) ctx->grid_size = _ctx->rows * _ctx->cols * sizeof(struct flanterm_fb_char); ffffffff800026bd: 48 8d 3c 49 lea (%rcx,%rcx,2),%rdi ffffffff800026c1: 48 c1 e7 02 shl $0x2,%rdi ffffffff800026c5: 48 89 bb a8 02 00 00 mov %rdi,0x2a8(%rbx) ctx->grid = _malloc(ctx->grid_size); ffffffff800026cc: 41 ff d7 call *%r15 ffffffff800026cf: 48 89 83 c0 02 00 00 mov %rax,0x2c0(%rbx) if (ctx->grid == NULL) { ffffffff800026d6: 48 85 c0 test %rax,%rax ffffffff800026d9: 0f 84 3b 03 00 00 je ffffffff80002a1a goto fail; } for (size_t i = 0; i < _ctx->rows * _ctx->cols; i++) { ffffffff800026df: 48 8b bb e0 00 00 00 mov 0xe0(%rbx),%rdi ffffffff800026e6: 48 0f af bb e8 00 00 imul 0xe8(%rbx),%rdi ffffffff800026ed: 00 ffffffff800026ee: 48 85 ff test %rdi,%rdi ffffffff800026f1: 74 2d je ffffffff80002720 ffffffff800026f3: 48 8d 14 7f lea (%rdi,%rdi,2),%rdx ctx->grid[i].c = ' '; ctx->grid[i].fg = ctx->text_fg; ffffffff800026f7: 8b b3 e0 02 00 00 mov 0x2e0(%rbx),%esi ctx->grid[i].bg = ctx->text_bg; ffffffff800026fd: 8b 8b e4 02 00 00 mov 0x2e4(%rbx),%ecx ffffffff80002703: 48 8d 14 90 lea (%rax,%rdx,4),%rdx ctx->grid[i].c = ' '; ffffffff80002707: c7 00 20 00 00 00 movl $0x20,(%rax) for (size_t i = 0; i < _ctx->rows * _ctx->cols; i++) { ffffffff8000270d: 48 83 c0 0c add $0xc,%rax ctx->grid[i].fg = ctx->text_fg; ffffffff80002711: 89 70 f8 mov %esi,-0x8(%rax) ctx->grid[i].bg = ctx->text_bg; ffffffff80002714: 89 48 fc mov %ecx,-0x4(%rax) for (size_t i = 0; i < _ctx->rows * _ctx->cols; i++) { ffffffff80002717: 48 39 c2 cmp %rax,%rdx ffffffff8000271a: 75 eb jne ffffffff80002707 } ctx->queue_size = _ctx->rows * _ctx->cols * sizeof(struct flanterm_fb_queue_item); ffffffff8000271c: 48 c1 e7 05 shl $0x5,%rdi ffffffff80002720: 48 89 bb b0 02 00 00 mov %rdi,0x2b0(%rbx) ctx->queue = _malloc(ctx->queue_size); ffffffff80002727: 41 ff d7 call *%r15 ffffffff8000272a: 48 89 83 c8 02 00 00 mov %rax,0x2c8(%rbx) ffffffff80002731: 48 89 c7 mov %rax,%rdi if (ctx->queue == NULL) { ffffffff80002734: 48 85 c0 test %rax,%rax ffffffff80002737: 0f 84 dd 02 00 00 je ffffffff80002a1a goto fail; } ctx->queue_i = 0; ffffffff8000273d: 48 c7 83 d0 02 00 00 movq $0x0,0x2d0(%rbx) ffffffff80002744: 00 00 00 00 memset(ctx->queue, 0, ctx->queue_size); ffffffff80002748: 48 8b 93 b0 02 00 00 mov 0x2b0(%rbx),%rdx ffffffff8000274f: 31 f6 xor %esi,%esi ffffffff80002751: e8 1a 40 00 00 call ffffffff80006770 ctx->map_size = _ctx->rows * _ctx->cols * sizeof(struct flanterm_fb_queue_item *); ffffffff80002756: 48 8b bb e0 00 00 00 mov 0xe0(%rbx),%rdi ffffffff8000275d: 48 0f af bb e8 00 00 imul 0xe8(%rbx),%rdi ffffffff80002764: 00 ffffffff80002765: 48 c1 e7 03 shl $0x3,%rdi ffffffff80002769: 48 89 bb b8 02 00 00 mov %rdi,0x2b8(%rbx) ctx->map = _malloc(ctx->map_size); ffffffff80002770: 41 ff d7 call *%r15 ffffffff80002773: 48 89 83 d8 02 00 00 mov %rax,0x2d8(%rbx) ffffffff8000277a: 48 89 c7 mov %rax,%rdi if (ctx->map == NULL) { ffffffff8000277d: 48 85 c0 test %rax,%rax ffffffff80002780: 0f 84 94 02 00 00 je ffffffff80002a1a goto fail; } memset(ctx->map, 0, ctx->map_size); ffffffff80002786: 48 8b 93 b8 02 00 00 mov 0x2b8(%rbx),%rdx ffffffff8000278d: 31 f6 xor %esi,%esi ffffffff8000278f: e8 dc 3f 00 00 call ffffffff80006770 if (canvas != NULL) { ffffffff80002794: 48 83 bc 24 b0 00 00 cmpq $0x0,0xb0(%rsp) ffffffff8000279b: 00 00 ffffffff8000279d: 0f 84 e0 05 00 00 je ffffffff80002d83 ctx->canvas_size = ctx->width * ctx->height * sizeof(uint32_t); ffffffff800027a3: 48 8b bb 08 02 00 00 mov 0x208(%rbx),%rdi ffffffff800027aa: 48 0f af bb 10 02 00 imul 0x210(%rbx),%rdi ffffffff800027b1: 00 ffffffff800027b2: 48 c1 e7 02 shl $0x2,%rdi ffffffff800027b6: 48 89 bb 98 02 00 00 mov %rdi,0x298(%rbx) ctx->canvas = _malloc(ctx->canvas_size); ffffffff800027bd: 41 ff d7 call *%r15 ffffffff800027c0: 48 89 83 a0 02 00 00 mov %rax,0x2a0(%rbx) ffffffff800027c7: 48 89 c7 mov %rax,%rdi if (ctx->canvas == NULL) { ffffffff800027ca: 48 85 c0 test %rax,%rax ffffffff800027cd: 0f 84 47 02 00 00 je ffffffff80002a1a goto fail; } for (size_t i = 0; i < ctx->width * ctx->height; i++) { ffffffff800027d3: 4c 8b 9b 08 02 00 00 mov 0x208(%rbx),%r11 ffffffff800027da: 4c 0f af 9b 10 02 00 imul 0x210(%rbx),%r11 ffffffff800027e1: 00 ffffffff800027e2: 4d 85 db test %r11,%r11 ffffffff800027e5: 74 5a je ffffffff80002841 return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff800027e7: 44 0f b6 93 21 02 00 movzbl 0x221(%rbx),%r10d ffffffff800027ee: 00 ffffffff800027ef: 44 0f b6 8b 23 02 00 movzbl 0x223(%rbx),%r9d ffffffff800027f6: 00 for (size_t i = 0; i < ctx->width * ctx->height; i++) { ffffffff800027f7: 31 f6 xor %esi,%esi return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff800027f9: 44 0f b6 83 25 02 00 movzbl 0x225(%rbx),%r8d ffffffff80002800: 00 for (size_t i = 0; i < ctx->width * ctx->height; i++) { ffffffff80002801: 48 8b 94 24 b0 00 00 mov 0xb0(%rsp),%rdx ffffffff80002808: 00 ctx->canvas[i] = convert_colour(_ctx, canvas[i]); ffffffff80002809: 8b 2c b2 mov (%rdx,%rsi,4),%ebp return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff8000280c: 44 89 d1 mov %r10d,%ecx uint32_t r = (colour >> 16) & 0xff; ffffffff8000280f: 89 e8 mov %ebp,%eax ffffffff80002811: c1 e8 10 shr $0x10,%eax ffffffff80002814: 0f b6 c0 movzbl %al,%eax return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002817: d3 e0 shl %cl,%eax uint32_t g = (colour >> 8) & 0xff; ffffffff80002819: 89 e9 mov %ebp,%ecx uint32_t b = colour & 0xff; ffffffff8000281b: 40 0f b6 ed movzbl %bpl,%ebp uint32_t g = (colour >> 8) & 0xff; ffffffff8000281f: 0f b6 cd movzbl %ch,%ecx ffffffff80002822: 41 89 cc mov %ecx,%r12d return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002825: 44 89 c9 mov %r9d,%ecx ffffffff80002828: 41 d3 e4 shl %cl,%r12d ffffffff8000282b: 44 89 c1 mov %r8d,%ecx ffffffff8000282e: 44 09 e0 or %r12d,%eax ffffffff80002831: d3 e5 shl %cl,%ebp ffffffff80002833: 09 e8 or %ebp,%eax ffffffff80002835: 89 04 b7 mov %eax,(%rdi,%rsi,4) for (size_t i = 0; i < ctx->width * ctx->height; i++) { ffffffff80002838: 48 83 c6 01 add $0x1,%rsi ffffffff8000283c: 49 39 f3 cmp %rsi,%r11 ffffffff8000283f: 75 c8 jne ffffffff80002809 } } if (font_scale_x == 1 && font_scale_y == 1) { ffffffff80002841: 48 83 bc 24 08 01 00 cmpq $0x1,0x108(%rsp) ffffffff80002848: 00 01 ffffffff8000284a: 0f 85 6c 05 00 00 jne ffffffff80002dbc ffffffff80002850: 48 83 bc 24 10 01 00 cmpq $0x1,0x110(%rsp) ffffffff80002857: 00 01 ffffffff80002859: 48 c7 c0 90 1d 00 80 mov $0xffffffff80001d90,%rax ffffffff80002860: 0f 85 56 05 00 00 jne ffffffff80002dbc if (canvas == NULL) { ctx->plot_char = plot_char_unscaled_uncanvas; } else { ctx->plot_char = plot_char_unscaled_canvas; ffffffff80002866: 48 89 83 b0 01 00 00 mov %rax,0x1b0(%rbx) _ctx->restore_state = flanterm_fb_restore_state; _ctx->double_buffer_flush = flanterm_fb_double_buffer_flush; _ctx->full_refresh = flanterm_fb_full_refresh; _ctx->deinit = flanterm_fb_deinit; flanterm_context_reinit(_ctx); ffffffff8000286d: 48 89 df mov %rbx,%rdi _ctx->raw_putchar = flanterm_fb_raw_putchar; ffffffff80002870: 48 c7 83 f0 00 00 00 movq $0xffffffff800018c0,0xf0(%rbx) ffffffff80002877: c0 18 00 80 _ctx->clear = flanterm_fb_clear; ffffffff8000287b: 48 c7 83 f8 00 00 00 movq $0xffffffff80001350,0xf8(%rbx) ffffffff80002882: 50 13 00 80 _ctx->set_cursor_pos = flanterm_fb_set_cursor_pos; ffffffff80002886: 48 c7 83 00 01 00 00 movq $0xffffffff800013e0,0x100(%rbx) ffffffff8000288d: e0 13 00 80 _ctx->get_cursor_pos = flanterm_fb_get_cursor_pos; ffffffff80002891: 48 c7 83 08 01 00 00 movq $0xffffffff80001430,0x108(%rbx) ffffffff80002898: 30 14 00 80 _ctx->set_text_fg = flanterm_fb_set_text_fg; ffffffff8000289c: 48 c7 83 10 01 00 00 movq $0xffffffff800014f0,0x110(%rbx) ffffffff800028a3: f0 14 00 80 _ctx->set_text_bg = flanterm_fb_set_text_bg; ffffffff800028a7: 48 c7 83 18 01 00 00 movq $0xffffffff80001510,0x118(%rbx) ffffffff800028ae: 10 15 00 80 _ctx->set_text_fg_bright = flanterm_fb_set_text_fg_bright; ffffffff800028b2: 48 c7 83 20 01 00 00 movq $0xffffffff80001530,0x120(%rbx) ffffffff800028b9: 30 15 00 80 _ctx->set_text_bg_bright = flanterm_fb_set_text_bg_bright; ffffffff800028bd: 48 c7 83 28 01 00 00 movq $0xffffffff80001550,0x128(%rbx) ffffffff800028c4: 50 15 00 80 _ctx->set_text_fg_rgb = flanterm_fb_set_text_fg_rgb; ffffffff800028c8: 48 c7 83 30 01 00 00 movq $0xffffffff80001570,0x130(%rbx) ffffffff800028cf: 70 15 00 80 _ctx->set_text_bg_rgb = flanterm_fb_set_text_bg_rgb; ffffffff800028d3: 48 c7 83 38 01 00 00 movq $0xffffffff800015b0,0x138(%rbx) ffffffff800028da: b0 15 00 80 _ctx->set_text_fg_default = flanterm_fb_set_text_fg_default; ffffffff800028de: 48 c7 83 40 01 00 00 movq $0xffffffff800015f0,0x140(%rbx) ffffffff800028e5: f0 15 00 80 _ctx->set_text_bg_default = flanterm_fb_set_text_bg_default; ffffffff800028e9: 48 c7 83 48 01 00 00 movq $0xffffffff80001610,0x148(%rbx) ffffffff800028f0: 10 16 00 80 _ctx->set_text_fg_default_bright = flanterm_fb_set_text_fg_default_bright; ffffffff800028f4: 48 c7 83 50 01 00 00 movq $0xffffffff80001620,0x150(%rbx) ffffffff800028fb: 20 16 00 80 _ctx->set_text_bg_default_bright = flanterm_fb_set_text_bg_default_bright; ffffffff800028ff: 48 c7 83 58 01 00 00 movq $0xffffffff80001640,0x158(%rbx) ffffffff80002906: 40 16 00 80 _ctx->move_character = flanterm_fb_move_character; ffffffff8000290a: 48 c7 83 60 01 00 00 movq $0xffffffff80001470,0x160(%rbx) ffffffff80002911: 70 14 00 80 _ctx->scroll = flanterm_fb_scroll; ffffffff80002915: 48 c7 83 68 01 00 00 movq $0xffffffff80001260,0x168(%rbx) ffffffff8000291c: 60 12 00 80 _ctx->revscroll = flanterm_fb_revscroll; ffffffff80002920: 48 c7 83 70 01 00 00 movq $0xffffffff80001180,0x170(%rbx) ffffffff80002927: 80 11 00 80 _ctx->swap_palette = flanterm_fb_swap_palette; ffffffff8000292b: 48 c7 83 78 01 00 00 movq $0xffffffff800010b0,0x178(%rbx) ffffffff80002932: b0 10 00 80 _ctx->save_state = flanterm_fb_save_state; ffffffff80002936: 48 c7 83 80 01 00 00 movq $0xffffffff80001050,0x180(%rbx) ffffffff8000293d: 50 10 00 80 _ctx->restore_state = flanterm_fb_restore_state; ffffffff80002941: 48 c7 83 88 01 00 00 movq $0xffffffff80001080,0x188(%rbx) ffffffff80002948: 80 10 00 80 _ctx->double_buffer_flush = flanterm_fb_double_buffer_flush; ffffffff8000294c: 48 c7 83 90 01 00 00 movq $0xffffffff80001760,0x190(%rbx) ffffffff80002953: 60 17 00 80 _ctx->full_refresh = flanterm_fb_full_refresh; ffffffff80002957: 48 c7 83 98 01 00 00 movq $0xffffffff800019b0,0x198(%rbx) ffffffff8000295e: b0 19 00 80 _ctx->deinit = flanterm_fb_deinit; ffffffff80002962: 48 c7 83 a0 01 00 00 movq $0xffffffff80001b00,0x1a0(%rbx) ffffffff80002969: 00 1b 00 80 flanterm_context_reinit(_ctx); ffffffff8000296d: e8 6e 04 00 00 call ffffffff80002de0 flanterm_fb_full_refresh(_ctx); ffffffff80002972: 48 89 df mov %rbx,%rdi ffffffff80002975: e8 36 f0 ff ff call ffffffff800019b0 #ifndef FLANTERM_FB_DISABLE_BUMP_ALLOC if (_malloc == bump_alloc) { ffffffff8000297a: 49 81 ff 00 10 00 80 cmp $0xffffffff80001000,%r15 ffffffff80002981: 0f 84 29 04 00 00 je ffffffff80002db0 if (ctx != NULL) { _free(ctx, sizeof(struct flanterm_fb_context)); } return NULL; } ffffffff80002987: 48 83 c4 48 add $0x48,%rsp ffffffff8000298b: 48 89 d8 mov %rbx,%rax ffffffff8000298e: 5b pop %rbx ffffffff8000298f: 5d pop %rbp ffffffff80002990: 41 5c pop %r12 ffffffff80002992: 41 5d pop %r13 ffffffff80002994: 41 5e pop %r14 ffffffff80002996: 41 5f pop %r15 ffffffff80002998: c3 ret if (width >= (3840 + 3840 / 3) && height >= (2160 + 2160 / 3)) { ffffffff80002999: 49 81 fd ff 13 00 00 cmp $0x13ff,%r13 ffffffff800029a0: 76 25 jbe ffffffff800029c7 font_scale_y = 4; ffffffff800029a2: 48 c7 84 24 10 01 00 movq $0x4,0x110(%rsp) ffffffff800029a9: 00 04 00 00 00 font_scale_x = 4; ffffffff800029ae: 48 c7 84 24 08 01 00 movq $0x4,0x108(%rsp) ffffffff800029b5: 00 04 00 00 00 if (width >= (3840 + 3840 / 3) && height >= (2160 + 2160 / 3)) { ffffffff800029ba: 49 81 fc 3f 0b 00 00 cmp $0xb3f,%r12 ffffffff800029c1: 0f 87 2d f8 ff ff ja ffffffff800021f4 if (width >= (1920 + 1920 / 3) && height >= (1080 + 1080 / 3)) { ffffffff800029c7: 49 81 fd ff 09 00 00 cmp $0x9ff,%r13 ffffffff800029ce: 0f 97 c2 seta %dl ffffffff800029d1: 31 c0 xor %eax,%eax ffffffff800029d3: 49 81 fc 9f 05 00 00 cmp $0x59f,%r12 ffffffff800029da: 0f 97 c0 seta %al ffffffff800029dd: 48 21 d0 and %rdx,%rax ffffffff800029e0: 48 83 c0 01 add $0x1,%rax ffffffff800029e4: 48 89 84 24 08 01 00 mov %rax,0x108(%rsp) ffffffff800029eb: 00 ffffffff800029ec: 48 89 84 24 10 01 00 mov %rax,0x110(%rsp) ffffffff800029f3: 00 ffffffff800029f4: e9 fb f7 ff ff jmp ffffffff800021f4 ffffffff800029f9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) ctx->font_bool[offset] = (glyph[y] & 1); ffffffff80002a00: 44 0f b6 20 movzbl (%rax),%r12d for (size_t x = 8; x < ctx->font_width; x++) { ffffffff80002a04: 48 83 c1 01 add $0x1,%rcx ctx->font_bool[offset] = (glyph[y] & 1); ffffffff80002a08: 41 83 e4 01 and $0x1,%r12d ffffffff80002a0c: 44 88 61 ff mov %r12b,-0x1(%rcx) for (size_t x = 8; x < ctx->font_width; x++) { ffffffff80002a10: 48 39 f9 cmp %rdi,%rcx ffffffff80002a13: 75 eb jne ffffffff80002a00 ffffffff80002a15: e9 d6 fb ff ff jmp ffffffff800025f0 if (_malloc == bump_alloc) { ffffffff80002a1a: 49 81 ff 00 10 00 80 cmp $0xffffffff80001000,%r15 ffffffff80002a21: 0f 84 a1 03 00 00 je ffffffff80002dc8 if (_free == NULL) { ffffffff80002a27: 48 8b 44 24 18 mov 0x18(%rsp),%rax ffffffff80002a2c: 48 85 c0 test %rax,%rax ffffffff80002a2f: 0f 84 a6 00 00 00 je ffffffff80002adb if (ctx->canvas != NULL) { ffffffff80002a35: 48 8b bb a0 02 00 00 mov 0x2a0(%rbx),%rdi ffffffff80002a3c: 48 85 ff test %rdi,%rdi ffffffff80002a3f: 74 09 je ffffffff80002a4a _free(ctx->canvas, ctx->canvas_size); ffffffff80002a41: 48 8b b3 98 02 00 00 mov 0x298(%rbx),%rsi ffffffff80002a48: ff d0 call *%rax if (ctx->map != NULL) { ffffffff80002a4a: 48 8b bb d8 02 00 00 mov 0x2d8(%rbx),%rdi ffffffff80002a51: 48 85 ff test %rdi,%rdi ffffffff80002a54: 74 0e je ffffffff80002a64 _free(ctx->map, ctx->map_size); ffffffff80002a56: 48 8b b3 b8 02 00 00 mov 0x2b8(%rbx),%rsi ffffffff80002a5d: 48 8b 44 24 18 mov 0x18(%rsp),%rax ffffffff80002a62: ff d0 call *%rax if (ctx->queue != NULL) { ffffffff80002a64: 48 8b bb c8 02 00 00 mov 0x2c8(%rbx),%rdi ffffffff80002a6b: 48 85 ff test %rdi,%rdi ffffffff80002a6e: 74 0e je ffffffff80002a7e _free(ctx->queue, ctx->queue_size); ffffffff80002a70: 48 8b b3 b0 02 00 00 mov 0x2b0(%rbx),%rsi ffffffff80002a77: 48 8b 44 24 18 mov 0x18(%rsp),%rax ffffffff80002a7c: ff d0 call *%rax if (ctx->grid != NULL) { ffffffff80002a7e: 48 8b bb c0 02 00 00 mov 0x2c0(%rbx),%rdi ffffffff80002a85: 48 85 ff test %rdi,%rdi ffffffff80002a88: 74 0e je ffffffff80002a98 _free(ctx->grid, ctx->grid_size); ffffffff80002a8a: 48 8b b3 a8 02 00 00 mov 0x2a8(%rbx),%rsi ffffffff80002a91: 48 8b 44 24 18 mov 0x18(%rsp),%rax ffffffff80002a96: ff d0 call *%rax if (ctx->font_bool != NULL) { ffffffff80002a98: 48 8b bb 40 02 00 00 mov 0x240(%rbx),%rdi ffffffff80002a9f: 48 85 ff test %rdi,%rdi ffffffff80002aa2: 74 0e je ffffffff80002ab2 _free(ctx->font_bool, ctx->font_bool_size); ffffffff80002aa4: 48 8b b3 38 02 00 00 mov 0x238(%rbx),%rsi ffffffff80002aab: 48 8b 44 24 18 mov 0x18(%rsp),%rax ffffffff80002ab0: ff d0 call *%rax if (ctx->font_bits != NULL) { ffffffff80002ab2: 48 8b bb 30 02 00 00 mov 0x230(%rbx),%rdi ffffffff80002ab9: 48 85 ff test %rdi,%rdi ffffffff80002abc: 74 0e je ffffffff80002acc _free(ctx->font_bits, ctx->font_bits_size); ffffffff80002abe: 48 8b b3 28 02 00 00 mov 0x228(%rbx),%rsi ffffffff80002ac5: 48 8b 44 24 18 mov 0x18(%rsp),%rax ffffffff80002aca: ff d0 call *%rax _free(ctx, sizeof(struct flanterm_fb_context)); ffffffff80002acc: 48 8b 44 24 18 mov 0x18(%rsp),%rax ffffffff80002ad1: be 20 03 00 00 mov $0x320,%esi ffffffff80002ad6: 48 89 df mov %rbx,%rdi ffffffff80002ad9: ff d0 call *%rax return NULL; ffffffff80002adb: 31 db xor %ebx,%ebx ffffffff80002add: e9 a5 fe ff ff jmp ffffffff80002987 ffffffff80002ae2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) if (bump_allocated_instance == true) { ffffffff80002ae8: 80 3d 12 86 00 00 00 cmpb $0x0,0x8612(%rip) # ffffffff8000b101 ffffffff80002aef: 75 ea jne ffffffff80002adb if (width > FLANTERM_FB_WIDTH_LIMIT || height > FLANTERM_FB_HEIGHT_LIMIT) { ffffffff80002af1: 49 81 fd 80 07 00 00 cmp $0x780,%r13 ffffffff80002af8: 77 20 ja ffffffff80002b1a canvas = NULL; ffffffff80002afa: 48 c7 84 24 b0 00 00 movq $0x0,0xb0(%rsp) ffffffff80002b01: 00 00 00 00 00 _malloc = bump_alloc; ffffffff80002b06: 49 c7 c7 00 10 00 80 mov $0xffffffff80001000,%r15 if (width > FLANTERM_FB_WIDTH_LIMIT || height > FLANTERM_FB_HEIGHT_LIMIT) { ffffffff80002b0d: 49 81 fc b0 04 00 00 cmp $0x4b0,%r12 ffffffff80002b14: 0f 86 05 f7 ff ff jbe ffffffff8000221f size_t width_limit = width > FLANTERM_FB_WIDTH_LIMIT ? FLANTERM_FB_WIDTH_LIMIT : width; ffffffff80002b1a: ba 80 07 00 00 mov $0x780,%edx framebuffer = (uint32_t *)((uintptr_t)framebuffer + ((((height / 2) - (height_limit / 2)) * pitch) + (((width / 2) - (width_limit / 2)) * 4))); ffffffff80002b1f: 4c 89 e0 mov %r12,%rax size_t height_limit = height > FLANTERM_FB_HEIGHT_LIMIT ? FLANTERM_FB_HEIGHT_LIMIT : height; ffffffff80002b22: be b0 04 00 00 mov $0x4b0,%esi canvas = NULL; ffffffff80002b27: 48 c7 84 24 b0 00 00 movq $0x0,0xb0(%rsp) ffffffff80002b2e: 00 00 00 00 00 size_t width_limit = width > FLANTERM_FB_WIDTH_LIMIT ? FLANTERM_FB_WIDTH_LIMIT : width; ffffffff80002b33: 49 39 d5 cmp %rdx,%r13 _malloc = bump_alloc; ffffffff80002b36: 49 c7 c7 00 10 00 80 mov $0xffffffff80001000,%r15 size_t width_limit = width > FLANTERM_FB_WIDTH_LIMIT ? FLANTERM_FB_WIDTH_LIMIT : width; ffffffff80002b3d: 49 0f 46 d5 cmovbe %r13,%rdx size_t height_limit = height > FLANTERM_FB_HEIGHT_LIMIT ? FLANTERM_FB_HEIGHT_LIMIT : height; ffffffff80002b41: 49 39 f4 cmp %rsi,%r12 ffffffff80002b44: 49 0f 46 f4 cmovbe %r12,%rsi framebuffer = (uint32_t *)((uintptr_t)framebuffer + ((((height / 2) - (height_limit / 2)) * pitch) + (((width / 2) - (width_limit / 2)) * 4))); ffffffff80002b48: 48 d1 e8 shr $1,%rax ffffffff80002b4b: 49 89 d0 mov %rdx,%r8 ffffffff80002b4e: 48 89 f7 mov %rsi,%rdi ffffffff80002b51: 49 d1 e8 shr $1,%r8 height = height_limit; ffffffff80002b54: 49 89 f4 mov %rsi,%r12 framebuffer = (uint32_t *)((uintptr_t)framebuffer + ((((height / 2) - (height_limit / 2)) * pitch) + (((width / 2) - (width_limit / 2)) * 4))); ffffffff80002b57: 48 d1 ef shr $1,%rdi ffffffff80002b5a: 48 29 f8 sub %rdi,%rax ffffffff80002b5d: 48 8b 7c 24 20 mov 0x20(%rsp),%rdi ffffffff80002b62: 48 0f af c7 imul %rdi,%rax ffffffff80002b66: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi ffffffff80002b6b: 48 01 c7 add %rax,%rdi ffffffff80002b6e: 48 89 f8 mov %rdi,%rax ffffffff80002b71: 4c 89 ef mov %r13,%rdi width = width_limit; ffffffff80002b74: 49 89 d5 mov %rdx,%r13 framebuffer = (uint32_t *)((uintptr_t)framebuffer + ((((height / 2) - (height_limit / 2)) * pitch) + (((width / 2) - (width_limit / 2)) * 4))); ffffffff80002b77: 48 d1 ef shr $1,%rdi ffffffff80002b7a: 4c 29 c7 sub %r8,%rdi ffffffff80002b7d: 48 8d 04 b8 lea (%rax,%rdi,4),%rax ffffffff80002b81: 48 89 44 24 08 mov %rax,0x8(%rsp) height = height_limit; ffffffff80002b86: e9 94 f6 ff ff jmp ffffffff8000221f return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002b8b: bf aa 00 00 00 mov $0xaa,%edi ffffffff80002b90: 89 c1 mov %eax,%ecx ffffffff80002b92: 41 b8 55 00 00 00 mov $0x55,%r8d ctx->ansi_colours[0] = convert_colour(_ctx, 0x00000000); // black ffffffff80002b98: c7 83 48 02 00 00 00 movl $0x0,0x248(%rbx) ffffffff80002b9f: 00 00 00 return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002ba2: 41 89 f9 mov %edi,%r9d ffffffff80002ba5: 41 89 fa mov %edi,%r10d ffffffff80002ba8: 41 d3 e1 shl %cl,%r9d ffffffff80002bab: 89 d1 mov %edx,%ecx ffffffff80002bad: 41 d3 e0 shl %cl,%r8d ffffffff80002bb0: 41 d3 e2 shl %cl,%r10d ctx->ansi_colours[1] = convert_colour(_ctx, 0x00aa0000); // red ffffffff80002bb3: 44 89 8b 4c 02 00 00 mov %r9d,0x24c(%rbx) return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002bba: 44 89 c1 mov %r8d,%ecx ctx->ansi_colours[2] = convert_colour(_ctx, 0x0000aa00); // green ffffffff80002bbd: 44 89 93 50 02 00 00 mov %r10d,0x250(%rbx) return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002bc4: 44 09 c9 or %r9d,%ecx ffffffff80002bc7: 89 8b 54 02 00 00 mov %ecx,0x254(%rbx) ffffffff80002bcd: 89 f1 mov %esi,%ecx ffffffff80002bcf: d3 e7 shl %cl,%edi ffffffff80002bd1: 89 f9 mov %edi,%ecx ctx->ansi_colours[4] = convert_colour(_ctx, 0x000000aa); // blue ffffffff80002bd3: 89 bb 58 02 00 00 mov %edi,0x258(%rbx) return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002bd9: 44 09 d7 or %r10d,%edi ffffffff80002bdc: 44 09 c9 or %r9d,%ecx ctx->ansi_colours[6] = convert_colour(_ctx, 0x0000aaaa); // cyan ffffffff80002bdf: 89 bb 60 02 00 00 mov %edi,0x260(%rbx) return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002be5: 44 09 cf or %r9d,%edi if (ansi_bright_colours != NULL) { ffffffff80002be8: 48 83 bc 24 c0 00 00 cmpq $0x0,0xc0(%rsp) ffffffff80002bef: 00 00 return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002bf1: 89 8b 5c 02 00 00 mov %ecx,0x25c(%rbx) ffffffff80002bf7: 89 bb 64 02 00 00 mov %edi,0x264(%rbx) if (ansi_bright_colours != NULL) { ffffffff80002bfd: 0f 85 12 f7 ff ff jne ffffffff80002315 return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002c03: bf 55 00 00 00 mov $0x55,%edi ffffffff80002c08: 41 b8 ff 00 00 00 mov $0xff,%r8d ffffffff80002c0e: 89 c1 mov %eax,%ecx ffffffff80002c10: 45 89 c1 mov %r8d,%r9d ffffffff80002c13: 41 89 fb mov %edi,%r11d ffffffff80002c16: 41 d3 e1 shl %cl,%r9d ffffffff80002c19: 41 d3 e3 shl %cl,%r11d ffffffff80002c1c: 49 c1 e1 20 shl $0x20,%r9 ffffffff80002c20: 4c 89 d9 mov %r11,%rcx ffffffff80002c23: 41 89 fb mov %edi,%r11d ffffffff80002c26: 4c 09 c9 or %r9,%rcx ffffffff80002c29: 49 89 ca mov %rcx,%r10 ffffffff80002c2c: 89 d1 mov %edx,%ecx ffffffff80002c2e: 41 d3 e3 shl %cl,%r11d ffffffff80002c31: 4d 89 d9 mov %r11,%r9 ffffffff80002c34: 4c 89 d9 mov %r11,%rcx ffffffff80002c37: 49 c1 e1 20 shl $0x20,%r9 ffffffff80002c3b: 4c 09 c9 or %r9,%rcx ffffffff80002c3e: 45 89 c1 mov %r8d,%r9d ffffffff80002c41: 4c 09 d1 or %r10,%rcx ffffffff80002c44: 49 89 cb mov %rcx,%r11 ffffffff80002c47: 89 d1 mov %edx,%ecx ffffffff80002c49: 41 d3 e1 shl %cl,%r9d ffffffff80002c4c: 4c 89 c9 mov %r9,%rcx ffffffff80002c4f: 49 c1 e1 20 shl $0x20,%r9 ffffffff80002c53: 4c 09 c9 or %r9,%rcx ffffffff80002c56: 4c 09 d1 or %r10,%rcx ffffffff80002c59: 49 89 c9 mov %rcx,%r9 ffffffff80002c5c: 89 f1 mov %esi,%ecx ffffffff80002c5e: d3 e7 shl %cl,%edi ffffffff80002c60: 48 89 f9 mov %rdi,%rcx ffffffff80002c63: 48 c1 e1 20 shl $0x20,%rcx ffffffff80002c67: 48 09 cf or %rcx,%rdi ffffffff80002c6a: 89 f1 mov %esi,%ecx ffffffff80002c6c: 41 d3 e0 shl %cl,%r8d ffffffff80002c6f: 4c 89 c1 mov %r8,%rcx ffffffff80002c72: 48 c1 e1 20 shl $0x20,%rcx ffffffff80002c76: 4c 09 c1 or %r8,%rcx ffffffff80002c79: 4d 89 d8 mov %r11,%r8 ffffffff80002c7c: 49 09 f8 or %rdi,%r8 ffffffff80002c7f: 4c 09 cf or %r9,%rdi ctx->ansi_bright_colours[0] = convert_colour(_ctx, 0x00555555); // black ffffffff80002c82: 48 89 bb 70 02 00 00 mov %rdi,0x270(%rbx) return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002c89: 4c 89 df mov %r11,%rdi ffffffff80002c8c: 48 09 cf or %rcx,%rdi ffffffff80002c8f: 4c 09 c9 or %r9,%rcx ctx->ansi_bright_colours[0] = convert_colour(_ctx, 0x00555555); // black ffffffff80002c92: 4c 89 83 68 02 00 00 mov %r8,0x268(%rbx) ffffffff80002c99: 48 89 bb 78 02 00 00 mov %rdi,0x278(%rbx) ffffffff80002ca0: 48 89 8b 80 02 00 00 mov %rcx,0x280(%rbx) ffffffff80002ca7: e9 b8 f6 ff ff jmp ffffffff80002364 return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002cac: bf ff 00 00 00 mov $0xff,%edi ffffffff80002cb1: 89 d1 mov %edx,%ecx ffffffff80002cb3: 41 89 f8 mov %edi,%r8d ffffffff80002cb6: 41 d3 e0 shl %cl,%r8d ffffffff80002cb9: 89 f1 mov %esi,%ecx ffffffff80002cbb: 44 89 c2 mov %r8d,%edx ffffffff80002cbe: 41 89 f8 mov %edi,%r8d ffffffff80002cc1: 41 d3 e0 shl %cl,%r8d ffffffff80002cc4: 89 c1 mov %eax,%ecx ffffffff80002cc6: 44 09 c2 or %r8d,%edx ffffffff80002cc9: d3 e7 shl %cl,%edi ffffffff80002ccb: 09 fa or %edi,%edx ffffffff80002ccd: e9 ab f7 ff ff jmp ffffffff8000247d ffffffff80002cd2: 41 b8 55 00 00 00 mov $0x55,%r8d ffffffff80002cd8: 89 d1 mov %edx,%ecx ffffffff80002cda: 45 89 c1 mov %r8d,%r9d ffffffff80002cdd: 44 89 c7 mov %r8d,%edi ffffffff80002ce0: 41 d3 e1 shl %cl,%r9d ffffffff80002ce3: 89 f1 mov %esi,%ecx ffffffff80002ce5: d3 e7 shl %cl,%edi ffffffff80002ce7: 89 c1 mov %eax,%ecx ffffffff80002ce9: 44 09 cf or %r9d,%edi ffffffff80002cec: 41 d3 e0 shl %cl,%r8d ffffffff80002cef: 44 09 c7 or %r8d,%edi ffffffff80002cf2: e9 40 f7 ff ff jmp ffffffff80002437 ctx->font_width = font_width = 8; ffffffff80002cf7: 48 c7 83 b8 01 00 00 movq $0x8,0x1b8(%rbx) ffffffff80002cfe: 08 00 00 00 ctx->font_bits = _malloc(ctx->font_bits_size); ffffffff80002d02: bf 00 10 00 00 mov $0x1000,%edi ctx->font_height = font_height = 16; ffffffff80002d07: 48 c7 83 c0 01 00 00 movq $0x10,0x1c0(%rbx) ffffffff80002d0e: 10 00 00 00 ctx->font_bits_size = FONT_BYTES; ffffffff80002d12: 48 c7 83 28 02 00 00 movq $0x1000,0x228(%rbx) ffffffff80002d19: 00 10 00 00 ctx->font_bits = _malloc(ctx->font_bits_size); ffffffff80002d1d: 41 ff d7 call *%r15 ffffffff80002d20: 48 89 83 30 02 00 00 mov %rax,0x230(%rbx) ffffffff80002d27: 48 89 c7 mov %rax,%rdi if (ctx->font_bits == NULL) { ffffffff80002d2a: 48 85 c0 test %rax,%rax ffffffff80002d2d: 0f 84 e7 fc ff ff je ffffffff80002a1a memcpy(ctx->font_bits, builtin_font, ctx->font_bits_size); ffffffff80002d33: 48 8b 93 28 02 00 00 mov 0x228(%rbx),%rdx ffffffff80002d3a: 48 c7 c6 00 70 00 80 mov $0xffffffff80007000,%rsi ctx->font_height = font_height = 16; ffffffff80002d41: bd 10 00 00 00 mov $0x10,%ebp memcpy(ctx->font_bits, builtin_font, ctx->font_bits_size); ffffffff80002d46: e8 f5 39 00 00 call ffffffff80006740 font_spacing = 1; ffffffff80002d4b: 48 c7 84 24 00 01 00 movq $0x1,0x100(%rsp) ffffffff80002d52: 00 01 00 00 00 ffffffff80002d57: e9 c3 f7 ff ff jmp ffffffff8000251f return (r << ctx->red_mask_shift) | (g << ctx->green_mask_shift) | (b << ctx->blue_mask_shift); ffffffff80002d5c: bf aa 00 00 00 mov $0xaa,%edi ffffffff80002d61: 89 d1 mov %edx,%ecx ffffffff80002d63: 41 89 f9 mov %edi,%r9d ffffffff80002d66: 41 89 f8 mov %edi,%r8d ffffffff80002d69: 41 d3 e1 shl %cl,%r9d ffffffff80002d6c: 89 f1 mov %esi,%ecx ffffffff80002d6e: 41 d3 e0 shl %cl,%r8d ffffffff80002d71: 89 c1 mov %eax,%ecx ffffffff80002d73: 45 09 c8 or %r9d,%r8d ffffffff80002d76: d3 e7 shl %cl,%edi ffffffff80002d78: 41 09 f8 or %edi,%r8d ffffffff80002d7b: 45 89 c2 mov %r8d,%r10d ffffffff80002d7e: e9 6a f6 ff ff jmp ffffffff800023ed if (font_scale_x == 1 && font_scale_y == 1) { ffffffff80002d83: 48 83 bc 24 10 01 00 cmpq $0x1,0x110(%rsp) ffffffff80002d8a: 00 01 ffffffff80002d8c: 75 16 jne ffffffff80002da4 ffffffff80002d8e: 48 83 bc 24 08 01 00 cmpq $0x1,0x108(%rsp) ffffffff80002d95: 00 01 ffffffff80002d97: 48 c7 c0 c0 1e 00 80 mov $0xffffffff80001ec0,%rax ffffffff80002d9e: 0f 84 c2 fa ff ff je ffffffff80002866 ffffffff80002da4: 48 c7 c0 e0 1f 00 80 mov $0xffffffff80001fe0,%rax ffffffff80002dab: e9 b6 fa ff ff jmp ffffffff80002866 bump_allocated_instance = true; ffffffff80002db0: c6 05 4a 83 00 00 01 movb $0x1,0x834a(%rip) # ffffffff8000b101 ffffffff80002db7: e9 cb fb ff ff jmp ffffffff80002987 if (font_scale_x == 1 && font_scale_y == 1) { ffffffff80002dbc: 48 c7 c0 c0 1b 00 80 mov $0xffffffff80001bc0,%rax ffffffff80002dc3: e9 9e fa ff ff jmp ffffffff80002866 bump_alloc_ptr = 0; ffffffff80002dc8: 48 c7 05 35 83 00 00 movq $0x0,0x8335(%rip) # ffffffff8000b108 ffffffff80002dcf: 00 00 00 00 return NULL; ffffffff80002dd3: 31 db xor %ebx,%ebx ffffffff80002dd5: e9 ad fb ff ff jmp ffffffff80002987 ffffffff80002dda: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) ffffffff80002de0 : }; #define CHARSET_DEFAULT 0 #define CHARSET_DEC_SPECIAL 1 void flanterm_context_reinit(struct flanterm_context *ctx) { ffffffff80002de0: f3 0f 1e fa endbr64 ctx->rrr = false; ctx->discard_next = false; ctx->bold = false; ctx->bg_bold = false; ctx->reverse_video = false; ctx->dec_private = false; ffffffff80002de4: 0f b7 05 b5 7b 00 00 movzwl 0x7bb5(%rip),%eax # ffffffff8000a9a0 ctx->tab_size = 8; ffffffff80002deb: 48 c7 07 08 00 00 00 movq $0x8,(%rdi) ctx->autoflush = true; ffffffff80002df2: 48 c7 47 08 01 01 01 movq $0x10101,0x8(%rdi) ffffffff80002df9: 00 ctx->dec_private = false; ffffffff80002dfa: 66 89 47 14 mov %ax,0x14(%rdi) ctx->insert_mode = false; ctx->unicode_remaining = 0; ctx->g_select = 0; ffffffff80002dfe: 66 89 47 28 mov %ax,0x28(%rdi) ctx->saved_cursor_x = 0; ctx->saved_cursor_y = 0; ctx->current_primary = (size_t)-1; ctx->current_bg = (size_t)-1; ctx->scroll_top_margin = 0; ctx->scroll_bottom_margin = ctx->rows; ffffffff80002e02: 48 8b 87 e0 00 00 00 mov 0xe0(%rdi),%rax ctx->discard_next = false; ffffffff80002e09: c7 47 10 00 00 00 00 movl $0x0,0x10(%rdi) ctx->unicode_remaining = 0; ffffffff80002e10: 48 c7 47 20 00 00 00 movq $0x0,0x20(%rdi) ffffffff80002e17: 00 ctx->charsets[1] = CHARSET_DEC_SPECIAL; ffffffff80002e18: c6 47 2a 01 movb $0x1,0x2a(%rdi) ctx->current_charset = 0; ffffffff80002e1c: 48 c7 47 30 00 00 00 movq $0x0,0x30(%rdi) ffffffff80002e23: 00 ctx->escape_offset = 0; ffffffff80002e24: 48 c7 47 38 00 00 00 movq $0x0,0x38(%rdi) ffffffff80002e2b: 00 ctx->esc_values_i = 0; ffffffff80002e2c: 48 c7 47 40 00 00 00 movq $0x0,0x40(%rdi) ffffffff80002e33: 00 ctx->saved_cursor_x = 0; ffffffff80002e34: 48 c7 47 48 00 00 00 movq $0x0,0x48(%rdi) ffffffff80002e3b: 00 ctx->saved_cursor_y = 0; ffffffff80002e3c: 48 c7 47 50 00 00 00 movq $0x0,0x50(%rdi) ffffffff80002e43: 00 ctx->current_primary = (size_t)-1; ffffffff80002e44: 48 c7 47 58 ff ff ff movq $0xffffffffffffffff,0x58(%rdi) ffffffff80002e4b: ff ctx->current_bg = (size_t)-1; ffffffff80002e4c: 48 c7 47 60 ff ff ff movq $0xffffffffffffffff,0x60(%rdi) ffffffff80002e53: ff ctx->scroll_top_margin = 0; ffffffff80002e54: 48 c7 47 68 00 00 00 movq $0x0,0x68(%rdi) ffffffff80002e5b: 00 ctx->scroll_bottom_margin = ctx->rows; ffffffff80002e5c: 48 89 47 70 mov %rax,0x70(%rdi) ctx->oob_output = FLANTERM_OOB_OUTPUT_ONLCR; ffffffff80002e60: 48 c7 87 b8 00 00 00 movq $0x10,0xb8(%rdi) ffffffff80002e67: 10 00 00 00 } ffffffff80002e6b: c3 ret ffffffff80002e6c: 0f 1f 40 00 nopl 0x0(%rax) ffffffff80002e70 : } return 0; } int mk_wcwidth(uint32_t ucs) { ffffffff80002e70: f3 0f 1e fa endbr64 ffffffff80002e74: 89 fa mov %edi,%edx { 0xE0100, 0xE01EF } }; /* test for 8-bit control characters */ if (ucs == 0) return 0; ffffffff80002e76: 31 c0 xor %eax,%eax if (ucs == 0) ffffffff80002e78: 85 ff test %edi,%edi ffffffff80002e7a: 74 71 je ffffffff80002eed if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0)) ffffffff80002e7c: 8d 47 81 lea -0x7f(%rdi),%eax ffffffff80002e7f: 83 f8 20 cmp $0x20,%eax return 1; ffffffff80002e82: b8 01 00 00 00 mov $0x1,%eax if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0)) ffffffff80002e87: 76 67 jbe ffffffff80002ef0 ffffffff80002e89: 83 ff 1f cmp $0x1f,%edi ffffffff80002e8c: 76 62 jbe ffffffff80002ef0 if (ucs < table[0].first || ucs > table[max].last) ffffffff80002e8e: 81 ff ff 02 00 00 cmp $0x2ff,%edi ffffffff80002e94: 76 57 jbe ffffffff80002eed ffffffff80002e96: 81 ff ef 01 0e 00 cmp $0xe01ef,%edi ffffffff80002e9c: 0f 87 be 00 00 00 ja ffffffff80002f60 int min = 0; ffffffff80002ea2: 31 f6 xor %esi,%esi ffffffff80002ea4: bf 8d 00 00 00 mov $0x8d,%edi ffffffff80002ea9: eb 0c jmp ffffffff80002eb7 ffffffff80002eab: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) min = mid + 1; ffffffff80002eb0: 8d 70 01 lea 0x1(%rax),%esi while (max >= min) { ffffffff80002eb3: 39 f7 cmp %esi,%edi ffffffff80002eb5: 7c 41 jl ffffffff80002ef8 mid = (min + max) / 2; ffffffff80002eb7: 8d 0c 37 lea (%rdi,%rsi,1),%ecx ffffffff80002eba: 89 c8 mov %ecx,%eax ffffffff80002ebc: c1 e8 1f shr $0x1f,%eax ffffffff80002ebf: 01 c8 add %ecx,%eax ffffffff80002ec1: d1 f8 sar $1,%eax if (ucs > table[mid].last) ffffffff80002ec3: 48 63 c8 movslq %eax,%rcx ffffffff80002ec6: 39 14 cd 64 a1 00 80 cmp %edx,-0x7fff5e9c(,%rcx,8) ffffffff80002ecd: 72 e1 jb ffffffff80002eb0 else if (ucs < table[mid].first) ffffffff80002ecf: 3b 14 cd 60 a1 00 80 cmp -0x7fff5ea0(,%rcx,8),%edx ffffffff80002ed6: 0f 83 d4 00 00 00 jae ffffffff80002fb0 max = mid - 1; ffffffff80002edc: 8d 78 ff lea -0x1(%rax),%edi ffffffff80002edf: eb d2 jmp ffffffff80002eb3 ffffffff80002ee1: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) ffffffff80002ee8: b8 01 00 00 00 mov $0x1,%eax (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */ (ucs >= 0xff00 && ucs <= 0xff60) || /* Fullwidth Forms */ (ucs >= 0xffe0 && ucs <= 0xffe6) || (ucs >= 0x20000 && ucs <= 0x2fffd) || (ucs >= 0x30000 && ucs <= 0x3fffd))); } ffffffff80002eed: c3 ret ffffffff80002eee: 66 90 xchg %ax,%ax ffffffff80002ef0: c3 ret ffffffff80002ef1: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) (ucs >= 0x1100 && ffffffff80002ef8: 81 fa ff 10 00 00 cmp $0x10ff,%edx ffffffff80002efe: 76 e8 jbe ffffffff80002ee8 ucs == 0x2329 || ucs == 0x232a || ffffffff80002f00: 8d 82 d7 dc ff ff lea -0x2329(%rdx),%eax ffffffff80002f06: 83 f8 01 cmp $0x1,%eax ffffffff80002f09: 76 08 jbe ffffffff80002f13 ffffffff80002f0b: 81 fa 5f 11 00 00 cmp $0x115f,%edx ffffffff80002f11: 77 06 ja ffffffff80002f19 ffffffff80002f13: b8 02 00 00 00 mov $0x2,%eax ffffffff80002f18: c3 ret (ucs >= 0x2e80 && ucs <= 0xa4cf && ffffffff80002f19: 8d 82 80 d1 ff ff lea -0x2e80(%rdx),%eax ucs == 0x2329 || ucs == 0x232a || ffffffff80002f1f: 3d 4f 76 00 00 cmp $0x764f,%eax ffffffff80002f24: 77 08 ja ffffffff80002f2e ffffffff80002f26: 81 fa 3f 30 00 00 cmp $0x303f,%edx ffffffff80002f2c: 75 e5 jne ffffffff80002f13 (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */ ffffffff80002f2e: 8d 8a 00 54 ff ff lea -0xac00(%rdx),%ecx ffffffff80002f34: b8 02 00 00 00 mov $0x2,%eax ucs != 0x303f) || /* CJK ... Yi */ ffffffff80002f39: 81 f9 a3 2b 00 00 cmp $0x2ba3,%ecx ffffffff80002f3f: 76 ac jbe ffffffff80002eed (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility Ideographs */ ffffffff80002f41: 8d 8a 00 07 ff ff lea -0xf900(%rdx),%ecx (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */ ffffffff80002f47: 81 f9 ff 01 00 00 cmp $0x1ff,%ecx ffffffff80002f4d: 76 9e jbe ffffffff80002eed (ucs >= 0xfe10 && ucs <= 0xfe19) || /* Vertical forms */ ffffffff80002f4f: 8d 8a f0 01 ff ff lea -0xfe10(%rdx),%ecx (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility Ideographs */ ffffffff80002f55: 83 f9 09 cmp $0x9,%ecx ffffffff80002f58: 76 93 jbe ffffffff80002eed ffffffff80002f5a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */ ffffffff80002f60: 8d 8a d0 01 ff ff lea -0xfe30(%rdx),%ecx ffffffff80002f66: b8 02 00 00 00 mov $0x2,%eax (ucs >= 0xfe10 && ucs <= 0xfe19) || /* Vertical forms */ ffffffff80002f6b: 83 f9 3f cmp $0x3f,%ecx ffffffff80002f6e: 0f 86 79 ff ff ff jbe ffffffff80002eed (ucs >= 0xff00 && ucs <= 0xff60) || /* Fullwidth Forms */ ffffffff80002f74: 8d 8a 00 01 ff ff lea -0xff00(%rdx),%ecx (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */ ffffffff80002f7a: 83 f9 60 cmp $0x60,%ecx ffffffff80002f7d: 0f 86 6a ff ff ff jbe ffffffff80002eed (ucs >= 0xffe0 && ucs <= 0xffe6) || ffffffff80002f83: 8d 8a 20 00 ff ff lea -0xffe0(%rdx),%ecx (ucs >= 0xff00 && ucs <= 0xff60) || /* Fullwidth Forms */ ffffffff80002f89: 83 f9 06 cmp $0x6,%ecx ffffffff80002f8c: 0f 86 5b ff ff ff jbe ffffffff80002eed (ucs >= 0xffe0 && ucs <= 0xffe6) || ffffffff80002f92: 89 d0 mov %edx,%eax ffffffff80002f94: 25 ff ff fe ff and $0xfffeffff,%eax ffffffff80002f99: 2d 00 00 02 00 sub $0x20000,%eax ffffffff80002f9e: 3d fd ff 00 00 cmp $0xfffd,%eax ffffffff80002fa3: 0f 96 c0 setbe %al ffffffff80002fa6: 0f b6 c0 movzbl %al,%eax return 1 + ffffffff80002fa9: 83 c0 01 add $0x1,%eax ffffffff80002fac: c3 ret ffffffff80002fad: 0f 1f 00 nopl (%rax) return 0; ffffffff80002fb0: 31 c0 xor %eax,%eax ffffffff80002fb2: c3 ret ffffffff80002fb3: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80002fba: 00 00 00 ffffffff80002fbd: 0f 1f 00 nopl (%rax) ffffffff80002fc0 : void flanterm_write(struct flanterm_context *ctx, const char *buf, size_t count) { ffffffff80002fc0: f3 0f 1e fa endbr64 ffffffff80002fc4: 41 57 push %r15 ffffffff80002fc6: 41 56 push %r14 ffffffff80002fc8: 41 55 push %r13 ffffffff80002fca: 4c 8d 2c 16 lea (%rsi,%rdx,1),%r13 ffffffff80002fce: 41 54 push %r12 ffffffff80002fd0: 55 push %rbp ffffffff80002fd1: 48 89 f5 mov %rsi,%rbp ffffffff80002fd4: 53 push %rbx ffffffff80002fd5: 48 89 fb mov %rdi,%rbx ffffffff80002fd8: 48 83 ec 28 sub $0x28,%rsp for (size_t i = 0; i < count; i++) { ffffffff80002fdc: 48 85 d2 test %rdx,%rdx ffffffff80002fdf: 0f 84 bf 00 00 00 je ffffffff800030a4 ffffffff80002fe5: 0f 1f 00 nopl (%rax) return -1; } static void flanterm_putchar(struct flanterm_context *ctx, uint8_t c) { if (ctx->discard_next || (c == 0x18 || c == 0x1a)) { ffffffff80002fe8: 80 7b 10 00 cmpb $0x0,0x10(%rbx) flanterm_putchar(ctx, buf[i]); ffffffff80002fec: 44 0f b6 65 00 movzbl 0x0(%rbp),%r12d if (ctx->discard_next || (c == 0x18 || c == 0x1a)) { ffffffff80002ff1: 0f 85 89 00 00 00 jne ffffffff80003080 ffffffff80002ff7: 44 89 e0 mov %r12d,%eax ffffffff80002ffa: 83 e0 fd and $0xfffffffd,%eax ffffffff80002ffd: 3c 18 cmp $0x18,%al ffffffff80002fff: 74 7f je ffffffff80003080 ctx->osc_escape = false; ctx->g_select = 0; return; } if (ctx->unicode_remaining != 0) { ffffffff80003001: 48 8b 43 20 mov 0x20(%rbx),%rax ffffffff80003005: 48 85 c0 test %rax,%rax ffffffff80003008: 74 17 je ffffffff80003021 if ((c & 0xc0) != 0x80) { ffffffff8000300a: 44 89 e2 mov %r12d,%edx ffffffff8000300d: 83 e2 c0 and $0xffffffc0,%edx ffffffff80003010: 80 fa 80 cmp $0x80,%dl ffffffff80003013: 0f 84 f7 00 00 00 je ffffffff80003110 ctx->unicode_remaining = 0; ffffffff80003019: 48 c7 43 20 00 00 00 movq $0x0,0x20(%rbx) ffffffff80003020: 00 } return; } unicode_error: if (c >= 0xc0 && c <= 0xf7) { ffffffff80003021: 41 8d 44 24 40 lea 0x40(%r12),%eax ffffffff80003026: 3c 37 cmp $0x37,%al ffffffff80003028: 0f 86 a2 00 00 00 jbe ffffffff800030d0 ctx->code_point = (uint64_t)(c & 0x07) << (6 * 3); } return; } if (ctx->escape == true) { ffffffff8000302e: 80 7b 0c 00 cmpb $0x0,0xc(%rbx) ffffffff80003032: 0f 85 c8 01 00 00 jne ffffffff80003200 escape_parse(ctx, c); return; } if (ctx->g_select) { ffffffff80003038: 0f b6 43 28 movzbl 0x28(%rbx),%eax ffffffff8000303c: 84 c0 test %al,%al ffffffff8000303e: 0f 85 8c 01 00 00 jne ffffffff800031d0 ctx->g_select = 0; return; } size_t x, y; ctx->get_cursor_pos(ctx, &x, &y); ffffffff80003044: 48 8d 54 24 18 lea 0x18(%rsp),%rdx ffffffff80003049: 48 8d 74 24 10 lea 0x10(%rsp),%rsi ffffffff8000304e: 48 89 df mov %rbx,%rdi ffffffff80003051: ff 93 08 01 00 00 call *0x108(%rbx) switch (c) { ffffffff80003057: 41 80 fc 1b cmp $0x1b,%r12b ffffffff8000305b: 0f 8f 5f 02 00 00 jg ffffffff800032c0 ffffffff80003061: 45 84 e4 test %r12b,%r12b ffffffff80003064: 0f 88 66 02 00 00 js ffffffff800032d0 ffffffff8000306a: 41 80 fc 1b cmp $0x1b,%r12b ffffffff8000306e: 0f 87 5c 02 00 00 ja ffffffff800032d0 ffffffff80003074: 41 0f b6 c4 movzbl %r12b,%eax ffffffff80003078: 3e ff 24 c5 00 80 00 notrack jmp *-0x7fff8000(,%rax,8) ffffffff8000307f: 80 ctx->discard_next = false; ffffffff80003080: c6 43 10 00 movb $0x0,0x10(%rbx) ctx->unicode_remaining = 0; ffffffff80003084: 48 c7 43 20 00 00 00 movq $0x0,0x20(%rbx) ffffffff8000308b: 00 ctx->control_sequence = false; ffffffff8000308c: c7 43 0b 00 00 00 00 movl $0x0,0xb(%rbx) ctx->g_select = 0; ffffffff80003093: c6 43 28 00 movb $0x0,0x28(%rbx) for (size_t i = 0; i < count; i++) { ffffffff80003097: 48 83 c5 01 add $0x1,%rbp ffffffff8000309b: 49 39 ed cmp %rbp,%r13 ffffffff8000309e: 0f 85 44 ff ff ff jne ffffffff80002fe8 if (ctx->autoflush) { ffffffff800030a4: 80 7b 08 00 cmpb $0x0,0x8(%rbx) ffffffff800030a8: 0f 84 da 00 00 00 je ffffffff80003188 ctx->double_buffer_flush(ctx); ffffffff800030ae: 48 8b 83 90 01 00 00 mov 0x190(%rbx),%rax } ffffffff800030b5: 48 83 c4 28 add $0x28,%rsp ctx->double_buffer_flush(ctx); ffffffff800030b9: 48 89 df mov %rbx,%rdi } ffffffff800030bc: 5b pop %rbx ffffffff800030bd: 5d pop %rbp ffffffff800030be: 41 5c pop %r12 ffffffff800030c0: 41 5d pop %r13 ffffffff800030c2: 41 5e pop %r14 ffffffff800030c4: 41 5f pop %r15 ctx->double_buffer_flush(ctx); ffffffff800030c6: ff e0 jmp *%rax ffffffff800030c8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) ffffffff800030cf: 00 ctx->code_point = (uint64_t)(c & 0x1f) << 6; ffffffff800030d0: 41 0f b6 d4 movzbl %r12b,%edx if (c >= 0xc0 && c <= 0xdf) { ffffffff800030d4: 3c 1f cmp $0x1f,%al ffffffff800030d6: 0f 86 c4 00 00 00 jbe ffffffff800031a0 } else if (c >= 0xe0 && c <= 0xef) { ffffffff800030dc: 41 83 c4 20 add $0x20,%r12d ffffffff800030e0: 41 80 fc 0f cmp $0xf,%r12b ffffffff800030e4: 0f 87 66 01 00 00 ja ffffffff80003250 ctx->code_point = (uint64_t)(c & 0x0f) << (6 * 2); ffffffff800030ea: 48 c1 e2 0c shl $0xc,%rdx for (size_t i = 0; i < count; i++) { ffffffff800030ee: 48 83 c5 01 add $0x1,%rbp ctx->unicode_remaining = 2; ffffffff800030f2: 48 c7 43 20 02 00 00 movq $0x2,0x20(%rbx) ffffffff800030f9: 00 ctx->code_point = (uint64_t)(c & 0x0f) << (6 * 2); ffffffff800030fa: 81 e2 ff ff 00 00 and $0xffff,%edx ffffffff80003100: 48 89 53 18 mov %rdx,0x18(%rbx) for (size_t i = 0; i < count; i++) { ffffffff80003104: 49 39 ed cmp %rbp,%r13 ffffffff80003107: 0f 85 db fe ff ff jne ffffffff80002fe8 ffffffff8000310d: eb 95 jmp ffffffff800030a4 ffffffff8000310f: 90 nop ctx->unicode_remaining--; ffffffff80003110: 48 83 e8 01 sub $0x1,%rax ctx->code_point |= (uint64_t)(c & 0x3f) << (6 * ctx->unicode_remaining); ffffffff80003114: 41 83 e4 3f and $0x3f,%r12d ffffffff80003118: 8d 0c 40 lea (%rax,%rax,2),%ecx ctx->unicode_remaining--; ffffffff8000311b: 48 89 43 20 mov %rax,0x20(%rbx) ctx->code_point |= (uint64_t)(c & 0x3f) << (6 * ctx->unicode_remaining); ffffffff8000311f: 01 c9 add %ecx,%ecx ffffffff80003121: 49 d3 e4 shl %cl,%r12 ffffffff80003124: 4c 0b 63 18 or 0x18(%rbx),%r12 ffffffff80003128: 4c 89 63 18 mov %r12,0x18(%rbx) if (ctx->unicode_remaining != 0) { ffffffff8000312c: 48 85 c0 test %rax,%rax ffffffff8000312f: 0f 85 62 ff ff ff jne ffffffff80003097 switch (code_point) { ffffffff80003135: 49 81 fc 48 22 00 00 cmp $0x2248,%r12 ffffffff8000313c: 0f 87 3e 01 00 00 ja ffffffff80003280 ffffffff80003142: 49 81 fc 18 22 00 00 cmp $0x2218,%r12 ffffffff80003149: 0f 87 38 0e 00 00 ja ffffffff80003f87 ffffffff8000314f: 49 81 fc 92 01 00 00 cmp $0x192,%r12 ffffffff80003156: 0f 87 12 03 00 00 ja ffffffff8000346e ffffffff8000315c: 49 81 fc a0 00 00 00 cmp $0xa0,%r12 ffffffff80003163: 0f 86 57 02 00 00 jbe ffffffff800033c0 ffffffff80003169: 49 8d 84 24 5f ff ff lea -0xa1(%r12),%rax ffffffff80003170: ff ffffffff80003171: 48 3d f1 00 00 00 cmp $0xf1,%rax ffffffff80003177: 0f 87 43 02 00 00 ja ffffffff800033c0 ffffffff8000317d: 3e ff 24 c5 e0 80 00 notrack jmp *-0x7fff7f20(,%rax,8) ffffffff80003184: 80 ffffffff80003185: 0f 1f 00 nopl (%rax) } ffffffff80003188: 48 83 c4 28 add $0x28,%rsp ffffffff8000318c: 5b pop %rbx ffffffff8000318d: 5d pop %rbp ffffffff8000318e: 41 5c pop %r12 ffffffff80003190: 41 5d pop %r13 ffffffff80003192: 41 5e pop %r14 ffffffff80003194: 41 5f pop %r15 ffffffff80003196: c3 ret ffffffff80003197: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff8000319e: 00 00 ctx->code_point = (uint64_t)(c & 0x1f) << 6; ffffffff800031a0: 48 c1 e2 06 shl $0x6,%rdx for (size_t i = 0; i < count; i++) { ffffffff800031a4: 48 83 c5 01 add $0x1,%rbp ctx->unicode_remaining = 1; ffffffff800031a8: 48 c7 43 20 01 00 00 movq $0x1,0x20(%rbx) ffffffff800031af: 00 ctx->code_point = (uint64_t)(c & 0x1f) << 6; ffffffff800031b0: 81 e2 c0 07 00 00 and $0x7c0,%edx ffffffff800031b6: 48 89 53 18 mov %rdx,0x18(%rbx) for (size_t i = 0; i < count; i++) { ffffffff800031ba: 49 39 ed cmp %rbp,%r13 ffffffff800031bd: 0f 85 25 fe ff ff jne ffffffff80002fe8 ffffffff800031c3: e9 dc fe ff ff jmp ffffffff800030a4 ffffffff800031c8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) ffffffff800031cf: 00 ctx->g_select--; ffffffff800031d0: 83 e8 01 sub $0x1,%eax switch (c) { ffffffff800031d3: 41 80 fc 30 cmp $0x30,%r12b ffffffff800031d7: 0f 84 8b 03 00 00 je ffffffff80003568 ffffffff800031dd: 41 80 fc 42 cmp $0x42,%r12b ffffffff800031e1: 0f 84 59 01 00 00 je ffffffff80003340 ctx->g_select = 0; ffffffff800031e7: c6 43 28 00 movb $0x0,0x28(%rbx) for (size_t i = 0; i < count; i++) { ffffffff800031eb: 48 83 c5 01 add $0x1,%rbp ffffffff800031ef: 49 39 ed cmp %rbp,%r13 ffffffff800031f2: 0f 85 f0 fd ff ff jne ffffffff80002fe8 ffffffff800031f8: e9 a7 fe ff ff jmp ffffffff800030a4 ffffffff800031fd: 0f 1f 00 nopl (%rax) ctx->escape_offset++; ffffffff80003200: 48 8b 43 38 mov 0x38(%rbx),%rax ffffffff80003204: 48 83 c0 01 add $0x1,%rax if (ctx->osc == true) { ffffffff80003208: 80 7b 0d 00 cmpb $0x0,0xd(%rbx) ctx->escape_offset++; ffffffff8000320c: 48 89 43 38 mov %rax,0x38(%rbx) if (ctx->osc == true) { ffffffff80003210: 0f 85 6a 03 00 00 jne ffffffff80003580 if (ctx->control_sequence == true) { ffffffff80003216: 80 7b 0b 00 cmpb $0x0,0xb(%rbx) ffffffff8000321a: 0f 85 87 03 00 00 jne ffffffff800035a7 ctx->get_cursor_pos(ctx, &x, &y); ffffffff80003220: 48 8d 54 24 18 lea 0x18(%rsp),%rdx ffffffff80003225: 48 8d 74 24 10 lea 0x10(%rsp),%rsi ffffffff8000322a: 48 89 df mov %rbx,%rdi ffffffff8000322d: ff 93 08 01 00 00 call *0x108(%rbx) switch (c) { ffffffff80003233: 41 8d 44 24 d8 lea -0x28(%r12),%eax ffffffff80003238: 3c 3b cmp $0x3b,%al ffffffff8000323a: 0f 87 18 02 00 00 ja ffffffff80003458 ffffffff80003240: 0f b6 c0 movzbl %al,%eax ffffffff80003243: 3e ff 24 c5 70 88 00 notrack jmp *-0x7fff7790(,%rax,8) ffffffff8000324a: 80 ffffffff8000324b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ctx->code_point = (uint64_t)(c & 0x07) << (6 * 3); ffffffff80003250: 48 c1 e2 12 shl $0x12,%rdx for (size_t i = 0; i < count; i++) { ffffffff80003254: 48 83 c5 01 add $0x1,%rbp ctx->unicode_remaining = 3; ffffffff80003258: 48 c7 43 20 03 00 00 movq $0x3,0x20(%rbx) ffffffff8000325f: 00 ctx->code_point = (uint64_t)(c & 0x07) << (6 * 3); ffffffff80003260: 81 e2 00 00 1c 00 and $0x1c0000,%edx ffffffff80003266: 48 89 53 18 mov %rdx,0x18(%rbx) for (size_t i = 0; i < count; i++) { ffffffff8000326a: 49 39 ed cmp %rbp,%r13 ffffffff8000326d: 0f 85 75 fd ff ff jne ffffffff80002fe8 ffffffff80003273: e9 2c fe ff ff jmp ffffffff800030a4 ffffffff80003278: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) ffffffff8000327f: 00 switch (code_point) { ffffffff80003280: 49 81 fc 6b 26 00 00 cmp $0x266b,%r12 ffffffff80003287: 0f 87 33 01 00 00 ja ffffffff800033c0 ffffffff8000328d: 49 81 fc ff 24 00 00 cmp $0x24ff,%r12 ffffffff80003294: 0f 86 95 03 00 00 jbe ffffffff8000362f ffffffff8000329a: 49 8d 84 24 00 db ff lea -0x2500(%r12),%rax ffffffff800032a1: ff ffffffff800032a2: 48 3d 6b 01 00 00 cmp $0x16b,%rax ffffffff800032a8: 0f 87 12 01 00 00 ja ffffffff800033c0 ffffffff800032ae: 3e ff 24 c5 50 8a 00 notrack jmp *-0x7fff75b0(,%rax,8) ffffffff800032b5: 80 ffffffff800032b6: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff800032bd: 00 00 00 switch (c) { ffffffff800032c0: 41 80 fc 7f cmp $0x7f,%r12b ffffffff800032c4: 0f 84 cd fd ff ff je ffffffff80003097 ffffffff800032ca: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) // Move to G0 set ctx->current_charset = 0; return; } if (ctx->insert_mode == true) { ffffffff800032d0: 80 7b 15 00 cmpb $0x0,0x15(%rbx) ffffffff800032d4: 74 35 je ffffffff8000330b for (size_t i = ctx->cols - 1; ; i--) { ffffffff800032d6: 48 8b 83 e8 00 00 00 mov 0xe8(%rbx),%rax ffffffff800032dd: 4c 8d 70 ff lea -0x1(%rax),%r14 ffffffff800032e1: eb 09 jmp ffffffff800032ec ffffffff800032e3: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff800032e8: 49 83 ee 01 sub $0x1,%r14 ctx->move_character(ctx, i + 1, y, i, y); ffffffff800032ec: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff800032f1: 49 8d 76 01 lea 0x1(%r14),%rsi ffffffff800032f5: 4c 89 f1 mov %r14,%rcx ffffffff800032f8: 48 89 df mov %rbx,%rdi ffffffff800032fb: 49 89 d0 mov %rdx,%r8 ffffffff800032fe: ff 93 60 01 00 00 call *0x160(%rbx) if (i == x) { ffffffff80003304: 4c 3b 74 24 10 cmp 0x10(%rsp),%r14 ffffffff80003309: 75 dd jne ffffffff800032e8 } } } // Translate character set switch (ctx->charsets[ctx->current_charset]) { ffffffff8000330b: 48 8b 53 30 mov 0x30(%rbx),%rdx case '`': FLANTERM_DEC_SPCL_PRN(0x04) ffffffff8000330f: 48 8b 83 f0 00 00 00 mov 0xf0(%rbx),%rax switch (ctx->charsets[ctx->current_charset]) { ffffffff80003316: 80 7c 13 29 01 cmpb $0x1,0x29(%rbx,%rdx,1) ffffffff8000331b: 0f 84 12 0b 00 00 je ffffffff80003e33 return; } break; } if (c >= 0x20 && c <= 0x7e) { ffffffff80003321: 41 8d 54 24 e0 lea -0x20(%r12),%edx ffffffff80003326: 80 fa 5e cmp $0x5e,%dl ffffffff80003329: 0f 86 be 02 00 00 jbe ffffffff800035ed ctx->raw_putchar(ctx, c); } else { ctx->raw_putchar(ctx, 0xfe); ffffffff8000332f: be fe 00 00 00 mov $0xfe,%esi ffffffff80003334: 48 89 df mov %rbx,%rdi ffffffff80003337: ff d0 call *%rax ffffffff80003339: e9 59 fd ff ff jmp ffffffff80003097 ffffffff8000333e: 66 90 xchg %ax,%ax ctx->charsets[ctx->g_select] = CHARSET_DEFAULT; break; ffffffff80003340: 0f b6 c0 movzbl %al,%eax ffffffff80003343: c6 44 03 29 00 movb $0x0,0x29(%rbx,%rax,1) ctx->g_select = 0; ffffffff80003348: c6 43 28 00 movb $0x0,0x28(%rbx) return; ffffffff8000334c: e9 9a fe ff ff jmp ffffffff800031eb if (y == ctx->scroll_bottom_margin - 1) { ffffffff80003351: 48 8b 43 70 mov 0x70(%rbx),%rax ffffffff80003355: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff8000335a: 48 83 e8 01 sub $0x1,%rax ffffffff8000335e: 48 39 d0 cmp %rdx,%rax ffffffff80003361: 0f 84 92 0a 00 00 je ffffffff80003df9 ctx->set_cursor_pos(ctx, (ctx->oob_output & FLANTERM_OOB_OUTPUT_ONLCR) ? 0 : x, y + 1); ffffffff80003367: 48 8b 83 00 01 00 00 mov 0x100(%rbx),%rax ffffffff8000336e: 48 83 c2 01 add $0x1,%rdx ffffffff80003372: 31 f6 xor %esi,%esi ffffffff80003374: f6 83 b8 00 00 00 10 testb $0x10,0xb8(%rbx) ffffffff8000337b: 75 05 jne ffffffff80003382 ffffffff8000337d: 48 8b 74 24 10 mov 0x10(%rsp),%rsi ffffffff80003382: 48 89 df mov %rbx,%rdi ffffffff80003385: ff d0 call *%rax ffffffff80003387: e9 0b fd ff ff jmp ffffffff80003097 switch (code_point) { ffffffff8000338c: 49 81 fc 20 23 00 00 cmp $0x2320,%r12 ffffffff80003393: 0f 84 59 0e 00 00 je ffffffff800041f2 ffffffff80003399: 49 81 fc 21 23 00 00 cmp $0x2321,%r12 ffffffff800033a0: 0f 84 42 0e 00 00 je ffffffff800041e8 case 0x2310: return 169; ffffffff800033a6: be a9 00 00 00 mov $0xa9,%esi switch (code_point) { ffffffff800033ab: 49 81 fc 10 23 00 00 cmp $0x2310,%r12 ffffffff800033b2: 0f 84 b8 02 00 00 je ffffffff80003670 ffffffff800033b8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) ffffffff800033bf: 00 size_t replacement_width = (size_t)mk_wcwidth(ctx->code_point); ffffffff800033c0: 44 89 e7 mov %r12d,%edi ffffffff800033c3: e8 a8 fa ff ff call ffffffff80002e70 ffffffff800033c8: 4c 63 f0 movslq %eax,%r14 if (replacement_width > 0) { ffffffff800033cb: 4d 85 f6 test %r14,%r14 ffffffff800033ce: 0f 84 c3 fc ff ff je ffffffff80003097 ctx->raw_putchar(ctx, 0xfe); ffffffff800033d4: be fe 00 00 00 mov $0xfe,%esi ffffffff800033d9: 48 89 df mov %rbx,%rdi ffffffff800033dc: ff 93 f0 00 00 00 call *0xf0(%rbx) for (size_t i = 1; i < replacement_width; i++) { ffffffff800033e2: 49 83 fe 01 cmp $0x1,%r14 ffffffff800033e6: 0f 84 ab fc ff ff je ffffffff80003097 ffffffff800033ec: 41 bc 01 00 00 00 mov $0x1,%r12d ffffffff800033f2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) ffffffff800033f8: 49 83 c4 01 add $0x1,%r12 ctx->raw_putchar(ctx, ' '); ffffffff800033fc: be 20 00 00 00 mov $0x20,%esi ffffffff80003401: 48 89 df mov %rbx,%rdi ffffffff80003404: ff 93 f0 00 00 00 call *0xf0(%rbx) for (size_t i = 1; i < replacement_width; i++) { ffffffff8000340a: 4d 39 e6 cmp %r12,%r14 ffffffff8000340d: 75 e9 jne ffffffff800033f8 ffffffff8000340f: e9 83 fc ff ff jmp ffffffff80003097 ctx->save_state(ctx); ffffffff80003414: 48 89 df mov %rbx,%rdi ffffffff80003417: ff 93 80 01 00 00 call *0x180(%rbx) ctx->saved_state_bold = ctx->bold; ffffffff8000341d: 0f b7 43 11 movzwl 0x11(%rbx),%eax ctx->saved_state_current_charset = ctx->current_charset; ffffffff80003421: 48 8b 53 58 mov 0x58(%rbx),%rdx ffffffff80003425: 48 8b 4b 30 mov 0x30(%rbx),%rcx ctx->saved_state_bold = ctx->bold; ffffffff80003429: 66 89 83 c0 00 00 00 mov %ax,0xc0(%rbx) ctx->saved_state_reverse_video = ctx->reverse_video; ffffffff80003430: 0f b6 43 13 movzbl 0x13(%rbx),%eax ctx->saved_state_current_charset = ctx->current_charset; ffffffff80003434: 48 89 8b c8 00 00 00 mov %rcx,0xc8(%rbx) ctx->saved_state_reverse_video = ctx->reverse_video; ffffffff8000343b: 88 83 c2 00 00 00 mov %al,0xc2(%rbx) ctx->saved_state_current_charset = ctx->current_charset; ffffffff80003441: 48 8b 43 60 mov 0x60(%rbx),%rax ffffffff80003445: 48 89 93 d0 00 00 00 mov %rdx,0xd0(%rbx) ffffffff8000344c: 48 89 83 d8 00 00 00 mov %rax,0xd8(%rbx) break; ffffffff80003453: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) for (size_t i = 0; i < count; i++) { ffffffff80003458: 48 83 c5 01 add $0x1,%rbp ctx->escape = false; ffffffff8000345c: c6 43 0c 00 movb $0x0,0xc(%rbx) for (size_t i = 0; i < count; i++) { ffffffff80003460: 49 39 ed cmp %rbp,%r13 ffffffff80003463: 0f 85 7f fb ff ff jne ffffffff80002fe8 ffffffff80003469: e9 36 fc ff ff jmp ffffffff800030a4 switch (code_point) { ffffffff8000346e: 49 81 fc c6 03 00 00 cmp $0x3c6,%r12 ffffffff80003475: 0f 87 80 01 00 00 ja ffffffff800035fb ffffffff8000347b: 49 81 fc 92 03 00 00 cmp $0x392,%r12 ffffffff80003482: 0f 86 38 ff ff ff jbe ffffffff800033c0 ffffffff80003488: 49 8d 84 24 6d fc ff lea -0x393(%r12),%rax ffffffff8000348f: ff ffffffff80003490: 48 83 f8 33 cmp $0x33,%rax ffffffff80003494: 0f 87 26 ff ff ff ja ffffffff800033c0 ffffffff8000349a: 3e ff 24 c5 b0 95 00 notrack jmp *-0x7fff6a50(,%rax,8) ffffffff800034a1: 80 ctx->set_cursor_pos(ctx, 0, y); ffffffff800034a2: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff800034a7: 31 f6 xor %esi,%esi ffffffff800034a9: 48 89 df mov %rbx,%rdi ffffffff800034ac: ff 93 00 01 00 00 call *0x100(%rbx) return; ffffffff800034b2: e9 e0 fb ff ff jmp ffffffff80003097 ctx->set_cursor_pos(ctx, x - 1, y); ffffffff800034b7: 48 8b 44 24 10 mov 0x10(%rsp),%rax ffffffff800034bc: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff800034c1: 48 89 df mov %rbx,%rdi ffffffff800034c4: 48 8d 70 ff lea -0x1(%rax),%rsi ffffffff800034c8: ff 93 00 01 00 00 call *0x100(%rbx) return; ffffffff800034ce: e9 c4 fb ff ff jmp ffffffff80003097 if ((x / ctx->tab_size + 1) >= ctx->cols) { ffffffff800034d3: 48 8b 33 mov (%rbx),%rsi ffffffff800034d6: 48 8b 44 24 10 mov 0x10(%rsp),%rax ffffffff800034db: 31 d2 xor %edx,%edx ctx->set_cursor_pos(ctx, ctx->cols - 1, y); ffffffff800034dd: 48 8b 8b 00 01 00 00 mov 0x100(%rbx),%rcx ffffffff800034e4: 48 8b 7c 24 18 mov 0x18(%rsp),%rdi if ((x / ctx->tab_size + 1) >= ctx->cols) { ffffffff800034e9: 48 f7 f6 div %rsi ffffffff800034ec: 48 8b 93 e8 00 00 00 mov 0xe8(%rbx),%rdx ffffffff800034f3: 48 83 c0 01 add $0x1,%rax ffffffff800034f7: 48 39 d0 cmp %rdx,%rax ffffffff800034fa: 0f 83 22 09 00 00 jae ffffffff80003e22 ctx->set_cursor_pos(ctx, (x / ctx->tab_size + 1) * ctx->tab_size, y); ffffffff80003500: 48 89 fa mov %rdi,%rdx ffffffff80003503: 48 0f af f0 imul %rax,%rsi ffffffff80003507: 48 89 df mov %rbx,%rdi ffffffff8000350a: ff d1 call *%rcx return; ffffffff8000350c: e9 86 fb ff ff jmp ffffffff80003097 if (ctx->callback != NULL) { ffffffff80003511: 48 8b 83 a8 01 00 00 mov 0x1a8(%rbx),%rax ffffffff80003518: 48 85 c0 test %rax,%rax ffffffff8000351b: 0f 84 76 fb ff ff je ffffffff80003097 ctx->callback(ctx, FLANTERM_CB_BELL, 0, 0, 0); ffffffff80003521: 45 31 c0 xor %r8d,%r8d ffffffff80003524: 31 c9 xor %ecx,%ecx ffffffff80003526: 31 d2 xor %edx,%edx ffffffff80003528: be 14 00 00 00 mov $0x14,%esi ffffffff8000352d: 48 89 df mov %rbx,%rdi ffffffff80003530: ff d0 call *%rax ffffffff80003532: e9 60 fb ff ff jmp ffffffff80003097 ctx->escape_offset = 0; ffffffff80003537: 48 c7 43 38 00 00 00 movq $0x0,0x38(%rbx) ffffffff8000353e: 00 ctx->escape = true; ffffffff8000353f: c6 43 0c 01 movb $0x1,0xc(%rbx) return; ffffffff80003543: e9 4f fb ff ff jmp ffffffff80003097 ctx->current_charset = 1; ffffffff80003548: 48 c7 43 30 01 00 00 movq $0x1,0x30(%rbx) ffffffff8000354f: 00 return; ffffffff80003550: e9 42 fb ff ff jmp ffffffff80003097 ctx->current_charset = 0; ffffffff80003555: 48 c7 43 30 00 00 00 movq $0x0,0x30(%rbx) ffffffff8000355c: 00 return; ffffffff8000355d: e9 35 fb ff ff jmp ffffffff80003097 ffffffff80003562: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) ctx->charsets[ctx->g_select] = CHARSET_DEC_SPECIAL; break; ffffffff80003568: 0f b6 c0 movzbl %al,%eax ffffffff8000356b: c6 44 03 29 01 movb $0x1,0x29(%rbx,%rax,1) ctx->g_select = 0; ffffffff80003570: c6 43 28 00 movb $0x0,0x28(%rbx) return; ffffffff80003574: e9 72 fc ff ff jmp ffffffff800031eb ffffffff80003579: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) if (ctx->osc_escape && c == '\\') { ffffffff80003580: 41 80 fc 5c cmp $0x5c,%r12b ffffffff80003584: 75 06 jne ffffffff8000358c ffffffff80003586: 80 7b 0e 00 cmpb $0x0,0xe(%rbx) ffffffff8000358a: 75 0a jne ffffffff80003596 switch (c) { ffffffff8000358c: 41 80 fc 1b cmp $0x1b,%r12b ffffffff80003590: 0f 84 5a 08 00 00 je ffffffff80003df0 ctx->escape = false; ffffffff80003596: 45 31 c9 xor %r9d,%r9d ctx->osc_escape = false; ffffffff80003599: c6 43 0e 00 movb $0x0,0xe(%rbx) ctx->escape = false; ffffffff8000359d: 66 44 89 4b 0c mov %r9w,0xc(%rbx) ffffffff800035a2: e9 f0 fa ff ff jmp ffffffff80003097 if (ctx->escape_offset == 2) { ffffffff800035a7: 48 83 f8 02 cmp $0x2,%rax ffffffff800035ab: 0f 84 bc 09 00 00 je ffffffff80003f6d if (c >= '0' && c <= '9') { ffffffff800035b1: 41 8d 44 24 d0 lea -0x30(%r12),%eax if (ctx->esc_values_i == FLANTERM_MAX_ESC_VALUES) { ffffffff800035b6: 48 8b 53 40 mov 0x40(%rbx),%rdx if (c >= '0' && c <= '9') { ffffffff800035ba: 3c 09 cmp $0x9,%al ffffffff800035bc: 0f 87 8a 08 00 00 ja ffffffff80003e4c if (ctx->esc_values_i == FLANTERM_MAX_ESC_VALUES) { ffffffff800035c2: 48 83 fa 10 cmp $0x10,%rdx ffffffff800035c6: 0f 84 cb fa ff ff je ffffffff80003097 ctx->esc_values[ctx->esc_values_i] += c - '0'; ffffffff800035cc: 48 83 c2 1c add $0x1c,%rdx ffffffff800035d0: 45 0f be e4 movsbl %r12b,%r12d ctx->rrr = true; ffffffff800035d4: c6 43 0f 01 movb $0x1,0xf(%rbx) ctx->esc_values[ctx->esc_values_i] *= 10; ffffffff800035d8: 8b 44 93 08 mov 0x8(%rbx,%rdx,4),%eax ffffffff800035dc: 8d 04 80 lea (%rax,%rax,4),%eax ctx->esc_values[ctx->esc_values_i] += c - '0'; ffffffff800035df: 41 8d 44 44 d0 lea -0x30(%r12,%rax,2),%eax ffffffff800035e4: 89 44 93 08 mov %eax,0x8(%rbx,%rdx,4) return; ffffffff800035e8: e9 aa fa ff ff jmp ffffffff80003097 ctx->raw_putchar(ctx, c); ffffffff800035ed: 41 0f be f4 movsbl %r12b,%esi ffffffff800035f1: 48 89 df mov %rbx,%rdi ffffffff800035f4: ff d0 call *%rax ffffffff800035f6: e9 9c fa ff ff jmp ffffffff80003097 switch (code_point) { ffffffff800035fb: 49 81 fc a8 21 00 00 cmp $0x21a8,%r12 ffffffff80003602: 0f 87 b8 fd ff ff ja ffffffff800033c0 ffffffff80003608: 49 81 fc 8f 21 00 00 cmp $0x218f,%r12 ffffffff8000360f: 0f 86 8c 09 00 00 jbe ffffffff80003fa1 ffffffff80003615: 49 8d 84 24 70 de ff lea -0x2190(%r12),%rax ffffffff8000361c: ff ffffffff8000361d: 48 83 f8 18 cmp $0x18,%rax ffffffff80003621: 0f 87 99 fd ff ff ja ffffffff800033c0 ffffffff80003627: 3e ff 24 c5 50 97 00 notrack jmp *-0x7fff68b0(,%rax,8) ffffffff8000362e: 80 ffffffff8000362f: 49 81 fc 02 23 00 00 cmp $0x2302,%r12 ffffffff80003636: 0f 84 0e 0b 00 00 je ffffffff8000414a ffffffff8000363c: 0f 87 4a fd ff ff ja ffffffff8000338c ffffffff80003642: 49 81 fc 64 22 00 00 cmp $0x2264,%r12 ffffffff80003649: 0f 84 2d 0b 00 00 je ffffffff8000417c ffffffff8000364f: 49 81 fc 65 22 00 00 cmp $0x2265,%r12 ffffffff80003656: 0f 84 16 0b 00 00 je ffffffff80004172 case 0x2261: return 240; ffffffff8000365c: be f0 00 00 00 mov $0xf0,%esi switch (code_point) { ffffffff80003661: 49 81 fc 61 22 00 00 cmp $0x2261,%r12 ffffffff80003668: 0f 85 52 fd ff ff jne ffffffff800033c0 ffffffff8000366e: 66 90 xchg %ax,%ax for (size_t i = 0; i < count; i++) { ffffffff80003670: 48 83 c5 01 add $0x1,%rbp ctx->raw_putchar(ctx, cc); ffffffff80003674: 48 89 df mov %rbx,%rdi ffffffff80003677: ff 93 f0 00 00 00 call *0xf0(%rbx) for (size_t i = 0; i < count; i++) { ffffffff8000367d: 49 39 ed cmp %rbp,%r13 ffffffff80003680: 0f 85 62 f9 ff ff jne ffffffff80002fe8 ffffffff80003686: e9 19 fa ff ff jmp ffffffff800030a4 ctx->g_select = c - '\''; ffffffff8000368b: 41 83 ec 27 sub $0x27,%r12d ffffffff8000368f: 44 88 63 28 mov %r12b,0x28(%rbx) break; ffffffff80003693: e9 c0 fd ff ff jmp ffffffff80003458 if (y == ctx->scroll_bottom_margin - 1) { ffffffff80003698: 48 8b 4b 70 mov 0x70(%rbx),%rcx ffffffff8000369c: 48 8b 44 24 18 mov 0x18(%rsp),%rax ffffffff800036a1: 48 8d 51 ff lea -0x1(%rcx),%rdx ffffffff800036a5: 48 39 c2 cmp %rax,%rdx ffffffff800036a8: 0f 84 e9 09 00 00 je ffffffff80004097 ctx->set_cursor_pos(ctx, x, y + 1); ffffffff800036ae: 48 8b 74 24 10 mov 0x10(%rsp),%rsi ffffffff800036b3: 48 8d 50 01 lea 0x1(%rax),%rdx ffffffff800036b7: 48 89 df mov %rbx,%rdi ffffffff800036ba: ff 93 00 01 00 00 call *0x100(%rbx) ffffffff800036c0: e9 93 fd ff ff jmp ffffffff80003458 ctx->bold = ctx->saved_state_bold; ffffffff800036c5: 0f b7 83 c0 00 00 00 movzwl 0xc0(%rbx),%eax ctx->current_primary = ctx->saved_state_current_primary; ffffffff800036cc: 48 8b 93 d0 00 00 00 mov 0xd0(%rbx),%rdx ctx->restore_state(ctx); ffffffff800036d3: 48 89 df mov %rbx,%rdi ctx->bold = ctx->saved_state_bold; ffffffff800036d6: 66 89 43 11 mov %ax,0x11(%rbx) ctx->reverse_video = ctx->saved_state_reverse_video; ffffffff800036da: 0f b6 83 c2 00 00 00 movzbl 0xc2(%rbx),%eax ctx->current_primary = ctx->saved_state_current_primary; ffffffff800036e1: 48 89 53 58 mov %rdx,0x58(%rbx) ctx->reverse_video = ctx->saved_state_reverse_video; ffffffff800036e5: 88 43 13 mov %al,0x13(%rbx) ctx->current_charset = ctx->saved_state_current_charset; ffffffff800036e8: 48 8b 83 c8 00 00 00 mov 0xc8(%rbx),%rax ffffffff800036ef: 48 89 43 30 mov %rax,0x30(%rbx) ctx->current_primary = ctx->saved_state_current_primary; ffffffff800036f3: 48 8b 83 d8 00 00 00 mov 0xd8(%rbx),%rax ffffffff800036fa: 48 89 43 60 mov %rax,0x60(%rbx) ctx->restore_state(ctx); ffffffff800036fe: ff 93 88 01 00 00 call *0x188(%rbx) } ffffffff80003704: e9 4f fd ff ff jmp ffffffff80003458 ctx->tab_size = 8; ffffffff80003709: 48 c7 03 08 00 00 00 movq $0x8,(%rbx) ctx->clear(ctx, true); ffffffff80003710: be 01 00 00 00 mov $0x1,%esi ffffffff80003715: 48 89 df mov %rbx,%rdi ctx->dec_private = false; ffffffff80003718: 0f b7 05 81 72 00 00 movzwl 0x7281(%rip),%eax # ffffffff8000a9a0 ctx->autoflush = true; ffffffff8000371f: 48 c7 43 08 01 01 01 movq $0x10101,0x8(%rbx) ffffffff80003726: 00 ctx->dec_private = false; ffffffff80003727: 66 89 43 14 mov %ax,0x14(%rbx) ctx->g_select = 0; ffffffff8000372b: 66 89 43 28 mov %ax,0x28(%rbx) ctx->scroll_bottom_margin = ctx->rows; ffffffff8000372f: 48 8b 83 e0 00 00 00 mov 0xe0(%rbx),%rax ctx->discard_next = false; ffffffff80003736: c7 43 10 00 00 00 00 movl $0x0,0x10(%rbx) ctx->unicode_remaining = 0; ffffffff8000373d: 48 c7 43 20 00 00 00 movq $0x0,0x20(%rbx) ffffffff80003744: 00 ctx->charsets[1] = CHARSET_DEC_SPECIAL; ffffffff80003745: c6 43 2a 01 movb $0x1,0x2a(%rbx) ctx->current_charset = 0; ffffffff80003749: 48 c7 43 30 00 00 00 movq $0x0,0x30(%rbx) ffffffff80003750: 00 ctx->escape_offset = 0; ffffffff80003751: 48 c7 43 38 00 00 00 movq $0x0,0x38(%rbx) ffffffff80003758: 00 ctx->esc_values_i = 0; ffffffff80003759: 48 c7 43 40 00 00 00 movq $0x0,0x40(%rbx) ffffffff80003760: 00 ctx->saved_cursor_x = 0; ffffffff80003761: 48 c7 43 48 00 00 00 movq $0x0,0x48(%rbx) ffffffff80003768: 00 ctx->saved_cursor_y = 0; ffffffff80003769: 48 c7 43 50 00 00 00 movq $0x0,0x50(%rbx) ffffffff80003770: 00 ctx->current_primary = (size_t)-1; ffffffff80003771: 48 c7 43 58 ff ff ff movq $0xffffffffffffffff,0x58(%rbx) ffffffff80003778: ff ctx->current_bg = (size_t)-1; ffffffff80003779: 48 c7 43 60 ff ff ff movq $0xffffffffffffffff,0x60(%rbx) ffffffff80003780: ff ctx->scroll_top_margin = 0; ffffffff80003781: 48 c7 43 68 00 00 00 movq $0x0,0x68(%rbx) ffffffff80003788: 00 ctx->scroll_bottom_margin = ctx->rows; ffffffff80003789: 48 89 43 70 mov %rax,0x70(%rbx) ctx->oob_output = FLANTERM_OOB_OUTPUT_ONLCR; ffffffff8000378d: 48 c7 83 b8 00 00 00 movq $0x10,0xb8(%rbx) ffffffff80003794: 10 00 00 00 ctx->clear(ctx, true); ffffffff80003798: ff 93 f8 00 00 00 call *0xf8(%rbx) break; ffffffff8000379e: e9 b5 fc ff ff jmp ffffffff80003458 ctx->osc = true; ffffffff800037a3: b8 01 00 00 00 mov $0x1,%eax ffffffff800037a8: 66 89 43 0d mov %ax,0xd(%rbx) return; ffffffff800037ac: e9 e6 f8 ff ff jmp ffffffff80003097 ffffffff800037b1: 48 8d 43 78 lea 0x78(%rbx),%rax ffffffff800037b5: 48 8d 93 b8 00 00 00 lea 0xb8(%rbx),%rdx ctx->esc_values[i] = 0; ffffffff800037bc: 48 c7 00 00 00 00 00 movq $0x0,(%rax) ffffffff800037c3: 48 83 c0 10 add $0x10,%rax ffffffff800037c7: 48 c7 40 f8 00 00 00 movq $0x0,-0x8(%rax) ffffffff800037ce: 00 for (size_t i = 0; i < FLANTERM_MAX_ESC_VALUES; i++) ffffffff800037cf: 48 39 c2 cmp %rax,%rdx ffffffff800037d2: 75 e8 jne ffffffff800037bc ctx->esc_values_i = 0; ffffffff800037d4: 48 c7 43 40 00 00 00 movq $0x0,0x40(%rbx) ffffffff800037db: 00 ctx->rrr = false; ffffffff800037dc: c6 43 0f 00 movb $0x0,0xf(%rbx) ctx->control_sequence = true; ffffffff800037e0: c6 43 0b 01 movb $0x1,0xb(%rbx) return; ffffffff800037e4: e9 ae f8 ff ff jmp ffffffff80003097 if (ctx->callback != NULL) { ffffffff800037e9: 48 8b 83 a8 01 00 00 mov 0x1a8(%rbx),%rax ffffffff800037f0: 48 85 c0 test %rax,%rax ffffffff800037f3: 0f 84 5f fc ff ff je ffffffff80003458 ctx->callback(ctx, FLANTERM_CB_PRIVATE_ID, 0, 0, 0); ffffffff800037f9: 45 31 c0 xor %r8d,%r8d ffffffff800037fc: 31 c9 xor %ecx,%ecx ffffffff800037fe: 31 d2 xor %edx,%edx ffffffff80003800: be 1e 00 00 00 mov $0x1e,%esi ffffffff80003805: 48 89 df mov %rbx,%rdi ffffffff80003808: ff d0 call *%rax ffffffff8000380a: e9 49 fc ff ff jmp ffffffff80003458 if (y == ctx->scroll_top_margin) { ffffffff8000380f: 48 8b 44 24 18 mov 0x18(%rsp),%rax ffffffff80003814: 48 39 43 68 cmp %rax,0x68(%rbx) ffffffff80003818: 0f 84 9a 08 00 00 je ffffffff800040b8 ctx->set_cursor_pos(ctx, 0, y - 1); ffffffff8000381e: 48 8d 50 ff lea -0x1(%rax),%rdx ffffffff80003822: 31 f6 xor %esi,%esi ffffffff80003824: 48 89 df mov %rbx,%rdi ffffffff80003827: ff 93 00 01 00 00 call *0x100(%rbx) ffffffff8000382d: e9 26 fc ff ff jmp ffffffff80003458 if (y == ctx->scroll_bottom_margin - 1) { ffffffff80003832: 48 8b 4b 70 mov 0x70(%rbx),%rcx ffffffff80003836: 48 8b 44 24 18 mov 0x18(%rsp),%rax ffffffff8000383b: 48 8d 51 ff lea -0x1(%rcx),%rdx ffffffff8000383f: 48 39 c2 cmp %rax,%rdx ffffffff80003842: 0f 84 28 08 00 00 je ffffffff80004070 ctx->set_cursor_pos(ctx, 0, y + 1); ffffffff80003848: 48 8d 50 01 lea 0x1(%rax),%rdx ffffffff8000384c: 31 f6 xor %esi,%esi ffffffff8000384e: 48 89 df mov %rbx,%rdi ffffffff80003851: ff 93 00 01 00 00 call *0x100(%rbx) ffffffff80003857: e9 fc fb ff ff jmp ffffffff80003458 case 0x00a2: return 155; ffffffff8000385c: be 9b 00 00 00 mov $0x9b,%esi ffffffff80003861: e9 0a fe ff ff jmp ffffffff80003670 case 0x00a1: return 173; ffffffff80003866: be ad 00 00 00 mov $0xad,%esi ffffffff8000386b: e9 00 fe ff ff jmp ffffffff80003670 case 0x00b1: return 241; ffffffff80003870: be f1 00 00 00 mov $0xf1,%esi ffffffff80003875: e9 f6 fd ff ff jmp ffffffff80003670 case 0x00b0: return 248; ffffffff8000387a: be f8 00 00 00 mov $0xf8,%esi ffffffff8000387f: e9 ec fd ff ff jmp ffffffff80003670 case 0x00ac: return 170; ffffffff80003884: be aa 00 00 00 mov $0xaa,%esi ffffffff80003889: e9 e2 fd ff ff jmp ffffffff80003670 case 0x00ab: return 174; ffffffff8000388e: be ae 00 00 00 mov $0xae,%esi ffffffff80003893: e9 d8 fd ff ff jmp ffffffff80003670 case 0x00aa: return 166; ffffffff80003898: be a6 00 00 00 mov $0xa6,%esi ffffffff8000389d: e9 ce fd ff ff jmp ffffffff80003670 case 0x00a5: return 157; ffffffff800038a2: be 9d 00 00 00 mov $0x9d,%esi ffffffff800038a7: e9 c4 fd ff ff jmp ffffffff80003670 case 0x00a3: return 156; ffffffff800038ac: be 9c 00 00 00 mov $0x9c,%esi ffffffff800038b1: e9 ba fd ff ff jmp ffffffff80003670 case 0x2663: return 5; ffffffff800038b6: be 05 00 00 00 mov $0x5,%esi ffffffff800038bb: e9 b0 fd ff ff jmp ffffffff80003670 case 0x2660: return 6; ffffffff800038c0: be 06 00 00 00 mov $0x6,%esi ffffffff800038c5: e9 a6 fd ff ff jmp ffffffff80003670 case 0x2642: return 11; ffffffff800038ca: be 0b 00 00 00 mov $0xb,%esi ffffffff800038cf: e9 9c fd ff ff jmp ffffffff80003670 case 0x2640: return 12; ffffffff800038d4: be 0c 00 00 00 mov $0xc,%esi ffffffff800038d9: e9 92 fd ff ff jmp ffffffff80003670 case 0x263c: return 15; ffffffff800038de: be 0f 00 00 00 mov $0xf,%esi ffffffff800038e3: e9 88 fd ff ff jmp ffffffff80003670 case 0x263b: return 2; ffffffff800038e8: be 02 00 00 00 mov $0x2,%esi ffffffff800038ed: e9 7e fd ff ff jmp ffffffff80003670 case 0x25d9: return 10; ffffffff800038f2: be 0a 00 00 00 mov $0xa,%esi ffffffff800038f7: e9 74 fd ff ff jmp ffffffff80003670 case 0x266b: return 14; ffffffff800038fc: be 0e 00 00 00 mov $0xe,%esi ffffffff80003901: e9 6a fd ff ff jmp ffffffff80003670 case 0x266a: return 13; ffffffff80003906: be 0d 00 00 00 mov $0xd,%esi ffffffff8000390b: e9 60 fd ff ff jmp ffffffff80003670 case 0x2524: return 180; ffffffff80003910: be b4 00 00 00 mov $0xb4,%esi ffffffff80003915: e9 56 fd ff ff jmp ffffffff80003670 case 0x251c: return 195; ffffffff8000391a: be c3 00 00 00 mov $0xc3,%esi ffffffff8000391f: e9 4c fd ff ff jmp ffffffff80003670 case 0x2518: return 217; ffffffff80003924: be d9 00 00 00 mov $0xd9,%esi ffffffff80003929: e9 42 fd ff ff jmp ffffffff80003670 case 0x2514: return 192; ffffffff8000392e: be c0 00 00 00 mov $0xc0,%esi ffffffff80003933: e9 38 fd ff ff jmp ffffffff80003670 case 0x2510: return 191; ffffffff80003938: be bf 00 00 00 mov $0xbf,%esi ffffffff8000393d: e9 2e fd ff ff jmp ffffffff80003670 case 0x250c: return 218; ffffffff80003942: be da 00 00 00 mov $0xda,%esi ffffffff80003947: e9 24 fd ff ff jmp ffffffff80003670 case 0x2502: return 179; ffffffff8000394c: be b3 00 00 00 mov $0xb3,%esi ffffffff80003951: e9 1a fd ff ff jmp ffffffff80003670 case 0x2500: return 196; ffffffff80003956: be c4 00 00 00 mov $0xc4,%esi ffffffff8000395b: e9 10 fd ff ff jmp ffffffff80003670 case 0x0192: return 159; ffffffff80003960: be 9f 00 00 00 mov $0x9f,%esi ffffffff80003965: e9 06 fd ff ff jmp ffffffff80003670 case 0x00ff: return 152; ffffffff8000396a: be 98 00 00 00 mov $0x98,%esi ffffffff8000396f: e9 fc fc ff ff jmp ffffffff80003670 case 0x00fc: return 129; ffffffff80003974: be 81 00 00 00 mov $0x81,%esi ffffffff80003979: e9 f2 fc ff ff jmp ffffffff80003670 case 0x00fb: return 150; ffffffff8000397e: be 96 00 00 00 mov $0x96,%esi ffffffff80003983: e9 e8 fc ff ff jmp ffffffff80003670 case 0x00fa: return 163; ffffffff80003988: be a3 00 00 00 mov $0xa3,%esi ffffffff8000398d: e9 de fc ff ff jmp ffffffff80003670 case 0x00f9: return 151; ffffffff80003992: be 97 00 00 00 mov $0x97,%esi ffffffff80003997: e9 d4 fc ff ff jmp ffffffff80003670 case 0x00f7: return 246; ffffffff8000399c: be f6 00 00 00 mov $0xf6,%esi ffffffff800039a1: e9 ca fc ff ff jmp ffffffff80003670 case 0x00f6: return 148; ffffffff800039a6: be 94 00 00 00 mov $0x94,%esi ffffffff800039ab: e9 c0 fc ff ff jmp ffffffff80003670 case 0x00f4: return 147; ffffffff800039b0: be 93 00 00 00 mov $0x93,%esi ffffffff800039b5: e9 b6 fc ff ff jmp ffffffff80003670 case 0x00f3: return 162; ffffffff800039ba: be a2 00 00 00 mov $0xa2,%esi ffffffff800039bf: e9 ac fc ff ff jmp ffffffff80003670 case 0x00f2: return 149; ffffffff800039c4: be 95 00 00 00 mov $0x95,%esi ffffffff800039c9: e9 a2 fc ff ff jmp ffffffff80003670 case 0x00f1: return 164; ffffffff800039ce: be a4 00 00 00 mov $0xa4,%esi ffffffff800039d3: e9 98 fc ff ff jmp ffffffff80003670 case 0x00ef: return 139; ffffffff800039d8: be 8b 00 00 00 mov $0x8b,%esi ffffffff800039dd: e9 8e fc ff ff jmp ffffffff80003670 case 0x2194: return 29; ffffffff800039e2: be 1d 00 00 00 mov $0x1d,%esi ffffffff800039e7: e9 84 fc ff ff jmp ffffffff80003670 case 0x2193: return 25; ffffffff800039ec: be 19 00 00 00 mov $0x19,%esi ffffffff800039f1: e9 7a fc ff ff jmp ffffffff80003670 case 0x2192: return 26; ffffffff800039f6: be 1a 00 00 00 mov $0x1a,%esi ffffffff800039fb: e9 70 fc ff ff jmp ffffffff80003670 case 0x2191: return 24; ffffffff80003a00: be 18 00 00 00 mov $0x18,%esi ffffffff80003a05: e9 66 fc ff ff jmp ffffffff80003670 case 0x2190: return 27; ffffffff80003a0a: be 1b 00 00 00 mov $0x1b,%esi ffffffff80003a0f: e9 5c fc ff ff jmp ffffffff80003670 case 0x00ee: return 140; ffffffff80003a14: be 8c 00 00 00 mov $0x8c,%esi ffffffff80003a19: e9 52 fc ff ff jmp ffffffff80003670 case 0x00ed: return 161; ffffffff80003a1e: be a1 00 00 00 mov $0xa1,%esi ffffffff80003a23: e9 48 fc ff ff jmp ffffffff80003670 case 0x00ec: return 141; ffffffff80003a28: be 8d 00 00 00 mov $0x8d,%esi ffffffff80003a2d: e9 3e fc ff ff jmp ffffffff80003670 case 0x00eb: return 137; ffffffff80003a32: be 89 00 00 00 mov $0x89,%esi ffffffff80003a37: e9 34 fc ff ff jmp ffffffff80003670 case 0x00ea: return 136; ffffffff80003a3c: be 88 00 00 00 mov $0x88,%esi ffffffff80003a41: e9 2a fc ff ff jmp ffffffff80003670 case 0x00e9: return 130; ffffffff80003a46: be 82 00 00 00 mov $0x82,%esi ffffffff80003a4b: e9 20 fc ff ff jmp ffffffff80003670 case 0x00e8: return 138; ffffffff80003a50: be 8a 00 00 00 mov $0x8a,%esi ffffffff80003a55: e9 16 fc ff ff jmp ffffffff80003670 case 0x00e7: return 135; ffffffff80003a5a: be 87 00 00 00 mov $0x87,%esi ffffffff80003a5f: e9 0c fc ff ff jmp ffffffff80003670 case 0x00e6: return 145; ffffffff80003a64: be 91 00 00 00 mov $0x91,%esi ffffffff80003a69: e9 02 fc ff ff jmp ffffffff80003670 case 0x00e5: return 134; ffffffff80003a6e: be 86 00 00 00 mov $0x86,%esi ffffffff80003a73: e9 f8 fb ff ff jmp ffffffff80003670 case 0x00e4: return 132; ffffffff80003a78: be 84 00 00 00 mov $0x84,%esi ffffffff80003a7d: e9 ee fb ff ff jmp ffffffff80003670 case 0x00e2: return 131; ffffffff80003a82: be 83 00 00 00 mov $0x83,%esi ffffffff80003a87: e9 e4 fb ff ff jmp ffffffff80003670 case 0x00e1: return 160; ffffffff80003a8c: be a0 00 00 00 mov $0xa0,%esi ffffffff80003a91: e9 da fb ff ff jmp ffffffff80003670 case 0x00e0: return 133; ffffffff80003a96: be 85 00 00 00 mov $0x85,%esi ffffffff80003a9b: e9 d0 fb ff ff jmp ffffffff80003670 case 0x00df: return 225; ffffffff80003aa0: be e1 00 00 00 mov $0xe1,%esi ffffffff80003aa5: e9 c6 fb ff ff jmp ffffffff80003670 case 0x00dc: return 154; ffffffff80003aaa: be 9a 00 00 00 mov $0x9a,%esi ffffffff80003aaf: e9 bc fb ff ff jmp ffffffff80003670 case 0x00d6: return 153; ffffffff80003ab4: be 99 00 00 00 mov $0x99,%esi ffffffff80003ab9: e9 b2 fb ff ff jmp ffffffff80003670 case 0x00d1: return 165; ffffffff80003abe: be a5 00 00 00 mov $0xa5,%esi ffffffff80003ac3: e9 a8 fb ff ff jmp ffffffff80003670 case 0x00c9: return 144; ffffffff80003ac8: be 90 00 00 00 mov $0x90,%esi ffffffff80003acd: e9 9e fb ff ff jmp ffffffff80003670 case 0x00c7: return 128; ffffffff80003ad2: be 80 00 00 00 mov $0x80,%esi ffffffff80003ad7: e9 94 fb ff ff jmp ffffffff80003670 case 0x00c6: return 146; ffffffff80003adc: be 92 00 00 00 mov $0x92,%esi ffffffff80003ae1: e9 8a fb ff ff jmp ffffffff80003670 case 0x00c5: return 143; ffffffff80003ae6: be 8f 00 00 00 mov $0x8f,%esi ffffffff80003aeb: e9 80 fb ff ff jmp ffffffff80003670 case 0x00c4: return 142; ffffffff80003af0: be 8e 00 00 00 mov $0x8e,%esi ffffffff80003af5: e9 76 fb ff ff jmp ffffffff80003670 case 0x00bf: return 168; ffffffff80003afa: be a8 00 00 00 mov $0xa8,%esi ffffffff80003aff: e9 6c fb ff ff jmp ffffffff80003670 case 0x00bd: return 171; ffffffff80003b04: be ab 00 00 00 mov $0xab,%esi ffffffff80003b09: e9 62 fb ff ff jmp ffffffff80003670 case 0x00bc: return 172; ffffffff80003b0e: be ac 00 00 00 mov $0xac,%esi ffffffff80003b13: e9 58 fb ff ff jmp ffffffff80003670 case 0x00bb: return 175; ffffffff80003b18: be af 00 00 00 mov $0xaf,%esi ffffffff80003b1d: e9 4e fb ff ff jmp ffffffff80003670 case 0x00ba: return 167; ffffffff80003b22: be a7 00 00 00 mov $0xa7,%esi ffffffff80003b27: e9 44 fb ff ff jmp ffffffff80003670 case 0x00b7: return 250; ffffffff80003b2c: be fa 00 00 00 mov $0xfa,%esi ffffffff80003b31: e9 3a fb ff ff jmp ffffffff80003670 case 0x00b5: return 230; ffffffff80003b36: be e6 00 00 00 mov $0xe6,%esi ffffffff80003b3b: e9 30 fb ff ff jmp ffffffff80003670 case 0x00b2: return 253; ffffffff80003b40: be fd 00 00 00 mov $0xfd,%esi ffffffff80003b45: e9 26 fb ff ff jmp ffffffff80003670 case 0x03c6: return 237; ffffffff80003b4a: be ed 00 00 00 mov $0xed,%esi ffffffff80003b4f: e9 1c fb ff ff jmp ffffffff80003670 case 0x03c4: return 231; ffffffff80003b54: be e7 00 00 00 mov $0xe7,%esi ffffffff80003b59: e9 12 fb ff ff jmp ffffffff80003670 case 0x03c3: return 229; ffffffff80003b5e: be e5 00 00 00 mov $0xe5,%esi ffffffff80003b63: e9 08 fb ff ff jmp ffffffff80003670 case 0x03c0: return 227; ffffffff80003b68: be e3 00 00 00 mov $0xe3,%esi ffffffff80003b6d: e9 fe fa ff ff jmp ffffffff80003670 case 0x03b5: return 238; ffffffff80003b72: be ee 00 00 00 mov $0xee,%esi ffffffff80003b77: e9 f4 fa ff ff jmp ffffffff80003670 case 0x03b4: return 235; ffffffff80003b7c: be eb 00 00 00 mov $0xeb,%esi ffffffff80003b81: e9 ea fa ff ff jmp ffffffff80003670 case 0x03a9: return 234; ffffffff80003b86: be ea 00 00 00 mov $0xea,%esi ffffffff80003b8b: e9 e0 fa ff ff jmp ffffffff80003670 case 0x03a6: return 232; ffffffff80003b90: be e8 00 00 00 mov $0xe8,%esi ffffffff80003b95: e9 d6 fa ff ff jmp ffffffff80003670 case 0x03a3: return 228; ffffffff80003b9a: be e4 00 00 00 mov $0xe4,%esi ffffffff80003b9f: e9 cc fa ff ff jmp ffffffff80003670 case 0x0398: return 233; ffffffff80003ba4: be e9 00 00 00 mov $0xe9,%esi ffffffff80003ba9: e9 c2 fa ff ff jmp ffffffff80003670 case 0x255c: return 189; ffffffff80003bae: be bd 00 00 00 mov $0xbd,%esi ffffffff80003bb3: e9 b8 fa ff ff jmp ffffffff80003670 case 0x255b: return 190; ffffffff80003bb8: be be 00 00 00 mov $0xbe,%esi ffffffff80003bbd: e9 ae fa ff ff jmp ffffffff80003670 case 0x255a: return 200; ffffffff80003bc2: be c8 00 00 00 mov $0xc8,%esi ffffffff80003bc7: e9 a4 fa ff ff jmp ffffffff80003670 case 0x2559: return 211; ffffffff80003bcc: be d3 00 00 00 mov $0xd3,%esi ffffffff80003bd1: e9 9a fa ff ff jmp ffffffff80003670 case 0x2558: return 212; ffffffff80003bd6: be d4 00 00 00 mov $0xd4,%esi ffffffff80003bdb: e9 90 fa ff ff jmp ffffffff80003670 case 0x2557: return 187; ffffffff80003be0: be bb 00 00 00 mov $0xbb,%esi ffffffff80003be5: e9 86 fa ff ff jmp ffffffff80003670 case 0x2556: return 183; ffffffff80003bea: be b7 00 00 00 mov $0xb7,%esi ffffffff80003bef: e9 7c fa ff ff jmp ffffffff80003670 case 0x2555: return 184; ffffffff80003bf4: be b8 00 00 00 mov $0xb8,%esi ffffffff80003bf9: e9 72 fa ff ff jmp ffffffff80003670 case 0x2554: return 201; ffffffff80003bfe: be c9 00 00 00 mov $0xc9,%esi ffffffff80003c03: e9 68 fa ff ff jmp ffffffff80003670 case 0x2553: return 214; ffffffff80003c08: be d6 00 00 00 mov $0xd6,%esi ffffffff80003c0d: e9 5e fa ff ff jmp ffffffff80003670 case 0x2552: return 213; ffffffff80003c12: be d5 00 00 00 mov $0xd5,%esi ffffffff80003c17: e9 54 fa ff ff jmp ffffffff80003670 case 0x2551: return 186; ffffffff80003c1c: be ba 00 00 00 mov $0xba,%esi ffffffff80003c21: e9 4a fa ff ff jmp ffffffff80003670 case 0x2550: return 205; ffffffff80003c26: be cd 00 00 00 mov $0xcd,%esi ffffffff80003c2b: e9 40 fa ff ff jmp ffffffff80003670 case 0x253c: return 197; ffffffff80003c30: be c5 00 00 00 mov $0xc5,%esi ffffffff80003c35: e9 36 fa ff ff jmp ffffffff80003670 case 0x2534: return 193; ffffffff80003c3a: be c1 00 00 00 mov $0xc1,%esi ffffffff80003c3f: e9 2c fa ff ff jmp ffffffff80003670 case 0x252c: return 194; ffffffff80003c44: be c2 00 00 00 mov $0xc2,%esi ffffffff80003c49: e9 22 fa ff ff jmp ffffffff80003670 case 0x25d8: return 8; ffffffff80003c4e: be 08 00 00 00 mov $0x8,%esi ffffffff80003c53: e9 18 fa ff ff jmp ffffffff80003670 case 0x25cb: return 9; ffffffff80003c58: be 09 00 00 00 mov $0x9,%esi ffffffff80003c5d: e9 0e fa ff ff jmp ffffffff80003670 case 0x25c4: return 17; ffffffff80003c62: be 11 00 00 00 mov $0x11,%esi ffffffff80003c67: e9 04 fa ff ff jmp ffffffff80003670 case 0x25bc: return 31; ffffffff80003c6c: be 1f 00 00 00 mov $0x1f,%esi ffffffff80003c71: e9 fa f9 ff ff jmp ffffffff80003670 case 0x25ba: return 16; ffffffff80003c76: be 10 00 00 00 mov $0x10,%esi ffffffff80003c7b: e9 f0 f9 ff ff jmp ffffffff80003670 case 0x25b2: return 30; ffffffff80003c80: be 1e 00 00 00 mov $0x1e,%esi ffffffff80003c85: e9 e6 f9 ff ff jmp ffffffff80003670 case 0x25ac: return 22; ffffffff80003c8a: be 16 00 00 00 mov $0x16,%esi ffffffff80003c8f: e9 dc f9 ff ff jmp ffffffff80003670 case 0x25a0: return 254; ffffffff80003c94: be fe 00 00 00 mov $0xfe,%esi ffffffff80003c99: e9 d2 f9 ff ff jmp ffffffff80003670 case 0x2593: return 178; ffffffff80003c9e: be b2 00 00 00 mov $0xb2,%esi ffffffff80003ca3: e9 c8 f9 ff ff jmp ffffffff80003670 case 0x2592: return 177; ffffffff80003ca8: be b1 00 00 00 mov $0xb1,%esi ffffffff80003cad: e9 be f9 ff ff jmp ffffffff80003670 case 0x2591: return 176; ffffffff80003cb2: be b0 00 00 00 mov $0xb0,%esi ffffffff80003cb7: e9 b4 f9 ff ff jmp ffffffff80003670 case 0x2590: return 222; ffffffff80003cbc: be de 00 00 00 mov $0xde,%esi ffffffff80003cc1: e9 aa f9 ff ff jmp ffffffff80003670 case 0x258c: return 221; ffffffff80003cc6: be dd 00 00 00 mov $0xdd,%esi ffffffff80003ccb: e9 a0 f9 ff ff jmp ffffffff80003670 case 0x2588: return 219; ffffffff80003cd0: be db 00 00 00 mov $0xdb,%esi ffffffff80003cd5: e9 96 f9 ff ff jmp ffffffff80003670 case 0x2584: return 220; ffffffff80003cda: be dc 00 00 00 mov $0xdc,%esi ffffffff80003cdf: e9 8c f9 ff ff jmp ffffffff80003670 case 0x2580: return 223; ffffffff80003ce4: be df 00 00 00 mov $0xdf,%esi ffffffff80003ce9: e9 82 f9 ff ff jmp ffffffff80003670 case 0x256c: return 206; ffffffff80003cee: be ce 00 00 00 mov $0xce,%esi ffffffff80003cf3: e9 78 f9 ff ff jmp ffffffff80003670 case 0x256b: return 215; ffffffff80003cf8: be d7 00 00 00 mov $0xd7,%esi ffffffff80003cfd: e9 6e f9 ff ff jmp ffffffff80003670 case 0x256a: return 216; ffffffff80003d02: be d8 00 00 00 mov $0xd8,%esi ffffffff80003d07: e9 64 f9 ff ff jmp ffffffff80003670 case 0x2569: return 202; ffffffff80003d0c: be ca 00 00 00 mov $0xca,%esi ffffffff80003d11: e9 5a f9 ff ff jmp ffffffff80003670 case 0x2568: return 208; ffffffff80003d16: be d0 00 00 00 mov $0xd0,%esi ffffffff80003d1b: e9 50 f9 ff ff jmp ffffffff80003670 case 0x2567: return 207; ffffffff80003d20: be cf 00 00 00 mov $0xcf,%esi ffffffff80003d25: e9 46 f9 ff ff jmp ffffffff80003670 case 0x2566: return 203; ffffffff80003d2a: be cb 00 00 00 mov $0xcb,%esi ffffffff80003d2f: e9 3c f9 ff ff jmp ffffffff80003670 case 0x2565: return 210; ffffffff80003d34: be d2 00 00 00 mov $0xd2,%esi ffffffff80003d39: e9 32 f9 ff ff jmp ffffffff80003670 case 0x2564: return 209; ffffffff80003d3e: be d1 00 00 00 mov $0xd1,%esi ffffffff80003d43: e9 28 f9 ff ff jmp ffffffff80003670 case 0x2563: return 185; ffffffff80003d48: be b9 00 00 00 mov $0xb9,%esi ffffffff80003d4d: e9 1e f9 ff ff jmp ffffffff80003670 case 0x2562: return 182; ffffffff80003d52: be b6 00 00 00 mov $0xb6,%esi ffffffff80003d57: e9 14 f9 ff ff jmp ffffffff80003670 case 0x2561: return 181; ffffffff80003d5c: be b5 00 00 00 mov $0xb5,%esi ffffffff80003d61: e9 0a f9 ff ff jmp ffffffff80003670 case 0x2560: return 204; ffffffff80003d66: be cc 00 00 00 mov $0xcc,%esi ffffffff80003d6b: e9 00 f9 ff ff jmp ffffffff80003670 case 0x255f: return 199; ffffffff80003d70: be c7 00 00 00 mov $0xc7,%esi ffffffff80003d75: e9 f6 f8 ff ff jmp ffffffff80003670 case 0x255e: return 198; ffffffff80003d7a: be c6 00 00 00 mov $0xc6,%esi ffffffff80003d7f: e9 ec f8 ff ff jmp ffffffff80003670 case 0x255d: return 188; ffffffff80003d84: be bc 00 00 00 mov $0xbc,%esi ffffffff80003d89: e9 e2 f8 ff ff jmp ffffffff80003670 case 0x03b1: return 224; ffffffff80003d8e: be e0 00 00 00 mov $0xe0,%esi ffffffff80003d93: e9 d8 f8 ff ff jmp ffffffff80003670 case 0x0393: return 226; ffffffff80003d98: be e2 00 00 00 mov $0xe2,%esi ffffffff80003d9d: e9 ce f8 ff ff jmp ffffffff80003670 case 0x00b6: return 20; ffffffff80003da2: be 14 00 00 00 mov $0x14,%esi ffffffff80003da7: e9 c4 f8 ff ff jmp ffffffff80003670 switch (code_point) { ffffffff80003dac: be 01 00 00 00 mov $0x1,%esi ffffffff80003db1: e9 ba f8 ff ff jmp ffffffff80003670 case 0x2666: return 4; ffffffff80003db6: be 04 00 00 00 mov $0x4,%esi ffffffff80003dbb: e9 b0 f8 ff ff jmp ffffffff80003670 switch (code_point) { ffffffff80003dc0: be 03 00 00 00 mov $0x3,%esi ffffffff80003dc5: e9 a6 f8 ff ff jmp ffffffff80003670 case 0x21a8: return 23; ffffffff80003dca: be 17 00 00 00 mov $0x17,%esi ffffffff80003dcf: e9 9c f8 ff ff jmp ffffffff80003670 case 0x2195: return 18; ffffffff80003dd4: be 12 00 00 00 mov $0x12,%esi ffffffff80003dd9: e9 92 f8 ff ff jmp ffffffff80003670 case 0x00a7: return 21; ffffffff80003dde: be 15 00 00 00 mov $0x15,%esi ffffffff80003de3: e9 88 f8 ff ff jmp ffffffff80003670 ffffffff80003de8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) ffffffff80003def: 00 ctx->osc_escape = true; ffffffff80003df0: c6 43 0e 01 movb $0x1,0xe(%rbx) return; ffffffff80003df4: e9 9e f2 ff ff jmp ffffffff80003097 ctx->scroll(ctx); ffffffff80003df9: 48 89 df mov %rbx,%rdi ffffffff80003dfc: ff 93 68 01 00 00 call *0x168(%rbx) ctx->set_cursor_pos(ctx, (ctx->oob_output & FLANTERM_OOB_OUTPUT_ONLCR) ? 0 : x, y); ffffffff80003e02: 48 8b 83 00 01 00 00 mov 0x100(%rbx),%rax ffffffff80003e09: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff80003e0e: 31 f6 xor %esi,%esi ffffffff80003e10: f6 83 b8 00 00 00 10 testb $0x10,0xb8(%rbx) ffffffff80003e17: 0f 85 65 f5 ff ff jne ffffffff80003382 ffffffff80003e1d: e9 5b f5 ff ff jmp ffffffff8000337d ctx->set_cursor_pos(ctx, ctx->cols - 1, y); ffffffff80003e22: 48 8d 72 ff lea -0x1(%rdx),%rsi ffffffff80003e26: 48 89 fa mov %rdi,%rdx ffffffff80003e29: 48 89 df mov %rbx,%rdi ffffffff80003e2c: ff d1 call *%rcx return; ffffffff80003e2e: e9 64 f2 ff ff jmp ffffffff80003097 switch (c) { ffffffff80003e33: 41 8d 54 24 d5 lea -0x2b(%r12),%edx ffffffff80003e38: 80 fa 53 cmp $0x53,%dl ffffffff80003e3b: 0f 87 e0 f4 ff ff ja ffffffff80003321 ffffffff80003e41: 0f b6 d2 movzbl %dl,%edx ffffffff80003e44: 3e ff 24 d5 18 98 00 notrack jmp *-0x7fff67e8(,%rdx,8) ffffffff80003e4b: 80 if (ctx->rrr == true) { ffffffff80003e4c: 80 7b 0f 00 cmpb $0x0,0xf(%rbx) ffffffff80003e50: 0f 84 8a 01 00 00 je ffffffff80003fe0 ctx->esc_values_i++; ffffffff80003e56: 48 83 c2 01 add $0x1,%rdx ctx->rrr = false; ffffffff80003e5a: c6 43 0f 00 movb $0x0,0xf(%rbx) ctx->esc_values_i++; ffffffff80003e5e: 48 89 53 40 mov %rdx,0x40(%rbx) if (c == ';') ffffffff80003e62: 41 80 fc 3b cmp $0x3b,%r12b ffffffff80003e66: 0f 84 2b f2 ff ff je ffffffff80003097 if (ctx->dec_private == true) { ffffffff80003e6c: 0f b6 73 14 movzbl 0x14(%rbx),%esi switch (c) { ffffffff80003e70: 41 80 fc 4b cmp $0x4b,%r12b ffffffff80003e74: 0f 8f 8f 01 00 00 jg ffffffff80004009 ffffffff80003e7a: 41 80 fc 49 cmp $0x49,%r12b ffffffff80003e7e: 0f 8f 67 02 00 00 jg ffffffff800040eb for (size_t i = ctx->esc_values_i; i < FLANTERM_MAX_ESC_VALUES; i++) { ffffffff80003e84: 41 b8 01 00 00 00 mov $0x1,%r8d ffffffff80003e8a: 48 83 fa 0f cmp $0xf,%rdx ffffffff80003e8e: 0f 87 d2 09 00 00 ja ffffffff80004866 ffffffff80003e94: 48 8d bb b8 00 00 00 lea 0xb8(%rbx),%rdi ffffffff80003e9b: 48 8d 44 93 78 lea 0x78(%rbx,%rdx,4),%rax ctx->esc_values[i] = esc_default; ffffffff80003ea0: 44 89 c1 mov %r8d,%ecx ffffffff80003ea3: 49 89 f9 mov %rdi,%r9 ffffffff80003ea6: 49 29 c1 sub %rax,%r9 ffffffff80003ea9: 41 83 e1 04 and $0x4,%r9d ffffffff80003ead: 74 0c je ffffffff80003ebb ffffffff80003eaf: 44 89 00 mov %r8d,(%rax) for (size_t i = ctx->esc_values_i; i < FLANTERM_MAX_ESC_VALUES; i++) { ffffffff80003eb2: 48 83 c0 04 add $0x4,%rax ffffffff80003eb6: 48 39 c7 cmp %rax,%rdi ffffffff80003eb9: 74 0e je ffffffff80003ec9 ctx->esc_values[i] = esc_default; ffffffff80003ebb: 89 08 mov %ecx,(%rax) for (size_t i = ctx->esc_values_i; i < FLANTERM_MAX_ESC_VALUES; i++) { ffffffff80003ebd: 48 83 c0 08 add $0x8,%rax ctx->esc_values[i] = esc_default; ffffffff80003ec1: 89 48 fc mov %ecx,-0x4(%rax) for (size_t i = ctx->esc_values_i; i < FLANTERM_MAX_ESC_VALUES; i++) { ffffffff80003ec4: 48 39 c7 cmp %rax,%rdi ffffffff80003ec7: 75 f2 jne ffffffff80003ebb if (ctx->dec_private == true) { ffffffff80003ec9: 40 84 f6 test %sil,%sil ffffffff80003ecc: 0f 85 e8 02 00 00 jne ffffffff800041ba bool r = ctx->scroll_enabled; ffffffff80003ed2: 44 0f b6 73 0a movzbl 0xa(%rbx),%r14d ctx->get_cursor_pos(ctx, &x, &y); ffffffff80003ed7: 48 8d 54 24 18 lea 0x18(%rsp),%rdx ctx->scroll_enabled = false; ffffffff80003edc: c6 43 0a 00 movb $0x0,0xa(%rbx) ctx->get_cursor_pos(ctx, &x, &y); ffffffff80003ee0: 48 89 df mov %rbx,%rdi ffffffff80003ee3: 48 8d 74 24 10 lea 0x10(%rsp),%rsi ffffffff80003ee8: ff 93 08 01 00 00 call *0x108(%rbx) switch (c) { ffffffff80003eee: 41 8d 44 24 c0 lea -0x40(%r12),%eax ffffffff80003ef3: 3c 35 cmp $0x35,%al ffffffff80003ef5: 77 67 ja ffffffff80003f5e ffffffff80003ef7: 0f b6 c0 movzbl %al,%eax ffffffff80003efa: 3e ff 24 c5 b8 9a 00 notrack jmp *-0x7fff6548(,%rax,8) ffffffff80003f01: 80 x = 0; ffffffff80003f02: 31 ff xor %edi,%edi ffffffff80003f04: 48 89 7c 24 10 mov %rdi,0x10(%rsp) if (y + ctx->esc_values[0] > ctx->rows - 1) ffffffff80003f09: 48 8b 4c 24 18 mov 0x18(%rsp),%rcx ffffffff80003f0e: 48 8b 83 e0 00 00 00 mov 0xe0(%rbx),%rax ffffffff80003f15: 8b 53 78 mov 0x78(%rbx),%edx ffffffff80003f18: 48 8d 78 ff lea -0x1(%rax),%rdi ffffffff80003f1c: 48 8d 34 0a lea (%rdx,%rcx,1),%rsi ffffffff80003f20: 48 39 f7 cmp %rsi,%rdi ffffffff80003f23: 73 08 jae ffffffff80003f2d ctx->esc_values[0] = (ctx->rows - 1) - y; ffffffff80003f25: 29 c8 sub %ecx,%eax ffffffff80003f27: 8d 50 ff lea -0x1(%rax),%edx ffffffff80003f2a: 89 53 78 mov %edx,0x78(%rbx) if ((ctx->scroll_top_margin >= orig_y && ctx->scroll_top_margin <= dest_y) ffffffff80003f2d: 48 8b 73 68 mov 0x68(%rbx),%rsi || (ctx->scroll_bottom_margin >= orig_y && ctx->scroll_bottom_margin <= dest_y)) { ffffffff80003f31: 48 8b 43 70 mov 0x70(%rbx),%rax size_t dest_y = y + ctx->esc_values[0]; ffffffff80003f35: 48 01 ca add %rcx,%rdx if ((ctx->scroll_top_margin >= orig_y && ctx->scroll_top_margin <= dest_y) ffffffff80003f38: 48 39 ce cmp %rcx,%rsi ffffffff80003f3b: 72 05 jb ffffffff80003f42 ffffffff80003f3d: 48 39 f2 cmp %rsi,%rdx ffffffff80003f40: 73 05 jae ffffffff80003f47 || (ctx->scroll_bottom_margin >= orig_y && ctx->scroll_bottom_margin <= dest_y)) { ffffffff80003f42: 48 39 c8 cmp %rcx,%rax ffffffff80003f45: 72 09 jb ffffffff80003f50 if (will_be_in_scroll_region && dest_y >= ctx->scroll_bottom_margin) { ffffffff80003f47: 48 39 c2 cmp %rax,%rdx ffffffff80003f4a: 0f 83 dc 07 00 00 jae ffffffff8000472c ctx->set_cursor_pos(ctx, x, ctx->esc_values[0]); ffffffff80003f50: 48 8b 74 24 10 mov 0x10(%rsp),%rsi ffffffff80003f55: 48 89 df mov %rbx,%rdi ffffffff80003f58: ff 93 00 01 00 00 call *0x100(%rbx) ctx->scroll_enabled = r; ffffffff80003f5e: 44 88 73 0a mov %r14b,0xa(%rbx) ctx->control_sequence = false; ffffffff80003f62: 31 d2 xor %edx,%edx ffffffff80003f64: 66 89 53 0b mov %dx,0xb(%rbx) ffffffff80003f68: e9 2a f1 ff ff jmp ffffffff80003097 switch (c) { ffffffff80003f6d: 41 80 fc 3f cmp $0x3f,%r12b ffffffff80003f71: 0f 84 17 01 00 00 je ffffffff8000408e ffffffff80003f77: 41 80 fc 5b cmp $0x5b,%r12b ffffffff80003f7b: 0f 85 30 f6 ff ff jne ffffffff800035b1 ctx->discard_next = true; ffffffff80003f81: c6 43 10 01 movb $0x1,0x10(%rbx) goto cleanup; ffffffff80003f85: eb db jmp ffffffff80003f62 switch (code_point) { ffffffff80003f87: 49 8d 84 24 e7 dd ff lea -0x2219(%r12),%rax ffffffff80003f8e: ff ffffffff80003f8f: 48 83 f8 2f cmp $0x2f,%rax ffffffff80003f93: 0f 87 27 f4 ff ff ja ffffffff800033c0 ffffffff80003f99: 3e ff 24 c5 68 9c 00 notrack jmp *-0x7fff6398(,%rax,8) ffffffff80003fa0: 80 ffffffff80003fa1: 49 81 fc 7f 20 00 00 cmp $0x207f,%r12 ffffffff80003fa8: 0f 84 02 02 00 00 je ffffffff800041b0 ffffffff80003fae: 0f 87 dc 01 00 00 ja ffffffff80004190 ffffffff80003fb4: 49 81 fc 22 20 00 00 cmp $0x2022,%r12 ffffffff80003fbb: 0f 84 c5 01 00 00 je ffffffff80004186 case 0x203c: return 19; ffffffff80003fc1: be 13 00 00 00 mov $0x13,%esi switch (code_point) { ffffffff80003fc6: 49 81 fc 3c 20 00 00 cmp $0x203c,%r12 ffffffff80003fcd: 0f 84 9d f6 ff ff je ffffffff80003670 ffffffff80003fd3: e9 e8 f3 ff ff jmp ffffffff800033c0 ffffffff80003fd8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) ffffffff80003fdf: 00 } else if (c == ';') { ffffffff80003fe0: 41 80 fc 3b cmp $0x3b,%r12b ffffffff80003fe4: 0f 85 82 fe ff ff jne ffffffff80003e6c if (ctx->esc_values_i == FLANTERM_MAX_ESC_VALUES) { ffffffff80003fea: 48 83 fa 10 cmp $0x10,%rdx ffffffff80003fee: 0f 84 a3 f0 ff ff je ffffffff80003097 ctx->esc_values[ctx->esc_values_i] = 0; ffffffff80003ff4: c7 44 93 78 00 00 00 movl $0x0,0x78(%rbx,%rdx,4) ffffffff80003ffb: 00 ctx->esc_values_i++; ffffffff80003ffc: 48 83 c2 01 add $0x1,%rdx ffffffff80004000: 48 89 53 40 mov %rdx,0x40(%rbx) return; ffffffff80004004: e9 8e f0 ff ff jmp ffffffff80003097 switch (c) { ffffffff80004009: 41 80 fc 71 cmp $0x71,%r12b ffffffff8000400d: 0f 85 c3 00 00 00 jne ffffffff800040d6 esc_default = 0; break; ffffffff80004013: 45 31 c0 xor %r8d,%r8d for (size_t i = ctx->esc_values_i; i < FLANTERM_MAX_ESC_VALUES; i++) { ffffffff80004016: 48 83 fa 0f cmp $0xf,%rdx ffffffff8000401a: 0f 86 74 fe ff ff jbe ffffffff80003e94 if (ctx->dec_private == true) { ffffffff80004020: 40 84 f6 test %sil,%sil ffffffff80004023: 0f 85 46 08 00 00 jne ffffffff8000486f bool r = ctx->scroll_enabled; ffffffff80004029: 44 0f b6 73 0a movzbl 0xa(%rbx),%r14d ctx->get_cursor_pos(ctx, &x, &y); ffffffff8000402e: 48 8d 54 24 18 lea 0x18(%rsp),%rdx ctx->scroll_enabled = false; ffffffff80004033: c6 43 0a 00 movb $0x0,0xa(%rbx) ctx->get_cursor_pos(ctx, &x, &y); ffffffff80004037: 48 89 df mov %rbx,%rdi ffffffff8000403a: 48 8d 74 24 10 lea 0x10(%rsp),%rsi ffffffff8000403f: ff 93 08 01 00 00 call *0x108(%rbx) if (ctx->callback != NULL) { ffffffff80004045: 48 8b 83 a8 01 00 00 mov 0x1a8(%rbx),%rax ffffffff8000404c: 48 85 c0 test %rax,%rax ffffffff8000404f: 0f 84 09 ff ff ff je ffffffff80003f5e ctx->callback(ctx, FLANTERM_CB_KBD_LEDS, ctx->esc_values[0], 0, 0); ffffffff80004055: 8b 53 78 mov 0x78(%rbx),%edx ffffffff80004058: 45 31 c0 xor %r8d,%r8d ffffffff8000405b: 31 c9 xor %ecx,%ecx ffffffff8000405d: be 3c 00 00 00 mov $0x3c,%esi ffffffff80004062: 48 89 df mov %rbx,%rdi ffffffff80004065: ff d0 call *%rax ffffffff80004067: e9 f2 fe ff ff jmp ffffffff80003f5e ffffffff8000406c: 0f 1f 40 00 nopl 0x0(%rax) ctx->scroll(ctx); ffffffff80004070: 48 89 df mov %rbx,%rdi ffffffff80004073: ff 93 68 01 00 00 call *0x168(%rbx) ctx->set_cursor_pos(ctx, 0, y); ffffffff80004079: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff8000407e: 31 f6 xor %esi,%esi ffffffff80004080: 48 89 df mov %rbx,%rdi ffffffff80004083: ff 93 00 01 00 00 call *0x100(%rbx) ffffffff80004089: e9 ca f3 ff ff jmp ffffffff80003458 ctx->dec_private = true; ffffffff8000408e: c6 43 14 01 movb $0x1,0x14(%rbx) return; ffffffff80004092: e9 00 f0 ff ff jmp ffffffff80003097 ctx->scroll(ctx); ffffffff80004097: 48 89 df mov %rbx,%rdi ffffffff8000409a: ff 93 68 01 00 00 call *0x168(%rbx) ctx->set_cursor_pos(ctx, x, y); ffffffff800040a0: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff800040a5: 48 8b 74 24 10 mov 0x10(%rsp),%rsi ffffffff800040aa: 48 89 df mov %rbx,%rdi ffffffff800040ad: ff 93 00 01 00 00 call *0x100(%rbx) ffffffff800040b3: e9 a0 f3 ff ff jmp ffffffff80003458 ctx->revscroll(ctx); ffffffff800040b8: 48 89 df mov %rbx,%rdi ffffffff800040bb: ff 93 70 01 00 00 call *0x170(%rbx) ctx->set_cursor_pos(ctx, 0, y); ffffffff800040c1: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff800040c6: 31 f6 xor %esi,%esi ffffffff800040c8: 48 89 df mov %rbx,%rdi ffffffff800040cb: ff 93 00 01 00 00 call *0x100(%rbx) ffffffff800040d1: e9 82 f3 ff ff jmp ffffffff80003458 for (size_t i = ctx->esc_values_i; i < FLANTERM_MAX_ESC_VALUES; i++) { ffffffff800040d6: 48 83 fa 0f cmp $0xf,%rdx ffffffff800040da: 0f 87 31 06 00 00 ja ffffffff80004711 ffffffff800040e0: 41 b8 01 00 00 00 mov $0x1,%r8d ffffffff800040e6: e9 a9 fd ff ff jmp ffffffff80003e94 esc_default = 0; break; ffffffff800040eb: 45 31 c0 xor %r8d,%r8d for (size_t i = ctx->esc_values_i; i < FLANTERM_MAX_ESC_VALUES; i++) { ffffffff800040ee: 48 83 fa 0f cmp $0xf,%rdx ffffffff800040f2: 0f 86 9c fd ff ff jbe ffffffff80003e94 if (ctx->dec_private == true) { ffffffff800040f8: 40 84 f6 test %sil,%sil ffffffff800040fb: 0f 84 d1 fd ff ff je ffffffff80003ed2 ctx->dec_private = false; ffffffff80004101: c6 43 14 00 movb $0x0,0x14(%rbx) switch (c) { ffffffff80004105: 41 80 fc 6c cmp $0x6c,%r12b ffffffff80004109: 0f 85 53 fe ff ff jne ffffffff80003f62 switch (ctx->esc_values[0]) { ffffffff8000410f: 83 7b 78 19 cmpl $0x19,0x78(%rbx) ffffffff80004113: 0f 84 0a 06 00 00 je ffffffff80004723 if (ctx->callback != NULL) { ffffffff80004119: 48 8b 83 a8 01 00 00 mov 0x1a8(%rbx),%rax ffffffff80004120: 48 85 c0 test %rax,%rax ffffffff80004123: 0f 84 39 fe ff ff je ffffffff80003f62 ctx->callback(ctx, FLANTERM_CB_DEC, ctx->esc_values_i, (uintptr_t)ctx->esc_values, c); ffffffff80004129: 48 8d 4b 78 lea 0x78(%rbx),%rcx ffffffff8000412d: 4d 0f be c4 movsbq %r12b,%r8 ffffffff80004131: be 0a 00 00 00 mov $0xa,%esi ffffffff80004136: 48 89 df mov %rbx,%rdi ffffffff80004139: ff d0 call *%rax ffffffff8000413b: e9 22 fe ff ff jmp ffffffff80003f62 case 0x2248: return 247; ffffffff80004140: be f7 00 00 00 mov $0xf7,%esi ffffffff80004145: e9 26 f5 ff ff jmp ffffffff80003670 case 0x2302: return 127; ffffffff8000414a: be 7f 00 00 00 mov $0x7f,%esi ffffffff8000414f: e9 1c f5 ff ff jmp ffffffff80003670 case 0x2229: return 239; ffffffff80004154: be ef 00 00 00 mov $0xef,%esi ffffffff80004159: e9 12 f5 ff ff jmp ffffffff80003670 case 0x221a: return 251; ffffffff8000415e: be fb 00 00 00 mov $0xfb,%esi ffffffff80004163: e9 08 f5 ff ff jmp ffffffff80003670 case 0x2219: return 249; ffffffff80004168: be f9 00 00 00 mov $0xf9,%esi ffffffff8000416d: e9 fe f4 ff ff jmp ffffffff80003670 case 0x2265: return 242; ffffffff80004172: be f2 00 00 00 mov $0xf2,%esi ffffffff80004177: e9 f4 f4 ff ff jmp ffffffff80003670 case 0x2264: return 243; ffffffff8000417c: be f3 00 00 00 mov $0xf3,%esi ffffffff80004181: e9 ea f4 ff ff jmp ffffffff80003670 case 0x2022: return 7; ffffffff80004186: be 07 00 00 00 mov $0x7,%esi ffffffff8000418b: e9 e0 f4 ff ff jmp ffffffff80003670 case 0x20a7: return 158; ffffffff80004190: be 9e 00 00 00 mov $0x9e,%esi switch (code_point) { ffffffff80004195: 49 81 fc a7 20 00 00 cmp $0x20a7,%r12 ffffffff8000419c: 0f 84 ce f4 ff ff je ffffffff80003670 ffffffff800041a2: e9 19 f2 ff ff jmp ffffffff800033c0 ffffffff800041a7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff800041ae: 00 00 case 0x207f: return 252; ffffffff800041b0: be fc 00 00 00 mov $0xfc,%esi ffffffff800041b5: e9 b6 f4 ff ff jmp ffffffff80003670 ctx->dec_private = false; ffffffff800041ba: c6 43 14 00 movb $0x0,0x14(%rbx) if (ctx->esc_values_i == 0) { ffffffff800041be: 48 85 d2 test %rdx,%rdx ffffffff800041c1: 0f 84 9b fd ff ff je ffffffff80003f62 switch (c) { ffffffff800041c7: 41 80 fc 68 cmp $0x68,%r12b ffffffff800041cb: 0f 85 34 ff ff ff jne ffffffff80004105 switch (ctx->esc_values[0]) { ffffffff800041d1: 83 7b 78 19 cmpl $0x19,0x78(%rbx) ffffffff800041d5: 0f 85 3e ff ff ff jne ffffffff80004119 ctx->cursor_enabled = true; ffffffff800041db: c6 43 09 01 movb $0x1,0x9(%rbx) ffffffff800041df: e9 7e fd ff ff jmp ffffffff80003f62 ffffffff800041e4: 0f 1f 40 00 nopl 0x0(%rax) case 0x2321: return 245; ffffffff800041e8: be f5 00 00 00 mov $0xf5,%esi ffffffff800041ed: e9 7e f4 ff ff jmp ffffffff80003670 case 0x2320: return 244; ffffffff800041f2: be f4 00 00 00 mov $0xf4,%esi ffffffff800041f7: e9 74 f4 ff ff jmp ffffffff80003670 for (size_t i = x + ctx->esc_values[0]; i < ctx->cols; i++) ffffffff800041fc: 8b 53 78 mov 0x78(%rbx),%edx ffffffff800041ff: 4c 8b 64 24 10 mov 0x10(%rsp),%r12 ffffffff80004204: 48 8b 83 e8 00 00 00 mov 0xe8(%rbx),%rax ffffffff8000420b: 49 01 d4 add %rdx,%r12 ffffffff8000420e: 49 39 c4 cmp %rax,%r12 ffffffff80004211: 73 2d jae ffffffff80004240 ctx->move_character(ctx, i - ctx->esc_values[0], y, i, y); ffffffff80004213: 4c 8b 44 24 18 mov 0x18(%rsp),%r8 ffffffff80004218: 4c 89 e6 mov %r12,%rsi ffffffff8000421b: 4c 89 e1 mov %r12,%rcx ffffffff8000421e: 48 89 df mov %rbx,%rdi ffffffff80004221: 48 29 d6 sub %rdx,%rsi for (size_t i = x + ctx->esc_values[0]; i < ctx->cols; i++) ffffffff80004224: 49 83 c4 01 add $0x1,%r12 ctx->move_character(ctx, i - ctx->esc_values[0], y, i, y); ffffffff80004228: 4c 89 c2 mov %r8,%rdx ffffffff8000422b: ff 93 60 01 00 00 call *0x160(%rbx) for (size_t i = x + ctx->esc_values[0]; i < ctx->cols; i++) ffffffff80004231: 48 8b 83 e8 00 00 00 mov 0xe8(%rbx),%rax ffffffff80004238: 8b 53 78 mov 0x78(%rbx),%edx ffffffff8000423b: 49 39 c4 cmp %rax,%r12 ffffffff8000423e: 72 d3 jb ffffffff80004213 ctx->set_cursor_pos(ctx, ctx->cols - ctx->esc_values[0], y); ffffffff80004240: 48 29 d0 sub %rdx,%rax ffffffff80004243: 48 89 df mov %rbx,%rdi ffffffff80004246: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff8000424b: 48 89 c6 mov %rax,%rsi ffffffff8000424e: ff 93 00 01 00 00 call *0x100(%rbx) size_t count = ctx->esc_values[0] > ctx->cols ? ctx->cols : ctx->esc_values[0]; ffffffff80004254: 44 8b 63 78 mov 0x78(%rbx),%r12d ffffffff80004258: 48 8b 83 e8 00 00 00 mov 0xe8(%rbx),%rax ffffffff8000425f: 49 39 c4 cmp %rax,%r12 ffffffff80004262: 4c 0f 47 e0 cmova %rax,%r12 for (size_t i = 0; i < count; i++) ffffffff80004266: 45 31 ff xor %r15d,%r15d ffffffff80004269: 4d 85 e4 test %r12,%r12 ffffffff8000426c: 74 17 je ffffffff80004285 ffffffff8000426e: 49 83 c7 01 add $0x1,%r15 ctx->raw_putchar(ctx, ' '); ffffffff80004272: be 20 00 00 00 mov $0x20,%esi ffffffff80004277: 48 89 df mov %rbx,%rdi ffffffff8000427a: ff 93 f0 00 00 00 call *0xf0(%rbx) for (size_t i = 0; i < count; i++) ffffffff80004280: 4d 39 fc cmp %r15,%r12 ffffffff80004283: 75 e9 jne ffffffff8000426e ctx->set_cursor_pos(ctx, x, y); ffffffff80004285: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff8000428a: 48 8b 74 24 10 mov 0x10(%rsp),%rsi ffffffff8000428f: 48 89 df mov %rbx,%rdi ffffffff80004292: ff 93 00 01 00 00 call *0x100(%rbx) break; ffffffff80004298: e9 c1 fc ff ff jmp ffffffff80003f5e x = 0; ffffffff8000429d: 45 31 c0 xor %r8d,%r8d ffffffff800042a0: 4c 89 44 24 10 mov %r8,0x10(%rsp) if (ctx->esc_values[0] > y) ffffffff800042a5: 48 8b 4c 24 18 mov 0x18(%rsp),%rcx ffffffff800042aa: 8b 53 78 mov 0x78(%rbx),%edx ffffffff800042ad: 48 39 d1 cmp %rdx,%rcx ffffffff800042b0: 73 05 jae ffffffff800042b7 ctx->esc_values[0] = y; ffffffff800042b2: 89 4b 78 mov %ecx,0x78(%rbx) ffffffff800042b5: 89 ca mov %ecx,%edx size_t dest_y = y - ctx->esc_values[0]; ffffffff800042b7: 48 89 c8 mov %rcx,%rax ffffffff800042ba: 48 29 d0 sub %rdx,%rax if ((ctx->scroll_top_margin >= dest_y && ctx->scroll_top_margin <= orig_y) ffffffff800042bd: 48 8b 53 68 mov 0x68(%rbx),%rdx ffffffff800042c1: 48 39 c2 cmp %rax,%rdx ffffffff800042c4: 72 09 jb ffffffff800042cf ffffffff800042c6: 48 39 d1 cmp %rdx,%rcx ffffffff800042c9: 0f 83 2c 04 00 00 jae ffffffff800046fb || (ctx->scroll_bottom_margin >= dest_y && ctx->scroll_bottom_margin <= orig_y)) { ffffffff800042cf: 48 8b 73 70 mov 0x70(%rbx),%rsi ffffffff800042d3: 48 39 c6 cmp %rax,%rsi ffffffff800042d6: 72 09 jb ffffffff800042e1 ffffffff800042d8: 48 39 f1 cmp %rsi,%rcx ffffffff800042db: 0f 83 1a 04 00 00 jae ffffffff800046fb ctx->set_cursor_pos(ctx, x, dest_y); ffffffff800042e1: 48 8b 74 24 10 mov 0x10(%rsp),%rsi ffffffff800042e6: 48 89 c2 mov %rax,%rdx ffffffff800042e9: 48 89 df mov %rbx,%rdi ffffffff800042ec: ff 93 00 01 00 00 call *0x100(%rbx) break; ffffffff800042f2: e9 67 fc ff ff jmp ffffffff80003f5e case 0x221f: return 28; ffffffff800042f7: be 1c 00 00 00 mov $0x1c,%esi ffffffff800042fc: e9 6f f3 ff ff jmp ffffffff80003670 case '~': FLANTERM_DEC_SPCL_PRN(0xfa) ffffffff80004301: be fa 00 00 00 mov $0xfa,%esi ffffffff80004306: 48 89 df mov %rbx,%rdi ffffffff80004309: ff d0 call *%rax ffffffff8000430b: e9 87 ed ff ff jmp ffffffff80003097 case '}': FLANTERM_DEC_SPCL_PRN(0x9c) ffffffff80004310: be 9c 00 00 00 mov $0x9c,%esi ffffffff80004315: 48 89 df mov %rbx,%rdi ffffffff80004318: ff d0 call *%rax ffffffff8000431a: e9 78 ed ff ff jmp ffffffff80003097 case '{': FLANTERM_DEC_SPCL_PRN(0xe3) ffffffff8000431f: be e3 00 00 00 mov $0xe3,%esi ffffffff80004324: 48 89 df mov %rbx,%rdi ffffffff80004327: ff d0 call *%rax ffffffff80004329: e9 69 ed ff ff jmp ffffffff80003097 case 'z': FLANTERM_DEC_SPCL_PRN(0xf2) ffffffff8000432e: be f2 00 00 00 mov $0xf2,%esi ffffffff80004333: 48 89 df mov %rbx,%rdi ffffffff80004336: ff d0 call *%rax ffffffff80004338: e9 5a ed ff ff jmp ffffffff80003097 case 'y': FLANTERM_DEC_SPCL_PRN(0xf3) ffffffff8000433d: be f3 00 00 00 mov $0xf3,%esi ffffffff80004342: 48 89 df mov %rbx,%rdi ffffffff80004345: ff d0 call *%rax ffffffff80004347: e9 4b ed ff ff jmp ffffffff80003097 case 'x': FLANTERM_DEC_SPCL_PRN(0xb3) ffffffff8000434c: be b3 00 00 00 mov $0xb3,%esi ffffffff80004351: 48 89 df mov %rbx,%rdi ffffffff80004354: ff d0 call *%rax ffffffff80004356: e9 3c ed ff ff jmp ffffffff80003097 case 'w': FLANTERM_DEC_SPCL_PRN(0xc2) ffffffff8000435b: be c2 00 00 00 mov $0xc2,%esi ffffffff80004360: 48 89 df mov %rbx,%rdi ffffffff80004363: ff d0 call *%rax ffffffff80004365: e9 2d ed ff ff jmp ffffffff80003097 case 'v': FLANTERM_DEC_SPCL_PRN(0xc1) ffffffff8000436a: be c1 00 00 00 mov $0xc1,%esi ffffffff8000436f: 48 89 df mov %rbx,%rdi ffffffff80004372: ff d0 call *%rax ffffffff80004374: e9 1e ed ff ff jmp ffffffff80003097 case 'u': FLANTERM_DEC_SPCL_PRN(0xb4) ffffffff80004379: be b4 00 00 00 mov $0xb4,%esi ffffffff8000437e: 48 89 df mov %rbx,%rdi ffffffff80004381: ff d0 call *%rax ffffffff80004383: e9 0f ed ff ff jmp ffffffff80003097 case 't': FLANTERM_DEC_SPCL_PRN(0xc3) ffffffff80004388: be c3 00 00 00 mov $0xc3,%esi ffffffff8000438d: 48 89 df mov %rbx,%rdi ffffffff80004390: ff d0 call *%rax ffffffff80004392: e9 00 ed ff ff jmp ffffffff80003097 case 's': FLANTERM_DEC_SPCL_PRN(0x5f) ffffffff80004397: be 5f 00 00 00 mov $0x5f,%esi ffffffff8000439c: 48 89 df mov %rbx,%rdi ffffffff8000439f: ff d0 call *%rax ffffffff800043a1: e9 f1 ec ff ff jmp ffffffff80003097 case 'q': FLANTERM_DEC_SPCL_PRN(0xc4) ffffffff800043a6: be c4 00 00 00 mov $0xc4,%esi ffffffff800043ab: 48 89 df mov %rbx,%rdi ffffffff800043ae: ff d0 call *%rax ffffffff800043b0: e9 e2 ec ff ff jmp ffffffff80003097 case 'n': FLANTERM_DEC_SPCL_PRN(0xc5) ffffffff800043b5: be c5 00 00 00 mov $0xc5,%esi ffffffff800043ba: 48 89 df mov %rbx,%rdi ffffffff800043bd: ff d0 call *%rax ffffffff800043bf: e9 d3 ec ff ff jmp ffffffff80003097 case 'm': FLANTERM_DEC_SPCL_PRN(0xc0) ffffffff800043c4: be c0 00 00 00 mov $0xc0,%esi ffffffff800043c9: 48 89 df mov %rbx,%rdi ffffffff800043cc: ff d0 call *%rax ffffffff800043ce: e9 c4 ec ff ff jmp ffffffff80003097 case 'l': FLANTERM_DEC_SPCL_PRN(0xda) ffffffff800043d3: be da 00 00 00 mov $0xda,%esi ffffffff800043d8: 48 89 df mov %rbx,%rdi ffffffff800043db: ff d0 call *%rax ffffffff800043dd: e9 b5 ec ff ff jmp ffffffff80003097 case 'k': FLANTERM_DEC_SPCL_PRN(0xbf) ffffffff800043e2: be bf 00 00 00 mov $0xbf,%esi ffffffff800043e7: 48 89 df mov %rbx,%rdi ffffffff800043ea: ff d0 call *%rax ffffffff800043ec: e9 a6 ec ff ff jmp ffffffff80003097 case 'j': FLANTERM_DEC_SPCL_PRN(0xd9) ffffffff800043f1: be d9 00 00 00 mov $0xd9,%esi ffffffff800043f6: 48 89 df mov %rbx,%rdi ffffffff800043f9: ff d0 call *%rax ffffffff800043fb: e9 97 ec ff ff jmp ffffffff80003097 case 'h': FLANTERM_DEC_SPCL_PRN(0xb0) ffffffff80004400: be b0 00 00 00 mov $0xb0,%esi ffffffff80004405: 48 89 df mov %rbx,%rdi ffffffff80004408: ff d0 call *%rax ffffffff8000440a: e9 88 ec ff ff jmp ffffffff80003097 case 'g': FLANTERM_DEC_SPCL_PRN(0xf1) ffffffff8000440f: be f1 00 00 00 mov $0xf1,%esi ffffffff80004414: 48 89 df mov %rbx,%rdi ffffffff80004417: ff d0 call *%rax ffffffff80004419: e9 79 ec ff ff jmp ffffffff80003097 case 'f': FLANTERM_DEC_SPCL_PRN(0xf8) ffffffff8000441e: be f8 00 00 00 mov $0xf8,%esi ffffffff80004423: 48 89 df mov %rbx,%rdi ffffffff80004426: ff d0 call *%rax ffffffff80004428: e9 6a ec ff ff jmp ffffffff80003097 case 'a': FLANTERM_DEC_SPCL_PRN(0xb1) ffffffff8000442d: be b1 00 00 00 mov $0xb1,%esi ffffffff80004432: 48 89 df mov %rbx,%rdi ffffffff80004435: ff d0 call *%rax ffffffff80004437: e9 5b ec ff ff jmp ffffffff80003097 case '`': FLANTERM_DEC_SPCL_PRN(0x04) ffffffff8000443c: be 04 00 00 00 mov $0x4,%esi ffffffff80004441: 48 89 df mov %rbx,%rdi ffffffff80004444: ff d0 call *%rax ffffffff80004446: e9 4c ec ff ff jmp ffffffff80003097 case '_': FLANTERM_DEC_SPCL_PRN(0xff) ffffffff8000444b: be ff 00 00 00 mov $0xff,%esi ffffffff80004450: 48 89 df mov %rbx,%rdi ffffffff80004453: ff d0 call *%rax ffffffff80004455: e9 3d ec ff ff jmp ffffffff80003097 case '0': FLANTERM_DEC_SPCL_PRN(0xdb) ffffffff8000445a: be db 00 00 00 mov $0xdb,%esi ffffffff8000445f: 48 89 df mov %rbx,%rdi ffffffff80004462: ff d0 call *%rax ffffffff80004464: e9 2e ec ff ff jmp ffffffff80003097 case '.': FLANTERM_DEC_SPCL_PRN(0x19) ffffffff80004469: be 19 00 00 00 mov $0x19,%esi ffffffff8000446e: 48 89 df mov %rbx,%rdi ffffffff80004471: ff d0 call *%rax ffffffff80004473: e9 1f ec ff ff jmp ffffffff80003097 case '-': FLANTERM_DEC_SPCL_PRN(0x18) ffffffff80004478: be 18 00 00 00 mov $0x18,%esi ffffffff8000447d: 48 89 df mov %rbx,%rdi ffffffff80004480: ff d0 call *%rax ffffffff80004482: e9 10 ec ff ff jmp ffffffff80003097 case ',': FLANTERM_DEC_SPCL_PRN(0x1b) ffffffff80004487: be 1b 00 00 00 mov $0x1b,%esi ffffffff8000448c: 48 89 df mov %rbx,%rdi ffffffff8000448f: ff d0 call *%rax ffffffff80004491: e9 01 ec ff ff jmp ffffffff80003097 case '+': FLANTERM_DEC_SPCL_PRN(0x1a) ffffffff80004496: be 1a 00 00 00 mov $0x1a,%esi ffffffff8000449b: 48 89 df mov %rbx,%rdi ffffffff8000449e: ff d0 call *%rax ffffffff800044a0: e9 f2 eb ff ff jmp ffffffff80003097 size_t count = ctx->esc_values[0] > ctx->rows ? ctx->rows : ctx->esc_values[0]; ffffffff800044a5: 44 8b 63 78 mov 0x78(%rbx),%r12d ffffffff800044a9: 48 8b 83 e0 00 00 00 mov 0xe0(%rbx),%rax ffffffff800044b0: 49 39 c4 cmp %rax,%r12 ffffffff800044b3: 4c 0f 47 e0 cmova %rax,%r12 for (size_t i = 0; i < count; i++) { ffffffff800044b7: 4d 85 e4 test %r12,%r12 ffffffff800044ba: 0f 84 9e fa ff ff je ffffffff80003f5e ffffffff800044c0: 45 31 ff xor %r15d,%r15d ffffffff800044c3: 49 83 c7 01 add $0x1,%r15 ctx->scroll(ctx); ffffffff800044c7: 48 89 df mov %rbx,%rdi ffffffff800044ca: ff 93 68 01 00 00 call *0x168(%rbx) for (size_t i = 0; i < count; i++) { ffffffff800044d0: 4d 39 fc cmp %r15,%r12 ffffffff800044d3: 75 ee jne ffffffff800044c3 ffffffff800044d5: e9 84 fa ff ff jmp ffffffff80003f5e ctx->scroll_top_margin = y; ffffffff800044da: 48 8b 44 24 18 mov 0x18(%rsp),%rax size_t count = ctx->esc_values[0] > ctx->rows ? ctx->rows : ctx->esc_values[0]; ffffffff800044df: 44 8b 63 78 mov 0x78(%rbx),%r12d size_t old_scroll_top_margin = ctx->scroll_top_margin; ffffffff800044e3: 48 8b 53 68 mov 0x68(%rbx),%rdx ctx->scroll_top_margin = y; ffffffff800044e7: 48 89 43 68 mov %rax,0x68(%rbx) size_t count = ctx->esc_values[0] > ctx->rows ? ctx->rows : ctx->esc_values[0]; ffffffff800044eb: 48 8b 83 e0 00 00 00 mov 0xe0(%rbx),%rax ffffffff800044f2: 49 39 c4 cmp %rax,%r12 ffffffff800044f5: 4c 0f 47 e0 cmova %rax,%r12 for (size_t i = 0; i < count; i++) { ffffffff800044f9: 45 31 ff xor %r15d,%r15d ffffffff800044fc: 4d 85 e4 test %r12,%r12 ffffffff800044ff: 74 1c je ffffffff8000451d ffffffff80004501: 49 83 c7 01 add $0x1,%r15 ffffffff80004505: 48 89 54 24 08 mov %rdx,0x8(%rsp) ctx->revscroll(ctx); ffffffff8000450a: 48 89 df mov %rbx,%rdi ffffffff8000450d: ff 93 70 01 00 00 call *0x170(%rbx) for (size_t i = 0; i < count; i++) { ffffffff80004513: 4d 39 fc cmp %r15,%r12 ffffffff80004516: 48 8b 54 24 08 mov 0x8(%rsp),%rdx ffffffff8000451b: 75 e4 jne ffffffff80004501 ctx->scroll_top_margin = old_scroll_top_margin; ffffffff8000451d: 48 89 53 68 mov %rdx,0x68(%rbx) break; ffffffff80004521: e9 38 fa ff ff jmp ffffffff80003f5e switch (ctx->esc_values[0]) { ffffffff80004526: 8b 43 78 mov 0x78(%rbx),%eax ffffffff80004529: 83 f8 01 cmp $0x1,%eax ffffffff8000452c: 74 69 je ffffffff80004597 ffffffff8000452e: 83 f8 02 cmp $0x2,%eax ffffffff80004531: 74 2f je ffffffff80004562 ffffffff80004533: 85 c0 test %eax,%eax ffffffff80004535: 0f 85 23 fa ff ff jne ffffffff80003f5e for (size_t i = x; i < ctx->cols; i++) ffffffff8000453b: 4c 8b 64 24 10 mov 0x10(%rsp),%r12 ffffffff80004540: eb 12 jmp ffffffff80004554 ctx->raw_putchar(ctx, ' '); ffffffff80004542: be 20 00 00 00 mov $0x20,%esi ffffffff80004547: 48 89 df mov %rbx,%rdi for (size_t i = x; i < ctx->cols; i++) ffffffff8000454a: 49 83 c4 01 add $0x1,%r12 ctx->raw_putchar(ctx, ' '); ffffffff8000454e: ff 93 f0 00 00 00 call *0xf0(%rbx) for (size_t i = x; i < ctx->cols; i++) ffffffff80004554: 4c 3b a3 e8 00 00 00 cmp 0xe8(%rbx),%r12 ffffffff8000455b: 72 e5 jb ffffffff80004542 ffffffff8000455d: e9 23 fd ff ff jmp ffffffff80004285 ctx->set_cursor_pos(ctx, 0, y); ffffffff80004562: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff80004567: 31 f6 xor %esi,%esi ffffffff80004569: 48 89 df mov %rbx,%rdi for (size_t i = 0; i < ctx->cols; i++) ffffffff8000456c: 45 31 e4 xor %r12d,%r12d ctx->set_cursor_pos(ctx, 0, y); ffffffff8000456f: ff 93 00 01 00 00 call *0x100(%rbx) for (size_t i = 0; i < ctx->cols; i++) ffffffff80004575: eb 12 jmp ffffffff80004589 ctx->raw_putchar(ctx, ' '); ffffffff80004577: be 20 00 00 00 mov $0x20,%esi ffffffff8000457c: 48 89 df mov %rbx,%rdi for (size_t i = 0; i < ctx->cols; i++) ffffffff8000457f: 49 83 c4 01 add $0x1,%r12 ctx->raw_putchar(ctx, ' '); ffffffff80004583: ff 93 f0 00 00 00 call *0xf0(%rbx) for (size_t i = 0; i < ctx->cols; i++) ffffffff80004589: 4c 3b a3 e8 00 00 00 cmp 0xe8(%rbx),%r12 ffffffff80004590: 72 e5 jb ffffffff80004577 ffffffff80004592: e9 ee fc ff ff jmp ffffffff80004285 ctx->set_cursor_pos(ctx, 0, y); ffffffff80004597: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff8000459c: 31 f6 xor %esi,%esi ffffffff8000459e: 48 89 df mov %rbx,%rdi for (size_t i = 0; i < x; i++) ffffffff800045a1: 45 31 e4 xor %r12d,%r12d ctx->set_cursor_pos(ctx, 0, y); ffffffff800045a4: ff 93 00 01 00 00 call *0x100(%rbx) for (size_t i = 0; i < x; i++) ffffffff800045aa: eb 12 jmp ffffffff800045be ctx->raw_putchar(ctx, ' '); ffffffff800045ac: be 20 00 00 00 mov $0x20,%esi ffffffff800045b1: 48 89 df mov %rbx,%rdi for (size_t i = 0; i < x; i++) ffffffff800045b4: 49 83 c4 01 add $0x1,%r12 ctx->raw_putchar(ctx, ' '); ffffffff800045b8: ff 93 f0 00 00 00 call *0xf0(%rbx) for (size_t i = 0; i < x; i++) ffffffff800045be: 4c 3b 64 24 10 cmp 0x10(%rsp),%r12 ffffffff800045c3: 72 e7 jb ffffffff800045ac ffffffff800045c5: e9 94 f9 ff ff jmp ffffffff80003f5e switch (ctx->esc_values[0]) { ffffffff800045ca: 8b 43 78 mov 0x78(%rbx),%eax ffffffff800045cd: 83 f8 01 cmp $0x1,%eax ffffffff800045d0: 0f 84 b3 00 00 00 je ffffffff80004689 ffffffff800045d6: 0f 87 91 00 00 00 ja ffffffff8000466d size_t cols_diff = ctx->cols - (x + 1); ffffffff800045dc: 48 8b 83 e8 00 00 00 mov 0xe8(%rbx),%rax size_t rows_remaining = ctx->rows - (y + 1); ffffffff800045e3: 4c 8b a3 e0 00 00 00 mov 0xe0(%rbx),%r12 for (size_t i = 0; i < to_clear; i++) { ffffffff800045ea: 45 31 ff xor %r15d,%r15d size_t rows_remaining = ctx->rows - (y + 1); ffffffff800045ed: 4c 2b 64 24 18 sub 0x18(%rsp),%r12 ffffffff800045f2: 49 83 ec 01 sub $0x1,%r12 size_t to_clear = rows_remaining * ctx->cols + cols_diff + 1; ffffffff800045f6: 4c 0f af e0 imul %rax,%r12 ffffffff800045fa: 48 2b 44 24 10 sub 0x10(%rsp),%rax ffffffff800045ff: 49 01 c4 add %rax,%r12 for (size_t i = 0; i < to_clear; i++) { ffffffff80004602: eb 12 jmp ffffffff80004616 ctx->raw_putchar(ctx, ' '); ffffffff80004604: be 20 00 00 00 mov $0x20,%esi ffffffff80004609: 48 89 df mov %rbx,%rdi for (size_t i = 0; i < to_clear; i++) { ffffffff8000460c: 49 83 c7 01 add $0x1,%r15 ctx->raw_putchar(ctx, ' '); ffffffff80004610: ff 93 f0 00 00 00 call *0xf0(%rbx) for (size_t i = 0; i < to_clear; i++) { ffffffff80004616: 4d 39 fc cmp %r15,%r12 ffffffff80004619: 75 e9 jne ffffffff80004604 ffffffff8000461b: e9 65 fc ff ff jmp ffffffff80004285 if (ctx->esc_values[0] != 0) { ffffffff80004620: 8b 43 78 mov 0x78(%rbx),%eax ffffffff80004623: 85 c0 test %eax,%eax ffffffff80004625: 74 06 je ffffffff8000462d ctx->esc_values[0]--; ffffffff80004627: 83 e8 01 sub $0x1,%eax ffffffff8000462a: 89 43 78 mov %eax,0x78(%rbx) if (ctx->esc_values[1] != 0) { ffffffff8000462d: 8b 43 7c mov 0x7c(%rbx),%eax ffffffff80004630: 85 c0 test %eax,%eax ffffffff80004632: 74 06 je ffffffff8000463a ctx->esc_values[1]--; ffffffff80004634: 83 e8 01 sub $0x1,%eax ffffffff80004637: 89 43 7c mov %eax,0x7c(%rbx) if (ctx->esc_values[1] >= ctx->cols) ffffffff8000463a: 48 8b 83 e8 00 00 00 mov 0xe8(%rbx),%rax ffffffff80004641: 8b 73 7c mov 0x7c(%rbx),%esi ffffffff80004644: 48 39 c6 cmp %rax,%rsi ffffffff80004647: 72 06 jb ffffffff8000464f ctx->esc_values[1] = ctx->cols - 1; ffffffff80004649: 8d 70 ff lea -0x1(%rax),%esi ffffffff8000464c: 89 73 7c mov %esi,0x7c(%rbx) if (ctx->esc_values[0] >= ctx->rows) ffffffff8000464f: 48 8b 83 e0 00 00 00 mov 0xe0(%rbx),%rax ffffffff80004656: 8b 53 78 mov 0x78(%rbx),%edx ffffffff80004659: 48 39 c2 cmp %rax,%rdx ffffffff8000465c: 0f 82 f3 f8 ff ff jb ffffffff80003f55 ctx->esc_values[0] = ctx->rows - 1; ffffffff80004662: 8d 50 ff lea -0x1(%rax),%edx ffffffff80004665: 89 53 78 mov %edx,0x78(%rbx) ctx->set_cursor_pos(ctx, ctx->esc_values[1], ctx->esc_values[0]); ffffffff80004668: e9 e8 f8 ff ff jmp ffffffff80003f55 switch (ctx->esc_values[0]) { ffffffff8000466d: 83 e8 02 sub $0x2,%eax ffffffff80004670: 83 f8 01 cmp $0x1,%eax ffffffff80004673: 0f 87 e5 f8 ff ff ja ffffffff80003f5e ctx->clear(ctx, false); ffffffff80004679: 31 f6 xor %esi,%esi ffffffff8000467b: 48 89 df mov %rbx,%rdi ffffffff8000467e: ff 93 f8 00 00 00 call *0xf8(%rbx) break; ffffffff80004684: e9 d5 f8 ff ff jmp ffffffff80003f5e ctx->set_cursor_pos(ctx, 0, 0); ffffffff80004689: 31 d2 xor %edx,%edx ffffffff8000468b: 31 f6 xor %esi,%esi ffffffff8000468d: 48 89 df mov %rbx,%rdi for (size_t yc = 0; yc < ctx->rows; yc++) { ffffffff80004690: 45 31 ff xor %r15d,%r15d ctx->set_cursor_pos(ctx, 0, 0); ffffffff80004693: ff 93 00 01 00 00 call *0x100(%rbx) for (size_t yc = 0; yc < ctx->rows; yc++) { ffffffff80004699: 4c 3b bb e0 00 00 00 cmp 0xe0(%rbx),%r15 ffffffff800046a0: 0f 83 b8 f8 ff ff jae ffffffff80003f5e for (size_t xc = 0; xc < ctx->cols; xc++) { ffffffff800046a6: 45 31 e4 xor %r12d,%r12d ffffffff800046a9: 48 83 bb e8 00 00 00 cmpq $0x0,0xe8(%rbx) ffffffff800046b0: 00 ffffffff800046b1: 75 12 jne ffffffff800046c5 ffffffff800046b3: eb 40 jmp ffffffff800046f5 ffffffff800046b5: 0f 1f 00 nopl (%rax) ffffffff800046b8: 49 83 c4 01 add $0x1,%r12 ffffffff800046bc: 4c 3b a3 e8 00 00 00 cmp 0xe8(%rbx),%r12 ffffffff800046c3: 73 30 jae ffffffff800046f5 ctx->raw_putchar(ctx, ' '); ffffffff800046c5: be 20 00 00 00 mov $0x20,%esi ffffffff800046ca: 48 89 df mov %rbx,%rdi ffffffff800046cd: ff 93 f0 00 00 00 call *0xf0(%rbx) if (xc == x && yc == y) { ffffffff800046d3: 4c 39 64 24 10 cmp %r12,0x10(%rsp) ffffffff800046d8: 75 de jne ffffffff800046b8 ffffffff800046da: 4c 39 7c 24 18 cmp %r15,0x18(%rsp) ffffffff800046df: 75 d7 jne ffffffff800046b8 ctx->set_cursor_pos(ctx, x, y); ffffffff800046e1: 4c 89 fa mov %r15,%rdx ffffffff800046e4: 4c 89 e6 mov %r12,%rsi ffffffff800046e7: 48 89 df mov %rbx,%rdi ffffffff800046ea: ff 93 00 01 00 00 call *0x100(%rbx) if (b == true) ffffffff800046f0: e9 69 f8 ff ff jmp ffffffff80003f5e for (size_t yc = 0; yc < ctx->rows; yc++) { ffffffff800046f5: 49 83 c7 01 add $0x1,%r15 ffffffff800046f9: eb 9e jmp ffffffff80004699 if (will_be_in_scroll_region && dest_y < ctx->scroll_top_margin) { ffffffff800046fb: 48 39 d0 cmp %rdx,%rax ffffffff800046fe: 48 0f 42 c2 cmovb %rdx,%rax ffffffff80004702: e9 da fb ff ff jmp ffffffff800042e1 case 0x221e: return 236; ffffffff80004707: be ec 00 00 00 mov $0xec,%esi ffffffff8000470c: e9 5f ef ff ff jmp ffffffff80003670 if (ctx->dec_private == true) { ffffffff80004711: 40 84 f6 test %sil,%sil ffffffff80004714: 0f 84 b8 f7 ff ff je ffffffff80003ed2 ctx->dec_private = false; ffffffff8000471a: c6 43 14 00 movb $0x0,0x14(%rbx) if (ctx->esc_values_i == 0) { ffffffff8000471e: e9 a4 fa ff ff jmp ffffffff800041c7 ctx->cursor_enabled = false; ffffffff80004723: c6 43 09 00 movb $0x0,0x9(%rbx) ffffffff80004727: e9 36 f8 ff ff jmp ffffffff80003f62 dest_y = ctx->scroll_bottom_margin - 1; ffffffff8000472c: 48 8d 50 ff lea -0x1(%rax),%rdx ctx->set_cursor_pos(ctx, x, dest_y); ffffffff80004730: e9 1b f8 ff ff jmp ffffffff80003f50 for (size_t i = ctx->cols - 1; ; i--) { ffffffff80004735: 48 8b 83 e8 00 00 00 mov 0xe8(%rbx),%rax ffffffff8000473c: 4c 8d 60 ff lea -0x1(%rax),%r12 ffffffff80004740: eb 04 jmp ffffffff80004746 ffffffff80004742: 49 83 ec 01 sub $0x1,%r12 ctx->move_character(ctx, i + ctx->esc_values[0], y, i, y); ffffffff80004746: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff8000474b: 8b 73 78 mov 0x78(%rbx),%esi ffffffff8000474e: 4c 89 e1 mov %r12,%rcx ffffffff80004751: 48 89 df mov %rbx,%rdi ffffffff80004754: 4c 01 e6 add %r12,%rsi ffffffff80004757: 49 89 d0 mov %rdx,%r8 ffffffff8000475a: ff 93 60 01 00 00 call *0x160(%rbx) ctx->set_cursor_pos(ctx, i, y); ffffffff80004760: 4c 89 e6 mov %r12,%rsi ffffffff80004763: 48 89 df mov %rbx,%rdi ffffffff80004766: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff8000476b: ff 93 00 01 00 00 call *0x100(%rbx) ctx->raw_putchar(ctx, ' '); ffffffff80004771: be 20 00 00 00 mov $0x20,%esi ffffffff80004776: 48 89 df mov %rbx,%rdi ffffffff80004779: ff 93 f0 00 00 00 call *0xf0(%rbx) if (i == x) { ffffffff8000477f: 4c 3b 64 24 10 cmp 0x10(%rsp),%r12 ffffffff80004784: 75 bc jne ffffffff80004742 ctx->set_cursor_pos(ctx, x, y); ffffffff80004786: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff8000478b: 4c 89 e6 mov %r12,%rsi ffffffff8000478e: 48 89 df mov %rbx,%rdi ffffffff80004791: ff 93 00 01 00 00 call *0x100(%rbx) break; ffffffff80004797: e9 c2 f7 ff ff jmp ffffffff80003f5e if (ctx->esc_values_i == 0) { ffffffff8000479c: 48 8b 53 40 mov 0x40(%rbx),%rdx ffffffff800047a0: 48 85 d2 test %rdx,%rdx ffffffff800047a3: 0f 84 b5 f7 ff ff je ffffffff80003f5e if (ctx->callback != NULL) { ffffffff800047a9: 48 8b 83 a8 01 00 00 mov 0x1a8(%rbx),%rax ffffffff800047b0: 48 85 c0 test %rax,%rax ffffffff800047b3: 0f 84 a5 f7 ff ff je ffffffff80003f5e ctx->callback(ctx, FLANTERM_CB_LINUX, ctx->esc_values_i, (uintptr_t)ctx->esc_values, 0); ffffffff800047b9: 48 8d 4b 78 lea 0x78(%rbx),%rcx ffffffff800047bd: 45 31 c0 xor %r8d,%r8d ffffffff800047c0: be 50 00 00 00 mov $0x50,%esi ffffffff800047c5: 48 89 df mov %rbx,%rdi ffffffff800047c8: ff d0 call *%rax ffffffff800047ca: e9 8f f7 ff ff jmp ffffffff80003f5e if (x + ctx->esc_values[0] > ctx->cols - 1) ffffffff800047cf: 48 8b 4c 24 10 mov 0x10(%rsp),%rcx ffffffff800047d4: 48 8b 83 e8 00 00 00 mov 0xe8(%rbx),%rax ffffffff800047db: 8b 53 78 mov 0x78(%rbx),%edx ffffffff800047de: 48 8d 78 ff lea -0x1(%rax),%rdi ffffffff800047e2: 48 8d 34 0a lea (%rdx,%rcx,1),%rsi ffffffff800047e6: 48 39 f7 cmp %rsi,%rdi ffffffff800047e9: 73 08 jae ffffffff800047f3 ctx->esc_values[0] = (ctx->cols - 1) - x; ffffffff800047eb: 29 c8 sub %ecx,%eax ffffffff800047ed: 8d 50 ff lea -0x1(%rax),%edx ffffffff800047f0: 89 53 78 mov %edx,0x78(%rbx) ctx->set_cursor_pos(ctx, x + ctx->esc_values[0], y); ffffffff800047f3: 48 8d 34 0a lea (%rdx,%rcx,1),%rsi ffffffff800047f7: 48 89 df mov %rbx,%rdi ffffffff800047fa: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff800047ff: ff 93 00 01 00 00 call *0x100(%rbx) break; ffffffff80004805: e9 54 f7 ff ff jmp ffffffff80003f5e ctx->esc_values[0] -= 1; ffffffff8000480a: 8b 43 78 mov 0x78(%rbx),%eax if (ctx->esc_values[0] >= ctx->cols) ffffffff8000480d: 48 8b 93 e8 00 00 00 mov 0xe8(%rbx),%rdx ctx->esc_values[0] -= 1; ffffffff80004814: 83 e8 01 sub $0x1,%eax ffffffff80004817: 89 43 78 mov %eax,0x78(%rbx) if (ctx->esc_values[0] >= ctx->cols) ffffffff8000481a: 48 39 d0 cmp %rdx,%rax ffffffff8000481d: 72 06 jb ffffffff80004825 ctx->esc_values[0] = ctx->cols - 1; ffffffff8000481f: 83 ea 01 sub $0x1,%edx ffffffff80004822: 89 53 78 mov %edx,0x78(%rbx) ctx->set_cursor_pos(ctx, ctx->esc_values[0], y); ffffffff80004825: 8b 73 78 mov 0x78(%rbx),%esi ffffffff80004828: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff8000482d: 48 89 df mov %rbx,%rdi ffffffff80004830: ff 93 00 01 00 00 call *0x100(%rbx) break; ffffffff80004836: e9 23 f7 ff ff jmp ffffffff80003f5e if (ctx->esc_values[0] > x) ffffffff8000483b: 48 8b 44 24 10 mov 0x10(%rsp),%rax ffffffff80004840: 8b 53 78 mov 0x78(%rbx),%edx ffffffff80004843: 48 39 d0 cmp %rdx,%rax ffffffff80004846: 73 05 jae ffffffff8000484d ctx->esc_values[0] = x; ffffffff80004848: 89 43 78 mov %eax,0x78(%rbx) ffffffff8000484b: 89 c2 mov %eax,%edx ctx->set_cursor_pos(ctx, x - ctx->esc_values[0], y); ffffffff8000484d: 48 29 d0 sub %rdx,%rax ffffffff80004850: 48 89 df mov %rbx,%rdi ffffffff80004853: 48 8b 54 24 18 mov 0x18(%rsp),%rdx ffffffff80004858: 48 89 c6 mov %rax,%rsi ffffffff8000485b: ff 93 00 01 00 00 call *0x100(%rbx) break; ffffffff80004861: e9 f8 f6 ff ff jmp ffffffff80003f5e if (ctx->dec_private == true) { ffffffff80004866: 40 84 f6 test %sil,%sil ffffffff80004869: 0f 84 63 f6 ff ff je ffffffff80003ed2 ctx->dec_private = false; ffffffff8000486f: c6 43 14 00 movb $0x0,0x14(%rbx) ffffffff80004873: e9 ea f6 ff ff jmp ffffffff80003f62 switch (ctx->esc_values[0]) { ffffffff80004878: 8b 43 78 mov 0x78(%rbx),%eax ffffffff8000487b: 83 f8 05 cmp $0x5,%eax ffffffff8000487e: 74 53 je ffffffff800048d3 ffffffff80004880: 83 f8 06 cmp $0x6,%eax ffffffff80004883: 0f 85 d5 f6 ff ff jne ffffffff80003f5e if (ctx->callback != NULL) { ffffffff80004889: 48 8b 83 a8 01 00 00 mov 0x1a8(%rbx),%rax ffffffff80004890: 48 85 c0 test %rax,%rax ffffffff80004893: 0f 84 c5 f6 ff ff je ffffffff80003f5e ctx->callback(ctx, FLANTERM_CB_POS_REPORT, x + 1, y + 1, 0); ffffffff80004899: 48 8b 7c 24 10 mov 0x10(%rsp),%rdi ffffffff8000489e: 48 8b 4c 24 18 mov 0x18(%rsp),%rcx ffffffff800048a3: 45 31 c0 xor %r8d,%r8d ffffffff800048a6: be 32 00 00 00 mov $0x32,%esi ffffffff800048ab: 48 8d 57 01 lea 0x1(%rdi),%rdx ffffffff800048af: 48 83 c1 01 add $0x1,%rcx ffffffff800048b3: 48 89 df mov %rbx,%rdi ffffffff800048b6: ff d0 call *%rax ffffffff800048b8: e9 a1 f6 ff ff jmp ffffffff80003f5e ctx->set_cursor_pos(ctx, ctx->saved_cursor_x, ctx->saved_cursor_y); ffffffff800048bd: 48 8b 53 50 mov 0x50(%rbx),%rdx ffffffff800048c1: 48 8b 73 48 mov 0x48(%rbx),%rsi ffffffff800048c5: 48 89 df mov %rbx,%rdi ffffffff800048c8: ff 93 00 01 00 00 call *0x100(%rbx) break; ffffffff800048ce: e9 8b f6 ff ff jmp ffffffff80003f5e if (ctx->callback != NULL) { ffffffff800048d3: 48 8b 83 a8 01 00 00 mov 0x1a8(%rbx),%rax ffffffff800048da: 48 85 c0 test %rax,%rax ffffffff800048dd: 0f 84 7b f6 ff ff je ffffffff80003f5e ctx->callback(ctx, FLANTERM_CB_STATUS_REPORT, 0, 0, 0); ffffffff800048e3: 45 31 c0 xor %r8d,%r8d ffffffff800048e6: 31 c9 xor %ecx,%ecx ffffffff800048e8: 31 d2 xor %edx,%edx ffffffff800048ea: be 28 00 00 00 mov $0x28,%esi ffffffff800048ef: 48 89 df mov %rbx,%rdi ffffffff800048f2: ff d0 call *%rax ffffffff800048f4: e9 65 f6 ff ff jmp ffffffff80003f5e ctx->get_cursor_pos(ctx, &ctx->saved_cursor_x, &ctx->saved_cursor_y); ffffffff800048f9: 48 8d 53 50 lea 0x50(%rbx),%rdx ffffffff800048fd: 48 8d 73 48 lea 0x48(%rbx),%rsi ffffffff80004901: 48 89 df mov %rbx,%rdi ffffffff80004904: ff 93 08 01 00 00 call *0x108(%rbx) break; ffffffff8000490a: e9 4f f6 ff ff jmp ffffffff80003f5e if (ctx->esc_values[0] == 0) { ffffffff8000490f: 83 7b 78 00 cmpl $0x0,0x78(%rbx) ffffffff80004913: 75 07 jne ffffffff8000491c ctx->esc_values[0] = 1; ffffffff80004915: c7 43 78 01 00 00 00 movl $0x1,0x78(%rbx) if (ctx->esc_values[1] == 0) { ffffffff8000491c: 83 7b 7c 00 cmpl $0x0,0x7c(%rbx) ffffffff80004920: 75 07 jne ffffffff80004929 ctx->esc_values[1] = 1; ffffffff80004922: c7 43 7c 01 00 00 00 movl $0x1,0x7c(%rbx) ctx->scroll_bottom_margin = ctx->rows; ffffffff80004929: 48 8b 93 e0 00 00 00 mov 0xe0(%rbx),%rdx if (ctx->esc_values_i > 0) { ffffffff80004930: 48 8b 43 40 mov 0x40(%rbx),%rax ctx->scroll_top_margin = 0; ffffffff80004934: 31 f6 xor %esi,%esi ffffffff80004936: 48 89 73 68 mov %rsi,0x68(%rbx) ctx->scroll_bottom_margin = ctx->rows; ffffffff8000493a: 48 89 53 70 mov %rdx,0x70(%rbx) if (ctx->esc_values_i > 0) { ffffffff8000493e: 48 85 c0 test %rax,%rax ffffffff80004941: 74 3d je ffffffff80004980 ctx->scroll_top_margin = ctx->esc_values[0] - 1; ffffffff80004943: 8b 4b 78 mov 0x78(%rbx),%ecx ffffffff80004946: 83 e9 01 sub $0x1,%ecx if (ctx->esc_values_i > 1) { ffffffff80004949: 48 83 e8 01 sub $0x1,%rax ctx->scroll_top_margin = ctx->esc_values[0] - 1; ffffffff8000494d: 48 89 4b 68 mov %rcx,0x68(%rbx) if (ctx->esc_values_i > 1) { ffffffff80004951: 74 2d je ffffffff80004980 ctx->scroll_bottom_margin = ctx->esc_values[1]; ffffffff80004953: 8b 43 7c mov 0x7c(%rbx),%eax ffffffff80004956: 48 89 43 70 mov %rax,0x70(%rbx) if (ctx->scroll_top_margin >= ctx->rows ffffffff8000495a: 48 39 d1 cmp %rdx,%rcx ffffffff8000495d: 73 05 jae ffffffff80004964 || ctx->scroll_bottom_margin > ctx->rows ffffffff8000495f: 48 39 c2 cmp %rax,%rdx ffffffff80004962: 73 28 jae ffffffff8000498c ctx->scroll_top_margin = 0; ffffffff80004964: 31 c9 xor %ecx,%ecx ctx->scroll_bottom_margin = ctx->rows; ffffffff80004966: 48 89 53 70 mov %rdx,0x70(%rbx) ctx->scroll_top_margin = 0; ffffffff8000496a: 48 89 4b 68 mov %rcx,0x68(%rbx) ctx->set_cursor_pos(ctx, 0, 0); ffffffff8000496e: 31 d2 xor %edx,%edx ffffffff80004970: 31 f6 xor %esi,%esi ffffffff80004972: 48 89 df mov %rbx,%rdi ffffffff80004975: ff 93 00 01 00 00 call *0x100(%rbx) break; ffffffff8000497b: e9 de f5 ff ff jmp ffffffff80003f5e if (ctx->scroll_top_margin >= ctx->rows ffffffff80004980: 48 8b 4b 68 mov 0x68(%rbx),%rcx || ctx->scroll_bottom_margin > ctx->rows ffffffff80004984: 48 89 d0 mov %rdx,%rax if (ctx->scroll_top_margin >= ctx->rows ffffffff80004987: 48 39 d1 cmp %rdx,%rcx ffffffff8000498a: 73 d8 jae ffffffff80004964 || ctx->scroll_top_margin >= (ctx->scroll_bottom_margin - 1)) { ffffffff8000498c: 48 83 e8 01 sub $0x1,%rax ffffffff80004990: 48 39 c1 cmp %rax,%rcx ffffffff80004993: 73 cf jae ffffffff80004964 ffffffff80004995: eb d7 jmp ffffffff8000496e if (!ctx->esc_values_i) ffffffff80004997: 4c 8b 63 40 mov 0x40(%rbx),%r12 ffffffff8000499b: 4d 85 e4 test %r12,%r12 ffffffff8000499e: 0f 84 c8 00 00 00 je ffffffff80004a6c for (; i < ctx->esc_values_i; i++) { ffffffff800049a4: 4c 89 e6 mov %r12,%rsi size_t i = 0; ffffffff800049a7: 45 31 e4 xor %r12d,%r12d if (ctx->esc_values[i] == 0) { ffffffff800049aa: 4a 8d 0c a3 lea (%rbx,%r12,4),%rcx ffffffff800049ae: 8b 51 78 mov 0x78(%rcx),%edx ffffffff800049b1: 83 fa 6b cmp $0x6b,%edx ffffffff800049b4: 77 71 ja ffffffff80004a27 ffffffff800049b6: 89 d0 mov %edx,%eax ffffffff800049b8: 3e ff 24 c5 e8 9d 00 notrack jmp *-0x7fff6218(,%rax,8) ffffffff800049bf: 80 if (ctx->esc_values_i == 0) { ffffffff800049c0: 48 8b 53 40 mov 0x40(%rbx),%rdx ffffffff800049c4: 48 85 d2 test %rdx,%rdx ffffffff800049c7: 0f 84 91 f5 ff ff je ffffffff80003f5e switch (c) { ffffffff800049cd: 41 80 fc 68 cmp $0x68,%r12b ffffffff800049d1: 0f 94 c0 sete %al switch (ctx->esc_values[0]) { ffffffff800049d4: 83 7b 78 04 cmpl $0x4,0x78(%rbx) ffffffff800049d8: 0f 84 86 00 00 00 je ffffffff80004a64 if (ctx->callback != NULL) { ffffffff800049de: 48 8b 83 a8 01 00 00 mov 0x1a8(%rbx),%rax ffffffff800049e5: 48 85 c0 test %rax,%rax ffffffff800049e8: 0f 84 70 f5 ff ff je ffffffff80003f5e ctx->callback(ctx, FLANTERM_CB_MODE, ctx->esc_values_i, (uintptr_t)ctx->esc_values, c); ffffffff800049ee: 48 8d 4b 78 lea 0x78(%rbx),%rcx ffffffff800049f2: 4d 0f be c4 movsbq %r12b,%r8 ffffffff800049f6: be 46 00 00 00 mov $0x46,%esi ffffffff800049fb: 48 89 df mov %rbx,%rdi ffffffff800049fe: ff d0 call *%rax ffffffff80004a00: e9 59 f5 ff ff jmp ffffffff80003f5e ctx->current_bg = ctx->esc_values[i] - offset; ffffffff80004a05: 48 8d 50 9c lea -0x64(%rax),%rdx if (ctx->reverse_video) { ffffffff80004a09: 80 7b 13 00 cmpb $0x0,0x13(%rbx) ctx->current_bg = ctx->esc_values[i] - offset; ffffffff80004a0d: 48 89 53 60 mov %rdx,0x60(%rbx) offset = 100; ffffffff80004a11: ba 64 00 00 00 mov $0x64,%edx if (ctx->reverse_video) { ffffffff80004a16: 75 3b jne ffffffff80004a53 ctx->set_text_bg_bright(ctx, ctx->esc_values[i] - offset); ffffffff80004a18: 48 29 d0 sub %rdx,%rax ffffffff80004a1b: 48 89 df mov %rbx,%rdi ffffffff80004a1e: 48 89 c6 mov %rax,%rsi ffffffff80004a21: ff 93 28 01 00 00 call *0x128(%rbx) continue; ffffffff80004a27: 4d 89 e7 mov %r12,%r15 for (; i < ctx->esc_values_i; i++) { ffffffff80004a2a: 48 8b 73 40 mov 0x40(%rbx),%rsi ffffffff80004a2e: 4d 8d 67 01 lea 0x1(%r15),%r12 ffffffff80004a32: 49 39 f4 cmp %rsi,%r12 ffffffff80004a35: 0f 83 23 f5 ff ff jae ffffffff80003f5e ffffffff80004a3b: e9 6a ff ff ff jmp ffffffff800049aa ctx->current_primary = ctx->esc_values[i] - offset; ffffffff80004a40: 48 8d 50 a6 lea -0x5a(%rax),%rdx if (ctx->reverse_video) { ffffffff80004a44: 80 7b 13 00 cmpb $0x0,0x13(%rbx) ctx->current_primary = ctx->esc_values[i] - offset; ffffffff80004a48: 48 89 53 58 mov %rdx,0x58(%rbx) offset = 90; ffffffff80004a4c: ba 5a 00 00 00 mov $0x5a,%edx if (ctx->reverse_video) { ffffffff80004a51: 75 c5 jne ffffffff80004a18 ctx->set_text_fg_bright(ctx, ctx->esc_values[i] - offset); ffffffff80004a53: 48 29 d0 sub %rdx,%rax ffffffff80004a56: 48 89 df mov %rbx,%rdi ffffffff80004a59: 48 89 c6 mov %rax,%rsi ffffffff80004a5c: ff 93 20 01 00 00 call *0x120(%rbx) continue; ffffffff80004a62: eb c3 jmp ffffffff80004a27 ctx->insert_mode = set; return; ffffffff80004a64: 88 43 15 mov %al,0x15(%rbx) ffffffff80004a67: e9 f2 f4 ff ff jmp ffffffff80003f5e if (ctx->reverse_video) { ffffffff80004a6c: 80 7b 13 00 cmpb $0x0,0x13(%rbx) ffffffff80004a70: 74 0d je ffffffff80004a7f ctx->reverse_video = false; ffffffff80004a72: c6 43 13 00 movb $0x0,0x13(%rbx) ctx->swap_palette(ctx); ffffffff80004a76: 48 89 df mov %rbx,%rdi ffffffff80004a79: ff 93 78 01 00 00 call *0x178(%rbx) ctx->set_text_bg_default(ctx); ffffffff80004a7f: 48 89 df mov %rbx,%rdi ctx->bold = false; ffffffff80004a82: 66 c7 43 11 00 00 movw $0x0,0x11(%rbx) continue; ffffffff80004a88: 4d 89 e7 mov %r12,%r15 ctx->current_primary = (size_t)-1; ffffffff80004a8b: 48 c7 43 58 ff ff ff movq $0xffffffffffffffff,0x58(%rbx) ffffffff80004a92: ff ctx->current_bg = (size_t)-1; ffffffff80004a93: 48 c7 43 60 ff ff ff movq $0xffffffffffffffff,0x60(%rbx) ffffffff80004a9a: ff ctx->set_text_bg_default(ctx); ffffffff80004a9b: ff 93 48 01 00 00 call *0x148(%rbx) ctx->set_text_fg_default(ctx); ffffffff80004aa1: 48 89 df mov %rbx,%rdi ffffffff80004aa4: ff 93 40 01 00 00 call *0x140(%rbx) continue; ffffffff80004aaa: e9 7b ff ff ff jmp ffffffff80004a2a ctx->esc_values[0] -= 1; ffffffff80004aaf: 8b 43 78 mov 0x78(%rbx),%eax if (ctx->esc_values[0] >= ctx->rows) ffffffff80004ab2: 48 8b 93 e0 00 00 00 mov 0xe0(%rbx),%rdx ctx->esc_values[0] -= 1; ffffffff80004ab9: 83 e8 01 sub $0x1,%eax ffffffff80004abc: 89 43 78 mov %eax,0x78(%rbx) if (ctx->esc_values[0] >= ctx->rows) ffffffff80004abf: 48 39 d0 cmp %rdx,%rax ffffffff80004ac2: 72 06 jb ffffffff80004aca ctx->esc_values[0] = ctx->rows - 1; ffffffff80004ac4: 83 ea 01 sub $0x1,%edx ffffffff80004ac7: 89 53 78 mov %edx,0x78(%rbx) ctx->set_cursor_pos(ctx, x, ctx->esc_values[0]); ffffffff80004aca: 8b 53 78 mov 0x78(%rbx),%edx ffffffff80004acd: e9 7e f4 ff ff jmp ffffffff80003f50 if (ctx->callback != NULL) { ffffffff80004ad2: 48 8b 83 a8 01 00 00 mov 0x1a8(%rbx),%rax ffffffff80004ad9: 48 85 c0 test %rax,%rax ffffffff80004adc: 0f 84 7c f4 ff ff je ffffffff80003f5e ctx->callback(ctx, FLANTERM_CB_PRIVATE_ID, 0, 0, 0); ffffffff80004ae2: 45 31 c0 xor %r8d,%r8d ffffffff80004ae5: 31 c9 xor %ecx,%ecx ffffffff80004ae7: 31 d2 xor %edx,%edx ffffffff80004ae9: be 1e 00 00 00 mov $0x1e,%esi ffffffff80004aee: 48 89 df mov %rbx,%rdi ffffffff80004af1: ff d0 call *%rax ffffffff80004af3: e9 66 f4 ff ff jmp ffffffff80003f5e if (ctx->reverse_video) { ffffffff80004af8: 80 7b 13 00 cmpb $0x0,0x13(%rbx) ctx->current_bg = (size_t)-1; ffffffff80004afc: 48 c7 43 60 ff ff ff movq $0xffffffffffffffff,0x60(%rbx) ffffffff80004b03: ff if (ctx->reverse_video) { ffffffff80004b04: 74 09 je ffffffff80004b0f ctx->swap_palette(ctx); ffffffff80004b06: 48 89 df mov %rbx,%rdi ffffffff80004b09: ff 93 78 01 00 00 call *0x178(%rbx) if (!ctx->bg_bold) { ffffffff80004b0f: 80 7b 12 00 cmpb $0x0,0x12(%rbx) ctx->set_text_bg_default(ctx); ffffffff80004b13: 48 89 df mov %rbx,%rdi if (!ctx->bg_bold) { ffffffff80004b16: 75 77 jne ffffffff80004b8f ctx->set_text_bg_default(ctx); ffffffff80004b18: ff 93 48 01 00 00 call *0x148(%rbx) if (ctx->reverse_video) { ffffffff80004b1e: 80 7b 13 00 cmpb $0x0,0x13(%rbx) ffffffff80004b22: 0f 84 ff fe ff ff je ffffffff80004a27 ctx->swap_palette(ctx); ffffffff80004b28: 48 89 df mov %rbx,%rdi ffffffff80004b2b: ff 93 78 01 00 00 call *0x178(%rbx) ffffffff80004b31: e9 f1 fe ff ff jmp ffffffff80004a27 ctx->current_bg = ctx->esc_values[i] - offset; ffffffff80004b36: 48 8d 50 d8 lea -0x28(%rax),%rdx if (ctx->reverse_video) { ffffffff80004b3a: 80 7b 13 00 cmpb $0x0,0x13(%rbx) ctx->current_bg = ctx->esc_values[i] - offset; ffffffff80004b3e: 48 89 53 60 mov %rdx,0x60(%rbx) if (ctx->reverse_video) { ffffffff80004b42: 75 53 jne ffffffff80004b97 || (ctx->bg_bold && !ctx->reverse_video)) { ffffffff80004b44: 80 7b 12 00 cmpb $0x0,0x12(%rbx) ffffffff80004b48: ba 28 00 00 00 mov $0x28,%edx ffffffff80004b4d: 0f 85 c5 fe ff ff jne ffffffff80004a18 ctx->set_text_bg(ctx, ctx->esc_values[i] - offset); ffffffff80004b53: 48 29 d0 sub %rdx,%rax ffffffff80004b56: 48 89 df mov %rbx,%rdi ffffffff80004b59: 48 89 c6 mov %rax,%rsi ffffffff80004b5c: ff 93 18 01 00 00 call *0x118(%rbx) ffffffff80004b62: e9 c0 fe ff ff jmp ffffffff80004a27 if (ctx->reverse_video) { ffffffff80004b67: 80 7b 13 00 cmpb $0x0,0x13(%rbx) ctx->current_primary = (size_t)-1; ffffffff80004b6b: 48 c7 43 58 ff ff ff movq $0xffffffffffffffff,0x58(%rbx) ffffffff80004b72: ff if (ctx->reverse_video) { ffffffff80004b73: 74 09 je ffffffff80004b7e ctx->swap_palette(ctx); ffffffff80004b75: 48 89 df mov %rbx,%rdi ffffffff80004b78: ff 93 78 01 00 00 call *0x178(%rbx) if (!ctx->bold) { ffffffff80004b7e: 80 7b 11 00 cmpb $0x0,0x11(%rbx) ctx->set_text_fg_default(ctx); ffffffff80004b82: 48 89 df mov %rbx,%rdi if (!ctx->bold) { ffffffff80004b85: 75 33 jne ffffffff80004bba ctx->set_text_fg_default(ctx); ffffffff80004b87: ff 93 40 01 00 00 call *0x140(%rbx) ffffffff80004b8d: eb 8f jmp ffffffff80004b1e ctx->set_text_bg_default_bright(ctx); ffffffff80004b8f: ff 93 58 01 00 00 call *0x158(%rbx) ffffffff80004b95: eb 87 jmp ffffffff80004b1e || (ctx->bg_bold && ctx->reverse_video)) { ffffffff80004b97: 80 7b 12 00 cmpb $0x0,0x12(%rbx) ffffffff80004b9b: ba 28 00 00 00 mov $0x28,%edx ffffffff80004ba0: 0f 85 ad fe ff ff jne ffffffff80004a53 ctx->set_text_fg(ctx, ctx->esc_values[i] - offset); ffffffff80004ba6: 48 29 d0 sub %rdx,%rax ffffffff80004ba9: 48 89 df mov %rbx,%rdi ffffffff80004bac: 48 89 c6 mov %rax,%rsi ffffffff80004baf: ff 93 10 01 00 00 call *0x110(%rbx) ffffffff80004bb5: e9 6d fe ff ff jmp ffffffff80004a27 ctx->set_text_fg_default_bright(ctx); ffffffff80004bba: ff 93 50 01 00 00 call *0x150(%rbx) if (ctx->reverse_video) { ffffffff80004bc0: e9 59 ff ff ff jmp ffffffff80004b1e if (ctx->current_primary != (size_t)-1) { ffffffff80004bc5: 48 8b 73 58 mov 0x58(%rbx),%rsi if (!ctx->reverse_video) { ffffffff80004bc9: 0f b6 43 13 movzbl 0x13(%rbx),%eax ctx->bold = false; ffffffff80004bcd: c6 43 11 00 movb $0x0,0x11(%rbx) ctx->set_text_fg(ctx, ctx->current_primary); ffffffff80004bd1: 48 89 df mov %rbx,%rdi if (ctx->current_primary != (size_t)-1) { ffffffff80004bd4: 48 83 fe ff cmp $0xffffffffffffffff,%rsi ffffffff80004bd8: 74 26 je ffffffff80004c00 if (!ctx->reverse_video) { ffffffff80004bda: 84 c0 test %al,%al ffffffff80004bdc: 0f 85 7a ff ff ff jne ffffffff80004b5c ffffffff80004be2: eb cb jmp ffffffff80004baf if (!ctx->reverse_video) { ffffffff80004be4: 80 7b 13 00 cmpb $0x0,0x13(%rbx) ffffffff80004be8: 0f 85 39 fe ff ff jne ffffffff80004a27 ctx->reverse_video = true; ffffffff80004bee: c6 43 13 01 movb $0x1,0x13(%rbx) ctx->swap_palette(ctx); ffffffff80004bf2: 48 89 df mov %rbx,%rdi ffffffff80004bf5: ff 93 78 01 00 00 call *0x178(%rbx) ffffffff80004bfb: e9 27 fe ff ff jmp ffffffff80004a27 if (!ctx->reverse_video) { ffffffff80004c00: 84 c0 test %al,%al ffffffff80004c02: 75 53 jne ffffffff80004c57 ctx->set_text_fg_default(ctx); ffffffff80004c04: ff 93 40 01 00 00 call *0x140(%rbx) ffffffff80004c0a: e9 18 fe ff ff jmp ffffffff80004a27 if (ctx->current_bg != (size_t)-1) { ffffffff80004c0f: 48 8b 73 60 mov 0x60(%rbx),%rsi if (!ctx->reverse_video) { ffffffff80004c13: 0f b6 43 13 movzbl 0x13(%rbx),%eax ctx->bg_bold = true; ffffffff80004c17: c6 43 12 01 movb $0x1,0x12(%rbx) ctx->set_text_bg_bright(ctx, ctx->current_bg); ffffffff80004c1b: 48 89 df mov %rbx,%rdi if (ctx->current_bg != (size_t)-1) { ffffffff80004c1e: 48 83 fe ff cmp $0xffffffffffffffff,%rsi ffffffff80004c22: 74 3e je ffffffff80004c62 if (!ctx->reverse_video) { ffffffff80004c24: 84 c0 test %al,%al ffffffff80004c26: 0f 85 30 fe ff ff jne ffffffff80004a5c ffffffff80004c2c: e9 f0 fd ff ff jmp ffffffff80004a21 if (ctx->current_primary != (size_t)-1) { ffffffff80004c31: 48 8b 73 58 mov 0x58(%rbx),%rsi if (!ctx->reverse_video) { ffffffff80004c35: 0f b6 43 13 movzbl 0x13(%rbx),%eax ctx->bold = true; ffffffff80004c39: c6 43 11 01 movb $0x1,0x11(%rbx) ctx->set_text_fg_bright(ctx, ctx->current_primary); ffffffff80004c3d: 48 89 df mov %rbx,%rdi if (ctx->current_primary != (size_t)-1) { ffffffff80004c40: 48 83 fe ff cmp $0xffffffffffffffff,%rsi ffffffff80004c44: 74 2b je ffffffff80004c71 if (!ctx->reverse_video) { ffffffff80004c46: 84 c0 test %al,%al ffffffff80004c48: 0f 85 d3 fd ff ff jne ffffffff80004a21 ffffffff80004c4e: e9 09 fe ff ff jmp ffffffff80004a5c if (!ctx->reverse_video) { ffffffff80004c53: 84 c0 test %al,%al ffffffff80004c55: 75 ad jne ffffffff80004c04 ctx->set_text_bg_default(ctx); ffffffff80004c57: ff 93 48 01 00 00 call *0x148(%rbx) ffffffff80004c5d: e9 c5 fd ff ff jmp ffffffff80004a27 if (!ctx->reverse_video) { ffffffff80004c62: 84 c0 test %al,%al ffffffff80004c64: 75 0f jne ffffffff80004c75 ctx->set_text_bg_default_bright(ctx); ffffffff80004c66: ff 93 58 01 00 00 call *0x158(%rbx) ffffffff80004c6c: e9 b6 fd ff ff jmp ffffffff80004a27 if (!ctx->reverse_video) { ffffffff80004c71: 84 c0 test %al,%al ffffffff80004c73: 75 f1 jne ffffffff80004c66 ctx->set_text_fg_default_bright(ctx); ffffffff80004c75: ff 93 50 01 00 00 call *0x150(%rbx) ffffffff80004c7b: e9 a7 fd ff ff jmp ffffffff80004a27 i++; ffffffff80004c80: 4d 8d 7c 24 01 lea 0x1(%r12),%r15 if (i >= ctx->esc_values_i) { ffffffff80004c85: 49 39 f7 cmp %rsi,%r15 ffffffff80004c88: 0f 83 d0 f2 ff ff jae ffffffff80003f5e switch (ctx->esc_values[i]) { ffffffff80004c8e: 8b 41 7c mov 0x7c(%rcx),%eax ffffffff80004c91: 83 f8 02 cmp $0x2,%eax ffffffff80004c94: 0f 84 a3 00 00 00 je ffffffff80004d3d ffffffff80004c9a: 83 f8 05 cmp $0x5,%eax ffffffff80004c9d: 0f 85 87 fd ff ff jne ffffffff80004a2a if (i + 1 >= ctx->esc_values_i) { ffffffff80004ca3: 4d 8d 7c 24 02 lea 0x2(%r12),%r15 ffffffff80004ca8: 49 39 f7 cmp %rsi,%r15 ffffffff80004cab: 0f 83 ad f2 ff ff jae ffffffff80003f5e uint32_t col = ctx->esc_values[i + 1]; ffffffff80004cb1: 8b 81 80 00 00 00 mov 0x80(%rcx),%eax if (col < 8) { ffffffff80004cb7: 83 f8 07 cmp $0x7,%eax ffffffff80004cba: 77 46 ja ffffffff80004d02 (fg ? ctx->set_text_fg : ctx->set_text_bg)(ctx, col); ffffffff80004cbc: 48 8b 8b 18 01 00 00 mov 0x118(%rbx),%rcx ffffffff80004cc3: 83 fa 26 cmp $0x26,%edx ffffffff80004cc6: 89 c6 mov %eax,%esi ffffffff80004cc8: 48 89 df mov %rbx,%rdi ffffffff80004ccb: 48 0f 44 8b 10 01 00 cmove 0x110(%rbx),%rcx ffffffff80004cd2: 00 ffffffff80004cd3: ff d1 call *%rcx ffffffff80004cd5: e9 50 fd ff ff jmp ffffffff80004a2a ctx->current_primary = ctx->esc_values[i] - offset; ffffffff80004cda: 48 8d 50 e2 lea -0x1e(%rax),%rdx if (ctx->reverse_video) { ffffffff80004cde: 80 7b 13 00 cmpb $0x0,0x13(%rbx) if ((ctx->bold && ctx->reverse_video) ffffffff80004ce2: 0f b6 4b 11 movzbl 0x11(%rbx),%ecx ctx->current_primary = ctx->esc_values[i] - offset; ffffffff80004ce6: 48 89 53 58 mov %rdx,0x58(%rbx) if (ctx->reverse_video) { ffffffff80004cea: 0f 85 91 00 00 00 jne ffffffff80004d81 offset = 30; ffffffff80004cf0: ba 1e 00 00 00 mov $0x1e,%edx if ((ctx->bold && !ctx->reverse_video) ffffffff80004cf5: 84 c9 test %cl,%cl ffffffff80004cf7: 0f 84 a9 fe ff ff je ffffffff80004ba6 ffffffff80004cfd: e9 51 fd ff ff jmp ffffffff80004a53 } else if (col < 16) { ffffffff80004d02: 83 f8 0f cmp $0xf,%eax ffffffff80004d05: 0f 87 ae 00 00 00 ja ffffffff80004db9 (fg ? ctx->set_text_fg_bright : ctx->set_text_bg_bright)(ctx, col - 8); ffffffff80004d0b: 48 8b 8b 28 01 00 00 mov 0x128(%rbx),%rcx ffffffff80004d12: 83 fa 26 cmp $0x26,%edx ffffffff80004d15: 8d 70 f8 lea -0x8(%rax),%esi ffffffff80004d18: 48 89 df mov %rbx,%rdi ffffffff80004d1b: 48 0f 44 8b 20 01 00 cmove 0x120(%rbx),%rcx ffffffff80004d22: 00 ffffffff80004d23: ff d1 call *%rcx ffffffff80004d25: e9 00 fd ff ff jmp ffffffff80004a2a if (ctx->reverse_video) { ffffffff80004d2a: 80 7b 13 00 cmpb $0x0,0x13(%rbx) ffffffff80004d2e: 0f 84 f3 fc ff ff je ffffffff80004a27 ctx->reverse_video = false; ffffffff80004d34: c6 43 13 00 movb $0x0,0x13(%rbx) ffffffff80004d38: e9 eb fd ff ff jmp ffffffff80004b28 if (i + 3 >= ctx->esc_values_i) { ffffffff80004d3d: 4d 8d 7c 24 04 lea 0x4(%r12),%r15 ffffffff80004d42: 49 39 f7 cmp %rsi,%r15 ffffffff80004d45: 0f 83 13 f2 ff ff jae ffffffff80003f5e rgb_value |= ctx->esc_values[i + 1] << 16; ffffffff80004d4b: 8b b1 80 00 00 00 mov 0x80(%rcx),%esi rgb_value |= ctx->esc_values[i + 2] << 8; ffffffff80004d51: 8b 81 84 00 00 00 mov 0x84(%rcx),%eax rgb_value |= ctx->esc_values[i + 1] << 16; ffffffff80004d57: c1 e6 10 shl $0x10,%esi rgb_value |= ctx->esc_values[i + 2] << 8; ffffffff80004d5a: c1 e0 08 shl $0x8,%eax ffffffff80004d5d: 09 c6 or %eax,%esi rgb_value |= ctx->esc_values[i + 3]; ffffffff80004d5f: 0b b1 88 00 00 00 or 0x88(%rcx),%esi (fg ? ctx->set_text_fg_rgb : ctx->set_text_bg_rgb)(ctx, rgb_value); ffffffff80004d65: 48 8b 83 38 01 00 00 mov 0x138(%rbx),%rax ffffffff80004d6c: 83 fa 26 cmp $0x26,%edx ffffffff80004d6f: 48 89 df mov %rbx,%rdi ffffffff80004d72: 48 0f 44 83 30 01 00 cmove 0x130(%rbx),%rax ffffffff80004d79: 00 ffffffff80004d7a: ff d0 call *%rax ffffffff80004d7c: e9 a9 fc ff ff jmp ffffffff80004a2a offset = 30; ffffffff80004d81: ba 1e 00 00 00 mov $0x1e,%edx if ((ctx->bold && ctx->reverse_video) ffffffff80004d86: 84 c9 test %cl,%cl ffffffff80004d88: 0f 85 8a fc ff ff jne ffffffff80004a18 ffffffff80004d8e: e9 c0 fd ff ff jmp ffffffff80004b53 if (ctx->current_bg != (size_t)-1) { ffffffff80004d93: 48 8b 73 60 mov 0x60(%rbx),%rsi if (!ctx->reverse_video) { ffffffff80004d97: 0f b6 43 13 movzbl 0x13(%rbx),%eax ctx->bg_bold = false; ffffffff80004d9b: c6 43 12 00 movb $0x0,0x12(%rbx) ctx->set_text_bg(ctx, ctx->current_bg); ffffffff80004d9f: 48 89 df mov %rbx,%rdi if (ctx->current_bg != (size_t)-1) { ffffffff80004da2: 48 83 fe ff cmp $0xffffffffffffffff,%rsi ffffffff80004da6: 0f 84 a7 fe ff ff je ffffffff80004c53 if (!ctx->reverse_video) { ffffffff80004dac: 84 c0 test %al,%al ffffffff80004dae: 0f 85 fb fd ff ff jne ffffffff80004baf ffffffff80004db4: e9 a3 fd ff ff jmp ffffffff80004b5c } else if (col < 256) { ffffffff80004db9: 3d ff 00 00 00 cmp $0xff,%eax ffffffff80004dbe: 0f 87 66 fc ff ff ja ffffffff80004a2a uint32_t rgb_value = col256[col - 16]; ffffffff80004dc4: 83 e8 10 sub $0x10,%eax ffffffff80004dc7: 8b 34 85 e0 a5 00 80 mov -0x7fff5a20(,%rax,4),%esi ffffffff80004dce: eb 95 jmp ffffffff80004d65 ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_>: ffffffff80004dd0: f3 0f 1e fa endbr64 ffffffff80004dd4: 55 push %rbp ffffffff80004dd5: 48 89 f5 mov %rsi,%rbp ffffffff80004dd8: 53 push %rbx ffffffff80004dd9: 48 89 fb mov %rdi,%rbx #if defined (__x86_64__) ffffffff80004ddc: 48 c7 c7 a2 a9 00 80 mov $0xffffffff8000a9a2,%rdi ffffffff80004de3: 48 83 ec 08 sub $0x8,%rsp #if defined (__x86_64__) ffffffff80004de7: e8 94 21 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff80004dec: 48 89 ef mov %rbp,%rdi ffffffff80004def: e8 8c 21 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff80004df4: 48 c7 c7 aa a9 00 80 mov $0xffffffff8000a9aa,%rdi ffffffff80004dfb: e8 80 21 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff80004e00: 48 83 c4 08 add $0x8,%rsp ffffffff80004e04: 48 89 d8 mov %rbx,%rax ffffffff80004e07: 5b pop %rbx ffffffff80004e08: 5d pop %rbp ffffffff80004e09: c3 ret ffffffff80004e0a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) ffffffff80004e10 <_ZN2KtlsIhEERNS_17KernelErrorStreamES2_T_>: ffffffff80004e10: f3 0f 1e fa endbr64 ffffffff80004e14: 55 push %rbp ffffffff80004e15: 48 89 fd mov %rdi,%rbp #if defined (__x86_64__) ffffffff80004e18: 48 c7 c7 a2 a9 00 80 mov $0xffffffff8000a9a2,%rdi ffffffff80004e1f: 53 push %rbx ffffffff80004e20: 89 f3 mov %esi,%ebx ffffffff80004e22: 48 83 ec 08 sub $0x8,%rsp #if defined (__x86_64__) ffffffff80004e26: e8 55 21 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff80004e2b: 8b 35 c7 62 00 00 mov 0x62c7(%rip),%esi # ffffffff8000b0f8 ffffffff80004e31: 0f b6 fb movzbl %bl,%edi ffffffff80004e34: e8 67 1a 00 00 call ffffffff800068a0 <_ZN3Lib11int2basestrEim> ffffffff80004e39: 48 89 c7 mov %rax,%rdi ffffffff80004e3c: e8 3f 21 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> #if defined (__x86_64__) ffffffff80004e41: 48 c7 c7 aa a9 00 80 mov $0xffffffff8000a9aa,%rdi ffffffff80004e48: e8 33 21 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff80004e4d: 48 83 c4 08 add $0x8,%rsp ffffffff80004e51: 48 89 e8 mov %rbp,%rax ffffffff80004e54: 5b pop %rbx ffffffff80004e55: 5d pop %rbp ffffffff80004e56: c3 ret ffffffff80004e57: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80004e5e: 00 00 ffffffff80004e60 <_ZN2KtlsImEERNS_17KernelErrorStreamES2_T_>: ffffffff80004e60: f3 0f 1e fa endbr64 ffffffff80004e64: 55 push %rbp ffffffff80004e65: 48 89 f5 mov %rsi,%rbp ffffffff80004e68: 53 push %rbx ffffffff80004e69: 48 89 fb mov %rdi,%rbx #if defined (__x86_64__) ffffffff80004e6c: 48 c7 c7 a2 a9 00 80 mov $0xffffffff8000a9a2,%rdi ffffffff80004e73: 48 83 ec 08 sub $0x8,%rsp #if defined (__x86_64__) ffffffff80004e77: e8 04 21 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff80004e7c: 8b 35 76 62 00 00 mov 0x6276(%rip),%esi # ffffffff8000b0f8 ffffffff80004e82: 48 89 ef mov %rbp,%rdi ffffffff80004e85: e8 26 1b 00 00 call ffffffff800069b0 <_ZN3Lib13u64_2_basestrEmm> ffffffff80004e8a: 48 89 c7 mov %rax,%rdi ffffffff80004e8d: e8 ee 20 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> #if defined (__x86_64__) ffffffff80004e92: 48 c7 c7 aa a9 00 80 mov $0xffffffff8000a9aa,%rdi ffffffff80004e99: e8 e2 20 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff80004e9e: 48 83 c4 08 add $0x8,%rsp ffffffff80004ea2: 48 89 d8 mov %rbx,%rax ffffffff80004ea5: 5b pop %rbx ffffffff80004ea6: 5d pop %rbp ffffffff80004ea7: c3 ret ffffffff80004ea8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) ffffffff80004eaf: 00 ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE>: void Panic(const char *meditationString, System::PanicFrame* frame) { ffffffff80004eb0: f3 0f 1e fa endbr64 ffffffff80004eb4: 41 54 push %r12 ffffffff80004eb6: 55 push %rbp ffffffff80004eb7: 48 89 fd mov %rdi,%rbp kerr << "\nGuru Meditation" << "\n" << "\n"; ffffffff80004eba: 48 c7 c7 c0 07 0e 80 mov $0xffffffff800e07c0,%rdi void Panic(const char *meditationString, System::PanicFrame* frame) { ffffffff80004ec1: 53 push %rbx ffffffff80004ec2: 48 89 f3 mov %rsi,%rbx kerr << "\nGuru Meditation" << "\n" << "\n"; ffffffff80004ec5: 48 c7 c6 af a9 00 80 mov $0xffffffff8000a9af,%rsi ffffffff80004ecc: e8 ff fe ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80004ed1: 48 c7 c6 c0 a9 00 80 mov $0xffffffff8000a9c0,%rsi ffffffff80004ed8: 48 89 c7 mov %rax,%rdi ffffffff80004edb: e8 f0 fe ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80004ee0: 48 c7 c6 c0 a9 00 80 mov $0xffffffff8000a9c0,%rsi ffffffff80004ee7: 48 89 c7 mov %rax,%rdi ffffffff80004eea: e8 e1 fe ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "MeditationString: " << meditationString << Kt::newline; ffffffff80004eef: 48 c7 c6 c2 a9 00 80 mov $0xffffffff8000a9c2,%rsi ffffffff80004ef6: 48 c7 c7 c0 07 0e 80 mov $0xffffffff800e07c0,%rdi ffffffff80004efd: e8 ce fe ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80004f02: 48 c7 c6 c4 a9 00 80 mov $0xffffffff8000a9c4,%rsi ffffffff80004f09: 48 89 c7 mov %rax,%rdi ffffffff80004f0c: e8 bf fe ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80004f11: 48 89 ee mov %rbp,%rsi ffffffff80004f14: 48 89 c7 mov %rax,%rdi ffffffff80004f17: e8 b4 fe ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> base streamBaseType = base::dec; // C++ streaming operator like cout friend KernelOutStream &operator<<(KernelOutStream &t, const char *string) { Print(string); ffffffff80004f1c: 48 c7 c7 a2 a9 00 80 mov $0xffffffff8000a9a2,%rdi ffffffff80004f23: e8 58 20 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> } // C++ streaming operator like cout friend KernelOutStream &operator<<(KernelOutStream &t, const char chr) { Putchar(chr); ffffffff80004f28: bf 0a 00 00 00 mov $0xa,%edi ffffffff80004f2d: e8 1e 20 00 00 call ffffffff80006f50 <_ZN2Kt7PutcharEc> Print(string); ffffffff80004f32: 48 c7 c7 aa a9 00 80 mov $0xffffffff8000a9aa,%rdi ffffffff80004f39: e8 42 20 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> if (frame != nullptr) { ffffffff80004f3e: 48 85 db test %rbx,%rbx ffffffff80004f41: 0f 84 b9 02 00 00 je ffffffff80005200 <_Z5PanicPKcPN6System10PanicFrameE+0x350> kerr << "\t" << "InterruptVector: " << "0x" << base::hex << frame->InterruptVector << "\n"; ffffffff80004f47: 48 c7 c6 c2 a9 00 80 mov $0xffffffff8000a9c2,%rsi ffffffff80004f4e: 48 c7 c7 c0 07 0e 80 mov $0xffffffff800e07c0,%rdi ffffffff80004f55: e8 76 fe ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80004f5a: 48 c7 c6 d7 a9 00 80 mov $0xffffffff8000a9d7,%rsi ffffffff80004f61: 48 89 c7 mov %rax,%rdi ffffffff80004f64: e8 67 fe ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80004f69: 48 c7 c6 04 ad 00 80 mov $0xffffffff8000ad04,%rsi ffffffff80004f70: 48 89 c7 mov %rax,%rdi ffffffff80004f73: e8 58 fe ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80004f78: 48 c7 c7 a2 a9 00 80 mov $0xffffffff8000a9a2,%rdi ffffffff80004f7f: 48 89 c5 mov %rax,%rbp ffffffff80004f82: e8 f9 1f 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff80004f87: 48 c7 c7 aa a9 00 80 mov $0xffffffff8000a9aa,%rdi return t; } friend KernelOutStream &operator<<(KernelOutStream &t, base newBase) { t.streamBaseType = newBase; ffffffff80004f8e: c7 05 60 61 00 00 10 movl $0x10,0x6160(%rip) # ffffffff8000b0f8 ffffffff80004f95: 00 00 00 Print(string); ffffffff80004f98: e8 e3 1f 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff80004f9d: 0f b6 73 28 movzbl 0x28(%rbx),%esi ffffffff80004fa1: 48 89 ef mov %rbp,%rdi ffffffff80004fa4: e8 67 fe ff ff call ffffffff80004e10 <_ZN2KtlsIhEERNS_17KernelErrorStreamES2_T_> ffffffff80004fa9: 48 c7 c6 c0 a9 00 80 mov $0xffffffff8000a9c0,%rsi ffffffff80004fb0: 48 89 c7 mov %rax,%rdi ffffffff80004fb3: e8 18 fe ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> if (frame->InterruptVector == 0xE) { // In case of #PF the CPU pushes an error code to the frame ffffffff80004fb8: 0f b6 43 28 movzbl 0x28(%rbx),%eax ffffffff80004fbc: 3c 0e cmp $0xe,%al ffffffff80004fbe: 0f 84 40 02 00 00 je ffffffff80005204 <_Z5PanicPKcPN6System10PanicFrameE+0x354> else if (frame->InterruptVector == 0xD) { ffffffff80004fc4: 3c 0d cmp $0xd,%al ffffffff80004fc6: 0f 84 7f 05 00 00 je ffffffff8000554b <_Z5PanicPKcPN6System10PanicFrameE+0x69b> kerr << "\t" << "InstructionPointer: " << "0x" << base::hex << frame->IP << "\n"; ffffffff80004fcc: 48 c7 c6 c2 a9 00 80 mov $0xffffffff8000a9c2,%rsi ffffffff80004fd3: 48 c7 c7 c0 07 0e 80 mov $0xffffffff800e07c0,%rdi ffffffff80004fda: e8 f1 fd ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80004fdf: 48 c7 c6 9d aa 00 80 mov $0xffffffff8000aa9d,%rsi ffffffff80004fe6: 48 89 c7 mov %rax,%rdi ffffffff80004fe9: e8 e2 fd ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80004fee: 48 c7 c6 04 ad 00 80 mov $0xffffffff8000ad04,%rsi ffffffff80004ff5: 48 89 c7 mov %rax,%rdi ffffffff80004ff8: e8 d3 fd ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80004ffd: 48 c7 c7 a2 a9 00 80 mov $0xffffffff8000a9a2,%rdi ffffffff80005004: 48 89 c5 mov %rax,%rbp ffffffff80005007: e8 74 1f 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff8000500c: 48 c7 c7 aa a9 00 80 mov $0xffffffff8000a9aa,%rdi t.streamBaseType = newBase; ffffffff80005013: c7 05 db 60 00 00 10 movl $0x10,0x60db(%rip) # ffffffff8000b0f8 ffffffff8000501a: 00 00 00 Print(string); ffffffff8000501d: e8 5e 1f 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff80005022: 48 8b 33 mov (%rbx),%rsi ffffffff80005025: 48 89 ef mov %rbp,%rdi ffffffff80005028: e8 33 fe ff ff call ffffffff80004e60 <_ZN2KtlsImEERNS_17KernelErrorStreamES2_T_> ffffffff8000502d: 48 c7 c6 c0 a9 00 80 mov $0xffffffff8000a9c0,%rsi ffffffff80005034: 48 89 c7 mov %rax,%rdi ffffffff80005037: e8 94 fd ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "CodeSegment: " << "0x" << base::hex << frame->CS << "\n"; ffffffff8000503c: 48 c7 c6 c2 a9 00 80 mov $0xffffffff8000a9c2,%rsi ffffffff80005043: 48 c7 c7 c0 07 0e 80 mov $0xffffffff800e07c0,%rdi ffffffff8000504a: e8 81 fd ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000504f: 48 c7 c6 b2 aa 00 80 mov $0xffffffff8000aab2,%rsi ffffffff80005056: 48 89 c7 mov %rax,%rdi ffffffff80005059: e8 72 fd ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000505e: 48 c7 c6 04 ad 00 80 mov $0xffffffff8000ad04,%rsi ffffffff80005065: 48 89 c7 mov %rax,%rdi ffffffff80005068: e8 63 fd ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000506d: 48 c7 c7 a2 a9 00 80 mov $0xffffffff8000a9a2,%rdi ffffffff80005074: 48 89 c5 mov %rax,%rbp ffffffff80005077: e8 04 1f 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff8000507c: 48 c7 c7 aa a9 00 80 mov $0xffffffff8000a9aa,%rdi t.streamBaseType = newBase; ffffffff80005083: c7 05 6b 60 00 00 10 movl $0x10,0x606b(%rip) # ffffffff8000b0f8 ffffffff8000508a: 00 00 00 Print(string); ffffffff8000508d: e8 ee 1e 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff80005092: 48 8b 73 08 mov 0x8(%rbx),%rsi ffffffff80005096: 48 89 ef mov %rbp,%rdi ffffffff80005099: e8 c2 fd ff ff call ffffffff80004e60 <_ZN2KtlsImEERNS_17KernelErrorStreamES2_T_> ffffffff8000509e: 48 c7 c6 c0 a9 00 80 mov $0xffffffff8000a9c0,%rsi ffffffff800050a5: 48 89 c7 mov %rax,%rdi ffffffff800050a8: e8 23 fd ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "Flags: " << "0x" << base::hex << frame->Flags << "\n"; ffffffff800050ad: 48 c7 c6 c2 a9 00 80 mov $0xffffffff8000a9c2,%rsi ffffffff800050b4: 48 c7 c7 c0 07 0e 80 mov $0xffffffff800e07c0,%rdi ffffffff800050bb: e8 10 fd ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800050c0: 48 c7 c6 c0 aa 00 80 mov $0xffffffff8000aac0,%rsi ffffffff800050c7: 48 89 c7 mov %rax,%rdi ffffffff800050ca: e8 01 fd ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800050cf: 48 c7 c6 04 ad 00 80 mov $0xffffffff8000ad04,%rsi ffffffff800050d6: 48 89 c7 mov %rax,%rdi ffffffff800050d9: e8 f2 fc ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800050de: 48 c7 c7 a2 a9 00 80 mov $0xffffffff8000a9a2,%rdi ffffffff800050e5: 48 89 c5 mov %rax,%rbp ffffffff800050e8: e8 93 1e 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff800050ed: 48 c7 c7 aa a9 00 80 mov $0xffffffff8000a9aa,%rdi t.streamBaseType = newBase; ffffffff800050f4: c7 05 fa 5f 00 00 10 movl $0x10,0x5ffa(%rip) # ffffffff8000b0f8 ffffffff800050fb: 00 00 00 Print(string); ffffffff800050fe: e8 7d 1e 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff80005103: 48 8b 73 10 mov 0x10(%rbx),%rsi ffffffff80005107: 48 89 ef mov %rbp,%rdi ffffffff8000510a: e8 51 fd ff ff call ffffffff80004e60 <_ZN2KtlsImEERNS_17KernelErrorStreamES2_T_> ffffffff8000510f: 48 c7 c6 c0 a9 00 80 mov $0xffffffff8000a9c0,%rsi ffffffff80005116: 48 89 c7 mov %rax,%rdi ffffffff80005119: e8 b2 fc ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "StackPointer: " << "0x" << base::hex << frame->SP << "\n"; ffffffff8000511e: 48 c7 c6 c2 a9 00 80 mov $0xffffffff8000a9c2,%rsi ffffffff80005125: 48 c7 c7 c0 07 0e 80 mov $0xffffffff800e07c0,%rdi ffffffff8000512c: e8 9f fc ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80005131: 48 c7 c6 c8 aa 00 80 mov $0xffffffff8000aac8,%rsi ffffffff80005138: 48 89 c7 mov %rax,%rdi ffffffff8000513b: e8 90 fc ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80005140: 48 c7 c6 04 ad 00 80 mov $0xffffffff8000ad04,%rsi ffffffff80005147: 48 89 c7 mov %rax,%rdi ffffffff8000514a: e8 81 fc ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000514f: 48 c7 c7 a2 a9 00 80 mov $0xffffffff8000a9a2,%rdi ffffffff80005156: 48 89 c5 mov %rax,%rbp ffffffff80005159: e8 22 1e 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff8000515e: 48 c7 c7 aa a9 00 80 mov $0xffffffff8000a9aa,%rdi t.streamBaseType = newBase; ffffffff80005165: c7 05 89 5f 00 00 10 movl $0x10,0x5f89(%rip) # ffffffff8000b0f8 ffffffff8000516c: 00 00 00 Print(string); ffffffff8000516f: e8 0c 1e 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff80005174: 48 8b 73 18 mov 0x18(%rbx),%rsi ffffffff80005178: 48 89 ef mov %rbp,%rdi ffffffff8000517b: e8 e0 fc ff ff call ffffffff80004e60 <_ZN2KtlsImEERNS_17KernelErrorStreamES2_T_> ffffffff80005180: 48 c7 c6 c0 a9 00 80 mov $0xffffffff8000a9c0,%rsi ffffffff80005187: 48 89 c7 mov %rax,%rdi ffffffff8000518a: e8 41 fc ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "StackSegment: " << "0x" << base::hex << frame->SS << "\n"; ffffffff8000518f: 48 c7 c6 c2 a9 00 80 mov $0xffffffff8000a9c2,%rsi ffffffff80005196: 48 c7 c7 c0 07 0e 80 mov $0xffffffff800e07c0,%rdi ffffffff8000519d: e8 2e fc ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800051a2: 48 c7 c6 d7 aa 00 80 mov $0xffffffff8000aad7,%rsi ffffffff800051a9: 48 89 c7 mov %rax,%rdi ffffffff800051ac: e8 1f fc ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800051b1: 48 c7 c6 04 ad 00 80 mov $0xffffffff8000ad04,%rsi ffffffff800051b8: 48 89 c7 mov %rax,%rdi ffffffff800051bb: e8 10 fc ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800051c0: 48 c7 c7 a2 a9 00 80 mov $0xffffffff8000a9a2,%rdi ffffffff800051c7: 48 89 c5 mov %rax,%rbp ffffffff800051ca: e8 b1 1d 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff800051cf: 48 c7 c7 aa a9 00 80 mov $0xffffffff8000a9aa,%rdi t.streamBaseType = newBase; ffffffff800051d6: c7 05 18 5f 00 00 10 movl $0x10,0x5f18(%rip) # ffffffff8000b0f8 ffffffff800051dd: 00 00 00 Print(string); ffffffff800051e0: e8 9b 1d 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff800051e5: 48 8b 73 20 mov 0x20(%rbx),%rsi ffffffff800051e9: 48 89 ef mov %rbp,%rdi ffffffff800051ec: e8 6f fc ff ff call ffffffff80004e60 <_ZN2KtlsImEERNS_17KernelErrorStreamES2_T_> ffffffff800051f1: 48 c7 c6 c0 a9 00 80 mov $0xffffffff8000a9c0,%rsi ffffffff800051f8: 48 89 c7 mov %rax,%rdi ffffffff800051fb: e8 d0 fb ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> asm ("cli"); ffffffff80005200: fa cli asm ("hlt"); ffffffff80005201: f4 hlt while (true) { ffffffff80005202: eb fc jmp ffffffff80005200 <_Z5PanicPKcPN6System10PanicFrameE+0x350> kerr << "\t" << "PageFaultPresent: " << base::dec << pf_frame->PageFaultError.Present << "\n"; ffffffff80005204: 48 c7 c6 c2 a9 00 80 mov $0xffffffff8000a9c2,%rsi ffffffff8000520b: 48 c7 c7 c0 07 0e 80 mov $0xffffffff800e07c0,%rdi frame = (System::PanicFrame*)&pf_frame->IP; ffffffff80005212: 48 8d 6b 08 lea 0x8(%rbx),%rbp kerr << "\t" << "PageFaultPresent: " << base::dec << pf_frame->PageFaultError.Present << "\n"; ffffffff80005216: e8 b5 fb ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000521b: 48 c7 c6 e9 a9 00 80 mov $0xffffffff8000a9e9,%rsi ffffffff80005222: 48 89 c7 mov %rax,%rdi ffffffff80005225: e8 a6 fb ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000522a: 48 c7 c7 a2 a9 00 80 mov $0xffffffff8000a9a2,%rdi ffffffff80005231: 49 89 c4 mov %rax,%r12 ffffffff80005234: e8 47 1d 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff80005239: 48 c7 c7 aa a9 00 80 mov $0xffffffff8000a9aa,%rdi t.streamBaseType = newBase; ffffffff80005240: c7 05 ae 5e 00 00 0a movl $0xa,0x5eae(%rip) # ffffffff8000b0f8 ffffffff80005247: 00 00 00 Print(string); ffffffff8000524a: e8 31 1d 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff8000524f: 0f b6 33 movzbl (%rbx),%esi ffffffff80005252: 4c 89 e7 mov %r12,%rdi ffffffff80005255: 83 e6 01 and $0x1,%esi ffffffff80005258: e8 b3 fb ff ff call ffffffff80004e10 <_ZN2KtlsIhEERNS_17KernelErrorStreamES2_T_> ffffffff8000525d: 48 c7 c6 c0 a9 00 80 mov $0xffffffff8000a9c0,%rsi ffffffff80005264: 48 89 c7 mov %rax,%rdi ffffffff80005267: e8 64 fb ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "PageFaultWrite: " << base::dec << pf_frame->PageFaultError.Write << "\n"; ffffffff8000526c: 48 c7 c6 c2 a9 00 80 mov $0xffffffff8000a9c2,%rsi ffffffff80005273: 48 c7 c7 c0 07 0e 80 mov $0xffffffff800e07c0,%rdi ffffffff8000527a: e8 51 fb ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000527f: 48 c7 c6 fc a9 00 80 mov $0xffffffff8000a9fc,%rsi ffffffff80005286: 48 89 c7 mov %rax,%rdi ffffffff80005289: e8 42 fb ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000528e: 48 c7 c7 a2 a9 00 80 mov $0xffffffff8000a9a2,%rdi ffffffff80005295: 49 89 c4 mov %rax,%r12 ffffffff80005298: e8 e3 1c 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff8000529d: 48 c7 c7 aa a9 00 80 mov $0xffffffff8000a9aa,%rdi t.streamBaseType = newBase; ffffffff800052a4: c7 05 4a 5e 00 00 0a movl $0xa,0x5e4a(%rip) # ffffffff8000b0f8 ffffffff800052ab: 00 00 00 Print(string); ffffffff800052ae: e8 cd 1c 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff800052b3: 0f b6 33 movzbl (%rbx),%esi ffffffff800052b6: 4c 89 e7 mov %r12,%rdi ffffffff800052b9: 40 d0 ee shr $1,%sil ffffffff800052bc: 83 e6 01 and $0x1,%esi ffffffff800052bf: e8 4c fb ff ff call ffffffff80004e10 <_ZN2KtlsIhEERNS_17KernelErrorStreamES2_T_> ffffffff800052c4: 48 c7 c6 c0 a9 00 80 mov $0xffffffff8000a9c0,%rsi ffffffff800052cb: 48 89 c7 mov %rax,%rdi ffffffff800052ce: e8 fd fa ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "PageFaultUser: " << base::dec << pf_frame->PageFaultError.User << "\n"; ffffffff800052d3: 48 c7 c6 c2 a9 00 80 mov $0xffffffff8000a9c2,%rsi ffffffff800052da: 48 c7 c7 c0 07 0e 80 mov $0xffffffff800e07c0,%rdi ffffffff800052e1: e8 ea fa ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800052e6: 48 c7 c6 0d aa 00 80 mov $0xffffffff8000aa0d,%rsi ffffffff800052ed: 48 89 c7 mov %rax,%rdi ffffffff800052f0: e8 db fa ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800052f5: 48 c7 c7 a2 a9 00 80 mov $0xffffffff8000a9a2,%rdi ffffffff800052fc: 49 89 c4 mov %rax,%r12 ffffffff800052ff: e8 7c 1c 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff80005304: 48 c7 c7 aa a9 00 80 mov $0xffffffff8000a9aa,%rdi t.streamBaseType = newBase; ffffffff8000530b: c7 05 e3 5d 00 00 0a movl $0xa,0x5de3(%rip) # ffffffff8000b0f8 ffffffff80005312: 00 00 00 Print(string); ffffffff80005315: e8 66 1c 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff8000531a: 0f b6 33 movzbl (%rbx),%esi ffffffff8000531d: 4c 89 e7 mov %r12,%rdi ffffffff80005320: 40 c0 ee 02 shr $0x2,%sil ffffffff80005324: 83 e6 01 and $0x1,%esi ffffffff80005327: e8 e4 fa ff ff call ffffffff80004e10 <_ZN2KtlsIhEERNS_17KernelErrorStreamES2_T_> ffffffff8000532c: 48 c7 c6 c0 a9 00 80 mov $0xffffffff8000a9c0,%rsi ffffffff80005333: 48 89 c7 mov %rax,%rdi ffffffff80005336: e8 95 fa ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "PageFaultReservedWrite: " << base::dec << pf_frame->PageFaultError.ReservedWrite << "\n"; ffffffff8000533b: 48 c7 c6 c2 a9 00 80 mov $0xffffffff8000a9c2,%rsi ffffffff80005342: 48 c7 c7 c0 07 0e 80 mov $0xffffffff800e07c0,%rdi ffffffff80005349: e8 82 fa ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000534e: 48 c7 c6 1d aa 00 80 mov $0xffffffff8000aa1d,%rsi ffffffff80005355: 48 89 c7 mov %rax,%rdi ffffffff80005358: e8 73 fa ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000535d: 48 c7 c7 a2 a9 00 80 mov $0xffffffff8000a9a2,%rdi ffffffff80005364: 49 89 c4 mov %rax,%r12 ffffffff80005367: e8 14 1c 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff8000536c: 48 c7 c7 aa a9 00 80 mov $0xffffffff8000a9aa,%rdi t.streamBaseType = newBase; ffffffff80005373: c7 05 7b 5d 00 00 0a movl $0xa,0x5d7b(%rip) # ffffffff8000b0f8 ffffffff8000537a: 00 00 00 Print(string); ffffffff8000537d: e8 fe 1b 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff80005382: 0f b6 33 movzbl (%rbx),%esi ffffffff80005385: 4c 89 e7 mov %r12,%rdi ffffffff80005388: 40 c0 ee 03 shr $0x3,%sil ffffffff8000538c: 83 e6 01 and $0x1,%esi ffffffff8000538f: e8 7c fa ff ff call ffffffff80004e10 <_ZN2KtlsIhEERNS_17KernelErrorStreamES2_T_> ffffffff80005394: 48 c7 c6 c0 a9 00 80 mov $0xffffffff8000a9c0,%rsi ffffffff8000539b: 48 89 c7 mov %rax,%rdi ffffffff8000539e: e8 2d fa ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "PageFaultInstructionFetch: " << base::dec << pf_frame->PageFaultError.InstructionFetch << "\n"; ffffffff800053a3: 48 c7 c6 c2 a9 00 80 mov $0xffffffff8000a9c2,%rsi ffffffff800053aa: 48 c7 c7 c0 07 0e 80 mov $0xffffffff800e07c0,%rdi ffffffff800053b1: e8 1a fa ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800053b6: 48 c7 c6 36 aa 00 80 mov $0xffffffff8000aa36,%rsi ffffffff800053bd: 48 89 c7 mov %rax,%rdi ffffffff800053c0: e8 0b fa ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800053c5: 48 c7 c7 a2 a9 00 80 mov $0xffffffff8000a9a2,%rdi ffffffff800053cc: 49 89 c4 mov %rax,%r12 ffffffff800053cf: e8 ac 1b 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff800053d4: 48 c7 c7 aa a9 00 80 mov $0xffffffff8000a9aa,%rdi t.streamBaseType = newBase; ffffffff800053db: c7 05 13 5d 00 00 0a movl $0xa,0x5d13(%rip) # ffffffff8000b0f8 ffffffff800053e2: 00 00 00 Print(string); ffffffff800053e5: e8 96 1b 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff800053ea: 0f b6 33 movzbl (%rbx),%esi ffffffff800053ed: 4c 89 e7 mov %r12,%rdi ffffffff800053f0: 40 c0 ee 04 shr $0x4,%sil ffffffff800053f4: 83 e6 01 and $0x1,%esi ffffffff800053f7: e8 14 fa ff ff call ffffffff80004e10 <_ZN2KtlsIhEERNS_17KernelErrorStreamES2_T_> ffffffff800053fc: 48 c7 c6 c0 a9 00 80 mov $0xffffffff8000a9c0,%rsi ffffffff80005403: 48 89 c7 mov %rax,%rdi ffffffff80005406: e8 c5 f9 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "PageFaultProtectionKey: " << base::dec << pf_frame->PageFaultError.ProtectionKey << "\n"; ffffffff8000540b: 48 c7 c6 c2 a9 00 80 mov $0xffffffff8000a9c2,%rsi ffffffff80005412: 48 c7 c7 c0 07 0e 80 mov $0xffffffff800e07c0,%rdi ffffffff80005419: e8 b2 f9 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000541e: 48 c7 c6 52 aa 00 80 mov $0xffffffff8000aa52,%rsi ffffffff80005425: 48 89 c7 mov %rax,%rdi ffffffff80005428: e8 a3 f9 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000542d: 48 c7 c7 a2 a9 00 80 mov $0xffffffff8000a9a2,%rdi ffffffff80005434: 49 89 c4 mov %rax,%r12 ffffffff80005437: e8 44 1b 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff8000543c: 48 c7 c7 aa a9 00 80 mov $0xffffffff8000a9aa,%rdi t.streamBaseType = newBase; ffffffff80005443: c7 05 ab 5c 00 00 0a movl $0xa,0x5cab(%rip) # ffffffff8000b0f8 ffffffff8000544a: 00 00 00 Print(string); ffffffff8000544d: e8 2e 1b 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff80005452: 0f b6 33 movzbl (%rbx),%esi ffffffff80005455: 4c 89 e7 mov %r12,%rdi ffffffff80005458: 40 c0 ee 05 shr $0x5,%sil ffffffff8000545c: 83 e6 01 and $0x1,%esi ffffffff8000545f: e8 ac f9 ff ff call ffffffff80004e10 <_ZN2KtlsIhEERNS_17KernelErrorStreamES2_T_> ffffffff80005464: 48 c7 c6 c0 a9 00 80 mov $0xffffffff8000a9c0,%rsi ffffffff8000546b: 48 89 c7 mov %rax,%rdi ffffffff8000546e: e8 5d f9 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "PageFaultShadowStack: " << base::dec << pf_frame->PageFaultError.ShadowStack << "\n"; ffffffff80005473: 48 c7 c6 c2 a9 00 80 mov $0xffffffff8000a9c2,%rsi ffffffff8000547a: 48 c7 c7 c0 07 0e 80 mov $0xffffffff800e07c0,%rdi ffffffff80005481: e8 4a f9 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80005486: 48 c7 c6 6b aa 00 80 mov $0xffffffff8000aa6b,%rsi ffffffff8000548d: 48 89 c7 mov %rax,%rdi ffffffff80005490: e8 3b f9 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80005495: 48 c7 c7 a2 a9 00 80 mov $0xffffffff8000a9a2,%rdi ffffffff8000549c: 49 89 c4 mov %rax,%r12 ffffffff8000549f: e8 dc 1a 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff800054a4: 48 c7 c7 aa a9 00 80 mov $0xffffffff8000a9aa,%rdi t.streamBaseType = newBase; ffffffff800054ab: c7 05 43 5c 00 00 0a movl $0xa,0x5c43(%rip) # ffffffff8000b0f8 ffffffff800054b2: 00 00 00 Print(string); ffffffff800054b5: e8 c6 1a 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff800054ba: 0f b6 33 movzbl (%rbx),%esi ffffffff800054bd: 4c 89 e7 mov %r12,%rdi ffffffff800054c0: 40 c0 ee 06 shr $0x6,%sil ffffffff800054c4: 83 e6 01 and $0x1,%esi ffffffff800054c7: e8 44 f9 ff ff call ffffffff80004e10 <_ZN2KtlsIhEERNS_17KernelErrorStreamES2_T_> ffffffff800054cc: 48 c7 c6 c0 a9 00 80 mov $0xffffffff8000a9c0,%rsi ffffffff800054d3: 48 89 c7 mov %rax,%rdi ffffffff800054d6: e8 f5 f8 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> kerr << "\t" << "PageFaultSGX: " << base::dec << pf_frame->PageFaultError.ShadowStack << "\n"; ffffffff800054db: 48 c7 c6 c2 a9 00 80 mov $0xffffffff8000a9c2,%rsi ffffffff800054e2: 48 c7 c7 c0 07 0e 80 mov $0xffffffff800e07c0,%rdi ffffffff800054e9: e8 e2 f8 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800054ee: 48 c7 c6 82 aa 00 80 mov $0xffffffff8000aa82,%rsi ffffffff800054f5: 48 89 c7 mov %rax,%rdi ffffffff800054f8: e8 d3 f8 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800054fd: 48 c7 c7 a2 a9 00 80 mov $0xffffffff8000a9a2,%rdi ffffffff80005504: 49 89 c4 mov %rax,%r12 ffffffff80005507: e8 74 1a 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff8000550c: 48 c7 c7 aa a9 00 80 mov $0xffffffff8000a9aa,%rdi t.streamBaseType = newBase; ffffffff80005513: c7 05 db 5b 00 00 0a movl $0xa,0x5bdb(%rip) # ffffffff8000b0f8 ffffffff8000551a: 00 00 00 Print(string); ffffffff8000551d: e8 5e 1a 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff80005522: 0f b6 33 movzbl (%rbx),%esi ffffffff80005525: 4c 89 e7 mov %r12,%rdi frame = (System::PanicFrame*)&pf_frame->IP; ffffffff80005528: 48 89 eb mov %rbp,%rbx kerr << "\t" << "PageFaultSGX: " << base::dec << pf_frame->PageFaultError.ShadowStack << "\n"; ffffffff8000552b: 40 c0 ee 06 shr $0x6,%sil ffffffff8000552f: 83 e6 01 and $0x1,%esi ffffffff80005532: e8 d9 f8 ff ff call ffffffff80004e10 <_ZN2KtlsIhEERNS_17KernelErrorStreamES2_T_> ffffffff80005537: 48 c7 c6 c0 a9 00 80 mov $0xffffffff8000a9c0,%rsi ffffffff8000553e: 48 89 c7 mov %rax,%rdi ffffffff80005541: e8 8a f8 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff80005546: e9 81 fa ff ff jmp ffffffff80004fcc <_Z5PanicPKcPN6System10PanicFrameE+0x11c> kerr << "\t" << "ErrorCode: " << base::dec << gpf_frame->GeneralProtectionFaultError << "\n"; ffffffff8000554b: 48 c7 c6 c2 a9 00 80 mov $0xffffffff8000a9c2,%rsi ffffffff80005552: 48 c7 c7 c0 07 0e 80 mov $0xffffffff800e07c0,%rdi ffffffff80005559: e8 72 f8 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000555e: 48 c7 c6 91 aa 00 80 mov $0xffffffff8000aa91,%rsi ffffffff80005565: 48 89 c7 mov %rax,%rdi ffffffff80005568: e8 63 f8 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff8000556d: 48 c7 c7 a2 a9 00 80 mov $0xffffffff8000a9a2,%rdi ffffffff80005574: 48 89 c5 mov %rax,%rbp ffffffff80005577: e8 04 1a 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff8000557c: 48 c7 c7 aa a9 00 80 mov $0xffffffff8000a9aa,%rdi t.streamBaseType = newBase; ffffffff80005583: c7 05 6b 5b 00 00 0a movl $0xa,0x5b6b(%rip) # ffffffff8000b0f8 ffffffff8000558a: 00 00 00 Print(string); ffffffff8000558d: e8 ee 19 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff80005592: 48 8b 33 mov (%rbx),%rsi ffffffff80005595: 48 89 ef mov %rbp,%rdi ffffffff80005598: e8 c3 f8 ff ff call ffffffff80004e60 <_ZN2KtlsImEERNS_17KernelErrorStreamES2_T_> ffffffff8000559d: 48 c7 c6 c0 a9 00 80 mov $0xffffffff8000a9c0,%rsi ffffffff800055a4: 48 89 c7 mov %rax,%rdi ffffffff800055a7: e8 24 f8 ff ff call ffffffff80004dd0 <_ZN2KtlsIPKcEERNS_17KernelErrorStreamES4_T_> ffffffff800055ac: e9 1b fa ff ff jmp ffffffff80004fcc <_Z5PanicPKcPN6System10PanicFrameE+0x11c> ffffffff800055b1: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff800055b8: 00 00 00 ffffffff800055bb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff800055c0 <_ZdlPvm>: { Memory::g_heap->Free(block); } void operator delete(void* block, long unsigned int) { ffffffff800055c0: f3 0f 1e fa endbr64 ffffffff800055c4: 48 89 fe mov %rdi,%rsi Memory::g_heap->Free(block); ffffffff800055c7: 48 8b 3d 02 b2 0d 00 mov 0xdb202(%rip),%rdi # ffffffff800e07d0 <_ZN6Memory6g_heapE> ffffffff800055ce: e9 cd 16 00 00 jmp ffffffff80006ca0 <_ZN6Memory13HeapAllocator4FreeEPv> ffffffff800055d3: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff800055da: 00 00 00 ffffffff800055dd: 0f 1f 00 nopl (%rax) ffffffff800055e0 <_ZN3kcp13cstringstreamC1Ev>: #include "Stream.hpp" #include #include #include kcp::cstringstream::cstringstream() ffffffff800055e0: f3 0f 1e fa endbr64 ffffffff800055e4: c7 47 10 0a 00 00 00 movl $0xa,0x10(%rdi) { this->string = nullptr; ffffffff800055eb: 48 c7 07 00 00 00 00 movq $0x0,(%rdi) this->size = 0; ffffffff800055f2: 48 c7 47 08 00 00 00 movq $0x0,0x8(%rdi) ffffffff800055f9: 00 } ffffffff800055fa: c3 ret ffffffff800055fb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80005600 <_ZN3kcp13cstringstreamD1Ev>: kcp::cstringstream::~cstringstream() ffffffff80005600: f3 0f 1e fa endbr64 { delete this->string; ffffffff80005604: 48 8b 3f mov (%rdi),%rdi ffffffff80005607: 48 85 ff test %rdi,%rdi ffffffff8000560a: 74 14 je ffffffff80005620 <_ZN3kcp13cstringstreamD1Ev+0x20> ffffffff8000560c: be 01 00 00 00 mov $0x1,%esi ffffffff80005611: e9 aa ff ff ff jmp ffffffff800055c0 <_ZdlPvm> ffffffff80005616: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff8000561d: 00 00 00 } ffffffff80005620: c3 ret ffffffff80005621: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80005628: 00 00 00 ffffffff8000562b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80005630 <_ZN3kcp13cstringstreamlsEPKc>: } return *this; } kcp::cstringstream& kcp::cstringstream::operator<<(const char* str) { ffffffff80005630: f3 0f 1e fa endbr64 ffffffff80005634: 41 54 push %r12 ffffffff80005636: 55 push %rbp ffffffff80005637: 53 push %rbx while (*str != '\0') ffffffff80005638: 44 0f b6 26 movzbl (%rsi),%r12d kcp::cstringstream& kcp::cstringstream::operator<<(const char* str) { ffffffff8000563c: 48 89 fb mov %rdi,%rbx while (*str != '\0') ffffffff8000563f: 45 84 e4 test %r12b,%r12b ffffffff80005642: 74 49 je ffffffff8000568d <_ZN3kcp13cstringstreamlsEPKc+0x5d> ffffffff80005644: 48 89 f5 mov %rsi,%rbp ffffffff80005647: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff8000564e: 00 00 this->string = (char *)Memory::g_heap->Realloc((void *)this->string, this->size + 2); ffffffff80005650: 48 8b 43 08 mov 0x8(%rbx),%rax ffffffff80005654: 48 8b 33 mov (%rbx),%rsi ffffffff80005657: 48 8b 3d 72 b1 0d 00 mov 0xdb172(%rip),%rdi # ffffffff800e07d0 <_ZN6Memory6g_heapE> ffffffff8000565e: 48 8d 50 02 lea 0x2(%rax),%rdx ffffffff80005662: e8 a9 15 00 00 call ffffffff80006c10 <_ZN6Memory13HeapAllocator7ReallocEPvm> ffffffff80005667: 48 89 03 mov %rax,(%rbx) if (!this->string) ffffffff8000566a: 48 85 c0 test %rax,%rax ffffffff8000566d: 74 29 je ffffffff80005698 <_ZN3kcp13cstringstreamlsEPKc+0x68> char* ref = (char *)&string[size]; ffffffff8000566f: 48 03 43 08 add 0x8(%rbx),%rax *ref = c; ffffffff80005673: 44 88 20 mov %r12b,(%rax) *ref = '\0'; ffffffff80005676: c6 40 01 00 movb $0x0,0x1(%rax) this->size++; ffffffff8000567a: 48 83 43 08 01 addq $0x1,0x8(%rbx) while (*str != '\0') ffffffff8000567f: 44 0f b6 65 01 movzbl 0x1(%rbp),%r12d str++; ffffffff80005684: 48 83 c5 01 add $0x1,%rbp while (*str != '\0') ffffffff80005688: 45 84 e4 test %r12b,%r12b ffffffff8000568b: 75 c3 jne ffffffff80005650 <_ZN3kcp13cstringstreamlsEPKc+0x20> *this << (char*)str; return *this; } ffffffff8000568d: 48 89 d8 mov %rbx,%rax ffffffff80005690: 5b pop %rbx ffffffff80005691: 5d pop %rbp ffffffff80005692: 41 5c pop %r12 ffffffff80005694: c3 ret ffffffff80005695: 0f 1f 00 nopl (%rax) ffffffff80005698: 48 c7 c7 a2 a9 00 80 mov $0xffffffff8000a9a2,%rdi ffffffff8000569f: e8 dc 18 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff800056a4: 48 c7 c7 10 ad 00 80 mov $0xffffffff8000ad10,%rdi ffffffff800056ab: e8 d0 18 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff800056b0: 48 c7 c7 aa a9 00 80 mov $0xffffffff8000a9aa,%rdi ffffffff800056b7: e8 c4 18 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff800056bc: 48 c7 c7 a2 a9 00 80 mov $0xffffffff8000a9a2,%rdi ffffffff800056c3: e8 b8 18 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> Putchar(chr); ffffffff800056c8: bf 0a 00 00 00 mov $0xa,%edi ffffffff800056cd: e8 7e 18 00 00 call ffffffff80006f50 <_ZN2Kt7PutcharEc> Print(string); ffffffff800056d2: 48 c7 c7 aa a9 00 80 mov $0xffffffff8000a9aa,%rdi ffffffff800056d9: e8 a2 18 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> return *this; ffffffff800056de: eb 9f jmp ffffffff8000567f <_ZN3kcp13cstringstreamlsEPKc+0x4f> ffffffff800056e0 <_ZN3Hal10PrepareGDTEv>: using namespace Kt; GDTPointer gdtPointer{}; BasicGDT kernelGDT{}; void PrepareGDT() { ffffffff800056e0: f3 0f 1e fa endbr64 ffffffff800056e4: 48 83 ec 08 sub $0x8,%rsp base streamBaseType = base::dec; // C++ streaming operator like cout friend KernelOutStream &operator<<(KernelOutStream &t, const char *string) { Print(string); ffffffff800056e8: 48 c7 c7 e6 aa 00 80 mov $0xffffffff8000aae6,%rdi ffffffff800056ef: e8 8c 18 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> return t; } friend KernelOutStream &operator<<(KernelOutStream &t, std::uint64_t number) { Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff800056f4: be 10 00 00 00 mov $0x10,%esi ffffffff800056f9: 48 c7 c7 60 03 0e 80 mov $0xffffffff800e0360,%rdi return t; } friend KernelOutStream &operator<<(KernelOutStream &t, base newBase) { t.streamBaseType = newBase; ffffffff80005700: c7 05 ee 59 00 00 10 movl $0x10,0x59ee(%rip) # ffffffff8000b0f8 ffffffff80005707: 00 00 00 Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff8000570a: e8 a1 12 00 00 call ffffffff800069b0 <_ZN3Lib13u64_2_basestrEmm> ffffffff8000570f: 48 89 c7 mov %rax,%rdi ffffffff80005712: e8 69 18 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> Print(string); ffffffff80005717: 48 c7 c7 c0 a9 00 80 mov $0xffffffff8000a9c0,%rdi ffffffff8000571e: e8 5d 18 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> kout << "HardwareAbstraction: GDT at " << base::hex << (uint64_t)&kernelGDT << "\n"; kernelGDT = { ffffffff80005723: 48 b8 ff ff 00 00 00 movabs $0xa092000000ffff,%rax ffffffff8000572a: 92 a0 00 ffffffff8000572d: 48 ba ff ff 00 00 00 movabs $0xa09a000000ffff,%rdx ffffffff80005734: 9a a0 00 ffffffff80005737: 48 c7 05 1e ac 0d 00 movq $0xffff,0xdac1e(%rip) # ffffffff800e0360 <_ZN3Hal9kernelGDTE> ffffffff8000573e: ff ff 00 00 ffffffff80005742: 48 89 05 27 ac 0d 00 mov %rax,0xdac27(%rip) # ffffffff800e0370 <_ZN3Hal9kernelGDTE+0x10> ffffffff80005749: 48 89 05 30 ac 0d 00 mov %rax,0xdac30(%rip) # ffffffff800e0380 <_ZN3Hal9kernelGDTE+0x20> ffffffff80005750: 48 b8 00 00 00 00 00 movabs $0xfa0000000000,%rax ffffffff80005757: fa 00 00 ffffffff8000575a: 48 89 05 27 ac 0d 00 mov %rax,0xdac27(%rip) # ffffffff800e0388 <_ZN3Hal9kernelGDTE+0x28> 0x0 } }; gdtPointer = GDTPointer{ ffffffff80005761: b8 2f 00 00 00 mov $0x2f,%eax kernelGDT = { ffffffff80005766: 48 89 15 fb ab 0d 00 mov %rdx,0xdabfb(%rip) # ffffffff800e0368 <_ZN3Hal9kernelGDTE+0x8> ffffffff8000576d: 48 89 15 04 ac 0d 00 mov %rdx,0xdac04(%rip) # ffffffff800e0378 <_ZN3Hal9kernelGDTE+0x18> gdtPointer = GDTPointer{ ffffffff80005774: 66 89 05 15 ac 0d 00 mov %ax,0xdac15(%rip) # ffffffff800e0390 <_ZN3Hal10gdtPointerE> ffffffff8000577b: 48 c7 05 0c ac 0d 00 movq $0xffffffff800e0360,0xdac0c(%rip) # ffffffff800e0392 <_ZN3Hal10gdtPointerE+0x2> ffffffff80005782: 60 03 0e 80 .Size = sizeof(kernelGDT) - 1, .GDTAddress = (uint64_t)&kernelGDT }; } ffffffff80005786: 48 83 c4 08 add $0x8,%rsp ffffffff8000578a: c3 ret ffffffff8000578b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80005790 <_ZN3Hal13BridgeLoadGDTEv>: // Helpers implemented in gdt.asm extern "C" void LoadGDT(GDTPointer *gdtPointer); extern "C" void ReloadSegments(); void BridgeLoadGDT() { ffffffff80005790: f3 0f 1e fa endbr64 ffffffff80005794: 48 83 ec 08 sub $0x8,%rsp ffffffff80005798: 48 c7 c7 40 ad 00 80 mov $0xffffffff8000ad40,%rdi ffffffff8000579f: e8 dc 17 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> Putchar(chr); ffffffff800057a4: bf 0a 00 00 00 mov $0xa,%edi ffffffff800057a9: e8 a2 17 00 00 call ffffffff80006f50 <_ZN2Kt7PutcharEc> // Puts the GDT pointer structure into the GDTR kout << "HardwareAbstraction: Setting GDTR" << Kt::newline; LoadGDT(&gdtPointer); ffffffff800057ae: 48 c7 c7 90 03 0e 80 mov $0xffffffff800e0390,%rdi ffffffff800057b5: e8 16 18 00 00 call ffffffff80006fd0 Print(string); ffffffff800057ba: 48 c7 c7 68 ad 00 80 mov $0xffffffff8000ad68,%rdi ffffffff800057c1: e8 ba 17 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> Putchar(chr); ffffffff800057c6: bf 0a 00 00 00 mov $0xa,%edi ffffffff800057cb: e8 80 17 00 00 call ffffffff80006f50 <_ZN2Kt7PutcharEc> kout << "HardwareAbstraction: Reloading segments" << Kt::newline; ReloadSegments(); } ffffffff800057d0: 48 83 c4 08 add $0x8,%rsp ReloadSegments(); ffffffff800057d4: e9 fb 17 00 00 jmp ffffffff80006fd4 ffffffff800057d9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) ffffffff800057e0 <_ZN3Hal16ExceptionHandlerILm0EEEvPN6System10PanicFrameE>: "Security Exception", "Reserved" }; template __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff800057e0: f3 0f 1e fa endbr64 ffffffff800057e4: 41 53 push %r11 ffffffff800057e6: 41 52 push %r10 ffffffff800057e8: 41 51 push %r9 ffffffff800057ea: 41 50 push %r8 ffffffff800057ec: 57 push %rdi // kcp::cstringstream stream; // stream << "Caught " << base::hex << "0x" << i << " " << ExceptionStrings[i] << " in kernel"; frame->InterruptVector = i; Panic(ExceptionStrings[i], frame); ffffffff800057ed: 48 8b 3d 0c 58 00 00 mov 0x580c(%rip),%rdi # ffffffff8000b000 <_ZN3Hal16ExceptionStringsE> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff800057f4: 56 push %rsi ffffffff800057f5: 51 push %rcx ffffffff800057f6: 52 push %rdx ffffffff800057f7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff800057f8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff800057fd: c6 44 24 70 00 movb $0x0,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005802: fc cld ffffffff80005803: e8 a8 f6 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005808: 58 pop %rax ffffffff80005809: 5a pop %rdx ffffffff8000580a: 59 pop %rcx ffffffff8000580b: 5e pop %rsi ffffffff8000580c: 5f pop %rdi ffffffff8000580d: 41 58 pop %r8 ffffffff8000580f: 41 59 pop %r9 ffffffff80005811: 41 5a pop %r10 ffffffff80005813: 41 5b pop %r11 ffffffff80005815: 48 cf iretq ffffffff80005817: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff8000581e: 00 00 ffffffff80005820 <_ZN3Hal16ExceptionHandlerILm1EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005820: f3 0f 1e fa endbr64 ffffffff80005824: 41 53 push %r11 ffffffff80005826: 41 52 push %r10 ffffffff80005828: 41 51 push %r9 ffffffff8000582a: 41 50 push %r8 ffffffff8000582c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff8000582d: 48 8b 3d d4 57 00 00 mov 0x57d4(%rip),%rdi # ffffffff8000b008 <_ZN3Hal16ExceptionStringsE+0x8> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005834: 56 push %rsi ffffffff80005835: 51 push %rcx ffffffff80005836: 52 push %rdx ffffffff80005837: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005838: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff8000583d: c6 44 24 70 01 movb $0x1,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005842: fc cld ffffffff80005843: e8 68 f6 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005848: 58 pop %rax ffffffff80005849: 5a pop %rdx ffffffff8000584a: 59 pop %rcx ffffffff8000584b: 5e pop %rsi ffffffff8000584c: 5f pop %rdi ffffffff8000584d: 41 58 pop %r8 ffffffff8000584f: 41 59 pop %r9 ffffffff80005851: 41 5a pop %r10 ffffffff80005853: 41 5b pop %r11 ffffffff80005855: 48 cf iretq ffffffff80005857: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff8000585e: 00 00 ffffffff80005860 <_ZN3Hal16ExceptionHandlerILm2EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005860: f3 0f 1e fa endbr64 ffffffff80005864: 41 53 push %r11 ffffffff80005866: 41 52 push %r10 ffffffff80005868: 41 51 push %r9 ffffffff8000586a: 41 50 push %r8 ffffffff8000586c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff8000586d: 48 8b 3d 9c 57 00 00 mov 0x579c(%rip),%rdi # ffffffff8000b010 <_ZN3Hal16ExceptionStringsE+0x10> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005874: 56 push %rsi ffffffff80005875: 51 push %rcx ffffffff80005876: 52 push %rdx ffffffff80005877: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005878: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff8000587d: c6 44 24 70 02 movb $0x2,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005882: fc cld ffffffff80005883: e8 28 f6 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005888: 58 pop %rax ffffffff80005889: 5a pop %rdx ffffffff8000588a: 59 pop %rcx ffffffff8000588b: 5e pop %rsi ffffffff8000588c: 5f pop %rdi ffffffff8000588d: 41 58 pop %r8 ffffffff8000588f: 41 59 pop %r9 ffffffff80005891: 41 5a pop %r10 ffffffff80005893: 41 5b pop %r11 ffffffff80005895: 48 cf iretq ffffffff80005897: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff8000589e: 00 00 ffffffff800058a0 <_ZN3Hal16ExceptionHandlerILm3EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff800058a0: f3 0f 1e fa endbr64 ffffffff800058a4: 41 53 push %r11 ffffffff800058a6: 41 52 push %r10 ffffffff800058a8: 41 51 push %r9 ffffffff800058aa: 41 50 push %r8 ffffffff800058ac: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff800058ad: 48 8b 3d 64 57 00 00 mov 0x5764(%rip),%rdi # ffffffff8000b018 <_ZN3Hal16ExceptionStringsE+0x18> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff800058b4: 56 push %rsi ffffffff800058b5: 51 push %rcx ffffffff800058b6: 52 push %rdx ffffffff800058b7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff800058b8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff800058bd: c6 44 24 70 03 movb $0x3,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff800058c2: fc cld ffffffff800058c3: e8 e8 f5 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff800058c8: 58 pop %rax ffffffff800058c9: 5a pop %rdx ffffffff800058ca: 59 pop %rcx ffffffff800058cb: 5e pop %rsi ffffffff800058cc: 5f pop %rdi ffffffff800058cd: 41 58 pop %r8 ffffffff800058cf: 41 59 pop %r9 ffffffff800058d1: 41 5a pop %r10 ffffffff800058d3: 41 5b pop %r11 ffffffff800058d5: 48 cf iretq ffffffff800058d7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff800058de: 00 00 ffffffff800058e0 <_ZN3Hal16ExceptionHandlerILm4EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff800058e0: f3 0f 1e fa endbr64 ffffffff800058e4: 41 53 push %r11 ffffffff800058e6: 41 52 push %r10 ffffffff800058e8: 41 51 push %r9 ffffffff800058ea: 41 50 push %r8 ffffffff800058ec: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff800058ed: 48 8b 3d 2c 57 00 00 mov 0x572c(%rip),%rdi # ffffffff8000b020 <_ZN3Hal16ExceptionStringsE+0x20> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff800058f4: 56 push %rsi ffffffff800058f5: 51 push %rcx ffffffff800058f6: 52 push %rdx ffffffff800058f7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff800058f8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff800058fd: c6 44 24 70 04 movb $0x4,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005902: fc cld ffffffff80005903: e8 a8 f5 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005908: 58 pop %rax ffffffff80005909: 5a pop %rdx ffffffff8000590a: 59 pop %rcx ffffffff8000590b: 5e pop %rsi ffffffff8000590c: 5f pop %rdi ffffffff8000590d: 41 58 pop %r8 ffffffff8000590f: 41 59 pop %r9 ffffffff80005911: 41 5a pop %r10 ffffffff80005913: 41 5b pop %r11 ffffffff80005915: 48 cf iretq ffffffff80005917: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff8000591e: 00 00 ffffffff80005920 <_ZN3Hal16ExceptionHandlerILm5EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005920: f3 0f 1e fa endbr64 ffffffff80005924: 41 53 push %r11 ffffffff80005926: 41 52 push %r10 ffffffff80005928: 41 51 push %r9 ffffffff8000592a: 41 50 push %r8 ffffffff8000592c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff8000592d: 48 8b 3d f4 56 00 00 mov 0x56f4(%rip),%rdi # ffffffff8000b028 <_ZN3Hal16ExceptionStringsE+0x28> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005934: 56 push %rsi ffffffff80005935: 51 push %rcx ffffffff80005936: 52 push %rdx ffffffff80005937: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005938: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff8000593d: c6 44 24 70 05 movb $0x5,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005942: fc cld ffffffff80005943: e8 68 f5 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005948: 58 pop %rax ffffffff80005949: 5a pop %rdx ffffffff8000594a: 59 pop %rcx ffffffff8000594b: 5e pop %rsi ffffffff8000594c: 5f pop %rdi ffffffff8000594d: 41 58 pop %r8 ffffffff8000594f: 41 59 pop %r9 ffffffff80005951: 41 5a pop %r10 ffffffff80005953: 41 5b pop %r11 ffffffff80005955: 48 cf iretq ffffffff80005957: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff8000595e: 00 00 ffffffff80005960 <_ZN3Hal16ExceptionHandlerILm6EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005960: f3 0f 1e fa endbr64 ffffffff80005964: 41 53 push %r11 ffffffff80005966: 41 52 push %r10 ffffffff80005968: 41 51 push %r9 ffffffff8000596a: 41 50 push %r8 ffffffff8000596c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff8000596d: 48 8b 3d bc 56 00 00 mov 0x56bc(%rip),%rdi # ffffffff8000b030 <_ZN3Hal16ExceptionStringsE+0x30> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005974: 56 push %rsi ffffffff80005975: 51 push %rcx ffffffff80005976: 52 push %rdx ffffffff80005977: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005978: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff8000597d: c6 44 24 70 06 movb $0x6,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005982: fc cld ffffffff80005983: e8 28 f5 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005988: 58 pop %rax ffffffff80005989: 5a pop %rdx ffffffff8000598a: 59 pop %rcx ffffffff8000598b: 5e pop %rsi ffffffff8000598c: 5f pop %rdi ffffffff8000598d: 41 58 pop %r8 ffffffff8000598f: 41 59 pop %r9 ffffffff80005991: 41 5a pop %r10 ffffffff80005993: 41 5b pop %r11 ffffffff80005995: 48 cf iretq ffffffff80005997: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff8000599e: 00 00 ffffffff800059a0 <_ZN3Hal16ExceptionHandlerILm7EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff800059a0: f3 0f 1e fa endbr64 ffffffff800059a4: 41 53 push %r11 ffffffff800059a6: 41 52 push %r10 ffffffff800059a8: 41 51 push %r9 ffffffff800059aa: 41 50 push %r8 ffffffff800059ac: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff800059ad: 48 8b 3d 84 56 00 00 mov 0x5684(%rip),%rdi # ffffffff8000b038 <_ZN3Hal16ExceptionStringsE+0x38> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff800059b4: 56 push %rsi ffffffff800059b5: 51 push %rcx ffffffff800059b6: 52 push %rdx ffffffff800059b7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff800059b8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff800059bd: c6 44 24 70 07 movb $0x7,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff800059c2: fc cld ffffffff800059c3: e8 e8 f4 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff800059c8: 58 pop %rax ffffffff800059c9: 5a pop %rdx ffffffff800059ca: 59 pop %rcx ffffffff800059cb: 5e pop %rsi ffffffff800059cc: 5f pop %rdi ffffffff800059cd: 41 58 pop %r8 ffffffff800059cf: 41 59 pop %r9 ffffffff800059d1: 41 5a pop %r10 ffffffff800059d3: 41 5b pop %r11 ffffffff800059d5: 48 cf iretq ffffffff800059d7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff800059de: 00 00 ffffffff800059e0 <_ZN3Hal16ExceptionHandlerILm8EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff800059e0: f3 0f 1e fa endbr64 ffffffff800059e4: 41 53 push %r11 ffffffff800059e6: 41 52 push %r10 ffffffff800059e8: 41 51 push %r9 ffffffff800059ea: 41 50 push %r8 ffffffff800059ec: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff800059ed: 48 8b 3d 4c 56 00 00 mov 0x564c(%rip),%rdi # ffffffff8000b040 <_ZN3Hal16ExceptionStringsE+0x40> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff800059f4: 56 push %rsi ffffffff800059f5: 51 push %rcx ffffffff800059f6: 52 push %rdx ffffffff800059f7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff800059f8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff800059fd: c6 44 24 70 08 movb $0x8,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005a02: fc cld ffffffff80005a03: e8 a8 f4 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005a08: 58 pop %rax ffffffff80005a09: 5a pop %rdx ffffffff80005a0a: 59 pop %rcx ffffffff80005a0b: 5e pop %rsi ffffffff80005a0c: 5f pop %rdi ffffffff80005a0d: 41 58 pop %r8 ffffffff80005a0f: 41 59 pop %r9 ffffffff80005a11: 41 5a pop %r10 ffffffff80005a13: 41 5b pop %r11 ffffffff80005a15: 48 cf iretq ffffffff80005a17: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005a1e: 00 00 ffffffff80005a20 <_ZN3Hal16ExceptionHandlerILm9EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005a20: f3 0f 1e fa endbr64 ffffffff80005a24: 41 53 push %r11 ffffffff80005a26: 41 52 push %r10 ffffffff80005a28: 41 51 push %r9 ffffffff80005a2a: 41 50 push %r8 ffffffff80005a2c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005a2d: 48 8b 3d 14 56 00 00 mov 0x5614(%rip),%rdi # ffffffff8000b048 <_ZN3Hal16ExceptionStringsE+0x48> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005a34: 56 push %rsi ffffffff80005a35: 51 push %rcx ffffffff80005a36: 52 push %rdx ffffffff80005a37: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005a38: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005a3d: c6 44 24 70 09 movb $0x9,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005a42: fc cld ffffffff80005a43: e8 68 f4 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005a48: 58 pop %rax ffffffff80005a49: 5a pop %rdx ffffffff80005a4a: 59 pop %rcx ffffffff80005a4b: 5e pop %rsi ffffffff80005a4c: 5f pop %rdi ffffffff80005a4d: 41 58 pop %r8 ffffffff80005a4f: 41 59 pop %r9 ffffffff80005a51: 41 5a pop %r10 ffffffff80005a53: 41 5b pop %r11 ffffffff80005a55: 48 cf iretq ffffffff80005a57: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005a5e: 00 00 ffffffff80005a60 <_ZN3Hal16ExceptionHandlerILm10EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005a60: f3 0f 1e fa endbr64 ffffffff80005a64: 41 53 push %r11 ffffffff80005a66: 41 52 push %r10 ffffffff80005a68: 41 51 push %r9 ffffffff80005a6a: 41 50 push %r8 ffffffff80005a6c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005a6d: 48 8b 3d dc 55 00 00 mov 0x55dc(%rip),%rdi # ffffffff8000b050 <_ZN3Hal16ExceptionStringsE+0x50> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005a74: 56 push %rsi ffffffff80005a75: 51 push %rcx ffffffff80005a76: 52 push %rdx ffffffff80005a77: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005a78: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005a7d: c6 44 24 70 0a movb $0xa,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005a82: fc cld ffffffff80005a83: e8 28 f4 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005a88: 58 pop %rax ffffffff80005a89: 5a pop %rdx ffffffff80005a8a: 59 pop %rcx ffffffff80005a8b: 5e pop %rsi ffffffff80005a8c: 5f pop %rdi ffffffff80005a8d: 41 58 pop %r8 ffffffff80005a8f: 41 59 pop %r9 ffffffff80005a91: 41 5a pop %r10 ffffffff80005a93: 41 5b pop %r11 ffffffff80005a95: 48 cf iretq ffffffff80005a97: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005a9e: 00 00 ffffffff80005aa0 <_ZN3Hal16ExceptionHandlerILm11EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005aa0: f3 0f 1e fa endbr64 ffffffff80005aa4: 41 53 push %r11 ffffffff80005aa6: 41 52 push %r10 ffffffff80005aa8: 41 51 push %r9 ffffffff80005aaa: 41 50 push %r8 ffffffff80005aac: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005aad: 48 8b 3d a4 55 00 00 mov 0x55a4(%rip),%rdi # ffffffff8000b058 <_ZN3Hal16ExceptionStringsE+0x58> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005ab4: 56 push %rsi ffffffff80005ab5: 51 push %rcx ffffffff80005ab6: 52 push %rdx ffffffff80005ab7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005ab8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005abd: c6 44 24 70 0b movb $0xb,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005ac2: fc cld ffffffff80005ac3: e8 e8 f3 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005ac8: 58 pop %rax ffffffff80005ac9: 5a pop %rdx ffffffff80005aca: 59 pop %rcx ffffffff80005acb: 5e pop %rsi ffffffff80005acc: 5f pop %rdi ffffffff80005acd: 41 58 pop %r8 ffffffff80005acf: 41 59 pop %r9 ffffffff80005ad1: 41 5a pop %r10 ffffffff80005ad3: 41 5b pop %r11 ffffffff80005ad5: 48 cf iretq ffffffff80005ad7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005ade: 00 00 ffffffff80005ae0 <_ZN3Hal16ExceptionHandlerILm12EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005ae0: f3 0f 1e fa endbr64 ffffffff80005ae4: 41 53 push %r11 ffffffff80005ae6: 41 52 push %r10 ffffffff80005ae8: 41 51 push %r9 ffffffff80005aea: 41 50 push %r8 ffffffff80005aec: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005aed: 48 8b 3d 6c 55 00 00 mov 0x556c(%rip),%rdi # ffffffff8000b060 <_ZN3Hal16ExceptionStringsE+0x60> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005af4: 56 push %rsi ffffffff80005af5: 51 push %rcx ffffffff80005af6: 52 push %rdx ffffffff80005af7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005af8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005afd: c6 44 24 70 0c movb $0xc,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005b02: fc cld ffffffff80005b03: e8 a8 f3 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005b08: 58 pop %rax ffffffff80005b09: 5a pop %rdx ffffffff80005b0a: 59 pop %rcx ffffffff80005b0b: 5e pop %rsi ffffffff80005b0c: 5f pop %rdi ffffffff80005b0d: 41 58 pop %r8 ffffffff80005b0f: 41 59 pop %r9 ffffffff80005b11: 41 5a pop %r10 ffffffff80005b13: 41 5b pop %r11 ffffffff80005b15: 48 cf iretq ffffffff80005b17: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005b1e: 00 00 ffffffff80005b20 <_ZN3Hal16ExceptionHandlerILm13EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005b20: f3 0f 1e fa endbr64 ffffffff80005b24: 41 53 push %r11 ffffffff80005b26: 41 52 push %r10 ffffffff80005b28: 41 51 push %r9 ffffffff80005b2a: 41 50 push %r8 ffffffff80005b2c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005b2d: 48 8b 3d 34 55 00 00 mov 0x5534(%rip),%rdi # ffffffff8000b068 <_ZN3Hal16ExceptionStringsE+0x68> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005b34: 56 push %rsi ffffffff80005b35: 51 push %rcx ffffffff80005b36: 52 push %rdx ffffffff80005b37: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005b38: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005b3d: c6 44 24 70 0d movb $0xd,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005b42: fc cld ffffffff80005b43: e8 68 f3 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005b48: 58 pop %rax ffffffff80005b49: 5a pop %rdx ffffffff80005b4a: 59 pop %rcx ffffffff80005b4b: 5e pop %rsi ffffffff80005b4c: 5f pop %rdi ffffffff80005b4d: 41 58 pop %r8 ffffffff80005b4f: 41 59 pop %r9 ffffffff80005b51: 41 5a pop %r10 ffffffff80005b53: 41 5b pop %r11 ffffffff80005b55: 48 cf iretq ffffffff80005b57: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005b5e: 00 00 ffffffff80005b60 <_ZN3Hal16ExceptionHandlerILm14EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005b60: f3 0f 1e fa endbr64 ffffffff80005b64: 41 53 push %r11 ffffffff80005b66: 41 52 push %r10 ffffffff80005b68: 41 51 push %r9 ffffffff80005b6a: 41 50 push %r8 ffffffff80005b6c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005b6d: 48 8b 3d fc 54 00 00 mov 0x54fc(%rip),%rdi # ffffffff8000b070 <_ZN3Hal16ExceptionStringsE+0x70> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005b74: 56 push %rsi ffffffff80005b75: 51 push %rcx ffffffff80005b76: 52 push %rdx ffffffff80005b77: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005b78: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005b7d: c6 44 24 70 0e movb $0xe,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005b82: fc cld ffffffff80005b83: e8 28 f3 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005b88: 58 pop %rax ffffffff80005b89: 5a pop %rdx ffffffff80005b8a: 59 pop %rcx ffffffff80005b8b: 5e pop %rsi ffffffff80005b8c: 5f pop %rdi ffffffff80005b8d: 41 58 pop %r8 ffffffff80005b8f: 41 59 pop %r9 ffffffff80005b91: 41 5a pop %r10 ffffffff80005b93: 41 5b pop %r11 ffffffff80005b95: 48 cf iretq ffffffff80005b97: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005b9e: 00 00 ffffffff80005ba0 <_ZN3Hal16ExceptionHandlerILm15EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005ba0: f3 0f 1e fa endbr64 ffffffff80005ba4: 41 53 push %r11 ffffffff80005ba6: 41 52 push %r10 ffffffff80005ba8: 41 51 push %r9 ffffffff80005baa: 41 50 push %r8 ffffffff80005bac: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005bad: 48 8b 3d c4 54 00 00 mov 0x54c4(%rip),%rdi # ffffffff8000b078 <_ZN3Hal16ExceptionStringsE+0x78> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005bb4: 56 push %rsi ffffffff80005bb5: 51 push %rcx ffffffff80005bb6: 52 push %rdx ffffffff80005bb7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005bb8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005bbd: c6 44 24 70 0f movb $0xf,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005bc2: fc cld ffffffff80005bc3: e8 e8 f2 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005bc8: 58 pop %rax ffffffff80005bc9: 5a pop %rdx ffffffff80005bca: 59 pop %rcx ffffffff80005bcb: 5e pop %rsi ffffffff80005bcc: 5f pop %rdi ffffffff80005bcd: 41 58 pop %r8 ffffffff80005bcf: 41 59 pop %r9 ffffffff80005bd1: 41 5a pop %r10 ffffffff80005bd3: 41 5b pop %r11 ffffffff80005bd5: 48 cf iretq ffffffff80005bd7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005bde: 00 00 ffffffff80005be0 <_ZN3Hal16ExceptionHandlerILm16EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005be0: f3 0f 1e fa endbr64 ffffffff80005be4: 41 53 push %r11 ffffffff80005be6: 41 52 push %r10 ffffffff80005be8: 41 51 push %r9 ffffffff80005bea: 41 50 push %r8 ffffffff80005bec: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005bed: 48 8b 3d 8c 54 00 00 mov 0x548c(%rip),%rdi # ffffffff8000b080 <_ZN3Hal16ExceptionStringsE+0x80> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005bf4: 56 push %rsi ffffffff80005bf5: 51 push %rcx ffffffff80005bf6: 52 push %rdx ffffffff80005bf7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005bf8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005bfd: c6 44 24 70 10 movb $0x10,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005c02: fc cld ffffffff80005c03: e8 a8 f2 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005c08: 58 pop %rax ffffffff80005c09: 5a pop %rdx ffffffff80005c0a: 59 pop %rcx ffffffff80005c0b: 5e pop %rsi ffffffff80005c0c: 5f pop %rdi ffffffff80005c0d: 41 58 pop %r8 ffffffff80005c0f: 41 59 pop %r9 ffffffff80005c11: 41 5a pop %r10 ffffffff80005c13: 41 5b pop %r11 ffffffff80005c15: 48 cf iretq ffffffff80005c17: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005c1e: 00 00 ffffffff80005c20 <_ZN3Hal16ExceptionHandlerILm17EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005c20: f3 0f 1e fa endbr64 ffffffff80005c24: 41 53 push %r11 ffffffff80005c26: 41 52 push %r10 ffffffff80005c28: 41 51 push %r9 ffffffff80005c2a: 41 50 push %r8 ffffffff80005c2c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005c2d: 48 8b 3d 54 54 00 00 mov 0x5454(%rip),%rdi # ffffffff8000b088 <_ZN3Hal16ExceptionStringsE+0x88> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005c34: 56 push %rsi ffffffff80005c35: 51 push %rcx ffffffff80005c36: 52 push %rdx ffffffff80005c37: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005c38: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005c3d: c6 44 24 70 11 movb $0x11,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005c42: fc cld ffffffff80005c43: e8 68 f2 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005c48: 58 pop %rax ffffffff80005c49: 5a pop %rdx ffffffff80005c4a: 59 pop %rcx ffffffff80005c4b: 5e pop %rsi ffffffff80005c4c: 5f pop %rdi ffffffff80005c4d: 41 58 pop %r8 ffffffff80005c4f: 41 59 pop %r9 ffffffff80005c51: 41 5a pop %r10 ffffffff80005c53: 41 5b pop %r11 ffffffff80005c55: 48 cf iretq ffffffff80005c57: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005c5e: 00 00 ffffffff80005c60 <_ZN3Hal16ExceptionHandlerILm18EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005c60: f3 0f 1e fa endbr64 ffffffff80005c64: 41 53 push %r11 ffffffff80005c66: 41 52 push %r10 ffffffff80005c68: 41 51 push %r9 ffffffff80005c6a: 41 50 push %r8 ffffffff80005c6c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005c6d: 48 8b 3d 1c 54 00 00 mov 0x541c(%rip),%rdi # ffffffff8000b090 <_ZN3Hal16ExceptionStringsE+0x90> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005c74: 56 push %rsi ffffffff80005c75: 51 push %rcx ffffffff80005c76: 52 push %rdx ffffffff80005c77: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005c78: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005c7d: c6 44 24 70 12 movb $0x12,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005c82: fc cld ffffffff80005c83: e8 28 f2 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005c88: 58 pop %rax ffffffff80005c89: 5a pop %rdx ffffffff80005c8a: 59 pop %rcx ffffffff80005c8b: 5e pop %rsi ffffffff80005c8c: 5f pop %rdi ffffffff80005c8d: 41 58 pop %r8 ffffffff80005c8f: 41 59 pop %r9 ffffffff80005c91: 41 5a pop %r10 ffffffff80005c93: 41 5b pop %r11 ffffffff80005c95: 48 cf iretq ffffffff80005c97: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005c9e: 00 00 ffffffff80005ca0 <_ZN3Hal16ExceptionHandlerILm19EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005ca0: f3 0f 1e fa endbr64 ffffffff80005ca4: 41 53 push %r11 ffffffff80005ca6: 41 52 push %r10 ffffffff80005ca8: 41 51 push %r9 ffffffff80005caa: 41 50 push %r8 ffffffff80005cac: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005cad: 48 8b 3d e4 53 00 00 mov 0x53e4(%rip),%rdi # ffffffff8000b098 <_ZN3Hal16ExceptionStringsE+0x98> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005cb4: 56 push %rsi ffffffff80005cb5: 51 push %rcx ffffffff80005cb6: 52 push %rdx ffffffff80005cb7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005cb8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005cbd: c6 44 24 70 13 movb $0x13,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005cc2: fc cld ffffffff80005cc3: e8 e8 f1 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005cc8: 58 pop %rax ffffffff80005cc9: 5a pop %rdx ffffffff80005cca: 59 pop %rcx ffffffff80005ccb: 5e pop %rsi ffffffff80005ccc: 5f pop %rdi ffffffff80005ccd: 41 58 pop %r8 ffffffff80005ccf: 41 59 pop %r9 ffffffff80005cd1: 41 5a pop %r10 ffffffff80005cd3: 41 5b pop %r11 ffffffff80005cd5: 48 cf iretq ffffffff80005cd7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005cde: 00 00 ffffffff80005ce0 <_ZN3Hal16ExceptionHandlerILm20EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005ce0: f3 0f 1e fa endbr64 ffffffff80005ce4: 41 53 push %r11 ffffffff80005ce6: 41 52 push %r10 ffffffff80005ce8: 41 51 push %r9 ffffffff80005cea: 41 50 push %r8 ffffffff80005cec: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005ced: 48 8b 3d ac 53 00 00 mov 0x53ac(%rip),%rdi # ffffffff8000b0a0 <_ZN3Hal16ExceptionStringsE+0xa0> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005cf4: 56 push %rsi ffffffff80005cf5: 51 push %rcx ffffffff80005cf6: 52 push %rdx ffffffff80005cf7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005cf8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005cfd: c6 44 24 70 14 movb $0x14,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005d02: fc cld ffffffff80005d03: e8 a8 f1 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005d08: 58 pop %rax ffffffff80005d09: 5a pop %rdx ffffffff80005d0a: 59 pop %rcx ffffffff80005d0b: 5e pop %rsi ffffffff80005d0c: 5f pop %rdi ffffffff80005d0d: 41 58 pop %r8 ffffffff80005d0f: 41 59 pop %r9 ffffffff80005d11: 41 5a pop %r10 ffffffff80005d13: 41 5b pop %r11 ffffffff80005d15: 48 cf iretq ffffffff80005d17: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005d1e: 00 00 ffffffff80005d20 <_ZN3Hal16ExceptionHandlerILm21EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005d20: f3 0f 1e fa endbr64 ffffffff80005d24: 41 53 push %r11 ffffffff80005d26: 41 52 push %r10 ffffffff80005d28: 41 51 push %r9 ffffffff80005d2a: 41 50 push %r8 ffffffff80005d2c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005d2d: 48 8b 3d 74 53 00 00 mov 0x5374(%rip),%rdi # ffffffff8000b0a8 <_ZN3Hal16ExceptionStringsE+0xa8> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005d34: 56 push %rsi ffffffff80005d35: 51 push %rcx ffffffff80005d36: 52 push %rdx ffffffff80005d37: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005d38: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005d3d: c6 44 24 70 15 movb $0x15,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005d42: fc cld ffffffff80005d43: e8 68 f1 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005d48: 58 pop %rax ffffffff80005d49: 5a pop %rdx ffffffff80005d4a: 59 pop %rcx ffffffff80005d4b: 5e pop %rsi ffffffff80005d4c: 5f pop %rdi ffffffff80005d4d: 41 58 pop %r8 ffffffff80005d4f: 41 59 pop %r9 ffffffff80005d51: 41 5a pop %r10 ffffffff80005d53: 41 5b pop %r11 ffffffff80005d55: 48 cf iretq ffffffff80005d57: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005d5e: 00 00 ffffffff80005d60 <_ZN3Hal16ExceptionHandlerILm22EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005d60: f3 0f 1e fa endbr64 ffffffff80005d64: 41 53 push %r11 ffffffff80005d66: 41 52 push %r10 ffffffff80005d68: 41 51 push %r9 ffffffff80005d6a: 41 50 push %r8 ffffffff80005d6c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005d6d: 48 8b 3d 3c 53 00 00 mov 0x533c(%rip),%rdi # ffffffff8000b0b0 <_ZN3Hal16ExceptionStringsE+0xb0> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005d74: 56 push %rsi ffffffff80005d75: 51 push %rcx ffffffff80005d76: 52 push %rdx ffffffff80005d77: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005d78: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005d7d: c6 44 24 70 16 movb $0x16,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005d82: fc cld ffffffff80005d83: e8 28 f1 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005d88: 58 pop %rax ffffffff80005d89: 5a pop %rdx ffffffff80005d8a: 59 pop %rcx ffffffff80005d8b: 5e pop %rsi ffffffff80005d8c: 5f pop %rdi ffffffff80005d8d: 41 58 pop %r8 ffffffff80005d8f: 41 59 pop %r9 ffffffff80005d91: 41 5a pop %r10 ffffffff80005d93: 41 5b pop %r11 ffffffff80005d95: 48 cf iretq ffffffff80005d97: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005d9e: 00 00 ffffffff80005da0 <_ZN3Hal16ExceptionHandlerILm23EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005da0: f3 0f 1e fa endbr64 ffffffff80005da4: 41 53 push %r11 ffffffff80005da6: 41 52 push %r10 ffffffff80005da8: 41 51 push %r9 ffffffff80005daa: 41 50 push %r8 ffffffff80005dac: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005dad: 48 8b 3d 04 53 00 00 mov 0x5304(%rip),%rdi # ffffffff8000b0b8 <_ZN3Hal16ExceptionStringsE+0xb8> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005db4: 56 push %rsi ffffffff80005db5: 51 push %rcx ffffffff80005db6: 52 push %rdx ffffffff80005db7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005db8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005dbd: c6 44 24 70 17 movb $0x17,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005dc2: fc cld ffffffff80005dc3: e8 e8 f0 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005dc8: 58 pop %rax ffffffff80005dc9: 5a pop %rdx ffffffff80005dca: 59 pop %rcx ffffffff80005dcb: 5e pop %rsi ffffffff80005dcc: 5f pop %rdi ffffffff80005dcd: 41 58 pop %r8 ffffffff80005dcf: 41 59 pop %r9 ffffffff80005dd1: 41 5a pop %r10 ffffffff80005dd3: 41 5b pop %r11 ffffffff80005dd5: 48 cf iretq ffffffff80005dd7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005dde: 00 00 ffffffff80005de0 <_ZN3Hal16ExceptionHandlerILm24EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005de0: f3 0f 1e fa endbr64 ffffffff80005de4: 41 53 push %r11 ffffffff80005de6: 41 52 push %r10 ffffffff80005de8: 41 51 push %r9 ffffffff80005dea: 41 50 push %r8 ffffffff80005dec: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005ded: 48 8b 3d cc 52 00 00 mov 0x52cc(%rip),%rdi # ffffffff8000b0c0 <_ZN3Hal16ExceptionStringsE+0xc0> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005df4: 56 push %rsi ffffffff80005df5: 51 push %rcx ffffffff80005df6: 52 push %rdx ffffffff80005df7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005df8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005dfd: c6 44 24 70 18 movb $0x18,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005e02: fc cld ffffffff80005e03: e8 a8 f0 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005e08: 58 pop %rax ffffffff80005e09: 5a pop %rdx ffffffff80005e0a: 59 pop %rcx ffffffff80005e0b: 5e pop %rsi ffffffff80005e0c: 5f pop %rdi ffffffff80005e0d: 41 58 pop %r8 ffffffff80005e0f: 41 59 pop %r9 ffffffff80005e11: 41 5a pop %r10 ffffffff80005e13: 41 5b pop %r11 ffffffff80005e15: 48 cf iretq ffffffff80005e17: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005e1e: 00 00 ffffffff80005e20 <_ZN3Hal16ExceptionHandlerILm25EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005e20: f3 0f 1e fa endbr64 ffffffff80005e24: 41 53 push %r11 ffffffff80005e26: 41 52 push %r10 ffffffff80005e28: 41 51 push %r9 ffffffff80005e2a: 41 50 push %r8 ffffffff80005e2c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005e2d: 48 8b 3d 94 52 00 00 mov 0x5294(%rip),%rdi # ffffffff8000b0c8 <_ZN3Hal16ExceptionStringsE+0xc8> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005e34: 56 push %rsi ffffffff80005e35: 51 push %rcx ffffffff80005e36: 52 push %rdx ffffffff80005e37: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005e38: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005e3d: c6 44 24 70 19 movb $0x19,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005e42: fc cld ffffffff80005e43: e8 68 f0 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005e48: 58 pop %rax ffffffff80005e49: 5a pop %rdx ffffffff80005e4a: 59 pop %rcx ffffffff80005e4b: 5e pop %rsi ffffffff80005e4c: 5f pop %rdi ffffffff80005e4d: 41 58 pop %r8 ffffffff80005e4f: 41 59 pop %r9 ffffffff80005e51: 41 5a pop %r10 ffffffff80005e53: 41 5b pop %r11 ffffffff80005e55: 48 cf iretq ffffffff80005e57: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005e5e: 00 00 ffffffff80005e60 <_ZN3Hal16ExceptionHandlerILm26EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005e60: f3 0f 1e fa endbr64 ffffffff80005e64: 41 53 push %r11 ffffffff80005e66: 41 52 push %r10 ffffffff80005e68: 41 51 push %r9 ffffffff80005e6a: 41 50 push %r8 ffffffff80005e6c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005e6d: 48 8b 3d 5c 52 00 00 mov 0x525c(%rip),%rdi # ffffffff8000b0d0 <_ZN3Hal16ExceptionStringsE+0xd0> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005e74: 56 push %rsi ffffffff80005e75: 51 push %rcx ffffffff80005e76: 52 push %rdx ffffffff80005e77: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005e78: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005e7d: c6 44 24 70 1a movb $0x1a,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005e82: fc cld ffffffff80005e83: e8 28 f0 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005e88: 58 pop %rax ffffffff80005e89: 5a pop %rdx ffffffff80005e8a: 59 pop %rcx ffffffff80005e8b: 5e pop %rsi ffffffff80005e8c: 5f pop %rdi ffffffff80005e8d: 41 58 pop %r8 ffffffff80005e8f: 41 59 pop %r9 ffffffff80005e91: 41 5a pop %r10 ffffffff80005e93: 41 5b pop %r11 ffffffff80005e95: 48 cf iretq ffffffff80005e97: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005e9e: 00 00 ffffffff80005ea0 <_ZN3Hal16ExceptionHandlerILm27EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005ea0: f3 0f 1e fa endbr64 ffffffff80005ea4: 41 53 push %r11 ffffffff80005ea6: 41 52 push %r10 ffffffff80005ea8: 41 51 push %r9 ffffffff80005eaa: 41 50 push %r8 ffffffff80005eac: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005ead: 48 8b 3d 24 52 00 00 mov 0x5224(%rip),%rdi # ffffffff8000b0d8 <_ZN3Hal16ExceptionStringsE+0xd8> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005eb4: 56 push %rsi ffffffff80005eb5: 51 push %rcx ffffffff80005eb6: 52 push %rdx ffffffff80005eb7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005eb8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005ebd: c6 44 24 70 1b movb $0x1b,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005ec2: fc cld ffffffff80005ec3: e8 e8 ef ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005ec8: 58 pop %rax ffffffff80005ec9: 5a pop %rdx ffffffff80005eca: 59 pop %rcx ffffffff80005ecb: 5e pop %rsi ffffffff80005ecc: 5f pop %rdi ffffffff80005ecd: 41 58 pop %r8 ffffffff80005ecf: 41 59 pop %r9 ffffffff80005ed1: 41 5a pop %r10 ffffffff80005ed3: 41 5b pop %r11 ffffffff80005ed5: 48 cf iretq ffffffff80005ed7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005ede: 00 00 ffffffff80005ee0 <_ZN3Hal16ExceptionHandlerILm28EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005ee0: f3 0f 1e fa endbr64 ffffffff80005ee4: 41 53 push %r11 ffffffff80005ee6: 41 52 push %r10 ffffffff80005ee8: 41 51 push %r9 ffffffff80005eea: 41 50 push %r8 ffffffff80005eec: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005eed: 48 8b 3d ec 51 00 00 mov 0x51ec(%rip),%rdi # ffffffff8000b0e0 <_ZN3Hal16ExceptionStringsE+0xe0> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005ef4: 56 push %rsi ffffffff80005ef5: 51 push %rcx ffffffff80005ef6: 52 push %rdx ffffffff80005ef7: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005ef8: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005efd: c6 44 24 70 1c movb $0x1c,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005f02: fc cld ffffffff80005f03: e8 a8 ef ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005f08: 58 pop %rax ffffffff80005f09: 5a pop %rdx ffffffff80005f0a: 59 pop %rcx ffffffff80005f0b: 5e pop %rsi ffffffff80005f0c: 5f pop %rdi ffffffff80005f0d: 41 58 pop %r8 ffffffff80005f0f: 41 59 pop %r9 ffffffff80005f11: 41 5a pop %r10 ffffffff80005f13: 41 5b pop %r11 ffffffff80005f15: 48 cf iretq ffffffff80005f17: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005f1e: 00 00 ffffffff80005f20 <_ZN3Hal16ExceptionHandlerILm29EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005f20: f3 0f 1e fa endbr64 ffffffff80005f24: 41 53 push %r11 ffffffff80005f26: 41 52 push %r10 ffffffff80005f28: 41 51 push %r9 ffffffff80005f2a: 41 50 push %r8 ffffffff80005f2c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005f2d: 48 8b 3d b4 51 00 00 mov 0x51b4(%rip),%rdi # ffffffff8000b0e8 <_ZN3Hal16ExceptionStringsE+0xe8> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005f34: 56 push %rsi ffffffff80005f35: 51 push %rcx ffffffff80005f36: 52 push %rdx ffffffff80005f37: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005f38: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005f3d: c6 44 24 70 1d movb $0x1d,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005f42: fc cld ffffffff80005f43: e8 68 ef ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005f48: 58 pop %rax ffffffff80005f49: 5a pop %rdx ffffffff80005f4a: 59 pop %rcx ffffffff80005f4b: 5e pop %rsi ffffffff80005f4c: 5f pop %rdi ffffffff80005f4d: 41 58 pop %r8 ffffffff80005f4f: 41 59 pop %r9 ffffffff80005f51: 41 5a pop %r10 ffffffff80005f53: 41 5b pop %r11 ffffffff80005f55: 48 cf iretq ffffffff80005f57: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005f5e: 00 00 ffffffff80005f60 <_ZN3Hal16ExceptionHandlerILm30EEEvPN6System10PanicFrameE>: __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005f60: f3 0f 1e fa endbr64 ffffffff80005f64: 41 53 push %r11 ffffffff80005f66: 41 52 push %r10 ffffffff80005f68: 41 51 push %r9 ffffffff80005f6a: 41 50 push %r8 ffffffff80005f6c: 57 push %rdi Panic(ExceptionStrings[i], frame); ffffffff80005f6d: 48 8b 3d 7c 51 00 00 mov 0x517c(%rip),%rdi # ffffffff8000b0f0 <_ZN3Hal16ExceptionStringsE+0xf0> __attribute__((interrupt)) void ExceptionHandler(System::PanicFrame* frame) ffffffff80005f74: 56 push %rsi ffffffff80005f75: 51 push %rcx ffffffff80005f76: 52 push %rdx ffffffff80005f77: 50 push %rax Panic(ExceptionStrings[i], frame); ffffffff80005f78: 48 8d 74 24 48 lea 0x48(%rsp),%rsi frame->InterruptVector = i; ffffffff80005f7d: c6 44 24 70 1e movb $0x1e,0x70(%rsp) Panic(ExceptionStrings[i], frame); ffffffff80005f82: fc cld ffffffff80005f83: e8 28 ef ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80005f88: 58 pop %rax ffffffff80005f89: 5a pop %rdx ffffffff80005f8a: 59 pop %rcx ffffffff80005f8b: 5e pop %rsi ffffffff80005f8c: 5f pop %rdi ffffffff80005f8d: 41 58 pop %r8 ffffffff80005f8f: 41 59 pop %r9 ffffffff80005f91: 41 5a pop %r10 ffffffff80005f93: 41 5b pop %r11 ffffffff80005f95: 48 cf iretq ffffffff80005f97: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80005f9e: 00 00 ffffffff80005fa0 <_ZN3Hal10SetHandlerILi23ELi31EE3runEv>: }; } template struct SetHandler { static void run() { ffffffff80005fa0: f3 0f 1e fa endbr64 InterruptDescriptor* descriptor = (InterruptDescriptor*)(IDTR.Base + index * sizeof(InterruptDescriptor)); ffffffff80005fa4: 48 8b 05 f7 a3 0d 00 mov 0xda3f7(%rip),%rax # ffffffff800e03a2 <_ZN3Hal4IDTRE+0x2> uint64_t offset = (uint64_t)handler; ffffffff80005fab: 48 c7 c2 a0 5d 00 80 mov $0xffffffff80005da0,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80005fb2: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff80005fb5: 66 89 90 70 01 00 00 mov %dx,0x170(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80005fbc: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80005fc0: 48 c1 ee 10 shr $0x10,%rsi InterruptDescriptor* descriptor = (InterruptDescriptor*)(IDTR.Base + index * sizeof(InterruptDescriptor)); ffffffff80005fc4: 48 8d 88 e0 01 00 00 lea 0x1e0(%rax),%rcx *ptr = InterruptDescriptor { ffffffff80005fcb: 89 90 78 01 00 00 mov %edx,0x178(%rax) uint64_t offset = (uint64_t)handler; ffffffff80005fd1: 48 c7 c2 e0 5d 00 80 mov $0xffffffff80005de0,%rdx *ptr = InterruptDescriptor { ffffffff80005fd8: 66 89 b0 76 01 00 00 mov %si,0x176(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80005fdf: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff80005fe2: 66 89 90 80 01 00 00 mov %dx,0x180(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80005fe9: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80005fed: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff80005ff1: 89 90 88 01 00 00 mov %edx,0x188(%rax) uint64_t offset = (uint64_t)handler; ffffffff80005ff7: 48 c7 c2 20 5e 00 80 mov $0xffffffff80005e20,%rdx *ptr = InterruptDescriptor { ffffffff80005ffe: 66 89 b0 86 01 00 00 mov %si,0x186(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006005: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff80006008: 66 89 90 90 01 00 00 mov %dx,0x190(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff8000600f: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006013: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff80006017: 89 90 98 01 00 00 mov %edx,0x198(%rax) uint64_t offset = (uint64_t)handler; ffffffff8000601d: 48 c7 c2 60 5e 00 80 mov $0xffffffff80005e60,%rdx *ptr = InterruptDescriptor { ffffffff80006024: 66 89 b0 96 01 00 00 mov %si,0x196(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000602b: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff8000602e: 66 89 90 a0 01 00 00 mov %dx,0x1a0(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006035: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006039: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff8000603d: 89 90 a8 01 00 00 mov %edx,0x1a8(%rax) uint64_t offset = (uint64_t)handler; ffffffff80006043: 48 c7 c2 a0 5e 00 80 mov $0xffffffff80005ea0,%rdx *ptr = InterruptDescriptor { ffffffff8000604a: 66 89 b0 a6 01 00 00 mov %si,0x1a6(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006051: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff80006054: 66 89 90 b0 01 00 00 mov %dx,0x1b0(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff8000605b: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000605f: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff80006063: 89 90 b8 01 00 00 mov %edx,0x1b8(%rax) uint64_t offset = (uint64_t)handler; ffffffff80006069: 48 c7 c2 e0 5e 00 80 mov $0xffffffff80005ee0,%rdx *ptr = InterruptDescriptor { ffffffff80006070: 66 89 b0 b6 01 00 00 mov %si,0x1b6(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006077: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff8000607a: 66 89 90 c0 01 00 00 mov %dx,0x1c0(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006081: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006085: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff80006089: 89 90 c8 01 00 00 mov %edx,0x1c8(%rax) uint64_t offset = (uint64_t)handler; ffffffff8000608f: 48 c7 c2 20 5f 00 80 mov $0xffffffff80005f20,%rdx *ptr = InterruptDescriptor { ffffffff80006096: 66 89 b0 c6 01 00 00 mov %si,0x1c6(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000609d: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff800060a0: 66 89 90 d0 01 00 00 mov %dx,0x1d0(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff800060a7: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800060ab: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff800060af: c7 80 72 01 00 00 08 movl $0x8f000008,0x172(%rax) ffffffff800060b6: 00 00 8f ffffffff800060b9: c7 80 7c 01 00 00 00 movl $0x0,0x17c(%rax) ffffffff800060c0: 00 00 00 ffffffff800060c3: c7 80 82 01 00 00 08 movl $0x8f000008,0x182(%rax) ffffffff800060ca: 00 00 8f ffffffff800060cd: c7 80 8c 01 00 00 00 movl $0x0,0x18c(%rax) ffffffff800060d4: 00 00 00 ffffffff800060d7: c7 80 92 01 00 00 08 movl $0x8f000008,0x192(%rax) ffffffff800060de: 00 00 8f ffffffff800060e1: c7 80 9c 01 00 00 00 movl $0x0,0x19c(%rax) ffffffff800060e8: 00 00 00 ffffffff800060eb: c7 80 a2 01 00 00 08 movl $0x8f000008,0x1a2(%rax) ffffffff800060f2: 00 00 8f ffffffff800060f5: c7 80 ac 01 00 00 00 movl $0x0,0x1ac(%rax) ffffffff800060fc: 00 00 00 ffffffff800060ff: c7 80 b2 01 00 00 08 movl $0x8f000008,0x1b2(%rax) ffffffff80006106: 00 00 8f ffffffff80006109: c7 80 bc 01 00 00 00 movl $0x0,0x1bc(%rax) ffffffff80006110: 00 00 00 ffffffff80006113: c7 80 c2 01 00 00 08 movl $0x8f000008,0x1c2(%rax) ffffffff8000611a: 00 00 8f ffffffff8000611d: c7 80 cc 01 00 00 00 movl $0x0,0x1cc(%rax) ffffffff80006124: 00 00 00 ffffffff80006127: c7 80 d2 01 00 00 08 movl $0x8f000008,0x1d2(%rax) ffffffff8000612e: 00 00 8f ffffffff80006131: 89 90 d8 01 00 00 mov %edx,0x1d8(%rax) uint64_t offset = (uint64_t)handler; ffffffff80006137: 48 c7 c2 60 5f 00 80 mov $0xffffffff80005f60,%rdx *ptr = InterruptDescriptor { ffffffff8000613e: 66 89 90 e0 01 00 00 mov %dx,0x1e0(%rax) ffffffff80006145: 66 89 b0 d6 01 00 00 mov %si,0x1d6(%rax) ffffffff8000614c: c7 80 dc 01 00 00 00 movl $0x0,0x1dc(%rax) ffffffff80006153: 00 00 00 ffffffff80006156: c7 80 e2 01 00 00 08 movl $0x8f000008,0x1e2(%rax) ffffffff8000615d: 00 00 8f .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006160: 48 89 d0 mov %rdx,%rax .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006163: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006167: 48 c1 e8 10 shr $0x10,%rax *ptr = InterruptDescriptor { ffffffff8000616b: 89 51 08 mov %edx,0x8(%rcx) ffffffff8000616e: 66 89 41 06 mov %ax,0x6(%rcx) ffffffff80006172: c7 41 0c 00 00 00 00 movl $0x0,0xc(%rcx) IDTEncodeInterrupt(I, (void*)&ExceptionHandler, TrapGate); SetHandler::run(); } ffffffff80006179: c3 ret ffffffff8000617a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) ffffffff80006180 <_ZN3Hal10SetHandlerILi11ELi31EE3runEv>: static void run() { ffffffff80006180: f3 0f 1e fa endbr64 InterruptDescriptor* descriptor = (InterruptDescriptor*)(IDTR.Base + index * sizeof(InterruptDescriptor)); ffffffff80006184: 48 8b 05 17 a2 0d 00 mov 0xda217(%rip),%rax # ffffffff800e03a2 <_ZN3Hal4IDTRE+0x2> uint64_t offset = (uint64_t)handler; ffffffff8000618b: 48 c7 c2 a0 5a 00 80 mov $0xffffffff80005aa0,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006192: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff80006195: 66 89 90 b0 00 00 00 mov %dx,0xb0(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff8000619c: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800061a0: 48 c1 ee 10 shr $0x10,%rsi InterruptDescriptor* descriptor = (InterruptDescriptor*)(IDTR.Base + index * sizeof(InterruptDescriptor)); ffffffff800061a4: 48 8d 88 60 01 00 00 lea 0x160(%rax),%rcx *ptr = InterruptDescriptor { ffffffff800061ab: 89 90 b8 00 00 00 mov %edx,0xb8(%rax) uint64_t offset = (uint64_t)handler; ffffffff800061b1: 48 c7 c2 e0 5a 00 80 mov $0xffffffff80005ae0,%rdx *ptr = InterruptDescriptor { ffffffff800061b8: 66 89 b0 b6 00 00 00 mov %si,0xb6(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800061bf: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff800061c2: 66 89 90 c0 00 00 00 mov %dx,0xc0(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff800061c9: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800061cd: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff800061d1: 89 90 c8 00 00 00 mov %edx,0xc8(%rax) uint64_t offset = (uint64_t)handler; ffffffff800061d7: 48 c7 c2 20 5b 00 80 mov $0xffffffff80005b20,%rdx *ptr = InterruptDescriptor { ffffffff800061de: 66 89 b0 c6 00 00 00 mov %si,0xc6(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800061e5: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff800061e8: 66 89 90 d0 00 00 00 mov %dx,0xd0(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff800061ef: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800061f3: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff800061f7: 89 90 d8 00 00 00 mov %edx,0xd8(%rax) uint64_t offset = (uint64_t)handler; ffffffff800061fd: 48 c7 c2 60 5b 00 80 mov $0xffffffff80005b60,%rdx *ptr = InterruptDescriptor { ffffffff80006204: 66 89 b0 d6 00 00 00 mov %si,0xd6(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000620b: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff8000620e: 66 89 90 e0 00 00 00 mov %dx,0xe0(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006215: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006219: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff8000621d: 89 90 e8 00 00 00 mov %edx,0xe8(%rax) uint64_t offset = (uint64_t)handler; ffffffff80006223: 48 c7 c2 a0 5b 00 80 mov $0xffffffff80005ba0,%rdx *ptr = InterruptDescriptor { ffffffff8000622a: 66 89 b0 e6 00 00 00 mov %si,0xe6(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006231: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff80006234: 66 89 90 f0 00 00 00 mov %dx,0xf0(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff8000623b: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000623f: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff80006243: 89 90 f8 00 00 00 mov %edx,0xf8(%rax) uint64_t offset = (uint64_t)handler; ffffffff80006249: 48 c7 c2 e0 5b 00 80 mov $0xffffffff80005be0,%rdx *ptr = InterruptDescriptor { ffffffff80006250: 66 89 b0 f6 00 00 00 mov %si,0xf6(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006257: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff8000625a: 66 89 90 00 01 00 00 mov %dx,0x100(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006261: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006265: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff80006269: 89 90 08 01 00 00 mov %edx,0x108(%rax) uint64_t offset = (uint64_t)handler; ffffffff8000626f: 48 c7 c2 20 5c 00 80 mov $0xffffffff80005c20,%rdx *ptr = InterruptDescriptor { ffffffff80006276: 66 89 b0 06 01 00 00 mov %si,0x106(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000627d: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff80006280: 66 89 90 10 01 00 00 mov %dx,0x110(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006287: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000628b: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff8000628f: c7 80 b2 00 00 00 08 movl $0x8f000008,0xb2(%rax) ffffffff80006296: 00 00 8f ffffffff80006299: c7 80 bc 00 00 00 00 movl $0x0,0xbc(%rax) ffffffff800062a0: 00 00 00 ffffffff800062a3: c7 80 c2 00 00 00 08 movl $0x8f000008,0xc2(%rax) ffffffff800062aa: 00 00 8f ffffffff800062ad: c7 80 cc 00 00 00 00 movl $0x0,0xcc(%rax) ffffffff800062b4: 00 00 00 ffffffff800062b7: c7 80 d2 00 00 00 08 movl $0x8f000008,0xd2(%rax) ffffffff800062be: 00 00 8f ffffffff800062c1: c7 80 dc 00 00 00 00 movl $0x0,0xdc(%rax) ffffffff800062c8: 00 00 00 ffffffff800062cb: c7 80 e2 00 00 00 08 movl $0x8f000008,0xe2(%rax) ffffffff800062d2: 00 00 8f ffffffff800062d5: c7 80 ec 00 00 00 00 movl $0x0,0xec(%rax) ffffffff800062dc: 00 00 00 ffffffff800062df: c7 80 f2 00 00 00 08 movl $0x8f000008,0xf2(%rax) ffffffff800062e6: 00 00 8f ffffffff800062e9: c7 80 fc 00 00 00 00 movl $0x0,0xfc(%rax) ffffffff800062f0: 00 00 00 ffffffff800062f3: c7 80 02 01 00 00 08 movl $0x8f000008,0x102(%rax) ffffffff800062fa: 00 00 8f ffffffff800062fd: c7 80 0c 01 00 00 00 movl $0x0,0x10c(%rax) ffffffff80006304: 00 00 00 ffffffff80006307: c7 80 12 01 00 00 08 movl $0x8f000008,0x112(%rax) ffffffff8000630e: 00 00 8f ffffffff80006311: 89 90 18 01 00 00 mov %edx,0x118(%rax) uint64_t offset = (uint64_t)handler; ffffffff80006317: 48 c7 c2 60 5c 00 80 mov $0xffffffff80005c60,%rdx *ptr = InterruptDescriptor { ffffffff8000631e: 66 89 b0 16 01 00 00 mov %si,0x116(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006325: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff80006328: 66 89 90 20 01 00 00 mov %dx,0x120(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff8000632f: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006333: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff80006337: 89 90 28 01 00 00 mov %edx,0x128(%rax) uint64_t offset = (uint64_t)handler; ffffffff8000633d: 48 c7 c2 a0 5c 00 80 mov $0xffffffff80005ca0,%rdx *ptr = InterruptDescriptor { ffffffff80006344: 66 89 b0 26 01 00 00 mov %si,0x126(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000634b: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff8000634e: 66 89 90 30 01 00 00 mov %dx,0x130(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006355: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006359: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff8000635d: 89 90 38 01 00 00 mov %edx,0x138(%rax) uint64_t offset = (uint64_t)handler; ffffffff80006363: 48 c7 c2 e0 5c 00 80 mov $0xffffffff80005ce0,%rdx *ptr = InterruptDescriptor { ffffffff8000636a: 66 89 b0 36 01 00 00 mov %si,0x136(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006371: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff80006374: 66 89 90 40 01 00 00 mov %dx,0x140(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff8000637b: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000637f: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff80006383: 89 90 48 01 00 00 mov %edx,0x148(%rax) uint64_t offset = (uint64_t)handler; ffffffff80006389: 48 c7 c2 20 5d 00 80 mov $0xffffffff80005d20,%rdx *ptr = InterruptDescriptor { ffffffff80006390: 66 89 b0 46 01 00 00 mov %si,0x146(%rax) .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006397: 48 89 d6 mov %rdx,%rsi *ptr = InterruptDescriptor { ffffffff8000639a: 66 89 90 50 01 00 00 mov %dx,0x150(%rax) .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff800063a1: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800063a5: 48 c1 ee 10 shr $0x10,%rsi *ptr = InterruptDescriptor { ffffffff800063a9: 89 90 58 01 00 00 mov %edx,0x158(%rax) uint64_t offset = (uint64_t)handler; ffffffff800063af: 48 c7 c2 60 5d 00 80 mov $0xffffffff80005d60,%rdx *ptr = InterruptDescriptor { ffffffff800063b6: 66 89 90 60 01 00 00 mov %dx,0x160(%rax) ffffffff800063bd: c7 80 1c 01 00 00 00 movl $0x0,0x11c(%rax) ffffffff800063c4: 00 00 00 ffffffff800063c7: c7 80 22 01 00 00 08 movl $0x8f000008,0x122(%rax) ffffffff800063ce: 00 00 8f ffffffff800063d1: c7 80 2c 01 00 00 00 movl $0x0,0x12c(%rax) ffffffff800063d8: 00 00 00 ffffffff800063db: c7 80 32 01 00 00 08 movl $0x8f000008,0x132(%rax) ffffffff800063e2: 00 00 8f ffffffff800063e5: c7 80 3c 01 00 00 00 movl $0x0,0x13c(%rax) ffffffff800063ec: 00 00 00 ffffffff800063ef: c7 80 42 01 00 00 08 movl $0x8f000008,0x142(%rax) ffffffff800063f6: 00 00 8f ffffffff800063f9: c7 80 4c 01 00 00 00 movl $0x0,0x14c(%rax) ffffffff80006400: 00 00 00 ffffffff80006403: c7 80 52 01 00 00 08 movl $0x8f000008,0x152(%rax) ffffffff8000640a: 00 00 8f ffffffff8000640d: 66 89 b0 56 01 00 00 mov %si,0x156(%rax) ffffffff80006414: c7 80 5c 01 00 00 00 movl $0x0,0x15c(%rax) ffffffff8000641b: 00 00 00 ffffffff8000641e: c7 80 62 01 00 00 08 movl $0x8f000008,0x162(%rax) ffffffff80006425: 00 00 8f .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006428: 48 89 d0 mov %rdx,%rax .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff8000642b: 48 c1 ea 20 shr $0x20,%rdx .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000642f: 48 c1 e8 10 shr $0x10,%rax *ptr = InterruptDescriptor { ffffffff80006433: 89 51 08 mov %edx,0x8(%rcx) ffffffff80006436: 66 89 41 06 mov %ax,0x6(%rcx) ffffffff8000643a: c7 41 0c 00 00 00 00 movl $0x0,0xc(%rcx) SetHandler::run(); ffffffff80006441: e9 5a fb ff ff jmp ffffffff80005fa0 <_ZN3Hal10SetHandlerILi23ELi31EE3runEv> ffffffff80006446: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff8000644d: 00 00 00 ffffffff80006450 <_ZN3Hal13IDTInitializeEv>: }; template struct SetHandler {static void run() {}}; void IDTInitialize() { ffffffff80006450: f3 0f 1e fa endbr64 ffffffff80006454: 48 83 ec 08 sub $0x8,%rsp IDT = (InterruptDescriptor*)Memory::g_heap->Request(4096); ffffffff80006458: 48 8b 3d 71 a3 0d 00 mov 0xda371(%rip),%rdi # ffffffff800e07d0 <_ZN6Memory6g_heapE> ffffffff8000645f: be 00 10 00 00 mov $0x1000,%esi ffffffff80006464: e8 57 07 00 00 call ffffffff80006bc0 <_ZN6Memory13HeapAllocator7RequestEm> IDTR.Limit = 0x0FF; ffffffff80006469: b8 ff 00 00 00 mov $0xff,%eax IDTR.Base = (uint64_t)&IDT; ffffffff8000646e: 48 c7 05 29 9f 0d 00 movq $0xffffffff800e03b0,0xd9f29(%rip) # ffffffff800e03a2 <_ZN3Hal4IDTRE+0x2> ffffffff80006475: b0 03 0e 80 IDTR.Limit = 0x0FF; ffffffff80006479: 66 89 05 20 9f 0d 00 mov %ax,0xd9f20(%rip) # ffffffff800e03a0 <_ZN3Hal4IDTRE> uint64_t offset = (uint64_t)handler; ffffffff80006480: 48 c7 c0 e0 57 00 80 mov $0xffffffff800057e0,%rax *ptr = InterruptDescriptor { ffffffff80006487: 66 89 05 22 9f 0d 00 mov %ax,0xd9f22(%rip) # ffffffff800e03b0 <_ZN3Hal3IDTE> .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000648e: 48 89 c2 mov %rax,%rdx .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006491: 48 c1 e8 20 shr $0x20,%rax .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006495: 48 c1 ea 10 shr $0x10,%rdx *ptr = InterruptDescriptor { ffffffff80006499: 89 05 19 9f 0d 00 mov %eax,0xd9f19(%rip) # ffffffff800e03b8 <_ZN3Hal3IDTE+0x8> uint64_t offset = (uint64_t)handler; ffffffff8000649f: 48 c7 c0 20 58 00 80 mov $0xffffffff80005820,%rax *ptr = InterruptDescriptor { ffffffff800064a6: 66 89 15 09 9f 0d 00 mov %dx,0xd9f09(%rip) # ffffffff800e03b6 <_ZN3Hal3IDTE+0x6> .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800064ad: 48 89 c2 mov %rax,%rdx *ptr = InterruptDescriptor { ffffffff800064b0: 66 89 05 09 9f 0d 00 mov %ax,0xd9f09(%rip) # ffffffff800e03c0 <_ZN3Lib6outputE> .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff800064b7: 48 c1 e8 20 shr $0x20,%rax .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800064bb: 48 c1 ea 10 shr $0x10,%rdx *ptr = InterruptDescriptor { ffffffff800064bf: 89 05 03 9f 0d 00 mov %eax,0xd9f03(%rip) # ffffffff800e03c8 <_ZN3Lib6outputE+0x8> uint64_t offset = (uint64_t)handler; ffffffff800064c5: 48 c7 c0 60 58 00 80 mov $0xffffffff80005860,%rax *ptr = InterruptDescriptor { ffffffff800064cc: 66 89 15 f3 9e 0d 00 mov %dx,0xd9ef3(%rip) # ffffffff800e03c6 <_ZN3Lib6outputE+0x6> .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800064d3: 48 89 c2 mov %rax,%rdx *ptr = InterruptDescriptor { ffffffff800064d6: 66 89 05 f3 9e 0d 00 mov %ax,0xd9ef3(%rip) # ffffffff800e03d0 <_ZN3Lib6outputE+0x10> .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff800064dd: 48 c1 e8 20 shr $0x20,%rax .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800064e1: 48 c1 ea 10 shr $0x10,%rdx *ptr = InterruptDescriptor { ffffffff800064e5: 89 05 ed 9e 0d 00 mov %eax,0xd9eed(%rip) # ffffffff800e03d8 <_ZN3Lib6outputE+0x18> uint64_t offset = (uint64_t)handler; ffffffff800064eb: 48 c7 c0 a0 58 00 80 mov $0xffffffff800058a0,%rax *ptr = InterruptDescriptor { ffffffff800064f2: 66 89 15 dd 9e 0d 00 mov %dx,0xd9edd(%rip) # ffffffff800e03d6 <_ZN3Lib6outputE+0x16> .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff800064f9: 48 89 c2 mov %rax,%rdx *ptr = InterruptDescriptor { ffffffff800064fc: 66 89 05 dd 9e 0d 00 mov %ax,0xd9edd(%rip) # ffffffff800e03e0 <_ZN3Lib6outputE+0x20> .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006503: 48 c1 e8 20 shr $0x20,%rax .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006507: 48 c1 ea 10 shr $0x10,%rdx *ptr = InterruptDescriptor { ffffffff8000650b: 89 05 d7 9e 0d 00 mov %eax,0xd9ed7(%rip) # ffffffff800e03e8 <_ZN3Lib6outputE+0x28> uint64_t offset = (uint64_t)handler; ffffffff80006511: 48 c7 c0 e0 58 00 80 mov $0xffffffff800058e0,%rax *ptr = InterruptDescriptor { ffffffff80006518: 66 89 15 c7 9e 0d 00 mov %dx,0xd9ec7(%rip) # ffffffff800e03e6 <_ZN3Lib6outputE+0x26> .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000651f: 48 89 c2 mov %rax,%rdx *ptr = InterruptDescriptor { ffffffff80006522: 66 89 05 c7 9e 0d 00 mov %ax,0xd9ec7(%rip) # ffffffff800e03f0 <_ZN3Lib6outputE+0x30> .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006529: 48 c1 e8 20 shr $0x20,%rax .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000652d: 48 c1 ea 10 shr $0x10,%rdx *ptr = InterruptDescriptor { ffffffff80006531: 89 05 c1 9e 0d 00 mov %eax,0xd9ec1(%rip) # ffffffff800e03f8 <_ZN3Lib6outputE+0x38> uint64_t offset = (uint64_t)handler; ffffffff80006537: 48 c7 c0 20 59 00 80 mov $0xffffffff80005920,%rax *ptr = InterruptDescriptor { ffffffff8000653e: 66 89 15 b1 9e 0d 00 mov %dx,0xd9eb1(%rip) # ffffffff800e03f6 <_ZN3Lib6outputE+0x36> .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006545: 48 89 c2 mov %rax,%rdx *ptr = InterruptDescriptor { ffffffff80006548: 66 89 05 b1 9e 0d 00 mov %ax,0xd9eb1(%rip) # ffffffff800e0400 <_ZN3Lib6outputE+0x40> .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff8000654f: 48 c1 e8 20 shr $0x20,%rax .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006553: 48 c1 ea 10 shr $0x10,%rdx *ptr = InterruptDescriptor { ffffffff80006557: 89 05 ab 9e 0d 00 mov %eax,0xd9eab(%rip) # ffffffff800e0408 <_ZN3Lib6outputE+0x48> uint64_t offset = (uint64_t)handler; ffffffff8000655d: 48 c7 c0 60 59 00 80 mov $0xffffffff80005960,%rax *ptr = InterruptDescriptor { ffffffff80006564: 66 89 15 9b 9e 0d 00 mov %dx,0xd9e9b(%rip) # ffffffff800e0406 <_ZN3Lib6outputE+0x46> .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000656b: 48 89 c2 mov %rax,%rdx *ptr = InterruptDescriptor { ffffffff8000656e: c7 05 3a 9e 0d 00 08 movl $0x8f000008,0xd9e3a(%rip) # ffffffff800e03b2 <_ZN3Hal3IDTE+0x2> ffffffff80006575: 00 00 8f .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006578: 48 c1 ea 10 shr $0x10,%rdx *ptr = InterruptDescriptor { ffffffff8000657c: c7 05 36 9e 0d 00 00 movl $0x0,0xd9e36(%rip) # ffffffff800e03bc <_ZN3Hal3IDTE+0xc> ffffffff80006583: 00 00 00 ffffffff80006586: c7 05 32 9e 0d 00 08 movl $0x8f000008,0xd9e32(%rip) # ffffffff800e03c2 <_ZN3Lib6outputE+0x2> ffffffff8000658d: 00 00 8f ffffffff80006590: c7 05 32 9e 0d 00 00 movl $0x0,0xd9e32(%rip) # ffffffff800e03cc <_ZN3Lib6outputE+0xc> ffffffff80006597: 00 00 00 ffffffff8000659a: c7 05 2e 9e 0d 00 08 movl $0x8f000008,0xd9e2e(%rip) # ffffffff800e03d2 <_ZN3Lib6outputE+0x12> ffffffff800065a1: 00 00 8f ffffffff800065a4: c7 05 2e 9e 0d 00 00 movl $0x0,0xd9e2e(%rip) # ffffffff800e03dc <_ZN3Lib6outputE+0x1c> ffffffff800065ab: 00 00 00 ffffffff800065ae: c7 05 2a 9e 0d 00 08 movl $0x8f000008,0xd9e2a(%rip) # ffffffff800e03e2 <_ZN3Lib6outputE+0x22> ffffffff800065b5: 00 00 8f ffffffff800065b8: c7 05 2a 9e 0d 00 00 movl $0x0,0xd9e2a(%rip) # ffffffff800e03ec <_ZN3Lib6outputE+0x2c> ffffffff800065bf: 00 00 00 ffffffff800065c2: c7 05 26 9e 0d 00 08 movl $0x8f000008,0xd9e26(%rip) # ffffffff800e03f2 <_ZN3Lib6outputE+0x32> ffffffff800065c9: 00 00 8f ffffffff800065cc: c7 05 26 9e 0d 00 00 movl $0x0,0xd9e26(%rip) # ffffffff800e03fc <_ZN3Lib6outputE+0x3c> ffffffff800065d3: 00 00 00 ffffffff800065d6: c7 05 22 9e 0d 00 08 movl $0x8f000008,0xd9e22(%rip) # ffffffff800e0402 <_ZN3Lib6outputE+0x42> ffffffff800065dd: 00 00 8f ffffffff800065e0: c7 05 22 9e 0d 00 00 movl $0x0,0xd9e22(%rip) # ffffffff800e040c <_ZN3Lib6outputE+0x4c> ffffffff800065e7: 00 00 00 ffffffff800065ea: 66 89 05 1f 9e 0d 00 mov %ax,0xd9e1f(%rip) # ffffffff800e0410 <_ZN3Lib6outputE+0x50> .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff800065f1: 48 c1 e8 20 shr $0x20,%rax *ptr = InterruptDescriptor { ffffffff800065f5: 89 05 1d 9e 0d 00 mov %eax,0xd9e1d(%rip) # ffffffff800e0418 <_ZN3Lib6outputE+0x58> uint64_t offset = (uint64_t)handler; ffffffff800065fb: 48 c7 c0 a0 59 00 80 mov $0xffffffff800059a0,%rax *ptr = InterruptDescriptor { ffffffff80006602: 66 89 15 0d 9e 0d 00 mov %dx,0xd9e0d(%rip) # ffffffff800e0416 <_ZN3Lib6outputE+0x56> .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006609: 48 89 c2 mov %rax,%rdx *ptr = InterruptDescriptor { ffffffff8000660c: 66 89 05 0d 9e 0d 00 mov %ax,0xd9e0d(%rip) # ffffffff800e0420 <_ZN3Lib6outputE+0x60> .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006613: 48 c1 e8 20 shr $0x20,%rax .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006617: 48 c1 ea 10 shr $0x10,%rdx *ptr = InterruptDescriptor { ffffffff8000661b: 89 05 07 9e 0d 00 mov %eax,0xd9e07(%rip) # ffffffff800e0428 <_ZN3Lib6outputE+0x68> uint64_t offset = (uint64_t)handler; ffffffff80006621: 48 c7 c0 e0 59 00 80 mov $0xffffffff800059e0,%rax *ptr = InterruptDescriptor { ffffffff80006628: 66 89 15 f7 9d 0d 00 mov %dx,0xd9df7(%rip) # ffffffff800e0426 <_ZN3Lib6outputE+0x66> .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000662f: 48 89 c2 mov %rax,%rdx *ptr = InterruptDescriptor { ffffffff80006632: 66 89 05 f7 9d 0d 00 mov %ax,0xd9df7(%rip) # ffffffff800e0430 <_ZN3Lib6outputE+0x70> .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006639: 48 c1 e8 20 shr $0x20,%rax .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000663d: 48 c1 ea 10 shr $0x10,%rdx *ptr = InterruptDescriptor { ffffffff80006641: 89 05 f1 9d 0d 00 mov %eax,0xd9df1(%rip) # ffffffff800e0438 <_ZN3Lib6outputE+0x78> uint64_t offset = (uint64_t)handler; ffffffff80006647: 48 c7 c0 20 5a 00 80 mov $0xffffffff80005a20,%rax *ptr = InterruptDescriptor { ffffffff8000664e: 66 89 15 e1 9d 0d 00 mov %dx,0xd9de1(%rip) # ffffffff800e0436 <_ZN3Lib6outputE+0x76> .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006655: 48 89 c2 mov %rax,%rdx *ptr = InterruptDescriptor { ffffffff80006658: 66 89 05 e1 9d 0d 00 mov %ax,0xd9de1(%rip) # ffffffff800e0440 <_ZN3Lib6outputE+0x80> .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff8000665f: 48 c1 e8 20 shr $0x20,%rax .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff80006663: 48 c1 ea 10 shr $0x10,%rdx *ptr = InterruptDescriptor { ffffffff80006667: 89 05 db 9d 0d 00 mov %eax,0xd9ddb(%rip) # ffffffff800e0448 <_ZN3Lib6outputE+0x88> uint64_t offset = (uint64_t)handler; ffffffff8000666d: 48 c7 c0 60 5a 00 80 mov $0xffffffff80005a60,%rax *ptr = InterruptDescriptor { ffffffff80006674: 66 89 15 cb 9d 0d 00 mov %dx,0xd9dcb(%rip) # ffffffff800e0446 <_ZN3Lib6outputE+0x86> .Offset2 = (uint16_t)((offset & 0x00000000ffff0000) >> 16), ffffffff8000667b: 48 89 c2 mov %rax,%rdx ffffffff8000667e: 48 c1 ea 10 shr $0x10,%rdx *ptr = InterruptDescriptor { ffffffff80006682: 66 89 05 c7 9d 0d 00 mov %ax,0xd9dc7(%rip) # ffffffff800e0450 <_ZN3Lib6outputE+0x90> .Offset3 = (uint32_t)((offset & 0xffffffff00000000) >> 32), ffffffff80006689: 48 c1 e8 20 shr $0x20,%rax *ptr = InterruptDescriptor { ffffffff8000668d: 66 89 15 c2 9d 0d 00 mov %dx,0xd9dc2(%rip) # ffffffff800e0456 <_ZN3Lib6outputE+0x96> ffffffff80006694: 89 05 be 9d 0d 00 mov %eax,0xd9dbe(%rip) # ffffffff800e0458 <_ZN3Lib6outputE+0x98> ffffffff8000669a: c7 05 6e 9d 0d 00 08 movl $0x8f000008,0xd9d6e(%rip) # ffffffff800e0412 <_ZN3Lib6outputE+0x52> ffffffff800066a1: 00 00 8f ffffffff800066a4: c7 05 6e 9d 0d 00 00 movl $0x0,0xd9d6e(%rip) # ffffffff800e041c <_ZN3Lib6outputE+0x5c> ffffffff800066ab: 00 00 00 ffffffff800066ae: c7 05 6a 9d 0d 00 08 movl $0x8f000008,0xd9d6a(%rip) # ffffffff800e0422 <_ZN3Lib6outputE+0x62> ffffffff800066b5: 00 00 8f ffffffff800066b8: c7 05 6a 9d 0d 00 00 movl $0x0,0xd9d6a(%rip) # ffffffff800e042c <_ZN3Lib6outputE+0x6c> ffffffff800066bf: 00 00 00 ffffffff800066c2: c7 05 66 9d 0d 00 08 movl $0x8f000008,0xd9d66(%rip) # ffffffff800e0432 <_ZN3Lib6outputE+0x72> ffffffff800066c9: 00 00 8f ffffffff800066cc: c7 05 66 9d 0d 00 00 movl $0x0,0xd9d66(%rip) # ffffffff800e043c <_ZN3Lib6outputE+0x7c> ffffffff800066d3: 00 00 00 ffffffff800066d6: c7 05 62 9d 0d 00 08 movl $0x8f000008,0xd9d62(%rip) # ffffffff800e0442 <_ZN3Lib6outputE+0x82> ffffffff800066dd: 00 00 8f ffffffff800066e0: c7 05 62 9d 0d 00 00 movl $0x0,0xd9d62(%rip) # ffffffff800e044c <_ZN3Lib6outputE+0x8c> ffffffff800066e7: 00 00 00 ffffffff800066ea: c7 05 5e 9d 0d 00 08 movl $0x8f000008,0xd9d5e(%rip) # ffffffff800e0452 <_ZN3Lib6outputE+0x92> ffffffff800066f1: 00 00 8f ffffffff800066f4: c7 05 5e 9d 0d 00 00 movl $0x0,0xd9d5e(%rip) # ffffffff800e045c <_ZN3Lib6outputE+0x9c> ffffffff800066fb: 00 00 00 SetHandler::run(); ffffffff800066fe: e8 7d fa ff ff call ffffffff80006180 <_ZN3Hal10SetHandlerILi11ELi31EE3runEv> ffffffff80006703: 48 c7 c7 90 ad 00 80 mov $0xffffffff8000ad90,%rdi ffffffff8000670a: e8 71 08 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff8000670f: 48 c7 c7 c0 a9 00 80 mov $0xffffffff8000a9c0,%rdi ffffffff80006716: e8 65 08 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> asm("lidt %0" : : "m"(idtr)); ffffffff8000671b: 0f 01 1d 7e 9c 0d 00 lidt 0xd9c7e(%rip) # ffffffff800e03a0 <_ZN3Hal4IDTRE> ffffffff80006722: 48 c7 c7 d0 ad 00 80 mov $0xffffffff8000add0,%rdi ffffffff80006729: e8 52 08 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff8000672e: 48 c7 c7 c0 a9 00 80 mov $0xffffffff8000a9c0,%rdi kout << "HardwareAbstraction: Created exception interrupt vectors" << "\n"; LoadIDT(IDTR); kout << "HardwareAbstraction: Loaded new IDT" << "\n"; } ffffffff80006735: 48 83 c4 08 add $0x8,%rsp ffffffff80006739: e9 42 08 00 00 jmp ffffffff80006f80 <_ZN2Kt5PrintEPKc> ffffffff8000673e: 66 90 xchg %ax,%ax ffffffff80006740 : // They CAN be moved to a different .cpp file. #include extern "C" { void *memcpy(void *dest, const void *src, std::size_t n) { ffffffff80006740: f3 0f 1e fa endbr64 ffffffff80006744: 48 89 f8 mov %rdi,%rax std::uint8_t *pdest = static_cast(dest); const std::uint8_t *psrc = static_cast(src); for (std::size_t i = 0; i < n; i++) { ffffffff80006747: 48 85 d2 test %rdx,%rdx ffffffff8000674a: 74 16 je ffffffff80006762 ffffffff8000674c: 31 c9 xor %ecx,%ecx ffffffff8000674e: 66 90 xchg %ax,%ax pdest[i] = psrc[i]; ffffffff80006750: 44 0f b6 04 0e movzbl (%rsi,%rcx,1),%r8d ffffffff80006755: 44 88 04 08 mov %r8b,(%rax,%rcx,1) for (std::size_t i = 0; i < n; i++) { ffffffff80006759: 48 83 c1 01 add $0x1,%rcx ffffffff8000675d: 48 39 ca cmp %rcx,%rdx ffffffff80006760: 75 ee jne ffffffff80006750 } return dest; } ffffffff80006762: c3 ret ffffffff80006763: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff8000676a: 00 00 00 ffffffff8000676d: 0f 1f 00 nopl (%rax) ffffffff80006770 : void *memset(void *s, int c, std::size_t n) { ffffffff80006770: f3 0f 1e fa endbr64 ffffffff80006774: 48 89 f8 mov %rdi,%rax ffffffff80006777: 48 89 f9 mov %rdi,%rcx ffffffff8000677a: 48 8d 3c 3a lea (%rdx,%rdi,1),%rdi std::uint8_t *p = static_cast(s); for (std::size_t i = 0; i < n; i++) { p[i] = static_cast(c); ffffffff8000677e: 41 89 f0 mov %esi,%r8d for (std::size_t i = 0; i < n; i++) { ffffffff80006781: 48 85 d2 test %rdx,%rdx ffffffff80006784: 74 2a je ffffffff800067b0 ffffffff80006786: 48 89 fa mov %rdi,%rdx ffffffff80006789: 48 29 c2 sub %rax,%rdx ffffffff8000678c: 83 e2 01 and $0x1,%edx ffffffff8000678f: 74 0f je ffffffff800067a0 ffffffff80006791: 48 8d 48 01 lea 0x1(%rax),%rcx p[i] = static_cast(c); ffffffff80006795: 40 88 30 mov %sil,(%rax) for (std::size_t i = 0; i < n; i++) { ffffffff80006798: 48 39 f9 cmp %rdi,%rcx ffffffff8000679b: 74 14 je ffffffff800067b1 ffffffff8000679d: 0f 1f 00 nopl (%rax) p[i] = static_cast(c); ffffffff800067a0: 44 88 01 mov %r8b,(%rcx) for (std::size_t i = 0; i < n; i++) { ffffffff800067a3: 48 83 c1 02 add $0x2,%rcx p[i] = static_cast(c); ffffffff800067a7: 44 88 41 ff mov %r8b,-0x1(%rcx) for (std::size_t i = 0; i < n; i++) { ffffffff800067ab: 48 39 f9 cmp %rdi,%rcx ffffffff800067ae: 75 f0 jne ffffffff800067a0 } return s; } ffffffff800067b0: c3 ret ffffffff800067b1: c3 ret ffffffff800067b2: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff800067b9: 00 00 00 ffffffff800067bc: 0f 1f 40 00 nopl 0x0(%rax) ffffffff800067c0 <_ZN3Lib13u64_2_basestrEmm.part.0>: str[si++] = tmp[rdi--]; str[si] = '\0'; return str; } char *u64_2_basestr(uint64_t num, size_t radix) ffffffff800067c0: 48 81 ec 20 01 00 00 sub $0x120,%rsp if (!num) { return (char *)"0"; } char base[] = "0123456789ABCDEFGH"; // IJKLMN .... ffffffff800067c7: 48 b8 30 31 32 33 34 movabs $0x3736353433323130,%rax ffffffff800067ce: 35 36 37 ffffffff800067d1: 48 89 44 24 0d mov %rax,0xd(%rsp) ffffffff800067d6: 48 b8 38 39 41 42 43 movabs $0x4645444342413938,%rax ffffffff800067dd: 44 45 46 ffffffff800067e0: 48 89 44 24 15 mov %rax,0x15(%rsp) if (radix < 2 || radix > (sizeof(base) - 1)) ffffffff800067e5: 48 8d 46 fe lea -0x2(%rsi),%rax char base[] = "0123456789ABCDEFGH"; // IJKLMN .... ffffffff800067e9: c7 44 24 1c 46 47 48 movl $0x484746,0x1c(%rsp) ffffffff800067f0: 00 if (radix < 2 || radix > (sizeof(base) - 1)) ffffffff800067f1: 48 83 f8 10 cmp $0x10,%rax ffffffff800067f5: 0f 87 8d 00 00 00 ja ffffffff80006888 <_ZN3Lib13u64_2_basestrEmm.part.0+0xc8> int si = 0; char tmp[256]; int rdi = -1; while (num) ffffffff800067fb: 45 31 c0 xor %r8d,%r8d ffffffff800067fe: 48 c7 c1 c0 03 0e 80 mov $0xffffffff800e03c0,%rcx ffffffff80006805: 48 85 ff test %rdi,%rdi ffffffff80006808: 74 65 je ffffffff8000686f <_ZN3Lib13u64_2_basestrEmm.part.0+0xaf> ffffffff8000680a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) { tmp[++rdi] = base[num % radix]; ffffffff80006810: 48 89 f8 mov %rdi,%rax ffffffff80006813: 31 d2 xor %edx,%edx ffffffff80006815: 4c 89 c1 mov %r8,%rcx ffffffff80006818: 48 f7 f6 div %rsi ffffffff8000681b: 0f b6 54 14 0d movzbl 0xd(%rsp,%rdx,1),%edx ffffffff80006820: 42 88 54 04 20 mov %dl,0x20(%rsp,%r8,1) num /= radix; ffffffff80006825: 48 89 fa mov %rdi,%rdx while (num) ffffffff80006828: 4d 8d 40 01 lea 0x1(%r8),%r8 num /= radix; ffffffff8000682c: 48 89 c7 mov %rax,%rdi while (num) ffffffff8000682f: 48 39 f2 cmp %rsi,%rdx ffffffff80006832: 73 dc jae ffffffff80006810 <_ZN3Lib13u64_2_basestrEmm.part.0+0x50> ffffffff80006834: 48 63 c1 movslq %ecx,%rax ffffffff80006837: 48 8d 7c 24 20 lea 0x20(%rsp),%rdi tmp[++rdi] = base[num % radix]; ffffffff8000683c: 31 d2 xor %edx,%edx ffffffff8000683e: 48 01 f8 add %rdi,%rax ffffffff80006841: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) } while (rdi >= 0) str[si++] = tmp[rdi--]; ffffffff80006848: 0f b6 30 movzbl (%rax),%esi while (rdi >= 0) ffffffff8000684b: 48 83 e8 01 sub $0x1,%rax str[si++] = tmp[rdi--]; ffffffff8000684f: 40 88 b2 c0 03 0e 80 mov %sil,-0x7ff1fc40(%rdx) while (rdi >= 0) ffffffff80006856: 48 89 d6 mov %rdx,%rsi ffffffff80006859: 48 83 c2 01 add $0x1,%rdx ffffffff8000685d: 48 39 ce cmp %rcx,%rsi ffffffff80006860: 75 e6 jne ffffffff80006848 <_ZN3Lib13u64_2_basestrEmm.part.0+0x88> str[si] = '\0'; ffffffff80006862: 83 c1 01 add $0x1,%ecx ffffffff80006865: 48 63 c9 movslq %ecx,%rcx ffffffff80006868: 48 81 c1 c0 03 0e 80 add $0xffffffff800e03c0,%rcx ffffffff8000686f: c6 01 00 movb $0x0,(%rcx) return str; } ffffffff80006872: 48 c7 c0 c0 03 0e 80 mov $0xffffffff800e03c0,%rax ffffffff80006879: 48 81 c4 20 01 00 00 add $0x120,%rsp ffffffff80006880: c3 ret ffffffff80006881: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) str[0] = '\0'; ffffffff80006888: c6 05 31 9b 0d 00 00 movb $0x0,0xd9b31(%rip) # ffffffff800e03c0 <_ZN3Lib6outputE> } ffffffff8000688f: 48 c7 c0 c0 03 0e 80 mov $0xffffffff800e03c0,%rax ffffffff80006896: 48 81 c4 20 01 00 00 add $0x120,%rsp ffffffff8000689d: c3 ret ffffffff8000689e: 66 90 xchg %ax,%ax ffffffff800068a0 <_ZN3Lib11int2basestrEim>: { ffffffff800068a0: f3 0f 1e fa endbr64 if (!num) { ffffffff800068a4: 85 ff test %edi,%edi ffffffff800068a6: 0f 84 d4 00 00 00 je ffffffff80006980 <_ZN3Lib11int2basestrEim+0xe0> { ffffffff800068ac: 48 81 ec 20 01 00 00 sub $0x120,%rsp char base[] = "0123456789ABCDEFGH"; // IJKLMN .... ffffffff800068b3: 48 b8 30 31 32 33 34 movabs $0x3736353433323130,%rax ffffffff800068ba: 35 36 37 ffffffff800068bd: 48 89 44 24 0d mov %rax,0xd(%rsp) ffffffff800068c2: 48 b8 38 39 41 42 43 movabs $0x4645444342413938,%rax ffffffff800068c9: 44 45 46 ffffffff800068cc: 48 89 44 24 15 mov %rax,0x15(%rsp) if (radix < 2 || radix > (sizeof(base) - 1)) ffffffff800068d1: 48 8d 46 fe lea -0x2(%rsi),%rax char base[] = "0123456789ABCDEFGH"; // IJKLMN .... ffffffff800068d5: c7 44 24 1c 46 47 48 movl $0x484746,0x1c(%rsp) ffffffff800068dc: 00 if (radix < 2 || radix > (sizeof(base) - 1)) ffffffff800068dd: 48 83 f8 10 cmp $0x10,%rax ffffffff800068e1: 77 7d ja ffffffff80006960 <_ZN3Lib11int2basestrEim+0xc0> if (num < 0) ffffffff800068e3: 45 31 c9 xor %r9d,%r9d ffffffff800068e6: 85 ff test %edi,%edi ffffffff800068e8: 0f 88 a2 00 00 00 js ffffffff80006990 <_ZN3Lib11int2basestrEim+0xf0> str[si++] = '-'; ffffffff800068ee: 31 c9 xor %ecx,%ecx tmp[++rdi] = base[num % radix]; ffffffff800068f0: 48 63 c7 movslq %edi,%rax ffffffff800068f3: 31 d2 xor %edx,%edx ffffffff800068f5: 49 89 c8 mov %rcx,%r8 ffffffff800068f8: 48 f7 f6 div %rsi ffffffff800068fb: 0f b6 54 14 0d movzbl 0xd(%rsp,%rdx,1),%edx num /= radix; ffffffff80006900: 89 c7 mov %eax,%edi tmp[++rdi] = base[num % radix]; ffffffff80006902: 88 54 0c 20 mov %dl,0x20(%rsp,%rcx,1) while (num) ffffffff80006906: 48 8d 49 01 lea 0x1(%rcx),%rcx ffffffff8000690a: 85 c0 test %eax,%eax ffffffff8000690c: 75 e2 jne ffffffff800068f0 <_ZN3Lib11int2basestrEim+0x50> ffffffff8000690e: 48 8d 74 24 20 lea 0x20(%rsp),%rsi ffffffff80006913: 49 63 c9 movslq %r9d,%rcx ffffffff80006916: 49 63 c0 movslq %r8d,%rax ffffffff80006919: 48 01 f0 add %rsi,%rax ffffffff8000691c: 48 8d 91 c0 03 0e 80 lea -0x7ff1fc40(%rcx),%rdx ffffffff80006923: 4a 8d b4 01 c1 03 0e lea -0x7ff1fc3f(%rcx,%r8,1),%rsi ffffffff8000692a: 80 ffffffff8000692b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) str[si++] = tmp[rdi--]; ffffffff80006930: 0f b6 08 movzbl (%rax),%ecx while (rdi >= 0) ffffffff80006933: 48 83 c2 01 add $0x1,%rdx ffffffff80006937: 48 83 e8 01 sub $0x1,%rax str[si++] = tmp[rdi--]; ffffffff8000693b: 88 4a ff mov %cl,-0x1(%rdx) while (rdi >= 0) ffffffff8000693e: 48 39 f2 cmp %rsi,%rdx ffffffff80006941: 75 ed jne ffffffff80006930 <_ZN3Lib11int2basestrEim+0x90> str[si] = '\0'; ffffffff80006943: 43 8d 44 01 01 lea 0x1(%r9,%r8,1),%eax ffffffff80006948: 48 98 cltq ffffffff8000694a: c6 80 c0 03 0e 80 00 movb $0x0,-0x7ff1fc40(%rax) return str; ffffffff80006951: 48 c7 c0 c0 03 0e 80 mov $0xffffffff800e03c0,%rax } ffffffff80006958: 48 81 c4 20 01 00 00 add $0x120,%rsp ffffffff8000695f: c3 ret str[0] = '\0'; ffffffff80006960: c6 05 59 9a 0d 00 00 movb $0x0,0xd9a59(%rip) # ffffffff800e03c0 <_ZN3Lib6outputE> return str; ffffffff80006967: 48 c7 c0 c0 03 0e 80 mov $0xffffffff800e03c0,%rax } ffffffff8000696e: 48 81 c4 20 01 00 00 add $0x120,%rsp ffffffff80006975: c3 ret ffffffff80006976: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff8000697d: 00 00 00 ffffffff80006980: 48 c7 c0 c3 ac 00 80 mov $0xffffffff8000acc3,%rax ffffffff80006987: c3 ret ffffffff80006988: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) ffffffff8000698f: 00 str[si++] = '-'; ffffffff80006990: c6 05 29 9a 0d 00 2d movb $0x2d,0xd9a29(%rip) # ffffffff800e03c0 <_ZN3Lib6outputE> num = -num; ffffffff80006997: f7 df neg %edi str[si++] = '-'; ffffffff80006999: 41 b9 01 00 00 00 mov $0x1,%r9d ffffffff8000699f: e9 4a ff ff ff jmp ffffffff800068ee <_ZN3Lib11int2basestrEim+0x4e> ffffffff800069a4: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff800069ab: 00 00 00 ffffffff800069ae: 66 90 xchg %ax,%ax ffffffff800069b0 <_ZN3Lib13u64_2_basestrEmm>: { ffffffff800069b0: f3 0f 1e fa endbr64 if (!num) { ffffffff800069b4: 48 85 ff test %rdi,%rdi ffffffff800069b7: 74 07 je ffffffff800069c0 <_ZN3Lib13u64_2_basestrEmm+0x10> ffffffff800069b9: e9 02 fe ff ff jmp ffffffff800067c0 <_ZN3Lib13u64_2_basestrEmm.part.0> ffffffff800069be: 66 90 xchg %ax,%ax } ffffffff800069c0: 48 c7 c0 c3 ac 00 80 mov $0xffffffff8000acc3,%rax ffffffff800069c7: c3 ret ffffffff800069c8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) ffffffff800069cf: 00 ffffffff800069d0 : // Extern declarations for global constructors array. extern void (*__init_array[])(); extern void (*__init_array_end[])(); extern "C" void kmain() { ffffffff800069d0: f3 0f 1e fa endbr64 ffffffff800069d4: 53 push %rbx ffffffff800069d5: 48 83 ec 20 sub $0x20,%rsp if (LIMINE_BASE_REVISION_SUPPORTED == false) { ffffffff800069d9: 48 8b 05 40 97 ff ff mov -0x68c0(%rip),%rax # ffffffff80000120 <_ZN12_GLOBAL__N_120limine_base_revisionE+0x10> ffffffff800069e0: 48 85 c0 test %rax,%rax ffffffff800069e3: 0f 85 47 01 00 00 jne ffffffff80006b30 hcf(); } // Call global constructors. for (std::size_t i = 0; &__init_array[i] != __init_array_end; i++) { ffffffff800069e9: 48 c7 c0 0f af 00 80 mov $0xffffffff8000af0f,%rax ffffffff800069f0: 48 3d 0f af 00 80 cmp $0xffffffff8000af0f,%rax ffffffff800069f6: 74 17 je ffffffff80006a0f ffffffff800069f8: 48 89 c3 mov %rax,%rbx ffffffff800069fb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) __init_array[i](); ffffffff80006a00: ff 13 call *(%rbx) for (std::size_t i = 0; &__init_array[i] != __init_array_end; i++) { ffffffff80006a02: 48 83 c3 08 add $0x8,%rbx ffffffff80006a06: 48 81 fb 0f af 00 80 cmp $0xffffffff8000af0f,%rbx ffffffff80006a0d: 75 f1 jne ffffffff80006a00 } if (framebuffer_request.response == nullptr ffffffff80006a0f: 48 8b 05 f2 96 ff ff mov -0x690e(%rip),%rax # ffffffff80000108 <_ZN12_GLOBAL__N_119framebuffer_requestE+0x28> || framebuffer_request.response->framebuffer_count < 1) { ffffffff80006a16: 48 85 c0 test %rax,%rax ffffffff80006a19: 0f 84 01 01 00 00 je ffffffff80006b20 ffffffff80006a1f: 48 8b 05 e2 96 ff ff mov -0x691e(%rip),%rax # ffffffff80000108 <_ZN12_GLOBAL__N_119framebuffer_requestE+0x28> ffffffff80006a26: 48 83 78 08 00 cmpq $0x0,0x8(%rax) ffffffff80006a2b: 0f 84 ef 00 00 00 je ffffffff80006b20 hcf(); } limine_framebuffer *framebuffer{framebuffer_request.response->framebuffers[0]}; ffffffff80006a31: 48 8b 05 d0 96 ff ff mov -0x6930(%rip),%rax # ffffffff80000108 <_ZN12_GLOBAL__N_119framebuffer_requestE+0x28> ffffffff80006a38: 48 8b 40 10 mov 0x10(%rax),%rax ffffffff80006a3c: 48 8b 00 mov (%rax),%rax Kt::Initialize( ffffffff80006a3f: 44 0f b6 50 28 movzbl 0x28(%rax),%r10d ffffffff80006a44: 44 0f b6 48 24 movzbl 0x24(%rax),%r9d ffffffff80006a49: 44 0f b6 40 23 movzbl 0x23(%rax),%r8d ffffffff80006a4e: 48 8b 48 18 mov 0x18(%rax),%rcx ffffffff80006a52: 48 8b 50 10 mov 0x10(%rax),%rdx ffffffff80006a56: 48 8b 70 08 mov 0x8(%rax),%rsi ffffffff80006a5a: 48 8b 38 mov (%rax),%rdi ffffffff80006a5d: 41 52 push %r10 ffffffff80006a5f: 44 0f b6 50 27 movzbl 0x27(%rax),%r10d ffffffff80006a64: 41 52 push %r10 ffffffff80006a66: 44 0f b6 50 26 movzbl 0x26(%rax),%r10d ffffffff80006a6b: 41 52 push %r10 ffffffff80006a6d: 0f b6 40 25 movzbl 0x25(%rax),%eax ffffffff80006a71: 50 push %rax ffffffff80006a72: e8 59 04 00 00 call ffffffff80006ed0 <_ZN2Kt10InitializeEPjmmmhhhhhh> framebuffer->blue_mask_size, framebuffer->blue_mask_shift ); #if defined (__x86_64__) Hal::PrepareGDT(); ffffffff80006a77: 48 83 c4 20 add $0x20,%rsp ffffffff80006a7b: e8 60 ec ff ff call ffffffff800056e0 <_ZN3Hal10PrepareGDTEv> Hal::BridgeLoadGDT(); ffffffff80006a80: e8 0b ed ff ff call ffffffff80005790 <_ZN3Hal13BridgeLoadGDTEv> #endif uint64_t hhdm_offset = hhdm_request.response->offset; ffffffff80006a85: 48 8b 05 fc 95 ff ff mov -0x6a04(%rip),%rax # ffffffff80000088 <_ZN12_GLOBAL__N_112hhdm_requestE+0x28> Memory::HHDMBase = hhdm_offset; ffffffff80006a8c: 48 8b 40 08 mov 0x8(%rax),%rax ffffffff80006a90: 48 89 05 31 9d 0d 00 mov %rax,0xd9d31(%rip) # ffffffff800e07c8 <_ZN6Memory8HHDMBaseE> if (memmap_request.response != nullptr) { ffffffff80006a97: 48 8b 05 aa 95 ff ff mov -0x6a56(%rip),%rax # ffffffff80000048 <_ZN12_GLOBAL__N_114memmap_requestE+0x28> ffffffff80006a9e: 48 85 c0 test %rax,%rax ffffffff80006aa1: 0f 84 99 00 00 00 je ffffffff80006b40 ffffffff80006aa7: 48 c7 c7 18 ae 00 80 mov $0xffffffff8000ae18,%rdi kout << "MemoryManagement: Creating global HeapAllocator" << newline; auto result = Memory::Scan(memmap_request.response); auto allocator = Memory::HeapAllocator(result); ffffffff80006aae: 48 89 e3 mov %rsp,%rbx ffffffff80006ab1: e8 ca 04 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> Putchar(chr); ffffffff80006ab6: bf 0a 00 00 00 mov $0xa,%edi ffffffff80006abb: e8 90 04 00 00 call ffffffff80006f50 <_ZN2Kt7PutcharEc> auto result = Memory::Scan(memmap_request.response); ffffffff80006ac0: 48 8b 3d 81 95 ff ff mov -0x6a7f(%rip),%rdi # ffffffff80000048 <_ZN12_GLOBAL__N_114memmap_requestE+0x28> ffffffff80006ac7: e8 c4 02 00 00 call ffffffff80006d90 <_ZN6Memory4ScanEP22limine_memmap_response> auto allocator = Memory::HeapAllocator(result); ffffffff80006acc: 48 89 df mov %rbx,%rdi auto result = Memory::Scan(memmap_request.response); ffffffff80006acf: 48 89 c6 mov %rax,%rsi auto allocator = Memory::HeapAllocator(result); ffffffff80006ad2: e8 89 00 00 00 call ffffffff80006b60 <_ZN6Memory13HeapAllocatorC1ENS_14LargestSectionE> Memory::g_heap = &allocator; ffffffff80006ad7: 48 89 1d f2 9c 0d 00 mov %rbx,0xd9cf2(%rip) # ffffffff800e07d0 <_ZN6Memory6g_heapE> } else { Panic("Guru Meditation Error: System memory map missing!", nullptr); } #if defined (__x86_64__) Hal::IDTInitialize(); ffffffff80006ade: e8 6d f9 ff ff call ffffffff80006450 <_ZN3Hal13IDTInitializeEv> #endif kcp::cstringstream stream; ffffffff80006ae3: 48 89 df mov %rbx,%rdi ffffffff80006ae6: e8 f5 ea ff ff call ffffffff800055e0 <_ZN3kcp13cstringstreamC1Ev> stream<<"Hello, World"; ffffffff80006aeb: 48 c7 c6 c5 ac 00 80 mov $0xffffffff8000acc5,%rsi ffffffff80006af2: 48 89 df mov %rbx,%rdi ffffffff80006af5: e8 36 eb ff ff call ffffffff80005630 <_ZN3kcp13cstringstreamlsEPKc> Memory::g_heap->Walk(); ffffffff80006afa: 48 8b 3d cf 9c 0d 00 mov 0xd9ccf(%rip),%rdi # ffffffff800e07d0 <_ZN6Memory6g_heapE> ffffffff80006b01: e8 ba 01 00 00 call ffffffff80006cc0 <_ZN6Memory13HeapAllocator4WalkEv> hcf(); ffffffff80006b06: e8 b5 03 00 00 call ffffffff80006ec0 <_Z3hcfv> } ffffffff80006b0b: 48 89 df mov %rbx,%rdi ffffffff80006b0e: e8 ed ea ff ff call ffffffff80005600 <_ZN3kcp13cstringstreamD1Ev> ffffffff80006b13: 48 83 c4 20 add $0x20,%rsp ffffffff80006b17: 5b pop %rbx ffffffff80006b18: c3 ret ffffffff80006b19: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) hcf(); ffffffff80006b20: e8 9b 03 00 00 call ffffffff80006ec0 <_Z3hcfv> ffffffff80006b25: e9 07 ff ff ff jmp ffffffff80006a31 ffffffff80006b2a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) hcf(); ffffffff80006b30: e8 8b 03 00 00 call ffffffff80006ec0 <_Z3hcfv> ffffffff80006b35: e9 af fe ff ff jmp ffffffff800069e9 ffffffff80006b3a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) Panic("Guru Meditation Error: System memory map missing!", nullptr); ffffffff80006b40: 31 f6 xor %esi,%esi ffffffff80006b42: 48 c7 c7 48 ae 00 80 mov $0xffffffff8000ae48,%rdi ffffffff80006b49: 48 89 e3 mov %rsp,%rbx ffffffff80006b4c: e8 5f e3 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> ffffffff80006b51: eb 8b jmp ffffffff80006ade ffffffff80006b53: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80006b5a: 00 00 00 ffffffff80006b5d: 0f 1f 00 nopl (%rax) ffffffff80006b60 <_ZN6Memory13HeapAllocatorC1ENS_14LargestSectionE>: namespace Memory { constexpr size_t metadata_size = 8; // 8 bytes HeapAllocator::HeapAllocator(LargestSection section) ffffffff80006b60: f3 0f 1e fa endbr64 ffffffff80006b64: 41 54 push %r12 ffffffff80006b66: 49 89 d4 mov %rdx,%r12 ffffffff80006b69: 55 push %rbp ffffffff80006b6a: 48 89 f5 mov %rsi,%rbp ffffffff80006b6d: 53 push %rbx ffffffff80006b6e: 48 89 fb mov %rdi,%rbx ffffffff80006b71: 48 c7 47 10 00 00 00 movq $0x0,0x10(%rdi) ffffffff80006b78: 00 ffffffff80006b79: 48 c7 47 18 00 00 00 movq $0x0,0x18(%rdi) ffffffff80006b80: 00 Print(string); ffffffff80006b81: 48 c7 c7 80 ae 00 80 mov $0xffffffff8000ae80,%rdi ffffffff80006b88: e8 f3 03 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> Putchar(chr); ffffffff80006b8d: bf 0a 00 00 00 mov $0xa,%edi ffffffff80006b92: e8 b9 03 00 00 call ffffffff80006f50 <_ZN2Kt7PutcharEc> namespace Memory { extern std::uint64_t HHDMBase; inline uint64_t HHDM(uint64_t address) { return HHDMBase + address; ffffffff80006b97: 48 8b 35 2a 9c 0d 00 mov 0xd9c2a(%rip),%rsi # ffffffff800e07c8 <_ZN6Memory8HHDMBaseE> { kout << "HeapAllocator: constructor called" << Kt::newline; // section contains the physical address, we need the virtual address, so we call the helper g_section = LargestSection { ffffffff80006b9e: 4c 89 63 08 mov %r12,0x8(%rbx) .address = HHDM(section.address), .size = section.size }; head = Node { ffffffff80006ba2: 48 c7 43 10 00 00 00 movq $0x0,0x10(%rbx) ffffffff80006ba9: 00 ffffffff80006baa: 48 01 ee add %rbp,%rsi g_section = LargestSection { ffffffff80006bad: 48 89 33 mov %rsi,(%rbx) head = Node { ffffffff80006bb0: 48 89 73 18 mov %rsi,0x18(%rbx) .size = 0, .next = (Node*)g_section.address }; head.next->size = g_section.size; ffffffff80006bb4: 4c 89 26 mov %r12,(%rsi) head.size = 0;//!!!!!! } ffffffff80006bb7: 5b pop %rbx ffffffff80006bb8: 5d pop %rbp ffffffff80006bb9: 41 5c pop %r12 ffffffff80006bbb: c3 ret ffffffff80006bbc: 0f 1f 40 00 nopl 0x0(%rax) ffffffff80006bc0 <_ZN6Memory13HeapAllocator7RequestEm>: void* HeapAllocator::Request(size_t size) { ffffffff80006bc0: f3 0f 1e fa endbr64 Node* current = &head; ffffffff80006bc4: 48 83 c7 10 add $0x10,%rdi Node* prev = nullptr; ffffffff80006bc8: 31 c9 xor %ecx,%ecx ffffffff80006bca: eb 0f jmp ffffffff80006bdb <_ZN6Memory13HeapAllocator7RequestEm+0x1b> ffffffff80006bcc: 0f 1f 40 00 nopl 0x0(%rax) while (current != nullptr) { ffffffff80006bd0: 48 89 f9 mov %rdi,%rcx ffffffff80006bd3: 48 85 c0 test %rax,%rax ffffffff80006bd6: 74 30 je ffffffff80006c08 <_ZN6Memory13HeapAllocator7RequestEm+0x48> ffffffff80006bd8: 48 89 c7 mov %rax,%rdi if (current->size >= size) { ffffffff80006bdb: 48 8b 17 mov (%rdi),%rdx Node copy = *current; ffffffff80006bde: 48 8b 47 08 mov 0x8(%rdi),%rax if (current->size >= size) { ffffffff80006be2: 48 39 f2 cmp %rsi,%rdx ffffffff80006be5: 72 e9 jb ffffffff80006bd0 <_ZN6Memory13HeapAllocator7RequestEm+0x10> size_t total_size_needed = size + sizeof(Metadata); Metadata* meta = (Metadata*)current; meta->size = size; ffffffff80006be7: 48 89 37 mov %rsi,(%rdi) prev->next = (Node*)((uint64_t)current + total_size_needed); ffffffff80006bea: 48 8d 74 37 08 lea 0x8(%rdi,%rsi,1),%rsi ffffffff80006bef: 48 89 71 08 mov %rsi,0x8(%rcx) prev->next->next = copy.next; ffffffff80006bf3: 48 89 46 08 mov %rax,0x8(%rsi) prev->next->size = copy.size; ffffffff80006bf7: 48 8b 41 08 mov 0x8(%rcx),%rax ffffffff80006bfb: 48 89 10 mov %rdx,(%rax) return (void*)((uint64_t)meta + sizeof(Metadata)); ffffffff80006bfe: 48 8d 47 08 lea 0x8(%rdi),%rax ffffffff80006c02: c3 ret ffffffff80006c03: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) prev = current; current = current->next; } return nullptr; } ffffffff80006c08: c3 ret ffffffff80006c09: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) ffffffff80006c10 <_ZN6Memory13HeapAllocator7ReallocEPvm>: void* HeapAllocator::Realloc(void* ptr, size_t size) { ffffffff80006c10: f3 0f 1e fa endbr64 ffffffff80006c14: 41 54 push %r12 Node* current = &head; ffffffff80006c16: 48 8d 47 10 lea 0x10(%rdi),%rax Node* prev = nullptr; ffffffff80006c1a: 45 31 c0 xor %r8d,%r8d void* HeapAllocator::Realloc(void* ptr, size_t size) { ffffffff80006c1d: 55 push %rbp ffffffff80006c1e: 48 89 f5 mov %rsi,%rbp ffffffff80006c21: 53 push %rbx ffffffff80006c22: 48 89 fb mov %rdi,%rbx ffffffff80006c25: eb 14 jmp ffffffff80006c3b <_ZN6Memory13HeapAllocator7ReallocEPvm+0x2b> ffffffff80006c27: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80006c2e: 00 00 while (current != nullptr) { ffffffff80006c30: 49 89 c0 mov %rax,%r8 ffffffff80006c33: 48 85 c9 test %rcx,%rcx ffffffff80006c36: 74 63 je ffffffff80006c9b <_ZN6Memory13HeapAllocator7ReallocEPvm+0x8b> ffffffff80006c38: 48 89 c8 mov %rcx,%rax if (current->size >= size) { ffffffff80006c3b: 48 8b 38 mov (%rax),%rdi Node copy = *current; ffffffff80006c3e: 48 8b 48 08 mov 0x8(%rax),%rcx if (current->size >= size) { ffffffff80006c42: 48 39 d7 cmp %rdx,%rdi ffffffff80006c45: 72 e9 jb ffffffff80006c30 <_ZN6Memory13HeapAllocator7ReallocEPvm+0x20> prev->next = (Node*)((uint64_t)current + total_size_needed); ffffffff80006c47: 48 8d 74 10 08 lea 0x8(%rax,%rdx,1),%rsi meta->size = size; ffffffff80006c4c: 48 89 10 mov %rdx,(%rax) return (void*)((uint64_t)meta + sizeof(Metadata)); ffffffff80006c4f: 4c 8d 60 08 lea 0x8(%rax),%r12 prev->next = (Node*)((uint64_t)current + total_size_needed); ffffffff80006c53: 49 89 70 08 mov %rsi,0x8(%r8) prev->next->next = copy.next; ffffffff80006c57: 48 89 4e 08 mov %rcx,0x8(%rsi) prev->next->size = copy.size; ffffffff80006c5b: 49 8b 48 08 mov 0x8(%r8),%rcx ffffffff80006c5f: 48 89 39 mov %rdi,(%rcx) auto new_ptr = Request(size); if (new_ptr == nullptr) { ffffffff80006c62: 48 83 f8 f8 cmp $0xfffffffffffffff8,%rax ffffffff80006c66: 74 33 je ffffffff80006c9b <_ZN6Memory13HeapAllocator7ReallocEPvm+0x8b> return nullptr; } if (ptr == nullptr) { ffffffff80006c68: 48 85 ed test %rbp,%rbp ffffffff80006c6b: 74 26 je ffffffff80006c93 <_ZN6Memory13HeapAllocator7ReallocEPvm+0x83> return new_ptr; } memcpy(new_ptr, ptr, size); ffffffff80006c6d: 48 89 ee mov %rbp,%rsi ffffffff80006c70: 4c 89 e7 mov %r12,%rdi ffffffff80006c73: e8 c8 fa ff ff call ffffffff80006740 void HeapAllocator::Free(void* ptr) { Metadata* meta = (Metadata*)((uint64_t)ptr - sizeof(Metadata)); size_t size = meta->size; auto prev_next = head.next; ffffffff80006c78: 48 8b 4b 18 mov 0x18(%rbx),%rcx Metadata* meta = (Metadata*)((uint64_t)ptr - sizeof(Metadata)); ffffffff80006c7c: 48 8d 45 f8 lea -0x8(%rbp),%rax size_t size = meta->size; ffffffff80006c80: 48 8b 55 f8 mov -0x8(%rbp),%rdx head.next = (Node*)meta; ffffffff80006c84: 48 89 43 18 mov %rax,0x18(%rbx) head.next->next = prev_next; ffffffff80006c88: 48 89 4d 00 mov %rcx,0x0(%rbp) head.next->size = size; ffffffff80006c8c: 48 8b 43 18 mov 0x18(%rbx),%rax ffffffff80006c90: 48 89 10 mov %rdx,(%rax) } ffffffff80006c93: 4c 89 e0 mov %r12,%rax ffffffff80006c96: 5b pop %rbx ffffffff80006c97: 5d pop %rbp ffffffff80006c98: 41 5c pop %r12 ffffffff80006c9a: c3 ret return nullptr; ffffffff80006c9b: 45 31 e4 xor %r12d,%r12d ffffffff80006c9e: eb f3 jmp ffffffff80006c93 <_ZN6Memory13HeapAllocator7ReallocEPvm+0x83> ffffffff80006ca0 <_ZN6Memory13HeapAllocator4FreeEPv>: void HeapAllocator::Free(void* ptr) { ffffffff80006ca0: f3 0f 1e fa endbr64 auto prev_next = head.next; ffffffff80006ca4: 48 8b 4f 18 mov 0x18(%rdi),%rcx Metadata* meta = (Metadata*)((uint64_t)ptr - sizeof(Metadata)); ffffffff80006ca8: 48 8d 46 f8 lea -0x8(%rsi),%rax size_t size = meta->size; ffffffff80006cac: 48 8b 56 f8 mov -0x8(%rsi),%rdx head.next = (Node*)meta; ffffffff80006cb0: 48 89 47 18 mov %rax,0x18(%rdi) head.next->next = prev_next; ffffffff80006cb4: 48 89 0e mov %rcx,(%rsi) head.next->size = size; ffffffff80006cb7: 48 8b 47 18 mov 0x18(%rdi),%rax ffffffff80006cbb: 48 89 10 mov %rdx,(%rax) } ffffffff80006cbe: c3 ret ffffffff80006cbf: 90 nop ffffffff80006cc0 <_ZN6Memory13HeapAllocator4WalkEv>: // Traverses the Allocator's linked list for debugging void HeapAllocator::Walk() { ffffffff80006cc0: f3 0f 1e fa endbr64 ffffffff80006cc4: 55 push %rbp ffffffff80006cc5: 53 push %rbx ffffffff80006cc6: 48 83 ec 08 sub $0x8,%rsp Node* current = {head.next}; ffffffff80006cca: 48 8b 5f 18 mov 0x18(%rdi),%rbx size_t i{0}; while (current != nullptr) { ffffffff80006cce: 48 85 db test %rbx,%rbx ffffffff80006cd1: 0f 84 a8 00 00 00 je ffffffff80006d7f <_ZN6Memory13HeapAllocator4WalkEv+0xbf> size_t i{0}; ffffffff80006cd7: 31 ed xor %ebp,%ebp ffffffff80006cd9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) Print(string); ffffffff80006ce0: 48 c7 c7 d2 ac 00 80 mov $0xffffffff8000acd2,%rdi ffffffff80006ce7: e8 94 02 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff80006cec: be 0a 00 00 00 mov $0xa,%esi ffffffff80006cf1: 48 89 ef mov %rbp,%rdi t.streamBaseType = newBase; ffffffff80006cf4: c7 05 fa 43 00 00 0a movl $0xa,0x43fa(%rip) # ffffffff8000b0f8 ffffffff80006cfb: 00 00 00 Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff80006cfe: e8 ad fc ff ff call ffffffff800069b0 <_ZN3Lib13u64_2_basestrEmm> kout << "Block " << base::dec << i << " {" << current->size << " bytes & address 0x" << base::hex << (uint64_t)current << "}" << Kt::newline; current = current->next; i++; ffffffff80006d03: 48 83 c5 01 add $0x1,%rbp ffffffff80006d07: 48 89 c7 mov %rax,%rdi ffffffff80006d0a: e8 71 02 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> Print(string); ffffffff80006d0f: 48 c7 c7 d9 ac 00 80 mov $0xffffffff8000acd9,%rdi ffffffff80006d16: e8 65 02 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff80006d1b: 8b 35 d7 43 00 00 mov 0x43d7(%rip),%esi # ffffffff8000b0f8 ffffffff80006d21: 48 8b 3b mov (%rbx),%rdi ffffffff80006d24: e8 87 fc ff ff call ffffffff800069b0 <_ZN3Lib13u64_2_basestrEmm> ffffffff80006d29: 48 89 c7 mov %rax,%rdi ffffffff80006d2c: e8 4f 02 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> Print(string); ffffffff80006d31: 48 c7 c7 dc ac 00 80 mov $0xffffffff8000acdc,%rdi ffffffff80006d38: e8 43 02 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff80006d3d: be 10 00 00 00 mov $0x10,%esi ffffffff80006d42: 48 89 df mov %rbx,%rdi t.streamBaseType = newBase; ffffffff80006d45: c7 05 a9 43 00 00 10 movl $0x10,0x43a9(%rip) # ffffffff8000b0f8 ffffffff80006d4c: 00 00 00 Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff80006d4f: e8 5c fc ff ff call ffffffff800069b0 <_ZN3Lib13u64_2_basestrEmm> ffffffff80006d54: 48 89 c7 mov %rax,%rdi ffffffff80006d57: e8 24 02 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> Print(string); ffffffff80006d5c: 48 c7 c7 f0 ac 00 80 mov $0xffffffff8000acf0,%rdi ffffffff80006d63: e8 18 02 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> Putchar(chr); ffffffff80006d68: bf 0a 00 00 00 mov $0xa,%edi ffffffff80006d6d: e8 de 01 00 00 call ffffffff80006f50 <_ZN2Kt7PutcharEc> current = current->next; ffffffff80006d72: 48 8b 5b 08 mov 0x8(%rbx),%rbx while (current != nullptr) { ffffffff80006d76: 48 85 db test %rbx,%rbx ffffffff80006d79: 0f 85 61 ff ff ff jne ffffffff80006ce0 <_ZN6Memory13HeapAllocator4WalkEv+0x20> } } ffffffff80006d7f: 48 83 c4 08 add $0x8,%rsp ffffffff80006d83: 5b pop %rbx ffffffff80006d84: 5d pop %rbp ffffffff80006d85: c3 ret ffffffff80006d86: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80006d8d: 00 00 00 ffffffff80006d90 <_ZN6Memory4ScanEP22limine_memmap_response>: #include "Heap.hpp" using namespace Kt; namespace Memory { LargestSection Scan(limine_memmap_response* mmap) { ffffffff80006d90: f3 0f 1e fa endbr64 ffffffff80006d94: 41 56 push %r14 ffffffff80006d96: 41 55 push %r13 ffffffff80006d98: 41 54 push %r12 ffffffff80006d9a: 55 push %rbp ffffffff80006d9b: 53 push %rbx LargestSection currentLargestSection{}; for (size_t i = 0; i < mmap->entry_count; i++) { ffffffff80006d9c: 4c 8b 6f 08 mov 0x8(%rdi),%r13 ffffffff80006da0: 4d 85 ed test %r13,%r13 ffffffff80006da3: 0f 84 ef 00 00 00 je ffffffff80006e98 <_ZN6Memory4ScanEP22limine_memmap_response+0x108> ffffffff80006da9: 49 89 fc mov %rdi,%r12 LargestSection currentLargestSection{}; ffffffff80006dac: 45 31 ed xor %r13d,%r13d ffffffff80006daf: 45 31 f6 xor %r14d,%r14d for (size_t i = 0; i < mmap->entry_count; i++) { ffffffff80006db2: 31 db xor %ebx,%ebx ffffffff80006db4: eb 19 jmp ffffffff80006dcf <_ZN6Memory4ScanEP22limine_memmap_response+0x3f> ffffffff80006db6: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80006dbd: 00 00 00 ffffffff80006dc0: 48 83 c3 01 add $0x1,%rbx ffffffff80006dc4: 49 3b 5c 24 08 cmp 0x8(%r12),%rbx ffffffff80006dc9: 0f 83 b1 00 00 00 jae ffffffff80006e80 <_ZN6Memory4ScanEP22limine_memmap_response+0xf0> auto entry = mmap->entries[i]; ffffffff80006dcf: 49 8b 44 24 10 mov 0x10(%r12),%rax ffffffff80006dd4: 48 8b 2c d8 mov (%rax,%rbx,8),%rbp if (entry->base == 0) { ffffffff80006dd8: 48 83 7d 00 00 cmpq $0x0,0x0(%rbp) ffffffff80006ddd: 74 e1 je ffffffff80006dc0 <_ZN6Memory4ScanEP22limine_memmap_response+0x30> continue; } if (entry->type == LIMINE_MEMMAP_USABLE) { ffffffff80006ddf: 48 83 7d 10 00 cmpq $0x0,0x10(%rbp) ffffffff80006de4: 75 da jne ffffffff80006dc0 <_ZN6Memory4ScanEP22limine_memmap_response+0x30> Print(string); ffffffff80006de6: 48 c7 c7 a8 ae 00 80 mov $0xffffffff8000aea8,%rdi ffffffff80006ded: e8 8e 01 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff80006df2: 48 8b 7d 08 mov 0x8(%rbp),%rdi ffffffff80006df6: be 0a 00 00 00 mov $0xa,%esi t.streamBaseType = newBase; ffffffff80006dfb: c7 05 f3 42 00 00 0a movl $0xa,0x42f3(%rip) # ffffffff8000b0f8 ffffffff80006e02: 00 00 00 Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff80006e05: e8 a6 fb ff ff call ffffffff800069b0 <_ZN3Lib13u64_2_basestrEmm> ffffffff80006e0a: 48 89 c7 mov %rax,%rdi ffffffff80006e0d: e8 6e 01 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> Print(string); ffffffff80006e12: 48 c7 c7 f2 ac 00 80 mov $0xffffffff8000acf2,%rdi ffffffff80006e19: e8 62 01 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff80006e1e: 48 8b 7d 00 mov 0x0(%rbp),%rdi ffffffff80006e22: be 10 00 00 00 mov $0x10,%esi t.streamBaseType = newBase; ffffffff80006e27: c7 05 c7 42 00 00 10 movl $0x10,0x42c7(%rip) # ffffffff8000b0f8 ffffffff80006e2e: 00 00 00 Print(Lib::u64_2_basestr(number, t.streamBaseType)); ffffffff80006e31: e8 7a fb ff ff call ffffffff800069b0 <_ZN3Lib13u64_2_basestrEmm> ffffffff80006e36: 48 89 c7 mov %rax,%rdi ffffffff80006e39: e8 42 01 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> Print(string); ffffffff80006e3e: 48 c7 c7 07 ad 00 80 mov $0xffffffff8000ad07,%rdi ffffffff80006e45: e8 36 01 00 00 call ffffffff80006f80 <_ZN2Kt5PrintEPKc> Putchar(chr); ffffffff80006e4a: bf 0a 00 00 00 mov $0xa,%edi ffffffff80006e4f: e8 fc 00 00 00 call ffffffff80006f50 <_ZN2Kt7PutcharEc> kout << "MemoryManagement: Found conventional memory section (size = " << base::dec << entry->length << " bytes, address = 0x" << base::hex << (uint64_t)entry->base << ")" << newline; if (entry->length > currentLargestSection.size) { ffffffff80006e54: 48 8b 45 08 mov 0x8(%rbp),%rax ffffffff80006e58: 49 39 c5 cmp %rax,%r13 ffffffff80006e5b: 0f 83 5f ff ff ff jae ffffffff80006dc0 <_ZN6Memory4ScanEP22limine_memmap_response+0x30> currentLargestSection = { .address = (uint64_t)entry->base, ffffffff80006e61: 4c 8b 75 00 mov 0x0(%rbp),%r14 currentLargestSection = { ffffffff80006e65: 49 89 c5 mov %rax,%r13 for (size_t i = 0; i < mmap->entry_count; i++) { ffffffff80006e68: 48 83 c3 01 add $0x1,%rbx ffffffff80006e6c: 49 3b 5c 24 08 cmp 0x8(%r12),%rbx ffffffff80006e71: 0f 82 58 ff ff ff jb ffffffff80006dcf <_ZN6Memory4ScanEP22limine_memmap_response+0x3f> ffffffff80006e77: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) ffffffff80006e7e: 00 00 }; } } } [[unlikely]] if (currentLargestSection.address == 0) { ffffffff80006e80: 4d 85 f6 test %r14,%r14 ffffffff80006e83: 74 13 je ffffffff80006e98 <_ZN6Memory4ScanEP22limine_memmap_response+0x108> Panic("Couldn't find a usable memory section.", nullptr); } return currentLargestSection; } ffffffff80006e85: 5b pop %rbx ffffffff80006e86: 4c 89 f0 mov %r14,%rax ffffffff80006e89: 5d pop %rbp ffffffff80006e8a: 4c 89 ea mov %r13,%rdx ffffffff80006e8d: 41 5c pop %r12 ffffffff80006e8f: 41 5d pop %r13 ffffffff80006e91: 41 5e pop %r14 ffffffff80006e93: c3 ret ffffffff80006e94: 0f 1f 40 00 nopl 0x0(%rax) Panic("Couldn't find a usable memory section.", nullptr); ffffffff80006e98: 45 31 f6 xor %r14d,%r14d ffffffff80006e9b: 31 f6 xor %esi,%esi ffffffff80006e9d: 48 c7 c7 e8 ae 00 80 mov $0xffffffff8000aee8,%rdi ffffffff80006ea4: e8 07 e0 ff ff call ffffffff80004eb0 <_Z5PanicPKcPN6System10PanicFrameE> } ffffffff80006ea9: 5b pop %rbx ffffffff80006eaa: 4c 89 f0 mov %r14,%rax ffffffff80006ead: 5d pop %rbp ffffffff80006eae: 4c 89 ea mov %r13,%rdx ffffffff80006eb1: 41 5c pop %r12 ffffffff80006eb3: 41 5d pop %r13 ffffffff80006eb5: 41 5e pop %r14 ffffffff80006eb7: c3 ret ffffffff80006eb8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) ffffffff80006ebf: 00 ffffffff80006ec0 <_Z3hcfv>: * Copyright (c) Daniel Hammer, Limine Contributors (via Limine C++ example) */ // Halt and catch fire function. void hcf() { ffffffff80006ec0: f3 0f 1e fa endbr64 ffffffff80006ec4: 0f 1f 40 00 nopl 0x0(%rax) for (;;) { #if defined(__x86_64__) asm("hlt"); ffffffff80006ec8: f4 hlt for (;;) ffffffff80006ec9: eb fd jmp ffffffff80006ec8 <_Z3hcfv+0x8> ffffffff80006ecb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80006ed0 <_ZN2Kt10InitializeEPjmmmhhhhhh>: void Initialize(std::uint32_t *framebuffer, std::size_t width, std::size_t height, std::size_t pitch, std::uint8_t red_mask_size, std::uint8_t red_mask_shift, std::uint8_t green_mask_size, std::uint8_t green_mask_shift, std::uint8_t blue_mask_size, std::uint8_t blue_mask_shift ) { ffffffff80006ed0: f3 0f 1e fa endbr64 ffffffff80006ed4: 48 83 ec 08 sub $0x8,%rsp ffffffff80006ed8: 48 89 f8 mov %rdi,%rax ctx = flanterm_fb_init( ffffffff80006edb: 45 0f b6 c9 movzbl %r9b,%r9d ffffffff80006edf: 45 0f b6 c0 movzbl %r8b,%r8d ffffffff80006ee3: 6a 00 push $0x0 ffffffff80006ee5: 6a 00 push $0x0 ffffffff80006ee7: 6a 00 push $0x0 ffffffff80006ee9: 6a 01 push $0x1 ffffffff80006eeb: 6a 00 push $0x0 ffffffff80006eed: 6a 00 push $0x0 ffffffff80006eef: 6a 00 push $0x0 ffffffff80006ef1: 6a 00 push $0x0 ffffffff80006ef3: 6a 00 push $0x0 ffffffff80006ef5: 6a 00 push $0x0 ffffffff80006ef7: 6a 00 push $0x0 ffffffff80006ef9: 6a 00 push $0x0 ffffffff80006efb: 6a 00 push $0x0 ffffffff80006efd: 6a 00 push $0x0 ffffffff80006eff: 0f b6 bc 24 98 00 00 movzbl 0x98(%rsp),%edi ffffffff80006f06: 00 ffffffff80006f07: 57 push %rdi ffffffff80006f08: 0f b6 bc 24 98 00 00 movzbl 0x98(%rsp),%edi ffffffff80006f0f: 00 ffffffff80006f10: 57 push %rdi ffffffff80006f11: 0f b6 bc 24 98 00 00 movzbl 0x98(%rsp),%edi ffffffff80006f18: 00 ffffffff80006f19: 57 push %rdi ffffffff80006f1a: 0f b6 bc 24 98 00 00 movzbl 0x98(%rsp),%edi ffffffff80006f21: 00 ffffffff80006f22: 57 push %rdi ffffffff80006f23: 31 ff xor %edi,%edi ffffffff80006f25: 41 51 push %r9 ffffffff80006f27: 49 89 c9 mov %rcx,%r9 ffffffff80006f2a: 48 89 f1 mov %rsi,%rcx ffffffff80006f2d: 31 f6 xor %esi,%esi ffffffff80006f2f: 41 50 push %r8 ffffffff80006f31: 49 89 d0 mov %rdx,%r8 ffffffff80006f34: 48 89 c2 mov %rax,%rdx ffffffff80006f37: e8 24 b2 ff ff call ffffffff80002160 ffffffff80006f3c: 48 89 05 95 98 0d 00 mov %rax,0xd9895(%rip) # ffffffff800e07d8 <_ZN2Kt3ctxE> NULL, NULL, NULL, 0, 0, 1, 0, 0, 0 ); } ffffffff80006f43: 48 81 c4 a8 00 00 00 add $0xa8,%rsp ffffffff80006f4a: c3 ret ffffffff80006f4b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80006f50 <_ZN2Kt7PutcharEc>: void Putchar(char c) { ffffffff80006f50: f3 0f 1e fa endbr64 ffffffff80006f54: 48 83 ec 18 sub $0x18,%rsp flanterm_write(ctx, &c, 1); ffffffff80006f58: ba 01 00 00 00 mov $0x1,%edx void Putchar(char c) { ffffffff80006f5d: 40 88 7c 24 0c mov %dil,0xc(%rsp) flanterm_write(ctx, &c, 1); ffffffff80006f62: 48 8b 3d 6f 98 0d 00 mov 0xd986f(%rip),%rdi # ffffffff800e07d8 <_ZN2Kt3ctxE> ffffffff80006f69: 48 8d 74 24 0c lea 0xc(%rsp),%rsi ffffffff80006f6e: e8 4d c0 ff ff call ffffffff80002fc0 } ffffffff80006f73: 48 83 c4 18 add $0x18,%rsp ffffffff80006f77: c3 ret ffffffff80006f78: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) ffffffff80006f7f: 00 ffffffff80006f80 <_ZN2Kt5PrintEPKc>: void Print(const char *text) { ffffffff80006f80: f3 0f 1e fa endbr64 namespace Lib { inline int strlen(const char *string) { int c = 0; while (*string != '\0') { ffffffff80006f84: 80 3f 00 cmpb $0x0,(%rdi) ffffffff80006f87: 48 89 fe mov %rdi,%rsi ffffffff80006f8a: 74 2c je ffffffff80006fb8 <_ZN2Kt5PrintEPKc+0x38> ffffffff80006f8c: 48 89 f8 mov %rdi,%rax int c = 0; ffffffff80006f8f: 31 d2 xor %edx,%edx ffffffff80006f91: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) string++; ffffffff80006f98: 48 83 c0 01 add $0x1,%rax c++; ffffffff80006f9c: 83 c2 01 add $0x1,%edx while (*string != '\0') { ffffffff80006f9f: 80 38 00 cmpb $0x0,(%rax) ffffffff80006fa2: 75 f4 jne ffffffff80006f98 <_ZN2Kt5PrintEPKc+0x18> flanterm_write(ctx, text, Lib::strlen(text)); ffffffff80006fa4: 48 8b 3d 2d 98 0d 00 mov 0xd982d(%rip),%rdi # ffffffff800e07d8 <_ZN2Kt3ctxE> ffffffff80006fab: 48 63 d2 movslq %edx,%rdx ffffffff80006fae: e9 0d c0 ff ff jmp ffffffff80002fc0 ffffffff80006fb3: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff80006fb8: 48 8b 3d 19 98 0d 00 mov 0xd9819(%rip),%rdi # ffffffff800e07d8 <_ZN2Kt3ctxE> ffffffff80006fbf: 31 d2 xor %edx,%edx ffffffff80006fc1: e9 fa bf ff ff jmp ffffffff80002fc0 ffffffff80006fc6: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) ffffffff80006fcd: 00 00 00 ffffffff80006fd0 : ffffffff80006fd0: 0f 01 17 lgdt (%rdi) ffffffff80006fd3: c3 ret ffffffff80006fd4 : ffffffff80006fd4: 6a 08 push $0x8 ffffffff80006fd6: 48 8d 05 03 00 00 00 lea 0x3(%rip),%rax # ffffffff80006fe0 ffffffff80006fdd: 50 push %rax ffffffff80006fde: 48 cb lretq ffffffff80006fe0 : ffffffff80006fe0: 66 b8 10 00 mov $0x10,%ax ffffffff80006fe4: 8e d8 mov %eax,%ds ffffffff80006fe6: 8e c0 mov %eax,%es ffffffff80006fe8: 8e e0 mov %eax,%fs ffffffff80006fea: 8e e8 mov %eax,%gs ffffffff80006fec: 8e d0 mov %eax,%ss ffffffff80006fee: c3 ret