=============================================================================== 00000000400283e0 : Heap_Control *RTEMS_Malloc_Initialize( const Memory_Information *mem, Heap_Initialization_or_extend_handler extend ) { 400283e0: a9bb7bfd stp x29, x30, [sp, #-80]! Heap_Initialization_or_extend_handler init_or_extend; uintptr_t page_size; size_t i; heap = &_Malloc_Heap; RTEMS_Malloc_Heap = heap; 400283e4: b00006e2 adrp x2, 40105000 { 400283e8: 910003fd mov x29, sp 400283ec: a9025bf5 stp x21, x22, [sp, #32] 400283f0: aa0003f6 mov x22, x0 init_or_extend = _Heap_Initialize; page_size = CPU_HEAP_ALIGNMENT; for (i = 0; i < _Memory_Get_count( mem ); ++i) { 400283f4: f9400000 ldr x0, [x0] { 400283f8: a90153f3 stp x19, x20, [sp, #16] 400283fc: a90363f7 stp x23, x24, [sp, #48] 40028400: a9046bf9 stp x25, x26, [sp, #64] RTEMS_Malloc_Heap = heap; 40028404: b00006fa adrp x26, 40105000 40028408: 912b235a add x26, x26, #0xac8 4002840c: f904805a str x26, [x2, #2304] for (i = 0; i < _Memory_Get_count( mem ); ++i) { 40028410: b4000420 cbz x0, 40028494 <== NEVER TAKEN init_or_extend = _Heap_Initialize; 40028414: 90fffff9 adrp x25, 40024000 40028418: 913e0339 add x25, x25, #0xf80 4002841c: aa0103f8 mov x24, x1 40028420: aa1903f7 mov x23, x25 for (i = 0; i < _Memory_Get_count( mem ); ++i) { 40028424: d2800015 mov x21, #0x0 // #0 40028428: d2800014 mov x20, #0x0 // #0 4002842c: d503201f nop const Memory_Information *information, size_t index ) { _Assert( index < _Memory_Get_count( information ) ); return &information->areas[ index ]; 40028430: f94006d3 ldr x19, [x22, #8] Memory_Area *area; uintptr_t space_available; area = _Memory_Get_area( mem, i ); space_available = ( *init_or_extend )( 40028434: aa1a03e0 mov x0, x26 40028438: d2800203 mov x3, #0x10 // #16 4002843c: 8b150273 add x19, x19, x21 * * @return The free memory area size in bytes of the memory area. */ RTEMS_INLINE_ROUTINE uintptr_t _Memory_Get_free_size( const Memory_Area *area ) { return (uintptr_t) area->end - (uintptr_t) area->free; 40028440: a9408a61 ldp x1, x2, [x19, #8] 40028444: cb010042 sub x2, x2, x1 40028448: d63f02e0 blr x23 _Memory_Get_free_begin( area ), _Memory_Get_free_size( area ), page_size ); if ( space_available > 0 ) { 4002844c: b4000080 cbz x0, 4002845c _Memory_Consume( area, _Memory_Get_free_size( area ) ); init_or_extend = extend; 40028450: aa1803f7 mov x23, x24 RTEMS_INLINE_ROUTINE void _Memory_Consume( Memory_Area *area, uintptr_t consume ) { area->free = (char *) area->free + consume; 40028454: f9400a60 ldr x0, [x19, #16] 40028458: f9000660 str x0, [x19, #8] for (i = 0; i < _Memory_Get_count( mem ); ++i) { 4002845c: f94002c0 ldr x0, [x22] 40028460: 91000694 add x20, x20, #0x1 40028464: 910062b5 add x21, x21, #0x18 40028468: eb00029f cmp x20, x0 4002846c: 54fffe23 b.cc 40028430 // b.lo, b.ul, b.last<== NEVER TAKEN } } if ( init_or_extend == _Heap_Initialize ) { 40028470: eb1902ff cmp x23, x25 40028474: 54000100 b.eq 40028494 // b.none _Internal_error( INTERNAL_ERROR_NO_MEMORY_FOR_HEAP ); } return heap; } 40028478: aa1a03e0 mov x0, x26 4002847c: a94153f3 ldp x19, x20, [sp, #16] 40028480: a9425bf5 ldp x21, x22, [sp, #32] 40028484: a94363f7 ldp x23, x24, [sp, #48] 40028488: a9446bf9 ldp x25, x26, [sp, #64] 4002848c: a8c57bfd ldp x29, x30, [sp], #80 40028490: d65f03c0 ret _Internal_error( INTERNAL_ERROR_NO_MEMORY_FOR_HEAP ); 40028494: 528002e0 mov w0, #0x17 // #23 40028498: 97fff382 bl 400252a0 <_Internal_error> 4002849c: 00000000 udf #0 =============================================================================== 0000000040021520 <_Console_simple_Read>: ssize_t _Console_simple_Read( rtems_libio_t *iop, void *buffer, size_t count ) { 40021520: a9bd7bfd stp x29, x30, [sp, #-48]! <== NOT EXECUTED ssize_t n; buf = buffer; n = (ssize_t) count; for ( i = 0; i < n; ++i ) { 40021524: f100005f cmp x2, #0x0 <== NOT EXECUTED { 40021528: 910003fd mov x29, sp <== NOT EXECUTED 4002152c: f90013f5 str x21, [sp, #32] <== NOT EXECUTED 40021530: aa0203f5 mov x21, x2 <== NOT EXECUTED for ( i = 0; i < n; ++i ) { 40021534: 540001ed b.le 40021570 <_Console_simple_Read+0x50> <== NOT EXECUTED 40021538: a90153f3 stp x19, x20, [sp, #16] <== NOT EXECUTED 4002153c: aa0103f3 mov x19, x1 <== NOT EXECUTED 40021540: 8b020034 add x20, x1, x2 <== NOT EXECUTED 40021544: 14000002 b 4002154c <_Console_simple_Read+0x2c> <== NOT EXECUTED c = getchark(); if ( c != -1 ) { break; } (void) rtems_task_wake_after( 1 ); 40021548: 94000d4e bl 40024a80 <== NOT EXECUTED c = getchark(); 4002154c: 9400000d bl 40021580 <== NOT EXECUTED 40021550: 2a0003e1 mov w1, w0 <== NOT EXECUTED if ( c != -1 ) { 40021554: 3100043f cmn w1, #0x1 <== NOT EXECUTED (void) rtems_task_wake_after( 1 ); 40021558: 52800020 mov w0, #0x1 // #1 <== NOT EXECUTED if ( c != -1 ) { 4002155c: 54ffff60 b.eq 40021548 <_Console_simple_Read+0x28> // b.none <== NOT EXECUTED } buf[ i ] = (char) c; 40021560: 38001661 strb w1, [x19], #1 <== NOT EXECUTED for ( i = 0; i < n; ++i ) { 40021564: eb14027f cmp x19, x20 <== NOT EXECUTED 40021568: 54ffff21 b.ne 4002154c <_Console_simple_Read+0x2c> // b.any <== NOT EXECUTED 4002156c: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED } return n; } 40021570: aa1503e0 mov x0, x21 <== NOT EXECUTED 40021574: f94013f5 ldr x21, [sp, #32] <== NOT EXECUTED 40021578: a8c37bfd ldp x29, x30, [sp], #48 <== NOT EXECUTED 4002157c: d65f03c0 ret <== NOT EXECUTED =============================================================================== 0000000040028250 <_Malloc_Process_deferred_frees>: { 40028250: a9be7bfd stp x29, x30, [sp, #-32]! <== NOT EXECUTED 40028254: 910003fd mov x29, sp <== NOT EXECUTED 40028258: a90153f3 stp x19, x20, [sp, #16] <== NOT EXECUTED __asm__ volatile ( 4002825c: d53b4221 mrs x1, daif <== NOT EXECUTED 40028260: d50342df msr daifset, #0x2 <== NOT EXECUTED return _Chain_Immutable_head( the_chain )->next; 40028264: 900006c0 adrp x0, 40100000 <_RTEMS_tasks_Information> <== NOT EXECUTED 40028268: 91108013 add x19, x0, #0x420 <== NOT EXECUTED if ( !_Chain_Is_empty(the_chain)) 4002826c: 91002274 add x20, x19, #0x8 <== NOT EXECUTED return _Chain_Immutable_head( the_chain )->next; 40028270: f9421000 ldr x0, [x0, #1056] <== NOT EXECUTED if ( !_Chain_Is_empty(the_chain)) 40028274: eb14001f cmp x0, x20 <== NOT EXECUTED 40028278: 540001a0 b.eq 400282ac <_Malloc_Process_deferred_frees+0x5c> // b.none<== NOT EXECUTED 4002827c: d503201f nop new_first = old_first->next; 40028280: f9400002 ldr x2, [x0] head->next = new_first; 40028284: f9000262 str x2, [x19] new_first->previous = head; 40028288: f9000453 str x19, [x2, #8] __asm__ volatile ( 4002828c: 92407c21 and x1, x1, #0xffffffff 40028290: d51b4221 msr daif, x1 free( to_be_freed ); 40028294: 97ffffcb bl 400281c0 __asm__ volatile ( 40028298: d53b4221 mrs x1, daif 4002829c: d50342df msr daifset, #0x2 return _Chain_Immutable_head( the_chain )->next; 400282a0: f9400260 ldr x0, [x19] if ( !_Chain_Is_empty(the_chain)) 400282a4: eb14001f cmp x0, x20 400282a8: 54fffec1 b.ne 40028280 <_Malloc_Process_deferred_frees+0x30> // b.any __asm__ volatile ( 400282ac: 92407c21 and x1, x1, #0xffffffff 400282b0: d51b4221 msr daif, x1 } 400282b4: a94153f3 ldp x19, x20, [sp, #16] 400282b8: a8c27bfd ldp x29, x30, [sp], #32 400282bc: d65f03c0 ret =============================================================================== 00000000400215e0 <_gettimeofday_r>: int _gettimeofday_r( struct _reent *ignored_reentrancy_stuff RTEMS_UNUSED, struct timeval *tp, void *__tz ) { 400215e0: a9bf7bfd stp x29, x30, [sp, #-16]! 400215e4: 910003fd mov x29, sp if ( !tp ) 400215e8: b40000c1 cbz x1, 40021600 <_gettimeofday_r+0x20> <== NEVER TAKEN 400215ec: aa0103e0 mov x0, x1 400215f0: 94000ffc bl 400255e0 <_Timecounter_Microtime> return 0; 400215f4: 52800000 mov w0, #0x0 // #0 struct timezone *tzp = __tz; return gettimeofday( tp, tzp ); } 400215f8: a8c17bfd ldp x29, x30, [sp], #16 400215fc: d65f03c0 ret rtems_set_errno_and_return_minus_one( EFAULT ); 40021600: 940034b0 bl 4002e8c0 <__errno> <== NOT EXECUTED 40021604: aa0003e1 mov x1, x0 <== NOT EXECUTED 40021608: 528001c2 mov w2, #0xe // #14 <== NOT EXECUTED 4002160c: 12800000 mov w0, #0xffffffff // #-1 <== NOT EXECUTED 40021610: b9000022 str w2, [x1] <== NOT EXECUTED 40021614: 17fffff9 b 400215f8 <_gettimeofday_r+0x18> <== NOT EXECUTED ... =============================================================================== 0000000040021eb0 <_libcsupport_scangr>: FILE *fp, struct group *grp, char *buffer, size_t bufsize ) { 40021eb0: a9bc7bfd stp x29, x30, [sp, #-64]! int grgid; char *grmem, *cp; int memcount; if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0) 40021eb4: 52800004 mov w4, #0x0 // #0 { 40021eb8: 910003fd mov x29, sp 40021ebc: a90153f3 stp x19, x20, [sp, #16] 40021ec0: aa0003f3 mov x19, x0 40021ec4: aa0103f4 mov x20, x1 40021ec8: a9020be3 stp x3, x2, [sp, #32] if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0) 40021ecc: 910083e3 add x3, sp, #0x20 40021ed0: 9100a3e2 add x2, sp, #0x28 40021ed4: 97fffef7 bl 40021ab0 40021ed8: 350000a0 cbnz w0, 40021eec <_libcsupport_scangr+0x3c> || !scanString(fp, &grp->gr_passwd, &buffer, &bufsize, 0) || !scanInt(fp, &grgid) || !scanString(fp, &grmem, &buffer, &bufsize, 1)) return 0; 40021edc: 52800000 mov w0, #0x0 // #0 } } grp->gr_mem[memcount] = NULL; return 1; } 40021ee0: a94153f3 ldp x19, x20, [sp, #16] 40021ee4: a8c47bfd ldp x29, x30, [sp], #64 40021ee8: d65f03c0 ret || !scanString(fp, &grp->gr_passwd, &buffer, &bufsize, 0) 40021eec: 910083e3 add x3, sp, #0x20 40021ef0: 9100a3e2 add x2, sp, #0x28 40021ef4: 91002281 add x1, x20, #0x8 40021ef8: aa1303e0 mov x0, x19 40021efc: 52800004 mov w4, #0x0 // #0 40021f00: 97fffeec bl 40021ab0 40021f04: 34fffec0 cbz w0, 40021edc <_libcsupport_scangr+0x2c> <== NEVER TAKEN || !scanInt(fp, &grgid) 40021f08: 9100d3e1 add x1, sp, #0x34 40021f0c: aa1303e0 mov x0, x19 40021f10: 97fffea4 bl 400219a0 40021f14: 34fffe40 cbz w0, 40021edc <_libcsupport_scangr+0x2c> <== NEVER TAKEN || !scanString(fp, &grmem, &buffer, &bufsize, 1)) 40021f18: 910083e3 add x3, sp, #0x20 40021f1c: 9100a3e2 add x2, sp, #0x28 40021f20: aa1303e0 mov x0, x19 40021f24: 9100e3e1 add x1, sp, #0x38 40021f28: 52800024 mov w4, #0x1 // #1 40021f2c: 97fffee1 bl 40021ab0 40021f30: 34fffd60 cbz w0, 40021edc <_libcsupport_scangr+0x2c> <== NEVER TAKEN if (grmem[0] == '\0') { 40021f34: f9401fe4 ldr x4, [sp, #56] 40021f38: d28002e1 mov x1, #0x17 // #23 grp->gr_gid = grgid; 40021f3c: b94037e0 ldr w0, [sp, #52] 40021f40: 79002280 strh w0, [x20, #16] if (grmem[0] == '\0') { 40021f44: 39400080 ldrb w0, [x4] 40021f48: 340001c0 cbz w0, 40021f80 <_libcsupport_scangr+0xd0> 40021f4c: aa0403e2 mov x2, x4 for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40021f50: 52800023 mov w3, #0x1 // #1 40021f54: d503201f nop if(*cp == ',') 40021f58: 7100b01f cmp w0, #0x2c memcount++; 40021f5c: 11000461 add w1, w3, #0x1 if(*cp == ',') 40021f60: 54000081 b.ne 40021f70 <_libcsupport_scangr+0xc0> // b.any if (bufsize < (((memcount+1)*sizeof(char *)) + 15)) 40021f64: 11000860 add w0, w3, #0x2 memcount++; 40021f68: 2a0103e3 mov w3, w1 if (bufsize < (((memcount+1)*sizeof(char *)) + 15)) 40021f6c: 2a0003e1 mov w1, w0 for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40021f70: 38401c40 ldrb w0, [x2, #1]! 40021f74: 35ffff20 cbnz w0, 40021f58 <_libcsupport_scangr+0xa8> if (bufsize < (((memcount+1)*sizeof(char *)) + 15)) 40021f78: d28001e0 mov x0, #0xf // #15 40021f7c: 8b21cc01 add x1, x0, w1, sxtw #3 40021f80: f94013e0 ldr x0, [sp, #32] 40021f84: eb01001f cmp x0, x1 40021f88: 54fffaa3 b.cc 40021edc <_libcsupport_scangr+0x2c> // b.lo, b.ul, b.last<== NEVER TAKEN grp->gr_mem = (char **)(((uintptr_t)buffer + 15) & ~15); 40021f8c: f94017e3 ldr x3, [sp, #40] 40021f90: 91003c63 add x3, x3, #0xf 40021f94: 927cec63 and x3, x3, #0xfffffffffffffff0 40021f98: f9000e83 str x3, [x20, #24] if (grmem[0] == '\0') { 40021f9c: 39400080 ldrb w0, [x4] 40021fa0: 340002c0 cbz w0, 40021ff8 <_libcsupport_scangr+0x148> grp->gr_mem[0] = grmem; 40021fa4: f9000064 str x4, [x3] for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40021fa8: 52800022 mov w2, #0x1 // #1 grp->gr_mem[memcount] = NULL; 40021fac: 91002063 add x3, x3, #0x8 for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40021fb0: f9401fe0 ldr x0, [sp, #56] 40021fb4: 39400001 ldrb w1, [x0] 40021fb8: 34000201 cbz w1, 40021ff8 <_libcsupport_scangr+0x148> <== NEVER TAKEN 40021fbc: d503201f nop if(*cp == ',') { 40021fc0: 7100b03f cmp w1, #0x2c grp->gr_mem[memcount++] = cp + 1; 40021fc4: 91000400 add x0, x0, #0x1 40021fc8: 93407c41 sxtw x1, w2 40021fcc: 937d7c44 sbfiz x4, x2, #3, #32 if(*cp == ',') { 40021fd0: 540000c1 b.ne 40021fe8 <_libcsupport_scangr+0x138> // b.any *cp = '\0'; 40021fd4: 381ff01f sturb wzr, [x0, #-1] grp->gr_mem[memcount++] = cp + 1; 40021fd8: 11000442 add w2, w2, #0x1 grp->gr_mem[memcount] = NULL; 40021fdc: 91002084 add x4, x4, #0x8 grp->gr_mem[memcount++] = cp + 1; 40021fe0: f9400e83 ldr x3, [x20, #24] 40021fe4: f8217860 str x0, [x3, x1, lsl #3] for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40021fe8: 39400001 ldrb w1, [x0] 40021fec: 35fffea1 cbnz w1, 40021fc0 <_libcsupport_scangr+0x110> grp->gr_mem[memcount] = NULL; 40021ff0: f9400e83 ldr x3, [x20, #24] 40021ff4: 8b040063 add x3, x3, x4 return 1; 40021ff8: 52800020 mov w0, #0x1 // #1 grp->gr_mem[memcount] = NULL; 40021ffc: f900007f str xzr, [x3] return 1; 40022000: 17ffffb8 b 40021ee0 <_libcsupport_scangr+0x30> ... =============================================================================== 0000000040021c50 <_libcsupport_scanpw>: FILE *fp, struct passwd *pwd, char *buffer, size_t bufsize ) { 40021c50: a9bc7bfd stp x29, x30, [sp, #-64]! int pwuid, pwgid; if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0) 40021c54: 52800004 mov w4, #0x0 // #0 { 40021c58: 910003fd mov x29, sp 40021c5c: a90153f3 stp x19, x20, [sp, #16] 40021c60: aa0003f3 mov x19, x0 40021c64: aa0103f4 mov x20, x1 40021c68: a9020be3 stp x3, x2, [sp, #32] if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0) 40021c6c: 910083e3 add x3, sp, #0x20 40021c70: 9100a3e2 add x2, sp, #0x28 40021c74: 97ffff8f bl 40021ab0 40021c78: 350000a0 cbnz w0, 40021c8c <_libcsupport_scanpw+0x3c> || !scanInt(fp, &pwgid) || !scanString(fp, &pwd->pw_comment, &buffer, &bufsize, 0) || !scanString(fp, &pwd->pw_gecos, &buffer, &bufsize, 0) || !scanString(fp, &pwd->pw_dir, &buffer, &bufsize, 0) || !scanString(fp, &pwd->pw_shell, &buffer, &bufsize, 1)) return 0; 40021c7c: 52800000 mov w0, #0x0 // #0 pwd->pw_uid = pwuid; pwd->pw_gid = pwgid; return 1; } 40021c80: a94153f3 ldp x19, x20, [sp, #16] 40021c84: a8c47bfd ldp x29, x30, [sp], #64 40021c88: d65f03c0 ret || !scanString(fp, &pwd->pw_passwd, &buffer, &bufsize, 0) 40021c8c: 910083e3 add x3, sp, #0x20 40021c90: 9100a3e2 add x2, sp, #0x28 40021c94: 91002281 add x1, x20, #0x8 40021c98: aa1303e0 mov x0, x19 40021c9c: 52800004 mov w4, #0x0 // #0 40021ca0: 97ffff84 bl 40021ab0 40021ca4: 34fffec0 cbz w0, 40021c7c <_libcsupport_scanpw+0x2c> <== NEVER TAKEN || !scanInt(fp, &pwuid) 40021ca8: 9100e3e1 add x1, sp, #0x38 40021cac: aa1303e0 mov x0, x19 40021cb0: 97ffff3c bl 400219a0 40021cb4: 34fffe40 cbz w0, 40021c7c <_libcsupport_scanpw+0x2c> || !scanInt(fp, &pwgid) 40021cb8: 9100f3e1 add x1, sp, #0x3c 40021cbc: aa1303e0 mov x0, x19 40021cc0: 97ffff38 bl 400219a0 40021cc4: 34fffdc0 cbz w0, 40021c7c <_libcsupport_scanpw+0x2c> || !scanString(fp, &pwd->pw_comment, &buffer, &bufsize, 0) 40021cc8: 910083e3 add x3, sp, #0x20 40021ccc: 9100a3e2 add x2, sp, #0x28 40021cd0: 91006281 add x1, x20, #0x18 40021cd4: aa1303e0 mov x0, x19 40021cd8: 52800004 mov w4, #0x0 // #0 40021cdc: 97ffff75 bl 40021ab0 40021ce0: 34fffce0 cbz w0, 40021c7c <_libcsupport_scanpw+0x2c> <== NEVER TAKEN || !scanString(fp, &pwd->pw_gecos, &buffer, &bufsize, 0) 40021ce4: 910083e3 add x3, sp, #0x20 40021ce8: 9100a3e2 add x2, sp, #0x28 40021cec: 91008281 add x1, x20, #0x20 40021cf0: aa1303e0 mov x0, x19 40021cf4: 52800004 mov w4, #0x0 // #0 40021cf8: 97ffff6e bl 40021ab0 40021cfc: 34fffc00 cbz w0, 40021c7c <_libcsupport_scanpw+0x2c> <== NEVER TAKEN || !scanString(fp, &pwd->pw_dir, &buffer, &bufsize, 0) 40021d00: 910083e3 add x3, sp, #0x20 40021d04: 9100a3e2 add x2, sp, #0x28 40021d08: 9100a281 add x1, x20, #0x28 40021d0c: aa1303e0 mov x0, x19 40021d10: 52800004 mov w4, #0x0 // #0 40021d14: 97ffff67 bl 40021ab0 40021d18: 34fffb20 cbz w0, 40021c7c <_libcsupport_scanpw+0x2c> <== NEVER TAKEN || !scanString(fp, &pwd->pw_shell, &buffer, &bufsize, 1)) 40021d1c: 910083e3 add x3, sp, #0x20 40021d20: 9100a3e2 add x2, sp, #0x28 40021d24: aa1303e0 mov x0, x19 40021d28: 9100c281 add x1, x20, #0x30 40021d2c: 52800024 mov w4, #0x1 // #1 40021d30: 97ffff60 bl 40021ab0 40021d34: 34fffa40 cbz w0, 40021c7c <_libcsupport_scanpw+0x2c> pwd->pw_gid = pwgid; 40021d38: 294707e2 ldp w2, w1, [sp, #56] return 1; 40021d3c: 52800020 mov w0, #0x1 // #1 pwd->pw_uid = pwuid; 40021d40: 79002282 strh w2, [x20, #16] pwd->pw_gid = pwgid; 40021d44: 79002681 strh w1, [x20, #18] return 1; 40021d48: 17ffffce b 40021c80 <_libcsupport_scanpw+0x30> 40021d4c: 00000000 udf #0 =============================================================================== 000000004003b950 <_read_r>: struct _reent *ptr RTEMS_UNUSED, int fd, void *buf, size_t nbytes ) { 4003b950: a9bf7bfd stp x29, x30, [sp, #-16]! 4003b954: 2a0103e0 mov w0, w1 4003b958: aa0203e1 mov x1, x2 4003b95c: 910003fd mov x29, sp rtems_libio_check_buffer( buffer ); 4003b960: b4000242 cbz x2, 4003b9a8 <_read_r+0x58> <== NEVER TAKEN rtems_libio_check_count( count ); 4003b964: aa0303e2 mov x2, x3 4003b968: b40000e3 cbz x3, 4003b984 <_read_r+0x34> <== NEVER TAKEN LIBIO_GET_IOP_WITH_ACCESS( fd, iop, LIBIO_FLAGS_READ, EBADF ); 4003b96c: b0000003 adrp x3, 4003c000 <_Scheduler_Table+0x48> 4003b970: b941f863 ldr w3, [x3, #504] 4003b974: 6b03001f cmp w0, w3 4003b978: 540000c2 b.cs 4003b990 <_read_r+0x40> // b.hs, b.nlast <== NEVER TAKEN return read( fd, buf, nbytes ); } 4003b97c: a8c17bfd ldp x29, x30, [sp], #16 4003b980: 17ffffc4 b 4003b890 rtems_libio_check_count( count ); 4003b984: d2800000 mov x0, #0x0 // #0 <== NOT EXECUTED } 4003b988: a8c17bfd ldp x29, x30, [sp], #16 <== NOT EXECUTED 4003b98c: d65f03c0 ret <== NOT EXECUTED LIBIO_GET_IOP_WITH_ACCESS( fd, iop, LIBIO_FLAGS_READ, EBADF ); 4003b990: 97ffcbcc bl 4002e8c0 <__errno> <== NOT EXECUTED 4003b994: aa0003e1 mov x1, x0 <== NOT EXECUTED 4003b998: 52800122 mov w2, #0x9 // #9 <== NOT EXECUTED 4003b99c: 92800000 mov x0, #0xffffffffffffffff // #-1 <== NOT EXECUTED 4003b9a0: b9000022 str w2, [x1] <== NOT EXECUTED 4003b9a4: 17fffff9 b 4003b988 <_read_r+0x38> <== NOT EXECUTED rtems_libio_check_buffer( buffer ); 4003b9a8: 97ffcbc6 bl 4002e8c0 <__errno> <== NOT EXECUTED 4003b9ac: aa0003e1 mov x1, x0 <== NOT EXECUTED 4003b9b0: 528002c2 mov w2, #0x16 // #22 <== NOT EXECUTED 4003b9b4: 92800000 mov x0, #0xffffffffffffffff // #-1 <== NOT EXECUTED 4003b9b8: b9000022 str w2, [x1] <== NOT EXECUTED 4003b9bc: 17fffff3 b 4003b988 <_read_r+0x38> <== NOT EXECUTED =============================================================================== 0000000040022010 : #include #include int chroot( const char *path ) { 40022010: a9ad7bfd stp x29, x30, [sp, #-304]! 40022014: 910003fd mov x29, sp 40022018: a90153f3 stp x19, x20, [sp, #16] 4002201c: aa0003f3 mov x19, x0 /* * We use the global environment for path evaluation. This makes it possible * to escape from a chroot environment referencing an unmounted file system. */ rtems_filesystem_eval_path_start_with_root_and_current( 40022020: 94002dad bl 4002d6d4 40022024: 52800323 mov w3, #0x19 // #25 40022028: aa0003e2 mov x2, x0 4002202c: aa1303e1 mov x1, x19 40022030: 910183e0 add x0, sp, #0x60 40022034: d00006e5 adrp x5, 40100000 <_RTEMS_tasks_Information> 40022038: d00006e4 adrp x4, 40100000 <_RTEMS_tasks_Information> 4002203c: 9108e084 add x4, x4, #0x238 40022040: 9108c0a5 add x5, x5, #0x230 40022044: 9400049b bl 400232b0 &rtems_global_user_env.current_directory ); rtems_filesystem_eval_path_extract_currentloc( &ctx, &loc ); new_current_loc = rtems_filesystem_location_transform_to_global( &loc ); if ( !rtems_filesystem_global_location_is_null( new_current_loc ) ) { 40022048: f0000094 adrp x20, 40035000 4002204c: 91266294 add x20, x20, #0x998 40022050: 910223e1 add x1, sp, #0x88 40022054: 9100c3e0 add x0, sp, #0x30 40022058: 94000696 bl 40023ab0 new_current_loc = rtems_filesystem_location_transform_to_global( &loc ); 4002205c: 9100c3e0 add x0, sp, #0x30 40022060: 940006c4 bl 40023b70 40022064: f90017e0 str x0, [sp, #40] if ( !rtems_filesystem_global_location_is_null( new_current_loc ) ) { 40022068: f9401000 ldr x0, [x0, #32] 4002206c: eb14001f cmp x0, x20 40022070: 54000680 b.eq 40022140 // b.none rtems_filesystem_global_location_t *new_root_loc = rtems_filesystem_global_location_obtain( &new_current_loc ); 40022074: 9100a3e0 add x0, sp, #0x28 40022078: 9400061e bl 400238f0 (void) ( *loc->handlers->fstat_h )( loc, &st ); 4002207c: f9401002 ldr x2, [x0, #32] st.st_mode = 0; 40022080: b900dbff str wzr, [sp, #216] 40022084: aa0003f3 mov x19, x0 (void) ( *loc->handlers->fstat_h )( loc, &st ); 40022088: 910323e1 add x1, sp, #0xc8 4002208c: f9401842 ldr x2, [x2, #48] 40022090: d63f0040 blr x2 return st.st_mode; 40022094: b940dbe0 ldr w0, [sp, #216] mode_t type = rtems_filesystem_location_type( &new_root_loc->location ); if ( S_ISDIR( type ) ) { 40022098: 12140c00 and w0, w0, #0xf000 4002209c: 7140101f cmp w0, #0x4, lsl #12 400220a0: 54000201 b.ne 400220e0 // b.any sc = rtems_libio_set_private_env(); 400220a4: 940002bf bl 40022ba0 if (sc == RTEMS_SUCCESSFUL) { 400220a8: 35000400 cbnz w0, 40022128 rtems_filesystem_global_location_assign( &rtems_filesystem_root, 400220ac: 9400076d bl 40023e60 rtems_filesystem_global_location_assign( 400220b0: 91002000 add x0, x0, #0x8 400220b4: aa1303e1 mov x1, x19 400220b8: 940005a6 bl 40023750 new_root_loc ); rtems_filesystem_global_location_assign( &rtems_filesystem_current, 400220bc: 94000769 bl 40023e60 rtems_filesystem_global_location_assign( 400220c0: f94017e1 ldr x1, [sp, #40] 400220c4: 940005a3 bl 40023750 } } else { rv = -1; } rtems_filesystem_eval_path_cleanup( &ctx ); 400220c8: 910183e0 add x0, sp, #0x60 400220cc: 94000535 bl 400235a0 int rv = 0; 400220d0: 52800000 mov w0, #0x0 // #0 if ( rv != 0 ) { rtems_filesystem_global_location_release( new_current_loc, false ); } return rv; } 400220d4: a94153f3 ldp x19, x20, [sp, #16] 400220d8: a8d37bfd ldp x29, x30, [sp], #304 400220dc: d65f03c0 ret if ( !rtems_filesystem_location_is_null( loc ) ) { 400220e0: f9401260 ldr x0, [x19, #32] 400220e4: eb14001f cmp x0, x20 400220e8: 54000080 b.eq 400220f8 // b.none <== NEVER TAKEN errno = eno; 400220ec: 94002be8 bl 4002d08c <__errno> 400220f0: 52800281 mov w1, #0x14 // #20 400220f4: b9000001 str w1, [x0] rtems_filesystem_global_location_release( new_root_loc, true ); 400220f8: 52800021 mov w1, #0x1 // #1 400220fc: aa1303e0 mov x0, x19 40022100: 94000634 bl 400239d0 rtems_filesystem_eval_path_cleanup( &ctx ); 40022104: 910183e0 add x0, sp, #0x60 40022108: 94000526 bl 400235a0 rtems_filesystem_global_location_release( new_current_loc, false ); 4002210c: f94017e0 ldr x0, [sp, #40] 40022110: 52800001 mov w1, #0x0 // #0 40022114: 9400062f bl 400239d0 40022118: 12800000 mov w0, #0xffffffff // #-1 } 4002211c: a94153f3 ldp x19, x20, [sp, #16] 40022120: a8d37bfd ldp x29, x30, [sp], #304 40022124: d65f03c0 ret if (sc != RTEMS_UNSATISFIED) { 40022128: 7100341f cmp w0, #0xd 4002212c: 54fffe60 b.eq 400220f8 // b.none <== NEVER TAKEN errno = ENOMEM; 40022130: 94002bd7 bl 4002d08c <__errno> 40022134: 52800181 mov w1, #0xc // #12 40022138: b9000001 str w1, [x0] 4002213c: 17ffffef b 400220f8 rtems_filesystem_eval_path_cleanup( &ctx ); 40022140: 910183e0 add x0, sp, #0x60 40022144: 94000517 bl 400235a0 if ( rv != 0 ) { 40022148: 17fffff1 b 4002210c 4002214c: 00000000 udf #0 =============================================================================== 0000000040026fd0 : void endgrent(void) { 40026fd0: a9be7bfd stp x29, x30, [sp, #-32]! pthread_once(&grp_once, grp_init); 40026fd4: 90000001 adrp x1, 40026000 <_Thread_Kill_zombies+0x60> 40026fd8: b00006e0 adrp x0, 40103000 <_Thread_Objects+0x540> { 40026fdc: 910003fd mov x29, sp pthread_once(&grp_once, grp_init); 40026fe0: 9139c021 add x1, x1, #0xe70 40026fe4: 910d0000 add x0, x0, #0x340 { 40026fe8: a90153f3 stp x19, x20, [sp, #16] pthread_once(&grp_once, grp_init); 40026fec: 97fff72d bl 40024ca0 return pthread_getspecific(grp_key); 40026ff0: b00006f4 adrp x20, 40103000 <_Thread_Objects+0x540> 40026ff4: b9433e80 ldr w0, [x20, #828] 40026ff8: 9400041a bl 40028060 grp_context *ctx = grp_get_context(); if (ctx == NULL) 40026ffc: b4000180 cbz x0, 4002702c return; if (ctx->fp != NULL) { 40027000: aa0003f3 mov x19, x0 40027004: f9400000 ldr x0, [x0] 40027008: b4000040 cbz x0, 40027010 <== NEVER TAKEN fclose(ctx->fp); 4002700c: 9400209e bl 4002f284 } free(ctx); 40027010: aa1303e0 mov x0, x19 40027014: 97ffff2f bl 40026cd0 pthread_setspecific(grp_key, NULL); 40027018: b9433e80 ldr w0, [x20, #828] 4002701c: d2800001 mov x1, #0x0 // #0 } 40027020: a94153f3 ldp x19, x20, [sp, #16] 40027024: a8c27bfd ldp x29, x30, [sp], #32 pthread_setspecific(grp_key, NULL); 40027028: 14000422 b 400280b0 } 4002702c: a94153f3 ldp x19, x20, [sp, #16] 40027030: a8c27bfd ldp x29, x30, [sp], #32 40027034: d65f03c0 ret ... =============================================================================== 0000000040021300 : void endpwent(void) { if (passwd_fp != NULL) 40021300: d0000700 adrp x0, 40103000 <_Thread_Objects+0x540> 40021304: f9420400 ldr x0, [x0, #1032] 40021308: b4000040 cbz x0, 40021310 <== NEVER TAKEN fclose(passwd_fp); 4002130c: 140037de b 4002f284 } 40021310: d65f03c0 ret <== NOT EXECUTED ... =============================================================================== 0000000040021b70 : /** * compatible with SVr4, 4.4BSD and X/OPEN - Change Directory */ int fchdir( int fd ) { 40021b70: a9b27bfd stp x29, x30, [sp, #-224]! 40021b74: 910003fd mov x29, sp st.st_mode = 0; st.st_uid = 0; st.st_gid = 0; LIBIO_GET_IOP( fd, iop ); 40021b78: 900000c1 adrp x1, 40039000 <__trunctfdf2+0x250> 40021b7c: b94bc821 ldr w1, [x1, #3016] { 40021b80: a90153f3 stp x19, x20, [sp, #16] LIBIO_GET_IOP( fd, iop ); 40021b84: 6b01001f cmp w0, w1 st.st_mode = 0; 40021b88: b9008bff str wzr, [sp, #136] st.st_uid = 0; 40021b8c: 79011fff strh wzr, [sp, #142] st.st_gid = 0; 40021b90: 790123ff strh wzr, [sp, #144] LIBIO_GET_IOP( fd, iop ); 40021b94: 54000982 b.cs 40021cc4 // b.hs, b.nlast 40021b98: f9001bf7 str x23, [sp, #48] 40021b9c: 52800a17 mov w23, #0x50 // #80 40021ba0: d0000713 adrp x19, 40103000 <_Thread_Heads+0x68> 40021ba4: 911a0273 add x19, x19, #0x680 40021ba8: 9b377c17 smull x23, w0, w23 __asm__ volatile ( 40021bac: d53b4221 mrs x1, daif 40021bb0: d50342df msr daifset, #0x2 val = *obj; 40021bb4: b8776a62 ldr w2, [x19, x23] *obj = val + arg; 40021bb8: 11400443 add w3, w2, #0x1, lsl #12 40021bbc: b8376a63 str w3, [x19, x23] __asm__ volatile ( 40021bc0: 92407c21 and x1, x1, #0xffffffff 40021bc4: d51b4221 msr daif, x1 40021bc8: 36400882 tbz w2, #8, 40021cd8 static inline void rtems_filesystem_instance_lock( const rtems_filesystem_location_info_t *loc ) { const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry; 40021bcc: a9025bf5 stp x21, x22, [sp, #32] 40021bd0: 93407c16 sxtw x22, w0 40021bd4: d2800a14 mov x20, #0x50 // #80 rtems_filesystem_instance_lock( &iop->pathinfo ); rv = (*iop->pathinfo.handlers->fstat_h)( &iop->pathinfo, &st ); 40021bd8: 910042f5 add x21, x23, #0x10 40021bdc: 9b144ed4 madd x20, x22, x20, x19 40021be0: 8b150275 add x21, x19, x21 40021be4: f9401e80 ldr x0, [x20, #56] (*mt_entry->ops->lock_h)( mt_entry ); 40021be8: f9400c01 ldr x1, [x0, #24] 40021bec: f9400021 ldr x1, [x1] 40021bf0: d63f0020 blr x1 40021bf4: f9401a82 ldr x2, [x20, #48] 40021bf8: aa1503e0 mov x0, x21 40021bfc: 9101e3e1 add x1, sp, #0x78 40021c00: f9401842 ldr x2, [x2, #48] 40021c04: d63f0040 blr x2 40021c08: 2a0003f4 mov w20, w0 if ( rv == 0 ) { 40021c0c: 340002a0 cbz w0, 40021c60 <== ALWAYS TAKEN static inline void rtems_filesystem_instance_unlock( const rtems_filesystem_location_info_t *loc ) { const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry; 40021c10: d2800a00 mov x0, #0x50 // #80 40021c14: 9b004ec0 madd x0, x22, x0, x19 40021c18: f9401c00 ldr x0, [x0, #56] (*mt_entry->ops->unlock_h)( mt_entry ); 40021c1c: f9400c01 ldr x1, [x0, #24] 40021c20: f9400421 ldr x1, [x1, #8] 40021c24: d63f0020 blr x1 __asm__ volatile ( 40021c28: d53b4220 mrs x0, daif 40021c2c: d50342df msr daifset, #0x2 *obj = val - arg; 40021c30: b8776a61 ldr w1, [x19, x23] 40021c34: 51400421 sub w1, w1, #0x1, lsl #12 40021c38: b8376a61 str w1, [x19, x23] __asm__ volatile ( 40021c3c: 92407c00 and x0, x0, #0xffffffff 40021c40: d51b4220 msr daif, x0 } } rtems_filesystem_instance_unlock( &iop->pathinfo ); rtems_libio_iop_drop( iop ); if ( rv == 0 ) { 40021c44: 34000254 cbz w20, 40021c8c 40021c48: a9425bf5 ldp x21, x22, [sp, #32] 40021c4c: f9401bf7 ldr x23, [sp, #48] rv = rtems_filesystem_chdir( &loc ); } return rv; } 40021c50: 2a1403e0 mov w0, w20 40021c54: a94153f3 ldp x19, x20, [sp, #16] 40021c58: a8ce7bfd ldp x29, x30, [sp], #224 40021c5c: d65f03c0 ret bool access_ok = rtems_filesystem_check_access( 40021c60: 79411fe2 ldrh w2, [sp, #142] 40021c64: 52800020 mov w0, #0x1 // #1 40021c68: 794123e3 ldrh w3, [sp, #144] 40021c6c: b9408be1 ldr w1, [sp, #136] 40021c70: 9400082c bl 40023d20 if ( access_ok ) { 40021c74: 72001c1f tst w0, #0xff 40021c78: 540001c0 b.eq 40021cb0 // b.none rtems_filesystem_location_clone( &loc, &iop->pathinfo ); 40021c7c: aa1503e1 mov x1, x21 40021c80: 910123e0 add x0, sp, #0x48 40021c84: 940026a7 bl 4002b720 40021c88: 17ffffe2 b 40021c10 rv = rtems_filesystem_chdir( &loc ); 40021c8c: 910123e0 add x0, sp, #0x48 40021c90: 94002680 bl 4002b690 40021c94: 2a0003f4 mov w20, w0 } 40021c98: 2a1403e0 mov w0, w20 40021c9c: a94153f3 ldp x19, x20, [sp, #16] rv = rtems_filesystem_chdir( &loc ); 40021ca0: a9425bf5 ldp x21, x22, [sp, #32] 40021ca4: f9401bf7 ldr x23, [sp, #48] } 40021ca8: a8ce7bfd ldp x29, x30, [sp], #224 40021cac: d65f03c0 ret errno = EACCES; 40021cb0: 94003af7 bl 4003088c <__errno> rv = -1; 40021cb4: 12800014 mov w20, #0xffffffff // #-1 errno = EACCES; 40021cb8: 528001a1 mov w1, #0xd // #13 40021cbc: b9000001 str w1, [x0] rv = -1; 40021cc0: 17ffffd4 b 40021c10 LIBIO_GET_IOP( fd, iop ); 40021cc4: 94003af2 bl 4003088c <__errno> 40021cc8: 12800014 mov w20, #0xffffffff // #-1 40021ccc: 52800121 mov w1, #0x9 // #9 40021cd0: b9000001 str w1, [x0] 40021cd4: 17ffffdf b 40021c50 __asm__ volatile ( 40021cd8: d53b4220 mrs x0, daif 40021cdc: d50342df msr daifset, #0x2 40021ce0: b8776a61 ldr w1, [x19, x23] 40021ce4: 51400421 sub w1, w1, #0x1, lsl #12 40021ce8: b8376a61 str w1, [x19, x23] __asm__ volatile ( 40021cec: 92407c00 and x0, x0, #0xffffffff 40021cf0: d51b4220 msr daif, x0 40021cf4: 94003ae6 bl 4003088c <__errno> 40021cf8: 12800014 mov w20, #0xffffffff // #-1 40021cfc: 52800121 mov w1, #0x9 // #9 40021d00: f9401bf7 ldr x23, [sp, #48] 40021d04: b9000001 str w1, [x0] 40021d08: 17ffffd2 b 40021c50 40021d0c: 00000000 udf #0 =============================================================================== 0000000040022120 : int fcntl( int fd, int cmd, ... ) { 40022120: a9ac7bfd stp x29, x30, [sp, #-320]! int ret; va_list ap; va_start( ap, cmd ); 40022124: 128005ea mov w10, #0xffffffd0 // #-48 40022128: 12800fe9 mov w9, #0xffffff80 // #-128 { 4002212c: 910003fd mov x29, sp va_start( ap, cmd ); 40022130: 910443eb add x11, sp, #0x110 LIBIO_GET_IOP( fd, iop ); 40022134: f00000a8 adrp x8, 40039000 <__trunctfdf2+0x250> 40022138: b94bc908 ldr w8, [x8, #3016] { 4002213c: a9025bf5 stp x21, x22, [sp, #32] 40022140: 93407c16 sxtw x22, w0 va_start( ap, cmd ); 40022144: 910503e0 add x0, sp, #0x140 { 40022148: a90363f7 stp x23, x24, [sp, #48] LIBIO_GET_IOP( fd, iop ); 4002214c: 6b0802df cmp w22, w8 va_start( ap, cmd ); 40022150: a90703e0 stp x0, x0, [sp, #112] 40022154: f90043eb str x11, [sp, #128] 40022158: 291127ea stp w10, w9, [sp, #136] { 4002215c: 3d8027e0 str q0, [sp, #144] 40022160: 3d802be1 str q1, [sp, #160] 40022164: 3d802fe2 str q2, [sp, #176] 40022168: 3d8033e3 str q3, [sp, #192] 4002216c: 3d8037e4 str q4, [sp, #208] 40022170: 3d803be5 str q5, [sp, #224] 40022174: 3d803fe6 str q6, [sp, #240] 40022178: 3d8043e7 str q7, [sp, #256] 4002217c: a9110fe2 stp x2, x3, [sp, #272] 40022180: a91217e4 stp x4, x5, [sp, #288] 40022184: a9131fe6 stp x6, x7, [sp, #304] LIBIO_GET_IOP( fd, iop ); 40022188: 54001dc2 b.cs 40022540 // b.hs, b.nlast return &rtems_libio_iops[ fd ]; 4002218c: 52800a02 mov w2, #0x50 // #80 40022190: a90153f3 stp x19, x20, [sp, #16] 40022194: b0000714 adrp x20, 40103000 <_Thread_Heads+0x68> 40022198: 911a0294 add x20, x20, #0x680 4002219c: 9b227ed5 smull x21, w22, w2 400221a0: 2a0103f3 mov w19, w1 400221a4: a9046bf9 stp x25, x26, [sp, #64] 400221a8: 8b150299 add x25, x20, x21 __asm__ volatile ( 400221ac: d53b4220 mrs x0, daif 400221b0: d50342df msr daifset, #0x2 val = *obj; 400221b4: b8756a81 ldr w1, [x20, x21] *obj = val + arg; 400221b8: 11400423 add w3, w1, #0x1, lsl #12 400221bc: b8356a83 str w3, [x20, x21] __asm__ volatile ( 400221c0: 92407c00 and x0, x0, #0xffffffff 400221c4: d51b4220 msr daif, x0 400221c8: 36401c61 tbz w1, #8, 40022554 switch ( cmd ) { 400221cc: 7100167f cmp w19, #0x5 400221d0: 54000ac0 b.eq 40022328 // b.none 400221d4: 5400056d b.le 40022280 400221d8: 7100227f cmp w19, #0x8 400221dc: 54000a60 b.eq 40022328 // b.none 400221e0: 540009cd b.le 40022318 400221e4: 7100267f cmp w19, #0x9 400221e8: 54000a00 b.eq 40022328 // b.none 400221ec: 7100527f cmp w19, #0x14 400221f0: 54000b21 b.ne 40022354 // b.any fd2 = va_arg( ap, int ); 400221f4: b94113fa ldr w26, [sp, #272] if ( (uint32_t) fd2 >= rtems_libio_number_iops ) { 400221f8: 6b08035f cmp w26, w8 400221fc: 54001922 b.cs 40022520 // b.hs, b.nlast <== NEVER TAKEN 40022200: 9b227f58 smull x24, w26, w2 40022204: a90573fb stp x27, x28, [sp, #80] 40022208: 8b18029b add x27, x20, x24 if (iop != iop2) 4002220c: eb1b033f cmp x25, x27 40022210: 54001920 b.eq 40022534 // b.none <== NEVER TAKEN val = *obj; 40022214: b8786a80 ldr w0, [x20, x24] rv = (*iop2->pathinfo.handlers->close_h)( iop2 ); 40022218: 93407f5c sxtw x28, w26 if ((rtems_libio_iop_flags( iop2 ) & LIBIO_FLAGS_OPEN) != 0) { 4002221c: 36401360 tbz w0, #8, 40022488 <== NEVER TAKEN rv = (*iop2->pathinfo.handlers->close_h)( iop2 ); 40022220: d2800a01 mov x1, #0x50 // #80 40022224: aa1b03e0 mov x0, x27 40022228: 9b015381 madd x1, x28, x1, x20 4002222c: f9401821 ldr x1, [x1, #48] 40022230: f9400421 ldr x1, [x1, #8] 40022234: d63f0020 blr x1 40022238: 2a0003f7 mov w23, w0 if (rv == 0) { 4002223c: 34001260 cbz w0, 40022488 <== ALWAYS TAKEN if (ret >= 0) { 40022240: a94573fb ldp x27, x28, [sp, #80] <== NOT EXECUTED 40022244: 36f80517 tbz w23, #31, 400222e4 <== NOT EXECUTED __asm__ volatile ( 40022248: d53b4221 mrs x1, daif 4002224c: d50342df msr daifset, #0x2 *obj = val - arg; 40022250: b8756a82 ldr w2, [x20, x21] 40022254: 51400442 sub w2, w2, #0x1, lsl #12 40022258: b8356a82 str w2, [x20, x21] __asm__ volatile ( 4002225c: 92407c21 and x1, x1, #0xffffffff 40022260: d51b4221 msr daif, x1 40022264: a94153f3 ldp x19, x20, [sp, #16] 40022268: a9446bf9 ldp x25, x26, [sp, #64] ret = vfcntl(fd,cmd,ap); va_end(ap); return ret; } 4002226c: 2a1703e0 mov w0, w23 40022270: a9425bf5 ldp x21, x22, [sp, #32] 40022274: a94363f7 ldp x23, x24, [sp, #48] 40022278: a8d47bfd ldp x29, x30, [sp], #320 4002227c: d65f03c0 ret switch ( cmd ) { 40022280: 71000a7f cmp w19, #0x2 40022284: 54000720 b.eq 40022368 // b.none 40022288: 540005ad b.le 4002233c 4002228c: 71000e7f cmp w19, #0x3 40022290: 54000da0 b.eq 40022444 // b.none flags = rtems_libio_fcntl_flags( va_arg( ap, int ) ); 40022294: b94113e0 ldr w0, [sp, #272] 40022298: 9400021e bl 40022b10 __asm__ volatile ( 4002229c: d53b4221 mrs x1, daif 400222a0: d50342df msr daifset, #0x2 *obj = val & arg; 400222a4: b8756a82 ldr w2, [x20, x21] 400222a8: 12804023 mov w3, #0xfffffdfe // #-514 400222ac: 0a030042 and w2, w2, w3 400222b0: b8356a82 str w2, [x20, x21] __asm__ volatile ( 400222b4: 92407c21 and x1, x1, #0xffffffff 400222b8: d51b4221 msr daif, x1 __asm__ volatile ( 400222bc: d53b4221 mrs x1, daif 400222c0: d50342df msr daifset, #0x2 *obj = val | arg; 400222c4: b8756a82 ldr w2, [x20, x21] rtems_libio_iop_flags_set( iop, flags & mask ); 400222c8: 52804023 mov w3, #0x201 // #513 400222cc: 0a030000 and w0, w0, w3 400222d0: 2a000040 orr w0, w2, w0 400222d4: b8356a80 str w0, [x20, x21] __asm__ volatile ( 400222d8: 92407c20 and x0, x1, #0xffffffff 400222dc: d51b4220 msr daif, x0 int ret = 0; 400222e0: 52800017 mov w23, #0x0 // #0 int err = (*iop->pathinfo.handlers->fcntl_h)( iop, cmd ); 400222e4: d2800a02 mov x2, #0x50 // #80 400222e8: 2a1303e1 mov w1, w19 400222ec: aa1903e0 mov x0, x25 400222f0: 9b0252d6 madd x22, x22, x2, x20 400222f4: f9401ac2 ldr x2, [x22, #48] 400222f8: f9402842 ldr x2, [x2, #80] 400222fc: d63f0040 blr x2 40022300: 2a0003f3 mov w19, w0 if (err) { 40022304: 34fffa20 cbz w0, 40022248 <== ALWAYS TAKEN errno = err; 40022308: 94003961 bl 4003088c <__errno> <== NOT EXECUTED ret = -1; 4002230c: 12800017 mov w23, #0xffffffff // #-1 <== NOT EXECUTED errno = err; 40022310: b9000013 str w19, [x0] <== NOT EXECUTED ret = -1; 40022314: 17ffffcd b 40022248 <== NOT EXECUTED switch ( cmd ) { 40022318: 71001a7f cmp w19, #0x6 4002231c: 54000060 b.eq 40022328 // b.none 40022320: 71001e7f cmp w19, #0x7 40022324: 54000181 b.ne 40022354 // b.any <== NEVER TAKEN errno = ENOTSUP; 40022328: 94003959 bl 4003088c <__errno> ret = -1; 4002232c: 12800017 mov w23, #0xffffffff // #-1 errno = ENOTSUP; 40022330: 528010c1 mov w1, #0x86 // #134 40022334: b9000001 str w1, [x0] if (ret >= 0) { 40022338: 17ffffc4 b 40022248 switch ( cmd ) { 4002233c: 340002d3 cbz w19, 40022394 40022340: 7100067f cmp w19, #0x1 40022344: 54000081 b.ne 40022354 // b.any <== NEVER TAKEN val = *obj; 40022348: b8756a97 ldr w23, [x20, x21] ret = ((rtems_libio_iop_flags(iop) & LIBIO_FLAGS_CLOSE_ON_EXEC) != 0); 4002234c: d34b2ef7 ubfx x23, x23, #11, #1 if (ret >= 0) { 40022350: 17ffffe5 b 400222e4 errno = EINVAL; 40022354: 9400394e bl 4003088c <__errno> ret = -1; 40022358: 12800017 mov w23, #0xffffffff // #-1 errno = EINVAL; 4002235c: 528002c1 mov w1, #0x16 // #22 40022360: b9000001 str w1, [x0] if (ret >= 0) { 40022364: 17ffffb9 b 40022248 if ( va_arg( ap, int ) ) 40022368: b94113f7 ldr w23, [sp, #272] 4002236c: 34000777 cbz w23, 40022458 __asm__ volatile ( 40022370: d53b4220 mrs x0, daif 40022374: d50342df msr daifset, #0x2 *obj = val | arg; 40022378: b8756a81 ldr w1, [x20, x21] 4002237c: 32150021 orr w1, w1, #0x800 40022380: b8356a81 str w1, [x20, x21] __asm__ volatile ( 40022384: 92407c00 and x0, x0, #0xffffffff 40022388: d51b4220 msr daif, x0 int ret = 0; 4002238c: 52800017 mov w23, #0x0 // #0 return _Atomic_Fetch_or_uint( &iop->flags, set, ATOMIC_ORDER_RELAXED ); 40022390: 17ffffd5 b 400222e4 val = *obj; 40022394: b8756a80 ldr w0, [x20, x21] oflag = rtems_libio_to_fcntl_flags( rtems_libio_iop_flags( iop ) ); 40022398: 940001f2 bl 40022b60 4002239c: 2a0003fa mov w26, w0 diop = rtems_libio_allocate(); 400223a0: 94000200 bl 40022ba0 400223a4: aa0003f8 mov x24, x0 if (diop != NULL) { 400223a8: b4000f20 cbz x0, 4002258c <== NEVER TAKEN const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry; 400223ac: f9401f20 ldr x0, [x25, #56] (*mt_entry->ops->lock_h)( mt_entry ); 400223b0: f9400c01 ldr x1, [x0, #24] 400223b4: f9400021 ldr x1, [x1] 400223b8: d63f0020 blr x1 rtems_filesystem_location_clone( &diop->pathinfo, &iop->pathinfo ); 400223bc: 910042a1 add x1, x21, #0x10 400223c0: 91004300 add x0, x24, #0x10 400223c4: 8b010281 add x1, x20, x1 400223c8: 940024d6 bl 4002b720 const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry; 400223cc: f9401f20 ldr x0, [x25, #56] (*mt_entry->ops->unlock_h)( mt_entry ); 400223d0: f9400c01 ldr x1, [x0, #24] 400223d4: f9400421 ldr x1, [x1, #8] 400223d8: d63f0020 blr x1 rv = (*diop->pathinfo.handlers->open_h)( diop, NULL, oflag, 0 ); 400223dc: f9401b04 ldr x4, [x24, #48] 400223e0: 2a1a03e2 mov w2, w26 400223e4: aa1803e0 mov x0, x24 400223e8: 52800003 mov w3, #0x0 // #0 400223ec: d2800001 mov x1, #0x0 // #0 400223f0: f9400084 ldr x4, [x4] 400223f4: d63f0080 blr x4 400223f8: 2a0003f7 mov w23, w0 if ( rv == 0 ) { 400223fc: 350003e0 cbnz w0, 40022478 <== NEVER TAKEN LIBIO_FLAGS_OPEN | rtems_libio_fcntl_flags( oflag ) 40022400: 2a1a03e0 mov w0, w26 40022404: 940001c3 bl 40022b10 __asm__ volatile ( 40022408: d53b4221 mrs x1, daif 4002240c: d50342df msr daifset, #0x2 *obj = val | arg; 40022410: b9400302 ldr w2, [x24] 40022414: 2a020000 orr w0, w0, w2 40022418: 32180000 orr w0, w0, #0x100 4002241c: b9000300 str w0, [x24] __asm__ volatile ( 40022420: 92407c20 and x0, x1, #0xffffffff 40022424: d51b4220 msr daif, x0 rv = rtems_libio_iop_to_descriptor( diop ); 40022428: cb140318 sub x24, x24, x20 4002242c: b202e7f7 mov x23, #0xcccccccccccccccc // #-3689348814741910324 40022430: f29999b7 movk x23, #0xcccd 40022434: 9344ff18 asr x24, x24, #4 40022438: 1b177f17 mul w23, w24, w23 if (ret >= 0) { 4002243c: 37fff077 tbnz w23, #31, 40022248 <== NEVER TAKEN 40022440: 17ffffa9 b 400222e4 val = *obj; 40022444: b8756a80 ldr w0, [x20, x21] ret = rtems_libio_to_fcntl_flags( rtems_libio_iop_flags( iop ) ); 40022448: 940001c6 bl 40022b60 4002244c: 2a0003f7 mov w23, w0 if (ret >= 0) { 40022450: 37ffefd7 tbnz w23, #31, 40022248 <== NEVER TAKEN 40022454: 17ffffa4 b 400222e4 __asm__ volatile ( 40022458: d53b4220 mrs x0, daif 4002245c: d50342df msr daifset, #0x2 *obj = val & arg; 40022460: b8756a81 ldr w1, [x20, x21] 40022464: 12147821 and w1, w1, #0xfffff7ff 40022468: b8356a81 str w1, [x20, x21] __asm__ volatile ( 4002246c: 92407c00 and x0, x0, #0xffffffff 40022470: d51b4220 msr daif, x0 return _Atomic_Fetch_and_uint( &iop->flags, ~clear, ATOMIC_ORDER_RELAXED ); 40022474: 17ffff9c b 400222e4 rtems_libio_free( diop ); 40022478: aa1803e0 mov x0, x24 <== NOT EXECUTED 4002247c: 940001e1 bl 40022c00 <== NOT EXECUTED if (ret >= 0) { 40022480: 37ffee57 tbnz w23, #31, 40022248 <== NOT EXECUTED 40022484: 17ffff98 b 400222e4 <== NOT EXECUTED val = *obj; 40022488: b8756a80 ldr w0, [x20, x21] oflag = rtems_libio_to_fcntl_flags( rtems_libio_iop_flags( iop ) ); 4002248c: 940001b5 bl 40022b60 40022490: b9006fe0 str w0, [sp, #108] rtems_libio_iop_flags_set( iop2, rtems_libio_fcntl_flags( oflag ) ); 40022494: 9400019f bl 40022b10 __asm__ volatile ( 40022498: d53b4221 mrs x1, daif 4002249c: d50342df msr daifset, #0x2 *obj = val | arg; 400224a0: b8786a83 ldr w3, [x20, x24] 400224a4: 2a000063 orr w3, w3, w0 400224a8: b8386a83 str w3, [x20, x24] __asm__ volatile ( 400224ac: 92407c21 and x1, x1, #0xffffffff 400224b0: d51b4221 msr daif, x1 const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry; 400224b4: f9401f20 ldr x0, [x25, #56] rtems_filesystem_location_clone( &iop2->pathinfo, &iop->pathinfo ); 400224b8: 91004318 add x24, x24, #0x10 (*mt_entry->ops->lock_h)( mt_entry ); 400224bc: f9400c01 ldr x1, [x0, #24] 400224c0: f9400021 ldr x1, [x1] 400224c4: d63f0020 blr x1 400224c8: 910042a1 add x1, x21, #0x10 400224cc: 8b180280 add x0, x20, x24 400224d0: 8b010281 add x1, x20, x1 400224d4: 94002493 bl 4002b720 const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry; 400224d8: f9401f20 ldr x0, [x25, #56] (*mt_entry->ops->unlock_h)( mt_entry ); 400224dc: f9400c01 ldr x1, [x0, #24] 400224e0: f9400421 ldr x1, [x1, #8] 400224e4: d63f0020 blr x1 rv = (*iop2->pathinfo.handlers->open_h)( iop2, NULL, oflag, 0 ); 400224e8: d2800a01 mov x1, #0x50 // #80 400224ec: b9406fe2 ldr w2, [sp, #108] 400224f0: aa1b03e0 mov x0, x27 400224f4: 52800003 mov w3, #0x0 // #0 400224f8: 9b01539c madd x28, x28, x1, x20 400224fc: d2800001 mov x1, #0x0 // #0 40022500: f9401b84 ldr x4, [x28, #48] 40022504: f9400084 ldr x4, [x4] 40022508: d63f0080 blr x4 rv = fd2; 4002250c: 7100001f cmp w0, #0x0 40022510: 1a9a1017 csel w23, w0, w26, ne // ne = any 40022514: a94573fb ldp x27, x28, [sp, #80] if (ret >= 0) { 40022518: 37ffe997 tbnz w23, #31, 40022248 <== NEVER TAKEN 4002251c: 17ffff72 b 400222e4 rtems_set_errno_and_return_minus_one( EBADF ); 40022520: 940038db bl 4003088c <__errno> <== NOT EXECUTED 40022524: 12800017 mov w23, #0xffffffff // #-1 <== NOT EXECUTED 40022528: 52800121 mov w1, #0x9 // #9 <== NOT EXECUTED 4002252c: b9000001 str w1, [x0] <== NOT EXECUTED if (ret >= 0) { 40022530: 17ffff46 b 40022248 <== NOT EXECUTED int rv = 0; 40022534: 52800017 mov w23, #0x0 // #0 <== NOT EXECUTED 40022538: a94573fb ldp x27, x28, [sp, #80] <== NOT EXECUTED 4002253c: 17ffff6a b 400222e4 <== NOT EXECUTED LIBIO_GET_IOP( fd, iop ); 40022540: 940038d3 bl 4003088c <__errno> 40022544: 12800017 mov w23, #0xffffffff // #-1 40022548: 52800121 mov w1, #0x9 // #9 4002254c: b9000001 str w1, [x0] 40022550: 17ffff47 b 4002226c __asm__ volatile ( 40022554: d53b4220 mrs x0, daif 40022558: d50342df msr daifset, #0x2 *obj = val - arg; 4002255c: b8756a81 ldr w1, [x20, x21] 40022560: 51400421 sub w1, w1, #0x1, lsl #12 40022564: b8356a81 str w1, [x20, x21] __asm__ volatile ( 40022568: 92407c00 and x0, x0, #0xffffffff 4002256c: d51b4220 msr daif, x0 40022570: 940038c7 bl 4003088c <__errno> 40022574: 12800017 mov w23, #0xffffffff // #-1 40022578: 52800121 mov w1, #0x9 // #9 4002257c: a94153f3 ldp x19, x20, [sp, #16] 40022580: a9446bf9 ldp x25, x26, [sp, #64] 40022584: b9000001 str w1, [x0] 40022588: 17ffff39 b 4002226c rv = -1; 4002258c: 12800017 mov w23, #0xffffffff // #-1 <== NOT EXECUTED 40022590: 17ffff2e b 40022248 <== NOT EXECUTED ... =============================================================================== 0000000040026ac0 : */ long fpathconf( int fd, int name ) { 40026ac0: a9be7bfd stp x29, x30, [sp, #-32]! 40026ac4: 910003fd mov x29, sp long return_value; rtems_libio_t *iop; const rtems_filesystem_limits_and_options_t *the_limits; LIBIO_GET_IOP( fd, iop ); 40026ac8: f0000062 adrp x2, 40035000 40026acc: b9477842 ldr w2, [x2, #1912] 40026ad0: 6b02001f cmp w0, w2 40026ad4: 54000a62 b.cs 40026c20 // b.hs, b.nlast 40026ad8: a90153f3 stp x19, x20, [sp, #16] 40026adc: 52800a14 mov w20, #0x50 // #80 40026ae0: 900006f3 adrp x19, 40102000 <_Configuration_Scheduler_priority_dflt+0x1688> 40026ae4: 913ca273 add x19, x19, #0xf28 40026ae8: 9b347c14 smull x20, w0, w20 __asm__ volatile ( 40026aec: d53b4222 mrs x2, daif 40026af0: d50342df msr daifset, #0x2 val = *obj; 40026af4: b8736a83 ldr w3, [x20, x19] *obj = val + arg; 40026af8: 11400464 add w4, w3, #0x1, lsl #12 40026afc: b8336a84 str w4, [x20, x19] __asm__ volatile ( 40026b00: 92407c42 and x2, x2, #0xffffffff 40026b04: d51b4222 msr daif, x2 40026b08: 36400983 tbz w3, #8, 40026c38 <== NEVER TAKEN /* * Now process the information request. */ the_limits = iop->pathinfo.mt_entry->pathconf_limits_and_options; 40026b0c: 93407c00 sxtw x0, w0 40026b10: d2800a02 mov x2, #0x50 // #80 switch ( name ) { 40026b14: 7100183f cmp w1, #0x6 the_limits = iop->pathinfo.mt_entry->pathconf_limits_and_options; 40026b18: 9b024c00 madd x0, x0, x2, x19 40026b1c: f9401c00 ldr x0, [x0, #56] 40026b20: f9402c00 ldr x0, [x0, #88] switch ( name ) { 40026b24: 54000560 b.eq 40026bd0 // b.none 40026b28: 5400030c b.gt 40026b88 40026b2c: 71000c3f cmp w1, #0x3 40026b30: 54000540 b.eq 40026bd8 // b.none 40026b34: 5400022c b.gt 40026b78 40026b38: 7100043f cmp w1, #0x1 40026b3c: 54000560 b.eq 40026be8 // b.none 40026b40: 7100083f cmp w1, #0x2 40026b44: 54000341 b.ne 40026bac // b.any break; case _PC_MAX_CANON: return_value = the_limits->max_canon; break; case _PC_MAX_INPUT: return_value = the_limits->max_input; 40026b48: b9800800 ldrsw x0, [x0, #8] break; 40026b4c: d503201f nop __asm__ volatile ( 40026b50: d53b4221 mrs x1, daif 40026b54: d50342df msr daifset, #0x2 *obj = val - arg; 40026b58: b8736a82 ldr w2, [x20, x19] 40026b5c: 51400442 sub w2, w2, #0x1, lsl #12 40026b60: b8336a82 str w2, [x20, x19] __asm__ volatile ( 40026b64: 92407c21 and x1, x1, #0xffffffff 40026b68: d51b4221 msr daif, x1 40026b6c: a94153f3 ldp x19, x20, [sp, #16] break; } rtems_libio_iop_drop( iop ); return return_value; } 40026b70: a8c27bfd ldp x29, x30, [sp], #32 40026b74: d65f03c0 ret switch ( name ) { 40026b78: 7100103f cmp w1, #0x4 40026b7c: 54000320 b.eq 40026be0 // b.none return_value = the_limits->pipe_buf; 40026b80: b9801400 ldrsw x0, [x0, #20] break; 40026b84: 17fffff3 b 40026b50 switch ( name ) { 40026b88: 7100243f cmp w1, #0x9 40026b8c: 54000320 b.eq 40026bf0 // b.none 40026b90: 5400014d b.le 40026bb8 40026b94: 7100283f cmp w1, #0xa 40026b98: 54000300 b.eq 40026bf8 // b.none 40026b9c: 71002c3f cmp w1, #0xb 40026ba0: 54000301 b.ne 40026c00 // b.any return_value = the_limits->posix_sync_io; 40026ba4: b9802800 ldrsw x0, [x0, #40] break; 40026ba8: 17ffffea b 40026b50 switch ( name ) { 40026bac: 350002a1 cbnz w1, 40026c00 <== NEVER TAKEN return_value = the_limits->link_max; 40026bb0: b9800000 ldrsw x0, [x0] break; 40026bb4: 17ffffe7 b 40026b50 switch ( name ) { 40026bb8: 71001c3f cmp w1, #0x7 40026bbc: 540002e0 b.eq 40026c18 // b.none 40026bc0: 7100203f cmp w1, #0x8 40026bc4: 540001e1 b.ne 40026c00 // b.any <== NEVER TAKEN return_value = the_limits->posix_vdisable; 40026bc8: b9802c00 ldrsw x0, [x0, #44] break; 40026bcc: 17ffffe1 b 40026b50 return_value = the_limits->posix_chown_restrictions; 40026bd0: b9801c00 ldrsw x0, [x0, #28] break; 40026bd4: 17ffffdf b 40026b50 return_value = the_limits->name_max; 40026bd8: b9800c00 ldrsw x0, [x0, #12] break; 40026bdc: 17ffffdd b 40026b50 return_value = the_limits->path_max; 40026be0: b9801000 ldrsw x0, [x0, #16] break; 40026be4: 17ffffdb b 40026b50 return_value = the_limits->max_canon; 40026be8: b9800400 ldrsw x0, [x0, #4] break; 40026bec: 17ffffd9 b 40026b50 return_value = the_limits->posix_async_io; 40026bf0: b9801800 ldrsw x0, [x0, #24] break; 40026bf4: 17ffffd7 b 40026b50 return_value = the_limits->posix_prio_io; 40026bf8: b9802400 ldrsw x0, [x0, #36] break; 40026bfc: 17ffffd5 b 40026b50 errno = EINVAL; 40026c00: 94001923 bl 4002d08c <__errno> 40026c04: aa0003e1 mov x1, x0 40026c08: 528002c2 mov w2, #0x16 // #22 return_value = -1; 40026c0c: 92800000 mov x0, #0xffffffffffffffff // #-1 errno = EINVAL; 40026c10: b9000022 str w2, [x1] break; 40026c14: 17ffffcf b 40026b50 return_value = the_limits->posix_no_trunc; 40026c18: b9802000 ldrsw x0, [x0, #32] break; 40026c1c: 17ffffcd b 40026b50 LIBIO_GET_IOP( fd, iop ); 40026c20: 9400191b bl 4002d08c <__errno> 40026c24: aa0003e1 mov x1, x0 40026c28: 52800122 mov w2, #0x9 // #9 40026c2c: 92800000 mov x0, #0xffffffffffffffff // #-1 40026c30: b9000022 str w2, [x1] 40026c34: 17ffffcf b 40026b70 __asm__ volatile ( 40026c38: d53b4220 mrs x0, daif <== NOT EXECUTED 40026c3c: d50342df msr daifset, #0x2 <== NOT EXECUTED 40026c40: b8736a81 ldr w1, [x20, x19] <== NOT EXECUTED 40026c44: 51400421 sub w1, w1, #0x1, lsl #12 <== NOT EXECUTED 40026c48: b8336a81 str w1, [x20, x19] <== NOT EXECUTED __asm__ volatile ( 40026c4c: 92407c00 and x0, x0, #0xffffffff <== NOT EXECUTED 40026c50: d51b4220 msr daif, x0 <== NOT EXECUTED 40026c54: 9400190e bl 4002d08c <__errno> <== NOT EXECUTED 40026c58: aa0003e1 mov x1, x0 <== NOT EXECUTED 40026c5c: 52800122 mov w2, #0x9 // #9 <== NOT EXECUTED 40026c60: 92800000 mov x0, #0xffffffffffffffff // #-1 <== NOT EXECUTED 40026c64: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED 40026c68: b9000022 str w2, [x1] <== NOT EXECUTED 40026c6c: 17ffffc1 b 40026b70 <== NOT EXECUTED =============================================================================== 000000004003b640 : int fstat( int fd, struct stat *sbuf ) { 4003b640: a9bd7bfd stp x29, x30, [sp, #-48]! 4003b644: 910003fd mov x29, sp int rv; /* * Check to see if we were passed a valid pointer. */ if ( !sbuf ) 4003b648: b4000861 cbz x1, 4003b754 <== NEVER TAKEN 4003b64c: a90153f3 stp x19, x20, [sp, #16] 4003b650: 93407c13 sxtw x19, w0 rtems_set_errno_and_return_minus_one( EFAULT ); /* * Now process the stat() request. */ LIBIO_GET_IOP( fd, iop ); 4003b654: b0000000 adrp x0, 4003c000 <_Scheduler_Table+0x48> 4003b658: b941f800 ldr w0, [x0, #504] 4003b65c: 6b00027f cmp w19, w0 4003b660: 540004e2 b.cs 4003b6fc // b.hs, b.nlast return &rtems_libio_iops[ fd ]; 4003b664: f90013f5 str x21, [sp, #32] 4003b668: 52800a15 mov w21, #0x50 // #80 4003b66c: aa0103e3 mov x3, x1 4003b670: f0000634 adrp x20, 40102000 <_Configuration_Scheduler_priority_dflt+0x15d0> 4003b674: 913f8294 add x20, x20, #0xfe0 4003b678: 9b357e75 smull x21, w19, w21 __asm__ volatile ( 4003b67c: d53b4220 mrs x0, daif 4003b680: d50342df msr daifset, #0x2 val = *obj; 4003b684: b8746aa1 ldr w1, [x21, x20] *obj = val + arg; 4003b688: 11400422 add w2, w1, #0x1, lsl #12 4003b68c: b8346aa2 str w2, [x21, x20] __asm__ volatile ( 4003b690: 92407c00 and x0, x0, #0xffffffff 4003b694: d51b4220 msr daif, x0 4003b698: 36400401 tbz w1, #8, 4003b718 /* * Zero out the stat structure so the various support * versions of stat don't have to. */ memset( sbuf, 0, sizeof(struct stat) ); 4003b69c: aa0303e0 mov x0, x3 4003b6a0: d2800d02 mov x2, #0x68 // #104 4003b6a4: 52800001 mov w1, #0x0 // #0 4003b6a8: 97ffce13 bl 4002eef4 rv = (*iop->pathinfo.handlers->fstat_h)( &iop->pathinfo, sbuf ); 4003b6ac: d2800a02 mov x2, #0x50 // #80 memset( sbuf, 0, sizeof(struct stat) ); 4003b6b0: aa0003e3 mov x3, x0 rv = (*iop->pathinfo.handlers->fstat_h)( &iop->pathinfo, sbuf ); 4003b6b4: 910042a0 add x0, x21, #0x10 4003b6b8: aa0303e1 mov x1, x3 4003b6bc: 9b025273 madd x19, x19, x2, x20 4003b6c0: 8b000280 add x0, x20, x0 4003b6c4: f9401a62 ldr x2, [x19, #48] 4003b6c8: f9401842 ldr x2, [x2, #48] 4003b6cc: d63f0040 blr x2 __asm__ volatile ( 4003b6d0: d53b4221 mrs x1, daif 4003b6d4: d50342df msr daifset, #0x2 *obj = val - arg; 4003b6d8: b8746aa2 ldr w2, [x21, x20] 4003b6dc: 51400442 sub w2, w2, #0x1, lsl #12 4003b6e0: b8346aa2 str w2, [x21, x20] __asm__ volatile ( 4003b6e4: 92407c21 and x1, x1, #0xffffffff 4003b6e8: d51b4221 msr daif, x1 4003b6ec: a94153f3 ldp x19, x20, [sp, #16] 4003b6f0: f94013f5 ldr x21, [sp, #32] rtems_libio_iop_drop( iop ); return rv; } 4003b6f4: a8c37bfd ldp x29, x30, [sp], #48 4003b6f8: d65f03c0 ret LIBIO_GET_IOP( fd, iop ); 4003b6fc: 97ffcc71 bl 4002e8c0 <__errno> 4003b700: aa0003e1 mov x1, x0 4003b704: 52800122 mov w2, #0x9 // #9 4003b708: 12800000 mov w0, #0xffffffff // #-1 4003b70c: a94153f3 ldp x19, x20, [sp, #16] 4003b710: b9000022 str w2, [x1] 4003b714: 17fffff8 b 4003b6f4 __asm__ volatile ( 4003b718: d53b4220 mrs x0, daif 4003b71c: d50342df msr daifset, #0x2 4003b720: b8746aa1 ldr w1, [x21, x20] 4003b724: 51400421 sub w1, w1, #0x1, lsl #12 4003b728: b8346aa1 str w1, [x21, x20] __asm__ volatile ( 4003b72c: 92407c00 and x0, x0, #0xffffffff 4003b730: d51b4220 msr daif, x0 4003b734: 97ffcc63 bl 4002e8c0 <__errno> 4003b738: aa0003e1 mov x1, x0 4003b73c: 52800122 mov w2, #0x9 // #9 4003b740: 12800000 mov w0, #0xffffffff // #-1 4003b744: a94153f3 ldp x19, x20, [sp, #16] 4003b748: f94013f5 ldr x21, [sp, #32] 4003b74c: b9000022 str w2, [x1] 4003b750: 17ffffe9 b 4003b6f4 rtems_set_errno_and_return_minus_one( EFAULT ); 4003b754: 97ffcc5b bl 4002e8c0 <__errno> <== NOT EXECUTED 4003b758: aa0003e1 mov x1, x0 <== NOT EXECUTED 4003b75c: 528001c2 mov w2, #0xe // #14 <== NOT EXECUTED 4003b760: 12800000 mov w0, #0xffffffff // #-1 <== NOT EXECUTED 4003b764: b9000022 str w2, [x1] <== NOT EXECUTED 4003b768: 17ffffe3 b 4003b6f4 <== NOT EXECUTED 4003b76c: 00000000 udf #0 =============================================================================== 0000000040026e90 : return pthread_getspecific(grp_key); } struct group *getgrent(void) { 40026e90: a9be7bfd stp x29, x30, [sp, #-32]! pthread_once(&grp_once, grp_init); 40026e94: 90000001 adrp x1, 40026000 <_Thread_Kill_zombies+0x60> 40026e98: b00006e0 adrp x0, 40103000 <_Thread_Objects+0x540> { 40026e9c: 910003fd mov x29, sp pthread_once(&grp_once, grp_init); 40026ea0: 9139c021 add x1, x1, #0xe70 40026ea4: 910d0000 add x0, x0, #0x340 { 40026ea8: f9000bf3 str x19, [sp, #16] pthread_once(&grp_once, grp_init); 40026eac: 97fff77d bl 40024ca0 return pthread_getspecific(grp_key); 40026eb0: b00006e0 adrp x0, 40103000 <_Thread_Objects+0x540> 40026eb4: b9433c00 ldr w0, [x0, #828] 40026eb8: 9400046a bl 40028060 grp_context *ctx = grp_get_context(); if (ctx == NULL) 40026ebc: b40001c0 cbz x0, 40026ef4 return NULL; if (ctx->fp == NULL) 40026ec0: aa0003e2 mov x2, x0 40026ec4: f9400000 ldr x0, [x0] 40026ec8: b4000160 cbz x0, 40026ef4 <== NEVER TAKEN return NULL; if (!_libcsupport_scangr(ctx->fp, &ctx->grp, ctx->buf, sizeof(ctx->buf))) 40026ecc: 91042053 add x19, x2, #0x108 40026ed0: d2802003 mov x3, #0x100 // #256 40026ed4: 91002042 add x2, x2, #0x8 40026ed8: aa1303e1 mov x1, x19 40026edc: 97ffebf5 bl 40021eb0 <_libcsupport_scangr> 40026ee0: 340000a0 cbz w0, 40026ef4 return NULL; return &ctx->grp; } 40026ee4: aa1303e0 mov x0, x19 40026ee8: f9400bf3 ldr x19, [sp, #16] 40026eec: a8c27bfd ldp x29, x30, [sp], #32 40026ef0: d65f03c0 ret return NULL; 40026ef4: d2800013 mov x19, #0x0 // #0 } 40026ef8: aa1303e0 mov x0, x19 40026efc: f9400bf3 ldr x19, [sp, #16] 40026f00: a8c27bfd ldp x29, x30, [sp], #32 40026f04: d65f03c0 ret ... =============================================================================== 0000000040021250 : */ int getgroups( int gidsetsize, gid_t grouplist[] ) { 40021250: a9a77bfd stp x29, x30, [sp, #-400]! 40021254: 910003fd mov x29, sp 40021258: a9025bf5 stp x21, x22, [sp, #32] 4002125c: 2a0003f6 mov w22, w0 40021260: a90363f7 stp x23, x24, [sp, #48] 40021264: aa0103f8 mov x24, x1 char buf[256]; gid_t gid; const char *user; struct group *grp; rv = getpwuid_r(getuid(), &pwd, &buf[0], sizeof(buf), &pwd_res); 40021268: 9400003a bl 40021350 4002126c: 910143e4 add x4, sp, #0x50 40021270: 910243e2 add x2, sp, #0x90 40021274: 910163e1 add x1, sp, #0x58 40021278: d2802003 mov x3, #0x100 // #256 4002127c: 94000301 bl 40021e80 40021280: 2a0003f5 mov w21, w0 if (rv != 0) { 40021284: 340000c0 cbz w0, 4002129c if (gidsetsize == 0 || rv <= gidsetsize) { return rv; } else { rtems_set_errno_and_return_minus_one(EINVAL); } } 40021288: 2a1503e0 mov w0, w21 4002128c: a9425bf5 ldp x21, x22, [sp, #32] 40021290: a94363f7 ldp x23, x24, [sp, #48] 40021294: a8d97bfd ldp x29, x30, [sp], #400 40021298: d65f03c0 ret gid = pwd.pw_gid; 4002129c: 7940d7f7 ldrh w23, [sp, #106] user = pwd.pw_name; 400212a0: a90153f3 stp x19, x20, [sp, #16] 400212a4: f90023f9 str x25, [sp, #64] 400212a8: f9402ff4 ldr x20, [sp, #88] setgrent(); 400212ac: 94001719 bl 40026f10 while ((grp = getgrent()) != NULL) { 400212b0: 940016f8 bl 40026e90 400212b4: b4000260 cbz x0, 40021300 if (grp->gr_gid == gid) { 400212b8: 79402019 ldrh w25, [x0, #16] 400212bc: 6b17033f cmp w25, w23 400212c0: 54ffff80 b.eq 400212b0 // b.none char **mem = &grp->gr_mem[0]; 400212c4: f9400c13 ldr x19, [x0, #24] while (*mem != NULL) { 400212c8: f9400260 ldr x0, [x19] 400212cc: b5000080 cbnz x0, 400212dc <== ALWAYS TAKEN 400212d0: 17fffff8 b 400212b0 <== NOT EXECUTED 400212d4: f8408e60 ldr x0, [x19, #8]! 400212d8: b4fffec0 cbz x0, 400212b0 if (strcmp(*mem, user) == 0) { 400212dc: aa1403e1 mov x1, x20 400212e0: 9400430a bl 40031f08 400212e4: 35ffff80 cbnz w0, 400212d4 if (rv < gidsetsize) { 400212e8: 6b1602bf cmp w21, w22 400212ec: 5400004a b.ge 400212f4 // b.tcont grouplist[rv] = grp->gr_gid; 400212f0: 7835db19 strh w25, [x24, w21, sxtw #1] ++rv; 400212f4: 110006b5 add w21, w21, #0x1 while ((grp = getgrent()) != NULL) { 400212f8: 940016e6 bl 40026e90 400212fc: b5fffde0 cbnz x0, 400212b8 endgrent(); 40021300: 94001734 bl 40026fd0 if (gidsetsize == 0 || rv <= gidsetsize) { 40021304: 710002df cmp w22, #0x0 40021308: 7a5612a4 ccmp w21, w22, #0x4, ne // ne = any 4002130c: 5400010c b.gt 4002132c } 40021310: 2a1503e0 mov w0, w21 40021314: a94153f3 ldp x19, x20, [sp, #16] 40021318: a9425bf5 ldp x21, x22, [sp, #32] 4002131c: a94363f7 ldp x23, x24, [sp, #48] 40021320: f94023f9 ldr x25, [sp, #64] 40021324: a8d97bfd ldp x29, x30, [sp], #400 40021328: d65f03c0 ret rtems_set_errno_and_return_minus_one(EINVAL); 4002132c: 9400375c bl 4002f09c <__errno> 40021330: 12800015 mov w21, #0xffffffff // #-1 40021334: 528002c1 mov w1, #0x16 // #22 40021338: a94153f3 ldp x19, x20, [sp, #16] 4002133c: f94023f9 ldr x25, [sp, #64] 40021340: b9000001 str w1, [x0] 40021344: 17ffffd1 b 40021288 ... =============================================================================== 0000000040021260 : if ( !name ) 40021260: b40002c0 cbz x0, 400212b8 { 40021264: a9be7bfd stp x29, x30, [sp, #-32]! if ( namesize < LOGIN_NAME_MAX ) 40021268: f100203f cmp x1, #0x8 { 4002126c: 910003fd mov x29, sp 40021270: f9000bf3 str x19, [sp, #16] 40021274: aa0003f3 mov x19, x0 return ERANGE; 40021278: 52800440 mov w0, #0x22 // #34 if ( namesize < LOGIN_NAME_MAX ) 4002127c: 54000129 b.ls 400212a0 // b.plast <== ALWAYS TAKEN pw = getpwuid(getuid()); 40021280: 94000030 bl 40021340 <== NOT EXECUTED 40021284: 9400001f bl 40021300 <== NOT EXECUTED if ( pw ) 40021288: b4000120 cbz x0, 400212ac <== NOT EXECUTED pname = pw->pw_name; 4002128c: f9400001 ldr x1, [x0] <== NOT EXECUTED strncpy( name, pname, LOGIN_NAME_MAX ); 40021290: aa1303e0 mov x0, x19 <== NOT EXECUTED 40021294: d2800122 mov x2, #0x9 // #9 <== NOT EXECUTED 40021298: 94004141 bl 4003179c <== NOT EXECUTED 4002129c: 52800000 mov w0, #0x0 // #0 <== NOT EXECUTED return 0; } 400212a0: f9400bf3 ldr x19, [sp, #16] 400212a4: a8c27bfd ldp x29, x30, [sp], #32 400212a8: d65f03c0 ret pname = ""; 400212ac: b00000c1 adrp x1, 4003a000 <== NOT EXECUTED 400212b0: 9138e021 add x1, x1, #0xe38 <== NOT EXECUTED 400212b4: 17fffff7 b 40021290 <== NOT EXECUTED return EFAULT; 400212b8: 528001c0 mov w0, #0xe // #14 } 400212bc: d65f03c0 ret =============================================================================== 0000000040021940 : const char *target, const char *filesystemtype, rtems_filesystem_options_t options, const void *data ) { 40021940: a9af7bfd stp x29, x30, [sp, #-272]! int rv = 0; if ( 40021944: 7100047f cmp w3, #0x1 { 40021948: 910003fd mov x29, sp 4002194c: a90153f3 stp x19, x20, [sp, #16] if ( 40021950: 54001988 b.hi 40021c80 // b.pmore options == RTEMS_FILESYSTEM_READ_ONLY || options == RTEMS_FILESYSTEM_READ_WRITE ) { rtems_filesystem_fsmount_me_t fsmount_me_h = 40021954: 2a0303f4 mov w20, w3 40021958: a9025bf5 stp x21, x22, [sp, #32] 4002195c: aa0103f5 mov x21, x1 40021960: aa0203f6 mov x22, x2 40021964: a90363f7 stp x23, x24, [sp, #48] 40021968: aa0003f7 mov x23, x0 rtems_filesystem_get_mount_handler( filesystemtype ); 4002196c: aa0203e0 mov x0, x2 40021970: a9046bf9 stp x25, x26, [sp, #64] 40021974: aa0403fa mov x26, x4 40021978: 940000de bl 40021cf0 4002197c: aa0003f8 mov x24, x0 if ( fsmount_me_h != NULL ) { 40021980: b40018a0 cbz x0, 40021c94 const char *target = target_or_null != NULL ? target_or_null : "/"; 40021984: a90573fb stp x27, x28, [sp, #80] 40021988: b4000ef5 cbz x21, 40021b64 size_t target_size = strlen( target ) + 1; 4002198c: aa1503e0 mov x0, x21 40021990: aa1503fc mov x28, x21 40021994: 94003701 bl 4002f598 40021998: 91000419 add x25, x0, #0x1 size_t filesystemtype_size = strlen( filesystemtype ) + 1; 4002199c: aa1603e0 mov x0, x22 400219a0: 940036fe bl 4002f598 400219a4: 9100041b add x27, x0, #0x1 size_t source_size = source_or_null != NULL ? 400219a8: 91032413 add x19, x0, #0xc9 strlen( source_or_null ) + 1 : 0; 400219ac: b4000c17 cbz x23, 40021b2c 400219b0: aa1703e0 mov x0, x23 400219b4: 940036f9 bl 4002f598 400219b8: 91000400 add x0, x0, #0x1 size_t size = sizeof( rtems_filesystem_mount_table_entry_t ) 400219bc: 8b190261 add x1, x19, x25 strlen( source_or_null ) + 1 : 0; 400219c0: aa0003e2 mov x2, x0 rtems_filesystem_mount_table_entry_t *mt_entry = calloc( 1, size ); 400219c4: d2800020 mov x0, #0x1 // #1 400219c8: 8b020021 add x1, x1, x2 strlen( source_or_null ) + 1 : 0; 400219cc: f90037e2 str x2, [sp, #104] rtems_filesystem_mount_table_entry_t *mt_entry = calloc( 1, size ); 400219d0: 940019d4 bl 40028120 400219d4: aa0003f3 mov x19, x0 if ( mt_entry != NULL ) { 400219d8: b4000f60 cbz x0, 40021bc4 <== NEVER TAKEN char *str = (char *) mt_fs_root + sizeof( *mt_fs_root ); 400219dc: 91032003 add x3, x0, #0xc8 memcpy( str, filesystemtype, filesystemtype_size ); 400219e0: aa1603e1 mov x1, x22 400219e4: aa0303e0 mov x0, x3 400219e8: aa1b03e2 mov x2, x27 rtems_filesystem_global_location_t *mt_fs_root = 400219ec: 91020276 add x22, x19, #0x80 memcpy( str, filesystemtype, filesystemtype_size ); 400219f0: 94003526 bl 4002ee88 str += filesystemtype_size; 400219f4: 8b1b0003 add x3, x0, x27 memcpy( str, source_or_null, source_size ); 400219f8: f94037e2 ldr x2, [sp, #104] mt_entry->type = str; 400219fc: f9003660 str x0, [x19, #104] memcpy( str, source_or_null, source_size ); 40021a00: aa1703e1 mov x1, x23 40021a04: aa0303e0 mov x0, x3 str += source_size; 40021a08: 8b020077 add x23, x3, x2 memcpy( str, source_or_null, source_size ); 40021a0c: 9400351f bl 4002ee88 mt_entry->dev = str; 40021a10: f9003a60 str x0, [x19, #112] memcpy( str, target, target_size ); 40021a14: aa1903e2 mov x2, x25 40021a18: aa1c03e1 mov x1, x28 40021a1c: aa1703e0 mov x0, x23 40021a20: 9400351a bl 4002ee88 mt_entry->mounted = true; 40021a24: 52800021 mov w1, #0x1 // #1 mt_entry->pathconf_limits_and_options = &rtems_filesystem_default_pathconf; 40021a28: f00000c0 adrp x0, 4003c000 <_Scheduler_Table+0x48> 40021a2c: 91246000 add x0, x0, #0x918 mt_entry->mt_fs_root = mt_fs_root; 40021a30: f9002676 str x22, [x19, #72] mt_entry->mounted = true; 40021a34: 39014261 strb w1, [x19, #80] mt_fs_root->reference_count = 1; 40021a38: 52800039 mov w25, #0x1 // #1 mt_entry->target = str; 40021a3c: a905de60 stp x0, x23, [x19, #88] void *starting_address, size_t number_nodes, size_t node_size ) { _Chain_Initialize( 40021a40: aa1603e1 mov x1, x22 filesystemtype, &target_length ); if ( mt_entry != NULL ) { mt_entry->writeable = options == RTEMS_FILESYSTEM_READ_WRITE; 40021a44: 0a190294 and w20, w20, w25 mt_fs_root->location.mt_entry = mt_entry; 40021a48: f90016d3 str x19, [x22, #40] 40021a4c: 9100a260 add x0, x19, #0x28 mt_fs_root->reference_count = 1; 40021a50: b90032d9 str w25, [x22, #48] 40021a54: d2800903 mov x3, #0x48 // #72 40021a58: d2800022 mov x2, #0x1 // #1 40021a5c: 94000c69 bl 40024c00 <_Chain_Initialize> mt_entry->writeable = options == RTEMS_FILESYSTEM_READ_WRITE; 40021a60: 39014674 strb w20, [x19, #81] rv = (*fsmount_me_h)( mt_entry, data ); 40021a64: aa1a03e1 mov x1, x26 40021a68: aa1303e0 mov x0, x19 40021a6c: d63f0300 blr x24 40021a70: 2a0003f4 mov w20, w0 if ( rv == 0 ) { 40021a74: 35000480 cbnz w0, 40021b04 if ( target != NULL ) { 40021a78: b4000bf5 cbz x21, 40021bf4 rtems_filesystem_eval_path_start( &ctx, target, eval_flags ); 40021a7c: aa1503e1 mov x1, x21 40021a80: 528003e2 mov w2, #0x1f // #31 40021a84: 9102a3e0 add x0, sp, #0xa8 40021a88: 94000226 bl 40022320 static inline bool rtems_filesystem_location_is_instance_root( const rtems_filesystem_location_info_t *loc ) { const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry; 40021a8c: f9401401 ldr x1, [x0, #40] return (*mt_entry->ops->are_nodes_equal_h)( 40021a90: f9400c22 ldr x2, [x1, #24] 40021a94: f9402421 ldr x1, [x1, #72] 40021a98: f9401042 ldr x2, [x2, #32] 40021a9c: d63f0040 blr x2 if ( !rtems_filesystem_location_is_instance_root( currentloc ) ) { 40021aa0: 72001c1f tst w0, #0xff 40021aa4: 54001081 b.ne 40021cb4 // b.any static inline void rtems_filesystem_eval_path_extract_currentloc( rtems_filesystem_eval_path_context_t *ctx, rtems_filesystem_location_info_t *get ) { rtems_filesystem_location_copy_and_detach( 40021aa8: 910343e1 add x1, sp, #0xd0 40021aac: 9101e3e0 add x0, sp, #0x78 40021ab0: 940003e0 bl 40022a30 mt_point_node = rtems_filesystem_location_transform_to_global( &targetloc ); 40021ab4: 9101e3e0 add x0, sp, #0x78 40021ab8: 9400040e bl 40022af0 40021abc: aa0003f5 mov x21, x0 rv = (*mt_point_node->location.mt_entry->ops->mount_h)( mt_entry ); 40021ac0: aa1303e0 mov x0, x19 40021ac4: f94016a1 ldr x1, [x21, #40] 40021ac8: f9400c21 ldr x1, [x1, #24] 40021acc: f9402c21 ldr x1, [x1, #88] mt_entry->mt_point_node = mt_point_node; 40021ad0: f9002275 str x21, [x19, #64] rv = (*mt_point_node->location.mt_entry->ops->mount_h)( mt_entry ); 40021ad4: d63f0020 blr x1 40021ad8: 2a0003f4 mov w20, w0 if ( rv == 0 ) { 40021adc: 340004c0 cbz w0, 40021b74 rtems_filesystem_global_location_release( mt_point_node, true ); 40021ae0: 2a1903e1 mov w1, w25 40021ae4: aa1503e0 mov x0, x21 40021ae8: 9400039a bl 40022950 rtems_filesystem_eval_path_cleanup( &ctx ); 40021aec: 9102a3e0 add x0, sp, #0xa8 40021af0: 94000244 bl 40022400 } else { rv = register_root_file_system( mt_entry ); } if ( rv != 0 ) { (*mt_entry->ops->fsunmount_me_h)( mt_entry ); 40021af4: f9400e61 ldr x1, [x19, #24] 40021af8: aa1303e0 mov x0, x19 40021afc: f9403421 ldr x1, [x1, #104] 40021b00: d63f0020 blr x1 } } if ( rv != 0 ) { free( mt_entry ); 40021b04: aa1303e0 mov x0, x19 40021b08: 940019ae bl 400281c0 40021b0c: a9425bf5 ldp x21, x22, [sp, #32] 40021b10: a94363f7 ldp x23, x24, [sp, #48] 40021b14: a9446bf9 ldp x25, x26, [sp, #64] 40021b18: a94573fb ldp x27, x28, [sp, #80] errno = EINVAL; rv = -1; } return rv; } 40021b1c: 2a1403e0 mov w0, w20 40021b20: a94153f3 ldp x19, x20, [sp, #16] 40021b24: a8d17bfd ldp x29, x30, [sp], #272 40021b28: d65f03c0 ret rtems_filesystem_mount_table_entry_t *mt_entry = calloc( 1, size ); 40021b2c: 8b190261 add x1, x19, x25 40021b30: d2800020 mov x0, #0x1 // #1 40021b34: 9400197b bl 40028120 40021b38: aa0003f3 mov x19, x0 if ( mt_entry != NULL ) { 40021b3c: b4000440 cbz x0, 40021bc4 <== NEVER TAKEN char *str = (char *) mt_fs_root + sizeof( *mt_fs_root ); 40021b40: 91032263 add x3, x19, #0xc8 memcpy( str, filesystemtype, filesystemtype_size ); 40021b44: aa1603e1 mov x1, x22 40021b48: aa0303e0 mov x0, x3 40021b4c: aa1b03e2 mov x2, x27 str += filesystemtype_size; 40021b50: 8b1b0077 add x23, x3, x27 rtems_filesystem_global_location_t *mt_fs_root = 40021b54: 91020276 add x22, x19, #0x80 memcpy( str, filesystemtype, filesystemtype_size ); 40021b58: 940034cc bl 4002ee88 mt_entry->type = str; 40021b5c: f9003660 str x0, [x19, #104] if ( source_or_null != NULL ) { 40021b60: 17ffffad b 40021a14 const char *target = target_or_null != NULL ? target_or_null : "/"; 40021b64: d00000dc adrp x28, 4003b000 <__sfvwrite_r+0x5d4> 40021b68: 913ac39c add x28, x28, #0xeb0 40021b6c: d2800059 mov x25, #0x2 // #2 40021b70: 17ffff8b b 4002199c rtems_libio_lock(); 40021b74: 94001a13 bl 400283c0 Chain_Node *old_last; _Assert( _Chain_Is_node_off_chain( the_node ) ); tail = _Chain_Tail( the_chain ); old_last = tail->previous; 40021b78: f00006e0 adrp x0, 40100000 <_RTEMS_tasks_Information> 40021b7c: 9104e000 add x0, x0, #0x138 the_node->next = tail; 40021b80: 91002001 add x1, x0, #0x8 40021b84: f9000261 str x1, [x19] old_last = tail->previous; 40021b88: f9400801 ldr x1, [x0, #16] tail->previous = the_node; 40021b8c: f9000813 str x19, [x0, #16] old_last->next = the_node; 40021b90: f9000033 str x19, [x1] the_node->previous = old_last; 40021b94: f9000661 str x1, [x19, #8] rtems_libio_unlock(); 40021b98: 94001a0e bl 400283d0 rtems_filesystem_eval_path_cleanup( &ctx ); 40021b9c: 9102a3e0 add x0, sp, #0xa8 40021ba0: 94000218 bl 40022400 } 40021ba4: 2a1403e0 mov w0, w20 40021ba8: a94153f3 ldp x19, x20, [sp, #16] 40021bac: a9425bf5 ldp x21, x22, [sp, #32] 40021bb0: a94363f7 ldp x23, x24, [sp, #48] 40021bb4: a9446bf9 ldp x25, x26, [sp, #64] 40021bb8: a94573fb ldp x27, x28, [sp, #80] 40021bbc: a8d17bfd ldp x29, x30, [sp], #272 40021bc0: d65f03c0 ret errno = ENOMEM; 40021bc4: 9400333f bl 4002e8c0 <__errno> <== NOT EXECUTED rv = -1; 40021bc8: 12800014 mov w20, #0xffffffff // #-1 <== NOT EXECUTED errno = ENOMEM; 40021bcc: 52800181 mov w1, #0xc // #12 <== NOT EXECUTED 40021bd0: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED 40021bd4: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED 40021bd8: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED 40021bdc: a94573fb ldp x27, x28, [sp, #80] <== NOT EXECUTED 40021be0: b9000001 str w1, [x0] <== NOT EXECUTED } 40021be4: 2a1403e0 mov w0, w20 <== NOT EXECUTED 40021be8: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED 40021bec: a8d17bfd ldp x29, x30, [sp], #272 <== NOT EXECUTED 40021bf0: d65f03c0 ret <== NOT EXECUTED rtems_libio_lock(); 40021bf4: 940019f3 bl 400283c0 return _Chain_Immutable_head( the_chain )->next; 40021bf8: f00006e1 adrp x1, 40100000 <_RTEMS_tasks_Information> 40021bfc: 9104e020 add x0, x1, #0x138 if ( rtems_chain_is_empty( &rtems_filesystem_mount_table ) ) { 40021c00: 91002002 add x2, x0, #0x8 40021c04: f9409c21 ldr x1, [x1, #312] 40021c08: eb02003f cmp x1, x2 40021c0c: 54000621 b.ne 40021cd0 // b.any <== NEVER TAKEN old_last = tail->previous; 40021c10: f9400802 ldr x2, [x0, #16] the_node->next = tail; 40021c14: f9000261 str x1, [x19] tail->previous = the_node; 40021c18: f9000813 str x19, [x0, #16] rtems_filesystem_global_location_obtain( &mt_entry->mt_fs_root ); 40021c1c: 91012276 add x22, x19, #0x48 old_last->next = the_node; 40021c20: f9000053 str x19, [x2] the_node->previous = old_last; 40021c24: f9000662 str x2, [x19, #8] rtems_libio_unlock(); 40021c28: 940019ea bl 400283d0 40021c2c: aa1603e0 mov x0, x22 40021c30: 94000310 bl 40022870 40021c34: aa0003f5 mov x21, x0 rtems_filesystem_global_location_obtain( &mt_entry->mt_fs_root ); 40021c38: aa1603e0 mov x0, x22 40021c3c: 9400030d bl 40022870 40021c40: aa0003f3 mov x19, x0 &rtems_filesystem_root, 40021c44: 9400041b bl 40022cb0 rtems_filesystem_global_location_assign( 40021c48: 91002000 add x0, x0, #0x8 40021c4c: aa1503e1 mov x1, x21 40021c50: 940002a0 bl 400226d0 &rtems_filesystem_current, 40021c54: 94000417 bl 40022cb0 rtems_filesystem_global_location_assign( 40021c58: aa1303e1 mov x1, x19 40021c5c: 9400029d bl 400226d0 } 40021c60: 2a1403e0 mov w0, w20 40021c64: a94153f3 ldp x19, x20, [sp, #16] 40021c68: a9425bf5 ldp x21, x22, [sp, #32] 40021c6c: a94363f7 ldp x23, x24, [sp, #48] 40021c70: a9446bf9 ldp x25, x26, [sp, #64] 40021c74: a94573fb ldp x27, x28, [sp, #80] 40021c78: a8d17bfd ldp x29, x30, [sp], #272 40021c7c: d65f03c0 ret errno = EINVAL; 40021c80: 94003310 bl 4002e8c0 <__errno> rv = -1; 40021c84: 12800014 mov w20, #0xffffffff // #-1 errno = EINVAL; 40021c88: 528002c1 mov w1, #0x16 // #22 40021c8c: b9000001 str w1, [x0] return rv; 40021c90: 17ffffa3 b 40021b1c errno = EINVAL; 40021c94: 9400330b bl 4002e8c0 <__errno> rv = -1; 40021c98: 12800014 mov w20, #0xffffffff // #-1 errno = EINVAL; 40021c9c: 528002c1 mov w1, #0x16 // #22 40021ca0: a9425bf5 ldp x21, x22, [sp, #32] 40021ca4: a94363f7 ldp x23, x24, [sp, #48] 40021ca8: a9446bf9 ldp x25, x26, [sp, #64] 40021cac: b9000001 str w1, [x0] rv = -1; 40021cb0: 17ffff9b b 40021b1c rtems_filesystem_eval_path_error( &ctx, EBUSY ); 40021cb4: 52800201 mov w1, #0x10 // #16 40021cb8: 9102a3e0 add x0, sp, #0xa8 40021cbc: 940001b5 bl 40022390 rv = -1; 40021cc0: 12800014 mov w20, #0xffffffff // #-1 rtems_filesystem_eval_path_cleanup( &ctx ); 40021cc4: 9102a3e0 add x0, sp, #0xa8 40021cc8: 940001ce bl 40022400 if ( rv != 0 ) { 40021ccc: 17ffff8a b 40021af4 errno = EINVAL; 40021cd0: 940032fc bl 4002e8c0 <__errno> <== NOT EXECUTED rv = -1; 40021cd4: 12800014 mov w20, #0xffffffff // #-1 <== NOT EXECUTED errno = EINVAL; 40021cd8: 528002c1 mov w1, #0x16 // #22 <== NOT EXECUTED 40021cdc: b9000001 str w1, [x0] <== NOT EXECUTED 40021ce0: 940019bc bl 400283d0 <== NOT EXECUTED if ( rv != 0 ) { 40021ce4: 17ffff84 b 40021af4 <== NOT EXECUTED ... =============================================================================== 0000000040023d20 : const char *target, const char *filesystemtype, rtems_filesystem_options_t options, const void *data ) { 40023d20: a9bc7bfd stp x29, x30, [sp, #-64]! 40023d24: 910003fd mov x29, sp int rv = -1; if (target != NULL) { 40023d28: b4000381 cbz x1, 40023d98 rv = rtems_mkdir(target, S_IRWXU | S_IRWXG | S_IRWXO); 40023d2c: a90153f3 stp x19, x20, [sp, #16] 40023d30: aa0103f3 mov x19, x1 40023d34: aa0003f4 mov x20, x0 40023d38: 52803fe1 mov w1, #0x1ff // #511 40023d3c: aa1303e0 mov x0, x19 40023d40: a9025bf5 stp x21, x22, [sp, #32] 40023d44: aa0203f5 mov x21, x2 40023d48: 2a0303f6 mov w22, w3 40023d4c: f9001bf7 str x23, [sp, #48] 40023d50: aa0403f7 mov x23, x4 40023d54: 940002e7 bl 400248f0 if (rv == 0) { 40023d58: 340000c0 cbz w0, 40023d70 <== ALWAYS TAKEN 40023d5c: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED 40023d60: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED 40023d64: f9401bf7 ldr x23, [sp, #48] <== NOT EXECUTED } else { errno = EINVAL; } return rv; } 40023d68: a8c47bfd ldp x29, x30, [sp], #64 40023d6c: d65f03c0 ret rv = mount( 40023d70: aa1703e4 mov x4, x23 40023d74: 2a1603e3 mov w3, w22 40023d78: aa1503e2 mov x2, x21 40023d7c: aa1303e1 mov x1, x19 40023d80: aa1403e0 mov x0, x20 40023d84: a94153f3 ldp x19, x20, [sp, #16] 40023d88: a9425bf5 ldp x21, x22, [sp, #32] 40023d8c: f9401bf7 ldr x23, [sp, #48] } 40023d90: a8c47bfd ldp x29, x30, [sp], #64 rv = mount( 40023d94: 17fffec7 b 400238b0 errno = EINVAL; 40023d98: 940066ce bl 4003d8d0 <__errno> 40023d9c: aa0003e1 mov x1, x0 40023da0: 528002c2 mov w2, #0x16 // #22 int rv = -1; 40023da4: 12800000 mov w0, #0xffffffff // #-1 errno = EINVAL; 40023da8: b9000022 str w2, [x1] return rv; 40023dac: 17ffffef b 40023d68 =============================================================================== 000000004002a700 : /** * POSIX 1003.1 5.3.1 - Open a File */ int open( const char *path, int oflag, ... ) { 4002a700: a9ab7bfd stp x29, x30, [sp, #-336]! 4002a704: 910003fd mov x29, sp 4002a708: a90153f3 stp x19, x20, [sp, #16] 4002a70c: 2a0103f4 mov w20, w1 int rv = 0; va_list ap; mode_t mode = 0; rtems_libio_t *iop = NULL; va_start( ap, oflag ); 4002a710: 910543e1 add x1, sp, #0x150 { 4002a714: a9025bf5 stp x21, x22, [sp, #32] 4002a718: aa0003f6 mov x22, x0 va_start( ap, oflag ); 4002a71c: 910503e0 add x0, sp, #0x140 { 4002a720: a90363f7 stp x23, x24, [sp, #48] 4002a724: 2a0203f7 mov w23, w2 va_start( ap, oflag ); 4002a728: a90507e1 stp x1, x1, [sp, #80] 4002a72c: f90033e0 str x0, [sp, #96] 4002a730: 290d7fff stp wzr, wzr, [sp, #104] { 4002a734: f900a7e2 str x2, [sp, #328] mode = va_arg( ap, mode_t ); iop = rtems_libio_allocate(); 4002a738: 94000352 bl 4002b480 if ( iop != NULL ) { 4002a73c: b40010c0 cbz x0, 4002a954 int rwflag = oflag + 1; 4002a740: 11000685 add w5, w20, #0x1 int follow = (oflag & O_NOFOLLOW) == O_NOFOLLOW ? 0 : RTEMS_FS_FOLLOW_LINK; 4002a744: f26c029f tst x20, #0x100000 4002a748: 52800304 mov w4, #0x18 // #24 4002a74c: 1a8413e4 csel w4, wzr, w4, ne // ne = any 4002a750: aa0003f3 mov x19, x0 | (read_access ? RTEMS_FS_PERMS_READ : 0) 4002a754: f24000bf tst x5, #0x1 4002a758: 321e0080 orr w0, w4, #0x4 4002a75c: 1a841004 csel w4, w0, w4, ne // ne = any | (write_access ? RTEMS_FS_PERMS_WRITE : 0) 4002a760: 721f00b5 ands w21, w5, #0x2 4002a764: 321f0081 orr w1, w4, #0x2 bool exclusive = (oflag & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL); 4002a768: 52814000 mov w0, #0xa00 // #2560 | (write_access ? RTEMS_FS_PERMS_WRITE : 0) 4002a76c: 1a841024 csel w4, w1, w4, ne // ne = any bool exclusive = (oflag & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL); 4002a770: 0a000280 and w0, w20, w0 | (make ? RTEMS_FS_MAKE : 0) 4002a774: f277029f tst x20, #0x200 4002a778: 321b0081 orr w1, w4, #0x20 4002a77c: 1a841024 csel w4, w1, w4, ne // ne = any int eval_flags = follow 4002a780: 7128001f cmp w0, #0xa00 4002a784: 321a0082 orr w2, w4, #0x40 rtems_filesystem_eval_path_start( &ctx, path, eval_flags ); 4002a788: 9101c3e0 add x0, sp, #0x70 4002a78c: 1a840042 csel w2, w2, w4, eq // eq = none 4002a790: aa1603e1 mov x1, x22 4002a794: 97ffdee3 bl 40022320 return ctx->tokenlen > 0; 4002a798: f94047f8 ldr x24, [sp, #136] if ( rtems_filesystem_eval_path_has_token( &ctx ) ) { 4002a79c: b5000a38 cbnz x24, 4002a8e0 open_dir = ( oflag & O_DIRECTORY ) == O_DIRECTORY; 4002a7a0: 120b0298 and w24, w20, #0x200000 if ( write_access || open_dir ) { 4002a7a4: 2a1802a0 orr w0, w21, w24 4002a7a8: 34000200 cbz w0, 4002a7e8 ) { struct stat st; st.st_mode = 0; (void) ( *loc->handlers->fstat_h )( loc, &st ); 4002a7ac: f9405fe2 ldr x2, [sp, #184] st.st_mode = 0; 4002a7b0: b900ebff str wzr, [sp, #232] (void) ( *loc->handlers->fstat_h )( loc, &st ); 4002a7b4: 910363e1 add x1, sp, #0xd8 4002a7b8: 910263e0 add x0, sp, #0x98 4002a7bc: f9401842 ldr x2, [x2, #48] 4002a7c0: d63f0040 blr x2 return st.st_mode; 4002a7c4: b940ebe0 ldr w0, [sp, #232] if ( write_access && S_ISDIR( type ) ) { 4002a7c8: 34000ab5 cbz w21, 4002a91c 4002a7cc: 12140c00 and w0, w0, #0xf000 4002a7d0: 7140101f cmp w0, #0x4, lsl #12 4002a7d4: 54000b80 b.eq 4002a944 // b.none if ( open_dir && !S_ISDIR( type ) ) { 4002a7d8: 34000098 cbz w24, 4002a7e8 <== ALWAYS TAKEN rtems_filesystem_eval_path_error( &ctx, ENOTDIR ); 4002a7dc: 9101c3e0 add x0, sp, #0x70 4002a7e0: 52800281 mov w1, #0x14 // #20 4002a7e4: 97ffdeeb bl 40022390 rtems_filesystem_location_copy_and_detach( 4002a7e8: 910263e1 add x1, sp, #0x98 4002a7ec: 91004260 add x0, x19, #0x10 4002a7f0: 97ffe090 bl 40022a30 rtems_filesystem_eval_path_cleanup( &ctx ); 4002a7f4: 9101c3e0 add x0, sp, #0x70 4002a7f8: 97ffdf02 bl 40022400 rtems_libio_iop_flags_set( iop, rtems_libio_fcntl_flags( oflag ) ); 4002a7fc: 2a1403e0 mov w0, w20 4002a800: 9400030c bl 4002b430 __asm__ volatile ( 4002a804: d53b4221 mrs x1, daif 4002a808: d50342df msr daifset, #0x2 ISR_Level level; (void) order; _ISR_Local_disable( level ); val = *obj; *obj = val | arg; 4002a80c: b9400262 ldr w2, [x19] 4002a810: 2a000040 orr w0, w2, w0 4002a814: b9000260 str w0, [x19] __asm__ volatile ( 4002a818: 92407c20 and x0, x1, #0xffffffff 4002a81c: d51b4220 msr daif, x0 rv = (*iop->pathinfo.handlers->open_h)( iop, path, oflag, mode ); 4002a820: f9401a64 ldr x4, [x19, #48] 4002a824: 2a1703e3 mov w3, w23 4002a828: aa1603e1 mov x1, x22 4002a82c: 2a1403e2 mov w2, w20 4002a830: aa1303e0 mov x0, x19 4002a834: f9400084 ldr x4, [x4] 4002a838: d63f0080 blr x4 4002a83c: 2a0003f5 mov w21, w0 if ( rv == 0 ) { 4002a840: 34000100 cbz w0, 4002a860 if ( rv < 0 ) { 4002a844: 37f803f5 tbnz w21, #31, 4002a8c0 } va_end( ap ); return rv; } 4002a848: 2a1503e0 mov w0, w21 4002a84c: a94153f3 ldp x19, x20, [sp, #16] 4002a850: a9425bf5 ldp x21, x22, [sp, #32] 4002a854: a94363f7 ldp x23, x24, [sp, #48] 4002a858: a8d57bfd ldp x29, x30, [sp], #336 4002a85c: d65f03c0 ret int fd = rtems_libio_iop_to_descriptor( iop ); 4002a860: 900006c0 adrp x0, 40102000 <_Configuration_Scheduler_priority_dflt+0x15d0> 4002a864: 913f8000 add x0, x0, #0xfe0 4002a868: cb000260 sub x0, x19, x0 4002a86c: b202e7e1 mov x1, #0xcccccccccccccccc // #-3689348814741910324 4002a870: f29999a1 movk x1, #0xcccd 4002a874: 9344fc00 asr x0, x0, #4 4002a878: 9b017c00 mul x0, x0, x1 4002a87c: 2a0003f5 mov w21, w0 __asm__ volatile ( 4002a880: d53b4221 mrs x1, daif 4002a884: d50342df msr daifset, #0x2 4002a888: b9400262 ldr w2, [x19] 4002a88c: 32180042 orr w2, w2, #0x100 4002a890: b9000262 str w2, [x19] __asm__ volatile ( 4002a894: 92407c21 and x1, x1, #0xffffffff 4002a898: d51b4221 msr daif, x1 if ( truncate ) { 4002a89c: 3657fd54 tbz w20, #10, 4002a844 rv = ftruncate( fd, 0 ); 4002a8a0: d2800001 mov x1, #0x0 // #0 4002a8a4: 9400029b bl 4002b310 if ( rv != 0 ) { 4002a8a8: 34fffce0 cbz w0, 4002a844 (*iop->pathinfo.handlers->close_h)( iop ); 4002a8ac: f9401a61 ldr x1, [x19, #48] 4002a8b0: aa1303e0 mov x0, x19 rv = -1; 4002a8b4: 12800015 mov w21, #0xffffffff // #-1 (*iop->pathinfo.handlers->close_h)( iop ); 4002a8b8: f9400421 ldr x1, [x1, #8] 4002a8bc: d63f0020 blr x1 rtems_libio_free( iop ); 4002a8c0: aa1303e0 mov x0, x19 4002a8c4: 94000307 bl 4002b4e0 } 4002a8c8: 2a1503e0 mov w0, w21 4002a8cc: a94153f3 ldp x19, x20, [sp, #16] 4002a8d0: a9425bf5 ldp x21, x22, [sp, #32] 4002a8d4: a94363f7 ldp x23, x24, [sp, #48] 4002a8d8: a8d57bfd ldp x29, x30, [sp], #336 4002a8dc: d65f03c0 ret return ctx->token; 4002a8e0: f90023f9 str x25, [sp, #64] rv = rtems_filesystem_mknod( 4002a8e4: 321102e3 orr w3, w23, #0x8000 4002a8e8: f94043f9 ldr x25, [sp, #128] 4002a8ec: aa1803e2 mov x2, x24 4002a8f0: 910263e0 add x0, sp, #0x98 4002a8f4: d2800004 mov x4, #0x0 // #0 4002a8f8: aa1903e1 mov x1, x25 4002a8fc: 97ffdbc9 bl 40021820 if ( rv == 0 ) { 4002a900: 35000180 cbnz w0, 4002a930 rtems_filesystem_eval_path_continue( ctx ); 4002a904: 9101c3e0 add x0, sp, #0x70 ctx->pathlen = pathlen; 4002a908: a90763f9 stp x25, x24, [sp, #112] ctx->flags = flags; 4002a90c: b90093ff str wzr, [sp, #144] 4002a910: 97ffde00 bl 40022110 4002a914: f94023f9 ldr x25, [sp, #64] 4002a918: 17ffffa2 b 4002a7a0 if ( open_dir && !S_ISDIR( type ) ) { 4002a91c: 34fff678 cbz w24, 4002a7e8 <== NEVER TAKEN 4002a920: 12140c00 and w0, w0, #0xf000 4002a924: 7140101f cmp w0, #0x4, lsl #12 4002a928: 54fff600 b.eq 4002a7e8 // b.none 4002a92c: 17ffffac b 4002a7dc rtems_filesystem_eval_path_error( ctx, 0 ); 4002a930: 9101c3e0 add x0, sp, #0x70 4002a934: 52800001 mov w1, #0x0 // #0 4002a938: 97ffde96 bl 40022390 4002a93c: f94023f9 ldr x25, [sp, #64] 4002a940: 17ffff98 b 4002a7a0 rtems_filesystem_eval_path_error( &ctx, EISDIR ); 4002a944: 9101c3e0 add x0, sp, #0x70 4002a948: 528002a1 mov w1, #0x15 // #21 4002a94c: 97ffde91 bl 40022390 if ( open_dir && !S_ISDIR( type ) ) { 4002a950: 17ffffa6 b 4002a7e8 errno = ENFILE; 4002a954: 94000fdb bl 4002e8c0 <__errno> rv = -1; 4002a958: 12800015 mov w21, #0xffffffff // #-1 errno = ENFILE; 4002a95c: 528002e1 mov w1, #0x17 // #23 4002a960: b9000001 str w1, [x0] return rv; 4002a964: 17ffffb9 b 4002a848 ... =============================================================================== 000000004003b890 : #endif #if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 500 ssize_t pread (int __fd, void *__buf, size_t __nbytes, off_t __offset); ssize_t pwrite (int __fd, const void *__buf, size_t __nbytes, off_t __offset); #endif _READ_WRITE_RETURN_TYPE read (int __fd, void *__buf, size_t __nbyte); 4003b890: a9be7bfd stp x29, x30, [sp, #-32]! 4003b894: 93407c03 sxtw x3, w0 4003b898: 910003fd mov x29, sp 4003b89c: a90153f3 stp x19, x20, [sp, #16] 4003b8a0: 52800a14 mov w20, #0x50 // #80 4003b8a4: f0000633 adrp x19, 40102000 <_Configuration_Scheduler_priority_dflt+0x15d0> 4003b8a8: 913f8273 add x19, x19, #0xfe0 4003b8ac: 9b347c74 smull x20, w3, w20 4003b8b0: 8b130280 add x0, x20, x19 __asm__ volatile ( 4003b8b4: d53b4225 mrs x5, daif 4003b8b8: d50342df msr daifset, #0x2 val = *obj; 4003b8bc: b8736a84 ldr w4, [x20, x19] *obj = val + arg; 4003b8c0: 11400486 add w6, w4, #0x1, lsl #12 4003b8c4: b8336a86 str w6, [x20, x19] __asm__ volatile ( 4003b8c8: 92407ca5 and x5, x5, #0xffffffff 4003b8cc: d51b4225 msr daif, x5 ssize_t n; rtems_libio_check_buffer( buffer ); rtems_libio_check_count( count ); LIBIO_GET_IOP_WITH_ACCESS( fd, iop, LIBIO_FLAGS_READ, EBADF ); 4003b8d0: 52802045 mov w5, #0x102 // #258 4003b8d4: 0a050084 and w4, w4, w5 4003b8d8: 6b05009f cmp w4, w5 4003b8dc: 54000201 b.ne 4003b91c // b.any <== NEVER TAKEN /* * Now process the read(). */ n = (*iop->pathinfo.handlers->read_h)( iop, buffer, count ); 4003b8e0: d2800a04 mov x4, #0x50 // #80 4003b8e4: 9b044c63 madd x3, x3, x4, x19 4003b8e8: f9401863 ldr x3, [x3, #48] 4003b8ec: f9400863 ldr x3, [x3, #16] 4003b8f0: d63f0060 blr x3 __asm__ volatile ( 4003b8f4: d53b4221 mrs x1, daif 4003b8f8: d50342df msr daifset, #0x2 *obj = val - arg; 4003b8fc: b8736a82 ldr w2, [x20, x19] 4003b900: 51400442 sub w2, w2, #0x1, lsl #12 4003b904: b8336a82 str w2, [x20, x19] __asm__ volatile ( 4003b908: 92407c21 and x1, x1, #0xffffffff 4003b90c: d51b4221 msr daif, x1 rtems_libio_iop_drop( iop ); return n; } 4003b910: a94153f3 ldp x19, x20, [sp, #16] 4003b914: a8c27bfd ldp x29, x30, [sp], #32 4003b918: d65f03c0 ret __asm__ volatile ( 4003b91c: d53b4220 mrs x0, daif <== NOT EXECUTED 4003b920: d50342df msr daifset, #0x2 <== NOT EXECUTED 4003b924: b8736a81 ldr w1, [x20, x19] <== NOT EXECUTED 4003b928: 51400421 sub w1, w1, #0x1, lsl #12 <== NOT EXECUTED 4003b92c: b8336a81 str w1, [x20, x19] <== NOT EXECUTED __asm__ volatile ( 4003b930: 92407c00 and x0, x0, #0xffffffff <== NOT EXECUTED 4003b934: d51b4220 msr daif, x0 <== NOT EXECUTED LIBIO_GET_IOP_WITH_ACCESS( fd, iop, LIBIO_FLAGS_READ, EBADF ); 4003b938: 97ffcbe2 bl 4002e8c0 <__errno> <== NOT EXECUTED 4003b93c: aa0003e1 mov x1, x0 <== NOT EXECUTED 4003b940: 52800122 mov w2, #0x9 // #9 <== NOT EXECUTED 4003b944: 92800000 mov x0, #0xffffffffffffffff // #-1 <== NOT EXECUTED 4003b948: b9000022 str w2, [x1] <== NOT EXECUTED 4003b94c: 17fffff1 b 4003b910 <== NOT EXECUTED =============================================================================== 000000004003b9e0 : return new_ptr; } void *realloc( void *ptr, size_t size ) { 4003b9e0: a9bc7bfd stp x29, x30, [sp, #-64]! 4003b9e4: 910003fd mov x29, sp 4003b9e8: a9025bf5 stp x21, x22, [sp, #32] Heap_Control *heap; Heap_Resize_status status; uintptr_t old_size; uintptr_t avail_size; if ( size == 0 ) { 4003b9ec: b4000961 cbz x1, 4003bb18 <== NEVER TAKEN free( ptr ); return NULL; } if ( ptr == NULL ) { 4003b9f0: a90153f3 stp x19, x20, [sp, #16] 4003b9f4: aa0103f4 mov x20, x1 4003b9f8: aa0003f3 mov x19, x0 4003b9fc: b4000840 cbz x0, 4003bb04 return malloc( size ); } heap = RTEMS_Malloc_Heap; 4003ba00: d0000640 adrp x0, 40105000 4003ba04: f9448015 ldr x21, [x0, #2304] switch ( _Malloc_System_state() ) { 4003ba08: 97ff971a bl 40021670 <_Malloc_System_state> 4003ba0c: 34000480 cbz w0, 4003ba9c 4003ba10: 7100041f cmp w0, #0x1 4003ba14: 54000381 b.ne 4003ba84 // b.any <== NEVER TAKEN _Malloc_Process_deferred_frees(); status = _Heap_Resize_block( heap, ptr, size, &old_size, &avail_size ); _RTEMS_Unlock_allocator(); break; case MALLOC_SYSTEM_STATE_NO_PROTECTION: status = _Heap_Resize_block( heap, ptr, size, &old_size, &avail_size ); 4003ba18: aa1503e0 mov x0, x21 4003ba1c: 9100e3e4 add x4, sp, #0x38 4003ba20: 9100c3e3 add x3, sp, #0x30 4003ba24: aa1403e2 mov x2, x20 4003ba28: aa1303e1 mov x1, x19 break; default: return NULL; } switch ( status ) { 4003ba2c: aa1303f5 mov x21, x19 status = _Heap_Resize_block( heap, ptr, size, &old_size, &avail_size ); 4003ba30: 94000084 bl 4003bc40 <_Heap_Resize_block> 4003ba34: 2a0003f6 mov w22, w0 switch ( status ) { 4003ba38: 340004b6 cbz w22, 4003bacc 4003ba3c: 710006df cmp w22, #0x1 4003ba40: 54000501 b.ne 4003bae0 // b.any new_ptr = malloc( new_size ); 4003ba44: aa1403e0 mov x0, x20 case HEAP_RESIZE_SUCCESSFUL: return ptr; case HEAP_RESIZE_UNSATISFIED: return new_alloc( ptr, size, old_size ); 4003ba48: f9401bf6 ldr x22, [sp, #48] new_ptr = malloc( new_size ); 4003ba4c: 97ff96f5 bl 40021620 4003ba50: aa0003f5 mov x21, x0 if ( new_ptr == NULL ) { 4003ba54: b40003c0 cbz x0, 4003bacc memcpy( new_ptr, old_ptr, ( new_size < old_size ) ? new_size : old_size ); 4003ba58: eb1402df cmp x22, x20 4003ba5c: aa1303e1 mov x1, x19 4003ba60: 9a9492c2 csel x2, x22, x20, ls // ls = plast 4003ba64: 97ffcd09 bl 4002ee88 free( old_ptr ); 4003ba68: aa1303e0 mov x0, x19 4003ba6c: 97ffb1d5 bl 400281c0 default: errno = EINVAL; return NULL; } } 4003ba70: aa1503e0 mov x0, x21 return new_ptr; 4003ba74: a94153f3 ldp x19, x20, [sp, #16] } 4003ba78: a9425bf5 ldp x21, x22, [sp, #32] 4003ba7c: a8c47bfd ldp x29, x30, [sp], #64 4003ba80: d65f03c0 ret 4003ba84: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED switch ( _Malloc_System_state() ) { 4003ba88: d2800015 mov x21, #0x0 // #0 <== NOT EXECUTED } 4003ba8c: aa1503e0 mov x0, x21 <== NOT EXECUTED 4003ba90: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED 4003ba94: a8c47bfd ldp x29, x30, [sp], #64 <== NOT EXECUTED 4003ba98: d65f03c0 ret <== NOT EXECUTED _RTEMS_Lock_allocator(); 4003ba9c: 97ffa431 bl 40024b60 <_RTEMS_Lock_allocator> _Malloc_Process_deferred_frees(); 4003baa0: 97ffb1ec bl 40028250 <_Malloc_Process_deferred_frees> status = _Heap_Resize_block( heap, ptr, size, &old_size, &avail_size ); 4003baa4: 9100e3e4 add x4, sp, #0x38 4003baa8: 9100c3e3 add x3, sp, #0x30 4003baac: aa1403e2 mov x2, x20 4003bab0: aa1303e1 mov x1, x19 4003bab4: aa1503e0 mov x0, x21 4003bab8: 94000062 bl 4003bc40 <_Heap_Resize_block> switch ( status ) { 4003babc: aa1303f5 mov x21, x19 status = _Heap_Resize_block( heap, ptr, size, &old_size, &avail_size ); 4003bac0: 2a0003f6 mov w22, w0 _RTEMS_Unlock_allocator(); 4003bac4: 97ffa42b bl 40024b70 <_RTEMS_Unlock_allocator> switch ( status ) { 4003bac8: 35fffbb6 cbnz w22, 4003ba3c } 4003bacc: aa1503e0 mov x0, x21 4003bad0: a94153f3 ldp x19, x20, [sp, #16] 4003bad4: a9425bf5 ldp x21, x22, [sp, #32] 4003bad8: a8c47bfd ldp x29, x30, [sp], #64 4003badc: d65f03c0 ret errno = EINVAL; 4003bae0: 97ffcb78 bl 4002e8c0 <__errno> return NULL; 4003bae4: d2800015 mov x21, #0x0 // #0 errno = EINVAL; 4003bae8: 528002c1 mov w1, #0x16 // #22 4003baec: a94153f3 ldp x19, x20, [sp, #16] 4003baf0: b9000001 str w1, [x0] } 4003baf4: aa1503e0 mov x0, x21 4003baf8: a9425bf5 ldp x21, x22, [sp, #32] 4003bafc: a8c47bfd ldp x29, x30, [sp], #64 4003bb00: d65f03c0 ret return malloc( size ); 4003bb04: a94153f3 ldp x19, x20, [sp, #16] 4003bb08: aa0103e0 mov x0, x1 } 4003bb0c: a9425bf5 ldp x21, x22, [sp, #32] 4003bb10: a8c47bfd ldp x29, x30, [sp], #64 return malloc( size ); 4003bb14: 17ff96c3 b 40021620 return NULL; 4003bb18: d2800015 mov x21, #0x0 // #0 <== NOT EXECUTED free( ptr ); 4003bb1c: 97ffb1a9 bl 400281c0 <== NOT EXECUTED return NULL; 4003bb20: 17ffffdb b 4003ba8c <== NOT EXECUTED ... =============================================================================== 000000004002e560 : const rtems_assoc_32_pair *pairs, size_t pair_count, const char *separator, const char *fallback ) { 4002e560: a9ba7bfd stp x29, x30, [sp, #-96]! 4002e564: 910003fd mov x29, sp 4002e568: a9025bf5 stp x21, x22, [sp, #32] 4002e56c: aa0203f6 mov x22, x2 4002e570: a90363f7 stp x23, x24, [sp, #48] 4002e574: aa0103f7 mov x23, x1 4002e578: f9002bfb str x27, [sp, #80] 4002e57c: aa0603fb mov x27, x6 size_t len; size_t i; len = 0; for ( i = 0; i < pair_count ; ++i ) { 4002e580: b4000584 cbz x4, 4002e630 <== NEVER TAKEN 4002e584: 2a0003f8 mov w24, w0 4002e588: a90153f3 stp x19, x20, [sp, #16] 4002e58c: aa0303f4 mov x20, x3 4002e590: a9046bf9 stp x25, x26, [sp, #64] 4002e594: aa0403f9 mov x25, x4 4002e598: aa0503fa mov x26, x5 4002e59c: d2800015 mov x21, #0x0 // #0 4002e5a0: d2800013 mov x19, #0x0 // #0 4002e5a4: d503201f nop const rtems_assoc_32_pair *p; p = &pairs[ i ]; if ( ( value & p->bits ) != 0 ) { 4002e5a8: b9400282 ldr w2, [x20] for ( i = 0; i < pair_count ; ++i ) { 4002e5ac: 910006b5 add x21, x21, #0x1 4002e5b0: aa1703e3 mov x3, x23 if ( ( value & p->bits ) != 0 ) { 4002e5b4: 6a02031f tst w24, w2 4002e5b8: 54000200 b.eq 4002e5f8 // b.none return buffer_size - len; 4002e5bc: eb1302c2 subs x2, x22, x19 if ( len > 0 ) { len += strlcpy( &buffer[ len ], separator, space( buffer_size, len ) ); 4002e5c0: aa1a03e1 mov x1, x26 4002e5c4: 9a9f8042 csel x2, x2, xzr, hi // hi = pmore 4002e5c8: 8b1302e0 add x0, x23, x19 if ( len > 0 ) { 4002e5cc: b4000093 cbz x19, 4002e5dc len += strlcpy( &buffer[ len ], separator, space( buffer_size, len ) ); 4002e5d0: 94001661 bl 40033f54 4002e5d4: 8b000273 add x19, x19, x0 } len += strlcpy( &buffer[ len ], p->name, space( buffer_size, len ) ); 4002e5d8: 8b1302e3 add x3, x23, x19 4002e5dc: f9400681 ldr x1, [x20, #8] return buffer_size - len; 4002e5e0: eb16027f cmp x19, x22 4002e5e4: cb1302c2 sub x2, x22, x19 len += strlcpy( &buffer[ len ], p->name, space( buffer_size, len ) ); 4002e5e8: aa0303e0 mov x0, x3 4002e5ec: 9a9f3042 csel x2, x2, xzr, cc // cc = lo, ul, last 4002e5f0: 94001659 bl 40033f54 4002e5f4: 8b000273 add x19, x19, x0 for ( i = 0; i < pair_count ; ++i ) { 4002e5f8: 91004294 add x20, x20, #0x10 4002e5fc: eb15033f cmp x25, x21 4002e600: 54fffd41 b.ne 4002e5a8 // b.any } } if ( len == 0 ) { 4002e604: b4000133 cbz x19, 4002e628 len += strlcpy( buffer, fallback, buffer_size ); } return len; } 4002e608: aa1303e0 mov x0, x19 4002e60c: a94153f3 ldp x19, x20, [sp, #16] 4002e610: a9425bf5 ldp x21, x22, [sp, #32] 4002e614: a94363f7 ldp x23, x24, [sp, #48] 4002e618: a9446bf9 ldp x25, x26, [sp, #64] 4002e61c: f9402bfb ldr x27, [sp, #80] 4002e620: a8c67bfd ldp x29, x30, [sp], #96 4002e624: d65f03c0 ret 4002e628: a94153f3 ldp x19, x20, [sp, #16] 4002e62c: a9446bf9 ldp x25, x26, [sp, #64] len += strlcpy( buffer, fallback, buffer_size ); 4002e630: aa1603e2 mov x2, x22 4002e634: aa1b03e1 mov x1, x27 4002e638: aa1703e0 mov x0, x23 } 4002e63c: a9425bf5 ldp x21, x22, [sp, #32] 4002e640: a94363f7 ldp x23, x24, [sp, #48] 4002e644: f9402bfb ldr x27, [sp, #80] 4002e648: a8c67bfd ldp x29, x30, [sp], #96 len += strlcpy( buffer, fallback, buffer_size ); 4002e64c: 14001642 b 40033f54 =============================================================================== 000000004002b5b0 : uint32_t rtems_assoc_local_by_remote_bitfield( const rtems_assoc_t *ap, uint32_t remote_value ) { 4002b5b0: a9bc7bfd stp x29, x30, [sp, #-64]! 4002b5b4: 910003fd mov x29, sp 4002b5b8: a90153f3 stp x19, x20, [sp, #16] 4002b5bc: 52800414 mov w20, #0x20 // #32 uint32_t b; uint32_t local_value = 0; for (b = 1; b; b <<= 1) { 4002b5c0: 52800033 mov w19, #0x1 // #1 { 4002b5c4: a9025bf5 stp x21, x22, [sp, #32] 4002b5c8: 2a0103f5 mov w21, w1 uint32_t local_value = 0; 4002b5cc: 52800016 mov w22, #0x0 // #0 { 4002b5d0: f9001bf7 str x23, [sp, #48] 4002b5d4: aa0003f7 mov x23, x0 4002b5d8: 14000004 b 4002b5e8 for (b = 1; b; b <<= 1) { 4002b5dc: 0b130273 add w19, w19, w19 4002b5e0: 71000694 subs w20, w20, #0x1 4002b5e4: 54000140 b.eq 4002b60c // b.none if (b & remote_value) 4002b5e8: 6a1302bf tst w21, w19 4002b5ec: 54ffff80 b.eq 4002b5dc // b.none local_value |= rtems_assoc_local_by_remote(ap, b); 4002b5f0: 2a1303e1 mov w1, w19 4002b5f4: aa1703e0 mov x0, x23 4002b5f8: 9400000e bl 4002b630 for (b = 1; b; b <<= 1) { 4002b5fc: 0b130273 add w19, w19, w19 local_value |= rtems_assoc_local_by_remote(ap, b); 4002b600: 2a0002d6 orr w22, w22, w0 for (b = 1; b; b <<= 1) { 4002b604: 71000694 subs w20, w20, #0x1 4002b608: 54ffff01 b.ne 4002b5e8 // b.any<== ALWAYS TAKEN } return local_value; } 4002b60c: 2a1603e0 mov w0, w22 4002b610: a94153f3 ldp x19, x20, [sp, #16] 4002b614: a9425bf5 ldp x21, x22, [sp, #32] 4002b618: f9401bf7 ldr x23, [sp, #48] 4002b61c: a8c47bfd ldp x29, x30, [sp], #64 4002b620: d65f03c0 ret ... =============================================================================== 00000000400317c0 : const rtems_assoc_t *rtems_assoc_ptr_by_local( const rtems_assoc_t *ap, uint32_t local_value ) { 400317c0: a9be7bfd stp x29, x30, [sp, #-32]! 400317c4: 910003fd mov x29, sp 400317c8: a90153f3 stp x19, x20, [sp, #16] 400317cc: aa0003f4 mov x20, x0 const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) 400317d0: f9400000 ldr x0, [x0] 400317d4: b40001e0 cbz x0, 40031810 400317d8: 2a0103f3 mov w19, w1 400317dc: b0000041 adrp x1, 4003a000 400317e0: 9109c021 add x1, x1, #0x270 400317e4: 94000182 bl 40031dec 400317e8: 350001a0 cbnz w0, 4003181c default_ap = ap++; for ( ; ap->name; ap++) 400317ec: f9400a81 ldr x1, [x20, #16] default_ap = ap++; 400317f0: 91004280 add x0, x20, #0x10 for ( ; ap->name; ap++) 400317f4: b5000081 cbnz x1, 40031804 <== ALWAYS TAKEN 400317f8: 1400000c b 40031828 <== NOT EXECUTED 400317fc: f8410c02 ldr x2, [x0, #16]! 40031800: b4000142 cbz x2, 40031828 if (ap->local_value == local_value) 40031804: b9400802 ldr w2, [x0, #8] 40031808: 6b13005f cmp w2, w19 4003180c: 54ffff81 b.ne 400317fc // b.any return ap; return default_ap; } 40031810: a94153f3 ldp x19, x20, [sp, #16] 40031814: a8c27bfd ldp x29, x30, [sp], #32 40031818: d65f03c0 ret 4003181c: aa1403e0 mov x0, x20 const rtems_assoc_t *default_ap = 0; 40031820: d2800014 mov x20, #0x0 // #0 40031824: 17fffff8 b 40031804 for ( ; ap->name; ap++) 40031828: aa1403e0 mov x0, x20 } 4003182c: a94153f3 ldp x19, x20, [sp, #16] 40031830: a8c27bfd ldp x29, x30, [sp], #32 40031834: d65f03c0 ret =============================================================================== 0000000040021820 : const rtems_assoc_t *rtems_assoc_ptr_by_name( const rtems_assoc_t *ap, const char *name ) { 40021820: a9bd7bfd stp x29, x30, [sp, #-48]! 40021824: 910003fd mov x29, sp 40021828: a90153f3 stp x19, x20, [sp, #16] const rtems_assoc_t *default_ap = 0; 4002182c: d2800014 mov x20, #0x0 // #0 if (rtems_assoc_is_default(ap)) 40021830: f9400013 ldr x19, [x0] 40021834: b4000293 cbz x19, 40021884 40021838: a9025bf5 stp x21, x22, [sp, #32] 4002183c: aa0003f6 mov x22, x0 40021840: aa0103f5 mov x21, x1 40021844: aa1303e0 mov x0, x19 40021848: b00000a1 adrp x1, 40036000 4002184c: 91270021 add x1, x1, #0x9c0 40021850: 9400357c bl 4002ee40 40021854: 35000200 cbnz w0, 40021894 default_ap = ap++; for ( ; ap->name; ap++) 40021858: f9400ad3 ldr x19, [x22, #16] default_ap = ap++; 4002185c: 910042d4 add x20, x22, #0x10 for ( ; ap->name; ap++) 40021860: b5000093 cbnz x19, 40021870 <== ALWAYS TAKEN 40021864: 1400000f b 400218a0 <== NOT EXECUTED 40021868: f8410e93 ldr x19, [x20, #16]! 4002186c: b40001b3 cbz x19, 400218a0 if (strcmp(ap->name, name) == 0) 40021870: aa1303e0 mov x0, x19 40021874: aa1503e1 mov x1, x21 40021878: 94003572 bl 4002ee40 4002187c: 35ffff60 cbnz w0, 40021868 40021880: a9425bf5 ldp x21, x22, [sp, #32] return ap; return default_ap; } 40021884: aa1403e0 mov x0, x20 40021888: a94153f3 ldp x19, x20, [sp, #16] 4002188c: a8c37bfd ldp x29, x30, [sp], #48 40021890: d65f03c0 ret 40021894: aa1603f4 mov x20, x22 const rtems_assoc_t *default_ap = 0; 40021898: d2800016 mov x22, #0x0 // #0 4002189c: 17fffff5 b 40021870 for ( ; ap->name; ap++) 400218a0: aa1603f4 mov x20, x22 } 400218a4: aa1403e0 mov x0, x20 400218a8: a94153f3 ldp x19, x20, [sp, #16] for ( ; ap->name; ap++) 400218ac: a9425bf5 ldp x21, x22, [sp, #32] } 400218b0: a8c37bfd ldp x29, x30, [sp], #48 400218b4: d65f03c0 ret ... =============================================================================== 000000004002b660 : const rtems_assoc_t *rtems_assoc_ptr_by_remote( const rtems_assoc_t *ap, uint32_t remote_value ) { 4002b660: a9be7bfd stp x29, x30, [sp, #-32]! 4002b664: 910003fd mov x29, sp 4002b668: a90153f3 stp x19, x20, [sp, #16] 4002b66c: aa0003f4 mov x20, x0 const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) 4002b670: f9400000 ldr x0, [x0] 4002b674: b40001e0 cbz x0, 4002b6b0 4002b678: 2a0103f3 mov w19, w1 4002b67c: d0000081 adrp x1, 4003d000 4002b680: 9101c021 add x1, x1, #0x70 4002b684: 94000f68 bl 4002f424 4002b688: 350001a0 cbnz w0, 4002b6bc default_ap = ap++; for ( ; ap->name; ap++) 4002b68c: f9400a81 ldr x1, [x20, #16] default_ap = ap++; 4002b690: 91004280 add x0, x20, #0x10 for ( ; ap->name; ap++) 4002b694: b5000081 cbnz x1, 4002b6a4 <== ALWAYS TAKEN 4002b698: 1400000c b 4002b6c8 <== NOT EXECUTED 4002b69c: f8410c02 ldr x2, [x0, #16]! 4002b6a0: b4000142 cbz x2, 4002b6c8 if (ap->remote_value == remote_value) 4002b6a4: b9400c02 ldr w2, [x0, #12] 4002b6a8: 6b13005f cmp w2, w19 4002b6ac: 54ffff81 b.ne 4002b69c // b.any return ap; return default_ap; } 4002b6b0: a94153f3 ldp x19, x20, [sp, #16] 4002b6b4: a8c27bfd ldp x29, x30, [sp], #32 4002b6b8: d65f03c0 ret 4002b6bc: aa1403e0 mov x0, x20 const rtems_assoc_t *default_ap = 0; 4002b6c0: d2800014 mov x20, #0x0 // #0 4002b6c4: 17fffff8 b 4002b6a4 for ( ; ap->name; ap++) 4002b6c8: aa1403e0 mov x0, x20 } 4002b6cc: a94153f3 ldp x19, x20, [sp, #16] 4002b6d0: a8c27bfd ldp x29, x30, [sp], #32 4002b6d4: d65f03c0 ret ... =============================================================================== 0000000040021940 : uint32_t rtems_assoc_remote_by_local_bitfield( const rtems_assoc_t *ap, uint32_t local_value ) { 40021940: a9bc7bfd stp x29, x30, [sp, #-64]! 40021944: 910003fd mov x29, sp 40021948: a90153f3 stp x19, x20, [sp, #16] 4002194c: 52800414 mov w20, #0x20 // #32 uint32_t b; uint32_t remote_value = 0; for (b = 1; b; b <<= 1) 40021950: 52800033 mov w19, #0x1 // #1 { 40021954: a9025bf5 stp x21, x22, [sp, #32] 40021958: 2a0103f5 mov w21, w1 uint32_t remote_value = 0; 4002195c: 52800016 mov w22, #0x0 // #0 { 40021960: f9001bf7 str x23, [sp, #48] 40021964: aa0003f7 mov x23, x0 40021968: 14000004 b 40021978 for (b = 1; b; b <<= 1) 4002196c: 0b130273 add w19, w19, w19 40021970: 71000694 subs w20, w20, #0x1 40021974: 54000140 b.eq 4002199c // b.none if (b & local_value) 40021978: 6a1302bf tst w21, w19 4002197c: 54ffff80 b.eq 4002196c // b.none remote_value |= rtems_assoc_remote_by_local(ap, b); 40021980: 2a1303e1 mov w1, w19 40021984: aa1703e0 mov x0, x23 40021988: 9400000e bl 400219c0 for (b = 1; b; b <<= 1) 4002198c: 0b130273 add w19, w19, w19 remote_value |= rtems_assoc_remote_by_local(ap, b); 40021990: 2a0002d6 orr w22, w22, w0 for (b = 1; b; b <<= 1) 40021994: 71000694 subs w20, w20, #0x1 40021998: 54ffff01 b.ne 40021978 // b.any<== ALWAYS TAKEN return remote_value; } 4002199c: 2a1603e0 mov w0, w22 400219a0: a94153f3 ldp x19, x20, [sp, #16] 400219a4: a9425bf5 ldp x21, x22, [sp, #32] 400219a8: f9401bf7 ldr x23, [sp, #48] 400219ac: a8c47bfd ldp x29, x30, [sp], #64 400219b0: d65f03c0 ret ... =============================================================================== 000000004002c320 : void rtems_cache_coherent_add_area( void *area_begin, uintptr_t area_size ) { 4002c320: a9bd7bfd stp x29, x30, [sp, #-48]! 4002c324: 910003fd mov x29, sp 4002c328: b00006c2 adrp x2, 40105000 if ( _System_state_Is_up( _System_state_Get()) ) { 4002c32c: b94a0842 ldr w2, [x2, #2568] { 4002c330: a90153f3 stp x19, x20, [sp, #16] 4002c334: aa0003f3 mov x19, x0 4002c338: aa0103f4 mov x20, x1 4002c33c: a9025bf5 stp x21, x22, [sp, #32] if ( _System_state_Is_up( _System_state_Get()) ) { 4002c340: 7100085f cmp w2, #0x2 4002c344: 54000160 b.eq 4002c370 // b.none Heap_Control *heap = cache_coherent_heap; 4002c348: b0000715 adrp x21, 4010d000 4002c34c: f946bea0 ldr x0, [x21, #3448] if ( heap == NULL ) { 4002c350: b4000280 cbz x0, 4002c3a0 _Heap_Extend( heap, area_begin, area_size, 0 ); 4002c354: aa0103e2 mov x2, x1 4002c358: aa1303e1 mov x1, x19 _RTEMS_Unlock_allocator(); } else { add_area( area_begin, area_size ); } } 4002c35c: a94153f3 ldp x19, x20, [sp, #16] _Heap_Extend( heap, area_begin, area_size, 0 ); 4002c360: d2800003 mov x3, #0x0 // #0 } 4002c364: a9425bf5 ldp x21, x22, [sp, #32] 4002c368: a8c37bfd ldp x29, x30, [sp], #48 _Heap_Extend( heap, area_begin, area_size, 0 ); 4002c36c: 17fff321 b 40028ff0 <_Heap_Extend> _RTEMS_Lock_allocator(); 4002c370: 97ffe1fc bl 40024b60 <_RTEMS_Lock_allocator> Heap_Control *heap = cache_coherent_heap; 4002c374: b0000715 adrp x21, 4010d000 4002c378: f946bea0 ldr x0, [x21, #3448] if ( heap == NULL ) { 4002c37c: b40002c0 cbz x0, 4002c3d4 <== NEVER TAKEN _Heap_Extend( heap, area_begin, area_size, 0 ); 4002c380: aa1403e2 mov x2, x20 4002c384: aa1303e1 mov x1, x19 4002c388: d2800003 mov x3, #0x0 // #0 4002c38c: 97fff319 bl 40028ff0 <_Heap_Extend> } 4002c390: a94153f3 ldp x19, x20, [sp, #16] 4002c394: a9425bf5 ldp x21, x22, [sp, #32] 4002c398: a8c37bfd ldp x29, x30, [sp], #48 _RTEMS_Unlock_allocator(); 4002c39c: 17ffe1f5 b 40024b70 <_RTEMS_Unlock_allocator> ok = _Heap_Initialize( heap, area_begin, area_size, 0 ); 4002c3a0: b0000716 adrp x22, 4010d000 4002c3a4: 913602d6 add x22, x22, #0xd80 4002c3a8: aa0103e2 mov x2, x1 4002c3ac: aa1603e0 mov x0, x22 4002c3b0: aa1303e1 mov x1, x19 4002c3b4: d2800003 mov x3, #0x0 // #0 4002c3b8: 97ffe2f2 bl 40024f80 <_Heap_Initialize> if ( ok ) { 4002c3bc: b4000040 cbz x0, 4002c3c4 <== NEVER TAKEN cache_coherent_heap = heap; 4002c3c0: f906beb6 str x22, [x21, #3448] } 4002c3c4: a94153f3 ldp x19, x20, [sp, #16] 4002c3c8: a9425bf5 ldp x21, x22, [sp, #32] 4002c3cc: a8c37bfd ldp x29, x30, [sp], #48 4002c3d0: d65f03c0 ret ok = _Heap_Initialize( heap, area_begin, area_size, 0 ); 4002c3d4: b0000716 adrp x22, 4010d000 <== NOT EXECUTED 4002c3d8: 913602d6 add x22, x22, #0xd80 <== NOT EXECUTED 4002c3dc: aa1403e2 mov x2, x20 <== NOT EXECUTED 4002c3e0: aa1303e1 mov x1, x19 <== NOT EXECUTED 4002c3e4: aa1603e0 mov x0, x22 <== NOT EXECUTED 4002c3e8: d2800003 mov x3, #0x0 // #0 <== NOT EXECUTED 4002c3ec: 97ffe2e5 bl 40024f80 <_Heap_Initialize> <== NOT EXECUTED if ( ok ) { 4002c3f0: b4fffd00 cbz x0, 4002c390 <== NOT EXECUTED cache_coherent_heap = heap; 4002c3f4: f906beb6 str x22, [x21, #3448] <== NOT EXECUTED 4002c3f8: 17ffffe6 b 4002c390 <== NOT EXECUTED 4002c3fc: 00000000 udf #0 =============================================================================== 00000000400222d0 : void rtems_cache_coherent_free( void *ptr ) { 400222d0: a9be7bfd stp x29, x30, [sp, #-32]! 400222d4: 910003fd mov x29, sp 400222d8: f9000bf3 str x19, [sp, #16] 400222dc: aa0003f3 mov x19, x0 Heap_Control *heap; _RTEMS_Lock_allocator(); 400222e0: 94000de4 bl 40025a70 <_RTEMS_Lock_allocator> heap = cache_coherent_heap; 400222e4: d0000700 adrp x0, 40104000 400222e8: f9423400 ldr x0, [x0, #1128] if ( heap != NULL ) { 400222ec: b4000100 cbz x0, 4002230c <== NEVER TAKEN if ( _Heap_Free( heap, ptr ) ) { 400222f0: aa1303e1 mov x1, x19 400222f4: 94001073 bl 400264c0 <_Heap_Free> 400222f8: 72001c1f tst w0, #0xff 400222fc: 54000080 b.eq 4002230c // b.none <== NEVER TAKEN if ( heap != NULL ) { _Heap_Free( heap, ptr ); } _RTEMS_Unlock_allocator(); } 40022300: f9400bf3 ldr x19, [sp, #16] 40022304: a8c27bfd ldp x29, x30, [sp], #32 _RTEMS_Unlock_allocator(); 40022308: 14000dde b 40025a80 <_RTEMS_Unlock_allocator> heap = RTEMS_Malloc_Heap; 4002230c: d0000700 adrp x0, 40104000 <== NOT EXECUTED 40022310: f9428c00 ldr x0, [x0, #1304] <== NOT EXECUTED if ( heap != NULL ) { 40022314: b4ffff60 cbz x0, 40022300 <== NOT EXECUTED _Heap_Free( heap, ptr ); 40022318: aa1303e1 mov x1, x19 <== NOT EXECUTED 4002231c: 94001069 bl 400264c0 <_Heap_Free> <== NOT EXECUTED } 40022320: f9400bf3 ldr x19, [sp, #16] <== NOT EXECUTED 40022324: a8c27bfd ldp x29, x30, [sp], #32 <== NOT EXECUTED _RTEMS_Unlock_allocator(); 40022328: 14000dd6 b 40025a80 <_RTEMS_Unlock_allocator> <== NOT EXECUTED 4002232c: 00000000 udf #0 =============================================================================== 0000000040022730 : } void rtems_filesystem_do_unmount( rtems_filesystem_mount_table_entry_t *mt_entry ) { 40022730: a9be7bfd stp x29, x30, [sp, #-32]! 40022734: 910003fd mov x29, sp 40022738: f9000bf3 str x19, [sp, #16] 4002273c: aa0003f3 mov x19, x0 rtems_libio_lock(); 40022740: 94001720 bl 400283c0 previous = the_node->previous; 40022744: a9400261 ldp x1, x0, [x19] next->previous = previous; 40022748: f9000420 str x0, [x1, #8] previous->next = next; 4002274c: f9000001 str x1, [x0] rtems_libio_unlock(); 40022750: 94001720 bl 400283d0 release_with_count(global_loc, 1); 40022754: f9402260 ldr x0, [x19, #64] 40022758: 52800021 mov w1, #0x1 // #1 4002275c: 94000011 bl 400227a0 rtems_filesystem_mt_lock(); rtems_chain_extract_unprotected(&mt_entry->mt_node); rtems_filesystem_mt_unlock(); rtems_filesystem_global_location_release(mt_entry->mt_point_node, false); (*mt_entry->ops->fsunmount_me_h)(mt_entry); 40022760: f9400e61 ldr x1, [x19, #24] 40022764: aa1303e0 mov x0, x19 40022768: f9403421 ldr x1, [x1, #104] 4002276c: d63f0020 blr x1 if (mt_entry->unmount_task != 0) { 40022770: b9407a60 ldr w0, [x19, #120] 40022774: 34000080 cbz w0, 40022784 <== NEVER TAKEN * * @param id is the identifier of the task to receive the transient event. */ static inline rtems_status_code rtems_event_transient_send( rtems_id id ) { return rtems_event_system_send( id, RTEMS_EVENT_SYSTEM_TRANSIENT ); 40022778: 52b00001 mov w1, #0x80000000 // #-2147483648 4002277c: 9400087d bl 40024970 rtems_status_code sc = rtems_event_transient_send(mt_entry->unmount_task); if (sc != RTEMS_SUCCESSFUL) { 40022780: 350000a0 cbnz w0, 40022794 <== NEVER TAKEN rtems_fatal_error_occurred(0xdeadbeef); } } free(mt_entry); 40022784: aa1303e0 mov x0, x19 } 40022788: f9400bf3 ldr x19, [sp, #16] 4002278c: a8c27bfd ldp x29, x30, [sp], #32 free(mt_entry); 40022790: 1400168c b 400281c0 rtems_fatal_error_occurred(0xdeadbeef); 40022794: 5297dde0 mov w0, #0xbeef // #48879 <== NOT EXECUTED 40022798: 72bbd5a0 movk w0, #0xdead, lsl #16 <== NOT EXECUTED 4002279c: 940008e9 bl 40024b40 <== NOT EXECUTED =============================================================================== 0000000040022110 : { 40022110: a9be7bfd stp x29, x30, [sp, #-32]! 40022114: 910003fd mov x29, sp 40022118: a90153f3 stp x19, x20, [sp, #16] 4002211c: aa0003f3 mov x19, x0 while (ctx->pathlen > 0) { 40022120: f9400400 ldr x0, [x0, #8] 40022124: b4000100 cbz x0, 40022144 (*ctx->currentloc.mt_entry->ops->eval_path_h)(ctx); 40022128: f9402a61 ldr x1, [x19, #80] 4002212c: aa1303e0 mov x0, x19 40022130: f9400c21 ldr x1, [x1, #24] 40022134: f9400821 ldr x1, [x1, #16] 40022138: d63f0020 blr x1 while (ctx->pathlen > 0) { 4002213c: f9400660 ldr x0, [x19, #8] 40022140: b5ffff40 cbnz x0, 40022128 if (rtems_filesystem_eval_path_has_token(ctx)) { 40022144: f9400e60 ldr x0, [x19, #24] return ctx->flags; 40022148: b9402261 ldr w1, [x19, #32] 4002214c: b40000e0 cbz x0, 40022168 if (make) { 40022150: 36280361 tbz w1, #5, 400221bc check_access(ctx, RTEMS_FS_PERMS_WRITE); 40022154: aa1303e0 mov x0, x19 40022158: 52800041 mov w1, #0x2 // #2 } 4002215c: a94153f3 ldp x19, x20, [sp, #16] 40022160: a8c27bfd ldp x29, x30, [sp], #32 check_access(ctx, RTEMS_FS_PERMS_WRITE); 40022164: 17ffffa3 b 40021ff0 if (!exclusive) { 40022168: 373000a1 tbnz w1, #6, 4002217c check_access(ctx, ctx->flags); 4002216c: aa1303e0 mov x0, x19 } 40022170: a94153f3 ldp x19, x20, [sp, #16] 40022174: a8c27bfd ldp x29, x30, [sp], #32 check_access(ctx, ctx->flags); 40022178: 17ffff9e b 40021ff0 if (!rtems_filesystem_location_is_null(&ctx->currentloc)) { 4002217c: f9402661 ldr x1, [x19, #72] ctx->pathlen = 0; 40022180: a9007e7f stp xzr, xzr, [x19] if (!rtems_filesystem_location_is_null(&ctx->currentloc)) { 40022184: d00000c0 adrp x0, 4003c000 <_Scheduler_Table+0x48> 40022188: 91278000 add x0, x0, #0x9e0 ctx->token = NULL; 4002218c: f9000a7f str xzr, [x19, #16] return loc->handlers == &rtems_filesystem_null_handlers; 40022190: 9100a274 add x20, x19, #0x28 if (!rtems_filesystem_location_is_null(&ctx->currentloc)) { 40022194: eb00003f cmp x1, x0 40022198: 54000320 b.eq 400221fc // b.none errno = eno; 4002219c: 940031c9 bl 4002e8c0 <__errno> 400221a0: aa0003e1 mov x1, x0 400221a4: 52800222 mov w2, #0x11 // #17 rtems_filesystem_location_detach(&ctx->currentloc); 400221a8: aa1403e0 mov x0, x20 } 400221ac: a94153f3 ldp x19, x20, [sp, #16] errno = eno; 400221b0: b9000022 str w2, [x1] } 400221b4: a8c27bfd ldp x29, x30, [sp], #32 rtems_filesystem_location_detach(&ctx->currentloc); 400221b8: 1400012a b 40022660 if (!rtems_filesystem_location_is_null(&ctx->currentloc)) { 400221bc: f9402661 ldr x1, [x19, #72] ctx->pathlen = 0; 400221c0: a9007e7f stp xzr, xzr, [x19] if (!rtems_filesystem_location_is_null(&ctx->currentloc)) { 400221c4: d00000c0 adrp x0, 4003c000 <_Scheduler_Table+0x48> 400221c8: 91278000 add x0, x0, #0x9e0 ctx->tokenlen = 0; 400221cc: a9017e7f stp xzr, xzr, [x19, #16] 400221d0: 9100a274 add x20, x19, #0x28 if (!rtems_filesystem_location_is_null(&ctx->currentloc)) { 400221d4: eb00003f cmp x1, x0 400221d8: 54000120 b.eq 400221fc // b.none<== NEVER TAKEN errno = eno; 400221dc: 940031b9 bl 4002e8c0 <__errno> 400221e0: aa0003e1 mov x1, x0 400221e4: 52800042 mov w2, #0x2 // #2 rtems_filesystem_location_detach(&ctx->currentloc); 400221e8: aa1403e0 mov x0, x20 } 400221ec: a94153f3 ldp x19, x20, [sp, #16] errno = eno; 400221f0: b9000022 str w2, [x1] } 400221f4: a8c27bfd ldp x29, x30, [sp], #32 rtems_filesystem_location_detach(&ctx->currentloc); 400221f8: 1400011a b 40022660 } 400221fc: a94153f3 ldp x19, x20, [sp, #16] 40022200: a8c27bfd ldp x29, x30, [sp], #32 40022204: d65f03c0 ret ... =============================================================================== 00000000400288b0 : void rtems_filesystem_eval_path_eat_delimiter( rtems_filesystem_eval_path_context_t *ctx ) { const char *current = ctx->path; const char *end = current + ctx->pathlen; 400288b0: a9400c01 ldp x1, x3, [x0] return c == '/' || c == '\\'; 400288b4: 52800b84 mov w4, #0x5c // #92 400288b8: 8b030023 add x3, x1, x3 while (current != end && rtems_filesystem_is_delimiter(*current)) { 400288bc: eb03003f cmp x1, x3 400288c0: 540000a1 b.ne 400288d4 // b.any<== ALWAYS TAKEN 400288c4: 1400000b b 400288f0 <== NOT EXECUTED ++current; 400288c8: 91000421 add x1, x1, #0x1 while (current != end && rtems_filesystem_is_delimiter(*current)) { 400288cc: eb01007f cmp x3, x1 400288d0: 54000100 b.eq 400288f0 // b.none 400288d4: 39400022 ldrb w2, [x1] 400288d8: 7100bc5f cmp w2, #0x2f 400288dc: 7a441044 ccmp w2, w4, #0x4, ne // ne = any 400288e0: 54ffff40 b.eq 400288c8 // b.none } ctx->path = current; ctx->pathlen = (size_t) (end - current); 400288e4: cb010063 sub x3, x3, x1 400288e8: a9000c01 stp x1, x3, [x0] } 400288ec: d65f03c0 ret ctx->pathlen = (size_t) (end - current); 400288f0: d2800003 mov x3, #0x0 // #0 400288f4: a9000c01 stp x1, x3, [x0] } 400288f8: d65f03c0 ret 400288fc: 00000000 udf #0 =============================================================================== 0000000040028660 : void rtems_filesystem_eval_path_generic( rtems_filesystem_eval_path_context_t *ctx, void *arg, const rtems_filesystem_eval_path_generic_config *config ) { 40028660: a9bb7bfd stp x29, x30, [sp, #-80]! 40028664: 910003fd mov x29, sp 40028668: a90153f3 stp x19, x20, [sp, #16] 4002866c: aa0003f3 mov x19, x0 40028670: aa0203f4 mov x20, x2 40028674: a9025bf5 stp x21, x22, [sp, #32] ¤tloc->mt_entry->mt_point_node ); status = RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_DONE; } else { /* This is the root file system */ status = (*config->eval_token)(ctx, arg, ".", 1); 40028678: 900000b6 adrp x22, 4003c000 <_Scheduler_Table+0x48> 4002867c: 913ae2d6 add x22, x22, #0xeb8 { 40028680: aa0103f5 mov x21, x1 40028684: a90363f7 stp x23, x24, [sp, #48] } } else { status = (*config->eval_token)(ctx, arg, "..", 2); 40028688: 900000b8 adrp x24, 4003c000 <_Scheduler_Table+0x48> 4002868c: 913b0318 add x24, x24, #0xec0 return &ctx->currentloc; 40028690: 9100a017 add x23, x0, #0x28 { 40028694: a9046bf9 stp x25, x26, [sp, #64] rtems_filesystem_eval_path_next_token(ctx); 40028698: aa1303e0 mov x0, x19 4002869c: 94000099 bl 40028900 *tokenlen = ctx->tokenlen; 400286a0: a941667a ldp x26, x25, [x19, #16] if (tokenlen > 0) { 400286a4: b4000539 cbz x25, 40028748 if ((*config->is_directory)(ctx, arg)) { 400286a8: f9400283 ldr x3, [x20] 400286ac: aa1503e1 mov x1, x21 400286b0: aa1303e0 mov x0, x19 400286b4: d63f0060 blr x3 400286b8: 72001c1f tst w0, #0xff 400286bc: 54000e40 b.eq 40028884 // b.none return tokenlen == 1 && token [0] == '.'; 400286c0: f100073f cmp x25, #0x1 400286c4: 54000200 b.eq 40028704 // b.none return tokenlen == 2 && token [0] == '.' && token [1] == '.'; 400286c8: f1000b3f cmp x25, #0x2 400286cc: 54000081 b.ne 400286dc // b.any 400286d0: 39400340 ldrb w0, [x26] 400286d4: 7100b81f cmp w0, #0x2e 400286d8: 54000700 b.eq 400287b8 // b.none } } else { status = (*config->eval_token)(ctx, arg, token, tokenlen); 400286dc: f9400684 ldr x4, [x20, #8] 400286e0: aa1903e3 mov x3, x25 400286e4: aa1a03e2 mov x2, x26 400286e8: aa1503e1 mov x1, x21 400286ec: aa1303e0 mov x0, x19 400286f0: d63f0080 blr x4 } if (status == RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_NO_ENTRY) { 400286f4: 7100081f cmp w0, #0x2 400286f8: 54000240 b.eq 40028740 // b.none while (status == RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_CONTINUE) { 400286fc: 34fffce0 cbz w0, 40028698 40028700: 14000012 b 40028748 return tokenlen == 1 && token [0] == '.'; 40028704: 39400340 ldrb w0, [x26] 40028708: 7100b81f cmp w0, #0x2e 4002870c: 54fffe81 b.ne 400286dc // b.any if (rtems_filesystem_eval_path_has_path(ctx)) { 40028710: f9400660 ldr x0, [x19, #8] 40028714: b5000060 cbnz x0, 40028720 if ((eval_flags & RTEMS_FS_REJECT_TERMINAL_DOT) == 0) { 40028718: b9402260 ldr w0, [x19, #32] 4002871c: 374003e0 tbnz w0, #8, 40028798 status = (*config->eval_token)(ctx, arg, ".", 1); 40028720: f9400684 ldr x4, [x20, #8] 40028724: aa1603e2 mov x2, x22 40028728: aa1503e1 mov x1, x21 4002872c: aa1303e0 mov x0, x19 40028730: d2800023 mov x3, #0x1 // #1 40028734: d63f0080 blr x4 if (status == RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_NO_ENTRY) { 40028738: 7100081f cmp w0, #0x2 4002873c: 54fffe01 b.ne 400286fc // b.any<== ALWAYS TAKEN if (rtems_filesystem_eval_path_has_path(ctx)) { 40028740: f9400660 ldr x0, [x19, #8] 40028744: b50000e0 cbnz x0, 40028760 } } else { status = RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_DONE; } } } 40028748: a94153f3 ldp x19, x20, [sp, #16] 4002874c: a9425bf5 ldp x21, x22, [sp, #32] 40028750: a94363f7 ldp x23, x24, [sp, #48] 40028754: a9446bf9 ldp x25, x26, [sp, #64] 40028758: a8c57bfd ldp x29, x30, [sp], #80 4002875c: d65f03c0 ret rtems_filesystem_eval_path_eat_delimiter(ctx); 40028760: aa1303e0 mov x0, x19 40028764: 94000053 bl 400288b0 (eval_flags & RTEMS_FS_ACCEPT_RESIDUAL_DELIMITERS) == 0 40028768: b9402260 ldr w0, [x19, #32] if ( 4002876c: 36380060 tbz w0, #7, 40028778 || rtems_filesystem_eval_path_has_path(ctx) 40028770: f9400660 ldr x0, [x19, #8] 40028774: b4fffea0 cbz x0, 40028748 rtems_filesystem_eval_path_error(ctx, ENOENT); 40028778: aa1303e0 mov x0, x19 4002877c: 52800041 mov w1, #0x2 // #2 } 40028780: a94153f3 ldp x19, x20, [sp, #16] 40028784: a9425bf5 ldp x21, x22, [sp, #32] 40028788: a94363f7 ldp x23, x24, [sp, #48] 4002878c: a9446bf9 ldp x25, x26, [sp, #64] 40028790: a8c57bfd ldp x29, x30, [sp], #80 rtems_filesystem_eval_path_error(ctx, ENOTDIR); 40028794: 17ffe6ff b 40022390 rtems_filesystem_eval_path_error(ctx, EINVAL); 40028798: aa1303e0 mov x0, x19 4002879c: 528002c1 mov w1, #0x16 // #22 } 400287a0: a94153f3 ldp x19, x20, [sp, #16] 400287a4: a9425bf5 ldp x21, x22, [sp, #32] 400287a8: a94363f7 ldp x23, x24, [sp, #48] 400287ac: a9446bf9 ldp x25, x26, [sp, #64] 400287b0: a8c57bfd ldp x29, x30, [sp], #80 rtems_filesystem_eval_path_error(ctx, ENOTDIR); 400287b4: 17ffe6f7 b 40022390 return tokenlen == 2 && token [0] == '.' && token [1] == '.'; 400287b8: 39400740 ldrb w0, [x26, #1] 400287bc: 7100b81f cmp w0, #0x2e 400287c0: 54fff8e1 b.ne 400286dc // b.any<== NEVER TAKEN const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry; 400287c4: f94016e2 ldr x2, [x23, #40] 400287c8: f9402e61 ldr x1, [x19, #88] && (*mt_entry->ops->are_nodes_equal_h)( loc, rootloc ); 400287cc: f9400c43 ldr x3, [x2, #24] 400287d0: f9401420 ldr x0, [x1, #40] 400287d4: f9401063 ldr x3, [x3, #32] 400287d8: eb00005f cmp x2, x0 400287dc: 540002e0 b.eq 40028838 // b.none return (*mt_entry->ops->are_nodes_equal_h)( loc, mt_fs_root ); 400287e0: f9402441 ldr x1, [x2, #72] 400287e4: aa1703e0 mov x0, x23 400287e8: d63f0060 blr x3 } else if (is_fs_root(currentloc)) { 400287ec: 72001c1f tst w0, #0xff 400287f0: 540003c0 b.eq 40028868 // b.none if (currentloc->mt_entry->mt_point_node != NULL) { 400287f4: f94016e1 ldr x1, [x23, #40] 400287f8: f9402020 ldr x0, [x1, #64] 400287fc: b4fff920 cbz x0, 40028720 <== NEVER TAKEN ctx->pathlen += tokenlen; 40028800: a9400a63 ldp x3, x2, [x19] rtems_filesystem_eval_path_restart( 40028804: aa1303e0 mov x0, x19 size_t tokenlen = ctx->tokenlen; 40028808: f9400e64 ldr x4, [x19, #24] 4002880c: 91010021 add x1, x1, #0x40 } 40028810: a9425bf5 ldp x21, x22, [sp, #32] ctx->path -= tokenlen; 40028814: cb040063 sub x3, x3, x4 ctx->pathlen += tokenlen; 40028818: 8b040042 add x2, x2, x4 4002881c: a94363f7 ldp x23, x24, [sp, #48] 40028820: a9446bf9 ldp x25, x26, [sp, #64] 40028824: a9000a63 stp x3, x2, [x19] ctx->tokenlen = 0; 40028828: f9000e7f str xzr, [x19, #24] 4002882c: a94153f3 ldp x19, x20, [sp, #16] 40028830: a8c57bfd ldp x29, x30, [sp], #80 rtems_filesystem_eval_path_restart( 40028834: 17ffe707 b 40022450 && (*mt_entry->ops->are_nodes_equal_h)( loc, rootloc ); 40028838: aa1703e0 mov x0, x23 4002883c: d63f0060 blr x3 40028840: 72001c1f tst w0, #0xff 40028844: 54fff6e1 b.ne 40028720 // b.any const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry; 40028848: f94016e2 ldr x2, [x23, #40] return (*mt_entry->ops->are_nodes_equal_h)( loc, mt_fs_root ); 4002884c: f9400c40 ldr x0, [x2, #24] 40028850: f9402441 ldr x1, [x2, #72] 40028854: f9401003 ldr x3, [x0, #32] 40028858: aa1703e0 mov x0, x23 4002885c: d63f0060 blr x3 } else if (is_fs_root(currentloc)) { 40028860: 72001c1f tst w0, #0xff 40028864: 54fffc81 b.ne 400287f4 // b.any<== NEVER TAKEN status = (*config->eval_token)(ctx, arg, "..", 2); 40028868: f9400684 ldr x4, [x20, #8] 4002886c: aa1803e2 mov x2, x24 40028870: aa1503e1 mov x1, x21 40028874: aa1303e0 mov x0, x19 40028878: d2800043 mov x3, #0x2 // #2 4002887c: d63f0080 blr x4 40028880: 17ffff9d b 400286f4 rtems_filesystem_eval_path_error(ctx, ENOTDIR); 40028884: aa1303e0 mov x0, x19 40028888: 52800281 mov w1, #0x14 // #20 } 4002888c: a94153f3 ldp x19, x20, [sp, #16] 40028890: a9425bf5 ldp x21, x22, [sp, #32] 40028894: a94363f7 ldp x23, x24, [sp, #48] 40028898: a9446bf9 ldp x25, x26, [sp, #64] 4002889c: a8c57bfd ldp x29, x30, [sp], #80 rtems_filesystem_eval_path_error(ctx, ENOTDIR); 400288a0: 17ffe6bc b 40022390 ... =============================================================================== 0000000040028900 : const char *end = current + ctx->pathlen; 40028900: a9401001 ldp x1, x4, [x0] 40028904: 52800b83 mov w3, #0x5c // #92 40028908: 8b040024 add x4, x1, x4 while (current != end && rtems_filesystem_is_delimiter(*current)) { 4002890c: eb04003f cmp x1, x4 40028910: 540000a1 b.ne 40028924 // b.any 40028914: 1400001b b 40028980 ++current; 40028918: 91000421 add x1, x1, #0x1 while (current != end && rtems_filesystem_is_delimiter(*current)) { 4002891c: eb01009f cmp x4, x1 40028920: 54000300 b.eq 40028980 // b.none 40028924: 39400022 ldrb w2, [x1] 40028928: 7100bc5f cmp w2, #0x2f 4002892c: 7a431044 ccmp w2, w3, #0x4, ne // ne = any 40028930: 54ffff40 b.eq 40028918 // b.none { const char *begin = ctx->path; const char *end = begin + ctx->pathlen; const char *current = begin; while (current != end && !rtems_filesystem_is_delimiter(*current)) { 40028934: eb010086 subs x6, x4, x1 ctx->pathlen = (size_t) (end - current); 40028938: a9001801 stp x1, x6, [x0] while (current != end && !rtems_filesystem_is_delimiter(*current)) { 4002893c: aa0103e2 mov x2, x1 40028940: 52800b85 mov w5, #0x5c // #92 40028944: 540000a1 b.ne 40028958 // b.any<== ALWAYS TAKEN 40028948: 14000018 b 400289a8 <== NOT EXECUTED ++current; 4002894c: 91000442 add x2, x2, #0x1 while (current != end && !rtems_filesystem_is_delimiter(*current)) { 40028950: eb04005f cmp x2, x4 40028954: 54000220 b.eq 40028998 // b.none 40028958: 39400043 ldrb w3, [x2] 4002895c: 7100bc7f cmp w3, #0x2f 40028960: 7a451064 ccmp w3, w5, #0x4, ne // ne = any 40028964: 54ffff41 b.ne 4002894c // b.any } ctx->path = current; ctx->pathlen = (size_t) (end - current); 40028968: cb020083 sub x3, x4, x2 ctx->token = begin; ctx->tokenlen = (size_t) (current - begin); 4002896c: cb010046 sub x6, x2, x1 40028970: aa0203e4 mov x4, x2 ctx->pathlen = (size_t) (end - current); 40028974: a9000c04 stp x4, x3, [x0] ctx->tokenlen = (size_t) (current - begin); 40028978: a9011801 stp x1, x6, [x0, #16] rtems_filesystem_eval_path_context_t *ctx ) { rtems_filesystem_eval_path_eat_delimiter(ctx); next_token(ctx); } 4002897c: d65f03c0 ret ctx->tokenlen = (size_t) (current - begin); 40028980: aa0103e4 mov x4, x1 ctx->pathlen = (size_t) (end - current); 40028984: d2800003 mov x3, #0x0 // #0 ctx->tokenlen = (size_t) (current - begin); 40028988: d2800006 mov x6, #0x0 // #0 ctx->pathlen = (size_t) (end - current); 4002898c: a9000c04 stp x4, x3, [x0] ctx->tokenlen = (size_t) (current - begin); 40028990: a9011801 stp x1, x6, [x0, #16] } 40028994: d65f03c0 ret 40028998: d2800003 mov x3, #0x0 // #0 ctx->pathlen = (size_t) (end - current); 4002899c: a9000c04 stp x4, x3, [x0] ctx->tokenlen = (size_t) (current - begin); 400289a0: a9011801 stp x1, x6, [x0, #16] } 400289a4: d65f03c0 ret while (current != end && !rtems_filesystem_is_delimiter(*current)) { 400289a8: aa0603e3 mov x3, x6 <== NOT EXECUTED 400289ac: d2800006 mov x6, #0x0 // #0 <== NOT EXECUTED 400289b0: 17fffff7 b 4002898c <== NOT EXECUTED ... =============================================================================== 00000000400224d0 : { 400224d0: a9bc7bfd stp x29, x30, [sp, #-64]! 400224d4: 910003fd mov x29, sp 400224d8: a90153f3 stp x19, x20, [sp, #16] 400224dc: aa0003f3 mov x19, x0 if (pathlen > 0) { 400224e0: b4000662 cbz x2, 400225ac <== NEVER TAKEN 400224e4: a9025bf5 stp x21, x22, [sp, #32] 400224e8: aa0103f5 mov x21, x1 if (ctx->recursionlevel < RTEMS_FILESYSTEM_SYMLOOP_MAX) { 400224ec: b9402401 ldr w1, [x0, #36] 400224f0: 71007c3f cmp w1, #0x1f 400224f4: 540003ac b.gt 40022568 size_t saved_pathlen = ctx->pathlen; 400224f8: f9400416 ldr x22, [x0, #8] 400224fc: f9001bf7 str x23, [sp, #48] 40022500: aa0203f4 mov x20, x2 return c == '/' || c == '\\'; 40022504: 52800b83 mov w3, #0x5c // #92 if (rtems_filesystem_is_delimiter(path [0])) { 40022508: 394002a2 ldrb w2, [x21] const char *saved_path = ctx->path; 4002250c: f9400017 ldr x23, [x0] 40022510: 7100bc5f cmp w2, #0x2f if (rtems_filesystem_is_delimiter(path [0])) { 40022514: 7a431044 ccmp w2, w3, #0x4, ne // ne = any 40022518: 540006e0 b.eq 400225f4 // b.none ++ctx->recursionlevel; 4002251c: 11000421 add w1, w1, #0x1 ctx->pathlen = pathlen; 40022520: a9005275 stp x21, x20, [x19] ++ctx->recursionlevel; 40022524: b9002661 str w1, [x19, #36] (*ctx->currentloc.mt_entry->ops->eval_path_h)(ctx); 40022528: f9402a61 ldr x1, [x19, #80] 4002252c: aa1303e0 mov x0, x19 40022530: f9400c21 ldr x1, [x1, #24] 40022534: f9400821 ldr x1, [x1, #16] 40022538: d63f0020 blr x1 while (ctx->pathlen > 0) { 4002253c: f9400660 ldr x0, [x19, #8] 40022540: b5ffff40 cbnz x0, 40022528 ctx->pathlen = saved_pathlen; 40022544: a9005a77 stp x23, x22, [x19] --ctx->recursionlevel; 40022548: b9402660 ldr w0, [x19, #36] 4002254c: a9425bf5 ldp x21, x22, [sp, #32] 40022550: 51000400 sub w0, w0, #0x1 40022554: f9401bf7 ldr x23, [sp, #48] 40022558: b9002660 str w0, [x19, #36] } 4002255c: a94153f3 ldp x19, x20, [sp, #16] 40022560: a8c47bfd ldp x29, x30, [sp], #64 40022564: d65f03c0 ret if (!rtems_filesystem_location_is_null(&ctx->currentloc)) { 40022568: f9402401 ldr x1, [x0, #72] ctx->pathlen = 0; 4002256c: a9007e7f stp xzr, xzr, [x19] return loc->handlers == &rtems_filesystem_null_handlers; 40022570: 9100a014 add x20, x0, #0x28 ctx->tokenlen = 0; 40022574: a9017e7f stp xzr, xzr, [x19, #16] if (!rtems_filesystem_location_is_null(&ctx->currentloc)) { 40022578: d00000c0 adrp x0, 4003c000 <_Scheduler_Table+0x48> 4002257c: 91278000 add x0, x0, #0x9e0 40022580: eb00003f cmp x1, x0 40022584: 54000340 b.eq 400225ec // b.none<== NEVER TAKEN errno = eno; 40022588: 940030ce bl 4002e8c0 <__errno> 4002258c: aa0003e1 mov x1, x0 40022590: 52800b82 mov w2, #0x5c // #92 rtems_filesystem_location_detach(&ctx->currentloc); 40022594: aa1403e0 mov x0, x20 } 40022598: a94153f3 ldp x19, x20, [sp, #16] rtems_filesystem_location_detach(&ctx->currentloc); 4002259c: a9425bf5 ldp x21, x22, [sp, #32] errno = eno; 400225a0: b9000022 str w2, [x1] } 400225a4: a8c47bfd ldp x29, x30, [sp], #64 rtems_filesystem_location_detach(&ctx->currentloc); 400225a8: 1400002e b 40022660 if (!rtems_filesystem_location_is_null(&ctx->currentloc)) { 400225ac: f9402401 ldr x1, [x0, #72] <== NOT EXECUTED ctx->pathlen = 0; 400225b0: a9007e7f stp xzr, xzr, [x19] <== NOT EXECUTED 400225b4: 9100a014 add x20, x0, #0x28 <== NOT EXECUTED ctx->tokenlen = 0; 400225b8: a9017e7f stp xzr, xzr, [x19, #16] <== NOT EXECUTED if (!rtems_filesystem_location_is_null(&ctx->currentloc)) { 400225bc: d00000c0 adrp x0, 4003c000 <_Scheduler_Table+0x48> <== NOT EXECUTED 400225c0: 91278000 add x0, x0, #0x9e0 <== NOT EXECUTED 400225c4: eb00003f cmp x1, x0 <== NOT EXECUTED 400225c8: 54fffca0 b.eq 4002255c // b.none<== NOT EXECUTED errno = eno; 400225cc: 940030bd bl 4002e8c0 <__errno> <== NOT EXECUTED 400225d0: aa0003e1 mov x1, x0 <== NOT EXECUTED 400225d4: 52800042 mov w2, #0x2 // #2 <== NOT EXECUTED rtems_filesystem_location_detach(&ctx->currentloc); 400225d8: aa1403e0 mov x0, x20 <== NOT EXECUTED } 400225dc: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED errno = eno; 400225e0: b9000022 str w2, [x1] <== NOT EXECUTED } 400225e4: a8c47bfd ldp x29, x30, [sp], #64 <== NOT EXECUTED rtems_filesystem_location_detach(&ctx->currentloc); 400225e8: 1400001e b 40022660 <== NOT EXECUTED 400225ec: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED 400225f0: 17ffffdb b 4002255c <== NOT EXECUTED rtems_filesystem_eval_path_restart(ctx, &ctx->rootloc); 400225f4: 91016001 add x1, x0, #0x58 400225f8: 97ffff96 bl 40022450 ++ctx->recursionlevel; 400225fc: b9402661 ldr w1, [x19, #36] 40022600: 17ffffc7 b 4002251c ... =============================================================================== 0000000040024e40 : { 40024e40: a9ba7bfd stp x29, x30, [sp, #-96]! 40024e44: 910003fd mov x29, sp 40024e48: a90153f3 stp x19, x20, [sp, #16] 40024e4c: aa0103f4 mov x20, x1 40024e50: a9025bf5 stp x21, x22, [sp, #32] 40024e54: aa0003f5 mov x21, x0 40024e58: 2a0203f6 mov w22, w2 size_t pathlen = strlen(path); 40024e5c: aa0103e0 mov x0, x1 { 40024e60: a90363f7 stp x23, x24, [sp, #48] 40024e64: aa0303f7 mov x23, x3 40024e68: 2a0403f8 mov w24, w4 40024e6c: a9046bf9 stp x25, x26, [sp, #64] 40024e70: f9002bfb str x27, [sp, #80] size_t pathlen = strlen(path); 40024e74: 94004235 bl 40035748 return c == '/' || c == '\\'; 40024e78: 52800b81 mov w1, #0x5c // #92 40024e7c: aa0003f9 mov x25, x0 40024e80: aa0003f3 mov x19, x0 while (pathlen > 0) { 40024e84: 14000006 b 40024e9c if (rtems_filesystem_is_delimiter(path [i])) { 40024e88: 38656a86 ldrb w6, [x20, x5] 40024e8c: 7100bcdf cmp w6, #0x2f 40024e90: 7a4110c4 ccmp w6, w1, #0x4, ne // ne = any 40024e94: 54000480 b.eq 40024f24 // b.none pathlen = i; 40024e98: aa0503f3 mov x19, x5 size_t i = pathlen - 1; 40024e9c: d1000665 sub x5, x19, #0x1 while (pathlen > 0) { 40024ea0: b5ffff53 cbnz x19, 40024e88 const char *name = NULL; 40024ea4: d280001b mov x27, #0x0 // #0 if (pathlen > 0) { 40024ea8: b5000359 cbnz x25, 40024f10 &rtems_filesystem_root, 40024eac: 9400029d bl 40025920 40024eb0: aa0003fa mov x26, x0 &rtems_filesystem_current 40024eb4: 9400029b bl 40025920 currentloc = rtems_filesystem_eval_path_start_with_root_and_current( 40024eb8: aa0003e5 mov x5, x0 40024ebc: 91002344 add x4, x26, #0x8 40024ec0: 2a1803e3 mov w3, w24 40024ec4: aa1303e2 mov x2, x19 40024ec8: aa1403e1 mov x1, x20 40024ecc: aa1503e0 mov x0, x21 40024ed0: 97ffff7c bl 40024cc0 rtems_filesystem_location_clone(parentloc, currentloc); 40024ed4: aa0003e1 mov x1, x0 40024ed8: aa1703e0 mov x0, x23 40024edc: 94002931 bl 4002f3a0 ctx->pathlen = namelen; 40024ee0: a90066bb stp x27, x25, [x21] rtems_filesystem_eval_path_continue(ctx); 40024ee4: aa1503e0 mov x0, x21 ctx->flags = eval_flags; 40024ee8: b90022b6 str w22, [x21, #32] rtems_filesystem_eval_path_continue(ctx); 40024eec: 97ffff35 bl 40024bc0 return &ctx->currentloc; 40024ef0: 9100a2a0 add x0, x21, #0x28 } 40024ef4: a94153f3 ldp x19, x20, [sp, #16] 40024ef8: a9425bf5 ldp x21, x22, [sp, #32] 40024efc: a94363f7 ldp x23, x24, [sp, #48] 40024f00: a9446bf9 ldp x25, x26, [sp, #64] 40024f04: f9402bfb ldr x27, [sp, #80] 40024f08: a8c67bfd ldp x29, x30, [sp], #96 40024f0c: d65f03c0 ret if (pathlen > 0) { 40024f10: aa1403fb mov x27, x20 parentpathlen = 1; 40024f14: d2800033 mov x19, #0x1 // #1 parentpath = "."; 40024f18: d00000f4 adrp x20, 40042000 40024f1c: 91126294 add x20, x20, #0x498 40024f20: 17ffffe3 b 40024eac const char *name = NULL; 40024f24: d280001b mov x27, #0x0 // #0 if (pathlen > 0) { 40024f28: b4fffc39 cbz x25, 40024eac <== NEVER TAKEN namelen = pathlen - parentpathlen; 40024f2c: cb130339 sub x25, x25, x19 name = path + parentpathlen; 40024f30: 8b13029b add x27, x20, x19 namelen = pathlen - parentpathlen; 40024f34: 17ffffde b 40024eac ... =============================================================================== 0000000040021cf0 : find_arg fa = { .type = type, .mount_h = NULL }; if ( type != NULL ) { 40021cf0: b4000500 cbz x0, 40021d90 <== NEVER TAKEN { 40021cf4: a9bc7bfd stp x29, x30, [sp, #-64]! 40021cf8: 910003fd mov x29, sp 40021cfc: a90153f3 stp x19, x20, [sp, #16] 40021d00: aa0003f3 mov x19, x0 while ( table_entry->type && !stop ) { 40021d04: f00000d4 adrp x20, 4003c000 <_Scheduler_Table+0x48> 40021d08: f940ee80 ldr x0, [x20, #472] 40021d0c: 91076294 add x20, x20, #0x1d8 40021d10: b40000e0 cbz x0, 40021d2c <== NEVER TAKEN 40021d14: d503201f nop if ( strcmp( entry->type, fa->type ) != 0 ) { 40021d18: aa1303e1 mov x1, x19 40021d1c: 940035c2 bl 4002f424 40021d20: 34000300 cbz w0, 40021d80 while ( table_entry->type && !stop ) { 40021d24: f8410e80 ldr x0, [x20, #16]! 40021d28: b5ffff80 cbnz x0, 40021d18 rtems_libio_lock(); 40021d2c: a9025bf5 stp x21, x22, [sp, #32] 40021d30: 940019a4 bl 400283c0 return _Chain_Immutable_head( the_chain )->next; 40021d34: f00006e0 adrp x0, 40100000 <_RTEMS_tasks_Information> 40021d38: 91054016 add x22, x0, #0x150 40021d3c: f940a814 ldr x20, [x0, #336] for ( 40021d40: 910022d6 add x22, x22, #0x8 40021d44: eb16029f cmp x20, x22 40021d48: 540002e0 b.eq 40021da4 // b.none<== ALWAYS TAKEN 40021d4c: d503201f nop if ( strcmp( entry->type, fa->type ) != 0 ) { 40021d50: f9400a80 ldr x0, [x20, #16] <== NOT EXECUTED 40021d54: aa1303e1 mov x1, x19 <== NOT EXECUTED 40021d58: 940035b3 bl 4002f424 <== NOT EXECUTED 40021d5c: 350001e0 cbnz w0, 40021d98 <== NOT EXECUTED fa->mount_h = entry->mount_h; 40021d60: f9400e80 ldr x0, [x20, #24] <== NOT EXECUTED return &the_chain->Tail.Node; 40021d64: f9001fe0 str x0, [sp, #56] rtems_libio_unlock(); 40021d68: 9400199a bl 400283d0 rtems_filesystem_iterate( find_handler, &fa ); } return fa.mount_h; } 40021d6c: a94153f3 ldp x19, x20, [sp, #16] return fa.mount_h; 40021d70: a9425bf5 ldp x21, x22, [sp, #32] 40021d74: f9401fe0 ldr x0, [sp, #56] } 40021d78: a8c47bfd ldp x29, x30, [sp], #64 40021d7c: d65f03c0 ret fa->mount_h = entry->mount_h; 40021d80: f9400680 ldr x0, [x20, #8] } 40021d84: a94153f3 ldp x19, x20, [sp, #16] 40021d88: a8c47bfd ldp x29, x30, [sp], #64 40021d8c: d65f03c0 ret find_arg fa = { 40021d90: d2800000 mov x0, #0x0 // #0 <== NOT EXECUTED } 40021d94: d65f03c0 ret <== NOT EXECUTED return the_node->next; 40021d98: f9400294 ldr x20, [x20] <== NOT EXECUTED for ( 40021d9c: eb16029f cmp x20, x22 <== NOT EXECUTED 40021da0: 54fffd81 b.ne 40021d50 // b.any<== NOT EXECUTED find_arg fa = { 40021da4: d2800000 mov x0, #0x0 // #0 40021da8: 17ffffef b 40021d64 40021dac: 00000000 udf #0 =============================================================================== 0000000040022870 : { 40022870: a9be7bfd stp x29, x30, [sp, #-32]! 40022874: 910003fd mov x29, sp 40022878: a90153f3 stp x19, x20, [sp, #16] if (deferred_released_global_locations != NULL) { 4002287c: f0000713 adrp x19, 40105000 40022880: f944f661 ldr x1, [x19, #2536] { 40022884: aa0003f4 mov x20, x0 if (deferred_released_global_locations != NULL) { 40022888: b4000341 cbz x1, 400228f0 __asm__ volatile ( 4002288c: 9127a273 add x19, x19, #0x9e8 40022890: d53b4222 mrs x2, daif 40022894: d50342df msr daifset, #0x2 current = deferred_released_global_locations; 40022898: f9400260 ldr x0, [x19] int count = 0; 4002289c: 52800001 mov w1, #0x0 // #0 if (current != NULL) { 400228a0: b40000e0 cbz x0, 400228bc <== NEVER TAKEN 400228a4: d503201f nop deferred_released_global_locations = current->deferred_released_next; 400228a8: f9401c01 ldr x1, [x0, #56] 400228ac: f9000261 str x1, [x19] count = current->deferred_released_count; 400228b0: b9404001 ldr w1, [x0, #64] current->deferred_released_next = NULL; 400228b4: f9001c1f str xzr, [x0, #56] current->deferred_released_count = 0; 400228b8: b900401f str wzr, [x0, #64] __asm__ volatile ( 400228bc: 92407c42 and x2, x2, #0xffffffff 400228c0: d51b4222 msr daif, x2 if (current != NULL) { 400228c4: b4000160 cbz x0, 400228f0 <== NEVER TAKEN release_with_count(current, count); 400228c8: 97ffffb6 bl 400227a0 __asm__ volatile ( 400228cc: d53b4222 mrs x2, daif 400228d0: d50342df msr daifset, #0x2 current = deferred_released_global_locations; 400228d4: f9400260 ldr x0, [x19] int count = 0; 400228d8: 52800001 mov w1, #0x0 // #0 if (current != NULL) { 400228dc: b5fffe60 cbnz x0, 400228a8 __asm__ volatile ( 400228e0: 92407c42 and x2, x2, #0xffffffff 400228e4: d51b4222 msr daif, x2 if (current != NULL) { 400228e8: b5ffff00 cbnz x0, 400228c8 <== NEVER TAKEN 400228ec: d503201f nop __asm__ volatile ( 400228f0: d53b4233 mrs x19, daif 400228f4: d50342df msr daifset, #0x2 global_loc = *global_loc_ptr; 400228f8: f9400280 ldr x0, [x20] if (global_loc == NULL || !global_loc->location.mt_entry->mounted) { 400228fc: b4000080 cbz x0, 4002290c 40022900: f9401401 ldr x1, [x0, #40] 40022904: 39414021 ldrb w1, [x1, #80] 40022908: 350000e1 cbnz w1, 40022924 errno = ENXIO; 4002290c: 94002fed bl 4002e8c0 <__errno> 40022910: aa0003e2 mov x2, x0 global_loc = &rtems_filesystem_global_location_null; 40022914: d00006e1 adrp x1, 40100000 <_RTEMS_tasks_Information> 40022918: 9105a020 add x0, x1, #0x168 errno = ENXIO; 4002291c: 528000c1 mov w1, #0x6 // #6 40022920: b9000041 str w1, [x2] ++global_loc->reference_count; 40022924: b9403001 ldr w1, [x0, #48] 40022928: 11000421 add w1, w1, #0x1 4002292c: b9003001 str w1, [x0, #48] __asm__ volatile ( 40022930: 92407e73 and x19, x19, #0xffffffff 40022934: d51b4233 msr daif, x19 } 40022938: a94153f3 ldp x19, x20, [sp, #16] 4002293c: a8c27bfd ldp x29, x30, [sp], #32 40022940: d65f03c0 ret ... =============================================================================== 0000000040022950 : if (!deferred) { 40022950: 72001c3f tst w1, #0xff { 40022954: aa0003e1 mov x1, x0 if (!deferred) { 40022958: 54000260 b.eq 400229a4 // b.none __asm__ volatile ( 4002295c: d53b4220 mrs x0, daif 40022960: d50342df msr daifset, #0x2 if (global_loc->deferred_released_count == 0) { 40022964: b9404022 ldr w2, [x1, #64] 40022968: 340000c2 cbz w2, 40022980 <== ALWAYS TAKEN ++global_loc->deferred_released_count; 4002296c: 11000442 add w2, w2, #0x1 <== NOT EXECUTED 40022970: b9004022 str w2, [x1, #64] <== NOT EXECUTED __asm__ volatile ( 40022974: 92407c00 and x0, x0, #0xffffffff <== NOT EXECUTED 40022978: d51b4220 msr daif, x0 <== NOT EXECUTED } 4002297c: d65f03c0 ret <== NOT EXECUTED rtems_filesystem_global_location_t *head = 40022980: f0000702 adrp x2, 40105000 40022984: f944f444 ldr x4, [x2, #2536] global_loc->deferred_released_count = 1; 40022988: 52800023 mov w3, #0x1 // #1 deferred_released_global_locations = global_loc; 4002298c: f904f441 str x1, [x2, #2536] global_loc->deferred_released_next = head; 40022990: f9001c24 str x4, [x1, #56] global_loc->deferred_released_count = 1; 40022994: b9004023 str w3, [x1, #64] 40022998: 92407c00 and x0, x0, #0xffffffff 4002299c: d51b4220 msr daif, x0 } 400229a0: d65f03c0 ret release_with_count(global_loc, 1); 400229a4: 52800021 mov w1, #0x1 // #1 400229a8: 17ffff7e b 400227a0 400229ac: 00000000 udf #0 =============================================================================== 0000000040021450 : { int rv = 0; const rtems_filesystem_mount_configuration *root_config = &rtems_filesystem_root_configuration; rv = mount( 40021450: f00000c0 adrp x0, 4003c000 <_Scheduler_Table+0x48> 40021454: 9106c004 add x4, x0, #0x1b0 { 40021458: a9bf7bfd stp x29, x30, [sp, #-16]! 4002145c: 910003fd mov x29, sp rv = mount( 40021460: a9408881 ldp x1, x2, [x4, #8] 40021464: b9401883 ldr w3, [x4, #24] 40021468: f940d800 ldr x0, [x0, #432] 4002146c: f9401084 ldr x4, [x4, #32] 40021470: 94000134 bl 40021940 root_config->target, root_config->filesystemtype, root_config->options, root_config->data ); if ( rv != 0 ) 40021474: 35000100 cbnz w0, 40021494 <== NEVER TAKEN * Traditionally RTEMS devices are under "/dev" so install this directory. * * If the mkdir() fails, we can't print anything so just fatal error. */ rv = mkdir( "/dev", S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH ); 40021478: f00000c0 adrp x0, 4003c000 <_Scheduler_Table+0x48> 4002147c: 52803da1 mov w1, #0x1ed // #493 40021480: 91218000 add x0, x0, #0x860 40021484: 940000e3 bl 40021810 if ( rv != 0 ) 40021488: 350000c0 cbnz w0, 400214a0 <== NEVER TAKEN * it will be mounted onto is created. Moreover, if it is going to * use a device, then it is REALLY unfair to attempt this * before device drivers are initialized. So we return via a base * filesystem image and nothing auto-mounted at this point. */ } 4002148c: a8c17bfd ldp x29, x30, [sp], #16 40021490: d65f03c0 ret rtems_fatal_error_occurred( 0xABCD0002 ); 40021494: 52800040 mov w0, #0x2 // #2 <== NOT EXECUTED 40021498: 72b579a0 movk w0, #0xabcd, lsl #16 <== NOT EXECUTED 4002149c: 94000da9 bl 40024b40 <== NOT EXECUTED rtems_fatal_error_occurred( 0xABCD0003 ); 400214a0: 52800060 mov w0, #0x3 // #3 <== NOT EXECUTED 400214a4: 72b579a0 movk w0, #0xabcd, lsl #16 <== NOT EXECUTED 400214a8: 94000da6 bl 40024b40 <== NOT EXECUTED 400214ac: 00000000 udf #0 =============================================================================== 00000000400229b0 : __asm__ volatile ( 400229b0: d53b4222 mrs x2, daif 400229b4: d50342df msr daifset, #0x2 previous = the_node->previous; 400229b8: a9400c04 ldp x4, x3, [x0] do_unmount = rtems_filesystem_is_ready_for_unmount(loc->mt_entry); 400229bc: f9401401 ldr x1, [x0, #40] 400229c0: 39414025 ldrb w5, [x1, #80] next->previous = previous; 400229c4: f9000483 str x3, [x4, #8] previous->next = next; 400229c8: f9000064 str x4, [x3] 400229cc: 34000085 cbz w5, 400229dc __asm__ volatile ( 400229d0: 92407c42 and x2, x2, #0xffffffff 400229d4: d51b4222 msr daif, x2 } 400229d8: d65f03c0 ret && rtems_chain_has_only_one_node( &mt_entry->location_chain ) 400229dc: f9401426 ldr x6, [x1, #40] return _Chain_Immutable_tail( the_chain )->previous; 400229e0: 9100c023 add x3, x1, #0x30 400229e4: f9400465 ldr x5, [x3, #8] 400229e8: 92407c42 and x2, x2, #0xffffffff return _Chain_Immutable_head( the_chain )->next; 400229ec: 9100a024 add x4, x1, #0x28 400229f0: eb0500df cmp x6, x5 400229f4: 540000a1 b.ne 40022a08 // b.any && mt_entry->mt_fs_root->reference_count == 1; 400229f8: f9402425 ldr x5, [x1, #72] 400229fc: b94030a5 ldr w5, [x5, #48] 40022a00: 710004bf cmp w5, #0x1 40022a04: 54000060 b.eq 40022a10 // b.none<== NEVER TAKEN 40022a08: d51b4222 msr daif, x2 40022a0c: d65f03c0 ret head->next = tail; 40022a10: f9001423 str x3, [x1, #40] <== NOT EXECUTED head->previous = NULL; 40022a14: f900049f str xzr, [x4, #8] <== NOT EXECUTED tail->previous = head; 40022a18: f9000464 str x4, [x3, #8] <== NOT EXECUTED 40022a1c: d51b4222 msr daif, x2 <== NOT EXECUTED rtems_filesystem_do_unmount(loc->mt_entry); 40022a20: f9401400 ldr x0, [x0, #40] <== NOT EXECUTED 40022a24: 17ffff43 b 40022730 <== NOT EXECUTED ... =============================================================================== 0000000040022af0 : { 40022af0: a9bd7bfd stp x29, x30, [sp, #-48]! 40022af4: 910003fd mov x29, sp 40022af8: a90153f3 stp x19, x20, [sp, #16] 40022afc: aa0003f4 mov x20, x0 rtems_filesystem_global_location_t *global_loc = malloc(sizeof(*global_loc)); 40022b00: d2800900 mov x0, #0x48 // #72 40022b04: 97fffac7 bl 40021620 if (global_loc != NULL) { 40022b08: b4000360 cbz x0, 40022b74 <== NEVER TAKEN 40022b0c: aa0003f3 mov x19, x0 global_loc->reference_count = 1; 40022b10: 52800020 mov w0, #0x1 // #1 dst->node_access_2 = src->node_access_2; 40022b14: a9410682 ldp x2, x1, [x20, #16] 40022b18: a9010662 stp x2, x1, [x19, #16] dst->mt_entry = src->mt_entry; 40022b1c: a9420682 ldp x2, x1, [x20, #32] 40022b20: a9020662 stp x2, x1, [x19, #32] global_loc->reference_count = 1; 40022b24: b9003260 str w0, [x19, #48] global_loc->deferred_released_next = NULL; 40022b28: f9001e7f str xzr, [x19, #56] global_loc->deferred_released_count = 0; 40022b2c: b900427f str wzr, [x19, #64] __asm__ volatile ( 40022b30: d53b4221 mrs x1, daif 40022b34: d50342df msr daifset, #0x2 40022b38: f9401660 ldr x0, [x19, #40] old_last = tail->previous; 40022b3c: 9100c000 add x0, x0, #0x30 40022b40: f9400402 ldr x2, [x0, #8] the_node->next = tail; 40022b44: f9000260 str x0, [x19] tail->previous = the_node; 40022b48: f9000413 str x19, [x0, #8] old_last->next = the_node; 40022b4c: f9000053 str x19, [x2] the_node->previous = old_last; 40022b50: f9000662 str x2, [x19, #8] __asm__ volatile ( 40022b54: 92407c20 and x0, x1, #0xffffffff 40022b58: d51b4220 msr daif, x0 rtems_filesystem_location_remove_from_mt_entry(loc); 40022b5c: aa1403e0 mov x0, x20 40022b60: 97ffff94 bl 400229b0 } 40022b64: aa1303e0 mov x0, x19 40022b68: a94153f3 ldp x19, x20, [sp, #16] 40022b6c: a8c37bfd ldp x29, x30, [sp], #48 40022b70: d65f03c0 ret rtems_filesystem_location_free(loc); 40022b74: aa1403e0 mov x0, x20 <== NOT EXECUTED 40022b78: 940015d2 bl 400282c0 <== NOT EXECUTED return rtems_filesystem_global_location_obtain( &global_loc ); 40022b7c: 9100a3e0 add x0, sp, #0x28 <== NOT EXECUTED rtems_filesystem_global_location_t *global_loc = NULL; 40022b80: f90017ff str xzr, [sp, #40] <== NOT EXECUTED return rtems_filesystem_global_location_obtain( &global_loc ); 40022b84: 97ffff3b bl 40022870 <== NOT EXECUTED 40022b88: aa0003f3 mov x19, x0 <== NOT EXECUTED errno = ENOMEM; 40022b8c: 94002f4d bl 4002e8c0 <__errno> <== NOT EXECUTED 40022b90: 52800181 mov w1, #0xc // #12 <== NOT EXECUTED 40022b94: b9000001 str w1, [x0] <== NOT EXECUTED return global_loc; 40022b98: 17fffff3 b 40022b64 <== NOT EXECUTED 40022b9c: 00000000 udf #0 =============================================================================== 0000000040021820 : const char *name, size_t namelen, mode_t mode, dev_t dev ) { 40021820: a9bc7bfd stp x29, x30, [sp, #-64]! 40021824: 910003fd mov x29, sp 40021828: a90153f3 stp x19, x20, [sp, #16] 4002182c: 2a0303f4 mov w20, w3 40021830: aa0003f3 mov x19, x0 40021834: a9025bf5 stp x21, x22, [sp, #32] 40021838: aa0103f5 mov x21, x1 4002183c: aa0203f6 mov x22, x2 40021840: f9001bf7 str x23, [sp, #48] 40021844: aa0403f7 mov x23, x4 int rv = 0; mode &= ~rtems_filesystem_umask; 40021848: 9400051a bl 40022cb0 4002184c: b9401005 ldr w5, [x0, #16] 40021850: 0a250283 bic w3, w20, w5 switch (mode & S_IFMT) { 40021854: 12140c65 and w5, w3, #0xf000 40021858: 714010bf cmp w5, #0x4, lsl #12 4002185c: 54000240 b.eq 400218a4 // b.none 40021860: 540001c9 b.ls 40021898 // b.plast 40021864: 514018a5 sub w5, w5, #0x6, lsl #12 40021868: 121278a5 and w5, w5, #0xffffdfff 4002186c: 340001c5 cbz w5, 400218a4 <== ALWAYS TAKEN case S_IFDIR: case S_IFIFO: case S_IFREG: break; default: errno = EINVAL; 40021870: 94003414 bl 4002e8c0 <__errno> 40021874: aa0003e1 mov x1, x0 40021878: 528002c2 mov w2, #0x16 // #22 rv = (*ops->mknod_h)( parentloc, name, namelen, mode, dev ); } return rv; } 4002187c: 12800000 mov w0, #0xffffffff // #-1 40021880: a94153f3 ldp x19, x20, [sp, #16] 40021884: a9425bf5 ldp x21, x22, [sp, #32] 40021888: f9401bf7 ldr x23, [sp, #48] errno = EINVAL; 4002188c: b9000022 str w2, [x1] } 40021890: a8c47bfd ldp x29, x30, [sp], #64 40021894: d65f03c0 ret switch (mode & S_IFMT) { 40021898: 514004a5 sub w5, w5, #0x1, lsl #12 4002189c: 721348bf tst w5, #0xffffe000 400218a0: 54fffe81 b.ne 40021870 // b.any const rtems_filesystem_operations_table *ops = parentloc->mt_entry->ops; 400218a4: f9401665 ldr x5, [x19, #40] rv = (*ops->mknod_h)( parentloc, name, namelen, mode, dev ); 400218a8: aa1703e4 mov x4, x23 400218ac: aa1603e2 mov x2, x22 400218b0: aa1503e1 mov x1, x21 400218b4: aa1303e0 mov x0, x19 400218b8: f9400ca5 ldr x5, [x5, #24] } 400218bc: a94153f3 ldp x19, x20, [sp, #16] 400218c0: a9425bf5 ldp x21, x22, [sp, #32] 400218c4: f9401bf7 ldr x23, [sp, #48] 400218c8: a8c47bfd ldp x29, x30, [sp], #64 rv = (*ops->mknod_h)( parentloc, name, namelen, mode, dev ); 400218cc: f94014a5 ldr x5, [x5, #40] 400218d0: aa0503f0 mov x16, x5 400218d4: d61f0200 br x16 ... =============================================================================== 0000000040021480 : int rtems_filesystem_register( const char *type, rtems_filesystem_fsmount_me_t mount_h ) { 40021480: a9bc7bfd stp x29, x30, [sp, #-64]! 40021484: 910003fd mov x29, sp 40021488: a90153f3 stp x19, x20, [sp, #16] 4002148c: aa0003f4 mov x20, x0 40021490: a9025bf5 stp x21, x22, [sp, #32] 40021494: aa0103f5 mov x21, x1 rtems_chain_control *chain = &filesystem_chain; size_t type_size = strlen(type) + 1; 40021498: 940032c9 bl 4002dfbc 4002149c: 91000416 add x22, x0, #0x1 size_t fsn_size = sizeof( filesystem_node ) + type_size; filesystem_node *fsn = malloc( fsn_size ); 400214a0: 91008400 add x0, x0, #0x21 400214a4: 9400178f bl 400272e0 char *type_storage = (char *) fsn + sizeof( *fsn ); if ( fsn == NULL ) 400214a8: b4000880 cbz x0, 400215b8 rtems_set_errno_and_return_minus_one( ENOMEM ); memcpy(type_storage, type, type_size); 400214ac: 91008003 add x3, x0, #0x20 400214b0: aa0003f3 mov x19, x0 400214b4: aa1603e2 mov x2, x22 400214b8: aa1403e1 mov x1, x20 400214bc: aa0303e0 mov x0, x3 400214c0: 94003157 bl 4002da1c fsn->entry.type = type_storage; fsn->entry.mount_h = mount_h; 400214c4: a9015660 stp x0, x21, [x19, #16] rtems_libio_lock(); 400214c8: 9400177e bl 400272c0 while ( table_entry->type && !stop ) { 400214cc: 900000a0 adrp x0, 40035000 400214d0: 9121a015 add x21, x0, #0x868 400214d4: f9443400 ldr x0, [x0, #2152] 400214d8: b40000c0 cbz x0, 400214f0 <== NEVER TAKEN if ( strcmp( entry->type, fa->type ) != 0 ) { 400214dc: aa1403e1 mov x1, x20 400214e0: 9400323c bl 4002ddd0 400214e4: 34000440 cbz w0, 4002156c <== NEVER TAKEN while ( table_entry->type && !stop ) { 400214e8: f8410ea0 ldr x0, [x21, #16]! 400214ec: b5ffff80 cbnz x0, 400214dc <== NEVER TAKEN rtems_libio_lock(); 400214f0: f9001bf7 str x23, [sp, #48] 400214f4: 94001773 bl 400272c0 return _Chain_Immutable_head( the_chain )->next; 400214f8: f00006e0 adrp x0, 40100000 <_RTEMS_tasks_Information> 400214fc: 91054015 add x21, x0, #0x150 for ( 40021500: 910022b7 add x23, x21, #0x8 40021504: f940a816 ldr x22, [x0, #336] 40021508: eb1702df cmp x22, x23 4002150c: 54000500 b.eq 400215ac // b.none if ( strcmp( entry->type, fa->type ) != 0 ) { 40021510: f9400ac0 ldr x0, [x22, #16] 40021514: aa1403e1 mov x1, x20 40021518: 9400322e bl 4002ddd0 4002151c: 350002c0 cbnz w0, 40021574 fa->mount_h = entry->mount_h; 40021520: f9400ed4 ldr x20, [x22, #24] rtems_libio_unlock(); 40021524: 9400176b bl 400272d0 40021528: f9401bf7 ldr x23, [sp, #48] 4002152c: d503201f nop if ( rtems_filesystem_get_mount_handler( type ) == NULL ) { 40021530: b50002d4 cbnz x20, 40021588 40021534: f00006f5 adrp x21, 40100000 <_RTEMS_tasks_Information> 40021538: 910542b5 add x21, x21, #0x150 old_last = tail->previous; 4002153c: f9400aa0 ldr x0, [x21, #16] the_node->next = tail; 40021540: 910022a1 add x1, x21, #0x8 40021544: f9000261 str x1, [x19] tail->previous = the_node; 40021548: f9000ab3 str x19, [x21, #16] old_last->next = the_node; 4002154c: f9000013 str x19, [x0] the_node->previous = old_last; 40021550: f9000660 str x0, [x19, #8] rtems_libio_unlock(); free( fsn ); rtems_set_errno_and_return_minus_one( EINVAL ); } rtems_libio_unlock(); 40021554: 9400175f bl 400272d0 return 0; 40021558: 52800000 mov w0, #0x0 // #0 } 4002155c: a94153f3 ldp x19, x20, [sp, #16] 40021560: a9425bf5 ldp x21, x22, [sp, #32] 40021564: a8c47bfd ldp x29, x30, [sp], #64 40021568: d65f03c0 ret fa->mount_h = entry->mount_h; 4002156c: f94006b4 ldr x20, [x21, #8] <== NOT EXECUTED if ( !stop ) { 40021570: 17fffff0 b 40021530 <== NOT EXECUTED return the_node->next; 40021574: f94002d6 ldr x22, [x22] for ( 40021578: eb1702df cmp x22, x23 4002157c: 54fffca1 b.ne 40021510 // b.any find_arg fa = { 40021580: d2800014 mov x20, #0x0 // #0 40021584: 17ffffe8 b 40021524 rtems_libio_unlock(); 40021588: 94001752 bl 400272d0 free( fsn ); 4002158c: aa1303e0 mov x0, x19 40021590: 940016cc bl 400270c0 rtems_set_errno_and_return_minus_one( EINVAL ); 40021594: 940030c2 bl 4002d89c <__errno> 40021598: aa0003e1 mov x1, x0 4002159c: 528002c2 mov w2, #0x16 // #22 400215a0: 12800000 mov w0, #0xffffffff // #-1 400215a4: b9000022 str w2, [x1] 400215a8: 17ffffed b 4002155c rtems_libio_unlock(); 400215ac: 94001749 bl 400272d0 return fa.mount_h; 400215b0: f9401bf7 ldr x23, [sp, #48] 400215b4: 17ffffe2 b 4002153c rtems_set_errno_and_return_minus_one( ENOMEM ); 400215b8: 940030b9 bl 4002d89c <__errno> 400215bc: aa0003e1 mov x1, x0 400215c0: 52800182 mov w2, #0xc // #12 400215c4: 12800000 mov w0, #0xffffffff // #-1 400215c8: b9000022 str w2, [x1] 400215cc: 17ffffe4 b 4002155c =============================================================================== 00000000400211d0 : } int rtems_gxx_key_create (__gthread_key_t *key, void (*dtor) (void *)) { 400211d0: a9bd7bfd stp x29, x30, [sp, #-48]! 400211d4: 910003fd mov x29, sp 400211d8: f90013f5 str x21, [sp, #32] 400211dc: aa0003f5 mov x21, x0 int eno; pthread_key_t *pkey; pkey = malloc( sizeof( *pkey ) ); 400211e0: d2800080 mov x0, #0x4 // #4 { 400211e4: a90153f3 stp x19, x20, [sp, #16] 400211e8: aa0103f4 mov x20, x1 pkey = malloc( sizeof( *pkey ) ); 400211ec: 940000a9 bl 40021490 *key = pkey; 400211f0: f90002a0 str x0, [x21] if ( pkey == NULL ) 400211f4: b4000260 cbz x0, 40021240 <== NEVER TAKEN printk( "gxx_wrappers: create key=%x, dtor=%x, pkey=%x\n", key, dtor, pkey ); #endif eno = pthread_key_create(pkey, dtor); 400211f8: aa1403e1 mov x1, x20 400211fc: aa0003f3 mov x19, x0 40021200: 94000d7c bl 400247f0 40021204: 2a0003f4 mov w20, w0 if ( eno != 0 ) { 40021208: 350000c0 cbnz w0, 40021220 <== NEVER TAKEN free( pkey ); *key = NULL; } return eno; } 4002120c: 2a1403e0 mov w0, w20 40021210: a94153f3 ldp x19, x20, [sp, #16] 40021214: f94013f5 ldr x21, [sp, #32] 40021218: a8c37bfd ldp x29, x30, [sp], #48 4002121c: d65f03c0 ret free( pkey ); 40021220: aa1303e0 mov x0, x19 <== NOT EXECUTED 40021224: 94002357 bl 40029f80 <== NOT EXECUTED *key = NULL; 40021228: f90002bf str xzr, [x21] <== NOT EXECUTED } 4002122c: 2a1403e0 mov w0, w20 <== NOT EXECUTED 40021230: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED 40021234: f94013f5 ldr x21, [sp, #32] <== NOT EXECUTED 40021238: a8c37bfd ldp x29, x30, [sp], #48 <== NOT EXECUTED 4002123c: d65f03c0 ret <== NOT EXECUTED return ENOMEM; 40021240: 52800194 mov w20, #0xc // #12 <== NOT EXECUTED 40021244: 17fffff2 b 4002120c <== NOT EXECUTED ... =============================================================================== 00000000400213d0 : void rtems_gxx_recursive_mutex_init(__gthread_recursive_mutex_t *mutex) { 400213d0: a9bf7bfd stp x29, x30, [sp, #-16]! status = rtems_semaphore_create( 400213d4: aa0003e4 mov x4, x0 400213d8: 52800003 mov w3, #0x0 // #0 { 400213dc: 910003fd mov x29, sp status = rtems_semaphore_create( 400213e0: 52886640 mov w0, #0x4332 // #17202 400213e4: 72a8e860 movk w0, #0x4743, lsl #16 400213e8: 52800a82 mov w2, #0x54 // #84 400213ec: 52800021 mov w1, #0x1 // #1 400213f0: 94000e04 bl 40024c00 if ( status != RTEMS_SUCCESSFUL ) { 400213f4: 35000060 cbnz w0, 40021400 <== NEVER TAKEN rtems_gxx_mutex_init(mutex); } 400213f8: a8c17bfd ldp x29, x30, [sp], #16 400213fc: d65f03c0 ret _Internal_error( INTERNAL_ERROR_GXX_MUTEX_INIT_FAILED ); 40021400: 528002c0 mov w0, #0x16 // #22 <== NOT EXECUTED 40021404: 940012df bl 40025f80 <_Internal_error> <== NOT EXECUTED ... =============================================================================== 00000000400216b0 : void *rtems_heap_allocate_aligned_with_boundary( size_t size, uintptr_t alignment, uintptr_t boundary ) { 400216b0: a9bc7bfd stp x29, x30, [sp, #-64]! 400216b4: 910003fd mov x29, sp 400216b8: 90000723 adrp x3, 40105000 400216bc: b94a0863 ldr w3, [x3, #2568] 400216c0: a90153f3 stp x19, x20, [sp, #16] 400216c4: aa0103f3 mov x19, x1 if ( _System_state_Is_up( state ) ) { 400216c8: 7100087f cmp w3, #0x2 { 400216cc: a9025bf5 stp x21, x22, [sp, #32] 400216d0: aa0003f5 mov x21, x0 400216d4: aa0203f6 mov x22, x2 400216d8: f9001bf7 str x23, [sp, #48] Heap_Control *heap = RTEMS_Malloc_Heap; 400216dc: 90000720 adrp x0, 40105000 400216e0: f9448017 ldr x23, [x0, #2304] if ( _System_state_Is_up( state ) ) { 400216e4: 54000260 b.eq 40021730 // b.none } else if ( _System_state_Is_before_multitasking( state ) ) { 400216e8: 7100047f cmp w3, #0x1 400216ec: 540002a0 b.eq 40021740 // b.none boundary ); _RTEMS_Unlock_allocator(); break; case MALLOC_SYSTEM_STATE_NO_PROTECTION: p = _Heap_Allocate_aligned_with_boundary( 400216f0: aa0203e3 mov x3, x2 400216f4: aa1703e0 mov x0, x23 400216f8: aa0103e2 mov x2, x1 400216fc: aa1503e1 mov x1, x21 40021700: 94000d54 bl 40024c50 <_Heap_Allocate_aligned_with_boundary> 40021704: aa0003f4 mov x20, x0 * Do not attempt to allocate memory if not in correct system state. */ return NULL; } if ( p == NULL && alignment == 0 && boundary == 0 ) { 40021708: aa130293 orr x19, x20, x19 4002170c: b5000313 cbnz x19, 4002176c <== ALWAYS TAKEN 40021710: b4000496 cbz x22, 400217a0 <== ALWAYS TAKEN return NULL; 40021714: d2800014 mov x20, #0x0 // #0 */ if ( p != NULL && rtems_malloc_dirty_helper != NULL ) (*rtems_malloc_dirty_helper)( p, size ); return p; } 40021718: aa1403e0 mov x0, x20 4002171c: a94153f3 ldp x19, x20, [sp, #16] 40021720: a9425bf5 ldp x21, x22, [sp, #32] 40021724: f9401bf7 ldr x23, [sp, #48] 40021728: a8c47bfd ldp x29, x30, [sp], #64 4002172c: d65f03c0 ret 40021730: 90000720 adrp x0, 40105000 40021734: 91290000 add x0, x0, #0xa40 40021738: b9401800 ldr w0, [x0, #24] if ( _Thread_Dispatch_is_enabled() ) { 4002173c: 35fffec0 cbnz w0, 40021714 _RTEMS_Lock_allocator(); 40021740: 94000d08 bl 40024b60 <_RTEMS_Lock_allocator> _Malloc_Process_deferred_frees(); 40021744: 94001ac3 bl 40028250 <_Malloc_Process_deferred_frees> p = _Heap_Allocate_aligned_with_boundary( 40021748: aa1303e2 mov x2, x19 4002174c: aa1603e3 mov x3, x22 40021750: aa1503e1 mov x1, x21 40021754: aa1703e0 mov x0, x23 40021758: 94000d3e bl 40024c50 <_Heap_Allocate_aligned_with_boundary> 4002175c: aa0003f4 mov x20, x0 if ( p == NULL && alignment == 0 && boundary == 0 ) { 40021760: aa130293 orr x19, x20, x19 _RTEMS_Unlock_allocator(); 40021764: 94000d03 bl 40024b70 <_RTEMS_Unlock_allocator> if ( p == NULL && alignment == 0 && boundary == 0 ) { 40021768: b4fffd53 cbz x19, 40021710 if ( p != NULL && rtems_malloc_dirty_helper != NULL ) 4002176c: b4fffd54 cbz x20, 40021714 40021770: 90000720 adrp x0, 40105000 40021774: f9447c02 ldr x2, [x0, #2296] 40021778: b4fffd02 cbz x2, 40021718 (*rtems_malloc_dirty_helper)( p, size ); 4002177c: aa1503e1 mov x1, x21 40021780: aa1403e0 mov x0, x20 40021784: d63f0040 blr x2 } 40021788: aa1403e0 mov x0, x20 4002178c: a94153f3 ldp x19, x20, [sp, #16] 40021790: a9425bf5 ldp x21, x22, [sp, #32] 40021794: f9401bf7 ldr x23, [sp, #48] 40021798: a8c47bfd ldp x29, x30, [sp], #64 4002179c: d65f03c0 ret p = (*rtems_malloc_extend_handler)( heap, size ); 400217a0: f00000c0 adrp x0, 4003c000 <_Scheduler_Table+0x48> 400217a4: f9448802 ldr x2, [x0, #2320] 400217a8: aa1503e1 mov x1, x21 400217ac: aa1703e0 mov x0, x23 400217b0: d63f0040 blr x2 400217b4: aa0003f4 mov x20, x0 400217b8: 17ffffed b 4002176c 400217bc: 00000000 udf #0 =============================================================================== 0000000040021820 : void *rtems_heap_extend_via_sbrk( Heap_Control *heap, size_t alloc_size ) { ptrdiff_t sbrk_amount = RTEMS_Malloc_Sbrk_amount; 40021820: d0000702 adrp x2, 40103000 <_Thread_Objects+0x220> 40021824: f9430042 ldr x2, [x2, #1536] ptrdiff_t sbrk_size = (ptrdiff_t) alloc_size; ptrdiff_t misaligned = sbrk_amount != 0 ? sbrk_size % sbrk_amount : 0; 40021828: b5000062 cbnz x2, 40021834 } } } return return_this; } 4002182c: d2800000 mov x0, #0x0 // #0 40021830: d65f03c0 ret { 40021834: a9bd7bfd stp x29, x30, [sp, #-48]! 40021838: 910003fd mov x29, sp 4002183c: f90013f5 str x21, [sp, #32] 40021840: aa0003f5 mov x21, x0 ptrdiff_t misaligned = sbrk_amount != 0 ? sbrk_size % sbrk_amount : 0; 40021844: 9ac20c20 sdiv x0, x1, x2 { 40021848: a90153f3 stp x19, x20, [sp, #16] 4002184c: aa0103f3 mov x19, x1 ptrdiff_t misaligned = sbrk_amount != 0 ? sbrk_size % sbrk_amount : 0; 40021850: 9b028400 msub x0, x0, x2, x1 sbrk_size += sbrk_amount - misaligned; 40021854: cb000054 sub x20, x2, x0 40021858: f100001f cmp x0, #0x0 4002185c: 8b140034 add x20, x1, x20 40021860: 9a811294 csel x20, x20, x1, ne // ne = any if ( sbrk_size > 0 && sbrk_amount > 0 ) { 40021864: f100029f cmp x20, #0x0 40021868: fa40c844 ccmp x2, #0x0, #0x4, gt 4002186c: 540002ad b.le 400218c0 <== NEVER TAKEN void *area_begin = sbrk( sbrk_size ); 40021870: aa1403e0 mov x0, x20 40021874: 97fffd2b bl 40020d20 40021878: aa0003e1 mov x1, x0 if ( area_begin != (void *) -1 ) { 4002187c: b100041f cmn x0, #0x1 40021880: 54000200 b.eq 400218c0 // b.none bool ok = _Protected_heap_Extend( heap, area_begin, sbrk_size ); 40021884: aa1403e2 mov x2, x20 40021888: aa1503e0 mov x0, x21 4002188c: 94000fc9 bl 400257b0 <_Protected_heap_Extend> if ( ok ) { 40021890: 72001c1f tst w0, #0xff 40021894: 54000120 b.eq 400218b8 // b.none RTEMS_INLINE_ROUTINE void *_Protected_heap_Allocate( Heap_Control *heap, uintptr_t size ) { return _Protected_heap_Allocate_aligned_with_boundary( heap, size, 0, 0 ); 40021898: aa1303e1 mov x1, x19 4002189c: aa1503e0 mov x0, x21 } 400218a0: a94153f3 ldp x19, x20, [sp, #16] 400218a4: d2800003 mov x3, #0x0 // #0 400218a8: f94013f5 ldr x21, [sp, #32] 400218ac: d2800002 mov x2, #0x0 // #0 400218b0: a8c37bfd ldp x29, x30, [sp], #48 400218b4: 14000fa7 b 40025750 <_Protected_heap_Allocate_aligned_with_boundary> sbrk( -sbrk_size ); 400218b8: cb1403e0 neg x0, x20 400218bc: 97fffd19 bl 40020d20 } 400218c0: d2800000 mov x0, #0x0 // #0 400218c4: a94153f3 ldp x19, x20, [sp, #16] 400218c8: f94013f5 ldr x21, [sp, #32] 400218cc: a8c37bfd ldp x29, x30, [sp], #48 400218d0: d65f03c0 ret ... =============================================================================== 0000000040024350 : { 40024350: a9bc7bfd stp x29, x30, [sp, #-64]! 40024354: 910003fd mov x29, sp 40024358: a90153f3 stp x19, x20, [sp, #16] if (uses_global_env) { 4002435c: f0001034 adrp x20, 4022b000 40024360: 913de294 add x20, x20, #0xf78 { 40024364: a9025bf5 stp x21, x22, [sp, #32] rtems_user_env_t *old_env = rtems_current_user_env; 40024368: 94000606 bl 40025b80 rtems_status_code sc = RTEMS_SUCCESSFUL; 4002436c: 52800015 mov w21, #0x0 // #0 if (uses_global_env) { 40024370: eb14001f cmp x0, x20 40024374: 540000c0 b.eq 4002438c // b.none } 40024378: 2a1503e0 mov w0, w21 4002437c: a94153f3 ldp x19, x20, [sp, #16] 40024380: a9425bf5 ldp x21, x22, [sp, #32] 40024384: a8c47bfd ldp x29, x30, [sp], #64 40024388: d65f03c0 ret Thread_Life_state life_state = 4002438c: aa0003f3 mov x19, x0 _Thread_Set_life_protection(THREAD_LIFE_PROTECTED); 40024390: 52800020 mov w0, #0x1 // #1 40024394: f9001bf7 str x23, [sp, #48] 40024398: 94002426 bl 4002d430 <_Thread_Set_life_protection> rtems_user_env_t *new_env = calloc(1, sizeof(*new_env)); 4002439c: d2800b01 mov x1, #0x58 // #88 _Thread_Set_life_protection(THREAD_LIFE_PROTECTED); 400243a0: 2a0003f7 mov w23, w0 rtems_user_env_t *new_env = calloc(1, sizeof(*new_env)); 400243a4: d2800020 mov x0, #0x1 // #1 400243a8: 97fffb12 bl 40022ff0 400243ac: aa0003f6 mov x22, x0 if (new_env != NULL) { 400243b0: b4000560 cbz x0, 4002445c *new_env = *old_env; 400243b4: aa1303e1 mov x1, x19 400243b8: d2800b02 mov x2, #0x58 // #88 400243bc: 94006f4c bl 400400ec rtems_filesystem_global_location_obtain(&old_env->root_directory); 400243c0: f0001020 adrp x0, 4022b000 400243c4: 913e0000 add x0, x0, #0xf80 400243c8: 9400045e bl 40025540 400243cc: aa0003e1 mov x1, x0 new_env->root_directory = 400243d0: f90006c1 str x1, [x22, #8] rtems_filesystem_global_location_obtain(&old_env->current_directory); 400243d4: aa1303e0 mov x0, x19 400243d8: 9400045a bl 40025540 return loc->handlers == &rtems_filesystem_null_handlers; 400243dc: f94006c2 ldr x2, [x22, #8] if ( 400243e0: 900001a1 adrp x1, 40058000 <_Console_simple_Handlers+0x78> 400243e4: 91090021 add x1, x1, #0x240 400243e8: f9401042 ldr x2, [x2, #32] new_env->current_directory = 400243ec: f90002c0 str x0, [x22] if ( 400243f0: eb01005f cmp x2, x1 400243f4: 540001e0 b.eq 40024430 // b.none && !rtems_filesystem_global_location_is_null(new_env->current_directory) 400243f8: f9401002 ldr x2, [x0, #32] 400243fc: eb01005f cmp x2, x1 40024400: 54000180 b.eq 40024430 // b.none<== NEVER TAKEN 40024404: f0001040 adrp x0, 4022f000 <_RTEMS_tasks_Objects+0xaf8> executing->user_environment = new_env; 40024408: f947b000 ldr x0, [x0, #3936] 4002440c: f9014416 str x22, [x0, #648] _Thread_Set_life_protection(life_state); 40024410: 2a1703e0 mov w0, w23 40024414: 94002407 bl 4002d430 <_Thread_Set_life_protection> } 40024418: 2a1503e0 mov w0, w21 4002441c: a94153f3 ldp x19, x20, [sp, #16] 40024420: a9425bf5 ldp x21, x22, [sp, #32] _Thread_Set_life_protection(life_state); 40024424: f9401bf7 ldr x23, [sp, #48] } 40024428: a8c47bfd ldp x29, x30, [sp], #64 4002442c: d65f03c0 ret if (!uses_global_env) { 40024430: eb1402df cmp x22, x20 sc = RTEMS_UNSATISFIED; 40024434: 528001b5 mov w21, #0xd // #13 if (!uses_global_env) { 40024438: 54fffec0 b.eq 40024410 // b.none<== NEVER TAKEN rtems_filesystem_global_location_release(env->current_directory, false); 4002443c: 52800001 mov w1, #0x0 // #0 40024440: 94000478 bl 40025620 rtems_filesystem_global_location_release(env->root_directory, false); 40024444: f94006c0 ldr x0, [x22, #8] 40024448: 52800001 mov w1, #0x0 // #0 4002444c: 94000475 bl 40025620 free(env); 40024450: aa1603e0 mov x0, x22 40024454: 97fffba7 bl 400232f0 } 40024458: 17ffffee b 40024410 sc = RTEMS_NO_MEMORY; 4002445c: 52800355 mov w21, #0x1a // #26 40024460: 17ffffec b 40024410 ... =============================================================================== 00000000400248f0 : return (retval); } int rtems_mkdir(const char *path, mode_t mode) { 400248f0: a9b57bfd stp x29, x30, [sp, #-176]! 400248f4: 910003fd mov x29, sp 400248f8: a90153f3 stp x19, x20, [sp, #16] 400248fc: a9025bf5 stp x21, x22, [sp, #32] 40024900: 2a0103f6 mov w22, w1 int success = 0; char *dup_path = strdup(path); 40024904: 940071c5 bl 40041018 if (dup_path != NULL) { 40024908: b4000c00 cbz x0, 40024a88 4002490c: a90363f7 stp x23, x24, [sp, #48] 40024910: aa0003f5 mov x21, x0 if (p[0] == '/') /* Skip leading '/'. */ 40024914: aa0003f3 mov x19, x0 40024918: 39400002 ldrb w2, [x0] 4002491c: 7100bc5f cmp w2, #0x2f 40024920: 54000061 b.ne 4002492c // b.any if (p[0] == '\0') 40024924: 39400402 ldrb w2, [x0, #1] ++p; 40024928: 91000413 add x19, x0, #0x1 if (p[0] == '\0') 4002492c: 91000673 add x19, x19, #0x1 *p = '/'; 40024930: 52800014 mov w20, #0x0 // #0 40024934: 52800020 mov w0, #0x1 // #1 40024938: 528005f7 mov w23, #0x2f // #47 if (p[0] == '\0') 4002493c: 340001e2 cbz w2, 40024978 <== NEVER TAKEN else if (p[0] != '/') 40024940: 7100bc5f cmp w2, #0x2f 40024944: 54000161 b.ne 40024970 // b.any *p = '\0'; 40024948: 381ff27f sturb wzr, [x19, #-1] if (!last && p[1] == '\0') 4002494c: 39400278 ldrb w24, [x19] if (first) { 40024950: 35000900 cbnz w0, 40024a70 if (last) 40024954: 340001f8 cbz w24, 40024990 <== NEVER TAKEN if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) { 40024958: aa1503e0 mov x0, x21 4002495c: 52803fe1 mov w1, #0x1ff // #511 40024960: 97fffb88 bl 40023780 40024964: 37f805a0 tbnz w0, #31, 40024a18 *p = '/'; 40024968: 52800000 mov w0, #0x0 // #0 4002496c: 381ff277 sturb w23, [x19, #-1] if (p[0] == '\0') 40024970: 38401662 ldrb w2, [x19], #1 40024974: 35fffe62 cbnz w2, 40024940 if (first) { 40024978: 340000c0 cbz w0, 40024990 oumask = umask(0); 4002497c: 52800000 mov w0, #0x0 // #0 40024980: 940003bc bl 40025870 40024984: 2a0003f4 mov w20, w0 (void)umask(numask); 40024988: 12187400 and w0, w0, #0xffffff3f 4002498c: 940003b9 bl 40025870 (void)umask(oumask); 40024990: 2a1403e0 mov w0, w20 40024994: 940003b7 bl 40025870 if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) { 40024998: 2a1603e1 mov w1, w22 4002499c: aa1503e0 mov x0, x21 400249a0: 97fffb78 bl 40023780 400249a4: 37f80140 tbnz w0, #31, 400249cc 400249a8: 52800013 mov w19, #0x0 // #0 success = build(dup_path, mode); free(dup_path); 400249ac: aa1503e0 mov x0, x21 400249b0: 97fffa50 bl 400232f0 } return success != 0 ? 0 : -1; 400249b4: a94363f7 ldp x23, x24, [sp, #48] } 400249b8: 2a1303e0 mov w0, w19 400249bc: a94153f3 ldp x19, x20, [sp, #16] 400249c0: a9425bf5 ldp x21, x22, [sp, #32] 400249c4: a8cb7bfd ldp x29, x30, [sp], #176 400249c8: d65f03c0 ret if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) { 400249cc: 52800038 mov w24, #0x1 // #1 if (errno == EEXIST || errno == EISDIR) { 400249d0: 940063c0 bl 4003d8d0 <__errno> 400249d4: b9400000 ldr w0, [x0] 400249d8: 7100441f cmp w0, #0x11 400249dc: 540000a0 b.eq 400249f0 // b.none 400249e0: 940063bc bl 4003d8d0 <__errno> 400249e4: b9400000 ldr w0, [x0] 400249e8: 7100541f cmp w0, #0x15 400249ec: 540001a1 b.ne 40024a20 // b.any <== ALWAYS TAKEN if (stat(path, &sb) < 0) { 400249f0: 910123e1 add x1, sp, #0x48 400249f4: aa1503e0 mov x0, x21 400249f8: 94000036 bl 40024ad0 400249fc: 37f80120 tbnz w0, #31, 40024a20 <== NEVER TAKEN } else if (!S_ISDIR(sb.st_mode)) { 40024a00: b9405be0 ldr w0, [sp, #88] 40024a04: 12140c00 and w0, w0, #0xf000 40024a08: 7140101f cmp w0, #0x4, lsl #12 40024a0c: 54000141 b.ne 40024a34 // b.any if (last) 40024a10: 35fffcd8 cbnz w24, 400249a8 40024a14: 17ffffd5 b 40024968 if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) { 40024a18: 52800018 mov w24, #0x0 // #0 40024a1c: 17ffffed b 400249d0 if (!first && !last) 40024a20: 350001f8 cbnz w24, 40024a5c <== ALWAYS TAKEN (void)umask(oumask); 40024a24: 2a1403e0 mov w0, w20 40024a28: 12800013 mov w19, #0xffffffff // #-1 40024a2c: 94000391 bl 40025870 40024a30: 17ffffdf b 400249ac if (last) 40024a34: 340000d8 cbz w24, 40024a4c errno = EEXIST; 40024a38: 940063a6 bl 4003d8d0 <__errno> 40024a3c: 12800013 mov w19, #0xffffffff // #-1 40024a40: 52800221 mov w1, #0x11 // #17 40024a44: b9000001 str w1, [x0] 40024a48: 17ffffd9 b 400249ac errno = ENOTDIR; 40024a4c: 940063a1 bl 4003d8d0 <__errno> 40024a50: 52800281 mov w1, #0x14 // #20 40024a54: b9000001 str w1, [x0] if (!first && !last) 40024a58: 17fffff3 b 40024a24 free(dup_path); 40024a5c: aa1503e0 mov x0, x21 return success != 0 ? 0 : -1; 40024a60: 12800013 mov w19, #0xffffffff // #-1 free(dup_path); 40024a64: 97fffa23 bl 400232f0 return success != 0 ? 0 : -1; 40024a68: a94363f7 ldp x23, x24, [sp, #48] 40024a6c: 17ffffd3 b 400249b8 oumask = umask(0); 40024a70: 52800000 mov w0, #0x0 // #0 40024a74: 9400037f bl 40025870 40024a78: 2a0003f4 mov w20, w0 (void)umask(numask); 40024a7c: 12187400 and w0, w0, #0xffffff3f 40024a80: 9400037c bl 40025870 first = 0; 40024a84: 17ffffb4 b 40024954 return success != 0 ? 0 : -1; 40024a88: 12800013 mov w19, #0xffffffff // #-1 40024a8c: 17ffffcb b 400249b8 =============================================================================== 000000004002c520 : int rtems_printf( const rtems_printer *printer, const char *format, ... ) { 4002c520: a9b07bfd stp x29, x30, [sp, #-256]! 4002c524: 910003fd mov x29, sp 4002c528: 3d8017e0 str q0, [sp, #80] 4002c52c: 3d801be1 str q1, [sp, #96] 4002c530: 3d801fe2 str q2, [sp, #112] 4002c534: 3d8023e3 str q3, [sp, #128] 4002c538: 3d8027e4 str q4, [sp, #144] 4002c53c: 3d802be5 str q5, [sp, #160] 4002c540: 3d802fe6 str q6, [sp, #176] 4002c544: 3d8033e7 str q7, [sp, #192] 4002c548: a90d0fe2 stp x2, x3, [sp, #208] 4002c54c: a90e17e4 stp x4, x5, [sp, #224] 4002c550: a90f1fe6 stp x6, x7, [sp, #240] 4002c554: b4000260 cbz x0, 4002c5a0 4002c558: f9400403 ldr x3, [x0, #8] 4002c55c: b4000223 cbz x3, 4002c5a0 <== NEVER TAKEN int len = 0; if ( rtems_print_printer_valid( printer ) ) { va_list ap; va_start( ap, format ); 4002c560: 910403e2 add x2, sp, #0x100 4002c564: a9030be2 stp x2, x2, [sp, #48] 4002c568: 910343e6 add x6, sp, #0xd0 4002c56c: 128005e5 mov w5, #0xffffffd0 // #-48 4002c570: 12800fe4 mov w4, #0xffffff80 // #-128 4002c574: f90023e6 str x6, [sp, #64] len = printer->printer( printer->context, format, ap ); 4002c578: 910043e2 add x2, sp, #0x10 va_start( ap, format ); 4002c57c: 290913e5 stp w5, w4, [sp, #72] len = printer->printer( printer->context, format, ap ); 4002c580: a94317e4 ldp x4, x5, [sp, #48] 4002c584: f9400000 ldr x0, [x0] 4002c588: a90117e4 stp x4, x5, [sp, #16] 4002c58c: a94417e4 ldp x4, x5, [sp, #64] 4002c590: a90217e4 stp x4, x5, [sp, #32] 4002c594: d63f0060 blr x3 va_end( ap ); } return len; } 4002c598: a8d07bfd ldp x29, x30, [sp], #256 4002c59c: d65f03c0 ret int len = 0; 4002c5a0: 52800000 mov w0, #0x0 // #0 } 4002c5a4: a8d07bfd ldp x29, x30, [sp], #256 4002c5a8: d65f03c0 ret 4002c5ac: 00000000 udf #0 =============================================================================== 0000000040024530 : { 40024530: a9bd7bfd stp x29, x30, [sp, #-48]! 40024534: 910003fd mov x29, sp 40024538: a90153f3 stp x19, x20, [sp, #16] 4002453c: aa0003f4 mov x20, x0 _Mutex_Acquire( mutex ); 40024540: 900006f3 adrp x19, 40100000 <_IO_Driver_address_table> 40024544: 910b6273 add x19, x19, #0x2d8 struct rtems_termios_tty *tty = args->iop->data1; 40024548: f9400281 ldr x1, [x20] { 4002454c: f90013f5 str x21, [sp, #32] 40024550: aa1303e0 mov x0, x19 struct rtems_termios_tty *tty = args->iop->data1; 40024554: f9402435 ldr x21, [x1, #72] 40024558: 940011b2 bl 40028c20 <_Mutex_Acquire> if (tty->refcount == 1) { 4002455c: b94012a2 ldr w2, [x21, #16] 40024560: 7100045f cmp w2, #0x1 40024564: 54000160 b.eq 40024590 // b.none <== ALWAYS TAKEN if (--tty->refcount == 0) { 40024568: 51000442 sub w2, w2, #0x1 <== NOT EXECUTED 4002456c: b90012a2 str w2, [x21, #16] <== NOT EXECUTED 40024570: 340001c2 cbz w2, 400245a8 <== NOT EXECUTED _Mutex_Release( mutex ); 40024574: aa1303e0 mov x0, x19 <== NOT EXECUTED 40024578: 940011c6 bl 40028c90 <_Mutex_Release> <== NOT EXECUTED } 4002457c: 52800000 mov w0, #0x0 // #0 <== NOT EXECUTED 40024580: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED 40024584: f94013f5 ldr x21, [sp, #32] <== NOT EXECUTED 40024588: a8c37bfd ldp x29, x30, [sp], #48 <== NOT EXECUTED 4002458c: d65f03c0 ret <== NOT EXECUTED rtems_termios_ttyTail = tty->back; 40024590: a94002a1 ldp x1, x0, [x21] if (tty->forw == NULL) { 40024594: b4000261 cbz x1, 400245e0 <== ALWAYS TAKEN tty->forw->back = tty->back; 40024598: f9000420 str x0, [x1, #8] <== NOT EXECUTED if (tty->back == NULL) { 4002459c: b40001c0 cbz x0, 400245d4 <== NOT EXECUTED tty->back->forw = tty->forw; 400245a0: f9000001 str x1, [x0] <== NOT EXECUTED if (--tty->refcount == 0) { 400245a4: b90012bf str wzr, [x21, #16] rtems_termios_destroy_tty (tty, arg, true); 400245a8: aa1403e1 mov x1, x20 400245ac: 52800022 mov w2, #0x1 // #1 400245b0: aa1503e0 mov x0, x21 400245b4: 97fff987 bl 40022bd0 400245b8: aa1303e0 mov x0, x19 400245bc: 940011b5 bl 40028c90 <_Mutex_Release> } 400245c0: 52800000 mov w0, #0x0 // #0 400245c4: a94153f3 ldp x19, x20, [sp, #16] 400245c8: f94013f5 ldr x21, [sp, #32] 400245cc: a8c37bfd ldp x29, x30, [sp], #48 400245d0: d65f03c0 ret rtems_termios_ttyHead = tty->forw; 400245d4: f00006e0 adrp x0, 40103000 <_Thread_Objects+0x4a8> <== NOT EXECUTED 400245d8: f9054801 str x1, [x0, #2704] <== NOT EXECUTED rtems_termios_ttyHead->back = NULL; 400245dc: 17fffff2 b 400245a4 <== NOT EXECUTED rtems_termios_ttyTail = tty->back; 400245e0: f00006e1 adrp x1, 40103000 <_Thread_Objects+0x4a8> 400245e4: f9054c20 str x0, [x1, #2712] if ( rtems_termios_ttyTail != NULL ) { 400245e8: b40000a0 cbz x0, 400245fc <== ALWAYS TAKEN rtems_termios_ttyTail->forw = NULL; 400245ec: f900001f str xzr, [x0] <== NOT EXECUTED tty->back->forw = tty->forw; 400245f0: f94002a1 ldr x1, [x21] <== NOT EXECUTED 400245f4: f9000001 str x1, [x0] <== NOT EXECUTED 400245f8: 17ffffeb b 400245a4 <== NOT EXECUTED rtems_termios_ttyHead = tty->forw; 400245fc: f00006e0 adrp x0, 40103000 <_Thread_Objects+0x4a8> 40024600: f905481f str xzr, [x0, #2704] if ( rtems_termios_ttyHead != NULL ) { 40024604: 17ffffe8 b 400245a4 ... =============================================================================== 0000000040025180 : { 40025180: a9bf7bfd stp x29, x30, [sp, #-16]! 40025184: 910003fd mov x29, sp tty->t_dqlen += len; 40025188: b9413803 ldr w3, [x0, #312] if (tty->handler.mode == TERMIOS_TASK_DRIVEN) { 4002518c: b941e004 ldr w4, [x0, #480] tty->t_dqlen += len; 40025190: 0b010063 add w3, w3, w1 40025194: b9013803 str w3, [x0, #312] if (tty->handler.mode == TERMIOS_TASK_DRIVEN) { 40025198: 7100089f cmp w4, #0x2 4002519c: 540001a0 b.eq 400251d0 // b.none if (tty->t_line == PPPDISC ) { 400251a0: b9420c01 ldr w1, [x0, #524] 400251a4: 7100143f cmp w1, #0x5 400251a8: 54000060 b.eq 400251b4 // b.none } 400251ac: a8c17bfd ldp x29, x30, [sp], #16 return rtems_termios_refill_transmitter(tty); 400251b0: 17fff7e8 b 40023150 if (rtems_termios_linesw[tty->t_line].l_start != NULL) { 400251b4: d00006e1 adrp x1, 40103000 <_Thread_Objects+0x4a8> 400251b8: f944fc21 ldr x1, [x1, #2552] 400251bc: b4000041 cbz x1, 400251c4 <== NEVER TAKEN rtems_termios_linesw[tty->t_line].l_start(tty); 400251c0: d63f0020 blr x1 } 400251c4: 52800000 mov w0, #0x0 // #0 400251c8: a8c17bfd ldp x29, x30, [sp], #16 400251cc: d65f03c0 ret sc = rtems_event_send(tty->txTaskId, TERMIOS_TX_START_EVENT); 400251d0: b9420800 ldr w0, [x0, #520] 400251d4: 2a0403e1 mov w1, w4 400251d8: 94000972 bl 400277a0 if (sc != RTEMS_SUCCESSFUL) 400251dc: 34ffff40 cbz w0, 400251c4 <== ALWAYS TAKEN rtems_fatal_error_occurred (sc); 400251e0: 94000bc4 bl 400280f0 <== NOT EXECUTED ... =============================================================================== 000000004002f660 : { 4002f660: a9b87bfd stp x29, x30, [sp, #-128]! 4002f664: 910003fd mov x29, sp 4002f668: a90153f3 stp x19, x20, [sp, #16] 4002f66c: aa0003f3 mov x19, x0 if (rtems_termios_linesw[tty->t_line].l_rint != NULL) { 4002f670: b9820c00 ldrsw x0, [x0, #524] { 4002f674: a9025bf5 stp x21, x22, [sp, #32] if (rtems_termios_linesw[tty->t_line].l_rint != NULL) { 4002f678: 90000716 adrp x22, 4010f000 4002f67c: 913402d6 add x22, x22, #0xd00 4002f680: 8b001ac0 add x0, x22, x0, lsl #6 { 4002f684: a90363f7 stp x23, x24, [sp, #48] 4002f688: aa0103f4 mov x20, x1 if (rtems_termios_linesw[tty->t_line].l_rint != NULL) { 4002f68c: f9401003 ldr x3, [x0, #32] 4002f690: b4000383 cbz x3, 4002f700 while (len--) { 4002f694: 34000162 cbz w2, 4002f6c0 <== NEVER TAKEN 4002f698: 8b224035 add x21, x1, w2, uxtw 4002f69c: 14000004 b 4002f6ac rtems_termios_linesw[tty->t_line].l_rint(c,tty); 4002f6a0: b9820e60 ldrsw x0, [x19, #524] 4002f6a4: 8b001ac0 add x0, x22, x0, lsl #6 4002f6a8: f9401003 ldr x3, [x0, #32] 4002f6ac: aa1303e1 mov x1, x19 4002f6b0: 38401680 ldrb w0, [x20], #1 4002f6b4: d63f0060 blr x3 while (len--) { 4002f6b8: eb15029f cmp x20, x21 4002f6bc: 54ffff21 b.ne 4002f6a0 // b.any if (tty->tty_rcv.sw_pfn != NULL && !tty->tty_rcvwakeup) { 4002f6c0: f9411662 ldr x2, [x19, #552] return 0; 4002f6c4: 52800017 mov w23, #0x0 // #0 if (tty->tty_rcv.sw_pfn != NULL && !tty->tty_rcvwakeup) { 4002f6c8: b4000102 cbz x2, 4002f6e8 4002f6cc: 3948e260 ldrb w0, [x19, #568] 4002f6d0: 350000c0 cbnz w0, 4002f6e8 <== NEVER TAKEN (*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg); 4002f6d4: f9411a61 ldr x1, [x19, #560] tty->tty_rcvwakeup = true; 4002f6d8: 52800020 mov w0, #0x1 // #1 4002f6dc: 3908e260 strb w0, [x19, #568] (*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg); 4002f6e0: 9101e260 add x0, x19, #0x78 4002f6e4: d63f0040 blr x2 } 4002f6e8: 2a1703e0 mov w0, w23 4002f6ec: a94153f3 ldp x19, x20, [sp, #16] 4002f6f0: a9425bf5 ldp x21, x22, [sp, #32] 4002f6f4: a94363f7 ldp x23, x24, [sp, #48] 4002f6f8: a8c87bfd ldp x29, x30, [sp], #128 4002f6fc: d65f03c0 ret int dropped = 0; 4002f700: 52800017 mov w23, #0x0 // #0 while (len--) { 4002f704: 34000ac2 cbz w2, 4002f85c <== NEVER TAKEN 4002f708: a9046bf9 stp x25, x26, [sp, #64] 4002f70c: 8b224035 add x21, x1, w2, uxtw (*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg); 4002f710: 9101e278 add x24, x19, #0x78 rtems_termios_device_context *ctx = tty->device_context; 4002f714: f941267a ldr x26, [x19, #584] bool flow_rcv = false; /* true, if flow control char received */ 4002f718: 52800016 mov w22, #0x0 // #0 int dropped = 0; 4002f71c: 52800017 mov w23, #0x0 // #0 4002f720: a90573fb stp x27, x28, [sp, #80] 4002f724: d503201f nop if (tty->flow_ctrl & FL_MDXON) { 4002f728: b941fa61 ldr w1, [x19, #504] c = *buf++; 4002f72c: 38401680 ldrb w0, [x20], #1 if (tty->flow_ctrl & FL_MDXON) { 4002f730: 364800e1 tbz w1, #9, 4002f74c if (c == tty->termios.c_cc[VSTOP]) { 4002f734: 39425661 ldrb w1, [x19, #149] if (c == tty->termios.c_cc[VSTART]) { 4002f738: 39425262 ldrb w2, [x19, #148] if (c == tty->termios.c_cc[VSTOP]) { 4002f73c: 6b00003f cmp w1, w0 4002f740: 54000e80 b.eq 4002f910 // b.none else if (c == tty->termios.c_cc[VSTART]) { 4002f744: 6b02001f cmp w0, w2 4002f748: 54000a00 b.eq 4002f888 // b.none<== NEVER TAKEN if (flow_rcv) { 4002f74c: 35000a76 cbnz w22, 4002f898 <== NEVER TAKEN if (c == '\r' && (tty->termios.c_iflag & IGNCR) != 0) { 4002f750: 7100341f cmp w0, #0xd 4002f754: 54000ea0 b.eq 4002f928 // b.none c = iprocEarly (c, tty); 4002f758: aa1303e1 mov x1, x19 4002f75c: 97fff6cd bl 4002d290 ( *context->lock_acquire )( context, lock_context ); 4002f760: f9401342 ldr x2, [x26, #32] 4002f764: 12001c1c and w28, w0, #0xff 4002f768: 9101e3e1 add x1, sp, #0x78 4002f76c: aa1a03e0 mov x0, x26 4002f770: 2a1c03f9 mov w25, w28 4002f774: d63f0040 blr x2 head = tty->rawInBuf.Head; 4002f778: b940b265 ldr w5, [x19, #176] oldTail = tty->rawInBuf.Tail; 4002f77c: b940b661 ldr w1, [x19, #180] newTail = (oldTail + 1) % tty->rawInBuf.Size; 4002f780: b940ba62 ldr w2, [x19, #184] 4002f784: 11000421 add w1, w1, #0x1 if ((tty->flow_ctrl & FL_IREQXOF) != 0 && (((newTail - head) % 4002f788: b941fa63 ldr w3, [x19, #504] newTail = (oldTail + 1) % tty->rawInBuf.Size; 4002f78c: 1ac2083b udiv w27, w1, w2 4002f790: 1b02877b msub w27, w27, w2, w1 if ((tty->flow_ctrl & FL_IREQXOF) != 0 && (((newTail - head) % 4002f794: 360003e3 tbz w3, #0, 4002f810 <== ALWAYS TAKEN tty->rawInBuf.Size) > tty->highwater)) { 4002f798: b940ba62 ldr w2, [x19, #184] <== NOT EXECUTED if ((tty->flow_ctrl & FL_IREQXOF) != 0 && (((newTail - head) % 4002f79c: 4b050361 sub w1, w27, w5 <== NOT EXECUTED 4002f7a0: b9420263 ldr w3, [x19, #512] <== NOT EXECUTED 4002f7a4: 1ac20820 udiv w0, w1, w2 <== NOT EXECUTED 4002f7a8: 1b028401 msub w1, w0, w2, w1 <== NOT EXECUTED 4002f7ac: 6b03003f cmp w1, w3 <== NOT EXECUTED 4002f7b0: 54000309 b.ls 4002f810 // b.plast<== NOT EXECUTED tty->flow_ctrl |= FL_IREQXOF; 4002f7b4: b941fa61 ldr w1, [x19, #504] <== NOT EXECUTED if ((tty->flow_ctrl & (FL_MDXOF | FL_ISNTXOF)) 4002f7b8: 52808042 mov w2, #0x402 // #1026 <== NOT EXECUTED tty->flow_ctrl |= FL_IREQXOF; 4002f7bc: 32000021 orr w1, w1, #0x1 <== NOT EXECUTED 4002f7c0: b901fa61 str w1, [x19, #504] <== NOT EXECUTED if ((tty->flow_ctrl & (FL_MDXOF | FL_ISNTXOF)) 4002f7c4: b941fa60 ldr w0, [x19, #504] <== NOT EXECUTED 4002f7c8: 0a020000 and w0, w0, w2 <== NOT EXECUTED 4002f7cc: 7110001f cmp w0, #0x400 <== NOT EXECUTED if ((tty->flow_ctrl & FL_OSTOP) || 4002f7d0: b941fa60 ldr w0, [x19, #504] <== NOT EXECUTED if ((tty->flow_ctrl & (FL_MDXOF | FL_ISNTXOF)) 4002f7d4: 54000e00 b.eq 4002f994 // b.none<== NOT EXECUTED } else if ((tty->flow_ctrl & (FL_MDRTS | FL_IRTSOFF)) == (FL_MDRTS) ) { 4002f7d8: 52802081 mov w1, #0x104 // #260 <== NOT EXECUTED 4002f7dc: 0a010000 and w0, w0, w1 <== NOT EXECUTED 4002f7e0: 7104001f cmp w0, #0x100 <== NOT EXECUTED 4002f7e4: 54000161 b.ne 4002f810 // b.any<== NOT EXECUTED tty->flow_ctrl |= FL_IRTSOFF; 4002f7e8: b941fa60 ldr w0, [x19, #504] <== NOT EXECUTED if (tty->flow.stop_remote_tx != NULL) { 4002f7ec: f940f661 ldr x1, [x19, #488] <== NOT EXECUTED tty->flow_ctrl |= FL_IRTSOFF; 4002f7f0: 321e0000 orr w0, w0, #0x4 <== NOT EXECUTED 4002f7f4: b901fa60 str w0, [x19, #504] <== NOT EXECUTED if (tty->flow.stop_remote_tx != NULL) { 4002f7f8: b40000c1 cbz x1, 4002f810 <== NOT EXECUTED tty->flow.stop_remote_tx(ctx); 4002f7fc: aa1a03e0 mov x0, x26 <== NOT EXECUTED 4002f800: b9006fe5 str w5, [sp, #108] <== NOT EXECUTED 4002f804: d63f0020 blr x1 <== NOT EXECUTED 4002f808: b9406fe5 ldr w5, [sp, #108] <== NOT EXECUTED 4002f80c: d503201f nop <== NOT EXECUTED if (newTail != head) { 4002f810: 6b1b00bf cmp w5, w27 4002f814: 54000900 b.eq 4002f934 // b.none tty->rawInBuf.theBuf[newTail] = c; 4002f818: f9405660 ldr x0, [x19, #168] 4002f81c: 383b4819 strb w25, [x0, w27, uxtw] tty->rawInBuf.Tail = newTail; 4002f820: b900b67b str w27, [x19, #180] if (tty->tty_rcv.sw_pfn != NULL && !tty->tty_rcvwakeup) { 4002f824: f9411660 ldr x0, [x19, #552] 4002f828: b4000a60 cbz x0, 4002f974 4002f82c: 3948e260 ldrb w0, [x19, #568] ( *context->lock_release )( context, lock_context ); 4002f830: f9401742 ldr x2, [x26, #40] 4002f834: 34000c80 cbz w0, 4002f9c4 4002f838: 9101e3e1 add x1, sp, #0x78 4002f83c: aa1a03e0 mov x0, x26 4002f840: d63f0040 blr x2 while (len--) { 4002f844: eb1402bf cmp x21, x20 4002f848: 54fff701 b.ne 4002f728 // b.any<== NEVER TAKEN 4002f84c: d503201f nop tty->rawInBufDropped += dropped; 4002f850: a9446bf9 ldp x25, x26, [sp, #64] 4002f854: 2a1703e2 mov w2, w23 4002f858: a94573fb ldp x27, x28, [sp, #80] _Semaphore_Post_binary( &binary_semaphore->Semaphore ); 4002f85c: 91030260 add x0, x19, #0xc0 4002f860: b940f661 ldr w1, [x19, #244] 4002f864: 0b020021 add w1, w1, w2 4002f868: b900f661 str w1, [x19, #244] 4002f86c: 94000259 bl 400301d0 <_Semaphore_Post_binary> } 4002f870: 2a1703e0 mov w0, w23 4002f874: a94153f3 ldp x19, x20, [sp, #16] 4002f878: a9425bf5 ldp x21, x22, [sp, #32] 4002f87c: a94363f7 ldp x23, x24, [sp, #48] 4002f880: a8c87bfd ldp x29, x30, [sp], #128 4002f884: d65f03c0 ret tty->flow_ctrl &= ~FL_ORCVXOF; 4002f888: b941fa60 ldr w0, [x19, #504] <== NOT EXECUTED 4002f88c: 121b7800 and w0, w0, #0xffffffef <== NOT EXECUTED 4002f890: b901fa60 str w0, [x19, #504] <== NOT EXECUTED if (flow_rcv) { 4002f894: d503201f nop <== NOT EXECUTED if ((tty->flow_ctrl & (FL_ORCVXOF | FL_OSTOP)) == FL_OSTOP) { 4002f898: b941fa60 ldr w0, [x19, #504] 4002f89c: 52800036 mov w22, #0x1 // #1 4002f8a0: 121c0400 and w0, w0, #0x30 4002f8a4: 7100801f cmp w0, #0x20 4002f8a8: 54000080 b.eq 4002f8b8 // b.none<== NEVER TAKEN while (len--) { 4002f8ac: eb1402bf cmp x21, x20 4002f8b0: 54fff3c1 b.ne 4002f728 // b.any<== NEVER TAKEN 4002f8b4: 17ffffe7 b 4002f850 ( *context->lock_acquire )( context, lock_context ); 4002f8b8: f9401342 ldr x2, [x26, #32] <== NOT EXECUTED 4002f8bc: 9101e3e1 add x1, sp, #0x78 <== NOT EXECUTED 4002f8c0: aa1a03e0 mov x0, x26 <== NOT EXECUTED 4002f8c4: d63f0040 blr x2 <== NOT EXECUTED tty->flow_ctrl &= ~FL_OSTOP; 4002f8c8: b941fa60 ldr w0, [x19, #504] <== NOT EXECUTED if (tty->rawOutBufState != rob_idle) { 4002f8cc: b9413e61 ldr w1, [x19, #316] <== NOT EXECUTED tty->flow_ctrl &= ~FL_OSTOP; 4002f8d0: 121a7800 and w0, w0, #0xffffffdf <== NOT EXECUTED 4002f8d4: b901fa60 str w0, [x19, #504] <== NOT EXECUTED if (tty->rawOutBufState != rob_idle) { 4002f8d8: 34000101 cbz w1, 4002f8f8 <== NOT EXECUTED ctx, &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail], 1); 4002f8dc: b9410664 ldr w4, [x19, #260] <== NOT EXECUTED (*tty->handler.write)( 4002f8e0: aa1a03e0 mov x0, x26 <== NOT EXECUTED ctx, &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail], 1); 4002f8e4: f9407e61 ldr x1, [x19, #248] <== NOT EXECUTED (*tty->handler.write)( 4002f8e8: d2800022 mov x2, #0x1 // #1 <== NOT EXECUTED 4002f8ec: f940e663 ldr x3, [x19, #456] <== NOT EXECUTED 4002f8f0: 8b244021 add x1, x1, w4, uxtw <== NOT EXECUTED 4002f8f4: d63f0060 blr x3 <== NOT EXECUTED ( *context->lock_release )( context, lock_context ); 4002f8f8: f9401742 ldr x2, [x26, #40] <== NOT EXECUTED 4002f8fc: 9101e3e1 add x1, sp, #0x78 <== NOT EXECUTED 4002f900: aa1a03e0 mov x0, x26 <== NOT EXECUTED } 4002f904: 52800036 mov w22, #0x1 // #1 <== NOT EXECUTED ( *context->lock_release )( context, lock_context ); 4002f908: d63f0040 blr x2 <== NOT EXECUTED } 4002f90c: 17ffffe8 b 4002f8ac <== NOT EXECUTED tty->flow_ctrl = tty->flow_ctrl ^ FL_ORCVXOF; 4002f910: b941fa60 ldr w0, [x19, #504] if (c == tty->termios.c_cc[VSTART]) { 4002f914: 6b02003f cmp w1, w2 4002f918: 54000380 b.eq 4002f988 // b.none<== NEVER TAKEN tty->flow_ctrl |= FL_ORCVXOF; 4002f91c: 321c0000 orr w0, w0, #0x10 4002f920: b901fa60 str w0, [x19, #504] 4002f924: 17ffffdd b 4002f898 if (c == '\r' && (tty->termios.c_iflag & IGNCR) != 0) { 4002f928: b9407a61 ldr w1, [x19, #120] 4002f92c: 363ff161 tbz w1, #7, 4002f758 4002f930: 17ffffdf b 4002f8ac if (tty->tty_rcv.sw_pfn != NULL && !tty->tty_rcvwakeup) { 4002f934: f9411660 ldr x0, [x19, #552] ++dropped; 4002f938: 110006f7 add w23, w23, #0x1 ( *context->lock_release )( context, lock_context ); 4002f93c: f9401742 ldr x2, [x26, #40] if (tty->tty_rcv.sw_pfn != NULL && !tty->tty_rcvwakeup) { 4002f940: b4fff7c0 cbz x0, 4002f838 <== NEVER TAKEN 4002f944: 3948e260 ldrb w0, [x19, #568] 4002f948: 35fff780 cbnz w0, 4002f838 <== NEVER TAKEN tty->tty_rcvwakeup = true; 4002f94c: 52800020 mov w0, #0x1 // #1 4002f950: 3908e260 strb w0, [x19, #568] 4002f954: 9101e3e1 add x1, sp, #0x78 4002f958: aa1a03e0 mov x0, x26 4002f95c: d63f0040 blr x2 (*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg); 4002f960: f9411662 ldr x2, [x19, #552] 4002f964: aa1803e0 mov x0, x24 4002f968: f9411a61 ldr x1, [x19, #560] 4002f96c: d63f0040 blr x2 4002f970: 17ffffcf b 4002f8ac 4002f974: f9401742 ldr x2, [x26, #40] 4002f978: 9101e3e1 add x1, sp, #0x78 4002f97c: aa1a03e0 mov x0, x26 4002f980: d63f0040 blr x2 if (callReciveCallback) { 4002f984: 17ffffca b 4002f8ac tty->flow_ctrl = tty->flow_ctrl ^ FL_ORCVXOF; 4002f988: 521c0000 eor w0, w0, #0x10 <== NOT EXECUTED 4002f98c: b901fa60 str w0, [x19, #504] <== NOT EXECUTED 4002f990: 17ffffc2 b 4002f898 <== NOT EXECUTED if ((tty->flow_ctrl & FL_OSTOP) || 4002f994: 362804c0 tbz w0, #5, 4002fa2c <== NOT EXECUTED tty->flow_ctrl |= FL_ISNTXOF; 4002f998: b941fa63 ldr w3, [x19, #504] <== NOT EXECUTED (*tty->handler.write)(ctx, 4002f99c: 91025661 add x1, x19, #0x95 <== NOT EXECUTED 4002f9a0: f940e666 ldr x6, [x19, #456] <== NOT EXECUTED tty->flow_ctrl |= FL_ISNTXOF; 4002f9a4: 321f0063 orr w3, w3, #0x2 <== NOT EXECUTED 4002f9a8: b901fa63 str w3, [x19, #504] <== NOT EXECUTED (*tty->handler.write)(ctx, 4002f9ac: aa1a03e0 mov x0, x26 <== NOT EXECUTED 4002f9b0: d2800022 mov x2, #0x1 // #1 <== NOT EXECUTED 4002f9b4: b9006fe5 str w5, [sp, #108] <== NOT EXECUTED 4002f9b8: d63f00c0 blr x6 <== NOT EXECUTED 4002f9bc: b9406fe5 ldr w5, [sp, #108] <== NOT EXECUTED 4002f9c0: 17ffff94 b 4002f810 <== NOT EXECUTED if ((tty->termios.c_lflag & ICANON) != 0) { 4002f9c4: b9408660 ldr w0, [x19, #132] 4002f9c8: 36400220 tbz w0, #8, 4002fa0c c == tty->termios.c_cc[VEOL] || c == tty->termios.c_cc[VEOL2]; 4002f9cc: 71002b9f cmp w28, #0xa 4002f9d0: 54fffbe0 b.eq 4002f94c // b.none return c == '\n' || c == tty->termios.c_cc[VEOF] || 4002f9d4: 39422260 ldrb w0, [x19, #136] 4002f9d8: 6b1c001f cmp w0, w28 4002f9dc: 54fffb80 b.eq 4002f94c // b.none 4002f9e0: 39422660 ldrb w0, [x19, #137] 4002f9e4: 6b1c001f cmp w0, w28 4002f9e8: 54fffb20 b.eq 4002f94c // b.none if (mustCallReceiveCallback (tty, c, newTail, head)) { 4002f9ec: 39422a60 ldrb w0, [x19, #138] 4002f9f0: 6b1c001f cmp w0, w28 4002f9f4: 54fffac0 b.eq 4002f94c // b.none 4002f9f8: 9101e3e1 add x1, sp, #0x78 4002f9fc: aa1a03e0 mov x0, x26 4002fa00: 52800016 mov w22, #0x0 // #0 4002fa04: d63f0040 blr x2 if (callReciveCallback) { 4002fa08: 17ffffa9 b 4002f8ac unsigned int rawContentSize = (newTail - head) % tty->rawInBuf.Size; 4002fa0c: b940ba61 ldr w1, [x19, #184] 4002fa10: 4b05037b sub w27, w27, w5 return rawContentSize >= tty->termios.c_cc[VMIN]; 4002fa14: 39426263 ldrb w3, [x19, #152] unsigned int rawContentSize = (newTail - head) % tty->rawInBuf.Size; 4002fa18: 1ac10b60 udiv w0, w27, w1 4002fa1c: 1b01ec1b msub w27, w0, w1, w27 if (mustCallReceiveCallback (tty, c, newTail, head)) { 4002fa20: 6b03037f cmp w27, w3 4002fa24: 54fff942 b.cs 4002f94c // b.hs, b.nlast 4002fa28: 17fffff4 b 4002f9f8 if ((tty->flow_ctrl & FL_OSTOP) || 4002fa2c: b9413e60 ldr w0, [x19, #316] <== NOT EXECUTED 4002fa30: 35ffef00 cbnz w0, 4002f810 <== NOT EXECUTED 4002fa34: 17ffffd9 b 4002f998 <== NOT EXECUTED ... =============================================================================== 000000004002f060 : { 4002f060: a9bb7bfd stp x29, x30, [sp, #-80]! 4002f064: 910003fd mov x29, sp 4002f068: a90153f3 stp x19, x20, [sp, #16] 4002f06c: aa0003f4 mov x20, x0 struct rtems_termios_tty *tty = args->iop->data1; 4002f070: f9400000 ldr x0, [x0] { 4002f074: a9025bf5 stp x21, x22, [sp, #32] struct ttywakeup *wakeup = (struct ttywakeup *)args->buffer; 4002f078: f9400a96 ldr x22, [x20, #16] struct rtems_termios_tty *tty = args->iop->data1; 4002f07c: f9402415 ldr x21, [x0, #72] { 4002f080: f9001bf7 str x23, [sp, #48] args->ioctl_return = 0; 4002f084: b9001a9f str wzr, [x20, #24] rtems_mutex_lock (&tty->osem); 4002f088: 910102b7 add x23, x21, #0x40 _Mutex_Acquire( mutex ); 4002f08c: aa1703e0 mov x0, x23 4002f090: 97ffd74c bl 40024dc0 <_Mutex_Acquire> switch (args->command) { 4002f094: f9400693 ldr x19, [x20, #8] 4002f098: d28e8200 mov x0, #0x7410 // #29712 4002f09c: f2b00080 movk x0, #0x8004, lsl #16 4002f0a0: eb00027f cmp x19, x0 4002f0a4: 54001b80 b.eq 4002f414 // b.none 4002f0a8: 54000d29 b.ls 4002f24c // b.plast 4002f0ac: d28e8180 mov x0, #0x740c // #29708 4002f0b0: f2b00200 movk x0, #0x8010, lsl #16 4002f0b4: eb00027f cmp x19, x0 4002f0b8: 54001540 b.eq 4002f360 // b.none 4002f0bc: 54000f49 b.ls 4002f2a4 // b.plast 4002f0c0: 928e8260 mov x0, #0xffffffffffff8bec // #-29716 4002f0c4: f2affa60 movk x0, #0x7fd3, lsl #16 4002f0c8: 8b000260 add x0, x19, x0 4002f0cc: f100081f cmp x0, #0x2 4002f0d0: 540018c8 b.hi 4002f3e8 // b.pmore tty->termios = *(struct termios *)args->buffer; 4002f0d4: f9400a81 ldr x1, [x20, #16] 4002f0d8: 9101e2b6 add x22, x21, #0x78 4002f0dc: aa1603e0 mov x0, x22 4002f0e0: d2800582 mov x2, #0x2c // #44 4002f0e4: 94000a55 bl 40031a38 if (args->command == TIOCSETAW || args->command == TIOCSETAF) { 4002f0e8: 928e8280 mov x0, #0xffffffffffff8beb // #-29717 4002f0ec: f2affa60 movk x0, #0x7fd3, lsl #16 4002f0f0: 8b000273 add x19, x19, x0 4002f0f4: f100067f cmp x19, #0x1 4002f0f8: 54002329 b.ls 4002f55c // b.plast if (( tty->flow_ctrl & FL_MDXON) && 4002f0fc: b941faa1 ldr w1, [x21, #504] rtems_termios_device_context *ctx = tty->device_context; 4002f100: f94126b3 ldr x19, [x21, #584] if (( tty->flow_ctrl & FL_MDXON) && 4002f104: 364803a1 tbz w1, #9, 4002f178 !(tty->termios.c_iflag & IXON)) { 4002f108: b9407aa0 ldr w0, [x21, #120] if (( tty->flow_ctrl & FL_MDXON) && 4002f10c: 37480360 tbnz w0, #9, 4002f178 tty->flow_ctrl &= ~(FL_MDXON | FL_ORCVXOF); 4002f110: b941faa0 ldr w0, [x21, #504] 4002f114: 12804201 mov w1, #0xfffffdef // #-529 4002f118: 0a010000 and w0, w0, w1 4002f11c: b901faa0 str w0, [x21, #504] if (tty->flow_ctrl & FL_OSTOP) { 4002f120: b941faa0 ldr w0, [x21, #504] 4002f124: 362802a0 tbz w0, #5, 4002f178 <== ALWAYS TAKEN ( *context->lock_acquire )( context, lock_context ); 4002f128: f9401262 ldr x2, [x19, #32] <== NOT EXECUTED 4002f12c: 910123e1 add x1, sp, #0x48 <== NOT EXECUTED 4002f130: aa1303e0 mov x0, x19 <== NOT EXECUTED 4002f134: d63f0040 blr x2 <== NOT EXECUTED tty->flow_ctrl &= ~FL_OSTOP; 4002f138: b941faa0 ldr w0, [x21, #504] <== NOT EXECUTED if (tty->rawOutBufState != rob_idle) { 4002f13c: b9413ea1 ldr w1, [x21, #316] <== NOT EXECUTED tty->flow_ctrl &= ~FL_OSTOP; 4002f140: 121a7800 and w0, w0, #0xffffffdf <== NOT EXECUTED 4002f144: b901faa0 str w0, [x21, #504] <== NOT EXECUTED if (tty->rawOutBufState != rob_idle) { 4002f148: 34000101 cbz w1, 4002f168 <== NOT EXECUTED ctx, &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail],1); 4002f14c: b94106a4 ldr w4, [x21, #260] <== NOT EXECUTED (*tty->handler.write)( 4002f150: aa1303e0 mov x0, x19 <== NOT EXECUTED ctx, &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail],1); 4002f154: f9407ea1 ldr x1, [x21, #248] <== NOT EXECUTED (*tty->handler.write)( 4002f158: d2800022 mov x2, #0x1 // #1 <== NOT EXECUTED 4002f15c: f940e6a3 ldr x3, [x21, #456] <== NOT EXECUTED 4002f160: 8b244021 add x1, x1, w4, uxtw <== NOT EXECUTED 4002f164: d63f0060 blr x3 <== NOT EXECUTED ( *context->lock_release )( context, lock_context ); 4002f168: f9401662 ldr x2, [x19, #40] <== NOT EXECUTED 4002f16c: 910123e1 add x1, sp, #0x48 <== NOT EXECUTED 4002f170: aa1303e0 mov x0, x19 <== NOT EXECUTED 4002f174: d63f0040 blr x2 <== NOT EXECUTED if (( tty->flow_ctrl & FL_MDXOF) && !(tty->termios.c_iflag & IXOFF)) { 4002f178: b941faa1 ldr w1, [x21, #504] 4002f17c: 36500061 tbz w1, #10, 4002f188 4002f180: b9407aa0 ldr w0, [x21, #120] 4002f184: 365021e0 tbz w0, #10, 4002f5c0 <== ALWAYS TAKEN if (( tty->flow_ctrl & FL_MDRTS) && !(tty->termios.c_cflag & CRTSCTS)) { 4002f188: b941faa2 ldr w2, [x21, #504] 4002f18c: b94082a1 ldr w1, [x21, #128] 4002f190: 12100421 and w1, w1, #0x30000 4002f194: 36400222 tbz w2, #8, 4002f1d8 <== ALWAYS TAKEN 4002f198: 35000221 cbnz w1, 4002f1dc <== NOT EXECUTED tty->flow_ctrl &= ~(FL_MDRTS); 4002f19c: b941faa0 ldr w0, [x21, #504] <== NOT EXECUTED 4002f1a0: 12177800 and w0, w0, #0xfffffeff <== NOT EXECUTED 4002f1a4: b901faa0 str w0, [x21, #504] <== NOT EXECUTED if ((tty->flow_ctrl & FL_IRTSOFF) && 4002f1a8: b941faa0 ldr w0, [x21, #504] <== NOT EXECUTED 4002f1ac: 361022a0 tbz w0, #2, 4002f600 <== NOT EXECUTED (tty->flow.start_remote_tx != NULL)) { 4002f1b0: f940faa1 ldr x1, [x21, #496] <== NOT EXECUTED if ((tty->flow_ctrl & FL_IRTSOFF) && 4002f1b4: b4002261 cbz x1, 4002f600 <== NOT EXECUTED tty->flow.start_remote_tx(ctx); 4002f1b8: aa1303e0 mov x0, x19 <== NOT EXECUTED 4002f1bc: d63f0020 blr x1 <== NOT EXECUTED if (tty->termios.c_cflag & CRTSCTS) { 4002f1c0: b94082a1 ldr w1, [x21, #128] <== NOT EXECUTED tty->flow_ctrl &= ~(FL_IRTSOFF); 4002f1c4: b941faa0 ldr w0, [x21, #504] <== NOT EXECUTED if (tty->termios.c_cflag & CRTSCTS) { 4002f1c8: 12100421 and w1, w1, #0x30000 <== NOT EXECUTED tty->flow_ctrl &= ~(FL_IRTSOFF); 4002f1cc: 121d7800 and w0, w0, #0xfffffffb <== NOT EXECUTED 4002f1d0: b901faa0 str w0, [x21, #504] <== NOT EXECUTED 4002f1d4: d503201f nop <== NOT EXECUTED if (tty->termios.c_cflag & CRTSCTS) { 4002f1d8: 34000081 cbz w1, 4002f1e8 <== ALWAYS TAKEN tty->flow_ctrl |= FL_MDRTS; 4002f1dc: b941faa0 ldr w0, [x21, #504] <== NOT EXECUTED 4002f1e0: 32180000 orr w0, w0, #0x100 <== NOT EXECUTED 4002f1e4: b901faa0 str w0, [x21, #504] <== NOT EXECUTED if (tty->termios.c_iflag & IXOFF) { 4002f1e8: b9407aa0 ldr w0, [x21, #120] 4002f1ec: 36500080 tbz w0, #10, 4002f1fc tty->flow_ctrl |= FL_MDXOF; 4002f1f0: b941faa1 ldr w1, [x21, #504] 4002f1f4: 32160021 orr w1, w1, #0x400 4002f1f8: b901faa1 str w1, [x21, #504] if (tty->termios.c_iflag & IXON) { 4002f1fc: 36480080 tbz w0, #9, 4002f20c tty->flow_ctrl |= FL_MDXON; 4002f200: b941faa0 ldr w0, [x21, #504] 4002f204: 32170000 orr w0, w0, #0x200 4002f208: b901faa0 str w0, [x21, #504] if (tty->termios.c_lflag & ICANON) { 4002f20c: b94086a0 ldr w0, [x21, #132] 4002f210: 374016c0 tbnz w0, #8, 4002f4e8 tty->vtimeTicks = tty->termios.c_cc[VTIME] * 4002f214: 394266a1 ldrb w1, [x21, #153] 4002f218: d0000040 adrp x0, 40039000 <__trunctfdf2+0x2a0> 4002f21c: b948f400 ldr w0, [x0, #2292] rtems_clock_get_ticks_per_second() / 10; 4002f220: 529999a3 mov w3, #0xcccd // #52429 4002f224: 72b99983 movk w3, #0xcccc, lsl #16 if (tty->termios.c_cc[VMIN]) 4002f228: 394262a2 ldrb w2, [x21, #152] tty->vtimeTicks = tty->termios.c_cc[VTIME] * 4002f22c: 1b007c20 mul w0, w1, w0 rtems_clock_get_ticks_per_second() / 10; 4002f230: 9ba37c00 umull x0, w0, w3 4002f234: d363fc00 lsr x0, x0, #35 tty->vtimeTicks = tty->termios.c_cc[VTIME] * 4002f238: b900a6a0 str w0, [x21, #164] if (tty->termios.c_cc[VTIME]) { 4002f23c: 35001b61 cbnz w1, 4002f5a8 if (tty->termios.c_cc[VMIN]) { 4002f240: 35001542 cbnz w2, 4002f4e8 tty->rawInBufSemaphoreWait = false; 4002f244: 3903a2bf strb wzr, [x21, #232] 4002f248: 140000ab b 4002f4f4 switch (args->command) { 4002f24c: d28e8340 mov x0, #0x741a // #29722 4002f250: f2a80080 movk x0, #0x4004, lsl #16 4002f254: eb00027f cmp x19, x0 4002f258: 54001280 b.eq 4002f4a8 // b.none 4002f25c: 540004e9 b.ls 4002f2f8 // b.plast 4002f260: d28e8260 mov x0, #0x7413 // #29715 4002f264: f2a80580 movk x0, #0x402c, lsl #16 4002f268: eb00027f cmp x19, x0 4002f26c: 54000be1 b.ne 4002f3e8 // b.any <== NEVER TAKEN *(struct termios *)args->buffer = tty->termios; 4002f270: f9400a80 ldr x0, [x20, #16] 4002f274: 9101e2a1 add x1, x21, #0x78 4002f278: d2800582 mov x2, #0x2c // #44 sc = RTEMS_SUCCESSFUL; 4002f27c: 52800013 mov w19, #0x0 // #0 *(struct termios *)args->buffer = tty->termios; 4002f280: 940009ee bl 40031a38 _Mutex_Release( mutex ); 4002f284: aa1703e0 mov x0, x23 4002f288: 97ffd6ea bl 40024e30 <_Mutex_Release> } 4002f28c: 2a1303e0 mov w0, w19 4002f290: a94153f3 ldp x19, x20, [sp, #16] 4002f294: a9425bf5 ldp x21, x22, [sp, #32] 4002f298: f9401bf7 ldr x23, [sp, #48] 4002f29c: a8c57bfd ldp x29, x30, [sp], #80 4002f2a0: d65f03c0 ret switch (args->command) { 4002f2a4: d28e8360 mov x0, #0x741b // #29723 4002f2a8: f2b00080 movk x0, #0x8004, lsl #16 4002f2ac: eb00027f cmp x19, x0 4002f2b0: 54000720 b.eq 4002f394 // b.none 4002f2b4: d28e8160 mov x0, #0x740b // #29707 4002f2b8: f2b00200 movk x0, #0x8010, lsl #16 4002f2bc: eb00027f cmp x19, x0 4002f2c0: 54000941 b.ne 4002f3e8 // b.any <== NEVER TAKEN tty->tty_snd = *wakeup; 4002f2c4: f94002c0 ldr x0, [x22] 4002f2c8: f9010ea0 str x0, [x21, #536] sc = RTEMS_SUCCESSFUL; 4002f2cc: 52800013 mov w19, #0x0 // #0 tty->tty_snd = *wakeup; 4002f2d0: f94006c0 ldr x0, [x22, #8] 4002f2d4: f90112a0 str x0, [x21, #544] 4002f2d8: aa1703e0 mov x0, x23 4002f2dc: 97ffd6d5 bl 40024e30 <_Mutex_Release> } 4002f2e0: 2a1303e0 mov w0, w19 4002f2e4: a94153f3 ldp x19, x20, [sp, #16] 4002f2e8: a9425bf5 ldp x21, x22, [sp, #32] 4002f2ec: f9401bf7 ldr x23, [sp, #48] 4002f2f0: a8c57bfd ldp x29, x30, [sp], #80 4002f2f4: d65f03c0 ret switch (args->command) { 4002f2f8: d28e8bc0 mov x0, #0x745e // #29790 4002f2fc: f2a40000 movk x0, #0x2000, lsl #16 4002f300: eb00027f cmp x19, x0 4002f304: 54000bc0 b.eq 4002f47c // b.none 4002f308: d28ccfe0 mov x0, #0x667f // #26239 4002f30c: f2a80080 movk x0, #0x4004, lsl #16 4002f310: eb00027f cmp x19, x0 4002f314: 540006a1 b.ne 4002f3e8 // b.any <== ALWAYS TAKEN int rawnc = tty->rawInBuf.Tail - tty->rawInBuf.Head; 4002f318: b940b6a0 ldr w0, [x21, #180] <== NOT EXECUTED 4002f31c: b940b2a1 ldr w1, [x21, #176] <== NOT EXECUTED if ( rawnc < 0 ) 4002f320: 6b010001 subs w1, w0, w1 <== NOT EXECUTED 4002f324: 54000fc4 b.mi 4002f51c // b.first <== NOT EXECUTED *(int *)args->buffer = tty->ccount - tty->cindex + rawnc; 4002f328: 294d0ea0 ldp w0, w3, [x21, #104] <== NOT EXECUTED sc = RTEMS_SUCCESSFUL; 4002f32c: 52800013 mov w19, #0x0 // #0 <== NOT EXECUTED *(int *)args->buffer = tty->ccount - tty->cindex + rawnc; 4002f330: f9400a82 ldr x2, [x20, #16] <== NOT EXECUTED 4002f334: 4b030000 sub w0, w0, w3 <== NOT EXECUTED 4002f338: 0b010000 add w0, w0, w1 <== NOT EXECUTED 4002f33c: b9000040 str w0, [x2] <== NOT EXECUTED 4002f340: aa1703e0 mov x0, x23 <== NOT EXECUTED 4002f344: 97ffd6bb bl 40024e30 <_Mutex_Release> <== NOT EXECUTED } 4002f348: 2a1303e0 mov w0, w19 <== NOT EXECUTED 4002f34c: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED 4002f350: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED 4002f354: f9401bf7 ldr x23, [sp, #48] <== NOT EXECUTED 4002f358: a8c57bfd ldp x29, x30, [sp], #80 <== NOT EXECUTED 4002f35c: d65f03c0 ret <== NOT EXECUTED tty->tty_rcv = *wakeup; 4002f360: f94002c0 ldr x0, [x22] 4002f364: f90116a0 str x0, [x21, #552] sc = RTEMS_SUCCESSFUL; 4002f368: 52800013 mov w19, #0x0 // #0 tty->tty_rcv = *wakeup; 4002f36c: f94006c0 ldr x0, [x22, #8] 4002f370: f9011aa0 str x0, [x21, #560] 4002f374: aa1703e0 mov x0, x23 4002f378: 97ffd6ae bl 40024e30 <_Mutex_Release> } 4002f37c: 2a1303e0 mov w0, w19 4002f380: a94153f3 ldp x19, x20, [sp, #16] 4002f384: a9425bf5 ldp x21, x22, [sp, #32] 4002f388: f9401bf7 ldr x23, [sp, #48] 4002f38c: a8c57bfd ldp x29, x30, [sp], #80 4002f390: d65f03c0 ret if (rtems_termios_linesw[tty->t_line].l_close != NULL) { 4002f394: b9820ea0 ldrsw x0, [x21, #524] 4002f398: 90000716 adrp x22, 4010f000 4002f39c: 913402d6 add x22, x22, #0xd00 sc = RTEMS_SUCCESSFUL; 4002f3a0: 52800013 mov w19, #0x0 // #0 if (rtems_termios_linesw[tty->t_line].l_close != NULL) { 4002f3a4: 8b001ac0 add x0, x22, x0, lsl #6 4002f3a8: f9400401 ldr x1, [x0, #8] 4002f3ac: b4000081 cbz x1, 4002f3bc sc = rtems_termios_linesw[tty->t_line].l_close(tty); 4002f3b0: aa1503e0 mov x0, x21 4002f3b4: d63f0020 blr x1 4002f3b8: 2a0003f3 mov w19, w0 tty->t_line=*(int*)(args->buffer); 4002f3bc: f9400a80 ldr x0, [x20, #16] 4002f3c0: b9400000 ldr w0, [x0] 4002f3c4: b9020ea0 str w0, [x21, #524] tty->t_sc = NULL; /* ensure that no more valid data */ 4002f3c8: f9010abf str xzr, [x21, #528] if (rtems_termios_linesw[tty->t_line].l_open != NULL) { 4002f3cc: 937a7c00 sbfiz x0, x0, #6, #32 4002f3d0: f8606ac1 ldr x1, [x22, x0] 4002f3d4: b4fff581 cbz x1, 4002f284 sc = rtems_termios_linesw[tty->t_line].l_open(tty); 4002f3d8: aa1503e0 mov x0, x21 4002f3dc: d63f0020 blr x1 4002f3e0: 2a0003f3 mov w19, w0 4002f3e4: 17ffffa8 b 4002f284 if (rtems_termios_linesw[tty->t_line].l_ioctl != NULL) { 4002f3e8: b9820ea0 ldrsw x0, [x21, #524] 4002f3ec: 90000701 adrp x1, 4010f000 4002f3f0: 91340021 add x1, x1, #0xd00 4002f3f4: 8b001820 add x0, x1, x0, lsl #6 4002f3f8: f9401802 ldr x2, [x0, #48] 4002f3fc: b4000f02 cbz x2, 4002f5dc sc = rtems_termios_linesw[tty->t_line].l_ioctl(tty,args); 4002f400: aa1403e1 mov x1, x20 4002f404: aa1503e0 mov x0, x21 4002f408: d63f0040 blr x2 4002f40c: 2a0003f3 mov w19, w0 4002f410: 17ffff9d b 4002f284 flags = *((int *)args->buffer); 4002f414: f9400a80 ldr x0, [x20, #16] 4002f418: b9400000 ldr w0, [x0] if (flags == 0) { 4002f41c: 350005e0 cbnz w0, 4002f4d8 <== ALWAYS TAKEN 4002f420: 52800033 mov w19, #0x1 // #1 <== NOT EXECUTED rtems_termios_device_context *ctx = tty->device_context; 4002f424: f94126b4 ldr x20, [x21, #584] ( *context->lock_acquire )( context, lock_context ); 4002f428: 910123e1 add x1, sp, #0x48 4002f42c: aa1403e0 mov x0, x20 4002f430: f9401282 ldr x2, [x20, #32] 4002f434: d63f0040 blr x2 ( *context->lock_release )( context, lock_context ); 4002f438: f9401682 ldr x2, [x20, #40] tty->rawOutBuf.Tail = 0; 4002f43c: b90106bf str wzr, [x21, #260] tty->rawOutBuf.Head = 0; 4002f440: b90102bf str wzr, [x21, #256] 4002f444: 910123e1 add x1, sp, #0x48 tty->rawOutBufState = rob_idle; 4002f448: b9013ebf str wzr, [x21, #316] 4002f44c: aa1403e0 mov x0, x20 4002f450: d63f0040 blr x2 if (flags & FREAD) { 4002f454: 350006b3 cbnz w19, 4002f528 RTEMS_SUCCESSFUL : RTEMS_IO_ERROR; 4002f458: 52800013 mov w19, #0x0 // #0 4002f45c: aa1703e0 mov x0, x23 4002f460: 97ffd674 bl 40024e30 <_Mutex_Release> } 4002f464: 2a1303e0 mov w0, w19 4002f468: a94153f3 ldp x19, x20, [sp, #16] 4002f46c: a9425bf5 ldp x21, x22, [sp, #32] 4002f470: f9401bf7 ldr x23, [sp, #48] 4002f474: a8c57bfd ldp x29, x30, [sp], #80 4002f478: d65f03c0 ret drainOutput (tty); 4002f47c: aa1503e0 mov x0, x21 4002f480: 97fff7c8 bl 4002d3a0 4002f484: aa1703e0 mov x0, x23 sc = RTEMS_SUCCESSFUL; 4002f488: 52800013 mov w19, #0x0 // #0 4002f48c: 97ffd669 bl 40024e30 <_Mutex_Release> } 4002f490: 2a1303e0 mov w0, w19 4002f494: a94153f3 ldp x19, x20, [sp, #16] 4002f498: a9425bf5 ldp x21, x22, [sp, #32] 4002f49c: f9401bf7 ldr x23, [sp, #48] 4002f4a0: a8c57bfd ldp x29, x30, [sp], #80 4002f4a4: d65f03c0 ret *(int*)(args->buffer)=tty->t_line; 4002f4a8: f9400a80 ldr x0, [x20, #16] sc = RTEMS_SUCCESSFUL; 4002f4ac: 52800013 mov w19, #0x0 // #0 *(int*)(args->buffer)=tty->t_line; 4002f4b0: b9420ea1 ldr w1, [x21, #524] 4002f4b4: b9000001 str w1, [x0] 4002f4b8: aa1703e0 mov x0, x23 4002f4bc: 97ffd65d bl 40024e30 <_Mutex_Release> } 4002f4c0: 2a1303e0 mov w0, w19 4002f4c4: a94153f3 ldp x19, x20, [sp, #16] 4002f4c8: a9425bf5 ldp x21, x22, [sp, #32] 4002f4cc: f9401bf7 ldr x23, [sp, #48] 4002f4d0: a8c57bfd ldp x29, x30, [sp], #80 4002f4d4: d65f03c0 ret if (flags & FREAD) { 4002f4d8: 12000013 and w19, w0, #0x1 if (flags & FWRITE) { 4002f4dc: 370ffa40 tbnz w0, #1, 4002f424 if (flags & FREAD) { 4002f4e0: 34fffbd3 cbz w19, 4002f458 <== NEVER TAKEN 4002f4e4: 14000011 b 4002f528 tty->rawInBufSemaphoreWait = true; 4002f4e8: 52800020 mov w0, #0x1 // #1 4002f4ec: 3903a2a0 strb w0, [x21, #232] tty->rawInBufSemaphoreFirstTimeout = 0; 4002f4f0: 291dfebf stp wzr, wzr, [x21, #236] if (tty->handler.set_attributes) { 4002f4f4: f940eaa2 ldr x2, [x21, #464] 4002f4f8: b4fffb02 cbz x2, 4002f458 sc = (*tty->handler.set_attributes)(tty->device_context, &tty->termios) ? 4002f4fc: f94126a0 ldr x0, [x21, #584] 4002f500: aa1603e1 mov x1, x22 RTEMS_SUCCESSFUL : RTEMS_IO_ERROR; 4002f504: 52800373 mov w19, #0x1b // #27 sc = (*tty->handler.set_attributes)(tty->device_context, &tty->termios) ? 4002f508: d63f0040 blr x2 RTEMS_SUCCESSFUL : RTEMS_IO_ERROR; 4002f50c: 72001c1f tst w0, #0xff 4002f510: 54ffeba0 b.eq 4002f284 // b.none 4002f514: 52800013 mov w19, #0x0 // #0 4002f518: 17ffffd1 b 4002f45c rawnc += tty->rawInBuf.Size; 4002f51c: b940baa0 ldr w0, [x21, #184] <== NOT EXECUTED 4002f520: 0b000021 add w1, w1, w0 <== NOT EXECUTED 4002f524: 17ffff81 b 4002f328 <== NOT EXECUTED rtems_termios_device_context *ctx = tty->device_context; 4002f528: f94126b4 ldr x20, [x21, #584] ( *context->lock_acquire )( context, lock_context ); 4002f52c: 910123e1 add x1, sp, #0x48 sc = RTEMS_SUCCESSFUL; 4002f530: 52800013 mov w19, #0x0 // #0 4002f534: aa1403e0 mov x0, x20 4002f538: f9401282 ldr x2, [x20, #32] 4002f53c: d63f0040 blr x2 ( *context->lock_release )( context, lock_context ); 4002f540: f9401682 ldr x2, [x20, #40] tty->rawInBuf.Tail = 0; 4002f544: b900b6bf str wzr, [x21, #180] tty->rawInBuf.Head = 0; 4002f548: b900b2bf str wzr, [x21, #176] 4002f54c: 910123e1 add x1, sp, #0x48 4002f550: aa1403e0 mov x0, x20 4002f554: d63f0040 blr x2 } 4002f558: 17ffff4b b 4002f284 drainOutput (tty); 4002f55c: aa1503e0 mov x0, x21 4002f560: 97fff790 bl 4002d3a0 if (args->command == TIOCSETAF) { 4002f564: f9400681 ldr x1, [x20, #8] 4002f568: d28e82c0 mov x0, #0x7416 // #29718 4002f56c: f2b00580 movk x0, #0x802c, lsl #16 4002f570: eb00003f cmp x1, x0 4002f574: 54ffdc41 b.ne 4002f0fc // b.any rtems_termios_device_context *ctx = tty->device_context; 4002f578: f94126b3 ldr x19, [x21, #584] ( *context->lock_acquire )( context, lock_context ); 4002f57c: 910123e1 add x1, sp, #0x48 4002f580: aa1303e0 mov x0, x19 4002f584: f9401262 ldr x2, [x19, #32] 4002f588: d63f0040 blr x2 ( *context->lock_release )( context, lock_context ); 4002f58c: f9401662 ldr x2, [x19, #40] tty->rawInBuf.Tail = 0; 4002f590: b900b6bf str wzr, [x21, #180] tty->rawInBuf.Head = 0; 4002f594: b900b2bf str wzr, [x21, #176] 4002f598: 910123e1 add x1, sp, #0x48 4002f59c: aa1303e0 mov x0, x19 4002f5a0: d63f0040 blr x2 } 4002f5a4: 17fffed6 b 4002f0fc tty->rawInBufSemaphoreFirstTimeout = 0; 4002f5a8: 7100005f cmp w2, #0x0 tty->rawInBufSemaphoreWait = true; 4002f5ac: 52800022 mov w2, #0x1 // #1 tty->rawInBufSemaphoreFirstTimeout = 0; 4002f5b0: 1a9f0001 csel w1, w0, wzr, eq // eq = none tty->rawInBufSemaphoreWait = true; 4002f5b4: 3903a2a2 strb w2, [x21, #232] tty->rawInBufSemaphoreFirstTimeout = 0; 4002f5b8: 291d86a0 stp w0, w1, [x21, #236] 4002f5bc: 17ffffce b 4002f4f4 tty->flow_ctrl &= ~(FL_MDXOF); 4002f5c0: b941faa0 ldr w0, [x21, #504] 4002f5c4: 12157800 and w0, w0, #0xfffffbff 4002f5c8: b901faa0 str w0, [x21, #504] tty->flow_ctrl &= ~(FL_ISNTXOF); 4002f5cc: b941faa0 ldr w0, [x21, #504] 4002f5d0: 121e7800 and w0, w0, #0xfffffffd 4002f5d4: b901faa0 str w0, [x21, #504] 4002f5d8: 17fffeec b 4002f188 } else if (tty->handler.ioctl) { 4002f5dc: f940eea3 ldr x3, [x21, #472] 4002f5e0: b4000183 cbz x3, 4002f610 <== ALWAYS TAKEN args->ioctl_return = (*tty->handler.ioctl) (tty->device_context, 4002f5e4: f9400a82 ldr x2, [x20, #16] <== NOT EXECUTED 4002f5e8: aa1303e1 mov x1, x19 <== NOT EXECUTED 4002f5ec: f94126a0 ldr x0, [x21, #584] <== NOT EXECUTED sc = RTEMS_SUCCESSFUL; 4002f5f0: 52800013 mov w19, #0x0 // #0 <== NOT EXECUTED args->ioctl_return = (*tty->handler.ioctl) (tty->device_context, 4002f5f4: d63f0060 blr x3 <== NOT EXECUTED 4002f5f8: b9001a80 str w0, [x20, #24] <== NOT EXECUTED sc = RTEMS_SUCCESSFUL; 4002f5fc: 17ffff22 b 4002f284 <== NOT EXECUTED tty->flow_ctrl &= ~(FL_IRTSOFF); 4002f600: b941faa0 ldr w0, [x21, #504] <== NOT EXECUTED 4002f604: 121d7800 and w0, w0, #0xfffffffb <== NOT EXECUTED 4002f608: b901faa0 str w0, [x21, #504] <== NOT EXECUTED if (tty->termios.c_cflag & CRTSCTS) { 4002f60c: 17fffef7 b 4002f1e8 <== NOT EXECUTED sc = RTEMS_INVALID_NUMBER; 4002f610: 52800153 mov w19, #0xa // #10 4002f614: 17ffff1c b 4002f284 ... =============================================================================== 0000000040024440 : { 40024440: a9bc7bfd stp x29, x30, [sp, #-64]! 40024444: 910003fd mov x29, sp 40024448: a9025bf5 stp x21, x22, [sp, #32] _Mutex_Acquire( mutex ); 4002444c: 900006f5 adrp x21, 40100000 <_IO_Driver_address_table> 40024450: 910b62b5 add x21, x21, #0x2d8 40024454: aa0203f6 mov x22, x2 40024458: a90153f3 stp x19, x20, [sp, #16] 4002445c: 2a0003f3 mov w19, w0 40024460: 2a0103f4 mov w20, w1 40024464: aa1503e0 mov x0, x21 40024468: a90363f7 stp x23, x24, [sp, #48] 4002446c: aa0303f7 mov x23, x3 40024470: 940011ec bl 40028c20 <_Mutex_Acquire> for (tty = rtems_termios_ttyHead ; tty != NULL ; tty = tty->forw) { 40024474: f00006f8 adrp x24, 40103000 <_Thread_Objects+0x4a8> 40024478: f9454b03 ldr x3, [x24, #2704] 4002447c: b5000083 cbnz x3, 4002448c <== NEVER TAKEN 40024480: 14000009 b 400244a4 40024484: f9400063 ldr x3, [x3] <== NOT EXECUTED 40024488: b40000e3 cbz x3, 400244a4 <== NOT EXECUTED if ((tty->major == major) && (tty->minor == minor)) 4002448c: b9401464 ldr w4, [x3, #20] <== NOT EXECUTED 40024490: 6b13009f cmp w4, w19 <== NOT EXECUTED 40024494: 54ffff81 b.ne 40024484 // b.any <== NOT EXECUTED 40024498: b9401860 ldr w0, [x3, #24] <== NOT EXECUTED 4002449c: 6b14001f cmp w0, w20 <== NOT EXECUTED 400244a0: 54ffff21 b.ne 40024484 // b.any <== NOT EXECUTED tty = rtems_termios_open_tty( 400244a4: aa1703e5 mov x5, x23 400244a8: aa1603e2 mov x2, x22 400244ac: 2a1403e1 mov w1, w20 400244b0: 2a1303e0 mov w0, w19 400244b4: d2800004 mov x4, #0x0 // #0 400244b8: 97fffa06 bl 40022cd0 if (tty == NULL) { 400244bc: b40002c0 cbz x0, 40024514 if (tty->refcount == 1) { 400244c0: b9401001 ldr w1, [x0, #16] 400244c4: 7100043f cmp w1, #0x1 400244c8: 54000120 b.eq 400244ec // b.none <== ALWAYS TAKEN _Mutex_Release( mutex ); 400244cc: aa1503e0 mov x0, x21 400244d0: 940011f0 bl 40028c90 <_Mutex_Release> return RTEMS_SUCCESSFUL; 400244d4: 52800000 mov w0, #0x0 // #0 } 400244d8: a94153f3 ldp x19, x20, [sp, #16] 400244dc: a9425bf5 ldp x21, x22, [sp, #32] 400244e0: a94363f7 ldp x23, x24, [sp, #48] 400244e4: a8c47bfd ldp x29, x30, [sp], #64 400244e8: d65f03c0 ret tty->forw = rtems_termios_ttyHead; 400244ec: f9454b01 ldr x1, [x24, #2704] tty->back = NULL; 400244f0: a9007c01 stp x1, xzr, [x0] if (rtems_termios_ttyHead != NULL) 400244f4: b4000041 cbz x1, 400244fc <== ALWAYS TAKEN rtems_termios_ttyHead->back = tty; 400244f8: f9000420 str x0, [x1, #8] <== NOT EXECUTED if (rtems_termios_ttyTail == NULL) 400244fc: f00006e1 adrp x1, 40103000 <_Thread_Objects+0x4a8> 40024500: f9454c22 ldr x2, [x1, #2712] rtems_termios_ttyHead = tty; 40024504: f9054b00 str x0, [x24, #2704] if (rtems_termios_ttyTail == NULL) 40024508: b5fffe22 cbnz x2, 400244cc <== NEVER TAKEN rtems_termios_ttyTail = tty; 4002450c: f9054c20 str x0, [x1, #2712] 40024510: 17ffffef b 400244cc 40024514: aa1503e0 mov x0, x21 40024518: 940011de bl 40028c90 <_Mutex_Release> return RTEMS_NO_MEMORY; 4002451c: 52800340 mov w0, #0x1a // #26 40024520: 17ffffee b 400244d8 ... =============================================================================== 0000000040024ea0 : { 40024ea0: aa0003e1 mov x1, x0 if (handler == NULL) { 40024ea4: b40000a0 cbz x0, 40024eb8 <== NEVER TAKEN termios_isig_handler = handler; 40024ea8: 900006e2 adrp x2, 40100000 <_IO_Driver_address_table> return RTEMS_SUCCESSFUL; 40024eac: 52800000 mov w0, #0x0 // #0 termios_isig_handler = handler; 40024eb0: f9010841 str x1, [x2, #528] } 40024eb4: d65f03c0 ret return RTEMS_INVALID_ADDRESS; 40024eb8: 52800120 mov w0, #0x9 // #9 <== NOT EXECUTED } 40024ebc: d65f03c0 ret <== NOT EXECUTED =============================================================================== 0000000040027230 : { const rtems_assoc_t *current = &rtems_termios_baud_table[ 0 ]; const rtems_assoc_t *last = current; speed_t spd; while ( current->name != NULL && current->local_value < baud ) { 40027230: b00000a2 adrp x2, 4003c000 40027234: 913fe045 add x5, x2, #0xff8 40027238: f947fc43 ldr x3, [x2, #4088] const rtems_assoc_t *current = &rtems_termios_baud_table[ 0 ]; 4002723c: aa0503e2 mov x2, x5 while ( current->name != NULL && current->local_value < baud ) { 40027240: b50000c3 cbnz x3, 40027258 <== ALWAYS TAKEN 40027244: 14000010 b 40027284 <== NOT EXECUTED 40027248: f9400843 ldr x3, [x2, #16] 4002724c: aa0203e5 mov x5, x2 40027250: aa0403e2 mov x2, x4 40027254: b4000183 cbz x3, 40027284 40027258: b9400843 ldr w3, [x2, #8] last = current; ++current; 4002725c: 91004044 add x4, x2, #0x10 while ( current->name != NULL && current->local_value < baud ) { 40027260: 6b01007f cmp w3, w1 40027264: 54ffff23 b.cc 40027248 // b.lo, b.ul, b.last } if ( current->name != NULL ) { uint32_t mid = (last->local_value + current->local_value) / UINT32_C( 2 ); 40027268: b94008a4 ldr w4, [x5, #8] 4002726c: 0b040063 add w3, w3, w4 spd = baud <= mid ? last->remote_value : current->remote_value; 40027270: 6b43043f cmp w1, w3, lsr #1 40027274: 54000108 b.hi 40027294 // b.pmore 40027278: b9400ca1 ldr w1, [x5, #12] } else { spd = B460800; } term->c_ispeed = spd; term->c_ospeed = spd; 4002727c: 29048401 stp w1, w1, [x0, #36] } 40027280: d65f03c0 ret spd = B460800; 40027284: 52810001 mov w1, #0x800 // #2048 40027288: 72a000e1 movk w1, #0x7, lsl #16 term->c_ospeed = spd; 4002728c: 29048401 stp w1, w1, [x0, #36] } 40027290: d65f03c0 ret spd = baud <= mid ? last->remote_value : current->remote_value; 40027294: b9400c41 ldr w1, [x2, #12] term->c_ospeed = spd; 40027298: 29048401 stp w1, w1, [x0, #36] } 4002729c: d65f03c0 ret =============================================================================== 000000004002a190 : int rtems_verror( rtems_error_code_t error_flag, const char *printf_format, va_list arglist ) { 4002a190: a9ba7bfd stp x29, x30, [sp, #-96]! 4002a194: 910003fd mov x29, sp 4002a198: a90153f3 stp x19, x20, [sp, #16] 4002a19c: aa0203f4 mov x20, x2 4002a1a0: a9025bf5 stp x21, x22, [sp, #32] 4002a1a4: aa0003f5 mov x21, x0 4002a1a8: aa0103f6 mov x22, x1 int local_errno = 0; int chars_written = 0; rtems_status_code status; if (error_flag & RTEMS_ERROR_PANIC) { 4002a1ac: 36e800c0 tbz w0, #29, 4002a1c4 if (rtems_panic_in_progress++) 4002a1b0: d00006c2 adrp x2, 40104000 <_Thread_Objects+0x1f0> 4002a1b4: b946d840 ldr w0, [x2, #1752] 4002a1b8: 11000401 add w1, w0, #0x1 4002a1bc: b906d841 str w1, [x2, #1752] 4002a1c0: 350004a0 cbnz w0, 4002a254 <== NEVER TAKEN /* don't aggravate things */ if (rtems_panic_in_progress > 2) return 0; } (void) fflush(stdout); /* in case stdout/stderr same */ 4002a1c4: f9001bf7 str x23, [sp, #48] 4002a1c8: 97ffdd36 bl 400216a0 <__getreent> 4002a1cc: f9400800 ldr x0, [x0, #16] status = error_flag & ~RTEMS_ERROR_MASK; 4002a1d0: 120172b7 and w23, w21, #0x8fffffff (void) fflush(stdout); /* in case stdout/stderr same */ 4002a1d4: 94003506 bl 400375ec if (error_flag & RTEMS_ERROR_ERRNO) /* include errno? */ 4002a1d8: 37f00595 tbnz w21, #30, 4002a288 #if defined(RTEMS_MULTIPROCESSING) if (_System_state_Is_multiprocessing) fprintf(stderr, "[%" PRIu16 "] ", rtems_object_get_local_node()); #endif chars_written += vfprintf(stderr, printf_format, arglist); 4002a1dc: 97ffdd31 bl 400216a0 <__getreent> 4002a1e0: f9400281 ldr x1, [x20] 4002a1e4: f90023e1 str x1, [sp, #64] 4002a1e8: 910103e2 add x2, sp, #0x40 4002a1ec: f9400681 ldr x1, [x20, #8] 4002a1f0: f90027e1 str x1, [sp, #72] 4002a1f4: f9400a81 ldr x1, [x20, #16] 4002a1f8: f9002be1 str x1, [sp, #80] 4002a1fc: f9400e81 ldr x1, [x20, #24] 4002a200: f9002fe1 str x1, [sp, #88] 4002a204: aa1603e1 mov x1, x22 4002a208: f9400c00 ldr x0, [x0, #24] 4002a20c: 940063b3 bl 400430d8 4002a210: 2a0003f3 mov w19, w0 if (status) 4002a214: 350007b7 cbnz w23, 4002a308 chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno)); else chars_written += fprintf(stderr, " (unknown errno=%d)", local_errno); } chars_written += fprintf(stderr, "\n"); 4002a218: 97ffdd22 bl 400216a0 <__getreent> 4002a21c: f9400c00 ldr x0, [x0, #24] 4002a220: f0000141 adrp x1, 40055000 4002a224: 9112a021 add x1, x1, #0x4a8 4002a228: 9400385f bl 400383a4 4002a22c: 0b000273 add w19, w19, w0 (void) fflush(stderr); 4002a230: 97ffdd1c bl 400216a0 <__getreent> 4002a234: f9400c00 ldr x0, [x0, #24] 4002a238: 940034ed bl 400375ec return chars_written; } 4002a23c: 2a1303e0 mov w0, w19 4002a240: a94153f3 ldp x19, x20, [sp, #16] 4002a244: a9425bf5 ldp x21, x22, [sp, #32] return chars_written; 4002a248: f9401bf7 ldr x23, [sp, #48] } 4002a24c: a8c67bfd ldp x29, x30, [sp], #96 4002a250: d65f03c0 ret disable_level = cpu_self->thread_dispatch_disable_level; 4002a254: d00006c0 adrp x0, 40104000 <_Thread_Objects+0x1f0> <== NOT EXECUTED 4002a258: 91190000 add x0, x0, #0x640 <== NOT EXECUTED if (rtems_panic_in_progress > 2) 4002a25c: 7100083f cmp w1, #0x2 <== NOT EXECUTED return 0; 4002a260: 52800013 mov w19, #0x0 // #0 <== NOT EXECUTED 4002a264: b9401801 ldr w1, [x0, #24] <== NOT EXECUTED cpu_self->thread_dispatch_disable_level = disable_level + 1; 4002a268: 11000421 add w1, w1, #0x1 <== NOT EXECUTED 4002a26c: b9001801 str w1, [x0, #24] <== NOT EXECUTED if (rtems_panic_in_progress > 2) 4002a270: 54fffaad b.le 4002a1c4 <== NOT EXECUTED } 4002a274: 2a1303e0 mov w0, w19 <== NOT EXECUTED 4002a278: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED 4002a27c: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED 4002a280: a8c67bfd ldp x29, x30, [sp], #96 <== NOT EXECUTED 4002a284: d65f03c0 ret <== NOT EXECUTED local_errno = errno; 4002a288: 94003353 bl 40036fd4 <__errno> 4002a28c: b9400015 ldr w21, [x0] chars_written += vfprintf(stderr, printf_format, arglist); 4002a290: 97ffdd04 bl 400216a0 <__getreent> 4002a294: f9400282 ldr x2, [x20] 4002a298: f90023e2 str x2, [sp, #64] 4002a29c: aa1603e1 mov x1, x22 4002a2a0: f9400682 ldr x2, [x20, #8] 4002a2a4: f90027e2 str x2, [sp, #72] 4002a2a8: f9400a82 ldr x2, [x20, #16] 4002a2ac: f9002be2 str x2, [sp, #80] 4002a2b0: f9400e82 ldr x2, [x20, #24] 4002a2b4: f9002fe2 str x2, [sp, #88] 4002a2b8: 910103e2 add x2, sp, #0x40 4002a2bc: f9400c00 ldr x0, [x0, #24] 4002a2c0: 94006386 bl 400430d8 4002a2c4: 2a0003f3 mov w19, w0 if (status) 4002a2c8: 35000237 cbnz w23, 4002a30c if (local_errno) { 4002a2cc: 710002bf cmp w21, #0x0 4002a2d0: 34fffa55 cbz w21, 4002a218 if ((local_errno > 0) && *strerror(local_errno)) 4002a2d4: 540000ad b.le 4002a2e8 4002a2d8: 2a1503e0 mov w0, w21 4002a2dc: 94005009 bl 4003e300 4002a2e0: 39400000 ldrb w0, [x0] 4002a2e4: 350002c0 cbnz w0, 4002a33c <== ALWAYS TAKEN chars_written += fprintf(stderr, " (unknown errno=%d)", local_errno); 4002a2e8: 97ffdcee bl 400216a0 <__getreent> 4002a2ec: f9400c00 ldr x0, [x0, #24] 4002a2f0: 2a1503e2 mov w2, w21 4002a2f4: b0000141 adrp x1, 40053000 4002a2f8: 9108a021 add x1, x1, #0x228 4002a2fc: 9400382a bl 400383a4 4002a300: 0b000273 add w19, w19, w0 4002a304: 17ffffc5 b 4002a218 int local_errno = 0; 4002a308: 52800015 mov w21, #0x0 // #0 fprintf(stderr, " (status: %s)", rtems_status_text(status)); 4002a30c: 97ffdce5 bl 400216a0 <__getreent> 4002a310: aa0003e1 mov x1, x0 4002a314: 2a1703e0 mov w0, w23 4002a318: f9400c34 ldr x20, [x1, #24] 4002a31c: 940008dd bl 4002c690 4002a320: b0000141 adrp x1, 40053000 4002a324: aa0003e2 mov x2, x0 4002a328: 91082021 add x1, x1, #0x208 4002a32c: aa1403e0 mov x0, x20 4002a330: 9400381d bl 400383a4 chars_written += 4002a334: 0b000273 add w19, w19, w0 4002a338: 17ffffe5 b 4002a2cc chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno)); 4002a33c: 97ffdcd9 bl 400216a0 <__getreent> 4002a340: aa0003e1 mov x1, x0 4002a344: 2a1503e0 mov w0, w21 4002a348: f9400c34 ldr x20, [x1, #24] 4002a34c: 94004fed bl 4003e300 4002a350: b0000141 adrp x1, 40053000 4002a354: aa0003e2 mov x2, x0 4002a358: 91086021 add x1, x1, #0x218 4002a35c: aa1403e0 mov x0, x20 4002a360: 94003811 bl 400383a4 4002a364: 0b000273 add w19, w19, w0 4002a368: 17ffffac b 4002a218 4002a36c: 00000000 udf #0 =============================================================================== 000000004002c4c0 : * * @return true The printer is valid else false is returned. */ static inline bool rtems_print_printer_valid(const rtems_printer *printer) { return printer != NULL && printer->printer != NULL; 4002c4c0: b4000260 cbz x0, 4002c50c <== NEVER TAKEN 4002c4c4: f9400404 ldr x4, [x0, #8] 4002c4c8: b4000224 cbz x4, 4002c50c <== NEVER TAKEN va_list ap ) { int len = 0; if ( rtems_print_printer_valid( printer ) ) { len = printer->printer( printer->context, format, ap ); 4002c4cc: aa0203e3 mov x3, x2 { 4002c4d0: a9bd7bfd stp x29, x30, [sp, #-48]! 4002c4d4: 910003fd mov x29, sp len = printer->printer( printer->context, format, ap ); 4002c4d8: f9400065 ldr x5, [x3] 4002c4dc: 910043e2 add x2, sp, #0x10 4002c4e0: f9400000 ldr x0, [x0] 4002c4e4: f9000be5 str x5, [sp, #16] 4002c4e8: f9400465 ldr x5, [x3, #8] 4002c4ec: f9000fe5 str x5, [sp, #24] 4002c4f0: f9400865 ldr x5, [x3, #16] 4002c4f4: f90013e5 str x5, [sp, #32] 4002c4f8: f9400c63 ldr x3, [x3, #24] 4002c4fc: f90017e3 str x3, [sp, #40] 4002c500: d63f0080 blr x4 } return len; } 4002c504: a8c37bfd ldp x29, x30, [sp], #48 4002c508: d65f03c0 ret int len = 0; 4002c50c: 52800000 mov w0, #0x0 // #0 <== NOT EXECUTED } 4002c510: d65f03c0 ret <== NOT EXECUTED ... =============================================================================== 0000000040026f10 : void setgrent(void) { 40026f10: a9bd7bfd stp x29, x30, [sp, #-48]! pthread_once(&grp_once, grp_init); 40026f14: 90000001 adrp x1, 40026000 <_Thread_Kill_zombies+0x60> 40026f18: b00006e0 adrp x0, 40103000 <_Thread_Objects+0x540> { 40026f1c: 910003fd mov x29, sp pthread_once(&grp_once, grp_init); 40026f20: 9139c021 add x1, x1, #0xe70 40026f24: 910d0000 add x0, x0, #0x340 { 40026f28: a90153f3 stp x19, x20, [sp, #16] pthread_once(&grp_once, grp_init); 40026f2c: 97fff75d bl 40024ca0 return pthread_getspecific(grp_key); 40026f30: b00006f4 adrp x20, 40103000 <_Thread_Objects+0x540> 40026f34: b9433e80 ldr w0, [x20, #828] 40026f38: 9400044a bl 40028060 grp_context *ctx = grp_get_context(); if (ctx == NULL) { 40026f3c: aa0003f3 mov x19, x0 40026f40: b40001c0 cbz x0, 40026f78 return; } } _libcsupport_pwdgrp_init(); 40026f44: 97ffeb3b bl 40021c30 <_libcsupport_pwdgrp_init> if (ctx->fp != NULL) 40026f48: f9400260 ldr x0, [x19] 40026f4c: b4000040 cbz x0, 40026f54 fclose(ctx->fp); 40026f50: 940020cd bl 4002f284 ctx->fp = fopen("/etc/group", "r"); 40026f54: 900000a1 adrp x1, 4003a000 40026f58: f0000080 adrp x0, 40039000 <__sfp_handle_exceptions+0x50> 40026f5c: 91002021 add x1, x1, #0x8 40026f60: 912c0000 add x0, x0, #0xb00 40026f64: 940023ce bl 4002fe9c 40026f68: f9000260 str x0, [x19] } 40026f6c: a94153f3 ldp x19, x20, [sp, #16] 40026f70: a8c37bfd ldp x29, x30, [sp], #48 40026f74: d65f03c0 ret ctx = calloc(1, sizeof(*ctx)); 40026f78: d2802501 mov x1, #0x128 // #296 40026f7c: d2800020 mov x0, #0x1 // #1 40026f80: f90013f5 str x21, [sp, #32] 40026f84: 97fffee7 bl 40026b20 40026f88: aa0003f5 mov x21, x0 40026f8c: aa0003f3 mov x19, x0 if (ctx == NULL) 40026f90: b4000180 cbz x0, 40026fc0 <== NEVER TAKEN eno = pthread_setspecific(grp_key, ctx); 40026f94: b9433e80 ldr w0, [x20, #828] 40026f98: aa1503e1 mov x1, x21 40026f9c: 94000445 bl 400280b0 if (eno != 0) { 40026fa0: 35000060 cbnz w0, 40026fac <== NEVER TAKEN 40026fa4: f94013f5 ldr x21, [sp, #32] 40026fa8: 17ffffe7 b 40026f44 free(ctx); 40026fac: aa1503e0 mov x0, x21 <== NOT EXECUTED } 40026fb0: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED free(ctx); 40026fb4: f94013f5 ldr x21, [sp, #32] <== NOT EXECUTED } 40026fb8: a8c37bfd ldp x29, x30, [sp], #48 <== NOT EXECUTED free(ctx); 40026fbc: 17ffff45 b 40026cd0 <== NOT EXECUTED 40026fc0: f94013f5 ldr x21, [sp, #32] <== NOT EXECUTED 40026fc4: 17ffffea b 40026f6c <== NOT EXECUTED ... =============================================================================== 0000000040023be0 : * in some form is supported on most UNIX and POSIX systems. This * routine is necessary to mount instantiations of a file system * into the file system name space. */ int unmount( const char *path ) { 40023be0: a9b77bfd stp x29, x30, [sp, #-144]! int rv = 0; rtems_filesystem_eval_path_context_t ctx; int eval_flags = RTEMS_FS_FOLLOW_LINK; const rtems_filesystem_location_info_t *currentloc = rtems_filesystem_eval_path_start( &ctx, path, eval_flags ); 40023be4: aa0003e1 mov x1, x0 40023be8: 52800302 mov w2, #0x18 // #24 { 40023bec: 910003fd mov x29, sp rtems_filesystem_eval_path_start( &ctx, path, eval_flags ); 40023bf0: 9100a3e0 add x0, sp, #0x28 { 40023bf4: a90153f3 stp x19, x20, [sp, #16] rtems_filesystem_eval_path_start( &ctx, path, eval_flags ); 40023bf8: 97fffd6a bl 400231a0 rtems_filesystem_mount_table_entry_t *mt_entry = currentloc->mt_entry; 40023bfc: f9401413 ldr x19, [x0, #40] 40023c00: f9400e62 ldr x2, [x19, #24] 40023c04: f9402661 ldr x1, [x19, #72] 40023c08: f9401042 ldr x2, [x2, #32] 40023c0c: d63f0040 blr x2 if ( rtems_filesystem_location_is_instance_root( currentloc ) ) { 40023c10: 72001c1f tst w0, #0xff 40023c14: 54000660 b.eq 40023ce0 // b.none &rtems_filesystem_root->location; 40023c18: 9400007e bl 40023e10 40023c1c: f9400414 ldr x20, [x0, #8] &rtems_filesystem_current->location; 40023c20: 9400007c bl 40023e10 return mt_entry == root->mt_entry || mt_entry == current->mt_entry; 40023c24: f9401681 ldr x1, [x20, #40] 40023c28: eb01027f cmp x19, x1 40023c2c: 540004a0 b.eq 40023cc0 // b.none 40023c30: f9400000 ldr x0, [x0] 40023c34: f9401400 ldr x0, [x0, #40] 40023c38: eb00027f cmp x19, x0 40023c3c: 54000420 b.eq 40023cc0 // b.none if ( !contains_root_or_current_directory( mt_entry ) ) { const rtems_filesystem_operations_table *mt_point_ops = mt_entry->mt_point_node->location.mt_entry->ops; 40023c40: f9402261 ldr x1, [x19, #64] rv = (*mt_point_ops->unmount_h)( mt_entry ); 40023c44: aa1303e0 mov x0, x19 const rtems_filesystem_operations_table *mt_point_ops = 40023c48: f9401421 ldr x1, [x1, #40] rv = (*mt_point_ops->unmount_h)( mt_entry ); 40023c4c: f9400c21 ldr x1, [x1, #24] 40023c50: f9403021 ldr x1, [x1, #96] 40023c54: d63f0020 blr x1 40023c58: 2a0003f4 mov w20, w0 if ( rv == 0 ) { 40023c5c: 340000e0 cbz w0, 40023c78 } else { errno = EACCES; rv = -1; } rtems_filesystem_eval_path_cleanup( &ctx ); 40023c60: 9100a3e0 add x0, sp, #0x28 40023c64: 97fffdc7 bl 40023380 rtems_fatal_error_occurred( 0xdeadbeef ); } } return rv; } 40023c68: 2a1403e0 mov w0, w20 40023c6c: a94153f3 ldp x19, x20, [sp, #16] 40023c70: a8c97bfd ldp x29, x30, [sp], #144 40023c74: d65f03c0 ret rtems_id self_task_id = rtems_task_self(); 40023c78: 94000e3a bl 40027560 __asm__ volatile ( 40023c7c: d53b4221 mrs x1, daif 40023c80: d50342df msr daifset, #0x2 mt_entry->mounted = false; 40023c84: 3901427f strb wzr, [x19, #80] mt_entry->unmount_task = self_task_id; 40023c88: b9007a60 str w0, [x19, #120] __asm__ volatile ( 40023c8c: 92407c20 and x0, x1, #0xffffffff 40023c90: d51b4220 msr daif, x0 rtems_filesystem_eval_path_cleanup( &ctx ); 40023c94: 9100a3e0 add x0, sp, #0x28 40023c98: 97fffdba bl 40023380 return rtems_event_system_receive( 40023c9c: 910093e3 add x3, sp, #0x24 40023ca0: 52800002 mov w2, #0x0 // #0 40023ca4: 52800001 mov w1, #0x0 // #0 40023ca8: 52b00000 mov w0, #0x80000000 // #-2147483648 40023cac: 94000de1 bl 40027430 if ( sc != RTEMS_SUCCESSFUL ) { 40023cb0: 34fffdc0 cbz w0, 40023c68 <== ALWAYS TAKEN rtems_fatal_error_occurred( 0xdeadbeef ); 40023cb4: 5297dde0 mov w0, #0xbeef // #48879 <== NOT EXECUTED 40023cb8: 72bbd5a0 movk w0, #0xdead, lsl #16 <== NOT EXECUTED 40023cbc: 94000e7d bl 400276b0 <== NOT EXECUTED errno = EBUSY; 40023cc0: 94005b2b bl 4003a96c <__errno> 40023cc4: aa0003e1 mov x1, x0 40023cc8: 52800202 mov w2, #0x10 // #16 rtems_filesystem_eval_path_cleanup( &ctx ); 40023ccc: 9100a3e0 add x0, sp, #0x28 rv = -1; 40023cd0: 12800014 mov w20, #0xffffffff // #-1 errno = EBUSY; 40023cd4: b9000022 str w2, [x1] rtems_filesystem_eval_path_cleanup( &ctx ); 40023cd8: 97fffdaa bl 40023380 if ( rv == 0 ) { 40023cdc: 17ffffe3 b 40023c68 errno = EACCES; 40023ce0: 94005b23 bl 4003a96c <__errno> 40023ce4: aa0003e1 mov x1, x0 40023ce8: 528001a2 mov w2, #0xd // #13 rtems_filesystem_eval_path_cleanup( &ctx ); 40023cec: 9100a3e0 add x0, sp, #0x28 rv = -1; 40023cf0: 12800014 mov w20, #0xffffffff // #-1 errno = EACCES; 40023cf4: b9000022 str w2, [x1] rtems_filesystem_eval_path_cleanup( &ctx ); 40023cf8: 97fffda2 bl 40023380 if ( rv == 0 ) { 40023cfc: 17ffffdb b 40023c68 =============================================================================== 000000004003bb30 : ssize_t write( int fd, const void *buffer, size_t count ) { 4003bb30: a9be7bfd stp x29, x30, [sp, #-32]! 4003bb34: 910003fd mov x29, sp rtems_libio_t *iop; ssize_t n; rtems_libio_check_buffer( buffer ); 4003bb38: b4000781 cbz x1, 4003bc28 <== NEVER TAKEN rtems_libio_check_count( count ); 4003bb3c: 93407c03 sxtw x3, w0 4003bb40: d2800000 mov x0, #0x0 // #0 4003bb44: b4000462 cbz x2, 4003bbd0 LIBIO_GET_IOP_WITH_ACCESS( fd, iop, LIBIO_FLAGS_WRITE, EBADF ); 4003bb48: b0000000 adrp x0, 4003c000 <_Scheduler_Table+0x48> 4003bb4c: b941f800 ldr w0, [x0, #504] 4003bb50: 6b00007f cmp w3, w0 4003bb54: 54000422 b.cs 4003bbd8 // b.hs, b.nlast 4003bb58: a90153f3 stp x19, x20, [sp, #16] 4003bb5c: 52800a14 mov w20, #0x50 // #80 4003bb60: f0000633 adrp x19, 40102000 <_Configuration_Scheduler_priority_dflt+0x15d0> 4003bb64: 913f8273 add x19, x19, #0xfe0 4003bb68: 9b347c74 smull x20, w3, w20 4003bb6c: 8b130280 add x0, x20, x19 __asm__ volatile ( 4003bb70: d53b4225 mrs x5, daif 4003bb74: d50342df msr daifset, #0x2 val = *obj; 4003bb78: b8736a84 ldr w4, [x20, x19] *obj = val + arg; 4003bb7c: 11400486 add w6, w4, #0x1, lsl #12 4003bb80: b8336a86 str w6, [x20, x19] __asm__ volatile ( 4003bb84: 92407ca5 and x5, x5, #0xffffffff 4003bb88: d51b4225 msr daif, x5 4003bb8c: 52802085 mov w5, #0x104 // #260 4003bb90: 0a050084 and w4, w4, w5 4003bb94: 6b05009f cmp w4, w5 4003bb98: 540002c1 b.ne 4003bbf0 // b.any /* * Now process the write() request. */ n = (*iop->pathinfo.handlers->write_h)( iop, buffer, count ); 4003bb9c: d2800a04 mov x4, #0x50 // #80 4003bba0: 9b044c63 madd x3, x3, x4, x19 4003bba4: f9401863 ldr x3, [x3, #48] 4003bba8: f9400c63 ldr x3, [x3, #24] 4003bbac: d63f0060 blr x3 __asm__ volatile ( 4003bbb0: d53b4221 mrs x1, daif 4003bbb4: d50342df msr daifset, #0x2 *obj = val - arg; 4003bbb8: b8736a82 ldr w2, [x20, x19] 4003bbbc: 51400442 sub w2, w2, #0x1, lsl #12 4003bbc0: b8336a82 str w2, [x20, x19] __asm__ volatile ( 4003bbc4: 92407c21 and x1, x1, #0xffffffff 4003bbc8: d51b4221 msr daif, x1 4003bbcc: a94153f3 ldp x19, x20, [sp, #16] rtems_libio_iop_drop( iop ); return n; } 4003bbd0: a8c27bfd ldp x29, x30, [sp], #32 4003bbd4: d65f03c0 ret LIBIO_GET_IOP_WITH_ACCESS( fd, iop, LIBIO_FLAGS_WRITE, EBADF ); 4003bbd8: 97ffcb3a bl 4002e8c0 <__errno> 4003bbdc: aa0003e1 mov x1, x0 4003bbe0: 52800122 mov w2, #0x9 // #9 4003bbe4: 92800000 mov x0, #0xffffffffffffffff // #-1 4003bbe8: b9000022 str w2, [x1] 4003bbec: 17fffff9 b 4003bbd0 __asm__ volatile ( 4003bbf0: d53b4220 mrs x0, daif 4003bbf4: d50342df msr daifset, #0x2 4003bbf8: b8736a81 ldr w1, [x20, x19] 4003bbfc: 51400421 sub w1, w1, #0x1, lsl #12 4003bc00: b8336a81 str w1, [x20, x19] __asm__ volatile ( 4003bc04: 92407c00 and x0, x0, #0xffffffff 4003bc08: d51b4220 msr daif, x0 4003bc0c: 97ffcb2d bl 4002e8c0 <__errno> 4003bc10: aa0003e1 mov x1, x0 4003bc14: 52800122 mov w2, #0x9 // #9 4003bc18: 92800000 mov x0, #0xffffffffffffffff // #-1 4003bc1c: a94153f3 ldp x19, x20, [sp, #16] 4003bc20: b9000022 str w2, [x1] 4003bc24: 17ffffeb b 4003bbd0 rtems_libio_check_buffer( buffer ); 4003bc28: 97ffcb26 bl 4002e8c0 <__errno> <== NOT EXECUTED 4003bc2c: aa0003e1 mov x1, x0 <== NOT EXECUTED 4003bc30: 528002c2 mov w2, #0x16 // #22 <== NOT EXECUTED 4003bc34: 92800000 mov x0, #0xffffffffffffffff // #-1 <== NOT EXECUTED 4003bc38: b9000022 str w2, [x1] <== NOT EXECUTED 4003bc3c: 17ffffe5 b 4003bbd0 <== NOT EXECUTED