RTEMS-5
Annotated Report
Fri Aug 10 16:56:50 2018
4001192c <IMFS_LIMITS_AND_OPTIONS>:
4001192c: 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 ff ................
4001193c: 00 00 00 ff 00 00 00 02 00 00 00 01 00 00 00 02 ................
4001194c: 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 ................
4001195c: 00 00 00 00 4e 4f 4e 42 4c 4f 43 4b 00 00 00 00 ....NONBLOCK....
4001196c: 00 00 00 00 41 50 50 45 4e 44 00 00 52 45 41 44 ....APPEND..READ
4001197c: 00 00 00 00 57 52 49 54 45 00 00 00 52 45 41 44 ....WRITE...READ
4001198c: 2f 57 52 49 54 45 00 00 /WRITE..
40003260 <IMFS_chown>:
int IMFS_chown(
const rtems_filesystem_location_info_t *loc,
uid_t owner,
gid_t group
)
{
40003260: 9d e3 bf 90 save %sp, -112, %sp
<== NOT EXECUTED
IMFS_jnode_t *jnode;
jnode = (IMFS_jnode_t *) loc->node_access;
40003264: fa 06 20 08 ld [ %i0 + 8 ], %i5
<== NOT EXECUTED
jnode->st_uid = owner;
40003268: f2 37 60 1c sth %i1, [ %i5 + 0x1c ]
<== NOT EXECUTED
static inline time_t _IMFS_get_time( void )
{
struct bintime now;
/* Use most efficient way to get the time in seconds (CLOCK_REALTIME) */
_Timecounter_Getbintime( &now );
4000326c: 90 07 bf f0 add %fp, -16, %o0
<== NOT EXECUTED
jnode->st_gid = group;
40003270: f4 37 60 1e sth %i2, [ %i5 + 0x1e ]
<== NOT EXECUTED
40003274: 40 00 17 7d call 40009068 <_Timecounter_Getbintime>
<== NOT EXECUTED
40003278: b0 10 20 00 clr %i0
<== NOT EXECUTED
return now.sec;
4000327c: c4 1f bf f0 ldd [ %fp + -16 ], %g2
<== NOT EXECUTED
jnode->stat_mtime = _IMFS_get_time();
}
static inline void IMFS_update_ctime( IMFS_jnode_t *jnode )
{
jnode->stat_ctime = _IMFS_get_time();
40003280: c4 3f 60 30 std %g2, [ %i5 + 0x30 ]
<== NOT EXECUTED
IMFS_update_ctime( jnode );
return 0;
}
40003284: 81 c7 e0 08 ret
<== NOT EXECUTED
40003288: 81 e8 00 00 restore
<== NOT EXECUTED
4000de68 <IMFS_create_node>:
const char *name,
size_t namelen,
mode_t mode,
void *arg
)
{
4000de68: 9d e3 bf a0 save %sp, -96, %sp
IMFS_jnode_t *allocated_node;
IMFS_jnode_t *node;
allocated_node = calloc( 1, node_size + namelen );
4000de6c: 90 10 20 01 mov 1, %o0
4000de70: 7f ff da eb call 40004a1c <calloc>
4000de74: 92 06 80 1c add %i2, %i4, %o1
if ( allocated_node == NULL ) {
4000de78: a0 92 20 00 orcc %o0, 0, %l0
4000de7c: 02 80 00 1c be 4000deec <IMFS_create_node+0x84>
<== NEVER TAKEN
4000de80: da 07 a0 5c ld [ %fp + 0x5c ], %o5
errno = ENOMEM;
return NULL;
}
node = IMFS_initialize_node(
4000de84: 98 10 00 1d mov %i5, %o4
4000de88: 96 10 00 1c mov %i4, %o3
4000de8c: 94 04 00 1a add %l0, %i2, %o2
4000de90: 7f ff d9 ae call 40004548 <IMFS_initialize_node>
4000de94: 92 10 00 19 mov %i1, %o1
(char *) allocated_node + node_size,
namelen,
mode,
arg
);
if ( node != NULL ) {
4000de98: ba 92 20 00 orcc %o0, 0, %i5
4000de9c: 02 80 00 0f be 4000ded8 <IMFS_create_node+0x70>
4000dea0: 94 10 00 1c mov %i4, %o2
IMFS_jnode_t *parent = parentloc->node_access;
memcpy( RTEMS_DECONST( char *, node->name ), name, namelen );
4000dea4: d0 07 60 0c ld [ %i5 + 0xc ], %o0
IMFS_jnode_t *parent = parentloc->node_access;
4000dea8: f4 06 20 08 ld [ %i0 + 8 ], %i2
memcpy( RTEMS_DECONST( char *, node->name ), name, namelen );
4000deac: 40 00 06 18 call 4000f70c <memcpy>
4000deb0: 92 10 00 1b mov %i3, %o1
old_last = tail->previous;
4000deb4: c2 06 a0 48 ld [ %i2 + 0x48 ], %g1
return &the_chain->Tail.Node;
4000deb8: 84 06 a0 44 add %i2, 0x44, %g2
entry_node->Parent = dir_node;
4000debc: f4 27 60 08 st %i2, [ %i5 + 8 ]
the_node->next = tail;
4000dec0: c4 27 40 00 st %g2, [ %i5 ]
tail->previous = the_node;
4000dec4: fa 26 a0 48 st %i5, [ %i2 + 0x48 ]
old_last->next = the_node;
4000dec8: fa 20 40 00 st %i5, [ %g1 ]
the_node->previous = old_last;
4000decc: c2 27 60 04 st %g1, [ %i5 + 4 ]
} else {
free( allocated_node );
}
return node;
}
4000ded0: 81 c7 e0 08 ret
4000ded4: 91 e8 00 1d restore %g0, %i5, %o0
free( allocated_node );
4000ded8: 90 10 00 10 mov %l0, %o0
4000dedc: 7f ff db 1b call 40004b48 <free>
4000dee0: b0 10 00 1d mov %i5, %i0
}
4000dee4: 81 c7 e0 08 ret
4000dee8: 81 e8 00 00 restore
errno = ENOMEM;
4000deec: 40 00 05 7b call 4000f4d8 <__errno>
<== NOT EXECUTED
4000def0: ba 10 20 00 clr %i5
<== NOT EXECUTED
4000def4: 82 10 20 0c mov 0xc, %g1
<== NOT EXECUTED
return NULL;
4000def8: 10 bf ff f6 b 4000ded0 <IMFS_create_node+0x68>
<== NOT EXECUTED
4000defc: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
400036d0 <IMFS_fchmod>:
int IMFS_fchmod(
const rtems_filesystem_location_info_t *loc,
mode_t mode
)
{
400036d0: 9d e3 bf 90 save %sp, -112, %sp
<== NOT EXECUTED
IMFS_jnode_t *jnode;
jnode = loc->node_access;
400036d4: fa 06 20 08 ld [ %i0 + 8 ], %i5
<== NOT EXECUTED
jnode->st_mode = mode;
400036d8: f2 27 60 14 st %i1, [ %i5 + 0x14 ]
<== NOT EXECUTED
_Timecounter_Getbintime( &now );
400036dc: 40 00 16 63 call 40009068 <_Timecounter_Getbintime>
<== NOT EXECUTED
400036e0: 90 07 bf f0 add %fp, -16, %o0
<== NOT EXECUTED
return now.sec;
400036e4: c4 1f bf f0 ldd [ %fp + -16 ], %g2
<== NOT EXECUTED
jnode->stat_ctime = _IMFS_get_time();
400036e8: c4 3f 60 30 std %g2, [ %i5 + 0x30 ]
<== NOT EXECUTED
IMFS_update_ctime( jnode );
return 0;
}
400036ec: 81 c7 e0 08 ret
<== NOT EXECUTED
400036f0: 91 e8 20 00 restore %g0, 0, %o0
<== NOT EXECUTED
40004548 <IMFS_initialize_node>:
const char *name,
size_t namelen,
mode_t mode,
void *arg
)
{
40004548: 9d e3 bf 90 save %sp, -112, %sp
struct timeval tv;
if ( namelen > IMFS_NAME_MAX ) {
4000454c: 80 a6 e0 ff cmp %i3, 0xff
40004550: 18 80 00 19 bgu 400045b4 <IMFS_initialize_node+0x6c>
<== NEVER TAKEN
40004554: 92 10 20 00 clr %o1
errno = ENAMETOOLONG;
return NULL;
}
gettimeofday( &tv, 0 );
40004558: 40 00 01 aa call 40004c00 <gettimeofday>
4000455c: 90 07 bf f0 add %fp, -16, %o0
/*
* Fill in the basic information
*/
node->name = name;
node->namelen = namelen;
node->reference_count = 1;
40004560: 03 00 00 40 sethi %hi(0x10000), %g1
node->name = name;
40004564: f4 26 20 0c st %i2, [ %i0 + 0xc ]
node->reference_count = 1;
40004568: 82 10 60 01 or %g1, 1, %g1
node->namelen = namelen;
4000456c: f6 36 20 10 sth %i3, [ %i0 + 0x10 ]
node->reference_count = 1;
40004570: c2 26 20 18 st %g1, [ %i0 + 0x18 ]
node->st_nlink = 1;
node->control = node_control;
40004574: f2 26 20 38 st %i1, [ %i0 + 0x38 ]
/*
* Fill in the mode and permission information for the jnode structure.
*/
node->st_mode = mode;
node->st_uid = geteuid();
40004578: 40 00 01 9c call 40004be8 <geteuid>
4000457c: f8 26 20 14 st %i4, [ %i0 + 0x14 ]
node->st_gid = getegid();
40004580: 40 00 01 94 call 40004bd0 <getegid>
40004584: d0 36 20 1c sth %o0, [ %i0 + 0x1c ]
/*
* Now set all the times.
*/
node->stat_atime = (time_t) tv.tv_sec;
40004588: c4 1f bf f0 ldd [ %fp + -16 ], %g2
node->st_gid = getegid();
4000458c: d0 36 20 1e sth %o0, [ %i0 + 0x1e ]
node->stat_mtime = (time_t) tv.tv_sec;
node->stat_ctime = (time_t) tv.tv_sec;
return (*node_control->node_initialize)( node, arg );
40004590: 92 10 00 1d mov %i5, %o1
node->stat_atime = (time_t) tv.tv_sec;
40004594: c4 3e 20 20 std %g2, [ %i0 + 0x20 ]
node->stat_mtime = (time_t) tv.tv_sec;
40004598: c4 3e 20 28 std %g2, [ %i0 + 0x28 ]
node->stat_ctime = (time_t) tv.tv_sec;
4000459c: c4 3e 20 30 std %g2, [ %i0 + 0x30 ]
return (*node_control->node_initialize)( node, arg );
400045a0: c2 06 60 04 ld [ %i1 + 4 ], %g1
400045a4: 9f c0 40 00 call %g1
400045a8: 90 10 00 18 mov %i0, %o0
}
400045ac: 81 c7 e0 08 ret
400045b0: 91 e8 00 08 restore %g0, %o0, %o0
errno = ENAMETOOLONG;
400045b4: 40 00 2b c9 call 4000f4d8 <__errno>
<== NOT EXECUTED
400045b8: b0 10 20 00 clr %i0
<== NOT EXECUTED
400045bc: 82 10 20 5b mov 0x5b, %g1
<== NOT EXECUTED
400045c0: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
return NULL;
400045c4: 81 c7 e0 08 ret
<== NOT EXECUTED
400045c8: 81 e8 00 00 restore
<== NOT EXECUTED
40003744 <IMFS_initialize_support>:
{
40003744: 9d e3 bf a0 save %sp, -96, %sp
IMFS_fs_info_t *fs_info = mount_data->fs_info;
40003748: fa 06 40 00 ld [ %i1 ], %i5
fs_info->mknod_controls = mount_data->mknod_controls;
4000374c: c2 06 60 08 ld [ %i1 + 8 ], %g1
40003750: c2 27 60 50 st %g1, [ %i5 + 0x50 ]
root_node = IMFS_initialize_node(
40003754: 9a 10 20 00 clr %o5
40003758: d2 00 40 00 ld [ %g1 ], %o1
4000375c: 96 10 20 00 clr %o3
40003760: 19 00 00 10 sethi %hi(0x4000), %o4
40003764: 90 10 00 1d mov %i5, %o0
40003768: 98 13 21 ed or %o4, 0x1ed, %o4
4000376c: 15 10 00 44 sethi %hi(0x40011000), %o2
40003770: 40 00 03 76 call 40004548 <IMFS_initialize_node>
40003774: 94 12 a0 00 mov %o2, %o2 ! 40011000 <rtems_libio_number_iops+0x200>
mt_entry->ops = mount_data->ops;
40003778: c2 06 60 04 ld [ %i1 + 4 ], %g1
loc->handlers = node->control->handlers;
4000377c: c4 02 20 38 ld [ %o0 + 0x38 ], %g2
40003780: c2 26 20 0c st %g1, [ %i0 + 0xc ]
mt_entry->pathconf_limits_and_options = &IMFS_LIMITS_AND_OPTIONS;
40003784: 03 10 00 46 sethi %hi(0x40011800), %g1
40003788: 82 10 61 2c or %g1, 0x12c, %g1 ! 4001192c <IMFS_LIMITS_AND_OPTIONS>
mt_entry->fs_info = fs_info;
4000378c: fa 26 20 08 st %i5, [ %i0 + 8 ]
mt_entry->pathconf_limits_and_options = &IMFS_LIMITS_AND_OPTIONS;
40003790: c2 26 20 2c st %g1, [ %i0 + 0x2c ]
40003794: c4 00 80 00 ld [ %g2 ], %g2
mt_entry->mt_fs_root->location.node_access = root_node;
40003798: c2 06 20 24 ld [ %i0 + 0x24 ], %g1
4000379c: d0 20 60 08 st %o0, [ %g1 + 8 ]
400037a0: c4 20 60 10 st %g2, [ %g1 + 0x10 ]
IMFS_determine_bytes_per_block(
400037a4: 03 10 00 4b sethi %hi(0x40012c00), %g1
400037a8: c6 00 63 68 ld [ %g1 + 0x368 ], %g3 ! 40012f68 <imfs_rq_memfile_bytes_per_block>
if (bit_mask == requested_bytes_per_block) {
400037ac: 80 a0 e0 10 cmp %g3, 0x10
400037b0: 02 80 00 0e be 400037e8 <IMFS_initialize_support+0xa4>
<== NEVER TAKEN
400037b4: 80 a0 e0 0f cmp %g3, 0xf
if(bit_mask > requested_bytes_per_block)
400037b8: 04 80 00 0b ble 400037e4 <IMFS_initialize_support+0xa0>
<== NEVER TAKEN
400037bc: 82 10 20 20 mov 0x20, %g1
400037c0: 84 10 20 05 mov 5, %g2
if (bit_mask == requested_bytes_per_block) {
400037c4: 80 a0 c0 01 cmp %g3, %g1
400037c8: 22 80 00 09 be,a 400037ec <IMFS_initialize_support+0xa8>
400037cc: 03 10 00 51 sethi %hi(0x40014400), %g1
if(bit_mask > requested_bytes_per_block)
400037d0: 26 80 00 06 bl,a 400037e8 <IMFS_initialize_support+0xa4>
<== NEVER TAKEN
400037d4: 86 10 20 80 mov 0x80, %g3
<== NOT EXECUTED
for (bit_mask = 16; !is_valid && (bit_mask <= 512); bit_mask <<= 1) {
400037d8: 84 80 bf ff addcc %g2, -1, %g2
400037dc: 12 bf ff fa bne 400037c4 <IMFS_initialize_support+0x80>
<== ALWAYS TAKEN
400037e0: 83 28 60 01 sll %g1, 1, %g1
: default_bytes_per_block);
400037e4: 86 10 20 80 mov 0x80, %g3
<== NOT EXECUTED
*dest_bytes_per_block = ((is_valid)
400037e8: 03 10 00 51 sethi %hi(0x40014400), %g1
<== NOT EXECUTED
400037ec: c6 20 63 c4 st %g3, [ %g1 + 0x3c4 ] ! 400147c4 <imfs_memfile_bytes_per_block>
}
400037f0: 81 c7 e0 08 ret
400037f4: 91 e8 20 00 restore %g0, 0, %o0
400038e4 <IMFS_link>:
{
400038e4: 9d e3 bf 88 save %sp, -120, %sp
<== NOT EXECUTED
target = targetloc->node_access;
400038e8: fa 06 60 08 ld [ %i1 + 8 ], %i5
<== NOT EXECUTED
if ( target->st_nlink >= LINK_MAX )
400038ec: c2 17 60 1a lduh [ %i5 + 0x1a ], %g1
<== NOT EXECUTED
400038f0: 80 a0 60 07 cmp %g1, 7
<== NOT EXECUTED
400038f4: 18 80 00 19 bgu 40003958 <IMFS_link+0x74>
<== NOT EXECUTED
400038f8: 9a 10 21 ff mov 0x1ff, %o5
<== NOT EXECUTED
new_node = IMFS_create_node(
400038fc: fa 23 a0 5c st %i5, [ %sp + 0x5c ]
<== NOT EXECUTED
40003900: 98 10 00 1b mov %i3, %o4
<== NOT EXECUTED
40003904: 96 10 00 1a mov %i2, %o3
<== NOT EXECUTED
40003908: 94 10 20 48 mov 0x48, %o2
<== NOT EXECUTED
4000390c: 90 10 00 18 mov %i0, %o0
<== NOT EXECUTED
40003910: 13 10 00 44 sethi %hi(0x40011000), %o1
<== NOT EXECUTED
40003914: 40 00 29 55 call 4000de68 <IMFS_create_node>
<== NOT EXECUTED
40003918: 92 12 61 08 or %o1, 0x108, %o1 ! 40011108 <IMFS_node_control_hard_link>
<== NOT EXECUTED
if ( !new_node )
4000391c: 80 a2 20 00 cmp %o0, 0
<== NOT EXECUTED
40003920: 02 80 00 14 be 40003970 <IMFS_link+0x8c>
<== NOT EXECUTED
40003924: 90 07 bf f0 add %fp, -16, %o0
<== NOT EXECUTED
target->reference_count++;
40003928: c4 17 60 18 lduh [ %i5 + 0x18 ], %g2
<== NOT EXECUTED
target->st_nlink++;
4000392c: c2 17 60 1a lduh [ %i5 + 0x1a ], %g1
<== NOT EXECUTED
target->reference_count++;
40003930: 84 00 a0 01 inc %g2
<== NOT EXECUTED
target->st_nlink++;
40003934: 82 00 60 01 inc %g1
<== NOT EXECUTED
target->reference_count++;
40003938: c4 37 60 18 sth %g2, [ %i5 + 0x18 ]
<== NOT EXECUTED
target->st_nlink++;
4000393c: c2 37 60 1a sth %g1, [ %i5 + 0x1a ]
<== NOT EXECUTED
_Timecounter_Getbintime( &now );
40003940: 40 00 15 ca call 40009068 <_Timecounter_Getbintime>
<== NOT EXECUTED
40003944: b0 10 20 00 clr %i0
<== NOT EXECUTED
return now.sec;
40003948: c4 1f bf f0 ldd [ %fp + -16 ], %g2
<== NOT EXECUTED
jnode->stat_ctime = _IMFS_get_time();
4000394c: c4 3f 60 30 std %g2, [ %i5 + 0x30 ]
<== NOT EXECUTED
}
40003950: 81 c7 e0 08 ret
<== NOT EXECUTED
40003954: 81 e8 00 00 restore
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EMLINK );
40003958: 40 00 2e e0 call 4000f4d8 <__errno>
<== NOT EXECUTED
4000395c: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
40003960: 82 10 20 1f mov 0x1f, %g1
<== NOT EXECUTED
40003964: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
40003968: 81 c7 e0 08 ret
<== NOT EXECUTED
4000396c: 81 e8 00 00 restore
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
40003970: 40 00 2e da call 4000f4d8 <__errno>
<== NOT EXECUTED
40003974: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
40003978: 82 10 20 0c mov 0xc, %g1
<== NOT EXECUTED
4000397c: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
40003980: 81 c7 e0 08 ret
<== NOT EXECUTED
40003984: 81 e8 00 00 restore
<== NOT EXECUTED
4000df00 <IMFS_make_generic_node>:
const char *path,
mode_t mode,
const IMFS_node_control *node_control,
void *context
)
{
4000df00: 9d e3 bf 50 save %sp, -176, %sp
int rv = 0;
mode &= ~rtems_filesystem_umask;
4000df04: 7f ff de 1f call 40005780 <rtems_current_user_env_get>
4000df08: 01 00 00 00 nop
4000df0c: da 02 20 08 ld [ %o0 + 8 ], %o5
4000df10: b2 2e 40 0d andn %i1, %o5, %i1
switch (mode & S_IFMT) {
4000df14: 03 00 00 3c sethi %hi(0xf000), %g1
4000df18: 05 00 00 18 sethi %hi(0x6000), %g2
4000df1c: 82 0e 40 01 and %i1, %g1, %g1
4000df20: 80 a0 40 02 cmp %g1, %g2
4000df24: 02 80 00 0c be 4000df54 <IMFS_make_generic_node+0x54>
<== NEVER TAKEN
4000df28: 94 10 20 78 mov 0x78, %o2
4000df2c: 08 80 00 1d bleu 4000dfa0 <IMFS_make_generic_node+0xa0>
<== ALWAYS TAKEN
4000df30: 05 00 00 04 sethi %hi(0x1000), %g2
4000df34: 05 00 00 20 sethi %hi(0x8000), %g2
<== NOT EXECUTED
4000df38: 80 a0 40 02 cmp %g1, %g2
<== NOT EXECUTED
4000df3c: 02 80 00 06 be 4000df54 <IMFS_make_generic_node+0x54>
<== NOT EXECUTED
4000df40: 05 00 00 30 sethi %hi(0xc000), %g2
<== NOT EXECUTED
4000df44: 80 a0 40 02 cmp %g1, %g2
<== NOT EXECUTED
4000df48: 12 80 00 1c bne 4000dfb8 <IMFS_make_generic_node+0xb8>
<== NOT EXECUTED
4000df4c: 01 00 00 00 nop
<== NOT EXECUTED
if ( rv == 0 ) {
rtems_filesystem_eval_path_context_t ctx;
int eval_flags = RTEMS_FS_FOLLOW_LINK
| RTEMS_FS_MAKE
| RTEMS_FS_EXCLUSIVE;
const rtems_filesystem_location_info_t *currentloc =
4000df50: 94 10 20 78 mov 0x78, %o2 ! 78 <_TLS_Alignment+0x77>
<== NOT EXECUTED
4000df54: 92 10 00 18 mov %i0, %o1
4000df58: 7f ff df b8 call 40005e38 <rtems_filesystem_eval_path_start>
4000df5c: 90 07 bf c8 add %fp, -56, %o0
return loc->mt_entry->ops->clonenod_h == IMFS_node_clone;
4000df60: c2 02 20 14 ld [ %o0 + 0x14 ], %g1
4000df64: c2 00 60 0c ld [ %g1 + 0xc ], %g1
rtems_filesystem_eval_path_start( &ctx, path, eval_flags );
if ( IMFS_is_imfs_instance( currentloc ) ) {
4000df68: c4 00 60 24 ld [ %g1 + 0x24 ], %g2
4000df6c: 03 10 00 11 sethi %hi(0x40004400), %g1
4000df70: 82 10 61 cc or %g1, 0x1cc, %g1 ! 400045cc <IMFS_node_clone>
4000df74: 80 a0 80 01 cmp %g2, %g1
4000df78: 02 80 00 16 be 4000dfd0 <IMFS_make_generic_node+0xd0>
<== ALWAYS TAKEN
4000df7c: ba 10 00 08 mov %o0, %i5
IMFS_mtime_ctime_update( parent );
} else {
rv = -1;
}
} else {
rtems_filesystem_eval_path_error( &ctx, ENOTSUP );
4000df80: 92 10 20 86 mov 0x86, %o1
<== NOT EXECUTED
4000df84: 90 07 bf c8 add %fp, -56, %o0
<== NOT EXECUTED
4000df88: 7f ff de f1 call 40005b4c <rtems_filesystem_eval_path_error>
<== NOT EXECUTED
4000df8c: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
rv = -1;
}
rtems_filesystem_eval_path_cleanup( &ctx );
4000df90: 7f ff df b6 call 40005e68 <rtems_filesystem_eval_path_cleanup>
<== NOT EXECUTED
4000df94: 90 07 bf c8 add %fp, -56, %o0
<== NOT EXECUTED
}
return rv;
}
4000df98: 81 c7 e0 08 ret
<== NOT EXECUTED
4000df9c: 81 e8 00 00 restore
<== NOT EXECUTED
switch (mode & S_IFMT) {
4000dfa0: 80 a0 40 02 cmp %g1, %g2
4000dfa4: 02 bf ff eb be 4000df50 <IMFS_make_generic_node+0x50>
<== NEVER TAKEN
4000dfa8: 05 00 00 08 sethi %hi(0x2000), %g2
4000dfac: 80 a0 40 02 cmp %g1, %g2
4000dfb0: 02 bf ff e9 be 4000df54 <IMFS_make_generic_node+0x54>
<== ALWAYS TAKEN
4000dfb4: 94 10 20 78 mov 0x78, %o2
errno = EINVAL;
4000dfb8: 40 00 05 48 call 4000f4d8 <__errno>
<== NOT EXECUTED
4000dfbc: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
4000dfc0: 82 10 20 16 mov 0x16, %g1
<== NOT EXECUTED
4000dfc4: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
4000dfc8: 81 c7 e0 08 ret
<== NOT EXECUTED
4000dfcc: 81 e8 00 00 restore
<== NOT EXECUTED
IMFS_jnode_t *new_node = IMFS_create_node(
4000dfd0: f6 23 a0 5c st %i3, [ %sp + 0x5c ]
4000dfd4: 9a 10 00 19 mov %i1, %o5
4000dfd8: d8 07 bf d4 ld [ %fp + -44 ], %o4
4000dfdc: d6 07 bf d0 ld [ %fp + -48 ], %o3
4000dfe0: 94 10 20 48 mov 0x48, %o2
4000dfe4: 92 10 00 1a mov %i2, %o1
4000dfe8: 7f ff ff a0 call 4000de68 <IMFS_create_node>
4000dfec: b0 10 3f ff mov -1, %i0
if ( new_node != NULL ) {
4000dff0: 80 a2 20 00 cmp %o0, 0
4000dff4: 02 bf ff e7 be 4000df90 <IMFS_make_generic_node+0x90>
<== NEVER TAKEN
4000dff8: 01 00 00 00 nop
IMFS_jnode_t *parent = currentloc->node_access;
4000dffc: fa 07 60 08 ld [ %i5 + 8 ], %i5
_Timecounter_Getbintime( &now );
4000e000: 7f ff ec 1a call 40009068 <_Timecounter_Getbintime>
4000e004: 90 07 bf b8 add %fp, -72, %o0
return now.sec;
4000e008: c4 1f bf b8 ldd [ %fp + -72 ], %g2
jnode->stat_mtime = now;
4000e00c: c4 3f 60 28 std %g2, [ %i5 + 0x28 ]
int rv = 0;
4000e010: b0 10 20 00 clr %i0
jnode->stat_ctime = now;
4000e014: c4 3f 60 30 std %g2, [ %i5 + 0x30 ]
rtems_filesystem_eval_path_cleanup( &ctx );
4000e018: 7f ff df 94 call 40005e68 <rtems_filesystem_eval_path_cleanup>
4000e01c: 90 07 bf c8 add %fp, -56, %o0
}
4000e020: 81 c7 e0 08 ret
4000e024: 81 e8 00 00 restore
400041c8 <IMFS_memfile_write>:
{
400041c8: 9d e3 bf 90 save %sp, -112, %sp
<== NOT EXECUTED
if ( last_byte > memfile->File.size ) {
400041cc: c2 06 20 40 ld [ %i0 + 0x40 ], %g1
<== NOT EXECUTED
last_byte = start + my_length;
400041d0: 96 07 00 1a add %i4, %i2, %o3
<== NOT EXECUTED
if ( last_byte > memfile->File.size ) {
400041d4: 80 a0 40 0b cmp %g1, %o3
<== NOT EXECUTED
400041d8: 0a 80 00 54 bcs 40004328 <IMFS_memfile_write+0x160>
<== NOT EXECUTED
400041dc: a0 10 00 18 mov %i0, %l0
<== NOT EXECUTED
start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK;
400041e0: 23 10 00 51 sethi %hi(0x40014400), %l1
<== NOT EXECUTED
400041e4: e4 04 63 c4 ld [ %l1 + 0x3c4 ], %l2 ! 400147c4 <imfs_memfile_bytes_per_block>
<== NOT EXECUTED
400041e8: bb 3c a0 1f sra %l2, 0x1f, %i5
<== NOT EXECUTED
400041ec: 96 10 00 12 mov %l2, %o3
<== NOT EXECUTED
400041f0: 94 10 00 1d mov %i5, %o2
<== NOT EXECUTED
400041f4: 92 10 00 1a mov %i2, %o1
<== NOT EXECUTED
400041f8: 40 00 2f be call 400100f0 <__moddi3>
<== NOT EXECUTED
400041fc: 90 10 00 19 mov %i1, %o0
<== NOT EXECUTED
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
40004200: 94 10 00 1d mov %i5, %o2
<== NOT EXECUTED
start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK;
40004204: a6 10 00 09 mov %o1, %l3
<== NOT EXECUTED
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
40004208: 96 10 00 12 mov %l2, %o3
<== NOT EXECUTED
4000420c: 92 10 00 1a mov %i2, %o1
<== NOT EXECUTED
40004210: 40 00 2f 2d call 4000fec4 <__divdi3>
<== NOT EXECUTED
40004214: 90 10 00 19 mov %i1, %o0
<== NOT EXECUTED
40004218: ba 10 00 12 mov %l2, %i5
<== NOT EXECUTED
4000421c: b4 10 00 09 mov %o1, %i2
<== NOT EXECUTED
if ( start_offset ) {
40004220: 80 a4 e0 00 cmp %l3, 0
<== NOT EXECUTED
40004224: 12 80 00 1a bne 4000428c <IMFS_memfile_write+0xc4>
<== NOT EXECUTED
40004228: b0 10 20 00 clr %i0
<== NOT EXECUTED
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
4000422c: 80 a7 00 1d cmp %i4, %i5
<== NOT EXECUTED
40004230: 1a 80 00 0e bcc 40004268 <IMFS_memfile_write+0xa0>
<== NOT EXECUTED
40004234: 92 10 00 1a mov %i2, %o1
<== NOT EXECUTED
if ( my_length ) {
40004238: 10 80 00 29 b 400042dc <IMFS_memfile_write+0x114>
<== NOT EXECUTED
4000423c: 80 a7 20 00 cmp %i4, 0
<== NOT EXECUTED
memcpy( &(*block_ptr)[ 0 ], src, to_copy );
40004240: 40 00 2d 33 call 4000f70c <memcpy>
<== NOT EXECUTED
40004244: d0 02 00 00 ld [ %o0 ], %o0
<== NOT EXECUTED
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
40004248: c2 04 63 c4 ld [ %l1 + 0x3c4 ], %g1
<== NOT EXECUTED
my_length -= to_copy;
4000424c: b8 27 00 1d sub %i4, %i5, %i4
<== NOT EXECUTED
src += to_copy;
40004250: b6 06 c0 1d add %i3, %i5, %i3
<== NOT EXECUTED
block++;
40004254: b4 06 a0 01 inc %i2
<== NOT EXECUTED
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
40004258: 80 a0 40 1c cmp %g1, %i4
<== NOT EXECUTED
4000425c: 18 80 00 1f bgu 400042d8 <IMFS_memfile_write+0x110>
<== NOT EXECUTED
40004260: b0 06 00 1d add %i0, %i5, %i0
<== NOT EXECUTED
block_ptr = IMFS_memfile_get_block_pointer( memfile, block, 0 );
40004264: 92 10 00 1a mov %i2, %o1
<== NOT EXECUTED
40004268: 94 10 20 00 clr %o2
<== NOT EXECUTED
4000426c: 7f ff fd d4 call 400039bc <IMFS_memfile_get_block_pointer>
<== NOT EXECUTED
40004270: 90 10 00 10 mov %l0, %o0
<== NOT EXECUTED
memcpy( &(*block_ptr)[ 0 ], src, to_copy );
40004274: 92 10 00 1b mov %i3, %o1
<== NOT EXECUTED
if ( !block_ptr )
40004278: 80 a2 20 00 cmp %o0, 0
<== NOT EXECUTED
4000427c: 12 bf ff f1 bne 40004240 <IMFS_memfile_write+0x78>
<== NOT EXECUTED
40004280: 94 10 00 1d mov %i5, %o2
<== NOT EXECUTED
}
40004284: 81 c7 e0 08 ret
<== NOT EXECUTED
40004288: 81 e8 00 00 restore
<== NOT EXECUTED
block_ptr = IMFS_memfile_get_block_pointer( memfile, block, 0 );
4000428c: 94 10 20 00 clr %o2
<== NOT EXECUTED
40004290: 7f ff fd cb call 400039bc <IMFS_memfile_get_block_pointer>
<== NOT EXECUTED
40004294: 90 10 00 10 mov %l0, %o0
<== NOT EXECUTED
if ( !block_ptr )
40004298: 80 a2 20 00 cmp %o0, 0
<== NOT EXECUTED
4000429c: 02 bf ff fa be 40004284 <IMFS_memfile_write+0xbc>
<== NOT EXECUTED
400042a0: a4 24 80 13 sub %l2, %l3, %l2
<== NOT EXECUTED
400042a4: 80 a7 00 12 cmp %i4, %l2
<== NOT EXECUTED
400042a8: 18 80 00 37 bgu 40004384 <IMFS_memfile_write+0x1bc>
<== NOT EXECUTED
400042ac: b0 10 00 1c mov %i4, %i0
<== NOT EXECUTED
memcpy( &(*block_ptr)[ start_offset ], src, to_copy );
400042b0: d0 02 00 00 ld [ %o0 ], %o0
<== NOT EXECUTED
400042b4: 92 10 00 1b mov %i3, %o1
<== NOT EXECUTED
400042b8: 94 10 00 18 mov %i0, %o2
<== NOT EXECUTED
400042bc: 90 02 00 13 add %o0, %l3, %o0
<== NOT EXECUTED
400042c0: 40 00 2d 13 call 4000f70c <memcpy>
<== NOT EXECUTED
400042c4: b6 06 c0 18 add %i3, %i0, %i3
<== NOT EXECUTED
block++;
400042c8: b4 06 a0 01 inc %i2
<== NOT EXECUTED
400042cc: fa 04 63 c4 ld [ %l1 + 0x3c4 ], %i5
<== NOT EXECUTED
my_length -= to_copy;
400042d0: 10 bf ff d7 b 4000422c <IMFS_memfile_write+0x64>
<== NOT EXECUTED
400042d4: b8 27 00 18 sub %i4, %i0, %i4
<== NOT EXECUTED
if ( my_length ) {
400042d8: 80 a7 20 00 cmp %i4, 0
<== NOT EXECUTED
400042dc: 02 80 00 0c be 4000430c <IMFS_memfile_write+0x144>
<== NOT EXECUTED
400042e0: 94 10 20 00 clr %o2
<== NOT EXECUTED
block_ptr = IMFS_memfile_get_block_pointer( memfile, block, 0 );
400042e4: 92 10 00 1a mov %i2, %o1
<== NOT EXECUTED
400042e8: 7f ff fd b5 call 400039bc <IMFS_memfile_get_block_pointer>
<== NOT EXECUTED
400042ec: 90 10 00 10 mov %l0, %o0
<== NOT EXECUTED
if ( !block_ptr )
400042f0: 80 a2 20 00 cmp %o0, 0
<== NOT EXECUTED
400042f4: 02 bf ff e4 be 40004284 <IMFS_memfile_write+0xbc>
<== NOT EXECUTED
400042f8: 94 10 00 1c mov %i4, %o2
<== NOT EXECUTED
memcpy( &(*block_ptr)[ 0 ], src, my_length );
400042fc: d0 02 00 00 ld [ %o0 ], %o0
<== NOT EXECUTED
40004300: 92 10 00 1b mov %i3, %o1
<== NOT EXECUTED
40004304: 40 00 2d 02 call 4000f70c <memcpy>
<== NOT EXECUTED
40004308: b0 06 00 1c add %i0, %i4, %i0
<== NOT EXECUTED
_Timecounter_Getbintime( &now );
4000430c: 40 00 13 57 call 40009068 <_Timecounter_Getbintime>
<== NOT EXECUTED
40004310: 90 07 bf f0 add %fp, -16, %o0
<== NOT EXECUTED
return now.sec;
40004314: c4 1f bf f0 ldd [ %fp + -16 ], %g2
<== NOT EXECUTED
jnode->stat_mtime = now;
40004318: c4 3c 20 28 std %g2, [ %l0 + 0x28 ]
<== NOT EXECUTED
jnode->stat_ctime = now;
4000431c: c4 3c 20 30 std %g2, [ %l0 + 0x30 ]
<== NOT EXECUTED
}
40004320: 81 c7 e0 08 ret
<== NOT EXECUTED
40004324: 81 e8 00 00 restore
<== NOT EXECUTED
bool zero_fill = start > memfile->File.size;
40004328: 80 a6 60 00 cmp %i1, 0
<== NOT EXECUTED
4000432c: 04 80 00 0b ble 40004358 <IMFS_memfile_write+0x190>
<== NOT EXECUTED
40004330: 92 10 20 01 mov 1, %o1
<== NOT EXECUTED
status = IMFS_memfile_extend( memfile, zero_fill, last_byte );
40004334: 94 10 20 00 clr %o2
<== NOT EXECUTED
40004338: 92 0a 60 01 and %o1, 1, %o1
<== NOT EXECUTED
4000433c: 7f ff fe 49 call 40003c60 <IMFS_memfile_extend>
<== NOT EXECUTED
40004340: 90 10 00 10 mov %l0, %o0
<== NOT EXECUTED
if ( status )
40004344: b0 92 20 00 orcc %o0, 0, %i0
<== NOT EXECUTED
40004348: 02 bf ff a7 be 400041e4 <IMFS_memfile_write+0x1c>
<== NOT EXECUTED
4000434c: 23 10 00 51 sethi %hi(0x40014400), %l1
<== NOT EXECUTED
40004350: 81 c7 e0 08 ret
<== NOT EXECUTED
40004354: 81 e8 00 00 restore
<== NOT EXECUTED
bool zero_fill = start > memfile->File.size;
40004358: 02 80 00 16 be 400043b0 <IMFS_memfile_write+0x1e8>
<== NOT EXECUTED
4000435c: 80 a6 80 01 cmp %i2, %g1
<== NOT EXECUTED
40004360: 92 10 20 00 clr %o1
<== NOT EXECUTED
status = IMFS_memfile_extend( memfile, zero_fill, last_byte );
40004364: 94 10 20 00 clr %o2
<== NOT EXECUTED
40004368: 92 0a 60 01 and %o1, 1, %o1
<== NOT EXECUTED
4000436c: 7f ff fe 3d call 40003c60 <IMFS_memfile_extend>
<== NOT EXECUTED
40004370: 90 10 00 10 mov %l0, %o0
<== NOT EXECUTED
if ( status )
40004374: b0 92 20 00 orcc %o0, 0, %i0
<== NOT EXECUTED
40004378: 02 bf ff 9b be 400041e4 <IMFS_memfile_write+0x1c>
<== NOT EXECUTED
4000437c: 23 10 00 51 sethi %hi(0x40014400), %l1
<== NOT EXECUTED
40004380: 30 bf ff f4 b,a 40004350 <IMFS_memfile_write+0x188>
<== NOT EXECUTED
memcpy( &(*block_ptr)[ start_offset ], src, to_copy );
40004384: d0 02 00 00 ld [ %o0 ], %o0
<== NOT EXECUTED
40004388: b0 10 00 12 mov %l2, %i0
<== NOT EXECUTED
4000438c: 92 10 00 1b mov %i3, %o1
<== NOT EXECUTED
40004390: 94 10 00 18 mov %i0, %o2
<== NOT EXECUTED
40004394: 90 02 00 13 add %o0, %l3, %o0
<== NOT EXECUTED
40004398: 40 00 2c dd call 4000f70c <memcpy>
<== NOT EXECUTED
4000439c: b6 06 c0 18 add %i3, %i0, %i3
<== NOT EXECUTED
block++;
400043a0: b4 06 a0 01 inc %i2
<== NOT EXECUTED
400043a4: fa 04 63 c4 ld [ %l1 + 0x3c4 ], %i5
<== NOT EXECUTED
my_length -= to_copy;
400043a8: 10 bf ff a1 b 4000422c <IMFS_memfile_write+0x64>
<== NOT EXECUTED
400043ac: b8 27 00 18 sub %i4, %i0, %i4
<== NOT EXECUTED
bool zero_fill = start > memfile->File.size;
400043b0: 18 bf ff e2 bgu 40004338 <IMFS_memfile_write+0x170>
<== NOT EXECUTED
400043b4: 94 10 20 00 clr %o2
<== NOT EXECUTED
400043b8: 10 bf ff ec b 40004368 <IMFS_memfile_write+0x1a0>
<== NOT EXECUTED
400043bc: 92 10 20 00 clr %o1
<== NOT EXECUTED
40011060 <IMFS_mknod_control_device>:
40011060: 40 01 10 74 40 00 36 f4 40 00 46 3c 40 00 46 44 @..t@.6.@.F<@.FD
40011070: 00 00 00 48 ...H
40011004 <IMFS_mknod_control_dir_default>:
40011004: 40 01 10 18 40 00 34 40 40 00 34 58 40 00 46 44 @...@.4@@.4X@.FD
40011014: 00 00 00 50 ...P
400110b4 <IMFS_mknod_control_enosys>:
400110b4: 40 01 18 ec 40 00 37 28 40 00 46 3c 40 00 46 44 @...@.7(@.F<@.FD
400110c4: 00 00 00 40 ...@
40012368 <IMFS_mknod_control_fifo>:
40012368: 40 01 23 7c 40 00 36 9c 40 00 44 e0 40 00 44 e8 @.#|@.6.@.D.@.D.
40012378: 00 00 00 48 ...H
40011118 <IMFS_mknod_control_memfile>:
40011118: 40 01 11 2c 40 00 37 f8 40 00 46 3c 40 00 40 64 @..,@.7.@.F<@.@d
40011128: 00 00 00 58 ...X
400044d4 <IMFS_mount>:
#endif
#include <rtems/imfs.h>
int IMFS_mount( rtems_filesystem_mount_table_entry_t *mt_entry )
{
400044d4: 9d e3 bf a0 save %sp, -96, %sp
<== NOT EXECUTED
int rv = 0;
IMFS_jnode_t *node = mt_entry->mt_point_node->location.node_access;
400044d8: c2 06 20 20 ld [ %i0 + 0x20 ], %g1
<== NOT EXECUTED
400044dc: c4 00 60 08 ld [ %g1 + 8 ], %g2
<== NOT EXECUTED
return S_ISDIR( node->st_mode );
400044e0: 07 00 00 3c sethi %hi(0xf000), %g3
<== NOT EXECUTED
400044e4: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1
<== NOT EXECUTED
400044e8: 82 08 40 03 and %g1, %g3, %g1
<== NOT EXECUTED
if ( IMFS_is_directory( node ) ) {
400044ec: 07 00 00 10 sethi %hi(0x4000), %g3
<== NOT EXECUTED
400044f0: 80 a0 40 03 cmp %g1, %g3
<== NOT EXECUTED
400044f4: 12 80 00 0f bne 40004530 <IMFS_mount+0x5c>
<== NOT EXECUTED
400044f8: 01 00 00 00 nop
<== NOT EXECUTED
IMFS_directory_t *dir = (IMFS_directory_t *) node;
if ( dir->mt_fs == NULL ) {
400044fc: c2 00 a0 4c ld [ %g2 + 0x4c ], %g1
<== NOT EXECUTED
40004500: 80 a0 60 00 cmp %g1, 0
<== NOT EXECUTED
40004504: 12 80 00 05 bne 40004518 <IMFS_mount+0x44>
<== NOT EXECUTED
40004508: 01 00 00 00 nop
<== NOT EXECUTED
dir->mt_fs = mt_entry;
4000450c: f0 20 a0 4c st %i0, [ %g2 + 0x4c ]
<== NOT EXECUTED
40004510: 81 c7 e0 08 ret
<== NOT EXECUTED
40004514: 91 e8 20 00 restore %g0, 0, %o0
<== NOT EXECUTED
} else {
errno = EBUSY;
40004518: 40 00 2b f0 call 4000f4d8 <__errno>
<== NOT EXECUTED
4000451c: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
40004520: 82 10 20 10 mov 0x10, %g1
<== NOT EXECUTED
40004524: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
40004528: 81 c7 e0 08 ret
<== NOT EXECUTED
4000452c: 81 e8 00 00 restore
<== NOT EXECUTED
rv = -1;
}
} else {
errno = ENOTDIR;
40004530: 40 00 2b ea call 4000f4d8 <__errno>
<== NOT EXECUTED
40004534: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
40004538: 82 10 20 14 mov 0x14, %g1
<== NOT EXECUTED
4000453c: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
rv = -1;
}
return rv;
}
40004540: 81 c7 e0 08 ret
<== NOT EXECUTED
40004544: 81 e8 00 00 restore
<== NOT EXECUTED
400045e4 <IMFS_node_destroy>:
void IMFS_node_destroy( IMFS_jnode_t *node )
{
400045e4: 9d e3 bf a0 save %sp, -96, %sp
<== NOT EXECUTED
IMFS_assert( node->reference_count == 0 );
(*node->control->node_destroy)( node );
400045e8: c2 06 20 38 ld [ %i0 + 0x38 ], %g1
<== NOT EXECUTED
400045ec: c2 00 60 0c ld [ %g1 + 0xc ], %g1
<== NOT EXECUTED
400045f0: 9f c0 40 00 call %g1
<== NOT EXECUTED
400045f4: 90 10 00 18 mov %i0, %o0
<== NOT EXECUTED
}
400045f8: 81 c7 e0 08 ret
<== NOT EXECUTED
400045fc: 81 e8 00 00 restore
<== NOT EXECUTED
40004644 <IMFS_node_destroy_default>:
void IMFS_node_destroy_default( IMFS_jnode_t *node )
{
40004644: 9d e3 bf a0 save %sp, -96, %sp
if ( ( node->flags & IMFS_NODE_FLAG_NAME_ALLOCATED ) != 0 ) {
40004648: c2 16 20 12 lduh [ %i0 + 0x12 ], %g1
4000464c: 80 88 60 01 btst 1, %g1
40004650: 12 80 00 04 bne 40004660 <IMFS_node_destroy_default+0x1c>
<== NEVER TAKEN
40004654: 01 00 00 00 nop
free( RTEMS_DECONST( char *, node->name ) );
}
free( node );
40004658: 40 00 01 3c call 40004b48 <free>
4000465c: 81 e8 00 00 restore
free( RTEMS_DECONST( char *, node->name ) );
40004660: 40 00 01 3a call 40004b48 <free>
<== NOT EXECUTED
40004664: d0 06 20 0c ld [ %i0 + 0xc ], %o0
<== NOT EXECUTED
free( node );
40004668: 40 00 01 38 call 40004b48 <free>
<== NOT EXECUTED
4000466c: 81 e8 00 00 restore
<== NOT EXECUTED
40003458 <IMFS_node_remove_directory>:
{
return dir->mt_fs != NULL;
}
IMFS_jnode_t *IMFS_node_remove_directory( IMFS_jnode_t *node )
{
40003458: 9d e3 bf a0 save %sp, -96, %sp
IMFS_directory_t *dir = (IMFS_directory_t *) node;
if ( !rtems_chain_is_empty( &dir->Entries ) ) {
4000345c: c4 06 20 40 ld [ %i0 + 0x40 ], %g2
return &the_chain->Tail.Node;
40003460: 82 06 20 44 add %i0, 0x44, %g1
40003464: 80 a0 80 01 cmp %g2, %g1
40003468: 12 80 00 0c bne 40003498 <IMFS_node_remove_directory+0x40>
<== NEVER TAKEN
4000346c: 01 00 00 00 nop
errno = ENOTEMPTY;
dir = NULL;
} else if ( IMFS_is_mount_point( dir ) ) {
40003470: c2 06 20 4c ld [ %i0 + 0x4c ], %g1
40003474: 80 a0 60 00 cmp %g1, 0
40003478: 02 80 00 0c be 400034a8 <IMFS_node_remove_directory+0x50>
<== ALWAYS TAKEN
4000347c: 01 00 00 00 nop
errno = EBUSY;
40003480: 40 00 30 16 call 4000f4d8 <__errno>
<== NOT EXECUTED
40003484: b0 10 20 00 clr %i0 ! 0 <PROM_START>
<== NOT EXECUTED
40003488: 82 10 20 10 mov 0x10, %g1
<== NOT EXECUTED
4000348c: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
dir = NULL;
}
return &dir->Node;
}
40003490: 81 c7 e0 08 ret
<== NOT EXECUTED
40003494: 81 e8 00 00 restore
<== NOT EXECUTED
errno = ENOTEMPTY;
40003498: 40 00 30 10 call 4000f4d8 <__errno>
<== NOT EXECUTED
4000349c: b0 10 20 00 clr %i0
<== NOT EXECUTED
400034a0: 82 10 20 5a mov 0x5a, %g1
<== NOT EXECUTED
400034a4: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
400034a8: 81 c7 e0 08 ret
400034ac: 81 e8 00 00 restore
4000490c <IMFS_readlink>:
for( i=0; ((i<bufsize) && (sym_link->name[i] != '\0')); i++ )
4000490c: 80 a2 a0 00 cmp %o2, 0
<== NOT EXECUTED
40004910: 02 80 00 16 be 40004968 <IMFS_readlink+0x5c>
<== NOT EXECUTED
40004914: c6 02 20 08 ld [ %o0 + 8 ], %g3
<== NOT EXECUTED
40004918: c2 00 e0 40 ld [ %g3 + 0x40 ], %g1
<== NOT EXECUTED
4000491c: c4 48 40 00 ldsb [ %g1 ], %g2
<== NOT EXECUTED
40004920: 90 10 20 00 clr %o0
<== NOT EXECUTED
40004924: 80 a0 a0 00 cmp %g2, 0
<== NOT EXECUTED
40004928: 12 80 00 07 bne 40004944 <IMFS_readlink+0x38>
<== NOT EXECUTED
4000492c: c2 08 40 00 ldub [ %g1 ], %g1
<== NOT EXECUTED
40004930: 30 80 00 0c b,a 40004960 <IMFS_readlink+0x54>
<== NOT EXECUTED
40004934: c4 48 40 08 ldsb [ %g1 + %o0 ], %g2
<== NOT EXECUTED
40004938: 80 a0 a0 00 cmp %g2, 0
<== NOT EXECUTED
4000493c: 02 80 00 07 be 40004958 <IMFS_readlink+0x4c>
<== NOT EXECUTED
40004940: c2 08 40 08 ldub [ %g1 + %o0 ], %g1
<== NOT EXECUTED
buf[i] = sym_link->name[i];
40004944: c2 2a 40 08 stb %g1, [ %o1 + %o0 ]
<== NOT EXECUTED
for( i=0; ((i<bufsize) && (sym_link->name[i] != '\0')); i++ )
40004948: 90 02 20 01 inc %o0
<== NOT EXECUTED
4000494c: 80 a2 80 08 cmp %o2, %o0
<== NOT EXECUTED
40004950: 32 bf ff f9 bne,a 40004934 <IMFS_readlink+0x28>
<== NOT EXECUTED
40004954: c2 00 e0 40 ld [ %g3 + 0x40 ], %g1
<== NOT EXECUTED
}
40004958: 81 c3 e0 08 retl
<== NOT EXECUTED
4000495c: 01 00 00 00 nop
<== NOT EXECUTED
40004960: 81 c3 e0 08 retl
<== NOT EXECUTED
40004964: 01 00 00 00 nop
<== NOT EXECUTED
for( i=0; ((i<bufsize) && (sym_link->name[i] != '\0')); i++ )
40004968: 81 c3 e0 08 retl
<== NOT EXECUTED
4000496c: 90 10 20 00 clr %o0 ! 0 <PROM_START>
<== NOT EXECUTED
40004670 <IMFS_rename>:
const rtems_filesystem_location_info_t *oldloc,
const rtems_filesystem_location_info_t *newparentloc,
const char *name,
size_t namelen
)
{
40004670: 9d e3 bf 90 save %sp, -112, %sp
<== NOT EXECUTED
IMFS_jnode_t *node = oldloc->node_access;
40004674: fa 06 60 08 ld [ %i1 + 8 ], %i5
<== NOT EXECUTED
/*
* FIXME: Due to insufficient checks we can create inaccessible nodes with
* this operation.
*/
if ( node->Parent == NULL ) {
40004678: c2 07 60 08 ld [ %i5 + 8 ], %g1
<== NOT EXECUTED
4000467c: 80 a0 60 00 cmp %g1, 0
<== NOT EXECUTED
40004680: 02 80 00 36 be 40004758 <IMFS_rename+0xe8>
<== NOT EXECUTED
40004684: f4 06 a0 08 ld [ %i2 + 8 ], %i2
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
}
if ( namelen >= IMFS_NAME_MAX ) {
40004688: 80 a7 20 fe cmp %i4, 0xfe
<== NOT EXECUTED
4000468c: 18 80 00 27 bgu 40004728 <IMFS_rename+0xb8>
<== NOT EXECUTED
40004690: 01 00 00 00 nop
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENAMETOOLONG );
}
allocated_name = malloc( namelen );
40004694: 40 00 02 3c call 40004f84 <malloc>
<== NOT EXECUTED
40004698: 90 10 00 1c mov %i4, %o0
<== NOT EXECUTED
if ( allocated_name == NULL ) {
4000469c: b2 92 20 00 orcc %o0, 0, %i1
<== NOT EXECUTED
400046a0: 02 80 00 28 be 40004740 <IMFS_rename+0xd0>
<== NOT EXECUTED
400046a4: 94 10 00 1c mov %i4, %o2
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
}
memcpy( allocated_name, name, namelen );
400046a8: 40 00 2c 19 call 4000f70c <memcpy>
<== NOT EXECUTED
400046ac: 92 10 00 1b mov %i3, %o1
<== NOT EXECUTED
if ( ( node->flags & IMFS_NODE_FLAG_NAME_ALLOCATED ) != 0 ) {
400046b0: c2 17 60 12 lduh [ %i5 + 0x12 ], %g1
<== NOT EXECUTED
400046b4: 80 88 60 01 btst 1, %g1
<== NOT EXECUTED
400046b8: 12 80 00 18 bne 40004718 <IMFS_rename+0xa8>
<== NOT EXECUTED
400046bc: 01 00 00 00 nop
<== NOT EXECUTED
)
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
400046c0: c6 07 40 00 ld [ %i5 ], %g3
<== NOT EXECUTED
previous = the_node->previous;
400046c4: c4 07 60 04 ld [ %i5 + 4 ], %g2
<== NOT EXECUTED
free( RTEMS_DECONST( char *, node->name ) );
}
node->name = allocated_name;
400046c8: f2 27 60 0c st %i1, [ %i5 + 0xc ]
<== NOT EXECUTED
node->namelen = namelen;
node->flags |= IMFS_NODE_FLAG_NAME_ALLOCATED;
400046cc: 82 10 60 01 or %g1, 1, %g1
<== NOT EXECUTED
node->namelen = namelen;
400046d0: f8 37 60 10 sth %i4, [ %i5 + 0x10 ]
<== NOT EXECUTED
return &the_chain->Tail.Node;
400046d4: 88 06 a0 44 add %i2, 0x44, %g4
<== NOT EXECUTED
node->flags |= IMFS_NODE_FLAG_NAME_ALLOCATED;
400046d8: c2 37 60 12 sth %g1, [ %i5 + 0x12 ]
<== NOT EXECUTED
_Timecounter_Getbintime( &now );
400046dc: 90 07 bf f0 add %fp, -16, %o0
<== NOT EXECUTED
next->previous = previous;
400046e0: c4 20 e0 04 st %g2, [ %g3 + 4 ]
<== NOT EXECUTED
IMFS_remove_from_directory( node );
IMFS_add_to_directory( new_parent, node );
IMFS_update_ctime( node );
return 0;
400046e4: b0 10 20 00 clr %i0
<== NOT EXECUTED
previous->next = next;
400046e8: c6 20 80 00 st %g3, [ %g2 ]
<== NOT EXECUTED
Chain_Node *old_last;
_Assert( _Chain_Is_node_off_chain( the_node ) );
tail = _Chain_Tail( the_chain );
old_last = tail->previous;
400046ec: c2 06 a0 48 ld [ %i2 + 0x48 ], %g1
<== NOT EXECUTED
entry_node->Parent = dir_node;
400046f0: f4 27 60 08 st %i2, [ %i5 + 8 ]
<== NOT EXECUTED
the_node->next = tail;
400046f4: c8 27 40 00 st %g4, [ %i5 ]
<== NOT EXECUTED
tail->previous = the_node;
400046f8: fa 26 a0 48 st %i5, [ %i2 + 0x48 ]
<== NOT EXECUTED
old_last->next = the_node;
400046fc: fa 20 40 00 st %i5, [ %g1 ]
<== NOT EXECUTED
_Timecounter_Getbintime( &now );
40004700: 40 00 12 5a call 40009068 <_Timecounter_Getbintime>
<== NOT EXECUTED
40004704: c2 27 60 04 st %g1, [ %i5 + 4 ]
<== NOT EXECUTED
return now.sec;
40004708: c4 1f bf f0 ldd [ %fp + -16 ], %g2
<== NOT EXECUTED
jnode->stat_ctime = _IMFS_get_time();
4000470c: c4 3f 60 30 std %g2, [ %i5 + 0x30 ]
<== NOT EXECUTED
}
40004710: 81 c7 e0 08 ret
<== NOT EXECUTED
40004714: 81 e8 00 00 restore
<== NOT EXECUTED
free( RTEMS_DECONST( char *, node->name ) );
40004718: 40 00 01 0c call 40004b48 <free>
<== NOT EXECUTED
4000471c: d0 07 60 0c ld [ %i5 + 0xc ], %o0
<== NOT EXECUTED
40004720: 10 bf ff e8 b 400046c0 <IMFS_rename+0x50>
<== NOT EXECUTED
40004724: c2 17 60 12 lduh [ %i5 + 0x12 ], %g1
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENAMETOOLONG );
40004728: 40 00 2b 6c call 4000f4d8 <__errno>
<== NOT EXECUTED
4000472c: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
40004730: 82 10 20 5b mov 0x5b, %g1
<== NOT EXECUTED
40004734: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
40004738: 81 c7 e0 08 ret
<== NOT EXECUTED
4000473c: 81 e8 00 00 restore
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
40004740: 40 00 2b 66 call 4000f4d8 <__errno>
<== NOT EXECUTED
40004744: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
40004748: 82 10 20 0c mov 0xc, %g1
<== NOT EXECUTED
4000474c: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
40004750: 81 c7 e0 08 ret
<== NOT EXECUTED
40004754: 81 e8 00 00 restore
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
40004758: 40 00 2b 60 call 4000f4d8 <__errno>
<== NOT EXECUTED
4000475c: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
40004760: 82 10 20 16 mov 0x16, %g1
<== NOT EXECUTED
40004764: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
40004768: 81 c7 e0 08 ret
<== NOT EXECUTED
4000476c: 81 e8 00 00 restore
<== NOT EXECUTED
40004770 <IMFS_rmnod>:
int IMFS_rmnod(
const rtems_filesystem_location_info_t *parentloc,
const rtems_filesystem_location_info_t *loc
)
{
40004770: 9d e3 bf a0 save %sp, -96, %sp
int rv = 0;
IMFS_jnode_t *node = loc->node_access;
40004774: d0 06 60 08 ld [ %i1 + 8 ], %o0
node = (*node->control->node_remove)( node );
40004778: c2 02 20 38 ld [ %o0 + 0x38 ], %g1
4000477c: c2 00 60 08 ld [ %g1 + 8 ], %g1
40004780: 9f c0 40 00 call %g1
40004784: 01 00 00 00 nop
if ( node != NULL ) {
40004788: 80 a2 20 00 cmp %o0, 0
4000478c: 22 80 00 11 be,a 400047d0 <IMFS_rmnod+0x60>
<== NEVER TAKEN
40004790: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
--node->reference_count;
40004794: c4 12 20 18 lduh [ %o0 + 0x18 ], %g2
--node->st_nlink;
40004798: c2 12 20 1a lduh [ %o0 + 0x1a ], %g1
4000479c: 82 00 7f ff add %g1, -1, %g1
--node->reference_count;
400047a0: 84 00 bf ff add %g2, -1, %g2
--node->st_nlink;
400047a4: c2 32 20 1a sth %g1, [ %o0 + 0x1a ]
--node->reference_count;
400047a8: c4 32 20 18 sth %g2, [ %o0 + 0x18 ]
if ( node->Parent != NULL ) {
400047ac: c2 02 20 08 ld [ %o0 + 8 ], %g1
400047b0: 80 a0 60 00 cmp %g1, 0
400047b4: 02 80 00 07 be 400047d0 <IMFS_rmnod+0x60>
<== NEVER TAKEN
400047b8: b0 10 20 00 clr %i0
node->Parent = NULL;
400047bc: c0 22 20 08 clr [ %o0 + 8 ]
next = the_node->next;
400047c0: c4 02 00 00 ld [ %o0 ], %g2
previous = the_node->previous;
400047c4: c2 02 20 04 ld [ %o0 + 4 ], %g1
next->previous = previous;
400047c8: c2 20 a0 04 st %g1, [ %g2 + 4 ]
previous->next = next;
400047cc: c4 20 40 00 st %g2, [ %g1 ]
400047d0: 81 c7 e0 08 ret
400047d4: 81 e8 00 00 restore
} else {
rv = -1;
}
return rv;
}
400047d8: 81 c7 e0 08 ret
<== NOT EXECUTED
400047dc: 81 e8 00 00 restore
<== NOT EXECUTED
400048a8 <IMFS_symlink>:
{
400048a8: 9d e3 bf 98 save %sp, -104, %sp
<== NOT EXECUTED
sizeof( IMFS_sym_link_t ) + strlen( target ) + 1,
400048ac: 40 00 2c ba call 4000fb94 <strlen>
<== NOT EXECUTED
400048b0: 90 10 00 1b mov %i3, %o0
<== NOT EXECUTED
new_node = IMFS_create_node(
400048b4: f6 23 a0 5c st %i3, [ %sp + 0x5c ]
<== NOT EXECUTED
400048b8: 94 02 20 49 add %o0, 0x49, %o2
<== NOT EXECUTED
400048bc: 98 10 00 1a mov %i2, %o4
<== NOT EXECUTED
400048c0: 90 10 00 18 mov %i0, %o0
<== NOT EXECUTED
400048c4: 1b 00 00 28 sethi %hi(0xa000), %o5
<== NOT EXECUTED
400048c8: 96 10 00 19 mov %i1, %o3
<== NOT EXECUTED
400048cc: 9a 13 61 ff or %o5, 0x1ff, %o5
<== NOT EXECUTED
400048d0: 13 10 00 44 sethi %hi(0x40011000), %o1
<== NOT EXECUTED
return 0;
400048d4: b0 10 20 00 clr %i0
<== NOT EXECUTED
new_node = IMFS_create_node(
400048d8: 40 00 25 64 call 4000de68 <IMFS_create_node>
<== NOT EXECUTED
400048dc: 92 12 61 ac or %o1, 0x1ac, %o1
<== NOT EXECUTED
if ( new_node == NULL ) {
400048e0: 80 a2 20 00 cmp %o0, 0
<== NOT EXECUTED
400048e4: 02 80 00 04 be 400048f4 <IMFS_symlink+0x4c>
<== NOT EXECUTED
400048e8: 01 00 00 00 nop
<== NOT EXECUTED
}
400048ec: 81 c7 e0 08 ret
<== NOT EXECUTED
400048f0: 81 e8 00 00 restore
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
400048f4: 40 00 2a f9 call 4000f4d8 <__errno>
<== NOT EXECUTED
400048f8: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
400048fc: 82 10 20 0c mov 0xc, %g1
<== NOT EXECUTED
40004900: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
}
40004904: 81 c7 e0 08 ret
<== NOT EXECUTED
40004908: 81 e8 00 00 restore
<== NOT EXECUTED
40004970 <IMFS_unmount>:
#endif
#include <rtems/imfs.h>
int IMFS_unmount( rtems_filesystem_mount_table_entry_t *mt_entry )
{
40004970: 9d e3 bf a0 save %sp, -96, %sp
<== NOT EXECUTED
int rv = 0;
IMFS_jnode_t *node = mt_entry->mt_point_node->location.node_access;
40004974: c2 06 20 20 ld [ %i0 + 0x20 ], %g1
<== NOT EXECUTED
40004978: c4 00 60 08 ld [ %g1 + 8 ], %g2
<== NOT EXECUTED
return S_ISDIR( node->st_mode );
4000497c: 07 00 00 3c sethi %hi(0xf000), %g3
<== NOT EXECUTED
40004980: c2 00 a0 14 ld [ %g2 + 0x14 ], %g1
<== NOT EXECUTED
40004984: 82 08 40 03 and %g1, %g3, %g1
<== NOT EXECUTED
if ( IMFS_is_directory( node ) ) {
40004988: 07 00 00 10 sethi %hi(0x4000), %g3
<== NOT EXECUTED
4000498c: 80 a0 40 03 cmp %g1, %g3
<== NOT EXECUTED
40004990: 12 80 00 0f bne 400049cc <IMFS_unmount+0x5c>
<== NOT EXECUTED
40004994: 01 00 00 00 nop
<== NOT EXECUTED
IMFS_directory_t *dir = (IMFS_directory_t *) node;
if ( dir->mt_fs == mt_entry ) {
40004998: c2 00 a0 4c ld [ %g2 + 0x4c ], %g1
<== NOT EXECUTED
4000499c: 80 a0 40 18 cmp %g1, %i0
<== NOT EXECUTED
400049a0: 12 80 00 05 bne 400049b4 <IMFS_unmount+0x44>
<== NOT EXECUTED
400049a4: 01 00 00 00 nop
<== NOT EXECUTED
dir->mt_fs = NULL;
400049a8: c0 20 a0 4c clr [ %g2 + 0x4c ]
<== NOT EXECUTED
400049ac: 81 c7 e0 08 ret
<== NOT EXECUTED
400049b0: 91 e8 20 00 restore %g0, 0, %o0
<== NOT EXECUTED
} else {
errno = EINVAL;
400049b4: 40 00 2a c9 call 4000f4d8 <__errno>
<== NOT EXECUTED
400049b8: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
400049bc: 82 10 20 16 mov 0x16, %g1
<== NOT EXECUTED
400049c0: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
400049c4: 81 c7 e0 08 ret
<== NOT EXECUTED
400049c8: 81 e8 00 00 restore
<== NOT EXECUTED
rv = -1;
}
} else {
errno = ENOTDIR;
400049cc: 40 00 2a c3 call 4000f4d8 <__errno>
<== NOT EXECUTED
400049d0: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
400049d4: 82 10 20 14 mov 0x14, %g1
<== NOT EXECUTED
400049d8: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
rv = -1;
}
return rv;
}
400049dc: 81 c7 e0 08 ret
<== NOT EXECUTED
400049e0: 81 e8 00 00 restore
<== NOT EXECUTED
400049e4 <IMFS_utime>:
int IMFS_utime(
const rtems_filesystem_location_info_t *loc,
time_t actime,
time_t modtime
)
{
400049e4: 9d e3 bf a0 save %sp, -96, %sp
<== NOT EXECUTED
IMFS_jnode_t *the_jnode;
the_jnode = (IMFS_jnode_t *) loc->node_access;
400049e8: fa 06 20 08 ld [ %i0 + 8 ], %i5
<== NOT EXECUTED
{
400049ec: 84 10 00 1b mov %i3, %g2
<== NOT EXECUTED
400049f0: b0 10 00 19 mov %i1, %i0
<== NOT EXECUTED
400049f4: 86 10 00 1c mov %i4, %g3
<== NOT EXECUTED
400049f8: b2 10 00 1a mov %i2, %i1
<== NOT EXECUTED
the_jnode->stat_atime = actime;
the_jnode->stat_mtime = modtime;
400049fc: c4 3f 60 28 std %g2, [ %i5 + 0x28 ]
<== NOT EXECUTED
the_jnode->stat_ctime = time( NULL );
40004a00: 90 10 20 00 clr %o0
<== NOT EXECUTED
the_jnode->stat_atime = actime;
40004a04: f0 3f 60 20 std %i0, [ %i5 + 0x20 ]
<== NOT EXECUTED
the_jnode->stat_ctime = time( NULL );
40004a08: 40 00 2c 93 call 4000fc54 <time>
<== NOT EXECUTED
40004a0c: b0 10 20 00 clr %i0
<== NOT EXECUTED
40004a10: d0 3f 60 30 std %o0, [ %i5 + 0x30 ]
<== NOT EXECUTED
return 0;
}
40004a14: 81 c7 e0 08 ret
<== NOT EXECUTED
40004a18: 81 e8 00 00 restore
<== NOT EXECUTED
4000de00 <device_close>:
}
int device_close(
rtems_libio_t *iop
)
{
4000de00: c2 02 20 14 ld [ %o0 + 0x14 ], %g1
<== NOT EXECUTED
const IMFS_device_t *device = IMFS_iop_to_device( iop );
return rtems_deviceio_close(
4000de04: d4 00 60 44 ld [ %g1 + 0x44 ], %o2
<== NOT EXECUTED
4000de08: d2 00 60 40 ld [ %g1 + 0x40 ], %o1
<== NOT EXECUTED
4000de0c: 82 13 c0 00 mov %o7, %g1
<== NOT EXECUTED
4000de10: 40 00 01 a4 call 4000e4a0 <rtems_deviceio_close>
<== NOT EXECUTED
4000de14: 9e 10 40 00 mov %g1, %o7
<== NOT EXECUTED
4000de60 <device_ftruncate>:
rtems_libio_t *iop,
off_t length
)
{
return 0;
}
4000de60: 81 c3 e0 08 retl
<== NOT EXECUTED
4000de64: 90 10 20 00 clr %o0
<== NOT EXECUTED
4000de48 <device_ioctl>:
int device_ioctl(
rtems_libio_t *iop,
ioctl_command_t command,
void *buffer
)
{
4000de48: c2 02 20 14 ld [ %o0 + 0x14 ], %g1
<== NOT EXECUTED
const IMFS_device_t *device = IMFS_iop_to_device( iop );
return rtems_deviceio_control(
4000de4c: d8 00 60 44 ld [ %g1 + 0x44 ], %o4
<== NOT EXECUTED
4000de50: d6 00 60 40 ld [ %g1 + 0x40 ], %o3
<== NOT EXECUTED
4000de54: 82 13 c0 00 mov %o7, %g1
<== NOT EXECUTED
4000de58: 40 00 01 d6 call 4000e5b0 <rtems_deviceio_control>
<== NOT EXECUTED
4000de5c: 9e 10 40 00 mov %g1, %o7
<== NOT EXECUTED
4000ddec <device_open>:
rtems_libio_t *iop,
const char *pathname,
int oflag,
mode_t mode
)
{
4000ddec: c2 02 20 14 ld [ %o0 + 0x14 ], %g1
<== NOT EXECUTED
const IMFS_device_t *device = IMFS_iop_to_device( iop );
return rtems_deviceio_open(
4000ddf0: d8 18 60 40 ldd [ %g1 + 0x40 ], %o4
<== NOT EXECUTED
4000ddf4: 82 13 c0 00 mov %o7, %g1
<== NOT EXECUTED
4000ddf8: 40 00 01 9d call 4000e46c <rtems_deviceio_open>
<== NOT EXECUTED
4000ddfc: 9e 10 40 00 mov %g1, %o7
<== NOT EXECUTED
4000de18 <device_read>:
ssize_t device_read(
rtems_libio_t *iop,
void *buffer,
size_t count
)
{
4000de18: c2 02 20 14 ld [ %o0 + 0x14 ], %g1
<== NOT EXECUTED
const IMFS_device_t *device = IMFS_iop_to_device( iop );
return rtems_deviceio_read(
4000de1c: d8 00 60 44 ld [ %g1 + 0x44 ], %o4
<== NOT EXECUTED
4000de20: d6 00 60 40 ld [ %g1 + 0x40 ], %o3
<== NOT EXECUTED
4000de24: 82 13 c0 00 mov %o7, %g1
<== NOT EXECUTED
4000de28: 40 00 01 aa call 4000e4d0 <rtems_deviceio_read>
<== NOT EXECUTED
4000de2c: 9e 10 40 00 mov %g1, %o7
<== NOT EXECUTED
4000de30 <device_write>:
ssize_t device_write(
rtems_libio_t *iop,
const void *buffer,
size_t count
)
{
4000de30: c2 02 20 14 ld [ %o0 + 0x14 ], %g1
<== NOT EXECUTED
const IMFS_device_t *device = IMFS_iop_to_device( iop );
return rtems_deviceio_write(
4000de34: d8 00 60 44 ld [ %g1 + 0x44 ], %o4
<== NOT EXECUTED
4000de38: d6 00 60 40 ld [ %g1 + 0x40 ], %o3
<== NOT EXECUTED
4000de3c: 82 13 c0 00 mov %o7, %g1
<== NOT EXECUTED
4000de40: 40 00 01 c0 call 4000e540 <rtems_deviceio_write>
<== NOT EXECUTED
4000de44: 9e 10 40 00 mov %g1, %o7
<== NOT EXECUTED
4000d6c8 <fifo_open>:
int fifo_open(
pipe_control_t **pipep,
rtems_libio_t *iop
)
{
4000d6c8: 9d e3 bf 98 save %sp, -104, %sp
_Mutex_Acquire( mutex );
4000d6cc: 37 10 00 52 sethi %hi(0x40014800), %i3
4000d6d0: 7f ff ed 00 call 40008ad0 <_Mutex_Acquire>
4000d6d4: 90 16 e2 a0 or %i3, 0x2a0, %o0 ! 40014aa0 <pipe_mutex>
pipe = *pipep;
4000d6d8: fa 06 00 00 ld [ %i0 ], %i5
if (pipe == NULL) {
4000d6dc: 80 a7 60 00 cmp %i5, 0
4000d6e0: 02 80 00 1a be 4000d748 <fifo_open+0x80>
4000d6e4: b8 10 00 18 mov %i0, %i4
4000d6e8: 7f ff ec fa call 40008ad0 <_Mutex_Acquire>
4000d6ec: 90 07 60 28 add %i5, 0x28, %o0
if (*pipep == NULL) {
4000d6f0: c2 07 00 00 ld [ %i4 ], %g1
4000d6f4: 80 a0 60 00 cmp %g1, 0
4000d6f8: 22 80 00 4c be,a 4000d828 <fifo_open+0x160>
4000d6fc: fa 27 00 00 st %i5, [ %i4 ]
_Mutex_Release( mutex );
4000d700: 7f ff ed 10 call 40008b40 <_Mutex_Release>
4000d704: 90 16 e2 a0 or %i3, 0x2a0, %o0
4000d708: c2 06 60 08 ld [ %i1 + 8 ], %g1
int err;
err = pipe_new(pipep);
if (err)
return err;
pipe = *pipep;
4000d70c: fa 07 00 00 ld [ %i4 ], %i5
switch (LIBIO_ACCMODE(iop)) {
4000d710: 82 08 60 06 and %g1, 6, %g1
4000d714: 80 a0 60 04 cmp %g1, 4
4000d718: 02 80 00 4c be 4000d848 <fifo_open+0x180>
4000d71c: b6 07 60 28 add %i5, 0x28, %i3
4000d720: 80 a0 60 06 cmp %g1, 6
4000d724: 02 80 00 97 be 4000d980 <fifo_open+0x2b8>
4000d728: 80 a0 60 02 cmp %g1, 2
4000d72c: 22 80 00 74 be,a 4000d8fc <fifo_open+0x234>
<== ALWAYS TAKEN
4000d730: c4 07 60 10 ld [ %i5 + 0x10 ], %g2
PIPE_WAKEUPREADERS(pipe);
break;
}
PIPE_UNLOCK(pipe);
return 0;
4000d734: b0 10 20 00 clr %i0
<== NOT EXECUTED
4000d738: 7f ff ed 02 call 40008b40 <_Mutex_Release>
4000d73c: 90 10 00 1b mov %i3, %o0
4000d740: 81 c7 e0 08 ret
4000d744: 81 e8 00 00 restore
pipe = malloc(sizeof(pipe_control_t));
4000d748: 7f ff de 28 call 40004fe8 <malloc>
4000d74c: 90 10 20 44 mov 0x44, %o0
if (pipe == NULL)
4000d750: ba 92 20 00 orcc %o0, 0, %i5
4000d754: 02 80 00 be be 4000da4c <fifo_open+0x384>
<== NEVER TAKEN
4000d758: 94 10 20 3c mov 0x3c, %o2
memset(pipe, 0, sizeof(pipe_control_t));
4000d75c: 92 10 20 00 clr %o1
4000d760: 40 00 0a cf call 4001029c <memset>
4000d764: 90 07 60 08 add %i5, 8, %o0
pipe->Size = PIPE_BUF;
4000d768: 82 10 22 00 mov 0x200, %g1
4000d76c: c2 27 60 04 st %g1, [ %i5 + 4 ]
pipe->Buffer = malloc(pipe->Size);
4000d770: 7f ff de 1e call 40004fe8 <malloc>
4000d774: 90 10 22 00 mov 0x200, %o0
if (! pipe->Buffer)
4000d778: 80 a2 20 00 cmp %o0, 0
4000d77c: 02 80 00 ad be 4000da30 <fifo_open+0x368>
<== NEVER TAKEN
4000d780: d0 27 40 00 st %o0, [ %i5 ]
rtems_build_name ('P', 'I', 'r', c),
4000d784: 35 10 00 52 sethi %hi(0x40014800), %i2
if (rtems_barrier_create(
4000d788: 03 14 12 5c sethi %hi(0x50497000), %g1
rtems_build_name ('P', 'I', 'r', c),
4000d78c: d0 4e a2 9c ldsb [ %i2 + 0x29c ], %o0
if (rtems_barrier_create(
4000d790: 82 10 62 00 or %g1, 0x200, %g1
4000d794: 96 07 60 3c add %i5, 0x3c, %o3
4000d798: 94 10 20 00 clr %o2
4000d79c: 92 10 20 00 clr %o1
4000d7a0: 7f ff e4 80 call 400069a0 <rtems_barrier_create>
4000d7a4: 90 12 00 01 or %o0, %g1, %o0
4000d7a8: 80 a2 20 00 cmp %o0, 0
4000d7ac: 12 80 00 9f bne 4000da28 <fifo_open+0x360>
4000d7b0: d0 4e a2 9c ldsb [ %i2 + 0x29c ], %o0
if (rtems_barrier_create(
4000d7b4: 03 14 12 5d sethi %hi(0x50497400), %g1
4000d7b8: 82 10 63 00 or %g1, 0x300, %g1 ! 50497700 <RAM_END+0x10097700>
4000d7bc: 96 07 60 40 add %i5, 0x40, %o3
4000d7c0: 94 10 20 00 clr %o2
4000d7c4: 92 10 20 00 clr %o1
4000d7c8: 7f ff e4 76 call 400069a0 <rtems_barrier_create>
4000d7cc: 90 12 00 01 or %o0, %g1, %o0
4000d7d0: 80 a2 20 00 cmp %o0, 0
4000d7d4: 12 80 00 93 bne 4000da20 <fifo_open+0x358>
4000d7d8: 03 10 00 4b sethi %hi(0x40012c00), %g1
static __inline void
_Mutex_Initialize_named(struct _Mutex_Control *_mutex, const char *_name)
{
struct _Mutex_Control _init = _MUTEX_NAMED_INITIALIZER(_name);
*_mutex = _init;
4000d7dc: c0 27 60 28 clr [ %i5 + 0x28 ]
4000d7e0: 82 10 60 18 or %g1, 0x18, %g1
4000d7e4: c0 27 60 2c clr [ %i5 + 0x2c ]
4000d7e8: c2 27 60 38 st %g1, [ %i5 + 0x38 ]
4000d7ec: c0 27 60 30 clr [ %i5 + 0x30 ]
4000d7f0: c0 27 60 34 clr [ %i5 + 0x34 ]
if (c ++ == 'z')
4000d7f4: c4 4e a2 9c ldsb [ %i2 + 0x29c ], %g2
4000d7f8: 80 a0 a0 7a cmp %g2, 0x7a
4000d7fc: 02 80 00 3d be 4000d8f0 <fifo_open+0x228>
4000d800: c2 0e a2 9c ldub [ %i2 + 0x29c ], %g1
4000d804: 82 00 60 01 inc %g1
_Mutex_Acquire( mutex );
4000d808: 90 07 60 28 add %i5, 0x28, %o0
4000d80c: 7f ff ec b1 call 40008ad0 <_Mutex_Acquire>
4000d810: c2 2e a2 9c stb %g1, [ %i2 + 0x29c ]
if (*pipep == NULL) {
4000d814: c2 07 00 00 ld [ %i4 ], %g1
4000d818: 80 a0 60 00 cmp %g1, 0
4000d81c: 12 bf ff b9 bne 4000d700 <fifo_open+0x38>
<== NEVER TAKEN
4000d820: 01 00 00 00 nop
*pipep = pipe;
4000d824: fa 27 00 00 st %i5, [ %i4 ]
_Mutex_Release( mutex );
4000d828: 7f ff ec c6 call 40008b40 <_Mutex_Release>
4000d82c: 90 16 e2 a0 or %i3, 0x2a0, %o0
4000d830: c2 06 60 08 ld [ %i1 + 8 ], %g1
pipe = *pipep;
4000d834: fa 07 00 00 ld [ %i4 ], %i5
switch (LIBIO_ACCMODE(iop)) {
4000d838: 82 08 60 06 and %g1, 6, %g1
4000d83c: 80 a0 60 04 cmp %g1, 4
4000d840: 12 bf ff b8 bne 4000d720 <fifo_open+0x58>
4000d844: b6 07 60 28 add %i5, 0x28, %i3
if (pipe->Writers ++ == 0)
4000d848: c4 07 60 14 ld [ %i5 + 0x14 ], %g2
pipe->writerCounter ++;
4000d84c: c2 07 60 24 ld [ %i5 + 0x24 ], %g1
4000d850: 82 00 60 01 inc %g1
if (pipe->Writers ++ == 0)
4000d854: 86 00 a0 01 add %g2, 1, %g3
pipe->writerCounter ++;
4000d858: c2 27 60 24 st %g1, [ %i5 + 0x24 ]
if (pipe->Writers ++ == 0)
4000d85c: 80 a0 a0 00 cmp %g2, 0
4000d860: 02 80 00 61 be 4000d9e4 <fifo_open+0x31c>
<== ALWAYS TAKEN
4000d864: c6 27 60 14 st %g3, [ %i5 + 0x14 ]
if (pipe->Readers == 0 && LIBIO_NODELAY(iop)) {
4000d868: c2 07 60 10 ld [ %i5 + 0x10 ], %g1
<== NOT EXECUTED
4000d86c: 80 a0 60 00 cmp %g1, 0
4000d870: 12 bf ff b2 bne 4000d738 <fifo_open+0x70>
4000d874: b0 10 20 00 clr %i0
4000d878: c2 06 60 08 ld [ %i1 + 8 ], %g1
4000d87c: 80 88 60 01 btst 1, %g1
4000d880: 32 80 00 55 bne,a 4000d9d4 <fifo_open+0x30c>
4000d884: 90 10 00 1b mov %i3, %o0
if (pipe->Readers == 0) {
4000d888: c2 07 60 10 ld [ %i5 + 0x10 ], %g1
4000d88c: 80 a0 60 00 cmp %g1, 0
4000d890: 12 bf ff aa bne 4000d738 <fifo_open+0x70>
<== NEVER TAKEN
4000d894: b0 10 20 00 clr %i0
prevCounter = pipe->readerCounter;
4000d898: 10 80 00 08 b 4000d8b8 <fifo_open+0x1f0>
4000d89c: f4 07 60 20 ld [ %i5 + 0x20 ], %i2
_Mutex_Acquire( mutex );
4000d8a0: 7f ff ec 8c call 40008ad0 <_Mutex_Acquire>
4000d8a4: 01 00 00 00 nop
} while (prevCounter == pipe->readerCounter);
4000d8a8: c2 07 60 20 ld [ %i5 + 0x20 ], %g1
4000d8ac: 80 a0 40 1a cmp %g1, %i2
4000d8b0: 12 bf ff a2 bne 4000d738 <fifo_open+0x70>
<== ALWAYS TAKEN
4000d8b4: b0 10 20 00 clr %i0
_Mutex_Release( mutex );
4000d8b8: 7f ff ec a2 call 40008b40 <_Mutex_Release>
4000d8bc: 90 10 00 1b mov %i3, %o0
if (! PIPE_WRITEWAIT(pipe))
4000d8c0: d0 07 60 40 ld [ %i5 + 0x40 ], %o0
4000d8c4: 40 00 03 75 call 4000e698 <rtems_barrier_wait>
4000d8c8: 92 10 20 00 clr %o1
4000d8cc: 80 a2 20 00 cmp %o0, 0
4000d8d0: 02 bf ff f4 be 4000d8a0 <fifo_open+0x1d8>
<== ALWAYS TAKEN
4000d8d4: 90 10 00 1b mov %i3, %o0
err = -EINTR;
4000d8d8: b0 10 3f fc mov -4, %i0
<== NOT EXECUTED
out_error:
pipe_release(pipep, iop);
4000d8dc: 92 10 00 19 mov %i1, %o1
<== NOT EXECUTED
4000d8e0: 7f ff ff 3a call 4000d5c8 <pipe_release>
4000d8e4: 90 10 00 1c mov %i4, %o0
return err;
4000d8e8: 81 c7 e0 08 ret
4000d8ec: 81 e8 00 00 restore
c = 'a';
4000d8f0: 82 10 20 61 mov 0x61, %g1
4000d8f4: 10 bf ff 7d b 4000d6e8 <fifo_open+0x20>
4000d8f8: c2 2e a2 9c stb %g1, [ %i2 + 0x29c ]
pipe->readerCounter ++;
4000d8fc: c2 07 60 20 ld [ %i5 + 0x20 ], %g1
4000d900: 82 00 60 01 inc %g1
if (pipe->Readers ++ == 0)
4000d904: 86 00 a0 01 add %g2, 1, %g3
pipe->readerCounter ++;
4000d908: c2 27 60 20 st %g1, [ %i5 + 0x20 ]
if (pipe->Readers ++ == 0)
4000d90c: 80 a0 a0 00 cmp %g2, 0
4000d910: 02 80 00 3a be 4000d9f8 <fifo_open+0x330>
<== ALWAYS TAKEN
4000d914: c6 27 60 10 st %g3, [ %i5 + 0x10 ]
if (pipe->Writers == 0) {
4000d918: c2 07 60 14 ld [ %i5 + 0x14 ], %g1
<== NOT EXECUTED
4000d91c: 80 a0 60 00 cmp %g1, 0
4000d920: 12 bf ff 86 bne 4000d738 <fifo_open+0x70>
4000d924: b0 10 20 00 clr %i0
4000d928: c2 06 60 08 ld [ %i1 + 8 ], %g1
if (LIBIO_NODELAY(iop))
4000d92c: 80 88 60 01 btst 1, %g1
4000d930: 12 bf ff 82 bne 4000d738 <fifo_open+0x70>
4000d934: b0 10 20 00 clr %i0
prevCounter = pipe->writerCounter;
4000d938: 10 80 00 08 b 4000d958 <fifo_open+0x290>
4000d93c: f4 07 60 24 ld [ %i5 + 0x24 ], %i2
_Mutex_Acquire( mutex );
4000d940: 7f ff ec 64 call 40008ad0 <_Mutex_Acquire>
4000d944: 01 00 00 00 nop
} while (prevCounter == pipe->writerCounter);
4000d948: c2 07 60 24 ld [ %i5 + 0x24 ], %g1
4000d94c: 80 a0 40 1a cmp %g1, %i2
4000d950: 12 bf ff 7a bne 4000d738 <fifo_open+0x70>
<== ALWAYS TAKEN
4000d954: b0 10 20 00 clr %i0
_Mutex_Release( mutex );
4000d958: 7f ff ec 7a call 40008b40 <_Mutex_Release>
4000d95c: 90 10 00 1b mov %i3, %o0
if (! PIPE_READWAIT(pipe))
4000d960: d0 07 60 3c ld [ %i5 + 0x3c ], %o0
4000d964: 40 00 03 4d call 4000e698 <rtems_barrier_wait>
4000d968: 92 10 20 00 clr %o1
4000d96c: 80 a2 20 00 cmp %o0, 0
4000d970: 02 bf ff f4 be 4000d940 <fifo_open+0x278>
<== ALWAYS TAKEN
4000d974: 90 10 00 1b mov %i3, %o0
out_error:
4000d978: 10 bf ff d9 b 4000d8dc <fifo_open+0x214>
<== NOT EXECUTED
4000d97c: b0 10 3f fc mov -4, %i0
<== NOT EXECUTED
if (pipe->Readers ++ == 0)
4000d980: c4 07 60 10 ld [ %i5 + 0x10 ], %g2
pipe->readerCounter ++;
4000d984: c2 07 60 20 ld [ %i5 + 0x20 ], %g1
4000d988: 82 00 60 01 inc %g1
if (pipe->Readers ++ == 0)
4000d98c: 86 00 a0 01 add %g2, 1, %g3
pipe->readerCounter ++;
4000d990: c2 27 60 20 st %g1, [ %i5 + 0x20 ]
if (pipe->Readers ++ == 0)
4000d994: 80 a0 a0 00 cmp %g2, 0
4000d998: 02 80 00 1d be 4000da0c <fifo_open+0x344>
<== ALWAYS TAKEN
4000d99c: c6 27 60 10 st %g3, [ %i5 + 0x10 ]
if (pipe->Writers ++ == 0)
4000d9a0: c4 07 60 14 ld [ %i5 + 0x14 ], %g2
<== NOT EXECUTED
pipe->writerCounter ++;
4000d9a4: c2 07 60 24 ld [ %i5 + 0x24 ], %g1
4000d9a8: 82 00 60 01 inc %g1
if (pipe->Writers ++ == 0)
4000d9ac: 86 00 a0 01 add %g2, 1, %g3
pipe->writerCounter ++;
4000d9b0: c2 27 60 24 st %g1, [ %i5 + 0x24 ]
if (pipe->Writers ++ == 0)
4000d9b4: 80 a0 a0 00 cmp %g2, 0
4000d9b8: 12 bf ff 5f bne 4000d734 <fifo_open+0x6c>
<== NEVER TAKEN
4000d9bc: c6 27 60 14 st %g3, [ %i5 + 0x14 ]
PIPE_WAKEUPREADERS(pipe);
4000d9c0: d0 07 60 3c ld [ %i5 + 0x3c ], %o0
4000d9c4: 40 00 03 20 call 4000e644 <rtems_barrier_release>
4000d9c8: 92 07 bf fc add %fp, -4, %o1
return 0;
4000d9cc: 10 bf ff 5b b 4000d738 <fifo_open+0x70>
4000d9d0: b0 10 20 00 clr %i0
4000d9d4: 7f ff ec 5b call 40008b40 <_Mutex_Release>
4000d9d8: b0 10 3f fa mov -6, %i0
goto out_error;
4000d9dc: 10 bf ff c1 b 4000d8e0 <fifo_open+0x218>
4000d9e0: 92 10 00 19 mov %i1, %o1
PIPE_WAKEUPREADERS(pipe);
4000d9e4: d0 07 60 3c ld [ %i5 + 0x3c ], %o0
4000d9e8: 40 00 03 17 call 4000e644 <rtems_barrier_release>
4000d9ec: 92 07 bf fc add %fp, -4, %o1
if (pipe->Readers == 0 && LIBIO_NODELAY(iop)) {
4000d9f0: 10 bf ff 9f b 4000d86c <fifo_open+0x1a4>
4000d9f4: c2 07 60 10 ld [ %i5 + 0x10 ], %g1
PIPE_WAKEUPWRITERS(pipe);
4000d9f8: d0 07 60 40 ld [ %i5 + 0x40 ], %o0
4000d9fc: 40 00 03 12 call 4000e644 <rtems_barrier_release>
4000da00: 92 07 bf fc add %fp, -4, %o1
if (pipe->Writers == 0) {
4000da04: 10 bf ff c6 b 4000d91c <fifo_open+0x254>
4000da08: c2 07 60 14 ld [ %i5 + 0x14 ], %g1
PIPE_WAKEUPWRITERS(pipe);
4000da0c: d0 07 60 40 ld [ %i5 + 0x40 ], %o0
4000da10: 40 00 03 0d call 4000e644 <rtems_barrier_release>
4000da14: 92 07 bf fc add %fp, -4, %o1
if (pipe->Writers ++ == 0)
4000da18: 10 bf ff e3 b 4000d9a4 <fifo_open+0x2dc>
4000da1c: c4 07 60 14 ld [ %i5 + 0x14 ], %g2
rtems_barrier_delete(pipe->readBarrier);
4000da20: 7f ff e4 0c call 40006a50 <rtems_barrier_delete>
4000da24: d0 07 60 3c ld [ %i5 + 0x3c ], %o0
free(pipe->Buffer);
4000da28: 7f ff dc 27 call 40004ac4 <free>
4000da2c: d0 07 40 00 ld [ %i5 ], %o0
free(pipe);
4000da30: 7f ff dc 25 call 40004ac4 <free>
4000da34: 90 10 00 1d mov %i5, %o0
return err;
4000da38: b0 10 3f f4 mov -12, %i0
4000da3c: 7f ff ec 41 call 40008b40 <_Mutex_Release>
4000da40: 90 16 e2 a0 or %i3, 0x2a0, %o0
4000da44: 81 c7 e0 08 ret
4000da48: 81 e8 00 00 restore
return err;
4000da4c: b0 10 3f f4 mov -12, %i0
<== NOT EXECUTED
4000da50: 7f ff ec 3c call 40008b40 <_Mutex_Release>
<== NOT EXECUTED
4000da54: 90 16 e2 a0 or %i3, 0x2a0, %o0
<== NOT EXECUTED
}
4000da58: 81 c7 e0 08 ret
<== NOT EXECUTED
4000da5c: 81 e8 00 00 restore
<== NOT EXECUTED
4000da60 <pipe_read>:
pipe_control_t *pipe,
void *buffer,
size_t count,
rtems_libio_t *iop
)
{
4000da60: 9d e3 bf 98 save %sp, -104, %sp
int chunk, chunk1, read = 0, ret = 0;
PIPE_LOCK(pipe);
4000da64: b8 06 20 28 add %i0, 0x28, %i4
_Mutex_Acquire( mutex );
4000da68: 7f ff ec 1a call 40008ad0 <_Mutex_Acquire>
4000da6c: 90 10 00 1c mov %i4, %o0
while (PIPE_EMPTY(pipe)) {
4000da70: c2 06 20 0c ld [ %i0 + 0xc ], %g1
4000da74: 80 a0 60 00 cmp %g1, 0
4000da78: 12 80 00 27 bne 4000db14 <pipe_read+0xb4>
4000da7c: ba 10 00 18 mov %i0, %i5
/* Not an error */
if (pipe->Writers == 0)
4000da80: c2 07 60 14 ld [ %i5 + 0x14 ], %g1
4000da84: 80 a0 60 00 cmp %g1, 0
4000da88: 22 80 00 16 be,a 4000dae0 <pipe_read+0x80>
4000da8c: b0 10 20 00 clr %i0
4000da90: c2 06 e0 08 ld [ %i3 + 8 ], %g1
goto out_locked;
if (LIBIO_NODELAY(iop)) {
4000da94: 80 88 60 01 btst 1, %g1
4000da98: 32 80 00 12 bne,a 4000dae0 <pipe_read+0x80>
4000da9c: b0 10 3f f5 mov -11, %i0
ret = -EAGAIN;
goto out_locked;
}
/* Wait until pipe is no more empty or no writer exists */
pipe->waitingReaders ++;
4000daa0: c2 07 60 18 ld [ %i5 + 0x18 ], %g1
4000daa4: 82 00 60 01 inc %g1
4000daa8: c2 27 60 18 st %g1, [ %i5 + 0x18 ]
_Mutex_Release( mutex );
4000daac: 7f ff ec 25 call 40008b40 <_Mutex_Release>
4000dab0: 90 10 00 1c mov %i4, %o0
PIPE_UNLOCK(pipe);
if (! PIPE_READWAIT(pipe))
4000dab4: d0 07 60 3c ld [ %i5 + 0x3c ], %o0
4000dab8: 40 00 02 f8 call 4000e698 <rtems_barrier_wait>
4000dabc: 92 10 20 00 clr %o1
4000dac0: 80 a2 20 00 cmp %o0, 0
4000dac4: 02 80 00 0b be 4000daf0 <pipe_read+0x90>
<== ALWAYS TAKEN
4000dac8: 90 10 00 1c mov %i4, %o0
_Mutex_Acquire( mutex );
4000dacc: 7f ff ec 01 call 40008ad0 <_Mutex_Acquire>
<== NOT EXECUTED
4000dad0: b0 10 3f fc mov -4, %i0
<== NOT EXECUTED
ret = -EINTR;
PIPE_LOCK(pipe);
pipe->waitingReaders --;
4000dad4: c2 07 60 18 ld [ %i5 + 0x18 ], %g1
<== NOT EXECUTED
4000dad8: 82 00 7f ff add %g1, -1, %g1
<== NOT EXECUTED
4000dadc: c2 27 60 18 st %g1, [ %i5 + 0x18 ]
<== NOT EXECUTED
_Mutex_Release( mutex );
4000dae0: 7f ff ec 18 call 40008b40 <_Mutex_Release>
4000dae4: 90 10 00 1c mov %i4, %o0
PIPE_UNLOCK(pipe);
if (read > 0)
return read;
return ret;
}
4000dae8: 81 c7 e0 08 ret
4000daec: 81 e8 00 00 restore
_Mutex_Acquire( mutex );
4000daf0: 7f ff eb f8 call 40008ad0 <_Mutex_Acquire>
4000daf4: 01 00 00 00 nop
pipe->waitingReaders --;
4000daf8: c2 07 60 18 ld [ %i5 + 0x18 ], %g1
4000dafc: 82 00 7f ff add %g1, -1, %g1
4000db00: c2 27 60 18 st %g1, [ %i5 + 0x18 ]
while (PIPE_EMPTY(pipe)) {
4000db04: c2 07 60 0c ld [ %i5 + 0xc ], %g1
4000db08: 80 a0 60 00 cmp %g1, 0
4000db0c: 22 bf ff de be,a 4000da84 <pipe_read+0x24>
<== NEVER TAKEN
4000db10: c2 07 60 14 ld [ %i5 + 0x14 ], %g1
<== NOT EXECUTED
chunk = MIN(count - read, pipe->Length);
4000db14: 80 a6 80 01 cmp %i2, %g1
4000db18: 38 80 00 33 bgu,a 4000dbe4 <pipe_read+0x184>
<== NEVER TAKEN
4000db1c: b4 10 00 01 mov %g1, %i2
<== NOT EXECUTED
chunk1 = pipe->Size - pipe->Start;
4000db20: c2 07 60 08 ld [ %i5 + 8 ], %g1
4000db24: f6 07 60 04 ld [ %i5 + 4 ], %i3
4000db28: d2 07 40 00 ld [ %i5 ], %o1
4000db2c: b6 26 c0 01 sub %i3, %g1, %i3
if (chunk > chunk1) {
4000db30: 80 a6 80 1b cmp %i2, %i3
4000db34: 14 80 00 23 bg 4000dbc0 <pipe_read+0x160>
4000db38: 92 02 40 01 add %o1, %g1, %o1
memcpy(buffer + read, pipe->Buffer + pipe->Start, chunk);
4000db3c: 94 10 00 1a mov %i2, %o2
4000db40: 40 00 09 9b call 400101ac <memcpy>
4000db44: 90 10 00 19 mov %i1, %o0
pipe->Start += chunk;
4000db48: c2 07 60 08 ld [ %i5 + 8 ], %g1
pipe->Length -= chunk;
4000db4c: c4 07 60 0c ld [ %i5 + 0xc ], %g2
pipe->Start %= pipe->Size;
4000db50: c8 07 60 04 ld [ %i5 + 4 ], %g4
pipe->Start += chunk;
4000db54: 82 06 80 01 add %i2, %g1, %g1
pipe->Length -= chunk;
4000db58: 84 20 80 1a sub %g2, %i2, %g2
pipe->Start %= pipe->Size;
4000db5c: 81 80 20 00 wr %g0, %y
4000db60: 01 00 00 00 nop
4000db64: 01 00 00 00 nop
4000db68: 01 00 00 00 nop
4000db6c: 86 70 40 04 udiv %g1, %g4, %g3
pipe->Length -= chunk;
4000db70: c4 27 60 0c st %g2, [ %i5 + 0xc ]
pipe->Start %= pipe->Size;
4000db74: 86 58 c0 04 smul %g3, %g4, %g3
4000db78: 82 20 40 03 sub %g1, %g3, %g1
if (PIPE_EMPTY(pipe))
4000db7c: 80 a0 a0 00 cmp %g2, 0
4000db80: 12 80 00 03 bne 4000db8c <pipe_read+0x12c>
4000db84: c2 27 60 08 st %g1, [ %i5 + 8 ]
pipe->Start = 0;
4000db88: c0 27 60 08 clr [ %i5 + 8 ]
if (pipe->waitingWriters > 0)
4000db8c: c2 07 60 1c ld [ %i5 + 0x1c ], %g1
4000db90: 80 a0 60 00 cmp %g1, 0
4000db94: 32 80 00 1d bne,a 4000dc08 <pipe_read+0x1a8>
4000db98: d0 07 60 40 ld [ %i5 + 0x40 ], %o0
_Mutex_Release( mutex );
4000db9c: 7f ff eb e9 call 40008b40 <_Mutex_Release>
4000dba0: 90 10 00 1c mov %i4, %o0
4000dba4: b0 96 a0 00 orcc %i2, 0, %i0
4000dba8: 16 bf ff d0 bge 4000dae8 <pipe_read+0x88>
<== ALWAYS TAKEN
4000dbac: 01 00 00 00 nop
4000dbb0: 81 c7 e0 08 ret
<== NOT EXECUTED
4000dbb4: 91 e8 20 00 restore %g0, 0, %o0
<== NOT EXECUTED
ret = -EAGAIN;
4000dbb8: 10 bf ff ca b 4000dae0 <pipe_read+0x80>
<== NOT EXECUTED
4000dbbc: b0 10 3f f5 mov -11, %i0
<== NOT EXECUTED
memcpy(buffer + read, pipe->Buffer + pipe->Start, chunk1);
4000dbc0: 94 10 00 1b mov %i3, %o2
4000dbc4: 40 00 09 7a call 400101ac <memcpy>
4000dbc8: 90 10 00 19 mov %i1, %o0
memcpy(buffer + read + chunk1, pipe->Buffer, chunk - chunk1);
4000dbcc: d2 07 40 00 ld [ %i5 ], %o1
4000dbd0: 94 26 80 1b sub %i2, %i3, %o2
4000dbd4: 40 00 09 76 call 400101ac <memcpy>
4000dbd8: 90 06 40 1b add %i1, %i3, %o0
4000dbdc: 10 bf ff dc b 4000db4c <pipe_read+0xec>
4000dbe0: c2 07 60 08 ld [ %i5 + 8 ], %g1
chunk1 = pipe->Size - pipe->Start;
4000dbe4: f6 07 60 04 ld [ %i5 + 4 ], %i3
<== NOT EXECUTED
4000dbe8: c2 07 60 08 ld [ %i5 + 8 ], %g1
<== NOT EXECUTED
4000dbec: d2 07 40 00 ld [ %i5 ], %o1
<== NOT EXECUTED
4000dbf0: b6 26 c0 01 sub %i3, %g1, %i3
<== NOT EXECUTED
if (chunk > chunk1) {
4000dbf4: 80 a6 80 1b cmp %i2, %i3
<== NOT EXECUTED
4000dbf8: 04 bf ff d1 ble 4000db3c <pipe_read+0xdc>
<== NOT EXECUTED
4000dbfc: 92 02 40 01 add %o1, %g1, %o1
<== NOT EXECUTED
memcpy(buffer + read, pipe->Buffer + pipe->Start, chunk1);
4000dc00: 10 bf ff f1 b 4000dbc4 <pipe_read+0x164>
<== NOT EXECUTED
4000dc04: 94 10 00 1b mov %i3, %o2
<== NOT EXECUTED
PIPE_WAKEUPWRITERS(pipe);
4000dc08: 40 00 02 8f call 4000e644 <rtems_barrier_release>
4000dc0c: 92 07 bf fc add %fp, -4, %o1
4000dc10: 30 bf ff e3 b,a 4000db9c <pipe_read+0x13c>
4000d5c8 <pipe_release>:
void pipe_release(
pipe_control_t **pipep,
rtems_libio_t *iop
)
{
4000d5c8: 9d e3 bf 98 save %sp, -104, %sp
mutex->_Queue._name = name;
}
static __inline void rtems_mutex_lock( rtems_mutex *mutex )
{
_Mutex_Acquire( mutex );
4000d5cc: 39 10 00 52 sethi %hi(0x40014800), %i4
pipe_control_t *pipe = *pipep;
4000d5d0: fa 06 00 00 ld [ %i0 ], %i5
4000d5d4: 7f ff ed 3f call 40008ad0 <_Mutex_Acquire>
4000d5d8: 90 17 22 a0 or %i4, 0x2a0, %o0
uint32_t mode;
pipe_lock();
PIPE_LOCK(pipe);
4000d5dc: b6 07 60 28 add %i5, 0x28, %i3
4000d5e0: 7f ff ed 3c call 40008ad0 <_Mutex_Acquire>
4000d5e4: 90 10 00 1b mov %i3, %o0
4000d5e8: c2 06 60 08 ld [ %i1 + 8 ], %g1
mode = LIBIO_ACCMODE(iop);
if (mode & LIBIO_FLAGS_READ)
4000d5ec: 80 88 60 02 btst 2, %g1
4000d5f0: 02 80 00 05 be 4000d604 <pipe_release+0x3c>
4000d5f4: b4 08 60 06 and %g1, 6, %i2
pipe->Readers --;
4000d5f8: c4 07 60 10 ld [ %i5 + 0x10 ], %g2
4000d5fc: 84 00 bf ff add %g2, -1, %g2
4000d600: c4 27 60 10 st %g2, [ %i5 + 0x10 ]
if (mode & LIBIO_FLAGS_WRITE)
4000d604: 80 88 60 04 btst 4, %g1
4000d608: 02 80 00 05 be 4000d61c <pipe_release+0x54>
4000d60c: 01 00 00 00 nop
pipe->Writers --;
4000d610: c2 07 60 14 ld [ %i5 + 0x14 ], %g1
4000d614: 82 00 7f ff add %g1, -1, %g1
4000d618: c2 27 60 14 st %g1, [ %i5 + 0x14 ]
}
static __inline void rtems_mutex_unlock( rtems_mutex *mutex )
{
_Mutex_Release( mutex );
4000d61c: 7f ff ed 49 call 40008b40 <_Mutex_Release>
4000d620: 90 10 00 1b mov %i3, %o0
PIPE_UNLOCK(pipe);
if (pipe->Readers == 0 && pipe->Writers == 0) {
4000d624: c2 07 60 10 ld [ %i5 + 0x10 ], %g1
4000d628: 80 a0 60 00 cmp %g1, 0
4000d62c: 02 80 00 0e be 4000d664 <pipe_release+0x9c>
4000d630: c2 07 60 14 ld [ %i5 + 0x14 ], %g1
*pipep = NULL;
}
else if (pipe->Readers == 0 && mode != LIBIO_FLAGS_WRITE)
/* Notify waiting Writers that all their partners left */
PIPE_WAKEUPWRITERS(pipe);
else if (pipe->Writers == 0 && mode != LIBIO_FLAGS_READ)
4000d634: 80 a0 60 00 cmp %g1, 0
4000d638: 12 80 00 07 bne 4000d654 <pipe_release+0x8c>
<== NEVER TAKEN
4000d63c: 80 a6 a0 02 cmp %i2, 2
4000d640: 02 80 00 05 be 4000d654 <pipe_release+0x8c>
<== NEVER TAKEN
4000d644: 01 00 00 00 nop
PIPE_WAKEUPREADERS(pipe);
4000d648: d0 07 60 3c ld [ %i5 + 0x3c ], %o0
4000d64c: 40 00 03 fe call 4000e644 <rtems_barrier_release>
4000d650: 92 07 bf fc add %fp, -4, %o1
4000d654: 7f ff ed 3b call 40008b40 <_Mutex_Release>
4000d658: 90 17 22 a0 or %i4, 0x2a0, %o0
rtems_libio_iop_flags_clear( iop, LIBIO_FLAGS_OPEN );
if(iop->pathinfo.ops->unlink_h(&iop->pathinfo))
return;
#endif
}
4000d65c: 81 c7 e0 08 ret
4000d660: 81 e8 00 00 restore
if (pipe->Readers == 0 && pipe->Writers == 0) {
4000d664: 80 a0 60 00 cmp %g1, 0
4000d668: 02 80 00 0b be 4000d694 <pipe_release+0xcc>
4000d66c: 80 a6 a0 04 cmp %i2, 4
else if (pipe->Readers == 0 && mode != LIBIO_FLAGS_WRITE)
4000d670: 02 bf ff f9 be 4000d654 <pipe_release+0x8c>
<== NEVER TAKEN
4000d674: 01 00 00 00 nop
PIPE_WAKEUPWRITERS(pipe);
4000d678: d0 07 60 40 ld [ %i5 + 0x40 ], %o0
4000d67c: 40 00 03 f2 call 4000e644 <rtems_barrier_release>
4000d680: 92 07 bf fc add %fp, -4, %o1
4000d684: 7f ff ed 2f call 40008b40 <_Mutex_Release>
4000d688: 90 17 22 a0 or %i4, 0x2a0, %o0
}
4000d68c: 81 c7 e0 08 ret
4000d690: 81 e8 00 00 restore
rtems_barrier_delete(pipe->readBarrier);
4000d694: 7f ff e4 ef call 40006a50 <rtems_barrier_delete>
4000d698: d0 07 60 3c ld [ %i5 + 0x3c ], %o0
rtems_barrier_delete(pipe->writeBarrier);
4000d69c: 7f ff e4 ed call 40006a50 <rtems_barrier_delete>
4000d6a0: d0 07 60 40 ld [ %i5 + 0x40 ], %o0
free(pipe->Buffer);
4000d6a4: 7f ff dd 08 call 40004ac4 <free>
4000d6a8: d0 07 40 00 ld [ %i5 ], %o0
free(pipe);
4000d6ac: 7f ff dd 06 call 40004ac4 <free>
4000d6b0: 90 10 00 1d mov %i5, %o0
*pipep = NULL;
4000d6b4: c0 26 00 00 clr [ %i0 ]
4000d6b8: 7f ff ed 22 call 40008b40 <_Mutex_Release>
4000d6bc: 90 17 22 a0 or %i4, 0x2a0, %o0
}
4000d6c0: 81 c7 e0 08 ret
4000d6c4: 81 e8 00 00 restore
4000dc14 <pipe_write>:
pipe_control_t *pipe,
const void *buffer,
size_t count,
rtems_libio_t *iop
)
{
4000dc14: 9d e3 bf 98 save %sp, -104, %sp
4000dc18: ba 10 00 18 mov %i0, %i5
int chunk, chunk1, written = 0, ret = 0;
/* Write nothing */
if (count == 0)
4000dc1c: 80 a6 a0 00 cmp %i2, 0
4000dc20: 02 80 00 36 be 4000dcf8 <pipe_write+0xe4>
<== NEVER TAKEN
4000dc24: b0 10 20 00 clr %i0
return 0;
PIPE_LOCK(pipe);
4000dc28: b8 07 60 28 add %i5, 0x28, %i4
_Mutex_Acquire( mutex );
4000dc2c: 7f ff eb a9 call 40008ad0 <_Mutex_Acquire>
4000dc30: 90 10 00 1c mov %i4, %o0
if (pipe->Readers == 0) {
4000dc34: c2 07 60 10 ld [ %i5 + 0x10 ], %g1
4000dc38: 80 a0 60 00 cmp %g1, 0
4000dc3c: 02 80 00 29 be 4000dce0 <pipe_write+0xcc>
4000dc40: 01 00 00 00 nop
ret = -EPIPE;
goto out_locked;
}
/* Write of PIPE_BUF bytes or less shall not be interleaved */
chunk = count <= pipe->Size ? count : 1;
4000dc44: c2 07 60 04 ld [ %i5 + 4 ], %g1
4000dc48: 80 a0 40 1a cmp %g1, %i2
4000dc4c: 1a 80 00 03 bcc 4000dc58 <pipe_write+0x44>
<== ALWAYS TAKEN
4000dc50: a0 10 00 1a mov %i2, %l0
4000dc54: a0 10 20 01 mov 1, %l0
<== NOT EXECUTED
4000dc58: b0 10 20 00 clr %i0
4000dc5c: a2 10 20 00 clr %l1
while (written < count) {
while (PIPE_SPACE(pipe) < chunk) {
4000dc60: c4 07 60 0c ld [ %i5 + 0xc ], %g2
4000dc64: 86 20 40 02 sub %g1, %g2, %g3
4000dc68: 80 a0 c0 10 cmp %g3, %l0
4000dc6c: 1a 80 00 30 bcc 4000dd2c <pipe_write+0x118>
4000dc70: a4 26 80 11 sub %i2, %l1, %l2
4000dc74: c2 06 e0 08 ld [ %i3 + 8 ], %g1
if (LIBIO_NODELAY(iop)) {
4000dc78: 80 88 60 01 btst 1, %g1
4000dc7c: 32 80 00 12 bne,a 4000dcc4 <pipe_write+0xb0>
4000dc80: b6 10 3f f5 mov -11, %i3
ret = -EAGAIN;
goto out_locked;
}
/* Wait until there is chunk bytes space or no reader exists */
pipe->waitingWriters ++;
4000dc84: c2 07 60 1c ld [ %i5 + 0x1c ], %g1
4000dc88: 82 00 60 01 inc %g1
4000dc8c: c2 27 60 1c st %g1, [ %i5 + 0x1c ]
_Mutex_Release( mutex );
4000dc90: 7f ff eb ac call 40008b40 <_Mutex_Release>
4000dc94: 90 10 00 1c mov %i4, %o0
PIPE_UNLOCK(pipe);
if (! PIPE_WRITEWAIT(pipe))
4000dc98: d0 07 60 40 ld [ %i5 + 0x40 ], %o0
4000dc9c: 40 00 02 7f call 4000e698 <rtems_barrier_wait>
4000dca0: 92 10 20 00 clr %o1
4000dca4: 80 a2 20 00 cmp %o0, 0
4000dca8: 02 80 00 16 be 4000dd00 <pipe_write+0xec>
<== ALWAYS TAKEN
4000dcac: 90 10 00 1c mov %i4, %o0
_Mutex_Acquire( mutex );
4000dcb0: 7f ff eb 88 call 40008ad0 <_Mutex_Acquire>
<== NOT EXECUTED
4000dcb4: b6 10 3f fc mov -4, %i3
<== NOT EXECUTED
ret = -EINTR;
PIPE_LOCK(pipe);
pipe->waitingWriters --;
4000dcb8: c2 07 60 1c ld [ %i5 + 0x1c ], %g1
<== NOT EXECUTED
4000dcbc: 82 00 7f ff add %g1, -1, %g1
<== NOT EXECUTED
4000dcc0: c2 27 60 1c st %g1, [ %i5 + 0x1c ]
<== NOT EXECUTED
_Mutex_Release( mutex );
4000dcc4: 7f ff eb 9f call 40008b40 <_Mutex_Release>
4000dcc8: 90 10 00 1c mov %i4, %o0
/* Signal SIGPIPE */
if (ret == -EPIPE)
kill(getpid(), SIGPIPE);
#endif
if (written > 0)
4000dccc: 80 a6 20 00 cmp %i0, 0
4000dcd0: 14 80 00 0a bg 4000dcf8 <pipe_write+0xe4>
4000dcd4: 01 00 00 00 nop
4000dcd8: 81 c7 e0 08 ret
4000dcdc: 91 e8 00 1b restore %g0, %i3, %o0
4000dce0: 7f ff eb 98 call 40008b40 <_Mutex_Release>
4000dce4: 90 10 00 1c mov %i4, %o0
kill(getpid(), SIGPIPE);
4000dce8: 40 00 01 75 call 4000e2bc <getpid>
4000dcec: b0 10 3f e0 mov -32, %i0
4000dcf0: 40 00 02 51 call 4000e634 <kill>
4000dcf4: 92 10 20 0d mov 0xd, %o1
4000dcf8: 81 c7 e0 08 ret
4000dcfc: 81 e8 00 00 restore
_Mutex_Acquire( mutex );
4000dd00: 7f ff eb 74 call 40008ad0 <_Mutex_Acquire>
4000dd04: 01 00 00 00 nop
pipe->waitingWriters --;
4000dd08: c2 07 60 1c ld [ %i5 + 0x1c ], %g1
4000dd0c: 82 00 7f ff add %g1, -1, %g1
4000dd10: c2 27 60 1c st %g1, [ %i5 + 0x1c ]
if (pipe->Readers == 0) {
4000dd14: c2 07 60 10 ld [ %i5 + 0x10 ], %g1
4000dd18: 80 a0 60 00 cmp %g1, 0
4000dd1c: 02 80 00 26 be 4000ddb4 <pipe_write+0x1a0>
<== NEVER TAKEN
4000dd20: 01 00 00 00 nop
4000dd24: 10 bf ff cf b 4000dc60 <pipe_write+0x4c>
4000dd28: c2 07 60 04 ld [ %i5 + 4 ], %g1
chunk = MIN(count - written, PIPE_SPACE(pipe));
4000dd2c: 80 a4 80 03 cmp %l2, %g3
4000dd30: 38 80 00 02 bgu,a 4000dd38 <pipe_write+0x124>
<== NEVER TAKEN
4000dd34: a4 10 00 03 mov %g3, %l2
<== NOT EXECUTED
chunk1 = pipe->Size - PIPE_WSTART(pipe);
4000dd38: c8 07 60 08 ld [ %i5 + 8 ], %g4
4000dd3c: 84 00 80 04 add %g2, %g4, %g2
4000dd40: c6 07 40 00 ld [ %i5 ], %g3
4000dd44: 81 80 20 00 wr %g0, %y
4000dd48: 01 00 00 00 nop
4000dd4c: 01 00 00 00 nop
4000dd50: 01 00 00 00 nop
4000dd54: 90 70 80 01 udiv %g2, %g1, %o0
4000dd58: 90 5a 00 01 smul %o0, %g1, %o0
4000dd5c: 92 06 40 11 add %i1, %l1, %o1
4000dd60: 84 20 80 08 sub %g2, %o0, %g2
4000dd64: a0 20 40 02 sub %g1, %g2, %l0
if (chunk > chunk1) {
4000dd68: 80 a4 80 10 cmp %l2, %l0
4000dd6c: 14 80 00 1a bg 4000ddd4 <pipe_write+0x1c0>
4000dd70: 90 00 c0 02 add %g3, %g2, %o0
memcpy(pipe->Buffer + PIPE_WSTART(pipe), buffer + written, chunk);
4000dd74: 40 00 09 0e call 400101ac <memcpy>
4000dd78: 94 10 00 12 mov %l2, %o2
pipe->Length += chunk;
4000dd7c: c2 07 60 0c ld [ %i5 + 0xc ], %g1
4000dd80: 82 00 40 12 add %g1, %l2, %g1
4000dd84: c2 27 60 0c st %g1, [ %i5 + 0xc ]
if (pipe->waitingReaders > 0)
4000dd88: c2 07 60 18 ld [ %i5 + 0x18 ], %g1
4000dd8c: 80 a0 60 00 cmp %g1, 0
4000dd90: 32 80 00 1a bne,a 4000ddf8 <pipe_write+0x1e4>
4000dd94: d0 07 60 3c ld [ %i5 + 0x3c ], %o0
written += chunk;
4000dd98: b0 06 00 12 add %i0, %l2, %i0
while (written < count) {
4000dd9c: 80 a6 00 1a cmp %i0, %i2
4000dda0: 1a 80 00 1a bcc 4000de08 <pipe_write+0x1f4>
<== ALWAYS TAKEN
4000dda4: a2 10 00 18 mov %i0, %l1
4000dda8: c2 07 60 04 ld [ %i5 + 4 ], %g1
<== NOT EXECUTED
chunk = 1;
4000ddac: 10 bf ff ad b 4000dc60 <pipe_write+0x4c>
<== NOT EXECUTED
4000ddb0: a0 10 20 01 mov 1, %l0
<== NOT EXECUTED
_Mutex_Release( mutex );
4000ddb4: 7f ff eb 63 call 40008b40 <_Mutex_Release>
<== NOT EXECUTED
4000ddb8: 90 10 00 1c mov %i4, %o0
<== NOT EXECUTED
kill(getpid(), SIGPIPE);
4000ddbc: 40 00 01 40 call 4000e2bc <getpid>
<== NOT EXECUTED
4000ddc0: b6 10 3f e0 mov -32, %i3
<== NOT EXECUTED
4000ddc4: 40 00 02 1c call 4000e634 <kill>
<== NOT EXECUTED
4000ddc8: 92 10 20 0d mov 0xd, %o1
<== NOT EXECUTED
if (written > 0)
4000ddcc: 10 bf ff c1 b 4000dcd0 <pipe_write+0xbc>
<== NOT EXECUTED
4000ddd0: 80 a6 20 00 cmp %i0, 0
<== NOT EXECUTED
memcpy(pipe->Buffer + PIPE_WSTART(pipe), buffer + written, chunk1);
4000ddd4: 40 00 08 f6 call 400101ac <memcpy>
4000ddd8: 94 10 00 10 mov %l0, %o2
memcpy(pipe->Buffer, buffer + written + chunk1, chunk - chunk1);
4000dddc: d0 07 40 00 ld [ %i5 ], %o0
4000dde0: 92 04 00 11 add %l0, %l1, %o1
4000dde4: 94 24 80 10 sub %l2, %l0, %o2
4000dde8: 40 00 08 f1 call 400101ac <memcpy>
4000ddec: 92 06 40 09 add %i1, %o1, %o1
4000ddf0: 10 bf ff e4 b 4000dd80 <pipe_write+0x16c>
4000ddf4: c2 07 60 0c ld [ %i5 + 0xc ], %g1
PIPE_WAKEUPREADERS(pipe);
4000ddf8: 40 00 02 13 call 4000e644 <rtems_barrier_release>
4000ddfc: 92 07 bf fc add %fp, -4, %o1
written += chunk;
4000de00: 10 bf ff e7 b 4000dd9c <pipe_write+0x188>
4000de04: b0 06 00 12 add %i0, %l2, %i0
out_locked:
4000de08: 10 bf ff af b 4000dcc4 <pipe_write+0xb0>
4000de0c: b6 10 20 00 clr %i3