=============================================================================== 4000ebd8 : Heap_Control *RTEMS_Malloc_Initialize( const Memory_Information *mem, Heap_Initialization_or_extend_handler extend ) { 4000ebd8: fd010113 addi sp,sp,-48 heap = &_Malloc_Heap; RTEMS_Malloc_Heap = heap; init_or_extend = _Heap_Initialize; page_size = CPU_HEAP_ALIGNMENT; for (i = 0; i < _Memory_Get_count( mem ); ++i) { 4000ebdc: 00052783 lw a5,0(a0) { 4000ebe0: 01512a23 sw s5,20(sp) RTEMS_Malloc_Heap = heap; 4000ebe4: 40023ab7 lui s5,0x40023 4000ebe8: 150a8693 addi a3,s5,336 # 40023150 <_Malloc_Heap> { 4000ebec: 02112623 sw ra,44(sp) 4000ebf0: 02812423 sw s0,40(sp) 4000ebf4: 02912223 sw s1,36(sp) 4000ebf8: 03212023 sw s2,32(sp) 4000ebfc: 01312e23 sw s3,28(sp) 4000ec00: 01412c23 sw s4,24(sp) 4000ec04: 01612823 sw s6,16(sp) 4000ec08: 01712623 sw s7,12(sp) RTEMS_Malloc_Heap = heap; 4000ec0c: 90d1ae23 sw a3,-1764(gp) # 40020d5c for (i = 0; i < _Memory_Get_count( mem ); ++i) { 4000ec10: 08078a63 beqz a5,4000eca4 init_or_extend = _Heap_Initialize; 4000ec14: 40007a37 lui s4,0x40007 4000ec18: 560a0b93 addi s7,s4,1376 # 40007560 <_Heap_Initialize> 4000ec1c: 00050993 mv s3,a0 4000ec20: 00058b13 mv s6,a1 for (i = 0; i < _Memory_Get_count( mem ); ++i) { 4000ec24: 00000913 li s2,0 4000ec28: 00000493 li s1,0 init_or_extend = _Heap_Initialize; 4000ec2c: 560a0a13 addi s4,s4,1376 return &information->areas[ index ]; 4000ec30: 0049a403 lw s0,4(s3) Memory_Area *area; uintptr_t space_available; area = _Memory_Get_area( mem, i ); space_available = ( *init_or_extend )( 4000ec34: 01000693 li a3,16 4000ec38: 150a8513 addi a0,s5,336 4000ec3c: 01240433 add s0,s0,s2 return area->free; 4000ec40: 00442583 lw a1,4(s0) return (uintptr_t) area->end - (uintptr_t) area->free; 4000ec44: 00842603 lw a2,8(s0) 4000ec48: 40b60633 sub a2,a2,a1 4000ec4c: 000a00e7 jalr s4 _Memory_Get_free_begin( area ), _Memory_Get_free_size( area ), page_size ); if ( space_available > 0 ) { 4000ec50: 00050863 beqz a0,4000ec60 area->free = (char *) area->free + consume; 4000ec54: 00842783 lw a5,8(s0) _Memory_Consume( area, _Memory_Get_free_size( area ) ); init_or_extend = extend; 4000ec58: 000b0a13 mv s4,s6 4000ec5c: 00f42223 sw a5,4(s0) for (i = 0; i < _Memory_Get_count( mem ); ++i) { 4000ec60: 0009a783 lw a5,0(s3) 4000ec64: 00148493 addi s1,s1,1 # 1001 <_ISR_Stack_size+0x1> 4000ec68: 00c90913 addi s2,s2,12 4000ec6c: fcf4e2e3 bltu s1,a5,4000ec30 } } if ( init_or_extend == _Heap_Initialize ) { 4000ec70: 037a0a63 beq s4,s7,4000eca4 _Internal_error( INTERNAL_ERROR_NO_MEMORY_FOR_HEAP ); } return heap; } 4000ec74: 02c12083 lw ra,44(sp) 4000ec78: 02812403 lw s0,40(sp) 4000ec7c: 02412483 lw s1,36(sp) 4000ec80: 02012903 lw s2,32(sp) 4000ec84: 01c12983 lw s3,28(sp) 4000ec88: 01812a03 lw s4,24(sp) 4000ec8c: 01012b03 lw s6,16(sp) 4000ec90: 00c12b83 lw s7,12(sp) 4000ec94: 150a8513 addi a0,s5,336 4000ec98: 01412a83 lw s5,20(sp) 4000ec9c: 03010113 addi sp,sp,48 4000eca0: 00008067 ret _Internal_error( INTERNAL_ERROR_NO_MEMORY_FOR_HEAP ); 4000eca4: 01700513 li a0,23 4000eca8: d11f80ef jal ra,400079b8 <_Internal_error> <== NOT EXECUTED =============================================================================== 40002a40 <_Console_simple_Read>: ssize_t _Console_simple_Read( rtems_libio_t *iop, void *buffer, size_t count ) { 40002a40: fe010113 addi sp,sp,-32 <== NOT EXECUTED 40002a44: 01312623 sw s3,12(sp) <== NOT EXECUTED 40002a48: 00112e23 sw ra,28(sp) <== NOT EXECUTED 40002a4c: 00812c23 sw s0,24(sp) <== NOT EXECUTED 40002a50: 00912a23 sw s1,20(sp) <== NOT EXECUTED 40002a54: 01212823 sw s2,16(sp) <== NOT EXECUTED 40002a58: 00060993 mv s3,a2 <== NOT EXECUTED ssize_t n; buf = buffer; n = (ssize_t) count; for ( i = 0; i < n; ++i ) { 40002a5c: 02c05a63 blez a2,40002a90 <_Console_simple_Read+0x50> <== NOT EXECUTED 40002a60: 00058493 mv s1,a1 <== NOT EXECUTED 40002a64: 00c58933 add s2,a1,a2 <== NOT EXECUTED int c; while ( true ) { c = getchark(); if ( c != -1 ) { 40002a68: fff00413 li s0,-1 <== NOT EXECUTED 40002a6c: 0080006f j 40002a74 <_Console_simple_Read+0x34> <== NOT EXECUTED break; } (void) rtems_task_wake_after( 1 ); 40002a70: 538040ef jal ra,40006fa8 <== NOT EXECUTED c = getchark(); 40002a74: 23c000ef jal ra,40002cb0 <== NOT EXECUTED 40002a78: 00050793 mv a5,a0 <== NOT EXECUTED (void) rtems_task_wake_after( 1 ); 40002a7c: 00100513 li a0,1 <== NOT EXECUTED if ( c != -1 ) { 40002a80: fe8788e3 beq a5,s0,40002a70 <_Console_simple_Read+0x30> <== NOT EXECUTED } buf[ i ] = (char) c; 40002a84: 00f48023 sb a5,0(s1) <== NOT EXECUTED for ( i = 0; i < n; ++i ) { 40002a88: 00148493 addi s1,s1,1 <== NOT EXECUTED 40002a8c: ff2494e3 bne s1,s2,40002a74 <_Console_simple_Read+0x34> <== NOT EXECUTED } return n; } 40002a90: 01c12083 lw ra,28(sp) <== NOT EXECUTED 40002a94: 01812403 lw s0,24(sp) <== NOT EXECUTED 40002a98: 01412483 lw s1,20(sp) <== NOT EXECUTED 40002a9c: 01012903 lw s2,16(sp) <== NOT EXECUTED 40002aa0: 00098513 mv a0,s3 <== NOT EXECUTED 40002aa4: 00c12983 lw s3,12(sp) <== NOT EXECUTED 40002aa8: 02010113 addi sp,sp,32 <== NOT EXECUTED 40002aac: 00008067 ret <== NOT EXECUTED =============================================================================== 40003050 <_Malloc_System_state>: * * @return The current system state. */ RTEMS_INLINE_ROUTINE System_state_Codes _System_state_Get ( void ) { return _System_state_Current; 40003050: 9341a783 lw a5,-1740(gp) # 40020d74 <_System_state_Current> <== NOT EXECUTED Malloc_System_state _Malloc_System_state( void ) { System_state_Codes state = _System_state_Get(); if ( _System_state_Is_up( state ) ) { 40003054: 00200713 li a4,2 <== NOT EXECUTED if ( _Thread_Dispatch_is_enabled() ) { return MALLOC_SYSTEM_STATE_NORMAL; } else { return MALLOC_SYSTEM_STATE_NO_ALLOCATION; } } else if ( _System_state_Is_before_multitasking( state ) ) { 40003058: fff78513 addi a0,a5,-1 <== NOT EXECUTED 4000305c: 00a03533 snez a0,a0 <== NOT EXECUTED if ( _System_state_Is_up( state ) ) { 40003060: 00e78463 beq a5,a4,40003068 <_Malloc_System_state+0x18> <== NOT EXECUTED return MALLOC_SYSTEM_STATE_NORMAL; } else { return MALLOC_SYSTEM_STATE_NO_PROTECTION; } } 40003064: 00008067 ret <== NOT EXECUTED ISR_Level level; _ISR_Local_disable( level ); #endif enabled = _Thread_Dispatch_disable_level == 0; 40003068: 400237b7 lui a5,0x40023 <== NOT EXECUTED 4000306c: f8078793 addi a5,a5,-128 # 40022f80 <_Per_CPU_Information> <== NOT EXECUTED 40003070: 0307a503 lw a0,48(a5) <== NOT EXECUTED if ( _Thread_Dispatch_is_enabled() ) { 40003074: fe0508e3 beqz a0,40003064 <_Malloc_System_state+0x14> <== NOT EXECUTED return MALLOC_SYSTEM_STATE_NO_ALLOCATION; 40003078: 00200513 li a0,2 <== NOT EXECUTED } 4000307c: 00008067 ret <== NOT EXECUTED =============================================================================== 4001dce8 <_gettimeofday_r>: int _gettimeofday_r( struct _reent *ignored_reentrancy_stuff RTEMS_UNUSED, struct timeval *tp, void *__tz ) { 4001dce8: ff010113 addi sp,sp,-16 4001dcec: 00112623 sw ra,12(sp) if ( !tp ) 4001dcf0: 00058e63 beqz a1,4001dd0c <_gettimeofday_r+0x24> <== NEVER TAKEN 4001dcf4: 00058513 mv a0,a1 */ RTEMS_INLINE_ROUTINE void _TOD_Get_timeval( struct timeval *time ) { _Timecounter_Microtime( time ); 4001dcf8: bf9ea0ef jal ra,400088f0 <_Timecounter_Microtime> return 0; 4001dcfc: 00000513 li a0,0 struct timezone *tzp = __tz; return gettimeofday( tp, tzp ); } 4001dd00: 00c12083 lw ra,12(sp) 4001dd04: 01010113 addi sp,sp,16 4001dd08: 00008067 ret rtems_set_errno_and_return_minus_one( EFAULT ); 4001dd0c: 9bdf60ef jal ra,400146c8 <__errno> <== NOT EXECUTED 4001dd10: 00e00793 li a5,14 <== NOT EXECUTED 4001dd14: 00f52023 sw a5,0(a0) <== NOT EXECUTED 4001dd18: fff00513 li a0,-1 <== NOT EXECUTED 4001dd1c: fe5ff06f j 4001dd00 <_gettimeofday_r+0x18> <== NOT EXECUTED =============================================================================== 400015d8 <_libcsupport_scangr>: FILE *fp, struct group *grp, char *buffer, size_t bufsize ) { 400015d8: fd010113 addi sp,sp,-48 400015dc: 00c12623 sw a2,12(sp) 400015e0: 00d12423 sw a3,8(sp) int grgid; char *grmem, *cp; int memcount; if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0) 400015e4: 00000713 li a4,0 400015e8: 00810693 addi a3,sp,8 400015ec: 00c10613 addi a2,sp,12 { 400015f0: 02812423 sw s0,40(sp) 400015f4: 02912223 sw s1,36(sp) 400015f8: 02112623 sw ra,44(sp) 400015fc: 00050413 mv s0,a0 40001600: 00058493 mv s1,a1 if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0) 40001604: bd1ff0ef jal ra,400011d4 40001608: 00051e63 bnez a0,40001624 <_libcsupport_scangr+0x4c> || !scanString(fp, &grp->gr_passwd, &buffer, &bufsize, 0) || !scanInt(fp, &grgid) || !scanString(fp, &grmem, &buffer, &bufsize, 1)) return 0; 4000160c: 00000513 li a0,0 } } grp->gr_mem[memcount] = NULL; return 1; } 40001610: 02c12083 lw ra,44(sp) 40001614: 02812403 lw s0,40(sp) 40001618: 02412483 lw s1,36(sp) 4000161c: 03010113 addi sp,sp,48 40001620: 00008067 ret || !scanString(fp, &grp->gr_passwd, &buffer, &bufsize, 0) 40001624: 00000713 li a4,0 40001628: 00810693 addi a3,sp,8 4000162c: 00c10613 addi a2,sp,12 40001630: 00448593 addi a1,s1,4 40001634: 00040513 mv a0,s0 40001638: b9dff0ef jal ra,400011d4 4000163c: fc0508e3 beqz a0,4000160c <_libcsupport_scangr+0x34> <== NEVER TAKEN || !scanInt(fp, &grgid) 40001640: 01810593 addi a1,sp,24 40001644: 00040513 mv a0,s0 40001648: a71ff0ef jal ra,400010b8 4000164c: fc0500e3 beqz a0,4000160c <_libcsupport_scangr+0x34> <== NEVER TAKEN || !scanString(fp, &grmem, &buffer, &bufsize, 1)) 40001650: 00100713 li a4,1 40001654: 00810693 addi a3,sp,8 40001658: 00c10613 addi a2,sp,12 4000165c: 01c10593 addi a1,sp,28 40001660: 00040513 mv a0,s0 40001664: b71ff0ef jal ra,400011d4 40001668: fa0502e3 beqz a0,4000160c <_libcsupport_scangr+0x34> <== NEVER TAKEN grp->gr_gid = grgid; 4000166c: 01812783 lw a5,24(sp) if (grmem[0] == '\0') { 40001670: 01c12503 lw a0,28(sp) 40001674: 01300693 li a3,19 grp->gr_gid = grgid; 40001678: 00f49423 sh a5,8(s1) if (grmem[0] == '\0') { 4000167c: 00054783 lbu a5,0(a0) 40001680: 02078c63 beqz a5,400016b8 <_libcsupport_scangr+0xe0> 40001684: 00050713 mv a4,a0 for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40001688: 00100613 li a2,1 if(*cp == ',') 4000168c: 02c00593 li a1,44 for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40001690: 00170713 addi a4,a4,1 memcount++; 40001694: 00160693 addi a3,a2,1 if(*cp == ',') 40001698: 00b79863 bne a5,a1,400016a8 <_libcsupport_scangr+0xd0> if (bufsize < (((memcount+1)*sizeof(char *)) + 15)) 4000169c: 00260793 addi a5,a2,2 memcount++; 400016a0: 00068613 mv a2,a3 if (bufsize < (((memcount+1)*sizeof(char *)) + 15)) 400016a4: 00078693 mv a3,a5 for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 400016a8: 00074783 lbu a5,0(a4) 400016ac: fe0792e3 bnez a5,40001690 <_libcsupport_scangr+0xb8> if (bufsize < (((memcount+1)*sizeof(char *)) + 15)) 400016b0: 00269693 slli a3,a3,0x2 400016b4: 00f68693 addi a3,a3,15 400016b8: 00812783 lw a5,8(sp) 400016bc: f4d7e8e3 bltu a5,a3,4000160c <_libcsupport_scangr+0x34> grp->gr_mem = (char **)(((uintptr_t)buffer + 15) & ~15); 400016c0: 00c12683 lw a3,12(sp) 400016c4: 00f68693 addi a3,a3,15 400016c8: ff06f693 andi a3,a3,-16 400016cc: 00d4a623 sw a3,12(s1) if (grmem[0] == '\0') { 400016d0: 00054783 lbu a5,0(a0) 400016d4: 04078a63 beqz a5,40001728 <_libcsupport_scangr+0x150> grp->gr_mem[0] = grmem; 400016d8: 00a6a023 sw a0,0(a3) for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 400016dc: 01c12783 lw a5,28(sp) 400016e0: 00100593 li a1,1 if(*cp == ',') { 400016e4: 02c00513 li a0,44 for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 400016e8: 0007c703 lbu a4,0(a5) grp->gr_mem[memcount] = NULL; 400016ec: 00468693 addi a3,a3,4 for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 400016f0: 02070c63 beqz a4,40001728 <_libcsupport_scangr+0x150> <== NEVER TAKEN grp->gr_mem[memcount++] = cp + 1; 400016f4: 00259613 slli a2,a1,0x2 400016f8: 00178793 addi a5,a5,1 if(*cp == ',') { 400016fc: 00a71e63 bne a4,a0,40001718 <_libcsupport_scangr+0x140> *cp = '\0'; 40001700: fe078fa3 sb zero,-1(a5) grp->gr_mem[memcount++] = cp + 1; 40001704: 00c4a703 lw a4,12(s1) 40001708: 00158593 addi a1,a1,1 4000170c: 00c70733 add a4,a4,a2 40001710: 00f72023 sw a5,0(a4) grp->gr_mem[memcount] = NULL; 40001714: 00460613 addi a2,a2,4 for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) { 40001718: 0007c703 lbu a4,0(a5) 4000171c: fc071ce3 bnez a4,400016f4 <_libcsupport_scangr+0x11c> grp->gr_mem[memcount] = NULL; 40001720: 00c4a683 lw a3,12(s1) 40001724: 00c686b3 add a3,a3,a2 40001728: 0006a023 sw zero,0(a3) return 1; 4000172c: 00100513 li a0,1 40001730: ee1ff06f j 40001610 <_libcsupport_scangr+0x38> =============================================================================== 40001388 <_libcsupport_scanpw>: FILE *fp, struct passwd *pwd, char *buffer, size_t bufsize ) { 40001388: fd010113 addi sp,sp,-48 4000138c: 00c12623 sw a2,12(sp) 40001390: 00d12423 sw a3,8(sp) int pwuid, pwgid; if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0) 40001394: 00000713 li a4,0 40001398: 00810693 addi a3,sp,8 4000139c: 00c10613 addi a2,sp,12 { 400013a0: 02812423 sw s0,40(sp) 400013a4: 02912223 sw s1,36(sp) 400013a8: 02112623 sw ra,44(sp) 400013ac: 00050413 mv s0,a0 400013b0: 00058493 mv s1,a1 if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0) 400013b4: e21ff0ef jal ra,400011d4 400013b8: 00051e63 bnez a0,400013d4 <_libcsupport_scanpw+0x4c> || !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; 400013bc: 00000513 li a0,0 pwd->pw_uid = pwuid; pwd->pw_gid = pwgid; return 1; } 400013c0: 02c12083 lw ra,44(sp) 400013c4: 02812403 lw s0,40(sp) 400013c8: 02412483 lw s1,36(sp) 400013cc: 03010113 addi sp,sp,48 400013d0: 00008067 ret || !scanString(fp, &pwd->pw_passwd, &buffer, &bufsize, 0) 400013d4: 00000713 li a4,0 400013d8: 00810693 addi a3,sp,8 400013dc: 00c10613 addi a2,sp,12 400013e0: 00448593 addi a1,s1,4 400013e4: 00040513 mv a0,s0 400013e8: dedff0ef jal ra,400011d4 400013ec: fc0508e3 beqz a0,400013bc <_libcsupport_scanpw+0x34> <== NEVER TAKEN || !scanInt(fp, &pwuid) 400013f0: 01810593 addi a1,sp,24 400013f4: 00040513 mv a0,s0 400013f8: cc1ff0ef jal ra,400010b8 400013fc: fc0500e3 beqz a0,400013bc <_libcsupport_scanpw+0x34> || !scanInt(fp, &pwgid) 40001400: 01c10593 addi a1,sp,28 40001404: 00040513 mv a0,s0 40001408: cb1ff0ef jal ra,400010b8 4000140c: fa0508e3 beqz a0,400013bc <_libcsupport_scanpw+0x34> || !scanString(fp, &pwd->pw_comment, &buffer, &bufsize, 0) 40001410: 00000713 li a4,0 40001414: 00810693 addi a3,sp,8 40001418: 00c10613 addi a2,sp,12 4000141c: 00c48593 addi a1,s1,12 40001420: 00040513 mv a0,s0 40001424: db1ff0ef jal ra,400011d4 40001428: f8050ae3 beqz a0,400013bc <_libcsupport_scanpw+0x34> <== NEVER TAKEN || !scanString(fp, &pwd->pw_gecos, &buffer, &bufsize, 0) 4000142c: 00000713 li a4,0 40001430: 00810693 addi a3,sp,8 40001434: 00c10613 addi a2,sp,12 40001438: 01048593 addi a1,s1,16 4000143c: 00040513 mv a0,s0 40001440: d95ff0ef jal ra,400011d4 40001444: f6050ce3 beqz a0,400013bc <_libcsupport_scanpw+0x34> <== NEVER TAKEN || !scanString(fp, &pwd->pw_dir, &buffer, &bufsize, 0) 40001448: 00000713 li a4,0 4000144c: 00810693 addi a3,sp,8 40001450: 00c10613 addi a2,sp,12 40001454: 01448593 addi a1,s1,20 40001458: 00040513 mv a0,s0 4000145c: d79ff0ef jal ra,400011d4 40001460: f4050ee3 beqz a0,400013bc <_libcsupport_scanpw+0x34> <== NEVER TAKEN || !scanString(fp, &pwd->pw_shell, &buffer, &bufsize, 1)) 40001464: 00100713 li a4,1 40001468: 00810693 addi a3,sp,8 4000146c: 00c10613 addi a2,sp,12 40001470: 01848593 addi a1,s1,24 40001474: 00040513 mv a0,s0 40001478: d5dff0ef jal ra,400011d4 4000147c: f40500e3 beqz a0,400013bc <_libcsupport_scanpw+0x34> pwd->pw_uid = pwuid; 40001480: 01812783 lw a5,24(sp) return 1; 40001484: 00100513 li a0,1 pwd->pw_uid = pwuid; 40001488: 00f49423 sh a5,8(s1) pwd->pw_gid = pwgid; 4000148c: 01c12783 lw a5,28(sp) 40001490: 00f49523 sh a5,10(s1) return 1; 40001494: f2dff06f j 400013c0 <_libcsupport_scanpw+0x38> =============================================================================== 40003d10 <_read_r>: struct _reent *ptr RTEMS_UNUSED, int fd, void *buf, size_t nbytes ) { 40003d10: ff010113 addi sp,sp,-16 <== NOT EXECUTED 40003d14: 00112623 sw ra,12(sp) <== NOT EXECUTED 40003d18: 00060793 mv a5,a2 <== NOT EXECUTED rtems_libio_check_buffer( buffer ); 40003d1c: 04060663 beqz a2,40003d68 <_read_r+0x58> <== NOT EXECUTED 40003d20: 00068613 mv a2,a3 <== NOT EXECUTED rtems_libio_check_count( count ); 40003d24: 02068063 beqz a3,40003d44 <_read_r+0x34> <== NOT EXECUTED LIBIO_GET_IOP_WITH_ACCESS( fd, iop, LIBIO_FLAGS_READ, EBADF ); 40003d28: 8901a703 lw a4,-1904(gp) # 40020cd0 <== NOT EXECUTED 40003d2c: 00058513 mv a0,a1 <== NOT EXECUTED 40003d30: 02e5f263 bgeu a1,a4,40003d54 <_read_r+0x44> <== NOT EXECUTED return read( fd, buf, nbytes ); } 40003d34: 00c12083 lw ra,12(sp) <== NOT EXECUTED 40003d38: 00078593 mv a1,a5 <== NOT EXECUTED 40003d3c: 01010113 addi sp,sp,16 <== NOT EXECUTED 40003d40: ebdff06f j 40003bfc <== NOT EXECUTED rtems_libio_check_count( count ); 40003d44: 00000513 li a0,0 <== NOT EXECUTED } 40003d48: 00c12083 lw ra,12(sp) <== NOT EXECUTED 40003d4c: 01010113 addi sp,sp,16 <== NOT EXECUTED 40003d50: 00008067 ret <== NOT EXECUTED LIBIO_GET_IOP_WITH_ACCESS( fd, iop, LIBIO_FLAGS_READ, EBADF ); 40003d54: 175100ef jal ra,400146c8 <__errno> <== NOT EXECUTED 40003d58: 00900793 li a5,9 <== NOT EXECUTED 40003d5c: 00f52023 sw a5,0(a0) <== NOT EXECUTED 40003d60: fff00513 li a0,-1 <== NOT EXECUTED 40003d64: fe5ff06f j 40003d48 <_read_r+0x38> <== NOT EXECUTED rtems_libio_check_buffer( buffer ); 40003d68: 161100ef jal ra,400146c8 <__errno> <== NOT EXECUTED 40003d6c: 01600793 li a5,22 <== NOT EXECUTED 40003d70: 00f52023 sw a5,0(a0) <== NOT EXECUTED 40003d74: fff00513 li a0,-1 <== NOT EXECUTED 40003d78: fd1ff06f j 40003d48 <_read_r+0x38> <== NOT EXECUTED =============================================================================== 40000200 : #include RTEMS_STATIC_ASSERT( CLOCKS_PER_SEC == 1000000, clocks_per_sec ); clock_t clock( void ) { 40000200: fe010113 addi sp,sp,-32 struct timeval tv; _Timecounter_Microuptime( &tv ); 40000204: 00010513 mv a0,sp { 40000208: 00112e23 sw ra,28(sp) _Timecounter_Microuptime( &tv ); 4000020c: 0c1030ef jal ra,40003acc <_Timecounter_Microuptime> return (clock_t) (tv.tv_sec - 1) * CLOCKS_PER_SEC + tv.tv_usec; 40000210: 00012703 lw a4,0(sp) 40000214: 00412583 lw a1,4(sp) 40000218: 000f46b7 lui a3,0xf4 4000021c: 00173793 seqz a5,a4 40000220: 24068693 addi a3,a3,576 # f4240 40000224: fff70713 addi a4,a4,-1 40000228: 40f585b3 sub a1,a1,a5 4000022c: 02d70633 mul a2,a4,a3 40000230: 00812503 lw a0,8(sp) } 40000234: 01c12083 lw ra,28(sp) return (clock_t) (tv.tv_sec - 1) * CLOCKS_PER_SEC + tv.tv_usec; 40000238: 41f55813 srai a6,a0,0x1f } 4000023c: 02010113 addi sp,sp,32 return (clock_t) (tv.tv_sec - 1) * CLOCKS_PER_SEC + tv.tv_usec; 40000240: 02d587b3 mul a5,a1,a3 40000244: 00a60533 add a0,a2,a0 40000248: 00c535b3 sltu a1,a0,a2 4000024c: 02d73733 mulhu a4,a4,a3 <== NOT EXECUTED 40000250: 00e787b3 add a5,a5,a4 40000254: 010787b3 add a5,a5,a6 <== NOT EXECUTED } 40000258: 00f585b3 add a1,a1,a5 4000025c: 00008067 ret =============================================================================== 400028cc : { rtems_libio_t *iop; unsigned int flags; int rc; if ( (uint32_t) fd >= rtems_libio_number_iops ) { 400028cc: 8901a783 lw a5,-1904(gp) # 40020cd0 { 400028d0: ff010113 addi sp,sp,-16 400028d4: 00112623 sw ra,12(sp) 400028d8: 00812423 sw s0,8(sp) if ( (uint32_t) fd >= rtems_libio_number_iops ) { 400028dc: 06f57663 bgeu a0,a5,40002948 * * @return The iop corresponding to the specified file descriptor. */ static inline rtems_libio_t *rtems_libio_iop( int fd ) { return &rtems_libio_iops[ fd ]; 400028e0: 00151e13 slli t3,a0,0x1 400028e4: 00ae0433 add s0,t3,a0 400028e8: 40023337 lui t1,0x40023 400028ec: cd830313 addi t1,t1,-808 # 40022cd8 400028f0: 00441413 slli s0,s0,0x4 400028f4: 00830433 add s0,t1,s0 return atomic_load_explicit( obj, order ); #else unsigned int val; (void) order; val = *obj; 400028f8: 00042703 lw a4,0(s0) if ( ( flags & LIBIO_FLAGS_OPEN ) == 0 ) { rtems_set_errno_and_return_minus_one( EBADF ); } /* The expected flags */ flags &= LIBIO_FLAGS_REFERENCE_INC - 1U; 400028fc: 000018b7 lui a7,0x1 40002900: fff88593 addi a1,a7,-1 # fff if ( success ) { break; } if ( ( flags & ~( LIBIO_FLAGS_REFERENCE_INC - 1U ) ) != 0 ) { 40002904: fffff837 lui a6,0xfffff desired = flags & ~LIBIO_FLAGS_OPEN; 40002908: eff88893 addi a7,a7,-257 4000290c: 0300006f j 4000293c static inline uint32_t riscv_interrupt_disable( void ) { unsigned long mstatus; __asm__ volatile ( 40002910: 300476f3 csrrci a3,mstatus,8 "csrrc %0, mstatus, " RTEMS_XSTRING( RISCV_MSTATUS_MIE ) : "=&r" ( mstatus ) ); return mstatus & RISCV_MSTATUS_MIE; 40002914: 0086f693 andi a3,a3,8 unsigned int actual; (void) succ; (void) fail; _ISR_Local_disable( level ); actual = *obj; 40002918: 00042783 lw a5,0(s0) success = ( actual == *expected ); if ( success ) { 4000291c: 00f61663 bne a2,a5,40002928 40002920: 01177733 and a4,a4,a7 *obj = desired; 40002924: 00e42023 sw a4,0(s0) } static inline void riscv_interrupt_enable( uint32_t level ) { __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40002928: 3006a073 csrs mstatus,a3 if ( ( flags & ~( LIBIO_FLAGS_REFERENCE_INC - 1U ) ) != 0 ) { 4000292c: 0107f733 and a4,a5,a6 if ( success ) { 40002930: 02f60e63 beq a2,a5,4000296c if ( ( flags & ~( LIBIO_FLAGS_REFERENCE_INC - 1U ) ) != 0 ) { 40002934: 06071c63 bnez a4,400029ac <== ALWAYS TAKEN 40002938: 00078713 mv a4,a5 <== NOT EXECUTED if ( ( flags & LIBIO_FLAGS_OPEN ) == 0 ) { 4000293c: 10077793 andi a5,a4,256 <== NOT EXECUTED flags &= LIBIO_FLAGS_REFERENCE_INC - 1U; 40002940: 00b77633 and a2,a4,a1 if ( ( flags & LIBIO_FLAGS_OPEN ) == 0 ) { 40002944: fc0796e3 bnez a5,40002910 rtems_set_errno_and_return_minus_one( EBADF ); 40002948: 581110ef jal ra,400146c8 <__errno> 4000294c: fff00413 li s0,-1 <== NOT EXECUTED 40002950: 00900793 li a5,9 <== NOT EXECUTED rc = (*iop->pathinfo.handlers->close_h)( iop ); rtems_libio_free( iop ); return rc; } 40002954: 00c12083 lw ra,12(sp) <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EBADF ); 40002958: 00f52023 sw a5,0(a0) <== NOT EXECUTED } 4000295c: 00040513 mv a0,s0 <== NOT EXECUTED 40002960: 00812403 lw s0,8(sp) <== NOT EXECUTED 40002964: 01010113 addi sp,sp,16 <== NOT EXECUTED 40002968: 00008067 ret <== NOT EXECUTED rc = (*iop->pathinfo.handlers->close_h)( iop ); 4000296c: 00ae0533 add a0,t3,a0 <== NOT EXECUTED 40002970: 00451513 slli a0,a0,0x4 40002974: 00a30333 add t1,t1,a0 40002978: 02032783 lw a5,32(t1) 4000297c: 00040513 mv a0,s0 40002980: 0047a783 lw a5,4(a5) 40002984: 000780e7 jalr a5 40002988: 00050793 mv a5,a0 rtems_libio_free( iop ); 4000298c: 00040513 mv a0,s0 rc = (*iop->pathinfo.handlers->close_h)( iop ); 40002990: 00078413 mv s0,a5 rtems_libio_free( iop ); 40002994: 4b8000ef jal ra,40002e4c } 40002998: 00c12083 lw ra,12(sp) 4000299c: 00040513 mv a0,s0 400029a0: 00812403 lw s0,8(sp) 400029a4: 01010113 addi sp,sp,16 400029a8: 00008067 ret rtems_set_errno_and_return_minus_one( EBUSY ); 400029ac: 51d110ef jal ra,400146c8 <__errno> 400029b0: fff00413 li s0,-1 <== NOT EXECUTED 400029b4: 01000793 li a5,16 <== NOT EXECUTED } 400029b8: 00c12083 lw ra,12(sp) <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EBUSY ); 400029bc: 00f52023 sw a5,0(a0) <== NOT EXECUTED } 400029c0: 00040513 mv a0,s0 <== NOT EXECUTED 400029c4: 00812403 lw s0,8(sp) <== NOT EXECUTED 400029c8: 01010113 addi sp,sp,16 <== NOT EXECUTED 400029cc: 00008067 ret <== NOT EXECUTED =============================================================================== 400068ac : void endgrent(void) { 400068ac: ff010113 addi sp,sp,-16 pthread_once(&grp_once, grp_init); 400068b0: 400065b7 lui a1,0x40006 { 400068b4: 00912223 sw s1,4(sp) pthread_once(&grp_once, grp_init); 400068b8: 76858593 addi a1,a1,1896 # 40006768 400068bc: 8b818513 addi a0,gp,-1864 # 400142f8 { 400068c0: 00112623 sw ra,12(sp) 400068c4: 00812423 sw s0,8(sp) return pthread_getspecific(grp_key); 400068c8: 8b418493 addi s1,gp,-1868 # 400142f4 pthread_once(&grp_once, grp_init); 400068cc: ad9fd0ef jal ra,400043a4 return pthread_getspecific(grp_key); 400068d0: 0004a503 lw a0,0(s1) 400068d4: 180010ef jal ra,40007a54 grp_context *ctx = grp_get_context(); if (ctx == NULL) 400068d8: 02050c63 beqz a0,40006910 400068dc: 00050413 mv s0,a0 return; if (ctx->fp != NULL) { 400068e0: 00052503 lw a0,0(a0) 400068e4: 00050463 beqz a0,400068ec <== NEVER TAKEN fclose(ctx->fp); 400068e8: 2a8080ef jal ra,4000eb90 } free(ctx); 400068ec: 00040513 mv a0,s0 400068f0: cf9ff0ef jal ra,400065e8 pthread_setspecific(grp_key, NULL); } 400068f4: 00812403 lw s0,8(sp) pthread_setspecific(grp_key, NULL); 400068f8: 0004a503 lw a0,0(s1) } 400068fc: 00c12083 lw ra,12(sp) 40006900: 00412483 lw s1,4(sp) pthread_setspecific(grp_key, NULL); 40006904: 00000593 li a1,0 } 40006908: 01010113 addi sp,sp,16 pthread_setspecific(grp_key, NULL); 4000690c: 1940106f j 40007aa0 } 40006910: 00c12083 lw ra,12(sp) 40006914: 00812403 lw s0,8(sp) 40006918: 00412483 lw s1,4(sp) 4000691c: 01010113 addi sp,sp,16 40006920: 00008067 ret =============================================================================== 40000a3c : void endpwent(void) { if (passwd_fp != NULL) 40000a3c: 8b81a503 lw a0,-1864(gp) # 400140e0 40000a40: 00050463 beqz a0,40000a48 <== NEVER TAKEN fclose(passwd_fp); 40000a44: 1650e06f j 4000f3a8 } 40000a48: 00008067 ret <== NOT EXECUTED =============================================================================== 40001070 : st.st_mode = 0; st.st_uid = 0; st.st_gid = 0; LIBIO_GET_IOP( fd, iop ); 40001070: 88c1a783 lw a5,-1908(gp) # 40019b2c { 40001074: f6010113 addi sp,sp,-160 40001078: 08112e23 sw ra,156(sp) 4000107c: 08812c23 sw s0,152(sp) 40001080: 08912a23 sw s1,148(sp) 40001084: 09212823 sw s2,144(sp) 40001088: 09312623 sw s3,140(sp) 4000108c: 09412423 sw s4,136(sp) 40001090: 09512223 sw s5,132(sp) st.st_mode = 0; 40001094: 02012423 sw zero,40(sp) st.st_uid = 0; 40001098: 02011723 sh zero,46(sp) st.st_gid = 0; 4000109c: 02011823 sh zero,48(sp) LIBIO_GET_IOP( fd, iop ); 400010a0: 14f57063 bgeu a0,a5,400011e0 400010a4: 00151a13 slli s4,a0,0x1 400010a8: 00aa0433 add s0,s4,a0 400010ac: 4001b4b7 lui s1,0x4001b 400010b0: 00441413 slli s0,s0,0x4 400010b4: 68848493 addi s1,s1,1672 # 4001b688 400010b8: 00050993 mv s3,a0 400010bc: 00848ab3 add s5,s1,s0 __asm__ volatile ( 400010c0: 30047773 csrrci a4,mstatus,8 val = *obj; 400010c4: 000aa783 lw a5,0(s5) *obj = val + arg; 400010c8: 000016b7 lui a3,0x1 400010cc: 00d78633 add a2,a5,a3 400010d0: 00caa023 sw a2,0(s5) return mstatus & RISCV_MSTATUS_MIE; 400010d4: 00877713 andi a4,a4,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 400010d8: 30072073 csrs mstatus,a4 400010dc: 1007f793 andi a5,a5,256 400010e0: 0e078463 beqz a5,400011c8 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; 400010e4: 024aa503 lw a0,36(s5) rtems_filesystem_instance_lock( &iop->pathinfo ); rv = (*iop->pathinfo.handlers->fstat_h)( &iop->pathinfo, &st ); 400010e8: 01040413 addi s0,s0,16 400010ec: 00848433 add s0,s1,s0 (*mt_entry->ops->lock_h)( mt_entry ); 400010f0: 00c52783 lw a5,12(a0) 400010f4: 0007a783 lw a5,0(a5) 400010f8: 000780e7 jalr a5 400010fc: 020aa783 lw a5,32(s5) 40001100: 01810593 addi a1,sp,24 40001104: 00040513 mv a0,s0 40001108: 0187a783 lw a5,24(a5) 4000110c: 000780e7 jalr a5 40001110: 00050913 mv s2,a0 if ( rv == 0 ) { 40001114: 06050463 beqz a0,4000117c <== 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; 40001118: 013a0a33 add s4,s4,s3 4000111c: 004a1a13 slli s4,s4,0x4 40001120: 01448a33 add s4,s1,s4 40001124: 024a2503 lw a0,36(s4) (*mt_entry->ops->unlock_h)( mt_entry ); 40001128: 00c52783 lw a5,12(a0) 4000112c: 0047a783 lw a5,4(a5) 40001130: 000780e7 jalr a5 __asm__ volatile ( 40001134: 300477f3 csrrci a5,mstatus,8 *obj = val - arg; 40001138: 000aa703 lw a4,0(s5) 4000113c: fffff6b7 lui a3,0xfffff 40001140: 00d70733 add a4,a4,a3 40001144: 00eaa023 sw a4,0(s5) return mstatus & RISCV_MSTATUS_MIE; 40001148: 0087f793 andi a5,a5,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 4000114c: 3007a073 csrs mstatus,a5 } } rtems_filesystem_instance_unlock( &iop->pathinfo ); rtems_libio_iop_drop( iop ); if ( rv == 0 ) { 40001150: 04090a63 beqz s2,400011a4 rv = rtems_filesystem_chdir( &loc ); } return rv; } 40001154: 09c12083 lw ra,156(sp) 40001158: 09812403 lw s0,152(sp) 4000115c: 09412483 lw s1,148(sp) 40001160: 08c12983 lw s3,140(sp) 40001164: 08812a03 lw s4,136(sp) 40001168: 08412a83 lw s5,132(sp) 4000116c: 00090513 mv a0,s2 40001170: 09012903 lw s2,144(sp) 40001174: 0a010113 addi sp,sp,160 40001178: 00008067 ret bool access_ok = rtems_filesystem_check_access( 4000117c: 03015683 lhu a3,48(sp) 40001180: 02e15603 lhu a2,46(sp) 40001184: 02812583 lw a1,40(sp) 40001188: 00100513 li a0,1 4000118c: 631010ef jal ra,40002fbc if ( access_ok ) { 40001190: 02050263 beqz a0,400011b4 rtems_filesystem_location_clone( &loc, &iop->pathinfo ); 40001194: 00040593 mv a1,s0 40001198: 00010513 mv a0,sp 4000119c: 1c9090ef jal ra,4000ab64 400011a0: f79ff06f j 40001118 rv = rtems_filesystem_chdir( &loc ); 400011a4: 00010513 mv a0,sp 400011a8: 131090ef jal ra,4000aad8 400011ac: 00050913 mv s2,a0 400011b0: fa5ff06f j 40001154 errno = EACCES; 400011b4: 0490f0ef jal ra,400109fc <__errno> 400011b8: 00d00793 li a5,13 400011bc: 00f52023 sw a5,0(a0) rv = -1; 400011c0: fff00913 li s2,-1 400011c4: f55ff06f j 40001118 __asm__ volatile ( 400011c8: 300477f3 csrrci a5,mstatus,8 400011cc: 000aa703 lw a4,0(s5) 400011d0: 40d706b3 sub a3,a4,a3 400011d4: 00daa023 sw a3,0(s5) return mstatus & RISCV_MSTATUS_MIE; 400011d8: 0087f793 andi a5,a5,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 400011dc: 3007a073 csrs mstatus,a5 LIBIO_GET_IOP( fd, iop ); 400011e0: 01d0f0ef jal ra,400109fc <__errno> 400011e4: 00900793 li a5,9 400011e8: 00f52023 sw a5,0(a0) 400011ec: fff00913 li s2,-1 400011f0: f65ff06f j 40001154 =============================================================================== 400015e4 : int fcntl( int fd, int cmd, ... ) { 400015e4: fa010113 addi sp,sp,-96 LIBIO_GET_IOP( fd, iop ); 400015e8: 88c1a303 lw t1,-1908(gp) # 40019b2c int ret; va_list ap; va_start( ap, cmd ); 400015ec: 04810e13 addi t3,sp,72 { 400015f0: 02112e23 sw ra,60(sp) 400015f4: 02812c23 sw s0,56(sp) 400015f8: 02912a23 sw s1,52(sp) 400015fc: 03212823 sw s2,48(sp) 40001600: 03312623 sw s3,44(sp) 40001604: 03412423 sw s4,40(sp) 40001608: 03512223 sw s5,36(sp) 4000160c: 03612023 sw s6,32(sp) 40001610: 01712e23 sw s7,28(sp) 40001614: 01812c23 sw s8,24(sp) 40001618: 01912a23 sw s9,20(sp) 4000161c: 01a12823 sw s10,16(sp) 40001620: 04c12423 sw a2,72(sp) 40001624: 04d12623 sw a3,76(sp) 40001628: 04e12823 sw a4,80(sp) 4000162c: 04f12a23 sw a5,84(sp) 40001630: 05012c23 sw a6,88(sp) 40001634: 05112e23 sw a7,92(sp) va_start( ap, cmd ); 40001638: 01c12623 sw t3,12(sp) LIBIO_GET_IOP( fd, iop ); 4000163c: 38657663 bgeu a0,t1,400019c8 40001640: 00151b13 slli s6,a0,0x1 40001644: 00ab09b3 add s3,s6,a0 return &rtems_libio_iops[ fd ]; 40001648: 4001b937 lui s2,0x4001b 4000164c: 00499993 slli s3,s3,0x4 40001650: 68890913 addi s2,s2,1672 # 4001b688 40001654: 00050493 mv s1,a0 40001658: 01390433 add s0,s2,s3 __asm__ volatile ( 4000165c: 30047773 csrrci a4,mstatus,8 val = *obj; 40001660: 00042783 lw a5,0(s0) *obj = val + arg; 40001664: 000016b7 lui a3,0x1 40001668: 00d78633 add a2,a5,a3 4000166c: 00c42023 sw a2,0(s0) return mstatus & RISCV_MSTATUS_MIE; 40001670: 00877713 andi a4,a4,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40001674: 30072073 csrs mstatus,a4 40001678: 1007f793 andi a5,a5,256 4000167c: 32078a63 beqz a5,400019b0 40001680: 01400793 li a5,20 40001684: 00058a93 mv s5,a1 switch ( cmd ) { 40001688: 08b7e263 bltu a5,a1,4000170c 4000168c: 40018737 lui a4,0x40018 40001690: 00259793 slli a5,a1,0x2 40001694: a9070713 addi a4,a4,-1392 # 40017a90 <_Console_simple_Node_control+0x10> 40001698: 00e787b3 add a5,a5,a4 4000169c: 0007a783 lw a5,0(a5) 400016a0: 00078067 jr a5 errno = ENOTSUP; 400016a4: 3580f0ef jal ra,400109fc <__errno> 400016a8: 08600793 li a5,134 400016ac: 00f52023 sw a5,0(a0) ret = -1; 400016b0: fff00a13 li s4,-1 __asm__ volatile ( 400016b4: 300477f3 csrrci a5,mstatus,8 *obj = val - arg; 400016b8: 00042703 lw a4,0(s0) 400016bc: fffff6b7 lui a3,0xfffff 400016c0: 00d70733 add a4,a4,a3 400016c4: 00e42023 sw a4,0(s0) return mstatus & RISCV_MSTATUS_MIE; 400016c8: 0087f793 andi a5,a5,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 400016cc: 3007a073 csrs mstatus,a5 ret = vfcntl(fd,cmd,ap); va_end(ap); return ret; } 400016d0: 03c12083 lw ra,60(sp) 400016d4: 03812403 lw s0,56(sp) 400016d8: 03412483 lw s1,52(sp) 400016dc: 03012903 lw s2,48(sp) 400016e0: 02c12983 lw s3,44(sp) 400016e4: 02412a83 lw s5,36(sp) 400016e8: 02012b03 lw s6,32(sp) 400016ec: 01c12b83 lw s7,28(sp) 400016f0: 01812c03 lw s8,24(sp) 400016f4: 01412c83 lw s9,20(sp) 400016f8: 01012d03 lw s10,16(sp) 400016fc: 000a0513 mv a0,s4 40001700: 02812a03 lw s4,40(sp) 40001704: 06010113 addi sp,sp,96 40001708: 00008067 ret errno = EINVAL; 4000170c: 2f00f0ef jal ra,400109fc <__errno> 40001710: 01600793 li a5,22 40001714: 00f52023 sw a5,0(a0) ret = -1; 40001718: fff00a13 li s4,-1 4000171c: f99ff06f j 400016b4 val = *obj; 40001720: 00042503 lw a0,0(s0) oflag = rtems_libio_to_fcntl_flags( rtems_libio_iop_flags( iop ) ); 40001724: 7bc000ef jal ra,40001ee0 40001728: 00050c13 mv s8,a0 diop = rtems_libio_allocate(); 4000172c: 001000ef jal ra,40001f2c 40001730: 00050b93 mv s7,a0 if (diop != NULL) { 40001734: 2a050463 beqz a0,400019dc <== NEVER TAKEN const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry; 40001738: 02442503 lw a0,36(s0) (*mt_entry->ops->lock_h)( mt_entry ); 4000173c: 00c52783 lw a5,12(a0) 40001740: 0007a783 lw a5,0(a5) 40001744: 000780e7 jalr a5 rtems_filesystem_location_clone( &diop->pathinfo, &iop->pathinfo ); 40001748: 01098593 addi a1,s3,16 4000174c: 00b905b3 add a1,s2,a1 40001750: 010b8513 addi a0,s7,16 40001754: 410090ef jal ra,4000ab64 const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry; 40001758: 02442503 lw a0,36(s0) (*mt_entry->ops->unlock_h)( mt_entry ); 4000175c: 00c52783 lw a5,12(a0) 40001760: 0047a783 lw a5,4(a5) 40001764: 000780e7 jalr a5 rv = (*diop->pathinfo.handlers->open_h)( diop, NULL, oflag, 0 ); 40001768: 020ba783 lw a5,32(s7) 4000176c: 00000693 li a3,0 40001770: 000c0613 mv a2,s8 40001774: 0007a783 lw a5,0(a5) 40001778: 00000593 li a1,0 4000177c: 000b8513 mv a0,s7 40001780: 000780e7 jalr a5 40001784: 00050a13 mv s4,a0 if ( rv == 0 ) { 40001788: 20051863 bnez a0,40001998 <== NEVER TAKEN LIBIO_FLAGS_OPEN | rtems_libio_fcntl_flags( oflag ) 4000178c: 000c0513 mv a0,s8 40001790: 704000ef jal ra,40001e94 __asm__ volatile ( 40001794: 30047773 csrrci a4,mstatus,8 *obj = val | arg; 40001798: 000ba783 lw a5,0(s7) 4000179c: 00f567b3 or a5,a0,a5 400017a0: 1007e793 ori a5,a5,256 400017a4: 00fba023 sw a5,0(s7) return mstatus & RISCV_MSTATUS_MIE; 400017a8: 00877793 andi a5,a4,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 400017ac: 3007a073 csrs mstatus,a5 rv = rtems_libio_iop_to_descriptor( diop ); 400017b0: aaaab537 lui a0,0xaaaab 400017b4: 412b8a33 sub s4,s7,s2 400017b8: 404a5a13 srai s4,s4,0x4 400017bc: aab50513 addi a0,a0,-1365 # aaaaaaab 400017c0: 02aa0a33 mul s4,s4,a0 if (ret >= 0) { 400017c4: ee0a48e3 bltz s4,400016b4 <== NEVER TAKEN 400017c8: 0100006f j 400017d8 val = *obj; 400017cc: 00042503 lw a0,0(s0) ret = ((rtems_libio_iop_flags(iop) & LIBIO_FLAGS_CLOSE_ON_EXEC) != 0); 400017d0: 00b55513 srli a0,a0,0xb 400017d4: 00157a13 andi s4,a0,1 int err = (*iop->pathinfo.handlers->fcntl_h)( iop, cmd ); 400017d8: 009b04b3 add s1,s6,s1 400017dc: 00449493 slli s1,s1,0x4 400017e0: 009904b3 add s1,s2,s1 400017e4: 0204a783 lw a5,32(s1) 400017e8: 000a8593 mv a1,s5 400017ec: 00040513 mv a0,s0 400017f0: 0287a783 lw a5,40(a5) 400017f4: 000780e7 jalr a5 400017f8: 00050493 mv s1,a0 if (err) { 400017fc: ea050ce3 beqz a0,400016b4 <== ALWAYS TAKEN errno = err; 40001800: 1fc0f0ef jal ra,400109fc <__errno> <== NOT EXECUTED 40001804: 00952023 sw s1,0(a0) <== NOT EXECUTED ret = -1; 40001808: fff00a13 li s4,-1 <== NOT EXECUTED 4000180c: ea9ff06f j 400016b4 <== NOT EXECUTED if ( va_arg( ap, int ) ) 40001810: 000e2a03 lw s4,0(t3) 40001814: 160a0063 beqz s4,40001974 __asm__ volatile ( 40001818: 300477f3 csrrci a5,mstatus,8 *obj = val | arg; 4000181c: 00042703 lw a4,0(s0) 40001820: 000016b7 lui a3,0x1 40001824: 80068693 addi a3,a3,-2048 # 800 40001828: 00d76733 or a4,a4,a3 4000182c: 00e42023 sw a4,0(s0) return mstatus & RISCV_MSTATUS_MIE; 40001830: 0087f793 andi a5,a5,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40001834: 3007a073 csrs mstatus,a5 int ret = 0; 40001838: 00000a13 li s4,0 4000183c: f9dff06f j 400017d8 val = *obj; 40001840: 00042503 lw a0,0(s0) ret = rtems_libio_to_fcntl_flags( rtems_libio_iop_flags( iop ) ); 40001844: 69c000ef jal ra,40001ee0 40001848: 00050a13 mv s4,a0 if (ret >= 0) { 4000184c: e60a44e3 bltz s4,400016b4 <== NEVER TAKEN 40001850: f89ff06f j 400017d8 fd2 = va_arg( ap, int ); 40001854: 000e2d03 lw s10,0(t3) if ( (uint32_t) fd2 >= rtems_libio_number_iops ) { 40001858: 88c1a783 lw a5,-1908(gp) # 40019b2c 4000185c: 18fd7463 bgeu s10,a5,400019e4 return &rtems_libio_iops[ fd ]; 40001860: 001d1c13 slli s8,s10,0x1 40001864: 01ac0bb3 add s7,s8,s10 40001868: 004b9b93 slli s7,s7,0x4 4000186c: 01790cb3 add s9,s2,s7 if (iop != iop2) 40001870: 13940c63 beq s0,s9,400019a8 40001874: 000ca703 lw a4,0(s9) if ((rtems_libio_iop_flags( iop2 ) & LIBIO_FLAGS_OPEN) != 0) { 40001878: 10077713 andi a4,a4,256 4000187c: 00070e63 beqz a4,40001898 <== NEVER TAKEN rv = (*iop2->pathinfo.handlers->close_h)( iop2 ); 40001880: 020ca783 lw a5,32(s9) 40001884: 000c8513 mv a0,s9 40001888: 0047a783 lw a5,4(a5) 4000188c: 000780e7 jalr a5 40001890: 00050a13 mv s4,a0 if (rv == 0) { 40001894: f20518e3 bnez a0,400017c4 <== NEVER TAKEN 40001898: 00042503 lw a0,0(s0) oflag = rtems_libio_to_fcntl_flags( rtems_libio_iop_flags( iop ) ); 4000189c: 644000ef jal ra,40001ee0 400018a0: 00050a13 mv s4,a0 rtems_libio_iop_flags_set( iop2, rtems_libio_fcntl_flags( oflag ) ); 400018a4: 5f0000ef jal ra,40001e94 __asm__ volatile ( 400018a8: 300477f3 csrrci a5,mstatus,8 *obj = val | arg; 400018ac: 000ca703 lw a4,0(s9) 400018b0: 00a76733 or a4,a4,a0 400018b4: 00eca023 sw a4,0(s9) return mstatus & RISCV_MSTATUS_MIE; 400018b8: 0087f793 andi a5,a5,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 400018bc: 3007a073 csrs mstatus,a5 const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry; 400018c0: 02442503 lw a0,36(s0) (*mt_entry->ops->lock_h)( mt_entry ); 400018c4: 00c52783 lw a5,12(a0) 400018c8: 0007a783 lw a5,0(a5) 400018cc: 000780e7 jalr a5 rtems_filesystem_location_clone( &iop2->pathinfo, &iop->pathinfo ); 400018d0: 01098593 addi a1,s3,16 400018d4: 010b8513 addi a0,s7,16 400018d8: 00b905b3 add a1,s2,a1 400018dc: 00a90533 add a0,s2,a0 400018e0: 284090ef jal ra,4000ab64 const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry; 400018e4: 02442503 lw a0,36(s0) (*mt_entry->ops->unlock_h)( mt_entry ); 400018e8: 00c52783 lw a5,12(a0) 400018ec: 0047a783 lw a5,4(a5) 400018f0: 000780e7 jalr a5 rv = (*iop2->pathinfo.handlers->open_h)( iop2, NULL, oflag, 0 ); 400018f4: 01ac07b3 add a5,s8,s10 400018f8: 00479793 slli a5,a5,0x4 400018fc: 00f907b3 add a5,s2,a5 40001900: 0207a783 lw a5,32(a5) 40001904: 000a0613 mv a2,s4 40001908: 00000693 li a3,0 4000190c: 0007a783 lw a5,0(a5) 40001910: 00000593 li a1,0 40001914: 000c8513 mv a0,s9 40001918: 000780e7 jalr a5 4000191c: 00050a13 mv s4,a0 if ( rv == 0 ) { 40001920: ea0512e3 bnez a0,400017c4 <== NEVER TAKEN rv = fd2; 40001924: 000d0a13 mv s4,s10 if (ret >= 0) { 40001928: d80a46e3 bltz s4,400016b4 <== NEVER TAKEN 4000192c: eadff06f j 400017d8 flags = rtems_libio_fcntl_flags( va_arg( ap, int ) ); 40001930: 000e2503 lw a0,0(t3) 40001934: 560000ef jal ra,40001e94 __asm__ volatile ( 40001938: 300477f3 csrrci a5,mstatus,8 *obj = val & arg; 4000193c: 00042703 lw a4,0(s0) 40001940: dfe77713 andi a4,a4,-514 40001944: 00e42023 sw a4,0(s0) return mstatus & RISCV_MSTATUS_MIE; 40001948: 0087f793 andi a5,a5,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 4000194c: 3007a073 csrs mstatus,a5 __asm__ volatile ( 40001950: 300477f3 csrrci a5,mstatus,8 *obj = val | arg; 40001954: 00042703 lw a4,0(s0) rtems_libio_iop_flags_set( iop, flags & mask ); 40001958: 20157513 andi a0,a0,513 4000195c: 00a76533 or a0,a4,a0 40001960: 00a42023 sw a0,0(s0) return mstatus & RISCV_MSTATUS_MIE; 40001964: 0087f793 andi a5,a5,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40001968: 3007a073 csrs mstatus,a5 int ret = 0; 4000196c: 00000a13 li s4,0 40001970: e69ff06f j 400017d8 __asm__ volatile ( 40001974: 300477f3 csrrci a5,mstatus,8 *obj = val & arg; 40001978: 00042703 lw a4,0(s0) 4000197c: fffff6b7 lui a3,0xfffff 40001980: 7ff68693 addi a3,a3,2047 # fffff7ff 40001984: 00d77733 and a4,a4,a3 40001988: 00e42023 sw a4,0(s0) return mstatus & RISCV_MSTATUS_MIE; 4000198c: 0087f793 andi a5,a5,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40001990: 3007a073 csrs mstatus,a5 if (ret >= 0) { 40001994: e45ff06f j 400017d8 rtems_libio_free( diop ); 40001998: 000b8513 mv a0,s7 <== NOT EXECUTED 4000199c: 5ec000ef jal ra,40001f88 <== NOT EXECUTED if (ret >= 0) { 400019a0: d00a4ae3 bltz s4,400016b4 <== NOT EXECUTED 400019a4: e35ff06f j 400017d8 <== NOT EXECUTED int rv = 0; 400019a8: 00000a13 li s4,0 <== NOT EXECUTED 400019ac: e2dff06f j 400017d8 <== NOT EXECUTED __asm__ volatile ( 400019b0: 300477f3 csrrci a5,mstatus,8 *obj = val - arg; 400019b4: 00042703 lw a4,0(s0) 400019b8: 40d706b3 sub a3,a4,a3 400019bc: 00d42023 sw a3,0(s0) return mstatus & RISCV_MSTATUS_MIE; 400019c0: 0087f793 andi a5,a5,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 400019c4: 3007a073 csrs mstatus,a5 LIBIO_GET_IOP( fd, iop ); 400019c8: 0340f0ef jal ra,400109fc <__errno> 400019cc: 00900793 li a5,9 400019d0: 00f52023 sw a5,0(a0) 400019d4: fff00a13 li s4,-1 400019d8: cf9ff06f j 400016d0 rv = -1; 400019dc: fff00a13 li s4,-1 <== NOT EXECUTED 400019e0: cd5ff06f j 400016b4 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EBADF ); 400019e4: 0180f0ef jal ra,400109fc <__errno> <== NOT EXECUTED 400019e8: 00900793 li a5,9 <== NOT EXECUTED 400019ec: 00f52023 sw a5,0(a0) <== NOT EXECUTED 400019f0: fff00a13 li s4,-1 <== NOT EXECUTED 400019f4: cc1ff06f j 400016b4 <== NOT EXECUTED =============================================================================== 40005b0c : { long return_value; rtems_libio_t *iop; const rtems_filesystem_limits_and_options_t *the_limits; LIBIO_GET_IOP( fd, iop ); 40005b0c: 8201a783 lw a5,-2016(gp) # 4000ef88 { 40005b10: ff010113 addi sp,sp,-16 40005b14: 00112623 sw ra,12(sp) 40005b18: 00812423 sw s0,8(sp) LIBIO_GET_IOP( fd, iop ); 40005b1c: 10f57e63 bgeu a0,a5,40005c38 40005b20: 00151413 slli s0,a0,0x1 40005b24: 00a40433 add s0,s0,a0 40005b28: 400107b7 lui a5,0x40010 40005b2c: 5e878793 addi a5,a5,1512 # 400105e8 40005b30: 00441413 slli s0,s0,0x4 40005b34: 00f40433 add s0,s0,a5 __asm__ volatile ( 40005b38: 30047773 csrrci a4,mstatus,8 val = *obj; 40005b3c: 00042783 lw a5,0(s0) *obj = val + arg; 40005b40: 000016b7 lui a3,0x1 40005b44: 00d78633 add a2,a5,a3 40005b48: 00c42023 sw a2,0(s0) return mstatus & RISCV_MSTATUS_MIE; 40005b4c: 00877713 andi a4,a4,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40005b50: 30072073 csrs mstatus,a4 40005b54: 1007f793 andi a5,a5,256 40005b58: 0c078463 beqz a5,40005c20 <== NEVER TAKEN /* * Now process the information request. */ the_limits = iop->pathinfo.mt_entry->pathconf_limits_and_options; 40005b5c: 02442703 lw a4,36(s0) 40005b60: 00b00793 li a5,11 40005b64: 02c72703 lw a4,44(a4) switch ( name ) { 40005b68: 0ab7e263 bltu a5,a1,40005c0c 40005b6c: 4000e7b7 lui a5,0x4000e 40005b70: b9878793 addi a5,a5,-1128 # 4000db98 40005b74: 00259593 slli a1,a1,0x2 40005b78: 00f585b3 add a1,a1,a5 40005b7c: 0005a783 lw a5,0(a1) 40005b80: 00078067 jr a5 break; case _PC_ASYNC_IO: return_value = the_limits->posix_async_io; break; case _PC_PRIO_IO: return_value = the_limits->posix_prio_io; 40005b84: 02472503 lw a0,36(a4) __asm__ volatile ( 40005b88: 300477f3 csrrci a5,mstatus,8 *obj = val - arg; 40005b8c: 00042703 lw a4,0(s0) 40005b90: fffff6b7 lui a3,0xfffff 40005b94: 00d70733 add a4,a4,a3 40005b98: 00e42023 sw a4,0(s0) return mstatus & RISCV_MSTATUS_MIE; 40005b9c: 0087f793 andi a5,a5,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40005ba0: 3007a073 csrs mstatus,a5 break; } rtems_libio_iop_drop( iop ); return return_value; } 40005ba4: 00c12083 lw ra,12(sp) 40005ba8: 00812403 lw s0,8(sp) 40005bac: 01010113 addi sp,sp,16 40005bb0: 00008067 ret return_value = the_limits->posix_sync_io; 40005bb4: 02872503 lw a0,40(a4) break; 40005bb8: fd1ff06f j 40005b88 return_value = the_limits->link_max; 40005bbc: 00072503 lw a0,0(a4) break; 40005bc0: fc9ff06f j 40005b88 return_value = the_limits->max_canon; 40005bc4: 00472503 lw a0,4(a4) break; 40005bc8: fc1ff06f j 40005b88 return_value = the_limits->max_input; 40005bcc: 00872503 lw a0,8(a4) break; 40005bd0: fb9ff06f j 40005b88 return_value = the_limits->name_max; 40005bd4: 00c72503 lw a0,12(a4) break; 40005bd8: fb1ff06f j 40005b88 return_value = the_limits->path_max; 40005bdc: 01072503 lw a0,16(a4) break; 40005be0: fa9ff06f j 40005b88 return_value = the_limits->pipe_buf; 40005be4: 01472503 lw a0,20(a4) break; 40005be8: fa1ff06f j 40005b88 return_value = the_limits->posix_chown_restrictions; 40005bec: 01c72503 lw a0,28(a4) break; 40005bf0: f99ff06f j 40005b88 return_value = the_limits->posix_no_trunc; 40005bf4: 02072503 lw a0,32(a4) break; 40005bf8: f91ff06f j 40005b88 return_value = the_limits->posix_vdisable; 40005bfc: 02c72503 lw a0,44(a4) break; 40005c00: f89ff06f j 40005b88 return_value = the_limits->posix_async_io; 40005c04: 01872503 lw a0,24(a4) break; 40005c08: f81ff06f j 40005b88 errno = EINVAL; 40005c0c: 710060ef jal ra,4000c31c <__errno> 40005c10: 01600793 li a5,22 40005c14: 00f52023 sw a5,0(a0) return_value = -1; 40005c18: fff00513 li a0,-1 break; 40005c1c: f6dff06f j 40005b88 __asm__ volatile ( 40005c20: 300477f3 csrrci a5,mstatus,8 <== NOT EXECUTED 40005c24: 00042703 lw a4,0(s0) <== NOT EXECUTED 40005c28: 40d706b3 sub a3,a4,a3 <== NOT EXECUTED 40005c2c: 00d42023 sw a3,0(s0) <== NOT EXECUTED return mstatus & RISCV_MSTATUS_MIE; 40005c30: 0087f793 andi a5,a5,8 <== NOT EXECUTED __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40005c34: 3007a073 csrs mstatus,a5 <== NOT EXECUTED LIBIO_GET_IOP( fd, iop ); 40005c38: 6e4060ef jal ra,4000c31c <__errno> 40005c3c: 00900793 li a5,9 40005c40: 00f52023 sw a5,0(a0) 40005c44: fff00513 li a0,-1 40005c48: f5dff06f j 40005ba4 =============================================================================== 40002ab0 : void free( void *ptr ) { if ( !ptr ) 40002ab0: 06050c63 beqz a0,40002b28 <== NEVER TAKEN { 40002ab4: ff010113 addi sp,sp,-16 40002ab8: 00812423 sw s0,8(sp) 40002abc: 00112623 sw ra,12(sp) 40002ac0: 00050413 mv s0,a0 return; /* * Do not attempt to free memory if in a critical section or ISR. */ if ( _Malloc_System_state() != MALLOC_SYSTEM_STATE_NORMAL ) { 40002ac4: 58c000ef jal ra,40003050 <_Malloc_System_state> 40002ac8: 02051263 bnez a0,40002aec <== NEVER TAKEN _Malloc_Deferred_free(ptr); return; } if ( !_Protected_heap_Free( RTEMS_Malloc_Heap, ptr ) ) { 40002acc: 91c1a503 lw a0,-1764(gp) # 40020d5c 40002ad0: 00040593 mv a1,s0 40002ad4: 3a0060ef jal ra,40008e74 <_Protected_heap_Free> 40002ad8: 04050a63 beqz a0,40002b2c rtems_fatal( RTEMS_FATAL_SOURCE_INVALID_HEAP_FREE, (rtems_fatal_code) ptr ); } } 40002adc: 00c12083 lw ra,12(sp) 40002ae0: 00812403 lw s0,8(sp) 40002ae4: 01010113 addi sp,sp,16 40002ae8: 00008067 ret __asm__ volatile ( 40002aec: 30047773 csrrci a4,mstatus,8 Chain_Node *old_last; _Assert( _Chain_Is_node_off_chain( the_node ) ); tail = _Chain_Tail( the_chain ); old_last = tail->previous; 40002af0: 400207b7 lui a5,0x40020 <== NOT EXECUTED 40002af4: 71078793 addi a5,a5,1808 # 40020710 <_Malloc_GC_list> <== NOT EXECUTED 40002af8: 0087a683 lw a3,8(a5) <== NOT EXECUTED the_node->next = tail; 40002afc: 00478613 addi a2,a5,4 <== NOT EXECUTED 40002b00: 00c42023 sw a2,0(s0) <== NOT EXECUTED tail->previous = the_node; 40002b04: 0087a423 sw s0,8(a5) <== NOT EXECUTED old_last->next = the_node; 40002b08: 0086a023 sw s0,0(a3) <== NOT EXECUTED the_node->previous = old_last; 40002b0c: 00d42223 sw a3,4(s0) <== NOT EXECUTED return mstatus & RISCV_MSTATUS_MIE; 40002b10: 00877713 andi a4,a4,8 <== NOT EXECUTED __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40002b14: 30072073 csrs mstatus,a4 <== NOT EXECUTED 40002b18: 00c12083 lw ra,12(sp) <== NOT EXECUTED 40002b1c: 00812403 lw s0,8(sp) <== NOT EXECUTED 40002b20: 01010113 addi sp,sp,16 <== NOT EXECUTED 40002b24: 00008067 ret <== NOT EXECUTED 40002b28: 00008067 ret <== NOT EXECUTED RTEMS_NO_RETURN RTEMS_INLINE_ROUTINE void rtems_fatal( rtems_fatal_source fatal_source, rtems_fatal_code error_code ) { _Terminate( fatal_source, error_code ); 40002b2c: 00040593 mv a1,s0 <== NOT EXECUTED 40002b30: 00c00513 li a0,12 <== NOT EXECUTED 40002b34: 631040ef jal ra,40007964 <_Terminate> <== NOT EXECUTED =============================================================================== 40002ba0 : int fstat( int fd, struct stat *sbuf ) { 40002ba0: fe010113 addi sp,sp,-32 <== NOT EXECUTED 40002ba4: 00112e23 sw ra,28(sp) <== NOT EXECUTED 40002ba8: 00812c23 sw s0,24(sp) <== NOT EXECUTED 40002bac: 00912a23 sw s1,20(sp) <== NOT EXECUTED 40002bb0: 01212823 sw s2,16(sp) <== NOT EXECUTED 40002bb4: 01312623 sw s3,12(sp) <== NOT EXECUTED int rv; /* * Check to see if we were passed a valid pointer. */ if ( !sbuf ) 40002bb8: 0c058c63 beqz a1,40002c90 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EFAULT ); /* * Now process the stat() request. */ LIBIO_GET_IOP( fd, iop ); 40002bbc: 8901a703 lw a4,-1904(gp) # 40020cd0 <== NOT EXECUTED 40002bc0: 0ae57e63 bgeu a0,a4,40002c7c <== NOT EXECUTED 40002bc4: 00151413 slli s0,a0,0x1 <== NOT EXECUTED 40002bc8: 00a40433 add s0,s0,a0 <== NOT EXECUTED 40002bcc: 40023937 lui s2,0x40023 <== NOT EXECUTED 40002bd0: 00441413 slli s0,s0,0x4 <== NOT EXECUTED 40002bd4: cd890913 addi s2,s2,-808 # 40022cd8 <== NOT EXECUTED 40002bd8: 012404b3 add s1,s0,s2 <== NOT EXECUTED __asm__ volatile ( 40002bdc: 300476f3 csrrci a3,mstatus,8 <== NOT EXECUTED val = *obj; 40002be0: 0004a703 lw a4,0(s1) <== NOT EXECUTED *obj = val + arg; 40002be4: 000019b7 lui s3,0x1 <== NOT EXECUTED 40002be8: 01370633 add a2,a4,s3 <== NOT EXECUTED 40002bec: 00c4a023 sw a2,0(s1) <== NOT EXECUTED return mstatus & RISCV_MSTATUS_MIE; 40002bf0: 0086f693 andi a3,a3,8 <== NOT EXECUTED __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40002bf4: 3006a073 csrs mstatus,a3 <== NOT EXECUTED 40002bf8: 10077713 andi a4,a4,256 <== NOT EXECUTED 40002bfc: 06070463 beqz a4,40002c64 <== NOT EXECUTED /* * Zero out the stat structure so the various support * versions of stat don't have to. */ memset( sbuf, 0, sizeof(struct stat) ); 40002c00: 00058793 mv a5,a1 <== NOT EXECUTED 40002c04: 06800613 li a2,104 <== NOT EXECUTED 40002c08: 00000593 li a1,0 <== NOT EXECUTED 40002c0c: 00078513 mv a0,a5 <== NOT EXECUTED 40002c10: 170120ef jal ra,40014d80 <== NOT EXECUTED rv = (*iop->pathinfo.handlers->fstat_h)( &iop->pathinfo, sbuf ); 40002c14: 0204a703 lw a4,32(s1) <== NOT EXECUTED memset( sbuf, 0, sizeof(struct stat) ); 40002c18: 00050793 mv a5,a0 <== NOT EXECUTED rv = (*iop->pathinfo.handlers->fstat_h)( &iop->pathinfo, sbuf ); 40002c1c: 00078593 mv a1,a5 <== NOT EXECUTED 40002c20: 01872783 lw a5,24(a4) <== NOT EXECUTED 40002c24: 01040513 addi a0,s0,16 <== NOT EXECUTED 40002c28: 00a90533 add a0,s2,a0 <== NOT EXECUTED 40002c2c: 000780e7 jalr a5 <== NOT EXECUTED __asm__ volatile ( 40002c30: 300477f3 csrrci a5,mstatus,8 <== NOT EXECUTED *obj = val - arg; 40002c34: 0004a703 lw a4,0(s1) <== NOT EXECUTED 40002c38: 41370733 sub a4,a4,s3 <== NOT EXECUTED 40002c3c: 00e4a023 sw a4,0(s1) <== NOT EXECUTED return mstatus & RISCV_MSTATUS_MIE; 40002c40: 0087f793 andi a5,a5,8 <== NOT EXECUTED __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40002c44: 3007a073 csrs mstatus,a5 <== NOT EXECUTED rtems_libio_iop_drop( iop ); return rv; } 40002c48: 01c12083 lw ra,28(sp) <== NOT EXECUTED 40002c4c: 01812403 lw s0,24(sp) <== NOT EXECUTED 40002c50: 01412483 lw s1,20(sp) <== NOT EXECUTED 40002c54: 01012903 lw s2,16(sp) <== NOT EXECUTED 40002c58: 00c12983 lw s3,12(sp) <== NOT EXECUTED 40002c5c: 02010113 addi sp,sp,32 <== NOT EXECUTED 40002c60: 00008067 ret <== NOT EXECUTED __asm__ volatile ( 40002c64: 300477f3 csrrci a5,mstatus,8 <== NOT EXECUTED 40002c68: 0004a703 lw a4,0(s1) <== NOT EXECUTED 40002c6c: 41370733 sub a4,a4,s3 <== NOT EXECUTED 40002c70: 00e4a023 sw a4,0(s1) <== NOT EXECUTED return mstatus & RISCV_MSTATUS_MIE; 40002c74: 0087f793 andi a5,a5,8 <== NOT EXECUTED __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40002c78: 3007a073 csrs mstatus,a5 <== NOT EXECUTED LIBIO_GET_IOP( fd, iop ); 40002c7c: 24d110ef jal ra,400146c8 <__errno> <== NOT EXECUTED 40002c80: 00900793 li a5,9 <== NOT EXECUTED 40002c84: 00f52023 sw a5,0(a0) <== NOT EXECUTED 40002c88: fff00513 li a0,-1 <== NOT EXECUTED 40002c8c: fbdff06f j 40002c48 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EFAULT ); 40002c90: 239110ef jal ra,400146c8 <__errno> <== NOT EXECUTED 40002c94: 00e00793 li a5,14 <== NOT EXECUTED 40002c98: 00f52023 sw a5,0(a0) <== NOT EXECUTED 40002c9c: fff00513 li a0,-1 <== NOT EXECUTED 40002ca0: fa9ff06f j 40002c48 <== NOT EXECUTED =============================================================================== 4000ea7c : #include #include int ftruncate( int fd, off_t length ) { 4000ea7c: ff010113 addi sp,sp,-16 <== NOT EXECUTED 4000ea80: 00112623 sw ra,12(sp) <== NOT EXECUTED 4000ea84: 00812423 sw s0,8(sp) <== NOT EXECUTED 4000ea88: 00912223 sw s1,4(sp) <== NOT EXECUTED int rv = 0; if ( length >= 0 ) { 4000ea8c: 0c064263 bltz a2,4000eb50 <== NOT EXECUTED rtems_libio_t *iop; LIBIO_GET_IOP_WITH_ACCESS( fd, iop, LIBIO_FLAGS_WRITE, EINVAL ); 4000ea90: 8901a783 lw a5,-1904(gp) # 40020cd0 <== NOT EXECUTED 4000ea94: 0cf57863 bgeu a0,a5,4000eb64 <== NOT EXECUTED return &rtems_libio_iops[ fd ]; 4000ea98: 00151413 slli s0,a0,0x1 <== NOT EXECUTED 4000ea9c: 00a40433 add s0,s0,a0 <== NOT EXECUTED 4000eaa0: 400237b7 lui a5,0x40023 <== NOT EXECUTED 4000eaa4: cd878793 addi a5,a5,-808 # 40022cd8 <== NOT EXECUTED 4000eaa8: 00441413 slli s0,s0,0x4 <== NOT EXECUTED 4000eaac: 00f40433 add s0,s0,a5 <== NOT EXECUTED __asm__ volatile ( 4000eab0: 300477f3 csrrci a5,mstatus,8 <== NOT EXECUTED val = *obj; 4000eab4: 00042683 lw a3,0(s0) <== NOT EXECUTED *obj = val + arg; 4000eab8: 000014b7 lui s1,0x1 <== NOT EXECUTED 4000eabc: 00968733 add a4,a3,s1 <== NOT EXECUTED 4000eac0: 00e42023 sw a4,0(s0) <== NOT EXECUTED return mstatus & RISCV_MSTATUS_MIE; 4000eac4: 0087f793 andi a5,a5,8 <== NOT EXECUTED __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 4000eac8: 3007a073 csrs mstatus,a5 <== NOT EXECUTED 4000eacc: 10400793 li a5,260 <== NOT EXECUTED 4000ead0: 1046f713 andi a4,a3,260 <== NOT EXECUTED 4000ead4: 04f71063 bne a4,a5,4000eb14 <== NOT EXECUTED rv = (*iop->pathinfo.handlers->ftruncate_h)( iop, length ); 4000ead8: 02042783 lw a5,32(s0) <== NOT EXECUTED 4000eadc: 00040513 mv a0,s0 <== NOT EXECUTED 4000eae0: 01c7a783 lw a5,28(a5) <== NOT EXECUTED 4000eae4: 000780e7 jalr a5 <== NOT EXECUTED __asm__ volatile ( 4000eae8: 300477f3 csrrci a5,mstatus,8 <== NOT EXECUTED *obj = val - arg; 4000eaec: 00042703 lw a4,0(s0) <== NOT EXECUTED 4000eaf0: 40970733 sub a4,a4,s1 <== NOT EXECUTED 4000eaf4: 00e42023 sw a4,0(s0) <== NOT EXECUTED return mstatus & RISCV_MSTATUS_MIE; 4000eaf8: 0087f793 andi a5,a5,8 <== NOT EXECUTED __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 4000eafc: 3007a073 csrs mstatus,a5 <== NOT EXECUTED errno = EINVAL; rv = -1; } return rv; } 4000eb00: 00c12083 lw ra,12(sp) <== NOT EXECUTED 4000eb04: 00812403 lw s0,8(sp) <== NOT EXECUTED 4000eb08: 00412483 lw s1,4(sp) <== NOT EXECUTED 4000eb0c: 01010113 addi sp,sp,16 <== NOT EXECUTED 4000eb10: 00008067 ret <== NOT EXECUTED __asm__ volatile ( 4000eb14: 300477f3 csrrci a5,mstatus,8 <== NOT EXECUTED 4000eb18: 00042703 lw a4,0(s0) <== NOT EXECUTED 4000eb1c: 40970733 sub a4,a4,s1 <== NOT EXECUTED 4000eb20: 00e42023 sw a4,0(s0) <== NOT EXECUTED return mstatus & RISCV_MSTATUS_MIE; 4000eb24: 0087f793 andi a5,a5,8 <== NOT EXECUTED __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 4000eb28: 3007a073 csrs mstatus,a5 <== NOT EXECUTED LIBIO_GET_IOP_WITH_ACCESS( fd, iop, LIBIO_FLAGS_WRITE, EINVAL ); 4000eb2c: 1006f413 andi s0,a3,256 <== NOT EXECUTED 4000eb30: 00143413 seqz s0,s0 <== NOT EXECUTED 4000eb34: 40800433 neg s0,s0 <== NOT EXECUTED 4000eb38: ff347413 andi s0,s0,-13 <== NOT EXECUTED 4000eb3c: 38d050ef jal ra,400146c8 <__errno> <== NOT EXECUTED 4000eb40: 01640413 addi s0,s0,22 <== NOT EXECUTED 4000eb44: 00852023 sw s0,0(a0) <== NOT EXECUTED 4000eb48: fff00513 li a0,-1 <== NOT EXECUTED 4000eb4c: fb5ff06f j 4000eb00 <== NOT EXECUTED errno = EINVAL; 4000eb50: 379050ef jal ra,400146c8 <__errno> <== NOT EXECUTED 4000eb54: 01600793 li a5,22 <== NOT EXECUTED 4000eb58: 00f52023 sw a5,0(a0) <== NOT EXECUTED rv = -1; 4000eb5c: fff00513 li a0,-1 <== NOT EXECUTED 4000eb60: fa1ff06f j 4000eb00 <== NOT EXECUTED LIBIO_GET_IOP_WITH_ACCESS( fd, iop, LIBIO_FLAGS_WRITE, EINVAL ); 4000eb64: 365050ef jal ra,400146c8 <__errno> <== NOT EXECUTED 4000eb68: 00900793 li a5,9 <== NOT EXECUTED 4000eb6c: 00f52023 sw a5,0(a0) <== NOT EXECUTED 4000eb70: fff00513 li a0,-1 <== NOT EXECUTED 4000eb74: f8dff06f j 4000eb00 <== NOT EXECUTED =============================================================================== 40002cb0 : #include #include int getchark(void) { if ( BSP_poll_char ) 40002cb0: 9041a783 lw a5,-1788(gp) # 40020d44 <== NOT EXECUTED 40002cb4: 00078463 beqz a5,40002cbc <== NOT EXECUTED return (*BSP_poll_char)(); 40002cb8: 00078067 jr a5 <== NOT EXECUTED return -1; } 40002cbc: fff00513 li a0,-1 <== NOT EXECUTED 40002cc0: 00008067 ret <== NOT EXECUTED =============================================================================== 40006778 : } static grp_context *grp_get_context(void) { pthread_once(&grp_once, grp_init); 40006778: 400065b7 lui a1,0x40006 return pthread_getspecific(grp_key); } struct group *getgrent(void) { 4000677c: ff010113 addi sp,sp,-16 pthread_once(&grp_once, grp_init); 40006780: 76858593 addi a1,a1,1896 # 40006768 40006784: 8b818513 addi a0,gp,-1864 # 400142f8 { 40006788: 00112623 sw ra,12(sp) 4000678c: 00812423 sw s0,8(sp) pthread_once(&grp_once, grp_init); 40006790: c15fd0ef jal ra,400043a4 return pthread_getspecific(grp_key); 40006794: 8b41a503 lw a0,-1868(gp) # 400142f4 40006798: 2bc010ef jal ra,40007a54 grp_context *ctx = grp_get_context(); if (ctx == NULL) 4000679c: 02050e63 beqz a0,400067d8 400067a0: 00050613 mv a2,a0 return NULL; if (ctx->fp == NULL) 400067a4: 00052503 lw a0,0(a0) 400067a8: 02050863 beqz a0,400067d8 <== NEVER TAKEN return NULL; if (!_libcsupport_scangr(ctx->fp, &ctx->grp, ctx->buf, sizeof(ctx->buf))) 400067ac: 10460413 addi s0,a2,260 400067b0: 10000693 li a3,256 400067b4: 00460613 addi a2,a2,4 400067b8: 00040593 mv a1,s0 400067bc: e1dfa0ef jal ra,400015d8 <_libcsupport_scangr> 400067c0: 00050c63 beqz a0,400067d8 return NULL; return &ctx->grp; } 400067c4: 00c12083 lw ra,12(sp) 400067c8: 00040513 mv a0,s0 400067cc: 00812403 lw s0,8(sp) 400067d0: 01010113 addi sp,sp,16 400067d4: 00008067 ret return NULL; 400067d8: 00000413 li s0,0 } 400067dc: 00c12083 lw ra,12(sp) 400067e0: 00040513 mv a0,s0 400067e4: 00812403 lw s0,8(sp) 400067e8: 01010113 addi sp,sp,16 400067ec: 00008067 ret =============================================================================== 40000978 : if ( !name ) 40000978: 04050e63 beqz a0,400009d4 { 4000097c: ff010113 addi sp,sp,-16 40000980: 00812423 sw s0,8(sp) 40000984: 00112623 sw ra,12(sp) if ( namesize < LOGIN_NAME_MAX ) 40000988: 00800793 li a5,8 4000098c: 00050413 mv s0,a0 return ERANGE; 40000990: 02200513 li a0,34 if ( namesize < LOGIN_NAME_MAX ) 40000994: 02b7f263 bgeu a5,a1,400009b8 pw = getpwuid(getuid()); 40000998: 0a8000ef jal ra,40000a40 <== NOT EXECUTED 4000099c: 05c000ef jal ra,400009f8 <== NOT EXECUTED if ( pw ) 400009a0: 02050463 beqz a0,400009c8 <== NOT EXECUTED pname = pw->pw_name; 400009a4: 00052583 lw a1,0(a0) <== NOT EXECUTED strncpy( name, pname, LOGIN_NAME_MAX ); 400009a8: 00900613 li a2,9 <== NOT EXECUTED 400009ac: 00040513 mv a0,s0 <== NOT EXECUTED 400009b0: 260100ef jal ra,40010c10 <== NOT EXECUTED 400009b4: 00000513 li a0,0 <== NOT EXECUTED return 0; } 400009b8: 00c12083 lw ra,12(sp) 400009bc: 00812403 lw s0,8(sp) 400009c0: 01010113 addi sp,sp,16 400009c4: 00008067 ret pname = ""; 400009c8: 400115b7 lui a1,0x40011 <== NOT EXECUTED 400009cc: 74058593 addi a1,a1,1856 # 40011740 <== NOT EXECUTED 400009d0: fd9ff06f j 400009a8 <== NOT EXECUTED return EFAULT; 400009d4: 00e00513 li a0,14 } 400009d8: 00008067 ret =============================================================================== 400034dc : */ int gettimeofday( struct timeval *__restrict tp, void *__restrict __tz RTEMS_UNUSED ) { 400034dc: ff010113 addi sp,sp,-16 <== NOT EXECUTED 400034e0: 00112623 sw ra,12(sp) <== NOT EXECUTED /* struct timezone* tzp = (struct timezone*) __tz; */ if ( !tp ) 400034e4: 00050c63 beqz a0,400034fc <== NOT EXECUTED */ RTEMS_INLINE_ROUTINE void _TOD_Get_timeval( struct timeval *time ) { _Timecounter_Microtime( time ); 400034e8: 3c8050ef jal ra,400088b0 <_Timecounter_Microtime> <== NOT EXECUTED * Timezone information ignored by the OS proper. Per email * with Eric Norum, this is how GNU/Linux, Solaris, and MacOS X * do it. This puts us in good company. */ return 0; 400034ec: 00000513 li a0,0 <== NOT EXECUTED } 400034f0: 00c12083 lw ra,12(sp) <== NOT EXECUTED 400034f4: 01010113 addi sp,sp,16 <== NOT EXECUTED 400034f8: 00008067 ret <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EFAULT ); 400034fc: 1650f0ef jal ra,40012e60 <__errno> <== NOT EXECUTED 40003500: 00e00793 li a5,14 <== NOT EXECUTED 40003504: 00f52023 sw a5,0(a0) <== NOT EXECUTED 40003508: fff00513 li a0,-1 <== NOT EXECUTED 4000350c: fe5ff06f j 400034f0 <== NOT EXECUTED =============================================================================== 40002f30 : off_t lseek( int fd, off_t offset, int whence ) { rtems_libio_t *iop; off_t rv; LIBIO_GET_IOP( fd, iop ); 40002f30: 8901a783 lw a5,-1904(gp) # 40020cd0 <== NOT EXECUTED { 40002f34: ff010113 addi sp,sp,-16 <== NOT EXECUTED 40002f38: 00112623 sw ra,12(sp) <== NOT EXECUTED 40002f3c: 00812423 sw s0,8(sp) <== NOT EXECUTED 40002f40: 00912223 sw s1,4(sp) <== NOT EXECUTED LIBIO_GET_IOP( fd, iop ); 40002f44: 08f57a63 bgeu a0,a5,40002fd8 <== NOT EXECUTED 40002f48: 00151413 slli s0,a0,0x1 <== NOT EXECUTED 40002f4c: 00a40433 add s0,s0,a0 <== NOT EXECUTED 40002f50: 400237b7 lui a5,0x40023 <== NOT EXECUTED 40002f54: cd878793 addi a5,a5,-808 # 40022cd8 <== NOT EXECUTED 40002f58: 00441413 slli s0,s0,0x4 <== NOT EXECUTED 40002f5c: 00f40433 add s0,s0,a5 <== NOT EXECUTED __asm__ volatile ( 40002f60: 30047773 csrrci a4,mstatus,8 <== NOT EXECUTED val = *obj; 40002f64: 00042783 lw a5,0(s0) <== NOT EXECUTED *obj = val + arg; 40002f68: 000014b7 lui s1,0x1 <== NOT EXECUTED 40002f6c: 00978533 add a0,a5,s1 <== NOT EXECUTED 40002f70: 00a42023 sw a0,0(s0) <== NOT EXECUTED return mstatus & RISCV_MSTATUS_MIE; 40002f74: 00877713 andi a4,a4,8 <== NOT EXECUTED __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40002f78: 30072073 csrs mstatus,a4 <== NOT EXECUTED 40002f7c: 1007f793 andi a5,a5,256 <== NOT EXECUTED 40002f80: 04078063 beqz a5,40002fc0 <== NOT EXECUTED rv = (*iop->pathinfo.handlers->lseek_h)( iop, offset, whence ); 40002f84: 02042783 lw a5,32(s0) <== NOT EXECUTED 40002f88: 00040513 mv a0,s0 <== NOT EXECUTED 40002f8c: 0147a783 lw a5,20(a5) <== NOT EXECUTED 40002f90: 000780e7 jalr a5 <== NOT EXECUTED __asm__ volatile ( 40002f94: 300477f3 csrrci a5,mstatus,8 <== NOT EXECUTED *obj = val - arg; 40002f98: 00042703 lw a4,0(s0) <== NOT EXECUTED 40002f9c: 40970733 sub a4,a4,s1 <== NOT EXECUTED 40002fa0: 00e42023 sw a4,0(s0) <== NOT EXECUTED return mstatus & RISCV_MSTATUS_MIE; 40002fa4: 0087f793 andi a5,a5,8 <== NOT EXECUTED __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40002fa8: 3007a073 csrs mstatus,a5 <== NOT EXECUTED rtems_libio_iop_drop( iop ); return rv; } 40002fac: 00c12083 lw ra,12(sp) <== NOT EXECUTED 40002fb0: 00812403 lw s0,8(sp) <== NOT EXECUTED 40002fb4: 00412483 lw s1,4(sp) <== NOT EXECUTED 40002fb8: 01010113 addi sp,sp,16 <== NOT EXECUTED 40002fbc: 00008067 ret <== NOT EXECUTED __asm__ volatile ( 40002fc0: 300477f3 csrrci a5,mstatus,8 <== NOT EXECUTED 40002fc4: 00042703 lw a4,0(s0) <== NOT EXECUTED 40002fc8: 40970733 sub a4,a4,s1 <== NOT EXECUTED 40002fcc: 00e42023 sw a4,0(s0) <== NOT EXECUTED return mstatus & RISCV_MSTATUS_MIE; 40002fd0: 0087f793 andi a5,a5,8 <== NOT EXECUTED __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40002fd4: 3007a073 csrs mstatus,a5 <== NOT EXECUTED LIBIO_GET_IOP( fd, iop ); 40002fd8: 6f0110ef jal ra,400146c8 <__errno> <== NOT EXECUTED 40002fdc: 00900793 li a5,9 <== NOT EXECUTED 40002fe0: 00f52023 sw a5,0(a0) <== NOT EXECUTED 40002fe4: fff00593 li a1,-1 <== NOT EXECUTED 40002fe8: fff00513 li a0,-1 <== NOT EXECUTED 40002fec: fc1ff06f j 40002fac <== NOT EXECUTED =============================================================================== 40003394 : const char *target, const char *filesystemtype, rtems_filesystem_options_t options, const void *data ) { 40003394: f8010113 addi sp,sp,-128 40003398: 06112e23 sw ra,124(sp) 4000339c: 06812c23 sw s0,120(sp) 400033a0: 06912a23 sw s1,116(sp) 400033a4: 07212823 sw s2,112(sp) 400033a8: 07312623 sw s3,108(sp) 400033ac: 07412423 sw s4,104(sp) 400033b0: 07512223 sw s5,100(sp) 400033b4: 07612023 sw s6,96(sp) 400033b8: 05712e23 sw s7,92(sp) 400033bc: 05812c23 sw s8,88(sp) 400033c0: 05912a23 sw s9,84(sp) 400033c4: 05a12823 sw s10,80(sp) int rv = 0; if ( 400033c8: 00100793 li a5,1 400033cc: 2cd7ec63 bltu a5,a3,400036a4 400033d0: 00050a13 mv s4,a0 options == RTEMS_FILESYSTEM_READ_ONLY || options == RTEMS_FILESYSTEM_READ_WRITE ) { rtems_filesystem_fsmount_me_t fsmount_me_h = rtems_filesystem_get_mount_handler( filesystemtype ); 400033d4: 00060513 mv a0,a2 400033d8: 00068493 mv s1,a3 400033dc: 00058913 mv s2,a1 400033e0: 00060993 mv s3,a2 400033e4: 00070b93 mv s7,a4 400033e8: 304000ef jal ra,400036ec 400033ec: 00050a93 mv s5,a0 if ( fsmount_me_h != NULL ) { 400033f0: 2a050a63 beqz a0,400036a4 const char *target = target_or_null != NULL ? target_or_null : "/"; 400033f4: 1e090663 beqz s2,400035e0 size_t target_size = strlen( target ) + 1; 400033f8: 00090513 mv a0,s2 400033fc: 198120ef jal ra,40015594 40003400: 00150b13 addi s6,a0,1 40003404: 00090c13 mv s8,s2 size_t filesystemtype_size = strlen( filesystemtype ) + 1; 40003408: 00098513 mv a0,s3 4000340c: 188120ef jal ra,40015594 40003410: 00150c93 addi s9,a0,1 size_t source_size = source_or_null != NULL ? 40003414: 06550413 addi s0,a0,101 strlen( source_or_null ) + 1 : 0; 40003418: 180a0863 beqz s4,400035a8 4000341c: 000a0513 mv a0,s4 40003420: 174120ef jal ra,40015594 40003424: 00150d13 addi s10,a0,1 size_t size = sizeof( rtems_filesystem_mount_table_entry_t ) 40003428: 016405b3 add a1,s0,s6 rtems_filesystem_mount_table_entry_t *mt_entry = calloc( 1, size ); 4000342c: 01a585b3 add a1,a1,s10 40003430: 00100513 li a0,1 40003434: c50ff0ef jal ra,40002884 40003438: 00050413 mv s0,a0 if ( mt_entry != NULL ) { 4000343c: 1e050463 beqz a0,40003624 <== NEVER TAKEN char *str = (char *) mt_fs_root + sizeof( *mt_fs_root ); 40003440: 06450793 addi a5,a0,100 memcpy( str, filesystemtype, filesystemtype_size ); 40003444: 000c8613 mv a2,s9 40003448: 00098593 mv a1,s3 4000344c: 00078513 mv a0,a5 40003450: 009110ef jal ra,40014c58 str += filesystemtype_size; 40003454: 01950cb3 add s9,a0,s9 mt_entry->type = str; 40003458: 02a42a23 sw a0,52(s0) memcpy( str, source_or_null, source_size ); 4000345c: 000d0613 mv a2,s10 40003460: 000a0593 mv a1,s4 40003464: 000c8513 mv a0,s9 40003468: 7f0110ef jal ra,40014c58 rtems_filesystem_global_location_t *mt_fs_root = 4000346c: 04040993 addi s3,s0,64 mt_entry->dev = str; 40003470: 03942c23 sw s9,56(s0) str += source_size; 40003474: 01ac8d33 add s10,s9,s10 memcpy( str, target, target_size ); 40003478: 000b0613 mv a2,s6 4000347c: 000c0593 mv a1,s8 40003480: 000d0513 mv a0,s10 40003484: 7d4110ef jal ra,40014c58 mt_entry->pathconf_limits_and_options = &rtems_filesystem_default_pathconf; 40003488: 4001f7b7 lui a5,0x4001f mt_entry->mounted = true; 4000348c: 00100713 li a4,1 mt_entry->pathconf_limits_and_options = &rtems_filesystem_default_pathconf; 40003490: 9f878793 addi a5,a5,-1544 # 4001e9f8 void *starting_address, size_t number_nodes, size_t node_size ) { _Chain_Initialize( 40003494: 02400693 li a3,36 40003498: 00100613 li a2,1 4000349c: 00098593 mv a1,s3 400034a0: 01440513 addi a0,s0,20 mt_entry->mounted = true; 400034a4: 02e40423 sb a4,40(s0) mt_entry->pathconf_limits_and_options = &rtems_filesystem_default_pathconf; 400034a8: 02f42623 sw a5,44(s0) mt_fs_root->reference_count = 1; 400034ac: 04e42c23 sw a4,88(s0) mt_entry->target = str; 400034b0: 03a42823 sw s10,48(s0) mt_entry->mt_fs_root = mt_fs_root; 400034b4: 03342223 sw s3,36(s0) mt_fs_root->location.mt_entry = mt_entry; 400034b8: 04842a23 sw s0,84(s0) 400034bc: 525030ef jal ra,400071e0 <_Chain_Initialize> filesystemtype, &target_length ); if ( mt_entry != NULL ) { mt_entry->writeable = options == RTEMS_FILESYSTEM_READ_WRITE; 400034c0: 0014f493 andi s1,s1,1 400034c4: 029404a3 sb s1,41(s0) rv = (*fsmount_me_h)( mt_entry, data ); 400034c8: 000b8593 mv a1,s7 400034cc: 00040513 mv a0,s0 400034d0: 000a80e7 jalr s5 400034d4: 00050493 mv s1,a0 if ( rv == 0 ) { 400034d8: 08051663 bnez a0,40003564 if ( target != NULL ) { 400034dc: 14090e63 beqz s2,40003638 rtems_filesystem_eval_path_start( &ctx, target, eval_flags ); 400034e0: 00090593 mv a1,s2 400034e4: 01f00613 li a2,31 400034e8: 01810513 addi a0,sp,24 400034ec: 5ad000ef jal ra,40004298 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; 400034f0: 01452783 lw a5,20(a0) return (*mt_entry->ops->are_nodes_equal_h)( 400034f4: 00c7a703 lw a4,12(a5) 400034f8: 0247a583 lw a1,36(a5) 400034fc: 01072783 lw a5,16(a4) # 4010 40003500: 000780e7 jalr a5 if ( !rtems_filesystem_location_is_instance_root( currentloc ) ) { 40003504: 1a051a63 bnez a0,400036b8 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( 40003508: 03010593 addi a1,sp,48 4000350c: 00010513 mv a0,sp 40003510: 630010ef jal ra,40004b40 mt_point_node = rtems_filesystem_location_transform_to_global( &targetloc ); 40003514: 00010513 mv a0,sp 40003518: 6e8010ef jal ra,40004c00 rv = (*mt_point_node->location.mt_entry->ops->mount_h)( mt_entry ); 4000351c: 01452783 lw a5,20(a0) mt_point_node = rtems_filesystem_location_transform_to_global( &targetloc ); 40003520: 00050913 mv s2,a0 mt_entry->mt_point_node = mt_point_node; 40003524: 02a42023 sw a0,32(s0) rv = (*mt_point_node->location.mt_entry->ops->mount_h)( mt_entry ); 40003528: 00c7a783 lw a5,12(a5) 4000352c: 00040513 mv a0,s0 40003530: 02c7a783 lw a5,44(a5) 40003534: 000780e7 jalr a5 40003538: 00050493 mv s1,a0 if ( rv == 0 ) { 4000353c: 0a050a63 beqz a0,400035f0 rtems_filesystem_global_location_release( mt_point_node, true ); 40003540: 00090513 mv a0,s2 40003544: 00100593 li a1,1 40003548: 544010ef jal ra,40004a8c rtems_filesystem_eval_path_cleanup( &ctx ); 4000354c: 01810513 addi a0,sp,24 40003550: 769000ef jal ra,400044b8 } else { rv = register_root_file_system( mt_entry ); } if ( rv != 0 ) { (*mt_entry->ops->fsunmount_me_h)( mt_entry ); 40003554: 00c42783 lw a5,12(s0) 40003558: 00040513 mv a0,s0 4000355c: 0347a783 lw a5,52(a5) 40003560: 000780e7 jalr a5 } } if ( rv != 0 ) { free( mt_entry ); 40003564: 00040513 mv a0,s0 40003568: d48ff0ef jal ra,40002ab0 errno = EINVAL; rv = -1; } return rv; } 4000356c: 07c12083 lw ra,124(sp) 40003570: 07812403 lw s0,120(sp) 40003574: 07012903 lw s2,112(sp) 40003578: 06c12983 lw s3,108(sp) 4000357c: 06812a03 lw s4,104(sp) 40003580: 06412a83 lw s5,100(sp) 40003584: 06012b03 lw s6,96(sp) 40003588: 05c12b83 lw s7,92(sp) 4000358c: 05812c03 lw s8,88(sp) 40003590: 05412c83 lw s9,84(sp) 40003594: 05012d03 lw s10,80(sp) 40003598: 00048513 mv a0,s1 4000359c: 07412483 lw s1,116(sp) 400035a0: 08010113 addi sp,sp,128 400035a4: 00008067 ret rtems_filesystem_mount_table_entry_t *mt_entry = calloc( 1, size ); 400035a8: 016405b3 add a1,s0,s6 400035ac: 00100513 li a0,1 400035b0: ad4ff0ef jal ra,40002884 400035b4: 00050413 mv s0,a0 if ( mt_entry != NULL ) { 400035b8: 06050663 beqz a0,40003624 <== NEVER TAKEN char *str = (char *) mt_fs_root + sizeof( *mt_fs_root ); 400035bc: 06440d13 addi s10,s0,100 memcpy( str, filesystemtype, filesystemtype_size ); 400035c0: 00098593 mv a1,s3 400035c4: 000d0513 mv a0,s10 400035c8: 000c8613 mv a2,s9 400035cc: 68c110ef jal ra,40014c58 rtems_filesystem_global_location_t *mt_fs_root = 400035d0: 04040993 addi s3,s0,64 mt_entry->type = str; 400035d4: 03a42a23 sw s10,52(s0) str += filesystemtype_size; 400035d8: 019d0d33 add s10,s10,s9 if ( source_or_null != NULL ) { 400035dc: e9dff06f j 40003478 const char *target = target_or_null != NULL ? target_or_null : "/"; 400035e0: 4001ec37 lui s8,0x4001e 400035e4: 00200b13 li s6,2 400035e8: 26cc0c13 addi s8,s8,620 # 4001e26c 400035ec: e1dff06f j 40003408 rtems_libio_lock(); 400035f0: 929ff0ef jal ra,40002f18 old_last = tail->previous; 400035f4: 400207b7 lui a5,0x40020 400035f8: 73878793 addi a5,a5,1848 # 40020738 400035fc: 0087a703 lw a4,8(a5) the_node->next = tail; 40003600: 00478693 addi a3,a5,4 40003604: 00d42023 sw a3,0(s0) tail->previous = the_node; 40003608: 0087a423 sw s0,8(a5) old_last->next = the_node; 4000360c: 00872023 sw s0,0(a4) the_node->previous = old_last; 40003610: 00e42223 sw a4,4(s0) rtems_libio_unlock(); 40003614: 911ff0ef jal ra,40002f24 rtems_filesystem_eval_path_cleanup( &ctx ); 40003618: 01810513 addi a0,sp,24 4000361c: 69d000ef jal ra,400044b8 if ( rv != 0 ) { 40003620: f4dff06f j 4000356c errno = ENOMEM; 40003624: 0a4110ef jal ra,400146c8 <__errno> <== NOT EXECUTED 40003628: 00c00793 li a5,12 <== NOT EXECUTED 4000362c: 00f52023 sw a5,0(a0) <== NOT EXECUTED rv = -1; 40003630: fff00493 li s1,-1 <== NOT EXECUTED 40003634: f39ff06f j 4000356c <== NOT EXECUTED rtems_libio_lock(); 40003638: 8e1ff0ef jal ra,40002f18 return _Chain_Immutable_head( the_chain )->next; 4000363c: 400207b7 lui a5,0x40020 40003640: 73878793 addi a5,a5,1848 # 40020738 if ( rtems_chain_is_empty( &rtems_filesystem_mount_table ) ) { 40003644: 0007a703 lw a4,0(a5) 40003648: 00478693 addi a3,a5,4 4000364c: 08d71463 bne a4,a3,400036d4 old_last = tail->previous; 40003650: 0087a683 lw a3,8(a5) the_node->next = tail; 40003654: 00e42023 sw a4,0(s0) tail->previous = the_node; 40003658: 0087a423 sw s0,8(a5) old_last->next = the_node; 4000365c: 0086a023 sw s0,0(a3) the_node->previous = old_last; 40003660: 00d42223 sw a3,4(s0) rtems_libio_unlock(); 40003664: 8c1ff0ef jal ra,40002f24 rtems_filesystem_global_location_obtain( &mt_entry->mt_fs_root ); 40003668: 02440413 addi s0,s0,36 4000366c: 00040513 mv a0,s0 40003670: 358010ef jal ra,400049c8 40003674: 00050913 mv s2,a0 rtems_filesystem_global_location_obtain( &mt_entry->mt_fs_root ); 40003678: 00040513 mv a0,s0 4000367c: 34c010ef jal ra,400049c8 40003680: 00050413 mv s0,a0 &rtems_filesystem_root, 40003684: 750010ef jal ra,40004dd4 rtems_filesystem_global_location_assign( 40003688: 00090593 mv a1,s2 4000368c: 00450513 addi a0,a0,4 40003690: 1a8010ef jal ra,40004838 &rtems_filesystem_current, 40003694: 740010ef jal ra,40004dd4 rtems_filesystem_global_location_assign( 40003698: 00040593 mv a1,s0 4000369c: 19c010ef jal ra,40004838 if ( rv != 0 ) { 400036a0: ecdff06f j 4000356c errno = EINVAL; 400036a4: 024110ef jal ra,400146c8 <__errno> 400036a8: 01600793 li a5,22 400036ac: 00f52023 sw a5,0(a0) rv = -1; 400036b0: fff00493 li s1,-1 return rv; 400036b4: eb9ff06f j 4000356c rtems_filesystem_eval_path_error( &ctx, EBUSY ); 400036b8: 01000593 li a1,16 400036bc: 01810513 addi a0,sp,24 400036c0: 581000ef jal ra,40004440 rtems_filesystem_eval_path_cleanup( &ctx ); 400036c4: 01810513 addi a0,sp,24 400036c8: 5f1000ef jal ra,400044b8 rv = -1; 400036cc: fff00493 li s1,-1 400036d0: e85ff06f j 40003554 errno = EINVAL; 400036d4: 7f5100ef jal ra,400146c8 <__errno> <== NOT EXECUTED 400036d8: 01600793 li a5,22 <== NOT EXECUTED 400036dc: 00f52023 sw a5,0(a0) <== NOT EXECUTED 400036e0: 845ff0ef jal ra,40002f24 <== NOT EXECUTED rv = -1; 400036e4: fff00493 li s1,-1 <== NOT EXECUTED 400036e8: e6dff06f j 40003554 <== NOT EXECUTED =============================================================================== 40003198 : const char *target, const char *filesystemtype, rtems_filesystem_options_t options, const void *data ) { 40003198: fe010113 addi sp,sp,-32 4000319c: 00112e23 sw ra,28(sp) 400031a0: 00812c23 sw s0,24(sp) 400031a4: 00912a23 sw s1,20(sp) 400031a8: 01212823 sw s2,16(sp) 400031ac: 01312623 sw s3,12(sp) 400031b0: 01412423 sw s4,8(sp) int rv = -1; if (target != NULL) { 400031b4: 06058e63 beqz a1,40003230 400031b8: 00058413 mv s0,a1 400031bc: 00050493 mv s1,a0 rv = rtems_mkdir(target, S_IRWXU | S_IRWXG | S_IRWXO); 400031c0: 1ff00593 li a1,511 400031c4: 00040513 mv a0,s0 400031c8: 00060913 mv s2,a2 400031cc: 00068993 mv s3,a3 400031d0: 00070a13 mv s4,a4 400031d4: 331000ef jal ra,40003d04 if (rv == 0) { 400031d8: 02050263 beqz a0,400031fc <== ALWAYS TAKEN } else { errno = EINVAL; } return rv; } 400031dc: 01c12083 lw ra,28(sp) 400031e0: 01812403 lw s0,24(sp) 400031e4: 01412483 lw s1,20(sp) 400031e8: 01012903 lw s2,16(sp) 400031ec: 00c12983 lw s3,12(sp) 400031f0: 00812a03 lw s4,8(sp) 400031f4: 02010113 addi sp,sp,32 400031f8: 00008067 ret rv = mount( 400031fc: 00040593 mv a1,s0 } 40003200: 01812403 lw s0,24(sp) 40003204: 01c12083 lw ra,28(sp) rv = mount( 40003208: 000a0713 mv a4,s4 4000320c: 00098693 mv a3,s3 } 40003210: 00812a03 lw s4,8(sp) 40003214: 00c12983 lw s3,12(sp) rv = mount( 40003218: 00090613 mv a2,s2 4000321c: 00048513 mv a0,s1 } 40003220: 01012903 lw s2,16(sp) 40003224: 01412483 lw s1,20(sp) 40003228: 02010113 addi sp,sp,32 rv = mount( 4000322c: b4dff06f j 40002d78 errno = EINVAL; 40003230: 60c1a0ef jal ra,4001d83c <__errno> 40003234: 01600793 li a5,22 40003238: 00f52023 sw a5,0(a0) int rv = -1; 4000323c: fff00513 li a0,-1 return rv; 40003240: f9dff06f j 400031dc =============================================================================== 40003854 : /** * POSIX 1003.1 5.3.1 - Open a File */ int open( const char *path, int oflag, ... ) { 40003854: f1010113 addi sp,sp,-240 40003858: 0ef12223 sw a5,228(sp) mode_t mode = 0; rtems_libio_t *iop = NULL; va_start( ap, oflag ); mode = va_arg( ap, mode_t ); 4000385c: 0dc10793 addi a5,sp,220 { 40003860: 0c812423 sw s0,200(sp) 40003864: 0b312e23 sw s3,188(sp) 40003868: 0b412c23 sw s4,184(sp) 4000386c: 0c112623 sw ra,204(sp) 40003870: 0c912223 sw s1,196(sp) 40003874: 0d212023 sw s2,192(sp) 40003878: 0b512a23 sw s5,180(sp) 4000387c: 0b612823 sw s6,176(sp) 40003880: 00050993 mv s3,a0 40003884: 00058413 mv s0,a1 40003888: 0cc12c23 sw a2,216(sp) 4000388c: 0cd12e23 sw a3,220(sp) 40003890: 0ee12023 sw a4,224(sp) 40003894: 0f012423 sw a6,232(sp) 40003898: 0f112623 sw a7,236(sp) mode = va_arg( ap, mode_t ); 4000389c: 00f12623 sw a5,12(sp) 400038a0: 00060a13 mv s4,a2 iop = rtems_libio_allocate(); 400038a4: d4cff0ef jal ra,40002df0 if ( iop != NULL ) { 400038a8: 22050a63 beqz a0,40003adc int follow = (oflag & O_NOFOLLOW) == O_NOFOLLOW ? 0 : RTEMS_FS_FOLLOW_LINK; 400038ac: 00b41613 slli a2,s0,0xb int rwflag = oflag + 1; 400038b0: 00140913 addi s2,s0,1 int follow = (oflag & O_NOFOLLOW) == O_NOFOLLOW ? 0 : RTEMS_FS_FOLLOW_LINK; 400038b4: 41f65613 srai a2,a2,0x1f bool exclusive = (oflag & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL); 400038b8: 000017b7 lui a5,0x1 int follow = (oflag & O_NOFOLLOW) == O_NOFOLLOW ? 0 : RTEMS_FS_FOLLOW_LINK; 400038bc: fe867613 andi a2,a2,-24 bool read_access = (rwflag & _FREAD) == _FREAD; 400038c0: 00197693 andi a3,s2,1 bool exclusive = (oflag & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL); 400038c4: a0078793 addi a5,a5,-1536 # a00 400038c8: 00050493 mv s1,a0 bool write_access = (rwflag & _FWRITE) == _FWRITE; 400038cc: 00297913 andi s2,s2,2 bool make = (oflag & O_CREAT) == O_CREAT; 400038d0: 20047713 andi a4,s0,512 bool exclusive = (oflag & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL); 400038d4: 00f477b3 and a5,s0,a5 int follow = (oflag & O_NOFOLLOW) == O_NOFOLLOW ? 0 : RTEMS_FS_FOLLOW_LINK; 400038d8: 01860613 addi a2,a2,24 | (read_access ? RTEMS_FS_PERMS_READ : 0) 400038dc: 00068463 beqz a3,400038e4 400038e0: 00466613 ori a2,a2,4 | (write_access ? RTEMS_FS_PERMS_WRITE : 0) 400038e4: 00090463 beqz s2,400038ec 400038e8: 00266613 ori a2,a2,2 | (make ? RTEMS_FS_MAKE : 0) 400038ec: 16071863 bnez a4,40003a5c | (exclusive ? RTEMS_FS_EXCLUSIVE : 0); 400038f0: 00001737 lui a4,0x1 400038f4: a0070713 addi a4,a4,-1536 # a00 400038f8: 00e79463 bne a5,a4,40003900 int eval_flags = follow 400038fc: 04066613 ori a2,a2,64 rtems_filesystem_eval_path_start( &ctx, path, eval_flags ); 40003900: 00098593 mv a1,s3 40003904: 01010513 addi a0,sp,16 40003908: 191000ef jal ra,40004298 return ctx->tokenlen > 0; 4000390c: 01c12a83 lw s5,28(sp) if ( rtems_filesystem_eval_path_has_token( &ctx ) ) { 40003910: 140a9a63 bnez s5,40003a64 open_dir = ( oflag & O_DIRECTORY ) == O_DIRECTORY; 40003914: 00200ab7 lui s5,0x200 40003918: 01547ab3 and s5,s0,s5 if ( write_access || open_dir ) { 4000391c: 015967b3 or a5,s2,s5 40003920: 04078263 beqz a5,40003964 ) { struct stat st; st.st_mode = 0; (void) ( *loc->handlers->fstat_h )( loc, &st ); 40003924: 03812783 lw a5,56(sp) st.st_mode = 0; 40003928: 04012c23 sw zero,88(sp) (void) ( *loc->handlers->fstat_h )( loc, &st ); 4000392c: 04810593 addi a1,sp,72 40003930: 0187a783 lw a5,24(a5) 40003934: 02810513 addi a0,sp,40 40003938: 000780e7 jalr a5 return st.st_mode; 4000393c: 05812783 lw a5,88(sp) if ( write_access && S_ISDIR( type ) ) { 40003940: 16090263 beqz s2,40003aa4 40003944: 0000f737 lui a4,0xf 40003948: 00e7f7b3 and a5,a5,a4 4000394c: 00004737 lui a4,0x4 40003950: 16e78e63 beq a5,a4,40003acc if ( open_dir && !S_ISDIR( type ) ) { 40003954: 000a8863 beqz s5,40003964 <== ALWAYS TAKEN rtems_filesystem_eval_path_error( &ctx, ENOTDIR ); 40003958: 01400593 li a1,20 4000395c: 01010513 addi a0,sp,16 40003960: 2e1000ef jal ra,40004440 rtems_filesystem_location_copy_and_detach( 40003964: 02810593 addi a1,sp,40 40003968: 01048513 addi a0,s1,16 # 1010 <_ISR_Stack_size+0x10> 4000396c: 1d4010ef jal ra,40004b40 rtems_filesystem_eval_path_cleanup( &ctx ); 40003970: 01010513 addi a0,sp,16 40003974: 345000ef jal ra,400044b8 rtems_libio_iop_flags_set( iop, rtems_libio_fcntl_flags( oflag ) ); 40003978: 00040513 mv a0,s0 4000397c: c28ff0ef jal ra,40002da4 __asm__ volatile ( 40003980: 300477f3 csrrci a5,mstatus,8 *obj = val | arg; 40003984: 0004a703 lw a4,0(s1) 40003988: 00a76533 or a0,a4,a0 4000398c: 00a4a023 sw a0,0(s1) return mstatus & RISCV_MSTATUS_MIE; 40003990: 0087f793 andi a5,a5,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40003994: 3007a073 csrs mstatus,a5 rv = (*iop->pathinfo.handlers->open_h)( iop, path, oflag, mode ); 40003998: 0204a783 lw a5,32(s1) 4000399c: 000a0693 mv a3,s4 400039a0: 00040613 mv a2,s0 400039a4: 0007a783 lw a5,0(a5) 400039a8: 00098593 mv a1,s3 400039ac: 00048513 mv a0,s1 400039b0: 000780e7 jalr a5 400039b4: 00050913 mv s2,a0 if ( rv == 0 ) { 400039b8: 04051063 bnez a0,400039f8 int fd = rtems_libio_iop_to_descriptor( iop ); 400039bc: 40023937 lui s2,0x40023 400039c0: cd890913 addi s2,s2,-808 # 40022cd8 400039c4: 41248933 sub s2,s1,s2 400039c8: aaaab537 lui a0,0xaaaab 400039cc: aab50513 addi a0,a0,-1365 # aaaaaaab 400039d0: 40495913 srai s2,s2,0x4 400039d4: 02a90933 mul s2,s2,a0 __asm__ volatile ( 400039d8: 300477f3 csrrci a5,mstatus,8 400039dc: 0004a703 lw a4,0(s1) 400039e0: 10076713 ori a4,a4,256 400039e4: 00e4a023 sw a4,0(s1) return mstatus & RISCV_MSTATUS_MIE; 400039e8: 0087f793 andi a5,a5,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 400039ec: 3007a073 csrs mstatus,a5 bool truncate = (oflag & O_TRUNC) == O_TRUNC; 400039f0: 40047413 andi s0,s0,1024 if ( truncate ) { 400039f4: 02041a63 bnez s0,40003a28 if ( rv < 0 ) { 400039f8: 04094c63 bltz s2,40003a50 } va_end( ap ); return rv; } 400039fc: 0cc12083 lw ra,204(sp) 40003a00: 0c812403 lw s0,200(sp) 40003a04: 0c412483 lw s1,196(sp) 40003a08: 0bc12983 lw s3,188(sp) 40003a0c: 0b812a03 lw s4,184(sp) 40003a10: 0b412a83 lw s5,180(sp) 40003a14: 0b012b03 lw s6,176(sp) 40003a18: 00090513 mv a0,s2 40003a1c: 0c012903 lw s2,192(sp) 40003a20: 0f010113 addi sp,sp,240 40003a24: 00008067 ret rv = ftruncate( fd, 0 ); 40003a28: 00000593 li a1,0 40003a2c: 00000613 li a2,0 40003a30: 00090513 mv a0,s2 40003a34: 0480b0ef jal ra,4000ea7c if ( rv != 0 ) { 40003a38: fc0500e3 beqz a0,400039f8 (*iop->pathinfo.handlers->close_h)( iop ); 40003a3c: 0204a783 lw a5,32(s1) 40003a40: 00048513 mv a0,s1 rv = -1; 40003a44: fff00913 li s2,-1 (*iop->pathinfo.handlers->close_h)( iop ); 40003a48: 0047a783 lw a5,4(a5) 40003a4c: 000780e7 jalr a5 rtems_libio_free( iop ); 40003a50: 00048513 mv a0,s1 40003a54: bf8ff0ef jal ra,40002e4c return rv; 40003a58: fa5ff06f j 400039fc | (make ? RTEMS_FS_MAKE : 0) 40003a5c: 02066613 ori a2,a2,32 40003a60: e91ff06f j 400038f0 return ctx->token; 40003a64: 01812b03 lw s6,24(sp) rv = rtems_filesystem_mknod( 40003a68: 000086b7 lui a3,0x8 40003a6c: 00000713 li a4,0 40003a70: 00000793 li a5,0 40003a74: 00da66b3 or a3,s4,a3 40003a78: 000a8613 mv a2,s5 40003a7c: 000b0593 mv a1,s6 40003a80: 02810513 addi a0,sp,40 40003a84: f90ff0ef jal ra,40003214 if ( rv == 0 ) { 40003a88: 02051a63 bnez a0,40003abc rtems_filesystem_eval_path_continue( ctx ); 40003a8c: 01010513 addi a0,sp,16 ctx->flags = flags; 40003a90: 02012023 sw zero,32(sp) ctx->path = path; 40003a94: 01612823 sw s6,16(sp) ctx->pathlen = pathlen; 40003a98: 01512a23 sw s5,20(sp) 40003a9c: 5d0000ef jal ra,4000406c 40003aa0: e75ff06f j 40003914 if ( open_dir && !S_ISDIR( type ) ) { 40003aa4: ec0a80e3 beqz s5,40003964 <== NEVER TAKEN 40003aa8: 0000f737 lui a4,0xf 40003aac: 00e7f7b3 and a5,a5,a4 40003ab0: 00004737 lui a4,0x4 40003ab4: eae788e3 beq a5,a4,40003964 40003ab8: ea1ff06f j 40003958 rtems_filesystem_eval_path_error( ctx, 0 ); 40003abc: 00000593 li a1,0 40003ac0: 01010513 addi a0,sp,16 40003ac4: 17d000ef jal ra,40004440 40003ac8: e4dff06f j 40003914 rtems_filesystem_eval_path_error( &ctx, EISDIR ); 40003acc: 01500593 li a1,21 40003ad0: 01010513 addi a0,sp,16 40003ad4: 16d000ef jal ra,40004440 if ( open_dir && !S_ISDIR( type ) ) { 40003ad8: e8dff06f j 40003964 errno = ENFILE; 40003adc: 3ed100ef jal ra,400146c8 <__errno> 40003ae0: 01700793 li a5,23 40003ae4: 00f52023 sw a5,0(a0) rv = -1; 40003ae8: fff00913 li s2,-1 return rv; 40003aec: f11ff06f j 400039fc =============================================================================== 40003684 : void **pointer, size_t alignment, size_t size ) { if (((alignment - 1) & alignment) != 0 || (alignment < sizeof(void *))) 40003684: fff58713 addi a4,a1,-1 40003688: 00b77733 and a4,a4,a1 4000368c: 00071863 bnez a4,4000369c <== NEVER TAKEN 40003690: 00300713 li a4,3 40003694: 00b77463 bgeu a4,a1,4000369c /* * rtems_memalign does all of the error checking work EXCEPT * for adding restrictionso on the alignment. */ return rtems_memalign( pointer, alignment, size ); 40003698: 2a00006f j 40003938 } 4000369c: 01600513 li a0,22 400036a0: 00008067 ret =============================================================================== 40003bfc : #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); 40003bfc: ff010113 addi sp,sp,-16 40003c00: 00812423 sw s0,8(sp) return &rtems_libio_iops[ fd ]; 40003c04: 00151413 slli s0,a0,0x1 40003c08: 00a40433 add s0,s0,a0 40003c0c: 40023537 lui a0,0x40023 40003c10: cd850513 addi a0,a0,-808 # 40022cd8 40003c14: 00441413 slli s0,s0,0x4 40003c18: 00112623 sw ra,12(sp) 40003c1c: 00912223 sw s1,4(sp) 40003c20: 00a40433 add s0,s0,a0 __asm__ volatile ( 40003c24: 30047773 csrrci a4,mstatus,8 val = *obj; 40003c28: 00042783 lw a5,0(s0) *obj = val + arg; 40003c2c: 000014b7 lui s1,0x1 40003c30: 009786b3 add a3,a5,s1 40003c34: 00d42023 sw a3,0(s0) return mstatus & RISCV_MSTATUS_MIE; 40003c38: 00877713 andi a4,a4,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40003c3c: 30072073 csrs mstatus,a4 ssize_t n; rtems_libio_check_buffer( buffer ); rtems_libio_check_count( count ); LIBIO_GET_IOP_WITH_ACCESS( fd, iop, LIBIO_FLAGS_READ, EBADF ); 40003c40: 10200713 li a4,258 40003c44: 1027f793 andi a5,a5,258 40003c48: 04e79063 bne a5,a4,40003c88 /* * Now process the read(). */ n = (*iop->pathinfo.handlers->read_h)( iop, buffer, count ); 40003c4c: 02042783 lw a5,32(s0) 40003c50: 00040513 mv a0,s0 40003c54: 0087a783 lw a5,8(a5) 40003c58: 000780e7 jalr a5 __asm__ volatile ( 40003c5c: 300477f3 csrrci a5,mstatus,8 *obj = val - arg; 40003c60: 00042703 lw a4,0(s0) 40003c64: 40970733 sub a4,a4,s1 40003c68: 00e42023 sw a4,0(s0) return mstatus & RISCV_MSTATUS_MIE; 40003c6c: 0087f793 andi a5,a5,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40003c70: 3007a073 csrs mstatus,a5 rtems_libio_iop_drop( iop ); return n; } 40003c74: 00c12083 lw ra,12(sp) 40003c78: 00812403 lw s0,8(sp) 40003c7c: 00412483 lw s1,4(sp) 40003c80: 01010113 addi sp,sp,16 40003c84: 00008067 ret __asm__ volatile ( 40003c88: 300477f3 csrrci a5,mstatus,8 <== NOT EXECUTED 40003c8c: 00042703 lw a4,0(s0) <== NOT EXECUTED 40003c90: 40970733 sub a4,a4,s1 <== NOT EXECUTED 40003c94: 00e42023 sw a4,0(s0) <== NOT EXECUTED return mstatus & RISCV_MSTATUS_MIE; 40003c98: 0087f793 andi a5,a5,8 <== NOT EXECUTED __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40003c9c: 3007a073 csrs mstatus,a5 <== NOT EXECUTED LIBIO_GET_IOP_WITH_ACCESS( fd, iop, LIBIO_FLAGS_READ, EBADF ); 40003ca0: 229100ef jal ra,400146c8 <__errno> <== NOT EXECUTED 40003ca4: 00900793 li a5,9 <== NOT EXECUTED 40003ca8: 00f52023 sw a5,0(a0) <== NOT EXECUTED 40003cac: fff00513 li a0,-1 <== NOT EXECUTED 40003cb0: fc5ff06f j 40003c74 <== NOT EXECUTED =============================================================================== 4001dd4c : return new_ptr; } void *realloc( void *ptr, size_t size ) { 4001dd4c: fd010113 addi sp,sp,-48 <== NOT EXECUTED 4001dd50: 02112623 sw ra,44(sp) <== NOT EXECUTED 4001dd54: 02812423 sw s0,40(sp) <== NOT EXECUTED 4001dd58: 02912223 sw s1,36(sp) <== NOT EXECUTED 4001dd5c: 03212023 sw s2,32(sp) <== NOT EXECUTED 4001dd60: 01312e23 sw s3,28(sp) <== NOT EXECUTED Heap_Control *heap; Heap_Resize_status status; uintptr_t old_size; uintptr_t avail_size; if ( size == 0 ) { 4001dd64: 12058063 beqz a1,4001de84 <== NOT EXECUTED 4001dd68: 00058493 mv s1,a1 <== NOT EXECUTED 4001dd6c: 00050413 mv s0,a0 <== NOT EXECUTED free( ptr ); return NULL; } if ( ptr == NULL ) { 4001dd70: 0e050a63 beqz a0,4001de64 <== NOT EXECUTED return malloc( size ); } heap = RTEMS_Malloc_Heap; 4001dd74: 91c1a903 lw s2,-1764(gp) # 40020d5c <== NOT EXECUTED switch ( _Malloc_System_state() ) { 4001dd78: ad8e50ef jal ra,40003050 <_Malloc_System_state> <== NOT EXECUTED 4001dd7c: 0a050e63 beqz a0,4001de38 <== NOT EXECUTED 4001dd80: 00100793 li a5,1 <== NOT EXECUTED 4001dd84: 08f51863 bne a0,a5,4001de14 <== NOT EXECUTED _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 ); 4001dd88: 00c10713 addi a4,sp,12 <== NOT EXECUTED 4001dd8c: 00810693 addi a3,sp,8 <== NOT EXECUTED 4001dd90: 00048613 mv a2,s1 <== NOT EXECUTED 4001dd94: 00040593 mv a1,s0 <== NOT EXECUTED 4001dd98: 00090513 mv a0,s2 <== NOT EXECUTED 4001dd9c: 1d8000ef jal ra,4001df74 <_Heap_Resize_block> <== NOT EXECUTED 4001dda0: 00050993 mv s3,a0 <== NOT EXECUTED break; default: return NULL; } switch ( status ) { 4001dda4: 00040913 mv s2,s0 <== NOT EXECUTED 4001dda8: 06098863 beqz s3,4001de18 <== NOT EXECUTED 4001ddac: 00100793 li a5,1 <== NOT EXECUTED 4001ddb0: 04f99c63 bne s3,a5,4001de08 <== NOT EXECUTED new_ptr = malloc( new_size ); 4001ddb4: 00048513 mv a0,s1 <== NOT EXECUTED case HEAP_RESIZE_SUCCESSFUL: return ptr; case HEAP_RESIZE_UNSATISFIED: return new_alloc( ptr, size, old_size ); 4001ddb8: 00812983 lw s3,8(sp) <== NOT EXECUTED new_ptr = malloc( new_size ); 4001ddbc: a48e50ef jal ra,40003004 <== NOT EXECUTED 4001ddc0: 00050913 mv s2,a0 <== NOT EXECUTED if ( new_ptr == NULL ) { 4001ddc4: 04050a63 beqz a0,4001de18 <== NOT EXECUTED memcpy( new_ptr, old_ptr, ( new_size < old_size ) ? new_size : old_size ); 4001ddc8: 00098613 mv a2,s3 <== NOT EXECUTED 4001ddcc: 0134f463 bgeu s1,s3,4001ddd4 <== NOT EXECUTED 4001ddd0: 00048613 mv a2,s1 <== NOT EXECUTED 4001ddd4: 00040593 mv a1,s0 <== NOT EXECUTED 4001ddd8: 00090513 mv a0,s2 <== NOT EXECUTED 4001dddc: e7df60ef jal ra,40014c58 <== NOT EXECUTED free( old_ptr ); 4001dde0: 00040513 mv a0,s0 <== NOT EXECUTED 4001dde4: ccde40ef jal ra,40002ab0 <== NOT EXECUTED default: errno = EINVAL; return NULL; } } 4001dde8: 02c12083 lw ra,44(sp) <== NOT EXECUTED 4001ddec: 02812403 lw s0,40(sp) <== NOT EXECUTED 4001ddf0: 02412483 lw s1,36(sp) <== NOT EXECUTED 4001ddf4: 01c12983 lw s3,28(sp) <== NOT EXECUTED 4001ddf8: 00090513 mv a0,s2 <== NOT EXECUTED 4001ddfc: 02012903 lw s2,32(sp) <== NOT EXECUTED 4001de00: 03010113 addi sp,sp,48 <== NOT EXECUTED 4001de04: 00008067 ret <== NOT EXECUTED errno = EINVAL; 4001de08: 8c1f60ef jal ra,400146c8 <__errno> <== NOT EXECUTED 4001de0c: 01600793 li a5,22 <== NOT EXECUTED 4001de10: 00f52023 sw a5,0(a0) <== NOT EXECUTED return NULL; 4001de14: 00000913 li s2,0 <== NOT EXECUTED } 4001de18: 02c12083 lw ra,44(sp) <== NOT EXECUTED 4001de1c: 02812403 lw s0,40(sp) <== NOT EXECUTED 4001de20: 02412483 lw s1,36(sp) <== NOT EXECUTED 4001de24: 01c12983 lw s3,28(sp) <== NOT EXECUTED 4001de28: 00090513 mv a0,s2 <== NOT EXECUTED 4001de2c: 02012903 lw s2,32(sp) <== NOT EXECUTED 4001de30: 03010113 addi sp,sp,48 <== NOT EXECUTED 4001de34: 00008067 ret <== NOT EXECUTED _RTEMS_Lock_allocator(); 4001de38: afce90ef jal ra,40007134 <_RTEMS_Lock_allocator> <== NOT EXECUTED _Malloc_Process_deferred_frees(); 4001de3c: cfde40ef jal ra,40002b38 <_Malloc_Process_deferred_frees> <== NOT EXECUTED status = _Heap_Resize_block( heap, ptr, size, &old_size, &avail_size ); 4001de40: 00c10713 addi a4,sp,12 <== NOT EXECUTED 4001de44: 00810693 addi a3,sp,8 <== NOT EXECUTED 4001de48: 00048613 mv a2,s1 <== NOT EXECUTED 4001de4c: 00040593 mv a1,s0 <== NOT EXECUTED 4001de50: 00090513 mv a0,s2 <== NOT EXECUTED 4001de54: 120000ef jal ra,4001df74 <_Heap_Resize_block> <== NOT EXECUTED 4001de58: 00050993 mv s3,a0 <== NOT EXECUTED _RTEMS_Unlock_allocator(); 4001de5c: ae4e90ef jal ra,40007140 <_RTEMS_Unlock_allocator> <== NOT EXECUTED break; 4001de60: f45ff06f j 4001dda4 <== NOT EXECUTED } 4001de64: 02812403 lw s0,40(sp) <== NOT EXECUTED 4001de68: 02c12083 lw ra,44(sp) <== NOT EXECUTED 4001de6c: 02412483 lw s1,36(sp) <== NOT EXECUTED 4001de70: 02012903 lw s2,32(sp) <== NOT EXECUTED 4001de74: 01c12983 lw s3,28(sp) <== NOT EXECUTED return malloc( size ); 4001de78: 00058513 mv a0,a1 <== NOT EXECUTED } 4001de7c: 03010113 addi sp,sp,48 <== NOT EXECUTED return malloc( size ); 4001de80: 984e506f j 40003004 <== NOT EXECUTED free( ptr ); 4001de84: c2de40ef jal ra,40002ab0 <== NOT EXECUTED return NULL; 4001de88: 00000913 li s2,0 <== NOT EXECUTED 4001de8c: f8dff06f j 4001de18 <== NOT EXECUTED =============================================================================== 4000e21c : const rtems_assoc_32_pair *pairs, size_t pair_count, const char *separator, const char *fallback ) { 4000e21c: fd010113 addi sp,sp,-48 4000e220: 01312e23 sw s3,28(sp) 4000e224: 01412c23 sw s4,24(sp) 4000e228: 01812423 sw s8,8(sp) 4000e22c: 02112623 sw ra,44(sp) 4000e230: 02812423 sw s0,40(sp) 4000e234: 02912223 sw s1,36(sp) 4000e238: 03212023 sw s2,32(sp) 4000e23c: 01512a23 sw s5,20(sp) 4000e240: 01612823 sw s6,16(sp) 4000e244: 01712623 sw s7,12(sp) 4000e248: 00058993 mv s3,a1 4000e24c: 00060a13 mv s4,a2 4000e250: 00080c13 mv s8,a6 size_t len; size_t i; len = 0; for ( i = 0; i < pair_count ; ++i ) { 4000e254: 0a070663 beqz a4,4000e300 <== NEVER TAKEN 4000e258: 00070a93 mv s5,a4 4000e25c: 00050b13 mv s6,a0 4000e260: 00078b93 mv s7,a5 4000e264: 00068493 mv s1,a3 4000e268: 00000913 li s2,0 4000e26c: 00000413 li s0,0 const rtems_assoc_32_pair *p; p = &pairs[ i ]; if ( ( value & p->bits ) != 0 ) { 4000e270: 0004a883 lw a7,0(s1) for ( i = 0; i < pair_count ; ++i ) { 4000e274: 00190913 addi s2,s2,1 4000e278: 00098513 mv a0,s3 if ( ( value & p->bits ) != 0 ) { 4000e27c: 011b78b3 and a7,s6,a7 4000e280: 04088063 beqz a7,4000e2c0 if ( len > 0 ) { len += strlcpy( &buffer[ len ], separator, space( buffer_size, len ) ); 4000e284: 000b8593 mv a1,s7 if ( len > 0 ) { 4000e288: 02040063 beqz s0,4000e2a8 len += strlcpy( &buffer[ len ], separator, space( buffer_size, len ) ); 4000e28c: 00898533 add a0,s3,s0 return 0; 4000e290: 00000613 li a2,0 if ( len < buffer_size ) { 4000e294: 01447463 bgeu s0,s4,4000e29c return buffer_size - len; 4000e298: 408a0633 sub a2,s4,s0 len += strlcpy( &buffer[ len ], separator, space( buffer_size, len ) ); 4000e29c: 2f80b0ef jal ra,40019594 4000e2a0: 00a40433 add s0,s0,a0 } len += strlcpy( &buffer[ len ], p->name, space( buffer_size, len ) ); 4000e2a4: 00898533 add a0,s3,s0 4000e2a8: 0044a583 lw a1,4(s1) return 0; 4000e2ac: 00000613 li a2,0 if ( len < buffer_size ) { 4000e2b0: 01447463 bgeu s0,s4,4000e2b8 return buffer_size - len; 4000e2b4: 408a0633 sub a2,s4,s0 len += strlcpy( &buffer[ len ], p->name, space( buffer_size, len ) ); 4000e2b8: 2dc0b0ef jal ra,40019594 4000e2bc: 00a40433 add s0,s0,a0 for ( i = 0; i < pair_count ; ++i ) { 4000e2c0: 00848493 addi s1,s1,8 4000e2c4: fb2a96e3 bne s5,s2,4000e270 } } if ( len == 0 ) { 4000e2c8: 02040c63 beqz s0,4000e300 len += strlcpy( buffer, fallback, buffer_size ); } return len; } 4000e2cc: 02c12083 lw ra,44(sp) 4000e2d0: 00040513 mv a0,s0 4000e2d4: 02812403 lw s0,40(sp) 4000e2d8: 02412483 lw s1,36(sp) 4000e2dc: 02012903 lw s2,32(sp) 4000e2e0: 01c12983 lw s3,28(sp) 4000e2e4: 01812a03 lw s4,24(sp) 4000e2e8: 01412a83 lw s5,20(sp) 4000e2ec: 01012b03 lw s6,16(sp) 4000e2f0: 00c12b83 lw s7,12(sp) 4000e2f4: 00812c03 lw s8,8(sp) 4000e2f8: 03010113 addi sp,sp,48 4000e2fc: 00008067 ret 4000e300: 02812403 lw s0,40(sp) 4000e304: 02c12083 lw ra,44(sp) 4000e308: 02412483 lw s1,36(sp) 4000e30c: 02012903 lw s2,32(sp) 4000e310: 01412a83 lw s5,20(sp) 4000e314: 01012b03 lw s6,16(sp) 4000e318: 00c12b83 lw s7,12(sp) len += strlcpy( buffer, fallback, buffer_size ); 4000e31c: 000a0613 mv a2,s4 4000e320: 000c0593 mv a1,s8 } 4000e324: 01812a03 lw s4,24(sp) 4000e328: 00812c03 lw s8,8(sp) len += strlcpy( buffer, fallback, buffer_size ); 4000e32c: 00098513 mv a0,s3 } 4000e330: 01c12983 lw s3,28(sp) 4000e334: 03010113 addi sp,sp,48 len += strlcpy( buffer, fallback, buffer_size ); 4000e338: 25c0b06f j 40019594 =============================================================================== 4000e844 : uint32_t rtems_assoc_local_by_remote_bitfield( const rtems_assoc_t *ap, uint32_t remote_value ) { 4000e844: fe010113 addi sp,sp,-32 4000e848: 00812c23 sw s0,24(sp) 4000e84c: 00912a23 sw s1,20(sp) 4000e850: 01212823 sw s2,16(sp) 4000e854: 01312623 sw s3,12(sp) 4000e858: 01412423 sw s4,8(sp) 4000e85c: 00112e23 sw ra,28(sp) 4000e860: 00050a13 mv s4,a0 4000e864: 00058913 mv s2,a1 4000e868: 02000493 li s1,32 uint32_t b; uint32_t local_value = 0; 4000e86c: 00000993 li s3,0 for (b = 1; b; b <<= 1) { 4000e870: 00100413 li s0,1 4000e874: 00c0006f j 4000e880 4000e878: 00141413 slli s0,s0,0x1 4000e87c: 02048463 beqz s1,4000e8a4 if (b & remote_value) 4000e880: 008977b3 and a5,s2,s0 for (b = 1; b; b <<= 1) { 4000e884: fff48493 addi s1,s1,-1 if (b & remote_value) 4000e888: fe0788e3 beqz a5,4000e878 local_value |= rtems_assoc_local_by_remote(ap, b); 4000e88c: 00040593 mv a1,s0 4000e890: 000a0513 mv a0,s4 4000e894: 034000ef jal ra,4000e8c8 4000e898: 00a9e9b3 or s3,s3,a0 for (b = 1; b; b <<= 1) { 4000e89c: 00141413 slli s0,s0,0x1 4000e8a0: fe0490e3 bnez s1,4000e880 <== ALWAYS TAKEN } return local_value; } 4000e8a4: 01c12083 lw ra,28(sp) 4000e8a8: 01812403 lw s0,24(sp) 4000e8ac: 01412483 lw s1,20(sp) 4000e8b0: 01012903 lw s2,16(sp) 4000e8b4: 00812a03 lw s4,8(sp) 4000e8b8: 00098513 mv a0,s3 4000e8bc: 00c12983 lw s3,12(sp) 4000e8c0: 02010113 addi sp,sp,32 4000e8c4: 00008067 ret =============================================================================== 40009de8 : const rtems_assoc_t *rtems_assoc_ptr_by_local( const rtems_assoc_t *ap, uint32_t local_value ) { 40009de8: ff010113 addi sp,sp,-16 40009dec: 00912223 sw s1,4(sp) 40009df0: 00050493 mv s1,a0 const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) 40009df4: 00052503 lw a0,0(a0) { 40009df8: 00112623 sw ra,12(sp) 40009dfc: 00812423 sw s0,8(sp) if (rtems_assoc_is_default(ap)) 40009e00: 02050e63 beqz a0,40009e3c 40009e04: 00058413 mv s0,a1 40009e08: 400245b7 lui a1,0x40024 40009e0c: 61058593 addi a1,a1,1552 # 40024610 <_Thread_queue_Operations_priority_inherit+0x14> 40009e10: 1040f0ef jal ra,40018f14 40009e14: 02051e63 bnez a0,40009e50 default_ap = ap++; for ( ; ap->name; ap++) 40009e18: 00c4a783 lw a5,12(s1) default_ap = ap++; 40009e1c: 00c48513 addi a0,s1,12 for ( ; ap->name; ap++) 40009e20: 00079a63 bnez a5,40009e34 <== ALWAYS TAKEN 40009e24: 0380006f j 40009e5c <== NOT EXECUTED 40009e28: 00c52783 lw a5,12(a0) 40009e2c: 00c50513 addi a0,a0,12 40009e30: 02078663 beqz a5,40009e5c if (ap->local_value == local_value) 40009e34: 00452783 lw a5,4(a0) 40009e38: fe8798e3 bne a5,s0,40009e28 return ap; return default_ap; } 40009e3c: 00c12083 lw ra,12(sp) 40009e40: 00812403 lw s0,8(sp) 40009e44: 00412483 lw s1,4(sp) 40009e48: 01010113 addi sp,sp,16 40009e4c: 00008067 ret 40009e50: 00048513 mv a0,s1 const rtems_assoc_t *default_ap = 0; 40009e54: 00000493 li s1,0 40009e58: fddff06f j 40009e34 } 40009e5c: 00c12083 lw ra,12(sp) 40009e60: 00812403 lw s0,8(sp) for ( ; ap->name; ap++) 40009e64: 00048513 mv a0,s1 } 40009e68: 00412483 lw s1,4(sp) 40009e6c: 01010113 addi sp,sp,16 40009e70: 00008067 ret =============================================================================== 40000eb8 : const rtems_assoc_t *rtems_assoc_ptr_by_name( const rtems_assoc_t *ap, const char *name ) { 40000eb8: fe010113 addi sp,sp,-32 40000ebc: 00812c23 sw s0,24(sp) const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) 40000ec0: 00052403 lw s0,0(a0) { 40000ec4: 00912a23 sw s1,20(sp) 40000ec8: 00112e23 sw ra,28(sp) 40000ecc: 01212823 sw s2,16(sp) 40000ed0: 01312623 sw s3,12(sp) const rtems_assoc_t *default_ap = 0; 40000ed4: 00000493 li s1,0 if (rtems_assoc_is_default(ap)) 40000ed8: 04040663 beqz s0,40000f24 40000edc: 00058913 mv s2,a1 40000ee0: 400105b7 lui a1,0x40010 40000ee4: 00050993 mv s3,a0 40000ee8: c3058593 addi a1,a1,-976 # 4000fc30 40000eec: 00040513 mv a0,s0 40000ef0: 4d50d0ef jal ra,4000ebc4 40000ef4: 04051863 bnez a0,40000f44 default_ap = ap++; for ( ; ap->name; ap++) 40000ef8: 00c9a403 lw s0,12(s3) default_ap = ap++; 40000efc: 00c98493 addi s1,s3,12 for ( ; ap->name; ap++) 40000f00: 00041a63 bnez s0,40000f14 <== ALWAYS TAKEN 40000f04: 04c0006f j 40000f50 <== NOT EXECUTED 40000f08: 00c4a403 lw s0,12(s1) 40000f0c: 00c48493 addi s1,s1,12 40000f10: 04040063 beqz s0,40000f50 if (strcmp(ap->name, name) == 0) 40000f14: 00040513 mv a0,s0 40000f18: 00090593 mv a1,s2 40000f1c: 4a90d0ef jal ra,4000ebc4 40000f20: fe0514e3 bnez a0,40000f08 return ap; return default_ap; } 40000f24: 01c12083 lw ra,28(sp) 40000f28: 01812403 lw s0,24(sp) 40000f2c: 01012903 lw s2,16(sp) 40000f30: 00c12983 lw s3,12(sp) 40000f34: 00048513 mv a0,s1 40000f38: 01412483 lw s1,20(sp) 40000f3c: 02010113 addi sp,sp,32 40000f40: 00008067 ret 40000f44: 00098493 mv s1,s3 const rtems_assoc_t *default_ap = 0; 40000f48: 00000993 li s3,0 40000f4c: fc9ff06f j 40000f14 } 40000f50: 01c12083 lw ra,28(sp) 40000f54: 01812403 lw s0,24(sp) for ( ; ap->name; ap++) 40000f58: 00098493 mv s1,s3 } 40000f5c: 01012903 lw s2,16(sp) 40000f60: 00c12983 lw s3,12(sp) 40000f64: 00048513 mv a0,s1 40000f68: 01412483 lw s1,20(sp) 40000f6c: 02010113 addi sp,sp,32 40000f70: 00008067 ret =============================================================================== 4000e8f8 : const rtems_assoc_t *rtems_assoc_ptr_by_remote( const rtems_assoc_t *ap, uint32_t remote_value ) { 4000e8f8: ff010113 addi sp,sp,-16 4000e8fc: 00912223 sw s1,4(sp) 4000e900: 00050493 mv s1,a0 const rtems_assoc_t *default_ap = 0; if (rtems_assoc_is_default(ap)) 4000e904: 00052503 lw a0,0(a0) { 4000e908: 00112623 sw ra,12(sp) 4000e90c: 00812423 sw s0,8(sp) if (rtems_assoc_is_default(ap)) 4000e910: 02050e63 beqz a0,4000e94c 4000e914: 00058413 mv s0,a1 4000e918: 4001f5b7 lui a1,0x4001f 4000e91c: 04458593 addi a1,a1,68 # 4001f044 <_Thread_queue_Operations_priority_inherit+0x10c> 4000e920: 1c9060ef jal ra,400152e8 4000e924: 02051e63 bnez a0,4000e960 default_ap = ap++; for ( ; ap->name; ap++) 4000e928: 00c4a783 lw a5,12(s1) default_ap = ap++; 4000e92c: 00c48513 addi a0,s1,12 for ( ; ap->name; ap++) 4000e930: 00079a63 bnez a5,4000e944 <== ALWAYS TAKEN 4000e934: 0380006f j 4000e96c <== NOT EXECUTED 4000e938: 00c52783 lw a5,12(a0) 4000e93c: 00c50513 addi a0,a0,12 4000e940: 02078663 beqz a5,4000e96c if (ap->remote_value == remote_value) 4000e944: 00852783 lw a5,8(a0) 4000e948: fe8798e3 bne a5,s0,4000e938 return ap; return default_ap; } 4000e94c: 00c12083 lw ra,12(sp) 4000e950: 00812403 lw s0,8(sp) 4000e954: 00412483 lw s1,4(sp) 4000e958: 01010113 addi sp,sp,16 4000e95c: 00008067 ret 4000e960: 00048513 mv a0,s1 const rtems_assoc_t *default_ap = 0; 4000e964: 00000493 li s1,0 4000e968: fddff06f j 4000e944 } 4000e96c: 00c12083 lw ra,12(sp) 4000e970: 00812403 lw s0,8(sp) for ( ; ap->name; ap++) 4000e974: 00048513 mv a0,s1 } 4000e978: 00412483 lw s1,4(sp) 4000e97c: 01010113 addi sp,sp,16 4000e980: 00008067 ret =============================================================================== 40001000 : uint32_t rtems_assoc_remote_by_local_bitfield( const rtems_assoc_t *ap, uint32_t local_value ) { 40001000: fe010113 addi sp,sp,-32 40001004: 00812c23 sw s0,24(sp) 40001008: 00912a23 sw s1,20(sp) 4000100c: 01212823 sw s2,16(sp) 40001010: 01312623 sw s3,12(sp) 40001014: 01412423 sw s4,8(sp) 40001018: 00112e23 sw ra,28(sp) 4000101c: 00050a13 mv s4,a0 40001020: 00058913 mv s2,a1 40001024: 02000493 li s1,32 uint32_t b; uint32_t remote_value = 0; 40001028: 00000993 li s3,0 for (b = 1; b; b <<= 1) 4000102c: 00100413 li s0,1 40001030: 00c0006f j 4000103c 40001034: 00141413 slli s0,s0,0x1 40001038: 02048463 beqz s1,40001060 if (b & local_value) 4000103c: 008977b3 and a5,s2,s0 for (b = 1; b; b <<= 1) 40001040: fff48493 addi s1,s1,-1 if (b & local_value) 40001044: fe0788e3 beqz a5,40001034 remote_value |= rtems_assoc_remote_by_local(ap, b); 40001048: 00040593 mv a1,s0 4000104c: 000a0513 mv a0,s4 40001050: 034000ef jal ra,40001084 40001054: 00a9e9b3 or s3,s3,a0 for (b = 1; b; b <<= 1) 40001058: 00141413 slli s0,s0,0x1 4000105c: fe0490e3 bnez s1,4000103c <== ALWAYS TAKEN return remote_value; } 40001060: 01c12083 lw ra,28(sp) 40001064: 01812403 lw s0,24(sp) 40001068: 01412483 lw s1,20(sp) 4000106c: 01012903 lw s2,16(sp) 40001070: 00812a03 lw s4,8(sp) 40001074: 00098513 mv a0,s3 40001078: 00c12983 lw s3,12(sp) 4000107c: 02010113 addi sp,sp,32 40001080: 00008067 ret =============================================================================== 4000e984 : #include #include void *rtems_cache_aligned_malloc( size_t nbytes ) { 4000e984: ff010113 addi sp,sp,-16 4000e988: 00812423 sw s0,8(sp) 4000e98c: 00112623 sw ra,12(sp) 4000e990: 00050413 mv s0,a0 size_t line_size = rtems_cache_get_maximal_line_size(); 4000e994: 6d4030ef jal ra,40012068 4000e998: 00050593 mv a1,a0 if ( line_size > 0 ) { 4000e99c: 00050a63 beqz a0,4000e9b0 <== ALWAYS TAKEN /* Assume that the cache line size is a power of two */ size_t m = line_size - 1; nbytes = (nbytes + m) & ~m; 4000e9a0: fff40413 addi s0,s0,-1 <== NOT EXECUTED 4000e9a4: 00a40433 add s0,s0,a0 <== NOT EXECUTED 4000e9a8: 40a00533 neg a0,a0 <== NOT EXECUTED 4000e9ac: 00857433 and s0,a0,s0 <== NOT EXECUTED } return rtems_heap_allocate_aligned_with_boundary( nbytes, line_size, 0 ); 4000e9b0: 00040513 mv a0,s0 } 4000e9b4: 00812403 lw s0,8(sp) 4000e9b8: 00c12083 lw ra,12(sp) return rtems_heap_allocate_aligned_with_boundary( nbytes, line_size, 0 ); 4000e9bc: 00000613 li a2,0 } 4000e9c0: 01010113 addi sp,sp,16 return rtems_heap_allocate_aligned_with_boundary( nbytes, line_size, 0 ); 4000e9c4: ebcf406f j 40003080 =============================================================================== 40001b58 : void rtems_cache_coherent_add_area( void *area_begin, uintptr_t area_size ) { if ( _System_state_Is_up( _System_state_Get()) ) { 40001b58: 8e81a703 lw a4,-1816(gp) # 40012778 <_System_state_Current> { 40001b5c: fe010113 addi sp,sp,-32 40001b60: 00812c23 sw s0,24(sp) 40001b64: 00112e23 sw ra,28(sp) 40001b68: 00912a23 sw s1,20(sp) if ( _System_state_Is_up( _System_state_Get()) ) { 40001b6c: 00200793 li a5,2 { 40001b70: 00050413 mv s0,a0 40001b74: 00058613 mv a2,a1 if ( _System_state_Is_up( _System_state_Get()) ) { 40001b78: 02f70663 beq a4,a5,40001ba4 Heap_Control *heap = cache_coherent_heap; 40001b7c: 8ac18493 addi s1,gp,-1876 # 4001273c 40001b80: 0004a503 lw a0,0(s1) if ( heap == NULL ) { 40001b84: 04050c63 beqz a0,40001bdc <== NEVER TAKEN _Heap_Extend( heap, area_begin, area_size, 0 ); 40001b88: 00040593 mv a1,s0 _RTEMS_Unlock_allocator(); } else { add_area( area_begin, area_size ); } } 40001b8c: 01812403 lw s0,24(sp) 40001b90: 01c12083 lw ra,28(sp) 40001b94: 01412483 lw s1,20(sp) _Heap_Extend( heap, area_begin, area_size, 0 ); 40001b98: 00000693 li a3,0 } 40001b9c: 02010113 addi sp,sp,32 _Heap_Extend( heap, area_begin, area_size, 0 ); 40001ba0: 6950306f j 40005a34 <_Heap_Extend> Heap_Control *heap = cache_coherent_heap; 40001ba4: 00b12623 sw a1,12(sp) 40001ba8: 8ac18493 addi s1,gp,-1876 # 4001273c _RTEMS_Lock_allocator(); 40001bac: 7a4030ef jal ra,40005350 <_RTEMS_Lock_allocator> Heap_Control *heap = cache_coherent_heap; 40001bb0: 0004a503 lw a0,0(s1) if ( heap == NULL ) { 40001bb4: 00c12603 lw a2,12(sp) 40001bb8: 04050c63 beqz a0,40001c10 _Heap_Extend( heap, area_begin, area_size, 0 ); 40001bbc: 00000693 li a3,0 40001bc0: 00040593 mv a1,s0 40001bc4: 671030ef jal ra,40005a34 <_Heap_Extend> } 40001bc8: 01812403 lw s0,24(sp) 40001bcc: 01c12083 lw ra,28(sp) 40001bd0: 01412483 lw s1,20(sp) 40001bd4: 02010113 addi sp,sp,32 _RTEMS_Unlock_allocator(); 40001bd8: 7840306f j 4000535c <_RTEMS_Unlock_allocator> ok = _Heap_Initialize( heap, area_begin, area_size, 0 ); 40001bdc: 400157b7 lui a5,0x40015 <== NOT EXECUTED 40001be0: 00040593 mv a1,s0 <== NOT EXECUTED 40001be4: 00000693 li a3,0 <== NOT EXECUTED 40001be8: 2c078513 addi a0,a5,704 # 400152c0 <== NOT EXECUTED 40001bec: 2c078413 addi s0,a5,704 <== NOT EXECUTED 40001bf0: 369030ef jal ra,40005758 <_Heap_Initialize> <== NOT EXECUTED if ( ok ) { 40001bf4: 00050463 beqz a0,40001bfc <== NOT EXECUTED cache_coherent_heap = heap; 40001bf8: 0084a023 sw s0,0(s1) <== NOT EXECUTED } 40001bfc: 01c12083 lw ra,28(sp) <== NOT EXECUTED 40001c00: 01812403 lw s0,24(sp) <== NOT EXECUTED 40001c04: 01412483 lw s1,20(sp) <== NOT EXECUTED 40001c08: 02010113 addi sp,sp,32 <== NOT EXECUTED 40001c0c: 00008067 ret <== NOT EXECUTED ok = _Heap_Initialize( heap, area_begin, area_size, 0 ); 40001c10: 400157b7 lui a5,0x40015 40001c14: 00040593 mv a1,s0 40001c18: 00000693 li a3,0 40001c1c: 2c078513 addi a0,a5,704 # 400152c0 40001c20: 2c078413 addi s0,a5,704 40001c24: 335030ef jal ra,40005758 <_Heap_Initialize> if ( ok ) { 40001c28: fa0500e3 beqz a0,40001bc8 cache_coherent_heap = heap; 40001c2c: 0084a023 sw s0,0(s1) 40001c30: f99ff06f j 40001bc8 =============================================================================== 40001b00 : void rtems_cache_coherent_free( void *ptr ) { 40001b00: ff010113 addi sp,sp,-16 40001b04: 00812423 sw s0,8(sp) 40001b08: 00112623 sw ra,12(sp) 40001b0c: 00050413 mv s0,a0 Heap_Control *heap; _RTEMS_Lock_allocator(); 40001b10: 041030ef jal ra,40005350 <_RTEMS_Lock_allocator> heap = cache_coherent_heap; 40001b14: 8ac1a503 lw a0,-1876(gp) # 4001273c if ( heap != NULL ) { 40001b18: 02050063 beqz a0,40001b38 if ( _Heap_Free( heap, ptr ) ) { 40001b1c: 00040593 mv a1,s0 40001b20: 24c040ef jal ra,40005d6c <_Heap_Free> 40001b24: 00050a63 beqz a0,40001b38 if ( heap != NULL ) { _Heap_Free( heap, ptr ); } _RTEMS_Unlock_allocator(); } 40001b28: 00812403 lw s0,8(sp) 40001b2c: 00c12083 lw ra,12(sp) 40001b30: 01010113 addi sp,sp,16 _RTEMS_Unlock_allocator(); 40001b34: 0290306f j 4000535c <_RTEMS_Unlock_allocator> heap = RTEMS_Malloc_Heap; 40001b38: 8b41a503 lw a0,-1868(gp) # 40012744 if ( heap != NULL ) { 40001b3c: fe0506e3 beqz a0,40001b28 <== NEVER TAKEN _Heap_Free( heap, ptr ); 40001b40: 00040593 mv a1,s0 40001b44: 228040ef jal ra,40005d6c <_Heap_Free> } 40001b48: 00812403 lw s0,8(sp) 40001b4c: 00c12083 lw ra,12(sp) 40001b50: 01010113 addi sp,sp,16 _RTEMS_Unlock_allocator(); 40001b54: 0090306f j 4000535c <_RTEMS_Unlock_allocator> =============================================================================== 4000488c : } void rtems_filesystem_do_unmount( rtems_filesystem_mount_table_entry_t *mt_entry ) { 4000488c: ff010113 addi sp,sp,-16 40004890: 00112623 sw ra,12(sp) 40004894: 00812423 sw s0,8(sp) 40004898: 00050413 mv s0,a0 rtems_libio_lock(); 4000489c: e7cfe0ef jal ra,40002f18 next = the_node->next; 400048a0: 00042703 lw a4,0(s0) previous = the_node->previous; 400048a4: 00442783 lw a5,4(s0) next->previous = previous; 400048a8: 00f72223 sw a5,4(a4) previous->next = next; 400048ac: 00e7a023 sw a4,0(a5) rtems_libio_unlock(); 400048b0: e74fe0ef jal ra,40002f24 release_with_count(global_loc, 1); 400048b4: 02042503 lw a0,32(s0) 400048b8: 00100593 li a1,1 400048bc: 048000ef jal ra,40004904 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); 400048c0: 00c42783 lw a5,12(s0) 400048c4: 00040513 mv a0,s0 400048c8: 0347a783 lw a5,52(a5) 400048cc: 000780e7 jalr a5 if (mt_entry->unmount_task != 0) { 400048d0: 03c42503 lw a0,60(s0) 400048d4: 00050863 beqz a0,400048e4 <== 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 ); 400048d8: 800005b7 lui a1,0x80000 400048dc: 5ac020ef jal ra,40006e88 rtems_status_code sc = rtems_event_transient_send(mt_entry->unmount_task); if (sc != RTEMS_SUCCESSFUL) { 400048e0: 00051c63 bnez a0,400048f8 <== NEVER TAKEN rtems_fatal_error_occurred(0xdeadbeef); } } free(mt_entry); 400048e4: 00040513 mv a0,s0 } 400048e8: 00812403 lw s0,8(sp) 400048ec: 00c12083 lw ra,12(sp) 400048f0: 01010113 addi sp,sp,16 free(mt_entry); 400048f4: 9bcfe06f j 40002ab0 rtems_fatal_error_occurred(0xdeadbeef); 400048f8: deadc537 lui a0,0xdeadc <== NOT EXECUTED 400048fc: eef50513 addi a0,a0,-273 # deadbeef <== NOT EXECUTED 40004900: 788020ef jal ra,40007088 <== NOT EXECUTED =============================================================================== 40004440 : if (!rtems_filesystem_location_is_null(&ctx->currentloc)) { 40004440: 02852703 lw a4,40(a0) <== NOT EXECUTED 40004444: 4001f7b7 lui a5,0x4001f <== NOT EXECUTED ctx->path = NULL; 40004448: 00052023 sw zero,0(a0) <== NOT EXECUTED ctx->pathlen = 0; 4000444c: 00052223 sw zero,4(a0) <== NOT EXECUTED ctx->token = NULL; 40004450: 00052423 sw zero,8(a0) <== NOT EXECUTED ctx->tokenlen = 0; 40004454: 00052623 sw zero,12(a0) <== NOT EXECUTED if (!rtems_filesystem_location_is_null(&ctx->currentloc)) { 40004458: b0078793 addi a5,a5,-1280 # 4001eb00 <== NOT EXECUTED 4000445c: 04f70c63 beq a4,a5,400044b4 <== NOT EXECUTED { 40004460: ff010113 addi sp,sp,-16 <== NOT EXECUTED 40004464: 00812423 sw s0,8(sp) <== NOT EXECUTED 40004468: 00912223 sw s1,4(sp) <== NOT EXECUTED 4000446c: 00112623 sw ra,12(sp) <== NOT EXECUTED 40004470: 00050413 mv s0,a0 <== NOT EXECUTED 40004474: 00058493 mv s1,a1 <== NOT EXECUTED if (eno != 0) { 40004478: 00059e63 bnez a1,40004494 <== NOT EXECUTED rtems_filesystem_location_detach(&ctx->currentloc); 4000447c: 01840513 addi a0,s0,24 <== NOT EXECUTED } } 40004480: 00812403 lw s0,8(sp) <== NOT EXECUTED 40004484: 00c12083 lw ra,12(sp) <== NOT EXECUTED 40004488: 00412483 lw s1,4(sp) <== NOT EXECUTED 4000448c: 01010113 addi sp,sp,16 <== NOT EXECUTED rtems_filesystem_location_detach(&ctx->currentloc); 40004490: 3340006f j 400047c4 <== NOT EXECUTED errno = eno; 40004494: 234100ef jal ra,400146c8 <__errno> <== NOT EXECUTED 40004498: 00952023 sw s1,0(a0) <== NOT EXECUTED rtems_filesystem_location_detach(&ctx->currentloc); 4000449c: 01840513 addi a0,s0,24 <== NOT EXECUTED } 400044a0: 00812403 lw s0,8(sp) <== NOT EXECUTED 400044a4: 00c12083 lw ra,12(sp) <== NOT EXECUTED 400044a8: 00412483 lw s1,4(sp) <== NOT EXECUTED 400044ac: 01010113 addi sp,sp,16 <== NOT EXECUTED rtems_filesystem_location_detach(&ctx->currentloc); 400044b0: 3140006f j 400047c4 <== NOT EXECUTED 400044b4: 00008067 ret <== NOT EXECUTED =============================================================================== 4000ee4c : void rtems_filesystem_eval_path_generic( rtems_filesystem_eval_path_context_t *ctx, void *arg, const rtems_filesystem_eval_path_generic_config *config ) { 4000ee4c: fd010113 addi sp,sp,-48 4000ee50: 02812423 sw s0,40(sp) 4000ee54: 02912223 sw s1,36(sp) 4000ee58: 03212023 sw s2,32(sp) 4000ee5c: 01312e23 sw s3,28(sp) 4000ee60: 01412c23 sw s4,24(sp) 4000ee64: 01512a23 sw s5,20(sp) 4000ee68: 01612823 sw s6,16(sp) 4000ee6c: 01712623 sw s7,12(sp) 4000ee70: 01812423 sw s8,8(sp) 4000ee74: 02112623 sw ra,44(sp) 4000ee78: 01912223 sw s9,4(sp) 4000ee7c: 01a12023 sw s10,0(sp) 4000ee80: 00050413 mv s0,a0 4000ee84: 00058913 mv s2,a1 4000ee88: 00060493 mv s1,a2 return tokenlen == 1 && token [0] == '.'; 4000ee8c: 00100a13 li s4,1 return tokenlen == 2 && token [0] == '.' && token [1] == '.'; 4000ee90: 00200993 li s3,2 4000ee94: 02e00a93 li s5,46 return &ctx->currentloc; 4000ee98: 01850b93 addi s7,a0,24 } else { /* This is the root file system */ status = (*config->eval_token)(ctx, arg, ".", 1); } } else { status = (*config->eval_token)(ctx, arg, "..", 2); 4000ee9c: 4001fc37 lui s8,0x4001f status = (*config->eval_token)(ctx, arg, ".", 1); 4000eea0: 4001fb37 lui s6,0x4001f rtems_filesystem_eval_path_next_token(ctx); 4000eea4: 00040513 mv a0,s0 4000eea8: 268000ef jal ra,4000f110 *tokenlen = ctx->tokenlen; 4000eeac: 00c42c83 lw s9,12(s0) *token = ctx->token; 4000eeb0: 00842d03 lw s10,8(s0) if (tokenlen > 0) { 4000eeb4: 080c8663 beqz s9,4000ef40 if ((*config->is_directory)(ctx, arg)) { 4000eeb8: 0004a783 lw a5,0(s1) 4000eebc: 00090593 mv a1,s2 4000eec0: 00040513 mv a0,s0 4000eec4: 000780e7 jalr a5 4000eec8: 1e050a63 beqz a0,4000f0bc return tokenlen == 1 && token [0] == '.'; 4000eecc: 034c8a63 beq s9,s4,4000ef00 return tokenlen == 2 && token [0] == '.' && token [1] == '.'; 4000eed0: 013c9663 bne s9,s3,4000eedc 4000eed4: 000d4783 lbu a5,0(s10) 4000eed8: 11578263 beq a5,s5,4000efdc } } else { status = (*config->eval_token)(ctx, arg, token, tokenlen); 4000eedc: 0044a783 lw a5,4(s1) 4000eee0: 000c8693 mv a3,s9 4000eee4: 000d0613 mv a2,s10 4000eee8: 00090593 mv a1,s2 4000eeec: 00040513 mv a0,s0 4000eef0: 000780e7 jalr a5 } if (status == RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_NO_ENTRY) { 4000eef4: 05350263 beq a0,s3,4000ef38 while (status == RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_CONTINUE) { 4000eef8: fa0506e3 beqz a0,4000eea4 4000eefc: 0440006f j 4000ef40 return tokenlen == 1 && token [0] == '.'; 4000ef00: 000d4783 lbu a5,0(s10) 4000ef04: fd579ce3 bne a5,s5,4000eedc if (rtems_filesystem_eval_path_has_path(ctx)) { 4000ef08: 00442783 lw a5,4(s0) 4000ef0c: 00079863 bnez a5,4000ef1c if ((eval_flags & RTEMS_FS_REJECT_TERMINAL_DOT) == 0) { 4000ef10: 01042783 lw a5,16(s0) 4000ef14: 1007f793 andi a5,a5,256 4000ef18: 0a079e63 bnez a5,4000efd4 status = (*config->eval_token)(ctx, arg, ".", 1); 4000ef1c: 0044a783 lw a5,4(s1) 4000ef20: 00100693 li a3,1 4000ef24: ab0b0613 addi a2,s6,-1360 # 4001eab0 4000ef28: 00090593 mv a1,s2 4000ef2c: 00040513 mv a0,s0 4000ef30: 000780e7 jalr a5 if (status == RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_NO_ENTRY) { 4000ef34: fd3512e3 bne a0,s3,4000eef8 if (rtems_filesystem_eval_path_has_path(ctx)) { 4000ef38: 00442783 lw a5,4(s0) 4000ef3c: 02079e63 bnez a5,4000ef78 } } else { status = RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_DONE; } } } 4000ef40: 02c12083 lw ra,44(sp) 4000ef44: 02812403 lw s0,40(sp) 4000ef48: 02412483 lw s1,36(sp) 4000ef4c: 02012903 lw s2,32(sp) 4000ef50: 01c12983 lw s3,28(sp) 4000ef54: 01812a03 lw s4,24(sp) 4000ef58: 01412a83 lw s5,20(sp) 4000ef5c: 01012b03 lw s6,16(sp) 4000ef60: 00c12b83 lw s7,12(sp) 4000ef64: 00812c03 lw s8,8(sp) 4000ef68: 00412c83 lw s9,4(sp) 4000ef6c: 00012d03 lw s10,0(sp) 4000ef70: 03010113 addi sp,sp,48 4000ef74: 00008067 ret rtems_filesystem_eval_path_eat_delimiter(ctx); 4000ef78: 00040513 mv a0,s0 4000ef7c: 148000ef jal ra,4000f0c4 (eval_flags & RTEMS_FS_ACCEPT_RESIDUAL_DELIMITERS) == 0 4000ef80: 01042783 lw a5,16(s0) 4000ef84: 0807f793 andi a5,a5,128 if ( 4000ef88: 00078663 beqz a5,4000ef94 || rtems_filesystem_eval_path_has_path(ctx) 4000ef8c: 00442783 lw a5,4(s0) 4000ef90: fa0788e3 beqz a5,4000ef40 rtems_filesystem_eval_path_error(ctx, ENOENT); 4000ef94: 00200593 li a1,2 rtems_filesystem_eval_path_error(ctx, ENOTDIR); 4000ef98: 00040513 mv a0,s0 } 4000ef9c: 02812403 lw s0,40(sp) 4000efa0: 02c12083 lw ra,44(sp) 4000efa4: 02412483 lw s1,36(sp) 4000efa8: 02012903 lw s2,32(sp) 4000efac: 01c12983 lw s3,28(sp) 4000efb0: 01812a03 lw s4,24(sp) 4000efb4: 01412a83 lw s5,20(sp) 4000efb8: 01012b03 lw s6,16(sp) 4000efbc: 00c12b83 lw s7,12(sp) 4000efc0: 00812c03 lw s8,8(sp) 4000efc4: 00412c83 lw s9,4(sp) 4000efc8: 00012d03 lw s10,0(sp) 4000efcc: 03010113 addi sp,sp,48 rtems_filesystem_eval_path_error(ctx, ENOTDIR); 4000efd0: c70f506f j 40004440 rtems_filesystem_eval_path_error(ctx, EINVAL); 4000efd4: 01600593 li a1,22 4000efd8: fc1ff06f j 4000ef98 return tokenlen == 2 && token [0] == '.' && token [1] == '.'; 4000efdc: 001d4783 lbu a5,1(s10) 4000efe0: ef579ee3 bne a5,s5,4000eedc if (is_eval_path_root(ctx, currentloc)) { 4000efe4: 03042583 lw a1,48(s0) const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry; 4000efe8: 02c42783 lw a5,44(s0) && (*mt_entry->ops->are_nodes_equal_h)( loc, rootloc ); 4000efec: 0145a703 lw a4,20(a1) 4000eff0: 00c7a683 lw a3,12(a5) 4000eff4: 0106a683 lw a3,16(a3) 4000eff8: 08e78063 beq a5,a4,4000f078 return (*mt_entry->ops->are_nodes_equal_h)( loc, mt_fs_root ); 4000effc: 0247a583 lw a1,36(a5) 4000f000: 000b8513 mv a0,s7 4000f004: 000680e7 jalr a3 } else if (is_fs_root(currentloc)) { 4000f008: 08050c63 beqz a0,4000f0a0 if (currentloc->mt_entry->mt_point_node != NULL) { 4000f00c: 02c42583 lw a1,44(s0) 4000f010: 0205a783 lw a5,32(a1) 4000f014: f00784e3 beqz a5,4000ef1c <== NEVER TAKEN size_t tokenlen = ctx->tokenlen; 4000f018: 00c42683 lw a3,12(s0) ctx->path -= tokenlen; 4000f01c: 00042703 lw a4,0(s0) ctx->pathlen += tokenlen; 4000f020: 00442783 lw a5,4(s0) ctx->tokenlen = 0; 4000f024: 00042623 sw zero,12(s0) ctx->path -= tokenlen; 4000f028: 40d70733 sub a4,a4,a3 ctx->pathlen += tokenlen; 4000f02c: 00d787b3 add a5,a5,a3 ctx->path -= tokenlen; 4000f030: 00e42023 sw a4,0(s0) ctx->pathlen += tokenlen; 4000f034: 00f42223 sw a5,4(s0) rtems_filesystem_eval_path_restart( 4000f038: 00040513 mv a0,s0 } 4000f03c: 02812403 lw s0,40(sp) 4000f040: 02c12083 lw ra,44(sp) 4000f044: 02412483 lw s1,36(sp) 4000f048: 02012903 lw s2,32(sp) 4000f04c: 01c12983 lw s3,28(sp) 4000f050: 01812a03 lw s4,24(sp) 4000f054: 01412a83 lw s5,20(sp) 4000f058: 01012b03 lw s6,16(sp) 4000f05c: 00c12b83 lw s7,12(sp) 4000f060: 00812c03 lw s8,8(sp) 4000f064: 00412c83 lw s9,4(sp) 4000f068: 00012d03 lw s10,0(sp) rtems_filesystem_eval_path_restart( 4000f06c: 02058593 addi a1,a1,32 } 4000f070: 03010113 addi sp,sp,48 rtems_filesystem_eval_path_restart( 4000f074: d1cf506f j 40004590 && (*mt_entry->ops->are_nodes_equal_h)( loc, rootloc ); 4000f078: 000b8513 mv a0,s7 4000f07c: 000680e7 jalr a3 4000f080: e8051ee3 bnez a0,4000ef1c const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry; 4000f084: 02c42783 lw a5,44(s0) return (*mt_entry->ops->are_nodes_equal_h)( loc, mt_fs_root ); 4000f088: 000b8513 mv a0,s7 4000f08c: 00c7a703 lw a4,12(a5) 4000f090: 0247a583 lw a1,36(a5) 4000f094: 01072683 lw a3,16(a4) 4000f098: 000680e7 jalr a3 } else if (is_fs_root(currentloc)) { 4000f09c: f60518e3 bnez a0,4000f00c <== NEVER TAKEN status = (*config->eval_token)(ctx, arg, "..", 2); 4000f0a0: 0044a783 lw a5,4(s1) 4000f0a4: 00200693 li a3,2 4000f0a8: 050c0613 addi a2,s8,80 # 4001f050 <_Thread_queue_Operations_priority_inherit+0x118> 4000f0ac: 00090593 mv a1,s2 4000f0b0: 00040513 mv a0,s0 4000f0b4: 000780e7 jalr a5 4000f0b8: e3dff06f j 4000eef4 rtems_filesystem_eval_path_error(ctx, ENOTDIR); 4000f0bc: 01400593 li a1,20 4000f0c0: ed9ff06f j 4000ef98 =============================================================================== 4000f110 : const char *current = ctx->path; 4000f110: 00052783 lw a5,0(a0) const char *end = current + ctx->pathlen; 4000f114: 00452683 lw a3,4(a0) 4000f118: 00d786b3 add a3,a5,a3 while (current != end && rtems_filesystem_is_delimiter(*current)) { 4000f11c: 06d78863 beq a5,a3,4000f18c 4000f120: 02f00613 li a2,47 4000f124: 05c00593 li a1,92 4000f128: 0007c703 lbu a4,0(a5) 4000f12c: 04c70c63 beq a4,a2,4000f184 4000f130: 04b70a63 beq a4,a1,4000f184 ctx->pathlen = (size_t) (end - current); 4000f134: 40f68833 sub a6,a3,a5 ctx->path = current; 4000f138: 00f52023 sw a5,0(a0) ctx->pathlen = (size_t) (end - current); 4000f13c: 01052223 sw a6,4(a0) { const char *begin = ctx->path; const char *end = begin + ctx->pathlen; const char *current = begin; while (current != end && !rtems_filesystem_is_delimiter(*current)) { 4000f140: 06f68a63 beq a3,a5,4000f1b4 4000f144: 00078713 mv a4,a5 4000f148: 02f00593 li a1,47 4000f14c: 05c00893 li a7,92 4000f150: 0100006f j 4000f160 4000f154: 01160a63 beq a2,a7,4000f168 ++current; 4000f158: 00170713 addi a4,a4,1 while (current != end && !rtems_filesystem_is_delimiter(*current)) { 4000f15c: 04d70063 beq a4,a3,4000f19c 4000f160: 00074603 lbu a2,0(a4) 4000f164: feb618e3 bne a2,a1,4000f154 } ctx->path = current; ctx->pathlen = (size_t) (end - current); 4000f168: 40e686b3 sub a3,a3,a4 ctx->token = begin; ctx->tokenlen = (size_t) (current - begin); 4000f16c: 40f70833 sub a6,a4,a5 ctx->path = current; 4000f170: 00e52023 sw a4,0(a0) ctx->pathlen = (size_t) (end - current); 4000f174: 00d52223 sw a3,4(a0) ctx->token = begin; 4000f178: 00f52423 sw a5,8(a0) ctx->tokenlen = (size_t) (current - begin); 4000f17c: 01052623 sw a6,12(a0) rtems_filesystem_eval_path_context_t *ctx ) { rtems_filesystem_eval_path_eat_delimiter(ctx); next_token(ctx); } 4000f180: 00008067 ret ++current; 4000f184: 00178793 addi a5,a5,1 while (current != end && rtems_filesystem_is_delimiter(*current)) { 4000f188: faf690e3 bne a3,a5,4000f128 4000f18c: 00000693 li a3,0 while (current != end && !rtems_filesystem_is_delimiter(*current)) { 4000f190: 00078713 mv a4,a5 4000f194: 00000813 li a6,0 4000f198: fd9ff06f j 4000f170 4000f19c: 00000693 li a3,0 ctx->path = current; 4000f1a0: 00e52023 sw a4,0(a0) ctx->pathlen = (size_t) (end - current); 4000f1a4: 00d52223 sw a3,4(a0) ctx->token = begin; 4000f1a8: 00f52423 sw a5,8(a0) ctx->tokenlen = (size_t) (current - begin); 4000f1ac: 01052623 sw a6,12(a0) } 4000f1b0: 00008067 ret while (current != end && !rtems_filesystem_is_delimiter(*current)) { 4000f1b4: 00080693 mv a3,a6 <== NOT EXECUTED 4000f1b8: fd9ff06f j 4000f190 <== NOT EXECUTED =============================================================================== 4000463c : { 4000463c: fd010113 addi sp,sp,-48 40004640: 02812423 sw s0,40(sp) 40004644: 02112623 sw ra,44(sp) 40004648: 03212223 sw s2,36(sp) 4000464c: 03312023 sw s3,32(sp) 40004650: 01412e23 sw s4,28(sp) 40004654: 00050413 mv s0,a0 if (pathlen > 0) { 40004658: 0a060c63 beqz a2,40004710 <== NEVER TAKEN if (ctx->recursionlevel < RTEMS_FILESYSTEM_SYMLOOP_MAX) { 4000465c: 01452783 lw a5,20(a0) 40004660: 01f00713 li a4,31 40004664: 08f74063 blt a4,a5,400046e4 if (rtems_filesystem_is_delimiter(path [0])) { 40004668: 0005c703 lbu a4,0(a1) return c == '/' || c == '\\'; 4000466c: 02f00693 li a3,47 const char *saved_path = ctx->path; 40004670: 00052983 lw s3,0(a0) size_t saved_pathlen = ctx->pathlen; 40004674: 00452a03 lw s4,4(a0) 40004678: 00058913 mv s2,a1 4000467c: 0ed70063 beq a4,a3,4000475c 40004680: 05c00693 li a3,92 40004684: 0cd70c63 beq a4,a3,4000475c ++ctx->recursionlevel; 40004688: 00178793 addi a5,a5,1 ctx->path = path; 4000468c: 01242023 sw s2,0(s0) ctx->pathlen = pathlen; 40004690: 00c42223 sw a2,4(s0) ++ctx->recursionlevel; 40004694: 00f42a23 sw a5,20(s0) (*ctx->currentloc.mt_entry->ops->eval_path_h)(ctx); 40004698: 02c42783 lw a5,44(s0) 4000469c: 00040513 mv a0,s0 400046a0: 00c7a783 lw a5,12(a5) 400046a4: 0087a783 lw a5,8(a5) 400046a8: 000780e7 jalr a5 while (ctx->pathlen > 0) { 400046ac: 00442783 lw a5,4(s0) 400046b0: fe0794e3 bnez a5,40004698 --ctx->recursionlevel; 400046b4: 01442783 lw a5,20(s0) ctx->path = saved_path; 400046b8: 01342023 sw s3,0(s0) ctx->pathlen = saved_pathlen; 400046bc: 01442223 sw s4,4(s0) --ctx->recursionlevel; 400046c0: fff78793 addi a5,a5,-1 400046c4: 00f42a23 sw a5,20(s0) } 400046c8: 02c12083 lw ra,44(sp) 400046cc: 02812403 lw s0,40(sp) 400046d0: 02412903 lw s2,36(sp) 400046d4: 02012983 lw s3,32(sp) 400046d8: 01c12a03 lw s4,28(sp) 400046dc: 03010113 addi sp,sp,48 400046e0: 00008067 ret if (!rtems_filesystem_location_is_null(&ctx->currentloc)) { 400046e4: 02852703 lw a4,40(a0) 400046e8: 4001f7b7 lui a5,0x4001f ctx->path = NULL; 400046ec: 00052023 sw zero,0(a0) ctx->pathlen = 0; 400046f0: 00052223 sw zero,4(a0) ctx->token = NULL; 400046f4: 00052423 sw zero,8(a0) ctx->tokenlen = 0; 400046f8: 00052623 sw zero,12(a0) if (!rtems_filesystem_location_is_null(&ctx->currentloc)) { 400046fc: b0078793 addi a5,a5,-1280 # 4001eb00 40004700: fcf704e3 beq a4,a5,400046c8 errno = eno; 40004704: 7c50f0ef jal ra,400146c8 <__errno> 40004708: 05c00793 li a5,92 4000470c: 02c0006f j 40004738 if (!rtems_filesystem_location_is_null(&ctx->currentloc)) { 40004710: 02852703 lw a4,40(a0) <== NOT EXECUTED 40004714: 4001f7b7 lui a5,0x4001f <== NOT EXECUTED ctx->path = NULL; 40004718: 00052023 sw zero,0(a0) <== NOT EXECUTED ctx->pathlen = 0; 4000471c: 00052223 sw zero,4(a0) <== NOT EXECUTED ctx->token = NULL; 40004720: 00052423 sw zero,8(a0) <== NOT EXECUTED ctx->tokenlen = 0; 40004724: 00052623 sw zero,12(a0) <== NOT EXECUTED if (!rtems_filesystem_location_is_null(&ctx->currentloc)) { 40004728: b0078793 addi a5,a5,-1280 # 4001eb00 <== NOT EXECUTED 4000472c: f8f70ee3 beq a4,a5,400046c8 <== NOT EXECUTED errno = eno; 40004730: 7990f0ef jal ra,400146c8 <__errno> <== NOT EXECUTED 40004734: 00200793 li a5,2 <== NOT EXECUTED 40004738: 00f52023 sw a5,0(a0) rtems_filesystem_location_detach(&ctx->currentloc); 4000473c: 01840513 addi a0,s0,24 } 40004740: 02812403 lw s0,40(sp) 40004744: 02c12083 lw ra,44(sp) 40004748: 02412903 lw s2,36(sp) 4000474c: 02012983 lw s3,32(sp) 40004750: 01c12a03 lw s4,28(sp) 40004754: 03010113 addi sp,sp,48 rtems_filesystem_location_detach(&ctx->currentloc); 40004758: 06c0006f j 400047c4 rtems_filesystem_eval_path_restart(ctx, &ctx->rootloc); 4000475c: 03040593 addi a1,s0,48 40004760: 00040513 mv a0,s0 40004764: 00c12623 sw a2,12(sp) 40004768: e29ff0ef jal ra,40004590 ++ctx->recursionlevel; 4000476c: 01442783 lw a5,20(s0) 40004770: 00c12603 lw a2,12(sp) 40004774: f15ff06f j 40004688 =============================================================================== 40004310 : { 40004310: fd010113 addi sp,sp,-48 40004314: 03212023 sw s2,32(sp) 40004318: 00050913 mv s2,a0 size_t pathlen = strlen(path); 4000431c: 00058513 mv a0,a1 { 40004320: 02812423 sw s0,40(sp) 40004324: 02912223 sw s1,36(sp) 40004328: 01312e23 sw s3,28(sp) 4000432c: 01412c23 sw s4,24(sp) 40004330: 01512a23 sw s5,20(sp) 40004334: 01612823 sw s6,16(sp) 40004338: 00058493 mv s1,a1 4000433c: 00068a93 mv s5,a3 40004340: 00070b13 mv s6,a4 40004344: 02112623 sw ra,44(sp) 40004348: 01712623 sw s7,12(sp) 4000434c: 01812423 sw s8,8(sp) 40004350: 00060a13 mv s4,a2 size_t pathlen = strlen(path); 40004354: 240110ef jal ra,40015594 40004358: 00050413 mv s0,a0 size_t i = pathlen - 1; 4000435c: fff40813 addi a6,s0,-1 size_t pathlen = strlen(path); 40004360: 00050993 mv s3,a0 return c == '/' || c == '\\'; 40004364: 02f00713 li a4,47 40004368: 05c00693 li a3,92 if (rtems_filesystem_is_delimiter(path [i])) { 4000436c: 010487b3 add a5,s1,a6 while (pathlen > 0) { 40004370: 02040063 beqz s0,40004390 if (rtems_filesystem_is_delimiter(path [i])) { 40004374: 0007c783 lbu a5,0(a5) 40004378: 08e78e63 beq a5,a4,40004414 4000437c: 08d78c63 beq a5,a3,40004414 pathlen = i; 40004380: 00080413 mv s0,a6 size_t i = pathlen - 1; 40004384: fff40813 addi a6,s0,-1 if (rtems_filesystem_is_delimiter(path [i])) { 40004388: 010487b3 add a5,s1,a6 while (pathlen > 0) { 4000438c: fe0414e3 bnez s0,40004374 const char *name = NULL; 40004390: 00000b93 li s7,0 if (pathlen > 0) { 40004394: 08099c63 bnez s3,4000442c &rtems_filesystem_root, 40004398: 23d000ef jal ra,40004dd4 4000439c: 00050c13 mv s8,a0 &rtems_filesystem_current 400043a0: 235000ef jal ra,40004dd4 400043a4: 00050793 mv a5,a0 currentloc = rtems_filesystem_eval_path_start_with_root_and_current( 400043a8: 004c0713 addi a4,s8,4 400043ac: 000b0693 mv a3,s6 400043b0: 00040613 mv a2,s0 400043b4: 00048593 mv a1,s1 400043b8: 00090513 mv a0,s2 400043bc: da5ff0ef jal ra,40004160 400043c0: 00050593 mv a1,a0 rtems_filesystem_location_clone(parentloc, currentloc); 400043c4: 000a8513 mv a0,s5 400043c8: 6000a0ef jal ra,4000e9c8 rtems_filesystem_eval_path_continue(ctx); 400043cc: 00090513 mv a0,s2 ctx->path = name; 400043d0: 01792023 sw s7,0(s2) ctx->pathlen = namelen; 400043d4: 01392223 sw s3,4(s2) ctx->flags = eval_flags; 400043d8: 01492823 sw s4,16(s2) rtems_filesystem_eval_path_continue(ctx); 400043dc: c91ff0ef jal ra,4000406c } 400043e0: 02c12083 lw ra,44(sp) 400043e4: 02812403 lw s0,40(sp) 400043e8: 02412483 lw s1,36(sp) 400043ec: 01c12983 lw s3,28(sp) 400043f0: 01812a03 lw s4,24(sp) 400043f4: 01412a83 lw s5,20(sp) 400043f8: 01012b03 lw s6,16(sp) 400043fc: 00c12b83 lw s7,12(sp) 40004400: 00812c03 lw s8,8(sp) return &ctx->currentloc; 40004404: 01890513 addi a0,s2,24 } 40004408: 02012903 lw s2,32(sp) 4000440c: 03010113 addi sp,sp,48 40004410: 00008067 ret if (pathlen > 0) { 40004414: 00098863 beqz s3,40004424 <== NEVER TAKEN name = path + parentpathlen; 40004418: 00848bb3 add s7,s1,s0 namelen = pathlen - parentpathlen; 4000441c: 408989b3 sub s3,s3,s0 40004420: f79ff06f j 40004398 const char *name = NULL; 40004424: 00000b93 li s7,0 <== NOT EXECUTED 40004428: f71ff06f j 40004398 <== NOT EXECUTED if (pathlen > 0) { 4000442c: 00048b93 mv s7,s1 parentpath = "."; 40004430: 4001f4b7 lui s1,0x4001f parentpathlen = 1; 40004434: 00100413 li s0,1 parentpath = "."; 40004438: ab048493 addi s1,s1,-1360 # 4001eab0 4000443c: f5dff06f j 40004398 =============================================================================== 400036ec : find_arg fa = { .type = type, .mount_h = NULL }; if ( type != NULL ) { 400036ec: 0a050863 beqz a0,4000379c <== NEVER TAKEN { 400036f0: fe010113 addi sp,sp,-32 400036f4: 00812c23 sw s0,24(sp) while ( table_entry->type && !stop ) { 400036f8: 4001e437 lui s0,0x4001e { 400036fc: 00912a23 sw s1,20(sp) 40003700: 00050493 mv s1,a0 while ( table_entry->type && !stop ) { 40003704: 52442503 lw a0,1316(s0) # 4001e524 { 40003708: 00112e23 sw ra,28(sp) 4000370c: 01212823 sw s2,16(sp) 40003710: 52440413 addi s0,s0,1316 while ( table_entry->type && !stop ) { 40003714: 00050e63 beqz a0,40003730 <== NEVER TAKEN if ( strcmp( entry->type, fa->type ) != 0 ) { 40003718: 00048593 mv a1,s1 4000371c: 3cd110ef jal ra,400152e8 40003720: 06050063 beqz a0,40003780 while ( table_entry->type && !stop ) { 40003724: 00842503 lw a0,8(s0) ++table_entry; 40003728: 00840413 addi s0,s0,8 while ( table_entry->type && !stop ) { 4000372c: fe0516e3 bnez a0,40003718 return _Chain_Immutable_head( the_chain )->next; 40003730: 40020937 lui s2,0x40020 40003734: 74490913 addi s2,s2,1860 # 40020744 rtems_libio_lock(); 40003738: fe0ff0ef jal ra,40002f18 4000373c: 00092403 lw s0,0(s2) for ( 40003740: 00490913 addi s2,s2,4 40003744: 07240463 beq s0,s2,400037ac if ( strcmp( entry->type, fa->type ) != 0 ) { 40003748: 00842503 lw a0,8(s0) <== NOT EXECUTED 4000374c: 00048593 mv a1,s1 <== NOT EXECUTED 40003750: 399110ef jal ra,400152e8 <== NOT EXECUTED 40003754: 04051863 bnez a0,400037a4 <== NOT EXECUTED fa->mount_h = entry->mount_h; 40003758: 00c42503 lw a0,12(s0) <== NOT EXECUTED return &the_chain->Tail.Node; 4000375c: 00a12623 sw a0,12(sp) rtems_libio_unlock(); 40003760: fc4ff0ef jal ra,40002f24 rtems_filesystem_iterate( find_handler, &fa ); } return fa.mount_h; } 40003764: 01c12083 lw ra,28(sp) 40003768: 01812403 lw s0,24(sp) return fa.mount_h; 4000376c: 00c12503 lw a0,12(sp) } 40003770: 01412483 lw s1,20(sp) 40003774: 01012903 lw s2,16(sp) 40003778: 02010113 addi sp,sp,32 4000377c: 00008067 ret fa->mount_h = entry->mount_h; 40003780: 00442503 lw a0,4(s0) } 40003784: 01c12083 lw ra,28(sp) 40003788: 01812403 lw s0,24(sp) 4000378c: 01412483 lw s1,20(sp) 40003790: 01012903 lw s2,16(sp) 40003794: 02010113 addi sp,sp,32 40003798: 00008067 ret find_arg fa = { 4000379c: 00000513 li a0,0 <== NOT EXECUTED } 400037a0: 00008067 ret <== NOT EXECUTED return the_node->next; 400037a4: 00042403 lw s0,0(s0) <== NOT EXECUTED for ( 400037a8: fb2410e3 bne s0,s2,40003748 <== NOT EXECUTED find_arg fa = { 400037ac: 00000513 li a0,0 400037b0: fadff06f j 4000375c =============================================================================== 40004838 : __asm__ volatile ( 40004838: 300477f3 csrrci a5,mstatus,8 { rtems_filesystem_mt_entry_declare_lock_context(lock_context); rtems_filesystem_global_location_t *lhs_global_loc; rtems_filesystem_mt_entry_lock(lock_context); lhs_global_loc = *lhs_global_loc_ptr; 4000483c: 00052703 lw a4,0(a0) *lhs_global_loc_ptr = rhs_global_loc; 40004840: 00b52023 sw a1,0(a0) return mstatus & RISCV_MSTATUS_MIE; 40004844: 0087f793 andi a5,a5,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40004848: 3007a073 csrs mstatus,a5 __asm__ volatile ( 4000484c: 300477f3 csrrci a5,mstatus,8 return mstatus & RISCV_MSTATUS_MIE; 40004850: 0087f793 andi a5,a5,8 } else { rtems_interrupt_lock_context lock_context; rtems_interrupt_lock_acquire(&deferred_release_lock, &lock_context); if (global_loc->deferred_released_count == 0) { 40004854: 02072683 lw a3,32(a4) 40004858: 02069263 bnez a3,4000487c rtems_filesystem_global_location_t *head = 4000485c: 92018693 addi a3,gp,-1760 # 40020d60 40004860: 0006a603 lw a2,0(a3) deferred_released_global_locations; global_loc->deferred_released_count = 1; 40004864: 00100593 li a1,1 40004868: 02b72023 sw a1,32(a4) global_loc->deferred_released_next = head; 4000486c: 00c72e23 sw a2,28(a4) deferred_released_global_locations = global_loc; 40004870: 00e6a023 sw a4,0(a3) __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40004874: 3007a073 csrs mstatus,a5 } 40004878: 00008067 ret } else { ++global_loc->deferred_released_count; 4000487c: 00168693 addi a3,a3,1 40004880: 02d72023 sw a3,32(a4) 40004884: 3007a073 csrs mstatus,a5 } 40004888: 00008067 ret =============================================================================== 400049c8 : { 400049c8: ff010113 addi sp,sp,-16 400049cc: 00812423 sw s0,8(sp) if (deferred_released_global_locations != NULL) { 400049d0: 92018413 addi s0,gp,-1760 # 40020d60 400049d4: 00042783 lw a5,0(s0) { 400049d8: 00912223 sw s1,4(sp) 400049dc: 00112623 sw ra,12(sp) 400049e0: 00050493 mv s1,a0 if (deferred_released_global_locations != NULL) { 400049e4: 04078a63 beqz a5,40004a38 __asm__ volatile ( 400049e8: 300477f3 csrrci a5,mstatus,8 return mstatus & RISCV_MSTATUS_MIE; 400049ec: 0087f793 andi a5,a5,8 current = deferred_released_global_locations; 400049f0: 00042503 lw a0,0(s0) int count = 0; 400049f4: 00000593 li a1,0 if (current != NULL) { 400049f8: 00050c63 beqz a0,40004a10 deferred_released_global_locations = current->deferred_released_next; 400049fc: 01c52703 lw a4,28(a0) count = current->deferred_released_count; 40004a00: 02052583 lw a1,32(a0) current->deferred_released_next = NULL; 40004a04: 00052e23 sw zero,28(a0) deferred_released_global_locations = current->deferred_released_next; 40004a08: 00e42023 sw a4,0(s0) current->deferred_released_count = 0; 40004a0c: 02052023 sw zero,32(a0) __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40004a10: 3007a073 csrs mstatus,a5 if (current != NULL) { 40004a14: 02050263 beqz a0,40004a38 release_with_count(current, count); 40004a18: eedff0ef jal ra,40004904 __asm__ volatile ( 40004a1c: 300477f3 csrrci a5,mstatus,8 return mstatus & RISCV_MSTATUS_MIE; 40004a20: 0087f793 andi a5,a5,8 current = deferred_released_global_locations; 40004a24: 00042503 lw a0,0(s0) int count = 0; 40004a28: 00000593 li a1,0 if (current != NULL) { 40004a2c: fc0518e3 bnez a0,400049fc __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40004a30: 3007a073 csrs mstatus,a5 if (current != NULL) { 40004a34: fe0512e3 bnez a0,40004a18 __asm__ volatile ( 40004a38: 300477f3 csrrci a5,mstatus,8 return mstatus & RISCV_MSTATUS_MIE; 40004a3c: 0087f413 andi s0,a5,8 global_loc = *global_loc_ptr; 40004a40: 0004a503 lw a0,0(s1) if (global_loc == NULL || !global_loc->location.mt_entry->mounted) { 40004a44: 00050863 beqz a0,40004a54 40004a48: 01452783 lw a5,20(a0) 40004a4c: 0287c783 lbu a5,40(a5) 40004a50: 00079c63 bnez a5,40004a68 errno = ENXIO; 40004a54: 4750f0ef jal ra,400146c8 <__errno> 40004a58: 00600793 li a5,6 <== NOT EXECUTED 40004a5c: 00f52023 sw a5,0(a0) <== NOT EXECUTED global_loc = &rtems_filesystem_global_location_null; 40004a60: 40020537 lui a0,0x40020 <== NOT EXECUTED 40004a64: 75050513 addi a0,a0,1872 # 40020750 <== NOT EXECUTED ++global_loc->reference_count; 40004a68: 01852783 lw a5,24(a0) <== NOT EXECUTED 40004a6c: 00178793 addi a5,a5,1 40004a70: 00f52c23 sw a5,24(a0) __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40004a74: 30042073 csrs mstatus,s0 } 40004a78: 00c12083 lw ra,12(sp) 40004a7c: 00812403 lw s0,8(sp) 40004a80: 00412483 lw s1,4(sp) 40004a84: 01010113 addi sp,sp,16 40004a88: 00008067 ret =============================================================================== 40004a8c : if (!deferred) { 40004a8c: 04058263 beqz a1,40004ad0 <== NOT EXECUTED __asm__ volatile ( 40004a90: 30047773 csrrci a4,mstatus,8 <== NOT EXECUTED return mstatus & RISCV_MSTATUS_MIE; 40004a94: 00877713 andi a4,a4,8 <== NOT EXECUTED if (global_loc->deferred_released_count == 0) { 40004a98: 02052683 lw a3,32(a0) <== NOT EXECUTED 40004a9c: 00068a63 beqz a3,40004ab0 <== NOT EXECUTED ++global_loc->deferred_released_count; 40004aa0: 00168693 addi a3,a3,1 <== NOT EXECUTED 40004aa4: 02d52023 sw a3,32(a0) <== NOT EXECUTED __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40004aa8: 30072073 csrs mstatus,a4 <== NOT EXECUTED } 40004aac: 00008067 ret <== NOT EXECUTED rtems_filesystem_global_location_t *head = 40004ab0: 92018693 addi a3,gp,-1760 # 40020d60 <== NOT EXECUTED 40004ab4: 0006a603 lw a2,0(a3) <== NOT EXECUTED global_loc->deferred_released_count = 1; 40004ab8: 00100593 li a1,1 <== NOT EXECUTED 40004abc: 02b52023 sw a1,32(a0) <== NOT EXECUTED global_loc->deferred_released_next = head; 40004ac0: 00c52e23 sw a2,28(a0) <== NOT EXECUTED deferred_released_global_locations = global_loc; 40004ac4: 00a6a023 sw a0,0(a3) <== NOT EXECUTED 40004ac8: 30072073 csrs mstatus,a4 <== NOT EXECUTED } 40004acc: 00008067 ret <== NOT EXECUTED release_with_count(global_loc, 1); 40004ad0: 00100593 li a1,1 <== NOT EXECUTED 40004ad4: e31ff06f j 40004904 <== NOT EXECUTED =============================================================================== 40002820 : { int rv = 0; const rtems_filesystem_mount_configuration *root_config = &rtems_filesystem_root_configuration; rv = mount( 40002820: 4001e7b7 lui a5,0x4001e 40002824: 51078793 addi a5,a5,1296 # 4001e510 40002828: 0107a703 lw a4,16(a5) 4000282c: 00c7a683 lw a3,12(a5) 40002830: 0087a603 lw a2,8(a5) 40002834: 0047a583 lw a1,4(a5) 40002838: 0007a503 lw a0,0(a5) { 4000283c: ff010113 addi sp,sp,-16 40002840: 00112623 sw ra,12(sp) rv = mount( 40002844: 351000ef jal ra,40003394 root_config->target, root_config->filesystemtype, root_config->options, root_config->data ); if ( rv != 0 ) 40002848: 02051263 bnez a0,4000286c <== 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 ); 4000284c: 4001f537 lui a0,0x4001f 40002850: 1ed00593 li a1,493 40002854: 91450513 addi a0,a0,-1772 # 4001e914 40002858: 1a9000ef jal ra,40003200 if ( rv != 0 ) 4000285c: 00051e63 bnez a0,40002878 <== 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. */ } 40002860: 00c12083 lw ra,12(sp) 40002864: 01010113 addi sp,sp,16 40002868: 00008067 ret rtems_fatal_error_occurred( 0xABCD0002 ); 4000286c: abcd0537 lui a0,0xabcd0 <== NOT EXECUTED 40002870: 00250513 addi a0,a0,2 # abcd0002 <== NOT EXECUTED 40002874: 015040ef jal ra,40007088 <== NOT EXECUTED rtems_fatal_error_occurred( 0xABCD0003 ); 40002878: abcd0537 lui a0,0xabcd0 <== NOT EXECUTED 4000287c: 00350513 addi a0,a0,3 # abcd0003 <== NOT EXECUTED 40002880: 009040ef jal ra,40007088 <== NOT EXECUTED =============================================================================== 40004ad8 : __asm__ volatile ( 40004ad8: 30047773 csrrci a4,mstatus,8 return mstatus & RISCV_MSTATUS_MIE; 40004adc: 00877713 andi a4,a4,8 do_unmount = rtems_filesystem_is_ready_for_unmount(loc->mt_entry); 40004ae0: 01452783 lw a5,20(a0) next = the_node->next; 40004ae4: 00052603 lw a2,0(a0) previous = the_node->previous; 40004ae8: 00452683 lw a3,4(a0) 40004aec: 0287c583 lbu a1,40(a5) next->previous = previous; 40004af0: 00d62223 sw a3,4(a2) previous->next = next; 40004af4: 00c6a023 sw a2,0(a3) 40004af8: 00059863 bnez a1,40004b08 && rtems_chain_has_only_one_node( &mt_entry->location_chain ) 40004afc: 0147a603 lw a2,20(a5) 40004b00: 01c7a683 lw a3,28(a5) 40004b04: 00d60663 beq a2,a3,40004b10 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40004b08: 30072073 csrs mstatus,a4 } 40004b0c: 00008067 ret && mt_entry->mt_fs_root->reference_count == 1; 40004b10: 0247a603 lw a2,36(a5) 40004b14: 00100693 li a3,1 40004b18: 01862603 lw a2,24(a2) 40004b1c: fed616e3 bne a2,a3,40004b08 return &the_chain->Tail.Node; 40004b20: 01478693 addi a3,a5,20 <== NOT EXECUTED 40004b24: 01878613 addi a2,a5,24 <== NOT EXECUTED head->next = tail; 40004b28: 00c7aa23 sw a2,20(a5) <== NOT EXECUTED head->previous = NULL; 40004b2c: 0007ac23 sw zero,24(a5) <== NOT EXECUTED tail->previous = head; 40004b30: 00d7ae23 sw a3,28(a5) <== NOT EXECUTED 40004b34: 30072073 csrs mstatus,a4 <== NOT EXECUTED rtems_filesystem_do_unmount(loc->mt_entry); 40004b38: 01452503 lw a0,20(a0) <== NOT EXECUTED 40004b3c: d51ff06f j 4000488c <== NOT EXECUTED =============================================================================== 40004c00 : { 40004c00: fe010113 addi sp,sp,-32 40004c04: 00912a23 sw s1,20(sp) 40004c08: 00050493 mv s1,a0 rtems_filesystem_global_location_t *global_loc = malloc(sizeof(*global_loc)); 40004c0c: 02400513 li a0,36 { 40004c10: 00112e23 sw ra,28(sp) 40004c14: 00812c23 sw s0,24(sp) rtems_filesystem_global_location_t *global_loc = malloc(sizeof(*global_loc)); 40004c18: becfe0ef jal ra,40003004 if (global_loc != NULL) { 40004c1c: 08050063 beqz a0,40004c9c <== NEVER TAKEN dst->node_access = src->node_access; 40004c20: 0084a603 lw a2,8(s1) dst->node_access_2 = src->node_access_2; 40004c24: 00c4a683 lw a3,12(s1) dst->handlers = src->handlers; 40004c28: 0104a703 lw a4,16(s1) dst->mt_entry = src->mt_entry; 40004c2c: 0144a783 lw a5,20(s1) global_loc->reference_count = 1; 40004c30: 00100593 li a1,1 40004c34: 00050413 mv s0,a0 40004c38: 00b52c23 sw a1,24(a0) global_loc->deferred_released_next = NULL; 40004c3c: 00052e23 sw zero,28(a0) global_loc->deferred_released_count = 0; 40004c40: 02052023 sw zero,32(a0) dst->node_access = src->node_access; 40004c44: 00c52423 sw a2,8(a0) dst->node_access_2 = src->node_access_2; 40004c48: 00d52623 sw a3,12(a0) dst->handlers = src->handlers; 40004c4c: 00e52823 sw a4,16(a0) dst->mt_entry = src->mt_entry; 40004c50: 00f52a23 sw a5,20(a0) __asm__ volatile ( 40004c54: 300477f3 csrrci a5,mstatus,8 40004c58: 01452703 lw a4,20(a0) old_last = tail->previous; 40004c5c: 01c72683 lw a3,28(a4) return &the_chain->Tail.Node; 40004c60: 01870613 addi a2,a4,24 the_node->next = tail; 40004c64: 00c52023 sw a2,0(a0) tail->previous = the_node; 40004c68: 00a72e23 sw a0,28(a4) old_last->next = the_node; 40004c6c: 00a6a023 sw a0,0(a3) the_node->previous = old_last; 40004c70: 00d52223 sw a3,4(a0) return mstatus & RISCV_MSTATUS_MIE; 40004c74: 0087f793 andi a5,a5,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40004c78: 3007a073 csrs mstatus,a5 rtems_filesystem_location_remove_from_mt_entry(loc); 40004c7c: 00048513 mv a0,s1 40004c80: e59ff0ef jal ra,40004ad8 } 40004c84: 01c12083 lw ra,28(sp) 40004c88: 00040513 mv a0,s0 40004c8c: 01812403 lw s0,24(sp) 40004c90: 01412483 lw s1,20(sp) 40004c94: 02010113 addi sp,sp,32 40004c98: 00008067 ret rtems_filesystem_location_free(loc); 40004c9c: 00048513 mv a0,s1 <== NOT EXECUTED 40004ca0: 585090ef jal ra,4000ea24 <== NOT EXECUTED return rtems_filesystem_global_location_obtain( &global_loc ); 40004ca4: 00c10513 addi a0,sp,12 <== NOT EXECUTED rtems_filesystem_global_location_t *global_loc = NULL; 40004ca8: 00012623 sw zero,12(sp) <== NOT EXECUTED return rtems_filesystem_global_location_obtain( &global_loc ); 40004cac: d1dff0ef jal ra,400049c8 <== NOT EXECUTED 40004cb0: 00050413 mv s0,a0 <== NOT EXECUTED errno = ENOMEM; 40004cb4: 2150f0ef jal ra,400146c8 <__errno> <== NOT EXECUTED 40004cb8: 00c00793 li a5,12 <== NOT EXECUTED 40004cbc: 00f52023 sw a5,0(a0) <== NOT EXECUTED return global_loc; 40004cc0: fc5ff06f j 40004c84 <== NOT EXECUTED =============================================================================== 40003214 : const char *name, size_t namelen, mode_t mode, dev_t dev ) { 40003214: fe010113 addi sp,sp,-32 40003218: 00812c23 sw s0,24(sp) 4000321c: 00912a23 sw s1,20(sp) 40003220: 01212823 sw s2,16(sp) 40003224: 01312623 sw s3,12(sp) 40003228: 01412423 sw s4,8(sp) 4000322c: 01512223 sw s5,4(sp) 40003230: 00068493 mv s1,a3 40003234: 00078993 mv s3,a5 40003238: 00112e23 sw ra,28(sp) 4000323c: 00050413 mv s0,a0 40003240: 00058913 mv s2,a1 40003244: 00060a93 mv s5,a2 40003248: 00070a13 mv s4,a4 int rv = 0; mode &= ~rtems_filesystem_umask; 4000324c: 389010ef jal ra,40004dd4 40003250: 00852803 lw a6,8(a0) switch (mode & S_IFMT) { 40003254: 000047b7 lui a5,0x4 mode &= ~rtems_filesystem_umask; 40003258: fff84813 not a6,a6 4000325c: 009876b3 and a3,a6,s1 switch (mode & S_IFMT) { 40003260: 0000f837 lui a6,0xf 40003264: 0106f833 and a6,a3,a6 40003268: 06f80263 beq a6,a5,400032cc 4000326c: 0507f663 bgeu a5,a6,400032b8 40003270: ffffa7b7 lui a5,0xffffa 40003274: 00f80833 add a6,a6,a5 40003278: ffffd7b7 lui a5,0xffffd 4000327c: 00f87833 and a6,a6,a5 40003280: 04080663 beqz a6,400032cc <== ALWAYS TAKEN case S_IFDIR: case S_IFIFO: case S_IFREG: break; default: errno = EINVAL; 40003284: 444110ef jal ra,400146c8 <__errno> rv = (*ops->mknod_h)( parentloc, name, namelen, mode, dev ); } return rv; } 40003288: 01c12083 lw ra,28(sp) 4000328c: 01812403 lw s0,24(sp) errno = EINVAL; 40003290: 01600793 li a5,22 40003294: 00f52023 sw a5,0(a0) } 40003298: 01412483 lw s1,20(sp) 4000329c: 01012903 lw s2,16(sp) 400032a0: 00c12983 lw s3,12(sp) 400032a4: 00812a03 lw s4,8(sp) 400032a8: 00412a83 lw s5,4(sp) 400032ac: fff00513 li a0,-1 400032b0: 02010113 addi sp,sp,32 400032b4: 00008067 ret switch (mode & S_IFMT) { 400032b8: fffff8b7 lui a7,0xfffff 400032bc: 01180833 add a6,a6,a7 400032c0: fff88893 addi a7,a7,-1 # ffffefff 400032c4: 01187833 and a6,a6,a7 400032c8: fa081ee3 bnez a6,40003284 const rtems_filesystem_operations_table *ops = parentloc->mt_entry->ops; 400032cc: 01442603 lw a2,20(s0) rv = (*ops->mknod_h)( parentloc, name, namelen, mode, dev ); 400032d0: 00040513 mv a0,s0 } 400032d4: 01812403 lw s0,24(sp) rv = (*ops->mknod_h)( parentloc, name, namelen, mode, dev ); 400032d8: 00c62583 lw a1,12(a2) } 400032dc: 01c12083 lw ra,28(sp) 400032e0: 01412483 lw s1,20(sp) rv = (*ops->mknod_h)( parentloc, name, namelen, mode, dev ); 400032e4: 0145a803 lw a6,20(a1) 400032e8: 000a0713 mv a4,s4 400032ec: 00098793 mv a5,s3 } 400032f0: 00812a03 lw s4,8(sp) 400032f4: 00c12983 lw s3,12(sp) rv = (*ops->mknod_h)( parentloc, name, namelen, mode, dev ); 400032f8: 000a8613 mv a2,s5 400032fc: 00090593 mv a1,s2 } 40003300: 00412a83 lw s5,4(sp) 40003304: 01012903 lw s2,16(sp) 40003308: 02010113 addi sp,sp,32 rv = (*ops->mknod_h)( parentloc, name, namelen, mode, dev ); 4000330c: 00080067 jr a6 # f000 =============================================================================== 40000bfc : int rtems_filesystem_register( const char *type, rtems_filesystem_fsmount_me_t mount_h ) { 40000bfc: fe010113 addi sp,sp,-32 40000c00: 00812c23 sw s0,24(sp) 40000c04: 01212823 sw s2,16(sp) 40000c08: 01312623 sw s3,12(sp) 40000c0c: 00112e23 sw ra,28(sp) 40000c10: 00912a23 sw s1,20(sp) 40000c14: 01412423 sw s4,8(sp) 40000c18: 00050913 mv s2,a0 40000c1c: 00058993 mv s3,a1 rtems_chain_control *chain = &filesystem_chain; size_t type_size = strlen(type) + 1; 40000c20: 50c0d0ef jal ra,4000e12c 40000c24: 00050613 mv a2,a0 size_t fsn_size = sizeof( filesystem_node ) + type_size; filesystem_node *fsn = malloc( fsn_size ); 40000c28: 01150513 addi a0,a0,17 size_t type_size = strlen(type) + 1; 40000c2c: 00160413 addi s0,a2,1 filesystem_node *fsn = malloc( fsn_size ); 40000c30: 23c060ef jal ra,40006e6c char *type_storage = (char *) fsn + sizeof( *fsn ); if ( fsn == NULL ) 40000c34: 10050863 beqz a0,40000d44 rtems_set_errno_and_return_minus_one( ENOMEM ); memcpy(type_storage, type, type_size); 40000c38: 01050793 addi a5,a0,16 40000c3c: 00050493 mv s1,a0 40000c40: 00040613 mv a2,s0 40000c44: 00090593 mv a1,s2 40000c48: 00078513 mv a0,a5 40000c4c: 6190c0ef jal ra,4000da64 fsn->entry.type = type_storage; 40000c50: 00a4a423 sw a0,8(s1) fsn->entry.mount_h = mount_h; 40000c54: 0134a623 sw s3,12(s1) rtems_libio_lock(); 40000c58: 1fc060ef jal ra,40006e54 while ( table_entry->type && !stop ) { 40000c5c: 4000f437 lui s0,0x4000f 40000c60: c7042503 lw a0,-912(s0) # 4000ec70 40000c64: 02050063 beqz a0,40000c84 <== NEVER TAKEN 40000c68: c7040413 addi s0,s0,-912 if ( strcmp( entry->type, fa->type ) != 0 ) { 40000c6c: 00090593 mv a1,s2 40000c70: 1840d0ef jal ra,4000ddf4 40000c74: 08050863 beqz a0,40000d04 <== NEVER TAKEN while ( table_entry->type && !stop ) { 40000c78: 00842503 lw a0,8(s0) ++table_entry; 40000c7c: 00840413 addi s0,s0,8 while ( table_entry->type && !stop ) { 40000c80: fe0516e3 bnez a0,40000c6c <== NEVER TAKEN return _Chain_Immutable_head( the_chain )->next; 40000c84: 40010437 lui s0,0x40010 40000c88: 39440413 addi s0,s0,916 # 40010394 rtems_libio_lock(); 40000c8c: 1c8060ef jal ra,40006e54 40000c90: 00042a03 lw s4,0(s0) for ( 40000c94: 00440993 addi s3,s0,4 40000c98: 0b3a0263 beq s4,s3,40000d3c if ( strcmp( entry->type, fa->type ) != 0 ) { 40000c9c: 008a2503 lw a0,8(s4) 40000ca0: 00090593 mv a1,s2 40000ca4: 1500d0ef jal ra,4000ddf4 40000ca8: 06051263 bnez a0,40000d0c fa->mount_h = entry->mount_h; 40000cac: 00ca2403 lw s0,12(s4) rtems_libio_unlock(); 40000cb0: 1b0060ef jal ra,40006e60 if ( rtems_filesystem_get_mount_handler( type ) == NULL ) { 40000cb4: 06041463 bnez s0,40000d1c 40000cb8: 40010437 lui s0,0x40010 40000cbc: 400109b7 lui s3,0x40010 40000cc0: 39440413 addi s0,s0,916 # 40010394 40000cc4: 39898993 addi s3,s3,920 # 40010398 old_last = tail->previous; 40000cc8: 00842783 lw a5,8(s0) the_node->next = tail; 40000ccc: 0134a023 sw s3,0(s1) tail->previous = the_node; 40000cd0: 00942423 sw s1,8(s0) old_last->next = the_node; 40000cd4: 0097a023 sw s1,0(a5) the_node->previous = old_last; 40000cd8: 00f4a223 sw a5,4(s1) rtems_libio_unlock(); free( fsn ); rtems_set_errno_and_return_minus_one( EINVAL ); } rtems_libio_unlock(); 40000cdc: 184060ef jal ra,40006e60 return 0; 40000ce0: 00000513 li a0,0 } 40000ce4: 01c12083 lw ra,28(sp) 40000ce8: 01812403 lw s0,24(sp) 40000cec: 01412483 lw s1,20(sp) 40000cf0: 01012903 lw s2,16(sp) 40000cf4: 00c12983 lw s3,12(sp) 40000cf8: 00812a03 lw s4,8(sp) 40000cfc: 02010113 addi sp,sp,32 40000d00: 00008067 ret fa->mount_h = entry->mount_h; 40000d04: 00442403 lw s0,4(s0) <== NOT EXECUTED if ( !stop ) { 40000d08: fadff06f j 40000cb4 <== NOT EXECUTED return the_node->next; 40000d0c: 000a2a03 lw s4,0(s4) for ( 40000d10: f93a16e3 bne s4,s3,40000c9c find_arg fa = { 40000d14: 00000413 li s0,0 40000d18: f99ff06f j 40000cb0 rtems_libio_unlock(); 40000d1c: 144060ef jal ra,40006e60 free( fsn ); 40000d20: 00048513 mv a0,s1 40000d24: 74d050ef jal ra,40006c70 rtems_set_errno_and_return_minus_one( EINVAL ); 40000d28: 4110c0ef jal ra,4000d938 <__errno> 40000d2c: 01600793 li a5,22 40000d30: 00f52023 sw a5,0(a0) 40000d34: fff00513 li a0,-1 40000d38: fadff06f j 40000ce4 rtems_libio_unlock(); 40000d3c: 124060ef jal ra,40006e60 return fa.mount_h; 40000d40: f89ff06f j 40000cc8 rtems_set_errno_and_return_minus_one( ENOMEM ); 40000d44: 3f50c0ef jal ra,4000d938 <__errno> 40000d48: 00c00793 li a5,12 40000d4c: 00f52023 sw a5,0(a0) 40000d50: fff00513 li a0,-1 40000d54: f91ff06f j 40000ce4 =============================================================================== 40000900 : } int rtems_gxx_key_create (__gthread_key_t *key, void (*dtor) (void *)) { 40000900: ff010113 addi sp,sp,-16 40000904: 01212023 sw s2,0(sp) 40000908: 00050913 mv s2,a0 int eno; pthread_key_t *pkey; pkey = malloc( sizeof( *pkey ) ); 4000090c: 00400513 li a0,4 { 40000910: 00912223 sw s1,4(sp) 40000914: 00112623 sw ra,12(sp) 40000918: 00812423 sw s0,8(sp) 4000091c: 00058493 mv s1,a1 pkey = malloc( sizeof( *pkey ) ); 40000920: 2c0000ef jal ra,40000be0 *key = pkey; 40000924: 00a92023 sw a0,0(s2) if ( pkey == NULL ) 40000928: 04050e63 beqz a0,40000984 <== NEVER TAKEN printk( "gxx_wrappers: create key=%x, dtor=%x, pkey=%x\n", key, dtor, pkey ); #endif eno = pthread_key_create(pkey, dtor); 4000092c: 00048593 mv a1,s1 40000930: 00050413 mv s0,a0 40000934: 654030ef jal ra,40003f88 40000938: 00050493 mv s1,a0 if ( eno != 0 ) { 4000093c: 02051063 bnez a0,4000095c <== NEVER TAKEN free( pkey ); *key = NULL; } return eno; } 40000940: 00c12083 lw ra,12(sp) 40000944: 00812403 lw s0,8(sp) 40000948: 00012903 lw s2,0(sp) 4000094c: 00048513 mv a0,s1 40000950: 00412483 lw s1,4(sp) 40000954: 01010113 addi sp,sp,16 40000958: 00008067 ret free( pkey ); 4000095c: 00040513 mv a0,s0 <== NOT EXECUTED 40000960: 2ec090ef jal ra,40009c4c <== NOT EXECUTED } 40000964: 00c12083 lw ra,12(sp) <== NOT EXECUTED 40000968: 00812403 lw s0,8(sp) <== NOT EXECUTED *key = NULL; 4000096c: 00092023 sw zero,0(s2) <== NOT EXECUTED } 40000970: 00048513 mv a0,s1 <== NOT EXECUTED 40000974: 00012903 lw s2,0(sp) <== NOT EXECUTED 40000978: 00412483 lw s1,4(sp) <== NOT EXECUTED 4000097c: 01010113 addi sp,sp,16 <== NOT EXECUTED 40000980: 00008067 ret <== NOT EXECUTED return ENOMEM; 40000984: 00c00493 li s1,12 <== NOT EXECUTED 40000988: fb9ff06f j 40000940 <== NOT EXECUTED =============================================================================== 40000b28 : void rtems_gxx_recursive_mutex_init(__gthread_recursive_mutex_t *mutex) { 40000b28: 00050713 mv a4,a0 status = rtems_semaphore_create( 40000b2c: 47434537 lui a0,0x47434 { 40000b30: ff010113 addi sp,sp,-16 status = rtems_semaphore_create( 40000b34: 00000693 li a3,0 40000b38: 05400613 li a2,84 40000b3c: 00100593 li a1,1 40000b40: 33250513 addi a0,a0,818 # 47434332 { 40000b44: 00112623 sw ra,12(sp) status = rtems_semaphore_create( 40000b48: 041030ef jal ra,40004388 if ( status != RTEMS_SUCCESSFUL ) { 40000b4c: 00051863 bnez a0,40000b5c <== NEVER TAKEN rtems_gxx_mutex_init(mutex); } 40000b50: 00c12083 lw ra,12(sp) 40000b54: 01010113 addi sp,sp,16 40000b58: 00008067 ret _Internal_error( INTERNAL_ERROR_GXX_MUTEX_INIT_FAILED ); 40000b5c: 01600513 li a0,22 <== NOT EXECUTED 40000b60: 3f5040ef jal ra,40005754 <_Internal_error> <== NOT EXECUTED =============================================================================== 40003080 : 40003080: 9341a783 lw a5,-1740(gp) # 40020d74 <_System_state_Current> void *rtems_heap_allocate_aligned_with_boundary( size_t size, uintptr_t alignment, uintptr_t boundary ) { 40003084: fe010113 addi sp,sp,-32 40003088: 00912a23 sw s1,20(sp) 4000308c: 01212823 sw s2,16(sp) 40003090: 01312623 sw s3,12(sp) 40003094: 01412423 sw s4,8(sp) 40003098: 00112e23 sw ra,28(sp) 4000309c: 00812c23 sw s0,24(sp) if ( _System_state_Is_up( state ) ) { 400030a0: 00200713 li a4,2 Heap_Control *heap = RTEMS_Malloc_Heap; 400030a4: 91c1aa03 lw s4,-1764(gp) # 40020d5c { 400030a8: 00050913 mv s2,a0 400030ac: 00058493 mv s1,a1 400030b0: 00060993 mv s3,a2 if ( _System_state_Is_up( state ) ) { 400030b4: 06e78063 beq a5,a4,40003114 } else if ( _System_state_Is_before_multitasking( state ) ) { 400030b8: 00100713 li a4,1 400030bc: 06e78463 beq a5,a4,40003124 boundary ); _RTEMS_Unlock_allocator(); break; case MALLOC_SYSTEM_STATE_NO_PROTECTION: p = _Heap_Allocate_aligned_with_boundary( 400030c0: 00060693 mv a3,a2 400030c4: 00058613 mv a2,a1 400030c8: 00050593 mv a1,a0 400030cc: 000a0513 mv a0,s4 400030d0: 180040ef jal ra,40007250 <_Heap_Allocate_aligned_with_boundary> 400030d4: 00050413 mv s0,a0 * Do not attempt to allocate memory if not in correct system state. */ return NULL; } if ( p == NULL && alignment == 0 && boundary == 0 ) { 400030d8: 06040a63 beqz s0,4000314c } /* * If the user wants us to dirty the allocated memory, then do it. */ if ( p != NULL && rtems_malloc_dirty_helper != NULL ) 400030dc: 9181a783 lw a5,-1768(gp) # 40020d58 400030e0: 00078863 beqz a5,400030f0 <== NEVER TAKEN (*rtems_malloc_dirty_helper)( p, size ); 400030e4: 00090593 mv a1,s2 400030e8: 00040513 mv a0,s0 400030ec: 000780e7 jalr a5 return p; } 400030f0: 01c12083 lw ra,28(sp) <== NOT EXECUTED 400030f4: 00040513 mv a0,s0 <== NOT EXECUTED 400030f8: 01812403 lw s0,24(sp) <== NOT EXECUTED 400030fc: 01412483 lw s1,20(sp) 40003100: 01012903 lw s2,16(sp) 40003104: 00c12983 lw s3,12(sp) 40003108: 00812a03 lw s4,8(sp) 4000310c: 02010113 addi sp,sp,32 40003110: 00008067 ret 40003114: 400237b7 lui a5,0x40023 40003118: f8078793 addi a5,a5,-128 # 40022f80 <_Per_CPU_Information> 4000311c: 0307a783 lw a5,48(a5) if ( _Thread_Dispatch_is_enabled() ) { 40003120: 04079663 bnez a5,4000316c _RTEMS_Lock_allocator(); 40003124: 010040ef jal ra,40007134 <_RTEMS_Lock_allocator> _Malloc_Process_deferred_frees(); 40003128: a11ff0ef jal ra,40002b38 <_Malloc_Process_deferred_frees> p = _Heap_Allocate_aligned_with_boundary( 4000312c: 00098693 mv a3,s3 40003130: 00048613 mv a2,s1 40003134: 00090593 mv a1,s2 40003138: 000a0513 mv a0,s4 4000313c: 114040ef jal ra,40007250 <_Heap_Allocate_aligned_with_boundary> 40003140: 00050413 mv s0,a0 _RTEMS_Unlock_allocator(); 40003144: 7fd030ef jal ra,40007140 <_RTEMS_Unlock_allocator> if ( p == NULL && alignment == 0 && boundary == 0 ) { 40003148: f8041ae3 bnez s0,400030dc 4000314c: 0134e633 or a2,s1,s3 40003150: 00061e63 bnez a2,4000316c p = (*rtems_malloc_extend_handler)( heap, size ); 40003154: 8a41a783 lw a5,-1884(gp) # 40020ce4 40003158: 00090593 mv a1,s2 <== NOT EXECUTED 4000315c: 000a0513 mv a0,s4 <== NOT EXECUTED 40003160: 000780e7 jalr a5 <== NOT EXECUTED 40003164: 00050413 mv s0,a0 <== NOT EXECUTED if ( p != NULL && rtems_malloc_dirty_helper != NULL ) 40003168: f6051ae3 bnez a0,400030dc <== NOT EXECUTED return NULL; 4000316c: 00000413 li s0,0 <== NOT EXECUTED 40003170: f81ff06f j 400030f0 <== NOT EXECUTED =============================================================================== 40000fe8 : void *rtems_heap_extend_via_sbrk( Heap_Control *heap, size_t alloc_size ) { ptrdiff_t sbrk_amount = RTEMS_Malloc_Sbrk_amount; 40000fe8: 8ac1a783 lw a5,-1876(gp) # 40010934 ptrdiff_t sbrk_size = (ptrdiff_t) alloc_size; ptrdiff_t misaligned = sbrk_amount != 0 ? sbrk_size % sbrk_amount : 0; 40000fec: 00079663 bnez a5,40000ff8 } } } return return_this; } 40000ff0: 00000513 li a0,0 40000ff4: 00008067 ret ptrdiff_t misaligned = sbrk_amount != 0 ? sbrk_size % sbrk_amount : 0; 40000ff8: 02f5e733 rem a4,a1,a5 { 40000ffc: ff010113 addi sp,sp,-16 40001000: 00812423 sw s0,8(sp) 40001004: 00912223 sw s1,4(sp) 40001008: 01212023 sw s2,0(sp) 4000100c: 00112623 sw ra,12(sp) 40001010: 00050493 mv s1,a0 40001014: 00058413 mv s0,a1 ptrdiff_t sbrk_size = (ptrdiff_t) alloc_size; 40001018: 00058913 mv s2,a1 if ( misaligned != 0 ) { 4000101c: 00070663 beqz a4,40001028 sbrk_size += sbrk_amount - misaligned; 40001020: 40e78733 sub a4,a5,a4 40001024: 00e58933 add s2,a1,a4 if ( sbrk_size > 0 && sbrk_amount > 0 ) { 40001028: 05205e63 blez s2,40001084 <== NEVER TAKEN 4000102c: 04f05c63 blez a5,40001084 <== NEVER TAKEN void *area_begin = sbrk( sbrk_size ); 40001030: 00090513 mv a0,s2 40001034: c7cff0ef jal ra,400004b0 if ( area_begin != (void *) -1 ) { 40001038: fff00793 li a5,-1 void *area_begin = sbrk( sbrk_size ); 4000103c: 00050593 mv a1,a0 if ( area_begin != (void *) -1 ) { 40001040: 04f50263 beq a0,a5,40001084 bool ok = _Protected_heap_Extend( heap, area_begin, sbrk_size ); 40001044: 00090613 mv a2,s2 40001048: 00048513 mv a0,s1 4000104c: 0a8040ef jal ra,400050f4 <_Protected_heap_Extend> if ( ok ) { 40001050: 02050663 beqz a0,4000107c RTEMS_INLINE_ROUTINE void *_Protected_heap_Allocate( Heap_Control *heap, uintptr_t size ) { return _Protected_heap_Allocate_aligned_with_boundary( heap, size, 0, 0 ); 40001054: 00040593 mv a1,s0 } 40001058: 00812403 lw s0,8(sp) 4000105c: 00c12083 lw ra,12(sp) 40001060: 00012903 lw s2,0(sp) 40001064: 00048513 mv a0,s1 40001068: 00412483 lw s1,4(sp) 4000106c: 00000693 li a3,0 40001070: 00000613 li a2,0 40001074: 01010113 addi sp,sp,16 40001078: 0140406f j 4000508c <_Protected_heap_Allocate_aligned_with_boundary> sbrk( -sbrk_size ); 4000107c: 41200533 neg a0,s2 40001080: c30ff0ef jal ra,400004b0 } 40001084: 00c12083 lw ra,12(sp) 40001088: 00812403 lw s0,8(sp) 4000108c: 00412483 lw s1,4(sp) 40001090: 00012903 lw s2,0(sp) 40001094: 00000513 li a0,0 40001098: 01010113 addi sp,sp,16 4000109c: 00008067 ret =============================================================================== 40002df0 : return fcntl_flags; } rtems_libio_t *rtems_libio_allocate( void ) { 40002df0: ff010113 addi sp,sp,-16 40002df4: 00812423 sw s0,8(sp) 40002df8: 00112623 sw ra,12(sp) rtems_libio_t *iop; rtems_libio_lock(); 40002dfc: 11c000ef jal ra,40002f18 iop = rtems_libio_iop_free_head; 40002e00: 9141a403 lw s0,-1772(gp) # 40020d54 if ( iop != NULL ) { 40002e04: 00040863 beqz s0,40002e14 void *next; next = iop->data1; 40002e08: 02c42703 lw a4,44(s0) rtems_libio_iop_free_head = next; 40002e0c: 90e1aa23 sw a4,-1772(gp) # 40020d54 if ( next == NULL ) { 40002e10: 00070e63 beqz a4,40002e2c rtems_libio_iop_free_tail = &rtems_libio_iop_free_head; } } rtems_libio_unlock(); 40002e14: 110000ef jal ra,40002f24 return iop; } 40002e18: 00c12083 lw ra,12(sp) 40002e1c: 00040513 mv a0,s0 40002e20: 00812403 lw s0,8(sp) 40002e24: 01010113 addi sp,sp,16 40002e28: 00008067 ret rtems_libio_iop_free_tail = &rtems_libio_iop_free_head; 40002e2c: 91418793 addi a5,gp,-1772 # 40020d54 40002e30: 8ef1a423 sw a5,-1816(gp) # 40020d28 rtems_libio_unlock(); 40002e34: 0f0000ef jal ra,40002f24 } 40002e38: 00c12083 lw ra,12(sp) 40002e3c: 00040513 mv a0,s0 40002e40: 00812403 lw s0,8(sp) 40002e44: 01010113 addi sp,sp,16 40002e48: 00008067 ret =============================================================================== 40002e4c : void rtems_libio_free( rtems_libio_t *iop ) { 40002e4c: ff010113 addi sp,sp,-16 40002e50: 00812423 sw s0,8(sp) 40002e54: 00050413 mv s0,a0 size_t zero; rtems_filesystem_location_free( &iop->pathinfo ); 40002e58: 01050513 addi a0,a0,16 { 40002e5c: 00112623 sw ra,12(sp) rtems_filesystem_location_free( &iop->pathinfo ); 40002e60: 3c50b0ef jal ra,4000ea24 rtems_libio_lock(); 40002e64: 0b4000ef jal ra,40002f18 __asm__ volatile ( 40002e68: 300477f3 csrrci a5,mstatus,8 *obj = val & arg; 40002e6c: 00042703 lw a4,0(s0) 40002e70: fffff6b7 lui a3,0xfffff 40002e74: 00d77733 and a4,a4,a3 40002e78: 00e42023 sw a4,0(s0) return mstatus & RISCV_MSTATUS_MIE; 40002e7c: 0087f793 andi a5,a5,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40002e80: 3007a073 csrs mstatus,a5 * Clear everything except the reference count part. At this point in time * there may be still some holders of this file descriptor. */ rtems_libio_iop_flags_clear( iop, LIBIO_FLAGS_REFERENCE_INC - 1U ); zero = offsetof( rtems_libio_t, offset ); memset( (char *) iop + zero, 0, sizeof( *iop ) - zero ); 40002e84: 02800613 li a2,40 40002e88: 00840513 addi a0,s0,8 40002e8c: 00000593 li a1,0 40002e90: 6f1110ef jal ra,40014d80 /* * Append it to the free list. This increases the likelihood that a use * after close is detected. */ *rtems_libio_iop_free_tail = iop; 40002e94: 8e81a683 lw a3,-1816(gp) # 40020d28 rtems_libio_iop_free_tail = &iop->data1; 40002e98: 02c40713 addi a4,s0,44 rtems_libio_unlock(); } 40002e9c: 00c12083 lw ra,12(sp) *rtems_libio_iop_free_tail = iop; 40002ea0: 0086a023 sw s0,0(a3) # fffff000 } 40002ea4: 00812403 lw s0,8(sp) rtems_libio_iop_free_tail = &iop->data1; 40002ea8: 8ee1a423 sw a4,-1816(gp) # 40020d28 } 40002eac: 01010113 addi sp,sp,16 rtems_libio_unlock(); 40002eb0: 0740006f j 40002f24 =============================================================================== 40001ee0 : int rtems_libio_to_fcntl_flags( unsigned int flags ) { int fcntl_flags = 0; if ( (flags & LIBIO_FLAGS_READ_WRITE) == LIBIO_FLAGS_READ_WRITE ) { 40001ee0: 00657693 andi a3,a0,6 40001ee4: 00600713 li a4,6 { 40001ee8: 00050793 mv a5,a0 fcntl_flags |= O_RDWR; 40001eec: 00200513 li a0,2 if ( (flags & LIBIO_FLAGS_READ_WRITE) == LIBIO_FLAGS_READ_WRITE ) { 40001ef0: 00e68863 beq a3,a4,40001f00 } else if ( (flags & LIBIO_FLAGS_READ) == LIBIO_FLAGS_READ) { 40001ef4: 0027f713 andi a4,a5,2 fcntl_flags |= O_RDONLY; 40001ef8: 00000513 li a0,0 } else if ( (flags & LIBIO_FLAGS_READ) == LIBIO_FLAGS_READ) { 40001efc: 02070263 beqz a4,40001f20 <== NEVER TAKEN } else if ( (flags & LIBIO_FLAGS_WRITE) == LIBIO_FLAGS_WRITE) { fcntl_flags |= O_WRONLY; } if ( (flags & LIBIO_FLAGS_NO_DELAY) == LIBIO_FLAGS_NO_DELAY ) { 40001f00: 0017f713 andi a4,a5,1 40001f04: 00070663 beqz a4,40001f10 fcntl_flags |= O_NONBLOCK; 40001f08: 00004737 lui a4,0x4 40001f0c: 00e56533 or a0,a0,a4 } if ( (flags & LIBIO_FLAGS_APPEND) == LIBIO_FLAGS_APPEND ) { 40001f10: 2007f793 andi a5,a5,512 40001f14: 00078463 beqz a5,40001f1c fcntl_flags |= O_APPEND; 40001f18: 00856513 ori a0,a0,8 } return fcntl_flags; } 40001f1c: 00008067 ret } else if ( (flags & LIBIO_FLAGS_WRITE) == LIBIO_FLAGS_WRITE) { 40001f20: 0027d513 srli a0,a5,0x2 <== NOT EXECUTED 40001f24: 00157513 andi a0,a0,1 <== NOT EXECUTED 40001f28: fd9ff06f j 40001f00 <== NOT EXECUTED =============================================================================== 40003d04 : return (retval); } int rtems_mkdir(const char *path, mode_t mode) { 40003d04: f6010113 addi sp,sp,-160 40003d08: 09412423 sw s4,136(sp) 40003d0c: 08112e23 sw ra,156(sp) 40003d10: 08812c23 sw s0,152(sp) 40003d14: 08912a23 sw s1,148(sp) 40003d18: 09212823 sw s2,144(sp) 40003d1c: 09312623 sw s3,140(sp) 40003d20: 09512223 sw s5,132(sp) 40003d24: 09612023 sw s6,128(sp) 40003d28: 07712e23 sw s7,124(sp) 40003d2c: 07812c23 sw s8,120(sp) 40003d30: 07912a23 sw s9,116(sp) 40003d34: 00058a13 mv s4,a1 int success = 0; char *dup_path = strdup(path); 40003d38: 3cd1c0ef jal ra,40020904 if (dup_path != NULL) { 40003d3c: 16050e63 beqz a0,40003eb8 if (p[0] == '/') /* Skip leading '/'. */ 40003d40: 00054783 lbu a5,0(a0) 40003d44: 02f00713 li a4,47 40003d48: 00050913 mv s2,a0 40003d4c: 00050413 mv s0,a0 40003d50: 00e79663 bne a5,a4,40003d5c if (p[0] == '\0') 40003d54: 00154783 lbu a5,1(a0) ++p; 40003d58: 00150413 addi s0,a0,1 40003d5c: 00140413 addi s0,s0,1 *p = '/'; 40003d60: 00000493 li s1,0 40003d64: 00100713 li a4,1 40003d68: 02f00993 li s3,47 if (errno == EEXIST || errno == EISDIR) { 40003d6c: 01100a93 li s5,17 40003d70: 01500c13 li s8,21 } else if (!S_ISDIR(sb.st_mode)) { 40003d74: 0000fbb7 lui s7,0xf 40003d78: 00004b37 lui s6,0x4 if (p[0] == '\0') 40003d7c: 02078e63 beqz a5,40003db8 <== NEVER TAKEN else if (p[0] != '/') 40003d80: 03379663 bne a5,s3,40003dac *p = '\0'; 40003d84: fe040fa3 sb zero,-1(s0) if (!last && p[1] == '\0') 40003d88: 00044c83 lbu s9,0(s0) if (first) { 40003d8c: 12071a63 bnez a4,40003ec0 if (last) 40003d90: 040c8063 beqz s9,40003dd0 <== NEVER TAKEN if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) { 40003d94: 1ff00593 li a1,511 40003d98: 00090513 mv a0,s2 40003d9c: e49fe0ef jal ra,40002be4 40003da0: 0c054663 bltz a0,40003e6c *p = '/'; 40003da4: ff340fa3 sb s3,-1(s0) 40003da8: 00000713 li a4,0 if (p[0] == '\0') 40003dac: 00044783 lbu a5,0(s0) 40003db0: 00140413 addi s0,s0,1 40003db4: fc0796e3 bnez a5,40003d80 if (first) { 40003db8: 00070c63 beqz a4,40003dd0 oumask = umask(0); 40003dbc: 00000513 li a0,0 40003dc0: 751000ef jal ra,40004d10 40003dc4: 00050493 mv s1,a0 (void)umask(numask); 40003dc8: f3f57513 andi a0,a0,-193 40003dcc: 745000ef jal ra,40004d10 (void)umask(oumask); 40003dd0: 00048513 mv a0,s1 40003dd4: 73d000ef jal ra,40004d10 if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) { 40003dd8: 000a0593 mv a1,s4 40003ddc: 00090513 mv a0,s2 40003de0: e05fe0ef jal ra,40002be4 40003de4: 04054463 bltz a0,40003e2c 40003de8: 00000413 li s0,0 success = build(dup_path, mode); free(dup_path); 40003dec: 00090513 mv a0,s2 40003df0: 97dfe0ef jal ra,4000276c } return success != 0 ? 0 : -1; } 40003df4: 09c12083 lw ra,156(sp) 40003df8: 00040513 mv a0,s0 40003dfc: 09812403 lw s0,152(sp) 40003e00: 09412483 lw s1,148(sp) 40003e04: 09012903 lw s2,144(sp) 40003e08: 08c12983 lw s3,140(sp) 40003e0c: 08812a03 lw s4,136(sp) 40003e10: 08412a83 lw s5,132(sp) 40003e14: 08012b03 lw s6,128(sp) 40003e18: 07c12b83 lw s7,124(sp) 40003e1c: 07812c03 lw s8,120(sp) 40003e20: 07412c83 lw s9,116(sp) 40003e24: 0a010113 addi sp,sp,160 40003e28: 00008067 ret if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) { 40003e2c: 00100c93 li s9,1 if (errno == EEXIST || errno == EISDIR) { 40003e30: 20d190ef jal ra,4001d83c <__errno> 40003e34: 00052783 lw a5,0(a0) 40003e38: 01578863 beq a5,s5,40003e48 40003e3c: 201190ef jal ra,4001d83c <__errno> 40003e40: 00052783 lw a5,0(a0) 40003e44: 03879863 bne a5,s8,40003e74 if (stat(path, &sb) < 0) { 40003e48: 00810593 addi a1,sp,8 40003e4c: 00090513 mv a0,s2 40003e50: 0cc000ef jal ra,40003f1c 40003e54: 02054063 bltz a0,40003e74 <== NEVER TAKEN } else if (!S_ISDIR(sb.st_mode)) { 40003e58: 01812783 lw a5,24(sp) 40003e5c: 00fbf7b3 and a5,s7,a5 40003e60: 03679463 bne a5,s6,40003e88 if (last) 40003e64: f80c92e3 bnez s9,40003de8 40003e68: f3dff06f j 40003da4 if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) { 40003e6c: 00000c93 li s9,0 40003e70: fc1ff06f j 40003e30 if (!first && !last) 40003e74: 020c9e63 bnez s9,40003eb0 <== ALWAYS TAKEN (void)umask(oumask); 40003e78: 00048513 mv a0,s1 40003e7c: 695000ef jal ra,40004d10 40003e80: fff00413 li s0,-1 40003e84: f69ff06f j 40003dec if (last) 40003e88: 000c8c63 beqz s9,40003ea0 errno = EEXIST; 40003e8c: 1b1190ef jal ra,4001d83c <__errno> 40003e90: 01100793 li a5,17 40003e94: 00f52023 sw a5,0(a0) 40003e98: fff00413 li s0,-1 40003e9c: f51ff06f j 40003dec errno = ENOTDIR; 40003ea0: 19d190ef jal ra,4001d83c <__errno> 40003ea4: 01400793 li a5,20 40003ea8: 00f52023 sw a5,0(a0) if (!first && !last) 40003eac: fcdff06f j 40003e78 free(dup_path); 40003eb0: 00090513 mv a0,s2 40003eb4: 8b9fe0ef jal ra,4000276c return success != 0 ? 0 : -1; 40003eb8: fff00413 li s0,-1 40003ebc: f39ff06f j 40003df4 oumask = umask(0); 40003ec0: 00000513 li a0,0 40003ec4: 64d000ef jal ra,40004d10 40003ec8: 00050493 mv s1,a0 (void)umask(numask); 40003ecc: f3f57513 andi a0,a0,-193 40003ed0: 641000ef jal ra,40004d10 first = 0; 40003ed4: ebdff06f j 40003d90 =============================================================================== 40000f34 : } void rtems_print_printer_fprintf_putc(rtems_printer *printer) { 40000f34: ff010113 addi sp,sp,-16 40000f38: 00812423 sw s0,8(sp) pthread_once(&fprintf_putc_once, fprintf_putc_init); 40000f3c: 400015b7 lui a1,0x40001 { 40000f40: 00050413 mv s0,a0 pthread_once(&fprintf_putc_once, fprintf_putc_init); 40000f44: ea458593 addi a1,a1,-348 # 40000ea4 40000f48: 92818513 addi a0,gp,-1752 # 4001d300 { 40000f4c: 00112623 sw ra,12(sp) pthread_once(&fprintf_putc_once, fprintf_putc_init); 40000f50: 1d4050ef jal ra,40006124 printer->context = &fprintf_putc_file; 40000f54: 400207b7 lui a5,0x40020 40000f58: e3078793 addi a5,a5,-464 # 4001fe30 40000f5c: 00f42023 sw a5,0(s0) printer->printer = fprintf_putc_printer; 40000f60: 400017b7 lui a5,0x40001 40000f64: ee078793 addi a5,a5,-288 # 40000ee0 } 40000f68: 00c12083 lw ra,12(sp) printer->printer = fprintf_putc_printer; 40000f6c: 00f42223 sw a5,4(s0) } 40000f70: 00812403 lw s0,8(sp) 40000f74: 01010113 addi sp,sp,16 40000f78: 00008067 ret =============================================================================== 40003ba4 : int rtems_printf( const rtems_printer *printer, const char *format, ... ) { 40003ba4: fc010113 addi sp,sp,-64 40003ba8: 00112e23 sw ra,28(sp) 40003bac: 02c12423 sw a2,40(sp) 40003bb0: 02d12623 sw a3,44(sp) 40003bb4: 02e12823 sw a4,48(sp) 40003bb8: 02f12a23 sw a5,52(sp) 40003bbc: 03012c23 sw a6,56(sp) 40003bc0: 03112e23 sw a7,60(sp) 40003bc4: 02050463 beqz a0,40003bec 40003bc8: 00452783 lw a5,4(a0) 40003bcc: 02078063 beqz a5,40003bec <== NEVER TAKEN int len = 0; if ( rtems_print_printer_valid( printer ) ) { va_list ap; va_start( ap, format ); len = printer->printer( printer->context, format, ap ); 40003bd0: 00052503 lw a0,0(a0) va_start( ap, format ); 40003bd4: 02810613 addi a2,sp,40 40003bd8: 00c12623 sw a2,12(sp) len = printer->printer( printer->context, format, ap ); 40003bdc: 000780e7 jalr a5 va_end( ap ); } return len; } 40003be0: 01c12083 lw ra,28(sp) 40003be4: 04010113 addi sp,sp,64 40003be8: 00008067 ret 40003bec: 01c12083 lw ra,28(sp) int len = 0; 40003bf0: 00000513 li a0,0 } 40003bf4: 04010113 addi sp,sp,64 40003bf8: 00008067 ret =============================================================================== 40003efc : #endif #include void rtems_putc(char c) { 40003efc: ff010113 addi sp,sp,-16 40003f00: 00812423 sw s0,8(sp) 40003f04: 00912223 sw s1,4(sp) 40003f08: 00112623 sw ra,12(sp) if (c == '\n') { 40003f0c: 00a00713 li a4,10 (*BSP_output_char)('\r'); 40003f10: 9001a783 lw a5,-1792(gp) # 40020d40 { 40003f14: 00050413 mv s0,a0 if (c == '\n') { 40003f18: 00e51863 bne a0,a4,40003f28 (*BSP_output_char)('\r'); 40003f1c: 00d00513 li a0,13 40003f20: 000780e7 jalr a5 } (*BSP_output_char)(c); 40003f24: 9001a783 lw a5,-1792(gp) # 40020d40 40003f28: 00040513 mv a0,s0 } 40003f2c: 00812403 lw s0,8(sp) 40003f30: 00c12083 lw ra,12(sp) 40003f34: 00412483 lw s1,4(sp) 40003f38: 01010113 addi sp,sp,16 (*BSP_output_char)(c); 40003f3c: 00078067 jr a5 =============================================================================== 40001878 : bool rtems_resource_snapshot_equal( const rtems_resource_snapshot *a, const rtems_resource_snapshot *b ) { 40001878: ff010113 addi sp,sp,-16 <== NOT EXECUTED return memcmp(a, b, sizeof(*a)) == 0; 4000187c: 0f800613 li a2,248 <== NOT EXECUTED { 40001880: 00112623 sw ra,12(sp) <== NOT EXECUTED return memcmp(a, b, sizeof(*a)) == 0; 40001884: 43c100ef jal ra,40011cc0 <== NOT EXECUTED } 40001888: 00c12083 lw ra,12(sp) <== NOT EXECUTED 4000188c: 00153513 seqz a0,a0 <== NOT EXECUTED 40001890: 01010113 addi sp,sp,16 <== NOT EXECUTED 40001894: 00008067 ret <== NOT EXECUTED =============================================================================== 40003d7c : return count; } void rtems_resource_snapshot_take(rtems_resource_snapshot *snapshot) { 40003d7c: fd010113 addi sp,sp,-48 uint32_t *active; size_t i; memset(snapshot, 0, sizeof(*snapshot)); 40003d80: 0f800613 li a2,248 40003d84: 00000593 li a1,0 { 40003d88: 02112623 sw ra,44(sp) 40003d8c: 02812423 sw s0,40(sp) 40003d90: 02912223 sw s1,36(sp) 40003d94: 03212023 sw s2,32(sp) 40003d98: 01312e23 sw s3,28(sp) 40003d9c: 00050993 mv s3,a0 memset(snapshot, 0, sizeof(*snapshot)); 40003da0: 7e1100ef jal ra,40014d80 _RTEMS_Lock_allocator(); 40003da4: 390030ef jal ra,40007134 <_RTEMS_Lock_allocator> _Thread_Kill_zombies(); 40003da8: 5f5060ef jal ra,4000ab9c <_Thread_Kill_zombies> _Heap_Get_information(heap, info); 40003dac: 91c1a503 lw a0,-1764(gp) # 40020d5c 40003db0: 05898593 addi a1,s3,88 # 1058 <_ISR_Stack_size+0x58> 40003db4: 4001f937 lui s2,0x4001f 40003db8: 2b9030ef jal ra,40007870 <_Heap_Get_information> memset(&info->Stats, 0, sizeof(info->Stats)); 40003dbc: 04000613 li a2,64 40003dc0: 00000593 li a1,0 40003dc4: 07098513 addi a0,s3,112 40003dc8: 7b9100ef jal ra,40014d80 _Heap_Get_information(heap, info); 40003dcc: 40023537 lui a0,0x40023 40003dd0: 00098593 mv a1,s3 40003dd4: ff050513 addi a0,a0,-16 # 40022ff0 <_Workspace_Area> 40003dd8: 299030ef jal ra,40007870 <_Heap_Get_information> memset(&info->Stats, 0, sizeof(info->Stats)); 40003ddc: 00000593 li a1,0 40003de0: 04000613 li a2,64 40003de4: 01898513 addi a0,s3,24 40003de8: 799100ef jal ra,40014d80 get_heap_info(RTEMS_Malloc_Heap, &snapshot->heap_info); get_heap_info(&_Workspace_Area, &snapshot->workspace_info); active = &snapshot->active_posix_keys; for (i = 0; i < RTEMS_ARRAY_SIZE(objects_info_table); ++i) { 40003dec: a3890913 addi s2,s2,-1480 # 4001ea38 40003df0: 00890413 addi s0,s2,8 40003df4: 0b498493 addi s1,s3,180 40003df8: 07890913 addi s2,s2,120 memset(&info->Stats, 0, sizeof(info->Stats)); 40003dfc: 00200593 li a1,2 40003e00: 00300513 li a0,3 40003e04: 0100006f j 40003e14 const Objects_Information *information; information = _Objects_Get_information( 40003e08: 00042503 lw a0,0(s0) 40003e0c: 00445583 lhu a1,4(s0) 40003e10: 00840413 addi s0,s0,8 40003e14: 6b5040ef jal ra,40008cc8 <_Objects_Get_information> objects_info_table[i].api, objects_info_table[i].cls ); if (information != NULL) { 40003e18: 00050663 beqz a0,40003e24 active[i] = _Objects_Active_count(information); 40003e1c: 625040ef jal ra,40008c40 <_Objects_Active_count> 40003e20: 00a4a023 sw a0,0(s1) # 1000 <_ISR_Stack_size> for (i = 0; i < RTEMS_ARRAY_SIZE(objects_info_table); ++i) { 40003e24: 00448493 addi s1,s1,4 40003e28: ff2410e3 bne s0,s2,40003e08 } } _RTEMS_Unlock_allocator(); 40003e2c: 314030ef jal ra,40007140 <_RTEMS_Unlock_allocator> uint32_t count = 0; 40003e30: 00000413 li s0,0 Objects_Id id = OBJECTS_ID_INITIAL_INDEX; 40003e34: 00012623 sw zero,12(sp) while ((the_key = get_next_key(&id)) != NULL ) { 40003e38: 00000513 li a0,0 40003e3c: 400204b7 lui s1,0x40020 40003e40: 0140006f j 40003e54 count += _Chain_Node_count_unprotected(&the_key->Key_value_pairs); 40003e44: 3e8030ef jal ra,4000722c <_Chain_Node_count_unprotected> 40003e48: 00a40433 add s0,s0,a0 * previous thread life protection state and thus may not return if the * executing thread was restarted or deleted in the mean-time. */ RTEMS_INLINE_ROUTINE void _Objects_Allocator_unlock( void ) { _RTEMS_Unlock_allocator(); 40003e4c: 2f4030ef jal ra,40007140 <_RTEMS_Unlock_allocator> _Objects_Get_next(*id, &_POSIX_Keys_Information, id); 40003e50: 00c12503 lw a0,12(sp) 40003e54: 00c10613 addi a2,sp,12 40003e58: 7fc48593 addi a1,s1,2044 # 400207fc <_POSIX_Keys_Information> 40003e5c: 6f9040ef jal ra,40008d54 <_Objects_Get_next> 40003e60: 00050793 mv a5,a0 count += _Chain_Node_count_unprotected(&the_key->Key_value_pairs); 40003e64: 01450513 addi a0,a0,20 while ((the_key = get_next_key(&id)) != NULL ) { 40003e68: fc079ee3 bnez a5,40003e44 snapshot->active_posix_key_value_pairs = get_active_posix_key_value_pairs(); 40003e6c: 0a89a823 sw s0,176(s3) rtems_libio_lock(); 40003e70: 8a8ff0ef jal ra,40002f18 iop = rtems_libio_iop_free_head; 40003e74: 9141a783 lw a5,-1772(gp) # 40020d54 int free_count = 0; 40003e78: 00000413 li s0,0 while (iop != NULL) { 40003e7c: 00078863 beqz a5,40003e8c iop = iop->data1; 40003e80: 02c7a783 lw a5,44(a5) ++free_count; 40003e84: 00140413 addi s0,s0,1 while (iop != NULL) { 40003e88: fe079ce3 bnez a5,40003e80 <== NOT EXECUTED rtems_libio_unlock(); 40003e8c: 898ff0ef jal ra,40002f24 <== NOT EXECUTED return (int) rtems_libio_number_iops - free_count; 40003e90: 8901a783 lw a5,-1904(gp) # 40020cd0 <== NOT EXECUTED snapshot->open_files = open_files(); } 40003e94: 02c12083 lw ra,44(sp) 40003e98: 02412483 lw s1,36(sp) return (int) rtems_libio_number_iops - free_count; 40003e9c: 40878433 sub s0,a5,s0 snapshot->open_files = open_files(); 40003ea0: 0e89a823 sw s0,240(s3) } 40003ea4: 02812403 lw s0,40(sp) 40003ea8: 02012903 lw s2,32(sp) 40003eac: 01c12983 lw s3,28(sp) 40003eb0: 03010113 addi sp,sp,48 40003eb4: 00008067 ret =============================================================================== 40003ce0 : struct rtems_termios_tty *tty = args->iop->data1; 40003ce0: 00052783 lw a5,0(a0) { 40003ce4: ff010113 addi sp,sp,-16 40003ce8: 00912223 sw s1,4(sp) 40003cec: 01212023 sw s2,0(sp) struct rtems_termios_tty *tty = args->iop->data1; 40003cf0: 02c7a483 lw s1,44(a5) _Mutex_Acquire( mutex ); 40003cf4: 4001b937 lui s2,0x4001b { 40003cf8: 00812423 sw s0,8(sp) 40003cfc: 00050413 mv s0,a0 40003d00: 61c90513 addi a0,s2,1564 # 4001b61c 40003d04: 00112623 sw ra,12(sp) 40003d08: 26d040ef jal ra,40008774 <_Mutex_Acquire> if (tty->refcount == 1) { 40003d0c: 0084a783 lw a5,8(s1) 40003d10: 00100713 li a4,1 40003d14: 02e78a63 beq a5,a4,40003d48 if (--tty->refcount == 0) { 40003d18: fff78793 addi a5,a5,-1 <== NOT EXECUTED 40003d1c: 00f4a423 sw a5,8(s1) <== NOT EXECUTED 40003d20: 04078263 beqz a5,40003d64 <== NOT EXECUTED _Mutex_Release( mutex ); 40003d24: 61c90513 addi a0,s2,1564 40003d28: 2bd040ef jal ra,400087e4 <_Mutex_Release> } 40003d2c: 00c12083 lw ra,12(sp) 40003d30: 00812403 lw s0,8(sp) 40003d34: 00412483 lw s1,4(sp) 40003d38: 00012903 lw s2,0(sp) 40003d3c: 00000513 li a0,0 40003d40: 01010113 addi sp,sp,16 40003d44: 00008067 ret if (tty->forw == NULL) { 40003d48: 0004a703 lw a4,0(s1) rtems_termios_ttyTail = tty->back; 40003d4c: 0044a783 lw a5,4(s1) if (tty->forw == NULL) { 40003d50: 02070863 beqz a4,40003d80 <== ALWAYS TAKEN tty->forw->back = tty->back; 40003d54: 00f72223 sw a5,4(a4) <== NOT EXECUTED if (tty->back == NULL) { 40003d58: 02078063 beqz a5,40003d78 <== NOT EXECUTED tty->back->forw = tty->forw; 40003d5c: 00e7a023 sw a4,0(a5) <== NOT EXECUTED if (--tty->refcount == 0) { 40003d60: 0004a423 sw zero,8(s1) rtems_termios_destroy_tty (tty, arg, true); 40003d64: 00100613 li a2,1 40003d68: 00040593 mv a1,s0 40003d6c: 00048513 mv a0,s1 40003d70: d6cfe0ef jal ra,400022dc 40003d74: fb1ff06f j 40003d24 rtems_termios_ttyHead = tty->forw; 40003d78: 96e1ae23 sw a4,-1668(gp) # 4001bc54 <== NOT EXECUTED rtems_termios_ttyHead->back = NULL; 40003d7c: fe5ff06f j 40003d60 <== NOT EXECUTED rtems_termios_ttyTail = tty->back; 40003d80: 98f1a023 sw a5,-1664(gp) # 4001bc58 if ( rtems_termios_ttyTail != NULL ) { 40003d84: 00078a63 beqz a5,40003d98 <== ALWAYS TAKEN rtems_termios_ttyTail->forw = NULL; 40003d88: 0007a023 sw zero,0(a5) <== NOT EXECUTED tty->back->forw = tty->forw; 40003d8c: 0004a703 lw a4,0(s1) <== NOT EXECUTED 40003d90: 00e7a023 sw a4,0(a5) <== NOT EXECUTED 40003d94: fcdff06f j 40003d60 <== NOT EXECUTED rtems_termios_ttyHead = tty->forw; 40003d98: 9601ae23 sw zero,-1668(gp) # 4001bc54 if ( rtems_termios_ttyHead != NULL ) { 40003d9c: fc5ff06f j 40003d60 =============================================================================== 40004960 : tty->t_dqlen += len; 40004960: 0e052703 lw a4,224(a0) { 40004964: ff010113 addi sp,sp,-16 if (tty->handler.mode == TERMIOS_TASK_DRIVEN) { 40004968: 13c52683 lw a3,316(a0) tty->t_dqlen += len; 4000496c: 00b70733 add a4,a4,a1 { 40004970: 00112623 sw ra,12(sp) tty->t_dqlen += len; 40004974: 0ee52023 sw a4,224(a0) if (tty->handler.mode == TERMIOS_TASK_DRIVEN) { 40004978: 00200713 li a4,2 4000497c: 02e68e63 beq a3,a4,400049b8 if (tty->t_line == PPPDISC ) { 40004980: 15c52703 lw a4,348(a0) 40004984: 00500793 li a5,5 40004988: 00f70863 beq a4,a5,40004998 } 4000498c: 00c12083 lw ra,12(sp) 40004990: 01010113 addi sp,sp,16 return rtems_termios_refill_transmitter(tty); 40004994: f89fd06f j 4000291c if (rtems_termios_linesw[tty->t_line].l_start != NULL) { 40004998: 4001e7b7 lui a5,0x4001e 4000499c: 94c7a783 lw a5,-1716(a5) # 4001d94c 400049a0: 00078463 beqz a5,400049a8 <== NEVER TAKEN rtems_termios_linesw[tty->t_line].l_start(tty); 400049a4: 000780e7 jalr a5 } 400049a8: 00c12083 lw ra,12(sp) 400049ac: 00000513 li a0,0 400049b0: 01010113 addi sp,sp,16 400049b4: 00008067 ret sc = rtems_event_send(tty->txTaskId, TERMIOS_TX_START_EVENT); 400049b8: 15852503 lw a0,344(a0) 400049bc: 00200593 li a1,2 400049c0: 6e8020ef jal ra,400070a8 if (sc != RTEMS_SUCCESSFUL) 400049c4: fe0502e3 beqz a0,400049a8 <== ALWAYS TAKEN rtems_fatal_error_occurred (sc); 400049c8: 0c0030ef jal ra,40007a88 <== NOT EXECUTED =============================================================================== 40010cb8 : if (rtems_termios_linesw[tty->t_line].l_rint != NULL) { 40010cb8: 15c52783 lw a5,348(a0) { 40010cbc: fa010113 addi sp,sp,-96 40010cc0: 05212823 sw s2,80(sp) if (rtems_termios_linesw[tty->t_line].l_rint != NULL) { 40010cc4: 40019937 lui s2,0x40019 40010cc8: 6cc90913 addi s2,s2,1740 # 400196cc 40010ccc: 00579793 slli a5,a5,0x5 40010cd0: 00f907b3 add a5,s2,a5 40010cd4: 0107a783 lw a5,16(a5) { 40010cd8: 04812c23 sw s0,88(sp) 40010cdc: 04912a23 sw s1,84(sp) 40010ce0: 05312623 sw s3,76(sp) 40010ce4: 04112e23 sw ra,92(sp) 40010ce8: 05412423 sw s4,72(sp) 40010cec: 05512223 sw s5,68(sp) 40010cf0: 05612023 sw s6,64(sp) 40010cf4: 03712e23 sw s7,60(sp) 40010cf8: 03812c23 sw s8,56(sp) 40010cfc: 03912a23 sw s9,52(sp) 40010d00: 03a12823 sw s10,48(sp) 40010d04: 03b12623 sw s11,44(sp) 40010d08: 00050413 mv s0,a0 40010d0c: 00058493 mv s1,a1 40010d10: 00060993 mv s3,a2 if (rtems_termios_linesw[tty->t_line].l_rint != NULL) { 40010d14: 0a078063 beqz a5,40010db4 while (len--) { 40010d18: 02060a63 beqz a2,40010d4c <== NEVER TAKEN 40010d1c: fff60993 addi s3,a2,-1 40010d20: 013589b3 add s3,a1,s3 40010d24: 0180006f j 40010d3c rtems_termios_linesw[tty->t_line].l_rint(c,tty); 40010d28: 15c42783 lw a5,348(s0) 40010d2c: 00148493 addi s1,s1,1 40010d30: 00579793 slli a5,a5,0x5 40010d34: 00f907b3 add a5,s2,a5 40010d38: 0107a783 lw a5,16(a5) 40010d3c: 0004c503 lbu a0,0(s1) 40010d40: 00040593 mv a1,s0 40010d44: 000780e7 jalr a5 while (len--) { 40010d48: ff3490e3 bne s1,s3,40010d28 if (tty->tty_rcv.sw_pfn != NULL && !tty->tty_rcvwakeup) { 40010d4c: 16c42783 lw a5,364(s0) return 0; 40010d50: 00000a13 li s4,0 if (tty->tty_rcv.sw_pfn != NULL && !tty->tty_rcvwakeup) { 40010d54: 02078063 beqz a5,40010d74 40010d58: 17444703 lbu a4,372(s0) 40010d5c: 00071c63 bnez a4,40010d74 <== NEVER TAKEN (*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg); 40010d60: 17042583 lw a1,368(s0) tty->tty_rcvwakeup = true; 40010d64: 00100713 li a4,1 40010d68: 16e40a23 sb a4,372(s0) (*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg); 40010d6c: 05040513 addi a0,s0,80 40010d70: 000780e7 jalr a5 } 40010d74: 05c12083 lw ra,92(sp) 40010d78: 05812403 lw s0,88(sp) 40010d7c: 05412483 lw s1,84(sp) 40010d80: 05012903 lw s2,80(sp) 40010d84: 04c12983 lw s3,76(sp) 40010d88: 04412a83 lw s5,68(sp) 40010d8c: 04012b03 lw s6,64(sp) 40010d90: 03c12b83 lw s7,60(sp) 40010d94: 03812c03 lw s8,56(sp) 40010d98: 03412c83 lw s9,52(sp) 40010d9c: 03012d03 lw s10,48(sp) 40010da0: 02c12d83 lw s11,44(sp) 40010da4: 000a0513 mv a0,s4 40010da8: 04812a03 lw s4,72(sp) 40010dac: 06010113 addi sp,sp,96 40010db0: 00008067 ret int dropped = 0; 40010db4: 00000a13 li s4,0 while (len--) { 40010db8: 00000713 li a4,0 40010dbc: 14060063 beqz a2,40010efc <== NEVER TAKEN rtems_termios_device_context *ctx = tty->device_context; 40010dc0: 17c52d03 lw s10,380(a0) (void *)&(tty->termios.c_cc[VSTOP]), 1); 40010dc4: 06d50793 addi a5,a0,109 rtems_termios_device_context *ctx = tty->device_context; 40010dc8: 00058913 mv s2,a1 bool flow_rcv = false; /* true, if flow control char received */ 40010dcc: 00000c93 li s9,0 int dropped = 0; 40010dd0: 00000a13 li s4,0 if ((tty->flow_ctrl & (FL_ORCVXOF | FL_OSTOP)) == FL_OSTOP) { 40010dd4: 02000a93 li s5,32 40010dd8: 00100c13 li s8,1 if (c == '\r' && (tty->termios.c_iflag & IGNCR) != 0) { 40010ddc: 00d00b13 li s6,13 (*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg); 40010de0: 05050b93 addi s7,a0,80 (void *)&(tty->termios.c_cc[VSTOP]), 1); 40010de4: 00f12223 sw a5,4(sp) if (tty->flow_ctrl & FL_MDXON) { 40010de8: 14842783 lw a5,328(s0) c = *buf++; 40010dec: 00190913 addi s2,s2,1 40010df0: fff94503 lbu a0,-1(s2) if (tty->flow_ctrl & FL_MDXON) { 40010df4: 2007f793 andi a5,a5,512 40010df8: 00078a63 beqz a5,40010e0c if (c == tty->termios.c_cc[VSTOP]) { 40010dfc: 06d44783 lbu a5,109(s0) if (c == tty->termios.c_cc[VSTART]) { 40010e00: 06c44603 lbu a2,108(s0) if (c == tty->termios.c_cc[VSTOP]) { 40010e04: 18a78863 beq a5,a0,40010f94 else if (c == tty->termios.c_cc[VSTART]) { 40010e08: 10c50663 beq a0,a2,40010f14 if (flow_rcv) { 40010e0c: 100c9a63 bnez s9,40010f20 <== NEVER TAKEN if (c == '\r' && (tty->termios.c_iflag & IGNCR) != 0) { 40010e10: 19650c63 beq a0,s6,40010fa8 c = iprocEarly (c, tty); 40010e14: 00040593 mv a1,s0 40010e18: 9b5fd0ef jal ra,4000e7cc ( *context->lock_acquire )( context, lock_context ); 40010e1c: 014d2783 lw a5,20(s10) 40010e20: 01c10593 addi a1,sp,28 40010e24: 00050d93 mv s11,a0 40010e28: 000d0513 mv a0,s10 40010e2c: 000780e7 jalr a5 head = tty->rawInBuf.Head; 40010e30: 08442803 lw a6,132(s0) oldTail = tty->rawInBuf.Tail; 40010e34: 08842783 lw a5,136(s0) newTail = (oldTail + 1) % tty->rawInBuf.Size; 40010e38: 08c42583 lw a1,140(s0) if ((tty->flow_ctrl & FL_IREQXOF) != 0 && (((newTail - head) % 40010e3c: 14842603 lw a2,328(s0) newTail = (oldTail + 1) % tty->rawInBuf.Size; 40010e40: 00178793 addi a5,a5,1 40010e44: 02b7f7b3 remu a5,a5,a1 if ((tty->flow_ctrl & FL_IREQXOF) != 0 && (((newTail - head) % 40010e48: 00167613 andi a2,a2,1 40010e4c: 06060863 beqz a2,40010ebc <== ALWAYS TAKEN tty->rawInBuf.Size) > tty->highwater)) { 40010e50: 08c42503 lw a0,140(s0) <== NOT EXECUTED if ((tty->flow_ctrl & FL_IREQXOF) != 0 && (((newTail - head) % 40010e54: 41078633 sub a2,a5,a6 <== NOT EXECUTED 40010e58: 15042583 lw a1,336(s0) <== NOT EXECUTED 40010e5c: 02a67633 remu a2,a2,a0 <== NOT EXECUTED 40010e60: 04c5fe63 bgeu a1,a2,40010ebc <== NOT EXECUTED tty->flow_ctrl |= FL_IREQXOF; 40010e64: 14842603 lw a2,328(s0) <== NOT EXECUTED if ((tty->flow_ctrl & (FL_MDXOF | FL_ISNTXOF)) 40010e68: 40000593 li a1,1024 <== NOT EXECUTED tty->flow_ctrl |= FL_IREQXOF; 40010e6c: 00166613 ori a2,a2,1 <== NOT EXECUTED 40010e70: 14c42423 sw a2,328(s0) <== NOT EXECUTED if ((tty->flow_ctrl & (FL_MDXOF | FL_ISNTXOF)) 40010e74: 14842603 lw a2,328(s0) <== NOT EXECUTED 40010e78: 40267613 andi a2,a2,1026 <== NOT EXECUTED 40010e7c: 1ab60663 beq a2,a1,40011028 <== NOT EXECUTED } else if ((tty->flow_ctrl & (FL_MDRTS | FL_IRTSOFF)) == (FL_MDRTS) ) { 40010e80: 14842603 lw a2,328(s0) <== NOT EXECUTED 40010e84: 10000593 li a1,256 <== NOT EXECUTED 40010e88: 10467613 andi a2,a2,260 <== NOT EXECUTED 40010e8c: 02b61863 bne a2,a1,40010ebc <== NOT EXECUTED tty->flow_ctrl |= FL_IRTSOFF; 40010e90: 14842603 lw a2,328(s0) <== NOT EXECUTED if (tty->flow.stop_remote_tx != NULL) { 40010e94: 14042583 lw a1,320(s0) <== NOT EXECUTED tty->flow_ctrl |= FL_IRTSOFF; 40010e98: 00466613 ori a2,a2,4 <== NOT EXECUTED 40010e9c: 14c42423 sw a2,328(s0) <== NOT EXECUTED if (tty->flow.stop_remote_tx != NULL) { 40010ea0: 00058e63 beqz a1,40010ebc <== NOT EXECUTED tty->flow.stop_remote_tx(ctx); 40010ea4: 000d0513 mv a0,s10 <== NOT EXECUTED 40010ea8: 00f12623 sw a5,12(sp) <== NOT EXECUTED 40010eac: 01012423 sw a6,8(sp) <== NOT EXECUTED 40010eb0: 000580e7 jalr a1 <== NOT EXECUTED 40010eb4: 00c12783 lw a5,12(sp) <== NOT EXECUTED 40010eb8: 00812803 lw a6,8(sp) <== NOT EXECUTED if (newTail != head) { 40010ebc: 0ef80e63 beq a6,a5,40010fb8 tty->rawInBuf.theBuf[newTail] = c; 40010ec0: 08042603 lw a2,128(s0) 40010ec4: 00f60633 add a2,a2,a5 40010ec8: 01b60023 sb s11,0(a2) if (tty->tty_rcv.sw_pfn != NULL && !tty->tty_rcvwakeup) { 40010ecc: 16c42603 lw a2,364(s0) tty->rawInBuf.Tail = newTail; 40010ed0: 08f42423 sw a5,136(s0) if (tty->tty_rcv.sw_pfn != NULL && !tty->tty_rcvwakeup) { 40010ed4: 12060863 beqz a2,40011004 40010ed8: 17444583 lbu a1,372(s0) ( *context->lock_release )( context, lock_context ); 40010edc: 018d2603 lw a2,24(s10) 40010ee0: 18058463 beqz a1,40011068 40010ee4: 01c10593 addi a1,sp,28 40010ee8: 000d0513 mv a0,s10 40010eec: 000600e7 jalr a2 while (len--) { 40010ef0: 413907b3 sub a5,s2,s3 40010ef4: ee979ae3 bne a5,s1,40010de8 tty->rawInBufDropped += dropped; 40010ef8: 000a0713 mv a4,s4 40010efc: 0b442783 lw a5,180(s0) _Semaphore_Post_binary( &binary_semaphore->Semaphore ); 40010f00: 09040513 addi a0,s0,144 40010f04: 00e787b3 add a5,a5,a4 40010f08: 0af42a23 sw a5,180(s0) 40010f0c: 1a9000ef jal ra,400118b4 <_Semaphore_Post_binary> return dropped; 40010f10: e65ff06f j 40010d74 tty->flow_ctrl &= ~FL_ORCVXOF; 40010f14: 14842783 lw a5,328(s0) <== NOT EXECUTED 40010f18: fef7f793 andi a5,a5,-17 <== NOT EXECUTED 40010f1c: 14f42423 sw a5,328(s0) <== NOT EXECUTED if ((tty->flow_ctrl & (FL_ORCVXOF | FL_OSTOP)) == FL_OSTOP) { 40010f20: 14842783 lw a5,328(s0) 40010f24: 00100c93 li s9,1 40010f28: 0307f793 andi a5,a5,48 40010f2c: 01578863 beq a5,s5,40010f3c while (len--) { 40010f30: 413907b3 sub a5,s2,s3 40010f34: ea979ae3 bne a5,s1,40010de8 40010f38: fc1ff06f j 40010ef8 ( *context->lock_acquire )( context, lock_context ); 40010f3c: 014d2783 lw a5,20(s10) <== NOT EXECUTED 40010f40: 01c10593 addi a1,sp,28 <== NOT EXECUTED 40010f44: 000d0513 mv a0,s10 <== NOT EXECUTED 40010f48: 000780e7 jalr a5 <== NOT EXECUTED tty->flow_ctrl &= ~FL_OSTOP; 40010f4c: 14842783 lw a5,328(s0) <== NOT EXECUTED if (tty->rawOutBufState != rob_idle) { 40010f50: 0e442683 lw a3,228(s0) <== NOT EXECUTED tty->flow_ctrl &= ~FL_OSTOP; 40010f54: fdf7f793 andi a5,a5,-33 <== NOT EXECUTED 40010f58: 14f42423 sw a5,328(s0) <== NOT EXECUTED if (tty->rawOutBufState != rob_idle) { 40010f5c: 02068063 beqz a3,40010f7c <== NOT EXECUTED ctx, &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail], 1); 40010f60: 0c042683 lw a3,192(s0) <== NOT EXECUTED 40010f64: 0b842583 lw a1,184(s0) <== NOT EXECUTED (*tty->handler.write)( 40010f68: 13042783 lw a5,304(s0) <== NOT EXECUTED 40010f6c: 00100613 li a2,1 <== NOT EXECUTED 40010f70: 00d585b3 add a1,a1,a3 <== NOT EXECUTED 40010f74: 000d0513 mv a0,s10 <== NOT EXECUTED 40010f78: 000780e7 jalr a5 <== NOT EXECUTED ( *context->lock_release )( context, lock_context ); 40010f7c: 018d2783 lw a5,24(s10) <== NOT EXECUTED 40010f80: 01c10593 addi a1,sp,28 <== NOT EXECUTED 40010f84: 000d0513 mv a0,s10 <== NOT EXECUTED 40010f88: 000780e7 jalr a5 <== NOT EXECUTED } 40010f8c: 00100c93 li s9,1 <== NOT EXECUTED 40010f90: fa1ff06f j 40010f30 <== NOT EXECUTED if (c == tty->termios.c_cc[VSTART]) { 40010f94: 08c78263 beq a5,a2,40011018 tty->flow_ctrl |= FL_ORCVXOF; 40010f98: 14842783 lw a5,328(s0) 40010f9c: 0107e793 ori a5,a5,16 40010fa0: 14f42423 sw a5,328(s0) 40010fa4: f7dff06f j 40010f20 if (c == '\r' && (tty->termios.c_iflag & IGNCR) != 0) { 40010fa8: 05042783 lw a5,80(s0) 40010fac: 0807f793 andi a5,a5,128 40010fb0: e60782e3 beqz a5,40010e14 40010fb4: f7dff06f j 40010f30 if (tty->tty_rcv.sw_pfn != NULL && !tty->tty_rcvwakeup) { 40010fb8: 16c42603 lw a2,364(s0) ( *context->lock_release )( context, lock_context ); 40010fbc: 018d2783 lw a5,24(s10) ++dropped; 40010fc0: 001a0a13 addi s4,s4,1 if (tty->tty_rcv.sw_pfn != NULL && !tty->tty_rcvwakeup) { 40010fc4: 02060863 beqz a2,40010ff4 <== NEVER TAKEN 40010fc8: 17444603 lbu a2,372(s0) 40010fcc: 02061463 bnez a2,40010ff4 <== NEVER TAKEN tty->tty_rcvwakeup = true; 40010fd0: 17840a23 sb s8,372(s0) 40010fd4: 01c10593 addi a1,sp,28 40010fd8: 000d0513 mv a0,s10 40010fdc: 000780e7 jalr a5 (*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg); 40010fe0: 16c42783 lw a5,364(s0) 40010fe4: 17042583 lw a1,368(s0) 40010fe8: 000b8513 mv a0,s7 40010fec: 000780e7 jalr a5 40010ff0: f41ff06f j 40010f30 40010ff4: 01c10593 addi a1,sp,28 <== NOT EXECUTED 40010ff8: 000d0513 mv a0,s10 <== NOT EXECUTED 40010ffc: 000780e7 jalr a5 <== NOT EXECUTED if (callReciveCallback) { 40011000: f31ff06f j 40010f30 <== NOT EXECUTED 40011004: 018d2783 lw a5,24(s10) 40011008: 01c10593 addi a1,sp,28 4001100c: 000d0513 mv a0,s10 40011010: 000780e7 jalr a5 40011014: f1dff06f j 40010f30 tty->flow_ctrl = tty->flow_ctrl ^ FL_ORCVXOF; 40011018: 14842783 lw a5,328(s0) <== NOT EXECUTED 4001101c: 0107c793 xori a5,a5,16 <== NOT EXECUTED 40011020: 14f42423 sw a5,328(s0) <== NOT EXECUTED 40011024: efdff06f j 40010f20 <== NOT EXECUTED if ((tty->flow_ctrl & FL_OSTOP) || 40011028: 14842603 lw a2,328(s0) <== NOT EXECUTED 4001102c: 02067613 andi a2,a2,32 <== NOT EXECUTED 40011030: 0a060063 beqz a2,400110d0 <== NOT EXECUTED tty->flow_ctrl |= FL_ISNTXOF; 40011034: 14842583 lw a1,328(s0) <== NOT EXECUTED (*tty->handler.write)(ctx, 40011038: 13042883 lw a7,304(s0) <== NOT EXECUTED 4001103c: 00100613 li a2,1 <== NOT EXECUTED tty->flow_ctrl |= FL_ISNTXOF; 40011040: 0025e593 ori a1,a1,2 <== NOT EXECUTED 40011044: 14b42423 sw a1,328(s0) <== NOT EXECUTED (*tty->handler.write)(ctx, 40011048: 00412583 lw a1,4(sp) <== NOT EXECUTED 4001104c: 000d0513 mv a0,s10 <== NOT EXECUTED 40011050: 00f12623 sw a5,12(sp) <== NOT EXECUTED 40011054: 01012423 sw a6,8(sp) <== NOT EXECUTED 40011058: 000880e7 jalr a7 <== NOT EXECUTED 4001105c: 00812803 lw a6,8(sp) <== NOT EXECUTED 40011060: 00c12783 lw a5,12(sp) <== NOT EXECUTED 40011064: e59ff06f j 40010ebc <== NOT EXECUTED if ((tty->termios.c_lflag & ICANON) != 0) { 40011068: 05c42583 lw a1,92(s0) 4001106c: 1005f593 andi a1,a1,256 40011070: 02058c63 beqz a1,400110a8 c == tty->termios.c_cc[VEOL] || c == tty->termios.c_cc[VEOL2]; 40011074: 00a00793 li a5,10 40011078: 04fd8263 beq s11,a5,400110bc return c == '\n' || c == tty->termios.c_cc[VEOF] || 4001107c: 06044783 lbu a5,96(s0) 40011080: 03b78e63 beq a5,s11,400110bc 40011084: 06144783 lbu a5,97(s0) 40011088: 03b78a63 beq a5,s11,400110bc if (mustCallReceiveCallback (tty, c, newTail, head)) { 4001108c: 06244783 lbu a5,98(s0) 40011090: 03b78663 beq a5,s11,400110bc 40011094: 01c10593 addi a1,sp,28 40011098: 000d0513 mv a0,s10 4001109c: 000600e7 jalr a2 400110a0: 00000c93 li s9,0 400110a4: e8dff06f j 40010f30 unsigned int rawContentSize = (newTail - head) % tty->rawInBuf.Size; 400110a8: 08c42503 lw a0,140(s0) 400110ac: 410787b3 sub a5,a5,a6 return rawContentSize >= tty->termios.c_cc[VMIN]; 400110b0: 07044583 lbu a1,112(s0) unsigned int rawContentSize = (newTail - head) % tty->rawInBuf.Size; 400110b4: 02a7f7b3 remu a5,a5,a0 if (mustCallReceiveCallback (tty, c, newTail, head)) { 400110b8: fcb7eee3 bltu a5,a1,40011094 tty->tty_rcvwakeup = true; 400110bc: 17840a23 sb s8,372(s0) 400110c0: 01c10593 addi a1,sp,28 400110c4: 000d0513 mv a0,s10 400110c8: 000600e7 jalr a2 if (callReciveCallback) { 400110cc: f15ff06f j 40010fe0 if ((tty->flow_ctrl & FL_OSTOP) || 400110d0: 0e442603 lw a2,228(s0) <== NOT EXECUTED 400110d4: de0614e3 bnez a2,40010ebc <== NOT EXECUTED 400110d8: f5dff06f j 40011034 <== NOT EXECUTED =============================================================================== 400106c4 : struct rtems_termios_tty *tty = args->iop->data1; 400106c4: 00052783 lw a5,0(a0) { 400106c8: fd010113 addi sp,sp,-48 400106cc: 02812423 sw s0,40(sp) struct rtems_termios_tty *tty = args->iop->data1; 400106d0: 02c7a403 lw s0,44(a5) { 400106d4: 02912223 sw s1,36(sp) 400106d8: 03212023 sw s2,32(sp) 400106dc: 01412c23 sw s4,24(sp) 400106e0: 02112623 sw ra,44(sp) 400106e4: 01312e23 sw s3,28(sp) rtems_mutex_lock (&tty->osem); 400106e8: 02840913 addi s2,s0,40 struct ttywakeup *wakeup = (struct ttywakeup *)args->buffer; 400106ec: 00852a03 lw s4,8(a0) { 400106f0: 00050493 mv s1,a0 args->ioctl_return = 0; 400106f4: 00052623 sw zero,12(a0) _Mutex_Acquire( mutex ); 400106f8: 00090513 mv a0,s2 400106fc: 9b0f40ef jal ra,400048ac <_Mutex_Acquire> switch (args->command) { 40010700: 0044a583 lw a1,4(s1) 40010704: 80047737 lui a4,0x80047 40010708: 41070793 addi a5,a4,1040 # 80047410 4001070c: 34f58863 beq a1,a5,40010a5c 40010710: 1cb7f463 bgeu a5,a1,400108d8 40010714: 800877b7 lui a5,0x80087 40010718: 40c78693 addi a3,a5,1036 # 8008740c 4001071c: 3ad58c63 beq a1,a3,40010ad4 40010720: 2ab6f463 bgeu a3,a1,400109c8 40010724: 7fd39737 lui a4,0x7fd39 40010728: bec70793 addi a5,a4,-1044 # 7fd38bec 4001072c: 00f587b3 add a5,a1,a5 40010730: 00200693 li a3,2 40010734: 3af6ec63 bltu a3,a5,40010aec tty->termios = *(struct termios *)args->buffer; 40010738: 0084a783 lw a5,8(s1) if (args->command == TIOCSETAW || args->command == TIOCSETAF) { 4001073c: beb70713 addi a4,a4,-1045 40010740: 00e585b3 add a1,a1,a4 tty->termios = *(struct termios *)args->buffer; 40010744: 0007af83 lw t6,0(a5) 40010748: 0047af03 lw t5,4(a5) 4001074c: 0087ae83 lw t4,8(a5) 40010750: 00c7ae03 lw t3,12(a5) 40010754: 0107a303 lw t1,16(a5) 40010758: 0147a883 lw a7,20(a5) 4001075c: 0187a803 lw a6,24(a5) 40010760: 01c7a503 lw a0,28(a5) 40010764: 0207a603 lw a2,32(a5) 40010768: 0247a683 lw a3,36(a5) 4001076c: 0287a703 lw a4,40(a5) if (args->command == TIOCSETAW || args->command == TIOCSETAF) { 40010770: 00100793 li a5,1 tty->termios = *(struct termios *)args->buffer; 40010774: 05f42823 sw t6,80(s0) 40010778: 05e42a23 sw t5,84(s0) 4001077c: 05d42c23 sw t4,88(s0) 40010780: 05c42e23 sw t3,92(s0) 40010784: 06642023 sw t1,96(s0) 40010788: 07142223 sw a7,100(s0) 4001078c: 07042423 sw a6,104(s0) 40010790: 06a42623 sw a0,108(s0) 40010794: 06c42823 sw a2,112(s0) 40010798: 06d42a23 sw a3,116(s0) 4001079c: 06e42c23 sw a4,120(s0) if (args->command == TIOCSETAW || args->command == TIOCSETAF) { 400107a0: 42b7f463 bgeu a5,a1,40010bc8 if (( tty->flow_ctrl & FL_MDXON) && 400107a4: 14842783 lw a5,328(s0) rtems_termios_device_context *ctx = tty->device_context; 400107a8: 17c42983 lw s3,380(s0) if (( tty->flow_ctrl & FL_MDXON) && 400107ac: 2007f793 andi a5,a5,512 400107b0: 06078c63 beqz a5,40010828 !(tty->termios.c_iflag & IXON)) { 400107b4: 05042783 lw a5,80(s0) 400107b8: 2007f793 andi a5,a5,512 if (( tty->flow_ctrl & FL_MDXON) && 400107bc: 06079663 bnez a5,40010828 tty->flow_ctrl &= ~(FL_MDXON | FL_ORCVXOF); 400107c0: 14842783 lw a5,328(s0) 400107c4: def7f793 andi a5,a5,-529 400107c8: 14f42423 sw a5,328(s0) if (tty->flow_ctrl & FL_OSTOP) { 400107cc: 14842783 lw a5,328(s0) 400107d0: 0207f793 andi a5,a5,32 400107d4: 04078a63 beqz a5,40010828 <== ALWAYS TAKEN ( *context->lock_acquire )( context, lock_context ); 400107d8: 0149a783 lw a5,20(s3) <== NOT EXECUTED 400107dc: 00c10593 addi a1,sp,12 <== NOT EXECUTED 400107e0: 00098513 mv a0,s3 <== NOT EXECUTED 400107e4: 000780e7 jalr a5 <== NOT EXECUTED tty->flow_ctrl &= ~FL_OSTOP; 400107e8: 14842783 lw a5,328(s0) <== NOT EXECUTED if (tty->rawOutBufState != rob_idle) { 400107ec: 0e442703 lw a4,228(s0) <== NOT EXECUTED tty->flow_ctrl &= ~FL_OSTOP; 400107f0: fdf7f793 andi a5,a5,-33 <== NOT EXECUTED 400107f4: 14f42423 sw a5,328(s0) <== NOT EXECUTED if (tty->rawOutBufState != rob_idle) { 400107f8: 02070063 beqz a4,40010818 <== NOT EXECUTED ctx, &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail],1); 400107fc: 0c042703 lw a4,192(s0) <== NOT EXECUTED 40010800: 0b842583 lw a1,184(s0) <== NOT EXECUTED (*tty->handler.write)( 40010804: 13042783 lw a5,304(s0) <== NOT EXECUTED 40010808: 00100613 li a2,1 <== NOT EXECUTED 4001080c: 00e585b3 add a1,a1,a4 <== NOT EXECUTED 40010810: 00098513 mv a0,s3 <== NOT EXECUTED 40010814: 000780e7 jalr a5 <== NOT EXECUTED ( *context->lock_release )( context, lock_context ); 40010818: 0189a783 lw a5,24(s3) <== NOT EXECUTED 4001081c: 00c10593 addi a1,sp,12 <== NOT EXECUTED 40010820: 00098513 mv a0,s3 <== NOT EXECUTED 40010824: 000780e7 jalr a5 <== NOT EXECUTED if (( tty->flow_ctrl & FL_MDXOF) && !(tty->termios.c_iflag & IXOFF)) { 40010828: 14842783 lw a5,328(s0) 4001082c: 4007f793 andi a5,a5,1024 40010830: 00078863 beqz a5,40010840 40010834: 05042783 lw a5,80(s0) 40010838: 4007f793 andi a5,a5,1024 4001083c: 3e078063 beqz a5,40010c1c <== ALWAYS TAKEN if (( tty->flow_ctrl & FL_MDRTS) && !(tty->termios.c_cflag & CRTSCTS)) { 40010840: 14842703 lw a4,328(s0) 40010844: 05842783 lw a5,88(s0) 40010848: 000304b7 lui s1,0x30 4001084c: 10077713 andi a4,a4,256 40010850: 00f4f7b3 and a5,s1,a5 40010854: 36070063 beqz a4,40010bb4 <== ALWAYS TAKEN 40010858: 32078063 beqz a5,40010b78 <== NOT EXECUTED tty->flow_ctrl |= FL_MDRTS; 4001085c: 14842783 lw a5,328(s0) <== NOT EXECUTED 40010860: 1007e793 ori a5,a5,256 <== NOT EXECUTED 40010864: 14f42423 sw a5,328(s0) <== NOT EXECUTED if (tty->termios.c_iflag & IXOFF) { 40010868: 05042783 lw a5,80(s0) 4001086c: 4007f713 andi a4,a5,1024 40010870: 00070863 beqz a4,40010880 tty->flow_ctrl |= FL_MDXOF; 40010874: 14842703 lw a4,328(s0) 40010878: 40076713 ori a4,a4,1024 4001087c: 14e42423 sw a4,328(s0) if (tty->termios.c_iflag & IXON) { 40010880: 2007f793 andi a5,a5,512 40010884: 00078863 beqz a5,40010894 tty->flow_ctrl |= FL_MDXON; 40010888: 14842783 lw a5,328(s0) 4001088c: 2007e793 ori a5,a5,512 40010890: 14f42423 sw a5,328(s0) if (tty->termios.c_lflag & ICANON) { 40010894: 05c42783 lw a5,92(s0) 40010898: 1007f793 andi a5,a5,256 4001089c: 2a079463 bnez a5,40010b44 tty->vtimeTicks = tty->termios.c_cc[VTIME] * 400108a0: 07144703 lbu a4,113(s0) 400108a4: 8201a783 lw a5,-2016(gp) # 40014a30 <_Watchdog_Ticks_per_second> rtems_clock_get_ticks_per_second() / 10; 400108a8: 00a00613 li a2,10 if (tty->termios.c_cc[VMIN]) 400108ac: 07044683 lbu a3,112(s0) tty->vtimeTicks = tty->termios.c_cc[VTIME] * 400108b0: 02f707b3 mul a5,a4,a5 rtems_clock_get_ticks_per_second() / 10; 400108b4: 02c7d7b3 divu a5,a5,a2 tty->vtimeTicks = tty->termios.c_cc[VTIME] * 400108b8: 06f42e23 sw a5,124(s0) if (tty->termios.c_cc[VTIME]) { 400108bc: 34070a63 beqz a4,40010c10 tty->rawInBufSemaphoreWait = true; 400108c0: 00100713 li a4,1 400108c4: 0ae40423 sb a4,168(s0) tty->rawInBufSemaphoreTimeout = tty->vtimeTicks; 400108c8: 0af42623 sw a5,172(s0) if (tty->termios.c_cc[VMIN]) 400108cc: 28069263 bnez a3,40010b50 tty->rawInBufSemaphoreFirstTimeout = tty->vtimeTicks; 400108d0: 0af42823 sw a5,176(s0) 400108d4: 2800006f j 40010b54 switch (args->command) { 400108d8: 400477b7 lui a5,0x40047 400108dc: 41a78793 addi a5,a5,1050 # 4004741a 400108e0: 22f58e63 beq a1,a5,40010b1c 400108e4: 08b7fe63 bgeu a5,a1,40010980 400108e8: 402c77b7 lui a5,0x402c7 400108ec: 41378793 addi a5,a5,1043 # 402c7413 400108f0: 1ef59e63 bne a1,a5,40010aec *(struct termios *)args->buffer = tty->termios; 400108f4: 0084a783 lw a5,8(s1) # 30008 400108f8: 05042f03 lw t5,80(s0) 400108fc: 05442e83 lw t4,84(s0) 40010900: 05842e03 lw t3,88(s0) 40010904: 05c42303 lw t1,92(s0) 40010908: 06042883 lw a7,96(s0) 4001090c: 06442803 lw a6,100(s0) 40010910: 06842503 lw a0,104(s0) 40010914: 06c42583 lw a1,108(s0) 40010918: 07042603 lw a2,112(s0) 4001091c: 07442683 lw a3,116(s0) 40010920: 07842703 lw a4,120(s0) sc = RTEMS_SUCCESSFUL; 40010924: 00000993 li s3,0 *(struct termios *)args->buffer = tty->termios; 40010928: 01e7a023 sw t5,0(a5) 4001092c: 01d7a223 sw t4,4(a5) 40010930: 01c7a423 sw t3,8(a5) 40010934: 0067a623 sw t1,12(a5) 40010938: 0117a823 sw a7,16(a5) 4001093c: 0107aa23 sw a6,20(a5) 40010940: 00a7ac23 sw a0,24(a5) 40010944: 00b7ae23 sw a1,28(a5) 40010948: 02c7a023 sw a2,32(a5) 4001094c: 02d7a223 sw a3,36(a5) 40010950: 02e7a423 sw a4,40(a5) _Mutex_Release( mutex ); 40010954: 00090513 mv a0,s2 40010958: fc5f30ef jal ra,4000491c <_Mutex_Release> } 4001095c: 02c12083 lw ra,44(sp) 40010960: 02812403 lw s0,40(sp) 40010964: 02412483 lw s1,36(sp) 40010968: 02012903 lw s2,32(sp) 4001096c: 01812a03 lw s4,24(sp) 40010970: 00098513 mv a0,s3 40010974: 01c12983 lw s3,28(sp) 40010978: 03010113 addi sp,sp,48 4001097c: 00008067 ret switch (args->command) { 40010980: 200077b7 lui a5,0x20007 40010984: 45e78793 addi a5,a5,1118 # 2000745e 40010988: 0cf58263 beq a1,a5,40010a4c 4001098c: 400467b7 lui a5,0x40046 40010990: 67f78793 addi a5,a5,1663 # 4004667f 40010994: 14f59c63 bne a1,a5,40010aec int rawnc = tty->rawInBuf.Tail - tty->rawInBuf.Head; 40010998: 08842783 lw a5,136(s0) <== NOT EXECUTED 4001099c: 08442703 lw a4,132(s0) <== NOT EXECUTED 400109a0: 40e78733 sub a4,a5,a4 <== NOT EXECUTED if ( rawnc < 0 ) 400109a4: 20074c63 bltz a4,40010bbc <== NOT EXECUTED *(int *)args->buffer = tty->ccount - tty->cindex + rawnc; 400109a8: 04042783 lw a5,64(s0) <== NOT EXECUTED 400109ac: 04442603 lw a2,68(s0) <== NOT EXECUTED 400109b0: 0084a683 lw a3,8(s1) <== NOT EXECUTED sc = RTEMS_SUCCESSFUL; 400109b4: 00000993 li s3,0 <== NOT EXECUTED *(int *)args->buffer = tty->ccount - tty->cindex + rawnc; 400109b8: 40c787b3 sub a5,a5,a2 <== NOT EXECUTED 400109bc: 00e787b3 add a5,a5,a4 <== NOT EXECUTED 400109c0: 00f6a023 sw a5,0(a3) <== NOT EXECUTED break; 400109c4: f91ff06f j 40010954 <== NOT EXECUTED switch (args->command) { 400109c8: 41b70713 addi a4,a4,1051 400109cc: 02e58263 beq a1,a4,400109f0 400109d0: 40b78793 addi a5,a5,1035 400109d4: 10f59c63 bne a1,a5,40010aec tty->tty_snd = *wakeup; 400109d8: 000a2783 lw a5,0(s4) sc = RTEMS_SUCCESSFUL; 400109dc: 00000993 li s3,0 tty->tty_snd = *wakeup; 400109e0: 16f42223 sw a5,356(s0) 400109e4: 004a2783 lw a5,4(s4) 400109e8: 16f42423 sw a5,360(s0) break; 400109ec: f69ff06f j 40010954 if (rtems_termios_linesw[tty->t_line].l_close != NULL) { 400109f0: 15c42783 lw a5,348(s0) 400109f4: 40019a37 lui s4,0x40019 400109f8: 6cca0a13 addi s4,s4,1740 # 400196cc 400109fc: 00579793 slli a5,a5,0x5 40010a00: 00fa07b3 add a5,s4,a5 40010a04: 0047a783 lw a5,4(a5) sc = RTEMS_SUCCESSFUL; 40010a08: 00000993 li s3,0 if (rtems_termios_linesw[tty->t_line].l_close != NULL) { 40010a0c: 00078863 beqz a5,40010a1c sc = rtems_termios_linesw[tty->t_line].l_close(tty); 40010a10: 00040513 mv a0,s0 40010a14: 000780e7 jalr a5 40010a18: 00050993 mv s3,a0 tty->t_line=*(int*)(args->buffer); 40010a1c: 0084a783 lw a5,8(s1) 40010a20: 0007a783 lw a5,0(a5) tty->t_sc = NULL; /* ensure that no more valid data */ 40010a24: 16042023 sw zero,352(s0) if (rtems_termios_linesw[tty->t_line].l_open != NULL) { 40010a28: 00579713 slli a4,a5,0x5 40010a2c: 00ea0a33 add s4,s4,a4 40010a30: 000a2703 lw a4,0(s4) tty->t_line=*(int*)(args->buffer); 40010a34: 14f42e23 sw a5,348(s0) if (rtems_termios_linesw[tty->t_line].l_open != NULL) { 40010a38: f0070ee3 beqz a4,40010954 sc = rtems_termios_linesw[tty->t_line].l_open(tty); 40010a3c: 00040513 mv a0,s0 40010a40: 000700e7 jalr a4 40010a44: 00050993 mv s3,a0 40010a48: f0dff06f j 40010954 drainOutput (tty); 40010a4c: 00040513 mv a0,s0 40010a50: e59fd0ef jal ra,4000e8a8 sc = RTEMS_SUCCESSFUL; 40010a54: 00000993 li s3,0 break; 40010a58: efdff06f j 40010954 flags = *((int *)args->buffer); 40010a5c: 0084a783 lw a5,8(s1) 40010a60: 0007a783 lw a5,0(a5) if (flags == 0) { 40010a64: 0c079663 bnez a5,40010b30 <== ALWAYS TAKEN 40010a68: 00100493 li s1,1 <== NOT EXECUTED rtems_termios_device_context *ctx = tty->device_context; 40010a6c: 17c42983 lw s3,380(s0) ( *context->lock_acquire )( context, lock_context ); 40010a70: 00c10593 addi a1,sp,12 40010a74: 0149a783 lw a5,20(s3) 40010a78: 00098513 mv a0,s3 40010a7c: 000780e7 jalr a5 ( *context->lock_release )( context, lock_context ); 40010a80: 0189a783 lw a5,24(s3) tty->rawOutBuf.Tail = 0; 40010a84: 0c042023 sw zero,192(s0) tty->rawOutBuf.Head = 0; 40010a88: 0a042e23 sw zero,188(s0) tty->rawOutBufState = rob_idle; 40010a8c: 0e042223 sw zero,228(s0) 40010a90: 00c10593 addi a1,sp,12 40010a94: 00098513 mv a0,s3 40010a98: 000780e7 jalr a5 if (flags & FREAD) { 40010a9c: fa048ce3 beqz s1,40010a54 rtems_termios_device_context *ctx = tty->device_context; 40010aa0: 17c42483 lw s1,380(s0) ( *context->lock_acquire )( context, lock_context ); 40010aa4: 00c10593 addi a1,sp,12 sc = RTEMS_SUCCESSFUL; 40010aa8: 00000993 li s3,0 40010aac: 0144a783 lw a5,20(s1) 40010ab0: 00048513 mv a0,s1 40010ab4: 000780e7 jalr a5 ( *context->lock_release )( context, lock_context ); 40010ab8: 0184a783 lw a5,24(s1) tty->rawInBuf.Tail = 0; 40010abc: 08042423 sw zero,136(s0) tty->rawInBuf.Head = 0; 40010ac0: 08042223 sw zero,132(s0) 40010ac4: 00c10593 addi a1,sp,12 40010ac8: 00048513 mv a0,s1 40010acc: 000780e7 jalr a5 } 40010ad0: e85ff06f j 40010954 tty->tty_rcv = *wakeup; 40010ad4: 000a2783 lw a5,0(s4) sc = RTEMS_SUCCESSFUL; 40010ad8: 00000993 li s3,0 tty->tty_rcv = *wakeup; 40010adc: 16f42623 sw a5,364(s0) 40010ae0: 004a2783 lw a5,4(s4) 40010ae4: 16f42823 sw a5,368(s0) break; 40010ae8: e6dff06f j 40010954 if (rtems_termios_linesw[tty->t_line].l_ioctl != NULL) { 40010aec: 15c42783 lw a5,348(s0) 40010af0: 00579713 slli a4,a5,0x5 40010af4: 400197b7 lui a5,0x40019 40010af8: 6cc78793 addi a5,a5,1740 # 400196cc 40010afc: 00e787b3 add a5,a5,a4 40010b00: 0187a783 lw a5,24(a5) 40010b04: 12078a63 beqz a5,40010c38 sc = rtems_termios_linesw[tty->t_line].l_ioctl(tty,args); 40010b08: 00048593 mv a1,s1 40010b0c: 00040513 mv a0,s0 40010b10: 000780e7 jalr a5 40010b14: 00050993 mv s3,a0 40010b18: e3dff06f j 40010954 *(int*)(args->buffer)=tty->t_line; 40010b1c: 15c42703 lw a4,348(s0) 40010b20: 0084a783 lw a5,8(s1) sc = RTEMS_SUCCESSFUL; 40010b24: 00000993 li s3,0 *(int*)(args->buffer)=tty->t_line; 40010b28: 00e7a023 sw a4,0(a5) break; 40010b2c: e29ff06f j 40010954 if (flags & FWRITE) { 40010b30: 0027f713 andi a4,a5,2 if (flags & FREAD) { 40010b34: 0017f493 andi s1,a5,1 if (flags & FWRITE) { 40010b38: f2071ae3 bnez a4,40010a6c if (flags & FREAD) { 40010b3c: f0048ce3 beqz s1,40010a54 <== NEVER TAKEN 40010b40: f61ff06f j 40010aa0 tty->rawInBufSemaphoreWait = true; 40010b44: 00100793 li a5,1 40010b48: 0af40423 sb a5,168(s0) tty->rawInBufSemaphoreTimeout = 0; 40010b4c: 0a042623 sw zero,172(s0) tty->rawInBufSemaphoreFirstTimeout = 0; 40010b50: 0a042823 sw zero,176(s0) if (tty->handler.set_attributes) { 40010b54: 13442783 lw a5,308(s0) 40010b58: ee078ee3 beqz a5,40010a54 sc = (*tty->handler.set_attributes)(tty->device_context, &tty->termios) ? 40010b5c: 17c42503 lw a0,380(s0) 40010b60: 05040593 addi a1,s0,80 RTEMS_SUCCESSFUL : RTEMS_IO_ERROR; 40010b64: 01b00993 li s3,27 sc = (*tty->handler.set_attributes)(tty->device_context, &tty->termios) ? 40010b68: 000780e7 jalr a5 RTEMS_SUCCESSFUL : RTEMS_IO_ERROR; 40010b6c: de0504e3 beqz a0,40010954 sc = RTEMS_SUCCESSFUL; 40010b70: 00000993 li s3,0 40010b74: de1ff06f j 40010954 tty->flow_ctrl &= ~(FL_MDRTS); 40010b78: 14842783 lw a5,328(s0) <== NOT EXECUTED 40010b7c: eff7f793 andi a5,a5,-257 <== NOT EXECUTED 40010b80: 14f42423 sw a5,328(s0) <== NOT EXECUTED if ((tty->flow_ctrl & FL_IRTSOFF) && 40010b84: 14842783 lw a5,328(s0) <== NOT EXECUTED 40010b88: 0047f793 andi a5,a5,4 <== NOT EXECUTED 40010b8c: 0c078663 beqz a5,40010c58 <== NOT EXECUTED (tty->flow.start_remote_tx != NULL)) { 40010b90: 14442783 lw a5,324(s0) <== NOT EXECUTED if ((tty->flow_ctrl & FL_IRTSOFF) && 40010b94: 0c078263 beqz a5,40010c58 <== NOT EXECUTED tty->flow.start_remote_tx(ctx); 40010b98: 00098513 mv a0,s3 <== NOT EXECUTED 40010b9c: 000780e7 jalr a5 <== NOT EXECUTED tty->flow_ctrl &= ~(FL_IRTSOFF); 40010ba0: 14842703 lw a4,328(s0) <== NOT EXECUTED if (tty->termios.c_cflag & CRTSCTS) { 40010ba4: 05842783 lw a5,88(s0) <== NOT EXECUTED tty->flow_ctrl &= ~(FL_IRTSOFF); 40010ba8: ffb77713 andi a4,a4,-5 <== NOT EXECUTED if (tty->termios.c_cflag & CRTSCTS) { 40010bac: 00f4f7b3 and a5,s1,a5 <== NOT EXECUTED tty->flow_ctrl &= ~(FL_IRTSOFF); 40010bb0: 14e42423 sw a4,328(s0) <== NOT EXECUTED if (tty->termios.c_cflag & CRTSCTS) { 40010bb4: ca078ae3 beqz a5,40010868 <== ALWAYS TAKEN 40010bb8: ca5ff06f j 4001085c <== NOT EXECUTED rawnc += tty->rawInBuf.Size; 40010bbc: 08c42783 lw a5,140(s0) <== NOT EXECUTED 40010bc0: 00f70733 add a4,a4,a5 <== NOT EXECUTED 40010bc4: de5ff06f j 400109a8 <== NOT EXECUTED drainOutput (tty); 40010bc8: 00040513 mv a0,s0 40010bcc: cddfd0ef jal ra,4000e8a8 if (args->command == TIOCSETAF) { 40010bd0: 0044a703 lw a4,4(s1) 40010bd4: 802c77b7 lui a5,0x802c7 40010bd8: 41678793 addi a5,a5,1046 # 802c7416 40010bdc: bcf714e3 bne a4,a5,400107a4 rtems_termios_device_context *ctx = tty->device_context; 40010be0: 17c42483 lw s1,380(s0) ( *context->lock_acquire )( context, lock_context ); 40010be4: 00c10593 addi a1,sp,12 40010be8: 0144a783 lw a5,20(s1) 40010bec: 00048513 mv a0,s1 40010bf0: 000780e7 jalr a5 ( *context->lock_release )( context, lock_context ); 40010bf4: 0184a783 lw a5,24(s1) tty->rawInBuf.Tail = 0; 40010bf8: 08042423 sw zero,136(s0) tty->rawInBuf.Head = 0; 40010bfc: 08042223 sw zero,132(s0) 40010c00: 00c10593 addi a1,sp,12 40010c04: 00048513 mv a0,s1 40010c08: 000780e7 jalr a5 } 40010c0c: b99ff06f j 400107a4 if (tty->termios.c_cc[VMIN]) { 40010c10: f2069ae3 bnez a3,40010b44 tty->rawInBufSemaphoreWait = false; 40010c14: 0a040423 sb zero,168(s0) 40010c18: f3dff06f j 40010b54 tty->flow_ctrl &= ~(FL_MDXOF); 40010c1c: 14842783 lw a5,328(s0) 40010c20: bff7f793 andi a5,a5,-1025 40010c24: 14f42423 sw a5,328(s0) tty->flow_ctrl &= ~(FL_ISNTXOF); 40010c28: 14842783 lw a5,328(s0) 40010c2c: ffd7f793 andi a5,a5,-3 40010c30: 14f42423 sw a5,328(s0) 40010c34: c0dff06f j 40010840 } else if (tty->handler.ioctl) { 40010c38: 13842783 lw a5,312(s0) 40010c3c: 02078663 beqz a5,40010c68 <== ALWAYS TAKEN args->ioctl_return = (*tty->handler.ioctl) (tty->device_context, 40010c40: 0084a603 lw a2,8(s1) <== NOT EXECUTED 40010c44: 17c42503 lw a0,380(s0) <== NOT EXECUTED sc = RTEMS_SUCCESSFUL; 40010c48: 00000993 li s3,0 <== NOT EXECUTED args->ioctl_return = (*tty->handler.ioctl) (tty->device_context, 40010c4c: 000780e7 jalr a5 <== NOT EXECUTED 40010c50: 00a4a623 sw a0,12(s1) <== NOT EXECUTED sc = RTEMS_SUCCESSFUL; 40010c54: d01ff06f j 40010954 <== NOT EXECUTED tty->flow_ctrl &= ~(FL_IRTSOFF); 40010c58: 14842783 lw a5,328(s0) <== NOT EXECUTED 40010c5c: ffb7f793 andi a5,a5,-5 <== NOT EXECUTED 40010c60: 14f42423 sw a5,328(s0) <== NOT EXECUTED if (tty->termios.c_cflag & CRTSCTS) { 40010c64: c05ff06f j 40010868 <== NOT EXECUTED sc = RTEMS_INVALID_NUMBER; 40010c68: 00a00993 li s3,10 40010c6c: ce9ff06f j 40010954 =============================================================================== 40003be8 : { 40003be8: fe010113 addi sp,sp,-32 40003bec: 01312623 sw s3,12(sp) _Mutex_Acquire( mutex ); 40003bf0: 4001b9b7 lui s3,0x4001b 40003bf4: 00812c23 sw s0,24(sp) 40003bf8: 01212823 sw s2,16(sp) 40003bfc: 00050413 mv s0,a0 40003c00: 61c98513 addi a0,s3,1564 # 4001b61c 40003c04: 00912a23 sw s1,20(sp) 40003c08: 01412423 sw s4,8(sp) 40003c0c: 01512223 sw s5,4(sp) 40003c10: 00112e23 sw ra,28(sp) 40003c14: 00068a93 mv s5,a3 40003c18: 00058493 mv s1,a1 40003c1c: 00060a13 mv s4,a2 for (tty = rtems_termios_ttyHead ; tty != NULL ; tty = tty->forw) { 40003c20: 97c18913 addi s2,gp,-1668 # 4001bc54 40003c24: 351040ef jal ra,40008774 <_Mutex_Acquire> 40003c28: 00092683 lw a3,0(s2) 40003c2c: 00069863 bnez a3,40003c3c <== NEVER TAKEN 40003c30: 01c0006f j 40003c4c 40003c34: 0006a683 lw a3,0(a3) <== NOT EXECUTED 40003c38: 00068a63 beqz a3,40003c4c <== NOT EXECUTED if ((tty->major == major) && (tty->minor == minor)) 40003c3c: 00c6a703 lw a4,12(a3) <== NOT EXECUTED 40003c40: fe871ae3 bne a4,s0,40003c34 <== NOT EXECUTED 40003c44: 0106a703 lw a4,16(a3) <== NOT EXECUTED 40003c48: fe9716e3 bne a4,s1,40003c34 <== NOT EXECUTED tty = rtems_termios_open_tty( 40003c4c: 000a8793 mv a5,s5 40003c50: 00000713 li a4,0 40003c54: 000a0613 mv a2,s4 40003c58: 00048593 mv a1,s1 40003c5c: 00040513 mv a0,s0 40003c60: f8cfe0ef jal ra,400023ec if (tty == NULL) { 40003c64: 06050663 beqz a0,40003cd0 if (tty->refcount == 1) { 40003c68: 00852703 lw a4,8(a0) 40003c6c: 00100793 li a5,1 40003c70: 02f70a63 beq a4,a5,40003ca4 _Mutex_Release( mutex ); 40003c74: 61c98513 addi a0,s3,1564 40003c78: 36d040ef jal ra,400087e4 <_Mutex_Release> return RTEMS_SUCCESSFUL; 40003c7c: 00000513 li a0,0 } 40003c80: 01c12083 lw ra,28(sp) 40003c84: 01812403 lw s0,24(sp) 40003c88: 01412483 lw s1,20(sp) 40003c8c: 01012903 lw s2,16(sp) 40003c90: 00c12983 lw s3,12(sp) 40003c94: 00812a03 lw s4,8(sp) 40003c98: 00412a83 lw s5,4(sp) 40003c9c: 02010113 addi sp,sp,32 40003ca0: 00008067 ret tty->forw = rtems_termios_ttyHead; 40003ca4: 00092783 lw a5,0(s2) tty->back = NULL; 40003ca8: 00052223 sw zero,4(a0) tty->forw = rtems_termios_ttyHead; 40003cac: 00f52023 sw a5,0(a0) if (rtems_termios_ttyHead != NULL) 40003cb0: 00078463 beqz a5,40003cb8 <== ALWAYS TAKEN rtems_termios_ttyHead->back = tty; 40003cb4: 00a7a223 sw a0,4(a5) <== NOT EXECUTED if (rtems_termios_ttyTail == NULL) 40003cb8: 98018793 addi a5,gp,-1664 # 4001bc58 40003cbc: 0007a703 lw a4,0(a5) rtems_termios_ttyHead = tty; 40003cc0: 00a92023 sw a0,0(s2) if (rtems_termios_ttyTail == NULL) 40003cc4: fa0718e3 bnez a4,40003c74 <== NEVER TAKEN rtems_termios_ttyTail = tty; 40003cc8: 00a7a023 sw a0,0(a5) 40003ccc: fa9ff06f j 40003c74 40003cd0: 61c98513 addi a0,s3,1564 40003cd4: 311040ef jal ra,400087e4 <_Mutex_Release> return RTEMS_NO_MEMORY; 40003cd8: 01a00513 li a0,26 40003cdc: fa5ff06f j 40003c80 =============================================================================== 40004638 : if (handler == NULL) { 40004638: 00050863 beqz a0,40004648 <== NEVER TAKEN termios_isig_handler = handler; 4000463c: 8aa1a023 sw a0,-1888(gp) # 40016228 return RTEMS_SUCCESSFUL; 40004640: 00000513 li a0,0 40004644: 00008067 ret return RTEMS_INVALID_ADDRESS; 40004648: 00900513 li a0,9 <== NOT EXECUTED } 4000464c: 00008067 ret <== NOT EXECUTED =============================================================================== 40011170 : { 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 ) { 40011170: 400137b7 lui a5,0x40013 40011174: 4d07a703 lw a4,1232(a5) # 400134d0 const rtems_assoc_t *last = current; 40011178: 4d078613 addi a2,a5,1232 const rtems_assoc_t *current = &rtems_termios_baud_table[ 0 ]; 4001117c: 4d078793 addi a5,a5,1232 while ( current->name != NULL && current->local_value < baud ) { 40011180: 00071c63 bnez a4,40011198 <== ALWAYS TAKEN 40011184: 0400006f j 400111c4 <== NOT EXECUTED 40011188: 00c7a703 lw a4,12(a5) 4001118c: 00078613 mv a2,a5 40011190: 00068793 mv a5,a3 40011194: 02070863 beqz a4,400111c4 40011198: 0047a703 lw a4,4(a5) last = current; ++current; 4001119c: 00c78693 addi a3,a5,12 while ( current->name != NULL && current->local_value < baud ) { 400111a0: feb764e3 bltu a4,a1,40011188 } if ( current->name != NULL ) { uint32_t mid = (last->local_value + current->local_value) / UINT32_C( 2 ); 400111a4: 00462683 lw a3,4(a2) 400111a8: 00d70733 add a4,a4,a3 400111ac: 00175713 srli a4,a4,0x1 spd = baud <= mid ? last->remote_value : current->remote_value; 400111b0: 02b76463 bltu a4,a1,400111d8 400111b4: 00862783 lw a5,8(a2) } else { spd = B460800; } term->c_ispeed = spd; 400111b8: 02f52223 sw a5,36(a0) term->c_ospeed = spd; 400111bc: 02f52423 sw a5,40(a0) } 400111c0: 00008067 ret spd = B460800; 400111c4: 000717b7 lui a5,0x71 400111c8: 80078793 addi a5,a5,-2048 # 70800 term->c_ispeed = spd; 400111cc: 02f52223 sw a5,36(a0) term->c_ospeed = spd; 400111d0: 02f52423 sw a5,40(a0) } 400111d4: 00008067 ret spd = baud <= mid ? last->remote_value : current->remote_value; 400111d8: 0087a783 lw a5,8(a5) term->c_ispeed = spd; 400111dc: 02f52223 sw a5,36(a0) term->c_ospeed = spd; 400111e0: 02f52423 sw a5,40(a0) } 400111e4: 00008067 ret =============================================================================== 40009f38 : int rtems_verror( rtems_error_code_t error_flag, const char *printf_format, va_list arglist ) { 40009f38: fe010113 addi sp,sp,-32 int local_errno = 0; int chars_written = 0; rtems_status_code status; if (error_flag & RTEMS_ERROR_PANIC) { 40009f3c: 200007b7 lui a5,0x20000 { 40009f40: 00812c23 sw s0,24(sp) 40009f44: 01212823 sw s2,16(sp) 40009f48: 01312623 sw s3,12(sp) 40009f4c: 00112e23 sw ra,28(sp) 40009f50: 00912a23 sw s1,20(sp) 40009f54: 01412423 sw s4,8(sp) if (error_flag & RTEMS_ERROR_PANIC) { 40009f58: 00f577b3 and a5,a0,a5 { 40009f5c: 00050413 mv s0,a0 40009f60: 00058913 mv s2,a1 40009f64: 00060993 mv s3,a2 if (error_flag & RTEMS_ERROR_PANIC) { 40009f68: 00078c63 beqz a5,40009f80 if (rtems_panic_in_progress++) 40009f6c: 98018793 addi a5,gp,-1664 # 40027aa8 40009f70: 0007a703 lw a4,0(a5) # 20000000 40009f74: 00170693 addi a3,a4,1 40009f78: 00d7a023 sw a3,0(a5) 40009f7c: 08071663 bnez a4,4000a008 <== NEVER TAKEN /* don't aggravate things */ if (rtems_panic_in_progress > 2) return 0; } (void) fflush(stdout); /* in case stdout/stderr same */ 40009f80: cbcf60ef jal ra,4000043c <__getreent> 40009f84: 00852503 lw a0,8(a0) 40009f88: 6810b0ef jal ra,40015e08 status = error_flag & ~RTEMS_ERROR_MASK; if (error_flag & RTEMS_ERROR_ERRNO) /* include errno? */ 40009f8c: 400007b7 lui a5,0x40000 status = error_flag & ~RTEMS_ERROR_MASK; 40009f90: 90000537 lui a0,0x90000 if (error_flag & RTEMS_ERROR_ERRNO) /* include errno? */ 40009f94: 00f477b3 and a5,s0,a5 status = error_flag & ~RTEMS_ERROR_MASK; 40009f98: fff50513 addi a0,a0,-1 # 8fffffff 40009f9c: 00a47433 and s0,s0,a0 if (error_flag & RTEMS_ERROR_ERRNO) /* include errno? */ 40009fa0: 08079663 bnez a5,4000a02c #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); 40009fa4: c98f60ef jal ra,4000043c <__getreent> 40009fa8: 00c52503 lw a0,12(a0) 40009fac: 00098613 mv a2,s3 40009fb0: 00090593 mv a1,s2 40009fb4: 33c140ef jal ra,4001e2f0 40009fb8: 00050493 mv s1,a0 if (status) 40009fbc: 0c041663 bnez s0,4000a088 chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno)); else chars_written += fprintf(stderr, " (unknown errno=%d)", local_errno); } chars_written += fprintf(stderr, "\n"); 40009fc0: c7cf60ef jal ra,4000043c <__getreent> 40009fc4: 00c52503 lw a0,12(a0) 40009fc8: 400255b7 lui a1,0x40025 40009fcc: e2058593 addi a1,a1,-480 # 40024e20 40009fd0: 6700c0ef jal ra,40016640 40009fd4: 00a484b3 add s1,s1,a0 (void) fflush(stderr); 40009fd8: c64f60ef jal ra,4000043c <__getreent> 40009fdc: 00c52503 lw a0,12(a0) 40009fe0: 6290b0ef jal ra,40015e08 return chars_written; } 40009fe4: 01c12083 lw ra,28(sp) 40009fe8: 01812403 lw s0,24(sp) 40009fec: 01012903 lw s2,16(sp) 40009ff0: 00c12983 lw s3,12(sp) 40009ff4: 00812a03 lw s4,8(sp) 40009ff8: 00048513 mv a0,s1 40009ffc: 01412483 lw s1,20(sp) 4000a000: 02010113 addi sp,sp,32 4000a004: 00008067 ret disable_level = cpu_self->thread_dispatch_disable_level; 4000a008: 4002c7b7 lui a5,0x4002c <== NOT EXECUTED 4000a00c: ac078793 addi a5,a5,-1344 # 4002bac0 <_Per_CPU_Information> <== NOT EXECUTED 4000a010: 0307a703 lw a4,48(a5) <== NOT EXECUTED if (rtems_panic_in_progress > 2) 4000a014: 00200613 li a2,2 <== NOT EXECUTED return 0; 4000a018: 00000493 li s1,0 <== NOT EXECUTED cpu_self->thread_dispatch_disable_level = disable_level + 1; 4000a01c: 00170713 addi a4,a4,1 <== NOT EXECUTED 4000a020: 02e7a823 sw a4,48(a5) <== NOT EXECUTED if (rtems_panic_in_progress > 2) 4000a024: fcd640e3 blt a2,a3,40009fe4 <== NOT EXECUTED 4000a028: f59ff06f j 40009f80 <== NOT EXECUTED local_errno = errno; 4000a02c: 0810b0ef jal ra,400158ac <__errno> 4000a030: 00052a03 lw s4,0(a0) chars_written += vfprintf(stderr, printf_format, arglist); 4000a034: c08f60ef jal ra,4000043c <__getreent> 4000a038: 00c52503 lw a0,12(a0) 4000a03c: 00098613 mv a2,s3 4000a040: 00090593 mv a1,s2 4000a044: 2ac140ef jal ra,4001e2f0 4000a048: 00050493 mv s1,a0 if (status) 4000a04c: 04041063 bnez s0,4000a08c if (local_errno) { 4000a050: f60a08e3 beqz s4,40009fc0 if ((local_errno > 0) && *strerror(local_errno)) 4000a054: 01405a63 blez s4,4000a068 4000a058: 000a0513 mv a0,s4 4000a05c: 5080f0ef jal ra,40019564 4000a060: 00054783 lbu a5,0(a0) 4000a064: 04079a63 bnez a5,4000a0b8 <== ALWAYS TAKEN chars_written += fprintf(stderr, " (unknown errno=%d)", local_errno); 4000a068: bd4f60ef jal ra,4000043c <__getreent> 4000a06c: 00c52503 lw a0,12(a0) 4000a070: 400245b7 lui a1,0x40024 4000a074: 000a0613 mv a2,s4 4000a078: 77858593 addi a1,a1,1912 # 40024778 4000a07c: 5c40c0ef jal ra,40016640 4000a080: 00a484b3 add s1,s1,a0 4000a084: f3dff06f j 40009fc0 int local_errno = 0; 4000a088: 00000a13 li s4,0 fprintf(stderr, " (status: %s)", rtems_status_text(status)); 4000a08c: bb0f60ef jal ra,4000043c <__getreent> 4000a090: 00c52903 lw s2,12(a0) 4000a094: 00040513 mv a0,s0 4000a098: a7dfb0ef jal ra,40005b14 4000a09c: 400245b7 lui a1,0x40024 4000a0a0: 00050613 mv a2,a0 4000a0a4: 75858593 addi a1,a1,1880 # 40024758 4000a0a8: 00090513 mv a0,s2 4000a0ac: 5940c0ef jal ra,40016640 chars_written += 4000a0b0: 00a484b3 add s1,s1,a0 4000a0b4: f9dff06f j 4000a050 chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno)); 4000a0b8: b84f60ef jal ra,4000043c <__getreent> 4000a0bc: 00c52403 lw s0,12(a0) 4000a0c0: 000a0513 mv a0,s4 4000a0c4: 4a00f0ef jal ra,40019564 4000a0c8: 400245b7 lui a1,0x40024 4000a0cc: 00050613 mv a2,a0 4000a0d0: 76858593 addi a1,a1,1896 # 40024768 4000a0d4: 00040513 mv a0,s0 4000a0d8: 5680c0ef jal ra,40016640 4000a0dc: 00a484b3 add s1,s1,a0 4000a0e0: ee1ff06f j 40009fc0 =============================================================================== 40003b88 : * * @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; 40003b88: 00050a63 beqz a0,40003b9c <== NEVER TAKEN 40003b8c: 00452783 lw a5,4(a0) 40003b90: 00078663 beqz a5,40003b9c <== NEVER TAKEN va_list ap ) { int len = 0; if ( rtems_print_printer_valid( printer ) ) { len = printer->printer( printer->context, format, ap ); 40003b94: 00052503 lw a0,0(a0) 40003b98: 00078067 jr a5 } return len; } 40003b9c: 00000513 li a0,0 <== NOT EXECUTED 40003ba0: 00008067 ret <== NOT EXECUTED =============================================================================== 400067f0 : void setgrent(void) { 400067f0: ff010113 addi sp,sp,-16 pthread_once(&grp_once, grp_init); 400067f4: 400065b7 lui a1,0x40006 { 400067f8: 00912223 sw s1,4(sp) pthread_once(&grp_once, grp_init); 400067fc: 76858593 addi a1,a1,1896 # 40006768 40006800: 8b818513 addi a0,gp,-1864 # 400142f8 { 40006804: 00112623 sw ra,12(sp) 40006808: 00812423 sw s0,8(sp) 4000680c: 01212023 sw s2,0(sp) return pthread_getspecific(grp_key); 40006810: 8b418493 addi s1,gp,-1868 # 400142f4 pthread_once(&grp_once, grp_init); 40006814: b91fd0ef jal ra,400043a4 return pthread_getspecific(grp_key); 40006818: 0004a503 lw a0,0(s1) 4000681c: 238010ef jal ra,40007a54 grp_context *ctx = grp_get_context(); if (ctx == NULL) { 40006820: 00050413 mv s0,a0 40006824: 04050263 beqz a0,40006868 return; } } _libcsupport_pwdgrp_init(); 40006828: b51fa0ef jal ra,40001378 <_libcsupport_pwdgrp_init> if (ctx->fp != NULL) 4000682c: 00042503 lw a0,0(s0) 40006830: 00050463 beqz a0,40006838 fclose(ctx->fp); 40006834: 35c080ef jal ra,4000eb90 ctx->fp = fopen("/etc/group", "r"); 40006838: 400125b7 lui a1,0x40012 4000683c: 40012537 lui a0,0x40012 40006840: 6b058593 addi a1,a1,1712 # 400126b0 40006844: 3cc50513 addi a0,a0,972 # 400123cc 40006848: 48d080ef jal ra,4000f4d4 4000684c: 00a42023 sw a0,0(s0) } 40006850: 00c12083 lw ra,12(sp) 40006854: 00812403 lw s0,8(sp) 40006858: 00412483 lw s1,4(sp) 4000685c: 00012903 lw s2,0(sp) 40006860: 01010113 addi sp,sp,16 40006864: 00008067 ret ctx = calloc(1, sizeof(*ctx)); 40006868: 11400593 li a1,276 4000686c: 00100513 li a0,1 40006870: bc9ff0ef jal ra,40006438 40006874: 00050913 mv s2,a0 40006878: 00050413 mv s0,a0 if (ctx == NULL) 4000687c: fc050ae3 beqz a0,40006850 <== NEVER TAKEN eno = pthread_setspecific(grp_key, ctx); 40006880: 0004a503 lw a0,0(s1) 40006884: 00090593 mv a1,s2 40006888: 218010ef jal ra,40007aa0 if (eno != 0) { 4000688c: f8050ee3 beqz a0,40006828 <== ALWAYS TAKEN } 40006890: 00812403 lw s0,8(sp) <== NOT EXECUTED 40006894: 00c12083 lw ra,12(sp) <== NOT EXECUTED 40006898: 00412483 lw s1,4(sp) <== NOT EXECUTED free(ctx); 4000689c: 00090513 mv a0,s2 <== NOT EXECUTED } 400068a0: 00012903 lw s2,0(sp) <== NOT EXECUTED 400068a4: 01010113 addi sp,sp,16 <== NOT EXECUTED free(ctx); 400068a8: d41ff06f j 400065e8 <== NOT EXECUTED =============================================================================== 400032b8 : * 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 ) { 400032b8: fb010113 addi sp,sp,-80 400032bc: 00050593 mv a1,a0 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 ); 400032c0: 01800613 li a2,24 400032c4: 00810513 addi a0,sp,8 { 400032c8: 04812423 sw s0,72(sp) 400032cc: 04112623 sw ra,76(sp) 400032d0: 04912223 sw s1,68(sp) rtems_filesystem_eval_path_start( &ctx, path, eval_flags ); 400032d4: d28ff0ef jal ra,400027fc rtems_filesystem_mount_table_entry_t *mt_entry = currentloc->mt_entry; 400032d8: 01452403 lw s0,20(a0) 400032dc: 00c42783 lw a5,12(s0) 400032e0: 02442583 lw a1,36(s0) 400032e4: 0107a783 lw a5,16(a5) 400032e8: 000780e7 jalr a5 if ( rtems_filesystem_location_is_instance_root( currentloc ) ) { 400032ec: 0c050263 beqz a0,400033b0 &rtems_filesystem_root->location; 400032f0: 15c000ef jal ra,4000344c 400032f4: 00452483 lw s1,4(a0) &rtems_filesystem_current->location; 400032f8: 154000ef jal ra,4000344c return mt_entry == root->mt_entry || mt_entry == current->mt_entry; 400032fc: 0144a783 lw a5,20(s1) 40003300: 08f40a63 beq s0,a5,40003394 40003304: 00052783 lw a5,0(a0) 40003308: 0147a783 lw a5,20(a5) 4000330c: 08f40463 beq s0,a5,40003394 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; 40003310: 02042783 lw a5,32(s0) rv = (*mt_point_ops->unmount_h)( mt_entry ); 40003314: 00040513 mv a0,s0 const rtems_filesystem_operations_table *mt_point_ops = 40003318: 0147a783 lw a5,20(a5) rv = (*mt_point_ops->unmount_h)( mt_entry ); 4000331c: 00c7a783 lw a5,12(a5) 40003320: 0307a783 lw a5,48(a5) 40003324: 000780e7 jalr a5 40003328: 00050493 mv s1,a0 if ( rv == 0 ) { 4000332c: 02050263 beqz a0,40003350 } else { errno = EACCES; rv = -1; } rtems_filesystem_eval_path_cleanup( &ctx ); 40003330: 00810513 addi a0,sp,8 40003334: ee8ff0ef jal ra,40002a1c rtems_fatal_error_occurred( 0xdeadbeef ); } } return rv; } 40003338: 04c12083 lw ra,76(sp) 4000333c: 04812403 lw s0,72(sp) 40003340: 00048513 mv a0,s1 40003344: 04412483 lw s1,68(sp) 40003348: 05010113 addi sp,sp,80 4000334c: 00008067 ret rtems_id self_task_id = rtems_task_self(); 40003350: 1f1030ef jal ra,40006d40 __asm__ volatile ( 40003354: 300477f3 csrrci a5,mstatus,8 mt_entry->unmount_task = self_task_id; 40003358: 02a42e23 sw a0,60(s0) mt_entry->mounted = false; 4000335c: 02040423 sb zero,40(s0) return mstatus & RISCV_MSTATUS_MIE; 40003360: 0087f793 andi a5,a5,8 __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 40003364: 3007a073 csrs mstatus,a5 rtems_filesystem_eval_path_cleanup( &ctx ); 40003368: 00810513 addi a0,sp,8 4000336c: eb0ff0ef jal ra,40002a1c return rtems_event_system_receive( 40003370: 00410693 addi a3,sp,4 40003374: 00000613 li a2,0 40003378: 00000593 li a1,0 4000337c: 80000537 lui a0,0x80000 40003380: 091030ef jal ra,40006c10 if ( sc != RTEMS_SUCCESSFUL ) { 40003384: fa050ae3 beqz a0,40003338 <== ALWAYS TAKEN rtems_fatal_error_occurred( 0xdeadbeef ); 40003388: deadc537 lui a0,0xdeadc <== NOT EXECUTED 4000338c: eef50513 addi a0,a0,-273 # deadbeef <== NOT EXECUTED 40003390: 305030ef jal ra,40006e94 <== NOT EXECUTED errno = EBUSY; 40003394: 3c5170ef jal ra,4001af58 <__errno> 40003398: 01000793 li a5,16 4000339c: 00f52023 sw a5,0(a0) rtems_filesystem_eval_path_cleanup( &ctx ); 400033a0: 00810513 addi a0,sp,8 400033a4: e78ff0ef jal ra,40002a1c rv = -1; 400033a8: fff00493 li s1,-1 400033ac: f8dff06f j 40003338 errno = EACCES; 400033b0: 3a9170ef jal ra,4001af58 <__errno> 400033b4: 00d00793 li a5,13 400033b8: 00f52023 sw a5,0(a0) rtems_filesystem_eval_path_cleanup( &ctx ); 400033bc: 00810513 addi a0,sp,8 400033c0: e5cff0ef jal ra,40002a1c rv = -1; 400033c4: fff00493 li s1,-1 400033c8: f71ff06f j 40003338 =============================================================================== 4001de90 : ssize_t write( int fd, const void *buffer, size_t count ) { 4001de90: ff010113 addi sp,sp,-16 <== NOT EXECUTED 4001de94: 00112623 sw ra,12(sp) <== NOT EXECUTED 4001de98: 00812423 sw s0,8(sp) <== NOT EXECUTED 4001de9c: 00912223 sw s1,4(sp) <== NOT EXECUTED rtems_libio_t *iop; ssize_t n; rtems_libio_check_buffer( buffer ); 4001dea0: 0c058063 beqz a1,4001df60 <== NOT EXECUTED 4001dea4: 00050793 mv a5,a0 <== NOT EXECUTED rtems_libio_check_count( count ); 4001dea8: 00000513 li a0,0 <== NOT EXECUTED 4001deac: 06060a63 beqz a2,4001df20 <== NOT EXECUTED LIBIO_GET_IOP_WITH_ACCESS( fd, iop, LIBIO_FLAGS_WRITE, EBADF ); 4001deb0: 8901a703 lw a4,-1904(gp) # 40020cd0 <== NOT EXECUTED 4001deb4: 08e7fc63 bgeu a5,a4,4001df4c <== NOT EXECUTED return &rtems_libio_iops[ fd ]; 4001deb8: 00179413 slli s0,a5,0x1 <== NOT EXECUTED 4001debc: 00f40433 add s0,s0,a5 <== NOT EXECUTED 4001dec0: 400237b7 lui a5,0x40023 <== NOT EXECUTED 4001dec4: cd878793 addi a5,a5,-808 # 40022cd8 <== NOT EXECUTED 4001dec8: 00441413 slli s0,s0,0x4 <== NOT EXECUTED 4001decc: 00f40433 add s0,s0,a5 <== NOT EXECUTED __asm__ volatile ( 4001ded0: 30047773 csrrci a4,mstatus,8 <== NOT EXECUTED val = *obj; 4001ded4: 00042783 lw a5,0(s0) <== NOT EXECUTED *obj = val + arg; 4001ded8: 000014b7 lui s1,0x1 <== NOT EXECUTED 4001dedc: 009786b3 add a3,a5,s1 <== NOT EXECUTED 4001dee0: 00d42023 sw a3,0(s0) <== NOT EXECUTED return mstatus & RISCV_MSTATUS_MIE; 4001dee4: 00877713 andi a4,a4,8 <== NOT EXECUTED __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 4001dee8: 30072073 csrs mstatus,a4 <== NOT EXECUTED 4001deec: 10400713 li a4,260 <== NOT EXECUTED 4001def0: 1047f793 andi a5,a5,260 <== NOT EXECUTED 4001def4: 04e79063 bne a5,a4,4001df34 <== NOT EXECUTED /* * Now process the write() request. */ n = (*iop->pathinfo.handlers->write_h)( iop, buffer, count ); 4001def8: 02042783 lw a5,32(s0) <== NOT EXECUTED 4001defc: 00040513 mv a0,s0 <== NOT EXECUTED 4001df00: 00c7a783 lw a5,12(a5) <== NOT EXECUTED 4001df04: 000780e7 jalr a5 <== NOT EXECUTED __asm__ volatile ( 4001df08: 300477f3 csrrci a5,mstatus,8 <== NOT EXECUTED *obj = val - arg; 4001df0c: 00042703 lw a4,0(s0) <== NOT EXECUTED 4001df10: 40970733 sub a4,a4,s1 <== NOT EXECUTED 4001df14: 00e42023 sw a4,0(s0) <== NOT EXECUTED return mstatus & RISCV_MSTATUS_MIE; 4001df18: 0087f793 andi a5,a5,8 <== NOT EXECUTED __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 4001df1c: 3007a073 csrs mstatus,a5 <== NOT EXECUTED rtems_libio_iop_drop( iop ); return n; } 4001df20: 00c12083 lw ra,12(sp) <== NOT EXECUTED 4001df24: 00812403 lw s0,8(sp) <== NOT EXECUTED 4001df28: 00412483 lw s1,4(sp) <== NOT EXECUTED 4001df2c: 01010113 addi sp,sp,16 <== NOT EXECUTED 4001df30: 00008067 ret <== NOT EXECUTED __asm__ volatile ( 4001df34: 300477f3 csrrci a5,mstatus,8 <== NOT EXECUTED 4001df38: 00042703 lw a4,0(s0) <== NOT EXECUTED 4001df3c: 40970733 sub a4,a4,s1 <== NOT EXECUTED 4001df40: 00e42023 sw a4,0(s0) <== NOT EXECUTED return mstatus & RISCV_MSTATUS_MIE; 4001df44: 0087f793 andi a5,a5,8 <== NOT EXECUTED __asm__ volatile ( "csrrs zero, mstatus, %0" : : "r" ( level ) ); 4001df48: 3007a073 csrs mstatus,a5 <== NOT EXECUTED LIBIO_GET_IOP_WITH_ACCESS( fd, iop, LIBIO_FLAGS_WRITE, EBADF ); 4001df4c: f7cf60ef jal ra,400146c8 <__errno> <== NOT EXECUTED 4001df50: 00900793 li a5,9 <== NOT EXECUTED 4001df54: 00f52023 sw a5,0(a0) <== NOT EXECUTED 4001df58: fff00513 li a0,-1 <== NOT EXECUTED 4001df5c: fc5ff06f j 4001df20 <== NOT EXECUTED rtems_libio_check_buffer( buffer ); 4001df60: f68f60ef jal ra,400146c8 <__errno> <== NOT EXECUTED 4001df64: 01600793 li a5,22 <== NOT EXECUTED 4001df68: 00f52023 sw a5,0(a0) <== NOT EXECUTED 4001df6c: fff00513 li a0,-1 <== NOT EXECUTED 4001df70: fb1ff06f j 4001df20 <== NOT EXECUTED