RTEMS 4.11Annotated Report
Fri Sep 28 11:37:48 2012
0010d220 <IMFS_chown>:
int IMFS_chown(
const rtems_filesystem_location_info_t *loc,
uid_t owner,
gid_t group
)
{
10d220: 55 push %ebp
10d221: 89 e5 mov %esp,%ebp
10d223: 57 push %edi
10d224: 56 push %esi
10d225: 53 push %ebx
10d226: 83 ec 1c sub $0x1c,%esp
10d229: 8b 7d 0c mov 0xc(%ebp),%edi
10d22c: 8b 75 10 mov 0x10(%ebp),%esi
IMFS_jnode_t *jnode;
#if defined(RTEMS_POSIX_API)
uid_t st_uid;
#endif
jnode = (IMFS_jnode_t *) loc->node_access;
10d22f: 8b 45 08 mov 0x8(%ebp),%eax
10d232: 8b 58 08 mov 0x8(%eax),%ebx
/*
* Verify I am the owner of the node or the super user.
*/
#if defined(RTEMS_POSIX_API)
st_uid = geteuid();
10d235: e8 0e 08 00 00 call 10da48 <geteuid>
if ( ( st_uid != jnode->st_uid ) && ( st_uid != 0 ) )
10d23a: 66 3b 43 3c cmp 0x3c(%ebx),%ax
10d23e: 74 15 je 10d255 <IMFS_chown+0x35>
10d240: 66 85 c0 test %ax,%ax
10d243: 74 10 je 10d255 <IMFS_chown+0x35> <== NEVER TAKEN
rtems_set_errno_and_return_minus_one( EPERM );
10d245: e8 92 3c 00 00 call 110edc <__errno>
10d24a: c7 00 01 00 00 00 movl $0x1,(%eax)
10d250: 83 c8 ff or $0xffffffff,%eax
10d253: eb 20 jmp 10d275 <IMFS_chown+0x55>
#endif
jnode->st_uid = owner;
10d255: 66 89 7b 3c mov %di,0x3c(%ebx)
jnode->st_gid = group;
10d259: 66 89 73 3e mov %si,0x3e(%ebx)
IMFS_update_ctime( jnode );
10d25d: 50 push %eax
10d25e: 50 push %eax
10d25f: 6a 00 push $0x0
10d261: 8d 45 e0 lea -0x20(%ebp),%eax
10d264: 50 push %eax
10d265: e8 42 95 ff ff call 1067ac <gettimeofday>
10d26a: 8b 45 e0 mov -0x20(%ebp),%eax
10d26d: 89 43 48 mov %eax,0x48(%ebx)
return 0;
10d270: 83 c4 10 add $0x10,%esp
10d273: 31 c0 xor %eax,%eax
}
10d275: 8d 65 f4 lea -0xc(%ebp),%esp
10d278: 5b pop %ebx
10d279: 5e pop %esi
10d27a: 5f pop %edi
10d27b: 5d pop %ebp
10d27c: c3 ret
0010888c <IMFS_dump_directory>:
*/
static void IMFS_dump_directory(
IMFS_jnode_t *the_directory,
int level
)
{
10888c: 55 push %ebp
10888d: 89 e5 mov %esp,%ebp
10888f: 57 push %edi
108890: 56 push %esi
108891: 53 push %ebx
108892: 83 ec 1c sub $0x1c,%esp
108895: 89 d6 mov %edx,%esi
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_First(
Chain_Control *the_chain
)
{
return _Chain_Head( the_chain )->next;
108897: 8b 58 50 mov 0x50(%eax),%ebx
RTEMS_INLINE_ROUTINE bool _Chain_Is_tail(
const Chain_Control *the_chain,
const Chain_Node *the_node
)
{
return (the_node == _Chain_Immutable_tail( the_chain ));
10889a: 83 c0 54 add $0x54,%eax
10889d: 89 45 e4 mov %eax,-0x1c(%ebp)
for ( i=0 ; i<=level ; i++ )
fprintf(stdout, "...." );
IMFS_print_jnode( the_jnode );
if ( IMFS_is_directory( the_jnode ) )
IMFS_dump_directory( the_jnode, level + 1 );
1088a0: 8d 42 01 lea 0x1(%edx),%eax
1088a3: 89 45 e0 mov %eax,-0x20(%ebp)
IMFS_assert( level >= 0 );
IMFS_assert( IMFS_is_directory( the_directory ) );
the_chain = &the_directory->info.directory.Entries;
for ( the_node = rtems_chain_first( the_chain );
1088a6: e9 d7 00 00 00 jmp 108982 <IMFS_dump_directory+0xf6>
the_node = the_node->next ) {
the_jnode = (IMFS_jnode_t *) the_node;
for ( i=0 ; i<=level ; i++ )
fprintf(stdout, "...." );
1088ab: 51 push %ecx
1088ac: 51 push %ecx
1088ad: ff 70 08 pushl 0x8(%eax)
1088b0: 68 81 47 12 00 push $0x124781
1088b5: e8 e2 c3 00 00 call 114c9c <fputs>
!rtems_chain_is_tail( the_chain, the_node );
the_node = the_node->next ) {
the_jnode = (IMFS_jnode_t *) the_node;
for ( i=0 ; i<=level ; i++ )
1088ba: 47 inc %edi
1088bb: 83 c4 10 add $0x10,%esp
1088be: eb 02 jmp 1088c2 <IMFS_dump_directory+0x36>
IMFS_assert( level >= 0 );
IMFS_assert( IMFS_is_directory( the_directory ) );
the_chain = &the_directory->info.directory.Entries;
for ( the_node = rtems_chain_first( the_chain );
1088c0: 31 ff xor %edi,%edi
!rtems_chain_is_tail( the_chain, the_node );
the_node = the_node->next ) {
the_jnode = (IMFS_jnode_t *) the_node;
for ( i=0 ; i<=level ; i++ )
1088c2: 39 f7 cmp %esi,%edi
1088c4: a1 00 27 13 00 mov 0x132700,%eax
1088c9: 7e e0 jle 1088ab <IMFS_dump_directory+0x1f>
IMFS_jnode_t *the_jnode
)
{
IMFS_assert( the_jnode );
fprintf(stdout, "%s", the_jnode->name );
1088cb: 52 push %edx
1088cc: 52 push %edx
1088cd: ff 70 08 pushl 0x8(%eax)
1088d0: 8d 43 0c lea 0xc(%ebx),%eax
1088d3: 50 push %eax
1088d4: e8 c3 c3 00 00 call 114c9c <fputs>
rtems_chain_extract_unprotected( &node->Node );
}
static inline IMFS_jnode_types_t IMFS_type( const IMFS_jnode_t *node )
{
return node->control->imfs_type;
1088d9: 8b 43 4c mov 0x4c(%ebx),%eax
1088dc: 8b 10 mov (%eax),%edx
switch( IMFS_type( the_jnode ) ) {
1088de: 83 c4 10 add $0x10,%esp
1088e1: 83 fa 06 cmp $0x6,%edx
1088e4: a1 00 27 13 00 mov 0x132700,%eax
1088e9: 77 62 ja 10894d <IMFS_dump_directory+0xc1><== NEVER TAKEN
1088eb: ff 24 95 5c 48 12 00 jmp *0x12485c(,%edx,4)
case IMFS_DIRECTORY:
fprintf(stdout, "/" );
1088f2: 57 push %edi
1088f3: 57 push %edi
1088f4: ff 70 08 pushl 0x8(%eax)
1088f7: 6a 2f push $0x2f
1088f9: e8 e6 c2 00 00 call 114be4 <fputc>
1088fe: eb 2b jmp 10892b <IMFS_dump_directory+0x9f>
break;
case IMFS_DEVICE:
fprintf(stdout, " (device %" PRId32 ", %" PRId32 ")",
108900: ff 73 54 pushl 0x54(%ebx)
108903: ff 73 50 pushl 0x50(%ebx)
108906: 68 86 47 12 00 push $0x124786
10890b: eb 16 jmp 108923 <IMFS_dump_directory+0x97>
the_jnode->info.device.major, the_jnode->info.device.minor );
break;
case IMFS_LINEAR_FILE:
fprintf(stdout, " (file %" PRId32 " %p)",
10890d: ff 73 58 pushl 0x58(%ebx)
108910: ff 73 50 pushl 0x50(%ebx)
108913: 68 99 47 12 00 push $0x124799
108918: eb 09 jmp 108923 <IMFS_dump_directory+0x97>
the_jnode->info.file.indirect,
the_jnode->info.file.doubly_indirect,
the_jnode->info.file.triply_indirect
);
#else
fprintf(stdout, " (file %" PRId32 ")",
10891a: 51 push %ecx
10891b: ff 73 50 pushl 0x50(%ebx)
10891e: 68 a8 47 12 00 push $0x1247a8
108923: ff 70 08 pushl 0x8(%eax)
108926: e8 51 c2 00 00 call 114b7c <fprintf>
10892b: 83 c4 10 add $0x10,%esp
10892e: eb 2e jmp 10895e <IMFS_dump_directory+0xd2>
case IMFS_HARD_LINK:
fprintf(stdout, " links not printed\n" );
return;
case IMFS_SYM_LINK:
fprintf(stdout, " links not printed\n" );
108930: 52 push %edx
108931: 52 push %edx
108932: ff 70 08 pushl 0x8(%eax)
108935: 68 b4 47 12 00 push $0x1247b4
10893a: eb 0a jmp 108946 <IMFS_dump_directory+0xba>
return;
case IMFS_FIFO:
fprintf(stdout, " FIFO not printed\n" );
10893c: 57 push %edi
10893d: 57 push %edi
10893e: ff 70 08 pushl 0x8(%eax)
108941: 68 c8 47 12 00 push $0x1247c8
108946: e8 51 c3 00 00 call 114c9c <fputs>
10894b: eb 1e jmp 10896b <IMFS_dump_directory+0xdf>
return;
default:
fprintf(stdout, " bad type %d\n", IMFS_type( the_jnode ) );
10894d: 51 push %ecx <== NOT EXECUTED
10894e: 52 push %edx <== NOT EXECUTED
10894f: 68 db 47 12 00 push $0x1247db <== NOT EXECUTED
108954: ff 70 08 pushl 0x8(%eax) <== NOT EXECUTED
108957: e8 20 c2 00 00 call 114b7c <fprintf> <== NOT EXECUTED
10895c: eb 0d jmp 10896b <IMFS_dump_directory+0xdf><== NOT EXECUTED
return;
}
puts("");
10895e: 83 ec 0c sub $0xc,%esp
108961: 68 fd 4f 12 00 push $0x124ffd
108966: e8 79 db 00 00 call 1164e4 <puts>
10896b: 83 c4 10 add $0x10,%esp
}
static inline bool IMFS_is_directory( const IMFS_jnode_t *node )
{
return node->control->imfs_type == IMFS_DIRECTORY;
10896e: 8b 43 4c mov 0x4c(%ebx),%eax
the_jnode = (IMFS_jnode_t *) the_node;
for ( i=0 ; i<=level ; i++ )
fprintf(stdout, "...." );
IMFS_print_jnode( the_jnode );
if ( IMFS_is_directory( the_jnode ) )
108971: 83 38 00 cmpl $0x0,(%eax)
108974: 75 0a jne 108980 <IMFS_dump_directory+0xf4>
IMFS_dump_directory( the_jnode, level + 1 );
108976: 8b 55 e0 mov -0x20(%ebp),%edx
108979: 89 d8 mov %ebx,%eax
10897b: e8 0c ff ff ff call 10888c <IMFS_dump_directory>
the_chain = &the_directory->info.directory.Entries;
for ( the_node = rtems_chain_first( the_chain );
!rtems_chain_is_tail( the_chain, the_node );
the_node = the_node->next ) {
108980: 8b 1b mov (%ebx),%ebx
IMFS_assert( level >= 0 );
IMFS_assert( IMFS_is_directory( the_directory ) );
the_chain = &the_directory->info.directory.Entries;
for ( the_node = rtems_chain_first( the_chain );
108982: 3b 5d e4 cmp -0x1c(%ebp),%ebx
108985: 0f 85 35 ff ff ff jne 1088c0 <IMFS_dump_directory+0x34>
fprintf(stdout, "...." );
IMFS_print_jnode( the_jnode );
if ( IMFS_is_directory( the_jnode ) )
IMFS_dump_directory( the_jnode, level + 1 );
}
}
10898b: 8d 65 f4 lea -0xc(%ebp),%esp
10898e: 5b pop %ebx
10898f: 5e pop %esi
108990: 5f pop %edi
108991: 5d pop %ebp
108992: c3 ret
0010d39c <IMFS_eval_token>:
rtems_filesystem_eval_path_context_t *ctx,
void *arg,
const char *token,
size_t tokenlen
)
{
10d39c: 55 push %ebp
10d39d: 89 e5 mov %esp,%ebp
10d39f: 57 push %edi
10d3a0: 56 push %esi
10d3a1: 53 push %ebx
10d3a2: 83 ec 28 sub $0x28,%esp
10d3a5: 8b 75 08 mov 0x8(%ebp),%esi
10d3a8: 8b 7d 10 mov 0x10(%ebp),%edi
rtems_filesystem_eval_path_generic_status status =
RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_DONE;
rtems_filesystem_location_info_t *currentloc =
rtems_filesystem_eval_path_get_currentloc( ctx );
IMFS_jnode_t *dir = currentloc->node_access;
10d3ab: 8b 56 20 mov 0x20(%esi),%edx
bool access_ok = rtems_filesystem_eval_path_check_access(
10d3ae: 0f b7 42 3e movzwl 0x3e(%edx),%eax
10d3b2: 50 push %eax
10d3b3: 0f b7 42 3c movzwl 0x3c(%edx),%eax
10d3b7: 50 push %eax
10d3b8: ff 72 30 pushl 0x30(%edx)
10d3bb: 6a 01 push $0x1
10d3bd: 56 push %esi
10d3be: 89 55 e0 mov %edx,-0x20(%ebp)
10d3c1: e8 77 0a 00 00 call 10de3d <rtems_filesystem_eval_path_check_access>
dir->st_mode,
dir->st_uid,
dir->st_gid
);
if ( access_ok ) {
10d3c6: 83 c4 20 add $0x20,%esp
10d3c9: 84 c0 test %al,%al
10d3cb: 8b 55 e0 mov -0x20(%ebp),%edx
10d3ce: 75 05 jne 10d3d5 <IMFS_eval_token+0x39>
10d3d0: e9 0b 01 00 00 jmp 10d4e0 <IMFS_eval_token+0x144>
static inline bool rtems_filesystem_is_current_directory(
const char *token,
size_t tokenlen
)
{
return tokenlen == 1 && token [0] == '.';
10d3d5: 31 c0 xor %eax,%eax
10d3d7: 83 7d 14 01 cmpl $0x1,0x14(%ebp)
10d3db: 75 08 jne 10d3e5 <IMFS_eval_token+0x49>
10d3dd: 31 c0 xor %eax,%eax
10d3df: 80 3f 2e cmpb $0x2e,(%edi)
10d3e2: 0f 94 c0 sete %al
IMFS_jnode_t *dir,
const char *token,
size_t tokenlen
)
{
if ( rtems_filesystem_is_current_directory( token, tokenlen ) ) {
10d3e5: 85 c0 test %eax,%eax
10d3e7: 75 6b jne 10d454 <IMFS_eval_token+0xb8>
static inline bool rtems_filesystem_is_parent_directory(
const char *token,
size_t tokenlen
)
{
return tokenlen == 2 && token [0] == '.' && token [1] == '.';
10d3e9: 83 7d 14 02 cmpl $0x2,0x14(%ebp)
10d3ed: 75 0e jne 10d3fd <IMFS_eval_token+0x61>
10d3ef: 80 3f 2e cmpb $0x2e,(%edi)
10d3f2: 75 09 jne 10d3fd <IMFS_eval_token+0x61>
10d3f4: 31 c0 xor %eax,%eax
10d3f6: 80 7f 01 2e cmpb $0x2e,0x1(%edi)
10d3fa: 0f 94 c0 sete %al
return dir;
} else {
if ( rtems_filesystem_is_parent_directory( token, tokenlen ) ) {
10d3fd: 85 c0 test %eax,%eax
10d3ff: 74 05 je 10d406 <IMFS_eval_token+0x6a>
return dir->Parent;
10d401: 8b 5a 08 mov 0x8(%edx),%ebx
10d404: eb 45 jmp 10d44b <IMFS_eval_token+0xaf>
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_First(
Chain_Control *the_chain
)
{
return _Chain_Head( the_chain )->next;
10d406: 8b 5a 50 mov 0x50(%edx),%ebx
} else {
rtems_chain_control *entries = &dir->info.directory.Entries;
rtems_chain_node *current = rtems_chain_first( entries );
rtems_chain_node *tail = rtems_chain_tail( entries );
10d409: 8d 42 54 lea 0x54(%edx),%eax
10d40c: 89 45 e4 mov %eax,-0x1c(%ebp)
10d40f: eb 30 jmp 10d441 <IMFS_eval_token+0xa5>
while ( current != tail ) {
IMFS_jnode_t *entry = (IMFS_jnode_t *) current;
bool match = strncmp( entry->name, token, tokenlen ) == 0
10d411: 50 push %eax
10d412: ff 75 14 pushl 0x14(%ebp)
10d415: 57 push %edi
10d416: 8d 43 0c lea 0xc(%ebx),%eax
10d419: 50 push %eax
10d41a: 89 55 e0 mov %edx,-0x20(%ebp)
10d41d: e8 3a 4d 00 00 call 11215c <strncmp>
10d422: 83 c4 10 add $0x10,%esp
&& entry->name [tokenlen] == '\0';
10d425: 31 c9 xor %ecx,%ecx
10d427: 85 c0 test %eax,%eax
10d429: 8b 55 e0 mov -0x20(%ebp),%edx
10d42c: 75 0d jne 10d43b <IMFS_eval_token+0x9f>
10d42e: 8b 45 14 mov 0x14(%ebp),%eax
10d431: 31 c9 xor %ecx,%ecx
10d433: 80 7c 03 0c 00 cmpb $0x0,0xc(%ebx,%eax,1)
10d438: 0f 94 c1 sete %cl
if ( match ) {
10d43b: 85 c9 test %ecx,%ecx
10d43d: 75 0c jne 10d44b <IMFS_eval_token+0xaf>
};
void IMFS_eval_path( rtems_filesystem_eval_path_context_t *ctx )
{
rtems_filesystem_eval_path_generic( ctx, NULL, &IMFS_eval_config );
}
10d43f: 8b 1b mov (%ebx),%ebx
} else {
rtems_chain_control *entries = &dir->info.directory.Entries;
rtems_chain_node *current = rtems_chain_first( entries );
rtems_chain_node *tail = rtems_chain_tail( entries );
while ( current != tail ) {
10d441: 3b 5d e4 cmp -0x1c(%ebp),%ebx
10d444: 75 cb jne 10d411 <IMFS_eval_token+0x75>
10d446: e9 9c 00 00 00 jmp 10d4e7 <IMFS_eval_token+0x14b>
);
if ( access_ok ) {
IMFS_jnode_t *entry = IMFS_search_in_directory( dir, token, tokenlen );
if ( entry != NULL ) {
10d44b: 85 db test %ebx,%ebx
10d44d: 75 07 jne 10d456 <IMFS_eval_token+0xba>
10d44f: e9 93 00 00 00 jmp 10d4e7 <IMFS_eval_token+0x14b>
IMFS_jnode_t *dir,
const char *token,
size_t tokenlen
)
{
if ( rtems_filesystem_is_current_directory( token, tokenlen ) ) {
10d454: 89 d3 mov %edx,%ebx
if ( access_ok ) {
IMFS_jnode_t *entry = IMFS_search_in_directory( dir, token, tokenlen );
if ( entry != NULL ) {
bool terminal = !rtems_filesystem_eval_path_has_path( ctx );
10d456: 83 7e 04 00 cmpl $0x0,0x4(%esi)
10d45a: 0f 94 c0 sete %al
};
void IMFS_eval_path( rtems_filesystem_eval_path_context_t *ctx )
{
rtems_filesystem_eval_path_generic( ctx, NULL, &IMFS_eval_config );
}
10d45d: 8b 7e 10 mov 0x10(%esi),%edi
rtems_chain_extract_unprotected( &node->Node );
}
static inline IMFS_jnode_types_t IMFS_type( const IMFS_jnode_t *node )
{
return node->control->imfs_type;
10d460: 8b 4b 4c mov 0x4c(%ebx),%ecx
10d463: 8b 09 mov (%ecx),%ecx
static inline void rtems_filesystem_eval_path_clear_token(
rtems_filesystem_eval_path_context_t *ctx
)
{
ctx->tokenlen = 0;
10d465: c7 46 0c 00 00 00 00 movl $0x0,0xc(%esi)
bool follow_sym_link = (eval_flags & RTEMS_FS_FOLLOW_SYM_LINK) != 0;
IMFS_jnode_types_t type = IMFS_type( entry );
rtems_filesystem_eval_path_clear_token( ctx );
if ( type == IMFS_HARD_LINK && (follow_hard_link || !terminal)) {
10d46c: 83 f9 02 cmp $0x2,%ecx
10d46f: 75 0e jne 10d47f <IMFS_eval_token+0xe3>
10d471: 84 c0 test %al,%al
10d473: 74 05 je 10d47a <IMFS_eval_token+0xde>
10d475: 83 e7 08 and $0x8,%edi
10d478: 74 74 je 10d4ee <IMFS_eval_token+0x152>
entry = entry->info.hard_link.link_node;
10d47a: 8b 5b 50 mov 0x50(%ebx),%ebx
10d47d: eb 6f jmp 10d4ee <IMFS_eval_token+0x152>
}
if ( type == IMFS_SYM_LINK && (follow_sym_link || !terminal)) {
10d47f: 83 f9 03 cmp $0x3,%ecx
10d482: 75 23 jne 10d4a7 <IMFS_eval_token+0x10b>
10d484: 84 c0 test %al,%al
10d486: 74 05 je 10d48d <IMFS_eval_token+0xf1>
10d488: 83 e7 10 and $0x10,%edi
10d48b: 74 61 je 10d4ee <IMFS_eval_token+0x152>
const char *target = entry->info.sym_link.name;
10d48d: 8b 53 50 mov 0x50(%ebx),%edx
rtems_filesystem_eval_path_recursive( ctx, target, strlen( target ) );
10d490: 31 c0 xor %eax,%eax
10d492: 83 c9 ff or $0xffffffff,%ecx
10d495: 89 d7 mov %edx,%edi
10d497: f2 ae repnz scas %es:(%edi),%al
10d499: f7 d1 not %ecx
10d49b: 49 dec %ecx
10d49c: 53 push %ebx
10d49d: 51 push %ecx
10d49e: 52 push %edx
10d49f: 56 push %esi
10d4a0: e8 b5 a4 ff ff call 10795a <rtems_filesystem_eval_path_recursive>
10d4a5: eb 36 jmp 10d4dd <IMFS_eval_token+0x141>
IMFS_jnode_types_t type
)
{
rtems_filesystem_global_location_t **fs_root_ptr = NULL;
if ( type == IMFS_DIRECTORY ) {
10d4a7: 85 c9 test %ecx,%ecx
10d4a9: 75 43 jne 10d4ee <IMFS_eval_token+0x152>
if ( node->info.directory.mt_fs != NULL ) {
10d4ab: 8b 4b 5c mov 0x5c(%ebx),%ecx
10d4ae: 85 c9 test %ecx,%ecx
10d4b0: 74 3c je 10d4ee <IMFS_eval_token+0x152>
fs_root_ptr = &node->info.directory.mt_fs->mt_fs_root;
10d4b2: 8d 79 24 lea 0x24(%ecx),%edi
if ( !terminal ) {
status = RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_CONTINUE;
}
} else {
access_ok = rtems_filesystem_eval_path_check_access(
10d4b5: 83 ec 0c sub $0xc,%esp
10d4b8: 0f b7 43 3e movzwl 0x3e(%ebx),%eax
10d4bc: 50 push %eax
10d4bd: 0f b7 43 3c movzwl 0x3c(%ebx),%eax
10d4c1: 50 push %eax
10d4c2: ff 73 30 pushl 0x30(%ebx)
10d4c5: 6a 01 push $0x1
10d4c7: 56 push %esi
10d4c8: e8 70 09 00 00 call 10de3d <rtems_filesystem_eval_path_check_access>
RTEMS_FS_PERMS_EXEC,
entry->st_mode,
entry->st_uid,
entry->st_gid
);
if ( access_ok ) {
10d4cd: 83 c4 20 add $0x20,%esp
10d4d0: 84 c0 test %al,%al
10d4d2: 74 0c je 10d4e0 <IMFS_eval_token+0x144> <== NEVER TAKEN
rtems_filesystem_eval_path_restart( ctx, fs_root_ptr );
10d4d4: 50 push %eax
10d4d5: 50 push %eax
10d4d6: 57 push %edi
10d4d7: 56 push %esi
10d4d8: e8 1a a4 ff ff call 1078f7 <rtems_filesystem_eval_path_restart>
10d4dd: 83 c4 10 add $0x10,%esp
void *arg,
const char *token,
size_t tokenlen
)
{
rtems_filesystem_eval_path_generic_status status =
10d4e0: b8 01 00 00 00 mov $0x1,%eax
10d4e5: eb 1e jmp 10d505 <IMFS_eval_token+0x169>
rtems_filesystem_eval_path_restart( ctx, fs_root_ptr );
}
}
}
} else {
status = RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_NO_ENTRY;
10d4e7: b8 02 00 00 00 mov $0x2,%eax
10d4ec: eb 17 jmp 10d505 <IMFS_eval_token+0x169>
} else {
rtems_filesystem_global_location_t **fs_root_ptr =
IMFS_is_mount_point( entry, type );
if ( fs_root_ptr == NULL ) {
--dir->reference_count;
10d4ee: 66 ff 4a 34 decw 0x34(%edx)
++entry->reference_count;
10d4f2: 66 ff 43 34 incw 0x34(%ebx)
currentloc->node_access = entry;
10d4f6: 89 5e 20 mov %ebx,0x20(%esi)
static inline void IMFS_Set_handlers( rtems_filesystem_location_info_t *loc )
{
IMFS_jnode_t *node = (IMFS_jnode_t *) loc->node_access;
loc->handlers = node->control->handlers;
10d4f9: 8b 53 4c mov 0x4c(%ebx),%edx
10d4fc: 8b 52 04 mov 0x4(%edx),%edx
10d4ff: 89 56 28 mov %edx,0x28(%esi)
void *arg,
const char *token,
size_t tokenlen
)
{
rtems_filesystem_eval_path_generic_status status =
10d502: 0f b6 c0 movzbl %al,%eax
status = RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_NO_ENTRY;
}
}
return status;
}
10d505: 8d 65 f4 lea -0xc(%ebp),%esp
10d508: 5b pop %ebx
10d509: 5e pop %esi
10d50a: 5f pop %edi
10d50b: 5d pop %ebp
10d50c: c3 ret
0010d528 <IMFS_fchmod>:
int IMFS_fchmod(
const rtems_filesystem_location_info_t *loc,
mode_t mode
)
{
10d528: 55 push %ebp
10d529: 89 e5 mov %esp,%ebp
10d52b: 53 push %ebx
10d52c: 83 ec 14 sub $0x14,%esp
IMFS_jnode_t *jnode;
#if defined(RTEMS_POSIX_API)
uid_t st_uid;
#endif
jnode = loc->node_access;
10d52f: 8b 45 08 mov 0x8(%ebp),%eax
10d532: 8b 58 08 mov 0x8(%eax),%ebx
/*
* Verify I am the owner of the node or the super user.
*/
#if defined(RTEMS_POSIX_API)
st_uid = geteuid();
10d535: e8 0e 05 00 00 call 10da48 <geteuid>
if ( ( st_uid != jnode->st_uid ) && ( st_uid != 0 ) )
10d53a: 66 3b 43 3c cmp 0x3c(%ebx),%ax
10d53e: 74 15 je 10d555 <IMFS_fchmod+0x2d>
10d540: 66 85 c0 test %ax,%ax
10d543: 74 10 je 10d555 <IMFS_fchmod+0x2d> <== NEVER TAKEN
rtems_set_errno_and_return_minus_one( EPERM );
10d545: e8 92 39 00 00 call 110edc <__errno>
10d54a: c7 00 01 00 00 00 movl $0x1,(%eax)
10d550: 83 c8 ff or $0xffffffff,%eax
10d553: eb 2e jmp 10d583 <IMFS_fchmod+0x5b>
/*
* Change only the RWX permissions on the jnode to mode.
*/
jnode->st_mode &= ~(S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID | S_ISVTX);
jnode->st_mode |= mode & (S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID | S_ISVTX);
10d555: 8b 45 0c mov 0xc(%ebp),%eax
10d558: 25 ff 0f 00 00 and $0xfff,%eax
/*
* Change only the RWX permissions on the jnode to mode.
*/
jnode->st_mode &= ~(S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID | S_ISVTX);
10d55d: 8b 53 30 mov 0x30(%ebx),%edx
10d560: 81 e2 00 f0 ff ff and $0xfffff000,%edx
jnode->st_mode |= mode & (S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID | S_ISVTX);
10d566: 09 d0 or %edx,%eax
10d568: 89 43 30 mov %eax,0x30(%ebx)
IMFS_update_ctime( jnode );
10d56b: 50 push %eax
10d56c: 50 push %eax
10d56d: 6a 00 push $0x0
10d56f: 8d 45 f0 lea -0x10(%ebp),%eax
10d572: 50 push %eax
10d573: e8 34 92 ff ff call 1067ac <gettimeofday>
10d578: 8b 45 f0 mov -0x10(%ebp),%eax
10d57b: 89 43 48 mov %eax,0x48(%ebx)
return 0;
10d57e: 83 c4 10 add $0x10,%esp
10d581: 31 c0 xor %eax,%eax
}
10d583: 8b 5d fc mov -0x4(%ebp),%ebx
10d586: c9 leave
10d587: c3 ret
00106934 <IMFS_fifo_write>:
static ssize_t IMFS_fifo_write(
rtems_libio_t *iop,
const void *buffer,
size_t count
)
{
106934: 55 push %ebp
106935: 89 e5 mov %esp,%ebp
106937: 56 push %esi
106938: 53 push %ebx
106939: 83 ec 10 sub $0x10,%esp
10693c: 8b 45 08 mov 0x8(%ebp),%eax
IMFS_jnode_t *jnode = iop->pathinfo.node_access;
10693f: 8b 70 18 mov 0x18(%eax),%esi
int err = pipe_write(JNODE2PIPE(jnode), buffer, count, iop);
106942: 50 push %eax
106943: ff 75 10 pushl 0x10(%ebp)
106946: ff 75 0c pushl 0xc(%ebp)
106949: ff 76 50 pushl 0x50(%esi)
10694c: e8 7c 8d 00 00 call 10f6cd <pipe_write>
106951: 89 c3 mov %eax,%ebx
if (err > 0) {
106953: 83 c4 10 add $0x10,%esp
106956: 83 f8 00 cmp $0x0,%eax
106959: 7e 1b jle 106976 <IMFS_fifo_write+0x42>
IMFS_mtime_ctime_update(jnode);
10695b: 50 push %eax
10695c: 50 push %eax
10695d: 6a 00 push $0x0
10695f: 8d 45 f0 lea -0x10(%ebp),%eax
106962: 50 push %eax
106963: e8 84 0d 00 00 call 1076ec <gettimeofday>
106968: 8b 45 f0 mov -0x10(%ebp),%eax
10696b: 89 46 44 mov %eax,0x44(%esi)
10696e: 89 46 48 mov %eax,0x48(%esi)
106971: 83 c4 10 add $0x10,%esp
106974: eb 0e jmp 106984 <IMFS_fifo_write+0x50>
}
IMFS_FIFO_RETURN(err);
106976: 74 0c je 106984 <IMFS_fifo_write+0x50> <== NEVER TAKEN
106978: e8 d7 c0 00 00 call 112a54 <__errno>
10697d: f7 db neg %ebx
10697f: 89 18 mov %ebx,(%eax)
106981: 83 cb ff or $0xffffffff,%ebx
}
106984: 89 d8 mov %ebx,%eax
106986: 8d 65 f8 lea -0x8(%ebp),%esp
106989: 5b pop %ebx
10698a: 5e pop %esi
10698b: 5d pop %ebp
10698c: c3 ret
0010d588 <IMFS_fsunmount>:
((IMFS_jnode_t *)( rtems_chain_head( jnode_get_control( jnode ) )->next))
void IMFS_fsunmount(
rtems_filesystem_mount_table_entry_t *temp_mt_entry
)
{
10d588: 55 push %ebp
10d589: 89 e5 mov %esp,%ebp
10d58b: 57 push %edi
10d58c: 56 push %esi
10d58d: 53 push %ebx
10d58e: 83 ec 2c sub $0x2c,%esp
/*
* Traverse tree that starts at the mt_fs_root and deallocate memory
* associated memory space
*/
loc = temp_mt_entry->mt_fs_root->location;
10d591: 8b 45 08 mov 0x8(%ebp),%eax
10d594: 8b 40 24 mov 0x24(%eax),%eax
10d597: 8d 7d d0 lea -0x30(%ebp),%edi
10d59a: b9 06 00 00 00 mov $0x6,%ecx
10d59f: 89 c6 mov %eax,%esi
10d5a1: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
jnode = (IMFS_jnode_t *)loc.node_access;
10d5a3: 8b 5d d8 mov -0x28(%ebp),%ebx
/*
* Set this to null to indicate that it is being unmounted.
*/
temp_mt_entry->mt_fs_root->location.node_access = NULL;
10d5a6: c7 40 08 00 00 00 00 movl $0x0,0x8(%eax)
next = jnode->Parent;
loc.node_access = (void *)jnode;
IMFS_Set_handlers( &loc );
if ( !IMFS_is_directory( jnode ) || jnode_has_no_children( jnode ) ) {
result = IMFS_rmnod( NULL, &loc );
10d5ad: 8d 7d d0 lea -0x30(%ebp),%edi
10d5b0: eb 02 jmp 10d5b4 <IMFS_fsunmount+0x2c>
if ( IMFS_is_directory( jnode ) ) {
if ( jnode_has_children( jnode ) )
jnode = jnode_get_first_child( jnode );
}
}
} while (jnode != NULL);
10d5b2: 89 c3 mov %eax,%ebx
*/
temp_mt_entry->mt_fs_root->location.node_access = NULL;
do {
next = jnode->Parent;
10d5b4: 8b 73 08 mov 0x8(%ebx),%esi
loc.node_access = (void *)jnode;
10d5b7: 89 5d d8 mov %ebx,-0x28(%ebp)
10d5ba: 8b 43 4c mov 0x4c(%ebx),%eax
10d5bd: 8b 50 04 mov 0x4(%eax),%edx
10d5c0: 89 55 e0 mov %edx,-0x20(%ebp)
IMFS_Set_handlers( &loc );
if ( !IMFS_is_directory( jnode ) || jnode_has_no_children( jnode ) ) {
10d5c3: 83 38 00 cmpl $0x0,(%eax)
10d5c6: 75 08 jne 10d5d0 <IMFS_fsunmount+0x48>
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
10d5c8: 8d 43 54 lea 0x54(%ebx),%eax
10d5cb: 39 43 50 cmp %eax,0x50(%ebx)
10d5ce: 75 30 jne 10d600 <IMFS_fsunmount+0x78>
result = IMFS_rmnod( NULL, &loc );
10d5d0: 50 push %eax
10d5d1: 50 push %eax
10d5d2: 57 push %edi
10d5d3: 6a 00 push $0x0
10d5d5: e8 32 8d ff ff call 10630c <IMFS_rmnod>
if ( result != 0 )
10d5da: 83 c4 10 add $0x10,%esp
10d5dd: 85 c0 test %eax,%eax
10d5df: 74 0d je 10d5ee <IMFS_fsunmount+0x66> <== ALWAYS TAKEN
rtems_fatal_error_occurred( 0xdeadbeef );
10d5e1: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10d5e4: 68 ef be ad de push $0xdeadbeef <== NOT EXECUTED
10d5e9: e8 c6 cd ff ff call 10a3b4 <rtems_fatal_error_occurred><== NOT EXECUTED
IMFS_node_destroy( jnode );
10d5ee: 83 ec 0c sub $0xc,%esp
10d5f1: 53 push %ebx
10d5f2: e8 68 8a ff ff call 10605f <IMFS_node_destroy>
jnode = next;
}
if ( jnode != NULL ) {
10d5f7: 83 c4 10 add $0x10,%esp
10d5fa: 85 f6 test %esi,%esi
10d5fc: 74 18 je 10d616 <IMFS_fsunmount+0x8e>
10d5fe: 89 f3 mov %esi,%ebx
return node->control->imfs_type;
}
static inline bool IMFS_is_directory( const IMFS_jnode_t *node )
{
return node->control->imfs_type == IMFS_DIRECTORY;
10d600: 8b 43 4c mov 0x4c(%ebx),%eax
if ( IMFS_is_directory( jnode ) ) {
10d603: 83 38 00 cmpl $0x0,(%eax)
10d606: 75 ac jne 10d5b4 <IMFS_fsunmount+0x2c> <== NEVER TAKEN
*/
RTEMS_INLINE_ROUTINE const Chain_Node *_Chain_Immutable_first(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_head( the_chain )->next;
10d608: 8b 43 50 mov 0x50(%ebx),%eax
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
10d60b: 8d 53 54 lea 0x54(%ebx),%edx
if ( jnode_has_children( jnode ) )
10d60e: 39 d0 cmp %edx,%eax
10d610: 74 a2 je 10d5b4 <IMFS_fsunmount+0x2c>
jnode = jnode_get_first_child( jnode );
}
}
} while (jnode != NULL);
10d612: 85 c0 test %eax,%eax
10d614: 75 9c jne 10d5b2 <IMFS_fsunmount+0x2a> <== ALWAYS TAKEN
}
10d616: 8d 65 f4 lea -0xc(%ebp),%esp
10d619: 5b pop %ebx
10d61a: 5e pop %esi
10d61b: 5f pop %edi
10d61c: 5d pop %ebp
10d61d: c3 ret
00105f90 <IMFS_initialize_support>:
int IMFS_initialize_support(
rtems_filesystem_mount_table_entry_t *mt_entry,
const rtems_filesystem_operations_table *op_table,
const IMFS_node_control *const node_controls [IMFS_TYPE_COUNT]
)
{
105f90: 55 push %ebp
105f91: 89 e5 mov %esp,%ebp
105f93: 57 push %edi
105f94: 56 push %esi
105f95: 53 push %ebx
105f96: 83 ec 14 sub $0x14,%esp
105f99: 8b 75 10 mov 0x10(%ebp),%esi
static int imfs_instance;
int rv = 0;
IMFS_fs_info_t *fs_info = calloc( 1, sizeof( *fs_info ) );
105f9c: 6a 24 push $0x24
105f9e: 6a 01 push $0x1
105fa0: e8 87 05 00 00 call 10652c <calloc>
105fa5: 89 c3 mov %eax,%ebx
if ( fs_info != NULL ) {
105fa7: 83 c4 10 add $0x10,%esp
105faa: 85 c0 test %eax,%eax
105fac: 74 6f je 10601d <IMFS_initialize_support+0x8d>
IMFS_jnode_t *root_node;
fs_info->instance = imfs_instance++;
105fae: a1 b8 df 12 00 mov 0x12dfb8,%eax
105fb3: 89 03 mov %eax,(%ebx)
105fb5: 40 inc %eax
105fb6: a3 b8 df 12 00 mov %eax,0x12dfb8
memcpy(
fs_info->node_controls,
105fbb: 8d 43 08 lea 0x8(%ebx),%eax
if ( fs_info != NULL ) {
IMFS_jnode_t *root_node;
fs_info->instance = imfs_instance++;
memcpy(
105fbe: b9 07 00 00 00 mov $0x7,%ecx
105fc3: 89 c7 mov %eax,%edi
105fc5: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
fs_info->node_controls,
node_controls,
sizeof( fs_info->node_controls )
);
root_node = IMFS_allocate_node(
105fc7: 50 push %eax
105fc8: 50 push %eax
105fc9: 6a 00 push $0x0
105fcb: 68 ed 41 00 00 push $0x41ed
105fd0: 6a 00 push $0x0
105fd2: 68 19 fa 11 00 push $0x11fa19
105fd7: ff 73 08 pushl 0x8(%ebx)
105fda: 53 push %ebx
105fdb: e8 a0 72 00 00 call 10d280 <IMFS_allocate_node>
"",
0,
(S_IFDIR | 0755),
NULL
);
if ( root_node != NULL ) {
105fe0: 83 c4 20 add $0x20,%esp
105fe3: 85 c0 test %eax,%eax
105fe5: 74 36 je 10601d <IMFS_initialize_support+0x8d><== NEVER TAKEN
mt_entry->fs_info = fs_info;
105fe7: 8b 55 08 mov 0x8(%ebp),%edx
105fea: 89 5a 08 mov %ebx,0x8(%edx)
mt_entry->ops = op_table;
105fed: 8b 55 0c mov 0xc(%ebp),%edx
105ff0: 8b 4d 08 mov 0x8(%ebp),%ecx
105ff3: 89 51 0c mov %edx,0xc(%ecx)
mt_entry->pathconf_limits_and_options = &IMFS_LIMITS_AND_OPTIONS;
105ff6: c7 41 2c 7c fd 11 00 movl $0x11fd7c,0x2c(%ecx)
mt_entry->mt_fs_root->location.node_access = root_node;
105ffd: 8b 51 24 mov 0x24(%ecx),%edx
106000: 89 42 08 mov %eax,0x8(%edx)
static inline void IMFS_Set_handlers( rtems_filesystem_location_info_t *loc )
{
IMFS_jnode_t *node = (IMFS_jnode_t *) loc->node_access;
loc->handlers = node->control->handlers;
106003: 8b 40 4c mov 0x4c(%eax),%eax
106006: 8b 40 04 mov 0x4(%eax),%eax
106009: 89 42 10 mov %eax,0x10(%edx)
errno = ENOMEM;
rv = -1;
}
if ( rv == 0 ) {
IMFS_determine_bytes_per_block(
10600c: a1 6c a2 12 00 mov 0x12a26c,%eax
106011: ba 06 00 00 00 mov $0x6,%edx
int bit_mask;
/*
* check, whether requested bytes per block is valid
*/
for (bit_mask = 16; !is_valid && (bit_mask <= 512); bit_mask <<= 1) {
106016: b9 10 00 00 00 mov $0x10,%ecx
10601b: eb 0d jmp 10602a <IMFS_initialize_support+0x9a>
} else {
errno = ENOMEM;
rv = -1;
}
} else {
errno = ENOMEM;
10601d: e8 ba ae 00 00 call 110edc <__errno>
106022: c7 00 0c 00 00 00 movl $0xc,(%eax)
106028: eb 19 jmp 106043 <IMFS_initialize_support+0xb3>
/*
* check, whether requested bytes per block is valid
*/
for (bit_mask = 16; !is_valid && (bit_mask <= 512); bit_mask <<= 1) {
if (bit_mask == requested_bytes_per_block) {
10602a: 39 c1 cmp %eax,%ecx
10602c: 74 0c je 10603a <IMFS_initialize_support+0xaa>
is_valid = true;
break;
}
if(bit_mask > requested_bytes_per_block)
10602e: 7f 05 jg 106035 <IMFS_initialize_support+0xa5>
int bit_mask;
/*
* check, whether requested bytes per block is valid
*/
for (bit_mask = 16; !is_valid && (bit_mask <= 512); bit_mask <<= 1) {
106030: d1 e1 shl %ecx
106032: 4a dec %edx
106033: 75 f5 jne 10602a <IMFS_initialize_support+0x9a><== ALWAYS TAKEN
if(bit_mask > requested_bytes_per_block)
break;
}
*dest_bytes_per_block = ((is_valid)
? requested_bytes_per_block
: default_bytes_per_block);
106035: b8 80 00 00 00 mov $0x80,%eax
break;
}
if(bit_mask > requested_bytes_per_block)
break;
}
*dest_bytes_per_block = ((is_valid)
10603a: a3 b4 df 12 00 mov %eax,0x12dfb4
const IMFS_node_control *const node_controls [IMFS_TYPE_COUNT]
)
{
static int imfs_instance;
int rv = 0;
10603f: 31 c0 xor %eax,%eax
106041: eb 03 jmp 106046 <IMFS_initialize_support+0xb6>
if(bit_mask > requested_bytes_per_block)
break;
}
*dest_bytes_per_block = ((is_valid)
? requested_bytes_per_block
: default_bytes_per_block);
106043: 83 c8 ff or $0xffffffff,%eax
IMFS_MEMFILE_DEFAULT_BYTES_PER_BLOCK
);
}
return rv;
}
106046: 8d 65 f4 lea -0xc(%ebp),%esp
106049: 5b pop %ebx
10604a: 5e pop %esi
10604b: 5f pop %edi
10604c: 5d pop %ebp
10604d: c3 ret
001075ed <IMFS_make_generic_node>:
const char *path,
mode_t mode,
const IMFS_node_control *node_control,
void *context
)
{
1075ed: 55 push %ebp
1075ee: 89 e5 mov %esp,%ebp
1075f0: 57 push %edi
1075f1: 56 push %esi
1075f2: 53 push %ebx
1075f3: 83 ec 6c sub $0x6c,%esp
int rv = 0;
mode &= ~rtems_filesystem_umask;
1075f6: a1 24 0c 13 00 mov 0x130c24,%eax
1075fb: 8b 58 08 mov 0x8(%eax),%ebx
1075fe: f7 d3 not %ebx
107600: 23 5d 0c and 0xc(%ebp),%ebx
switch (mode & S_IFMT) {
107603: 89 d8 mov %ebx,%eax
107605: 25 00 f0 00 00 and $0xf000,%eax
10760a: 3d 00 20 00 00 cmp $0x2000,%eax
10760f: 0f 84 c8 00 00 00 je 1076dd <IMFS_make_generic_node+0xf0>
107615: 77 07 ja 10761e <IMFS_make_generic_node+0x31><== ALWAYS TAKEN
107617: 3d 00 10 00 00 cmp $0x1000,%eax <== NOT EXECUTED
10761c: eb 10 jmp 10762e <IMFS_make_generic_node+0x41><== NOT EXECUTED
10761e: 3d 00 60 00 00 cmp $0x6000,%eax
107623: 0f 84 b4 00 00 00 je 1076dd <IMFS_make_generic_node+0xf0>
107629: 3d 00 80 00 00 cmp $0x8000,%eax
10762e: 0f 84 a9 00 00 00 je 1076dd <IMFS_make_generic_node+0xf0><== NEVER TAKEN
107634: e9 94 00 00 00 jmp 1076cd <IMFS_make_generic_node+0xe0>
if ( node_control->imfs_type == IMFS_GENERIC ) {
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 =
107639: 50 push %eax
10763a: 6a 78 push $0x78
10763c: ff 75 08 pushl 0x8(%ebp)
rtems_filesystem_eval_path_start( &ctx, path, eval_flags );
10763f: 8d 75 b0 lea -0x50(%ebp),%esi
if ( node_control->imfs_type == IMFS_GENERIC ) {
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 =
107642: 56 push %esi
107643: e8 81 1b 00 00 call 1091c9 <rtems_filesystem_eval_path_start>
107648: 89 c7 mov %eax,%edi
rtems_filesystem_eval_path_start( &ctx, path, eval_flags );
if ( IMFS_is_imfs_instance( currentloc ) ) {
10764a: 89 04 24 mov %eax,(%esp)
10764d: e8 56 ff ff ff call 1075a8 <IMFS_is_imfs_instance>
107652: 83 c4 10 add $0x10,%esp
107655: 84 c0 test %al,%al
107657: 74 50 je 1076a9 <IMFS_make_generic_node+0xbc>
IMFS_types_union info;
IMFS_jnode_t *new_node;
info.generic.context = context;
107659: 8b 45 14 mov 0x14(%ebp),%eax
10765c: 89 45 9c mov %eax,-0x64(%ebp)
new_node = IMFS_create_node_with_control(
10765f: 50 push %eax
107660: 50 push %eax
currentloc,
node_control,
rtems_filesystem_eval_path_get_token( &ctx ),
rtems_filesystem_eval_path_get_tokenlen( &ctx ),
mode,
&info
107661: 8d 45 9c lea -0x64(%ebp),%eax
if ( IMFS_is_imfs_instance( currentloc ) ) {
IMFS_types_union info;
IMFS_jnode_t *new_node;
info.generic.context = context;
new_node = IMFS_create_node_with_control(
107664: 50 push %eax
107665: 53 push %ebx
107666: ff 75 bc pushl -0x44(%ebp)
107669: ff 75 b8 pushl -0x48(%ebp)
10766c: ff 75 10 pushl 0x10(%ebp)
10766f: 57 push %edi
107670: e8 d7 97 00 00 call 110e4c <IMFS_create_node_with_control>
rtems_filesystem_eval_path_get_tokenlen( &ctx ),
mode,
&info
);
if ( new_node != NULL ) {
107675: 83 c4 20 add $0x20,%esp
107678: 85 c0 test %eax,%eax
10767a: 74 3d je 1076b9 <IMFS_make_generic_node+0xcc>
IMFS_jnode_t *parent = currentloc->node_access;
10767c: 8b 5f 08 mov 0x8(%edi),%ebx
IMFS_update_ctime( parent );
10767f: 51 push %ecx
107680: 51 push %ecx
107681: 6a 00 push $0x0
107683: 8d 75 94 lea -0x6c(%ebp),%esi
107686: 56 push %esi
107687: e8 2c 08 00 00 call 107eb8 <gettimeofday>
10768c: 8b 45 94 mov -0x6c(%ebp),%eax
10768f: 89 43 48 mov %eax,0x48(%ebx)
IMFS_update_mtime( parent );
107692: 5f pop %edi
107693: 58 pop %eax
107694: 6a 00 push $0x0
107696: 56 push %esi
107697: e8 1c 08 00 00 call 107eb8 <gettimeofday>
10769c: 8b 45 94 mov -0x6c(%ebp),%eax
10769f: 89 43 44 mov %eax,0x44(%ebx)
1076a2: 83 c4 10 add $0x10,%esp
1076a5: 31 db xor %ebx,%ebx
1076a7: eb 13 jmp 1076bc <IMFS_make_generic_node+0xcf>
} else {
rv = -1;
}
} else {
rtems_filesystem_eval_path_error( &ctx, ENOTSUP );
1076a9: 52 push %edx
1076aa: 52 push %edx
1076ab: 68 86 00 00 00 push $0x86
1076b0: 56 push %esi
1076b1: e8 ec 18 00 00 call 108fa2 <rtems_filesystem_eval_path_error>
1076b6: 83 c4 10 add $0x10,%esp
rv = -1;
1076b9: 83 cb ff or $0xffffffff,%ebx
}
rtems_filesystem_eval_path_cleanup( &ctx );
1076bc: 83 ec 0c sub $0xc,%esp
1076bf: 8d 45 b0 lea -0x50(%ebp),%eax
1076c2: 50 push %eax
1076c3: e8 bd 1b 00 00 call 109285 <rtems_filesystem_eval_path_cleanup>
1076c8: 83 c4 10 add $0x10,%esp
1076cb: eb 1e jmp 1076eb <IMFS_make_generic_node+0xfe>
} else {
errno = EINVAL;
1076cd: e8 52 d1 00 00 call 114824 <__errno>
1076d2: c7 00 16 00 00 00 movl $0x16,(%eax)
rv = -1;
1076d8: 83 cb ff or $0xffffffff,%ebx
1076db: eb 0e jmp 1076eb <IMFS_make_generic_node+0xfe>
rv = -1;
break;
}
if ( rv == 0 ) {
if ( node_control->imfs_type == IMFS_GENERIC ) {
1076dd: 8b 45 10 mov 0x10(%ebp),%eax
1076e0: 83 38 07 cmpl $0x7,(%eax)
1076e3: 0f 84 50 ff ff ff je 107639 <IMFS_make_generic_node+0x4c>
1076e9: eb e2 jmp 1076cd <IMFS_make_generic_node+0xe0>
rv = -1;
}
}
return rv;
}
1076eb: 89 d8 mov %ebx,%eax
1076ed: 8d 65 f4 lea -0xc(%ebp),%esp
1076f0: 5b pop %ebx
1076f1: 5e pop %esi
1076f2: 5f pop %edi
1076f3: 5d pop %ebp
1076f4: c3 ret
0010fbd8 <IMFS_memfile_addblock>:
*/
MEMFILE_STATIC int IMFS_memfile_addblock(
IMFS_jnode_t *the_jnode,
unsigned int block
)
{
10fbd8: 55 push %ebp
10fbd9: 89 e5 mov %esp,%ebp
10fbdb: 56 push %esi
10fbdc: 53 push %ebx
IMFS_assert( IMFS_type( the_jnode ) == IMFS_MEMORY_FILE );
/*
* Obtain the pointer for the specified block number
*/
block_entry_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 1 );
10fbdd: 50 push %eax
10fbde: 6a 01 push $0x1
10fbe0: ff 75 0c pushl 0xc(%ebp)
10fbe3: ff 75 08 pushl 0x8(%ebp)
10fbe6: e8 d7 fc ff ff call 10f8c2 <IMFS_memfile_get_block_pointer>
10fbeb: 89 c6 mov %eax,%esi
if ( *block_entry_ptr )
10fbed: 83 c4 10 add $0x10,%esp
return 0;
10fbf0: 31 db xor %ebx,%ebx
/*
* Obtain the pointer for the specified block number
*/
block_entry_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 1 );
if ( *block_entry_ptr )
10fbf2: 83 38 00 cmpl $0x0,(%eax)
10fbf5: 75 12 jne 10fc09 <IMFS_memfile_addblock+0x31>
return 0;
/*
* There is no memory for this block number so allocate it.
*/
memory = memfile_alloc_block();
10fbf7: e8 a4 fc ff ff call 10f8a0 <memfile_alloc_block>
if ( !memory )
10fbfc: 85 c0 test %eax,%eax
10fbfe: 74 04 je 10fc04 <IMFS_memfile_addblock+0x2c><== NEVER TAKEN
return 1;
*block_entry_ptr = memory;
10fc00: 89 06 mov %eax,(%esi)
return 0;
10fc02: eb 05 jmp 10fc09 <IMFS_memfile_addblock+0x31>
/*
* There is no memory for this block number so allocate it.
*/
memory = memfile_alloc_block();
if ( !memory )
return 1;
10fc04: bb 01 00 00 00 mov $0x1,%ebx <== NOT EXECUTED
*block_entry_ptr = memory;
return 0;
}
10fc09: 89 d8 mov %ebx,%eax
10fc0b: 8d 65 f8 lea -0x8(%ebp),%esp
10fc0e: 5b pop %ebx
10fc0f: 5e pop %esi
10fc10: 5d pop %ebp
10fc11: c3 ret
0010fd7a <IMFS_memfile_extend>:
MEMFILE_STATIC int IMFS_memfile_extend(
IMFS_jnode_t *the_jnode,
bool zero_fill,
off_t new_length
)
{
10fd7a: 55 push %ebp
10fd7b: 89 e5 mov %esp,%ebp
10fd7d: 57 push %edi
10fd7e: 56 push %esi
10fd7f: 53 push %ebx
10fd80: 83 ec 4c sub $0x4c,%esp
10fd83: 8b 75 08 mov 0x8(%ebp),%esi
10fd86: 8b 45 10 mov 0x10(%ebp),%eax
10fd89: 8b 55 14 mov 0x14(%ebp),%edx
10fd8c: 89 45 d0 mov %eax,-0x30(%ebp)
10fd8f: 89 55 d4 mov %edx,-0x2c(%ebp)
10fd92: 8a 55 0c mov 0xc(%ebp),%dl
10fd95: 88 55 bb mov %dl,-0x45(%ebp)
IMFS_assert( IMFS_type( the_jnode ) == IMFS_MEMORY_FILE );
/*
* Verify new file size is supported
*/
if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE )
10fd98: 8b 1d b4 df 12 00 mov 0x12dfb4,%ebx
10fd9e: 89 da mov %ebx,%edx
10fda0: c1 ea 02 shr $0x2,%edx
10fda3: 8d 42 01 lea 0x1(%edx),%eax
10fda6: 0f af c2 imul %edx,%eax
10fda9: 40 inc %eax
10fdaa: 0f af c2 imul %edx,%eax
10fdad: 48 dec %eax
10fdae: 0f af c3 imul %ebx,%eax
10fdb1: 83 7d d4 00 cmpl $0x0,-0x2c(%ebp)
10fdb5: 7c 17 jl 10fdce <IMFS_memfile_extend+0x54><== NEVER TAKEN
10fdb7: 7f 05 jg 10fdbe <IMFS_memfile_extend+0x44><== NEVER TAKEN
10fdb9: 39 45 d0 cmp %eax,-0x30(%ebp)
10fdbc: 72 10 jb 10fdce <IMFS_memfile_extend+0x54>
rtems_set_errno_and_return_minus_one( EFBIG );
10fdbe: e8 19 11 00 00 call 110edc <__errno>
10fdc3: c7 00 1b 00 00 00 movl $0x1b,(%eax)
10fdc9: e9 c1 00 00 00 jmp 10fe8f <IMFS_memfile_extend+0x115>
/*
* Verify new file size is actually larger than current size
*/
if ( new_length <= the_jnode->info.file.size )
10fdce: 8b 46 50 mov 0x50(%esi),%eax
10fdd1: 8b 56 54 mov 0x54(%esi),%edx
10fdd4: 89 45 c0 mov %eax,-0x40(%ebp)
10fdd7: 89 55 c4 mov %edx,-0x3c(%ebp)
10fdda: 39 55 d4 cmp %edx,-0x2c(%ebp)
10fddd: 0f 8c e9 00 00 00 jl 10fecc <IMFS_memfile_extend+0x152><== NEVER TAKEN
10fde3: 7f 09 jg 10fdee <IMFS_memfile_extend+0x74><== NEVER TAKEN
10fde5: 39 45 d0 cmp %eax,-0x30(%ebp)
10fde8: 0f 86 de 00 00 00 jbe 10fecc <IMFS_memfile_extend+0x152><== NEVER TAKEN
return 0;
/*
* Calculate the number of range of blocks to allocate
*/
new_blocks = new_length / IMFS_MEMFILE_BYTES_PER_BLOCK;
10fdee: 89 5d c8 mov %ebx,-0x38(%ebp)
10fdf1: 89 da mov %ebx,%edx
10fdf3: c1 fa 1f sar $0x1f,%edx
10fdf6: 89 55 cc mov %edx,-0x34(%ebp)
10fdf9: ff 75 cc pushl -0x34(%ebp)
10fdfc: ff 75 c8 pushl -0x38(%ebp)
10fdff: ff 75 d4 pushl -0x2c(%ebp)
10fe02: ff 75 d0 pushl -0x30(%ebp)
10fe05: e8 7e d3 00 00 call 11d188 <__divdi3>
10fe0a: 83 c4 10 add $0x10,%esp
10fe0d: 89 45 bc mov %eax,-0x44(%ebp)
old_blocks = the_jnode->info.file.size / IMFS_MEMFILE_BYTES_PER_BLOCK;
10fe10: ff 75 cc pushl -0x34(%ebp)
10fe13: ff 75 c8 pushl -0x38(%ebp)
10fe16: ff 75 c4 pushl -0x3c(%ebp)
10fe19: ff 75 c0 pushl -0x40(%ebp)
10fe1c: e8 67 d3 00 00 call 11d188 <__divdi3>
10fe21: 83 c4 10 add $0x10,%esp
10fe24: 89 45 c8 mov %eax,-0x38(%ebp)
offset = the_jnode->info.file.size - old_blocks * IMFS_MEMFILE_BYTES_PER_BLOCK;
10fe27: 0f af d8 imul %eax,%ebx
10fe2a: 8b 7d c0 mov -0x40(%ebp),%edi
10fe2d: 29 df sub %ebx,%edi
/*
* Now allocate each of those blocks.
*/
for ( block=old_blocks ; block<=new_blocks ; block++ ) {
10fe2f: 89 c3 mov %eax,%ebx
10fe31: eb 62 jmp 10fe95 <IMFS_memfile_extend+0x11b>
if ( !IMFS_memfile_addblock( the_jnode, block ) ) {
10fe33: 50 push %eax
10fe34: 50 push %eax
10fe35: 53 push %ebx
10fe36: 56 push %esi
10fe37: e8 9c fd ff ff call 10fbd8 <IMFS_memfile_addblock>
10fe3c: 83 c4 10 add $0x10,%esp
10fe3f: 85 c0 test %eax,%eax
10fe41: 75 3c jne 10fe7f <IMFS_memfile_extend+0x105><== NEVER TAKEN
if ( zero_fill ) {
10fe43: 80 7d bb 00 cmpb $0x0,-0x45(%ebp)
10fe47: 74 4b je 10fe94 <IMFS_memfile_extend+0x11a>
size_t count = IMFS_MEMFILE_BYTES_PER_BLOCK - offset;
10fe49: 8b 0d b4 df 12 00 mov 0x12dfb4,%ecx
10fe4f: 29 f9 sub %edi,%ecx
block_p *block_ptr =
10fe51: 50 push %eax
10fe52: 6a 00 push $0x0
10fe54: 53 push %ebx
10fe55: 56 push %esi
10fe56: 89 4d b4 mov %ecx,-0x4c(%ebp)
10fe59: e8 64 fa ff ff call 10f8c2 <IMFS_memfile_get_block_pointer>
IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
memset( &(*block_ptr) [offset], 0, count);
10fe5e: 8b 10 mov (%eax),%edx
10fe60: 01 fa add %edi,%edx
10fe62: 31 c0 xor %eax,%eax
10fe64: 8b 4d b4 mov -0x4c(%ebp),%ecx
10fe67: 89 d7 mov %edx,%edi
10fe69: f3 aa rep stos %al,%es:(%edi)
10fe6b: 83 c4 10 add $0x10,%esp
offset = 0;
10fe6e: 31 ff xor %edi,%edi
10fe70: eb 22 jmp 10fe94 <IMFS_memfile_extend+0x11a>
}
} else {
for ( ; block>=old_blocks ; block-- ) {
IMFS_memfile_remove_block( the_jnode, block );
10fe72: 51 push %ecx <== NOT EXECUTED
10fe73: 51 push %ecx <== NOT EXECUTED
10fe74: 53 push %ebx <== NOT EXECUTED
10fe75: 56 push %esi <== NOT EXECUTED
10fe76: e8 d5 fe ff ff call 10fd50 <IMFS_memfile_remove_block><== NOT EXECUTED
memset( &(*block_ptr) [offset], 0, count);
offset = 0;
}
} else {
for ( ; block>=old_blocks ; block-- ) {
10fe7b: 4b dec %ebx <== NOT EXECUTED
10fe7c: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
10fe7f: 3b 5d c8 cmp -0x38(%ebp),%ebx <== NOT EXECUTED
10fe82: 73 ee jae 10fe72 <IMFS_memfile_extend+0xf8><== NOT EXECUTED
IMFS_memfile_remove_block( the_jnode, block );
}
rtems_set_errno_and_return_minus_one( ENOSPC );
10fe84: e8 53 10 00 00 call 110edc <__errno> <== NOT EXECUTED
10fe89: c7 00 1c 00 00 00 movl $0x1c,(%eax) <== NOT EXECUTED
10fe8f: 83 c8 ff or $0xffffffff,%eax
10fe92: eb 3a jmp 10fece <IMFS_memfile_extend+0x154>
offset = the_jnode->info.file.size - old_blocks * IMFS_MEMFILE_BYTES_PER_BLOCK;
/*
* Now allocate each of those blocks.
*/
for ( block=old_blocks ; block<=new_blocks ; block++ ) {
10fe94: 43 inc %ebx
10fe95: 3b 5d bc cmp -0x44(%ebp),%ebx
10fe98: 76 99 jbe 10fe33 <IMFS_memfile_extend+0xb9>
}
/*
* Set the new length of the file.
*/
the_jnode->info.file.size = new_length;
10fe9a: 8b 45 d0 mov -0x30(%ebp),%eax
10fe9d: 8b 55 d4 mov -0x2c(%ebp),%edx
10fea0: 89 46 50 mov %eax,0x50(%esi)
10fea3: 89 56 54 mov %edx,0x54(%esi)
IMFS_update_ctime(the_jnode);
10fea6: 50 push %eax
10fea7: 50 push %eax
10fea8: 6a 00 push $0x0
10feaa: 8d 5d e0 lea -0x20(%ebp),%ebx
10fead: 53 push %ebx
10feae: e8 f9 68 ff ff call 1067ac <gettimeofday>
10feb3: 8b 45 e0 mov -0x20(%ebp),%eax
10feb6: 89 46 48 mov %eax,0x48(%esi)
IMFS_update_mtime(the_jnode);
10feb9: 58 pop %eax
10feba: 5a pop %edx
10febb: 6a 00 push $0x0
10febd: 53 push %ebx
10febe: e8 e9 68 ff ff call 1067ac <gettimeofday>
10fec3: 8b 45 e0 mov -0x20(%ebp),%eax
10fec6: 89 46 44 mov %eax,0x44(%esi)
return 0;
10fec9: 83 c4 10 add $0x10,%esp
/*
* Verify new file size is actually larger than current size
*/
if ( new_length <= the_jnode->info.file.size )
return 0;
10fecc: 31 c0 xor %eax,%eax
the_jnode->info.file.size = new_length;
IMFS_update_ctime(the_jnode);
IMFS_update_mtime(the_jnode);
return 0;
}
10fece: 8d 65 f4 lea -0xc(%ebp),%esp
10fed1: 5b pop %ebx
10fed2: 5e pop %esi
10fed3: 5f pop %edi
10fed4: 5d pop %ebp
10fed5: c3 ret
0010f8c2 <IMFS_memfile_get_block_pointer>:
#endif
IMFS_jnode_t *the_jnode,
unsigned int block,
int malloc_it
)
{
10f8c2: 55 push %ebp
10f8c3: 89 e5 mov %esp,%ebp
10f8c5: 57 push %edi
10f8c6: 56 push %esi
10f8c7: 53 push %ebx
10f8c8: 83 ec 1c sub $0x1c,%esp
10f8cb: 8b 5d 08 mov 0x8(%ebp),%ebx
10f8ce: 8b 75 0c mov 0xc(%ebp),%esi
10f8d1: 8b 7d 10 mov 0x10(%ebp),%edi
my_block = block;
/*
* Is the block number in the simple indirect portion?
*/
if ( my_block <= LAST_INDIRECT ) {
10f8d4: 8b 0d b4 df 12 00 mov 0x12dfb4,%ecx
10f8da: c1 e9 02 shr $0x2,%ecx
10f8dd: 8d 41 ff lea -0x1(%ecx),%eax
10f8e0: 39 c6 cmp %eax,%esi
10f8e2: 77 23 ja 10f907 <IMFS_memfile_get_block_pointer+0x45>
p = info->indirect;
10f8e4: 8b 43 58 mov 0x58(%ebx),%eax
if ( malloc_it ) {
10f8e7: 85 ff test %edi,%edi
10f8e9: 74 6f je 10f95a <IMFS_memfile_get_block_pointer+0x98>
if ( !p ) {
10f8eb: 85 c0 test %eax,%eax
10f8ed: 75 13 jne 10f902 <IMFS_memfile_get_block_pointer+0x40>
p = memfile_alloc_block();
10f8ef: e8 ac ff ff ff call 10f8a0 <memfile_alloc_block>
if ( !p )
10f8f4: 85 c0 test %eax,%eax
10f8f6: 75 07 jne 10f8ff <IMFS_memfile_get_block_pointer+0x3d><== ALWAYS TAKEN
return 0;
10f8f8: 31 c0 xor %eax,%eax
10f8fa: e9 fc 00 00 00 jmp 10f9fb <IMFS_memfile_get_block_pointer+0x139><== NOT EXECUTED
info->indirect = p;
10f8ff: 89 43 58 mov %eax,0x58(%ebx)
}
return &info->indirect[ my_block ];
10f902: 8b 43 58 mov 0x58(%ebx),%eax
10f905: eb 57 jmp 10f95e <IMFS_memfile_get_block_pointer+0x9c>
/*
* Is the block number in the doubly indirect portion?
*/
if ( my_block <= LAST_DOUBLY_INDIRECT ) {
10f907: 8d 41 01 lea 0x1(%ecx),%eax
10f90a: 0f af c1 imul %ecx,%eax
10f90d: 8d 50 ff lea -0x1(%eax),%edx
10f910: 39 d6 cmp %edx,%esi
10f912: 77 52 ja 10f966 <IMFS_memfile_get_block_pointer+0xa4>
my_block -= FIRST_DOUBLY_INDIRECT;
10f914: 89 f0 mov %esi,%eax
10f916: 29 c8 sub %ecx,%eax
singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS;
10f918: 31 d2 xor %edx,%edx
10f91a: f7 f1 div %ecx
10f91c: 89 d6 mov %edx,%esi
10f91e: 89 c1 mov %eax,%ecx
doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS;
p = info->doubly_indirect;
10f920: 8b 43 5c mov 0x5c(%ebx),%eax
if ( malloc_it ) {
10f923: 85 ff test %edi,%edi
10f925: 74 2c je 10f953 <IMFS_memfile_get_block_pointer+0x91>
if ( !p ) {
10f927: 85 c0 test %eax,%eax
10f929: 75 12 jne 10f93d <IMFS_memfile_get_block_pointer+0x7b>
p = memfile_alloc_block();
10f92b: 89 4d e0 mov %ecx,-0x20(%ebp)
10f92e: e8 6d ff ff ff call 10f8a0 <memfile_alloc_block>
if ( !p )
10f933: 85 c0 test %eax,%eax
10f935: 8b 4d e0 mov -0x20(%ebp),%ecx
10f938: 74 be je 10f8f8 <IMFS_memfile_get_block_pointer+0x36><== NEVER TAKEN
return 0;
info->doubly_indirect = p;
10f93a: 89 43 5c mov %eax,0x5c(%ebx)
}
p1 = (block_p *)p[ doubly ];
10f93d: 8d 1c 88 lea (%eax,%ecx,4),%ebx
10f940: 8b 03 mov (%ebx),%eax
if ( !p1 ) {
10f942: 85 c0 test %eax,%eax
10f944: 75 18 jne 10f95e <IMFS_memfile_get_block_pointer+0x9c>
p1 = memfile_alloc_block();
10f946: e8 55 ff ff ff call 10f8a0 <memfile_alloc_block>
if ( !p1 )
10f94b: 85 c0 test %eax,%eax
10f94d: 74 a9 je 10f8f8 <IMFS_memfile_get_block_pointer+0x36><== NEVER TAKEN
return 0;
p[ doubly ] = (block_p) p1;
10f94f: 89 03 mov %eax,(%ebx)
10f951: eb 0b jmp 10f95e <IMFS_memfile_get_block_pointer+0x9c>
}
return (block_p *)&p1[ singly ];
}
if ( !p )
10f953: 85 c0 test %eax,%eax
10f955: 74 a1 je 10f8f8 <IMFS_memfile_get_block_pointer+0x36><== NEVER TAKEN
return 0;
p = (block_p *)p[ doubly ];
10f957: 8b 04 88 mov (%eax,%ecx,4),%eax
if ( !p )
10f95a: 85 c0 test %eax,%eax
10f95c: 74 9a je 10f8f8 <IMFS_memfile_get_block_pointer+0x36><== NEVER TAKEN
return 0;
return (block_p *)&p[ singly ];
10f95e: 8d 04 b0 lea (%eax,%esi,4),%eax
10f961: e9 95 00 00 00 jmp 10f9fb <IMFS_memfile_get_block_pointer+0x139>
}
/*
* Is the block number in the triply indirect portion?
*/
if ( my_block <= LAST_TRIPLY_INDIRECT ) {
10f966: 8d 50 01 lea 0x1(%eax),%edx
10f969: 0f af d1 imul %ecx,%edx
10f96c: 4a dec %edx
10f96d: 39 d6 cmp %edx,%esi
10f96f: 77 87 ja 10f8f8 <IMFS_memfile_get_block_pointer+0x36><== NEVER TAKEN
my_block -= FIRST_TRIPLY_INDIRECT;
10f971: 29 c6 sub %eax,%esi
10f973: 89 f0 mov %esi,%eax
singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS;
10f975: 31 d2 xor %edx,%edx
10f977: f7 f1 div %ecx
10f979: 89 55 e4 mov %edx,-0x1c(%ebp)
doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS;
triply = doubly / IMFS_MEMFILE_BLOCK_SLOTS;
10f97c: 31 d2 xor %edx,%edx
10f97e: f7 f1 div %ecx
10f980: 89 d6 mov %edx,%esi
10f982: 89 c1 mov %eax,%ecx
doubly %= IMFS_MEMFILE_BLOCK_SLOTS;
p = info->triply_indirect;
10f984: 8b 43 60 mov 0x60(%ebx),%eax
if ( malloc_it ) {
10f987: 85 ff test %edi,%edi
10f989: 74 4c je 10f9d7 <IMFS_memfile_get_block_pointer+0x115>
if ( !p ) {
10f98b: 85 c0 test %eax,%eax
10f98d: 75 16 jne 10f9a5 <IMFS_memfile_get_block_pointer+0xe3>
p = memfile_alloc_block();
10f98f: 89 4d e0 mov %ecx,-0x20(%ebp)
10f992: e8 09 ff ff ff call 10f8a0 <memfile_alloc_block>
if ( !p )
10f997: 85 c0 test %eax,%eax
10f999: 8b 4d e0 mov -0x20(%ebp),%ecx
10f99c: 0f 84 56 ff ff ff je 10f8f8 <IMFS_memfile_get_block_pointer+0x36><== NEVER TAKEN
return 0;
info->triply_indirect = p;
10f9a2: 89 43 60 mov %eax,0x60(%ebx)
}
p1 = (block_p *) p[ triply ];
10f9a5: 8d 1c 88 lea (%eax,%ecx,4),%ebx
10f9a8: 8b 03 mov (%ebx),%eax
if ( !p1 ) {
10f9aa: 85 c0 test %eax,%eax
10f9ac: 75 0f jne 10f9bd <IMFS_memfile_get_block_pointer+0xfb>
p1 = memfile_alloc_block();
10f9ae: e8 ed fe ff ff call 10f8a0 <memfile_alloc_block>
if ( !p1 )
10f9b3: 85 c0 test %eax,%eax
10f9b5: 0f 84 3d ff ff ff je 10f8f8 <IMFS_memfile_get_block_pointer+0x36><== NEVER TAKEN
return 0;
p[ triply ] = (block_p) p1;
10f9bb: 89 03 mov %eax,(%ebx)
}
p2 = (block_p *)p1[ doubly ];
10f9bd: 8d 1c b0 lea (%eax,%esi,4),%ebx
10f9c0: 8b 03 mov (%ebx),%eax
if ( !p2 ) {
10f9c2: 85 c0 test %eax,%eax
10f9c4: 75 2f jne 10f9f5 <IMFS_memfile_get_block_pointer+0x133><== NEVER TAKEN
p2 = memfile_alloc_block();
10f9c6: e8 d5 fe ff ff call 10f8a0 <memfile_alloc_block>
if ( !p2 )
10f9cb: 85 c0 test %eax,%eax
10f9cd: 0f 84 25 ff ff ff je 10f8f8 <IMFS_memfile_get_block_pointer+0x36><== NEVER TAKEN
return 0;
p1[ doubly ] = (block_p) p2;
10f9d3: 89 03 mov %eax,(%ebx)
10f9d5: eb 1e jmp 10f9f5 <IMFS_memfile_get_block_pointer+0x133>
}
return (block_p *)&p2[ singly ];
}
if ( !p )
10f9d7: 85 c0 test %eax,%eax
10f9d9: 0f 84 19 ff ff ff je 10f8f8 <IMFS_memfile_get_block_pointer+0x36><== NEVER TAKEN
return 0;
p1 = (block_p *) p[ triply ];
10f9df: 8b 04 88 mov (%eax,%ecx,4),%eax
if ( !p1 )
10f9e2: 85 c0 test %eax,%eax
10f9e4: 0f 84 0e ff ff ff je 10f8f8 <IMFS_memfile_get_block_pointer+0x36><== NEVER TAKEN
return 0;
p2 = (block_p *)p1[ doubly ];
10f9ea: 8b 04 90 mov (%eax,%edx,4),%eax
if ( !p2 )
10f9ed: 85 c0 test %eax,%eax
10f9ef: 0f 84 03 ff ff ff je 10f8f8 <IMFS_memfile_get_block_pointer+0x36><== NEVER TAKEN
return 0;
return (block_p *)&p2[ singly ];
10f9f5: 8b 55 e4 mov -0x1c(%ebp),%edx
10f9f8: 8d 04 90 lea (%eax,%edx,4),%eax
/*
* This means the requested block number is out of range.
*/
return 0;
}
10f9fb: 83 c4 1c add $0x1c,%esp
10f9fe: 5b pop %ebx
10f9ff: 5e pop %esi
10fa00: 5f pop %edi
10fa01: 5d pop %ebp
10fa02: c3 ret
0010fa03 <IMFS_memfile_read>:
IMFS_jnode_t *the_jnode,
off_t start,
unsigned char *destination,
unsigned int length
)
{
10fa03: 55 push %ebp
10fa04: 89 e5 mov %esp,%ebp
10fa06: 57 push %edi
10fa07: 56 push %esi
10fa08: 53 push %ebx
10fa09: 83 ec 3c sub $0x3c,%esp
10fa0c: 8b 45 0c mov 0xc(%ebp),%eax
10fa0f: 8b 55 10 mov 0x10(%ebp),%edx
10fa12: 89 45 c8 mov %eax,-0x38(%ebp)
10fa15: 89 55 cc mov %edx,-0x34(%ebp)
rtems_chain_extract_unprotected( &node->Node );
}
static inline IMFS_jnode_types_t IMFS_type( const IMFS_jnode_t *node )
{
return node->control->imfs_type;
10fa18: 8b 55 08 mov 0x8(%ebp),%edx
10fa1b: 8b 42 4c mov 0x4c(%edx),%eax
* Linear files (as created from a tar file are easier to handle
* than block files).
*/
my_length = length;
if ( IMFS_type( the_jnode ) == IMFS_LINEAR_FILE ) {
10fa1e: 83 38 05 cmpl $0x5,(%eax)
10fa21: 75 39 jne 10fa5c <IMFS_memfile_read+0x59>
unsigned char *file_ptr;
file_ptr = (unsigned char *)the_jnode->info.linearfile.direct;
10fa23: 8b 72 58 mov 0x58(%edx),%esi
if (my_length > (the_jnode->info.linearfile.size - start))
10fa26: 8b 42 50 mov 0x50(%edx),%eax
10fa29: 8b 52 54 mov 0x54(%edx),%edx
10fa2c: 89 c1 mov %eax,%ecx
10fa2e: 89 d3 mov %edx,%ebx
10fa30: 2b 4d c8 sub -0x38(%ebp),%ecx
10fa33: 1b 5d cc sbb -0x34(%ebp),%ebx
10fa36: 31 ff xor %edi,%edi
10fa38: 39 df cmp %ebx,%edi
10fa3a: 7c 0e jl 10fa4a <IMFS_memfile_read+0x47><== NEVER TAKEN
10fa3c: 7f 05 jg 10fa43 <IMFS_memfile_read+0x40><== NEVER TAKEN
10fa3e: 39 4d 18 cmp %ecx,0x18(%ebp)
10fa41: 76 07 jbe 10fa4a <IMFS_memfile_read+0x47><== NEVER TAKEN
my_length = the_jnode->info.linearfile.size - start;
10fa43: 89 c3 mov %eax,%ebx
10fa45: 2b 5d c8 sub -0x38(%ebp),%ebx
10fa48: eb 03 jmp 10fa4d <IMFS_memfile_read+0x4a>
/*
* Linear files (as created from a tar file are easier to handle
* than block files).
*/
my_length = length;
10fa4a: 8b 5d 18 mov 0x18(%ebp),%ebx <== NOT EXECUTED
file_ptr = (unsigned char *)the_jnode->info.linearfile.direct;
if (my_length > (the_jnode->info.linearfile.size - start))
my_length = the_jnode->info.linearfile.size - start;
memcpy(dest, &file_ptr[start], my_length);
10fa4d: 03 75 c8 add -0x38(%ebp),%esi
10fa50: 8b 7d 14 mov 0x14(%ebp),%edi
10fa53: 89 d9 mov %ebx,%ecx
10fa55: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
10fa57: e9 1d 01 00 00 jmp 10fb79 <IMFS_memfile_read+0x176>
/*
* If the last byte we are supposed to read is past the end of this
* in memory file, then shorten the length to read.
*/
last_byte = start + length;
10fa5c: 8b 45 c8 mov -0x38(%ebp),%eax
if ( last_byte > the_jnode->info.file.size )
10fa5f: 8b 55 08 mov 0x8(%ebp),%edx
10fa62: 8b 5a 50 mov 0x50(%edx),%ebx
/*
* If the last byte we are supposed to read is past the end of this
* in memory file, then shorten the length to read.
*/
last_byte = start + length;
10fa65: 8b 55 18 mov 0x18(%ebp),%edx
10fa68: 01 c2 add %eax,%edx
if ( last_byte > the_jnode->info.file.size )
10fa6a: 31 c9 xor %ecx,%ecx
10fa6c: 8b 75 08 mov 0x8(%ebp),%esi
10fa6f: 3b 4e 54 cmp 0x54(%esi),%ecx
10fa72: 7c 0d jl 10fa81 <IMFS_memfile_read+0x7e><== NEVER TAKEN
10fa74: 7f 04 jg 10fa7a <IMFS_memfile_read+0x77><== NEVER TAKEN
10fa76: 39 da cmp %ebx,%edx
10fa78: 76 07 jbe 10fa81 <IMFS_memfile_read+0x7e>
my_length = the_jnode->info.file.size - start;
10fa7a: 29 c3 sub %eax,%ebx
10fa7c: 89 5d d4 mov %ebx,-0x2c(%ebp)
10fa7f: eb 06 jmp 10fa87 <IMFS_memfile_read+0x84>
/*
* Linear files (as created from a tar file are easier to handle
* than block files).
*/
my_length = length;
10fa81: 8b 45 18 mov 0x18(%ebp),%eax
10fa84: 89 45 d4 mov %eax,-0x2c(%ebp)
*/
/*
* Phase 1: possibly the last part of one block
*/
start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK;
10fa87: 8b 0d b4 df 12 00 mov 0x12dfb4,%ecx
10fa8d: 89 cb mov %ecx,%ebx
10fa8f: 89 ce mov %ecx,%esi
10fa91: c1 fe 1f sar $0x1f,%esi
10fa94: 56 push %esi
10fa95: 51 push %ecx
10fa96: ff 75 cc pushl -0x34(%ebp)
10fa99: ff 75 c8 pushl -0x38(%ebp)
10fa9c: 89 4d c0 mov %ecx,-0x40(%ebp)
10fa9f: e8 38 d8 00 00 call 11d2dc <__moddi3>
10faa4: 83 c4 10 add $0x10,%esp
10faa7: 89 c7 mov %eax,%edi
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
10faa9: 56 push %esi
10faaa: 53 push %ebx
10faab: ff 75 cc pushl -0x34(%ebp)
10faae: ff 75 c8 pushl -0x38(%ebp)
10fab1: e8 d2 d6 00 00 call 11d188 <__divdi3>
10fab6: 83 c4 10 add $0x10,%esp
10fab9: 89 c2 mov %eax,%edx
if ( start_offset ) {
10fabb: 85 ff test %edi,%edi
10fabd: 8b 4d c0 mov -0x40(%ebp),%ecx
10fac0: 74 39 je 10fafb <IMFS_memfile_read+0xf8>
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset;
10fac2: 29 f9 sub %edi,%ecx
10fac4: 8b 5d d4 mov -0x2c(%ebp),%ebx
10fac7: 39 cb cmp %ecx,%ebx
10fac9: 76 02 jbe 10facd <IMFS_memfile_read+0xca>
10facb: 89 cb mov %ecx,%ebx
if ( to_copy > my_length )
to_copy = my_length;
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
10facd: 50 push %eax
10face: 6a 00 push $0x0
10fad0: 52 push %edx
10fad1: ff 75 08 pushl 0x8(%ebp)
10fad4: 89 55 c0 mov %edx,-0x40(%ebp)
10fad7: e8 e6 fd ff ff call 10f8c2 <IMFS_memfile_get_block_pointer>
if ( !block_ptr )
10fadc: 83 c4 10 add $0x10,%esp
10fadf: 85 c0 test %eax,%eax
10fae1: 8b 55 c0 mov -0x40(%ebp),%edx
10fae4: 0f 84 ac 00 00 00 je 10fb96 <IMFS_memfile_read+0x193><== NEVER TAKEN
return copied;
memcpy( dest, &(*block_ptr)[ start_offset ], to_copy );
10faea: 8b 30 mov (%eax),%esi
10faec: 01 fe add %edi,%esi
dest += to_copy;
10faee: 8b 7d 14 mov 0x14(%ebp),%edi
10faf1: 89 d9 mov %ebx,%ecx
10faf3: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
block++;
10faf5: 42 inc %edx
my_length -= to_copy;
10faf6: 29 5d d4 sub %ebx,-0x2c(%ebp)
10faf9: eb 05 jmp 10fb00 <IMFS_memfile_read+0xfd>
unsigned int last_byte;
unsigned int copied;
unsigned int start_offset;
unsigned char *dest;
dest = destination;
10fafb: 8b 7d 14 mov 0x14(%ebp),%edi
*/
last_byte = start + length;
if ( last_byte > the_jnode->info.file.size )
my_length = the_jnode->info.file.size - start;
copied = 0;
10fafe: 31 db xor %ebx,%ebx
}
/*
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
10fb00: 8b 0d b4 df 12 00 mov 0x12dfb4,%ecx
10fb06: 89 4d c8 mov %ecx,-0x38(%ebp)
* is considered an error. Read from an offset for more bytes than
* are between the offset and the end of the file will result in
* reading the data between offset and the end of the file (truncated
* read).
*/
MEMFILE_STATIC ssize_t IMFS_memfile_read(
10fb09: 29 df sub %ebx,%edi
10fb0b: 89 7d c4 mov %edi,-0x3c(%ebp)
/*
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
10fb0e: eb 2e jmp 10fb3e <IMFS_memfile_read+0x13b>
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
10fb10: 56 push %esi
10fb11: 6a 00 push $0x0
10fb13: 52 push %edx
10fb14: ff 75 08 pushl 0x8(%ebp)
10fb17: 89 55 c0 mov %edx,-0x40(%ebp)
10fb1a: e8 a3 fd ff ff call 10f8c2 <IMFS_memfile_get_block_pointer>
if ( !block_ptr )
10fb1f: 83 c4 10 add $0x10,%esp
10fb22: 85 c0 test %eax,%eax
10fb24: 8b 55 c0 mov -0x40(%ebp),%edx
10fb27: 75 02 jne 10fb2b <IMFS_memfile_read+0x128><== ALWAYS TAKEN
10fb29: eb 3d jmp 10fb68 <IMFS_memfile_read+0x165><== NOT EXECUTED
return copied;
memcpy( dest, &(*block_ptr)[ 0 ], to_copy );
10fb2b: 8b 30 mov (%eax),%esi
10fb2d: 8b 7d d0 mov -0x30(%ebp),%edi
10fb30: 8b 4d c8 mov -0x38(%ebp),%ecx
10fb33: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
dest += to_copy;
block++;
10fb35: 42 inc %edx
my_length -= to_copy;
10fb36: 8b 4d c8 mov -0x38(%ebp),%ecx
10fb39: 29 4d d4 sub %ecx,-0x2c(%ebp)
copied += to_copy;
10fb3c: 01 cb add %ecx,%ebx
* is considered an error. Read from an offset for more bytes than
* are between the offset and the end of the file will result in
* reading the data between offset and the end of the file (truncated
* read).
*/
MEMFILE_STATIC ssize_t IMFS_memfile_read(
10fb3e: 8b 75 c4 mov -0x3c(%ebp),%esi
10fb41: 01 de add %ebx,%esi
10fb43: 89 75 d0 mov %esi,-0x30(%ebp)
/*
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
10fb46: 8b 4d d4 mov -0x2c(%ebp),%ecx
10fb49: 3b 0d b4 df 12 00 cmp 0x12dfb4,%ecx
10fb4f: 73 bf jae 10fb10 <IMFS_memfile_read+0x10d>
/*
* Phase 3: possibly the first part of one block
*/
IMFS_assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK );
if ( my_length ) {
10fb51: 85 c9 test %ecx,%ecx
10fb53: 74 24 je 10fb79 <IMFS_memfile_read+0x176>
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
10fb55: 51 push %ecx
10fb56: 6a 00 push $0x0
10fb58: 52 push %edx
10fb59: ff 75 08 pushl 0x8(%ebp)
10fb5c: e8 61 fd ff ff call 10f8c2 <IMFS_memfile_get_block_pointer>
if ( !block_ptr )
10fb61: 83 c4 10 add $0x10,%esp
10fb64: 85 c0 test %eax,%eax
10fb66: 75 04 jne 10fb6c <IMFS_memfile_read+0x169><== ALWAYS TAKEN
return copied;
10fb68: 89 d8 mov %ebx,%eax <== NOT EXECUTED
10fb6a: eb 2c jmp 10fb98 <IMFS_memfile_read+0x195><== NOT EXECUTED
memcpy( dest, &(*block_ptr)[ 0 ], my_length );
10fb6c: 8b 30 mov (%eax),%esi
10fb6e: 8b 7d d0 mov -0x30(%ebp),%edi
10fb71: 8b 4d d4 mov -0x2c(%ebp),%ecx
10fb74: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
copied += my_length;
10fb76: 03 5d d4 add -0x2c(%ebp),%ebx
}
IMFS_update_atime( the_jnode );
10fb79: 50 push %eax
10fb7a: 50 push %eax
10fb7b: 6a 00 push $0x0
10fb7d: 8d 45 e0 lea -0x20(%ebp),%eax
10fb80: 50 push %eax
10fb81: e8 26 6c ff ff call 1067ac <gettimeofday>
10fb86: 8b 45 e0 mov -0x20(%ebp),%eax
10fb89: 8b 75 08 mov 0x8(%ebp),%esi
10fb8c: 89 46 40 mov %eax,0x40(%esi)
return copied;
10fb8f: 89 d8 mov %ebx,%eax
10fb91: 83 c4 10 add $0x10,%esp
10fb94: eb 02 jmp 10fb98 <IMFS_memfile_read+0x195>
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset;
if ( to_copy > my_length )
to_copy = my_length;
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
if ( !block_ptr )
return copied;
10fb96: 31 c0 xor %eax,%eax
}
IMFS_update_atime( the_jnode );
return copied;
}
10fb98: 8d 65 f4 lea -0xc(%ebp),%esp
10fb9b: 5b pop %ebx
10fb9c: 5e pop %esi
10fb9d: 5f pop %edi
10fb9e: 5d pop %ebp
10fb9f: c3 ret
0010fc7c <IMFS_memfile_remove>:
* is better to stick to simple, easy to understand algorithms.
*/
IMFS_jnode_t *IMFS_memfile_remove(
IMFS_jnode_t *the_jnode
)
{
10fc7c: 55 push %ebp
10fc7d: 89 e5 mov %esp,%ebp
10fc7f: 57 push %edi
10fc80: 56 push %esi
10fc81: 53 push %ebx
10fc82: 83 ec 1c sub $0x1c,%esp
10fc85: 8b 5d 08 mov 0x8(%ebp),%ebx
/*
* Eventually this could be set smarter at each call to
* memfile_free_blocks_in_table to greatly speed this up.
*/
to_free = IMFS_MEMFILE_BLOCK_SLOTS;
10fc88: 8b 35 b4 df 12 00 mov 0x12dfb4,%esi
10fc8e: c1 ee 02 shr $0x2,%esi
* + doubly indirect
* + triply indirect
*/
info = &the_jnode->info.file;
if ( info->indirect ) {
10fc91: 83 7b 58 00 cmpl $0x0,0x58(%ebx)
10fc95: 74 0a je 10fca1 <IMFS_memfile_remove+0x25>
memfile_free_blocks_in_table( &info->indirect, to_free );
10fc97: 8d 43 58 lea 0x58(%ebx),%eax
10fc9a: 89 f2 mov %esi,%edx
10fc9c: e8 8a ff ff ff call 10fc2b <memfile_free_blocks_in_table>
}
if ( info->doubly_indirect ) {
10fca1: 31 ff xor %edi,%edi
10fca3: 83 7b 5c 00 cmpl $0x0,0x5c(%ebx)
10fca7: 75 15 jne 10fcbe <IMFS_memfile_remove+0x42>
10fca9: eb 29 jmp 10fcd4 <IMFS_memfile_remove+0x58>
for ( i=0 ; i<IMFS_MEMFILE_BLOCK_SLOTS ; i++ ) {
if ( info->doubly_indirect[i] ) {
10fcab: 8b 43 5c mov 0x5c(%ebx),%eax
10fcae: 8d 04 b8 lea (%eax,%edi,4),%eax
10fcb1: 83 38 00 cmpl $0x0,(%eax)
10fcb4: 74 07 je 10fcbd <IMFS_memfile_remove+0x41><== NEVER TAKEN
memfile_free_blocks_in_table(
10fcb6: 89 f2 mov %esi,%edx
10fcb8: e8 6e ff ff ff call 10fc2b <memfile_free_blocks_in_table>
if ( info->indirect ) {
memfile_free_blocks_in_table( &info->indirect, to_free );
}
if ( info->doubly_indirect ) {
for ( i=0 ; i<IMFS_MEMFILE_BLOCK_SLOTS ; i++ ) {
10fcbd: 47 inc %edi
10fcbe: a1 b4 df 12 00 mov 0x12dfb4,%eax
10fcc3: c1 e8 02 shr $0x2,%eax
10fcc6: 39 c7 cmp %eax,%edi
10fcc8: 72 e1 jb 10fcab <IMFS_memfile_remove+0x2f>
if ( info->doubly_indirect[i] ) {
memfile_free_blocks_in_table(
(block_p **)&info->doubly_indirect[i], to_free );
}
}
memfile_free_blocks_in_table( &info->doubly_indirect, to_free );
10fcca: 8d 43 5c lea 0x5c(%ebx),%eax
10fccd: 89 f2 mov %esi,%edx
10fccf: e8 57 ff ff ff call 10fc2b <memfile_free_blocks_in_table>
}
if ( info->triply_indirect ) {
10fcd4: 31 ff xor %edi,%edi
10fcd6: 83 7b 60 00 cmpl $0x0,0x60(%ebx)
10fcda: 75 54 jne 10fd30 <IMFS_memfile_remove+0xb4>
10fcdc: eb 68 jmp 10fd46 <IMFS_memfile_remove+0xca>
* a significant difference in the performance of this routine.
*
* Regardless until the IMFS implementation is proven, it
* is better to stick to simple, easy to understand algorithms.
*/
IMFS_jnode_t *IMFS_memfile_remove(
10fcde: 8d 04 bd 00 00 00 00 lea 0x0(,%edi,4),%eax
10fce5: 89 45 e0 mov %eax,-0x20(%ebp)
}
if ( info->triply_indirect ) {
for ( i=0 ; i<IMFS_MEMFILE_BLOCK_SLOTS ; i++ ) {
p = (block_p *) info->triply_indirect[i];
10fce8: 8b 43 60 mov 0x60(%ebx),%eax
10fceb: 8b 0c b8 mov (%eax,%edi,4),%ecx
if ( !p ) /* ensure we have a valid pointer */
10fcee: 85 c9 test %ecx,%ecx
10fcf0: 74 4a je 10fd3c <IMFS_memfile_remove+0xc0><== NEVER TAKEN
10fcf2: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
10fcf9: eb 1a jmp 10fd15 <IMFS_memfile_remove+0x99>
break;
for ( j=0 ; j<IMFS_MEMFILE_BLOCK_SLOTS ; j++ ) {
if ( p[j] ) {
10fcfb: 83 39 00 cmpl $0x0,(%ecx)
10fcfe: 74 0f je 10fd0f <IMFS_memfile_remove+0x93><== NEVER TAKEN
memfile_free_blocks_in_table( (block_p **)&p[j], to_free);
10fd00: 89 f2 mov %esi,%edx
10fd02: 89 c8 mov %ecx,%eax
10fd04: 89 4d dc mov %ecx,-0x24(%ebp)
10fd07: e8 1f ff ff ff call 10fc2b <memfile_free_blocks_in_table>
10fd0c: 8b 4d dc mov -0x24(%ebp),%ecx
if ( info->triply_indirect ) {
for ( i=0 ; i<IMFS_MEMFILE_BLOCK_SLOTS ; i++ ) {
p = (block_p *) info->triply_indirect[i];
if ( !p ) /* ensure we have a valid pointer */
break;
for ( j=0 ; j<IMFS_MEMFILE_BLOCK_SLOTS ; j++ ) {
10fd0f: ff 45 e4 incl -0x1c(%ebp)
10fd12: 83 c1 04 add $0x4,%ecx
10fd15: a1 b4 df 12 00 mov 0x12dfb4,%eax
10fd1a: c1 e8 02 shr $0x2,%eax
10fd1d: 39 45 e4 cmp %eax,-0x1c(%ebp)
10fd20: 72 d9 jb 10fcfb <IMFS_memfile_remove+0x7f>
if ( p[j] ) {
memfile_free_blocks_in_table( (block_p **)&p[j], to_free);
}
}
memfile_free_blocks_in_table(
10fd22: 8b 45 e0 mov -0x20(%ebp),%eax
10fd25: 03 43 60 add 0x60(%ebx),%eax
10fd28: 89 f2 mov %esi,%edx
10fd2a: e8 fc fe ff ff call 10fc2b <memfile_free_blocks_in_table>
memfile_free_blocks_in_table( &info->doubly_indirect, to_free );
}
if ( info->triply_indirect ) {
for ( i=0 ; i<IMFS_MEMFILE_BLOCK_SLOTS ; i++ ) {
10fd2f: 47 inc %edi
10fd30: a1 b4 df 12 00 mov 0x12dfb4,%eax
10fd35: c1 e8 02 shr $0x2,%eax
10fd38: 39 c7 cmp %eax,%edi
10fd3a: 72 a2 jb 10fcde <IMFS_memfile_remove+0x62>
}
memfile_free_blocks_in_table(
(block_p **)&info->triply_indirect[i], to_free );
}
memfile_free_blocks_in_table(
(block_p **)&info->triply_indirect, to_free );
10fd3c: 8d 43 60 lea 0x60(%ebx),%eax
}
}
memfile_free_blocks_in_table(
(block_p **)&info->triply_indirect[i], to_free );
}
memfile_free_blocks_in_table(
10fd3f: 89 f2 mov %esi,%edx
10fd41: e8 e5 fe ff ff call 10fc2b <memfile_free_blocks_in_table>
(block_p **)&info->triply_indirect, to_free );
}
return the_jnode;
}
10fd46: 89 d8 mov %ebx,%eax
10fd48: 83 c4 1c add $0x1c,%esp
10fd4b: 5b pop %ebx
10fd4c: 5e pop %esi
10fd4d: 5f pop %edi
10fd4e: 5d pop %ebp
10fd4f: c3 ret
0010fd50 <IMFS_memfile_remove_block>:
*/
MEMFILE_STATIC int IMFS_memfile_remove_block(
IMFS_jnode_t *the_jnode,
unsigned int block
)
{
10fd50: 55 push %ebp <== NOT EXECUTED
10fd51: 89 e5 mov %esp,%ebp <== NOT EXECUTED
10fd53: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
block_p *block_ptr;
block_p ptr;
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
10fd56: 6a 00 push $0x0 <== NOT EXECUTED
10fd58: ff 75 0c pushl 0xc(%ebp) <== NOT EXECUTED
10fd5b: ff 75 08 pushl 0x8(%ebp) <== NOT EXECUTED
10fd5e: e8 5f fb ff ff call 10f8c2 <IMFS_memfile_get_block_pointer><== NOT EXECUTED
IMFS_assert( block_ptr );
ptr = *block_ptr;
10fd63: 8b 10 mov (%eax),%edx <== NOT EXECUTED
*block_ptr = 0;
10fd65: c7 00 00 00 00 00 movl $0x0,(%eax) <== NOT EXECUTED
memfile_free_block( ptr );
10fd6b: 89 14 24 mov %edx,(%esp) <== NOT EXECUTED
10fd6e: e8 9f fe ff ff call 10fc12 <memfile_free_block> <== NOT EXECUTED
return 1;
}
10fd73: b8 01 00 00 00 mov $0x1,%eax <== NOT EXECUTED
10fd78: c9 leave <== NOT EXECUTED
10fd79: c3 ret <== NOT EXECUTED
0010fed6 <IMFS_memfile_write>:
IMFS_jnode_t *the_jnode,
off_t start,
const unsigned char *source,
unsigned int length
)
{
10fed6: 55 push %ebp
10fed7: 89 e5 mov %esp,%ebp
10fed9: 57 push %edi
10feda: 56 push %esi
10fedb: 53 push %ebx
10fedc: 83 ec 3c sub $0x3c,%esp
10fedf: 8b 45 0c mov 0xc(%ebp),%eax
10fee2: 8b 55 10 mov 0x10(%ebp),%edx
10fee5: 89 45 c8 mov %eax,-0x38(%ebp)
10fee8: 89 55 cc mov %edx,-0x34(%ebp)
/*
* If the last byte we are supposed to write is past the end of this
* in memory file, then extend the length.
*/
last_byte = start + my_length;
10feeb: 8b 75 18 mov 0x18(%ebp),%esi
10feee: 01 c6 add %eax,%esi
if ( last_byte > the_jnode->info.file.size ) {
10fef0: 89 f0 mov %esi,%eax
10fef2: 31 d2 xor %edx,%edx
10fef4: 8b 5d 08 mov 0x8(%ebp),%ebx
10fef7: 8b 4b 50 mov 0x50(%ebx),%ecx
10fefa: 8b 5b 54 mov 0x54(%ebx),%ebx
10fefd: 39 da cmp %ebx,%edx
10feff: 7f 4e jg 10ff4f <IMFS_memfile_write+0x79><== NEVER TAKEN
10ff01: 7c 04 jl 10ff07 <IMFS_memfile_write+0x31><== NEVER TAKEN
10ff03: 39 ce cmp %ecx,%esi
10ff05: 77 48 ja 10ff4f <IMFS_memfile_write+0x79>
*/
/*
* Phase 1: possibly the last part of one block
*/
start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK;
10ff07: 8b 0d b4 df 12 00 mov 0x12dfb4,%ecx
10ff0d: 89 cb mov %ecx,%ebx
10ff0f: 89 ce mov %ecx,%esi
10ff11: c1 fe 1f sar $0x1f,%esi
10ff14: 56 push %esi
10ff15: 51 push %ecx
10ff16: ff 75 cc pushl -0x34(%ebp)
10ff19: ff 75 c8 pushl -0x38(%ebp)
10ff1c: 89 4d c4 mov %ecx,-0x3c(%ebp)
10ff1f: e8 b8 d3 00 00 call 11d2dc <__moddi3>
10ff24: 83 c4 10 add $0x10,%esp
10ff27: 89 c7 mov %eax,%edi
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
10ff29: 56 push %esi
10ff2a: 53 push %ebx
10ff2b: ff 75 cc pushl -0x34(%ebp)
10ff2e: ff 75 c8 pushl -0x38(%ebp)
10ff31: e8 52 d2 00 00 call 11d188 <__divdi3>
10ff36: 83 c4 10 add $0x10,%esp
10ff39: 89 c2 mov %eax,%edx
if ( start_offset ) {
10ff3b: 85 ff test %edi,%edi
10ff3d: 8b 4d c4 mov -0x3c(%ebp),%ecx
10ff40: 75 37 jne 10ff79 <IMFS_memfile_write+0xa3>
unsigned int last_byte;
unsigned int start_offset;
int copied;
const unsigned char *src;
src = source;
10ff42: 8b 75 14 mov 0x14(%ebp),%esi
/*
* Phase 1: possibly the last part of one block
*/
start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK;
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
if ( start_offset ) {
10ff45: 8b 5d 18 mov 0x18(%ebp),%ebx
10ff48: 89 5d d4 mov %ebx,-0x2c(%ebp)
status = IMFS_memfile_extend( the_jnode, zero_fill, last_byte );
if ( status )
return status;
}
copied = 0;
10ff4b: 31 db xor %ebx,%ebx
10ff4d: eb 69 jmp 10ffb8 <IMFS_memfile_write+0xe2>
last_byte = start + my_length;
if ( last_byte > the_jnode->info.file.size ) {
bool zero_fill = start > the_jnode->info.file.size;
status = IMFS_memfile_extend( the_jnode, zero_fill, last_byte );
10ff4f: 52 push %edx
10ff50: 50 push %eax
* in memory file, then extend the length.
*/
last_byte = start + my_length;
if ( last_byte > the_jnode->info.file.size ) {
bool zero_fill = start > the_jnode->info.file.size;
10ff51: b8 01 00 00 00 mov $0x1,%eax
10ff56: 39 5d cc cmp %ebx,-0x34(%ebp)
10ff59: 7f 09 jg 10ff64 <IMFS_memfile_write+0x8e><== NEVER TAKEN
10ff5b: 7c 05 jl 10ff62 <IMFS_memfile_write+0x8c><== NEVER TAKEN
10ff5d: 39 4d c8 cmp %ecx,-0x38(%ebp)
10ff60: 77 02 ja 10ff64 <IMFS_memfile_write+0x8e>
10ff62: 31 c0 xor %eax,%eax
status = IMFS_memfile_extend( the_jnode, zero_fill, last_byte );
10ff64: 50 push %eax
10ff65: ff 75 08 pushl 0x8(%ebp)
10ff68: e8 0d fe ff ff call 10fd7a <IMFS_memfile_extend>
if ( status )
10ff6d: 83 c4 10 add $0x10,%esp
10ff70: 85 c0 test %eax,%eax
10ff72: 74 93 je 10ff07 <IMFS_memfile_write+0x31>
10ff74: e9 d0 00 00 00 jmp 110049 <IMFS_memfile_write+0x173>
10ff79: 89 cb mov %ecx,%ebx
10ff7b: 29 fb sub %edi,%ebx
10ff7d: 3b 5d 18 cmp 0x18(%ebp),%ebx
10ff80: 76 03 jbe 10ff85 <IMFS_memfile_write+0xaf>
10ff82: 8b 5d 18 mov 0x18(%ebp),%ebx
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
if ( start_offset ) {
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset;
if ( to_copy > my_length )
to_copy = my_length;
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
10ff85: 50 push %eax
10ff86: 6a 00 push $0x0
10ff88: 52 push %edx
10ff89: ff 75 08 pushl 0x8(%ebp)
10ff8c: 89 55 c4 mov %edx,-0x3c(%ebp)
10ff8f: e8 2e f9 ff ff call 10f8c2 <IMFS_memfile_get_block_pointer>
if ( !block_ptr )
10ff94: 83 c4 10 add $0x10,%esp
10ff97: 85 c0 test %eax,%eax
10ff99: 8b 55 c4 mov -0x3c(%ebp),%edx
10ff9c: 0f 84 a1 00 00 00 je 110043 <IMFS_memfile_write+0x16d><== NEVER TAKEN
block,
to_copy,
src
);
#endif
memcpy( &(*block_ptr)[ start_offset ], src, to_copy );
10ffa2: 8b 00 mov (%eax),%eax
10ffa4: 01 f8 add %edi,%eax
src += to_copy;
10ffa6: 89 c7 mov %eax,%edi
10ffa8: 8b 75 14 mov 0x14(%ebp),%esi
10ffab: 89 d9 mov %ebx,%ecx
10ffad: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
block++;
10ffaf: 42 inc %edx
my_length -= to_copy;
10ffb0: 8b 7d 18 mov 0x18(%ebp),%edi
10ffb3: 29 df sub %ebx,%edi
10ffb5: 89 7d d4 mov %edi,-0x2c(%ebp)
/*
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
10ffb8: a1 b4 df 12 00 mov 0x12dfb4,%eax
10ffbd: 89 45 c8 mov %eax,-0x38(%ebp)
* IMFS_memfile_write
*
* This routine writes the specified data buffer into the in memory
* file pointed to by the_jnode. The file is extended as needed.
*/
MEMFILE_STATIC ssize_t IMFS_memfile_write(
10ffc0: 29 de sub %ebx,%esi
10ffc2: 89 75 d0 mov %esi,-0x30(%ebp)
/*
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
10ffc5: eb 2b jmp 10fff2 <IMFS_memfile_write+0x11c>
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
10ffc7: 50 push %eax
10ffc8: 6a 00 push $0x0
10ffca: 52 push %edx
10ffcb: ff 75 08 pushl 0x8(%ebp)
10ffce: 89 55 c4 mov %edx,-0x3c(%ebp)
10ffd1: e8 ec f8 ff ff call 10f8c2 <IMFS_memfile_get_block_pointer>
if ( !block_ptr )
10ffd6: 83 c4 10 add $0x10,%esp
10ffd9: 85 c0 test %eax,%eax
10ffdb: 8b 55 c4 mov -0x3c(%ebp),%edx
10ffde: 74 67 je 110047 <IMFS_memfile_write+0x171><== NEVER TAKEN
return copied;
#if 0
fprintf(stdout, "write %d in %d: %*s\n", to_copy, block, to_copy, src );
#endif
memcpy( &(*block_ptr)[ 0 ], src, to_copy );
10ffe0: 8b 00 mov (%eax),%eax
10ffe2: 89 c7 mov %eax,%edi
10ffe4: 8b 4d c8 mov -0x38(%ebp),%ecx
10ffe7: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
src += to_copy;
block++;
10ffe9: 42 inc %edx
my_length -= to_copy;
10ffea: 8b 7d c8 mov -0x38(%ebp),%edi
10ffed: 29 7d d4 sub %edi,-0x2c(%ebp)
* IMFS_memfile_write
*
* This routine writes the specified data buffer into the in memory
* file pointed to by the_jnode. The file is extended as needed.
*/
MEMFILE_STATIC ssize_t IMFS_memfile_write(
10fff0: 01 fb add %edi,%ebx
10fff2: 8b 75 d0 mov -0x30(%ebp),%esi
10fff5: 01 de add %ebx,%esi
/*
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
10fff7: 8b 45 d4 mov -0x2c(%ebp),%eax
10fffa: 3b 05 b4 df 12 00 cmp 0x12dfb4,%eax
110000: 73 c5 jae 10ffc7 <IMFS_memfile_write+0xf1>
* Phase 3: possibly the first part of one block
*/
IMFS_assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK );
to_copy = my_length;
if ( my_length ) {
110002: 85 c0 test %eax,%eax
110004: 74 1f je 110025 <IMFS_memfile_write+0x14f>
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
110006: 50 push %eax
110007: 6a 00 push $0x0
110009: 52 push %edx
11000a: ff 75 08 pushl 0x8(%ebp)
11000d: e8 b0 f8 ff ff call 10f8c2 <IMFS_memfile_get_block_pointer>
if ( !block_ptr )
110012: 83 c4 10 add $0x10,%esp
110015: 85 c0 test %eax,%eax
110017: 74 2e je 110047 <IMFS_memfile_write+0x171><== NEVER TAKEN
return copied;
#if 0
fprintf(stdout, "write %d in %d: %*s\n", to_copy, block, to_copy, src );
#endif
memcpy( &(*block_ptr)[ 0 ], src, my_length );
110019: 8b 00 mov (%eax),%eax
11001b: 89 c7 mov %eax,%edi
11001d: 8b 4d d4 mov -0x2c(%ebp),%ecx
110020: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
my_length = 0;
copied += to_copy;
110022: 03 5d d4 add -0x2c(%ebp),%ebx
}
IMFS_mtime_ctime_update( the_jnode );
110025: 50 push %eax
110026: 50 push %eax
110027: 6a 00 push $0x0
110029: 8d 45 e0 lea -0x20(%ebp),%eax
11002c: 50 push %eax
11002d: e8 7a 67 ff ff call 1067ac <gettimeofday>
110032: 8b 45 e0 mov -0x20(%ebp),%eax
110035: 8b 55 08 mov 0x8(%ebp),%edx
110038: 89 42 44 mov %eax,0x44(%edx)
11003b: 89 42 48 mov %eax,0x48(%edx)
return copied;
11003e: 83 c4 10 add $0x10,%esp
110041: eb 04 jmp 110047 <IMFS_memfile_write+0x171>
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset;
if ( to_copy > my_length )
to_copy = my_length;
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
if ( !block_ptr )
return copied;
110043: 31 c0 xor %eax,%eax
110045: eb 02 jmp 110049 <IMFS_memfile_write+0x173><== NOT EXECUTED
IMFS_assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK );
to_copy = my_length;
if ( my_length ) {
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
if ( !block_ptr )
110047: 89 d8 mov %ebx,%eax
}
IMFS_mtime_ctime_update( the_jnode );
return copied;
}
110049: 8d 65 f4 lea -0xc(%ebp),%esp
11004c: 5b pop %ebx
11004d: 5e pop %esi
11004e: 5f pop %edi
11004f: 5d pop %ebp
110050: c3 ret
00106124 <IMFS_mknod>:
const char *name,
size_t namelen,
mode_t mode,
dev_t dev
)
{
106124: 55 push %ebp
106125: 89 e5 mov %esp,%ebp
106127: 57 push %edi
106128: 56 push %esi
106129: 53 push %ebx
10612a: 83 ec 2c sub $0x2c,%esp
10612d: 8b 5d 08 mov 0x8(%ebp),%ebx
106130: 8b 75 18 mov 0x18(%ebp),%esi
106133: 8b 4d 1c mov 0x1c(%ebp),%ecx
dev_t dev,
IMFS_jnode_types_t *type,
IMFS_types_union *info
)
{
if ( S_ISDIR( mode ) ) {
106136: 8b 55 14 mov 0x14(%ebp),%edx
106139: 81 e2 00 f0 00 00 and $0xf000,%edx
10613f: 81 fa 00 40 00 00 cmp $0x4000,%edx
106145: 74 30 je 106177 <IMFS_mknod+0x53>
*type = IMFS_DIRECTORY;
} else if ( S_ISREG( mode ) ) {
106147: 81 fa 00 80 00 00 cmp $0x8000,%edx
10614d: 74 2c je 10617b <IMFS_mknod+0x57>
*type = IMFS_MEMORY_FILE;
} else if ( S_ISBLK( mode ) || S_ISCHR( mode ) ) {
10614f: 8b 7d 14 mov 0x14(%ebp),%edi
106152: 81 e7 00 b0 00 00 and $0xb000,%edi
106158: 81 ff 00 20 00 00 cmp $0x2000,%edi
10615e: 75 0d jne 10616d <IMFS_mknod+0x49>
*type = IMFS_DEVICE;
rtems_filesystem_split_dev_t(
106160: 89 75 d4 mov %esi,-0x2c(%ebp)
106163: 89 4d d8 mov %ecx,-0x28(%ebp)
if ( S_ISDIR( mode ) ) {
*type = IMFS_DIRECTORY;
} else if ( S_ISREG( mode ) ) {
*type = IMFS_MEMORY_FILE;
} else if ( S_ISBLK( mode ) || S_ISCHR( mode ) ) {
*type = IMFS_DEVICE;
106166: b8 01 00 00 00 mov $0x1,%eax
10616b: eb 1a jmp 106187 <IMFS_mknod+0x63>
rtems_filesystem_split_dev_t(
dev,
info->device.major,
info->device.minor
);
} else if (S_ISFIFO( mode )) {
10616d: 81 fa 00 10 00 00 cmp $0x1000,%edx
106173: 75 12 jne 106187 <IMFS_mknod+0x63> <== NEVER TAKEN
106175: eb 0b jmp 106182 <IMFS_mknod+0x5e>
IMFS_jnode_types_t *type,
IMFS_types_union *info
)
{
if ( S_ISDIR( mode ) ) {
*type = IMFS_DIRECTORY;
106177: 31 c0 xor %eax,%eax
106179: eb 0c jmp 106187 <IMFS_mknod+0x63>
} else if ( S_ISREG( mode ) ) {
*type = IMFS_MEMORY_FILE;
10617b: b8 04 00 00 00 mov $0x4,%eax
106180: eb 05 jmp 106187 <IMFS_mknod+0x63>
dev,
info->device.major,
info->device.minor
);
} else if (S_ISFIFO( mode )) {
*type = IMFS_FIFO;
106182: b8 06 00 00 00 mov $0x6,%eax
106187: 56 push %esi
106188: 56 push %esi
IMFS_types_union info;
IMFS_jnode_t *new_node;
get_type_and_info_by_mode_and_dev( mode, dev, &type, &info );
new_node = IMFS_create_node( parentloc, type, name, namelen, mode, &info );
106189: 8d 55 d4 lea -0x2c(%ebp),%edx
10618c: 52 push %edx
10618d: ff 75 14 pushl 0x14(%ebp)
106190: ff 75 10 pushl 0x10(%ebp)
106193: ff 75 0c pushl 0xc(%ebp)
size_t namelen,
mode_t mode,
const IMFS_types_union *info
)
{
const IMFS_fs_info_t *fs_info =
106196: 8b 53 14 mov 0x14(%ebx),%edx
(const IMFS_fs_info_t *) parentloc->mt_entry->fs_info;
return IMFS_create_node_with_control(
106199: 8b 52 08 mov 0x8(%edx),%edx
10619c: ff 74 82 08 pushl 0x8(%edx,%eax,4)
1061a0: 53 push %ebx
1061a1: e8 9a 71 00 00 call 10d340 <IMFS_create_node_with_control>
if ( new_node != NULL ) {
1061a6: 83 c4 20 add $0x20,%esp
1061a9: 85 c0 test %eax,%eax
1061ab: 74 2d je 1061da <IMFS_mknod+0xb6>
IMFS_jnode_t *parent = parentloc->node_access;
1061ad: 8b 5b 08 mov 0x8(%ebx),%ebx
IMFS_update_ctime( parent );
1061b0: 50 push %eax
1061b1: 50 push %eax
1061b2: 6a 00 push $0x0
1061b4: 8d 75 cc lea -0x34(%ebp),%esi
1061b7: 56 push %esi
1061b8: e8 ef 05 00 00 call 1067ac <gettimeofday>
1061bd: 8b 45 cc mov -0x34(%ebp),%eax
1061c0: 89 43 48 mov %eax,0x48(%ebx)
IMFS_update_mtime( parent );
1061c3: 5a pop %edx
1061c4: 59 pop %ecx
1061c5: 6a 00 push $0x0
1061c7: 56 push %esi
1061c8: e8 df 05 00 00 call 1067ac <gettimeofday>
1061cd: 8b 45 cc mov -0x34(%ebp),%eax
1061d0: 89 43 44 mov %eax,0x44(%ebx)
1061d3: 83 c4 10 add $0x10,%esp
size_t namelen,
mode_t mode,
dev_t dev
)
{
int rv = 0;
1061d6: 31 c0 xor %eax,%eax
1061d8: eb 03 jmp 1061dd <IMFS_mknod+0xb9>
IMFS_jnode_t *parent = parentloc->node_access;
IMFS_update_ctime( parent );
IMFS_update_mtime( parent );
} else {
rv = -1;
1061da: 83 c8 ff or $0xffffffff,%eax
}
return rv;
}
1061dd: 8d 65 f4 lea -0xc(%ebp),%esp
1061e0: 5b pop %ebx
1061e1: 5e pop %esi
1061e2: 5f pop %edi
1061e3: 5d pop %ebp
1061e4: c3 ret
001061e8 <IMFS_mount>:
#endif
#include "imfs.h"
int IMFS_mount( rtems_filesystem_mount_table_entry_t *mt_entry )
{
1061e8: 55 push %ebp
1061e9: 89 e5 mov %esp,%ebp
1061eb: 83 ec 08 sub $0x8,%esp
1061ee: 8b 55 08 mov 0x8(%ebp),%edx
int rv = 0;
IMFS_jnode_t *node = mt_entry->mt_point_node->location.node_access;
1061f1: 8b 42 20 mov 0x20(%edx),%eax
1061f4: 8b 40 08 mov 0x8(%eax),%eax
return node->control->imfs_type;
}
static inline bool IMFS_is_directory( const IMFS_jnode_t *node )
{
return node->control->imfs_type == IMFS_DIRECTORY;
1061f7: 8b 48 4c mov 0x4c(%eax),%ecx
if ( IMFS_is_directory( node ) ) {
1061fa: 83 39 00 cmpl $0x0,(%ecx)
1061fd: 75 1a jne 106219 <IMFS_mount+0x31>
if ( node->info.directory.mt_fs == NULL ) {
1061ff: 83 78 5c 00 cmpl $0x0,0x5c(%eax)
106203: 75 07 jne 10620c <IMFS_mount+0x24> <== NEVER TAKEN
node->info.directory.mt_fs = mt_entry;
106205: 89 50 5c mov %edx,0x5c(%eax)
#include "imfs.h"
int IMFS_mount( rtems_filesystem_mount_table_entry_t *mt_entry )
{
int rv = 0;
106208: 31 c0 xor %eax,%eax
10620a: eb 1b jmp 106227 <IMFS_mount+0x3f>
if ( IMFS_is_directory( node ) ) {
if ( node->info.directory.mt_fs == NULL ) {
node->info.directory.mt_fs = mt_entry;
} else {
errno = EBUSY;
10620c: e8 cb ac 00 00 call 110edc <__errno> <== NOT EXECUTED
106211: c7 00 10 00 00 00 movl $0x10,(%eax) <== NOT EXECUTED
106217: eb 0b jmp 106224 <IMFS_mount+0x3c> <== NOT EXECUTED
rv = -1;
}
} else {
errno = ENOTDIR;
106219: e8 be ac 00 00 call 110edc <__errno>
10621e: c7 00 14 00 00 00 movl $0x14,(%eax)
rv = -1;
106224: 83 c8 ff or $0xffffffff,%eax
}
return rv;
}
106227: c9 leave
106228: c3 ret
0010d6ae <IMFS_node_remove_directory>:
static IMFS_jnode_t *IMFS_node_remove_directory(
IMFS_jnode_t *node,
const IMFS_jnode_t *root_node
)
{
10d6ae: 55 push %ebp
10d6af: 89 e5 mov %esp,%ebp
10d6b1: 83 ec 08 sub $0x8,%esp
10d6b4: 8b 45 08 mov 0x8(%ebp),%eax
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
10d6b7: 8d 50 54 lea 0x54(%eax),%edx
if ( !rtems_chain_is_empty( &node->info.directory.Entries ) ) {
10d6ba: 39 50 50 cmp %edx,0x50(%eax)
10d6bd: 74 0d je 10d6cc <IMFS_node_remove_directory+0x1e>
errno = ENOTEMPTY;
10d6bf: e8 18 38 00 00 call 110edc <__errno>
10d6c4: c7 00 5a 00 00 00 movl $0x5a,(%eax)
10d6ca: eb 16 jmp 10d6e2 <IMFS_node_remove_directory+0x34>
node = NULL;
} else if ( node == root_node || IMFS_is_mount_point( node ) ) {
10d6cc: 3b 45 0c cmp 0xc(%ebp),%eax
10d6cf: 74 06 je 10d6d7 <IMFS_node_remove_directory+0x29>
10d6d1: 83 78 5c 00 cmpl $0x0,0x5c(%eax)
10d6d5: 74 0d je 10d6e4 <IMFS_node_remove_directory+0x36><== ALWAYS TAKEN
errno = EBUSY;
10d6d7: e8 00 38 00 00 call 110edc <__errno>
10d6dc: c7 00 10 00 00 00 movl $0x10,(%eax)
node = NULL;
10d6e2: 31 c0 xor %eax,%eax
}
return node;
}
10d6e4: c9 leave
10d6e5: c3 ret
0010622c <IMFS_node_type>:
#include "imfs.h"
rtems_filesystem_node_types_t IMFS_node_type(
const rtems_filesystem_location_info_t *loc
)
{
10622c: 55 push %ebp
10622d: 89 e5 mov %esp,%ebp
const IMFS_jnode_t *node = loc->node_access;
10622f: 8b 45 08 mov 0x8(%ebp),%eax
106232: 8b 50 08 mov 0x8(%eax),%edx
rtems_chain_extract_unprotected( &node->Node );
}
static inline IMFS_jnode_types_t IMFS_type( const IMFS_jnode_t *node )
{
return node->control->imfs_type;
106235: 8b 42 4c mov 0x4c(%edx),%eax
106238: 8b 00 mov (%eax),%eax
IMFS_jnode_types_t imfs_type = IMFS_type( node );
rtems_filesystem_node_types_t type;
switch ( imfs_type ) {
10623a: 83 f8 02 cmp $0x2,%eax
10623d: 74 09 je 106248 <IMFS_node_type+0x1c>
10623f: 83 f8 05 cmp $0x5,%eax
106242: 75 0c jne 106250 <IMFS_node_type+0x24> <== ALWAYS TAKEN
case IMFS_HARD_LINK:
type = IMFS_type( node->info.hard_link.link_node );
break;
case IMFS_LINEAR_FILE:
type = RTEMS_FILESYSTEM_MEMORY_FILE;
106244: b0 04 mov $0x4,%al <== NOT EXECUTED
106246: eb 08 jmp 106250 <IMFS_node_type+0x24> <== NOT EXECUTED
type = imfs_type;
break;
}
return type;
}
106248: 8b 42 50 mov 0x50(%edx),%eax
10624b: 8b 40 4c mov 0x4c(%eax),%eax
10624e: 8b 00 mov (%eax),%eax
106250: 5d pop %ebp
106251: c3 ret
0010627c <IMFS_rename>:
const rtems_filesystem_location_info_t *oldloc,
const rtems_filesystem_location_info_t *newparentloc,
const char *name,
size_t namelen
)
{
10627c: 55 push %ebp
10627d: 89 e5 mov %esp,%ebp
10627f: 57 push %edi
106280: 56 push %esi
106281: 53 push %ebx
106282: 83 ec 1c sub $0x1c,%esp
106285: 8b 75 14 mov 0x14(%ebp),%esi
int rv = 0;
IMFS_jnode_t *node = oldloc->node_access;
106288: 8b 45 0c mov 0xc(%ebp),%eax
10628b: 8b 58 08 mov 0x8(%eax),%ebx
IMFS_jnode_t *new_parent = newparentloc->node_access;
10628e: 8b 45 10 mov 0x10(%ebp),%eax
106291: 8b 50 08 mov 0x8(%eax),%edx
/*
* FIXME: Due to insufficient checks we can create inaccessible nodes with
* this operation.
*/
if ( node->Parent != NULL ) {
106294: 83 7b 08 00 cmpl $0x0,0x8(%ebx)
106298: 74 5c je 1062f6 <IMFS_rename+0x7a> <== NEVER TAKEN
if ( namelen < IMFS_NAME_MAX ) {
10629a: 83 7d 18 1f cmpl $0x1f,0x18(%ebp)
10629e: 77 49 ja 1062e9 <IMFS_rename+0x6d> <== NEVER TAKEN
memcpy( node->name, name, namelen );
1062a0: 8d 43 0c lea 0xc(%ebx),%eax
1062a3: 89 c7 mov %eax,%edi
1062a5: 8b 4d 18 mov 0x18(%ebp),%ecx
1062a8: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
node->name [namelen] = '\0';
1062aa: 8b 45 18 mov 0x18(%ebp),%eax
1062ad: c6 44 03 0c 00 movb $0x0,0xc(%ebx,%eax,1)
)
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
1062b2: 8b 0b mov (%ebx),%ecx
previous = the_node->previous;
1062b4: 8b 43 04 mov 0x4(%ebx),%eax
next->previous = previous;
1062b7: 89 41 04 mov %eax,0x4(%ecx)
previous->next = next;
1062ba: 89 08 mov %ecx,(%eax)
static inline void IMFS_add_to_directory(
IMFS_jnode_t *dir,
IMFS_jnode_t *node
)
{
node->Parent = dir;
1062bc: 89 53 08 mov %edx,0x8(%ebx)
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
Chain_Node *old_last = tail->previous;
1062bf: 8b 42 58 mov 0x58(%edx),%eax
RTEMS_INLINE_ROUTINE void _Chain_Append_unprotected(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
1062c2: 8d 4a 54 lea 0x54(%edx),%ecx
1062c5: 89 0b mov %ecx,(%ebx)
Chain_Node *old_last = tail->previous;
the_node->next = tail;
tail->previous = the_node;
1062c7: 89 5a 58 mov %ebx,0x58(%edx)
old_last->next = the_node;
1062ca: 89 18 mov %ebx,(%eax)
the_node->previous = old_last;
1062cc: 89 43 04 mov %eax,0x4(%ebx)
IMFS_remove_from_directory( node );
IMFS_add_to_directory( new_parent, node );
IMFS_update_ctime( node );
1062cf: 50 push %eax
1062d0: 50 push %eax
1062d1: 6a 00 push $0x0
1062d3: 8d 45 e0 lea -0x20(%ebp),%eax
1062d6: 50 push %eax
1062d7: e8 d0 04 00 00 call 1067ac <gettimeofday>
1062dc: 8b 45 e0 mov -0x20(%ebp),%eax
1062df: 89 43 48 mov %eax,0x48(%ebx)
1062e2: 83 c4 10 add $0x10,%esp
const rtems_filesystem_location_info_t *newparentloc,
const char *name,
size_t namelen
)
{
int rv = 0;
1062e5: 31 c0 xor %eax,%eax
1062e7: eb 1b jmp 106304 <IMFS_rename+0x88>
IMFS_remove_from_directory( node );
IMFS_add_to_directory( new_parent, node );
IMFS_update_ctime( node );
} else {
errno = ENAMETOOLONG;
1062e9: e8 ee ab 00 00 call 110edc <__errno> <== NOT EXECUTED
1062ee: c7 00 5b 00 00 00 movl $0x5b,(%eax) <== NOT EXECUTED
1062f4: eb 0b jmp 106301 <IMFS_rename+0x85> <== NOT EXECUTED
rv = -1;
}
} else {
errno = EINVAL;
1062f6: e8 e1 ab 00 00 call 110edc <__errno> <== NOT EXECUTED
1062fb: c7 00 16 00 00 00 movl $0x16,(%eax) <== NOT EXECUTED
rv = -1;
106301: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
}
return rv;
}
106304: 8d 65 f4 lea -0xc(%ebp),%esp
106307: 5b pop %ebx
106308: 5e pop %esi
106309: 5f pop %edi
10630a: 5d pop %ebp
10630b: c3 ret
001063d4 <IMFS_unmount>:
#endif
#include "imfs.h"
int IMFS_unmount( rtems_filesystem_mount_table_entry_t *mt_entry )
{
1063d4: 55 push %ebp
1063d5: 89 e5 mov %esp,%ebp
1063d7: 83 ec 08 sub $0x8,%esp
1063da: 8b 55 08 mov 0x8(%ebp),%edx
int rv = 0;
IMFS_jnode_t *node = mt_entry->mt_point_node->location.node_access;
1063dd: 8b 42 20 mov 0x20(%edx),%eax
1063e0: 8b 40 08 mov 0x8(%eax),%eax
return node->control->imfs_type;
}
static inline bool IMFS_is_directory( const IMFS_jnode_t *node )
{
return node->control->imfs_type == IMFS_DIRECTORY;
1063e3: 8b 48 4c mov 0x4c(%eax),%ecx
if ( IMFS_is_directory( node ) ) {
1063e6: 83 39 00 cmpl $0x0,(%ecx)
1063e9: 75 1d jne 106408 <IMFS_unmount+0x34> <== NEVER TAKEN
if ( node->info.directory.mt_fs == mt_entry ) {
1063eb: 39 50 5c cmp %edx,0x5c(%eax)
1063ee: 75 0b jne 1063fb <IMFS_unmount+0x27> <== NEVER TAKEN
node->info.directory.mt_fs = NULL;
1063f0: c7 40 5c 00 00 00 00 movl $0x0,0x5c(%eax)
#include "imfs.h"
int IMFS_unmount( rtems_filesystem_mount_table_entry_t *mt_entry )
{
int rv = 0;
1063f7: 31 c0 xor %eax,%eax
1063f9: eb 1b jmp 106416 <IMFS_unmount+0x42>
if ( IMFS_is_directory( node ) ) {
if ( node->info.directory.mt_fs == mt_entry ) {
node->info.directory.mt_fs = NULL;
} else {
errno = EINVAL;
1063fb: e8 dc aa 00 00 call 110edc <__errno> <== NOT EXECUTED
106400: c7 00 16 00 00 00 movl $0x16,(%eax) <== NOT EXECUTED
106406: eb 0b jmp 106413 <IMFS_unmount+0x3f> <== NOT EXECUTED
rv = -1;
}
} else {
errno = ENOTDIR;
106408: e8 cf aa 00 00 call 110edc <__errno> <== NOT EXECUTED
10640d: c7 00 14 00 00 00 movl $0x14,(%eax) <== NOT EXECUTED
rv = -1;
106413: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
}
return rv;
}
106416: c9 leave
106417: c3 ret
001208e4 <Stack_check_Dump_threads_usage>:
static rtems_printk_plugin_t print_handler;
static void Stack_check_Dump_threads_usage(
Thread_Control *the_thread
)
{
1208e4: 55 push %ebp <== NOT EXECUTED
1208e5: 89 e5 mov %esp,%ebp <== NOT EXECUTED
1208e7: 57 push %edi <== NOT EXECUTED
1208e8: 56 push %esi <== NOT EXECUTED
1208e9: 53 push %ebx <== NOT EXECUTED
1208ea: 83 ec 2c sub $0x2c,%esp <== NOT EXECUTED
1208ed: 8b 5d 08 mov 0x8(%ebp),%ebx <== NOT EXECUTED
/*
* Obtain interrupt stack information
*/
#if (CPU_ALLOCATE_INTERRUPT_STACK == TRUE)
if (the_thread == (Thread_Control *) -1) {
1208f0: 83 fb ff cmp $0xffffffff,%ebx <== NOT EXECUTED
1208f3: 75 1d jne 120912 <Stack_check_Dump_threads_usage+0x2e><== NOT EXECUTED
if (!Stack_check_Interrupt_stack.area)
1208f5: 83 3d 1c ec 16 00 00 cmpl $0x0,0x16ec1c <== NOT EXECUTED
1208fc: 0f 84 f2 00 00 00 je 1209f4 <Stack_check_Dump_threads_usage+0x110><== NOT EXECUTED
return;
stack = &Stack_check_Interrupt_stack;
120902: bf 18 ec 16 00 mov $0x16ec18,%edi <== NOT EXECUTED
the_thread = 0;
current = 0;
120907: c7 45 d0 00 00 00 00 movl $0x0,-0x30(%ebp) <== NOT EXECUTED
#if (CPU_ALLOCATE_INTERRUPT_STACK == TRUE)
if (the_thread == (Thread_Control *) -1) {
if (!Stack_check_Interrupt_stack.area)
return;
stack = &Stack_check_Interrupt_stack;
the_thread = 0;
12090e: 31 db xor %ebx,%ebx <== NOT EXECUTED
120910: eb 0f jmp 120921 <Stack_check_Dump_threads_usage+0x3d><== NOT EXECUTED
current = 0;
} else
#endif
{
stack = &the_thread->Start.Initial_stack;
120912: 8d bb b4 00 00 00 lea 0xb4(%ebx),%edi <== NOT EXECUTED
current = (void *)_CPU_Context_Get_SP( &the_thread->Registers );
120918: 8b 8b c8 00 00 00 mov 0xc8(%ebx),%ecx <== NOT EXECUTED
12091e: 89 4d d0 mov %ecx,-0x30(%ebp) <== NOT EXECUTED
}
low = Stack_check_usable_stack_start(stack);
120921: 8b 47 04 mov 0x4(%edi),%eax <== NOT EXECUTED
120924: 8d 50 10 lea 0x10(%eax),%edx <== NOT EXECUTED
size = Stack_check_usable_stack_size(stack);
120927: 8b 0f mov (%edi),%ecx <== NOT EXECUTED
120929: 83 e9 10 sub $0x10,%ecx <== NOT EXECUTED
12092c: 89 4d d4 mov %ecx,-0x2c(%ebp) <== NOT EXECUTED
/*
* start at lower memory and find first word that does not
* match pattern
*/
base += PATTERN_SIZE_WORDS;
12092f: 83 c0 20 add $0x20,%eax <== NOT EXECUTED
for (ebase = base + length; base < ebase; base++)
120932: 83 e1 fc and $0xfffffffc,%ecx <== NOT EXECUTED
120935: 01 c1 add %eax,%ecx <== NOT EXECUTED
120937: eb 0b jmp 120944 <Stack_check_Dump_threads_usage+0x60><== NOT EXECUTED
if (*base != U32_PATTERN)
120939: 81 38 a5 a5 a5 a5 cmpl $0xa5a5a5a5,(%eax) <== NOT EXECUTED
12093f: 75 0b jne 12094c <Stack_check_Dump_threads_usage+0x68><== NOT EXECUTED
* start at lower memory and find first word that does not
* match pattern
*/
base += PATTERN_SIZE_WORDS;
for (ebase = base + length; base < ebase; base++)
120941: 83 c0 04 add $0x4,%eax <== NOT EXECUTED
120944: 39 c8 cmp %ecx,%eax <== NOT EXECUTED
120946: 72 f1 jb 120939 <Stack_check_Dump_threads_usage+0x55><== NOT EXECUTED
high_water_mark = Stack_check_find_high_water_mark(low, size);
if ( high_water_mark )
used = Stack_check_Calculate_used( low, size, high_water_mark );
else
used = 0;
120948: 31 f6 xor %esi,%esi <== NOT EXECUTED
12094a: eb 0d jmp 120959 <Stack_check_Dump_threads_usage+0x75><== NOT EXECUTED
12094c: 31 f6 xor %esi,%esi <== NOT EXECUTED
low = Stack_check_usable_stack_start(stack);
size = Stack_check_usable_stack_size(stack);
high_water_mark = Stack_check_find_high_water_mark(low, size);
if ( high_water_mark )
12094e: 85 c0 test %eax,%eax <== NOT EXECUTED
120950: 74 07 je 120959 <Stack_check_Dump_threads_usage+0x75><== NOT EXECUTED
used = Stack_check_Calculate_used( low, size, high_water_mark );
120952: 8b 75 d4 mov -0x2c(%ebp),%esi <== NOT EXECUTED
120955: 01 d6 add %edx,%esi <== NOT EXECUTED
120957: 29 c6 sub %eax,%esi <== NOT EXECUTED
else
used = 0;
#if (CPU_ALLOCATE_INTERRUPT_STACK == TRUE)
if ( the_thread )
120959: 85 db test %ebx,%ebx <== NOT EXECUTED
12095b: 74 31 je 12098e <Stack_check_Dump_threads_usage+0xaa><== NOT EXECUTED
#endif
{
(*print_handler)(
12095d: 8b 0d 48 da 16 00 mov 0x16da48,%ecx <== NOT EXECUTED
120963: 50 push %eax <== NOT EXECUTED
120964: 8d 45 e3 lea -0x1d(%ebp),%eax <== NOT EXECUTED
120967: 50 push %eax <== NOT EXECUTED
120968: 6a 05 push $0x5 <== NOT EXECUTED
12096a: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
12096d: 89 4d cc mov %ecx,-0x34(%ebp) <== NOT EXECUTED
120970: e8 0f fc fe ff call 110584 <rtems_object_get_name> <== NOT EXECUTED
120975: 50 push %eax <== NOT EXECUTED
120976: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
120979: 68 3b ff 14 00 push $0x14ff3b <== NOT EXECUTED
12097e: ff 35 44 da 16 00 pushl 0x16da44 <== NOT EXECUTED
120984: 8b 4d cc mov -0x34(%ebp),%ecx <== NOT EXECUTED
120987: ff d1 call *%ecx <== NOT EXECUTED
120989: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
12098c: eb 17 jmp 1209a5 <Stack_check_Dump_threads_usage+0xc1><== NOT EXECUTED
rtems_object_get_name( the_thread->Object.id, sizeof(name), name )
);
}
#if (CPU_ALLOCATE_INTERRUPT_STACK == TRUE)
else {
(*print_handler)( print_context, "0x%08" PRIx32 " INTR", ~0 );
12098e: 53 push %ebx <== NOT EXECUTED
12098f: 6a ff push $0xffffffff <== NOT EXECUTED
120991: 68 48 ff 14 00 push $0x14ff48 <== NOT EXECUTED
120996: ff 35 44 da 16 00 pushl 0x16da44 <== NOT EXECUTED
12099c: ff 15 48 da 16 00 call *0x16da48 <== NOT EXECUTED
1209a2: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
(*print_handler)(
print_context,
" %010p - %010p %010p %8" PRId32 " ",
stack->area,
stack->area + stack->size - 1,
1209a5: 8b 47 04 mov 0x4(%edi),%eax <== NOT EXECUTED
else {
(*print_handler)( print_context, "0x%08" PRIx32 " INTR", ~0 );
}
#endif
(*print_handler)(
1209a8: 51 push %ecx <== NOT EXECUTED
1209a9: 51 push %ecx <== NOT EXECUTED
1209aa: ff 75 d4 pushl -0x2c(%ebp) <== NOT EXECUTED
1209ad: ff 75 d0 pushl -0x30(%ebp) <== NOT EXECUTED
print_context,
" %010p - %010p %010p %8" PRId32 " ",
stack->area,
stack->area + stack->size - 1,
1209b0: 8b 17 mov (%edi),%edx <== NOT EXECUTED
else {
(*print_handler)( print_context, "0x%08" PRIx32 " INTR", ~0 );
}
#endif
(*print_handler)(
1209b2: 8d 54 10 ff lea -0x1(%eax,%edx,1),%edx <== NOT EXECUTED
1209b6: 52 push %edx <== NOT EXECUTED
1209b7: 50 push %eax <== NOT EXECUTED
1209b8: 68 56 ff 14 00 push $0x14ff56 <== NOT EXECUTED
1209bd: ff 35 44 da 16 00 pushl 0x16da44 <== NOT EXECUTED
1209c3: ff 15 48 da 16 00 call *0x16da48 <== NOT EXECUTED
stack->area + stack->size - 1,
current,
size
);
if (Stack_check_Initialized == 0) {
1209c9: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
1209cc: 83 3d 40 da 16 00 00 cmpl $0x0,0x16da40 <== NOT EXECUTED
1209d3: 75 09 jne 1209de <Stack_check_Dump_threads_usage+0xfa><== NOT EXECUTED
(*print_handler)( print_context, "Unavailable\n" );
1209d5: 52 push %edx <== NOT EXECUTED
1209d6: 52 push %edx <== NOT EXECUTED
1209d7: 68 74 ff 14 00 push $0x14ff74 <== NOT EXECUTED
1209dc: eb 07 jmp 1209e5 <Stack_check_Dump_threads_usage+0x101><== NOT EXECUTED
} else {
(*print_handler)( print_context, "%8" PRId32 "\n", used );
1209de: 50 push %eax <== NOT EXECUTED
1209df: 56 push %esi <== NOT EXECUTED
1209e0: 68 81 ff 14 00 push $0x14ff81 <== NOT EXECUTED
1209e5: ff 35 44 da 16 00 pushl 0x16da44 <== NOT EXECUTED
1209eb: ff 15 48 da 16 00 call *0x16da48 <== NOT EXECUTED
1209f1: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
}
1209f4: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
1209f7: 5b pop %ebx <== NOT EXECUTED
1209f8: 5e pop %esi <== NOT EXECUTED
1209f9: 5f pop %edi <== NOT EXECUTED
1209fa: 5d pop %ebp <== NOT EXECUTED
1209fb: c3 ret <== NOT EXECUTED
00120aaa <Stack_check_report_blown_task>:
Thread_Control *running,
bool pattern_ok
) RTEMS_COMPILER_NO_RETURN_ATTRIBUTE;
void Stack_check_report_blown_task(Thread_Control *running, bool pattern_ok)
{
120aaa: 55 push %ebp <== NOT EXECUTED
120aab: 89 e5 mov %esp,%ebp <== NOT EXECUTED
120aad: 56 push %esi <== NOT EXECUTED
120aae: 53 push %ebx <== NOT EXECUTED
120aaf: 83 ec 3c sub $0x3c,%esp <== NOT EXECUTED
120ab2: 8b 5d 08 mov 0x8(%ebp),%ebx <== NOT EXECUTED
120ab5: 8a 4d 0c mov 0xc(%ebp),%cl <== NOT EXECUTED
Stack_Control *stack = &running->Start.Initial_stack;
void *pattern_area = Stack_check_Get_pattern(stack);
120ab8: 8b b3 b8 00 00 00 mov 0xb8(%ebx),%esi <== NOT EXECUTED
char name[32];
printk("BLOWN STACK!!!\n");
120abe: 68 87 ff 14 00 push $0x14ff87 <== NOT EXECUTED
120ac3: 88 4d d4 mov %cl,-0x2c(%ebp) <== NOT EXECUTED
120ac6: e8 91 67 fe ff call 10725c <printk> <== NOT EXECUTED
printk("task control block: 0x%08" PRIxPTR "\n", running);
120acb: 58 pop %eax <== NOT EXECUTED
120acc: 5a pop %edx <== NOT EXECUTED
120acd: 53 push %ebx <== NOT EXECUTED
120ace: 68 97 ff 14 00 push $0x14ff97 <== NOT EXECUTED
120ad3: e8 84 67 fe ff call 10725c <printk> <== NOT EXECUTED
printk("task ID: 0x%08lx\n", (unsigned long) running->Object.id);
120ad8: 59 pop %ecx <== NOT EXECUTED
120ad9: 58 pop %eax <== NOT EXECUTED
120ada: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
120add: 68 b4 ff 14 00 push $0x14ffb4 <== NOT EXECUTED
120ae2: e8 75 67 fe ff call 10725c <printk> <== NOT EXECUTED
printk(
120ae7: 58 pop %eax <== NOT EXECUTED
120ae8: 5a pop %edx <== NOT EXECUTED
120ae9: ff 73 0c pushl 0xc(%ebx) <== NOT EXECUTED
120aec: 68 c6 ff 14 00 push $0x14ffc6 <== NOT EXECUTED
120af1: e8 66 67 fe ff call 10725c <printk> <== NOT EXECUTED
"task name: 0x%08" PRIx32 "\n",
running->Object.name.name_u32
);
printk(
120af6: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
120af9: 8d 45 d8 lea -0x28(%ebp),%eax <== NOT EXECUTED
120afc: 50 push %eax <== NOT EXECUTED
120afd: 6a 20 push $0x20 <== NOT EXECUTED
120aff: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
120b02: e8 7d fa fe ff call 110584 <rtems_object_get_name> <== NOT EXECUTED
120b07: 59 pop %ecx <== NOT EXECUTED
120b08: 5a pop %edx <== NOT EXECUTED
120b09: 50 push %eax <== NOT EXECUTED
120b0a: 68 da ff 14 00 push $0x14ffda <== NOT EXECUTED
120b0f: e8 48 67 fe ff call 10725c <printk> <== NOT EXECUTED
);
printk(
"task stack area (%lu Bytes): 0x%08" PRIxPTR " .. 0x%08" PRIxPTR "\n",
(unsigned long) stack->size,
stack->area,
((char *) stack->area + stack->size)
120b14: 8b 93 b8 00 00 00 mov 0xb8(%ebx),%edx <== NOT EXECUTED
120b1a: 8b 83 b4 00 00 00 mov 0xb4(%ebx),%eax <== NOT EXECUTED
);
printk(
"task name string: %s\n",
rtems_object_get_name(running->Object.id, sizeof(name), name)
);
printk(
120b20: 8d 1c 02 lea (%edx,%eax,1),%ebx <== NOT EXECUTED
120b23: 53 push %ebx <== NOT EXECUTED
120b24: 52 push %edx <== NOT EXECUTED
120b25: 50 push %eax <== NOT EXECUTED
120b26: 68 f0 ff 14 00 push $0x14fff0 <== NOT EXECUTED
120b2b: e8 2c 67 fe ff call 10725c <printk> <== NOT EXECUTED
"task stack area (%lu Bytes): 0x%08" PRIxPTR " .. 0x%08" PRIxPTR "\n",
(unsigned long) stack->size,
stack->area,
((char *) stack->area + stack->size)
);
if (!pattern_ok) {
120b30: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
120b33: 8a 4d d4 mov -0x2c(%ebp),%cl <== NOT EXECUTED
120b36: 84 c9 test %cl,%cl <== NOT EXECUTED
120b38: 75 17 jne 120b51 <Stack_check_report_blown_task+0xa7><== NOT EXECUTED
printk(
120b3a: 8d 46 18 lea 0x18(%esi),%eax <== NOT EXECUTED
120b3d: 50 push %eax <== NOT EXECUTED
) RTEMS_COMPILER_NO_RETURN_ATTRIBUTE;
void Stack_check_report_blown_task(Thread_Control *running, bool pattern_ok)
{
Stack_Control *stack = &running->Start.Initial_stack;
void *pattern_area = Stack_check_Get_pattern(stack);
120b3e: 83 c6 08 add $0x8,%esi <== NOT EXECUTED
(unsigned long) stack->size,
stack->area,
((char *) stack->area + stack->size)
);
if (!pattern_ok) {
printk(
120b41: 56 push %esi <== NOT EXECUTED
120b42: 6a 10 push $0x10 <== NOT EXECUTED
120b44: 68 21 00 15 00 push $0x150021 <== NOT EXECUTED
120b49: e8 0e 67 fe ff call 10725c <printk> <== NOT EXECUTED
120b4e: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rtems_configuration_get_user_multiprocessing_table()->node
);
}
#endif
rtems_fatal_error_occurred(0x81);
120b51: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
120b54: 68 81 00 00 00 push $0x81 <== NOT EXECUTED
120b59: e8 2e 96 fe ff call 10a18c <rtems_fatal_error_occurred><== NOT EXECUTED
0010c774 <_CORE_RWLock_Release>:
*/
CORE_RWLock_Status _CORE_RWLock_Release(
CORE_RWLock_Control *the_rwlock
)
{
10c774: 55 push %ebp
10c775: 89 e5 mov %esp,%ebp
10c777: 53 push %ebx
10c778: 51 push %ecx
10c779: 8b 5d 08 mov 0x8(%ebp),%ebx
ISR_Level level;
Thread_Control *executing = _Thread_Executing;
10c77c: 8b 15 e4 18 13 00 mov 0x1318e4,%edx
* Otherwise, we have to block.
* If locked for reading and no waiters, then OK to read.
* If any thread is waiting, then we wait.
*/
_ISR_Disable( level );
10c782: 9c pushf
10c783: fa cli
10c784: 58 pop %eax
if ( the_rwlock->current_state == CORE_RWLOCK_UNLOCKED){
10c785: 8b 4b 44 mov 0x44(%ebx),%ecx
10c788: 85 c9 test %ecx,%ecx
10c78a: 75 0b jne 10c797 <_CORE_RWLock_Release+0x23>
_ISR_Enable( level );
10c78c: 50 push %eax
10c78d: 9d popf
executing->Wait.return_code = CORE_RWLOCK_UNAVAILABLE;
10c78e: c7 42 34 02 00 00 00 movl $0x2,0x34(%edx)
return CORE_RWLOCK_SUCCESSFUL;
10c795: eb 6c jmp 10c803 <_CORE_RWLock_Release+0x8f>
}
if ( the_rwlock->current_state == CORE_RWLOCK_LOCKED_FOR_READING ) {
10c797: 49 dec %ecx
10c798: 75 09 jne 10c7a3 <_CORE_RWLock_Release+0x2f>
the_rwlock->number_of_readers -= 1;
if ( the_rwlock->number_of_readers != 0 ) {
10c79a: ff 4b 48 decl 0x48(%ebx)
10c79d: 74 04 je 10c7a3 <_CORE_RWLock_Release+0x2f>
/* must be unlocked again */
_ISR_Enable( level );
10c79f: 50 push %eax
10c7a0: 9d popf
return CORE_RWLOCK_SUCCESSFUL;
10c7a1: eb 60 jmp 10c803 <_CORE_RWLock_Release+0x8f>
}
}
/* CORE_RWLOCK_LOCKED_FOR_WRITING or READING with readers */
executing->Wait.return_code = CORE_RWLOCK_SUCCESSFUL;
10c7a3: c7 42 34 00 00 00 00 movl $0x0,0x34(%edx)
/*
* Implicitly transition to "unlocked" and find another thread interested
* in obtaining this rwlock.
*/
the_rwlock->current_state = CORE_RWLOCK_UNLOCKED;
10c7aa: c7 43 44 00 00 00 00 movl $0x0,0x44(%ebx)
_ISR_Enable( level );
10c7b1: 50 push %eax
10c7b2: 9d popf
next = _Thread_queue_Dequeue( &the_rwlock->Wait_queue );
10c7b3: 83 ec 0c sub $0xc,%esp
10c7b6: 53 push %ebx
10c7b7: e8 80 18 00 00 call 10e03c <_Thread_queue_Dequeue>
if ( next ) {
10c7bc: 83 c4 10 add $0x10,%esp
10c7bf: 85 c0 test %eax,%eax
10c7c1: 74 40 je 10c803 <_CORE_RWLock_Release+0x8f>
if ( next->Wait.option == CORE_RWLOCK_THREAD_WAITING_FOR_WRITE ) {
10c7c3: 83 78 30 01 cmpl $0x1,0x30(%eax)
10c7c7: 75 09 jne 10c7d2 <_CORE_RWLock_Release+0x5e>
the_rwlock->current_state = CORE_RWLOCK_LOCKED_FOR_WRITING;
10c7c9: c7 43 44 02 00 00 00 movl $0x2,0x44(%ebx)
return CORE_RWLOCK_SUCCESSFUL;
10c7d0: eb 31 jmp 10c803 <_CORE_RWLock_Release+0x8f>
}
/*
* Must be CORE_RWLOCK_THREAD_WAITING_FOR_READING
*/
the_rwlock->number_of_readers += 1;
10c7d2: ff 43 48 incl 0x48(%ebx)
the_rwlock->current_state = CORE_RWLOCK_LOCKED_FOR_READING;
10c7d5: c7 43 44 01 00 00 00 movl $0x1,0x44(%ebx)
/*
* Now see if more readers can be let go.
*/
while ( 1 ) {
next = _Thread_queue_First( &the_rwlock->Wait_queue );
10c7dc: 83 ec 0c sub $0xc,%esp
10c7df: 53 push %ebx
10c7e0: e8 1b 1c 00 00 call 10e400 <_Thread_queue_First>
if ( !next ||
10c7e5: 83 c4 10 add $0x10,%esp
10c7e8: 85 c0 test %eax,%eax
10c7ea: 74 17 je 10c803 <_CORE_RWLock_Release+0x8f>
10c7ec: 83 78 30 01 cmpl $0x1,0x30(%eax)
10c7f0: 74 11 je 10c803 <_CORE_RWLock_Release+0x8f><== NEVER TAKEN
next->Wait.option == CORE_RWLOCK_THREAD_WAITING_FOR_WRITE )
return CORE_RWLOCK_SUCCESSFUL;
the_rwlock->number_of_readers += 1;
10c7f2: ff 43 48 incl 0x48(%ebx)
_Thread_queue_Extract( &the_rwlock->Wait_queue, next );
10c7f5: 52 push %edx
10c7f6: 52 push %edx
10c7f7: 50 push %eax
10c7f8: 53 push %ebx
10c7f9: e8 fa 1a 00 00 call 10e2f8 <_Thread_queue_Extract>
}
10c7fe: 83 c4 10 add $0x10,%esp
10c801: eb d9 jmp 10c7dc <_CORE_RWLock_Release+0x68>
}
/* indentation is to match _ISR_Disable at top */
return CORE_RWLOCK_SUCCESSFUL;
}
10c803: 31 c0 xor %eax,%eax
10c805: 8b 5d fc mov -0x4(%ebp),%ebx
10c808: c9 leave
10c809: c3 ret
0010c80c <_CORE_RWLock_Timeout>:
void _CORE_RWLock_Timeout(
Objects_Id id,
void *ignored
)
{
10c80c: 55 push %ebp
10c80d: 89 e5 mov %esp,%ebp
10c80f: 83 ec 20 sub $0x20,%esp
Thread_Control *the_thread;
Objects_Locations location;
the_thread = _Thread_Get( id, &location );
10c812: 8d 45 f4 lea -0xc(%ebp),%eax
10c815: 50 push %eax
10c816: ff 75 08 pushl 0x8(%ebp)
10c819: e8 d6 14 00 00 call 10dcf4 <_Thread_Get>
switch ( location ) {
10c81e: 83 c4 10 add $0x10,%esp
10c821: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
10c825: 75 1c jne 10c843 <_CORE_RWLock_Timeout+0x37><== NEVER TAKEN
#if defined(RTEMS_MULTIPROCESSING)
case OBJECTS_REMOTE: /* impossible */
#endif
break;
case OBJECTS_LOCAL:
_Thread_queue_Process_timeout( the_thread );
10c827: 83 ec 0c sub $0xc,%esp
10c82a: 50 push %eax
10c82b: e8 84 1c 00 00 call 10e4b4 <_Thread_queue_Process_timeout>
*
* This routine decrements the thread dispatch level.
*/
RTEMS_INLINE_ROUTINE uint32_t _Thread_Dispatch_decrement_disable_level(void)
{
_Thread_Dispatch_disable_level--;
10c830: a1 dc 13 13 00 mov 0x1313dc,%eax
10c835: 48 dec %eax
10c836: a3 dc 13 13 00 mov %eax,0x1313dc
return _Thread_Dispatch_disable_level;
10c83b: a1 dc 13 13 00 mov 0x1313dc,%eax
10c840: 83 c4 10 add $0x10,%esp
_Thread_Unnest_dispatch();
break;
}
}
10c843: c9 leave
10c844: c3 ret
0010a9a4 <_CORE_semaphore_Surrender>:
CORE_semaphore_Status _CORE_semaphore_Surrender(
CORE_semaphore_Control *the_semaphore,
Objects_Id id,
CORE_semaphore_API_mp_support_callout api_semaphore_mp_support
)
{
10a9a4: 55 push %ebp
10a9a5: 89 e5 mov %esp,%ebp
10a9a7: 53 push %ebx
10a9a8: 83 ec 10 sub $0x10,%esp
10a9ab: 8b 5d 08 mov 0x8(%ebp),%ebx
ISR_Level level;
CORE_semaphore_Status status;
status = CORE_SEMAPHORE_STATUS_SUCCESSFUL;
if ( (the_thread = _Thread_queue_Dequeue(&the_semaphore->Wait_queue)) ) {
10a9ae: 53 push %ebx
10a9af: e8 c0 17 00 00 call 10c174 <_Thread_queue_Dequeue>
10a9b4: 83 c4 10 add $0x10,%esp
{
Thread_Control *the_thread;
ISR_Level level;
CORE_semaphore_Status status;
status = CORE_SEMAPHORE_STATUS_SUCCESSFUL;
10a9b7: 31 d2 xor %edx,%edx
if ( (the_thread = _Thread_queue_Dequeue(&the_semaphore->Wait_queue)) ) {
10a9b9: 85 c0 test %eax,%eax
10a9bb: 75 15 jne 10a9d2 <_CORE_semaphore_Surrender+0x2e>
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
(*api_semaphore_mp_support) ( the_thread, id );
#endif
} else {
_ISR_Disable( level );
10a9bd: 9c pushf
10a9be: fa cli
10a9bf: 59 pop %ecx
if ( the_semaphore->count < the_semaphore->Attributes.maximum_count )
10a9c0: 8b 43 48 mov 0x48(%ebx),%eax
the_semaphore->count += 1;
else
status = CORE_SEMAPHORE_MAXIMUM_COUNT_EXCEEDED;
10a9c3: b2 04 mov $0x4,%dl
(*api_semaphore_mp_support) ( the_thread, id );
#endif
} else {
_ISR_Disable( level );
if ( the_semaphore->count < the_semaphore->Attributes.maximum_count )
10a9c5: 3b 43 40 cmp 0x40(%ebx),%eax
10a9c8: 73 06 jae 10a9d0 <_CORE_semaphore_Surrender+0x2c><== NEVER TAKEN
the_semaphore->count += 1;
10a9ca: 40 inc %eax
10a9cb: 89 43 48 mov %eax,0x48(%ebx)
{
Thread_Control *the_thread;
ISR_Level level;
CORE_semaphore_Status status;
status = CORE_SEMAPHORE_STATUS_SUCCESSFUL;
10a9ce: 30 d2 xor %dl,%dl
_ISR_Disable( level );
if ( the_semaphore->count < the_semaphore->Attributes.maximum_count )
the_semaphore->count += 1;
else
status = CORE_SEMAPHORE_MAXIMUM_COUNT_EXCEEDED;
_ISR_Enable( level );
10a9d0: 51 push %ecx
10a9d1: 9d popf
}
return status;
}
10a9d2: 89 d0 mov %edx,%eax
10a9d4: 8b 5d fc mov -0x4(%ebp),%ebx
10a9d7: c9 leave
10a9d8: c3 ret
00109a10 <_Event_Surrender>:
*/
void _Event_Surrender(
Thread_Control *the_thread
)
{
109a10: 55 push %ebp
109a11: 89 e5 mov %esp,%ebp
109a13: 57 push %edi
109a14: 56 push %esi
109a15: 53 push %ebx
109a16: 83 ec 1c sub $0x1c,%esp
109a19: 8b 5d 08 mov 0x8(%ebp),%ebx
rtems_event_set event_condition;
rtems_event_set seized_events;
rtems_option option_set;
RTEMS_API_Control *api;
api = the_thread->API_Extensions[ THREAD_API_RTEMS ];
109a1c: 8b b3 e4 00 00 00 mov 0xe4(%ebx),%esi
option_set = (rtems_option) the_thread->Wait.option;
109a22: 8b 43 30 mov 0x30(%ebx),%eax
109a25: 89 45 e0 mov %eax,-0x20(%ebp)
_ISR_Disable( level );
109a28: 9c pushf
109a29: fa cli
109a2a: 58 pop %eax
pending_events = api->pending_events;
109a2b: 8b 16 mov (%esi),%edx
109a2d: 89 55 e4 mov %edx,-0x1c(%ebp)
event_condition = (rtems_event_set) the_thread->Wait.count;
109a30: 8b 4b 24 mov 0x24(%ebx),%ecx
seized_events = _Event_sets_Get( pending_events, event_condition );
/*
* No events were seized in this operation
*/
if ( _Event_sets_Is_empty( seized_events ) ) {
109a33: 21 ca and %ecx,%edx
109a35: 75 05 jne 109a3c <_Event_Surrender+0x2c>
109a37: e9 ab 00 00 00 jmp 109ae7 <_Event_Surrender+0xd7>
/*
* If we are in an ISR and sending to the current thread, then
* we have a critical section issue to deal with.
*/
if ( _ISR_Is_in_progress() &&
109a3c: 83 3d e8 e8 12 00 00 cmpl $0x0,0x12e8e8
109a43: 74 47 je 109a8c <_Event_Surrender+0x7c>
109a45: 3b 1d ec e8 12 00 cmp 0x12e8ec,%ebx
109a4b: 75 3f jne 109a8c <_Event_Surrender+0x7c>
_Thread_Is_executing( the_thread ) &&
((_Event_Sync_state == THREAD_BLOCKING_OPERATION_TIMEOUT) ||
109a4d: 8b 3d c8 ec 12 00 mov 0x12ecc8,%edi
/*
* If we are in an ISR and sending to the current thread, then
* we have a critical section issue to deal with.
*/
if ( _ISR_Is_in_progress() &&
_Thread_Is_executing( the_thread ) &&
109a53: 83 ff 02 cmp $0x2,%edi
109a56: 74 09 je 109a61 <_Event_Surrender+0x51> <== NEVER TAKEN
((_Event_Sync_state == THREAD_BLOCKING_OPERATION_TIMEOUT) ||
(_Event_Sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED)) ) {
109a58: 8b 3d c8 ec 12 00 mov 0x12ecc8,%edi
* If we are in an ISR and sending to the current thread, then
* we have a critical section issue to deal with.
*/
if ( _ISR_Is_in_progress() &&
_Thread_Is_executing( the_thread ) &&
((_Event_Sync_state == THREAD_BLOCKING_OPERATION_TIMEOUT) ||
109a5e: 4f dec %edi
109a5f: 75 2b jne 109a8c <_Event_Surrender+0x7c>
(_Event_Sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED)) ) {
if ( seized_events == event_condition || _Options_Is_any(option_set) ) {
109a61: 39 ca cmp %ecx,%edx
109a63: 74 06 je 109a6b <_Event_Surrender+0x5b>
109a65: f6 45 e0 02 testb $0x2,-0x20(%ebp)
109a69: 74 7c je 109ae7 <_Event_Surrender+0xd7> <== NEVER TAKEN
RTEMS_INLINE_ROUTINE rtems_event_set _Event_sets_Clear(
rtems_event_set the_event_set,
rtems_event_set the_mask
)
{
return ( the_event_set & ~(the_mask) );
109a6b: 89 d1 mov %edx,%ecx
109a6d: f7 d1 not %ecx
109a6f: 23 4d e4 and -0x1c(%ebp),%ecx
109a72: 89 0e mov %ecx,(%esi)
api->pending_events = _Event_sets_Clear( pending_events,seized_events );
the_thread->Wait.count = 0;
109a74: c7 43 24 00 00 00 00 movl $0x0,0x24(%ebx)
*(rtems_event_set *)the_thread->Wait.return_argument = seized_events;
109a7b: 8b 4b 28 mov 0x28(%ebx),%ecx
109a7e: 89 11 mov %edx,(%ecx)
_Event_Sync_state = THREAD_BLOCKING_OPERATION_SATISFIED;
109a80: c7 05 c8 ec 12 00 03 movl $0x3,0x12ecc8
109a87: 00 00 00
109a8a: eb 5b jmp 109ae7 <_Event_Surrender+0xd7>
}
/*
* Otherwise, this is a normal send to another thread
*/
if ( _States_Is_waiting_for_event( the_thread->current_state ) ) {
109a8c: f6 43 11 01 testb $0x1,0x11(%ebx)
109a90: 74 55 je 109ae7 <_Event_Surrender+0xd7>
if ( seized_events == event_condition || _Options_Is_any( option_set ) ) {
109a92: 39 ca cmp %ecx,%edx
109a94: 74 06 je 109a9c <_Event_Surrender+0x8c>
109a96: f6 45 e0 02 testb $0x2,-0x20(%ebp)
109a9a: 74 4b je 109ae7 <_Event_Surrender+0xd7> <== NEVER TAKEN
109a9c: 89 d1 mov %edx,%ecx
109a9e: f7 d1 not %ecx
109aa0: 23 4d e4 and -0x1c(%ebp),%ecx
109aa3: 89 0e mov %ecx,(%esi)
api->pending_events = _Event_sets_Clear( pending_events, seized_events );
the_thread->Wait.count = 0;
109aa5: c7 43 24 00 00 00 00 movl $0x0,0x24(%ebx)
*(rtems_event_set *)the_thread->Wait.return_argument = seized_events;
109aac: 8b 4b 28 mov 0x28(%ebx),%ecx
109aaf: 89 11 mov %edx,(%ecx)
_ISR_Flash( level );
109ab1: 50 push %eax
109ab2: 9d popf
109ab3: fa cli
if ( !_Watchdog_Is_active( &the_thread->Timer ) ) {
109ab4: 83 7b 50 02 cmpl $0x2,0x50(%ebx)
109ab8: 74 06 je 109ac0 <_Event_Surrender+0xb0>
_ISR_Enable( level );
109aba: 50 push %eax
109abb: 9d popf
RTEMS_INLINE_ROUTINE void _Thread_Unblock (
Thread_Control *the_thread
)
{
_Thread_Clear_state( the_thread, STATES_BLOCKED );
109abc: 51 push %ecx
109abd: 51 push %ecx
109abe: eb 17 jmp 109ad7 <_Event_Surrender+0xc7>
RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate(
Watchdog_Control *the_watchdog
)
{
the_watchdog->state = WATCHDOG_REMOVE_IT;
109ac0: c7 43 50 03 00 00 00 movl $0x3,0x50(%ebx)
_Thread_Unblock( the_thread );
} else {
_Watchdog_Deactivate( &the_thread->Timer );
_ISR_Enable( level );
109ac7: 50 push %eax
109ac8: 9d popf
(void) _Watchdog_Remove( &the_thread->Timer );
109ac9: 83 ec 0c sub $0xc,%esp
109acc: 8d 43 48 lea 0x48(%ebx),%eax
109acf: 50 push %eax
109ad0: e8 43 2f 00 00 call 10ca18 <_Watchdog_Remove>
109ad5: 58 pop %eax
109ad6: 5a pop %edx
109ad7: 68 f8 ff 03 10 push $0x1003fff8
109adc: 53 push %ebx
109add: e8 fa 1f 00 00 call 10badc <_Thread_Clear_state>
109ae2: 83 c4 10 add $0x10,%esp
109ae5: eb 02 jmp 109ae9 <_Event_Surrender+0xd9>
_Thread_Unblock( the_thread );
}
return;
}
}
_ISR_Enable( level );
109ae7: 50 push %eax
109ae8: 9d popf
}
109ae9: 8d 65 f4 lea -0xc(%ebp),%esp
109aec: 5b pop %ebx
109aed: 5e pop %esi
109aee: 5f pop %edi
109aef: 5d pop %ebp
109af0: c3 ret
00109af4 <_Event_Timeout>:
void _Event_Timeout(
Objects_Id id,
void *ignored
)
{
109af4: 55 push %ebp
109af5: 89 e5 mov %esp,%ebp
109af7: 83 ec 20 sub $0x20,%esp
Thread_Control *the_thread;
Objects_Locations location;
ISR_Level level;
the_thread = _Thread_Get( id, &location );
109afa: 8d 45 f4 lea -0xc(%ebp),%eax
109afd: 50 push %eax
109afe: ff 75 08 pushl 0x8(%ebp)
109b01: e8 26 23 00 00 call 10be2c <_Thread_Get>
switch ( location ) {
109b06: 83 c4 10 add $0x10,%esp
109b09: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
109b0d: 75 4e jne 109b5d <_Event_Timeout+0x69> <== NEVER TAKEN
*
* If it is not satisfied, then it is "nothing happened" and
* this is the "timeout" transition. After a request is satisfied,
* a timeout is not allowed to occur.
*/
_ISR_Disable( level );
109b0f: 9c pushf
109b10: fa cli
109b11: 5a pop %edx
_ISR_Enable( level );
return;
}
#endif
the_thread->Wait.count = 0;
109b12: c7 40 24 00 00 00 00 movl $0x0,0x24(%eax)
if ( _Thread_Is_executing( the_thread ) ) {
109b19: 3b 05 ec e8 12 00 cmp 0x12e8ec,%eax
109b1f: 75 13 jne 109b34 <_Event_Timeout+0x40>
if ( _Event_Sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )
109b21: 8b 0d c8 ec 12 00 mov 0x12ecc8,%ecx
109b27: 49 dec %ecx
109b28: 75 0a jne 109b34 <_Event_Timeout+0x40>
_Event_Sync_state = THREAD_BLOCKING_OPERATION_TIMEOUT;
109b2a: c7 05 c8 ec 12 00 02 movl $0x2,0x12ecc8
109b31: 00 00 00
}
the_thread->Wait.return_code = RTEMS_TIMEOUT;
109b34: c7 40 34 06 00 00 00 movl $0x6,0x34(%eax)
_ISR_Enable( level );
109b3b: 52 push %edx
109b3c: 9d popf
109b3d: 52 push %edx
109b3e: 52 push %edx
109b3f: 68 f8 ff 03 10 push $0x1003fff8
109b44: 50 push %eax
109b45: e8 92 1f 00 00 call 10badc <_Thread_Clear_state>
*
* This routine decrements the thread dispatch level.
*/
RTEMS_INLINE_ROUTINE uint32_t _Thread_Dispatch_decrement_disable_level(void)
{
_Thread_Dispatch_disable_level--;
109b4a: a1 e4 e3 12 00 mov 0x12e3e4,%eax
109b4f: 48 dec %eax
109b50: a3 e4 e3 12 00 mov %eax,0x12e3e4
return _Thread_Dispatch_disable_level;
109b55: a1 e4 e3 12 00 mov 0x12e3e4,%eax
109b5a: 83 c4 10 add $0x10,%esp
case OBJECTS_REMOTE: /* impossible */
#endif
case OBJECTS_ERROR:
break;
}
}
109b5d: c9 leave
109b5e: c3 ret
0010f33f <_Heap_Extend>:
Heap_Control *heap,
void *extend_area_begin_ptr,
uintptr_t extend_area_size,
uintptr_t *extended_size_ptr
)
{
10f33f: 55 push %ebp
10f340: 89 e5 mov %esp,%ebp
10f342: 57 push %edi
10f343: 56 push %esi
10f344: 53 push %ebx
10f345: 83 ec 4c sub $0x4c,%esp
10f348: 8b 5d 08 mov 0x8(%ebp),%ebx
10f34b: 8b 45 10 mov 0x10(%ebp),%eax
Heap_Statistics *const stats = &heap->stats;
Heap_Block *const first_block = heap->first_block;
10f34e: 8b 4b 20 mov 0x20(%ebx),%ecx
10f351: 89 4d b8 mov %ecx,-0x48(%ebp)
Heap_Block *start_block = first_block;
Heap_Block *merge_below_block = NULL;
Heap_Block *merge_above_block = NULL;
Heap_Block *link_below_block = NULL;
Heap_Block *link_above_block = NULL;
Heap_Block *extend_first_block = NULL;
10f354: c7 45 e0 00 00 00 00 movl $0x0,-0x20(%ebp)
Heap_Block *extend_last_block = NULL;
10f35b: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
uintptr_t const page_size = heap->page_size;
10f362: 8b 73 10 mov 0x10(%ebx),%esi
10f365: 89 75 bc mov %esi,-0x44(%ebp)
uintptr_t const min_block_size = heap->min_block_size;
10f368: 8b 53 14 mov 0x14(%ebx),%edx
uintptr_t const extend_area_begin = (uintptr_t) extend_area_begin_ptr;
uintptr_t const extend_area_end = extend_area_begin + extend_area_size;
uintptr_t const free_size = stats->free_size;
10f36b: 8b 4b 30 mov 0x30(%ebx),%ecx
10f36e: 89 4d b4 mov %ecx,-0x4c(%ebp)
uintptr_t extend_first_block_size = 0;
uintptr_t extended_size = 0;
bool extend_area_ok = false;
if ( extend_area_end < extend_area_begin ) {
10f371: 8b 75 0c mov 0xc(%ebp),%esi
10f374: 01 c6 add %eax,%esi
10f376: 89 75 d4 mov %esi,-0x2c(%ebp)
10f379: 73 07 jae 10f382 <_Heap_Extend+0x43>
return false;
10f37b: 31 c0 xor %eax,%eax
10f37d: e9 cb 01 00 00 jmp 10f54d <_Heap_Extend+0x20e>
}
extend_area_ok = _Heap_Get_first_and_last_block(
10f382: 51 push %ecx
10f383: 51 push %ecx
10f384: 8d 4d e4 lea -0x1c(%ebp),%ecx
10f387: 51 push %ecx
10f388: 8d 4d e0 lea -0x20(%ebp),%ecx
10f38b: 51 push %ecx
10f38c: 52 push %edx
10f38d: ff 75 bc pushl -0x44(%ebp)
10f390: 50 push %eax
10f391: ff 75 0c pushl 0xc(%ebp)
10f394: e8 89 b8 ff ff call 10ac22 <_Heap_Get_first_and_last_block>
page_size,
min_block_size,
&extend_first_block,
&extend_last_block
);
if (!extend_area_ok ) {
10f399: 83 c4 20 add $0x20,%esp
10f39c: 84 c0 test %al,%al
10f39e: 74 db je 10f37b <_Heap_Extend+0x3c>
10f3a0: 8b 4d b8 mov -0x48(%ebp),%ecx
10f3a3: c7 45 c8 00 00 00 00 movl $0x0,-0x38(%ebp)
10f3aa: c7 45 c4 00 00 00 00 movl $0x0,-0x3c(%ebp)
10f3b1: 31 ff xor %edi,%edi
10f3b3: c7 45 cc 00 00 00 00 movl $0x0,-0x34(%ebp)
return false;
}
do {
uintptr_t const sub_area_begin = (start_block != first_block) ?
(uintptr_t) start_block : heap->area_begin;
10f3ba: 8b 73 18 mov 0x18(%ebx),%esi
10f3bd: 89 75 c0 mov %esi,-0x40(%ebp)
10f3c0: eb 03 jmp 10f3c5 <_Heap_Extend+0x86>
10f3c2: 89 4d c0 mov %ecx,-0x40(%ebp)
uintptr_t const sub_area_end = start_block->prev_size;
10f3c5: 8b 01 mov (%ecx),%eax
10f3c7: 89 45 d0 mov %eax,-0x30(%ebp)
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(
uintptr_t value,
uintptr_t alignment
)
{
return value - (value % alignment);
10f3ca: 89 c6 mov %eax,%esi
10f3cc: 83 ee 08 sub $0x8,%esi
10f3cf: 31 d2 xor %edx,%edx
10f3d1: f7 75 bc divl -0x44(%ebp)
uintptr_t alloc_begin,
uintptr_t page_size
)
{
return (Heap_Block *) (_Heap_Align_down( alloc_begin, page_size )
- HEAP_BLOCK_HEADER_SIZE);
10f3d4: 29 d6 sub %edx,%esi
Heap_Block *const end_block =
_Heap_Block_of_alloc_area( sub_area_end, page_size );
if (
10f3d6: 8b 55 c0 mov -0x40(%ebp),%edx
10f3d9: 39 55 d4 cmp %edx,-0x2c(%ebp)
10f3dc: 76 08 jbe 10f3e6 <_Heap_Extend+0xa7>
10f3de: 8b 45 d0 mov -0x30(%ebp),%eax
10f3e1: 39 45 0c cmp %eax,0xc(%ebp)
10f3e4: 72 95 jb 10f37b <_Heap_Extend+0x3c>
sub_area_end > extend_area_begin && extend_area_end > sub_area_begin
) {
return false;
}
if ( extend_area_end == sub_area_begin ) {
10f3e6: 8b 55 c0 mov -0x40(%ebp),%edx
10f3e9: 39 55 d4 cmp %edx,-0x2c(%ebp)
10f3ec: 74 0a je 10f3f8 <_Heap_Extend+0xb9>
merge_below_block = start_block;
} else if ( extend_area_end < sub_area_end ) {
10f3ee: 8b 45 d0 mov -0x30(%ebp),%eax
10f3f1: 39 45 d4 cmp %eax,-0x2c(%ebp)
10f3f4: 72 07 jb 10f3fd <_Heap_Extend+0xbe>
10f3f6: eb 08 jmp 10f400 <_Heap_Extend+0xc1>
sub_area_end > extend_area_begin && extend_area_end > sub_area_begin
) {
return false;
}
if ( extend_area_end == sub_area_begin ) {
10f3f8: 89 4d cc mov %ecx,-0x34(%ebp)
10f3fb: eb 03 jmp 10f400 <_Heap_Extend+0xc1>
merge_below_block = start_block;
} else if ( extend_area_end < sub_area_end ) {
10f3fd: 89 4d c4 mov %ecx,-0x3c(%ebp)
link_below_block = start_block;
}
if ( sub_area_end == extend_area_begin ) {
10f400: 8b 55 0c mov 0xc(%ebp),%edx
10f403: 39 55 d0 cmp %edx,-0x30(%ebp)
10f406: 75 09 jne 10f411 <_Heap_Extend+0xd2>
start_block->prev_size = extend_area_end;
10f408: 8b 45 d4 mov -0x2c(%ebp),%eax
10f40b: 89 01 mov %eax,(%ecx)
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_of_alloc_area(
uintptr_t alloc_begin,
uintptr_t page_size
)
{
return (Heap_Block *) (_Heap_Align_down( alloc_begin, page_size )
10f40d: 89 f7 mov %esi,%edi
10f40f: eb 05 jmp 10f416 <_Heap_Extend+0xd7>
merge_above_block = end_block;
} else if ( sub_area_end < extend_area_begin ) {
10f411: 73 03 jae 10f416 <_Heap_Extend+0xd7>
10f413: 89 75 c8 mov %esi,-0x38(%ebp)
- HEAP_BLOCK_HEADER_SIZE);
}
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Block_size( const Heap_Block *block )
{
return block->size_and_flag & ~HEAP_PREV_BLOCK_USED;
10f416: 8b 4e 04 mov 0x4(%esi),%ecx
10f419: 83 e1 fe and $0xfffffffe,%ecx
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
10f41c: 01 f1 add %esi,%ecx
link_above_block = end_block;
}
start_block = _Heap_Block_at( end_block, _Heap_Block_size( end_block ) );
} while ( start_block != first_block );
10f41e: 3b 4d b8 cmp -0x48(%ebp),%ecx
10f421: 75 9f jne 10f3c2 <_Heap_Extend+0x83>
if ( extend_area_begin < heap->area_begin ) {
10f423: 8b 4d 0c mov 0xc(%ebp),%ecx
10f426: 3b 4b 18 cmp 0x18(%ebx),%ecx
10f429: 73 05 jae 10f430 <_Heap_Extend+0xf1>
heap->area_begin = extend_area_begin;
10f42b: 89 4b 18 mov %ecx,0x18(%ebx)
10f42e: eb 0b jmp 10f43b <_Heap_Extend+0xfc>
} else if ( heap->area_end < extend_area_end ) {
10f430: 8b 75 d4 mov -0x2c(%ebp),%esi
10f433: 39 73 1c cmp %esi,0x1c(%ebx)
10f436: 73 03 jae 10f43b <_Heap_Extend+0xfc>
heap->area_end = extend_area_end;
10f438: 89 73 1c mov %esi,0x1c(%ebx)
}
extend_first_block_size =
(uintptr_t) extend_last_block - (uintptr_t) extend_first_block;
10f43b: 8b 45 e4 mov -0x1c(%ebp),%eax
10f43e: 8b 55 e0 mov -0x20(%ebp),%edx
heap->area_begin = extend_area_begin;
} else if ( heap->area_end < extend_area_end ) {
heap->area_end = extend_area_end;
}
extend_first_block_size =
10f441: 89 c1 mov %eax,%ecx
10f443: 29 d1 sub %edx,%ecx
(uintptr_t) extend_last_block - (uintptr_t) extend_first_block;
extend_first_block->prev_size = extend_area_end;
10f445: 8b 75 d4 mov -0x2c(%ebp),%esi
10f448: 89 32 mov %esi,(%edx)
extend_first_block->size_and_flag =
extend_first_block_size | HEAP_PREV_BLOCK_USED;
10f44a: 89 ce mov %ecx,%esi
10f44c: 83 ce 01 or $0x1,%esi
10f44f: 89 72 04 mov %esi,0x4(%edx)
_Heap_Protection_block_initialize( heap, extend_first_block );
extend_last_block->prev_size = extend_first_block_size;
10f452: 89 08 mov %ecx,(%eax)
extend_last_block->size_and_flag = 0;
10f454: c7 40 04 00 00 00 00 movl $0x0,0x4(%eax)
_Heap_Protection_block_initialize( heap, extend_last_block );
if ( (uintptr_t) extend_first_block < (uintptr_t) heap->first_block ) {
10f45b: 39 53 20 cmp %edx,0x20(%ebx)
10f45e: 76 05 jbe 10f465 <_Heap_Extend+0x126>
heap->first_block = extend_first_block;
10f460: 89 53 20 mov %edx,0x20(%ebx)
10f463: eb 08 jmp 10f46d <_Heap_Extend+0x12e>
} else if ( (uintptr_t) extend_last_block > (uintptr_t) heap->last_block ) {
10f465: 39 43 24 cmp %eax,0x24(%ebx)
10f468: 73 03 jae 10f46d <_Heap_Extend+0x12e>
heap->last_block = extend_last_block;
10f46a: 89 43 24 mov %eax,0x24(%ebx)
}
if ( merge_below_block != NULL ) {
10f46d: 83 7d cc 00 cmpl $0x0,-0x34(%ebp)
10f471: 74 35 je 10f4a8 <_Heap_Extend+0x169>
Heap_Control *heap,
uintptr_t extend_area_begin,
Heap_Block *first_block
)
{
uintptr_t const page_size = heap->page_size;
10f473: 8b 73 10 mov 0x10(%ebx),%esi
uintptr_t const new_first_block_alloc_begin =
_Heap_Align_up( extend_area_begin + HEAP_BLOCK_HEADER_SIZE, page_size );
10f476: 8b 4d 0c mov 0xc(%ebp),%ecx
10f479: 83 c1 08 add $0x8,%ecx
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_up(
uintptr_t value,
uintptr_t alignment
)
{
uintptr_t remainder = value % alignment;
10f47c: 89 c8 mov %ecx,%eax
10f47e: 31 d2 xor %edx,%edx
10f480: f7 f6 div %esi
if ( remainder != 0 ) {
10f482: 85 d2 test %edx,%edx
10f484: 74 04 je 10f48a <_Heap_Extend+0x14b>
return value - remainder + alignment;
10f486: 01 f1 add %esi,%ecx
10f488: 29 d1 sub %edx,%ecx
uintptr_t const new_first_block_begin =
10f48a: 8d 51 f8 lea -0x8(%ecx),%edx
uintptr_t const first_block_begin = (uintptr_t) first_block;
uintptr_t const new_first_block_size =
first_block_begin - new_first_block_begin;
Heap_Block *const new_first_block = (Heap_Block *) new_first_block_begin;
new_first_block->prev_size = first_block->prev_size;
10f48d: 8b 75 cc mov -0x34(%ebp),%esi
10f490: 8b 06 mov (%esi),%eax
10f492: 89 41 f8 mov %eax,-0x8(%ecx)
uintptr_t const new_first_block_alloc_begin =
_Heap_Align_up( extend_area_begin + HEAP_BLOCK_HEADER_SIZE, page_size );
uintptr_t const new_first_block_begin =
new_first_block_alloc_begin - HEAP_BLOCK_HEADER_SIZE;
uintptr_t const first_block_begin = (uintptr_t) first_block;
uintptr_t const new_first_block_size =
10f495: 89 f0 mov %esi,%eax
10f497: 29 d0 sub %edx,%eax
first_block_begin - new_first_block_begin;
Heap_Block *const new_first_block = (Heap_Block *) new_first_block_begin;
new_first_block->prev_size = first_block->prev_size;
new_first_block->size_and_flag = new_first_block_size | HEAP_PREV_BLOCK_USED;
10f499: 83 c8 01 or $0x1,%eax
10f49c: 89 42 04 mov %eax,0x4(%edx)
_Heap_Free_block( heap, new_first_block );
10f49f: 89 d8 mov %ebx,%eax
10f4a1: e8 7e fe ff ff call 10f324 <_Heap_Free_block>
10f4a6: eb 11 jmp 10f4b9 <_Heap_Extend+0x17a>
heap->last_block = extend_last_block;
}
if ( merge_below_block != NULL ) {
_Heap_Merge_below( heap, extend_area_begin, merge_below_block );
} else if ( link_below_block != NULL ) {
10f4a8: 83 7d c4 00 cmpl $0x0,-0x3c(%ebp)
10f4ac: 74 0b je 10f4b9 <_Heap_Extend+0x17a>
{
uintptr_t const last_block_begin = (uintptr_t) last_block;
uintptr_t const link_begin = (uintptr_t) link;
last_block->size_and_flag =
(link_begin - last_block_begin) | HEAP_PREV_BLOCK_USED;
10f4ae: 8b 55 c4 mov -0x3c(%ebp),%edx
10f4b1: 29 c2 sub %eax,%edx
10f4b3: 83 ca 01 or $0x1,%edx
10f4b6: 89 50 04 mov %edx,0x4(%eax)
link_below_block,
extend_last_block
);
}
if ( merge_above_block != NULL ) {
10f4b9: 85 ff test %edi,%edi
10f4bb: 74 33 je 10f4f0 <_Heap_Extend+0x1b1>
)
{
uintptr_t const page_size = heap->page_size;
uintptr_t const last_block_begin = (uintptr_t) last_block;
uintptr_t const last_block_new_size = _Heap_Align_down(
extend_area_end - last_block_begin - HEAP_BLOCK_HEADER_SIZE,
10f4bd: 8b 4d d4 mov -0x2c(%ebp),%ecx
10f4c0: 83 e9 08 sub $0x8,%ecx
uintptr_t extend_area_end
)
{
uintptr_t const page_size = heap->page_size;
uintptr_t const last_block_begin = (uintptr_t) last_block;
uintptr_t const last_block_new_size = _Heap_Align_down(
10f4c3: 29 f9 sub %edi,%ecx
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(
uintptr_t value,
uintptr_t alignment
)
{
return value - (value % alignment);
10f4c5: 89 c8 mov %ecx,%eax
10f4c7: 31 d2 xor %edx,%edx
10f4c9: f7 73 10 divl 0x10(%ebx)
10f4cc: 29 d1 sub %edx,%ecx
);
Heap_Block *const new_last_block =
_Heap_Block_at( last_block, last_block_new_size );
new_last_block->size_and_flag =
(last_block->size_and_flag - last_block_new_size)
10f4ce: 8b 47 04 mov 0x4(%edi),%eax
10f4d1: 29 c8 sub %ecx,%eax
| HEAP_PREV_BLOCK_USED;
10f4d3: 83 c8 01 or $0x1,%eax
10f4d6: 89 44 39 04 mov %eax,0x4(%ecx,%edi,1)
RTEMS_INLINE_ROUTINE void _Heap_Block_set_size(
Heap_Block *block,
uintptr_t size
)
{
uintptr_t flag = block->size_and_flag & HEAP_PREV_BLOCK_USED;
10f4da: 8b 47 04 mov 0x4(%edi),%eax
10f4dd: 83 e0 01 and $0x1,%eax
block->size_and_flag = size | flag;
10f4e0: 09 c8 or %ecx,%eax
10f4e2: 89 47 04 mov %eax,0x4(%edi)
_Heap_Block_set_size( last_block, last_block_new_size );
_Heap_Free_block( heap, last_block );
10f4e5: 89 fa mov %edi,%edx
10f4e7: 89 d8 mov %ebx,%eax
10f4e9: e8 36 fe ff ff call 10f324 <_Heap_Free_block>
10f4ee: eb 20 jmp 10f510 <_Heap_Extend+0x1d1>
);
}
if ( merge_above_block != NULL ) {
_Heap_Merge_above( heap, merge_above_block, extend_area_end );
} else if ( link_above_block != NULL ) {
10f4f0: 83 7d c8 00 cmpl $0x0,-0x38(%ebp)
10f4f4: 74 1a je 10f510 <_Heap_Extend+0x1d1>
_Heap_Link_above(
10f4f6: 8b 4d e4 mov -0x1c(%ebp),%ecx
RTEMS_INLINE_ROUTINE void _Heap_Block_set_size(
Heap_Block *block,
uintptr_t size
)
{
uintptr_t flag = block->size_and_flag & HEAP_PREV_BLOCK_USED;
10f4f9: 8b 75 c8 mov -0x38(%ebp),%esi
10f4fc: 8b 46 04 mov 0x4(%esi),%eax
10f4ff: 83 e0 01 and $0x1,%eax
)
{
uintptr_t const link_begin = (uintptr_t) link;
uintptr_t const first_block_begin = (uintptr_t) first_block;
_Heap_Block_set_size( link, first_block_begin - link_begin );
10f502: 8b 55 e0 mov -0x20(%ebp),%edx
10f505: 29 f2 sub %esi,%edx
block->size_and_flag = size | flag;
10f507: 09 d0 or %edx,%eax
10f509: 89 46 04 mov %eax,0x4(%esi)
last_block->size_and_flag |= HEAP_PREV_BLOCK_USED;
10f50c: 83 49 04 01 orl $0x1,0x4(%ecx)
extend_first_block,
extend_last_block
);
}
if ( merge_below_block == NULL && merge_above_block == NULL ) {
10f510: 85 ff test %edi,%edi
10f512: 75 10 jne 10f524 <_Heap_Extend+0x1e5>
10f514: 83 7d cc 00 cmpl $0x0,-0x34(%ebp)
10f518: 75 0a jne 10f524 <_Heap_Extend+0x1e5>
_Heap_Free_block( heap, extend_first_block );
10f51a: 8b 55 e0 mov -0x20(%ebp),%edx
10f51d: 89 d8 mov %ebx,%eax
10f51f: e8 00 fe ff ff call 10f324 <_Heap_Free_block>
*/
RTEMS_INLINE_ROUTINE void _Heap_Set_last_block_size( Heap_Control *heap )
{
_Heap_Block_set_size(
heap->last_block,
(uintptr_t) heap->first_block - (uintptr_t) heap->last_block
10f524: 8b 53 24 mov 0x24(%ebx),%edx
RTEMS_INLINE_ROUTINE void _Heap_Block_set_size(
Heap_Block *block,
uintptr_t size
)
{
uintptr_t flag = block->size_and_flag & HEAP_PREV_BLOCK_USED;
10f527: 8b 42 04 mov 0x4(%edx),%eax
10f52a: 83 e0 01 and $0x1,%eax
* This feature will be used to terminate the scattered heap area list. See
* also _Heap_Extend().
*/
RTEMS_INLINE_ROUTINE void _Heap_Set_last_block_size( Heap_Control *heap )
{
_Heap_Block_set_size(
10f52d: 8b 4b 20 mov 0x20(%ebx),%ecx
10f530: 29 d1 sub %edx,%ecx
uintptr_t size
)
{
uintptr_t flag = block->size_and_flag & HEAP_PREV_BLOCK_USED;
block->size_and_flag = size | flag;
10f532: 09 c8 or %ecx,%eax
10f534: 89 42 04 mov %eax,0x4(%edx)
}
_Heap_Set_last_block_size( heap );
extended_size = stats->free_size - free_size;
10f537: 8b 43 30 mov 0x30(%ebx),%eax
10f53a: 2b 45 b4 sub -0x4c(%ebp),%eax
/* Statistics */
stats->size += extended_size;
10f53d: 01 43 2c add %eax,0x2c(%ebx)
if ( extended_size_ptr != NULL )
10f540: 83 7d 14 00 cmpl $0x0,0x14(%ebp)
10f544: 74 05 je 10f54b <_Heap_Extend+0x20c> <== NEVER TAKEN
*extended_size_ptr = extended_size;
10f546: 8b 4d 14 mov 0x14(%ebp),%ecx
10f549: 89 01 mov %eax,(%ecx)
return true;
10f54b: b0 01 mov $0x1,%al
}
10f54d: 8d 65 f4 lea -0xc(%ebp),%esp
10f550: 5b pop %ebx
10f551: 5e pop %esi
10f552: 5f pop %edi
10f553: 5d pop %ebp
10f554: c3 ret
0010f2d4 <_Heap_Free>:
return do_free;
}
#endif
bool _Heap_Free( Heap_Control *heap, void *alloc_begin_ptr )
{
10f2d4: 55 push %ebp
10f2d5: 89 e5 mov %esp,%ebp
10f2d7: 57 push %edi
10f2d8: 56 push %esi
10f2d9: 53 push %ebx
10f2da: 83 ec 14 sub $0x14,%esp
10f2dd: 8b 4d 08 mov 0x8(%ebp),%ecx
10f2e0: 8b 45 0c mov 0xc(%ebp),%eax
/*
* If NULL return true so a free on NULL is considered a valid release. This
* is a special case that could be handled by the in heap check how-ever that
* would result in false being returned which is wrong.
*/
if ( alloc_begin_ptr == NULL ) {
10f2e3: 85 c0 test %eax,%eax
10f2e5: 0f 84 46 01 00 00 je 10f431 <_Heap_Free+0x15d>
10f2eb: 8d 58 f8 lea -0x8(%eax),%ebx
10f2ee: 31 d2 xor %edx,%edx
10f2f0: f7 71 10 divl 0x10(%ecx)
uintptr_t alloc_begin,
uintptr_t page_size
)
{
return (Heap_Block *) (_Heap_Align_down( alloc_begin, page_size )
- HEAP_BLOCK_HEADER_SIZE);
10f2f3: 29 d3 sub %edx,%ebx
RTEMS_INLINE_ROUTINE bool _Heap_Is_block_in_heap(
const Heap_Control *heap,
const Heap_Block *block
)
{
return (uintptr_t) block >= (uintptr_t) heap->first_block
10f2f5: 8b 41 20 mov 0x20(%ecx),%eax
10f2f8: 89 45 e8 mov %eax,-0x18(%ebp)
&& (uintptr_t) block <= (uintptr_t) heap->last_block;
10f2fb: 31 d2 xor %edx,%edx
10f2fd: 39 c3 cmp %eax,%ebx
10f2ff: 72 08 jb 10f309 <_Heap_Free+0x35>
10f301: 31 d2 xor %edx,%edx
10f303: 39 59 24 cmp %ebx,0x24(%ecx)
10f306: 0f 93 c2 setae %dl
alloc_begin = (uintptr_t) alloc_begin_ptr;
block = _Heap_Block_of_alloc_area( alloc_begin, heap->page_size );
if ( !_Heap_Is_block_in_heap( heap, block ) ) {
return false;
10f309: 31 c0 xor %eax,%eax
}
alloc_begin = (uintptr_t) alloc_begin_ptr;
block = _Heap_Block_of_alloc_area( alloc_begin, heap->page_size );
if ( !_Heap_Is_block_in_heap( heap, block ) ) {
10f30b: 85 d2 test %edx,%edx
10f30d: 0f 84 20 01 00 00 je 10f433 <_Heap_Free+0x15f>
--stats->used_blocks;
++stats->frees;
stats->free_size += block_size;
return( true );
}
10f313: 8b 43 04 mov 0x4(%ebx),%eax
10f316: 89 45 ec mov %eax,-0x14(%ebp)
- HEAP_BLOCK_HEADER_SIZE);
}
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Block_size( const Heap_Block *block )
{
return block->size_and_flag & ~HEAP_PREV_BLOCK_USED;
10f319: 89 c7 mov %eax,%edi
10f31b: 83 e7 fe and $0xfffffffe,%edi
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
10f31e: 8d 14 1f lea (%edi,%ebx,1),%edx
const Heap_Control *heap,
const Heap_Block *block
)
{
return (uintptr_t) block >= (uintptr_t) heap->first_block
&& (uintptr_t) block <= (uintptr_t) heap->last_block;
10f321: 31 f6 xor %esi,%esi
10f323: 3b 55 e8 cmp -0x18(%ebp),%edx
10f326: 72 0a jb 10f332 <_Heap_Free+0x5e> <== NEVER TAKEN
10f328: 31 c0 xor %eax,%eax
10f32a: 39 51 24 cmp %edx,0x24(%ecx)
10f32d: 0f 93 c0 setae %al
10f330: 89 c6 mov %eax,%esi
alloc_begin = (uintptr_t) alloc_begin_ptr;
block = _Heap_Block_of_alloc_area( alloc_begin, heap->page_size );
if ( !_Heap_Is_block_in_heap( heap, block ) ) {
return false;
10f332: 31 c0 xor %eax,%eax
_Heap_Protection_block_check( heap, block );
block_size = _Heap_Block_size( block );
next_block = _Heap_Block_at( block, block_size );
if ( !_Heap_Is_block_in_heap( heap, next_block ) ) {
10f334: 85 f6 test %esi,%esi
10f336: 0f 84 f7 00 00 00 je 10f433 <_Heap_Free+0x15f> <== NEVER TAKEN
--stats->used_blocks;
++stats->frees;
stats->free_size += block_size;
return( true );
}
10f33c: 8b 72 04 mov 0x4(%edx),%esi
return false;
}
_Heap_Protection_block_check( heap, next_block );
if ( !_Heap_Is_prev_used( next_block ) ) {
10f33f: f7 c6 01 00 00 00 test $0x1,%esi
10f345: 0f 84 e8 00 00 00 je 10f433 <_Heap_Free+0x15f> <== NEVER TAKEN
- HEAP_BLOCK_HEADER_SIZE);
}
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Block_size( const Heap_Block *block )
{
return block->size_and_flag & ~HEAP_PREV_BLOCK_USED;
10f34b: 83 e6 fe and $0xfffffffe,%esi
10f34e: 89 75 f0 mov %esi,-0x10(%ebp)
if ( !_Heap_Protection_determine_block_free( heap, block ) ) {
return true;
}
next_block_size = _Heap_Block_size( next_block );
next_is_free = next_block != heap->last_block
10f351: 8b 41 24 mov 0x24(%ecx),%eax
10f354: 89 45 e0 mov %eax,-0x20(%ebp)
&& !_Heap_Is_prev_used( _Heap_Block_at( next_block, next_block_size ));
10f357: 39 c2 cmp %eax,%edx
10f359: 74 0c je 10f367 <_Heap_Free+0x93>
10f35b: 8b 74 32 04 mov 0x4(%edx,%esi,1),%esi
10f35f: 83 f6 01 xor $0x1,%esi
10f362: 83 e6 01 and $0x1,%esi
10f365: eb 02 jmp 10f369 <_Heap_Free+0x95>
10f367: 31 f6 xor %esi,%esi
if ( !_Heap_Protection_determine_block_free( heap, block ) ) {
return true;
}
next_block_size = _Heap_Block_size( next_block );
next_is_free = next_block != heap->last_block
10f369: 89 f0 mov %esi,%eax
10f36b: 88 45 e7 mov %al,-0x19(%ebp)
&& !_Heap_Is_prev_used( _Heap_Block_at( next_block, next_block_size ));
if ( !_Heap_Is_prev_used( block ) ) {
10f36e: f6 45 ec 01 testb $0x1,-0x14(%ebp)
10f372: 75 5e jne 10f3d2 <_Heap_Free+0xfe>
uintptr_t const prev_size = block->prev_size;
10f374: 8b 33 mov (%ebx),%esi
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
10f376: 29 f3 sub %esi,%ebx
const Heap_Control *heap,
const Heap_Block *block
)
{
return (uintptr_t) block >= (uintptr_t) heap->first_block
&& (uintptr_t) block <= (uintptr_t) heap->last_block;
10f378: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
10f37f: 3b 5d e8 cmp -0x18(%ebp),%ebx
10f382: 72 0b jb 10f38f <_Heap_Free+0xbb> <== NEVER TAKEN
10f384: 31 c0 xor %eax,%eax
10f386: 39 5d e0 cmp %ebx,-0x20(%ebp)
10f389: 0f 93 c0 setae %al
10f38c: 89 45 ec mov %eax,-0x14(%ebp)
alloc_begin = (uintptr_t) alloc_begin_ptr;
block = _Heap_Block_of_alloc_area( alloc_begin, heap->page_size );
if ( !_Heap_Is_block_in_heap( heap, block ) ) {
return false;
10f38f: 31 c0 xor %eax,%eax
if ( !_Heap_Is_prev_used( block ) ) {
uintptr_t const prev_size = block->prev_size;
Heap_Block * const prev_block = _Heap_Block_at( block, -prev_size );
if ( !_Heap_Is_block_in_heap( heap, prev_block ) ) {
10f391: 83 7d ec 00 cmpl $0x0,-0x14(%ebp)
10f395: 0f 84 98 00 00 00 je 10f433 <_Heap_Free+0x15f> <== NEVER TAKEN
return( false );
}
/* As we always coalesce free blocks, the block that preceedes prev_block
must have been used. */
if ( !_Heap_Is_prev_used ( prev_block) ) {
10f39b: f6 43 04 01 testb $0x1,0x4(%ebx)
10f39f: 0f 84 8e 00 00 00 je 10f433 <_Heap_Free+0x15f> <== NEVER TAKEN
_HAssert( false );
return( false );
}
if ( next_is_free ) { /* coalesce both */
10f3a5: 80 7d e7 00 cmpb $0x0,-0x19(%ebp)
10f3a9: 8d 34 37 lea (%edi,%esi,1),%esi
10f3ac: 74 14 je 10f3c2 <_Heap_Free+0xee>
uintptr_t const size = block_size + prev_size + next_block_size;
10f3ae: 03 75 f0 add -0x10(%ebp),%esi
return _Heap_Free_list_tail(heap)->prev;
}
RTEMS_INLINE_ROUTINE void _Heap_Free_list_remove( Heap_Block *block )
{
Heap_Block *next = block->next;
10f3b1: 8b 42 08 mov 0x8(%edx),%eax
Heap_Block *prev = block->prev;
10f3b4: 8b 52 0c mov 0xc(%edx),%edx
prev->next = next;
10f3b7: 89 42 08 mov %eax,0x8(%edx)
next->prev = prev;
10f3ba: 89 50 0c mov %edx,0xc(%eax)
_Heap_Free_list_remove( next_block );
stats->free_blocks -= 1;
10f3bd: ff 49 38 decl 0x38(%ecx)
10f3c0: eb 2d jmp 10f3ef <_Heap_Free+0x11b>
next_block = _Heap_Block_at( prev_block, size );
_HAssert(!_Heap_Is_prev_used( next_block));
next_block->prev_size = size;
} else { /* coalesce prev */
uintptr_t const size = block_size + prev_size;
prev_block->size_and_flag = size | HEAP_PREV_BLOCK_USED;
10f3c2: 89 f0 mov %esi,%eax
10f3c4: 83 c8 01 or $0x1,%eax
10f3c7: 89 43 04 mov %eax,0x4(%ebx)
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
10f3ca: 83 62 04 fe andl $0xfffffffe,0x4(%edx)
next_block->prev_size = size;
10f3ce: 89 32 mov %esi,(%edx)
10f3d0: eb 56 jmp 10f428 <_Heap_Free+0x154>
}
} else if ( next_is_free ) { /* coalesce next */
10f3d2: 80 7d e7 00 cmpb $0x0,-0x19(%ebp)
10f3d6: 74 24 je 10f3fc <_Heap_Free+0x128>
uintptr_t const size = block_size + next_block_size;
10f3d8: 8b 75 f0 mov -0x10(%ebp),%esi
10f3db: 01 fe add %edi,%esi
RTEMS_INLINE_ROUTINE void _Heap_Free_list_replace(
Heap_Block *old_block,
Heap_Block *new_block
)
{
Heap_Block *next = old_block->next;
10f3dd: 8b 42 08 mov 0x8(%edx),%eax
Heap_Block *prev = old_block->prev;
10f3e0: 8b 52 0c mov 0xc(%edx),%edx
new_block->next = next;
10f3e3: 89 43 08 mov %eax,0x8(%ebx)
new_block->prev = prev;
10f3e6: 89 53 0c mov %edx,0xc(%ebx)
next->prev = new_block;
10f3e9: 89 58 0c mov %ebx,0xc(%eax)
prev->next = new_block;
10f3ec: 89 5a 08 mov %ebx,0x8(%edx)
_Heap_Free_list_replace( next_block, block );
block->size_and_flag = size | HEAP_PREV_BLOCK_USED;
10f3ef: 89 f0 mov %esi,%eax
10f3f1: 83 c8 01 or $0x1,%eax
10f3f4: 89 43 04 mov %eax,0x4(%ebx)
next_block = _Heap_Block_at( block, size );
next_block->prev_size = size;
10f3f7: 89 34 1e mov %esi,(%esi,%ebx,1)
10f3fa: eb 2c jmp 10f428 <_Heap_Free+0x154>
RTEMS_INLINE_ROUTINE void _Heap_Free_list_insert_after(
Heap_Block *block_before,
Heap_Block *new_block
)
{
Heap_Block *next = block_before->next;
10f3fc: 8b 41 08 mov 0x8(%ecx),%eax
new_block->next = next;
10f3ff: 89 43 08 mov %eax,0x8(%ebx)
new_block->prev = block_before;
10f402: 89 4b 0c mov %ecx,0xc(%ebx)
block_before->next = new_block;
10f405: 89 59 08 mov %ebx,0x8(%ecx)
next->prev = new_block;
10f408: 89 58 0c mov %ebx,0xc(%eax)
} else { /* no coalesce */
/* Add 'block' to the head of the free blocks list as it tends to
produce less fragmentation than adding to the tail. */
_Heap_Free_list_insert_after( _Heap_Free_list_head( heap), block );
block->size_and_flag = block_size | HEAP_PREV_BLOCK_USED;
10f40b: 89 f8 mov %edi,%eax
10f40d: 83 c8 01 or $0x1,%eax
10f410: 89 43 04 mov %eax,0x4(%ebx)
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
10f413: 83 62 04 fe andl $0xfffffffe,0x4(%edx)
next_block->prev_size = block_size;
10f417: 89 3a mov %edi,(%edx)
/* Statistics */
++stats->free_blocks;
10f419: 8b 41 38 mov 0x38(%ecx),%eax
10f41c: 40 inc %eax
10f41d: 89 41 38 mov %eax,0x38(%ecx)
if ( stats->max_free_blocks < stats->free_blocks ) {
10f420: 39 41 3c cmp %eax,0x3c(%ecx)
10f423: 73 03 jae 10f428 <_Heap_Free+0x154>
stats->max_free_blocks = stats->free_blocks;
10f425: 89 41 3c mov %eax,0x3c(%ecx)
}
}
/* Statistics */
--stats->used_blocks;
10f428: ff 49 40 decl 0x40(%ecx)
++stats->frees;
10f42b: ff 41 50 incl 0x50(%ecx)
stats->free_size += block_size;
10f42e: 01 79 30 add %edi,0x30(%ecx)
* If NULL return true so a free on NULL is considered a valid release. This
* is a special case that could be handled by the in heap check how-ever that
* would result in false being returned which is wrong.
*/
if ( alloc_begin_ptr == NULL ) {
return true;
10f431: b0 01 mov $0x1,%al
--stats->used_blocks;
++stats->frees;
stats->free_size += block_size;
return( true );
}
10f433: 83 c4 14 add $0x14,%esp
10f436: 5b pop %ebx
10f437: 5e pop %esi
10f438: 5f pop %edi
10f439: 5d pop %ebp
10f43a: c3 ret
0010c528 <_Heap_Greedy_allocate>:
Heap_Block *_Heap_Greedy_allocate(
Heap_Control *heap,
const uintptr_t *block_sizes,
size_t block_count
)
{
10c528: 55 push %ebp
10c529: 89 e5 mov %esp,%ebp
10c52b: 57 push %edi
10c52c: 56 push %esi
10c52d: 53 push %ebx
10c52e: 83 ec 1c sub $0x1c,%esp
10c531: 8b 5d 08 mov 0x8(%ebp),%ebx
Heap_Block *allocated_blocks = NULL;
Heap_Block *blocks = NULL;
Heap_Block *current;
size_t i;
for (i = 0; i < block_count; ++i) {
10c534: 31 f6 xor %esi,%esi
const uintptr_t *block_sizes,
size_t block_count
)
{
Heap_Block *const free_list_tail = _Heap_Free_list_tail( heap );
Heap_Block *allocated_blocks = NULL;
10c536: 31 c9 xor %ecx,%ecx
Heap_Block *blocks = NULL;
Heap_Block *current;
size_t i;
for (i = 0; i < block_count; ++i) {
10c538: eb 2d jmp 10c567 <_Heap_Greedy_allocate+0x3f>
* @brief See _Heap_Allocate_aligned_with_boundary() with alignment and
* boundary equals zero.
*/
RTEMS_INLINE_ROUTINE void *_Heap_Allocate( Heap_Control *heap, uintptr_t size )
{
return _Heap_Allocate_aligned_with_boundary( heap, size, 0, 0 );
10c53a: 6a 00 push $0x0
10c53c: 6a 00 push $0x0
10c53e: 8b 45 0c mov 0xc(%ebp),%eax
10c541: ff 34 b0 pushl (%eax,%esi,4)
10c544: 53 push %ebx
10c545: 89 4d e4 mov %ecx,-0x1c(%ebp)
10c548: e8 bb 67 00 00 call 112d08 <_Heap_Allocate_aligned_with_boundary>
void *next = _Heap_Allocate( heap, block_sizes [i] );
if ( next != NULL ) {
10c54d: 83 c4 10 add $0x10,%esp
10c550: 85 c0 test %eax,%eax
10c552: 8b 4d e4 mov -0x1c(%ebp),%ecx
10c555: 74 0f je 10c566 <_Heap_Greedy_allocate+0x3e><== NEVER TAKEN
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(
uintptr_t value,
uintptr_t alignment
)
{
return value - (value % alignment);
10c557: 8d 78 f8 lea -0x8(%eax),%edi
10c55a: 31 d2 xor %edx,%edx
10c55c: f7 73 10 divl 0x10(%ebx)
uintptr_t alloc_begin,
uintptr_t page_size
)
{
return (Heap_Block *) (_Heap_Align_down( alloc_begin, page_size )
- HEAP_BLOCK_HEADER_SIZE);
10c55f: 29 d7 sub %edx,%edi
Heap_Block *next_block = _Heap_Block_of_alloc_area(
(uintptr_t) next,
heap->page_size
);
next_block->next = allocated_blocks;
10c561: 89 4f 08 mov %ecx,0x8(%edi)
10c564: 89 f9 mov %edi,%ecx
Heap_Block *allocated_blocks = NULL;
Heap_Block *blocks = NULL;
Heap_Block *current;
size_t i;
for (i = 0; i < block_count; ++i) {
10c566: 46 inc %esi
10c567: 3b 75 10 cmp 0x10(%ebp),%esi
10c56a: 75 ce jne 10c53a <_Heap_Greedy_allocate+0x12>
10c56c: 31 f6 xor %esi,%esi
10c56e: eb 23 jmp 10c593 <_Heap_Greedy_allocate+0x6b>
}
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Block_size( const Heap_Block *block )
{
return block->size_and_flag & ~HEAP_PREV_BLOCK_USED;
10c570: 8b 47 04 mov 0x4(%edi),%eax
10c573: 83 e0 fe and $0xfffffffe,%eax
allocated_blocks = next_block;
}
}
while ( (current = _Heap_Free_list_first( heap )) != free_list_tail ) {
_Heap_Block_allocate(
10c576: 83 e8 08 sub $0x8,%eax
10c579: 50 push %eax
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Alloc_area_of_block(
const Heap_Block *block
)
{
return (uintptr_t) block + HEAP_BLOCK_HEADER_SIZE;
10c57a: 8d 47 08 lea 0x8(%edi),%eax
10c57d: 50 push %eax
10c57e: 57 push %edi
10c57f: 53 push %ebx
10c580: 89 4d e4 mov %ecx,-0x1c(%ebp)
10c583: e8 8e 02 00 00 call 10c816 <_Heap_Block_allocate>
current,
_Heap_Alloc_area_of_block( current ),
_Heap_Block_size( current ) - HEAP_BLOCK_HEADER_SIZE
);
current->next = blocks;
10c588: 89 77 08 mov %esi,0x8(%edi)
10c58b: 89 fe mov %edi,%esi
10c58d: 83 c4 10 add $0x10,%esp
10c590: 8b 4d e4 mov -0x1c(%ebp),%ecx
return &heap->free_list;
}
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Free_list_first( Heap_Control *heap )
{
return _Heap_Free_list_head(heap)->next;
10c593: 8b 7b 08 mov 0x8(%ebx),%edi
next_block->next = allocated_blocks;
allocated_blocks = next_block;
}
}
while ( (current = _Heap_Free_list_first( heap )) != free_list_tail ) {
10c596: 39 df cmp %ebx,%edi
10c598: 75 d6 jne 10c570 <_Heap_Greedy_allocate+0x48>
10c59a: eb 14 jmp 10c5b0 <_Heap_Greedy_allocate+0x88>
blocks = current;
}
while ( allocated_blocks != NULL ) {
current = allocated_blocks;
allocated_blocks = allocated_blocks->next;
10c59c: 8b 79 08 mov 0x8(%ecx),%edi
_Heap_Free( heap, (void *) _Heap_Alloc_area_of_block( current ) );
10c59f: 50 push %eax
10c5a0: 50 push %eax
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Alloc_area_of_block(
const Heap_Block *block
)
{
return (uintptr_t) block + HEAP_BLOCK_HEADER_SIZE;
10c5a1: 83 c1 08 add $0x8,%ecx
10c5a4: 51 push %ecx
10c5a5: 53 push %ebx
10c5a6: e8 b5 68 00 00 call 112e60 <_Heap_Free>
10c5ab: 83 c4 10 add $0x10,%esp
blocks = current;
}
while ( allocated_blocks != NULL ) {
current = allocated_blocks;
allocated_blocks = allocated_blocks->next;
10c5ae: 89 f9 mov %edi,%ecx
current->next = blocks;
blocks = current;
}
while ( allocated_blocks != NULL ) {
10c5b0: 85 c9 test %ecx,%ecx
10c5b2: 75 e8 jne 10c59c <_Heap_Greedy_allocate+0x74>
allocated_blocks = allocated_blocks->next;
_Heap_Free( heap, (void *) _Heap_Alloc_area_of_block( current ) );
}
return blocks;
}
10c5b4: 89 f0 mov %esi,%eax
10c5b6: 8d 65 f4 lea -0xc(%ebp),%esp
10c5b9: 5b pop %ebx
10c5ba: 5e pop %esi
10c5bb: 5f pop %edi
10c5bc: 5d pop %ebp
10c5bd: c3 ret
00112620 <_Heap_Iterate>:
void _Heap_Iterate(
Heap_Control *heap,
Heap_Block_visitor visitor,
void *visitor_arg
)
{
112620: 55 push %ebp
112621: 89 e5 mov %esp,%ebp
112623: 56 push %esi
112624: 53 push %ebx
112625: 8b 45 08 mov 0x8(%ebp),%eax
Heap_Block *current = heap->first_block;
112628: 8b 50 20 mov 0x20(%eax),%edx
Heap_Block *end = heap->last_block;
11262b: 8b 58 24 mov 0x24(%eax),%ebx
bool stop = false;
11262e: 31 c0 xor %eax,%eax
while ( !stop && current != end ) {
112630: eb 1f jmp 112651 <_Heap_Iterate+0x31>
112632: 8b 42 04 mov 0x4(%edx),%eax
112635: 83 e0 fe and $0xfffffffe,%eax
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
112638: 8d 34 02 lea (%edx,%eax,1),%esi
uintptr_t size = _Heap_Block_size( current );
Heap_Block *next = _Heap_Block_at( current, size );
bool used = _Heap_Is_prev_used( next );
stop = (*visitor)( current, size, used, visitor_arg );
11263b: ff 75 10 pushl 0x10(%ebp)
block->size_and_flag = size | flag;
}
RTEMS_INLINE_ROUTINE bool _Heap_Is_prev_used( const Heap_Block *block )
{
return block->size_and_flag & HEAP_PREV_BLOCK_USED;
11263e: 8b 4e 04 mov 0x4(%esi),%ecx
112641: 83 e1 01 and $0x1,%ecx
112644: 51 push %ecx
112645: 50 push %eax
112646: 52 push %edx
112647: 8b 55 0c mov 0xc(%ebp),%edx
11264a: ff d2 call *%edx
11264c: 89 f2 mov %esi,%edx
11264e: 83 c4 10 add $0x10,%esp
{
Heap_Block *current = heap->first_block;
Heap_Block *end = heap->last_block;
bool stop = false;
while ( !stop && current != end ) {
112651: 39 da cmp %ebx,%edx
112653: 74 04 je 112659 <_Heap_Iterate+0x39>
112655: fe c8 dec %al
112657: 75 d9 jne 112632 <_Heap_Iterate+0x12> <== ALWAYS TAKEN
stop = (*visitor)( current, size, used, visitor_arg );
current = next;
}
}
112659: 8d 65 f8 lea -0x8(%ebp),%esp
11265c: 5b pop %ebx
11265d: 5e pop %esi
11265e: 5d pop %ebp
11265f: c3 ret
0010f534 <_Heap_Size_of_alloc_area>:
bool _Heap_Size_of_alloc_area(
Heap_Control *heap,
void *alloc_begin_ptr,
uintptr_t *alloc_size
)
{
10f534: 55 push %ebp
10f535: 89 e5 mov %esp,%ebp
10f537: 57 push %edi
10f538: 56 push %esi
10f539: 53 push %ebx
10f53a: 8b 5d 08 mov 0x8(%ebp),%ebx
10f53d: 8b 75 0c mov 0xc(%ebp),%esi
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(
uintptr_t value,
uintptr_t alignment
)
{
return value - (value % alignment);
10f540: 8d 4e f8 lea -0x8(%esi),%ecx
10f543: 89 f0 mov %esi,%eax
10f545: 31 d2 xor %edx,%edx
10f547: f7 73 10 divl 0x10(%ebx)
uintptr_t alloc_begin,
uintptr_t page_size
)
{
return (Heap_Block *) (_Heap_Align_down( alloc_begin, page_size )
- HEAP_BLOCK_HEADER_SIZE);
10f54a: 29 d1 sub %edx,%ecx
RTEMS_INLINE_ROUTINE bool _Heap_Is_block_in_heap(
const Heap_Control *heap,
const Heap_Block *block
)
{
return (uintptr_t) block >= (uintptr_t) heap->first_block
10f54c: 8b 53 20 mov 0x20(%ebx),%edx
&& (uintptr_t) block <= (uintptr_t) heap->last_block;
10f54f: 31 ff xor %edi,%edi
10f551: 39 d1 cmp %edx,%ecx
10f553: 72 0a jb 10f55f <_Heap_Size_of_alloc_area+0x2b>
10f555: 31 c0 xor %eax,%eax
10f557: 39 4b 24 cmp %ecx,0x24(%ebx)
10f55a: 0f 93 c0 setae %al
10f55d: 89 c7 mov %eax,%edi
Heap_Block *block = _Heap_Block_of_alloc_area( alloc_begin, page_size );
Heap_Block *next_block = NULL;
uintptr_t block_size = 0;
if ( !_Heap_Is_block_in_heap( heap, block ) ) {
return false;
10f55f: 31 c0 xor %eax,%eax
uintptr_t const alloc_begin = (uintptr_t) alloc_begin_ptr;
Heap_Block *block = _Heap_Block_of_alloc_area( alloc_begin, page_size );
Heap_Block *next_block = NULL;
uintptr_t block_size = 0;
if ( !_Heap_Is_block_in_heap( heap, block ) ) {
10f561: 85 ff test %edi,%edi
10f563: 74 30 je 10f595 <_Heap_Size_of_alloc_area+0x61>
- HEAP_BLOCK_HEADER_SIZE);
}
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Block_size( const Heap_Block *block )
{
return block->size_and_flag & ~HEAP_PREV_BLOCK_USED;
10f565: 8b 41 04 mov 0x4(%ecx),%eax
10f568: 83 e0 fe and $0xfffffffe,%eax
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
10f56b: 01 c1 add %eax,%ecx
const Heap_Control *heap,
const Heap_Block *block
)
{
return (uintptr_t) block >= (uintptr_t) heap->first_block
&& (uintptr_t) block <= (uintptr_t) heap->last_block;
10f56d: 31 ff xor %edi,%edi
10f56f: 39 d1 cmp %edx,%ecx
10f571: 72 0a jb 10f57d <_Heap_Size_of_alloc_area+0x49><== NEVER TAKEN
10f573: 31 c0 xor %eax,%eax
10f575: 39 4b 24 cmp %ecx,0x24(%ebx)
10f578: 0f 93 c0 setae %al
10f57b: 89 c7 mov %eax,%edi
return false;
10f57d: 31 c0 xor %eax,%eax
}
block_size = _Heap_Block_size( block );
next_block = _Heap_Block_at( block, block_size );
if (
10f57f: 85 ff test %edi,%edi
10f581: 74 12 je 10f595 <_Heap_Size_of_alloc_area+0x61><== NEVER TAKEN
!_Heap_Is_block_in_heap( heap, next_block )
|| !_Heap_Is_prev_used( next_block )
10f583: f6 41 04 01 testb $0x1,0x4(%ecx)
10f587: 74 0c je 10f595 <_Heap_Size_of_alloc_area+0x61><== NEVER TAKEN
) {
return false;
}
*alloc_size = (uintptr_t) next_block + HEAP_ALLOC_BONUS - alloc_begin;
10f589: 29 f1 sub %esi,%ecx
10f58b: 8d 51 04 lea 0x4(%ecx),%edx
10f58e: 8b 45 10 mov 0x10(%ebp),%eax
10f591: 89 10 mov %edx,(%eax)
return true;
10f593: b0 01 mov $0x1,%al
}
10f595: 5b pop %ebx
10f596: 5e pop %esi
10f597: 5f pop %edi
10f598: 5d pop %ebp
10f599: c3 ret
0010b5d2 <_Heap_Walk>:
bool _Heap_Walk(
Heap_Control *heap,
int source,
bool dump
)
{
10b5d2: 55 push %ebp
10b5d3: 89 e5 mov %esp,%ebp
10b5d5: 57 push %edi
10b5d6: 56 push %esi
10b5d7: 53 push %ebx
10b5d8: 83 ec 3c sub $0x3c,%esp
10b5db: 8b 7d 0c mov 0xc(%ebp),%edi
uintptr_t const page_size = heap->page_size;
10b5de: 8b 4d 08 mov 0x8(%ebp),%ecx
10b5e1: 8b 49 10 mov 0x10(%ecx),%ecx
10b5e4: 89 4d e0 mov %ecx,-0x20(%ebp)
uintptr_t const min_block_size = heap->min_block_size;
10b5e7: 8b 4d 08 mov 0x8(%ebp),%ecx
10b5ea: 8b 49 14 mov 0x14(%ecx),%ecx
10b5ed: 89 4d d8 mov %ecx,-0x28(%ebp)
Heap_Block *const first_block = heap->first_block;
10b5f0: 8b 4d 08 mov 0x8(%ebp),%ecx
10b5f3: 8b 71 20 mov 0x20(%ecx),%esi
Heap_Block *const last_block = heap->last_block;
10b5f6: 8b 49 24 mov 0x24(%ecx),%ecx
10b5f9: 89 4d d4 mov %ecx,-0x2c(%ebp)
Heap_Block *block = first_block;
Heap_Walk_printer printer = dump ?
_Heap_Walk_print : _Heap_Walk_print_nothing;
10b5fc: bb 94 b5 10 00 mov $0x10b594,%ebx
10b601: 80 7d 10 00 cmpb $0x0,0x10(%ebp)
10b605: 74 05 je 10b60c <_Heap_Walk+0x3a>
10b607: bb 99 b5 10 00 mov $0x10b599,%ebx
if ( !_System_state_Is_up( _System_state_Get() ) ) {
10b60c: 83 3d a8 05 13 00 03 cmpl $0x3,0x1305a8
10b613: 74 07 je 10b61c <_Heap_Walk+0x4a>
return true;
10b615: b0 01 mov $0x1,%al
10b617: e9 ec 02 00 00 jmp 10b908 <_Heap_Walk+0x336>
Heap_Block *const first_free_block = _Heap_Free_list_first( heap );
Heap_Block *const last_free_block = _Heap_Free_list_last( heap );
Heap_Block *const first_block = heap->first_block;
Heap_Block *const last_block = heap->last_block;
(*printer)(
10b61c: 50 push %eax
10b61d: 8b 4d 08 mov 0x8(%ebp),%ecx
10b620: ff 71 0c pushl 0xc(%ecx)
10b623: ff 71 08 pushl 0x8(%ecx)
10b626: ff 75 d4 pushl -0x2c(%ebp)
10b629: 56 push %esi
10b62a: ff 71 1c pushl 0x1c(%ecx)
10b62d: ff 71 18 pushl 0x18(%ecx)
10b630: ff 75 d8 pushl -0x28(%ebp)
10b633: ff 75 e0 pushl -0x20(%ebp)
10b636: 68 e4 07 12 00 push $0x1207e4
10b63b: 6a 00 push $0x0
10b63d: 57 push %edi
10b63e: ff d3 call *%ebx
heap->area_begin, heap->area_end,
first_block, last_block,
first_free_block, last_free_block
);
if ( page_size == 0 ) {
10b640: 83 c4 30 add $0x30,%esp
10b643: 83 7d e0 00 cmpl $0x0,-0x20(%ebp)
10b647: 75 0b jne 10b654 <_Heap_Walk+0x82>
(*printer)( source, true, "page size is zero\n" );
10b649: 50 push %eax
10b64a: 68 75 08 12 00 push $0x120875
10b64f: e9 d5 00 00 00 jmp 10b729 <_Heap_Walk+0x157>
return false;
}
if ( !_Addresses_Is_aligned( (void *) page_size ) ) {
10b654: f6 45 e0 03 testb $0x3,-0x20(%ebp)
10b658: 74 0d je 10b667 <_Heap_Walk+0x95>
(*printer)(
10b65a: ff 75 e0 pushl -0x20(%ebp)
10b65d: 68 88 08 12 00 push $0x120888
10b662: e9 c2 00 00 00 jmp 10b729 <_Heap_Walk+0x157>
RTEMS_INLINE_ROUTINE bool _Heap_Is_aligned(
uintptr_t value,
uintptr_t alignment
)
{
return (value % alignment) == 0;
10b667: 8b 45 d8 mov -0x28(%ebp),%eax
10b66a: 31 d2 xor %edx,%edx
10b66c: f7 75 e0 divl -0x20(%ebp)
);
return false;
}
if ( !_Heap_Is_aligned( min_block_size, page_size ) ) {
10b66f: 85 d2 test %edx,%edx
10b671: 74 0d je 10b680 <_Heap_Walk+0xae>
(*printer)(
10b673: ff 75 d8 pushl -0x28(%ebp)
10b676: 68 a6 08 12 00 push $0x1208a6
10b67b: e9 a9 00 00 00 jmp 10b729 <_Heap_Walk+0x157>
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Alloc_area_of_block(
const Heap_Block *block
)
{
return (uintptr_t) block + HEAP_BLOCK_HEADER_SIZE;
10b680: 8d 46 08 lea 0x8(%esi),%eax
RTEMS_INLINE_ROUTINE bool _Heap_Is_aligned(
uintptr_t value,
uintptr_t alignment
)
{
return (value % alignment) == 0;
10b683: 31 d2 xor %edx,%edx
10b685: f7 75 e0 divl -0x20(%ebp)
);
return false;
}
if (
10b688: 85 d2 test %edx,%edx
10b68a: 74 0b je 10b697 <_Heap_Walk+0xc5>
!_Heap_Is_aligned( _Heap_Alloc_area_of_block( first_block ), page_size )
) {
(*printer)(
10b68c: 56 push %esi
10b68d: 68 ca 08 12 00 push $0x1208ca
10b692: e9 92 00 00 00 jmp 10b729 <_Heap_Walk+0x157>
);
return false;
}
if ( !_Heap_Is_prev_used( first_block ) ) {
10b697: f6 46 04 01 testb $0x1,0x4(%esi)
10b69b: 75 0b jne 10b6a8 <_Heap_Walk+0xd6>
(*printer)(
10b69d: 50 push %eax
10b69e: 68 fb 08 12 00 push $0x1208fb
10b6a3: e9 81 00 00 00 jmp 10b729 <_Heap_Walk+0x157>
- HEAP_BLOCK_HEADER_SIZE);
}
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Block_size( const Heap_Block *block )
{
return block->size_and_flag & ~HEAP_PREV_BLOCK_USED;
10b6a8: 8b 4d d4 mov -0x2c(%ebp),%ecx
10b6ab: 8b 41 04 mov 0x4(%ecx),%eax
10b6ae: 83 e0 fe and $0xfffffffe,%eax
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
10b6b1: 01 c8 add %ecx,%eax
10b6b3: 89 45 d0 mov %eax,-0x30(%ebp)
);
return false;
}
if ( _Heap_Is_free( last_block ) ) {
10b6b6: f6 40 04 01 testb $0x1,0x4(%eax)
10b6ba: 75 08 jne 10b6c4 <_Heap_Walk+0xf2>
(*printer)(
10b6bc: 50 push %eax
10b6bd: 68 29 09 12 00 push $0x120929
10b6c2: eb 65 jmp 10b729 <_Heap_Walk+0x157>
);
return false;
}
if (
10b6c4: 39 75 d0 cmp %esi,-0x30(%ebp)
10b6c7: 74 08 je 10b6d1 <_Heap_Walk+0xff>
_Heap_Block_at( last_block, _Heap_Block_size( last_block ) ) != first_block
) {
(*printer)(
10b6c9: 56 push %esi
10b6ca: 68 3e 09 12 00 push $0x12093e
10b6cf: eb 58 jmp 10b729 <_Heap_Walk+0x157>
int source,
Heap_Walk_printer printer,
Heap_Control *heap
)
{
uintptr_t const page_size = heap->page_size;
10b6d1: 8b 4d 08 mov 0x8(%ebp),%ecx
10b6d4: 8b 49 10 mov 0x10(%ecx),%ecx
10b6d7: 89 4d e4 mov %ecx,-0x1c(%ebp)
return &heap->free_list;
}
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Free_list_first( Heap_Control *heap )
{
return _Heap_Free_list_head(heap)->next;
10b6da: 8b 45 08 mov 0x8(%ebp),%eax
10b6dd: 8b 48 08 mov 0x8(%eax),%ecx
const Heap_Block *const free_list_tail = _Heap_Free_list_tail( heap );
10b6e0: 89 c6 mov %eax,%esi
10b6e2: eb 6d jmp 10b751 <_Heap_Walk+0x17f>
const Heap_Control *heap,
const Heap_Block *block
)
{
return (uintptr_t) block >= (uintptr_t) heap->first_block
&& (uintptr_t) block <= (uintptr_t) heap->last_block;
10b6e4: 31 c0 xor %eax,%eax
10b6e6: 8b 55 08 mov 0x8(%ebp),%edx
10b6e9: 39 4a 20 cmp %ecx,0x20(%edx)
10b6ec: 77 08 ja 10b6f6 <_Heap_Walk+0x124>
10b6ee: 31 c0 xor %eax,%eax
10b6f0: 39 4a 24 cmp %ecx,0x24(%edx)
10b6f3: 0f 93 c0 setae %al
const Heap_Block *const first_free_block = _Heap_Free_list_first( heap );
const Heap_Block *prev_block = free_list_tail;
const Heap_Block *free_block = first_free_block;
while ( free_block != free_list_tail ) {
if ( !_Heap_Is_block_in_heap( heap, free_block ) ) {
10b6f6: 85 c0 test %eax,%eax
10b6f8: 75 08 jne 10b702 <_Heap_Walk+0x130>
(*printer)(
10b6fa: 51 push %ecx
10b6fb: 68 6d 09 12 00 push $0x12096d
10b700: eb 27 jmp 10b729 <_Heap_Walk+0x157>
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Alloc_area_of_block(
const Heap_Block *block
)
{
return (uintptr_t) block + HEAP_BLOCK_HEADER_SIZE;
10b702: 8d 41 08 lea 0x8(%ecx),%eax
RTEMS_INLINE_ROUTINE bool _Heap_Is_aligned(
uintptr_t value,
uintptr_t alignment
)
{
return (value % alignment) == 0;
10b705: 31 d2 xor %edx,%edx
10b707: f7 75 e4 divl -0x1c(%ebp)
);
return false;
}
if (
10b70a: 85 d2 test %edx,%edx
10b70c: 74 08 je 10b716 <_Heap_Walk+0x144>
!_Heap_Is_aligned( _Heap_Alloc_area_of_block( free_block ), page_size )
) {
(*printer)(
10b70e: 51 push %ecx
10b70f: 68 8d 09 12 00 push $0x12098d
10b714: eb 13 jmp 10b729 <_Heap_Walk+0x157>
- HEAP_BLOCK_HEADER_SIZE);
}
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Block_size( const Heap_Block *block )
{
return block->size_and_flag & ~HEAP_PREV_BLOCK_USED;
10b716: 8b 41 04 mov 0x4(%ecx),%eax
10b719: 83 e0 fe and $0xfffffffe,%eax
);
return false;
}
if ( _Heap_Is_used( free_block ) ) {
10b71c: f6 44 01 04 01 testb $0x1,0x4(%ecx,%eax,1)
10b721: 74 13 je 10b736 <_Heap_Walk+0x164>
(*printer)(
10b723: 51 push %ecx
10b724: 68 bd 09 12 00 push $0x1209bd
10b729: 6a 01 push $0x1
10b72b: 57 push %edi
10b72c: ff d3 call *%ebx
10b72e: 83 c4 10 add $0x10,%esp
10b731: e9 c3 01 00 00 jmp 10b8f9 <_Heap_Walk+0x327>
);
return false;
}
if ( free_block->prev != prev_block ) {
10b736: 8b 41 0c mov 0xc(%ecx),%eax
10b739: 39 f0 cmp %esi,%eax
10b73b: 74 0f je 10b74c <_Heap_Walk+0x17a>
(*printer)(
10b73d: 83 ec 0c sub $0xc,%esp
10b740: 50 push %eax
10b741: 51 push %ecx
10b742: 68 d9 09 12 00 push $0x1209d9
10b747: e9 42 01 00 00 jmp 10b88e <_Heap_Walk+0x2bc>
return false;
}
prev_block = free_block;
free_block = free_block->next;
10b74c: 89 ce mov %ecx,%esi
10b74e: 8b 49 08 mov 0x8(%ecx),%ecx
const Heap_Block *const free_list_tail = _Heap_Free_list_tail( heap );
const Heap_Block *const first_free_block = _Heap_Free_list_first( heap );
const Heap_Block *prev_block = free_list_tail;
const Heap_Block *free_block = first_free_block;
while ( free_block != free_list_tail ) {
10b751: 3b 4d 08 cmp 0x8(%ebp),%ecx
10b754: 75 8e jne 10b6e4 <_Heap_Walk+0x112>
10b756: 8b 75 d0 mov -0x30(%ebp),%esi
block = next_block;
} while ( block != first_block );
return true;
}
10b759: 8b 46 04 mov 0x4(%esi),%eax
10b75c: 89 c1 mov %eax,%ecx
10b75e: 83 e1 fe and $0xfffffffe,%ecx
10b761: 89 4d e4 mov %ecx,-0x1c(%ebp)
block->size_and_flag = size | flag;
}
RTEMS_INLINE_ROUTINE bool _Heap_Is_prev_used( const Heap_Block *block )
{
return block->size_and_flag & HEAP_PREV_BLOCK_USED;
10b764: 83 e0 01 and $0x1,%eax
10b767: 89 45 c8 mov %eax,-0x38(%ebp)
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
10b76a: 01 f1 add %esi,%ecx
10b76c: 89 4d dc mov %ecx,-0x24(%ebp)
uintptr_t const block_begin = (uintptr_t) block;
uintptr_t const block_size = _Heap_Block_size( block );
bool const prev_used = _Heap_Is_prev_used( block );
Heap_Block *const next_block = _Heap_Block_at( block, block_size );
uintptr_t const next_block_begin = (uintptr_t) next_block;
bool const is_not_last_block = block != last_block;
10b76f: 3b 75 d4 cmp -0x2c(%ebp),%esi
10b772: 0f 95 c1 setne %cl
const Heap_Control *heap,
const Heap_Block *block
)
{
return (uintptr_t) block >= (uintptr_t) heap->first_block
&& (uintptr_t) block <= (uintptr_t) heap->last_block;
10b775: c7 45 cc 00 00 00 00 movl $0x0,-0x34(%ebp)
10b77c: 8b 55 dc mov -0x24(%ebp),%edx
10b77f: 8b 45 08 mov 0x8(%ebp),%eax
10b782: 39 50 20 cmp %edx,0x20(%eax)
10b785: 77 0c ja 10b793 <_Heap_Walk+0x1c1> <== NEVER TAKEN
10b787: 39 50 24 cmp %edx,0x24(%eax)
10b78a: 0f 93 c0 setae %al
10b78d: 0f b6 c0 movzbl %al,%eax
10b790: 89 45 cc mov %eax,-0x34(%ebp)
if ( !_Heap_Is_block_in_heap( heap, next_block ) ) {
10b793: 83 7d cc 00 cmpl $0x0,-0x34(%ebp)
10b797: 75 11 jne 10b7aa <_Heap_Walk+0x1d8>
(*printer)(
10b799: 83 ec 0c sub $0xc,%esp
10b79c: ff 75 dc pushl -0x24(%ebp)
10b79f: 56 push %esi
10b7a0: 68 0b 0a 12 00 push $0x120a0b
10b7a5: e9 e4 00 00 00 jmp 10b88e <_Heap_Walk+0x2bc>
RTEMS_INLINE_ROUTINE bool _Heap_Is_aligned(
uintptr_t value,
uintptr_t alignment
)
{
return (value % alignment) == 0;
10b7aa: 8b 45 e4 mov -0x1c(%ebp),%eax
10b7ad: 31 d2 xor %edx,%edx
10b7af: f7 75 e0 divl -0x20(%ebp)
);
return false;
}
if ( !_Heap_Is_aligned( block_size, page_size ) && is_not_last_block ) {
10b7b2: 85 d2 test %edx,%edx
10b7b4: 74 15 je 10b7cb <_Heap_Walk+0x1f9>
10b7b6: 84 c9 test %cl,%cl
10b7b8: 74 11 je 10b7cb <_Heap_Walk+0x1f9>
(*printer)(
10b7ba: 83 ec 0c sub $0xc,%esp
10b7bd: ff 75 e4 pushl -0x1c(%ebp)
10b7c0: 56 push %esi
10b7c1: 68 38 0a 12 00 push $0x120a38
10b7c6: e9 c3 00 00 00 jmp 10b88e <_Heap_Walk+0x2bc>
);
return false;
}
if ( block_size < min_block_size && is_not_last_block ) {
10b7cb: 8b 45 d8 mov -0x28(%ebp),%eax
10b7ce: 39 45 e4 cmp %eax,-0x1c(%ebp)
10b7d1: 73 15 jae 10b7e8 <_Heap_Walk+0x216>
10b7d3: 84 c9 test %cl,%cl
10b7d5: 74 11 je 10b7e8 <_Heap_Walk+0x216> <== NEVER TAKEN
(*printer)(
10b7d7: 51 push %ecx
10b7d8: 51 push %ecx
10b7d9: 50 push %eax
10b7da: ff 75 e4 pushl -0x1c(%ebp)
10b7dd: 56 push %esi
10b7de: 68 66 0a 12 00 push $0x120a66
10b7e3: e9 a6 00 00 00 jmp 10b88e <_Heap_Walk+0x2bc>
);
return false;
}
if ( next_block_begin <= block_begin && is_not_last_block ) {
10b7e8: 3b 75 dc cmp -0x24(%ebp),%esi
10b7eb: 72 15 jb 10b802 <_Heap_Walk+0x230>
10b7ed: 84 c9 test %cl,%cl
10b7ef: 74 11 je 10b802 <_Heap_Walk+0x230>
(*printer)(
10b7f1: 83 ec 0c sub $0xc,%esp
10b7f4: ff 75 dc pushl -0x24(%ebp)
10b7f7: 56 push %esi
10b7f8: 68 91 0a 12 00 push $0x120a91
10b7fd: e9 8c 00 00 00 jmp 10b88e <_Heap_Walk+0x2bc>
);
return false;
}
if ( !_Heap_Is_prev_used( next_block ) ) {
10b802: 8b 4d dc mov -0x24(%ebp),%ecx
10b805: f6 41 04 01 testb $0x1,0x4(%ecx)
10b809: 0f 85 b0 00 00 00 jne 10b8bf <_Heap_Walk+0x2ed>
return &heap->free_list;
}
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Free_list_first( Heap_Control *heap )
{
return _Heap_Free_list_head(heap)->next;
10b80f: 8b 45 08 mov 0x8(%ebp),%eax
10b812: 8b 48 08 mov 0x8(%eax),%ecx
block->prev,
block->prev == first_free_block ?
" (= first free)"
: (block->prev == free_list_head ? " (= head)" : ""),
block->next,
block->next == last_free_block ?
10b815: 8b 56 08 mov 0x8(%esi),%edx
10b818: 89 55 c4 mov %edx,-0x3c(%ebp)
Heap_Block *const last_free_block = _Heap_Free_list_last( heap );
bool const prev_used = _Heap_Is_prev_used( block );
uintptr_t const block_size = _Heap_Block_size( block );
Heap_Block *const next_block = _Heap_Block_at( block, block_size );
(*printer)(
10b81b: 3b 50 0c cmp 0xc(%eax),%edx
10b81e: 74 14 je 10b834 <_Heap_Walk+0x262>
" (= first free)"
: (block->prev == free_list_head ? " (= head)" : ""),
block->next,
block->next == last_free_block ?
" (= last free)"
: (block->next == free_list_tail ? " (= tail)" : "")
10b820: b8 89 06 12 00 mov $0x120689,%eax
10b825: 8b 55 08 mov 0x8(%ebp),%edx
10b828: 39 55 c4 cmp %edx,-0x3c(%ebp)
10b82b: 75 0c jne 10b839 <_Heap_Walk+0x267>
10b82d: b8 c0 07 12 00 mov $0x1207c0,%eax
10b832: eb 05 jmp 10b839 <_Heap_Walk+0x267>
Heap_Block *const last_free_block = _Heap_Free_list_last( heap );
bool const prev_used = _Heap_Is_prev_used( block );
uintptr_t const block_size = _Heap_Block_size( block );
Heap_Block *const next_block = _Heap_Block_at( block, block_size );
(*printer)(
10b834: b8 b1 07 12 00 mov $0x1207b1,%eax
false,
"block 0x%08x: size %u, prev 0x%08x%s, next 0x%08x%s\n",
block,
block_size,
block->prev,
block->prev == first_free_block ?
10b839: 8b 56 0c mov 0xc(%esi),%edx
10b83c: 89 55 cc mov %edx,-0x34(%ebp)
Heap_Block *const last_free_block = _Heap_Free_list_last( heap );
bool const prev_used = _Heap_Is_prev_used( block );
uintptr_t const block_size = _Heap_Block_size( block );
Heap_Block *const next_block = _Heap_Block_at( block, block_size );
(*printer)(
10b83f: 39 ca cmp %ecx,%edx
10b841: 74 14 je 10b857 <_Heap_Walk+0x285>
block,
block_size,
block->prev,
block->prev == first_free_block ?
" (= first free)"
: (block->prev == free_list_head ? " (= head)" : ""),
10b843: ba 89 06 12 00 mov $0x120689,%edx
10b848: 8b 4d 08 mov 0x8(%ebp),%ecx
10b84b: 39 4d cc cmp %ecx,-0x34(%ebp)
10b84e: 75 0c jne 10b85c <_Heap_Walk+0x28a>
10b850: ba da 07 12 00 mov $0x1207da,%edx
10b855: eb 05 jmp 10b85c <_Heap_Walk+0x28a>
Heap_Block *const last_free_block = _Heap_Free_list_last( heap );
bool const prev_used = _Heap_Is_prev_used( block );
uintptr_t const block_size = _Heap_Block_size( block );
Heap_Block *const next_block = _Heap_Block_at( block, block_size );
(*printer)(
10b857: ba ca 07 12 00 mov $0x1207ca,%edx
10b85c: 83 ec 0c sub $0xc,%esp
10b85f: 50 push %eax
10b860: ff 75 c4 pushl -0x3c(%ebp)
10b863: 52 push %edx
10b864: ff 75 cc pushl -0x34(%ebp)
10b867: ff 75 e4 pushl -0x1c(%ebp)
10b86a: 56 push %esi
10b86b: 68 c5 0a 12 00 push $0x120ac5
10b870: 6a 00 push $0x0
10b872: 57 push %edi
10b873: ff d3 call *%ebx
block->next == last_free_block ?
" (= last free)"
: (block->next == free_list_tail ? " (= tail)" : "")
);
if ( block_size != next_block->prev_size ) {
10b875: 8b 4d dc mov -0x24(%ebp),%ecx
10b878: 8b 01 mov (%ecx),%eax
10b87a: 83 c4 30 add $0x30,%esp
10b87d: 39 45 e4 cmp %eax,-0x1c(%ebp)
10b880: 74 16 je 10b898 <_Heap_Walk+0x2c6>
(*printer)(
10b882: 52 push %edx
10b883: 51 push %ecx
10b884: 50 push %eax
10b885: ff 75 e4 pushl -0x1c(%ebp)
10b888: 56 push %esi
10b889: 68 fa 0a 12 00 push $0x120afa
10b88e: 6a 01 push $0x1
10b890: 57 push %edi
10b891: ff d3 call *%ebx
10b893: 83 c4 20 add $0x20,%esp
10b896: eb 61 jmp 10b8f9 <_Heap_Walk+0x327>
);
return false;
}
if ( !prev_used ) {
10b898: 83 7d c8 00 cmpl $0x0,-0x38(%ebp)
10b89c: 75 0b jne 10b8a9 <_Heap_Walk+0x2d7>
(*printer)(
10b89e: 56 push %esi
10b89f: 68 33 0b 12 00 push $0x120b33
10b8a4: e9 80 fe ff ff jmp 10b729 <_Heap_Walk+0x157>
10b8a9: 8b 4d 08 mov 0x8(%ebp),%ecx
10b8ac: 8b 41 08 mov 0x8(%ecx),%eax
10b8af: eb 07 jmp 10b8b8 <_Heap_Walk+0x2e6>
{
const Heap_Block *const free_list_tail = _Heap_Free_list_tail( heap );
const Heap_Block *free_block = _Heap_Free_list_first( heap );
while ( free_block != free_list_tail ) {
if ( free_block == block ) {
10b8b1: 39 f0 cmp %esi,%eax
10b8b3: 74 33 je 10b8e8 <_Heap_Walk+0x316>
return true;
}
free_block = free_block->next;
10b8b5: 8b 40 08 mov 0x8(%eax),%eax
)
{
const Heap_Block *const free_list_tail = _Heap_Free_list_tail( heap );
const Heap_Block *free_block = _Heap_Free_list_first( heap );
while ( free_block != free_list_tail ) {
10b8b8: 3b 45 08 cmp 0x8(%ebp),%eax
10b8bb: 75 f4 jne 10b8b1 <_Heap_Walk+0x2df>
10b8bd: eb 3e jmp 10b8fd <_Heap_Walk+0x32b>
if ( !_Heap_Is_prev_used( next_block ) ) {
if ( !_Heap_Walk_check_free_block( source, printer, heap, block ) ) {
return false;
}
} else if (prev_used) {
10b8bf: 83 7d c8 00 cmpl $0x0,-0x38(%ebp)
10b8c3: 74 0e je 10b8d3 <_Heap_Walk+0x301>
(*printer)(
10b8c5: 83 ec 0c sub $0xc,%esp
10b8c8: ff 75 e4 pushl -0x1c(%ebp)
10b8cb: 56 push %esi
10b8cc: 68 62 0b 12 00 push $0x120b62
10b8d1: eb 0d jmp 10b8e0 <_Heap_Walk+0x30e>
"block 0x%08x: size %u\n",
block,
block_size
);
} else {
(*printer)(
10b8d3: 50 push %eax
10b8d4: 50 push %eax
10b8d5: ff 36 pushl (%esi)
10b8d7: ff 75 e4 pushl -0x1c(%ebp)
10b8da: 56 push %esi
10b8db: 68 79 0b 12 00 push $0x120b79
10b8e0: 6a 00 push $0x0
10b8e2: 57 push %edi
10b8e3: ff d3 call *%ebx
10b8e5: 83 c4 20 add $0x20,%esp
10b8e8: 8b 75 dc mov -0x24(%ebp),%esi
block->prev_size
);
}
block = next_block;
} while ( block != first_block );
10b8eb: 3b 75 d0 cmp -0x30(%ebp),%esi
10b8ee: 0f 85 65 fe ff ff jne 10b759 <_Heap_Walk+0x187>
10b8f4: e9 1c fd ff ff jmp 10b615 <_Heap_Walk+0x43>
if ( !_System_state_Is_up( _System_state_Get() ) ) {
return true;
}
if ( !_Heap_Walk_check_control( source, printer, heap ) ) {
return false;
10b8f9: 31 c0 xor %eax,%eax
10b8fb: eb 0b jmp 10b908 <_Heap_Walk+0x336>
return false;
}
if ( !_Heap_Walk_is_in_free_list( heap, block ) ) {
(*printer)(
10b8fd: 56 push %esi
10b8fe: 68 9e 0b 12 00 push $0x120b9e
10b903: e9 21 fe ff ff jmp 10b729 <_Heap_Walk+0x157>
block = next_block;
} while ( block != first_block );
return true;
}
10b908: 8d 65 f4 lea -0xc(%ebp),%esp
10b90b: 5b pop %ebx
10b90c: 5e pop %esi
10b90d: 5f pop %edi
10b90e: 5d pop %ebp
10b90f: c3 ret
0010adcc <_Internal_error_Occurred>:
void _Internal_error_Occurred(
Internal_errors_Source the_source,
bool is_internal,
Internal_errors_t the_error
)
{
10adcc: 55 push %ebp
10adcd: 89 e5 mov %esp,%ebp
10adcf: 53 push %ebx
10add0: 83 ec 08 sub $0x8,%esp
10add3: 8b 55 08 mov 0x8(%ebp),%edx
10add6: 8b 45 0c mov 0xc(%ebp),%eax
10add9: 8b 5d 10 mov 0x10(%ebp),%ebx
_Internal_errors_What_happened.the_source = the_source;
10addc: 89 15 64 e4 12 00 mov %edx,0x12e464
_Internal_errors_What_happened.is_internal = is_internal;
10ade2: a2 68 e4 12 00 mov %al,0x12e468
_Internal_errors_What_happened.the_error = the_error;
10ade7: 89 1d 6c e4 12 00 mov %ebx,0x12e46c
_User_extensions_Fatal( the_source, is_internal, the_error );
10aded: 53 push %ebx
10adee: 0f b6 c0 movzbl %al,%eax
10adf1: 50 push %eax
10adf2: 52 push %edx
10adf3: e8 01 1a 00 00 call 10c7f9 <_User_extensions_Fatal>
RTEMS_INLINE_ROUTINE void _System_state_Set (
System_state_Codes state
)
{
_System_state_Current = state;
10adf8: c7 05 20 e5 12 00 05 movl $0x5,0x12e520 <== NOT EXECUTED
10adff: 00 00 00
_System_state_Set( SYSTEM_STATE_FAILED );
_CPU_Fatal_halt( the_error );
10ae02: fa cli <== NOT EXECUTED
10ae03: 89 d8 mov %ebx,%eax <== NOT EXECUTED
10ae05: f4 hlt <== NOT EXECUTED
10ae06: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
10ae09: eb fe jmp 10ae09 <_Internal_error_Occurred+0x3d><== NOT EXECUTED
0010ae5c <_Objects_Allocate>:
*/
Objects_Control *_Objects_Allocate(
Objects_Information *information
)
{
10ae5c: 55 push %ebp
10ae5d: 89 e5 mov %esp,%ebp
10ae5f: 56 push %esi
10ae60: 53 push %ebx
10ae61: 8b 5d 08 mov 0x8(%ebp),%ebx
* If the application is using the optional manager stubs and
* still attempts to create the object, the information block
* should be all zeroed out because it is in the BSS. So let's
* check that code for this manager is even present.
*/
if ( information->size == 0 )
10ae64: 83 7b 18 00 cmpl $0x0,0x18(%ebx)
10ae68: 75 04 jne 10ae6e <_Objects_Allocate+0x12><== ALWAYS TAKEN
return NULL;
10ae6a: 31 c9 xor %ecx,%ecx
10ae6c: eb 51 jmp 10aebf <_Objects_Allocate+0x63>
/*
* OK. The manager should be initialized and configured to have objects.
* With any luck, it is safe to attempt to allocate an object.
*/
the_object = (Objects_Control *) _Chain_Get( &information->Inactive );
10ae6e: 8d 73 20 lea 0x20(%ebx),%esi
10ae71: 83 ec 0c sub $0xc,%esp
10ae74: 56 push %esi
10ae75: e8 06 f8 ff ff call 10a680 <_Chain_Get>
10ae7a: 89 c1 mov %eax,%ecx
if ( information->auto_extend ) {
10ae7c: 83 c4 10 add $0x10,%esp
10ae7f: 80 7b 12 00 cmpb $0x0,0x12(%ebx)
10ae83: 74 3a je 10aebf <_Objects_Allocate+0x63>
/*
* If the list is empty then we are out of objects and need to
* extend information base.
*/
if ( !the_object ) {
10ae85: 85 c0 test %eax,%eax
10ae87: 75 1a jne 10aea3 <_Objects_Allocate+0x47>
_Objects_Extend_information( information );
10ae89: 83 ec 0c sub $0xc,%esp
10ae8c: 53 push %ebx
10ae8d: e8 56 00 00 00 call 10aee8 <_Objects_Extend_information>
the_object = (Objects_Control *) _Chain_Get( &information->Inactive );
10ae92: 89 34 24 mov %esi,(%esp)
10ae95: e8 e6 f7 ff ff call 10a680 <_Chain_Get>
10ae9a: 89 c1 mov %eax,%ecx
}
if ( the_object ) {
10ae9c: 83 c4 10 add $0x10,%esp
10ae9f: 85 c0 test %eax,%eax
10aea1: 74 c7 je 10ae6a <_Objects_Allocate+0xe>
uint32_t block;
block = (uint32_t) _Objects_Get_index( the_object->id ) -
10aea3: 0f b7 41 08 movzwl 0x8(%ecx),%eax
10aea7: 0f b7 53 08 movzwl 0x8(%ebx),%edx
10aeab: 29 d0 sub %edx,%eax
_Objects_Get_index( information->minimum_id );
block /= information->allocation_size;
10aead: 0f b7 73 14 movzwl 0x14(%ebx),%esi
10aeb1: 31 d2 xor %edx,%edx
10aeb3: f7 f6 div %esi
information->inactive_per_block[ block ]--;
10aeb5: 8b 53 30 mov 0x30(%ebx),%edx
10aeb8: ff 0c 82 decl (%edx,%eax,4)
information->inactive--;
10aebb: 66 ff 4b 2c decw 0x2c(%ebx)
);
}
#endif
return the_object;
}
10aebf: 89 c8 mov %ecx,%eax
10aec1: 8d 65 f8 lea -0x8(%ebp),%esp
10aec4: 5b pop %ebx
10aec5: 5e pop %esi
10aec6: 5d pop %ebp
10aec7: c3 ret
0010aee8 <_Objects_Extend_information>:
*/
void _Objects_Extend_information(
Objects_Information *information
)
{
10aee8: 55 push %ebp
10aee9: 89 e5 mov %esp,%ebp
10aeeb: 57 push %edi
10aeec: 56 push %esi
10aeed: 53 push %ebx
10aeee: 83 ec 3c sub $0x3c,%esp
10aef1: 8b 5d 08 mov 0x8(%ebp),%ebx
/*
* Search for a free block of indexes. If we do NOT need to allocate or
* extend the block table, then we will change do_extend.
*/
do_extend = true;
minimum_index = _Objects_Get_index( information->minimum_id );
10aef4: 0f b7 43 08 movzwl 0x8(%ebx),%eax
10aef8: 89 45 c8 mov %eax,-0x38(%ebp)
index_base = minimum_index;
block = 0;
/* if ( information->maximum < minimum_index ) */
if ( information->object_blocks == NULL )
10aefb: 8b 73 34 mov 0x34(%ebx),%esi
10aefe: 85 f6 test %esi,%esi
10af00: 74 40 je 10af42 <_Objects_Extend_information+0x5a>
block_count = 0;
else {
block_count = information->maximum / information->allocation_size;
10af02: 0f b7 4b 14 movzwl 0x14(%ebx),%ecx
10af06: 8b 43 10 mov 0x10(%ebx),%eax
10af09: 31 d2 xor %edx,%edx
10af0b: 66 f7 f1 div %cx
10af0e: 0f b7 c0 movzwl %ax,%eax
10af11: 89 45 d0 mov %eax,-0x30(%ebp)
/*
* Search for a free block of indexes. If we do NOT need to allocate or
* extend the block table, then we will change do_extend.
*/
do_extend = true;
minimum_index = _Objects_Get_index( information->minimum_id );
10af14: 8b 55 c8 mov -0x38(%ebp),%edx
10af17: 89 55 cc mov %edx,-0x34(%ebp)
index_base = minimum_index;
block = 0;
10af1a: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)
if ( information->object_blocks == NULL )
block_count = 0;
else {
block_count = information->maximum / information->allocation_size;
for ( ; block < block_count; block++ ) {
10af21: eb 10 jmp 10af33 <_Objects_Extend_information+0x4b>
if ( information->object_blocks[ block ] == NULL ) {
10af23: 8b 55 d4 mov -0x2c(%ebp),%edx
10af26: 83 3c 96 00 cmpl $0x0,(%esi,%edx,4)
10af2a: 74 31 je 10af5d <_Objects_Extend_information+0x75>
* information - object information table
*
* Output parameters: NONE
*/
void _Objects_Extend_information(
10af2c: 01 4d cc add %ecx,-0x34(%ebp)
if ( information->object_blocks == NULL )
block_count = 0;
else {
block_count = information->maximum / information->allocation_size;
for ( ; block < block_count; block++ ) {
10af2f: 42 inc %edx
10af30: 89 55 d4 mov %edx,-0x2c(%ebp)
10af33: 8b 55 d0 mov -0x30(%ebp),%edx
10af36: 39 55 d4 cmp %edx,-0x2c(%ebp)
10af39: 72 e8 jb 10af23 <_Objects_Extend_information+0x3b>
/*
* Search for a free block of indexes. If we do NOT need to allocate or
* extend the block table, then we will change do_extend.
*/
do_extend = true;
10af3b: be 01 00 00 00 mov $0x1,%esi
10af40: eb 1d jmp 10af5f <_Objects_Extend_information+0x77>
minimum_index = _Objects_Get_index( information->minimum_id );
10af42: 8b 4d c8 mov -0x38(%ebp),%ecx
10af45: 89 4d cc mov %ecx,-0x34(%ebp)
/*
* Search for a free block of indexes. If we do NOT need to allocate or
* extend the block table, then we will change do_extend.
*/
do_extend = true;
10af48: be 01 00 00 00 mov $0x1,%esi
minimum_index = _Objects_Get_index( information->minimum_id );
index_base = minimum_index;
block = 0;
10af4d: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)
/* if ( information->maximum < minimum_index ) */
if ( information->object_blocks == NULL )
block_count = 0;
10af54: c7 45 d0 00 00 00 00 movl $0x0,-0x30(%ebp)
10af5b: eb 02 jmp 10af5f <_Objects_Extend_information+0x77>
else {
block_count = information->maximum / information->allocation_size;
for ( ; block < block_count; block++ ) {
if ( information->object_blocks[ block ] == NULL ) {
do_extend = false;
10af5d: 31 f6 xor %esi,%esi
} else
index_base += information->allocation_size;
}
}
maximum = (uint32_t) information->maximum + information->allocation_size;
10af5f: 0f b7 43 14 movzwl 0x14(%ebx),%eax
10af63: 0f b7 53 10 movzwl 0x10(%ebx),%edx
10af67: 01 c2 add %eax,%edx
10af69: 89 55 bc mov %edx,-0x44(%ebp)
/*
* We need to limit the number of objects to the maximum number
* representable in the index portion of the object Id. In the
* case of 16-bit Ids, this is only 256 object instances.
*/
if ( maximum > OBJECTS_ID_FINAL_INDEX ) {
10af6c: 81 fa ff ff 00 00 cmp $0xffff,%edx
10af72: 0f 87 bb 01 00 00 ja 10b133 <_Objects_Extend_information+0x24b><== NEVER TAKEN
/*
* Allocate the name table, and the objects and if it fails either return or
* generate a fatal error depending on auto-extending being active.
*/
block_size = information->allocation_size * information->size;
10af78: 0f af 43 18 imul 0x18(%ebx),%eax
if ( information->auto_extend ) {
10af7c: 80 7b 12 00 cmpb $0x0,0x12(%ebx)
10af80: 74 18 je 10af9a <_Objects_Extend_information+0xb2>
new_object_block = _Workspace_Allocate( block_size );
10af82: 83 ec 0c sub $0xc,%esp
10af85: 50 push %eax
10af86: e8 b9 1b 00 00 call 10cb44 <_Workspace_Allocate>
10af8b: 89 45 c0 mov %eax,-0x40(%ebp)
if ( !new_object_block )
10af8e: 83 c4 10 add $0x10,%esp
10af91: 85 c0 test %eax,%eax
10af93: 75 14 jne 10afa9 <_Objects_Extend_information+0xc1>
10af95: e9 99 01 00 00 jmp 10b133 <_Objects_Extend_information+0x24b>
return;
} else {
new_object_block = _Workspace_Allocate_or_fatal_error( block_size );
10af9a: 83 ec 0c sub $0xc,%esp
10af9d: 50 push %eax
10af9e: e8 d2 1b 00 00 call 10cb75 <_Workspace_Allocate_or_fatal_error>
10afa3: 89 45 c0 mov %eax,-0x40(%ebp)
10afa6: 83 c4 10 add $0x10,%esp
}
/*
* Do we need to grow the tables?
*/
if ( do_extend ) {
10afa9: 89 f0 mov %esi,%eax
10afab: 84 c0 test %al,%al
10afad: 0f 84 fd 00 00 00 je 10b0b0 <_Objects_Extend_information+0x1c8>
*/
/*
* Up the block count and maximum
*/
block_count++;
10afb3: 8b 75 d0 mov -0x30(%ebp),%esi
10afb6: 46 inc %esi
* Allocate the tables and break it up.
*/
block_size = block_count *
(sizeof(void *) + sizeof(uint32_t) + sizeof(Objects_Name *)) +
((maximum + minimum_index) * sizeof(Objects_Control *));
object_blocks = (void**) _Workspace_Allocate( block_size );
10afb7: 83 ec 0c sub $0xc,%esp
/*
* Allocate the tables and break it up.
*/
block_size = block_count *
(sizeof(void *) + sizeof(uint32_t) + sizeof(Objects_Name *)) +
((maximum + minimum_index) * sizeof(Objects_Control *));
10afba: 8b 55 bc mov -0x44(%ebp),%edx
10afbd: 03 55 c8 add -0x38(%ebp),%edx
/*
* Allocate the tables and break it up.
*/
block_size = block_count *
(sizeof(void *) + sizeof(uint32_t) + sizeof(Objects_Name *)) +
10afc0: 8d 04 76 lea (%esi,%esi,2),%eax
10afc3: 01 d0 add %edx,%eax
block_count++;
/*
* Allocate the tables and break it up.
*/
block_size = block_count *
10afc5: c1 e0 02 shl $0x2,%eax
(sizeof(void *) + sizeof(uint32_t) + sizeof(Objects_Name *)) +
((maximum + minimum_index) * sizeof(Objects_Control *));
object_blocks = (void**) _Workspace_Allocate( block_size );
10afc8: 50 push %eax
10afc9: e8 76 1b 00 00 call 10cb44 <_Workspace_Allocate>
10afce: 89 c2 mov %eax,%edx
if ( !object_blocks ) {
10afd0: 83 c4 10 add $0x10,%esp
10afd3: 85 c0 test %eax,%eax
10afd5: 75 13 jne 10afea <_Objects_Extend_information+0x102>
_Workspace_Free( new_object_block );
10afd7: 83 ec 0c sub $0xc,%esp
10afda: ff 75 c0 pushl -0x40(%ebp)
10afdd: e8 7b 1b 00 00 call 10cb5d <_Workspace_Free>
10afe2: 83 c4 10 add $0x10,%esp
10afe5: e9 49 01 00 00 jmp 10b133 <_Objects_Extend_information+0x24b>
10afea: 8d 0c b0 lea (%eax,%esi,4),%ecx
10afed: 89 4d b8 mov %ecx,-0x48(%ebp)
10aff0: 8d 34 f0 lea (%eax,%esi,8),%esi
10aff3: 89 75 c4 mov %esi,-0x3c(%ebp)
* Take the block count down. Saves all the (block_count - 1)
* in the copies.
*/
block_count--;
if ( information->maximum > minimum_index ) {
10aff6: 0f b7 4b 10 movzwl 0x10(%ebx),%ecx
10affa: 31 c0 xor %eax,%eax
10affc: 3b 4d c8 cmp -0x38(%ebp),%ecx
10afff: 76 38 jbe 10b039 <_Objects_Extend_information+0x151>
/*
* Copy each section of the table over. This has to be performed as
* separate parts as size of each block has changed.
*/
memcpy( object_blocks,
10b001: 8b 45 d0 mov -0x30(%ebp),%eax
10b004: c1 e0 02 shl $0x2,%eax
10b007: 8b 73 34 mov 0x34(%ebx),%esi
10b00a: 89 d7 mov %edx,%edi
10b00c: 89 c1 mov %eax,%ecx
10b00e: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
information->object_blocks,
block_count * sizeof(void*) );
memcpy( inactive_per_block,
10b010: 8b 73 30 mov 0x30(%ebx),%esi
10b013: 8b 7d b8 mov -0x48(%ebp),%edi
10b016: 89 c1 mov %eax,%ecx
10b018: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
information->inactive_per_block,
block_count * sizeof(uint32_t) );
memcpy( local_table,
information->local_table,
(information->maximum + minimum_index) * sizeof(Objects_Control *) );
10b01a: 0f b7 4b 10 movzwl 0x10(%ebx),%ecx
10b01e: 03 4d c8 add -0x38(%ebp),%ecx
information->object_blocks,
block_count * sizeof(void*) );
memcpy( inactive_per_block,
information->inactive_per_block,
block_count * sizeof(uint32_t) );
memcpy( local_table,
10b021: c1 e1 02 shl $0x2,%ecx
10b024: 8b 73 1c mov 0x1c(%ebx),%esi
10b027: 8b 7d c4 mov -0x3c(%ebp),%edi
10b02a: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
10b02c: eb 10 jmp 10b03e <_Objects_Extend_information+0x156>
/*
* Deal with the special case of the 0 to minimum_index
*/
for ( index = 0; index < minimum_index; index++ ) {
local_table[ index ] = NULL;
10b02e: 8b 75 c4 mov -0x3c(%ebp),%esi
10b031: c7 04 86 00 00 00 00 movl $0x0,(%esi,%eax,4)
} else {
/*
* Deal with the special case of the 0 to minimum_index
*/
for ( index = 0; index < minimum_index; index++ ) {
10b038: 40 inc %eax
10b039: 3b 45 c8 cmp -0x38(%ebp),%eax
10b03c: 75 f0 jne 10b02e <_Objects_Extend_information+0x146>
}
/*
* Initialise the new entries in the table.
*/
object_blocks[block_count] = NULL;
10b03e: 8b 45 d0 mov -0x30(%ebp),%eax
10b041: c7 04 82 00 00 00 00 movl $0x0,(%edx,%eax,4)
inactive_per_block[block_count] = 0;
10b048: 8b 4d b8 mov -0x48(%ebp),%ecx
10b04b: c7 04 81 00 00 00 00 movl $0x0,(%ecx,%eax,4)
for ( index=index_base ;
index < ( information->allocation_size + index_base );
10b052: 0f b7 4b 14 movzwl 0x14(%ebx),%ecx
10b056: 03 4d cc add -0x34(%ebp),%ecx
* Initialise the new entries in the table.
*/
object_blocks[block_count] = NULL;
inactive_per_block[block_count] = 0;
for ( index=index_base ;
10b059: 8b 45 cc mov -0x34(%ebp),%eax
10b05c: eb 0b jmp 10b069 <_Objects_Extend_information+0x181>
index < ( information->allocation_size + index_base );
index++ ) {
local_table[ index ] = NULL;
10b05e: 8b 75 c4 mov -0x3c(%ebp),%esi
10b061: c7 04 86 00 00 00 00 movl $0x0,(%esi,%eax,4)
object_blocks[block_count] = NULL;
inactive_per_block[block_count] = 0;
for ( index=index_base ;
index < ( information->allocation_size + index_base );
index++ ) {
10b068: 40 inc %eax
* Initialise the new entries in the table.
*/
object_blocks[block_count] = NULL;
inactive_per_block[block_count] = 0;
for ( index=index_base ;
10b069: 39 c8 cmp %ecx,%eax
10b06b: 72 f1 jb 10b05e <_Objects_Extend_information+0x176>
index < ( information->allocation_size + index_base );
index++ ) {
local_table[ index ] = NULL;
}
_ISR_Disable( level );
10b06d: 9c pushf
10b06e: fa cli
10b06f: 5e pop %esi
old_tables = information->object_blocks;
10b070: 8b 4b 34 mov 0x34(%ebx),%ecx
information->object_blocks = object_blocks;
10b073: 89 53 34 mov %edx,0x34(%ebx)
information->inactive_per_block = inactive_per_block;
10b076: 8b 45 b8 mov -0x48(%ebp),%eax
10b079: 89 43 30 mov %eax,0x30(%ebx)
information->local_table = local_table;
10b07c: 8b 55 c4 mov -0x3c(%ebp),%edx
10b07f: 89 53 1c mov %edx,0x1c(%ebx)
information->maximum = (Objects_Maximum) maximum;
10b082: 8b 45 bc mov -0x44(%ebp),%eax
10b085: 66 89 43 10 mov %ax,0x10(%ebx)
uint32_t the_class,
uint32_t node,
uint32_t index
)
{
return (( (Objects_Id) the_api ) << OBJECTS_API_START_BIT) |
10b089: 8b 03 mov (%ebx),%eax
10b08b: c1 e0 18 shl $0x18,%eax
10b08e: 0d 00 00 01 00 or $0x10000,%eax
(( (Objects_Id) the_class ) << OBJECTS_CLASS_START_BIT) |
10b093: 0b 45 bc or -0x44(%ebp),%eax
information->maximum_id = _Objects_Build_id(
10b096: 0f b7 53 04 movzwl 0x4(%ebx),%edx
10b09a: c1 e2 1b shl $0x1b,%edx
uint32_t the_class,
uint32_t node,
uint32_t index
)
{
return (( (Objects_Id) the_api ) << OBJECTS_API_START_BIT) |
10b09d: 09 d0 or %edx,%eax
10b09f: 89 43 0c mov %eax,0xc(%ebx)
information->the_class,
_Objects_Local_node,
information->maximum
);
_ISR_Enable( level );
10b0a2: 56 push %esi
10b0a3: 9d popf
_Workspace_Free( old_tables );
10b0a4: 83 ec 0c sub $0xc,%esp
10b0a7: 51 push %ecx
10b0a8: e8 b0 1a 00 00 call 10cb5d <_Workspace_Free>
10b0ad: 83 c4 10 add $0x10,%esp
}
/*
* Assign the new object block to the object block table.
*/
information->object_blocks[ block ] = new_object_block;
10b0b0: 8b 55 d4 mov -0x2c(%ebp),%edx
10b0b3: c1 e2 02 shl $0x2,%edx
10b0b6: 89 55 d0 mov %edx,-0x30(%ebp)
10b0b9: 8b 43 34 mov 0x34(%ebx),%eax
10b0bc: 8b 4d c0 mov -0x40(%ebp),%ecx
10b0bf: 8b 55 d4 mov -0x2c(%ebp),%edx
10b0c2: 89 0c 90 mov %ecx,(%eax,%edx,4)
/*
* Initialize objects .. add to a local chain first.
*/
_Chain_Initialize(
10b0c5: ff 73 18 pushl 0x18(%ebx)
10b0c8: 0f b7 43 14 movzwl 0x14(%ebx),%eax
10b0cc: 50 push %eax
10b0cd: 8b 43 34 mov 0x34(%ebx),%eax
10b0d0: ff 34 90 pushl (%eax,%edx,4)
10b0d3: 8d 7d dc lea -0x24(%ebp),%edi
10b0d6: 57 push %edi
10b0d7: e8 c8 f5 ff ff call 10a6a4 <_Chain_Initialize>
/*
* Move from the local chain, initialise, then append to the inactive chain
*/
index = index_base;
while ((the_object = (Objects_Control *) _Chain_Get( &Inactive )) != NULL ) {
10b0dc: 83 c4 10 add $0x10,%esp
);
/*
* Move from the local chain, initialise, then append to the inactive chain
*/
index = index_base;
10b0df: 8b 75 cc mov -0x34(%ebp),%esi
information->the_class,
_Objects_Local_node,
index
);
_Chain_Append( &information->Inactive, &the_object->Node );
10b0e2: 8d 7b 20 lea 0x20(%ebx),%edi
/*
* Move from the local chain, initialise, then append to the inactive chain
*/
index = index_base;
while ((the_object = (Objects_Control *) _Chain_Get( &Inactive )) != NULL ) {
10b0e5: eb 26 jmp 10b10d <_Objects_Extend_information+0x225>
10b0e7: 8b 13 mov (%ebx),%edx
10b0e9: c1 e2 18 shl $0x18,%edx
10b0ec: 81 ca 00 00 01 00 or $0x10000,%edx
the_object->id = _Objects_Build_id(
10b0f2: 0f b7 4b 04 movzwl 0x4(%ebx),%ecx
(( (Objects_Id) the_class ) << OBJECTS_CLASS_START_BIT) |
10b0f6: c1 e1 1b shl $0x1b,%ecx
10b0f9: 09 ca or %ecx,%edx
uint32_t the_class,
uint32_t node,
uint32_t index
)
{
return (( (Objects_Id) the_api ) << OBJECTS_API_START_BIT) |
10b0fb: 09 f2 or %esi,%edx
10b0fd: 89 50 08 mov %edx,0x8(%eax)
information->the_class,
_Objects_Local_node,
index
);
_Chain_Append( &information->Inactive, &the_object->Node );
10b100: 52 push %edx
10b101: 52 push %edx
10b102: 50 push %eax
10b103: 57 push %edi
10b104: e8 53 f5 ff ff call 10a65c <_Chain_Append>
index++;
10b109: 46 inc %esi
10b10a: 83 c4 10 add $0x10,%esp
/*
* Move from the local chain, initialise, then append to the inactive chain
*/
index = index_base;
while ((the_object = (Objects_Control *) _Chain_Get( &Inactive )) != NULL ) {
10b10d: 83 ec 0c sub $0xc,%esp
10b110: 8d 45 dc lea -0x24(%ebp),%eax
10b113: 50 push %eax
10b114: e8 67 f5 ff ff call 10a680 <_Chain_Get>
10b119: 83 c4 10 add $0x10,%esp
10b11c: 85 c0 test %eax,%eax
10b11e: 75 c7 jne 10b0e7 <_Objects_Extend_information+0x1ff>
_Chain_Append( &information->Inactive, &the_object->Node );
index++;
}
information->inactive_per_block[ block ] = information->allocation_size;
10b120: 8b 43 14 mov 0x14(%ebx),%eax
10b123: 8b 53 30 mov 0x30(%ebx),%edx
10b126: 0f b7 c8 movzwl %ax,%ecx
10b129: 8b 75 d0 mov -0x30(%ebp),%esi
10b12c: 89 0c 32 mov %ecx,(%edx,%esi,1)
information->inactive =
(Objects_Maximum)(information->inactive + information->allocation_size);
10b12f: 66 01 43 2c add %ax,0x2c(%ebx)
}
10b133: 8d 65 f4 lea -0xc(%ebp),%esp
10b136: 5b pop %ebx
10b137: 5e pop %esi
10b138: 5f pop %edi
10b139: 5d pop %ebp
10b13a: c3 ret
0010b1cc <_Objects_Get_information>:
Objects_Information *_Objects_Get_information(
Objects_APIs the_api,
uint16_t the_class
)
{
10b1cc: 55 push %ebp
10b1cd: 89 e5 mov %esp,%ebp
10b1cf: 56 push %esi
10b1d0: 53 push %ebx
10b1d1: 8b 5d 08 mov 0x8(%ebp),%ebx
10b1d4: 0f b7 75 0c movzwl 0xc(%ebp),%esi
Objects_Information *info;
int the_class_api_maximum;
if ( !the_class )
10b1d8: 66 85 f6 test %si,%si
10b1db: 75 04 jne 10b1e1 <_Objects_Get_information+0x15>
return NULL;
10b1dd: 31 c0 xor %eax,%eax
10b1df: eb 2d jmp 10b20e <_Objects_Get_information+0x42>
/*
* This call implicitly validates the_api so we do not call
* _Objects_Is_api_valid above here.
*/
the_class_api_maximum = _Objects_API_maximum_class( the_api );
10b1e1: 83 ec 0c sub $0xc,%esp
10b1e4: 53 push %ebx
10b1e5: e8 b2 43 00 00 call 10f59c <_Objects_API_maximum_class>
if ( the_class_api_maximum == 0 )
10b1ea: 83 c4 10 add $0x10,%esp
10b1ed: 85 c0 test %eax,%eax
10b1ef: 74 ec je 10b1dd <_Objects_Get_information+0x11>
return NULL;
if ( the_class > (uint32_t) the_class_api_maximum )
10b1f1: 39 c6 cmp %eax,%esi
10b1f3: 77 e8 ja 10b1dd <_Objects_Get_information+0x11>
return NULL;
if ( !_Objects_Information_table[ the_api ] )
10b1f5: 8b 04 9d bc e3 12 00 mov 0x12e3bc(,%ebx,4),%eax
10b1fc: 85 c0 test %eax,%eax
10b1fe: 74 dd je 10b1dd <_Objects_Get_information+0x11><== NEVER TAKEN
return NULL;
info = _Objects_Information_table[ the_api ][ the_class ];
10b200: 8b 04 b0 mov (%eax,%esi,4),%eax
if ( !info )
10b203: 85 c0 test %eax,%eax
10b205: 74 d6 je 10b1dd <_Objects_Get_information+0x11><== NEVER TAKEN
* In a multprocessing configuration, we may access remote objects.
* Thus we may have 0 local instances and still have a valid object
* pointer.
*/
#if !defined(RTEMS_MULTIPROCESSING)
if ( info->maximum == 0 )
10b207: 66 83 78 10 00 cmpw $0x0,0x10(%eax)
10b20c: 74 cf je 10b1dd <_Objects_Get_information+0x11>
return NULL;
#endif
return info;
}
10b20e: 8d 65 f8 lea -0x8(%ebp),%esp
10b211: 5b pop %ebx
10b212: 5e pop %esi
10b213: 5d pop %ebp
10b214: c3 ret
001187b4 <_Objects_Get_no_protection>:
Objects_Control *_Objects_Get_no_protection(
Objects_Information *information,
Objects_Id id,
Objects_Locations *location
)
{
1187b4: 55 push %ebp
1187b5: 89 e5 mov %esp,%ebp
1187b7: 53 push %ebx
1187b8: 8b 55 08 mov 0x8(%ebp),%edx
1187bb: 8b 4d 10 mov 0x10(%ebp),%ecx
/*
* You can't just extract the index portion or you can get tricked
* by a value between 1 and maximum.
*/
index = id - information->minimum_id + 1;
1187be: b8 01 00 00 00 mov $0x1,%eax
1187c3: 2b 42 08 sub 0x8(%edx),%eax
1187c6: 03 45 0c add 0xc(%ebp),%eax
if ( information->maximum >= index ) {
1187c9: 0f b7 5a 10 movzwl 0x10(%edx),%ebx
1187cd: 39 c3 cmp %eax,%ebx
1187cf: 72 12 jb 1187e3 <_Objects_Get_no_protection+0x2f>
if ( (the_object = information->local_table[ index ]) != NULL ) {
1187d1: 8b 52 1c mov 0x1c(%edx),%edx
1187d4: 8b 04 82 mov (%edx,%eax,4),%eax
1187d7: 85 c0 test %eax,%eax
1187d9: 74 08 je 1187e3 <_Objects_Get_no_protection+0x2f><== NEVER TAKEN
*location = OBJECTS_LOCAL;
1187db: c7 01 00 00 00 00 movl $0x0,(%ecx)
return the_object;
1187e1: eb 08 jmp 1187eb <_Objects_Get_no_protection+0x37>
/*
* This isn't supported or required yet for Global objects so
* if it isn't local, we don't find it.
*/
*location = OBJECTS_ERROR;
1187e3: c7 01 01 00 00 00 movl $0x1,(%ecx)
return NULL;
1187e9: 31 c0 xor %eax,%eax
}
1187eb: 5b pop %ebx
1187ec: 5d pop %ebp
1187ed: c3 ret
0010e310 <_Objects_Id_to_name>:
*/
Objects_Name_or_id_lookup_errors _Objects_Id_to_name (
Objects_Id id,
Objects_Name *name
)
{
10e310: 55 push %ebp
10e311: 89 e5 mov %esp,%ebp
10e313: 83 ec 18 sub $0x18,%esp
/*
* Caller is trusted for name != NULL.
*/
tmpId = (id == OBJECTS_ID_OF_SELF) ? _Thread_Executing->Object.id : id;
10e316: 8b 45 08 mov 0x8(%ebp),%eax
10e319: 85 c0 test %eax,%eax
10e31b: 75 08 jne 10e325 <_Objects_Id_to_name+0x15>
10e31d: a1 ec a1 13 00 mov 0x13a1ec,%eax
10e322: 8b 40 08 mov 0x8(%eax),%eax
10e325: 89 c2 mov %eax,%edx
10e327: c1 ea 18 shr $0x18,%edx
10e32a: 83 e2 07 and $0x7,%edx
*/
RTEMS_INLINE_ROUTINE bool _Objects_Is_api_valid(
uint32_t the_api
)
{
if ( !the_api || the_api > OBJECTS_APIS_LAST )
10e32d: 8d 4a ff lea -0x1(%edx),%ecx
10e330: 83 f9 02 cmp $0x2,%ecx
10e333: 76 3d jbe 10e372 <_Objects_Id_to_name+0x62>
the_api = _Objects_Get_API( tmpId );
if ( !_Objects_Is_api_valid( the_api ) )
return OBJECTS_INVALID_ID;
10e335: b8 03 00 00 00 mov $0x3,%eax
10e33a: eb 43 jmp 10e37f <_Objects_Id_to_name+0x6f>
*/
RTEMS_INLINE_ROUTINE uint32_t _Objects_Get_class(
Objects_Id id
)
{
return (uint32_t)
10e33c: 89 c1 mov %eax,%ecx
10e33e: c1 e9 1b shr $0x1b,%ecx
if ( !_Objects_Information_table[ the_api ] )
return OBJECTS_INVALID_ID;
the_class = _Objects_Get_class( tmpId );
information = _Objects_Information_table[ the_api ][ the_class ];
10e341: 8b 14 8a mov (%edx,%ecx,4),%edx
if ( !information )
10e344: 85 d2 test %edx,%edx
10e346: 74 ed je 10e335 <_Objects_Id_to_name+0x25><== NEVER TAKEN
return OBJECTS_INVALID_ID;
#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
if ( information->is_string )
10e348: 80 7a 38 00 cmpb $0x0,0x38(%edx)
10e34c: 75 e7 jne 10e335 <_Objects_Id_to_name+0x25><== NEVER TAKEN
return OBJECTS_INVALID_ID;
#endif
the_object = _Objects_Get( information, tmpId, &ignored_location );
10e34e: 51 push %ecx
10e34f: 8d 4d f4 lea -0xc(%ebp),%ecx
10e352: 51 push %ecx
10e353: 50 push %eax
10e354: 52 push %edx
10e355: e8 56 ff ff ff call 10e2b0 <_Objects_Get>
if ( !the_object )
10e35a: 83 c4 10 add $0x10,%esp
10e35d: 85 c0 test %eax,%eax
10e35f: 74 d4 je 10e335 <_Objects_Id_to_name+0x25>
return OBJECTS_INVALID_ID;
*name = the_object->name;
10e361: 8b 50 0c mov 0xc(%eax),%edx
10e364: 8b 45 0c mov 0xc(%ebp),%eax
10e367: 89 10 mov %edx,(%eax)
_Thread_Enable_dispatch();
10e369: e8 5a 0b 00 00 call 10eec8 <_Thread_Enable_dispatch>
return OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL;
10e36e: 31 c0 xor %eax,%eax
10e370: eb 0d jmp 10e37f <_Objects_Id_to_name+0x6f>
the_api = _Objects_Get_API( tmpId );
if ( !_Objects_Is_api_valid( the_api ) )
return OBJECTS_INVALID_ID;
if ( !_Objects_Information_table[ the_api ] )
10e372: 8b 14 95 7c 9c 13 00 mov 0x139c7c(,%edx,4),%edx
10e379: 85 d2 test %edx,%edx
10e37b: 75 bf jne 10e33c <_Objects_Id_to_name+0x2c>
10e37d: eb b6 jmp 10e335 <_Objects_Id_to_name+0x25>
return OBJECTS_INVALID_ID;
*name = the_object->name;
_Thread_Enable_dispatch();
return OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL;
}
10e37f: c9 leave
10e380: c3 ret
00110704 <_POSIX_Keys_Run_destructors>:
*/
void _POSIX_Keys_Run_destructors(
Thread_Control *thread
)
{
110704: 55 push %ebp
110705: 89 e5 mov %esp,%ebp
110707: 57 push %edi
110708: 56 push %esi
110709: 53 push %ebx
11070a: 83 ec 1c sub $0x1c,%esp
Objects_Maximum thread_index = _Objects_Get_index( thread->Object.id );
11070d: 8b 45 08 mov 0x8(%ebp),%eax
110710: 8b 40 08 mov 0x8(%eax),%eax
110713: 89 c6 mov %eax,%esi
110715: c1 ee 18 shr $0x18,%esi
110718: 83 e6 07 and $0x7,%esi
for ( index = 1 ; index <= max ; ++index ) {
POSIX_Keys_Control *key = (POSIX_Keys_Control *)
_POSIX_Keys_Information.local_table [ index ];
if ( key != NULL && key->destructor != NULL ) {
void *value = key->Values [ thread_api ][ thread_index ];
11071b: 25 ff ff 00 00 and $0xffff,%eax
110720: c1 e0 02 shl $0x2,%eax
110723: 89 45 e0 mov %eax,-0x20(%ebp)
*
* Reference: 17.1.1.2 P1003.1c/Draft 10, p. 163, line 99.
*/
while ( !done ) {
Objects_Maximum index = 0;
Objects_Maximum max = _POSIX_Keys_Information.maximum;
110726: a1 d0 e7 12 00 mov 0x12e7d0,%eax
11072b: 66 89 45 e6 mov %ax,-0x1a(%ebp)
done = true;
for ( index = 1 ; index <= max ; ++index ) {
11072f: bb 01 00 00 00 mov $0x1,%ebx
*/
while ( !done ) {
Objects_Maximum index = 0;
Objects_Maximum max = _POSIX_Keys_Information.maximum;
done = true;
110734: b2 01 mov $0x1,%dl
for ( index = 1 ; index <= max ; ++index ) {
110736: eb 35 jmp 11076d <_POSIX_Keys_Run_destructors+0x69>
POSIX_Keys_Control *key = (POSIX_Keys_Control *)
_POSIX_Keys_Information.local_table [ index ];
110738: 0f b7 cb movzwl %bx,%ecx
Objects_Maximum max = _POSIX_Keys_Information.maximum;
done = true;
for ( index = 1 ; index <= max ; ++index ) {
POSIX_Keys_Control *key = (POSIX_Keys_Control *)
11073b: a1 dc e7 12 00 mov 0x12e7dc,%eax
110740: 8b 04 88 mov (%eax,%ecx,4),%eax
_POSIX_Keys_Information.local_table [ index ];
if ( key != NULL && key->destructor != NULL ) {
110743: 85 c0 test %eax,%eax
110745: 74 25 je 11076c <_POSIX_Keys_Run_destructors+0x68>
110747: 83 78 10 00 cmpl $0x0,0x10(%eax)
11074b: 74 1f je 11076c <_POSIX_Keys_Run_destructors+0x68>
void *value = key->Values [ thread_api ][ thread_index ];
11074d: 8b 7d e0 mov -0x20(%ebp),%edi
110750: 03 7c b0 14 add 0x14(%eax,%esi,4),%edi
110754: 8b 0f mov (%edi),%ecx
if ( value != NULL ) {
110756: 85 c9 test %ecx,%ecx
110758: 74 12 je 11076c <_POSIX_Keys_Run_destructors+0x68><== ALWAYS TAKEN
key->Values [ thread_api ][ thread_index ] = NULL;
11075a: c7 07 00 00 00 00 movl $0x0,(%edi) <== NOT EXECUTED
(*key->destructor)( value );
110760: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
110763: 51 push %ecx <== NOT EXECUTED
110764: ff 50 10 call *0x10(%eax) <== NOT EXECUTED
110767: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
done = false;
11076a: 31 d2 xor %edx,%edx <== NOT EXECUTED
Objects_Maximum index = 0;
Objects_Maximum max = _POSIX_Keys_Information.maximum;
done = true;
for ( index = 1 ; index <= max ; ++index ) {
11076c: 43 inc %ebx
11076d: 66 3b 5d e6 cmp -0x1a(%ebp),%bx
110771: 76 c5 jbe 110738 <_POSIX_Keys_Run_destructors+0x34>
* number of iterations. An infinite loop may happen if destructors set
* thread specific data. This can be considered dubious.
*
* Reference: 17.1.1.2 P1003.1c/Draft 10, p. 163, line 99.
*/
while ( !done ) {
110773: 84 d2 test %dl,%dl
110775: 74 af je 110726 <_POSIX_Keys_Run_destructors+0x22><== NEVER TAKEN
done = false;
}
}
}
}
}
110777: 8d 65 f4 lea -0xc(%ebp),%esp
11077a: 5b pop %ebx
11077b: 5e pop %esi
11077c: 5f pop %edi
11077d: 5d pop %ebp
11077e: c3 ret
0010dd3c <_POSIX_Message_queue_Receive_support>:
size_t msg_len,
unsigned int *msg_prio,
bool wait,
Watchdog_Interval timeout
)
{
10dd3c: 55 push %ebp
10dd3d: 89 e5 mov %esp,%ebp
10dd3f: 57 push %edi
10dd40: 56 push %esi
10dd41: 53 push %ebx
10dd42: 83 ec 30 sub $0x30,%esp
10dd45: 8b 75 08 mov 0x8(%ebp),%esi
10dd48: 8b 5d 14 mov 0x14(%ebp),%ebx
10dd4b: 8a 4d 18 mov 0x18(%ebp),%cl
POSIX_Message_queue_Control_fd *the_mq_fd;
Objects_Locations location;
size_t length_out;
bool do_wait;
the_mq_fd = _POSIX_Message_queue_Get_fd( mqdes, &location );
10dd4e: 8d 45 e0 lea -0x20(%ebp),%eax
RTEMS_INLINE_ROUTINE POSIX_Message_queue_Control_fd *_POSIX_Message_queue_Get_fd (
mqd_t id,
Objects_Locations *location
)
{
return (POSIX_Message_queue_Control_fd *) _Objects_Get(
10dd51: 50 push %eax
10dd52: 56 push %esi
10dd53: 68 b4 5d 13 00 push $0x135db4
10dd58: 88 4d d4 mov %cl,-0x2c(%ebp)
10dd5b: e8 34 2b 00 00 call 110894 <_Objects_Get>
switch ( location ) {
10dd60: 83 c4 10 add $0x10,%esp
10dd63: 83 7d e0 00 cmpl $0x0,-0x20(%ebp)
10dd67: 8a 4d d4 mov -0x2c(%ebp),%cl
10dd6a: 0f 85 b6 00 00 00 jne 10de26 <_POSIX_Message_queue_Receive_support+0xea>
case OBJECTS_LOCAL:
if ( (the_mq_fd->oflag & O_ACCMODE) == O_WRONLY ) {
10dd70: 8b 78 14 mov 0x14(%eax),%edi
10dd73: 89 fa mov %edi,%edx
10dd75: 83 e2 03 and $0x3,%edx
10dd78: 4a dec %edx
10dd79: 75 0a jne 10dd85 <_POSIX_Message_queue_Receive_support+0x49>
_Thread_Enable_dispatch();
10dd7b: e8 c4 36 00 00 call 111444 <_Thread_Enable_dispatch>
10dd80: e9 a1 00 00 00 jmp 10de26 <_POSIX_Message_queue_Receive_support+0xea>
rtems_set_errno_and_return_minus_one( EBADF );
}
the_mq = the_mq_fd->Queue;
10dd85: 8b 50 10 mov 0x10(%eax),%edx
if ( msg_len < the_mq->Message_queue.maximum_message_size ) {
10dd88: 8b 42 68 mov 0x68(%edx),%eax
10dd8b: 39 45 10 cmp %eax,0x10(%ebp)
10dd8e: 73 15 jae 10dda5 <_POSIX_Message_queue_Receive_support+0x69>
_Thread_Enable_dispatch();
10dd90: e8 af 36 00 00 call 111444 <_Thread_Enable_dispatch>
rtems_set_errno_and_return_minus_one( EMSGSIZE );
10dd95: e8 a6 88 00 00 call 116640 <__errno>
10dd9a: c7 00 7a 00 00 00 movl $0x7a,(%eax)
10dda0: e9 8c 00 00 00 jmp 10de31 <_POSIX_Message_queue_Receive_support+0xf5>
/*
* Now if something goes wrong, we return a "length" of -1
* to indicate an error.
*/
length_out = -1;
10dda5: c7 45 e4 ff ff ff ff movl $0xffffffff,-0x1c(%ebp)
/*
* A timed receive with a bad time will do a poll regardless.
*/
if ( wait )
10ddac: 31 c0 xor %eax,%eax
10ddae: 84 c9 test %cl,%cl
10ddb0: 74 0b je 10ddbd <_POSIX_Message_queue_Receive_support+0x81>
do_wait = (the_mq_fd->oflag & O_NONBLOCK) ? false : true;
10ddb2: 89 f8 mov %edi,%eax
10ddb4: c1 e8 0e shr $0xe,%eax
10ddb7: 83 f0 01 xor $0x1,%eax
10ddba: 83 e0 01 and $0x1,%eax
do_wait = wait;
/*
* Now perform the actual message receive
*/
_CORE_message_queue_Seize(
10ddbd: 51 push %ecx
10ddbe: 51 push %ecx
10ddbf: ff 75 1c pushl 0x1c(%ebp)
10ddc2: 0f b6 c0 movzbl %al,%eax
10ddc5: 50 push %eax
10ddc6: 8d 45 e4 lea -0x1c(%ebp),%eax
10ddc9: 50 push %eax
10ddca: ff 75 0c pushl 0xc(%ebp)
10ddcd: 56 push %esi
10ddce: 83 c2 1c add $0x1c,%edx
10ddd1: 52 push %edx
10ddd2: e8 dd 1c 00 00 call 10fab4 <_CORE_message_queue_Seize>
&length_out,
do_wait,
timeout
);
_Thread_Enable_dispatch();
10ddd7: 83 c4 20 add $0x20,%esp
10ddda: e8 65 36 00 00 call 111444 <_Thread_Enable_dispatch>
if (msg_prio) {
10dddf: 85 db test %ebx,%ebx
10dde1: 74 15 je 10ddf8 <_POSIX_Message_queue_Receive_support+0xbc><== NEVER TAKEN
*msg_prio = _POSIX_Message_queue_Priority_from_core(
_Thread_Executing->Wait.count
10dde3: 8b 15 2c 5e 13 00 mov 0x135e2c,%edx
RTEMS_INLINE_ROUTINE unsigned int _POSIX_Message_queue_Priority_from_core(
CORE_message_queue_Submit_types priority
)
{
/* absolute value without a library dependency */
return (unsigned int) ((priority >= 0) ? priority : -priority);
10dde9: 8b 42 24 mov 0x24(%edx),%eax
10ddec: c1 f8 1f sar $0x1f,%eax
10ddef: 8b 52 24 mov 0x24(%edx),%edx
10ddf2: 31 c2 xor %eax,%edx
10ddf4: 89 13 mov %edx,(%ebx)
10ddf6: 29 03 sub %eax,(%ebx)
);
}
if ( !_Thread_Executing->Wait.return_code )
10ddf8: a1 2c 5e 13 00 mov 0x135e2c,%eax
10ddfd: 83 78 34 00 cmpl $0x0,0x34(%eax)
10de01: 75 05 jne 10de08 <_POSIX_Message_queue_Receive_support+0xcc>
return length_out;
10de03: 8b 45 e4 mov -0x1c(%ebp),%eax
10de06: eb 2c jmp 10de34 <_POSIX_Message_queue_Receive_support+0xf8>
rtems_set_errno_and_return_minus_one(
10de08: e8 33 88 00 00 call 116640 <__errno>
10de0d: 89 c3 mov %eax,%ebx
10de0f: 83 ec 0c sub $0xc,%esp
10de12: a1 2c 5e 13 00 mov 0x135e2c,%eax
10de17: ff 70 34 pushl 0x34(%eax)
10de1a: e8 f1 01 00 00 call 10e010 <_POSIX_Message_queue_Translate_core_message_queue_return_code>
10de1f: 89 03 mov %eax,(%ebx)
10de21: 83 c4 10 add $0x10,%esp
10de24: eb 0b jmp 10de31 <_POSIX_Message_queue_Receive_support+0xf5>
#endif
case OBJECTS_ERROR:
break;
}
rtems_set_errno_and_return_minus_one( EBADF );
10de26: e8 15 88 00 00 call 116640 <__errno>
10de2b: c7 00 09 00 00 00 movl $0x9,(%eax)
10de31: 83 c8 ff or $0xffffffff,%eax
}
10de34: 8d 65 f4 lea -0xc(%ebp),%esp
10de37: 5b pop %ebx
10de38: 5e pop %esi
10de39: 5f pop %edi
10de3a: 5d pop %ebp
10de3b: c3 ret
001100d8 <_POSIX_Semaphore_Create_support>:
size_t name_len,
int pshared,
unsigned int value,
POSIX_Semaphore_Control **the_sem
)
{
1100d8: 55 push %ebp
1100d9: 89 e5 mov %esp,%ebp
1100db: 56 push %esi
1100dc: 53 push %ebx
1100dd: 8b 75 08 mov 0x8(%ebp),%esi
POSIX_Semaphore_Control *the_semaphore;
CORE_semaphore_Attributes *the_sem_attr;
char *name;
/* Sharing semaphores among processes is not currently supported */
if (pshared != 0)
1100e0: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
1100e4: 74 0d je 1100f3 <_POSIX_Semaphore_Create_support+0x1b>
rtems_set_errno_and_return_minus_one( ENOSYS );
1100e6: e8 ad 27 00 00 call 112898 <__errno>
1100eb: c7 00 58 00 00 00 movl $0x58,(%eax)
1100f1: eb 36 jmp 110129 <_POSIX_Semaphore_Create_support+0x51>
*
* This rountine increments the thread dispatch level
*/
RTEMS_INLINE_ROUTINE uint32_t _Thread_Dispatch_increment_disable_level(void)
{
_Thread_Dispatch_disable_level++;
1100f3: a1 b4 31 13 00 mov 0x1331b4,%eax
1100f8: 40 inc %eax
1100f9: a3 b4 31 13 00 mov %eax,0x1331b4
return _Thread_Dispatch_disable_level;
1100fe: a1 b4 31 13 00 mov 0x1331b4,%eax
* _POSIX_Semaphore_Allocate
*/
RTEMS_INLINE_ROUTINE POSIX_Semaphore_Control *_POSIX_Semaphore_Allocate( void )
{
return (POSIX_Semaphore_Control *)
110103: 83 ec 0c sub $0xc,%esp
110106: 68 78 34 13 00 push $0x133478
11010b: e8 a8 c5 ff ff call 10c6b8 <_Objects_Allocate>
110110: 89 c3 mov %eax,%ebx
_Thread_Disable_dispatch();
the_semaphore = _POSIX_Semaphore_Allocate();
if ( !the_semaphore ) {
110112: 83 c4 10 add $0x10,%esp
110115: 85 c0 test %eax,%eax
110117: 75 18 jne 110131 <_POSIX_Semaphore_Create_support+0x59>
_Thread_Enable_dispatch();
110119: e8 9e d5 ff ff call 10d6bc <_Thread_Enable_dispatch>
rtems_set_errno_and_return_minus_one( ENOSPC );
11011e: e8 75 27 00 00 call 112898 <__errno>
110123: c7 00 1c 00 00 00 movl $0x1c,(%eax)
110129: 83 c8 ff or $0xffffffff,%eax
11012c: e9 a4 00 00 00 jmp 1101d5 <_POSIX_Semaphore_Create_support+0xfd>
/*
* Make a copy of the user's string for name just in case it was
* dynamically constructed.
*/
if ( name_arg != NULL ) {
110131: 85 f6 test %esi,%esi
110133: 74 36 je 11016b <_POSIX_Semaphore_Create_support+0x93>
name = _Workspace_String_duplicate( name_arg, name_len );
110135: 51 push %ecx
110136: 51 push %ecx
110137: ff 75 0c pushl 0xc(%ebp)
11013a: 56 push %esi
11013b: e8 d4 12 00 00 call 111414 <_Workspace_String_duplicate>
110140: 89 c6 mov %eax,%esi
if ( !name ) {
110142: 83 c4 10 add $0x10,%esp
110145: 85 c0 test %eax,%eax
110147: 75 24 jne 11016d <_POSIX_Semaphore_Create_support+0x95><== ALWAYS TAKEN
RTEMS_INLINE_ROUTINE void _POSIX_Semaphore_Free (
POSIX_Semaphore_Control *the_semaphore
)
{
_Objects_Free( &_POSIX_Semaphore_Information, &the_semaphore->Object );
110149: 52 push %edx <== NOT EXECUTED
11014a: 52 push %edx <== NOT EXECUTED
11014b: 53 push %ebx <== NOT EXECUTED
11014c: 68 78 34 13 00 push $0x133478 <== NOT EXECUTED
110151: e8 42 c8 ff ff call 10c998 <_Objects_Free> <== NOT EXECUTED
_POSIX_Semaphore_Free( the_semaphore );
_Thread_Enable_dispatch();
110156: e8 61 d5 ff ff call 10d6bc <_Thread_Enable_dispatch><== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
11015b: e8 38 27 00 00 call 112898 <__errno> <== NOT EXECUTED
110160: c7 00 0c 00 00 00 movl $0xc,(%eax) <== NOT EXECUTED
110166: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
110169: eb be jmp 110129 <_POSIX_Semaphore_Create_support+0x51><== NOT EXECUTED
}
} else {
name = NULL;
11016b: 31 f6 xor %esi,%esi
}
the_semaphore->process_shared = pshared;
11016d: c7 43 10 00 00 00 00 movl $0x0,0x10(%ebx)
if ( name ) {
110174: 85 f6 test %esi,%esi
110176: 74 11 je 110189 <_POSIX_Semaphore_Create_support+0xb1>
the_semaphore->named = true;
110178: c6 43 14 01 movb $0x1,0x14(%ebx)
the_semaphore->open_count = 1;
11017c: c7 43 18 01 00 00 00 movl $0x1,0x18(%ebx)
the_semaphore->linked = true;
110183: c6 43 15 01 movb $0x1,0x15(%ebx)
110187: eb 0f jmp 110198 <_POSIX_Semaphore_Create_support+0xc0>
} else {
the_semaphore->named = false;
110189: c6 43 14 00 movb $0x0,0x14(%ebx)
the_semaphore->open_count = 0;
11018d: c7 43 18 00 00 00 00 movl $0x0,0x18(%ebx)
the_semaphore->linked = false;
110194: c6 43 15 00 movb $0x0,0x15(%ebx)
* blocking tasks on this semaphore should be. It could somehow
* be derived from the current scheduling policy. One
* thing is certain, no matter what we decide, it won't be
* the same as all other POSIX implementations. :)
*/
the_sem_attr->discipline = CORE_SEMAPHORE_DISCIPLINES_FIFO;
110198: c7 43 60 00 00 00 00 movl $0x0,0x60(%ebx)
/*
* This effectively disables limit checking.
*/
the_sem_attr->maximum_count = 0xFFFFFFFF;
11019f: c7 43 5c ff ff ff ff movl $0xffffffff,0x5c(%ebx)
_CORE_semaphore_Initialize( &the_semaphore->Semaphore, the_sem_attr, value );
1101a6: 50 push %eax
1101a7: ff 75 14 pushl 0x14(%ebp)
the_semaphore->named = false;
the_semaphore->open_count = 0;
the_semaphore->linked = false;
}
the_sem_attr = &the_semaphore->Semaphore.Attributes;
1101aa: 8d 43 5c lea 0x5c(%ebx),%eax
/*
* This effectively disables limit checking.
*/
the_sem_attr->maximum_count = 0xFFFFFFFF;
_CORE_semaphore_Initialize( &the_semaphore->Semaphore, the_sem_attr, value );
1101ad: 50 push %eax
1101ae: 8d 43 1c lea 0x1c(%ebx),%eax
1101b1: 50 push %eax
1101b2: e8 e9 bf ff ff call 10c1a0 <_CORE_semaphore_Initialize>
Objects_Information *information,
Objects_Control *the_object,
const char *name
)
{
_Objects_Set_local_object(
1101b7: 0f b7 53 08 movzwl 0x8(%ebx),%edx
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
1101bb: a1 94 34 13 00 mov 0x133494,%eax
1101c0: 89 1c 90 mov %ebx,(%eax,%edx,4)
the_object
);
#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
/* ASSERT: information->is_string */
the_object->name.name_p = name;
1101c3: 89 73 0c mov %esi,0xc(%ebx)
&_POSIX_Semaphore_Information,
&the_semaphore->Object,
name
);
*the_sem = the_semaphore;
1101c6: 8b 45 18 mov 0x18(%ebp),%eax
1101c9: 89 18 mov %ebx,(%eax)
_Thread_Enable_dispatch();
1101cb: e8 ec d4 ff ff call 10d6bc <_Thread_Enable_dispatch>
return 0;
1101d0: 83 c4 10 add $0x10,%esp
1101d3: 31 c0 xor %eax,%eax
}
1101d5: 8d 65 f8 lea -0x8(%ebp),%esp
1101d8: 5b pop %ebx
1101d9: 5e pop %esi
1101da: 5d pop %ebp
1101db: c3 ret
0010e1a8 <_POSIX_Thread_Evaluate_cancellation_and_enable_dispatch>:
#include <rtems/posix/pthread.h>
void _POSIX_Thread_Evaluate_cancellation_and_enable_dispatch(
Thread_Control *the_thread
)
{
10e1a8: 55 push %ebp
10e1a9: 89 e5 mov %esp,%ebp
10e1ab: 83 ec 08 sub $0x8,%esp
10e1ae: 8b 55 08 mov 0x8(%ebp),%edx
POSIX_API_Control *thread_support;
thread_support = the_thread->API_Extensions[ THREAD_API_POSIX ];
10e1b1: 8b 82 e8 00 00 00 mov 0xe8(%edx),%eax
if ( thread_support->cancelability_state == PTHREAD_CANCEL_ENABLE &&
10e1b7: 83 b8 d8 00 00 00 00 cmpl $0x0,0xd8(%eax)
10e1be: 75 31 jne 10e1f1 <_POSIX_Thread_Evaluate_cancellation_and_enable_dispatch+0x49><== NEVER TAKEN
10e1c0: 83 b8 dc 00 00 00 01 cmpl $0x1,0xdc(%eax)
10e1c7: 75 28 jne 10e1f1 <_POSIX_Thread_Evaluate_cancellation_and_enable_dispatch+0x49>
thread_support->cancelability_type == PTHREAD_CANCEL_ASYNCHRONOUS &&
10e1c9: 83 b8 e0 00 00 00 00 cmpl $0x0,0xe0(%eax)
10e1d0: 74 1f je 10e1f1 <_POSIX_Thread_Evaluate_cancellation_and_enable_dispatch+0x49>
*
* This routine decrements the thread dispatch level.
*/
RTEMS_INLINE_ROUTINE uint32_t _Thread_Dispatch_decrement_disable_level(void)
{
_Thread_Dispatch_disable_level--;
10e1d2: a1 dc e3 12 00 mov 0x12e3dc,%eax
10e1d7: 48 dec %eax
10e1d8: a3 dc e3 12 00 mov %eax,0x12e3dc
return _Thread_Dispatch_disable_level;
10e1dd: a1 dc e3 12 00 mov 0x12e3dc,%eax
thread_support->cancelation_requested ) {
_Thread_Unnest_dispatch();
_POSIX_Thread_Exit( the_thread, PTHREAD_CANCELED );
10e1e2: 50 push %eax
10e1e3: 50 push %eax
10e1e4: 6a ff push $0xffffffff
10e1e6: 52 push %edx
10e1e7: e8 e4 05 00 00 call 10e7d0 <_POSIX_Thread_Exit>
10e1ec: 83 c4 10 add $0x10,%esp
10e1ef: eb 06 jmp 10e1f7 <_POSIX_Thread_Evaluate_cancellation_and_enable_dispatch+0x4f>
} else
_Thread_Enable_dispatch();
}
10e1f1: c9 leave
thread_support->cancelability_type == PTHREAD_CANCEL_ASYNCHRONOUS &&
thread_support->cancelation_requested ) {
_Thread_Unnest_dispatch();
_POSIX_Thread_Exit( the_thread, PTHREAD_CANCELED );
} else
_Thread_Enable_dispatch();
10e1f2: e9 61 dd ff ff jmp 10bf58 <_Thread_Enable_dispatch>
}
10e1f7: c9 leave
10e1f8: c3 ret
0010f20c <_POSIX_Thread_Translate_sched_param>:
int policy,
struct sched_param *param,
Thread_CPU_budget_algorithms *budget_algorithm,
Thread_CPU_budget_algorithm_callout *budget_callout
)
{
10f20c: 55 push %ebp
10f20d: 89 e5 mov %esp,%ebp
10f20f: 57 push %edi
10f210: 56 push %esi
10f211: 53 push %ebx
10f212: 83 ec 18 sub $0x18,%esp
10f215: 8b 75 08 mov 0x8(%ebp),%esi
10f218: 8b 7d 0c mov 0xc(%ebp),%edi
10f21b: 8b 5d 10 mov 0x10(%ebp),%ebx
if ( !_POSIX_Priority_Is_valid( param->sched_priority ) )
10f21e: ff 37 pushl (%edi)
10f220: e8 c7 ff ff ff call 10f1ec <_POSIX_Priority_Is_valid>
10f225: 83 c4 10 add $0x10,%esp
10f228: 84 c0 test %al,%al
10f22a: 75 0a jne 10f236 <_POSIX_Thread_Translate_sched_param+0x2a><== ALWAYS TAKEN
return EINVAL;
10f22c: b8 16 00 00 00 mov $0x16,%eax
10f231: e9 91 00 00 00 jmp 10f2c7 <_POSIX_Thread_Translate_sched_param+0xbb>
*budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_NONE;
10f236: c7 03 00 00 00 00 movl $0x0,(%ebx)
*budget_callout = NULL;
10f23c: 8b 45 14 mov 0x14(%ebp),%eax
10f23f: c7 00 00 00 00 00 movl $0x0,(%eax)
if ( policy == SCHED_OTHER ) {
10f245: 85 f6 test %esi,%esi
10f247: 75 08 jne 10f251 <_POSIX_Thread_Translate_sched_param+0x45>
*budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE;
10f249: c7 03 01 00 00 00 movl $0x1,(%ebx)
10f24f: eb 74 jmp 10f2c5 <_POSIX_Thread_Translate_sched_param+0xb9>
return 0;
}
if ( policy == SCHED_FIFO ) {
10f251: 83 fe 01 cmp $0x1,%esi
10f254: 74 6f je 10f2c5 <_POSIX_Thread_Translate_sched_param+0xb9>
*budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_NONE;
return 0;
}
if ( policy == SCHED_RR ) {
10f256: 83 fe 02 cmp $0x2,%esi
10f259: 75 08 jne 10f263 <_POSIX_Thread_Translate_sched_param+0x57>
*budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE;
10f25b: c7 03 02 00 00 00 movl $0x2,(%ebx)
10f261: eb 62 jmp 10f2c5 <_POSIX_Thread_Translate_sched_param+0xb9>
return 0;
}
if ( policy == SCHED_SPORADIC ) {
10f263: 83 fe 04 cmp $0x4,%esi
10f266: 75 c4 jne 10f22c <_POSIX_Thread_Translate_sched_param+0x20>
if ( (param->sched_ss_repl_period.tv_sec == 0) &&
10f268: 83 7f 08 00 cmpl $0x0,0x8(%edi)
10f26c: 75 06 jne 10f274 <_POSIX_Thread_Translate_sched_param+0x68>
10f26e: 83 7f 0c 00 cmpl $0x0,0xc(%edi)
10f272: 74 b8 je 10f22c <_POSIX_Thread_Translate_sched_param+0x20>
(param->sched_ss_repl_period.tv_nsec == 0) )
return EINVAL;
if ( (param->sched_ss_init_budget.tv_sec == 0) &&
10f274: 83 7f 10 00 cmpl $0x0,0x10(%edi)
10f278: 75 06 jne 10f280 <_POSIX_Thread_Translate_sched_param+0x74>
10f27a: 83 7f 14 00 cmpl $0x0,0x14(%edi)
10f27e: 74 ac je 10f22c <_POSIX_Thread_Translate_sched_param+0x20>
(param->sched_ss_init_budget.tv_nsec == 0) )
return EINVAL;
if ( _Timespec_To_ticks( ¶m->sched_ss_repl_period ) <
10f280: 83 ec 0c sub $0xc,%esp
10f283: 8d 47 08 lea 0x8(%edi),%eax
10f286: 50 push %eax
10f287: e8 74 e1 ff ff call 10d400 <_Timespec_To_ticks>
10f28c: 89 c6 mov %eax,%esi
_Timespec_To_ticks( ¶m->sched_ss_init_budget ) )
10f28e: 8d 47 10 lea 0x10(%edi),%eax
10f291: 89 04 24 mov %eax,(%esp)
10f294: e8 67 e1 ff ff call 10d400 <_Timespec_To_ticks>
if ( (param->sched_ss_init_budget.tv_sec == 0) &&
(param->sched_ss_init_budget.tv_nsec == 0) )
return EINVAL;
if ( _Timespec_To_ticks( ¶m->sched_ss_repl_period ) <
10f299: 83 c4 10 add $0x10,%esp
10f29c: 39 c6 cmp %eax,%esi
10f29e: 72 8c jb 10f22c <_POSIX_Thread_Translate_sched_param+0x20>
_Timespec_To_ticks( ¶m->sched_ss_init_budget ) )
return EINVAL;
if ( !_POSIX_Priority_Is_valid( param->sched_ss_low_priority ) )
10f2a0: 83 ec 0c sub $0xc,%esp
10f2a3: ff 77 04 pushl 0x4(%edi)
10f2a6: e8 41 ff ff ff call 10f1ec <_POSIX_Priority_Is_valid>
10f2ab: 83 c4 10 add $0x10,%esp
10f2ae: 84 c0 test %al,%al
10f2b0: 0f 84 76 ff ff ff je 10f22c <_POSIX_Thread_Translate_sched_param+0x20>
return EINVAL;
*budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_CALLOUT;
10f2b6: c7 03 03 00 00 00 movl $0x3,(%ebx)
*budget_callout = _POSIX_Threads_Sporadic_budget_callout;
10f2bc: 8b 45 14 mov 0x14(%ebp),%eax
10f2bf: c7 00 fb a2 10 00 movl $0x10a2fb,(%eax)
return 0;
}
if ( policy == SCHED_FIFO ) {
*budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_NONE;
return 0;
10f2c5: 31 c0 xor %eax,%eax
*budget_callout = _POSIX_Threads_Sporadic_budget_callout;
return 0;
}
return EINVAL;
}
10f2c7: 8d 65 f4 lea -0xc(%ebp),%esp
10f2ca: 5b pop %ebx
10f2cb: 5e pop %esi
10f2cc: 5f pop %edi
10f2cd: 5d pop %ebp
10f2ce: c3 ret
0010e3c1 <_POSIX_Threads_Delete_extension>:
*/
static void _POSIX_Threads_Delete_extension(
Thread_Control *executing __attribute__((unused)),
Thread_Control *deleted
)
{
10e3c1: 55 push %ebp
10e3c2: 89 e5 mov %esp,%ebp
10e3c4: 57 push %edi
10e3c5: 56 push %esi
10e3c6: 53 push %ebx
10e3c7: 83 ec 28 sub $0x28,%esp
10e3ca: 8b 5d 0c mov 0xc(%ebp),%ebx
Thread_Control *the_thread;
POSIX_API_Control *api;
void **value_ptr;
api = deleted->API_Extensions[ THREAD_API_POSIX ];
10e3cd: 8b b3 e8 00 00 00 mov 0xe8(%ebx),%esi
/*
* Run the POSIX cancellation handlers
*/
_POSIX_Threads_cancel_run( deleted );
10e3d3: 53 push %ebx
10e3d4: e8 cb 22 00 00 call 1106a4 <_POSIX_Threads_cancel_run>
/*
* Run all the key destructors
*/
_POSIX_Keys_Run_destructors( deleted );
10e3d9: 89 1c 24 mov %ebx,(%esp)
10e3dc: e8 23 23 00 00 call 110704 <_POSIX_Keys_Run_destructors>
/*
* Wakeup all the tasks which joined with this one
*/
value_ptr = (void **) deleted->Wait.return_argument;
10e3e1: 8b 53 28 mov 0x28(%ebx),%edx
while ( (the_thread = _Thread_queue_Dequeue( &api->Join_List )) )
10e3e4: 83 c4 10 add $0x10,%esp
10e3e7: 8d 7e 44 lea 0x44(%esi),%edi
10e3ea: eb 05 jmp 10e3f1 <_POSIX_Threads_Delete_extension+0x30>
*(void **)the_thread->Wait.return_argument = value_ptr;
10e3ec: 8b 40 28 mov 0x28(%eax),%eax <== NOT EXECUTED
10e3ef: 89 10 mov %edx,(%eax) <== NOT EXECUTED
/*
* Wakeup all the tasks which joined with this one
*/
value_ptr = (void **) deleted->Wait.return_argument;
while ( (the_thread = _Thread_queue_Dequeue( &api->Join_List )) )
10e3f1: 83 ec 0c sub $0xc,%esp
10e3f4: 57 push %edi
10e3f5: 89 55 e4 mov %edx,-0x1c(%ebp)
10e3f8: e8 77 dd ff ff call 10c174 <_Thread_queue_Dequeue>
10e3fd: 83 c4 10 add $0x10,%esp
10e400: 85 c0 test %eax,%eax
10e402: 8b 55 e4 mov -0x1c(%ebp),%edx
10e405: 75 e5 jne 10e3ec <_POSIX_Threads_Delete_extension+0x2b><== NEVER TAKEN
*(void **)the_thread->Wait.return_argument = value_ptr;
if ( api->schedpolicy == SCHED_SPORADIC )
10e407: 83 be 84 00 00 00 04 cmpl $0x4,0x84(%esi)
10e40e: 75 12 jne 10e422 <_POSIX_Threads_Delete_extension+0x61>
(void) _Watchdog_Remove( &api->Sporadic_timer );
10e410: 83 ec 0c sub $0xc,%esp
10e413: 8d 86 a8 00 00 00 lea 0xa8(%esi),%eax
10e419: 50 push %eax
10e41a: e8 f9 e5 ff ff call 10ca18 <_Watchdog_Remove>
10e41f: 83 c4 10 add $0x10,%esp
deleted->API_Extensions[ THREAD_API_POSIX ] = NULL;
10e422: c7 83 e8 00 00 00 00 movl $0x0,0xe8(%ebx)
10e429: 00 00 00
_Workspace_Free( api );
10e42c: 89 75 08 mov %esi,0x8(%ebp)
}
10e42f: 8d 65 f4 lea -0xc(%ebp),%esp
10e432: 5b pop %ebx
10e433: 5e pop %esi
10e434: 5f pop %edi
10e435: 5d pop %ebp
if ( api->schedpolicy == SCHED_SPORADIC )
(void) _Watchdog_Remove( &api->Sporadic_timer );
deleted->API_Extensions[ THREAD_API_POSIX ] = NULL;
_Workspace_Free( api );
10e436: e9 22 e7 ff ff jmp 10cb5d <_Workspace_Free>
0010a028 <_POSIX_Threads_Initialize_user_threads_body>:
*
* Output parameters: NONE
*/
void _POSIX_Threads_Initialize_user_threads_body(void)
{
10a028: 55 push %ebp
10a029: 89 e5 mov %esp,%ebp
10a02b: 57 push %edi
10a02c: 56 push %esi
10a02d: 53 push %ebx
10a02e: 83 ec 6c sub $0x6c,%esp
uint32_t maximum;
posix_initialization_threads_table *user_threads;
pthread_t thread_id;
pthread_attr_t attr;
user_threads = Configuration_POSIX_API.User_initialization_threads_table;
10a031: 8b 3d c4 b1 12 00 mov 0x12b1c4,%edi
maximum = Configuration_POSIX_API.number_of_initialization_threads;
10a037: 8b 15 c0 b1 12 00 mov 0x12b1c0,%edx
if ( !user_threads || maximum == 0 )
10a03d: 85 d2 test %edx,%edx
10a03f: 74 54 je 10a095 <_POSIX_Threads_Initialize_user_threads_body+0x6d><== NEVER TAKEN
10a041: 85 ff test %edi,%edi
10a043: 74 50 je 10a095 <_POSIX_Threads_Initialize_user_threads_body+0x6d><== NEVER TAKEN
10a045: 31 db xor %ebx,%ebx
for ( index=0 ; index < maximum ; index++ ) {
/*
* There is no way for these calls to fail in this situation.
*/
(void) pthread_attr_init( &attr );
10a047: 8d 75 a8 lea -0x58(%ebp),%esi
10a04a: 83 ec 0c sub $0xc,%esp
10a04d: 56 push %esi
10a04e: 89 55 94 mov %edx,-0x6c(%ebp)
10a051: e8 7a 52 00 00 call 10f2d0 <pthread_attr_init>
(void) pthread_attr_setinheritsched( &attr, PTHREAD_EXPLICIT_SCHED );
10a056: 59 pop %ecx
10a057: 58 pop %eax
10a058: 6a 02 push $0x2
10a05a: 56 push %esi
10a05b: e8 98 52 00 00 call 10f2f8 <pthread_attr_setinheritsched>
(void) pthread_attr_setstacksize(&attr, user_threads[ index ].stack_size);
10a060: 58 pop %eax
10a061: 5a pop %edx
10a062: ff 74 df 04 pushl 0x4(%edi,%ebx,8)
10a066: 56 push %esi
10a067: e8 b8 52 00 00 call 10f324 <pthread_attr_setstacksize>
status = pthread_create(
10a06c: 6a 00 push $0x0
10a06e: ff 34 df pushl (%edi,%ebx,8)
10a071: 56 push %esi
10a072: 8d 45 a4 lea -0x5c(%ebp),%eax
10a075: 50 push %eax
10a076: e8 75 fc ff ff call 109cf0 <pthread_create>
&thread_id,
&attr,
user_threads[ index ].thread_entry,
NULL
);
if ( status )
10a07b: 83 c4 20 add $0x20,%esp
10a07e: 85 c0 test %eax,%eax
10a080: 8b 55 94 mov -0x6c(%ebp),%edx
10a083: 74 0b je 10a090 <_POSIX_Threads_Initialize_user_threads_body+0x68>
_Internal_error_Occurred( INTERNAL_ERROR_POSIX_API, true, status );
10a085: 52 push %edx
10a086: 50 push %eax
10a087: 6a 01 push $0x1
10a089: 6a 02 push $0x2
10a08b: e8 98 1a 00 00 call 10bb28 <_Internal_error_Occurred>
*
* Setting the attributes explicitly is critical, since we don't want
* to inherit the idle tasks attributes.
*/
for ( index=0 ; index < maximum ; index++ ) {
10a090: 43 inc %ebx
10a091: 39 d3 cmp %edx,%ebx
10a093: 75 b5 jne 10a04a <_POSIX_Threads_Initialize_user_threads_body+0x22><== NEVER TAKEN
NULL
);
if ( status )
_Internal_error_Occurred( INTERNAL_ERROR_POSIX_API, true, status );
}
}
10a095: 8d 65 f4 lea -0xc(%ebp),%esp
10a098: 5b pop %ebx
10a099: 5e pop %esi
10a09a: 5f pop %edi
10a09b: 5d pop %ebp
10a09c: c3 ret
0010e56d <_POSIX_Threads_Sporadic_budget_TSR>:
*/
void _POSIX_Threads_Sporadic_budget_TSR(
Objects_Id id __attribute__((unused)),
void *argument
)
{
10e56d: 55 push %ebp
10e56e: 89 e5 mov %esp,%ebp
10e570: 56 push %esi
10e571: 53 push %ebx
10e572: 8b 5d 0c mov 0xc(%ebp),%ebx
Thread_Control *the_thread;
POSIX_API_Control *api;
the_thread = argument;
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
10e575: 8b b3 e8 00 00 00 mov 0xe8(%ebx),%esi
/* ticks is guaranteed to be at least one */
ticks = _Timespec_To_ticks( &api->schedparam.sched_ss_init_budget );
10e57b: 83 ec 0c sub $0xc,%esp
10e57e: 8d 86 98 00 00 00 lea 0x98(%esi),%eax
10e584: 50 push %eax
10e585: e8 a2 12 00 00 call 10f82c <_Timespec_To_ticks>
the_thread->cpu_time_budget = ticks;
10e58a: 89 43 74 mov %eax,0x74(%ebx)
RTEMS_INLINE_ROUTINE Priority_Control _POSIX_Priority_To_core(
int priority
)
{
return (Priority_Control) (POSIX_SCHEDULER_MAXIMUM_PRIORITY - priority + 1);
10e58d: 0f b6 05 88 a1 12 00 movzbl 0x12a188,%eax
10e594: 2b 86 88 00 00 00 sub 0x88(%esi),%eax
new_priority = _POSIX_Priority_To_core( api->schedparam.sched_priority );
the_thread->real_priority = new_priority;
10e59a: 89 43 18 mov %eax,0x18(%ebx)
*/
#if 0
printk( "TSR %d %d %d\n", the_thread->resource_count,
the_thread->current_priority, new_priority );
#endif
if ( the_thread->resource_count == 0 ) {
10e59d: 83 c4 10 add $0x10,%esp
10e5a0: 83 7b 1c 00 cmpl $0x0,0x1c(%ebx)
10e5a4: 75 12 jne 10e5b8 <_POSIX_Threads_Sporadic_budget_TSR+0x4b><== NEVER TAKEN
/*
* If this would make them less important, then do not change it.
*/
if ( the_thread->current_priority > new_priority ) {
10e5a6: 39 43 14 cmp %eax,0x14(%ebx)
10e5a9: 76 0d jbe 10e5b8 <_POSIX_Threads_Sporadic_budget_TSR+0x4b>
_Thread_Change_priority( the_thread, new_priority, true );
10e5ab: 52 push %edx
10e5ac: 6a 01 push $0x1
10e5ae: 50 push %eax
10e5af: 53 push %ebx
10e5b0: e8 67 d4 ff ff call 10ba1c <_Thread_Change_priority>
10e5b5: 83 c4 10 add $0x10,%esp
#endif
}
}
/* ticks is guaranteed to be at least one */
ticks = _Timespec_To_ticks( &api->schedparam.sched_ss_repl_period );
10e5b8: 83 ec 0c sub $0xc,%esp
10e5bb: 8d 86 90 00 00 00 lea 0x90(%esi),%eax
10e5c1: 50 push %eax
10e5c2: e8 65 12 00 00 call 10f82c <_Timespec_To_ticks>
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
10e5c7: 89 86 b4 00 00 00 mov %eax,0xb4(%esi)
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
10e5cd: 83 c4 10 add $0x10,%esp
_Watchdog_Insert_ticks( &api->Sporadic_timer, ticks );
10e5d0: 81 c6 a8 00 00 00 add $0xa8,%esi
10e5d6: 89 75 0c mov %esi,0xc(%ebp)
10e5d9: c7 45 08 88 e4 12 00 movl $0x12e488,0x8(%ebp)
}
10e5e0: 8d 65 f8 lea -0x8(%ebp),%esp
10e5e3: 5b pop %ebx
10e5e4: 5e pop %esi
10e5e5: 5d pop %ebp
10e5e6: e9 19 e3 ff ff jmp 10c904 <_Watchdog_Insert>
0010e5eb <_POSIX_Threads_Sporadic_budget_callout>:
* _POSIX_Threads_Sporadic_budget_callout
*/
void _POSIX_Threads_Sporadic_budget_callout(
Thread_Control *the_thread
)
{
10e5eb: 55 push %ebp
10e5ec: 89 e5 mov %esp,%ebp
10e5ee: 83 ec 08 sub $0x8,%esp
10e5f1: 8b 45 08 mov 0x8(%ebp),%eax
POSIX_API_Control *api;
uint32_t new_priority;
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
10e5f4: 8b 88 e8 00 00 00 mov 0xe8(%eax),%ecx
/*
* This will prevent the thread from consuming its entire "budget"
* while at low priority.
*/
the_thread->cpu_time_budget = 0xFFFFFFFF; /* XXX should be based on MAX_U32 */
10e5fa: c7 40 74 ff ff ff ff movl $0xffffffff,0x74(%eax)
10e601: 0f b6 15 88 a1 12 00 movzbl 0x12a188,%edx
10e608: 2b 91 8c 00 00 00 sub 0x8c(%ecx),%edx
new_priority = _POSIX_Priority_To_core(api->schedparam.sched_ss_low_priority);
the_thread->real_priority = new_priority;
10e60e: 89 50 18 mov %edx,0x18(%eax)
*/
#if 0
printk( "callout %d %d %d\n", the_thread->resource_count,
the_thread->current_priority, new_priority );
#endif
if ( the_thread->resource_count == 0 ) {
10e611: 83 78 1c 00 cmpl $0x0,0x1c(%eax)
10e615: 75 12 jne 10e629 <_POSIX_Threads_Sporadic_budget_callout+0x3e><== NEVER TAKEN
/*
* Make sure we are actually lowering it. If they have lowered it
* to logically lower than sched_ss_low_priority, then we do not want to
* change it.
*/
if ( the_thread->current_priority < new_priority ) {
10e617: 39 50 14 cmp %edx,0x14(%eax)
10e61a: 73 0d jae 10e629 <_POSIX_Threads_Sporadic_budget_callout+0x3e><== NEVER TAKEN
_Thread_Change_priority( the_thread, new_priority, true );
10e61c: 51 push %ecx
10e61d: 6a 01 push $0x1
10e61f: 52 push %edx
10e620: 50 push %eax
10e621: e8 f6 d3 ff ff call 10ba1c <_Thread_Change_priority>
10e626: 83 c4 10 add $0x10,%esp
#if 0
printk( "lower priority\n" );
#endif
}
}
}
10e629: c9 leave
10e62a: c3 ret
00109bb8 <_POSIX_Timer_TSR>:
* This is the operation that is run when a timer expires
*/
void _POSIX_Timer_TSR(
Objects_Id timer __attribute__((unused)),
void *data)
{
109bb8: 55 push %ebp
109bb9: 89 e5 mov %esp,%ebp
109bbb: 57 push %edi
109bbc: 56 push %esi
109bbd: 53 push %ebx
109bbe: 83 ec 1c sub $0x1c,%esp
109bc1: 8b 5d 0c mov 0xc(%ebp),%ebx
bool activated;
ptimer = (POSIX_Timer_Control *)data;
/* Increment the number of expirations. */
ptimer->overrun = ptimer->overrun + 1;
109bc4: ff 43 68 incl 0x68(%ebx)
/* The timer must be reprogrammed */
if ( ( ptimer->timer_data.it_interval.tv_sec != 0 ) ||
109bc7: 83 7b 54 00 cmpl $0x0,0x54(%ebx)
109bcb: 75 06 jne 109bd3 <_POSIX_Timer_TSR+0x1b>
109bcd: 83 7b 58 00 cmpl $0x0,0x58(%ebx)
109bd1: 74 5f je 109c32 <_POSIX_Timer_TSR+0x7a> <== NEVER TAKEN
( ptimer->timer_data.it_interval.tv_nsec != 0 ) ) {
activated = _POSIX_Timer_Insert_helper(
109bd3: 83 ec 0c sub $0xc,%esp
109bd6: 53 push %ebx
109bd7: 68 b8 9b 10 00 push $0x109bb8
109bdc: ff 73 08 pushl 0x8(%ebx)
109bdf: ff 73 64 pushl 0x64(%ebx)
109be2: 8d 43 10 lea 0x10(%ebx),%eax
109be5: 50 push %eax
109be6: e8 65 51 00 00 call 10ed50 <_POSIX_Timer_Insert_helper>
ptimer->ticks,
ptimer->Object.id,
_POSIX_Timer_TSR,
ptimer
);
if ( !activated )
109beb: 83 c4 20 add $0x20,%esp
109bee: 84 c0 test %al,%al
109bf0: 74 5b je 109c4d <_POSIX_Timer_TSR+0x95> <== NEVER TAKEN
struct timespec *tod_as_timespec
)
{
Timestamp_Control tod_as_timestamp;
_TOD_Get_as_timestamp( &tod_as_timestamp );
109bf2: 83 ec 0c sub $0xc,%esp
109bf5: 8d 45 e0 lea -0x20(%ebp),%eax
109bf8: 50 push %eax
109bf9: e8 5e 13 00 00 call 10af5c <_TOD_Get_as_timestamp>
_Timestamp_To_timespec( &tod_as_timestamp, tod_as_timespec );
109bfe: 8b 75 e0 mov -0x20(%ebp),%esi
109c01: 8b 7d e4 mov -0x1c(%ebp),%edi
static inline void _Timestamp64_implementation_To_timespec(
const Timestamp64_Control *_timestamp,
struct timespec *_timespec
)
{
_timespec->tv_sec = (time_t) (*_timestamp / 1000000000L);
109c04: 6a 00 push $0x0
109c06: 68 00 ca 9a 3b push $0x3b9aca00
109c0b: 57 push %edi
109c0c: 56 push %esi
109c0d: e8 d2 3f 01 00 call 11dbe4 <__divdi3>
109c12: 83 c4 10 add $0x10,%esp
109c15: 89 43 6c mov %eax,0x6c(%ebx)
_timespec->tv_nsec = (long) (*_timestamp % 1000000000L);
109c18: 6a 00 push $0x0
109c1a: 68 00 ca 9a 3b push $0x3b9aca00
109c1f: 57 push %edi
109c20: 56 push %esi
109c21: e8 12 41 01 00 call 11dd38 <__moddi3>
109c26: 89 43 70 mov %eax,0x70(%ebx)
/* Store the time when the timer was started again */
_TOD_Get( &ptimer->time );
/* The state really did not change but just to be safe */
ptimer->state = POSIX_TIMER_STATE_CREATE_RUN;
109c29: c6 43 3c 03 movb $0x3,0x3c(%ebx)
109c2d: 83 c4 20 add $0x20,%esp
109c30: eb 04 jmp 109c36 <_POSIX_Timer_TSR+0x7e>
} else {
/* Indicates that the timer is stopped */
ptimer->state = POSIX_TIMER_STATE_CREATE_STOP;
109c32: c6 43 3c 04 movb $0x4,0x3c(%ebx) <== NOT EXECUTED
/*
* The sending of the signal to the process running the handling function
* specified for that signal is simulated
*/
if ( pthread_kill ( ptimer->thread_id, ptimer->inf.sigev_signo ) ) {
109c36: 50 push %eax
109c37: 50 push %eax
109c38: ff 73 44 pushl 0x44(%ebx)
109c3b: ff 73 38 pushl 0x38(%ebx)
109c3e: e8 0d 4d 00 00 call 10e950 <pthread_kill>
}
/* After the signal handler returns, the count of expirations of the
* timer must be set to 0.
*/
ptimer->overrun = 0;
109c43: c7 43 68 00 00 00 00 movl $0x0,0x68(%ebx)
109c4a: 83 c4 10 add $0x10,%esp
}
109c4d: 8d 65 f4 lea -0xc(%ebp),%esp
109c50: 5b pop %ebx
109c51: 5e pop %esi
109c52: 5f pop %edi
109c53: 5d pop %ebp
109c54: c3 ret
00110780 <_POSIX_signals_Check_signal>:
bool _POSIX_signals_Check_signal(
POSIX_API_Control *api,
int signo,
bool is_global
)
{
110780: 55 push %ebp
110781: 89 e5 mov %esp,%ebp
110783: 57 push %edi
110784: 56 push %esi
110785: 53 push %ebx
110786: 83 ec 68 sub $0x68,%esp
siginfo_t siginfo_struct;
sigset_t saved_signals_blocked;
Thread_Wait_information stored_thread_wait_information;
if ( ! _POSIX_signals_Clear_signals( api, signo, &siginfo_struct,
110789: 6a 01 push $0x1
11078b: 0f b6 45 10 movzbl 0x10(%ebp),%eax
11078f: 50 push %eax
110790: 8d 45 b4 lea -0x4c(%ebp),%eax
110793: 50 push %eax
110794: ff 75 0c pushl 0xc(%ebp)
110797: ff 75 08 pushl 0x8(%ebp)
11079a: e8 91 00 00 00 call 110830 <_POSIX_signals_Clear_signals>
11079f: 83 c4 20 add $0x20,%esp
is_global, true ) )
return false;
1107a2: 31 c9 xor %ecx,%ecx
{
siginfo_t siginfo_struct;
sigset_t saved_signals_blocked;
Thread_Wait_information stored_thread_wait_information;
if ( ! _POSIX_signals_Clear_signals( api, signo, &siginfo_struct,
1107a4: 84 c0 test %al,%al
1107a6: 74 7d je 110825 <_POSIX_signals_Check_signal+0xa5>
#endif
/*
* Just to prevent sending a signal which is currently being ignored.
*/
if ( _POSIX_signals_Vectors[ signo ].sa_handler == SIG_IGN )
1107a8: 6b 55 0c 0c imul $0xc,0xc(%ebp),%edx
1107ac: 8b 9a 30 e9 12 00 mov 0x12e930(%edx),%ebx
1107b2: 83 fb 01 cmp $0x1,%ebx
1107b5: 74 6e je 110825 <_POSIX_signals_Check_signal+0xa5><== NEVER TAKEN
return false;
/*
* Block the signals requested in sa_mask
*/
saved_signals_blocked = api->signals_blocked;
1107b7: 8b 4d 08 mov 0x8(%ebp),%ecx
1107ba: 8b 89 d0 00 00 00 mov 0xd0(%ecx),%ecx
1107c0: 89 4d a4 mov %ecx,-0x5c(%ebp)
api->signals_blocked |= _POSIX_signals_Vectors[ signo ].sa_mask;
1107c3: 8b 82 2c e9 12 00 mov 0x12e92c(%edx),%eax
1107c9: 09 c8 or %ecx,%eax
1107cb: 8b 4d 08 mov 0x8(%ebp),%ecx
1107ce: 89 81 d0 00 00 00 mov %eax,0xd0(%ecx)
/*
* We have to save the blocking information of the current wait queue
* because the signal handler may subsequently go on and put the thread
* on a wait queue, for its own purposes.
*/
memcpy( &stored_thread_wait_information, &_Thread_Executing->Wait,
1107d4: 8d 7d c0 lea -0x40(%ebp),%edi
1107d7: 8b 35 ec e8 12 00 mov 0x12e8ec,%esi
1107dd: 83 c6 20 add $0x20,%esi
1107e0: b9 0a 00 00 00 mov $0xa,%ecx
1107e5: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
sizeof( Thread_Wait_information ));
/*
* Here, the signal handler function executes
*/
switch ( _POSIX_signals_Vectors[ signo ].sa_flags ) {
1107e7: 83 ba 28 e9 12 00 02 cmpl $0x2,0x12e928(%edx)
1107ee: 75 09 jne 1107f9 <_POSIX_signals_Check_signal+0x79>
case SA_SIGINFO:
(*_POSIX_signals_Vectors[ signo ].sa_sigaction)(
1107f0: 50 push %eax
1107f1: 6a 00 push $0x0
1107f3: 8d 45 b4 lea -0x4c(%ebp),%eax
1107f6: 50 push %eax
1107f7: eb 03 jmp 1107fc <_POSIX_signals_Check_signal+0x7c>
&siginfo_struct,
NULL /* context is undefined per 1003.1b-1993, p. 66 */
);
break;
default:
(*_POSIX_signals_Vectors[ signo ].sa_handler)( signo );
1107f9: 83 ec 0c sub $0xc,%esp
1107fc: ff 75 0c pushl 0xc(%ebp)
1107ff: ff d3 call *%ebx
break;
110801: 83 c4 10 add $0x10,%esp
}
/*
* Restore the blocking information
*/
memcpy( &_Thread_Executing->Wait, &stored_thread_wait_information,
110804: 8b 3d ec e8 12 00 mov 0x12e8ec,%edi
11080a: 83 c7 20 add $0x20,%edi
11080d: 8d 75 c0 lea -0x40(%ebp),%esi
110810: b9 0a 00 00 00 mov $0xa,%ecx
110815: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
sizeof( Thread_Wait_information ));
/*
* Restore the previous set of blocked signals
*/
api->signals_blocked = saved_signals_blocked;
110817: 8b 45 a4 mov -0x5c(%ebp),%eax
11081a: 8b 55 08 mov 0x8(%ebp),%edx
11081d: 89 82 d0 00 00 00 mov %eax,0xd0(%edx)
return true;
110823: b1 01 mov $0x1,%cl
}
110825: 88 c8 mov %cl,%al
110827: 8d 65 f4 lea -0xc(%ebp),%esp
11082a: 5b pop %ebx
11082b: 5e pop %esi
11082c: 5f pop %edi
11082d: 5d pop %ebp
11082e: c3 ret
00110e54 <_POSIX_signals_Clear_process_signals>:
*/
void _POSIX_signals_Clear_process_signals(
int signo
)
{
110e54: 55 push %ebp
110e55: 89 e5 mov %esp,%ebp
110e57: 53 push %ebx
110e58: 8b 55 08 mov 0x8(%ebp),%edx
110e5b: 8d 4a ff lea -0x1(%edx),%ecx
110e5e: b8 01 00 00 00 mov $0x1,%eax
110e63: d3 e0 shl %cl,%eax
clear_signal = true;
mask = signo_to_mask( signo );
ISR_Level level;
_ISR_Disable( level );
110e65: 9c pushf
110e66: fa cli
110e67: 59 pop %ecx
if ( _POSIX_signals_Vectors[ signo ].sa_flags == SA_SIGINFO ) {
110e68: 6b d2 0c imul $0xc,%edx,%edx
110e6b: 83 ba 28 e9 12 00 02 cmpl $0x2,0x12e928(%edx)
110e72: 75 12 jne 110e86 <_POSIX_signals_Clear_process_signals+0x32>
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
110e74: 8d 9a 24 eb 12 00 lea 0x12eb24(%edx),%ebx
if ( !_Chain_Is_empty( &_POSIX_signals_Siginfo[ signo ] ) )
110e7a: 39 9a 20 eb 12 00 cmp %ebx,0x12eb20(%edx)
110e80: 74 04 je 110e86 <_POSIX_signals_Clear_process_signals+0x32><== ALWAYS TAKEN
clear_signal = false;
}
if ( clear_signal ) {
_POSIX_signals_Pending &= ~mask;
}
_ISR_Enable( level );
110e82: 51 push %ecx
110e83: 9d popf
110e84: eb 0a jmp 110e90 <_POSIX_signals_Clear_process_signals+0x3c>
if ( _POSIX_signals_Vectors[ signo ].sa_flags == SA_SIGINFO ) {
if ( !_Chain_Is_empty( &_POSIX_signals_Siginfo[ signo ] ) )
clear_signal = false;
}
if ( clear_signal ) {
_POSIX_signals_Pending &= ~mask;
110e86: f7 d0 not %eax
110e88: 21 05 1c eb 12 00 and %eax,0x12eb1c
110e8e: eb f2 jmp 110e82 <_POSIX_signals_Clear_process_signals+0x2e>
}
_ISR_Enable( level );
}
110e90: 5b pop %ebx
110e91: 5d pop %ebp
110e92: c3 ret
0010a6c4 <_POSIX_signals_Get_lowest>:
#include <rtems/score/isr.h>
static int _POSIX_signals_Get_lowest(
sigset_t set
)
{
10a6c4: 55 push %ebp
10a6c5: 89 e5 mov %esp,%ebp
10a6c7: 56 push %esi
10a6c8: 53 push %ebx
int signo;
for ( signo = SIGRTMIN ; signo <= SIGRTMAX ; signo++ ) {
10a6c9: ba 1b 00 00 00 mov $0x1b,%edx
10a6ce: bb 01 00 00 00 mov $0x1,%ebx
#include <rtems/posix/psignal.h>
#include <rtems/seterr.h>
#include <rtems/posix/time.h>
#include <rtems/score/isr.h>
static int _POSIX_signals_Get_lowest(
10a6d3: 8d 4a ff lea -0x1(%edx),%ecx
10a6d6: 89 de mov %ebx,%esi
10a6d8: d3 e6 shl %cl,%esi
)
{
int signo;
for ( signo = SIGRTMIN ; signo <= SIGRTMAX ; signo++ ) {
if ( set & signo_to_mask( signo ) ) {
10a6da: 85 c6 test %eax,%esi
10a6dc: 75 1e jne 10a6fc <_POSIX_signals_Get_lowest+0x38><== NEVER TAKEN
sigset_t set
)
{
int signo;
for ( signo = SIGRTMIN ; signo <= SIGRTMAX ; signo++ ) {
10a6de: 42 inc %edx
10a6df: 83 fa 20 cmp $0x20,%edx
10a6e2: 75 ef jne 10a6d3 <_POSIX_signals_Get_lowest+0xf>
10a6e4: b2 01 mov $0x1,%dl
10a6e6: bb 01 00 00 00 mov $0x1,%ebx
#include <rtems/posix/psignal.h>
#include <rtems/seterr.h>
#include <rtems/posix/time.h>
#include <rtems/score/isr.h>
static int _POSIX_signals_Get_lowest(
10a6eb: 8d 4a ff lea -0x1(%edx),%ecx
10a6ee: 89 de mov %ebx,%esi
10a6f0: d3 e6 shl %cl,%esi
#if (SIGHUP != 1)
#error "Assumption that SIGHUP==1 violated!!"
#endif
for ( signo = SIGHUP ; signo <= __SIGLASTNOTRT ; signo++ ) {
if ( set & signo_to_mask( signo ) ) {
10a6f2: 85 c6 test %eax,%esi
10a6f4: 75 06 jne 10a6fc <_POSIX_signals_Get_lowest+0x38>
*/
#if (SIGHUP != 1)
#error "Assumption that SIGHUP==1 violated!!"
#endif
for ( signo = SIGHUP ; signo <= __SIGLASTNOTRT ; signo++ ) {
10a6f6: 42 inc %edx
10a6f7: 83 fa 1b cmp $0x1b,%edx
10a6fa: 75 ef jne 10a6eb <_POSIX_signals_Get_lowest+0x27><== ALWAYS TAKEN
* a return 0. This routine will NOT be called unless a signal
* is pending in the set passed in.
*/
found_it:
return signo;
}
10a6fc: 89 d0 mov %edx,%eax
10a6fe: 5b pop %ebx
10a6ff: 5e pop %esi
10a700: 5d pop %ebp
10a701: c3 ret
0011dbf0 <_POSIX_signals_Unblock_thread>:
bool _POSIX_signals_Unblock_thread(
Thread_Control *the_thread,
int signo,
siginfo_t *info
)
{
11dbf0: 55 push %ebp
11dbf1: 89 e5 mov %esp,%ebp
11dbf3: 57 push %edi
11dbf4: 56 push %esi
11dbf5: 53 push %ebx
11dbf6: 83 ec 0c sub $0xc,%esp
11dbf9: 8b 5d 08 mov 0x8(%ebp),%ebx
11dbfc: 8b 75 0c mov 0xc(%ebp),%esi
POSIX_API_Control *api;
sigset_t mask;
siginfo_t *the_info = NULL;
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
11dbff: 8b bb e8 00 00 00 mov 0xe8(%ebx),%edi
11dc05: 8d 4e ff lea -0x1(%esi),%ecx
11dc08: b8 01 00 00 00 mov $0x1,%eax
11dc0d: d3 e0 shl %cl,%eax
/*
* Is the thread is specifically waiting for a signal?
*/
if ( _States_Is_interruptible_signal( the_thread->current_state ) ) {
11dc0f: 8b 53 10 mov 0x10(%ebx),%edx
11dc12: 89 d1 mov %edx,%ecx
11dc14: 81 e1 00 80 00 10 and $0x10008000,%ecx
11dc1a: 81 f9 00 80 00 10 cmp $0x10008000,%ecx
11dc20: 75 54 jne 11dc76 <_POSIX_signals_Unblock_thread+0x86>
if ( (the_thread->Wait.option & mask) || (~api->signals_blocked & mask) ) {
11dc22: 85 43 30 test %eax,0x30(%ebx)
11dc25: 75 11 jne 11dc38 <_POSIX_signals_Unblock_thread+0x48>
11dc27: 8b 97 d0 00 00 00 mov 0xd0(%edi),%edx
11dc2d: f7 d2 not %edx
11dc2f: 85 d0 test %edx,%eax
11dc31: 75 05 jne 11dc38 <_POSIX_signals_Unblock_thread+0x48>
11dc33: e9 ab 00 00 00 jmp 11dce3 <_POSIX_signals_Unblock_thread+0xf3>
the_thread->Wait.return_code = EINTR;
11dc38: c7 43 34 04 00 00 00 movl $0x4,0x34(%ebx)
the_info = (siginfo_t *) the_thread->Wait.return_argument;
11dc3f: 8b 43 28 mov 0x28(%ebx),%eax
if ( !info ) {
11dc42: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
11dc46: 75 12 jne 11dc5a <_POSIX_signals_Unblock_thread+0x6a>
the_info->si_signo = signo;
11dc48: 89 30 mov %esi,(%eax)
the_info->si_code = SI_USER;
11dc4a: c7 40 04 01 00 00 00 movl $0x1,0x4(%eax)
the_info->si_value.sival_int = 0;
11dc51: c7 40 08 00 00 00 00 movl $0x0,0x8(%eax)
11dc58: eb 0c jmp 11dc66 <_POSIX_signals_Unblock_thread+0x76>
} else {
*the_info = *info;
11dc5a: b9 03 00 00 00 mov $0x3,%ecx
11dc5f: 89 c7 mov %eax,%edi
11dc61: 8b 75 10 mov 0x10(%ebp),%esi
11dc64: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
}
_Thread_queue_Extract_with_proxy( the_thread );
11dc66: 83 ec 0c sub $0xc,%esp
11dc69: 53 push %ebx
11dc6a: e8 c1 e7 fe ff call 10c430 <_Thread_queue_Extract_with_proxy>
return true;
11dc6f: 83 c4 10 add $0x10,%esp
11dc72: b0 01 mov $0x1,%al
11dc74: eb 6f jmp 11dce5 <_POSIX_signals_Unblock_thread+0xf5>
}
/*
* Thread is not waiting due to a sigwait.
*/
if ( ~api->signals_blocked & mask ) {
11dc76: 8b 8f d0 00 00 00 mov 0xd0(%edi),%ecx
11dc7c: f7 d1 not %ecx
11dc7e: 85 c8 test %ecx,%eax
11dc80: 74 61 je 11dce3 <_POSIX_signals_Unblock_thread+0xf3>
* it is not blocked, THEN
* we need to dispatch at the end of this ISR.
* + Any other combination, do nothing.
*/
if ( _States_Is_interruptible_by_signal( the_thread->current_state ) ) {
11dc82: f7 c2 00 00 00 10 test $0x10000000,%edx
11dc88: 74 3d je 11dcc7 <_POSIX_signals_Unblock_thread+0xd7>
the_thread->Wait.return_code = EINTR;
11dc8a: c7 43 34 04 00 00 00 movl $0x4,0x34(%ebx)
/*
* In pthread_cond_wait, a thread will be blocking on a thread
* queue, but is also interruptible by a POSIX signal.
*/
if ( _States_Is_waiting_on_thread_queue(the_thread->current_state) )
11dc91: f7 c2 e0 be 03 00 test $0x3bee0,%edx
11dc97: 74 0b je 11dca4 <_POSIX_signals_Unblock_thread+0xb4>
_Thread_queue_Extract_with_proxy( the_thread );
11dc99: 83 ec 0c sub $0xc,%esp
11dc9c: 53 push %ebx
11dc9d: e8 8e e7 fe ff call 10c430 <_Thread_queue_Extract_with_proxy>
11dca2: eb 1e jmp 11dcc2 <_POSIX_signals_Unblock_thread+0xd2>
else if ( _States_Is_delaying(the_thread->current_state) ) {
11dca4: 80 e2 08 and $0x8,%dl
11dca7: 74 3a je 11dce3 <_POSIX_signals_Unblock_thread+0xf3><== NEVER TAKEN
(void) _Watchdog_Remove( &the_thread->Timer );
11dca9: 83 ec 0c sub $0xc,%esp
11dcac: 8d 43 48 lea 0x48(%ebx),%eax
11dcaf: 50 push %eax
11dcb0: e8 63 ed fe ff call 10ca18 <_Watchdog_Remove>
RTEMS_INLINE_ROUTINE void _Thread_Unblock (
Thread_Control *the_thread
)
{
_Thread_Clear_state( the_thread, STATES_BLOCKED );
11dcb5: 58 pop %eax
11dcb6: 5a pop %edx
11dcb7: 68 f8 ff 03 10 push $0x1003fff8
11dcbc: 53 push %ebx
11dcbd: e8 1a de fe ff call 10badc <_Thread_Clear_state>
11dcc2: 83 c4 10 add $0x10,%esp
11dcc5: eb 1c jmp 11dce3 <_POSIX_signals_Unblock_thread+0xf3>
_Thread_Unblock( the_thread );
}
} else if ( the_thread->current_state == STATES_READY ) {
11dcc7: 85 d2 test %edx,%edx
11dcc9: 75 18 jne 11dce3 <_POSIX_signals_Unblock_thread+0xf3><== NEVER TAKEN
if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) )
11dccb: 83 3d e8 e8 12 00 00 cmpl $0x0,0x12e8e8
11dcd2: 74 0f je 11dce3 <_POSIX_signals_Unblock_thread+0xf3>
11dcd4: 3b 1d ec e8 12 00 cmp 0x12e8ec,%ebx
11dcda: 75 07 jne 11dce3 <_POSIX_signals_Unblock_thread+0xf3><== NEVER TAKEN
_Thread_Dispatch_necessary = true;
11dcdc: c6 05 f8 e8 12 00 01 movb $0x1,0x12e8f8
}
}
return false;
11dce3: 31 c0 xor %eax,%eax
}
11dce5: 8d 65 f4 lea -0xc(%ebp),%esp
11dce8: 5b pop %ebx
11dce9: 5e pop %esi
11dcea: 5f pop %edi
11dceb: 5d pop %ebp
11dcec: c3 ret
0010c004 <_RBTree_Extract_unprotected>:
*/
void _RBTree_Extract_unprotected(
RBTree_Control *the_rbtree,
RBTree_Node *the_node
)
{
10c004: 55 push %ebp
10c005: 89 e5 mov %esp,%ebp
10c007: 57 push %edi
10c008: 56 push %esi
10c009: 53 push %ebx
10c00a: 83 ec 1c sub $0x1c,%esp
10c00d: 8b 7d 08 mov 0x8(%ebp),%edi
10c010: 8b 5d 0c mov 0xc(%ebp),%ebx
RBTree_Node *leaf, *target;
RBTree_Color victim_color;
RBTree_Direction dir;
if (!the_node) return;
10c013: 85 db test %ebx,%ebx
10c015: 0f 84 0d 01 00 00 je 10c128 <_RBTree_Extract_unprotected+0x124>
/* check if min needs to be updated */
if (the_node == the_rbtree->first[RBT_LEFT]) {
10c01b: 3b 5f 08 cmp 0x8(%edi),%ebx
10c01e: 75 10 jne 10c030 <_RBTree_Extract_unprotected+0x2c>
*/
RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Successor_unprotected(
const RBTree_Node *node
)
{
return _RBTree_Next_unprotected( node, RBT_RIGHT );
10c020: 50 push %eax
10c021: 50 push %eax
10c022: 6a 01 push $0x1
10c024: 53 push %ebx
10c025: e8 5a 03 00 00 call 10c384 <_RBTree_Next_unprotected>
RBTree_Node *next;
next = _RBTree_Successor_unprotected(the_node);
the_rbtree->first[RBT_LEFT] = next;
10c02a: 89 47 08 mov %eax,0x8(%edi)
10c02d: 83 c4 10 add $0x10,%esp
}
/* Check if max needs to be updated. min=max for 1 element trees so
* do not use else if here. */
if (the_node == the_rbtree->first[RBT_RIGHT]) {
10c030: 3b 5f 0c cmp 0xc(%edi),%ebx
10c033: 75 10 jne 10c045 <_RBTree_Extract_unprotected+0x41>
*/
RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Predecessor_unprotected(
const RBTree_Node *node
)
{
return _RBTree_Next_unprotected( node, RBT_LEFT );
10c035: 56 push %esi
10c036: 56 push %esi
10c037: 6a 00 push $0x0
10c039: 53 push %ebx
10c03a: e8 45 03 00 00 call 10c384 <_RBTree_Next_unprotected>
RBTree_Node *previous;
previous = _RBTree_Predecessor_unprotected(the_node);
the_rbtree->first[RBT_RIGHT] = previous;
10c03f: 89 47 0c mov %eax,0xc(%edi)
10c042: 83 c4 10 add $0x10,%esp
* either max in node->child[RBT_LEFT] or min in node->child[RBT_RIGHT],
* and replace the_node with the target node. This maintains the binary
* search tree property, but may violate the red-black properties.
*/
if (the_node->child[RBT_LEFT] && the_node->child[RBT_RIGHT]) {
10c045: 8b 73 04 mov 0x4(%ebx),%esi
10c048: 85 f6 test %esi,%esi
10c04a: 74 77 je 10c0c3 <_RBTree_Extract_unprotected+0xbf>
10c04c: 83 7b 08 00 cmpl $0x0,0x8(%ebx)
10c050: 75 04 jne 10c056 <_RBTree_Extract_unprotected+0x52>
10c052: eb 78 jmp 10c0cc <_RBTree_Extract_unprotected+0xc8>
target = the_node->child[RBT_LEFT]; /* find max in node->child[RBT_LEFT] */
while (target->child[RBT_RIGHT]) target = target->child[RBT_RIGHT];
10c054: 89 c6 mov %eax,%esi
10c056: 8b 46 08 mov 0x8(%esi),%eax
10c059: 85 c0 test %eax,%eax
10c05b: 75 f7 jne 10c054 <_RBTree_Extract_unprotected+0x50>
* target's position (target is the right child of target->parent)
* when target vacates it. if there is no child, then target->parent
* should become NULL. This may cause the coloring to be violated.
* For now we store the color of the node being deleted in victim_color.
*/
leaf = target->child[RBT_LEFT];
10c05d: 8b 56 04 mov 0x4(%esi),%edx
if(leaf) {
10c060: 85 d2 test %edx,%edx
10c062: 74 06 je 10c06a <_RBTree_Extract_unprotected+0x66>
leaf->parent = target->parent;
10c064: 8b 06 mov (%esi),%eax
10c066: 89 02 mov %eax,(%edx)
10c068: eb 0d jmp 10c077 <_RBTree_Extract_unprotected+0x73>
} else {
/* fix the tree here if the child is a null leaf. */
_RBTree_Extract_validate_unprotected(target);
10c06a: 89 f0 mov %esi,%eax
10c06c: 89 55 e0 mov %edx,-0x20(%ebp)
10c06f: e8 53 fe ff ff call 10bec7 <_RBTree_Extract_validate_unprotected>
10c074: 8b 55 e0 mov -0x20(%ebp),%edx
}
victim_color = target->color;
10c077: 8b 46 0c mov 0xc(%esi),%eax
10c07a: 89 45 e4 mov %eax,-0x1c(%ebp)
dir = target != target->parent->child[0];
10c07d: 8b 06 mov (%esi),%eax
10c07f: 31 c9 xor %ecx,%ecx
10c081: 3b 70 04 cmp 0x4(%eax),%esi
10c084: 0f 95 c1 setne %cl
target->parent->child[dir] = leaf;
10c087: 89 54 88 04 mov %edx,0x4(%eax,%ecx,4)
/* now replace the_node with target */
dir = the_node != the_node->parent->child[0];
10c08b: 8b 03 mov (%ebx),%eax
10c08d: 31 c9 xor %ecx,%ecx
10c08f: 3b 58 04 cmp 0x4(%eax),%ebx
10c092: 0f 95 c1 setne %cl
the_node->parent->child[dir] = target;
10c095: 89 74 88 04 mov %esi,0x4(%eax,%ecx,4)
/* set target's new children to the original node's children */
target->child[RBT_RIGHT] = the_node->child[RBT_RIGHT];
10c099: 8b 43 08 mov 0x8(%ebx),%eax
10c09c: 89 46 08 mov %eax,0x8(%esi)
if (the_node->child[RBT_RIGHT])
10c09f: 8b 43 08 mov 0x8(%ebx),%eax
10c0a2: 85 c0 test %eax,%eax
10c0a4: 74 02 je 10c0a8 <_RBTree_Extract_unprotected+0xa4><== NEVER TAKEN
the_node->child[RBT_RIGHT]->parent = target;
10c0a6: 89 30 mov %esi,(%eax)
target->child[RBT_LEFT] = the_node->child[RBT_LEFT];
10c0a8: 8b 43 04 mov 0x4(%ebx),%eax
10c0ab: 89 46 04 mov %eax,0x4(%esi)
if (the_node->child[RBT_LEFT])
10c0ae: 8b 43 04 mov 0x4(%ebx),%eax
10c0b1: 85 c0 test %eax,%eax
10c0b3: 74 02 je 10c0b7 <_RBTree_Extract_unprotected+0xb3>
the_node->child[RBT_LEFT]->parent = target;
10c0b5: 89 30 mov %esi,(%eax)
/* finally, update the parent node and recolor. target has completely
* replaced the_node, and target's child has moved up the tree if needed.
* the_node is no longer part of the tree, although it has valid pointers
* still.
*/
target->parent = the_node->parent;
10c0b7: 8b 03 mov (%ebx),%eax
10c0b9: 89 06 mov %eax,(%esi)
target->color = the_node->color;
10c0bb: 8b 43 0c mov 0xc(%ebx),%eax
10c0be: 89 46 0c mov %eax,0xc(%esi)
10c0c1: eb 32 jmp 10c0f5 <_RBTree_Extract_unprotected+0xf1>
* the_node's location in the tree. This may cause the coloring to be
* violated. We will fix it later.
* For now we store the color of the node being deleted in victim_color.
*/
leaf = the_node->child[RBT_LEFT] ?
the_node->child[RBT_LEFT] : the_node->child[RBT_RIGHT];
10c0c3: 8b 53 08 mov 0x8(%ebx),%edx
if( leaf ) {
10c0c6: 85 d2 test %edx,%edx
10c0c8: 75 04 jne 10c0ce <_RBTree_Extract_unprotected+0xca>
10c0ca: eb 08 jmp 10c0d4 <_RBTree_Extract_unprotected+0xd0>
* either max in node->child[RBT_LEFT] or min in node->child[RBT_RIGHT],
* and replace the_node with the target node. This maintains the binary
* search tree property, but may violate the red-black properties.
*/
if (the_node->child[RBT_LEFT] && the_node->child[RBT_RIGHT]) {
10c0cc: 89 f2 mov %esi,%edx
* For now we store the color of the node being deleted in victim_color.
*/
leaf = the_node->child[RBT_LEFT] ?
the_node->child[RBT_LEFT] : the_node->child[RBT_RIGHT];
if( leaf ) {
leaf->parent = the_node->parent;
10c0ce: 8b 03 mov (%ebx),%eax
10c0d0: 89 02 mov %eax,(%edx)
10c0d2: eb 0d jmp 10c0e1 <_RBTree_Extract_unprotected+0xdd>
} else {
/* fix the tree here if the child is a null leaf. */
_RBTree_Extract_validate_unprotected(the_node);
10c0d4: 89 d8 mov %ebx,%eax
10c0d6: 89 55 e0 mov %edx,-0x20(%ebp)
10c0d9: e8 e9 fd ff ff call 10bec7 <_RBTree_Extract_validate_unprotected>
10c0de: 8b 55 e0 mov -0x20(%ebp),%edx
}
victim_color = the_node->color;
10c0e1: 8b 43 0c mov 0xc(%ebx),%eax
10c0e4: 89 45 e4 mov %eax,-0x1c(%ebp)
/* remove the_node from the tree */
dir = the_node != the_node->parent->child[0];
10c0e7: 8b 03 mov (%ebx),%eax
10c0e9: 31 c9 xor %ecx,%ecx
10c0eb: 3b 58 04 cmp 0x4(%eax),%ebx
10c0ee: 0f 95 c1 setne %cl
the_node->parent->child[dir] = leaf;
10c0f1: 89 54 88 04 mov %edx,0x4(%eax,%ecx,4)
/* fix coloring. leaf has moved up the tree. The color of the deleted
* node is in victim_color. There are two cases:
* 1. Deleted a red node, its child must be black. Nothing must be done.
* 2. Deleted a black node, its child must be red. Paint child black.
*/
if (victim_color == RBT_BLACK) { /* eliminate case 1 */
10c0f5: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp)
10c0f9: 75 0b jne 10c106 <_RBTree_Extract_unprotected+0x102>
if (leaf) {
10c0fb: 85 d2 test %edx,%edx
10c0fd: 74 07 je 10c106 <_RBTree_Extract_unprotected+0x102>
leaf->color = RBT_BLACK; /* case 2 */
10c0ff: c7 42 0c 00 00 00 00 movl $0x0,0xc(%edx)
*/
RTEMS_INLINE_ROUTINE void _RBTree_Set_off_rbtree(
RBTree_Node *node
)
{
node->parent = node->child[RBT_LEFT] = node->child[RBT_RIGHT] = NULL;
10c106: c7 43 08 00 00 00 00 movl $0x0,0x8(%ebx)
10c10d: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx)
10c114: c7 03 00 00 00 00 movl $0x0,(%ebx)
/* Wipe the_node */
_RBTree_Set_off_rbtree(the_node);
/* set root to black, if it exists */
if (the_rbtree->root) the_rbtree->root->color = RBT_BLACK;
10c11a: 8b 47 04 mov 0x4(%edi),%eax
10c11d: 85 c0 test %eax,%eax
10c11f: 74 07 je 10c128 <_RBTree_Extract_unprotected+0x124>
10c121: c7 40 0c 00 00 00 00 movl $0x0,0xc(%eax)
}
10c128: 8d 65 f4 lea -0xc(%ebp),%esp
10c12b: 5b pop %ebx
10c12c: 5e pop %esi
10c12d: 5f pop %edi
10c12e: 5d pop %ebp
10c12f: c3 ret
0010cb1c <_RBTree_Initialize>:
void *starting_address,
size_t number_nodes,
size_t node_size,
bool is_unique
)
{
10cb1c: 55 push %ebp
10cb1d: 89 e5 mov %esp,%ebp
10cb1f: 57 push %edi
10cb20: 56 push %esi
10cb21: 53 push %ebx
10cb22: 83 ec 0c sub $0xc,%esp
10cb25: 8b 5d 08 mov 0x8(%ebp),%ebx
10cb28: 8b 75 14 mov 0x14(%ebp),%esi
10cb2b: 8b 45 1c mov 0x1c(%ebp),%eax
size_t count;
RBTree_Node *next;
/* TODO: Error message? */
if (!the_rbtree) return;
10cb2e: 85 db test %ebx,%ebx
10cb30: 74 3d je 10cb6f <_RBTree_Initialize+0x53><== NEVER TAKEN
RBTree_Control *the_rbtree,
RBTree_Compare_function compare_function,
bool is_unique
)
{
the_rbtree->permanent_null = NULL;
10cb32: c7 03 00 00 00 00 movl $0x0,(%ebx)
the_rbtree->root = NULL;
10cb38: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx)
the_rbtree->first[0] = NULL;
10cb3f: c7 43 08 00 00 00 00 movl $0x0,0x8(%ebx)
the_rbtree->first[1] = NULL;
10cb46: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx)
the_rbtree->compare_function = compare_function;
10cb4d: 8b 55 0c mov 0xc(%ebp),%edx
10cb50: 89 53 10 mov %edx,0x10(%ebx)
the_rbtree->is_unique = is_unique;
10cb53: 88 43 14 mov %al,0x14(%ebx)
/* could do sanity checks here */
_RBTree_Initialize_empty(the_rbtree, compare_function, is_unique);
count = number_nodes;
next = starting_address;
10cb56: 8b 7d 10 mov 0x10(%ebp),%edi
while ( count-- ) {
10cb59: eb 10 jmp 10cb6b <_RBTree_Initialize+0x4f>
_RBTree_Insert_unprotected(the_rbtree, next);
10cb5b: 50 push %eax
10cb5c: 50 push %eax
10cb5d: 57 push %edi
10cb5e: 53 push %ebx
10cb5f: e8 a8 fd ff ff call 10c90c <_RBTree_Insert_unprotected>
* node_size - size of node in bytes
*
* Output parameters: NONE
*/
void _RBTree_Initialize(
10cb64: 03 7d 18 add 0x18(%ebp),%edi
10cb67: 4e dec %esi
10cb68: 83 c4 10 add $0x10,%esp
/* could do sanity checks here */
_RBTree_Initialize_empty(the_rbtree, compare_function, is_unique);
count = number_nodes;
next = starting_address;
while ( count-- ) {
10cb6b: 85 f6 test %esi,%esi
10cb6d: 75 ec jne 10cb5b <_RBTree_Initialize+0x3f>
_RBTree_Insert_unprotected(the_rbtree, next);
next = (RBTree_Node *)
_Addresses_Add_offset( (void *) next, node_size );
}
}
10cb6f: 8d 65 f4 lea -0xc(%ebp),%esp
10cb72: 5b pop %ebx
10cb73: 5e pop %esi
10cb74: 5f pop %edi
10cb75: 5d pop %ebp
10cb76: c3 ret
0010c194 <_RBTree_Insert_unprotected>:
*/
RBTree_Node *_RBTree_Insert_unprotected(
RBTree_Control *the_rbtree,
RBTree_Node *the_node
)
{
10c194: 55 push %ebp
10c195: 89 e5 mov %esp,%ebp
10c197: 57 push %edi
10c198: 56 push %esi
10c199: 53 push %ebx
10c19a: 83 ec 1c sub $0x1c,%esp
10c19d: 8b 75 08 mov 0x8(%ebp),%esi
10c1a0: 8b 5d 0c mov 0xc(%ebp),%ebx
if(!the_node) return (RBTree_Node*)-1;
10c1a3: 85 db test %ebx,%ebx
10c1a5: 0f 84 55 01 00 00 je 10c300 <_RBTree_Insert_unprotected+0x16c>
RBTree_Node *iter_node = the_rbtree->root;
10c1ab: 8b 7e 04 mov 0x4(%esi),%edi
int compare_result;
if (!iter_node) { /* special case: first node inserted */
10c1ae: 89 f9 mov %edi,%ecx
10c1b0: 85 ff test %edi,%edi
10c1b2: 75 27 jne 10c1db <_RBTree_Insert_unprotected+0x47>
the_node->color = RBT_BLACK;
10c1b4: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx)
the_rbtree->root = the_node;
10c1bb: 89 5e 04 mov %ebx,0x4(%esi)
the_rbtree->first[0] = the_rbtree->first[1] = the_node;
10c1be: 89 5e 0c mov %ebx,0xc(%esi)
10c1c1: 89 5e 08 mov %ebx,0x8(%esi)
the_node->parent = (RBTree_Node *) the_rbtree;
10c1c4: 89 33 mov %esi,(%ebx)
the_node->child[RBT_LEFT] = the_node->child[RBT_RIGHT] = NULL;
10c1c6: c7 43 08 00 00 00 00 movl $0x0,0x8(%ebx)
10c1cd: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx)
10c1d4: e9 37 01 00 00 jmp 10c310 <_RBTree_Insert_unprotected+0x17c>
(dir && _RBTree_Is_greater(compare_result)) ) {
the_rbtree->first[dir] = the_node;
}
break;
} else {
iter_node = iter_node->child[dir];
10c1d9: 89 f9 mov %edi,%ecx
the_node->parent = (RBTree_Node *) the_rbtree;
the_node->child[RBT_LEFT] = the_node->child[RBT_RIGHT] = NULL;
} else {
/* typical binary search tree insert, descend tree to leaf and insert */
while (iter_node) {
compare_result = the_rbtree->compare_function(the_node, iter_node);
10c1db: 52 push %edx
10c1dc: 52 push %edx
10c1dd: 57 push %edi
10c1de: 53 push %ebx
10c1df: 89 4d e4 mov %ecx,-0x1c(%ebp)
10c1e2: ff 56 10 call *0x10(%esi)
if ( the_rbtree->is_unique && _RBTree_Is_equal( compare_result ) )
10c1e5: 83 c4 10 add $0x10,%esp
10c1e8: 80 7e 14 00 cmpb $0x0,0x14(%esi)
10c1ec: 8b 4d e4 mov -0x1c(%ebp),%ecx
10c1ef: 74 08 je 10c1f9 <_RBTree_Insert_unprotected+0x65>
10c1f1: 85 c0 test %eax,%eax
10c1f3: 0f 84 17 01 00 00 je 10c310 <_RBTree_Insert_unprotected+0x17c>
return iter_node;
RBTree_Direction dir = !_RBTree_Is_lesser( compare_result );
10c1f9: 89 c2 mov %eax,%edx
10c1fb: f7 d2 not %edx
10c1fd: c1 ea 1f shr $0x1f,%edx
if (!iter_node->child[dir]) {
10c200: 8b 7c 97 04 mov 0x4(%edi,%edx,4),%edi
10c204: 85 ff test %edi,%edi
10c206: 75 d1 jne 10c1d9 <_RBTree_Insert_unprotected+0x45>
the_node->child[RBT_LEFT] = the_node->child[RBT_RIGHT] = NULL;
10c208: c7 43 08 00 00 00 00 movl $0x0,0x8(%ebx)
10c20f: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx)
the_node->color = RBT_RED;
10c216: c7 43 0c 01 00 00 00 movl $0x1,0xc(%ebx)
iter_node->child[dir] = the_node;
10c21d: 89 5c 91 04 mov %ebx,0x4(%ecx,%edx,4)
the_node->parent = iter_node;
10c221: 89 0b mov %ecx,(%ebx)
/* update min/max */
compare_result = the_rbtree->compare_function(
10c223: 50 push %eax
10c224: 50 push %eax
10c225: ff 74 96 08 pushl 0x8(%esi,%edx,4)
10c229: 53 push %ebx
10c22a: 89 55 e4 mov %edx,-0x1c(%ebp)
10c22d: ff 56 10 call *0x10(%esi)
the_node,
_RBTree_First(the_rbtree, dir)
);
if ( (!dir && _RBTree_Is_lesser(compare_result)) ||
10c230: 83 c4 10 add $0x10,%esp
10c233: 8b 55 e4 mov -0x1c(%ebp),%edx
10c236: 85 d2 test %edx,%edx
10c238: 75 0a jne 10c244 <_RBTree_Insert_unprotected+0xb0>
10c23a: 85 c0 test %eax,%eax
10c23c: 0f 89 9f 00 00 00 jns 10c2e1 <_RBTree_Insert_unprotected+0x14d>
10c242: eb 08 jmp 10c24c <_RBTree_Insert_unprotected+0xb8>
(dir && _RBTree_Is_greater(compare_result)) ) {
10c244: 85 c0 test %eax,%eax
10c246: 0f 8e 95 00 00 00 jle 10c2e1 <_RBTree_Insert_unprotected+0x14d>
the_rbtree->first[dir] = the_node;
10c24c: 89 5c 96 08 mov %ebx,0x8(%esi,%edx,4)
10c250: e9 8c 00 00 00 jmp 10c2e1 <_RBTree_Insert_unprotected+0x14d>
const RBTree_Node *the_node
)
{
if(!the_node) return NULL;
if(!(the_node->parent)) return NULL;
if(!(the_node->parent->parent)) return NULL;
10c255: 85 f6 test %esi,%esi
10c257: 74 1b je 10c274 <_RBTree_Insert_unprotected+0xe0><== NEVER TAKEN
if(!(the_node->parent->parent->parent)) return NULL;
10c259: 83 3e 00 cmpl $0x0,(%esi)
10c25c: 74 16 je 10c274 <_RBTree_Insert_unprotected+0xe0><== NEVER TAKEN
{
if(!the_node) return NULL;
if(!(the_node->parent)) return NULL;
if(!(the_node->parent->parent)) return NULL;
if(the_node == the_node->parent->child[RBT_LEFT])
10c25e: 8b 56 04 mov 0x4(%esi),%edx
10c261: 39 d0 cmp %edx,%eax
10c263: 75 03 jne 10c268 <_RBTree_Insert_unprotected+0xd4>
return the_node->parent->child[RBT_RIGHT];
10c265: 8b 56 08 mov 0x8(%esi),%edx
*/
RTEMS_INLINE_ROUTINE bool _RBTree_Is_red(
const RBTree_Node *the_node
)
{
return (the_node && the_node->color == RBT_RED);
10c268: 85 d2 test %edx,%edx
10c26a: 74 0a je 10c276 <_RBTree_Insert_unprotected+0xe2>
10c26c: 83 7a 0c 01 cmpl $0x1,0xc(%edx)
10c270: 75 04 jne 10c276 <_RBTree_Insert_unprotected+0xe2>
10c272: eb 06 jmp 10c27a <_RBTree_Insert_unprotected+0xe6>
)
{
if(!the_node) return NULL;
if(!(the_node->parent)) return NULL;
if(!(the_node->parent->parent)) return NULL;
if(!(the_node->parent->parent->parent)) return NULL;
10c274: 31 d2 xor %edx,%edx <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE bool _RBTree_Is_red(
const RBTree_Node *the_node
)
{
return (the_node && the_node->color == RBT_RED);
10c276: 31 c9 xor %ecx,%ecx
10c278: eb 05 jmp 10c27f <_RBTree_Insert_unprotected+0xeb>
10c27a: b9 01 00 00 00 mov $0x1,%ecx
while (_RBTree_Is_red(_RBTree_Parent(the_node))) {
u = _RBTree_Parent_sibling(the_node);
g = the_node->parent->parent;
/* if uncle is red, repaint uncle/parent black and grandparent red */
if(_RBTree_Is_red(u)) {
10c27f: 85 c9 test %ecx,%ecx
10c281: 74 17 je 10c29a <_RBTree_Insert_unprotected+0x106>
the_node->parent->color = RBT_BLACK;
10c283: c7 40 0c 00 00 00 00 movl $0x0,0xc(%eax)
u->color = RBT_BLACK;
10c28a: c7 42 0c 00 00 00 00 movl $0x0,0xc(%edx)
g->color = RBT_RED;
10c291: c7 46 0c 01 00 00 00 movl $0x1,0xc(%esi)
10c298: eb 45 jmp 10c2df <_RBTree_Insert_unprotected+0x14b>
the_node = g;
} else { /* if uncle is black */
RBTree_Direction dir = the_node != the_node->parent->child[0];
RBTree_Direction pdir = the_node->parent != g->child[0];
10c29a: 31 c9 xor %ecx,%ecx
10c29c: 3b 46 04 cmp 0x4(%esi),%eax
10c29f: 0f 95 c1 setne %cl
the_node->parent->color = RBT_BLACK;
u->color = RBT_BLACK;
g->color = RBT_RED;
the_node = g;
} else { /* if uncle is black */
RBTree_Direction dir = the_node != the_node->parent->child[0];
10c2a2: 31 d2 xor %edx,%edx
10c2a4: 3b 58 04 cmp 0x4(%eax),%ebx
10c2a7: 0f 95 c2 setne %dl
RBTree_Direction pdir = the_node->parent != g->child[0];
/* ensure node is on the same branch direction as parent */
if (dir != pdir) {
10c2aa: 39 ca cmp %ecx,%edx
10c2ac: 74 11 je 10c2bf <_RBTree_Insert_unprotected+0x12b>
_RBTree_Rotate(the_node->parent, pdir);
10c2ae: 89 ca mov %ecx,%edx
10c2b0: 89 4d e4 mov %ecx,-0x1c(%ebp)
10c2b3: e8 98 fe ff ff call 10c150 <_RBTree_Rotate>
the_node = the_node->child[pdir];
10c2b8: 8b 4d e4 mov -0x1c(%ebp),%ecx
10c2bb: 8b 5c 8b 04 mov 0x4(%ebx,%ecx,4),%ebx
}
the_node->parent->color = RBT_BLACK;
10c2bf: 8b 03 mov (%ebx),%eax
10c2c1: c7 40 0c 00 00 00 00 movl $0x0,0xc(%eax)
g->color = RBT_RED;
10c2c8: c7 46 0c 01 00 00 00 movl $0x1,0xc(%esi)
/* now rotate grandparent in the other branch direction (toward uncle) */
_RBTree_Rotate(g, (1-pdir));
10c2cf: ba 01 00 00 00 mov $0x1,%edx
10c2d4: 29 ca sub %ecx,%edx
10c2d6: 89 f0 mov %esi,%eax
10c2d8: e8 73 fe ff ff call 10c150 <_RBTree_Rotate>
10c2dd: 89 de mov %ebx,%esi
10c2df: 89 f3 mov %esi,%ebx
_ISR_Disable( level );
return_node = _RBTree_Insert_unprotected( tree, node );
_ISR_Enable( level );
return return_node;
}
10c2e1: 8b 03 mov (%ebx),%eax
*/
RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Parent(
const RBTree_Node *the_node
)
{
if (!the_node->parent->parent) return NULL;
10c2e3: 8b 30 mov (%eax),%esi
10c2e5: 85 f6 test %esi,%esi
10c2e7: 75 1c jne 10c305 <_RBTree_Insert_unprotected+0x171>
*/
RTEMS_INLINE_ROUTINE bool _RBTree_Is_red(
const RBTree_Node *the_node
)
{
return (the_node && the_node->color == RBT_RED);
10c2e9: 31 d2 xor %edx,%edx
RBTree_Node *u,*g;
/* note: the insert root case is handled already */
/* if the parent is black, nothing needs to be done
* otherwise may need to loop a few times */
while (_RBTree_Is_red(_RBTree_Parent(the_node))) {
10c2eb: 85 d2 test %edx,%edx
10c2ed: 0f 85 62 ff ff ff jne 10c255 <_RBTree_Insert_unprotected+0xc1>
/* now rotate grandparent in the other branch direction (toward uncle) */
_RBTree_Rotate(g, (1-pdir));
}
}
if(!the_node->parent->parent) the_node->color = RBT_BLACK;
10c2f3: 85 f6 test %esi,%esi
10c2f5: 75 19 jne 10c310 <_RBTree_Insert_unprotected+0x17c>
10c2f7: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx)
10c2fe: eb 10 jmp 10c310 <_RBTree_Insert_unprotected+0x17c>
RBTree_Node *_RBTree_Insert_unprotected(
RBTree_Control *the_rbtree,
RBTree_Node *the_node
)
{
if(!the_node) return (RBTree_Node*)-1;
10c300: 83 cf ff or $0xffffffff,%edi
10c303: eb 0b jmp 10c310 <_RBTree_Insert_unprotected+0x17c>
10c305: 31 d2 xor %edx,%edx
10c307: 83 78 0c 01 cmpl $0x1,0xc(%eax)
10c30b: 0f 94 c2 sete %dl
10c30e: eb db jmp 10c2eb <_RBTree_Insert_unprotected+0x157>
/* verify red-black properties */
_RBTree_Validate_insert_unprotected(the_node);
}
return (RBTree_Node*)0;
}
10c310: 89 f8 mov %edi,%eax
10c312: 8d 65 f4 lea -0xc(%ebp),%esp
10c315: 5b pop %ebx
10c316: 5e pop %esi
10c317: 5f pop %edi
10c318: 5d pop %ebp
10c319: c3 ret
0010c338 <_RBTree_Iterate_unprotected>:
const RBTree_Control *rbtree,
RBTree_Direction dir,
RBTree_Visitor visitor,
void *visitor_arg
)
{
10c338: 55 push %ebp
10c339: 89 e5 mov %esp,%ebp
10c33b: 57 push %edi
10c33c: 56 push %esi
10c33d: 53 push %ebx
10c33e: 83 ec 0c sub $0xc,%esp
10c341: 8b 5d 0c mov 0xc(%ebp),%ebx
*/
RTEMS_INLINE_ROUTINE RBTree_Direction _RBTree_Opposite_direction(
RBTree_Direction the_dir
)
{
return (RBTree_Direction) !((int) the_dir);
10c344: 31 d2 xor %edx,%edx
10c346: 85 db test %ebx,%ebx
10c348: 0f 94 c2 sete %dl
RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_First(
const RBTree_Control *the_rbtree,
RBTree_Direction dir
)
{
return the_rbtree->first[dir];
10c34b: 8b 45 08 mov 0x8(%ebp),%eax
10c34e: 8b 74 90 08 mov 0x8(%eax,%edx,4),%esi
RBTree_Direction opp_dir = _RBTree_Opposite_direction( dir );
const RBTree_Node *current = _RBTree_First( rbtree, opp_dir );
bool stop = false;
10c352: 31 ff xor %edi,%edi
while ( !stop && current != NULL ) {
10c354: eb 1b jmp 10c371 <_RBTree_Iterate_unprotected+0x39>
stop = (*visitor)( current, dir, visitor_arg );
10c356: 50 push %eax
10c357: ff 75 14 pushl 0x14(%ebp)
10c35a: 53 push %ebx
10c35b: 56 push %esi
10c35c: 8b 55 10 mov 0x10(%ebp),%edx
10c35f: ff d2 call *%edx
10c361: 89 c7 mov %eax,%edi
current = _RBTree_Next_unprotected( current, dir );
10c363: 5a pop %edx
10c364: 59 pop %ecx
10c365: 53 push %ebx
10c366: 56 push %esi
10c367: e8 18 00 00 00 call 10c384 <_RBTree_Next_unprotected>
10c36c: 89 c6 mov %eax,%esi
10c36e: 83 c4 10 add $0x10,%esp
{
RBTree_Direction opp_dir = _RBTree_Opposite_direction( dir );
const RBTree_Node *current = _RBTree_First( rbtree, opp_dir );
bool stop = false;
while ( !stop && current != NULL ) {
10c371: 85 f6 test %esi,%esi
10c373: 74 06 je 10c37b <_RBTree_Iterate_unprotected+0x43>
10c375: 89 f8 mov %edi,%eax
10c377: fe c8 dec %al
10c379: 75 db jne 10c356 <_RBTree_Iterate_unprotected+0x1e><== ALWAYS TAKEN
stop = (*visitor)( current, dir, visitor_arg );
current = _RBTree_Next_unprotected( current, dir );
}
}
10c37b: 8d 65 f4 lea -0xc(%ebp),%esp
10c37e: 5b pop %ebx
10c37f: 5e pop %esi
10c380: 5f pop %edi
10c381: 5d pop %ebp
10c382: c3 ret
0010be83 <_RBTree_Rotate>:
RBTree_Node *the_node,
RBTree_Direction dir
)
{
RBTree_Node *c;
if (the_node == NULL) return;
10be83: 85 c0 test %eax,%eax
10be85: 74 3f je 10bec6 <_RBTree_Rotate+0x43> <== NEVER TAKEN
*/
RTEMS_INLINE_ROUTINE void _RBTree_Rotate(
RBTree_Node *the_node,
RBTree_Direction dir
)
{
10be87: 55 push %ebp
10be88: 89 e5 mov %esp,%ebp
10be8a: 56 push %esi
10be8b: 53 push %ebx
*/
RTEMS_INLINE_ROUTINE RBTree_Direction _RBTree_Opposite_direction(
RBTree_Direction the_dir
)
{
return (RBTree_Direction) !((int) the_dir);
10be8c: 31 db xor %ebx,%ebx
10be8e: 85 d2 test %edx,%edx
10be90: 0f 94 c3 sete %bl
RBTree_Direction dir
)
{
RBTree_Node *c;
if (the_node == NULL) return;
if (the_node->child[_RBTree_Opposite_direction(dir)] == NULL) return;
10be93: 8b 4c 98 04 mov 0x4(%eax,%ebx,4),%ecx
10be97: 85 c9 test %ecx,%ecx
10be99: 74 28 je 10bec3 <_RBTree_Rotate+0x40> <== NEVER TAKEN
c = the_node->child[_RBTree_Opposite_direction(dir)];
the_node->child[_RBTree_Opposite_direction(dir)] = c->child[dir];
10be9b: 8b 74 91 04 mov 0x4(%ecx,%edx,4),%esi
10be9f: 89 74 98 04 mov %esi,0x4(%eax,%ebx,4)
if (c->child[dir])
10bea3: 8b 5c 91 04 mov 0x4(%ecx,%edx,4),%ebx
10bea7: 85 db test %ebx,%ebx
10bea9: 74 02 je 10bead <_RBTree_Rotate+0x2a>
c->child[dir]->parent = the_node;
10beab: 89 03 mov %eax,(%ebx)
c->child[dir] = the_node;
10bead: 89 44 91 04 mov %eax,0x4(%ecx,%edx,4)
the_node->parent->child[the_node != the_node->parent->child[0]] = c;
10beb1: 8b 10 mov (%eax),%edx
10beb3: 31 db xor %ebx,%ebx
10beb5: 3b 42 04 cmp 0x4(%edx),%eax
10beb8: 0f 95 c3 setne %bl
10bebb: 89 4c 9a 04 mov %ecx,0x4(%edx,%ebx,4)
c->parent = the_node->parent;
10bebf: 89 11 mov %edx,(%ecx)
the_node->parent = c;
10bec1: 89 08 mov %ecx,(%eax)
}
10bec3: 5b pop %ebx
10bec4: 5e pop %esi
10bec5: 5d pop %ebp
10bec6: c3 ret
0010be5f <_RBTree_Sibling>:
* exists, and NULL if not.
*/
RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Sibling(
const RBTree_Node *the_node
)
{
10be5f: 55 push %ebp
10be60: 89 e5 mov %esp,%ebp
if(!the_node) return NULL;
10be62: 85 c0 test %eax,%eax
10be64: 74 17 je 10be7d <_RBTree_Sibling+0x1e> <== NEVER TAKEN
if(!(the_node->parent)) return NULL;
10be66: 8b 08 mov (%eax),%ecx
10be68: 85 c9 test %ecx,%ecx
10be6a: 74 11 je 10be7d <_RBTree_Sibling+0x1e> <== NEVER TAKEN
if(!(the_node->parent->parent)) return NULL;
10be6c: 83 39 00 cmpl $0x0,(%ecx)
10be6f: 74 0c je 10be7d <_RBTree_Sibling+0x1e>
if(the_node == the_node->parent->child[RBT_LEFT])
10be71: 8b 51 04 mov 0x4(%ecx),%edx
10be74: 39 d0 cmp %edx,%eax
10be76: 75 07 jne 10be7f <_RBTree_Sibling+0x20>
return the_node->parent->child[RBT_RIGHT];
10be78: 8b 51 08 mov 0x8(%ecx),%edx
10be7b: eb 02 jmp 10be7f <_RBTree_Sibling+0x20>
*/
RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Sibling(
const RBTree_Node *the_node
)
{
if(!the_node) return NULL;
10be7d: 31 d2 xor %edx,%edx
if(the_node == the_node->parent->child[RBT_LEFT])
return the_node->parent->child[RBT_RIGHT];
else
return the_node->parent->child[RBT_LEFT];
}
10be7f: 89 d0 mov %edx,%eax
10be81: 5d pop %ebp
10be82: c3 ret
0012dbb8 <_Rate_monotonic_Get_status>:
bool _Rate_monotonic_Get_status(
Rate_monotonic_Control *the_period,
Rate_monotonic_Period_time_t *wall_since_last_period,
Thread_CPU_usage_t *cpu_since_last_period
)
{
12dbb8: 55 push %ebp
12dbb9: 89 e5 mov %esp,%ebp
12dbbb: 57 push %edi
12dbbc: 56 push %esi
12dbbd: 53 push %ebx
12dbbe: 83 ec 28 sub $0x28,%esp
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
Timestamp_Control uptime;
#endif
Thread_Control *owning_thread = the_period->owner;
12dbc1: 8b 45 08 mov 0x8(%ebp),%eax
12dbc4: 8b 78 40 mov 0x40(%eax),%edi
/*
* Determine elapsed wall time since period initiated.
*/
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
_TOD_Get_uptime( &uptime );
12dbc7: 8d 45 e0 lea -0x20(%ebp),%eax
12dbca: 50 push %eax
12dbcb: e8 e4 30 fe ff call 110cb4 <_TOD_Get_uptime>
_Timestamp_Subtract(
12dbd0: 8b 45 e0 mov -0x20(%ebp),%eax
12dbd3: 8b 55 e4 mov -0x1c(%ebp),%edx
const Timestamp64_Control *_start,
const Timestamp64_Control *_end,
Timestamp64_Control *_result
)
{
*_result = *_end - *_start;
12dbd6: 89 c1 mov %eax,%ecx
12dbd8: 89 d3 mov %edx,%ebx
12dbda: 8b 75 08 mov 0x8(%ebp),%esi
12dbdd: 2b 4e 4c sub 0x4c(%esi),%ecx
12dbe0: 1b 5e 50 sbb 0x50(%esi),%ebx
12dbe3: 8b 75 0c mov 0xc(%ebp),%esi
12dbe6: 89 0e mov %ecx,(%esi)
12dbe8: 89 5e 04 mov %ebx,0x4(%esi)
#endif
/*
* Determine cpu usage since period initiated.
*/
used = owning_thread->cpu_time_used;
12dbeb: 8b 8f 80 00 00 00 mov 0x80(%edi),%ecx
12dbf1: 8b 9f 84 00 00 00 mov 0x84(%edi),%ebx
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
if (owning_thread == _Thread_Executing) {
12dbf7: 83 c4 10 add $0x10,%esp
if (used < the_period->cpu_usage_period_initiated)
return false;
*cpu_since_last_period = used - the_period->cpu_usage_period_initiated;
#endif
return true;
12dbfa: be 01 00 00 00 mov $0x1,%esi
* Determine cpu usage since period initiated.
*/
used = owning_thread->cpu_time_used;
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
if (owning_thread == _Thread_Executing) {
12dbff: 3b 3d 04 e7 16 00 cmp 0x16e704,%edi
12dc05: 75 38 jne 12dc3f <_Rate_monotonic_Get_status+0x87>
12dc07: 2b 05 14 e7 16 00 sub 0x16e714,%eax
12dc0d: 1b 15 18 e7 16 00 sbb 0x16e718,%edx
static inline void _Timestamp64_implementation_Add_to(
Timestamp64_Control *_time,
const Timestamp64_Control *_add
)
{
*_time += *_add;
12dc13: 01 c8 add %ecx,%eax
12dc15: 11 da adc %ebx,%edx
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
12dc17: 8b 75 08 mov 0x8(%ebp),%esi
12dc1a: 8b 4e 44 mov 0x44(%esi),%ecx
12dc1d: 8b 5e 48 mov 0x48(%esi),%ebx
/*
* The cpu usage info was reset while executing. Can't
* determine a status.
*/
if (_Timestamp_Less_than(&used, &the_period->cpu_usage_period_initiated))
12dc20: 39 da cmp %ebx,%edx
12dc22: 7c 19 jl 12dc3d <_Rate_monotonic_Get_status+0x85><== NEVER TAKEN
12dc24: 7f 04 jg 12dc2a <_Rate_monotonic_Get_status+0x72>
12dc26: 39 c8 cmp %ecx,%eax
12dc28: 72 13 jb 12dc3d <_Rate_monotonic_Get_status+0x85>
const Timestamp64_Control *_start,
const Timestamp64_Control *_end,
Timestamp64_Control *_result
)
{
*_result = *_end - *_start;
12dc2a: 29 c8 sub %ecx,%eax
12dc2c: 19 da sbb %ebx,%edx
12dc2e: 8b 4d 10 mov 0x10(%ebp),%ecx
12dc31: 89 01 mov %eax,(%ecx)
12dc33: 89 51 04 mov %edx,0x4(%ecx)
if (used < the_period->cpu_usage_period_initiated)
return false;
*cpu_since_last_period = used - the_period->cpu_usage_period_initiated;
#endif
return true;
12dc36: be 01 00 00 00 mov $0x1,%esi
12dc3b: eb 02 jmp 12dc3f <_Rate_monotonic_Get_status+0x87>
/*
* The cpu usage info was reset while executing. Can't
* determine a status.
*/
if (_Timestamp_Less_than(&used, &the_period->cpu_usage_period_initiated))
return false;
12dc3d: 31 f6 xor %esi,%esi
return false;
*cpu_since_last_period = used - the_period->cpu_usage_period_initiated;
#endif
return true;
}
12dc3f: 89 f0 mov %esi,%eax
12dc41: 8d 65 f4 lea -0xc(%ebp),%esp
12dc44: 5b pop %ebx
12dc45: 5e pop %esi
12dc46: 5f pop %edi
12dc47: 5d pop %ebp
12dc48: c3 ret
0012dedc <_Rate_monotonic_Timeout>:
void _Rate_monotonic_Timeout(
Objects_Id id,
void *ignored
)
{
12dedc: 55 push %ebp
12dedd: 89 e5 mov %esp,%ebp
12dedf: 53 push %ebx
12dee0: 83 ec 18 sub $0x18,%esp
/*
* When we get here, the Timer is already off the chain so we do not
* have to worry about that -- hence no _Watchdog_Remove().
*/
the_period = _Rate_monotonic_Get( id, &location );
12dee3: 8d 45 f4 lea -0xc(%ebp),%eax
12dee6: 50 push %eax
12dee7: ff 75 08 pushl 0x8(%ebp)
12deea: 68 a0 ec 16 00 push $0x16eca0
12deef: e8 4c d1 fd ff call 10b040 <_Objects_Get>
switch ( location ) {
12def4: 83 c4 10 add $0x10,%esp
12def7: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
12defb: 75 6b jne 12df68 <_Rate_monotonic_Timeout+0x8c><== NEVER TAKEN
12defd: 89 c3 mov %eax,%ebx
case OBJECTS_LOCAL:
the_thread = the_period->owner;
12deff: 8b 40 40 mov 0x40(%eax),%eax
if ( _States_Is_waiting_for_period( the_thread->current_state ) &&
12df02: f6 40 11 40 testb $0x40,0x11(%eax)
12df06: 74 18 je 12df20 <_Rate_monotonic_Timeout+0x44>
12df08: 8b 53 08 mov 0x8(%ebx),%edx
12df0b: 39 50 20 cmp %edx,0x20(%eax)
12df0e: 75 10 jne 12df20 <_Rate_monotonic_Timeout+0x44>
RTEMS_INLINE_ROUTINE void _Thread_Unblock (
Thread_Control *the_thread
)
{
_Thread_Clear_state( the_thread, STATES_BLOCKED );
12df10: 51 push %ecx
12df11: 51 push %ecx
12df12: 68 f8 ff 03 10 push $0x1003fff8
12df17: 50 push %eax
12df18: e8 27 d9 fd ff call 10b844 <_Thread_Clear_state>
the_thread->Wait.id == the_period->Object.id ) {
_Thread_Unblock( the_thread );
_Rate_monotonic_Initiate_statistics( the_period );
12df1d: 58 pop %eax
12df1e: eb 10 jmp 12df30 <_Rate_monotonic_Timeout+0x54>
_Watchdog_Insert_ticks( &the_period->Timer, the_period->next_length );
} else if ( the_period->state == RATE_MONOTONIC_OWNER_IS_BLOCKING ) {
12df20: 83 7b 38 01 cmpl $0x1,0x38(%ebx)
12df24: 75 2b jne 12df51 <_Rate_monotonic_Timeout+0x75>
the_period->state = RATE_MONOTONIC_EXPIRED_WHILE_BLOCKING;
12df26: c7 43 38 03 00 00 00 movl $0x3,0x38(%ebx)
_Rate_monotonic_Initiate_statistics( the_period );
12df2d: 83 ec 0c sub $0xc,%esp
12df30: 53 push %ebx
12df31: e8 b2 fd ff ff call 12dce8 <_Rate_monotonic_Initiate_statistics>
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
12df36: 8b 43 3c mov 0x3c(%ebx),%eax
12df39: 89 43 1c mov %eax,0x1c(%ebx)
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
12df3c: 58 pop %eax
12df3d: 5a pop %edx
_Watchdog_Insert_ticks( &the_period->Timer, the_period->next_length );
12df3e: 83 c3 10 add $0x10,%ebx
12df41: 53 push %ebx
12df42: 68 a0 e2 16 00 push $0x16e2a0
12df47: e8 20 e7 fd ff call 10c66c <_Watchdog_Insert>
12df4c: 83 c4 10 add $0x10,%esp
12df4f: eb 07 jmp 12df58 <_Rate_monotonic_Timeout+0x7c>
} else
the_period->state = RATE_MONOTONIC_EXPIRED;
12df51: c7 43 38 04 00 00 00 movl $0x4,0x38(%ebx)
*
* This routine decrements the thread dispatch level.
*/
RTEMS_INLINE_ROUTINE uint32_t _Thread_Dispatch_decrement_disable_level(void)
{
_Thread_Dispatch_disable_level--;
12df58: a1 fc e1 16 00 mov 0x16e1fc,%eax
12df5d: 48 dec %eax
12df5e: a3 fc e1 16 00 mov %eax,0x16e1fc
return _Thread_Dispatch_disable_level;
12df63: a1 fc e1 16 00 mov 0x16e1fc,%eax
case OBJECTS_REMOTE: /* impossible */
#endif
case OBJECTS_ERROR:
break;
}
}
12df68: 8b 5d fc mov -0x4(%ebp),%ebx
12df6b: c9 leave
12df6c: c3 ret
0012dc49 <_Rate_monotonic_Update_statistics>:
}
static void _Rate_monotonic_Update_statistics(
Rate_monotonic_Control *the_period
)
{
12dc49: 55 push %ebp
12dc4a: 89 e5 mov %esp,%ebp
12dc4c: 56 push %esi
12dc4d: 53 push %ebx
12dc4e: 83 ec 10 sub $0x10,%esp
12dc51: 89 c6 mov %eax,%esi
/*
* Update the counts.
*/
stats = &the_period->Statistics;
stats->count++;
12dc53: ff 40 54 incl 0x54(%eax)
if ( the_period->state == RATE_MONOTONIC_EXPIRED )
12dc56: 83 78 38 04 cmpl $0x4,0x38(%eax)
12dc5a: 75 03 jne 12dc5f <_Rate_monotonic_Update_statistics+0x16>
stats->missed_count++;
12dc5c: ff 40 58 incl 0x58(%eax)
/*
* Grab status for time statistics.
*/
valid_status =
12dc5f: 50 push %eax
_Rate_monotonic_Get_status( the_period, &since_last_period, &executed );
12dc60: 8d 45 e8 lea -0x18(%ebp),%eax
stats->missed_count++;
/*
* Grab status for time statistics.
*/
valid_status =
12dc63: 50 push %eax
_Rate_monotonic_Get_status( the_period, &since_last_period, &executed );
12dc64: 8d 45 f0 lea -0x10(%ebp),%eax
stats->missed_count++;
/*
* Grab status for time statistics.
*/
valid_status =
12dc67: 50 push %eax
12dc68: 56 push %esi
12dc69: e8 4a ff ff ff call 12dbb8 <_Rate_monotonic_Get_status>
_Rate_monotonic_Get_status( the_period, &since_last_period, &executed );
if (!valid_status)
12dc6e: 83 c4 10 add $0x10,%esp
12dc71: 84 c0 test %al,%al
12dc73: 74 6c je 12dce1 <_Rate_monotonic_Update_statistics+0x98>
/*
* Update CPU time
*/
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
_Timestamp_Add_to( &stats->total_cpu_time, &executed );
12dc75: 8b 4d e8 mov -0x18(%ebp),%ecx
12dc78: 8b 5d ec mov -0x14(%ebp),%ebx
static inline void _Timestamp64_implementation_Add_to(
Timestamp64_Control *_time,
const Timestamp64_Control *_add
)
{
*_time += *_add;
12dc7b: 01 4e 6c add %ecx,0x6c(%esi)
12dc7e: 11 5e 70 adc %ebx,0x70(%esi)
if ( _Timestamp_Less_than( &executed, &stats->min_cpu_time ) )
12dc81: 3b 5e 60 cmp 0x60(%esi),%ebx
12dc84: 7f 0d jg 12dc93 <_Rate_monotonic_Update_statistics+0x4a><== NEVER TAKEN
12dc86: 7c 05 jl 12dc8d <_Rate_monotonic_Update_statistics+0x44>
12dc88: 3b 4e 5c cmp 0x5c(%esi),%ecx
12dc8b: 73 06 jae 12dc93 <_Rate_monotonic_Update_statistics+0x4a>
stats->min_cpu_time = executed;
12dc8d: 89 4e 5c mov %ecx,0x5c(%esi)
12dc90: 89 5e 60 mov %ebx,0x60(%esi)
if ( _Timestamp_Greater_than( &executed, &stats->max_cpu_time ) )
12dc93: 39 5e 68 cmp %ebx,0x68(%esi)
12dc96: 7f 0d jg 12dca5 <_Rate_monotonic_Update_statistics+0x5c><== NEVER TAKEN
12dc98: 7c 05 jl 12dc9f <_Rate_monotonic_Update_statistics+0x56><== NEVER TAKEN
12dc9a: 39 4e 64 cmp %ecx,0x64(%esi)
12dc9d: 73 06 jae 12dca5 <_Rate_monotonic_Update_statistics+0x5c>
stats->max_cpu_time = executed;
12dc9f: 89 4e 64 mov %ecx,0x64(%esi)
12dca2: 89 5e 68 mov %ebx,0x68(%esi)
/*
* Update Wall time
*/
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
_Timestamp_Add_to( &stats->total_wall_time, &since_last_period );
12dca5: 8b 4d f0 mov -0x10(%ebp),%ecx
12dca8: 8b 5d f4 mov -0xc(%ebp),%ebx
12dcab: 01 8e 84 00 00 00 add %ecx,0x84(%esi)
12dcb1: 11 9e 88 00 00 00 adc %ebx,0x88(%esi)
if ( _Timestamp_Less_than( &since_last_period, &stats->min_wall_time ) )
12dcb7: 3b 5e 78 cmp 0x78(%esi),%ebx
12dcba: 7f 0d jg 12dcc9 <_Rate_monotonic_Update_statistics+0x80><== NEVER TAKEN
12dcbc: 7c 05 jl 12dcc3 <_Rate_monotonic_Update_statistics+0x7a>
12dcbe: 3b 4e 74 cmp 0x74(%esi),%ecx
12dcc1: 73 06 jae 12dcc9 <_Rate_monotonic_Update_statistics+0x80>
stats->min_wall_time = since_last_period;
12dcc3: 89 4e 74 mov %ecx,0x74(%esi)
12dcc6: 89 5e 78 mov %ebx,0x78(%esi)
if ( _Timestamp_Greater_than( &since_last_period, &stats->max_wall_time ) )
12dcc9: 39 9e 80 00 00 00 cmp %ebx,0x80(%esi)
12dccf: 7f 10 jg 12dce1 <_Rate_monotonic_Update_statistics+0x98>
12dcd1: 7c 05 jl 12dcd8 <_Rate_monotonic_Update_statistics+0x8f><== NEVER TAKEN
12dcd3: 39 4e 7c cmp %ecx,0x7c(%esi)
12dcd6: 73 09 jae 12dce1 <_Rate_monotonic_Update_statistics+0x98>
stats->max_wall_time = since_last_period;
12dcd8: 89 4e 7c mov %ecx,0x7c(%esi)
12dcdb: 89 9e 80 00 00 00 mov %ebx,0x80(%esi)
stats->min_wall_time = since_last_period;
if ( since_last_period > stats->max_wall_time )
stats->max_wall_time = since_last_period;
#endif
}
12dce1: 8d 65 f8 lea -0x8(%ebp),%esp
12dce4: 5b pop %ebx
12dce5: 5e pop %esi
12dce6: 5d pop %ebp
12dce7: c3 ret
0010bcd8 <_Scheduler_CBS_Allocate>:
#include <rtems/score/wkspace.h>
void *_Scheduler_CBS_Allocate(
Thread_Control *the_thread
)
{
10bcd8: 55 push %ebp
10bcd9: 89 e5 mov %esp,%ebp
10bcdb: 53 push %ebx
10bcdc: 83 ec 10 sub $0x10,%esp
10bcdf: 8b 5d 08 mov 0x8(%ebp),%ebx
void *sched;
Scheduler_CBS_Per_thread *schinfo;
sched = _Workspace_Allocate(sizeof(Scheduler_CBS_Per_thread));
10bce2: 6a 1c push $0x1c
10bce4: e8 a7 15 00 00 call 10d290 <_Workspace_Allocate>
if ( sched ) {
10bce9: 83 c4 10 add $0x10,%esp
10bcec: 85 c0 test %eax,%eax
10bcee: 74 16 je 10bd06 <_Scheduler_CBS_Allocate+0x2e><== NEVER TAKEN
the_thread->scheduler_info = sched;
10bcf0: 89 83 88 00 00 00 mov %eax,0x88(%ebx)
schinfo = (Scheduler_CBS_Per_thread *)(the_thread->scheduler_info);
schinfo->edf_per_thread.thread = the_thread;
10bcf6: 89 18 mov %ebx,(%eax)
schinfo->edf_per_thread.queue_state = SCHEDULER_EDF_QUEUE_STATE_NEVER_HAS_BEEN;
10bcf8: c7 40 14 02 00 00 00 movl $0x2,0x14(%eax)
schinfo->cbs_server = NULL;
10bcff: c7 40 18 00 00 00 00 movl $0x0,0x18(%eax)
}
return sched;
}
10bd06: 8b 5d fc mov -0x4(%ebp),%ebx
10bd09: c9 leave
10bd0a: c3 ret
0010d104 <_Scheduler_CBS_Budget_callout>:
Scheduler_CBS_Server **_Scheduler_CBS_Server_list;
void _Scheduler_CBS_Budget_callout(
Thread_Control *the_thread
)
{
10d104: 55 push %ebp
10d105: 89 e5 mov %esp,%ebp
10d107: 53 push %ebx
10d108: 83 ec 14 sub $0x14,%esp
10d10b: 8b 5d 08 mov 0x8(%ebp),%ebx
Priority_Control new_priority;
Scheduler_CBS_Per_thread *sched_info;
Scheduler_CBS_Server_id server_id;
/* Put violating task to background until the end of period. */
new_priority = the_thread->Start.initial_priority;
10d10e: 8b 83 ac 00 00 00 mov 0xac(%ebx),%eax
if ( the_thread->real_priority != new_priority )
10d114: 39 43 18 cmp %eax,0x18(%ebx)
10d117: 74 03 je 10d11c <_Scheduler_CBS_Budget_callout+0x18><== NEVER TAKEN
the_thread->real_priority = new_priority;
10d119: 89 43 18 mov %eax,0x18(%ebx)
if ( the_thread->current_priority != new_priority )
10d11c: 39 43 14 cmp %eax,0x14(%ebx)
10d11f: 74 0d je 10d12e <_Scheduler_CBS_Budget_callout+0x2a><== NEVER TAKEN
_Thread_Change_priority(the_thread, new_priority, true);
10d121: 52 push %edx
10d122: 6a 01 push $0x1
10d124: 50 push %eax
10d125: 53 push %ebx
10d126: e8 b5 04 00 00 call 10d5e0 <_Thread_Change_priority>
10d12b: 83 c4 10 add $0x10,%esp
/* Invoke callback function if any. */
sched_info = (Scheduler_CBS_Per_thread *) the_thread->scheduler_info;
10d12e: 8b 9b 88 00 00 00 mov 0x88(%ebx),%ebx
if ( sched_info->cbs_server->cbs_budget_overrun ) {
10d134: 8b 43 18 mov 0x18(%ebx),%eax
10d137: 83 78 0c 00 cmpl $0x0,0xc(%eax)
10d13b: 74 1a je 10d157 <_Scheduler_CBS_Budget_callout+0x53>
_Scheduler_CBS_Get_server_id(
10d13d: 52 push %edx
10d13e: 52 push %edx
10d13f: 8d 55 f4 lea -0xc(%ebp),%edx
10d142: 52 push %edx
10d143: ff 30 pushl (%eax)
10d145: e8 7e ff ff ff call 10d0c8 <_Scheduler_CBS_Get_server_id>
sched_info->cbs_server->task_id,
&server_id
);
sched_info->cbs_server->cbs_budget_overrun( server_id );
10d14a: 59 pop %ecx
10d14b: 8b 43 18 mov 0x18(%ebx),%eax
10d14e: ff 75 f4 pushl -0xc(%ebp)
10d151: ff 50 0c call *0xc(%eax)
10d154: 83 c4 10 add $0x10,%esp
}
}
10d157: 8b 5d fc mov -0x4(%ebp),%ebx
10d15a: c9 leave
10d15b: c3 ret
0010cdcc <_Scheduler_CBS_Create_server>:
int _Scheduler_CBS_Create_server (
Scheduler_CBS_Parameters *params,
Scheduler_CBS_Budget_overrun budget_overrun_callback,
rtems_id *server_id
)
{
10cdcc: 55 push %ebp
10cdcd: 89 e5 mov %esp,%ebp
10cdcf: 57 push %edi
10cdd0: 56 push %esi
10cdd1: 53 push %ebx
10cdd2: 83 ec 0c sub $0xc,%esp
10cdd5: 8b 5d 08 mov 0x8(%ebp),%ebx
10cdd8: 8b 75 10 mov 0x10(%ebp),%esi
unsigned int i;
Scheduler_CBS_Server *the_server;
if ( params->budget <= 0 ||
10cddb: 83 7b 04 00 cmpl $0x0,0x4(%ebx)
10cddf: 7e 42 jle 10ce23 <_Scheduler_CBS_Create_server+0x57>
10cde1: 83 3b 00 cmpl $0x0,(%ebx)
10cde4: 7e 3d jle 10ce23 <_Scheduler_CBS_Create_server+0x57>
params->deadline <= 0 ||
params->budget >= SCHEDULER_EDF_PRIO_MSB ||
params->deadline >= SCHEDULER_EDF_PRIO_MSB )
return SCHEDULER_CBS_ERROR_INVALID_PARAMETER;
for ( i = 0; i<_Scheduler_CBS_Maximum_servers; i++ ) {
10cde6: 8b 15 6c d2 12 00 mov 0x12d26c,%edx
if ( !_Scheduler_CBS_Server_list[i] )
10cdec: 8b 0d ac 19 13 00 mov 0x1319ac,%ecx
10cdf2: 31 c0 xor %eax,%eax
10cdf4: eb 07 jmp 10cdfd <_Scheduler_CBS_Create_server+0x31>
10cdf6: 83 3c 81 00 cmpl $0x0,(%ecx,%eax,4)
10cdfa: 74 35 je 10ce31 <_Scheduler_CBS_Create_server+0x65>
params->deadline <= 0 ||
params->budget >= SCHEDULER_EDF_PRIO_MSB ||
params->deadline >= SCHEDULER_EDF_PRIO_MSB )
return SCHEDULER_CBS_ERROR_INVALID_PARAMETER;
for ( i = 0; i<_Scheduler_CBS_Maximum_servers; i++ ) {
10cdfc: 40 inc %eax
10cdfd: 39 d0 cmp %edx,%eax
10cdff: 75 f5 jne 10cdf6 <_Scheduler_CBS_Create_server+0x2a>
if ( !_Scheduler_CBS_Server_list[i] )
break;
}
if ( i == _Scheduler_CBS_Maximum_servers )
return SCHEDULER_CBS_ERROR_FULL;
10ce01: b8 e6 ff ff ff mov $0xffffffe6,%eax
10ce06: eb 53 jmp 10ce5b <_Scheduler_CBS_Create_server+0x8f>
_Workspace_Allocate( sizeof(Scheduler_CBS_Server) );
the_server = _Scheduler_CBS_Server_list[*server_id];
if ( !the_server )
return SCHEDULER_CBS_ERROR_NO_MEMORY;
the_server->parameters = *params;
10ce08: 8b 03 mov (%ebx),%eax
10ce0a: 8b 53 04 mov 0x4(%ebx),%edx
10ce0d: 89 41 04 mov %eax,0x4(%ecx)
10ce10: 89 51 08 mov %edx,0x8(%ecx)
the_server->task_id = -1;
10ce13: c7 01 ff ff ff ff movl $0xffffffff,(%ecx)
the_server->cbs_budget_overrun = budget_overrun_callback;
10ce19: 8b 45 0c mov 0xc(%ebp),%eax
10ce1c: 89 41 0c mov %eax,0xc(%ecx)
return SCHEDULER_CBS_OK;
10ce1f: 31 c0 xor %eax,%eax
10ce21: eb 38 jmp 10ce5b <_Scheduler_CBS_Create_server+0x8f>
if ( params->budget <= 0 ||
params->deadline <= 0 ||
params->budget >= SCHEDULER_EDF_PRIO_MSB ||
params->deadline >= SCHEDULER_EDF_PRIO_MSB )
return SCHEDULER_CBS_ERROR_INVALID_PARAMETER;
10ce23: b8 ee ff ff ff mov $0xffffffee,%eax
10ce28: eb 31 jmp 10ce5b <_Scheduler_CBS_Create_server+0x8f>
*server_id = i;
_Scheduler_CBS_Server_list[*server_id] = (Scheduler_CBS_Server *)
_Workspace_Allocate( sizeof(Scheduler_CBS_Server) );
the_server = _Scheduler_CBS_Server_list[*server_id];
if ( !the_server )
return SCHEDULER_CBS_ERROR_NO_MEMORY;
10ce2a: b8 ef ff ff ff mov $0xffffffef,%eax <== NOT EXECUTED
10ce2f: eb 2a jmp 10ce5b <_Scheduler_CBS_Create_server+0x8f><== NOT EXECUTED
}
if ( i == _Scheduler_CBS_Maximum_servers )
return SCHEDULER_CBS_ERROR_FULL;
*server_id = i;
10ce31: 89 06 mov %eax,(%esi)
_Scheduler_CBS_Server_list[*server_id] = (Scheduler_CBS_Server *)
10ce33: 8b 15 ac 19 13 00 mov 0x1319ac,%edx
10ce39: 8d 3c 82 lea (%edx,%eax,4),%edi
_Workspace_Allocate( sizeof(Scheduler_CBS_Server) );
10ce3c: 83 ec 0c sub $0xc,%esp
10ce3f: 6a 10 push $0x10
10ce41: e8 c2 18 00 00 call 10e708 <_Workspace_Allocate>
if ( i == _Scheduler_CBS_Maximum_servers )
return SCHEDULER_CBS_ERROR_FULL;
*server_id = i;
_Scheduler_CBS_Server_list[*server_id] = (Scheduler_CBS_Server *)
10ce46: 89 07 mov %eax,(%edi)
_Workspace_Allocate( sizeof(Scheduler_CBS_Server) );
the_server = _Scheduler_CBS_Server_list[*server_id];
10ce48: 8b 16 mov (%esi),%edx
10ce4a: a1 ac 19 13 00 mov 0x1319ac,%eax
10ce4f: 8b 0c 90 mov (%eax,%edx,4),%ecx
if ( !the_server )
10ce52: 83 c4 10 add $0x10,%esp
10ce55: 85 c9 test %ecx,%ecx
10ce57: 75 af jne 10ce08 <_Scheduler_CBS_Create_server+0x3c><== ALWAYS TAKEN
10ce59: eb cf jmp 10ce2a <_Scheduler_CBS_Create_server+0x5e><== NOT EXECUTED
the_server->parameters = *params;
the_server->task_id = -1;
the_server->cbs_budget_overrun = budget_overrun_callback;
return SCHEDULER_CBS_OK;
}
10ce5b: 8d 65 f4 lea -0xc(%ebp),%esp
10ce5e: 5b pop %ebx
10ce5f: 5e pop %esi
10ce60: 5f pop %edi
10ce61: 5d pop %ebp
10ce62: c3 ret
0010ced4 <_Scheduler_CBS_Detach_thread>:
int _Scheduler_CBS_Detach_thread (
Scheduler_CBS_Server_id server_id,
rtems_id task_id
)
{
10ced4: 55 push %ebp
10ced5: 89 e5 mov %esp,%ebp
10ced7: 57 push %edi
10ced8: 56 push %esi
10ced9: 53 push %ebx
10ceda: 83 ec 24 sub $0x24,%esp
10cedd: 8b 7d 08 mov 0x8(%ebp),%edi
10cee0: 8b 75 0c mov 0xc(%ebp),%esi
Objects_Locations location;
Thread_Control *the_thread;
Scheduler_CBS_Per_thread *sched_info;
the_thread = _Thread_Get(task_id, &location);
10cee3: 8d 45 e4 lea -0x1c(%ebp),%eax
10cee6: 50 push %eax
10cee7: 56 push %esi
10cee8: e8 03 0b 00 00 call 10d9f0 <_Thread_Get>
10ceed: 89 c3 mov %eax,%ebx
/* The routine _Thread_Get may disable dispatch and not enable again. */
if ( the_thread ) {
10ceef: 83 c4 10 add $0x10,%esp
10cef2: 85 c0 test %eax,%eax
10cef4: 74 05 je 10cefb <_Scheduler_CBS_Detach_thread+0x27>
_Thread_Enable_dispatch();
10cef6: e8 d5 0a 00 00 call 10d9d0 <_Thread_Enable_dispatch>
}
if ( server_id >= _Scheduler_CBS_Maximum_servers )
10cefb: 3b 3d 6c d2 12 00 cmp 0x12d26c,%edi
10cf01: 73 4d jae 10cf50 <_Scheduler_CBS_Detach_thread+0x7c>
return SCHEDULER_CBS_ERROR_INVALID_PARAMETER;
if ( !the_thread )
10cf03: 85 db test %ebx,%ebx
10cf05: 74 49 je 10cf50 <_Scheduler_CBS_Detach_thread+0x7c>
return SCHEDULER_CBS_ERROR_INVALID_PARAMETER;
/* Server is not valid. */
if ( !_Scheduler_CBS_Server_list[server_id] )
10cf07: a1 ac 19 13 00 mov 0x1319ac,%eax
10cf0c: 8b 04 b8 mov (%eax,%edi,4),%eax
10cf0f: 85 c0 test %eax,%eax
10cf11: 74 36 je 10cf49 <_Scheduler_CBS_Detach_thread+0x75>
return SCHEDULER_CBS_ERROR_NOSERVER;
/* Thread and server are not attached. */
if ( _Scheduler_CBS_Server_list[server_id]->task_id != task_id )
10cf13: 39 30 cmp %esi,(%eax)
10cf15: 75 39 jne 10cf50 <_Scheduler_CBS_Detach_thread+0x7c><== NEVER TAKEN
return SCHEDULER_CBS_ERROR_INVALID_PARAMETER;
_Scheduler_CBS_Server_list[server_id]->task_id = -1;
10cf17: c7 00 ff ff ff ff movl $0xffffffff,(%eax)
sched_info = (Scheduler_CBS_Per_thread *) the_thread->scheduler_info;
sched_info->cbs_server = NULL;
10cf1d: 8b 83 88 00 00 00 mov 0x88(%ebx),%eax
10cf23: c7 40 18 00 00 00 00 movl $0x0,0x18(%eax)
the_thread->budget_algorithm = the_thread->Start.budget_algorithm;
10cf2a: 8b 83 a0 00 00 00 mov 0xa0(%ebx),%eax
10cf30: 89 43 78 mov %eax,0x78(%ebx)
the_thread->budget_callout = the_thread->Start.budget_callout;
10cf33: 8b 83 a4 00 00 00 mov 0xa4(%ebx),%eax
10cf39: 89 43 7c mov %eax,0x7c(%ebx)
the_thread->is_preemptible = the_thread->Start.is_preemptible;
10cf3c: 8a 83 9c 00 00 00 mov 0x9c(%ebx),%al
10cf42: 88 43 70 mov %al,0x70(%ebx)
return SCHEDULER_CBS_OK;
10cf45: 31 c0 xor %eax,%eax
10cf47: eb 0c jmp 10cf55 <_Scheduler_CBS_Detach_thread+0x81>
return SCHEDULER_CBS_ERROR_INVALID_PARAMETER;
if ( !the_thread )
return SCHEDULER_CBS_ERROR_INVALID_PARAMETER;
/* Server is not valid. */
if ( !_Scheduler_CBS_Server_list[server_id] )
return SCHEDULER_CBS_ERROR_NOSERVER;
10cf49: b8 e7 ff ff ff mov $0xffffffe7,%eax
10cf4e: eb 05 jmp 10cf55 <_Scheduler_CBS_Detach_thread+0x81>
if ( the_thread ) {
_Thread_Enable_dispatch();
}
if ( server_id >= _Scheduler_CBS_Maximum_servers )
return SCHEDULER_CBS_ERROR_INVALID_PARAMETER;
10cf50: b8 ee ff ff ff mov $0xffffffee,%eax
the_thread->budget_algorithm = the_thread->Start.budget_algorithm;
the_thread->budget_callout = the_thread->Start.budget_callout;
the_thread->is_preemptible = the_thread->Start.is_preemptible;
return SCHEDULER_CBS_OK;
}
10cf55: 8d 65 f4 lea -0xc(%ebp),%esp
10cf58: 5b pop %ebx
10cf59: 5e pop %esi
10cf5a: 5f pop %edi
10cf5b: 5d pop %ebp
10cf5c: c3 ret
0010cf98 <_Scheduler_CBS_Get_execution_time>:
int _Scheduler_CBS_Get_execution_time (
Scheduler_CBS_Server_id server_id,
time_t *exec_time,
time_t *abs_time
)
{
10cf98: 55 push %ebp
10cf99: 89 e5 mov %esp,%ebp
10cf9b: 57 push %edi
10cf9c: 56 push %esi
10cf9d: 53 push %ebx
10cf9e: 83 ec 1c sub $0x1c,%esp
10cfa1: 8b 5d 08 mov 0x8(%ebp),%ebx
10cfa4: 8b 75 0c mov 0xc(%ebp),%esi
Objects_Locations location;
Thread_Control *the_thread;
if ( server_id >= _Scheduler_CBS_Maximum_servers )
10cfa7: 3b 1d 6c d2 12 00 cmp 0x12d26c,%ebx
10cfad: 73 58 jae 10d007 <_Scheduler_CBS_Get_execution_time+0x6f>
return SCHEDULER_CBS_ERROR_INVALID_PARAMETER;
if ( !_Scheduler_CBS_Server_list[server_id] )
10cfaf: a1 ac 19 13 00 mov 0x1319ac,%eax
10cfb4: 8b 04 98 mov (%eax,%ebx,4),%eax
10cfb7: 85 c0 test %eax,%eax
10cfb9: 74 53 je 10d00e <_Scheduler_CBS_Get_execution_time+0x76>
return SCHEDULER_CBS_ERROR_NOSERVER;
if ( _Scheduler_CBS_Server_list[server_id]->task_id == -1 ) {
10cfbb: 8b 00 mov (%eax),%eax
10cfbd: 83 f8 ff cmp $0xffffffff,%eax
10cfc0: 75 08 jne 10cfca <_Scheduler_CBS_Get_execution_time+0x32>
*exec_time = 0;
10cfc2: c7 06 00 00 00 00 movl $0x0,(%esi)
10cfc8: eb 39 jmp 10d003 <_Scheduler_CBS_Get_execution_time+0x6b>
return SCHEDULER_CBS_OK;
}
the_thread = _Thread_Get(
10cfca: 52 push %edx
10cfcb: 52 push %edx
10cfcc: 8d 55 e4 lea -0x1c(%ebp),%edx
10cfcf: 52 push %edx
10cfd0: 50 push %eax
10cfd1: e8 1a 0a 00 00 call 10d9f0 <_Thread_Get>
10cfd6: 89 c7 mov %eax,%edi
_Scheduler_CBS_Server_list[server_id]->task_id,
&location
);
/* The routine _Thread_Get may disable dispatch and not enable again. */
if ( the_thread ) {
10cfd8: 83 c4 10 add $0x10,%esp
10cfdb: 85 c0 test %eax,%eax
10cfdd: 74 17 je 10cff6 <_Scheduler_CBS_Get_execution_time+0x5e><== NEVER TAKEN
_Thread_Enable_dispatch();
10cfdf: e8 ec 09 00 00 call 10d9d0 <_Thread_Enable_dispatch>
*exec_time = _Scheduler_CBS_Server_list[server_id]->parameters.budget -
10cfe4: a1 ac 19 13 00 mov 0x1319ac,%eax
10cfe9: 8b 04 98 mov (%eax,%ebx,4),%eax
10cfec: 8b 50 08 mov 0x8(%eax),%edx
10cfef: 2b 57 74 sub 0x74(%edi),%edx
10cff2: 89 16 mov %edx,(%esi)
10cff4: eb 0d jmp 10d003 <_Scheduler_CBS_Get_execution_time+0x6b>
the_thread->cpu_time_budget;
}
else {
*exec_time = _Scheduler_CBS_Server_list[server_id]->parameters.budget;
10cff6: a1 ac 19 13 00 mov 0x1319ac,%eax <== NOT EXECUTED
10cffb: 8b 04 98 mov (%eax,%ebx,4),%eax <== NOT EXECUTED
10cffe: 8b 40 08 mov 0x8(%eax),%eax <== NOT EXECUTED
10d001: 89 06 mov %eax,(%esi) <== NOT EXECUTED
}
return SCHEDULER_CBS_OK;
10d003: 31 c0 xor %eax,%eax
10d005: eb 0c jmp 10d013 <_Scheduler_CBS_Get_execution_time+0x7b>
{
Objects_Locations location;
Thread_Control *the_thread;
if ( server_id >= _Scheduler_CBS_Maximum_servers )
return SCHEDULER_CBS_ERROR_INVALID_PARAMETER;
10d007: b8 ee ff ff ff mov $0xffffffee,%eax
10d00c: eb 05 jmp 10d013 <_Scheduler_CBS_Get_execution_time+0x7b>
if ( !_Scheduler_CBS_Server_list[server_id] )
return SCHEDULER_CBS_ERROR_NOSERVER;
10d00e: b8 e7 ff ff ff mov $0xffffffe7,%eax
}
else {
*exec_time = _Scheduler_CBS_Server_list[server_id]->parameters.budget;
}
return SCHEDULER_CBS_OK;
}
10d013: 8d 65 f4 lea -0xc(%ebp),%esp
10d016: 5b pop %ebx
10d017: 5e pop %esi
10d018: 5f pop %edi
10d019: 5d pop %ebp
10d01a: c3 ret
0010d058 <_Scheduler_CBS_Get_remaining_budget>:
int _Scheduler_CBS_Get_remaining_budget (
Scheduler_CBS_Server_id server_id,
time_t *remaining_budget
)
{
10d058: 55 push %ebp
10d059: 89 e5 mov %esp,%ebp
10d05b: 56 push %esi
10d05c: 53 push %ebx
10d05d: 83 ec 10 sub $0x10,%esp
10d060: 8b 45 08 mov 0x8(%ebp),%eax
10d063: 8b 5d 0c mov 0xc(%ebp),%ebx
Objects_Locations location;
Thread_Control *the_thread;
if ( server_id >= _Scheduler_CBS_Maximum_servers )
10d066: 3b 05 6c d2 12 00 cmp 0x12d26c,%eax
10d06c: 73 44 jae 10d0b2 <_Scheduler_CBS_Get_remaining_budget+0x5a>
return SCHEDULER_CBS_ERROR_INVALID_PARAMETER;
if ( !_Scheduler_CBS_Server_list[server_id] )
10d06e: 8b 15 ac 19 13 00 mov 0x1319ac,%edx
10d074: 8b 04 82 mov (%edx,%eax,4),%eax
10d077: 85 c0 test %eax,%eax
10d079: 74 3e je 10d0b9 <_Scheduler_CBS_Get_remaining_budget+0x61>
return SCHEDULER_CBS_ERROR_NOSERVER;
if ( _Scheduler_CBS_Server_list[server_id]->task_id == -1 ) {
10d07b: 8b 10 mov (%eax),%edx
10d07d: 83 fa ff cmp $0xffffffff,%edx
10d080: 75 05 jne 10d087 <_Scheduler_CBS_Get_remaining_budget+0x2f>
*remaining_budget = _Scheduler_CBS_Server_list[server_id]->parameters.budget;
10d082: 8b 40 08 mov 0x8(%eax),%eax
10d085: eb 1d jmp 10d0a4 <_Scheduler_CBS_Get_remaining_budget+0x4c>
return SCHEDULER_CBS_OK;
}
the_thread = _Thread_Get(
10d087: 50 push %eax
10d088: 50 push %eax
10d089: 8d 45 f4 lea -0xc(%ebp),%eax
10d08c: 50 push %eax
10d08d: 52 push %edx
10d08e: e8 5d 09 00 00 call 10d9f0 <_Thread_Get>
10d093: 89 c6 mov %eax,%esi
_Scheduler_CBS_Server_list[server_id]->task_id,
&location
);
/* The routine _Thread_Get may disable dispatch and not enable again. */
if ( the_thread ) {
10d095: 83 c4 10 add $0x10,%esp
10d098: 85 c0 test %eax,%eax
10d09a: 74 0c je 10d0a8 <_Scheduler_CBS_Get_remaining_budget+0x50><== NEVER TAKEN
_Thread_Enable_dispatch();
10d09c: e8 2f 09 00 00 call 10d9d0 <_Thread_Enable_dispatch>
*remaining_budget = the_thread->cpu_time_budget;
10d0a1: 8b 46 74 mov 0x74(%esi),%eax
10d0a4: 89 03 mov %eax,(%ebx)
10d0a6: eb 06 jmp 10d0ae <_Scheduler_CBS_Get_remaining_budget+0x56>
}
else {
*remaining_budget = 0;
10d0a8: c7 03 00 00 00 00 movl $0x0,(%ebx) <== NOT EXECUTED
}
return SCHEDULER_CBS_OK;
10d0ae: 31 c0 xor %eax,%eax
10d0b0: eb 0c jmp 10d0be <_Scheduler_CBS_Get_remaining_budget+0x66>
{
Objects_Locations location;
Thread_Control *the_thread;
if ( server_id >= _Scheduler_CBS_Maximum_servers )
return SCHEDULER_CBS_ERROR_INVALID_PARAMETER;
10d0b2: b8 ee ff ff ff mov $0xffffffee,%eax
10d0b7: eb 05 jmp 10d0be <_Scheduler_CBS_Get_remaining_budget+0x66>
if ( !_Scheduler_CBS_Server_list[server_id] )
return SCHEDULER_CBS_ERROR_NOSERVER;
10d0b9: b8 e7 ff ff ff mov $0xffffffe7,%eax
else {
*remaining_budget = 0;
}
return SCHEDULER_CBS_OK;
}
10d0be: 8d 65 f8 lea -0x8(%ebp),%esp
10d0c1: 5b pop %ebx
10d0c2: 5e pop %esi
10d0c3: 5d pop %ebp
10d0c4: c3 ret
0010d15c <_Scheduler_CBS_Initialize>:
int _Scheduler_CBS_Initialize(void)
{
10d15c: 55 push %ebp
10d15d: 89 e5 mov %esp,%ebp
10d15f: 83 ec 14 sub $0x14,%esp
unsigned int i;
_Scheduler_CBS_Server_list = (Scheduler_CBS_Server **) _Workspace_Allocate(
10d162: a1 6c d2 12 00 mov 0x12d26c,%eax
10d167: c1 e0 02 shl $0x2,%eax
10d16a: 50 push %eax
10d16b: e8 98 15 00 00 call 10e708 <_Workspace_Allocate>
10d170: a3 ac 19 13 00 mov %eax,0x1319ac
_Scheduler_CBS_Maximum_servers * sizeof(Scheduler_CBS_Server*) );
if ( !_Scheduler_CBS_Server_list )
10d175: 83 c4 10 add $0x10,%esp
10d178: 85 c0 test %eax,%eax
10d17a: 74 20 je 10d19c <_Scheduler_CBS_Initialize+0x40><== NEVER TAKEN
return SCHEDULER_CBS_ERROR_NO_MEMORY;
for (i = 0; i<_Scheduler_CBS_Maximum_servers; i++) {
10d17c: 8b 15 6c d2 12 00 mov 0x12d26c,%edx
10d182: 31 c0 xor %eax,%eax
10d184: eb 0e jmp 10d194 <_Scheduler_CBS_Initialize+0x38>
_Scheduler_CBS_Server_list[i] = NULL;
10d186: 8b 0d ac 19 13 00 mov 0x1319ac,%ecx
10d18c: c7 04 81 00 00 00 00 movl $0x0,(%ecx,%eax,4)
unsigned int i;
_Scheduler_CBS_Server_list = (Scheduler_CBS_Server **) _Workspace_Allocate(
_Scheduler_CBS_Maximum_servers * sizeof(Scheduler_CBS_Server*) );
if ( !_Scheduler_CBS_Server_list )
return SCHEDULER_CBS_ERROR_NO_MEMORY;
for (i = 0; i<_Scheduler_CBS_Maximum_servers; i++) {
10d193: 40 inc %eax
10d194: 39 d0 cmp %edx,%eax
10d196: 75 ee jne 10d186 <_Scheduler_CBS_Initialize+0x2a>
_Scheduler_CBS_Server_list[i] = NULL;
}
return SCHEDULER_CBS_OK;
10d198: 31 c0 xor %eax,%eax
10d19a: eb 05 jmp 10d1a1 <_Scheduler_CBS_Initialize+0x45>
{
unsigned int i;
_Scheduler_CBS_Server_list = (Scheduler_CBS_Server **) _Workspace_Allocate(
_Scheduler_CBS_Maximum_servers * sizeof(Scheduler_CBS_Server*) );
if ( !_Scheduler_CBS_Server_list )
return SCHEDULER_CBS_ERROR_NO_MEMORY;
10d19c: b8 ef ff ff ff mov $0xffffffef,%eax <== NOT EXECUTED
for (i = 0; i<_Scheduler_CBS_Maximum_servers; i++) {
_Scheduler_CBS_Server_list[i] = NULL;
}
return SCHEDULER_CBS_OK;
}
10d1a1: c9 leave
10d1a2: c3 ret
0010bd0c <_Scheduler_CBS_Release_job>:
void _Scheduler_CBS_Release_job(
Thread_Control *the_thread,
uint32_t deadline
)
{
10bd0c: 55 push %ebp
10bd0d: 89 e5 mov %esp,%ebp
10bd0f: 83 ec 08 sub $0x8,%esp
10bd12: 8b 55 08 mov 0x8(%ebp),%edx
10bd15: 8b 45 0c mov 0xc(%ebp),%eax
Priority_Control new_priority;
Scheduler_CBS_Per_thread *sched_info =
(Scheduler_CBS_Per_thread *) the_thread->scheduler_info;
Scheduler_CBS_Server *serv_info =
(Scheduler_CBS_Server *) sched_info->cbs_server;
10bd18: 8b 8a 88 00 00 00 mov 0x88(%edx),%ecx
)
{
Priority_Control new_priority;
Scheduler_CBS_Per_thread *sched_info =
(Scheduler_CBS_Per_thread *) the_thread->scheduler_info;
Scheduler_CBS_Server *serv_info =
10bd1e: 8b 49 18 mov 0x18(%ecx),%ecx
(Scheduler_CBS_Server *) sched_info->cbs_server;
if (deadline) {
10bd21: 85 c0 test %eax,%eax
10bd23: 74 22 je 10bd47 <_Scheduler_CBS_Release_job+0x3b>
/* Initializing or shifting deadline. */
if (serv_info)
10bd25: 85 c9 test %ecx,%ecx
10bd27: 74 0f je 10bd38 <_Scheduler_CBS_Release_job+0x2c>
new_priority = (_Watchdog_Ticks_since_boot + serv_info->parameters.deadline)
10bd29: a1 40 f5 12 00 mov 0x12f540,%eax
10bd2e: 03 41 04 add 0x4(%ecx),%eax
10bd31: 25 ff ff ff 7f and $0x7fffffff,%eax
10bd36: eb 19 jmp 10bd51 <_Scheduler_CBS_Release_job+0x45>
& ~SCHEDULER_EDF_PRIO_MSB;
else
new_priority = (_Watchdog_Ticks_since_boot + deadline)
10bd38: 8b 0d 40 f5 12 00 mov 0x12f540,%ecx
10bd3e: 01 c8 add %ecx,%eax
10bd40: 25 ff ff ff 7f and $0x7fffffff,%eax
10bd45: eb 10 jmp 10bd57 <_Scheduler_CBS_Release_job+0x4b>
& ~SCHEDULER_EDF_PRIO_MSB;
}
else {
/* Switch back to background priority. */
new_priority = the_thread->Start.initial_priority;
10bd47: 8b 82 ac 00 00 00 mov 0xac(%edx),%eax
}
/* Budget replenishment for the next job. */
if (serv_info)
10bd4d: 85 c9 test %ecx,%ecx
10bd4f: 74 06 je 10bd57 <_Scheduler_CBS_Release_job+0x4b><== NEVER TAKEN
the_thread->cpu_time_budget = serv_info->parameters.budget;
10bd51: 8b 49 08 mov 0x8(%ecx),%ecx
10bd54: 89 4a 74 mov %ecx,0x74(%edx)
the_thread->real_priority = new_priority;
10bd57: 89 42 18 mov %eax,0x18(%edx)
_Thread_Change_priority(the_thread, new_priority, true);
10bd5a: 51 push %ecx
10bd5b: 6a 01 push $0x1
10bd5d: 50 push %eax
10bd5e: 52 push %edx
10bd5f: e8 9c 03 00 00 call 10c100 <_Thread_Change_priority>
10bd64: 83 c4 10 add $0x10,%esp
}
10bd67: c9 leave
10bd68: c3 ret
0010bd6c <_Scheduler_CBS_Unblock>:
#include <rtems/score/schedulercbs.h>
void _Scheduler_CBS_Unblock(
Thread_Control *the_thread
)
{
10bd6c: 55 push %ebp
10bd6d: 89 e5 mov %esp,%ebp
10bd6f: 56 push %esi
10bd70: 53 push %ebx
10bd71: 8b 5d 08 mov 0x8(%ebp),%ebx
Scheduler_CBS_Per_thread *sched_info;
Scheduler_CBS_Server *serv_info;
Priority_Control new_priority;
_Scheduler_EDF_Enqueue(the_thread);
10bd74: 83 ec 0c sub $0xc,%esp
10bd77: 53 push %ebx
10bd78: e8 cf 00 00 00 call 10be4c <_Scheduler_EDF_Enqueue>
/* TODO: flash critical section? */
sched_info = (Scheduler_CBS_Per_thread *) the_thread->scheduler_info;
serv_info = (Scheduler_CBS_Server *) sched_info->cbs_server;
10bd7d: 8b 83 88 00 00 00 mov 0x88(%ebx),%eax
10bd83: 8b 40 18 mov 0x18(%eax),%eax
* Late unblock rule for deadline-driven tasks. The remaining time to
* deadline must be sufficient to serve the remaining computation time
* without increased utilization of this task. It might cause a deadline
* miss of another task.
*/
if (serv_info) {
10bd86: 83 c4 10 add $0x10,%esp
10bd89: 85 c0 test %eax,%eax
10bd8b: 74 3d je 10bdca <_Scheduler_CBS_Unblock+0x5e>
time_t deadline = serv_info->parameters.deadline;
time_t budget = serv_info->parameters.budget;
time_t deadline_left = the_thread->cpu_time_budget;
time_t budget_left = the_thread->real_priority -
10bd8d: 8b 4b 18 mov 0x18(%ebx),%ecx
10bd90: 8b 15 40 f5 12 00 mov 0x12f540,%edx
10bd96: 89 ce mov %ecx,%esi
10bd98: 29 d6 sub %edx,%esi
_Watchdog_Ticks_since_boot;
if ( deadline*budget_left > budget*deadline_left ) {
10bd9a: 8b 50 04 mov 0x4(%eax),%edx
10bd9d: 0f af d6 imul %esi,%edx
10bda0: 8b 40 08 mov 0x8(%eax),%eax
10bda3: 0f af 43 74 imul 0x74(%ebx),%eax
10bda7: 39 c2 cmp %eax,%edx
10bda9: 7e 1f jle 10bdca <_Scheduler_CBS_Unblock+0x5e>
/* Put late unblocked task to background until the end of period. */
new_priority = the_thread->Start.initial_priority;
10bdab: 8b 83 ac 00 00 00 mov 0xac(%ebx),%eax
if ( the_thread->real_priority != new_priority )
10bdb1: 39 c1 cmp %eax,%ecx
10bdb3: 74 03 je 10bdb8 <_Scheduler_CBS_Unblock+0x4c>
the_thread->real_priority = new_priority;
10bdb5: 89 43 18 mov %eax,0x18(%ebx)
if ( the_thread->current_priority != new_priority )
10bdb8: 39 43 14 cmp %eax,0x14(%ebx)
10bdbb: 74 0d je 10bdca <_Scheduler_CBS_Unblock+0x5e>
_Thread_Change_priority(the_thread, new_priority, true);
10bdbd: 52 push %edx
10bdbe: 6a 01 push $0x1
10bdc0: 50 push %eax
10bdc1: 53 push %ebx
10bdc2: e8 39 03 00 00 call 10c100 <_Thread_Change_priority>
10bdc7: 83 c4 10 add $0x10,%esp
10bdca: 50 push %eax
10bdcb: 50 push %eax
* a context switch.
* Pseudo-ISR case:
* Even if the thread isn't preemptible, if the new heir is
* a pseudo-ISR system task, we need to do a context switch.
*/
if ( _Scheduler_Is_priority_higher_than( the_thread->current_priority,
10bdcc: a1 58 f9 12 00 mov 0x12f958,%eax
10bdd1: ff 70 14 pushl 0x14(%eax)
10bdd4: ff 73 14 pushl 0x14(%ebx)
10bdd7: ff 15 60 b2 12 00 call *0x12b260
10bddd: 83 c4 10 add $0x10,%esp
10bde0: 85 c0 test %eax,%eax
10bde2: 7e 1e jle 10be02 <_Scheduler_CBS_Unblock+0x96>
_Thread_Heir->current_priority)) {
_Thread_Heir = the_thread;
10bde4: 89 1d 58 f9 12 00 mov %ebx,0x12f958
if ( _Thread_Executing->is_preemptible ||
10bdea: a1 54 f9 12 00 mov 0x12f954,%eax
10bdef: 80 78 70 00 cmpb $0x0,0x70(%eax)
10bdf3: 75 06 jne 10bdfb <_Scheduler_CBS_Unblock+0x8f>
10bdf5: 83 7b 14 00 cmpl $0x0,0x14(%ebx)
10bdf9: 75 07 jne 10be02 <_Scheduler_CBS_Unblock+0x96><== ALWAYS TAKEN
the_thread->current_priority == 0 )
_Thread_Dispatch_necessary = true;
10bdfb: c6 05 60 f9 12 00 01 movb $0x1,0x12f960
}
}
10be02: 8d 65 f8 lea -0x8(%ebp),%esp
10be05: 5b pop %ebx
10be06: 5e pop %esi
10be07: 5d pop %ebp
10be08: c3 ret
0010bcd8 <_Scheduler_EDF_Allocate>:
#include <rtems/score/wkspace.h>
void *_Scheduler_EDF_Allocate(
Thread_Control *the_thread
)
{
10bcd8: 55 push %ebp
10bcd9: 89 e5 mov %esp,%ebp
10bcdb: 53 push %ebx
10bcdc: 83 ec 10 sub $0x10,%esp
10bcdf: 8b 5d 08 mov 0x8(%ebp),%ebx
void *sched;
Scheduler_EDF_Per_thread *schinfo;
sched = _Workspace_Allocate( sizeof(Scheduler_EDF_Per_thread) );
10bce2: 6a 18 push $0x18
10bce4: e8 27 15 00 00 call 10d210 <_Workspace_Allocate>
if ( sched ) {
10bce9: 83 c4 10 add $0x10,%esp
10bcec: 85 c0 test %eax,%eax
10bcee: 74 0f je 10bcff <_Scheduler_EDF_Allocate+0x27><== NEVER TAKEN
the_thread->scheduler_info = sched;
10bcf0: 89 83 88 00 00 00 mov %eax,0x88(%ebx)
schinfo = (Scheduler_EDF_Per_thread *)(the_thread->scheduler_info);
schinfo->thread = the_thread;
10bcf6: 89 18 mov %ebx,(%eax)
schinfo->queue_state = SCHEDULER_EDF_QUEUE_STATE_NEVER_HAS_BEEN;
10bcf8: c7 40 14 02 00 00 00 movl $0x2,0x14(%eax)
}
return sched;
}
10bcff: 8b 5d fc mov -0x4(%ebp),%ebx
10bd02: c9 leave
10bd03: c3 ret
0010bea0 <_Scheduler_EDF_Unblock>:
#include <rtems/score/scheduleredf.h>
void _Scheduler_EDF_Unblock(
Thread_Control *the_thread
)
{
10bea0: 55 push %ebp
10bea1: 89 e5 mov %esp,%ebp
10bea3: 53 push %ebx
10bea4: 83 ec 10 sub $0x10,%esp
10bea7: 8b 5d 08 mov 0x8(%ebp),%ebx
_Scheduler_EDF_Enqueue(the_thread);
10beaa: 53 push %ebx
10beab: e8 94 fe ff ff call 10bd44 <_Scheduler_EDF_Enqueue>
10beb0: 58 pop %eax
10beb1: 5a pop %edx
10beb2: ff 73 14 pushl 0x14(%ebx)
* a context switch.
* Pseudo-ISR case:
* Even if the thread isn't preemptible, if the new heir is
* a pseudo-ISR system task, we need to do a context switch.
*/
if ( _Scheduler_Is_priority_lower_than(
10beb5: a1 58 f9 12 00 mov 0x12f958,%eax
10beba: ff 70 14 pushl 0x14(%eax)
10bebd: ff 15 60 b2 12 00 call *0x12b260
10bec3: 83 c4 10 add $0x10,%esp
10bec6: 85 c0 test %eax,%eax
10bec8: 79 1e jns 10bee8 <_Scheduler_EDF_Unblock+0x48>
_Thread_Heir->current_priority,
the_thread->current_priority )) {
_Thread_Heir = the_thread;
10beca: 89 1d 58 f9 12 00 mov %ebx,0x12f958
if ( _Thread_Executing->is_preemptible ||
10bed0: a1 54 f9 12 00 mov 0x12f954,%eax
10bed5: 80 78 70 00 cmpb $0x0,0x70(%eax)
10bed9: 75 06 jne 10bee1 <_Scheduler_EDF_Unblock+0x41>
10bedb: 83 7b 14 00 cmpl $0x0,0x14(%ebx)
10bedf: 75 07 jne 10bee8 <_Scheduler_EDF_Unblock+0x48><== ALWAYS TAKEN
the_thread->current_priority == 0 )
_Thread_Dispatch_necessary = true;
10bee1: c6 05 60 f9 12 00 01 movb $0x1,0x12f960
}
}
10bee8: 8b 5d fc mov -0x4(%ebp),%ebx
10beeb: c9 leave
10beec: c3 ret
0010b854 <_Scheduler_priority_Tick>:
#include <rtems/system.h>
#include <rtems/score/schedulerpriority.h>
void _Scheduler_priority_Tick( void )
{
10b854: 55 push %ebp
10b855: 89 e5 mov %esp,%ebp
10b857: 53 push %ebx
10b858: 50 push %eax
Thread_Control *executing;
executing = _Thread_Executing;
10b859: 8b 1d ec e8 12 00 mov 0x12e8ec,%ebx
/*
* If the thread is not preemptible or is not ready, then
* just return.
*/
if ( !executing->is_preemptible )
10b85f: 80 7b 70 00 cmpb $0x0,0x70(%ebx)
10b863: 74 44 je 10b8a9 <_Scheduler_priority_Tick+0x55>
return;
if ( !_States_Is_ready( executing->current_state ) )
10b865: 83 7b 10 00 cmpl $0x0,0x10(%ebx)
10b869: 75 3e jne 10b8a9 <_Scheduler_priority_Tick+0x55>
/*
* The cpu budget algorithm determines what happens next.
*/
switch ( executing->budget_algorithm ) {
10b86b: 8b 43 78 mov 0x78(%ebx),%eax
10b86e: 83 f8 01 cmp $0x1,%eax
10b871: 72 36 jb 10b8a9 <_Scheduler_priority_Tick+0x55>
10b873: 83 f8 02 cmp $0x2,%eax
10b876: 76 07 jbe 10b87f <_Scheduler_priority_Tick+0x2b>
10b878: 83 f8 03 cmp $0x3,%eax
10b87b: 75 2c jne 10b8a9 <_Scheduler_priority_Tick+0x55><== NEVER TAKEN
10b87d: eb 1b jmp 10b89a <_Scheduler_priority_Tick+0x46>
case THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE:
#if defined(RTEMS_SCORE_THREAD_ENABLE_EXHAUST_TIMESLICE)
case THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE:
#endif
if ( (int)(--executing->cpu_time_budget) <= 0 ) {
10b87f: 8b 43 74 mov 0x74(%ebx),%eax
10b882: 48 dec %eax
10b883: 89 43 74 mov %eax,0x74(%ebx)
10b886: 85 c0 test %eax,%eax
10b888: 7f 1f jg 10b8a9 <_Scheduler_priority_Tick+0x55>
* always operates on the scheduler that 'owns' the currently executing
* thread.
*/
RTEMS_INLINE_ROUTINE void _Scheduler_Yield( void )
{
_Scheduler.Operations.yield();
10b88a: ff 15 3c a2 12 00 call *0x12a23c
* executing thread's timeslice is reset. Otherwise, the
* currently executing thread is placed at the rear of the
* FIFO for this priority and a new heir is selected.
*/
_Scheduler_Yield();
executing->cpu_time_budget = _Thread_Ticks_per_timeslice;
10b890: a1 b8 e3 12 00 mov 0x12e3b8,%eax
10b895: 89 43 74 mov %eax,0x74(%ebx)
10b898: eb 0f jmp 10b8a9 <_Scheduler_priority_Tick+0x55>
}
break;
#if defined(RTEMS_SCORE_THREAD_ENABLE_SCHEDULER_CALLOUT)
case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT:
if ( --executing->cpu_time_budget == 0 )
10b89a: ff 4b 74 decl 0x74(%ebx)
10b89d: 75 0a jne 10b8a9 <_Scheduler_priority_Tick+0x55>
(*executing->budget_callout)( executing );
10b89f: 83 ec 0c sub $0xc,%esp
10b8a2: 53 push %ebx
10b8a3: ff 53 7c call *0x7c(%ebx)
10b8a6: 83 c4 10 add $0x10,%esp
break;
#endif
}
}
10b8a9: 8b 5d fc mov -0x4(%ebp),%ebx
10b8ac: c9 leave
10b8ad: c3 ret
0010a6b8 <_TOD_Validate>:
*/
bool _TOD_Validate(
const rtems_time_of_day *the_tod
)
{
10a6b8: 55 push %ebp
10a6b9: 89 e5 mov %esp,%ebp
10a6bb: 53 push %ebx
10a6bc: 8b 4d 08 mov 0x8(%ebp),%ecx
uint32_t days_in_month;
uint32_t ticks_per_second;
ticks_per_second = TOD_MICROSECONDS_PER_SECOND /
10a6bf: b8 40 42 0f 00 mov $0xf4240,%eax
10a6c4: 31 d2 xor %edx,%edx
10a6c6: f7 35 0c c8 12 00 divl 0x12c80c
(the_tod->hour >= TOD_HOURS_PER_DAY) ||
(the_tod->month == 0) ||
(the_tod->month > TOD_MONTHS_PER_YEAR) ||
(the_tod->year < TOD_BASE_YEAR) ||
(the_tod->day == 0) )
return false;
10a6cc: 31 db xor %ebx,%ebx
uint32_t days_in_month;
uint32_t ticks_per_second;
ticks_per_second = TOD_MICROSECONDS_PER_SECOND /
rtems_configuration_get_microseconds_per_tick();
if ((!the_tod) ||
10a6ce: 85 c9 test %ecx,%ecx
10a6d0: 74 4c je 10a71e <_TOD_Validate+0x66> <== NEVER TAKEN
10a6d2: 39 41 18 cmp %eax,0x18(%ecx)
10a6d5: 73 47 jae 10a71e <_TOD_Validate+0x66>
(the_tod->ticks >= ticks_per_second) ||
10a6d7: 83 79 14 3b cmpl $0x3b,0x14(%ecx)
10a6db: 77 41 ja 10a71e <_TOD_Validate+0x66>
(the_tod->second >= TOD_SECONDS_PER_MINUTE) ||
10a6dd: 83 79 10 3b cmpl $0x3b,0x10(%ecx)
10a6e1: 77 3b ja 10a71e <_TOD_Validate+0x66>
(the_tod->minute >= TOD_MINUTES_PER_HOUR) ||
10a6e3: 83 79 0c 17 cmpl $0x17,0xc(%ecx)
10a6e7: 77 35 ja 10a71e <_TOD_Validate+0x66>
(the_tod->hour >= TOD_HOURS_PER_DAY) ||
(the_tod->month == 0) ||
10a6e9: 8b 51 04 mov 0x4(%ecx),%edx
rtems_configuration_get_microseconds_per_tick();
if ((!the_tod) ||
(the_tod->ticks >= ticks_per_second) ||
(the_tod->second >= TOD_SECONDS_PER_MINUTE) ||
(the_tod->minute >= TOD_MINUTES_PER_HOUR) ||
(the_tod->hour >= TOD_HOURS_PER_DAY) ||
10a6ec: 85 d2 test %edx,%edx
10a6ee: 74 2e je 10a71e <_TOD_Validate+0x66> <== NEVER TAKEN
(the_tod->month == 0) ||
10a6f0: 83 fa 0c cmp $0xc,%edx
10a6f3: 77 29 ja 10a71e <_TOD_Validate+0x66>
(the_tod->month > TOD_MONTHS_PER_YEAR) ||
(the_tod->year < TOD_BASE_YEAR) ||
10a6f5: 8b 01 mov (%ecx),%eax
(the_tod->ticks >= ticks_per_second) ||
(the_tod->second >= TOD_SECONDS_PER_MINUTE) ||
(the_tod->minute >= TOD_MINUTES_PER_HOUR) ||
(the_tod->hour >= TOD_HOURS_PER_DAY) ||
(the_tod->month == 0) ||
(the_tod->month > TOD_MONTHS_PER_YEAR) ||
10a6f7: 3d c3 07 00 00 cmp $0x7c3,%eax
10a6fc: 76 20 jbe 10a71e <_TOD_Validate+0x66>
(the_tod->year < TOD_BASE_YEAR) ||
(the_tod->day == 0) )
10a6fe: 8b 49 08 mov 0x8(%ecx),%ecx
(the_tod->second >= TOD_SECONDS_PER_MINUTE) ||
(the_tod->minute >= TOD_MINUTES_PER_HOUR) ||
(the_tod->hour >= TOD_HOURS_PER_DAY) ||
(the_tod->month == 0) ||
(the_tod->month > TOD_MONTHS_PER_YEAR) ||
(the_tod->year < TOD_BASE_YEAR) ||
10a701: 85 c9 test %ecx,%ecx
10a703: 74 19 je 10a71e <_TOD_Validate+0x66> <== NEVER TAKEN
(the_tod->day == 0) )
return false;
if ( (the_tod->year % 4) == 0 )
10a705: a8 03 test $0x3,%al
10a707: 75 09 jne 10a712 <_TOD_Validate+0x5a>
days_in_month = _TOD_Days_per_month[ 1 ][ the_tod->month ];
10a709: 8b 04 95 b8 18 12 00 mov 0x1218b8(,%edx,4),%eax
10a710: eb 07 jmp 10a719 <_TOD_Validate+0x61>
else
days_in_month = _TOD_Days_per_month[ 0 ][ the_tod->month ];
10a712: 8b 04 95 84 18 12 00 mov 0x121884(,%edx,4),%eax
if ( the_tod->day > days_in_month )
10a719: 39 c1 cmp %eax,%ecx
10a71b: 0f 96 c3 setbe %bl
return false;
return true;
}
10a71e: 88 d8 mov %bl,%al
10a720: 5b pop %ebx
10a721: 5d pop %ebp
10a722: c3 ret
0010ba1c <_Thread_Change_priority>:
void _Thread_Change_priority(
Thread_Control *the_thread,
Priority_Control new_priority,
bool prepend_it
)
{
10ba1c: 55 push %ebp
10ba1d: 89 e5 mov %esp,%ebp
10ba1f: 57 push %edi
10ba20: 56 push %esi
10ba21: 53 push %ebx
10ba22: 83 ec 28 sub $0x28,%esp
10ba25: 8b 7d 08 mov 0x8(%ebp),%edi
10ba28: 8b 5d 0c mov 0xc(%ebp),%ebx
10ba2b: 8a 45 10 mov 0x10(%ebp),%al
10ba2e: 88 45 e7 mov %al,-0x19(%ebp)
States_Control state, original_state;
/*
* Save original state
*/
original_state = the_thread->current_state;
10ba31: 8b 77 10 mov 0x10(%edi),%esi
/*
* Set a transient state for the thread so it is pulled off the Ready chains.
* This will prevent it from being scheduled no matter what happens in an
* ISR.
*/
_Thread_Set_transient( the_thread );
10ba34: 57 push %edi
10ba35: e8 72 0b 00 00 call 10c5ac <_Thread_Set_transient>
/*
* Do not bother recomputing all the priority related information if
* we are not REALLY changing priority.
*/
if ( the_thread->current_priority != new_priority )
10ba3a: 83 c4 10 add $0x10,%esp
10ba3d: 39 5f 14 cmp %ebx,0x14(%edi)
10ba40: 74 0c je 10ba4e <_Thread_Change_priority+0x32>
_Thread_Set_priority( the_thread, new_priority );
10ba42: 50 push %eax
10ba43: 50 push %eax
10ba44: 53 push %ebx
10ba45: 57 push %edi
10ba46: e8 15 0b 00 00 call 10c560 <_Thread_Set_priority>
10ba4b: 83 c4 10 add $0x10,%esp
_ISR_Disable( level );
10ba4e: 9c pushf
10ba4f: fa cli
10ba50: 5b pop %ebx
/*
* If the thread has more than STATES_TRANSIENT set, then it is blocked,
* If it is blocked on a thread queue, then we need to requeue it.
*/
state = the_thread->current_state;
10ba51: 8b 47 10 mov 0x10(%edi),%eax
if ( state != STATES_TRANSIENT ) {
10ba54: 83 f8 04 cmp $0x4,%eax
10ba57: 74 2b je 10ba84 <_Thread_Change_priority+0x68>
/* Only clear the transient state if it wasn't set already */
if ( ! _States_Is_transient( original_state ) )
10ba59: 83 e6 04 and $0x4,%esi
10ba5c: 75 08 jne 10ba66 <_Thread_Change_priority+0x4a><== NEVER TAKEN
RTEMS_INLINE_ROUTINE States_Control _States_Clear (
States_Control states_to_clear,
States_Control current_state
)
{
return (current_state & ~states_to_clear);
10ba5e: 89 c2 mov %eax,%edx
10ba60: 83 e2 fb and $0xfffffffb,%edx
10ba63: 89 57 10 mov %edx,0x10(%edi)
the_thread->current_state = _States_Clear( STATES_TRANSIENT, state );
_ISR_Enable( level );
10ba66: 53 push %ebx
10ba67: 9d popf
if ( _States_Is_waiting_on_thread_queue( state ) ) {
10ba68: a9 e0 be 03 00 test $0x3bee0,%eax
10ba6d: 74 65 je 10bad4 <_Thread_Change_priority+0xb8>
_Thread_queue_Requeue( the_thread->Wait.queue, the_thread );
10ba6f: 89 7d 0c mov %edi,0xc(%ebp)
10ba72: 8b 47 44 mov 0x44(%edi),%eax
10ba75: 89 45 08 mov %eax,0x8(%ebp)
if ( !_Thread_Is_executing_also_the_heir() &&
_Thread_Executing->is_preemptible )
_Thread_Dispatch_necessary = true;
_ISR_Enable( level );
}
10ba78: 8d 65 f4 lea -0xc(%ebp),%esp
10ba7b: 5b pop %ebx
10ba7c: 5e pop %esi
10ba7d: 5f pop %edi
10ba7e: 5d pop %ebp
/* Only clear the transient state if it wasn't set already */
if ( ! _States_Is_transient( original_state ) )
the_thread->current_state = _States_Clear( STATES_TRANSIENT, state );
_ISR_Enable( level );
if ( _States_Is_waiting_on_thread_queue( state ) ) {
_Thread_queue_Requeue( the_thread->Wait.queue, the_thread );
10ba7f: e9 4c 0a 00 00 jmp 10c4d0 <_Thread_queue_Requeue>
}
return;
}
/* Only clear the transient state if it wasn't set already */
if ( ! _States_Is_transient( original_state ) ) {
10ba84: 83 e6 04 and $0x4,%esi
10ba87: 75 26 jne 10baaf <_Thread_Change_priority+0x93><== NEVER TAKEN
* Interrupts are STILL disabled.
* We now know the thread will be in the READY state when we remove
* the TRANSIENT state. So we have to place it on the appropriate
* Ready Queue with interrupts off.
*/
the_thread->current_state = _States_Clear( STATES_TRANSIENT, state );
10ba89: c7 47 10 00 00 00 00 movl $0x0,0x10(%edi)
if ( prepend_it )
10ba90: 80 7d e7 00 cmpb $0x0,-0x19(%ebp)
10ba94: 74 0c je 10baa2 <_Thread_Change_priority+0x86>
*/
RTEMS_INLINE_ROUTINE void _Scheduler_Enqueue_first(
Thread_Control *the_thread
)
{
_Scheduler.Operations.enqueue_first( the_thread );
10ba96: 83 ec 0c sub $0xc,%esp
10ba99: 57 push %edi
10ba9a: ff 15 58 a2 12 00 call *0x12a258
10baa0: eb 0a jmp 10baac <_Thread_Change_priority+0x90>
*/
RTEMS_INLINE_ROUTINE void _Scheduler_Enqueue(
Thread_Control *the_thread
)
{
_Scheduler.Operations.enqueue( the_thread );
10baa2: 83 ec 0c sub $0xc,%esp
10baa5: 57 push %edi
10baa6: ff 15 54 a2 12 00 call *0x12a254
10baac: 83 c4 10 add $0x10,%esp
_Scheduler_Enqueue_first( the_thread );
else
_Scheduler_Enqueue( the_thread );
}
_ISR_Flash( level );
10baaf: 53 push %ebx
10bab0: 9d popf
10bab1: fa cli
* This kernel routine implements the scheduling decision logic for
* the scheduler. It does NOT dispatch.
*/
RTEMS_INLINE_ROUTINE void _Scheduler_Schedule( void )
{
_Scheduler.Operations.schedule();
10bab2: ff 15 38 a2 12 00 call *0x12a238
* is also the heir thread, and false otherwise.
*/
RTEMS_INLINE_ROUTINE bool _Thread_Is_executing_also_the_heir( void )
{
return ( _Thread_Executing == _Thread_Heir );
10bab8: a1 ec e8 12 00 mov 0x12e8ec,%eax
* We altered the set of thread priorities. So let's figure out
* who is the heir and if we need to switch to them.
*/
_Scheduler_Schedule();
if ( !_Thread_Is_executing_also_the_heir() &&
10babd: 3b 05 f0 e8 12 00 cmp 0x12e8f0,%eax
10bac3: 74 0d je 10bad2 <_Thread_Change_priority+0xb6>
10bac5: 80 78 70 00 cmpb $0x0,0x70(%eax)
10bac9: 74 07 je 10bad2 <_Thread_Change_priority+0xb6>
_Thread_Executing->is_preemptible )
_Thread_Dispatch_necessary = true;
10bacb: c6 05 f8 e8 12 00 01 movb $0x1,0x12e8f8
_ISR_Enable( level );
10bad2: 53 push %ebx
10bad3: 9d popf
}
10bad4: 8d 65 f4 lea -0xc(%ebp),%esp
10bad7: 5b pop %ebx
10bad8: 5e pop %esi
10bad9: 5f pop %edi
10bada: 5d pop %ebp
10badb: c3 ret
0010bc90 <_Thread_Delay_ended>:
void _Thread_Delay_ended(
Objects_Id id,
void *ignored __attribute__((unused))
)
{
10bc90: 55 push %ebp
10bc91: 89 e5 mov %esp,%ebp
10bc93: 83 ec 20 sub $0x20,%esp
Thread_Control *the_thread;
Objects_Locations location;
the_thread = _Thread_Get( id, &location );
10bc96: 8d 45 f4 lea -0xc(%ebp),%eax
10bc99: 50 push %eax
10bc9a: ff 75 08 pushl 0x8(%ebp)
10bc9d: e8 8a 01 00 00 call 10be2c <_Thread_Get>
switch ( location ) {
10bca2: 83 c4 10 add $0x10,%esp
10bca5: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
10bca9: 75 20 jne 10bccb <_Thread_Delay_ended+0x3b><== NEVER TAKEN
#if defined(RTEMS_MULTIPROCESSING)
case OBJECTS_REMOTE: /* impossible */
#endif
break;
case OBJECTS_LOCAL:
_Thread_Clear_state(
10bcab: 52 push %edx
10bcac: 52 push %edx
10bcad: 68 18 00 00 10 push $0x10000018
10bcb2: 50 push %eax
10bcb3: e8 24 fe ff ff call 10badc <_Thread_Clear_state>
*
* This routine decrements the thread dispatch level.
*/
RTEMS_INLINE_ROUTINE uint32_t _Thread_Dispatch_decrement_disable_level(void)
{
_Thread_Dispatch_disable_level--;
10bcb8: a1 e4 e3 12 00 mov 0x12e3e4,%eax
10bcbd: 48 dec %eax
10bcbe: a3 e4 e3 12 00 mov %eax,0x12e3e4
return _Thread_Dispatch_disable_level;
10bcc3: a1 e4 e3 12 00 mov 0x12e3e4,%eax
10bcc8: 83 c4 10 add $0x10,%esp
| STATES_INTERRUPTIBLE_BY_SIGNAL
);
_Thread_Unnest_dispatch();
break;
}
}
10bccb: c9 leave
10bccc: c3 ret
0010bcd0 <_Thread_Dispatch>:
* INTERRUPT LATENCY:
* dispatch thread
* no dispatch thread
*/
void _Thread_Dispatch( void )
{
10bcd0: 55 push %ebp
10bcd1: 89 e5 mov %esp,%ebp
10bcd3: 57 push %edi
10bcd4: 56 push %esi
10bcd5: 53 push %ebx
10bcd6: 83 ec 1c sub $0x1c,%esp
*
* This rountine increments the thread dispatch level
*/
RTEMS_INLINE_ROUTINE uint32_t _Thread_Dispatch_increment_disable_level(void)
{
_Thread_Dispatch_disable_level++;
10bcd9: a1 e4 e3 12 00 mov 0x12e3e4,%eax
10bcde: 40 inc %eax
10bcdf: a3 e4 e3 12 00 mov %eax,0x12e3e4
return _Thread_Dispatch_disable_level;
10bce4: a1 e4 e3 12 00 mov 0x12e3e4,%eax
void _Thread_Disable_dispatch( void );
#else
RTEMS_INLINE_ROUTINE void _Thread_Disable_dispatch( void )
{
_Thread_Dispatch_increment_disable_level();
RTEMS_COMPILER_MEMORY_BARRIER();
10bce9: e9 f9 00 00 00 jmp 10bde7 <_Thread_Dispatch+0x117>
*/
executing = _Thread_Executing;
_ISR_Disable( level );
while ( _Thread_Dispatch_necessary == true ) {
heir = _Thread_Heir;
10bcee: 8b 35 f0 e8 12 00 mov 0x12e8f0,%esi
_Thread_Dispatch_necessary = false;
10bcf4: c6 05 f8 e8 12 00 00 movb $0x0,0x12e8f8
_Thread_Executing = heir;
10bcfb: 89 35 ec e8 12 00 mov %esi,0x12e8ec
/*
* When the heir and executing are the same, then we are being
* requested to do the post switch dispatching. This is normally
* done to dispatch signals.
*/
if ( heir == executing )
10bd01: 39 fe cmp %edi,%esi
10bd03: 75 1c jne 10bd21 <_Thread_Dispatch+0x51>
_ISR_Disable( level );
}
post_switch:
_ISR_Enable( level );
10bd05: 50 push %eax
10bd06: 9d popf
*
* This routine decrements the thread dispatch level.
*/
RTEMS_INLINE_ROUTINE uint32_t _Thread_Dispatch_decrement_disable_level(void)
{
_Thread_Dispatch_disable_level--;
10bd07: a1 e4 e3 12 00 mov 0x12e3e4,%eax
10bd0c: 48 dec %eax
10bd0d: a3 e4 e3 12 00 mov %eax,0x12e3e4
return _Thread_Dispatch_disable_level;
10bd12: a1 e4 e3 12 00 mov 0x12e3e4,%eax
_Thread_Unnest_dispatch();
_API_extensions_Run_postswitch();
10bd17: e8 39 e8 ff ff call 10a555 <_API_extensions_Run_postswitch>
10bd1c: e9 e2 00 00 00 jmp 10be03 <_Thread_Dispatch+0x133>
*/
#if __RTEMS_ADA__
executing->rtems_ada_self = rtems_ada_self;
rtems_ada_self = heir->rtems_ada_self;
#endif
if ( heir->budget_algorithm == THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE )
10bd21: 83 7e 78 01 cmpl $0x1,0x78(%esi)
10bd25: 75 09 jne 10bd30 <_Thread_Dispatch+0x60>
heir->cpu_time_budget = _Thread_Ticks_per_timeslice;
10bd27: 8b 15 b8 e3 12 00 mov 0x12e3b8,%edx
10bd2d: 89 56 74 mov %edx,0x74(%esi)
_ISR_Enable( level );
10bd30: 50 push %eax
10bd31: 9d popf
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
{
Timestamp_Control uptime, ran;
_TOD_Get_uptime( &uptime );
10bd32: 83 ec 0c sub $0xc,%esp
10bd35: 8d 45 e0 lea -0x20(%ebp),%eax
10bd38: 50 push %eax
10bd39: e8 06 34 00 00 call 10f144 <_TOD_Get_uptime>
_Timestamp_Subtract(
10bd3e: 8b 45 e0 mov -0x20(%ebp),%eax
10bd41: 8b 55 e4 mov -0x1c(%ebp),%edx
const Timestamp64_Control *_start,
const Timestamp64_Control *_end,
Timestamp64_Control *_result
)
{
*_result = *_end - *_start;
10bd44: 89 c1 mov %eax,%ecx
10bd46: 89 d3 mov %edx,%ebx
10bd48: 2b 0d fc e8 12 00 sub 0x12e8fc,%ecx
10bd4e: 1b 1d 00 e9 12 00 sbb 0x12e900,%ebx
static inline void _Timestamp64_implementation_Add_to(
Timestamp64_Control *_time,
const Timestamp64_Control *_add
)
{
*_time += *_add;
10bd54: 01 8f 80 00 00 00 add %ecx,0x80(%edi)
10bd5a: 11 9f 84 00 00 00 adc %ebx,0x84(%edi)
&_Thread_Time_of_last_context_switch,
&uptime,
&ran
);
_Timestamp_Add_to( &executing->cpu_time_used, &ran );
_Thread_Time_of_last_context_switch = uptime;
10bd60: a3 fc e8 12 00 mov %eax,0x12e8fc
10bd65: 89 15 00 e9 12 00 mov %edx,0x12e900
#endif
/*
* Switch libc's task specific data.
*/
if ( _Thread_libc_reent ) {
10bd6b: a1 5c e4 12 00 mov 0x12e45c,%eax
10bd70: 83 c4 10 add $0x10,%esp
10bd73: 85 c0 test %eax,%eax
10bd75: 74 10 je 10bd87 <_Thread_Dispatch+0xb7> <== NEVER TAKEN
executing->libc_reent = *_Thread_libc_reent;
10bd77: 8b 10 mov (%eax),%edx
10bd79: 89 97 e0 00 00 00 mov %edx,0xe0(%edi)
*_Thread_libc_reent = heir->libc_reent;
10bd7f: 8b 96 e0 00 00 00 mov 0xe0(%esi),%edx
10bd85: 89 10 mov %edx,(%eax)
}
_User_extensions_Thread_switch( executing, heir );
10bd87: 50 push %eax
10bd88: 50 push %eax
10bd89: 56 push %esi
10bd8a: 57 push %edi
10bd8b: e8 48 0b 00 00 call 10c8d8 <_User_extensions_Thread_switch>
if ( executing->fp_context != NULL )
_Context_Save_fp( &executing->fp_context );
#endif
#endif
_Context_Switch( &executing->Registers, &heir->Registers );
10bd90: 5a pop %edx
10bd91: 59 pop %ecx
10bd92: 8d 86 c4 00 00 00 lea 0xc4(%esi),%eax
10bd98: 50 push %eax
10bd99: 8d 87 c4 00 00 00 lea 0xc4(%edi),%eax
10bd9f: 50 push %eax
10bda0: e8 0b 0e 00 00 call 10cbb0 <_CPU_Context_switch>
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
#if ( CPU_USE_DEFERRED_FP_SWITCH == TRUE )
if ( (executing->fp_context != NULL) &&
10bda5: 83 c4 10 add $0x10,%esp
10bda8: 83 bf dc 00 00 00 00 cmpl $0x0,0xdc(%edi)
10bdaf: 74 36 je 10bde7 <_Thread_Dispatch+0x117>
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
RTEMS_INLINE_ROUTINE bool _Thread_Is_allocated_fp (
const Thread_Control *the_thread
)
{
return ( the_thread == _Thread_Allocated_fp );
10bdb1: a1 58 e4 12 00 mov 0x12e458,%eax
10bdb6: 39 c7 cmp %eax,%edi
10bdb8: 74 2d je 10bde7 <_Thread_Dispatch+0x117>
!_Thread_Is_allocated_fp( executing ) ) {
if ( _Thread_Allocated_fp != NULL )
10bdba: 85 c0 test %eax,%eax
10bdbc: 74 11 je 10bdcf <_Thread_Dispatch+0xff>
_Context_Save_fp( &_Thread_Allocated_fp->fp_context );
10bdbe: 83 ec 0c sub $0xc,%esp
10bdc1: 05 dc 00 00 00 add $0xdc,%eax
10bdc6: 50 push %eax
10bdc7: e8 18 0e 00 00 call 10cbe4 <_CPU_Context_save_fp>
10bdcc: 83 c4 10 add $0x10,%esp
_Context_Restore_fp( &executing->fp_context );
10bdcf: 83 ec 0c sub $0xc,%esp
10bdd2: 8d 87 dc 00 00 00 lea 0xdc(%edi),%eax
10bdd8: 50 push %eax
10bdd9: e8 10 0e 00 00 call 10cbee <_CPU_Context_restore_fp>
_Thread_Allocated_fp = executing;
10bdde: 89 3d 58 e4 12 00 mov %edi,0x12e458
10bde4: 83 c4 10 add $0x10,%esp
if ( executing->fp_context != NULL )
_Context_Restore_fp( &executing->fp_context );
#endif
#endif
executing = _Thread_Executing;
10bde7: 8b 3d ec e8 12 00 mov 0x12e8ec,%edi
_ISR_Disable( level );
10bded: 9c pushf
10bdee: fa cli
10bdef: 58 pop %eax
/*
* Now determine if we need to perform a dispatch on the current CPU.
*/
executing = _Thread_Executing;
_ISR_Disable( level );
while ( _Thread_Dispatch_necessary == true ) {
10bdf0: 8a 15 f8 e8 12 00 mov 0x12e8f8,%dl
10bdf6: 84 d2 test %dl,%dl
10bdf8: 0f 85 f0 fe ff ff jne 10bcee <_Thread_Dispatch+0x1e>
10bdfe: e9 02 ff ff ff jmp 10bd05 <_Thread_Dispatch+0x35>
_ISR_Enable( level );
_Thread_Unnest_dispatch();
_API_extensions_Run_postswitch();
}
10be03: 8d 65 f4 lea -0xc(%ebp),%esp
10be06: 5b pop %ebx
10be07: 5e pop %esi
10be08: 5f pop %edi
10be09: 5d pop %ebp
10be0a: c3 ret
00110d08 <_Thread_Handler>:
* Input parameters: NONE
*
* Output parameters: NONE
*/
void _Thread_Handler( void )
{
110d08: 55 push %ebp
110d09: 89 e5 mov %esp,%ebp
110d0b: 53 push %ebx
110d0c: 83 ec 14 sub $0x14,%esp
#if defined(EXECUTE_GLOBAL_CONSTRUCTORS)
static bool doneConstructors;
bool doCons;
#endif
executing = _Thread_Executing;
110d0f: 8b 1d ec e8 12 00 mov 0x12e8ec,%ebx
/*
* have to put level into a register for those cpu's that use
* inline asm here
*/
level = executing->Start.isr_level;
110d15: 8b 83 a8 00 00 00 mov 0xa8(%ebx),%eax
_ISR_Set_level(level);
110d1b: 85 c0 test %eax,%eax
110d1d: 74 03 je 110d22 <_Thread_Handler+0x1a>
110d1f: fa cli
110d20: eb 01 jmp 110d23 <_Thread_Handler+0x1b>
110d22: fb sti
doCons = !doneConstructors
&& _Objects_Get_API( executing->Object.id ) != OBJECTS_INTERNAL_API;
if (doCons)
doneConstructors = true;
#else
doCons = !doneConstructors;
110d23: a0 d4 e0 12 00 mov 0x12e0d4,%al
110d28: 88 45 f7 mov %al,-0x9(%ebp)
doneConstructors = true;
110d2b: c6 05 d4 e0 12 00 01 movb $0x1,0x12e0d4
#endif
#endif
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
#if ( CPU_USE_DEFERRED_FP_SWITCH == TRUE )
if ( (executing->fp_context != NULL) &&
110d32: 83 bb dc 00 00 00 00 cmpl $0x0,0xdc(%ebx)
110d39: 74 24 je 110d5f <_Thread_Handler+0x57>
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
RTEMS_INLINE_ROUTINE bool _Thread_Is_allocated_fp (
const Thread_Control *the_thread
)
{
return ( the_thread == _Thread_Allocated_fp );
110d3b: a1 58 e4 12 00 mov 0x12e458,%eax
110d40: 39 c3 cmp %eax,%ebx
110d42: 74 1b je 110d5f <_Thread_Handler+0x57>
!_Thread_Is_allocated_fp( executing ) ) {
if ( _Thread_Allocated_fp != NULL )
110d44: 85 c0 test %eax,%eax
110d46: 74 11 je 110d59 <_Thread_Handler+0x51>
_Context_Save_fp( &_Thread_Allocated_fp->fp_context );
110d48: 83 ec 0c sub $0xc,%esp
110d4b: 05 dc 00 00 00 add $0xdc,%eax
110d50: 50 push %eax
110d51: e8 8e be ff ff call 10cbe4 <_CPU_Context_save_fp>
110d56: 83 c4 10 add $0x10,%esp
_Thread_Allocated_fp = executing;
110d59: 89 1d 58 e4 12 00 mov %ebx,0x12e458
/*
* Take care that 'begin' extensions get to complete before
* 'switch' extensions can run. This means must keep dispatch
* disabled until all 'begin' extensions complete.
*/
_User_extensions_Thread_begin( executing );
110d5f: 83 ec 0c sub $0xc,%esp
110d62: 53 push %ebx
110d63: e8 34 ba ff ff call 10c79c <_User_extensions_Thread_begin>
/*
* At this point, the dispatch disable level BETTER be 1.
*/
_Thread_Enable_dispatch();
110d68: e8 9f b0 ff ff call 10be0c <_Thread_Enable_dispatch>
/*
* _init could be a weak symbol and we SHOULD test it but it isn't
* in any configuration I know of and it generates a warning on every
* RTEMS target configuration. --joel (12 May 2007)
*/
if (doCons) /* && (volatile void *)_init) */ {
110d6d: 83 c4 10 add $0x10,%esp
110d70: 80 7d f7 00 cmpb $0x0,-0x9(%ebp)
110d74: 75 05 jne 110d7b <_Thread_Handler+0x73>
INIT_NAME ();
110d76: e8 b1 d0 00 00 call 11de2c <__start_set_sysctl_set>
_Thread_Enable_dispatch();
#endif
}
#endif
if ( executing->Start.prototype == THREAD_START_NUMERIC ) {
110d7b: 8b 83 90 00 00 00 mov 0x90(%ebx),%eax
110d81: 85 c0 test %eax,%eax
110d83: 75 0b jne 110d90 <_Thread_Handler+0x88>
executing->Wait.return_argument =
(*(Thread_Entry_numeric) executing->Start.entry_point)(
110d85: 83 ec 0c sub $0xc,%esp
110d88: ff b3 98 00 00 00 pushl 0x98(%ebx)
110d8e: eb 0c jmp 110d9c <_Thread_Handler+0x94>
executing->Start.numeric_argument
);
}
#if defined(RTEMS_POSIX_API)
else if ( executing->Start.prototype == THREAD_START_POINTER ) {
110d90: 48 dec %eax
110d91: 75 15 jne 110da8 <_Thread_Handler+0xa0> <== NEVER TAKEN
executing->Wait.return_argument =
(*(Thread_Entry_pointer) executing->Start.entry_point)(
110d93: 83 ec 0c sub $0xc,%esp
110d96: ff b3 94 00 00 00 pushl 0x94(%ebx)
110d9c: ff 93 8c 00 00 00 call *0x8c(%ebx)
executing->Start.numeric_argument
);
}
#if defined(RTEMS_POSIX_API)
else if ( executing->Start.prototype == THREAD_START_POINTER ) {
executing->Wait.return_argument =
110da2: 89 43 28 mov %eax,0x28(%ebx)
110da5: 83 c4 10 add $0x10,%esp
* was placed in return_argument. This assumed that if it returned
* anything (which is not supporting in all APIs), then it would be
* able to fit in a (void *).
*/
_User_extensions_Thread_exitted( executing );
110da8: 83 ec 0c sub $0xc,%esp
110dab: 53 push %ebx
110dac: e8 19 ba ff ff call 10c7ca <_User_extensions_Thread_exitted>
_Internal_error_Occurred(
110db1: 83 c4 0c add $0xc,%esp
110db4: 6a 05 push $0x5
110db6: 6a 01 push $0x1
110db8: 6a 00 push $0x0
110dba: e8 0d a0 ff ff call 10adcc <_Internal_error_Occurred>
0010c0d8 <_Thread_Handler_initialization>:
*
* Output parameters: NONE
*/
void _Thread_Handler_initialization(void)
{
10c0d8: 55 push %ebp
10c0d9: 89 e5 mov %esp,%ebp
10c0db: 56 push %esi
10c0dc: 53 push %ebx
uint32_t ticks_per_timeslice =
10c0dd: 8b 1d 54 a1 12 00 mov 0x12a154,%ebx
rtems_configuration_get_ticks_per_timeslice();
uint32_t maximum_extensions =
10c0e3: 8b 35 48 a1 12 00 mov 0x12a148,%esi
rtems_configuration_get_maximum_extensions();
rtems_stack_allocate_init_hook stack_allocate_init_hook =
10c0e9: a1 64 a1 12 00 mov 0x12a164,%eax
#if defined(RTEMS_MULTIPROCESSING)
uint32_t maximum_proxies =
_Configuration_MP_table->maximum_proxies;
#endif
if ( rtems_configuration_get_stack_allocate_hook() == NULL ||
10c0ee: 83 3d 68 a1 12 00 00 cmpl $0x0,0x12a168
10c0f5: 74 09 je 10c100 <_Thread_Handler_initialization+0x28>
10c0f7: 83 3d 6c a1 12 00 00 cmpl $0x0,0x12a16c
10c0fe: 75 0c jne 10c10c <_Thread_Handler_initialization+0x34><== ALWAYS TAKEN
rtems_configuration_get_stack_free_hook() == NULL)
_Internal_error_Occurred(
10c100: 52 push %edx
10c101: 6a 0e push $0xe
10c103: 6a 01 push $0x1
10c105: 6a 00 push $0x0
10c107: e8 c0 ec ff ff call 10adcc <_Internal_error_Occurred>
INTERNAL_ERROR_CORE,
true,
INTERNAL_ERROR_BAD_STACK_HOOK
);
if ( stack_allocate_init_hook != NULL )
10c10c: 85 c0 test %eax,%eax
10c10e: 74 0e je 10c11e <_Thread_Handler_initialization+0x46>
(*stack_allocate_init_hook)( rtems_configuration_get_stack_space_size() );
10c110: 83 ec 0c sub $0xc,%esp
10c113: ff 35 44 a1 12 00 pushl 0x12a144
10c119: ff d0 call *%eax
10c11b: 83 c4 10 add $0x10,%esp
_Thread_Dispatch_necessary = false;
10c11e: c6 05 f8 e8 12 00 00 movb $0x0,0x12e8f8
_Thread_Executing = NULL;
10c125: c7 05 ec e8 12 00 00 movl $0x0,0x12e8ec
10c12c: 00 00 00
_Thread_Heir = NULL;
10c12f: c7 05 f0 e8 12 00 00 movl $0x0,0x12e8f0
10c136: 00 00 00
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
_Thread_Allocated_fp = NULL;
10c139: c7 05 58 e4 12 00 00 movl $0x0,0x12e458
10c140: 00 00 00
#endif
_Thread_Maximum_extensions = maximum_extensions;
10c143: 89 35 60 e4 12 00 mov %esi,0x12e460
_Thread_Ticks_per_timeslice = ticks_per_timeslice;
10c149: 89 1d b8 e3 12 00 mov %ebx,0x12e3b8
#if defined(RTEMS_MULTIPROCESSING)
if ( _System_state_Is_multiprocessing )
maximum_internal_threads += 1;
#endif
_Objects_Initialize_information(
10c14f: 50 push %eax
10c150: 6a 08 push $0x8
10c152: 6a 00 push $0x0
10c154: 68 f4 00 00 00 push $0xf4
10c159: 6a 01 push $0x1
10c15b: 6a 01 push $0x1
10c15d: 6a 01 push $0x1
10c15f: 68 e0 e4 12 00 push $0x12e4e0
10c164: e8 5f f1 ff ff call 10b2c8 <_Objects_Initialize_information>
10c169: 83 c4 20 add $0x20,%esp
false, /* true if this is a global object class */
NULL /* Proxy extraction support callout */
#endif
);
}
10c16c: 8d 65 f8 lea -0x8(%ebp),%esp
10c16f: 5b pop %ebx
10c170: 5e pop %esi
10c171: 5d pop %ebp
10c172: c3 ret
0010beac <_Thread_Initialize>:
Thread_CPU_budget_algorithms budget_algorithm,
Thread_CPU_budget_algorithm_callout budget_callout,
uint32_t isr_level,
Objects_Name name
)
{
10beac: 55 push %ebp
10bead: 89 e5 mov %esp,%ebp
10beaf: 57 push %edi
10beb0: 56 push %esi
10beb1: 53 push %ebx
10beb2: 83 ec 1c sub $0x1c,%esp
10beb5: 8b 5d 0c mov 0xc(%ebp),%ebx
10beb8: 8b 4d 10 mov 0x10(%ebp),%ecx
10bebb: 8b 75 14 mov 0x14(%ebp),%esi
10bebe: 8a 55 18 mov 0x18(%ebp),%dl
10bec1: 8a 45 20 mov 0x20(%ebp),%al
10bec4: 88 45 e7 mov %al,-0x19(%ebp)
/*
* Zero out all the allocated memory fields
*/
for ( i=0 ; i <= THREAD_API_LAST ; i++ )
the_thread->API_Extensions[i] = NULL;
10bec7: c7 83 e4 00 00 00 00 movl $0x0,0xe4(%ebx)
10bece: 00 00 00
10bed1: c7 83 e8 00 00 00 00 movl $0x0,0xe8(%ebx)
10bed8: 00 00 00
extensions_area = NULL;
the_thread->libc_reent = NULL;
10bedb: c7 83 e0 00 00 00 00 movl $0x0,0xe0(%ebx)
10bee2: 00 00 00
if ( !actual_stack_size || actual_stack_size < stack_size )
return false; /* stack allocation failed */
stack = the_thread->Start.stack;
#else
if ( !stack_area ) {
10bee5: 85 c9 test %ecx,%ecx
10bee7: 75 31 jne 10bf1a <_Thread_Initialize+0x6e>
actual_stack_size = _Thread_Stack_Allocate( the_thread, stack_size );
10bee9: 57 push %edi
10beea: 57 push %edi
10beeb: 56 push %esi
10beec: 53 push %ebx
10beed: 88 55 e0 mov %dl,-0x20(%ebp)
10bef0: e8 e7 06 00 00 call 10c5dc <_Thread_Stack_Allocate>
if ( !actual_stack_size || actual_stack_size < stack_size )
10bef5: 83 c4 10 add $0x10,%esp
10bef8: 39 f0 cmp %esi,%eax
10befa: 8a 55 e0 mov -0x20(%ebp),%dl
10befd: 0f 82 c7 01 00 00 jb 10c0ca <_Thread_Initialize+0x21e>
10bf03: 85 c0 test %eax,%eax
10bf05: 0f 84 bf 01 00 00 je 10c0ca <_Thread_Initialize+0x21e><== NEVER TAKEN
return false; /* stack allocation failed */
stack = the_thread->Start.stack;
10bf0b: 8b 8b c0 00 00 00 mov 0xc0(%ebx),%ecx
the_thread->Start.core_allocated_stack = true;
10bf11: c6 83 b0 00 00 00 01 movb $0x1,0xb0(%ebx)
10bf18: eb 09 jmp 10bf23 <_Thread_Initialize+0x77>
} else {
stack = stack_area;
actual_stack_size = stack_size;
the_thread->Start.core_allocated_stack = false;
10bf1a: c6 83 b0 00 00 00 00 movb $0x0,0xb0(%ebx)
10bf21: 89 f0 mov %esi,%eax
Stack_Control *the_stack,
void *starting_address,
size_t size
)
{
the_stack->area = starting_address;
10bf23: 89 8b b8 00 00 00 mov %ecx,0xb8(%ebx)
the_stack->size = size;
10bf29: 89 83 b4 00 00 00 mov %eax,0xb4(%ebx)
extensions_area = NULL;
the_thread->libc_reent = NULL;
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
fp_area = NULL;
10bf2f: 31 ff xor %edi,%edi
/*
* Allocate the floating point area for this thread
*/
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
if ( is_fp ) {
10bf31: 84 d2 test %dl,%dl
10bf33: 74 17 je 10bf4c <_Thread_Initialize+0xa0>
fp_area = _Workspace_Allocate( CONTEXT_FP_SIZE );
10bf35: 83 ec 0c sub $0xc,%esp
10bf38: 6a 6c push $0x6c
10bf3a: e8 05 0c 00 00 call 10cb44 <_Workspace_Allocate>
10bf3f: 89 c7 mov %eax,%edi
if ( !fp_area )
10bf41: 83 c4 10 add $0x10,%esp
10bf44: 85 c0 test %eax,%eax
10bf46: 0f 84 2b 01 00 00 je 10c077 <_Thread_Initialize+0x1cb><== NEVER TAKEN
goto failed;
fp_area = _Context_Fp_start( fp_area, 0 );
}
the_thread->fp_context = fp_area;
10bf4c: 89 bb dc 00 00 00 mov %edi,0xdc(%ebx)
the_thread->Start.fp_context = fp_area;
10bf52: 89 bb bc 00 00 00 mov %edi,0xbc(%ebx)
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
10bf58: c7 43 50 00 00 00 00 movl $0x0,0x50(%ebx)
the_watchdog->routine = routine;
10bf5f: c7 43 64 00 00 00 00 movl $0x0,0x64(%ebx)
the_watchdog->id = id;
10bf66: c7 43 68 00 00 00 00 movl $0x0,0x68(%ebx)
the_watchdog->user_data = user_data;
10bf6d: c7 43 6c 00 00 00 00 movl $0x0,0x6c(%ebx)
#endif
/*
* Allocate the extensions area for this thread
*/
if ( _Thread_Maximum_extensions ) {
10bf74: a1 60 e4 12 00 mov 0x12e460,%eax
* Zero out all the allocated memory fields
*/
for ( i=0 ; i <= THREAD_API_LAST ; i++ )
the_thread->API_Extensions[i] = NULL;
extensions_area = NULL;
10bf79: 31 f6 xor %esi,%esi
#endif
/*
* Allocate the extensions area for this thread
*/
if ( _Thread_Maximum_extensions ) {
10bf7b: 85 c0 test %eax,%eax
10bf7d: 74 1d je 10bf9c <_Thread_Initialize+0xf0>
extensions_area = _Workspace_Allocate(
10bf7f: 83 ec 0c sub $0xc,%esp
10bf82: 8d 04 85 04 00 00 00 lea 0x4(,%eax,4),%eax
10bf89: 50 push %eax
10bf8a: e8 b5 0b 00 00 call 10cb44 <_Workspace_Allocate>
10bf8f: 89 c6 mov %eax,%esi
(_Thread_Maximum_extensions + 1) * sizeof( void * )
);
if ( !extensions_area )
10bf91: 83 c4 10 add $0x10,%esp
10bf94: 85 c0 test %eax,%eax
10bf96: 0f 84 dd 00 00 00 je 10c079 <_Thread_Initialize+0x1cd><== NEVER TAKEN
goto failed;
}
the_thread->extensions = (void **) extensions_area;
10bf9c: 89 b3 ec 00 00 00 mov %esi,0xec(%ebx)
* if they are linked to the thread. An extension user may
* create the extension long after tasks have been created
* so they cannot rely on the thread create user extension
* call.
*/
if ( the_thread->extensions ) {
10bfa2: 85 f6 test %esi,%esi
10bfa4: 75 23 jne 10bfc9 <_Thread_Initialize+0x11d>
/*
* General initialization
*/
the_thread->Start.is_preemptible = is_preemptible;
10bfa6: 8a 45 e7 mov -0x19(%ebp),%al
10bfa9: 88 83 9c 00 00 00 mov %al,0x9c(%ebx)
the_thread->Start.budget_algorithm = budget_algorithm;
10bfaf: 8b 45 24 mov 0x24(%ebp),%eax
10bfb2: 89 83 a0 00 00 00 mov %eax,0xa0(%ebx)
the_thread->Start.budget_callout = budget_callout;
10bfb8: 8b 45 28 mov 0x28(%ebp),%eax
10bfbb: 89 83 a4 00 00 00 mov %eax,0xa4(%ebx)
switch ( budget_algorithm ) {
10bfc1: 83 7d 24 02 cmpl $0x2,0x24(%ebp)
10bfc5: 75 28 jne 10bfef <_Thread_Initialize+0x143>
10bfc7: eb 1e jmp 10bfe7 <_Thread_Initialize+0x13b>
* create the extension long after tasks have been created
* so they cannot rely on the thread create user extension
* call.
*/
if ( the_thread->extensions ) {
for ( i = 0; i <= _Thread_Maximum_extensions ; i++ )
10bfc9: 8b 15 60 e4 12 00 mov 0x12e460,%edx
10bfcf: 31 c0 xor %eax,%eax
10bfd1: eb 0e jmp 10bfe1 <_Thread_Initialize+0x135>
the_thread->extensions[i] = NULL;
10bfd3: 8b 8b ec 00 00 00 mov 0xec(%ebx),%ecx
10bfd9: c7 04 81 00 00 00 00 movl $0x0,(%ecx,%eax,4)
* create the extension long after tasks have been created
* so they cannot rely on the thread create user extension
* call.
*/
if ( the_thread->extensions ) {
for ( i = 0; i <= _Thread_Maximum_extensions ; i++ )
10bfe0: 40 inc %eax
10bfe1: 39 d0 cmp %edx,%eax
10bfe3: 76 ee jbe 10bfd3 <_Thread_Initialize+0x127>
10bfe5: eb bf jmp 10bfa6 <_Thread_Initialize+0xfa>
case THREAD_CPU_BUDGET_ALGORITHM_NONE:
case THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE:
break;
#if defined(RTEMS_SCORE_THREAD_ENABLE_EXHAUST_TIMESLICE)
case THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE:
the_thread->cpu_time_budget = _Thread_Ticks_per_timeslice;
10bfe7: a1 b8 e3 12 00 mov 0x12e3b8,%eax
10bfec: 89 43 74 mov %eax,0x74(%ebx)
case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT:
break;
#endif
}
the_thread->Start.isr_level = isr_level;
10bfef: 8b 45 2c mov 0x2c(%ebp),%eax
10bff2: 89 83 a8 00 00 00 mov %eax,0xa8(%ebx)
the_thread->current_state = STATES_DORMANT;
10bff8: c7 43 10 01 00 00 00 movl $0x1,0x10(%ebx)
the_thread->Wait.queue = NULL;
10bfff: c7 43 44 00 00 00 00 movl $0x0,0x44(%ebx)
the_thread->resource_count = 0;
10c006: c7 43 1c 00 00 00 00 movl $0x0,0x1c(%ebx)
the_thread->real_priority = priority;
10c00d: 8b 45 1c mov 0x1c(%ebp),%eax
10c010: 89 43 18 mov %eax,0x18(%ebx)
the_thread->Start.initial_priority = priority;
10c013: 89 83 ac 00 00 00 mov %eax,0xac(%ebx)
*/
RTEMS_INLINE_ROUTINE void* _Scheduler_Allocate(
Thread_Control *the_thread
)
{
return _Scheduler.Operations.allocate( the_thread );
10c019: 83 ec 0c sub $0xc,%esp
10c01c: 53 push %ebx
10c01d: ff 15 48 a2 12 00 call *0x12a248
10c023: 89 c2 mov %eax,%edx
sched =_Scheduler_Allocate( the_thread );
if ( !sched )
10c025: 83 c4 10 add $0x10,%esp
10c028: 85 c0 test %eax,%eax
10c02a: 74 4f je 10c07b <_Thread_Initialize+0x1cf>
goto failed;
_Thread_Set_priority( the_thread, priority );
10c02c: 51 push %ecx
10c02d: 51 push %ecx
10c02e: ff 75 1c pushl 0x1c(%ebp)
10c031: 53 push %ebx
10c032: 89 45 e0 mov %eax,-0x20(%ebp)
10c035: e8 26 05 00 00 call 10c560 <_Thread_Set_priority>
static inline void _Timestamp64_implementation_Set_to_zero(
Timestamp64_Control *_time
)
{
*_time = 0;
10c03a: c7 83 80 00 00 00 00 movl $0x0,0x80(%ebx)
10c041: 00 00 00
10c044: c7 83 84 00 00 00 00 movl $0x0,0x84(%ebx)
10c04b: 00 00 00
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
10c04e: 0f b7 4b 08 movzwl 0x8(%ebx),%ecx
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
10c052: 8b 45 08 mov 0x8(%ebp),%eax
10c055: 8b 40 1c mov 0x1c(%eax),%eax
10c058: 89 1c 88 mov %ebx,(%eax,%ecx,4)
information,
_Objects_Get_index( the_object->id ),
the_object
);
the_object->name = name;
10c05b: 8b 45 30 mov 0x30(%ebp),%eax
10c05e: 89 43 0c mov %eax,0xc(%ebx)
* enabled when we get here. We want to be able to run the
* user extensions with dispatching enabled. The Allocator
* Mutex provides sufficient protection to let the user extensions
* run safely.
*/
extension_status = _User_extensions_Thread_create( the_thread );
10c061: 89 1c 24 mov %ebx,(%esp)
10c064: e8 c7 07 00 00 call 10c830 <_User_extensions_Thread_create>
if ( extension_status )
10c069: 83 c4 10 add $0x10,%esp
return true;
10c06c: b1 01 mov $0x1,%cl
* user extensions with dispatching enabled. The Allocator
* Mutex provides sufficient protection to let the user extensions
* run safely.
*/
extension_status = _User_extensions_Thread_create( the_thread );
if ( extension_status )
10c06e: 84 c0 test %al,%al
10c070: 8b 55 e0 mov -0x20(%ebp),%edx
10c073: 74 06 je 10c07b <_Thread_Initialize+0x1cf>
10c075: eb 55 jmp 10c0cc <_Thread_Initialize+0x220>
* Zero out all the allocated memory fields
*/
for ( i=0 ; i <= THREAD_API_LAST ; i++ )
the_thread->API_Extensions[i] = NULL;
extensions_area = NULL;
10c077: 31 f6 xor %esi,%esi
size_t actual_stack_size = 0;
void *stack = NULL;
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
void *fp_area;
#endif
void *sched = NULL;
10c079: 31 d2 xor %edx,%edx
extension_status = _User_extensions_Thread_create( the_thread );
if ( extension_status )
return true;
failed:
_Workspace_Free( the_thread->libc_reent );
10c07b: 83 ec 0c sub $0xc,%esp
10c07e: ff b3 e0 00 00 00 pushl 0xe0(%ebx)
10c084: 89 55 e0 mov %edx,-0x20(%ebp)
10c087: e8 d1 0a 00 00 call 10cb5d <_Workspace_Free>
for ( i=0 ; i <= THREAD_API_LAST ; i++ )
_Workspace_Free( the_thread->API_Extensions[i] );
10c08c: 58 pop %eax
10c08d: ff b3 e4 00 00 00 pushl 0xe4(%ebx)
10c093: e8 c5 0a 00 00 call 10cb5d <_Workspace_Free>
10c098: 5a pop %edx
10c099: ff b3 e8 00 00 00 pushl 0xe8(%ebx)
10c09f: e8 b9 0a 00 00 call 10cb5d <_Workspace_Free>
_Workspace_Free( extensions_area );
10c0a4: 89 34 24 mov %esi,(%esp)
10c0a7: e8 b1 0a 00 00 call 10cb5d <_Workspace_Free>
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
_Workspace_Free( fp_area );
10c0ac: 89 3c 24 mov %edi,(%esp)
10c0af: e8 a9 0a 00 00 call 10cb5d <_Workspace_Free>
#endif
_Workspace_Free( sched );
10c0b4: 8b 55 e0 mov -0x20(%ebp),%edx
10c0b7: 89 14 24 mov %edx,(%esp)
10c0ba: e8 9e 0a 00 00 call 10cb5d <_Workspace_Free>
_Thread_Stack_Free( the_thread );
10c0bf: 89 1c 24 mov %ebx,(%esp)
10c0c2: e8 51 05 00 00 call 10c618 <_Thread_Stack_Free>
return false;
10c0c7: 83 c4 10 add $0x10,%esp
stack = the_thread->Start.stack;
#else
if ( !stack_area ) {
actual_stack_size = _Thread_Stack_Allocate( the_thread, stack_size );
if ( !actual_stack_size || actual_stack_size < stack_size )
return false; /* stack allocation failed */
10c0ca: 31 c9 xor %ecx,%ecx
_Workspace_Free( sched );
_Thread_Stack_Free( the_thread );
return false;
}
10c0cc: 88 c8 mov %cl,%al
10c0ce: 8d 65 f4 lea -0xc(%ebp),%esp
10c0d1: 5b pop %ebx
10c0d2: 5e pop %esi
10c0d3: 5f pop %edi
10c0d4: 5d pop %ebp
10c0d5: c3 ret
0010c618 <_Thread_Stack_Free>:
*/
void _Thread_Stack_Free(
Thread_Control *the_thread
)
{
10c618: 55 push %ebp
10c619: 89 e5 mov %esp,%ebp
10c61b: 8b 45 08 mov 0x8(%ebp),%eax
rtems_stack_free_hook stack_free_hook =
10c61e: 8b 15 6c a1 12 00 mov 0x12a16c,%edx
#if defined(RTEMS_SCORE_THREAD_ENABLE_USER_PROVIDED_STACK_VIA_API)
/*
* If the API provided the stack space, then don't free it.
*/
if ( !the_thread->Start.core_allocated_stack )
10c624: 80 b8 b0 00 00 00 00 cmpb $0x0,0xb0(%eax)
10c62b: 74 0c je 10c639 <_Thread_Stack_Free+0x21><== NEVER TAKEN
* Call ONLY the CPU table stack free hook, or the
* the RTEMS workspace free. This is so the free
* routine properly matches the allocation of the stack.
*/
(*stack_free_hook)( the_thread->Start.Initial_stack.area );
10c62d: 8b 80 b8 00 00 00 mov 0xb8(%eax),%eax
10c633: 89 45 08 mov %eax,0x8(%ebp)
}
10c636: 5d pop %ebp
* Call ONLY the CPU table stack free hook, or the
* the RTEMS workspace free. This is so the free
* routine properly matches the allocation of the stack.
*/
(*stack_free_hook)( the_thread->Start.Initial_stack.area );
10c637: ff e2 jmp *%edx
}
10c639: 5d pop %ebp <== NOT EXECUTED
10c63a: c3 ret <== NOT EXECUTED
0010c4d0 <_Thread_queue_Requeue>:
void _Thread_queue_Requeue(
Thread_queue_Control *the_thread_queue,
Thread_Control *the_thread
)
{
10c4d0: 55 push %ebp
10c4d1: 89 e5 mov %esp,%ebp
10c4d3: 57 push %edi
10c4d4: 56 push %esi
10c4d5: 53 push %ebx
10c4d6: 83 ec 1c sub $0x1c,%esp
10c4d9: 8b 5d 08 mov 0x8(%ebp),%ebx
10c4dc: 8b 75 0c mov 0xc(%ebp),%esi
/*
* Just in case the thread really wasn't blocked on a thread queue
* when we get here.
*/
if ( !the_thread_queue )
10c4df: 85 db test %ebx,%ebx
10c4e1: 74 36 je 10c519 <_Thread_queue_Requeue+0x49><== NEVER TAKEN
/*
* If queueing by FIFO, there is nothing to do. This only applies to
* priority blocking discipline.
*/
if ( the_thread_queue->discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY ) {
10c4e3: 83 7b 34 01 cmpl $0x1,0x34(%ebx)
10c4e7: 75 30 jne 10c519 <_Thread_queue_Requeue+0x49><== NEVER TAKEN
Thread_queue_Control *tq = the_thread_queue;
ISR_Level level;
ISR_Level level_ignored;
_ISR_Disable( level );
10c4e9: 9c pushf
10c4ea: fa cli
10c4eb: 5f pop %edi
if ( _States_Is_waiting_on_thread_queue( the_thread->current_state ) ) {
10c4ec: f7 46 10 e0 be 03 00 testl $0x3bee0,0x10(%esi)
10c4f3: 74 22 je 10c517 <_Thread_queue_Requeue+0x47><== NEVER TAKEN
RTEMS_INLINE_ROUTINE void _Thread_queue_Enter_critical_section (
Thread_queue_Control *the_thread_queue
)
{
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
10c4f5: c7 43 30 01 00 00 00 movl $0x1,0x30(%ebx)
_Thread_queue_Enter_critical_section( tq );
_Thread_queue_Extract_priority_helper( tq, the_thread, true );
10c4fc: 50 push %eax
10c4fd: 6a 01 push $0x1
10c4ff: 56 push %esi
10c500: 53 push %ebx
10c501: e8 0a 32 00 00 call 10f710 <_Thread_queue_Extract_priority_helper>
(void) _Thread_queue_Enqueue_priority( tq, the_thread, &level_ignored );
10c506: 83 c4 0c add $0xc,%esp
10c509: 8d 45 e4 lea -0x1c(%ebp),%eax
10c50c: 50 push %eax
10c50d: 56 push %esi
10c50e: 53 push %ebx
10c50f: e8 e4 fd ff ff call 10c2f8 <_Thread_queue_Enqueue_priority>
10c514: 83 c4 10 add $0x10,%esp
}
_ISR_Enable( level );
10c517: 57 push %edi
10c518: 9d popf
}
}
10c519: 8d 65 f4 lea -0xc(%ebp),%esp
10c51c: 5b pop %ebx
10c51d: 5e pop %esi
10c51e: 5f pop %edi
10c51f: 5d pop %ebp
10c520: c3 ret
0010c524 <_Thread_queue_Timeout>:
void _Thread_queue_Timeout(
Objects_Id id,
void *ignored __attribute__((unused))
)
{
10c524: 55 push %ebp
10c525: 89 e5 mov %esp,%ebp
10c527: 83 ec 20 sub $0x20,%esp
Thread_Control *the_thread;
Objects_Locations location;
the_thread = _Thread_Get( id, &location );
10c52a: 8d 45 f4 lea -0xc(%ebp),%eax
10c52d: 50 push %eax
10c52e: ff 75 08 pushl 0x8(%ebp)
10c531: e8 f6 f8 ff ff call 10be2c <_Thread_Get>
switch ( location ) {
10c536: 83 c4 10 add $0x10,%esp
10c539: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
10c53d: 75 1c jne 10c55b <_Thread_queue_Timeout+0x37><== NEVER TAKEN
#if defined(RTEMS_MULTIPROCESSING)
case OBJECTS_REMOTE: /* impossible */
#endif
break;
case OBJECTS_LOCAL:
_Thread_queue_Process_timeout( the_thread );
10c53f: 83 ec 0c sub $0xc,%esp
10c542: 50 push %eax
10c543: e8 78 32 00 00 call 10f7c0 <_Thread_queue_Process_timeout>
*
* This routine decrements the thread dispatch level.
*/
RTEMS_INLINE_ROUTINE uint32_t _Thread_Dispatch_decrement_disable_level(void)
{
_Thread_Dispatch_disable_level--;
10c548: a1 e4 e3 12 00 mov 0x12e3e4,%eax
10c54d: 48 dec %eax
10c54e: a3 e4 e3 12 00 mov %eax,0x12e3e4
return _Thread_Dispatch_disable_level;
10c553: a1 e4 e3 12 00 mov 0x12e3e4,%eax
10c558: 83 c4 10 add $0x10,%esp
_Thread_Unnest_dispatch();
break;
}
}
10c55b: c9 leave
10c55c: c3 ret
00116732 <_Timer_server_Body>:
* @a arg points to the corresponding timer server control block.
*/
static rtems_task _Timer_server_Body(
rtems_task_argument arg
)
{
116732: 55 push %ebp
116733: 89 e5 mov %esp,%ebp
116735: 57 push %edi
116736: 56 push %esi
116737: 53 push %ebx
116738: 83 ec 3c sub $0x3c,%esp
11673b: 8b 5d 08 mov 0x8(%ebp),%ebx
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
11673e: 8d 45 d0 lea -0x30(%ebp),%eax
116741: 8d 55 d4 lea -0x2c(%ebp),%edx
116744: 89 55 d0 mov %edx,-0x30(%ebp)
head->previous = NULL;
116747: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)
tail->previous = head;
11674e: 89 45 d8 mov %eax,-0x28(%ebp)
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
116751: 8d 75 dc lea -0x24(%ebp),%esi
116754: 8d 55 e0 lea -0x20(%ebp),%edx
116757: 89 55 dc mov %edx,-0x24(%ebp)
head->previous = NULL;
11675a: c7 45 e0 00 00 00 00 movl $0x0,-0x20(%ebp)
tail->previous = head;
116761: 89 75 e4 mov %esi,-0x1c(%ebp)
{
/*
* Afterwards all timer inserts are directed to this chain and the interval
* and TOD chains will be no more modified by other parties.
*/
ts->insert_chain = insert_chain;
116764: 8d 45 d0 lea -0x30(%ebp),%eax
116767: 89 43 78 mov %eax,0x78(%ebx)
*/
Watchdog_Interval delta = snapshot - watchdogs->last_snapshot;
watchdogs->last_snapshot = snapshot;
_Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );
11676a: 8d 7b 30 lea 0x30(%ebx),%edi
static void _Timer_server_Process_interval_watchdogs(
Timer_server_Watchdogs *watchdogs,
Chain_Control *fire_chain
)
{
Watchdog_Interval snapshot = _Watchdog_Ticks_since_boot;
11676d: a1 48 7f 14 00 mov 0x147f48,%eax
/*
* We assume adequate unsigned arithmetic here.
*/
Watchdog_Interval delta = snapshot - watchdogs->last_snapshot;
116772: 8b 53 3c mov 0x3c(%ebx),%edx
watchdogs->last_snapshot = snapshot;
116775: 89 43 3c mov %eax,0x3c(%ebx)
_Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );
116778: 51 push %ecx
116779: 56 push %esi
Watchdog_Interval snapshot = _Watchdog_Ticks_since_boot;
/*
* We assume adequate unsigned arithmetic here.
*/
Watchdog_Interval delta = snapshot - watchdogs->last_snapshot;
11677a: 29 d0 sub %edx,%eax
watchdogs->last_snapshot = snapshot;
_Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );
11677c: 50 push %eax
11677d: 57 push %edi
11677e: e8 25 38 00 00 call 119fa8 <_Watchdog_Adjust_to_chain>
116783: 6a 00 push $0x0
116785: 68 00 ca 9a 3b push $0x3b9aca00
11678a: ff 35 14 7e 14 00 pushl 0x147e14
116790: ff 35 10 7e 14 00 pushl 0x147e10
116796: e8 59 3e 01 00 call 12a5f4 <__divdi3>
Timer_server_Watchdogs *watchdogs,
Chain_Control *fire_chain
)
{
Watchdog_Interval snapshot = (Watchdog_Interval) _TOD_Seconds_since_epoch();
Watchdog_Interval last_snapshot = watchdogs->last_snapshot;
11679b: 8b 53 74 mov 0x74(%ebx),%edx
/*
* Process the seconds chain. Start by checking that the Time
* of Day (TOD) has not been set backwards. If it has then
* we want to adjust the watchdogs->Chain to indicate this.
*/
if ( snapshot > last_snapshot ) {
11679e: 83 c4 20 add $0x20,%esp
1167a1: 39 d0 cmp %edx,%eax
1167a3: 76 15 jbe 1167ba <_Timer_server_Body+0x88>
/*
* This path is for normal forward movement and cases where the
* TOD has been set forward.
*/
delta = snapshot - last_snapshot;
_Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );
1167a5: 51 push %ecx
1167a6: 56 push %esi
if ( snapshot > last_snapshot ) {
/*
* This path is for normal forward movement and cases where the
* TOD has been set forward.
*/
delta = snapshot - last_snapshot;
1167a7: 89 c1 mov %eax,%ecx
1167a9: 29 d1 sub %edx,%ecx
_Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );
1167ab: 51 push %ecx
1167ac: 8d 53 68 lea 0x68(%ebx),%edx
1167af: 52 push %edx
1167b0: 89 45 c0 mov %eax,-0x40(%ebp)
1167b3: e8 f0 37 00 00 call 119fa8 <_Watchdog_Adjust_to_chain>
1167b8: eb 14 jmp 1167ce <_Timer_server_Body+0x9c>
} else if ( snapshot < last_snapshot ) {
1167ba: 73 18 jae 1167d4 <_Timer_server_Body+0xa2>
/*
* The current TOD is before the last TOD which indicates that
* TOD has been set backwards.
*/
delta = last_snapshot - snapshot;
_Watchdog_Adjust( &watchdogs->Chain, WATCHDOG_BACKWARD, delta );
1167bc: 51 push %ecx
} else if ( snapshot < last_snapshot ) {
/*
* The current TOD is before the last TOD which indicates that
* TOD has been set backwards.
*/
delta = last_snapshot - snapshot;
1167bd: 29 c2 sub %eax,%edx
_Watchdog_Adjust( &watchdogs->Chain, WATCHDOG_BACKWARD, delta );
1167bf: 52 push %edx
1167c0: 6a 01 push $0x1
1167c2: 8d 53 68 lea 0x68(%ebx),%edx
1167c5: 52 push %edx
1167c6: 89 45 c0 mov %eax,-0x40(%ebp)
1167c9: e8 72 37 00 00 call 119f40 <_Watchdog_Adjust>
1167ce: 83 c4 10 add $0x10,%esp
1167d1: 8b 45 c0 mov -0x40(%ebp),%eax
}
watchdogs->last_snapshot = snapshot;
1167d4: 89 43 74 mov %eax,0x74(%ebx)
)
{
if ( timer->the_class == TIMER_INTERVAL_ON_TASK ) {
_Watchdog_Insert( &ts->Interval_watchdogs.Chain, &timer->Ticker );
} else if ( timer->the_class == TIMER_TIME_OF_DAY_ON_TASK ) {
_Watchdog_Insert( &ts->TOD_watchdogs.Chain, &timer->Ticker );
1167d7: 8d 4b 68 lea 0x68(%ebx),%ecx
1167da: 89 4d c4 mov %ecx,-0x3c(%ebp)
}
static void _Timer_server_Process_insertions( Timer_server_Control *ts )
{
while ( true ) {
Timer_Control *timer = (Timer_Control *) _Chain_Get( ts->insert_chain );
1167dd: 8b 43 78 mov 0x78(%ebx),%eax
1167e0: 83 ec 0c sub $0xc,%esp
1167e3: 50 push %eax
1167e4: e8 cf 07 00 00 call 116fb8 <_Chain_Get>
if ( timer == NULL ) {
1167e9: 83 c4 10 add $0x10,%esp
1167ec: 85 c0 test %eax,%eax
1167ee: 74 29 je 116819 <_Timer_server_Body+0xe7><== ALWAYS TAKEN
static void _Timer_server_Insert_timer(
Timer_server_Control *ts,
Timer_Control *timer
)
{
if ( timer->the_class == TIMER_INTERVAL_ON_TASK ) {
1167f0: 8b 50 38 mov 0x38(%eax),%edx <== NOT EXECUTED
1167f3: 83 fa 01 cmp $0x1,%edx <== NOT EXECUTED
1167f6: 75 09 jne 116801 <_Timer_server_Body+0xcf><== NOT EXECUTED
_Watchdog_Insert( &ts->Interval_watchdogs.Chain, &timer->Ticker );
1167f8: 52 push %edx <== NOT EXECUTED
1167f9: 52 push %edx <== NOT EXECUTED
1167fa: 83 c0 10 add $0x10,%eax <== NOT EXECUTED
1167fd: 50 push %eax <== NOT EXECUTED
1167fe: 57 push %edi <== NOT EXECUTED
1167ff: eb 0e jmp 11680f <_Timer_server_Body+0xdd><== NOT EXECUTED
} else if ( timer->the_class == TIMER_TIME_OF_DAY_ON_TASK ) {
116801: 83 fa 03 cmp $0x3,%edx <== NOT EXECUTED
116804: 75 d7 jne 1167dd <_Timer_server_Body+0xab><== NOT EXECUTED
_Watchdog_Insert( &ts->TOD_watchdogs.Chain, &timer->Ticker );
116806: 51 push %ecx <== NOT EXECUTED
116807: 51 push %ecx <== NOT EXECUTED
116808: 83 c0 10 add $0x10,%eax <== NOT EXECUTED
11680b: 50 push %eax <== NOT EXECUTED
11680c: ff 75 c4 pushl -0x3c(%ebp) <== NOT EXECUTED
11680f: e8 18 38 00 00 call 11a02c <_Watchdog_Insert> <== NOT EXECUTED
116814: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
116817: eb c4 jmp 1167dd <_Timer_server_Body+0xab><== NOT EXECUTED
* of zero it will be processed in the next iteration of the timer server
* body loop.
*/
_Timer_server_Process_insertions( ts );
_ISR_Disable( level );
116819: 9c pushf
11681a: fa cli
11681b: 58 pop %eax
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
11681c: 8d 55 d4 lea -0x2c(%ebp),%edx
if ( _Chain_Is_empty( insert_chain ) ) {
11681f: 39 55 d0 cmp %edx,-0x30(%ebp)
116822: 75 13 jne 116837 <_Timer_server_Body+0x105><== NEVER TAKEN
ts->insert_chain = NULL;
116824: c7 43 78 00 00 00 00 movl $0x0,0x78(%ebx)
_ISR_Enable( level );
11682b: 50 push %eax
11682c: 9d popf
11682d: 8d 7d e0 lea -0x20(%ebp),%edi
_Chain_Initialize_empty( &fire_chain );
while ( true ) {
_Timer_server_Get_watchdogs_that_fire_now( ts, &insert_chain, &fire_chain );
if ( !_Chain_Is_empty( &fire_chain ) ) {
116830: 39 7d dc cmp %edi,-0x24(%ebp)
116833: 75 09 jne 11683e <_Timer_server_Body+0x10c>
116835: eb 39 jmp 116870 <_Timer_server_Body+0x13e>
ts->insert_chain = NULL;
_ISR_Enable( level );
break;
} else {
_ISR_Enable( level );
116837: 50 push %eax <== NOT EXECUTED
116838: 9d popf <== NOT EXECUTED
116839: e9 2f ff ff ff jmp 11676d <_Timer_server_Body+0x3b><== NOT EXECUTED
/*
* It is essential that interrupts are disable here since an interrupt
* service routine may remove a watchdog from the chain.
*/
_ISR_Disable( level );
11683e: 9c pushf
11683f: fa cli
116840: 5a pop %edx
*/
RTEMS_INLINE_ROUTINE const Chain_Node *_Chain_Immutable_first(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_head( the_chain )->next;
116841: 8b 45 dc mov -0x24(%ebp),%eax
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Get_unprotected(
Chain_Control *the_chain
)
{
if ( !_Chain_Is_empty(the_chain))
116844: 39 f8 cmp %edi,%eax
116846: 74 21 je 116869 <_Timer_server_Body+0x137>
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *old_first = head->next;
Chain_Node *new_first = old_first->next;
116848: 8b 08 mov (%eax),%ecx
head->next = new_first;
11684a: 89 4d dc mov %ecx,-0x24(%ebp)
new_first->previous = head;
11684d: 89 71 04 mov %esi,0x4(%ecx)
watchdog = (Watchdog_Control *) _Chain_Get_unprotected( &fire_chain );
if ( watchdog != NULL ) {
watchdog->state = WATCHDOG_INACTIVE;
116850: c7 40 08 00 00 00 00 movl $0x0,0x8(%eax)
_ISR_Enable( level );
116857: 52 push %edx
116858: 9d popf
/*
* The timer server may block here and wait for resources or time.
* The system watchdogs are inactive and will remain inactive since
* the active flag of the timer server is true.
*/
(*watchdog->routine)( watchdog->id, watchdog->user_data );
116859: 52 push %edx
11685a: 52 push %edx
11685b: ff 70 24 pushl 0x24(%eax)
11685e: ff 70 20 pushl 0x20(%eax)
116861: ff 50 1c call *0x1c(%eax)
}
116864: 83 c4 10 add $0x10,%esp
116867: eb d5 jmp 11683e <_Timer_server_Body+0x10c>
watchdog = (Watchdog_Control *) _Chain_Get_unprotected( &fire_chain );
if ( watchdog != NULL ) {
watchdog->state = WATCHDOG_INACTIVE;
_ISR_Enable( level );
} else {
_ISR_Enable( level );
116869: 52 push %edx
11686a: 9d popf
11686b: e9 f4 fe ff ff jmp 116764 <_Timer_server_Body+0x32>
* the active flag of the timer server is true.
*/
(*watchdog->routine)( watchdog->id, watchdog->user_data );
}
} else {
ts->active = false;
116870: c6 43 7c 00 movb $0x0,0x7c(%ebx)
116874: e8 ef fc ff ff call 116568 <_Thread_Dispatch_increment_disable_level>
/*
* Block until there is something to do.
*/
_Thread_Disable_dispatch();
_Thread_Set_state( ts->thread, STATES_DELAYING );
116879: 57 push %edi
11687a: 57 push %edi
11687b: 6a 08 push $0x8
11687d: ff 33 pushl (%ebx)
11687f: e8 f8 32 00 00 call 119b7c <_Thread_Set_state>
_Timer_server_Reset_interval_system_watchdog( ts );
116884: 89 d8 mov %ebx,%eax
116886: e8 f2 fc ff ff call 11657d <_Timer_server_Reset_interval_system_watchdog>
_Timer_server_Reset_tod_system_watchdog( ts );
11688b: 89 d8 mov %ebx,%eax
11688d: e8 31 fd ff ff call 1165c3 <_Timer_server_Reset_tod_system_watchdog>
_Thread_Enable_dispatch();
116892: e8 fd 2a 00 00 call 119394 <_Thread_Enable_dispatch>
ts->active = true;
116897: c6 43 7c 01 movb $0x1,0x7c(%ebx)
static void _Timer_server_Stop_interval_system_watchdog(
Timer_server_Control *ts
)
{
_Watchdog_Remove( &ts->Interval_watchdogs.System_watchdog );
11689b: 8d 43 08 lea 0x8(%ebx),%eax
11689e: 89 04 24 mov %eax,(%esp)
1168a1: e8 9a 38 00 00 call 11a140 <_Watchdog_Remove>
static void _Timer_server_Stop_tod_system_watchdog(
Timer_server_Control *ts
)
{
_Watchdog_Remove( &ts->TOD_watchdogs.System_watchdog );
1168a6: 8d 43 40 lea 0x40(%ebx),%eax
1168a9: 89 04 24 mov %eax,(%esp)
1168ac: e8 8f 38 00 00 call 11a140 <_Watchdog_Remove>
1168b1: 83 c4 10 add $0x10,%esp
1168b4: e9 ab fe ff ff jmp 116764 <_Timer_server_Body+0x32>
00116609 <_Timer_server_Schedule_operation_method>:
static void _Timer_server_Schedule_operation_method(
Timer_server_Control *ts,
Timer_Control *timer
)
{
116609: 55 push %ebp
11660a: 89 e5 mov %esp,%ebp
11660c: 57 push %edi
11660d: 56 push %esi
11660e: 53 push %ebx
11660f: 83 ec 1c sub $0x1c,%esp
116612: 8b 5d 08 mov 0x8(%ebp),%ebx
116615: 8b 7d 0c mov 0xc(%ebp),%edi
if ( ts->insert_chain == NULL ) {
116618: 8b 43 78 mov 0x78(%ebx),%eax
11661b: 85 c0 test %eax,%eax
11661d: 0f 85 fa 00 00 00 jne 11671d <_Timer_server_Schedule_operation_method+0x114><== NEVER TAKEN
#if defined ( __THREAD_DO_NOT_INLINE_DISABLE_DISPATCH__ )
void _Thread_Disable_dispatch( void );
#else
RTEMS_INLINE_ROUTINE void _Thread_Disable_dispatch( void )
{
_Thread_Dispatch_increment_disable_level();
116623: e8 40 ff ff ff call 116568 <_Thread_Dispatch_increment_disable_level>
* being inserted. This could result in an integer overflow.
*/
_Thread_Disable_dispatch();
if ( timer->the_class == TIMER_INTERVAL_ON_TASK ) {
116628: 8b 47 38 mov 0x38(%edi),%eax
11662b: 83 f8 01 cmp $0x1,%eax
11662e: 75 61 jne 116691 <_Timer_server_Schedule_operation_method+0x88>
/*
* We have to advance the last known ticks value of the server and update
* the watchdog chain accordingly.
*/
_ISR_Disable( level );
116630: 9c pushf
116631: fa cli
116632: 8f 45 e0 popl -0x20(%ebp)
snapshot = _Watchdog_Ticks_since_boot;
116635: 8b 15 48 7f 14 00 mov 0x147f48,%edx
last_snapshot = ts->Interval_watchdogs.last_snapshot;
11663b: 8b 4b 3c mov 0x3c(%ebx),%ecx
*/
RTEMS_INLINE_ROUTINE const Chain_Node *_Chain_Immutable_first(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_head( the_chain )->next;
11663e: 8b 43 30 mov 0x30(%ebx),%eax
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
116641: 8d 73 34 lea 0x34(%ebx),%esi
if ( !_Chain_Is_empty( &ts->Interval_watchdogs.Chain ) ) {
116644: 39 f0 cmp %esi,%eax
116646: 74 19 je 116661 <_Timer_server_Schedule_operation_method+0x58>
first_watchdog = _Watchdog_First( &ts->Interval_watchdogs.Chain );
/*
* We assume adequate unsigned arithmetic here.
*/
delta = snapshot - last_snapshot;
116648: 89 d6 mov %edx,%esi
11664a: 29 ce sub %ecx,%esi
11664c: 89 75 e4 mov %esi,-0x1c(%ebp)
delta_interval = first_watchdog->delta_interval;
11664f: 8b 70 10 mov 0x10(%eax),%esi
if (delta_interval > delta) {
delta_interval -= delta;
} else {
delta_interval = 0;
116652: 31 c9 xor %ecx,%ecx
* We assume adequate unsigned arithmetic here.
*/
delta = snapshot - last_snapshot;
delta_interval = first_watchdog->delta_interval;
if (delta_interval > delta) {
116654: 3b 75 e4 cmp -0x1c(%ebp),%esi
116657: 76 05 jbe 11665e <_Timer_server_Schedule_operation_method+0x55>
delta_interval -= delta;
116659: 89 f1 mov %esi,%ecx
11665b: 2b 4d e4 sub -0x1c(%ebp),%ecx
} else {
delta_interval = 0;
}
first_watchdog->delta_interval = delta_interval;
11665e: 89 48 10 mov %ecx,0x10(%eax)
}
ts->Interval_watchdogs.last_snapshot = snapshot;
116661: 89 53 3c mov %edx,0x3c(%ebx)
_ISR_Enable( level );
116664: ff 75 e0 pushl -0x20(%ebp)
116667: 9d popf
_Watchdog_Insert( &ts->Interval_watchdogs.Chain, &timer->Ticker );
116668: 56 push %esi
116669: 56 push %esi
11666a: 8d 47 10 lea 0x10(%edi),%eax
11666d: 50 push %eax
11666e: 8d 43 30 lea 0x30(%ebx),%eax
116671: 50 push %eax
116672: e8 b5 39 00 00 call 11a02c <_Watchdog_Insert>
if ( !ts->active ) {
116677: 8a 43 7c mov 0x7c(%ebx),%al
11667a: 83 c4 10 add $0x10,%esp
11667d: 84 c0 test %al,%al
11667f: 0f 85 8c 00 00 00 jne 116711 <_Timer_server_Schedule_operation_method+0x108>
_Timer_server_Reset_interval_system_watchdog( ts );
116685: 89 d8 mov %ebx,%eax
116687: e8 f1 fe ff ff call 11657d <_Timer_server_Reset_interval_system_watchdog>
11668c: e9 80 00 00 00 jmp 116711 <_Timer_server_Schedule_operation_method+0x108>
}
} else if ( timer->the_class == TIMER_TIME_OF_DAY_ON_TASK ) {
116691: 83 f8 03 cmp $0x3,%eax
116694: 75 7b jne 116711 <_Timer_server_Schedule_operation_method+0x108>
/*
* We have to advance the last known seconds value of the server and update
* the watchdog chain accordingly.
*/
_ISR_Disable( level );
116696: 9c pushf
116697: fa cli
116698: 8f 45 e0 popl -0x20(%ebp)
11669b: 6a 00 push $0x0
11669d: 68 00 ca 9a 3b push $0x3b9aca00
1166a2: ff 35 14 7e 14 00 pushl 0x147e14
1166a8: ff 35 10 7e 14 00 pushl 0x147e10
1166ae: e8 41 3f 01 00 call 12a5f4 <__divdi3>
1166b3: 83 c4 10 add $0x10,%esp
snapshot = (Watchdog_Interval) _TOD_Seconds_since_epoch();
last_snapshot = ts->TOD_watchdogs.last_snapshot;
1166b6: 8b 53 74 mov 0x74(%ebx),%edx
*/
RTEMS_INLINE_ROUTINE const Chain_Node *_Chain_Immutable_first(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_head( the_chain )->next;
1166b9: 8b 4b 68 mov 0x68(%ebx),%ecx
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
1166bc: 8d 73 6c lea 0x6c(%ebx),%esi
if ( !_Chain_Is_empty( &ts->TOD_watchdogs.Chain ) ) {
1166bf: 39 f1 cmp %esi,%ecx
1166c1: 74 27 je 1166ea <_Timer_server_Schedule_operation_method+0xe1>
first_watchdog = _Watchdog_First( &ts->TOD_watchdogs.Chain );
delta_interval = first_watchdog->delta_interval;
1166c3: 8b 71 10 mov 0x10(%ecx),%esi
1166c6: 89 75 dc mov %esi,-0x24(%ebp)
if ( snapshot > last_snapshot ) {
1166c9: 39 d0 cmp %edx,%eax
1166cb: 76 15 jbe 1166e2 <_Timer_server_Schedule_operation_method+0xd9>
/*
* We advanced in time.
*/
delta = snapshot - last_snapshot;
1166cd: 89 c6 mov %eax,%esi
1166cf: 29 d6 sub %edx,%esi
1166d1: 89 75 e4 mov %esi,-0x1c(%ebp)
if (delta_interval > delta) {
delta_interval -= delta;
} else {
delta_interval = 0;
1166d4: 31 d2 xor %edx,%edx
if ( snapshot > last_snapshot ) {
/*
* We advanced in time.
*/
delta = snapshot - last_snapshot;
if (delta_interval > delta) {
1166d6: 39 75 dc cmp %esi,-0x24(%ebp)
1166d9: 76 0c jbe 1166e7 <_Timer_server_Schedule_operation_method+0xde><== NEVER TAKEN
delta_interval -= delta;
1166db: 8b 55 dc mov -0x24(%ebp),%edx
1166de: 29 f2 sub %esi,%edx
1166e0: eb 05 jmp 1166e7 <_Timer_server_Schedule_operation_method+0xde>
}
} else {
/*
* Someone put us in the past.
*/
delta = last_snapshot - snapshot;
1166e2: 03 55 dc add -0x24(%ebp),%edx
delta_interval += delta;
1166e5: 29 c2 sub %eax,%edx
}
first_watchdog->delta_interval = delta_interval;
1166e7: 89 51 10 mov %edx,0x10(%ecx)
}
ts->TOD_watchdogs.last_snapshot = snapshot;
1166ea: 89 43 74 mov %eax,0x74(%ebx)
_ISR_Enable( level );
1166ed: ff 75 e0 pushl -0x20(%ebp)
1166f0: 9d popf
_Watchdog_Insert( &ts->TOD_watchdogs.Chain, &timer->Ticker );
1166f1: 51 push %ecx
1166f2: 51 push %ecx
1166f3: 8d 47 10 lea 0x10(%edi),%eax
1166f6: 50 push %eax
1166f7: 8d 43 68 lea 0x68(%ebx),%eax
1166fa: 50 push %eax
1166fb: e8 2c 39 00 00 call 11a02c <_Watchdog_Insert>
if ( !ts->active ) {
116700: 8a 43 7c mov 0x7c(%ebx),%al
116703: 83 c4 10 add $0x10,%esp
116706: 84 c0 test %al,%al
116708: 75 07 jne 116711 <_Timer_server_Schedule_operation_method+0x108>
_Timer_server_Reset_tod_system_watchdog( ts );
11670a: 89 d8 mov %ebx,%eax
11670c: e8 b2 fe ff ff call 1165c3 <_Timer_server_Reset_tod_system_watchdog>
* critical section. We have to use the protected chain methods because
* we may be interrupted by a higher priority interrupt.
*/
_Chain_Append( ts->insert_chain, &timer->Object.Node );
}
}
116711: 8d 65 f4 lea -0xc(%ebp),%esp
116714: 5b pop %ebx
116715: 5e pop %esi
116716: 5f pop %edi
116717: 5d pop %ebp
if ( !ts->active ) {
_Timer_server_Reset_tod_system_watchdog( ts );
}
}
_Thread_Enable_dispatch();
116718: e9 77 2c 00 00 jmp 119394 <_Thread_Enable_dispatch>
* server is not preemptible, so we must be in interrupt context here. No
* thread dispatch will happen until the timer server finishes its
* critical section. We have to use the protected chain methods because
* we may be interrupted by a higher priority interrupt.
*/
_Chain_Append( ts->insert_chain, &timer->Object.Node );
11671d: 8b 43 78 mov 0x78(%ebx),%eax <== NOT EXECUTED
116720: 89 7d 0c mov %edi,0xc(%ebp) <== NOT EXECUTED
116723: 89 45 08 mov %eax,0x8(%ebp) <== NOT EXECUTED
}
}
116726: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
116729: 5b pop %ebx <== NOT EXECUTED
11672a: 5e pop %esi <== NOT EXECUTED
11672b: 5f pop %edi <== NOT EXECUTED
11672c: 5d pop %ebp <== NOT EXECUTED
* server is not preemptible, so we must be in interrupt context here. No
* thread dispatch will happen until the timer server finishes its
* critical section. We have to use the protected chain methods because
* we may be interrupted by a higher priority interrupt.
*/
_Chain_Append( ts->insert_chain, &timer->Object.Node );
11672d: e9 62 08 00 00 jmp 116f94 <_Chain_Append> <== NOT EXECUTED
0010d974 <_Timestamp64_Divide>:
const Timestamp64_Control *_lhs,
const Timestamp64_Control *_rhs,
uint32_t *_ival_percentage,
uint32_t *_fval_percentage
)
{
10d974: 55 push %ebp
10d975: 89 e5 mov %esp,%ebp
10d977: 57 push %edi
10d978: 56 push %esi
10d979: 53 push %ebx
10d97a: 83 ec 0c sub $0xc,%esp
10d97d: 8b 55 08 mov 0x8(%ebp),%edx
Timestamp64_Control answer;
if ( *_rhs == 0 ) {
10d980: 8b 45 0c mov 0xc(%ebp),%eax
10d983: 8b 08 mov (%eax),%ecx
10d985: 8b 58 04 mov 0x4(%eax),%ebx
10d988: 89 d8 mov %ebx,%eax
10d98a: 09 c8 or %ecx,%eax
10d98c: 75 14 jne 10d9a2 <_Timestamp64_Divide+0x2e><== ALWAYS TAKEN
*_ival_percentage = 0;
10d98e: 8b 55 10 mov 0x10(%ebp),%edx <== NOT EXECUTED
10d991: c7 02 00 00 00 00 movl $0x0,(%edx) <== NOT EXECUTED
*_fval_percentage = 0;
10d997: 8b 45 14 mov 0x14(%ebp),%eax <== NOT EXECUTED
10d99a: c7 00 00 00 00 00 movl $0x0,(%eax) <== NOT EXECUTED
return;
10d9a0: eb 4c jmp 10d9ee <_Timestamp64_Divide+0x7a><== NOT EXECUTED
* This looks odd but gives the results the proper precision.
*
* TODO: Rounding on the last digit of the fval.
*/
answer = (*_lhs * 100000) / *_rhs;
10d9a2: 69 72 04 a0 86 01 00 imul $0x186a0,0x4(%edx),%esi
10d9a9: b8 a0 86 01 00 mov $0x186a0,%eax
10d9ae: f7 22 mull (%edx)
10d9b0: 01 f2 add %esi,%edx
10d9b2: 53 push %ebx
10d9b3: 51 push %ecx
10d9b4: 52 push %edx
10d9b5: 50 push %eax
10d9b6: e8 5d 10 01 00 call 11ea18 <__divdi3>
10d9bb: 83 c4 10 add $0x10,%esp
10d9be: 89 c6 mov %eax,%esi
10d9c0: 89 d7 mov %edx,%edi
*_ival_percentage = answer / 1000;
10d9c2: 6a 00 push $0x0
10d9c4: 68 e8 03 00 00 push $0x3e8
10d9c9: 52 push %edx
10d9ca: 50 push %eax
10d9cb: e8 48 10 01 00 call 11ea18 <__divdi3>
10d9d0: 83 c4 10 add $0x10,%esp
10d9d3: 8b 55 10 mov 0x10(%ebp),%edx
10d9d6: 89 02 mov %eax,(%edx)
*_fval_percentage = answer % 1000;
10d9d8: 6a 00 push $0x0
10d9da: 68 e8 03 00 00 push $0x3e8
10d9df: 57 push %edi
10d9e0: 56 push %esi
10d9e1: e8 86 11 01 00 call 11eb6c <__moddi3>
10d9e6: 83 c4 10 add $0x10,%esp
10d9e9: 8b 55 14 mov 0x14(%ebp),%edx
10d9ec: 89 02 mov %eax,(%edx)
}
10d9ee: 8d 65 f4 lea -0xc(%ebp),%esp
10d9f1: 5b pop %ebx
10d9f2: 5e pop %esi
10d9f3: 5f pop %edi
10d9f4: 5d pop %ebp
10d9f5: c3 ret
0010c6ec <_User_extensions_Handler_initialization>:
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <string.h>
void _User_extensions_Handler_initialization(void)
{
10c6ec: 55 push %ebp
10c6ed: 89 e5 mov %esp,%ebp
10c6ef: 57 push %edi
10c6f0: 56 push %esi
10c6f1: 53 push %ebx
10c6f2: 83 ec 1c sub $0x1c,%esp
User_extensions_Control *extension;
uint32_t i;
uint32_t number_of_extensions;
User_extensions_Table *initial_extensions;
number_of_extensions = Configuration.number_of_initial_extensions;
10c6f5: a1 80 a1 12 00 mov 0x12a180,%eax
10c6fa: 89 45 e4 mov %eax,-0x1c(%ebp)
initial_extensions = Configuration.User_extension_table;
10c6fd: 8b 1d 84 a1 12 00 mov 0x12a184,%ebx
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
10c703: c7 05 90 e5 12 00 94 movl $0x12e594,0x12e590
10c70a: e5 12 00
head->previous = NULL;
10c70d: c7 05 94 e5 12 00 00 movl $0x0,0x12e594
10c714: 00 00 00
tail->previous = head;
10c717: c7 05 98 e5 12 00 90 movl $0x12e590,0x12e598
10c71e: e5 12 00
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
10c721: c7 05 e8 e3 12 00 ec movl $0x12e3ec,0x12e3e8
10c728: e3 12 00
head->previous = NULL;
10c72b: c7 05 ec e3 12 00 00 movl $0x0,0x12e3ec
10c732: 00 00 00
tail->previous = head;
10c735: c7 05 f0 e3 12 00 e8 movl $0x12e3e8,0x12e3f0
10c73c: e3 12 00
_Chain_Initialize_empty( &_User_extensions_List );
_Chain_Initialize_empty( &_User_extensions_Switches_list );
if ( initial_extensions ) {
10c73f: 85 db test %ebx,%ebx
10c741: 74 4f je 10c792 <_User_extensions_Handler_initialization+0xa6><== NEVER TAKEN
extension = (User_extensions_Control *)
_Workspace_Allocate_or_fatal_error(
10c743: 6b f0 34 imul $0x34,%eax,%esi
_Chain_Initialize_empty( &_User_extensions_List );
_Chain_Initialize_empty( &_User_extensions_Switches_list );
if ( initial_extensions ) {
extension = (User_extensions_Control *)
10c746: 83 ec 0c sub $0xc,%esp
10c749: 56 push %esi
10c74a: e8 26 04 00 00 call 10cb75 <_Workspace_Allocate_or_fatal_error>
10c74f: 89 c2 mov %eax,%edx
_Workspace_Allocate_or_fatal_error(
number_of_extensions * sizeof( User_extensions_Control )
);
memset (
10c751: 31 c0 xor %eax,%eax
10c753: 89 d7 mov %edx,%edi
10c755: 89 f1 mov %esi,%ecx
10c757: f3 aa rep stos %al,%es:(%edi)
extension,
0,
number_of_extensions * sizeof( User_extensions_Control )
);
for ( i = 0 ; i < number_of_extensions ; i++ ) {
10c759: 83 c4 10 add $0x10,%esp
10c75c: 31 c0 xor %eax,%eax
10c75e: eb 2d jmp 10c78d <_User_extensions_Handler_initialization+0xa1>
#include <rtems/config.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <string.h>
void _User_extensions_Handler_initialization(void)
10c760: 89 c6 mov %eax,%esi
10c762: c1 e6 05 shl $0x5,%esi
RTEMS_INLINE_ROUTINE void _User_extensions_Add_set_with_table(
User_extensions_Control *extension,
const User_extensions_Table *extension_table
)
{
extension->Callouts = *extension_table;
10c765: 8d 7a 14 lea 0x14(%edx),%edi
10c768: 01 de add %ebx,%esi
10c76a: b9 08 00 00 00 mov $0x8,%ecx
10c76f: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
_User_extensions_Add_set( extension );
10c771: 83 ec 0c sub $0xc,%esp
10c774: 52 push %edx
10c775: 89 45 dc mov %eax,-0x24(%ebp)
10c778: 89 55 e0 mov %edx,-0x20(%ebp)
10c77b: e8 e4 30 00 00 call 10f864 <_User_extensions_Add_set>
number_of_extensions * sizeof( User_extensions_Control )
);
for ( i = 0 ; i < number_of_extensions ; i++ ) {
_User_extensions_Add_set_with_table (extension, &initial_extensions[i]);
extension++;
10c780: 8b 55 e0 mov -0x20(%ebp),%edx
10c783: 83 c2 34 add $0x34,%edx
extension,
0,
number_of_extensions * sizeof( User_extensions_Control )
);
for ( i = 0 ; i < number_of_extensions ; i++ ) {
10c786: 8b 45 dc mov -0x24(%ebp),%eax
10c789: 40 inc %eax
10c78a: 83 c4 10 add $0x10,%esp
10c78d: 3b 45 e4 cmp -0x1c(%ebp),%eax
10c790: 75 ce jne 10c760 <_User_extensions_Handler_initialization+0x74>
_User_extensions_Add_set_with_table (extension, &initial_extensions[i]);
extension++;
}
}
}
10c792: 8d 65 f4 lea -0xc(%ebp),%esp
10c795: 5b pop %ebx
10c796: 5e pop %esi
10c797: 5f pop %edi
10c798: 5d pop %ebp
10c799: c3 ret
0010dc4c <_Watchdog_Adjust>:
void _Watchdog_Adjust(
Chain_Control *header,
Watchdog_Adjust_directions direction,
Watchdog_Interval units
)
{
10dc4c: 55 push %ebp
10dc4d: 89 e5 mov %esp,%ebp
10dc4f: 57 push %edi
10dc50: 56 push %esi
10dc51: 53 push %ebx
10dc52: 83 ec 0c sub $0xc,%esp
10dc55: 8b 75 08 mov 0x8(%ebp),%esi
10dc58: 8b 4d 0c mov 0xc(%ebp),%ecx
10dc5b: 8b 5d 10 mov 0x10(%ebp),%ebx
ISR_Level level;
_ISR_Disable( level );
10dc5e: 9c pushf
10dc5f: fa cli
10dc60: 58 pop %eax
*/
RTEMS_INLINE_ROUTINE const Chain_Node *_Chain_Immutable_first(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_head( the_chain )->next;
10dc61: 8b 16 mov (%esi),%edx
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
10dc63: 8d 7e 04 lea 0x4(%esi),%edi
* hence the compiler must not assume *header to remain
* unmodified across that call.
*
* Till Straumann, 7/2003
*/
if ( !_Chain_Is_empty( header ) ) {
10dc66: 39 fa cmp %edi,%edx
10dc68: 74 3e je 10dca8 <_Watchdog_Adjust+0x5c>
switch ( direction ) {
10dc6a: 85 c9 test %ecx,%ecx
10dc6c: 74 36 je 10dca4 <_Watchdog_Adjust+0x58>
10dc6e: 49 dec %ecx
10dc6f: 75 37 jne 10dca8 <_Watchdog_Adjust+0x5c> <== NEVER TAKEN
case WATCHDOG_BACKWARD:
_Watchdog_First( header )->delta_interval += units;
10dc71: 01 5a 10 add %ebx,0x10(%edx)
break;
10dc74: eb 32 jmp 10dca8 <_Watchdog_Adjust+0x5c>
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_First(
Chain_Control *the_chain
)
{
return _Chain_Head( the_chain )->next;
10dc76: 8b 16 mov (%esi),%edx
case WATCHDOG_FORWARD:
while ( units ) {
if ( units < _Watchdog_First( header )->delta_interval ) {
10dc78: 8b 4a 10 mov 0x10(%edx),%ecx
10dc7b: 39 cb cmp %ecx,%ebx
10dc7d: 73 07 jae 10dc86 <_Watchdog_Adjust+0x3a>
_Watchdog_First( header )->delta_interval -= units;
10dc7f: 29 d9 sub %ebx,%ecx
10dc81: 89 4a 10 mov %ecx,0x10(%edx)
break;
10dc84: eb 22 jmp 10dca8 <_Watchdog_Adjust+0x5c>
} else {
units -= _Watchdog_First( header )->delta_interval;
10dc86: 29 cb sub %ecx,%ebx
_Watchdog_First( header )->delta_interval = 1;
10dc88: c7 42 10 01 00 00 00 movl $0x1,0x10(%edx)
_ISR_Enable( level );
10dc8f: 50 push %eax
10dc90: 9d popf
_Watchdog_Tickle( header );
10dc91: 83 ec 0c sub $0xc,%esp
10dc94: 56 push %esi
10dc95: e8 96 01 00 00 call 10de30 <_Watchdog_Tickle>
_ISR_Disable( level );
10dc9a: 9c pushf
10dc9b: fa cli
10dc9c: 58 pop %eax
if ( _Chain_Is_empty( header ) )
10dc9d: 83 c4 10 add $0x10,%esp
10dca0: 39 3e cmp %edi,(%esi)
10dca2: 74 04 je 10dca8 <_Watchdog_Adjust+0x5c>
switch ( direction ) {
case WATCHDOG_BACKWARD:
_Watchdog_First( header )->delta_interval += units;
break;
case WATCHDOG_FORWARD:
while ( units ) {
10dca4: 85 db test %ebx,%ebx
10dca6: 75 ce jne 10dc76 <_Watchdog_Adjust+0x2a> <== ALWAYS TAKEN
}
break;
}
}
_ISR_Enable( level );
10dca8: 50 push %eax
10dca9: 9d popf
}
10dcaa: 8d 65 f4 lea -0xc(%ebp),%esp
10dcad: 5b pop %ebx
10dcae: 5e pop %esi
10dcaf: 5f pop %edi
10dcb0: 5d pop %ebp
10dcb1: c3 ret
0010ca18 <_Watchdog_Remove>:
*/
Watchdog_States _Watchdog_Remove(
Watchdog_Control *the_watchdog
)
{
10ca18: 55 push %ebp
10ca19: 89 e5 mov %esp,%ebp
10ca1b: 56 push %esi
10ca1c: 53 push %ebx
10ca1d: 8b 55 08 mov 0x8(%ebp),%edx
ISR_Level level;
Watchdog_States previous_state;
Watchdog_Control *next_watchdog;
_ISR_Disable( level );
10ca20: 9c pushf
10ca21: fa cli
10ca22: 5e pop %esi
previous_state = the_watchdog->state;
10ca23: 8b 42 08 mov 0x8(%edx),%eax
switch ( previous_state ) {
10ca26: 83 f8 01 cmp $0x1,%eax
10ca29: 74 09 je 10ca34 <_Watchdog_Remove+0x1c>
10ca2b: 72 42 jb 10ca6f <_Watchdog_Remove+0x57>
10ca2d: 83 f8 03 cmp $0x3,%eax
10ca30: 77 3d ja 10ca6f <_Watchdog_Remove+0x57> <== NEVER TAKEN
10ca32: eb 09 jmp 10ca3d <_Watchdog_Remove+0x25>
/*
* It is not actually on the chain so just change the state and
* the Insert operation we interrupted will be aborted.
*/
the_watchdog->state = WATCHDOG_INACTIVE;
10ca34: c7 42 08 00 00 00 00 movl $0x0,0x8(%edx)
break;
10ca3b: eb 32 jmp 10ca6f <_Watchdog_Remove+0x57>
case WATCHDOG_ACTIVE:
case WATCHDOG_REMOVE_IT:
the_watchdog->state = WATCHDOG_INACTIVE;
10ca3d: c7 42 08 00 00 00 00 movl $0x0,0x8(%edx)
}
the_watchdog->stop_time = _Watchdog_Ticks_since_boot;
_ISR_Enable( level );
return( previous_state );
}
10ca44: 8b 0a mov (%edx),%ecx
case WATCHDOG_REMOVE_IT:
the_watchdog->state = WATCHDOG_INACTIVE;
next_watchdog = _Watchdog_Next( the_watchdog );
if ( _Watchdog_Next(next_watchdog) )
10ca46: 83 39 00 cmpl $0x0,(%ecx)
10ca49: 74 06 je 10ca51 <_Watchdog_Remove+0x39>
next_watchdog->delta_interval += the_watchdog->delta_interval;
10ca4b: 8b 5a 10 mov 0x10(%edx),%ebx
10ca4e: 01 59 10 add %ebx,0x10(%ecx)
if ( _Watchdog_Sync_count )
10ca51: 8b 1d d4 e4 12 00 mov 0x12e4d4,%ebx
10ca57: 85 db test %ebx,%ebx
10ca59: 74 0c je 10ca67 <_Watchdog_Remove+0x4f>
_Watchdog_Sync_level = _ISR_Nest_level;
10ca5b: 8b 1d e8 e8 12 00 mov 0x12e8e8,%ebx
10ca61: 89 1d 74 e4 12 00 mov %ebx,0x12e474
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
previous = the_node->previous;
10ca67: 8b 5a 04 mov 0x4(%edx),%ebx
next->previous = previous;
10ca6a: 89 59 04 mov %ebx,0x4(%ecx)
previous->next = next;
10ca6d: 89 0b mov %ecx,(%ebx)
_Chain_Extract_unprotected( &the_watchdog->Node );
break;
}
the_watchdog->stop_time = _Watchdog_Ticks_since_boot;
10ca6f: 8b 0d d8 e4 12 00 mov 0x12e4d8,%ecx
10ca75: 89 4a 18 mov %ecx,0x18(%edx)
_ISR_Enable( level );
10ca78: 56 push %esi
10ca79: 9d popf
return( previous_state );
}
10ca7a: 5b pop %ebx
10ca7b: 5e pop %esi
10ca7c: 5d pop %ebp
10ca7d: c3 ret
001124df <_fat_block_read>:
uint32_t start,
uint32_t offset,
uint32_t count,
void *buff
)
{
1124df: 55 push %ebp
1124e0: 89 e5 mov %esp,%ebp
1124e2: 57 push %edi
1124e3: 56 push %esi
1124e4: 53 push %ebx
1124e5: 83 ec 2c sub $0x2c,%esp
int rc = RC_OK;
ssize_t cmpltd = 0;
uint32_t blk = start;
uint32_t ofs = offset;
rtems_bdbuf_buffer *block = NULL;
1124e8: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
)
{
int rc = RC_OK;
ssize_t cmpltd = 0;
uint32_t blk = start;
uint32_t ofs = offset;
1124ef: 8b 75 10 mov 0x10(%ebp),%esi
void *buff
)
{
int rc = RC_OK;
ssize_t cmpltd = 0;
uint32_t blk = start;
1124f2: 8b 45 0c mov 0xc(%ebp),%eax
1124f5: 89 45 d4 mov %eax,-0x2c(%ebp)
uint32_t count,
void *buff
)
{
int rc = RC_OK;
ssize_t cmpltd = 0;
1124f8: 31 db xor %ebx,%ebx
uint32_t blk = start;
uint32_t ofs = offset;
rtems_bdbuf_buffer *block = NULL;
uint32_t c = 0;
while (count > 0)
1124fa: eb 43 jmp 11253f <_fat_block_read+0x60>
{
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_READ, &block);
1124fc: 8d 45 e4 lea -0x1c(%ebp),%eax
1124ff: 50 push %eax
112500: 6a 01 push $0x1
112502: ff 75 d4 pushl -0x2c(%ebp)
112505: ff 75 08 pushl 0x8(%ebp)
112508: e8 f7 fc ff ff call 112204 <fat_buf_access>
if (rc != RC_OK)
11250d: 83 c4 10 add $0x10,%esp
112510: 85 c0 test %eax,%eax
112512: 75 33 jne 112547 <_fat_block_read+0x68> <== NEVER TAKEN
return -1;
c = MIN(count, (fs_info->vol.bps - ofs));
112514: 8b 45 08 mov 0x8(%ebp),%eax
112517: 0f b7 10 movzwl (%eax),%edx
11251a: 29 f2 sub %esi,%edx
11251c: 3b 55 14 cmp 0x14(%ebp),%edx
11251f: 76 03 jbe 112524 <_fat_block_read+0x45>
112521: 8b 55 14 mov 0x14(%ebp),%edx
memcpy((buff + cmpltd), (block->buffer + ofs), c);
112524: 8b 45 18 mov 0x18(%ebp),%eax
112527: 01 d8 add %ebx,%eax
112529: 8b 4d e4 mov -0x1c(%ebp),%ecx
11252c: 03 71 1c add 0x1c(%ecx),%esi
11252f: 89 c7 mov %eax,%edi
112531: 89 d1 mov %edx,%ecx
112533: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
count -= c;
112535: 29 55 14 sub %edx,0x14(%ebp)
cmpltd += c;
112538: 01 d3 add %edx,%ebx
blk++;
11253a: ff 45 d4 incl -0x2c(%ebp)
ofs = 0;
11253d: 31 f6 xor %esi,%esi
uint32_t blk = start;
uint32_t ofs = offset;
rtems_bdbuf_buffer *block = NULL;
uint32_t c = 0;
while (count > 0)
11253f: 83 7d 14 00 cmpl $0x0,0x14(%ebp)
112543: 75 b7 jne 1124fc <_fat_block_read+0x1d>
112545: eb 03 jmp 11254a <_fat_block_read+0x6b>
{
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_READ, &block);
if (rc != RC_OK)
return -1;
112547: 83 cb ff or $0xffffffff,%ebx <== NOT EXECUTED
cmpltd += c;
blk++;
ofs = 0;
}
return cmpltd;
}
11254a: 89 d8 mov %ebx,%eax
11254c: 8d 65 f4 lea -0xc(%ebp),%esp
11254f: 5b pop %ebx
112550: 5e pop %esi
112551: 5f pop %edi
112552: 5d pop %ebp
112553: c3 ret
00112554 <_fat_block_write>:
fat_fs_info_t *fs_info,
uint32_t start,
uint32_t offset,
uint32_t count,
const void *buff)
{
112554: 55 push %ebp
112555: 89 e5 mov %esp,%ebp
112557: 57 push %edi
112558: 56 push %esi
112559: 53 push %ebx
11255a: 83 ec 2c sub $0x2c,%esp
int rc = RC_OK;
ssize_t cmpltd = 0;
uint32_t blk = start;
uint32_t ofs = offset;
rtems_bdbuf_buffer *block = NULL;
11255d: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
const void *buff)
{
int rc = RC_OK;
ssize_t cmpltd = 0;
uint32_t blk = start;
uint32_t ofs = offset;
112564: 8b 75 10 mov 0x10(%ebp),%esi
uint32_t count,
const void *buff)
{
int rc = RC_OK;
ssize_t cmpltd = 0;
uint32_t blk = start;
112567: 8b 55 0c mov 0xc(%ebp),%edx
uint32_t offset,
uint32_t count,
const void *buff)
{
int rc = RC_OK;
ssize_t cmpltd = 0;
11256a: 31 db xor %ebx,%ebx
uint32_t blk = start;
uint32_t ofs = offset;
rtems_bdbuf_buffer *block = NULL;
uint32_t c = 0;
while(count > 0)
11256c: eb 67 jmp 1125d5 <_fat_block_write+0x81>
{
c = MIN(count, (fs_info->vol.bps - ofs));
11256e: 8b 4d 08 mov 0x8(%ebp),%ecx
112571: 0f b7 01 movzwl (%ecx),%eax
112574: 89 c1 mov %eax,%ecx
112576: 29 f1 sub %esi,%ecx
112578: 89 4d d4 mov %ecx,-0x2c(%ebp)
11257b: 8b 4d 14 mov 0x14(%ebp),%ecx
11257e: 39 4d d4 cmp %ecx,-0x2c(%ebp)
112581: 76 03 jbe 112586 <_fat_block_write+0x32>
112583: 89 4d d4 mov %ecx,-0x2c(%ebp)
if (c == fs_info->vol.bps)
112586: 39 45 d4 cmp %eax,-0x2c(%ebp)
112589: 75 08 jne 112593 <_fat_block_write+0x3f>
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_GET, &block);
11258b: 8d 45 e4 lea -0x1c(%ebp),%eax
11258e: 50 push %eax
11258f: 6a 02 push $0x2
112591: eb 06 jmp 112599 <_fat_block_write+0x45>
else
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_READ, &block);
112593: 8d 4d e4 lea -0x1c(%ebp),%ecx
112596: 51 push %ecx
112597: 6a 01 push $0x1
112599: 52 push %edx
11259a: ff 75 08 pushl 0x8(%ebp)
11259d: 89 55 d0 mov %edx,-0x30(%ebp)
1125a0: e8 5f fc ff ff call 112204 <fat_buf_access>
1125a5: 83 c4 10 add $0x10,%esp
1125a8: 8b 55 d0 mov -0x30(%ebp),%edx
if (rc != RC_OK)
1125ab: 85 c0 test %eax,%eax
1125ad: 75 2e jne 1125dd <_fat_block_write+0x89> <== NEVER TAKEN
return -1;
memcpy((block->buffer + ofs), (buff + cmpltd), c);
1125af: 8b 45 e4 mov -0x1c(%ebp),%eax
1125b2: 8b 40 1c mov 0x1c(%eax),%eax
1125b5: 01 f0 add %esi,%eax
1125b7: 8b 75 18 mov 0x18(%ebp),%esi
1125ba: 01 de add %ebx,%esi
1125bc: 89 c7 mov %eax,%edi
1125be: 8b 4d d4 mov -0x2c(%ebp),%ecx
1125c1: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
}
static inline void
fat_buf_mark_modified(fat_fs_info_t *fs_info)
{
fs_info->c.modified = true;
1125c3: 8b 45 08 mov 0x8(%ebp),%eax
1125c6: c6 40 7c 01 movb $0x1,0x7c(%eax)
fat_buf_mark_modified(fs_info);
count -= c;
1125ca: 8b 4d d4 mov -0x2c(%ebp),%ecx
1125cd: 29 4d 14 sub %ecx,0x14(%ebp)
cmpltd +=c;
1125d0: 01 cb add %ecx,%ebx
blk++;
1125d2: 42 inc %edx
ofs = 0;
1125d3: 31 f6 xor %esi,%esi
uint32_t blk = start;
uint32_t ofs = offset;
rtems_bdbuf_buffer *block = NULL;
uint32_t c = 0;
while(count > 0)
1125d5: 83 7d 14 00 cmpl $0x0,0x14(%ebp)
1125d9: 75 93 jne 11256e <_fat_block_write+0x1a>
1125db: eb 03 jmp 1125e0 <_fat_block_write+0x8c>
if (c == fs_info->vol.bps)
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_GET, &block);
else
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_READ, &block);
if (rc != RC_OK)
return -1;
1125dd: 83 cb ff or $0xffffffff,%ebx <== NOT EXECUTED
cmpltd +=c;
blk++;
ofs = 0;
}
return cmpltd;
}
1125e0: 89 d8 mov %ebx,%eax
1125e2: 8d 65 f4 lea -0xc(%ebp),%esp
1125e5: 5b pop %ebx
1125e6: 5e pop %esi
1125e7: 5f pop %edi
1125e8: 5d pop %ebp
1125e9: c3 ret
001125ea <_fat_block_zero>:
_fat_block_zero(
fat_fs_info_t *fs_info,
uint32_t start,
uint32_t offset,
uint32_t count)
{
1125ea: 55 push %ebp
1125eb: 89 e5 mov %esp,%ebp
1125ed: 57 push %edi
1125ee: 56 push %esi
1125ef: 53 push %ebx
1125f0: 83 ec 1c sub $0x1c,%esp
int rc = RC_OK;
uint32_t blk = start;
uint32_t ofs = offset;
rtems_bdbuf_buffer *block = NULL;
1125f3: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
uint32_t offset,
uint32_t count)
{
int rc = RC_OK;
uint32_t blk = start;
uint32_t ofs = offset;
1125fa: 8b 7d 10 mov 0x10(%ebp),%edi
uint32_t start,
uint32_t offset,
uint32_t count)
{
int rc = RC_OK;
uint32_t blk = start;
1125fd: 8b 75 0c mov 0xc(%ebp),%esi
uint32_t ofs = offset;
rtems_bdbuf_buffer *block = NULL;
uint32_t c = 0;
while(count > 0)
112600: eb 51 jmp 112653 <_fat_block_zero+0x69>
{
c = MIN(count, (fs_info->vol.bps - ofs));
112602: 8b 55 08 mov 0x8(%ebp),%edx
112605: 0f b7 02 movzwl (%edx),%eax
112608: 89 c3 mov %eax,%ebx
11260a: 29 fb sub %edi,%ebx
11260c: 3b 5d 14 cmp 0x14(%ebp),%ebx
11260f: 76 03 jbe 112614 <_fat_block_zero+0x2a> <== ALWAYS TAKEN
112611: 8b 5d 14 mov 0x14(%ebp),%ebx <== NOT EXECUTED
if (c == fs_info->vol.bps)
112614: 39 c3 cmp %eax,%ebx
112616: 75 08 jne 112620 <_fat_block_zero+0x36>
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_GET, &block);
112618: 8d 45 e4 lea -0x1c(%ebp),%eax
11261b: 50 push %eax
11261c: 6a 02 push $0x2
11261e: eb 06 jmp 112626 <_fat_block_zero+0x3c>
else
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_READ, &block);
112620: 8d 55 e4 lea -0x1c(%ebp),%edx
112623: 52 push %edx
112624: 6a 01 push $0x1
112626: 56 push %esi
112627: ff 75 08 pushl 0x8(%ebp)
11262a: e8 d5 fb ff ff call 112204 <fat_buf_access>
11262f: 83 c4 10 add $0x10,%esp
if (rc != RC_OK)
112632: 85 c0 test %eax,%eax
112634: 75 27 jne 11265d <_fat_block_zero+0x73> <== NEVER TAKEN
return -1;
memset((block->buffer + ofs), 0, c);
112636: 8b 45 e4 mov -0x1c(%ebp),%eax
112639: 8b 50 1c mov 0x1c(%eax),%edx
11263c: 01 fa add %edi,%edx
11263e: 31 c0 xor %eax,%eax
112640: 89 d7 mov %edx,%edi
112642: 89 d9 mov %ebx,%ecx
112644: f3 aa rep stos %al,%es:(%edi)
112646: 8b 55 08 mov 0x8(%ebp),%edx
112649: c6 42 7c 01 movb $0x1,0x7c(%edx)
fat_buf_mark_modified(fs_info);
count -= c;
11264d: 29 5d 14 sub %ebx,0x14(%ebp)
blk++;
112650: 46 inc %esi
ofs = 0;
112651: 31 ff xor %edi,%edi
uint32_t blk = start;
uint32_t ofs = offset;
rtems_bdbuf_buffer *block = NULL;
uint32_t c = 0;
while(count > 0)
112653: 83 7d 14 00 cmpl $0x0,0x14(%ebp)
112657: 75 a9 jne 112602 <_fat_block_zero+0x18>
count -= c;
blk++;
ofs = 0;
}
return 0;
112659: 31 c0 xor %eax,%eax
11265b: eb 03 jmp 112660 <_fat_block_zero+0x76>
if (c == fs_info->vol.bps)
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_GET, &block);
else
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_READ, &block);
if (rc != RC_OK)
return -1;
11265d: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
count -= c;
blk++;
ofs = 0;
}
return 0;
}
112660: 8d 65 f4 lea -0xc(%ebp),%esp
112663: 5b pop %ebx
112664: 5e pop %esi
112665: 5f pop %edi
112666: 5d pop %ebp
112667: c3 ret
00104935 <_lstat_r>:
int _STAT_R_NAME(
struct _reent *ptr __attribute__((unused)),
const char *path,
struct stat *buf
)
{
104935: 55 push %ebp <== NOT EXECUTED
104936: 89 e5 mov %esp,%ebp <== NOT EXECUTED
104938: 8b 45 0c mov 0xc(%ebp),%eax <== NOT EXECUTED
return _STAT_NAME( path, buf );
10493b: 8b 55 10 mov 0x10(%ebp),%edx <== NOT EXECUTED
10493e: 89 55 0c mov %edx,0xc(%ebp) <== NOT EXECUTED
104941: 89 45 08 mov %eax,0x8(%ebp) <== NOT EXECUTED
}
104944: 5d pop %ebp <== NOT EXECUTED
struct _reent *ptr __attribute__((unused)),
const char *path,
struct stat *buf
)
{
return _STAT_NAME( path, buf );
104945: e9 a6 ff ff ff jmp 1048f0 <lstat> <== NOT EXECUTED
0010757d <_stat_r>:
int _STAT_R_NAME(
struct _reent *ptr __attribute__((unused)),
const char *path,
struct stat *buf
)
{
10757d: 55 push %ebp <== NOT EXECUTED
10757e: 89 e5 mov %esp,%ebp <== NOT EXECUTED
107580: 8b 45 0c mov 0xc(%ebp),%eax <== NOT EXECUTED
return _STAT_NAME( path, buf );
107583: 8b 55 10 mov 0x10(%ebp),%edx <== NOT EXECUTED
107586: 89 55 0c mov %edx,0xc(%ebp) <== NOT EXECUTED
107589: 89 45 08 mov %eax,0x8(%ebp) <== NOT EXECUTED
}
10758c: 5d pop %ebp <== NOT EXECUTED
struct _reent *ptr __attribute__((unused)),
const char *path,
struct stat *buf
)
{
return _STAT_NAME( path, buf );
10758d: e9 a6 ff ff ff jmp 107538 <stat> <== NOT EXECUTED
00109dc4 <aio_cancel>:
* operation(s) cannot be canceled
*/
int aio_cancel(int fildes, struct aiocb *aiocbp)
{
109dc4: 55 push %ebp
109dc5: 89 e5 mov %esp,%ebp
109dc7: 57 push %edi
109dc8: 56 push %esi
109dc9: 53 push %ebx
109dca: 83 ec 18 sub $0x18,%esp
109dcd: 8b 75 08 mov 0x8(%ebp),%esi
109dd0: 8b 5d 0c mov 0xc(%ebp),%ebx
rtems_aio_request_chain *r_chain;
int result;
pthread_mutex_lock (&aio_request_queue.mutex);
109dd3: 68 08 03 13 00 push $0x130308
109dd8: e8 2b 10 00 00 call 10ae08 <pthread_mutex_lock>
if (fcntl (fildes, F_GETFD) < 0) {
109ddd: 58 pop %eax
109dde: 5a pop %edx
109ddf: 6a 01 push $0x1
109de1: 56 push %esi
109de2: e8 a9 5b 00 00 call 10f990 <fcntl>
109de7: 83 c4 10 add $0x10,%esp
109dea: 85 c0 test %eax,%eax
109dec: 79 1d jns 109e0b <aio_cancel+0x47>
pthread_mutex_unlock(&aio_request_queue.mutex);
109dee: 83 ec 0c sub $0xc,%esp
109df1: 68 08 03 13 00 push $0x130308
109df6: e8 8d 10 00 00 call 10ae88 <pthread_mutex_unlock>
rtems_set_errno_and_return_minus_one (EBADF);
109dfb: e8 1c 8f 00 00 call 112d1c <__errno>
109e00: c7 00 09 00 00 00 movl $0x9,(%eax)
109e06: e9 20 01 00 00 jmp 109f2b <aio_cancel+0x167>
}
/* if aiocbp is NULL remove all request for given file descriptor */
if (aiocbp == NULL) {
109e0b: 85 db test %ebx,%ebx
109e0d: 0f 85 bc 00 00 00 jne 109ecf <aio_cancel+0x10b>
AIO_printf ("Cancel all requests\n");
r_chain = rtems_aio_search_fd (&aio_request_queue.work_req, fildes, 0);
109e13: 50 push %eax
109e14: 6a 00 push $0x0
109e16: 56 push %esi
109e17: 68 50 03 13 00 push $0x130350
109e1c: e8 9e 05 00 00 call 10a3bf <rtems_aio_search_fd>
109e21: 89 c3 mov %eax,%ebx
if (r_chain == NULL) {
109e23: 83 c4 10 add $0x10,%esp
109e26: 85 c0 test %eax,%eax
109e28: 75 6b jne 109e95 <aio_cancel+0xd1>
AIO_printf ("Request chain not on [WQ]\n");
if (!rtems_chain_is_empty (&aio_request_queue.idle_req)) {
109e2a: 81 3d 5c 03 13 00 60 cmpl $0x130360,0x13035c
109e31: 03 13 00
109e34: 74 17 je 109e4d <aio_cancel+0x89> <== NEVER TAKEN
r_chain = rtems_aio_search_fd (&aio_request_queue.idle_req, fildes, 0);
109e36: 50 push %eax
109e37: 6a 00 push $0x0
109e39: 56 push %esi
109e3a: 68 5c 03 13 00 push $0x13035c
109e3f: e8 7b 05 00 00 call 10a3bf <rtems_aio_search_fd>
109e44: 89 c3 mov %eax,%ebx
if (r_chain == NULL) {
109e46: 83 c4 10 add $0x10,%esp
109e49: 85 c0 test %eax,%eax
109e4b: 75 1a jne 109e67 <aio_cancel+0xa3>
pthread_mutex_unlock(&aio_request_queue.mutex);
109e4d: 83 ec 0c sub $0xc,%esp
109e50: 68 08 03 13 00 push $0x130308
109e55: e8 2e 10 00 00 call 10ae88 <pthread_mutex_unlock>
return AIO_ALLDONE;
109e5a: 83 c4 10 add $0x10,%esp
109e5d: bb 02 00 00 00 mov $0x2,%ebx
109e62: e9 0d 01 00 00 jmp 109f74 <aio_cancel+0x1b0>
*/
RTEMS_INLINE_ROUTINE void rtems_chain_extract(
rtems_chain_node *the_node
)
{
_Chain_Extract( the_node );
109e67: 83 ec 0c sub $0xc,%esp
109e6a: 50 push %eax
109e6b: e8 94 26 00 00 call 10c504 <_Chain_Extract>
}
AIO_printf ("Request chain on [IQ]\n");
rtems_chain_extract (&r_chain->next_fd);
rtems_aio_remove_fd (r_chain);
109e70: 89 1c 24 mov %ebx,(%esp)
109e73: e8 d5 05 00 00 call 10a44d <rtems_aio_remove_fd>
pthread_mutex_destroy (&r_chain->mutex);
109e78: 8d 73 1c lea 0x1c(%ebx),%esi
109e7b: 89 34 24 mov %esi,(%esp)
109e7e: e8 59 0d 00 00 call 10abdc <pthread_mutex_destroy>
pthread_cond_destroy (&r_chain->mutex);
109e83: 89 34 24 mov %esi,(%esp)
109e86: e8 4d 0a 00 00 call 10a8d8 <pthread_cond_destroy>
free (r_chain);
109e8b: 89 1c 24 mov %ebx,(%esp)
109e8e: e8 c5 cc ff ff call 106b58 <free>
109e93: eb 24 jmp 109eb9 <aio_cancel+0xf5>
return AIO_ALLDONE;
}
AIO_printf ("Request chain on [WQ]\n");
pthread_mutex_lock (&r_chain->mutex);
109e95: 8d 70 1c lea 0x1c(%eax),%esi
109e98: 83 ec 0c sub $0xc,%esp
109e9b: 56 push %esi
109e9c: e8 67 0f 00 00 call 10ae08 <pthread_mutex_lock>
109ea1: 89 1c 24 mov %ebx,(%esp)
109ea4: e8 5b 26 00 00 call 10c504 <_Chain_Extract>
rtems_chain_extract (&r_chain->next_fd);
rtems_aio_remove_fd (r_chain);
109ea9: 89 1c 24 mov %ebx,(%esp)
109eac: e8 9c 05 00 00 call 10a44d <rtems_aio_remove_fd>
pthread_mutex_unlock (&r_chain->mutex);
109eb1: 89 34 24 mov %esi,(%esp)
109eb4: e8 cf 0f 00 00 call 10ae88 <pthread_mutex_unlock>
pthread_mutex_unlock (&aio_request_queue.mutex);
109eb9: c7 04 24 08 03 13 00 movl $0x130308,(%esp)
109ec0: e8 c3 0f 00 00 call 10ae88 <pthread_mutex_unlock>
return AIO_CANCELED;
109ec5: 83 c4 10 add $0x10,%esp
109ec8: 31 db xor %ebx,%ebx
109eca: e9 a5 00 00 00 jmp 109f74 <aio_cancel+0x1b0>
} else {
AIO_printf ("Cancel request\n");
if (aiocbp->aio_fildes != fildes) {
109ecf: 8b 3b mov (%ebx),%edi
109ed1: 39 f7 cmp %esi,%edi
109ed3: 74 02 je 109ed7 <aio_cancel+0x113>
109ed5: eb 3c jmp 109f13 <aio_cancel+0x14f>
pthread_mutex_unlock (&aio_request_queue.mutex);
rtems_set_errno_and_return_minus_one (EINVAL);
}
r_chain = rtems_aio_search_fd (&aio_request_queue.work_req, fildes, 0);
109ed7: 50 push %eax
109ed8: 6a 00 push $0x0
109eda: 57 push %edi
109edb: 68 50 03 13 00 push $0x130350
109ee0: e8 da 04 00 00 call 10a3bf <rtems_aio_search_fd>
109ee5: 89 c6 mov %eax,%esi
if (r_chain == NULL) {
109ee7: 83 c4 10 add $0x10,%esp
109eea: 85 c0 test %eax,%eax
109eec: 75 55 jne 109f43 <aio_cancel+0x17f>
if (!rtems_chain_is_empty (&aio_request_queue.idle_req)) {
109eee: 81 3d 5c 03 13 00 60 cmpl $0x130360,0x13035c
109ef5: 03 13 00
109ef8: 0f 84 4f ff ff ff je 109e4d <aio_cancel+0x89> <== NEVER TAKEN
r_chain = rtems_aio_search_fd (&aio_request_queue.idle_req, fildes, 0);
109efe: 56 push %esi
109eff: 6a 00 push $0x0
109f01: 57 push %edi
109f02: 68 5c 03 13 00 push $0x13035c
109f07: e8 b3 04 00 00 call 10a3bf <rtems_aio_search_fd>
if (r_chain == NULL) {
109f0c: 83 c4 10 add $0x10,%esp
109f0f: 85 c0 test %eax,%eax
109f11: 75 20 jne 109f33 <aio_cancel+0x16f>
pthread_mutex_unlock (&aio_request_queue.mutex);
109f13: 83 ec 0c sub $0xc,%esp
109f16: 68 08 03 13 00 push $0x130308
109f1b: e8 68 0f 00 00 call 10ae88 <pthread_mutex_unlock>
rtems_set_errno_and_return_minus_one (EINVAL);
109f20: e8 f7 8d 00 00 call 112d1c <__errno>
109f25: c7 00 16 00 00 00 movl $0x16,(%eax)
109f2b: 83 c4 10 add $0x10,%esp
109f2e: 83 cb ff or $0xffffffff,%ebx
109f31: eb 41 jmp 109f74 <aio_cancel+0x1b0>
}
AIO_printf ("Request on [IQ]\n");
result = rtems_aio_remove_req (&r_chain->perfd, aiocbp);
109f33: 51 push %ecx
109f34: 51 push %ecx
109f35: 53 push %ebx
109f36: 83 c0 08 add $0x8,%eax
109f39: 50 push %eax
109f3a: e8 57 05 00 00 call 10a496 <rtems_aio_remove_req>
109f3f: 89 c3 mov %eax,%ebx
109f41: eb 22 jmp 109f65 <aio_cancel+0x1a1>
return AIO_ALLDONE;
}
}
AIO_printf ("Request on [WQ]\n");
pthread_mutex_lock (&r_chain->mutex);
109f43: 8d 78 1c lea 0x1c(%eax),%edi
109f46: 83 ec 0c sub $0xc,%esp
109f49: 57 push %edi
109f4a: e8 b9 0e 00 00 call 10ae08 <pthread_mutex_lock>
result = rtems_aio_remove_req (&r_chain->perfd, aiocbp);
109f4f: 58 pop %eax
109f50: 5a pop %edx
109f51: 53 push %ebx
109f52: 83 c6 08 add $0x8,%esi
109f55: 56 push %esi
109f56: e8 3b 05 00 00 call 10a496 <rtems_aio_remove_req>
109f5b: 89 c3 mov %eax,%ebx
pthread_mutex_unlock (&r_chain->mutex);
109f5d: 89 3c 24 mov %edi,(%esp)
109f60: e8 23 0f 00 00 call 10ae88 <pthread_mutex_unlock>
pthread_mutex_unlock (&aio_request_queue.mutex);
109f65: c7 04 24 08 03 13 00 movl $0x130308,(%esp)
109f6c: e8 17 0f 00 00 call 10ae88 <pthread_mutex_unlock>
return result;
109f71: 83 c4 10 add $0x10,%esp
}
return AIO_ALLDONE;
}
109f74: 89 d8 mov %ebx,%eax
109f76: 8d 65 f4 lea -0xc(%ebp),%esp
109f79: 5b pop %ebx
109f7a: 5e pop %esi
109f7b: 5f pop %edi
109f7c: 5d pop %ebp
109f7d: c3 ret
00109f8c <aio_fsync>:
int aio_fsync(
int op,
struct aiocb *aiocbp
)
{
109f8c: 55 push %ebp
109f8d: 89 e5 mov %esp,%ebp
109f8f: 53 push %ebx
109f90: 52 push %edx
109f91: 8b 5d 0c mov 0xc(%ebp),%ebx
rtems_aio_request *req;
int mode;
if (op != O_SYNC)
109f94: 81 7d 08 00 20 00 00 cmpl $0x2000,0x8(%ebp)
109f9b: 74 1b je 109fb8 <aio_fsync+0x2c>
rtems_aio_set_errno_return_minus_one (EINVAL, aiocbp);
109f9d: c7 43 30 16 00 00 00 movl $0x16,0x30(%ebx)
109fa4: c7 43 34 ff ff ff ff movl $0xffffffff,0x34(%ebx)
109fab: e8 6c 8d 00 00 call 112d1c <__errno>
109fb0: c7 00 16 00 00 00 movl $0x16,(%eax)
109fb6: eb 74 jmp 10a02c <aio_fsync+0xa0>
mode = fcntl (aiocbp->aio_fildes, F_GETFL);
109fb8: 50 push %eax
109fb9: 50 push %eax
109fba: 6a 03 push $0x3
109fbc: ff 33 pushl (%ebx)
109fbe: e8 cd 59 00 00 call 10f990 <fcntl>
if (!(((mode & O_ACCMODE) == O_WRONLY) || ((mode & O_ACCMODE) == O_RDWR)))
109fc3: 83 e0 03 and $0x3,%eax
109fc6: 48 dec %eax
109fc7: 83 c4 10 add $0x10,%esp
109fca: 83 f8 01 cmp $0x1,%eax
109fcd: 76 1b jbe 109fea <aio_fsync+0x5e>
rtems_aio_set_errno_return_minus_one (EBADF, aiocbp);
109fcf: c7 43 30 09 00 00 00 movl $0x9,0x30(%ebx)
109fd6: c7 43 34 ff ff ff ff movl $0xffffffff,0x34(%ebx)
109fdd: e8 3a 8d 00 00 call 112d1c <__errno>
109fe2: c7 00 09 00 00 00 movl $0x9,(%eax)
109fe8: eb 42 jmp 10a02c <aio_fsync+0xa0>
req = malloc (sizeof (rtems_aio_request));
109fea: 83 ec 0c sub $0xc,%esp
109fed: 6a 18 push $0x18
109fef: e8 3c cf ff ff call 106f30 <malloc>
if (req == NULL)
109ff4: 83 c4 10 add $0x10,%esp
109ff7: 85 c0 test %eax,%eax
109ff9: 75 1b jne 10a016 <aio_fsync+0x8a> <== ALWAYS TAKEN
rtems_aio_set_errno_return_minus_one (EAGAIN, aiocbp);
109ffb: c7 43 30 0b 00 00 00 movl $0xb,0x30(%ebx) <== NOT EXECUTED
10a002: c7 43 34 ff ff ff ff movl $0xffffffff,0x34(%ebx) <== NOT EXECUTED
10a009: e8 0e 8d 00 00 call 112d1c <__errno> <== NOT EXECUTED
10a00e: c7 00 0b 00 00 00 movl $0xb,(%eax) <== NOT EXECUTED
10a014: eb 16 jmp 10a02c <aio_fsync+0xa0> <== NOT EXECUTED
req->aiocbp = aiocbp;
10a016: 89 58 14 mov %ebx,0x14(%eax)
req->aiocbp->aio_lio_opcode = LIO_SYNC;
10a019: c7 43 2c 03 00 00 00 movl $0x3,0x2c(%ebx)
return rtems_aio_enqueue (req);
10a020: 89 45 08 mov %eax,0x8(%ebp)
}
10a023: 8b 5d fc mov -0x4(%ebp),%ebx
10a026: c9 leave
rtems_aio_set_errno_return_minus_one (EAGAIN, aiocbp);
req->aiocbp = aiocbp;
req->aiocbp->aio_lio_opcode = LIO_SYNC;
return rtems_aio_enqueue (req);
10a027: e9 ce 04 00 00 jmp 10a4fa <rtems_aio_enqueue>
}
10a02c: 83 c8 ff or $0xffffffff,%eax
10a02f: 8b 5d fc mov -0x4(%ebp),%ebx
10a032: c9 leave
10a033: c3 ret
0010a6dc <aio_read>:
* 0 - otherwise
*/
int
aio_read (struct aiocb *aiocbp)
{
10a6dc: 55 push %ebp
10a6dd: 89 e5 mov %esp,%ebp
10a6df: 53 push %ebx
10a6e0: 83 ec 0c sub $0xc,%esp
10a6e3: 8b 5d 08 mov 0x8(%ebp),%ebx
rtems_aio_request *req;
int mode;
mode = fcntl (aiocbp->aio_fildes, F_GETFL);
10a6e6: 6a 03 push $0x3
10a6e8: ff 33 pushl (%ebx)
10a6ea: e8 a1 52 00 00 call 10f990 <fcntl>
if (!(((mode & O_ACCMODE) == O_RDONLY) || ((mode & O_ACCMODE) == O_RDWR)))
10a6ef: 83 c4 10 add $0x10,%esp
10a6f2: a8 01 test $0x1,%al
10a6f4: 74 1b je 10a711 <aio_read+0x35>
rtems_aio_set_errno_return_minus_one (EBADF, aiocbp);
10a6f6: c7 43 30 09 00 00 00 movl $0x9,0x30(%ebx)
10a6fd: c7 43 34 ff ff ff ff movl $0xffffffff,0x34(%ebx)
10a704: e8 13 86 00 00 call 112d1c <__errno>
10a709: c7 00 09 00 00 00 movl $0x9,(%eax)
10a70f: eb 6b jmp 10a77c <aio_read+0xa0>
if (aiocbp->aio_reqprio < 0 || aiocbp->aio_reqprio > AIO_PRIO_DELTA_MAX)
10a711: 83 7b 14 00 cmpl $0x0,0x14(%ebx)
10a715: 74 02 je 10a719 <aio_read+0x3d>
10a717: eb 06 jmp 10a71f <aio_read+0x43>
rtems_aio_set_errno_return_minus_one (EINVAL, aiocbp);
if (aiocbp->aio_offset < 0)
10a719: 83 7b 08 00 cmpl $0x0,0x8(%ebx)
10a71d: 79 1b jns 10a73a <aio_read+0x5e>
rtems_aio_set_errno_return_minus_one (EINVAL, aiocbp);
10a71f: c7 43 30 16 00 00 00 movl $0x16,0x30(%ebx)
10a726: c7 43 34 ff ff ff ff movl $0xffffffff,0x34(%ebx)
10a72d: e8 ea 85 00 00 call 112d1c <__errno>
10a732: c7 00 16 00 00 00 movl $0x16,(%eax)
10a738: eb 42 jmp 10a77c <aio_read+0xa0>
req = malloc (sizeof (rtems_aio_request));
10a73a: 83 ec 0c sub $0xc,%esp
10a73d: 6a 18 push $0x18
10a73f: e8 ec c7 ff ff call 106f30 <malloc>
if (req == NULL)
10a744: 83 c4 10 add $0x10,%esp
10a747: 85 c0 test %eax,%eax
10a749: 75 1b jne 10a766 <aio_read+0x8a> <== ALWAYS TAKEN
rtems_aio_set_errno_return_minus_one (EAGAIN, aiocbp);
10a74b: c7 43 30 0b 00 00 00 movl $0xb,0x30(%ebx) <== NOT EXECUTED
10a752: c7 43 34 ff ff ff ff movl $0xffffffff,0x34(%ebx) <== NOT EXECUTED
10a759: e8 be 85 00 00 call 112d1c <__errno> <== NOT EXECUTED
10a75e: c7 00 0b 00 00 00 movl $0xb,(%eax) <== NOT EXECUTED
10a764: eb 16 jmp 10a77c <aio_read+0xa0> <== NOT EXECUTED
req->aiocbp = aiocbp;
10a766: 89 58 14 mov %ebx,0x14(%eax)
req->aiocbp->aio_lio_opcode = LIO_READ;
10a769: c7 43 2c 01 00 00 00 movl $0x1,0x2c(%ebx)
return rtems_aio_enqueue (req);
10a770: 89 45 08 mov %eax,0x8(%ebp)
}
10a773: 8b 5d fc mov -0x4(%ebp),%ebx
10a776: c9 leave
rtems_aio_set_errno_return_minus_one (EAGAIN, aiocbp);
req->aiocbp = aiocbp;
req->aiocbp->aio_lio_opcode = LIO_READ;
return rtems_aio_enqueue (req);
10a777: e9 7e fd ff ff jmp 10a4fa <rtems_aio_enqueue>
}
10a77c: 83 c8 ff or $0xffffffff,%eax
10a77f: 8b 5d fc mov -0x4(%ebp),%ebx
10a782: c9 leave
10a783: c3 ret
0010a790 <aio_write>:
* 0 - otherwise
*/
int
aio_write (struct aiocb *aiocbp)
{
10a790: 55 push %ebp
10a791: 89 e5 mov %esp,%ebp
10a793: 53 push %ebx
10a794: 83 ec 0c sub $0xc,%esp
10a797: 8b 5d 08 mov 0x8(%ebp),%ebx
rtems_aio_request *req;
int mode;
mode = fcntl (aiocbp->aio_fildes, F_GETFL);
10a79a: 6a 03 push $0x3
10a79c: ff 33 pushl (%ebx)
10a79e: e8 ed 51 00 00 call 10f990 <fcntl>
if (!(((mode & O_ACCMODE) == O_WRONLY) || ((mode & O_ACCMODE) == O_RDWR)))
10a7a3: 83 e0 03 and $0x3,%eax
10a7a6: 48 dec %eax
10a7a7: 83 c4 10 add $0x10,%esp
10a7aa: 83 f8 01 cmp $0x1,%eax
10a7ad: 76 1b jbe 10a7ca <aio_write+0x3a>
rtems_aio_set_errno_return_minus_one (EBADF, aiocbp);
10a7af: c7 43 30 09 00 00 00 movl $0x9,0x30(%ebx)
10a7b6: c7 43 34 ff ff ff ff movl $0xffffffff,0x34(%ebx)
10a7bd: e8 5a 85 00 00 call 112d1c <__errno>
10a7c2: c7 00 09 00 00 00 movl $0x9,(%eax)
10a7c8: eb 6b jmp 10a835 <aio_write+0xa5>
if (aiocbp->aio_reqprio < 0 || aiocbp->aio_reqprio > AIO_PRIO_DELTA_MAX)
10a7ca: 83 7b 14 00 cmpl $0x0,0x14(%ebx)
10a7ce: 74 02 je 10a7d2 <aio_write+0x42>
10a7d0: eb 06 jmp 10a7d8 <aio_write+0x48>
rtems_aio_set_errno_return_minus_one (EINVAL, aiocbp);
if (aiocbp->aio_offset < 0)
10a7d2: 83 7b 08 00 cmpl $0x0,0x8(%ebx)
10a7d6: 79 1b jns 10a7f3 <aio_write+0x63>
rtems_aio_set_errno_return_minus_one (EINVAL, aiocbp);
10a7d8: c7 43 30 16 00 00 00 movl $0x16,0x30(%ebx)
10a7df: c7 43 34 ff ff ff ff movl $0xffffffff,0x34(%ebx)
10a7e6: e8 31 85 00 00 call 112d1c <__errno>
10a7eb: c7 00 16 00 00 00 movl $0x16,(%eax)
10a7f1: eb 42 jmp 10a835 <aio_write+0xa5>
req = malloc (sizeof (rtems_aio_request));
10a7f3: 83 ec 0c sub $0xc,%esp
10a7f6: 6a 18 push $0x18
10a7f8: e8 33 c7 ff ff call 106f30 <malloc>
if (req == NULL)
10a7fd: 83 c4 10 add $0x10,%esp
10a800: 85 c0 test %eax,%eax
10a802: 75 1b jne 10a81f <aio_write+0x8f> <== ALWAYS TAKEN
rtems_aio_set_errno_return_minus_one (EAGAIN, aiocbp);
10a804: c7 43 30 0b 00 00 00 movl $0xb,0x30(%ebx) <== NOT EXECUTED
10a80b: c7 43 34 ff ff ff ff movl $0xffffffff,0x34(%ebx) <== NOT EXECUTED
10a812: e8 05 85 00 00 call 112d1c <__errno> <== NOT EXECUTED
10a817: c7 00 0b 00 00 00 movl $0xb,(%eax) <== NOT EXECUTED
10a81d: eb 16 jmp 10a835 <aio_write+0xa5> <== NOT EXECUTED
req->aiocbp = aiocbp;
10a81f: 89 58 14 mov %ebx,0x14(%eax)
req->aiocbp->aio_lio_opcode = LIO_WRITE;
10a822: c7 43 2c 02 00 00 00 movl $0x2,0x2c(%ebx)
return rtems_aio_enqueue (req);
10a829: 89 45 08 mov %eax,0x8(%ebp)
}
10a82c: 8b 5d fc mov -0x4(%ebp),%ebx
10a82f: c9 leave
rtems_aio_set_errno_return_minus_one (EAGAIN, aiocbp);
req->aiocbp = aiocbp;
req->aiocbp->aio_lio_opcode = LIO_WRITE;
return rtems_aio_enqueue (req);
10a830: e9 c5 fc ff ff jmp 10a4fa <rtems_aio_enqueue>
}
10a835: 83 c8 ff or $0xffffffff,%eax
10a838: 8b 5d fc mov -0x4(%ebp),%ebx
10a83b: c9 leave
10a83c: c3 ret
00104608 <chroot>:
#include <unistd.h>
#include <rtems/libio_.h>
int chroot( const char *path )
{
104608: 55 push %ebp
104609: 89 e5 mov %esp,%ebp
10460b: 53 push %ebx
10460c: 83 ec 70 sub $0x70,%esp
/*
* We use the global environment for path evaluation. This makes it possible
* to escape from a chroot environment referencing an unmounted file system.
*/
rtems_filesystem_eval_path_start_with_root_and_current(
10460f: 68 60 7b 12 00 push $0x127b60
104614: 68 64 7b 12 00 push $0x127b64
104619: 6a 19 push $0x19
10461b: ff 75 08 pushl 0x8(%ebp)
10461e: 8d 45 c0 lea -0x40(%ebp),%eax
104621: 50 push %eax
104622: e8 45 11 00 00 call 10576c <rtems_filesystem_eval_path_start_with_root_and_current>
104627: 83 c4 18 add $0x18,%esp
10462a: 8d 45 d8 lea -0x28(%ebp),%eax
10462d: 50 push %eax
eval_flags,
&rtems_global_user_env.root_directory,
&rtems_global_user_env.current_directory
);
rtems_filesystem_eval_path_extract_currentloc( &ctx, &loc );
10462e: 8d 5d a8 lea -0x58(%ebp),%ebx
104631: 53 push %ebx
104632: e8 00 15 00 00 call 105b37 <rtems_filesystem_location_copy_and_detach>
new_current_loc = rtems_filesystem_location_transform_to_global( &loc );
104637: 89 1c 24 mov %ebx,(%esp)
10463a: e8 6b 16 00 00 call 105caa <rtems_filesystem_location_transform_to_global>
10463f: 89 45 a4 mov %eax,-0x5c(%ebp)
if ( !rtems_filesystem_global_location_is_null( new_current_loc ) ) {
104642: 83 c4 10 add $0x10,%esp
104645: 81 78 10 24 d6 11 00 cmpl $0x11d624,0x10(%eax)
10464c: 74 7a je 1046c8 <chroot+0xc0>
rtems_filesystem_global_location_t *new_root_loc =
10464e: 83 ec 0c sub $0xc,%esp
rtems_filesystem_global_location_obtain( &new_current_loc );
104651: 8d 45 a4 lea -0x5c(%ebp),%eax
);
rtems_filesystem_eval_path_extract_currentloc( &ctx, &loc );
new_current_loc = rtems_filesystem_location_transform_to_global( &loc );
if ( !rtems_filesystem_global_location_is_null( new_current_loc ) ) {
rtems_filesystem_global_location_t *new_root_loc =
104654: 50 push %eax
104655: e8 c9 15 00 00 call 105c23 <rtems_filesystem_global_location_obtain>
10465a: 89 c3 mov %eax,%ebx
rtems_filesystem_global_location_obtain( &new_current_loc );
rtems_filesystem_node_types_t type =
(*new_root_loc->location.mt_entry->ops->node_type_h)(
10465c: 8b 40 14 mov 0x14(%eax),%eax
10465f: 8b 40 0c mov 0xc(%eax),%eax
rtems_filesystem_eval_path_extract_currentloc( &ctx, &loc );
new_current_loc = rtems_filesystem_location_transform_to_global( &loc );
if ( !rtems_filesystem_global_location_is_null( new_current_loc ) ) {
rtems_filesystem_global_location_t *new_root_loc =
rtems_filesystem_global_location_obtain( &new_current_loc );
rtems_filesystem_node_types_t type =
104662: 89 1c 24 mov %ebx,(%esp)
104665: ff 50 14 call *0x14(%eax)
(*new_root_loc->location.mt_entry->ops->node_type_h)(
&new_root_loc->location
);
if ( type == RTEMS_FILESYSTEM_DIRECTORY ) {
104668: 83 c4 10 add $0x10,%esp
10466b: 85 c0 test %eax,%eax
10466d: 75 43 jne 1046b2 <chroot+0xaa>
sc = rtems_libio_set_private_env();
10466f: e8 93 0b 00 00 call 105207 <rtems_libio_set_private_env>
if (sc == RTEMS_SUCCESSFUL) {
104674: 85 c0 test %eax,%eax
104676: 75 28 jne 1046a0 <chroot+0x98>
rtems_filesystem_global_location_assign(
104678: 50 push %eax
104679: 50 push %eax
10467a: 53 push %ebx
10467b: a1 5c 7b 12 00 mov 0x127b5c,%eax
104680: 83 c0 04 add $0x4,%eax
104683: 50 push %eax
104684: e8 7d 15 00 00 call 105c06 <rtems_filesystem_global_location_assign>
&rtems_filesystem_root,
new_root_loc
);
rtems_filesystem_global_location_assign(
104689: 5a pop %edx
10468a: 59 pop %ecx
10468b: ff 75 a4 pushl -0x5c(%ebp)
10468e: ff 35 5c 7b 12 00 pushl 0x127b5c
104694: e8 6d 15 00 00 call 105c06 <rtems_filesystem_global_location_assign>
104699: 83 c4 10 add $0x10,%esp
10469c: 31 db xor %ebx,%ebx
10469e: eb 2b jmp 1046cb <chroot+0xc3>
&rtems_filesystem_current,
new_current_loc
);
} else {
if (sc != RTEMS_UNSATISFIED) {
1046a0: 83 f8 0d cmp $0xd,%eax
1046a3: 74 49 je 1046ee <chroot+0xe6> <== NEVER TAKEN
errno = ENOMEM;
1046a5: e8 6a 6c 00 00 call 10b314 <__errno>
1046aa: c7 00 0c 00 00 00 movl $0xc,(%eax)
1046b0: eb 3c jmp 1046ee <chroot+0xe6>
static inline void rtems_filesystem_location_error(
const rtems_filesystem_location_info_t *loc,
int eno
)
{
if ( !rtems_filesystem_location_is_null( loc ) ) {
1046b2: 81 7b 10 24 d6 11 00 cmpl $0x11d624,0x10(%ebx)
1046b9: 74 33 je 1046ee <chroot+0xe6> <== NEVER TAKEN
errno = eno;
1046bb: e8 54 6c 00 00 call 10b314 <__errno>
1046c0: c7 00 14 00 00 00 movl $0x14,(%eax)
1046c6: eb 26 jmp 1046ee <chroot+0xe6>
if ( rv != 0 ) {
rtems_filesystem_global_location_release( new_root_loc );
}
} else {
rv = -1;
1046c8: 83 cb ff or $0xffffffff,%ebx
}
rtems_filesystem_eval_path_cleanup( &ctx );
1046cb: 83 ec 0c sub $0xc,%esp
1046ce: 8d 45 c0 lea -0x40(%ebp),%eax
1046d1: 50 push %eax
1046d2: e8 86 11 00 00 call 10585d <rtems_filesystem_eval_path_cleanup>
if ( rv != 0 ) {
1046d7: 83 c4 10 add $0x10,%esp
1046da: 85 db test %ebx,%ebx
1046dc: 74 1e je 1046fc <chroot+0xf4>
rtems_filesystem_global_location_release( new_current_loc );
1046de: 83 ec 0c sub $0xc,%esp
1046e1: ff 75 a4 pushl -0x5c(%ebp)
1046e4: e8 d8 14 00 00 call 105bc1 <rtems_filesystem_global_location_release>
1046e9: 83 c4 10 add $0x10,%esp
1046ec: eb 0e jmp 1046fc <chroot+0xf4>
rtems_filesystem_location_error( &new_root_loc->location, ENOTDIR );
rv = -1;
}
if ( rv != 0 ) {
rtems_filesystem_global_location_release( new_root_loc );
1046ee: 83 ec 0c sub $0xc,%esp
1046f1: 53 push %ebx
1046f2: e8 ca 14 00 00 call 105bc1 <rtems_filesystem_global_location_release>
1046f7: 83 c4 10 add $0x10,%esp
1046fa: eb cc jmp 1046c8 <chroot+0xc0>
if ( rv != 0 ) {
rtems_filesystem_global_location_release( new_current_loc );
}
return rv;
}
1046fc: 89 d8 mov %ebx,%eax
1046fe: 8b 5d fc mov -0x4(%ebp),%ebx
104701: c9 leave
104702: c3 ret
00109a54 <clock_gettime>:
int clock_gettime(
clockid_t clock_id,
struct timespec *tp
)
{
109a54: 55 push %ebp
109a55: 89 e5 mov %esp,%ebp
109a57: 57 push %edi
109a58: 56 push %esi
109a59: 53 push %ebx
109a5a: 83 ec 1c sub $0x1c,%esp
109a5d: 8b 45 08 mov 0x8(%ebp),%eax
109a60: 8b 5d 0c mov 0xc(%ebp),%ebx
if ( !tp )
109a63: 85 db test %ebx,%ebx
109a65: 75 02 jne 109a69 <clock_gettime+0x15>
109a67: eb 6c jmp 109ad5 <clock_gettime+0x81>
rtems_set_errno_and_return_minus_one( EINVAL );
if ( clock_id == CLOCK_REALTIME ) {
109a69: 83 f8 01 cmp $0x1,%eax
109a6c: 75 3b jne 109aa9 <clock_gettime+0x55>
struct timespec *tod_as_timespec
)
{
Timestamp_Control tod_as_timestamp;
_TOD_Get_as_timestamp( &tod_as_timestamp );
109a6e: 83 ec 0c sub $0xc,%esp
109a71: 8d 45 e0 lea -0x20(%ebp),%eax
109a74: 50 push %eax
109a75: e8 ba 1a 00 00 call 10b534 <_TOD_Get_as_timestamp>
_Timestamp_To_timespec( &tod_as_timestamp, tod_as_timespec );
109a7a: 8b 75 e0 mov -0x20(%ebp),%esi
109a7d: 8b 7d e4 mov -0x1c(%ebp),%edi
static inline void _Timestamp64_implementation_To_timespec(
const Timestamp64_Control *_timestamp,
struct timespec *_timespec
)
{
_timespec->tv_sec = (time_t) (*_timestamp / 1000000000L);
109a80: 6a 00 push $0x0
109a82: 68 00 ca 9a 3b push $0x3b9aca00
109a87: 57 push %edi
109a88: 56 push %esi
109a89: e8 86 52 01 00 call 11ed14 <__divdi3>
109a8e: 83 c4 10 add $0x10,%esp
109a91: 89 03 mov %eax,(%ebx)
_timespec->tv_nsec = (long) (*_timestamp % 1000000000L);
109a93: 6a 00 push $0x0
109a95: 68 00 ca 9a 3b push $0x3b9aca00
109a9a: 57 push %edi
109a9b: 56 push %esi
109a9c: e8 c7 53 01 00 call 11ee68 <__moddi3>
109aa1: 83 c4 10 add $0x10,%esp
109aa4: 89 43 04 mov %eax,0x4(%ebx)
109aa7: eb 0e jmp 109ab7 <clock_gettime+0x63>
_TOD_Get(tp);
return 0;
}
#ifdef CLOCK_MONOTONIC
if ( clock_id == CLOCK_MONOTONIC ) {
109aa9: 83 f8 04 cmp $0x4,%eax
109aac: 75 10 jne 109abe <clock_gettime+0x6a> <== ALWAYS TAKEN
_TOD_Get_uptime_as_timespec( tp );
109aae: 83 ec 0c sub $0xc,%esp
109ab1: 53 push %ebx
109ab2: e8 b5 1a 00 00 call 10b56c <_TOD_Get_uptime_as_timespec>
return 0;
109ab7: 83 c4 10 add $0x10,%esp
109aba: 31 c0 xor %eax,%eax
109abc: eb 25 jmp 109ae3 <clock_gettime+0x8f>
}
#endif
#ifdef _POSIX_CPUTIME
if ( clock_id == CLOCK_PROCESS_CPUTIME_ID ) {
109abe: 83 f8 02 cmp $0x2,%eax
109ac1: 74 eb je 109aae <clock_gettime+0x5a>
return 0;
}
#endif
#ifdef _POSIX_THREAD_CPUTIME
if ( clock_id == CLOCK_THREAD_CPUTIME_ID )
109ac3: 83 f8 03 cmp $0x3,%eax
109ac6: 75 0d jne 109ad5 <clock_gettime+0x81>
rtems_set_errno_and_return_minus_one( ENOSYS );
109ac8: e8 cf 80 00 00 call 111b9c <__errno>
109acd: c7 00 58 00 00 00 movl $0x58,(%eax)
109ad3: eb 0b jmp 109ae0 <clock_gettime+0x8c>
#endif
rtems_set_errno_and_return_minus_one( EINVAL );
109ad5: e8 c2 80 00 00 call 111b9c <__errno>
109ada: c7 00 16 00 00 00 movl $0x16,(%eax)
109ae0: 83 c8 ff or $0xffffffff,%eax
return 0;
}
109ae3: 8d 65 f4 lea -0xc(%ebp),%esp
109ae6: 5b pop %ebx
109ae7: 5e pop %esi
109ae8: 5f pop %edi
109ae9: 5d pop %ebp
109aea: c3 ret
001233a0 <clock_settime>:
int clock_settime(
clockid_t clock_id,
const struct timespec *tp
)
{
1233a0: 55 push %ebp
1233a1: 89 e5 mov %esp,%ebp
1233a3: 53 push %ebx
1233a4: 83 ec 14 sub $0x14,%esp
1233a7: 8b 45 08 mov 0x8(%ebp),%eax
1233aa: 8b 4d 0c mov 0xc(%ebp),%ecx
if ( !tp )
1233ad: 85 c9 test %ecx,%ecx
1233af: 75 02 jne 1233b3 <clock_settime+0x13> <== ALWAYS TAKEN
1233b1: eb 69 jmp 12341c <clock_settime+0x7c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
if ( clock_id == CLOCK_REALTIME ) {
1233b3: 83 f8 01 cmp $0x1,%eax
1233b6: 75 4b jne 123403 <clock_settime+0x63>
if ( tp->tv_sec < TOD_SECONDS_1970_THROUGH_1988 )
1233b8: 81 39 ff e4 da 21 cmpl $0x21dae4ff,(%ecx)
1233be: 77 02 ja 1233c2 <clock_settime+0x22>
1233c0: eb 5a jmp 12341c <clock_settime+0x7c>
*
* This rountine increments the thread dispatch level
*/
RTEMS_INLINE_ROUTINE uint32_t _Thread_Dispatch_increment_disable_level(void)
{
_Thread_Dispatch_disable_level++;
1233c2: a1 fc e1 16 00 mov 0x16e1fc,%eax
1233c7: 40 inc %eax
1233c8: a3 fc e1 16 00 mov %eax,0x16e1fc
return _Thread_Dispatch_disable_level;
1233cd: a1 fc e1 16 00 mov 0x16e1fc,%eax
Timestamp64_Control *_time,
Timestamp64_Control _seconds,
Timestamp64_Control _nanoseconds
)
{
*_time = _seconds * 1000000000L + _nanoseconds;
1233d2: b8 00 ca 9a 3b mov $0x3b9aca00,%eax
1233d7: f7 29 imull (%ecx)
const struct timespec *tod_as_timespec
)
{
Timestamp_Control tod_as_timestamp;
_Timestamp_Set(
1233d9: 8b 49 04 mov 0x4(%ecx),%ecx
1233dc: 89 cb mov %ecx,%ebx
1233de: c1 fb 1f sar $0x1f,%ebx
1233e1: 01 c8 add %ecx,%eax
1233e3: 11 da adc %ebx,%edx
1233e5: 89 45 f0 mov %eax,-0x10(%ebp)
1233e8: 89 55 f4 mov %edx,-0xc(%ebp)
&tod_as_timestamp,
tod_as_timespec->tv_sec,
tod_as_timespec->tv_nsec
);
_TOD_Set_with_timestamp( &tod_as_timestamp );
1233eb: 83 ec 0c sub $0xc,%esp
1233ee: 8d 45 f0 lea -0x10(%ebp),%eax
1233f1: 50 push %eax
1233f2: e8 0d 0e 00 00 call 124204 <_TOD_Set_with_timestamp>
rtems_set_errno_and_return_minus_one( EINVAL );
_Thread_Disable_dispatch();
_TOD_Set( tp );
_Thread_Enable_dispatch();
1233f7: e8 78 87 fe ff call 10bb74 <_Thread_Enable_dispatch>
rtems_set_errno_and_return_minus_one( ENOSYS );
#endif
else
rtems_set_errno_and_return_minus_one( EINVAL );
return 0;
1233fc: 83 c4 10 add $0x10,%esp
1233ff: 31 c0 xor %eax,%eax
123401: eb 27 jmp 12342a <clock_settime+0x8a>
_Thread_Disable_dispatch();
_TOD_Set( tp );
_Thread_Enable_dispatch();
}
#ifdef _POSIX_CPUTIME
else if ( clock_id == CLOCK_PROCESS_CPUTIME_ID )
123403: 83 f8 02 cmp $0x2,%eax
123406: 75 02 jne 12340a <clock_settime+0x6a>
123408: eb 05 jmp 12340f <clock_settime+0x6f>
rtems_set_errno_and_return_minus_one( ENOSYS );
#endif
#ifdef _POSIX_THREAD_CPUTIME
else if ( clock_id == CLOCK_THREAD_CPUTIME_ID )
12340a: 83 f8 03 cmp $0x3,%eax
12340d: 75 0d jne 12341c <clock_settime+0x7c>
rtems_set_errno_and_return_minus_one( ENOSYS );
12340f: e8 74 da 00 00 call 130e88 <__errno>
123414: c7 00 58 00 00 00 movl $0x58,(%eax)
12341a: eb 0b jmp 123427 <clock_settime+0x87>
#endif
else
rtems_set_errno_and_return_minus_one( EINVAL );
12341c: e8 67 da 00 00 call 130e88 <__errno>
123421: c7 00 16 00 00 00 movl $0x16,(%eax)
123427: 83 c8 ff or $0xffffffff,%eax
return 0;
}
12342a: 8b 5d fc mov -0x4(%ebp),%ebx
12342d: c9 leave
12342e: c3 ret
0010666a <create_disk>:
dev_t dev,
const char *name,
rtems_disk_device **dd_ptr,
char **alloc_name_ptr
)
{
10666a: 55 push %ebp
10666b: 89 e5 mov %esp,%ebp
10666d: 57 push %edi
10666e: 56 push %esi
10666f: 53 push %ebx
106670: 83 ec 2c sub $0x2c,%esp
106673: 89 45 d8 mov %eax,-0x28(%ebp)
106676: 89 55 dc mov %edx,-0x24(%ebp)
106679: 89 4d d4 mov %ecx,-0x2c(%ebp)
)
{
union __rtems_dev_t temp;
temp.device = device;
return temp.__overlay.major;
10667c: 89 c6 mov %eax,%esi
dev_t device
)
{
union __rtems_dev_t temp;
temp.device = device;
10667e: 89 55 e0 mov %edx,-0x20(%ebp)
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
rtems_filesystem_split_dev_t(dev, major, minor);
if (major >= disktab_size) {
106681: 8b 3d 9c 1f 13 00 mov 0x131f9c,%edi
106687: 39 f8 cmp %edi,%eax
106689: 72 49 jb 1066d4 <create_disk+0x6a>
rtems_disk_device_table *table = disktab;
10668b: a1 a0 1f 13 00 mov 0x131fa0,%eax
rtems_device_major_number old_size = disktab_size;
rtems_device_major_number new_size = 2 * old_size;
106690: 8d 1c 3f lea (%edi,%edi,1),%ebx
if (major >= new_size) {
106693: 39 de cmp %ebx,%esi
106695: 72 03 jb 10669a <create_disk+0x30> <== NEVER TAKEN
new_size = major + 1;
106697: 8d 5e 01 lea 0x1(%esi),%ebx
}
table = realloc(table, new_size * sizeof(*table));
10669a: 51 push %ecx
10669b: 51 push %ecx
10669c: 8d 14 dd 00 00 00 00 lea 0x0(,%ebx,8),%edx
1066a3: 52 push %edx
1066a4: 50 push %eax
1066a5: e8 fa 1c 00 00 call 1083a4 <realloc>
1066aa: 89 c2 mov %eax,%edx
if (table == NULL) {
1066ac: 83 c4 10 add $0x10,%esp
1066af: 85 c0 test %eax,%eax
1066b1: 0f 84 25 01 00 00 je 1067dc <create_disk+0x172> <== ALWAYS TAKEN
return NULL;
}
memset(table + old_size, 0, (new_size - old_size) * sizeof(*table));
1066b7: 89 d9 mov %ebx,%ecx <== NOT EXECUTED
1066b9: 29 f9 sub %edi,%ecx <== NOT EXECUTED
1066bb: c1 e1 03 shl $0x3,%ecx <== NOT EXECUTED
1066be: 8d 3c f8 lea (%eax,%edi,8),%edi <== NOT EXECUTED
1066c1: 89 7d e4 mov %edi,-0x1c(%ebp) <== NOT EXECUTED
1066c4: 31 c0 xor %eax,%eax <== NOT EXECUTED
1066c6: f3 aa rep stos %al,%es:(%edi) <== NOT EXECUTED
disktab = table;
1066c8: 89 15 a0 1f 13 00 mov %edx,0x131fa0 <== NOT EXECUTED
disktab_size = new_size;
1066ce: 89 1d 9c 1f 13 00 mov %ebx,0x131f9c <== NOT EXECUTED
}
if (disktab [major].minor == NULL || minor >= disktab[major].size) {
1066d4: a1 a0 1f 13 00 mov 0x131fa0,%eax
1066d9: 8d 1c f0 lea (%eax,%esi,8),%ebx
1066dc: 8b 03 mov (%ebx),%eax
1066de: 85 c0 test %eax,%eax
1066e0: 74 08 je 1066ea <create_disk+0x80>
1066e2: 8b 55 e0 mov -0x20(%ebp),%edx
1066e5: 3b 53 04 cmp 0x4(%ebx),%edx
1066e8: 72 4b jb 106735 <create_disk+0xcb>
rtems_disk_device **table = disktab [major].minor;
rtems_device_minor_number old_size = disktab [major].size;
1066ea: 8b 7b 04 mov 0x4(%ebx),%edi
rtems_device_minor_number new_size = 0;
if (old_size == 0) {
new_size = DISKTAB_INITIAL_SIZE;
1066ed: be 08 00 00 00 mov $0x8,%esi
if (disktab [major].minor == NULL || minor >= disktab[major].size) {
rtems_disk_device **table = disktab [major].minor;
rtems_device_minor_number old_size = disktab [major].size;
rtems_device_minor_number new_size = 0;
if (old_size == 0) {
1066f2: 85 ff test %edi,%edi
1066f4: 74 03 je 1066f9 <create_disk+0x8f>
new_size = DISKTAB_INITIAL_SIZE;
} else {
new_size = 2 * old_size;
1066f6: 8d 34 3f lea (%edi,%edi,1),%esi
}
if (minor >= new_size) {
1066f9: 39 75 e0 cmp %esi,-0x20(%ebp)
1066fc: 72 04 jb 106702 <create_disk+0x98>
new_size = minor + 1;
1066fe: 8b 75 e0 mov -0x20(%ebp),%esi
106701: 46 inc %esi
}
table = realloc(table, new_size * sizeof(*table));
106702: 52 push %edx
106703: 52 push %edx
106704: 8d 14 b5 00 00 00 00 lea 0x0(,%esi,4),%edx
10670b: 52 push %edx
10670c: 50 push %eax
10670d: e8 92 1c 00 00 call 1083a4 <realloc>
106712: 89 c2 mov %eax,%edx
if (table == NULL) {
106714: 83 c4 10 add $0x10,%esp
106717: 85 c0 test %eax,%eax
106719: 0f 84 bd 00 00 00 je 1067dc <create_disk+0x172>
return NULL;
}
memset(table + old_size, 0, (new_size - old_size) * sizeof(*table));
10671f: 89 f1 mov %esi,%ecx
106721: 29 f9 sub %edi,%ecx
106723: c1 e1 02 shl $0x2,%ecx
106726: 8d 3c b8 lea (%eax,%edi,4),%edi
106729: 89 7d e4 mov %edi,-0x1c(%ebp)
10672c: 31 c0 xor %eax,%eax
10672e: f3 aa rep stos %al,%es:(%edi)
disktab [major].minor = table;
106730: 89 13 mov %edx,(%ebx)
disktab [major].size = new_size;
106732: 89 73 04 mov %esi,0x4(%ebx)
}
return disktab [major].minor + minor;
106735: 8b 03 mov (%ebx),%eax
106737: 8b 55 e0 mov -0x20(%ebp),%edx
10673a: 8d 1c 90 lea (%eax,%edx,4),%ebx
{
rtems_disk_device **dd_entry = create_disk_table_entry(dev);
rtems_disk_device *dd = NULL;
char *alloc_name = NULL;
if (dd_entry == NULL) {
10673d: 85 db test %ebx,%ebx
10673f: 75 05 jne 106746 <create_disk+0xdc> <== ALWAYS TAKEN
106741: e9 96 00 00 00 jmp 1067dc <create_disk+0x172> <== NOT EXECUTED
return RTEMS_NO_MEMORY;
}
if (*dd_entry != NULL) {
return RTEMS_RESOURCE_IN_USE;
106746: b8 0c 00 00 00 mov $0xc,%eax
if (dd_entry == NULL) {
return RTEMS_NO_MEMORY;
}
if (*dd_entry != NULL) {
10674b: 83 3b 00 cmpl $0x0,(%ebx)
10674e: 0f 85 8d 00 00 00 jne 1067e1 <create_disk+0x177>
return RTEMS_RESOURCE_IN_USE;
}
dd = malloc(sizeof(*dd));
106754: 83 ec 0c sub $0xc,%esp
106757: 6a 74 push $0x74
106759: e8 e6 11 00 00 call 107944 <malloc>
10675e: 89 c6 mov %eax,%esi
if (dd == NULL) {
106760: 83 c4 10 add $0x10,%esp
106763: 85 c0 test %eax,%eax
106765: 74 75 je 1067dc <create_disk+0x172> <== NEVER TAKEN
return RTEMS_NO_MEMORY;
}
if (name != NULL) {
106767: 83 7d d4 00 cmpl $0x0,-0x2c(%ebp)
10676b: 74 3d je 1067aa <create_disk+0x140>
alloc_name = strdup(name);
10676d: 83 ec 0c sub $0xc,%esp
106770: ff 75 d4 pushl -0x2c(%ebp)
106773: e8 08 ea 00 00 call 115180 <strdup>
106778: 89 c7 mov %eax,%edi
if (alloc_name == NULL) {
10677a: 83 c4 10 add $0x10,%esp
10677d: 85 c0 test %eax,%eax
10677f: 75 3b jne 1067bc <create_disk+0x152> <== ALWAYS TAKEN
free(dd);
106781: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
106784: 56 push %esi <== NOT EXECUTED
106785: e8 9a 0d 00 00 call 107524 <free> <== NOT EXECUTED
return RTEMS_NO_MEMORY;
10678a: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
10678d: eb 4d jmp 1067dc <create_disk+0x172> <== NOT EXECUTED
}
}
if (name != NULL) {
if (mknod(alloc_name, 0777 | S_IFBLK, dev) < 0) {
free(alloc_name);
10678f: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
106792: 57 push %edi <== NOT EXECUTED
106793: e8 8c 0d 00 00 call 107524 <free> <== NOT EXECUTED
free(dd);
106798: 89 34 24 mov %esi,(%esp) <== NOT EXECUTED
10679b: e8 84 0d 00 00 call 107524 <free> <== NOT EXECUTED
return RTEMS_UNSATISFIED;
1067a0: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
1067a3: b8 0d 00 00 00 mov $0xd,%eax <== NOT EXECUTED
1067a8: eb 37 jmp 1067e1 <create_disk+0x177> <== NOT EXECUTED
char **alloc_name_ptr
)
{
rtems_disk_device **dd_entry = create_disk_table_entry(dev);
rtems_disk_device *dd = NULL;
char *alloc_name = NULL;
1067aa: 31 d2 xor %edx,%edx
free(dd);
return RTEMS_UNSATISFIED;
}
}
*dd_entry = dd;
1067ac: 89 33 mov %esi,(%ebx)
*dd_ptr = dd;
1067ae: 8b 45 08 mov 0x8(%ebp),%eax
1067b1: 89 30 mov %esi,(%eax)
*alloc_name_ptr = alloc_name;
1067b3: 8b 45 0c mov 0xc(%ebp),%eax
1067b6: 89 10 mov %edx,(%eax)
return RTEMS_SUCCESSFUL;
1067b8: 31 c0 xor %eax,%eax
1067ba: eb 25 jmp 1067e1 <create_disk+0x177>
return RTEMS_NO_MEMORY;
}
}
if (name != NULL) {
if (mknod(alloc_name, 0777 | S_IFBLK, dev) < 0) {
1067bc: ff 75 dc pushl -0x24(%ebp)
1067bf: ff 75 d8 pushl -0x28(%ebp)
1067c2: 68 ff 61 00 00 push $0x61ff
1067c7: 50 push %eax
1067c8: 89 45 d0 mov %eax,-0x30(%ebp)
1067cb: e8 c8 12 00 00 call 107a98 <mknod>
1067d0: 83 c4 10 add $0x10,%esp
1067d3: 85 c0 test %eax,%eax
1067d5: 8b 55 d0 mov -0x30(%ebp),%edx
1067d8: 79 d2 jns 1067ac <create_disk+0x142> <== ALWAYS TAKEN
1067da: eb b3 jmp 10678f <create_disk+0x125> <== NOT EXECUTED
rtems_disk_device **dd_entry = create_disk_table_entry(dev);
rtems_disk_device *dd = NULL;
char *alloc_name = NULL;
if (dd_entry == NULL) {
return RTEMS_NO_MEMORY;
1067dc: b8 1a 00 00 00 mov $0x1a,%eax
*dd_entry = dd;
*dd_ptr = dd;
*alloc_name_ptr = alloc_name;
return RTEMS_SUCCESSFUL;
}
1067e1: 8d 65 f4 lea -0xc(%ebp),%esp
1067e4: 5b pop %ebx
1067e5: 5e pop %esi
1067e6: 5f pop %edi
1067e7: 5d pop %ebp
1067e8: c3 ret
00107766 <data_to_part_desc.part.1>:
* RTEMS_SUCCESSFUL, if success;
* RTEMS_NO_MEMOTY, if cannot allocate memory for part_desc_t strucure;
* RTEMS_INTERNAL_ERROR, if other error occurs.
*/
static rtems_status_code
data_to_part_desc(uint8_t *data, rtems_part_desc_t **new_part_desc)
107766: 55 push %ebp
107767: 89 e5 mov %esp,%ebp
107769: 57 push %edi
10776a: 56 push %esi
10776b: 53 push %ebx
10776c: 83 ec 14 sub $0x14,%esp
10776f: 89 c6 mov %eax,%esi
107771: 89 d7 mov %edx,%edi
if (new_part_desc == NULL)
{
return RTEMS_INTERNAL_ERROR;
}
*new_part_desc = NULL;
107773: c7 02 00 00 00 00 movl $0x0,(%edx)
if ((part_desc = calloc(1, sizeof(rtems_part_desc_t))) == NULL)
107779: 6a 28 push $0x28
10777b: 6a 01 push $0x1
10777d: e8 3a 0a 00 00 call 1081bc <calloc>
107782: 89 c3 mov %eax,%ebx
107784: 83 c4 10 add $0x10,%esp
107787: 85 c0 test %eax,%eax
107789: 74 4e je 1077d9 <data_to_part_desc.part.1+0x73><== NEVER TAKEN
{
return RTEMS_NO_MEMORY;
}
part_desc->bootable = *(data + RTEMS_IDE_PARTITION_BOOTABLE_OFFSET);
10778b: 8a 06 mov (%esi),%al
10778d: 88 03 mov %al,(%ebx)
part_desc->sys_type = *(data + RTEMS_IDE_PARTITION_SYS_TYPE_OFFSET);
10778f: 0f b6 46 04 movzbl 0x4(%esi),%eax
107793: 88 43 01 mov %al,0x1(%ebx)
/* read the offset start position and partition size in sectors */
/* due to incorrect data alignment one have to align data first */
memcpy(&temp, data + RTEMS_IDE_PARTITION_START_OFFSET, sizeof(uint32_t));
107796: 8b 56 08 mov 0x8(%esi),%edx
part_desc->start = LE_TO_CPU_U32(temp);
107799: 89 53 04 mov %edx,0x4(%ebx)
memcpy(&temp, data + RTEMS_IDE_PARTITION_SIZE_OFFSET, sizeof(uint32_t));
10779c: 8b 76 0c mov 0xc(%esi),%esi
part_desc->size = LE_TO_CPU_U32(temp);
10779f: 89 73 08 mov %esi,0x8(%ebx)
* true if partition type is extended, false otherwise
*/
static bool
is_extended(uint8_t type)
{
return ((type == EXTENDED_PARTITION) || (type == LINUX_EXTENDED));
1077a2: 88 c2 mov %al,%dl
1077a4: 83 e2 7f and $0x7f,%edx
* use partitions that are
* - extended
* or
* - FAT type and non-zero
*/
if (is_extended(part_desc->sys_type) ||
1077a7: 80 fa 05 cmp $0x5,%dl
1077aa: 74 19 je 1077c5 <data_to_part_desc.part.1+0x5f>
DOS_P32MB_PARTITION,
FAT32_PARTITION ,FAT32_LBA_PARTITION,
FAT16_LBA_PARTITION
};
return (NULL != memchr(fat_part_types,type,sizeof(fat_part_types)));
1077ac: 52 push %edx
1077ad: 6a 06 push $0x6
1077af: 50 push %eax
1077b0: 68 90 38 12 00 push $0x123890
1077b5: e8 d6 e1 00 00 call 115990 <memchr>
1077ba: 83 c4 10 add $0x10,%esp
* use partitions that are
* - extended
* or
* - FAT type and non-zero
*/
if (is_extended(part_desc->sys_type) ||
1077bd: 85 c0 test %eax,%eax
1077bf: 74 08 je 1077c9 <data_to_part_desc.part.1+0x63>
((is_fat_partition(part_desc->sys_type)) && (part_desc->size != 0))) {
1077c1: 85 f6 test %esi,%esi
1077c3: 74 04 je 1077c9 <data_to_part_desc.part.1+0x63><== NEVER TAKEN
*new_part_desc = part_desc;
1077c5: 89 1f mov %ebx,(%edi)
1077c7: eb 0c jmp 1077d5 <data_to_part_desc.part.1+0x6f>
}
else {
/* empty partition */
free(part_desc);
1077c9: 83 ec 0c sub $0xc,%esp
1077cc: 53 push %ebx
1077cd: e8 56 0c 00 00 call 108428 <free>
1077d2: 83 c4 10 add $0x10,%esp
}
return RTEMS_SUCCESSFUL;
1077d5: 31 c0 xor %eax,%eax
1077d7: eb 05 jmp 1077de <data_to_part_desc.part.1+0x78>
*new_part_desc = NULL;
if ((part_desc = calloc(1, sizeof(rtems_part_desc_t))) == NULL)
{
return RTEMS_NO_MEMORY;
1077d9: b8 1a 00 00 00 mov $0x1a,%eax <== NOT EXECUTED
else {
/* empty partition */
free(part_desc);
}
return RTEMS_SUCCESSFUL;
}
1077de: 8d 65 f4 lea -0xc(%ebp),%esp
1077e1: 5b pop %ebx
1077e2: 5e pop %esi
1077e3: 5f pop %edi
1077e4: 5d pop %ebp
1077e5: c3 ret
00105e08 <devFS_Show>:
#include "devfs.h"
void devFS_Show(void)
{
rtems_filesystem_location_info_t *rootloc = &rtems_filesystem_root->location;
105e08: a1 14 91 12 00 mov 0x129114,%eax
if (rootloc->mt_entry->ops == &devFS_ops) {
105e0d: 8b 40 04 mov 0x4(%eax),%eax
105e10: 8b 40 14 mov 0x14(%eax),%eax
105e13: 81 78 0c 10 d6 11 00 cmpl $0x11d610,0xc(%eax)
105e1a: 75 77 jne 105e93 <devFS_Show+0x8b> <== NEVER TAKEN
#endif
#include "devfs.h"
void devFS_Show(void)
{
105e1c: 55 push %ebp
105e1d: 89 e5 mov %esp,%ebp
105e1f: 57 push %edi
105e20: 56 push %esi
105e21: 53 push %ebx
105e22: 83 ec 1c sub $0x1c,%esp
static inline const devFS_data *devFS_get_data(
const rtems_filesystem_location_info_t *loc
)
{
return (const devFS_data *) loc->mt_entry->immutable_fs_info;
105e25: 8b 40 10 mov 0x10(%eax),%eax
rtems_filesystem_location_info_t *rootloc = &rtems_filesystem_root->location;
if (rootloc->mt_entry->ops == &devFS_ops) {
const devFS_data *data = devFS_get_data(rootloc);
size_t i = 0;
size_t n = data->count;
105e28: 8b 50 04 mov 0x4(%eax),%edx
105e2b: 89 55 e4 mov %edx,-0x1c(%ebp)
105e2e: 8b 30 mov (%eax),%esi
devFS_node *nodes = data->nodes;
for (i = 0; i < n; ++i) {
105e30: 31 db xor %ebx,%ebx
105e32: eb 53 jmp 105e87 <devFS_Show+0x7f>
devFS_node *current = nodes + i;
if (current->name != NULL) {
105e34: 83 3e 00 cmpl $0x0,(%esi)
105e37: 74 4a je 105e83 <devFS_Show+0x7b> <== NEVER TAKEN
size_t j = 0;
size_t m = current->namelen;
105e39: 8b 46 04 mov 0x4(%esi),%eax
105e3c: 89 45 e0 mov %eax,-0x20(%ebp)
printk("/");
105e3f: 83 ec 0c sub $0xc,%esp
105e42: 68 64 d6 11 00 push $0x11d664
105e47: e8 60 10 00 00 call 106eac <printk>
for (j = 0; j < m; ++j) {
105e4c: 83 c4 10 add $0x10,%esp
105e4f: 31 ff xor %edi,%edi
105e51: eb 17 jmp 105e6a <devFS_Show+0x62>
printk("%c", current->name [j]);
105e53: 52 push %edx
105e54: 52 push %edx
105e55: 8b 0e mov (%esi),%ecx
105e57: 0f be 0c 39 movsbl (%ecx,%edi,1),%ecx
105e5b: 51 push %ecx
105e5c: 68 66 d6 11 00 push $0x11d666
105e61: e8 46 10 00 00 call 106eac <printk>
if (current->name != NULL) {
size_t j = 0;
size_t m = current->namelen;
printk("/");
for (j = 0; j < m; ++j) {
105e66: 47 inc %edi
105e67: 83 c4 10 add $0x10,%esp
105e6a: 3b 7d e0 cmp -0x20(%ebp),%edi
105e6d: 75 e4 jne 105e53 <devFS_Show+0x4b>
printk("%c", current->name [j]);
}
printk(
105e6f: 50 push %eax
105e70: ff 76 0c pushl 0xc(%esi)
105e73: ff 76 08 pushl 0x8(%esi)
105e76: 68 69 d6 11 00 push $0x11d669
105e7b: e8 2c 10 00 00 call 106eac <printk>
105e80: 83 c4 10 add $0x10,%esp
const devFS_data *data = devFS_get_data(rootloc);
size_t i = 0;
size_t n = data->count;
devFS_node *nodes = data->nodes;
for (i = 0; i < n; ++i) {
105e83: 43 inc %ebx
105e84: 83 c6 14 add $0x14,%esi
105e87: 3b 5d e4 cmp -0x1c(%ebp),%ebx
105e8a: 75 a8 jne 105e34 <devFS_Show+0x2c>
(unsigned long) current->minor
);
}
}
}
}
105e8c: 8d 65 f4 lea -0xc(%ebp),%esp
105e8f: 5b pop %ebx
105e90: 5e pop %esi
105e91: 5f pop %edi
105e92: 5d pop %ebp
105e93: c3 ret
0010da90 <devFS_eval_path>:
}
void devFS_eval_path(
rtems_filesystem_eval_path_context_t *ctx
)
{
10da90: 55 push %ebp
10da91: 89 e5 mov %esp,%ebp
10da93: 57 push %edi
10da94: 56 push %esi
10da95: 53 push %ebx
10da96: 83 ec 2c sub $0x2c,%esp
10da99: 8b 5d 08 mov 0x8(%ebp),%ebx
}
} else {
rtems_filesystem_eval_path_error(ctx, ENOENT);
}
}
}
10da9c: 8b 53 04 mov 0x4(%ebx),%edx
10da9f: 8b 0b mov (%ebx),%ecx
10daa1: 89 4d e0 mov %ecx,-0x20(%ebp)
static inline const devFS_data *devFS_get_data(
const rtems_filesystem_location_info_t *loc
)
{
return (const devFS_data *) loc->mt_entry->immutable_fs_info;
10daa4: 8b 43 2c mov 0x2c(%ebx),%eax
10daa7: 8b 40 10 mov 0x10(%eax),%eax
size_t pathlen,
devFS_node **free_node_ptr
)
{
size_t i = 0;
size_t n = data->count;
10daaa: 8b 48 04 mov 0x4(%eax),%ecx
10daad: 89 4d d8 mov %ecx,-0x28(%ebp)
10dab0: 8b 30 mov (%eax),%esi
devFS_node *nodes = data->nodes;
devFS_node *node = NULL;
devFS_node *free_node = NULL;
10dab2: 31 c0 xor %eax,%eax
)
{
size_t i = 0;
size_t n = data->count;
devFS_node *nodes = data->nodes;
devFS_node *node = NULL;
10dab4: 31 ff xor %edi,%edi
devFS_node *free_node = NULL;
for (i = 0; (free_node == NULL || node == NULL) && i < n; ++i) {
10dab6: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
10dabd: eb 34 jmp 10daf3 <devFS_eval_path+0x63>
devFS_node *current = nodes + i;
10dabf: 89 75 dc mov %esi,-0x24(%ebp)
if (current->name != NULL) {
10dac2: 8b 0e mov (%esi),%ecx
10dac4: 85 c9 test %ecx,%ecx
10dac6: 74 22 je 10daea <devFS_eval_path+0x5a>
if (
10dac8: 89 45 dc mov %eax,-0x24(%ebp)
10dacb: 39 56 04 cmp %edx,0x4(%esi)
10dace: 75 1a jne 10daea <devFS_eval_path+0x5a>
current->namelen == pathlen
&& memcmp(current->name, path, pathlen) == 0
10dad0: 50 push %eax
10dad1: 52 push %edx
10dad2: ff 75 e0 pushl -0x20(%ebp)
10dad5: 51 push %ecx
10dad6: 89 55 d4 mov %edx,-0x2c(%ebp)
10dad9: e8 6a 34 00 00 call 110f48 <memcmp>
10dade: 83 c4 10 add $0x10,%esp
10dae1: 85 c0 test %eax,%eax
10dae3: 8b 55 d4 mov -0x2c(%ebp),%edx
10dae6: 75 02 jne 10daea <devFS_eval_path+0x5a>
10dae8: 89 f7 mov %esi,%edi
size_t n = data->count;
devFS_node *nodes = data->nodes;
devFS_node *node = NULL;
devFS_node *free_node = NULL;
for (i = 0; (free_node == NULL || node == NULL) && i < n; ++i) {
10daea: ff 45 e4 incl -0x1c(%ebp)
10daed: 83 c6 14 add $0x14,%esi
10daf0: 8b 45 dc mov -0x24(%ebp),%eax
10daf3: 85 ff test %edi,%edi
10daf5: 74 0d je 10db04 <devFS_eval_path+0x74>
10daf7: 85 c0 test %eax,%eax
10daf9: 74 09 je 10db04 <devFS_eval_path+0x74> <== ALWAYS TAKEN
}
} else {
rtems_filesystem_eval_path_error(ctx, ENOENT);
}
}
}
10dafb: 8b 4b 10 mov 0x10(%ebx),%ecx
rtems_filesystem_eval_path_get_pathlen(ctx),
&free_node
);
int eval_flags = rtems_filesystem_eval_path_get_flags(ctx);
if (node != NULL) {
10dafe: 85 ff test %edi,%edi
10db00: 75 0c jne 10db0e <devFS_eval_path+0x7e>
10db02: eb 1a jmp 10db1e <devFS_eval_path+0x8e>
size_t n = data->count;
devFS_node *nodes = data->nodes;
devFS_node *node = NULL;
devFS_node *free_node = NULL;
for (i = 0; (free_node == NULL || node == NULL) && i < n; ++i) {
10db04: 8b 4d d8 mov -0x28(%ebp),%ecx
10db07: 39 4d e4 cmp %ecx,-0x1c(%ebp)
10db0a: 75 b3 jne 10dabf <devFS_eval_path+0x2f>
10db0c: eb ed jmp 10dafb <devFS_eval_path+0x6b>
&free_node
);
int eval_flags = rtems_filesystem_eval_path_get_flags(ctx);
if (node != NULL) {
if ((eval_flags & RTEMS_FS_EXCLUSIVE) == 0) {
10db0e: 80 e1 40 and $0x40,%cl
10db11: 75 05 jne 10db18 <devFS_eval_path+0x88> <== NEVER TAKEN
currentloc->node_access = node;
10db13: 89 7b 20 mov %edi,0x20(%ebx)
10db16: eb 22 jmp 10db3a <devFS_eval_path+0xaa>
rtems_filesystem_eval_path_clear_path(ctx);
} else {
rtems_filesystem_eval_path_error(ctx, EEXIST);
10db18: 51 push %ecx <== NOT EXECUTED
10db19: 51 push %ecx <== NOT EXECUTED
10db1a: 6a 11 push $0x11 <== NOT EXECUTED
10db1c: eb 2f jmp 10db4d <devFS_eval_path+0xbd> <== NOT EXECUTED
}
} else {
if ((eval_flags & RTEMS_FS_MAKE) != 0) {
10db1e: 80 e1 20 and $0x20,%cl
10db21: 74 26 je 10db49 <devFS_eval_path+0xb9> <== NEVER TAKEN
if (free_node != NULL) {
10db23: 85 c0 test %eax,%eax
10db25: 74 1c je 10db43 <devFS_eval_path+0xb3>
free_node->mode = S_IRWXU | S_IRWXG | S_IRWXO;
10db27: c7 40 10 ff 01 00 00 movl $0x1ff,0x10(%eax)
currentloc->node_access = free_node;
10db2e: 89 43 20 mov %eax,0x20(%ebx)
rtems_filesystem_eval_path_context_t *ctx,
const char *token,
size_t tokenlen
)
{
ctx->token = token;
10db31: 8b 4d e0 mov -0x20(%ebp),%ecx
10db34: 89 4b 08 mov %ecx,0x8(%ebx)
ctx->tokenlen = tokenlen;
10db37: 89 53 0c mov %edx,0xc(%ebx)
static inline void rtems_filesystem_eval_path_clear_path(
rtems_filesystem_eval_path_context_t *ctx
)
{
ctx->pathlen = 0;
10db3a: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx)
10db41: eb 13 jmp 10db56 <devFS_eval_path+0xc6>
rtems_filesystem_eval_path_get_path(ctx),
rtems_filesystem_eval_path_get_pathlen(ctx)
);
rtems_filesystem_eval_path_clear_path(ctx);
} else {
rtems_filesystem_eval_path_error(ctx, ENOSPC);
10db43: 52 push %edx
10db44: 52 push %edx
10db45: 6a 1c push $0x1c
10db47: eb 04 jmp 10db4d <devFS_eval_path+0xbd>
}
} else {
rtems_filesystem_eval_path_error(ctx, ENOENT);
10db49: 50 push %eax <== NOT EXECUTED
10db4a: 50 push %eax <== NOT EXECUTED
10db4b: 6a 02 push $0x2 <== NOT EXECUTED
10db4d: 53 push %ebx
10db4e: e8 f7 a0 ff ff call 107c4a <rtems_filesystem_eval_path_error>
10db53: 83 c4 10 add $0x10,%esp
}
}
}
10db56: 8d 65 f4 lea -0xc(%ebp),%esp
10db59: 5b pop %ebx
10db5a: 5e pop %esi
10db5b: 5f pop %edi
10db5c: 5d pop %ebp
10db5d: c3 ret
00106884 <devFS_mknod>:
const char *name,
size_t namelen,
mode_t mode,
dev_t dev
)
{
106884: 55 push %ebp
106885: 89 e5 mov %esp,%ebp
106887: 57 push %edi
106888: 56 push %esi
106889: 53 push %ebx
10688a: 83 ec 1c sub $0x1c,%esp
10688d: 8b 75 0c mov 0xc(%ebp),%esi
106890: 8b 4d 10 mov 0x10(%ebp),%ecx
106893: 8b 7d 18 mov 0x18(%ebp),%edi
106896: 8b 5d 1c mov 0x1c(%ebp),%ebx
int rv = 0;
if (namelen != 3 || name [0] != 'd' || name [1] != 'e' || name [2] != 'v') {
106899: 83 f9 03 cmp $0x3,%ecx
10689c: 75 11 jne 1068af <devFS_mknod+0x2b>
10689e: 80 3e 64 cmpb $0x64,(%esi)
1068a1: 75 0c jne 1068af <devFS_mknod+0x2b> <== NEVER TAKEN
1068a3: 80 7e 01 65 cmpb $0x65,0x1(%esi)
1068a7: 75 06 jne 1068af <devFS_mknod+0x2b> <== NEVER TAKEN
1068a9: 80 7e 02 76 cmpb $0x76,0x2(%esi)
1068ad: 74 51 je 106900 <devFS_mknod+0x7c> <== ALWAYS TAKEN
if (S_ISBLK(mode) || S_ISCHR(mode)) {
1068af: 8b 45 14 mov 0x14(%ebp),%eax
1068b2: 25 00 b0 00 00 and $0xb000,%eax
1068b7: 3d 00 20 00 00 cmp $0x2000,%eax
1068bc: 75 55 jne 106913 <devFS_mknod+0x8f>
char *dupname = malloc(namelen);
1068be: 83 ec 0c sub $0xc,%esp
1068c1: 51 push %ecx
1068c2: 89 4d e4 mov %ecx,-0x1c(%ebp)
1068c5: e8 3e 06 00 00 call 106f08 <malloc>
if (dupname != NULL) {
1068ca: 83 c4 10 add $0x10,%esp
1068cd: 85 c0 test %eax,%eax
1068cf: 8b 4d e4 mov -0x1c(%ebp),%ecx
1068d2: 74 1f je 1068f3 <devFS_mknod+0x6f> <== NEVER TAKEN
devFS_node *node = parentloc->node_access;
1068d4: 8b 55 08 mov 0x8(%ebp),%edx
1068d7: 8b 52 08 mov 0x8(%edx),%edx
node->name = dupname;
1068da: 89 02 mov %eax,(%edx)
node->namelen = namelen;
1068dc: 89 4a 04 mov %ecx,0x4(%edx)
node->major = rtems_filesystem_dev_major_t(dev);
1068df: 89 7a 08 mov %edi,0x8(%edx)
node->minor = rtems_filesystem_dev_minor_t(dev);
1068e2: 89 5a 0c mov %ebx,0xc(%edx)
node->mode = mode;
1068e5: 8b 5d 14 mov 0x14(%ebp),%ebx
1068e8: 89 5a 10 mov %ebx,0x10(%edx)
memcpy(dupname, name, namelen);
1068eb: 89 c7 mov %eax,%edi
1068ed: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
size_t namelen,
mode_t mode,
dev_t dev
)
{
int rv = 0;
1068ef: 31 c0 xor %eax,%eax
1068f1: eb 2e jmp 106921 <devFS_mknod+0x9d>
node->major = rtems_filesystem_dev_major_t(dev);
node->minor = rtems_filesystem_dev_minor_t(dev);
node->mode = mode;
memcpy(dupname, name, namelen);
} else {
errno = ENOMEM;
1068f3: e8 80 98 00 00 call 110178 <__errno> <== NOT EXECUTED
1068f8: c7 00 0c 00 00 00 movl $0xc,(%eax) <== NOT EXECUTED
1068fe: eb 1e jmp 10691e <devFS_mknod+0x9a> <== NOT EXECUTED
} else {
errno = ENOTSUP;
rv = -1;
}
} else {
if (!S_ISDIR(mode)) {
106900: 8b 55 14 mov 0x14(%ebp),%edx
106903: 81 e2 00 f0 00 00 and $0xf000,%edx
size_t namelen,
mode_t mode,
dev_t dev
)
{
int rv = 0;
106909: 31 c0 xor %eax,%eax
} else {
errno = ENOTSUP;
rv = -1;
}
} else {
if (!S_ISDIR(mode)) {
10690b: 81 fa 00 40 00 00 cmp $0x4000,%edx
106911: 74 0e je 106921 <devFS_mknod+0x9d> <== ALWAYS TAKEN
errno = ENOTSUP;
106913: e8 60 98 00 00 call 110178 <__errno>
106918: c7 00 86 00 00 00 movl $0x86,(%eax)
rv = -1;
10691e: 83 c8 ff or $0xffffffff,%eax
}
}
return rv;
}
106921: 8d 65 f4 lea -0xc(%ebp),%esp
106924: 5b pop %ebx
106925: 5e pop %esi
106926: 5f pop %edi
106927: 5d pop %ebp
106928: c3 ret
0010697c <devFS_read>:
ssize_t devFS_read(
rtems_libio_t *iop,
void *buffer,
size_t count
)
{
10697c: 55 push %ebp <== NOT EXECUTED
10697d: 89 e5 mov %esp,%ebp <== NOT EXECUTED
10697f: 83 ec 14 sub $0x14,%esp <== NOT EXECUTED
106982: 8b 45 08 mov 0x8(%ebp),%eax <== NOT EXECUTED
const devFS_node *np = iop->pathinfo.node_access;
106985: 8b 50 18 mov 0x18(%eax),%edx <== NOT EXECUTED
return rtems_deviceio_read( iop, buffer, count, np->major, np->minor );
106988: ff 72 0c pushl 0xc(%edx) <== NOT EXECUTED
10698b: ff 72 08 pushl 0x8(%edx) <== NOT EXECUTED
10698e: ff 75 10 pushl 0x10(%ebp) <== NOT EXECUTED
106991: ff 75 0c pushl 0xc(%ebp) <== NOT EXECUTED
106994: 50 push %eax <== NOT EXECUTED
106995: e8 72 11 00 00 call 107b0c <rtems_deviceio_read> <== NOT EXECUTED
}
10699a: c9 leave <== NOT EXECUTED
10699b: c3 ret <== NOT EXECUTED
0010660e <disk_lock>:
*/
static volatile bool diskdevs_protected;
static rtems_status_code
disk_lock(void)
{
10660e: 55 push %ebp
10660f: 89 e5 mov %esp,%ebp
106611: 83 ec 0c sub $0xc,%esp
rtems_status_code sc = RTEMS_SUCCESSFUL;
sc = rtems_semaphore_obtain(diskdevs_mutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
106614: 6a 00 push $0x0
106616: 6a 00 push $0x0
106618: ff 35 98 1f 13 00 pushl 0x131f98
10661e: e8 11 47 00 00 call 10ad34 <rtems_semaphore_obtain>
if (sc == RTEMS_SUCCESSFUL) {
106623: 83 c4 10 add $0x10,%esp
diskdevs_protected = true;
return RTEMS_SUCCESSFUL;
} else {
return RTEMS_NOT_CONFIGURED;
106626: ba 16 00 00 00 mov $0x16,%edx
disk_lock(void)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
sc = rtems_semaphore_obtain(diskdevs_mutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc == RTEMS_SUCCESSFUL) {
10662b: 85 c0 test %eax,%eax
10662d: 75 09 jne 106638 <disk_lock+0x2a> <== NEVER TAKEN
diskdevs_protected = true;
10662f: c6 05 94 1f 13 00 01 movb $0x1,0x131f94
return RTEMS_SUCCESSFUL;
106636: 30 d2 xor %dl,%dl
} else {
return RTEMS_NOT_CONFIGURED;
}
}
106638: 89 d0 mov %edx,%eax
10663a: c9 leave
10663b: c3 ret
0010663c <disk_unlock>:
static void
disk_unlock(void)
{
10663c: 55 push %ebp
10663d: 89 e5 mov %esp,%ebp
10663f: 83 ec 14 sub $0x14,%esp
rtems_status_code sc = RTEMS_SUCCESSFUL;
diskdevs_protected = false;
106642: c6 05 94 1f 13 00 00 movb $0x0,0x131f94
sc = rtems_semaphore_release(diskdevs_mutex);
106649: ff 35 98 1f 13 00 pushl 0x131f98
10664f: e8 d0 47 00 00 call 10ae24 <rtems_semaphore_release>
if (sc != RTEMS_SUCCESSFUL) {
106654: 83 c4 10 add $0x10,%esp
106657: 85 c0 test %eax,%eax
106659: 74 0d je 106668 <disk_unlock+0x2c> <== ALWAYS TAKEN
/* FIXME: Error number */
rtems_fatal_error_occurred(0xdeadbeef);
10665b: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10665e: 68 ef be ad de push $0xdeadbeef <== NOT EXECUTED
106663: e8 a8 4c 00 00 call 10b310 <rtems_fatal_error_occurred><== NOT EXECUTED
}
}
106668: c9 leave
106669: c3 ret
00107fa6 <drainOutput.part.0>:
/*
* Drain output queue
*/
static void
drainOutput (struct rtems_termios_tty *tty)
107fa6: 55 push %ebp
107fa7: 89 e5 mov %esp,%ebp
107fa9: 53 push %ebx
107faa: 52 push %edx
107fab: 89 c3 mov %eax,%ebx
107fad: eb 2c jmp 107fdb <drainOutput.part.0+0x35>
rtems_status_code sc;
if (tty->device.outputUsesInterrupts != TERMIOS_POLLED) {
rtems_interrupt_disable (level);
while (tty->rawOutBuf.Tail != tty->rawOutBuf.Head) {
tty->rawOutBufState = rob_wait;
107faf: c7 83 94 00 00 00 02 movl $0x2,0x94(%ebx)
107fb6: 00 00 00
rtems_interrupt_enable (level);
107fb9: 50 push %eax
107fba: 9d popf
sc = rtems_semaphore_obtain(
107fbb: 50 push %eax
107fbc: 6a 00 push $0x0
107fbe: 6a 00 push $0x0
107fc0: ff b3 8c 00 00 00 pushl 0x8c(%ebx)
107fc6: e8 c5 1d 00 00 call 109d90 <rtems_semaphore_obtain>
tty->rawOutBuf.Semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
107fcb: 83 c4 10 add $0x10,%esp
107fce: 85 c0 test %eax,%eax
107fd0: 74 09 je 107fdb <drainOutput.part.0+0x35><== ALWAYS TAKEN
rtems_fatal_error_occurred (sc);
107fd2: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
107fd5: 50 push %eax <== NOT EXECUTED
107fd6: e8 d9 23 00 00 call 10a3b4 <rtems_fatal_error_occurred><== NOT EXECUTED
rtems_interrupt_disable (level);
107fdb: 9c pushf
107fdc: fa cli
107fdd: 58 pop %eax
rtems_interrupt_level level;
rtems_status_code sc;
if (tty->device.outputUsesInterrupts != TERMIOS_POLLED) {
rtems_interrupt_disable (level);
while (tty->rawOutBuf.Tail != tty->rawOutBuf.Head) {
107fde: 8b 8b 84 00 00 00 mov 0x84(%ebx),%ecx
107fe4: 8b 93 80 00 00 00 mov 0x80(%ebx),%edx
107fea: 39 d1 cmp %edx,%ecx
107fec: 75 c1 jne 107faf <drainOutput.part.0+0x9>
tty->rawOutBuf.Semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
rtems_interrupt_disable (level);
}
rtems_interrupt_enable (level);
107fee: 50 push %eax
107fef: 9d popf
}
}
107ff0: 8b 5d fc mov -0x4(%ebp),%ebx
107ff3: c9 leave
107ff4: c3 ret
00106bac <dup2>:
int dup2(
int fildes,
int fildes2
)
{
106bac: 55 push %ebp
106bad: 89 e5 mov %esp,%ebp
106baf: 57 push %edi
106bb0: 56 push %esi
106bb1: 53 push %ebx
106bb2: 83 ec 64 sub $0x64,%esp
106bb5: 8b 5d 08 mov 0x8(%ebp),%ebx
106bb8: 8b 75 0c mov 0xc(%ebp),%esi
/*
* If fildes is not valid, then fildes2 should not be closed.
*/
status = fstat( fildes, &buf );
106bbb: 8d 7d a0 lea -0x60(%ebp),%edi
106bbe: 57 push %edi
106bbf: 53 push %ebx
106bc0: e8 eb 04 00 00 call 1070b0 <fstat>
if ( status == -1 )
106bc5: 83 c4 10 add $0x10,%esp
106bc8: 40 inc %eax
106bc9: 75 05 jne 106bd0 <dup2+0x24>
return -1;
106bcb: 83 c8 ff or $0xffffffff,%eax
106bce: eb 1c jmp 106bec <dup2+0x40>
/*
* If fildes2 is not valid, then we should not do anything either.
*/
status = fstat( fildes2, &buf );
106bd0: 52 push %edx
106bd1: 52 push %edx
106bd2: 57 push %edi
106bd3: 56 push %esi
106bd4: e8 d7 04 00 00 call 1070b0 <fstat>
if ( status == -1 )
106bd9: 83 c4 10 add $0x10,%esp
106bdc: 40 inc %eax
106bdd: 74 ec je 106bcb <dup2+0x1f> <== NEVER TAKEN
/*
* This fcntl handles everything else.
*/
return fcntl( fildes, F_DUPFD, fildes2 );
106bdf: 50 push %eax
106be0: 56 push %esi
106be1: 6a 00 push $0x0
106be3: 53 push %ebx
106be4: e8 eb 01 00 00 call 106dd4 <fcntl>
106be9: 83 c4 10 add $0x10,%esp
}
106bec: 8d 65 f4 lea -0xc(%ebp),%esp
106bef: 5b pop %ebx
106bf0: 5e pop %esi
106bf1: 5f pop %edi
106bf2: 5d pop %ebp
106bf3: c3 ret
00108ae8 <echo>:
/*
* Echo a typed character
*/
static void
echo (unsigned char c, struct rtems_termios_tty *tty)
{
108ae8: 55 push %ebp
108ae9: 89 e5 mov %esp,%ebp
108aeb: 53 push %ebx
108aec: 83 ec 24 sub $0x24,%esp
if ((tty->termios.c_lflag & ECHOCTL) &&
108aef: f6 42 3d 02 testb $0x2,0x3d(%edx)
108af3: 74 3e je 108b33 <echo+0x4b> <== NEVER TAKEN
iscntrl(c) && (c != '\t') && (c != '\n')) {
108af5: 0f b6 c8 movzbl %al,%ecx
* Echo a typed character
*/
static void
echo (unsigned char c, struct rtems_termios_tty *tty)
{
if ((tty->termios.c_lflag & ECHOCTL) &&
108af8: 8b 1d 88 c2 12 00 mov 0x12c288,%ebx
108afe: f6 44 0b 01 20 testb $0x20,0x1(%ebx,%ecx,1)
108b03: 74 2e je 108b33 <echo+0x4b>
iscntrl(c) && (c != '\t') && (c != '\n')) {
108b05: 8d 48 f7 lea -0x9(%eax),%ecx
108b08: 80 f9 01 cmp $0x1,%cl
108b0b: 76 26 jbe 108b33 <echo+0x4b>
char echobuf[2];
echobuf[0] = '^';
108b0d: c6 45 f6 5e movb $0x5e,-0xa(%ebp)
echobuf[1] = c ^ 0x40;
108b11: 83 f0 40 xor $0x40,%eax
108b14: 88 45 f7 mov %al,-0x9(%ebp)
rtems_termios_puts (echobuf, 2, tty);
108b17: 53 push %ebx
108b18: 52 push %edx
108b19: 6a 02 push $0x2
108b1b: 8d 45 f6 lea -0xa(%ebp),%eax
108b1e: 50 push %eax
108b1f: 89 55 e4 mov %edx,-0x1c(%ebp)
108b22: e8 9e fd ff ff call 1088c5 <rtems_termios_puts>
tty->column += 2;
108b27: 8b 55 e4 mov -0x1c(%ebp),%edx
108b2a: 83 42 28 02 addl $0x2,0x28(%edx)
108b2e: 83 c4 10 add $0x10,%esp
108b31: eb 08 jmp 108b3b <echo+0x53>
} else {
oproc (c, tty);
108b33: 0f b6 c0 movzbl %al,%eax
108b36: e8 96 fe ff ff call 1089d1 <oproc>
}
}
108b3b: 8b 5d fc mov -0x4(%ebp),%ebx
108b3e: c9 leave
108b3f: c3 ret
00122635 <endgrent>:
void endgrent(void)
{
if (group_fp != NULL)
122635: a1 20 dc 16 00 mov 0x16dc20,%eax
12263a: 85 c0 test %eax,%eax
12263c: 74 10 je 12264e <endgrent+0x19> <== NEVER TAKEN
fclose(group_fp);
group_fp = fopen("/etc/group", "r");
}
void endgrent(void)
{
12263e: 55 push %ebp
12263f: 89 e5 mov %esp,%ebp
122641: 83 ec 14 sub $0x14,%esp
if (group_fp != NULL)
fclose(group_fp);
122644: 50 push %eax
122645: e8 5a e9 00 00 call 130fa4 <fclose>
12264a: 83 c4 10 add $0x10,%esp
}
12264d: c9 leave
12264e: c3 ret
001224f7 <endpwent>:
void endpwent(void)
{
if (passwd_fp != NULL)
1224f7: a1 44 db 16 00 mov 0x16db44,%eax
1224fc: 85 c0 test %eax,%eax
1224fe: 74 10 je 122510 <endpwent+0x19> <== NEVER TAKEN
fclose(passwd_fp);
passwd_fp = fopen("/etc/passwd", "r");
}
void endpwent(void)
{
122500: 55 push %ebp
122501: 89 e5 mov %esp,%ebp
122503: 83 ec 14 sub $0x14,%esp
if (passwd_fp != NULL)
fclose(passwd_fp);
122506: 50 push %eax
122507: e8 98 ea 00 00 call 130fa4 <fclose>
12250c: 83 c4 10 add $0x10,%esp
}
12250f: c9 leave
122510: c3 ret
00108b40 <erase.part.2>:
* Erase a character or line
* FIXME: Needs support for WERASE and ECHOPRT.
* FIXME: Some of the tests should check for IEXTEN, too.
*/
static void
erase (struct rtems_termios_tty *tty, int lineFlag)
108b40: 55 push %ebp
108b41: 89 e5 mov %esp,%ebp
108b43: 57 push %edi
108b44: 56 push %esi
108b45: 53 push %ebx
108b46: 83 ec 2c sub $0x2c,%esp
108b49: 89 c3 mov %eax,%ebx
108b4b: 89 55 e4 mov %edx,-0x1c(%ebp)
108b4e: e9 09 01 00 00 jmp 108c5c <erase.part.2+0x11c>
return;
}
}
while (tty->ccount) {
unsigned char c = tty->cbuf[--tty->ccount];
108b53: 8b 53 1c mov 0x1c(%ebx),%edx
108b56: 89 55 d4 mov %edx,-0x2c(%ebp)
108b59: 8d 50 ff lea -0x1(%eax),%edx
108b5c: 89 53 20 mov %edx,0x20(%ebx)
108b5f: 8b 75 d4 mov -0x2c(%ebp),%esi
108b62: 8a 4c 06 ff mov -0x1(%esi,%eax,1),%cl
if (tty->termios.c_lflag & ECHO) {
108b66: 8b 53 3c mov 0x3c(%ebx),%edx
108b69: f6 c2 08 test $0x8,%dl
108b6c: 0f 84 e4 00 00 00 je 108c56 <erase.part.2+0x116> <== NEVER TAKEN
if (!lineFlag && !(tty->termios.c_lflag & ECHOE)) {
108b72: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp)
108b76: 75 17 jne 108b8f <erase.part.2+0x4f>
108b78: f6 c2 10 test $0x10,%dl
108b7b: 75 12 jne 108b8f <erase.part.2+0x4f> <== ALWAYS TAKEN
echo (tty->termios.c_cc[VERASE], tty);
108b7d: 0f b6 43 43 movzbl 0x43(%ebx),%eax <== NOT EXECUTED
108b81: 89 da mov %ebx,%edx <== NOT EXECUTED
}
}
if (!lineFlag)
break;
}
}
108b83: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
108b86: 5b pop %ebx <== NOT EXECUTED
108b87: 5e pop %esi <== NOT EXECUTED
108b88: 5f pop %edi <== NOT EXECUTED
108b89: 5d pop %ebp <== NOT EXECUTED
while (tty->ccount) {
unsigned char c = tty->cbuf[--tty->ccount];
if (tty->termios.c_lflag & ECHO) {
if (!lineFlag && !(tty->termios.c_lflag & ECHOE)) {
echo (tty->termios.c_cc[VERASE], tty);
108b8a: e9 59 ff ff ff jmp 108ae8 <echo> <== NOT EXECUTED
} else if (c == '\t') {
108b8f: 80 f9 09 cmp $0x9,%cl
108b92: 8b 3d 88 c2 12 00 mov 0x12c288,%edi
108b98: 89 7d e0 mov %edi,-0x20(%ebp)
108b9b: 75 5d jne 108bfa <erase.part.2+0xba>
int col = tty->read_start_column;
108b9d: 8b 73 2c mov 0x2c(%ebx),%esi
* Erase a character or line
* FIXME: Needs support for WERASE and ECHOPRT.
* FIXME: Some of the tests should check for IEXTEN, too.
*/
static void
erase (struct rtems_termios_tty *tty, int lineFlag)
108ba0: b9 01 00 00 00 mov $0x1,%ecx
while (i != tty->ccount) {
c = tty->cbuf[i++];
if (c == '\t') {
col = (col | 7) + 1;
} else if (iscntrl (c)) {
if (tty->termios.c_lflag & ECHOCTL)
108ba5: 81 e2 00 02 00 00 and $0x200,%edx
108bab: 89 55 dc mov %edx,-0x24(%ebp)
108bae: eb 29 jmp 108bd9 <erase.part.2+0x99>
/*
* Find the character before the tab
*/
while (i != tty->ccount) {
c = tty->cbuf[i++];
108bb0: 8b 7d d4 mov -0x2c(%ebp),%edi
108bb3: 0f b6 54 0f ff movzbl -0x1(%edi,%ecx,1),%edx
if (c == '\t') {
108bb8: 80 fa 09 cmp $0x9,%dl
108bbb: 75 05 jne 108bc2 <erase.part.2+0x82>
col = (col | 7) + 1;
108bbd: 83 ce 07 or $0x7,%esi
108bc0: eb 15 jmp 108bd7 <erase.part.2+0x97>
} else if (iscntrl (c)) {
108bc2: 8b 7d e0 mov -0x20(%ebp),%edi
108bc5: f6 44 17 01 20 testb $0x20,0x1(%edi,%edx,1)
108bca: 74 0b je 108bd7 <erase.part.2+0x97> <== ALWAYS TAKEN
if (tty->termios.c_lflag & ECHOCTL)
108bcc: 83 7d dc 00 cmpl $0x0,-0x24(%ebp) <== NOT EXECUTED
108bd0: 74 06 je 108bd8 <erase.part.2+0x98> <== NOT EXECUTED
col += 2;
108bd2: 83 c6 02 add $0x2,%esi <== NOT EXECUTED
108bd5: eb 01 jmp 108bd8 <erase.part.2+0x98> <== NOT EXECUTED
} else {
col++;
108bd7: 46 inc %esi
108bd8: 41 inc %ecx
int i = 0;
/*
* Find the character before the tab
*/
while (i != tty->ccount) {
108bd9: 39 c1 cmp %eax,%ecx
108bdb: 75 d3 jne 108bb0 <erase.part.2+0x70>
108bdd: eb 14 jmp 108bf3 <erase.part.2+0xb3>
/*
* Back up over the tab
*/
while (tty->column > col) {
rtems_termios_puts ("\b", 1, tty);
108bdf: 50 push %eax
108be0: 53 push %ebx
108be1: 6a 01 push $0x1
108be3: 68 18 fa 11 00 push $0x11fa18
108be8: e8 d8 fc ff ff call 1088c5 <rtems_termios_puts>
tty->column--;
108bed: ff 4b 28 decl 0x28(%ebx)
108bf0: 83 c4 10 add $0x10,%esp
}
/*
* Back up over the tab
*/
while (tty->column > col) {
108bf3: 39 73 28 cmp %esi,0x28(%ebx)
108bf6: 7f e7 jg 108bdf <erase.part.2+0x9f>
108bf8: eb 5c jmp 108c56 <erase.part.2+0x116>
rtems_termios_puts ("\b", 1, tty);
tty->column--;
}
}
else {
if (iscntrl (c) && (tty->termios.c_lflag & ECHOCTL)) {
108bfa: 0f b6 f1 movzbl %cl,%esi
108bfd: 8b 45 e0 mov -0x20(%ebp),%eax
108c00: f6 44 30 01 20 testb $0x20,0x1(%eax,%esi,1)
108c05: 74 21 je 108c28 <erase.part.2+0xe8> <== ALWAYS TAKEN
108c07: 80 e6 02 and $0x2,%dh <== NOT EXECUTED
108c0a: 74 1c je 108c28 <erase.part.2+0xe8> <== NOT EXECUTED
rtems_termios_puts ("\b \b", 3, tty);
108c0c: 57 push %edi <== NOT EXECUTED
108c0d: 53 push %ebx <== NOT EXECUTED
108c0e: 6a 03 push $0x3 <== NOT EXECUTED
108c10: 68 16 fa 11 00 push $0x11fa16 <== NOT EXECUTED
108c15: e8 ab fc ff ff call 1088c5 <rtems_termios_puts> <== NOT EXECUTED
if (tty->column)
108c1a: 8b 43 28 mov 0x28(%ebx),%eax <== NOT EXECUTED
108c1d: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
108c20: 85 c0 test %eax,%eax <== NOT EXECUTED
108c22: 74 04 je 108c28 <erase.part.2+0xe8> <== NOT EXECUTED
tty->column--;
108c24: 48 dec %eax <== NOT EXECUTED
108c25: 89 43 28 mov %eax,0x28(%ebx) <== NOT EXECUTED
}
if (!iscntrl (c) || (tty->termios.c_lflag & ECHOCTL)) {
108c28: a1 88 c2 12 00 mov 0x12c288,%eax
108c2d: f6 44 30 01 20 testb $0x20,0x1(%eax,%esi,1)
108c32: 74 06 je 108c3a <erase.part.2+0xfa> <== ALWAYS TAKEN
108c34: f6 43 3d 02 testb $0x2,0x3d(%ebx) <== NOT EXECUTED
108c38: 74 1c je 108c56 <erase.part.2+0x116> <== NOT EXECUTED
rtems_termios_puts ("\b \b", 3, tty);
108c3a: 56 push %esi
108c3b: 53 push %ebx
108c3c: 6a 03 push $0x3
108c3e: 68 16 fa 11 00 push $0x11fa16
108c43: e8 7d fc ff ff call 1088c5 <rtems_termios_puts>
if (tty->column)
108c48: 8b 43 28 mov 0x28(%ebx),%eax
108c4b: 83 c4 10 add $0x10,%esp
108c4e: 85 c0 test %eax,%eax
108c50: 74 04 je 108c56 <erase.part.2+0x116> <== NEVER TAKEN
tty->column--;
108c52: 48 dec %eax
108c53: 89 43 28 mov %eax,0x28(%ebx)
}
}
}
if (!lineFlag)
108c56: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp)
108c5a: 74 0b je 108c67 <erase.part.2+0x127>
echo ('\n', tty);
return;
}
}
while (tty->ccount) {
108c5c: 8b 43 20 mov 0x20(%ebx),%eax
108c5f: 85 c0 test %eax,%eax
108c61: 0f 85 ec fe ff ff jne 108b53 <erase.part.2+0x13>
}
}
if (!lineFlag)
break;
}
}
108c67: 8d 65 f4 lea -0xc(%ebp),%esp
108c6a: 5b pop %ebx
108c6b: 5e pop %esi
108c6c: 5f pop %edi
108c6d: 5d pop %ebp
108c6e: c3 ret
001076e7 <eval_path_start>:
size_t pathlen,
int eval_flags,
rtems_filesystem_global_location_t *const *global_root_ptr,
rtems_filesystem_global_location_t *const *global_current_ptr
)
{
1076e7: 55 push %ebp
1076e8: 89 e5 mov %esp,%ebp
1076ea: 57 push %edi
1076eb: 56 push %esi
1076ec: 53 push %ebx
1076ed: 83 ec 2c sub $0x2c,%esp
1076f0: 89 c3 mov %eax,%ebx
1076f2: 89 ce mov %ecx,%esi
memset(ctx, 0, sizeof(*ctx));
1076f4: b9 0e 00 00 00 mov $0xe,%ecx
1076f9: 31 c0 xor %eax,%eax
1076fb: 89 df mov %ebx,%edi
1076fd: f3 ab rep stos %eax,%es:(%edi)
ctx->path = path;
1076ff: 89 13 mov %edx,(%ebx)
ctx->pathlen = pathlen;
107701: 89 73 04 mov %esi,0x4(%ebx)
ctx->flags = eval_flags;
107704: 8b 45 08 mov 0x8(%ebp),%eax
107707: 89 43 10 mov %eax,0x10(%ebx)
rtems_filesystem_eval_path_context_t *ctx,
rtems_filesystem_global_location_t *const *global_root_ptr,
rtems_filesystem_global_location_t *const *global_current_ptr
)
{
if (ctx->pathlen > 0) {
10770a: 85 f6 test %esi,%esi
10770c: 74 41 je 10774f <eval_path_start+0x68>
char c = ctx->path [0];
10770e: 8a 12 mov (%edx),%dl
ctx->rootloc = rtems_filesystem_global_location_obtain(global_root_ptr);
107710: 83 ec 0c sub $0xc,%esp
107713: ff 75 0c pushl 0xc(%ebp)
107716: 88 55 d4 mov %dl,-0x2c(%ebp)
107719: e8 0d 05 00 00 call 107c2b <rtems_filesystem_global_location_obtain>
10771e: 89 43 30 mov %eax,0x30(%ebx)
gid_t node_gid
);
static inline bool rtems_filesystem_is_delimiter(char c)
{
return c == '/' || c == '\\';
107721: 83 c4 10 add $0x10,%esp
if (rtems_filesystem_is_delimiter(c)) {
107724: 8a 55 d4 mov -0x2c(%ebp),%dl
107727: 80 fa 5c cmp $0x5c,%dl
10772a: 74 05 je 107731 <eval_path_start+0x4a> <== NEVER TAKEN
10772c: 80 fa 2f cmp $0x2f,%dl
10772f: 75 0e jne 10773f <eval_path_start+0x58>
++ctx->path;
107731: ff 03 incl (%ebx)
--ctx->pathlen;
107733: ff 4b 04 decl 0x4(%ebx)
ctx->startloc = rtems_filesystem_global_location_obtain(
107736: 83 ec 0c sub $0xc,%esp
&ctx->rootloc
107739: 8d 43 30 lea 0x30(%ebx),%eax
ctx->rootloc = rtems_filesystem_global_location_obtain(global_root_ptr);
if (rtems_filesystem_is_delimiter(c)) {
++ctx->path;
--ctx->pathlen;
ctx->startloc = rtems_filesystem_global_location_obtain(
10773c: 50 push %eax
10773d: eb 06 jmp 107745 <eval_path_start+0x5e>
&ctx->rootloc
);
} else {
ctx->startloc = rtems_filesystem_global_location_obtain(
10773f: 83 ec 0c sub $0xc,%esp
107742: ff 75 10 pushl 0x10(%ebp)
107745: e8 e1 04 00 00 call 107c2b <rtems_filesystem_global_location_obtain>
10774a: 89 43 34 mov %eax,0x34(%ebx)
10774d: eb 33 jmp 107782 <eval_path_start+0x9b>
);
static inline rtems_filesystem_global_location_t *
rtems_filesystem_global_location_obtain_null(void)
{
rtems_filesystem_global_location_t *global_loc = NULL;
10774f: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
return rtems_filesystem_global_location_obtain( &global_loc );
107756: 83 ec 0c sub $0xc,%esp
107759: 8d 75 e4 lea -0x1c(%ebp),%esi
10775c: 56 push %esi
10775d: e8 c9 04 00 00 call 107c2b <rtems_filesystem_global_location_obtain>
global_current_ptr
);
}
} else {
ctx->rootloc = rtems_filesystem_global_location_obtain_null();
107762: 89 43 30 mov %eax,0x30(%ebx)
);
static inline rtems_filesystem_global_location_t *
rtems_filesystem_global_location_obtain_null(void)
{
rtems_filesystem_global_location_t *global_loc = NULL;
107765: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
return rtems_filesystem_global_location_obtain( &global_loc );
10776c: 89 34 24 mov %esi,(%esp)
10776f: e8 b7 04 00 00 call 107c2b <rtems_filesystem_global_location_obtain>
ctx->startloc = rtems_filesystem_global_location_obtain_null();
107774: 89 43 34 mov %eax,0x34(%ebx)
errno = ENOENT;
107777: e8 60 97 00 00 call 110edc <__errno>
10777c: c7 00 02 00 00 00 movl $0x2,(%eax)
&ctx->startloc,
rtems_filesystem_global_location_obtain(newstartloc_ptr)
);
rtems_filesystem_instance_lock(&ctx->startloc->location);
rtems_filesystem_location_clone(&ctx->currentloc, &ctx->startloc->location);
}
107782: 8b 43 34 mov 0x34(%ebx),%eax
107785: 8b 40 14 mov 0x14(%eax),%eax
const rtems_filesystem_location_info_t *loc
)
{
const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry;
(*mt_entry->ops->lock_h)( mt_entry );
107788: 8b 50 0c mov 0xc(%eax),%edx
10778b: 89 04 24 mov %eax,(%esp)
10778e: ff 12 call *(%edx)
set_startloc(ctx, global_root_ptr, global_current_ptr);
rtems_filesystem_instance_lock(&ctx->startloc->location);
rtems_filesystem_location_clone(
107790: 8d 73 18 lea 0x18(%ebx),%esi
107793: 5f pop %edi
107794: 58 pop %eax
107795: ff 73 34 pushl 0x34(%ebx)
107798: 56 push %esi
107799: e8 aa 61 00 00 call 10d948 <rtems_filesystem_location_clone>
&ctx->currentloc,
&ctx->startloc->location
);
rtems_filesystem_eval_path_continue(ctx);
10779e: 89 1c 24 mov %ebx,(%esp)
1077a1: e8 e5 fe ff ff call 10768b <rtems_filesystem_eval_path_continue>
return &ctx->currentloc;
}
1077a6: 89 f0 mov %esi,%eax
1077a8: 8d 65 f4 lea -0xc(%ebp),%esp
1077ab: 5b pop %ebx
1077ac: 5e pop %esi
1077ad: 5f pop %edi
1077ae: 5d pop %ebp
1077af: c3 ret
00112204 <fat_buf_access>:
#include "fat_fat_operations.h"
int
fat_buf_access(fat_fs_info_t *fs_info, uint32_t blk, int op_type,
rtems_bdbuf_buffer **buf)
{
112204: 55 push %ebp
112205: 89 e5 mov %esp,%ebp
112207: 57 push %edi
112208: 56 push %esi
112209: 53 push %ebx
11220a: 83 ec 2c sub $0x2c,%esp
11220d: 8b 5d 08 mov 0x8(%ebp),%ebx
rtems_status_code sc = RTEMS_SUCCESSFUL;
uint8_t i;
bool sec_of_fat;
if (fs_info->c.state == FAT_CACHE_EMPTY)
112210: 80 7b 7d 00 cmpb $0x0,0x7d(%ebx)
112214: 75 42 jne 112258 <fat_buf_access+0x54>
{
if (op_type == FAT_OP_TYPE_READ)
112216: 83 7d 10 01 cmpl $0x1,0x10(%ebp)
11221a: 8d 83 80 00 00 00 lea 0x80(%ebx),%eax
112220: 75 0f jne 112231 <fat_buf_access+0x2d>
sc = rtems_bdbuf_read(fs_info->vol.dd, blk, &fs_info->c.buf);
112222: 52 push %edx
112223: 50 push %eax
112224: ff 75 0c pushl 0xc(%ebp)
112227: ff 73 58 pushl 0x58(%ebx)
11222a: e8 e2 eb ff ff call 110e11 <rtems_bdbuf_read>
11222f: eb 0d jmp 11223e <fat_buf_access+0x3a>
else
sc = rtems_bdbuf_get(fs_info->vol.dd, blk, &fs_info->c.buf);
112231: 57 push %edi
112232: 50 push %eax
112233: ff 75 0c pushl 0xc(%ebp)
112236: ff 73 58 pushl 0x58(%ebx)
112239: e8 37 eb ff ff call 110d75 <rtems_bdbuf_get>
11223e: 83 c4 10 add $0x10,%esp
if (sc != RTEMS_SUCCESSFUL)
112241: 85 c0 test %eax,%eax
112243: 74 05 je 11224a <fat_buf_access+0x46> <== ALWAYS TAKEN
112245: e9 40 01 00 00 jmp 11238a <fat_buf_access+0x186> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
fs_info->c.blk_num = blk;
11224a: 8b 45 0c mov 0xc(%ebp),%eax
11224d: 89 43 78 mov %eax,0x78(%ebx)
fs_info->c.modified = 0;
112250: c6 43 7c 00 movb $0x0,0x7c(%ebx)
fs_info->c.state = FAT_CACHE_ACTUAL;
112254: c6 43 7d 01 movb $0x1,0x7d(%ebx)
}
sec_of_fat = ((fs_info->c.blk_num >= fs_info->vol.fat_loc) &&
112258: 8b 43 78 mov 0x78(%ebx),%eax
11225b: 0f b7 4b 14 movzwl 0x14(%ebx),%ecx
11225f: 31 d2 xor %edx,%edx
112261: 39 c8 cmp %ecx,%eax
112263: 72 08 jb 11226d <fat_buf_access+0x69> <== NEVER TAKEN
112265: 31 d2 xor %edx,%edx
112267: 3b 43 1c cmp 0x1c(%ebx),%eax
11226a: 0f 92 c2 setb %dl
(fs_info->c.blk_num < fs_info->vol.rdir_loc));
if (fs_info->c.blk_num != blk)
11226d: 3b 45 0c cmp 0xc(%ebp),%eax
112270: 0f 84 2e 01 00 00 je 1123a4 <fat_buf_access+0x1a0>
{
if (fs_info->c.modified)
112276: 80 7b 7c 00 cmpb $0x0,0x7c(%ebx)
11227a: 0f 84 c0 00 00 00 je 112340 <fat_buf_access+0x13c>
{
if (sec_of_fat && !fs_info->vol.mirror)
112280: 84 d2 test %dl,%dl
112282: 74 1a je 11229e <fat_buf_access+0x9a>
112284: 80 7b 48 00 cmpb $0x0,0x48(%ebx)
112288: 75 14 jne 11229e <fat_buf_access+0x9a> <== NEVER TAKEN
memcpy(fs_info->sec_buf, fs_info->c.buf->buffer,
11228a: 0f b7 0b movzwl (%ebx),%ecx
11228d: 8b 83 80 00 00 00 mov 0x80(%ebx),%eax
112293: 8b 70 1c mov 0x1c(%eax),%esi
112296: 8b bb 84 00 00 00 mov 0x84(%ebx),%edi
11229c: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
fs_info->vol.bps);
sc = rtems_bdbuf_release_modified(fs_info->c.buf);
11229e: 83 ec 0c sub $0xc,%esp
1122a1: ff b3 80 00 00 00 pushl 0x80(%ebx)
1122a7: 88 55 d0 mov %dl,-0x30(%ebp)
1122aa: e8 51 ed ff ff call 111000 <rtems_bdbuf_release_modified>
fs_info->c.state = FAT_CACHE_EMPTY;
1122af: c6 43 7d 00 movb $0x0,0x7d(%ebx)
fs_info->c.modified = 0;
1122b3: c6 43 7c 00 movb $0x0,0x7c(%ebx)
if (sc != RTEMS_SUCCESSFUL)
1122b7: 83 c4 10 add $0x10,%esp
1122ba: 85 c0 test %eax,%eax
1122bc: 8a 55 d0 mov -0x30(%ebp),%dl
1122bf: 74 05 je 1122c6 <fat_buf_access+0xc2> <== ALWAYS TAKEN
1122c1: e9 c4 00 00 00 jmp 11238a <fat_buf_access+0x186> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
if (sec_of_fat && !fs_info->vol.mirror)
1122c6: 84 d2 test %dl,%dl
1122c8: 0f 84 8d 00 00 00 je 11235b <fat_buf_access+0x157>
1122ce: 80 7b 48 00 cmpb $0x0,0x48(%ebx)
1122d2: 74 5e je 112332 <fat_buf_access+0x12e> <== ALWAYS TAKEN
1122d4: e9 82 00 00 00 jmp 11235b <fat_buf_access+0x157> <== NOT EXECUTED
{
rtems_bdbuf_buffer *b;
for (i = 1; i < fs_info->vol.fats; i++)
{
sc = rtems_bdbuf_get(fs_info->vol.dd,
1122d9: 56 push %esi
1122da: 8d 45 e4 lea -0x1c(%ebp),%eax
1122dd: 50 push %eax
fs_info->c.blk_num +
fs_info->vol.fat_length * i,
1122de: 0f b6 45 d7 movzbl -0x29(%ebp),%eax
1122e2: 0f af 43 18 imul 0x18(%ebx),%eax
{
rtems_bdbuf_buffer *b;
for (i = 1; i < fs_info->vol.fats; i++)
{
sc = rtems_bdbuf_get(fs_info->vol.dd,
1122e6: 03 43 78 add 0x78(%ebx),%eax
1122e9: 50 push %eax
1122ea: ff 73 58 pushl 0x58(%ebx)
1122ed: e8 83 ea ff ff call 110d75 <rtems_bdbuf_get>
fs_info->c.blk_num +
fs_info->vol.fat_length * i,
&b);
if ( sc != RTEMS_SUCCESSFUL)
1122f2: 83 c4 10 add $0x10,%esp
1122f5: 85 c0 test %eax,%eax
1122f7: 74 02 je 1122fb <fat_buf_access+0xf7> <== ALWAYS TAKEN
1122f9: eb 25 jmp 112320 <fat_buf_access+0x11c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENOMEM);
memcpy(b->buffer, fs_info->sec_buf, fs_info->vol.bps);
1122fb: 8b 45 e4 mov -0x1c(%ebp),%eax
1122fe: 8b 40 1c mov 0x1c(%eax),%eax
112301: 0f b7 0b movzwl (%ebx),%ecx
112304: 8b b3 84 00 00 00 mov 0x84(%ebx),%esi
11230a: 89 c7 mov %eax,%edi
11230c: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
sc = rtems_bdbuf_release_modified(b);
11230e: 83 ec 0c sub $0xc,%esp
112311: ff 75 e4 pushl -0x1c(%ebp)
112314: e8 e7 ec ff ff call 111000 <rtems_bdbuf_release_modified>
if ( sc != RTEMS_SUCCESSFUL)
112319: 83 c4 10 add $0x10,%esp
11231c: 85 c0 test %eax,%eax
11231e: 74 0d je 11232d <fat_buf_access+0x129> <== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one(ENOMEM);
112320: e8 eb 74 00 00 call 119810 <__errno> <== NOT EXECUTED
112325: c7 00 0c 00 00 00 movl $0xc,(%eax) <== NOT EXECUTED
11232b: eb 68 jmp 112395 <fat_buf_access+0x191> <== NOT EXECUTED
if (sec_of_fat && !fs_info->vol.mirror)
{
rtems_bdbuf_buffer *b;
for (i = 1; i < fs_info->vol.fats; i++)
11232d: fe 45 d7 incb -0x29(%ebp)
112330: eb 04 jmp 112336 <fat_buf_access+0x132>
fs_info->c.state = FAT_CACHE_EMPTY;
fs_info->c.modified = 0;
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
if (sec_of_fat && !fs_info->vol.mirror)
112332: c6 45 d7 01 movb $0x1,-0x29(%ebp)
{
rtems_bdbuf_buffer *b;
for (i = 1; i < fs_info->vol.fats; i++)
112336: 8a 45 d7 mov -0x29(%ebp),%al
112339: 3a 43 09 cmp 0x9(%ebx),%al
11233c: 72 9b jb 1122d9 <fat_buf_access+0xd5>
11233e: eb 1b jmp 11235b <fat_buf_access+0x157>
}
}
}
else
{
sc = rtems_bdbuf_release(fs_info->c.buf);
112340: 83 ec 0c sub $0xc,%esp
112343: ff b3 80 00 00 00 pushl 0x80(%ebx)
112349: e8 21 ec ff ff call 110f6f <rtems_bdbuf_release>
fs_info->c.state = FAT_CACHE_EMPTY;
11234e: c6 43 7d 00 movb $0x0,0x7d(%ebx)
if (sc != RTEMS_SUCCESSFUL)
112352: 83 c4 10 add $0x10,%esp
112355: 85 c0 test %eax,%eax
112357: 74 02 je 11235b <fat_buf_access+0x157> <== ALWAYS TAKEN
112359: eb 2f jmp 11238a <fat_buf_access+0x186> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
}
if (op_type == FAT_OP_TYPE_READ)
11235b: 83 7d 10 01 cmpl $0x1,0x10(%ebp)
11235f: 8d 83 80 00 00 00 lea 0x80(%ebx),%eax
112365: 75 0f jne 112376 <fat_buf_access+0x172>
sc = rtems_bdbuf_read(fs_info->vol.dd, blk, &fs_info->c.buf);
112367: 51 push %ecx
112368: 50 push %eax
112369: ff 75 0c pushl 0xc(%ebp)
11236c: ff 73 58 pushl 0x58(%ebx)
11236f: e8 9d ea ff ff call 110e11 <rtems_bdbuf_read>
112374: eb 0d jmp 112383 <fat_buf_access+0x17f>
else
sc = rtems_bdbuf_get(fs_info->vol.dd, blk, &fs_info->c.buf);
112376: 52 push %edx
112377: 50 push %eax
112378: ff 75 0c pushl 0xc(%ebp)
11237b: ff 73 58 pushl 0x58(%ebx)
11237e: e8 f2 e9 ff ff call 110d75 <rtems_bdbuf_get>
112383: 83 c4 10 add $0x10,%esp
if (sc != RTEMS_SUCCESSFUL)
112386: 85 c0 test %eax,%eax
112388: 74 10 je 11239a <fat_buf_access+0x196> <== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one(EIO);
11238a: e8 81 74 00 00 call 119810 <__errno> <== NOT EXECUTED
11238f: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
112395: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
112398: eb 17 jmp 1123b1 <fat_buf_access+0x1ad> <== NOT EXECUTED
fs_info->c.blk_num = blk;
11239a: 8b 45 0c mov 0xc(%ebp),%eax
11239d: 89 43 78 mov %eax,0x78(%ebx)
fs_info->c.state = FAT_CACHE_ACTUAL;
1123a0: c6 43 7d 01 movb $0x1,0x7d(%ebx)
}
*buf = fs_info->c.buf;
1123a4: 8b 93 80 00 00 00 mov 0x80(%ebx),%edx
1123aa: 8b 45 14 mov 0x14(%ebp),%eax
1123ad: 89 10 mov %edx,(%eax)
return RC_OK;
1123af: 31 c0 xor %eax,%eax
}
1123b1: 8d 65 f4 lea -0xc(%ebp),%esp
1123b4: 5b pop %ebx
1123b5: 5e pop %esi
1123b6: 5f pop %edi
1123b7: 5d pop %ebp
1123b8: c3 ret
001123b9 <fat_buf_release>:
int
fat_buf_release(fat_fs_info_t *fs_info)
{
1123b9: 55 push %ebp
1123ba: 89 e5 mov %esp,%ebp
1123bc: 57 push %edi
1123bd: 56 push %esi
1123be: 53 push %ebx
1123bf: 83 ec 2c sub $0x2c,%esp
1123c2: 8b 5d 08 mov 0x8(%ebp),%ebx
rtems_status_code sc = RTEMS_SUCCESSFUL;
uint8_t i;
bool sec_of_fat;
if (fs_info->c.state == FAT_CACHE_EMPTY)
return RC_OK;
1123c5: 31 c0 xor %eax,%eax
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
uint8_t i;
bool sec_of_fat;
if (fs_info->c.state == FAT_CACHE_EMPTY)
1123c7: 80 7b 7d 00 cmpb $0x0,0x7d(%ebx)
1123cb: 0f 84 06 01 00 00 je 1124d7 <fat_buf_release+0x11e>
return RC_OK;
sec_of_fat = ((fs_info->c.blk_num >= fs_info->vol.fat_loc) &&
1123d1: 8b 43 78 mov 0x78(%ebx),%eax
1123d4: 0f b7 4b 14 movzwl 0x14(%ebx),%ecx
1123d8: 31 d2 xor %edx,%edx
1123da: 39 c8 cmp %ecx,%eax
1123dc: 72 08 jb 1123e6 <fat_buf_release+0x2d> <== NEVER TAKEN
1123de: 31 d2 xor %edx,%edx
1123e0: 3b 43 1c cmp 0x1c(%ebx),%eax
1123e3: 0f 92 c2 setb %dl
(fs_info->c.blk_num < fs_info->vol.rdir_loc));
if (fs_info->c.modified)
1123e6: 80 7b 7c 00 cmpb $0x0,0x7c(%ebx)
1123ea: 0f 84 bc 00 00 00 je 1124ac <fat_buf_release+0xf3>
{
if (sec_of_fat && !fs_info->vol.mirror)
1123f0: 84 d2 test %dl,%dl
1123f2: 74 1a je 11240e <fat_buf_release+0x55>
1123f4: 80 7b 48 00 cmpb $0x0,0x48(%ebx)
1123f8: 75 14 jne 11240e <fat_buf_release+0x55> <== NEVER TAKEN
memcpy(fs_info->sec_buf, fs_info->c.buf->buffer, fs_info->vol.bps);
1123fa: 0f b7 0b movzwl (%ebx),%ecx
1123fd: 8b 83 80 00 00 00 mov 0x80(%ebx),%eax
112403: 8b 70 1c mov 0x1c(%eax),%esi
112406: 8b bb 84 00 00 00 mov 0x84(%ebx),%edi
11240c: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
sc = rtems_bdbuf_release_modified(fs_info->c.buf);
11240e: 83 ec 0c sub $0xc,%esp
112411: ff b3 80 00 00 00 pushl 0x80(%ebx)
112417: 88 55 d0 mov %dl,-0x30(%ebp)
11241a: e8 e1 eb ff ff call 111000 <rtems_bdbuf_release_modified>
if (sc != RTEMS_SUCCESSFUL)
11241f: 83 c4 10 add $0x10,%esp
112422: 85 c0 test %eax,%eax
112424: 8a 55 d0 mov -0x30(%ebp),%dl
112427: 74 05 je 11242e <fat_buf_release+0x75> <== ALWAYS TAKEN
112429: e9 93 00 00 00 jmp 1124c1 <fat_buf_release+0x108> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
fs_info->c.modified = 0;
11242e: c6 43 7c 00 movb $0x0,0x7c(%ebx)
if (sec_of_fat && !fs_info->vol.mirror)
112432: 84 d2 test %dl,%dl
112434: 0f 84 97 00 00 00 je 1124d1 <fat_buf_release+0x118>
11243a: 80 7b 48 00 cmpb $0x0,0x48(%ebx)
11243e: 74 5e je 11249e <fat_buf_release+0xe5> <== ALWAYS TAKEN
112440: e9 8c 00 00 00 jmp 1124d1 <fat_buf_release+0x118> <== NOT EXECUTED
{
rtems_bdbuf_buffer *b;
for (i = 1; i < fs_info->vol.fats; i++)
{
sc = rtems_bdbuf_get(fs_info->vol.dd,
112445: 51 push %ecx
112446: 8d 45 e4 lea -0x1c(%ebp),%eax
112449: 50 push %eax
fs_info->c.blk_num +
fs_info->vol.fat_length * i,
11244a: 0f b6 45 d7 movzbl -0x29(%ebp),%eax
11244e: 0f af 43 18 imul 0x18(%ebx),%eax
{
rtems_bdbuf_buffer *b;
for (i = 1; i < fs_info->vol.fats; i++)
{
sc = rtems_bdbuf_get(fs_info->vol.dd,
112452: 03 43 78 add 0x78(%ebx),%eax
112455: 50 push %eax
112456: ff 73 58 pushl 0x58(%ebx)
112459: e8 17 e9 ff ff call 110d75 <rtems_bdbuf_get>
fs_info->c.blk_num +
fs_info->vol.fat_length * i,
&b);
if ( sc != RTEMS_SUCCESSFUL)
11245e: 83 c4 10 add $0x10,%esp
112461: 85 c0 test %eax,%eax
112463: 74 02 je 112467 <fat_buf_release+0xae> <== ALWAYS TAKEN
112465: eb 25 jmp 11248c <fat_buf_release+0xd3> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENOMEM);
memcpy(b->buffer, fs_info->sec_buf, fs_info->vol.bps);
112467: 8b 45 e4 mov -0x1c(%ebp),%eax
11246a: 8b 40 1c mov 0x1c(%eax),%eax
11246d: 0f b7 0b movzwl (%ebx),%ecx
112470: 8b b3 84 00 00 00 mov 0x84(%ebx),%esi
112476: 89 c7 mov %eax,%edi
112478: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
sc = rtems_bdbuf_release_modified(b);
11247a: 83 ec 0c sub $0xc,%esp
11247d: ff 75 e4 pushl -0x1c(%ebp)
112480: e8 7b eb ff ff call 111000 <rtems_bdbuf_release_modified>
if ( sc != RTEMS_SUCCESSFUL)
112485: 83 c4 10 add $0x10,%esp
112488: 85 c0 test %eax,%eax
11248a: 74 0d je 112499 <fat_buf_release+0xe0> <== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one(ENOMEM);
11248c: e8 7f 73 00 00 call 119810 <__errno> <== NOT EXECUTED
112491: c7 00 0c 00 00 00 movl $0xc,(%eax) <== NOT EXECUTED
112497: eb 33 jmp 1124cc <fat_buf_release+0x113> <== NOT EXECUTED
if (sec_of_fat && !fs_info->vol.mirror)
{
rtems_bdbuf_buffer *b;
for (i = 1; i < fs_info->vol.fats; i++)
112499: fe 45 d7 incb -0x29(%ebp)
11249c: eb 04 jmp 1124a2 <fat_buf_release+0xe9>
sc = rtems_bdbuf_release_modified(fs_info->c.buf);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
fs_info->c.modified = 0;
if (sec_of_fat && !fs_info->vol.mirror)
11249e: c6 45 d7 01 movb $0x1,-0x29(%ebp)
{
rtems_bdbuf_buffer *b;
for (i = 1; i < fs_info->vol.fats; i++)
1124a2: 8a 45 d7 mov -0x29(%ebp),%al
1124a5: 3a 43 09 cmp 0x9(%ebx),%al
1124a8: 72 9b jb 112445 <fat_buf_release+0x8c>
1124aa: eb 25 jmp 1124d1 <fat_buf_release+0x118>
}
}
}
else
{
sc = rtems_bdbuf_release(fs_info->c.buf);
1124ac: 83 ec 0c sub $0xc,%esp
1124af: ff b3 80 00 00 00 pushl 0x80(%ebx)
1124b5: e8 b5 ea ff ff call 110f6f <rtems_bdbuf_release>
if (sc != RTEMS_SUCCESSFUL)
1124ba: 83 c4 10 add $0x10,%esp
1124bd: 85 c0 test %eax,%eax
1124bf: 74 10 je 1124d1 <fat_buf_release+0x118> <== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one(EIO);
1124c1: e8 4a 73 00 00 call 119810 <__errno> <== NOT EXECUTED
1124c6: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
1124cc: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
1124cf: eb 06 jmp 1124d7 <fat_buf_release+0x11e> <== NOT EXECUTED
}
fs_info->c.state = FAT_CACHE_EMPTY;
1124d1: c6 43 7d 00 movb $0x0,0x7d(%ebx)
return RC_OK;
1124d5: 31 c0 xor %eax,%eax
}
1124d7: 8d 65 f4 lea -0xc(%ebp),%esp
1124da: 5b pop %ebx
1124db: 5e pop %esi
1124dc: 5f pop %edi
1124dd: 5d pop %ebp
1124de: c3 ret
001117b8 <fat_cluster_num_to_sector_num>:
static inline uint32_t
fat_cluster_num_to_sector_num(
const fat_fs_info_t *fs_info,
uint32_t cln
)
{
1117b8: 55 push %ebp
1117b9: 89 e5 mov %esp,%ebp
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
1117bb: 85 d2 test %edx,%edx
1117bd: 75 0b jne 1117ca <fat_cluster_num_to_sector_num+0x12>
1117bf: f6 40 0a 03 testb $0x3,0xa(%eax)
1117c3: 74 05 je 1117ca <fat_cluster_num_to_sector_num+0x12><== NEVER TAKEN
return fs_info->vol.rdir_loc;
1117c5: 8b 50 1c mov 0x1c(%eax),%edx
1117c8: eb 0c jmp 1117d6 <fat_cluster_num_to_sector_num+0x1e>
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
1117ca: 83 ea 02 sub $0x2,%edx
1117cd: 0f b6 48 05 movzbl 0x5(%eax),%ecx
1117d1: d3 e2 shl %cl,%edx
1117d3: 03 50 30 add 0x30(%eax),%edx
fs_info->vol.data_fsec);
}
1117d6: 89 d0 mov %edx,%eax
1117d8: 5d pop %ebp
1117d9: c3 ret
00112671 <fat_cluster_read>:
fat_cluster_read(
fat_fs_info_t *fs_info,
uint32_t cln,
void *buff
)
{
112671: 55 push %ebp <== NOT EXECUTED
112672: 89 e5 mov %esp,%ebp <== NOT EXECUTED
112674: 53 push %ebx <== NOT EXECUTED
112675: 53 push %ebx <== NOT EXECUTED
112676: 8b 45 08 mov 0x8(%ebp),%eax <== NOT EXECUTED
112679: 8b 55 0c mov 0xc(%ebp),%edx <== NOT EXECUTED
fat_cluster_num_to_sector_num(
const fat_fs_info_t *fs_info,
uint32_t cln
)
{
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
11267c: 85 d2 test %edx,%edx <== NOT EXECUTED
11267e: 75 0b jne 11268b <fat_cluster_read+0x1a> <== NOT EXECUTED
112680: f6 40 0a 03 testb $0x3,0xa(%eax) <== NOT EXECUTED
112684: 74 05 je 11268b <fat_cluster_read+0x1a> <== NOT EXECUTED
return fs_info->vol.rdir_loc;
112686: 8b 50 1c mov 0x1c(%eax),%edx <== NOT EXECUTED
112689: eb 0c jmp 112697 <fat_cluster_read+0x26> <== NOT EXECUTED
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
11268b: 83 ea 02 sub $0x2,%edx <== NOT EXECUTED
11268e: 0f b6 48 05 movzbl 0x5(%eax),%ecx <== NOT EXECUTED
112692: d3 e2 shl %cl,%edx <== NOT EXECUTED
112694: 03 50 30 add 0x30(%eax),%edx <== NOT EXECUTED
uint32_t fsec = 0;
fsec = fat_cluster_num_to_sector_num(fs_info, cln);
return _fat_block_read(fs_info, fsec, 0,
112697: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11269a: ff 75 10 pushl 0x10(%ebp) <== NOT EXECUTED
fs_info->vol.spc << fs_info->vol.sec_log2, buff);
11269d: 0f b6 58 04 movzbl 0x4(%eax),%ebx <== NOT EXECUTED
1126a1: 0f b6 48 02 movzbl 0x2(%eax),%ecx <== NOT EXECUTED
1126a5: d3 e3 shl %cl,%ebx <== NOT EXECUTED
{
uint32_t fsec = 0;
fsec = fat_cluster_num_to_sector_num(fs_info, cln);
return _fat_block_read(fs_info, fsec, 0,
1126a7: 53 push %ebx <== NOT EXECUTED
1126a8: 6a 00 push $0x0 <== NOT EXECUTED
1126aa: 52 push %edx <== NOT EXECUTED
1126ab: 50 push %eax <== NOT EXECUTED
1126ac: e8 2e fe ff ff call 1124df <_fat_block_read> <== NOT EXECUTED
fs_info->vol.spc << fs_info->vol.sec_log2, buff);
}
1126b1: 8b 5d fc mov -0x4(%ebp),%ebx <== NOT EXECUTED
1126b4: c9 leave <== NOT EXECUTED
1126b5: c3 ret <== NOT EXECUTED
001126b6 <fat_cluster_write>:
fat_cluster_write(
fat_fs_info_t *fs_info,
uint32_t cln,
const void *buff
)
{
1126b6: 55 push %ebp
1126b7: 89 e5 mov %esp,%ebp
1126b9: 53 push %ebx
1126ba: 50 push %eax
1126bb: 8b 45 08 mov 0x8(%ebp),%eax
1126be: 8b 55 0c mov 0xc(%ebp),%edx
fat_cluster_num_to_sector_num(
const fat_fs_info_t *fs_info,
uint32_t cln
)
{
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
1126c1: 85 d2 test %edx,%edx
1126c3: 75 0b jne 1126d0 <fat_cluster_write+0x1a><== ALWAYS TAKEN
1126c5: f6 40 0a 03 testb $0x3,0xa(%eax) <== NOT EXECUTED
1126c9: 74 05 je 1126d0 <fat_cluster_write+0x1a><== NOT EXECUTED
return fs_info->vol.rdir_loc;
1126cb: 8b 50 1c mov 0x1c(%eax),%edx <== NOT EXECUTED
1126ce: eb 0c jmp 1126dc <fat_cluster_write+0x26><== NOT EXECUTED
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
1126d0: 83 ea 02 sub $0x2,%edx
1126d3: 0f b6 48 05 movzbl 0x5(%eax),%ecx
1126d7: d3 e2 shl %cl,%edx
1126d9: 03 50 30 add 0x30(%eax),%edx
uint32_t fsec = 0;
fsec = fat_cluster_num_to_sector_num(fs_info, cln);
return _fat_block_write(fs_info, fsec, 0,
1126dc: 83 ec 0c sub $0xc,%esp
1126df: ff 75 10 pushl 0x10(%ebp)
fs_info->vol.spc << fs_info->vol.sec_log2, buff);
1126e2: 0f b6 58 04 movzbl 0x4(%eax),%ebx
1126e6: 0f b6 48 02 movzbl 0x2(%eax),%ecx
1126ea: d3 e3 shl %cl,%ebx
{
uint32_t fsec = 0;
fsec = fat_cluster_num_to_sector_num(fs_info, cln);
return _fat_block_write(fs_info, fsec, 0,
1126ec: 53 push %ebx
1126ed: 6a 00 push $0x0
1126ef: 52 push %edx
1126f0: 50 push %eax
1126f1: e8 5e fe ff ff call 112554 <_fat_block_write>
fs_info->vol.spc << fs_info->vol.sec_log2, buff);
}
1126f6: 8b 5d fc mov -0x4(%ebp),%ebx
1126f9: c9 leave
1126fa: c3 ret
0011286a <fat_fat32_update_fsinfo_sector>:
fat_fat32_update_fsinfo_sector(
fat_fs_info_t *fs_info,
uint32_t free_count,
uint32_t next_free
)
{
11286a: 55 push %ebp <== NOT EXECUTED
11286b: 89 e5 mov %esp,%ebp <== NOT EXECUTED
11286d: 56 push %esi <== NOT EXECUTED
11286e: 53 push %ebx <== NOT EXECUTED
11286f: 83 ec 1c sub $0x1c,%esp <== NOT EXECUTED
112872: 8b 5d 08 mov 0x8(%ebp),%ebx <== NOT EXECUTED
ssize_t ret1 = 0, ret2 = 0;
uint32_t le_free_count = 0;
uint32_t le_next_free = 0;
le_free_count = CT_LE_L(free_count);
112875: 8b 45 0c mov 0xc(%ebp),%eax <== NOT EXECUTED
112878: 89 45 f0 mov %eax,-0x10(%ebp) <== NOT EXECUTED
le_next_free = CT_LE_L(next_free);
11287b: 8b 45 10 mov 0x10(%ebp),%eax <== NOT EXECUTED
11287e: 89 45 f4 mov %eax,-0xc(%ebp) <== NOT EXECUTED
ret1 = _fat_block_write(fs_info,
fs_info->vol.info_sec,
FAT_FSINFO_FREE_CLUSTER_COUNT_OFFSET,
4,
(char *)(&le_free_count));
112881: 8d 45 f0 lea -0x10(%ebp),%eax <== NOT EXECUTED
uint32_t le_next_free = 0;
le_free_count = CT_LE_L(free_count);
le_next_free = CT_LE_L(next_free);
ret1 = _fat_block_write(fs_info,
112884: 50 push %eax <== NOT EXECUTED
112885: 6a 04 push $0x4 <== NOT EXECUTED
112887: 68 e8 01 00 00 push $0x1e8 <== NOT EXECUTED
11288c: 0f b7 43 3c movzwl 0x3c(%ebx),%eax <== NOT EXECUTED
112890: 50 push %eax <== NOT EXECUTED
112891: 53 push %ebx <== NOT EXECUTED
112892: e8 bd fc ff ff call 112554 <_fat_block_write> <== NOT EXECUTED
112897: 89 c6 mov %eax,%esi <== NOT EXECUTED
fs_info->vol.info_sec,
FAT_FSINFO_FREE_CLUSTER_COUNT_OFFSET,
4,
(char *)(&le_free_count));
ret2 = _fat_block_write(fs_info,
112899: 83 c4 14 add $0x14,%esp <== NOT EXECUTED
fs_info->vol.info_sec,
FAT_FSINFO_NEXT_FREE_CLUSTER_OFFSET,
4,
(char *)(&le_next_free));
11289c: 8d 45 f4 lea -0xc(%ebp),%eax <== NOT EXECUTED
fs_info->vol.info_sec,
FAT_FSINFO_FREE_CLUSTER_COUNT_OFFSET,
4,
(char *)(&le_free_count));
ret2 = _fat_block_write(fs_info,
11289f: 50 push %eax <== NOT EXECUTED
1128a0: 6a 04 push $0x4 <== NOT EXECUTED
1128a2: 68 ec 01 00 00 push $0x1ec <== NOT EXECUTED
1128a7: 0f b7 43 3c movzwl 0x3c(%ebx),%eax <== NOT EXECUTED
1128ab: 50 push %eax <== NOT EXECUTED
1128ac: 53 push %ebx <== NOT EXECUTED
1128ad: e8 a2 fc ff ff call 112554 <_fat_block_write> <== NOT EXECUTED
fs_info->vol.info_sec,
FAT_FSINFO_NEXT_FREE_CLUSTER_OFFSET,
4,
(char *)(&le_next_free));
if ( (ret1 < 0) || (ret2 < 0) )
1128b2: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
1128b5: c1 e8 1f shr $0x1f,%eax <== NOT EXECUTED
1128b8: 75 07 jne 1128c1 <fat_fat32_update_fsinfo_sector+0x57><== NOT EXECUTED
return -1;
return RC_OK;
1128ba: 31 c0 xor %eax,%eax <== NOT EXECUTED
fs_info->vol.info_sec,
FAT_FSINFO_NEXT_FREE_CLUSTER_OFFSET,
4,
(char *)(&le_next_free));
if ( (ret1 < 0) || (ret2 < 0) )
1128bc: c1 ee 1f shr $0x1f,%esi <== NOT EXECUTED
1128bf: 74 03 je 1128c4 <fat_fat32_update_fsinfo_sector+0x5a><== NOT EXECUTED
return -1;
1128c1: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
return RC_OK;
}
1128c4: 8d 65 f8 lea -0x8(%ebp),%esp <== NOT EXECUTED
1128c7: 5b pop %ebx <== NOT EXECUTED
1128c8: 5e pop %esi <== NOT EXECUTED
1128c9: 5d pop %ebp <== NOT EXECUTED
1128ca: c3 ret <== NOT EXECUTED
00111c38 <fat_file_close>:
int
fat_file_close(
fat_fs_info_t *fs_info,
fat_file_fd_t *fat_fd
)
{
111c38: 55 push %ebp
111c39: 89 e5 mov %esp,%ebp
111c3b: 56 push %esi
111c3c: 53 push %ebx
111c3d: 8b 75 08 mov 0x8(%ebp),%esi
111c40: 8b 5d 0c mov 0xc(%ebp),%ebx
/*
* if links_num field of fat-file descriptor is greater than 1
* decrement the count of links and return
*/
if (fat_fd->links_num > 1)
111c43: 8b 43 08 mov 0x8(%ebx),%eax
111c46: 83 f8 01 cmp $0x1,%eax
111c49: 76 0b jbe 111c56 <fat_file_close+0x1e>
{
fat_fd->links_num--;
111c4b: 48 dec %eax
111c4c: 89 43 08 mov %eax,0x8(%ebx)
return rc;
111c4f: 31 c0 xor %eax,%eax
111c51: e9 81 00 00 00 jmp 111cd7 <fat_file_close+0x9f>
}
key = fat_construct_key(fs_info, &fat_fd->dir_pos.sname);
if (fat_fd->flags & FAT_FILE_REMOVED)
111c56: f6 43 30 01 testb $0x1,0x30(%ebx)
111c5a: 74 3f je 111c9b <fat_file_close+0x63>
{
rc = fat_file_truncate(fs_info, fat_fd, 0);
111c5c: 51 push %ecx
111c5d: 6a 00 push $0x0
111c5f: 53 push %ebx
111c60: 56 push %esi
111c61: e8 f4 fe ff ff call 111b5a <fat_file_truncate>
if ( rc != RC_OK )
111c66: 83 c4 10 add $0x10,%esp
111c69: 85 c0 test %eax,%eax
111c6b: 75 6a jne 111cd7 <fat_file_close+0x9f> <== NEVER TAKEN
*/
RTEMS_INLINE_ROUTINE void rtems_chain_extract(
rtems_chain_node *the_node
)
{
_Chain_Extract( the_node );
111c6d: 83 ec 0c sub $0xc,%esp
111c70: 53 push %ebx
111c71: e8 7a 31 00 00 call 114df0 <_Chain_Extract>
return rc;
_hash_delete(fs_info->rhash, key, fat_fd->ino, fat_fd);
if ( fat_ino_is_unique(fs_info, fat_fd->ino) )
111c76: 58 pop %eax
111c77: 5a pop %edx
111c78: ff 73 0c pushl 0xc(%ebx)
111c7b: 56 push %esi
111c7c: e8 d8 0b 00 00 call 112859 <fat_ino_is_unique>
111c81: 83 c4 10 add $0x10,%esp
111c84: 84 c0 test %al,%al
111c86: 74 0e je 111c96 <fat_file_close+0x5e> <== ALWAYS TAKEN
fat_free_unique_ino(fs_info, fat_fd->ino);
111c88: 50 push %eax <== NOT EXECUTED
111c89: 50 push %eax <== NOT EXECUTED
111c8a: ff 73 0c pushl 0xc(%ebx) <== NOT EXECUTED
111c8d: 56 push %esi <== NOT EXECUTED
111c8e: e8 a2 0b 00 00 call 112835 <fat_free_unique_ino> <== NOT EXECUTED
111c93: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
free(fat_fd);
111c96: 83 ec 0c sub $0xc,%esp
111c99: eb 25 jmp 111cc0 <fat_file_close+0x88>
}
else
{
if (fat_ino_is_unique(fs_info, fat_fd->ino))
111c9b: 50 push %eax
111c9c: 50 push %eax
111c9d: ff 73 0c pushl 0xc(%ebx)
111ca0: 56 push %esi
111ca1: e8 b3 0b 00 00 call 112859 <fat_ino_is_unique>
111ca6: 83 c4 10 add $0x10,%esp
111ca9: 84 c0 test %al,%al
111cab: 74 09 je 111cb6 <fat_file_close+0x7e> <== ALWAYS TAKEN
{
fat_fd->links_num = 0;
111cad: c7 43 08 00 00 00 00 movl $0x0,0x8(%ebx) <== NOT EXECUTED
111cb4: eb 13 jmp 111cc9 <fat_file_close+0x91> <== NOT EXECUTED
111cb6: 83 ec 0c sub $0xc,%esp
111cb9: 53 push %ebx
111cba: e8 31 31 00 00 call 114df0 <_Chain_Extract>
}
else
{
_hash_delete(fs_info->vhash, key, fat_fd->ino, fat_fd);
free(fat_fd);
111cbf: 58 pop %eax
111cc0: 53 push %ebx
111cc1: e8 66 55 ff ff call 10722c <free>
111cc6: 83 c4 10 add $0x10,%esp
}
}
/*
* flush any modified "cached" buffer back to disk
*/
rc = fat_buf_release(fs_info);
111cc9: 89 75 08 mov %esi,0x8(%ebp)
return rc;
}
111ccc: 8d 65 f8 lea -0x8(%ebp),%esp
111ccf: 5b pop %ebx
111cd0: 5e pop %esi
111cd1: 5d pop %ebp
}
}
/*
* flush any modified "cached" buffer back to disk
*/
rc = fat_buf_release(fs_info);
111cd2: e9 e2 06 00 00 jmp 1123b9 <fat_buf_release>
return rc;
}
111cd7: 8d 65 f8 lea -0x8(%ebp),%esp
111cda: 5b pop %ebx
111cdb: 5e pop %esi
111cdc: 5d pop %ebp
111cdd: c3 ret
00111d64 <fat_file_extend>:
fat_file_fd_t *fat_fd,
bool zero_fill,
uint32_t new_length,
uint32_t *a_length
)
{
111d64: 55 push %ebp
111d65: 89 e5 mov %esp,%ebp
111d67: 57 push %edi
111d68: 56 push %esi
111d69: 53 push %ebx
111d6a: 83 ec 2c sub $0x2c,%esp
111d6d: 8b 5d 08 mov 0x8(%ebp),%ebx
111d70: 8b 75 0c mov 0xc(%ebp),%esi
111d73: 8a 45 10 mov 0x10(%ebp),%al
111d76: 88 45 cf mov %al,-0x31(%ebp)
int rc = RC_OK;
uint32_t chain = 0;
111d79: c7 45 d8 00 00 00 00 movl $0x0,-0x28(%ebp)
uint32_t bytes2add = 0;
uint32_t cls2add = 0;
uint32_t old_last_cl;
uint32_t last_cl = 0;
111d80: c7 45 e0 00 00 00 00 movl $0x0,-0x20(%ebp)
uint32_t bytes_remain = 0;
uint32_t cls_added;
*a_length = new_length;
111d87: 8b 4d 14 mov 0x14(%ebp),%ecx
111d8a: 8b 55 18 mov 0x18(%ebp),%edx
111d8d: 89 0a mov %ecx,(%edx)
if (new_length <= fat_fd->fat_file_size)
111d8f: 8b 46 18 mov 0x18(%esi),%eax
111d92: 39 c1 cmp %eax,%ecx
111d94: 77 07 ja 111d9d <fat_file_extend+0x39>
return RC_OK;
111d96: 31 d2 xor %edx,%edx
111d98: e9 db 01 00 00 jmp 111f78 <fat_file_extend+0x214>
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
111d9d: 83 7e 20 01 cmpl $0x1,0x20(%esi)
111da1: 75 11 jne 111db4 <fat_file_extend+0x50> <== ALWAYS TAKEN
111da3: 83 7e 24 00 cmpl $0x0,0x24(%esi) <== NOT EXECUTED
111da7: 75 0b jne 111db4 <fat_file_extend+0x50> <== NOT EXECUTED
111da9: f6 43 0a 03 testb $0x3,0xa(%ebx) <== NOT EXECUTED
111dad: 74 05 je 111db4 <fat_file_extend+0x50> <== NOT EXECUTED
111daf: e9 d3 00 00 00 jmp 111e87 <fat_file_extend+0x123> <== NOT EXECUTED
(fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)))
rtems_set_errno_and_return_minus_one( ENOSPC );
bytes_remain = (fs_info->vol.bpc -
(fat_fd->fat_file_size & (fs_info->vol.bpc - 1))) &
111db4: 0f b7 7b 06 movzwl 0x6(%ebx),%edi
111db8: 8d 57 ff lea -0x1(%edi),%edx
111dbb: 89 d1 mov %edx,%ecx
111dbd: 21 c1 and %eax,%ecx
111dbf: 89 4d d0 mov %ecx,-0x30(%ebp)
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
(fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)))
rtems_set_errno_and_return_minus_one( ENOSPC );
bytes_remain = (fs_info->vol.bpc -
111dc2: 29 cf sub %ecx,%edi
111dc4: 21 d7 and %edx,%edi
(fat_fd->fat_file_size & (fs_info->vol.bpc - 1))) &
(fs_info->vol.bpc - 1);
bytes2add = new_length - fat_fd->fat_file_size;
111dc6: 8b 55 14 mov 0x14(%ebp),%edx
111dc9: 29 c2 sub %eax,%edx
if (bytes2add > bytes_remain)
bytes2add -= bytes_remain;
else
bytes2add = 0;
111dcb: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)
(fat_fd->fat_file_size & (fs_info->vol.bpc - 1))) &
(fs_info->vol.bpc - 1);
bytes2add = new_length - fat_fd->fat_file_size;
if (bytes2add > bytes_remain)
111dd2: 39 fa cmp %edi,%edx
111dd4: 76 05 jbe 111ddb <fat_file_extend+0x77>
bytes2add -= bytes_remain;
111dd6: 29 fa sub %edi,%edx
111dd8: 89 55 d4 mov %edx,-0x2c(%ebp)
else
bytes2add = 0;
if (zero_fill && bytes_remain > 0) {
111ddb: 85 ff test %edi,%edi
111ddd: 74 5d je 111e3c <fat_file_extend+0xd8>
111ddf: 80 7d cf 00 cmpb $0x0,-0x31(%ebp)
111de3: 74 57 je 111e3c <fat_file_extend+0xd8>
uint32_t ofs = start & (fs_info->vol.bpc - 1);
uint32_t cur_cln;
uint32_t sec;
uint32_t byte;
rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln);
111de5: 83 ec 0c sub $0xc,%esp
else
bytes2add = 0;
if (zero_fill && bytes_remain > 0) {
uint32_t start = fat_fd->fat_file_size;
uint32_t cl_start = start >> fs_info->vol.bpc_log2;
111de8: 0f b6 4b 08 movzbl 0x8(%ebx),%ecx
111dec: d3 e8 shr %cl,%eax
111dee: 89 c1 mov %eax,%ecx
uint32_t ofs = start & (fs_info->vol.bpc - 1);
uint32_t cur_cln;
uint32_t sec;
uint32_t byte;
rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln);
111df0: 8d 45 e4 lea -0x1c(%ebp),%eax
111df3: 50 push %eax
111df4: 89 f2 mov %esi,%edx
111df6: 89 d8 mov %ebx,%eax
111df8: e8 1c fa ff ff call 111819 <fat_file_lseek>
111dfd: 89 c2 mov %eax,%edx
if (rc != RC_OK)
111dff: 83 c4 10 add $0x10,%esp
111e02: 85 c0 test %eax,%eax
111e04: 0f 85 6e 01 00 00 jne 111f78 <fat_file_extend+0x214> <== NEVER TAKEN
return rc;
sec = fat_cluster_num_to_sector_num(fs_info, cur_cln);
111e0a: 8b 55 e4 mov -0x1c(%ebp),%edx
111e0d: 89 d8 mov %ebx,%eax
111e0f: e8 a4 f9 ff ff call 1117b8 <fat_cluster_num_to_sector_num>
sec += ofs >> fs_info->vol.sec_log2;
byte = ofs & (fs_info->vol.bps - 1);
rc = _fat_block_zero(fs_info, sec, byte, bytes_remain);
111e14: 57 push %edi
if (rc != RC_OK)
return rc;
sec = fat_cluster_num_to_sector_num(fs_info, cur_cln);
sec += ofs >> fs_info->vol.sec_log2;
byte = ofs & (fs_info->vol.bps - 1);
111e15: 0f b7 13 movzwl (%ebx),%edx
111e18: 4a dec %edx
111e19: 23 55 d0 and -0x30(%ebp),%edx
rc = _fat_block_zero(fs_info, sec, byte, bytes_remain);
111e1c: 52 push %edx
rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln);
if (rc != RC_OK)
return rc;
sec = fat_cluster_num_to_sector_num(fs_info, cur_cln);
sec += ofs >> fs_info->vol.sec_log2;
111e1d: 0f b6 4b 02 movzbl 0x2(%ebx),%ecx
111e21: 8b 55 d0 mov -0x30(%ebp),%edx
111e24: d3 ea shr %cl,%edx
111e26: 01 d0 add %edx,%eax
byte = ofs & (fs_info->vol.bps - 1);
rc = _fat_block_zero(fs_info, sec, byte, bytes_remain);
111e28: 50 push %eax
111e29: 53 push %ebx
111e2a: e8 bb 07 00 00 call 1125ea <_fat_block_zero>
111e2f: 89 c2 mov %eax,%edx
if (rc != RC_OK)
111e31: 83 c4 10 add $0x10,%esp
111e34: 85 c0 test %eax,%eax
111e36: 0f 85 3c 01 00 00 jne 111f78 <fat_file_extend+0x214> <== NEVER TAKEN
/*
* if in last cluster allocated for the file there is enough room to
* handle extention (hence we don't need to add even one cluster to the
* file ) - return
*/
if (bytes2add == 0)
111e3c: 83 7d d4 00 cmpl $0x0,-0x2c(%ebp)
111e40: 0f 84 50 ff ff ff je 111d96 <fat_file_extend+0x32>
return RC_OK;
cls2add = ((bytes2add - 1) >> fs_info->vol.bpc_log2) + 1;
111e46: 8b 45 d4 mov -0x2c(%ebp),%eax
111e49: 48 dec %eax
111e4a: 0f b6 4b 08 movzbl 0x8(%ebx),%ecx
111e4e: d3 e8 shr %cl,%eax
111e50: 8d 48 01 lea 0x1(%eax),%ecx
rc = fat_scan_fat_for_free_clusters(fs_info, &chain, cls2add,
111e53: 50 push %eax
111e54: 50 push %eax
111e55: 0f b6 45 cf movzbl -0x31(%ebp),%eax
111e59: 50 push %eax
111e5a: 8d 45 e0 lea -0x20(%ebp),%eax
111e5d: 50 push %eax
111e5e: 8d 45 e4 lea -0x1c(%ebp),%eax
111e61: 50 push %eax
111e62: 51 push %ecx
111e63: 8d 45 d8 lea -0x28(%ebp),%eax
111e66: 50 push %eax
111e67: 53 push %ebx
111e68: 89 4d c8 mov %ecx,-0x38(%ebp)
111e6b: e8 96 60 00 00 call 117f06 <fat_scan_fat_for_free_clusters>
111e70: 89 c2 mov %eax,%edx
&cls_added, &last_cl, zero_fill);
/* this means that low level I/O error occured */
if (rc != RC_OK)
111e72: 83 c4 20 add $0x20,%esp
111e75: 85 c0 test %eax,%eax
111e77: 8b 4d c8 mov -0x38(%ebp),%ecx
111e7a: 0f 85 f8 00 00 00 jne 111f78 <fat_file_extend+0x214> <== NEVER TAKEN
return rc;
/* this means that no space left on device */
if ((cls_added == 0) && (bytes_remain == 0))
111e80: 8b 45 e4 mov -0x1c(%ebp),%eax
111e83: 09 c7 or %eax,%edi
111e85: 75 13 jne 111e9a <fat_file_extend+0x136> <== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one(ENOSPC);
111e87: e8 84 79 00 00 call 119810 <__errno> <== NOT EXECUTED
111e8c: c7 00 1c 00 00 00 movl $0x1c,(%eax) <== NOT EXECUTED
111e92: 83 ca ff or $0xffffffff,%edx <== NOT EXECUTED
111e95: e9 de 00 00 00 jmp 111f78 <fat_file_extend+0x214> <== NOT EXECUTED
/* check wether we satisfied request for 'cls2add' clusters */
if (cls2add != cls_added)
111e9a: 39 c1 cmp %eax,%ecx
111e9c: 74 18 je 111eb6 <fat_file_extend+0x152> <== ALWAYS TAKEN
{
new_length -= bytes2add & (fs_info->vol.bpc - 1);
111e9e: 0f b7 7b 06 movzwl 0x6(%ebx),%edi <== NOT EXECUTED
111ea2: 4f dec %edi <== NOT EXECUTED
111ea3: 23 7d d4 and -0x2c(%ebp),%edi <== NOT EXECUTED
111ea6: 29 7d 14 sub %edi,0x14(%ebp) <== NOT EXECUTED
new_length -= (cls2add - cls_added) << fs_info->vol.bpc_log2;
111ea9: 29 c1 sub %eax,%ecx <== NOT EXECUTED
111eab: 89 c8 mov %ecx,%eax <== NOT EXECUTED
111ead: 0f b6 4b 08 movzbl 0x8(%ebx),%ecx <== NOT EXECUTED
111eb1: d3 e0 shl %cl,%eax <== NOT EXECUTED
111eb3: 29 45 14 sub %eax,0x14(%ebp) <== NOT EXECUTED
}
/* add new chain to the end of existed */
if ( fat_fd->fat_file_size == 0 )
111eb6: 8b 46 18 mov 0x18(%esi),%eax
111eb9: 85 c0 test %eax,%eax
111ebb: 75 12 jne 111ecf <fat_file_extend+0x16b>
{
fat_fd->map.disk_cln = fat_fd->cln = chain;
111ebd: 8b 45 d8 mov -0x28(%ebp),%eax
111ec0: 89 46 1c mov %eax,0x1c(%esi)
111ec3: 89 46 38 mov %eax,0x38(%esi)
fat_fd->map.file_cln = 0;
111ec6: c7 46 34 00 00 00 00 movl $0x0,0x34(%esi)
111ecd: eb 60 jmp 111f2f <fat_file_extend+0x1cb>
}
else
{
if (fat_fd->map.last_cln != FAT_UNDEFINED_VALUE)
111ecf: 8b 4e 3c mov 0x3c(%esi),%ecx
111ed2: 83 f9 ff cmp $0xffffffff,%ecx
111ed5: 74 05 je 111edc <fat_file_extend+0x178> <== NEVER TAKEN
{
old_last_cl = fat_fd->map.last_cln;
111ed7: 89 4d dc mov %ecx,-0x24(%ebp)
111eda: eb 23 jmp 111eff <fat_file_extend+0x19b>
}
else
{
rc = fat_file_ioctl(fs_info, fat_fd, F_CLU_NUM,
111edc: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
111edf: 8d 4d dc lea -0x24(%ebp),%ecx <== NOT EXECUTED
111ee2: 51 push %ecx <== NOT EXECUTED
111ee3: 48 dec %eax <== NOT EXECUTED
111ee4: 50 push %eax <== NOT EXECUTED
111ee5: 6a 01 push $0x1 <== NOT EXECUTED
111ee7: 56 push %esi <== NOT EXECUTED
111ee8: 53 push %ebx <== NOT EXECUTED
111ee9: 89 55 c8 mov %edx,-0x38(%ebp) <== NOT EXECUTED
111eec: e8 ed fd ff ff call 111cde <fat_file_ioctl> <== NOT EXECUTED
111ef1: 89 c7 mov %eax,%edi <== NOT EXECUTED
(fat_fd->fat_file_size - 1), &old_last_cl);
if ( rc != RC_OK )
111ef3: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
111ef6: 85 c0 test %eax,%eax <== NOT EXECUTED
111ef8: 8b 55 c8 mov -0x38(%ebp),%edx <== NOT EXECUTED
111efb: 74 02 je 111eff <fat_file_extend+0x19b> <== NOT EXECUTED
111efd: eb 5c jmp 111f5b <fat_file_extend+0x1f7> <== NOT EXECUTED
fat_free_fat_clusters_chain(fs_info, chain);
return rc;
}
}
rc = fat_set_fat_cluster(fs_info, old_last_cl, chain);
111eff: 50 push %eax
111f00: ff 75 d8 pushl -0x28(%ebp)
111f03: ff 75 dc pushl -0x24(%ebp)
111f06: 53 push %ebx
111f07: 89 55 c8 mov %edx,-0x38(%ebp)
111f0a: e8 3a 5d 00 00 call 117c49 <fat_set_fat_cluster>
111f0f: 89 c7 mov %eax,%edi
if ( rc != RC_OK )
111f11: 83 c4 10 add $0x10,%esp
111f14: 85 c0 test %eax,%eax
111f16: 8b 55 c8 mov -0x38(%ebp),%edx
111f19: 74 02 je 111f1d <fat_file_extend+0x1b9> <== ALWAYS TAKEN
111f1b: eb 3e jmp 111f5b <fat_file_extend+0x1f7> <== NOT EXECUTED
{
fat_free_fat_clusters_chain(fs_info, chain);
return rc;
}
fat_buf_release(fs_info);
111f1d: 83 ec 0c sub $0xc,%esp
111f20: 53 push %ebx
111f21: 89 55 c8 mov %edx,-0x38(%ebp)
111f24: e8 90 04 00 00 call 1123b9 <fat_buf_release>
111f29: 83 c4 10 add $0x10,%esp
111f2c: 8b 55 c8 mov -0x38(%ebp),%edx
}
/* update number of the last cluster of the file if it changed */
if (cls_added != 0)
111f2f: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp)
111f33: 74 38 je 111f6d <fat_file_extend+0x209> <== NEVER TAKEN
{
fat_fd->map.last_cln = last_cl;
111f35: 8b 45 e0 mov -0x20(%ebp),%eax
111f38: 89 46 3c mov %eax,0x3c(%esi)
if (fat_fd->fat_file_type == FAT_DIRECTORY)
111f3b: 83 7e 10 00 cmpl $0x0,0x10(%esi)
111f3f: 75 2c jne 111f6d <fat_file_extend+0x209>
{
rc = fat_init_clusters_chain(fs_info, chain);
111f41: 57 push %edi
111f42: 57 push %edi
111f43: ff 75 d8 pushl -0x28(%ebp)
111f46: 53 push %ebx
111f47: 89 55 c8 mov %edx,-0x38(%ebp)
111f4a: e8 ac 07 00 00 call 1126fb <fat_init_clusters_chain>
111f4f: 89 c7 mov %eax,%edi
if ( rc != RC_OK )
111f51: 83 c4 10 add $0x10,%esp
111f54: 85 c0 test %eax,%eax
111f56: 8b 55 c8 mov -0x38(%ebp),%edx
111f59: 74 12 je 111f6d <fat_file_extend+0x209> <== ALWAYS TAKEN
{
fat_free_fat_clusters_chain(fs_info, chain);
111f5b: 56 push %esi <== NOT EXECUTED
111f5c: 56 push %esi <== NOT EXECUTED
111f5d: ff 75 d8 pushl -0x28(%ebp) <== NOT EXECUTED
111f60: 53 push %ebx <== NOT EXECUTED
111f61: e8 fc 5e 00 00 call 117e62 <fat_free_fat_clusters_chain><== NOT EXECUTED
111f66: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
111f69: 89 fa mov %edi,%edx <== NOT EXECUTED
111f6b: eb 0b jmp 111f78 <fat_file_extend+0x214> <== NOT EXECUTED
return rc;
}
}
}
*a_length = new_length;
111f6d: 8b 4d 14 mov 0x14(%ebp),%ecx
111f70: 8b 45 18 mov 0x18(%ebp),%eax
111f73: 89 08 mov %ecx,(%eax)
fat_fd->fat_file_size = new_length;
111f75: 89 4e 18 mov %ecx,0x18(%esi)
return RC_OK;
}
111f78: 89 d0 mov %edx,%eax
111f7a: 8d 65 f4 lea -0xc(%ebp),%esp
111f7d: 5b pop %ebx
111f7e: 5e pop %esi
111f7f: 5f pop %edi
111f80: 5d pop %ebp
111f81: c3 ret
00111cde <fat_file_ioctl>:
fat_file_ioctl(
fat_fs_info_t *fs_info,
fat_file_fd_t *fat_fd,
int cmd,
...)
{
111cde: 55 push %ebp
111cdf: 89 e5 mov %esp,%ebp
111ce1: 56 push %esi
111ce2: 53 push %ebx
111ce3: 83 ec 10 sub $0x10,%esp
111ce6: 8b 45 08 mov 0x8(%ebp),%eax
111ce9: 8b 55 0c mov 0xc(%ebp),%edx
int rc = RC_OK;
uint32_t cur_cln = 0;
111cec: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp)
uint32_t *ret;
va_list ap;
va_start(ap, cmd);
switch (cmd)
111cf3: 83 7d 10 01 cmpl $0x1,0x10(%ebp)
111cf7: 75 56 jne 111d4f <fat_file_ioctl+0x71> <== NEVER TAKEN
{
case F_CLU_NUM:
pos = va_arg(ap, uint32_t);
111cf9: 8b 75 14 mov 0x14(%ebp),%esi
ret = va_arg(ap, uint32_t *);
111cfc: 8b 5d 18 mov 0x18(%ebp),%ebx
/* sanity check */
if ( pos >= fat_fd->fat_file_size ) {
111cff: 3b 72 18 cmp 0x18(%edx),%esi
111d02: 72 0d jb 111d11 <fat_file_ioctl+0x33> <== ALWAYS TAKEN
va_end(ap);
rtems_set_errno_and_return_minus_one( EIO );
111d04: e8 07 7b 00 00 call 119810 <__errno> <== NOT EXECUTED
111d09: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
111d0f: eb 49 jmp 111d5a <fat_file_ioctl+0x7c> <== NOT EXECUTED
}
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
111d11: 83 7a 20 01 cmpl $0x1,0x20(%edx)
111d15: 75 16 jne 111d2d <fat_file_ioctl+0x4f>
111d17: 83 7a 24 00 cmpl $0x0,0x24(%edx)
111d1b: 75 10 jne 111d2d <fat_file_ioctl+0x4f> <== NEVER TAKEN
111d1d: f6 40 0a 03 testb $0x3,0xa(%eax)
111d21: 74 0a je 111d2d <fat_file_ioctl+0x4f> <== NEVER TAKEN
(fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)))
{
/* cluster 0 (zero) reserved for root dir */
*ret = 0;
111d23: c7 03 00 00 00 00 movl $0x0,(%ebx)
rc = RC_OK;
111d29: 31 c0 xor %eax,%eax
break;
111d2b: eb 30 jmp 111d5d <fat_file_ioctl+0x7f>
}
cl_start = pos >> fs_info->vol.bpc_log2;
rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln);
111d2d: 83 ec 0c sub $0xc,%esp
*ret = 0;
rc = RC_OK;
break;
}
cl_start = pos >> fs_info->vol.bpc_log2;
111d30: 0f b6 48 08 movzbl 0x8(%eax),%ecx
111d34: d3 ee shr %cl,%esi
111d36: 89 f1 mov %esi,%ecx
rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln);
111d38: 8d 75 f4 lea -0xc(%ebp),%esi
111d3b: 56 push %esi
111d3c: e8 d8 fa ff ff call 111819 <fat_file_lseek>
if ( rc != RC_OK )
111d41: 83 c4 10 add $0x10,%esp
111d44: 85 c0 test %eax,%eax
111d46: 75 15 jne 111d5d <fat_file_ioctl+0x7f> <== NEVER TAKEN
break;
*ret = cur_cln;
111d48: 8b 55 f4 mov -0xc(%ebp),%edx
111d4b: 89 13 mov %edx,(%ebx)
break;
111d4d: eb 0e jmp 111d5d <fat_file_ioctl+0x7f>
default:
errno = EINVAL;
111d4f: e8 bc 7a 00 00 call 119810 <__errno> <== NOT EXECUTED
111d54: c7 00 16 00 00 00 movl $0x16,(%eax) <== NOT EXECUTED
rc = -1;
111d5a: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
break;
}
va_end(ap);
return rc;
}
111d5d: 8d 65 f8 lea -0x8(%ebp),%esp
111d60: 5b pop %ebx
111d61: 5e pop %esi
111d62: 5d pop %ebp
111d63: c3 ret
00111819 <fat_file_lseek>:
fat_fs_info_t *fs_info,
fat_file_fd_t *fat_fd,
uint32_t file_cln,
uint32_t *disk_cln
)
{
111819: 55 push %ebp
11181a: 89 e5 mov %esp,%ebp
11181c: 57 push %edi
11181d: 56 push %esi
11181e: 53 push %ebx
11181f: 83 ec 2c sub $0x2c,%esp
111822: 89 c7 mov %eax,%edi
111824: 89 d3 mov %edx,%ebx
111826: 89 ce mov %ecx,%esi
int rc = RC_OK;
if (file_cln == fat_fd->map.file_cln)
111828: 8b 42 34 mov 0x34(%edx),%eax
11182b: 39 c1 cmp %eax,%ecx
11182d: 75 05 jne 111834 <fat_file_lseek+0x1b>
*disk_cln = fat_fd->map.disk_cln;
11182f: 8b 42 38 mov 0x38(%edx),%eax
111832: eb 51 jmp 111885 <fat_file_lseek+0x6c>
{
uint32_t cur_cln;
uint32_t count;
uint32_t i;
if (file_cln > fat_fd->map.file_cln)
111834: 76 0f jbe 111845 <fat_file_lseek+0x2c>
{
cur_cln = fat_fd->map.disk_cln;
111836: 8b 52 38 mov 0x38(%edx),%edx
111839: 89 55 e4 mov %edx,-0x1c(%ebp)
count = file_cln - fat_fd->map.file_cln;
11183c: 89 ca mov %ecx,%edx
11183e: 29 c2 sub %eax,%edx
111840: 89 55 d4 mov %edx,-0x2c(%ebp)
111843: eb 09 jmp 11184e <fat_file_lseek+0x35>
}
else
{
cur_cln = fat_fd->cln;
111845: 8b 42 1c mov 0x1c(%edx),%eax
111848: 89 45 e4 mov %eax,-0x1c(%ebp)
11184b: 89 4d d4 mov %ecx,-0x2c(%ebp)
count = file_cln;
}
/* skip over the clusters */
for (i = 0; i < count; i++)
11184e: 31 d2 xor %edx,%edx
{
rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln);
111850: 8d 4d e4 lea -0x1c(%ebp),%ecx
cur_cln = fat_fd->cln;
count = file_cln;
}
/* skip over the clusters */
for (i = 0; i < count; i++)
111853: eb 22 jmp 111877 <fat_file_lseek+0x5e>
{
rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln);
111855: 50 push %eax
111856: 51 push %ecx
111857: ff 75 e4 pushl -0x1c(%ebp)
11185a: 57 push %edi
11185b: 89 55 d0 mov %edx,-0x30(%ebp)
11185e: 89 4d cc mov %ecx,-0x34(%ebp)
111861: e8 9a 62 00 00 call 117b00 <fat_get_fat_cluster>
if ( rc != RC_OK )
111866: 83 c4 10 add $0x10,%esp
111869: 85 c0 test %eax,%eax
11186b: 8b 55 d0 mov -0x30(%ebp),%edx
11186e: 8b 4d cc mov -0x34(%ebp),%ecx
111871: 74 03 je 111876 <fat_file_lseek+0x5d> <== ALWAYS TAKEN
return rc;
111873: 99 cltd <== NOT EXECUTED
111874: eb 18 jmp 11188e <fat_file_lseek+0x75> <== NOT EXECUTED
cur_cln = fat_fd->cln;
count = file_cln;
}
/* skip over the clusters */
for (i = 0; i < count; i++)
111876: 42 inc %edx
111877: 3b 55 d4 cmp -0x2c(%ebp),%edx
11187a: 75 d9 jne 111855 <fat_file_lseek+0x3c>
if ( rc != RC_OK )
return rc;
}
/* update cache */
fat_fd->map.file_cln = file_cln;
11187c: 89 73 34 mov %esi,0x34(%ebx)
fat_fd->map.disk_cln = cur_cln;
11187f: 8b 45 e4 mov -0x1c(%ebp),%eax
111882: 89 43 38 mov %eax,0x38(%ebx)
*disk_cln = cur_cln;
111885: 8b 55 08 mov 0x8(%ebp),%edx
111888: 89 02 mov %eax,(%edx)
}
return RC_OK;
11188a: 31 c0 xor %eax,%eax
11188c: 31 d2 xor %edx,%edx
}
11188e: 8d 65 f4 lea -0xc(%ebp),%esp
111891: 5b pop %ebx
111892: 5e pop %esi
111893: 5f pop %edi
111894: 5d pop %ebp
111895: c3 ret
00111896 <fat_file_open>:
fat_file_open(
fat_fs_info_t *fs_info,
fat_dir_pos_t *dir_pos,
fat_file_fd_t **fat_fd
)
{
111896: 55 push %ebp
111897: 89 e5 mov %esp,%ebp
111899: 57 push %edi
11189a: 56 push %esi
11189b: 53 push %ebx
11189c: 83 ec 1c sub $0x1c,%esp
11189f: 8b 75 0c mov 0xc(%ebp),%esi
int rc = RC_OK;
fat_file_fd_t *lfat_fd = NULL;
uint32_t key = 0;
/* construct key */
key = fat_construct_key(fs_info, &dir_pos->sname);
1118a2: 89 f2 mov %esi,%edx
1118a4: 8b 45 08 mov 0x8(%ebp),%eax
1118a7: e8 2e ff ff ff call 1117da <fat_construct_key>
1118ac: 89 45 e4 mov %eax,-0x1c(%ebp)
uint32_t key1,
uint32_t key2,
fat_file_fd_t **ret
)
{
uint32_t mod = (key1) % FAT_HASH_MODULE;
1118af: 83 e0 01 and $0x1,%eax
rtems_chain_node *the_node = rtems_chain_first(hash + mod);
1118b2: 6b c0 0c imul $0xc,%eax,%eax
1118b5: 89 45 e0 mov %eax,-0x20(%ebp)
1118b8: 89 c3 mov %eax,%ebx
1118ba: 8b 45 08 mov 0x8(%ebp),%eax
1118bd: 03 58 60 add 0x60(%eax),%ebx
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_First(
Chain_Control *the_chain
)
{
return _Chain_Head( the_chain )->next;
1118c0: 8b 3b mov (%ebx),%edi
RTEMS_INLINE_ROUTINE bool _Chain_Is_tail(
const Chain_Control *the_chain,
const Chain_Node *the_node
)
{
return (the_node == _Chain_Immutable_tail( the_chain ));
1118c2: 83 c3 04 add $0x4,%ebx
1118c5: eb 1f jmp 1118e6 <fat_file_open+0x50>
for ( ; !rtems_chain_is_tail((hash) + mod, the_node) ; )
{
fat_file_fd_t *ffd = (fat_file_fd_t *)the_node;
uint32_t ck = fat_construct_key(fs_info, &ffd->dir_pos.sname);
1118c7: 8d 57 20 lea 0x20(%edi),%edx
1118ca: 8b 45 08 mov 0x8(%ebp),%eax
1118cd: e8 08 ff ff ff call 1117da <fat_construct_key>
if ( (key1) == ck)
1118d2: 39 45 e4 cmp %eax,-0x1c(%ebp)
1118d5: 75 0d jne 1118e4 <fat_file_open+0x4e>
/* access "valid" hash table */
rc = _hash_search(fs_info, fs_info->vhash, key, 0, &lfat_fd);
if ( rc == RC_OK )
{
/* return pointer to fat_file_descriptor allocated before */
(*fat_fd) = lfat_fd;
1118d7: 8b 55 10 mov 0x10(%ebp),%edx
1118da: 89 3a mov %edi,(%edx)
lfat_fd->links_num++;
1118dc: ff 47 08 incl 0x8(%edi)
1118df: e9 db 00 00 00 jmp 1119bf <fat_file_open+0x129>
{
*ret = (void *)the_node;
return 0;
}
}
the_node = the_node->next;
1118e4: 8b 3f mov (%edi),%edi
)
{
uint32_t mod = (key1) % FAT_HASH_MODULE;
rtems_chain_node *the_node = rtems_chain_first(hash + mod);
for ( ; !rtems_chain_is_tail((hash) + mod, the_node) ; )
1118e6: 39 df cmp %ebx,%edi
1118e8: 75 dd jne 1118c7 <fat_file_open+0x31>
1118ea: e9 d4 00 00 00 jmp 1119c3 <fat_file_open+0x12d>
{
fat_file_fd_t *ffd = (fat_file_fd_t *)the_node;
uint32_t ck = fat_construct_key(fs_info, &ffd->dir_pos.sname);
1118ef: 8d 57 20 lea 0x20(%edi),%edx <== NOT EXECUTED
1118f2: 8b 45 08 mov 0x8(%ebp),%eax <== NOT EXECUTED
1118f5: e8 e0 fe ff ff call 1117da <fat_construct_key> <== NOT EXECUTED
if ( (key1) == ck)
1118fa: 39 45 e4 cmp %eax,-0x1c(%ebp) <== NOT EXECUTED
1118fd: 75 0e jne 11190d <fat_file_open+0x77> <== NOT EXECUTED
{
if ( ((key2) == 0) || ((key2) == ffd->ino) )
1118ff: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp) <== NOT EXECUTED
111903: 74 13 je 111918 <fat_file_open+0x82> <== NOT EXECUTED
111905: 8b 45 e4 mov -0x1c(%ebp),%eax <== NOT EXECUTED
111908: 3b 47 0c cmp 0xc(%edi),%eax <== NOT EXECUTED
11190b: 74 0b je 111918 <fat_file_open+0x82> <== NOT EXECUTED
{
*ret = (void *)the_node;
return 0;
}
}
the_node = the_node->next;
11190d: 8b 3f mov (%edi),%edi <== NOT EXECUTED
)
{
uint32_t mod = (key1) % FAT_HASH_MODULE;
rtems_chain_node *the_node = rtems_chain_first(hash + mod);
for ( ; !rtems_chain_is_tail((hash) + mod, the_node) ; )
11190f: 39 df cmp %ebx,%edi
111911: 75 dc jne 1118ef <fat_file_open+0x59> <== NEVER TAKEN
return 0;
}
}
the_node = the_node->next;
}
return -1;
111913: 83 ca ff or $0xffffffff,%edx
111916: eb 02 jmp 11191a <fat_file_open+0x84>
if ( (key1) == ck)
{
if ( ((key2) == 0) || ((key2) == ffd->ino) )
{
*ret = (void *)the_node;
return 0;
111918: 31 d2 xor %edx,%edx <== NOT EXECUTED
}
/* access "removed-but-still-open" hash table */
rc = _hash_search(fs_info, fs_info->rhash, key, key, &lfat_fd);
lfat_fd = (*fat_fd) = (fat_file_fd_t*)malloc(sizeof(fat_file_fd_t));
11191a: 83 ec 0c sub $0xc,%esp
11191d: 6a 44 push $0x44
11191f: 89 55 dc mov %edx,-0x24(%ebp)
111922: e8 e1 5d ff ff call 107708 <malloc>
111927: 89 c3 mov %eax,%ebx
111929: 8b 45 10 mov 0x10(%ebp),%eax
11192c: 89 18 mov %ebx,(%eax)
if ( lfat_fd == NULL )
11192e: 83 c4 10 add $0x10,%esp
111931: 85 db test %ebx,%ebx
111933: 8b 55 dc mov -0x24(%ebp),%edx
111936: 75 0d jne 111945 <fat_file_open+0xaf> <== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one( ENOMEM );
111938: e8 d3 7e 00 00 call 119810 <__errno> <== NOT EXECUTED
11193d: c7 00 0c 00 00 00 movl $0xc,(%eax) <== NOT EXECUTED
111943: eb 60 jmp 1119a5 <fat_file_open+0x10f> <== NOT EXECUTED
memset(lfat_fd, 0, sizeof(fat_file_fd_t));
111945: b9 11 00 00 00 mov $0x11,%ecx
11194a: 31 c0 xor %eax,%eax
11194c: 89 df mov %ebx,%edi
11194e: f3 ab rep stos %eax,%es:(%edi)
lfat_fd->links_num = 1;
111950: c7 43 08 01 00 00 00 movl $0x1,0x8(%ebx)
lfat_fd->flags &= ~FAT_FILE_REMOVED;
111957: 80 63 30 fe andb $0xfe,0x30(%ebx)
lfat_fd->map.last_cln = FAT_UNDEFINED_VALUE;
11195b: c7 43 3c ff ff ff ff movl $0xffffffff,0x3c(%ebx)
lfat_fd->dir_pos = *dir_pos;
111962: 8d 7b 20 lea 0x20(%ebx),%edi
111965: b1 04 mov $0x4,%cl
111967: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
if ( rc != RC_OK )
111969: 85 d2 test %edx,%edx
11196b: 74 08 je 111975 <fat_file_open+0xdf> <== NEVER TAKEN
lfat_fd->ino = key;
11196d: 8b 45 e4 mov -0x1c(%ebp),%eax
111970: 89 43 0c mov %eax,0xc(%ebx)
111973: eb 35 jmp 1119aa <fat_file_open+0x114>
else
{
lfat_fd->ino = fat_get_unique_ino(fs_info);
111975: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
111978: ff 75 08 pushl 0x8(%ebp) <== NOT EXECUTED
11197b: e8 1b 0e 00 00 call 11279b <fat_get_unique_ino> <== NOT EXECUTED
111980: 89 43 0c mov %eax,0xc(%ebx) <== NOT EXECUTED
if ( lfat_fd->ino == 0 )
111983: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
111986: 85 c0 test %eax,%eax <== NOT EXECUTED
111988: 75 20 jne 1119aa <fat_file_open+0x114> <== NOT EXECUTED
{
free((*fat_fd));
11198a: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11198d: 8b 55 10 mov 0x10(%ebp),%edx <== NOT EXECUTED
111990: ff 32 pushl (%edx) <== NOT EXECUTED
111992: e8 95 58 ff ff call 10722c <free> <== NOT EXECUTED
/*
* XXX: kernel resource is unsufficient, but not the memory,
* but there is no suitable errno :(
*/
rtems_set_errno_and_return_minus_one( ENOMEM );
111997: e8 74 7e 00 00 call 119810 <__errno> <== NOT EXECUTED
11199c: c7 00 0c 00 00 00 movl $0xc,(%eax) <== NOT EXECUTED
1119a2: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
1119a5: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
1119a8: eb 2c jmp 1119d6 <fat_file_open+0x140> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void rtems_chain_append(
rtems_chain_control *the_chain,
rtems_chain_node *the_node
)
{
_Chain_Append( the_chain, the_node );
1119aa: 52 push %edx
1119ab: 52 push %edx
1119ac: 53 push %ebx
*/
static inline void
_hash_insert(rtems_chain_control *hash, uint32_t key1, uint32_t key2,
fat_file_fd_t *el)
{
rtems_chain_append((hash) + ((key1) % FAT_HASH_MODULE), &(el)->link);
1119ad: 8b 45 e0 mov -0x20(%ebp),%eax
1119b0: 8b 55 08 mov 0x8(%ebp),%edx
1119b3: 03 42 60 add 0x60(%edx),%eax
1119b6: 50 push %eax
1119b7: e8 3c 9d ff ff call 10b6f8 <_Chain_Append>
1119bc: 83 c4 10 add $0x10,%esp
/*
* other fields of fat-file descriptor will be initialized on upper
* level
*/
return RC_OK;
1119bf: 31 c0 xor %eax,%eax
1119c1: eb 13 jmp 1119d6 <fat_file_open+0x140>
uint32_t key2,
fat_file_fd_t **ret
)
{
uint32_t mod = (key1) % FAT_HASH_MODULE;
rtems_chain_node *the_node = rtems_chain_first(hash + mod);
1119c3: 8b 5d e0 mov -0x20(%ebp),%ebx
1119c6: 8b 45 08 mov 0x8(%ebp),%eax
1119c9: 03 58 64 add 0x64(%eax),%ebx
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_First(
Chain_Control *the_chain
)
{
return _Chain_Head( the_chain )->next;
1119cc: 8b 3b mov (%ebx),%edi
RTEMS_INLINE_ROUTINE bool _Chain_Is_tail(
const Chain_Control *the_chain,
const Chain_Node *the_node
)
{
return (the_node == _Chain_Immutable_tail( the_chain ));
1119ce: 83 c3 04 add $0x4,%ebx
1119d1: e9 39 ff ff ff jmp 11190f <fat_file_open+0x79>
* other fields of fat-file descriptor will be initialized on upper
* level
*/
return RC_OK;
}
1119d6: 8d 65 f4 lea -0xc(%ebp),%esp
1119d9: 5b pop %ebx
1119da: 5e pop %esi
1119db: 5f pop %edi
1119dc: 5d pop %ebp
1119dd: c3 ret
001119eb <fat_file_read>:
fat_file_fd_t *fat_fd,
uint32_t start,
uint32_t count,
uint8_t *buf
)
{
1119eb: 55 push %ebp
1119ec: 89 e5 mov %esp,%ebp
1119ee: 57 push %edi
1119ef: 56 push %esi
1119f0: 53 push %ebx
1119f1: 83 ec 2c sub $0x2c,%esp
1119f4: 8b 5d 08 mov 0x8(%ebp),%ebx
1119f7: 8b 75 10 mov 0x10(%ebp),%esi
int rc = RC_OK;
ssize_t ret = 0;
uint32_t cmpltd = 0;
uint32_t cur_cln = 0;
1119fa: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
uint32_t byte = 0;
uint32_t c = 0;
/* it couldn't be removed - otherwise cache update will be broken */
if (count == 0)
return cmpltd;
111a01: 31 c0 xor %eax,%eax
uint32_t sec = 0;
uint32_t byte = 0;
uint32_t c = 0;
/* it couldn't be removed - otherwise cache update will be broken */
if (count == 0)
111a03: 83 7d 14 00 cmpl $0x0,0x14(%ebp)
111a07: 0f 84 45 01 00 00 je 111b52 <fat_file_read+0x167> <== NEVER TAKEN
/*
* >= because start is offset and computed from 0 and file_size
* computed from 1
*/
if ( start >= fat_fd->fat_file_size )
111a0d: 8b 4d 0c mov 0xc(%ebp),%ecx
111a10: 8b 51 18 mov 0x18(%ecx),%edx
111a13: 39 d6 cmp %edx,%esi
111a15: 0f 83 37 01 00 00 jae 111b52 <fat_file_read+0x167>
return FAT_EOF;
if ((count > fat_fd->fat_file_size) ||
111a1b: 39 55 14 cmp %edx,0x14(%ebp)
111a1e: 77 09 ja 111a29 <fat_file_read+0x3e> <== NEVER TAKEN
(start > fat_fd->fat_file_size - count))
111a20: 89 d0 mov %edx,%eax
111a22: 2b 45 14 sub 0x14(%ebp),%eax
* computed from 1
*/
if ( start >= fat_fd->fat_file_size )
return FAT_EOF;
if ((count > fat_fd->fat_file_size) ||
111a25: 39 c6 cmp %eax,%esi
111a27: 76 05 jbe 111a2e <fat_file_read+0x43>
(start > fat_fd->fat_file_size - count))
count = fat_fd->fat_file_size - start;
111a29: 29 f2 sub %esi,%edx
111a2b: 89 55 14 mov %edx,0x14(%ebp)
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
111a2e: 8b 45 0c mov 0xc(%ebp),%eax
111a31: 83 78 20 01 cmpl $0x1,0x20(%eax)
111a35: 75 45 jne 111a7c <fat_file_read+0x91>
111a37: 83 78 24 00 cmpl $0x0,0x24(%eax)
111a3b: 75 3f jne 111a7c <fat_file_read+0x91> <== NEVER TAKEN
111a3d: f6 43 0a 03 testb $0x3,0xa(%ebx)
111a41: 74 39 je 111a7c <fat_file_read+0x91> <== NEVER TAKEN
(fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)))
{
sec = fat_cluster_num_to_sector_num(fs_info, fat_fd->cln);
111a43: 8b 50 1c mov 0x1c(%eax),%edx
111a46: 89 d8 mov %ebx,%eax
111a48: e8 6b fd ff ff call 1117b8 <fat_cluster_num_to_sector_num>
sec += (start >> fs_info->vol.sec_log2);
byte = start & (fs_info->vol.bps - 1);
ret = _fat_block_read(fs_info, sec, byte, count, buf);
111a4d: 83 ec 0c sub $0xc,%esp
111a50: ff 75 18 pushl 0x18(%ebp)
111a53: ff 75 14 pushl 0x14(%ebp)
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
(fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)))
{
sec = fat_cluster_num_to_sector_num(fs_info, fat_fd->cln);
sec += (start >> fs_info->vol.sec_log2);
byte = start & (fs_info->vol.bps - 1);
111a56: 0f b7 13 movzwl (%ebx),%edx
111a59: 4a dec %edx
111a5a: 21 f2 and %esi,%edx
ret = _fat_block_read(fs_info, sec, byte, count, buf);
111a5c: 52 push %edx
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
(fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)))
{
sec = fat_cluster_num_to_sector_num(fs_info, fat_fd->cln);
sec += (start >> fs_info->vol.sec_log2);
111a5d: 0f b6 4b 02 movzbl 0x2(%ebx),%ecx
111a61: d3 ee shr %cl,%esi
111a63: 01 f0 add %esi,%eax
byte = start & (fs_info->vol.bps - 1);
ret = _fat_block_read(fs_info, sec, byte, count, buf);
111a65: 50 push %eax
111a66: 53 push %ebx
111a67: e8 73 0a 00 00 call 1124df <_fat_block_read>
if ( ret < 0 )
111a6c: 83 c4 20 add $0x20,%esp
111a6f: 85 c0 test %eax,%eax
111a71: 0f 89 db 00 00 00 jns 111b52 <fat_file_read+0x167> <== ALWAYS TAKEN
111a77: e9 d3 00 00 00 jmp 111b4f <fat_file_read+0x164> <== NOT EXECUTED
return -1;
return ret;
}
cl_start = start >> fs_info->vol.bpc_log2;
111a7c: 0f b6 4b 08 movzbl 0x8(%ebx),%ecx
111a80: 89 f0 mov %esi,%eax
111a82: d3 e8 shr %cl,%eax
111a84: 89 45 cc mov %eax,-0x34(%ebp)
save_ofs = ofs = start & (fs_info->vol.bpc - 1);
111a87: 66 8b 4b 06 mov 0x6(%ebx),%cx
111a8b: 66 89 4d d4 mov %cx,-0x2c(%ebp)
rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln);
111a8f: 83 ec 0c sub $0xc,%esp
111a92: 8d 7d e4 lea -0x1c(%ebp),%edi
111a95: 57 push %edi
111a96: 89 c1 mov %eax,%ecx
111a98: 8b 55 0c mov 0xc(%ebp),%edx
111a9b: 89 d8 mov %ebx,%eax
111a9d: e8 77 fd ff ff call 111819 <fat_file_lseek>
if (rc != RC_OK)
111aa2: 83 c4 10 add $0x10,%esp
111aa5: 85 c0 test %eax,%eax
111aa7: 0f 85 a5 00 00 00 jne 111b52 <fat_file_read+0x167> <== NEVER TAKEN
return ret;
}
cl_start = start >> fs_info->vol.bpc_log2;
save_ofs = ofs = start & (fs_info->vol.bpc - 1);
111aad: 0f b7 45 d4 movzwl -0x2c(%ebp),%eax
111ab1: 48 dec %eax
111ab2: 21 f0 and %esi,%eax
111ab4: 89 45 d0 mov %eax,-0x30(%ebp)
111ab7: 89 c6 mov %eax,%esi
111ab9: 31 d2 xor %edx,%edx
111abb: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)
111ac2: eb 64 jmp 111b28 <fat_file_read+0x13d>
if (rc != RC_OK)
return rc;
while (count > 0)
{
c = MIN(count, (fs_info->vol.bpc - ofs));
111ac4: 0f b7 7b 06 movzwl 0x6(%ebx),%edi
111ac8: 29 f7 sub %esi,%edi
111aca: 3b 7d 14 cmp 0x14(%ebp),%edi
111acd: 76 03 jbe 111ad2 <fat_file_read+0xe7>
111acf: 8b 7d 14 mov 0x14(%ebp),%edi
sec = fat_cluster_num_to_sector_num(fs_info, cur_cln);
111ad2: 8b 55 e4 mov -0x1c(%ebp),%edx
111ad5: 89 d8 mov %ebx,%eax
111ad7: e8 dc fc ff ff call 1117b8 <fat_cluster_num_to_sector_num>
sec += (ofs >> fs_info->vol.sec_log2);
byte = ofs & (fs_info->vol.bps - 1);
ret = _fat_block_read(fs_info, sec, byte, c, buf + cmpltd);
111adc: 83 ec 0c sub $0xc,%esp
111adf: 8b 55 18 mov 0x18(%ebp),%edx
111ae2: 03 55 d4 add -0x2c(%ebp),%edx
111ae5: 52 push %edx
111ae6: 57 push %edi
{
c = MIN(count, (fs_info->vol.bpc - ofs));
sec = fat_cluster_num_to_sector_num(fs_info, cur_cln);
sec += (ofs >> fs_info->vol.sec_log2);
byte = ofs & (fs_info->vol.bps - 1);
111ae7: 0f b7 13 movzwl (%ebx),%edx
111aea: 4a dec %edx
111aeb: 21 f2 and %esi,%edx
ret = _fat_block_read(fs_info, sec, byte, c, buf + cmpltd);
111aed: 52 push %edx
while (count > 0)
{
c = MIN(count, (fs_info->vol.bpc - ofs));
sec = fat_cluster_num_to_sector_num(fs_info, cur_cln);
sec += (ofs >> fs_info->vol.sec_log2);
111aee: 0f b6 4b 02 movzbl 0x2(%ebx),%ecx
111af2: d3 ee shr %cl,%esi
111af4: 01 f0 add %esi,%eax
byte = ofs & (fs_info->vol.bps - 1);
ret = _fat_block_read(fs_info, sec, byte, c, buf + cmpltd);
111af6: 50 push %eax
111af7: 53 push %ebx
111af8: e8 e2 09 00 00 call 1124df <_fat_block_read>
if ( ret < 0 )
111afd: 83 c4 20 add $0x20,%esp
111b00: 85 c0 test %eax,%eax
111b02: 78 4b js 111b4f <fat_file_read+0x164> <== NEVER TAKEN
return -1;
count -= c;
111b04: 29 7d 14 sub %edi,0x14(%ebp)
cmpltd += c;
111b07: 01 7d d4 add %edi,-0x2c(%ebp)
save_cln = cur_cln;
111b0a: 8b 55 e4 mov -0x1c(%ebp),%edx
rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln);
111b0d: 51 push %ecx
111b0e: 8d 75 e4 lea -0x1c(%ebp),%esi
111b11: 56 push %esi
111b12: 52 push %edx
111b13: 53 push %ebx
111b14: 89 55 c8 mov %edx,-0x38(%ebp)
111b17: e8 e4 5f 00 00 call 117b00 <fat_get_fat_cluster>
if ( rc != RC_OK )
return rc;
ofs = 0;
111b1c: 31 f6 xor %esi,%esi
count -= c;
cmpltd += c;
save_cln = cur_cln;
rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln);
if ( rc != RC_OK )
111b1e: 83 c4 10 add $0x10,%esp
111b21: 85 c0 test %eax,%eax
111b23: 8b 55 c8 mov -0x38(%ebp),%edx
111b26: 75 2a jne 111b52 <fat_file_read+0x167> <== NEVER TAKEN
rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln);
if (rc != RC_OK)
return rc;
while (count > 0)
111b28: 83 7d 14 00 cmpl $0x0,0x14(%ebp)
111b2c: 75 96 jne 111ac4 <fat_file_read+0xd9>
}
/* update cache */
/* XXX: check this - I'm not sure :( */
fat_fd->map.file_cln = cl_start +
((save_ofs + cmpltd - 1) >> fs_info->vol.bpc_log2);
111b2e: 8b 4d d4 mov -0x2c(%ebp),%ecx
111b31: 8b 75 d0 mov -0x30(%ebp),%esi
111b34: 8d 44 31 ff lea -0x1(%ecx,%esi,1),%eax
111b38: 0f b6 4b 08 movzbl 0x8(%ebx),%ecx
111b3c: d3 e8 shr %cl,%eax
ofs = 0;
}
/* update cache */
/* XXX: check this - I'm not sure :( */
fat_fd->map.file_cln = cl_start +
111b3e: 03 45 cc add -0x34(%ebp),%eax
111b41: 8b 75 0c mov 0xc(%ebp),%esi
111b44: 89 46 34 mov %eax,0x34(%esi)
((save_ofs + cmpltd - 1) >> fs_info->vol.bpc_log2);
fat_fd->map.disk_cln = save_cln;
111b47: 89 56 38 mov %edx,0x38(%esi)
return cmpltd;
111b4a: 8b 45 d4 mov -0x2c(%ebp),%eax
111b4d: eb 03 jmp 111b52 <fat_file_read+0x167>
sec += (ofs >> fs_info->vol.sec_log2);
byte = ofs & (fs_info->vol.bps - 1);
ret = _fat_block_read(fs_info, sec, byte, c, buf + cmpltd);
if ( ret < 0 )
return -1;
111b4f: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
fat_fd->map.file_cln = cl_start +
((save_ofs + cmpltd - 1) >> fs_info->vol.bpc_log2);
fat_fd->map.disk_cln = save_cln;
return cmpltd;
}
111b52: 8d 65 f4 lea -0xc(%ebp),%esp
111b55: 5b pop %ebx
111b56: 5e pop %esi
111b57: 5f pop %edi
111b58: 5d pop %ebp
111b59: c3 ret
0011218c <fat_file_size>:
int
fat_file_size(
fat_fs_info_t *fs_info,
fat_file_fd_t *fat_fd
)
{
11218c: 55 push %ebp
11218d: 89 e5 mov %esp,%ebp
11218f: 57 push %edi
112190: 56 push %esi
112191: 53 push %ebx
112192: 83 ec 2c sub $0x2c,%esp
112195: 8b 75 08 mov 0x8(%ebp),%esi
112198: 8b 5d 0c mov 0xc(%ebp),%ebx
int rc = RC_OK;
uint32_t cur_cln = fat_fd->cln;
11219b: 8b 43 1c mov 0x1c(%ebx),%eax
11219e: 89 45 e4 mov %eax,-0x1c(%ebp)
uint32_t save_cln = 0;
/* Have we requested root dir size for FAT12/16? */
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
1121a1: 83 7b 20 01 cmpl $0x1,0x20(%ebx)
1121a5: 75 14 jne 1121bb <fat_file_size+0x2f> <== ALWAYS TAKEN
1121a7: 83 7b 24 00 cmpl $0x0,0x24(%ebx) <== NOT EXECUTED
1121ab: 75 0e jne 1121bb <fat_file_size+0x2f> <== NOT EXECUTED
1121ad: f6 46 0a 03 testb $0x3,0xa(%esi) <== NOT EXECUTED
1121b1: 74 08 je 1121bb <fat_file_size+0x2f> <== NOT EXECUTED
(fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)))
{
fat_fd->fat_file_size = fs_info->vol.rdir_size;
1121b3: 8b 46 28 mov 0x28(%esi),%eax <== NOT EXECUTED
1121b6: 89 43 18 mov %eax,0x18(%ebx) <== NOT EXECUTED
1121b9: eb 3d jmp 1121f8 <fat_file_size+0x6c> <== NOT EXECUTED
return rc;
}
fat_fd->fat_file_size = 0;
1121bb: c7 43 18 00 00 00 00 movl $0x0,0x18(%ebx)
fat_file_fd_t *fat_fd
)
{
int rc = RC_OK;
uint32_t cur_cln = fat_fd->cln;
uint32_t save_cln = 0;
1121c2: 31 c0 xor %eax,%eax
fat_fd->fat_file_size = 0;
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
{
save_cln = cur_cln;
rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln);
1121c4: 8d 55 e4 lea -0x1c(%ebp),%edx
return rc;
}
fat_fd->fat_file_size = 0;
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
1121c7: eb 1f jmp 1121e8 <fat_file_size+0x5c>
{
save_cln = cur_cln;
rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln);
1121c9: 51 push %ecx
1121ca: 52 push %edx
1121cb: 57 push %edi
1121cc: 56 push %esi
1121cd: 89 55 d4 mov %edx,-0x2c(%ebp)
1121d0: e8 2b 59 00 00 call 117b00 <fat_get_fat_cluster>
if ( rc != RC_OK )
1121d5: 83 c4 10 add $0x10,%esp
1121d8: 85 c0 test %eax,%eax
1121da: 8b 55 d4 mov -0x2c(%ebp),%edx
1121dd: 75 1b jne 1121fa <fat_file_size+0x6e> <== NEVER TAKEN
return rc;
fat_fd->fat_file_size += fs_info->vol.bpc;
1121df: 0f b7 46 06 movzwl 0x6(%esi),%eax
1121e3: 01 43 18 add %eax,0x18(%ebx)
fat_fd->fat_file_size = 0;
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
{
save_cln = cur_cln;
1121e6: 89 f8 mov %edi,%eax
return rc;
}
fat_fd->fat_file_size = 0;
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
1121e8: 8b 7d e4 mov -0x1c(%ebp),%edi
1121eb: 8b 4e 0c mov 0xc(%esi),%ecx
1121ee: 21 f9 and %edi,%ecx
1121f0: 3b 4e 10 cmp 0x10(%esi),%ecx
1121f3: 72 d4 jb 1121c9 <fat_file_size+0x3d>
if ( rc != RC_OK )
return rc;
fat_fd->fat_file_size += fs_info->vol.bpc;
}
fat_fd->map.last_cln = save_cln;
1121f5: 89 43 3c mov %eax,0x3c(%ebx)
1121f8: 31 c0 xor %eax,%eax
return rc;
}
1121fa: 8d 65 f4 lea -0xc(%ebp),%esp
1121fd: 5b pop %ebx
1121fe: 5e pop %esi
1121ff: 5f pop %edi
112200: 5d pop %ebp
112201: c3 ret
00111b5a <fat_file_truncate>:
fat_file_truncate(
fat_fs_info_t *fs_info,
fat_file_fd_t *fat_fd,
uint32_t new_length
)
{
111b5a: 55 push %ebp
111b5b: 89 e5 mov %esp,%ebp
111b5d: 57 push %edi
111b5e: 56 push %esi
111b5f: 53 push %ebx
111b60: 83 ec 1c sub $0x1c,%esp
111b63: 8b 7d 08 mov 0x8(%ebp),%edi
111b66: 8b 75 0c mov 0xc(%ebp),%esi
111b69: 8b 55 10 mov 0x10(%ebp),%edx
int rc = RC_OK;
uint32_t cur_cln = 0;
111b6c: c7 45 e0 00 00 00 00 movl $0x0,-0x20(%ebp)
uint32_t cl_start = 0;
uint32_t new_last_cln = FAT_UNDEFINED_VALUE;
111b73: c7 45 e4 ff ff ff ff movl $0xffffffff,-0x1c(%ebp)
if ( new_length >= fat_fd->fat_file_size )
111b7a: 8b 46 18 mov 0x18(%esi),%eax
111b7d: 39 c2 cmp %eax,%edx
111b7f: 72 07 jb 111b88 <fat_file_truncate+0x2e>
return rc;
111b81: 31 c0 xor %eax,%eax
111b83: e9 a8 00 00 00 jmp 111c30 <fat_file_truncate+0xd6>
assert(fat_fd->fat_file_size);
111b88: 85 c0 test %eax,%eax
111b8a: 75 19 jne 111ba5 <fat_file_truncate+0x4b><== ALWAYS TAKEN
111b8c: 68 b8 86 12 00 push $0x1286b8 <== NOT EXECUTED
111b91: 68 18 87 12 00 push $0x128718 <== NOT EXECUTED
111b96: 68 7d 02 00 00 push $0x27d <== NOT EXECUTED
111b9b: 68 ce 86 12 00 push $0x1286ce <== NOT EXECUTED
111ba0: e8 17 1b 00 00 call 1136bc <__assert_func> <== NOT EXECUTED
cl_start = (new_length + fs_info->vol.bpc - 1) >> fs_info->vol.bpc_log2;
111ba5: 0f b6 4f 08 movzbl 0x8(%edi),%ecx
111ba9: 0f b7 5f 06 movzwl 0x6(%edi),%ebx
111bad: 8d 5c 1a ff lea -0x1(%edx,%ebx,1),%ebx
111bb1: d3 eb shr %cl,%ebx
if ((cl_start << fs_info->vol.bpc_log2) >= fat_fd->fat_file_size)
111bb3: 89 da mov %ebx,%edx
111bb5: d3 e2 shl %cl,%edx
111bb7: 39 c2 cmp %eax,%edx
111bb9: 73 c6 jae 111b81 <fat_file_truncate+0x27>
return RC_OK;
if (cl_start != 0)
111bbb: 85 db test %ebx,%ebx
111bbd: 75 1b jne 111bda <fat_file_truncate+0x80>
if (rc != RC_OK)
return rc;
}
rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln);
111bbf: 83 ec 0c sub $0xc,%esp
111bc2: 8d 45 e0 lea -0x20(%ebp),%eax
111bc5: 50 push %eax
111bc6: 89 d9 mov %ebx,%ecx
111bc8: 89 f2 mov %esi,%edx
111bca: 89 f8 mov %edi,%eax
111bcc: e8 48 fc ff ff call 111819 <fat_file_lseek>
if (rc != RC_OK)
111bd1: 83 c4 10 add $0x10,%esp
111bd4: 85 c0 test %eax,%eax
111bd6: 75 58 jne 111c30 <fat_file_truncate+0xd6><== NEVER TAKEN
111bd8: eb 1c jmp 111bf6 <fat_file_truncate+0x9c>
if ((cl_start << fs_info->vol.bpc_log2) >= fat_fd->fat_file_size)
return RC_OK;
if (cl_start != 0)
{
rc = fat_file_lseek(fs_info, fat_fd, cl_start - 1, &new_last_cln);
111bda: 83 ec 0c sub $0xc,%esp
111bdd: 8d 4b ff lea -0x1(%ebx),%ecx
111be0: 8d 45 e4 lea -0x1c(%ebp),%eax
111be3: 50 push %eax
111be4: 89 f2 mov %esi,%edx
111be6: 89 f8 mov %edi,%eax
111be8: e8 2c fc ff ff call 111819 <fat_file_lseek>
if (rc != RC_OK)
111bed: 83 c4 10 add $0x10,%esp
111bf0: 85 c0 test %eax,%eax
111bf2: 74 cb je 111bbf <fat_file_truncate+0x65><== ALWAYS TAKEN
111bf4: eb 3a jmp 111c30 <fat_file_truncate+0xd6><== NOT EXECUTED
rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln);
if (rc != RC_OK)
return rc;
rc = fat_free_fat_clusters_chain(fs_info, cur_cln);
111bf6: 50 push %eax
111bf7: 50 push %eax
111bf8: ff 75 e0 pushl -0x20(%ebp)
111bfb: 57 push %edi
111bfc: e8 61 62 00 00 call 117e62 <fat_free_fat_clusters_chain>
if (rc != RC_OK)
111c01: 83 c4 10 add $0x10,%esp
111c04: 85 c0 test %eax,%eax
111c06: 75 28 jne 111c30 <fat_file_truncate+0xd6><== NEVER TAKEN
return rc;
if (cl_start != 0)
111c08: 85 db test %ebx,%ebx
111c0a: 0f 84 71 ff ff ff je 111b81 <fat_file_truncate+0x27>
{
rc = fat_set_fat_cluster(fs_info, new_last_cln, FAT_GENFAT_EOC);
111c10: 50 push %eax
111c11: 6a ff push $0xffffffff
111c13: ff 75 e4 pushl -0x1c(%ebp)
111c16: 57 push %edi
111c17: e8 2d 60 00 00 call 117c49 <fat_set_fat_cluster>
if ( rc != RC_OK )
111c1c: 83 c4 10 add $0x10,%esp
111c1f: 85 c0 test %eax,%eax
111c21: 75 0d jne 111c30 <fat_file_truncate+0xd6><== NEVER TAKEN
return rc;
fat_fd->map.file_cln = cl_start - 1;
111c23: 4b dec %ebx
111c24: 89 5e 34 mov %ebx,0x34(%esi)
fat_fd->map.disk_cln = new_last_cln;
111c27: 8b 55 e4 mov -0x1c(%ebp),%edx
111c2a: 89 56 38 mov %edx,0x38(%esi)
fat_fd->map.last_cln = new_last_cln;
111c2d: 89 56 3c mov %edx,0x3c(%esi)
}
return RC_OK;
}
111c30: 8d 65 f4 lea -0xc(%ebp),%esp
111c33: 5b pop %ebx
111c34: 5e pop %esi
111c35: 5f pop %edi
111c36: 5d pop %ebp
111c37: c3 ret
00111f82 <fat_file_write>:
fat_file_fd_t *fat_fd,
uint32_t start,
uint32_t count,
const uint8_t *buf
)
{
111f82: 55 push %ebp
111f83: 89 e5 mov %esp,%ebp
111f85: 57 push %edi
111f86: 56 push %esi
111f87: 53 push %ebx
111f88: 83 ec 3c sub $0x3c,%esp
111f8b: 8b 5d 08 mov 0x8(%ebp),%ebx
111f8e: 8b 75 0c mov 0xc(%ebp),%esi
111f91: 8b 7d 10 mov 0x10(%ebp),%edi
111f94: 8b 4d 14 mov 0x14(%ebp),%ecx
int rc = 0;
ssize_t ret = 0;
uint32_t cmpltd = 0;
uint32_t cur_cln = 0;
111f97: c7 45 e0 00 00 00 00 movl $0x0,-0x20(%ebp)
uint32_t cl_start = 0;
uint32_t ofs = 0;
uint32_t save_ofs;
uint32_t sec = 0;
uint32_t byte = 0;
uint32_t c = 0;
111f9e: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
bool zero_fill = start > fat_fd->fat_file_size;
111fa5: 8b 56 18 mov 0x18(%esi),%edx
if ( count == 0 )
return cmpltd;
111fa8: 31 c0 xor %eax,%eax
uint32_t sec = 0;
uint32_t byte = 0;
uint32_t c = 0;
bool zero_fill = start > fat_fd->fat_file_size;
if ( count == 0 )
111faa: 85 c9 test %ecx,%ecx
111fac: 0f 84 8b 01 00 00 je 11213d <fat_file_write+0x1bb> <== NEVER TAKEN
return cmpltd;
if (start >= fat_fd->size_limit)
111fb2: 8b 46 14 mov 0x14(%esi),%eax
111fb5: 39 c7 cmp %eax,%edi
111fb7: 72 10 jb 111fc9 <fat_file_write+0x47> <== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one(EFBIG);
111fb9: e8 52 78 00 00 call 119810 <__errno> <== NOT EXECUTED
111fbe: c7 00 1b 00 00 00 movl $0x1b,(%eax) <== NOT EXECUTED
111fc4: e9 71 01 00 00 jmp 11213a <fat_file_write+0x1b8> <== NOT EXECUTED
111fc9: 29 f8 sub %edi,%eax
111fcb: 89 45 d0 mov %eax,-0x30(%ebp)
111fce: 39 c8 cmp %ecx,%eax
111fd0: 76 03 jbe 111fd5 <fat_file_write+0x53> <== NEVER TAKEN
111fd2: 89 4d d0 mov %ecx,-0x30(%ebp)
if (count > fat_fd->size_limit - start)
count = fat_fd->size_limit - start;
rc = fat_file_extend(fs_info, fat_fd, zero_fill, start + count, &c);
111fd5: 8b 4d d0 mov -0x30(%ebp),%ecx
111fd8: 01 f9 add %edi,%ecx
111fda: 83 ec 0c sub $0xc,%esp
111fdd: 8d 45 e4 lea -0x1c(%ebp),%eax
111fe0: 50 push %eax
111fe1: 51 push %ecx
uint32_t ofs = 0;
uint32_t save_ofs;
uint32_t sec = 0;
uint32_t byte = 0;
uint32_t c = 0;
bool zero_fill = start > fat_fd->fat_file_size;
111fe2: 31 c0 xor %eax,%eax
111fe4: 39 d7 cmp %edx,%edi
111fe6: 0f 97 c0 seta %al
rtems_set_errno_and_return_minus_one(EFBIG);
if (count > fat_fd->size_limit - start)
count = fat_fd->size_limit - start;
rc = fat_file_extend(fs_info, fat_fd, zero_fill, start + count, &c);
111fe9: 50 push %eax
111fea: 56 push %esi
111feb: 53 push %ebx
111fec: 89 4d c0 mov %ecx,-0x40(%ebp)
111fef: e8 70 fd ff ff call 111d64 <fat_file_extend>
if (rc != RC_OK)
111ff4: 83 c4 20 add $0x20,%esp
111ff7: 85 c0 test %eax,%eax
111ff9: 8b 4d c0 mov -0x40(%ebp),%ecx
111ffc: 0f 85 3b 01 00 00 jne 11213d <fat_file_write+0x1bb> <== NEVER TAKEN
/*
* check whether there was enough room on device to locate
* file of 'start + count' bytes
*/
if (c != (start + count))
112002: 8b 45 e4 mov -0x1c(%ebp),%eax
112005: 39 c8 cmp %ecx,%eax
112007: 74 05 je 11200e <fat_file_write+0x8c> <== ALWAYS TAKEN
count = c - start;
112009: 29 f8 sub %edi,%eax <== NOT EXECUTED
11200b: 89 45 d0 mov %eax,-0x30(%ebp) <== NOT EXECUTED
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
11200e: 83 7e 20 01 cmpl $0x1,0x20(%esi)
112012: 75 47 jne 11205b <fat_file_write+0xd9>
112014: 83 7e 24 00 cmpl $0x0,0x24(%esi)
112018: 75 41 jne 11205b <fat_file_write+0xd9> <== NEVER TAKEN
11201a: f6 43 0a 03 testb $0x3,0xa(%ebx)
11201e: 74 3b je 11205b <fat_file_write+0xd9> <== NEVER TAKEN
(fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)))
{
sec = fat_cluster_num_to_sector_num(fs_info, fat_fd->cln);
112020: 8b 56 1c mov 0x1c(%esi),%edx
112023: 89 d8 mov %ebx,%eax
112025: e8 8e f7 ff ff call 1117b8 <fat_cluster_num_to_sector_num>
sec += (start >> fs_info->vol.sec_log2);
byte = start & (fs_info->vol.bps - 1);
ret = _fat_block_write(fs_info, sec, byte, count, buf);
11202a: 83 ec 0c sub $0xc,%esp
11202d: ff 75 18 pushl 0x18(%ebp)
112030: ff 75 d0 pushl -0x30(%ebp)
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
(fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)))
{
sec = fat_cluster_num_to_sector_num(fs_info, fat_fd->cln);
sec += (start >> fs_info->vol.sec_log2);
byte = start & (fs_info->vol.bps - 1);
112033: 0f b7 13 movzwl (%ebx),%edx
112036: 4a dec %edx
112037: 21 fa and %edi,%edx
ret = _fat_block_write(fs_info, sec, byte, count, buf);
112039: 52 push %edx
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
(fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)))
{
sec = fat_cluster_num_to_sector_num(fs_info, fat_fd->cln);
sec += (start >> fs_info->vol.sec_log2);
11203a: 0f b6 4b 02 movzbl 0x2(%ebx),%ecx
11203e: 89 fa mov %edi,%edx
112040: d3 ea shr %cl,%edx
112042: 01 d0 add %edx,%eax
byte = start & (fs_info->vol.bps - 1);
ret = _fat_block_write(fs_info, sec, byte, count, buf);
112044: 50 push %eax
112045: 53 push %ebx
112046: e8 09 05 00 00 call 112554 <_fat_block_write>
if ( ret < 0 )
11204b: 83 c4 20 add $0x20,%esp
11204e: 85 c0 test %eax,%eax
112050: 0f 89 e7 00 00 00 jns 11213d <fat_file_write+0x1bb> <== ALWAYS TAKEN
112056: e9 df 00 00 00 jmp 11213a <fat_file_write+0x1b8> <== NOT EXECUTED
return -1;
return ret;
}
cl_start = start >> fs_info->vol.bpc_log2;
11205b: 0f b6 4b 08 movzbl 0x8(%ebx),%ecx
11205f: 89 f8 mov %edi,%eax
112061: d3 e8 shr %cl,%eax
112063: 89 45 c4 mov %eax,-0x3c(%ebp)
save_ofs = ofs = start & (fs_info->vol.bpc - 1);
112066: 66 8b 4b 06 mov 0x6(%ebx),%cx
11206a: 66 89 4d cc mov %cx,-0x34(%ebp)
rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln);
11206e: 83 ec 0c sub $0xc,%esp
112071: 8d 45 e0 lea -0x20(%ebp),%eax
112074: 89 45 d4 mov %eax,-0x2c(%ebp)
112077: 50 push %eax
112078: 8b 4d c4 mov -0x3c(%ebp),%ecx
11207b: 89 f2 mov %esi,%edx
11207d: 89 d8 mov %ebx,%eax
11207f: e8 95 f7 ff ff call 111819 <fat_file_lseek>
if (rc != RC_OK)
112084: 83 c4 10 add $0x10,%esp
112087: 85 c0 test %eax,%eax
112089: 0f 85 ae 00 00 00 jne 11213d <fat_file_write+0x1bb> <== NEVER TAKEN
return ret;
}
cl_start = start >> fs_info->vol.bpc_log2;
save_ofs = ofs = start & (fs_info->vol.bpc - 1);
11208f: 0f b7 45 cc movzwl -0x34(%ebp),%eax
112093: 48 dec %eax
112094: 21 f8 and %edi,%eax
112096: 89 45 c8 mov %eax,-0x38(%ebp)
112099: 89 c7 mov %eax,%edi
11209b: 31 d2 xor %edx,%edx
11209d: c7 45 cc 00 00 00 00 movl $0x0,-0x34(%ebp)
1120a4: eb 70 jmp 112116 <fat_file_write+0x194>
if (rc != RC_OK)
return rc;
while (count > 0)
{
c = MIN(count, (fs_info->vol.bpc - ofs));
1120a6: 0f b7 4b 06 movzwl 0x6(%ebx),%ecx
1120aa: 29 f9 sub %edi,%ecx
1120ac: 3b 4d d0 cmp -0x30(%ebp),%ecx
1120af: 76 03 jbe 1120b4 <fat_file_write+0x132>
1120b1: 8b 4d d0 mov -0x30(%ebp),%ecx
1120b4: 89 4d e4 mov %ecx,-0x1c(%ebp)
sec = fat_cluster_num_to_sector_num(fs_info, cur_cln);
1120b7: 8b 55 e0 mov -0x20(%ebp),%edx
1120ba: 89 d8 mov %ebx,%eax
1120bc: 89 4d c0 mov %ecx,-0x40(%ebp)
1120bf: e8 f4 f6 ff ff call 1117b8 <fat_cluster_num_to_sector_num>
sec += (ofs >> fs_info->vol.sec_log2);
byte = ofs & (fs_info->vol.bps - 1);
ret = _fat_block_write(fs_info, sec, byte, c, buf + cmpltd);
1120c4: 83 ec 0c sub $0xc,%esp
1120c7: 8b 55 18 mov 0x18(%ebp),%edx
1120ca: 03 55 cc add -0x34(%ebp),%edx
1120cd: 52 push %edx
1120ce: 8b 4d c0 mov -0x40(%ebp),%ecx
1120d1: 51 push %ecx
{
c = MIN(count, (fs_info->vol.bpc - ofs));
sec = fat_cluster_num_to_sector_num(fs_info, cur_cln);
sec += (ofs >> fs_info->vol.sec_log2);
byte = ofs & (fs_info->vol.bps - 1);
1120d2: 0f b7 13 movzwl (%ebx),%edx
1120d5: 4a dec %edx
1120d6: 21 fa and %edi,%edx
ret = _fat_block_write(fs_info, sec, byte, c, buf + cmpltd);
1120d8: 52 push %edx
while (count > 0)
{
c = MIN(count, (fs_info->vol.bpc - ofs));
sec = fat_cluster_num_to_sector_num(fs_info, cur_cln);
sec += (ofs >> fs_info->vol.sec_log2);
1120d9: 0f b6 4b 02 movzbl 0x2(%ebx),%ecx
1120dd: d3 ef shr %cl,%edi
1120df: 01 f8 add %edi,%eax
byte = ofs & (fs_info->vol.bps - 1);
ret = _fat_block_write(fs_info, sec, byte, c, buf + cmpltd);
1120e1: 50 push %eax
1120e2: 53 push %ebx
1120e3: e8 6c 04 00 00 call 112554 <_fat_block_write>
if ( ret < 0 )
1120e8: 83 c4 20 add $0x20,%esp
1120eb: 85 c0 test %eax,%eax
1120ed: 78 4b js 11213a <fat_file_write+0x1b8> <== NEVER TAKEN
return -1;
count -= c;
1120ef: 8b 45 e4 mov -0x1c(%ebp),%eax
1120f2: 29 45 d0 sub %eax,-0x30(%ebp)
cmpltd += c;
1120f5: 01 45 cc add %eax,-0x34(%ebp)
save_cln = cur_cln;
1120f8: 8b 55 e0 mov -0x20(%ebp),%edx
rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln);
1120fb: 50 push %eax
1120fc: 8d 7d e0 lea -0x20(%ebp),%edi
1120ff: 57 push %edi
112100: 52 push %edx
112101: 53 push %ebx
112102: 89 55 c0 mov %edx,-0x40(%ebp)
112105: e8 f6 59 00 00 call 117b00 <fat_get_fat_cluster>
if ( rc != RC_OK )
return rc;
ofs = 0;
11210a: 31 ff xor %edi,%edi
count -= c;
cmpltd += c;
save_cln = cur_cln;
rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln);
if ( rc != RC_OK )
11210c: 83 c4 10 add $0x10,%esp
11210f: 85 c0 test %eax,%eax
112111: 8b 55 c0 mov -0x40(%ebp),%edx
112114: 75 27 jne 11213d <fat_file_write+0x1bb> <== NEVER TAKEN
rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln);
if (rc != RC_OK)
return rc;
while (count > 0)
112116: 83 7d d0 00 cmpl $0x0,-0x30(%ebp)
11211a: 75 8a jne 1120a6 <fat_file_write+0x124>
}
/* update cache */
/* XXX: check this - I'm not sure :( */
fat_fd->map.file_cln = cl_start +
((save_ofs + cmpltd - 1) >> fs_info->vol.bpc_log2);
11211c: 8b 4d cc mov -0x34(%ebp),%ecx
11211f: 8b 7d c8 mov -0x38(%ebp),%edi
112122: 8d 44 39 ff lea -0x1(%ecx,%edi,1),%eax
112126: 0f b6 4b 08 movzbl 0x8(%ebx),%ecx
11212a: d3 e8 shr %cl,%eax
ofs = 0;
}
/* update cache */
/* XXX: check this - I'm not sure :( */
fat_fd->map.file_cln = cl_start +
11212c: 03 45 c4 add -0x3c(%ebp),%eax
11212f: 89 46 34 mov %eax,0x34(%esi)
((save_ofs + cmpltd - 1) >> fs_info->vol.bpc_log2);
fat_fd->map.disk_cln = save_cln;
112132: 89 56 38 mov %edx,0x38(%esi)
return cmpltd;
112135: 8b 45 cc mov -0x34(%ebp),%eax
112138: eb 03 jmp 11213d <fat_file_write+0x1bb>
sec += (ofs >> fs_info->vol.sec_log2);
byte = ofs & (fs_info->vol.bps - 1);
ret = _fat_block_write(fs_info, sec, byte, c, buf + cmpltd);
if ( ret < 0 )
return -1;
11213a: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
fat_fd->map.file_cln = cl_start +
((save_ofs + cmpltd - 1) >> fs_info->vol.bpc_log2);
fat_fd->map.disk_cln = save_cln;
return cmpltd;
}
11213d: 8d 65 f4 lea -0xc(%ebp),%esp
112140: 5b pop %ebx
112141: 5e pop %esi
112142: 5f pop %edi
112143: 5d pop %ebp
112144: c3 ret
00117e62 <fat_free_fat_clusters_chain>:
int
fat_free_fat_clusters_chain(
fat_fs_info_t *fs_info,
uint32_t chain
)
{
117e62: 55 push %ebp
117e63: 89 e5 mov %esp,%ebp
117e65: 57 push %edi
117e66: 56 push %esi
117e67: 53 push %ebx
117e68: 83 ec 2c sub $0x2c,%esp
117e6b: 8b 5d 08 mov 0x8(%ebp),%ebx
int rc = RC_OK, rc1 = RC_OK;
uint32_t cur_cln = chain;
uint32_t next_cln = 0;
117e6e: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
fat_fs_info_t *fs_info,
uint32_t chain
)
{
int rc = RC_OK, rc1 = RC_OK;
uint32_t cur_cln = chain;
117e75: 8b 55 0c mov 0xc(%ebp),%edx
uint32_t next_cln = 0;
uint32_t freed_cls_cnt = 0;
117e78: 31 f6 xor %esi,%esi
fat_free_fat_clusters_chain(
fat_fs_info_t *fs_info,
uint32_t chain
)
{
int rc = RC_OK, rc1 = RC_OK;
117e7a: 31 ff xor %edi,%edi
uint32_t cur_cln = chain;
uint32_t next_cln = 0;
uint32_t freed_cls_cnt = 0;
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
117e7c: eb 53 jmp 117ed1 <fat_free_fat_clusters_chain+0x6f>
{
rc = fat_get_fat_cluster(fs_info, cur_cln, &next_cln);
117e7e: 51 push %ecx
117e7f: 8d 45 e4 lea -0x1c(%ebp),%eax
117e82: 50 push %eax
117e83: 52 push %edx
117e84: 53 push %ebx
117e85: 89 55 d4 mov %edx,-0x2c(%ebp)
117e88: e8 73 fc ff ff call 117b00 <fat_get_fat_cluster>
117e8d: 89 c1 mov %eax,%ecx
if ( rc != RC_OK )
117e8f: 83 c4 10 add $0x10,%esp
117e92: 85 c0 test %eax,%eax
117e94: 8b 55 d4 mov -0x2c(%ebp),%edx
117e97: 74 21 je 117eba <fat_free_fat_clusters_chain+0x58><== ALWAYS TAKEN
{
if(fs_info->vol.free_cls != FAT_UNDEFINED_VALUE)
117e99: 8b 43 40 mov 0x40(%ebx),%eax <== NOT EXECUTED
117e9c: 83 f8 ff cmp $0xffffffff,%eax <== NOT EXECUTED
117e9f: 74 05 je 117ea6 <fat_free_fat_clusters_chain+0x44><== NOT EXECUTED
fs_info->vol.free_cls += freed_cls_cnt;
117ea1: 01 c6 add %eax,%esi <== NOT EXECUTED
117ea3: 89 73 40 mov %esi,0x40(%ebx) <== NOT EXECUTED
fat_buf_release(fs_info);
117ea6: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
117ea9: 53 push %ebx <== NOT EXECUTED
117eaa: 89 4d d4 mov %ecx,-0x2c(%ebp) <== NOT EXECUTED
117ead: e8 07 a5 ff ff call 1123b9 <fat_buf_release> <== NOT EXECUTED
117eb2: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
117eb5: 8b 4d d4 mov -0x2c(%ebp),%ecx <== NOT EXECUTED
117eb8: eb 42 jmp 117efc <fat_free_fat_clusters_chain+0x9a><== NOT EXECUTED
return rc;
}
rc = fat_set_fat_cluster(fs_info, cur_cln, FAT_GENFAT_FREE);
117eba: 50 push %eax
117ebb: 6a 00 push $0x0
117ebd: 52 push %edx
117ebe: 53 push %ebx
117ebf: e8 85 fd ff ff call 117c49 <fat_set_fat_cluster>
if ( rc != RC_OK )
117ec4: 83 c4 10 add $0x10,%esp
117ec7: 85 c0 test %eax,%eax
117ec9: 74 02 je 117ecd <fat_free_fat_clusters_chain+0x6b><== ALWAYS TAKEN
117ecb: 89 c7 mov %eax,%edi <== NOT EXECUTED
rc1 = rc;
freed_cls_cnt++;
117ecd: 46 inc %esi
cur_cln = next_cln;
117ece: 8b 55 e4 mov -0x1c(%ebp),%edx
int rc = RC_OK, rc1 = RC_OK;
uint32_t cur_cln = chain;
uint32_t next_cln = 0;
uint32_t freed_cls_cnt = 0;
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
117ed1: 8b 43 0c mov 0xc(%ebx),%eax
117ed4: 21 d0 and %edx,%eax
117ed6: 3b 43 10 cmp 0x10(%ebx),%eax
117ed9: 72 a3 jb 117e7e <fat_free_fat_clusters_chain+0x1c>
freed_cls_cnt++;
cur_cln = next_cln;
}
fs_info->vol.next_cl = chain;
117edb: 8b 45 0c mov 0xc(%ebp),%eax
117ede: 89 43 44 mov %eax,0x44(%ebx)
if (fs_info->vol.free_cls != FAT_UNDEFINED_VALUE)
117ee1: 8b 43 40 mov 0x40(%ebx),%eax
117ee4: 83 f8 ff cmp $0xffffffff,%eax
117ee7: 74 05 je 117eee <fat_free_fat_clusters_chain+0x8c><== ALWAYS TAKEN
fs_info->vol.free_cls += freed_cls_cnt;
117ee9: 01 c6 add %eax,%esi <== NOT EXECUTED
117eeb: 89 73 40 mov %esi,0x40(%ebx) <== NOT EXECUTED
fat_buf_release(fs_info);
117eee: 83 ec 0c sub $0xc,%esp
117ef1: 53 push %ebx
117ef2: e8 c2 a4 ff ff call 1123b9 <fat_buf_release>
117ef7: 83 c4 10 add $0x10,%esp
117efa: 89 f9 mov %edi,%ecx
if (rc1 != RC_OK)
return rc1;
return RC_OK;
}
117efc: 89 c8 mov %ecx,%eax
117efe: 8d 65 f4 lea -0xc(%ebp),%esp
117f01: 5b pop %ebx
117f02: 5e pop %esi
117f03: 5f pop %edi
117f04: 5d pop %ebp
117f05: c3 ret
00112835 <fat_free_unique_ino>:
void
fat_free_unique_ino(
fat_fs_info_t *fs_info,
uint32_t ino
)
{
112835: 55 push %ebp <== NOT EXECUTED
112836: 89 e5 mov %esp,%ebp <== NOT EXECUTED
112838: 8b 55 08 mov 0x8(%ebp),%edx <== NOT EXECUTED
11283b: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
FAT_SET_UNIQ_INO_FREE((ino - fs_info->uino_base), fs_info->uino);
11283e: 2b 4a 74 sub 0x74(%edx),%ecx <== NOT EXECUTED
112841: 89 c8 mov %ecx,%eax <== NOT EXECUTED
112843: c1 e8 03 shr $0x3,%eax <== NOT EXECUTED
112846: 03 42 68 add 0x68(%edx),%eax <== NOT EXECUTED
112849: 83 e1 07 and $0x7,%ecx <== NOT EXECUTED
11284c: ba 01 00 00 00 mov $0x1,%edx <== NOT EXECUTED
112851: d3 e2 shl %cl,%edx <== NOT EXECUTED
112853: f7 d2 not %edx <== NOT EXECUTED
112855: 20 10 and %dl,(%eax) <== NOT EXECUTED
}
112857: 5d pop %ebp <== NOT EXECUTED
112858: c3 ret <== NOT EXECUTED
00117b00 <fat_get_fat_cluster>:
fat_get_fat_cluster(
fat_fs_info_t *fs_info,
uint32_t cln,
uint32_t *ret_val
)
{
117b00: 55 push %ebp
117b01: 89 e5 mov %esp,%ebp
117b03: 57 push %edi
117b04: 56 push %esi
117b05: 53 push %ebx
117b06: 83 ec 2c sub $0x2c,%esp
117b09: 8b 75 08 mov 0x8(%ebp),%esi
117b0c: 8b 5d 10 mov 0x10(%ebp),%ebx
int rc = RC_OK;
rtems_bdbuf_buffer *block0 = NULL;
117b0f: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
uint32_t sec = 0;
uint32_t ofs = 0;
/* sanity check */
if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) )
117b16: 83 7d 0c 01 cmpl $0x1,0xc(%ebp)
117b1a: 0f 86 0d 01 00 00 jbe 117c2d <fat_get_fat_cluster+0x12d><== NEVER TAKEN
117b20: 8b 46 34 mov 0x34(%esi),%eax
117b23: 40 inc %eax
117b24: 39 45 0c cmp %eax,0xc(%ebp)
117b27: 76 05 jbe 117b2e <fat_get_fat_cluster+0x2e><== ALWAYS TAKEN
117b29: e9 ff 00 00 00 jmp 117c2d <fat_get_fat_cluster+0x12d><== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
117b2e: 8a 56 0a mov 0xa(%esi),%dl
117b31: 88 d0 mov %dl,%al
117b33: 8b 7d 0c mov 0xc(%ebp),%edi
117b36: 24 01 and $0x1,%al
117b38: 74 07 je 117b41 <fat_get_fat_cluster+0x41><== NEVER TAKEN
117b3a: d1 ef shr %edi
117b3c: 03 7d 0c add 0xc(%ebp),%edi
117b3f: eb 0c jmp 117b4d <fat_get_fat_cluster+0x4d>
117b41: f6 c2 02 test $0x2,%dl <== NOT EXECUTED
117b44: 74 04 je 117b4a <fat_get_fat_cluster+0x4a><== NOT EXECUTED
117b46: d1 e7 shl %edi <== NOT EXECUTED
117b48: eb 03 jmp 117b4d <fat_get_fat_cluster+0x4d><== NOT EXECUTED
117b4a: c1 e7 02 shl $0x2,%edi <== NOT EXECUTED
117b4d: 0f b6 4e 02 movzbl 0x2(%esi),%ecx
117b51: d3 ef shr %cl,%edi
117b53: 8b 4e 4c mov 0x4c(%esi),%ecx
117b56: 01 cf add %ecx,%edi
117b58: 89 7d d4 mov %edi,-0x2c(%ebp)
fs_info->vol.afat_loc;
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
117b5b: 8b 7d 0c mov 0xc(%ebp),%edi
117b5e: 84 c0 test %al,%al
117b60: 74 07 je 117b69 <fat_get_fat_cluster+0x69><== NEVER TAKEN
117b62: d1 ef shr %edi
117b64: 03 7d 0c add 0xc(%ebp),%edi
117b67: eb 0c jmp 117b75 <fat_get_fat_cluster+0x75>
117b69: 80 e2 02 and $0x2,%dl <== NOT EXECUTED
117b6c: 74 04 je 117b72 <fat_get_fat_cluster+0x72><== NOT EXECUTED
117b6e: d1 e7 shl %edi <== NOT EXECUTED
117b70: eb 03 jmp 117b75 <fat_get_fat_cluster+0x75><== NOT EXECUTED
117b72: c1 e7 02 shl $0x2,%edi <== NOT EXECUTED
117b75: 8b 0e mov (%esi),%ecx
117b77: 66 89 4d d0 mov %cx,-0x30(%ebp)
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &block0);
117b7b: 8d 45 e4 lea -0x1c(%ebp),%eax
117b7e: 50 push %eax
117b7f: 6a 01 push $0x1
117b81: ff 75 d4 pushl -0x2c(%ebp)
117b84: 56 push %esi
117b85: e8 7a a6 ff ff call 112204 <fat_buf_access>
117b8a: 89 c1 mov %eax,%ecx
if (rc != RC_OK)
117b8c: 83 c4 10 add $0x10,%esp
117b8f: 85 c0 test %eax,%eax
117b91: 0f 85 a8 00 00 00 jne 117c3f <fat_get_fat_cluster+0x13f><== NEVER TAKEN
if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) )
rtems_set_errno_and_return_minus_one(EIO);
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
fs_info->vol.afat_loc;
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
117b97: 0f b7 45 d0 movzwl -0x30(%ebp),%eax
117b9b: 48 dec %eax
117b9c: 21 f8 and %edi,%eax
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &block0);
if (rc != RC_OK)
return rc;
switch ( fs_info->vol.type )
117b9e: 8a 56 0a mov 0xa(%esi),%dl
117ba1: 80 fa 02 cmp $0x2,%dl
117ba4: 74 6e je 117c14 <fat_get_fat_cluster+0x114><== NEVER TAKEN
117ba6: 80 fa 04 cmp $0x4,%dl
117ba9: 74 75 je 117c20 <fat_get_fat_cluster+0x120><== NEVER TAKEN
117bab: fe ca dec %dl
117bad: 75 7e jne 117c2d <fat_get_fat_cluster+0x12d><== NEVER TAKEN
case FAT_FAT12:
/*
* we are enforced in complex computations for FAT12 to escape CPU
* align problems for some architectures
*/
*ret_val = (*((uint8_t *)(block0->buffer + ofs)));
117baf: 8b 55 e4 mov -0x1c(%ebp),%edx
117bb2: 8b 52 1c mov 0x1c(%edx),%edx
117bb5: 0f b6 3c 02 movzbl (%edx,%eax,1),%edi
117bb9: 89 7d d0 mov %edi,-0x30(%ebp)
117bbc: 89 3b mov %edi,(%ebx)
if ( ofs == (fs_info->vol.bps - 1) )
117bbe: 0f b7 3e movzwl (%esi),%edi
117bc1: 4f dec %edi
117bc2: 39 f8 cmp %edi,%eax
117bc4: 75 2e jne 117bf4 <fat_get_fat_cluster+0xf4><== ALWAYS TAKEN
{
rc = fat_buf_access(fs_info, sec + 1, FAT_OP_TYPE_READ,
117bc6: 8d 45 e4 lea -0x1c(%ebp),%eax <== NOT EXECUTED
117bc9: 50 push %eax <== NOT EXECUTED
117bca: 6a 01 push $0x1 <== NOT EXECUTED
117bcc: 8b 7d d4 mov -0x2c(%ebp),%edi <== NOT EXECUTED
117bcf: 47 inc %edi <== NOT EXECUTED
117bd0: 57 push %edi <== NOT EXECUTED
117bd1: 56 push %esi <== NOT EXECUTED
117bd2: 89 4d cc mov %ecx,-0x34(%ebp) <== NOT EXECUTED
117bd5: e8 2a a6 ff ff call 112204 <fat_buf_access> <== NOT EXECUTED
&block0);
if (rc != RC_OK)
117bda: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
117bdd: 85 c0 test %eax,%eax <== NOT EXECUTED
117bdf: 8b 4d cc mov -0x34(%ebp),%ecx <== NOT EXECUTED
117be2: 75 59 jne 117c3d <fat_get_fat_cluster+0x13d><== NOT EXECUTED
return rc;
*ret_val |= (*((uint8_t *)(block0->buffer)))<<8;
117be4: 8b 45 e4 mov -0x1c(%ebp),%eax <== NOT EXECUTED
117be7: 8b 40 1c mov 0x1c(%eax),%eax <== NOT EXECUTED
117bea: 0f b6 00 movzbl (%eax),%eax <== NOT EXECUTED
117bed: c1 e0 08 shl $0x8,%eax <== NOT EXECUTED
117bf0: 09 03 or %eax,(%ebx) <== NOT EXECUTED
117bf2: eb 0d jmp 117c01 <fat_get_fat_cluster+0x101><== NOT EXECUTED
}
else
{
*ret_val |= (*((uint8_t *)(block0->buffer + ofs + 1)))<<8;
117bf4: 0f b6 44 02 01 movzbl 0x1(%edx,%eax,1),%eax
117bf9: c1 e0 08 shl $0x8,%eax
117bfc: 0b 45 d0 or -0x30(%ebp),%eax
117bff: 89 03 mov %eax,(%ebx)
}
if ( FAT_CLUSTER_IS_ODD(cln) )
117c01: f6 45 0c 01 testb $0x1,0xc(%ebp)
117c05: 74 05 je 117c0c <fat_get_fat_cluster+0x10c>
*ret_val = (*ret_val) >> FAT12_SHIFT;
117c07: c1 2b 04 shrl $0x4,(%ebx)
117c0a: eb 33 jmp 117c3f <fat_get_fat_cluster+0x13f>
else
*ret_val = (*ret_val) & FAT_FAT12_MASK;
117c0c: 81 23 ff 0f 00 00 andl $0xfff,(%ebx)
117c12: eb 2b jmp 117c3f <fat_get_fat_cluster+0x13f>
break;
case FAT_FAT16:
*ret_val = *((uint16_t *)(block0->buffer + ofs));
117c14: 8b 55 e4 mov -0x1c(%ebp),%edx <== NOT EXECUTED
117c17: 8b 52 1c mov 0x1c(%edx),%edx <== NOT EXECUTED
117c1a: 0f b7 04 02 movzwl (%edx,%eax,1),%eax <== NOT EXECUTED
117c1e: eb 09 jmp 117c29 <fat_get_fat_cluster+0x129><== NOT EXECUTED
*ret_val = CF_LE_W(*ret_val);
break;
case FAT_FAT32:
*ret_val = *((uint32_t *)(block0->buffer + ofs));
117c20: 8b 55 e4 mov -0x1c(%ebp),%edx <== NOT EXECUTED
117c23: 8b 52 1c mov 0x1c(%edx),%edx <== NOT EXECUTED
117c26: 8b 04 02 mov (%edx,%eax,1),%eax <== NOT EXECUTED
117c29: 89 03 mov %eax,(%ebx) <== NOT EXECUTED
*ret_val = CF_LE_L(*ret_val);
break;
117c2b: eb 12 jmp 117c3f <fat_get_fat_cluster+0x13f><== NOT EXECUTED
default:
rtems_set_errno_and_return_minus_one(EIO);
117c2d: e8 de 1b 00 00 call 119810 <__errno> <== NOT EXECUTED
117c32: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
117c38: 83 c9 ff or $0xffffffff,%ecx <== NOT EXECUTED
117c3b: eb 02 jmp 117c3f <fat_get_fat_cluster+0x13f><== NOT EXECUTED
*ret_val = (*((uint8_t *)(block0->buffer + ofs)));
if ( ofs == (fs_info->vol.bps - 1) )
{
rc = fat_buf_access(fs_info, sec + 1, FAT_OP_TYPE_READ,
&block0);
if (rc != RC_OK)
117c3d: 89 c1 mov %eax,%ecx <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
break;
}
return RC_OK;
}
117c3f: 89 c8 mov %ecx,%eax
117c41: 8d 65 f4 lea -0xc(%ebp),%esp
117c44: 5b pop %ebx
117c45: 5e pop %esi
117c46: 5f pop %edi
117c47: 5d pop %ebp
117c48: c3 ret
0011279b <fat_get_unique_ino>:
* 0 means FAILED !!!
*
*/
uint32_t
fat_get_unique_ino(fat_fs_info_t *fs_info)
{
11279b: 55 push %ebp <== NOT EXECUTED
11279c: 89 e5 mov %esp,%ebp <== NOT EXECUTED
11279e: 57 push %edi <== NOT EXECUTED
11279f: 56 push %esi <== NOT EXECUTED
1127a0: 53 push %ebx <== NOT EXECUTED
1127a1: 83 ec 1c sub $0x1c,%esp <== NOT EXECUTED
1127a4: 8b 5d 08 mov 0x8(%ebp),%ebx <== NOT EXECUTED
uint32_t j = 0;
bool resrc_unsuff = false;
while (!resrc_unsuff)
1127a7: eb 7a jmp 112823 <fat_get_unique_ino+0x88><== NOT EXECUTED
{
for (j = 0; j < fs_info->uino_pool_size; j++)
{
if (!FAT_UNIQ_INO_IS_BUSY(fs_info->index, fs_info->uino))
1127a9: 8b 73 6c mov 0x6c(%ebx),%esi <== NOT EXECUTED
1127ac: 89 f0 mov %esi,%eax <== NOT EXECUTED
1127ae: c1 e8 03 shr $0x3,%eax <== NOT EXECUTED
1127b1: 03 43 68 add 0x68(%ebx),%eax <== NOT EXECUTED
1127b4: 8a 08 mov (%eax),%cl <== NOT EXECUTED
1127b6: 88 4d e3 mov %cl,-0x1d(%ebp) <== NOT EXECUTED
1127b9: 89 f1 mov %esi,%ecx <== NOT EXECUTED
1127bb: 83 e1 07 and $0x7,%ecx <== NOT EXECUTED
1127be: 0f be 7d e3 movsbl -0x1d(%ebp),%edi <== NOT EXECUTED
1127c2: 0f a3 cf bt %ecx,%edi <== NOT EXECUTED
1127c5: 72 14 jb 1127db <fat_get_unique_ino+0x40><== NOT EXECUTED
{
FAT_SET_UNIQ_INO_BUSY(fs_info->index, fs_info->uino);
1127c7: ba 01 00 00 00 mov $0x1,%edx <== NOT EXECUTED
1127cc: d3 e2 shl %cl,%edx <== NOT EXECUTED
1127ce: 0a 55 e3 or -0x1d(%ebp),%dl <== NOT EXECUTED
1127d1: 88 10 mov %dl,(%eax) <== NOT EXECUTED
return (fs_info->uino_base + fs_info->index);
1127d3: 8b 43 6c mov 0x6c(%ebx),%eax <== NOT EXECUTED
1127d6: 03 43 74 add 0x74(%ebx),%eax <== NOT EXECUTED
1127d9: eb 52 jmp 11282d <fat_get_unique_ino+0x92><== NOT EXECUTED
}
fs_info->index++;
1127db: 46 inc %esi <== NOT EXECUTED
if (fs_info->index >= fs_info->uino_pool_size)
1127dc: 3b 75 e4 cmp -0x1c(%ebp),%esi <== NOT EXECUTED
1127df: 73 05 jae 1127e6 <fat_get_unique_ino+0x4b><== NOT EXECUTED
if (!FAT_UNIQ_INO_IS_BUSY(fs_info->index, fs_info->uino))
{
FAT_SET_UNIQ_INO_BUSY(fs_info->index, fs_info->uino);
return (fs_info->uino_base + fs_info->index);
}
fs_info->index++;
1127e1: 89 73 6c mov %esi,0x6c(%ebx) <== NOT EXECUTED
1127e4: eb 07 jmp 1127ed <fat_get_unique_ino+0x52><== NOT EXECUTED
if (fs_info->index >= fs_info->uino_pool_size)
fs_info->index = 0;
1127e6: c7 43 6c 00 00 00 00 movl $0x0,0x6c(%ebx) <== NOT EXECUTED
uint32_t j = 0;
bool resrc_unsuff = false;
while (!resrc_unsuff)
{
for (j = 0; j < fs_info->uino_pool_size; j++)
1127ed: 42 inc %edx <== NOT EXECUTED
1127ee: 3b 55 e4 cmp -0x1c(%ebp),%edx <== NOT EXECUTED
1127f1: 75 b6 jne 1127a9 <fat_get_unique_ino+0xe><== NOT EXECUTED
fs_info->index++;
if (fs_info->index >= fs_info->uino_pool_size)
fs_info->index = 0;
}
if ((fs_info->uino_pool_size << 1) < (0x0FFFFFFF - fs_info->uino_base))
1127f3: d1 e2 shl %edx <== NOT EXECUTED
1127f5: b8 ff ff ff 0f mov $0xfffffff,%eax <== NOT EXECUTED
1127fa: 2b 43 74 sub 0x74(%ebx),%eax <== NOT EXECUTED
1127fd: 39 c2 cmp %eax,%edx <== NOT EXECUTED
1127ff: 72 04 jb 112805 <fat_get_unique_ino+0x6a><== NOT EXECUTED
resrc_unsuff = true;
}
else
resrc_unsuff = true;
}
return 0;
112801: 31 c0 xor %eax,%eax <== NOT EXECUTED
112803: eb 28 jmp 11282d <fat_get_unique_ino+0x92><== NOT EXECUTED
fs_info->index = 0;
}
if ((fs_info->uino_pool_size << 1) < (0x0FFFFFFF - fs_info->uino_base))
{
fs_info->uino_pool_size <<= 1;
112805: 89 53 70 mov %edx,0x70(%ebx) <== NOT EXECUTED
fs_info->uino = realloc(fs_info->uino, fs_info->uino_pool_size);
112808: 51 push %ecx <== NOT EXECUTED
112809: 51 push %ecx <== NOT EXECUTED
11280a: 52 push %edx <== NOT EXECUTED
11280b: ff 73 68 pushl 0x68(%ebx) <== NOT EXECUTED
11280e: e8 c5 59 ff ff call 1081d8 <realloc> <== NOT EXECUTED
112813: 89 43 68 mov %eax,0x68(%ebx) <== NOT EXECUTED
if (fs_info->uino != NULL)
112816: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
112819: 85 c0 test %eax,%eax <== NOT EXECUTED
11281b: 74 e4 je 112801 <fat_get_unique_ino+0x66><== NOT EXECUTED
fs_info->index = fs_info->uino_pool_size;
11281d: 8b 43 70 mov 0x70(%ebx),%eax <== NOT EXECUTED
112820: 89 43 6c mov %eax,0x6c(%ebx) <== NOT EXECUTED
uint32_t j = 0;
bool resrc_unsuff = false;
while (!resrc_unsuff)
{
for (j = 0; j < fs_info->uino_pool_size; j++)
112823: 8b 43 70 mov 0x70(%ebx),%eax <== NOT EXECUTED
112826: 89 45 e4 mov %eax,-0x1c(%ebp) <== NOT EXECUTED
112829: 31 d2 xor %edx,%edx <== NOT EXECUTED
11282b: eb c1 jmp 1127ee <fat_get_unique_ino+0x53><== NOT EXECUTED
}
else
resrc_unsuff = true;
}
return 0;
}
11282d: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
112830: 5b pop %ebx <== NOT EXECUTED
112831: 5e pop %esi <== NOT EXECUTED
112832: 5f pop %edi <== NOT EXECUTED
112833: 5d pop %ebp <== NOT EXECUTED
112834: c3 ret <== NOT EXECUTED
001126fb <fat_init_clusters_chain>:
int
fat_init_clusters_chain(
fat_fs_info_t *fs_info,
uint32_t start_cln
)
{
1126fb: 55 push %ebp
1126fc: 89 e5 mov %esp,%ebp
1126fe: 57 push %edi
1126ff: 56 push %esi
112700: 53 push %ebx
112701: 83 ec 34 sub $0x34,%esp
112704: 8b 5d 08 mov 0x8(%ebp),%ebx
int rc = RC_OK;
ssize_t ret = 0;
uint32_t cur_cln = start_cln;
112707: 8b 45 0c mov 0xc(%ebp),%eax
11270a: 89 45 e4 mov %eax,-0x1c(%ebp)
char *buf;
buf = calloc(fs_info->vol.bpc, sizeof(char));
11270d: 6a 01 push $0x1
11270f: 0f b7 43 06 movzwl 0x6(%ebx),%eax
112713: 50 push %eax
112714: e8 a7 48 ff ff call 106fc0 <calloc>
112719: 89 c6 mov %eax,%esi
if ( buf == NULL )
11271b: 83 c4 10 add $0x10,%esp
{
free(buf);
return -1;
}
rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln);
11271e: 8d 7d e4 lea -0x1c(%ebp),%edi
ssize_t ret = 0;
uint32_t cur_cln = start_cln;
char *buf;
buf = calloc(fs_info->vol.bpc, sizeof(char));
if ( buf == NULL )
112721: 85 c0 test %eax,%eax
112723: 75 53 jne 112778 <fat_init_clusters_chain+0x7d><== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one( EIO );
112725: e8 e6 70 00 00 call 119810 <__errno> <== NOT EXECUTED
11272a: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
112730: eb 1b jmp 11274d <fat_init_clusters_chain+0x52><== NOT EXECUTED
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
{
ret = fat_cluster_write(fs_info, cur_cln, buf);
112732: 52 push %edx
112733: 56 push %esi
112734: 50 push %eax
112735: 53 push %ebx
112736: e8 7b ff ff ff call 1126b6 <fat_cluster_write>
if ( ret == -1 )
11273b: 83 c4 10 add $0x10,%esp
11273e: 40 inc %eax
11273f: 75 11 jne 112752 <fat_init_clusters_chain+0x57><== ALWAYS TAKEN
{
free(buf);
112741: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
112744: 56 push %esi <== NOT EXECUTED
112745: e8 e2 4a ff ff call 10722c <free> <== NOT EXECUTED
11274a: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
return -1;
11274d: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
112750: eb 41 jmp 112793 <fat_init_clusters_chain+0x98><== NOT EXECUTED
}
rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln);
112752: 50 push %eax
112753: 57 push %edi
112754: ff 75 e4 pushl -0x1c(%ebp)
112757: 53 push %ebx
112758: e8 a3 53 00 00 call 117b00 <fat_get_fat_cluster>
if ( rc != RC_OK )
11275d: 83 c4 10 add $0x10,%esp
112760: 85 c0 test %eax,%eax
112762: 74 14 je 112778 <fat_init_clusters_chain+0x7d><== ALWAYS TAKEN
{
free(buf);
112764: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
112767: 56 push %esi <== NOT EXECUTED
112768: 89 45 d4 mov %eax,-0x2c(%ebp) <== NOT EXECUTED
11276b: e8 bc 4a ff ff call 10722c <free> <== NOT EXECUTED
112770: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
112773: 8b 45 d4 mov -0x2c(%ebp),%eax <== NOT EXECUTED
112776: eb 1b jmp 112793 <fat_init_clusters_chain+0x98><== NOT EXECUTED
buf = calloc(fs_info->vol.bpc, sizeof(char));
if ( buf == NULL )
rtems_set_errno_and_return_minus_one( EIO );
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
112778: 8b 45 e4 mov -0x1c(%ebp),%eax
11277b: 8b 53 0c mov 0xc(%ebx),%edx
11277e: 21 c2 and %eax,%edx
112780: 3b 53 10 cmp 0x10(%ebx),%edx
112783: 72 ad jb 112732 <fat_init_clusters_chain+0x37>
free(buf);
return rc;
}
}
free(buf);
112785: 83 ec 0c sub $0xc,%esp
112788: 56 push %esi
112789: e8 9e 4a ff ff call 10722c <free>
11278e: 83 c4 10 add $0x10,%esp
112791: 31 c0 xor %eax,%eax
return rc;
}
112793: 8d 65 f4 lea -0xc(%ebp),%esp
112796: 5b pop %ebx
112797: 5e pop %esi
112798: 5f pop %edi
112799: 5d pop %ebp
11279a: c3 ret
001129c7 <fat_init_volume_info>:
* RC_OK on success, or -1 if error occured
* and errno set appropriately
*/
int
fat_init_volume_info(fat_fs_info_t *fs_info, const char *device)
{
1129c7: 55 push %ebp
1129c8: 89 e5 mov %esp,%ebp
1129ca: 57 push %edi
1129cb: 56 push %esi
1129cc: 53 push %ebx
1129cd: 81 ec 14 01 00 00 sub $0x114,%esp
1129d3: 8b 5d 08 mov 0x8(%ebp),%ebx
char boot_rec[FAT_MAX_BPB_SIZE];
char fs_info_sector[FAT_USEFUL_INFO_SIZE];
ssize_t ret = 0;
struct stat stat_buf;
int i = 0;
rtems_bdbuf_buffer *block = NULL;
1129d6: c7 45 90 00 00 00 00 movl $0x0,-0x70(%ebp)
vol->fd = open(device, O_RDWR);
1129dd: 6a 02 push $0x2
1129df: ff 75 0c pushl 0xc(%ebp)
1129e2: e8 09 56 ff ff call 107ff0 <open>
1129e7: 89 43 54 mov %eax,0x54(%ebx)
if (vol->fd < 0)
1129ea: 83 c4 10 add $0x10,%esp
1129ed: 85 c0 test %eax,%eax
1129ef: 79 10 jns 112a01 <fat_init_volume_info+0x3a><== ALWAYS TAKEN
{
rtems_set_errno_and_return_minus_one(ENXIO);
1129f1: e8 1a 6e 00 00 call 119810 <__errno> <== NOT EXECUTED
1129f6: c7 00 06 00 00 00 movl $0x6,(%eax) <== NOT EXECUTED
1129fc: e9 6a 06 00 00 jmp 11306b <fat_init_volume_info+0x6a4><== NOT EXECUTED
}
rc = fstat(vol->fd, &stat_buf);
112a01: 52 push %edx
112a02: 52 push %edx
112a03: 8d 55 a0 lea -0x60(%ebp),%edx
112a06: 52 push %edx
112a07: 50 push %eax
112a08: e8 93 0e 00 00 call 1138a0 <fstat>
if (rc != 0)
112a0d: 83 c4 10 add $0x10,%esp
112a10: 85 c0 test %eax,%eax
112a12: 74 02 je 112a16 <fat_init_volume_info+0x4f><== ALWAYS TAKEN
112a14: eb 2c jmp 112a42 <fat_init_volume_info+0x7b><== NOT EXECUTED
close(vol->fd);
rtems_set_errno_and_return_minus_one(ENXIO);
}
/* Must be a block device. */
if (!S_ISBLK(stat_buf.st_mode))
112a16: 8b 45 ac mov -0x54(%ebp),%eax
112a19: 25 00 f0 00 00 and $0xf000,%eax
112a1e: 3d 00 60 00 00 cmp $0x6000,%eax
112a23: 74 02 je 112a27 <fat_init_volume_info+0x60><== ALWAYS TAKEN
112a25: eb 1b jmp 112a42 <fat_init_volume_info+0x7b><== NOT EXECUTED
static inline int rtems_disk_fd_get_disk_device(
int fd,
rtems_disk_device **dd_ptr
)
{
return ioctl(fd, RTEMS_BLKIO_GETDISKDEV, dd_ptr);
112a27: 50 push %eax
close(vol->fd);
rtems_set_errno_and_return_minus_one(ENXIO);
}
/* check that device is registred as block device and lock it */
rc = rtems_disk_fd_get_disk_device(vol->fd, &vol->dd);
112a28: 8d 43 58 lea 0x58(%ebx),%eax
112a2b: 50 push %eax
112a2c: 68 09 42 04 40 push $0x40044209
112a31: ff 73 54 pushl 0x54(%ebx)
112a34: e8 3f 49 ff ff call 107378 <ioctl>
112a39: 89 c6 mov %eax,%esi
if (rc != 0) {
112a3b: 83 c4 10 add $0x10,%esp
112a3e: 85 c0 test %eax,%eax
112a40: 74 1b je 112a5d <fat_init_volume_info+0x96><== ALWAYS TAKEN
close(vol->fd);
112a42: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
112a45: ff 73 54 pushl 0x54(%ebx) <== NOT EXECUTED
112a48: e8 af 45 ff ff call 106ffc <close> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENXIO);
112a4d: e8 be 6d 00 00 call 119810 <__errno> <== NOT EXECUTED
112a52: c7 00 06 00 00 00 movl $0x6,(%eax) <== NOT EXECUTED
112a58: e9 0b 06 00 00 jmp 113068 <fat_init_volume_info+0x6a1><== NOT EXECUTED
}
/* Read boot record */
/* FIXME: Asserts FAT_MAX_BPB_SIZE < bdbuf block size */
sc = rtems_bdbuf_read( vol->dd, 0, &block);
112a5d: 50 push %eax
112a5e: 8d 45 90 lea -0x70(%ebp),%eax
112a61: 50 push %eax
112a62: 6a 00 push $0x0
112a64: ff 73 58 pushl 0x58(%ebx)
112a67: e8 a5 e3 ff ff call 110e11 <rtems_bdbuf_read>
if (sc != RTEMS_SUCCESSFUL)
112a6c: 83 c4 10 add $0x10,%esp
112a6f: 85 c0 test %eax,%eax
112a71: 74 05 je 112a78 <fat_init_volume_info+0xb1><== ALWAYS TAKEN
112a73: e9 ec 00 00 00 jmp 112b64 <fat_init_volume_info+0x19d><== NOT EXECUTED
{
close(vol->fd);
rtems_set_errno_and_return_minus_one( EIO);
}
memcpy( boot_rec, block->buffer, FAT_MAX_BPB_SIZE);
112a78: 8b 55 90 mov -0x70(%ebp),%edx
112a7b: 8b 42 1c mov 0x1c(%edx),%eax
112a7e: 8a 48 0b mov 0xb(%eax),%cl
112a81: 88 8d 78 ff ff ff mov %cl,-0x88(%ebp)
112a87: 0f b6 78 0c movzbl 0xc(%eax),%edi
112a8b: 8a 48 0d mov 0xd(%eax),%cl
112a8e: 88 4d 87 mov %cl,-0x79(%ebp)
112a91: 8a 48 0e mov 0xe(%eax),%cl
112a94: 88 8d 07 ff ff ff mov %cl,-0xf9(%ebp)
112a9a: 8a 48 0f mov 0xf(%eax),%cl
112a9d: 88 8d e8 fe ff ff mov %cl,-0x118(%ebp)
112aa3: 8a 48 10 mov 0x10(%eax),%cl
112aa6: 88 4d 85 mov %cl,-0x7b(%ebp)
112aa9: 8a 48 11 mov 0x11(%eax),%cl
112aac: 88 8d 06 ff ff ff mov %cl,-0xfa(%ebp)
112ab2: 8a 48 12 mov 0x12(%eax),%cl
112ab5: 88 8d 18 ff ff ff mov %cl,-0xe8(%ebp)
112abb: 8a 48 13 mov 0x13(%eax),%cl
112abe: 88 8d 7a ff ff ff mov %cl,-0x86(%ebp)
112ac4: 8a 48 14 mov 0x14(%eax),%cl
112ac7: 88 8d 08 ff ff ff mov %cl,-0xf8(%ebp)
112acd: 8a 48 16 mov 0x16(%eax),%cl
112ad0: 88 8d 79 ff ff ff mov %cl,-0x87(%ebp)
112ad6: 8a 48 17 mov 0x17(%eax),%cl
112ad9: 88 8d 28 ff ff ff mov %cl,-0xd8(%ebp)
112adf: 8a 48 20 mov 0x20(%eax),%cl
112ae2: 88 8d 7b ff ff ff mov %cl,-0x85(%ebp)
112ae8: 8a 48 21 mov 0x21(%eax),%cl
112aeb: 88 4d 80 mov %cl,-0x80(%ebp)
112aee: 8a 48 22 mov 0x22(%eax),%cl
112af1: 88 8d 7f ff ff ff mov %cl,-0x81(%ebp)
112af7: 8a 48 23 mov 0x23(%eax),%cl
112afa: 88 8d 38 ff ff ff mov %cl,-0xc8(%ebp)
112b00: 8a 48 24 mov 0x24(%eax),%cl
112b03: 88 8d 7e ff ff ff mov %cl,-0x82(%ebp)
112b09: 8a 48 25 mov 0x25(%eax),%cl
112b0c: 88 8d 7d ff ff ff mov %cl,-0x83(%ebp)
112b12: 8a 48 26 mov 0x26(%eax),%cl
112b15: 88 8d 7c ff ff ff mov %cl,-0x84(%ebp)
112b1b: 8a 48 27 mov 0x27(%eax),%cl
112b1e: 88 8d 68 ff ff ff mov %cl,-0x98(%ebp)
112b24: 8a 48 28 mov 0x28(%eax),%cl
112b27: 88 4d 86 mov %cl,-0x7a(%ebp)
112b2a: 8a 48 2c mov 0x2c(%eax),%cl
112b2d: 88 4d 84 mov %cl,-0x7c(%ebp)
112b30: 8a 48 2d mov 0x2d(%eax),%cl
112b33: 88 4d 83 mov %cl,-0x7d(%ebp)
112b36: 8a 48 2e mov 0x2e(%eax),%cl
112b39: 88 4d 82 mov %cl,-0x7e(%ebp)
112b3c: 8a 48 2f mov 0x2f(%eax),%cl
112b3f: 88 8d 58 ff ff ff mov %cl,-0xa8(%ebp)
112b45: 8a 48 30 mov 0x30(%eax),%cl
112b48: 88 4d 81 mov %cl,-0x7f(%ebp)
112b4b: 8a 40 31 mov 0x31(%eax),%al
112b4e: 88 85 48 ff ff ff mov %al,-0xb8(%ebp)
sc = rtems_bdbuf_release( block);
112b54: 83 ec 0c sub $0xc,%esp
112b57: 52 push %edx
112b58: e8 12 e4 ff ff call 110f6f <rtems_bdbuf_release>
if (sc != RTEMS_SUCCESSFUL)
112b5d: 83 c4 10 add $0x10,%esp
112b60: 85 c0 test %eax,%eax
112b62: 74 1b je 112b7f <fat_init_volume_info+0x1b8><== ALWAYS TAKEN
{
close(vol->fd);
112b64: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
112b67: ff 73 54 pushl 0x54(%ebx) <== NOT EXECUTED
112b6a: e8 8d 44 ff ff call 106ffc <close> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EIO );
112b6f: e8 9c 6c 00 00 call 119810 <__errno> <== NOT EXECUTED
112b74: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
112b7a: e9 e9 04 00 00 jmp 113068 <fat_init_volume_info+0x6a1><== NOT EXECUTED
}
/* Evaluate boot record */
vol->bps = FAT_GET_BR_BYTES_PER_SECTOR(boot_rec);
112b7f: c1 e7 08 shl $0x8,%edi
112b82: 0f b6 85 78 ff ff ff movzbl -0x88(%ebp),%eax
112b89: 09 c7 or %eax,%edi
112b8b: 66 89 3b mov %di,(%ebx)
if ( (vol->bps != 512) &&
112b8e: 66 81 ff 00 04 cmp $0x400,%di
112b93: 74 1a je 112baf <fat_init_volume_info+0x1e8><== NEVER TAKEN
112b95: 66 81 ff 00 02 cmp $0x200,%di
112b9a: 74 13 je 112baf <fat_init_volume_info+0x1e8><== ALWAYS TAKEN
(vol->bps != 1024) &&
112b9c: 66 81 ff 00 08 cmp $0x800,%di <== NOT EXECUTED
112ba1: 74 0c je 112baf <fat_init_volume_info+0x1e8><== NOT EXECUTED
(vol->bps != 2048) &&
112ba3: 66 81 ff 00 10 cmp $0x1000,%di <== NOT EXECUTED
112ba8: 74 05 je 112baf <fat_init_volume_info+0x1e8><== NOT EXECUTED
112baa: e9 3f 02 00 00 jmp 112dee <fat_init_volume_info+0x427><== NOT EXECUTED
{
close(vol->fd);
rtems_set_errno_and_return_minus_one( EINVAL );
}
for (vol->sec_mul = 0, i = (vol->bps >> FAT_SECTOR512_BITS); (i & 1) == 0;
112baf: c6 43 03 00 movb $0x0,0x3(%ebx)
112bb3: 89 f8 mov %edi,%eax
112bb5: 66 c1 e8 09 shr $0x9,%ax
112bb9: 0f b7 c0 movzwl %ax,%eax
112bbc: eb 05 jmp 112bc3 <fat_init_volume_info+0x1fc>
i >>= 1, vol->sec_mul++);
112bbe: d1 f8 sar %eax <== NOT EXECUTED
112bc0: fe 43 03 incb 0x3(%ebx) <== NOT EXECUTED
{
close(vol->fd);
rtems_set_errno_and_return_minus_one( EINVAL );
}
for (vol->sec_mul = 0, i = (vol->bps >> FAT_SECTOR512_BITS); (i & 1) == 0;
112bc3: a8 01 test $0x1,%al
112bc5: 74 f7 je 112bbe <fat_init_volume_info+0x1f7><== NEVER TAKEN
i >>= 1, vol->sec_mul++);
for (vol->sec_log2 = 0, i = vol->bps; (i & 1) == 0;
112bc7: c6 43 02 00 movb $0x0,0x2(%ebx)
112bcb: 0f b7 ff movzwl %di,%edi
112bce: 89 bd 00 ff ff ff mov %edi,-0x100(%ebp)
112bd4: 89 f8 mov %edi,%eax
112bd6: eb 05 jmp 112bdd <fat_init_volume_info+0x216>
i >>= 1, vol->sec_log2++);
112bd8: d1 f8 sar %eax
112bda: fe 43 02 incb 0x2(%ebx)
rtems_set_errno_and_return_minus_one( EINVAL );
}
for (vol->sec_mul = 0, i = (vol->bps >> FAT_SECTOR512_BITS); (i & 1) == 0;
i >>= 1, vol->sec_mul++);
for (vol->sec_log2 = 0, i = vol->bps; (i & 1) == 0;
112bdd: a8 01 test $0x1,%al
112bdf: 74 f7 je 112bd8 <fat_init_volume_info+0x211>
i >>= 1, vol->sec_log2++);
vol->spc = FAT_GET_BR_SECTORS_PER_CLUSTER(boot_rec);
112be1: 8a 45 87 mov -0x79(%ebp),%al
112be4: 88 43 04 mov %al,0x4(%ebx)
/*
* "sectors per cluster" of zero is invalid
* (and would hang the following loop)
*/
if (vol->spc == 0)
112be7: 84 c0 test %al,%al
112be9: 75 05 jne 112bf0 <fat_init_volume_info+0x229><== ALWAYS TAKEN
112beb: e9 fe 01 00 00 jmp 112dee <fat_init_volume_info+0x427><== NOT EXECUTED
{
close(vol->fd);
rtems_set_errno_and_return_minus_one(EINVAL);
}
for (vol->spc_log2 = 0, i = vol->spc; (i & 1) == 0;
112bf0: c6 43 05 00 movb $0x0,0x5(%ebx)
112bf4: 0f b6 45 87 movzbl -0x79(%ebp),%eax
112bf8: eb 05 jmp 112bff <fat_init_volume_info+0x238>
i >>= 1, vol->spc_log2++);
112bfa: d1 f8 sar %eax
112bfc: fe 43 05 incb 0x5(%ebx)
{
close(vol->fd);
rtems_set_errno_and_return_minus_one(EINVAL);
}
for (vol->spc_log2 = 0, i = vol->spc; (i & 1) == 0;
112bff: a8 01 test $0x1,%al
112c01: 74 f7 je 112bfa <fat_init_volume_info+0x233>
i >>= 1, vol->spc_log2++);
/*
* "bytes per cluster" value greater than 32K is invalid
*/
if ((vol->bpc = vol->bps << vol->spc_log2) > MS_BYTES_PER_CLUSTER_LIMIT)
112c03: 0f b6 4b 05 movzbl 0x5(%ebx),%ecx
112c07: 8b 95 00 ff ff ff mov -0x100(%ebp),%edx
112c0d: d3 e2 shl %cl,%edx
112c0f: 89 d1 mov %edx,%ecx
112c11: 66 89 53 06 mov %dx,0x6(%ebx)
112c15: 66 81 fa 00 80 cmp $0x8000,%dx
112c1a: 76 05 jbe 112c21 <fat_init_volume_info+0x25a><== ALWAYS TAKEN
112c1c: e9 cd 01 00 00 jmp 112dee <fat_init_volume_info+0x427><== NOT EXECUTED
{
close(vol->fd);
rtems_set_errno_and_return_minus_one(EINVAL);
}
for (vol->bpc_log2 = 0, i = vol->bpc; (i & 1) == 0;
112c21: c6 43 08 00 movb $0x0,0x8(%ebx)
112c25: 81 e1 ff ff 00 00 and $0xffff,%ecx
112c2b: eb 05 jmp 112c32 <fat_init_volume_info+0x26b>
i >>= 1, vol->bpc_log2++);
112c2d: d1 f9 sar %ecx
112c2f: fe 43 08 incb 0x8(%ebx)
{
close(vol->fd);
rtems_set_errno_and_return_minus_one(EINVAL);
}
for (vol->bpc_log2 = 0, i = vol->bpc; (i & 1) == 0;
112c32: f6 c1 01 test $0x1,%cl
112c35: 74 f6 je 112c2d <fat_init_volume_info+0x266>
i >>= 1, vol->bpc_log2++);
vol->fats = FAT_GET_BR_FAT_NUM(boot_rec);
112c37: 8a 4d 85 mov -0x7b(%ebp),%cl
112c3a: 88 4b 09 mov %cl,0x9(%ebx)
vol->fat_loc = FAT_GET_BR_RESERVED_SECTORS_NUM(boot_rec);
112c3d: 8a 95 e8 fe ff ff mov -0x118(%ebp),%dl
112c43: c1 e2 08 shl $0x8,%edx
112c46: 89 d7 mov %edx,%edi
112c48: 0f b6 85 07 ff ff ff movzbl -0xf9(%ebp),%eax
112c4f: 09 c7 or %eax,%edi
112c51: 66 89 7b 14 mov %di,0x14(%ebx)
vol->rdir_entrs = FAT_GET_BR_FILES_PER_ROOT_DIR(boot_rec);
112c55: 8a 85 18 ff ff ff mov -0xe8(%ebp),%al
112c5b: c1 e0 08 shl $0x8,%eax
112c5e: 0f b6 8d 06 ff ff ff movzbl -0xfa(%ebp),%ecx
112c65: 09 c8 or %ecx,%eax
112c67: 66 89 43 20 mov %ax,0x20(%ebx)
/* calculate the count of sectors occupied by the root directory */
vol->rdir_secs = ((vol->rdir_entrs * FAT_DIRENTRY_SIZE) + (vol->bps - 1)) /
112c6b: 0f b7 c0 movzwl %ax,%eax
112c6e: c1 e0 05 shl $0x5,%eax
112c71: 8b 95 00 ff ff ff mov -0x100(%ebp),%edx
112c77: 8d 44 02 ff lea -0x1(%edx,%eax,1),%eax
112c7b: 99 cltd
112c7c: f7 bd 00 ff ff ff idivl -0x100(%ebp)
112c82: 89 43 24 mov %eax,0x24(%ebx)
vol->bps;
vol->rdir_size = vol->rdir_secs << vol->sec_log2;
112c85: 0f b6 4b 02 movzbl 0x2(%ebx),%ecx
112c89: 89 c2 mov %eax,%edx
112c8b: d3 e2 shl %cl,%edx
112c8d: 89 53 28 mov %edx,0x28(%ebx)
if ( (FAT_GET_BR_SECTORS_PER_FAT(boot_rec)) != 0)
112c90: 8a 8d 28 ff ff ff mov -0xd8(%ebp),%cl
112c96: c1 e1 08 shl $0x8,%ecx
112c99: 0f b6 95 79 ff ff ff movzbl -0x87(%ebp),%edx
112ca0: 66 09 ca or %cx,%dx
112ca3: 74 05 je 112caa <fat_init_volume_info+0x2e3><== NEVER TAKEN
vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT(boot_rec);
112ca5: 0f b7 d2 movzwl %dx,%edx
112ca8: eb 2a jmp 112cd4 <fat_init_volume_info+0x30d>
else
vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT32(boot_rec);
112caa: 0f b6 95 7d ff ff ff movzbl -0x83(%ebp),%edx <== NOT EXECUTED
112cb1: c1 e2 08 shl $0x8,%edx <== NOT EXECUTED
112cb4: 0f b6 8d 7c ff ff ff movzbl -0x84(%ebp),%ecx <== NOT EXECUTED
112cbb: c1 e1 10 shl $0x10,%ecx <== NOT EXECUTED
112cbe: 09 ca or %ecx,%edx <== NOT EXECUTED
112cc0: 0f b6 8d 7e ff ff ff movzbl -0x82(%ebp),%ecx <== NOT EXECUTED
112cc7: 09 ca or %ecx,%edx <== NOT EXECUTED
112cc9: 8a 8d 68 ff ff ff mov -0x98(%ebp),%cl <== NOT EXECUTED
112ccf: c1 e1 18 shl $0x18,%ecx <== NOT EXECUTED
112cd2: 09 ca or %ecx,%edx <== NOT EXECUTED
112cd4: 89 53 18 mov %edx,0x18(%ebx)
vol->data_fsec = vol->fat_loc + vol->fats * vol->fat_length +
112cd7: 0f b7 ff movzwl %di,%edi
112cda: 0f b6 55 85 movzbl -0x7b(%ebp),%edx
112cde: 0f af 53 18 imul 0x18(%ebx),%edx
112ce2: 01 d7 add %edx,%edi
112ce4: 8d 14 38 lea (%eax,%edi,1),%edx
112ce7: 89 53 30 mov %edx,0x30(%ebx)
vol->rdir_secs;
/* for FAT12/16 root dir starts at(sector) */
vol->rdir_loc = vol->fat_loc + vol->fats * vol->fat_length;
112cea: 89 7b 1c mov %edi,0x1c(%ebx)
if ( (FAT_GET_BR_TOTAL_SECTORS_NUM16(boot_rec)) != 0)
112ced: 8a 8d 08 ff ff ff mov -0xf8(%ebp),%cl
112cf3: c1 e1 08 shl $0x8,%ecx
112cf6: 0f b6 85 7a ff ff ff movzbl -0x86(%ebp),%eax
112cfd: 66 09 c8 or %cx,%ax
112d00: 74 08 je 112d0a <fat_init_volume_info+0x343><== NEVER TAKEN
vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM16(boot_rec);
112d02: 0f b7 c0 movzwl %ax,%eax
112d05: 89 43 2c mov %eax,0x2c(%ebx)
112d08: eb 2a jmp 112d34 <fat_init_volume_info+0x36d>
else
vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM32(boot_rec);
112d0a: 0f b6 4d 80 movzbl -0x80(%ebp),%ecx <== NOT EXECUTED
112d0e: c1 e1 08 shl $0x8,%ecx <== NOT EXECUTED
112d11: 0f b6 85 7f ff ff ff movzbl -0x81(%ebp),%eax <== NOT EXECUTED
112d18: c1 e0 10 shl $0x10,%eax <== NOT EXECUTED
112d1b: 09 c1 or %eax,%ecx <== NOT EXECUTED
112d1d: 0f b6 85 7b ff ff ff movzbl -0x85(%ebp),%eax <== NOT EXECUTED
112d24: 09 c1 or %eax,%ecx <== NOT EXECUTED
112d26: 8a 85 38 ff ff ff mov -0xc8(%ebp),%al <== NOT EXECUTED
112d2c: c1 e0 18 shl $0x18,%eax <== NOT EXECUTED
112d2f: 09 c1 or %eax,%ecx <== NOT EXECUTED
112d31: 89 4b 2c mov %ecx,0x2c(%ebx) <== NOT EXECUTED
data_secs = vol->tot_secs - vol->data_fsec;
112d34: 8b 43 2c mov 0x2c(%ebx),%eax
112d37: 29 d0 sub %edx,%eax
vol->data_cls = data_secs / vol->spc;
112d39: 0f b6 4d 87 movzbl -0x79(%ebp),%ecx
112d3d: 31 d2 xor %edx,%edx
112d3f: f7 f1 div %ecx
112d41: 89 43 34 mov %eax,0x34(%ebx)
/* determine FAT type at least */
if ( vol->data_cls < FAT_FAT12_MAX_CLN)
112d44: 3d f4 0f 00 00 cmp $0xff4,%eax
112d49: 77 14 ja 112d5f <fat_init_volume_info+0x398><== NEVER TAKEN
{
vol->type = FAT_FAT12;
112d4b: c6 43 0a 01 movb $0x1,0xa(%ebx)
vol->mask = FAT_FAT12_MASK;
112d4f: c7 43 0c ff 0f 00 00 movl $0xfff,0xc(%ebx)
vol->eoc_val = FAT_FAT12_EOC;
112d56: c7 43 10 f8 0f 00 00 movl $0xff8,0x10(%ebx)
112d5d: eb 2d jmp 112d8c <fat_init_volume_info+0x3c5>
}
else
{
if ( vol->data_cls < FAT_FAT16_MAX_CLN)
112d5f: 3d f4 ff 00 00 cmp $0xfff4,%eax <== NOT EXECUTED
112d64: 77 14 ja 112d7a <fat_init_volume_info+0x3b3><== NOT EXECUTED
{
vol->type = FAT_FAT16;
112d66: c6 43 0a 02 movb $0x2,0xa(%ebx) <== NOT EXECUTED
vol->mask = FAT_FAT16_MASK;
112d6a: c7 43 0c ff ff 00 00 movl $0xffff,0xc(%ebx) <== NOT EXECUTED
vol->eoc_val = FAT_FAT16_EOC;
112d71: c7 43 10 f8 ff 00 00 movl $0xfff8,0x10(%ebx) <== NOT EXECUTED
112d78: eb 12 jmp 112d8c <fat_init_volume_info+0x3c5><== NOT EXECUTED
}
else
{
vol->type = FAT_FAT32;
112d7a: c6 43 0a 04 movb $0x4,0xa(%ebx) <== NOT EXECUTED
vol->mask = FAT_FAT32_MASK;
112d7e: c7 43 0c ff ff ff 0f movl $0xfffffff,0xc(%ebx) <== NOT EXECUTED
vol->eoc_val = FAT_FAT32_EOC;
112d85: c7 43 10 f8 ff ff 0f movl $0xffffff8,0x10(%ebx) <== NOT EXECUTED
}
}
if (vol->type == FAT_FAT32)
112d8c: 80 7b 0a 04 cmpb $0x4,0xa(%ebx)
112d90: 0f 85 6e 01 00 00 jne 112f04 <fat_init_volume_info+0x53d><== ALWAYS TAKEN
{
vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec);
112d96: 0f b6 45 83 movzbl -0x7d(%ebp),%eax <== NOT EXECUTED
112d9a: c1 e0 08 shl $0x8,%eax <== NOT EXECUTED
112d9d: 0f b6 55 82 movzbl -0x7e(%ebp),%edx <== NOT EXECUTED
112da1: c1 e2 10 shl $0x10,%edx <== NOT EXECUTED
112da4: 09 d0 or %edx,%eax <== NOT EXECUTED
112da6: 0f b6 55 84 movzbl -0x7c(%ebp),%edx <== NOT EXECUTED
112daa: 09 d0 or %edx,%eax <== NOT EXECUTED
112dac: 8a 95 58 ff ff ff mov -0xa8(%ebp),%dl <== NOT EXECUTED
112db2: c1 e2 18 shl $0x18,%edx <== NOT EXECUTED
112db5: 09 d0 or %edx,%eax <== NOT EXECUTED
112db7: 89 43 38 mov %eax,0x38(%ebx) <== NOT EXECUTED
vol->mirror = FAT_GET_BR_EXT_FLAGS(boot_rec) & FAT_BR_EXT_FLAGS_MIRROR;
112dba: 8a 45 86 mov -0x7a(%ebp),%al <== NOT EXECUTED
112dbd: 83 e0 80 and $0xffffff80,%eax <== NOT EXECUTED
112dc0: 88 43 48 mov %al,0x48(%ebx) <== NOT EXECUTED
if (vol->mirror)
112dc3: 84 c0 test %al,%al <== NOT EXECUTED
112dc5: 74 0b je 112dd2 <fat_init_volume_info+0x40b><== NOT EXECUTED
vol->afat = FAT_GET_BR_EXT_FLAGS(boot_rec) & FAT_BR_EXT_FLAGS_FAT_NUM;
112dc7: 8a 45 86 mov -0x7a(%ebp),%al <== NOT EXECUTED
112dca: 83 e0 0f and $0xf,%eax <== NOT EXECUTED
112dcd: 88 43 50 mov %al,0x50(%ebx) <== NOT EXECUTED
112dd0: eb 04 jmp 112dd6 <fat_init_volume_info+0x40f><== NOT EXECUTED
else
vol->afat = 0;
112dd2: c6 43 50 00 movb $0x0,0x50(%ebx) <== NOT EXECUTED
vol->info_sec = FAT_GET_BR_FAT32_FS_INFO_SECTOR(boot_rec);
112dd6: 8a 85 48 ff ff ff mov -0xb8(%ebp),%al <== NOT EXECUTED
112ddc: c1 e0 08 shl $0x8,%eax <== NOT EXECUTED
112ddf: 0f b6 55 81 movzbl -0x7f(%ebp),%edx <== NOT EXECUTED
112de3: 09 d0 or %edx,%eax <== NOT EXECUTED
112de5: 66 89 43 3c mov %ax,0x3c(%ebx) <== NOT EXECUTED
if( vol->info_sec == 0 )
112de9: 66 85 c0 test %ax,%ax <== NOT EXECUTED
112dec: 75 05 jne 112df3 <fat_init_volume_info+0x42c><== NOT EXECUTED
{
close(vol->fd);
112dee: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
112df1: eb 51 jmp 112e44 <fat_init_volume_info+0x47d><== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
}
else
{
ret = _fat_block_read(fs_info, vol->info_sec , 0,
112df3: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
FAT_FSI_LEADSIG_SIZE, fs_info_sector);
112df6: 8d 7d 94 lea -0x6c(%ebp),%edi <== NOT EXECUTED
close(vol->fd);
rtems_set_errno_and_return_minus_one( EINVAL );
}
else
{
ret = _fat_block_read(fs_info, vol->info_sec , 0,
112df9: 57 push %edi <== NOT EXECUTED
112dfa: 6a 04 push $0x4 <== NOT EXECUTED
112dfc: 6a 00 push $0x0 <== NOT EXECUTED
112dfe: 0f b7 c0 movzwl %ax,%eax <== NOT EXECUTED
112e01: 50 push %eax <== NOT EXECUTED
112e02: 53 push %ebx <== NOT EXECUTED
112e03: e8 d7 f6 ff ff call 1124df <_fat_block_read> <== NOT EXECUTED
FAT_FSI_LEADSIG_SIZE, fs_info_sector);
if ( ret < 0 )
112e08: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
112e0b: 85 c0 test %eax,%eax <== NOT EXECUTED
112e0d: 79 05 jns 112e14 <fat_init_volume_info+0x44d><== NOT EXECUTED
{
close(vol->fd);
112e0f: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
112e12: eb 6f jmp 112e83 <fat_init_volume_info+0x4bc><== NOT EXECUTED
return -1;
}
if (FAT_GET_FSINFO_LEAD_SIGNATURE(fs_info_sector) !=
112e14: 0f b6 45 95 movzbl -0x6b(%ebp),%eax <== NOT EXECUTED
112e18: c1 e0 08 shl $0x8,%eax <== NOT EXECUTED
112e1b: 0f b6 55 96 movzbl -0x6a(%ebp),%edx <== NOT EXECUTED
112e1f: c1 e2 10 shl $0x10,%edx <== NOT EXECUTED
112e22: 09 d0 or %edx,%eax <== NOT EXECUTED
112e24: 0f b6 55 94 movzbl -0x6c(%ebp),%edx <== NOT EXECUTED
112e28: 09 d0 or %edx,%eax <== NOT EXECUTED
112e2a: 0f b6 55 97 movzbl -0x69(%ebp),%edx <== NOT EXECUTED
112e2e: c1 e2 18 shl $0x18,%edx <== NOT EXECUTED
112e31: 09 d0 or %edx,%eax <== NOT EXECUTED
112e33: 3d 52 52 61 41 cmp $0x41615252,%eax <== NOT EXECUTED
112e38: 74 22 je 112e5c <fat_init_volume_info+0x495><== NOT EXECUTED
FAT_FSINFO_LEAD_SIGNATURE_VALUE)
{
_fat_block_release(fs_info);
112e3a: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
112e3d: 53 push %ebx <== NOT EXECUTED
112e3e: e8 25 f8 ff ff call 112668 <_fat_block_release> <== NOT EXECUTED
close(vol->fd);
112e43: 58 pop %eax <== NOT EXECUTED
112e44: ff 73 54 pushl 0x54(%ebx) <== NOT EXECUTED
112e47: e8 b0 41 ff ff call 106ffc <close> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
112e4c: e8 bf 69 00 00 call 119810 <__errno> <== NOT EXECUTED
112e51: c7 00 16 00 00 00 movl $0x16,(%eax) <== NOT EXECUTED
112e57: e9 0c 02 00 00 jmp 113068 <fat_init_volume_info+0x6a1><== NOT EXECUTED
}
else
{
ret = _fat_block_read(fs_info, vol->info_sec , FAT_FSI_INFO,
112e5c: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
112e5f: 57 push %edi <== NOT EXECUTED
112e60: 6a 0c push $0xc <== NOT EXECUTED
112e62: 68 e4 01 00 00 push $0x1e4 <== NOT EXECUTED
112e67: 0f b7 43 3c movzwl 0x3c(%ebx),%eax <== NOT EXECUTED
112e6b: 50 push %eax <== NOT EXECUTED
112e6c: 53 push %ebx <== NOT EXECUTED
112e6d: e8 6d f6 ff ff call 1124df <_fat_block_read> <== NOT EXECUTED
FAT_USEFUL_INFO_SIZE, fs_info_sector);
if ( ret < 0 )
112e72: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
112e75: 85 c0 test %eax,%eax <== NOT EXECUTED
112e77: 79 17 jns 112e90 <fat_init_volume_info+0x4c9><== NOT EXECUTED
{
_fat_block_release(fs_info);
112e79: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
112e7c: 53 push %ebx <== NOT EXECUTED
112e7d: e8 e6 f7 ff ff call 112668 <_fat_block_release> <== NOT EXECUTED
close(vol->fd);
112e82: 58 pop %eax <== NOT EXECUTED
112e83: ff 73 54 pushl 0x54(%ebx) <== NOT EXECUTED
112e86: e8 71 41 ff ff call 106ffc <close> <== NOT EXECUTED
112e8b: e9 d8 01 00 00 jmp 113068 <fat_init_volume_info+0x6a1><== NOT EXECUTED
return -1;
}
vol->free_cls = FAT_GET_FSINFO_FREE_CLUSTER_COUNT(fs_info_sector);
112e90: 0f b6 45 99 movzbl -0x67(%ebp),%eax <== NOT EXECUTED
112e94: c1 e0 08 shl $0x8,%eax <== NOT EXECUTED
112e97: 0f b6 55 9a movzbl -0x66(%ebp),%edx <== NOT EXECUTED
112e9b: c1 e2 10 shl $0x10,%edx <== NOT EXECUTED
112e9e: 09 d0 or %edx,%eax <== NOT EXECUTED
112ea0: 0f b6 55 98 movzbl -0x68(%ebp),%edx <== NOT EXECUTED
112ea4: 09 d0 or %edx,%eax <== NOT EXECUTED
112ea6: 0f b6 55 9b movzbl -0x65(%ebp),%edx <== NOT EXECUTED
112eaa: c1 e2 18 shl $0x18,%edx <== NOT EXECUTED
112ead: 09 d0 or %edx,%eax <== NOT EXECUTED
112eaf: 89 43 40 mov %eax,0x40(%ebx) <== NOT EXECUTED
vol->next_cl = FAT_GET_FSINFO_NEXT_FREE_CLUSTER(fs_info_sector);
112eb2: 0f b6 45 9d movzbl -0x63(%ebp),%eax <== NOT EXECUTED
112eb6: c1 e0 08 shl $0x8,%eax <== NOT EXECUTED
112eb9: 0f b6 55 9e movzbl -0x62(%ebp),%edx <== NOT EXECUTED
112ebd: c1 e2 10 shl $0x10,%edx <== NOT EXECUTED
112ec0: 09 d0 or %edx,%eax <== NOT EXECUTED
112ec2: 0f b6 55 9c movzbl -0x64(%ebp),%edx <== NOT EXECUTED
112ec6: 09 d0 or %edx,%eax <== NOT EXECUTED
112ec8: 0f b6 55 9f movzbl -0x61(%ebp),%edx <== NOT EXECUTED
112ecc: c1 e2 18 shl $0x18,%edx <== NOT EXECUTED
112ecf: 09 d0 or %edx,%eax <== NOT EXECUTED
112ed1: 89 43 44 mov %eax,0x44(%ebx) <== NOT EXECUTED
rc = fat_fat32_update_fsinfo_sector(fs_info, 0xFFFFFFFF,
112ed4: 57 push %edi <== NOT EXECUTED
112ed5: 6a ff push $0xffffffff <== NOT EXECUTED
112ed7: 6a ff push $0xffffffff <== NOT EXECUTED
112ed9: 53 push %ebx <== NOT EXECUTED
112eda: e8 8b f9 ff ff call 11286a <fat_fat32_update_fsinfo_sector><== NOT EXECUTED
112edf: 89 c7 mov %eax,%edi <== NOT EXECUTED
0xFFFFFFFF);
if ( rc != RC_OK )
112ee1: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
112ee4: 85 c0 test %eax,%eax <== NOT EXECUTED
112ee6: 74 39 je 112f21 <fat_init_volume_info+0x55a><== NOT EXECUTED
{
_fat_block_release(fs_info);
112ee8: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
112eeb: 53 push %ebx <== NOT EXECUTED
112eec: e8 77 f7 ff ff call 112668 <_fat_block_release> <== NOT EXECUTED
close(vol->fd);
112ef1: 59 pop %ecx <== NOT EXECUTED
112ef2: ff 73 54 pushl 0x54(%ebx) <== NOT EXECUTED
112ef5: e8 02 41 ff ff call 106ffc <close> <== NOT EXECUTED
112efa: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
112efd: 89 fe mov %edi,%esi <== NOT EXECUTED
112eff: e9 6a 01 00 00 jmp 11306e <fat_init_volume_info+0x6a7><== NOT EXECUTED
}
}
}
else
{
vol->rdir_cl = 0;
112f04: c7 43 38 00 00 00 00 movl $0x0,0x38(%ebx)
vol->mirror = 0;
112f0b: c6 43 48 00 movb $0x0,0x48(%ebx)
vol->afat = 0;
112f0f: c6 43 50 00 movb $0x0,0x50(%ebx)
vol->free_cls = 0xFFFFFFFF;
112f13: c7 43 40 ff ff ff ff movl $0xffffffff,0x40(%ebx)
vol->next_cl = 0xFFFFFFFF;
112f1a: c7 43 44 ff ff ff ff movl $0xffffffff,0x44(%ebx)
}
_fat_block_release(fs_info);
112f21: 83 ec 0c sub $0xc,%esp
112f24: 53 push %ebx
112f25: e8 3e f7 ff ff call 112668 <_fat_block_release>
vol->afat_loc = vol->fat_loc + vol->fat_length * vol->afat;
112f2a: 0f b6 43 50 movzbl 0x50(%ebx),%eax
112f2e: 0f af 43 18 imul 0x18(%ebx),%eax
112f32: 0f b7 53 14 movzwl 0x14(%ebx),%edx
112f36: 01 d0 add %edx,%eax
112f38: 89 43 4c mov %eax,0x4c(%ebx)
/* set up collection of fat-files fd */
fs_info->vhash = calloc(FAT_HASH_SIZE, sizeof(rtems_chain_control));
112f3b: 58 pop %eax
112f3c: 5a pop %edx
112f3d: 6a 0c push $0xc
112f3f: 6a 02 push $0x2
112f41: e8 7a 40 ff ff call 106fc0 <calloc>
112f46: 89 43 60 mov %eax,0x60(%ebx)
if ( fs_info->vhash == NULL )
112f49: 83 c4 10 add $0x10,%esp
112f4c: 85 c0 test %eax,%eax
112f4e: 74 39 je 112f89 <fat_init_volume_info+0x5c2><== NEVER TAKEN
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
112f50: 8d 50 04 lea 0x4(%eax),%edx
112f53: 89 10 mov %edx,(%eax)
head->next = tail;
head->previous = NULL;
112f55: c7 40 04 00 00 00 00 movl $0x0,0x4(%eax)
tail->previous = head;
112f5c: 89 40 08 mov %eax,0x8(%eax)
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
112f5f: 8d 50 0c lea 0xc(%eax),%edx
112f62: 8d 48 10 lea 0x10(%eax),%ecx
112f65: 89 48 0c mov %ecx,0xc(%eax)
head->next = tail;
head->previous = NULL;
112f68: c7 40 10 00 00 00 00 movl $0x0,0x10(%eax)
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
112f6f: 89 50 14 mov %edx,0x14(%eax)
}
for (i = 0; i < FAT_HASH_SIZE; i++)
rtems_chain_initialize_empty(fs_info->vhash + i);
fs_info->rhash = calloc(FAT_HASH_SIZE, sizeof(rtems_chain_control));
112f72: 50 push %eax
112f73: 50 push %eax
112f74: 6a 0c push $0xc
112f76: 6a 02 push $0x2
112f78: e8 43 40 ff ff call 106fc0 <calloc>
112f7d: 89 43 64 mov %eax,0x64(%ebx)
if ( fs_info->rhash == NULL )
112f80: 83 c4 10 add $0x10,%esp
112f83: 85 c0 test %eax,%eax
112f85: 75 12 jne 112f99 <fat_init_volume_info+0x5d2><== ALWAYS TAKEN
112f87: eb 69 jmp 112ff2 <fat_init_volume_info+0x62b><== NOT EXECUTED
/* set up collection of fat-files fd */
fs_info->vhash = calloc(FAT_HASH_SIZE, sizeof(rtems_chain_control));
if ( fs_info->vhash == NULL )
{
close(vol->fd);
112f89: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
112f8c: ff 73 54 pushl 0x54(%ebx) <== NOT EXECUTED
112f8f: e8 68 40 ff ff call 106ffc <close> <== NOT EXECUTED
112f94: e9 c4 00 00 00 jmp 11305d <fat_init_volume_info+0x696><== NOT EXECUTED
Chain_Node *tail = _Chain_Tail( the_chain );
112f99: 8d 50 04 lea 0x4(%eax),%edx
112f9c: 89 10 mov %edx,(%eax)
head->next = tail;
head->previous = NULL;
112f9e: c7 40 04 00 00 00 00 movl $0x0,0x4(%eax)
tail->previous = head;
112fa5: 89 40 08 mov %eax,0x8(%eax)
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
112fa8: 8d 50 0c lea 0xc(%eax),%edx
112fab: 8d 48 10 lea 0x10(%eax),%ecx
112fae: 89 48 0c mov %ecx,0xc(%eax)
head->next = tail;
head->previous = NULL;
112fb1: c7 40 10 00 00 00 00 movl $0x0,0x10(%eax)
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
112fb8: 89 50 14 mov %edx,0x14(%eax)
rtems_set_errno_and_return_minus_one( ENOMEM );
}
for (i = 0; i < FAT_HASH_SIZE; i++)
rtems_chain_initialize_empty(fs_info->rhash + i);
fs_info->uino_pool_size = FAT_UINO_POOL_INIT_SIZE;
112fbb: c7 43 70 00 01 00 00 movl $0x100,0x70(%ebx)
fs_info->uino_base = (vol->tot_secs << vol->sec_mul) << 4;
112fc2: 0f b6 4b 03 movzbl 0x3(%ebx),%ecx
112fc6: 8b 43 2c mov 0x2c(%ebx),%eax
112fc9: d3 e0 shl %cl,%eax
112fcb: c1 e0 04 shl $0x4,%eax
112fce: 89 43 74 mov %eax,0x74(%ebx)
fs_info->index = 0;
112fd1: c7 43 6c 00 00 00 00 movl $0x0,0x6c(%ebx)
fs_info->uino = (char *)calloc(fs_info->uino_pool_size, sizeof(char));
112fd8: 50 push %eax
112fd9: 50 push %eax
112fda: 6a 01 push $0x1
112fdc: 68 00 01 00 00 push $0x100
112fe1: e8 da 3f ff ff call 106fc0 <calloc>
112fe6: 89 43 68 mov %eax,0x68(%ebx)
if ( fs_info->uino == NULL )
112fe9: 83 c4 10 add $0x10,%esp
112fec: 85 c0 test %eax,%eax
112fee: 75 2d jne 11301d <fat_init_volume_info+0x656><== ALWAYS TAKEN
112ff0: eb 11 jmp 113003 <fat_init_volume_info+0x63c><== NOT EXECUTED
rtems_chain_initialize_empty(fs_info->vhash + i);
fs_info->rhash = calloc(FAT_HASH_SIZE, sizeof(rtems_chain_control));
if ( fs_info->rhash == NULL )
{
close(vol->fd);
112ff2: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
112ff5: ff 73 54 pushl 0x54(%ebx) <== NOT EXECUTED
112ff8: e8 ff 3f ff ff call 106ffc <close> <== NOT EXECUTED
free(fs_info->vhash);
112ffd: 58 pop %eax <== NOT EXECUTED
112ffe: ff 73 60 pushl 0x60(%ebx) <== NOT EXECUTED
113001: eb 55 jmp 113058 <fat_init_volume_info+0x691><== NOT EXECUTED
fs_info->uino_base = (vol->tot_secs << vol->sec_mul) << 4;
fs_info->index = 0;
fs_info->uino = (char *)calloc(fs_info->uino_pool_size, sizeof(char));
if ( fs_info->uino == NULL )
{
close(vol->fd);
113003: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
113006: ff 73 54 pushl 0x54(%ebx) <== NOT EXECUTED
113009: e8 ee 3f ff ff call 106ffc <close> <== NOT EXECUTED
free(fs_info->vhash);
11300e: 58 pop %eax <== NOT EXECUTED
11300f: ff 73 60 pushl 0x60(%ebx) <== NOT EXECUTED
113012: e8 15 42 ff ff call 10722c <free> <== NOT EXECUTED
free(fs_info->rhash);
113017: 58 pop %eax <== NOT EXECUTED
113018: ff 73 64 pushl 0x64(%ebx) <== NOT EXECUTED
11301b: eb 3b jmp 113058 <fat_init_volume_info+0x691><== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
}
fs_info->sec_buf = (uint8_t *)calloc(vol->bps, sizeof(uint8_t));
11301d: 57 push %edi
11301e: 57 push %edi
11301f: 6a 01 push $0x1
113021: 0f b7 03 movzwl (%ebx),%eax
113024: 50 push %eax
113025: e8 96 3f ff ff call 106fc0 <calloc>
11302a: 89 83 84 00 00 00 mov %eax,0x84(%ebx)
if (fs_info->sec_buf == NULL)
113030: 83 c4 10 add $0x10,%esp
113033: 85 c0 test %eax,%eax
113035: 75 37 jne 11306e <fat_init_volume_info+0x6a7><== ALWAYS TAKEN
{
close(vol->fd);
113037: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11303a: ff 73 54 pushl 0x54(%ebx) <== NOT EXECUTED
11303d: e8 ba 3f ff ff call 106ffc <close> <== NOT EXECUTED
free(fs_info->vhash);
113042: 58 pop %eax <== NOT EXECUTED
113043: ff 73 60 pushl 0x60(%ebx) <== NOT EXECUTED
113046: e8 e1 41 ff ff call 10722c <free> <== NOT EXECUTED
free(fs_info->rhash);
11304b: 5a pop %edx <== NOT EXECUTED
11304c: ff 73 64 pushl 0x64(%ebx) <== NOT EXECUTED
11304f: e8 d8 41 ff ff call 10722c <free> <== NOT EXECUTED
free(fs_info->uino);
113054: 59 pop %ecx <== NOT EXECUTED
113055: ff 73 68 pushl 0x68(%ebx) <== NOT EXECUTED
113058: e8 cf 41 ff ff call 10722c <free> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
11305d: e8 ae 67 00 00 call 119810 <__errno> <== NOT EXECUTED
113062: c7 00 0c 00 00 00 movl $0xc,(%eax) <== NOT EXECUTED
113068: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11306b: 83 ce ff or $0xffffffff,%esi <== NOT EXECUTED
}
return RC_OK;
}
11306e: 89 f0 mov %esi,%eax
113070: 8d 65 f4 lea -0xc(%ebp),%esp
113073: 5b pop %ebx
113074: 5e pop %esi
113075: 5f pop %edi
113076: 5d pop %ebp
113077: c3 ret
00117f06 <fat_scan_fat_for_free_clusters>:
uint32_t count,
uint32_t *cls_added,
uint32_t *last_cl,
bool zero_fill
)
{
117f06: 55 push %ebp
117f07: 89 e5 mov %esp,%ebp
117f09: 57 push %edi
117f0a: 56 push %esi
117f0b: 53 push %ebx
117f0c: 83 ec 3c sub $0x3c,%esp
117f0f: 8b 5d 08 mov 0x8(%ebp),%ebx
117f12: 8a 55 1c mov 0x1c(%ebp),%dl
117f15: 88 55 cf mov %dl,-0x31(%ebp)
int rc = RC_OK;
uint32_t cl4find = 2;
uint32_t next_cln = 0;
117f18: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
uint32_t save_cln = 0;
uint32_t data_cls_val = fs_info->vol.data_cls + 2;
117f1f: 8b 43 34 mov 0x34(%ebx),%eax
uint32_t i = 2;
*cls_added = 0;
117f22: 8b 55 14 mov 0x14(%ebp),%edx
117f25: c7 02 00 00 00 00 movl $0x0,(%edx)
if (count == 0)
return rc;
117f2b: 31 ff xor %edi,%edi
uint32_t data_cls_val = fs_info->vol.data_cls + 2;
uint32_t i = 2;
*cls_added = 0;
if (count == 0)
117f2d: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
117f31: 0f 84 bd 01 00 00 je 1180f4 <fat_scan_fat_for_free_clusters+0x1ee><== NEVER TAKEN
return rc;
if (fs_info->vol.next_cl != FAT_UNDEFINED_VALUE)
117f37: 8b 73 44 mov 0x44(%ebx),%esi
117f3a: 83 fe ff cmp $0xffffffff,%esi
117f3d: 75 05 jne 117f44 <fat_scan_fat_for_free_clusters+0x3e>
uint32_t *last_cl,
bool zero_fill
)
{
int rc = RC_OK;
uint32_t cl4find = 2;
117f3f: be 02 00 00 00 mov $0x2,%esi
uint32_t next_cln = 0;
uint32_t save_cln = 0;
uint32_t data_cls_val = fs_info->vol.data_cls + 2;
117f44: 83 c0 02 add $0x2,%eax
117f47: 89 45 d0 mov %eax,-0x30(%ebp)
117f4a: c7 45 d4 02 00 00 00 movl $0x2,-0x2c(%ebp)
117f51: 31 d2 xor %edx,%edx
117f53: e9 38 01 00 00 jmp 118090 <fat_scan_fat_for_free_clusters+0x18a>
* starting at cluster 2, so the maximum valid cluster number is
* (fs_info->vol.data_cls + 1)
*/
while (i < data_cls_val)
{
rc = fat_get_fat_cluster(fs_info, cl4find, &next_cln);
117f58: 50 push %eax
117f59: 8d 4d e4 lea -0x1c(%ebp),%ecx
117f5c: 51 push %ecx
117f5d: 56 push %esi
117f5e: 53 push %ebx
117f5f: 89 55 c4 mov %edx,-0x3c(%ebp)
117f62: e8 99 fb ff ff call 117b00 <fat_get_fat_cluster>
117f67: 89 c7 mov %eax,%edi
if ( rc != RC_OK )
117f69: 83 c4 10 add $0x10,%esp
117f6c: 85 c0 test %eax,%eax
117f6e: 8b 55 c4 mov -0x3c(%ebp),%edx
117f71: 74 1e je 117f91 <fat_scan_fat_for_free_clusters+0x8b><== ALWAYS TAKEN
{
if (*cls_added != 0)
117f73: 8b 55 14 mov 0x14(%ebp),%edx <== NOT EXECUTED
117f76: 83 3a 00 cmpl $0x0,(%edx) <== NOT EXECUTED
117f79: 0f 84 75 01 00 00 je 1180f4 <fat_scan_fat_for_free_clusters+0x1ee><== NOT EXECUTED
fat_free_fat_clusters_chain(fs_info, (*chain));
117f7f: 50 push %eax <== NOT EXECUTED
117f80: 50 push %eax <== NOT EXECUTED
117f81: 8b 55 0c mov 0xc(%ebp),%edx <== NOT EXECUTED
117f84: ff 32 pushl (%edx) <== NOT EXECUTED
117f86: 53 push %ebx <== NOT EXECUTED
117f87: e8 d6 fe ff ff call 117e62 <fat_free_fat_clusters_chain><== NOT EXECUTED
117f8c: e9 ec 00 00 00 jmp 11807d <fat_scan_fat_for_free_clusters+0x177><== NOT EXECUTED
return rc;
}
if (next_cln == FAT_GENFAT_FREE)
117f91: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp)
117f95: 0f 85 e7 00 00 00 jne 118082 <fat_scan_fat_for_free_clusters+0x17c>
/*
* We are enforced to process allocation of the first free cluster
* by separate 'if' statement because otherwise undo function
* wouldn't work properly
*/
if (*cls_added == 0)
117f9b: 8b 4d 14 mov 0x14(%ebp),%ecx
117f9e: 83 39 00 cmpl $0x0,(%ecx)
117fa1: 75 22 jne 117fc5 <fat_scan_fat_for_free_clusters+0xbf>
{
*chain = cl4find;
117fa3: 8b 55 0c mov 0xc(%ebp),%edx
117fa6: 89 32 mov %esi,(%edx)
rc = fat_set_fat_cluster(fs_info, cl4find, FAT_GENFAT_EOC);
117fa8: 50 push %eax
117fa9: 6a ff push $0xffffffff
117fab: 56 push %esi
117fac: 53 push %ebx
117fad: e8 97 fc ff ff call 117c49 <fat_set_fat_cluster>
if ( rc != RC_OK )
117fb2: 83 c4 10 add $0x10,%esp
117fb5: 85 c0 test %eax,%eax
117fb7: 0f 85 35 01 00 00 jne 1180f2 <fat_scan_fat_for_free_clusters+0x1ec><== NEVER TAKEN
rc = fat_set_fat_cluster(fs_info, save_cln, cl4find);
if ( rc != RC_OK )
goto cleanup;
}
if (zero_fill) {
117fbd: 80 7d cf 00 cmpb $0x0,-0x31(%ebp)
117fc1: 74 4f je 118012 <fat_scan_fat_for_free_clusters+0x10c>
117fc3: eb 63 jmp 118028 <fat_scan_fat_for_free_clusters+0x122>
}
}
else
{
/* set EOC value to new allocated cluster */
rc = fat_set_fat_cluster(fs_info, cl4find, FAT_GENFAT_EOC);
117fc5: 50 push %eax
117fc6: 6a ff push $0xffffffff
117fc8: 56 push %esi
117fc9: 53 push %ebx
117fca: 89 55 c4 mov %edx,-0x3c(%ebp)
117fcd: e8 77 fc ff ff call 117c49 <fat_set_fat_cluster>
117fd2: 89 c1 mov %eax,%ecx
if ( rc != RC_OK )
117fd4: 83 c4 10 add $0x10,%esp
117fd7: 85 c0 test %eax,%eax
117fd9: 8b 55 c4 mov -0x3c(%ebp),%edx
117fdc: 74 1d je 117ffb <fat_scan_fat_for_free_clusters+0xf5><== ALWAYS TAKEN
{
/* cleanup activity */
fat_free_fat_clusters_chain(fs_info, (*chain));
117fde: 50 push %eax <== NOT EXECUTED
117fdf: 50 push %eax <== NOT EXECUTED
117fe0: 8b 55 0c mov 0xc(%ebp),%edx <== NOT EXECUTED
117fe3: ff 32 pushl (%edx) <== NOT EXECUTED
117fe5: 53 push %ebx <== NOT EXECUTED
117fe6: 89 4d c4 mov %ecx,-0x3c(%ebp) <== NOT EXECUTED
117fe9: e8 74 fe ff ff call 117e62 <fat_free_fat_clusters_chain><== NOT EXECUTED
117fee: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
}
else
{
/* set EOC value to new allocated cluster */
rc = fat_set_fat_cluster(fs_info, cl4find, FAT_GENFAT_EOC);
117ff1: 8b 4d c4 mov -0x3c(%ebp),%ecx <== NOT EXECUTED
117ff4: 89 cf mov %ecx,%edi <== NOT EXECUTED
117ff6: e9 f9 00 00 00 jmp 1180f4 <fat_scan_fat_for_free_clusters+0x1ee><== NOT EXECUTED
/* cleanup activity */
fat_free_fat_clusters_chain(fs_info, (*chain));
return rc;
}
rc = fat_set_fat_cluster(fs_info, save_cln, cl4find);
117ffb: 50 push %eax
117ffc: 56 push %esi
117ffd: 52 push %edx
117ffe: 53 push %ebx
117fff: e8 45 fc ff ff call 117c49 <fat_set_fat_cluster>
118004: 89 c2 mov %eax,%edx
if ( rc != RC_OK )
118006: 83 c4 10 add $0x10,%esp
118009: 85 c0 test %eax,%eax
11800b: 74 b0 je 117fbd <fat_scan_fat_for_free_clusters+0xb7><== ALWAYS TAKEN
11800d: e9 b2 00 00 00 jmp 1180c4 <fat_scan_fat_for_free_clusters+0x1be><== NOT EXECUTED
if ( rc != RC_OK )
goto cleanup;
}
save_cln = cl4find;
(*cls_added)++;
118012: 8b 55 14 mov 0x14(%ebp),%edx
118015: 8b 12 mov (%edx),%edx
118017: 89 d0 mov %edx,%eax
118019: 40 inc %eax
11801a: 8b 55 14 mov 0x14(%ebp),%edx
11801d: 89 02 mov %eax,(%edx)
/* have we satisfied request ? */
if (*cls_added == count)
11801f: 3b 45 10 cmp 0x10(%ebp),%eax
118022: 74 38 je 11805c <fat_scan_fat_for_free_clusters+0x156>
118024: 89 f2 mov %esi,%edx
118026: eb 5a jmp 118082 <fat_scan_fat_for_free_clusters+0x17c>
fat_cluster_num_to_sector_num(
const fat_fs_info_t *fs_info,
uint32_t cln
)
{
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
118028: 85 f6 test %esi,%esi
11802a: 75 0b jne 118037 <fat_scan_fat_for_free_clusters+0x131><== ALWAYS TAKEN
11802c: f6 43 0a 03 testb $0x3,0xa(%ebx) <== NOT EXECUTED
118030: 74 05 je 118037 <fat_scan_fat_for_free_clusters+0x131><== NOT EXECUTED
return fs_info->vol.rdir_loc;
118032: 8b 43 1c mov 0x1c(%ebx),%eax <== NOT EXECUTED
118035: eb 0c jmp 118043 <fat_scan_fat_for_free_clusters+0x13d><== NOT EXECUTED
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
118037: 8d 46 fe lea -0x2(%esi),%eax
11803a: 0f b6 4b 05 movzbl 0x5(%ebx),%ecx
11803e: d3 e0 shl %cl,%eax
118040: 03 43 30 add 0x30(%ebx),%eax
if (zero_fill) {
uint32_t sec = fat_cluster_num_to_sector_num(fs_info,
cl4find);
rc = _fat_block_zero(fs_info, sec, 0, fs_info->vol.bpc);
118043: 0f b7 53 06 movzwl 0x6(%ebx),%edx
118047: 52 push %edx
118048: 6a 00 push $0x0
11804a: 50 push %eax
11804b: 53 push %ebx
11804c: e8 99 a5 ff ff call 1125ea <_fat_block_zero>
118051: 89 c2 mov %eax,%edx
if ( rc != RC_OK )
118053: 83 c4 10 add $0x10,%esp
118056: 85 c0 test %eax,%eax
118058: 74 b8 je 118012 <fat_scan_fat_for_free_clusters+0x10c><== ALWAYS TAKEN
11805a: eb 68 jmp 1180c4 <fat_scan_fat_for_free_clusters+0x1be><== NOT EXECUTED
(*cls_added)++;
/* have we satisfied request ? */
if (*cls_added == count)
{
fs_info->vol.next_cl = save_cln;
11805c: 89 73 44 mov %esi,0x44(%ebx)
if (fs_info->vol.free_cls != 0xFFFFFFFF)
11805f: 8b 43 40 mov 0x40(%ebx),%eax
118062: 83 f8 ff cmp $0xffffffff,%eax
118065: 74 08 je 11806f <fat_scan_fat_for_free_clusters+0x169><== ALWAYS TAKEN
fs_info->vol.free_cls -= (*cls_added);
118067: 8b 55 14 mov 0x14(%ebp),%edx <== NOT EXECUTED
11806a: 2b 02 sub (%edx),%eax <== NOT EXECUTED
11806c: 89 43 40 mov %eax,0x40(%ebx) <== NOT EXECUTED
*last_cl = save_cln;
11806f: 8b 55 18 mov 0x18(%ebp),%edx
118072: 89 32 mov %esi,(%edx)
fat_buf_release(fs_info);
118074: 83 ec 0c sub $0xc,%esp
118077: 53 push %ebx
118078: e8 3c a3 ff ff call 1123b9 <fat_buf_release>
11807d: 83 c4 10 add $0x10,%esp
118080: eb 72 jmp 1180f4 <fat_scan_fat_for_free_clusters+0x1ee>
return rc;
}
}
i++;
118082: ff 45 d4 incl -0x2c(%ebp)
cl4find++;
118085: 46 inc %esi
if (cl4find >= data_cls_val)
118086: 3b 75 d0 cmp -0x30(%ebp),%esi
118089: 72 05 jb 118090 <fat_scan_fat_for_free_clusters+0x18a><== ALWAYS TAKEN
cl4find = 2;
11808b: be 02 00 00 00 mov $0x2,%esi <== NOT EXECUTED
/*
* fs_info->vol.data_cls is exactly the count of data clusters
* starting at cluster 2, so the maximum valid cluster number is
* (fs_info->vol.data_cls + 1)
*/
while (i < data_cls_val)
118090: 8b 4d d0 mov -0x30(%ebp),%ecx
118093: 39 4d d4 cmp %ecx,-0x2c(%ebp)
118096: 0f 82 bc fe ff ff jb 117f58 <fat_scan_fat_for_free_clusters+0x52><== ALWAYS TAKEN
cl4find++;
if (cl4find >= data_cls_val)
cl4find = 2;
}
fs_info->vol.next_cl = save_cln;
11809c: 89 53 44 mov %edx,0x44(%ebx) <== NOT EXECUTED
if (fs_info->vol.free_cls != 0xFFFFFFFF)
11809f: 8b 43 40 mov 0x40(%ebx),%eax <== NOT EXECUTED
1180a2: 83 f8 ff cmp $0xffffffff,%eax <== NOT EXECUTED
1180a5: 74 08 je 1180af <fat_scan_fat_for_free_clusters+0x1a9><== NOT EXECUTED
fs_info->vol.free_cls -= (*cls_added);
1180a7: 8b 4d 14 mov 0x14(%ebp),%ecx <== NOT EXECUTED
1180aa: 2b 01 sub (%ecx),%eax <== NOT EXECUTED
1180ac: 89 43 40 mov %eax,0x40(%ebx) <== NOT EXECUTED
*last_cl = save_cln;
1180af: 8b 45 18 mov 0x18(%ebp),%eax <== NOT EXECUTED
1180b2: 89 10 mov %edx,(%eax) <== NOT EXECUTED
fat_buf_release(fs_info);
1180b4: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1180b7: 53 push %ebx <== NOT EXECUTED
1180b8: e8 fc a2 ff ff call 1123b9 <fat_buf_release> <== NOT EXECUTED
1180bd: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
return RC_OK;
1180c0: 31 ff xor %edi,%edi <== NOT EXECUTED
1180c2: eb 30 jmp 1180f4 <fat_scan_fat_for_free_clusters+0x1ee><== NOT EXECUTED
cleanup:
/* cleanup activity */
fat_free_fat_clusters_chain(fs_info, (*chain));
1180c4: 57 push %edi <== NOT EXECUTED
1180c5: 57 push %edi <== NOT EXECUTED
1180c6: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
1180c9: ff 31 pushl (%ecx) <== NOT EXECUTED
1180cb: 53 push %ebx <== NOT EXECUTED
1180cc: 89 55 c4 mov %edx,-0x3c(%ebp) <== NOT EXECUTED
1180cf: e8 8e fd ff ff call 117e62 <fat_free_fat_clusters_chain><== NOT EXECUTED
/* trying to save last allocated cluster for future use */
fat_set_fat_cluster(fs_info, cl4find, FAT_GENFAT_FREE);
1180d4: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
1180d7: 6a 00 push $0x0 <== NOT EXECUTED
1180d9: 56 push %esi <== NOT EXECUTED
1180da: 53 push %ebx <== NOT EXECUTED
1180db: e8 69 fb ff ff call 117c49 <fat_set_fat_cluster> <== NOT EXECUTED
fat_buf_release(fs_info);
1180e0: 89 1c 24 mov %ebx,(%esp) <== NOT EXECUTED
1180e3: e8 d1 a2 ff ff call 1123b9 <fat_buf_release> <== NOT EXECUTED
1180e8: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
return rc;
1180eb: 8b 55 c4 mov -0x3c(%ebp),%edx <== NOT EXECUTED
1180ee: 89 d7 mov %edx,%edi <== NOT EXECUTED
1180f0: eb 02 jmp 1180f4 <fat_scan_fat_for_free_clusters+0x1ee><== NOT EXECUTED
* wouldn't work properly
*/
if (*cls_added == 0)
{
*chain = cl4find;
rc = fat_set_fat_cluster(fs_info, cl4find, FAT_GENFAT_EOC);
1180f2: 89 c7 mov %eax,%edi <== NOT EXECUTED
fat_free_fat_clusters_chain(fs_info, (*chain));
/* trying to save last allocated cluster for future use */
fat_set_fat_cluster(fs_info, cl4find, FAT_GENFAT_FREE);
fat_buf_release(fs_info);
return rc;
}
1180f4: 89 f8 mov %edi,%eax
1180f6: 8d 65 f4 lea -0xc(%ebp),%esp
1180f9: 5b pop %ebx
1180fa: 5e pop %esi
1180fb: 5f pop %edi
1180fc: 5d pop %ebp
1180fd: c3 ret
00117c49 <fat_set_fat_cluster>:
fat_set_fat_cluster(
fat_fs_info_t *fs_info,
uint32_t cln,
uint32_t in_val
)
{
117c49: 55 push %ebp
117c4a: 89 e5 mov %esp,%ebp
117c4c: 57 push %edi
117c4d: 56 push %esi
117c4e: 53 push %ebx
117c4f: 83 ec 3c sub $0x3c,%esp
117c52: 8b 5d 08 mov 0x8(%ebp),%ebx
117c55: 8b 75 0c mov 0xc(%ebp),%esi
int rc = RC_OK;
uint32_t sec = 0;
uint32_t ofs = 0;
uint16_t fat16_clv = 0;
uint32_t fat32_clv = 0;
rtems_bdbuf_buffer *block0 = NULL;
117c58: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
/* sanity check */
if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) )
117c5f: 83 fe 01 cmp $0x1,%esi
117c62: 0f 86 e4 01 00 00 jbe 117e4c <fat_set_fat_cluster+0x203><== NEVER TAKEN
117c68: 8b 43 34 mov 0x34(%ebx),%eax
117c6b: 40 inc %eax
117c6c: 39 c6 cmp %eax,%esi
117c6e: 76 05 jbe 117c75 <fat_set_fat_cluster+0x2c><== ALWAYS TAKEN
117c70: e9 d7 01 00 00 jmp 117e4c <fat_set_fat_cluster+0x203><== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
117c75: 8a 53 0a mov 0xa(%ebx),%dl
117c78: 88 d0 mov %dl,%al
117c7a: 24 01 and $0x1,%al
117c7c: 74 08 je 117c86 <fat_set_fat_cluster+0x3d><== NEVER TAKEN
117c7e: 89 f7 mov %esi,%edi
117c80: d1 ef shr %edi
117c82: 01 f7 add %esi,%edi
117c84: eb 11 jmp 117c97 <fat_set_fat_cluster+0x4e>
117c86: f6 c2 02 test $0x2,%dl <== NOT EXECUTED
117c89: 74 05 je 117c90 <fat_set_fat_cluster+0x47><== NOT EXECUTED
117c8b: 8d 3c 36 lea (%esi,%esi,1),%edi <== NOT EXECUTED
117c8e: eb 07 jmp 117c97 <fat_set_fat_cluster+0x4e><== NOT EXECUTED
117c90: 8d 3c b5 00 00 00 00 lea 0x0(,%esi,4),%edi <== NOT EXECUTED
117c97: 0f b6 4b 02 movzbl 0x2(%ebx),%ecx
117c9b: d3 ef shr %cl,%edi
117c9d: 8b 4b 4c mov 0x4c(%ebx),%ecx
117ca0: 01 f9 add %edi,%ecx
fs_info->vol.afat_loc;
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
117ca2: 84 c0 test %al,%al
117ca4: 74 08 je 117cae <fat_set_fat_cluster+0x65><== NEVER TAKEN
117ca6: 89 f2 mov %esi,%edx
117ca8: d1 ea shr %edx
117caa: 01 f2 add %esi,%edx
117cac: eb 11 jmp 117cbf <fat_set_fat_cluster+0x76>
117cae: 80 e2 02 and $0x2,%dl <== NOT EXECUTED
117cb1: 74 05 je 117cb8 <fat_set_fat_cluster+0x6f><== NOT EXECUTED
117cb3: 8d 14 36 lea (%esi,%esi,1),%edx <== NOT EXECUTED
117cb6: eb 07 jmp 117cbf <fat_set_fat_cluster+0x76><== NOT EXECUTED
117cb8: 8d 14 b5 00 00 00 00 lea 0x0(,%esi,4),%edx <== NOT EXECUTED
117cbf: 0f b7 3b movzwl (%ebx),%edi
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &block0);
117cc2: 8d 45 e4 lea -0x1c(%ebp),%eax
117cc5: 50 push %eax
117cc6: 6a 01 push $0x1
117cc8: 51 push %ecx
117cc9: 53 push %ebx
117cca: 89 55 d0 mov %edx,-0x30(%ebp)
117ccd: 89 4d cc mov %ecx,-0x34(%ebp)
117cd0: e8 2f a5 ff ff call 112204 <fat_buf_access>
if (rc != RC_OK)
117cd5: 83 c4 10 add $0x10,%esp
117cd8: 85 c0 test %eax,%eax
117cda: 8b 55 d0 mov -0x30(%ebp),%edx
117cdd: 8b 4d cc mov -0x34(%ebp),%ecx
117ce0: 0f 85 74 01 00 00 jne 117e5a <fat_set_fat_cluster+0x211><== NEVER TAKEN
if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) )
rtems_set_errno_and_return_minus_one(EIO);
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
fs_info->vol.afat_loc;
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
117ce6: 4f dec %edi
117ce7: 21 d7 and %edx,%edi
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &block0);
if (rc != RC_OK)
return rc;
switch ( fs_info->vol.type )
117ce9: 8a 53 0a mov 0xa(%ebx),%dl
117cec: 80 fa 02 cmp $0x2,%dl
117cef: 0f 84 27 01 00 00 je 117e1c <fat_set_fat_cluster+0x1d3><== NEVER TAKEN
117cf5: 80 fa 04 cmp $0x4,%dl
117cf8: 0f 84 2d 01 00 00 je 117e2b <fat_set_fat_cluster+0x1e2><== NEVER TAKEN
117cfe: fe ca dec %dl
117d00: 0f 85 46 01 00 00 jne 117e4c <fat_set_fat_cluster+0x203><== NEVER TAKEN
{
case FAT_FAT12:
if ( FAT_CLUSTER_IS_ODD(cln) )
117d06: 83 e6 01 and $0x1,%esi
117d09: 8b 55 e4 mov -0x1c(%ebp),%edx
117d0c: 0f 84 84 00 00 00 je 117d96 <fat_set_fat_cluster+0x14d>
{
fat16_clv = ((uint16_t )in_val) << FAT_FAT12_SHIFT;
117d12: 8b 75 10 mov 0x10(%ebp),%esi
117d15: c1 e6 04 shl $0x4,%esi
117d18: 66 89 75 c8 mov %si,-0x38(%ebp)
*((uint8_t *)(block0->buffer + ofs)) =
(*((uint8_t *)(block0->buffer + ofs))) & 0x0F;
117d1c: 8b 52 1c mov 0x1c(%edx),%edx
117d1f: 01 fa add %edi,%edx
{
case FAT_FAT12:
if ( FAT_CLUSTER_IS_ODD(cln) )
{
fat16_clv = ((uint16_t )in_val) << FAT_FAT12_SHIFT;
*((uint8_t *)(block0->buffer + ofs)) =
117d21: 80 22 0f andb $0xf,(%edx)
(*((uint8_t *)(block0->buffer + ofs))) & 0x0F;
*((uint8_t *)(block0->buffer + ofs)) =
(*((uint8_t *)(block0->buffer + ofs))) |
117d24: 8b 55 e4 mov -0x1c(%ebp),%edx
117d27: 8b 52 1c mov 0x1c(%edx),%edx
117d2a: 01 fa add %edi,%edx
117d2c: 89 55 d4 mov %edx,-0x2c(%ebp)
{
fat16_clv = ((uint16_t )in_val) << FAT_FAT12_SHIFT;
*((uint8_t *)(block0->buffer + ofs)) =
(*((uint8_t *)(block0->buffer + ofs))) & 0x0F;
*((uint8_t *)(block0->buffer + ofs)) =
117d2f: 8a 55 c8 mov -0x38(%ebp),%dl
117d32: 8b 75 d4 mov -0x2c(%ebp),%esi
117d35: 08 16 or %dl,(%esi)
}
static inline void
fat_buf_mark_modified(fat_fs_info_t *fs_info)
{
fs_info->c.modified = true;
117d37: c6 43 7c 01 movb $0x1,0x7c(%ebx)
(*((uint8_t *)(block0->buffer + ofs))) |
(uint8_t )(fat16_clv & 0x00FF);
fat_buf_mark_modified(fs_info);
if ( ofs == (fs_info->vol.bps - 1) )
117d3b: 0f b7 13 movzwl (%ebx),%edx
117d3e: 4a dec %edx
117d3f: 39 d7 cmp %edx,%edi
117d41: 75 32 jne 117d75 <fat_set_fat_cluster+0x12c><== ALWAYS TAKEN
{
rc = fat_buf_access(fs_info, sec + 1, FAT_OP_TYPE_READ,
117d43: 8d 45 e4 lea -0x1c(%ebp),%eax <== NOT EXECUTED
117d46: 50 push %eax <== NOT EXECUTED
117d47: 6a 01 push $0x1 <== NOT EXECUTED
117d49: 8d 41 01 lea 0x1(%ecx),%eax <== NOT EXECUTED
117d4c: 50 push %eax <== NOT EXECUTED
117d4d: 53 push %ebx <== NOT EXECUTED
117d4e: e8 b1 a4 ff ff call 112204 <fat_buf_access> <== NOT EXECUTED
&block0);
if (rc != RC_OK)
117d53: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
117d56: 85 c0 test %eax,%eax <== NOT EXECUTED
117d58: 0f 85 fc 00 00 00 jne 117e5a <fat_set_fat_cluster+0x211><== NOT EXECUTED
return rc;
*((uint8_t *)(block0->buffer)) &= 0x00;
117d5e: 8b 55 e4 mov -0x1c(%ebp),%edx <== NOT EXECUTED
117d61: 8b 52 1c mov 0x1c(%edx),%edx <== NOT EXECUTED
117d64: c6 02 00 movb $0x0,(%edx) <== NOT EXECUTED
*((uint8_t *)(block0->buffer)) =
(*((uint8_t *)(block0->buffer))) |
117d67: 8b 55 e4 mov -0x1c(%ebp),%edx <== NOT EXECUTED
117d6a: 8b 52 1c mov 0x1c(%edx),%edx <== NOT EXECUTED
(uint8_t )((fat16_clv & 0xFF00)>>8);
117d6d: 8b 4d c8 mov -0x38(%ebp),%ecx <== NOT EXECUTED
117d70: e9 81 00 00 00 jmp 117df6 <fat_set_fat_cluster+0x1ad><== NOT EXECUTED
fat_buf_mark_modified(fs_info);
}
else
{
*((uint8_t *)(block0->buffer + ofs + 1)) &= 0x00;
117d75: 8b 55 e4 mov -0x1c(%ebp),%edx
117d78: 8b 52 1c mov 0x1c(%edx),%edx
117d7b: c6 44 3a 01 00 movb $0x0,0x1(%edx,%edi,1)
*((uint8_t *)(block0->buffer + ofs + 1)) =
(*((uint8_t *)(block0->buffer + ofs + 1))) |
117d80: 8b 55 e4 mov -0x1c(%ebp),%edx
117d83: 8b 52 1c mov 0x1c(%edx),%edx
(uint8_t )((fat16_clv & 0xFF00)>>8);
117d86: 8b 4d c8 mov -0x38(%ebp),%ecx
117d89: 66 c1 e9 08 shr $0x8,%cx
}
else
{
*((uint8_t *)(block0->buffer + ofs + 1)) &= 0x00;
*((uint8_t *)(block0->buffer + ofs + 1)) =
117d8d: 08 4c 3a 01 or %cl,0x1(%edx,%edi,1)
117d91: e9 c4 00 00 00 jmp 117e5a <fat_set_fat_cluster+0x211>
(uint8_t )((fat16_clv & 0xFF00)>>8);
}
}
else
{
fat16_clv = ((uint16_t )in_val) & FAT_FAT12_MASK;
117d96: 8b 75 10 mov 0x10(%ebp),%esi
117d99: 81 e6 ff 0f 00 00 and $0xfff,%esi
117d9f: 89 75 d4 mov %esi,-0x2c(%ebp)
117da2: 66 89 75 c6 mov %si,-0x3a(%ebp)
*((uint8_t *)(block0->buffer + ofs)) &= 0x00;
117da6: 8b 52 1c mov 0x1c(%edx),%edx
117da9: c6 04 3a 00 movb $0x0,(%edx,%edi,1)
*((uint8_t *)(block0->buffer + ofs)) =
(*((uint8_t *)(block0->buffer + ofs))) |
117dad: 8b 55 e4 mov -0x1c(%ebp),%edx
117db0: 8b 52 1c mov 0x1c(%edx),%edx
117db3: 01 fa add %edi,%edx
117db5: 89 55 c8 mov %edx,-0x38(%ebp)
else
{
fat16_clv = ((uint16_t )in_val) & FAT_FAT12_MASK;
*((uint8_t *)(block0->buffer + ofs)) &= 0x00;
*((uint8_t *)(block0->buffer + ofs)) =
117db8: 8a 55 d4 mov -0x2c(%ebp),%dl
117dbb: 8b 75 c8 mov -0x38(%ebp),%esi
117dbe: 08 16 or %dl,(%esi)
117dc0: c6 43 7c 01 movb $0x1,0x7c(%ebx)
(*((uint8_t *)(block0->buffer + ofs))) |
(uint8_t )(fat16_clv & 0x00FF);
fat_buf_mark_modified(fs_info);
if ( ofs == (fs_info->vol.bps - 1) )
117dc4: 0f b7 13 movzwl (%ebx),%edx
117dc7: 4a dec %edx
117dc8: 39 d7 cmp %edx,%edi
117dca: 75 32 jne 117dfe <fat_set_fat_cluster+0x1b5><== ALWAYS TAKEN
{
rc = fat_buf_access(fs_info, sec + 1, FAT_OP_TYPE_READ,
117dcc: 8d 45 e4 lea -0x1c(%ebp),%eax <== NOT EXECUTED
117dcf: 50 push %eax <== NOT EXECUTED
117dd0: 6a 01 push $0x1 <== NOT EXECUTED
117dd2: 8d 41 01 lea 0x1(%ecx),%eax <== NOT EXECUTED
117dd5: 50 push %eax <== NOT EXECUTED
117dd6: 53 push %ebx <== NOT EXECUTED
117dd7: e8 28 a4 ff ff call 112204 <fat_buf_access> <== NOT EXECUTED
&block0);
if (rc != RC_OK)
117ddc: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
117ddf: 85 c0 test %eax,%eax <== NOT EXECUTED
117de1: 75 77 jne 117e5a <fat_set_fat_cluster+0x211><== NOT EXECUTED
return rc;
*((uint8_t *)(block0->buffer)) =
(*((uint8_t *)(block0->buffer))) & 0xF0;
117de3: 8b 55 e4 mov -0x1c(%ebp),%edx <== NOT EXECUTED
117de6: 8b 52 1c mov 0x1c(%edx),%edx <== NOT EXECUTED
rc = fat_buf_access(fs_info, sec + 1, FAT_OP_TYPE_READ,
&block0);
if (rc != RC_OK)
return rc;
*((uint8_t *)(block0->buffer)) =
117de9: 80 22 f0 andb $0xf0,(%edx) <== NOT EXECUTED
(*((uint8_t *)(block0->buffer))) & 0xF0;
*((uint8_t *)(block0->buffer)) =
(*((uint8_t *)(block0->buffer))) |
117dec: 8b 55 e4 mov -0x1c(%ebp),%edx <== NOT EXECUTED
117def: 8b 52 1c mov 0x1c(%edx),%edx <== NOT EXECUTED
(uint8_t )((fat16_clv & 0xFF00)>>8);
117df2: 66 8b 4d c6 mov -0x3a(%ebp),%cx <== NOT EXECUTED
117df6: 66 c1 e9 08 shr $0x8,%cx <== NOT EXECUTED
return rc;
*((uint8_t *)(block0->buffer)) =
(*((uint8_t *)(block0->buffer))) & 0xF0;
*((uint8_t *)(block0->buffer)) =
117dfa: 08 0a or %cl,(%edx) <== NOT EXECUTED
117dfc: eb 48 jmp 117e46 <fat_set_fat_cluster+0x1fd><== NOT EXECUTED
fat_buf_mark_modified(fs_info);
}
else
{
*((uint8_t *)(block0->buffer + ofs + 1)) =
(*((uint8_t *)(block0->buffer + ofs + 1))) & 0xF0;
117dfe: 47 inc %edi
117dff: 8b 55 e4 mov -0x1c(%ebp),%edx
117e02: 8b 52 1c mov 0x1c(%edx),%edx
117e05: 01 fa add %edi,%edx
fat_buf_mark_modified(fs_info);
}
else
{
*((uint8_t *)(block0->buffer + ofs + 1)) =
117e07: 80 22 f0 andb $0xf0,(%edx)
(*((uint8_t *)(block0->buffer + ofs + 1))) & 0xF0;
*((uint8_t *)(block0->buffer + ofs+1)) =
(*((uint8_t *)(block0->buffer + ofs+1))) |
117e0a: 8b 55 e4 mov -0x1c(%ebp),%edx
117e0d: 03 7a 1c add 0x1c(%edx),%edi
(uint8_t )((fat16_clv & 0xFF00)>>8);
117e10: 66 8b 55 c6 mov -0x3a(%ebp),%dx
117e14: 66 c1 ea 08 shr $0x8,%dx
else
{
*((uint8_t *)(block0->buffer + ofs + 1)) =
(*((uint8_t *)(block0->buffer + ofs + 1))) & 0xF0;
*((uint8_t *)(block0->buffer + ofs+1)) =
117e18: 08 17 or %dl,(%edi)
117e1a: eb 3e jmp 117e5a <fat_set_fat_cluster+0x211>
}
}
break;
case FAT_FAT16:
*((uint16_t *)(block0->buffer + ofs)) =
117e1c: 8b 55 e4 mov -0x1c(%ebp),%edx <== NOT EXECUTED
117e1f: 8b 52 1c mov 0x1c(%edx),%edx <== NOT EXECUTED
(uint16_t )(CT_LE_W(in_val));
117e22: 8b 4d 10 mov 0x10(%ebp),%ecx <== NOT EXECUTED
117e25: 66 89 0c 3a mov %cx,(%edx,%edi,1) <== NOT EXECUTED
117e29: eb 1b jmp 117e46 <fat_set_fat_cluster+0x1fd><== NOT EXECUTED
case FAT_FAT32:
fat32_clv = CT_LE_L((in_val & FAT_FAT32_MASK));
*((uint32_t *)(block0->buffer + ofs)) =
(*((uint32_t *)(block0->buffer + ofs))) & (CT_LE_L(0xF0000000));
117e2b: 8b 55 e4 mov -0x1c(%ebp),%edx <== NOT EXECUTED
117e2e: 03 7a 1c add 0x1c(%edx),%edi <== NOT EXECUTED
117e31: 8b 17 mov (%edi),%edx <== NOT EXECUTED
117e33: 81 e2 00 00 00 f0 and $0xf0000000,%edx <== NOT EXECUTED
(uint16_t )(CT_LE_W(in_val));
fat_buf_mark_modified(fs_info);
break;
case FAT_FAT32:
fat32_clv = CT_LE_L((in_val & FAT_FAT32_MASK));
117e39: 8b 4d 10 mov 0x10(%ebp),%ecx <== NOT EXECUTED
117e3c: 81 e1 ff ff ff 0f and $0xfffffff,%ecx <== NOT EXECUTED
*((uint32_t *)(block0->buffer + ofs)) =
(*((uint32_t *)(block0->buffer + ofs))) & (CT_LE_L(0xF0000000));
*((uint32_t *)(block0->buffer + ofs)) =
fat32_clv | (*((uint32_t *)(block0->buffer + ofs)));
117e42: 09 ca or %ecx,%edx <== NOT EXECUTED
117e44: 89 17 mov %edx,(%edi) <== NOT EXECUTED
117e46: c6 43 7c 01 movb $0x1,0x7c(%ebx) <== NOT EXECUTED
117e4a: eb 0e jmp 117e5a <fat_set_fat_cluster+0x211><== NOT EXECUTED
fat_buf_mark_modified(fs_info);
break;
default:
rtems_set_errno_and_return_minus_one(EIO);
117e4c: e8 bf 19 00 00 call 119810 <__errno> <== NOT EXECUTED
117e51: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
117e57: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
break;
}
return RC_OK;
}
117e5a: 8d 65 f4 lea -0xc(%ebp),%esp
117e5d: 5b pop %ebx
117e5e: 5e pop %esi
117e5f: 5f pop %edi
117e60: 5d pop %ebp
117e61: c3 ret
001128cb <fat_shutdown_drive>:
* RC_OK on success, or -1 if error occured
* and errno set appropriately
*/
int
fat_shutdown_drive(fat_fs_info_t *fs_info)
{
1128cb: 55 push %ebp
1128cc: 89 e5 mov %esp,%ebp
1128ce: 57 push %edi
1128cf: 56 push %esi
1128d0: 53 push %ebx
1128d1: 83 ec 1c sub $0x1c,%esp
1128d4: 8b 5d 08 mov 0x8(%ebp),%ebx
int rc = RC_OK;
1128d7: 31 f6 xor %esi,%esi
int i = 0;
if (fs_info->vol.type & FAT_FAT32)
1128d9: f6 43 0a 04 testb $0x4,0xa(%ebx)
1128dd: 74 19 je 1128f8 <fat_shutdown_drive+0x2d><== ALWAYS TAKEN
{
rc = fat_fat32_update_fsinfo_sector(fs_info, fs_info->vol.free_cls,
1128df: 50 push %eax <== NOT EXECUTED
1128e0: ff 73 44 pushl 0x44(%ebx) <== NOT EXECUTED
1128e3: ff 73 40 pushl 0x40(%ebx) <== NOT EXECUTED
1128e6: 53 push %ebx <== NOT EXECUTED
1128e7: e8 7e ff ff ff call 11286a <fat_fat32_update_fsinfo_sector><== NOT EXECUTED
1128ec: 89 c6 mov %eax,%esi <== NOT EXECUTED
fs_info->vol.next_cl);
if ( rc != RC_OK )
1128ee: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
1128f1: 85 c0 test %eax,%eax <== NOT EXECUTED
1128f3: 74 03 je 1128f8 <fat_shutdown_drive+0x2d><== NOT EXECUTED
rc = -1;
1128f5: 83 ce ff or $0xffffffff,%esi <== NOT EXECUTED
}
fat_buf_release(fs_info);
1128f8: 83 ec 0c sub $0xc,%esp
1128fb: 53 push %ebx
1128fc: e8 b8 fa ff ff call 1123b9 <fat_buf_release>
if (rtems_bdbuf_syncdev(fs_info->vol.dd) != RTEMS_SUCCESSFUL)
112901: 58 pop %eax
112902: ff 73 58 pushl 0x58(%ebx)
112905: e8 29 e8 ff ff call 111133 <rtems_bdbuf_syncdev>
11290a: 83 c4 10 add $0x10,%esp
11290d: 85 c0 test %eax,%eax
11290f: 74 03 je 112914 <fat_shutdown_drive+0x49><== ALWAYS TAKEN
rc = -1;
112911: 83 ce ff or $0xffffffff,%esi <== NOT EXECUTED
112914: 31 ff xor %edi,%edi
for (i = 0; i < FAT_HASH_SIZE; i++)
{
rtems_chain_node *node = NULL;
rtems_chain_control *the_chain = fs_info->vhash + i;
112916: 8b 43 60 mov 0x60(%ebx),%eax
112919: 01 f8 add %edi,%eax
11291b: 89 45 e4 mov %eax,-0x1c(%ebp)
while ( (node = rtems_chain_get(the_chain)) != NULL )
11291e: eb 0c jmp 11292c <fat_shutdown_drive+0x61>
free(node);
112920: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
112923: 50 push %eax <== NOT EXECUTED
112924: e8 03 49 ff ff call 10722c <free> <== NOT EXECUTED
112929: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE rtems_chain_node *rtems_chain_get(
rtems_chain_control *the_chain
)
{
return _Chain_Get( the_chain );
11292c: 83 ec 0c sub $0xc,%esp
11292f: ff 75 e4 pushl -0x1c(%ebp)
112932: e8 e5 8d ff ff call 10b71c <_Chain_Get>
for (i = 0; i < FAT_HASH_SIZE; i++)
{
rtems_chain_node *node = NULL;
rtems_chain_control *the_chain = fs_info->vhash + i;
while ( (node = rtems_chain_get(the_chain)) != NULL )
112937: 83 c4 10 add $0x10,%esp
11293a: 85 c0 test %eax,%eax
11293c: 75 e2 jne 112920 <fat_shutdown_drive+0x55><== NEVER TAKEN
11293e: 83 c7 0c add $0xc,%edi
fat_buf_release(fs_info);
if (rtems_bdbuf_syncdev(fs_info->vol.dd) != RTEMS_SUCCESSFUL)
rc = -1;
for (i = 0; i < FAT_HASH_SIZE; i++)
112941: 83 ff 18 cmp $0x18,%edi
112944: 75 d0 jne 112916 <fat_shutdown_drive+0x4b>
112946: 66 31 ff xor %di,%di
}
for (i = 0; i < FAT_HASH_SIZE; i++)
{
rtems_chain_node *node = NULL;
rtems_chain_control *the_chain = fs_info->rhash + i;
112949: 8b 43 64 mov 0x64(%ebx),%eax
11294c: 01 f8 add %edi,%eax
11294e: 89 45 e4 mov %eax,-0x1c(%ebp)
while ( (node = rtems_chain_get(the_chain)) != NULL )
112951: eb 0c jmp 11295f <fat_shutdown_drive+0x94>
free(node);
112953: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
112956: 50 push %eax <== NOT EXECUTED
112957: e8 d0 48 ff ff call 10722c <free> <== NOT EXECUTED
11295c: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11295f: 83 ec 0c sub $0xc,%esp
112962: ff 75 e4 pushl -0x1c(%ebp)
112965: e8 b2 8d ff ff call 10b71c <_Chain_Get>
for (i = 0; i < FAT_HASH_SIZE; i++)
{
rtems_chain_node *node = NULL;
rtems_chain_control *the_chain = fs_info->rhash + i;
while ( (node = rtems_chain_get(the_chain)) != NULL )
11296a: 83 c4 10 add $0x10,%esp
11296d: 85 c0 test %eax,%eax
11296f: 75 e2 jne 112953 <fat_shutdown_drive+0x88><== NEVER TAKEN
112971: 83 c7 0c add $0xc,%edi
while ( (node = rtems_chain_get(the_chain)) != NULL )
free(node);
}
for (i = 0; i < FAT_HASH_SIZE; i++)
112974: 83 ff 18 cmp $0x18,%edi
112977: 75 d0 jne 112949 <fat_shutdown_drive+0x7e>
while ( (node = rtems_chain_get(the_chain)) != NULL )
free(node);
}
free(fs_info->vhash);
112979: 83 ec 0c sub $0xc,%esp
11297c: ff 73 60 pushl 0x60(%ebx)
11297f: e8 a8 48 ff ff call 10722c <free>
free(fs_info->rhash);
112984: 5f pop %edi
112985: ff 73 64 pushl 0x64(%ebx)
112988: e8 9f 48 ff ff call 10722c <free>
free(fs_info->uino);
11298d: 58 pop %eax
11298e: ff 73 68 pushl 0x68(%ebx)
112991: e8 96 48 ff ff call 10722c <free>
free(fs_info->sec_buf);
112996: 58 pop %eax
112997: ff b3 84 00 00 00 pushl 0x84(%ebx)
11299d: e8 8a 48 ff ff call 10722c <free>
close(fs_info->vol.fd);
1129a2: 58 pop %eax
1129a3: ff 73 54 pushl 0x54(%ebx)
1129a6: e8 51 46 ff ff call 106ffc <close>
if (rc)
1129ab: 83 c4 10 add $0x10,%esp
1129ae: 85 f6 test %esi,%esi
1129b0: 74 0b je 1129bd <fat_shutdown_drive+0xf2><== ALWAYS TAKEN
errno = EIO;
1129b2: e8 59 6e 00 00 call 119810 <__errno> <== NOT EXECUTED
1129b7: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
return rc;
}
1129bd: 89 f0 mov %esi,%eax
1129bf: 8d 65 f4 lea -0xc(%ebp),%esp
1129c2: 5b pop %ebx
1129c3: 5e pop %esi
1129c4: 5f pop %edi
1129c5: 5d pop %ebp
1129c6: c3 ret
0012d5e4 <fchdir>:
#include <unistd.h>
#include <rtems/libio_.h>
int fchdir( int fd )
{
12d5e4: 55 push %ebp
12d5e5: 89 e5 mov %esp,%ebp
12d5e7: 57 push %edi
12d5e8: 56 push %esi
12d5e9: 53 push %ebx
12d5ea: 83 ec 6c sub $0x6c,%esp
12d5ed: 8b 5d 08 mov 0x8(%ebp),%ebx
int rv = 0;
rtems_libio_t *iop;
struct stat st;
rtems_filesystem_location_info_t loc;
st.st_mode = 0;
12d5f0: c7 45 ac 00 00 00 00 movl $0x0,-0x54(%ebp)
st.st_uid = 0;
12d5f7: 66 c7 45 b2 00 00 movw $0x0,-0x4e(%ebp)
st.st_gid = 0;
12d5fd: 66 c7 45 b4 00 00 movw $0x0,-0x4c(%ebp)
rtems_libio_check_fd( fd );
12d603: 3b 1d 1c 69 16 00 cmp 0x16691c,%ebx
12d609: 72 02 jb 12d60d <fchdir+0x29>
12d60b: eb 0f jmp 12d61c <fchdir+0x38>
iop = rtems_libio_iop( fd );
12d60d: 6b db 30 imul $0x30,%ebx,%ebx
12d610: 03 1d e8 e0 16 00 add 0x16e0e8,%ebx
rtems_libio_check_is_open( iop );
12d616: f6 43 0d 01 testb $0x1,0xd(%ebx)
12d61a: 75 13 jne 12d62f <fchdir+0x4b>
12d61c: e8 67 38 00 00 call 130e88 <__errno>
12d621: c7 00 09 00 00 00 movl $0x9,(%eax)
12d627: 83 ce ff or $0xffffffff,%esi
12d62a: e9 84 00 00 00 jmp 12d6b3 <fchdir+0xcf>
if ( rv == 0 ) {
rv = rtems_filesystem_chdir( &loc );
}
return rv;
}
12d62f: 8b 43 24 mov 0x24(%ebx),%eax
const rtems_filesystem_location_info_t *loc
)
{
const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry;
(*mt_entry->ops->lock_h)( mt_entry );
12d632: 83 ec 0c sub $0xc,%esp
12d635: 8b 50 0c mov 0xc(%eax),%edx
12d638: 50 push %eax
12d639: ff 12 call *(%edx)
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open( iop );
rtems_filesystem_instance_lock( &iop->pathinfo );
rv = (*iop->pathinfo.handlers->fstat_h)( &iop->pathinfo, &st );
12d63b: 8d 7b 10 lea 0x10(%ebx),%edi
12d63e: 5a pop %edx
12d63f: 59 pop %ecx
12d640: 8b 43 20 mov 0x20(%ebx),%eax
12d643: 8d 55 a0 lea -0x60(%ebp),%edx
12d646: 52 push %edx
12d647: 57 push %edi
12d648: ff 50 18 call *0x18(%eax)
12d64b: 89 c6 mov %eax,%esi
if ( rv == 0 ) {
12d64d: 83 c4 10 add $0x10,%esp
12d650: 85 c0 test %eax,%eax
12d652: 75 3a jne 12d68e <fchdir+0xaa> <== NEVER TAKEN
bool access_ok = rtems_filesystem_check_access(
12d654: 0f b7 45 b4 movzwl -0x4c(%ebp),%eax
12d658: 50 push %eax
12d659: 0f b7 45 b2 movzwl -0x4e(%ebp),%eax
12d65d: 50 push %eax
12d65e: ff 75 ac pushl -0x54(%ebp)
12d661: 6a 01 push $0x1
12d663: e8 ec 22 fe ff call 10f954 <rtems_filesystem_check_access>
st.st_mode,
st.st_uid,
st.st_gid
);
if ( access_ok ) {
12d668: 83 c4 10 add $0x10,%esp
12d66b: 84 c0 test %al,%al
12d66d: 74 11 je 12d680 <fchdir+0x9c> <== NEVER TAKEN
rtems_filesystem_location_clone( &loc, &iop->pathinfo );
12d66f: 50 push %eax
12d670: 50 push %eax
12d671: 57 push %edi
12d672: 8d 45 88 lea -0x78(%ebp),%eax
12d675: 50 push %eax
12d676: e8 31 1e fe ff call 10f4ac <rtems_filesystem_location_clone>
12d67b: 83 c4 10 add $0x10,%esp
12d67e: eb 0e jmp 12d68e <fchdir+0xaa>
} else {
errno = EACCES;
12d680: e8 03 38 00 00 call 130e88 <__errno>
12d685: c7 00 0d 00 00 00 movl $0xd,(%eax)
rv = -1;
12d68b: 83 ce ff or $0xffffffff,%esi
if ( rv == 0 ) {
rv = rtems_filesystem_chdir( &loc );
}
return rv;
}
12d68e: 8b 43 24 mov 0x24(%ebx),%eax
const rtems_filesystem_location_info_t *loc
)
{
const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry;
(*mt_entry->ops->unlock_h)( mt_entry );
12d691: 83 ec 0c sub $0xc,%esp
12d694: 8b 50 0c mov 0xc(%eax),%edx
12d697: 50 push %eax
12d698: ff 52 04 call *0x4(%edx)
rv = -1;
}
}
rtems_filesystem_instance_unlock( &iop->pathinfo );
if ( rv == 0 ) {
12d69b: 83 c4 10 add $0x10,%esp
12d69e: 85 f6 test %esi,%esi
12d6a0: 75 11 jne 12d6b3 <fchdir+0xcf>
rv = rtems_filesystem_chdir( &loc );
12d6a2: 83 ec 0c sub $0xc,%esp
12d6a5: 8d 45 88 lea -0x78(%ebp),%eax
12d6a8: 50 push %eax
12d6a9: e8 7a 43 ff ff call 121a28 <rtems_filesystem_chdir>
12d6ae: 89 c6 mov %eax,%esi
12d6b0: 83 c4 10 add $0x10,%esp
}
return rv;
}
12d6b3: 89 f0 mov %esi,%eax
12d6b5: 8d 65 f4 lea -0xc(%ebp),%esp
12d6b8: 5b pop %ebx
12d6b9: 5e pop %esi
12d6ba: 5f pop %edi
12d6bb: 5d pop %ebp
12d6bc: c3 ret
00121cc4 <fchmod>:
#include <sys/stat.h>
#include <rtems/libio_.h>
int fchmod( int fd, mode_t mode )
{
121cc4: 55 push %ebp
121cc5: 89 e5 mov %esp,%ebp
121cc7: 53 push %ebx
121cc8: 83 ec 14 sub $0x14,%esp
121ccb: 8b 5d 08 mov 0x8(%ebp),%ebx
int rv;
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
121cce: 3b 1d 1c 69 16 00 cmp 0x16691c,%ebx
121cd4: 72 02 jb 121cd8 <fchmod+0x14>
121cd6: eb 0f jmp 121ce7 <fchmod+0x23>
iop = rtems_libio_iop( fd );
121cd8: 6b db 30 imul $0x30,%ebx,%ebx
121cdb: 03 1d e8 e0 16 00 add 0x16e0e8,%ebx
rtems_libio_check_is_open(iop);
121ce1: f6 43 0d 01 testb $0x1,0xd(%ebx)
121ce5: 75 0d jne 121cf4 <fchmod+0x30>
121ce7: e8 9c f1 00 00 call 130e88 <__errno>
121cec: c7 00 09 00 00 00 movl $0x9,(%eax)
121cf2: eb 46 jmp 121d3a <fchmod+0x76>
if (iop->pathinfo.mt_entry->writeable) {
121cf4: 8b 43 24 mov 0x24(%ebx),%eax
121cf7: 80 78 29 00 cmpb $0x0,0x29(%eax)
121cfb: 74 32 je 121d2f <fchmod+0x6b> <== NEVER TAKEN
const rtems_filesystem_location_info_t *loc
)
{
const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry;
(*mt_entry->ops->lock_h)( mt_entry );
121cfd: 83 ec 0c sub $0xc,%esp
121d00: 8b 50 0c mov 0xc(%eax),%edx
121d03: 50 push %eax
121d04: ff 12 call *(%edx)
rtems_filesystem_instance_lock( &iop->pathinfo );
rv = (*iop->pathinfo.mt_entry->ops->fchmod_h)( &iop->pathinfo, mode );
121d06: 58 pop %eax
121d07: 5a pop %edx
121d08: 8b 43 24 mov 0x24(%ebx),%eax
121d0b: 8b 40 0c mov 0xc(%eax),%eax
121d0e: ff 75 0c pushl 0xc(%ebp)
121d11: 8d 53 10 lea 0x10(%ebx),%edx
121d14: 52 push %edx
121d15: ff 50 20 call *0x20(%eax)
errno = EROFS;
rv = -1;
}
return rv;
}
121d18: 8b 53 24 mov 0x24(%ebx),%edx
const rtems_filesystem_location_info_t *loc
)
{
const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry;
(*mt_entry->ops->unlock_h)( mt_entry );
121d1b: 8b 4a 0c mov 0xc(%edx),%ecx
121d1e: 89 14 24 mov %edx,(%esp)
121d21: 89 45 f4 mov %eax,-0xc(%ebp)
121d24: ff 51 04 call *0x4(%ecx)
121d27: 83 c4 10 add $0x10,%esp
121d2a: 8b 45 f4 mov -0xc(%ebp),%eax
121d2d: eb 0e jmp 121d3d <fchmod+0x79>
if (iop->pathinfo.mt_entry->writeable) {
rtems_filesystem_instance_lock( &iop->pathinfo );
rv = (*iop->pathinfo.mt_entry->ops->fchmod_h)( &iop->pathinfo, mode );
rtems_filesystem_instance_unlock( &iop->pathinfo );
} else {
errno = EROFS;
121d2f: e8 54 f1 00 00 call 130e88 <__errno> <== NOT EXECUTED
121d34: c7 00 1e 00 00 00 movl $0x1e,(%eax) <== NOT EXECUTED
rv = -1;
121d3a: 83 c8 ff or $0xffffffff,%eax
}
return rv;
}
121d3d: 8b 5d fc mov -0x4(%ebp),%ebx
121d40: c9 leave
121d41: c3 ret
00121d44 <fchown>:
#include <unistd.h>
#include <rtems/libio_.h>
int fchown( int fd, uid_t owner, gid_t group )
{
121d44: 55 push %ebp
121d45: 89 e5 mov %esp,%ebp
121d47: 57 push %edi
121d48: 56 push %esi
121d49: 53 push %ebx
121d4a: 83 ec 1c sub $0x1c,%esp
121d4d: 8b 5d 08 mov 0x8(%ebp),%ebx
121d50: 0f b7 75 0c movzwl 0xc(%ebp),%esi
121d54: 0f b7 7d 10 movzwl 0x10(%ebp),%edi
int rv = 0;
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
121d58: 3b 1d 1c 69 16 00 cmp 0x16691c,%ebx
121d5e: 72 02 jb 121d62 <fchown+0x1e>
121d60: eb 0f jmp 121d71 <fchown+0x2d>
iop = rtems_libio_iop( fd );
121d62: 6b db 30 imul $0x30,%ebx,%ebx
121d65: 03 1d e8 e0 16 00 add 0x16e0e8,%ebx
rtems_libio_check_is_open(iop);
121d6b: f6 43 0d 01 testb $0x1,0xd(%ebx)
121d6f: 75 0d jne 121d7e <fchown+0x3a>
121d71: e8 12 f1 00 00 call 130e88 <__errno>
121d76: c7 00 09 00 00 00 movl $0x9,(%eax)
121d7c: eb 46 jmp 121dc4 <fchown+0x80>
if (iop->pathinfo.mt_entry->writeable) {
121d7e: 8b 43 24 mov 0x24(%ebx),%eax
121d81: 80 78 29 00 cmpb $0x0,0x29(%eax)
121d85: 74 32 je 121db9 <fchown+0x75> <== NEVER TAKEN
const rtems_filesystem_location_info_t *loc
)
{
const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry;
(*mt_entry->ops->lock_h)( mt_entry );
121d87: 83 ec 0c sub $0xc,%esp
121d8a: 8b 50 0c mov 0xc(%eax),%edx
121d8d: 50 push %eax
121d8e: ff 12 call *(%edx)
rtems_filesystem_instance_lock( &iop->pathinfo );
rv = (*iop->pathinfo.mt_entry->ops->chown_h)(
121d90: 83 c4 0c add $0xc,%esp
121d93: 8b 43 24 mov 0x24(%ebx),%eax
121d96: 8b 40 0c mov 0xc(%eax),%eax
121d99: 57 push %edi
121d9a: 56 push %esi
&iop->pathinfo,
121d9b: 8d 53 10 lea 0x10(%ebx),%edx
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
if (iop->pathinfo.mt_entry->writeable) {
rtems_filesystem_instance_lock( &iop->pathinfo );
rv = (*iop->pathinfo.mt_entry->ops->chown_h)(
121d9e: 52 push %edx
121d9f: ff 50 24 call *0x24(%eax)
errno = EROFS;
rv = -1;
}
return rv;
}
121da2: 8b 53 24 mov 0x24(%ebx),%edx
const rtems_filesystem_location_info_t *loc
)
{
const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry;
(*mt_entry->ops->unlock_h)( mt_entry );
121da5: 8b 4a 0c mov 0xc(%edx),%ecx
121da8: 89 14 24 mov %edx,(%esp)
121dab: 89 45 e4 mov %eax,-0x1c(%ebp)
121dae: ff 51 04 call *0x4(%ecx)
121db1: 83 c4 10 add $0x10,%esp
121db4: 8b 45 e4 mov -0x1c(%ebp),%eax
121db7: eb 0e jmp 121dc7 <fchown+0x83>
owner,
group
);
rtems_filesystem_instance_unlock( &iop->pathinfo );
} else {
errno = EROFS;
121db9: e8 ca f0 00 00 call 130e88 <__errno> <== NOT EXECUTED
121dbe: c7 00 1e 00 00 00 movl $0x1e,(%eax) <== NOT EXECUTED
rv = -1;
121dc4: 83 c8 ff or $0xffffffff,%eax
}
return rv;
}
121dc7: 8d 65 f4 lea -0xc(%ebp),%esp
121dca: 5b pop %ebx
121dcb: 5e pop %esi
121dcc: 5f pop %edi
121dcd: 5d pop %ebp
121dce: c3 ret
0012c490 <fcntl>:
int fcntl(
int fd,
int cmd,
...
)
{
12c490: 55 push %ebp
12c491: 89 e5 mov %esp,%ebp
12c493: 57 push %edi
12c494: 56 push %esi
12c495: 53 push %ebx
12c496: 83 ec 1c sub $0x1c,%esp
12c499: 8b 55 08 mov 0x8(%ebp),%edx
int fd2;
int flags;
int mask;
int ret = 0;
rtems_libio_check_fd( fd );
12c49c: 3b 15 08 f7 13 00 cmp 0x13f708,%edx
12c4a2: 72 02 jb 12c4a6 <fcntl+0x16>
12c4a4: eb 11 jmp 12c4b7 <fcntl+0x27>
iop = rtems_libio_iop( fd );
12c4a6: 6b fa 30 imul $0x30,%edx,%edi
12c4a9: 03 3d d8 38 15 00 add 0x1538d8,%edi
rtems_libio_check_is_open(iop);
12c4af: 8b 5f 0c mov 0xc(%edi),%ebx
12c4b2: f6 c7 01 test $0x1,%bh
12c4b5: 75 10 jne 12c4c7 <fcntl+0x37>
12c4b7: e8 10 2d ff ff call 11f1cc <__errno>
12c4bc: c7 00 09 00 00 00 movl $0x9,(%eax)
12c4c2: e9 29 01 00 00 jmp 12c5f0 <fcntl+0x160>
/*
* This switch should contain all the cases from POSIX.
*/
switch ( cmd ) {
12c4c7: 83 7d 0c 09 cmpl $0x9,0xc(%ebp)
12c4cb: 0f 87 f2 00 00 00 ja 12c5c3 <fcntl+0x133>
12c4d1: 8b 45 0c mov 0xc(%ebp),%eax
12c4d4: ff 24 85 64 36 13 00 jmp *0x133664(,%eax,4)
/*
* FIXME: We ignore the start value fd2 for the file descriptor search. This
* is not POSIX conform.
*/
rtems_libio_t *diop = rtems_libio_allocate();
12c4db: e8 d8 dc fd ff call 10a1b8 <rtems_libio_allocate>
12c4e0: 89 c6 mov %eax,%esi
if (diop != NULL) {
12c4e2: 85 c0 test %eax,%eax
12c4e4: 0f 84 06 01 00 00 je 12c5f0 <fcntl+0x160>
int oflag = rtems_libio_to_fcntl_flags( iop->flags );
12c4ea: 83 ec 0c sub $0xc,%esp
12c4ed: ff 77 0c pushl 0xc(%edi)
12c4f0: e8 83 dc fd ff call 10a178 <rtems_libio_to_fcntl_flags>
12c4f5: 89 c1 mov %eax,%ecx
oflag &= ~O_CREAT;
12c4f7: 80 e5 fd and $0xfd,%ch
diop->flags |= rtems_libio_fcntl_flags( oflag );
12c4fa: 8b 5e 0c mov 0xc(%esi),%ebx
12c4fd: 89 0c 24 mov %ecx,(%esp)
12c500: 89 4d e4 mov %ecx,-0x1c(%ebp)
12c503: e8 3c dc fd ff call 10a144 <rtems_libio_fcntl_flags>
12c508: 09 d8 or %ebx,%eax
12c50a: 89 46 0c mov %eax,0xc(%esi)
int cmd,
int arg
)
{
return fcntl( fd, cmd, arg );
}
12c50d: 8b 47 24 mov 0x24(%edi),%eax
const rtems_filesystem_location_info_t *loc
)
{
const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry;
(*mt_entry->ops->lock_h)( mt_entry );
12c510: 8b 58 0c mov 0xc(%eax),%ebx
12c513: 89 04 24 mov %eax,(%esp)
12c516: ff 13 call *(%ebx)
oflag &= ~O_CREAT;
diop->flags |= rtems_libio_fcntl_flags( oflag );
rtems_filesystem_instance_lock( &iop->pathinfo );
rtems_filesystem_location_clone( &diop->pathinfo, &iop->pathinfo );
12c518: 5a pop %edx
12c519: 59 pop %ecx
12c51a: 8d 47 10 lea 0x10(%edi),%eax
12c51d: 50 push %eax
12c51e: 8d 46 10 lea 0x10(%esi),%eax
12c521: 50 push %eax
12c522: e8 89 9e fe ff call 1163b0 <rtems_filesystem_location_clone>
int cmd,
int arg
)
{
return fcntl( fd, cmd, arg );
}
12c527: 8b 47 24 mov 0x24(%edi),%eax
const rtems_filesystem_location_info_t *loc
)
{
const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry;
(*mt_entry->ops->unlock_h)( mt_entry );
12c52a: 8b 58 0c mov 0xc(%eax),%ebx
12c52d: 89 04 24 mov %eax,(%esp)
12c530: ff 53 04 call *0x4(%ebx)
/*
* XXX: We call the open handler here to have a proper open and close pair.
*
* FIXME: What to do with the path?
*/
rv = (*diop->pathinfo.handlers->open_h)( diop, NULL, oflag, 0 );
12c533: 8b 46 20 mov 0x20(%esi),%eax
12c536: 6a 00 push $0x0
12c538: 8b 4d e4 mov -0x1c(%ebp),%ecx
12c53b: 51 push %ecx
12c53c: 6a 00 push $0x0
12c53e: 56 push %esi
12c53f: ff 10 call *(%eax)
12c541: 89 c3 mov %eax,%ebx
if ( rv == 0 ) {
12c543: 83 c4 20 add $0x20,%esp
12c546: 85 c0 test %eax,%eax
12c548: 75 11 jne 12c55b <fcntl+0xcb> <== NEVER TAKEN
rv = diop - rtems_libio_iops;
12c54a: 2b 35 d8 38 15 00 sub 0x1538d8,%esi
12c550: c1 fe 04 sar $0x4,%esi
12c553: 69 de ab aa aa aa imul $0xaaaaaaab,%esi,%ebx
12c559: eb 75 jmp 12c5d0 <fcntl+0x140>
} else {
rtems_libio_free( diop );
12c55b: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
12c55e: 56 push %esi <== NOT EXECUTED
12c55f: e8 a7 dc fd ff call 10a20b <rtems_libio_free> <== NOT EXECUTED
12c564: eb 26 jmp 12c58c <fcntl+0xfc> <== NOT EXECUTED
fd2 = va_arg( ap, int );
ret = duplicate_iop( iop, fd2 );
break;
case F_GETFD: /* get f_flags */
ret = ((iop->flags & LIBIO_FLAGS_CLOSE_ON_EXEC) != 0);
12c566: c1 eb 0b shr $0xb,%ebx
12c569: 83 e3 01 and $0x1,%ebx
12c56c: eb 66 jmp 12c5d4 <fcntl+0x144>
* if a new process is exec()'ed. Since RTEMS does not support
* processes, then we can ignore this one except to make
* F_GETFD work.
*/
if ( va_arg( ap, int ) )
12c56e: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
12c572: 74 05 je 12c579 <fcntl+0xe9>
iop->flags |= LIBIO_FLAGS_CLOSE_ON_EXEC;
12c574: 80 cf 08 or $0x8,%bh
12c577: eb 03 jmp 12c57c <fcntl+0xec>
else
iop->flags &= ~LIBIO_FLAGS_CLOSE_ON_EXEC;
12c579: 80 e7 f7 and $0xf7,%bh
12c57c: 89 5f 0c mov %ebx,0xc(%edi)
12c57f: eb 31 jmp 12c5b2 <fcntl+0x122>
break;
case F_GETFL: /* more flags (cloexec) */
ret = rtems_libio_to_fcntl_flags( iop->flags );
12c581: 83 ec 0c sub $0xc,%esp
12c584: 53 push %ebx
12c585: e8 ee db fd ff call 10a178 <rtems_libio_to_fcntl_flags>
12c58a: 89 c3 mov %eax,%ebx
12c58c: 83 c4 10 add $0x10,%esp
12c58f: eb 3f jmp 12c5d0 <fcntl+0x140>
break;
case F_SETFL:
flags = rtems_libio_fcntl_flags( va_arg( ap, int ) );
12c591: 83 ec 0c sub $0xc,%esp
12c594: ff 75 10 pushl 0x10(%ebp)
12c597: e8 a8 db fd ff call 10a144 <rtems_libio_fcntl_flags>
/*
* XXX If we are turning on append, should we seek to the end?
*/
iop->flags = (iop->flags & ~mask) | (flags & mask);
12c59c: 25 01 02 00 00 and $0x201,%eax
12c5a1: 8b 4f 0c mov 0xc(%edi),%ecx
12c5a4: 81 e1 fe fd ff ff and $0xfffffdfe,%ecx
12c5aa: 09 c8 or %ecx,%eax
12c5ac: 89 47 0c mov %eax,0xc(%edi)
12c5af: 83 c4 10 add $0x10,%esp
{
rtems_libio_t *iop;
int fd2;
int flags;
int mask;
int ret = 0;
12c5b2: 31 db xor %ebx,%ebx
12c5b4: eb 1e jmp 12c5d4 <fcntl+0x144>
errno = ENOTSUP;
ret = -1;
break;
case F_GETOWN: /* for sockets. */
errno = ENOTSUP;
12c5b6: e8 11 2c ff ff call 11f1cc <__errno>
12c5bb: c7 00 86 00 00 00 movl $0x86,(%eax)
12c5c1: eb 2d jmp 12c5f0 <fcntl+0x160>
ret = -1;
break;
default:
errno = EINVAL;
12c5c3: e8 04 2c ff ff call 11f1cc <__errno>
12c5c8: c7 00 16 00 00 00 movl $0x16,(%eax)
12c5ce: eb 20 jmp 12c5f0 <fcntl+0x160>
/*
* If we got this far successfully, then we give the optional
* filesystem specific handler a chance to process this.
*/
if (ret >= 0) {
12c5d0: 85 db test %ebx,%ebx
12c5d2: 78 1f js 12c5f3 <fcntl+0x163> <== NEVER TAKEN
int err = (*iop->pathinfo.handlers->fcntl_h)( iop, cmd );
12c5d4: 50 push %eax
12c5d5: 50 push %eax
12c5d6: 8b 47 20 mov 0x20(%edi),%eax
12c5d9: ff 75 0c pushl 0xc(%ebp)
12c5dc: 57 push %edi
12c5dd: ff 50 28 call *0x28(%eax)
12c5e0: 89 c6 mov %eax,%esi
if (err) {
12c5e2: 83 c4 10 add $0x10,%esp
12c5e5: 85 c0 test %eax,%eax
12c5e7: 74 0a je 12c5f3 <fcntl+0x163> <== ALWAYS TAKEN
errno = err;
12c5e9: e8 de 2b ff ff call 11f1cc <__errno> <== NOT EXECUTED
12c5ee: 89 30 mov %esi,(%eax) <== NOT EXECUTED
int mask;
int ret = 0;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
12c5f0: 83 cb ff or $0xffffffff,%ebx
va_list ap;
va_start( ap, cmd );
ret = vfcntl(fd,cmd,ap);
va_end(ap);
return ret;
}
12c5f3: 89 d8 mov %ebx,%eax
12c5f5: 8d 65 f4 lea -0xc(%ebp),%esp
12c5f8: 5b pop %ebx
12c5f9: 5e pop %esi
12c5fa: 5f pop %edi
12c5fb: 5d pop %ebp
12c5fc: c3 ret
0010f178 <fifo_open>:
*/
int fifo_open(
pipe_control_t **pipep,
rtems_libio_t *iop
)
{
10f178: 55 push %ebp
10f179: 89 e5 mov %esp,%ebp
10f17b: 57 push %edi
10f17c: 56 push %esi
10f17d: 53 push %ebx
10f17e: 83 ec 2c sub $0x2c,%esp
10f181: 8b 75 08 mov 0x8(%ebp),%esi
static int pipe_lock(void)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
if (pipe_semaphore == RTEMS_ID_NONE) {
10f184: 83 3d d4 00 13 00 00 cmpl $0x0,0x1300d4
10f18b: 74 1f je 10f1ac <fifo_open+0x34>
rtems_libio_unlock();
}
if (sc == RTEMS_SUCCESSFUL) {
sc = rtems_semaphore_obtain(pipe_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
10f18d: 50 push %eax
10f18e: 6a 00 push $0x0
10f190: 6a 00 push $0x0
10f192: ff 35 d4 00 13 00 pushl 0x1300d4
10f198: e8 cf bf ff ff call 10b16c <rtems_semaphore_obtain>
10f19d: 89 c2 mov %eax,%edx
}
if (sc == RTEMS_SUCCESSFUL) {
10f19f: 83 c4 10 add $0x10,%esp
10f1a2: 85 c0 test %eax,%eax
10f1a4: 0f 84 87 03 00 00 je 10f531 <fifo_open+0x3b9> <== ALWAYS TAKEN
10f1aa: eb 50 jmp 10f1fc <fifo_open+0x84> <== NOT EXECUTED
*/
#include <rtems/userenv.h>
static inline void rtems_libio_lock( void )
{
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
10f1ac: 50 push %eax
10f1ad: 6a 00 push $0x0
10f1af: 6a 00 push $0x0
10f1b1: ff 35 e0 02 13 00 pushl 0x1302e0
10f1b7: e8 b0 bf ff ff call 10b16c <rtems_semaphore_obtain>
rtems_status_code sc = RTEMS_SUCCESSFUL;
if (pipe_semaphore == RTEMS_ID_NONE) {
rtems_libio_lock();
if (pipe_semaphore == RTEMS_ID_NONE) {
10f1bc: 83 c4 10 add $0x10,%esp
free(pipe);
}
static int pipe_lock(void)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
10f1bf: 31 db xor %ebx,%ebx
if (pipe_semaphore == RTEMS_ID_NONE) {
rtems_libio_lock();
if (pipe_semaphore == RTEMS_ID_NONE) {
10f1c1: 83 3d d4 00 13 00 00 cmpl $0x0,0x1300d4
10f1c8: 75 1d jne 10f1e7 <fifo_open+0x6f> <== NEVER TAKEN
sc = rtems_semaphore_create(
10f1ca: 83 ec 0c sub $0xc,%esp
10f1cd: 68 d4 00 13 00 push $0x1300d4
10f1d2: 6a 00 push $0x0
10f1d4: 6a 54 push $0x54
10f1d6: 6a 01 push $0x1
10f1d8: 68 45 50 49 50 push $0x50495045
10f1dd: e8 5a bd ff ff call 10af3c <rtems_semaphore_create>
10f1e2: 89 c3 mov %eax,%ebx
10f1e4: 83 c4 20 add $0x20,%esp
}
static inline void rtems_libio_unlock( void )
{
rtems_semaphore_release( rtems_libio_semaphore );
10f1e7: 83 ec 0c sub $0xc,%esp
10f1ea: ff 35 e0 02 13 00 pushl 0x1302e0
10f1f0: e8 67 c0 ff ff call 10b25c <rtems_semaphore_release>
}
rtems_libio_unlock();
}
if (sc == RTEMS_SUCCESSFUL) {
10f1f5: 83 c4 10 add $0x10,%esp
10f1f8: 85 db test %ebx,%ebx
10f1fa: 74 91 je 10f18d <fifo_open+0x15>
}
if (sc == RTEMS_SUCCESSFUL) {
return 0;
} else {
return -ENOMEM;
10f1fc: bf f4 ff ff ff mov $0xfffffff4,%edi
10f201: e9 4f 03 00 00 jmp 10f555 <fifo_open+0x3dd>
{
static char c = 'a';
pipe_control_t *pipe;
int err = -ENOMEM;
pipe = malloc(sizeof(pipe_control_t));
10f206: 83 ec 0c sub $0xc,%esp
10f209: 6a 34 push $0x34
10f20b: 89 55 d0 mov %edx,-0x30(%ebp)
10f20e: e8 0d 88 ff ff call 107a20 <malloc>
10f213: 89 c3 mov %eax,%ebx
if (pipe == NULL)
10f215: 83 c4 10 add $0x10,%esp
10f218: 85 c0 test %eax,%eax
10f21a: 8b 55 d0 mov -0x30(%ebp),%edx
10f21d: 0f 84 1d 03 00 00 je 10f540 <fifo_open+0x3c8> <== NEVER TAKEN
return err;
memset(pipe, 0, sizeof(pipe_control_t));
10f223: b9 0d 00 00 00 mov $0xd,%ecx
10f228: 89 c7 mov %eax,%edi
10f22a: 89 d0 mov %edx,%eax
10f22c: f3 ab rep stos %eax,%es:(%edi)
pipe->Size = PIPE_BUF;
10f22e: c7 43 04 00 02 00 00 movl $0x200,0x4(%ebx)
pipe->Buffer = malloc(pipe->Size);
10f235: 83 ec 0c sub $0xc,%esp
10f238: 68 00 02 00 00 push $0x200
10f23d: e8 de 87 ff ff call 107a20 <malloc>
10f242: 89 03 mov %eax,(%ebx)
if (! pipe->Buffer)
10f244: 83 c4 10 add $0x10,%esp
10f247: 85 c0 test %eax,%eax
10f249: 0f 84 ed 00 00 00 je 10f33c <fifo_open+0x1c4> <== NEVER TAKEN
goto err_buf;
err = -ENOMEM;
if (rtems_barrier_create(
10f24f: 8d 43 2c lea 0x2c(%ebx),%eax
10f252: 50 push %eax
10f253: 6a 00 push $0x0
10f255: 6a 00 push $0x0
rtems_build_name ('P', 'I', 'r', c),
10f257: 0f be 05 b0 e1 12 00 movsbl 0x12e1b0,%eax
if (! pipe->Buffer)
goto err_buf;
err = -ENOMEM;
if (rtems_barrier_create(
10f25e: 0d 00 72 49 50 or $0x50497200,%eax
10f263: 50 push %eax
10f264: e8 8f 16 00 00 call 1108f8 <rtems_barrier_create>
10f269: 83 c4 10 add $0x10,%esp
10f26c: 85 c0 test %eax,%eax
10f26e: 0f 85 bb 00 00 00 jne 10f32f <fifo_open+0x1b7>
rtems_build_name ('P', 'I', 'r', c),
RTEMS_BARRIER_MANUAL_RELEASE, 0,
&pipe->readBarrier) != RTEMS_SUCCESSFUL)
goto err_rbar;
if (rtems_barrier_create(
10f274: 8d 43 30 lea 0x30(%ebx),%eax
10f277: 50 push %eax
10f278: 6a 00 push $0x0
10f27a: 6a 00 push $0x0
rtems_build_name ('P', 'I', 'w', c),
10f27c: 0f be 05 b0 e1 12 00 movsbl 0x12e1b0,%eax
if (rtems_barrier_create(
rtems_build_name ('P', 'I', 'r', c),
RTEMS_BARRIER_MANUAL_RELEASE, 0,
&pipe->readBarrier) != RTEMS_SUCCESSFUL)
goto err_rbar;
if (rtems_barrier_create(
10f283: 0d 00 77 49 50 or $0x50497700,%eax
10f288: 50 push %eax
10f289: e8 6a 16 00 00 call 1108f8 <rtems_barrier_create>
10f28e: 83 c4 10 add $0x10,%esp
10f291: 85 c0 test %eax,%eax
10f293: 0f 85 88 00 00 00 jne 10f321 <fifo_open+0x1a9>
rtems_build_name ('P', 'I', 'w', c),
RTEMS_BARRIER_MANUAL_RELEASE, 0,
&pipe->writeBarrier) != RTEMS_SUCCESSFUL)
goto err_wbar;
if (rtems_semaphore_create(
10f299: 83 ec 0c sub $0xc,%esp
10f29c: 8d 43 28 lea 0x28(%ebx),%eax
10f29f: 50 push %eax
10f2a0: 6a 00 push $0x0
10f2a2: 6a 10 push $0x10
10f2a4: 6a 01 push $0x1
rtems_build_name ('P', 'I', 's', c), 1,
10f2a6: 0f be 05 b0 e1 12 00 movsbl 0x12e1b0,%eax
if (rtems_barrier_create(
rtems_build_name ('P', 'I', 'w', c),
RTEMS_BARRIER_MANUAL_RELEASE, 0,
&pipe->writeBarrier) != RTEMS_SUCCESSFUL)
goto err_wbar;
if (rtems_semaphore_create(
10f2ad: 0d 00 73 49 50 or $0x50497300,%eax
10f2b2: 50 push %eax
10f2b3: e8 84 bc ff ff call 10af3c <rtems_semaphore_create>
10f2b8: 83 c4 20 add $0x20,%esp
10f2bb: 85 c0 test %eax,%eax
10f2bd: 75 54 jne 10f313 <fifo_open+0x19b>
RTEMS_INLINE_ROUTINE Barrier_Control *_Barrier_Get (
Objects_Id id,
Objects_Locations *location
)
{
return (Barrier_Control *)
10f2bf: 50 push %eax
/* Set barriers to be interruptible by signals. */
static void pipe_interruptible(pipe_control_t *pipe)
{
Objects_Locations location;
_Barrier_Get(pipe->readBarrier, &location)->Barrier.Wait_queue.state
10f2c0: 8d 7d e4 lea -0x1c(%ebp),%edi
10f2c3: 57 push %edi
10f2c4: ff 73 2c pushl 0x2c(%ebx)
10f2c7: 68 d0 0c 13 00 push $0x130cd0
10f2cc: e8 eb d3 ff ff call 10c6bc <_Objects_Get>
|= STATES_INTERRUPTIBLE_BY_SIGNAL;
10f2d1: 81 48 4c 00 00 00 10 orl $0x10000000,0x4c(%eax)
_Thread_Enable_dispatch();
10f2d8: e8 13 df ff ff call 10d1f0 <_Thread_Enable_dispatch>
10f2dd: 83 c4 0c add $0xc,%esp
10f2e0: 57 push %edi
10f2e1: ff 73 30 pushl 0x30(%ebx)
10f2e4: 68 d0 0c 13 00 push $0x130cd0
10f2e9: e8 ce d3 ff ff call 10c6bc <_Objects_Get>
_Barrier_Get(pipe->writeBarrier, &location)->Barrier.Wait_queue.state
|= STATES_INTERRUPTIBLE_BY_SIGNAL;
10f2ee: 81 48 4c 00 00 00 10 orl $0x10000000,0x4c(%eax)
_Thread_Enable_dispatch();
10f2f5: e8 f6 de ff ff call 10d1f0 <_Thread_Enable_dispatch>
#ifdef RTEMS_POSIX_API
pipe_interruptible(pipe);
#endif
*pipep = pipe;
if (c ++ == 'z')
10f2fa: a0 b0 e1 12 00 mov 0x12e1b0,%al
10f2ff: 83 c4 10 add $0x10,%esp
10f302: 3c 7a cmp $0x7a,%al
10f304: 0f 85 40 02 00 00 jne 10f54a <fifo_open+0x3d2>
c = 'a';
10f30a: c6 05 b0 e1 12 00 61 movb $0x61,0x12e1b0
10f311: eb 3a jmp 10f34d <fifo_open+0x1d5>
return 0;
err_sem:
rtems_barrier_delete(pipe->writeBarrier);
10f313: 83 ec 0c sub $0xc,%esp
10f316: ff 73 30 pushl 0x30(%ebx)
10f319: e8 9a 16 00 00 call 1109b8 <rtems_barrier_delete>
10f31e: 83 c4 10 add $0x10,%esp
err_wbar:
rtems_barrier_delete(pipe->readBarrier);
10f321: 83 ec 0c sub $0xc,%esp
10f324: ff 73 2c pushl 0x2c(%ebx)
10f327: e8 8c 16 00 00 call 1109b8 <rtems_barrier_delete>
10f32c: 83 c4 10 add $0x10,%esp
err_rbar:
free(pipe->Buffer);
10f32f: 83 ec 0c sub $0xc,%esp
10f332: ff 33 pushl (%ebx)
10f334: e8 2b 83 ff ff call 107664 <free>
10f339: 83 c4 10 add $0x10,%esp
err_buf:
free(pipe);
10f33c: 83 ec 0c sub $0xc,%esp
10f33f: 53 push %ebx
10f340: e8 1f 83 ff ff call 107664 <free>
10f345: 83 c4 10 add $0x10,%esp
10f348: e9 f3 01 00 00 jmp 10f540 <fifo_open+0x3c8>
err = pipe_alloc(&pipe);
if (err)
goto out;
}
if (! PIPE_LOCK(pipe))
10f34d: 57 push %edi
10f34e: 6a 00 push $0x0
10f350: 6a 00 push $0x0
10f352: ff 73 28 pushl 0x28(%ebx)
10f355: e8 12 be ff ff call 10b16c <rtems_semaphore_obtain>
10f35a: 83 c4 10 add $0x10,%esp
10f35d: 83 f8 01 cmp $0x1,%eax
10f360: 19 ff sbb %edi,%edi
10f362: f7 d7 not %edi
10f364: 83 e7 fc and $0xfffffffc,%edi
err = -EINTR;
if (*pipep == NULL) {
10f367: 83 3e 00 cmpl $0x0,(%esi)
10f36a: 75 0f jne 10f37b <fifo_open+0x203>
if (err)
10f36c: 85 ff test %edi,%edi
10f36e: 74 09 je 10f379 <fifo_open+0x201> <== ALWAYS TAKEN
pipe_free(pipe);
10f370: 89 d8 mov %ebx,%eax <== NOT EXECUTED
10f372: e8 31 fd ff ff call 10f0a8 <pipe_free> <== NOT EXECUTED
10f377: eb 02 jmp 10f37b <fifo_open+0x203> <== NOT EXECUTED
else
*pipep = pipe;
10f379: 89 1e mov %ebx,(%esi)
#ifdef RTEMS_DEBUG
rtems_status_code sc = RTEMS_SUCCESSFUL;
sc =
#endif
rtems_semaphore_release(pipe_semaphore);
10f37b: 83 ec 0c sub $0xc,%esp
10f37e: ff 35 d4 00 13 00 pushl 0x1300d4
10f384: e8 d3 be ff ff call 10b25c <rtems_semaphore_release>
pipe_control_t *pipe;
unsigned int prevCounter;
int err;
err = pipe_new(pipep);
if (err)
10f389: 83 c4 10 add $0x10,%esp
10f38c: 85 ff test %edi,%edi
10f38e: 0f 85 c1 01 00 00 jne 10f555 <fifo_open+0x3dd> <== NEVER TAKEN
return err;
pipe = *pipep;
10f394: 8b 1e mov (%esi),%ebx
switch (LIBIO_ACCMODE(iop)) {
10f396: 8b 55 0c mov 0xc(%ebp),%edx
10f399: 8b 42 0c mov 0xc(%edx),%eax
10f39c: 83 e0 06 and $0x6,%eax
10f39f: 83 f8 04 cmp $0x4,%eax
10f3a2: 0f 84 97 00 00 00 je 10f43f <fifo_open+0x2c7>
10f3a8: 83 f8 06 cmp $0x6,%eax
10f3ab: 0f 84 1c 01 00 00 je 10f4cd <fifo_open+0x355> <== NEVER TAKEN
10f3b1: 83 f8 02 cmp $0x2,%eax
10f3b4: 0f 85 55 01 00 00 jne 10f50f <fifo_open+0x397> <== NEVER TAKEN
case LIBIO_FLAGS_READ:
pipe->readerCounter ++;
10f3ba: ff 43 20 incl 0x20(%ebx)
if (pipe->Readers ++ == 0)
10f3bd: 8b 43 10 mov 0x10(%ebx),%eax
10f3c0: 8d 48 01 lea 0x1(%eax),%ecx
10f3c3: 89 4b 10 mov %ecx,0x10(%ebx)
10f3c6: 85 c0 test %eax,%eax
10f3c8: 75 11 jne 10f3db <fifo_open+0x263> <== NEVER TAKEN
PIPE_WAKEUPWRITERS(pipe);
10f3ca: 51 push %ecx
10f3cb: 51 push %ecx
10f3cc: 8d 45 e0 lea -0x20(%ebp),%eax
10f3cf: 50 push %eax
10f3d0: ff 73 30 pushl 0x30(%ebx)
10f3d3: e8 6c 16 00 00 call 110a44 <rtems_barrier_release>
10f3d8: 83 c4 10 add $0x10,%esp
if (pipe->Writers == 0) {
10f3db: 83 7b 14 00 cmpl $0x0,0x14(%ebx)
10f3df: 0f 85 2a 01 00 00 jne 10f50f <fifo_open+0x397>
/* Not an error */
if (LIBIO_NODELAY(iop))
10f3e5: 8b 55 0c mov 0xc(%ebp),%edx
10f3e8: f6 42 0c 01 testb $0x1,0xc(%edx)
10f3ec: 0f 85 1d 01 00 00 jne 10f50f <fifo_open+0x397>
break;
prevCounter = pipe->writerCounter;
10f3f2: 8b 53 24 mov 0x24(%ebx),%edx
10f3f5: 89 55 d4 mov %edx,-0x2c(%ebp)
err = -EINTR;
/* Wait until a writer opens the pipe */
do {
PIPE_UNLOCK(pipe);
10f3f8: 83 ec 0c sub $0xc,%esp
10f3fb: ff 73 28 pushl 0x28(%ebx)
10f3fe: e8 59 be ff ff call 10b25c <rtems_semaphore_release>
if (! PIPE_READWAIT(pipe))
10f403: 58 pop %eax
10f404: 5a pop %edx
10f405: 6a 00 push $0x0
10f407: ff 73 2c pushl 0x2c(%ebx)
10f40a: e8 8d 16 00 00 call 110a9c <rtems_barrier_wait>
10f40f: 83 c4 10 add $0x10,%esp
10f412: 85 c0 test %eax,%eax
10f414: 0f 85 02 01 00 00 jne 10f51c <fifo_open+0x3a4> <== NEVER TAKEN
goto out_error;
if (! PIPE_LOCK(pipe))
10f41a: 50 push %eax
10f41b: 6a 00 push $0x0
10f41d: 6a 00 push $0x0
10f41f: ff 73 28 pushl 0x28(%ebx)
10f422: e8 45 bd ff ff call 10b16c <rtems_semaphore_obtain>
10f427: 83 c4 10 add $0x10,%esp
10f42a: 85 c0 test %eax,%eax
10f42c: 0f 85 ea 00 00 00 jne 10f51c <fifo_open+0x3a4> <== NEVER TAKEN
goto out_error;
} while (prevCounter == pipe->writerCounter);
10f432: 8b 55 d4 mov -0x2c(%ebp),%edx
10f435: 3b 53 24 cmp 0x24(%ebx),%edx
10f438: 74 be je 10f3f8 <fifo_open+0x280> <== NEVER TAKEN
10f43a: e9 d0 00 00 00 jmp 10f50f <fifo_open+0x397>
}
break;
case LIBIO_FLAGS_WRITE:
pipe->writerCounter ++;
10f43f: ff 43 24 incl 0x24(%ebx)
if (pipe->Writers ++ == 0)
10f442: 8b 43 14 mov 0x14(%ebx),%eax
10f445: 8d 48 01 lea 0x1(%eax),%ecx
10f448: 89 4b 14 mov %ecx,0x14(%ebx)
10f44b: 85 c0 test %eax,%eax
10f44d: 75 11 jne 10f460 <fifo_open+0x2e8> <== NEVER TAKEN
PIPE_WAKEUPREADERS(pipe);
10f44f: 51 push %ecx
10f450: 51 push %ecx
10f451: 8d 45 e0 lea -0x20(%ebp),%eax
10f454: 50 push %eax
10f455: ff 73 2c pushl 0x2c(%ebx)
10f458: e8 e7 15 00 00 call 110a44 <rtems_barrier_release>
10f45d: 83 c4 10 add $0x10,%esp
if (pipe->Readers == 0 && LIBIO_NODELAY(iop)) {
10f460: 83 7b 10 00 cmpl $0x0,0x10(%ebx)
10f464: 0f 85 a5 00 00 00 jne 10f50f <fifo_open+0x397>
10f46a: 8b 55 0c mov 0xc(%ebp),%edx
10f46d: f6 42 0c 01 testb $0x1,0xc(%edx)
10f471: 74 18 je 10f48b <fifo_open+0x313>
PIPE_UNLOCK(pipe);
10f473: 83 ec 0c sub $0xc,%esp
10f476: ff 73 28 pushl 0x28(%ebx)
10f479: e8 de bd ff ff call 10b25c <rtems_semaphore_release>
err = -ENXIO;
goto out_error;
10f47e: 83 c4 10 add $0x10,%esp
if (pipe->Writers ++ == 0)
PIPE_WAKEUPREADERS(pipe);
if (pipe->Readers == 0 && LIBIO_NODELAY(iop)) {
PIPE_UNLOCK(pipe);
err = -ENXIO;
10f481: bf fa ff ff ff mov $0xfffffffa,%edi
goto out_error;
10f486: e9 96 00 00 00 jmp 10f521 <fifo_open+0x3a9>
}
if (pipe->Readers == 0) {
prevCounter = pipe->readerCounter;
10f48b: 8b 53 20 mov 0x20(%ebx),%edx
10f48e: 89 55 d4 mov %edx,-0x2c(%ebp)
err = -EINTR;
do {
PIPE_UNLOCK(pipe);
10f491: 83 ec 0c sub $0xc,%esp
10f494: ff 73 28 pushl 0x28(%ebx)
10f497: e8 c0 bd ff ff call 10b25c <rtems_semaphore_release>
if (! PIPE_WRITEWAIT(pipe))
10f49c: 58 pop %eax
10f49d: 5a pop %edx
10f49e: 6a 00 push $0x0
10f4a0: ff 73 30 pushl 0x30(%ebx)
10f4a3: e8 f4 15 00 00 call 110a9c <rtems_barrier_wait>
10f4a8: 83 c4 10 add $0x10,%esp
10f4ab: 85 c0 test %eax,%eax
10f4ad: 75 6d jne 10f51c <fifo_open+0x3a4> <== NEVER TAKEN
goto out_error;
if (! PIPE_LOCK(pipe))
10f4af: 50 push %eax
10f4b0: 6a 00 push $0x0
10f4b2: 6a 00 push $0x0
10f4b4: ff 73 28 pushl 0x28(%ebx)
10f4b7: e8 b0 bc ff ff call 10b16c <rtems_semaphore_obtain>
10f4bc: 83 c4 10 add $0x10,%esp
10f4bf: 85 c0 test %eax,%eax
10f4c1: 75 59 jne 10f51c <fifo_open+0x3a4> <== NEVER TAKEN
goto out_error;
} while (prevCounter == pipe->readerCounter);
10f4c3: 8b 55 d4 mov -0x2c(%ebp),%edx
10f4c6: 3b 53 20 cmp 0x20(%ebx),%edx
10f4c9: 74 c6 je 10f491 <fifo_open+0x319> <== NEVER TAKEN
10f4cb: eb 42 jmp 10f50f <fifo_open+0x397>
}
break;
case LIBIO_FLAGS_READ_WRITE:
pipe->readerCounter ++;
10f4cd: ff 43 20 incl 0x20(%ebx)
if (pipe->Readers ++ == 0)
10f4d0: 8b 43 10 mov 0x10(%ebx),%eax
10f4d3: 8d 48 01 lea 0x1(%eax),%ecx
10f4d6: 89 4b 10 mov %ecx,0x10(%ebx)
10f4d9: 85 c0 test %eax,%eax
10f4db: 75 11 jne 10f4ee <fifo_open+0x376> <== NEVER TAKEN
PIPE_WAKEUPWRITERS(pipe);
10f4dd: 50 push %eax
10f4de: 50 push %eax
10f4df: 8d 45 e0 lea -0x20(%ebp),%eax
10f4e2: 50 push %eax
10f4e3: ff 73 30 pushl 0x30(%ebx)
10f4e6: e8 59 15 00 00 call 110a44 <rtems_barrier_release>
10f4eb: 83 c4 10 add $0x10,%esp
pipe->writerCounter ++;
10f4ee: ff 43 24 incl 0x24(%ebx)
if (pipe->Writers ++ == 0)
10f4f1: 8b 43 14 mov 0x14(%ebx),%eax
10f4f4: 8d 48 01 lea 0x1(%eax),%ecx
10f4f7: 89 4b 14 mov %ecx,0x14(%ebx)
10f4fa: 85 c0 test %eax,%eax
10f4fc: 75 11 jne 10f50f <fifo_open+0x397> <== NEVER TAKEN
PIPE_WAKEUPREADERS(pipe);
10f4fe: 50 push %eax
10f4ff: 50 push %eax
10f500: 8d 45 e0 lea -0x20(%ebp),%eax
10f503: 50 push %eax
10f504: ff 73 2c pushl 0x2c(%ebx)
10f507: e8 38 15 00 00 call 110a44 <rtems_barrier_release>
10f50c: 83 c4 10 add $0x10,%esp
break;
}
PIPE_UNLOCK(pipe);
10f50f: 83 ec 0c sub $0xc,%esp
10f512: ff 73 28 pushl 0x28(%ebx)
10f515: e8 42 bd ff ff call 10b25c <rtems_semaphore_release>
10f51a: eb 10 jmp 10f52c <fifo_open+0x3b4>
/* Not an error */
if (LIBIO_NODELAY(iop))
break;
prevCounter = pipe->writerCounter;
err = -EINTR;
10f51c: bf fc ff ff ff mov $0xfffffffc,%edi <== NOT EXECUTED
PIPE_UNLOCK(pipe);
return 0;
out_error:
pipe_release(pipep, iop);
10f521: 50 push %eax
10f522: 50 push %eax
10f523: ff 75 0c pushl 0xc(%ebp)
10f526: 56 push %esi
10f527: e8 b7 fb ff ff call 10f0e3 <pipe_release>
return err;
10f52c: 83 c4 10 add $0x10,%esp
10f52f: eb 24 jmp 10f555 <fifo_open+0x3dd>
err = pipe_lock();
if (err)
return err;
pipe = *pipep;
10f531: 8b 1e mov (%esi),%ebx
if (pipe == NULL) {
10f533: 85 db test %ebx,%ebx
10f535: 0f 85 12 fe ff ff jne 10f34d <fifo_open+0x1d5>
10f53b: e9 c6 fc ff ff jmp 10f206 <fifo_open+0x8e>
if (err)
goto out;
}
if (! PIPE_LOCK(pipe))
err = -EINTR;
10f540: bf f4 ff ff ff mov $0xfffffff4,%edi
10f545: e9 31 fe ff ff jmp 10f37b <fifo_open+0x203>
#ifdef RTEMS_POSIX_API
pipe_interruptible(pipe);
#endif
*pipep = pipe;
if (c ++ == 'z')
10f54a: 40 inc %eax
10f54b: a2 b0 e1 12 00 mov %al,0x12e1b0
10f550: e9 f8 fd ff ff jmp 10f34d <fifo_open+0x1d5>
return 0;
out_error:
pipe_release(pipep, iop);
return err;
}
10f555: 89 f8 mov %edi,%eax
10f557: 8d 65 f4 lea -0xc(%ebp),%esp
10f55a: 5b pop %ebx
10f55b: 5e pop %esi
10f55c: 5f pop %edi
10f55d: 5d pop %ebp
10f55e: c3 ret
0010948c <fpathconf>:
long fpathconf(
int fd,
int name
)
{
10948c: 55 push %ebp
10948d: 89 e5 mov %esp,%ebp
10948f: 83 ec 08 sub $0x8,%esp
109492: 8b 45 08 mov 0x8(%ebp),%eax
109495: 8b 55 0c mov 0xc(%ebp),%edx
long return_value;
rtems_libio_t *iop;
const rtems_filesystem_limits_and_options_t *the_limits;
rtems_libio_check_fd(fd);
109498: 3b 05 54 72 12 00 cmp 0x127254,%eax
10949e: 72 02 jb 1094a2 <fpathconf+0x16>
1094a0: eb 0f jmp 1094b1 <fpathconf+0x25>
iop = rtems_libio_iop(fd);
1094a2: 6b c0 30 imul $0x30,%eax,%eax
1094a5: 03 05 34 b2 12 00 add 0x12b234,%eax
rtems_libio_check_is_open(iop);
1094ab: f6 40 0d 01 testb $0x1,0xd(%eax)
1094af: 75 0d jne 1094be <fpathconf+0x32> <== ALWAYS TAKEN
1094b1: e8 5e 1e 00 00 call 10b314 <__errno>
1094b6: c7 00 09 00 00 00 movl $0x9,(%eax)
1094bc: eb 58 jmp 109516 <fpathconf+0x8a>
/*
* Now process the information request.
*/
the_limits = iop->pathinfo.mt_entry->pathconf_limits_and_options;
1094be: 8b 40 24 mov 0x24(%eax),%eax
1094c1: 8b 40 2c mov 0x2c(%eax),%eax
switch ( name ) {
1094c4: 83 fa 0b cmp $0xb,%edx
1094c7: 77 42 ja 10950b <fpathconf+0x7f>
1094c9: ff 24 95 58 d9 11 00 jmp *0x11d958(,%edx,4)
case _PC_LINK_MAX:
return_value = the_limits->link_max;
1094d0: 8b 00 mov (%eax),%eax
break;
1094d2: eb 45 jmp 109519 <fpathconf+0x8d>
case _PC_MAX_CANON:
return_value = the_limits->max_canon;
1094d4: 8b 40 04 mov 0x4(%eax),%eax
break;
1094d7: eb 40 jmp 109519 <fpathconf+0x8d>
case _PC_MAX_INPUT:
return_value = the_limits->max_input;
1094d9: 8b 40 08 mov 0x8(%eax),%eax
break;
1094dc: eb 3b jmp 109519 <fpathconf+0x8d>
case _PC_NAME_MAX:
return_value = the_limits->name_max;
1094de: 8b 40 0c mov 0xc(%eax),%eax
break;
1094e1: eb 36 jmp 109519 <fpathconf+0x8d>
case _PC_PATH_MAX:
return_value = the_limits->path_max;
1094e3: 8b 40 10 mov 0x10(%eax),%eax
break;
1094e6: eb 31 jmp 109519 <fpathconf+0x8d>
case _PC_PIPE_BUF:
return_value = the_limits->pipe_buf;
1094e8: 8b 40 14 mov 0x14(%eax),%eax
break;
1094eb: eb 2c jmp 109519 <fpathconf+0x8d>
case _PC_CHOWN_RESTRICTED:
return_value = the_limits->posix_chown_restrictions;
1094ed: 8b 40 1c mov 0x1c(%eax),%eax
break;
1094f0: eb 27 jmp 109519 <fpathconf+0x8d>
case _PC_NO_TRUNC:
return_value = the_limits->posix_no_trunc;
1094f2: 8b 40 20 mov 0x20(%eax),%eax
break;
1094f5: eb 22 jmp 109519 <fpathconf+0x8d>
case _PC_VDISABLE:
return_value = the_limits->posix_vdisable;
1094f7: 8b 40 2c mov 0x2c(%eax),%eax
break;
1094fa: eb 1d jmp 109519 <fpathconf+0x8d>
case _PC_ASYNC_IO:
return_value = the_limits->posix_async_io;
1094fc: 8b 40 18 mov 0x18(%eax),%eax
break;
1094ff: eb 18 jmp 109519 <fpathconf+0x8d>
case _PC_PRIO_IO:
return_value = the_limits->posix_prio_io;
109501: 8b 40 24 mov 0x24(%eax),%eax
break;
109504: eb 13 jmp 109519 <fpathconf+0x8d>
case _PC_SYNC_IO:
return_value = the_limits->posix_sync_io;
109506: 8b 40 28 mov 0x28(%eax),%eax
break;
109509: eb 0e jmp 109519 <fpathconf+0x8d>
default:
rtems_set_errno_and_return_minus_one( EINVAL );
10950b: e8 04 1e 00 00 call 10b314 <__errno>
109510: c7 00 16 00 00 00 movl $0x16,(%eax)
109516: 83 c8 ff or $0xffffffff,%eax
break;
}
return return_value;
}
109519: c9 leave
10951a: c3 ret
00106734 <free>:
#include <stdlib.h>
void free(
void *ptr
)
{
106734: 55 push %ebp
106735: 89 e5 mov %esp,%ebp
106737: 53 push %ebx
106738: 52 push %edx
106739: 8b 5d 08 mov 0x8(%ebp),%ebx
MSBUMP(free_calls, 1);
10673c: ff 05 f4 e2 12 00 incl 0x12e2f4
if ( !ptr )
106742: 85 db test %ebx,%ebx
106744: 74 5f je 1067a5 <free+0x71>
return;
/*
* Do not attempt to free memory if in a critical section or ISR.
*/
if ( _System_state_Is_up(_System_state_Get()) &&
106746: 83 3d 20 e5 12 00 03 cmpl $0x3,0x12e520
10674d: 75 15 jne 106764 <free+0x30> <== NEVER TAKEN
!malloc_is_system_state_OK() ) {
10674f: e8 78 01 00 00 call 1068cc <malloc_is_system_state_OK>
return;
/*
* Do not attempt to free memory if in a critical section or ISR.
*/
if ( _System_state_Is_up(_System_state_Get()) &&
106754: 84 c0 test %al,%al
106756: 75 0c jne 106764 <free+0x30>
!malloc_is_system_state_OK() ) {
malloc_deferred_free(ptr);
106758: 89 5d 08 mov %ebx,0x8(%ebp)
RTEMS_Malloc_Heap->area_begin,
RTEMS_Malloc_Heap->area_end
);
}
}
10675b: 8b 5d fc mov -0x4(%ebp),%ebx
10675e: c9 leave
/*
* Do not attempt to free memory if in a critical section or ISR.
*/
if ( _System_state_Is_up(_System_state_Get()) &&
!malloc_is_system_state_OK() ) {
malloc_deferred_free(ptr);
10675f: e9 d1 01 00 00 jmp 106935 <malloc_deferred_free>
}
/*
* If configured, update the statistics
*/
if ( rtems_malloc_statistics_helpers )
106764: a1 04 c8 12 00 mov 0x12c804,%eax
106769: 85 c0 test %eax,%eax
10676b: 74 0a je 106777 <free+0x43>
(*rtems_malloc_statistics_helpers->at_free)(ptr);
10676d: 83 ec 0c sub $0xc,%esp
106770: 53 push %ebx
106771: ff 50 08 call *0x8(%eax)
106774: 83 c4 10 add $0x10,%esp
if ( !_Protected_heap_Free( RTEMS_Malloc_Heap, ptr ) ) {
106777: 50 push %eax
106778: 50 push %eax
106779: 53 push %ebx
10677a: ff 35 2c a2 12 00 pushl 0x12a22c
106780: e8 87 4d 00 00 call 10b50c <_Protected_heap_Free>
106785: 83 c4 10 add $0x10,%esp
106788: 84 c0 test %al,%al
10678a: 75 19 jne 1067a5 <free+0x71>
printk( "Program heap: free of bad pointer %p -- range %p - %p \n",
ptr,
RTEMS_Malloc_Heap->area_begin,
RTEMS_Malloc_Heap->area_end
10678c: a1 2c a2 12 00 mov 0x12a22c,%eax
*/
if ( rtems_malloc_statistics_helpers )
(*rtems_malloc_statistics_helpers->at_free)(ptr);
if ( !_Protected_heap_Free( RTEMS_Malloc_Heap, ptr ) ) {
printk( "Program heap: free of bad pointer %p -- range %p - %p \n",
106791: ff 70 1c pushl 0x1c(%eax)
106794: ff 70 18 pushl 0x18(%eax)
106797: 53 push %ebx
106798: 68 28 f8 11 00 push $0x11f828
10679d: e8 9a 0c 00 00 call 10743c <printk>
1067a2: 83 c4 10 add $0x10,%esp
RTEMS_Malloc_Heap->area_begin,
RTEMS_Malloc_Heap->area_end
);
}
}
1067a5: 8b 5d fc mov -0x4(%ebp),%ebx
1067a8: c9 leave
1067a9: c3 ret
0011d718 <fstat>:
int fstat(
int fd,
struct stat *sbuf
)
{
11d718: 55 push %ebp
11d719: 89 e5 mov %esp,%ebp
11d71b: 57 push %edi
11d71c: 53 push %ebx
11d71d: 8b 55 08 mov 0x8(%ebp),%edx
11d720: 8b 5d 0c mov 0xc(%ebp),%ebx
rtems_libio_t *iop;
/*
* Check to see if we were passed a valid pointer.
*/
if ( !sbuf )
11d723: 85 db test %ebx,%ebx
11d725: 75 0d jne 11d734 <fstat+0x1c> <== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one( EFAULT );
11d727: e8 b0 37 ff ff call 110edc <__errno> <== NOT EXECUTED
11d72c: c7 00 0e 00 00 00 movl $0xe,(%eax) <== NOT EXECUTED
11d732: eb 43 jmp 11d777 <fstat+0x5f> <== NOT EXECUTED
/*
* Now process the stat() request.
*/
iop = rtems_libio_iop( fd );
11d734: 3b 15 70 a2 12 00 cmp 0x12a270,%edx
11d73a: 73 0f jae 11d74b <fstat+0x33>
11d73c: 6b d2 30 imul $0x30,%edx,%edx
11d73f: 03 15 d0 e2 12 00 add 0x12e2d0,%edx
rtems_libio_check_fd( fd );
rtems_libio_check_is_open(iop);
11d745: f6 42 0d 01 testb $0x1,0xd(%edx)
11d749: 75 0d jne 11d758 <fstat+0x40>
11d74b: e8 8c 37 ff ff call 110edc <__errno>
11d750: c7 00 09 00 00 00 movl $0x9,(%eax)
11d756: eb 1f jmp 11d777 <fstat+0x5f>
/*
* Zero out the stat structure so the various support
* versions of stat don't have to.
*/
memset( sbuf, 0, sizeof(struct stat) );
11d758: b9 12 00 00 00 mov $0x12,%ecx
11d75d: 31 c0 xor %eax,%eax
11d75f: 89 df mov %ebx,%edi
11d761: f3 ab rep stos %eax,%es:(%edi)
return (*iop->pathinfo.handlers->fstat_h)( &iop->pathinfo, sbuf );
11d763: 8b 42 20 mov 0x20(%edx),%eax
11d766: 89 5d 0c mov %ebx,0xc(%ebp)
11d769: 83 c2 10 add $0x10,%edx
11d76c: 89 55 08 mov %edx,0x8(%ebp)
11d76f: 8b 40 18 mov 0x18(%eax),%eax
}
11d772: 5b pop %ebx
11d773: 5f pop %edi
11d774: 5d pop %ebp
* Zero out the stat structure so the various support
* versions of stat don't have to.
*/
memset( sbuf, 0, sizeof(struct stat) );
return (*iop->pathinfo.handlers->fstat_h)( &iop->pathinfo, sbuf );
11d775: ff e0 jmp *%eax
}
11d777: 83 c8 ff or $0xffffffff,%eax
11d77a: 5b pop %ebx
11d77b: 5f pop %edi
11d77c: 5d pop %ebp
11d77d: c3 ret
0010657c <get_disk_entry>:
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
rtems_filesystem_split_dev_t(dev, major, minor);
if (major < disktab_size && disktab != NULL) {
10657c: 3b 05 9c 1f 13 00 cmp 0x131f9c,%eax
106582: 73 32 jae 1065b6 <get_disk_entry+0x3a> <== NEVER TAKEN
}
}
static rtems_disk_device *
get_disk_entry(dev_t dev, bool lookup_only)
{
106584: 55 push %ebp
106585: 89 e5 mov %esp,%ebp
106587: 53 push %ebx
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
rtems_filesystem_split_dev_t(dev, major, minor);
if (major < disktab_size && disktab != NULL) {
106588: 8b 1d a0 1f 13 00 mov 0x131fa0,%ebx
10658e: 85 db test %ebx,%ebx
106590: 74 27 je 1065b9 <get_disk_entry+0x3d> <== NEVER TAKEN
rtems_disk_device_table *dtab = disktab + major;
106592: 8d 04 c3 lea (%ebx,%eax,8),%eax
if (minor < dtab->size && dtab->minor != NULL) {
106595: 3b 50 04 cmp 0x4(%eax),%edx
106598: 73 1f jae 1065b9 <get_disk_entry+0x3d> <== NEVER TAKEN
10659a: 8b 00 mov (%eax),%eax
10659c: 85 c0 test %eax,%eax
10659e: 74 19 je 1065b9 <get_disk_entry+0x3d> <== NEVER TAKEN
rtems_disk_device *dd = dtab->minor [minor];
1065a0: 8b 04 90 mov (%eax,%edx,4),%eax
if (dd != NULL && !lookup_only) {
1065a3: fe c9 dec %cl
1065a5: 74 14 je 1065bb <get_disk_entry+0x3f>
1065a7: 85 c0 test %eax,%eax
1065a9: 74 10 je 1065bb <get_disk_entry+0x3f> <== NEVER TAKEN
if (!dd->deleted) {
1065ab: 80 78 40 00 cmpb $0x0,0x40(%eax)
1065af: 75 08 jne 1065b9 <get_disk_entry+0x3d>
++dd->uses;
1065b1: ff 40 14 incl 0x14(%eax)
1065b4: eb 05 jmp 1065bb <get_disk_entry+0x3f>
return dd;
}
}
return NULL;
1065b6: 31 c0 xor %eax,%eax
}
1065b8: c3 ret <== NOT EXECUTED
return dd;
}
}
return NULL;
1065b9: 31 c0 xor %eax,%eax
}
1065bb: 5b pop %ebx
1065bc: 5d pop %ebp
1065bd: c3 ret
001076fc <get_sector.part.0>:
* NOTES:
* get_sector() operates with device via bdbuf library,
* and does not support devices with sector size other than 512 bytes
*/
static rtems_status_code
get_sector(int fd,
1076fc: 55 push %ebp
1076fd: 89 e5 mov %esp,%ebp
1076ff: 57 push %edi
107700: 56 push %esi
107701: 53 push %ebx
107702: 83 ec 28 sub $0x28,%esp
107705: 89 c7 mov %eax,%edi
107707: 89 d6 mov %edx,%esi
107709: 89 cb mov %ecx,%ebx
new_off = lseek(fd, off, SEEK_SET);
if (new_off != off) {
return RTEMS_IO_ERROR;
}
s = (rtems_sector_data_t *) malloc(sizeof(rtems_sector_data_t) + RTEMS_IDE_SECTOR_SIZE);
10770b: 68 04 02 00 00 push $0x204
107710: e8 2b 12 00 00 call 108940 <malloc>
107715: 89 c2 mov %eax,%edx
if (s == NULL)
107717: 83 c4 10 add $0x10,%esp
{
return RTEMS_NO_MEMORY;
10771a: b8 1a 00 00 00 mov $0x1a,%eax
if (new_off != off) {
return RTEMS_IO_ERROR;
}
s = (rtems_sector_data_t *) malloc(sizeof(rtems_sector_data_t) + RTEMS_IDE_SECTOR_SIZE);
if (s == NULL)
10771f: 85 d2 test %edx,%edx
107721: 74 3b je 10775e <get_sector.part.0+0x62><== NEVER TAKEN
{
return RTEMS_NO_MEMORY;
}
n = read(fd, s->data, RTEMS_IDE_SECTOR_SIZE);
107723: 50 push %eax
107724: 68 00 02 00 00 push $0x200
107729: 8d 42 04 lea 0x4(%edx),%eax
10772c: 50 push %eax
10772d: 57 push %edi
10772e: 89 55 e4 mov %edx,-0x1c(%ebp)
107731: e8 6a 1c 00 00 call 1093a0 <read>
if (n != RTEMS_IDE_SECTOR_SIZE)
107736: 83 c4 10 add $0x10,%esp
107739: 3d 00 02 00 00 cmp $0x200,%eax
10773e: 8b 55 e4 mov -0x1c(%ebp),%edx
107741: 74 13 je 107756 <get_sector.part.0+0x5a><== ALWAYS TAKEN
{
free(s);
107743: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
107746: 52 push %edx <== NOT EXECUTED
107747: e8 dc 0c 00 00 call 108428 <free> <== NOT EXECUTED
10774c: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
return RTEMS_IO_ERROR;
10774f: b8 1b 00 00 00 mov $0x1b,%eax <== NOT EXECUTED
107754: eb 08 jmp 10775e <get_sector.part.0+0x62><== NOT EXECUTED
}
s->sector_num = sector_num;
107756: 89 32 mov %esi,(%edx)
*sector = s;
107758: 89 13 mov %edx,(%ebx)
return RTEMS_SUCCESSFUL;
10775a: 31 c0 xor %eax,%eax
10775c: eb 00 jmp 10775e <get_sector.part.0+0x62>
}
10775e: 8d 65 f4 lea -0xc(%ebp),%esp
107761: 5b pop %ebx
107762: 5e pop %esi
107763: 5f pop %edi
107764: 5d pop %ebp
107765: c3 ret
0012c628 <getdents>:
int getdents(
int dd_fd,
char *dd_buf,
int dd_len
)
{
12c628: 55 push %ebp
12c629: 89 e5 mov %esp,%ebp
12c62b: 57 push %edi
12c62c: 56 push %esi
12c62d: 53 push %ebx
12c62e: 83 ec 0c sub $0xc,%esp
12c631: 8b 45 08 mov 0x8(%ebp),%eax
12c634: 8b 75 0c mov 0xc(%ebp),%esi
12c637: 8b 7d 10 mov 0x10(%ebp),%edi
rtems_filesystem_node_types_t type;
/*
* Get the file control block structure associated with the file descriptor
*/
iop = rtems_libio_iop( dd_fd );
12c63a: 31 db xor %ebx,%ebx
12c63c: 3b 05 08 f7 13 00 cmp 0x13f708,%eax
12c642: 73 09 jae 12c64d <getdents+0x25> <== NEVER TAKEN
12c644: 6b d8 30 imul $0x30,%eax,%ebx
12c647: 03 1d d8 38 15 00 add 0x1538d8,%ebx
/*
* Make sure we are working on a directory
*/
type = rtems_filesystem_node_type( &iop->pathinfo );
12c64d: 83 ec 0c sub $0xc,%esp
12c650: 8d 43 10 lea 0x10(%ebx),%eax
12c653: 50 push %eax
12c654: e8 d3 f3 fd ff call 10ba2c <rtems_filesystem_node_type>
if ( type != RTEMS_FILESYSTEM_DIRECTORY )
12c659: 83 c4 10 add $0x10,%esp
12c65c: 85 c0 test %eax,%eax
12c65e: 75 18 jne 12c678 <getdents+0x50>
/*
* Return the number of bytes that were actually transfered as a result
* of the read attempt.
*/
return (*iop->pathinfo.handlers->read_h)( iop, dd_buf, dd_len );
12c660: 8b 43 20 mov 0x20(%ebx),%eax
12c663: 89 7d 10 mov %edi,0x10(%ebp)
12c666: 89 75 0c mov %esi,0xc(%ebp)
12c669: 89 5d 08 mov %ebx,0x8(%ebp)
12c66c: 8b 40 08 mov 0x8(%eax),%eax
}
12c66f: 8d 65 f4 lea -0xc(%ebp),%esp
12c672: 5b pop %ebx
12c673: 5e pop %esi
12c674: 5f pop %edi
12c675: 5d pop %ebp
/*
* Return the number of bytes that were actually transfered as a result
* of the read attempt.
*/
return (*iop->pathinfo.handlers->read_h)( iop, dd_buf, dd_len );
12c676: ff e0 jmp *%eax
/*
* Make sure we are working on a directory
*/
type = rtems_filesystem_node_type( &iop->pathinfo );
if ( type != RTEMS_FILESYSTEM_DIRECTORY )
rtems_set_errno_and_return_minus_one( ENOTDIR );
12c678: e8 4f 2b ff ff call 11f1cc <__errno>
12c67d: c7 00 14 00 00 00 movl $0x14,(%eax)
/*
* Return the number of bytes that were actually transfered as a result
* of the read attempt.
*/
return (*iop->pathinfo.handlers->read_h)( iop, dd_buf, dd_len );
}
12c683: 83 c8 ff or $0xffffffff,%eax
12c686: 8d 65 f4 lea -0xc(%ebp),%esp
12c689: 5b pop %ebx
12c68a: 5e pop %esi
12c68b: 5f pop %edi
12c68c: 5d pop %ebp
12c68d: c3 ret
001221a0 <init_etc_passwd_group>:
void init_etc_passwd_group(void)
{
FILE *fp;
static char etc_passwd_initted = 0;
if (etc_passwd_initted)
1221a0: 80 3d 5c da 16 00 00 cmpb $0x0,0x16da5c
1221a7: 0f 85 c1 00 00 00 jne 12226e <init_etc_passwd_group+0xce>
/*
* Initialize useable but dummy databases
*/
void init_etc_passwd_group(void)
{
1221ad: 55 push %ebp
1221ae: 89 e5 mov %esp,%ebp
1221b0: 53 push %ebx
1221b1: 83 ec 0c sub $0xc,%esp
FILE *fp;
static char etc_passwd_initted = 0;
if (etc_passwd_initted)
return;
etc_passwd_initted = 1;
1221b4: c6 05 5c da 16 00 01 movb $0x1,0x16da5c
mkdir("/etc", 0777);
1221bb: 68 ff 01 00 00 push $0x1ff
1221c0: 68 41 03 15 00 push $0x150341
1221c5: e8 ea 46 fe ff call 1068b4 <mkdir>
/*
* Initialize /etc/passwd
*/
if ((fp = fopen("/etc/passwd", "r")) != NULL) {
1221ca: 58 pop %eax
1221cb: 5a pop %edx
1221cc: 68 7b c9 14 00 push $0x14c97b
1221d1: 68 46 03 15 00 push $0x150346
1221d6: e8 41 f6 00 00 call 13181c <fopen>
1221db: 83 c4 10 add $0x10,%esp
1221de: 85 c0 test %eax,%eax
1221e0: 74 06 je 1221e8 <init_etc_passwd_group+0x48>
fclose(fp);
1221e2: 83 ec 0c sub $0xc,%esp
1221e5: 50 push %eax
1221e6: eb 2a jmp 122212 <init_etc_passwd_group+0x72>
}
else if ((fp = fopen("/etc/passwd", "w")) != NULL) {
1221e8: 50 push %eax
1221e9: 50 push %eax
1221ea: 68 78 c9 14 00 push $0x14c978
1221ef: 68 46 03 15 00 push $0x150346
1221f4: e8 23 f6 00 00 call 13181c <fopen>
1221f9: 89 c3 mov %eax,%ebx
1221fb: 83 c4 10 add $0x10,%esp
1221fe: 85 c0 test %eax,%eax
122200: 74 18 je 12221a <init_etc_passwd_group+0x7a><== NEVER TAKEN
fprintf(fp, "root:*:0:0:root::/:/bin/sh\n"
122202: 50 push %eax
122203: 50 push %eax
122204: 53 push %ebx
122205: 68 52 03 15 00 push $0x150352
12220a: e8 7d f7 00 00 call 13198c <fputs>
"rtems:*:1:1:RTEMS Application::/:/bin/sh\n"
"tty:!:2:2:tty owner::/:/bin/false\n" );
fclose(fp);
12220f: 89 1c 24 mov %ebx,(%esp)
122212: e8 8d ed 00 00 call 130fa4 <fclose>
122217: 83 c4 10 add $0x10,%esp
}
/*
* Initialize /etc/group
*/
if ((fp = fopen("/etc/group", "r")) != NULL) {
12221a: 53 push %ebx
12221b: 53 push %ebx
12221c: 68 7b c9 14 00 push $0x14c97b
122221: 68 b9 03 15 00 push $0x1503b9
122226: e8 f1 f5 00 00 call 13181c <fopen>
12222b: 83 c4 10 add $0x10,%esp
12222e: 85 c0 test %eax,%eax
122230: 74 06 je 122238 <init_etc_passwd_group+0x98>
fclose(fp);
122232: 83 ec 0c sub $0xc,%esp
122235: 50 push %eax
122236: eb 2a jmp 122262 <init_etc_passwd_group+0xc2>
}
else if ((fp = fopen("/etc/group", "w")) != NULL) {
122238: 51 push %ecx
122239: 51 push %ecx
12223a: 68 78 c9 14 00 push $0x14c978
12223f: 68 b9 03 15 00 push $0x1503b9
122244: e8 d3 f5 00 00 call 13181c <fopen>
122249: 89 c3 mov %eax,%ebx
12224b: 83 c4 10 add $0x10,%esp
12224e: 85 c0 test %eax,%eax
122250: 74 18 je 12226a <init_etc_passwd_group+0xca><== NEVER TAKEN
fprintf( fp, "root:x:0:root\n"
122252: 52 push %edx
122253: 52 push %edx
122254: 50 push %eax
122255: 68 c4 03 15 00 push $0x1503c4
12225a: e8 2d f7 00 00 call 13198c <fputs>
"rtems:x:1:rtems\n"
"tty:x:2:tty\n" );
fclose(fp);
12225f: 89 1c 24 mov %ebx,(%esp)
122262: e8 3d ed 00 00 call 130fa4 <fclose>
122267: 83 c4 10 add $0x10,%esp
}
}
12226a: 8b 5d fc mov -0x4(%ebp),%ebx
12226d: c9 leave
12226e: c3 ret
00108c6f <iproc>:
/*
* Process a single input character
*/
static int
iproc (unsigned char c, struct rtems_termios_tty *tty)
{
108c6f: 55 push %ebp
108c70: 89 e5 mov %esp,%ebp
108c72: 53 push %ebx
108c73: 83 ec 14 sub $0x14,%esp
108c76: 89 d3 mov %edx,%ebx
108c78: 88 c1 mov %al,%cl
if (tty->termios.c_iflag & ISTRIP)
108c7a: 8b 42 30 mov 0x30(%edx),%eax
108c7d: a8 20 test $0x20,%al
108c7f: 74 03 je 108c84 <iproc+0x15> <== ALWAYS TAKEN
c &= 0x7f;
108c81: 83 e1 7f and $0x7f,%ecx <== NOT EXECUTED
if (tty->termios.c_iflag & IUCLC)
108c84: f6 c4 02 test $0x2,%ah
108c87: 74 17 je 108ca0 <iproc+0x31>
c = tolower (c);
108c89: 0f b6 c9 movzbl %cl,%ecx
108c8c: 8b 15 88 c2 12 00 mov 0x12c288,%edx
108c92: 8a 54 0a 01 mov 0x1(%edx,%ecx,1),%dl
108c96: 83 e2 03 and $0x3,%edx
108c99: fe ca dec %dl
108c9b: 75 03 jne 108ca0 <iproc+0x31>
108c9d: 83 c1 20 add $0x20,%ecx
if (c == '\r') {
108ca0: 80 f9 0d cmp $0xd,%cl
108ca3: 75 12 jne 108cb7 <iproc+0x48>
if (tty->termios.c_iflag & IGNCR)
108ca5: a8 80 test $0x80,%al
108ca7: 74 05 je 108cae <iproc+0x3f> <== ALWAYS TAKEN
108ca9: e9 20 01 00 00 jmp 108dce <iproc+0x15f> <== NOT EXECUTED
return 0;
if (tty->termios.c_iflag & ICRNL)
108cae: f6 c4 01 test $0x1,%ah
108cb1: 74 19 je 108ccc <iproc+0x5d> <== NEVER TAKEN
c = '\n';
108cb3: b1 0a mov $0xa,%cl
108cb5: eb 15 jmp 108ccc <iproc+0x5d>
} else if ((c == '\n') && (tty->termios.c_iflag & INLCR)) {
108cb7: 80 f9 0a cmp $0xa,%cl
108cba: 75 08 jne 108cc4 <iproc+0x55>
108cbc: a8 40 test $0x40,%al
108cbe: 74 0c je 108ccc <iproc+0x5d> <== ALWAYS TAKEN
c = '\r';
108cc0: b1 0d mov $0xd,%cl <== NOT EXECUTED
108cc2: eb 08 jmp 108ccc <iproc+0x5d> <== NOT EXECUTED
}
if ((c != '\0') && (tty->termios.c_lflag & ICANON)) {
108cc4: 84 c9 test %cl,%cl
108cc6: 0f 84 d4 00 00 00 je 108da0 <iproc+0x131> <== NEVER TAKEN
108ccc: 8b 43 3c mov 0x3c(%ebx),%eax
108ccf: a8 02 test $0x2,%al
108cd1: 0f 84 c9 00 00 00 je 108da0 <iproc+0x131>
if (c == tty->termios.c_cc[VERASE]) {
108cd7: 3a 4b 43 cmp 0x43(%ebx),%cl
108cda: 75 0d jne 108ce9 <iproc+0x7a>
108cdc: 31 d2 xor %edx,%edx
* FIXME: Some of the tests should check for IEXTEN, too.
*/
static void
erase (struct rtems_termios_tty *tty, int lineFlag)
{
if (tty->ccount == 0)
108cde: 83 7b 20 00 cmpl $0x0,0x20(%ebx)
108ce2: 75 59 jne 108d3d <iproc+0xce>
108ce4: e9 e5 00 00 00 jmp 108dce <iproc+0x15f>
if ((c != '\0') && (tty->termios.c_lflag & ICANON)) {
if (c == tty->termios.c_cc[VERASE]) {
erase (tty, 0);
return 0;
}
else if (c == tty->termios.c_cc[VKILL]) {
108ce9: 3a 4b 44 cmp 0x44(%ebx),%cl
108cec: 75 5b jne 108d49 <iproc+0xda>
* FIXME: Some of the tests should check for IEXTEN, too.
*/
static void
erase (struct rtems_termios_tty *tty, int lineFlag)
{
if (tty->ccount == 0)
108cee: 83 7b 20 00 cmpl $0x0,0x20(%ebx)
108cf2: 0f 84 d6 00 00 00 je 108dce <iproc+0x15f> <== NEVER TAKEN
return;
if (lineFlag) {
if (!(tty->termios.c_lflag & ECHO)) {
108cf8: a8 08 test $0x8,%al
108cfa: 75 0c jne 108d08 <iproc+0x99> <== ALWAYS TAKEN
tty->ccount = 0;
108cfc: c7 43 20 00 00 00 00 movl $0x0,0x20(%ebx) <== NOT EXECUTED
108d03: e9 c6 00 00 00 jmp 108dce <iproc+0x15f> <== NOT EXECUTED
108d08: ba 01 00 00 00 mov $0x1,%edx
return;
}
if (!(tty->termios.c_lflag & ECHOE)) {
108d0d: a8 10 test $0x10,%al
108d0f: 75 2c jne 108d3d <iproc+0xce> <== ALWAYS TAKEN
tty->ccount = 0;
108d11: c7 43 20 00 00 00 00 movl $0x0,0x20(%ebx) <== NOT EXECUTED
echo (tty->termios.c_cc[VKILL], tty);
108d18: 0f b6 c1 movzbl %cl,%eax <== NOT EXECUTED
108d1b: 89 da mov %ebx,%edx <== NOT EXECUTED
108d1d: e8 c6 fd ff ff call 108ae8 <echo> <== NOT EXECUTED
if (tty->termios.c_lflag & ECHOK)
108d22: f6 43 3c 20 testb $0x20,0x3c(%ebx) <== NOT EXECUTED
108d26: 0f 84 a2 00 00 00 je 108dce <iproc+0x15f> <== NOT EXECUTED
echo ('\n', tty);
108d2c: 89 da mov %ebx,%edx <== NOT EXECUTED
108d2e: b8 0a 00 00 00 mov $0xa,%eax <== NOT EXECUTED
108d33: e8 b0 fd ff ff call 108ae8 <echo> <== NOT EXECUTED
108d38: e9 91 00 00 00 jmp 108dce <iproc+0x15f> <== NOT EXECUTED
108d3d: 89 d8 mov %ebx,%eax
108d3f: e8 fc fd ff ff call 108b40 <erase.part.2>
108d44: e9 85 00 00 00 jmp 108dce <iproc+0x15f>
}
else if (c == tty->termios.c_cc[VKILL]) {
erase (tty, 1);
return 0;
}
else if (c == tty->termios.c_cc[VEOF]) {
108d49: 3a 4b 45 cmp 0x45(%ebx),%cl
108d4c: 0f 84 80 00 00 00 je 108dd2 <iproc+0x163> <== NEVER TAKEN
return 1;
} else if (c == '\n') {
108d52: 80 f9 0a cmp $0xa,%cl
108d55: 75 1c jne 108d73 <iproc+0x104>
if (tty->termios.c_lflag & (ECHO | ECHONL))
108d57: a8 48 test $0x48,%al
108d59: 74 0c je 108d67 <iproc+0xf8> <== NEVER TAKEN
echo (c, tty);
108d5b: 89 da mov %ebx,%edx
108d5d: b8 0a 00 00 00 mov $0xa,%eax
108d62: e8 81 fd ff ff call 108ae8 <echo>
tty->cbuf[tty->ccount++] = c;
108d67: 8b 43 20 mov 0x20(%ebx),%eax
108d6a: 8b 53 1c mov 0x1c(%ebx),%edx
108d6d: c6 04 02 0a movb $0xa,(%edx,%eax,1)
108d71: eb 27 jmp 108d9a <iproc+0x12b>
return 1;
} else if ((c == tty->termios.c_cc[VEOL]) ||
108d73: 3a 4b 4c cmp 0x4c(%ebx),%cl
108d76: 74 05 je 108d7d <iproc+0x10e> <== NEVER TAKEN
108d78: 3a 4b 51 cmp 0x51(%ebx),%cl
108d7b: 75 23 jne 108da0 <iproc+0x131> <== ALWAYS TAKEN
(c == tty->termios.c_cc[VEOL2])) {
if (tty->termios.c_lflag & ECHO)
108d7d: a8 08 test $0x8,%al <== NOT EXECUTED
108d7f: 74 10 je 108d91 <iproc+0x122> <== NOT EXECUTED
echo (c, tty);
108d81: 0f b6 c1 movzbl %cl,%eax <== NOT EXECUTED
108d84: 89 da mov %ebx,%edx <== NOT EXECUTED
108d86: 88 4d f4 mov %cl,-0xc(%ebp) <== NOT EXECUTED
108d89: e8 5a fd ff ff call 108ae8 <echo> <== NOT EXECUTED
108d8e: 8a 4d f4 mov -0xc(%ebp),%cl <== NOT EXECUTED
tty->cbuf[tty->ccount++] = c;
108d91: 8b 43 20 mov 0x20(%ebx),%eax <== NOT EXECUTED
108d94: 8b 53 1c mov 0x1c(%ebx),%edx <== NOT EXECUTED
108d97: 88 0c 02 mov %cl,(%edx,%eax,1) <== NOT EXECUTED
108d9a: 40 inc %eax
108d9b: 89 43 20 mov %eax,0x20(%ebx)
108d9e: eb 32 jmp 108dd2 <iproc+0x163>
}
/*
* FIXME: Should do IMAXBEL handling somehow
*/
if (tty->ccount < (CBUFSIZE-1)) {
108da0: a1 0c c1 12 00 mov 0x12c10c,%eax
108da5: 48 dec %eax
108da6: 39 43 20 cmp %eax,0x20(%ebx)
108da9: 73 23 jae 108dce <iproc+0x15f> <== NEVER TAKEN
if (tty->termios.c_lflag & ECHO)
108dab: f6 43 3c 08 testb $0x8,0x3c(%ebx)
108daf: 74 10 je 108dc1 <iproc+0x152> <== NEVER TAKEN
echo (c, tty);
108db1: 0f b6 c1 movzbl %cl,%eax
108db4: 89 da mov %ebx,%edx
108db6: 88 4d f4 mov %cl,-0xc(%ebp)
108db9: e8 2a fd ff ff call 108ae8 <echo>
108dbe: 8a 4d f4 mov -0xc(%ebp),%cl
tty->cbuf[tty->ccount++] = c;
108dc1: 8b 43 20 mov 0x20(%ebx),%eax
108dc4: 8b 53 1c mov 0x1c(%ebx),%edx
108dc7: 88 0c 02 mov %cl,(%edx,%eax,1)
108dca: 40 inc %eax
108dcb: 89 43 20 mov %eax,0x20(%ebx)
}
return 0;
108dce: 31 c0 xor %eax,%eax
108dd0: eb 05 jmp 108dd7 <iproc+0x168>
else if (c == tty->termios.c_cc[VKILL]) {
erase (tty, 1);
return 0;
}
else if (c == tty->termios.c_cc[VEOF]) {
return 1;
108dd2: b8 01 00 00 00 mov $0x1,%eax
if (tty->termios.c_lflag & ECHO)
echo (c, tty);
tty->cbuf[tty->ccount++] = c;
}
return 0;
}
108dd7: 83 c4 14 add $0x14,%esp
108dda: 5b pop %ebx
108ddb: 5d pop %ebp
108ddc: c3 ret
0011d990 <killinfo>:
int killinfo(
pid_t pid,
int sig,
const union sigval *value
)
{
11d990: 55 push %ebp
11d991: 89 e5 mov %esp,%ebp
11d993: 57 push %edi
11d994: 56 push %esi
11d995: 53 push %ebx
11d996: 83 ec 3c sub $0x3c,%esp
11d999: 8b 5d 0c mov 0xc(%ebp),%ebx
11d99c: 8b 75 10 mov 0x10(%ebp),%esi
POSIX_signals_Siginfo_node *psiginfo;
/*
* Only supported for the "calling process" (i.e. this node).
*/
if ( pid != getpid() )
11d99f: e8 f0 fd ff ff call 11d794 <getpid>
11d9a4: 39 45 08 cmp %eax,0x8(%ebp)
11d9a7: 74 10 je 11d9b9 <killinfo+0x29>
rtems_set_errno_and_return_minus_one( ESRCH );
11d9a9: e8 2e 35 ff ff call 110edc <__errno>
11d9ae: c7 00 03 00 00 00 movl $0x3,(%eax)
11d9b4: e9 f1 01 00 00 jmp 11dbaa <killinfo+0x21a>
/*
* Validate the signal passed.
*/
if ( !sig )
11d9b9: 85 db test %ebx,%ebx
11d9bb: 75 02 jne 11d9bf <killinfo+0x2f>
11d9bd: eb 08 jmp 11d9c7 <killinfo+0x37>
static inline bool is_valid_signo(
int signo
)
{
return ((signo) >= 1 && (signo) <= 32 );
11d9bf: 8d 4b ff lea -0x1(%ebx),%ecx
rtems_set_errno_and_return_minus_one( EINVAL );
if ( !is_valid_signo(sig) )
11d9c2: 83 f9 1f cmp $0x1f,%ecx
11d9c5: 76 10 jbe 11d9d7 <killinfo+0x47>
rtems_set_errno_and_return_minus_one( EINVAL );
11d9c7: e8 10 35 ff ff call 110edc <__errno>
11d9cc: c7 00 16 00 00 00 movl $0x16,(%eax)
11d9d2: e9 d3 01 00 00 jmp 11dbaa <killinfo+0x21a>
/*
* If the signal is being ignored, then we are out of here.
*/
if ( _POSIX_signals_Vectors[ sig ].sa_handler == SIG_IGN )
11d9d7: 6b c3 0c imul $0xc,%ebx,%eax
11d9da: 83 b8 30 e9 12 00 01 cmpl $0x1,0x12e930(%eax)
11d9e1: 0f 84 e9 01 00 00 je 11dbd0 <killinfo+0x240>
/*
* P1003.1c/Draft 10, p. 33 says that certain signals should always
* be directed to the executing thread such as those caused by hardware
* faults.
*/
if ( (sig == SIGFPE) || (sig == SIGILL) || (sig == SIGSEGV ) )
11d9e7: 83 fb 04 cmp $0x4,%ebx
11d9ea: 74 0a je 11d9f6 <killinfo+0x66>
11d9ec: 83 fb 08 cmp $0x8,%ebx
11d9ef: 74 05 je 11d9f6 <killinfo+0x66>
11d9f1: 83 fb 0b cmp $0xb,%ebx
11d9f4: 75 16 jne 11da0c <killinfo+0x7c>
return pthread_kill( pthread_self(), sig );
11d9f6: e8 9d 03 00 00 call 11dd98 <pthread_self>
11d9fb: 56 push %esi
11d9fc: 56 push %esi
11d9fd: 53 push %ebx
11d9fe: 50 push %eax
11d9ff: e8 ec 02 00 00 call 11dcf0 <pthread_kill>
11da04: 83 c4 10 add $0x10,%esp
11da07: e9 c6 01 00 00 jmp 11dbd2 <killinfo+0x242>
static inline sigset_t signo_to_mask(
uint32_t sig
)
{
return 1u << (sig - 1);
11da0c: bf 01 00 00 00 mov $0x1,%edi
11da11: d3 e7 shl %cl,%edi
/*
* Build up a siginfo structure
*/
siginfo = &siginfo_struct;
siginfo->si_signo = sig;
11da13: 89 5d dc mov %ebx,-0x24(%ebp)
siginfo->si_code = SI_USER;
11da16: c7 45 e0 01 00 00 00 movl $0x1,-0x20(%ebp)
if ( !value ) {
11da1d: 85 f6 test %esi,%esi
11da1f: 75 09 jne 11da2a <killinfo+0x9a>
siginfo->si_value.sival_int = 0;
11da21: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
11da28: eb 05 jmp 11da2f <killinfo+0x9f>
} else {
siginfo->si_value = *value;
11da2a: 8b 06 mov (%esi),%eax
11da2c: 89 45 e4 mov %eax,-0x1c(%ebp)
*
* This rountine increments the thread dispatch level
*/
RTEMS_INLINE_ROUTINE uint32_t _Thread_Dispatch_increment_disable_level(void)
{
_Thread_Dispatch_disable_level++;
11da2f: a1 e4 e3 12 00 mov 0x12e3e4,%eax
11da34: 40 inc %eax
11da35: a3 e4 e3 12 00 mov %eax,0x12e3e4
return _Thread_Dispatch_disable_level;
11da3a: a1 e4 e3 12 00 mov 0x12e3e4,%eax
/*
* Is the currently executing thread interested? If so then it will
* get it an execute it as soon as the dispatcher executes.
*/
the_thread = _Thread_Executing;
11da3f: a1 ec e8 12 00 mov 0x12e8ec,%eax
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
if ( _POSIX_signals_Is_interested( api, mask ) ) {
11da44: 8b 90 e8 00 00 00 mov 0xe8(%eax),%edx
11da4a: 8b 92 d0 00 00 00 mov 0xd0(%edx),%edx
11da50: f7 d2 not %edx
11da52: 85 d7 test %edx,%edi
11da54: 0f 85 fa 00 00 00 jne 11db54 <killinfo+0x1c4>
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_First(
Chain_Control *the_chain
)
{
return _Chain_Head( the_chain )->next;
11da5a: a1 b4 ea 12 00 mov 0x12eab4,%eax
/* XXX violation of visibility -- need to define thread queue support */
the_chain = &_POSIX_signals_Wait_queue.Queues.Fifo;
for ( the_node = _Chain_First( the_chain );
11da5f: eb 21 jmp 11da82 <killinfo+0xf2>
!_Chain_Is_tail( the_chain, the_node ) ;
the_node = the_node->next ) {
the_thread = (Thread_Control *)the_node;
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
11da61: 8b 90 e8 00 00 00 mov 0xe8(%eax),%edx
#endif
/*
* Is this thread is actually blocked waiting for the signal?
*/
if (the_thread->Wait.option & mask)
11da67: 85 78 30 test %edi,0x30(%eax)
11da6a: 0f 85 e4 00 00 00 jne 11db54 <killinfo+0x1c4>
/*
* Is this thread is blocked waiting for another signal but has
* not blocked this one?
*/
if (~api->signals_blocked & mask)
11da70: 8b 92 d0 00 00 00 mov 0xd0(%edx),%edx
11da76: f7 d2 not %edx
11da78: 85 d7 test %edx,%edi
11da7a: 0f 85 d4 00 00 00 jne 11db54 <killinfo+0x1c4>
the_chain = &_POSIX_signals_Wait_queue.Queues.Fifo;
for ( the_node = _Chain_First( the_chain );
!_Chain_Is_tail( the_chain, the_node ) ;
the_node = the_node->next ) {
11da80: 8b 00 mov (%eax),%eax
/* XXX violation of visibility -- need to define thread queue support */
the_chain = &_POSIX_signals_Wait_queue.Queues.Fifo;
for ( the_node = _Chain_First( the_chain );
11da82: 3d b8 ea 12 00 cmp $0x12eab8,%eax
11da87: 75 d8 jne 11da61 <killinfo+0xd1>
* NOTES:
*
* + rtems internal threads do not receive signals.
*/
interested = NULL;
interested_priority = PRIORITY_MAXIMUM + 1;
11da89: 0f b6 05 88 a1 12 00 movzbl 0x12a188,%eax
11da90: 40 inc %eax
11da91: 89 45 bc mov %eax,-0x44(%ebp)
*
* NOTES:
*
* + rtems internal threads do not receive signals.
*/
interested = NULL;
11da94: 31 c0 xor %eax,%eax
interested_priority = PRIORITY_MAXIMUM + 1;
for (the_api = OBJECTS_CLASSIC_API; the_api <= OBJECTS_APIS_LAST; the_api++) {
11da96: c7 45 cc 02 00 00 00 movl $0x2,-0x34(%ebp)
/*
* This can occur when no one is interested and an API is not configured.
*/
if ( !_Objects_Information_table[ the_api ] )
11da9d: 8b 4d cc mov -0x34(%ebp),%ecx
11daa0: 8b 14 8d bc e3 12 00 mov 0x12e3bc(,%ecx,4),%edx
11daa7: 85 d2 test %edx,%edx
11daa9: 0f 84 94 00 00 00 je 11db43 <killinfo+0x1b3> <== NEVER TAKEN
continue;
the_info = _Objects_Information_table[ the_api ][ 1 ];
11daaf: 8b 52 04 mov 0x4(%edx),%edx
*/
if ( !the_info )
continue;
#endif
maximum = the_info->maximum;
11dab2: 0f b7 72 10 movzwl 0x10(%edx),%esi
11dab6: 89 75 c4 mov %esi,-0x3c(%ebp)
object_table = the_info->local_table;
11dab9: 8b 52 1c mov 0x1c(%edx),%edx
11dabc: 89 55 c0 mov %edx,-0x40(%ebp)
for ( index = 1 ; index <= maximum ; index++ ) {
11dabf: c7 45 d0 01 00 00 00 movl $0x1,-0x30(%ebp)
11dac6: eb 73 jmp 11db3b <killinfo+0x1ab>
the_thread = (Thread_Control *) object_table[ index ];
11dac8: 8b 4d d0 mov -0x30(%ebp),%ecx
11dacb: 8b 75 c0 mov -0x40(%ebp),%esi
11dace: 8b 14 8e mov (%esi,%ecx,4),%edx
if ( !the_thread )
11dad1: 85 d2 test %edx,%edx
11dad3: 74 63 je 11db38 <killinfo+0x1a8>
/*
* If this thread is of lower priority than the interested thread,
* go on to the next thread.
*/
if ( the_thread->current_priority > interested_priority )
11dad5: 8b 4a 14 mov 0x14(%edx),%ecx
11dad8: 89 4d d4 mov %ecx,-0x2c(%ebp)
11dadb: 8b 75 bc mov -0x44(%ebp),%esi
11dade: 39 f1 cmp %esi,%ecx
11dae0: 77 56 ja 11db38 <killinfo+0x1a8>
#if defined(RTEMS_DEBUG)
if ( !api )
continue;
#endif
if ( !_POSIX_signals_Is_interested( api, mask ) )
11dae2: 8b b2 e8 00 00 00 mov 0xe8(%edx),%esi
11dae8: 8b b6 d0 00 00 00 mov 0xd0(%esi),%esi
11daee: f7 d6 not %esi
11daf0: 85 f7 test %esi,%edi
11daf2: 74 44 je 11db38 <killinfo+0x1a8>
*
* NOTE: We initialized interested_priority to PRIORITY_MAXIMUM + 1
* so we never have to worry about deferencing a NULL
* interested thread.
*/
if ( the_thread->current_priority < interested_priority ) {
11daf4: 8b 75 bc mov -0x44(%ebp),%esi
11daf7: 39 f1 cmp %esi,%ecx
11daf9: 72 2d jb 11db28 <killinfo+0x198>
* and blocking interruptibutable by signal.
*
* If the interested thread is ready, don't think about changing.
*/
if ( interested && !_States_Is_ready( interested->current_state ) ) {
11dafb: 85 c0 test %eax,%eax
11dafd: 74 39 je 11db38 <killinfo+0x1a8> <== NEVER TAKEN
11daff: 8b 48 10 mov 0x10(%eax),%ecx
11db02: 89 4d c8 mov %ecx,-0x38(%ebp)
11db05: 85 c9 test %ecx,%ecx
11db07: 74 2f je 11db38 <killinfo+0x1a8> <== NEVER TAKEN
/* preferred ready over blocked */
DEBUG_STEP("5");
if ( _States_Is_ready( the_thread->current_state ) ) {
11db09: 8b 72 10 mov 0x10(%edx),%esi
11db0c: 85 f6 test %esi,%esi
11db0e: 74 20 je 11db30 <killinfo+0x1a0>
continue;
}
DEBUG_STEP("6");
/* prefer blocked/interruptible over blocked/not interruptible */
if ( !_States_Is_interruptible_by_signal(interested->current_state) ) {
11db10: 81 e1 00 00 00 10 and $0x10000000,%ecx
11db16: 75 20 jne 11db38 <killinfo+0x1a8>
DEBUG_STEP("7");
if ( _States_Is_interruptible_by_signal(the_thread->current_state) ) {
11db18: 81 e6 00 00 00 10 and $0x10000000,%esi
11db1e: 74 18 je 11db38 <killinfo+0x1a8>
11db20: 8b 75 d4 mov -0x2c(%ebp),%esi
11db23: 89 75 bc mov %esi,-0x44(%ebp)
11db26: eb 0e jmp 11db36 <killinfo+0x1a6>
*
* NOTE: We initialized interested_priority to PRIORITY_MAXIMUM + 1
* so we never have to worry about deferencing a NULL
* interested thread.
*/
if ( the_thread->current_priority < interested_priority ) {
11db28: 8b 45 d4 mov -0x2c(%ebp),%eax
11db2b: 89 45 bc mov %eax,-0x44(%ebp)
11db2e: eb 06 jmp 11db36 <killinfo+0x1a6>
*/
if ( interested && !_States_Is_ready( interested->current_state ) ) {
/* preferred ready over blocked */
DEBUG_STEP("5");
if ( _States_Is_ready( the_thread->current_state ) ) {
11db30: 8b 4d d4 mov -0x2c(%ebp),%ecx
11db33: 89 4d bc mov %ecx,-0x44(%ebp)
11db36: 89 d0 mov %edx,%eax
#endif
maximum = the_info->maximum;
object_table = the_info->local_table;
for ( index = 1 ; index <= maximum ; index++ ) {
11db38: ff 45 d0 incl -0x30(%ebp)
11db3b: 8b 75 c4 mov -0x3c(%ebp),%esi
11db3e: 39 75 d0 cmp %esi,-0x30(%ebp)
11db41: 76 85 jbe 11dac8 <killinfo+0x138>
* + rtems internal threads do not receive signals.
*/
interested = NULL;
interested_priority = PRIORITY_MAXIMUM + 1;
for (the_api = OBJECTS_CLASSIC_API; the_api <= OBJECTS_APIS_LAST; the_api++) {
11db43: ff 45 cc incl -0x34(%ebp)
11db46: 83 7d cc 04 cmpl $0x4,-0x34(%ebp)
11db4a: 0f 85 4d ff ff ff jne 11da9d <killinfo+0x10d>
}
}
}
}
if ( interested ) {
11db50: 85 c0 test %eax,%eax
11db52: 74 1a je 11db6e <killinfo+0x1de>
/*
* Returns true if the signal was synchronously given to a thread
* blocked waiting for the signal.
*/
if ( _POSIX_signals_Unblock_thread( the_thread, sig, siginfo ) ) {
11db54: 51 push %ecx
mask = signo_to_mask( sig );
/*
* Build up a siginfo structure
*/
siginfo = &siginfo_struct;
11db55: 8d 55 dc lea -0x24(%ebp),%edx
/*
* Returns true if the signal was synchronously given to a thread
* blocked waiting for the signal.
*/
if ( _POSIX_signals_Unblock_thread( the_thread, sig, siginfo ) ) {
11db58: 52 push %edx
11db59: 53 push %ebx
11db5a: 50 push %eax
11db5b: e8 90 00 00 00 call 11dbf0 <_POSIX_signals_Unblock_thread>
11db60: 83 c4 10 add $0x10,%esp
11db63: 84 c0 test %al,%al
11db65: 74 07 je 11db6e <killinfo+0x1de>
_Thread_Enable_dispatch();
11db67: e8 a0 e2 fe ff call 10be0c <_Thread_Enable_dispatch>
11db6c: eb 62 jmp 11dbd0 <killinfo+0x240>
/*
* We may have woken up a thread but we definitely need to post the
* signal to the process wide information set.
*/
_POSIX_signals_Set_process_signals( mask );
11db6e: 83 ec 0c sub $0xc,%esp
11db71: 57 push %edi
11db72: e8 65 00 00 00 call 11dbdc <_POSIX_signals_Set_process_signals>
if ( _POSIX_signals_Vectors[ sig ].sa_flags == SA_SIGINFO ) {
11db77: 6b db 0c imul $0xc,%ebx,%ebx
11db7a: 83 c4 10 add $0x10,%esp
11db7d: 83 bb 28 e9 12 00 02 cmpl $0x2,0x12e928(%ebx)
11db84: 75 e1 jne 11db67 <killinfo+0x1d7>
psiginfo = (POSIX_signals_Siginfo_node *)
11db86: 83 ec 0c sub $0xc,%esp
11db89: 68 a8 ea 12 00 push $0x12eaa8
11db8e: e8 ed ca fe ff call 10a680 <_Chain_Get>
_Chain_Get( &_POSIX_signals_Inactive_siginfo );
if ( !psiginfo ) {
11db93: 83 c4 10 add $0x10,%esp
11db96: 85 c0 test %eax,%eax
11db98: 75 15 jne 11dbaf <killinfo+0x21f>
_Thread_Enable_dispatch();
11db9a: e8 6d e2 fe ff call 10be0c <_Thread_Enable_dispatch>
rtems_set_errno_and_return_minus_one( EAGAIN );
11db9f: e8 38 33 ff ff call 110edc <__errno>
11dba4: c7 00 0b 00 00 00 movl $0xb,(%eax)
11dbaa: 83 c8 ff or $0xffffffff,%eax
11dbad: eb 23 jmp 11dbd2 <killinfo+0x242>
}
psiginfo->Info = *siginfo;
11dbaf: 8d 78 08 lea 0x8(%eax),%edi
11dbb2: 8d 75 dc lea -0x24(%ebp),%esi
11dbb5: b9 03 00 00 00 mov $0x3,%ecx
11dbba: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
_Chain_Append( &_POSIX_signals_Siginfo[ sig ], &psiginfo->Node );
11dbbc: 52 push %edx
11dbbd: 52 push %edx
11dbbe: 50 push %eax
11dbbf: 81 c3 20 eb 12 00 add $0x12eb20,%ebx
11dbc5: 53 push %ebx
11dbc6: e8 91 ca fe ff call 10a65c <_Chain_Append>
11dbcb: 83 c4 10 add $0x10,%esp
11dbce: eb 97 jmp 11db67 <killinfo+0x1d7>
/*
* If the signal is being ignored, then we are out of here.
*/
if ( _POSIX_signals_Vectors[ sig ].sa_handler == SIG_IGN )
return 0;
11dbd0: 31 c0 xor %eax,%eax
}
DEBUG_STEP("\n");
_Thread_Enable_dispatch();
return 0;
}
11dbd2: 8d 65 f4 lea -0xc(%ebp),%esp
11dbd5: 5b pop %ebx
11dbd6: 5e pop %esi
11dbd7: 5f pop %edi
11dbd8: 5d pop %ebp
11dbd9: c3 ret
00106e64 <libc_wrapup>:
/*
* In case RTEMS is already down, don't do this. It could be
* dangerous.
*/
if (!_System_state_Is_up(_System_state_Get()))
106e64: 83 3d 20 e5 12 00 03 cmpl $0x3,0x12e520
106e6b: 75 58 jne 106ec5 <libc_wrapup+0x61> <== NEVER TAKEN
extern void _wrapup_reent(struct _reent *);
extern void _reclaim_reent(struct _reent *);
void libc_wrapup(void)
{
106e6d: 55 push %ebp
106e6e: 89 e5 mov %esp,%ebp
106e70: 53 push %ebx
106e71: 51 push %ecx
/*
* This was already done if the user called exit() directly .
_wrapup_reent(0);
*/
if (_REENT != _global_impure_ptr) {
106e72: 8b 1d 60 04 12 00 mov 0x120460,%ebx
106e78: 39 1d a0 c2 12 00 cmp %ebx,0x12c2a0
106e7e: 74 12 je 106e92 <libc_wrapup+0x2e>
_wrapup_reent(_global_impure_ptr);
106e80: 83 ec 0c sub $0xc,%esp
106e83: 53 push %ebx
106e84: e8 a7 aa 00 00 call 111930 <_wrapup_reent>
/* Don't reclaim this one, just in case we do printfs
* on the way out to ROM.
*/
_reclaim_reent(&libc_global_reent);
#endif
_REENT = _global_impure_ptr;
106e89: 89 1d a0 c2 12 00 mov %ebx,0x12c2a0
106e8f: 83 c4 10 add $0x10,%esp
*
* Should this be changed to do *all* file streams?
* _fwalk (_REENT, fclose);
*/
fclose (stdin);
106e92: 83 ec 0c sub $0xc,%esp
106e95: a1 a0 c2 12 00 mov 0x12c2a0,%eax
106e9a: ff 70 04 pushl 0x4(%eax)
106e9d: e8 56 a1 00 00 call 110ff8 <fclose>
fclose (stdout);
106ea2: 58 pop %eax
106ea3: a1 a0 c2 12 00 mov 0x12c2a0,%eax
106ea8: ff 70 08 pushl 0x8(%eax)
106eab: e8 48 a1 00 00 call 110ff8 <fclose>
fclose (stderr);
106eb0: 5a pop %edx
106eb1: a1 a0 c2 12 00 mov 0x12c2a0,%eax
106eb6: ff 70 0c pushl 0xc(%eax)
106eb9: e8 3a a1 00 00 call 110ff8 <fclose>
106ebe: 83 c4 10 add $0x10,%esp
}
106ec1: 8b 5d fc mov -0x4(%ebp),%ebx
106ec4: c9 leave
106ec5: c3 ret
001069f4 <malloc>:
#include "malloc_p.h"
void *malloc(
size_t size
)
{
1069f4: 55 push %ebp
1069f5: 89 e5 mov %esp,%ebp
1069f7: 56 push %esi
1069f8: 53 push %ebx
1069f9: 8b 75 08 mov 0x8(%ebp),%esi
void *return_this;
MSBUMP(malloc_calls, 1);
1069fc: ff 05 ec e2 12 00 incl 0x12e2ec
/*
* If some free's have been deferred, then do them now.
*/
malloc_deferred_frees_process();
106a02: e8 04 ff ff ff call 10690b <malloc_deferred_frees_process>
/*
* Validate the parameters
*/
if ( !size )
106a07: 85 f6 test %esi,%esi
106a09: 75 02 jne 106a0d <malloc+0x19>
106a0b: eb 43 jmp 106a50 <malloc+0x5c>
return (void *) 0;
/*
* Do not attempt to allocate memory if not in correct system state.
*/
if ( _System_state_Is_up(_System_state_Get()) &&
106a0d: 83 3d 20 e5 12 00 03 cmpl $0x3,0x12e520
106a14: 74 1b je 106a31 <malloc+0x3d>
RTEMS_INLINE_ROUTINE void *_Protected_heap_Allocate(
Heap_Control *heap,
uintptr_t size
)
{
return _Protected_heap_Allocate_aligned_with_boundary( heap, size, 0, 0 );
106a16: 6a 00 push $0x0
106a18: 6a 00 push $0x0
106a1a: 56 push %esi
106a1b: ff 35 2c a2 12 00 pushl 0x12a22c
106a21: e8 ae 4a 00 00 call 10b4d4 <_Protected_heap_Allocate_aligned_with_boundary>
* If this fails then return a NULL pointer.
*/
return_this = _Protected_heap_Allocate( RTEMS_Malloc_Heap, size );
if ( !return_this ) {
106a26: 83 c4 10 add $0x10,%esp
106a29: 85 c0 test %eax,%eax
106a2b: 74 0f je 106a3c <malloc+0x48>
106a2d: 89 c3 mov %eax,%ebx
106a2f: eb 33 jmp 106a64 <malloc+0x70>
/*
* Do not attempt to allocate memory if not in correct system state.
*/
if ( _System_state_Is_up(_System_state_Get()) &&
!malloc_is_system_state_OK() )
106a31: e8 96 fe ff ff call 1068cc <malloc_is_system_state_OK>
return (void *) 0;
/*
* Do not attempt to allocate memory if not in correct system state.
*/
if ( _System_state_Is_up(_System_state_Get()) &&
106a36: 84 c0 test %al,%al
106a38: 75 dc jne 106a16 <malloc+0x22> <== ALWAYS TAKEN
106a3a: eb 14 jmp 106a50 <malloc+0x5c> <== NOT EXECUTED
*/
return_this = _Protected_heap_Allocate( RTEMS_Malloc_Heap, size );
if ( !return_this ) {
if (rtems_malloc_sbrk_helpers)
106a3c: a1 00 c8 12 00 mov 0x12c800,%eax
106a41: 85 c0 test %eax,%eax
106a43: 75 0f jne 106a54 <malloc+0x60>
return_this = (*rtems_malloc_sbrk_helpers->extend)( size );
if ( !return_this ) {
errno = ENOMEM;
106a45: e8 92 a4 00 00 call 110edc <__errno>
106a4a: c7 00 0c 00 00 00 movl $0xc,(%eax)
return (void *) 0;
106a50: 31 db xor %ebx,%ebx
106a52: eb 35 jmp 106a89 <malloc+0x95>
return_this = _Protected_heap_Allocate( RTEMS_Malloc_Heap, size );
if ( !return_this ) {
if (rtems_malloc_sbrk_helpers)
return_this = (*rtems_malloc_sbrk_helpers->extend)( size );
106a54: 83 ec 0c sub $0xc,%esp
106a57: 56 push %esi
106a58: ff 50 04 call *0x4(%eax)
106a5b: 89 c3 mov %eax,%ebx
if ( !return_this ) {
106a5d: 83 c4 10 add $0x10,%esp
106a60: 85 c0 test %eax,%eax
106a62: 74 e1 je 106a45 <malloc+0x51>
}
/*
* If the user wants us to dirty the allocated memory, then do it.
*/
if ( rtems_malloc_dirty_helper )
106a64: a1 fc c7 12 00 mov 0x12c7fc,%eax
106a69: 85 c0 test %eax,%eax
106a6b: 74 09 je 106a76 <malloc+0x82>
(*rtems_malloc_dirty_helper)( return_this, size );
106a6d: 52 push %edx
106a6e: 52 push %edx
106a6f: 56 push %esi
106a70: 53 push %ebx
106a71: ff d0 call *%eax
106a73: 83 c4 10 add $0x10,%esp
/*
* If configured, update the statistics
*/
if ( rtems_malloc_statistics_helpers )
106a76: a1 04 c8 12 00 mov 0x12c804,%eax
106a7b: 85 c0 test %eax,%eax
106a7d: 74 0a je 106a89 <malloc+0x95>
(*rtems_malloc_statistics_helpers->at_malloc)(return_this);
106a7f: 83 ec 0c sub $0xc,%esp
106a82: 53 push %ebx
106a83: ff 50 04 call *0x4(%eax)
106a86: 83 c4 10 add $0x10,%esp
return return_this;
}
106a89: 89 d8 mov %ebx,%eax
106a8b: 8d 65 f8 lea -0x8(%ebp),%esp
106a8e: 5b pop %ebx
106a8f: 5e pop %esi
106a90: 5d pop %ebp
106a91: c3 ret
00106a90 <malloc_sbrk_extend_and_allocate>:
}
static void *malloc_sbrk_extend_and_allocate(
size_t size
)
{
106a90: 55 push %ebp
106a91: 89 e5 mov %esp,%ebp
106a93: 56 push %esi
106a94: 53 push %ebx
106a95: 8b 75 08 mov 0x8(%ebp),%esi
* Round to the "requested sbrk amount" so hopefully we won't have
* to grow again for a while. This effectively does sbrk() calls
* in "page" amounts.
*/
sbrk_amount = RTEMS_Malloc_Sbrk_amount;
106a98: 8b 0d 9c ea 12 00 mov 0x12ea9c,%ecx
if ( sbrk_amount == 0 )
106a9e: 85 c9 test %ecx,%ecx
106aa0: 75 02 jne 106aa4 <malloc_sbrk_extend_and_allocate+0x14><== ALWAYS TAKEN
106aa2: eb 4b jmp 106aef <malloc_sbrk_extend_and_allocate+0x5f><== NOT EXECUTED
return (void *) 0;
the_size = ((size + sbrk_amount) / sbrk_amount * sbrk_amount);
106aa4: 8d 04 0e lea (%esi,%ecx,1),%eax
106aa7: 31 d2 xor %edx,%edx
106aa9: f7 f1 div %ecx
106aab: 89 c3 mov %eax,%ebx
106aad: 0f af d9 imul %ecx,%ebx
starting_address = (void *) sbrk(the_size);
106ab0: 83 ec 0c sub $0xc,%esp
106ab3: 53 push %ebx
106ab4: e8 1c 99 ff ff call 1003d5 <sbrk>
if ( starting_address == (void*) -1 )
106ab9: 83 c4 10 add $0x10,%esp
106abc: 83 f8 ff cmp $0xffffffff,%eax
106abf: 74 2e je 106aef <malloc_sbrk_extend_and_allocate+0x5f>
return (void *) 0;
if ( !_Protected_heap_Extend(
106ac1: 52 push %edx
106ac2: 53 push %ebx
106ac3: 50 push %eax
106ac4: ff 35 6c a8 12 00 pushl 0x12a86c
106aca: e8 51 4a 00 00 call 10b520 <_Protected_heap_Extend>
106acf: 83 c4 10 add $0x10,%esp
106ad2: 84 c0 test %al,%al
106ad4: 75 1d jne 106af3 <malloc_sbrk_extend_and_allocate+0x63>
RTEMS_Malloc_Heap, starting_address, the_size) ) {
sbrk(-the_size);
106ad6: 83 ec 0c sub $0xc,%esp
106ad9: f7 db neg %ebx
106adb: 53 push %ebx
106adc: e8 f4 98 ff ff call 1003d5 <sbrk>
errno = ENOMEM;
106ae1: e8 7a a6 00 00 call 111160 <__errno>
106ae6: c7 00 0c 00 00 00 movl $0xc,(%eax)
return (void *) 0;
106aec: 83 c4 10 add $0x10,%esp
106aef: 31 c0 xor %eax,%eax
106af1: eb 19 jmp 106b0c <malloc_sbrk_extend_and_allocate+0x7c>
}
MSBUMP(space_available, the_size);
106af3: 01 1d 70 ea 12 00 add %ebx,0x12ea70
106af9: 6a 00 push $0x0
106afb: 6a 00 push $0x0
106afd: 56 push %esi
106afe: ff 35 6c a8 12 00 pushl 0x12a86c
106b04: e8 df 49 00 00 call 10b4e8 <_Protected_heap_Allocate_aligned_with_boundary>
return_this = _Protected_heap_Allocate( RTEMS_Malloc_Heap, size );
return return_this;
106b09: 83 c4 10 add $0x10,%esp
}
106b0c: 8d 65 f8 lea -0x8(%ebp),%esp
106b0f: 5b pop %ebx
106b10: 5e pop %esi
106b11: 5d pop %ebp
106b12: c3 ret
00106b13 <malloc_sbrk_initialize>:
static void *malloc_sbrk_initialize(
void *starting_address,
size_t length
)
{
106b13: 55 push %ebp
106b14: 89 e5 mov %esp,%ebp
106b16: 83 ec 08 sub $0x8,%esp
106b19: 8b 45 08 mov 0x8(%ebp),%eax
106b1c: 8b 55 0c mov 0xc(%ebp),%edx
uintptr_t old_address;
uintptr_t uaddress;
RTEMS_Malloc_Sbrk_amount = length;
106b1f: 89 15 9c ea 12 00 mov %edx,0x12ea9c
* If the starting address is 0 then we are to attempt to
* get length worth of memory using sbrk. Make sure we
* align the address that we get back.
*/
if (!starting_address) {
106b25: 85 c0 test %eax,%eax
106b27: 75 25 jne 106b4e <malloc_sbrk_initialize+0x3b>
uaddress = (uintptr_t)sbrk(length);
106b29: 83 ec 0c sub $0xc,%esp
106b2c: 52 push %edx
106b2d: e8 a3 98 ff ff call 1003d5 <sbrk>
if (uaddress == (uintptr_t) -1) {
106b32: 83 c4 10 add $0x10,%esp
106b35: 83 f8 ff cmp $0xffffffff,%eax
106b38: 75 0a jne 106b44 <malloc_sbrk_initialize+0x31><== NEVER TAKEN
rtems_fatal_error_occurred( RTEMS_NO_MEMORY );
106b3a: 83 ec 0c sub $0xc,%esp
106b3d: 6a 1a push $0x1a
106b3f: e8 f4 38 00 00 call 10a438 <rtems_fatal_error_occurred>
/* DOES NOT RETURN!!! */
}
if (uaddress & (CPU_HEAP_ALIGNMENT-1)) {
106b44: a8 03 test $0x3,%al <== NOT EXECUTED
106b46: 74 06 je 106b4e <malloc_sbrk_initialize+0x3b><== NOT EXECUTED
old_address = uaddress;
uaddress = (uaddress + CPU_HEAP_ALIGNMENT) & ~(CPU_HEAP_ALIGNMENT-1);
106b48: 83 c0 04 add $0x4,%eax <== NOT EXECUTED
106b4b: 83 e0 fc and $0xfffffffc,%eax <== NOT EXECUTED
}
starting_address = (void *)uaddress;
}
return starting_address;
}
106b4e: c9 leave
106b4f: c3 ret
0010f8a0 <memfile_alloc_block>:
* Allocate a block for an in-memory file.
*/
int memfile_blocks_allocated = 0;
void *memfile_alloc_block(void)
{
10f8a0: 55 push %ebp
10f8a1: 89 e5 mov %esp,%ebp
10f8a3: 83 ec 10 sub $0x10,%esp
void *memory;
memory = (void *)calloc(1, IMFS_MEMFILE_BYTES_PER_BLOCK);
10f8a6: ff 35 b4 df 12 00 pushl 0x12dfb4
10f8ac: 6a 01 push $0x1
10f8ae: e8 79 6c ff ff call 10652c <calloc>
if ( memory )
10f8b3: 83 c4 10 add $0x10,%esp
10f8b6: 85 c0 test %eax,%eax
10f8b8: 74 06 je 10f8c0 <memfile_alloc_block+0x20><== NEVER TAKEN
memfile_blocks_allocated++;
10f8ba: ff 05 d0 e0 12 00 incl 0x12e0d0
return memory;
}
10f8c0: c9 leave
10f8c1: c3 ret
0011010a <memfile_ftruncate>:
*/
int memfile_ftruncate(
rtems_libio_t *iop,
off_t length
)
{
11010a: 55 push %ebp
11010b: 89 e5 mov %esp,%ebp
11010d: 53 push %ebx
11010e: 83 ec 14 sub $0x14,%esp
110111: 8b 45 0c mov 0xc(%ebp),%eax
110114: 8b 55 10 mov 0x10(%ebp),%edx
IMFS_jnode_t *the_jnode;
the_jnode = iop->pathinfo.node_access;
110117: 8b 4d 08 mov 0x8(%ebp),%ecx
11011a: 8b 59 18 mov 0x18(%ecx),%ebx
* POSIX 1003.1b does not specify what happens if you truncate a file
* and the new length is greater than the current size. We treat this
* as an extend operation.
*/
if ( length > the_jnode->info.file.size )
11011d: 3b 53 54 cmp 0x54(%ebx),%edx
110120: 7c 16 jl 110138 <memfile_ftruncate+0x2e><== NEVER TAKEN
110122: 7f 05 jg 110129 <memfile_ftruncate+0x1f><== NEVER TAKEN
110124: 3b 43 50 cmp 0x50(%ebx),%eax
110127: 76 0f jbe 110138 <memfile_ftruncate+0x2e>
return IMFS_memfile_extend( the_jnode, true, length );
110129: 52 push %edx
11012a: 50 push %eax
11012b: 6a 01 push $0x1
11012d: 53 push %ebx
11012e: e8 47 fc ff ff call 10fd7a <IMFS_memfile_extend>
110133: 83 c4 10 add $0x10,%esp
110136: eb 1e jmp 110156 <memfile_ftruncate+0x4c>
/*
* The in-memory files do not currently reclaim memory until the file is
* deleted. So we leave the previously allocated blocks in place for
* future use and just set the length.
*/
the_jnode->info.file.size = length;
110138: 89 43 50 mov %eax,0x50(%ebx)
11013b: 89 53 54 mov %edx,0x54(%ebx)
IMFS_update_atime( the_jnode );
11013e: 51 push %ecx
11013f: 51 push %ecx
110140: 6a 00 push $0x0
110142: 8d 45 f0 lea -0x10(%ebp),%eax
110145: 50 push %eax
110146: e8 61 66 ff ff call 1067ac <gettimeofday>
11014b: 8b 45 f0 mov -0x10(%ebp),%eax
11014e: 89 43 40 mov %eax,0x40(%ebx)
return 0;
110151: 83 c4 10 add $0x10,%esp
110154: 31 c0 xor %eax,%eax
}
110156: 8b 5d fc mov -0x4(%ebp),%ebx
110159: c9 leave
11015a: c3 ret
0011009c <memfile_open>:
rtems_libio_t *iop,
const char *pathname,
int oflag,
mode_t mode
)
{
11009c: 55 push %ebp
11009d: 89 e5 mov %esp,%ebp
11009f: 83 ec 08 sub $0x8,%esp
1100a2: 8b 55 08 mov 0x8(%ebp),%edx
IMFS_jnode_t *the_jnode;
the_jnode = iop->pathinfo.node_access;
1100a5: 8b 42 18 mov 0x18(%edx),%eax
/*
* Perform 'copy on write' for linear files
*/
if ((iop->flags & LIBIO_FLAGS_WRITE)
1100a8: f6 42 0c 04 testb $0x4,0xc(%edx)
1100ac: 75 04 jne 1100b2 <memfile_open+0x16>
if ((count != 0)
&& (IMFS_memfile_write(the_jnode, 0, buffer, count) == -1))
return -1;
}
return 0;
1100ae: 31 c0 xor %eax,%eax
1100b0: eb 56 jmp 110108 <memfile_open+0x6c>
1100b2: 8b 50 4c mov 0x4c(%eax),%edx
/*
* Perform 'copy on write' for linear files
*/
if ((iop->flags & LIBIO_FLAGS_WRITE)
&& (IMFS_type( the_jnode ) == IMFS_LINEAR_FILE)) {
1100b5: 83 3a 05 cmpl $0x5,(%edx)
1100b8: 75 f4 jne 1100ae <memfile_open+0x12> <== ALWAYS TAKEN
uint32_t count = the_jnode->info.linearfile.size;
1100ba: 8b 50 50 mov 0x50(%eax),%edx <== NOT EXECUTED
const unsigned char *buffer = the_jnode->info.linearfile.direct;
1100bd: 8b 48 58 mov 0x58(%eax),%ecx <== NOT EXECUTED
the_jnode->control = &IMFS_node_control_memfile;
1100c0: c7 40 4c 9c fe 11 00 movl $0x11fe9c,0x4c(%eax) <== NOT EXECUTED
the_jnode->info.file.size = 0;
1100c7: c7 40 50 00 00 00 00 movl $0x0,0x50(%eax) <== NOT EXECUTED
1100ce: c7 40 54 00 00 00 00 movl $0x0,0x54(%eax) <== NOT EXECUTED
the_jnode->info.file.indirect = 0;
1100d5: c7 40 58 00 00 00 00 movl $0x0,0x58(%eax) <== NOT EXECUTED
the_jnode->info.file.doubly_indirect = 0;
1100dc: c7 40 5c 00 00 00 00 movl $0x0,0x5c(%eax) <== NOT EXECUTED
the_jnode->info.file.triply_indirect = 0;
1100e3: c7 40 60 00 00 00 00 movl $0x0,0x60(%eax) <== NOT EXECUTED
if ((count != 0)
1100ea: 85 d2 test %edx,%edx <== NOT EXECUTED
1100ec: 74 c0 je 1100ae <memfile_open+0x12> <== NOT EXECUTED
&& (IMFS_memfile_write(the_jnode, 0, buffer, count) == -1))
1100ee: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1100f1: 52 push %edx <== NOT EXECUTED
1100f2: 51 push %ecx <== NOT EXECUTED
1100f3: 6a 00 push $0x0 <== NOT EXECUTED
1100f5: 6a 00 push $0x0 <== NOT EXECUTED
1100f7: 50 push %eax <== NOT EXECUTED
1100f8: e8 d9 fd ff ff call 10fed6 <IMFS_memfile_write> <== NOT EXECUTED
1100fd: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
return -1;
110100: 40 inc %eax <== NOT EXECUTED
110101: 0f 95 c0 setne %al <== NOT EXECUTED
110104: 0f b6 c0 movzbl %al,%eax <== NOT EXECUTED
110107: 48 dec %eax <== NOT EXECUTED
}
return 0;
}
110108: c9 leave
110109: c3 ret
00106bac <mount>:
const char *target,
const char *filesystemtype,
rtems_filesystem_options_t options,
const void *data
)
{
106bac: 55 push %ebp
106bad: 89 e5 mov %esp,%ebp
106baf: 57 push %edi
106bb0: 56 push %esi
106bb1: 53 push %ebx
106bb2: 83 ec 7c sub $0x7c,%esp
106bb5: 8b 75 10 mov 0x10(%ebp),%esi
int rv = 0;
if (
106bb8: 83 7d 14 01 cmpl $0x1,0x14(%ebp)
106bbc: 0f 87 6e 02 00 00 ja 106e30 <mount+0x284>
options == RTEMS_FILESYSTEM_READ_ONLY
|| options == RTEMS_FILESYSTEM_READ_WRITE
) {
rtems_filesystem_fsmount_me_t fsmount_me_h =
106bc2: 83 ec 0c sub $0xc,%esp
106bc5: 56 push %esi
106bc6: e8 c4 70 00 00 call 10dc8f <rtems_filesystem_get_mount_handler>
106bcb: 89 45 84 mov %eax,-0x7c(%ebp)
rtems_filesystem_get_mount_handler( filesystemtype );
if ( fsmount_me_h != NULL ) {
106bce: 83 c4 10 add $0x10,%esp
106bd1: 85 c0 test %eax,%eax
106bd3: 0f 84 57 02 00 00 je 106e30 <mount+0x284>
const char *target_or_null,
const char *filesystemtype,
size_t *target_length_ptr
)
{
const char *target = target_or_null != NULL ? target_or_null : "/";
106bd9: 8b 55 0c mov 0xc(%ebp),%edx
106bdc: 89 55 88 mov %edx,-0x78(%ebp)
106bdf: 85 d2 test %edx,%edx
106be1: 75 07 jne 106bea <mount+0x3e>
106be3: c7 45 88 60 f8 11 00 movl $0x11f860,-0x78(%ebp)
size_t filesystemtype_size = strlen( filesystemtype ) + 1;
106bea: 83 cb ff or $0xffffffff,%ebx
106bed: 31 c0 xor %eax,%eax
106bef: 89 d9 mov %ebx,%ecx
106bf1: 89 f7 mov %esi,%edi
106bf3: f2 ae repnz scas %es:(%edi),%al
106bf5: f7 d1 not %ecx
106bf7: 89 4d 94 mov %ecx,-0x6c(%ebp)
106bfa: 89 ca mov %ecx,%edx
106bfc: 4a dec %edx
size_t source_size = source_or_null != NULL ?
strlen( source_or_null ) + 1 : 0;
106bfd: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
106c01: 74 0e je 106c11 <mount+0x65>
106c03: 89 d9 mov %ebx,%ecx
106c05: 8b 7d 08 mov 0x8(%ebp),%edi
106c08: f2 ae repnz scas %es:(%edi),%al
106c0a: f7 d1 not %ecx
106c0c: 89 4d 90 mov %ecx,-0x70(%ebp)
106c0f: eb 07 jmp 106c18 <mount+0x6c>
106c11: c7 45 90 00 00 00 00 movl $0x0,-0x70(%ebp)
size_t target_size = strlen( target ) + 1;
106c18: 31 c0 xor %eax,%eax
106c1a: 83 c9 ff or $0xffffffff,%ecx
106c1d: 8b 7d 88 mov -0x78(%ebp),%edi
106c20: f2 ae repnz scas %es:(%edi),%al
106c22: f7 d1 not %ecx
106c24: 89 4d 8c mov %ecx,-0x74(%ebp)
size_t size = sizeof( rtems_filesystem_mount_table_entry_t )
+ filesystemtype_size + source_size + target_size
+ sizeof( rtems_filesystem_global_location_t );
rtems_filesystem_mount_table_entry_t *mt_entry = calloc( 1, size );
106c27: 51 push %ecx
106c28: 51 push %ecx
size_t filesystemtype_size = strlen( filesystemtype ) + 1;
size_t source_size = source_or_null != NULL ?
strlen( source_or_null ) + 1 : 0;
size_t target_size = strlen( target ) + 1;
size_t size = sizeof( rtems_filesystem_mount_table_entry_t )
+ filesystemtype_size + source_size + target_size
106c29: 8b 4d 90 mov -0x70(%ebp),%ecx
106c2c: 8d 44 0a 65 lea 0x65(%edx,%ecx,1),%eax
const char *target = target_or_null != NULL ? target_or_null : "/";
size_t filesystemtype_size = strlen( filesystemtype ) + 1;
size_t source_size = source_or_null != NULL ?
strlen( source_or_null ) + 1 : 0;
size_t target_size = strlen( target ) + 1;
size_t size = sizeof( rtems_filesystem_mount_table_entry_t )
106c30: 03 45 8c add -0x74(%ebp),%eax
+ filesystemtype_size + source_size + target_size
+ sizeof( rtems_filesystem_global_location_t );
rtems_filesystem_mount_table_entry_t *mt_entry = calloc( 1, size );
106c33: 50 push %eax
106c34: 6a 01 push $0x1
106c36: e8 f1 f8 ff ff call 10652c <calloc>
106c3b: 89 c3 mov %eax,%ebx
if ( mt_entry != NULL ) {
106c3d: 83 c4 10 add $0x10,%esp
106c40: 85 c0 test %eax,%eax
106c42: 0f 84 03 02 00 00 je 106e4b <mount+0x29f> <== NEVER TAKEN
rtems_filesystem_global_location_t *mt_fs_root =
106c48: 8d 50 40 lea 0x40(%eax),%edx
(rtems_filesystem_global_location_t *)
((char *) mt_entry + sizeof( *mt_entry ));
char *str = (char *) mt_fs_root + sizeof( *mt_fs_root );
106c4b: 8d 40 64 lea 0x64(%eax),%eax
memcpy( str, filesystemtype, filesystemtype_size );
106c4e: 89 c7 mov %eax,%edi
106c50: 8b 4d 94 mov -0x6c(%ebp),%ecx
106c53: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
106c55: 89 7d 94 mov %edi,-0x6c(%ebp)
mt_entry->type = str;
106c58: 89 43 34 mov %eax,0x34(%ebx)
str += filesystemtype_size;
memcpy( str, source_or_null, source_size );
106c5b: 8b 75 08 mov 0x8(%ebp),%esi
106c5e: 8b 4d 90 mov -0x70(%ebp),%ecx
106c61: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
106c63: 89 f8 mov %edi,%eax
mt_entry->dev = str;
106c65: 8b 7d 94 mov -0x6c(%ebp),%edi
106c68: 89 7b 38 mov %edi,0x38(%ebx)
str += source_size;
memcpy( str, target, target_size );
106c6b: 89 c7 mov %eax,%edi
106c6d: 8b 75 88 mov -0x78(%ebp),%esi
106c70: 8b 4d 8c mov -0x74(%ebp),%ecx
106c73: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
mt_entry->target = str;
106c75: 89 43 30 mov %eax,0x30(%ebx)
str += target_size;
mt_entry->mounted = true;
106c78: c6 43 28 01 movb $0x1,0x28(%ebx)
mt_entry->mt_fs_root = mt_fs_root;
106c7c: 89 53 24 mov %edx,0x24(%ebx)
mt_entry->pathconf_limits_and_options = &rtems_filesystem_default_pathconf;
106c7f: c7 43 2c 64 f8 11 00 movl $0x11f864,0x2c(%ebx)
mt_fs_root->location.mt_entry = mt_entry;
106c86: 89 5b 54 mov %ebx,0x54(%ebx)
mt_fs_root->reference_count = 1;
106c89: c7 43 58 01 00 00 00 movl $0x1,0x58(%ebx)
void *starting_address,
size_t number_nodes,
size_t node_size
)
{
_Chain_Initialize( the_chain, starting_address, number_nodes, node_size );
106c90: 6a 24 push $0x24
106c92: 6a 01 push $0x1
106c94: 52 push %edx
rtems_chain_initialize(
106c95: 8d 43 14 lea 0x14(%ebx),%eax
106c98: 50 push %eax
106c99: e8 06 3a 00 00 call 10a6a4 <_Chain_Initialize>
filesystemtype,
&target_length
);
if ( mt_entry != NULL ) {
mt_entry->writeable = options == RTEMS_FILESYSTEM_READ_WRITE;
106c9e: 8a 45 14 mov 0x14(%ebp),%al
106ca1: 88 43 29 mov %al,0x29(%ebx)
106ca4: 80 63 29 01 andb $0x1,0x29(%ebx)
rv = (*fsmount_me_h)( mt_entry, data );
106ca8: 58 pop %eax
106ca9: 5a pop %edx
106caa: ff 75 18 pushl 0x18(%ebp)
106cad: 53 push %ebx
106cae: 8b 55 84 mov -0x7c(%ebp),%edx
106cb1: ff d2 call *%edx
106cb3: 89 c6 mov %eax,%esi
if ( rv == 0 ) {
106cb5: 83 c4 10 add $0x10,%esp
106cb8: 85 c0 test %eax,%eax
106cba: 0f 85 7d 01 00 00 jne 106e3d <mount+0x291>
if ( target != NULL ) {
106cc0: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
106cc4: 0f 84 c4 00 00 00 je 106d8e <mount+0x1e2>
{
int rv = 0;
rtems_filesystem_eval_path_context_t ctx;
int eval_flags = RTEMS_FS_PERMS_RWX
| RTEMS_FS_FOLLOW_LINK;
rtems_filesystem_location_info_t *currentloc =
106cca: 50 push %eax
106ccb: 6a 1f push $0x1f
106ccd: ff 75 0c pushl 0xc(%ebp)
rtems_filesystem_eval_path_start( &ctx, target, eval_flags );
106cd0: 8d 75 b0 lea -0x50(%ebp),%esi
{
int rv = 0;
rtems_filesystem_eval_path_context_t ctx;
int eval_flags = RTEMS_FS_PERMS_RWX
| RTEMS_FS_FOLLOW_LINK;
rtems_filesystem_location_info_t *currentloc =
106cd3: 56 push %esi
106cd4: e8 0c 0b 00 00 call 1077e5 <rtems_filesystem_eval_path_start>
static inline bool rtems_filesystem_location_is_root(
const rtems_filesystem_location_info_t *loc
)
{
const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry;
106cd9: 8b 50 14 mov 0x14(%eax),%edx
return (*mt_entry->ops->are_nodes_equal_h)(
106cdc: 59 pop %ecx
106cdd: 5f pop %edi
106cde: 8b 4a 0c mov 0xc(%edx),%ecx
106ce1: ff 72 24 pushl 0x24(%edx)
106ce4: 50 push %eax
106ce5: ff 51 10 call *0x10(%ecx)
rtems_filesystem_eval_path_start( &ctx, target, eval_flags );
if ( !rtems_filesystem_location_is_root( currentloc ) ) {
106ce8: 83 c4 10 add $0x10,%esp
106ceb: 84 c0 test %al,%al
106ced: 75 73 jne 106d62 <mount+0x1b6>
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(
106cef: 50 push %eax
106cf0: 50 push %eax
106cf1: 8d 45 c8 lea -0x38(%ebp),%eax
106cf4: 50 push %eax
rtems_filesystem_location_info_t targetloc;
rtems_filesystem_global_location_t *mt_point_node;
rtems_filesystem_eval_path_extract_currentloc( &ctx, &targetloc );
106cf5: 8d 75 98 lea -0x68(%ebp),%esi
106cf8: 56 push %esi
106cf9: e8 41 0e 00 00 call 107b3f <rtems_filesystem_location_copy_and_detach>
mt_point_node = rtems_filesystem_location_transform_to_global( &targetloc );
106cfe: 89 34 24 mov %esi,(%esp)
106d01: e8 ac 0f 00 00 call 107cb2 <rtems_filesystem_location_transform_to_global>
106d06: 89 c7 mov %eax,%edi
mt_entry->mt_point_node = mt_point_node;
106d08: 89 43 20 mov %eax,0x20(%ebx)
rv = (*mt_point_node->location.mt_entry->ops->mount_h)( mt_entry );
106d0b: 8b 40 14 mov 0x14(%eax),%eax
106d0e: 8b 40 0c mov 0xc(%eax),%eax
106d11: 89 1c 24 mov %ebx,(%esp)
106d14: ff 50 30 call *0x30(%eax)
106d17: 89 c6 mov %eax,%esi
if ( rv == 0 ) {
106d19: 83 c4 10 add $0x10,%esp
106d1c: 85 c0 test %eax,%eax
106d1e: 75 34 jne 106d54 <mount+0x1a8>
*/
#include <rtems/userenv.h>
static inline void rtems_libio_lock( void )
{
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
106d20: 50 push %eax
106d21: 6a 00 push $0x0
106d23: 6a 00 push $0x0
106d25: ff 35 d8 e2 12 00 pushl 0x12e2d8
106d2b: e8 60 30 00 00 call 109d90 <rtems_semaphore_obtain>
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
Chain_Node *old_last = tail->previous;
106d30: a1 fc c0 12 00 mov 0x12c0fc,%eax
the_node->next = tail;
106d35: c7 03 f8 c0 12 00 movl $0x12c0f8,(%ebx)
tail->previous = the_node;
106d3b: 89 1d fc c0 12 00 mov %ebx,0x12c0fc
old_last->next = the_node;
106d41: 89 18 mov %ebx,(%eax)
the_node->previous = old_last;
106d43: 89 43 04 mov %eax,0x4(%ebx)
}
static inline void rtems_libio_unlock( void )
{
rtems_semaphore_release( rtems_libio_semaphore );
106d46: 58 pop %eax
106d47: ff 35 d8 e2 12 00 pushl 0x12e2d8
106d4d: e8 2e 31 00 00 call 109e80 <rtems_semaphore_release>
106d52: eb 09 jmp 106d5d <mount+0x1b1>
&rtems_filesystem_mount_table,
&mt_entry->mt_node
);
rtems_filesystem_mt_unlock();
} else {
rtems_filesystem_global_location_release( mt_point_node );
106d54: 83 ec 0c sub $0xc,%esp
106d57: 57 push %edi
106d58: e8 6c 0e 00 00 call 107bc9 <rtems_filesystem_global_location_release>
106d5d: 83 c4 10 add $0x10,%esp
106d60: eb 10 jmp 106d72 <mount+0x1c6>
}
} else {
rtems_filesystem_eval_path_error( &ctx, EBUSY );
106d62: 50 push %eax
106d63: 50 push %eax
106d64: 6a 10 push $0x10
106d66: 56 push %esi
106d67: e8 52 08 00 00 call 1075be <rtems_filesystem_eval_path_error>
106d6c: 83 c4 10 add $0x10,%esp
rv = -1;
106d6f: 83 ce ff or $0xffffffff,%esi
}
rtems_filesystem_eval_path_cleanup( &ctx );
106d72: 83 ec 0c sub $0xc,%esp
106d75: 8d 45 b0 lea -0x50(%ebp),%eax
106d78: 50 push %eax
106d79: e8 23 0b 00 00 call 1078a1 <rtems_filesystem_eval_path_cleanup>
106d7e: 83 c4 10 add $0x10,%esp
rv = register_subordinate_file_system( mt_entry, target );
} else {
rv = register_root_file_system( mt_entry );
}
if ( rv != 0 ) {
106d81: 85 f6 test %esi,%esi
106d83: 0f 84 d0 00 00 00 je 106e59 <mount+0x2ad>
106d89: e9 93 00 00 00 jmp 106e21 <mount+0x275>
*/
#include <rtems/userenv.h>
static inline void rtems_libio_lock( void )
{
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
106d8e: 50 push %eax
106d8f: 6a 00 push $0x0
106d91: 6a 00 push $0x0
106d93: ff 35 d8 e2 12 00 pushl 0x12e2d8
106d99: e8 f2 2f 00 00 call 109d90 <rtems_semaphore_obtain>
)
{
int rv = 0;
rtems_filesystem_mt_lock();
if ( rtems_chain_is_empty( &rtems_filesystem_mount_table ) ) {
106d9e: 83 c4 10 add $0x10,%esp
106da1: 81 3d f4 c0 12 00 f8 cmpl $0x12c0f8,0x12c0f4
106da8: c0 12 00
106dab: 75 18 jne 106dc5 <mount+0x219> <== NEVER TAKEN
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
Chain_Node *old_last = tail->previous;
106dad: a1 fc c0 12 00 mov 0x12c0fc,%eax
the_node->next = tail;
106db2: c7 03 f8 c0 12 00 movl $0x12c0f8,(%ebx)
tail->previous = the_node;
106db8: 89 1d fc c0 12 00 mov %ebx,0x12c0fc
old_last->next = the_node;
106dbe: 89 18 mov %ebx,(%eax)
the_node->previous = old_last;
106dc0: 89 43 04 mov %eax,0x4(%ebx)
106dc3: eb 0e jmp 106dd3 <mount+0x227>
rtems_chain_append_unprotected(
&rtems_filesystem_mount_table,
&mt_entry->mt_node
);
} else {
errno = EINVAL;
106dc5: e8 12 a1 00 00 call 110edc <__errno> <== NOT EXECUTED
106dca: c7 00 16 00 00 00 movl $0x16,(%eax) <== NOT EXECUTED
rv = -1;
106dd0: 83 ce ff or $0xffffffff,%esi <== NOT EXECUTED
}
static inline void rtems_libio_unlock( void )
{
rtems_semaphore_release( rtems_libio_semaphore );
106dd3: 83 ec 0c sub $0xc,%esp
106dd6: ff 35 d8 e2 12 00 pushl 0x12e2d8
106ddc: e8 9f 30 00 00 call 109e80 <rtems_semaphore_release>
}
rtems_filesystem_mt_unlock();
if ( rv == 0 ) {
106de1: 83 c4 10 add $0x10,%esp
106de4: 85 f6 test %esi,%esi
106de6: 75 39 jne 106e21 <mount+0x275> <== NEVER TAKEN
rtems_filesystem_global_location_t *new_fs_root =
rtems_filesystem_global_location_obtain( &mt_entry->mt_fs_root );
106de8: 83 c3 24 add $0x24,%ebx
rv = -1;
}
rtems_filesystem_mt_unlock();
if ( rv == 0 ) {
rtems_filesystem_global_location_t *new_fs_root =
106deb: 83 ec 0c sub $0xc,%esp
106dee: 53 push %ebx
106def: e8 37 0e 00 00 call 107c2b <rtems_filesystem_global_location_obtain>
106df4: 89 c7 mov %eax,%edi
rtems_filesystem_global_location_obtain( &mt_entry->mt_fs_root );
rtems_filesystem_global_location_t *new_fs_current =
106df6: 89 1c 24 mov %ebx,(%esp)
106df9: e8 2d 0e 00 00 call 107c2b <rtems_filesystem_global_location_obtain>
106dfe: 89 c3 mov %eax,%ebx
rtems_filesystem_global_location_obtain( &mt_entry->mt_fs_root );
rtems_filesystem_global_location_assign(
106e00: 58 pop %eax
106e01: 5a pop %edx
106e02: 57 push %edi
106e03: a1 14 c1 12 00 mov 0x12c114,%eax
106e08: 83 c0 04 add $0x4,%eax
106e0b: 50 push %eax
106e0c: e8 fd 0d 00 00 call 107c0e <rtems_filesystem_global_location_assign>
&rtems_filesystem_root,
new_fs_root
);
rtems_filesystem_global_location_assign(
106e11: 59 pop %ecx
106e12: 5f pop %edi
106e13: 53 push %ebx
106e14: ff 35 14 c1 12 00 pushl 0x12c114
106e1a: e8 ef 0d 00 00 call 107c0e <rtems_filesystem_global_location_assign>
106e1f: eb 25 jmp 106e46 <mount+0x29a>
} else {
rv = register_root_file_system( mt_entry );
}
if ( rv != 0 ) {
(*mt_entry->ops->fsunmount_me_h)( mt_entry );
106e21: 83 ec 0c sub $0xc,%esp
106e24: 8b 43 0c mov 0xc(%ebx),%eax
106e27: 53 push %ebx
106e28: ff 50 3c call *0x3c(%eax)
106e2b: 83 c4 10 add $0x10,%esp
106e2e: eb 0d jmp 106e3d <mount+0x291>
} else {
errno = EINVAL;
rv = -1;
}
} else {
errno = EINVAL;
106e30: e8 a7 a0 00 00 call 110edc <__errno>
106e35: c7 00 16 00 00 00 movl $0x16,(%eax)
106e3b: eb 19 jmp 106e56 <mount+0x2aa>
(*mt_entry->ops->fsunmount_me_h)( mt_entry );
}
}
if ( rv != 0 ) {
free( mt_entry );
106e3d: 83 ec 0c sub $0xc,%esp
106e40: 53 push %ebx
106e41: e8 ee f8 ff ff call 106734 <free>
106e46: 83 c4 10 add $0x10,%esp
106e49: eb 0e jmp 106e59 <mount+0x2ad>
}
} else {
errno = ENOMEM;
106e4b: e8 8c a0 00 00 call 110edc <__errno> <== NOT EXECUTED
106e50: c7 00 0c 00 00 00 movl $0xc,(%eax) <== NOT EXECUTED
rv = -1;
106e56: 83 ce ff or $0xffffffff,%esi
errno = EINVAL;
rv = -1;
}
return rv;
}
106e59: 89 f0 mov %esi,%eax
106e5b: 8d 65 f4 lea -0xc(%ebp),%esp
106e5e: 5b pop %ebx
106e5f: 5e pop %esi
106e60: 5f pop %edi
106e61: 5d pop %ebp
106e62: c3 ret
0010a5b8 <mount_and_make_target_path>:
const char *target,
const char *filesystemtype,
rtems_filesystem_options_t options,
const void *data
)
{
10a5b8: 55 push %ebp
10a5b9: 89 e5 mov %esp,%ebp
10a5bb: 57 push %edi
10a5bc: 56 push %esi
10a5bd: 53 push %ebx
10a5be: 83 ec 1c sub $0x1c,%esp
10a5c1: 8b 75 08 mov 0x8(%ebp),%esi
10a5c4: 8b 5d 0c mov 0xc(%ebp),%ebx
10a5c7: 8b 7d 10 mov 0x10(%ebp),%edi
10a5ca: 8b 55 14 mov 0x14(%ebp),%edx
10a5cd: 8b 4d 18 mov 0x18(%ebp),%ecx
int rv = -1;
if (target != NULL) {
10a5d0: 85 db test %ebx,%ebx
10a5d2: 74 3b je 10a60f <mount_and_make_target_path+0x57><== NEVER TAKEN
rv = rtems_mkdir(target, S_IRWXU | S_IRWXG | S_IRWXO);
10a5d4: 50 push %eax
10a5d5: 50 push %eax
10a5d6: 68 ff 01 00 00 push $0x1ff
10a5db: 53 push %ebx
10a5dc: 89 55 e4 mov %edx,-0x1c(%ebp)
10a5df: 89 4d e0 mov %ecx,-0x20(%ebp)
10a5e2: e8 d1 0a 00 00 call 10b0b8 <rtems_mkdir>
if (rv == 0) {
10a5e7: 83 c4 10 add $0x10,%esp
10a5ea: 85 c0 test %eax,%eax
10a5ec: 8b 55 e4 mov -0x1c(%ebp),%edx
10a5ef: 8b 4d e0 mov -0x20(%ebp),%ecx
10a5f2: 75 29 jne 10a61d <mount_and_make_target_path+0x65><== NEVER TAKEN
rv = mount(
10a5f4: 89 4d 18 mov %ecx,0x18(%ebp)
10a5f7: 89 55 14 mov %edx,0x14(%ebp)
10a5fa: 89 7d 10 mov %edi,0x10(%ebp)
10a5fd: 89 5d 0c mov %ebx,0xc(%ebp)
10a600: 89 75 08 mov %esi,0x8(%ebp)
} else {
errno = EINVAL;
}
return rv;
}
10a603: 8d 65 f4 lea -0xc(%ebp),%esp
10a606: 5b pop %ebx
10a607: 5e pop %esi
10a608: 5f pop %edi
10a609: 5d pop %ebp
int rv = -1;
if (target != NULL) {
rv = rtems_mkdir(target, S_IRWXU | S_IRWXG | S_IRWXO);
if (rv == 0) {
rv = mount(
10a60a: e9 19 00 00 00 jmp 10a628 <mount>
options,
data
);
}
} else {
errno = EINVAL;
10a60f: e8 b8 4b 01 00 call 11f1cc <__errno>
10a614: c7 00 16 00 00 00 movl $0x16,(%eax)
const char *filesystemtype,
rtems_filesystem_options_t options,
const void *data
)
{
int rv = -1;
10a61a: 83 c8 ff or $0xffffffff,%eax
} else {
errno = EINVAL;
}
return rv;
}
10a61d: 8d 65 f4 lea -0xc(%ebp),%esp
10a620: 5b pop %ebx
10a621: 5e pop %esi
10a622: 5f pop %edi
10a623: 5d pop %ebp
10a624: c3 ret
0011623c <msdos_creat_node>:
msdos_node_type_t type,
const char *name,
int name_len,
mode_t mode,
const fat_file_fd_t *link_fd)
{
11623c: 55 push %ebp
11623d: 89 e5 mov %esp,%ebp
11623f: 57 push %edi
116240: 56 push %esi
116241: 53 push %ebx
116242: 81 ec bc 00 00 00 sub $0xbc,%esp
116248: 8b 75 1c mov 0x1c(%ebp),%esi
int rc = RC_OK;
ssize_t ret = 0;
msdos_fs_info_t *fs_info = parent_loc->mt_entry->fs_info;
11624b: 8b 55 08 mov 0x8(%ebp),%edx
11624e: 8b 42 14 mov 0x14(%edx),%eax
116251: 8b 58 08 mov 0x8(%eax),%ebx
fat_file_fd_t *parent_fat_fd = parent_loc->node_access;
116254: 8b 52 08 mov 0x8(%edx),%edx
116257: 89 95 40 ff ff ff mov %edx,-0xc0(%ebp)
fat_file_fd_t *fat_fd = NULL;
11625d: c7 85 54 ff ff ff 00 movl $0x0,-0xac(%ebp)
116264: 00 00 00
time_t time_ret = 0;
uint16_t time_val = 0;
116267: 66 c7 85 50 ff ff ff movw $0x0,-0xb0(%ebp)
11626e: 00 00
uint16_t date = 0;
116270: 66 c7 85 52 ff ff ff movw $0x0,-0xae(%ebp)
116277: 00 00
static inline void
fat_dir_pos_init(
fat_dir_pos_t *dir_pos
)
{
dir_pos->sname.cln = 0;
116279: c7 85 58 ff ff ff 00 movl $0x0,-0xa8(%ebp)
116280: 00 00 00
dir_pos->sname.ofs = 0;
116283: c7 85 5c ff ff ff 00 movl $0x0,-0xa4(%ebp)
11628a: 00 00 00
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
11628d: c7 85 60 ff ff ff ff movl $0xffffffff,-0xa0(%ebp)
116294: ff ff ff
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
116297: c7 85 64 ff ff ff ff movl $0xffffffff,-0x9c(%ebp)
11629e: ff ff ff
uint32_t sec = 0;
uint32_t byte = 0;
fat_dir_pos_init(&dir_pos);
memset(short_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
1162a1: 8d 95 68 ff ff ff lea -0x98(%ebp),%edx
1162a7: 31 c0 xor %eax,%eax
1162a9: b9 08 00 00 00 mov $0x8,%ecx
1162ae: 89 d7 mov %edx,%edi
1162b0: f3 ab rep stos %eax,%es:(%edi)
memset(dot_dotdot, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE * 2);
1162b2: 8d 4d a8 lea -0x58(%ebp),%ecx
1162b5: 89 8d 44 ff ff ff mov %ecx,-0xbc(%ebp)
1162bb: b9 10 00 00 00 mov $0x10,%ecx
1162c0: 8b bd 44 ff ff ff mov -0xbc(%ebp),%edi
1162c6: f3 ab rep stos %eax,%es:(%edi)
if (name_len > MSDOS_NAME_MAX_LFN_WITH_DOT) {
1162c8: 81 7d 14 04 01 00 00 cmpl $0x104,0x14(%ebp)
1162cf: 7e 0d jle 1162de <msdos_creat_node+0xa2> <== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one(ENAMETOOLONG);
1162d1: e8 3a 35 00 00 call 119810 <__errno> <== NOT EXECUTED
1162d6: c7 00 5b 00 00 00 movl $0x5b,(%eax) <== NOT EXECUTED
1162dc: eb 22 jmp 116300 <msdos_creat_node+0xc4> <== NOT EXECUTED
}
name_type = msdos_long_to_short (name, name_len,
1162de: 6a 0b push $0xb
1162e0: 52 push %edx
1162e1: ff 75 14 pushl 0x14(%ebp)
1162e4: ff 75 10 pushl 0x10(%ebp)
1162e7: e8 22 04 00 00 call 11670e <msdos_long_to_short>
1162ec: 89 c7 mov %eax,%edi
MSDOS_DIR_NAME(short_node),
MSDOS_NAME_MAX);
if (name_type == MSDOS_NAME_INVALID) {
1162ee: 83 c4 10 add $0x10,%esp
1162f1: 85 c0 test %eax,%eax
1162f3: 75 13 jne 116308 <msdos_creat_node+0xcc> <== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one(EINVAL);
1162f5: e8 16 35 00 00 call 119810 <__errno> <== NOT EXECUTED
1162fa: c7 00 16 00 00 00 movl $0x16,(%eax) <== NOT EXECUTED
116300: 83 cf ff or $0xffffffff,%edi <== NOT EXECUTED
116303: e9 a7 02 00 00 jmp 1165af <msdos_creat_node+0x373><== NOT EXECUTED
}
/* fill reserved field */
*MSDOS_DIR_NT_RES(short_node) = MSDOS_RES_NT_VALUE;
116308: c6 85 74 ff ff ff 00 movb $0x0,-0x8c(%ebp)
/* set up last write date and time */
time_ret = time(NULL);
11630f: 83 ec 0c sub $0xc,%esp
116312: 6a 00 push $0x0
116314: e8 4b 78 00 00 call 11db64 <time>
if ( time_ret == -1 )
116319: 83 c4 10 add $0x10,%esp
11631c: 83 f8 ff cmp $0xffffffff,%eax
11631f: 75 02 jne 116323 <msdos_creat_node+0xe7> <== ALWAYS TAKEN
116321: eb dd jmp 116300 <msdos_creat_node+0xc4> <== NOT EXECUTED
return -1;
msdos_date_unix2dos(time_ret, &date, &time_val);
116323: 52 push %edx
116324: 8d 95 50 ff ff ff lea -0xb0(%ebp),%edx
11632a: 52 push %edx
11632b: 8d 95 52 ff ff ff lea -0xae(%ebp),%edx
116331: 52 push %edx
116332: 50 push %eax
116333: e8 34 27 00 00 call 118a6c <msdos_date_unix2dos>
*MSDOS_DIR_CRT_TIME(short_node) = CT_LE_W(time_val);
116338: 8b 95 50 ff ff ff mov -0xb0(%ebp),%edx
11633e: 66 89 95 76 ff ff ff mov %dx,-0x8a(%ebp)
*MSDOS_DIR_CRT_DATE(short_node) = CT_LE_W(date);
116345: 66 8b 85 52 ff ff ff mov -0xae(%ebp),%ax
11634c: 66 89 85 78 ff ff ff mov %ax,-0x88(%ebp)
*MSDOS_DIR_WRITE_TIME(short_node) = CT_LE_W(time_val);
116353: 66 89 95 7e ff ff ff mov %dx,-0x82(%ebp)
*MSDOS_DIR_WRITE_DATE(short_node) = CT_LE_W(date);
11635a: 66 89 45 80 mov %ax,-0x80(%ebp)
*MSDOS_DIR_LAST_ACCESS_DATE(short_node) = CT_LE_W(date);
11635e: 66 89 85 7a ff ff ff mov %ax,-0x86(%ebp)
/* initialize directory/file size */
*MSDOS_DIR_FILE_SIZE(short_node) = MSDOS_INIT_DIR_SIZE;
116365: c7 45 84 00 00 00 00 movl $0x0,-0x7c(%ebp)
if (type == MSDOS_DIRECTORY) {
11636c: 83 c4 10 add $0x10,%esp
11636f: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
116373: 75 0c jne 116381 <msdos_creat_node+0x145>
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_DIRECTORY;
116375: 80 8d 73 ff ff ff 10 orb $0x10,-0x8d(%ebp)
11637c: e9 a0 00 00 00 jmp 116421 <msdos_creat_node+0x1e5>
}
else if (type == MSDOS_HARD_LINK) {
116381: 83 7d 0c 02 cmpl $0x2,0xc(%ebp)
116385: 0f 85 8f 00 00 00 jne 11641a <msdos_creat_node+0x1de><== ALWAYS TAKEN
* node to the newly created
*/
/*
* read the original directory entry
*/
sec = fat_cluster_num_to_sector_num(&fs_info->fat,
11638b: 8b 46 20 mov 0x20(%esi),%eax <== NOT EXECUTED
fat_cluster_num_to_sector_num(
const fat_fs_info_t *fs_info,
uint32_t cln
)
{
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
11638e: 85 c0 test %eax,%eax <== NOT EXECUTED
116390: 75 0b jne 11639d <msdos_creat_node+0x161><== NOT EXECUTED
116392: f6 43 0a 03 testb $0x3,0xa(%ebx) <== NOT EXECUTED
116396: 74 05 je 11639d <msdos_creat_node+0x161><== NOT EXECUTED
return fs_info->vol.rdir_loc;
116398: 8b 43 1c mov 0x1c(%ebx),%eax <== NOT EXECUTED
11639b: eb 0c jmp 1163a9 <msdos_creat_node+0x16d><== NOT EXECUTED
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
11639d: 83 e8 02 sub $0x2,%eax <== NOT EXECUTED
1163a0: 0f b6 4b 05 movzbl 0x5(%ebx),%ecx <== NOT EXECUTED
1163a4: d3 e0 shl %cl,%eax <== NOT EXECUTED
1163a6: 03 43 30 add 0x30(%ebx),%eax <== NOT EXECUTED
link_fd->dir_pos.sname.cln);
sec += (link_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
1163a9: 8b 56 24 mov 0x24(%esi),%edx <== NOT EXECUTED
byte = (link_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1));
ret = _fat_block_read(&fs_info->fat,
1163ac: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
sec, byte, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE,
link_node);
1163af: 8d 4d 88 lea -0x78(%ebp),%ecx <== NOT EXECUTED
sec = fat_cluster_num_to_sector_num(&fs_info->fat,
link_fd->dir_pos.sname.cln);
sec += (link_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
byte = (link_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1));
ret = _fat_block_read(&fs_info->fat,
1163b2: 51 push %ecx <== NOT EXECUTED
1163b3: 6a 20 push $0x20 <== NOT EXECUTED
* read the original directory entry
*/
sec = fat_cluster_num_to_sector_num(&fs_info->fat,
link_fd->dir_pos.sname.cln);
sec += (link_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
byte = (link_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1));
1163b5: 0f b7 0b movzwl (%ebx),%ecx <== NOT EXECUTED
1163b8: 49 dec %ecx <== NOT EXECUTED
1163b9: 21 d1 and %edx,%ecx <== NOT EXECUTED
ret = _fat_block_read(&fs_info->fat,
1163bb: 51 push %ecx <== NOT EXECUTED
/*
* read the original directory entry
*/
sec = fat_cluster_num_to_sector_num(&fs_info->fat,
link_fd->dir_pos.sname.cln);
sec += (link_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
1163bc: 0f b6 4b 02 movzbl 0x2(%ebx),%ecx <== NOT EXECUTED
1163c0: d3 ea shr %cl,%edx <== NOT EXECUTED
1163c2: 01 c2 add %eax,%edx <== NOT EXECUTED
byte = (link_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1));
ret = _fat_block_read(&fs_info->fat,
1163c4: 52 push %edx <== NOT EXECUTED
1163c5: 53 push %ebx <== NOT EXECUTED
1163c6: e8 14 c1 ff ff call 1124df <_fat_block_read> <== NOT EXECUTED
sec, byte, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE,
link_node);
if (ret < 0) {
1163cb: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
1163ce: 85 c0 test %eax,%eax <== NOT EXECUTED
1163d0: 0f 88 2a ff ff ff js 116300 <msdos_creat_node+0xc4> <== NOT EXECUTED
return -1;
}
/*
* copy various attributes
*/
*MSDOS_DIR_ATTR(short_node) =*MSDOS_DIR_ATTR(link_node);
1163d6: 8a 45 93 mov -0x6d(%ebp),%al <== NOT EXECUTED
*MSDOS_DIR_CRT_TIME_TENTH(short_node)=*MSDOS_DIR_CRT_TIME_TENTH(link_node);
1163d9: 8a 55 95 mov -0x6b(%ebp),%dl <== NOT EXECUTED
1163dc: 88 95 75 ff ff ff mov %dl,-0x8b(%ebp) <== NOT EXECUTED
*MSDOS_DIR_CRT_TIME(short_node) =*MSDOS_DIR_CRT_TIME(link_node);
1163e2: 66 8b 55 96 mov -0x6a(%ebp),%dx <== NOT EXECUTED
1163e6: 66 89 95 76 ff ff ff mov %dx,-0x8a(%ebp) <== NOT EXECUTED
*MSDOS_DIR_CRT_DATE(short_node) =*MSDOS_DIR_CRT_DATE(link_node);
1163ed: 8b 55 98 mov -0x68(%ebp),%edx <== NOT EXECUTED
1163f0: 66 89 95 78 ff ff ff mov %dx,-0x88(%ebp) <== NOT EXECUTED
/*
* copy/set "file size", "first cluster"
*/
*MSDOS_DIR_FILE_SIZE(short_node) =*MSDOS_DIR_FILE_SIZE(link_node);
1163f7: 8b 55 a4 mov -0x5c(%ebp),%edx <== NOT EXECUTED
1163fa: 89 55 84 mov %edx,-0x7c(%ebp) <== NOT EXECUTED
*MSDOS_DIR_FIRST_CLUSTER_LOW(short_node) =
1163fd: 66 8b 55 a2 mov -0x5e(%ebp),%dx <== NOT EXECUTED
116401: 66 89 55 82 mov %dx,-0x7e(%ebp) <== NOT EXECUTED
*MSDOS_DIR_FIRST_CLUSTER_LOW(link_node);
*MSDOS_DIR_FIRST_CLUSTER_HI(short_node) =
116405: 8b 55 9c mov -0x64(%ebp),%edx <== NOT EXECUTED
116408: 66 89 95 7c ff ff ff mov %dx,-0x84(%ebp) <== NOT EXECUTED
*MSDOS_DIR_FIRST_CLUSTER_HI(link_node);
/*
* set "archive bit" due to changes
*/
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_ARCHIVE;
11640f: 83 c8 20 or $0x20,%eax <== NOT EXECUTED
116412: 88 85 73 ff ff ff mov %al,-0x8d(%ebp) <== NOT EXECUTED
116418: eb 07 jmp 116421 <msdos_creat_node+0x1e5><== NOT EXECUTED
}
else { /* regular file... */
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_ARCHIVE;
11641a: 80 8d 73 ff ff ff 20 orb $0x20,-0x8d(%ebp)
/*
* find free space in the parent directory and write new initialized
* FAT 32 Bytes Directory Entry Structure to the disk
*/
rc = msdos_get_name_node(parent_loc, true, name, name_len,
116421: 50 push %eax
name_type, &dir_pos, short_node);
116422: 8d 85 68 ff ff ff lea -0x98(%ebp),%eax
116428: 89 85 44 ff ff ff mov %eax,-0xbc(%ebp)
/*
* find free space in the parent directory and write new initialized
* FAT 32 Bytes Directory Entry Structure to the disk
*/
rc = msdos_get_name_node(parent_loc, true, name, name_len,
11642e: 50 push %eax
11642f: 8d b5 58 ff ff ff lea -0xa8(%ebp),%esi
116435: 56 push %esi
116436: 57 push %edi
116437: ff 75 14 pushl 0x14(%ebp)
11643a: ff 75 10 pushl 0x10(%ebp)
11643d: 6a 01 push $0x1
11643f: ff 75 08 pushl 0x8(%ebp)
116442: e8 df 11 00 00 call 117626 <msdos_get_name_node>
116447: 89 c7 mov %eax,%edi
name_type, &dir_pos, short_node);
if ( rc != RC_OK )
116449: 83 c4 20 add $0x20,%esp
11644c: 85 c0 test %eax,%eax
11644e: 0f 85 5b 01 00 00 jne 1165af <msdos_creat_node+0x373><== NEVER TAKEN
/*
* if we create a new file we are done, if directory there are more steps
* to do
*/
if (type == MSDOS_DIRECTORY)
116454: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
116458: 0f 85 51 01 00 00 jne 1165af <msdos_creat_node+0x373>
{
/* open new directory as fat-file */
rc = fat_file_open(&fs_info->fat, &dir_pos, &fat_fd);
11645e: 57 push %edi
11645f: 8d 85 54 ff ff ff lea -0xac(%ebp),%eax
116465: 50 push %eax
116466: 56 push %esi
116467: 53 push %ebx
116468: e8 29 b4 ff ff call 111896 <fat_file_open>
11646d: 89 c7 mov %eax,%edi
if (rc != RC_OK)
11646f: 83 c4 10 add $0x10,%esp
116472: 85 c0 test %eax,%eax
116474: 0f 85 1a 01 00 00 jne 116594 <msdos_creat_node+0x358><== NEVER TAKEN
/*
* we opened fat-file for node we just created, so initialize fat-file
* descritor
*/
fat_fd->fat_file_size = 0;
11647a: 8b 95 54 ff ff ff mov -0xac(%ebp),%edx
116480: c7 42 18 00 00 00 00 movl $0x0,0x18(%edx)
fat_fd->fat_file_type = FAT_DIRECTORY;
116487: c7 42 10 00 00 00 00 movl $0x0,0x10(%edx)
fat_fd->size_limit = MSDOS_MAX_DIR_LENGHT;
11648e: c7 42 14 00 00 20 00 movl $0x200000,0x14(%edx)
/*
* dot and dotdot entries are identical to new node except the
* names
*/
memcpy(DOT_NODE_P(dot_dotdot), short_node,
116495: 8d 7d a8 lea -0x58(%ebp),%edi
116498: b9 08 00 00 00 mov $0x8,%ecx
11649d: 8b b5 44 ff ff ff mov -0xbc(%ebp),%esi
1164a3: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
memcpy(DOTDOT_NODE_P(dot_dotdot), short_node,
1164a5: 8d 7d c8 lea -0x38(%ebp),%edi
1164a8: b1 08 mov $0x8,%cl
1164aa: 8b b5 44 ff ff ff mov -0xbc(%ebp),%esi
1164b0: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
memcpy(MSDOS_DIR_NAME(DOT_NODE_P(dot_dotdot)), MSDOS_DOT_NAME,
1164b2: 8d 45 a8 lea -0x58(%ebp),%eax
1164b5: 8b 35 b4 8b 12 00 mov 0x128bb4,%esi
1164bb: b1 0b mov $0xb,%cl
1164bd: 89 c7 mov %eax,%edi
1164bf: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
MSDOS_NAME_MAX);
memcpy(MSDOS_DIR_NAME(DOTDOT_NODE_P(dot_dotdot)), MSDOS_DOTDOT_NAME,
1164c1: 8d 45 c8 lea -0x38(%ebp),%eax
1164c4: 8b 35 b0 8b 12 00 mov 0x128bb0,%esi
1164ca: b1 0b mov $0xb,%cl
1164cc: 89 c7 mov %eax,%edi
1164ce: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
/*
* here we can ommit FAT32 condition because for all FAT types dirs
* right under root dir should contain 0 in dotdot entry but for
* FAT12/16 parent_fat_fd->cluster_num always contains such value
*/
if ((FAT_FD_OF_ROOT_DIR(parent_fat_fd)) &&
1164d0: 8b 8d 40 ff ff ff mov -0xc0(%ebp),%ecx
1164d6: 83 79 20 01 cmpl $0x1,0x20(%ecx)
1164da: 75 1a jne 1164f6 <msdos_creat_node+0x2ba>
1164dc: 83 79 24 00 cmpl $0x0,0x24(%ecx)
1164e0: 75 14 jne 1164f6 <msdos_creat_node+0x2ba><== NEVER TAKEN
1164e2: f6 43 0a 04 testb $0x4,0xa(%ebx)
1164e6: 74 0e je 1164f6 <msdos_creat_node+0x2ba><== ALWAYS TAKEN
(fs_info->fat.vol.type & FAT_FAT32))
{
*MSDOS_DIR_FIRST_CLUSTER_LOW(DOTDOT_NODE_P(dot_dotdot)) = 0x0000;
1164e8: 66 c7 45 e2 00 00 movw $0x0,-0x1e(%ebp) <== NOT EXECUTED
*MSDOS_DIR_FIRST_CLUSTER_HI(DOTDOT_NODE_P(dot_dotdot)) = 0x0000;
1164ee: 66 c7 45 dc 00 00 movw $0x0,-0x24(%ebp) <== NOT EXECUTED
1164f4: eb 14 jmp 11650a <msdos_creat_node+0x2ce><== NOT EXECUTED
}
else
{
*MSDOS_DIR_FIRST_CLUSTER_LOW(DOTDOT_NODE_P(dot_dotdot)) =
CT_LE_W((uint16_t )((parent_fat_fd->cln) & 0x0000FFFF));
1164f6: 8b 8d 40 ff ff ff mov -0xc0(%ebp),%ecx
1164fc: 8b 41 1c mov 0x1c(%ecx),%eax
1164ff: 66 89 45 e2 mov %ax,-0x1e(%ebp)
*MSDOS_DIR_FIRST_CLUSTER_HI(DOTDOT_NODE_P(dot_dotdot)) =
CT_LE_W((uint16_t )(((parent_fat_fd->cln) & 0xFFFF0000)>>16));
116503: c1 e8 10 shr $0x10,%eax
116506: 66 89 45 dc mov %ax,-0x24(%ebp)
/*
* write dot and dotdot entries to new fat-file: currently fat-file
* correspondes to a new node is zero length, so it will be extended
* by one cluster and entries will be written
*/
ret = fat_file_write(&fs_info->fat, fat_fd, 0,
11650a: 83 ec 0c sub $0xc,%esp
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE * 2,
(uint8_t *)dot_dotdot);
11650d: 8d 75 a8 lea -0x58(%ebp),%esi
/*
* write dot and dotdot entries to new fat-file: currently fat-file
* correspondes to a new node is zero length, so it will be extended
* by one cluster and entries will be written
*/
ret = fat_file_write(&fs_info->fat, fat_fd, 0,
116510: 56 push %esi
116511: 6a 40 push $0x40
116513: 6a 00 push $0x0
116515: 52 push %edx
116516: 53 push %ebx
116517: e8 66 ba ff ff call 111f82 <fat_file_write>
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE * 2,
(uint8_t *)dot_dotdot);
if (ret < 0)
11651c: 83 c4 20 add $0x20,%esp
11651f: 85 c0 test %eax,%eax
116521: 78 5d js 116580 <msdos_creat_node+0x344><== NEVER TAKEN
rc = -1;
goto error;
}
/* increment fat-file size by cluster size */
fat_fd->fat_file_size += fs_info->fat.vol.bpc;
116523: 8b 85 54 ff ff ff mov -0xac(%ebp),%eax
116529: 0f b7 53 06 movzwl 0x6(%ebx),%edx
11652d: 01 50 18 add %edx,0x18(%eax)
/* set up cluster num for dot entry */
*MSDOS_DIR_FIRST_CLUSTER_LOW(DOT_NODE_P(dot_dotdot)) =
CT_LE_W((uint16_t )((fat_fd->cln) & 0x0000FFFF));
116530: 8b 50 1c mov 0x1c(%eax),%edx
116533: 66 89 55 c2 mov %dx,-0x3e(%ebp)
*MSDOS_DIR_FIRST_CLUSTER_HI(DOT_NODE_P(dot_dotdot)) =
CT_LE_W((uint16_t )(((fat_fd->cln) & 0xFFFF0000) >> 16));
116537: c1 ea 10 shr $0x10,%edx
11653a: 66 89 55 bc mov %dx,-0x44(%ebp)
/* rewrite dot entry */
ret = fat_file_write(&fs_info->fat, fat_fd, 0,
11653e: 83 ec 0c sub $0xc,%esp
116541: 56 push %esi
116542: 6a 20 push $0x20
116544: 6a 00 push $0x0
116546: 50 push %eax
116547: 53 push %ebx
116548: e8 35 ba ff ff call 111f82 <fat_file_write>
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE,
(uint8_t *)DOT_NODE_P(dot_dotdot));
if (ret < 0)
11654d: 83 c4 20 add $0x20,%esp
116550: 85 c0 test %eax,%eax
116552: 78 2c js 116580 <msdos_creat_node+0x344><== NEVER TAKEN
rc = -1;
goto error;
}
/* write first cluster num of a new directory to disk */
rc = msdos_set_first_cluster_num(parent_loc->mt_entry, fat_fd);
116554: 56 push %esi
116555: 56 push %esi
116556: ff b5 54 ff ff ff pushl -0xac(%ebp)
11655c: 8b 55 08 mov 0x8(%ebp),%edx
11655f: ff 72 14 pushl 0x14(%edx)
116562: e8 ee 03 00 00 call 116955 <msdos_set_first_cluster_num>
116567: 89 c7 mov %eax,%edi
if (rc != RC_OK)
116569: 83 c4 10 add $0x10,%esp
11656c: 85 c0 test %eax,%eax
11656e: 75 13 jne 116583 <msdos_creat_node+0x347><== NEVER TAKEN
goto error;
fat_file_close(&fs_info->fat, fat_fd);
116570: 51 push %ecx
116571: 51 push %ecx
116572: ff b5 54 ff ff ff pushl -0xac(%ebp)
116578: 53 push %ebx
116579: e8 ba b6 ff ff call 111c38 <fat_file_close>
11657e: eb 2c jmp 1165ac <msdos_creat_node+0x370>
ret = fat_file_write(&fs_info->fat, fat_fd, 0,
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE * 2,
(uint8_t *)dot_dotdot);
if (ret < 0)
{
rc = -1;
116580: 83 cf ff or $0xffffffff,%edi <== NOT EXECUTED
fat_file_close(&fs_info->fat, fat_fd);
}
return RC_OK;
error:
fat_file_close(&fs_info->fat, fat_fd);
116583: 52 push %edx <== NOT EXECUTED
116584: 52 push %edx <== NOT EXECUTED
116585: ff b5 54 ff ff ff pushl -0xac(%ebp) <== NOT EXECUTED
11658b: 53 push %ebx <== NOT EXECUTED
11658c: e8 a7 b6 ff ff call 111c38 <fat_file_close> <== NOT EXECUTED
116591: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
err:
/* mark the used 32bytes structure on the disk as free */
msdos_set_first_char4file_name(parent_loc->mt_entry, &dir_pos, 0xE5);
116594: 50 push %eax <== NOT EXECUTED
116595: 68 e5 00 00 00 push $0xe5 <== NOT EXECUTED
11659a: 8d 85 58 ff ff ff lea -0xa8(%ebp),%eax <== NOT EXECUTED
1165a0: 50 push %eax <== NOT EXECUTED
1165a1: 8b 55 08 mov 0x8(%ebp),%edx <== NOT EXECUTED
1165a4: ff 72 14 pushl 0x14(%edx) <== NOT EXECUTED
1165a7: e8 9e 04 00 00 call 116a4a <msdos_set_first_char4file_name><== NOT EXECUTED
1165ac: 83 c4 10 add $0x10,%esp
return rc;
}
1165af: 89 f8 mov %edi,%eax
1165b1: 8d 65 f4 lea -0xc(%ebp),%esp
1165b4: 5b pop %ebx
1165b5: 5e pop %esi
1165b6: 5f pop %edi
1165b7: 5d pop %ebp
1165b8: c3 ret
00118b5e <msdos_date_dos2unix>:
* called from the stat(), and fstat() system calls and so probably need
* not be too efficient.
*/
unsigned int
msdos_date_dos2unix(unsigned int dd, unsigned int dt)
{
118b5e: 55 push %ebp
118b5f: 89 e5 mov %esp,%ebp
118b61: 57 push %edi
118b62: 56 push %esi
118b63: 53 push %ebx
118b64: 51 push %ecx
118b65: 8b 4d 08 mov 0x8(%ebp),%ecx
118b68: 8b 55 0c mov 0xc(%ebp),%edx
uint32_t days;
uint16_t *months;
seconds = 2 * ((dt & MSDOS_DT_2SECONDS_MASK) >> MSDOS_DT_2SECONDS_SHIFT)
+ ((dt & MSDOS_DT_MINUTES_MASK) >> MSDOS_DT_MINUTES_SHIFT) * 60
+ ((dt & MSDOS_DT_HOURS_MASK) >> MSDOS_DT_HOURS_SHIFT) * 3600;
118b6b: 89 d0 mov %edx,%eax
118b6d: 25 00 f8 00 00 and $0xf800,%eax
118b72: c1 e8 0b shr $0xb,%eax
118b75: 69 c0 08 07 00 00 imul $0x708,%eax,%eax
uint32_t y, year;
uint32_t days;
uint16_t *months;
seconds = 2 * ((dt & MSDOS_DT_2SECONDS_MASK) >> MSDOS_DT_2SECONDS_SHIFT)
+ ((dt & MSDOS_DT_MINUTES_MASK) >> MSDOS_DT_MINUTES_SHIFT) * 60
118b7b: 89 d3 mov %edx,%ebx
118b7d: 81 e3 e0 07 00 00 and $0x7e0,%ebx
118b83: c1 eb 05 shr $0x5,%ebx
118b86: 6b db 1e imul $0x1e,%ebx,%ebx
+ ((dt & MSDOS_DT_HOURS_MASK) >> MSDOS_DT_HOURS_SHIFT) * 3600;
118b89: 01 d8 add %ebx,%eax
uint32_t m, month;
uint32_t y, year;
uint32_t days;
uint16_t *months;
seconds = 2 * ((dt & MSDOS_DT_2SECONDS_MASK) >> MSDOS_DT_2SECONDS_SHIFT)
118b8b: 83 e2 1f and $0x1f,%edx
+ ((dt & MSDOS_DT_MINUTES_MASK) >> MSDOS_DT_MINUTES_SHIFT) * 60
+ ((dt & MSDOS_DT_HOURS_MASK) >> MSDOS_DT_HOURS_SHIFT) * 3600;
118b8e: 01 d0 add %edx,%eax
uint32_t m, month;
uint32_t y, year;
uint32_t days;
uint16_t *months;
seconds = 2 * ((dt & MSDOS_DT_2SECONDS_MASK) >> MSDOS_DT_2SECONDS_SHIFT)
118b90: d1 e0 shl %eax
+ ((dt & MSDOS_DT_HOURS_MASK) >> MSDOS_DT_HOURS_SHIFT) * 3600;
/*
* If the year, month, and day from the last conversion are the
* same then use the saved value.
*/
if (lastdosdate != dd) {
118b92: 0f b7 15 ce 81 13 00 movzwl 0x1381ce,%edx
118b99: 39 ca cmp %ecx,%edx
118b9b: 74 7e je 118c1b <msdos_date_dos2unix+0xbd>
lastdosdate = dd;
118b9d: 66 89 0d ce 81 13 00 mov %cx,0x1381ce
days = 0;
year = (dd & MSDOS_DD_YEAR_MASK) >> MSDOS_DD_YEAR_SHIFT;
118ba4: 89 ce mov %ecx,%esi
118ba6: 81 e6 00 fe 00 00 and $0xfe00,%esi
118bac: c1 ee 09 shr $0x9,%esi
* If the year, month, and day from the last conversion are the
* same then use the saved value.
*/
if (lastdosdate != dd) {
lastdosdate = dd;
days = 0;
118baf: 31 d2 xor %edx,%edx
year = (dd & MSDOS_DD_YEAR_MASK) >> MSDOS_DD_YEAR_SHIFT;
for (y = 0; y < year; y++)
118bb1: 31 db xor %ebx,%ebx
118bb3: eb 14 jmp 118bc9 <msdos_date_dos2unix+0x6b>
days += y & 0x03 ? 365 : 366;
118bb5: 89 df mov %ebx,%edi
118bb7: 83 e7 03 and $0x3,%edi
118bba: 83 ff 01 cmp $0x1,%edi
118bbd: 19 ff sbb %edi,%edi
118bbf: f7 d7 not %edi
118bc1: 8d 94 3a 6e 01 00 00 lea 0x16e(%edx,%edi,1),%edx
*/
if (lastdosdate != dd) {
lastdosdate = dd;
days = 0;
year = (dd & MSDOS_DD_YEAR_MASK) >> MSDOS_DD_YEAR_SHIFT;
for (y = 0; y < year; y++)
118bc8: 43 inc %ebx
118bc9: 39 f3 cmp %esi,%ebx
118bcb: 75 e8 jne 118bb5 <msdos_date_dos2unix+0x57>
days += y & 0x03 ? 365 : 366;
months = year & 0x03 ? regyear : leapyear;
118bcd: be c0 62 13 00 mov $0x1362c0,%esi
118bd2: 80 e3 03 and $0x3,%bl
118bd5: 74 05 je 118bdc <msdos_date_dos2unix+0x7e><== ALWAYS TAKEN
118bd7: be a8 62 13 00 mov $0x1362a8,%esi <== NOT EXECUTED
/*
* Prevent going from 0 to 0xffffffff in the following
* loop.
*/
month = (dd & MSDOS_DD_MONTH_MASK) >> MSDOS_DD_MONTH_SHIFT;
118bdc: 89 cf mov %ecx,%edi
118bde: 81 e7 e0 01 00 00 and $0x1e0,%edi
if (month == 0) {
118be4: c1 ef 05 shr $0x5,%edi
118be7: 75 05 jne 118bee <msdos_date_dos2unix+0x90><== ALWAYS TAKEN
month = 1;
118be9: bf 01 00 00 00 mov $0x1,%edi <== NOT EXECUTED
}
for (m = 0; m < month - 1; m++)
118bee: 31 db xor %ebx,%ebx
118bf0: 4f dec %edi
118bf1: 89 7d f0 mov %edi,-0x10(%ebp)
118bf4: eb 07 jmp 118bfd <msdos_date_dos2unix+0x9f>
days += months[m];
118bf6: 0f b7 3c 5e movzwl (%esi,%ebx,2),%edi <== NOT EXECUTED
118bfa: 01 fa add %edi,%edx <== NOT EXECUTED
*/
month = (dd & MSDOS_DD_MONTH_MASK) >> MSDOS_DD_MONTH_SHIFT;
if (month == 0) {
month = 1;
}
for (m = 0; m < month - 1; m++)
118bfc: 43 inc %ebx <== NOT EXECUTED
118bfd: 3b 5d f0 cmp -0x10(%ebp),%ebx
118c00: 72 f4 jb 118bf6 <msdos_date_dos2unix+0x98><== NEVER TAKEN
days += months[m];
days += ((dd & MSDOS_DD_DAY_MASK) >> MSDOS_DD_DAY_SHIFT) - 1;
118c02: 83 e1 1f and $0x1f,%ecx
118c05: 8d 54 0a ff lea -0x1(%edx,%ecx,1),%edx
lastseconds = (days + DAYSTO1980) * SECONDSPERDAY;
118c09: 69 d2 80 51 01 00 imul $0x15180,%edx,%edx
118c0f: 81 c2 00 a6 ce 12 add $0x12cea600,%edx
118c15: 89 15 d0 81 13 00 mov %edx,0x1381d0
}
return seconds + lastseconds;
118c1b: 03 05 d0 81 13 00 add 0x1381d0,%eax
}
118c21: 5a pop %edx
118c22: 5b pop %ebx
118c23: 5e pop %esi
118c24: 5f pop %edi
118c25: 5d pop %ebp
118c26: c3 ret
00118a6c <msdos_date_unix2dos>:
* file timestamps. The passed in unix time is assumed to be in GMT.
*/
void
msdos_date_unix2dos(unsigned int t, uint16_t *ddp,
uint16_t *dtp)
{
118a6c: 55 push %ebp
118a6d: 89 e5 mov %esp,%ebp
118a6f: 57 push %edi
118a70: 56 push %esi
118a71: 53 push %ebx
118a72: 8b 4d 08 mov 0x8(%ebp),%ecx
/*
* If the time from the last conversion is the same as now, then
* skip the computations and use the saved result.
*/
if (lasttime != t) {
118a75: 39 0d c0 81 13 00 cmp %ecx,0x1381c0
118a7b: 0f 84 be 00 00 00 je 118b3f <msdos_date_unix2dos+0xd3>
lasttime = t;
118a81: 89 0d c0 81 13 00 mov %ecx,0x1381c0
lastdtime = (((t % 60) >> 1) << MSDOS_DT_2SECONDS_SHIFT)
+ (((t / 60) % 60) << MSDOS_DT_MINUTES_SHIFT)
118a87: bb 3c 00 00 00 mov $0x3c,%ebx
118a8c: 89 c8 mov %ecx,%eax
118a8e: 31 d2 xor %edx,%edx
118a90: f7 f3 div %ebx
118a92: 89 d6 mov %edx,%esi
118a94: 31 d2 xor %edx,%edx
118a96: f7 f3 div %ebx
* If the time from the last conversion is the same as now, then
* skip the computations and use the saved result.
*/
if (lasttime != t) {
lasttime = t;
lastdtime = (((t % 60) >> 1) << MSDOS_DT_2SECONDS_SHIFT)
118a98: 89 d7 mov %edx,%edi
118a9a: c1 e7 05 shl $0x5,%edi
+ (((t / 60) % 60) << MSDOS_DT_MINUTES_SHIFT)
+ (((t / 3600) % 24) << MSDOS_DT_HOURS_SHIFT);
118a9d: 66 bb 10 0e mov $0xe10,%bx
118aa1: 89 c8 mov %ecx,%eax
118aa3: 31 d2 xor %edx,%edx
118aa5: f7 f3 div %ebx
118aa7: 66 bb 18 00 mov $0x18,%bx
118aab: 31 d2 xor %edx,%edx
118aad: f7 f3 div %ebx
* If the time from the last conversion is the same as now, then
* skip the computations and use the saved result.
*/
if (lasttime != t) {
lasttime = t;
lastdtime = (((t % 60) >> 1) << MSDOS_DT_2SECONDS_SHIFT)
118aaf: c1 e2 0b shl $0xb,%edx
118ab2: 01 d7 add %edx,%edi
118ab4: d1 ee shr %esi
118ab6: 01 fe add %edi,%esi
118ab8: 66 89 35 c4 81 13 00 mov %si,0x1381c4
/*
* If the number of days since 1970 is the same as the last
* time we did the computation then skip all this leap year
* and month stuff.
*/
days = t / (SECONDSPERDAY);
118abf: bb 80 51 01 00 mov $0x15180,%ebx
118ac4: 89 c8 mov %ecx,%eax
118ac6: 31 d2 xor %edx,%edx
118ac8: f7 f3 div %ebx
if (days != lastday) {
118aca: 3b 05 c8 81 13 00 cmp 0x1381c8,%eax
118ad0: 74 6d je 118b3f <msdos_date_unix2dos+0xd3><== NEVER TAKEN
lastday = days;
118ad2: a3 c8 81 13 00 mov %eax,0x1381c8
for (year = 1970;; year++) {
118ad7: b9 b2 07 00 00 mov $0x7b2,%ecx
inc = year & 0x03 ? 365 : 366;
118adc: 89 cb mov %ecx,%ebx
118ade: 83 e3 03 and $0x3,%ebx
118ae1: 83 fb 01 cmp $0x1,%ebx
118ae4: 19 d2 sbb %edx,%edx
118ae6: f7 d2 not %edx
118ae8: 81 c2 6e 01 00 00 add $0x16e,%edx
if (days < inc)
118aee: 39 d0 cmp %edx,%eax
118af0: 72 05 jb 118af7 <msdos_date_unix2dos+0x8b>
break;
days -= inc;
118af2: 29 d0 sub %edx,%eax
* and month stuff.
*/
days = t / (SECONDSPERDAY);
if (days != lastday) {
lastday = days;
for (year = 1970;; year++) {
118af4: 41 inc %ecx
inc = year & 0x03 ? 365 : 366;
if (days < inc)
break;
days -= inc;
}
118af5: eb e5 jmp 118adc <msdos_date_unix2dos+0x70>
months = year & 0x03 ? regyear : leapyear;
118af7: be c0 62 13 00 mov $0x1362c0,%esi
118afc: 85 db test %ebx,%ebx
118afe: 74 05 je 118b05 <msdos_date_unix2dos+0x99><== ALWAYS TAKEN
118b00: be a8 62 13 00 mov $0x1362a8,%esi <== NOT EXECUTED
for (month = 0; month < 12; month++) {
118b05: 31 d2 xor %edx,%edx
if (days < months[month])
118b07: 0f b7 1c 56 movzwl (%esi,%edx,2),%ebx
118b0b: 39 d8 cmp %ebx,%eax
118b0d: 72 08 jb 118b17 <msdos_date_unix2dos+0xab><== ALWAYS TAKEN
break;
days -= months[month];
118b0f: 29 d8 sub %ebx,%eax <== NOT EXECUTED
if (days < inc)
break;
days -= inc;
}
months = year & 0x03 ? regyear : leapyear;
for (month = 0; month < 12; month++) {
118b11: 42 inc %edx <== NOT EXECUTED
118b12: 83 fa 0c cmp $0xc,%edx <== NOT EXECUTED
118b15: 75 f0 jne 118b07 <msdos_date_unix2dos+0x9b><== NOT EXECUTED
if (days < months[month])
break;
days -= months[month];
}
lastddate = ((days + 1) << MSDOS_DD_DAY_SHIFT)
118b17: 42 inc %edx
118b18: c1 e2 05 shl $0x5,%edx
118b1b: 8d 54 02 01 lea 0x1(%edx,%eax,1),%edx
118b1f: 66 89 15 cc 81 13 00 mov %dx,0x1381cc
* Remember dos's idea of time is relative to 1980.
* unix's is relative to 1970. If somehow we get a
* time before 1980 then don't give totally crazy
* results.
*/
if (year > 1980)
118b26: 81 f9 bc 07 00 00 cmp $0x7bc,%ecx
118b2c: 76 11 jbe 118b3f <msdos_date_unix2dos+0xd3><== NEVER TAKEN
lastddate += (year - 1980) <<
118b2e: 66 81 e9 bc 07 sub $0x7bc,%cx
118b33: c1 e1 09 shl $0x9,%ecx
118b36: 01 d1 add %edx,%ecx
118b38: 66 89 0d cc 81 13 00 mov %cx,0x1381cc
MSDOS_DD_YEAR_SHIFT;
}
}
*dtp = lastdtime;
118b3f: 66 8b 15 c4 81 13 00 mov 0x1381c4,%dx
118b46: 8b 45 10 mov 0x10(%ebp),%eax
118b49: 66 89 10 mov %dx,(%eax)
*ddp = lastddate;
118b4c: 66 8b 15 cc 81 13 00 mov 0x1381cc,%dx
118b53: 8b 45 0c mov 0xc(%ebp),%eax
118b56: 66 89 10 mov %dx,(%eax)
}
118b59: 5b pop %ebx
118b5a: 5e pop %esi
118b5b: 5f pop %edi
118b5c: 5d pop %ebp
118b5d: c3 ret
00116b20 <msdos_dir_is_empty>:
msdos_dir_is_empty(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd,
bool *ret_val
)
{
116b20: 55 push %ebp
116b21: 89 e5 mov %esp,%ebp
116b23: 57 push %edi
116b24: 56 push %esi
116b25: 53 push %ebx
116b26: 83 ec 1c sub $0x1c,%esp
ssize_t ret = 0;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
116b29: 8b 45 08 mov 0x8(%ebp),%eax
116b2c: 8b 58 08 mov 0x8(%eax),%ebx
uint32_t j = 0, i = 0;
/* dir is not empty */
*ret_val = false;
116b2f: 8b 55 10 mov 0x10(%ebp),%edx
116b32: c6 02 00 movb $0x0,(%edx)
bool *ret_val
)
{
ssize_t ret = 0;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t j = 0, i = 0;
116b35: 31 ff xor %edi,%edi
/* dir is not empty */
*ret_val = false;
while ((ret = fat_file_read(&fs_info->fat, fat_fd, j * fs_info->fat.vol.bps,
116b37: e9 8f 00 00 00 jmp 116bcb <msdos_dir_is_empty+0xab>
fs_info->fat.vol.bps,
fs_info->cl_buf)) != FAT_EOF)
{
if (ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
116b3c: 83 f8 1f cmp $0x1f,%eax
116b3f: 0f 8e b3 00 00 00 jle 116bf8 <msdos_dir_is_empty+0xd8><== NEVER TAKEN
return -1;
assert(ret == fs_info->fat.vol.bps);
116b45: 0f b7 0b movzwl (%ebx),%ecx
116b48: 39 c8 cmp %ecx,%eax
116b4a: 74 74 je 116bc0 <msdos_dir_is_empty+0xa0><== ALWAYS TAKEN
116b4c: 68 15 8b 12 00 push $0x128b15 <== NOT EXECUTED
116b51: 68 b8 8b 12 00 push $0x128bb8 <== NOT EXECUTED
116b56: 68 60 03 00 00 push $0x360 <== NOT EXECUTED
116b5b: 68 31 8b 12 00 push $0x128b31 <== NOT EXECUTED
116b60: e8 57 cb ff ff call 1136bc <__assert_func> <== NOT EXECUTED
/* have to look at the DIR_NAME as "raw" 8-bit data */
for (i = 0;
i < fs_info->fat.vol.bps;
i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
{
char* entry = (char*) fs_info->cl_buf + i;
116b65: 8b 8b 94 00 00 00 mov 0x94(%ebx),%ecx
116b6b: 01 f1 add %esi,%ecx
* then consider it as empty.
*
* Just ignore long file name entries. They must have a short entry to
* be valid.
*/
if (((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
116b6d: 8a 11 mov (%ecx),%dl
116b6f: 88 55 e7 mov %dl,-0x19(%ebp)
116b72: 80 fa e5 cmp $0xe5,%dl
116b75: 74 3a je 116bb1 <msdos_dir_is_empty+0x91><== NEVER TAKEN
MSDOS_THIS_DIR_ENTRY_EMPTY) ||
((*MSDOS_DIR_ATTR(entry) & MSDOS_ATTR_LFN_MASK) ==
116b77: 8a 41 0b mov 0xb(%ecx),%al
116b7a: 83 e0 3f and $0x3f,%eax
*
* Just ignore long file name entries. They must have a short entry to
* be valid.
*/
if (((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
MSDOS_THIS_DIR_ENTRY_EMPTY) ||
116b7d: 3c 0f cmp $0xf,%al
116b7f: 74 30 je 116bb1 <msdos_dir_is_empty+0x91><== NEVER TAKEN
((*MSDOS_DIR_ATTR(entry) & MSDOS_ATTR_LFN_MASK) ==
MSDOS_ATTR_LFN) ||
(strncmp(MSDOS_DIR_NAME((entry)), MSDOS_DOT_NAME,
116b81: 50 push %eax
116b82: 6a 0b push $0xb
116b84: 68 7b 8b 12 00 push $0x128b7b
116b89: 51 push %ecx
116b8a: 89 4d dc mov %ecx,-0x24(%ebp)
116b8d: e8 0a 40 00 00 call 11ab9c <strncmp>
116b92: 83 c4 10 add $0x10,%esp
* be valid.
*/
if (((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
MSDOS_THIS_DIR_ENTRY_EMPTY) ||
((*MSDOS_DIR_ATTR(entry) & MSDOS_ATTR_LFN_MASK) ==
MSDOS_ATTR_LFN) ||
116b95: 85 c0 test %eax,%eax
116b97: 8b 4d dc mov -0x24(%ebp),%ecx
116b9a: 74 15 je 116bb1 <msdos_dir_is_empty+0x91>
(strncmp(MSDOS_DIR_NAME((entry)), MSDOS_DOT_NAME,
MSDOS_SHORT_NAME_LEN) == 0) ||
(strncmp(MSDOS_DIR_NAME((entry)),
116b9c: 50 push %eax
116b9d: 6a 0b push $0xb
116b9f: 68 87 8b 12 00 push $0x128b87
116ba4: 51 push %ecx
116ba5: e8 f2 3f 00 00 call 11ab9c <strncmp>
116baa: 83 c4 10 add $0x10,%esp
if (((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
MSDOS_THIS_DIR_ENTRY_EMPTY) ||
((*MSDOS_DIR_ATTR(entry) & MSDOS_ATTR_LFN_MASK) ==
MSDOS_ATTR_LFN) ||
(strncmp(MSDOS_DIR_NAME((entry)), MSDOS_DOT_NAME,
MSDOS_SHORT_NAME_LEN) == 0) ||
116bad: 85 c0 test %eax,%eax
116baf: 75 05 jne 116bb6 <msdos_dir_is_empty+0x96>
assert(ret == fs_info->fat.vol.bps);
/* have to look at the DIR_NAME as "raw" 8-bit data */
for (i = 0;
i < fs_info->fat.vol.bps;
i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
116bb1: 83 c6 20 add $0x20,%esi
116bb4: eb 0f jmp 116bc5 <msdos_dir_is_empty+0xa5>
}
/*
* Short file name entries mean not empty.
*/
return RC_OK;
116bb6: 31 c0 xor %eax,%eax
continue;
/*
* Nothing more to look at.
*/
if ((*MSDOS_DIR_NAME(entry)) ==
116bb8: 80 7d e7 00 cmpb $0x0,-0x19(%ebp)
116bbc: 75 3d jne 116bfb <msdos_dir_is_empty+0xdb>
116bbe: eb 30 jmp 116bf0 <msdos_dir_is_empty+0xd0>
fs_info->cl_buf)) != FAT_EOF)
{
if (ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
return -1;
assert(ret == fs_info->fat.vol.bps);
116bc0: 31 f6 xor %esi,%esi
/* have to look at the DIR_NAME as "raw" 8-bit data */
for (i = 0;
i < fs_info->fat.vol.bps;
116bc2: 89 45 e0 mov %eax,-0x20(%ebp)
return -1;
assert(ret == fs_info->fat.vol.bps);
/* have to look at the DIR_NAME as "raw" 8-bit data */
for (i = 0;
116bc5: 3b 75 e0 cmp -0x20(%ebp),%esi
116bc8: 72 9b jb 116b65 <msdos_dir_is_empty+0x45><== ALWAYS TAKEN
/*
* Short file name entries mean not empty.
*/
return RC_OK;
}
j++;
116bca: 47 inc %edi <== NOT EXECUTED
uint32_t j = 0, i = 0;
/* dir is not empty */
*ret_val = false;
while ((ret = fat_file_read(&fs_info->fat, fat_fd, j * fs_info->fat.vol.bps,
116bcb: 0f b7 03 movzwl (%ebx),%eax
116bce: 83 ec 0c sub $0xc,%esp
116bd1: ff b3 94 00 00 00 pushl 0x94(%ebx)
116bd7: 50 push %eax
116bd8: 0f af c7 imul %edi,%eax
116bdb: 50 push %eax
116bdc: ff 75 0c pushl 0xc(%ebp)
116bdf: 53 push %ebx
116be0: e8 06 ae ff ff call 1119eb <fat_file_read>
116be5: 83 c4 20 add $0x20,%esp
116be8: 85 c0 test %eax,%eax
116bea: 0f 85 4c ff ff ff jne 116b3c <msdos_dir_is_empty+0x1c><== ALWAYS TAKEN
*/
return RC_OK;
}
j++;
}
*ret_val = true;
116bf0: 8b 55 10 mov 0x10(%ebp),%edx
116bf3: c6 02 01 movb $0x1,(%edx)
return RC_OK;
116bf6: eb 03 jmp 116bfb <msdos_dir_is_empty+0xdb>
while ((ret = fat_file_read(&fs_info->fat, fat_fd, j * fs_info->fat.vol.bps,
fs_info->fat.vol.bps,
fs_info->cl_buf)) != FAT_EOF)
{
if (ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
return -1;
116bf8: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
}
j++;
}
*ret_val = true;
return RC_OK;
}
116bfb: 8d 65 f4 lea -0xc(%ebp),%esp
116bfe: 5b pop %ebx
116bff: 5e pop %esi
116c00: 5f pop %edi
116c01: 5d pop %ebp
116c02: c3 ret
00118cfc <msdos_dir_read>:
* the number of bytes read on success, or -1 if error occured (errno
* set apropriately).
*/
ssize_t
msdos_dir_read(rtems_libio_t *iop, void *buffer, size_t count)
{
118cfc: 55 push %ebp <== NOT EXECUTED
118cfd: 89 e5 mov %esp,%ebp <== NOT EXECUTED
118cff: 57 push %edi <== NOT EXECUTED
118d00: 56 push %esi <== NOT EXECUTED
118d01: 53 push %ebx <== NOT EXECUTED
118d02: 81 ec 7c 01 00 00 sub $0x17c,%esp <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
118d08: 8b 5d 08 mov 0x8(%ebp),%ebx <== NOT EXECUTED
118d0b: 8b 43 24 mov 0x24(%ebx),%eax <== NOT EXECUTED
118d0e: 8b 40 08 mov 0x8(%eax),%eax <== NOT EXECUTED
118d11: 89 85 b0 fe ff ff mov %eax,-0x150(%ebp) <== NOT EXECUTED
fat_file_fd_t *fat_fd = iop->pathinfo.node_access;
118d17: 8b 5b 18 mov 0x18(%ebx),%ebx <== NOT EXECUTED
118d1a: 89 9d 9c fe ff ff mov %ebx,-0x164(%ebp) <== NOT EXECUTED
fat_file_fd_t *tmp_fat_fd = NULL;
118d20: c7 85 c0 fe ff ff 00 movl $0x0,-0x140(%ebp) <== NOT EXECUTED
118d27: 00 00 00
uint32_t start = 0;
ssize_t ret = 0;
uint32_t cmpltd = 0;
uint32_t j = 0, i = 0;
uint32_t bts2rd = 0;
uint32_t cur_cln = 0;
118d2a: c7 85 c4 fe ff ff 00 movl $0x0,-0x13c(%ebp) <== NOT EXECUTED
118d31: 00 00 00
/*
* cast start and count - protect against using sizes that are not exact
* multiples of the -dirent- size. These could result in unexpected
* results
*/
start = iop->offset / sizeof(struct dirent);
118d34: 6a 00 push $0x0 <== NOT EXECUTED
118d36: 68 10 01 00 00 push $0x110 <== NOT EXECUTED
118d3b: 8b 5d 08 mov 0x8(%ebp),%ebx <== NOT EXECUTED
118d3e: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
118d41: ff 73 04 pushl 0x4(%ebx) <== NOT EXECUTED
118d44: e8 df cd 00 00 call 125b28 <__divdi3> <== NOT EXECUTED
118d49: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
118d4c: 89 85 90 fe ff ff mov %eax,-0x170(%ebp) <== NOT EXECUTED
count = (count / sizeof(struct dirent)) * sizeof(struct dirent);
118d52: b9 10 01 00 00 mov $0x110,%ecx <== NOT EXECUTED
118d57: 8b 45 10 mov 0x10(%ebp),%eax <== NOT EXECUTED
118d5a: 31 d2 xor %edx,%edx <== NOT EXECUTED
118d5c: f7 f1 div %ecx <== NOT EXECUTED
118d5e: 69 c0 10 01 00 00 imul $0x110,%eax,%eax <== NOT EXECUTED
118d64: 89 85 94 fe ff ff mov %eax,-0x16c(%ebp) <== NOT EXECUTED
* too, so read such set of sectors is quick operation for low-level IO
* layer.
*/
bts2rd = (FAT_FD_OF_ROOT_DIR(fat_fd) &&
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16))) ?
fat_fd->fat_file_size :
118d6a: 8b 9d 9c fe ff ff mov -0x164(%ebp),%ebx <== NOT EXECUTED
118d70: 83 7b 20 01 cmpl $0x1,0x20(%ebx) <== NOT EXECUTED
118d74: 75 1d jne 118d93 <msdos_dir_read+0x97> <== NOT EXECUTED
* optimization: we know that root directory for FAT12/16 volumes is
* sequential set of sectors and any cluster is sequential set of sectors
* too, so read such set of sectors is quick operation for low-level IO
* layer.
*/
bts2rd = (FAT_FD_OF_ROOT_DIR(fat_fd) &&
118d76: 83 7b 24 00 cmpl $0x0,0x24(%ebx) <== NOT EXECUTED
118d7a: 75 17 jne 118d93 <msdos_dir_read+0x97> <== NOT EXECUTED
118d7c: 8b 9d b0 fe ff ff mov -0x150(%ebp),%ebx <== NOT EXECUTED
118d82: f6 43 0a 03 testb $0x3,0xa(%ebx) <== NOT EXECUTED
118d86: 74 0b je 118d93 <msdos_dir_read+0x97> <== NOT EXECUTED
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16))) ?
fat_fd->fat_file_size :
118d88: 8b 9d 9c fe ff ff mov -0x164(%ebp),%ebx <== NOT EXECUTED
118d8e: 8b 5b 18 mov 0x18(%ebx),%ebx <== NOT EXECUTED
118d91: eb 0a jmp 118d9d <msdos_dir_read+0xa1> <== NOT EXECUTED
118d93: 8b 9d b0 fe ff ff mov -0x150(%ebp),%ebx <== NOT EXECUTED
118d99: 0f b7 5b 06 movzwl 0x6(%ebx),%ebx <== NOT EXECUTED
118d9d: 89 9d 88 fe ff ff mov %ebx,-0x178(%ebp) <== NOT EXECUTED
fs_info->fat.vol.bpc;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
118da3: 51 push %ecx <== NOT EXECUTED
118da4: 6a 00 push $0x0 <== NOT EXECUTED
118da6: 6a 00 push $0x0 <== NOT EXECUTED
118da8: 8b 9d b0 fe ff ff mov -0x150(%ebp),%ebx <== NOT EXECUTED
118dae: ff b3 90 00 00 00 pushl 0x90(%ebx) <== NOT EXECUTED
118db4: e8 ab 20 ff ff call 10ae64 <rtems_semaphore_obtain><== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
118db9: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
118dbc: 85 c0 test %eax,%eax <== NOT EXECUTED
118dbe: 0f 84 28 04 00 00 je 1191ec <msdos_dir_read+0x4f0> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
118dc4: e8 47 0a 00 00 call 119810 <__errno> <== NOT EXECUTED
118dc9: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
118dcf: eb 55 jmp 118e26 <msdos_dir_read+0x12a> <== NOT EXECUTED
* fat-file is already opened by open call, so read it
* Always read directory fat-file from the beggining because of MSDOS
* directories feature :( - we should count elements currently
* present in the directory because there may be holes :)
*/
ret = fat_file_read(&fs_info->fat, fat_fd, (j * bts2rd),
118dd1: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
118dd4: 8b 9d b0 fe ff ff mov -0x150(%ebp),%ebx <== NOT EXECUTED
118dda: ff b3 94 00 00 00 pushl 0x94(%ebx) <== NOT EXECUTED
118de0: ff b5 88 fe ff ff pushl -0x178(%ebp) <== NOT EXECUTED
118de6: ff b5 98 fe ff ff pushl -0x168(%ebp) <== NOT EXECUTED
118dec: ff b5 9c fe ff ff pushl -0x164(%ebp) <== NOT EXECUTED
118df2: 53 push %ebx <== NOT EXECUTED
118df3: e8 f3 8b ff ff call 1119eb <fat_file_read> <== NOT EXECUTED
118df8: 89 85 84 fe ff ff mov %eax,-0x17c(%ebp) <== NOT EXECUTED
bts2rd, fs_info->cl_buf);
if (ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
118dfe: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
118e01: 83 f8 1f cmp $0x1f,%eax <== NOT EXECUTED
118e04: 0f 8f b8 03 00 00 jg 1191c2 <msdos_dir_read+0x4c6> <== NOT EXECUTED
{
rtems_semaphore_release(fs_info->vol_sema);
118e0a: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
118e0d: ff b3 90 00 00 00 pushl 0x90(%ebx) <== NOT EXECUTED
118e13: e8 3c 21 ff ff call 10af54 <rtems_semaphore_release><== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
118e18: e8 f3 09 00 00 call 119810 <__errno> <== NOT EXECUTED
118e1d: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
118e23: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
118e26: 83 cb ff or $0xffffffff,%ebx <== NOT EXECUTED
118e29: e9 62 04 00 00 jmp 119290 <msdos_dir_read+0x594> <== NOT EXECUTED
}
for (i = 0; i < ret; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
{
char* entry = (char*) fs_info->cl_buf + i;
118e2e: 8b b5 a4 fe ff ff mov -0x15c(%ebp),%esi <== NOT EXECUTED
118e34: 8b 9d b0 fe ff ff mov -0x150(%ebp),%ebx <== NOT EXECUTED
118e3a: 03 b3 94 00 00 00 add 0x94(%ebx),%esi <== NOT EXECUTED
/*
* Is this directory from here on empty ?
*/
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
118e40: 8a 06 mov (%esi),%al <== NOT EXECUTED
118e42: 84 c0 test %al,%al <== NOT EXECUTED
118e44: 75 08 jne 118e4e <msdos_dir_read+0x152> <== NOT EXECUTED
MSDOS_THIS_DIR_ENTRY_AND_REST_EMPTY)
{
rtems_semaphore_release(fs_info->vol_sema);
118e46: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
118e49: e9 e3 03 00 00 jmp 119231 <msdos_dir_read+0x535> <== NOT EXECUTED
return cmpltd;
}
/* Is the directory entry empty */
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) == MSDOS_THIS_DIR_ENTRY_EMPTY)
118e4e: 3c e5 cmp $0xe5,%al <== NOT EXECUTED
118e50: 0f 84 63 03 00 00 je 1191b9 <msdos_dir_read+0x4bd> <== NOT EXECUTED
continue;
/* Is the directory entry empty a volume label */
if (((*MSDOS_DIR_ATTR(entry)) & MSDOS_ATTR_VOLUME_ID) &&
118e56: 8a 56 0b mov 0xb(%esi),%dl <== NOT EXECUTED
118e59: f6 c2 08 test $0x8,%dl <== NOT EXECUTED
118e5c: 74 0e je 118e6c <msdos_dir_read+0x170> <== NOT EXECUTED
((*MSDOS_DIR_ATTR(entry) & MSDOS_ATTR_LFN_MASK) != MSDOS_ATTR_LFN))
118e5e: 88 d1 mov %dl,%cl <== NOT EXECUTED
118e60: 83 e1 3f and $0x3f,%ecx <== NOT EXECUTED
/* Is the directory entry empty */
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) == MSDOS_THIS_DIR_ENTRY_EMPTY)
continue;
/* Is the directory entry empty a volume label */
if (((*MSDOS_DIR_ATTR(entry)) & MSDOS_ATTR_VOLUME_ID) &&
118e63: 80 f9 0f cmp $0xf,%cl <== NOT EXECUTED
118e66: 0f 85 4d 03 00 00 jne 1191b9 <msdos_dir_read+0x4bd> <== NOT EXECUTED
/*
* Check the attribute to see if the entry is for a long file
* name.
*/
if ((*MSDOS_DIR_ATTR(entry) & MSDOS_ATTR_LFN_MASK) ==
118e6c: 83 e2 3f and $0x3f,%edx <== NOT EXECUTED
118e6f: 80 fa 0f cmp $0xf,%dl <== NOT EXECUTED
118e72: 0f 85 c6 00 00 00 jne 118f3e <msdos_dir_read+0x242> <== NOT EXECUTED
int q;
/*
* Is this is the first entry of a LFN ?
*/
if (lfn_start == FAT_FILE_SHORT_NAME)
118e78: 83 bd b4 fe ff ff ff cmpl $0xffffffff,-0x14c(%ebp) <== NOT EXECUTED
118e7f: 75 42 jne 118ec3 <msdos_dir_read+0x1c7> <== NOT EXECUTED
{
/*
* The first entry must have the last long entry flag set.
*/
if ((*MSDOS_DIR_ENTRY_TYPE(entry) &
118e81: a8 40 test $0x40,%al <== NOT EXECUTED
118e83: 0f 84 30 03 00 00 je 1191b9 <msdos_dir_read+0x4bd> <== NOT EXECUTED
* RETURNS:
* the number of bytes read on success, or -1 if error occured (errno
* set apropriately).
*/
ssize_t
msdos_dir_read(rtems_libio_t *iop, void *buffer, size_t count)
118e89: 8b 95 a4 fe ff ff mov -0x15c(%ebp),%edx <== NOT EXECUTED
118e8f: 03 95 98 fe ff ff add -0x168(%ebp),%edx <== NOT EXECUTED
continue;
/*
* Remember the start location of the long file name.
*/
lfn_start =
118e95: c1 ea 05 shr $0x5,%edx <== NOT EXECUTED
118e98: 89 95 b4 fe ff ff mov %edx,-0x14c(%ebp) <== NOT EXECUTED
/*
* Get the number of entries so we can count down and
* also the checksum of the short entry.
*/
lfn_entries = (*MSDOS_DIR_ENTRY_TYPE(entry) &
118e9e: 89 c3 mov %eax,%ebx <== NOT EXECUTED
118ea0: 83 e3 3f and $0x3f,%ebx <== NOT EXECUTED
118ea3: 89 9d a0 fe ff ff mov %ebx,-0x160(%ebp) <== NOT EXECUTED
MSDOS_LAST_LONG_ENTRY_MASK);
lfn_checksum = *MSDOS_DIR_LFN_CHECKSUM(entry);
118ea9: 8a 56 0d mov 0xd(%esi),%dl <== NOT EXECUTED
118eac: 88 95 8f fe ff ff mov %dl,-0x171(%ebp) <== NOT EXECUTED
memset (tmp_dirent.d_name, 0, sizeof(tmp_dirent.d_name));
118eb2: 8d 95 e8 fe ff ff lea -0x118(%ebp),%edx <== NOT EXECUTED
118eb8: b9 40 00 00 00 mov $0x40,%ecx <== NOT EXECUTED
118ebd: 31 c0 xor %eax,%eax <== NOT EXECUTED
118ebf: 89 d7 mov %edx,%edi <== NOT EXECUTED
118ec1: f3 ab rep stos %eax,%es:(%edi) <== NOT EXECUTED
* If the entry number or the check sum do not match
* forget this series of long directory entries. These could
* be orphaned entries depending on the history of the
* disk.
*/
if ((lfn_entries != (*MSDOS_DIR_ENTRY_TYPE(entry) &
118ec3: 8a 06 mov (%esi),%al <== NOT EXECUTED
118ec5: 83 e0 3f and $0x3f,%eax <== NOT EXECUTED
118ec8: 39 85 a0 fe ff ff cmp %eax,-0x160(%ebp) <== NOT EXECUTED
118ece: 0f 85 db 02 00 00 jne 1191af <msdos_dir_read+0x4b3> <== NOT EXECUTED
MSDOS_LAST_LONG_ENTRY_MASK)) ||
118ed4: 8a 9d 8f fe ff ff mov -0x171(%ebp),%bl <== NOT EXECUTED
118eda: 3a 5e 0d cmp 0xd(%esi),%bl <== NOT EXECUTED
118edd: 0f 85 cc 02 00 00 jne 1191af <msdos_dir_read+0x4b3> <== NOT EXECUTED
* The DOS maximum length is 255 characters without the
* trailing nul character. We need to range check the length to
* fit in the directory entry name field.
*/
lfn_entries--;
118ee3: ff 8d a0 fe ff ff decl -0x160(%ebp) <== NOT EXECUTED
p = entry + 1;
118ee9: 8d 46 01 lea 0x1(%esi),%eax <== NOT EXECUTED
o = lfn_entries * MSDOS_LFN_LEN_PER_ENTRY;
118eec: 6b 8d a0 fe ff ff 0d imul $0xd,-0x160(%ebp),%ecx <== NOT EXECUTED
for (q = 0; q < MSDOS_LFN_LEN_PER_ENTRY; q++)
118ef3: 31 d2 xor %edx,%edx <== NOT EXECUTED
* RETURNS:
* the number of bytes read on success, or -1 if error occured (errno
* set apropriately).
*/
ssize_t
msdos_dir_read(rtems_libio_t *iop, void *buffer, size_t count)
118ef5: 8d bc 0d d8 fe ff ff lea -0x128(%ebp,%ecx,1),%edi <== NOT EXECUTED
p = entry + 1;
o = lfn_entries * MSDOS_LFN_LEN_PER_ENTRY;
for (q = 0; q < MSDOS_LFN_LEN_PER_ENTRY; q++)
{
if (o >= (sizeof(tmp_dirent.d_name) - 1))
118efc: 8d 34 0a lea (%edx,%ecx,1),%esi <== NOT EXECUTED
118eff: 81 fe fe 00 00 00 cmp $0xfe,%esi <== NOT EXECUTED
118f05: 0f 87 99 02 00 00 ja 1191a4 <msdos_dir_read+0x4a8> <== NOT EXECUTED
break;
tmp_dirent.d_name[o++] = *p;
118f0b: 8a 18 mov (%eax),%bl <== NOT EXECUTED
118f0d: 88 5c 17 10 mov %bl,0x10(%edi,%edx,1) <== NOT EXECUTED
if (*p == '\0')
118f11: 80 38 00 cmpb $0x0,(%eax) <== NOT EXECUTED
118f14: 0f 84 8a 02 00 00 je 1191a4 <msdos_dir_read+0x4a8> <== NOT EXECUTED
break;
switch (q)
118f1a: 83 fa 04 cmp $0x4,%edx <== NOT EXECUTED
118f1d: 74 07 je 118f26 <msdos_dir_read+0x22a> <== NOT EXECUTED
118f1f: 83 fa 0a cmp $0xa,%edx <== NOT EXECUTED
118f22: 75 0c jne 118f30 <msdos_dir_read+0x234> <== NOT EXECUTED
118f24: eb 05 jmp 118f2b <msdos_dir_read+0x22f> <== NOT EXECUTED
{
case 4:
p += 5;
118f26: 83 c0 05 add $0x5,%eax <== NOT EXECUTED
break;
118f29: eb 08 jmp 118f33 <msdos_dir_read+0x237> <== NOT EXECUTED
case 10:
p += 4;
118f2b: 83 c0 04 add $0x4,%eax <== NOT EXECUTED
break;
118f2e: eb 03 jmp 118f33 <msdos_dir_read+0x237> <== NOT EXECUTED
default:
p += 2;
118f30: 83 c0 02 add $0x2,%eax <== NOT EXECUTED
lfn_entries--;
p = entry + 1;
o = lfn_entries * MSDOS_LFN_LEN_PER_ENTRY;
for (q = 0; q < MSDOS_LFN_LEN_PER_ENTRY; q++)
118f33: 42 inc %edx <== NOT EXECUTED
118f34: 83 fa 0d cmp $0xd,%edx <== NOT EXECUTED
118f37: 75 c3 jne 118efc <msdos_dir_read+0x200> <== NOT EXECUTED
118f39: e9 66 02 00 00 jmp 1191a4 <msdos_dir_read+0x4a8> <== NOT EXECUTED
fat_dir_pos_t dir_pos;
/*
* Skip active entries until get the entry to start from.
*/
if (start)
118f3e: 83 bd 90 fe ff ff 00 cmpl $0x0,-0x170(%ebp) <== NOT EXECUTED
118f45: 74 0b je 118f52 <msdos_dir_read+0x256> <== NOT EXECUTED
{
lfn_start = FAT_FILE_SHORT_NAME;
start--;
118f47: ff 8d 90 fe ff ff decl -0x170(%ebp) <== NOT EXECUTED
118f4d: e9 5d 02 00 00 jmp 1191af <msdos_dir_read+0x4b3> <== NOT EXECUTED
* unfortunately there is no method to extract ino except to
* open fat-file descriptor :( ... so, open it
*/
/* get number of cluster we are working with */
rc = fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
118f52: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
118f55: 8d 85 c4 fe ff ff lea -0x13c(%ebp),%eax <== NOT EXECUTED
118f5b: 50 push %eax <== NOT EXECUTED
118f5c: ff b5 98 fe ff ff pushl -0x168(%ebp) <== NOT EXECUTED
118f62: 6a 01 push $0x1 <== NOT EXECUTED
118f64: ff b5 9c fe ff ff pushl -0x164(%ebp) <== NOT EXECUTED
118f6a: ff b5 b0 fe ff ff pushl -0x150(%ebp) <== NOT EXECUTED
118f70: e8 69 8d ff ff call 111cde <fat_file_ioctl> <== NOT EXECUTED
118f75: 89 c3 mov %eax,%ebx <== NOT EXECUTED
j * bts2rd, &cur_cln);
if (rc != RC_OK)
118f77: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
118f7a: 85 c0 test %eax,%eax <== NOT EXECUTED
118f7c: 74 02 je 118f80 <msdos_dir_read+0x284> <== NOT EXECUTED
118f7e: eb 4f jmp 118fcf <msdos_dir_read+0x2d3> <== NOT EXECUTED
fat_dir_pos_t *dir_pos
)
{
dir_pos->sname.cln = 0;
dir_pos->sname.ofs = 0;
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
118f80: c7 85 d0 fe ff ff ff movl $0xffffffff,-0x130(%ebp) <== NOT EXECUTED
118f87: ff ff ff
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
118f8a: c7 85 d4 fe ff ff ff movl $0xffffffff,-0x12c(%ebp) <== NOT EXECUTED
118f91: ff ff ff
rtems_semaphore_release(fs_info->vol_sema);
return rc;
}
fat_dir_pos_init(&dir_pos);
dir_pos.sname.cln = cur_cln;
118f94: 8b 85 c4 fe ff ff mov -0x13c(%ebp),%eax <== NOT EXECUTED
118f9a: 89 85 c8 fe ff ff mov %eax,-0x138(%ebp) <== NOT EXECUTED
dir_pos.sname.ofs = i;
118fa0: 8b 9d a4 fe ff ff mov -0x15c(%ebp),%ebx <== NOT EXECUTED
118fa6: 89 9d cc fe ff ff mov %ebx,-0x134(%ebp) <== NOT EXECUTED
rc = fat_file_open(&fs_info->fat, &dir_pos, &tmp_fat_fd);
118fac: 52 push %edx <== NOT EXECUTED
118fad: 8d 85 c0 fe ff ff lea -0x140(%ebp),%eax <== NOT EXECUTED
118fb3: 50 push %eax <== NOT EXECUTED
118fb4: 8d 85 c8 fe ff ff lea -0x138(%ebp),%eax <== NOT EXECUTED
118fba: 50 push %eax <== NOT EXECUTED
118fbb: ff b5 b0 fe ff ff pushl -0x150(%ebp) <== NOT EXECUTED
118fc1: e8 d0 88 ff ff call 111896 <fat_file_open> <== NOT EXECUTED
118fc6: 89 c3 mov %eax,%ebx <== NOT EXECUTED
if (rc != RC_OK)
118fc8: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
118fcb: 85 c0 test %eax,%eax <== NOT EXECUTED
118fcd: 74 14 je 118fe3 <msdos_dir_read+0x2e7> <== NOT EXECUTED
{
rtems_semaphore_release(fs_info->vol_sema);
118fcf: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
118fd2: 8b 95 b0 fe ff ff mov -0x150(%ebp),%edx <== NOT EXECUTED
118fd8: ff b2 90 00 00 00 pushl 0x90(%edx) <== NOT EXECUTED
118fde: e9 b7 01 00 00 jmp 11919a <msdos_dir_read+0x49e> <== NOT EXECUTED
return rc;
}
/* fill in dirent structure */
/* XXX: from what and in what d_off should be computed ?! */
tmp_dirent.d_off = start + cmpltd;
118fe3: 8b 9d a8 fe ff ff mov -0x158(%ebp),%ebx <== NOT EXECUTED
118fe9: 89 9d dc fe ff ff mov %ebx,-0x124(%ebp) <== NOT EXECUTED
118fef: c7 85 e0 fe ff ff 00 movl $0x0,-0x120(%ebp) <== NOT EXECUTED
118ff6: 00 00 00
tmp_dirent.d_reclen = sizeof(struct dirent);
118ff9: 66 c7 85 e4 fe ff ff movw $0x110,-0x11c(%ebp) <== NOT EXECUTED
119000: 10 01
tmp_dirent.d_ino = tmp_fat_fd->ino;
119002: 8b 85 c0 fe ff ff mov -0x140(%ebp),%eax <== NOT EXECUTED
119008: 8b 40 0c mov 0xc(%eax),%eax <== NOT EXECUTED
11900b: 89 85 d8 fe ff ff mov %eax,-0x128(%ebp) <== NOT EXECUTED
/*
* If a long file name check if the correct number of
* entries have been found and if the checksum is correct.
* If not return the short file name.
*/
if (lfn_start != FAT_FILE_SHORT_NAME)
119011: 83 bd b4 fe ff ff ff cmpl $0xffffffff,-0x14c(%ebp) <== NOT EXECUTED
119018: 74 39 je 119053 <msdos_dir_read+0x357> <== NOT EXECUTED
11901a: 31 c9 xor %ecx,%ecx <== NOT EXECUTED
11901c: 31 d2 xor %edx,%edx <== NOT EXECUTED
uint8_t cs = 0;
uint8_t* p = (uint8_t*) entry;
int i;
for (i = 0; i < 11; i++, p++)
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + *p;
11901e: 88 d0 mov %dl,%al <== NOT EXECUTED
119020: 83 e0 01 and $0x1,%eax <== NOT EXECUTED
119023: f7 d8 neg %eax <== NOT EXECUTED
119025: 83 e0 80 and $0xffffff80,%eax <== NOT EXECUTED
119028: d0 ea shr %dl <== NOT EXECUTED
11902a: 02 14 0e add (%esi,%ecx,1),%dl <== NOT EXECUTED
11902d: 01 c2 add %eax,%edx <== NOT EXECUTED
{
uint8_t cs = 0;
uint8_t* p = (uint8_t*) entry;
int i;
for (i = 0; i < 11; i++, p++)
11902f: 41 inc %ecx <== NOT EXECUTED
119030: 83 f9 0b cmp $0xb,%ecx <== NOT EXECUTED
119033: 75 e9 jne 11901e <msdos_dir_read+0x322> <== NOT EXECUTED
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + *p;
if (lfn_entries || (lfn_checksum != cs))
119035: 38 95 8f fe ff ff cmp %dl,-0x171(%ebp) <== NOT EXECUTED
11903b: 75 16 jne 119053 <msdos_dir_read+0x357> <== NOT EXECUTED
11903d: 83 bd a0 fe ff ff 00 cmpl $0x0,-0x160(%ebp) <== NOT EXECUTED
119044: 0f 95 c0 setne %al <== NOT EXECUTED
119047: 75 0a jne 119053 <msdos_dir_read+0x357> <== NOT EXECUTED
119049: e9 f9 01 00 00 jmp 119247 <msdos_dir_read+0x54b> <== NOT EXECUTED
const char *src_tmp;
/*
* find last non-blank character of base name
*/
for ((i = MSDOS_SHORT_BASE_LEN ,
11904e: 4a dec %edx <== NOT EXECUTED
11904f: 75 07 jne 119058 <msdos_dir_read+0x35c> <== NOT EXECUTED
119051: eb 0c jmp 11905f <msdos_dir_read+0x363> <== NOT EXECUTED
119053: ba 08 00 00 00 mov $0x8,%edx <== NOT EXECUTED
src_tmp = src + MSDOS_SHORT_BASE_LEN-1);
((i > 0) &&
119058: 80 7c 16 ff 20 cmpb $0x20,-0x1(%esi,%edx,1) <== NOT EXECUTED
11905d: 74 ef je 11904e <msdos_dir_read+0x352> <== NOT EXECUTED
* copy base name to destination
*/
src_tmp = src;
len = i;
while (i-- > 0) {
*dst++ = tolower((unsigned char)(*src_tmp++));
11905f: 8b 3d d8 62 13 00 mov 0x1362d8,%edi <== NOT EXECUTED
119065: 89 f1 mov %esi,%ecx <== NOT EXECUTED
{
/*
* convert dir entry from fixed 8+3 format (without dot)
* to 0..8 + 1dot + 0..3 format
*/
tmp_dirent.d_namlen = msdos_format_dirent_with_dot(
119067: 8d 85 e8 fe ff ff lea -0x118(%ebp),%eax <== NOT EXECUTED
* RETURNS:
* the number of bytes read on success, or -1 if error occured (errno
* set apropriately).
*/
ssize_t
msdos_dir_read(rtems_libio_t *iop, void *buffer, size_t count)
11906d: 8d 1c 10 lea (%eax,%edx,1),%ebx <== NOT EXECUTED
119070: 89 9d ac fe ff ff mov %ebx,-0x154(%ebp) <== NOT EXECUTED
119076: eb 2c jmp 1190a4 <msdos_dir_read+0x3a8> <== NOT EXECUTED
* copy base name to destination
*/
src_tmp = src;
len = i;
while (i-- > 0) {
*dst++ = tolower((unsigned char)(*src_tmp++));
119078: 0f b6 19 movzbl (%ecx),%ebx <== NOT EXECUTED
11907b: 41 inc %ecx <== NOT EXECUTED
11907c: 89 9d 80 fe ff ff mov %ebx,-0x180(%ebp) <== NOT EXECUTED
119082: 8a 5c 1f 01 mov 0x1(%edi,%ebx,1),%bl <== NOT EXECUTED
119086: 83 e3 03 and $0x3,%ebx <== NOT EXECUTED
119089: 88 9d b4 fe ff ff mov %bl,-0x14c(%ebp) <== NOT EXECUTED
11908f: 8b 9d 80 fe ff ff mov -0x180(%ebp),%ebx <== NOT EXECUTED
119095: 80 bd b4 fe ff ff 01 cmpb $0x1,-0x14c(%ebp) <== NOT EXECUTED
11909c: 75 03 jne 1190a1 <msdos_dir_read+0x3a5> <== NOT EXECUTED
11909e: 83 c3 20 add $0x20,%ebx <== NOT EXECUTED
1190a1: 88 18 mov %bl,(%eax) <== NOT EXECUTED
1190a3: 40 inc %eax <== NOT EXECUTED
* RETURNS:
* the number of bytes read on success, or -1 if error occured (errno
* set apropriately).
*/
ssize_t
msdos_dir_read(rtems_libio_t *iop, void *buffer, size_t count)
1190a4: 8b 9d ac fe ff ff mov -0x154(%ebp),%ebx <== NOT EXECUTED
1190aa: 29 c3 sub %eax,%ebx <== NOT EXECUTED
/*
* copy base name to destination
*/
src_tmp = src;
len = i;
while (i-- > 0) {
1190ac: 85 db test %ebx,%ebx <== NOT EXECUTED
1190ae: 7f c8 jg 119078 <msdos_dir_read+0x37c> <== NOT EXECUTED
/*
* find last non-blank character of extension
*/
for ((i = MSDOS_SHORT_EXT_LEN ,
src_tmp = src + MSDOS_SHORT_BASE_LEN+MSDOS_SHORT_EXT_LEN-1);
((i > 0) &&
1190b0: 80 7e 0a 20 cmpb $0x20,0xa(%esi) <== NOT EXECUTED
1190b4: 0f 85 a7 01 00 00 jne 119261 <msdos_dir_read+0x565> <== NOT EXECUTED
1190ba: 80 7e 09 20 cmpb $0x20,0x9(%esi) <== NOT EXECUTED
1190be: 0f 85 a4 01 00 00 jne 119268 <msdos_dir_read+0x56c> <== NOT EXECUTED
1190c4: b9 01 00 00 00 mov $0x1,%ecx <== NOT EXECUTED
1190c9: 80 7e 08 20 cmpb $0x20,0x8(%esi) <== NOT EXECUTED
1190cd: 0f 85 9a 01 00 00 jne 11926d <msdos_dir_read+0x571> <== NOT EXECUTED
1190d3: eb 4e jmp 119123 <msdos_dir_read+0x427> <== NOT EXECUTED
if (i > 0) {
*dst++ = '.'; /* append dot */
len += i + 1; /* extension + dot */
src_tmp = src + MSDOS_SHORT_BASE_LEN;
while (i-- > 0) {
*dst++ = tolower((unsigned char)(*src_tmp++));
1190d5: 0f b6 5c 16 08 movzbl 0x8(%esi,%edx,1),%ebx <== NOT EXECUTED
1190da: 89 9d 7c fe ff ff mov %ebx,-0x184(%ebp) <== NOT EXECUTED
1190e0: 8a 5c 1f 01 mov 0x1(%edi,%ebx,1),%bl <== NOT EXECUTED
1190e4: 83 e3 03 and $0x3,%ebx <== NOT EXECUTED
1190e7: 88 9d b4 fe ff ff mov %bl,-0x14c(%ebp) <== NOT EXECUTED
1190ed: 8b 9d 7c fe ff ff mov -0x184(%ebp),%ebx <== NOT EXECUTED
1190f3: 80 bd b4 fe ff ff 01 cmpb $0x1,-0x14c(%ebp) <== NOT EXECUTED
1190fa: 75 03 jne 1190ff <msdos_dir_read+0x403> <== NOT EXECUTED
1190fc: 83 c3 20 add $0x20,%ebx <== NOT EXECUTED
1190ff: 88 5c 10 01 mov %bl,0x1(%eax,%edx,1) <== NOT EXECUTED
119103: 42 inc %edx <== NOT EXECUTED
* RETURNS:
* the number of bytes read on success, or -1 if error occured (errno
* set apropriately).
*/
ssize_t
msdos_dir_read(rtems_libio_t *iop, void *buffer, size_t count)
119104: 89 cb mov %ecx,%ebx <== NOT EXECUTED
119106: 29 d3 sub %edx,%ebx <== NOT EXECUTED
*/
if (i > 0) {
*dst++ = '.'; /* append dot */
len += i + 1; /* extension + dot */
src_tmp = src + MSDOS_SHORT_BASE_LEN;
while (i-- > 0) {
119108: 85 db test %ebx,%ebx <== NOT EXECUTED
11910a: 7f c9 jg 1190d5 <msdos_dir_read+0x3d9> <== NOT EXECUTED
* RETURNS:
* the number of bytes read on success, or -1 if error occured (errno
* set apropriately).
*/
ssize_t
msdos_dir_read(rtems_libio_t *iop, void *buffer, size_t count)
11910c: 89 ca mov %ecx,%edx <== NOT EXECUTED
11910e: f7 d2 not %edx <== NOT EXECUTED
119110: c1 fa 1f sar $0x1f,%edx <== NOT EXECUTED
119113: 21 ca and %ecx,%edx <== NOT EXECUTED
119115: 8b 85 ac fe ff ff mov -0x154(%ebp),%eax <== NOT EXECUTED
11911b: 01 d0 add %edx,%eax <== NOT EXECUTED
11911d: 03 95 80 fe ff ff add -0x180(%ebp),%edx <== NOT EXECUTED
while (i-- > 0) {
*dst++ = tolower((unsigned char)(*src_tmp++));
len++;
}
}
*dst = '\0'; /* terminate string */
119123: c6 00 00 movb $0x0,(%eax) <== NOT EXECUTED
{
/*
* convert dir entry from fixed 8+3 format (without dot)
* to 0..8 + 1dot + 0..3 format
*/
tmp_dirent.d_namlen = msdos_format_dirent_with_dot(
119126: 66 89 95 e6 fe ff ff mov %dx,-0x11a(%ebp) <== NOT EXECUTED
11912d: c7 85 b4 fe ff ff ff movl $0xffffffff,-0x14c(%ebp) <== NOT EXECUTED
119134: ff ff ff
else
{
tmp_dirent.d_namlen = strlen(tmp_dirent.d_name);
}
memcpy(buffer + cmpltd, &tmp_dirent, sizeof(struct dirent));
119137: 8b 7d 0c mov 0xc(%ebp),%edi <== NOT EXECUTED
11913a: 03 bd a8 fe ff ff add -0x158(%ebp),%edi <== NOT EXECUTED
119140: 8d b5 d8 fe ff ff lea -0x128(%ebp),%esi <== NOT EXECUTED
119146: b9 44 00 00 00 mov $0x44,%ecx <== NOT EXECUTED
11914b: f3 a5 rep movsl %ds:(%esi),%es:(%edi) <== NOT EXECUTED
iop->offset = iop->offset + sizeof(struct dirent);
11914d: 8b 5d 08 mov 0x8(%ebp),%ebx <== NOT EXECUTED
119150: 81 43 04 10 01 00 00 addl $0x110,0x4(%ebx) <== NOT EXECUTED
119157: 83 53 08 00 adcl $0x0,0x8(%ebx) <== NOT EXECUTED
cmpltd += (sizeof(struct dirent));
11915b: 81 85 a8 fe ff ff 10 addl $0x110,-0x158(%ebp) <== NOT EXECUTED
119162: 01 00 00
count -= (sizeof(struct dirent));
119165: 81 ad 94 fe ff ff 10 subl $0x110,-0x16c(%ebp) <== NOT EXECUTED
11916c: 01 00 00
/* inode number extracted, close fat-file */
rc = fat_file_close(&fs_info->fat, tmp_fat_fd);
11916f: 50 push %eax <== NOT EXECUTED
119170: 50 push %eax <== NOT EXECUTED
119171: ff b5 c0 fe ff ff pushl -0x140(%ebp) <== NOT EXECUTED
119177: ff b5 b0 fe ff ff pushl -0x150(%ebp) <== NOT EXECUTED
11917d: e8 b6 8a ff ff call 111c38 <fat_file_close> <== NOT EXECUTED
119182: 89 c3 mov %eax,%ebx <== NOT EXECUTED
if (rc != RC_OK)
119184: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
119187: 85 c0 test %eax,%eax <== NOT EXECUTED
119189: 74 19 je 1191a4 <msdos_dir_read+0x4a8> <== NOT EXECUTED
{
rtems_semaphore_release(fs_info->vol_sema);
11918b: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11918e: 8b 85 b0 fe ff ff mov -0x150(%ebp),%eax <== NOT EXECUTED
119194: ff b0 90 00 00 00 pushl 0x90(%eax) <== NOT EXECUTED
11919a: e8 b5 1d ff ff call 10af54 <rtems_semaphore_release><== NOT EXECUTED
11919f: e9 9e 00 00 00 jmp 119242 <msdos_dir_read+0x546> <== NOT EXECUTED
return rc;
}
}
if (count <= 0)
1191a4: 83 bd 94 fe ff ff 00 cmpl $0x0,-0x16c(%ebp) <== NOT EXECUTED
1191ab: 75 0c jne 1191b9 <msdos_dir_read+0x4bd> <== NOT EXECUTED
1191ad: eb 2f jmp 1191de <msdos_dir_read+0x4e2> <== NOT EXECUTED
*/
if ((lfn_entries != (*MSDOS_DIR_ENTRY_TYPE(entry) &
MSDOS_LAST_LONG_ENTRY_MASK)) ||
(lfn_checksum != *MSDOS_DIR_LFN_CHECKSUM(entry)))
{
lfn_start = FAT_FILE_SHORT_NAME;
1191af: c7 85 b4 fe ff ff ff movl $0xffffffff,-0x14c(%ebp) <== NOT EXECUTED
1191b6: ff ff ff
{
rtems_semaphore_release(fs_info->vol_sema);
rtems_set_errno_and_return_minus_one(EIO);
}
for (i = 0; i < ret; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
1191b9: 83 85 a4 fe ff ff 20 addl $0x20,-0x15c(%ebp) <== NOT EXECUTED
1191c0: eb 0a jmp 1191cc <msdos_dir_read+0x4d0> <== NOT EXECUTED
* directories feature :( - we should count elements currently
* present in the directory because there may be holes :)
*/
ret = fat_file_read(&fs_info->fat, fat_fd, (j * bts2rd),
bts2rd, fs_info->cl_buf);
if (ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
1191c2: c7 85 a4 fe ff ff 00 movl $0x0,-0x15c(%ebp) <== NOT EXECUTED
1191c9: 00 00 00
{
rtems_semaphore_release(fs_info->vol_sema);
rtems_set_errno_and_return_minus_one(EIO);
}
for (i = 0; i < ret; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
1191cc: 8b 85 84 fe ff ff mov -0x17c(%ebp),%eax <== NOT EXECUTED
1191d2: 39 85 a4 fe ff ff cmp %eax,-0x15c(%ebp) <== NOT EXECUTED
1191d8: 0f 82 50 fc ff ff jb 118e2e <msdos_dir_read+0x132> <== NOT EXECUTED
1191de: 8b 95 88 fe ff ff mov -0x178(%ebp),%edx <== NOT EXECUTED
1191e4: 01 95 98 fe ff ff add %edx,-0x168(%ebp) <== NOT EXECUTED
1191ea: eb 2f jmp 11921b <msdos_dir_read+0x51f> <== NOT EXECUTED
fat_fd->fat_file_size :
fs_info->fat.vol.bpc;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
1191ec: c7 85 98 fe ff ff 00 movl $0x0,-0x168(%ebp) <== NOT EXECUTED
1191f3: 00 00 00
1191f6: c7 85 a0 fe ff ff 00 movl $0x0,-0x160(%ebp) <== NOT EXECUTED
1191fd: 00 00 00
119200: c6 85 8f fe ff ff 00 movb $0x0,-0x171(%ebp) <== NOT EXECUTED
119207: c7 85 b4 fe ff ff ff movl $0xffffffff,-0x14c(%ebp) <== NOT EXECUTED
11920e: ff ff ff
119211: c7 85 a8 fe ff ff 00 movl $0x0,-0x158(%ebp) <== NOT EXECUTED
119218: 00 00 00
rtems_set_errno_and_return_minus_one(EIO);
while (count > 0)
11921b: 83 bd 94 fe ff ff 00 cmpl $0x0,-0x16c(%ebp) <== NOT EXECUTED
119222: 0f 85 a9 fb ff ff jne 118dd1 <msdos_dir_read+0xd5> <== NOT EXECUTED
break;
}
j++;
}
rtems_semaphore_release(fs_info->vol_sema);
119228: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11922b: 8b 9d b0 fe ff ff mov -0x150(%ebp),%ebx <== NOT EXECUTED
119231: ff b3 90 00 00 00 pushl 0x90(%ebx) <== NOT EXECUTED
119237: e8 18 1d ff ff call 10af54 <rtems_semaphore_release><== NOT EXECUTED
return cmpltd;
11923c: 8b 9d a8 fe ff ff mov -0x158(%ebp),%ebx <== NOT EXECUTED
119242: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
119245: eb 49 jmp 119290 <msdos_dir_read+0x594> <== NOT EXECUTED
tmp_dirent.d_namlen = msdos_format_dirent_with_dot(
tmp_dirent.d_name, entry); /* src text */
}
else
{
tmp_dirent.d_namlen = strlen(tmp_dirent.d_name);
119247: 8d bd e8 fe ff ff lea -0x118(%ebp),%edi <== NOT EXECUTED
11924d: 83 c9 ff or $0xffffffff,%ecx <== NOT EXECUTED
119250: f2 ae repnz scas %es:(%edi),%al <== NOT EXECUTED
119252: f7 d1 not %ecx <== NOT EXECUTED
119254: 49 dec %ecx <== NOT EXECUTED
119255: 66 89 8d e6 fe ff ff mov %cx,-0x11a(%ebp) <== NOT EXECUTED
11925c: e9 d6 fe ff ff jmp 119137 <msdos_dir_read+0x43b> <== NOT EXECUTED
*dst++ = tolower((unsigned char)(*src_tmp++));
}
/*
* find last non-blank character of extension
*/
for ((i = MSDOS_SHORT_EXT_LEN ,
119261: b9 03 00 00 00 mov $0x3,%ecx <== NOT EXECUTED
119266: eb 05 jmp 11926d <msdos_dir_read+0x571> <== NOT EXECUTED
src_tmp = src + MSDOS_SHORT_BASE_LEN+MSDOS_SHORT_EXT_LEN-1);
((i > 0) &&
(*src_tmp == ' '));
i--,src_tmp--)
119268: b9 02 00 00 00 mov $0x2,%ecx <== NOT EXECUTED
{};
/*
* extension is not empty
*/
if (i > 0) {
*dst++ = '.'; /* append dot */
11926d: c6 00 2e movb $0x2e,(%eax) <== NOT EXECUTED
119270: 8d 58 01 lea 0x1(%eax),%ebx <== NOT EXECUTED
119273: 89 9d ac fe ff ff mov %ebx,-0x154(%ebp) <== NOT EXECUTED
len += i + 1; /* extension + dot */
119279: 8d 54 0a 01 lea 0x1(%edx,%ecx,1),%edx <== NOT EXECUTED
11927d: 89 95 80 fe ff ff mov %edx,-0x180(%ebp) <== NOT EXECUTED
src_tmp = src + MSDOS_SHORT_BASE_LEN;
while (i-- > 0) {
*dst++ = tolower((unsigned char)(*src_tmp++));
119283: 8b 3d d8 62 13 00 mov 0x1362d8,%edi <== NOT EXECUTED
119289: 31 d2 xor %edx,%edx <== NOT EXECUTED
11928b: e9 74 fe ff ff jmp 119104 <msdos_dir_read+0x408> <== NOT EXECUTED
j++;
}
rtems_semaphore_release(fs_info->vol_sema);
return cmpltd;
}
119290: 89 d8 mov %ebx,%eax <== NOT EXECUTED
119292: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
119295: 5b pop %ebx <== NOT EXECUTED
119296: 5e pop %esi <== NOT EXECUTED
119297: 5f pop %edi <== NOT EXECUTED
119298: 5d pop %ebp <== NOT EXECUTED
119299: c3 ret <== NOT EXECUTED
0011929a <msdos_dir_stat>:
int
msdos_dir_stat(
const rtems_filesystem_location_info_t *loc,
struct stat *buf
)
{
11929a: 55 push %ebp
11929b: 89 e5 mov %esp,%ebp
11929d: 57 push %edi
11929e: 56 push %esi
11929f: 53 push %ebx
1192a0: 83 ec 10 sub $0x10,%esp
1192a3: 8b 45 08 mov 0x8(%ebp),%eax
1192a6: 8b 5d 0c mov 0xc(%ebp),%ebx
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = loc->mt_entry->fs_info;
1192a9: 8b 50 14 mov 0x14(%eax),%edx
1192ac: 8b 72 08 mov 0x8(%edx),%esi
fat_file_fd_t *fat_fd = loc->node_access;
1192af: 8b 78 08 mov 0x8(%eax),%edi
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
1192b2: 6a 00 push $0x0
1192b4: 6a 00 push $0x0
1192b6: ff b6 90 00 00 00 pushl 0x90(%esi)
1192bc: e8 a3 1b ff ff call 10ae64 <rtems_semaphore_obtain>
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
1192c1: 83 c4 10 add $0x10,%esp
1192c4: 85 c0 test %eax,%eax
1192c6: 74 10 je 1192d8 <msdos_dir_stat+0x3e> <== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one(EIO);
1192c8: e8 43 05 00 00 call 119810 <__errno> <== NOT EXECUTED
1192cd: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
1192d3: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
1192d6: eb 5a jmp 119332 <msdos_dir_stat+0x98> <== NOT EXECUTED
static inline dev_t rtems_disk_get_device_identifier(
const rtems_disk_device *dd
)
{
return dd->dev;
1192d8: 8b 46 58 mov 0x58(%esi),%eax
buf->st_dev = rtems_disk_get_device_identifier(fs_info->fat.vol.dd);
1192db: 8b 50 04 mov 0x4(%eax),%edx
1192de: 8b 00 mov (%eax),%eax
1192e0: 89 03 mov %eax,(%ebx)
1192e2: 89 53 04 mov %edx,0x4(%ebx)
buf->st_ino = fat_fd->ino;
1192e5: 8b 47 0c mov 0xc(%edi),%eax
1192e8: 89 43 08 mov %eax,0x8(%ebx)
buf->st_mode = S_IFDIR | S_IRWXU | S_IRWXG | S_IRWXO;
1192eb: c7 43 0c ff 41 00 00 movl $0x41ff,0xc(%ebx)
buf->st_rdev = 0ll;
1192f2: c7 43 18 00 00 00 00 movl $0x0,0x18(%ebx)
1192f9: c7 43 1c 00 00 00 00 movl $0x0,0x1c(%ebx)
buf->st_size = fat_fd->fat_file_size;
119300: 8b 47 18 mov 0x18(%edi),%eax
119303: 89 43 20 mov %eax,0x20(%ebx)
119306: c7 43 24 00 00 00 00 movl $0x0,0x24(%ebx)
buf->st_blocks = fat_fd->fat_file_size >> FAT_SECTOR512_BITS;
11930d: c1 e8 09 shr $0x9,%eax
119310: 89 43 44 mov %eax,0x44(%ebx)
buf->st_blksize = fs_info->fat.vol.bps;
119313: 0f b7 06 movzwl (%esi),%eax
119316: 89 43 40 mov %eax,0x40(%ebx)
buf->st_mtime = fat_fd->mtime;
119319: 8b 47 40 mov 0x40(%edi),%eax
11931c: 89 43 30 mov %eax,0x30(%ebx)
rtems_semaphore_release(fs_info->vol_sema);
11931f: 83 ec 0c sub $0xc,%esp
119322: ff b6 90 00 00 00 pushl 0x90(%esi)
119328: e8 27 1c ff ff call 10af54 <rtems_semaphore_release>
return RC_OK;
11932d: 83 c4 10 add $0x10,%esp
119330: 31 c0 xor %eax,%eax
}
119332: 8d 65 f4 lea -0xc(%ebp),%esp
119335: 5b pop %ebx
119336: 5e pop %esi
119337: 5f pop %edi
119338: 5d pop %ebp
119339: c3 ret
001165ce <msdos_eval_token>:
rtems_filesystem_eval_path_context_t *ctx,
void *arg,
const char *token,
size_t tokenlen
)
{
1165ce: 55 push %ebp
1165cf: 89 e5 mov %esp,%ebp
1165d1: 53 push %ebx
1165d2: 53 push %ebx
1165d3: 8b 5d 08 mov 0x8(%ebp),%ebx
1165d6: 8b 45 10 mov 0x10(%ebp),%eax
1165d9: 8b 55 14 mov 0x14(%ebp),%edx
static inline bool rtems_filesystem_is_current_directory(
const char *token,
size_t tokenlen
)
{
return tokenlen == 1 && token [0] == '.';
1165dc: 31 c9 xor %ecx,%ecx
1165de: 83 fa 01 cmp $0x1,%edx
1165e1: 75 08 jne 1165eb <msdos_eval_token+0x1d>
1165e3: 31 c9 xor %ecx,%ecx
1165e5: 80 38 2e cmpb $0x2e,(%eax)
1165e8: 0f 94 c1 sete %cl
rtems_filesystem_eval_path_generic_status status =
RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_DONE;
if (rtems_filesystem_is_current_directory(token, tokenlen)) {
1165eb: 85 c9 test %ecx,%ecx
1165ed: 74 0b je 1165fa <msdos_eval_token+0x2c>
static inline void rtems_filesystem_eval_path_clear_token(
rtems_filesystem_eval_path_context_t *ctx
)
{
ctx->tokenlen = 0;
1165ef: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx)
rtems_filesystem_eval_path_clear_token(ctx);
status = RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_CONTINUE;
1165f6: 31 d2 xor %edx,%edx
1165f8: eb 63 jmp 11665d <msdos_eval_token+0x8f>
} else {
rtems_filesystem_location_info_t *currentloc =
rtems_filesystem_eval_path_get_currentloc(ctx);
int rc = msdos_find_name(currentloc, token, tokenlen);
1165fa: 51 push %ecx
1165fb: 52 push %edx
1165fc: 50 push %eax
if (rtems_filesystem_is_current_directory(token, tokenlen)) {
rtems_filesystem_eval_path_clear_token(ctx);
status = RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_CONTINUE;
} else {
rtems_filesystem_location_info_t *currentloc =
1165fd: 8d 43 18 lea 0x18(%ebx),%eax
rtems_filesystem_eval_path_get_currentloc(ctx);
int rc = msdos_find_name(currentloc, token, tokenlen);
116600: 50 push %eax
116601: e8 eb 10 00 00 call 1176f1 <msdos_find_name>
if (rc == RC_OK) {
116606: 83 c4 10 add $0x10,%esp
116609: 85 c0 test %eax,%eax
11660b: 75 32 jne 11663f <msdos_eval_token+0x71>
11660d: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx)
* None
*/
static void
msdos_set_handlers(rtems_filesystem_location_info_t *loc)
{
msdos_fs_info_t *fs_info = loc->mt_entry->fs_info;
116614: 8b 43 2c mov 0x2c(%ebx),%eax
116617: 8b 40 08 mov 0x8(%eax),%eax
fat_file_fd_t *fat_fd = loc->node_access;
if (fat_fd->fat_file_type == FAT_DIRECTORY)
11661a: 8b 53 20 mov 0x20(%ebx),%edx
11661d: 83 7a 10 00 cmpl $0x0,0x10(%edx)
116621: 75 08 jne 11662b <msdos_eval_token+0x5d>
loc->handlers = fs_info->directory_handlers;
116623: 8b 80 88 00 00 00 mov 0x88(%eax),%eax
116629: eb 06 jmp 116631 <msdos_eval_token+0x63>
else
loc->handlers = fs_info->file_handlers;
11662b: 8b 80 8c 00 00 00 mov 0x8c(%eax),%eax
116631: 89 43 28 mov %eax,0x28(%ebx)
void *arg,
const char *token,
size_t tokenlen
)
{
rtems_filesystem_eval_path_generic_status status =
116634: 31 d2 xor %edx,%edx
116636: 83 7b 04 00 cmpl $0x0,0x4(%ebx)
11663a: 0f 94 c2 sete %dl
11663d: eb 1e jmp 11665d <msdos_eval_token+0x8f>
msdos_set_handlers(currentloc);
if (rtems_filesystem_eval_path_has_path(ctx)) {
status = RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_CONTINUE;
}
} else if (rc == MSDOS_NAME_NOT_FOUND_ERR) {
status = RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_NO_ENTRY;
11663f: ba 02 00 00 00 mov $0x2,%edx
rtems_filesystem_eval_path_clear_token(ctx);
msdos_set_handlers(currentloc);
if (rtems_filesystem_eval_path_has_path(ctx)) {
status = RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_CONTINUE;
}
} else if (rc == MSDOS_NAME_NOT_FOUND_ERR) {
116644: 3d 01 7d 00 00 cmp $0x7d01,%eax
116649: 74 12 je 11665d <msdos_eval_token+0x8f> <== ALWAYS TAKEN
status = RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_NO_ENTRY;
} else {
rtems_filesystem_eval_path_error(ctx, 0);
11664b: 50 push %eax <== NOT EXECUTED
11664c: 50 push %eax <== NOT EXECUTED
11664d: 6a 00 push $0x0 <== NOT EXECUTED
11664f: 53 push %ebx <== NOT EXECUTED
116650: e8 6d 1e ff ff call 1084c2 <rtems_filesystem_eval_path_error><== NOT EXECUTED
116655: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
void *arg,
const char *token,
size_t tokenlen
)
{
rtems_filesystem_eval_path_generic_status status =
116658: ba 01 00 00 00 mov $0x1,%edx <== NOT EXECUTED
rtems_filesystem_eval_path_error(ctx, 0);
}
}
return status;
}
11665d: 89 d0 mov %edx,%eax
11665f: 8b 5d fc mov -0x4(%ebp),%ebx
116662: c9 leave
116663: c3 ret
00119389 <msdos_file_close>:
* RC_OK, if file closed successfully, or -1 if error occured (errno set
* appropriately)
*/
int
msdos_file_close(rtems_libio_t *iop)
{
119389: 55 push %ebp
11938a: 89 e5 mov %esp,%ebp
11938c: 56 push %esi
11938d: 53 push %ebx
11938e: 8b 75 08 mov 0x8(%ebp),%esi
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
119391: 8b 46 24 mov 0x24(%esi),%eax
119394: 8b 58 08 mov 0x8(%eax),%ebx
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
119397: 50 push %eax
119398: 6a 00 push $0x0
11939a: 6a 00 push $0x0
11939c: ff b3 90 00 00 00 pushl 0x90(%ebx)
1193a2: e8 bd 1a ff ff call 10ae64 <rtems_semaphore_obtain>
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
1193a7: 83 c4 10 add $0x10,%esp
1193aa: 85 c0 test %eax,%eax
1193ac: 74 10 je 1193be <msdos_file_close+0x35> <== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one(EIO);
1193ae: e8 5d 04 00 00 call 119810 <__errno> <== NOT EXECUTED
1193b3: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
1193b9: 83 ce ff or $0xffffffff,%esi <== NOT EXECUTED
1193bc: eb 1a jmp 1193d8 <msdos_file_close+0x4f> <== NOT EXECUTED
rc = msdos_file_update(iop);
1193be: 89 f0 mov %esi,%eax
1193c0: e8 77 ff ff ff call 11933c <msdos_file_update>
1193c5: 89 c6 mov %eax,%esi
rtems_semaphore_release(fs_info->vol_sema);
1193c7: 83 ec 0c sub $0xc,%esp
1193ca: ff b3 90 00 00 00 pushl 0x90(%ebx)
1193d0: e8 7f 1b ff ff call 10af54 <rtems_semaphore_release>
return rc;
1193d5: 83 c4 10 add $0x10,%esp
}
1193d8: 89 f0 mov %esi,%eax
1193da: 8d 65 f8 lea -0x8(%ebp),%esp
1193dd: 5b pop %ebx
1193de: 5e pop %esi
1193df: 5d pop %ebp
1193e0: c3 ret
001195ed <msdos_file_ftruncate>:
* RETURNS:
* RC_OK on success, or -1 if error occured (errno set appropriately).
*/
int
msdos_file_ftruncate(rtems_libio_t *iop, off_t length)
{
1195ed: 55 push %ebp
1195ee: 89 e5 mov %esp,%ebp
1195f0: 57 push %edi
1195f1: 56 push %esi
1195f2: 53 push %ebx
1195f3: 83 ec 30 sub $0x30,%esp
1195f6: 8b 45 08 mov 0x8(%ebp),%eax
1195f9: 8b 55 0c mov 0xc(%ebp),%edx
1195fc: 89 55 d4 mov %edx,-0x2c(%ebp)
1195ff: 8b 55 10 mov 0x10(%ebp),%edx
119602: 89 55 d0 mov %edx,-0x30(%ebp)
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
119605: 8b 50 24 mov 0x24(%eax),%edx
119608: 8b 72 08 mov 0x8(%edx),%esi
fat_file_fd_t *fat_fd = iop->pathinfo.node_access;
11960b: 8b 78 18 mov 0x18(%eax),%edi
uint32_t old_length;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
11960e: 6a 00 push $0x0
119610: 6a 00 push $0x0
119612: ff b6 90 00 00 00 pushl 0x90(%esi)
119618: e8 47 18 ff ff call 10ae64 <rtems_semaphore_obtain>
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
11961d: 83 c4 10 add $0x10,%esp
119620: 85 c0 test %eax,%eax
119622: 74 13 je 119637 <msdos_file_ftruncate+0x4a><== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one(EIO);
119624: e8 e7 01 00 00 call 119810 <__errno> <== NOT EXECUTED
119629: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
11962f: 83 cb ff or $0xffffffff,%ebx <== NOT EXECUTED
119632: e9 89 00 00 00 jmp 1196c0 <msdos_file_ftruncate+0xd3><== NOT EXECUTED
old_length = fat_fd->fat_file_size;
119637: 8b 4f 18 mov 0x18(%edi),%ecx
if (length < old_length) {
11963a: 83 7d d0 00 cmpl $0x0,-0x30(%ebp)
11963e: 7f 1d jg 11965d <msdos_file_ftruncate+0x70><== NEVER TAKEN
119640: 7c 05 jl 119647 <msdos_file_ftruncate+0x5a><== NEVER TAKEN
119642: 39 4d d4 cmp %ecx,-0x2c(%ebp)
119645: 73 16 jae 11965d <msdos_file_ftruncate+0x70>
rc = fat_file_truncate(&fs_info->fat, fat_fd, length);
119647: 50 push %eax
119648: ff 75 d4 pushl -0x2c(%ebp)
11964b: 57 push %edi
11964c: 56 push %esi
11964d: e8 08 85 ff ff call 111b5a <fat_file_truncate>
119652: 89 c3 mov %eax,%ebx
119654: 83 c4 10 add $0x10,%esp
errno = ENOSPC;
rc = -1;
}
}
if (rc == RC_OK) {
119657: 85 c0 test %eax,%eax
119659: 74 4e je 1196a9 <msdos_file_ftruncate+0xbc><== ALWAYS TAKEN
11965b: eb 52 jmp 1196af <msdos_file_ftruncate+0xc2><== NOT EXECUTED
if (length < old_length) {
rc = fat_file_truncate(&fs_info->fat, fat_fd, length);
} else {
uint32_t new_length;
rc = fat_file_extend(&fs_info->fat,
11965d: 83 ec 0c sub $0xc,%esp
119660: 8d 45 e4 lea -0x1c(%ebp),%eax
119663: 50 push %eax
119664: ff 75 d4 pushl -0x2c(%ebp)
119667: 6a 01 push $0x1
119669: 57 push %edi
11966a: 56 push %esi
11966b: 89 4d cc mov %ecx,-0x34(%ebp)
11966e: e8 f1 86 ff ff call 111d64 <fat_file_extend>
119673: 89 c3 mov %eax,%ebx
fat_fd,
true,
length,
&new_length);
if (rc == RC_OK && length != new_length) {
119675: 83 c4 20 add $0x20,%esp
119678: 85 c0 test %eax,%eax
11967a: 8b 4d cc mov -0x34(%ebp),%ecx
11967d: 75 30 jne 1196af <msdos_file_ftruncate+0xc2><== NEVER TAKEN
11967f: 8b 45 e4 mov -0x1c(%ebp),%eax
119682: 83 7d d0 00 cmpl $0x0,-0x30(%ebp)
119686: 75 05 jne 11968d <msdos_file_ftruncate+0xa0><== NEVER TAKEN
119688: 39 45 d4 cmp %eax,-0x2c(%ebp)
11968b: 74 1c je 1196a9 <msdos_file_ftruncate+0xbc><== ALWAYS TAKEN
fat_file_truncate(&fs_info->fat, fat_fd, old_length);
11968d: 50 push %eax <== NOT EXECUTED
11968e: 51 push %ecx <== NOT EXECUTED
11968f: 57 push %edi <== NOT EXECUTED
119690: 56 push %esi <== NOT EXECUTED
119691: e8 c4 84 ff ff call 111b5a <fat_file_truncate> <== NOT EXECUTED
errno = ENOSPC;
119696: e8 75 01 00 00 call 119810 <__errno> <== NOT EXECUTED
11969b: c7 00 1c 00 00 00 movl $0x1c,(%eax) <== NOT EXECUTED
1196a1: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rc = -1;
1196a4: 83 cb ff or $0xffffffff,%ebx <== NOT EXECUTED
1196a7: eb 06 jmp 1196af <msdos_file_ftruncate+0xc2><== NOT EXECUTED
}
}
if (rc == RC_OK) {
fat_fd->fat_file_size = length;
1196a9: 8b 55 d4 mov -0x2c(%ebp),%edx
1196ac: 89 57 18 mov %edx,0x18(%edi)
}
rtems_semaphore_release(fs_info->vol_sema);
1196af: 83 ec 0c sub $0xc,%esp
1196b2: ff b6 90 00 00 00 pushl 0x90(%esi)
1196b8: e8 97 18 ff ff call 10af54 <rtems_semaphore_release>
return rc;
1196bd: 83 c4 10 add $0x10,%esp
}
1196c0: 89 d8 mov %ebx,%eax
1196c2: 8d 65 f4 lea -0xc(%ebp),%esp
1196c5: 5b pop %ebx
1196c6: 5e pop %esi
1196c7: 5f pop %edi
1196c8: 5d pop %ebp
1196c9: c3 ret
001193e1 <msdos_file_read>:
* the number of bytes read on success, or -1 if error occured (errno set
* appropriately)
*/
ssize_t
msdos_file_read(rtems_libio_t *iop, void *buffer, size_t count)
{
1193e1: 55 push %ebp
1193e2: 89 e5 mov %esp,%ebp
1193e4: 57 push %edi
1193e5: 56 push %esi
1193e6: 53 push %ebx
1193e7: 83 ec 20 sub $0x20,%esp
1193ea: 8b 75 08 mov 0x8(%ebp),%esi
ssize_t ret = 0;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
1193ed: 8b 46 24 mov 0x24(%esi),%eax
1193f0: 8b 50 08 mov 0x8(%eax),%edx
fat_file_fd_t *fat_fd = iop->pathinfo.node_access;
1193f3: 8b 5e 18 mov 0x18(%esi),%ebx
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
1193f6: 6a 00 push $0x0
1193f8: 6a 00 push $0x0
1193fa: ff b2 90 00 00 00 pushl 0x90(%edx)
119400: 89 55 e4 mov %edx,-0x1c(%ebp)
119403: e8 5c 1a ff ff call 10ae64 <rtems_semaphore_obtain>
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
119408: 83 c4 10 add $0x10,%esp
11940b: 85 c0 test %eax,%eax
11940d: 8b 55 e4 mov -0x1c(%ebp),%edx
119410: 74 10 je 119422 <msdos_file_read+0x41> <== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one(EIO);
119412: e8 f9 03 00 00 call 119810 <__errno> <== NOT EXECUTED
119417: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
11941d: 83 cf ff or $0xffffffff,%edi <== NOT EXECUTED
119420: eb 3e jmp 119460 <msdos_file_read+0x7f> <== NOT EXECUTED
ret = fat_file_read(&fs_info->fat, fat_fd, iop->offset, count,
119422: 83 ec 0c sub $0xc,%esp
119425: ff 75 0c pushl 0xc(%ebp)
119428: ff 75 10 pushl 0x10(%ebp)
11942b: ff 76 04 pushl 0x4(%esi)
11942e: 53 push %ebx
11942f: 52 push %edx
119430: 89 55 e4 mov %edx,-0x1c(%ebp)
119433: e8 b3 85 ff ff call 1119eb <fat_file_read>
119438: 89 c7 mov %eax,%edi
buffer);
if (ret > 0)
11943a: 83 c4 20 add $0x20,%esp
11943d: 85 c0 test %eax,%eax
11943f: 8b 55 e4 mov -0x1c(%ebp),%edx
119442: 7e 0b jle 11944f <msdos_file_read+0x6e>
iop->offset += ret;
119444: 89 c3 mov %eax,%ebx
119446: c1 fb 1f sar $0x1f,%ebx
119449: 01 46 04 add %eax,0x4(%esi)
11944c: 11 5e 08 adc %ebx,0x8(%esi)
rtems_semaphore_release(fs_info->vol_sema);
11944f: 83 ec 0c sub $0xc,%esp
119452: ff b2 90 00 00 00 pushl 0x90(%edx)
119458: e8 f7 1a ff ff call 10af54 <rtems_semaphore_release>
return ret;
11945d: 83 c4 10 add $0x10,%esp
}
119460: 89 f8 mov %edi,%eax
119462: 8d 65 f4 lea -0xc(%ebp),%esp
119465: 5b pop %ebx
119466: 5e pop %esi
119467: 5f pop %edi
119468: 5d pop %ebp
119469: c3 ret
0011954d <msdos_file_stat>:
int
msdos_file_stat(
const rtems_filesystem_location_info_t *loc,
struct stat *buf
)
{
11954d: 55 push %ebp
11954e: 89 e5 mov %esp,%ebp
119550: 57 push %edi
119551: 56 push %esi
119552: 53 push %ebx
119553: 83 ec 10 sub $0x10,%esp
119556: 8b 45 08 mov 0x8(%ebp),%eax
119559: 8b 5d 0c mov 0xc(%ebp),%ebx
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = loc->mt_entry->fs_info;
11955c: 8b 50 14 mov 0x14(%eax),%edx
11955f: 8b 72 08 mov 0x8(%edx),%esi
fat_file_fd_t *fat_fd = loc->node_access;
119562: 8b 78 08 mov 0x8(%eax),%edi
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
119565: 6a 00 push $0x0
119567: 6a 00 push $0x0
119569: ff b6 90 00 00 00 pushl 0x90(%esi)
11956f: e8 f0 18 ff ff call 10ae64 <rtems_semaphore_obtain>
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
119574: 83 c4 10 add $0x10,%esp
119577: 85 c0 test %eax,%eax
119579: 74 10 je 11958b <msdos_file_stat+0x3e> <== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one(EIO);
11957b: e8 90 02 00 00 call 119810 <__errno> <== NOT EXECUTED
119580: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
119586: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
119589: eb 5a jmp 1195e5 <msdos_file_stat+0x98> <== NOT EXECUTED
11958b: 8b 46 58 mov 0x58(%esi),%eax
buf->st_dev = rtems_disk_get_device_identifier(fs_info->fat.vol.dd);
11958e: 8b 50 04 mov 0x4(%eax),%edx
119591: 8b 00 mov (%eax),%eax
119593: 89 03 mov %eax,(%ebx)
119595: 89 53 04 mov %edx,0x4(%ebx)
buf->st_ino = fat_fd->ino;
119598: 8b 47 0c mov 0xc(%edi),%eax
11959b: 89 43 08 mov %eax,0x8(%ebx)
buf->st_mode = S_IFREG | S_IRWXU | S_IRWXG | S_IRWXO;
11959e: c7 43 0c ff 81 00 00 movl $0x81ff,0xc(%ebx)
buf->st_rdev = 0ll;
1195a5: c7 43 18 00 00 00 00 movl $0x0,0x18(%ebx)
1195ac: c7 43 1c 00 00 00 00 movl $0x0,0x1c(%ebx)
buf->st_size = fat_fd->fat_file_size;
1195b3: 8b 47 18 mov 0x18(%edi),%eax
1195b6: 89 43 20 mov %eax,0x20(%ebx)
1195b9: c7 43 24 00 00 00 00 movl $0x0,0x24(%ebx)
buf->st_blocks = fat_fd->fat_file_size >> FAT_SECTOR512_BITS;
1195c0: c1 e8 09 shr $0x9,%eax
1195c3: 89 43 44 mov %eax,0x44(%ebx)
buf->st_blksize = fs_info->fat.vol.bps;
1195c6: 0f b7 06 movzwl (%esi),%eax
1195c9: 89 43 40 mov %eax,0x40(%ebx)
buf->st_mtime = fat_fd->mtime;
1195cc: 8b 47 40 mov 0x40(%edi),%eax
1195cf: 89 43 30 mov %eax,0x30(%ebx)
rtems_semaphore_release(fs_info->vol_sema);
1195d2: 83 ec 0c sub $0xc,%esp
1195d5: ff b6 90 00 00 00 pushl 0x90(%esi)
1195db: e8 74 19 ff ff call 10af54 <rtems_semaphore_release>
return RC_OK;
1195e0: 83 c4 10 add $0x10,%esp
1195e3: 31 c0 xor %eax,%eax
}
1195e5: 8d 65 f4 lea -0xc(%ebp),%esp
1195e8: 5b pop %ebx
1195e9: 5e pop %esi
1195ea: 5f pop %edi
1195eb: 5d pop %ebp
1195ec: c3 ret
001196ca <msdos_file_sync>:
* RETURNS:
* RC_OK on success, or -1 if error occured (errno set appropriately)
*/
int
msdos_file_sync(rtems_libio_t *iop)
{
1196ca: 55 push %ebp
1196cb: 89 e5 mov %esp,%ebp
1196cd: 56 push %esi
1196ce: 53 push %ebx
1196cf: 8b 75 08 mov 0x8(%ebp),%esi
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
1196d2: 8b 46 24 mov 0x24(%esi),%eax
1196d5: 8b 58 08 mov 0x8(%eax),%ebx
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
1196d8: 50 push %eax
1196d9: 6a 00 push $0x0
1196db: 6a 00 push $0x0
1196dd: ff b3 90 00 00 00 pushl 0x90(%ebx)
1196e3: e8 7c 17 ff ff call 10ae64 <rtems_semaphore_obtain>
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
1196e8: 83 c4 10 add $0x10,%esp
1196eb: 85 c0 test %eax,%eax
1196ed: 74 10 je 1196ff <msdos_file_sync+0x35> <== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one(EIO);
1196ef: e8 1c 01 00 00 call 119810 <__errno> <== NOT EXECUTED
1196f4: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
1196fa: 83 ce ff or $0xffffffff,%esi <== NOT EXECUTED
1196fd: eb 2a jmp 119729 <msdos_file_sync+0x5f> <== NOT EXECUTED
rc = msdos_file_update(iop);
1196ff: 89 f0 mov %esi,%eax
119701: e8 36 fc ff ff call 11933c <msdos_file_update>
119706: 89 c6 mov %eax,%esi
if (rc != RC_OK)
119708: 85 c0 test %eax,%eax
11970a: 74 05 je 119711 <msdos_file_sync+0x47> <== ALWAYS TAKEN
{
rtems_semaphore_release(fs_info->vol_sema);
11970c: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11970f: eb 0a jmp 11971b <msdos_file_sync+0x51> <== NOT EXECUTED
return rc;
}
rc = msdos_sync_unprotected(fs_info);
119711: 83 ec 0c sub $0xc,%esp
119714: 53 push %ebx
119715: e8 54 e1 ff ff call 11786e <msdos_sync_unprotected>
rtems_semaphore_release(fs_info->vol_sema);
11971a: 58 pop %eax
11971b: ff b3 90 00 00 00 pushl 0x90(%ebx)
119721: e8 2e 18 ff ff call 10af54 <rtems_semaphore_release>
return RC_OK;
119726: 83 c4 10 add $0x10,%esp
}
119729: 89 f0 mov %esi,%eax
11972b: 8d 65 f8 lea -0x8(%ebp),%esp
11972e: 5b pop %ebx
11972f: 5e pop %esi
119730: 5d pop %ebp
119731: c3 ret
0011933c <msdos_file_update>:
#include "msdos.h"
static int
msdos_file_update(rtems_libio_t *iop)
{
11933c: 55 push %ebp
11933d: 89 e5 mov %esp,%ebp
11933f: 56 push %esi
119340: 53 push %ebx
119341: 89 c3 mov %eax,%ebx
int rc = RC_OK;
fat_file_fd_t *fat_fd = iop->pathinfo.node_access;
119343: 8b 70 18 mov 0x18(%eax),%esi
#include "msdos.h"
static int
msdos_file_update(rtems_libio_t *iop)
{
int rc = RC_OK;
119346: 31 c0 xor %eax,%eax
/*
* if fat-file descriptor is not marked as "removed", synchronize
* size, first cluster number, write time and date fields of the file
*/
if (!FAT_FILE_IS_REMOVED(fat_fd))
119348: f6 46 30 01 testb $0x1,0x30(%esi)
11934c: 75 34 jne 119382 <msdos_file_update+0x46><== NEVER TAKEN
{
rc = msdos_set_first_cluster_num(iop->pathinfo.mt_entry, fat_fd);
11934e: 51 push %ecx
11934f: 51 push %ecx
119350: 56 push %esi
119351: ff 73 24 pushl 0x24(%ebx)
119354: e8 fc d5 ff ff call 116955 <msdos_set_first_cluster_num>
if (rc != RC_OK)
119359: 83 c4 10 add $0x10,%esp
11935c: 85 c0 test %eax,%eax
11935e: 75 22 jne 119382 <msdos_file_update+0x46><== NEVER TAKEN
{
return rc;
}
rc = msdos_set_file_size(iop->pathinfo.mt_entry, fat_fd);
119360: 52 push %edx
119361: 52 push %edx
119362: 56 push %esi
119363: ff 73 24 pushl 0x24(%ebx)
119366: e8 84 d6 ff ff call 1169ef <msdos_set_file_size>
if (rc != RC_OK)
11936b: 83 c4 10 add $0x10,%esp
11936e: 85 c0 test %eax,%eax
119370: 75 10 jne 119382 <msdos_file_update+0x46><== NEVER TAKEN
{
return rc;
}
rc = msdos_set_dir_wrt_time_and_date(iop->pathinfo.mt_entry, fat_fd);
119372: 50 push %eax
119373: 50 push %eax
119374: 56 push %esi
119375: ff 73 24 pushl 0x24(%ebx)
119378: e8 2d d5 ff ff call 1168aa <msdos_set_dir_wrt_time_and_date>
11937d: 83 c4 10 add $0x10,%esp
119380: eb 00 jmp 119382 <msdos_file_update+0x46>
return rc;
}
}
return rc;
}
119382: 8d 65 f8 lea -0x8(%ebp),%esp
119385: 5b pop %ebx
119386: 5e pop %esi
119387: 5d pop %ebp
119388: c3 ret
0011946a <msdos_file_write>:
* the number of bytes written on success, or -1 if error occured
* and errno set appropriately
*/
ssize_t
msdos_file_write(rtems_libio_t *iop,const void *buffer, size_t count)
{
11946a: 55 push %ebp
11946b: 89 e5 mov %esp,%ebp
11946d: 57 push %edi
11946e: 56 push %esi
11946f: 53 push %ebx
119470: 83 ec 30 sub $0x30,%esp
119473: 8b 75 08 mov 0x8(%ebp),%esi
ssize_t ret = 0;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
119476: 8b 46 24 mov 0x24(%esi),%eax
119479: 8b 40 08 mov 0x8(%eax),%eax
11947c: 89 45 d0 mov %eax,-0x30(%ebp)
fat_file_fd_t *fat_fd = iop->pathinfo.node_access;
11947f: 8b 7e 18 mov 0x18(%esi),%edi
119482: 89 7d e4 mov %edi,-0x1c(%ebp)
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
119485: 6a 00 push $0x0
119487: 6a 00 push $0x0
119489: ff b0 90 00 00 00 pushl 0x90(%eax)
11948f: e8 d0 19 ff ff call 10ae64 <rtems_semaphore_obtain>
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
119494: 83 c4 10 add $0x10,%esp
119497: 85 c0 test %eax,%eax
119499: 74 0d je 1194a8 <msdos_file_write+0x3e> <== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one(EIO);
11949b: e8 70 03 00 00 call 119810 <__errno> <== NOT EXECUTED
1194a0: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
1194a6: eb 4a jmp 1194f2 <msdos_file_write+0x88> <== NOT EXECUTED
if ((iop->flags & LIBIO_FLAGS_APPEND) != 0)
1194a8: f6 46 0d 02 testb $0x2,0xd(%esi)
1194ac: 74 10 je 1194be <msdos_file_write+0x54>
iop->offset = fat_fd->fat_file_size;
1194ae: 8b 7d e4 mov -0x1c(%ebp),%edi
1194b1: 8b 7f 18 mov 0x18(%edi),%edi
1194b4: 89 7e 04 mov %edi,0x4(%esi)
1194b7: c7 46 08 00 00 00 00 movl $0x0,0x8(%esi)
ret = fat_file_write(&fs_info->fat, fat_fd, iop->offset, count,
1194be: 83 ec 0c sub $0xc,%esp
1194c1: ff 75 0c pushl 0xc(%ebp)
1194c4: ff 75 10 pushl 0x10(%ebp)
1194c7: ff 76 04 pushl 0x4(%esi)
1194ca: ff 75 e4 pushl -0x1c(%ebp)
1194cd: ff 75 d0 pushl -0x30(%ebp)
1194d0: e8 ad 8a ff ff call 111f82 <fat_file_write>
1194d5: 89 c2 mov %eax,%edx
buffer);
if (ret < 0)
1194d7: 83 c4 20 add $0x20,%esp
1194da: 85 c0 test %eax,%eax
1194dc: 79 19 jns 1194f7 <msdos_file_write+0x8d> <== ALWAYS TAKEN
{
rtems_semaphore_release(fs_info->vol_sema);
1194de: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1194e1: 8b 75 d0 mov -0x30(%ebp),%esi <== NOT EXECUTED
1194e4: ff b6 90 00 00 00 pushl 0x90(%esi) <== NOT EXECUTED
1194ea: e8 65 1a ff ff call 10af54 <rtems_semaphore_release><== NOT EXECUTED
return -1;
1194ef: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
1194f2: 83 ca ff or $0xffffffff,%edx <== NOT EXECUTED
1194f5: eb 4c jmp 119543 <msdos_file_write+0xd9> <== NOT EXECUTED
/*
* update file size in both fat-file descriptor and file control block if
* file was extended
*/
iop->offset += ret;
1194f7: 89 c1 mov %eax,%ecx
1194f9: 89 c3 mov %eax,%ebx
1194fb: c1 fb 1f sar $0x1f,%ebx
1194fe: 03 4e 04 add 0x4(%esi),%ecx
119501: 13 5e 08 adc 0x8(%esi),%ebx
119504: 89 4e 04 mov %ecx,0x4(%esi)
119507: 89 5e 08 mov %ebx,0x8(%esi)
if (iop->offset > fat_fd->fat_file_size)
11950a: 8b 7d e4 mov -0x1c(%ebp),%edi
11950d: 8b 77 18 mov 0x18(%edi),%esi
119510: 31 ff xor %edi,%edi
119512: 89 75 d8 mov %esi,-0x28(%ebp)
119515: 89 7d dc mov %edi,-0x24(%ebp)
119518: 83 fb 00 cmp $0x0,%ebx
11951b: 7c 0c jl 119529 <msdos_file_write+0xbf> <== NEVER TAKEN
11951d: 7f 04 jg 119523 <msdos_file_write+0xb9> <== NEVER TAKEN
11951f: 39 f1 cmp %esi,%ecx
119521: 76 06 jbe 119529 <msdos_file_write+0xbf>
fat_fd->fat_file_size = iop->offset;
119523: 8b 75 e4 mov -0x1c(%ebp),%esi
119526: 89 4e 18 mov %ecx,0x18(%esi)
rtems_semaphore_release(fs_info->vol_sema);
119529: 83 ec 0c sub $0xc,%esp
11952c: 8b 7d d0 mov -0x30(%ebp),%edi
11952f: ff b7 90 00 00 00 pushl 0x90(%edi)
119535: 89 55 d4 mov %edx,-0x2c(%ebp)
119538: e8 17 1a ff ff call 10af54 <rtems_semaphore_release>
return ret;
11953d: 83 c4 10 add $0x10,%esp
119540: 8b 55 d4 mov -0x2c(%ebp),%edx
}
119543: 89 d0 mov %edx,%eax
119545: 8d 65 f4 lea -0xc(%ebp),%esp
119548: 5b pop %ebx
119549: 5e pop %esi
11954a: 5f pop %edi
11954b: 5d pop %ebp
11954c: c3 ret
00118c27 <msdos_filename_unix2dos>:
* Convert a unix filename to a DOS filename. Return -1 if wrong name is
* supplied.
*/
int
msdos_filename_unix2dos(const char *un, int unlen, char *dn)
{
118c27: 55 push %ebp
118c28: 89 e5 mov %esp,%ebp
118c2a: 57 push %edi
118c2b: 56 push %esi
118c2c: 53 push %ebx
118c2d: 8b 45 08 mov 0x8(%ebp),%eax
118c30: 8b 55 0c mov 0xc(%ebp),%edx
/*
* Fill the dos filename string with blanks. These are DOS's pad
* characters.
*/
for (i = 0; i <= 10; i++)
118c33: 31 db xor %ebx,%ebx
dn[i] = ' ';
118c35: 8b 4d 10 mov 0x10(%ebp),%ecx
118c38: c6 04 19 20 movb $0x20,(%ecx,%ebx,1)
/*
* Fill the dos filename string with blanks. These are DOS's pad
* characters.
*/
for (i = 0; i <= 10; i++)
118c3c: 43 inc %ebx
118c3d: 83 fb 0b cmp $0xb,%ebx
118c40: 75 f3 jne 118c35 <msdos_filename_unix2dos+0xe>
/*
* The filenames "." and ".." are handled specially, since they
* don't follow dos filename rules.
*/
if (un[0] == '.' && unlen == 1) {
118c42: 80 38 2e cmpb $0x2e,(%eax)
118c45: 75 29 jne 118c70 <msdos_filename_unix2dos+0x49><== ALWAYS TAKEN
118c47: 83 fa 01 cmp $0x1,%edx <== NOT EXECUTED
118c4a: 75 08 jne 118c54 <msdos_filename_unix2dos+0x2d><== NOT EXECUTED
dn[0] = '.';
118c4c: c6 01 2e movb $0x2e,(%ecx) <== NOT EXECUTED
return 0;
118c4f: e9 9f 00 00 00 jmp 118cf3 <msdos_filename_unix2dos+0xcc><== NOT EXECUTED
}
if (un[0] == '.' && un[1] == '.' && unlen == 2) {
118c54: 80 78 01 2e cmpb $0x2e,0x1(%eax) <== NOT EXECUTED
118c58: 75 16 jne 118c70 <msdos_filename_unix2dos+0x49><== NOT EXECUTED
118c5a: 83 fa 02 cmp $0x2,%edx <== NOT EXECUTED
118c5d: 75 11 jne 118c70 <msdos_filename_unix2dos+0x49><== NOT EXECUTED
dn[0] = '.';
118c5f: 8b 7d 10 mov 0x10(%ebp),%edi <== NOT EXECUTED
118c62: c6 07 2e movb $0x2e,(%edi) <== NOT EXECUTED
dn[1] = '.';
118c65: c6 47 01 2e movb $0x2e,0x1(%edi) <== NOT EXECUTED
return 0;
118c69: e9 85 00 00 00 jmp 118cf3 <msdos_filename_unix2dos+0xcc><== NOT EXECUTED
/*
* Remove any dots from the start of a file name.
*/
while (unlen && (*un == '.')) {
un++;
118c6e: 40 inc %eax <== NOT EXECUTED
unlen--;
118c6f: 4a dec %edx <== NOT EXECUTED
}
/*
* Remove any dots from the start of a file name.
*/
while (unlen && (*un == '.')) {
118c70: 85 d2 test %edx,%edx
118c72: 75 07 jne 118c7b <msdos_filename_unix2dos+0x54><== ALWAYS TAKEN
118c74: 89 c7 mov %eax,%edi
118c76: 8b 75 10 mov 0x10(%ebp),%esi
118c79: eb 16 jmp 118c91 <msdos_filename_unix2dos+0x6a>
118c7b: 80 38 2e cmpb $0x2e,(%eax)
118c7e: 74 ee je 118c6e <msdos_filename_unix2dos+0x47><== NEVER TAKEN
118c80: eb f2 jmp 118c74 <msdos_filename_unix2dos+0x4d>
* of string, a '.', or 8 characters. Whichever happens first stops
* us. This forms the name portion of the dos filename. Fold to
* upper case.
*/
for (i = 0; i <= 7 && unlen && (c = *un) && c != '.'; i++) {
if (msdos_map[c] == 0)
118c82: 8a 9b 14 8c 12 00 mov 0x128c14(%ebx),%bl
118c88: 84 db test %bl,%bl
118c8a: 74 27 je 118cb3 <msdos_filename_unix2dos+0x8c>
break;
dn[i] = msdos_map[c];
118c8c: 88 1e mov %bl,(%esi)
un++;
118c8e: 40 inc %eax
unlen--;
118c8f: 4a dec %edx
118c90: 46 inc %esi
/*
* Convert a unix filename to a DOS filename. Return -1 if wrong name is
* supplied.
*/
int
msdos_filename_unix2dos(const char *un, int unlen, char *dn)
118c91: 89 c3 mov %eax,%ebx
118c93: 29 fb sub %edi,%ebx
* Copy the unix filename into the dos filename string upto the end
* of string, a '.', or 8 characters. Whichever happens first stops
* us. This forms the name portion of the dos filename. Fold to
* upper case.
*/
for (i = 0; i <= 7 && unlen && (c = *un) && c != '.'; i++) {
118c95: 83 fb 07 cmp $0x7,%ebx
118c98: 7f 19 jg 118cb3 <msdos_filename_unix2dos+0x8c>
118c9a: 85 d2 test %edx,%edx
118c9c: 74 15 je 118cb3 <msdos_filename_unix2dos+0x8c>
118c9e: 0f b6 18 movzbl (%eax),%ebx
118ca1: 84 db test %bl,%bl
118ca3: 74 0e je 118cb3 <msdos_filename_unix2dos+0x8c><== NEVER TAKEN
118ca5: 80 fb 2e cmp $0x2e,%bl
118ca8: 75 d8 jne 118c82 <msdos_filename_unix2dos+0x5b>
118caa: eb 07 jmp 118cb3 <msdos_filename_unix2dos+0x8c>
/*
* Strip any further characters up to a '.' or the end of the
* string.
*/
while (unlen && (c = *un)) {
un++;
118cac: 40 inc %eax
unlen--;
118cad: 4a dec %edx
/* Make sure we've skipped over the dot before stopping. */
if (c == '.')
118cae: 80 fb 2e cmp $0x2e,%bl
118cb1: 74 0a je 118cbd <msdos_filename_unix2dos+0x96>
/*
* Strip any further characters up to a '.' or the end of the
* string.
*/
while (unlen && (c = *un)) {
118cb3: 85 d2 test %edx,%edx
118cb5: 74 06 je 118cbd <msdos_filename_unix2dos+0x96>
118cb7: 8a 18 mov (%eax),%bl
118cb9: 84 db test %bl,%bl
118cbb: 75 ef jne 118cac <msdos_filename_unix2dos+0x85><== ALWAYS TAKEN
}
/*
* Remove any dots from the start of a file name.
*/
while (unlen && (*un == '.')) {
118cbd: bb 08 00 00 00 mov $0x8,%ebx
118cc2: eb 1b jmp 118cdf <msdos_filename_unix2dos+0xb8>
* Copy in the extension part of the name, if any. Force to upper
* case. Note that the extension is allowed to contain '.'s.
* Filenames in this form are probably inaccessable under dos.
*/
for (i = 8; i <= 10 && unlen && (c = *un); i++) {
if (msdos_map[c] == 0)
118cc4: 81 e6 ff 00 00 00 and $0xff,%esi
118cca: 0f b6 b6 14 8c 12 00 movzbl 0x128c14(%esi),%esi
118cd1: 89 f1 mov %esi,%ecx
118cd3: 84 c9 test %cl,%cl
118cd5: 74 1c je 118cf3 <msdos_filename_unix2dos+0xcc><== ALWAYS TAKEN
break;
dn[i] = msdos_map[c];
118cd7: 8b 7d 10 mov 0x10(%ebp),%edi <== NOT EXECUTED
118cda: 88 0c 1f mov %cl,(%edi,%ebx,1) <== NOT EXECUTED
un++;
unlen--;
118cdd: 4a dec %edx <== NOT EXECUTED
/*
* Copy in the extension part of the name, if any. Force to upper
* case. Note that the extension is allowed to contain '.'s.
* Filenames in this form are probably inaccessable under dos.
*/
for (i = 8; i <= 10 && unlen && (c = *un); i++) {
118cde: 43 inc %ebx <== NOT EXECUTED
118cdf: 85 d2 test %edx,%edx
118ce1: 74 10 je 118cf3 <msdos_filename_unix2dos+0xcc>
118ce3: 83 fb 0a cmp $0xa,%ebx
118ce6: 7f 0b jg 118cf3 <msdos_filename_unix2dos+0xcc><== NEVER TAKEN
118ce8: 0f b6 74 18 f8 movzbl -0x8(%eax,%ebx,1),%esi
118ced: 89 f1 mov %esi,%ecx
118cef: 84 c9 test %cl,%cl
118cf1: 75 d1 jne 118cc4 <msdos_filename_unix2dos+0x9d><== ALWAYS TAKEN
dn[i] = msdos_map[c];
un++;
unlen--;
}
return 0;
}
118cf3: 31 c0 xor %eax,%eax
118cf5: 5b pop %ebx
118cf6: 5e pop %esi
118cf7: 5f pop %edi
118cf8: 5d pop %ebp
118cf9: c3 ret
001176f1 <msdos_find_name>:
msdos_find_name(
rtems_filesystem_location_info_t *parent_loc,
const char *name,
int name_len
)
{
1176f1: 55 push %ebp
1176f2: 89 e5 mov %esp,%ebp
1176f4: 57 push %edi
1176f5: 56 push %esi
1176f6: 53 push %ebx
1176f7: 83 ec 5c sub $0x5c,%esp
1176fa: 8b 5d 10 mov 0x10(%ebp),%ebx
int rc = RC_OK;
msdos_fs_info_t *fs_info = parent_loc->mt_entry->fs_info;
1176fd: 8b 55 08 mov 0x8(%ebp),%edx
117700: 8b 42 14 mov 0x14(%edx),%eax
117703: 8b 40 08 mov 0x8(%eax),%eax
117706: 89 45 a4 mov %eax,-0x5c(%ebp)
fat_file_fd_t *fat_fd = NULL;
117709: c7 45 b4 00 00 00 00 movl $0x0,-0x4c(%ebp)
fat_dir_pos_t dir_pos;
unsigned short time_val = 0;
unsigned short date = 0;
char node_entry[MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE];
memset(node_entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
117710: 8d 75 c8 lea -0x38(%ebp),%esi
117713: b9 08 00 00 00 mov $0x8,%ecx
117718: 31 c0 xor %eax,%eax
11771a: 89 f7 mov %esi,%edi
11771c: f3 ab rep stos %eax,%es:(%edi)
name_type = msdos_long_to_short (name,
11771e: 6a 0b push $0xb
117720: 56 push %esi
117721: 53 push %ebx
117722: ff 75 0c pushl 0xc(%ebp)
117725: e8 e4 ef ff ff call 11670e <msdos_long_to_short>
/*
* find the node which correspondes to the name in the directory pointed by
* 'parent_loc'
*/
rc = msdos_get_name_node(parent_loc, false, name, name_len, name_type,
11772a: 83 c4 0c add $0xc,%esp
11772d: 56 push %esi
11772e: 8d 75 b8 lea -0x48(%ebp),%esi
117731: 56 push %esi
117732: 50 push %eax
117733: 53 push %ebx
117734: ff 75 0c pushl 0xc(%ebp)
117737: 6a 00 push $0x0
117739: ff 75 08 pushl 0x8(%ebp)
11773c: e8 e5 fe ff ff call 117626 <msdos_get_name_node>
117741: 89 c3 mov %eax,%ebx
&dir_pos, node_entry);
if (rc != RC_OK)
117743: 83 c4 20 add $0x20,%esp
117746: 85 c0 test %eax,%eax
117748: 0f 85 16 01 00 00 jne 117864 <msdos_find_name+0x173>
return rc;
if (((*MSDOS_DIR_ATTR(node_entry)) & MSDOS_ATTR_VOLUME_ID) ||
11774e: 8a 45 d3 mov -0x2d(%ebp),%al
((*MSDOS_DIR_ATTR(node_entry) & MSDOS_ATTR_LFN_MASK) == MSDOS_ATTR_LFN))
return MSDOS_NAME_NOT_FOUND_ERR;
117751: 66 bb 01 7d mov $0x7d01,%bx
rc = msdos_get_name_node(parent_loc, false, name, name_len, name_type,
&dir_pos, node_entry);
if (rc != RC_OK)
return rc;
if (((*MSDOS_DIR_ATTR(node_entry)) & MSDOS_ATTR_VOLUME_ID) ||
117755: a8 08 test $0x8,%al
117757: 0f 85 07 01 00 00 jne 117864 <msdos_find_name+0x173> <== NEVER TAKEN
((*MSDOS_DIR_ATTR(node_entry) & MSDOS_ATTR_LFN_MASK) == MSDOS_ATTR_LFN))
11775d: 83 e0 3f and $0x3f,%eax
rc = msdos_get_name_node(parent_loc, false, name, name_len, name_type,
&dir_pos, node_entry);
if (rc != RC_OK)
return rc;
if (((*MSDOS_DIR_ATTR(node_entry)) & MSDOS_ATTR_VOLUME_ID) ||
117760: 3c 0f cmp $0xf,%al
117762: 0f 84 fc 00 00 00 je 117864 <msdos_find_name+0x173> <== NEVER TAKEN
((*MSDOS_DIR_ATTR(node_entry) & MSDOS_ATTR_LFN_MASK) == MSDOS_ATTR_LFN))
return MSDOS_NAME_NOT_FOUND_ERR;
/* open fat-file corresponded to the found node */
rc = fat_file_open(&fs_info->fat, &dir_pos, &fat_fd);
117768: 53 push %ebx
117769: 8d 45 b4 lea -0x4c(%ebp),%eax
11776c: 50 push %eax
11776d: 56 push %esi
11776e: ff 75 a4 pushl -0x5c(%ebp)
117771: e8 20 a1 ff ff call 111896 <fat_file_open>
117776: 89 c3 mov %eax,%ebx
if (rc != RC_OK)
117778: 83 c4 10 add $0x10,%esp
11777b: 85 c0 test %eax,%eax
11777d: 0f 85 e1 00 00 00 jne 117864 <msdos_find_name+0x173> <== NEVER TAKEN
return rc;
fat_fd->dir_pos = dir_pos;
117783: 8b 5d b4 mov -0x4c(%ebp),%ebx
117786: 8d 7b 20 lea 0x20(%ebx),%edi
117789: b9 04 00 00 00 mov $0x4,%ecx
11778e: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
* size and first cluster num to the disk after each write operation
* (even if one byte is written - that is TOO slow) because
* otherwise real values of these fields stored in fat-file descriptor
* may be accidentally rewritten with wrong values stored on the disk
*/
if (fat_fd->links_num == 1)
117790: 83 7b 08 01 cmpl $0x1,0x8(%ebx)
117794: 0f 85 96 00 00 00 jne 117830 <msdos_find_name+0x13f>
{
fat_fd->cln = MSDOS_EXTRACT_CLUSTER_NUM(node_entry);
11779a: 0f b7 45 dc movzwl -0x24(%ebp),%eax
11779e: c1 e0 10 shl $0x10,%eax
1177a1: 0f b7 55 e2 movzwl -0x1e(%ebp),%edx
1177a5: 09 d0 or %edx,%eax
1177a7: 89 43 1c mov %eax,0x1c(%ebx)
time_val = *MSDOS_DIR_WRITE_TIME(node_entry);
date = *MSDOS_DIR_WRITE_DATE(node_entry);
fat_fd->mtime = msdos_date_dos2unix(CF_LE_W(date), CF_LE_W(time_val));
1177aa: 51 push %ecx
1177ab: 51 push %ecx
1177ac: 0f b7 45 de movzwl -0x22(%ebp),%eax
1177b0: 50 push %eax
1177b1: 0f b7 45 e0 movzwl -0x20(%ebp),%eax
1177b5: 50 push %eax
1177b6: e8 a3 13 00 00 call 118b5e <msdos_date_dos2unix>
1177bb: 89 43 40 mov %eax,0x40(%ebx)
if ((*MSDOS_DIR_ATTR(node_entry)) & MSDOS_ATTR_DIRECTORY)
1177be: 83 c4 10 add $0x10,%esp
1177c1: f6 45 d3 10 testb $0x10,-0x2d(%ebp)
1177c5: 8b 45 b4 mov -0x4c(%ebp),%eax
1177c8: 74 24 je 1177ee <msdos_find_name+0xfd>
{
fat_fd->fat_file_type = FAT_DIRECTORY;
1177ca: c7 40 10 00 00 00 00 movl $0x0,0x10(%eax)
fat_fd->size_limit = MSDOS_MAX_DIR_LENGHT;
1177d1: c7 40 14 00 00 20 00 movl $0x200000,0x14(%eax)
rc = fat_file_size(&fs_info->fat, fat_fd);
1177d8: 52 push %edx
1177d9: 52 push %edx
1177da: 50 push %eax
1177db: ff 75 a4 pushl -0x5c(%ebp)
1177de: e8 a9 a9 ff ff call 11218c <fat_file_size>
1177e3: 89 c3 mov %eax,%ebx
if (rc != RC_OK)
1177e5: 83 c4 10 add $0x10,%esp
1177e8: 85 c0 test %eax,%eax
1177ea: 74 16 je 117802 <msdos_find_name+0x111> <== ALWAYS TAKEN
1177ec: eb 5b jmp 117849 <msdos_find_name+0x158> <== NOT EXECUTED
return rc;
}
}
else
{
fat_fd->fat_file_size = CF_LE_L(*MSDOS_DIR_FILE_SIZE(node_entry));
1177ee: 8b 55 e4 mov -0x1c(%ebp),%edx
1177f1: 89 50 18 mov %edx,0x18(%eax)
fat_fd->fat_file_type = FAT_FILE;
1177f4: c7 40 10 04 00 00 00 movl $0x4,0x10(%eax)
fat_fd->size_limit = MSDOS_MAX_FILE_SIZE;
1177fb: c7 40 14 ff ff ff ff movl $0xffffffff,0x14(%eax)
}
/* these data is not actual for zero-length fat-file */
fat_fd->map.file_cln = 0;
117802: 8b 45 b4 mov -0x4c(%ebp),%eax
117805: c7 40 34 00 00 00 00 movl $0x0,0x34(%eax)
fat_fd->map.disk_cln = fat_fd->cln;
11780c: 8b 50 1c mov 0x1c(%eax),%edx
11780f: 89 50 38 mov %edx,0x38(%eax)
if ((fat_fd->fat_file_size != 0) &&
117812: 8b 48 18 mov 0x18(%eax),%ecx
117815: 85 c9 test %ecx,%ecx
117817: 74 10 je 117829 <msdos_find_name+0x138>
(fat_fd->fat_file_size <= fs_info->fat.vol.bpc))
117819: 8b 75 a4 mov -0x5c(%ebp),%esi
11781c: 0f b7 5e 06 movzwl 0x6(%esi),%ebx
/* these data is not actual for zero-length fat-file */
fat_fd->map.file_cln = 0;
fat_fd->map.disk_cln = fat_fd->cln;
if ((fat_fd->fat_file_size != 0) &&
117820: 39 d9 cmp %ebx,%ecx
117822: 77 05 ja 117829 <msdos_find_name+0x138>
(fat_fd->fat_file_size <= fs_info->fat.vol.bpc))
{
fat_fd->map.last_cln = fat_fd->cln;
117824: 89 50 3c mov %edx,0x3c(%eax)
117827: eb 07 jmp 117830 <msdos_find_name+0x13f>
}
else
{
fat_fd->map.last_cln = FAT_UNDEFINED_VALUE;
117829: c7 40 3c ff ff ff ff movl $0xffffffff,0x3c(%eax)
}
}
/* close fat-file corresponded to the node we searched in */
rc = fat_file_close(&fs_info->fat, parent_loc->node_access);
117830: 50 push %eax
117831: 50 push %eax
117832: 8b 55 08 mov 0x8(%ebp),%edx
117835: ff 72 08 pushl 0x8(%edx)
117838: ff 75 a4 pushl -0x5c(%ebp)
11783b: e8 f8 a3 ff ff call 111c38 <fat_file_close>
117840: 89 c3 mov %eax,%ebx
if (rc != RC_OK)
117842: 83 c4 10 add $0x10,%esp
117845: 85 c0 test %eax,%eax
117847: 74 12 je 11785b <msdos_find_name+0x16a> <== ALWAYS TAKEN
{
fat_file_close(&fs_info->fat, fat_fd);
117849: 50 push %eax <== NOT EXECUTED
11784a: 50 push %eax <== NOT EXECUTED
11784b: ff 75 b4 pushl -0x4c(%ebp) <== NOT EXECUTED
11784e: ff 75 a4 pushl -0x5c(%ebp) <== NOT EXECUTED
117851: e8 e2 a3 ff ff call 111c38 <fat_file_close> <== NOT EXECUTED
117856: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
117859: eb 09 jmp 117864 <msdos_find_name+0x173> <== NOT EXECUTED
return rc;
}
/* update node_info_ptr field */
parent_loc->node_access = fat_fd;
11785b: 8b 45 b4 mov -0x4c(%ebp),%eax
11785e: 8b 55 08 mov 0x8(%ebp),%edx
117861: 89 42 08 mov %eax,0x8(%edx)
return rc;
}
117864: 89 d8 mov %ebx,%eax
117866: 8d 65 f4 lea -0xc(%ebp),%esp
117869: 5b pop %ebx
11786a: 5e pop %esi
11786b: 5f pop %edi
11786c: 5d pop %ebp
11786d: c3 ret
00116c03 <msdos_find_name_in_fat_file>:
int name_len,
msdos_name_type_t name_type,
fat_dir_pos_t *dir_pos,
char *name_dir_entry
)
{
116c03: 55 push %ebp
116c04: 89 e5 mov %esp,%ebp
116c06: 57 push %edi
116c07: 56 push %esi
116c08: 53 push %ebx
116c09: 83 ec 6c sub $0x6c,%esp
116c0c: 8a 4d 10 mov 0x10(%ebp),%cl
116c0f: 88 4d bf mov %cl,-0x41(%ebp)
ssize_t ret = 0;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
116c12: 8b 45 08 mov 0x8(%ebp),%eax
116c15: 8b 40 08 mov 0x8(%eax),%eax
116c18: 89 45 cc mov %eax,-0x34(%ebp)
uint32_t empty_space_count = 0;
bool empty_space_found = false;
uint32_t entries_per_block;
bool read_cluster = false;
assert(name_len > 0);
116c1b: 83 7d 18 00 cmpl $0x0,0x18(%ebp)
116c1f: 7f 14 jg 116c35 <msdos_find_name_in_fat_file+0x32><== ALWAYS TAKEN
116c21: 68 93 8b 12 00 push $0x128b93 <== NOT EXECUTED
116c26: 68 cc 8b 12 00 push $0x128bcc <== NOT EXECUTED
116c2b: 68 c4 03 00 00 push $0x3c4 <== NOT EXECUTED
116c30: e9 d7 00 00 00 jmp 116d0c <msdos_find_name_in_fat_file+0x109><== NOT EXECUTED
static inline void
fat_dir_pos_init(
fat_dir_pos_t *dir_pos
)
{
dir_pos->sname.cln = 0;
116c35: 8b 5d 20 mov 0x20(%ebp),%ebx
116c38: c7 03 00 00 00 00 movl $0x0,(%ebx)
dir_pos->sname.ofs = 0;
116c3e: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx)
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
116c45: c7 43 08 ff ff ff ff movl $0xffffffff,0x8(%ebx)
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
116c4c: c7 43 0c ff ff ff ff movl $0xffffffff,0xc(%ebx)
fat_dir_pos_init(dir_pos);
lfn_start.cln = lfn_start.ofs = FAT_FILE_SHORT_NAME;
116c53: c7 45 e4 ff ff ff ff movl $0xffffffff,-0x1c(%ebp)
116c5a: c7 45 e0 ff ff ff ff movl $0xffffffff,-0x20(%ebp)
* is short still check for possible long entries with the short name.
*
* In PR1491 we need to have a LFN for a short file name entry. To
* test this make this test always fail, ie add "0 &&".
*/
if (create_node && (name_type == MSDOS_NAME_SHORT))
116c61: 83 7d 1c 01 cmpl $0x1,0x1c(%ebp)
116c65: 0f 94 45 bc sete -0x44(%ebp)
116c69: 75 0d jne 116c78 <msdos_find_name_in_fat_file+0x75>
lfn_entries = 0;
116c6b: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp)
* is short still check for possible long entries with the short name.
*
* In PR1491 we need to have a LFN for a short file name entry. To
* test this make this test always fail, ie add "0 &&".
*/
if (create_node && (name_type == MSDOS_NAME_SHORT))
116c72: 80 7d bf 00 cmpb $0x0,-0x41(%ebp)
116c76: 75 11 jne 116c89 <msdos_find_name_in_fat_file+0x86>
lfn_entries = 0;
else
lfn_entries =
((name_len - 1) + MSDOS_LFN_LEN_PER_ENTRY) / MSDOS_LFN_LEN_PER_ENTRY;
116c78: 8b 45 18 mov 0x18(%ebp),%eax
116c7b: 83 c0 0c add $0xc,%eax
* test this make this test always fail, ie add "0 &&".
*/
if (create_node && (name_type == MSDOS_NAME_SHORT))
lfn_entries = 0;
else
lfn_entries =
116c7e: b9 0d 00 00 00 mov $0xd,%ecx
116c83: 99 cltd
116c84: f7 f9 idiv %ecx
116c86: 89 45 c0 mov %eax,-0x40(%ebp)
((name_len - 1) + MSDOS_LFN_LEN_PER_ENTRY) / MSDOS_LFN_LEN_PER_ENTRY;
if (FAT_FD_OF_ROOT_DIR(fat_fd) &&
116c89: 8b 5d 0c mov 0xc(%ebp),%ebx
116c8c: 83 7b 20 01 cmpl $0x1,0x20(%ebx)
116c90: 75 17 jne 116ca9 <msdos_find_name_in_fat_file+0xa6>
116c92: 83 7b 24 00 cmpl $0x0,0x24(%ebx)
116c96: 75 11 jne 116ca9 <msdos_find_name_in_fat_file+0xa6><== NEVER TAKEN
116c98: 8b 5d cc mov -0x34(%ebp),%ebx
116c9b: f6 43 0a 03 testb $0x3,0xa(%ebx)
116c9f: 74 08 je 116ca9 <msdos_find_name_in_fat_file+0xa6><== NEVER TAKEN
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
bts2rd = fat_fd->fat_file_size;
116ca1: 8b 5d 0c mov 0xc(%ebp),%ebx
116ca4: 8b 5b 18 mov 0x18(%ebx),%ebx
116ca7: eb 07 jmp 116cb0 <msdos_find_name_in_fat_file+0xad>
else
bts2rd = fs_info->fat.vol.bpc;
116ca9: 8b 5d cc mov -0x34(%ebp),%ebx
116cac: 0f b7 5b 06 movzwl 0x6(%ebx),%ebx
116cb0: 89 5d d0 mov %ebx,-0x30(%ebp)
/*
* Scan the directory seeing if the file is present. While
* doing this see if a suitable location can be found to
* create the entry if the name is not found.
*/
while ((ret = fat_file_read(&fs_info->fat, fat_fd, (dir_offset * bts2rd),
116cb3: c7 45 b0 00 00 00 00 movl $0x0,-0x50(%ebp)
int lfn_entries;
int lfn_entry = 0;
uint32_t empty_space_offset = 0;
uint32_t empty_space_entry = 0;
uint32_t empty_space_count = 0;
bool empty_space_found = false;
116cba: c6 45 bd 00 movb $0x0,-0x43(%ebp)
uint8_t lfn_checksum = 0;
int lfn_entries;
int lfn_entry = 0;
uint32_t empty_space_offset = 0;
uint32_t empty_space_entry = 0;
uint32_t empty_space_count = 0;
116cbe: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)
bool lfn_matched = false;
uint8_t lfn_checksum = 0;
int lfn_entries;
int lfn_entry = 0;
uint32_t empty_space_offset = 0;
uint32_t empty_space_entry = 0;
116cc5: c7 45 b4 00 00 00 00 movl $0x0,-0x4c(%ebp)
fat_pos_t lfn_start;
bool lfn_matched = false;
uint8_t lfn_checksum = 0;
int lfn_entries;
int lfn_entry = 0;
uint32_t empty_space_offset = 0;
116ccc: c7 45 b8 00 00 00 00 movl $0x0,-0x48(%ebp)
uint32_t bts2rd = 0;
fat_pos_t lfn_start;
bool lfn_matched = false;
uint8_t lfn_checksum = 0;
int lfn_entries;
int lfn_entry = 0;
116cd3: 31 ff xor %edi,%edi
uint32_t dir_offset = 0;
uint32_t dir_entry = 0;
uint32_t bts2rd = 0;
fat_pos_t lfn_start;
bool lfn_matched = false;
uint8_t lfn_checksum = 0;
116cd5: c6 45 ac 00 movb $0x0,-0x54(%ebp)
msdos_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t dir_offset = 0;
uint32_t dir_entry = 0;
uint32_t bts2rd = 0;
fat_pos_t lfn_start;
bool lfn_matched = false;
116cd9: 31 db xor %ebx,%ebx
char *name_dir_entry
)
{
ssize_t ret = 0;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t dir_offset = 0;
116cdb: c7 45 c8 00 00 00 00 movl $0x0,-0x38(%ebp)
/*
* Remainder is not empty so is this entry empty ?
*/
empty_space_count++;
if (empty_space_count == (lfn_entries + 1))
116ce2: 8b 45 c0 mov -0x40(%ebp),%eax
116ce5: 40 inc %eax
116ce6: 89 45 9c mov %eax,-0x64(%ebp)
/*
* Scan the directory seeing if the file is present. While
* doing this see if a suitable location can be found to
* create the entry if the name is not found.
*/
while ((ret = fat_file_read(&fs_info->fat, fat_fd, (dir_offset * bts2rd),
116ce9: e9 92 02 00 00 jmp 116f80 <msdos_find_name_in_fat_file+0x37d>
bool remainder_empty = false;
#if MSDOS_FIND_PRINT
printf ("MSFS:[2] dir_offset:%li\n", dir_offset);
#endif
if (ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
116cee: 83 f8 1f cmp $0x1f,%eax
116cf1: 7f 05 jg 116cf8 <msdos_find_name_in_fat_file+0xf5><== ALWAYS TAKEN
116cf3: e9 c8 05 00 00 jmp 1172c0 <msdos_find_name_in_fat_file+0x6bd><== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
assert(ret == bts2rd);
116cf8: 3b 45 d0 cmp -0x30(%ebp),%eax
116cfb: 74 19 je 116d16 <msdos_find_name_in_fat_file+0x113><== ALWAYS TAKEN
116cfd: 68 a0 8b 12 00 push $0x128ba0 <== NOT EXECUTED
116d02: 68 cc 8b 12 00 push $0x128bcc <== NOT EXECUTED
116d07: 68 f4 03 00 00 push $0x3f4 <== NOT EXECUTED
116d0c: 68 31 8b 12 00 push $0x128b31 <== NOT EXECUTED
116d11: e8 a6 c9 ff ff call 1136bc <__assert_func> <== NOT EXECUTED
116d16: 8b 55 cc mov -0x34(%ebp),%edx
116d19: 8b b2 94 00 00 00 mov 0x94(%edx),%esi
/* have to look at the DIR_NAME as "raw" 8-bit data */
for (dir_entry = 0;
dir_entry < bts2rd;
dir_entry += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
{
char* entry = (char*) fs_info->cl_buf + dir_entry;
116d1f: c7 45 c4 00 00 00 00 movl $0x0,-0x3c(%ebp)
/*
* See if the entry is empty or the remainder of the directory is
* empty ? Localise to make the code read better.
*/
bool entry_empty = (*MSDOS_DIR_ENTRY_TYPE(entry) ==
116d26: 8a 06 mov (%esi),%al
* to here and write the long file name if this is the start of
* a series of empty entries. If empty_space_count is 0 then
* we are currently not inside an empty series of entries. It
* is a count of empty entries.
*/
if (empty_space_count == 0)
116d28: 83 7d d4 00 cmpl $0x0,-0x2c(%ebp)
116d2c: 75 0c jne 116d3a <msdos_find_name_in_fat_file+0x137>
116d2e: 8b 4d c4 mov -0x3c(%ebp),%ecx
116d31: 89 4d b4 mov %ecx,-0x4c(%ebp)
116d34: 8b 55 c8 mov -0x38(%ebp),%edx
116d37: 89 55 b8 mov %edx,-0x48(%ebp)
{
empty_space_entry = dir_entry;
empty_space_offset = dir_offset;
}
if (remainder_empty)
116d3a: 84 c0 test %al,%al
116d3c: 75 31 jne 116d6f <msdos_find_name_in_fat_file+0x16c>
#endif
/*
* If just looking and there is no more entries in the
* directory - return name-not-found
*/
if (!create_node)
116d3e: 80 7d bf 00 cmpb $0x0,-0x41(%ebp)
116d42: 75 0a jne 116d4e <msdos_find_name_in_fat_file+0x14b>
return MSDOS_NAME_NOT_FOUND_ERR;
116d44: bb 01 7d 00 00 mov $0x7d01,%ebx
116d49: e9 b3 05 00 00 jmp 117301 <msdos_find_name_in_fat_file+0x6fe>
* Lets go and write the directory entries. If we have not found
* any available space add the remaining number of entries to any that
* we may have already found that are just before this entry. If more
* are needed FAT_EOF is returned by the read and we extend the file.
*/
if (!empty_space_found)
116d4e: 80 7d bd 00 cmpb $0x0,-0x43(%ebp)
116d52: 0f 85 58 02 00 00 jne 116fb0 <msdos_find_name_in_fat_file+0x3ad>
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
bts2rd = fat_fd->fat_file_size;
else
bts2rd = fs_info->fat.vol.bpc;
entries_per_block = bts2rd / MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
116d58: 8b 45 d0 mov -0x30(%ebp),%eax
116d5b: c1 e8 05 shr $0x5,%eax
* are needed FAT_EOF is returned by the read and we extend the file.
*/
if (!empty_space_found)
{
empty_space_count +=
entries_per_block - (dir_entry / MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
116d5e: 01 45 d4 add %eax,-0x2c(%ebp)
116d61: 8b 45 c4 mov -0x3c(%ebp),%eax
116d64: c1 e8 05 shr $0x5,%eax
* we may have already found that are just before this entry. If more
* are needed FAT_EOF is returned by the read and we extend the file.
*/
if (!empty_space_found)
{
empty_space_count +=
116d67: 29 45 d4 sub %eax,-0x2c(%ebp)
116d6a: e9 41 02 00 00 jmp 116fb0 <msdos_find_name_in_fat_file+0x3ad>
printf ("MSFS:[3.2] esf:%i esc%i\n", empty_space_found, empty_space_count);
#endif
}
break;
}
else if (entry_empty)
116d6f: 3c e5 cmp $0xe5,%al
116d71: 75 1e jne 116d91 <msdos_find_name_in_fat_file+0x18e>
{
if (create_node)
116d73: 80 7d bf 00 cmpb $0x0,-0x41(%ebp)
116d77: 0f 84 ea 01 00 00 je 116f67 <msdos_find_name_in_fat_file+0x364>
{
/*
* Remainder is not empty so is this entry empty ?
*/
empty_space_count++;
116d7d: ff 45 d4 incl -0x2c(%ebp)
if (empty_space_count == (lfn_entries + 1))
116d80: 8b 4d 9c mov -0x64(%ebp),%ecx
116d83: 39 4d d4 cmp %ecx,-0x2c(%ebp)
116d86: 0f 85 db 01 00 00 jne 116f67 <msdos_find_name_in_fat_file+0x364>
116d8c: e9 d2 01 00 00 jmp 116f63 <msdos_find_name_in_fat_file+0x360>
* A valid entry so handle it.
*
* If empty space has not been found we need to start the
* count again.
*/
if (create_node && !empty_space_found)
116d91: 80 7d bd 00 cmpb $0x0,-0x43(%ebp)
116d95: 75 14 jne 116dab <msdos_find_name_in_fat_file+0x1a8><== NEVER TAKEN
116d97: 80 7d bf 00 cmpb $0x0,-0x41(%ebp)
116d9b: 74 0e je 116dab <msdos_find_name_in_fat_file+0x1a8>
{
empty_space_entry = 0;
empty_space_count = 0;
116d9d: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)
* If empty space has not been found we need to start the
* count again.
*/
if (create_node && !empty_space_found)
{
empty_space_entry = 0;
116da4: c7 45 b4 00 00 00 00 movl $0x0,-0x4c(%ebp)
/*
* Check the attribute to see if the entry is for a long
* file name.
*/
if ((*MSDOS_DIR_ATTR(entry) & MSDOS_ATTR_LFN_MASK) ==
116dab: 8a 56 0b mov 0xb(%esi),%dl
116dae: 83 e2 3f and $0x3f,%edx
116db1: 80 fa 0f cmp $0xf,%dl
116db4: 0f 85 d6 00 00 00 jne 116e90 <msdos_find_name_in_fat_file+0x28d>
#endif
/*
* If we are not already processing a LFN see if this is
* the first entry of a LFN ?
*/
if (lfn_start.cln == FAT_FILE_SHORT_NAME)
116dba: 83 7d e0 ff cmpl $0xffffffff,-0x20(%ebp)
116dbe: 75 2b jne 116deb <msdos_find_name_in_fat_file+0x1e8>
{
lfn_matched = false;
116dc0: 31 db xor %ebx,%ebx
/*
* The first entry must have the last long entry
* flag set.
*/
if ((*MSDOS_DIR_ENTRY_TYPE(entry) &
116dc2: a8 40 test $0x40,%al
116dc4: 0f 84 9d 01 00 00 je 116f67 <msdos_find_name_in_fat_file+0x364>
* entry match the number we expect for this
* file name. Note we do not know the number of
* characters in the entry so this is check further
* on when the characters are checked.
*/
if (lfn_entries != (*MSDOS_DIR_ENTRY_TYPE(entry) &
116dca: 83 e0 3f and $0x3f,%eax
116dcd: 39 45 c0 cmp %eax,-0x40(%ebp)
116dd0: 0f 85 91 01 00 00 jne 116f67 <msdos_find_name_in_fat_file+0x364>
continue;
/*
* Get the checksum of the short entry.
*/
lfn_start.cln = dir_offset;
116dd6: 8b 55 c8 mov -0x38(%ebp),%edx
116dd9: 89 55 e0 mov %edx,-0x20(%ebp)
lfn_start.ofs = dir_entry;
116ddc: 8b 4d c4 mov -0x3c(%ebp),%ecx
116ddf: 89 4d e4 mov %ecx,-0x1c(%ebp)
lfn_entry = lfn_entries;
lfn_checksum = *MSDOS_DIR_LFN_CHECKSUM(entry);
116de2: 8a 56 0d mov 0xd(%esi),%dl
116de5: 88 55 ac mov %dl,-0x54(%ebp)
116de8: 8b 7d c0 mov -0x40(%ebp),%edi
* If the entry number or the check sum do not match
* forget this series of long directory entries. These
* could be orphaned entries depending on the history
* of the disk.
*/
if ((lfn_entry != (*MSDOS_DIR_ENTRY_TYPE(entry) &
116deb: 8a 06 mov (%esi),%al
116ded: 83 e0 3f and $0x3f,%eax
116df0: 39 c7 cmp %eax,%edi
116df2: 75 08 jne 116dfc <msdos_find_name_in_fat_file+0x1f9><== NEVER TAKEN
MSDOS_LAST_LONG_ENTRY_MASK)) ||
116df4: 8a 4d ac mov -0x54(%ebp),%cl
116df7: 3a 4e 0d cmp 0xd(%esi),%cl
116dfa: 74 0c je 116e08 <msdos_find_name_in_fat_file+0x205><== ALWAYS TAKEN
(lfn_checksum != *MSDOS_DIR_LFN_CHECKSUM(entry)))
{
#if MSDOS_FIND_PRINT
printf ("MSFS:[4.4] no match\n");
#endif
lfn_start.cln = FAT_FILE_SHORT_NAME;
116dfc: c7 45 e0 ff ff ff ff movl $0xffffffff,-0x20(%ebp) <== NOT EXECUTED
continue;
116e03: e9 5f 01 00 00 jmp 116f67 <msdos_find_name_in_fat_file+0x364><== NOT EXECUTED
}
lfn_entry--;
116e08: 8d 5f ff lea -0x1(%edi),%ebx
116e0b: 89 5d a8 mov %ebx,-0x58(%ebp)
o = lfn_entry * MSDOS_LFN_LEN_PER_ENTRY;
116e0e: 6b c3 0d imul $0xd,%ebx,%eax
116e11: 89 45 94 mov %eax,-0x6c(%ebp)
* RC_OK on success, or error code if error occured (errno set
* appropriately)
*
*/
#define MSDOS_FIND_PRINT 0
int msdos_find_name_in_fat_file(
116e14: 8d 56 01 lea 0x1(%esi),%edx
p = entry + 1;
#if MSDOS_FIND_PRINT
printf ("MSFS:[5] lfne:%i\n", lfn_entry);
#endif
for (i = 0; i < MSDOS_LFN_LEN_PER_ENTRY; i++)
116e17: 31 c0 xor %eax,%eax
* RC_OK on success, or error code if error occured (errno set
* appropriately)
*
*/
#define MSDOS_FIND_PRINT 0
int msdos_find_name_in_fat_file(
116e19: 8b 5d 14 mov 0x14(%ebp),%ebx
116e1c: 03 5d 94 add -0x6c(%ebp),%ebx
116e1f: 89 5d a0 mov %ebx,-0x60(%ebp)
{
#if MSDOS_FIND_PRINT > 1
printf ("MSFS:[6] o:%i i:%i *p:%c(%02x) name[o + i]:%c(%02x)\n",
o, i, *p, *p, name[o + i], name[o + i]);
#endif
if (*p == '\0')
116e22: 8a 0a mov (%edx),%cl
116e24: 88 4d be mov %cl,-0x42(%ebp)
116e27: 84 c9 test %cl,%cl
116e29: 75 0f jne 116e3a <msdos_find_name_in_fat_file+0x237>
/*
* If this is the first entry, ie the last part of the
* long file name and the length does not match then
* the file names do not match.
*/
if (((lfn_entry + 1) == lfn_entries) &&
116e2b: 3b 7d c0 cmp -0x40(%ebp),%edi
116e2e: 75 47 jne 116e77 <msdos_find_name_in_fat_file+0x274><== NEVER TAKEN
((o + i) != name_len))
116e30: 03 45 94 add -0x6c(%ebp),%eax
/*
* If this is the first entry, ie the last part of the
* long file name and the length does not match then
* the file names do not match.
*/
if (((lfn_entry + 1) == lfn_entries) &&
116e33: 3b 45 18 cmp 0x18(%ebp),%eax
116e36: 74 3f je 116e77 <msdos_find_name_in_fat_file+0x274><== ALWAYS TAKEN
116e38: eb 15 jmp 116e4f <msdos_find_name_in_fat_file+0x24c><== NOT EXECUTED
* RC_OK on success, or error code if error occured (errno set
* appropriately)
*
*/
#define MSDOS_FIND_PRINT 0
int msdos_find_name_in_fat_file(
116e3a: 8b 4d 94 mov -0x6c(%ebp),%ecx
116e3d: 01 c1 add %eax,%ecx
((o + i) != name_len))
lfn_start.cln = FAT_FILE_SHORT_NAME;
break;
}
if (((o + i) >= name_len) || (*p != name[o + i]))
116e3f: 3b 4d 18 cmp 0x18(%ebp),%ecx
116e42: 7d 0b jge 116e4f <msdos_find_name_in_fat_file+0x24c>
116e44: 8a 5d be mov -0x42(%ebp),%bl
116e47: 8b 4d a0 mov -0x60(%ebp),%ecx
116e4a: 3a 1c 01 cmp (%ecx,%eax,1),%bl
116e4d: 74 09 je 116e58 <msdos_find_name_in_fat_file+0x255>
{
lfn_start.cln = FAT_FILE_SHORT_NAME;
116e4f: c7 45 e0 ff ff ff ff movl $0xffffffff,-0x20(%ebp)
break;
116e56: eb 1f jmp 116e77 <msdos_find_name_in_fat_file+0x274>
}
switch (i)
116e58: 83 f8 04 cmp $0x4,%eax
116e5b: 74 07 je 116e64 <msdos_find_name_in_fat_file+0x261>
116e5d: 83 f8 0a cmp $0xa,%eax
116e60: 75 0c jne 116e6e <msdos_find_name_in_fat_file+0x26b>
116e62: eb 05 jmp 116e69 <msdos_find_name_in_fat_file+0x266>
{
case 4:
p += 5;
116e64: 83 c2 05 add $0x5,%edx
break;
116e67: eb 08 jmp 116e71 <msdos_find_name_in_fat_file+0x26e>
case 10:
p += 4;
116e69: 83 c2 04 add $0x4,%edx
break;
116e6c: eb 03 jmp 116e71 <msdos_find_name_in_fat_file+0x26e>
default:
p += 2;
116e6e: 83 c2 02 add $0x2,%edx
p = entry + 1;
#if MSDOS_FIND_PRINT
printf ("MSFS:[5] lfne:%i\n", lfn_entry);
#endif
for (i = 0; i < MSDOS_LFN_LEN_PER_ENTRY; i++)
116e71: 40 inc %eax
116e72: 83 f8 0d cmp $0xd,%eax
116e75: 75 ab jne 116e22 <msdos_find_name_in_fat_file+0x21f>
p += 2;
break;
}
}
lfn_matched = ((lfn_entry == 0) &&
116e77: 31 db xor %ebx,%ebx
116e79: 83 7d a8 00 cmpl $0x0,-0x58(%ebp)
116e7d: 75 09 jne 116e88 <msdos_find_name_in_fat_file+0x285>
116e7f: 31 db xor %ebx,%ebx
116e81: 83 7d e0 ff cmpl $0xffffffff,-0x20(%ebp)
116e85: 0f 95 c3 setne %bl
#endif
lfn_start.cln = FAT_FILE_SHORT_NAME;
continue;
}
lfn_entry--;
116e88: 8b 7d a8 mov -0x58(%ebp),%edi
116e8b: e9 d7 00 00 00 jmp 116f67 <msdos_find_name_in_fat_file+0x364>
* If a LFN has been found and it matched check the
* entries have all been found and the checksum is
* correct. If this is the case return the short file
* name entry.
*/
if (lfn_matched)
116e90: 84 db test %bl,%bl
116e92: 0f 84 5a 04 00 00 je 1172f2 <msdos_find_name_in_fat_file+0x6ef>
116e98: 31 c9 xor %ecx,%ecx
116e9a: 31 d2 xor %edx,%edx
uint8_t cs = 0;
uint8_t* p = (uint8_t*) MSDOS_DIR_NAME(entry);
int i;
for (i = 0; i < MSDOS_SHORT_NAME_LEN; i++, p++)
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + *p;
116e9c: 88 d0 mov %dl,%al
116e9e: 83 e0 01 and $0x1,%eax
116ea1: f7 d8 neg %eax
116ea3: 83 e0 80 and $0xffffff80,%eax
116ea6: d0 ea shr %dl
116ea8: 02 14 0e add (%esi,%ecx,1),%dl
116eab: 01 c2 add %eax,%edx
{
uint8_t cs = 0;
uint8_t* p = (uint8_t*) MSDOS_DIR_NAME(entry);
int i;
for (i = 0; i < MSDOS_SHORT_NAME_LEN; i++, p++)
116ead: 41 inc %ecx
116eae: 83 f9 0b cmp $0xb,%ecx
116eb1: 75 e9 jne 116e9c <msdos_find_name_in_fat_file+0x299>
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + *p;
if (lfn_entry || (lfn_checksum != cs))
116eb3: 38 55 ac cmp %dl,-0x54(%ebp)
116eb6: 0f 85 36 04 00 00 jne 1172f2 <msdos_find_name_in_fat_file+0x6ef><== NEVER TAKEN
116ebc: 85 ff test %edi,%edi
116ebe: 0f 85 2e 04 00 00 jne 1172f2 <msdos_find_name_in_fat_file+0x6ef><== NEVER TAKEN
#endif
/*
* We get the entry we looked for - fill the position
* structure and the 32 bytes of the short entry
*/
int rc = fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
116ec4: 83 ec 0c sub $0xc,%esp
116ec7: ff 75 20 pushl 0x20(%ebp)
116eca: ff 75 b0 pushl -0x50(%ebp)
116ecd: 6a 01 push $0x1
116ecf: ff 75 0c pushl 0xc(%ebp)
116ed2: ff 75 cc pushl -0x34(%ebp)
116ed5: e8 04 ae ff ff call 111cde <fat_file_ioctl>
116eda: 89 c3 mov %eax,%ebx
dir_offset * bts2rd,
&dir_pos->sname.cln);
if (rc != RC_OK)
116edc: 83 c4 20 add $0x20,%esp
116edf: 85 c0 test %eax,%eax
116ee1: 74 20 je 116f03 <msdos_find_name_in_fat_file+0x300><== ALWAYS TAKEN
116ee3: e9 19 04 00 00 jmp 117301 <msdos_find_name_in_fat_file+0x6fe><== NOT EXECUTED
* match a long file name against a short file name because
* a long file name that generates a matching short file
* name is not a long file name.
*/
if (lfn_matched ||
((name_type == MSDOS_NAME_SHORT) &&
116ee8: 83 7d e0 ff cmpl $0xffffffff,-0x20(%ebp)
116eec: 75 6a jne 116f58 <msdos_find_name_in_fat_file+0x355><== NEVER TAKEN
(lfn_start.cln == FAT_FILE_SHORT_NAME) &&
(memcmp(MSDOS_DIR_NAME(entry),
116eee: 50 push %eax
116eef: 6a 0b push $0xb
116ef1: ff 75 24 pushl 0x24(%ebp)
116ef4: 56 push %esi
116ef5: e8 de 31 00 00 call 11a0d8 <memcmp>
116efa: 83 c4 10 add $0x10,%esp
* a long file name that generates a matching short file
* name is not a long file name.
*/
if (lfn_matched ||
((name_type == MSDOS_NAME_SHORT) &&
(lfn_start.cln == FAT_FILE_SHORT_NAME) &&
116efd: 85 c0 test %eax,%eax
116eff: 75 57 jne 116f58 <msdos_find_name_in_fat_file+0x355>
116f01: eb c1 jmp 116ec4 <msdos_find_name_in_fat_file+0x2c1>
dir_offset * bts2rd,
&dir_pos->sname.cln);
if (rc != RC_OK)
return rc;
dir_pos->sname.ofs = dir_entry;
116f03: 8b 55 c4 mov -0x3c(%ebp),%edx
116f06: 8b 45 20 mov 0x20(%ebp),%eax
116f09: 89 50 04 mov %edx,0x4(%eax)
if (lfn_start.cln != FAT_FILE_SHORT_NAME)
116f0c: 8b 45 e0 mov -0x20(%ebp),%eax
116f0f: 83 f8 ff cmp $0xffffffff,%eax
116f12: 75 1e jne 116f32 <msdos_find_name_in_fat_file+0x32f>
&lfn_start.cln);
if (rc != RC_OK)
return rc;
}
dir_pos->lname.cln = lfn_start.cln;
116f14: 8b 45 e0 mov -0x20(%ebp),%eax
116f17: 8b 4d 20 mov 0x20(%ebp),%ecx
116f1a: 89 41 08 mov %eax,0x8(%ecx)
dir_pos->lname.ofs = lfn_start.ofs;
116f1d: 8b 45 e4 mov -0x1c(%ebp),%eax
116f20: 89 41 0c mov %eax,0xc(%ecx)
memcpy(name_dir_entry, entry,
116f23: b9 08 00 00 00 mov $0x8,%ecx
116f28: 8b 7d 24 mov 0x24(%ebp),%edi
116f2b: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
116f2d: e9 cf 03 00 00 jmp 117301 <msdos_find_name_in_fat_file+0x6fe>
dir_pos->sname.ofs = dir_entry;
if (lfn_start.cln != FAT_FILE_SHORT_NAME)
{
rc = fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
116f32: 83 ec 0c sub $0xc,%esp
116f35: 8d 55 e0 lea -0x20(%ebp),%edx
116f38: 52 push %edx
116f39: 0f af 45 d0 imul -0x30(%ebp),%eax
116f3d: 50 push %eax
116f3e: 6a 01 push $0x1
116f40: ff 75 0c pushl 0xc(%ebp)
116f43: ff 75 cc pushl -0x34(%ebp)
116f46: e8 93 ad ff ff call 111cde <fat_file_ioctl>
lfn_start.cln * bts2rd,
&lfn_start.cln);
if (rc != RC_OK)
116f4b: 83 c4 20 add $0x20,%esp
116f4e: 85 c0 test %eax,%eax
116f50: 0f 85 93 03 00 00 jne 1172e9 <msdos_find_name_in_fat_file+0x6e6><== NEVER TAKEN
116f56: eb bc jmp 116f14 <msdos_find_name_in_fat_file+0x311>
memcpy(name_dir_entry, entry,
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
return RC_OK;
}
lfn_start.cln = FAT_FILE_SHORT_NAME;
116f58: c7 45 e0 ff ff ff ff movl $0xffffffff,-0x20(%ebp)
lfn_matched = false;
116f5f: 31 db xor %ebx,%ebx
116f61: eb 04 jmp 116f67 <msdos_find_name_in_fat_file+0x364>
* Remainder is not empty so is this entry empty ?
*/
empty_space_count++;
if (empty_space_count == (lfn_entries + 1))
empty_space_found = true;
116f63: c6 45 bd 01 movb $0x1,-0x43(%ebp)
assert(ret == bts2rd);
/* have to look at the DIR_NAME as "raw" 8-bit data */
for (dir_entry = 0;
dir_entry < bts2rd;
dir_entry += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
116f67: 83 45 c4 20 addl $0x20,-0x3c(%ebp)
116f6b: 83 c6 20 add $0x20,%esi
rtems_set_errno_and_return_minus_one(EIO);
assert(ret == bts2rd);
/* have to look at the DIR_NAME as "raw" 8-bit data */
for (dir_entry = 0;
116f6e: 8b 4d d0 mov -0x30(%ebp),%ecx
116f71: 39 4d c4 cmp %ecx,-0x3c(%ebp)
116f74: 0f 82 ac fd ff ff jb 116d26 <msdos_find_name_in_fat_file+0x123><== ALWAYS TAKEN
}
if (remainder_empty)
break;
dir_offset++;
116f7a: ff 45 c8 incl -0x38(%ebp) <== NOT EXECUTED
116f7d: 01 4d b0 add %ecx,-0x50(%ebp) <== NOT EXECUTED
/*
* Scan the directory seeing if the file is present. While
* doing this see if a suitable location can be found to
* create the entry if the name is not found.
*/
while ((ret = fat_file_read(&fs_info->fat, fat_fd, (dir_offset * bts2rd),
116f80: 83 ec 0c sub $0xc,%esp
116f83: 8b 45 cc mov -0x34(%ebp),%eax
116f86: ff b0 94 00 00 00 pushl 0x94(%eax)
116f8c: ff 75 d0 pushl -0x30(%ebp)
116f8f: ff 75 b0 pushl -0x50(%ebp)
116f92: ff 75 0c pushl 0xc(%ebp)
116f95: 50 push %eax
116f96: e8 50 aa ff ff call 1119eb <fat_file_read>
116f9b: 83 c4 20 add $0x20,%esp
116f9e: 85 c0 test %eax,%eax
116fa0: 0f 85 48 fd ff ff jne 116cee <msdos_find_name_in_fat_file+0xeb><== ALWAYS TAKEN
}
/*
* If we are not to create the entry return a not found error.
*/
if (!create_node)
116fa6: 80 7d bf 00 cmpb $0x0,-0x41(%ebp) <== NOT EXECUTED
116faa: 0f 84 94 fd ff ff je 116d44 <msdos_find_name_in_fat_file+0x141><== NOT EXECUTED
* data to place in each long file name entry. First set the short
* file name to the slot of the SFN entry. This will mean no clashes
* in this directory.
*/
lfn_checksum = 0;
if (name_type == MSDOS_NAME_LONG)
116fb0: 83 7d 1c 02 cmpl $0x2,0x1c(%ebp)
116fb4: 75 6a jne 117020 <msdos_find_name_in_fat_file+0x41d>
{
int slot = (((empty_space_offset * bts2rd) + empty_space_entry) /
116fb6: 8b 45 b8 mov -0x48(%ebp),%eax
116fb9: 0f af 45 d0 imul -0x30(%ebp),%eax
116fbd: 03 45 b4 add -0x4c(%ebp),%eax
116fc0: c1 e8 05 shr $0x5,%eax
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE) + lfn_entries + 1;
116fc3: 8b 4d c0 mov -0x40(%ebp),%ecx
116fc6: 8d 54 01 01 lea 0x1(%ecx,%eax,1),%edx
{
static const char* hex = "0123456789ABCDEF";
char* c = MSDOS_DIR_NAME(sfn);
int i;
for (i = 0; i < 2; i++, c++)
if ((*c == ' ') || (*c == '.'))
116fca: 8b 5d 24 mov 0x24(%ebp),%ebx
116fcd: 8a 03 mov (%ebx),%al
116fcf: 3c 2e cmp $0x2e,%al
116fd1: 74 04 je 116fd7 <msdos_find_name_in_fat_file+0x3d4><== NEVER TAKEN
116fd3: 3c 20 cmp $0x20,%al
116fd5: 75 06 jne 116fdd <msdos_find_name_in_fat_file+0x3da>
*c = '_';
116fd7: 8b 5d 24 mov 0x24(%ebp),%ebx
116fda: c6 03 5f movb $0x5f,(%ebx)
{
static const char* hex = "0123456789ABCDEF";
char* c = MSDOS_DIR_NAME(sfn);
int i;
for (i = 0; i < 2; i++, c++)
if ((*c == ' ') || (*c == '.'))
116fdd: 8b 5d 24 mov 0x24(%ebp),%ebx
116fe0: 8a 43 01 mov 0x1(%ebx),%al
116fe3: 3c 2e cmp $0x2e,%al
116fe5: 74 04 je 116feb <msdos_find_name_in_fat_file+0x3e8><== NEVER TAKEN
116fe7: 3c 20 cmp $0x20,%al
116fe9: 75 07 jne 116ff2 <msdos_find_name_in_fat_file+0x3ef>
*c = '_';
116feb: 8b 5d 24 mov 0x24(%ebp),%ebx
116fee: c6 43 01 5f movb $0x5f,0x1(%ebx)
msdos_short_name_hex(char* sfn, int num)
{
static const char* hex = "0123456789ABCDEF";
char* c = MSDOS_DIR_NAME(sfn);
int i;
for (i = 0; i < 2; i++, c++)
116ff2: 8b 45 24 mov 0x24(%ebp),%eax
116ff5: 83 c0 02 add $0x2,%eax
116ff8: b9 0c 00 00 00 mov $0xc,%ecx
if ((*c == ' ') || (*c == '.'))
*c = '_';
for (i = 0; i < 4; i++, c++)
*c = hex[(num >> ((3 - i) * 4)) & 0xf];
116ffd: 89 d3 mov %edx,%ebx
116fff: d3 fb sar %cl,%ebx
117001: 83 e3 0f and $0xf,%ebx
117004: 8a 9b d0 81 12 00 mov 0x1281d0(%ebx),%bl
11700a: 88 18 mov %bl,(%eax)
char* c = MSDOS_DIR_NAME(sfn);
int i;
for (i = 0; i < 2; i++, c++)
if ((*c == ' ') || (*c == '.'))
*c = '_';
for (i = 0; i < 4; i++, c++)
11700c: 40 inc %eax
11700d: 83 e9 04 sub $0x4,%ecx
117010: 83 f9 fc cmp $0xfffffffc,%ecx
117013: 75 e8 jne 116ffd <msdos_find_name_in_fat_file+0x3fa>
*c = hex[(num >> ((3 - i) * 4)) & 0xf];
*c++ = '~';
117015: 8b 5d 24 mov 0x24(%ebp),%ebx
117018: c6 43 06 7e movb $0x7e,0x6(%ebx)
*c++ = '1';
11701c: c6 43 07 31 movb $0x31,0x7(%ebx)
* If a long file name calculate the checksum of the short file name
* data to place in each long file name entry. First set the short
* file name to the slot of the SFN entry. This will mean no clashes
* in this directory.
*/
lfn_checksum = 0;
117020: c6 45 bf 00 movb $0x0,-0x41(%ebp)
int slot = (((empty_space_offset * bts2rd) + empty_space_entry) /
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE) + lfn_entries + 1;
msdos_short_name_hex(MSDOS_DIR_NAME(name_dir_entry), slot);
}
if (lfn_entries)
117024: 83 7d c0 00 cmpl $0x0,-0x40(%ebp)
117028: 74 23 je 11704d <msdos_find_name_in_fat_file+0x44a>
11702a: 31 d2 xor %edx,%edx
{
uint8_t* p = (uint8_t*) MSDOS_DIR_NAME(name_dir_entry);
int i;
for (i = 0; i < 11; i++, p++)
lfn_checksum =
((lfn_checksum & 1) ? 0x80 : 0) + (lfn_checksum >> 1) + *p;
11702c: 8a 45 bf mov -0x41(%ebp),%al
11702f: 83 e0 01 and $0x1,%eax
if (lfn_entries)
{
uint8_t* p = (uint8_t*) MSDOS_DIR_NAME(name_dir_entry);
int i;
for (i = 0; i < 11; i++, p++)
lfn_checksum =
117032: f7 d8 neg %eax
117034: 83 e0 80 and $0xffffff80,%eax
117037: 8a 4d bf mov -0x41(%ebp),%cl
11703a: d0 e9 shr %cl
11703c: 8b 5d 24 mov 0x24(%ebp),%ebx
11703f: 02 0c 13 add (%ebx,%edx,1),%cl
117042: 01 c1 add %eax,%ecx
117044: 88 4d bf mov %cl,-0x41(%ebp)
if (lfn_entries)
{
uint8_t* p = (uint8_t*) MSDOS_DIR_NAME(name_dir_entry);
int i;
for (i = 0; i < 11; i++, p++)
117047: 42 inc %edx
117048: 83 fa 0b cmp $0xb,%edx
11704b: 75 df jne 11702c <msdos_find_name_in_fat_file+0x429>
* empty_space_count is a count of empty entries in the currently
* read cluster so if 0 there is no space. Note, dir_offset will
* be at the next cluster so we can just make empty_space_offset
* that value.
*/
if (empty_space_count == 0)
11704d: 83 7d d4 00 cmpl $0x0,-0x2c(%ebp)
117051: 74 0b je 11705e <msdos_find_name_in_fat_file+0x45b><== NEVER TAKEN
uint32_t empty_space_offset = 0;
uint32_t empty_space_entry = 0;
uint32_t empty_space_count = 0;
bool empty_space_found = false;
uint32_t entries_per_block;
bool read_cluster = false;
117053: 8b 55 b8 mov -0x48(%ebp),%edx
117056: 39 55 c8 cmp %edx,-0x38(%ebp)
117059: 0f 95 c0 setne %al
11705c: eb 0f jmp 11706d <msdos_find_name_in_fat_file+0x46a>
* empty_space_count is a count of empty entries in the currently
* read cluster so if 0 there is no space. Note, dir_offset will
* be at the next cluster so we can just make empty_space_offset
* that value.
*/
if (empty_space_count == 0)
11705e: 8b 5d c8 mov -0x38(%ebp),%ebx <== NOT EXECUTED
117061: 89 5d b8 mov %ebx,-0x48(%ebp) <== NOT EXECUTED
{
read_cluster = true;
117064: b0 01 mov $0x1,%al <== NOT EXECUTED
empty_space_offset = dir_offset;
empty_space_entry = 0;
117066: c7 45 b4 00 00 00 00 movl $0x0,-0x4c(%ebp) <== NOT EXECUTED
read_cluster = true;
/*
* Handle the entry writes.
*/
lfn_start.cln = lfn_start.ofs = FAT_FILE_SHORT_NAME;
11706d: c7 45 e4 ff ff ff ff movl $0xffffffff,-0x1c(%ebp)
117074: c7 45 e0 ff ff ff ff movl $0xffffffff,-0x20(%ebp)
11707b: 8b 5d b8 mov -0x48(%ebp),%ebx
11707e: 0f af 5d d0 imul -0x30(%ebp),%ebx
* RC_OK on success, or error code if error occured (errno set
* appropriately)
*
*/
#define MSDOS_FIND_PRINT 0
int msdos_find_name_in_fat_file(
117082: 6b 55 c0 0d imul $0xd,-0x40(%ebp),%edx
117086: 03 55 14 add 0x14(%ebp),%edx
117089: 89 55 b0 mov %edx,-0x50(%ebp)
/*
* Handle the entry writes.
*/
lfn_start.cln = lfn_start.ofs = FAT_FILE_SHORT_NAME;
lfn_entry = 0;
11708c: c7 45 c8 00 00 00 00 movl $0x0,-0x38(%ebp)
length, lfn_entry);
#endif
/*
* Time to write the short file name entry.
*/
if (lfn_entry == (lfn_entries + 1))
117093: 8b 55 c0 mov -0x40(%ebp),%edx
117096: 42 inc %edx
117097: 89 55 ac mov %edx,-0x54(%ebp)
#endif
/*
* The one more is the short entry.
*/
while (lfn_entry < (lfn_entries + 1))
11709a: e9 3a 02 00 00 jmp 1172d9 <msdos_find_name_in_fat_file+0x6d6>
{
int length = 0;
if (read_cluster)
11709f: 84 c0 test %al,%al
1170a1: 0f 84 a0 00 00 00 je 117147 <msdos_find_name_in_fat_file+0x544><== ALWAYS TAKEN
{
uint32_t new_length;
#if MSDOS_FIND_PRINT
printf ("MSFS:[9.1] eso:%li\n", empty_space_offset);
#endif
ret = fat_file_read(&fs_info->fat, fat_fd,
1170a7: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1170aa: 8b 4d cc mov -0x34(%ebp),%ecx <== NOT EXECUTED
1170ad: ff b1 94 00 00 00 pushl 0x94(%ecx) <== NOT EXECUTED
1170b3: ff 75 d0 pushl -0x30(%ebp) <== NOT EXECUTED
1170b6: 53 push %ebx <== NOT EXECUTED
1170b7: ff 75 0c pushl 0xc(%ebp) <== NOT EXECUTED
1170ba: 51 push %ecx <== NOT EXECUTED
1170bb: e8 2b a9 ff ff call 1119eb <fat_file_read> <== NOT EXECUTED
(empty_space_offset * bts2rd), bts2rd,
fs_info->cl_buf);
if (ret != bts2rd)
1170c0: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
1170c3: 3b 45 d0 cmp -0x30(%ebp),%eax <== NOT EXECUTED
1170c6: 74 7f je 117147 <msdos_find_name_in_fat_file+0x544><== NOT EXECUTED
{
if (ret != FAT_EOF)
1170c8: 85 c0 test %eax,%eax <== NOT EXECUTED
1170ca: 74 02 je 1170ce <msdos_find_name_in_fat_file+0x4cb><== NOT EXECUTED
1170cc: eb 66 jmp 117134 <msdos_find_name_in_fat_file+0x531><== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
#if MSDOS_FIND_PRINT
printf ("MSFS:[9.2] extending file:%li\n", empty_space_offset);
#endif
ret = fat_file_extend (&fs_info->fat, fat_fd, false,
1170ce: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1170d1: 8d 45 dc lea -0x24(%ebp),%eax <== NOT EXECUTED
1170d4: 50 push %eax <== NOT EXECUTED
1170d5: 53 push %ebx <== NOT EXECUTED
1170d6: 6a 00 push $0x0 <== NOT EXECUTED
1170d8: ff 75 0c pushl 0xc(%ebp) <== NOT EXECUTED
1170db: ff 75 cc pushl -0x34(%ebp) <== NOT EXECUTED
1170de: e8 81 ac ff ff call 111d64 <fat_file_extend> <== NOT EXECUTED
empty_space_offset * bts2rd, &new_length);
if (ret != RC_OK)
1170e3: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
1170e6: 85 c0 test %eax,%eax <== NOT EXECUTED
1170e8: 0f 85 fb 01 00 00 jne 1172e9 <msdos_find_name_in_fat_file+0x6e6><== NOT EXECUTED
return ret;
#if MSDOS_FIND_PRINT
printf ("MSFS:[9.3] extended: %d <-> %d\n", new_length, empty_space_offset * bts2rd);
#endif
if (new_length != (empty_space_offset * bts2rd))
1170ee: 39 5d dc cmp %ebx,-0x24(%ebp) <== NOT EXECUTED
1170f1: 74 02 je 1170f5 <msdos_find_name_in_fat_file+0x4f2><== NOT EXECUTED
1170f3: eb 3f jmp 117134 <msdos_find_name_in_fat_file+0x531><== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
memset(fs_info->cl_buf, 0, bts2rd);
1170f5: 8b 55 cc mov -0x34(%ebp),%edx <== NOT EXECUTED
1170f8: 8b 92 94 00 00 00 mov 0x94(%edx),%edx <== NOT EXECUTED
1170fe: 89 55 98 mov %edx,-0x68(%ebp) <== NOT EXECUTED
117101: 31 c0 xor %eax,%eax <== NOT EXECUTED
117103: 89 d7 mov %edx,%edi <== NOT EXECUTED
117105: 8b 4d d0 mov -0x30(%ebp),%ecx <== NOT EXECUTED
117108: f3 aa rep stos %al,%es:(%edi) <== NOT EXECUTED
ret = fat_file_write(&fs_info->fat, fat_fd,
11710a: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11710d: 8b 4d cc mov -0x34(%ebp),%ecx <== NOT EXECUTED
117110: ff b1 94 00 00 00 pushl 0x94(%ecx) <== NOT EXECUTED
117116: ff 75 d0 pushl -0x30(%ebp) <== NOT EXECUTED
117119: 53 push %ebx <== NOT EXECUTED
11711a: ff 75 0c pushl 0xc(%ebp) <== NOT EXECUTED
11711d: 51 push %ecx <== NOT EXECUTED
11711e: e8 5f ae ff ff call 111f82 <fat_file_write> <== NOT EXECUTED
empty_space_offset * bts2rd,
bts2rd, fs_info->cl_buf);
#if MSDOS_FIND_PRINT
printf ("MSFS:[9.4] clear write: %d\n", ret);
#endif
if (ret == -1)
117123: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
117126: 83 f8 ff cmp $0xffffffff,%eax <== NOT EXECUTED
117129: 0f 84 ba 01 00 00 je 1172e9 <msdos_find_name_in_fat_file+0x6e6><== NOT EXECUTED
return ret;
else if (ret != bts2rd)
11712f: 3b 45 d0 cmp -0x30(%ebp),%eax <== NOT EXECUTED
117132: 74 13 je 117147 <msdos_find_name_in_fat_file+0x544><== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
117134: e8 d7 26 00 00 call 119810 <__errno> <== NOT EXECUTED
117139: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
11713f: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
117142: e9 a2 01 00 00 jmp 1172e9 <msdos_find_name_in_fat_file+0x6e6><== NOT EXECUTED
* RC_OK on success, or error code if error occured (errno set
* appropriately)
*
*/
#define MSDOS_FIND_PRINT 0
int msdos_find_name_in_fat_file(
117147: 8b 55 c8 mov -0x38(%ebp),%edx
11714a: 42 inc %edx
11714b: c7 45 c4 00 00 00 00 movl $0x0,-0x3c(%ebp)
117152: 8a 45 c0 mov -0x40(%ebp),%al
117155: 40 inc %eax
117156: 88 45 be mov %al,-0x42(%ebp)
117159: e9 1b 01 00 00 jmp 117279 <msdos_find_name_in_fat_file+0x676>
for (dir_entry = empty_space_entry;
dir_entry < bts2rd;
dir_entry += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
{
char* entry = (char*) fs_info->cl_buf + dir_entry;
11715e: 8b 4d cc mov -0x34(%ebp),%ecx
117161: 8b 81 94 00 00 00 mov 0x94(%ecx),%eax
117167: 01 f0 add %esi,%eax
117169: 89 45 d4 mov %eax,-0x2c(%ebp)
char* p;
const char* n;
int i;
char fill = 0;
length += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
11716c: 83 45 c4 20 addl $0x20,-0x3c(%ebp)
lfn_entry++;
117170: 89 55 c8 mov %edx,-0x38(%ebp)
length, lfn_entry);
#endif
/*
* Time to write the short file name entry.
*/
if (lfn_entry == (lfn_entries + 1))
117173: 3b 55 ac cmp -0x54(%ebp),%edx
117176: 75 71 jne 1171e9 <msdos_find_name_in_fat_file+0x5e6>
{
/* get current cluster number */
int rc = fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
117178: 83 ec 0c sub $0xc,%esp
11717b: ff 75 20 pushl 0x20(%ebp)
11717e: 53 push %ebx
11717f: 6a 01 push $0x1
117181: ff 75 0c pushl 0xc(%ebp)
117184: 51 push %ecx
117185: e8 54 ab ff ff call 111cde <fat_file_ioctl>
empty_space_offset * bts2rd,
&dir_pos->sname.cln);
if (rc != RC_OK)
11718a: 83 c4 20 add $0x20,%esp
11718d: 85 c0 test %eax,%eax
11718f: 0f 85 54 01 00 00 jne 1172e9 <msdos_find_name_in_fat_file+0x6e6><== NEVER TAKEN
return rc;
dir_pos->sname.ofs = dir_entry;
117195: 8b 55 20 mov 0x20(%ebp),%edx
117198: 89 72 04 mov %esi,0x4(%edx)
if (lfn_start.cln != FAT_FILE_SHORT_NAME)
11719b: 8b 45 e0 mov -0x20(%ebp),%eax
11719e: 83 f8 ff cmp $0xffffffff,%eax
1171a1: 75 21 jne 1171c4 <msdos_find_name_in_fat_file+0x5c1>
&lfn_start.cln);
if (rc != RC_OK)
return rc;
}
dir_pos->lname.cln = lfn_start.cln;
1171a3: 8b 45 e0 mov -0x20(%ebp),%eax
1171a6: 8b 4d 20 mov 0x20(%ebp),%ecx
1171a9: 89 41 08 mov %eax,0x8(%ecx)
dir_pos->lname.ofs = lfn_start.ofs;
1171ac: 8b 45 e4 mov -0x1c(%ebp),%eax
1171af: 89 41 0c mov %eax,0xc(%ecx)
/* write new node entry */
memcpy (entry, (uint8_t *) name_dir_entry,
1171b2: b9 08 00 00 00 mov $0x8,%ecx
1171b7: 8b 7d d4 mov -0x2c(%ebp),%edi
1171ba: 8b 75 24 mov 0x24(%ebp),%esi
1171bd: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
break;
1171bf: e9 ca 00 00 00 jmp 11728e <msdos_find_name_in_fat_file+0x68b>
dir_pos->sname.ofs = dir_entry;
if (lfn_start.cln != FAT_FILE_SHORT_NAME)
{
rc = fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
1171c4: 83 ec 0c sub $0xc,%esp
1171c7: 8d 55 e0 lea -0x20(%ebp),%edx
1171ca: 52 push %edx
1171cb: 0f af 45 d0 imul -0x30(%ebp),%eax
1171cf: 50 push %eax
1171d0: 6a 01 push $0x1
1171d2: ff 75 0c pushl 0xc(%ebp)
1171d5: ff 75 cc pushl -0x34(%ebp)
1171d8: e8 01 ab ff ff call 111cde <fat_file_ioctl>
lfn_start.cln * bts2rd,
&lfn_start.cln);
if (rc != RC_OK)
1171dd: 83 c4 20 add $0x20,%esp
1171e0: 85 c0 test %eax,%eax
1171e2: 74 bf je 1171a3 <msdos_find_name_in_fat_file+0x5a0><== ALWAYS TAKEN
1171e4: e9 00 01 00 00 jmp 1172e9 <msdos_find_name_in_fat_file+0x6e6><== NOT EXECUTED
* This is a long file name and we need to write
* a long file name entry. See if this is the
* first entry written and if so remember the
* the location of the long file name.
*/
if (lfn_start.cln == FAT_FILE_SHORT_NAME)
1171e9: 83 7d e0 ff cmpl $0xffffffff,-0x20(%ebp)
1171ed: 75 09 jne 1171f8 <msdos_find_name_in_fat_file+0x5f5>
{
lfn_start.cln = empty_space_offset;
1171ef: 8b 45 b8 mov -0x48(%ebp),%eax
1171f2: 89 45 e0 mov %eax,-0x20(%ebp)
lfn_start.ofs = dir_entry;
1171f5: 89 75 e4 mov %esi,-0x1c(%ebp)
}
/*
* Clear the entry before loading the data.
*/
memset (entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
1171f8: b9 08 00 00 00 mov $0x8,%ecx
1171fd: 31 c0 xor %eax,%eax
1171ff: 8b 7d d4 mov -0x2c(%ebp),%edi
117202: f3 ab rep stos %eax,%es:(%edi)
*MSDOS_DIR_LFN_CHECKSUM(entry) = lfn_checksum;
117204: 8a 4d bf mov -0x41(%ebp),%cl
117207: 8b 45 d4 mov -0x2c(%ebp),%eax
11720a: 88 48 0d mov %cl,0xd(%eax)
p = entry + 1;
11720d: 40 inc %eax
* RC_OK on success, or error code if error occured (errno set
* appropriately)
*
*/
#define MSDOS_FIND_PRINT 0
int msdos_find_name_in_fat_file(
11720e: 6b ca 0d imul $0xd,%edx,%ecx
117211: 8b 7d b0 mov -0x50(%ebp),%edi
117214: 29 cf sub %ecx,%edi
{
char* entry = (char*) fs_info->cl_buf + dir_entry;
char* p;
const char* n;
int i;
char fill = 0;
117216: 31 f6 xor %esi,%esi
*MSDOS_DIR_LFN_CHECKSUM(entry) = lfn_checksum;
p = entry + 1;
n = name + (lfn_entries - lfn_entry) * MSDOS_LFN_LEN_PER_ENTRY;
for (i = 0; i < MSDOS_LFN_LEN_PER_ENTRY; i++)
117218: c7 45 a8 00 00 00 00 movl $0x0,-0x58(%ebp)
{
if (*n != 0)
11721f: 8a 0f mov (%edi),%cl
117221: 88 4d c8 mov %cl,-0x38(%ebp)
117224: 84 c9 test %cl,%cl
117226: 74 05 je 11722d <msdos_find_name_in_fat_file+0x62a>
{
*p = *n;
117228: 88 08 mov %cl,(%eax)
n++;
11722a: 47 inc %edi
11722b: eb 0c jmp 117239 <msdos_find_name_in_fat_file+0x636>
}
else
{
p [0] = fill;
11722d: 89 f1 mov %esi,%ecx
11722f: 88 08 mov %cl,(%eax)
p [1] = fill;
117231: 88 48 01 mov %cl,0x1(%eax)
fill = 0xff;
117234: be ff ff ff ff mov $0xffffffff,%esi
}
switch (i)
117239: 83 7d a8 04 cmpl $0x4,-0x58(%ebp)
11723d: 74 08 je 117247 <msdos_find_name_in_fat_file+0x644>
11723f: 83 7d a8 0a cmpl $0xa,-0x58(%ebp)
117243: 75 0c jne 117251 <msdos_find_name_in_fat_file+0x64e>
117245: eb 05 jmp 11724c <msdos_find_name_in_fat_file+0x649>
{
case 4:
p += 5;
117247: 83 c0 05 add $0x5,%eax
break;
11724a: eb 08 jmp 117254 <msdos_find_name_in_fat_file+0x651>
case 10:
p += 4;
11724c: 83 c0 04 add $0x4,%eax
break;
11724f: eb 03 jmp 117254 <msdos_find_name_in_fat_file+0x651>
default:
p += 2;
117251: 83 c0 02 add $0x2,%eax
*MSDOS_DIR_LFN_CHECKSUM(entry) = lfn_checksum;
p = entry + 1;
n = name + (lfn_entries - lfn_entry) * MSDOS_LFN_LEN_PER_ENTRY;
for (i = 0; i < MSDOS_LFN_LEN_PER_ENTRY; i++)
117254: ff 45 a8 incl -0x58(%ebp)
117257: 83 7d a8 0d cmpl $0xd,-0x58(%ebp)
11725b: 75 c2 jne 11721f <msdos_find_name_in_fat_file+0x61c>
* RC_OK on success, or error code if error occured (errno set
* appropriately)
*
*/
#define MSDOS_FIND_PRINT 0
int msdos_find_name_in_fat_file(
11725d: 8a 45 be mov -0x42(%ebp),%al
117260: 29 d0 sub %edx,%eax
break;
}
}
*MSDOS_DIR_ENTRY_TYPE(entry) = (lfn_entries - lfn_entry) + 1;
if (lfn_entry == 1)
117262: 83 fa 01 cmp $0x1,%edx
117265: 74 02 je 117269 <msdos_find_name_in_fat_file+0x666>
117267: eb 03 jmp 11726c <msdos_find_name_in_fat_file+0x669>
*MSDOS_DIR_ENTRY_TYPE(entry) |= MSDOS_LAST_LONG_ENTRY;
117269: 83 c8 40 or $0x40,%eax
11726c: 8b 4d d4 mov -0x2c(%ebp),%ecx
11726f: 88 01 mov %al,(%ecx)
*MSDOS_DIR_ATTR(entry) |= MSDOS_ATTR_LFN;
117271: 8b 45 d4 mov -0x2c(%ebp),%eax
117274: 80 48 0b 0f orb $0xf,0xb(%eax)
117278: 42 inc %edx
* RC_OK on success, or error code if error occured (errno set
* appropriately)
*
*/
#define MSDOS_FIND_PRINT 0
int msdos_find_name_in_fat_file(
117279: 8b 75 c4 mov -0x3c(%ebp),%esi
11727c: 03 75 b4 add -0x4c(%ebp),%esi
11727f: 8d 4a ff lea -0x1(%edx),%ecx
117282: 89 4d c8 mov %ecx,-0x38(%ebp)
#if MSDOS_FIND_PRINT
printf ("MSFS:[10] eso:%li\n", empty_space_offset);
#endif
for (dir_entry = empty_space_entry;
117285: 3b 75 d0 cmp -0x30(%ebp),%esi
117288: 0f 82 d0 fe ff ff jb 11715e <msdos_find_name_in_fat_file+0x55b><== ALWAYS TAKEN
if (lfn_entry == 1)
*MSDOS_DIR_ENTRY_TYPE(entry) |= MSDOS_LAST_LONG_ENTRY;
*MSDOS_DIR_ATTR(entry) |= MSDOS_ATTR_LFN;
}
ret = fat_file_write(&fs_info->fat, fat_fd,
11728e: 83 ec 0c sub $0xc,%esp
117291: 8b 45 b4 mov -0x4c(%ebp),%eax
117294: 8b 55 cc mov -0x34(%ebp),%edx
117297: 03 82 94 00 00 00 add 0x94(%edx),%eax
11729d: 50 push %eax
11729e: ff 75 c4 pushl -0x3c(%ebp)
1172a1: 8b 45 b4 mov -0x4c(%ebp),%eax
1172a4: 01 d8 add %ebx,%eax
1172a6: 50 push %eax
1172a7: ff 75 0c pushl 0xc(%ebp)
1172aa: 52 push %edx
1172ab: e8 d2 ac ff ff call 111f82 <fat_file_write>
(empty_space_offset * bts2rd) + empty_space_entry,
length, fs_info->cl_buf + empty_space_entry);
if (ret == -1)
1172b0: 83 c4 20 add $0x20,%esp
1172b3: 83 f8 ff cmp $0xffffffff,%eax
1172b6: 74 35 je 1172ed <msdos_find_name_in_fat_file+0x6ea><== NEVER TAKEN
1172b8: 03 5d d0 add -0x30(%ebp),%ebx
return ret;
else if (ret != length)
1172bb: 3b 45 c4 cmp -0x3c(%ebp),%eax
1172be: 74 0d je 1172cd <msdos_find_name_in_fat_file+0x6ca><== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one(EIO);
1172c0: e8 4b 25 00 00 call 119810 <__errno> <== NOT EXECUTED
1172c5: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
1172cb: eb 20 jmp 1172ed <msdos_find_name_in_fat_file+0x6ea><== NOT EXECUTED
empty_space_offset++;
1172cd: ff 45 b8 incl -0x48(%ebp)
empty_space_entry = 0;
1172d0: c7 45 b4 00 00 00 00 movl $0x0,-0x4c(%ebp)
read_cluster = true;
1172d7: b0 01 mov $0x1,%al
#endif
/*
* The one more is the short entry.
*/
while (lfn_entry < (lfn_entries + 1))
1172d9: 8b 55 c8 mov -0x38(%ebp),%edx
1172dc: 39 55 c0 cmp %edx,-0x40(%ebp)
1172df: 0f 8d ba fd ff ff jge 11709f <msdos_find_name_in_fat_file+0x49c>
empty_space_offset++;
empty_space_entry = 0;
read_cluster = true;
}
return 0;
1172e5: 31 db xor %ebx,%ebx
1172e7: eb 18 jmp 117301 <msdos_find_name_in_fat_file+0x6fe>
dir_pos->sname.ofs = dir_entry;
if (lfn_start.cln != FAT_FILE_SHORT_NAME)
{
rc = fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
1172e9: 89 c3 mov %eax,%ebx <== NOT EXECUTED
1172eb: eb 14 jmp 117301 <msdos_find_name_in_fat_file+0x6fe><== NOT EXECUTED
}
ret = fat_file_write(&fs_info->fat, fat_fd,
(empty_space_offset * bts2rd) + empty_space_entry,
length, fs_info->cl_buf + empty_space_entry);
if (ret == -1)
1172ed: 83 cb ff or $0xffffffff,%ebx <== NOT EXECUTED
1172f0: eb 0f jmp 117301 <msdos_find_name_in_fat_file+0x6fe><== NOT EXECUTED
* short and they match then we have the entry. We will not
* match a long file name against a short file name because
* a long file name that generates a matching short file
* name is not a long file name.
*/
if (lfn_matched ||
1172f2: 80 7d bc 00 cmpb $0x0,-0x44(%ebp)
1172f6: 0f 84 5c fc ff ff je 116f58 <msdos_find_name_in_fat_file+0x355>
1172fc: e9 e7 fb ff ff jmp 116ee8 <msdos_find_name_in_fat_file+0x2e5>
empty_space_entry = 0;
read_cluster = true;
}
return 0;
}
117301: 89 d8 mov %ebx,%eax
117303: 8d 65 f4 lea -0xc(%ebp),%esp
117306: 5b pop %ebx
117307: 5e pop %esi
117308: 5f pop %edi
117309: 5d pop %ebp
11730a: c3 ret
0011730b <msdos_find_node_by_cluster_num_in_fat_file>:
fat_file_fd_t *fat_fd,
uint32_t cl4find,
fat_dir_pos_t *dir_pos,
char *dir_entry
)
{
11730b: 55 push %ebp
11730c: 89 e5 mov %esp,%ebp
11730e: 57 push %edi
11730f: 56 push %esi
117310: 53 push %ebx
117311: 83 ec 2c sub $0x2c,%esp
117314: 8b 55 0c mov 0xc(%ebp),%edx
int rc = RC_OK;
ssize_t ret = 0;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
117317: 8b 45 08 mov 0x8(%ebp),%eax
11731a: 8b 58 08 mov 0x8(%eax),%ebx
uint32_t bts2rd = 0;
uint32_t i = 0, j = 0;
if (FAT_FD_OF_ROOT_DIR(fat_fd) &&
11731d: 83 7a 20 01 cmpl $0x1,0x20(%edx)
117321: 75 16 jne 117339 <msdos_find_node_by_cluster_num_in_fat_file+0x2e><== ALWAYS TAKEN
117323: 83 7a 24 00 cmpl $0x0,0x24(%edx) <== NOT EXECUTED
117327: 75 10 jne 117339 <msdos_find_node_by_cluster_num_in_fat_file+0x2e><== NOT EXECUTED
117329: f6 43 0a 03 testb $0x3,0xa(%ebx) <== NOT EXECUTED
11732d: 74 0a je 117339 <msdos_find_node_by_cluster_num_in_fat_file+0x2e><== NOT EXECUTED
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
bts2rd = fat_fd->fat_file_size;
11732f: 8b 7a 18 mov 0x18(%edx),%edi <== NOT EXECUTED
assert(ret == bts2rd);
for (i = 0; i < bts2rd; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
{
char* entry = (char*) fs_info->cl_buf + i;
117332: 31 c9 xor %ecx,%ecx
117334: e9 b7 00 00 00 jmp 1173f0 <msdos_find_node_by_cluster_num_in_fat_file+0xe5>
if (FAT_FD_OF_ROOT_DIR(fat_fd) &&
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
bts2rd = fat_fd->fat_file_size;
else
bts2rd = fs_info->fat.vol.bpc;
117339: 0f b7 7b 06 movzwl 0x6(%ebx),%edi
11733d: eb f3 jmp 117332 <msdos_find_node_by_cluster_num_in_fat_file+0x27>
while ((ret = fat_file_read(&fs_info->fat, fat_fd, j * bts2rd, bts2rd,
fs_info->cl_buf)) != FAT_EOF)
{
if ( ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE )
11733f: 83 f8 1f cmp $0x1f,%eax
117342: 7f 13 jg 117357 <msdos_find_node_by_cluster_num_in_fat_file+0x4c><== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one( EIO );
117344: e8 c7 24 00 00 call 119810 <__errno> <== NOT EXECUTED
117349: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
11734f: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
117352: e9 cd 00 00 00 jmp 117424 <msdos_find_node_by_cluster_num_in_fat_file+0x119><== NOT EXECUTED
assert(ret == bts2rd);
117357: 39 f8 cmp %edi,%eax
117359: 74 19 je 117374 <msdos_find_node_by_cluster_num_in_fat_file+0x69><== ALWAYS TAKEN
11735b: 68 a0 8b 12 00 push $0x128ba0 <== NOT EXECUTED
117360: 68 e8 8b 12 00 push $0x128be8 <== NOT EXECUTED
117365: 68 49 06 00 00 push $0x649 <== NOT EXECUTED
11736a: 68 31 8b 12 00 push $0x128b31 <== NOT EXECUTED
11736f: e8 48 c3 ff ff call 1136bc <__assert_func> <== NOT EXECUTED
117374: 8b b3 94 00 00 00 mov 0x94(%ebx),%esi
for (i = 0; i < bts2rd; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
{
char* entry = (char*) fs_info->cl_buf + i;
11737a: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
/* if this and all rest entries are empty - return not-found */
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
117381: 8a 06 mov (%esi),%al
117383: 84 c0 test %al,%al
117385: 0f 84 94 00 00 00 je 11741f <msdos_find_node_by_cluster_num_in_fat_file+0x114><== NEVER TAKEN
MSDOS_THIS_DIR_ENTRY_AND_REST_EMPTY)
return MSDOS_NAME_NOT_FOUND_ERR;
/* if this entry is empty - skip it */
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
11738b: 3c e5 cmp $0xe5,%al
11738d: 74 53 je 1173e2 <msdos_find_node_by_cluster_num_in_fat_file+0xd7><== NEVER TAKEN
MSDOS_THIS_DIR_ENTRY_EMPTY)
continue;
/* if get a non-empty entry - compare clusters num */
if (MSDOS_EXTRACT_CLUSTER_NUM(entry) == cl4find)
11738f: 0f b7 46 14 movzwl 0x14(%esi),%eax
117393: c1 e0 10 shl $0x10,%eax
117396: 89 45 d4 mov %eax,-0x2c(%ebp)
117399: 0f b7 46 1a movzwl 0x1a(%esi),%eax
11739d: 09 45 d4 or %eax,-0x2c(%ebp)
1173a0: 8b 45 10 mov 0x10(%ebp),%eax
1173a3: 39 45 d4 cmp %eax,-0x2c(%ebp)
1173a6: 75 3a jne 1173e2 <msdos_find_node_by_cluster_num_in_fat_file+0xd7>
{
/* on success fill aux structure and copy all 32 bytes */
rc = fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM, j * bts2rd,
1173a8: 83 ec 0c sub $0xc,%esp
1173ab: ff 75 14 pushl 0x14(%ebp)
1173ae: 51 push %ecx
1173af: 6a 01 push $0x1
1173b1: 52 push %edx
1173b2: 53 push %ebx
1173b3: e8 26 a9 ff ff call 111cde <fat_file_ioctl>
&dir_pos->sname.cln);
if (rc != RC_OK)
1173b8: 83 c4 20 add $0x20,%esp
1173bb: 85 c0 test %eax,%eax
1173bd: 75 65 jne 117424 <msdos_find_node_by_cluster_num_in_fat_file+0x119><== NEVER TAKEN
return rc;
dir_pos->sname.ofs = i;
1173bf: 8b 4d e4 mov -0x1c(%ebp),%ecx
1173c2: 8b 55 14 mov 0x14(%ebp),%edx
1173c5: 89 4a 04 mov %ecx,0x4(%edx)
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
1173c8: c7 42 08 ff ff ff ff movl $0xffffffff,0x8(%edx)
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
1173cf: c7 42 0c ff ff ff ff movl $0xffffffff,0xc(%edx)
memcpy(dir_entry, entry,
1173d6: b9 08 00 00 00 mov $0x8,%ecx
1173db: 8b 7d 18 mov 0x18(%ebp),%edi
1173de: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
return RC_OK;
1173e0: eb 42 jmp 117424 <msdos_find_node_by_cluster_num_in_fat_file+0x119>
if ( ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE )
rtems_set_errno_and_return_minus_one( EIO );
assert(ret == bts2rd);
for (i = 0; i < bts2rd; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
1173e2: 83 45 e4 20 addl $0x20,-0x1c(%ebp)
1173e6: 83 c6 20 add $0x20,%esi
1173e9: 39 7d e4 cmp %edi,-0x1c(%ebp)
1173ec: 72 93 jb 117381 <msdos_find_node_by_cluster_num_in_fat_file+0x76><== ALWAYS TAKEN
1173ee: 01 f9 add %edi,%ecx <== NOT EXECUTED
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
bts2rd = fat_fd->fat_file_size;
else
bts2rd = fs_info->fat.vol.bpc;
while ((ret = fat_file_read(&fs_info->fat, fat_fd, j * bts2rd, bts2rd,
1173f0: 83 ec 0c sub $0xc,%esp
1173f3: ff b3 94 00 00 00 pushl 0x94(%ebx)
1173f9: 57 push %edi
1173fa: 51 push %ecx
1173fb: 52 push %edx
1173fc: 53 push %ebx
1173fd: 89 55 d8 mov %edx,-0x28(%ebp)
117400: 89 4d dc mov %ecx,-0x24(%ebp)
117403: e8 e3 a5 ff ff call 1119eb <fat_file_read>
117408: 83 c4 20 add $0x20,%esp
11740b: 85 c0 test %eax,%eax
11740d: 8b 55 d8 mov -0x28(%ebp),%edx
117410: 8b 4d dc mov -0x24(%ebp),%ecx
117413: 0f 85 26 ff ff ff jne 11733f <msdos_find_node_by_cluster_num_in_fat_file+0x34><== ALWAYS TAKEN
char* entry = (char*) fs_info->cl_buf + i;
/* if this and all rest entries are empty - return not-found */
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
MSDOS_THIS_DIR_ENTRY_AND_REST_EMPTY)
return MSDOS_NAME_NOT_FOUND_ERR;
117419: 66 b8 01 7d mov $0x7d01,%ax <== NOT EXECUTED
11741d: eb 05 jmp 117424 <msdos_find_node_by_cluster_num_in_fat_file+0x119><== NOT EXECUTED
11741f: b8 01 7d 00 00 mov $0x7d01,%eax <== NOT EXECUTED
}
}
j++;
}
return MSDOS_NAME_NOT_FOUND_ERR;
}
117424: 8d 65 f4 lea -0xc(%ebp),%esp
117427: 5b pop %ebx
117428: 5e pop %esi
117429: 5f pop %edi
11742a: 5d pop %ebp
11742b: c3 ret
0010e101 <msdos_format>:
)
/*-------------------------------------------------------------------------*\
| Return Value: |
| 0, if success, -1 and errno if failed |
\*=========================================================================*/
{
10e101: 55 push %ebp
10e102: 89 e5 mov %esp,%ebp
10e104: 57 push %edi
10e105: 56 push %esi
10e106: 53 push %ebx
10e107: 81 ec d0 02 00 00 sub $0x2d0,%esp
10e10d: 8b 5d 08 mov 0x8(%ebp),%ebx
msdos_format_param_t fmt_params;
/*
* open device for writing
*/
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL, "open device\n");
10e110: 68 c4 84 12 00 push $0x1284c4
10e115: 6a 02 push $0x2
10e117: ff 75 0c pushl 0xc(%ebp)
10e11a: e8 5d fe ff ff call 10df7c <msdos_format_printf>
fd = open(devname, O_RDWR);
10e11f: 58 pop %eax
10e120: 5a pop %edx
10e121: 6a 02 push $0x2
10e123: 53 push %ebx
10e124: e8 c7 9e ff ff call 107ff0 <open>
10e129: 89 85 40 fd ff ff mov %eax,-0x2c0(%ebp)
if (fd == -1) {
10e12f: 83 c4 10 add $0x10,%esp
\*=========================================================================*/
{
char tmp_sec[FAT_TOTAL_MBR_SIZE];
int rc;
struct stat stat_buf;
int ret_val = 0;
10e132: 40 inc %eax
10e133: 0f 95 c0 setne %al
10e136: 0f b6 c0 movzbl %al,%eax
10e139: 89 c6 mov %eax,%esi
10e13b: 4e dec %esi
}
/*
* sanity check on device
*/
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
10e13c: 53 push %ebx
10e13d: 68 d1 84 12 00 push $0x1284d1
10e142: 6a 02 push $0x2
10e144: ff 75 0c pushl 0xc(%ebp)
10e147: e8 30 fe ff ff call 10df7c <msdos_format_printf>
"stat check: %s\n", devname);
if (ret_val == 0) {
10e14c: 83 c4 10 add $0x10,%esp
10e14f: c7 85 44 fd ff ff ff movl $0xffffffff,-0x2bc(%ebp)
10e156: ff ff ff
10e159: 85 f6 test %esi,%esi
10e15b: 75 1d jne 10e17a <msdos_format+0x79> <== NEVER TAKEN
rc = fstat(fd, &stat_buf);
10e15d: 50 push %eax
10e15e: 50 push %eax
10e15f: 8d 85 50 fd ff ff lea -0x2b0(%ebp),%eax
10e165: 50 push %eax
10e166: ff b5 40 fd ff ff pushl -0x2c0(%ebp)
10e16c: e8 2f 57 00 00 call 1138a0 <fstat>
10e171: 83 c4 10 add $0x10,%esp
ret_val = rc;
10e174: 89 85 44 fd ff ff mov %eax,-0x2bc(%ebp)
}
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_INFO,
10e17a: 53 push %ebx
10e17b: 68 e1 84 12 00 push $0x1284e1
10e180: 6a 01 push $0x1
10e182: ff 75 0c pushl 0xc(%ebp)
10e185: e8 f2 fd ff ff call 10df7c <msdos_format_printf>
"formating: %s\n", devname);
/* rtems feature: no block devices, all are character devices */
if ((ret_val == 0) && (!S_ISBLK(stat_buf.st_mode))) {
10e18a: 83 c4 10 add $0x10,%esp
10e18d: 83 bd 44 fd ff ff 00 cmpl $0x0,-0x2bc(%ebp)
10e194: 0f 85 28 05 00 00 jne 10e6c2 <msdos_format+0x5c1> <== NEVER TAKEN
10e19a: 8b 85 5c fd ff ff mov -0x2a4(%ebp),%eax
10e1a0: 25 00 f0 00 00 and $0xf000,%eax
10e1a5: 3d 00 60 00 00 cmp $0x6000,%eax
10e1aa: 0f 84 e6 0a 00 00 je 10ec96 <msdos_format+0xb95> <== ALWAYS TAKEN
errno = ENOTTY;
10e1b0: e8 5b b6 00 00 call 119810 <__errno> <== NOT EXECUTED
10e1b5: c7 00 19 00 00 00 movl $0x19,(%eax) <== NOT EXECUTED
10e1bb: e9 9a 0b 00 00 jmp 10ed5a <msdos_format+0xc59> <== NOT EXECUTED
static inline int rtems_disk_fd_get_block_count(
int fd,
rtems_blkdev_bnum *block_count
)
{
return ioctl(fd, RTEMS_BLKIO_GETSIZE, block_count);
10e1c0: 50 push %eax
*/
if (ret_val == 0) {
ret_val = rtems_disk_fd_get_block_size(fd, &fmt_params->bytes_per_sector);
}
if (ret_val == 0) {
ret_val = rtems_disk_fd_get_block_count(fd, &fmt_params->totl_sector_cnt);
10e1c1: 8d 85 9c fd ff ff lea -0x264(%ebp),%eax
10e1c7: 50 push %eax
10e1c8: 68 05 42 04 40 push $0x40044205
10e1cd: ff b5 40 fd ff ff pushl -0x2c0(%ebp)
10e1d3: e8 a0 91 ff ff call 107378 <ioctl>
10e1d8: 89 85 3c fd ff ff mov %eax,-0x2c4(%ebp)
}
if (ret_val == 0) {
10e1de: 83 c4 10 add $0x10,%esp
10e1e1: 85 c0 test %eax,%eax
10e1e3: 0f 85 c3 03 00 00 jne 10e5ac <msdos_format+0x4ab> <== NEVER TAKEN
total_size = fmt_params->bytes_per_sector * fmt_params->totl_sector_cnt;
10e1e9: 8b 95 98 fd ff ff mov -0x268(%ebp),%edx
10e1ef: 8b 8d 9c fd ff ff mov -0x264(%ebp),%ecx
10e1f5: 89 ce mov %ecx,%esi
10e1f7: 0f af f2 imul %edx,%esi
10e1fa: 31 ff xor %edi,%edi
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
10e1fc: 50 push %eax
10e1fd: 57 push %edi
10e1fe: 56 push %esi
10e1ff: 51 push %ecx
10e200: 52 push %edx
10e201: 68 f0 84 12 00 push $0x1284f0
10e206: 6a 02 push $0x2
10e208: ff 75 0c pushl 0xc(%ebp)
10e20b: e8 6c fd ff ff call 10df7c <msdos_format_printf>
/*
* determine number of FATs
*/
if (ret_val == 0) {
if ((rqdata == NULL) ||
10e210: 83 c4 20 add $0x20,%esp
10e213: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
10e217: 74 0a je 10e223 <msdos_format+0x122>
(rqdata->fat_num == 0)) {
10e219: 8b 55 0c mov 0xc(%ebp),%edx
10e21c: 8b 42 0c mov 0xc(%edx),%eax
/*
* determine number of FATs
*/
if (ret_val == 0) {
if ((rqdata == NULL) ||
10e21f: 85 c0 test %eax,%eax
10e221: 75 0c jne 10e22f <msdos_format+0x12e> <== NEVER TAKEN
(rqdata->fat_num == 0)) {
fmt_params->fat_num = 2;
10e223: c6 85 c8 fd ff ff 02 movb $0x2,-0x238(%ebp)
10e22a: e9 a4 0a 00 00 jmp 10ecd3 <msdos_format+0xbd2>
}
else if (rqdata->fat_num <= 6) {
10e22f: 83 f8 06 cmp $0x6,%eax <== NOT EXECUTED
10e232: 0f 87 d8 0a 00 00 ja 10ed10 <msdos_format+0xc0f> <== NOT EXECUTED
fmt_params->fat_num = rqdata->fat_num;
10e238: 88 85 c8 fd ff ff mov %al,-0x238(%ebp) <== NOT EXECUTED
10e23e: e9 90 0a 00 00 jmp 10ecd3 <msdos_format+0xbd2> <== NOT EXECUTED
* depends on
*/
if (ret_val == 0) {
fmt_params->sectors_per_cluster = 1;
if ((rqdata != NULL) &&
(rqdata->fattype == MSDOS_FMT_FAT12)) {
10e243: 8b 4d 0c mov 0xc(%ebp),%ecx
10e246: 8a 41 14 mov 0x14(%ecx),%al
* determine FAT type and sectors per cluster
* depends on
*/
if (ret_val == 0) {
fmt_params->sectors_per_cluster = 1;
if ((rqdata != NULL) &&
10e249: 3c 01 cmp $0x1,%al
10e24b: 75 0c jne 10e259 <msdos_format+0x158> <== ALWAYS TAKEN
(rqdata->fattype == MSDOS_FMT_FAT12)) {
fmt_params->fattype = FAT_FAT12;
10e24d: c6 85 ca fd ff ff 01 movb $0x1,-0x236(%ebp) <== NOT EXECUTED
10e254: e9 c9 00 00 00 jmp 10e322 <msdos_format+0x221> <== NOT EXECUTED
}
else if ((rqdata != NULL) &&
10e259: 3c 02 cmp $0x2,%al
10e25b: 75 0c jne 10e269 <msdos_format+0x168> <== ALWAYS TAKEN
(rqdata->fattype == MSDOS_FMT_FAT16)) {
fmt_params->fattype = FAT_FAT16;
10e25d: c6 85 ca fd ff ff 02 movb $0x2,-0x236(%ebp) <== NOT EXECUTED
10e264: e9 b9 00 00 00 jmp 10e322 <msdos_format+0x221> <== NOT EXECUTED
}
else if ((rqdata != NULL) &&
10e269: 3c 03 cmp $0x3,%al
10e26b: 75 0c jne 10e279 <msdos_format+0x178> <== ALWAYS TAKEN
(rqdata->fattype == MSDOS_FMT_FAT32)) {
fmt_params->fattype = FAT_FAT32;
10e26d: c6 85 ca fd ff ff 04 movb $0x4,-0x236(%ebp) <== NOT EXECUTED
10e274: e9 a9 00 00 00 jmp 10e322 <msdos_format+0x221> <== NOT EXECUTED
}
else if ((rqdata != NULL) &&
10e279: 84 c0 test %al,%al
10e27b: 74 1a je 10e297 <msdos_format+0x196> <== ALWAYS TAKEN
(rqdata->fattype != MSDOS_FMT_FATANY)) {
ret_val = -1;
errno = EINVAL;
10e27d: e8 8e b5 00 00 call 119810 <__errno> <== NOT EXECUTED
10e282: c7 00 16 00 00 00 movl $0x16,(%eax) <== NOT EXECUTED
(rqdata->fattype == MSDOS_FMT_FAT32)) {
fmt_params->fattype = FAT_FAT32;
}
else if ((rqdata != NULL) &&
(rqdata->fattype != MSDOS_FMT_FATANY)) {
ret_val = -1;
10e288: c7 85 3c fd ff ff ff movl $0xffffffff,-0x2c4(%ebp) <== NOT EXECUTED
10e28f: ff ff ff
10e292: e9 8b 00 00 00 jmp 10e322 <msdos_format+0x221> <== NOT EXECUTED
* are a compromise concerning capacity and efficency
*/
uint32_t fat12_sect_per_clust = 8;
uint32_t fat16_sect_per_clust = 32;
if (rqdata != NULL && rqdata->sectors_per_cluster != 0) {
10e297: 8b 55 0c mov 0xc(%ebp),%edx
10e29a: 8b 42 08 mov 0x8(%edx),%eax
10e29d: 89 c2 mov %eax,%edx
10e29f: 85 c0 test %eax,%eax
10e2a1: 75 07 jne 10e2aa <msdos_format+0x1a9> <== NEVER TAKEN
* limiting values for disk size, fat type, sectors per cluster
* NOTE: maximum sect_per_clust is arbitrarily choosen with values that
* are a compromise concerning capacity and efficency
*/
uint32_t fat12_sect_per_clust = 8;
uint32_t fat16_sect_per_clust = 32;
10e2a3: ba 20 00 00 00 mov $0x20,%edx
/*
* limiting values for disk size, fat type, sectors per cluster
* NOTE: maximum sect_per_clust is arbitrarily choosen with values that
* are a compromise concerning capacity and efficency
*/
uint32_t fat12_sect_per_clust = 8;
10e2a8: b0 08 mov $0x8,%al
if (rqdata != NULL && rqdata->sectors_per_cluster != 0) {
fat12_sect_per_clust = rqdata->sectors_per_cluster;
fat16_sect_per_clust = rqdata->sectors_per_cluster;
}
if (fmt_params->totl_sector_cnt
10e2aa: 8b 8d 9c fd ff ff mov -0x264(%ebp),%ecx
< FAT_FAT12_MAX_CLN * fat12_sect_per_clust) {
10e2b0: 69 c0 f5 0f 00 00 imul $0xff5,%eax,%eax
if (rqdata != NULL && rqdata->sectors_per_cluster != 0) {
fat12_sect_per_clust = rqdata->sectors_per_cluster;
fat16_sect_per_clust = rqdata->sectors_per_cluster;
}
if (fmt_params->totl_sector_cnt
10e2b6: 39 c1 cmp %eax,%ecx
10e2b8: 73 09 jae 10e2c3 <msdos_format+0x1c2> <== NEVER TAKEN
< FAT_FAT12_MAX_CLN * fat12_sect_per_clust) {
fmt_params->fattype = FAT_FAT12;
10e2ba: c6 85 ca fd ff ff 01 movb $0x1,-0x236(%ebp)
10e2c1: eb 11 jmp 10e2d4 <msdos_format+0x1d3>
/* start trying with small clusters */
fmt_params->sectors_per_cluster = 2;
}
else if (fmt_params->totl_sector_cnt
< FAT_FAT16_MAX_CLN * fat16_sect_per_clust) {
10e2c3: 69 d2 f5 ff 00 00 imul $0xfff5,%edx,%edx <== NOT EXECUTED
< FAT_FAT12_MAX_CLN * fat12_sect_per_clust) {
fmt_params->fattype = FAT_FAT12;
/* start trying with small clusters */
fmt_params->sectors_per_cluster = 2;
}
else if (fmt_params->totl_sector_cnt
10e2c9: 39 d1 cmp %edx,%ecx <== NOT EXECUTED
10e2cb: 73 13 jae 10e2e0 <msdos_format+0x1df> <== NOT EXECUTED
< FAT_FAT16_MAX_CLN * fat16_sect_per_clust) {
fmt_params->fattype = FAT_FAT16;
10e2cd: c6 85 ca fd ff ff 02 movb $0x2,-0x236(%ebp) <== NOT EXECUTED
/* start trying with small clusters */
fmt_params->sectors_per_cluster = 2;
10e2d4: c7 85 a4 fd ff ff 02 movl $0x2,-0x25c(%ebp)
10e2db: 00 00 00
10e2de: eb 3c jmp 10e31c <msdos_format+0x21b>
}
else {
#define ONE_GB (1024L * 1024L * 1024L)
uint32_t gigs = (total_size + ONE_GB) / ONE_GB;
10e2e0: 89 f0 mov %esi,%eax <== NOT EXECUTED
10e2e2: 89 fa mov %edi,%edx <== NOT EXECUTED
10e2e4: 05 00 00 00 40 add $0x40000000,%eax <== NOT EXECUTED
10e2e9: 83 d2 00 adc $0x0,%edx <== NOT EXECUTED
10e2ec: 0f ac d0 1e shrd $0x1e,%edx,%eax <== NOT EXECUTED
10e2f0: c1 ea 1e shr $0x1e,%edx <== NOT EXECUTED
int b;
fmt_params->fattype = FAT_FAT32;
10e2f3: c6 85 ca fd ff ff 04 movb $0x4,-0x236(%ebp) <== NOT EXECUTED
/* scale with the size of disk... */
for (b = 31; b > 0; b--)
10e2fa: b9 1f 00 00 00 mov $0x1f,%ecx <== NOT EXECUTED
if ((gigs & (1 << b)) != 0)
10e2ff: ba 01 00 00 00 mov $0x1,%edx <== NOT EXECUTED
10e304: 89 d3 mov %edx,%ebx <== NOT EXECUTED
10e306: d3 e3 shl %cl,%ebx <== NOT EXECUTED
10e308: 85 c3 test %eax,%ebx <== NOT EXECUTED
10e30a: 75 03 jne 10e30f <msdos_format+0x20e> <== NOT EXECUTED
#define ONE_GB (1024L * 1024L * 1024L)
uint32_t gigs = (total_size + ONE_GB) / ONE_GB;
int b;
fmt_params->fattype = FAT_FAT32;
/* scale with the size of disk... */
for (b = 31; b > 0; b--)
10e30c: 49 dec %ecx <== NOT EXECUTED
10e30d: 75 f5 jne 10e304 <msdos_format+0x203> <== NOT EXECUTED
if ((gigs & (1 << b)) != 0)
break;
fmt_params->sectors_per_cluster = 1 << b;
10e30f: b8 01 00 00 00 mov $0x1,%eax <== NOT EXECUTED
10e314: d3 e0 shl %cl,%eax <== NOT EXECUTED
10e316: 89 85 a4 fd ff ff mov %eax,-0x25c(%ebp) <== NOT EXECUTED
}
}
/*
* try to use user requested cluster size
*/
if ((rqdata != NULL) &&
10e31c: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
10e320: 74 10 je 10e332 <msdos_format+0x231>
(rqdata->sectors_per_cluster > 0)) {
10e322: 8b 4d 0c mov 0xc(%ebp),%ecx
10e325: 8b 41 08 mov 0x8(%ecx),%eax
}
}
/*
* try to use user requested cluster size
*/
if ((rqdata != NULL) &&
10e328: 85 c0 test %eax,%eax
10e32a: 74 06 je 10e332 <msdos_format+0x231> <== ALWAYS TAKEN
(rqdata->sectors_per_cluster > 0)) {
fmt_params->sectors_per_cluster =
10e32c: 89 85 a4 fd ff ff mov %eax,-0x25c(%ebp) <== NOT EXECUTED
*/
for (onebit = 128;onebit >= 1;onebit = onebit>>1) {
if (fmt_params->sectors_per_cluster >= onebit) {
fmt_params->sectors_per_cluster = onebit;
if (fmt_params->sectors_per_cluster
<= 32768L/fmt_params->bytes_per_sector) {
10e332: 8b b5 98 fd ff ff mov -0x268(%ebp),%esi
10e338: 8b 85 a4 fd ff ff mov -0x25c(%ebp),%eax
10e33e: b9 80 00 00 00 mov $0x80,%ecx
10e343: bb 00 80 00 00 mov $0x8000,%ebx
* must be power of 2
* must be smaller than or equal to 128
* sectors_per_cluster*bytes_per_sector must not be bigger than 32K
*/
for (onebit = 128;onebit >= 1;onebit = onebit>>1) {
if (fmt_params->sectors_per_cluster >= onebit) {
10e348: 39 c8 cmp %ecx,%eax
10e34a: 72 13 jb 10e35f <msdos_format+0x25e>
fmt_params->sectors_per_cluster = onebit;
if (fmt_params->sectors_per_cluster
<= 32768L/fmt_params->bytes_per_sector) {
10e34c: 89 d8 mov %ebx,%eax
10e34e: 31 d2 xor %edx,%edx
10e350: f7 f6 div %esi
* sectors_per_cluster*bytes_per_sector must not be bigger than 32K
*/
for (onebit = 128;onebit >= 1;onebit = onebit>>1) {
if (fmt_params->sectors_per_cluster >= onebit) {
fmt_params->sectors_per_cluster = onebit;
if (fmt_params->sectors_per_cluster
10e352: 39 c1 cmp %eax,%ecx
10e354: 89 c8 mov %ecx,%eax
10e356: 76 02 jbe 10e35a <msdos_format+0x259> <== ALWAYS TAKEN
10e358: eb 05 jmp 10e35f <msdos_format+0x25e> <== NOT EXECUTED
<= 32768L/fmt_params->bytes_per_sector) {
/* value is small enough so this value is ok */
onebit = 1;
10e35a: b9 01 00 00 00 mov $0x1,%ecx
* check sectors per cluster.
* must be power of 2
* must be smaller than or equal to 128
* sectors_per_cluster*bytes_per_sector must not be bigger than 32K
*/
for (onebit = 128;onebit >= 1;onebit = onebit>>1) {
10e35f: d1 e9 shr %ecx
10e361: 75 e5 jne 10e348 <msdos_format+0x247>
10e363: 89 85 a4 fd ff ff mov %eax,-0x25c(%ebp)
}
}
}
}
if (ret_val == 0) {
10e369: 83 bd 3c fd ff ff 00 cmpl $0x0,-0x2c4(%ebp)
10e370: 0f 85 2c 02 00 00 jne 10e5a2 <msdos_format+0x4a1> <== NEVER TAKEN
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
10e376: 50 push %eax
10e377: 68 2b 85 12 00 push $0x12852b
10e37c: 6a 02 push $0x2
10e37e: ff 75 0c pushl 0xc(%ebp)
10e381: e8 f6 fb ff ff call 10df7c <msdos_format_printf>
"sectors per cluster: %d\n", fmt_params->sectors_per_cluster);
if (fmt_params->fattype == FAT_FAT32) {
10e386: 0f b6 8d ca fd ff ff movzbl -0x236(%ebp),%ecx
10e38d: 83 c4 10 add $0x10,%esp
10e390: 80 f9 04 cmp $0x4,%cl
10e393: 75 2a jne 10e3bf <msdos_format+0x2be> <== ALWAYS TAKEN
/* recommended: for FAT32, always set reserved sector count to 32 */
fmt_params->rsvd_sector_cnt = 32;
10e395: c7 85 a0 fd ff ff 20 movl $0x20,-0x260(%ebp) <== NOT EXECUTED
10e39c: 00 00 00
/* for FAT32, always set files per root directory 0 */
fmt_params->files_per_root_dir = 0;
10e39f: c7 85 b0 fd ff ff 00 movl $0x0,-0x250(%ebp) <== NOT EXECUTED
10e3a6: 00 00 00
/* location of copy of MBR */
fmt_params->mbr_copy_sec = 6;
10e3a9: c7 85 c0 fd ff ff 06 movl $0x6,-0x240(%ebp) <== NOT EXECUTED
10e3b0: 00 00 00
/* location of fsinfo sector */
fmt_params->fsinfo_sec = 1;
10e3b3: c7 85 c4 fd ff ff 01 movl $0x1,-0x23c(%ebp) <== NOT EXECUTED
10e3ba: 00 00 00
10e3bd: eb 58 jmp 10e417 <msdos_format+0x316> <== NOT EXECUTED
}
else {
/* recommended: for FAT12/FAT16, always set reserved sector count to 1 */
fmt_params->rsvd_sector_cnt = 1;
10e3bf: c7 85 a0 fd ff ff 01 movl $0x1,-0x260(%ebp)
10e3c6: 00 00 00
/* recommended: for FAT16, set files per root directory to 512 */
/* for FAT12/FAT16, set files per root directory */
/* must fill up an even count of sectors */
if ((rqdata != NULL) &&
10e3c9: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
10e3cd: 74 0c je 10e3db <msdos_format+0x2da>
(rqdata->files_per_root_dir > 0)) {
10e3cf: 8b 55 0c mov 0xc(%ebp),%edx
10e3d2: 8b 42 10 mov 0x10(%edx),%eax
/* recommended: for FAT12/FAT16, always set reserved sector count to 1 */
fmt_params->rsvd_sector_cnt = 1;
/* recommended: for FAT16, set files per root directory to 512 */
/* for FAT12/FAT16, set files per root directory */
/* must fill up an even count of sectors */
if ((rqdata != NULL) &&
10e3d5: 85 c0 test %eax,%eax
10e3d7: 74 02 je 10e3db <msdos_format+0x2da> <== ALWAYS TAKEN
10e3d9: eb 13 jmp 10e3ee <msdos_format+0x2ed> <== NOT EXECUTED
(rqdata->files_per_root_dir > 0)) {
fmt_params->files_per_root_dir = rqdata->files_per_root_dir;
}
else {
if (fmt_params->fattype == FAT_FAT16) {
fmt_params->files_per_root_dir = 512;
10e3db: 31 c0 xor %eax,%eax
10e3dd: 80 f9 02 cmp $0x2,%cl
10e3e0: 0f 94 c0 sete %al
10e3e3: 48 dec %eax
10e3e4: 25 40 fe ff ff and $0xfffffe40,%eax
10e3e9: 05 00 02 00 00 add $0x200,%eax
10e3ee: 89 85 b0 fd ff ff mov %eax,-0x250(%ebp)
else {
fmt_params->files_per_root_dir = 64;
}
}
fmt_params->files_per_root_dir = (fmt_params->files_per_root_dir +
(2*fmt_params->bytes_per_sector/
10e3f4: 8b 9d 98 fd ff ff mov -0x268(%ebp),%ebx
10e3fa: d1 e3 shl %ebx
10e3fc: c1 eb 05 shr $0x5,%ebx
}
else {
fmt_params->files_per_root_dir = 64;
}
}
fmt_params->files_per_root_dir = (fmt_params->files_per_root_dir +
10e3ff: 8b 85 b0 fd ff ff mov -0x250(%ebp),%eax
10e405: 8d 74 03 ff lea -0x1(%ebx,%eax,1),%esi
(2*fmt_params->bytes_per_sector/
FAT_DIRENTRY_SIZE-1));
fmt_params->files_per_root_dir -= (fmt_params->files_per_root_dir %
10e409: 89 f0 mov %esi,%eax
10e40b: 31 d2 xor %edx,%edx
10e40d: f7 f3 div %ebx
10e40f: 29 d6 sub %edx,%esi
10e411: 89 b5 b0 fd ff ff mov %esi,-0x250(%ebp)
(2*fmt_params->bytes_per_sector
/FAT_DIRENTRY_SIZE));
}
fmt_params->root_dir_sectors =
(((fmt_params->files_per_root_dir * FAT_DIRENTRY_SIZE)
+ fmt_params->bytes_per_sector - 1)
10e417: 8b 85 98 fd ff ff mov -0x268(%ebp),%eax
10e41d: 89 85 38 fd ff ff mov %eax,-0x2c8(%ebp)
10e423: 48 dec %eax
10e424: 89 85 30 fd ff ff mov %eax,-0x2d0(%ebp)
fmt_params->files_per_root_dir -= (fmt_params->files_per_root_dir %
(2*fmt_params->bytes_per_sector
/FAT_DIRENTRY_SIZE));
}
fmt_params->root_dir_sectors =
(((fmt_params->files_per_root_dir * FAT_DIRENTRY_SIZE)
10e42a: 8b 85 b0 fd ff ff mov -0x250(%ebp),%eax
10e430: c1 e0 05 shl $0x5,%eax
+ fmt_params->bytes_per_sector - 1)
10e433: 03 85 30 fd ff ff add -0x2d0(%ebp),%eax
/ fmt_params->bytes_per_sector);
10e439: 31 d2 xor %edx,%edx
10e43b: f7 b5 38 fd ff ff divl -0x2c8(%ebp)
FAT_DIRENTRY_SIZE-1));
fmt_params->files_per_root_dir -= (fmt_params->files_per_root_dir %
(2*fmt_params->bytes_per_sector
/FAT_DIRENTRY_SIZE));
}
fmt_params->root_dir_sectors =
10e441: 89 85 b4 fd ff ff mov %eax,-0x24c(%ebp)
(((fmt_params->files_per_root_dir * FAT_DIRENTRY_SIZE)
+ fmt_params->bytes_per_sector - 1)
/ fmt_params->bytes_per_sector);
}
if (ret_val == 0) {
fatdata_sect_cnt = (fmt_params->totl_sector_cnt -
10e447: 8b bd 9c fd ff ff mov -0x264(%ebp),%edi
10e44d: 2b bd a0 fd ff ff sub -0x260(%ebp),%edi
10e453: 29 c7 sub %eax,%edi
/*
* check values to get legal arrangement of FAT type and cluster count
*/
ret_val = msdos_format_eval_sectors_per_cluster
(fmt_params->fattype,
10e455: 8b 9d a4 fd ff ff mov -0x25c(%ebp),%ebx
fmt_params->bytes_per_sector,
fatdata_sect_cnt,
fmt_params->fat_num,
10e45b: 8b b5 c8 fd ff ff mov -0x238(%ebp),%esi
/*
* check values to get legal arrangement of FAT type and cluster count
*/
ret_val = msdos_format_eval_sectors_per_cluster
(fmt_params->fattype,
10e461: 89 8d 34 fd ff ff mov %ecx,-0x2cc(%ebp)
uint32_t sectors_per_fat;
uint32_t data_cluster_cnt;
/*
* ensure, that maximum cluster size (32KByte) is not exceeded
*/
while (MS_BYTES_PER_CLUSTER_LIMIT / bytes_per_sector < sectors_per_cluster) {
10e467: b8 00 80 00 00 mov $0x8000,%eax
10e46c: 31 d2 xor %edx,%edx
10e46e: f7 b5 38 fd ff ff divl -0x2c8(%ebp)
10e474: eb 02 jmp 10e478 <msdos_format+0x377>
sectors_per_cluster /= 2;
10e476: d1 eb shr %ebx <== NOT EXECUTED
uint32_t sectors_per_fat;
uint32_t data_cluster_cnt;
/*
* ensure, that maximum cluster size (32KByte) is not exceeded
*/
while (MS_BYTES_PER_CLUSTER_LIMIT / bytes_per_sector < sectors_per_cluster) {
10e478: 39 d8 cmp %ebx,%eax
10e47a: 72 fa jb 10e476 <msdos_format+0x375> <== NEVER TAKEN
sectors_per_fat = ((fat_capacity
+ (bytes_per_sector - 1))
/ bytes_per_sector);
data_cluster_cnt = (fatdata_cluster_cnt -
(((sectors_per_fat * fat_num)
10e47c: 89 f2 mov %esi,%edx
10e47e: 0f b6 f2 movzbl %dl,%esi
10e481: 89 b5 2c fd ff ff mov %esi,-0x2d4(%ebp)
* compute number of data clusters for current data:
* - compute cluster count for data AND fat
* - compute storage size for FAT
* - subtract from total cluster count
*/
fatdata_cluster_cnt = fatdata_sec_cnt/sectors_per_cluster;
10e487: 89 f8 mov %edi,%eax
10e489: 31 d2 xor %edx,%edx
10e48b: f7 f3 div %ebx
10e48d: 89 c1 mov %eax,%ecx
if (fattype == FAT_FAT12) {
10e48f: 83 bd 34 fd ff ff 01 cmpl $0x1,-0x2cc(%ebp)
10e496: 75 07 jne 10e49f <msdos_format+0x39e> <== NEVER TAKEN
fat_capacity = fatdata_cluster_cnt * 3 / 2;
10e498: 8d 34 40 lea (%eax,%eax,2),%esi
10e49b: d1 ee shr %esi
10e49d: eb 13 jmp 10e4b2 <msdos_format+0x3b1>
}
else if (fattype == FAT_FAT16) {
fat_capacity = fatdata_cluster_cnt * 2;
}
else { /* FAT32 */
fat_capacity = fatdata_cluster_cnt * 4;
10e49f: 8d 34 85 00 00 00 00 lea 0x0(,%eax,4),%esi <== NOT EXECUTED
*/
fatdata_cluster_cnt = fatdata_sec_cnt/sectors_per_cluster;
if (fattype == FAT_FAT12) {
fat_capacity = fatdata_cluster_cnt * 3 / 2;
}
else if (fattype == FAT_FAT16) {
10e4a6: 83 bd 34 fd ff ff 02 cmpl $0x2,-0x2cc(%ebp) <== NOT EXECUTED
10e4ad: 75 03 jne 10e4b2 <msdos_format+0x3b1> <== NOT EXECUTED
fat_capacity = fatdata_cluster_cnt * 2;
10e4af: 8d 34 00 lea (%eax,%eax,1),%esi <== NOT EXECUTED
else { /* FAT32 */
fat_capacity = fatdata_cluster_cnt * 4;
}
sectors_per_fat = ((fat_capacity
+ (bytes_per_sector - 1))
10e4b2: 8b 85 30 fd ff ff mov -0x2d0(%ebp),%eax
10e4b8: 01 f0 add %esi,%eax
}
else { /* FAT32 */
fat_capacity = fatdata_cluster_cnt * 4;
}
sectors_per_fat = ((fat_capacity
10e4ba: 31 d2 xor %edx,%edx
10e4bc: f7 b5 38 fd ff ff divl -0x2c8(%ebp)
10e4c2: 89 c6 mov %eax,%esi
+ (bytes_per_sector - 1))
/ bytes_per_sector);
data_cluster_cnt = (fatdata_cluster_cnt -
(((sectors_per_fat * fat_num)
10e4c4: 8b 85 2c fd ff ff mov -0x2d4(%ebp),%eax
10e4ca: 0f af c6 imul %esi,%eax
+ (sectors_per_cluster - 1))
10e4cd: 8d 44 03 ff lea -0x1(%ebx,%eax,1),%eax
/ sectors_per_cluster));
10e4d1: 31 d2 xor %edx,%edx
10e4d3: f7 f3 div %ebx
sectors_per_fat = ((fat_capacity
+ (bytes_per_sector - 1))
/ bytes_per_sector);
data_cluster_cnt = (fatdata_cluster_cnt -
10e4d5: 29 c1 sub %eax,%ecx
+ (sectors_per_cluster - 1))
/ sectors_per_cluster));
/*
* data cluster count too big? then make sectors bigger
*/
if (((fattype == FAT_FAT12) && (data_cluster_cnt > FAT_FAT12_MAX_CLN)) ||
10e4d7: 81 f9 f5 0f 00 00 cmp $0xff5,%ecx
10e4dd: 76 09 jbe 10e4e8 <msdos_format+0x3e7> <== ALWAYS TAKEN
10e4df: 83 bd 34 fd ff ff 01 cmpl $0x1,-0x2cc(%ebp) <== NOT EXECUTED
10e4e6: 74 11 je 10e4f9 <msdos_format+0x3f8> <== NOT EXECUTED
10e4e8: 81 f9 f5 ff 00 00 cmp $0xfff5,%ecx
10e4ee: 76 0f jbe 10e4ff <msdos_format+0x3fe> <== ALWAYS TAKEN
10e4f0: 83 bd 34 fd ff ff 02 cmpl $0x2,-0x2cc(%ebp) <== NOT EXECUTED
10e4f7: 75 06 jne 10e4ff <msdos_format+0x3fe> <== NOT EXECUTED
((fattype == FAT_FAT16) && (data_cluster_cnt > FAT_FAT16_MAX_CLN))) {
sectors_per_cluster *= 2;
10e4f9: d1 e3 shl %ebx <== NOT EXECUTED
10e4fb: 31 c0 xor %eax,%eax <== NOT EXECUTED
10e4fd: eb 02 jmp 10e501 <msdos_format+0x400> <== NOT EXECUTED
}
else {
finished = true;
10e4ff: b0 01 mov $0x1,%al
}
/*
* when maximum cluster size is exceeded, we have invalid data, abort...
*/
if ((sectors_per_cluster * bytes_per_sector)
10e501: 8b 95 38 fd ff ff mov -0x2c8(%ebp),%edx
10e507: 0f af d3 imul %ebx,%edx
10e50a: 81 fa 00 80 00 00 cmp $0x8000,%edx
10e510: 77 10 ja 10e522 <msdos_format+0x421> <== NEVER TAKEN
> MS_BYTES_PER_CLUSTER_LIMIT) {
ret_val = EINVAL;
finished = true;
}
} while (!finished);
10e512: 84 c0 test %al,%al
10e514: 0f 84 6d ff ff ff je 10e487 <msdos_format+0x386> <== NEVER TAKEN
if (ret_val != 0) {
rtems_set_errno_and_return_minus_one(ret_val);
}
else {
*sectors_per_cluster_adj = sectors_per_cluster;
*sectors_per_fat_ptr = sectors_per_fat;
10e51a: 89 b5 a8 fd ff ff mov %esi,-0x258(%ebp)
10e520: eb 17 jmp 10e539 <msdos_format+0x438>
finished = true;
}
} while (!finished);
if (ret_val != 0) {
rtems_set_errno_and_return_minus_one(ret_val);
10e522: e8 e9 b2 00 00 call 119810 <__errno> <== NOT EXECUTED
10e527: c7 00 16 00 00 00 movl $0x16,(%eax) <== NOT EXECUTED
\*=========================================================================*/
{
int ret_val = 0;
uint32_t fatdata_sect_cnt;
uint32_t onebit;
uint32_t sectors_per_cluster_adj = 0;
10e52d: 31 db xor %ebx,%ebx <== NOT EXECUTED
finished = true;
}
} while (!finished);
if (ret_val != 0) {
rtems_set_errno_and_return_minus_one(ret_val);
10e52f: c7 85 3c fd ff ff ff movl $0xffffffff,-0x2c4(%ebp) <== NOT EXECUTED
10e536: ff ff ff
fatdata_sect_cnt,
fmt_params->fat_num,
fmt_params->sectors_per_cluster,
§ors_per_cluster_adj,
&(fmt_params->sectors_per_fat));
fmt_params->sectors_per_cluster = sectors_per_cluster_adj;
10e539: 89 9d a4 fd ff ff mov %ebx,-0x25c(%ebp)
}
/*
* determine media code
*/
if (ret_val == 0) {
10e53f: 83 bd 3c fd ff ff 00 cmpl $0x0,-0x2c4(%ebp)
10e546: 75 5a jne 10e5a2 <msdos_format+0x4a1> <== NEVER TAKEN
if ((rqdata != NULL) &&
10e548: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
10e54c: 74 4b je 10e599 <msdos_format+0x498>
(rqdata->media != 0)) {
10e54e: 8b 45 0c mov 0xc(%ebp),%eax
10e551: 8a 58 15 mov 0x15(%eax),%bl
/*
* determine media code
*/
if (ret_val == 0) {
if ((rqdata != NULL) &&
10e554: 84 db test %bl,%bl
10e556: 74 41 je 10e599 <msdos_format+0x498> <== ALWAYS TAKEN
(rqdata->media != 0)) {
const char valid_media_codes[] =
10e558: 8d bd e8 fd ff ff lea -0x218(%ebp),%edi <== NOT EXECUTED
10e55e: be ac 85 12 00 mov $0x1285ac,%esi <== NOT EXECUTED
10e563: b9 09 00 00 00 mov $0x9,%ecx <== NOT EXECUTED
10e568: f3 a4 rep movsb %ds:(%esi),%es:(%edi) <== NOT EXECUTED
{0xF0,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF};
if (NULL==memchr(valid_media_codes,
10e56a: 56 push %esi <== NOT EXECUTED
10e56b: 6a 09 push $0x9 <== NOT EXECUTED
10e56d: 0f b6 c3 movzbl %bl,%eax <== NOT EXECUTED
10e570: 50 push %eax <== NOT EXECUTED
10e571: 8d 85 e8 fd ff ff lea -0x218(%ebp),%eax <== NOT EXECUTED
10e577: 50 push %eax <== NOT EXECUTED
10e578: e8 c3 ba 00 00 call 11a040 <memchr> <== NOT EXECUTED
10e57d: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
10e580: 85 c0 test %eax,%eax <== NOT EXECUTED
10e582: 75 0d jne 10e591 <msdos_format+0x490> <== NOT EXECUTED
rqdata->media,
sizeof(valid_media_codes))) {
ret_val = -1;
errno = EINVAL;
10e584: e8 87 b2 00 00 call 119810 <__errno> <== NOT EXECUTED
10e589: c7 00 16 00 00 00 movl $0x16,(%eax) <== NOT EXECUTED
10e58f: eb 11 jmp 10e5a2 <msdos_format+0x4a1> <== NOT EXECUTED
}
else {
fmt_params->media_code = rqdata->media;
10e591: 88 9d c9 fd ff ff mov %bl,-0x237(%ebp) <== NOT EXECUTED
10e597: eb 13 jmp 10e5ac <msdos_format+0x4ab> <== NOT EXECUTED
}
}
else {
fmt_params->media_code = FAT_BR_MEDIA_FIXED;
10e599: c6 85 c9 fd ff ff f8 movb $0xf8,-0x237(%ebp)
10e5a0: eb 0a jmp 10e5ac <msdos_format+0x4ab>
}
/*
* determine media code
*/
if (ret_val == 0) {
10e5a2: c7 85 3c fd ff ff ff movl $0xffffffff,-0x2c4(%ebp) <== NOT EXECUTED
10e5a9: ff ff ff
}
/*
* determine location and size of root directory
* for formatting
*/
if (fmt_params->root_dir_sectors > 0) {
10e5ac: 8b 9d b4 fd ff ff mov -0x24c(%ebp),%ebx
10e5b2: 85 db test %ebx,%ebx
10e5b4: 8b 8d a0 fd ff ff mov -0x260(%ebp),%ecx
10e5ba: 74 1e je 10e5da <msdos_format+0x4d9> <== NEVER TAKEN
fmt_params->root_dir_start_sec =
fmt_params->rsvd_sector_cnt
+ (fmt_params-> fat_num*fmt_params->sectors_per_fat);
10e5bc: 0f b6 95 c8 fd ff ff movzbl -0x238(%ebp),%edx
10e5c3: 0f af 95 a8 fd ff ff imul -0x258(%ebp),%edx
10e5ca: 01 ca add %ecx,%edx
10e5cc: 89 95 b8 fd ff ff mov %edx,-0x248(%ebp)
fmt_params->root_dir_fmt_sec_cnt = fmt_params->root_dir_sectors;
10e5d2: 89 9d bc fd ff ff mov %ebx,-0x244(%ebp)
10e5d8: eb 22 jmp 10e5fc <msdos_format+0x4fb>
/*
* for FAT32: root directory is in cluster 2
*/
fmt_params->root_dir_start_sec =
fmt_params->rsvd_sector_cnt
+ (fmt_params-> fat_num*fmt_params->sectors_per_fat);
10e5da: 0f b6 85 c8 fd ff ff movzbl -0x238(%ebp),%eax <== NOT EXECUTED
10e5e1: 0f af 85 a8 fd ff ff imul -0x258(%ebp),%eax <== NOT EXECUTED
10e5e8: 01 c8 add %ecx,%eax <== NOT EXECUTED
10e5ea: 89 85 b8 fd ff ff mov %eax,-0x248(%ebp) <== NOT EXECUTED
fmt_params->root_dir_fmt_sec_cnt = fmt_params->sectors_per_cluster;
10e5f0: 8b 85 a4 fd ff ff mov -0x25c(%ebp),%eax <== NOT EXECUTED
10e5f6: 89 85 bc fd ff ff mov %eax,-0x244(%ebp) <== NOT EXECUTED
}
/*
* determine usable OEMName
*/
if (ret_val == 0) {
10e5fc: 83 bd 3c fd ff ff 00 cmpl $0x0,-0x2c4(%ebp)
10e603: 0f 85 44 07 00 00 jne 10ed4d <msdos_format+0xc4c> <== NEVER TAKEN
const char *from;
char *to = fmt_params->OEMName;
int cnt;
from = "RTEMS"; /* default: make "from" point to OS Name */
if ((rqdata != NULL) &&
10e609: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
10e60d: 74 09 je 10e618 <msdos_format+0x517>
(rqdata->OEMName != NULL)) {
10e60f: 8b 55 0c mov 0xc(%ebp),%edx
10e612: 8b 02 mov (%edx),%eax
if (ret_val == 0) {
const char *from;
char *to = fmt_params->OEMName;
int cnt;
from = "RTEMS"; /* default: make "from" point to OS Name */
if ((rqdata != NULL) &&
10e614: 85 c0 test %eax,%eax
10e616: 75 05 jne 10e61d <msdos_format+0x51c> <== ALWAYS TAKEN
*/
if (ret_val == 0) {
const char *from;
char *to = fmt_params->OEMName;
int cnt;
from = "RTEMS"; /* default: make "from" point to OS Name */
10e618: b8 ac 84 12 00 mov $0x1284ac,%eax
from = rqdata->OEMName;
}
for (cnt = 0;
cnt < (sizeof(fmt_params->OEMName)-1);
cnt++) {
if (isprint((unsigned char)*from)) {
10e61d: 8b 35 d8 62 13 00 mov 0x1362d8,%esi
10e623: bf 09 00 00 00 mov $0x9,%edi
/*
* determine usable OEMName
*/
if (ret_val == 0) {
const char *from;
char *to = fmt_params->OEMName;
10e628: 8d 95 cb fd ff ff lea -0x235(%ebp),%edx
10e62e: eb 21 jmp 10e651 <msdos_format+0x550>
from = rqdata->OEMName;
}
for (cnt = 0;
cnt < (sizeof(fmt_params->OEMName)-1);
cnt++) {
if (isprint((unsigned char)*from)) {
10e630: 8a 08 mov (%eax),%cl
10e632: 0f b6 d9 movzbl %cl,%ebx
10e635: 0f be 5c 1e 01 movsbl 0x1(%esi,%ebx,1),%ebx
10e63a: 80 e3 97 and $0x97,%bl
10e63d: 8d 5a 01 lea 0x1(%edx),%ebx
10e640: 74 07 je 10e649 <msdos_format+0x548>
*to++ = *from++;
10e642: 88 0a mov %cl,(%edx)
10e644: 89 da mov %ebx,%edx
10e646: 40 inc %eax
10e647: eb 05 jmp 10e64e <msdos_format+0x54d>
/*
* non-printable character in given name, so keep stuck
* at that character and replace all following characters
* with a ' '
*/
*to++=' ';
10e649: c6 02 20 movb $0x20,(%edx)
10e64c: 89 da mov %ebx,%edx
}
*to = '\0';
10e64e: c6 03 00 movb $0x0,(%ebx)
from = "RTEMS"; /* default: make "from" point to OS Name */
if ((rqdata != NULL) &&
(rqdata->OEMName != NULL)) {
from = rqdata->OEMName;
}
for (cnt = 0;
10e651: 4f dec %edi
10e652: 75 dc jne 10e630 <msdos_format+0x52f>
10e654: e9 c6 06 00 00 jmp 10ed1f <msdos_format+0xc1e>
const char *from;
char *to = fmt_params->VolLabel;
int cnt;
from = ""; /* default: make "from" point to empty string */
if ((rqdata != NULL) &&
(rqdata->VolLabel != NULL)) {
10e659: 8b 4d 0c mov 0xc(%ebp),%ecx
10e65c: 8b 41 04 mov 0x4(%ecx),%eax
if (ret_val == 0) {
const char *from;
char *to = fmt_params->VolLabel;
int cnt;
from = ""; /* default: make "from" point to empty string */
if ((rqdata != NULL) &&
10e65f: 85 c0 test %eax,%eax
10e661: 74 09 je 10e66c <msdos_format+0x56b> <== NEVER TAKEN
(rqdata->VolLabel != NULL)) {
from = rqdata->VolLabel;
fmt_params->VolLabel_present = true;
10e663: c6 85 e0 fd ff ff 01 movb $0x1,-0x220(%ebp)
10e66a: eb 05 jmp 10e671 <msdos_format+0x570>
*/
if (ret_val == 0) {
const char *from;
char *to = fmt_params->VolLabel;
int cnt;
from = ""; /* default: make "from" point to empty string */
10e66c: b8 4d 81 12 00 mov $0x12814d,%eax
fmt_params->VolLabel_present = true;
}
for (cnt = 0;
cnt < (sizeof(fmt_params->VolLabel)-1);
cnt++) {
if (isprint((unsigned char)*from)) {
10e671: 8b 35 d8 62 13 00 mov 0x1362d8,%esi
10e677: bf 0c 00 00 00 mov $0xc,%edi
/*
* determine usable Volume Label
*/
if (ret_val == 0) {
const char *from;
char *to = fmt_params->VolLabel;
10e67c: 8d 95 d4 fd ff ff lea -0x22c(%ebp),%edx
10e682: eb 21 jmp 10e6a5 <msdos_format+0x5a4>
fmt_params->VolLabel_present = true;
}
for (cnt = 0;
cnt < (sizeof(fmt_params->VolLabel)-1);
cnt++) {
if (isprint((unsigned char)*from)) {
10e684: 8a 08 mov (%eax),%cl
10e686: 0f b6 d9 movzbl %cl,%ebx
10e689: 0f be 5c 1e 01 movsbl 0x1(%esi,%ebx,1),%ebx
10e68e: 80 e3 97 and $0x97,%bl
10e691: 8d 5a 01 lea 0x1(%edx),%ebx
10e694: 74 07 je 10e69d <msdos_format+0x59c>
*to++ = *from++;
10e696: 88 0a mov %cl,(%edx)
10e698: 89 da mov %ebx,%edx
10e69a: 40 inc %eax
10e69b: eb 05 jmp 10e6a2 <msdos_format+0x5a1>
/*
* non-printable character in given name, so keep stuck
* at that character and replace all following characters
* with a ' '
*/
*to++=' ';
10e69d: c6 02 20 movb $0x20,(%edx)
10e6a0: 89 da mov %ebx,%edx
}
*to = '\0';
10e6a2: c6 03 00 movb $0x0,(%ebx)
if ((rqdata != NULL) &&
(rqdata->VolLabel != NULL)) {
from = rqdata->VolLabel;
fmt_params->VolLabel_present = true;
}
for (cnt = 0;
10e6a5: 4f dec %edi
10e6a6: 75 dc jne 10e684 <msdos_format+0x583>
10e6a8: e9 81 06 00 00 jmp 10ed2e <msdos_format+0xc2d>
int rc;
struct timeval time_value;
rc = rtems_clock_get_tod_timeval(&time_value);
if (rc == RTEMS_SUCCESSFUL) {
*volid_ptr = time_value.tv_sec + time_value.tv_sec;
10e6ad: 8b 85 e8 fd ff ff mov -0x218(%ebp),%eax <== NOT EXECUTED
10e6b3: d1 e0 shl %eax <== NOT EXECUTED
10e6b5: eb 05 jmp 10e6bc <msdos_format+0x5bb> <== NOT EXECUTED
}
else {
*volid_ptr = rand();
10e6b7: e8 5c bb 00 00 call 11a218 <rand>
10e6bc: 89 85 e4 fd ff ff mov %eax,-0x21c(%ebp)
ret_val = msdos_format_determine_fmt_params(fd,rqdata,&fmt_params);
}
/*
* if requested, write whole disk/partition with 0xe5
*/
if ((ret_val == 0) &&
10e6c2: 83 bd 44 fd ff ff 00 cmpl $0x0,-0x2bc(%ebp)
10e6c9: 75 6e jne 10e739 <msdos_format+0x638> <== NEVER TAKEN
10e6cb: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
10e6cf: 74 68 je 10e739 <msdos_format+0x638>
(rqdata != NULL) &&
10e6d1: 8b 45 0c mov 0xc(%ebp),%eax
10e6d4: 80 78 16 00 cmpb $0x0,0x16(%eax)
10e6d8: 74 37 je 10e711 <msdos_format+0x610> <== ALWAYS TAKEN
*/
if (ret_val == 0) {
/*
* Read the current MBR to obtain the partition table.
*/
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
10e6da: 53 push %ebx
10e6db: 68 44 85 12 00 push $0x128544
10e6e0: 6a 02 push $0x2
10e6e2: ff 75 0c pushl 0xc(%ebp)
10e6e5: e8 92 f8 ff ff call 10df7c <msdos_format_printf>
"read MRB sector\n");
ret_val = msdos_format_read_sec(fd,
10e6ea: 8b 9d 98 fd ff ff mov -0x268(%ebp),%ebx
| 0, if success, -1 and errno if failed |
\*=========================================================================*/
{
int ret_val = 0;
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
10e6f0: 6a 00 push $0x0
10e6f2: 6a 00 push $0x0
10e6f4: 6a 00 push $0x0
10e6f6: ff b5 40 fd ff ff pushl -0x2c0(%ebp)
10e6fc: e8 63 8e ff ff call 107564 <lseek>
10e701: 83 c4 20 add $0x20,%esp
10e704: 85 d2 test %edx,%edx
10e706: 0f 89 5d 06 00 00 jns 10ed69 <msdos_format+0xc68> <== ALWAYS TAKEN
10e70c: e9 9f 06 00 00 jmp 10edb0 <msdos_format+0xcaf> <== NOT EXECUTED
* if requested, write whole disk/partition with 0xe5
*/
if ((ret_val == 0) &&
(rqdata != NULL) &&
!(rqdata->quick_format)) {
ret_val = msdos_format_fill_sectors
10e711: 51 push %ecx
10e712: 6a e5 push $0xffffffe5
10e714: ff b5 98 fd ff ff pushl -0x268(%ebp)
10e71a: ff b5 9c fd ff ff pushl -0x264(%ebp)
10e720: 31 c9 xor %ecx,%ecx
10e722: 8b 95 40 fd ff ff mov -0x2c0(%ebp),%edx
10e728: 8b 45 0c mov 0xc(%ebp),%eax
10e72b: e8 c7 f8 ff ff call 10dff7 <msdos_format_fill_sectors>
10e730: 89 85 44 fd ff ff mov %eax,-0x2bc(%ebp)
10e736: 83 c4 10 add $0x10,%esp
}
/*
* create master boot record
*/
if (ret_val == 0) {
10e739: 83 bd 44 fd ff ff 00 cmpl $0x0,-0x2bc(%ebp)
10e740: 0f 85 2d 05 00 00 jne 10ec73 <msdos_format+0xb72> <== NEVER TAKEN
10e746: eb 92 jmp 10e6da <msdos_format+0x5d9>
{
uint32_t total_sectors_num16 = 0;
uint32_t total_sectors_num32 = 0;
/* store total sector count in either 16 or 32 bit field in mbr */
if (fmt_params->totl_sector_cnt < 0x10000) {
10e748: 89 d3 mov %edx,%ebx
| Return Value: |
| 0, if success, -1 and errno if failed |
\*=========================================================================*/
{
uint32_t total_sectors_num16 = 0;
uint32_t total_sectors_num32 = 0;
10e74a: 31 d2 xor %edx,%edx
fmt_params.bytes_per_sector,
tmp_sec);
if (ret_val == 0) {
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
"generate MRB sector\n");
ret_val = msdos_format_gen_mbr(tmp_sec,&fmt_params);
10e74c: 8d b5 e8 fd ff ff lea -0x218(%ebp),%esi
* finally we are there: let's fill in the values into the MBR
* but first clear the MRB leaving the partition table.
*/
#define RTEMS_IDE_PARTITION_TABLE_OFFSET 0x1be
#define RTEMS_IDE_PARTITION_TABLE_SIZE (4 * 16)
memset(mbr,0,RTEMS_IDE_PARTITION_TABLE_OFFSET);
10e752: 89 f7 mov %esi,%edi
10e754: b9 be 01 00 00 mov $0x1be,%ecx
10e759: 31 c0 xor %eax,%eax
10e75b: f3 aa rep stos %al,%es:(%edi)
10e75d: 89 8d 44 fd ff ff mov %ecx,-0x2bc(%ebp)
memset(mbr + RTEMS_IDE_PARTITION_TABLE_OFFSET + RTEMS_IDE_PARTITION_TABLE_SIZE,
10e763: 66 c7 45 e6 00 00 movw $0x0,-0x1a(%ebp)
* with 0xEB,....
*/
/*
* fill OEMName
*/
memcpy(FAT_GET_ADDR_BR_OEMNAME(mbr),
10e769: 8b 85 cb fd ff ff mov -0x235(%ebp),%eax
10e76f: 89 85 eb fd ff ff mov %eax,-0x215(%ebp)
10e775: 8b 85 cf fd ff ff mov -0x231(%ebp),%eax
10e77b: 89 85 ef fd ff ff mov %eax,-0x211(%ebp)
fmt_params->OEMName,
FAT_BR_OEMNAME_SIZE);
FAT_SET_BR_BYTES_PER_SECTOR(mbr , fmt_params->bytes_per_sector);
10e781: 8b 85 98 fd ff ff mov -0x268(%ebp),%eax
10e787: 88 85 f3 fd ff ff mov %al,-0x20d(%ebp)
10e78d: c1 e8 08 shr $0x8,%eax
10e790: 88 85 f4 fd ff ff mov %al,-0x20c(%ebp)
FAT_SET_BR_SECTORS_PER_CLUSTER(mbr , fmt_params->sectors_per_cluster);
10e796: 8b 85 a4 fd ff ff mov -0x25c(%ebp),%eax
10e79c: 88 85 f5 fd ff ff mov %al,-0x20b(%ebp)
FAT_SET_BR_RESERVED_SECTORS_NUM(mbr, fmt_params->rsvd_sector_cnt);
10e7a2: 8b 85 a0 fd ff ff mov -0x260(%ebp),%eax
10e7a8: 88 85 f6 fd ff ff mov %al,-0x20a(%ebp)
10e7ae: c1 e8 08 shr $0x8,%eax
10e7b1: 88 85 f7 fd ff ff mov %al,-0x209(%ebp)
/* number of FATs on medium */
FAT_SET_BR_FAT_NUM(mbr , 2); /* standard/recommended value */
10e7b7: c6 85 f8 fd ff ff 02 movb $0x2,-0x208(%ebp)
FAT_SET_BR_FILES_PER_ROOT_DIR(mbr , fmt_params->files_per_root_dir);
10e7be: 8b 85 b0 fd ff ff mov -0x250(%ebp),%eax
10e7c4: 88 85 f9 fd ff ff mov %al,-0x207(%ebp)
10e7ca: c1 e8 08 shr $0x8,%eax
10e7cd: 88 85 fa fd ff ff mov %al,-0x206(%ebp)
FAT_SET_BR_TOTAL_SECTORS_NUM16(mbr , total_sectors_num16);
10e7d3: 88 9d fb fd ff ff mov %bl,-0x205(%ebp)
10e7d9: c1 eb 08 shr $0x8,%ebx
10e7dc: 88 9d fc fd ff ff mov %bl,-0x204(%ebp)
FAT_SET_BR_MEDIA(mbr , fmt_params->media_code);
10e7e2: 8a 85 c9 fd ff ff mov -0x237(%ebp),%al
10e7e8: 88 85 fd fd ff ff mov %al,-0x203(%ebp)
FAT_SET_BR_SECTORS_PER_TRACK(mbr , 255); /* only needed for INT13... */
10e7ee: c6 85 00 fe ff ff ff movb $0xff,-0x200(%ebp)
FAT_SET_BR_NUMBER_OF_HEADS(mbr , 6); /* only needed for INT13... */
10e7f5: c6 85 02 fe ff ff 06 movb $0x6,-0x1fe(%ebp)
FAT_SET_BR_HIDDEN_SECTORS(mbr , 1); /* only needed for INT13... */
10e7fc: c6 85 04 fe ff ff 01 movb $0x1,-0x1fc(%ebp)
FAT_SET_BR_TOTAL_SECTORS_NUM32(mbr , total_sectors_num32);
10e803: 88 95 08 fe ff ff mov %dl,-0x1f8(%ebp)
10e809: 0f b6 c6 movzbl %dh,%eax
10e80c: 88 85 09 fe ff ff mov %al,-0x1f7(%ebp)
10e812: 89 d0 mov %edx,%eax
10e814: c1 e8 10 shr $0x10,%eax
10e817: 88 85 0a fe ff ff mov %al,-0x1f6(%ebp)
10e81d: c1 ea 18 shr $0x18,%edx
10e820: 88 95 0b fe ff ff mov %dl,-0x1f5(%ebp)
if (fmt_params->fattype != FAT_FAT32) {
10e826: 8a 95 ca fd ff ff mov -0x236(%ebp),%dl
10e82c: 80 fa 04 cmp $0x4,%dl
10e82f: 8b 85 a8 fd ff ff mov -0x258(%ebp),%eax
10e835: 74 78 je 10e8af <msdos_format+0x7ae> <== NEVER TAKEN
FAT_SET_BR_SECTORS_PER_FAT(mbr ,fmt_params->sectors_per_fat);
10e837: 88 85 fe fd ff ff mov %al,-0x202(%ebp)
10e83d: c1 e8 08 shr $0x8,%eax
10e840: 88 85 ff fd ff ff mov %al,-0x201(%ebp)
FAT_SET_BR_DRVNUM(mbr , 0); /* only needed for INT13... */
FAT_SET_BR_RSVD1(mbr , 0); /* fill with zero */
FAT_SET_BR_BOOTSIG(mbr , FAT_BR_BOOTSIG_VAL);
10e846: c6 85 0e fe ff ff 29 movb $0x29,-0x1f2(%ebp)
FAT_SET_BR_VOLID(mbr , fmt_params->vol_id); /* volume id */
10e84d: 8b 85 e4 fd ff ff mov -0x21c(%ebp),%eax
10e853: 88 85 0f fe ff ff mov %al,-0x1f1(%ebp)
10e859: 0f b6 cc movzbl %ah,%ecx
10e85c: 88 8d 10 fe ff ff mov %cl,-0x1f0(%ebp)
10e862: 89 c1 mov %eax,%ecx
10e864: c1 e9 10 shr $0x10,%ecx
10e867: 88 8d 11 fe ff ff mov %cl,-0x1ef(%ebp)
10e86d: c1 e8 18 shr $0x18,%eax
10e870: 88 85 12 fe ff ff mov %al,-0x1ee(%ebp)
memcpy(FAT_GET_ADDR_BR_VOLLAB(mbr),
10e876: 8d 85 13 fe ff ff lea -0x1ed(%ebp),%eax
fmt_params->VolLabel,
10e87c: 8d b5 d4 fd ff ff lea -0x22c(%ebp),%esi
FAT_SET_BR_SECTORS_PER_FAT(mbr ,fmt_params->sectors_per_fat);
FAT_SET_BR_DRVNUM(mbr , 0); /* only needed for INT13... */
FAT_SET_BR_RSVD1(mbr , 0); /* fill with zero */
FAT_SET_BR_BOOTSIG(mbr , FAT_BR_BOOTSIG_VAL);
FAT_SET_BR_VOLID(mbr , fmt_params->vol_id); /* volume id */
memcpy(FAT_GET_ADDR_BR_VOLLAB(mbr),
10e882: b9 0b 00 00 00 mov $0xb,%ecx
10e887: 89 c7 mov %eax,%edi
10e889: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
fmt_params->VolLabel,
FAT_BR_VOLLAB_SIZE);
memcpy(FAT_GET_ADDR_BR_FILSYSTYPE(mbr),
10e88b: b8 bb 84 12 00 mov $0x1284bb,%eax
10e890: fe ca dec %dl
10e892: 75 05 jne 10e899 <msdos_format+0x798> <== NEVER TAKEN
10e894: b8 b2 84 12 00 mov $0x1284b2,%eax
10e899: 8b 10 mov (%eax),%edx
10e89b: 89 95 1e fe ff ff mov %edx,-0x1e2(%ebp)
10e8a1: 8b 40 04 mov 0x4(%eax),%eax
10e8a4: 89 85 22 fe ff ff mov %eax,-0x1de(%ebp)
10e8aa: e9 84 00 00 00 jmp 10e933 <msdos_format+0x832>
? "FAT12 "
: "FAT16 ",
FAT_BR_FILSYSTYPE_SIZE);
}
else {
FAT_SET_BR_SECTORS_PER_FAT32(mbr ,fmt_params->sectors_per_fat);
10e8af: 88 85 0c fe ff ff mov %al,-0x1f4(%ebp) <== NOT EXECUTED
10e8b5: 0f b6 d4 movzbl %ah,%edx <== NOT EXECUTED
10e8b8: 88 95 0d fe ff ff mov %dl,-0x1f3(%ebp) <== NOT EXECUTED
10e8be: 89 c2 mov %eax,%edx <== NOT EXECUTED
10e8c0: c1 ea 10 shr $0x10,%edx <== NOT EXECUTED
10e8c3: 88 95 0e fe ff ff mov %dl,-0x1f2(%ebp) <== NOT EXECUTED
10e8c9: c1 e8 18 shr $0x18,%eax <== NOT EXECUTED
10e8cc: 88 85 0f fe ff ff mov %al,-0x1f1(%ebp) <== NOT EXECUTED
FAT_SET_BR_EXT_FLAGS(mbr , 0);
FAT_SET_BR_FSVER(mbr , 0); /* FAT32 Version:0.0 */
FAT_SET_BR_FAT32_ROOT_CLUSTER(mbr , 2); /* put root dir to cluster 2 */
10e8d2: c6 85 14 fe ff ff 02 movb $0x2,-0x1ec(%ebp) <== NOT EXECUTED
FAT_SET_BR_FAT32_FS_INFO_SECTOR(mbr, 1); /* Put fsinfo to rsrvd sec 1*/
10e8d9: c6 85 18 fe ff ff 01 movb $0x1,-0x1e8(%ebp) <== NOT EXECUTED
FAT_SET_BR_FAT32_BK_BOOT_SECTOR(mbr, fmt_params->mbr_copy_sec ); /* Put MBR copy to rsrvd sec */
10e8e0: 8b 85 c0 fd ff ff mov -0x240(%ebp),%eax <== NOT EXECUTED
10e8e6: 88 85 1a fe ff ff mov %al,-0x1e6(%ebp) <== NOT EXECUTED
10e8ec: c1 e8 08 shr $0x8,%eax <== NOT EXECUTED
10e8ef: 88 85 1b fe ff ff mov %al,-0x1e5(%ebp) <== NOT EXECUTED
memset(FAT_GET_ADDR_BR_FAT32_RESERVED(mbr),0,FAT_BR_FAT32_RESERVED_SIZE);
10e8f5: 8d 95 1c fe ff ff lea -0x1e4(%ebp),%edx <== NOT EXECUTED
10e8fb: b9 03 00 00 00 mov $0x3,%ecx <== NOT EXECUTED
10e900: 89 d7 mov %edx,%edi <== NOT EXECUTED
10e902: 8b 85 44 fd ff ff mov -0x2bc(%ebp),%eax <== NOT EXECUTED
10e908: f3 ab rep stos %eax,%es:(%edi) <== NOT EXECUTED
FAT_SET_BR_FAT32_DRVNUM(mbr , 0); /* only needed for INT13... */
FAT_SET_BR_FAT32_RSVD1(mbr , 0); /* fill with zero */
FAT_SET_BR_FAT32_BOOTSIG(mbr ,FAT_BR_FAT32_BOOTSIG_VAL);
10e90a: c6 85 2a fe ff ff 29 movb $0x29,-0x1d6(%ebp) <== NOT EXECUTED
FAT_SET_BR_FAT32_VOLID(mbr , 0); /* not set */
memset(FAT_GET_ADDR_BR_FAT32_VOLLAB(mbr) ,0,FAT_BR_VOLLAB_SIZE);
10e911: 8d 95 2f fe ff ff lea -0x1d1(%ebp),%edx <== NOT EXECUTED
10e917: b1 0b mov $0xb,%cl <== NOT EXECUTED
10e919: 89 d7 mov %edx,%edi <== NOT EXECUTED
10e91b: 31 c0 xor %eax,%eax <== NOT EXECUTED
10e91d: f3 aa rep stos %al,%es:(%edi) <== NOT EXECUTED
memcpy(FAT_GET_ADDR_BR_FAT32_FILSYSTYPE(mbr),
10e91f: c7 85 3a fe ff ff 46 movl $0x33544146,-0x1c6(%ebp) <== NOT EXECUTED
10e926: 41 54 33
10e929: c7 85 3e fe ff ff 32 movl $0x20202032,-0x1c2(%ebp) <== NOT EXECUTED
10e930: 20 20 20
FAT_BR_FILSYSTYPE_SIZE);
}
/*
* add boot record signature
*/
FAT_SET_BR_SIGNATURE(mbr, FAT_BR_SIGNATURE_VAL);
10e933: c6 45 e6 55 movb $0x55,-0x1a(%ebp)
10e937: c6 45 e7 aa movb $0xaa,-0x19(%ebp)
/*
* add jump to boot loader at start of sector
*/
FAT_SET_VAL8(mbr,0,0xeb);
10e93b: c6 85 e8 fd ff ff eb movb $0xeb,-0x218(%ebp)
FAT_SET_VAL8(mbr,1,0x3c);
10e942: c6 85 e9 fd ff ff 3c movb $0x3c,-0x217(%ebp)
FAT_SET_VAL8(mbr,2,0x90);
10e949: c6 85 ea fd ff ff 90 movb $0x90,-0x216(%ebp)
/*
* write master boot record to disk
* also write copy of MBR to disk
*/
if (ret_val == 0) {
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
10e950: 52 push %edx
10e951: 68 55 85 12 00 push $0x128555
10e956: 6a 02 push $0x2
10e958: ff 75 0c pushl 0xc(%ebp)
10e95b: e8 1c f6 ff ff call 10df7c <msdos_format_printf>
"write MRB sector\n");
ret_val = msdos_format_write_sec(fd,
0,
fmt_params.bytes_per_sector,
tmp_sec);
10e960: 8d 9d e8 fd ff ff lea -0x218(%ebp),%ebx
* also write copy of MBR to disk
*/
if (ret_val == 0) {
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
"write MRB sector\n");
ret_val = msdos_format_write_sec(fd,
10e966: 89 1c 24 mov %ebx,(%esp)
10e969: 8b 8d 98 fd ff ff mov -0x268(%ebp),%ecx
10e96f: 31 d2 xor %edx,%edx
10e971: 8b 85 40 fd ff ff mov -0x2c0(%ebp),%eax
10e977: e8 3d f6 ff ff call 10dfb9 <msdos_format_write_sec>
10e97c: 89 85 44 fd ff ff mov %eax,-0x2bc(%ebp)
0,
fmt_params.bytes_per_sector,
tmp_sec);
}
if ((ret_val == 0) &&
10e982: 83 c4 10 add $0x10,%esp
10e985: 85 c0 test %eax,%eax
10e987: 0f 85 e6 02 00 00 jne 10ec73 <msdos_format+0xb72> <== NEVER TAKEN
10e98d: 83 bd c0 fd ff ff 00 cmpl $0x0,-0x240(%ebp)
10e994: 75 10 jne 10e9a6 <msdos_format+0x8a5> <== NEVER TAKEN
}
/*
* for FAT32: initialize info sector on disk
*/
if ((ret_val == 0) &&
(fmt_params.fsinfo_sec != 0)) {
10e996: 8b 95 c4 fd ff ff mov -0x23c(%ebp),%edx
}
}
/*
* for FAT32: initialize info sector on disk
*/
if ((ret_val == 0) &&
10e99c: 85 d2 test %edx,%edx
10e99e: 0f 84 c9 00 00 00 je 10ea6d <msdos_format+0x96c> <== ALWAYS TAKEN
10e9a4: eb 3c jmp 10e9e2 <msdos_format+0x8e1> <== NOT EXECUTED
if ((ret_val == 0) &&
(fmt_params.mbr_copy_sec != 0)) {
/*
* write copy of MBR
*/
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
10e9a6: 50 push %eax <== NOT EXECUTED
10e9a7: 68 67 85 12 00 push $0x128567 <== NOT EXECUTED
10e9ac: 6a 02 push $0x2 <== NOT EXECUTED
10e9ae: ff 75 0c pushl 0xc(%ebp) <== NOT EXECUTED
10e9b1: e8 c6 f5 ff ff call 10df7c <msdos_format_printf> <== NOT EXECUTED
"write back up MRB sector\n");
ret_val = msdos_format_write_sec(fd,
10e9b6: 89 1c 24 mov %ebx,(%esp) <== NOT EXECUTED
10e9b9: 8b 8d 98 fd ff ff mov -0x268(%ebp),%ecx <== NOT EXECUTED
10e9bf: 8b 95 c0 fd ff ff mov -0x240(%ebp),%edx <== NOT EXECUTED
10e9c5: 8b 85 40 fd ff ff mov -0x2c0(%ebp),%eax <== NOT EXECUTED
10e9cb: e8 e9 f5 ff ff call 10dfb9 <msdos_format_write_sec><== NOT EXECUTED
10e9d0: 89 85 44 fd ff ff mov %eax,-0x2bc(%ebp) <== NOT EXECUTED
}
}
/*
* for FAT32: initialize info sector on disk
*/
if ((ret_val == 0) &&
10e9d6: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
10e9d9: 85 c0 test %eax,%eax <== NOT EXECUTED
10e9db: 74 b9 je 10e996 <msdos_format+0x895> <== NOT EXECUTED
10e9dd: e9 91 02 00 00 jmp 10ec73 <msdos_format+0xb72> <== NOT EXECUTED
(fmt_params.fsinfo_sec != 0)) {
ret_val = msdos_format_gen_fsinfo(tmp_sec);
10e9e2: 8d 9d e8 fd ff ff lea -0x218(%ebp),%ebx <== NOT EXECUTED
\*=========================================================================*/
{
/*
* clear fsinfo sector data
*/
memset(fsinfo,0,FAT_TOTAL_FSINFO_SIZE);
10e9e8: b9 80 00 00 00 mov $0x80,%ecx <== NOT EXECUTED
10e9ed: 31 c0 xor %eax,%eax <== NOT EXECUTED
10e9ef: 89 df mov %ebx,%edi <== NOT EXECUTED
10e9f1: f3 ab rep stos %eax,%es:(%edi) <== NOT EXECUTED
/*
* write LEADSIG, STRUCTSIG, TRAILSIG
*/
FAT_SET_FSINFO_LEAD_SIGNATURE (fsinfo,FAT_FSINFO_LEAD_SIGNATURE_VALUE );
10e9f3: c6 85 e8 fd ff ff 52 movb $0x52,-0x218(%ebp) <== NOT EXECUTED
10e9fa: c6 85 e9 fd ff ff 52 movb $0x52,-0x217(%ebp) <== NOT EXECUTED
10ea01: c6 85 ea fd ff ff 61 movb $0x61,-0x216(%ebp) <== NOT EXECUTED
10ea08: c6 85 eb fd ff ff 41 movb $0x41,-0x215(%ebp) <== NOT EXECUTED
FAT_SET_FSINFO_STRUC_SIGNATURE(fsinfo,FAT_FSINFO_STRUC_SIGNATURE_VALUE);
10ea0f: c6 45 cc 72 movb $0x72,-0x34(%ebp) <== NOT EXECUTED
10ea13: c6 45 cd 72 movb $0x72,-0x33(%ebp) <== NOT EXECUTED
10ea17: c6 45 ce 41 movb $0x41,-0x32(%ebp) <== NOT EXECUTED
10ea1b: c6 45 cf 61 movb $0x61,-0x31(%ebp) <== NOT EXECUTED
FAT_SET_FSINFO_TRAIL_SIGNATURE(fsinfo,FAT_FSINFO_TRAIL_SIGNATURE_VALUE);
10ea1f: c6 45 e6 55 movb $0x55,-0x1a(%ebp) <== NOT EXECUTED
10ea23: c6 45 e7 aa movb $0xaa,-0x19(%ebp) <== NOT EXECUTED
/*
* write "empty" values for free cluster count and next cluster number
*/
FAT_SET_FSINFO_FREE_CLUSTER_COUNT(fsinfo+FAT_FSI_INFO,
10ea27: c6 45 d0 ff movb $0xff,-0x30(%ebp) <== NOT EXECUTED
10ea2b: c6 45 d1 ff movb $0xff,-0x2f(%ebp) <== NOT EXECUTED
10ea2f: c6 45 d2 ff movb $0xff,-0x2e(%ebp) <== NOT EXECUTED
10ea33: c6 45 d3 ff movb $0xff,-0x2d(%ebp) <== NOT EXECUTED
0xffffffff);
FAT_SET_FSINFO_NEXT_FREE_CLUSTER (fsinfo+FAT_FSI_INFO,
10ea37: c6 45 d4 ff movb $0xff,-0x2c(%ebp) <== NOT EXECUTED
10ea3b: c6 45 d5 ff movb $0xff,-0x2b(%ebp) <== NOT EXECUTED
10ea3f: c6 45 d6 ff movb $0xff,-0x2a(%ebp) <== NOT EXECUTED
10ea43: c6 45 d7 ff movb $0xff,-0x29(%ebp) <== NOT EXECUTED
/*
* write fsinfo sector
*/
if ((ret_val == 0) &&
(fmt_params.fsinfo_sec != 0)) {
ret_val = msdos_format_write_sec(fd,
10ea47: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10ea4a: 53 push %ebx <== NOT EXECUTED
10ea4b: 8b 8d 98 fd ff ff mov -0x268(%ebp),%ecx <== NOT EXECUTED
10ea51: 8b 85 40 fd ff ff mov -0x2c0(%ebp),%eax <== NOT EXECUTED
10ea57: e8 5d f5 ff ff call 10dfb9 <msdos_format_write_sec><== NOT EXECUTED
10ea5c: 89 85 44 fd ff ff mov %eax,-0x2bc(%ebp) <== NOT EXECUTED
}
/*
* write FAT as all empty
* -> write all FAT sectors as zero
*/
if (ret_val == 0) {
10ea62: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
10ea65: 85 c0 test %eax,%eax <== NOT EXECUTED
10ea67: 0f 85 06 02 00 00 jne 10ec73 <msdos_format+0xb72> <== NOT EXECUTED
ret_val = msdos_format_fill_sectors
10ea6d: 50 push %eax
10ea6e: 6a 00 push $0x0
10ea70: ff b5 98 fd ff ff pushl -0x268(%ebp)
(rqdata,
10ea76: 0f b6 85 c8 fd ff ff movzbl -0x238(%ebp),%eax
10ea7d: 0f af 85 a8 fd ff ff imul -0x258(%ebp),%eax
/*
* write FAT as all empty
* -> write all FAT sectors as zero
*/
if (ret_val == 0) {
ret_val = msdos_format_fill_sectors
10ea84: 50 push %eax
10ea85: 8b 8d a0 fd ff ff mov -0x260(%ebp),%ecx
10ea8b: 8b 95 40 fd ff ff mov -0x2c0(%ebp),%edx
10ea91: 8b 45 0c mov 0xc(%ebp),%eax
10ea94: e8 5e f5 ff ff call 10dff7 <msdos_format_fill_sectors>
10ea99: 89 85 44 fd ff ff mov %eax,-0x2bc(%ebp)
}
/*
* clear/init root directory
* -> write all directory sectors as 0x00
*/
if (ret_val == 0) {
10ea9f: 83 c4 10 add $0x10,%esp
10eaa2: 85 c0 test %eax,%eax
10eaa4: 0f 85 c9 01 00 00 jne 10ec73 <msdos_format+0xb72> <== NEVER TAKEN
ret_val = msdos_format_fill_sectors
10eaaa: 50 push %eax
10eaab: 6a 00 push $0x0
10eaad: ff b5 98 fd ff ff pushl -0x268(%ebp)
10eab3: ff b5 bc fd ff ff pushl -0x244(%ebp)
10eab9: 8b 8d b8 fd ff ff mov -0x248(%ebp),%ecx
10eabf: 8b 95 40 fd ff ff mov -0x2c0(%ebp),%edx
10eac5: 8b 45 0c mov 0xc(%ebp),%eax
10eac8: e8 2a f5 ff ff call 10dff7 <msdos_format_fill_sectors>
10eacd: 89 85 44 fd ff ff mov %eax,-0x2bc(%ebp)
0x00);
}
/*
* write volume label to first entry of directory
*/
if ((ret_val == 0) && fmt_params.VolLabel_present) {
10ead3: 83 c4 10 add $0x10,%esp
10ead6: 85 c0 test %eax,%eax
10ead8: 0f 85 95 01 00 00 jne 10ec73 <msdos_format+0xb72> <== NEVER TAKEN
10eade: 80 bd e0 fd ff ff 00 cmpb $0x0,-0x220(%ebp)
10eae5: 75 0f jne 10eaf6 <msdos_format+0x9f5>
/*
* write FAT entry 0 as (0xffffff00|Media_type)EOC,
* write FAT entry 1 as EOC
* allocate directory in a FAT32 FS
*/
if ((ret_val == 0) && fmt_params.VolLabel_present){
10eae7: 80 bd e0 fd ff ff 00 cmpb $0x0,-0x220(%ebp)
10eaee: 0f 84 7f 01 00 00 je 10ec73 <msdos_format+0xb72>
10eaf4: eb 55 jmp 10eb4b <msdos_format+0xa4a>
}
/*
* write volume label to first entry of directory
*/
if ((ret_val == 0) && fmt_params.VolLabel_present) {
memset(tmp_sec,0,sizeof(tmp_sec));
10eaf6: 8d 95 e8 fd ff ff lea -0x218(%ebp),%edx
10eafc: b9 80 00 00 00 mov $0x80,%ecx
10eb01: 89 d7 mov %edx,%edi
10eb03: 8b 85 44 fd ff ff mov -0x2bc(%ebp),%eax
10eb09: f3 ab rep stos %eax,%es:(%edi)
memcpy(MSDOS_DIR_NAME(tmp_sec),fmt_params.VolLabel,MSDOS_SHORT_NAME_LEN);
10eb0b: 8d b5 d4 fd ff ff lea -0x22c(%ebp),%esi
10eb11: b1 0b mov $0xb,%cl
10eb13: 89 d7 mov %edx,%edi
10eb15: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
*MSDOS_DIR_ATTR(tmp_sec) = MSDOS_ATTR_VOLUME_ID;
10eb17: c6 85 f3 fd ff ff 08 movb $0x8,-0x20d(%ebp)
ret_val = msdos_format_write_sec
10eb1e: 83 ec 0c sub $0xc,%esp
10eb21: 52 push %edx
10eb22: 8b 8d 98 fd ff ff mov -0x268(%ebp),%ecx
10eb28: 8b 95 b8 fd ff ff mov -0x248(%ebp),%edx
10eb2e: 8b 85 40 fd ff ff mov -0x2c0(%ebp),%eax
10eb34: e8 80 f4 ff ff call 10dfb9 <msdos_format_write_sec>
/*
* write FAT entry 0 as (0xffffff00|Media_type)EOC,
* write FAT entry 1 as EOC
* allocate directory in a FAT32 FS
*/
if ((ret_val == 0) && fmt_params.VolLabel_present){
10eb39: 83 c4 10 add $0x10,%esp
10eb3c: 85 c0 test %eax,%eax
10eb3e: 74 a7 je 10eae7 <msdos_format+0x9e6> <== ALWAYS TAKEN
10eb40: 89 85 44 fd ff ff mov %eax,-0x2bc(%ebp) <== NOT EXECUTED
10eb46: e9 28 01 00 00 jmp 10ec73 <msdos_format+0xb72> <== NOT EXECUTED
/*
* empty sector: all clusters are free/do not link further on
*/
memset(tmp_sec,0,sizeof(tmp_sec));
10eb4b: 8d 95 e8 fd ff ff lea -0x218(%ebp),%edx
10eb51: b9 80 00 00 00 mov $0x80,%ecx
10eb56: 31 c0 xor %eax,%eax
10eb58: 89 d7 mov %edx,%edi
10eb5a: f3 ab rep stos %eax,%es:(%edi)
switch(fmt_params.fattype) {
10eb5c: 8a 85 ca fd ff ff mov -0x236(%ebp),%al
10eb62: 3c 02 cmp $0x2,%al
10eb64: 74 24 je 10eb8a <msdos_format+0xa89> <== NEVER TAKEN
10eb66: 3c 04 cmp $0x4,%al
10eb68: 74 43 je 10ebad <msdos_format+0xaac> <== NEVER TAKEN
10eb6a: fe c8 dec %al
10eb6c: 75 7f jne 10ebed <msdos_format+0xaec> <== NEVER TAKEN
case FAT_FAT12:
/* LSBits of FAT entry 0: media_type */
FAT_SET_VAL8(tmp_sec,0,(fmt_params.media_code));
10eb6e: 8a 85 c9 fd ff ff mov -0x237(%ebp),%al
10eb74: 88 85 e8 fd ff ff mov %al,-0x218(%ebp)
/* MSBits of FAT entry 0:0xf, LSBits of FAT entry 1: LSB of EOC */
FAT_SET_VAL8(tmp_sec,1,(0x0f | (FAT_FAT12_EOC << 4)));
10eb7a: c6 85 e9 fd ff ff 8f movb $0x8f,-0x217(%ebp)
/* MSBits of FAT entry 1: MSBits of EOC */
FAT_SET_VAL8(tmp_sec,2,(FAT_FAT12_EOC >> 4));
10eb81: c6 85 ea fd ff ff ff movb $0xff,-0x216(%ebp)
break;
10eb88: eb 78 jmp 10ec02 <msdos_format+0xb01>
case FAT_FAT16:
/* FAT entry 0: 0xff00|media_type */
FAT_SET_VAL8(tmp_sec,0,fmt_params.media_code);
10eb8a: 8a 85 c9 fd ff ff mov -0x237(%ebp),%al <== NOT EXECUTED
10eb90: 88 85 e8 fd ff ff mov %al,-0x218(%ebp) <== NOT EXECUTED
FAT_SET_VAL8(tmp_sec,1,0xff);
10eb96: c6 85 e9 fd ff ff ff movb $0xff,-0x217(%ebp) <== NOT EXECUTED
/* FAT entry 1: EOC */
FAT_SET_VAL16(tmp_sec,2,FAT_FAT16_EOC);
10eb9d: c6 85 ea fd ff ff f8 movb $0xf8,-0x216(%ebp) <== NOT EXECUTED
10eba4: c6 85 eb fd ff ff ff movb $0xff,-0x215(%ebp) <== NOT EXECUTED
break;
10ebab: eb 55 jmp 10ec02 <msdos_format+0xb01> <== NOT EXECUTED
case FAT_FAT32:
/* FAT entry 0: 0xffffff00|media_type */
FAT_SET_VAL32(tmp_sec,0,0xffffff00|fmt_params.media_code);
10ebad: 0f b6 85 c9 fd ff ff movzbl -0x237(%ebp),%eax <== NOT EXECUTED
10ebb4: 88 85 e8 fd ff ff mov %al,-0x218(%ebp) <== NOT EXECUTED
10ebba: c6 85 e9 fd ff ff ff movb $0xff,-0x217(%ebp) <== NOT EXECUTED
10ebc1: c6 85 ea fd ff ff ff movb $0xff,-0x216(%ebp) <== NOT EXECUTED
10ebc8: c6 85 eb fd ff ff ff movb $0xff,-0x215(%ebp) <== NOT EXECUTED
/* FAT entry 1: EOC */
FAT_SET_VAL32(tmp_sec,4,FAT_FAT32_EOC);
10ebcf: c6 85 ec fd ff ff f8 movb $0xf8,-0x214(%ebp) <== NOT EXECUTED
10ebd6: c6 85 ed fd ff ff ff movb $0xff,-0x213(%ebp) <== NOT EXECUTED
10ebdd: c6 85 ee fd ff ff ff movb $0xff,-0x212(%ebp) <== NOT EXECUTED
10ebe4: c6 85 ef fd ff ff 0f movb $0xf,-0x211(%ebp) <== NOT EXECUTED
break;
10ebeb: eb 15 jmp 10ec02 <msdos_format+0xb01> <== NOT EXECUTED
default:
ret_val = -1;
errno = EINVAL;
10ebed: e8 1e ac 00 00 call 119810 <__errno> <== NOT EXECUTED
10ebf2: c7 00 16 00 00 00 movl $0x16,(%eax) <== NOT EXECUTED
/* FAT entry 1: EOC */
FAT_SET_VAL32(tmp_sec,4,FAT_FAT32_EOC);
break;
default:
ret_val = -1;
10ebf8: c7 85 44 fd ff ff ff movl $0xffffffff,-0x2bc(%ebp) <== NOT EXECUTED
10ebff: ff ff ff
errno = EINVAL;
}
if (fmt_params.fattype == FAT_FAT32) {
10ec02: 80 bd ca fd ff ff 04 cmpb $0x4,-0x236(%ebp)
10ec09: 75 1c jne 10ec27 <msdos_format+0xb26> <== ALWAYS TAKEN
/*
* only first valid cluster (cluster number 2) belongs
* to root directory, and is end of chain
* mark this in every copy of the FAT
*/
FAT_SET_VAL32(tmp_sec,8,FAT_FAT32_EOC);
10ec0b: c6 85 f0 fd ff ff f8 movb $0xf8,-0x210(%ebp) <== NOT EXECUTED
10ec12: c6 85 f1 fd ff ff ff movb $0xff,-0x20f(%ebp) <== NOT EXECUTED
10ec19: c6 85 f2 fd ff ff ff movb $0xff,-0x20e(%ebp) <== NOT EXECUTED
10ec20: c6 85 f3 fd ff ff 0f movb $0xf,-0x20d(%ebp) <== NOT EXECUTED
/* FAT entry 1: EOC */
FAT_SET_VAL32(tmp_sec,4,FAT_FAT32_EOC);
break;
default:
ret_val = -1;
10ec27: 31 db xor %ebx,%ebx
ret_val = msdos_format_write_sec
(fd,
fmt_params.rsvd_sector_cnt
+ (i * fmt_params.sectors_per_fat),
fmt_params.bytes_per_sector,
tmp_sec);
10ec29: 8d b5 e8 fd ff ff lea -0x218(%ebp),%esi
10ec2f: eb 2e jmp 10ec5f <msdos_format+0xb5e>
FAT_SET_VAL32(tmp_sec,8,FAT_FAT32_EOC);
}
for (i = 0;
(i < fmt_params.fat_num) && (ret_val == 0);
i++) {
ret_val = msdos_format_write_sec
10ec31: 83 ec 0c sub $0xc,%esp
(fd,
fmt_params.rsvd_sector_cnt
+ (i * fmt_params.sectors_per_fat),
10ec34: 8b 95 a8 fd ff ff mov -0x258(%ebp),%edx
10ec3a: 0f af d3 imul %ebx,%edx
}
for (i = 0;
(i < fmt_params.fat_num) && (ret_val == 0);
i++) {
ret_val = msdos_format_write_sec
(fd,
10ec3d: 03 95 a0 fd ff ff add -0x260(%ebp),%edx
FAT_SET_VAL32(tmp_sec,8,FAT_FAT32_EOC);
}
for (i = 0;
(i < fmt_params.fat_num) && (ret_val == 0);
i++) {
ret_val = msdos_format_write_sec
10ec43: 56 push %esi
10ec44: 8b 8d 98 fd ff ff mov -0x268(%ebp),%ecx
10ec4a: 8b 85 40 fd ff ff mov -0x2c0(%ebp),%eax
10ec50: e8 64 f3 ff ff call 10dfb9 <msdos_format_write_sec>
10ec55: 89 85 44 fd ff ff mov %eax,-0x2bc(%ebp)
*/
FAT_SET_VAL32(tmp_sec,8,FAT_FAT32_EOC);
}
for (i = 0;
(i < fmt_params.fat_num) && (ret_val == 0);
i++) {
10ec5b: 43 inc %ebx
10ec5c: 83 c4 10 add $0x10,%esp
* mark this in every copy of the FAT
*/
FAT_SET_VAL32(tmp_sec,8,FAT_FAT32_EOC);
}
for (i = 0;
(i < fmt_params.fat_num) && (ret_val == 0);
10ec5f: 0f b6 85 c8 fd ff ff movzbl -0x238(%ebp),%eax
* to root directory, and is end of chain
* mark this in every copy of the FAT
*/
FAT_SET_VAL32(tmp_sec,8,FAT_FAT32_EOC);
}
for (i = 0;
10ec66: 39 c3 cmp %eax,%ebx
10ec68: 7d 09 jge 10ec73 <msdos_format+0xb72>
(i < fmt_params.fat_num) && (ret_val == 0);
10ec6a: 83 bd 44 fd ff ff 00 cmpl $0x0,-0x2bc(%ebp)
10ec71: 74 be je 10ec31 <msdos_format+0xb30> <== ALWAYS TAKEN
/*
* cleanup:
* sync and unlock disk
* free any data structures (not needed now)
*/
if (fd != -1) {
10ec73: 83 bd 40 fd ff ff ff cmpl $0xffffffff,-0x2c0(%ebp)
10ec7a: 0f 84 3f 01 00 00 je 10edbf <msdos_format+0xcbe> <== NEVER TAKEN
close(fd);
10ec80: 83 ec 0c sub $0xc,%esp
10ec83: ff b5 40 fd ff ff pushl -0x2c0(%ebp)
10ec89: e8 6e 83 ff ff call 106ffc <close>
10ec8e: 83 c4 10 add $0x10,%esp
10ec91: e9 29 01 00 00 jmp 10edbf <msdos_format+0xcbe>
/*
* compute formatting parameters
*/
if (ret_val == 0) {
ret_val = msdos_format_determine_fmt_params(fd,rqdata,&fmt_params);
10ec96: 8d 95 98 fd ff ff lea -0x268(%ebp),%edx
uint32_t fatdata_sect_cnt;
uint32_t onebit;
uint32_t sectors_per_cluster_adj = 0;
uint64_t total_size = 0;
memset(fmt_params,0,sizeof(*fmt_params));
10ec9c: b9 14 00 00 00 mov $0x14,%ecx
10eca1: 89 d7 mov %edx,%edi
10eca3: 8b 85 44 fd ff ff mov -0x2bc(%ebp),%eax
10eca9: f3 ab rep stos %eax,%es:(%edi)
return ioctl(fd, RTEMS_BLKIO_GETMEDIABLKSIZE, media_block_size);
}
static inline int rtems_disk_fd_get_block_size(int fd, uint32_t *block_size)
{
return ioctl(fd, RTEMS_BLKIO_GETBLKSIZE, block_size);
10ecab: 50 push %eax
10ecac: 52 push %edx
10ecad: 68 03 42 04 40 push $0x40044203
10ecb2: ff b5 40 fd ff ff pushl -0x2c0(%ebp)
10ecb8: e8 bb 86 ff ff call 107378 <ioctl>
10ecbd: 89 85 3c fd ff ff mov %eax,-0x2c4(%ebp)
* At least one thing we don't have to magically guess...
*/
if (ret_val == 0) {
ret_val = rtems_disk_fd_get_block_size(fd, &fmt_params->bytes_per_sector);
}
if (ret_val == 0) {
10ecc3: 83 c4 10 add $0x10,%esp
10ecc6: 85 c0 test %eax,%eax
10ecc8: 0f 85 de f8 ff ff jne 10e5ac <msdos_format+0x4ab> <== NEVER TAKEN
10ecce: e9 ed f4 ff ff jmp 10e1c0 <msdos_format+0xbf>
ret_val = EINVAL;
}
}
if (ret_val == 0)
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
10ecd3: 0f b6 85 c8 fd ff ff movzbl -0x238(%ebp),%eax
10ecda: 50 push %eax
10ecdb: 68 81 85 12 00 push $0x128581
10ece0: 6a 02 push $0x2
10ece2: ff 75 0c pushl 0xc(%ebp)
10ece5: e8 92 f2 ff ff call 10df7c <msdos_format_printf>
/*
* determine FAT type and sectors per cluster
* depends on
*/
if (ret_val == 0) {
fmt_params->sectors_per_cluster = 1;
10ecea: c7 85 a4 fd ff ff 01 movl $0x1,-0x25c(%ebp)
10ecf1: 00 00 00
if ((rqdata != NULL) &&
10ecf4: 83 c4 10 add $0x10,%esp
10ecf7: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
10ecfb: 0f 85 42 f5 ff ff jne 10e243 <msdos_format+0x142> <== NEVER TAKEN
* limiting values for disk size, fat type, sectors per cluster
* NOTE: maximum sect_per_clust is arbitrarily choosen with values that
* are a compromise concerning capacity and efficency
*/
uint32_t fat12_sect_per_clust = 8;
uint32_t fat16_sect_per_clust = 32;
10ed01: ba 20 00 00 00 mov $0x20,%edx
/*
* limiting values for disk size, fat type, sectors per cluster
* NOTE: maximum sect_per_clust is arbitrarily choosen with values that
* are a compromise concerning capacity and efficency
*/
uint32_t fat12_sect_per_clust = 8;
10ed06: b8 08 00 00 00 mov $0x8,%eax
10ed0b: e9 9a f5 ff ff jmp 10e2aa <msdos_format+0x1a9>
}
else if (rqdata->fat_num <= 6) {
fmt_params->fat_num = rqdata->fat_num;
}
else {
ret_val = EINVAL;
10ed10: c7 85 3c fd ff ff 16 movl $0x16,-0x2c4(%ebp) <== NOT EXECUTED
10ed17: 00 00 00
10ed1a: e9 8d f8 ff ff jmp 10e5ac <msdos_format+0x4ab> <== NOT EXECUTED
if (ret_val == 0) {
const char *from;
char *to = fmt_params->VolLabel;
int cnt;
from = ""; /* default: make "from" point to empty string */
if ((rqdata != NULL) &&
10ed1f: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
10ed23: 0f 85 30 f9 ff ff jne 10e659 <msdos_format+0x558>
10ed29: e9 3e f9 ff ff jmp 10e66c <msdos_format+0x56b>
{
int ret_val = 0;
int rc;
struct timeval time_value;
rc = rtems_clock_get_tod_timeval(&time_value);
10ed2e: 83 ec 0c sub $0xc,%esp
10ed31: 8d 85 e8 fd ff ff lea -0x218(%ebp),%eax
10ed37: 50 push %eax
10ed38: e8 c3 58 00 00 call 114600 <rtems_clock_get_tod_timeval>
if (rc == RTEMS_SUCCESSFUL) {
10ed3d: 83 c4 10 add $0x10,%esp
10ed40: 85 c0 test %eax,%eax
10ed42: 0f 84 65 f9 ff ff je 10e6ad <msdos_format+0x5ac> <== NEVER TAKEN
10ed48: e9 6a f9 ff ff jmp 10e6b7 <msdos_format+0x5b6>
}
/*
* Phuuu.... That's it.
*/
if (ret_val != 0) {
rtems_set_errno_and_return_minus_one(ret_val);
10ed4d: e8 be aa 00 00 call 119810 <__errno> <== NOT EXECUTED
10ed52: 8b 95 3c fd ff ff mov -0x2c4(%ebp),%edx <== NOT EXECUTED
10ed58: 89 10 mov %edx,(%eax) <== NOT EXECUTED
10ed5a: c7 85 44 fd ff ff ff movl $0xffffffff,-0x2bc(%ebp) <== NOT EXECUTED
10ed61: ff ff ff
10ed64: e9 59 f9 ff ff jmp 10e6c2 <msdos_format+0x5c1> <== NOT EXECUTED
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
ret_val = -1;
}
if (ret_val == 0) {
if (0 > read(fd,buffer,sector_size)) {
10ed69: 50 push %eax
10ed6a: 53 push %ebx
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
"read MRB sector\n");
ret_val = msdos_format_read_sec(fd,
0,
fmt_params.bytes_per_sector,
tmp_sec);
10ed6b: 8d 85 e8 fd ff ff lea -0x218(%ebp),%eax
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
ret_val = -1;
}
if (ret_val == 0) {
if (0 > read(fd,buffer,sector_size)) {
10ed71: 50 push %eax
10ed72: ff b5 40 fd ff ff pushl -0x2c0(%ebp)
10ed78: e8 4b 4e 00 00 call 113bc8 <read>
10ed7d: 83 c4 10 add $0x10,%esp
10ed80: 85 c0 test %eax,%eax
10ed82: 78 2c js 10edb0 <msdos_format+0xcaf> <== NEVER TAKEN
ret_val = msdos_format_read_sec(fd,
0,
fmt_params.bytes_per_sector,
tmp_sec);
if (ret_val == 0) {
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
10ed84: 50 push %eax
10ed85: 68 95 85 12 00 push $0x128595
10ed8a: 6a 02 push $0x2
10ed8c: ff 75 0c pushl 0xc(%ebp)
10ed8f: e8 e8 f1 ff ff call 10df7c <msdos_format_printf>
{
uint32_t total_sectors_num16 = 0;
uint32_t total_sectors_num32 = 0;
/* store total sector count in either 16 or 32 bit field in mbr */
if (fmt_params->totl_sector_cnt < 0x10000) {
10ed94: 8b 95 9c fd ff ff mov -0x264(%ebp),%edx
10ed9a: 83 c4 10 add $0x10,%esp
/*-------------------------------------------------------------------------*\
| Return Value: |
| 0, if success, -1 and errno if failed |
\*=========================================================================*/
{
uint32_t total_sectors_num16 = 0;
10ed9d: 31 db xor %ebx,%ebx
uint32_t total_sectors_num32 = 0;
/* store total sector count in either 16 or 32 bit field in mbr */
if (fmt_params->totl_sector_cnt < 0x10000) {
10ed9f: 81 fa ff ff 00 00 cmp $0xffff,%edx
10eda5: 0f 87 a1 f9 ff ff ja 10e74c <msdos_format+0x64b> <== NEVER TAKEN
10edab: e9 98 f9 ff ff jmp 10e748 <msdos_format+0x647>
}
}
}
}
if (ret_val == 0) {
10edb0: c7 85 44 fd ff ff ff movl $0xffffffff,-0x2bc(%ebp) <== NOT EXECUTED
10edb7: ff ff ff
10edba: e9 b4 fe ff ff jmp 10ec73 <msdos_format+0xb72> <== NOT EXECUTED
if (fd != -1) {
close(fd);
}
return ret_val;
}
10edbf: 8b 85 44 fd ff ff mov -0x2bc(%ebp),%eax
10edc5: 8d 65 f4 lea -0xc(%ebp),%esp
10edc8: 5b pop %ebx
10edc9: 5e pop %esi
10edca: 5f pop %edi
10edcb: 5d pop %ebp
10edcc: c3 ret
0010dff7 <msdos_format_fill_sectors>:
)
/*-------------------------------------------------------------------------*\
| Return Value: |
| 0, if success, -1 and errno if failed |
\*=========================================================================*/
{
10dff7: 55 push %ebp
10dff8: 89 e5 mov %esp,%ebp
10dffa: 57 push %edi
10dffb: 56 push %esi
10dffc: 53 push %ebx
10dffd: 83 ec 38 sub $0x38,%esp
10e000: 89 c6 mov %eax,%esi
10e002: 89 55 dc mov %edx,-0x24(%ebp)
10e005: 89 4d e0 mov %ecx,-0x20(%ebp)
10e008: 8a 45 10 mov 0x10(%ebp),%al
10e00b: 88 45 e4 mov %al,-0x1c(%ebp)
/*
* allocate and fill buffer
*/
if (ret_val == 0) {
fill_buffer = malloc(sector_size);
10e00e: ff 75 0c pushl 0xc(%ebp)
10e011: e8 f2 96 ff ff call 107708 <malloc>
10e016: 89 c3 mov %eax,%ebx
if (fill_buffer == NULL) {
10e018: 83 c4 10 add $0x10,%esp
10e01b: 85 c0 test %eax,%eax
10e01d: 75 10 jne 10e02f <msdos_format_fill_sectors+0x38><== ALWAYS TAKEN
errno = ENOMEM;
10e01f: e8 ec b7 00 00 call 119810 <__errno> <== NOT EXECUTED
10e024: c7 00 0c 00 00 00 movl $0xc,(%eax) <== NOT EXECUTED
ret_val = -1;
10e02a: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
10e02d: eb 0c jmp 10e03b <msdos_format_fill_sectors+0x44><== NOT EXECUTED
}
else {
memset(fill_buffer,fill_byte,sector_size);
10e02f: 89 c7 mov %eax,%edi
10e031: 8b 4d 0c mov 0xc(%ebp),%ecx
10e034: 8a 45 e4 mov -0x1c(%ebp),%al
10e037: f3 aa rep stos %al,%es:(%edi)
/*-------------------------------------------------------------------------*\
| Return Value: |
| 0, if success, -1 and errno if failed |
\*=========================================================================*/
{
int ret_val = 0;
10e039: 31 c0 xor %eax,%eax
else {
memset(fill_buffer,fill_byte,sector_size);
}
}
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
10e03b: 57 push %edi
10e03c: 68 84 84 12 00 push $0x128484
10e041: 6a 02 push $0x2
10e043: 56 push %esi
10e044: 89 45 d4 mov %eax,-0x2c(%ebp)
10e047: e8 30 ff ff ff call 10df7c <msdos_format_printf>
10e04c: 6b 55 08 64 imul $0x64,0x8(%ebp),%edx
10e050: 89 55 e4 mov %edx,-0x1c(%ebp)
"Filling : ");
/*
* write to consecutive sectors
*/
while ((ret_val == 0) &&
10e053: 83 c4 10 add $0x10,%esp
10e056: 8b 7d e0 mov -0x20(%ebp),%edi
\*=========================================================================*/
{
int ret_val = 0;
char *fill_buffer = NULL;
uint32_t total_sectors = sector_cnt;
int last_percent = -1;
10e059: c7 45 e0 ff ff ff ff movl $0xffffffff,-0x20(%ebp)
}
/*=========================================================================* \
| Function: |
\*-------------------------------------------------------------------------*/
static int msdos_format_fill_sectors
10e060: 8b 55 08 mov 0x8(%ebp),%edx
10e063: 01 fa add %edi,%edx
10e065: 89 55 d8 mov %edx,-0x28(%ebp)
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
"Filling : ");
/*
* write to consecutive sectors
*/
while ((ret_val == 0) &&
10e068: 8b 45 d4 mov -0x2c(%ebp),%eax
10e06b: eb 3e jmp 10e0ab <msdos_format_fill_sectors+0xb4>
(sector_cnt > 0)) {
int percent = (sector_cnt * 100) / total_sectors;
10e06d: 8b 45 e4 mov -0x1c(%ebp),%eax
10e070: 31 d2 xor %edx,%edx
10e072: f7 75 08 divl 0x8(%ebp)
if (percent != last_percent) {
10e075: 3b 45 e0 cmp -0x20(%ebp),%eax
10e078: 74 18 je 10e092 <msdos_format_fill_sectors+0x9b>
if ((percent & 1) == 0)
10e07a: 89 45 e0 mov %eax,-0x20(%ebp)
10e07d: a8 01 test $0x1,%al
10e07f: 75 11 jne 10e092 <msdos_format_fill_sectors+0x9b>
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL, ".");
10e081: 51 push %ecx
10e082: 68 d3 88 12 00 push $0x1288d3
10e087: 6a 02 push $0x2
10e089: 56 push %esi
10e08a: e8 ed fe ff ff call 10df7c <msdos_format_printf>
10e08f: 83 c4 10 add $0x10,%esp
last_percent = percent;
}
ret_val = msdos_format_write_sec(fd,start_sector,sector_size,fill_buffer);
10e092: 83 ec 0c sub $0xc,%esp
10e095: 53 push %ebx
10e096: 8b 4d 0c mov 0xc(%ebp),%ecx
10e099: 89 fa mov %edi,%edx
10e09b: 8b 45 dc mov -0x24(%ebp),%eax
10e09e: e8 16 ff ff ff call 10dfb9 <msdos_format_write_sec>
start_sector++;
10e0a3: 47 inc %edi
10e0a4: 83 6d e4 64 subl $0x64,-0x1c(%ebp)
10e0a8: 83 c4 10 add $0x10,%esp
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
"Filling : ");
/*
* write to consecutive sectors
*/
while ((ret_val == 0) &&
10e0ab: 39 7d d8 cmp %edi,-0x28(%ebp)
10e0ae: 74 04 je 10e0b4 <msdos_format_fill_sectors+0xbd>
10e0b0: 85 c0 test %eax,%eax
10e0b2: 74 b9 je 10e06d <msdos_format_fill_sectors+0x76><== ALWAYS TAKEN
ret_val = msdos_format_write_sec(fd,start_sector,sector_size,fill_buffer);
start_sector++;
sector_cnt--;
}
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL, "\n");
10e0b4: 52 push %edx
10e0b5: 68 e3 83 12 00 push $0x1283e3
10e0ba: 6a 02 push $0x2
10e0bc: 56 push %esi
10e0bd: 89 45 d4 mov %eax,-0x2c(%ebp)
10e0c0: e8 b7 fe ff ff call 10df7c <msdos_format_printf>
if (ret_val)
10e0c5: 83 c4 10 add $0x10,%esp
10e0c8: 8b 45 d4 mov -0x2c(%ebp),%eax
10e0cb: 85 c0 test %eax,%eax
10e0cd: 74 14 je 10e0e3 <msdos_format_fill_sectors+0xec><== ALWAYS TAKEN
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_INFO,
10e0cf: 57 push %edi <== NOT EXECUTED
10e0d0: 68 8f 84 12 00 push $0x12848f <== NOT EXECUTED
10e0d5: 6a 01 push $0x1 <== NOT EXECUTED
10e0d7: 56 push %esi <== NOT EXECUTED
10e0d8: e8 9f fe ff ff call 10df7c <msdos_format_printf> <== NOT EXECUTED
10e0dd: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
10e0e0: 8b 45 d4 mov -0x2c(%ebp),%eax <== NOT EXECUTED
"filling error on sector: %d\n", start_sector);
/*
* cleanup
*/
if (fill_buffer != NULL) {
10e0e3: 85 db test %ebx,%ebx
10e0e5: 74 12 je 10e0f9 <msdos_format_fill_sectors+0x102><== NEVER TAKEN
free(fill_buffer);
10e0e7: 83 ec 0c sub $0xc,%esp
10e0ea: 53 push %ebx
10e0eb: 89 45 d4 mov %eax,-0x2c(%ebp)
10e0ee: e8 39 91 ff ff call 10722c <free>
10e0f3: 83 c4 10 add $0x10,%esp
10e0f6: 8b 45 d4 mov -0x2c(%ebp),%eax
fill_buffer = NULL;
}
return ret_val;
}
10e0f9: 8d 65 f4 lea -0xc(%ebp),%esp
10e0fc: 5b pop %ebx
10e0fd: 5e pop %esi
10e0fe: 5f pop %edi
10e0ff: 5d pop %ebp
10e100: c3 ret
0010df7c <msdos_format_printf>:
*/
static void
msdos_format_printf (const msdos_format_request_param_t *rqdata,
int info_level,
const char *format, ...)
{
10df7c: 55 push %ebp
10df7d: 89 e5 mov %esp,%ebp
10df7f: 83 ec 08 sub $0x8,%esp
10df82: 8b 45 08 mov 0x8(%ebp),%eax
va_list args;
va_start (args, format);
10df85: 8d 55 14 lea 0x14(%ebp),%edx
if (rqdata != NULL && rqdata->info_level >= info_level)
10df88: 85 c0 test %eax,%eax
10df8a: 74 2b je 10dfb7 <msdos_format_printf+0x3b>
10df8c: 8b 4d 0c mov 0xc(%ebp),%ecx
10df8f: 39 48 1c cmp %ecx,0x1c(%eax)
10df92: 7c 23 jl 10dfb7 <msdos_format_printf+0x3b><== ALWAYS TAKEN
{
vfprintf (stdout, format, args);
10df94: 50 push %eax <== NOT EXECUTED
10df95: 52 push %edx <== NOT EXECUTED
10df96: ff 75 10 pushl 0x10(%ebp) <== NOT EXECUTED
10df99: a1 e0 62 13 00 mov 0x1362e0,%eax <== NOT EXECUTED
10df9e: ff 70 08 pushl 0x8(%eax) <== NOT EXECUTED
10dfa1: e8 8a 37 01 00 call 121730 <vfprintf> <== NOT EXECUTED
fflush (stdout);
10dfa6: 5a pop %edx <== NOT EXECUTED
10dfa7: a1 e0 62 13 00 mov 0x1362e0,%eax <== NOT EXECUTED
10dfac: ff 70 08 pushl 0x8(%eax) <== NOT EXECUTED
10dfaf: e8 c4 bb 00 00 call 119b78 <fflush> <== NOT EXECUTED
10dfb4: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
va_end (args);
}
10dfb7: c9 leave
10dfb8: c3 ret
0010dfb9 <msdos_format_write_sec>:
)
/*-------------------------------------------------------------------------*\
| Return Value: |
| 0, if success, -1 and errno if failed |
\*=========================================================================*/
{
10dfb9: 55 push %ebp
10dfba: 89 e5 mov %esp,%ebp
10dfbc: 57 push %edi
10dfbd: 56 push %esi
10dfbe: 53 push %ebx
10dfbf: 83 ec 1c sub $0x1c,%esp
10dfc2: 89 c3 mov %eax,%ebx
10dfc4: 89 ce mov %ecx,%esi
int ret_val = 0;
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
10dfc6: 6a 00 push $0x0
10dfc8: 89 d0 mov %edx,%eax
10dfca: f7 e1 mul %ecx
10dfcc: 52 push %edx
10dfcd: 50 push %eax
10dfce: 53 push %ebx
10dfcf: e8 90 95 ff ff call 107564 <lseek>
10dfd4: 83 c4 10 add $0x10,%esp
10dfd7: 83 c8 ff or $0xffffffff,%eax
10dfda: 85 d2 test %edx,%edx
10dfdc: 78 11 js 10dfef <msdos_format_write_sec+0x36><== NEVER TAKEN
ret_val = -1;
}
if (ret_val == 0) {
if (0 > write(fd,buffer,sector_size)) {
10dfde: 57 push %edi
10dfdf: 56 push %esi
10dfe0: ff 75 08 pushl 0x8(%ebp)
10dfe3: 53 push %ebx
10dfe4: e8 5f c8 ff ff call 10a848 <write>
10dfe9: 83 c4 10 add $0x10,%esp
10dfec: c1 f8 1f sar $0x1f,%eax
ret_val = -1;
}
}
return ret_val;
}
10dfef: 8d 65 f4 lea -0xc(%ebp),%esp
10dff2: 5b pop %ebx
10dff3: 5e pop %esi
10dff4: 5f pop %edi
10dff5: 5d pop %ebp
10dff6: c3 ret
0011742c <msdos_get_dotdot_dir_info_cluster_num_and_offset>:
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t cln,
fat_dir_pos_t *dir_pos,
char *dir_entry
)
{
11742c: 55 push %ebp
11742d: 89 e5 mov %esp,%ebp
11742f: 57 push %edi
117430: 56 push %esi
117431: 53 push %ebx
117432: 83 ec 70 sub $0x70,%esp
117435: 8b 7d 0c mov 0xc(%ebp),%edi
int rc = RC_OK;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
117438: 8b 45 08 mov 0x8(%ebp),%eax
11743b: 8b 70 08 mov 0x8(%eax),%esi
fat_file_fd_t *fat_fd = NULL;
11743e: c7 45 a4 00 00 00 00 movl $0x0,-0x5c(%ebp)
uint32_t cl4find = 0;
/*
* open fat-file corresponded to ".."
*/
rc = fat_file_open(&fs_info->fat, dir_pos, &fat_fd);
117445: 8d 45 a4 lea -0x5c(%ebp),%eax
117448: 50 push %eax
117449: ff 75 10 pushl 0x10(%ebp)
11744c: 56 push %esi
11744d: e8 44 a4 ff ff call 111896 <fat_file_open>
117452: 89 c3 mov %eax,%ebx
if (rc != RC_OK)
117454: 83 c4 10 add $0x10,%esp
117457: 85 c0 test %eax,%eax
117459: 0f 85 bd 01 00 00 jne 11761c <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x1f0><== NEVER TAKEN
return rc;
fat_fd->cln = cln;
11745f: 8b 45 a4 mov -0x5c(%ebp),%eax
117462: 89 78 1c mov %edi,0x1c(%eax)
fat_fd->fat_file_type = FAT_DIRECTORY;
117465: c7 40 10 00 00 00 00 movl $0x0,0x10(%eax)
fat_fd->size_limit = MSDOS_MAX_DIR_LENGHT;
11746c: c7 40 14 00 00 20 00 movl $0x200000,0x14(%eax)
fat_fd->map.file_cln = 0;
117473: c7 40 34 00 00 00 00 movl $0x0,0x34(%eax)
fat_fd->map.disk_cln = fat_fd->cln;
11747a: 89 78 38 mov %edi,0x38(%eax)
rc = fat_file_size(&fs_info->fat, fat_fd);
11747d: 57 push %edi
11747e: 57 push %edi
11747f: 50 push %eax
117480: 56 push %esi
117481: e8 06 ad ff ff call 11218c <fat_file_size>
117486: 89 c3 mov %eax,%ebx
if (rc != RC_OK)
117488: 83 c4 10 add $0x10,%esp
11748b: 85 c0 test %eax,%eax
11748d: 74 05 je 117494 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x68><== ALWAYS TAKEN
11748f: e9 6b 01 00 00 jmp 1175ff <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x1d3><== NOT EXECUTED
fat_file_close(&fs_info->fat, fat_fd);
return rc;
}
/* find "." node in opened directory */
memset(dot_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
117494: 8d 55 a8 lea -0x58(%ebp),%edx
117497: b9 08 00 00 00 mov $0x8,%ecx
11749c: 89 d7 mov %edx,%edi
11749e: f3 ab rep stos %eax,%es:(%edi)
msdos_long_to_short(".", 1, dot_node, MSDOS_SHORT_NAME_LEN);
1174a0: 6a 0b push $0xb
1174a2: 52 push %edx
1174a3: 6a 01 push $0x1
1174a5: 68 d3 88 12 00 push $0x1288d3
1174aa: 89 55 90 mov %edx,-0x70(%ebp)
1174ad: e8 5c f2 ff ff call 11670e <msdos_long_to_short>
rc = msdos_find_name_in_fat_file(mt_entry, fat_fd, false, ".", 1,
1174b2: 8b 55 90 mov -0x70(%ebp),%edx
1174b5: 52 push %edx
1174b6: ff 75 10 pushl 0x10(%ebp)
1174b9: 6a 01 push $0x1
1174bb: 6a 01 push $0x1
1174bd: 68 d3 88 12 00 push $0x1288d3
1174c2: 6a 00 push $0x0
1174c4: ff 75 a4 pushl -0x5c(%ebp)
1174c7: ff 75 08 pushl 0x8(%ebp)
1174ca: e8 34 f7 ff ff call 116c03 <msdos_find_name_in_fat_file>
1174cf: 89 c3 mov %eax,%ebx
MSDOS_NAME_SHORT, dir_pos, dot_node);
if (rc != RC_OK)
1174d1: 83 c4 30 add $0x30,%esp
1174d4: 85 c0 test %eax,%eax
1174d6: 74 05 je 1174dd <msdos_get_dotdot_dir_info_cluster_num_and_offset+0xb1><== ALWAYS TAKEN
1174d8: e9 22 01 00 00 jmp 1175ff <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x1d3><== NOT EXECUTED
fat_file_close(&fs_info->fat, fat_fd);
return rc;
}
/* find ".." node in opened directory */
memset(dotdot_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
1174dd: 8d 55 c8 lea -0x38(%ebp),%edx
1174e0: b9 08 00 00 00 mov $0x8,%ecx
1174e5: 89 d7 mov %edx,%edi
1174e7: f3 ab rep stos %eax,%es:(%edi)
msdos_long_to_short("..", 2, dotdot_node, MSDOS_SHORT_NAME_LEN);
1174e9: 6a 0b push $0xb
1174eb: 52 push %edx
1174ec: 6a 02 push $0x2
1174ee: 68 d2 88 12 00 push $0x1288d2
1174f3: 89 55 90 mov %edx,-0x70(%ebp)
1174f6: e8 13 f2 ff ff call 11670e <msdos_long_to_short>
rc = msdos_find_name_in_fat_file(mt_entry, fat_fd, false, "..", 2,
1174fb: 8b 55 90 mov -0x70(%ebp),%edx
1174fe: 52 push %edx
1174ff: ff 75 10 pushl 0x10(%ebp)
117502: 6a 01 push $0x1
117504: 6a 02 push $0x2
117506: 68 d2 88 12 00 push $0x1288d2
11750b: 6a 00 push $0x0
11750d: ff 75 a4 pushl -0x5c(%ebp)
117510: ff 75 08 pushl 0x8(%ebp)
117513: e8 eb f6 ff ff call 116c03 <msdos_find_name_in_fat_file>
117518: 89 c3 mov %eax,%ebx
MSDOS_NAME_SHORT, dir_pos,
dotdot_node);
if (rc != RC_OK)
11751a: 83 c4 30 add $0x30,%esp
11751d: 85 c0 test %eax,%eax
11751f: 74 05 je 117526 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0xfa><== ALWAYS TAKEN
117521: e9 d9 00 00 00 jmp 1175ff <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x1d3><== NOT EXECUTED
{
fat_file_close(&fs_info->fat, fat_fd);
return rc;
}
cl4find = MSDOS_EXTRACT_CLUSTER_NUM(dot_node);
117526: 66 8b 45 c2 mov -0x3e(%ebp),%ax
11752a: 66 89 45 96 mov %ax,-0x6a(%ebp)
11752e: 8b 7d bc mov -0x44(%ebp),%edi
/* close fat-file corresponded to ".." directory */
rc = fat_file_close(&fs_info->fat, fat_fd);
117531: 53 push %ebx
117532: 53 push %ebx
117533: ff 75 a4 pushl -0x5c(%ebp)
117536: 56 push %esi
117537: e8 fc a6 ff ff call 111c38 <fat_file_close>
11753c: 89 c3 mov %eax,%ebx
if ( rc != RC_OK )
11753e: 83 c4 10 add $0x10,%esp
117541: 85 c0 test %eax,%eax
117543: 0f 85 d3 00 00 00 jne 11761c <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x1f0><== NEVER TAKEN
return rc;
if ( (MSDOS_EXTRACT_CLUSTER_NUM(dotdot_node)) == 0)
117549: 0f b7 45 dc movzwl -0x24(%ebp),%eax
11754d: c1 e0 10 shl $0x10,%eax
117550: 0f b7 55 e2 movzwl -0x1e(%ebp),%edx
117554: 09 d0 or %edx,%eax
117556: 75 1e jne 117576 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x14a><== ALWAYS TAKEN
fat_dir_pos_init(
fat_dir_pos_t *dir_pos
)
{
dir_pos->sname.cln = 0;
dir_pos->sname.ofs = 0;
117558: 8b 45 10 mov 0x10(%ebp),%eax <== NOT EXECUTED
11755b: c7 40 04 00 00 00 00 movl $0x0,0x4(%eax) <== NOT EXECUTED
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
117562: c7 40 08 ff ff ff ff movl $0xffffffff,0x8(%eax) <== NOT EXECUTED
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
117569: c7 40 0c ff ff ff ff movl $0xffffffff,0xc(%eax) <== NOT EXECUTED
/*
* we handle root dir for all FAT types in the same way with the
* ordinary directories ( through fat_file_* calls )
*/
fat_dir_pos_init(dir_pos);
dir_pos->sname.cln = FAT_ROOTDIR_CLUSTER_NUM;
117570: c7 00 01 00 00 00 movl $0x1,(%eax) <== NOT EXECUTED
}
/* open fat-file corresponded to second ".." */
rc = fat_file_open(&fs_info->fat, dir_pos, &fat_fd);
117576: 51 push %ecx
117577: 8d 45 a4 lea -0x5c(%ebp),%eax
11757a: 50 push %eax
11757b: ff 75 10 pushl 0x10(%ebp)
11757e: 56 push %esi
11757f: e8 12 a3 ff ff call 111896 <fat_file_open>
117584: 89 c3 mov %eax,%ebx
if (rc != RC_OK)
117586: 83 c4 10 add $0x10,%esp
117589: 85 c0 test %eax,%eax
11758b: 0f 85 8b 00 00 00 jne 11761c <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x1f0><== NEVER TAKEN
return rc;
if ((MSDOS_EXTRACT_CLUSTER_NUM(dotdot_node)) == 0)
117591: 0f b7 45 dc movzwl -0x24(%ebp),%eax
117595: c1 e0 10 shl $0x10,%eax
117598: 0f b7 55 e2 movzwl -0x1e(%ebp),%edx
11759c: 09 c2 or %eax,%edx
11759e: 8b 45 a4 mov -0x5c(%ebp),%eax
1175a1: 75 03 jne 1175a6 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x17a><== ALWAYS TAKEN
fat_fd->cln = fs_info->fat.vol.rdir_cl;
1175a3: 8b 56 38 mov 0x38(%esi),%edx <== NOT EXECUTED
else
fat_fd->cln = MSDOS_EXTRACT_CLUSTER_NUM(dotdot_node);
1175a6: 89 50 1c mov %edx,0x1c(%eax)
fat_fd->fat_file_type = FAT_DIRECTORY;
1175a9: c7 40 10 00 00 00 00 movl $0x0,0x10(%eax)
fat_fd->size_limit = MSDOS_MAX_DIR_LENGHT;
1175b0: c7 40 14 00 00 20 00 movl $0x200000,0x14(%eax)
fat_fd->map.file_cln = 0;
1175b7: c7 40 34 00 00 00 00 movl $0x0,0x34(%eax)
fat_fd->map.disk_cln = fat_fd->cln;
1175be: 8b 50 1c mov 0x1c(%eax),%edx
1175c1: 89 50 38 mov %edx,0x38(%eax)
rc = fat_file_size(&fs_info->fat, fat_fd);
1175c4: 52 push %edx
1175c5: 52 push %edx
1175c6: 50 push %eax
1175c7: 56 push %esi
1175c8: e8 bf ab ff ff call 11218c <fat_file_size>
1175cd: 89 c3 mov %eax,%ebx
if (rc != RC_OK)
1175cf: 83 c4 10 add $0x10,%esp
1175d2: 85 c0 test %eax,%eax
1175d4: 74 02 je 1175d8 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x1ac><== ALWAYS TAKEN
1175d6: eb 27 jmp 1175ff <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x1d3><== NOT EXECUTED
fat_file_close(&fs_info->fat, fat_fd);
return rc;
}
/* in this directory find slot with specified cluster num */
rc = msdos_find_node_by_cluster_num_in_fat_file(mt_entry, fat_fd, cl4find,
1175d8: 83 ec 0c sub $0xc,%esp
1175db: ff 75 14 pushl 0x14(%ebp)
1175de: ff 75 10 pushl 0x10(%ebp)
{
fat_file_close(&fs_info->fat, fat_fd);
return rc;
}
cl4find = MSDOS_EXTRACT_CLUSTER_NUM(dot_node);
1175e1: c1 e7 10 shl $0x10,%edi
1175e4: 0f b7 45 96 movzwl -0x6a(%ebp),%eax
1175e8: 09 c7 or %eax,%edi
fat_file_close(&fs_info->fat, fat_fd);
return rc;
}
/* in this directory find slot with specified cluster num */
rc = msdos_find_node_by_cluster_num_in_fat_file(mt_entry, fat_fd, cl4find,
1175ea: 57 push %edi
1175eb: ff 75 a4 pushl -0x5c(%ebp)
1175ee: ff 75 08 pushl 0x8(%ebp)
1175f1: e8 15 fd ff ff call 11730b <msdos_find_node_by_cluster_num_in_fat_file>
1175f6: 89 c3 mov %eax,%ebx
dir_pos, dir_entry);
if (rc != RC_OK)
1175f8: 83 c4 20 add $0x20,%esp
1175fb: 85 c0 test %eax,%eax
1175fd: 74 0d je 11760c <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x1e0><== ALWAYS TAKEN
{
fat_file_close(&fs_info->fat, fat_fd);
1175ff: 50 push %eax <== NOT EXECUTED
117600: 50 push %eax <== NOT EXECUTED
117601: ff 75 a4 pushl -0x5c(%ebp) <== NOT EXECUTED
117604: 56 push %esi <== NOT EXECUTED
117605: e8 2e a6 ff ff call 111c38 <fat_file_close> <== NOT EXECUTED
11760a: eb 0d jmp 117619 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x1ed><== NOT EXECUTED
return rc;
}
rc = fat_file_close(&fs_info->fat, fat_fd);
11760c: 50 push %eax
11760d: 50 push %eax
11760e: ff 75 a4 pushl -0x5c(%ebp)
117611: 56 push %esi
117612: e8 21 a6 ff ff call 111c38 <fat_file_close>
117617: 89 c3 mov %eax,%ebx
117619: 83 c4 10 add $0x10,%esp
return rc;
}
11761c: 89 d8 mov %ebx,%eax
11761e: 8d 65 f4 lea -0xc(%ebp),%esp
117621: 5b pop %ebx
117622: 5e pop %esi
117623: 5f pop %edi
117624: 5d pop %ebp
117625: c3 ret
00117626 <msdos_get_name_node>:
int name_len,
msdos_name_type_t name_type,
fat_dir_pos_t *dir_pos,
char *name_dir_entry
)
{
117626: 55 push %ebp
117627: 89 e5 mov %esp,%ebp
117629: 57 push %edi
11762a: 56 push %esi
11762b: 53 push %ebx
11762c: 83 ec 1c sub $0x1c,%esp
11762f: 8b 55 08 mov 0x8(%ebp),%edx
117632: 8b 4d 10 mov 0x10(%ebp),%ecx
117635: 8b 5d 1c mov 0x1c(%ebp),%ebx
117638: 8b 7d 20 mov 0x20(%ebp),%edi
11763b: 0f b6 45 0c movzbl 0xc(%ebp),%eax
11763f: 88 45 e7 mov %al,-0x19(%ebp)
int rc = RC_OK;
fat_file_fd_t *fat_fd = parent_loc->node_access;
uint32_t dotdot_cln = 0;
/* find name in fat-file which corresponds to the directory */
rc = msdos_find_name_in_fat_file(parent_loc->mt_entry, fat_fd,
117642: 57 push %edi
117643: 53 push %ebx
117644: ff 75 18 pushl 0x18(%ebp)
117647: ff 75 14 pushl 0x14(%ebp)
11764a: 51 push %ecx
11764b: 50 push %eax
11764c: ff 72 08 pushl 0x8(%edx)
11764f: ff 72 14 pushl 0x14(%edx)
117652: 89 55 e0 mov %edx,-0x20(%ebp)
117655: 89 4d dc mov %ecx,-0x24(%ebp)
117658: e8 a6 f5 ff ff call 116c03 <msdos_find_name_in_fat_file>
11765d: 89 c6 mov %eax,%esi
create_node, name, name_len, name_type,
dir_pos, name_dir_entry);
if ((rc != RC_OK) && (rc != MSDOS_NAME_NOT_FOUND_ERR))
11765f: 83 c4 20 add $0x20,%esp
117662: 3d 01 7d 00 00 cmp $0x7d01,%eax
117667: 8b 55 e0 mov -0x20(%ebp),%edx
11766a: 8b 4d dc mov -0x24(%ebp),%ecx
11766d: 74 04 je 117673 <msdos_get_name_node+0x4d>
11766f: 85 c0 test %eax,%eax
117671: 75 74 jne 1176e7 <msdos_get_name_node+0xc1><== NEVER TAKEN
return rc;
if (!create_node)
117673: 80 7d e7 00 cmpb $0x0,-0x19(%ebp)
117677: 75 6e jne 1176e7 <msdos_get_name_node+0xc1>
{
/* if we search for valid name and name not found -> return */
if (rc == MSDOS_NAME_NOT_FOUND_ERR)
117679: 81 fe 01 7d 00 00 cmp $0x7d01,%esi
11767f: 74 66 je 1176e7 <msdos_get_name_node+0xc1>
* if we have deal with ".." - it is a special case :(((
*
* Really, we should return cluster num and offset not of ".." slot, but
* slot which correspondes to real directory name.
*/
if (rc == RC_OK)
117681: 85 f6 test %esi,%esi
117683: 75 62 jne 1176e7 <msdos_get_name_node+0xc1><== NEVER TAKEN
{
if (strncmp(name, "..", 2) == 0)
117685: 50 push %eax
117686: 6a 02 push $0x2
117688: 68 d2 88 12 00 push $0x1288d2
11768d: 51 push %ecx
11768e: 89 55 e0 mov %edx,-0x20(%ebp)
117691: e8 06 35 00 00 call 11ab9c <strncmp>
117696: 83 c4 10 add $0x10,%esp
117699: 85 c0 test %eax,%eax
11769b: 8b 55 e0 mov -0x20(%ebp),%edx
11769e: 75 47 jne 1176e7 <msdos_get_name_node+0xc1>
{
dotdot_cln = MSDOS_EXTRACT_CLUSTER_NUM((name_dir_entry));
1176a0: 0f b7 47 14 movzwl 0x14(%edi),%eax
1176a4: c1 e0 10 shl $0x10,%eax
1176a7: 0f b7 4f 1a movzwl 0x1a(%edi),%ecx
/* are we right under root dir ? */
if (dotdot_cln == 0)
1176ab: 09 c8 or %ecx,%eax
1176ad: 75 1d jne 1176cc <msdos_get_name_node+0xa6>
fat_dir_pos_init(
fat_dir_pos_t *dir_pos
)
{
dir_pos->sname.cln = 0;
dir_pos->sname.ofs = 0;
1176af: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx)
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
1176b6: c7 43 08 ff ff ff ff movl $0xffffffff,0x8(%ebx)
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
1176bd: c7 43 0c ff ff ff ff movl $0xffffffff,0xc(%ebx)
/*
* we can relax about first_char field - it never should be
* used for root dir
*/
fat_dir_pos_init(dir_pos);
dir_pos->sname.cln = FAT_ROOTDIR_CLUSTER_NUM;
1176c4: c7 03 01 00 00 00 movl $0x1,(%ebx)
1176ca: eb 1b jmp 1176e7 <msdos_get_name_node+0xc1>
}
else
{
rc =
1176cc: 89 7d 14 mov %edi,0x14(%ebp)
1176cf: 89 5d 10 mov %ebx,0x10(%ebp)
1176d2: 89 45 0c mov %eax,0xc(%ebp)
1176d5: 8b 42 14 mov 0x14(%edx),%eax
1176d8: 89 45 08 mov %eax,0x8(%ebp)
}
}
}
}
return rc;
}
1176db: 8d 65 f4 lea -0xc(%ebp),%esp
1176de: 5b pop %ebx
1176df: 5e pop %esi
1176e0: 5f pop %edi
1176e1: 5d pop %ebp
fat_dir_pos_init(dir_pos);
dir_pos->sname.cln = FAT_ROOTDIR_CLUSTER_NUM;
}
else
{
rc =
1176e2: e9 45 fd ff ff jmp 11742c <msdos_get_dotdot_dir_info_cluster_num_and_offset>
}
}
}
}
return rc;
}
1176e7: 89 f0 mov %esi,%eax
1176e9: 8d 65 f4 lea -0xc(%ebp),%esp
1176ec: 5b pop %ebx
1176ed: 5e pop %esi
1176ee: 5f pop %edi
1176ef: 5d pop %ebp
1176f0: c3 ret
0010ee60 <msdos_initialize_support>:
rtems_filesystem_mount_table_entry_t *temp_mt_entry,
const rtems_filesystem_operations_table *op_table,
const rtems_filesystem_file_handlers_r *file_handlers,
const rtems_filesystem_file_handlers_r *directory_handlers
)
{
10ee60: 55 push %ebp
10ee61: 89 e5 mov %esp,%ebp
10ee63: 57 push %edi
10ee64: 56 push %esi
10ee65: 53 push %ebx
10ee66: 83 ec 44 sub $0x44,%esp
10ee69: 8b 75 08 mov 0x8(%ebp),%esi
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = NULL;
fat_file_fd_t *fat_fd = NULL;
10ee6c: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)
fat_dir_pos_t root_pos;
uint32_t cl_buf_size;
fs_info = (msdos_fs_info_t *)calloc(1, sizeof(msdos_fs_info_t));
10ee73: 68 98 00 00 00 push $0x98
10ee78: 6a 01 push $0x1
10ee7a: e8 41 81 ff ff call 106fc0 <calloc>
10ee7f: 89 c7 mov %eax,%edi
if (!fs_info)
10ee81: 83 c4 10 add $0x10,%esp
10ee84: 85 c0 test %eax,%eax
10ee86: 75 10 jne 10ee98 <msdos_initialize_support+0x38><== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one(ENOMEM);
10ee88: e8 83 a9 00 00 call 119810 <__errno> <== NOT EXECUTED
10ee8d: c7 00 0c 00 00 00 movl $0xc,(%eax) <== NOT EXECUTED
10ee93: e9 30 01 00 00 jmp 10efc8 <msdos_initialize_support+0x168><== NOT EXECUTED
temp_mt_entry->fs_info = fs_info;
10ee98: 89 46 08 mov %eax,0x8(%esi)
rc = fat_init_volume_info(&fs_info->fat, temp_mt_entry->dev);
10ee9b: 50 push %eax
10ee9c: 50 push %eax
10ee9d: ff 76 38 pushl 0x38(%esi)
10eea0: 57 push %edi
10eea1: e8 21 3b 00 00 call 1129c7 <fat_init_volume_info>
10eea6: 89 c3 mov %eax,%ebx
if (rc != RC_OK)
10eea8: 83 c4 10 add $0x10,%esp
10eeab: 85 c0 test %eax,%eax
10eead: 74 05 je 10eeb4 <msdos_initialize_support+0x54><== ALWAYS TAKEN
{
free(fs_info);
10eeaf: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10eeb2: eb 50 jmp 10ef04 <msdos_initialize_support+0xa4><== NOT EXECUTED
return rc;
}
fs_info->file_handlers = file_handlers;
10eeb4: 8b 45 10 mov 0x10(%ebp),%eax
10eeb7: 89 87 8c 00 00 00 mov %eax,0x8c(%edi)
fs_info->directory_handlers = directory_handlers;
10eebd: 8b 55 14 mov 0x14(%ebp),%edx
10eec0: 89 97 88 00 00 00 mov %edx,0x88(%edi)
fat_dir_pos_init(
fat_dir_pos_t *dir_pos
)
{
dir_pos->sname.cln = 0;
dir_pos->sname.ofs = 0;
10eec6: c7 45 dc 00 00 00 00 movl $0x0,-0x24(%ebp)
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
10eecd: c7 45 e0 ff ff ff ff movl $0xffffffff,-0x20(%ebp)
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
10eed4: c7 45 e4 ff ff ff ff movl $0xffffffff,-0x1c(%ebp)
/*
* open fat-file which correspondes to root directory
* (so inode number 0x00000010 is always used for root directory)
*/
fat_dir_pos_init(&root_pos);
root_pos.sname.cln = FAT_ROOTDIR_CLUSTER_NUM;
10eedb: c7 45 d8 01 00 00 00 movl $0x1,-0x28(%ebp)
rc = fat_file_open(&fs_info->fat, &root_pos, &fat_fd);
10eee2: 53 push %ebx
10eee3: 8d 45 d4 lea -0x2c(%ebp),%eax
10eee6: 50 push %eax
10eee7: 8d 45 d8 lea -0x28(%ebp),%eax
10eeea: 50 push %eax
10eeeb: 57 push %edi
10eeec: e8 a5 29 00 00 call 111896 <fat_file_open>
10eef1: 89 c3 mov %eax,%ebx
if (rc != RC_OK)
10eef3: 83 c4 10 add $0x10,%esp
10eef6: 85 c0 test %eax,%eax
10eef8: 74 18 je 10ef12 <msdos_initialize_support+0xb2><== ALWAYS TAKEN
{
fat_shutdown_drive(&fs_info->fat);
10eefa: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10eefd: 57 push %edi <== NOT EXECUTED
10eefe: e8 c8 39 00 00 call 1128cb <fat_shutdown_drive> <== NOT EXECUTED
free(fs_info);
10ef03: 59 pop %ecx <== NOT EXECUTED
10ef04: 57 push %edi <== NOT EXECUTED
10ef05: e8 22 83 ff ff call 10722c <free> <== NOT EXECUTED
10ef0a: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
10ef0d: e9 22 01 00 00 jmp 10f034 <msdos_initialize_support+0x1d4><== NOT EXECUTED
return rc;
}
/* again: unfortunately "fat-file" is just almost fat file :( */
fat_fd->fat_file_type = FAT_DIRECTORY;
10ef12: 8b 45 d4 mov -0x2c(%ebp),%eax
10ef15: c7 40 10 00 00 00 00 movl $0x0,0x10(%eax)
fat_fd->size_limit = MSDOS_MAX_DIR_LENGHT;
10ef1c: c7 40 14 00 00 20 00 movl $0x200000,0x14(%eax)
fat_fd->cln = fs_info->fat.vol.rdir_cl;
10ef23: 8b 4f 38 mov 0x38(%edi),%ecx
10ef26: 89 48 1c mov %ecx,0x1c(%eax)
fat_fd->map.file_cln = 0;
10ef29: c7 40 34 00 00 00 00 movl $0x0,0x34(%eax)
fat_fd->map.disk_cln = fat_fd->cln;
10ef30: 89 48 38 mov %ecx,0x38(%eax)
/* if we have FAT12/16 */
if ( fat_fd->cln == 0 )
10ef33: 85 c9 test %ecx,%ecx
10ef35: 75 12 jne 10ef49 <msdos_initialize_support+0xe9><== NEVER TAKEN
{
fat_fd->fat_file_size = fs_info->fat.vol.rdir_size;
10ef37: 8b 4f 28 mov 0x28(%edi),%ecx
10ef3a: 89 48 18 mov %ecx,0x18(%eax)
cl_buf_size = (fs_info->fat.vol.bpc > fs_info->fat.vol.rdir_size) ?
fs_info->fat.vol.bpc :
10ef3d: 0f b7 47 06 movzwl 0x6(%edi),%eax
/* if we have FAT12/16 */
if ( fat_fd->cln == 0 )
{
fat_fd->fat_file_size = fs_info->fat.vol.rdir_size;
cl_buf_size = (fs_info->fat.vol.bpc > fs_info->fat.vol.rdir_size) ?
10ef41: 39 c8 cmp %ecx,%eax
10ef43: 73 43 jae 10ef88 <msdos_initialize_support+0x128><== NEVER TAKEN
10ef45: 89 c8 mov %ecx,%eax
10ef47: eb 3f jmp 10ef88 <msdos_initialize_support+0x128>
fs_info->fat.vol.bpc :
fs_info->fat.vol.rdir_size;
}
else
{
rc = fat_file_size(&fs_info->fat, fat_fd);
10ef49: 52 push %edx <== NOT EXECUTED
10ef4a: 52 push %edx <== NOT EXECUTED
10ef4b: 50 push %eax <== NOT EXECUTED
10ef4c: 57 push %edi <== NOT EXECUTED
10ef4d: e8 3a 32 00 00 call 11218c <fat_file_size> <== NOT EXECUTED
if ( rc != RC_OK )
10ef52: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
10ef55: 85 c0 test %eax,%eax <== NOT EXECUTED
10ef57: 74 2b je 10ef84 <msdos_initialize_support+0x124><== NOT EXECUTED
{
fat_file_close(&fs_info->fat, fat_fd);
10ef59: 53 push %ebx <== NOT EXECUTED
10ef5a: 53 push %ebx <== NOT EXECUTED
10ef5b: ff 75 d4 pushl -0x2c(%ebp) <== NOT EXECUTED
10ef5e: 57 push %edi <== NOT EXECUTED
10ef5f: 89 45 c4 mov %eax,-0x3c(%ebp) <== NOT EXECUTED
10ef62: e8 d1 2c 00 00 call 111c38 <fat_file_close> <== NOT EXECUTED
fat_shutdown_drive(&fs_info->fat);
10ef67: 89 3c 24 mov %edi,(%esp) <== NOT EXECUTED
10ef6a: e8 5c 39 00 00 call 1128cb <fat_shutdown_drive> <== NOT EXECUTED
free(fs_info);
10ef6f: 89 3c 24 mov %edi,(%esp) <== NOT EXECUTED
10ef72: e8 b5 82 ff ff call 10722c <free> <== NOT EXECUTED
10ef77: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
10ef7a: 8b 4d c4 mov -0x3c(%ebp),%ecx <== NOT EXECUTED
10ef7d: 89 cb mov %ecx,%ebx <== NOT EXECUTED
10ef7f: e9 b0 00 00 00 jmp 10f034 <msdos_initialize_support+0x1d4><== NOT EXECUTED
return rc;
}
cl_buf_size = fs_info->fat.vol.bpc;
10ef84: 0f b7 47 06 movzwl 0x6(%edi),%eax <== NOT EXECUTED
}
fs_info->cl_buf = (uint8_t *)calloc(cl_buf_size, sizeof(char));
10ef88: 52 push %edx
10ef89: 52 push %edx
10ef8a: 6a 01 push $0x1
10ef8c: 50 push %eax
10ef8d: e8 2e 80 ff ff call 106fc0 <calloc>
10ef92: 89 87 94 00 00 00 mov %eax,0x94(%edi)
if (fs_info->cl_buf == NULL)
10ef98: 83 c4 10 add $0x10,%esp
10ef9b: 85 c0 test %eax,%eax
10ef9d: 75 2e jne 10efcd <msdos_initialize_support+0x16d><== ALWAYS TAKEN
{
fat_file_close(&fs_info->fat, fat_fd);
10ef9f: 51 push %ecx <== NOT EXECUTED
10efa0: 51 push %ecx <== NOT EXECUTED
10efa1: ff 75 d4 pushl -0x2c(%ebp) <== NOT EXECUTED
10efa4: 57 push %edi <== NOT EXECUTED
10efa5: e8 8e 2c 00 00 call 111c38 <fat_file_close> <== NOT EXECUTED
fat_shutdown_drive(&fs_info->fat);
10efaa: 89 3c 24 mov %edi,(%esp) <== NOT EXECUTED
10efad: e8 19 39 00 00 call 1128cb <fat_shutdown_drive> <== NOT EXECUTED
free(fs_info);
10efb2: 89 3c 24 mov %edi,(%esp) <== NOT EXECUTED
10efb5: e8 72 82 ff ff call 10722c <free> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENOMEM);
10efba: e8 51 a8 00 00 call 119810 <__errno> <== NOT EXECUTED
10efbf: c7 00 0c 00 00 00 movl $0xc,(%eax) <== NOT EXECUTED
10efc5: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
10efc8: 83 cb ff or $0xffffffff,%ebx <== NOT EXECUTED
10efcb: eb 67 jmp 10f034 <msdos_initialize_support+0x1d4><== NOT EXECUTED
}
sc = rtems_semaphore_create(3,
10efcd: 83 ec 0c sub $0xc,%esp
10efd0: 8d 87 90 00 00 00 lea 0x90(%edi),%eax
10efd6: 50 push %eax
10efd7: 6a 00 push $0x0
10efd9: 6a 10 push $0x10
10efdb: 6a 01 push $0x1
10efdd: 6a 03 push $0x3
10efdf: e8 50 bc ff ff call 10ac34 <rtems_semaphore_create>
1,
RTEMS_BINARY_SEMAPHORE | RTEMS_FIFO,
0,
&fs_info->vol_sema);
if (sc != RTEMS_SUCCESSFUL)
10efe4: 83 c4 20 add $0x20,%esp
10efe7: 85 c0 test %eax,%eax
10efe9: 74 34 je 10f01f <msdos_initialize_support+0x1bf><== ALWAYS TAKEN
{
fat_file_close(&fs_info->fat, fat_fd);
10efeb: 50 push %eax <== NOT EXECUTED
10efec: 50 push %eax <== NOT EXECUTED
10efed: ff 75 d4 pushl -0x2c(%ebp) <== NOT EXECUTED
10eff0: 57 push %edi <== NOT EXECUTED
10eff1: e8 42 2c 00 00 call 111c38 <fat_file_close> <== NOT EXECUTED
fat_shutdown_drive(&fs_info->fat);
10eff6: 89 3c 24 mov %edi,(%esp) <== NOT EXECUTED
10eff9: e8 cd 38 00 00 call 1128cb <fat_shutdown_drive> <== NOT EXECUTED
free(fs_info->cl_buf);
10effe: 5a pop %edx <== NOT EXECUTED
10efff: ff b7 94 00 00 00 pushl 0x94(%edi) <== NOT EXECUTED
10f005: e8 22 82 ff ff call 10722c <free> <== NOT EXECUTED
free(fs_info);
10f00a: 89 3c 24 mov %edi,(%esp) <== NOT EXECUTED
10f00d: e8 1a 82 ff ff call 10722c <free> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EIO );
10f012: e8 f9 a7 00 00 call 119810 <__errno> <== NOT EXECUTED
10f017: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
10f01d: eb a6 jmp 10efc5 <msdos_initialize_support+0x165><== NOT EXECUTED
}
temp_mt_entry->mt_fs_root->location.node_access = fat_fd;
10f01f: 8b 46 24 mov 0x24(%esi),%eax
10f022: 8b 55 d4 mov -0x2c(%ebp),%edx
10f025: 89 50 08 mov %edx,0x8(%eax)
temp_mt_entry->mt_fs_root->location.handlers = directory_handlers;
10f028: 8b 55 14 mov 0x14(%ebp),%edx
10f02b: 89 50 10 mov %edx,0x10(%eax)
temp_mt_entry->ops = op_table;
10f02e: 8b 45 0c mov 0xc(%ebp),%eax
10f031: 89 46 0c mov %eax,0xc(%esi)
return rc;
}
10f034: 89 d8 mov %ebx,%eax
10f036: 8d 65 f4 lea -0xc(%ebp),%esp
10f039: 5b pop %ebx
10f03a: 5e pop %esi
10f03b: 5f pop %edi
10f03c: 5d pop %ebp
10f03d: c3 ret
0010ee2e <msdos_lock>:
.rename_h = msdos_rename,
.statvfs_h = rtems_filesystem_default_statvfs
};
void msdos_lock(const rtems_filesystem_mount_table_entry_t *mt_entry)
{
10ee2e: 55 push %ebp
10ee2f: 89 e5 mov %esp,%ebp
10ee31: 83 ec 0c sub $0xc,%esp
msdos_fs_info_t *fs_info = mt_entry->fs_info;
rtems_status_code sc = rtems_semaphore_obtain(
10ee34: 6a 00 push $0x0
10ee36: 6a 00 push $0x0
fs_info->vol_sema,
10ee38: 8b 45 08 mov 0x8(%ebp),%eax
10ee3b: 8b 40 08 mov 0x8(%eax),%eax
};
void msdos_lock(const rtems_filesystem_mount_table_entry_t *mt_entry)
{
msdos_fs_info_t *fs_info = mt_entry->fs_info;
rtems_status_code sc = rtems_semaphore_obtain(
10ee3e: ff b0 90 00 00 00 pushl 0x90(%eax)
10ee44: e8 1b c0 ff ff call 10ae64 <rtems_semaphore_obtain>
fs_info->vol_sema,
RTEMS_WAIT,
RTEMS_NO_TIMEOUT
);
if (sc != RTEMS_SUCCESSFUL) {
10ee49: 83 c4 10 add $0x10,%esp
10ee4c: 85 c0 test %eax,%eax
10ee4e: 74 0d je 10ee5d <msdos_lock+0x2f> <== ALWAYS TAKEN
rtems_fatal_error_occurred(0xdeadbeef);
10ee50: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10ee53: 68 ef be ad de push $0xdeadbeef <== NOT EXECUTED
10ee58: e8 f3 c5 ff ff call 10b450 <rtems_fatal_error_occurred><== NOT EXECUTED
}
}
10ee5d: c9 leave
10ee5e: c3 ret
0011670e <msdos_long_to_short>:
*
*/
#define MSDOS_L2S_PRINT 0
msdos_name_type_t
msdos_long_to_short(const char *lfn, int lfn_len, char* sfn, int sfn_len)
{
11670e: 55 push %ebp
11670f: 89 e5 mov %esp,%ebp
116711: 57 push %edi
116712: 56 push %esi
116713: 53 push %ebx
116714: 83 ec 2c sub $0x2c,%esp
116717: 8b 4d 14 mov 0x14(%ebp),%ecx
int i;
/*
* Fill with spaces. This is how a short directory entry is padded.
*/
memset (sfn, ' ', sfn_len);
11671a: b0 20 mov $0x20,%al
11671c: 8b 7d 10 mov 0x10(%ebp),%edi
11671f: f3 aa rep stos %al,%es:(%edi)
/*
* Handle '.' and '..' specially.
*/
if ((lfn[0] == '.') && (lfn_len == 1))
116721: 31 c0 xor %eax,%eax
116723: 8b 55 08 mov 0x8(%ebp),%edx
116726: 80 3a 2e cmpb $0x2e,(%edx)
116729: 75 68 jne 116793 <msdos_long_to_short+0x85>
11672b: 83 7d 0c 01 cmpl $0x1,0xc(%ebp)
11672f: 75 0d jne 11673e <msdos_long_to_short+0x30>
{
sfn[0] = '.';
116731: 8b 7d 10 mov 0x10(%ebp),%edi
116734: c6 07 2e movb $0x2e,(%edi)
#if MSDOS_L2S_PRINT
printf ("MSDOS_L2S: SHORT[1]: lfn:'%s' SFN:'%s'\n", lfn, sfn);
#endif
return MSDOS_NAME_SHORT;
116737: b0 01 mov $0x1,%al
116739: e9 64 01 00 00 jmp 1168a2 <msdos_long_to_short+0x194>
}
if ((lfn[0] == '.') && (lfn[1] == '.') && (lfn_len == 2))
11673e: 89 c8 mov %ecx,%eax
116740: 8b 55 08 mov 0x8(%ebp),%edx
116743: 80 7a 01 2e cmpb $0x2e,0x1(%edx)
116747: 75 4a jne 116793 <msdos_long_to_short+0x85><== NEVER TAKEN
116749: 83 7d 0c 02 cmpl $0x2,0xc(%ebp)
11674d: 75 44 jne 116793 <msdos_long_to_short+0x85><== NEVER TAKEN
{
sfn[0] = sfn[1] = '.';
11674f: 8b 7d 10 mov 0x10(%ebp),%edi
116752: c6 47 01 2e movb $0x2e,0x1(%edi)
116756: c6 07 2e movb $0x2e,(%edi)
#if MSDOS_L2S_PRINT
printf ("MSDOS_L2S: SHORT[2]: lfn:'%s' SFN:'%s'\n", lfn, sfn);
#endif
return MSDOS_NAME_SHORT;
116759: b8 01 00 00 00 mov $0x1,%eax
11675e: e9 3f 01 00 00 jmp 1168a2 <msdos_long_to_short+0x194>
/*
* Filenames with only blanks and dots are not allowed!
*/
for (i = 0; i < lfn_len; i++)
if ((lfn[i] != ' ') && (lfn[i] != '.'))
116763: 8b 4d 08 mov 0x8(%ebp),%ecx
116766: 8a 14 01 mov (%ecx,%eax,1),%dl
116769: 80 fa 2e cmp $0x2e,%dl
11676c: 74 24 je 116792 <msdos_long_to_short+0x84><== NEVER TAKEN
11676e: 80 fa 20 cmp $0x20,%dl
116771: 74 1f je 116792 <msdos_long_to_short+0x84>
msdos_is_valid_name_char(const char ch)
{
if (strchr(" +,;=[]", ch) != NULL)
return MSDOS_NAME_LONG;
if ((ch == '.') || isalnum((unsigned char)ch) ||
116773: 8b 3d d8 62 13 00 mov 0x1362d8,%edi
116779: 89 7d dc mov %edi,-0x24(%ebp)
11677c: 31 f6 xor %esi,%esi
11677e: c7 45 e4 ff ff ff ff movl $0xffffffff,-0x1c(%ebp)
116785: c6 45 e2 00 movb $0x0,-0x1e(%ebp)
116789: c6 45 e3 00 movb $0x0,-0x1d(%ebp)
11678d: e9 c5 00 00 00 jmp 116857 <msdos_long_to_short+0x149>
}
/*
* Filenames with only blanks and dots are not allowed!
*/
for (i = 0; i < lfn_len; i++)
116792: 40 inc %eax
116793: 3b 45 0c cmp 0xc(%ebp),%eax
116796: 7c cb jl 116763 <msdos_long_to_short+0x55><== ALWAYS TAKEN
if (i == lfn_len)
{
#if MSDOS_L2S_PRINT
printf ("MSDOS_L2S: INVALID[1]: lfn:'%s' SFN:'%s'\n", lfn, sfn);
#endif
return MSDOS_NAME_INVALID;
116798: b8 00 00 00 00 mov $0x0,%eax <== NOT EXECUTED
*/
for (i = 0; i < lfn_len; i++)
if ((lfn[i] != ' ') && (lfn[i] != '.'))
break;
if (i == lfn_len)
11679d: 75 d4 jne 116773 <msdos_long_to_short+0x65><== NOT EXECUTED
11679f: e9 fe 00 00 00 jmp 1168a2 <msdos_long_to_short+0x194><== NOT EXECUTED
int dot_at = -1;
int count = 0;
while (*name && (count < name_len))
{
bool is_dot = *name == '.';
1167a4: 80 f9 2e cmp $0x2e,%cl
1167a7: 0f 94 c2 sete %dl
*
*/
static msdos_name_type_t
msdos_is_valid_name_char(const char ch)
{
if (strchr(" +,;=[]", ch) != NULL)
1167aa: 0f be f9 movsbl %cl,%edi
1167ad: 89 7d cc mov %edi,-0x34(%ebp)
1167b0: 53 push %ebx
1167b1: 53 push %ebx
1167b2: 57 push %edi
1167b3: 68 fc 8a 12 00 push $0x128afc
1167b8: 88 55 d4 mov %dl,-0x2c(%ebp)
1167bb: 88 4d d8 mov %cl,-0x28(%ebp)
1167be: e8 fd 3d 00 00 call 11a5c0 <strchr>
1167c3: 83 c4 10 add $0x10,%esp
return MSDOS_NAME_LONG;
1167c6: bb 02 00 00 00 mov $0x2,%ebx
*
*/
static msdos_name_type_t
msdos_is_valid_name_char(const char ch)
{
if (strchr(" +,;=[]", ch) != NULL)
1167cb: 85 c0 test %eax,%eax
1167cd: 8a 55 d4 mov -0x2c(%ebp),%dl
1167d0: 8a 4d d8 mov -0x28(%ebp),%cl
1167d3: 75 39 jne 11680e <msdos_long_to_short+0x100>
return MSDOS_NAME_LONG;
if ((ch == '.') || isalnum((unsigned char)ch) ||
1167d5: 84 d2 test %dl,%dl
1167d7: 75 30 jne 116809 <msdos_long_to_short+0xfb>
1167d9: 0f b6 c1 movzbl %cl,%eax
(strchr("$%'-_@~`!(){}^#&", ch) != NULL))
return MSDOS_NAME_SHORT;
1167dc: b3 01 mov $0x1,%bl
msdos_is_valid_name_char(const char ch)
{
if (strchr(" +,;=[]", ch) != NULL)
return MSDOS_NAME_LONG;
if ((ch == '.') || isalnum((unsigned char)ch) ||
1167de: 8b 7d dc mov -0x24(%ebp),%edi
1167e1: f6 44 07 01 07 testb $0x7,0x1(%edi,%eax,1)
1167e6: 75 26 jne 11680e <msdos_long_to_short+0x100>
(strchr("$%'-_@~`!(){}^#&", ch) != NULL))
1167e8: 52 push %edx
1167e9: 52 push %edx
1167ea: ff 75 cc pushl -0x34(%ebp)
1167ed: 68 04 8b 12 00 push $0x128b04
1167f2: e8 c9 3d 00 00 call 11a5c0 <strchr>
1167f7: 83 c4 10 add $0x10,%esp
*/
static msdos_name_type_t
msdos_is_valid_name_char(const char ch)
{
if (strchr(" +,;=[]", ch) != NULL)
return MSDOS_NAME_LONG;
1167fa: 31 db xor %ebx,%ebx
1167fc: 85 c0 test %eax,%eax
1167fe: 0f 95 c3 setne %bl
116801: 8a 55 d4 mov -0x2c(%ebp),%dl
116804: 8a 4d d8 mov -0x28(%ebp),%cl
116807: eb 05 jmp 11680e <msdos_long_to_short+0x100>
if ((ch == '.') || isalnum((unsigned char)ch) ||
(strchr("$%'-_@~`!(){}^#&", ch) != NULL))
return MSDOS_NAME_SHORT;
116809: bb 01 00 00 00 mov $0x1,%ebx
#if MSDOS_NAME_TYPE_PRINT
printf ("MSDOS_NAME_TYPE: c:%02x type:%d\n", *name, type);
#endif
if ((type == MSDOS_NAME_INVALID) || (type == MSDOS_NAME_LONG))
11680e: f6 c3 01 test $0x1,%bl
116811: 74 65 je 116878 <msdos_long_to_short+0x16a>
return type;
if (dot_at >= 0)
116813: 83 7d e4 ff cmpl $0xffffffff,-0x1c(%ebp)
116817: 74 10 je 116829 <msdos_long_to_short+0x11b>
{
if (is_dot || ((count - dot_at) > 3))
116819: 84 d2 test %dl,%dl
11681b: 75 77 jne 116894 <msdos_long_to_short+0x186><== ALWAYS TAKEN
11681d: 89 f0 mov %esi,%eax <== NOT EXECUTED
11681f: 2b 45 e4 sub -0x1c(%ebp),%eax <== NOT EXECUTED
116822: 83 f8 03 cmp $0x3,%eax <== NOT EXECUTED
116825: 7e 0f jle 116836 <msdos_long_to_short+0x128><== NOT EXECUTED
116827: eb 6b jmp 116894 <msdos_long_to_short+0x186><== NOT EXECUTED
return MSDOS_NAME_LONG;
}
}
else
{
if (count == 8 && !is_dot)
116829: 84 d2 test %dl,%dl
11682b: 75 05 jne 116832 <msdos_long_to_short+0x124>
11682d: 83 fe 08 cmp $0x8,%esi
116830: 74 62 je 116894 <msdos_long_to_short+0x186>
#endif
return MSDOS_NAME_LONG;
}
}
if (is_dot)
116832: 84 d2 test %dl,%dl
116834: 75 11 jne 116847 <msdos_long_to_short+0x139>
dot_at = count;
else if ((*name >= 'A') && (*name <= 'Z'))
116836: 8d 41 bf lea -0x41(%ecx),%eax
116839: 3c 19 cmp $0x19,%al
11683b: 76 0f jbe 11684c <msdos_long_to_short+0x13e>
uppercase = true;
else if ((*name >= 'a') && (*name <= 'z'))
11683d: 83 e9 61 sub $0x61,%ecx
116840: 80 f9 19 cmp $0x19,%cl
116843: 76 0d jbe 116852 <msdos_long_to_short+0x144>
116845: eb 0f jmp 116856 <msdos_long_to_short+0x148>
#endif
return MSDOS_NAME_LONG;
}
}
if (is_dot)
116847: 89 75 e4 mov %esi,-0x1c(%ebp)
11684a: eb 0a jmp 116856 <msdos_long_to_short+0x148>
dot_at = count;
else if ((*name >= 'A') && (*name <= 'Z'))
uppercase = true;
11684c: c6 45 e2 01 movb $0x1,-0x1e(%ebp)
116850: eb 04 jmp 116856 <msdos_long_to_short+0x148>
else if ((*name >= 'a') && (*name <= 'z'))
lowercase = true;
116852: c6 45 e3 01 movb $0x1,-0x1d(%ebp)
count++;
116856: 46 inc %esi
bool lowercase = false;
bool uppercase = false;
int dot_at = -1;
int count = 0;
while (*name && (count < name_len))
116857: 8b 55 08 mov 0x8(%ebp),%edx
11685a: 8a 0c 32 mov (%edx,%esi,1),%cl
11685d: 84 c9 test %cl,%cl
11685f: 74 09 je 11686a <msdos_long_to_short+0x15c>
116861: 3b 75 0c cmp 0xc(%ebp),%esi
116864: 0f 8c 3a ff ff ff jl 1167a4 <msdos_long_to_short+0x96>
count++;
name++;
}
if (lowercase && uppercase)
11686a: 80 7d e2 00 cmpb $0x0,-0x1e(%ebp)
11686e: 74 2b je 11689b <msdos_long_to_short+0x18d>
116870: 80 7d e3 00 cmpb $0x0,-0x1d(%ebp)
116874: 74 25 je 11689b <msdos_long_to_short+0x18d><== ALWAYS TAKEN
116876: eb 1c jmp 116894 <msdos_long_to_short+0x186><== NOT EXECUTED
#if MSDOS_NAME_TYPE_PRINT
printf ("MSDOS_NAME_TYPE: c:%02x type:%d\n", *name, type);
#endif
if ((type == MSDOS_NAME_INVALID) || (type == MSDOS_NAME_LONG))
116878: 89 d8 mov %ebx,%eax
* Is this a short name ?
*/
type = msdos_name_type (lfn, lfn_len);
if (type == MSDOS_NAME_INVALID)
11687a: 85 db test %ebx,%ebx
11687c: 74 24 je 1168a2 <msdos_long_to_short+0x194><== NEVER TAKEN
printf ("MSDOS_L2S: INVALID[2]: lfn:'%s' SFN:'%s'\n", lfn, sfn);
#endif
return MSDOS_NAME_INVALID;
}
msdos_filename_unix2dos (lfn, lfn_len, sfn);
11687e: 50 push %eax
11687f: ff 75 10 pushl 0x10(%ebp)
116882: ff 75 0c pushl 0xc(%ebp)
116885: ff 75 08 pushl 0x8(%ebp)
116888: e8 9a 23 00 00 call 118c27 <msdos_filename_unix2dos>
#if MSDOS_L2S_PRINT
printf ("MSDOS_L2S: TYPE:%d lfn:'%s' SFN:'%s'\n", type, lfn, sfn);
#endif
return type;
11688d: 83 c4 10 add $0x10,%esp
116890: 89 d8 mov %ebx,%eax
116892: eb 0e jmp 1168a2 <msdos_long_to_short+0x194>
{
#if MSDOS_NAME_TYPE_PRINT
printf ("MSDOS_NAME_TYPE: LONG[2]: is_dot:%d, at:%d cnt\n",
is_dot, dot_at, count);
#endif
return MSDOS_NAME_LONG;
116894: bb 02 00 00 00 mov $0x2,%ebx
116899: eb e3 jmp 11687e <msdos_long_to_short+0x170>
}
#if MSDOS_NAME_TYPE_PRINT
printf ("MSDOS_NAME_TYPE: SHORT[1]\n");
#endif
return MSDOS_NAME_SHORT;
11689b: bb 01 00 00 00 mov $0x1,%ebx
1168a0: eb dc jmp 11687e <msdos_long_to_short+0x170>
#if MSDOS_L2S_PRINT
printf ("MSDOS_L2S: TYPE:%d lfn:'%s' SFN:'%s'\n", type, lfn, sfn);
#endif
return type;
}
1168a2: 8d 65 f4 lea -0xc(%ebp),%esp
1168a5: 5b pop %ebx
1168a6: 5e pop %esi
1168a7: 5f pop %edi
1168a8: 5d pop %ebp
1168a9: c3 ret
0010f040 <msdos_mknod>:
const char *name,
size_t namelen,
mode_t mode,
dev_t dev
)
{
10f040: 55 push %ebp
10f041: 89 e5 mov %esp,%ebp
10f043: 57 push %edi
10f044: 56 push %esi
10f045: 53 push %ebx
10f046: 83 ec 0c sub $0xc,%esp
10f049: 8b 5d 08 mov 0x8(%ebp),%ebx
10f04c: 8b 75 0c mov 0xc(%ebp),%esi
10f04f: 8b 7d 10 mov 0x10(%ebp),%edi
10f052: 8b 55 14 mov 0x14(%ebp),%edx
msdos_node_type_t type = 0;
/*
* Figure out what type of msdos node this is.
*/
if (S_ISDIR(mode))
10f055: 89 d1 mov %edx,%ecx
10f057: 81 e1 00 f0 00 00 and $0xf000,%ecx
10f05d: 81 f9 00 40 00 00 cmp $0x4000,%ecx
10f063: 74 0f je 10f074 <msdos_mknod+0x34>
{
type = MSDOS_DIRECTORY;
}
else if (S_ISREG(mode))
{
type = MSDOS_REGULAR_FILE;
10f065: b8 04 00 00 00 mov $0x4,%eax
*/
if (S_ISDIR(mode))
{
type = MSDOS_DIRECTORY;
}
else if (S_ISREG(mode))
10f06a: 81 f9 00 80 00 00 cmp $0x8000,%ecx
10f070: 74 04 je 10f076 <msdos_mknod+0x36> <== ALWAYS TAKEN
10f072: eb 24 jmp 10f098 <msdos_mknod+0x58> <== NOT EXECUTED
/*
* Figure out what type of msdos node this is.
*/
if (S_ISDIR(mode))
{
type = MSDOS_DIRECTORY;
10f074: 31 c0 xor %eax,%eax
}
else
rtems_set_errno_and_return_minus_one(EINVAL);
/* Create an MSDOS node */
rc = msdos_creat_node(parentloc, type, name, namelen, mode, NULL);
10f076: c7 45 1c 00 00 00 00 movl $0x0,0x1c(%ebp)
10f07d: 89 55 18 mov %edx,0x18(%ebp)
10f080: 89 7d 14 mov %edi,0x14(%ebp)
10f083: 89 75 10 mov %esi,0x10(%ebp)
10f086: 89 45 0c mov %eax,0xc(%ebp)
10f089: 89 5d 08 mov %ebx,0x8(%ebp)
return rc;
}
10f08c: 83 c4 0c add $0xc,%esp
10f08f: 5b pop %ebx
10f090: 5e pop %esi
10f091: 5f pop %edi
10f092: 5d pop %ebp
}
else
rtems_set_errno_and_return_minus_one(EINVAL);
/* Create an MSDOS node */
rc = msdos_creat_node(parentloc, type, name, namelen, mode, NULL);
10f093: e9 a4 71 00 00 jmp 11623c <msdos_creat_node>
else if (S_ISREG(mode))
{
type = MSDOS_REGULAR_FILE;
}
else
rtems_set_errno_and_return_minus_one(EINVAL);
10f098: e8 73 a7 00 00 call 119810 <__errno> <== NOT EXECUTED
10f09d: c7 00 16 00 00 00 movl $0x16,(%eax) <== NOT EXECUTED
/* Create an MSDOS node */
rc = msdos_creat_node(parentloc, type, name, namelen, mode, NULL);
return rc;
}
10f0a3: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
10f0a6: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
10f0a9: 5b pop %ebx <== NOT EXECUTED
10f0aa: 5e pop %esi <== NOT EXECUTED
10f0ab: 5f pop %edi <== NOT EXECUTED
10f0ac: 5d pop %ebp <== NOT EXECUTED
10f0ad: c3 ret <== NOT EXECUTED
0010f0c0 <msdos_rename>:
const rtems_filesystem_location_info_t *old_loc,
const rtems_filesystem_location_info_t *new_parent_loc,
const char *new_name,
size_t new_namelen
)
{
10f0c0: 55 push %ebp <== NOT EXECUTED
10f0c1: 89 e5 mov %esp,%ebp <== NOT EXECUTED
10f0c3: 56 push %esi <== NOT EXECUTED
10f0c4: 53 push %ebx <== NOT EXECUTED
10f0c5: 8b 5d 0c mov 0xc(%ebp),%ebx <== NOT EXECUTED
int rc = RC_OK;
fat_file_fd_t *old_fat_fd = old_loc->node_access;
10f0c8: 8b 73 08 mov 0x8(%ebx),%esi <== NOT EXECUTED
/*
* create new directory entry as "hard link", copying relevant info from
* existing file
*/
rc = msdos_creat_node(new_parent_loc,
10f0cb: 50 push %eax <== NOT EXECUTED
10f0cc: 50 push %eax <== NOT EXECUTED
10f0cd: 56 push %esi <== NOT EXECUTED
10f0ce: 68 00 80 00 00 push $0x8000 <== NOT EXECUTED
10f0d3: ff 75 18 pushl 0x18(%ebp) <== NOT EXECUTED
10f0d6: ff 75 14 pushl 0x14(%ebp) <== NOT EXECUTED
10f0d9: 6a 02 push $0x2 <== NOT EXECUTED
10f0db: ff 75 10 pushl 0x10(%ebp) <== NOT EXECUTED
10f0de: e8 59 71 00 00 call 11623c <msdos_creat_node> <== NOT EXECUTED
MSDOS_HARD_LINK,new_name,new_namelen,S_IFREG,
old_fat_fd);
if (rc != RC_OK)
10f0e3: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
10f0e6: 85 c0 test %eax,%eax <== NOT EXECUTED
10f0e8: 75 1e jne 10f108 <msdos_rename+0x48> <== NOT EXECUTED
}
/*
* mark file removed
*/
rc = msdos_set_first_char4file_name(old_loc->mt_entry,
10f0ea: c7 45 10 e5 00 00 00 movl $0xe5,0x10(%ebp) <== NOT EXECUTED
10f0f1: 83 c6 20 add $0x20,%esi <== NOT EXECUTED
10f0f4: 89 75 0c mov %esi,0xc(%ebp) <== NOT EXECUTED
10f0f7: 8b 43 14 mov 0x14(%ebx),%eax <== NOT EXECUTED
10f0fa: 89 45 08 mov %eax,0x8(%ebp) <== NOT EXECUTED
&old_fat_fd->dir_pos,
MSDOS_THIS_DIR_ENTRY_EMPTY);
return rc;
}
10f0fd: 8d 65 f8 lea -0x8(%ebp),%esp <== NOT EXECUTED
10f100: 5b pop %ebx <== NOT EXECUTED
10f101: 5e pop %esi <== NOT EXECUTED
10f102: 5d pop %ebp <== NOT EXECUTED
}
/*
* mark file removed
*/
rc = msdos_set_first_char4file_name(old_loc->mt_entry,
10f103: e9 42 79 00 00 jmp 116a4a <msdos_set_first_char4file_name><== NOT EXECUTED
&old_fat_fd->dir_pos,
MSDOS_THIS_DIR_ENTRY_EMPTY);
return rc;
}
10f108: 8d 65 f8 lea -0x8(%ebp),%esp <== NOT EXECUTED
10f10b: 5b pop %ebx <== NOT EXECUTED
10f10c: 5e pop %esi <== NOT EXECUTED
10f10d: 5d pop %ebp <== NOT EXECUTED
10f10e: c3 ret <== NOT EXECUTED
0010f110 <msdos_rmnod>:
#include "msdos.h"
int
msdos_rmnod(const rtems_filesystem_location_info_t *parent_pathloc,
const rtems_filesystem_location_info_t *pathloc)
{
10f110: 55 push %ebp
10f111: 89 e5 mov %esp,%ebp
10f113: 57 push %edi
10f114: 56 push %esi
10f115: 53 push %ebx
10f116: 83 ec 2c sub $0x2c,%esp
10f119: 8b 7d 0c mov 0xc(%ebp),%edi
int rc = RC_OK;
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
10f11c: 8b 47 14 mov 0x14(%edi),%eax
10f11f: 8b 70 08 mov 0x8(%eax),%esi
fat_file_fd_t *fat_fd = pathloc->node_access;
10f122: 8b 5f 08 mov 0x8(%edi),%ebx
if (fat_fd->fat_file_type == MSDOS_DIRECTORY)
10f125: 83 7b 10 00 cmpl $0x0,0x10(%ebx)
10f129: 75 58 jne 10f183 <msdos_rmnod+0x73>
{
bool is_empty = false;
10f12b: c6 45 e7 00 movb $0x0,-0x19(%ebp)
/*
* You cannot remove a node that still has children
*/
rc = msdos_dir_is_empty(pathloc->mt_entry, fat_fd, &is_empty);
10f12f: 51 push %ecx
10f130: 8d 55 e7 lea -0x19(%ebp),%edx
10f133: 52 push %edx
10f134: 53 push %ebx
10f135: 50 push %eax
10f136: e8 e5 79 00 00 call 116b20 <msdos_dir_is_empty>
if (rc != RC_OK)
10f13b: 83 c4 10 add $0x10,%esp
10f13e: 85 c0 test %eax,%eax
10f140: 75 6c jne 10f1ae <msdos_rmnod+0x9e> <== NEVER TAKEN
{
return rc;
}
if (!is_empty)
10f142: 80 7d e7 00 cmpb $0x0,-0x19(%ebp)
10f146: 75 0d jne 10f155 <msdos_rmnod+0x45>
{
rtems_set_errno_and_return_minus_one(ENOTEMPTY);
10f148: e8 c3 a6 00 00 call 119810 <__errno>
10f14d: c7 00 5a 00 00 00 movl $0x5a,(%eax)
10f153: eb 29 jmp 10f17e <msdos_rmnod+0x6e>
/*
* We deny attempts to delete open directory (if directory is current
* directory we assume it is open one)
*/
if (fat_fd->links_num > 1)
10f155: 83 7b 08 01 cmpl $0x1,0x8(%ebx)
10f159: 76 02 jbe 10f15d <msdos_rmnod+0x4d> <== ALWAYS TAKEN
10f15b: eb 16 jmp 10f173 <msdos_rmnod+0x63> <== NOT EXECUTED
static inline bool rtems_filesystem_location_is_root(
const rtems_filesystem_location_info_t *loc
)
{
const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry;
10f15d: 8b 47 14 mov 0x14(%edi),%eax
return (*mt_entry->ops->are_nodes_equal_h)(
10f160: 52 push %edx
10f161: 52 push %edx
10f162: 8b 50 0c mov 0xc(%eax),%edx
10f165: ff 70 24 pushl 0x24(%eax)
10f168: 57 push %edi
10f169: ff 52 10 call *0x10(%edx)
}
/*
* You cannot remove the file system root node.
*/
if (rtems_filesystem_location_is_root(pathloc))
10f16c: 83 c4 10 add $0x10,%esp
10f16f: 84 c0 test %al,%al
10f171: 74 10 je 10f183 <msdos_rmnod+0x73> <== ALWAYS TAKEN
{
rtems_set_errno_and_return_minus_one(EBUSY);
10f173: e8 98 a6 00 00 call 119810 <__errno> <== NOT EXECUTED
10f178: c7 00 10 00 00 00 movl $0x10,(%eax) <== NOT EXECUTED
10f17e: 83 c8 ff or $0xffffffff,%eax
10f181: eb 2b jmp 10f1ae <msdos_rmnod+0x9e>
* not used - mount() not implemenetd yet.
*/
}
/* mark file removed */
rc = msdos_set_first_char4file_name(pathloc->mt_entry, &fat_fd->dir_pos,
10f183: 51 push %ecx
10f184: 68 e5 00 00 00 push $0xe5
10f189: 8d 43 20 lea 0x20(%ebx),%eax
10f18c: 50 push %eax
10f18d: ff 77 14 pushl 0x14(%edi)
10f190: e8 b5 78 00 00 call 116a4a <msdos_set_first_char4file_name>
MSDOS_THIS_DIR_ENTRY_EMPTY);
if (rc != RC_OK)
10f195: 83 c4 10 add $0x10,%esp
10f198: 85 c0 test %eax,%eax
10f19a: 75 12 jne 10f1ae <msdos_rmnod+0x9e> <== NEVER TAKEN
{
return rc;
}
fat_file_mark_removed(&fs_info->fat, fat_fd);
10f19c: 52 push %edx
10f19d: 52 push %edx
10f19e: 53 push %ebx
10f19f: 56 push %esi
10f1a0: 89 45 d4 mov %eax,-0x2c(%ebp)
10f1a3: e8 9d 2f 00 00 call 112145 <fat_file_mark_removed>
return rc;
10f1a8: 83 c4 10 add $0x10,%esp
10f1ab: 8b 45 d4 mov -0x2c(%ebp),%eax
}
10f1ae: 8d 65 f4 lea -0xc(%ebp),%esp
10f1b1: 5b pop %ebx
10f1b2: 5e pop %esi
10f1b3: 5f pop %edi
10f1b4: 5d pop %ebp
10f1b5: c3 ret
001168aa <msdos_set_dir_wrt_time_and_date>:
int
msdos_set_dir_wrt_time_and_date(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd
)
{
1168aa: 55 push %ebp
1168ab: 89 e5 mov %esp,%ebp
1168ad: 57 push %edi
1168ae: 56 push %esi
1168af: 53 push %ebx
1168b0: 83 ec 30 sub $0x30,%esp
1168b3: 8b 75 0c mov 0xc(%ebp),%esi
ssize_t ret1 = 0, ret2 = 0, ret3 = 0;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
1168b6: 8b 45 08 mov 0x8(%ebp),%eax
1168b9: 8b 58 08 mov 0x8(%eax),%ebx
uint16_t time_val;
uint16_t date;
uint32_t sec = 0;
uint32_t byte = 0;
msdos_date_unix2dos(fat_fd->mtime, &date, &time_val);
1168bc: 8d 45 e4 lea -0x1c(%ebp),%eax
1168bf: 50 push %eax
1168c0: 8d 7d e6 lea -0x1a(%ebp),%edi
1168c3: 57 push %edi
1168c4: ff 76 40 pushl 0x40(%esi)
1168c7: e8 a0 21 00 00 call 118a6c <msdos_date_unix2dos>
/*
* calculate input for _fat_block_write: convert (cluster num, offset) to
* (sector num, new offset)
*/
sec = fat_cluster_num_to_sector_num(&fs_info->fat, fat_fd->dir_pos.sname.cln);
1168cc: 8b 56 20 mov 0x20(%esi),%edx
1168cf: 89 d8 mov %ebx,%eax
1168d1: e8 16 fe ff ff call 1166ec <fat_cluster_num_to_sector_num>
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
1168d6: 8b 56 24 mov 0x24(%esi),%edx
1168d9: 0f b6 4b 02 movzbl 0x2(%ebx),%ecx
1168dd: 89 d6 mov %edx,%esi
1168df: d3 ee shr %cl,%esi
1168e1: 01 c6 add %eax,%esi
1168e3: 89 75 d4 mov %esi,-0x2c(%ebp)
/* byte points to start of 32bytes structure */
byte = fat_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1);
1168e6: 0f b7 03 movzwl (%ebx),%eax
1168e9: 8d 70 ff lea -0x1(%eax),%esi
1168ec: 21 d6 and %edx,%esi
time_val = CT_LE_W(time_val);
ret1 = _fat_block_write(&fs_info->fat, sec, byte + MSDOS_FILE_WTIME_OFFSET,
1168ee: 8d 55 e4 lea -0x1c(%ebp),%edx
1168f1: 89 14 24 mov %edx,(%esp)
1168f4: 6a 02 push $0x2
1168f6: 8d 46 16 lea 0x16(%esi),%eax
1168f9: 50 push %eax
1168fa: ff 75 d4 pushl -0x2c(%ebp)
1168fd: 53 push %ebx
1168fe: e8 51 bc ff ff call 112554 <_fat_block_write>
116903: 89 45 d0 mov %eax,-0x30(%ebp)
2, (char *)(&time_val));
date = CT_LE_W(date);
ret2 = _fat_block_write(&fs_info->fat, sec, byte + MSDOS_FILE_WDATE_OFFSET,
116906: 83 c4 14 add $0x14,%esp
116909: 57 push %edi
11690a: 6a 02 push $0x2
11690c: 8d 46 18 lea 0x18(%esi),%eax
11690f: 50 push %eax
116910: ff 75 d4 pushl -0x2c(%ebp)
116913: 53 push %ebx
116914: e8 3b bc ff ff call 112554 <_fat_block_write>
2, (char *)(&date));
ret3 = _fat_block_write(&fs_info->fat, sec, byte + MSDOS_FILE_ADATE_OFFSET,
116919: 83 c4 14 add $0x14,%esp
11691c: 57 push %edi
11691d: 6a 02 push $0x2
11691f: 8d 56 12 lea 0x12(%esi),%edx
116922: 52 push %edx
116923: ff 75 d4 pushl -0x2c(%ebp)
116926: 53 push %ebx
116927: 89 45 cc mov %eax,-0x34(%ebp)
11692a: e8 25 bc ff ff call 112554 <_fat_block_write>
2, (char *)(&date));
if ( (ret1 < 0) || (ret2 < 0) || (ret3 < 0) )
11692f: 83 c4 20 add $0x20,%esp
116932: 8b 4d cc mov -0x34(%ebp),%ecx
116935: c1 e9 1f shr $0x1f,%ecx
116938: 75 08 jne 116942 <msdos_set_dir_wrt_time_and_date+0x98><== NEVER TAKEN
11693a: 8b 55 d0 mov -0x30(%ebp),%edx
11693d: c1 ea 1f shr $0x1f,%edx
116940: 74 05 je 116947 <msdos_set_dir_wrt_time_and_date+0x9d><== ALWAYS TAKEN
return -1;
116942: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
116945: eb 06 jmp 11694d <msdos_set_dir_wrt_time_and_date+0xa3><== NOT EXECUTED
ret2 = _fat_block_write(&fs_info->fat, sec, byte + MSDOS_FILE_WDATE_OFFSET,
2, (char *)(&date));
ret3 = _fat_block_write(&fs_info->fat, sec, byte + MSDOS_FILE_ADATE_OFFSET,
2, (char *)(&date));
if ( (ret1 < 0) || (ret2 < 0) || (ret3 < 0) )
116947: 85 c0 test %eax,%eax
116949: 78 f7 js 116942 <msdos_set_dir_wrt_time_and_date+0x98><== NEVER TAKEN
return -1;
return RC_OK;
11694b: 31 c0 xor %eax,%eax
}
11694d: 8d 65 f4 lea -0xc(%ebp),%esp
116950: 5b pop %ebx
116951: 5e pop %esi
116952: 5f pop %edi
116953: 5d pop %ebp
116954: c3 ret
00116a4a <msdos_set_first_char4file_name>:
msdos_set_first_char4file_name(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_dir_pos_t *dir_pos,
unsigned char fchar
)
{
116a4a: 55 push %ebp
116a4b: 89 e5 mov %esp,%ebp
116a4d: 57 push %edi
116a4e: 56 push %esi
116a4f: 53 push %ebx
116a50: 83 ec 2c sub $0x2c,%esp
116a53: 8b 4d 0c mov 0xc(%ebp),%ecx
116a56: 8b 45 10 mov 0x10(%ebp),%eax
116a59: 88 45 d4 mov %al,-0x2c(%ebp)
ssize_t ret;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
116a5c: 8b 45 08 mov 0x8(%ebp),%eax
116a5f: 8b 78 08 mov 0x8(%eax),%edi
uint32_t dir_block_size;
fat_pos_t start = dir_pos->lname;
116a62: 8b 41 08 mov 0x8(%ecx),%eax
116a65: 8b 51 0c mov 0xc(%ecx),%edx
116a68: 89 45 e0 mov %eax,-0x20(%ebp)
116a6b: 89 55 e4 mov %edx,-0x1c(%ebp)
fat_pos_t end = dir_pos->sname;
116a6e: 8b 19 mov (%ecx),%ebx
116a70: 8b 41 04 mov 0x4(%ecx),%eax
116a73: 89 45 d0 mov %eax,-0x30(%ebp)
if ((end.cln == fs_info->fat.vol.rdir_cl) &&
116a76: 3b 5f 38 cmp 0x38(%edi),%ebx
116a79: 75 0b jne 116a86 <msdos_set_first_char4file_name+0x3c><== NEVER TAKEN
116a7b: f6 47 0a 03 testb $0x3,0xa(%edi)
116a7f: 74 05 je 116a86 <msdos_set_first_char4file_name+0x3c><== NEVER TAKEN
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
dir_block_size = fs_info->fat.vol.rdir_size;
116a81: 8b 77 28 mov 0x28(%edi),%esi
116a84: eb 04 jmp 116a8a <msdos_set_first_char4file_name+0x40>
else
dir_block_size = fs_info->fat.vol.bpc;
116a86: 0f b7 77 06 movzwl 0x6(%edi),%esi <== NOT EXECUTED
if (dir_pos->lname.cln == FAT_FILE_SHORT_NAME)
116a8a: 83 79 08 ff cmpl $0xffffffff,0x8(%ecx)
116a8e: 75 0b jne 116a9b <msdos_set_first_char4file_name+0x51>
start = dir_pos->sname;
116a90: 8b 01 mov (%ecx),%eax
116a92: 8b 51 04 mov 0x4(%ecx),%edx
116a95: 89 45 e0 mov %eax,-0x20(%ebp)
116a98: 89 55 e4 mov %edx,-0x1c(%ebp)
* name code was written rather than use the fat_file_write
* interface.
*/
while (true)
{
uint32_t sec = (fat_cluster_num_to_sector_num(&fs_info->fat, start.cln) +
116a9b: 8b 55 e0 mov -0x20(%ebp),%edx
116a9e: 89 f8 mov %edi,%eax
116aa0: e8 47 fc ff ff call 1166ec <fat_cluster_num_to_sector_num>
(start.ofs >> fs_info->fat.vol.sec_log2));
116aa5: 8b 55 e4 mov -0x1c(%ebp),%edx
uint32_t byte = (start.ofs & (fs_info->fat.vol.bps - 1));
ret = _fat_block_write(&fs_info->fat, sec, byte + MSDOS_FILE_NAME_OFFSET,
116aa8: 83 ec 0c sub $0xc,%esp
116aab: 8d 4d d4 lea -0x2c(%ebp),%ecx
116aae: 51 push %ecx
116aaf: 6a 01 push $0x1
*/
while (true)
{
uint32_t sec = (fat_cluster_num_to_sector_num(&fs_info->fat, start.cln) +
(start.ofs >> fs_info->fat.vol.sec_log2));
uint32_t byte = (start.ofs & (fs_info->fat.vol.bps - 1));
116ab1: 0f b7 0f movzwl (%edi),%ecx
116ab4: 49 dec %ecx
116ab5: 21 d1 and %edx,%ecx
ret = _fat_block_write(&fs_info->fat, sec, byte + MSDOS_FILE_NAME_OFFSET,
116ab7: 51 push %ecx
* interface.
*/
while (true)
{
uint32_t sec = (fat_cluster_num_to_sector_num(&fs_info->fat, start.cln) +
(start.ofs >> fs_info->fat.vol.sec_log2));
116ab8: 0f b6 4f 02 movzbl 0x2(%edi),%ecx
116abc: d3 ea shr %cl,%edx
* name code was written rather than use the fat_file_write
* interface.
*/
while (true)
{
uint32_t sec = (fat_cluster_num_to_sector_num(&fs_info->fat, start.cln) +
116abe: 01 d0 add %edx,%eax
(start.ofs >> fs_info->fat.vol.sec_log2));
uint32_t byte = (start.ofs & (fs_info->fat.vol.bps - 1));
ret = _fat_block_write(&fs_info->fat, sec, byte + MSDOS_FILE_NAME_OFFSET,
116ac0: 50 push %eax
116ac1: 57 push %edi
116ac2: e8 8d ba ff ff call 112554 <_fat_block_write>
1, &fchar);
if (ret < 0)
116ac7: 83 c4 20 add $0x20,%esp
116aca: 85 c0 test %eax,%eax
116acc: 78 47 js 116b15 <msdos_set_first_char4file_name+0xcb><== NEVER TAKEN
return -1;
if ((start.cln == end.cln) && (start.ofs == end.ofs))
116ace: 8b 45 e0 mov -0x20(%ebp),%eax
116ad1: 39 d8 cmp %ebx,%eax
116ad3: 75 0c jne 116ae1 <msdos_set_first_char4file_name+0x97><== NEVER TAKEN
116ad5: 8b 55 d0 mov -0x30(%ebp),%edx
116ad8: 39 55 e4 cmp %edx,-0x1c(%ebp)
116adb: 75 04 jne 116ae1 <msdos_set_first_char4file_name+0x97>
return rc;
start.ofs = 0;
}
}
return RC_OK;
116add: 31 c0 xor %eax,%eax
116adf: eb 37 jmp 116b18 <msdos_set_first_char4file_name+0xce>
return -1;
if ((start.cln == end.cln) && (start.ofs == end.ofs))
break;
start.ofs += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
116ae1: 8b 55 e4 mov -0x1c(%ebp),%edx
116ae4: 83 c2 20 add $0x20,%edx
116ae7: 89 55 e4 mov %edx,-0x1c(%ebp)
if (start.ofs >= dir_block_size)
116aea: 39 f2 cmp %esi,%edx
116aec: 72 ad jb 116a9b <msdos_set_first_char4file_name+0x51>
{
int rc;
if ((end.cln == fs_info->fat.vol.rdir_cl) &&
116aee: 3b 5f 38 cmp 0x38(%edi),%ebx <== NOT EXECUTED
116af1: 75 06 jne 116af9 <msdos_set_first_char4file_name+0xaf><== NOT EXECUTED
116af3: f6 47 0a 03 testb $0x3,0xa(%edi) <== NOT EXECUTED
116af7: 75 e4 jne 116add <msdos_set_first_char4file_name+0x93><== NOT EXECUTED
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
break;
rc = fat_get_fat_cluster(&fs_info->fat, start.cln, &start.cln);
116af9: 52 push %edx <== NOT EXECUTED
116afa: 8d 4d e0 lea -0x20(%ebp),%ecx <== NOT EXECUTED
116afd: 51 push %ecx <== NOT EXECUTED
116afe: 50 push %eax <== NOT EXECUTED
116aff: 57 push %edi <== NOT EXECUTED
116b00: e8 fb 0f 00 00 call 117b00 <fat_get_fat_cluster> <== NOT EXECUTED
if ( rc != RC_OK )
116b05: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
116b08: 85 c0 test %eax,%eax <== NOT EXECUTED
116b0a: 75 0c jne 116b18 <msdos_set_first_char4file_name+0xce><== NOT EXECUTED
return rc;
start.ofs = 0;
116b0c: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) <== NOT EXECUTED
116b13: eb 86 jmp 116a9b <msdos_set_first_char4file_name+0x51><== NOT EXECUTED
uint32_t byte = (start.ofs & (fs_info->fat.vol.bps - 1));
ret = _fat_block_write(&fs_info->fat, sec, byte + MSDOS_FILE_NAME_OFFSET,
1, &fchar);
if (ret < 0)
return -1;
116b15: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
start.ofs = 0;
}
}
return RC_OK;
}
116b18: 8d 65 f4 lea -0xc(%ebp),%esp
116b1b: 5b pop %ebx
116b1c: 5e pop %esi
116b1d: 5f pop %edi
116b1e: 5d pop %ebp
116b1f: c3 ret
00116955 <msdos_set_first_cluster_num>:
int
msdos_set_first_cluster_num(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd
)
{
116955: 55 push %ebp
116956: 89 e5 mov %esp,%ebp
116958: 57 push %edi
116959: 56 push %esi
11695a: 53 push %ebx
11695b: 83 ec 2c sub $0x2c,%esp
11695e: 8b 75 0c mov 0xc(%ebp),%esi
ssize_t ret1 = 0, ret2 = 0;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
116961: 8b 45 08 mov 0x8(%ebp),%eax
116964: 8b 58 08 mov 0x8(%eax),%ebx
uint32_t new_cln = fat_fd->cln;
116967: 8b 7e 1c mov 0x1c(%esi),%edi
uint16_t le_cl_low = 0;
11696a: 66 c7 45 e4 00 00 movw $0x0,-0x1c(%ebp)
uint16_t le_cl_hi = 0;
116970: 66 c7 45 e6 00 00 movw $0x0,-0x1a(%ebp)
/*
* calculate input for _fat_block_write: convert (cluster num, offset) to
* (sector num, new offset)
*/
sec = fat_cluster_num_to_sector_num(&fs_info->fat, fat_fd->dir_pos.sname.cln);
116976: 8b 56 20 mov 0x20(%esi),%edx
116979: 89 d8 mov %ebx,%eax
11697b: e8 6c fd ff ff call 1166ec <fat_cluster_num_to_sector_num>
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
116980: 8b 56 24 mov 0x24(%esi),%edx
116983: 0f b6 4b 02 movzbl 0x2(%ebx),%ecx
116987: 89 d6 mov %edx,%esi
116989: d3 ee shr %cl,%esi
11698b: 89 f1 mov %esi,%ecx
11698d: 01 c1 add %eax,%ecx
11698f: 89 4d d4 mov %ecx,-0x2c(%ebp)
/* byte from points to start of 32bytes structure */
byte = fat_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1);
116992: 0f b7 33 movzwl (%ebx),%esi
116995: 4e dec %esi
116996: 21 d6 and %edx,%esi
le_cl_low = CT_LE_W((uint16_t )(new_cln & 0x0000FFFF));
116998: 66 89 7d e4 mov %di,-0x1c(%ebp)
ret1 = _fat_block_write(&fs_info->fat, sec,
11699c: 83 ec 0c sub $0xc,%esp
byte + MSDOS_FIRST_CLUSTER_LOW_OFFSET, 2,
(char *)(&le_cl_low));
11699f: 8d 45 e4 lea -0x1c(%ebp),%eax
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
/* byte from points to start of 32bytes structure */
byte = fat_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1);
le_cl_low = CT_LE_W((uint16_t )(new_cln & 0x0000FFFF));
ret1 = _fat_block_write(&fs_info->fat, sec,
1169a2: 50 push %eax
1169a3: 6a 02 push $0x2
1169a5: 8d 46 1a lea 0x1a(%esi),%eax
1169a8: 50 push %eax
1169a9: 51 push %ecx
1169aa: 53 push %ebx
1169ab: e8 a4 bb ff ff call 112554 <_fat_block_write>
1169b0: 89 c1 mov %eax,%ecx
byte + MSDOS_FIRST_CLUSTER_LOW_OFFSET, 2,
(char *)(&le_cl_low));
le_cl_hi = CT_LE_W((uint16_t )((new_cln & 0xFFFF0000) >> 16));
1169b2: c1 ef 10 shr $0x10,%edi
1169b5: 66 89 7d e6 mov %di,-0x1a(%ebp)
ret2 = _fat_block_write(&fs_info->fat, sec,
1169b9: 83 c4 14 add $0x14,%esp
byte + MSDOS_FIRST_CLUSTER_HI_OFFSET, 2,
(char *)(&le_cl_hi));
1169bc: 8d 45 e6 lea -0x1a(%ebp),%eax
le_cl_low = CT_LE_W((uint16_t )(new_cln & 0x0000FFFF));
ret1 = _fat_block_write(&fs_info->fat, sec,
byte + MSDOS_FIRST_CLUSTER_LOW_OFFSET, 2,
(char *)(&le_cl_low));
le_cl_hi = CT_LE_W((uint16_t )((new_cln & 0xFFFF0000) >> 16));
ret2 = _fat_block_write(&fs_info->fat, sec,
1169bf: 50 push %eax
1169c0: 6a 02 push $0x2
1169c2: 83 c6 14 add $0x14,%esi
1169c5: 56 push %esi
1169c6: ff 75 d4 pushl -0x2c(%ebp)
1169c9: 53 push %ebx
1169ca: 89 4d d0 mov %ecx,-0x30(%ebp)
1169cd: e8 82 bb ff ff call 112554 <_fat_block_write>
byte + MSDOS_FIRST_CLUSTER_HI_OFFSET, 2,
(char *)(&le_cl_hi));
if ( (ret1 < 0) || (ret2 < 0) )
1169d2: 83 c4 20 add $0x20,%esp
1169d5: c1 e8 1f shr $0x1f,%eax
1169d8: 8b 4d d0 mov -0x30(%ebp),%ecx
1169db: 75 07 jne 1169e4 <msdos_set_first_cluster_num+0x8f><== NEVER TAKEN
return -1;
return RC_OK;
1169dd: 31 c0 xor %eax,%eax
(char *)(&le_cl_low));
le_cl_hi = CT_LE_W((uint16_t )((new_cln & 0xFFFF0000) >> 16));
ret2 = _fat_block_write(&fs_info->fat, sec,
byte + MSDOS_FIRST_CLUSTER_HI_OFFSET, 2,
(char *)(&le_cl_hi));
if ( (ret1 < 0) || (ret2 < 0) )
1169df: c1 e9 1f shr $0x1f,%ecx
1169e2: 74 03 je 1169e7 <msdos_set_first_cluster_num+0x92><== ALWAYS TAKEN
return -1;
1169e4: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
return RC_OK;
}
1169e7: 8d 65 f4 lea -0xc(%ebp),%esp
1169ea: 5b pop %ebx
1169eb: 5e pop %esi
1169ec: 5f pop %edi
1169ed: 5d pop %ebp
1169ee: c3 ret
001178a8 <msdos_sync>:
int
msdos_sync(rtems_libio_t *iop)
{
1178a8: 55 push %ebp <== NOT EXECUTED
1178a9: 89 e5 mov %esp,%ebp <== NOT EXECUTED
1178ab: 56 push %esi <== NOT EXECUTED
1178ac: 53 push %ebx <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
1178ad: 8b 45 08 mov 0x8(%ebp),%eax <== NOT EXECUTED
1178b0: 8b 40 24 mov 0x24(%eax),%eax <== NOT EXECUTED
1178b3: 8b 58 08 mov 0x8(%eax),%ebx <== NOT EXECUTED
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
1178b6: 50 push %eax <== NOT EXECUTED
1178b7: 6a 00 push $0x0 <== NOT EXECUTED
1178b9: 6a 00 push $0x0 <== NOT EXECUTED
1178bb: ff b3 90 00 00 00 pushl 0x90(%ebx) <== NOT EXECUTED
1178c1: e8 9e 35 ff ff call 10ae64 <rtems_semaphore_obtain><== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
1178c6: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
1178c9: 85 c0 test %eax,%eax <== NOT EXECUTED
1178cb: 74 10 je 1178dd <msdos_sync+0x35> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
1178cd: e8 3e 1f 00 00 call 119810 <__errno> <== NOT EXECUTED
1178d2: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
1178d8: 83 ce ff or $0xffffffff,%esi <== NOT EXECUTED
1178db: eb 1a jmp 1178f7 <msdos_sync+0x4f> <== NOT EXECUTED
rc = msdos_sync_unprotected(fs_info);
1178dd: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1178e0: 53 push %ebx <== NOT EXECUTED
1178e1: e8 88 ff ff ff call 11786e <msdos_sync_unprotected><== NOT EXECUTED
1178e6: 89 c6 mov %eax,%esi <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
1178e8: 58 pop %eax <== NOT EXECUTED
1178e9: ff b3 90 00 00 00 pushl 0x90(%ebx) <== NOT EXECUTED
1178ef: e8 60 36 ff ff call 10af54 <rtems_semaphore_release><== NOT EXECUTED
return rc;
1178f4: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
1178f7: 89 f0 mov %esi,%eax <== NOT EXECUTED
1178f9: 8d 65 f8 lea -0x8(%ebp),%esp <== NOT EXECUTED
1178fc: 5b pop %ebx <== NOT EXECUTED
1178fd: 5e pop %esi <== NOT EXECUTED
1178fe: 5d pop %ebp <== NOT EXECUTED
1178ff: c3 ret <== NOT EXECUTED
0011786e <msdos_sync_unprotected>:
return MSDOS_NAME_NOT_FOUND_ERR;
}
int
msdos_sync_unprotected(msdos_fs_info_t *fs_info)
{
11786e: 55 push %ebp
11786f: 89 e5 mov %esp,%ebp
117871: 56 push %esi
117872: 53 push %ebx
117873: 8b 5d 08 mov 0x8(%ebp),%ebx
int rc = fat_buf_release(&fs_info->fat);
117876: 83 ec 0c sub $0xc,%esp
117879: 53 push %ebx
11787a: e8 3a ab ff ff call 1123b9 <fat_buf_release>
11787f: 89 c6 mov %eax,%esi
rtems_status_code sc = rtems_bdbuf_syncdev(fs_info->fat.vol.dd);
117881: 58 pop %eax
117882: ff 73 58 pushl 0x58(%ebx)
117885: e8 a9 98 ff ff call 111133 <rtems_bdbuf_syncdev>
if (sc != RTEMS_SUCCESSFUL) {
11788a: 83 c4 10 add $0x10,%esp
11788d: 85 c0 test %eax,%eax
11788f: 74 0e je 11789f <msdos_sync_unprotected+0x31><== ALWAYS TAKEN
errno = EIO;
117891: e8 7a 1f 00 00 call 119810 <__errno> <== NOT EXECUTED
117896: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
rc = -1;
11789c: 83 ce ff or $0xffffffff,%esi <== NOT EXECUTED
}
return rc;
}
11789f: 89 f0 mov %esi,%eax
1178a1: 8d 65 f8 lea -0x8(%ebp),%esp
1178a4: 5b pop %ebx
1178a5: 5e pop %esi
1178a6: 5d pop %ebp
1178a7: c3 ret
0010ee01 <msdos_unlock>:
rtems_fatal_error_occurred(0xdeadbeef);
}
}
void msdos_unlock(const rtems_filesystem_mount_table_entry_t *mt_entry)
{
10ee01: 55 push %ebp
10ee02: 89 e5 mov %esp,%ebp
10ee04: 83 ec 14 sub $0x14,%esp
msdos_fs_info_t *fs_info = mt_entry->fs_info;
rtems_status_code sc = rtems_semaphore_release(fs_info->vol_sema);
10ee07: 8b 45 08 mov 0x8(%ebp),%eax
10ee0a: 8b 40 08 mov 0x8(%eax),%eax
10ee0d: ff b0 90 00 00 00 pushl 0x90(%eax)
10ee13: e8 3c c1 ff ff call 10af54 <rtems_semaphore_release>
if (sc != RTEMS_SUCCESSFUL) {
10ee18: 83 c4 10 add $0x10,%esp
10ee1b: 85 c0 test %eax,%eax
10ee1d: 74 0d je 10ee2c <msdos_unlock+0x2b> <== ALWAYS TAKEN
rtems_fatal_error_occurred(0xdeadbeef);
10ee1f: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10ee22: 68 ef be ad de push $0xdeadbeef <== NOT EXECUTED
10ee27: e8 24 c6 ff ff call 10b450 <rtems_fatal_error_occurred><== NOT EXECUTED
}
}
10ee2c: c9 leave
10ee2d: c3 ret
00106f3d <newlib_create_hook>:
*/
bool newlib_create_hook(
rtems_tcb *current_task __attribute__((unused)),
rtems_tcb *creating_task
)
{
106f3d: 55 push %ebp
106f3e: 89 e5 mov %esp,%ebp
106f40: 57 push %edi
106f41: 56 push %esi
106f42: 53 push %ebx
106f43: 83 ec 1c sub $0x1c,%esp
struct _reent *ptr;
if (_Thread_libc_reent == 0)
106f46: 83 3d 5c e4 12 00 00 cmpl $0x0,0x12e45c
106f4d: 75 14 jne 106f63 <newlib_create_hook+0x26>
{
_REENT = _global_impure_ptr;
106f4f: a1 60 04 12 00 mov 0x120460,%eax
106f54: a3 a0 c2 12 00 mov %eax,0x12c2a0
RTEMS_INLINE_ROUTINE void _Thread_Set_libc_reent (
struct _reent **libc_reent
)
{
_Thread_libc_reent = libc_reent;
106f59: c7 05 5c e4 12 00 a0 movl $0x12c2a0,0x12e45c
106f60: c2 12 00
ptr = (struct _reent *) calloc(1, sizeof(struct _reent));
#else
/* It is OK to allocate from the workspace because these
* hooks run with thread dispatching disabled.
*/
ptr = (struct _reent *) _Workspace_Allocate(sizeof(struct _reent));
106f63: 83 ec 0c sub $0xc,%esp
106f66: 68 24 04 00 00 push $0x424
106f6b: e8 d4 5b 00 00 call 10cb44 <_Workspace_Allocate>
106f70: 89 c2 mov %eax,%edx
#endif
if (ptr) {
106f72: 83 c4 10 add $0x10,%esp
106f75: 85 c0 test %eax,%eax
106f77: 0f 84 28 02 00 00 je 1071a5 <newlib_create_hook+0x268><== NEVER TAKEN
_REENT_INIT_PTR((ptr)); /* GCC extension: structure constants */
106f7d: c7 00 00 00 00 00 movl $0x0,(%eax)
106f83: 8d 98 ec 02 00 00 lea 0x2ec(%eax),%ebx
106f89: 89 58 04 mov %ebx,0x4(%eax)
106f8c: 8d 80 54 03 00 00 lea 0x354(%eax),%eax
106f92: 89 42 08 mov %eax,0x8(%edx)
106f95: 8d 82 bc 03 00 00 lea 0x3bc(%edx),%eax
106f9b: 89 42 0c mov %eax,0xc(%edx)
106f9e: c7 42 10 00 00 00 00 movl $0x0,0x10(%edx)
106fa5: 8d 72 14 lea 0x14(%edx),%esi
106fa8: 31 c0 xor %eax,%eax
106faa: 89 f7 mov %esi,%edi
106fac: b9 19 00 00 00 mov $0x19,%ecx
106fb1: f3 aa rep stos %al,%es:(%edi)
106fb3: 89 4d e4 mov %ecx,-0x1c(%ebp)
106fb6: c7 42 30 00 00 00 00 movl $0x0,0x30(%edx)
106fbd: c7 42 34 df ef 11 00 movl $0x11efdf,0x34(%edx)
106fc4: c7 42 38 00 00 00 00 movl $0x0,0x38(%edx)
106fcb: c7 42 3c 00 00 00 00 movl $0x0,0x3c(%edx)
106fd2: c7 42 40 00 00 00 00 movl $0x0,0x40(%edx)
106fd9: c7 42 44 00 00 00 00 movl $0x0,0x44(%edx)
106fe0: c7 42 48 00 00 00 00 movl $0x0,0x48(%edx)
106fe7: c7 42 4c 00 00 00 00 movl $0x0,0x4c(%edx)
106fee: c7 42 50 00 00 00 00 movl $0x0,0x50(%edx)
106ff5: c7 42 54 00 00 00 00 movl $0x0,0x54(%edx)
106ffc: c7 42 58 00 00 00 00 movl $0x0,0x58(%edx)
107003: c7 42 5c 00 00 00 00 movl $0x0,0x5c(%edx)
10700a: c6 42 60 00 movb $0x0,0x60(%edx)
10700e: 8d 72 7c lea 0x7c(%edx),%esi
107011: b1 09 mov $0x9,%cl
107013: 89 f7 mov %esi,%edi
107015: 31 c0 xor %eax,%eax
107017: f3 ab rep stos %eax,%es:(%edi)
107019: c7 82 a0 00 00 00 00 movl $0x0,0xa0(%edx)
107020: 00 00 00
107023: c7 82 a4 00 00 00 01 movl $0x1,0xa4(%edx)
10702a: 00 00 00
10702d: c7 82 a8 00 00 00 00 movl $0x0,0xa8(%edx)
107034: 00 00 00
107037: 66 c7 82 ac 00 00 00 movw $0x330e,0xac(%edx)
10703e: 0e 33
107040: 66 c7 82 ae 00 00 00 movw $0xabcd,0xae(%edx)
107047: cd ab
107049: 66 c7 82 b0 00 00 00 movw $0x1234,0xb0(%edx)
107050: 34 12
107052: 66 c7 82 b2 00 00 00 movw $0xe66d,0xb2(%edx)
107059: 6d e6
10705b: 66 c7 82 b4 00 00 00 movw $0xdeec,0xb4(%edx)
107062: ec de
107064: 66 c7 82 b6 00 00 00 movw $0x5,0xb6(%edx)
10706b: 05 00
10706d: 66 c7 82 b8 00 00 00 movw $0xb,0xb8(%edx)
107074: 0b 00
107076: c7 82 bc 00 00 00 00 movl $0x0,0xbc(%edx)
10707d: 00 00 00
107080: c7 82 c0 00 00 00 00 movl $0x0,0xc0(%edx)
107087: 00 00 00
10708a: c7 82 c4 00 00 00 00 movl $0x0,0xc4(%edx)
107091: 00 00 00
107094: c7 82 c8 00 00 00 00 movl $0x0,0xc8(%edx)
10709b: 00 00 00
10709e: c7 82 cc 00 00 00 00 movl $0x0,0xcc(%edx)
1070a5: 00 00 00
1070a8: c7 82 d0 00 00 00 00 movl $0x0,0xd0(%edx)
1070af: 00 00 00
1070b2: c7 82 f8 00 00 00 00 movl $0x0,0xf8(%edx)
1070b9: 00 00 00
1070bc: c7 82 fc 00 00 00 00 movl $0x0,0xfc(%edx)
1070c3: 00 00 00
1070c6: c7 82 00 01 00 00 00 movl $0x0,0x100(%edx)
1070cd: 00 00 00
1070d0: c7 82 04 01 00 00 00 movl $0x0,0x104(%edx)
1070d7: 00 00 00
1070da: c7 82 08 01 00 00 00 movl $0x0,0x108(%edx)
1070e1: 00 00 00
1070e4: c7 82 0c 01 00 00 00 movl $0x0,0x10c(%edx)
1070eb: 00 00 00
1070ee: c7 82 10 01 00 00 00 movl $0x0,0x110(%edx)
1070f5: 00 00 00
1070f8: c7 82 14 01 00 00 00 movl $0x0,0x114(%edx)
1070ff: 00 00 00
107102: c7 82 18 01 00 00 00 movl $0x0,0x118(%edx)
107109: 00 00 00
10710c: c7 82 1c 01 00 00 00 movl $0x0,0x11c(%edx)
107113: 00 00 00
107116: c6 82 d4 00 00 00 00 movb $0x0,0xd4(%edx)
10711d: c6 82 dc 00 00 00 00 movb $0x0,0xdc(%edx)
107124: c7 82 f4 00 00 00 00 movl $0x0,0xf4(%edx)
10712b: 00 00 00
10712e: c7 82 48 01 00 00 00 movl $0x0,0x148(%edx)
107135: 00 00 00
107138: c7 82 4c 01 00 00 00 movl $0x0,0x14c(%edx)
10713f: 00 00 00
107142: c7 82 50 01 00 00 00 movl $0x0,0x150(%edx)
107149: 00 00 00
10714c: c7 82 54 01 00 00 00 movl $0x0,0x154(%edx)
107153: 00 00 00
107156: c7 82 d4 02 00 00 00 movl $0x0,0x2d4(%edx)
10715d: 00 00 00
107160: c7 82 d4 01 00 00 00 movl $0x0,0x1d4(%edx)
107167: 00 00 00
10716a: c7 82 dc 02 00 00 00 movl $0x0,0x2dc(%edx)
107171: 00 00 00
107174: c7 82 e0 02 00 00 00 movl $0x0,0x2e0(%edx)
10717b: 00 00 00
10717e: c7 82 e4 02 00 00 00 movl $0x0,0x2e4(%edx)
107185: 00 00 00
107188: c7 82 e8 02 00 00 00 movl $0x0,0x2e8(%edx)
10718f: 00 00 00
107192: b1 4e mov $0x4e,%cl
107194: 89 df mov %ebx,%edi
107196: f3 ab rep stos %eax,%es:(%edi)
creating_task->libc_reent = ptr;
107198: 8b 45 0c mov 0xc(%ebp),%eax
10719b: 89 90 e0 00 00 00 mov %edx,0xe0(%eax)
return TRUE;
1071a1: b0 01 mov $0x1,%al
1071a3: eb 02 jmp 1071a7 <newlib_create_hook+0x26a>
}
return FALSE;
1071a5: 31 c0 xor %eax,%eax
}
1071a7: 8d 65 f4 lea -0xc(%ebp),%esp
1071aa: 5b pop %ebx
1071ab: 5e pop %esi
1071ac: 5f pop %edi
1071ad: 5d pop %ebp
1071ae: c3 ret
001071af <newlib_delete_hook>:
void newlib_delete_hook(
rtems_tcb *current_task,
rtems_tcb *deleted_task
)
{
1071af: 55 push %ebp
1071b0: 89 e5 mov %esp,%ebp
1071b2: 56 push %esi
1071b3: 53 push %ebx
1071b4: 8b 75 0c mov 0xc(%ebp),%esi
/*
* The reentrancy structure was allocated by newlib using malloc()
*/
if (current_task == deleted_task) {
ptr = _REENT;
1071b7: 8b 1d a0 c2 12 00 mov 0x12c2a0,%ebx
/*
* The reentrancy structure was allocated by newlib using malloc()
*/
if (current_task == deleted_task) {
1071bd: 39 75 08 cmp %esi,0x8(%ebp)
1071c0: 74 06 je 1071c8 <newlib_delete_hook+0x19>
ptr = _REENT;
} else {
ptr = deleted_task->libc_reent;
1071c2: 8b 9e e0 00 00 00 mov 0xe0(%esi),%ebx
}
if (ptr && ptr != _global_impure_ptr) {
1071c8: 85 db test %ebx,%ebx
1071ca: 74 20 je 1071ec <newlib_delete_hook+0x3d><== NEVER TAKEN
1071cc: 3b 1d 60 04 12 00 cmp 0x120460,%ebx
1071d2: 74 18 je 1071ec <newlib_delete_hook+0x3d>
_reclaim_reent(ptr);
*/
/*
* Just in case there are some buffers lying around.
*/
_fwalk(ptr, newlib_free_buffers);
1071d4: 50 push %eax
1071d5: 50 push %eax
1071d6: 68 ec 6e 10 00 push $0x106eec
1071db: 53 push %ebx
1071dc: e8 4f a4 00 00 call 111630 <_fwalk>
#if REENT_MALLOCED
free(ptr);
#else
_Workspace_Free(ptr);
1071e1: 89 1c 24 mov %ebx,(%esp)
1071e4: e8 74 59 00 00 call 10cb5d <_Workspace_Free>
1071e9: 83 c4 10 add $0x10,%esp
#endif
}
deleted_task->libc_reent = NULL;
1071ec: c7 86 e0 00 00 00 00 movl $0x0,0xe0(%esi)
1071f3: 00 00 00
/*
* Require the switch back to another task to install its own
*/
if ( current_task == deleted_task ) {
1071f6: 39 75 08 cmp %esi,0x8(%ebp)
1071f9: 75 0a jne 107205 <newlib_delete_hook+0x56>
_REENT = 0;
1071fb: c7 05 a0 c2 12 00 00 movl $0x0,0x12c2a0
107202: 00 00 00
}
}
107205: 8d 65 f8 lea -0x8(%ebp),%esp
107208: 5b pop %ebx
107209: 5e pop %esi
10720a: 5d pop %ebp
10720b: c3 ret
00106eec <newlib_free_buffers>:
*/
int newlib_free_buffers(
FILE *fp
)
{
106eec: 55 push %ebp
106eed: 89 e5 mov %esp,%ebp
106eef: 53 push %ebx
106ef0: 83 ec 10 sub $0x10,%esp
106ef3: 8b 5d 08 mov 0x8(%ebp),%ebx
switch ( fileno(fp) ) {
106ef6: 53 push %ebx
106ef7: e8 84 a3 00 00 call 111280 <fileno>
106efc: 83 c4 10 add $0x10,%esp
106eff: 83 f8 02 cmp $0x2,%eax
106f02: 77 26 ja 106f2a <newlib_free_buffers+0x3e><== NEVER TAKEN
case 0:
case 1:
case 2:
if (fp->_flags & __SMBF) {
106f04: f6 43 0c 80 testb $0x80,0xc(%ebx)
106f08: 74 2c je 106f36 <newlib_free_buffers+0x4a><== ALWAYS TAKEN
free( fp->_bf._base );
106f0a: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
106f0d: ff 73 10 pushl 0x10(%ebx) <== NOT EXECUTED
106f10: e8 1f f8 ff ff call 106734 <free> <== NOT EXECUTED
fp->_flags &= ~__SMBF;
106f15: 66 81 63 0c 7f ff andw $0xff7f,0xc(%ebx) <== NOT EXECUTED
fp->_bf._base = fp->_p = (unsigned char *) NULL;
106f1b: c7 03 00 00 00 00 movl $0x0,(%ebx) <== NOT EXECUTED
106f21: c7 43 10 00 00 00 00 movl $0x0,0x10(%ebx) <== NOT EXECUTED
106f28: eb 09 jmp 106f33 <newlib_free_buffers+0x47><== NOT EXECUTED
}
break;
default:
fclose(fp);
106f2a: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
106f2d: 53 push %ebx <== NOT EXECUTED
106f2e: e8 c5 a0 00 00 call 110ff8 <fclose> <== NOT EXECUTED
106f33: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
return 0;
}
106f36: 31 c0 xor %eax,%eax
106f38: 8b 5d fc mov -0x4(%ebp),%ebx
106f3b: c9 leave
106f3c: c3 ret
001009ab <notify>:
void
notify (s)
char *s;
{
1009ab: 55 push %ebp <== NOT EXECUTED
1009ac: 89 e5 mov %esp,%ebp <== NOT EXECUTED
1009ae: 83 ec 10 sub $0x10,%esp <== NOT EXECUTED
printf ("%s test appears to be inconsistent...\n", s);
1009b1: ff 75 08 pushl 0x8(%ebp) <== NOT EXECUTED
1009b4: 68 86 53 12 00 push $0x125386 <== NOT EXECUTED
1009b9: e8 e2 7d 01 00 call 1187a0 <printf> <== NOT EXECUTED
printf (" PLEASE NOTIFY KARPINKSI!\n");
1009be: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
1009c1: c7 45 08 ad 53 12 00 movl $0x1253ad,0x8(%ebp) <== NOT EXECUTED
}
1009c8: c9 leave <== NOT EXECUTED
void
notify (s)
char *s;
{
printf ("%s test appears to be inconsistent...\n", s);
printf (" PLEASE NOTIFY KARPINKSI!\n");
1009c9: e9 ce 7e 01 00 jmp 11889c <puts> <== NOT EXECUTED
00109579 <null_op_fsmount_me>:
static int null_op_fsmount_me(
rtems_filesystem_mount_table_entry_t *mt_entry,
const void *data
)
{
109579: 55 push %ebp <== NOT EXECUTED
10957a: 89 e5 mov %esp,%ebp <== NOT EXECUTED
return -1;
}
10957c: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
10957f: 5d pop %ebp <== NOT EXECUTED
109580: c3 ret <== NOT EXECUTED
00109589 <null_op_fsunmount_me>:
static void null_op_fsunmount_me(
rtems_filesystem_mount_table_entry_t *mt_entry
)
{
109589: 55 push %ebp <== NOT EXECUTED
10958a: 89 e5 mov %esp,%ebp <== NOT EXECUTED
/* Do nothing */
}
10958c: 5d pop %ebp <== NOT EXECUTED
10958d: c3 ret <== NOT EXECUTED
00109551 <null_op_link>:
const rtems_filesystem_location_info_t *parentloc,
const rtems_filesystem_location_info_t *targetloc,
const char *name,
size_t namelen
)
{
109551: 55 push %ebp <== NOT EXECUTED
109552: 89 e5 mov %esp,%ebp <== NOT EXECUTED
return -1;
}
109554: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
109557: 5d pop %ebp <== NOT EXECUTED
109558: c3 ret <== NOT EXECUTED
00109571 <null_op_mount>:
static int null_op_mount(
rtems_filesystem_mount_table_entry_t *mt_entry
)
{
109571: 55 push %ebp <== NOT EXECUTED
109572: 89 e5 mov %esp,%ebp <== NOT EXECUTED
return -1;
}
109574: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
109577: 5d pop %ebp <== NOT EXECUTED
109578: c3 ret <== NOT EXECUTED
0010959e <null_op_readlink>:
static ssize_t null_op_readlink(
const rtems_filesystem_location_info_t *loc,
char *buf,
size_t bufsize
)
{
10959e: 55 push %ebp <== NOT EXECUTED
10959f: 89 e5 mov %esp,%ebp <== NOT EXECUTED
return -1;
}
1095a1: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
1095a4: 5d pop %ebp <== NOT EXECUTED
1095a5: c3 ret <== NOT EXECUTED
001095a6 <null_op_rename>:
const rtems_filesystem_location_info_t *oldloc,
const rtems_filesystem_location_info_t *newparentloc,
const char *name,
size_t namelen
)
{
1095a6: 55 push %ebp <== NOT EXECUTED
1095a7: 89 e5 mov %esp,%ebp <== NOT EXECUTED
return -1;
}
1095a9: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
1095ac: 5d pop %ebp <== NOT EXECUTED
1095ad: c3 ret <== NOT EXECUTED
00106160 <null_write>:
rtems_device_driver null_write(
rtems_device_major_number major __attribute__((unused)),
rtems_device_minor_number minor __attribute__((unused)),
void *pargp
)
{
106160: 55 push %ebp
106161: 89 e5 mov %esp,%ebp
106163: 8b 45 10 mov 0x10(%ebp),%eax
rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *) pargp;
if ( rw_args )
106166: 85 c0 test %eax,%eax
106168: 74 06 je 106170 <null_write+0x10> <== ALWAYS TAKEN
rw_args->bytes_moved = rw_args->count;
10616a: 8b 50 10 mov 0x10(%eax),%edx <== NOT EXECUTED
10616d: 89 50 18 mov %edx,0x18(%eax) <== NOT EXECUTED
return NULL_SUCCESSFUL;
}
106170: 31 c0 xor %eax,%eax
106172: 5d pop %ebp
106173: c3 ret
001089d1 <oproc>:
/*
* Handle output processing
*/
static void
oproc (unsigned char c, struct rtems_termios_tty *tty)
{
1089d1: 55 push %ebp
1089d2: 89 e5 mov %esp,%ebp
1089d4: 56 push %esi
1089d5: 53 push %ebx
1089d6: 83 ec 10 sub $0x10,%esp
1089d9: 89 d3 mov %edx,%ebx
1089db: 88 45 f4 mov %al,-0xc(%ebp)
int i;
if (tty->termios.c_oflag & OPOST) {
1089de: 8b 52 34 mov 0x34(%edx),%edx
1089e1: f6 c2 01 test $0x1,%dl
1089e4: 0f 84 e7 00 00 00 je 108ad1 <oproc+0x100> <== NEVER TAKEN
switch (c) {
1089ea: 3c 09 cmp $0x9,%al
1089ec: 74 75 je 108a63 <oproc+0x92>
1089ee: 77 0d ja 1089fd <oproc+0x2c> <== ALWAYS TAKEN
1089f0: 3c 08 cmp $0x8,%al <== NOT EXECUTED
1089f2: 0f 85 a5 00 00 00 jne 108a9d <oproc+0xcc> <== NOT EXECUTED
1089f8: e9 93 00 00 00 jmp 108a90 <oproc+0xbf> <== NOT EXECUTED
1089fd: 3c 0a cmp $0xa,%al
1089ff: 74 0a je 108a0b <oproc+0x3a>
108a01: 3c 0d cmp $0xd,%al
108a03: 0f 85 94 00 00 00 jne 108a9d <oproc+0xcc> <== ALWAYS TAKEN
108a09: eb 32 jmp 108a3d <oproc+0x6c> <== NOT EXECUTED
case '\n':
if (tty->termios.c_oflag & ONLRET)
108a0b: f6 c2 20 test $0x20,%dl
108a0e: 74 07 je 108a17 <oproc+0x46> <== ALWAYS TAKEN
tty->column = 0;
108a10: c7 43 28 00 00 00 00 movl $0x0,0x28(%ebx) <== NOT EXECUTED
if (tty->termios.c_oflag & ONLCR) {
108a17: 80 e2 04 and $0x4,%dl
108a1a: 0f 84 b1 00 00 00 je 108ad1 <oproc+0x100> <== NEVER TAKEN
rtems_termios_puts ("\r", 1, tty);
108a20: 51 push %ecx
108a21: 53 push %ebx
108a22: 6a 01 push $0x1
108a24: 68 14 fa 11 00 push $0x11fa14
108a29: e8 97 fe ff ff call 1088c5 <rtems_termios_puts>
tty->column = 0;
108a2e: c7 43 28 00 00 00 00 movl $0x0,0x28(%ebx)
108a35: 83 c4 10 add $0x10,%esp
108a38: e9 94 00 00 00 jmp 108ad1 <oproc+0x100>
}
break;
case '\r':
if ((tty->termios.c_oflag & ONOCR) && (tty->column == 0))
108a3d: f6 c2 10 test $0x10,%dl <== NOT EXECUTED
108a40: 74 0a je 108a4c <oproc+0x7b> <== NOT EXECUTED
108a42: 83 7b 28 00 cmpl $0x0,0x28(%ebx) <== NOT EXECUTED
108a46: 0f 84 95 00 00 00 je 108ae1 <oproc+0x110> <== NOT EXECUTED
return;
if (tty->termios.c_oflag & OCRNL) {
108a4c: f6 c2 08 test $0x8,%dl <== NOT EXECUTED
108a4f: 74 09 je 108a5a <oproc+0x89> <== NOT EXECUTED
c = '\n';
108a51: c6 45 f4 0a movb $0xa,-0xc(%ebp) <== NOT EXECUTED
if (tty->termios.c_oflag & ONLRET)
108a55: 80 e2 20 and $0x20,%dl <== NOT EXECUTED
108a58: 74 77 je 108ad1 <oproc+0x100> <== NOT EXECUTED
tty->column = 0;
break;
}
tty->column = 0;
108a5a: c7 43 28 00 00 00 00 movl $0x0,0x28(%ebx) <== NOT EXECUTED
break;
108a61: eb 6e jmp 108ad1 <oproc+0x100> <== NOT EXECUTED
case '\t':
i = 8 - (tty->column & 7);
108a63: 8b 4b 28 mov 0x28(%ebx),%ecx
108a66: 89 ce mov %ecx,%esi
108a68: 83 e6 07 and $0x7,%esi
108a6b: b8 08 00 00 00 mov $0x8,%eax
108a70: 29 f0 sub %esi,%eax
if ((tty->termios.c_oflag & TABDLY) == XTABS) {
108a72: 81 e2 00 18 00 00 and $0x1800,%edx
108a78: 81 fa 00 18 00 00 cmp $0x1800,%edx
108a7e: 8d 14 01 lea (%ecx,%eax,1),%edx
tty->column += i;
108a81: 89 53 28 mov %edx,0x28(%ebx)
tty->column = 0;
break;
case '\t':
i = 8 - (tty->column & 7);
if ((tty->termios.c_oflag & TABDLY) == XTABS) {
108a84: 75 4b jne 108ad1 <oproc+0x100> <== NEVER TAKEN
tty->column += i;
rtems_termios_puts ( " ", i, tty);
108a86: 52 push %edx
108a87: 53 push %ebx
108a88: 50 push %eax
108a89: 68 74 ee 11 00 push $0x11ee74
108a8e: eb 49 jmp 108ad9 <oproc+0x108>
}
tty->column += i;
break;
case '\b':
if (tty->column > 0)
108a90: 8b 43 28 mov 0x28(%ebx),%eax <== NOT EXECUTED
108a93: 85 c0 test %eax,%eax <== NOT EXECUTED
108a95: 7e 3a jle 108ad1 <oproc+0x100> <== NOT EXECUTED
tty->column--;
108a97: 48 dec %eax <== NOT EXECUTED
108a98: 89 43 28 mov %eax,0x28(%ebx) <== NOT EXECUTED
108a9b: eb 34 jmp 108ad1 <oproc+0x100> <== NOT EXECUTED
break;
default:
if (tty->termios.c_oflag & OLCUC)
108a9d: 80 e2 02 and $0x2,%dl
108aa0: 74 1b je 108abd <oproc+0xec> <== ALWAYS TAKEN
c = toupper(c);
108aa2: 0f b6 c0 movzbl %al,%eax <== NOT EXECUTED
108aa5: 8b 15 88 c2 12 00 mov 0x12c288,%edx <== NOT EXECUTED
108aab: 8a 54 02 01 mov 0x1(%edx,%eax,1),%dl <== NOT EXECUTED
108aaf: 83 e2 03 and $0x3,%edx <== NOT EXECUTED
108ab2: 80 fa 02 cmp $0x2,%dl <== NOT EXECUTED
108ab5: 75 03 jne 108aba <oproc+0xe9> <== NOT EXECUTED
108ab7: 83 e8 20 sub $0x20,%eax <== NOT EXECUTED
108aba: 88 45 f4 mov %al,-0xc(%ebp) <== NOT EXECUTED
if (!iscntrl(c))
108abd: 0f b6 45 f4 movzbl -0xc(%ebp),%eax
108ac1: 8b 15 88 c2 12 00 mov 0x12c288,%edx
108ac7: f6 44 02 01 20 testb $0x20,0x1(%edx,%eax,1)
108acc: 75 03 jne 108ad1 <oproc+0x100> <== NEVER TAKEN
tty->column++;
108ace: ff 43 28 incl 0x28(%ebx)
break;
}
}
rtems_termios_puts (&c, 1, tty);
108ad1: 56 push %esi
108ad2: 53 push %ebx
108ad3: 6a 01 push $0x1
108ad5: 8d 45 f4 lea -0xc(%ebp),%eax
108ad8: 50 push %eax
108ad9: e8 e7 fd ff ff call 1088c5 <rtems_termios_puts>
108ade: 83 c4 10 add $0x10,%esp
}
108ae1: 8d 65 f8 lea -0x8(%ebp),%esp
108ae4: 5b pop %ebx
108ae5: 5e pop %esi
108ae6: 5d pop %ebp
108ae7: c3 ret
00107694 <partition_free>:
* RETURNS:
* N/A
*/
static void
partition_free(rtems_part_desc_t *part_desc)
{
107694: 55 push %ebp
107695: 89 e5 mov %esp,%ebp
107697: 56 push %esi
107698: 53 push %ebx
107699: 89 c3 mov %eax,%ebx
int part_num;
if (part_desc == NULL)
10769b: 85 c0 test %eax,%eax
10769d: 74 2b je 1076ca <partition_free+0x36>
* true if partition type is extended, false otherwise
*/
static bool
is_extended(uint8_t type)
{
return ((type == EXTENDED_PARTITION) || (type == LINUX_EXTENDED));
10769f: 8a 40 01 mov 0x1(%eax),%al
1076a2: 83 e0 7f and $0x7f,%eax
int part_num;
if (part_desc == NULL)
return;
if (is_extended(part_desc->sys_type))
1076a5: 3c 05 cmp $0x5,%al
1076a7: 74 0e je 1076b7 <partition_free+0x23> <== NEVER TAKEN
{
partition_free(part_desc->sub_part[part_num]);
}
}
free(part_desc);
1076a9: 83 ec 0c sub $0xc,%esp
1076ac: 53 push %ebx
1076ad: e8 76 0d 00 00 call 108428 <free>
1076b2: 83 c4 10 add $0x10,%esp
1076b5: eb 13 jmp 1076ca <partition_free+0x36>
int part_num;
if (part_desc == NULL)
return;
if (is_extended(part_desc->sys_type))
1076b7: 31 f6 xor %esi,%esi
{
for (part_num = 0;
part_num < RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER;
part_num++)
{
partition_free(part_desc->sub_part[part_num]);
1076b9: 8b 44 b3 18 mov 0x18(%ebx,%esi,4),%eax <== NOT EXECUTED
1076bd: e8 d2 ff ff ff call 107694 <partition_free> <== NOT EXECUTED
if (is_extended(part_desc->sys_type))
{
for (part_num = 0;
part_num < RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER;
part_num++)
1076c2: 46 inc %esi <== NOT EXECUTED
if (part_desc == NULL)
return;
if (is_extended(part_desc->sys_type))
{
for (part_num = 0;
1076c3: 83 fe 04 cmp $0x4,%esi <== NOT EXECUTED
1076c6: 75 f1 jne 1076b9 <partition_free+0x25> <== NOT EXECUTED
1076c8: eb df jmp 1076a9 <partition_free+0x15> <== NOT EXECUTED
partition_free(part_desc->sub_part[part_num]);
}
}
free(part_desc);
}
1076ca: 8d 65 f8 lea -0x8(%ebp),%esp
1076cd: 5b pop %ebx
1076ce: 5e pop %esi
1076cf: 5d pop %ebp
1076d0: c3 ret
0010793e <partition_table_get>:
* RTEMS_SUCCESSFUL if success,
* RTEMS_INTERNAL_ERROR otherwise
*/
static rtems_status_code
partition_table_get(const char *dev_name, rtems_disk_desc_t *disk_desc)
{
10793e: 55 push %ebp
10793f: 89 e5 mov %esp,%ebp
107941: 57 push %edi
107942: 56 push %esi
107943: 53 push %ebx
107944: 83 ec 74 sub $0x74,%esp
107947: 89 c6 mov %eax,%esi
107949: 89 d3 mov %edx,%ebx
struct stat dev_stat;
rtems_status_code rc;
int fd;
fd = open(dev_name, O_RDONLY);
10794b: 6a 00 push $0x0
10794d: 50 push %eax
10794e: e8 65 18 00 00 call 1091b8 <open>
107953: 89 45 94 mov %eax,-0x6c(%ebp)
if (fd < 0)
107956: 83 c4 10 add $0x10,%esp
107959: 85 c0 test %eax,%eax
10795b: 0f 88 95 01 00 00 js 107af6 <partition_table_get+0x1b8><== NEVER TAKEN
{
return RTEMS_INTERNAL_ERROR;
}
rc = fstat(fd, &dev_stat);
107961: 57 push %edi
107962: 57 push %edi
107963: 8d 45 a0 lea -0x60(%ebp),%eax
107966: 50 push %eax
107967: ff 75 94 pushl -0x6c(%ebp)
10796a: e8 31 0b 00 00 call 1084a0 <fstat>
if (rc != RTEMS_SUCCESSFUL)
10796f: 83 c4 10 add $0x10,%esp
107972: 85 c0 test %eax,%eax
107974: 74 13 je 107989 <partition_table_get+0x4b><== ALWAYS TAKEN
{
close(fd);
107976: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
107979: ff 75 94 pushl -0x6c(%ebp) <== NOT EXECUTED
10797c: e8 77 08 00 00 call 1081f8 <close> <== NOT EXECUTED
107981: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
107984: e9 6d 01 00 00 jmp 107af6 <partition_table_get+0x1b8><== NOT EXECUTED
return RTEMS_INTERNAL_ERROR;
}
strncpy (disk_desc->dev_name, dev_name, 15);
107989: 51 push %ecx
10798a: 6a 0f push $0xf
10798c: 56 push %esi
10798d: 8d 43 08 lea 0x8(%ebx),%eax
107990: 50 push %eax
107991: e8 f6 ed 00 00 call 11678c <strncpy>
disk_desc->dev = dev_stat.st_rdev;
107996: 8b 45 b8 mov -0x48(%ebp),%eax
107999: 8b 55 bc mov -0x44(%ebp),%edx
10799c: 89 03 mov %eax,(%ebx)
10799e: 89 53 04 mov %edx,0x4(%ebx)
disk_desc->sector_size = (dev_stat.st_blksize) ? dev_stat.st_blksize :
1079a1: 8b 55 e0 mov -0x20(%ebp),%edx
1079a4: 83 c4 10 add $0x10,%esp
1079a7: b8 00 02 00 00 mov $0x200,%eax
1079ac: 85 d2 test %edx,%edx
1079ae: 74 02 je 1079b2 <partition_table_get+0x74><== ALWAYS TAKEN
1079b0: 89 d0 mov %edx,%eax <== NOT EXECUTED
1079b2: 89 43 18 mov %eax,0x18(%ebx)
*/
static rtems_status_code
read_mbr(int fd, rtems_disk_desc_t *disk_desc)
{
int part_num;
rtems_sector_data_t *sector = NULL;
1079b5: c7 45 98 00 00 00 00 movl $0x0,-0x68(%ebp)
{
return RTEMS_INTERNAL_ERROR;
}
off = sector_num * RTEMS_IDE_SECTOR_SIZE;
new_off = lseek(fd, off, SEEK_SET);
1079bc: 6a 00 push $0x0
1079be: 6a 00 push $0x0
1079c0: 6a 00 push $0x0
1079c2: ff 75 94 pushl -0x6c(%ebp)
1079c5: e8 d2 0d 00 00 call 10879c <lseek>
if (new_off != off) {
1079ca: 83 c4 10 add $0x10,%esp
return RTEMS_IO_ERROR;
1079cd: be 1b 00 00 00 mov $0x1b,%esi
return RTEMS_INTERNAL_ERROR;
}
off = sector_num * RTEMS_IDE_SECTOR_SIZE;
new_off = lseek(fd, off, SEEK_SET);
if (new_off != off) {
1079d2: 09 c2 or %eax,%edx
1079d4: 75 13 jne 1079e9 <partition_table_get+0xab><== NEVER TAKEN
1079d6: 8d 4d 98 lea -0x68(%ebp),%ecx
1079d9: 31 d2 xor %edx,%edx
1079db: 8b 45 94 mov -0x6c(%ebp),%eax
1079de: e8 19 fd ff ff call 1076fc <get_sector.part.0>
1079e3: 89 c6 mov %eax,%esi
uint8_t *data;
rtems_status_code rc;
/* get MBR sector */
rc = get_sector(fd, 0, §or);
if (rc != RTEMS_SUCCESSFUL)
1079e5: 85 c0 test %eax,%eax
1079e7: 74 11 je 1079fa <partition_table_get+0xbc><== ALWAYS TAKEN
{
if (sector)
1079e9: 8b 45 98 mov -0x68(%ebp),%eax <== NOT EXECUTED
1079ec: 85 c0 test %eax,%eax <== NOT EXECUTED
1079ee: 0f 84 f2 00 00 00 je 107ae6 <partition_table_get+0x1a8><== NOT EXECUTED
free(sector);
1079f4: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1079f7: 50 push %eax <== NOT EXECUTED
1079f8: eb 5b jmp 107a55 <partition_table_get+0x117><== NOT EXECUTED
return rc;
}
/* check if the partition table structure is MS-DOS style */
if (!msdos_signature_check(sector))
1079fa: 8b 4d 98 mov -0x68(%ebp),%ecx
static bool
msdos_signature_check (rtems_sector_data_t *sector)
{
uint8_t *p = sector->data + RTEMS_IDE_PARTITION_MSDOS_SIGNATURE_OFFSET;
return ((p[0] == RTEMS_IDE_PARTITION_MSDOS_SIGNATURE_DATA1) &&
1079fd: 31 c0 xor %eax,%eax
1079ff: 80 b9 02 02 00 00 55 cmpb $0x55,0x202(%ecx)
107a06: 75 0c jne 107a14 <partition_table_get+0xd6><== NEVER TAKEN
107a08: 31 c0 xor %eax,%eax
107a0a: 80 b9 03 02 00 00 aa cmpb $0xaa,0x203(%ecx)
107a11: 0f 94 c0 sete %al
free(sector);
return rc;
}
/* check if the partition table structure is MS-DOS style */
if (!msdos_signature_check(sector))
107a14: 85 c0 test %eax,%eax
107a16: 75 16 jne 107a2e <partition_table_get+0xf0><== ALWAYS TAKEN
{
free(sector);
107a18: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
107a1b: 51 push %ecx <== NOT EXECUTED
107a1c: e8 07 0a 00 00 call 108428 <free> <== NOT EXECUTED
107a21: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
return RTEMS_INTERNAL_ERROR;
107a24: be 19 00 00 00 mov $0x19,%esi <== NOT EXECUTED
107a29: e9 b8 00 00 00 jmp 107ae6 <partition_table_get+0x1a8><== NOT EXECUTED
}
/* read and process 4 primary partition descriptors */
data = sector->data + RTEMS_IDE_PARTITION_TABLE_OFFSET;
107a2e: 81 c1 c2 01 00 00 add $0x1c2,%ecx
107a34: bf 01 00 00 00 mov $0x1,%edi
107a39: 8d 55 9c lea -0x64(%ebp),%edx
107a3c: 89 c8 mov %ecx,%eax
107a3e: 89 4d 90 mov %ecx,-0x70(%ebp)
107a41: e8 20 fd ff ff call 107766 <data_to_part_desc.part.1>
107a46: 89 c6 mov %eax,%esi
for (part_num = 0;
part_num < RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER;
part_num++)
{
rc = data_to_part_desc(data, &part_desc);
if (rc != RTEMS_SUCCESSFUL)
107a48: 85 c0 test %eax,%eax
107a4a: 8b 4d 90 mov -0x70(%ebp),%ecx
107a4d: 74 13 je 107a62 <partition_table_get+0x124><== ALWAYS TAKEN
{
free(sector);
107a4f: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
107a52: ff 75 98 pushl -0x68(%ebp) <== NOT EXECUTED
107a55: e8 ce 09 00 00 call 108428 <free> <== NOT EXECUTED
107a5a: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
107a5d: e9 84 00 00 00 jmp 107ae6 <partition_table_get+0x1a8><== NOT EXECUTED
return rc;
}
if (part_desc != NULL)
107a62: 8b 45 9c mov -0x64(%ebp),%eax
107a65: 85 c0 test %eax,%eax
107a67: 74 18 je 107a81 <partition_table_get+0x143><== NEVER TAKEN
{
part_desc->log_id = part_num + 1;
107a69: 89 fa mov %edi,%edx
107a6b: 88 50 02 mov %dl,0x2(%eax)
part_desc->disk_desc = disk_desc;
107a6e: 89 58 10 mov %ebx,0x10(%eax)
part_desc->end = part_desc->start + part_desc->size - 1;
107a71: 8b 50 04 mov 0x4(%eax),%edx
107a74: 03 50 08 add 0x8(%eax),%edx
107a77: 4a dec %edx
107a78: 89 50 0c mov %edx,0xc(%eax)
disk_desc->partitions[part_num] = part_desc;
107a7b: 89 44 bb 24 mov %eax,0x24(%ebx,%edi,4)
107a7f: eb 08 jmp 107a89 <partition_table_get+0x14b>
}
else
{
disk_desc->partitions[part_num] = NULL;
107a81: c7 44 bb 24 00 00 00 movl $0x0,0x24(%ebx,%edi,4) <== NOT EXECUTED
107a88: 00
}
data += RTEMS_IDE_PARTITION_DESCRIPTOR_SIZE;
107a89: 83 c1 10 add $0x10,%ecx
107a8c: 47 inc %edi
/* read and process 4 primary partition descriptors */
data = sector->data + RTEMS_IDE_PARTITION_TABLE_OFFSET;
for (part_num = 0;
107a8d: 83 ff 05 cmp $0x5,%edi
107a90: 75 a7 jne 107a39 <partition_table_get+0xfb>
}
data += RTEMS_IDE_PARTITION_DESCRIPTOR_SIZE;
}
free(sector);
107a92: 83 ec 0c sub $0xc,%esp
107a95: ff 75 98 pushl -0x68(%ebp)
107a98: e8 8b 09 00 00 call 108428 <free>
disk_desc->last_log_id = RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER;
107a9d: c7 43 24 04 00 00 00 movl $0x4,0x24(%ebx)
107aa4: 83 c4 10 add $0x10,%esp
/* There cannot be more than one extended partition,
but we are to process each primary partition */
for (part_num = 0;
107aa7: 66 31 ff xor %di,%di
part_num < RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER;
part_num++)
{
part_desc = disk_desc->partitions[part_num];
107aaa: 8b 4c bb 28 mov 0x28(%ebx,%edi,4),%ecx
107aae: 89 4d 9c mov %ecx,-0x64(%ebp)
if (part_desc != NULL && is_extended(part_desc->sys_type))
107ab1: 85 c9 test %ecx,%ecx
107ab3: 74 2b je 107ae0 <partition_table_get+0x1a2><== NEVER TAKEN
* true if partition type is extended, false otherwise
*/
static bool
is_extended(uint8_t type)
{
return ((type == EXTENDED_PARTITION) || (type == LINUX_EXTENDED));
107ab5: 8a 41 01 mov 0x1(%ecx),%al
107ab8: 83 e0 7f and $0x7f,%eax
for (part_num = 0;
part_num < RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER;
part_num++)
{
part_desc = disk_desc->partitions[part_num];
if (part_desc != NULL && is_extended(part_desc->sys_type))
107abb: 3c 05 cmp $0x5,%al
107abd: 75 21 jne 107ae0 <partition_table_get+0x1a2>
{
read_extended_partition(fd, part_desc->start, part_desc);
107abf: 8b 51 04 mov 0x4(%ecx),%edx
107ac2: 8b 45 94 mov -0x6c(%ebp),%eax
107ac5: e8 1c fd ff ff call 1077e6 <read_extended_partition>
free(part_desc);
107aca: 83 ec 0c sub $0xc,%esp
107acd: ff 75 9c pushl -0x64(%ebp)
107ad0: e8 53 09 00 00 call 108428 <free>
disk_desc->partitions[part_num] = NULL;
107ad5: c7 44 bb 28 00 00 00 movl $0x0,0x28(%ebx,%edi,4)
107adc: 00
107add: 83 c4 10 add $0x10,%esp
/* There cannot be more than one extended partition,
but we are to process each primary partition */
for (part_num = 0;
part_num < RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER;
part_num++)
107ae0: 47 inc %edi
disk_desc->last_log_id = RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER;
/* There cannot be more than one extended partition,
but we are to process each primary partition */
for (part_num = 0;
107ae1: 83 ff 04 cmp $0x4,%edi
107ae4: 75 c4 jne 107aaa <partition_table_get+0x16c>
disk_desc->sector_size = (dev_stat.st_blksize) ? dev_stat.st_blksize :
RTEMS_IDE_SECTOR_SIZE;
rc = read_mbr(fd, disk_desc);
close(fd);
107ae6: 83 ec 0c sub $0xc,%esp
107ae9: ff 75 94 pushl -0x6c(%ebp)
107aec: e8 07 07 00 00 call 1081f8 <close>
107af1: 83 c4 10 add $0x10,%esp
107af4: eb 05 jmp 107afb <partition_table_get+0x1bd>
int fd;
fd = open(dev_name, O_RDONLY);
if (fd < 0)
{
return RTEMS_INTERNAL_ERROR;
107af6: be 19 00 00 00 mov $0x19,%esi <== NOT EXECUTED
rc = read_mbr(fd, disk_desc);
close(fd);
return rc;
}
107afb: 89 f0 mov %esi,%eax
107afd: 8d 65 f4 lea -0xc(%ebp),%esp
107b00: 5b pop %ebx
107b01: 5e pop %esi
107b02: 5f pop %edi
107b03: 5d pop %ebp
107b04: c3 ret
00105140 <pathconf>:
long pathconf(
const char *path,
int name
)
{
105140: 55 push %ebp
105141: 89 e5 mov %esp,%ebp
105143: 56 push %esi
105144: 53 push %ebx
int status;
int fd;
fd = open( path, O_RDONLY );
105145: 52 push %edx
105146: 52 push %edx
105147: 6a 00 push $0x0
105149: ff 75 08 pushl 0x8(%ebp)
10514c: e8 1f fe ff ff call 104f70 <open>
105151: 89 c3 mov %eax,%ebx
if ( fd == -1 )
105153: 83 c4 10 add $0x10,%esp
105156: 83 f8 ff cmp $0xffffffff,%eax
105159: 74 1a je 105175 <pathconf+0x35> <== ALWAYS TAKEN
return -1;
status = fpathconf( fd, name );
10515b: 50 push %eax <== NOT EXECUTED
10515c: 50 push %eax <== NOT EXECUTED
10515d: ff 75 0c pushl 0xc(%ebp) <== NOT EXECUTED
105160: 53 push %ebx <== NOT EXECUTED
105161: e8 26 43 00 00 call 10948c <fpathconf> <== NOT EXECUTED
105166: 89 c6 mov %eax,%esi <== NOT EXECUTED
(void) close( fd );
105168: 89 1c 24 mov %ebx,(%esp) <== NOT EXECUTED
10516b: e8 b8 42 00 00 call 109428 <close> <== NOT EXECUTED
return status;
105170: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
105173: eb 03 jmp 105178 <pathconf+0x38> <== NOT EXECUTED
int status;
int fd;
fd = open( path, O_RDONLY );
if ( fd == -1 )
return -1;
105175: 83 ce ff or $0xffffffff,%esi
status = fpathconf( fd, name );
(void) close( fd );
return status;
}
105178: 89 f0 mov %esi,%eax
10517a: 8d 65 f8 lea -0x8(%ebp),%esp
10517d: 5b pop %ebx
10517e: 5e pop %esi
10517f: 5d pop %ebp
105180: c3 ret
0010e5ac <pipe_create>:
* Called by pipe() to create an anonymous pipe.
*/
int pipe_create(
int filsdes[2]
)
{
10e5ac: 55 push %ebp
10e5ad: 89 e5 mov %esp,%ebp
10e5af: 57 push %edi
10e5b0: 56 push %esi
10e5b1: 53 push %ebx
10e5b2: 83 ec 24 sub $0x24,%esp
rtems_libio_t *iop;
int err = 0;
if (rtems_mkdir("/tmp", S_IRWXU | S_IRWXG | S_IRWXO) != 0)
10e5b5: 68 ff 01 00 00 push $0x1ff
10e5ba: 68 e0 0f 12 00 push $0x120fe0
10e5bf: e8 64 13 00 00 call 10f928 <rtems_mkdir>
10e5c4: 83 c4 10 add $0x10,%esp
10e5c7: 85 c0 test %eax,%eax
10e5c9: 0f 85 dc 00 00 00 jne 10e6ab <pipe_create+0xff>
return -1;
/* /tmp/.fifoXXXX */
char fifopath[15];
memcpy(fifopath, "/tmp/.fifo", 10);
10e5cf: 8d 5d d9 lea -0x27(%ebp),%ebx
10e5d2: be e5 0f 12 00 mov $0x120fe5,%esi
10e5d7: b9 0a 00 00 00 mov $0xa,%ecx
10e5dc: 89 df mov %ebx,%edi
10e5de: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
sprintf(fifopath + 10, "%04x", rtems_pipe_no ++);
10e5e0: 0f b7 05 d4 f0 12 00 movzwl 0x12f0d4,%eax
10e5e7: 8d 50 01 lea 0x1(%eax),%edx
10e5ea: 66 89 15 d4 f0 12 00 mov %dx,0x12f0d4
10e5f1: 51 push %ecx
10e5f2: 50 push %eax
10e5f3: 68 f0 0f 12 00 push $0x120ff0
10e5f8: 8d 45 e3 lea -0x1d(%ebp),%eax
10e5fb: 50 push %eax
10e5fc: e8 4b 49 00 00 call 112f4c <sprintf>
/* Try creating FIFO file until find an available file name */
while (mkfifo(fifopath, S_IRUSR|S_IWUSR) != 0) {
10e601: 5e pop %esi
10e602: 5f pop %edi
10e603: 68 80 01 00 00 push $0x180
10e608: 53 push %ebx
10e609: e8 da 10 00 00 call 10f6e8 <mkfifo>
10e60e: 83 c4 10 add $0x10,%esp
10e611: 85 c0 test %eax,%eax
10e613: 74 0a je 10e61f <pipe_create+0x73> <== ALWAYS TAKEN
if (errno != EEXIST){
10e615: e8 22 3e 00 00 call 11243c <__errno> <== NOT EXECUTED
10e61a: e9 8c 00 00 00 jmp 10e6ab <pipe_create+0xff> <== NOT EXECUTED
return -1;
/* sprintf(fifopath + 10, "%04x", rtems_pipe_no ++); */
}
/* Non-blocking open to avoid waiting for writers */
filsdes[0] = open(fifopath, O_RDONLY | O_NONBLOCK);
10e61f: 52 push %edx
10e620: 52 push %edx
10e621: 68 00 40 00 00 push $0x4000
10e626: 53 push %ebx
10e627: e8 f4 94 ff ff call 107b20 <open>
10e62c: 8b 55 08 mov 0x8(%ebp),%edx
10e62f: 89 02 mov %eax,(%edx)
if (filsdes[0] < 0) {
10e631: 83 c4 10 add $0x10,%esp
10e634: 85 c0 test %eax,%eax
10e636: 79 0d jns 10e645 <pipe_create+0x99>
err = errno;
10e638: e8 ff 3d 00 00 call 11243c <__errno>
10e63d: 8b 30 mov (%eax),%esi
/* Delete file at errors, or else if pipe is successfully created
the file node will be deleted after it is closed by all. */
unlink(fifopath);
10e63f: 83 ec 0c sub $0xc,%esp
10e642: 53 push %ebx
10e643: eb 51 jmp 10e696 <pipe_create+0xea>
}
else {
/* Reset open file to blocking mode */
iop = rtems_libio_iop(filsdes[0]);
10e645: 31 d2 xor %edx,%edx
10e647: 3b 05 70 b2 12 00 cmp 0x12b270,%eax
10e64d: 73 09 jae 10e658 <pipe_create+0xac> <== NEVER TAKEN
10e64f: 6b d0 30 imul $0x30,%eax,%edx
10e652: 03 15 d8 f2 12 00 add 0x12f2d8,%edx
iop->flags &= ~LIBIO_FLAGS_NO_DELAY;
10e658: 83 62 0c fe andl $0xfffffffe,0xc(%edx)
filsdes[1] = open(fifopath, O_WRONLY);
10e65c: 50 push %eax
10e65d: 50 push %eax
10e65e: 6a 01 push $0x1
10e660: 8d 45 d9 lea -0x27(%ebp),%eax
10e663: 50 push %eax
10e664: e8 b7 94 ff ff call 107b20 <open>
10e669: 8b 55 08 mov 0x8(%ebp),%edx
10e66c: 89 42 04 mov %eax,0x4(%edx)
if (filsdes[1] < 0) {
10e66f: 83 c4 10 add $0x10,%esp
int pipe_create(
int filsdes[2]
)
{
rtems_libio_t *iop;
int err = 0;
10e672: 31 f6 xor %esi,%esi
iop = rtems_libio_iop(filsdes[0]);
iop->flags &= ~LIBIO_FLAGS_NO_DELAY;
filsdes[1] = open(fifopath, O_WRONLY);
if (filsdes[1] < 0) {
10e674: 85 c0 test %eax,%eax
10e676: 79 17 jns 10e68f <pipe_create+0xe3>
err = errno;
10e678: e8 bf 3d 00 00 call 11243c <__errno>
10e67d: 8b 30 mov (%eax),%esi
close(filsdes[0]);
10e67f: 83 ec 0c sub $0xc,%esp
10e682: 8b 55 08 mov 0x8(%ebp),%edx
10e685: ff 32 pushl (%edx)
10e687: e8 04 86 ff ff call 106c90 <close>
10e68c: 83 c4 10 add $0x10,%esp
}
unlink(fifopath);
10e68f: 83 ec 0c sub $0xc,%esp
10e692: 8d 45 d9 lea -0x27(%ebp),%eax
10e695: 50 push %eax
10e696: e8 39 ba ff ff call 10a0d4 <unlink>
10e69b: 83 c4 10 add $0x10,%esp
}
if(err != 0)
rtems_set_errno_and_return_minus_one(err);
return 0;
10e69e: 31 c0 xor %eax,%eax
err = errno;
close(filsdes[0]);
}
unlink(fifopath);
}
if(err != 0)
10e6a0: 85 f6 test %esi,%esi
10e6a2: 74 0a je 10e6ae <pipe_create+0x102>
rtems_set_errno_and_return_minus_one(err);
10e6a4: e8 93 3d 00 00 call 11243c <__errno>
10e6a9: 89 30 mov %esi,(%eax)
{
rtems_libio_t *iop;
int err = 0;
if (rtems_mkdir("/tmp", S_IRWXU | S_IRWXG | S_IRWXO) != 0)
return -1;
10e6ab: 83 c8 ff or $0xffffffff,%eax
unlink(fifopath);
}
if(err != 0)
rtems_set_errno_and_return_minus_one(err);
return 0;
}
10e6ae: 8d 65 f4 lea -0xc(%ebp),%esp
10e6b1: 5b pop %ebx
10e6b2: 5e pop %esi
10e6b3: 5f pop %edi
10e6b4: 5d pop %ebp
10e6b5: c3 ret
0010f877 <pipe_ioctl>:
pipe_control_t *pipe,
ioctl_command_t cmd,
void *buffer,
rtems_libio_t *iop
)
{
10f877: 55 push %ebp
10f878: 89 e5 mov %esp,%ebp
10f87a: 56 push %esi
10f87b: 53 push %ebx
10f87c: 8b 5d 08 mov 0x8(%ebp),%ebx
10f87f: 8b 75 10 mov 0x10(%ebp),%esi
if (cmd == FIONREAD) {
10f882: 81 7d 0c 7f 66 04 40 cmpl $0x4004667f,0xc(%ebp)
10f889: 75 2f jne 10f8ba <pipe_ioctl+0x43>
if (buffer == NULL)
10f88b: 85 f6 test %esi,%esi
10f88d: 74 32 je 10f8c1 <pipe_ioctl+0x4a>
return -EFAULT;
if (! PIPE_LOCK(pipe))
10f88f: 50 push %eax
10f890: 6a 00 push $0x0
10f892: 6a 00 push $0x0
10f894: ff 73 28 pushl 0x28(%ebx)
10f897: e8 d0 b8 ff ff call 10b16c <rtems_semaphore_obtain>
10f89c: 83 c4 10 add $0x10,%esp
10f89f: 85 c0 test %eax,%eax
10f8a1: 75 25 jne 10f8c8 <pipe_ioctl+0x51> <== NEVER TAKEN
return -EINTR;
/* Return length of pipe */
*(unsigned int *)buffer = pipe->Length;
10f8a3: 8b 43 0c mov 0xc(%ebx),%eax
10f8a6: 89 06 mov %eax,(%esi)
PIPE_UNLOCK(pipe);
10f8a8: 83 ec 0c sub $0xc,%esp
10f8ab: ff 73 28 pushl 0x28(%ebx)
10f8ae: e8 a9 b9 ff ff call 10b25c <rtems_semaphore_release>
return 0;
10f8b3: 83 c4 10 add $0x10,%esp
10f8b6: 31 c0 xor %eax,%eax
10f8b8: eb 13 jmp 10f8cd <pipe_ioctl+0x56>
}
return -EINVAL;
10f8ba: b8 ea ff ff ff mov $0xffffffea,%eax
10f8bf: eb 0c jmp 10f8cd <pipe_ioctl+0x56>
rtems_libio_t *iop
)
{
if (cmd == FIONREAD) {
if (buffer == NULL)
return -EFAULT;
10f8c1: b8 f2 ff ff ff mov $0xfffffff2,%eax
10f8c6: eb 05 jmp 10f8cd <pipe_ioctl+0x56>
if (! PIPE_LOCK(pipe))
return -EINTR;
10f8c8: b8 fc ff ff ff mov $0xfffffffc,%eax <== NOT EXECUTED
PIPE_UNLOCK(pipe);
return 0;
}
return -EINVAL;
}
10f8cd: 8d 65 f8 lea -0x8(%ebp),%esp
10f8d0: 5b pop %ebx
10f8d1: 5e pop %esi
10f8d2: 5d pop %ebp
10f8d3: c3 ret
0010f55f <pipe_read>:
pipe_control_t *pipe,
void *buffer,
size_t count,
rtems_libio_t *iop
)
{
10f55f: 55 push %ebp
10f560: 89 e5 mov %esp,%ebp
10f562: 57 push %edi
10f563: 56 push %esi
10f564: 53 push %ebx
10f565: 83 ec 30 sub $0x30,%esp
10f568: 8b 5d 08 mov 0x8(%ebp),%ebx
int chunk, chunk1, read = 0, ret = 0;
if (! PIPE_LOCK(pipe))
10f56b: 6a 00 push $0x0
10f56d: 6a 00 push $0x0
10f56f: ff 73 28 pushl 0x28(%ebx)
10f572: e8 f5 bb ff ff call 10b16c <rtems_semaphore_obtain>
10f577: 83 c4 10 add $0x10,%esp
10f57a: 85 c0 test %eax,%eax
10f57c: 0f 85 34 01 00 00 jne 10f6b6 <pipe_read+0x157> <== NEVER TAKEN
10f582: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)
10f589: e9 f5 00 00 00 jmp 10f683 <pipe_read+0x124>
return -EINTR;
while (read < count) {
while (PIPE_EMPTY(pipe)) {
/* Not an error */
if (pipe->Writers == 0)
10f58e: 83 7b 14 00 cmpl $0x0,0x14(%ebx)
10f592: 75 07 jne 10f59b <pipe_read+0x3c>
rtems_libio_t *iop
)
{
int chunk, chunk1, read = 0, ret = 0;
if (! PIPE_LOCK(pipe))
10f594: 31 f6 xor %esi,%esi
10f596: e9 fe 00 00 00 jmp 10f699 <pipe_read+0x13a>
while (PIPE_EMPTY(pipe)) {
/* Not an error */
if (pipe->Writers == 0)
goto out_locked;
if (LIBIO_NODELAY(iop)) {
10f59b: 8b 45 14 mov 0x14(%ebp),%eax
10f59e: f6 40 0c 01 testb $0x1,0xc(%eax)
10f5a2: 0f 85 ec 00 00 00 jne 10f694 <pipe_read+0x135>
ret = -EAGAIN;
goto out_locked;
}
/* Wait until pipe is no more empty or no writer exists */
pipe->waitingReaders ++;
10f5a8: ff 43 18 incl 0x18(%ebx)
PIPE_UNLOCK(pipe);
10f5ab: 83 ec 0c sub $0xc,%esp
10f5ae: ff 73 28 pushl 0x28(%ebx)
10f5b1: e8 a6 bc ff ff call 10b25c <rtems_semaphore_release>
if (! PIPE_READWAIT(pipe))
10f5b6: 58 pop %eax
10f5b7: 5a pop %edx
10f5b8: 6a 00 push $0x0
10f5ba: ff 73 2c pushl 0x2c(%ebx)
10f5bd: e8 da 14 00 00 call 110a9c <rtems_barrier_wait>
10f5c2: 83 c4 0c add $0xc,%esp
10f5c5: 83 f8 01 cmp $0x1,%eax
10f5c8: 19 f6 sbb %esi,%esi
10f5ca: f7 d6 not %esi
10f5cc: 83 e6 fc and $0xfffffffc,%esi
ret = -EINTR;
if (! PIPE_LOCK(pipe)) {
10f5cf: 6a 00 push $0x0
10f5d1: 6a 00 push $0x0
10f5d3: ff 73 28 pushl 0x28(%ebx)
10f5d6: e8 91 bb ff ff call 10b16c <rtems_semaphore_obtain>
10f5db: 83 c4 10 add $0x10,%esp
10f5de: 85 c0 test %eax,%eax
10f5e0: 0f 85 c3 00 00 00 jne 10f6a9 <pipe_read+0x14a> <== NEVER TAKEN
/* WARN waitingReaders not restored! */
ret = -EINTR;
goto out_nolock;
}
pipe->waitingReaders --;
10f5e6: ff 4b 18 decl 0x18(%ebx)
if (ret != 0)
10f5e9: 85 f6 test %esi,%esi
10f5eb: 0f 85 a8 00 00 00 jne 10f699 <pipe_read+0x13a> <== NEVER TAKEN
if (! PIPE_LOCK(pipe))
return -EINTR;
while (read < count) {
while (PIPE_EMPTY(pipe)) {
10f5f1: 8b 53 0c mov 0xc(%ebx),%edx
10f5f4: 85 d2 test %edx,%edx
10f5f6: 74 96 je 10f58e <pipe_read+0x2f>
if (ret != 0)
goto out_locked;
}
/* Read chunk bytes */
chunk = MIN(count - read, pipe->Length);
10f5f8: 8b 45 10 mov 0x10(%ebp),%eax
10f5fb: 2b 45 d4 sub -0x2c(%ebp),%eax
10f5fe: 89 55 d0 mov %edx,-0x30(%ebp)
10f601: 39 c2 cmp %eax,%edx
10f603: 76 03 jbe 10f608 <pipe_read+0xa9>
10f605: 89 45 d0 mov %eax,-0x30(%ebp)
chunk1 = pipe->Size - pipe->Start;
10f608: 8b 4b 08 mov 0x8(%ebx),%ecx
10f60b: 8b 53 04 mov 0x4(%ebx),%edx
10f60e: 29 ca sub %ecx,%edx
if (chunk > chunk1) {
10f610: 39 55 d0 cmp %edx,-0x30(%ebp)
10f613: 8b 7d 0c mov 0xc(%ebp),%edi
10f616: 8b 75 d4 mov -0x2c(%ebp),%esi
10f619: 8d 04 37 lea (%edi,%esi,1),%eax
10f61c: 8b 33 mov (%ebx),%esi
10f61e: 7e 1b jle 10f63b <pipe_read+0xdc>
memcpy(buffer + read, pipe->Buffer + pipe->Start, chunk1);
10f620: 01 ce add %ecx,%esi
10f622: 89 c7 mov %eax,%edi
10f624: 89 d1 mov %edx,%ecx
10f626: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
memcpy(buffer + read + chunk1, pipe->Buffer, chunk - chunk1);
10f628: 8b 45 d4 mov -0x2c(%ebp),%eax
10f62b: 01 d0 add %edx,%eax
10f62d: 03 45 0c add 0xc(%ebp),%eax
10f630: 8b 4d d0 mov -0x30(%ebp),%ecx
10f633: 29 d1 sub %edx,%ecx
10f635: 8b 33 mov (%ebx),%esi
10f637: 89 c7 mov %eax,%edi
10f639: eb 07 jmp 10f642 <pipe_read+0xe3>
}
else
memcpy(buffer + read, pipe->Buffer + pipe->Start, chunk);
10f63b: 01 ce add %ecx,%esi
10f63d: 89 c7 mov %eax,%edi
10f63f: 8b 4d d0 mov -0x30(%ebp),%ecx
10f642: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
pipe->Start += chunk;
10f644: 8b 45 d0 mov -0x30(%ebp),%eax
10f647: 03 43 08 add 0x8(%ebx),%eax
pipe->Start %= pipe->Size;
10f64a: 31 d2 xor %edx,%edx
10f64c: f7 73 04 divl 0x4(%ebx)
10f64f: 89 53 08 mov %edx,0x8(%ebx)
pipe->Length -= chunk;
10f652: 8b 43 0c mov 0xc(%ebx),%eax
10f655: 2b 45 d0 sub -0x30(%ebp),%eax
10f658: 89 43 0c mov %eax,0xc(%ebx)
/* For buffering optimization */
if (PIPE_EMPTY(pipe))
10f65b: 85 c0 test %eax,%eax
10f65d: 75 07 jne 10f666 <pipe_read+0x107>
pipe->Start = 0;
10f65f: c7 43 08 00 00 00 00 movl $0x0,0x8(%ebx)
if (pipe->waitingWriters > 0)
10f666: 83 7b 1c 00 cmpl $0x0,0x1c(%ebx)
10f66a: 74 11 je 10f67d <pipe_read+0x11e>
PIPE_WAKEUPWRITERS(pipe);
10f66c: 50 push %eax
10f66d: 50 push %eax
10f66e: 8d 45 e4 lea -0x1c(%ebp),%eax
10f671: 50 push %eax
10f672: ff 73 30 pushl 0x30(%ebx)
10f675: e8 ca 13 00 00 call 110a44 <rtems_barrier_release>
10f67a: 83 c4 10 add $0x10,%esp
read += chunk;
10f67d: 8b 75 d0 mov -0x30(%ebp),%esi
10f680: 01 75 d4 add %esi,-0x2c(%ebp)
int chunk, chunk1, read = 0, ret = 0;
if (! PIPE_LOCK(pipe))
return -EINTR;
while (read < count) {
10f683: 8b 7d 10 mov 0x10(%ebp),%edi
10f686: 39 7d d4 cmp %edi,-0x2c(%ebp)
10f689: 0f 82 62 ff ff ff jb 10f5f1 <pipe_read+0x92>
10f68f: e9 00 ff ff ff jmp 10f594 <pipe_read+0x35>
/* Not an error */
if (pipe->Writers == 0)
goto out_locked;
if (LIBIO_NODELAY(iop)) {
ret = -EAGAIN;
10f694: be f5 ff ff ff mov $0xfffffff5,%esi
PIPE_WAKEUPWRITERS(pipe);
read += chunk;
}
out_locked:
PIPE_UNLOCK(pipe);
10f699: 83 ec 0c sub $0xc,%esp
10f69c: ff 73 28 pushl 0x28(%ebx)
10f69f: e8 b8 bb ff ff call 10b25c <rtems_semaphore_release>
10f6a4: 83 c4 10 add $0x10,%esp
10f6a7: eb 05 jmp 10f6ae <pipe_read+0x14f>
PIPE_UNLOCK(pipe);
if (! PIPE_READWAIT(pipe))
ret = -EINTR;
if (! PIPE_LOCK(pipe)) {
/* WARN waitingReaders not restored! */
ret = -EINTR;
10f6a9: be fc ff ff ff mov $0xfffffffc,%esi <== NOT EXECUTED
out_locked:
PIPE_UNLOCK(pipe);
out_nolock:
if (read > 0)
10f6ae: 83 7d d4 00 cmpl $0x0,-0x2c(%ebp)
10f6b2: 7f 0e jg 10f6c2 <pipe_read+0x163>
10f6b4: eb 09 jmp 10f6bf <pipe_read+0x160>
)
{
int chunk, chunk1, read = 0, ret = 0;
if (! PIPE_LOCK(pipe))
return -EINTR;
10f6b6: c7 45 d4 fc ff ff ff movl $0xfffffffc,-0x2c(%ebp) <== NOT EXECUTED
10f6bd: eb 03 jmp 10f6c2 <pipe_read+0x163> <== NOT EXECUTED
PIPE_UNLOCK(pipe);
out_nolock:
if (read > 0)
return read;
return ret;
10f6bf: 89 75 d4 mov %esi,-0x2c(%ebp)
}
10f6c2: 8b 45 d4 mov -0x2c(%ebp),%eax
10f6c5: 8d 65 f4 lea -0xc(%ebp),%esp
10f6c8: 5b pop %ebx
10f6c9: 5e pop %esi
10f6ca: 5f pop %edi
10f6cb: 5d pop %ebp
10f6cc: c3 ret
0010f0e3 <pipe_release>:
*/
void pipe_release(
pipe_control_t **pipep,
rtems_libio_t *iop
)
{
10f0e3: 55 push %ebp
10f0e4: 89 e5 mov %esp,%ebp
10f0e6: 57 push %edi
10f0e7: 56 push %esi
10f0e8: 53 push %ebx
10f0e9: 83 ec 1c sub $0x1c,%esp
10f0ec: 8b 7d 08 mov 0x8(%ebp),%edi
pipe_control_t *pipe = *pipep;
10f0ef: 8b 1f mov (%edi),%ebx
/* WARN pipe not released! */
if (!PIPE_LOCK(pipe))
rtems_fatal_error_occurred(0xdeadbeef);
#endif
mode = LIBIO_ACCMODE(iop);
10f0f1: 8b 45 0c mov 0xc(%ebp),%eax
10f0f4: 8b 40 0c mov 0xc(%eax),%eax
10f0f7: 89 c6 mov %eax,%esi
10f0f9: 83 e6 06 and $0x6,%esi
if (mode & LIBIO_FLAGS_READ)
10f0fc: a8 02 test $0x2,%al
10f0fe: 74 03 je 10f103 <pipe_release+0x20>
pipe->Readers --;
10f100: ff 4b 10 decl 0x10(%ebx)
if (mode & LIBIO_FLAGS_WRITE)
10f103: a8 04 test $0x4,%al
10f105: 74 03 je 10f10a <pipe_release+0x27>
pipe->Writers --;
10f107: ff 4b 14 decl 0x14(%ebx)
PIPE_UNLOCK(pipe);
10f10a: 83 ec 0c sub $0xc,%esp
10f10d: ff 73 28 pushl 0x28(%ebx)
10f110: e8 47 c1 ff ff call 10b25c <rtems_semaphore_release>
if (pipe->Readers == 0 && pipe->Writers == 0) {
10f115: 83 c4 10 add $0x10,%esp
10f118: 83 7b 10 00 cmpl $0x0,0x10(%ebx)
10f11c: 75 25 jne 10f143 <pipe_release+0x60>
10f11e: 83 7b 14 00 cmpl $0x0,0x14(%ebx)
10f122: 75 0f jne 10f133 <pipe_release+0x50>
#if 0
/* To delete an anonymous pipe file when all users closed it */
if (pipe->Anonymous)
delfile = TRUE;
#endif
pipe_free(pipe);
10f124: 89 d8 mov %ebx,%eax
10f126: e8 7d ff ff ff call 10f0a8 <pipe_free>
*pipep = NULL;
10f12b: c7 07 00 00 00 00 movl $0x0,(%edi)
10f131: eb 2c jmp 10f15f <pipe_release+0x7c>
}
else if (pipe->Readers == 0 && mode != LIBIO_FLAGS_WRITE)
10f133: 83 fe 04 cmp $0x4,%esi
10f136: 74 0b je 10f143 <pipe_release+0x60> <== NEVER TAKEN
/* Notify waiting Writers that all their partners left */
PIPE_WAKEUPWRITERS(pipe);
10f138: 57 push %edi
10f139: 57 push %edi
10f13a: 8d 45 e4 lea -0x1c(%ebp),%eax
10f13d: 50 push %eax
10f13e: ff 73 30 pushl 0x30(%ebx)
10f141: eb 14 jmp 10f157 <pipe_release+0x74>
else if (pipe->Writers == 0 && mode != LIBIO_FLAGS_READ)
10f143: 83 7b 14 00 cmpl $0x0,0x14(%ebx)
10f147: 75 16 jne 10f15f <pipe_release+0x7c> <== NEVER TAKEN
10f149: 83 fe 02 cmp $0x2,%esi
10f14c: 74 11 je 10f15f <pipe_release+0x7c> <== NEVER TAKEN
PIPE_WAKEUPREADERS(pipe);
10f14e: 56 push %esi
10f14f: 56 push %esi
10f150: 8d 45 e4 lea -0x1c(%ebp),%eax
10f153: 50 push %eax
10f154: ff 73 2c pushl 0x2c(%ebx)
10f157: e8 e8 18 00 00 call 110a44 <rtems_barrier_release>
10f15c: 83 c4 10 add $0x10,%esp
#ifdef RTEMS_DEBUG
rtems_status_code sc = RTEMS_SUCCESSFUL;
sc =
#endif
rtems_semaphore_release(pipe_semaphore);
10f15f: 83 ec 0c sub $0xc,%esp
10f162: ff 35 d4 00 13 00 pushl 0x1300d4
10f168: e8 ef c0 ff ff call 10b25c <rtems_semaphore_release>
10f16d: 83 c4 10 add $0x10,%esp
iop->flags &= ~LIBIO_FLAGS_OPEN;
if(iop->pathinfo.ops->unlink_h(&iop->pathinfo))
return;
#endif
}
10f170: 8d 65 f4 lea -0xc(%ebp),%esp
10f173: 5b pop %ebx
10f174: 5e pop %esi
10f175: 5f pop %edi
10f176: 5d pop %ebp
10f177: c3 ret
0010f6cd <pipe_write>:
pipe_control_t *pipe,
const void *buffer,
size_t count,
rtems_libio_t *iop
)
{
10f6cd: 55 push %ebp
10f6ce: 89 e5 mov %esp,%ebp
10f6d0: 57 push %edi
10f6d1: 56 push %esi
10f6d2: 53 push %ebx
10f6d3: 83 ec 2c sub $0x2c,%esp
10f6d6: 8b 5d 08 mov 0x8(%ebp),%ebx
int chunk, chunk1, written = 0, ret = 0;
/* Write nothing */
if (count == 0)
return 0;
10f6d9: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)
)
{
int chunk, chunk1, written = 0, ret = 0;
/* Write nothing */
if (count == 0)
10f6e0: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
10f6e4: 0f 84 82 01 00 00 je 10f86c <pipe_write+0x19f> <== NEVER TAKEN
return 0;
if (! PIPE_LOCK(pipe))
10f6ea: 50 push %eax
10f6eb: 6a 00 push $0x0
10f6ed: 6a 00 push $0x0
10f6ef: ff 73 28 pushl 0x28(%ebx)
10f6f2: e8 75 ba ff ff call 10b16c <rtems_semaphore_obtain>
10f6f7: 83 c4 10 add $0x10,%esp
10f6fa: 85 c0 test %eax,%eax
10f6fc: 0f 85 5e 01 00 00 jne 10f860 <pipe_write+0x193> <== NEVER TAKEN
return -EINTR;
if (pipe->Readers == 0) {
10f702: 83 7b 10 00 cmpl $0x0,0x10(%ebx)
10f706: 0f 84 1b 01 00 00 je 10f827 <pipe_write+0x15a>
ret = -EPIPE;
goto out_locked;
}
/* Write of PIPE_BUF bytes or less shall not be interleaved */
chunk = count <= pipe->Size ? count : 1;
10f70c: be 01 00 00 00 mov $0x1,%esi
10f711: 8b 45 10 mov 0x10(%ebp),%eax
10f714: 3b 43 04 cmp 0x4(%ebx),%eax
10f717: 77 02 ja 10f71b <pipe_write+0x4e> <== NEVER TAKEN
10f719: 89 c6 mov %eax,%esi
/* Wait until there is chunk bytes space or no reader exists */
pipe->waitingWriters ++;
PIPE_UNLOCK(pipe);
if (! PIPE_WRITEWAIT(pipe))
ret = -EINTR;
10f71b: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)
10f722: e9 e9 00 00 00 jmp 10f810 <pipe_write+0x143>
/* Write of PIPE_BUF bytes or less shall not be interleaved */
chunk = count <= pipe->Size ? count : 1;
while (written < count) {
while (PIPE_SPACE(pipe) < chunk) {
if (LIBIO_NODELAY(iop)) {
10f727: 8b 4d 14 mov 0x14(%ebp),%ecx
10f72a: f6 41 0c 01 testb $0x1,0xc(%ecx)
10f72e: 0f 85 ec 00 00 00 jne 10f820 <pipe_write+0x153>
ret = -EAGAIN;
goto out_locked;
}
/* Wait until there is chunk bytes space or no reader exists */
pipe->waitingWriters ++;
10f734: ff 43 1c incl 0x1c(%ebx)
PIPE_UNLOCK(pipe);
10f737: 83 ec 0c sub $0xc,%esp
10f73a: ff 73 28 pushl 0x28(%ebx)
10f73d: e8 1a bb ff ff call 10b25c <rtems_semaphore_release>
if (! PIPE_WRITEWAIT(pipe))
10f742: 5f pop %edi
10f743: 58 pop %eax
10f744: 6a 00 push $0x0
10f746: ff 73 30 pushl 0x30(%ebx)
10f749: e8 4e 13 00 00 call 110a9c <rtems_barrier_wait>
10f74e: 83 c4 0c add $0xc,%esp
10f751: 83 f8 01 cmp $0x1,%eax
10f754: 19 ff sbb %edi,%edi
10f756: f7 d7 not %edi
10f758: 83 e7 fc and $0xfffffffc,%edi
ret = -EINTR;
if (! PIPE_LOCK(pipe)) {
10f75b: 6a 00 push $0x0
10f75d: 6a 00 push $0x0
10f75f: ff 73 28 pushl 0x28(%ebx)
10f762: e8 05 ba ff ff call 10b16c <rtems_semaphore_obtain>
10f767: 83 c4 10 add $0x10,%esp
10f76a: 85 c0 test %eax,%eax
10f76c: 0f 85 e1 00 00 00 jne 10f853 <pipe_write+0x186> <== NEVER TAKEN
/* WARN waitingWriters not restored! */
ret = -EINTR;
goto out_nolock;
}
pipe->waitingWriters --;
10f772: ff 4b 1c decl 0x1c(%ebx)
if (ret != 0)
10f775: 85 ff test %edi,%edi
10f777: 0f 85 af 00 00 00 jne 10f82c <pipe_write+0x15f> <== NEVER TAKEN
goto out_locked;
if (pipe->Readers == 0) {
10f77d: 83 7b 10 00 cmpl $0x0,0x10(%ebx)
10f781: 0f 84 a0 00 00 00 je 10f827 <pipe_write+0x15a> <== NEVER TAKEN
/* Write of PIPE_BUF bytes or less shall not be interleaved */
chunk = count <= pipe->Size ? count : 1;
while (written < count) {
while (PIPE_SPACE(pipe) < chunk) {
10f787: 8b 7b 04 mov 0x4(%ebx),%edi
10f78a: 8b 43 0c mov 0xc(%ebx),%eax
10f78d: 89 f9 mov %edi,%ecx
10f78f: 29 c1 sub %eax,%ecx
10f791: 39 f1 cmp %esi,%ecx
10f793: 72 92 jb 10f727 <pipe_write+0x5a>
ret = -EPIPE;
goto out_locked;
}
}
chunk = MIN(count - written, PIPE_SPACE(pipe));
10f795: 8b 55 10 mov 0x10(%ebp),%edx
10f798: 2b 55 d4 sub -0x2c(%ebp),%edx
10f79b: 89 4d d0 mov %ecx,-0x30(%ebp)
10f79e: 39 d1 cmp %edx,%ecx
10f7a0: 76 03 jbe 10f7a5 <pipe_write+0xd8>
10f7a2: 89 55 d0 mov %edx,-0x30(%ebp)
chunk1 = pipe->Size - PIPE_WSTART(pipe);
10f7a5: 03 43 08 add 0x8(%ebx),%eax
10f7a8: 31 d2 xor %edx,%edx
10f7aa: f7 f7 div %edi
10f7ac: 29 d7 sub %edx,%edi
10f7ae: 89 7d cc mov %edi,-0x34(%ebp)
if (chunk > chunk1) {
10f7b1: 39 7d d0 cmp %edi,-0x30(%ebp)
10f7b4: 8b 03 mov (%ebx),%eax
10f7b6: 8b 4d 0c mov 0xc(%ebp),%ecx
10f7b9: 8b 7d d4 mov -0x2c(%ebp),%edi
10f7bc: 8d 34 39 lea (%ecx,%edi,1),%esi
10f7bf: 7e 1e jle 10f7df <pipe_write+0x112>
memcpy(pipe->Buffer + PIPE_WSTART(pipe), buffer + written, chunk1);
10f7c1: 01 d0 add %edx,%eax
10f7c3: 89 c7 mov %eax,%edi
10f7c5: 8b 4d cc mov -0x34(%ebp),%ecx
10f7c8: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
memcpy(pipe->Buffer, buffer + written + chunk1, chunk - chunk1);
10f7ca: 8b 4d d0 mov -0x30(%ebp),%ecx
10f7cd: 2b 4d cc sub -0x34(%ebp),%ecx
10f7d0: 8b 45 cc mov -0x34(%ebp),%eax
10f7d3: 03 45 d4 add -0x2c(%ebp),%eax
10f7d6: 8b 75 0c mov 0xc(%ebp),%esi
10f7d9: 01 c6 add %eax,%esi
10f7db: 8b 3b mov (%ebx),%edi
10f7dd: eb 07 jmp 10f7e6 <pipe_write+0x119>
}
else
memcpy(pipe->Buffer + PIPE_WSTART(pipe), buffer + written, chunk);
10f7df: 01 d0 add %edx,%eax
10f7e1: 89 c7 mov %eax,%edi
10f7e3: 8b 4d d0 mov -0x30(%ebp),%ecx
10f7e6: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
pipe->Length += chunk;
10f7e8: 8b 4d d0 mov -0x30(%ebp),%ecx
10f7eb: 01 4b 0c add %ecx,0xc(%ebx)
if (pipe->waitingReaders > 0)
10f7ee: 83 7b 18 00 cmpl $0x0,0x18(%ebx)
10f7f2: 74 11 je 10f805 <pipe_write+0x138>
PIPE_WAKEUPREADERS(pipe);
10f7f4: 56 push %esi
10f7f5: 56 push %esi
10f7f6: 8d 7d e4 lea -0x1c(%ebp),%edi
10f7f9: 57 push %edi
10f7fa: ff 73 2c pushl 0x2c(%ebx)
10f7fd: e8 42 12 00 00 call 110a44 <rtems_barrier_release>
10f802: 83 c4 10 add $0x10,%esp
written += chunk;
10f805: 8b 4d d0 mov -0x30(%ebp),%ecx
10f808: 01 4d d4 add %ecx,-0x2c(%ebp)
/* Write of more than PIPE_BUF bytes can be interleaved */
chunk = 1;
10f80b: be 01 00 00 00 mov $0x1,%esi
}
/* Write of PIPE_BUF bytes or less shall not be interleaved */
chunk = count <= pipe->Size ? count : 1;
while (written < count) {
10f810: 8b 7d 10 mov 0x10(%ebp),%edi
10f813: 39 7d d4 cmp %edi,-0x2c(%ebp)
10f816: 0f 82 6b ff ff ff jb 10f787 <pipe_write+0xba>
10f81c: 31 ff xor %edi,%edi
10f81e: eb 0c jmp 10f82c <pipe_write+0x15f>
while (PIPE_SPACE(pipe) < chunk) {
if (LIBIO_NODELAY(iop)) {
ret = -EAGAIN;
10f820: bf f5 ff ff ff mov $0xfffffff5,%edi
10f825: eb 05 jmp 10f82c <pipe_write+0x15f>
pipe->waitingWriters --;
if (ret != 0)
goto out_locked;
if (pipe->Readers == 0) {
ret = -EPIPE;
10f827: bf e0 ff ff ff mov $0xffffffe0,%edi
/* Write of more than PIPE_BUF bytes can be interleaved */
chunk = 1;
}
out_locked:
PIPE_UNLOCK(pipe);
10f82c: 83 ec 0c sub $0xc,%esp
10f82f: ff 73 28 pushl 0x28(%ebx)
10f832: e8 25 ba ff ff call 10b25c <rtems_semaphore_release>
out_nolock:
#ifdef RTEMS_POSIX_API
/* Signal SIGPIPE */
if (ret == -EPIPE)
10f837: 83 c4 10 add $0x10,%esp
10f83a: 83 ff e0 cmp $0xffffffe0,%edi
10f83d: 75 19 jne 10f858 <pipe_write+0x18b>
kill(getpid(), SIGPIPE);
10f83f: e8 e0 04 00 00 call 10fd24 <getpid>
10f844: 51 push %ecx
10f845: 51 push %ecx
10f846: 6a 0d push $0xd
10f848: 50 push %eax
10f849: e8 62 0a 00 00 call 1102b0 <kill>
10f84e: 83 c4 10 add $0x10,%esp
10f851: eb 05 jmp 10f858 <pipe_write+0x18b>
PIPE_UNLOCK(pipe);
if (! PIPE_WRITEWAIT(pipe))
ret = -EINTR;
if (! PIPE_LOCK(pipe)) {
/* WARN waitingWriters not restored! */
ret = -EINTR;
10f853: bf fc ff ff ff mov $0xfffffffc,%edi <== NOT EXECUTED
/* Signal SIGPIPE */
if (ret == -EPIPE)
kill(getpid(), SIGPIPE);
#endif
if (written > 0)
10f858: 83 7d d4 00 cmpl $0x0,-0x2c(%ebp)
10f85c: 7f 0e jg 10f86c <pipe_write+0x19f>
10f85e: eb 09 jmp 10f869 <pipe_write+0x19c>
/* Write nothing */
if (count == 0)
return 0;
if (! PIPE_LOCK(pipe))
return -EINTR;
10f860: c7 45 d4 fc ff ff ff movl $0xfffffffc,-0x2c(%ebp) <== NOT EXECUTED
10f867: eb 03 jmp 10f86c <pipe_write+0x19f> <== NOT EXECUTED
/* Signal SIGPIPE */
if (ret == -EPIPE)
kill(getpid(), SIGPIPE);
#endif
if (written > 0)
10f869: 89 7d d4 mov %edi,-0x2c(%ebp)
return written;
return ret;
}
10f86c: 8b 45 d4 mov -0x2c(%ebp),%eax
10f86f: 8d 65 f4 lea -0xc(%ebp),%esp
10f872: 5b pop %ebx
10f873: 5e pop %esi
10f874: 5f pop %edi
10f875: 5d pop %ebp
10f876: c3 ret
0010997c <posix_memalign>:
int posix_memalign(
void **pointer,
size_t alignment,
size_t size
)
{
10997c: 55 push %ebp
10997d: 89 e5 mov %esp,%ebp
10997f: 53 push %ebx
109980: 8b 45 0c mov 0xc(%ebp),%eax
/*
* Update call statistics
*/
MSBUMP(memalign_calls, 1);
109983: ff 05 c0 3b 13 00 incl 0x133bc0
if (((alignment - 1) & alignment) != 0 || (alignment < sizeof(void *)))
109989: 8d 58 ff lea -0x1(%eax),%ebx
10998c: 85 c3 test %eax,%ebx
10998e: 75 0c jne 10999c <posix_memalign+0x20> <== NEVER TAKEN
109990: 83 f8 03 cmp $0x3,%eax
109993: 76 07 jbe 10999c <posix_memalign+0x20>
/*
* rtems_memalign does all of the error checking work EXCEPT
* for adding restrictionso on the alignment.
*/
return rtems_memalign( pointer, alignment, size );
}
109995: 5b pop %ebx
109996: 5d pop %ebp
/*
* rtems_memalign does all of the error checking work EXCEPT
* for adding restrictionso on the alignment.
*/
return rtems_memalign( pointer, alignment, size );
109997: e9 70 01 00 00 jmp 109b0c <rtems_memalign>
}
10999c: b8 16 00 00 00 mov $0x16,%eax
1099a1: 5b pop %ebx
1099a2: 5d pop %ebp
1099a3: c3 ret
0010e4d4 <pthread_attr_setschedpolicy>:
int pthread_attr_setschedpolicy(
pthread_attr_t *attr,
int policy
)
{
10e4d4: 55 push %ebp
10e4d5: 89 e5 mov %esp,%ebp
10e4d7: 8b 55 08 mov 0x8(%ebp),%edx
10e4da: 8b 4d 0c mov 0xc(%ebp),%ecx
if ( !attr || !attr->is_initialized )
return EINVAL;
10e4dd: b8 16 00 00 00 mov $0x16,%eax
int pthread_attr_setschedpolicy(
pthread_attr_t *attr,
int policy
)
{
if ( !attr || !attr->is_initialized )
10e4e2: 85 d2 test %edx,%edx
10e4e4: 74 1e je 10e504 <pthread_attr_setschedpolicy+0x30>
10e4e6: 83 3a 00 cmpl $0x0,(%edx)
10e4e9: 74 19 je 10e504 <pthread_attr_setschedpolicy+0x30>
return EINVAL;
switch ( policy ) {
10e4eb: 83 f9 04 cmp $0x4,%ecx
10e4ee: 77 0f ja 10e4ff <pthread_attr_setschedpolicy+0x2b>
10e4f0: b0 01 mov $0x1,%al
10e4f2: d3 e0 shl %cl,%eax
10e4f4: a8 17 test $0x17,%al
10e4f6: 74 07 je 10e4ff <pthread_attr_setschedpolicy+0x2b><== NEVER TAKEN
case SCHED_OTHER:
case SCHED_FIFO:
case SCHED_RR:
case SCHED_SPORADIC:
attr->schedpolicy = policy;
10e4f8: 89 4a 14 mov %ecx,0x14(%edx)
return 0;
10e4fb: 31 c0 xor %eax,%eax
10e4fd: eb 05 jmp 10e504 <pthread_attr_setschedpolicy+0x30>
default:
return ENOTSUP;
10e4ff: b8 86 00 00 00 mov $0x86,%eax
}
}
10e504: 5d pop %ebp
10e505: c3 ret
00109fd8 <pthread_barrier_init>:
int pthread_barrier_init(
pthread_barrier_t *barrier,
const pthread_barrierattr_t *attr,
unsigned int count
)
{
109fd8: 55 push %ebp
109fd9: 89 e5 mov %esp,%ebp
109fdb: 57 push %edi
109fdc: 56 push %esi
109fdd: 53 push %ebx
109fde: 83 ec 1c sub $0x1c,%esp
109fe1: 8b 75 08 mov 0x8(%ebp),%esi
109fe4: 8b 5d 10 mov 0x10(%ebp),%ebx
const pthread_barrierattr_t *the_attr;
/*
* Error check parameters
*/
if ( !barrier )
109fe7: 85 f6 test %esi,%esi
109fe9: 75 05 jne 109ff0 <pthread_barrier_init+0x18>
109feb: e9 9a 00 00 00 jmp 10a08a <pthread_barrier_init+0xb2>
return EINVAL;
if ( count == 0 )
109ff0: 85 db test %ebx,%ebx
109ff2: 0f 84 92 00 00 00 je 10a08a <pthread_barrier_init+0xb2><== NEVER TAKEN
return EINVAL;
/*
* If the user passed in NULL, use the default attributes
*/
if ( attr ) {
109ff8: 8b 45 0c mov 0xc(%ebp),%eax
109ffb: 85 c0 test %eax,%eax
109ffd: 75 11 jne 10a010 <pthread_barrier_init+0x38>
the_attr = attr;
} else {
(void) pthread_barrierattr_init( &my_attr );
109fff: 83 ec 0c sub $0xc,%esp
10a002: 8d 7d e0 lea -0x20(%ebp),%edi
10a005: 57 push %edi
10a006: e8 19 ff ff ff call 109f24 <pthread_barrierattr_init>
10a00b: 83 c4 10 add $0x10,%esp
the_attr = &my_attr;
10a00e: 89 f8 mov %edi,%eax
}
/*
* Now start error checking the attributes that we are going to use
*/
if ( !the_attr->is_initialized )
10a010: 83 38 00 cmpl $0x0,(%eax)
10a013: 74 75 je 10a08a <pthread_barrier_init+0xb2>
return EINVAL;
switch ( the_attr->process_shared ) {
10a015: 83 78 04 00 cmpl $0x0,0x4(%eax)
10a019: 75 6f jne 10a08a <pthread_barrier_init+0xb2><== NEVER TAKEN
}
/*
* Convert from POSIX attributes to Core Barrier attributes
*/
the_attributes.discipline = CORE_BARRIER_AUTOMATIC_RELEASE;
10a01b: c7 45 d8 00 00 00 00 movl $0x0,-0x28(%ebp)
the_attributes.maximum_count = count;
10a022: 89 5d dc mov %ebx,-0x24(%ebp)
*
* This rountine increments the thread dispatch level
*/
RTEMS_INLINE_ROUTINE uint32_t _Thread_Dispatch_increment_disable_level(void)
{
_Thread_Dispatch_disable_level++;
10a025: a1 dc f3 12 00 mov 0x12f3dc,%eax
10a02a: 40 inc %eax
10a02b: a3 dc f3 12 00 mov %eax,0x12f3dc
return _Thread_Dispatch_disable_level;
10a030: a1 dc f3 12 00 mov 0x12f3dc,%eax
* This function allocates a barrier control block from
* the inactive chain of free barrier control blocks.
*/
RTEMS_INLINE_ROUTINE POSIX_Barrier_Control *_POSIX_Barrier_Allocate( void )
{
return (POSIX_Barrier_Control *)
10a035: 83 ec 0c sub $0xc,%esp
10a038: 68 60 f7 12 00 push $0x12f760
10a03d: e8 ae 1c 00 00 call 10bcf0 <_Objects_Allocate>
10a042: 89 c3 mov %eax,%ebx
*/
_Thread_Disable_dispatch(); /* prevents deletion */
the_barrier = _POSIX_Barrier_Allocate();
if ( !the_barrier ) {
10a044: 83 c4 10 add $0x10,%esp
10a047: 85 c0 test %eax,%eax
10a049: 75 0c jne 10a057 <pthread_barrier_init+0x7f>
_Thread_Enable_dispatch();
10a04b: e8 e0 2b 00 00 call 10cc30 <_Thread_Enable_dispatch>
return EAGAIN;
10a050: b8 0b 00 00 00 mov $0xb,%eax
10a055: eb 38 jmp 10a08f <pthread_barrier_init+0xb7>
}
_CORE_barrier_Initialize( &the_barrier->Barrier, &the_attributes );
10a057: 50 push %eax
10a058: 50 push %eax
10a059: 8d 45 d8 lea -0x28(%ebp),%eax
10a05c: 50 push %eax
10a05d: 8d 43 10 lea 0x10(%ebx),%eax
10a060: 50 push %eax
10a061: e8 56 14 00 00 call 10b4bc <_CORE_barrier_Initialize>
uint32_t name
)
{
_Objects_Set_local_object(
information,
_Objects_Get_index( the_object->id ),
10a066: 8b 43 08 mov 0x8(%ebx),%eax
Objects_Information *information,
Objects_Control *the_object,
uint32_t name
)
{
_Objects_Set_local_object(
10a069: 0f b7 c8 movzwl %ax,%ecx
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
10a06c: 8b 15 7c f7 12 00 mov 0x12f77c,%edx
10a072: 89 1c 8a mov %ebx,(%edx,%ecx,4)
_Objects_Get_index( the_object->id ),
the_object
);
/* ASSERT: information->is_string == false */
the_object->name.name_u32 = name;
10a075: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx)
);
/*
* Exit the critical section and return the user an operational barrier
*/
*barrier = the_barrier->Object.id;
10a07c: 89 06 mov %eax,(%esi)
_Thread_Enable_dispatch();
10a07e: e8 ad 2b 00 00 call 10cc30 <_Thread_Enable_dispatch>
10a083: 83 c4 10 add $0x10,%esp
return 0;
10a086: 31 c0 xor %eax,%eax
10a088: eb 05 jmp 10a08f <pthread_barrier_init+0xb7>
switch ( the_attr->process_shared ) {
case PTHREAD_PROCESS_PRIVATE: /* only supported values */
break;
case PTHREAD_PROCESS_SHARED:
default:
return EINVAL;
10a08a: b8 16 00 00 00 mov $0x16,%eax
* Exit the critical section and return the user an operational barrier
*/
*barrier = the_barrier->Object.id;
_Thread_Enable_dispatch();
return 0;
}
10a08f: 8d 65 f4 lea -0xc(%ebp),%esp
10a092: 5b pop %ebx
10a093: 5e pop %esi
10a094: 5f pop %edi
10a095: 5d pop %ebp
10a096: c3 ret
001099a4 <pthread_cleanup_push>:
void pthread_cleanup_push(
void (*routine)( void * ),
void *arg
)
{
1099a4: 55 push %ebp
1099a5: 89 e5 mov %esp,%ebp
1099a7: 56 push %esi
1099a8: 53 push %ebx
1099a9: 8b 5d 08 mov 0x8(%ebp),%ebx
1099ac: 8b 75 0c mov 0xc(%ebp),%esi
/*
* The POSIX standard does not address what to do when the routine
* is NULL. It also does not address what happens when we cannot
* allocate memory or anything else bad happens.
*/
if ( !routine )
1099af: 85 db test %ebx,%ebx
1099b1: 74 50 je 109a03 <pthread_cleanup_push+0x5f>
*
* This rountine increments the thread dispatch level
*/
RTEMS_INLINE_ROUTINE uint32_t _Thread_Dispatch_increment_disable_level(void)
{
_Thread_Dispatch_disable_level++;
1099b3: a1 d4 f3 12 00 mov 0x12f3d4,%eax
1099b8: 40 inc %eax
1099b9: a3 d4 f3 12 00 mov %eax,0x12f3d4
return _Thread_Dispatch_disable_level;
1099be: a1 d4 f3 12 00 mov 0x12f3d4,%eax
return;
_Thread_Disable_dispatch();
handler = _Workspace_Allocate( sizeof( POSIX_Cancel_Handler_control ) );
1099c3: 83 ec 0c sub $0xc,%esp
1099c6: 6a 10 push $0x10
1099c8: e8 6b 3a 00 00 call 10d438 <_Workspace_Allocate>
if ( handler ) {
1099cd: 83 c4 10 add $0x10,%esp
1099d0: 85 c0 test %eax,%eax
1099d2: 74 24 je 1099f8 <pthread_cleanup_push+0x54><== NEVER TAKEN
thread_support = _Thread_Executing->API_Extensions[ THREAD_API_POSIX ];
1099d4: 8b 15 dc f8 12 00 mov 0x12f8dc,%edx
handler_stack = &thread_support->Cancellation_Handlers;
1099da: 8b 92 e8 00 00 00 mov 0xe8(%edx),%edx
1099e0: 81 c2 e4 00 00 00 add $0xe4,%edx
handler->routine = routine;
1099e6: 89 58 08 mov %ebx,0x8(%eax)
handler->arg = arg;
1099e9: 89 70 0c mov %esi,0xc(%eax)
_Chain_Append( handler_stack, &handler->Node );
1099ec: 51 push %ecx
1099ed: 51 push %ecx
1099ee: 50 push %eax
1099ef: 52 push %edx
1099f0: e8 57 15 00 00 call 10af4c <_Chain_Append>
1099f5: 83 c4 10 add $0x10,%esp
}
_Thread_Enable_dispatch();
}
1099f8: 8d 65 f8 lea -0x8(%ebp),%esp
1099fb: 5b pop %ebx
1099fc: 5e pop %esi
1099fd: 5d pop %ebp
handler->routine = routine;
handler->arg = arg;
_Chain_Append( handler_stack, &handler->Node );
}
_Thread_Enable_dispatch();
1099fe: e9 89 2c 00 00 jmp 10c68c <_Thread_Enable_dispatch>
}
109a03: 8d 65 f8 lea -0x8(%ebp),%esp
109a06: 5b pop %ebx
109a07: 5e pop %esi
109a08: 5d pop %ebp
109a09: c3 ret
0010a7c4 <pthread_cond_init>:
int pthread_cond_init(
pthread_cond_t *cond,
const pthread_condattr_t *attr
)
{
10a7c4: 55 push %ebp
10a7c5: 89 e5 mov %esp,%ebp
10a7c7: 56 push %esi
10a7c8: 53 push %ebx
POSIX_Condition_variables_Control *the_cond;
const pthread_condattr_t *the_attr;
if ( attr ) the_attr = attr;
10a7c9: 8b 75 0c mov 0xc(%ebp),%esi
10a7cc: 85 f6 test %esi,%esi
10a7ce: 75 05 jne 10a7d5 <pthread_cond_init+0x11>
else the_attr = &_POSIX_Condition_variables_Default_attributes;
10a7d0: be f0 1d 12 00 mov $0x121df0,%esi
/*
* Be careful about attributes when global!!!
*/
if ( the_attr->process_shared == PTHREAD_PROCESS_SHARED )
return EINVAL;
10a7d5: b8 16 00 00 00 mov $0x16,%eax
else the_attr = &_POSIX_Condition_variables_Default_attributes;
/*
* Be careful about attributes when global!!!
*/
if ( the_attr->process_shared == PTHREAD_PROCESS_SHARED )
10a7da: 83 7e 04 01 cmpl $0x1,0x4(%esi)
10a7de: 74 7b je 10a85b <pthread_cond_init+0x97><== NEVER TAKEN
return EINVAL;
if ( !the_attr->is_initialized )
10a7e0: 83 3e 00 cmpl $0x0,(%esi)
10a7e3: 74 76 je 10a85b <pthread_cond_init+0x97>
*
* This rountine increments the thread dispatch level
*/
RTEMS_INLINE_ROUTINE uint32_t _Thread_Dispatch_increment_disable_level(void)
{
_Thread_Dispatch_disable_level++;
10a7e5: a1 e4 03 13 00 mov 0x1303e4,%eax
10a7ea: 40 inc %eax
10a7eb: a3 e4 03 13 00 mov %eax,0x1303e4
return _Thread_Dispatch_disable_level;
10a7f0: a1 e4 03 13 00 mov 0x1303e4,%eax
*/
RTEMS_INLINE_ROUTINE POSIX_Condition_variables_Control
*_POSIX_Condition_variables_Allocate( void )
{
return (POSIX_Condition_variables_Control *)
10a7f5: 83 ec 0c sub $0xc,%esp
10a7f8: 68 00 08 13 00 push $0x130800
10a7fd: e8 6e 22 00 00 call 10ca70 <_Objects_Allocate>
10a802: 89 c3 mov %eax,%ebx
_Thread_Disable_dispatch();
the_cond = _POSIX_Condition_variables_Allocate();
if ( !the_cond ) {
10a804: 83 c4 10 add $0x10,%esp
10a807: 85 c0 test %eax,%eax
10a809: 75 0c jne 10a817 <pthread_cond_init+0x53>
_Thread_Enable_dispatch();
10a80b: e8 a0 31 00 00 call 10d9b0 <_Thread_Enable_dispatch>
return ENOMEM;
10a810: b8 0c 00 00 00 mov $0xc,%eax
10a815: eb 44 jmp 10a85b <pthread_cond_init+0x97>
}
the_cond->process_shared = the_attr->process_shared;
10a817: 8b 46 04 mov 0x4(%esi),%eax
10a81a: 89 43 10 mov %eax,0x10(%ebx)
the_cond->Mutex = POSIX_CONDITION_VARIABLES_NO_MUTEX;
10a81d: c7 43 14 00 00 00 00 movl $0x0,0x14(%ebx)
_Thread_queue_Initialize(
10a824: 6a 74 push $0x74
10a826: 68 00 08 00 10 push $0x10000800
10a82b: 6a 00 push $0x0
10a82d: 8d 43 18 lea 0x18(%ebx),%eax
10a830: 50 push %eax
10a831: e8 26 38 00 00 call 10e05c <_Thread_queue_Initialize>
uint32_t name
)
{
_Objects_Set_local_object(
information,
_Objects_Get_index( the_object->id ),
10a836: 8b 43 08 mov 0x8(%ebx),%eax
Objects_Information *information,
Objects_Control *the_object,
uint32_t name
)
{
_Objects_Set_local_object(
10a839: 0f b7 c8 movzwl %ax,%ecx
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
10a83c: 8b 15 1c 08 13 00 mov 0x13081c,%edx
10a842: 89 1c 8a mov %ebx,(%edx,%ecx,4)
_Objects_Get_index( the_object->id ),
the_object
);
/* ASSERT: information->is_string == false */
the_object->name.name_u32 = name;
10a845: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx)
&_POSIX_Condition_variables_Information,
&the_cond->Object,
0
);
*cond = the_cond->Object.id;
10a84c: 8b 55 08 mov 0x8(%ebp),%edx
10a84f: 89 02 mov %eax,(%edx)
_Thread_Enable_dispatch();
10a851: e8 5a 31 00 00 call 10d9b0 <_Thread_Enable_dispatch>
return 0;
10a856: 83 c4 10 add $0x10,%esp
10a859: 31 c0 xor %eax,%eax
}
10a85b: 8d 65 f8 lea -0x8(%ebp),%esp
10a85e: 5b pop %ebx
10a85f: 5e pop %esi
10a860: 5d pop %ebp
10a861: c3 ret
0010a66c <pthread_condattr_destroy>:
*/
int pthread_condattr_destroy(
pthread_condattr_t *attr
)
{
10a66c: 55 push %ebp
10a66d: 89 e5 mov %esp,%ebp
10a66f: 8b 55 08 mov 0x8(%ebp),%edx
if ( !attr || attr->is_initialized == false )
return EINVAL;
10a672: b8 16 00 00 00 mov $0x16,%eax
int pthread_condattr_destroy(
pthread_condattr_t *attr
)
{
if ( !attr || attr->is_initialized == false )
10a677: 85 d2 test %edx,%edx
10a679: 74 0d je 10a688 <pthread_condattr_destroy+0x1c>
10a67b: 83 3a 00 cmpl $0x0,(%edx)
10a67e: 74 08 je 10a688 <pthread_condattr_destroy+0x1c><== NEVER TAKEN
return EINVAL;
attr->is_initialized = false;
10a680: c7 02 00 00 00 00 movl $0x0,(%edx)
return 0;
10a686: 30 c0 xor %al,%al
}
10a688: 5d pop %ebp
10a689: c3 ret
00109cf0 <pthread_create>:
pthread_t *thread,
const pthread_attr_t *attr,
void *(*start_routine)( void * ),
void *arg
)
{
109cf0: 55 push %ebp
109cf1: 89 e5 mov %esp,%ebp
109cf3: 57 push %edi
109cf4: 56 push %esi
109cf5: 53 push %ebx
109cf6: 83 ec 4c sub $0x4c,%esp
int schedpolicy = SCHED_RR;
struct sched_param schedparam;
Objects_Name name;
int rc;
if ( !start_routine )
109cf9: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
109cfd: 0f 84 f8 01 00 00 je 109efb <pthread_create+0x20b>
return EFAULT;
the_attr = (attr) ? attr : &_POSIX_Threads_Default_attributes;
109d03: 8b 55 0c mov 0xc(%ebp),%edx
109d06: 85 d2 test %edx,%edx
109d08: 75 05 jne 109d0f <pthread_create+0x1f>
109d0a: ba 60 09 12 00 mov $0x120960,%edx
if ( !the_attr->is_initialized )
109d0f: 83 3a 00 cmpl $0x0,(%edx)
109d12: 75 05 jne 109d19 <pthread_create+0x29>
109d14: e9 eb 01 00 00 jmp 109f04 <pthread_create+0x214>
* stack space if it is allowed to allocate it itself.
*
* NOTE: If the user provides the stack we will let it drop below
* twice the minimum.
*/
if ( the_attr->stackaddr && !_Stack_Is_enough(the_attr->stacksize) )
109d19: 83 7a 04 00 cmpl $0x0,0x4(%edx)
109d1d: 74 0e je 109d2d <pthread_create+0x3d>
109d1f: a1 8c b1 12 00 mov 0x12b18c,%eax
109d24: 39 42 08 cmp %eax,0x8(%edx)
109d27: 0f 82 d7 01 00 00 jb 109f04 <pthread_create+0x214>
* If inheritsched is set to PTHREAD_INHERIT_SCHED, then this thread
* inherits scheduling attributes from the creating thread. If it is
* PTHREAD_EXPLICIT_SCHED, then scheduling parameters come from the
* attributes structure.
*/
switch ( the_attr->inheritsched ) {
109d2d: 8b 42 10 mov 0x10(%edx),%eax
109d30: 83 f8 01 cmp $0x1,%eax
109d33: 74 0b je 109d40 <pthread_create+0x50>
109d35: 83 f8 02 cmp $0x2,%eax
109d38: 0f 85 c6 01 00 00 jne 109f04 <pthread_create+0x214>
109d3e: eb 1f jmp 109d5f <pthread_create+0x6f>
case PTHREAD_INHERIT_SCHED:
api = _Thread_Executing->API_Extensions[ THREAD_API_POSIX ];
109d40: a1 dc f8 12 00 mov 0x12f8dc,%eax
109d45: 8b b0 e8 00 00 00 mov 0xe8(%eax),%esi
schedpolicy = api->schedpolicy;
109d4b: 8b 86 84 00 00 00 mov 0x84(%esi),%eax
109d51: 89 45 ac mov %eax,-0x54(%ebp)
schedparam = api->schedparam;
109d54: 8d 7d cc lea -0x34(%ebp),%edi
109d57: 81 c6 88 00 00 00 add $0x88,%esi
109d5d: eb 0c jmp 109d6b <pthread_create+0x7b>
break;
case PTHREAD_EXPLICIT_SCHED:
schedpolicy = the_attr->schedpolicy;
109d5f: 8b 42 14 mov 0x14(%edx),%eax
109d62: 89 45 ac mov %eax,-0x54(%ebp)
schedparam = the_attr->schedparam;
109d65: 8d 7d cc lea -0x34(%ebp),%edi
109d68: 8d 72 18 lea 0x18(%edx),%esi
109d6b: b9 07 00 00 00 mov $0x7,%ecx
109d70: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
/*
* Check the contentionscope since rtems only supports PROCESS wide
* contention (i.e. no system wide contention).
*/
if ( the_attr->contentionscope != PTHREAD_SCOPE_PROCESS )
return ENOTSUP;
109d72: c7 45 b4 86 00 00 00 movl $0x86,-0x4c(%ebp)
/*
* Check the contentionscope since rtems only supports PROCESS wide
* contention (i.e. no system wide contention).
*/
if ( the_attr->contentionscope != PTHREAD_SCOPE_PROCESS )
109d79: 83 7a 0c 00 cmpl $0x0,0xc(%edx)
109d7d: 0f 85 88 01 00 00 jne 109f0b <pthread_create+0x21b>
return ENOTSUP;
/*
* Interpret the scheduling parameters.
*/
if ( !_POSIX_Priority_Is_valid( schedparam.sched_priority ) )
109d83: 83 ec 0c sub $0xc,%esp
109d86: ff 75 cc pushl -0x34(%ebp)
109d89: 89 55 a8 mov %edx,-0x58(%ebp)
109d8c: e8 5b 54 00 00 call 10f1ec <_POSIX_Priority_Is_valid>
109d91: 83 c4 10 add $0x10,%esp
109d94: 84 c0 test %al,%al
109d96: 0f 84 68 01 00 00 je 109f04 <pthread_create+0x214> <== NEVER TAKEN
return EINVAL;
core_priority = _POSIX_Priority_To_core( schedparam.sched_priority );
109d9c: 8b 5d cc mov -0x34(%ebp),%ebx
RTEMS_INLINE_ROUTINE Priority_Control _POSIX_Priority_To_core(
int priority
)
{
return (Priority_Control) (POSIX_SCHEDULER_MAXIMUM_PRIORITY - priority + 1);
109d9f: 0f b6 35 88 b1 12 00 movzbl 0x12b188,%esi
/*
* Set the core scheduling policy information.
*/
rc = _POSIX_Thread_Translate_sched_param(
109da6: 8d 45 c8 lea -0x38(%ebp),%eax
109da9: 50 push %eax
109daa: 8d 45 c4 lea -0x3c(%ebp),%eax
109dad: 50 push %eax
109dae: 8d 45 cc lea -0x34(%ebp),%eax
109db1: 50 push %eax
109db2: ff 75 ac pushl -0x54(%ebp)
109db5: e8 52 54 00 00 call 10f20c <_POSIX_Thread_Translate_sched_param>
109dba: 89 45 b4 mov %eax,-0x4c(%ebp)
schedpolicy,
&schedparam,
&budget_algorithm,
&budget_callout
);
if ( rc )
109dbd: 83 c4 10 add $0x10,%esp
109dc0: 85 c0 test %eax,%eax
109dc2: 0f 85 43 01 00 00 jne 109f0b <pthread_create+0x21b>
#endif
/*
* Lock the allocator mutex for protection
*/
_RTEMS_Lock_allocator();
109dc8: 83 ec 0c sub $0xc,%esp
109dcb: ff 35 60 f4 12 00 pushl 0x12f460
109dd1: e8 66 15 00 00 call 10b33c <_API_Mutex_Lock>
* _POSIX_Threads_Allocate
*/
RTEMS_INLINE_ROUTINE Thread_Control *_POSIX_Threads_Allocate( void )
{
return (Thread_Control *) _Objects_Allocate( &_POSIX_Threads_Information );
109dd6: c7 04 24 d8 f5 12 00 movl $0x12f5d8,(%esp)
109ddd: e8 d6 1d 00 00 call 10bbb8 <_Objects_Allocate>
109de2: 89 45 b0 mov %eax,-0x50(%ebp)
* Allocate the thread control block.
*
* NOTE: Global threads are not currently supported.
*/
the_thread = _POSIX_Threads_Allocate();
if ( !the_thread ) {
109de5: 83 c4 10 add $0x10,%esp
109de8: 85 c0 test %eax,%eax
109dea: 8b 55 a8 mov -0x58(%ebp),%edx
109ded: 75 05 jne 109df4 <pthread_create+0x104>
_RTEMS_Unlock_allocator();
109def: 83 ec 0c sub $0xc,%esp
109df2: eb 56 jmp 109e4a <pthread_create+0x15a>
/*
* Initialize the core thread for this task.
*/
name.name_p = NULL; /* posix threads don't have a name by default */
status = _Thread_Initialize(
109df4: 8b 4a 08 mov 0x8(%edx),%ecx
109df7: 57 push %edi
109df8: 6a 00 push $0x0
109dfa: 6a 00 push $0x0
109dfc: ff 75 c8 pushl -0x38(%ebp)
109dff: ff 75 c4 pushl -0x3c(%ebp)
109e02: 6a 01 push $0x1
109e04: 81 e6 ff 00 00 00 and $0xff,%esi
109e0a: 29 de sub %ebx,%esi
109e0c: 56 push %esi
109e0d: 6a 01 push $0x1
109e0f: a1 8c b1 12 00 mov 0x12b18c,%eax
109e14: d1 e0 shl %eax
109e16: 39 c8 cmp %ecx,%eax
109e18: 73 02 jae 109e1c <pthread_create+0x12c>
109e1a: 89 c8 mov %ecx,%eax
109e1c: 50 push %eax
109e1d: ff 72 04 pushl 0x4(%edx)
109e20: ff 75 b0 pushl -0x50(%ebp)
109e23: 68 d8 f5 12 00 push $0x12f5d8
109e28: 89 55 a8 mov %edx,-0x58(%ebp)
109e2b: e8 68 2d 00 00 call 10cb98 <_Thread_Initialize>
budget_callout,
0, /* isr level */
name /* posix threads don't have a name */
);
if ( !status ) {
109e30: 83 c4 30 add $0x30,%esp
109e33: 84 c0 test %al,%al
109e35: 8b 55 a8 mov -0x58(%ebp),%edx
109e38: 75 2a jne 109e64 <pthread_create+0x174>
RTEMS_INLINE_ROUTINE void _POSIX_Threads_Free (
Thread_Control *the_pthread
)
{
_Objects_Free( &_POSIX_Threads_Information, &the_pthread->Object );
109e3a: 51 push %ecx
109e3b: 51 push %ecx
109e3c: ff 75 b0 pushl -0x50(%ebp)
109e3f: 68 d8 f5 12 00 push $0x12f5d8
109e44: e8 4f 20 00 00 call 10be98 <_Objects_Free>
_POSIX_Threads_Free( the_thread );
_RTEMS_Unlock_allocator();
109e49: 5b pop %ebx
109e4a: ff 35 60 f4 12 00 pushl 0x12f460
109e50: e8 2f 15 00 00 call 10b384 <_API_Mutex_Unlock>
109e55: 83 c4 10 add $0x10,%esp
return EAGAIN;
109e58: c7 45 b4 0b 00 00 00 movl $0xb,-0x4c(%ebp)
109e5f: e9 a7 00 00 00 jmp 109f0b <pthread_create+0x21b>
}
/*
* finish initializing the per API structure
*/
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
109e64: 8b 45 b0 mov -0x50(%ebp),%eax
109e67: 8b 98 e8 00 00 00 mov 0xe8(%eax),%ebx
api->Attributes = *the_attr;
109e6d: b9 10 00 00 00 mov $0x10,%ecx
109e72: 89 df mov %ebx,%edi
109e74: 89 d6 mov %edx,%esi
109e76: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
api->detachstate = the_attr->detachstate;
109e78: 8b 42 3c mov 0x3c(%edx),%eax
109e7b: 89 43 40 mov %eax,0x40(%ebx)
api->schedpolicy = schedpolicy;
109e7e: 8b 45 ac mov -0x54(%ebp),%eax
109e81: 89 83 84 00 00 00 mov %eax,0x84(%ebx)
api->schedparam = schedparam;
109e87: 8d bb 88 00 00 00 lea 0x88(%ebx),%edi
109e8d: 8d 75 cc lea -0x34(%ebp),%esi
109e90: b1 07 mov $0x7,%cl
109e92: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
/*
* POSIX threads are allocated and started in one operation.
*/
status = _Thread_Start(
109e94: 83 ec 0c sub $0xc,%esp
109e97: 6a 00 push $0x0
109e99: ff 75 14 pushl 0x14(%ebp)
109e9c: ff 75 10 pushl 0x10(%ebp)
109e9f: 6a 01 push $0x1
109ea1: ff 75 b0 pushl -0x50(%ebp)
109ea4: e8 d7 34 00 00 call 10d380 <_Thread_Start>
_RTEMS_Unlock_allocator();
return EINVAL;
}
#endif
if ( schedpolicy == SCHED_SPORADIC ) {
109ea9: 83 c4 20 add $0x20,%esp
109eac: 83 7d ac 04 cmpl $0x4,-0x54(%ebp)
109eb0: 75 2b jne 109edd <pthread_create+0x1ed>
_Watchdog_Insert_ticks(
109eb2: 83 ec 0c sub $0xc,%esp
&api->Sporadic_timer,
_Timespec_To_ticks( &api->schedparam.sched_ss_repl_period )
109eb5: 8d 83 90 00 00 00 lea 0x90(%ebx),%eax
return EINVAL;
}
#endif
if ( schedpolicy == SCHED_SPORADIC ) {
_Watchdog_Insert_ticks(
109ebb: 50 push %eax
109ebc: e8 3f 35 00 00 call 10d400 <_Timespec_To_ticks>
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
109ec1: 89 83 b4 00 00 00 mov %eax,0xb4(%ebx)
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
109ec7: 58 pop %eax
109ec8: 5a pop %edx
109ec9: 81 c3 a8 00 00 00 add $0xa8,%ebx
109ecf: 53 push %ebx
109ed0: 68 78 f4 12 00 push $0x12f478
109ed5: e8 b2 37 00 00 call 10d68c <_Watchdog_Insert>
109eda: 83 c4 10 add $0x10,%esp
}
/*
* Return the id and indicate we successfully created the thread
*/
*thread = the_thread->Object.id;
109edd: 8b 45 b0 mov -0x50(%ebp),%eax
109ee0: 8b 50 08 mov 0x8(%eax),%edx
109ee3: 8b 45 08 mov 0x8(%ebp),%eax
109ee6: 89 10 mov %edx,(%eax)
_RTEMS_Unlock_allocator();
109ee8: 83 ec 0c sub $0xc,%esp
109eeb: ff 35 60 f4 12 00 pushl 0x12f460
109ef1: e8 8e 14 00 00 call 10b384 <_API_Mutex_Unlock>
109ef6: 83 c4 10 add $0x10,%esp
109ef9: eb 10 jmp 109f0b <pthread_create+0x21b>
struct sched_param schedparam;
Objects_Name name;
int rc;
if ( !start_routine )
return EFAULT;
109efb: c7 45 b4 0e 00 00 00 movl $0xe,-0x4c(%ebp)
109f02: eb 07 jmp 109f0b <pthread_create+0x21b>
schedpolicy = the_attr->schedpolicy;
schedparam = the_attr->schedparam;
break;
default:
return EINVAL;
109f04: c7 45 b4 16 00 00 00 movl $0x16,-0x4c(%ebp)
*/
*thread = the_thread->Object.id;
_RTEMS_Unlock_allocator();
return 0;
}
109f0b: 8b 45 b4 mov -0x4c(%ebp),%eax
109f0e: 8d 65 f4 lea -0xc(%ebp),%esp
109f11: 5b pop %ebx
109f12: 5e pop %esi
109f13: 5f pop %edi
109f14: 5d pop %ebp
109f15: c3 ret
001109fe <pthread_exit>:
}
void pthread_exit(
void *value_ptr
)
{
1109fe: 55 push %ebp
1109ff: 89 e5 mov %esp,%ebp
110a01: 83 ec 10 sub $0x10,%esp
_POSIX_Thread_Exit( _Thread_Executing, value_ptr );
110a04: ff 75 08 pushl 0x8(%ebp)
110a07: ff 35 ec e8 12 00 pushl 0x12e8ec
110a0d: e8 0a ff ff ff call 11091c <_POSIX_Thread_Exit>
110a12: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
110a15: c9 leave <== NOT EXECUTED
110a16: c3 ret <== NOT EXECUTED
0011dcf0 <pthread_kill>:
int pthread_kill(
pthread_t thread,
int sig
)
{
11dcf0: 55 push %ebp
11dcf1: 89 e5 mov %esp,%ebp
11dcf3: 57 push %edi
11dcf4: 56 push %esi
11dcf5: 53 push %ebx
11dcf6: 83 ec 1c sub $0x1c,%esp
11dcf9: 8b 5d 0c mov 0xc(%ebp),%ebx
POSIX_API_Control *api;
Thread_Control *the_thread;
Objects_Locations location;
if ( !sig )
11dcfc: 85 db test %ebx,%ebx
11dcfe: 75 02 jne 11dd02 <pthread_kill+0x12>
11dd00: eb 08 jmp 11dd0a <pthread_kill+0x1a>
static inline bool is_valid_signo(
int signo
)
{
return ((signo) >= 1 && (signo) <= 32 );
11dd02: 8d 7b ff lea -0x1(%ebx),%edi
rtems_set_errno_and_return_minus_one( EINVAL );
if ( !is_valid_signo(sig) )
11dd05: 83 ff 1f cmp $0x1f,%edi
11dd08: 76 0d jbe 11dd17 <pthread_kill+0x27>
rtems_set_errno_and_return_minus_one( EINVAL );
11dd0a: e8 cd 31 ff ff call 110edc <__errno>
11dd0f: c7 00 16 00 00 00 movl $0x16,(%eax)
11dd15: eb 75 jmp 11dd8c <pthread_kill+0x9c>
the_thread = _Thread_Get( thread, &location );
11dd17: 52 push %edx
11dd18: 52 push %edx
11dd19: 8d 45 e4 lea -0x1c(%ebp),%eax
11dd1c: 50 push %eax
11dd1d: ff 75 08 pushl 0x8(%ebp)
11dd20: e8 07 e1 fe ff call 10be2c <_Thread_Get>
11dd25: 89 c6 mov %eax,%esi
switch ( location ) {
11dd27: 83 c4 10 add $0x10,%esp
11dd2a: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp)
11dd2e: 75 51 jne 11dd81 <pthread_kill+0x91> <== NEVER TAKEN
case OBJECTS_LOCAL:
/*
* If sig == 0 then just validate arguments
*/
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
11dd30: 8b 90 e8 00 00 00 mov 0xe8(%eax),%edx
if ( sig ) {
if ( _POSIX_signals_Vectors[ sig ].sa_handler == SIG_IGN ) {
11dd36: 6b c3 0c imul $0xc,%ebx,%eax
11dd39: 83 b8 30 e9 12 00 01 cmpl $0x1,0x12e930(%eax)
11dd40: 75 09 jne 11dd4b <pthread_kill+0x5b>
_Thread_Enable_dispatch();
11dd42: e8 c5 e0 fe ff call 10be0c <_Thread_Enable_dispatch>
return 0;
11dd47: 31 c0 xor %eax,%eax
11dd49: eb 44 jmp 11dd8f <pthread_kill+0x9f>
static inline sigset_t signo_to_mask(
uint32_t sig
)
{
return 1u << (sig - 1);
11dd4b: b8 01 00 00 00 mov $0x1,%eax
11dd50: 89 f9 mov %edi,%ecx
11dd52: d3 e0 shl %cl,%eax
}
/* XXX critical section */
api->signals_pending |= signo_to_mask( sig );
11dd54: 09 82 d4 00 00 00 or %eax,0xd4(%edx)
(void) _POSIX_signals_Unblock_thread( the_thread, sig, NULL );
11dd5a: 50 push %eax
11dd5b: 6a 00 push $0x0
11dd5d: 53 push %ebx
11dd5e: 56 push %esi
11dd5f: e8 8c fe ff ff call 11dbf0 <_POSIX_signals_Unblock_thread>
if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) )
11dd64: 83 c4 10 add $0x10,%esp
11dd67: 83 3d e8 e8 12 00 00 cmpl $0x0,0x12e8e8
11dd6e: 74 d2 je 11dd42 <pthread_kill+0x52>
11dd70: 3b 35 ec e8 12 00 cmp 0x12e8ec,%esi
11dd76: 75 ca jne 11dd42 <pthread_kill+0x52>
_Thread_Dispatch_necessary = true;
11dd78: c6 05 f8 e8 12 00 01 movb $0x1,0x12e8f8
11dd7f: eb c1 jmp 11dd42 <pthread_kill+0x52>
#endif
case OBJECTS_ERROR:
break;
}
rtems_set_errno_and_return_minus_one( ESRCH );
11dd81: e8 56 31 ff ff call 110edc <__errno> <== NOT EXECUTED
11dd86: c7 00 03 00 00 00 movl $0x3,(%eax) <== NOT EXECUTED
11dd8c: 83 c8 ff or $0xffffffff,%eax
}
11dd8f: 8d 65 f4 lea -0xc(%ebp),%esp
11dd92: 5b pop %ebx
11dd93: 5e pop %esi
11dd94: 5f pop %edi
11dd95: 5d pop %ebp
11dd96: c3 ret
0010ba38 <pthread_mutex_timedlock>:
int pthread_mutex_timedlock(
pthread_mutex_t *mutex,
const struct timespec *abstime
)
{
10ba38: 55 push %ebp
10ba39: 89 e5 mov %esp,%ebp
10ba3b: 53 push %ebx
10ba3c: 83 ec 2c sub $0x2c,%esp
*
* If the status is POSIX_ABSOLUTE_TIMEOUT_INVALID,
* POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST, or POSIX_ABSOLUTE_TIMEOUT_IS_NOW,
* then we should not wait.
*/
status = _POSIX_Absolute_timeout_to_ticks( abstime, &ticks );
10ba3f: 8d 45 f4 lea -0xc(%ebp),%eax
10ba42: 50 push %eax
10ba43: ff 75 0c pushl 0xc(%ebp)
10ba46: e8 b5 00 00 00 call 10bb00 <_POSIX_Absolute_timeout_to_ticks>
10ba4b: 89 c3 mov %eax,%ebx
if ( status != POSIX_ABSOLUTE_TIMEOUT_IS_IN_FUTURE )
10ba4d: 83 c4 0c add $0xc,%esp
10ba50: 83 f8 03 cmp $0x3,%eax
10ba53: 0f 94 c1 sete %cl
do_wait = false;
lock_status = _POSIX_Mutex_Lock_support( mutex, do_wait, ticks );
10ba56: ff 75 f4 pushl -0xc(%ebp)
10ba59: 0f b6 c1 movzbl %cl,%eax
10ba5c: 50 push %eax
10ba5d: ff 75 08 pushl 0x8(%ebp)
10ba60: 88 4d e4 mov %cl,-0x1c(%ebp)
10ba63: e8 e8 fe ff ff call 10b950 <_POSIX_Mutex_Lock_support>
* This service only gives us the option to block. We used a polling
* attempt to lock if the abstime was not in the future. If we did
* not obtain the mutex, then not look at the status immediately,
* make sure the right reason is returned.
*/
if ( !do_wait && (lock_status == EBUSY) ) {
10ba68: 83 c4 10 add $0x10,%esp
10ba6b: 8a 4d e4 mov -0x1c(%ebp),%cl
10ba6e: 84 c9 test %cl,%cl
10ba70: 75 17 jne 10ba89 <pthread_mutex_timedlock+0x51>
10ba72: 83 f8 10 cmp $0x10,%eax
10ba75: 75 12 jne 10ba89 <pthread_mutex_timedlock+0x51>
if ( status == POSIX_ABSOLUTE_TIMEOUT_INVALID )
return EINVAL;
10ba77: b0 16 mov $0x16,%al
* attempt to lock if the abstime was not in the future. If we did
* not obtain the mutex, then not look at the status immediately,
* make sure the right reason is returned.
*/
if ( !do_wait && (lock_status == EBUSY) ) {
if ( status == POSIX_ABSOLUTE_TIMEOUT_INVALID )
10ba79: 85 db test %ebx,%ebx
10ba7b: 74 0c je 10ba89 <pthread_mutex_timedlock+0x51><== NEVER TAKEN
return EINVAL;
if ( status == POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST ||
10ba7d: 4b dec %ebx
status == POSIX_ABSOLUTE_TIMEOUT_IS_NOW )
return ETIMEDOUT;
10ba7e: 83 fb 02 cmp $0x2,%ebx
10ba81: 19 c0 sbb %eax,%eax
10ba83: 83 e0 64 and $0x64,%eax
10ba86: 83 c0 10 add $0x10,%eax
}
return lock_status;
}
10ba89: 8b 5d fc mov -0x4(%ebp),%ebx
10ba8c: c9 leave
10ba8d: c3 ret
0010b6a4 <pthread_mutexattr_setpshared>:
int pthread_mutexattr_setpshared(
pthread_mutexattr_t *attr,
int pshared
)
{
10b6a4: 55 push %ebp
10b6a5: 89 e5 mov %esp,%ebp
10b6a7: 8b 55 08 mov 0x8(%ebp),%edx
10b6aa: 8b 4d 0c mov 0xc(%ebp),%ecx
if ( !attr || !attr->is_initialized )
return EINVAL;
10b6ad: b8 16 00 00 00 mov $0x16,%eax
int pthread_mutexattr_setpshared(
pthread_mutexattr_t *attr,
int pshared
)
{
if ( !attr || !attr->is_initialized )
10b6b2: 85 d2 test %edx,%edx
10b6b4: 74 0f je 10b6c5 <pthread_mutexattr_setpshared+0x21>
10b6b6: 83 3a 00 cmpl $0x0,(%edx)
10b6b9: 74 0a je 10b6c5 <pthread_mutexattr_setpshared+0x21>
return EINVAL;
switch ( pshared ) {
10b6bb: 83 f9 01 cmp $0x1,%ecx
10b6be: 77 05 ja 10b6c5 <pthread_mutexattr_setpshared+0x21><== NEVER TAKEN
case PTHREAD_PROCESS_SHARED:
case PTHREAD_PROCESS_PRIVATE:
attr->process_shared = pshared;
10b6c0: 89 4a 04 mov %ecx,0x4(%edx)
return 0;
10b6c3: 30 c0 xor %al,%al
default:
return EINVAL;
}
}
10b6c5: 5d pop %ebp
10b6c6: c3 ret
00109870 <pthread_mutexattr_settype>:
#if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES)
int pthread_mutexattr_settype(
pthread_mutexattr_t *attr,
int type
)
{
109870: 55 push %ebp
109871: 89 e5 mov %esp,%ebp
109873: 8b 55 08 mov 0x8(%ebp),%edx
109876: 8b 4d 0c mov 0xc(%ebp),%ecx
if ( !attr || !attr->is_initialized )
return EINVAL;
109879: b8 16 00 00 00 mov $0x16,%eax
int pthread_mutexattr_settype(
pthread_mutexattr_t *attr,
int type
)
{
if ( !attr || !attr->is_initialized )
10987e: 85 d2 test %edx,%edx
109880: 74 0f je 109891 <pthread_mutexattr_settype+0x21>
109882: 83 3a 00 cmpl $0x0,(%edx)
109885: 74 0a je 109891 <pthread_mutexattr_settype+0x21><== NEVER TAKEN
return EINVAL;
switch ( type ) {
109887: 83 f9 03 cmp $0x3,%ecx
10988a: 77 05 ja 109891 <pthread_mutexattr_settype+0x21>
case PTHREAD_MUTEX_NORMAL:
case PTHREAD_MUTEX_RECURSIVE:
case PTHREAD_MUTEX_ERRORCHECK:
case PTHREAD_MUTEX_DEFAULT:
attr->type = type;
10988c: 89 4a 10 mov %ecx,0x10(%edx)
return 0;
10988f: 30 c0 xor %al,%al
default:
return EINVAL;
}
}
109891: 5d pop %ebp
109892: c3 ret
0010a380 <pthread_once>:
int pthread_once(
pthread_once_t *once_control,
void (*init_routine)(void)
)
{
10a380: 55 push %ebp
10a381: 89 e5 mov %esp,%ebp
10a383: 56 push %esi
10a384: 53 push %ebx
10a385: 83 ec 10 sub $0x10,%esp
10a388: 8b 5d 08 mov 0x8(%ebp),%ebx
10a38b: 8b 75 0c mov 0xc(%ebp),%esi
if ( !once_control || !init_routine )
10a38e: 85 f6 test %esi,%esi
10a390: 74 51 je 10a3e3 <pthread_once+0x63>
10a392: 85 db test %ebx,%ebx
10a394: 74 4d je 10a3e3 <pthread_once+0x63>
once_control->init_executed = true;
(*init_routine)();
}
rtems_task_mode(saveMode, RTEMS_PREEMPT_MASK, &saveMode);
}
return 0;
10a396: 31 c0 xor %eax,%eax
)
{
if ( !once_control || !init_routine )
return EINVAL;
if ( !once_control->init_executed ) {
10a398: 83 7b 04 00 cmpl $0x0,0x4(%ebx)
10a39c: 75 4a jne 10a3e8 <pthread_once+0x68>
rtems_mode saveMode;
rtems_task_mode(RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &saveMode);
10a39e: 52 push %edx
10a39f: 8d 45 f4 lea -0xc(%ebp),%eax
10a3a2: 50 push %eax
10a3a3: 68 00 01 00 00 push $0x100
10a3a8: 68 00 01 00 00 push $0x100
10a3ad: e8 16 0a 00 00 call 10adc8 <rtems_task_mode>
if ( !once_control->init_executed ) {
10a3b2: 83 c4 10 add $0x10,%esp
10a3b5: 83 7b 04 00 cmpl $0x0,0x4(%ebx)
10a3b9: 75 0f jne 10a3ca <pthread_once+0x4a> <== NEVER TAKEN
once_control->is_initialized = true;
10a3bb: c7 03 01 00 00 00 movl $0x1,(%ebx)
once_control->init_executed = true;
10a3c1: c7 43 04 01 00 00 00 movl $0x1,0x4(%ebx)
(*init_routine)();
10a3c8: ff d6 call *%esi
}
rtems_task_mode(saveMode, RTEMS_PREEMPT_MASK, &saveMode);
10a3ca: 50 push %eax
10a3cb: 8d 45 f4 lea -0xc(%ebp),%eax
10a3ce: 50 push %eax
10a3cf: 68 00 01 00 00 push $0x100
10a3d4: ff 75 f4 pushl -0xc(%ebp)
10a3d7: e8 ec 09 00 00 call 10adc8 <rtems_task_mode>
10a3dc: 83 c4 10 add $0x10,%esp
}
return 0;
10a3df: 31 c0 xor %eax,%eax
10a3e1: eb 05 jmp 10a3e8 <pthread_once+0x68>
pthread_once_t *once_control,
void (*init_routine)(void)
)
{
if ( !once_control || !init_routine )
return EINVAL;
10a3e3: b8 16 00 00 00 mov $0x16,%eax
(*init_routine)();
}
rtems_task_mode(saveMode, RTEMS_PREEMPT_MASK, &saveMode);
}
return 0;
}
10a3e8: 8d 65 f8 lea -0x8(%ebp),%esp
10a3eb: 5b pop %ebx
10a3ec: 5e pop %esi
10a3ed: 5d pop %ebp
10a3ee: c3 ret
0010a220 <pthread_rwlock_init>:
int pthread_rwlock_init(
pthread_rwlock_t *rwlock,
const pthread_rwlockattr_t *attr
)
{
10a220: 55 push %ebp
10a221: 89 e5 mov %esp,%ebp
10a223: 56 push %esi
10a224: 53 push %ebx
10a225: 83 ec 10 sub $0x10,%esp
10a228: 8b 75 08 mov 0x8(%ebp),%esi
const pthread_rwlockattr_t *the_attr;
/*
* Error check parameters
*/
if ( !rwlock )
10a22b: 85 f6 test %esi,%esi
10a22d: 75 05 jne 10a234 <pthread_rwlock_init+0x14>
10a22f: e9 8f 00 00 00 jmp 10a2c3 <pthread_rwlock_init+0xa3>
return EINVAL;
/*
* If the user passed in NULL, use the default attributes
*/
if ( attr ) {
10a234: 8b 45 0c mov 0xc(%ebp),%eax
10a237: 85 c0 test %eax,%eax
10a239: 75 11 jne 10a24c <pthread_rwlock_init+0x2c>
the_attr = attr;
} else {
(void) pthread_rwlockattr_init( &default_attr );
10a23b: 83 ec 0c sub $0xc,%esp
10a23e: 8d 5d f0 lea -0x10(%ebp),%ebx
10a241: 53 push %ebx
10a242: e8 a1 06 00 00 call 10a8e8 <pthread_rwlockattr_init>
10a247: 83 c4 10 add $0x10,%esp
the_attr = &default_attr;
10a24a: 89 d8 mov %ebx,%eax
}
/*
* Now start error checking the attributes that we are going to use
*/
if ( !the_attr->is_initialized )
10a24c: 83 38 00 cmpl $0x0,(%eax)
10a24f: 74 72 je 10a2c3 <pthread_rwlock_init+0xa3><== NEVER TAKEN
return EINVAL;
switch ( the_attr->process_shared ) {
10a251: 83 78 04 00 cmpl $0x0,0x4(%eax)
10a255: 75 6c jne 10a2c3 <pthread_rwlock_init+0xa3><== NEVER TAKEN
*/
RTEMS_INLINE_ROUTINE void _CORE_RWLock_Initialize_attributes(
CORE_RWLock_Attributes *the_attributes
)
{
the_attributes->XXX = 0;
10a257: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
*
* This rountine increments the thread dispatch level
*/
RTEMS_INLINE_ROUTINE uint32_t _Thread_Dispatch_increment_disable_level(void)
{
_Thread_Dispatch_disable_level++;
10a25e: a1 b4 31 13 00 mov 0x1331b4,%eax
10a263: 40 inc %eax
10a264: a3 b4 31 13 00 mov %eax,0x1331b4
return _Thread_Dispatch_disable_level;
10a269: a1 b4 31 13 00 mov 0x1331b4,%eax
* This function allocates a RWLock control block from
* the inactive chain of free RWLock control blocks.
*/
RTEMS_INLINE_ROUTINE POSIX_RWLock_Control *_POSIX_RWLock_Allocate( void )
{
return (POSIX_RWLock_Control *)
10a26e: 83 ec 0c sub $0xc,%esp
10a271: 68 b8 33 13 00 push $0x1333b8
10a276: e8 3d 24 00 00 call 10c6b8 <_Objects_Allocate>
10a27b: 89 c3 mov %eax,%ebx
*/
_Thread_Disable_dispatch(); /* prevents deletion */
the_rwlock = _POSIX_RWLock_Allocate();
if ( !the_rwlock ) {
10a27d: 83 c4 10 add $0x10,%esp
10a280: 85 c0 test %eax,%eax
10a282: 75 0c jne 10a290 <pthread_rwlock_init+0x70>
_Thread_Enable_dispatch();
10a284: e8 33 34 00 00 call 10d6bc <_Thread_Enable_dispatch>
return EAGAIN;
10a289: b8 0b 00 00 00 mov $0xb,%eax
10a28e: eb 38 jmp 10a2c8 <pthread_rwlock_init+0xa8>
}
_CORE_RWLock_Initialize( &the_rwlock->RWLock, &the_attributes );
10a290: 50 push %eax
10a291: 50 push %eax
10a292: 8d 45 ec lea -0x14(%ebp),%eax
10a295: 50 push %eax
10a296: 8d 43 10 lea 0x10(%ebx),%eax
10a299: 50 push %eax
10a29a: e8 c1 1e 00 00 call 10c160 <_CORE_RWLock_Initialize>
uint32_t name
)
{
_Objects_Set_local_object(
information,
_Objects_Get_index( the_object->id ),
10a29f: 8b 43 08 mov 0x8(%ebx),%eax
Objects_Information *information,
Objects_Control *the_object,
uint32_t name
)
{
_Objects_Set_local_object(
10a2a2: 0f b7 c8 movzwl %ax,%ecx
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
10a2a5: 8b 15 d4 33 13 00 mov 0x1333d4,%edx
10a2ab: 89 1c 8a mov %ebx,(%edx,%ecx,4)
_Objects_Get_index( the_object->id ),
the_object
);
/* ASSERT: information->is_string == false */
the_object->name.name_u32 = name;
10a2ae: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx)
&_POSIX_RWLock_Information,
&the_rwlock->Object,
0
);
*rwlock = the_rwlock->Object.id;
10a2b5: 89 06 mov %eax,(%esi)
_Thread_Enable_dispatch();
10a2b7: e8 00 34 00 00 call 10d6bc <_Thread_Enable_dispatch>
10a2bc: 83 c4 10 add $0x10,%esp
return 0;
10a2bf: 31 c0 xor %eax,%eax
10a2c1: eb 05 jmp 10a2c8 <pthread_rwlock_init+0xa8>
switch ( the_attr->process_shared ) {
case PTHREAD_PROCESS_PRIVATE: /* only supported values */
break;
case PTHREAD_PROCESS_SHARED:
default:
return EINVAL;
10a2c3: b8 16 00 00 00 mov $0x16,%eax
*rwlock = the_rwlock->Object.id;
_Thread_Enable_dispatch();
return 0;
}
10a2c8: 8d 65 f8 lea -0x8(%ebp),%esp
10a2cb: 5b pop %ebx
10a2cc: 5e pop %esi
10a2cd: 5d pop %ebp
10a2ce: c3 ret
0010ac10 <pthread_rwlock_timedrdlock>:
int pthread_rwlock_timedrdlock(
pthread_rwlock_t *rwlock,
const struct timespec *abstime
)
{
10ac10: 55 push %ebp
10ac11: 89 e5 mov %esp,%ebp
10ac13: 56 push %esi
10ac14: 53 push %ebx
10ac15: 83 ec 20 sub $0x20,%esp
10ac18: 8b 75 08 mov 0x8(%ebp),%esi
Objects_Locations location;
Watchdog_Interval ticks;
bool do_wait = true;
POSIX_Absolute_timeout_conversion_results_t status;
if ( !rwlock )
10ac1b: 85 f6 test %esi,%esi
10ac1d: 75 05 jne 10ac24 <pthread_rwlock_timedrdlock+0x14>
10ac1f: e9 8a 00 00 00 jmp 10acae <pthread_rwlock_timedrdlock+0x9e>
*
* If the status is POSIX_ABSOLUTE_TIMEOUT_INVALID,
* POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST, or POSIX_ABSOLUTE_TIMEOUT_IS_NOW,
* then we should not wait.
*/
status = _POSIX_Absolute_timeout_to_ticks( abstime, &ticks );
10ac24: 50 push %eax
10ac25: 50 push %eax
10ac26: 8d 45 f4 lea -0xc(%ebp),%eax
10ac29: 50 push %eax
10ac2a: ff 75 0c pushl 0xc(%ebp)
10ac2d: e8 ce 56 00 00 call 110300 <_POSIX_Absolute_timeout_to_ticks>
10ac32: 89 c3 mov %eax,%ebx
10ac34: 83 c4 0c add $0xc,%esp
if ( status != POSIX_ABSOLUTE_TIMEOUT_IS_IN_FUTURE )
do_wait = false;
the_rwlock = _POSIX_RWLock_Get( rwlock, &location );
10ac37: 8d 45 f0 lea -0x10(%ebp),%eax
10ac3a: 50 push %eax
10ac3b: ff 36 pushl (%esi)
10ac3d: 68 a0 15 13 00 push $0x1315a0
10ac42: e8 59 25 00 00 call 10d1a0 <_Objects_Get>
switch ( location ) {
10ac47: 83 c4 10 add $0x10,%esp
10ac4a: 83 7d f0 00 cmpl $0x0,-0x10(%ebp)
10ac4e: 75 5e jne 10acae <pthread_rwlock_timedrdlock+0x9e>
* If the status is POSIX_ABSOLUTE_TIMEOUT_INVALID,
* POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST, or POSIX_ABSOLUTE_TIMEOUT_IS_NOW,
* then we should not wait.
*/
status = _POSIX_Absolute_timeout_to_ticks( abstime, &ticks );
if ( status != POSIX_ABSOLUTE_TIMEOUT_IS_IN_FUTURE )
10ac50: 83 fb 03 cmp $0x3,%ebx
10ac53: 0f 94 c2 sete %dl
the_rwlock = _POSIX_RWLock_Get( rwlock, &location );
switch ( location ) {
case OBJECTS_LOCAL:
_CORE_RWLock_Obtain_for_reading(
10ac56: 83 ec 0c sub $0xc,%esp
10ac59: 6a 00 push $0x0
10ac5b: ff 75 f4 pushl -0xc(%ebp)
10ac5e: 0f b6 ca movzbl %dl,%ecx
10ac61: 51 push %ecx
10ac62: ff 36 pushl (%esi)
10ac64: 83 c0 10 add $0x10,%eax
10ac67: 50 push %eax
10ac68: 88 55 e4 mov %dl,-0x1c(%ebp)
10ac6b: e8 d0 19 00 00 call 10c640 <_CORE_RWLock_Obtain_for_reading>
do_wait,
ticks,
NULL
);
_Thread_Enable_dispatch();
10ac70: 83 c4 20 add $0x20,%esp
10ac73: e8 5c 30 00 00 call 10dcd4 <_Thread_Enable_dispatch>
if ( !do_wait ) {
10ac78: 8a 55 e4 mov -0x1c(%ebp),%dl
10ac7b: 84 d2 test %dl,%dl
10ac7d: 75 1a jne 10ac99 <pthread_rwlock_timedrdlock+0x89>
if ( _Thread_Executing->Wait.return_code == CORE_RWLOCK_UNAVAILABLE ) {
10ac7f: a1 e4 18 13 00 mov 0x1318e4,%eax
10ac84: 83 78 34 02 cmpl $0x2,0x34(%eax)
10ac88: 75 0f jne 10ac99 <pthread_rwlock_timedrdlock+0x89>
if ( status == POSIX_ABSOLUTE_TIMEOUT_INVALID )
10ac8a: 85 db test %ebx,%ebx
10ac8c: 74 20 je 10acae <pthread_rwlock_timedrdlock+0x9e><== NEVER TAKEN
return EINVAL;
if ( status == POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST ||
10ac8e: 4b dec %ebx
status == POSIX_ABSOLUTE_TIMEOUT_IS_NOW )
return ETIMEDOUT;
10ac8f: b8 74 00 00 00 mov $0x74,%eax
_Thread_Enable_dispatch();
if ( !do_wait ) {
if ( _Thread_Executing->Wait.return_code == CORE_RWLOCK_UNAVAILABLE ) {
if ( status == POSIX_ABSOLUTE_TIMEOUT_INVALID )
return EINVAL;
if ( status == POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST ||
10ac94: 83 fb 01 cmp $0x1,%ebx
10ac97: 76 1a jbe 10acb3 <pthread_rwlock_timedrdlock+0xa3><== ALWAYS TAKEN
status == POSIX_ABSOLUTE_TIMEOUT_IS_NOW )
return ETIMEDOUT;
}
}
return _POSIX_RWLock_Translate_core_RWLock_return_code(
10ac99: 83 ec 0c sub $0xc,%esp
(CORE_RWLock_Status) _Thread_Executing->Wait.return_code
10ac9c: a1 e4 18 13 00 mov 0x1318e4,%eax
status == POSIX_ABSOLUTE_TIMEOUT_IS_NOW )
return ETIMEDOUT;
}
}
return _POSIX_RWLock_Translate_core_RWLock_return_code(
10aca1: ff 70 34 pushl 0x34(%eax)
10aca4: e8 bf 00 00 00 call 10ad68 <_POSIX_RWLock_Translate_core_RWLock_return_code>
10aca9: 83 c4 10 add $0x10,%esp
10acac: eb 05 jmp 10acb3 <pthread_rwlock_timedrdlock+0xa3>
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
10acae: b8 16 00 00 00 mov $0x16,%eax
}
10acb3: 8d 65 f8 lea -0x8(%ebp),%esp
10acb6: 5b pop %ebx
10acb7: 5e pop %esi
10acb8: 5d pop %ebp
10acb9: c3 ret
0010acbc <pthread_rwlock_timedwrlock>:
int pthread_rwlock_timedwrlock(
pthread_rwlock_t *rwlock,
const struct timespec *abstime
)
{
10acbc: 55 push %ebp
10acbd: 89 e5 mov %esp,%ebp
10acbf: 56 push %esi
10acc0: 53 push %ebx
10acc1: 83 ec 20 sub $0x20,%esp
10acc4: 8b 75 08 mov 0x8(%ebp),%esi
Objects_Locations location;
Watchdog_Interval ticks;
bool do_wait = true;
POSIX_Absolute_timeout_conversion_results_t status;
if ( !rwlock )
10acc7: 85 f6 test %esi,%esi
10acc9: 75 05 jne 10acd0 <pthread_rwlock_timedwrlock+0x14>
10accb: e9 8a 00 00 00 jmp 10ad5a <pthread_rwlock_timedwrlock+0x9e>
*
* If the status is POSIX_ABSOLUTE_TIMEOUT_INVALID,
* POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST, or POSIX_ABSOLUTE_TIMEOUT_IS_NOW,
* then we should not wait.
*/
status = _POSIX_Absolute_timeout_to_ticks( abstime, &ticks );
10acd0: 50 push %eax
10acd1: 50 push %eax
10acd2: 8d 45 f4 lea -0xc(%ebp),%eax
10acd5: 50 push %eax
10acd6: ff 75 0c pushl 0xc(%ebp)
10acd9: e8 22 56 00 00 call 110300 <_POSIX_Absolute_timeout_to_ticks>
10acde: 89 c3 mov %eax,%ebx
10ace0: 83 c4 0c add $0xc,%esp
if ( status != POSIX_ABSOLUTE_TIMEOUT_IS_IN_FUTURE )
do_wait = false;
the_rwlock = _POSIX_RWLock_Get( rwlock, &location );
10ace3: 8d 45 f0 lea -0x10(%ebp),%eax
10ace6: 50 push %eax
10ace7: ff 36 pushl (%esi)
10ace9: 68 a0 15 13 00 push $0x1315a0
10acee: e8 ad 24 00 00 call 10d1a0 <_Objects_Get>
switch ( location ) {
10acf3: 83 c4 10 add $0x10,%esp
10acf6: 83 7d f0 00 cmpl $0x0,-0x10(%ebp)
10acfa: 75 5e jne 10ad5a <pthread_rwlock_timedwrlock+0x9e>
* If the status is POSIX_ABSOLUTE_TIMEOUT_INVALID,
* POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST, or POSIX_ABSOLUTE_TIMEOUT_IS_NOW,
* then we should not wait.
*/
status = _POSIX_Absolute_timeout_to_ticks( abstime, &ticks );
if ( status != POSIX_ABSOLUTE_TIMEOUT_IS_IN_FUTURE )
10acfc: 83 fb 03 cmp $0x3,%ebx
10acff: 0f 94 c2 sete %dl
the_rwlock = _POSIX_RWLock_Get( rwlock, &location );
switch ( location ) {
case OBJECTS_LOCAL:
_CORE_RWLock_Obtain_for_writing(
10ad02: 83 ec 0c sub $0xc,%esp
10ad05: 6a 00 push $0x0
10ad07: ff 75 f4 pushl -0xc(%ebp)
10ad0a: 0f b6 ca movzbl %dl,%ecx
10ad0d: 51 push %ecx
10ad0e: ff 36 pushl (%esi)
10ad10: 83 c0 10 add $0x10,%eax
10ad13: 50 push %eax
10ad14: 88 55 e4 mov %dl,-0x1c(%ebp)
10ad17: e8 d4 19 00 00 call 10c6f0 <_CORE_RWLock_Obtain_for_writing>
do_wait,
ticks,
NULL
);
_Thread_Enable_dispatch();
10ad1c: 83 c4 20 add $0x20,%esp
10ad1f: e8 b0 2f 00 00 call 10dcd4 <_Thread_Enable_dispatch>
if ( !do_wait &&
10ad24: 8a 55 e4 mov -0x1c(%ebp),%dl
10ad27: 84 d2 test %dl,%dl
10ad29: 75 1a jne 10ad45 <pthread_rwlock_timedwrlock+0x89>
(_Thread_Executing->Wait.return_code == CORE_RWLOCK_UNAVAILABLE) ) {
10ad2b: a1 e4 18 13 00 mov 0x1318e4,%eax
ticks,
NULL
);
_Thread_Enable_dispatch();
if ( !do_wait &&
10ad30: 83 78 34 02 cmpl $0x2,0x34(%eax)
10ad34: 75 0f jne 10ad45 <pthread_rwlock_timedwrlock+0x89>
(_Thread_Executing->Wait.return_code == CORE_RWLOCK_UNAVAILABLE) ) {
if ( status == POSIX_ABSOLUTE_TIMEOUT_INVALID )
10ad36: 85 db test %ebx,%ebx
10ad38: 74 20 je 10ad5a <pthread_rwlock_timedwrlock+0x9e><== NEVER TAKEN
return EINVAL;
if ( status == POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST ||
10ad3a: 4b dec %ebx
status == POSIX_ABSOLUTE_TIMEOUT_IS_NOW )
return ETIMEDOUT;
10ad3b: b8 74 00 00 00 mov $0x74,%eax
_Thread_Enable_dispatch();
if ( !do_wait &&
(_Thread_Executing->Wait.return_code == CORE_RWLOCK_UNAVAILABLE) ) {
if ( status == POSIX_ABSOLUTE_TIMEOUT_INVALID )
return EINVAL;
if ( status == POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST ||
10ad40: 83 fb 01 cmp $0x1,%ebx
10ad43: 76 1a jbe 10ad5f <pthread_rwlock_timedwrlock+0xa3><== ALWAYS TAKEN
status == POSIX_ABSOLUTE_TIMEOUT_IS_NOW )
return ETIMEDOUT;
}
return _POSIX_RWLock_Translate_core_RWLock_return_code(
10ad45: 83 ec 0c sub $0xc,%esp
(CORE_RWLock_Status) _Thread_Executing->Wait.return_code
10ad48: a1 e4 18 13 00 mov 0x1318e4,%eax
if ( status == POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST ||
status == POSIX_ABSOLUTE_TIMEOUT_IS_NOW )
return ETIMEDOUT;
}
return _POSIX_RWLock_Translate_core_RWLock_return_code(
10ad4d: ff 70 34 pushl 0x34(%eax)
10ad50: e8 13 00 00 00 call 10ad68 <_POSIX_RWLock_Translate_core_RWLock_return_code>
10ad55: 83 c4 10 add $0x10,%esp
10ad58: eb 05 jmp 10ad5f <pthread_rwlock_timedwrlock+0xa3>
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
10ad5a: b8 16 00 00 00 mov $0x16,%eax
}
10ad5f: 8d 65 f8 lea -0x8(%ebp),%esp
10ad62: 5b pop %ebx
10ad63: 5e pop %esi
10ad64: 5d pop %ebp
10ad65: c3 ret
0010b4b8 <pthread_rwlockattr_setpshared>:
int pthread_rwlockattr_setpshared(
pthread_rwlockattr_t *attr,
int pshared
)
{
10b4b8: 55 push %ebp
10b4b9: 89 e5 mov %esp,%ebp
10b4bb: 8b 55 08 mov 0x8(%ebp),%edx
10b4be: 8b 4d 0c mov 0xc(%ebp),%ecx
if ( !attr )
return EINVAL;
10b4c1: b8 16 00 00 00 mov $0x16,%eax
int pthread_rwlockattr_setpshared(
pthread_rwlockattr_t *attr,
int pshared
)
{
if ( !attr )
10b4c6: 85 d2 test %edx,%edx
10b4c8: 74 0f je 10b4d9 <pthread_rwlockattr_setpshared+0x21>
return EINVAL;
if ( !attr->is_initialized )
10b4ca: 83 3a 00 cmpl $0x0,(%edx)
10b4cd: 74 0a je 10b4d9 <pthread_rwlockattr_setpshared+0x21>
return EINVAL;
switch ( pshared ) {
10b4cf: 83 f9 01 cmp $0x1,%ecx
10b4d2: 77 05 ja 10b4d9 <pthread_rwlockattr_setpshared+0x21><== NEVER TAKEN
case PTHREAD_PROCESS_SHARED:
case PTHREAD_PROCESS_PRIVATE:
attr->process_shared = pshared;
10b4d4: 89 4a 04 mov %ecx,0x4(%edx)
return 0;
10b4d7: 30 c0 xor %al,%al
default:
return EINVAL;
}
}
10b4d9: 5d pop %ebp
10b4da: c3 ret
0010c2c4 <pthread_setschedparam>:
int pthread_setschedparam(
pthread_t thread,
int policy,
struct sched_param *param
)
{
10c2c4: 55 push %ebp
10c2c5: 89 e5 mov %esp,%ebp
10c2c7: 57 push %edi
10c2c8: 56 push %esi
10c2c9: 53 push %ebx
10c2ca: 83 ec 2c sub $0x2c,%esp
10c2cd: 8b 75 10 mov 0x10(%ebp),%esi
/*
* Check all the parameters
*/
if ( !param )
return EINVAL;
10c2d0: c7 45 d4 16 00 00 00 movl $0x16,-0x2c(%ebp)
int rc;
/*
* Check all the parameters
*/
if ( !param )
10c2d7: 85 f6 test %esi,%esi
10c2d9: 0f 84 f9 00 00 00 je 10c3d8 <pthread_setschedparam+0x114>
return EINVAL;
rc = _POSIX_Thread_Translate_sched_param(
10c2df: 8d 45 e0 lea -0x20(%ebp),%eax
10c2e2: 50 push %eax
10c2e3: 8d 45 dc lea -0x24(%ebp),%eax
10c2e6: 50 push %eax
10c2e7: 56 push %esi
10c2e8: ff 75 0c pushl 0xc(%ebp)
10c2eb: e8 8c 4e 00 00 call 11117c <_POSIX_Thread_Translate_sched_param>
10c2f0: 89 45 d4 mov %eax,-0x2c(%ebp)
policy,
param,
&budget_algorithm,
&budget_callout
);
if ( rc )
10c2f3: 83 c4 10 add $0x10,%esp
10c2f6: 85 c0 test %eax,%eax
10c2f8: 0f 85 da 00 00 00 jne 10c3d8 <pthread_setschedparam+0x114>
return rc;
/*
* Actually change the scheduling policy and parameters
*/
the_thread = _Thread_Get( thread, &location );
10c2fe: 53 push %ebx
10c2ff: 53 push %ebx
10c300: 8d 45 e4 lea -0x1c(%ebp),%eax
10c303: 50 push %eax
10c304: ff 75 08 pushl 0x8(%ebp)
10c307: e8 d4 26 00 00 call 10e9e0 <_Thread_Get>
10c30c: 89 c2 mov %eax,%edx
switch ( location ) {
10c30e: 83 c4 10 add $0x10,%esp
10c311: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp)
10c315: 0f 85 b6 00 00 00 jne 10c3d1 <pthread_setschedparam+0x10d>
case OBJECTS_LOCAL:
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
10c31b: 8b 98 e8 00 00 00 mov 0xe8(%eax),%ebx
if ( api->schedpolicy == SCHED_SPORADIC )
10c321: 83 bb 84 00 00 00 04 cmpl $0x4,0x84(%ebx)
10c328: 75 18 jne 10c342 <pthread_setschedparam+0x7e>
(void) _Watchdog_Remove( &api->Sporadic_timer );
10c32a: 83 ec 0c sub $0xc,%esp
10c32d: 8d 83 a8 00 00 00 lea 0xa8(%ebx),%eax
10c333: 50 push %eax
10c334: 89 55 d0 mov %edx,-0x30(%ebp)
10c337: e8 ec 33 00 00 call 10f728 <_Watchdog_Remove>
10c33c: 83 c4 10 add $0x10,%esp
10c33f: 8b 55 d0 mov -0x30(%ebp),%edx
api->schedpolicy = policy;
10c342: 8b 45 0c mov 0xc(%ebp),%eax
10c345: 89 83 84 00 00 00 mov %eax,0x84(%ebx)
api->schedparam = *param;
10c34b: 8d bb 88 00 00 00 lea 0x88(%ebx),%edi
10c351: b9 07 00 00 00 mov $0x7,%ecx
10c356: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
the_thread->budget_algorithm = budget_algorithm;
10c358: 8b 45 dc mov -0x24(%ebp),%eax
10c35b: 89 42 78 mov %eax,0x78(%edx)
the_thread->budget_callout = budget_callout;
10c35e: 8b 45 e0 mov -0x20(%ebp),%eax
10c361: 89 42 7c mov %eax,0x7c(%edx)
switch ( api->schedpolicy ) {
10c364: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
10c368: 78 60 js 10c3ca <pthread_setschedparam+0x106><== NEVER TAKEN
10c36a: 83 7d 0c 02 cmpl $0x2,0xc(%ebp)
10c36e: 7e 08 jle 10c378 <pthread_setschedparam+0xb4>
10c370: 83 7d 0c 04 cmpl $0x4,0xc(%ebp)
10c374: 75 54 jne 10c3ca <pthread_setschedparam+0x106><== NEVER TAKEN
10c376: eb 24 jmp 10c39c <pthread_setschedparam+0xd8>
case SCHED_OTHER:
case SCHED_FIFO:
case SCHED_RR:
the_thread->cpu_time_budget = _Thread_Ticks_per_timeslice;
10c378: a1 08 34 13 00 mov 0x133408,%eax
10c37d: 89 42 74 mov %eax,0x74(%edx)
10c380: 0f b6 05 88 f1 12 00 movzbl 0x12f188,%eax
10c387: 2b 83 88 00 00 00 sub 0x88(%ebx),%eax
the_thread->real_priority =
10c38d: 89 42 18 mov %eax,0x18(%edx)
_POSIX_Priority_To_core( api->schedparam.sched_priority );
_Thread_Change_priority(
10c390: 51 push %ecx
10c391: 6a 01 push $0x1
10c393: 50 push %eax
10c394: 52 push %edx
10c395: e8 36 22 00 00 call 10e5d0 <_Thread_Change_priority>
10c39a: eb 2b jmp 10c3c7 <pthread_setschedparam+0x103>
true
);
break;
case SCHED_SPORADIC:
api->ss_high_priority = api->schedparam.sched_priority;
10c39c: 8b 83 88 00 00 00 mov 0x88(%ebx),%eax
10c3a2: 89 83 a4 00 00 00 mov %eax,0xa4(%ebx)
_Watchdog_Remove( &api->Sporadic_timer );
10c3a8: 83 ec 0c sub $0xc,%esp
10c3ab: 81 c3 a8 00 00 00 add $0xa8,%ebx
10c3b1: 53 push %ebx
10c3b2: 89 55 d0 mov %edx,-0x30(%ebp)
10c3b5: e8 6e 33 00 00 call 10f728 <_Watchdog_Remove>
_POSIX_Threads_Sporadic_budget_TSR( 0, the_thread );
10c3ba: 58 pop %eax
10c3bb: 5a pop %edx
10c3bc: 8b 55 d0 mov -0x30(%ebp),%edx
10c3bf: 52 push %edx
10c3c0: 6a 00 push $0x0
10c3c2: e8 ea fd ff ff call 10c1b1 <_POSIX_Threads_Sporadic_budget_TSR>
break;
10c3c7: 83 c4 10 add $0x10,%esp
}
_Thread_Enable_dispatch();
10c3ca: e8 f1 25 00 00 call 10e9c0 <_Thread_Enable_dispatch>
10c3cf: eb 07 jmp 10c3d8 <pthread_setschedparam+0x114>
#endif
case OBJECTS_ERROR:
break;
}
return ESRCH;
10c3d1: c7 45 d4 03 00 00 00 movl $0x3,-0x2c(%ebp)
}
10c3d8: 8b 45 d4 mov -0x2c(%ebp),%eax
10c3db: 8d 65 f4 lea -0xc(%ebp),%esp
10c3de: 5b pop %ebx
10c3df: 5e pop %esi
10c3e0: 5f pop %edi
10c3e1: 5d pop %ebp
10c3e2: c3 ret
0010a130 <pthread_testcancel>:
* Don't even think about deleting a resource from an ISR.
* Besides this request is supposed to be for _Thread_Executing
* and the ISR context is not a thread.
*/
if ( _ISR_Is_in_progress() )
10a130: 83 3d d8 f8 12 00 00 cmpl $0x0,0x12f8d8
10a137: 75 57 jne 10a190 <pthread_testcancel+0x60><== NEVER TAKEN
/*
* 18.2.2 Setting Cancelability State, P1003.1c/Draft 10, p. 183
*/
void pthread_testcancel( void )
{
10a139: 55 push %ebp
10a13a: 89 e5 mov %esp,%ebp
10a13c: 53 push %ebx
10a13d: 52 push %edx
*/
if ( _ISR_Is_in_progress() )
return;
thread_support = _Thread_Executing->API_Extensions[ THREAD_API_POSIX ];
10a13e: a1 dc f8 12 00 mov 0x12f8dc,%eax
10a143: 8b 80 e8 00 00 00 mov 0xe8(%eax),%eax
*
* This rountine increments the thread dispatch level
*/
RTEMS_INLINE_ROUTINE uint32_t _Thread_Dispatch_increment_disable_level(void)
{
_Thread_Dispatch_disable_level++;
10a149: 8b 15 d4 f3 12 00 mov 0x12f3d4,%edx
10a14f: 42 inc %edx
10a150: 89 15 d4 f3 12 00 mov %edx,0x12f3d4
return _Thread_Dispatch_disable_level;
10a156: 8b 15 d4 f3 12 00 mov 0x12f3d4,%edx
*/
void pthread_testcancel( void )
{
POSIX_API_Control *thread_support;
bool cancel = false;
10a15c: 31 db xor %ebx,%ebx
return;
thread_support = _Thread_Executing->API_Extensions[ THREAD_API_POSIX ];
_Thread_Disable_dispatch();
if ( thread_support->cancelability_state == PTHREAD_CANCEL_ENABLE &&
10a15e: 83 b8 d8 00 00 00 00 cmpl $0x0,0xd8(%eax)
10a165: 75 0a jne 10a171 <pthread_testcancel+0x41><== NEVER TAKEN
10a167: 83 b8 e0 00 00 00 00 cmpl $0x0,0xe0(%eax)
10a16e: 0f 95 c3 setne %bl
thread_support->cancelation_requested )
cancel = true;
_Thread_Enable_dispatch();
10a171: e8 16 25 00 00 call 10c68c <_Thread_Enable_dispatch>
if ( cancel )
10a176: 84 db test %bl,%bl
10a178: 74 12 je 10a18c <pthread_testcancel+0x5c>
_POSIX_Thread_Exit( _Thread_Executing, PTHREAD_CANCELED );
10a17a: 50 push %eax
10a17b: 50 push %eax
10a17c: 6a ff push $0xffffffff
10a17e: ff 35 dc f8 12 00 pushl 0x12f8dc
10a184: e8 8f 4d 00 00 call 10ef18 <_POSIX_Thread_Exit>
10a189: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
10a18c: 8b 5d fc mov -0x4(%ebp),%ebx
10a18f: c9 leave
10a190: c3 ret
0010e240 <ramdisk_allocate>:
void *area_begin,
uint32_t block_size,
rtems_blkdev_bnum block_count,
bool trace
)
{
10e240: 55 push %ebp
10e241: 89 e5 mov %esp,%ebp
10e243: 57 push %edi
10e244: 56 push %esi
10e245: 53 push %ebx
10e246: 83 ec 18 sub $0x18,%esp
10e249: 8b 75 08 mov 0x8(%ebp),%esi
10e24c: 8a 5d 14 mov 0x14(%ebp),%bl
struct ramdisk *rd = malloc(sizeof(struct ramdisk));
10e24f: 6a 10 push $0x10
10e251: e8 ee 96 ff ff call 107944 <malloc>
10e256: 89 c7 mov %eax,%edi
if (rd == NULL) {
10e258: 83 c4 10 add $0x10,%esp
10e25b: 85 c0 test %eax,%eax
10e25d: 74 49 je 10e2a8 <ramdisk_allocate+0x68> <== NEVER TAKEN
return NULL;
}
if (area_begin == NULL) {
10e25f: 85 f6 test %esi,%esi
10e261: 75 2c jne 10e28f <ramdisk_allocate+0x4f>
area_begin = calloc(block_count, block_size);
10e263: 50 push %eax
10e264: 50 push %eax
10e265: ff 75 0c pushl 0xc(%ebp)
10e268: ff 75 10 pushl 0x10(%ebp)
10e26b: e8 48 90 ff ff call 1072b8 <calloc>
10e270: 89 c6 mov %eax,%esi
if (area_begin == NULL) {
10e272: 83 c4 10 add $0x10,%esp
10e275: 85 c0 test %eax,%eax
10e277: 75 10 jne 10e289 <ramdisk_allocate+0x49> <== ALWAYS TAKEN
free(rd);
10e279: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10e27c: 57 push %edi <== NOT EXECUTED
10e27d: e8 a2 92 ff ff call 107524 <free> <== NOT EXECUTED
return NULL;
10e282: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
10e285: 31 ff xor %edi,%edi <== NOT EXECUTED
10e287: eb 1f jmp 10e2a8 <ramdisk_allocate+0x68> <== NOT EXECUTED
}
rd->malloced = true;
10e289: c6 47 0d 01 movb $0x1,0xd(%edi)
10e28d: eb 04 jmp 10e293 <ramdisk_allocate+0x53>
} else {
rd->malloced = false;
10e28f: c6 40 0d 00 movb $0x0,0xd(%eax)
}
rd->block_size = block_size;
10e293: 8b 45 0c mov 0xc(%ebp),%eax
10e296: 89 07 mov %eax,(%edi)
rd->block_num = block_count;
10e298: 8b 45 10 mov 0x10(%ebp),%eax
10e29b: 89 47 04 mov %eax,0x4(%edi)
rd->area = area_begin;
10e29e: 89 77 08 mov %esi,0x8(%edi)
rd->trace = trace;
10e2a1: 88 5f 0e mov %bl,0xe(%edi)
rd->initialized = true;
10e2a4: c6 47 0c 01 movb $0x1,0xc(%edi)
return rd;
}
10e2a8: 89 f8 mov %edi,%eax
10e2aa: 8d 65 f4 lea -0xc(%ebp),%esp
10e2ad: 5b pop %ebx
10e2ae: 5e pop %esi
10e2af: 5f pop %edi
10e2b0: 5d pop %ebp
10e2b1: c3 ret
0010e2b2 <ramdisk_free>:
void ramdisk_free(ramdisk *rd)
{
10e2b2: 55 push %ebp
10e2b3: 89 e5 mov %esp,%ebp
10e2b5: 53 push %ebx
10e2b6: 52 push %edx
10e2b7: 8b 5d 08 mov 0x8(%ebp),%ebx
if (rd != NULL) {
10e2ba: 85 db test %ebx,%ebx
10e2bc: 74 20 je 10e2de <ramdisk_free+0x2c> <== NEVER TAKEN
if (rd->malloced) {
10e2be: 80 7b 0d 00 cmpb $0x0,0xd(%ebx)
10e2c2: 74 0e je 10e2d2 <ramdisk_free+0x20>
free(rd->area);
10e2c4: 83 ec 0c sub $0xc,%esp
10e2c7: ff 73 08 pushl 0x8(%ebx)
10e2ca: e8 55 92 ff ff call 107524 <free>
10e2cf: 83 c4 10 add $0x10,%esp
}
free(rd);
10e2d2: 89 5d 08 mov %ebx,0x8(%ebp)
}
}
10e2d5: 8b 5d fc mov -0x4(%ebp),%ebx
10e2d8: c9 leave
{
if (rd != NULL) {
if (rd->malloced) {
free(rd->area);
}
free(rd);
10e2d9: e9 46 92 ff ff jmp 107524 <free>
}
}
10e2de: 8b 5d fc mov -0x4(%ebp),%ebx <== NOT EXECUTED
10e2e1: c9 leave <== NOT EXECUTED
10e2e2: c3 ret <== NOT EXECUTED
0010f060 <ramdisk_initialize>:
rtems_device_driver
ramdisk_initialize(
rtems_device_major_number major,
rtems_device_minor_number minor __attribute__((unused)),
void *arg __attribute__((unused)))
{
10f060: 55 push %ebp
10f061: 89 e5 mov %esp,%ebp
10f063: 57 push %edi
10f064: 56 push %esi
10f065: 53 push %ebx
10f066: 83 ec 3c sub $0x3c,%esp
rtems_device_minor_number i;
rtems_ramdisk_config *c = rtems_ramdisk_configuration;
struct ramdisk *r;
rtems_status_code rc;
rc = rtems_disk_io_initialize();
10f069: e8 fa 84 ff ff call 107568 <rtems_disk_io_initialize>
if (rc != RTEMS_SUCCESSFUL)
10f06e: 85 c0 test %eax,%eax
10f070: 0f 85 e4 00 00 00 jne 10f15a <ramdisk_initialize+0xfa><== NEVER TAKEN
* This is allocating memory for a RAM disk which will persist for
* the life of the system. RTEMS has no "de-initialize" driver call
* so there is no corresponding free(r). Coverity is correct that
* it is never freed but this is not a problem.
*/
r = calloc(rtems_ramdisk_configuration_size, sizeof(struct ramdisk));
10f076: 52 push %edx
10f077: 52 push %edx
10f078: 6a 10 push $0x10
10f07a: ff 35 98 f2 12 00 pushl 0x12f298
10f080: e8 37 91 ff ff call 1081bc <calloc>
10f085: 89 c3 mov %eax,%ebx
r->trace = false;
10f087: c6 40 0e 00 movb $0x0,0xe(%eax)
for (i = 0; i < rtems_ramdisk_configuration_size; i++, c++, r++)
10f08b: 83 c4 10 add $0x10,%esp
rtems_device_major_number major,
rtems_device_minor_number minor __attribute__((unused)),
void *arg __attribute__((unused)))
{
rtems_device_minor_number i;
rtems_ramdisk_config *c = rtems_ramdisk_configuration;
10f08e: c7 45 cc 9c f2 12 00 movl $0x12f29c,-0x34(%ebp)
* so there is no corresponding free(r). Coverity is correct that
* it is never freed but this is not a problem.
*/
r = calloc(rtems_ramdisk_configuration_size, sizeof(struct ramdisk));
r->trace = false;
for (i = 0; i < rtems_ramdisk_configuration_size; i++, c++, r++)
10f095: c7 45 d0 00 00 00 00 movl $0x0,-0x30(%ebp)
{
dev_t dev = rtems_filesystem_make_dev_t(major, i);
char name [] = RAMDISK_DEVICE_BASE_NAME "a";
10f09c: 8d 45 df lea -0x21(%ebp),%eax
10f09f: 89 45 d4 mov %eax,-0x2c(%ebp)
* so there is no corresponding free(r). Coverity is correct that
* it is never freed but this is not a problem.
*/
r = calloc(rtems_ramdisk_configuration_size, sizeof(struct ramdisk));
r->trace = false;
for (i = 0; i < rtems_ramdisk_configuration_size; i++, c++, r++)
10f0a2: e9 a2 00 00 00 jmp 10f149 <ramdisk_initialize+0xe9>
10f0a7: 8b 55 08 mov 0x8(%ebp),%edx
10f0aa: 89 55 c0 mov %edx,-0x40(%ebp)
10f0ad: 8b 55 d0 mov -0x30(%ebp),%edx
10f0b0: 89 55 c4 mov %edx,-0x3c(%ebp)
{
dev_t dev = rtems_filesystem_make_dev_t(major, i);
char name [] = RAMDISK_DEVICE_BASE_NAME "a";
10f0b3: be 48 43 12 00 mov $0x124348,%esi
10f0b8: b9 09 00 00 00 mov $0x9,%ecx
10f0bd: 8b 7d d4 mov -0x2c(%ebp),%edi
10f0c0: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
name [sizeof(RAMDISK_DEVICE_BASE_NAME)] += i;
10f0c2: 88 55 e7 mov %dl,-0x19(%ebp)
r->block_size = c->block_size;
10f0c5: 8b 55 cc mov -0x34(%ebp),%edx
10f0c8: 8b 32 mov (%edx),%esi
10f0ca: 89 33 mov %esi,(%ebx)
r->block_num = c->block_num;
10f0cc: 8b 7a 04 mov 0x4(%edx),%edi
10f0cf: 89 7b 04 mov %edi,0x4(%ebx)
if (c->location == NULL)
10f0d2: 8b 42 08 mov 0x8(%edx),%eax
10f0d5: 85 c0 test %eax,%eax
10f0d7: 75 24 jne 10f0fd <ramdisk_initialize+0x9d><== NEVER TAKEN
{
r->malloced = true;
10f0d9: c6 43 0d 01 movb $0x1,0xd(%ebx)
r->area = malloc(r->block_size * r->block_num);
10f0dd: 83 ec 0c sub $0xc,%esp
10f0e0: 89 f8 mov %edi,%eax
10f0e2: 0f af c6 imul %esi,%eax
10f0e5: 50 push %eax
10f0e6: e8 55 98 ff ff call 108940 <malloc>
10f0eb: 89 43 08 mov %eax,0x8(%ebx)
if (r->area == NULL) /* No enough memory for this disk */
10f0ee: 83 c4 10 add $0x10,%esp
10f0f1: 85 c0 test %eax,%eax
10f0f3: 75 02 jne 10f0f7 <ramdisk_initialize+0x97><== ALWAYS TAKEN
10f0f5: eb 44 jmp 10f13b <ramdisk_initialize+0xdb><== NOT EXECUTED
r->initialized = false;
continue;
}
else
{
r->initialized = true;
10f0f7: c6 43 0c 01 movb $0x1,0xc(%ebx)
10f0fb: eb 0b jmp 10f108 <ramdisk_initialize+0xa8>
}
}
else
{
r->malloced = false;
10f0fd: c6 43 0d 00 movb $0x0,0xd(%ebx) <== NOT EXECUTED
r->initialized = true;
10f101: c6 43 0c 01 movb $0x1,0xc(%ebx) <== NOT EXECUTED
r->area = c->location;
10f105: 89 43 08 mov %eax,0x8(%ebx) <== NOT EXECUTED
}
rc = rtems_disk_create_phys(dev, c->block_size, c->block_num,
10f108: 50 push %eax
10f109: 8d 45 df lea -0x21(%ebp),%eax
10f10c: 50 push %eax
10f10d: 53 push %ebx
10f10e: 68 64 f1 10 00 push $0x10f164
10f113: 57 push %edi
10f114: 56 push %esi
10f115: ff 75 c4 pushl -0x3c(%ebp)
10f118: ff 75 c0 pushl -0x40(%ebp)
10f11b: e8 6f 82 ff ff call 10738f <rtems_disk_create_phys>
ramdisk_ioctl, r, name);
if (rc != RTEMS_SUCCESSFUL)
10f120: 83 c4 20 add $0x20,%esp
10f123: 85 c0 test %eax,%eax
10f125: 74 18 je 10f13f <ramdisk_initialize+0xdf><== ALWAYS TAKEN
{
if (r->malloced)
10f127: 80 7b 0d 00 cmpb $0x0,0xd(%ebx) <== NOT EXECUTED
10f12b: 74 0e je 10f13b <ramdisk_initialize+0xdb><== NOT EXECUTED
{
free(r->area);
10f12d: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10f130: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
10f133: e8 f0 92 ff ff call 108428 <free> <== NOT EXECUTED
10f138: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
r->initialized = false;
10f13b: c6 43 0c 00 movb $0x0,0xc(%ebx) <== NOT EXECUTED
* so there is no corresponding free(r). Coverity is correct that
* it is never freed but this is not a problem.
*/
r = calloc(rtems_ramdisk_configuration_size, sizeof(struct ramdisk));
r->trace = false;
for (i = 0; i < rtems_ramdisk_configuration_size; i++, c++, r++)
10f13f: ff 45 d0 incl -0x30(%ebp)
10f142: 83 45 cc 0c addl $0xc,-0x34(%ebp)
10f146: 83 c3 10 add $0x10,%ebx
10f149: 8b 55 d0 mov -0x30(%ebp),%edx
10f14c: 3b 15 98 f2 12 00 cmp 0x12f298,%edx
10f152: 0f 82 4f ff ff ff jb 10f0a7 <ramdisk_initialize+0x47>
free(r->area);
}
r->initialized = false;
}
}
return RTEMS_SUCCESSFUL;
10f158: 31 c0 xor %eax,%eax
}
10f15a: 8d 65 f4 lea -0xc(%ebp),%esp
10f15d: 5b pop %ebx
10f15e: 5e pop %esi
10f15f: 5f pop %edi
10f160: 5d pop %ebp
10f161: c3 ret
0010e140 <ramdisk_ioctl>:
return 0;
}
int
ramdisk_ioctl(rtems_disk_device *dd, uint32_t req, void *argp)
{
10e140: 55 push %ebp
10e141: 89 e5 mov %esp,%ebp
10e143: 57 push %edi
10e144: 56 push %esi
10e145: 53 push %ebx
10e146: 83 ec 1c sub $0x1c,%esp
10e149: 8b 55 08 mov 0x8(%ebp),%edx
10e14c: 8b 45 0c mov 0xc(%ebp),%eax
10e14f: 8b 5d 10 mov 0x10(%ebp),%ebx
break;
}
errno = EINVAL;
return -1;
}
10e152: 8b 4a 3c mov 0x3c(%edx),%ecx
10e155: 89 4d e4 mov %ecx,-0x1c(%ebp)
int
ramdisk_ioctl(rtems_disk_device *dd, uint32_t req, void *argp)
{
struct ramdisk *rd = rtems_disk_get_driver_data(dd);
switch (req)
10e158: 3d 07 42 00 20 cmp $0x20004207,%eax
10e15d: 0f 84 98 00 00 00 je 10e1fb <ramdisk_ioctl+0xbb>
10e163: 3d 01 42 18 c0 cmp $0xc0184201,%eax
10e168: 0f 85 a4 00 00 00 jne 10e212 <ramdisk_ioctl+0xd2>
{
case RTEMS_BLKIO_REQUEST:
{
rtems_blkdev_request *r = argp;
switch (r->req)
10e16e: 8b 03 mov (%ebx),%eax
10e170: 85 c0 test %eax,%eax
10e172: 74 09 je 10e17d <ramdisk_ioctl+0x3d>
10e174: 48 dec %eax
10e175: 0f 85 ac 00 00 00 jne 10e227 <ramdisk_ioctl+0xe7> <== NEVER TAKEN
10e17b: eb 2e jmp 10e1ab <ramdisk_ioctl+0x6b>
#endif
static int
ramdisk_read(struct ramdisk *rd, rtems_blkdev_request *req)
{
uint8_t *from = rd->area;
10e17d: 8b 45 e4 mov -0x1c(%ebp),%eax
10e180: 8b 40 08 mov 0x8(%eax),%eax
10e183: 89 45 dc mov %eax,-0x24(%ebp)
#if RTEMS_RAMDISK_TRACE
rtems_ramdisk_printf (rd, "ramdisk read: start=%d, blocks=%d",
req->bufs[0].block, req->bufnum);
#endif
for (i = 0, sg = req->bufs; i < req->bufnum; i++, sg++)
10e186: 8d 43 18 lea 0x18(%ebx),%eax
10e189: 31 d2 xor %edx,%edx
10e18b: eb 17 jmp 10e1a4 <ramdisk_ioctl+0x64>
#if RTEMS_RAMDISK_TRACE
rtems_ramdisk_printf (rd, "ramdisk read: buf=%d block=%d length=%d off=%d addr=%p",
i, sg->block, sg->length, sg->block * rd->block_size,
from + (sg->block * rd->block_size));
#endif
memcpy(sg->buffer, from + (sg->block * rd->block_size), sg->length);
10e18d: 8b 30 mov (%eax),%esi
10e18f: 8b 4d e4 mov -0x1c(%ebp),%ecx
10e192: 0f af 31 imul (%ecx),%esi
10e195: 03 75 dc add -0x24(%ebp),%esi
10e198: 8b 48 04 mov 0x4(%eax),%ecx
10e19b: 8b 78 08 mov 0x8(%eax),%edi
10e19e: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
#if RTEMS_RAMDISK_TRACE
rtems_ramdisk_printf (rd, "ramdisk read: start=%d, blocks=%d",
req->bufs[0].block, req->bufnum);
#endif
for (i = 0, sg = req->bufs; i < req->bufnum; i++, sg++)
10e1a0: 42 inc %edx
10e1a1: 83 c0 10 add $0x10,%eax
10e1a4: 3b 53 10 cmp 0x10(%ebx),%edx
10e1a7: 72 e4 jb 10e18d <ramdisk_ioctl+0x4d>
10e1a9: eb 38 jmp 10e1e3 <ramdisk_ioctl+0xa3>
}
static int
ramdisk_write(struct ramdisk *rd, rtems_blkdev_request *req)
{
uint8_t *to = rd->area;
10e1ab: 8b 45 e4 mov -0x1c(%ebp),%eax
10e1ae: 8b 40 08 mov 0x8(%eax),%eax
10e1b1: 89 45 dc mov %eax,-0x24(%ebp)
#if RTEMS_RAMDISK_TRACE
rtems_ramdisk_printf (rd, "ramdisk write: start=%d, blocks=%d",
req->bufs[0].block, req->bufnum);
#endif
for (i = 0, sg = req->bufs; i < req->bufnum; i++, sg++)
10e1b4: 8d 53 18 lea 0x18(%ebx),%edx
10e1b7: c7 45 e0 00 00 00 00 movl $0x0,-0x20(%ebp)
10e1be: eb 1b jmp 10e1db <ramdisk_ioctl+0x9b>
#if RTEMS_RAMDISK_TRACE
rtems_ramdisk_printf (rd, "ramdisk write: buf=%d block=%d length=%d off=%d addr=%p",
i, sg->block, sg->length, sg->block * rd->block_size,
to + (sg->block * rd->block_size));
#endif
memcpy(to + (sg->block * rd->block_size), sg->buffer, sg->length);
10e1c0: 8b 02 mov (%edx),%eax
10e1c2: 8b 4d e4 mov -0x1c(%ebp),%ecx
10e1c5: 0f af 01 imul (%ecx),%eax
10e1c8: 03 45 dc add -0x24(%ebp),%eax
10e1cb: 8b 72 08 mov 0x8(%edx),%esi
10e1ce: 8b 4a 04 mov 0x4(%edx),%ecx
10e1d1: 89 c7 mov %eax,%edi
10e1d3: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
#if RTEMS_RAMDISK_TRACE
rtems_ramdisk_printf (rd, "ramdisk write: start=%d, blocks=%d",
req->bufs[0].block, req->bufnum);
#endif
for (i = 0, sg = req->bufs; i < req->bufnum; i++, sg++)
10e1d5: ff 45 e0 incl -0x20(%ebp)
10e1d8: 83 c2 10 add $0x10,%edx
10e1db: 8b 45 e0 mov -0x20(%ebp),%eax
10e1de: 3b 43 10 cmp 0x10(%ebx),%eax
10e1e1: 72 dd jb 10e1c0 <ramdisk_ioctl+0x80>
i, sg->block, sg->length, sg->block * rd->block_size,
to + (sg->block * rd->block_size));
#endif
memcpy(to + (sg->block * rd->block_size), sg->buffer, sg->length);
}
req->status = RTEMS_SUCCESSFUL;
10e1e3: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx)
req->req_done(req->done_arg, RTEMS_SUCCESSFUL);
10e1ea: 50 push %eax
10e1eb: 50 push %eax
10e1ec: 6a 00 push $0x0
10e1ee: ff 73 08 pushl 0x8(%ebx)
10e1f1: ff 53 04 call *0x4(%ebx)
{
case RTEMS_BLKDEV_REQ_READ:
return ramdisk_read(rd, r);
case RTEMS_BLKDEV_REQ_WRITE:
return ramdisk_write(rd, r);
10e1f4: 83 c4 10 add $0x10,%esp
10e1f7: 31 c0 xor %eax,%eax
10e1f9: eb 3a jmp 10e235 <ramdisk_ioctl+0xf5>
}
break;
}
case RTEMS_BLKIO_DELETED:
if (rd->free_at_delete_request) {
10e1fb: 8b 45 e4 mov -0x1c(%ebp),%eax
10e1fe: 80 78 0f 00 cmpb $0x0,0xf(%eax)
10e202: 74 23 je 10e227 <ramdisk_ioctl+0xe7>
ramdisk_free(rd);
10e204: 83 ec 0c sub $0xc,%esp
10e207: 50 push %eax
10e208: e8 a5 00 00 00 call 10e2b2 <ramdisk_free>
10e20d: 83 c4 10 add $0x10,%esp
10e210: eb 15 jmp 10e227 <ramdisk_ioctl+0xe7>
}
break;
default:
return rtems_blkdev_ioctl (dd, req, argp);
10e212: 89 5d 10 mov %ebx,0x10(%ebp)
10e215: 89 45 0c mov %eax,0xc(%ebp)
10e218: 89 55 08 mov %edx,0x8(%ebp)
break;
}
errno = EINVAL;
return -1;
}
10e21b: 8d 65 f4 lea -0xc(%ebp),%esp
10e21e: 5b pop %ebx
10e21f: 5e pop %esi
10e220: 5f pop %edi
10e221: 5d pop %ebp
ramdisk_free(rd);
}
break;
default:
return rtems_blkdev_ioctl (dd, req, argp);
10e222: e9 61 1f 00 00 jmp 110188 <rtems_blkdev_ioctl>
break;
}
errno = EINVAL;
10e227: e8 f0 60 00 00 call 11431c <__errno>
10e22c: c7 00 16 00 00 00 movl $0x16,(%eax)
return -1;
10e232: 83 c8 ff or $0xffffffff,%eax
}
10e235: 8d 65 f4 lea -0xc(%ebp),%esp
10e238: 5b pop %ebx
10e239: 5e pop %esi
10e23a: 5f pop %edi
10e23b: 5d pop %ebp
10e23c: c3 ret
0010e2e4 <ramdisk_register>:
rtems_blkdev_bnum block_count,
bool trace,
const char *disk,
dev_t *dev_ptr
)
{
10e2e4: 55 push %ebp
10e2e5: 89 e5 mov %esp,%ebp
10e2e7: 57 push %edi
10e2e8: 56 push %esi
10e2e9: 53 push %ebx
10e2ea: 83 ec 30 sub $0x30,%esp
10e2ed: 8b 7d 10 mov 0x10(%ebp),%edi
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_device_major_number major = 0;
10e2f0: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
ramdisk *rd = NULL;
dev_t dev = 0;
sc = rtems_io_register_driver(0, &ramdisk_ops, &major);
10e2f7: 8d 45 e4 lea -0x1c(%ebp),%eax
10e2fa: 50 push %eax
10e2fb: 68 04 32 12 00 push $0x123204
10e300: 6a 00 push $0x0
10e302: e8 c1 d0 ff ff call 10b3c8 <rtems_io_register_driver>
if (sc != RTEMS_SUCCESSFUL) {
10e307: 83 c4 10 add $0x10,%esp
return RTEMS_UNSATISFIED;
10e30a: bb 0d 00 00 00 mov $0xd,%ebx
rtems_device_major_number major = 0;
ramdisk *rd = NULL;
dev_t dev = 0;
sc = rtems_io_register_driver(0, &ramdisk_ops, &major);
if (sc != RTEMS_SUCCESSFUL) {
10e30f: 85 c0 test %eax,%eax
10e311: 75 6a jne 10e37d <ramdisk_register+0x99> <== NEVER TAKEN
return RTEMS_UNSATISFIED;
}
rd = ramdisk_allocate(NULL, block_size, block_count, trace);
10e313: 81 e7 ff 00 00 00 and $0xff,%edi
10e319: 57 push %edi
10e31a: ff 75 0c pushl 0xc(%ebp)
10e31d: ff 75 08 pushl 0x8(%ebp)
10e320: 6a 00 push $0x0
10e322: e8 19 ff ff ff call 10e240 <ramdisk_allocate>
if (rd == NULL) {
10e327: 83 c4 10 add $0x10,%esp
10e32a: 85 c0 test %eax,%eax
10e32c: 75 05 jne 10e333 <ramdisk_register+0x4f> <== ALWAYS TAKEN
rtems_io_unregister_driver(major);
10e32e: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10e331: eb 33 jmp 10e366 <ramdisk_register+0x82> <== NOT EXECUTED
{
union __rtems_dev_t temp;
temp.__overlay.major = _major;
temp.__overlay.minor = _minor;
return temp.device;
10e333: 8b 75 e4 mov -0x1c(%ebp),%esi
10e336: 31 ff xor %edi,%edi
return RTEMS_UNSATISFIED;
}
dev = rtems_filesystem_make_dev_t(major, 0);
sc = rtems_disk_create_phys(
10e338: 51 push %ecx
10e339: ff 75 14 pushl 0x14(%ebp)
10e33c: 50 push %eax
10e33d: 68 40 e1 10 00 push $0x10e140
10e342: ff 75 0c pushl 0xc(%ebp)
10e345: ff 75 08 pushl 0x8(%ebp)
10e348: 57 push %edi
10e349: 56 push %esi
10e34a: 89 45 d4 mov %eax,-0x2c(%ebp)
10e34d: e8 91 86 ff ff call 1069e3 <rtems_disk_create_phys>
block_count,
ramdisk_ioctl,
rd,
disk
);
if (sc != RTEMS_SUCCESSFUL) {
10e352: 83 c4 20 add $0x20,%esp
10e355: 85 c0 test %eax,%eax
10e357: 8b 55 d4 mov -0x2c(%ebp),%edx
10e35a: 74 17 je 10e373 <ramdisk_register+0x8f> <== ALWAYS TAKEN
ramdisk_free(rd);
10e35c: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10e35f: 52 push %edx <== NOT EXECUTED
10e360: e8 4d ff ff ff call 10e2b2 <ramdisk_free> <== NOT EXECUTED
rtems_io_unregister_driver(major);
10e365: 58 pop %eax <== NOT EXECUTED
10e366: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
10e369: e8 72 d1 ff ff call 10b4e0 <rtems_io_unregister_driver><== NOT EXECUTED
10e36e: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
10e371: eb 0a jmp 10e37d <ramdisk_register+0x99> <== NOT EXECUTED
return RTEMS_UNSATISFIED;
}
*dev_ptr = dev;
10e373: 8b 45 18 mov 0x18(%ebp),%eax
10e376: 89 30 mov %esi,(%eax)
10e378: 89 78 04 mov %edi,0x4(%eax)
return RTEMS_SUCCESSFUL;
10e37b: 31 db xor %ebx,%ebx
}
10e37d: 89 d8 mov %ebx,%eax
10e37f: 8d 65 f4 lea -0xc(%ebp),%esp
10e382: 5b pop %ebx
10e383: 5e pop %esi
10e384: 5f pop %edi
10e385: 5d pop %ebp
10e386: c3 ret
0011d844 <read>:
ssize_t read(
int fd,
void *buffer,
size_t count
)
{
11d844: 55 push %ebp
11d845: 89 e5 mov %esp,%ebp
11d847: 53 push %ebx
11d848: 53 push %ebx
11d849: 8b 45 08 mov 0x8(%ebp),%eax
11d84c: 8b 55 0c mov 0xc(%ebp),%edx
11d84f: 8b 4d 10 mov 0x10(%ebp),%ecx
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
11d852: 3b 05 70 a2 12 00 cmp 0x12a270,%eax
11d858: 72 02 jb 11d85c <read+0x18>
11d85a: eb 2d jmp 11d889 <read+0x45>
iop = rtems_libio_iop( fd );
11d85c: 6b c0 30 imul $0x30,%eax,%eax
11d85f: 03 05 d0 e2 12 00 add 0x12e2d0,%eax
rtems_libio_check_is_open( iop );
11d865: 8b 58 0c mov 0xc(%eax),%ebx
11d868: f6 c7 01 test $0x1,%bh
11d86b: 75 02 jne 11d86f <read+0x2b>
11d86d: eb 1a jmp 11d889 <read+0x45>
rtems_libio_check_buffer( buffer );
11d86f: 85 d2 test %edx,%edx
11d871: 75 0d jne 11d880 <read+0x3c> <== ALWAYS TAKEN
11d873: e8 64 36 ff ff call 110edc <__errno> <== NOT EXECUTED
11d878: c7 00 16 00 00 00 movl $0x16,(%eax) <== NOT EXECUTED
11d87e: eb 14 jmp 11d894 <read+0x50> <== NOT EXECUTED
rtems_libio_check_count( count );
11d880: 85 c9 test %ecx,%ecx
11d882: 74 29 je 11d8ad <read+0x69>
rtems_libio_check_permissions_with_error( iop, LIBIO_FLAGS_READ, EBADF );
11d884: 80 e3 02 and $0x2,%bl
11d887: 75 10 jne 11d899 <read+0x55>
11d889: e8 4e 36 ff ff call 110edc <__errno>
11d88e: c7 00 09 00 00 00 movl $0x9,(%eax)
11d894: 83 c8 ff or $0xffffffff,%eax
11d897: eb 16 jmp 11d8af <read+0x6b>
/*
* Now process the read().
*/
return (*iop->pathinfo.handlers->read_h)( iop, buffer, count );
11d899: 8b 58 20 mov 0x20(%eax),%ebx
11d89c: 89 4d 10 mov %ecx,0x10(%ebp)
11d89f: 89 55 0c mov %edx,0xc(%ebp)
11d8a2: 89 45 08 mov %eax,0x8(%ebp)
11d8a5: 8b 43 08 mov 0x8(%ebx),%eax
}
11d8a8: 59 pop %ecx
11d8a9: 5b pop %ebx
11d8aa: 5d pop %ebp
rtems_libio_check_permissions_with_error( iop, LIBIO_FLAGS_READ, EBADF );
/*
* Now process the read().
*/
return (*iop->pathinfo.handlers->read_h)( iop, buffer, count );
11d8ab: ff e0 jmp *%eax
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open( iop );
rtems_libio_check_buffer( buffer );
rtems_libio_check_count( count );
11d8ad: 31 c0 xor %eax,%eax
/*
* Now process the read().
*/
return (*iop->pathinfo.handlers->read_h)( iop, buffer, count );
}
11d8af: 5a pop %edx
11d8b0: 5b pop %ebx
11d8b1: 5d pop %ebp
11d8b2: c3 ret
001077e6 <read_extended_partition>:
* RTEMS_NO_MEMOTY if cannot allocate memory for part_desc_t strucure,
* RTEMS_INTERNAL_ERROR if other error occurs.
*/
static rtems_status_code
read_extended_partition(int fd, uint32_t start, rtems_part_desc_t *ext_part)
{
1077e6: 55 push %ebp
1077e7: 89 e5 mov %esp,%ebp
1077e9: 57 push %edi
1077ea: 56 push %esi
1077eb: 53 push %ebx
1077ec: 83 ec 3c sub $0x3c,%esp
1077ef: 89 45 cc mov %eax,-0x34(%ebp)
1077f2: 89 55 c8 mov %edx,-0x38(%ebp)
1077f5: 89 ce mov %ecx,%esi
int i;
rtems_sector_data_t *sector = NULL;
1077f7: c7 45 e0 00 00 00 00 movl $0x0,-0x20(%ebp)
rtems_part_desc_t *new_part_desc;
rtems_status_code rc;
if ((ext_part == NULL) || (ext_part->disk_desc == NULL))
{
return RTEMS_INTERNAL_ERROR;
1077fe: bb 19 00 00 00 mov $0x19,%ebx
uint32_t here;
uint8_t *data;
rtems_part_desc_t *new_part_desc;
rtems_status_code rc;
if ((ext_part == NULL) || (ext_part->disk_desc == NULL))
107803: 85 c9 test %ecx,%ecx
107805: 0f 84 29 01 00 00 je 107934 <read_extended_partition+0x14e><== NEVER TAKEN
10780b: 83 79 10 00 cmpl $0x0,0x10(%ecx)
10780f: 0f 84 1f 01 00 00 je 107934 <read_extended_partition+0x14e><== NEVER TAKEN
{
return RTEMS_INTERNAL_ERROR;
}
/* get start sector of current extended partition */
here = ext_part->start;
107815: 8b 41 04 mov 0x4(%ecx),%eax
107818: 89 45 d4 mov %eax,-0x2c(%ebp)
if (sector == NULL)
{
return RTEMS_INTERNAL_ERROR;
}
off = sector_num * RTEMS_IDE_SECTOR_SIZE;
10781b: 89 c3 mov %eax,%ebx
10781d: c1 e3 09 shl $0x9,%ebx
107820: 31 d2 xor %edx,%edx
new_off = lseek(fd, off, SEEK_SET);
107822: 6a 00 push $0x0
107824: 52 push %edx
107825: 53 push %ebx
107826: ff 75 cc pushl -0x34(%ebp)
107829: e8 6e 0f 00 00 call 10879c <lseek>
if (new_off != off) {
10782e: 83 c4 10 add $0x10,%esp
107831: 85 d2 test %edx,%edx
107833: 75 1a jne 10784f <read_extended_partition+0x69><== NEVER TAKEN
107835: 39 d8 cmp %ebx,%eax
107837: 75 16 jne 10784f <read_extended_partition+0x69><== NEVER TAKEN
107839: 8d 4d e0 lea -0x20(%ebp),%ecx
10783c: 8b 55 d4 mov -0x2c(%ebp),%edx
10783f: 8b 45 cc mov -0x34(%ebp),%eax
107842: e8 b5 fe ff ff call 1076fc <get_sector.part.0>
107847: 89 c3 mov %eax,%ebx
here = ext_part->start;
/* get first extended partition sector */
rc = get_sector(fd, here, §or);
if (rc != RTEMS_SUCCESSFUL)
107849: 85 c0 test %eax,%eax
10784b: 74 18 je 107865 <read_extended_partition+0x7f><== ALWAYS TAKEN
10784d: eb 05 jmp 107854 <read_extended_partition+0x6e><== NOT EXECUTED
}
off = sector_num * RTEMS_IDE_SECTOR_SIZE;
new_off = lseek(fd, off, SEEK_SET);
if (new_off != off) {
return RTEMS_IO_ERROR;
10784f: bb 1b 00 00 00 mov $0x1b,%ebx <== NOT EXECUTED
/* get first extended partition sector */
rc = get_sector(fd, here, §or);
if (rc != RTEMS_SUCCESSFUL)
{
if (sector)
107854: 8b 45 e0 mov -0x20(%ebp),%eax <== NOT EXECUTED
107857: 85 c0 test %eax,%eax <== NOT EXECUTED
107859: 0f 84 d5 00 00 00 je 107934 <read_extended_partition+0x14e><== NOT EXECUTED
free(sector);
10785f: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
107862: 50 push %eax <== NOT EXECUTED
107863: eb 5e jmp 1078c3 <read_extended_partition+0xdd><== NOT EXECUTED
return rc;
}
if (!msdos_signature_check(sector))
107865: 8b 45 e0 mov -0x20(%ebp),%eax
static bool
msdos_signature_check (rtems_sector_data_t *sector)
{
uint8_t *p = sector->data + RTEMS_IDE_PARTITION_MSDOS_SIGNATURE_OFFSET;
return ((p[0] == RTEMS_IDE_PARTITION_MSDOS_SIGNATURE_DATA1) &&
107868: 31 d2 xor %edx,%edx
10786a: 80 b8 02 02 00 00 55 cmpb $0x55,0x202(%eax)
107871: 75 0c jne 10787f <read_extended_partition+0x99><== NEVER TAKEN
107873: 31 d2 xor %edx,%edx
107875: 80 b8 03 02 00 00 aa cmpb $0xaa,0x203(%eax)
10787c: 0f 94 c2 sete %dl
if (sector)
free(sector);
return rc;
}
if (!msdos_signature_check(sector))
10787f: 85 d2 test %edx,%edx
107881: 75 16 jne 107899 <read_extended_partition+0xb3><== ALWAYS TAKEN
{
free(sector);
107883: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
107886: 50 push %eax <== NOT EXECUTED
107887: e8 9c 0b 00 00 call 108428 <free> <== NOT EXECUTED
10788c: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
return RTEMS_INTERNAL_ERROR;
10788f: bb 19 00 00 00 mov $0x19,%ebx <== NOT EXECUTED
107894: e9 9b 00 00 00 jmp 107934 <read_extended_partition+0x14e><== NOT EXECUTED
* RTEMS_SUCCESSFUL if success,
* RTEMS_NO_MEMOTY if cannot allocate memory for part_desc_t strucure,
* RTEMS_INTERNAL_ERROR if other error occurs.
*/
static rtems_status_code
read_extended_partition(int fd, uint32_t start, rtems_part_desc_t *ext_part)
107899: 05 d2 01 00 00 add $0x1d2,%eax
10789e: 89 45 d0 mov %eax,-0x30(%ebp)
1078a1: 89 f7 mov %esi,%edi
1078a3: 8d 46 10 lea 0x10(%esi),%eax
1078a6: 89 45 c4 mov %eax,-0x3c(%ebp)
1078a9: 8b 45 d0 mov -0x30(%ebp),%eax
1078ac: 83 e8 10 sub $0x10,%eax
1078af: 8d 55 e4 lea -0x1c(%ebp),%edx
1078b2: e8 af fe ff ff call 107766 <data_to_part_desc.part.1>
1078b7: 89 c3 mov %eax,%ebx
{
/* if data_to_part_desc fails skip this partition
* and parse the next one
*/
rc = data_to_part_desc(data, &new_part_desc);
if (rc != RTEMS_SUCCESSFUL)
1078b9: 85 c0 test %eax,%eax
1078bb: 74 10 je 1078cd <read_extended_partition+0xe7><== ALWAYS TAKEN
{
free(sector);
1078bd: 83 ec 0c sub $0xc,%esp
1078c0: ff 75 e0 pushl -0x20(%ebp)
1078c3: e8 60 0b 00 00 call 108428 <free>
1078c8: 83 c4 10 add $0x10,%esp
1078cb: eb 67 jmp 107934 <read_extended_partition+0x14e>
return rc;
}
if (new_part_desc == NULL)
1078cd: 8b 4d e4 mov -0x1c(%ebp),%ecx
1078d0: 85 c9 test %ecx,%ecx
1078d2: 74 4e je 107922 <read_extended_partition+0x13c>
{
data += RTEMS_IDE_PARTITION_DESCRIPTOR_SIZE;
continue;
}
ext_part->sub_part[i] = new_part_desc;
1078d4: 89 4f 18 mov %ecx,0x18(%edi)
new_part_desc->ext_part = ext_part;
1078d7: 89 71 14 mov %esi,0x14(%ecx)
new_part_desc->disk_desc = ext_part->disk_desc;
1078da: 8b 46 10 mov 0x10(%esi),%eax
1078dd: 89 41 10 mov %eax,0x10(%ecx)
* true if partition type is extended, false otherwise
*/
static bool
is_extended(uint8_t type)
{
return ((type == EXTENDED_PARTITION) || (type == LINUX_EXTENDED));
1078e0: 8a 51 01 mov 0x1(%ecx),%dl
1078e3: 83 e2 7f and $0x7f,%edx
ext_part->sub_part[i] = new_part_desc;
new_part_desc->ext_part = ext_part;
new_part_desc->disk_desc = ext_part->disk_desc;
if (is_extended(new_part_desc->sys_type))
1078e6: 80 fa 05 cmp $0x5,%dl
1078e9: 75 16 jne 107901 <read_extended_partition+0x11b>
{
new_part_desc->log_id = EMPTY_PARTITION;
1078eb: c6 41 02 00 movb $0x0,0x2(%ecx)
new_part_desc->start += start;
1078ef: 8b 45 c8 mov -0x38(%ebp),%eax
1078f2: 01 41 04 add %eax,0x4(%ecx)
read_extended_partition(fd, start, new_part_desc);
1078f5: 89 c2 mov %eax,%edx
1078f7: 8b 45 cc mov -0x34(%ebp),%eax
1078fa: e8 e7 fe ff ff call 1077e6 <read_extended_partition>
1078ff: eb 21 jmp 107922 <read_extended_partition+0x13c>
}
else
{
rtems_disk_desc_t *disk_desc = new_part_desc->disk_desc;
disk_desc->partitions[disk_desc->last_log_id] = new_part_desc;
107901: 8b 50 24 mov 0x24(%eax),%edx
107904: 89 4c 90 28 mov %ecx,0x28(%eax,%edx,4)
new_part_desc->log_id = ++disk_desc->last_log_id;
107908: 42 inc %edx
107909: 89 50 24 mov %edx,0x24(%eax)
10790c: 88 51 02 mov %dl,0x2(%ecx)
new_part_desc->start += here;
10790f: 8b 45 d4 mov -0x2c(%ebp),%eax
107912: 03 41 04 add 0x4(%ecx),%eax
107915: 89 41 04 mov %eax,0x4(%ecx)
new_part_desc->end = new_part_desc->start + new_part_desc->size - 1;
107918: 8b 51 08 mov 0x8(%ecx),%edx
10791b: 8d 44 10 ff lea -0x1(%eax,%edx,1),%eax
10791f: 89 41 0c mov %eax,0xc(%ecx)
107922: 83 45 d0 10 addl $0x10,-0x30(%ebp)
107926: 83 c7 04 add $0x4,%edi
/* read and process up to 4 logical partition descriptors */
data = sector->data + RTEMS_IDE_PARTITION_TABLE_OFFSET;
for (i = 0; i < RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER; i++)
107929: 3b 7d c4 cmp -0x3c(%ebp),%edi
10792c: 0f 85 77 ff ff ff jne 1078a9 <read_extended_partition+0xc3>
107932: eb 89 jmp 1078bd <read_extended_partition+0xd7>
}
free(sector);
return RTEMS_SUCCESSFUL;
}
107934: 89 d8 mov %ebx,%eax
107936: 8d 65 f4 lea -0xc(%ebp),%esp
107939: 5b pop %ebx
10793a: 5e pop %esi
10793b: 5f pop %edi
10793c: 5d pop %ebp
10793d: c3 ret
00107d9c <readv>:
ssize_t readv(
int fd,
const struct iovec *iov,
int iovcnt
)
{
107d9c: 55 push %ebp
107d9d: 89 e5 mov %esp,%ebp
107d9f: 57 push %edi
107da0: 56 push %esi
107da1: 53 push %ebx
107da2: 83 ec 1c sub $0x1c,%esp
107da5: 8b 75 08 mov 0x8(%ebp),%esi
107da8: 8b 5d 0c mov 0xc(%ebp),%ebx
107dab: 8b 45 10 mov 0x10(%ebp),%eax
int v;
int bytes;
rtems_libio_t *iop;
bool all_zeros;
rtems_libio_check_fd( fd );
107dae: 3b 35 70 a2 12 00 cmp 0x12a270,%esi
107db4: 72 02 jb 107db8 <readv+0x1c>
107db6: eb 18 jmp 107dd0 <readv+0x34>
iop = rtems_libio_iop( fd );
107db8: 6b f6 30 imul $0x30,%esi,%esi
107dbb: 03 35 d0 e2 12 00 add 0x12e2d0,%esi
rtems_libio_check_is_open( iop );
107dc1: 8b 56 0c mov 0xc(%esi),%edx
107dc4: f6 c6 01 test $0x1,%dh
107dc7: 75 02 jne 107dcb <readv+0x2f>
107dc9: eb 05 jmp 107dd0 <readv+0x34>
rtems_libio_check_permissions_with_error( iop, LIBIO_FLAGS_READ, EBADF );
107dcb: 80 e2 02 and $0x2,%dl
107dce: 75 10 jne 107de0 <readv+0x44> <== ALWAYS TAKEN
107dd0: e8 ff 99 00 00 call 1117d4 <__errno>
107dd5: c7 00 09 00 00 00 movl $0x9,(%eax)
107ddb: e9 8b 00 00 00 jmp 107e6b <readv+0xcf>
/*
* Argument validation on IO vector
*/
if ( !iov )
107de0: 85 db test %ebx,%ebx
107de2: 75 02 jne 107de6 <readv+0x4a>
107de4: eb 36 jmp 107e1c <readv+0x80>
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iovcnt <= 0 )
107de6: 85 c0 test %eax,%eax
107de8: 7f 02 jg 107dec <readv+0x50>
107dea: eb 30 jmp 107e1c <readv+0x80>
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iovcnt > IOV_MAX )
107dec: 3d 00 04 00 00 cmp $0x400,%eax
107df1: 7e 02 jle 107df5 <readv+0x59> <== ALWAYS TAKEN
107df3: eb 27 jmp 107e1c <readv+0x80> <== NOT EXECUTED
#include <sys/uio.h>
#include <rtems/libio_.h>
#include <rtems/seterr.h>
ssize_t readv(
107df5: 8d 04 c3 lea (%ebx,%eax,8),%eax
107df8: 89 45 e0 mov %eax,-0x20(%ebp)
107dfb: 89 d8 mov %ebx,%eax
107dfd: c6 45 df 01 movb $0x1,-0x21(%ebp)
107e01: 31 d2 xor %edx,%edx
107e03: eb 03 jmp 107e08 <readv+0x6c>
if ( iov[v].iov_base == 0 )
rtems_set_errno_and_return_minus_one( EINVAL );
/* check for wrap */
old = total;
total += iov[v].iov_len;
107e05: 8b 55 e4 mov -0x1c(%ebp),%edx
/*
* iov[v].iov_len cannot be less than 0 because size_t is unsigned.
* So we only check for zero.
*/
if ( iov[v].iov_base == 0 )
107e08: 83 38 00 cmpl $0x0,(%eax)
107e0b: 75 02 jne 107e0f <readv+0x73>
107e0d: eb 0d jmp 107e1c <readv+0x80>
rtems_set_errno_and_return_minus_one( EINVAL );
/* check for wrap */
old = total;
total += iov[v].iov_len;
107e0f: 8b 78 04 mov 0x4(%eax),%edi
107e12: 8d 0c 17 lea (%edi,%edx,1),%ecx
107e15: 89 4d e4 mov %ecx,-0x1c(%ebp)
if ( total < old )
107e18: 39 d1 cmp %edx,%ecx
107e1a: 7d 0d jge 107e29 <readv+0x8d>
rtems_set_errno_and_return_minus_one( EINVAL );
107e1c: e8 b3 99 00 00 call 1117d4 <__errno>
107e21: c7 00 16 00 00 00 movl $0x16,(%eax)
107e27: eb 42 jmp 107e6b <readv+0xcf>
if ( iov[v].iov_len )
all_zeros = false;
107e29: 85 ff test %edi,%edi
107e2b: 0f 94 c2 sete %dl
107e2e: f7 da neg %edx
107e30: 20 55 df and %dl,-0x21(%ebp)
107e33: 83 c0 08 add $0x8,%eax
* are obvious errors in the iovec. So this extra loop ensures
* that we do not do anything if there is an argument error.
*/
all_zeros = true;
for ( total=0, v=0 ; v < iovcnt ; v++ ) {
107e36: 3b 45 e0 cmp -0x20(%ebp),%eax
107e39: 75 ca jne 107e05 <readv+0x69>
* A readv with all zeros logically has no effect. Even though
* OpenGroup didn't address this case as they did with writev(),
* we will handle it the same way for symmetry.
*/
if ( all_zeros == true ) {
return 0;
107e3b: 31 ff xor %edi,%edi
/*
* A readv with all zeros logically has no effect. Even though
* OpenGroup didn't address this case as they did with writev(),
* we will handle it the same way for symmetry.
*/
if ( all_zeros == true ) {
107e3d: 80 7d df 00 cmpb $0x0,-0x21(%ebp)
107e41: 75 2b jne 107e6e <readv+0xd2>
/*
* Now process the readv().
*/
for ( total=0, v=0 ; v < iovcnt ; v++ ) {
bytes = (*iop->pathinfo.handlers->read_h)(
107e43: 50 push %eax
107e44: 8b 46 20 mov 0x20(%esi),%eax
107e47: ff 73 04 pushl 0x4(%ebx)
107e4a: ff 33 pushl (%ebx)
107e4c: 56 push %esi
107e4d: ff 50 08 call *0x8(%eax)
iop,
iov[v].iov_base,
iov[v].iov_len
);
if ( bytes < 0 )
107e50: 83 c4 10 add $0x10,%esp
107e53: 83 f8 00 cmp $0x0,%eax
107e56: 7c 13 jl 107e6b <readv+0xcf> <== NEVER TAKEN
return -1;
if ( bytes > 0 ) {
107e58: 74 02 je 107e5c <readv+0xc0> <== NEVER TAKEN
total += bytes;
107e5a: 01 c7 add %eax,%edi
}
if (bytes != iov[ v ].iov_len)
107e5c: 3b 43 04 cmp 0x4(%ebx),%eax
107e5f: 75 0d jne 107e6e <readv+0xd2> <== NEVER TAKEN
107e61: 83 c3 08 add $0x8,%ebx
}
/*
* Now process the readv().
*/
for ( total=0, v=0 ; v < iovcnt ; v++ ) {
107e64: 3b 5d e0 cmp -0x20(%ebp),%ebx
107e67: 75 da jne 107e43 <readv+0xa7>
107e69: eb 03 jmp 107e6e <readv+0xd2>
iov[v].iov_base,
iov[v].iov_len
);
if ( bytes < 0 )
return -1;
107e6b: 83 cf ff or $0xffffffff,%edi
if (bytes != iov[ v ].iov_len)
break;
}
return total;
}
107e6e: 89 f8 mov %edi,%eax
107e70: 8d 65 f4 lea -0xc(%ebp),%esp
107e73: 5b pop %ebx
107e74: 5e pop %esi
107e75: 5f pop %edi
107e76: 5d pop %ebp
107e77: c3 ret
00107454 <realloc>:
void *realloc(
void *ptr,
size_t size
)
{
107454: 55 push %ebp
107455: 89 e5 mov %esp,%ebp
107457: 57 push %edi
107458: 56 push %esi
107459: 53 push %ebx
10745a: 83 ec 2c sub $0x2c,%esp
10745d: 8b 5d 08 mov 0x8(%ebp),%ebx
107460: 8b 75 0c mov 0xc(%ebp),%esi
uintptr_t old_size;
char *new_area;
MSBUMP(realloc_calls, 1);
107463: ff 05 f8 e2 12 00 incl 0x12e2f8
/*
* Do not attempt to allocate memory if in a critical section or ISR.
*/
if (_System_state_Is_up(_System_state_Get())) {
107469: 83 3d 20 e5 12 00 03 cmpl $0x3,0x12e520
107470: 75 0f jne 107481 <realloc+0x2d>
* This routine returns true if thread dispatch indicates
* that we are in a critical section.
*/
RTEMS_INLINE_ROUTINE bool _Thread_Dispatch_in_critical_section(void)
{
if ( _Thread_Dispatch_disable_level == 0 )
107472: a1 e4 e3 12 00 mov 0x12e3e4,%eax
107477: 85 c0 test %eax,%eax
107479: 0f 84 a0 00 00 00 je 10751f <realloc+0xcb> <== ALWAYS TAKEN
10747f: eb 48 jmp 1074c9 <realloc+0x75> <== NOT EXECUTED
}
/*
* Continue with realloc().
*/
if ( !ptr )
107481: 85 db test %ebx,%ebx
107483: 75 0f jne 107494 <realloc+0x40>
return malloc( size );
107485: 89 75 08 mov %esi,0x8(%ebp)
memcpy( new_area, ptr, (size < old_size) ? size : old_size );
free( ptr );
return new_area;
}
107488: 8d 65 f4 lea -0xc(%ebp),%esp
10748b: 5b pop %ebx
10748c: 5e pop %esi
10748d: 5f pop %edi
10748e: 5d pop %ebp
/*
* Continue with realloc().
*/
if ( !ptr )
return malloc( size );
10748f: e9 60 f5 ff ff jmp 1069f4 <malloc>
if ( !size ) {
107494: 85 f6 test %esi,%esi
107496: 75 0e jne 1074a6 <realloc+0x52> <== ALWAYS TAKEN
free( ptr );
107498: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10749b: 53 push %ebx <== NOT EXECUTED
10749c: e8 93 f2 ff ff call 106734 <free> <== NOT EXECUTED
1074a1: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
1074a4: eb 23 jmp 1074c9 <realloc+0x75> <== NOT EXECUTED
return (void *) 0;
}
if ( !_Protected_heap_Get_block_size(RTEMS_Malloc_Heap, ptr, &old_size) ) {
1074a6: 52 push %edx
1074a7: 8d 45 e4 lea -0x1c(%ebp),%eax
1074aa: 50 push %eax
1074ab: 53 push %ebx
1074ac: ff 35 2c a2 12 00 pushl 0x12a22c
1074b2: e8 89 40 00 00 call 10b540 <_Protected_heap_Get_block_size>
1074b7: 83 c4 10 add $0x10,%esp
1074ba: 84 c0 test %al,%al
1074bc: 75 0f jne 1074cd <realloc+0x79>
errno = EINVAL;
1074be: e8 19 9a 00 00 call 110edc <__errno>
1074c3: c7 00 16 00 00 00 movl $0x16,(%eax)
return (void *) 0;
1074c9: 31 db xor %ebx,%ebx
1074cb: eb 61 jmp 10752e <realloc+0xda>
}
/*
* Now resize it.
*/
if ( _Protected_heap_Resize_block( RTEMS_Malloc_Heap, ptr, size ) ) {
1074cd: 50 push %eax
1074ce: 56 push %esi
1074cf: 53 push %ebx
1074d0: ff 35 2c a2 12 00 pushl 0x12a22c
1074d6: e8 a9 40 00 00 call 10b584 <_Protected_heap_Resize_block>
1074db: 83 c4 10 add $0x10,%esp
1074de: 84 c0 test %al,%al
1074e0: 75 4c jne 10752e <realloc+0xda>
* There used to be a free on this error case but it is wrong to
* free the memory per OpenGroup Single UNIX Specification V2
* and the C Standard.
*/
new_area = malloc( size );
1074e2: 83 ec 0c sub $0xc,%esp
1074e5: 56 push %esi
1074e6: e8 09 f5 ff ff call 1069f4 <malloc>
MSBUMP(malloc_calls, (uint32_t) -1); /* subtract off the malloc */
1074eb: ff 0d ec e2 12 00 decl 0x12e2ec
if ( !new_area ) {
1074f1: 83 c4 10 add $0x10,%esp
1074f4: 85 c0 test %eax,%eax
1074f6: 74 d1 je 1074c9 <realloc+0x75>
return (void *) 0;
}
memcpy( new_area, ptr, (size < old_size) ? size : old_size );
1074f8: 8b 55 e4 mov -0x1c(%ebp),%edx
1074fb: 89 f1 mov %esi,%ecx
1074fd: 39 d6 cmp %edx,%esi
1074ff: 76 02 jbe 107503 <realloc+0xaf> <== NEVER TAKEN
107501: 89 d1 mov %edx,%ecx
107503: 89 c7 mov %eax,%edi
107505: 89 de mov %ebx,%esi
107507: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
free( ptr );
107509: 83 ec 0c sub $0xc,%esp
10750c: 53 push %ebx
10750d: 89 45 d4 mov %eax,-0x2c(%ebp)
107510: e8 1f f2 ff ff call 106734 <free>
107515: 83 c4 10 add $0x10,%esp
107518: 8b 45 d4 mov -0x2c(%ebp),%eax
10751b: 89 c3 mov %eax,%ebx
10751d: eb 0f jmp 10752e <realloc+0xda>
if (_System_state_Is_up(_System_state_Get())) {
if (_Thread_Dispatch_in_critical_section())
return (void *) 0;
if (_ISR_Nest_level > 0)
10751f: 83 3d e8 e8 12 00 00 cmpl $0x0,0x12e8e8
107526: 0f 84 55 ff ff ff je 107481 <realloc+0x2d> <== ALWAYS TAKEN
10752c: eb 9b jmp 1074c9 <realloc+0x75> <== NOT EXECUTED
memcpy( new_area, ptr, (size < old_size) ? size : old_size );
free( ptr );
return new_area;
}
10752e: 89 d8 mov %ebx,%eax
107530: 8d 65 f4 lea -0xc(%ebp),%esp
107533: 5b pop %ebx
107534: 5e pop %esi
107535: 5f pop %edi
107536: 5d pop %ebp
107537: c3 ret
0010a4fa <rtems_aio_enqueue>:
* errno - otherwise
*/
int
rtems_aio_enqueue (rtems_aio_request *req)
{
10a4fa: 55 push %ebp
10a4fb: 89 e5 mov %esp,%ebp
10a4fd: 57 push %edi
10a4fe: 56 push %esi
10a4ff: 53 push %ebx
10a500: 83 ec 58 sub $0x58,%esp
10a503: 8b 5d 08 mov 0x8(%ebp),%ebx
struct sched_param param;
/* The queue should be initialized */
AIO_assert (aio_request_queue.initialized == AIO_QUEUE_INITIALIZED);
result = pthread_mutex_lock (&aio_request_queue.mutex);
10a506: 68 08 03 13 00 push $0x130308
10a50b: e8 f8 08 00 00 call 10ae08 <pthread_mutex_lock>
10a510: 89 c7 mov %eax,%edi
if (result != 0) {
10a512: 83 c4 10 add $0x10,%esp
10a515: 85 c0 test %eax,%eax
10a517: 74 0e je 10a527 <rtems_aio_enqueue+0x2d><== ALWAYS TAKEN
free (req);
10a519: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10a51c: 53 push %ebx <== NOT EXECUTED
10a51d: e8 36 c6 ff ff call 106b58 <free> <== NOT EXECUTED
10a522: e9 a8 01 00 00 jmp 10a6cf <rtems_aio_enqueue+0x1d5><== NOT EXECUTED
return result;
}
/* _POSIX_PRIORITIZED_IO and _POSIX_PRIORITY_SCHEDULING are defined,
we can use aio_reqprio to lower the priority of the request */
pthread_getschedparam (pthread_self(), &policy, ¶m);
10a527: e8 cc 10 00 00 call 10b5f8 <pthread_self>
10a52c: 52 push %edx
10a52d: 8d 55 cc lea -0x34(%ebp),%edx
10a530: 52 push %edx
10a531: 8d 55 c8 lea -0x38(%ebp),%edx
10a534: 52 push %edx
10a535: 50 push %eax
10a536: e8 f1 0c 00 00 call 10b22c <pthread_getschedparam>
req->caller_thread = pthread_self ();
10a53b: e8 b8 10 00 00 call 10b5f8 <pthread_self>
10a540: 89 43 10 mov %eax,0x10(%ebx)
req->priority = param.sched_priority - req->aiocbp->aio_reqprio;
10a543: 8b 43 14 mov 0x14(%ebx),%eax
10a546: 8b 55 cc mov -0x34(%ebp),%edx
10a549: 2b 50 14 sub 0x14(%eax),%edx
10a54c: 89 53 0c mov %edx,0xc(%ebx)
req->policy = policy;
10a54f: 8b 55 c8 mov -0x38(%ebp),%edx
10a552: 89 53 08 mov %edx,0x8(%ebx)
req->aiocbp->error_code = EINPROGRESS;
10a555: c7 40 30 77 00 00 00 movl $0x77,0x30(%eax)
req->aiocbp->return_value = 0;
10a55c: c7 40 34 00 00 00 00 movl $0x0,0x34(%eax)
if ((aio_request_queue.idle_threads == 0) &&
10a563: 83 c4 10 add $0x10,%esp
10a566: 83 3d 70 03 13 00 00 cmpl $0x0,0x130370
10a56d: 0f 85 97 00 00 00 jne 10a60a <rtems_aio_enqueue+0x110><== NEVER TAKEN
10a573: 83 3d 6c 03 13 00 04 cmpl $0x4,0x13036c
10a57a: 0f 8f 8a 00 00 00 jg 10a60a <rtems_aio_enqueue+0x110>
aio_request_queue.active_threads < AIO_MAX_THREADS)
/* we still have empty places on the active_threads chain */
{
chain = &aio_request_queue.work_req;
r_chain = rtems_aio_search_fd (chain, req->aiocbp->aio_fildes, 1);
10a580: 56 push %esi
10a581: 6a 01 push $0x1
10a583: ff 30 pushl (%eax)
10a585: 68 50 03 13 00 push $0x130350
10a58a: e8 30 fe ff ff call 10a3bf <rtems_aio_search_fd>
10a58f: 89 c6 mov %eax,%esi
if (r_chain->new_fd == 1) {
10a591: 83 c4 10 add $0x10,%esp
10a594: 83 78 18 01 cmpl $0x1,0x18(%eax)
10a598: 0f 85 84 00 00 00 jne 10a622 <rtems_aio_enqueue+0x128>
RTEMS_INLINE_ROUTINE void _Chain_Prepend(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
_Chain_Insert(_Chain_Head(the_chain), the_node);
10a59e: 50 push %eax
10a59f: 50 push %eax
10a5a0: 53 push %ebx
10a5a1: 8d 46 08 lea 0x8(%esi),%eax
10a5a4: 50 push %eax
10a5a5: e8 96 1f 00 00 call 10c540 <_Chain_Insert>
rtems_chain_prepend (&r_chain->perfd, &req->next_prio);
r_chain->new_fd = 0;
10a5aa: c7 46 18 00 00 00 00 movl $0x0,0x18(%esi)
pthread_mutex_init (&r_chain->mutex, NULL);
10a5b1: 58 pop %eax
10a5b2: 5a pop %edx
10a5b3: 6a 00 push $0x0
10a5b5: 8d 46 1c lea 0x1c(%esi),%eax
10a5b8: 50 push %eax
10a5b9: e8 22 07 00 00 call 10ace0 <pthread_mutex_init>
pthread_cond_init (&r_chain->cond, NULL);
10a5be: 59 pop %ecx
10a5bf: 5b pop %ebx
10a5c0: 6a 00 push $0x0
10a5c2: 8d 46 20 lea 0x20(%esi),%eax
10a5c5: 50 push %eax
10a5c6: e8 c9 03 00 00 call 10a994 <pthread_cond_init>
AIO_printf ("New thread \n");
result = pthread_create (&thid, &aio_request_queue.attr,
10a5cb: 56 push %esi
10a5cc: 68 34 a0 10 00 push $0x10a034
10a5d1: 68 10 03 13 00 push $0x130310
10a5d6: 8d 45 c4 lea -0x3c(%ebp),%eax
10a5d9: 50 push %eax
10a5da: e8 25 0a 00 00 call 10b004 <pthread_create>
10a5df: 89 c3 mov %eax,%ebx
rtems_aio_handle, (void *) r_chain);
if (result != 0) {
10a5e1: 83 c4 20 add $0x20,%esp
10a5e4: 85 c0 test %eax,%eax
10a5e6: 74 17 je 10a5ff <rtems_aio_enqueue+0x105><== ALWAYS TAKEN
pthread_mutex_unlock (&aio_request_queue.mutex);
10a5e8: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10a5eb: 68 08 03 13 00 push $0x130308 <== NOT EXECUTED
10a5f0: e8 93 08 00 00 call 10ae88 <pthread_mutex_unlock> <== NOT EXECUTED
10a5f5: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
10a5f8: 89 df mov %ebx,%edi <== NOT EXECUTED
10a5fa: e9 d3 00 00 00 jmp 10a6d2 <rtems_aio_enqueue+0x1d8><== NOT EXECUTED
return result;
}
++aio_request_queue.active_threads;
10a5ff: ff 05 6c 03 13 00 incl 0x13036c
10a605: e9 b8 00 00 00 jmp 10a6c2 <rtems_aio_enqueue+0x1c8>
else
{
/* the maximum number of threads has been already created
even though some of them might be idle.
The request belongs to one of the active fd chain */
r_chain = rtems_aio_search_fd (&aio_request_queue.work_req,
10a60a: 56 push %esi
10a60b: 6a 00 push $0x0
10a60d: ff 30 pushl (%eax)
10a60f: 68 50 03 13 00 push $0x130350
10a614: e8 a6 fd ff ff call 10a3bf <rtems_aio_search_fd>
10a619: 89 c6 mov %eax,%esi
req->aiocbp->aio_fildes, 0);
if (r_chain != NULL)
10a61b: 83 c4 10 add $0x10,%esp
10a61e: 85 c0 test %eax,%eax
10a620: 74 31 je 10a653 <rtems_aio_enqueue+0x159>
{
pthread_mutex_lock (&r_chain->mutex);
10a622: 8d 4e 1c lea 0x1c(%esi),%ecx
10a625: 83 ec 0c sub $0xc,%esp
10a628: 51 push %ecx
10a629: 89 4d b4 mov %ecx,-0x4c(%ebp)
10a62c: e8 d7 07 00 00 call 10ae08 <pthread_mutex_lock>
rtems_aio_insert_prio (&r_chain->perfd, req);
10a631: 8d 46 08 lea 0x8(%esi),%eax
10a634: 89 da mov %ebx,%edx
10a636: e8 3d fc ff ff call 10a278 <rtems_aio_insert_prio>
pthread_cond_signal (&r_chain->cond);
10a63b: 83 c6 20 add $0x20,%esi
10a63e: 89 34 24 mov %esi,(%esp)
10a641: e8 ee 03 00 00 call 10aa34 <pthread_cond_signal>
pthread_mutex_unlock (&r_chain->mutex);
10a646: 8b 4d b4 mov -0x4c(%ebp),%ecx
10a649: 89 0c 24 mov %ecx,(%esp)
10a64c: e8 37 08 00 00 call 10ae88 <pthread_mutex_unlock>
10a651: eb 6c jmp 10a6bf <rtems_aio_enqueue+0x1c5>
} else {
/* or to the idle chain */
chain = &aio_request_queue.idle_req;
r_chain = rtems_aio_search_fd (chain, req->aiocbp->aio_fildes, 1);
10a653: 51 push %ecx
10a654: 6a 01 push $0x1
10a656: 8b 43 14 mov 0x14(%ebx),%eax
10a659: ff 30 pushl (%eax)
10a65b: 68 5c 03 13 00 push $0x13035c
10a660: e8 5a fd ff ff call 10a3bf <rtems_aio_search_fd>
10a665: 89 c6 mov %eax,%esi
if (r_chain->new_fd == 1) {
10a667: 83 c4 10 add $0x10,%esp
10a66a: 83 78 18 01 cmpl $0x1,0x18(%eax)
10a66e: 8d 40 08 lea 0x8(%eax),%eax
10a671: 75 2f jne 10a6a2 <rtems_aio_enqueue+0x1a8>
10a673: 52 push %edx
10a674: 52 push %edx
10a675: 53 push %ebx
10a676: 50 push %eax
10a677: e8 c4 1e 00 00 call 10c540 <_Chain_Insert>
/* If this is a new fd chain we signal the idle threads that
might be waiting for requests */
AIO_printf (" New chain on waiting queue \n ");
rtems_chain_prepend (&r_chain->perfd, &req->next_prio);
r_chain->new_fd = 0;
10a67c: c7 46 18 00 00 00 00 movl $0x0,0x18(%esi)
pthread_mutex_init (&r_chain->mutex, NULL);
10a683: 59 pop %ecx
10a684: 5b pop %ebx
10a685: 6a 00 push $0x0
10a687: 8d 46 1c lea 0x1c(%esi),%eax
10a68a: 50 push %eax
10a68b: e8 50 06 00 00 call 10ace0 <pthread_mutex_init>
pthread_cond_init (&r_chain->cond, NULL);
10a690: 58 pop %eax
10a691: 5a pop %edx
10a692: 6a 00 push $0x0
10a694: 83 c6 20 add $0x20,%esi
10a697: 56 push %esi
10a698: e8 f7 02 00 00 call 10a994 <pthread_cond_init>
10a69d: 83 c4 10 add $0x10,%esp
10a6a0: eb 07 jmp 10a6a9 <rtems_aio_enqueue+0x1af>
} else
/* just insert the request in the existing fd chain */
rtems_aio_insert_prio (&r_chain->perfd, req);
10a6a2: 89 da mov %ebx,%edx
10a6a4: e8 cf fb ff ff call 10a278 <rtems_aio_insert_prio>
if (aio_request_queue.idle_threads > 0)
10a6a9: 83 3d 70 03 13 00 00 cmpl $0x0,0x130370
10a6b0: 7e 10 jle 10a6c2 <rtems_aio_enqueue+0x1c8><== ALWAYS TAKEN
pthread_cond_signal (&aio_request_queue.new_req);
10a6b2: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10a6b5: 68 0c 03 13 00 push $0x13030c <== NOT EXECUTED
10a6ba: e8 75 03 00 00 call 10aa34 <pthread_cond_signal> <== NOT EXECUTED
10a6bf: 83 c4 10 add $0x10,%esp
}
}
pthread_mutex_unlock (&aio_request_queue.mutex);
10a6c2: 83 ec 0c sub $0xc,%esp
10a6c5: 68 08 03 13 00 push $0x130308
10a6ca: e8 b9 07 00 00 call 10ae88 <pthread_mutex_unlock>
10a6cf: 83 c4 10 add $0x10,%esp
return 0;
}
10a6d2: 89 f8 mov %edi,%eax
10a6d4: 8d 65 f4 lea -0xc(%ebp),%esp
10a6d7: 5b pop %ebx
10a6d8: 5e pop %esi
10a6d9: 5f pop %edi
10a6da: 5d pop %ebp
10a6db: c3 ret
0010a034 <rtems_aio_handle>:
* NULL - if error
*/
static void *
rtems_aio_handle (void *arg)
{
10a034: 55 push %ebp
10a035: 89 e5 mov %esp,%ebp
10a037: 57 push %edi
10a038: 56 push %esi
10a039: 53 push %ebx
10a03a: 83 ec 4c sub $0x4c,%esp
rtems_aio_request_chain *r_chain = arg;
10a03d: 8b 5d 08 mov 0x8(%ebp),%ebx
/* acquire the mutex of the current fd chain.
we don't need to lock the queue mutex since we can
add requests to idle fd chains or even active ones
if the working request has been extracted from the
chain */
result = pthread_mutex_lock (&r_chain->mutex);
10a040: 8d 7b 1c lea 0x1c(%ebx),%edi
10a043: 83 ec 0c sub $0xc,%esp
10a046: 57 push %edi
10a047: e8 bc 0d 00 00 call 10ae08 <pthread_mutex_lock>
if (result != 0)
10a04c: 83 c4 10 add $0x10,%esp
10a04f: 85 c0 test %eax,%eax
10a051: 0f 85 17 02 00 00 jne 10a26e <rtems_aio_handle+0x23a><== NEVER TAKEN
*/
RTEMS_INLINE_ROUTINE const Chain_Node *_Chain_Immutable_first(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_head( the_chain )->next;
10a057: 8b 73 08 mov 0x8(%ebx),%esi
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
10a05a: 8d 43 0c lea 0xc(%ebx),%eax
/* If the locked chain is not empty, take the first
request extract it, unlock the chain and process
the request, in this way the user can supply more
requests to this fd chain */
if (!rtems_chain_is_empty (chain)) {
10a05d: 39 c6 cmp %eax,%esi
10a05f: 0f 84 cc 00 00 00 je 10a131 <rtems_aio_handle+0xfd>
node = rtems_chain_first (chain);
req = (rtems_aio_request *) node;
/* See _POSIX_PRIORITIZE_IO and _POSIX_PRIORITY_SCHEDULING
discussion in rtems_aio_enqueue () */
pthread_getschedparam (pthread_self(), &policy, ¶m);
10a065: e8 8e 15 00 00 call 10b5f8 <pthread_self>
10a06a: 52 push %edx
10a06b: 8d 55 cc lea -0x34(%ebp),%edx
10a06e: 52 push %edx
10a06f: 8d 55 c0 lea -0x40(%ebp),%edx
10a072: 52 push %edx
10a073: 50 push %eax
10a074: e8 b3 11 00 00 call 10b22c <pthread_getschedparam>
param.sched_priority = req->priority;
10a079: 8b 46 0c mov 0xc(%esi),%eax
10a07c: 89 45 cc mov %eax,-0x34(%ebp)
pthread_setschedparam (pthread_self(), req->policy, ¶m);
10a07f: 8b 56 08 mov 0x8(%esi),%edx
10a082: 89 55 b4 mov %edx,-0x4c(%ebp)
10a085: e8 6e 15 00 00 call 10b5f8 <pthread_self>
10a08a: 83 c4 0c add $0xc,%esp
10a08d: 8d 4d cc lea -0x34(%ebp),%ecx
10a090: 51 push %ecx
10a091: 8b 55 b4 mov -0x4c(%ebp),%edx
10a094: 52 push %edx
10a095: 50 push %eax
10a096: e8 6d 15 00 00 call 10b608 <pthread_setschedparam>
10a09b: 89 34 24 mov %esi,(%esp)
10a09e: e8 61 24 00 00 call 10c504 <_Chain_Extract>
rtems_chain_extract (node);
pthread_mutex_unlock (&r_chain->mutex);
10a0a3: 89 3c 24 mov %edi,(%esp)
10a0a6: e8 dd 0d 00 00 call 10ae88 <pthread_mutex_unlock>
switch (req->aiocbp->aio_lio_opcode) {
10a0ab: 8b 46 14 mov 0x14(%esi),%eax
10a0ae: 83 c4 10 add $0x10,%esp
10a0b1: 8b 50 2c mov 0x2c(%eax),%edx
10a0b4: 83 fa 02 cmp $0x2,%edx
10a0b7: 74 20 je 10a0d9 <rtems_aio_handle+0xa5>
10a0b9: 83 fa 03 cmp $0x3,%edx
10a0bc: 74 36 je 10a0f4 <rtems_aio_handle+0xc0> <== NEVER TAKEN
10a0be: 4a dec %edx
10a0bf: 75 45 jne 10a106 <rtems_aio_handle+0xd2> <== NEVER TAKEN
case LIO_READ:
AIO_printf ("read\n");
result = pread (req->aiocbp->aio_fildes,
10a0c1: 83 ec 0c sub $0xc,%esp
10a0c4: ff 70 08 pushl 0x8(%eax)
10a0c7: ff 70 04 pushl 0x4(%eax)
10a0ca: ff 70 10 pushl 0x10(%eax)
10a0cd: ff 70 0c pushl 0xc(%eax)
10a0d0: ff 30 pushl (%eax)
10a0d2: e8 09 96 00 00 call 1136e0 <pread>
10a0d7: eb 16 jmp 10a0ef <rtems_aio_handle+0xbb>
req->aiocbp->aio_nbytes, req->aiocbp->aio_offset);
break;
case LIO_WRITE:
AIO_printf ("write\n");
result = pwrite (req->aiocbp->aio_fildes,
10a0d9: 83 ec 0c sub $0xc,%esp
10a0dc: ff 70 08 pushl 0x8(%eax)
10a0df: ff 70 04 pushl 0x4(%eax)
10a0e2: ff 70 10 pushl 0x10(%eax)
10a0e5: ff 70 0c pushl 0xc(%eax)
10a0e8: ff 30 pushl (%eax)
10a0ea: e8 f1 96 00 00 call 1137e0 <pwrite>
(void *) req->aiocbp->aio_buf,
req->aiocbp->aio_nbytes, req->aiocbp->aio_offset);
break;
10a0ef: 83 c4 20 add $0x20,%esp
10a0f2: eb 0d jmp 10a101 <rtems_aio_handle+0xcd>
case LIO_SYNC:
AIO_printf ("sync\n");
result = fsync (req->aiocbp->aio_fildes);
10a0f4: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10a0f7: ff 30 pushl (%eax) <== NOT EXECUTED
10a0f9: e8 56 5a 00 00 call 10fb54 <fsync> <== NOT EXECUTED
break;
10a0fe: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
default:
result = -1;
}
if (result == -1) {
10a101: 83 f8 ff cmp $0xffffffff,%eax
10a104: 75 19 jne 10a11f <rtems_aio_handle+0xeb> <== ALWAYS TAKEN
req->aiocbp->return_value = -1;
10a106: 8b 76 14 mov 0x14(%esi),%esi <== NOT EXECUTED
10a109: c7 46 34 ff ff ff ff movl $0xffffffff,0x34(%esi) <== NOT EXECUTED
req->aiocbp->error_code = errno;
10a110: e8 07 8c 00 00 call 112d1c <__errno> <== NOT EXECUTED
10a115: 8b 00 mov (%eax),%eax <== NOT EXECUTED
10a117: 89 46 30 mov %eax,0x30(%esi) <== NOT EXECUTED
10a11a: e9 21 ff ff ff jmp 10a040 <rtems_aio_handle+0xc> <== NOT EXECUTED
} else {
req->aiocbp->return_value = result;
10a11f: 8b 56 14 mov 0x14(%esi),%edx
10a122: 89 42 34 mov %eax,0x34(%edx)
req->aiocbp->error_code = 0;
10a125: c7 42 30 00 00 00 00 movl $0x0,0x30(%edx)
10a12c: e9 0f ff ff ff jmp 10a040 <rtems_aio_handle+0xc>
struct timespec timeout;
AIO_printf ("Chain is empty [WQ], wait for work\n");
pthread_mutex_unlock (&r_chain->mutex);
10a131: 83 ec 0c sub $0xc,%esp
10a134: 57 push %edi
10a135: e8 4e 0d 00 00 call 10ae88 <pthread_mutex_unlock>
pthread_mutex_lock (&aio_request_queue.mutex);
10a13a: c7 04 24 08 03 13 00 movl $0x130308,(%esp)
10a141: e8 c2 0c 00 00 call 10ae08 <pthread_mutex_lock>
if (rtems_chain_is_empty (chain))
10a146: 83 c4 10 add $0x10,%esp
10a149: 39 73 08 cmp %esi,0x8(%ebx)
10a14c: 0f 85 07 01 00 00 jne 10a259 <rtems_aio_handle+0x225><== NEVER TAKEN
{
clock_gettime (CLOCK_REALTIME, &timeout);
10a152: 56 push %esi
10a153: 56 push %esi
10a154: 8d 45 c4 lea -0x3c(%ebp),%eax
10a157: 50 push %eax
10a158: 6a 01 push $0x1
10a15a: e8 e1 06 00 00 call 10a840 <clock_gettime>
timeout.tv_sec += 3;
10a15f: 83 45 c4 03 addl $0x3,-0x3c(%ebp)
timeout.tv_nsec = 0;
10a163: c7 45 c8 00 00 00 00 movl $0x0,-0x38(%ebp)
result = pthread_cond_timedwait (&r_chain->cond,
10a16a: 8d 73 20 lea 0x20(%ebx),%esi
10a16d: 83 c4 0c add $0xc,%esp
10a170: 8d 55 c4 lea -0x3c(%ebp),%edx
10a173: 52 push %edx
10a174: 68 08 03 13 00 push $0x130308
10a179: 56 push %esi
10a17a: e8 29 09 00 00 call 10aaa8 <pthread_cond_timedwait>
&aio_request_queue.mutex,
&timeout);
/* If no requests were added to the chain we delete the fd chain from
the queue and start working with idle fd chains */
if (result == ETIMEDOUT) {
10a17f: 83 c4 10 add $0x10,%esp
10a182: 83 f8 74 cmp $0x74,%eax
10a185: 0f 85 ce 00 00 00 jne 10a259 <rtems_aio_handle+0x225><== NEVER TAKEN
10a18b: 83 ec 0c sub $0xc,%esp
10a18e: 53 push %ebx
10a18f: e8 70 23 00 00 call 10c504 <_Chain_Extract>
rtems_chain_extract (&r_chain->next_fd);
pthread_mutex_destroy (&r_chain->mutex);
10a194: 89 3c 24 mov %edi,(%esp)
10a197: e8 40 0a 00 00 call 10abdc <pthread_mutex_destroy>
pthread_cond_destroy (&r_chain->cond);
10a19c: 89 34 24 mov %esi,(%esp)
10a19f: e8 34 07 00 00 call 10a8d8 <pthread_cond_destroy>
free (r_chain);
10a1a4: 89 1c 24 mov %ebx,(%esp)
10a1a7: e8 ac c9 ff ff call 106b58 <free>
/* If the idle chain is empty sleep for 3 seconds and wait for a
signal. The thread now becomes idle. */
if (rtems_chain_is_empty (&aio_request_queue.idle_req)) {
10a1ac: 83 c4 10 add $0x10,%esp
10a1af: 81 3d 5c 03 13 00 60 cmpl $0x130360,0x13035c
10a1b6: 03 13 00
10a1b9: 75 5a jne 10a215 <rtems_aio_handle+0x1e1>
AIO_printf ("Chain is empty [IQ], wait for work\n");
++aio_request_queue.idle_threads;
10a1bb: ff 05 70 03 13 00 incl 0x130370
--aio_request_queue.active_threads;
10a1c1: ff 0d 6c 03 13 00 decl 0x13036c
clock_gettime (CLOCK_REALTIME, &timeout);
10a1c7: 51 push %ecx
10a1c8: 51 push %ecx
10a1c9: 8d 4d c4 lea -0x3c(%ebp),%ecx
10a1cc: 51 push %ecx
10a1cd: 6a 01 push $0x1
10a1cf: e8 6c 06 00 00 call 10a840 <clock_gettime>
timeout.tv_sec += 3;
10a1d4: 83 45 c4 03 addl $0x3,-0x3c(%ebp)
timeout.tv_nsec = 0;
10a1d8: c7 45 c8 00 00 00 00 movl $0x0,-0x38(%ebp)
result = pthread_cond_timedwait (&aio_request_queue.new_req,
10a1df: 83 c4 0c add $0xc,%esp
10a1e2: 8d 45 c4 lea -0x3c(%ebp),%eax
10a1e5: 50 push %eax
10a1e6: 68 08 03 13 00 push $0x130308
10a1eb: 68 0c 03 13 00 push $0x13030c
10a1f0: e8 b3 08 00 00 call 10aaa8 <pthread_cond_timedwait>
&aio_request_queue.mutex,
&timeout);
/* If no new fd chain was added in the idle requests
then this thread is finished */
if (result == ETIMEDOUT) {
10a1f5: 83 c4 10 add $0x10,%esp
10a1f8: 83 f8 74 cmp $0x74,%eax
10a1fb: 75 18 jne 10a215 <rtems_aio_handle+0x1e1><== NEVER TAKEN
AIO_printf ("Etimeout\n");
--aio_request_queue.idle_threads;
10a1fd: ff 0d 70 03 13 00 decl 0x130370
pthread_mutex_unlock (&aio_request_queue.mutex);
10a203: 83 ec 0c sub $0xc,%esp
10a206: 68 08 03 13 00 push $0x130308
10a20b: e8 78 0c 00 00 call 10ae88 <pthread_mutex_unlock>
10a210: 83 c4 10 add $0x10,%esp
10a213: eb 59 jmp 10a26e <rtems_aio_handle+0x23a>
}
}
/* Otherwise move this chain to the working chain and
start the loop all over again */
AIO_printf ("Work on idle\n");
--aio_request_queue.idle_threads;
10a215: ff 0d 70 03 13 00 decl 0x130370
++aio_request_queue.active_threads;
10a21b: ff 05 6c 03 13 00 incl 0x13036c
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_First(
Chain_Control *the_chain
)
{
return _Chain_Head( the_chain )->next;
10a221: 8b 1d 5c 03 13 00 mov 0x13035c,%ebx
10a227: 83 ec 0c sub $0xc,%esp
10a22a: 53 push %ebx
10a22b: e8 d4 22 00 00 call 10c504 <_Chain_Extract>
10a230: a1 50 03 13 00 mov 0x130350,%eax
rtems_chain_node *node;
node = rtems_chain_first (&aio_request_queue.work_req);
temp = (rtems_aio_request_chain *) node;
while (temp->fildes < r_chain->fildes &&
10a235: 8b 53 14 mov 0x14(%ebx),%edx
10a238: 83 c4 10 add $0x10,%esp
10a23b: eb 02 jmp 10a23f <rtems_aio_handle+0x20b>
}
}
AIO_printf ("Thread finished\n");
return NULL;
}
10a23d: 8b 00 mov (%eax),%eax
rtems_chain_node *node;
node = rtems_chain_first (&aio_request_queue.work_req);
temp = (rtems_aio_request_chain *) node;
while (temp->fildes < r_chain->fildes &&
10a23f: 39 50 14 cmp %edx,0x14(%eax)
10a242: 7d 07 jge 10a24b <rtems_aio_handle+0x217>
10a244: 3d 54 03 13 00 cmp $0x130354,%eax
10a249: 75 f2 jne 10a23d <rtems_aio_handle+0x209><== ALWAYS TAKEN
RTEMS_INLINE_ROUTINE void rtems_chain_insert(
rtems_chain_node *after_node,
rtems_chain_node *the_node
)
{
_Chain_Insert( after_node, the_node );
10a24b: 52 push %edx
10a24c: 52 push %edx
10a24d: 53 push %ebx
10a24e: ff 70 04 pushl 0x4(%eax)
10a251: e8 ea 22 00 00 call 10c540 <_Chain_Insert>
10a256: 83 c4 10 add $0x10,%esp
}
}
/* If there was a request added in the initial fd chain then release
the mutex and process it */
pthread_mutex_unlock (&aio_request_queue.mutex);
10a259: 83 ec 0c sub $0xc,%esp
10a25c: 68 08 03 13 00 push $0x130308
10a261: e8 22 0c 00 00 call 10ae88 <pthread_mutex_unlock>
10a266: 83 c4 10 add $0x10,%esp
10a269: e9 d2 fd ff ff jmp 10a040 <rtems_aio_handle+0xc>
}
}
AIO_printf ("Thread finished\n");
return NULL;
}
10a26e: 31 c0 xor %eax,%eax
10a270: 8d 65 f4 lea -0xc(%ebp),%esp
10a273: 5b pop %ebx
10a274: 5e pop %esi
10a275: 5f pop %edi
10a276: 5d pop %ebp
10a277: c3 ret
0010a2c3 <rtems_aio_init>:
* 0 - if initialization succeeded
*/
int
rtems_aio_init (void)
{
10a2c3: 55 push %ebp
10a2c4: 89 e5 mov %esp,%ebp
10a2c6: 53 push %ebx
10a2c7: 83 ec 10 sub $0x10,%esp
int result = 0;
result = pthread_attr_init (&aio_request_queue.attr);
10a2ca: 68 10 03 13 00 push $0x130310
10a2cf: e8 e4 0c 00 00 call 10afb8 <pthread_attr_init>
10a2d4: 89 c3 mov %eax,%ebx
if (result != 0)
10a2d6: 83 c4 10 add $0x10,%esp
10a2d9: 85 c0 test %eax,%eax
10a2db: 0f 85 d7 00 00 00 jne 10a3b8 <rtems_aio_init+0xf5> <== NEVER TAKEN
return result;
result =
10a2e1: 50 push %eax
10a2e2: 50 push %eax
10a2e3: 6a 00 push $0x0
10a2e5: 68 10 03 13 00 push $0x130310
10a2ea: e8 f1 0c 00 00 call 10afe0 <pthread_attr_setdetachstate>
pthread_attr_setdetachstate (&aio_request_queue.attr,
PTHREAD_CREATE_DETACHED);
if (result != 0)
10a2ef: 83 c4 10 add $0x10,%esp
10a2f2: 85 c0 test %eax,%eax
10a2f4: 74 10 je 10a306 <rtems_aio_init+0x43> <== ALWAYS TAKEN
pthread_attr_destroy (&aio_request_queue.attr);
10a2f6: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10a2f9: 68 10 03 13 00 push $0x130310 <== NOT EXECUTED
10a2fe: e8 95 0c 00 00 call 10af98 <pthread_attr_destroy> <== NOT EXECUTED
10a303: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
result = pthread_mutex_init (&aio_request_queue.mutex, NULL);
10a306: 50 push %eax
10a307: 50 push %eax
10a308: 6a 00 push $0x0
10a30a: 68 08 03 13 00 push $0x130308
10a30f: e8 cc 09 00 00 call 10ace0 <pthread_mutex_init>
if (result != 0)
10a314: 83 c4 10 add $0x10,%esp
10a317: 85 c0 test %eax,%eax
10a319: 74 10 je 10a32b <rtems_aio_init+0x68> <== ALWAYS TAKEN
pthread_attr_destroy (&aio_request_queue.attr);
10a31b: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10a31e: 68 10 03 13 00 push $0x130310 <== NOT EXECUTED
10a323: e8 70 0c 00 00 call 10af98 <pthread_attr_destroy> <== NOT EXECUTED
10a328: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
result = pthread_cond_init (&aio_request_queue.new_req, NULL);
10a32b: 50 push %eax
10a32c: 50 push %eax
10a32d: 6a 00 push $0x0
10a32f: 68 0c 03 13 00 push $0x13030c
10a334: e8 5b 06 00 00 call 10a994 <pthread_cond_init>
10a339: 89 c3 mov %eax,%ebx
if (result != 0) {
10a33b: 83 c4 10 add $0x10,%esp
10a33e: 85 c0 test %eax,%eax
10a340: 74 1c je 10a35e <rtems_aio_init+0x9b> <== ALWAYS TAKEN
pthread_mutex_destroy (&aio_request_queue.mutex);
10a342: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10a345: 68 08 03 13 00 push $0x130308 <== NOT EXECUTED
10a34a: e8 8d 08 00 00 call 10abdc <pthread_mutex_destroy> <== NOT EXECUTED
pthread_attr_destroy (&aio_request_queue.attr);
10a34f: c7 04 24 10 03 13 00 movl $0x130310,(%esp) <== NOT EXECUTED
10a356: e8 3d 0c 00 00 call 10af98 <pthread_attr_destroy> <== NOT EXECUTED
10a35b: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
10a35e: c7 05 50 03 13 00 54 movl $0x130354,0x130350
10a365: 03 13 00
head->previous = NULL;
10a368: c7 05 54 03 13 00 00 movl $0x0,0x130354
10a36f: 00 00 00
tail->previous = head;
10a372: c7 05 58 03 13 00 50 movl $0x130350,0x130358
10a379: 03 13 00
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
10a37c: c7 05 5c 03 13 00 60 movl $0x130360,0x13035c
10a383: 03 13 00
head->previous = NULL;
10a386: c7 05 60 03 13 00 00 movl $0x0,0x130360
10a38d: 00 00 00
tail->previous = head;
10a390: c7 05 64 03 13 00 5c movl $0x13035c,0x130364
10a397: 03 13 00
}
rtems_chain_initialize_empty (&aio_request_queue.work_req);
rtems_chain_initialize_empty (&aio_request_queue.idle_req);
aio_request_queue.active_threads = 0;
10a39a: c7 05 6c 03 13 00 00 movl $0x0,0x13036c
10a3a1: 00 00 00
aio_request_queue.idle_threads = 0;
10a3a4: c7 05 70 03 13 00 00 movl $0x0,0x130370
10a3ab: 00 00 00
aio_request_queue.initialized = AIO_QUEUE_INITIALIZED;
10a3ae: c7 05 68 03 13 00 0b movl $0xb00b,0x130368
10a3b5: b0 00 00
return result;
}
10a3b8: 89 d8 mov %ebx,%eax
10a3ba: 8b 5d fc mov -0x4(%ebp),%ebx
10a3bd: c9 leave
10a3be: c3 ret
0010a278 <rtems_aio_insert_prio>:
* NONE
*/
static void
rtems_aio_insert_prio (rtems_chain_control *chain, rtems_aio_request *req)
{
10a278: 55 push %ebp
10a279: 89 e5 mov %esp,%ebp
10a27b: 56 push %esi
10a27c: 53 push %ebx
10a27d: 8b 08 mov (%eax),%ecx
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
10a27f: 8d 58 04 lea 0x4(%eax),%ebx
rtems_chain_node *node;
AIO_printf ("FD exists \n");
node = rtems_chain_first (chain);
if (rtems_chain_is_empty (chain)) {
10a282: 39 d9 cmp %ebx,%ecx
10a284: 75 06 jne 10a28c <rtems_aio_insert_prio+0x14><== ALWAYS TAKEN
RTEMS_INLINE_ROUTINE void _Chain_Prepend(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
_Chain_Insert(_Chain_Head(the_chain), the_node);
10a286: 56 push %esi <== NOT EXECUTED
10a287: 56 push %esi <== NOT EXECUTED
10a288: 52 push %edx <== NOT EXECUTED
10a289: 50 push %eax <== NOT EXECUTED
10a28a: eb 20 jmp 10a2ac <rtems_aio_insert_prio+0x34><== NOT EXECUTED
AIO_printf ("First in chain \n");
rtems_chain_prepend (chain, &req->next_prio);
} else {
AIO_printf ("Add by priority \n");
int prio = ((rtems_aio_request *) node)->aiocbp->aio_reqprio;
10a28c: 8b 41 14 mov 0x14(%ecx),%eax
10a28f: 8b 40 14 mov 0x14(%eax),%eax
while (req->aiocbp->aio_reqprio > prio &&
10a292: 8b 72 14 mov 0x14(%edx),%esi
10a295: 8b 76 14 mov 0x14(%esi),%esi
10a298: eb 08 jmp 10a2a2 <rtems_aio_insert_prio+0x2a>
}
}
AIO_printf ("Thread finished\n");
return NULL;
}
10a29a: 8b 09 mov (%ecx),%ecx <== NOT EXECUTED
int prio = ((rtems_aio_request *) node)->aiocbp->aio_reqprio;
while (req->aiocbp->aio_reqprio > prio &&
!rtems_chain_is_tail (chain, node)) {
node = rtems_chain_next (node);
prio = ((rtems_aio_request *) node)->aiocbp->aio_reqprio;
10a29c: 8b 41 14 mov 0x14(%ecx),%eax <== NOT EXECUTED
10a29f: 8b 40 14 mov 0x14(%eax),%eax <== NOT EXECUTED
rtems_chain_prepend (chain, &req->next_prio);
} else {
AIO_printf ("Add by priority \n");
int prio = ((rtems_aio_request *) node)->aiocbp->aio_reqprio;
while (req->aiocbp->aio_reqprio > prio &&
10a2a2: 39 c6 cmp %eax,%esi
10a2a4: 7f 10 jg 10a2b6 <rtems_aio_insert_prio+0x3e><== NEVER TAKEN
10a2a6: 53 push %ebx
10a2a7: 53 push %ebx
10a2a8: 52 push %edx
10a2a9: ff 71 04 pushl 0x4(%ecx)
10a2ac: e8 8f 22 00 00 call 10c540 <_Chain_Insert>
10a2b1: 83 c4 10 add $0x10,%esp
10a2b4: eb 06 jmp 10a2bc <rtems_aio_insert_prio+0x44>
10a2b6: 39 d9 cmp %ebx,%ecx <== NOT EXECUTED
10a2b8: 75 e0 jne 10a29a <rtems_aio_insert_prio+0x22><== NOT EXECUTED
10a2ba: eb ea jmp 10a2a6 <rtems_aio_insert_prio+0x2e><== NOT EXECUTED
}
rtems_chain_insert (node->previous, &req->next_prio);
}
}
10a2bc: 8d 65 f8 lea -0x8(%ebp),%esp
10a2bf: 5b pop %ebx
10a2c0: 5e pop %esi
10a2c1: 5d pop %ebp
10a2c2: c3 ret
0010a496 <rtems_aio_remove_req>:
* AIO_NOTCANCELED - if request was not canceled
* AIO_CANCELED - if request was canceled
*/
int rtems_aio_remove_req (rtems_chain_control *chain, struct aiocb *aiocbp)
{
10a496: 55 push %ebp
10a497: 89 e5 mov %esp,%ebp
10a499: 53 push %ebx
10a49a: 50 push %eax
10a49b: 8b 55 08 mov 0x8(%ebp),%edx
10a49e: 8b 45 0c mov 0xc(%ebp),%eax
*/
RTEMS_INLINE_ROUTINE const Chain_Node *_Chain_Immutable_first(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_head( the_chain )->next;
10a4a1: 8b 1a mov (%edx),%ebx
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
10a4a3: 83 c2 04 add $0x4,%edx
if (rtems_chain_is_empty (chain))
10a4a6: 39 d3 cmp %edx,%ebx
10a4a8: 75 0f jne 10a4b9 <rtems_aio_remove_req+0x23>
10a4aa: eb 44 jmp 10a4f0 <rtems_aio_remove_req+0x5a>
}
}
AIO_printf ("Thread finished\n");
return NULL;
}
10a4ac: 8b 1b mov (%ebx),%ebx <== NOT EXECUTED
rtems_chain_node *node = rtems_chain_first (chain);
rtems_aio_request *current;
current = (rtems_aio_request *) node;
while (!rtems_chain_is_tail (chain, node) && current->aiocbp != aiocbp) {
10a4ae: 39 d3 cmp %edx,%ebx <== NOT EXECUTED
10a4b0: 75 07 jne 10a4b9 <rtems_aio_remove_req+0x23><== NOT EXECUTED
node = rtems_chain_next (node);
current = (rtems_aio_request *) node;
}
if (rtems_chain_is_tail (chain, node))
return AIO_NOTCANCELED;
10a4b2: b8 01 00 00 00 mov $0x1,%eax <== NOT EXECUTED
10a4b7: eb 3c jmp 10a4f5 <rtems_aio_remove_req+0x5f><== NOT EXECUTED
rtems_chain_node *node = rtems_chain_first (chain);
rtems_aio_request *current;
current = (rtems_aio_request *) node;
while (!rtems_chain_is_tail (chain, node) && current->aiocbp != aiocbp) {
10a4b9: 39 43 14 cmp %eax,0x14(%ebx)
10a4bc: 75 ee jne 10a4ac <rtems_aio_remove_req+0x16><== NEVER TAKEN
node = rtems_chain_next (node);
current = (rtems_aio_request *) node;
}
if (rtems_chain_is_tail (chain, node))
return AIO_NOTCANCELED;
10a4be: b8 01 00 00 00 mov $0x1,%eax
while (!rtems_chain_is_tail (chain, node) && current->aiocbp != aiocbp) {
node = rtems_chain_next (node);
current = (rtems_aio_request *) node;
}
if (rtems_chain_is_tail (chain, node))
10a4c3: 39 d3 cmp %edx,%ebx
10a4c5: 74 2e je 10a4f5 <rtems_aio_remove_req+0x5f><== NEVER TAKEN
10a4c7: 83 ec 0c sub $0xc,%esp
10a4ca: 53 push %ebx
10a4cb: e8 34 20 00 00 call 10c504 <_Chain_Extract>
return AIO_NOTCANCELED;
else
{
rtems_chain_extract (node);
current->aiocbp->error_code = ECANCELED;
10a4d0: 8b 43 14 mov 0x14(%ebx),%eax
10a4d3: c7 40 30 8c 00 00 00 movl $0x8c,0x30(%eax)
current->aiocbp->return_value = -1;
10a4da: c7 40 34 ff ff ff ff movl $0xffffffff,0x34(%eax)
free (current);
10a4e1: 89 1c 24 mov %ebx,(%esp)
10a4e4: e8 6f c6 ff ff call 106b58 <free>
}
return AIO_CANCELED;
10a4e9: 83 c4 10 add $0x10,%esp
10a4ec: 31 c0 xor %eax,%eax
10a4ee: eb 05 jmp 10a4f5 <rtems_aio_remove_req+0x5f>
*/
int rtems_aio_remove_req (rtems_chain_control *chain, struct aiocb *aiocbp)
{
if (rtems_chain_is_empty (chain))
return AIO_ALLDONE;
10a4f0: b8 02 00 00 00 mov $0x2,%eax
current->aiocbp->return_value = -1;
free (current);
}
return AIO_CANCELED;
}
10a4f5: 8b 5d fc mov -0x4(%ebp),%ebx
10a4f8: c9 leave
10a4f9: c3 ret
0010e934 <rtems_bdbuf_add_to_modified_list_after_access>:
}
}
static void
rtems_bdbuf_add_to_modified_list_after_access (rtems_bdbuf_buffer *bd)
{
10e934: 55 push %ebp
10e935: 89 e5 mov %esp,%ebp
10e937: 53 push %ebx
10e938: 53 push %ebx
10e939: 89 c3 mov %eax,%ebx
if (bdbuf_cache.sync_active && bdbuf_cache.sync_device == bd->dd)
10e93b: 80 3d f0 20 13 00 00 cmpb $0x0,0x1320f0
10e942: 74 33 je 10e977 <rtems_bdbuf_add_to_modified_list_after_access+0x43><== ALWAYS TAKEN
10e944: 8b 40 14 mov 0x14(%eax),%eax <== NOT EXECUTED
10e947: 39 05 f8 20 13 00 cmp %eax,0x1320f8 <== NOT EXECUTED
10e94d: 75 28 jne 10e977 <rtems_bdbuf_add_to_modified_list_after_access+0x43><== NOT EXECUTED
{
rtems_bdbuf_unlock_cache ();
10e94f: e8 bc fa ff ff call 10e410 <rtems_bdbuf_unlock_cache><== NOT EXECUTED
* Lock the cache's sync. A single task can nest calls.
*/
static void
rtems_bdbuf_lock_sync (void)
{
rtems_bdbuf_lock (bdbuf_cache.sync_lock, RTEMS_BLKDEV_FATAL_BDBUF_SYNC_LOCK);
10e954: ba 0b 00 00 42 mov $0x4200000b,%edx <== NOT EXECUTED
10e959: a1 ec 20 13 00 mov 0x1320ec,%eax <== NOT EXECUTED
10e95e: e8 40 fa ff ff call 10e3a3 <rtems_bdbuf_lock> <== NOT EXECUTED
* Unlock the cache's sync lock. Any blocked writers are woken.
*/
static void
rtems_bdbuf_unlock_sync (void)
{
rtems_bdbuf_unlock (bdbuf_cache.sync_lock,
10e963: ba 0c 00 00 42 mov $0x4200000c,%edx <== NOT EXECUTED
10e968: a1 ec 20 13 00 mov 0x1320ec,%eax <== NOT EXECUTED
10e96d: e8 7a fa ff ff call 10e3ec <rtems_bdbuf_unlock> <== NOT EXECUTED
* Wait for the sync lock.
*/
rtems_bdbuf_lock_sync ();
rtems_bdbuf_unlock_sync ();
rtems_bdbuf_lock_cache ();
10e972: e8 54 fa ff ff call 10e3cb <rtems_bdbuf_lock_cache><== NOT EXECUTED
* difficult question. Is a snapshot of a block that is changing better than
* nothing being written? We have tended to think we should hold changes for
* only a specific period of time even if still changing and get onto disk
* and letting the file system try and recover this position if it can.
*/
if (bd->state == RTEMS_BDBUF_STATE_ACCESS_CACHED
10e977: 8b 43 20 mov 0x20(%ebx),%eax
10e97a: 83 f8 05 cmp $0x5,%eax
10e97d: 74 05 je 10e984 <rtems_bdbuf_add_to_modified_list_after_access+0x50>
10e97f: 83 f8 03 cmp $0x3,%eax
10e982: 75 08 jne 10e98c <rtems_bdbuf_add_to_modified_list_after_access+0x58>
|| bd->state == RTEMS_BDBUF_STATE_ACCESS_EMPTY)
bd->hold_timer = bdbuf_config.swap_block_hold;
10e984: a1 5c 14 12 00 mov 0x12145c,%eax
10e989: 89 43 2c mov %eax,0x2c(%ebx)
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
10e98c: c7 43 20 07 00 00 00 movl $0x7,0x20(%ebx)
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
Chain_Node *old_last = tail->previous;
10e993: a1 14 21 13 00 mov 0x132114,%eax
the_node->next = tail;
10e998: c7 03 10 21 13 00 movl $0x132110,(%ebx)
tail->previous = the_node;
10e99e: 89 1d 14 21 13 00 mov %ebx,0x132114
old_last->next = the_node;
10e9a4: 89 18 mov %ebx,(%eax)
the_node->previous = old_last;
10e9a6: 89 43 04 mov %eax,0x4(%ebx)
bd->hold_timer = bdbuf_config.swap_block_hold;
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_MODIFIED);
rtems_chain_append_unprotected (&bdbuf_cache.modified, &bd->link);
if (bd->waiters)
10e9a9: 83 7b 24 00 cmpl $0x0,0x24(%ebx)
10e9ad: 74 0d je 10e9bc <rtems_bdbuf_add_to_modified_list_after_access+0x88>
rtems_bdbuf_wake (&bdbuf_cache.access_waiters);
10e9af: b8 24 21 13 00 mov $0x132124,%eax
else if (rtems_bdbuf_has_buffer_waiters ())
rtems_bdbuf_wake_swapper ();
}
10e9b4: 59 pop %ecx
10e9b5: 5b pop %ebx
10e9b6: 5d pop %ebp
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_MODIFIED);
rtems_chain_append_unprotected (&bdbuf_cache.modified, &bd->link);
if (bd->waiters)
rtems_bdbuf_wake (&bdbuf_cache.access_waiters);
10e9b7: e9 49 fc ff ff jmp 10e605 <rtems_bdbuf_wake>
else if (rtems_bdbuf_has_buffer_waiters ())
10e9bc: 83 3d 34 21 13 00 00 cmpl $0x0,0x132134
10e9c3: 74 08 je 10e9cd <rtems_bdbuf_add_to_modified_list_after_access+0x99>
rtems_bdbuf_wake_swapper ();
}
10e9c5: 5a pop %edx
10e9c6: 5b pop %ebx
10e9c7: 5d pop %ebp
rtems_chain_append_unprotected (&bdbuf_cache.modified, &bd->link);
if (bd->waiters)
rtems_bdbuf_wake (&bdbuf_cache.access_waiters);
else if (rtems_bdbuf_has_buffer_waiters ())
rtems_bdbuf_wake_swapper ();
10e9c8: e9 53 fa ff ff jmp 10e420 <rtems_bdbuf_wake_swapper>
}
10e9cd: 58 pop %eax
10e9ce: 5b pop %ebx
10e9cf: 5d pop %ebp
10e9d0: c3 ret
0010e50d <rtems_bdbuf_anonymous_wait>:
* The function assumes the cache is locked on entry and it will be locked on
* exit.
*/
static void
rtems_bdbuf_anonymous_wait (rtems_bdbuf_waiters *waiters)
{
10e50d: 55 push %ebp
10e50e: 89 e5 mov %esp,%ebp
10e510: 56 push %esi
10e511: 53 push %ebx
10e512: 89 c3 mov %eax,%ebx
rtems_mode prev_mode;
/*
* Indicate we are waiting.
*/
++waiters->count;
10e514: ff 00 incl (%eax)
* blocking or just hits that window, and before this task has blocked on the
* semaphore. If the preempting task flushes the queue this task will not see
* the flush and may block for ever or until another transaction flushes this
* semaphore.
*/
prev_mode = rtems_bdbuf_disable_preemption ();
10e516: e8 89 ff ff ff call 10e4a4 <rtems_bdbuf_disable_preemption>
10e51b: 89 c6 mov %eax,%esi
/*
* Unlock the cache, wait, and lock the cache when we return.
*/
rtems_bdbuf_unlock_cache ();
10e51d: e8 ee fe ff ff call 10e410 <rtems_bdbuf_unlock_cache>
sc = rtems_semaphore_obtain (waiters->sema, RTEMS_WAIT, RTEMS_BDBUF_WAIT_TIMEOUT);
10e522: 50 push %eax
10e523: 6a 00 push $0x0
10e525: 6a 00 push $0x0
10e527: ff 73 04 pushl 0x4(%ebx)
10e52a: e8 05 c8 ff ff call 10ad34 <rtems_semaphore_obtain>
if (sc == RTEMS_TIMEOUT)
10e52f: 83 c4 10 add $0x10,%esp
10e532: 83 f8 06 cmp $0x6,%eax
10e535: 75 0a jne 10e541 <rtems_bdbuf_anonymous_wait+0x34><== ALWAYS TAKEN
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_CACHE_WAIT_TO);
10e537: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10e53a: 68 12 00 00 42 push $0x42000012 <== NOT EXECUTED
10e53f: eb 0d jmp 10e54e <rtems_bdbuf_anonymous_wait+0x41><== NOT EXECUTED
if (sc != RTEMS_UNSATISFIED)
10e541: 83 f8 0d cmp $0xd,%eax
10e544: 74 0d je 10e553 <rtems_bdbuf_anonymous_wait+0x46><== ALWAYS TAKEN
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_CACHE_WAIT_2);
10e546: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10e549: 68 10 00 00 42 push $0x42000010 <== NOT EXECUTED
10e54e: e8 bd cd ff ff call 10b310 <rtems_fatal_error_occurred><== NOT EXECUTED
rtems_bdbuf_lock_cache ();
10e553: e8 73 fe ff ff call 10e3cb <rtems_bdbuf_lock_cache>
rtems_bdbuf_restore_preemption (prev_mode);
10e558: 89 f0 mov %esi,%eax
10e55a: e8 7e ff ff ff call 10e4dd <rtems_bdbuf_restore_preemption>
--waiters->count;
10e55f: ff 0b decl (%ebx)
}
10e561: 8d 65 f8 lea -0x8(%ebp),%esp
10e564: 5b pop %ebx
10e565: 5e pop %esi
10e566: 5d pop %ebp
10e567: c3 ret
0010e62e <rtems_bdbuf_create_task.constprop.14>:
return NULL;
}
static rtems_status_code
rtems_bdbuf_create_task(
10e62e: 55 push %ebp
10e62f: 89 e5 mov %esp,%ebp
10e631: 56 push %esi
10e632: 53 push %ebx
10e633: 89 ce mov %ecx,%esi
10e635: 8b 5d 0c mov 0xc(%ebp),%ebx
rtems_task_argument arg,
rtems_id *id
)
{
rtems_status_code sc;
size_t stack_size = bdbuf_config.task_stack_size ?
10e638: 8b 0d 68 14 12 00 mov 0x121468,%ecx
bdbuf_config.task_stack_size : RTEMS_BDBUF_TASK_STACK_SIZE_DEFAULT;
10e63e: 85 c9 test %ecx,%ecx
10e640: 75 04 jne 10e646 <rtems_bdbuf_create_task.constprop.14+0x18><== ALWAYS TAKEN
10e642: 66 b9 00 10 mov $0x1000,%cx <== NOT EXECUTED
priority = priority != 0 ? priority : default_priority;
10e646: 85 d2 test %edx,%edx
10e648: 75 02 jne 10e64c <rtems_bdbuf_create_task.constprop.14+0x1e><== ALWAYS TAKEN
10e64a: b2 0f mov $0xf,%dl <== NOT EXECUTED
sc = rtems_task_create (name,
10e64c: 83 ec 08 sub $0x8,%esp
10e64f: 53 push %ebx
10e650: 6a 00 push $0x0
10e652: 68 00 04 00 00 push $0x400
10e657: 51 push %ecx
10e658: 52 push %edx
10e659: 50 push %eax
10e65a: e8 55 c8 ff ff call 10aeb4 <rtems_task_create>
stack_size,
RTEMS_PREEMPT | RTEMS_NO_TIMESLICE | RTEMS_NO_ASR,
RTEMS_LOCAL | RTEMS_NO_FLOATING_POINT,
id);
if (sc == RTEMS_SUCCESSFUL)
10e65f: 83 c4 20 add $0x20,%esp
10e662: 85 c0 test %eax,%eax
10e664: 75 0f jne 10e675 <rtems_bdbuf_create_task.constprop.14+0x47><== NEVER TAKEN
sc = rtems_task_start (*id, entry, arg);
10e666: 50 push %eax
10e667: ff 75 08 pushl 0x8(%ebp)
10e66a: 56 push %esi
10e66b: ff 33 pushl (%ebx)
10e66d: e8 76 ca ff ff call 10b0e8 <rtems_task_start>
10e672: 83 c4 10 add $0x10,%esp
return sc;
}
10e675: 8d 65 f8 lea -0x8(%ebp),%esp
10e678: 5b pop %ebx
10e679: 5e pop %esi
10e67a: 5d pop %ebp
10e67b: c3 ret
0010e4a4 <rtems_bdbuf_disable_preemption>:
--bd->group->users;
}
static rtems_mode
rtems_bdbuf_disable_preemption (void)
{
10e4a4: 55 push %ebp
10e4a5: 89 e5 mov %esp,%ebp
10e4a7: 83 ec 1c sub $0x1c,%esp
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_mode prev_mode = 0;
10e4aa: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp)
sc = rtems_task_mode (RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &prev_mode);
10e4b1: 8d 45 f4 lea -0xc(%ebp),%eax
10e4b4: 50 push %eax
10e4b5: 68 00 01 00 00 push $0x100
10e4ba: 68 00 01 00 00 push $0x100
10e4bf: e8 28 3a 00 00 call 111eec <rtems_task_mode>
if (sc != RTEMS_SUCCESSFUL)
10e4c4: 83 c4 10 add $0x10,%esp
10e4c7: 85 c0 test %eax,%eax
10e4c9: 74 0d je 10e4d8 <rtems_bdbuf_disable_preemption+0x34><== ALWAYS TAKEN
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_PREEMPT_DIS);
10e4cb: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10e4ce: 68 0f 00 00 42 push $0x4200000f <== NOT EXECUTED
10e4d3: e8 38 ce ff ff call 10b310 <rtems_fatal_error_occurred><== NOT EXECUTED
return prev_mode;
}
10e4d8: 8b 45 f4 mov -0xc(%ebp),%eax
10e4db: c9 leave
10e4dc: c3 ret
0010f4ab <rtems_bdbuf_execute_read_request>:
static rtems_status_code
rtems_bdbuf_execute_read_request (rtems_disk_device *dd,
rtems_bdbuf_buffer *bd,
uint32_t transfer_count)
{
10f4ab: 55 push %ebp
10f4ac: 89 e5 mov %esp,%ebp
10f4ae: 57 push %edi
10f4af: 56 push %esi
10f4b0: 53 push %ebx
10f4b1: 83 ec 2c sub $0x2c,%esp
10f4b4: 89 45 e4 mov %eax,-0x1c(%ebp)
10f4b7: 89 d6 mov %edx,%esi
10f4b9: 89 4d dc mov %ecx,-0x24(%ebp)
rtems_blkdev_request *req = NULL;
rtems_blkdev_bnum media_block = bd->block;
10f4bc: 8b 7a 18 mov 0x18(%edx),%edi
uint32_t media_blocks_per_block = dd->media_blocks_per_block;
10f4bf: 8b 40 2c mov 0x2c(%eax),%eax
10f4c2: 89 45 d8 mov %eax,-0x28(%ebp)
uint32_t block_size = dd->block_size;
10f4c5: 8b 45 e4 mov -0x1c(%ebp),%eax
10f4c8: 8b 40 24 mov 0x24(%eax),%eax
10f4cb: 89 45 e0 mov %eax,-0x20(%ebp)
/*
* TODO: This type of request structure is wrong and should be removed.
*/
#define bdbuf_alloc(size) __builtin_alloca (size)
req = bdbuf_alloc (sizeof (rtems_blkdev_request) +
10f4ce: 89 c8 mov %ecx,%eax
10f4d0: c1 e0 04 shl $0x4,%eax
10f4d3: 83 c0 30 add $0x30,%eax
10f4d6: 29 c4 sub %eax,%esp
10f4d8: 8d 5c 24 0f lea 0xf(%esp),%ebx
10f4dc: 83 e3 f0 and $0xfffffff0,%ebx
sizeof (rtems_blkdev_sg_buffer) * transfer_count);
req->req = RTEMS_BLKDEV_REQ_READ;
10f4df: c7 03 00 00 00 00 movl $0x0,(%ebx)
req->req_done = rtems_bdbuf_transfer_done;
10f4e5: c7 43 04 49 e4 10 00 movl $0x10e449,0x4(%ebx)
req->done_arg = req;
10f4ec: 89 5b 08 mov %ebx,0x8(%ebx)
req->io_task = rtems_task_self ();
10f4ef: e8 18 2b 00 00 call 11200c <rtems_task_self>
10f4f4: 89 43 14 mov %eax,0x14(%ebx)
req->status = RTEMS_RESOURCE_IN_USE;
10f4f7: c7 43 0c 0c 00 00 00 movl $0xc,0xc(%ebx)
req->bufnum = 0;
10f4fe: c7 43 10 00 00 00 00 movl $0x0,0x10(%ebx)
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
10f505: c7 46 20 09 00 00 00 movl $0x9,0x20(%esi)
req->status = RTEMS_RESOURCE_IN_USE;
req->bufnum = 0;
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_TRANSFER);
req->bufs [0].user = bd;
10f50c: 89 73 24 mov %esi,0x24(%ebx)
req->bufs [0].block = media_block;
10f50f: 89 7b 18 mov %edi,0x18(%ebx)
req->bufs [0].length = block_size;
10f512: 8b 55 e0 mov -0x20(%ebp),%edx
10f515: 89 53 1c mov %edx,0x1c(%ebx)
req->bufs [0].buffer = bd->buffer;
10f518: 8b 46 1c mov 0x1c(%esi),%eax
10f51b: 89 43 20 mov %eax,0x20(%ebx)
10f51e: 89 de mov %ebx,%esi
{
rtems_blkdev_request *req = NULL;
rtems_blkdev_bnum media_block = bd->block;
uint32_t media_blocks_per_block = dd->media_blocks_per_block;
uint32_t block_size = dd->block_size;
uint32_t transfer_index = 1;
10f520: b9 01 00 00 00 mov $0x1,%ecx
req->bufs [0].buffer = bd->buffer;
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_users ("read", bd);
while (transfer_index < transfer_count)
10f525: eb 48 jmp 10f56f <rtems_bdbuf_execute_read_request+0xc4>
{
media_block += media_blocks_per_block;
10f527: 03 7d d8 add -0x28(%ebp),%edi
bd = rtems_bdbuf_get_buffer_for_read_ahead (dd, media_block);
10f52a: 89 fa mov %edi,%edx
10f52c: 8b 45 e4 mov -0x1c(%ebp),%eax
10f52f: 89 4d d4 mov %ecx,-0x2c(%ebp)
10f532: e8 cf f7 ff ff call 10ed06 <rtems_bdbuf_get_buffer_for_read_ahead>
10f537: 83 c6 10 add $0x10,%esi
if (bd == NULL)
10f53a: 85 c0 test %eax,%eax
10f53c: 8b 4d d4 mov -0x2c(%ebp),%ecx
10f53f: 75 14 jne 10f555 <rtems_bdbuf_execute_read_request+0xaa><== ALWAYS TAKEN
rtems_bdbuf_show_users ("read", bd);
++transfer_index;
}
req->bufnum = transfer_index;
10f541: 89 4b 10 mov %ecx,0x10(%ebx)
return rtems_bdbuf_execute_transfer_request (dd, req, true);
10f544: b9 01 00 00 00 mov $0x1,%ecx
10f549: 89 da mov %ebx,%edx
10f54b: 8b 45 e4 mov -0x1c(%ebp),%eax
10f54e: e8 0d fa ff ff call 10ef60 <rtems_bdbuf_execute_transfer_request>
10f553: eb 21 jmp 10f576 <rtems_bdbuf_execute_read_request+0xcb>
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
10f555: c7 40 20 09 00 00 00 movl $0x9,0x20(%eax)
if (bd == NULL)
break;
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_TRANSFER);
req->bufs [transfer_index].user = bd;
10f55c: 89 46 24 mov %eax,0x24(%esi)
req->bufs [transfer_index].block = media_block;
10f55f: 89 7e 18 mov %edi,0x18(%esi)
req->bufs [transfer_index].length = block_size;
10f562: 8b 55 e0 mov -0x20(%ebp),%edx
10f565: 89 56 1c mov %edx,0x1c(%esi)
req->bufs [transfer_index].buffer = bd->buffer;
10f568: 8b 40 1c mov 0x1c(%eax),%eax
10f56b: 89 46 20 mov %eax,0x20(%esi)
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_users ("read", bd);
++transfer_index;
10f56e: 41 inc %ecx
req->bufs [0].buffer = bd->buffer;
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_users ("read", bd);
while (transfer_index < transfer_count)
10f56f: 3b 4d dc cmp -0x24(%ebp),%ecx
10f572: 72 b3 jb 10f527 <rtems_bdbuf_execute_read_request+0x7c>
10f574: eb cb jmp 10f541 <rtems_bdbuf_execute_read_request+0x96>
}
req->bufnum = transfer_index;
return rtems_bdbuf_execute_transfer_request (dd, req, true);
}
10f576: 8d 65 f4 lea -0xc(%ebp),%esp
10f579: 5b pop %ebx
10f57a: 5e pop %esi
10f57b: 5f pop %edi
10f57c: 5d pop %ebp
10f57d: c3 ret
0010fb09 <rtems_bdbuf_get>:
rtems_status_code
rtems_bdbuf_get (rtems_disk_device *dd,
rtems_blkdev_bnum block,
rtems_bdbuf_buffer **bd_ptr)
{
10fb09: 55 push %ebp
10fb0a: 89 e5 mov %esp,%ebp
10fb0c: 56 push %esi
10fb0d: 53 push %ebx
10fb0e: 83 ec 10 sub $0x10,%esp
10fb11: 8b 75 08 mov 0x8(%ebp),%esi
10fb14: 8b 5d 0c mov 0xc(%ebp),%ebx
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_bdbuf_buffer *bd = NULL;
rtems_blkdev_bnum media_block;
rtems_bdbuf_lock_cache ();
10fb17: e8 af e8 ff ff call 10e3cb <rtems_bdbuf_lock_cache>
rtems_blkdev_bnum block,
rtems_blkdev_bnum *media_block_ptr)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
if (block < dd->block_count)
10fb1c: 3b 5e 28 cmp 0x28(%esi),%ebx
10fb1f: 73 6a jae 10fb8b <rtems_bdbuf_get+0x82> <== NEVER TAKEN
}
static rtems_blkdev_bnum
rtems_bdbuf_media_block (const rtems_disk_device *dd, rtems_blkdev_bnum block)
{
if (dd->block_to_media_block_shift >= 0)
10fb21: 8b 4e 30 mov 0x30(%esi),%ecx
return block << dd->block_to_media_block_shift;
10fb24: 89 d8 mov %ebx,%eax
}
static rtems_blkdev_bnum
rtems_bdbuf_media_block (const rtems_disk_device *dd, rtems_blkdev_bnum block)
{
if (dd->block_to_media_block_shift >= 0)
10fb26: 85 c9 test %ecx,%ecx
10fb28: 78 04 js 10fb2e <rtems_bdbuf_get+0x25> <== NEVER TAKEN
return block << dd->block_to_media_block_shift;
10fb2a: d3 e0 shl %cl,%eax
10fb2c: eb 14 jmp 10fb42 <rtems_bdbuf_get+0x39>
/*
* Change the block number for the block size to the block number for the media
* block size. We have to use 64bit maths. There is no short cut here.
*/
return (rtems_blkdev_bnum)
((((uint64_t) block) * dd->block_size) / dd->media_block_size);
10fb2e: f7 66 24 mull 0x24(%esi) <== NOT EXECUTED
10fb31: 8b 4e 20 mov 0x20(%esi),%ecx <== NOT EXECUTED
10fb34: 31 db xor %ebx,%ebx <== NOT EXECUTED
10fb36: 53 push %ebx <== NOT EXECUTED
10fb37: 51 push %ecx <== NOT EXECUTED
10fb38: 52 push %edx <== NOT EXECUTED
10fb39: 50 push %eax <== NOT EXECUTED
10fb3a: e8 69 0d 01 00 call 1208a8 <__udivdi3> <== NOT EXECUTED
10fb3f: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
/*
* Compute the media block number. Drivers work with media block number not
* the block number a BD may have as this depends on the block size set by
* the user.
*/
*media_block_ptr = rtems_bdbuf_media_block (dd, block) + dd->start;
10fb42: 8b 56 18 mov 0x18(%esi),%edx
10fb45: 01 c2 add %eax,%edx
*/
if (rtems_bdbuf_tracer)
printf ("bdbuf:get: %" PRIu32 " (%" PRIu32 ") (dev = %08x)\n",
media_block, block, (unsigned) dd->dev);
bd = rtems_bdbuf_get_buffer_for_access (dd, media_block);
10fb47: 89 f0 mov %esi,%eax
10fb49: e8 ee f1 ff ff call 10ed3c <rtems_bdbuf_get_buffer_for_access>
10fb4e: 89 c3 mov %eax,%ebx
switch (bd->state)
10fb50: 8b 40 20 mov 0x20(%eax),%eax
10fb53: 83 f8 02 cmp $0x2,%eax
10fb56: 74 0c je 10fb64 <rtems_bdbuf_get+0x5b>
10fb58: 83 f8 07 cmp $0x7,%eax
10fb5b: 74 1b je 10fb78 <rtems_bdbuf_get+0x6f>
10fb5d: 83 f8 01 cmp $0x1,%eax
10fb60: 75 1f jne 10fb81 <rtems_bdbuf_get+0x78> <== NEVER TAKEN
10fb62: eb 09 jmp 10fb6d <rtems_bdbuf_get+0x64>
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
10fb64: c7 43 20 03 00 00 00 movl $0x3,0x20(%ebx)
10fb6b: eb 07 jmp 10fb74 <rtems_bdbuf_get+0x6b>
10fb6d: c7 43 20 05 00 00 00 movl $0x5,0x20(%ebx)
10fb74: 31 f6 xor %esi,%esi
10fb76: eb 1a jmp 10fb92 <rtems_bdbuf_get+0x89>
10fb78: c7 43 20 04 00 00 00 movl $0x4,0x20(%ebx)
10fb7f: eb f3 jmp 10fb74 <rtems_bdbuf_get+0x6b>
* record of this so just gets the block to fill.
*/
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_MODIFIED);
break;
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_2);
10fb81: ba 1e 00 00 42 mov $0x4200001e,%edx <== NOT EXECUTED
10fb86: e8 50 e8 ff ff call 10e3db <rtems_bdbuf_fatal> <== NOT EXECUTED
*/
*media_block_ptr = rtems_bdbuf_media_block (dd, block) + dd->start;
}
else
{
sc = RTEMS_INVALID_ID;
10fb8b: be 04 00 00 00 mov $0x4,%esi <== NOT EXECUTED
rtems_bdbuf_get (rtems_disk_device *dd,
rtems_blkdev_bnum block,
rtems_bdbuf_buffer **bd_ptr)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_bdbuf_buffer *bd = NULL;
10fb90: 31 db xor %ebx,%ebx <== NOT EXECUTED
rtems_bdbuf_show_users ("get", bd);
rtems_bdbuf_show_usage ();
}
}
rtems_bdbuf_unlock_cache ();
10fb92: e8 79 e8 ff ff call 10e410 <rtems_bdbuf_unlock_cache>
*bd_ptr = bd;
10fb97: 8b 45 10 mov 0x10(%ebp),%eax
10fb9a: 89 18 mov %ebx,(%eax)
return sc;
}
10fb9c: 89 f0 mov %esi,%eax
10fb9e: 8d 65 f8 lea -0x8(%ebp),%esp
10fba1: 5b pop %ebx
10fba2: 5e pop %esi
10fba3: 5d pop %ebp
10fba4: c3 ret
0010ed3c <rtems_bdbuf_get_buffer_for_access>:
static rtems_bdbuf_buffer *
rtems_bdbuf_get_buffer_for_access (rtems_disk_device *dd,
rtems_blkdev_bnum block)
{
10ed3c: 55 push %ebp
10ed3d: 89 e5 mov %esp,%ebp
10ed3f: 57 push %edi
10ed40: 56 push %esi
10ed41: 53 push %ebx
10ed42: 83 ec 0c sub $0xc,%esp
10ed45: 89 c6 mov %eax,%esi
10ed47: 89 d7 mov %edx,%edi
rtems_bdbuf_buffer *bd = NULL;
do
{
bd = rtems_bdbuf_avl_search (&bdbuf_cache.tree, dd, block);
10ed49: 89 f9 mov %edi,%ecx
10ed4b: 89 f2 mov %esi,%edx
10ed4d: a1 fc 20 13 00 mov 0x1320fc,%eax
10ed52: e8 82 f8 ff ff call 10e5d9 <rtems_bdbuf_avl_search.isra.1>
10ed57: 89 c3 mov %eax,%ebx
if (bd != NULL)
10ed59: 85 c0 test %eax,%eax
10ed5b: 74 7e je 10eddb <rtems_bdbuf_get_buffer_for_access+0x9f>
{
if (bd->group->bds_per_group != dd->bds_per_group)
10ed5d: 8b 40 28 mov 0x28(%eax),%eax
10ed60: 8b 56 34 mov 0x34(%esi),%edx
10ed63: 39 50 08 cmp %edx,0x8(%eax)
10ed66: 0f 84 91 00 00 00 je 10edfd <rtems_bdbuf_get_buffer_for_access+0xc1>
static bool
rtems_bdbuf_wait_for_recycle (rtems_bdbuf_buffer *bd)
{
while (true)
{
switch (bd->state)
10ed6c: 8b 43 20 mov 0x20(%ebx),%eax
10ed6f: 83 f8 0a cmp $0xa,%eax
10ed72: 77 60 ja 10edd4 <rtems_bdbuf_get_buffer_for_access+0x98><== NEVER TAKEN
10ed74: ff 24 85 1c 32 12 00 jmp *0x12321c(,%eax,4)
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
10ed7b: c7 43 20 08 00 00 00 movl $0x8,0x20(%ebx) <== NOT EXECUTED
)
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
10ed82: 8b 13 mov (%ebx),%edx <== NOT EXECUTED
previous = the_node->previous;
10ed84: 8b 43 04 mov 0x4(%ebx),%eax <== NOT EXECUTED
next->previous = previous;
10ed87: 89 42 04 mov %eax,0x4(%edx) <== NOT EXECUTED
previous->next = next;
10ed8a: 89 10 mov %edx,(%eax) <== NOT EXECUTED
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
Chain_Node *old_last = tail->previous;
10ed8c: a1 20 21 13 00 mov 0x132120,%eax <== NOT EXECUTED
the_node->next = tail;
10ed91: c7 03 1c 21 13 00 movl $0x13211c,(%ebx) <== NOT EXECUTED
tail->previous = the_node;
10ed97: 89 1d 20 21 13 00 mov %ebx,0x132120 <== NOT EXECUTED
old_last->next = the_node;
10ed9d: 89 18 mov %ebx,(%eax) <== NOT EXECUTED
the_node->previous = old_last;
10ed9f: 89 43 04 mov %eax,0x4(%ebx) <== NOT EXECUTED
rtems_bdbuf_request_sync_for_modified_buffer (rtems_bdbuf_buffer *bd)
{
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_SYNC);
rtems_chain_extract_unprotected (&bd->link);
rtems_chain_append_unprotected (&bdbuf_cache.sync, &bd->link);
rtems_bdbuf_wake_swapper ();
10eda2: e8 79 f6 ff ff call 10e420 <rtems_bdbuf_wake_swapper><== NOT EXECUTED
10eda7: eb c3 jmp 10ed6c <rtems_bdbuf_get_buffer_for_access+0x30><== NOT EXECUTED
case RTEMS_BDBUF_STATE_MODIFIED:
rtems_bdbuf_request_sync_for_modified_buffer (bd);
break;
case RTEMS_BDBUF_STATE_CACHED:
case RTEMS_BDBUF_STATE_EMPTY:
if (bd->waiters == 0)
10eda9: 83 7b 24 00 cmpl $0x0,0x24(%ebx)
10edad: 0f 84 8d 00 00 00 je 10ee40 <rtems_bdbuf_get_buffer_for_access+0x104><== NEVER TAKEN
* It is essential that we wait here without a special wait count and
* without the group in use. Otherwise we could trigger a wait ping
* pong with another recycle waiter. The state of the buffer is
* arbitrary afterwards.
*/
rtems_bdbuf_anonymous_wait (&bdbuf_cache.buffer_waiters);
10edb3: b8 34 21 13 00 mov $0x132134,%eax
10edb8: e8 50 f7 ff ff call 10e50d <rtems_bdbuf_anonymous_wait>
10edbd: eb 8a jmp 10ed49 <rtems_bdbuf_get_buffer_for_access+0xd>
}
case RTEMS_BDBUF_STATE_ACCESS_CACHED:
case RTEMS_BDBUF_STATE_ACCESS_EMPTY:
case RTEMS_BDBUF_STATE_ACCESS_MODIFIED:
case RTEMS_BDBUF_STATE_ACCESS_PURGED:
rtems_bdbuf_wait (bd, &bdbuf_cache.access_waiters);
10edbf: ba 24 21 13 00 mov $0x132124,%edx
10edc4: eb 05 jmp 10edcb <rtems_bdbuf_get_buffer_for_access+0x8f>
break;
case RTEMS_BDBUF_STATE_SYNC:
case RTEMS_BDBUF_STATE_TRANSFER:
case RTEMS_BDBUF_STATE_TRANSFER_PURGED:
rtems_bdbuf_wait (bd, &bdbuf_cache.transfer_waiters);
10edc6: ba 2c 21 13 00 mov $0x13212c,%edx <== NOT EXECUTED
10edcb: 89 d8 mov %ebx,%eax
10edcd: e8 96 f7 ff ff call 10e568 <rtems_bdbuf_wait>
10edd2: eb 98 jmp 10ed6c <rtems_bdbuf_get_buffer_for_access+0x30>
break;
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_8);
10edd4: ba 06 00 00 42 mov $0x42000006,%edx <== NOT EXECUTED
10edd9: eb 60 jmp 10ee3b <rtems_bdbuf_get_buffer_for_access+0xff><== NOT EXECUTED
bd = NULL;
}
}
else
{
bd = rtems_bdbuf_get_buffer_from_lru_list (dd, block);
10eddb: 89 fa mov %edi,%edx
10eddd: 89 f0 mov %esi,%eax
10eddf: e8 21 fc ff ff call 10ea05 <rtems_bdbuf_get_buffer_from_lru_list>
10ede4: 89 c3 mov %eax,%ebx
if (bd == NULL)
10ede6: 85 c0 test %eax,%eax
10ede8: 75 13 jne 10edfd <rtems_bdbuf_get_buffer_for_access+0xc1>
}
static void
rtems_bdbuf_wait_for_buffer (void)
{
if (!rtems_chain_is_empty (&bdbuf_cache.modified))
10edea: 81 3d 0c 21 13 00 10 cmpl $0x132110,0x13210c
10edf1: 21 13 00
10edf4: 74 bd je 10edb3 <rtems_bdbuf_get_buffer_for_access+0x77>
rtems_bdbuf_wake_swapper ();
10edf6: e8 25 f6 ff ff call 10e420 <rtems_bdbuf_wake_swapper>
10edfb: eb b6 jmp 10edb3 <rtems_bdbuf_get_buffer_for_access+0x77>
static void
rtems_bdbuf_wait_for_access (rtems_bdbuf_buffer *bd)
{
while (true)
{
switch (bd->state)
10edfd: 8b 43 20 mov 0x20(%ebx),%eax
10ee00: 8d 50 ff lea -0x1(%eax),%edx
10ee03: 83 fa 09 cmp $0x9,%edx
10ee06: 77 2e ja 10ee36 <rtems_bdbuf_get_buffer_for_access+0xfa><== NEVER TAKEN
10ee08: ff 24 95 48 32 12 00 jmp *0x123248(,%edx,4)
void rtems_bdbuf_reset_device_stats (rtems_disk_device *dd)
{
rtems_bdbuf_lock_cache ();
memset (&dd->stats, 0, sizeof(dd->stats));
rtems_bdbuf_unlock_cache ();
}
10ee0f: 8b 43 28 mov 0x28(%ebx),%eax
}
static void
rtems_bdbuf_group_release (rtems_bdbuf_buffer *bd)
{
--bd->group->users;
10ee12: ff 48 0c decl 0xc(%eax)
)
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
10ee15: 8b 13 mov (%ebx),%edx
previous = the_node->previous;
10ee17: 8b 43 04 mov 0x4(%ebx),%eax
next->previous = previous;
10ee1a: 89 42 04 mov %eax,0x4(%edx)
previous->next = next;
10ee1d: 89 10 mov %edx,(%eax)
10ee1f: eb 3c jmp 10ee5d <rtems_bdbuf_get_buffer_for_access+0x121>
return;
case RTEMS_BDBUF_STATE_ACCESS_CACHED:
case RTEMS_BDBUF_STATE_ACCESS_EMPTY:
case RTEMS_BDBUF_STATE_ACCESS_MODIFIED:
case RTEMS_BDBUF_STATE_ACCESS_PURGED:
rtems_bdbuf_wait (bd, &bdbuf_cache.access_waiters);
10ee21: ba 24 21 13 00 mov $0x132124,%edx
10ee26: eb 05 jmp 10ee2d <rtems_bdbuf_get_buffer_for_access+0xf1>
break;
case RTEMS_BDBUF_STATE_SYNC:
case RTEMS_BDBUF_STATE_TRANSFER:
case RTEMS_BDBUF_STATE_TRANSFER_PURGED:
rtems_bdbuf_wait (bd, &bdbuf_cache.transfer_waiters);
10ee28: ba 2c 21 13 00 mov $0x13212c,%edx
10ee2d: 89 d8 mov %ebx,%eax
10ee2f: e8 34 f7 ff ff call 10e568 <rtems_bdbuf_wait>
10ee34: eb c7 jmp 10edfd <rtems_bdbuf_get_buffer_for_access+0xc1>
break;
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_7);
10ee36: ba 05 00 00 42 mov $0x42000005,%edx <== NOT EXECUTED
10ee3b: e8 9b f5 ff ff call 10e3db <rtems_bdbuf_fatal> <== NOT EXECUTED
{
if (bd->group->bds_per_group != dd->bds_per_group)
{
if (rtems_bdbuf_wait_for_recycle (bd))
{
rtems_bdbuf_remove_from_tree_and_lru_list (bd);
10ee40: 89 d8 mov %ebx,%eax <== NOT EXECUTED
10ee42: e8 8a fb ff ff call 10e9d1 <rtems_bdbuf_remove_from_tree_and_lru_list><== NOT EXECUTED
rtems_bdbuf_make_free_and_add_to_lru_list (bd);
10ee47: 89 d8 mov %ebx,%eax <== NOT EXECUTED
10ee49: e8 c3 fa ff ff call 10e911 <rtems_bdbuf_make_free_and_add_to_lru_list><== NOT EXECUTED
rtems_bdbuf_wake (&bdbuf_cache.buffer_waiters);
10ee4e: b8 34 21 13 00 mov $0x132134,%eax <== NOT EXECUTED
10ee53: e8 ad f7 ff ff call 10e605 <rtems_bdbuf_wake> <== NOT EXECUTED
10ee58: e9 ec fe ff ff jmp 10ed49 <rtems_bdbuf_get_buffer_for_access+0xd><== NOT EXECUTED
void rtems_bdbuf_reset_device_stats (rtems_disk_device *dd)
{
rtems_bdbuf_lock_cache ();
memset (&dd->stats, 0, sizeof(dd->stats));
rtems_bdbuf_unlock_cache ();
}
10ee5d: 8b 43 28 mov 0x28(%ebx),%eax
}
static void
rtems_bdbuf_group_obtain (rtems_bdbuf_buffer *bd)
{
++bd->group->users;
10ee60: ff 40 0c incl 0xc(%eax)
rtems_bdbuf_wait_for_access (bd);
rtems_bdbuf_group_obtain (bd);
return bd;
}
10ee63: 89 d8 mov %ebx,%eax
10ee65: 83 c4 0c add $0xc,%esp
10ee68: 5b pop %ebx
10ee69: 5e pop %esi
10ee6a: 5f pop %edi
10ee6b: 5d pop %ebp
10ee6c: c3 ret
0010ed06 <rtems_bdbuf_get_buffer_for_read_ahead>:
}
static rtems_bdbuf_buffer *
rtems_bdbuf_get_buffer_for_read_ahead (rtems_disk_device *dd,
rtems_blkdev_bnum block)
{
10ed06: 55 push %ebp
10ed07: 89 e5 mov %esp,%ebp
10ed09: 56 push %esi
10ed0a: 53 push %ebx
10ed0b: 89 c3 mov %eax,%ebx
10ed0d: 89 d6 mov %edx,%esi
rtems_bdbuf_buffer *bd = NULL;
bd = rtems_bdbuf_avl_search (&bdbuf_cache.tree, dd, block);
10ed0f: 89 d1 mov %edx,%ecx
10ed11: 89 c2 mov %eax,%edx
10ed13: a1 fc 20 13 00 mov 0x1320fc,%eax
10ed18: e8 bc f8 ff ff call 10e5d9 <rtems_bdbuf_avl_search.isra.1>
if (bd == NULL)
10ed1d: 85 c0 test %eax,%eax
10ed1f: 75 15 jne 10ed36 <rtems_bdbuf_get_buffer_for_read_ahead+0x30><== NEVER TAKEN
{
bd = rtems_bdbuf_get_buffer_from_lru_list (dd, block);
10ed21: 89 f2 mov %esi,%edx
10ed23: 89 d8 mov %ebx,%eax
10ed25: e8 db fc ff ff call 10ea05 <rtems_bdbuf_get_buffer_from_lru_list>
if (bd != NULL)
10ed2a: 85 c0 test %eax,%eax
10ed2c: 74 0a je 10ed38 <rtems_bdbuf_get_buffer_for_read_ahead+0x32><== NEVER TAKEN
void rtems_bdbuf_reset_device_stats (rtems_disk_device *dd)
{
rtems_bdbuf_lock_cache ();
memset (&dd->stats, 0, sizeof(dd->stats));
rtems_bdbuf_unlock_cache ();
}
10ed2e: 8b 50 28 mov 0x28(%eax),%edx
}
static void
rtems_bdbuf_group_obtain (rtems_bdbuf_buffer *bd)
{
++bd->group->users;
10ed31: ff 42 0c incl 0xc(%edx)
10ed34: eb 02 jmp 10ed38 <rtems_bdbuf_get_buffer_for_read_ahead+0x32>
else
/*
* The buffer is in the cache. So it is already available or in use, and
* thus no need for a read ahead.
*/
bd = NULL;
10ed36: 31 c0 xor %eax,%eax
return bd;
}
10ed38: 5b pop %ebx
10ed39: 5e pop %esi
10ed3a: 5d pop %ebp
10ed3b: c3 ret
0010ea05 <rtems_bdbuf_get_buffer_from_lru_list>:
}
static rtems_bdbuf_buffer *
rtems_bdbuf_get_buffer_from_lru_list (rtems_disk_device *dd,
rtems_blkdev_bnum block)
{
10ea05: 55 push %ebp
10ea06: 89 e5 mov %esp,%ebp
10ea08: 57 push %edi
10ea09: 56 push %esi
10ea0a: 53 push %ebx
10ea0b: 81 ec ac 00 00 00 sub $0xac,%esp
10ea11: 89 85 60 ff ff ff mov %eax,-0xa0(%ebp)
10ea17: 89 95 5c ff ff ff mov %edx,-0xa4(%ebp)
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_First(
Chain_Control *the_chain
)
{
return _Chain_Head( the_chain )->next;
10ea1d: 8b 35 00 21 13 00 mov 0x132100,%esi
rtems_chain_node *node = rtems_chain_first (&bdbuf_cache.lru);
while (!rtems_chain_is_tail (&bdbuf_cache.lru, node))
10ea23: e9 c8 02 00 00 jmp 10ecf0 <rtems_bdbuf_get_buffer_from_lru_list+0x2eb>
bd->group->bds_per_group, dd->bds_per_group);
/*
* If nobody waits for this BD, we may recycle it.
*/
if (bd->waiters == 0)
10ea28: 83 7e 24 00 cmpl $0x0,0x24(%esi)
10ea2c: 0f 85 bc 02 00 00 jne 10ecee <rtems_bdbuf_get_buffer_from_lru_list+0x2e9>
{
if (bd->group->bds_per_group == dd->bds_per_group)
10ea32: 8b 5e 28 mov 0x28(%esi),%ebx
10ea35: 8b 7b 08 mov 0x8(%ebx),%edi
10ea38: 8b 85 60 ff ff ff mov -0xa0(%ebp),%eax
10ea3e: 8b 48 34 mov 0x34(%eax),%ecx
10ea41: 39 cf cmp %ecx,%edi
10ea43: 75 0e jne 10ea53 <rtems_bdbuf_get_buffer_from_lru_list+0x4e>
{
rtems_bdbuf_remove_from_tree_and_lru_list (bd);
10ea45: 89 f0 mov %esi,%eax
10ea47: e8 85 ff ff ff call 10e9d1 <rtems_bdbuf_remove_from_tree_and_lru_list>
10ea4c: 89 f0 mov %esi,%eax
10ea4e: e9 ae 00 00 00 jmp 10eb01 <rtems_bdbuf_get_buffer_from_lru_list+0xfc>
empty_bd = bd;
}
else if (bd->group->users == 0)
10ea53: 83 7b 0c 00 cmpl $0x0,0xc(%ebx)
10ea57: 0f 85 91 02 00 00 jne 10ecee <rtems_bdbuf_get_buffer_from_lru_list+0x2e9>
group - bdbuf_cache.groups, group->bds_per_group,
new_bds_per_group);
bufs_per_bd = bdbuf_cache.max_bds_per_group / group->bds_per_group;
for (b = 0, bd = group->bdbuf;
10ea5d: 8b 53 10 mov 0x10(%ebx),%edx
10ea60: 89 95 64 ff ff ff mov %edx,-0x9c(%ebp)
if (rtems_bdbuf_tracer)
printf ("bdbuf:realloc: %tu: %zd -> %zd\n",
group - bdbuf_cache.groups, group->bds_per_group,
new_bds_per_group);
bufs_per_bd = bdbuf_cache.max_bds_per_group / group->bds_per_group;
10ea66: a1 e0 20 13 00 mov 0x1320e0,%eax
10ea6b: 31 d2 xor %edx,%edx
10ea6d: f7 f7 div %edi
for (b = 0, bd = group->bdbuf;
b < group->bds_per_group;
b++, bd += bufs_per_bd)
10ea6f: 6b c0 38 imul $0x38,%eax,%eax
10ea72: 89 85 58 ff ff ff mov %eax,-0xa8(%ebp)
group - bdbuf_cache.groups, group->bds_per_group,
new_bds_per_group);
bufs_per_bd = bdbuf_cache.max_bds_per_group / group->bds_per_group;
for (b = 0, bd = group->bdbuf;
10ea78: 31 ff xor %edi,%edi
10ea7a: eb 24 jmp 10eaa0 <rtems_bdbuf_get_buffer_from_lru_list+0x9b>
b < group->bds_per_group;
b++, bd += bufs_per_bd)
rtems_bdbuf_remove_from_tree_and_lru_list (bd);
10ea7c: 8b 85 64 ff ff ff mov -0x9c(%ebp),%eax
10ea82: 89 8d 54 ff ff ff mov %ecx,-0xac(%ebp)
10ea88: e8 44 ff ff ff call 10e9d1 <rtems_bdbuf_remove_from_tree_and_lru_list>
bufs_per_bd = bdbuf_cache.max_bds_per_group / group->bds_per_group;
for (b = 0, bd = group->bdbuf;
b < group->bds_per_group;
b++, bd += bufs_per_bd)
10ea8d: 47 inc %edi
10ea8e: 8b 95 58 ff ff ff mov -0xa8(%ebp),%edx
10ea94: 01 95 64 ff ff ff add %edx,-0x9c(%ebp)
10ea9a: 8b 8d 54 ff ff ff mov -0xac(%ebp),%ecx
group - bdbuf_cache.groups, group->bds_per_group,
new_bds_per_group);
bufs_per_bd = bdbuf_cache.max_bds_per_group / group->bds_per_group;
for (b = 0, bd = group->bdbuf;
10eaa0: 3b 7b 08 cmp 0x8(%ebx),%edi
10eaa3: 72 d7 jb 10ea7c <rtems_bdbuf_get_buffer_from_lru_list+0x77>
b < group->bds_per_group;
b++, bd += bufs_per_bd)
rtems_bdbuf_remove_from_tree_and_lru_list (bd);
group->bds_per_group = new_bds_per_group;
10eaa5: 89 4b 08 mov %ecx,0x8(%ebx)
bufs_per_bd = bdbuf_cache.max_bds_per_group / new_bds_per_group;
10eaa8: a1 e0 20 13 00 mov 0x1320e0,%eax
10eaad: 31 d2 xor %edx,%edx
10eaaf: f7 f1 div %ecx
for (b = 1, bd = group->bdbuf + bufs_per_bd;
10eab1: 6b d0 38 imul $0x38,%eax,%edx
10eab4: 8b 4b 10 mov 0x10(%ebx),%ecx
10eab7: 01 d1 add %edx,%ecx
10eab9: bf 01 00 00 00 mov $0x1,%edi
10eabe: eb 22 jmp 10eae2 <rtems_bdbuf_get_buffer_from_lru_list+0xdd>
b < group->bds_per_group;
b++, bd += bufs_per_bd)
rtems_bdbuf_make_free_and_add_to_lru_list (bd);
10eac0: 89 c8 mov %ecx,%eax
10eac2: 89 95 50 ff ff ff mov %edx,-0xb0(%ebp)
10eac8: 89 8d 54 ff ff ff mov %ecx,-0xac(%ebp)
10eace: e8 3e fe ff ff call 10e911 <rtems_bdbuf_make_free_and_add_to_lru_list>
group->bds_per_group = new_bds_per_group;
bufs_per_bd = bdbuf_cache.max_bds_per_group / new_bds_per_group;
for (b = 1, bd = group->bdbuf + bufs_per_bd;
b < group->bds_per_group;
b++, bd += bufs_per_bd)
10ead3: 47 inc %edi
10ead4: 8b 95 50 ff ff ff mov -0xb0(%ebp),%edx
10eada: 8b 8d 54 ff ff ff mov -0xac(%ebp),%ecx
10eae0: 01 d1 add %edx,%ecx
rtems_bdbuf_remove_from_tree_and_lru_list (bd);
group->bds_per_group = new_bds_per_group;
bufs_per_bd = bdbuf_cache.max_bds_per_group / new_bds_per_group;
for (b = 1, bd = group->bdbuf + bufs_per_bd;
10eae2: 3b 7b 08 cmp 0x8(%ebx),%edi
10eae5: 72 d9 jb 10eac0 <rtems_bdbuf_get_buffer_from_lru_list+0xbb>
b < group->bds_per_group;
b++, bd += bufs_per_bd)
rtems_bdbuf_make_free_and_add_to_lru_list (bd);
if (b > 1)
10eae7: 83 ff 01 cmp $0x1,%edi
10eaea: 76 0a jbe 10eaf6 <rtems_bdbuf_get_buffer_from_lru_list+0xf1>
rtems_bdbuf_wake (&bdbuf_cache.buffer_waiters);
10eaec: b8 34 21 13 00 mov $0x132134,%eax
10eaf1: e8 0f fb ff ff call 10e605 <rtems_bdbuf_wake>
return group->bdbuf;
10eaf6: 8b 43 10 mov 0x10(%ebx),%eax
}
else if (bd->group->users == 0)
empty_bd = rtems_bdbuf_group_realloc (bd->group, dd->bds_per_group);
}
if (empty_bd != NULL)
10eaf9: 85 c0 test %eax,%eax
10eafb: 0f 84 ed 01 00 00 je 10ecee <rtems_bdbuf_get_buffer_from_lru_list+0x2e9><== NEVER TAKEN
static void
rtems_bdbuf_setup_empty_buffer (rtems_bdbuf_buffer *bd,
rtems_disk_device *dd,
rtems_blkdev_bnum block)
{
bd->dd = dd ;
10eb01: 8b 8d 60 ff ff ff mov -0xa0(%ebp),%ecx
10eb07: 89 48 14 mov %ecx,0x14(%eax)
bd->block = block;
10eb0a: 8b 95 5c ff ff ff mov -0xa4(%ebp),%edx
10eb10: 89 50 18 mov %edx,0x18(%eax)
bd->avl.left = NULL;
10eb13: c7 40 08 00 00 00 00 movl $0x0,0x8(%eax)
bd->avl.right = NULL;
10eb1a: c7 40 0c 00 00 00 00 movl $0x0,0xc(%eax)
bd->waiters = 0;
10eb21: c7 40 24 00 00 00 00 movl $0x0,0x24(%eax)
rtems_bdbuf_buffer* node)
{
const rtems_disk_device *dd = node->dd;
rtems_blkdev_bnum block = node->block;
rtems_bdbuf_buffer* p = *root;
10eb28: 8b 15 fc 20 13 00 mov 0x1320fc,%edx
rtems_bdbuf_buffer* q;
rtems_bdbuf_buffer* p1;
rtems_bdbuf_buffer* p2;
rtems_bdbuf_buffer* buf_stack[RTEMS_BDBUF_AVL_MAX_HEIGHT];
rtems_bdbuf_buffer** buf_prev = buf_stack;
10eb2e: 8d 8d 68 ff ff ff lea -0x98(%ebp),%ecx
10eb34: 89 8d 58 ff ff ff mov %ecx,-0xa8(%ebp)
bool modified = false;
if (p == NULL)
10eb3a: 85 d2 test %edx,%edx
10eb3c: 75 57 jne 10eb95 <rtems_bdbuf_get_buffer_from_lru_list+0x190>
{
*root = node;
10eb3e: a3 fc 20 13 00 mov %eax,0x1320fc
node->avl.left = NULL;
10eb43: c7 40 08 00 00 00 00 movl $0x0,0x8(%eax)
node->avl.right = NULL;
10eb4a: c7 40 0c 00 00 00 00 movl $0x0,0xc(%eax)
node->avl.bal = 0;
10eb51: c6 40 11 00 movb $0x0,0x11(%eax)
10eb55: e9 8b 01 00 00 jmp 10ece5 <rtems_bdbuf_get_buffer_from_lru_list+0x2e0>
while (p != NULL)
{
*buf_prev++ = p;
if (((uintptr_t) p->dd < (uintptr_t) dd)
|| ((p->dd == dd) && (p->block < block)))
10eb5a: 75 21 jne 10eb7d <rtems_bdbuf_get_buffer_from_lru_list+0x178><== NEVER TAKEN
10eb5c: 8b 9d 5c ff ff ff mov -0xa4(%ebp),%ebx
10eb62: 39 5a 18 cmp %ebx,0x18(%edx)
10eb65: 73 10 jae 10eb77 <rtems_bdbuf_get_buffer_from_lru_list+0x172>
{
p->avl.cache = 1;
10eb67: c6 42 10 01 movb $0x1,0x10(%edx)
q = p->avl.right;
10eb6b: 8b 4a 0c mov 0xc(%edx),%ecx
if (q == NULL)
10eb6e: 85 c9 test %ecx,%ecx
10eb70: 75 1b jne 10eb8d <rtems_bdbuf_get_buffer_from_lru_list+0x188>
{
q = node;
p->avl.right = q = node;
10eb72: 89 42 0c mov %eax,0xc(%edx)
10eb75: eb 38 jmp 10ebaf <rtems_bdbuf_get_buffer_from_lru_list+0x1aa>
break;
}
}
else if ((p->dd != dd) || (p->block != block))
10eb77: 0f 84 5b 01 00 00 je 10ecd8 <rtems_bdbuf_get_buffer_from_lru_list+0x2d3><== NEVER TAKEN
{
p->avl.cache = -1;
10eb7d: c6 42 10 ff movb $0xff,0x10(%edx)
q = p->avl.left;
10eb81: 8b 4a 08 mov 0x8(%edx),%ecx
if (q == NULL)
10eb84: 85 c9 test %ecx,%ecx
10eb86: 75 05 jne 10eb8d <rtems_bdbuf_get_buffer_from_lru_list+0x188>
{
q = node;
p->avl.left = q;
10eb88: 89 42 08 mov %eax,0x8(%edx)
10eb8b: eb 22 jmp 10ebaf <rtems_bdbuf_get_buffer_from_lru_list+0x1aa>
rtems_bdbuf_buffer* buf_stack[RTEMS_BDBUF_AVL_MAX_HEIGHT];
rtems_bdbuf_buffer** buf_prev = buf_stack;
bool modified = false;
if (p == NULL)
10eb8d: 89 b5 58 ff ff ff mov %esi,-0xa8(%ebp)
10eb93: 89 ca mov %ecx,%edx
return 0;
}
while (p != NULL)
{
*buf_prev++ = p;
10eb95: 8b bd 58 ff ff ff mov -0xa8(%ebp),%edi
10eb9b: 89 17 mov %edx,(%edi)
10eb9d: 89 fe mov %edi,%esi
10eb9f: 83 c6 04 add $0x4,%esi
if (((uintptr_t) p->dd < (uintptr_t) dd)
10eba2: 8b 8d 60 ff ff ff mov -0xa0(%ebp),%ecx
10eba8: 39 4a 14 cmp %ecx,0x14(%edx)
10ebab: 72 ba jb 10eb67 <rtems_bdbuf_get_buffer_from_lru_list+0x162><== NEVER TAKEN
10ebad: eb ab jmp 10eb5a <rtems_bdbuf_get_buffer_from_lru_list+0x155>
}
p = q;
}
q->avl.left = q->avl.right = NULL;
10ebaf: c7 40 0c 00 00 00 00 movl $0x0,0xc(%eax)
10ebb6: c7 40 08 00 00 00 00 movl $0x0,0x8(%eax)
q->avl.bal = 0;
10ebbd: c6 40 11 00 movb $0x0,0x11(%eax)
default:
break;
}
}
q = p;
if (buf_prev > buf_stack)
10ebc1: 8d 9d 68 ff ff ff lea -0x98(%ebp),%ebx
10ebc7: 89 9d 60 ff ff ff mov %ebx,-0xa0(%ebp)
10ebcd: eb 02 jmp 10ebd1 <rtems_bdbuf_get_buffer_from_lru_list+0x1cc>
q->avl.left = q->avl.right = NULL;
q->avl.bal = 0;
modified = true;
buf_prev--;
while (modified)
10ebcf: 89 f2 mov %esi,%edx
{
if (p->avl.cache == -1)
10ebd1: 80 7a 10 ff cmpb $0xff,0x10(%edx)
10ebd5: 8a 4a 11 mov 0x11(%edx),%cl
10ebd8: 75 57 jne 10ec31 <rtems_bdbuf_get_buffer_from_lru_list+0x22c>
{
switch (p->avl.bal)
10ebda: 84 c9 test %cl,%cl
10ebdc: 74 0f je 10ebed <rtems_bdbuf_get_buffer_from_lru_list+0x1e8>
10ebde: 80 f9 01 cmp $0x1,%cl
10ebe1: 74 5b je 10ec3e <rtems_bdbuf_get_buffer_from_lru_list+0x239>
10ebe3: fe c1 inc %cl
10ebe5: 0f 85 ac 00 00 00 jne 10ec97 <rtems_bdbuf_get_buffer_from_lru_list+0x292><== NEVER TAKEN
10ebeb: eb 09 jmp 10ebf6 <rtems_bdbuf_get_buffer_from_lru_list+0x1f1>
p->avl.bal = 0;
modified = false;
break;
case 0:
p->avl.bal = -1;
10ebed: c6 42 11 ff movb $0xff,0x11(%edx)
10ebf1: e9 a1 00 00 00 jmp 10ec97 <rtems_bdbuf_get_buffer_from_lru_list+0x292>
break;
case -1:
p1 = p->avl.left;
10ebf6: 8b 72 08 mov 0x8(%edx),%esi
if (p1->avl.bal == -1) /* simple LL-turn */
10ebf9: 80 7e 11 ff cmpb $0xff,0x11(%esi)
10ebfd: 8b 4e 0c mov 0xc(%esi),%ecx
10ec00: 75 08 jne 10ec0a <rtems_bdbuf_get_buffer_from_lru_list+0x205>
{
p->avl.left = p1->avl.right;
10ec02: 89 4a 08 mov %ecx,0x8(%edx)
p1->avl.right = p;
10ec05: 89 56 0c mov %edx,0xc(%esi)
10ec08: eb 52 jmp 10ec5c <rtems_bdbuf_get_buffer_from_lru_list+0x257>
p = p1;
}
else /* double LR-turn */
{
p2 = p1->avl.right;
p1->avl.right = p2->avl.left;
10ec0a: 8b 59 08 mov 0x8(%ecx),%ebx
10ec0d: 89 5e 0c mov %ebx,0xc(%esi)
p2->avl.left = p1;
10ec10: 89 71 08 mov %esi,0x8(%ecx)
p->avl.left = p2->avl.right;
10ec13: 8b 59 0c mov 0xc(%ecx),%ebx
10ec16: 89 5a 08 mov %ebx,0x8(%edx)
p2->avl.right = p;
10ec19: 89 51 0c mov %edx,0xc(%ecx)
if (p2->avl.bal == -1) p->avl.bal = +1; else p->avl.bal = 0;
10ec1c: 80 79 11 ff cmpb $0xff,0x11(%ecx)
10ec20: 0f 94 42 11 sete 0x11(%edx)
if (p2->avl.bal == +1) p1->avl.bal = -1; else p1->avl.bal = 0;
10ec24: 80 79 11 01 cmpb $0x1,0x11(%ecx)
10ec28: 0f 95 c2 setne %dl
10ec2b: 4a dec %edx
10ec2c: 88 56 11 mov %dl,0x11(%esi)
10ec2f: eb 5c jmp 10ec8d <rtems_bdbuf_get_buffer_from_lru_list+0x288>
break;
}
}
else
{
switch (p->avl.bal)
10ec31: 84 c9 test %cl,%cl
10ec33: 74 0f je 10ec44 <rtems_bdbuf_get_buffer_from_lru_list+0x23f>
10ec35: 80 f9 01 cmp $0x1,%cl
10ec38: 74 10 je 10ec4a <rtems_bdbuf_get_buffer_from_lru_list+0x245>
10ec3a: fe c1 inc %cl
10ec3c: 75 59 jne 10ec97 <rtems_bdbuf_get_buffer_from_lru_list+0x292><== NEVER TAKEN
{
case -1:
p->avl.bal = 0;
10ec3e: c6 42 11 00 movb $0x0,0x11(%edx)
10ec42: eb 4f jmp 10ec93 <rtems_bdbuf_get_buffer_from_lru_list+0x28e>
modified = false;
break;
case 0:
p->avl.bal = 1;
10ec44: c6 42 11 01 movb $0x1,0x11(%edx)
10ec48: eb 4d jmp 10ec97 <rtems_bdbuf_get_buffer_from_lru_list+0x292>
break;
case 1:
p1 = p->avl.right;
10ec4a: 8b 72 0c mov 0xc(%edx),%esi
if (p1->avl.bal == 1) /* simple RR-turn */
10ec4d: 80 7e 11 01 cmpb $0x1,0x11(%esi)
10ec51: 8b 4e 08 mov 0x8(%esi),%ecx
10ec54: 75 0e jne 10ec64 <rtems_bdbuf_get_buffer_from_lru_list+0x25f>
{
p->avl.right = p1->avl.left;
10ec56: 89 4a 0c mov %ecx,0xc(%edx)
p1->avl.left = p;
10ec59: 89 56 08 mov %edx,0x8(%esi)
p->avl.bal = 0;
10ec5c: c6 42 11 00 movb $0x0,0x11(%edx)
10ec60: 89 f1 mov %esi,%ecx
10ec62: eb 29 jmp 10ec8d <rtems_bdbuf_get_buffer_from_lru_list+0x288>
p = p1;
}
else /* double RL-turn */
{
p2 = p1->avl.left;
p1->avl.left = p2->avl.right;
10ec64: 8b 59 0c mov 0xc(%ecx),%ebx
10ec67: 89 5e 08 mov %ebx,0x8(%esi)
p2->avl.right = p1;
10ec6a: 89 71 0c mov %esi,0xc(%ecx)
p->avl.right = p2->avl.left;
10ec6d: 8b 59 08 mov 0x8(%ecx),%ebx
10ec70: 89 5a 0c mov %ebx,0xc(%edx)
p2->avl.left = p;
10ec73: 89 51 08 mov %edx,0x8(%ecx)
if (p2->avl.bal == +1) p->avl.bal = -1; else p->avl.bal = 0;
10ec76: 80 79 11 01 cmpb $0x1,0x11(%ecx)
10ec7a: 0f 95 c3 setne %bl
10ec7d: 89 df mov %ebx,%edi
10ec7f: 4f dec %edi
10ec80: 89 fb mov %edi,%ebx
10ec82: 88 5a 11 mov %bl,0x11(%edx)
if (p2->avl.bal == -1) p1->avl.bal = +1; else p1->avl.bal = 0;
10ec85: 80 79 11 ff cmpb $0xff,0x11(%ecx)
10ec89: 0f 94 46 11 sete 0x11(%esi)
p = p2;
}
p->avl.bal = 0;
10ec8d: c6 41 11 00 movb $0x0,0x11(%ecx)
10ec91: 89 ca mov %ecx,%edx
modified = false;
10ec93: 31 c9 xor %ecx,%ecx
10ec95: eb 02 jmp 10ec99 <rtems_bdbuf_get_buffer_from_lru_list+0x294>
break;
}
}
else
{
switch (p->avl.bal)
10ec97: b1 01 mov $0x1,%cl
default:
break;
}
}
q = p;
if (buf_prev > buf_stack)
10ec99: 8b bd 60 ff ff ff mov -0xa0(%ebp),%edi
10ec9f: 39 bd 58 ff ff ff cmp %edi,-0xa8(%ebp)
10eca5: 76 1f jbe 10ecc6 <rtems_bdbuf_get_buffer_from_lru_list+0x2c1>
{
p = *--buf_prev;
10eca7: 83 ad 58 ff ff ff 04 subl $0x4,-0xa8(%ebp)
10ecae: 8b 9d 58 ff ff ff mov -0xa8(%ebp),%ebx
10ecb4: 8b 33 mov (%ebx),%esi
if (p->avl.cache == -1)
10ecb6: 80 7e 10 ff cmpb $0xff,0x10(%esi)
10ecba: 75 05 jne 10ecc1 <rtems_bdbuf_get_buffer_from_lru_list+0x2bc>
{
p->avl.left = q;
10ecbc: 89 56 08 mov %edx,0x8(%esi)
10ecbf: eb 0d jmp 10ecce <rtems_bdbuf_get_buffer_from_lru_list+0x2c9>
}
else
{
p->avl.right = q;
10ecc1: 89 56 0c mov %edx,0xc(%esi)
10ecc4: eb 08 jmp 10ecce <rtems_bdbuf_get_buffer_from_lru_list+0x2c9>
}
}
else
{
*root = p;
10ecc6: 89 15 fc 20 13 00 mov %edx,0x1320fc
10eccc: eb 17 jmp 10ece5 <rtems_bdbuf_get_buffer_from_lru_list+0x2e0>
q->avl.left = q->avl.right = NULL;
q->avl.bal = 0;
modified = true;
buf_prev--;
while (modified)
10ecce: 84 c9 test %cl,%cl
10ecd0: 0f 85 f9 fe ff ff jne 10ebcf <rtems_bdbuf_get_buffer_from_lru_list+0x1ca>
10ecd6: eb 0d jmp 10ece5 <rtems_bdbuf_get_buffer_from_lru_list+0x2e0>
bd->avl.left = NULL;
bd->avl.right = NULL;
bd->waiters = 0;
if (rtems_bdbuf_avl_insert (&bdbuf_cache.tree, bd) != 0)
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_RECYCLE);
10ecd8: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10ecdb: 68 1b 00 00 42 push $0x4200001b <== NOT EXECUTED
10ece0: e8 2b c6 ff ff call 10b310 <rtems_fatal_error_occurred><== NOT EXECUTED
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
10ece5: c7 40 20 01 00 00 00 movl $0x1,0x20(%eax)
10ecec: eb 10 jmp 10ecfe <rtems_bdbuf_get_buffer_from_lru_list+0x2f9>
void rtems_bdbuf_reset_device_stats (rtems_disk_device *dd)
{
rtems_bdbuf_lock_cache ();
memset (&dd->stats, 0, sizeof(dd->stats));
rtems_bdbuf_unlock_cache ();
}
10ecee: 8b 36 mov (%esi),%esi
rtems_bdbuf_get_buffer_from_lru_list (rtems_disk_device *dd,
rtems_blkdev_bnum block)
{
rtems_chain_node *node = rtems_chain_first (&bdbuf_cache.lru);
while (!rtems_chain_is_tail (&bdbuf_cache.lru, node))
10ecf0: 81 fe 04 21 13 00 cmp $0x132104,%esi
10ecf6: 0f 85 2c fd ff ff jne 10ea28 <rtems_bdbuf_get_buffer_from_lru_list+0x23>
}
node = rtems_chain_next (node);
}
return NULL;
10ecfc: 31 c0 xor %eax,%eax
}
10ecfe: 8d 65 f4 lea -0xc(%ebp),%esp
10ed01: 5b pop %ebx
10ed02: 5e pop %esi
10ed03: 5f pop %edi
10ed04: 5d pop %ebp
10ed05: c3 ret
0010f6fa <rtems_bdbuf_init>:
if (rtems_bdbuf_tracer)
printf ("bdbuf:init\n");
if (rtems_interrupt_is_in_progress())
return RTEMS_CALLED_FROM_ISR;
10f6fa: b8 12 00 00 00 mov $0x12,%eax
rtems_mode prev_mode;
if (rtems_bdbuf_tracer)
printf ("bdbuf:init\n");
if (rtems_interrupt_is_in_progress())
10f6ff: 83 3d 70 29 13 00 00 cmpl $0x0,0x132970
10f706: 0f 85 fc 03 00 00 jne 10fb08 <rtems_bdbuf_init+0x40e><== NEVER TAKEN
*
* @return rtems_status_code The initialisation status.
*/
rtems_status_code
rtems_bdbuf_init (void)
{
10f70c: 55 push %ebp
10f70d: 89 e5 mov %esp,%ebp
10f70f: 57 push %edi
10f710: 56 push %esi
10f711: 53 push %ebx
10f712: 83 ec 2c sub $0x2c,%esp
return RTEMS_CALLED_FROM_ISR;
/*
* Check the configuration table values.
*/
if ((bdbuf_config.buffer_max % bdbuf_config.buffer_min) != 0)
10f715: a1 74 14 12 00 mov 0x121474,%eax
10f71a: 31 d2 xor %edx,%edx
10f71c: f7 35 70 14 12 00 divl 0x121470
10f722: 89 55 e4 mov %edx,-0x1c(%ebp)
10f725: 89 c3 mov %eax,%ebx
return RTEMS_INVALID_NUMBER;
10f727: b8 0a 00 00 00 mov $0xa,%eax
return RTEMS_CALLED_FROM_ISR;
/*
* Check the configuration table values.
*/
if ((bdbuf_config.buffer_max % bdbuf_config.buffer_min) != 0)
10f72c: 85 d2 test %edx,%edx
10f72e: 0f 85 cd 03 00 00 jne 10fb01 <rtems_bdbuf_init+0x407><== NEVER TAKEN
/*
* We use a special variable to manage the initialisation incase we have
* completing threads doing this. You may get errors if the another thread
* makes a call and we have not finished initialisation.
*/
prev_mode = rtems_bdbuf_disable_preemption ();
10f734: e8 6b ed ff ff call 10e4a4 <rtems_bdbuf_disable_preemption>
10f739: 89 c2 mov %eax,%edx
if (bdbuf_cache.initialised)
10f73b: 80 3d 55 21 13 00 00 cmpb $0x0,0x132155
10f742: 74 0f je 10f753 <rtems_bdbuf_init+0x59> <== ALWAYS TAKEN
{
rtems_bdbuf_restore_preemption (prev_mode);
10f744: e8 94 ed ff ff call 10e4dd <rtems_bdbuf_restore_preemption><== NOT EXECUTED
return RTEMS_RESOURCE_IN_USE;
10f749: b8 0c 00 00 00 mov $0xc,%eax <== NOT EXECUTED
10f74e: e9 ae 03 00 00 jmp 10fb01 <rtems_bdbuf_init+0x407><== NOT EXECUTED
}
memset(&bdbuf_cache, 0, sizeof(bdbuf_cache));
10f753: be c0 20 13 00 mov $0x1320c0,%esi
10f758: b9 26 00 00 00 mov $0x26,%ecx
10f75d: 89 f7 mov %esi,%edi
10f75f: 8b 45 e4 mov -0x1c(%ebp),%eax
10f762: f3 ab rep stos %eax,%es:(%edi)
bdbuf_cache.initialised = true;
10f764: c6 05 55 21 13 00 01 movb $0x1,0x132155
rtems_bdbuf_restore_preemption (prev_mode);
10f76b: 89 d0 mov %edx,%eax
10f76d: e8 6b ed ff ff call 10e4dd <rtems_bdbuf_restore_preemption>
*/
cache_aligment = 32; /* FIXME rtems_cache_get_data_line_size() */
if (cache_aligment <= 0)
cache_aligment = CPU_ALIGNMENT;
bdbuf_cache.sync_device = BDBUF_INVALID_DEV;
10f772: c7 05 f8 20 13 00 00 movl $0x0,0x1320f8
10f779: 00 00 00
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
10f77c: c7 05 c8 20 13 00 cc movl $0x1320cc,0x1320c8
10f783: 20 13 00
head->previous = NULL;
10f786: c7 05 cc 20 13 00 00 movl $0x0,0x1320cc
10f78d: 00 00 00
tail->previous = head;
10f790: c7 05 d0 20 13 00 c8 movl $0x1320c8,0x1320d0
10f797: 20 13 00
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
10f79a: c7 05 00 21 13 00 04 movl $0x132104,0x132100
10f7a1: 21 13 00
head->previous = NULL;
10f7a4: c7 05 04 21 13 00 00 movl $0x0,0x132104
10f7ab: 00 00 00
tail->previous = head;
10f7ae: c7 05 08 21 13 00 00 movl $0x132100,0x132108
10f7b5: 21 13 00
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
10f7b8: c7 05 0c 21 13 00 10 movl $0x132110,0x13210c
10f7bf: 21 13 00
head->previous = NULL;
10f7c2: c7 05 10 21 13 00 00 movl $0x0,0x132110
10f7c9: 00 00 00
tail->previous = head;
10f7cc: c7 05 14 21 13 00 0c movl $0x13210c,0x132114
10f7d3: 21 13 00
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
10f7d6: c7 05 18 21 13 00 1c movl $0x13211c,0x132118
10f7dd: 21 13 00
head->previous = NULL;
10f7e0: c7 05 1c 21 13 00 00 movl $0x0,0x13211c
10f7e7: 00 00 00
tail->previous = head;
10f7ea: c7 05 20 21 13 00 18 movl $0x132118,0x132120
10f7f1: 21 13 00
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
10f7f4: c7 05 48 21 13 00 4c movl $0x13214c,0x132148
10f7fb: 21 13 00
head->previous = NULL;
10f7fe: c7 05 4c 21 13 00 00 movl $0x0,0x13214c
10f805: 00 00 00
tail->previous = head;
10f808: c7 05 50 21 13 00 48 movl $0x132148,0x132150
10f80f: 21 13 00
rtems_chain_initialize_empty (&bdbuf_cache.read_ahead_chain);
/*
* Create the locks for the cache.
*/
sc = rtems_semaphore_create (rtems_build_name ('B', 'D', 'C', 'l'),
10f812: 83 ec 0c sub $0xc,%esp
10f815: 68 e8 20 13 00 push $0x1320e8
10f81a: 6a 00 push $0x0
10f81c: 6a 54 push $0x54
10f81e: 6a 01 push $0x1
10f820: 68 6c 43 44 42 push $0x4244436c
10f825: e8 da b2 ff ff call 10ab04 <rtems_semaphore_create>
1, RTEMS_BDBUF_CACHE_LOCK_ATTRIBS, 0,
&bdbuf_cache.lock);
if (sc != RTEMS_SUCCESSFUL)
10f82a: 83 c4 20 add $0x20,%esp
10f82d: 85 c0 test %eax,%eax
10f82f: 0f 85 1e 02 00 00 jne 10fa53 <rtems_bdbuf_init+0x359><== NEVER TAKEN
goto error;
rtems_bdbuf_lock_cache ();
10f835: e8 91 eb ff ff call 10e3cb <rtems_bdbuf_lock_cache>
sc = rtems_semaphore_create (rtems_build_name ('B', 'D', 'C', 's'),
10f83a: 83 ec 0c sub $0xc,%esp
10f83d: 68 ec 20 13 00 push $0x1320ec
10f842: 6a 00 push $0x0
10f844: 6a 54 push $0x54
10f846: 6a 01 push $0x1
10f848: 68 73 43 44 42 push $0x42444373
10f84d: e8 b2 b2 ff ff call 10ab04 <rtems_semaphore_create>
1, RTEMS_BDBUF_CACHE_LOCK_ATTRIBS, 0,
&bdbuf_cache.sync_lock);
if (sc != RTEMS_SUCCESSFUL)
10f852: 83 c4 20 add $0x20,%esp
10f855: 85 c0 test %eax,%eax
10f857: 0f 85 f6 01 00 00 jne 10fa53 <rtems_bdbuf_init+0x359><== NEVER TAKEN
goto error;
sc = rtems_semaphore_create (rtems_build_name ('B', 'D', 'C', 'a'),
10f85d: 83 ec 0c sub $0xc,%esp
10f860: 68 28 21 13 00 push $0x132128
10f865: 6a 00 push $0x0
10f867: 6a 24 push $0x24
10f869: 6a 00 push $0x0
10f86b: 68 61 43 44 42 push $0x42444361
10f870: e8 8f b2 ff ff call 10ab04 <rtems_semaphore_create>
0, RTEMS_BDBUF_CACHE_WAITER_ATTRIBS, 0,
&bdbuf_cache.access_waiters.sema);
if (sc != RTEMS_SUCCESSFUL)
10f875: 83 c4 20 add $0x20,%esp
10f878: 85 c0 test %eax,%eax
10f87a: 0f 85 d3 01 00 00 jne 10fa53 <rtems_bdbuf_init+0x359><== NEVER TAKEN
goto error;
sc = rtems_semaphore_create (rtems_build_name ('B', 'D', 'C', 't'),
10f880: 83 ec 0c sub $0xc,%esp
10f883: 68 30 21 13 00 push $0x132130
10f888: 6a 00 push $0x0
10f88a: 6a 24 push $0x24
10f88c: 6a 00 push $0x0
10f88e: 68 74 43 44 42 push $0x42444374
10f893: e8 6c b2 ff ff call 10ab04 <rtems_semaphore_create>
0, RTEMS_BDBUF_CACHE_WAITER_ATTRIBS, 0,
&bdbuf_cache.transfer_waiters.sema);
if (sc != RTEMS_SUCCESSFUL)
10f898: 83 c4 20 add $0x20,%esp
10f89b: 85 c0 test %eax,%eax
10f89d: 0f 85 b0 01 00 00 jne 10fa53 <rtems_bdbuf_init+0x359><== NEVER TAKEN
goto error;
sc = rtems_semaphore_create (rtems_build_name ('B', 'D', 'C', 'b'),
10f8a3: 83 ec 0c sub $0xc,%esp
10f8a6: 68 38 21 13 00 push $0x132138
10f8ab: 6a 00 push $0x0
10f8ad: 6a 24 push $0x24
10f8af: 6a 00 push $0x0
10f8b1: 68 62 43 44 42 push $0x42444362
10f8b6: e8 49 b2 ff ff call 10ab04 <rtems_semaphore_create>
0, RTEMS_BDBUF_CACHE_WAITER_ATTRIBS, 0,
&bdbuf_cache.buffer_waiters.sema);
if (sc != RTEMS_SUCCESSFUL)
10f8bb: 83 c4 20 add $0x20,%esp
10f8be: 85 c0 test %eax,%eax
10f8c0: 0f 85 8d 01 00 00 jne 10fa53 <rtems_bdbuf_init+0x359><== NEVER TAKEN
/*
* Compute the various number of elements in the cache.
*/
bdbuf_cache.buffer_min_count =
bdbuf_config.size / bdbuf_config.buffer_min;
10f8c6: a1 6c 14 12 00 mov 0x12146c,%eax
10f8cb: 31 d2 xor %edx,%edx
10f8cd: f7 35 70 14 12 00 divl 0x121470
10f8d3: 89 c6 mov %eax,%esi
goto error;
/*
* Compute the various number of elements in the cache.
*/
bdbuf_cache.buffer_min_count =
10f8d5: a3 dc 20 13 00 mov %eax,0x1320dc
bdbuf_config.size / bdbuf_config.buffer_min;
bdbuf_cache.max_bds_per_group =
10f8da: 89 1d e0 20 13 00 mov %ebx,0x1320e0
bdbuf_config.buffer_max / bdbuf_config.buffer_min;
bdbuf_cache.group_count =
bdbuf_cache.buffer_min_count / bdbuf_cache.max_bds_per_group;
10f8e0: 31 d2 xor %edx,%edx
10f8e2: f7 f3 div %ebx
10f8e4: 89 c3 mov %eax,%ebx
*/
bdbuf_cache.buffer_min_count =
bdbuf_config.size / bdbuf_config.buffer_min;
bdbuf_cache.max_bds_per_group =
bdbuf_config.buffer_max / bdbuf_config.buffer_min;
bdbuf_cache.group_count =
10f8e6: a3 3c 21 13 00 mov %eax,0x13213c
bdbuf_cache.buffer_min_count / bdbuf_cache.max_bds_per_group;
/*
* Allocate the memory for the buffer descriptors.
*/
bdbuf_cache.bds = calloc (sizeof (rtems_bdbuf_buffer),
10f8eb: 52 push %edx
10f8ec: 52 push %edx
10f8ed: 56 push %esi
10f8ee: 6a 38 push $0x38
10f8f0: e8 c3 79 ff ff call 1072b8 <calloc>
10f8f5: a3 d4 20 13 00 mov %eax,0x1320d4
bdbuf_cache.buffer_min_count);
if (!bdbuf_cache.bds)
10f8fa: 83 c4 10 add $0x10,%esp
10f8fd: 85 c0 test %eax,%eax
10f8ff: 0f 84 4e 01 00 00 je 10fa53 <rtems_bdbuf_init+0x359><== NEVER TAKEN
goto error;
/*
* Allocate the memory for the buffer descriptors.
*/
bdbuf_cache.groups = calloc (sizeof (rtems_bdbuf_group),
10f905: 50 push %eax
10f906: 50 push %eax
10f907: 53 push %ebx
10f908: 6a 14 push $0x14
10f90a: e8 a9 79 ff ff call 1072b8 <calloc>
10f90f: a3 40 21 13 00 mov %eax,0x132140
bdbuf_cache.group_count);
if (!bdbuf_cache.groups)
10f914: 83 c4 10 add $0x10,%esp
10f917: 85 c0 test %eax,%eax
10f919: 0f 84 34 01 00 00 je 10fa53 <rtems_bdbuf_init+0x359><== NEVER TAKEN
* aligned. It is possible to free the memory allocated by rtems_memalign()
* with free(). Return 0 if allocated.
*
* The memory allocate allows a
*/
if (rtems_memalign ((void **) &bdbuf_cache.buffers,
10f91f: 50 push %eax
10f920: 0f af 35 70 14 12 00 imul 0x121470,%esi
10f927: 56 push %esi
10f928: 6a 20 push $0x20
10f92a: 68 d8 20 13 00 push $0x1320d8
10f92f: e8 48 18 00 00 call 11117c <rtems_memalign>
10f934: 83 c4 10 add $0x10,%esp
10f937: 85 c0 test %eax,%eax
10f939: 0f 85 14 01 00 00 jne 10fa53 <rtems_bdbuf_init+0x359><== NEVER TAKEN
/*
* The cache is empty after opening so we need to add all the buffers to it
* and initialise the groups.
*/
for (b = 0, group = bdbuf_cache.groups,
10f93f: 8b 1d 40 21 13 00 mov 0x132140,%ebx
bd = bdbuf_cache.bds, buffer = bdbuf_cache.buffers;
10f945: 8b 3d d4 20 13 00 mov 0x1320d4,%edi
10f94b: 8b 15 d8 20 13 00 mov 0x1320d8,%edx
10f951: 89 55 e0 mov %edx,-0x20(%ebp)
b < bdbuf_cache.buffer_min_count;
10f954: a1 dc 20 13 00 mov 0x1320dc,%eax
10f959: 89 45 d8 mov %eax,-0x28(%ebp)
bd->group = group;
bd->buffer = buffer;
rtems_chain_append_unprotected (&bdbuf_cache.lru, &bd->link);
if ((b % bdbuf_cache.max_bds_per_group) ==
10f95c: 8b 15 e0 20 13 00 mov 0x1320e0,%edx
10f962: 89 55 dc mov %edx,-0x24(%ebp)
(bdbuf_cache.max_bds_per_group - 1))
10f965: 4a dec %edx
10f966: 89 55 d4 mov %edx,-0x2c(%ebp)
/*
* The cache is empty after opening so we need to add all the buffers to it
* and initialise the groups.
*/
for (b = 0, group = bdbuf_cache.groups,
bd = bdbuf_cache.bds, buffer = bdbuf_cache.buffers;
10f969: 89 f9 mov %edi,%ecx
/*
* The cache is empty after opening so we need to add all the buffers to it
* and initialise the groups.
*/
for (b = 0, group = bdbuf_cache.groups,
10f96b: 89 de mov %ebx,%esi
10f96d: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
10f974: eb 45 jmp 10f9bb <rtems_bdbuf_init+0x2c1>
bd = bdbuf_cache.bds, buffer = bdbuf_cache.buffers;
b < bdbuf_cache.buffer_min_count;
b++, bd++, buffer += bdbuf_config.buffer_min)
{
bd->dd = BDBUF_INVALID_DEV;
10f976: c7 41 14 00 00 00 00 movl $0x0,0x14(%ecx)
bd->group = group;
10f97d: 89 71 28 mov %esi,0x28(%ecx)
bd->buffer = buffer;
10f980: 8b 45 e0 mov -0x20(%ebp),%eax
10f983: 89 41 1c mov %eax,0x1c(%ecx)
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
Chain_Node *old_last = tail->previous;
10f986: a1 08 21 13 00 mov 0x132108,%eax
the_node->next = tail;
10f98b: c7 01 04 21 13 00 movl $0x132104,(%ecx)
tail->previous = the_node;
10f991: 89 0d 08 21 13 00 mov %ecx,0x132108
old_last->next = the_node;
10f997: 89 08 mov %ecx,(%eax)
the_node->previous = old_last;
10f999: 89 41 04 mov %eax,0x4(%ecx)
rtems_chain_append_unprotected (&bdbuf_cache.lru, &bd->link);
if ((b % bdbuf_cache.max_bds_per_group) ==
10f99c: 8b 45 e4 mov -0x1c(%ebp),%eax
10f99f: 31 d2 xor %edx,%edx
10f9a1: f7 75 dc divl -0x24(%ebp)
10f9a4: 3b 55 d4 cmp -0x2c(%ebp),%edx
10f9a7: 75 03 jne 10f9ac <rtems_bdbuf_init+0x2b2>
(bdbuf_cache.max_bds_per_group - 1))
group++;
10f9a9: 83 c6 14 add $0x14,%esi
* and initialise the groups.
*/
for (b = 0, group = bdbuf_cache.groups,
bd = bdbuf_cache.bds, buffer = bdbuf_cache.buffers;
b < bdbuf_cache.buffer_min_count;
b++, bd++, buffer += bdbuf_config.buffer_min)
10f9ac: ff 45 e4 incl -0x1c(%ebp)
10f9af: 83 c1 38 add $0x38,%ecx
10f9b2: 8b 15 70 14 12 00 mov 0x121470,%edx
10f9b8: 01 55 e0 add %edx,-0x20(%ebp)
/*
* The cache is empty after opening so we need to add all the buffers to it
* and initialise the groups.
*/
for (b = 0, group = bdbuf_cache.groups,
10f9bb: 8b 45 d8 mov -0x28(%ebp),%eax
10f9be: 39 45 e4 cmp %eax,-0x1c(%ebp)
10f9c1: 75 b3 jne 10f976 <rtems_bdbuf_init+0x27c>
}
for (b = 0,
group = bdbuf_cache.groups,
bd = bdbuf_cache.bds;
b < bdbuf_cache.group_count;
10f9c3: 8b 0d 3c 21 13 00 mov 0x13213c,%ecx
b++,
group++,
bd += bdbuf_cache.max_bds_per_group)
{
group->bds_per_group = bdbuf_cache.max_bds_per_group;
10f9c9: 8b 15 e0 20 13 00 mov 0x1320e0,%edx
group = bdbuf_cache.groups,
bd = bdbuf_cache.bds;
b < bdbuf_cache.group_count;
b++,
group++,
bd += bdbuf_cache.max_bds_per_group)
10f9cf: 6b f2 38 imul $0x38,%edx,%esi
10f9d2: 31 c0 xor %eax,%eax
10f9d4: eb 0c jmp 10f9e2 <rtems_bdbuf_init+0x2e8>
{
group->bds_per_group = bdbuf_cache.max_bds_per_group;
10f9d6: 89 53 08 mov %edx,0x8(%ebx)
group->bdbuf = bd;
10f9d9: 89 7b 10 mov %edi,0x10(%ebx)
for (b = 0,
group = bdbuf_cache.groups,
bd = bdbuf_cache.bds;
b < bdbuf_cache.group_count;
b++,
10f9dc: 40 inc %eax
group++,
10f9dd: 83 c3 14 add $0x14,%ebx
bd += bdbuf_cache.max_bds_per_group)
10f9e0: 01 f7 add %esi,%edi
if ((b % bdbuf_cache.max_bds_per_group) ==
(bdbuf_cache.max_bds_per_group - 1))
group++;
}
for (b = 0,
10f9e2: 39 c8 cmp %ecx,%eax
10f9e4: 75 f0 jne 10f9d6 <rtems_bdbuf_init+0x2dc>
/*
* Create and start swapout task. This task will create and manage the worker
* threads.
*/
bdbuf_cache.swapout_enabled = true;
10f9e6: c6 05 c4 20 13 00 01 movb $0x1,0x1320c4
sc = rtems_bdbuf_create_task (rtems_build_name('B', 'S', 'W', 'P'),
10f9ed: 50 push %eax
10f9ee: 50 push %eax
10f9ef: 68 c0 20 13 00 push $0x1320c0
10f9f4: 6a 00 push $0x0
10f9f6: b9 7b f1 10 00 mov $0x10f17b,%ecx
10f9fb: 8b 15 54 14 12 00 mov 0x121454,%edx
10fa01: b8 50 57 53 42 mov $0x42535750,%eax
10fa06: e8 23 ec ff ff call 10e62e <rtems_bdbuf_create_task.constprop.14>
bdbuf_config.swapout_priority,
RTEMS_BDBUF_SWAPOUT_TASK_PRIORITY_DEFAULT,
rtems_bdbuf_swapout_task,
0,
&bdbuf_cache.swapout);
if (sc != RTEMS_SUCCESSFUL)
10fa0b: 83 c4 10 add $0x10,%esp
10fa0e: 85 c0 test %eax,%eax
10fa10: 75 41 jne 10fa53 <rtems_bdbuf_init+0x359><== NEVER TAKEN
goto error;
if (bdbuf_config.max_read_ahead_blocks > 0)
10fa12: 83 3d 4c 14 12 00 00 cmpl $0x0,0x12144c
10fa19: 75 0c jne 10fa27 <rtems_bdbuf_init+0x32d>
&bdbuf_cache.read_ahead_task);
if (sc != RTEMS_SUCCESSFUL)
goto error;
}
rtems_bdbuf_unlock_cache ();
10fa1b: e8 f0 e9 ff ff call 10e410 <rtems_bdbuf_unlock_cache>
return RTEMS_SUCCESSFUL;
10fa20: 31 c0 xor %eax,%eax
10fa22: e9 da 00 00 00 jmp 10fb01 <rtems_bdbuf_init+0x407>
if (sc != RTEMS_SUCCESSFUL)
goto error;
if (bdbuf_config.max_read_ahead_blocks > 0)
{
bdbuf_cache.read_ahead_enabled = true;
10fa27: c6 05 54 21 13 00 01 movb $0x1,0x132154
sc = rtems_bdbuf_create_task (rtems_build_name('B', 'R', 'D', 'A'),
10fa2e: 50 push %eax
10fa2f: 50 push %eax
10fa30: 68 44 21 13 00 push $0x132144
10fa35: 6a 00 push $0x0
10fa37: b9 7e f5 10 00 mov $0x10f57e,%ecx
10fa3c: 8b 15 78 14 12 00 mov 0x121478,%edx
10fa42: b8 41 44 52 42 mov $0x42524441,%eax
10fa47: e8 e2 eb ff ff call 10e62e <rtems_bdbuf_create_task.constprop.14>
bdbuf_config.read_ahead_priority,
RTEMS_BDBUF_READ_AHEAD_TASK_PRIORITY_DEFAULT,
rtems_bdbuf_read_ahead_task,
0,
&bdbuf_cache.read_ahead_task);
if (sc != RTEMS_SUCCESSFUL)
10fa4c: 83 c4 10 add $0x10,%esp
10fa4f: 85 c0 test %eax,%eax
10fa51: 74 c8 je 10fa1b <rtems_bdbuf_init+0x321><== ALWAYS TAKEN
return RTEMS_SUCCESSFUL;
error:
if (bdbuf_cache.read_ahead_task != 0)
10fa53: a1 44 21 13 00 mov 0x132144,%eax <== NOT EXECUTED
10fa58: 85 c0 test %eax,%eax <== NOT EXECUTED
10fa5a: 74 0c je 10fa68 <rtems_bdbuf_init+0x36e><== NOT EXECUTED
rtems_task_delete (bdbuf_cache.read_ahead_task);
10fa5c: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10fa5f: 50 push %eax <== NOT EXECUTED
10fa60: e8 87 b5 ff ff call 10afec <rtems_task_delete> <== NOT EXECUTED
10fa65: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
if (bdbuf_cache.swapout != 0)
10fa68: a1 c0 20 13 00 mov 0x1320c0,%eax <== NOT EXECUTED
10fa6d: 85 c0 test %eax,%eax <== NOT EXECUTED
10fa6f: 74 0c je 10fa7d <rtems_bdbuf_init+0x383><== NOT EXECUTED
rtems_task_delete (bdbuf_cache.swapout);
10fa71: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10fa74: 50 push %eax <== NOT EXECUTED
10fa75: e8 72 b5 ff ff call 10afec <rtems_task_delete> <== NOT EXECUTED
10fa7a: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
free (bdbuf_cache.buffers);
10fa7d: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10fa80: ff 35 d8 20 13 00 pushl 0x1320d8 <== NOT EXECUTED
10fa86: e8 99 7a ff ff call 107524 <free> <== NOT EXECUTED
free (bdbuf_cache.groups);
10fa8b: 59 pop %ecx <== NOT EXECUTED
10fa8c: ff 35 40 21 13 00 pushl 0x132140 <== NOT EXECUTED
10fa92: e8 8d 7a ff ff call 107524 <free> <== NOT EXECUTED
free (bdbuf_cache.bds);
10fa97: 5b pop %ebx <== NOT EXECUTED
10fa98: ff 35 d4 20 13 00 pushl 0x1320d4 <== NOT EXECUTED
10fa9e: e8 81 7a ff ff call 107524 <free> <== NOT EXECUTED
rtems_semaphore_delete (bdbuf_cache.buffer_waiters.sema);
10faa3: 5e pop %esi <== NOT EXECUTED
10faa4: ff 35 38 21 13 00 pushl 0x132138 <== NOT EXECUTED
10faaa: e8 f5 b1 ff ff call 10aca4 <rtems_semaphore_delete><== NOT EXECUTED
rtems_semaphore_delete (bdbuf_cache.access_waiters.sema);
10faaf: 5f pop %edi <== NOT EXECUTED
10fab0: ff 35 28 21 13 00 pushl 0x132128 <== NOT EXECUTED
10fab6: e8 e9 b1 ff ff call 10aca4 <rtems_semaphore_delete><== NOT EXECUTED
rtems_semaphore_delete (bdbuf_cache.transfer_waiters.sema);
10fabb: 58 pop %eax <== NOT EXECUTED
10fabc: ff 35 30 21 13 00 pushl 0x132130 <== NOT EXECUTED
10fac2: e8 dd b1 ff ff call 10aca4 <rtems_semaphore_delete><== NOT EXECUTED
rtems_semaphore_delete (bdbuf_cache.sync_lock);
10fac7: 58 pop %eax <== NOT EXECUTED
10fac8: ff 35 ec 20 13 00 pushl 0x1320ec <== NOT EXECUTED
10face: e8 d1 b1 ff ff call 10aca4 <rtems_semaphore_delete><== NOT EXECUTED
if (bdbuf_cache.lock != 0)
10fad3: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
10fad6: 83 3d e8 20 13 00 00 cmpl $0x0,0x1320e8 <== NOT EXECUTED
10fadd: 74 16 je 10faf5 <rtems_bdbuf_init+0x3fb><== NOT EXECUTED
{
rtems_bdbuf_unlock_cache ();
10fadf: e8 2c e9 ff ff call 10e410 <rtems_bdbuf_unlock_cache><== NOT EXECUTED
rtems_semaphore_delete (bdbuf_cache.lock);
10fae4: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10fae7: ff 35 e8 20 13 00 pushl 0x1320e8 <== NOT EXECUTED
10faed: e8 b2 b1 ff ff call 10aca4 <rtems_semaphore_delete><== NOT EXECUTED
10faf2: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
bdbuf_cache.initialised = false;
10faf5: c6 05 55 21 13 00 00 movb $0x0,0x132155 <== NOT EXECUTED
return RTEMS_UNSATISFIED;
10fafc: b8 0d 00 00 00 mov $0xd,%eax <== NOT EXECUTED
}
10fb01: 8d 65 f4 lea -0xc(%ebp),%esp
10fb04: 5b pop %ebx
10fb05: 5e pop %esi
10fb06: 5f pop %edi
10fb07: 5d pop %ebp
10fb08: c3 ret
0010e3a3 <rtems_bdbuf_lock>:
* @param lock The mutex to lock.
* @param fatal_error_code The error code if the call fails.
*/
static void
rtems_bdbuf_lock (rtems_id lock, uint32_t fatal_error_code)
{
10e3a3: 55 push %ebp
10e3a4: 89 e5 mov %esp,%ebp
10e3a6: 53 push %ebx
10e3a7: 83 ec 08 sub $0x8,%esp
10e3aa: 89 d3 mov %edx,%ebx
rtems_status_code sc = rtems_semaphore_obtain (lock,
10e3ac: 6a 00 push $0x0
10e3ae: 6a 00 push $0x0
10e3b0: 50 push %eax
10e3b1: e8 7e c9 ff ff call 10ad34 <rtems_semaphore_obtain>
RTEMS_WAIT,
RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
10e3b6: 83 c4 10 add $0x10,%esp
10e3b9: 85 c0 test %eax,%eax
10e3bb: 74 09 je 10e3c6 <rtems_bdbuf_lock+0x23> <== ALWAYS TAKEN
rtems_fatal_error_occurred (fatal_error_code);
10e3bd: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10e3c0: 53 push %ebx <== NOT EXECUTED
10e3c1: e8 4a cf ff ff call 10b310 <rtems_fatal_error_occurred><== NOT EXECUTED
}
10e3c6: 8b 5d fc mov -0x4(%ebp),%ebx
10e3c9: c9 leave
10e3ca: c3 ret
0010ff21 <rtems_bdbuf_purge_dev>:
}
}
void
rtems_bdbuf_purge_dev (rtems_disk_device *dd)
{
10ff21: 55 push %ebp
10ff22: 89 e5 mov %esp,%ebp
10ff24: 57 push %edi
10ff25: 56 push %esi
10ff26: 53 push %ebx
10ff27: 81 ec 9c 00 00 00 sub $0x9c,%esp
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
10ff2d: 8d 85 5c ff ff ff lea -0xa4(%ebp),%eax
10ff33: 8d bd 60 ff ff ff lea -0xa0(%ebp),%edi
10ff39: 89 bd 5c ff ff ff mov %edi,-0xa4(%ebp)
head->previous = NULL;
10ff3f: c7 85 60 ff ff ff 00 movl $0x0,-0xa0(%ebp)
10ff46: 00 00 00
tail->previous = head;
10ff49: 89 85 64 ff ff ff mov %eax,-0x9c(%ebp)
rtems_chain_control purge_list;
rtems_chain_initialize_empty (&purge_list);
rtems_bdbuf_lock_cache ();
10ff4f: e8 77 e4 ff ff call 10e3cb <rtems_bdbuf_lock_cache>
}
static void
rtems_bdbuf_read_ahead_reset (rtems_disk_device *dd)
{
rtems_bdbuf_read_ahead_cancel (dd);
10ff54: 8b 45 08 mov 0x8(%ebp),%eax
10ff57: e8 2d f7 ff ff call 10f689 <rtems_bdbuf_read_ahead_cancel>
dd->read_ahead.trigger = RTEMS_DISK_READ_AHEAD_NO_TRIGGER;
10ff5c: 8b 45 08 mov 0x8(%ebp),%eax
10ff5f: c7 40 6c ff ff ff ff movl $0xffffffff,0x6c(%eax)
rtems_bdbuf_gather_for_purge (rtems_chain_control *purge_list,
const rtems_disk_device *dd)
{
rtems_bdbuf_buffer *stack [RTEMS_BDBUF_AVL_MAX_HEIGHT];
rtems_bdbuf_buffer **prev = stack;
rtems_bdbuf_buffer *cur = bdbuf_cache.tree;
10ff66: 8b 1d fc 20 13 00 mov 0x1320fc,%ebx
*prev = NULL;
10ff6c: c7 85 68 ff ff ff 00 movl $0x0,-0x98(%ebp)
10ff73: 00 00 00
static void
rtems_bdbuf_gather_for_purge (rtems_chain_control *purge_list,
const rtems_disk_device *dd)
{
rtems_bdbuf_buffer *stack [RTEMS_BDBUF_AVL_MAX_HEIGHT];
rtems_bdbuf_buffer **prev = stack;
10ff76: 8d b5 68 ff ff ff lea -0x98(%ebp),%esi
10ff7c: e9 98 00 00 00 jmp 110019 <rtems_bdbuf_purge_dev+0xf8>
*prev = NULL;
while (cur != NULL)
{
if (cur->dd == dd)
10ff81: 8b 45 08 mov 0x8(%ebp),%eax
10ff84: 39 43 14 cmp %eax,0x14(%ebx)
10ff87: 75 5e jne 10ffe7 <rtems_bdbuf_purge_dev+0xc6><== NEVER TAKEN
{
switch (cur->state)
10ff89: 83 7b 20 0a cmpl $0xa,0x20(%ebx)
10ff8d: 77 4b ja 10ffda <rtems_bdbuf_purge_dev+0xb9><== NEVER TAKEN
10ff8f: 8b 43 20 mov 0x20(%ebx),%eax
10ff92: ff 24 85 70 32 12 00 jmp *0x123270(,%eax,4)
case RTEMS_BDBUF_STATE_EMPTY:
case RTEMS_BDBUF_STATE_ACCESS_PURGED:
case RTEMS_BDBUF_STATE_TRANSFER_PURGED:
break;
case RTEMS_BDBUF_STATE_SYNC:
rtems_bdbuf_wake (&bdbuf_cache.transfer_waiters);
10ff99: b8 2c 21 13 00 mov $0x13212c,%eax
10ff9e: e8 62 e6 ff ff call 10e605 <rtems_bdbuf_wake>
void rtems_bdbuf_reset_device_stats (rtems_disk_device *dd)
{
rtems_bdbuf_lock_cache ();
memset (&dd->stats, 0, sizeof(dd->stats));
rtems_bdbuf_unlock_cache ();
}
10ffa3: 8b 43 28 mov 0x28(%ebx),%eax
}
static void
rtems_bdbuf_group_release (rtems_bdbuf_buffer *bd)
{
--bd->group->users;
10ffa6: ff 48 0c decl 0xc(%eax)
)
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
10ffa9: 8b 0b mov (%ebx),%ecx
previous = the_node->previous;
10ffab: 8b 43 04 mov 0x4(%ebx),%eax
next->previous = previous;
10ffae: 89 41 04 mov %eax,0x4(%ecx)
previous->next = next;
10ffb1: 89 08 mov %ecx,(%eax)
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
Chain_Node *old_last = tail->previous;
10ffb3: 8b 85 64 ff ff ff mov -0x9c(%ebp),%eax
the_node->next = tail;
10ffb9: 89 3b mov %edi,(%ebx)
tail->previous = the_node;
10ffbb: 89 9d 64 ff ff ff mov %ebx,-0x9c(%ebp)
old_last->next = the_node;
10ffc1: 89 18 mov %ebx,(%eax)
the_node->previous = old_last;
10ffc3: 89 43 04 mov %eax,0x4(%ebx)
10ffc6: eb 1f jmp 10ffe7 <rtems_bdbuf_purge_dev+0xc6>
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
10ffc8: c7 43 20 0a 00 00 00 movl $0xa,0x20(%ebx)
10ffcf: eb 16 jmp 10ffe7 <rtems_bdbuf_purge_dev+0xc6>
10ffd1: c7 43 20 06 00 00 00 movl $0x6,0x20(%ebx)
10ffd8: eb 0d jmp 10ffe7 <rtems_bdbuf_purge_dev+0xc6>
case RTEMS_BDBUF_STATE_ACCESS_EMPTY:
case RTEMS_BDBUF_STATE_ACCESS_MODIFIED:
rtems_bdbuf_set_state (cur, RTEMS_BDBUF_STATE_ACCESS_PURGED);
break;
default:
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_STATE_11);
10ffda: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10ffdd: 68 01 00 00 42 push $0x42000001 <== NOT EXECUTED
10ffe2: e8 29 b3 ff ff call 10b310 <rtems_fatal_error_occurred><== NOT EXECUTED
}
}
if (cur->avl.left != NULL)
10ffe7: 8b 43 08 mov 0x8(%ebx),%eax
10ffea: 85 c0 test %eax,%eax
10ffec: 74 02 je 10fff0 <rtems_bdbuf_purge_dev+0xcf>
10ffee: eb 07 jmp 10fff7 <rtems_bdbuf_purge_dev+0xd6>
/* Left */
++prev;
*prev = cur;
cur = cur->avl.left;
}
else if (cur->avl.right != NULL)
10fff0: 8b 43 0c mov 0xc(%ebx),%eax
10fff3: 85 c0 test %eax,%eax
10fff5: 74 0d je 110004 <rtems_bdbuf_purge_dev+0xe3>
{
/* Right */
++prev;
*prev = cur;
10fff7: 89 5e 04 mov %ebx,0x4(%esi)
cur = cur->avl.left;
}
else if (cur->avl.right != NULL)
{
/* Right */
++prev;
10fffa: 83 c6 04 add $0x4,%esi
10fffd: eb 18 jmp 110017 <rtems_bdbuf_purge_dev+0xf6>
while (*prev != NULL
&& (cur == (*prev)->avl.right || (*prev)->avl.right == NULL))
{
/* Up */
cur = *prev;
--prev;
10ffff: 83 ee 04 sub $0x4,%esi
110002: 89 c3 mov %eax,%ebx
*prev = cur;
cur = cur->avl.right;
}
else
{
while (*prev != NULL
110004: 8b 06 mov (%esi),%eax
110006: 85 c0 test %eax,%eax
110008: 74 0d je 110017 <rtems_bdbuf_purge_dev+0xf6>
&& (cur == (*prev)->avl.right || (*prev)->avl.right == NULL))
11000a: 8b 48 0c mov 0xc(%eax),%ecx
11000d: 39 cb cmp %ecx,%ebx
11000f: 74 ee je 10ffff <rtems_bdbuf_purge_dev+0xde>
110011: 85 c9 test %ecx,%ecx
110013: 74 ea je 10ffff <rtems_bdbuf_purge_dev+0xde>
cur = *prev;
--prev;
}
if (*prev != NULL)
/* Right */
cur = (*prev)->avl.right;
110015: 89 c8 mov %ecx,%eax
110017: 89 c3 mov %eax,%ebx
rtems_bdbuf_buffer **prev = stack;
rtems_bdbuf_buffer *cur = bdbuf_cache.tree;
*prev = NULL;
while (cur != NULL)
110019: 85 db test %ebx,%ebx
11001b: 0f 85 60 ff ff ff jne 10ff81 <rtems_bdbuf_purge_dev+0x60>
}
static void
rtems_bdbuf_purge_list (rtems_chain_control *purge_list)
{
bool wake_buffer_waiters = false;
110021: 31 f6 xor %esi,%esi
110023: eb 25 jmp 11004a <rtems_bdbuf_purge_dev+0x129>
while ((node = rtems_chain_get_unprotected (purge_list)) != NULL)
{
rtems_bdbuf_buffer *bd = (rtems_bdbuf_buffer *) node;
if (bd->waiters == 0)
110025: 8b 43 24 mov 0x24(%ebx),%eax
110028: 85 c0 test %eax,%eax
11002a: 75 05 jne 110031 <rtems_bdbuf_purge_dev+0x110>
wake_buffer_waiters = true;
11002c: be 01 00 00 00 mov $0x1,%esi
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
110031: c7 43 20 01 00 00 00 movl $0x1,0x20(%ebx)
static void
rtems_bdbuf_discard_buffer (rtems_bdbuf_buffer *bd)
{
rtems_bdbuf_make_empty (bd);
if (bd->waiters == 0)
110038: 85 c0 test %eax,%eax
11003a: 75 0e jne 11004a <rtems_bdbuf_purge_dev+0x129>
{
rtems_bdbuf_remove_from_tree (bd);
11003c: 89 d8 mov %ebx,%eax
11003e: e8 39 e6 ff ff call 10e67c <rtems_bdbuf_remove_from_tree>
rtems_bdbuf_make_free_and_add_to_lru_list (bd);
110043: 89 d8 mov %ebx,%eax
110045: e8 c7 e8 ff ff call 10e911 <rtems_bdbuf_make_free_and_add_to_lru_list>
11004a: 8d 85 5c ff ff ff lea -0xa4(%ebp),%eax
110050: e8 33 e3 ff ff call 10e388 <_Chain_Get_unprotected>
110055: 89 c3 mov %eax,%ebx
rtems_bdbuf_purge_list (rtems_chain_control *purge_list)
{
bool wake_buffer_waiters = false;
rtems_chain_node *node = NULL;
while ((node = rtems_chain_get_unprotected (purge_list)) != NULL)
110057: 85 c0 test %eax,%eax
110059: 75 ca jne 110025 <rtems_bdbuf_purge_dev+0x104>
wake_buffer_waiters = true;
rtems_bdbuf_discard_buffer (bd);
}
if (wake_buffer_waiters)
11005b: 89 f0 mov %esi,%eax
11005d: 84 c0 test %al,%al
11005f: 74 0a je 11006b <rtems_bdbuf_purge_dev+0x14a>
rtems_bdbuf_wake (&bdbuf_cache.buffer_waiters);
110061: b8 34 21 13 00 mov $0x132134,%eax
110066: e8 9a e5 ff ff call 10e605 <rtems_bdbuf_wake>
rtems_chain_initialize_empty (&purge_list);
rtems_bdbuf_lock_cache ();
rtems_bdbuf_read_ahead_reset (dd);
rtems_bdbuf_gather_for_purge (&purge_list, dd);
rtems_bdbuf_purge_list (&purge_list);
rtems_bdbuf_unlock_cache ();
11006b: e8 a0 e3 ff ff call 10e410 <rtems_bdbuf_unlock_cache>
}
110070: 8d 65 f4 lea -0xc(%ebp),%esp
110073: 5b pop %ebx
110074: 5e pop %esi
110075: 5f pop %edi
110076: 5d pop %ebp
110077: c3 ret
0010fba5 <rtems_bdbuf_read>:
rtems_status_code
rtems_bdbuf_read (rtems_disk_device *dd,
rtems_blkdev_bnum block,
rtems_bdbuf_buffer **bd_ptr)
{
10fba5: 55 push %ebp
10fba6: 89 e5 mov %esp,%ebp
10fba8: 57 push %edi
10fba9: 56 push %esi
10fbaa: 53 push %ebx
10fbab: 83 ec 1c sub $0x1c,%esp
10fbae: 8b 75 08 mov 0x8(%ebp),%esi
10fbb1: 8b 7d 0c mov 0xc(%ebp),%edi
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_bdbuf_buffer *bd = NULL;
rtems_blkdev_bnum media_block;
rtems_bdbuf_lock_cache ();
10fbb4: e8 12 e8 ff ff call 10e3cb <rtems_bdbuf_lock_cache>
rtems_blkdev_bnum block,
rtems_blkdev_bnum *media_block_ptr)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
if (block < dd->block_count)
10fbb9: 3b 7e 28 cmp 0x28(%esi),%edi
10fbbc: 0f 83 20 01 00 00 jae 10fce2 <rtems_bdbuf_read+0x13d><== NEVER TAKEN
}
static rtems_blkdev_bnum
rtems_bdbuf_media_block (const rtems_disk_device *dd, rtems_blkdev_bnum block)
{
if (dd->block_to_media_block_shift >= 0)
10fbc2: 8b 4e 30 mov 0x30(%esi),%ecx
return block << dd->block_to_media_block_shift;
10fbc5: 89 f8 mov %edi,%eax
}
static rtems_blkdev_bnum
rtems_bdbuf_media_block (const rtems_disk_device *dd, rtems_blkdev_bnum block)
{
if (dd->block_to_media_block_shift >= 0)
10fbc7: 85 c9 test %ecx,%ecx
10fbc9: 78 04 js 10fbcf <rtems_bdbuf_read+0x2a> <== NEVER TAKEN
return block << dd->block_to_media_block_shift;
10fbcb: d3 e0 shl %cl,%eax
10fbcd: eb 14 jmp 10fbe3 <rtems_bdbuf_read+0x3e>
/*
* Change the block number for the block size to the block number for the media
* block size. We have to use 64bit maths. There is no short cut here.
*/
return (rtems_blkdev_bnum)
((((uint64_t) block) * dd->block_size) / dd->media_block_size);
10fbcf: f7 66 24 mull 0x24(%esi) <== NOT EXECUTED
10fbd2: 8b 4e 20 mov 0x20(%esi),%ecx <== NOT EXECUTED
10fbd5: 31 db xor %ebx,%ebx <== NOT EXECUTED
10fbd7: 53 push %ebx <== NOT EXECUTED
10fbd8: 51 push %ecx <== NOT EXECUTED
10fbd9: 52 push %edx <== NOT EXECUTED
10fbda: 50 push %eax <== NOT EXECUTED
10fbdb: e8 c8 0c 01 00 call 1208a8 <__udivdi3> <== NOT EXECUTED
10fbe0: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
/*
* Compute the media block number. Drivers work with media block number not
* the block number a BD may have as this depends on the block size set by
* the user.
*/
*media_block_ptr = rtems_bdbuf_media_block (dd, block) + dd->start;
10fbe3: 8b 56 18 mov 0x18(%esi),%edx
10fbe6: 01 c2 add %eax,%edx
{
if (rtems_bdbuf_tracer)
printf ("bdbuf:read: %" PRIu32 " (%" PRIu32 ") (dev = %08x)\n",
media_block + dd->start, block, (unsigned) dd->dev);
bd = rtems_bdbuf_get_buffer_for_access (dd, media_block);
10fbe8: 89 f0 mov %esi,%eax
10fbea: e8 4d f1 ff ff call 10ed3c <rtems_bdbuf_get_buffer_for_access>
10fbef: 89 c3 mov %eax,%ebx
switch (bd->state)
10fbf1: 8b 40 20 mov 0x20(%eax),%eax
10fbf4: 83 f8 02 cmp $0x2,%eax
10fbf7: 74 0c je 10fc05 <rtems_bdbuf_read+0x60>
10fbf9: 83 f8 07 cmp $0x7,%eax
10fbfc: 74 13 je 10fc11 <rtems_bdbuf_read+0x6c>
10fbfe: 83 f8 01 cmp $0x1,%eax
10fc01: 75 64 jne 10fc67 <rtems_bdbuf_read+0xc2> <== NEVER TAKEN
10fc03: eb 1a jmp 10fc1f <rtems_bdbuf_read+0x7a>
{
case RTEMS_BDBUF_STATE_CACHED:
++dd->stats.read_hits;
10fc05: ff 46 44 incl 0x44(%esi)
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
10fc08: c7 43 20 03 00 00 00 movl $0x3,0x20(%ebx)
10fc0f: eb 0a jmp 10fc1b <rtems_bdbuf_read+0x76>
case RTEMS_BDBUF_STATE_CACHED:
++dd->stats.read_hits;
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_CACHED);
break;
case RTEMS_BDBUF_STATE_MODIFIED:
++dd->stats.read_hits;
10fc11: ff 46 44 incl 0x44(%esi)
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
10fc14: c7 43 20 04 00 00 00 movl $0x4,0x20(%ebx)
10fc1b: 31 d2 xor %edx,%edx
10fc1d: eb 54 jmp 10fc73 <rtems_bdbuf_read+0xce>
case RTEMS_BDBUF_STATE_MODIFIED:
++dd->stats.read_hits;
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_MODIFIED);
break;
case RTEMS_BDBUF_STATE_EMPTY:
++dd->stats.read_misses;
10fc1f: ff 46 48 incl 0x48(%esi)
static void
rtems_bdbuf_set_read_ahead_trigger (rtems_disk_device *dd,
rtems_blkdev_bnum block)
{
if (dd->read_ahead.trigger != block)
10fc22: 39 7e 6c cmp %edi,0x6c(%esi)
10fc25: 74 13 je 10fc3a <rtems_bdbuf_read+0x95>
{
rtems_bdbuf_read_ahead_cancel (dd);
10fc27: 89 f0 mov %esi,%eax
10fc29: e8 5b fa ff ff call 10f689 <rtems_bdbuf_read_ahead_cancel>
dd->read_ahead.trigger = block + 1;
10fc2e: 8d 47 01 lea 0x1(%edi),%eax
10fc31: 89 46 6c mov %eax,0x6c(%esi)
dd->read_ahead.next = block + 2;
10fc34: 8d 47 02 lea 0x2(%edi),%eax
10fc37: 89 46 70 mov %eax,0x70(%esi)
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_MODIFIED);
break;
case RTEMS_BDBUF_STATE_EMPTY:
++dd->stats.read_misses;
rtems_bdbuf_set_read_ahead_trigger (dd, block);
sc = rtems_bdbuf_execute_read_request (dd, bd, 1);
10fc3a: b9 01 00 00 00 mov $0x1,%ecx
10fc3f: 89 da mov %ebx,%edx
10fc41: 89 f0 mov %esi,%eax
10fc43: e8 63 f8 ff ff call 10f4ab <rtems_bdbuf_execute_read_request>
10fc48: 89 c2 mov %eax,%edx
if (sc == RTEMS_SUCCESSFUL)
10fc4a: 85 c0 test %eax,%eax
10fc4c: 75 23 jne 10fc71 <rtems_bdbuf_read+0xcc>
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
10fc4e: c7 43 20 03 00 00 00 movl $0x3,0x20(%ebx)
)
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
10fc55: 8b 0b mov (%ebx),%ecx
previous = the_node->previous;
10fc57: 8b 43 04 mov 0x4(%ebx),%eax
next->previous = previous;
10fc5a: 89 41 04 mov %eax,0x4(%ecx)
previous->next = next;
10fc5d: 89 08 mov %ecx,(%eax)
void rtems_bdbuf_reset_device_stats (rtems_disk_device *dd)
{
rtems_bdbuf_lock_cache ();
memset (&dd->stats, 0, sizeof(dd->stats));
rtems_bdbuf_unlock_cache ();
}
10fc5f: 8b 43 28 mov 0x28(%ebx),%eax
}
static void
rtems_bdbuf_group_obtain (rtems_bdbuf_buffer *bd)
{
++bd->group->users;
10fc62: ff 40 0c incl 0xc(%eax)
10fc65: eb 0c jmp 10fc73 <rtems_bdbuf_read+0xce>
{
bd = NULL;
}
break;
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_4);
10fc67: ba 02 00 00 42 mov $0x42000002,%edx <== NOT EXECUTED
10fc6c: e8 6a e7 ff ff call 10e3db <rtems_bdbuf_fatal> <== NOT EXECUTED
rtems_chain_extract_unprotected (&bd->link);
rtems_bdbuf_group_obtain (bd);
}
else
{
bd = NULL;
10fc71: 31 db xor %ebx,%ebx
static void
rtems_bdbuf_check_read_ahead_trigger (rtems_disk_device *dd,
rtems_blkdev_bnum block)
{
if (bdbuf_cache.read_ahead_task != 0
10fc73: a1 44 21 13 00 mov 0x132144,%eax
10fc78: 85 c0 test %eax,%eax
10fc7a: 74 6d je 10fce9 <rtems_bdbuf_read+0x144>
&& dd->read_ahead.trigger == block
10fc7c: 39 7e 6c cmp %edi,0x6c(%esi)
10fc7f: 75 68 jne 10fce9 <rtems_bdbuf_read+0x144>
*/
RTEMS_INLINE_ROUTINE bool _Chain_Is_node_off_chain(
const Chain_Node *node
)
{
return (node->next == NULL) && (node->previous == NULL);
10fc81: 31 c9 xor %ecx,%ecx
10fc83: 83 7e 64 00 cmpl $0x0,0x64(%esi)
10fc87: 75 09 jne 10fc92 <rtems_bdbuf_read+0xed> <== NEVER TAKEN
10fc89: 31 c9 xor %ecx,%ecx
10fc8b: 83 7e 68 00 cmpl $0x0,0x68(%esi)
10fc8f: 0f 94 c1 sete %cl
&& !rtems_bdbuf_is_read_ahead_active (dd))
10fc92: 85 c9 test %ecx,%ecx
10fc94: 74 53 je 10fce9 <rtems_bdbuf_read+0x144><== NEVER TAKEN
{
rtems_status_code sc;
rtems_chain_control *chain = &bdbuf_cache.read_ahead_chain;
if (rtems_chain_is_empty (chain))
10fc96: 81 3d 48 21 13 00 4c cmpl $0x13214c,0x132148
10fc9d: 21 13 00
10fca0: 75 24 jne 10fcc6 <rtems_bdbuf_read+0x121><== NEVER TAKEN
{
sc = rtems_event_send (bdbuf_cache.read_ahead_task,
10fca2: 51 push %ecx
10fca3: 51 push %ecx
10fca4: 6a 02 push $0x2
10fca6: 50 push %eax
10fca7: 89 55 e4 mov %edx,-0x1c(%ebp)
10fcaa: e8 b9 ac ff ff call 10a968 <rtems_event_send>
RTEMS_BDBUF_READ_AHEAD_WAKE_UP);
if (sc != RTEMS_SUCCESSFUL)
10fcaf: 83 c4 10 add $0x10,%esp
10fcb2: 85 c0 test %eax,%eax
10fcb4: 8b 55 e4 mov -0x1c(%ebp),%edx
10fcb7: 74 0d je 10fcc6 <rtems_bdbuf_read+0x121><== ALWAYS TAKEN
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_RA_WAKE_UP);
10fcb9: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10fcbc: 68 1f 00 00 42 push $0x4200001f <== NOT EXECUTED
10fcc1: e8 4a b6 ff ff call 10b310 <rtems_fatal_error_occurred><== NOT EXECUTED
}
rtems_chain_append_unprotected (chain, &dd->read_ahead.node);
10fcc6: 8d 4e 64 lea 0x64(%esi),%ecx
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
Chain_Node *old_last = tail->previous;
10fcc9: a1 50 21 13 00 mov 0x132150,%eax
the_node->next = tail;
10fcce: c7 46 64 4c 21 13 00 movl $0x13214c,0x64(%esi)
tail->previous = the_node;
10fcd5: 89 0d 50 21 13 00 mov %ecx,0x132150
old_last->next = the_node;
10fcdb: 89 08 mov %ecx,(%eax)
the_node->previous = old_last;
10fcdd: 89 46 68 mov %eax,0x68(%esi)
10fce0: eb 07 jmp 10fce9 <rtems_bdbuf_read+0x144>
rtems_bdbuf_read (rtems_disk_device *dd,
rtems_blkdev_bnum block,
rtems_bdbuf_buffer **bd_ptr)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_bdbuf_buffer *bd = NULL;
10fce2: 31 db xor %ebx,%ebx
*/
*media_block_ptr = rtems_bdbuf_media_block (dd, block) + dd->start;
}
else
{
sc = RTEMS_INVALID_ID;
10fce4: ba 04 00 00 00 mov $0x4,%edx <== NOT EXECUTED
}
rtems_bdbuf_check_read_ahead_trigger (dd, block);
}
rtems_bdbuf_unlock_cache ();
10fce9: 89 55 e4 mov %edx,-0x1c(%ebp)
10fcec: e8 1f e7 ff ff call 10e410 <rtems_bdbuf_unlock_cache>
*bd_ptr = bd;
10fcf1: 8b 45 10 mov 0x10(%ebp),%eax
10fcf4: 89 18 mov %ebx,(%eax)
return sc;
}
10fcf6: 8b 55 e4 mov -0x1c(%ebp),%edx
10fcf9: 89 d0 mov %edx,%eax
10fcfb: 8d 65 f4 lea -0xc(%ebp),%esp
10fcfe: 5b pop %ebx
10fcff: 5e pop %esi
10fd00: 5f pop %edi
10fd01: 5d pop %ebp
10fd02: c3 ret
0010f689 <rtems_bdbuf_read_ahead_cancel>:
return !rtems_chain_is_node_off_chain (&dd->read_ahead.node);
}
static void
rtems_bdbuf_read_ahead_cancel (rtems_disk_device *dd)
{
10f689: 55 push %ebp
10f68a: 89 e5 mov %esp,%ebp
*/
RTEMS_INLINE_ROUTINE bool _Chain_Is_node_off_chain(
const Chain_Node *node
)
{
return (node->next == NULL) && (node->previous == NULL);
10f68c: 8b 50 64 mov 0x64(%eax),%edx
10f68f: 31 c9 xor %ecx,%ecx
10f691: 85 d2 test %edx,%edx
10f693: 75 09 jne 10f69e <rtems_bdbuf_read_ahead_cancel+0x15><== NEVER TAKEN
10f695: 31 c9 xor %ecx,%ecx
10f697: 83 78 68 00 cmpl $0x0,0x68(%eax)
10f69b: 0f 94 c1 sete %cl
if (rtems_bdbuf_is_read_ahead_active (dd))
10f69e: 85 c9 test %ecx,%ecx
10f6a0: 75 16 jne 10f6b8 <rtems_bdbuf_read_ahead_cancel+0x2f><== ALWAYS TAKEN
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
previous = the_node->previous;
10f6a2: 8b 48 68 mov 0x68(%eax),%ecx <== NOT EXECUTED
next->previous = previous;
10f6a5: 89 4a 04 mov %ecx,0x4(%edx) <== NOT EXECUTED
previous->next = next;
10f6a8: 89 11 mov %edx,(%ecx) <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Set_off_chain(
Chain_Node *node
)
{
node->next = node->previous = NULL;
10f6aa: c7 40 68 00 00 00 00 movl $0x0,0x68(%eax) <== NOT EXECUTED
10f6b1: c7 40 64 00 00 00 00 movl $0x0,0x64(%eax) <== NOT EXECUTED
{
rtems_chain_extract_unprotected (&dd->read_ahead.node);
rtems_chain_set_off_chain (&dd->read_ahead.node);
}
}
10f6b8: 5d pop %ebp
10f6b9: c3 ret
0010f57e <rtems_bdbuf_read_ahead_task>:
return sc;
}
static rtems_task
rtems_bdbuf_read_ahead_task (rtems_task_argument arg)
{
10f57e: 55 push %ebp
10f57f: 89 e5 mov %esp,%ebp
10f581: 57 push %edi
10f582: 56 push %esi
10f583: 53 push %ebx
10f584: 83 ec 2c sub $0x2c,%esp
uint32_t max_transfer_count = bdbuf_config.max_read_ahead_blocks;
if (transfer_count >= max_transfer_count)
{
transfer_count = max_transfer_count;
dd->read_ahead.trigger = block + transfer_count / 2;
10f587: a1 4c 14 12 00 mov 0x12144c,%eax
10f58c: d1 e8 shr %eax
10f58e: 89 45 dc mov %eax,-0x24(%ebp)
static rtems_task
rtems_bdbuf_read_ahead_task (rtems_task_argument arg)
{
rtems_chain_control *chain = &bdbuf_cache.read_ahead_chain;
while (bdbuf_cache.read_ahead_enabled)
10f591: e9 d3 00 00 00 jmp 10f669 <rtems_bdbuf_read_ahead_task+0xeb>
{
rtems_chain_node *node;
rtems_bdbuf_wait_for_event (RTEMS_BDBUF_READ_AHEAD_WAKE_UP);
10f596: b8 02 00 00 00 mov $0x2,%eax
10f59b: e8 c8 ee ff ff call 10e468 <rtems_bdbuf_wait_for_event>
rtems_bdbuf_lock_cache ();
10f5a0: e8 26 ee ff ff call 10e3cb <rtems_bdbuf_lock_cache>
while ((node = rtems_chain_get_unprotected (chain)) != NULL)
10f5a5: e9 a6 00 00 00 jmp 10f650 <rtems_bdbuf_read_ahead_task+0xd2>
{
rtems_disk_device *dd = (rtems_disk_device *)
((char *) node - offsetof (rtems_disk_device, read_ahead.node));
rtems_blkdev_bnum block = dd->read_ahead.next;
10f5aa: 8b 73 0c mov 0xc(%ebx),%esi
rtems_blkdev_bnum block,
rtems_blkdev_bnum *media_block_ptr)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
if (block < dd->block_count)
10f5ad: 3b 73 c4 cmp -0x3c(%ebx),%esi
10f5b0: 73 36 jae 10f5e8 <rtems_bdbuf_read_ahead_task+0x6a>
}
static rtems_blkdev_bnum
rtems_bdbuf_media_block (const rtems_disk_device *dd, rtems_blkdev_bnum block)
{
if (dd->block_to_media_block_shift >= 0)
10f5b2: 8b 4b cc mov -0x34(%ebx),%ecx
10f5b5: 85 c9 test %ecx,%ecx
10f5b7: 78 06 js 10f5bf <rtems_bdbuf_read_ahead_task+0x41><== NEVER TAKEN
return block << dd->block_to_media_block_shift;
10f5b9: 89 f0 mov %esi,%eax
10f5bb: d3 e0 shl %cl,%eax
10f5bd: eb 20 jmp 10f5df <rtems_bdbuf_read_ahead_task+0x61>
/*
* Change the block number for the block size to the block number for the media
* block size. We have to use 64bit maths. There is no short cut here.
*/
return (rtems_blkdev_bnum)
((((uint64_t) block) * dd->block_size) / dd->media_block_size);
10f5bf: 8b 43 c0 mov -0x40(%ebx),%eax <== NOT EXECUTED
10f5c2: f7 e6 mul %esi <== NOT EXECUTED
10f5c4: 89 45 d0 mov %eax,-0x30(%ebp) <== NOT EXECUTED
10f5c7: 89 55 d4 mov %edx,-0x2c(%ebp) <== NOT EXECUTED
10f5ca: 8b 43 bc mov -0x44(%ebx),%eax <== NOT EXECUTED
10f5cd: 31 d2 xor %edx,%edx <== NOT EXECUTED
10f5cf: 52 push %edx <== NOT EXECUTED
10f5d0: 50 push %eax <== NOT EXECUTED
10f5d1: ff 75 d4 pushl -0x2c(%ebp) <== NOT EXECUTED
10f5d4: ff 75 d0 pushl -0x30(%ebp) <== NOT EXECUTED
10f5d7: e8 cc 12 01 00 call 1208a8 <__udivdi3> <== NOT EXECUTED
10f5dc: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
/*
* Compute the media block number. Drivers work with media block number not
* the block number a BD may have as this depends on the block size set by
* the user.
*/
*media_block_ptr = rtems_bdbuf_media_block (dd, block) + dd->start;
10f5df: 8b 53 b4 mov -0x4c(%ebx),%edx
10f5e2: 01 c2 add %eax,%edx
10f5e4: 31 c0 xor %eax,%eax
10f5e6: eb 07 jmp 10f5ef <rtems_bdbuf_read_ahead_task+0x71>
while ((node = rtems_chain_get_unprotected (chain)) != NULL)
{
rtems_disk_device *dd = (rtems_disk_device *)
((char *) node - offsetof (rtems_disk_device, read_ahead.node));
rtems_blkdev_bnum block = dd->read_ahead.next;
rtems_blkdev_bnum media_block = 0;
10f5e8: 31 d2 xor %edx,%edx
*/
*media_block_ptr = rtems_bdbuf_media_block (dd, block) + dd->start;
}
else
{
sc = RTEMS_INVALID_ID;
10f5ea: b8 04 00 00 00 mov $0x4,%eax
*/
RTEMS_INLINE_ROUTINE void _Chain_Set_off_chain(
Chain_Node *node
)
{
node->next = node->previous = NULL;
10f5ef: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx)
10f5f6: c7 03 00 00 00 00 movl $0x0,(%ebx)
rtems_status_code sc =
rtems_bdbuf_get_media_block (dd, block, &media_block);
rtems_chain_set_off_chain (&dd->read_ahead.node);
if (sc == RTEMS_SUCCESSFUL)
10f5fc: 85 c0 test %eax,%eax
10f5fe: 75 49 jne 10f649 <rtems_bdbuf_read_ahead_task+0xcb>
rtems_bdbuf_wait_for_event (RTEMS_BDBUF_READ_AHEAD_WAKE_UP);
rtems_bdbuf_lock_cache ();
while ((node = rtems_chain_get_unprotected (chain)) != NULL)
{
rtems_disk_device *dd = (rtems_disk_device *)
10f600: 8d 7b 9c lea -0x64(%ebx),%edi
rtems_chain_set_off_chain (&dd->read_ahead.node);
if (sc == RTEMS_SUCCESSFUL)
{
rtems_bdbuf_buffer *bd =
10f603: 89 f8 mov %edi,%eax
10f605: e8 fc f6 ff ff call 10ed06 <rtems_bdbuf_get_buffer_for_read_ahead>
rtems_bdbuf_get_buffer_for_read_ahead (dd, media_block);
if (bd != NULL)
10f60a: 85 c0 test %eax,%eax
10f60c: 74 42 je 10f650 <rtems_bdbuf_read_ahead_task+0xd2><== NEVER TAKEN
{
uint32_t transfer_count = dd->block_count - block;
10f60e: 8b 4b c4 mov -0x3c(%ebx),%ecx
10f611: 29 f1 sub %esi,%ecx
uint32_t max_transfer_count = bdbuf_config.max_read_ahead_blocks;
if (transfer_count >= max_transfer_count)
10f613: 3b 0d 4c 14 12 00 cmp 0x12144c,%ecx
10f619: 72 19 jb 10f634 <rtems_bdbuf_read_ahead_task+0xb6>
{
transfer_count = max_transfer_count;
dd->read_ahead.trigger = block + transfer_count / 2;
10f61b: 8b 55 dc mov -0x24(%ebp),%edx
10f61e: 01 f2 add %esi,%edx
10f620: 89 53 08 mov %edx,0x8(%ebx)
dd->read_ahead.next = block + transfer_count;
10f623: 03 35 4c 14 12 00 add 0x12144c,%esi
10f629: 89 73 0c mov %esi,0xc(%ebx)
10f62c: 8b 0d 4c 14 12 00 mov 0x12144c,%ecx
10f632: eb 07 jmp 10f63b <rtems_bdbuf_read_ahead_task+0xbd>
}
else
{
dd->read_ahead.trigger = RTEMS_DISK_READ_AHEAD_NO_TRIGGER;
10f634: c7 43 08 ff ff ff ff movl $0xffffffff,0x8(%ebx)
}
++dd->stats.read_ahead_transfers;
10f63b: ff 43 e8 incl -0x18(%ebx)
rtems_bdbuf_execute_read_request (dd, bd, transfer_count);
10f63e: 89 c2 mov %eax,%edx
10f640: 89 f8 mov %edi,%eax
10f642: e8 64 fe ff ff call 10f4ab <rtems_bdbuf_execute_read_request>
10f647: eb 07 jmp 10f650 <rtems_bdbuf_read_ahead_task+0xd2>
}
}
else
{
dd->read_ahead.trigger = RTEMS_DISK_READ_AHEAD_NO_TRIGGER;
10f649: c7 43 08 ff ff ff ff movl $0xffffffff,0x8(%ebx)
10f650: b8 48 21 13 00 mov $0x132148,%eax
10f655: e8 2e ed ff ff call 10e388 <_Chain_Get_unprotected>
10f65a: 89 c3 mov %eax,%ebx
rtems_chain_node *node;
rtems_bdbuf_wait_for_event (RTEMS_BDBUF_READ_AHEAD_WAKE_UP);
rtems_bdbuf_lock_cache ();
while ((node = rtems_chain_get_unprotected (chain)) != NULL)
10f65c: 85 c0 test %eax,%eax
10f65e: 0f 85 46 ff ff ff jne 10f5aa <rtems_bdbuf_read_ahead_task+0x2c>
{
dd->read_ahead.trigger = RTEMS_DISK_READ_AHEAD_NO_TRIGGER;
}
}
rtems_bdbuf_unlock_cache ();
10f664: e8 a7 ed ff ff call 10e410 <rtems_bdbuf_unlock_cache>
static rtems_task
rtems_bdbuf_read_ahead_task (rtems_task_argument arg)
{
rtems_chain_control *chain = &bdbuf_cache.read_ahead_chain;
while (bdbuf_cache.read_ahead_enabled)
10f669: 80 3d 54 21 13 00 00 cmpb $0x0,0x132154
10f670: 0f 85 20 ff ff ff jne 10f596 <rtems_bdbuf_read_ahead_task+0x18><== ALWAYS TAKEN
}
rtems_bdbuf_unlock_cache ();
}
rtems_task_delete (RTEMS_SELF);
10f676: c7 45 08 00 00 00 00 movl $0x0,0x8(%ebp) <== NOT EXECUTED
}
10f67d: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
10f680: 5b pop %ebx <== NOT EXECUTED
10f681: 5e pop %esi <== NOT EXECUTED
10f682: 5f pop %edi <== NOT EXECUTED
10f683: 5d pop %ebp <== NOT EXECUTED
}
rtems_bdbuf_unlock_cache ();
}
rtems_task_delete (RTEMS_SELF);
10f684: e9 63 b9 ff ff jmp 10afec <rtems_task_delete> <== NOT EXECUTED
0010fd03 <rtems_bdbuf_release>:
return RTEMS_SUCCESSFUL;
}
rtems_status_code
rtems_bdbuf_release (rtems_bdbuf_buffer *bd)
{
10fd03: 55 push %ebp
10fd04: 89 e5 mov %esp,%ebp
10fd06: 53 push %ebx
10fd07: 50 push %eax
10fd08: 8b 5d 08 mov 0x8(%ebp),%ebx
}
static rtems_status_code
rtems_bdbuf_check_bd_and_lock_cache (rtems_bdbuf_buffer *bd, const char *kind)
{
if (bd == NULL)
10fd0b: 85 db test %ebx,%ebx
10fd0d: 74 7c je 10fd8b <rtems_bdbuf_release+0x88><== NEVER TAKEN
if (rtems_bdbuf_tracer)
{
printf ("bdbuf:%s: %" PRIu32 "\n", kind, bd->block);
rtems_bdbuf_show_users (kind, bd);
}
rtems_bdbuf_lock_cache();
10fd0f: e8 b7 e6 ff ff call 10e3cb <rtems_bdbuf_lock_cache>
sc = rtems_bdbuf_check_bd_and_lock_cache (bd, "release");
if (sc != RTEMS_SUCCESSFUL)
return sc;
switch (bd->state)
10fd14: 8b 43 20 mov 0x20(%ebx),%eax
10fd17: 83 f8 04 cmp $0x4,%eax
10fd1a: 74 53 je 10fd6f <rtems_bdbuf_release+0x6c>
10fd1c: 77 07 ja 10fd25 <rtems_bdbuf_release+0x22>
10fd1e: 83 f8 03 cmp $0x3,%eax
10fd21: 75 55 jne 10fd78 <rtems_bdbuf_release+0x75><== NEVER TAKEN
10fd23: eb 07 jmp 10fd2c <rtems_bdbuf_release+0x29>
10fd25: 83 f8 06 cmp $0x6,%eax
10fd28: 77 4e ja 10fd78 <rtems_bdbuf_release+0x75><== NEVER TAKEN
10fd2a: eb 3a jmp 10fd66 <rtems_bdbuf_release+0x63>
void rtems_bdbuf_reset_device_stats (rtems_disk_device *dd)
{
rtems_bdbuf_lock_cache ();
memset (&dd->stats, 0, sizeof(dd->stats));
rtems_bdbuf_unlock_cache ();
}
10fd2c: 8b 43 28 mov 0x28(%ebx),%eax
}
static void
rtems_bdbuf_group_release (rtems_bdbuf_buffer *bd)
{
--bd->group->users;
10fd2f: ff 48 0c decl 0xc(%eax)
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
10fd32: c7 43 20 02 00 00 00 movl $0x2,0x20(%ebx)
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
Chain_Node *old_last = tail->previous;
10fd39: a1 08 21 13 00 mov 0x132108,%eax
the_node->next = tail;
10fd3e: c7 03 04 21 13 00 movl $0x132104,(%ebx)
tail->previous = the_node;
10fd44: 89 1d 08 21 13 00 mov %ebx,0x132108
old_last->next = the_node;
10fd4a: 89 18 mov %ebx,(%eax)
the_node->previous = old_last;
10fd4c: 89 43 04 mov %eax,0x4(%ebx)
{
rtems_bdbuf_group_release (bd);
rtems_bdbuf_make_cached_and_add_to_lru_list (bd);
if (bd->waiters)
rtems_bdbuf_wake (&bdbuf_cache.access_waiters);
10fd4f: b8 24 21 13 00 mov $0x132124,%eax
rtems_bdbuf_add_to_lru_list_after_access (rtems_bdbuf_buffer *bd)
{
rtems_bdbuf_group_release (bd);
rtems_bdbuf_make_cached_and_add_to_lru_list (bd);
if (bd->waiters)
10fd54: 83 7b 24 00 cmpl $0x0,0x24(%ebx)
10fd58: 75 05 jne 10fd5f <rtems_bdbuf_release+0x5c>
rtems_bdbuf_wake (&bdbuf_cache.access_waiters);
else
rtems_bdbuf_wake (&bdbuf_cache.buffer_waiters);
10fd5a: b8 34 21 13 00 mov $0x132134,%eax
10fd5f: e8 a1 e8 ff ff call 10e605 <rtems_bdbuf_wake>
10fd64: eb 1c jmp 10fd82 <rtems_bdbuf_release+0x7f>
case RTEMS_BDBUF_STATE_ACCESS_CACHED:
rtems_bdbuf_add_to_lru_list_after_access (bd);
break;
case RTEMS_BDBUF_STATE_ACCESS_EMPTY:
case RTEMS_BDBUF_STATE_ACCESS_PURGED:
rtems_bdbuf_discard_buffer_after_access (bd);
10fd66: 89 d8 mov %ebx,%eax
10fd68: e8 4d f9 ff ff call 10f6ba <rtems_bdbuf_discard_buffer_after_access>
break;
10fd6d: eb 13 jmp 10fd82 <rtems_bdbuf_release+0x7f>
case RTEMS_BDBUF_STATE_ACCESS_MODIFIED:
rtems_bdbuf_add_to_modified_list_after_access (bd);
10fd6f: 89 d8 mov %ebx,%eax
10fd71: e8 be eb ff ff call 10e934 <rtems_bdbuf_add_to_modified_list_after_access>
break;
10fd76: eb 0a jmp 10fd82 <rtems_bdbuf_release+0x7f>
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_0);
10fd78: ba 1c 00 00 42 mov $0x4200001c,%edx <== NOT EXECUTED
10fd7d: e8 59 e6 ff ff call 10e3db <rtems_bdbuf_fatal> <== NOT EXECUTED
}
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_usage ();
rtems_bdbuf_unlock_cache ();
10fd82: e8 89 e6 ff ff call 10e410 <rtems_bdbuf_unlock_cache>
return RTEMS_SUCCESSFUL;
10fd87: 31 c0 xor %eax,%eax
10fd89: eb 05 jmp 10fd90 <rtems_bdbuf_release+0x8d>
static rtems_status_code
rtems_bdbuf_check_bd_and_lock_cache (rtems_bdbuf_buffer *bd, const char *kind)
{
if (bd == NULL)
return RTEMS_INVALID_ADDRESS;
10fd8b: b8 09 00 00 00 mov $0x9,%eax <== NOT EXECUTED
rtems_bdbuf_show_usage ();
rtems_bdbuf_unlock_cache ();
return RTEMS_SUCCESSFUL;
}
10fd90: 5b pop %ebx
10fd91: 5b pop %ebx
10fd92: 5d pop %ebp
10fd93: c3 ret
0010fd94 <rtems_bdbuf_release_modified>:
rtems_status_code
rtems_bdbuf_release_modified (rtems_bdbuf_buffer *bd)
{
10fd94: 55 push %ebp
10fd95: 89 e5 mov %esp,%ebp
10fd97: 83 ec 18 sub $0x18,%esp
10fd9a: 8b 45 08 mov 0x8(%ebp),%eax
}
static rtems_status_code
rtems_bdbuf_check_bd_and_lock_cache (rtems_bdbuf_buffer *bd, const char *kind)
{
if (bd == NULL)
10fd9d: 85 c0 test %eax,%eax
10fd9f: 74 42 je 10fde3 <rtems_bdbuf_release_modified+0x4f><== NEVER TAKEN
if (rtems_bdbuf_tracer)
{
printf ("bdbuf:%s: %" PRIu32 "\n", kind, bd->block);
rtems_bdbuf_show_users (kind, bd);
}
rtems_bdbuf_lock_cache();
10fda1: 89 45 f4 mov %eax,-0xc(%ebp)
10fda4: e8 22 e6 ff ff call 10e3cb <rtems_bdbuf_lock_cache>
sc = rtems_bdbuf_check_bd_and_lock_cache (bd, "release modified");
if (sc != RTEMS_SUCCESSFUL)
return sc;
switch (bd->state)
10fda9: 8b 45 f4 mov -0xc(%ebp),%eax
10fdac: 8b 48 20 mov 0x20(%eax),%ecx
10fdaf: 83 f9 03 cmp $0x3,%ecx
10fdb2: 72 1a jb 10fdce <rtems_bdbuf_release_modified+0x3a>
10fdb4: 83 f9 05 cmp $0x5,%ecx
10fdb7: 76 07 jbe 10fdc0 <rtems_bdbuf_release_modified+0x2c>
10fdb9: 83 f9 06 cmp $0x6,%ecx
10fdbc: 75 10 jne 10fdce <rtems_bdbuf_release_modified+0x3a><== NEVER TAKEN
10fdbe: eb 07 jmp 10fdc7 <rtems_bdbuf_release_modified+0x33>
{
case RTEMS_BDBUF_STATE_ACCESS_CACHED:
case RTEMS_BDBUF_STATE_ACCESS_EMPTY:
case RTEMS_BDBUF_STATE_ACCESS_MODIFIED:
rtems_bdbuf_add_to_modified_list_after_access (bd);
10fdc0: e8 6f eb ff ff call 10e934 <rtems_bdbuf_add_to_modified_list_after_access>
break;
10fdc5: eb 13 jmp 10fdda <rtems_bdbuf_release_modified+0x46>
case RTEMS_BDBUF_STATE_ACCESS_PURGED:
rtems_bdbuf_discard_buffer_after_access (bd);
10fdc7: e8 ee f8 ff ff call 10f6ba <rtems_bdbuf_discard_buffer_after_access>
break;
10fdcc: eb 0c jmp 10fdda <rtems_bdbuf_release_modified+0x46>
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_6);
10fdce: ba 04 00 00 42 mov $0x42000004,%edx
10fdd3: 89 c8 mov %ecx,%eax
10fdd5: e8 01 e6 ff ff call 10e3db <rtems_bdbuf_fatal>
}
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_usage ();
rtems_bdbuf_unlock_cache ();
10fdda: e8 31 e6 ff ff call 10e410 <rtems_bdbuf_unlock_cache>
return RTEMS_SUCCESSFUL;
10fddf: 31 c0 xor %eax,%eax
10fde1: eb 05 jmp 10fde8 <rtems_bdbuf_release_modified+0x54>
static rtems_status_code
rtems_bdbuf_check_bd_and_lock_cache (rtems_bdbuf_buffer *bd, const char *kind)
{
if (bd == NULL)
return RTEMS_INVALID_ADDRESS;
10fde3: b8 09 00 00 00 mov $0x9,%eax <== NOT EXECUTED
rtems_bdbuf_show_usage ();
rtems_bdbuf_unlock_cache ();
return RTEMS_SUCCESSFUL;
}
10fde8: c9 leave
10fde9: c3 ret
0010e67c <rtems_bdbuf_remove_from_tree>:
return bdbuf_cache.buffer_waiters.count;
}
static void
rtems_bdbuf_remove_from_tree (rtems_bdbuf_buffer *bd)
{
10e67c: 55 push %ebp
10e67d: 89 e5 mov %esp,%ebp
10e67f: 57 push %edi
10e680: 56 push %esi
10e681: 53 push %ebx
10e682: 81 ec 9c 00 00 00 sub $0x9c,%esp
10e688: 89 c3 mov %eax,%ebx
*/
static int
rtems_bdbuf_avl_remove(rtems_bdbuf_buffer** root,
const rtems_bdbuf_buffer* node)
{
const rtems_disk_device *dd = node->dd;
10e68a: 8b 50 14 mov 0x14(%eax),%edx
10e68d: 89 95 64 ff ff ff mov %edx,-0x9c(%ebp)
rtems_blkdev_bnum block = node->block;
10e693: 8b 50 18 mov 0x18(%eax),%edx
10e696: 89 95 60 ff ff ff mov %edx,-0xa0(%ebp)
rtems_bdbuf_buffer* p = *root;
10e69c: 8b 15 fc 20 13 00 mov 0x1320fc,%edx
rtems_bdbuf_buffer* buf_stack[RTEMS_BDBUF_AVL_MAX_HEIGHT];
rtems_bdbuf_buffer** buf_prev = buf_stack;
bool modified = false;
memset (buf_stack, 0, sizeof(buf_stack));
10e6a2: 8d b5 68 ff ff ff lea -0x98(%ebp),%esi
10e6a8: b9 20 00 00 00 mov $0x20,%ecx
10e6ad: 31 c0 xor %eax,%eax
10e6af: 89 f7 mov %esi,%edi
10e6b1: f3 ab rep stos %eax,%es:(%edi)
10e6b3: eb 3f jmp 10e6f4 <rtems_bdbuf_remove_from_tree+0x78>
while (p != NULL)
{
*buf_prev++ = p;
10e6b5: 89 16 mov %edx,(%esi)
10e6b7: 8d 4e 04 lea 0x4(%esi),%ecx
10e6ba: 89 8d 5c ff ff ff mov %ecx,-0xa4(%ebp)
if (((uintptr_t) p->dd < (uintptr_t) dd)
10e6c0: 8b bd 64 ff ff ff mov -0x9c(%ebp),%edi
10e6c6: 39 7a 14 cmp %edi,0x14(%edx)
10e6c9: 72 0d jb 10e6d8 <rtems_bdbuf_remove_from_tree+0x5c><== NEVER TAKEN
|| ((p->dd == dd) && (p->block < block)))
10e6cb: 75 1a jne 10e6e7 <rtems_bdbuf_remove_from_tree+0x6b><== NEVER TAKEN
10e6cd: 8b 85 60 ff ff ff mov -0xa0(%ebp),%eax
10e6d3: 39 42 18 cmp %eax,0x18(%edx)
10e6d6: 73 09 jae 10e6e1 <rtems_bdbuf_remove_from_tree+0x65>
{
p->avl.cache = 1;
10e6d8: c6 42 10 01 movb $0x1,0x10(%edx)
p = p->avl.right;
10e6dc: 8b 52 0c mov 0xc(%edx),%edx
10e6df: eb 0d jmp 10e6ee <rtems_bdbuf_remove_from_tree+0x72>
}
else if ((p->dd != dd) || (p->block != block))
10e6e1: 0f 84 02 02 00 00 je 10e8e9 <rtems_bdbuf_remove_from_tree+0x26d>
{
p->avl.cache = -1;
10e6e7: c6 42 10 ff movb $0xff,0x10(%edx)
p = p->avl.left;
10e6eb: 8b 52 08 mov 0x8(%edx),%edx
memset (buf_stack, 0, sizeof(buf_stack));
while (p != NULL)
{
*buf_prev++ = p;
10e6ee: 8b b5 5c ff ff ff mov -0xa4(%ebp),%esi
bool modified = false;
memset (buf_stack, 0, sizeof(buf_stack));
while (p != NULL)
10e6f4: 85 d2 test %edx,%edx
10e6f6: 75 bd jne 10e6b5 <rtems_bdbuf_remove_from_tree+0x39><== ALWAYS TAKEN
static void
rtems_bdbuf_remove_from_tree (rtems_bdbuf_buffer *bd)
{
if (rtems_bdbuf_avl_remove (&bdbuf_cache.tree, bd) != 0)
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_TREE_RM);
10e6f8: 8b 43 20 mov 0x20(%ebx),%eax <== NOT EXECUTED
10e6fb: ba 09 00 00 42 mov $0x42000009,%edx <== NOT EXECUTED
10e700: e8 d6 fc ff ff call 10e3db <rtems_bdbuf_fatal> <== NOT EXECUTED
q = p;
buf_prev--;
if (buf_prev > buf_stack)
{
p = *(buf_prev - 1);
10e705: 8b 8d 5c ff ff ff mov -0xa4(%ebp),%ecx
10e70b: 8b 49 f8 mov -0x8(%ecx),%ecx
10e70e: 89 8d 58 ff ff ff mov %ecx,-0xa8(%ebp)
{
p = NULL;
}
/* at this moment q - is a node to delete, p is q's parent */
if (q->avl.right == NULL)
10e714: 8b 42 0c mov 0xc(%edx),%eax
10e717: 85 c0 test %eax,%eax
10e719: 75 0d jne 10e728 <rtems_bdbuf_remove_from_tree+0xac>
{
r = q->avl.left;
10e71b: 8b 42 08 mov 0x8(%edx),%eax
if (r != NULL)
10e71e: 85 c0 test %eax,%eax
10e720: 74 7b je 10e79d <rtems_bdbuf_remove_from_tree+0x121>
{
r->avl.bal = 0;
10e722: c6 40 11 00 movb $0x0,0x11(%eax)
10e726: eb 75 jmp 10e79d <rtems_bdbuf_remove_from_tree+0x121>
{
rtems_bdbuf_buffer **t;
r = q->avl.right;
if (r->avl.left == NULL)
10e728: 83 78 08 00 cmpl $0x0,0x8(%eax)
10e72c: 74 10 je 10e73e <rtems_bdbuf_remove_from_tree+0xc2>
10e72e: 89 c3 mov %eax,%ebx
10e730: 89 85 60 ff ff ff mov %eax,-0xa0(%ebp)
10e736: 8b b5 5c ff ff ff mov -0xa4(%ebp),%esi
10e73c: eb 2e jmp 10e76c <rtems_bdbuf_remove_from_tree+0xf0>
{
r->avl.left = q->avl.left;
10e73e: 8b 5a 08 mov 0x8(%edx),%ebx
10e741: 89 58 08 mov %ebx,0x8(%eax)
r->avl.bal = q->avl.bal;
10e744: 8a 52 11 mov 0x11(%edx),%dl
10e747: 88 50 11 mov %dl,0x11(%eax)
r->avl.cache = 1;
10e74a: c6 40 10 01 movb $0x1,0x10(%eax)
*buf_prev++ = q = r;
10e74e: 8b bd 5c ff ff ff mov -0xa4(%ebp),%edi
10e754: 89 47 fc mov %eax,-0x4(%edi)
10e757: 89 fe mov %edi,%esi
10e759: eb 42 jmp 10e79d <rtems_bdbuf_remove_from_tree+0x121>
t = buf_prev++;
s = r;
while (s->avl.left != NULL)
{
*buf_prev++ = r = s;
10e75b: 89 1e mov %ebx,(%esi)
10e75d: 83 c6 04 add $0x4,%esi
s = r->avl.left;
r->avl.cache = -1;
10e760: c6 43 10 ff movb $0xff,0x10(%ebx)
s = r;
while (s->avl.left != NULL)
{
*buf_prev++ = r = s;
s = r->avl.left;
10e764: 89 9d 60 ff ff ff mov %ebx,-0xa0(%ebp)
10e76a: 89 fb mov %edi,%ebx
else
{
t = buf_prev++;
s = r;
while (s->avl.left != NULL)
10e76c: 8b 7b 08 mov 0x8(%ebx),%edi
10e76f: 85 ff test %edi,%edi
10e771: 75 e8 jne 10e75b <rtems_bdbuf_remove_from_tree+0xdf>
*buf_prev++ = r = s;
s = r->avl.left;
r->avl.cache = -1;
}
s->avl.left = q->avl.left;
10e773: 8b 7a 08 mov 0x8(%edx),%edi
10e776: 89 7b 08 mov %edi,0x8(%ebx)
r->avl.left = s->avl.right;
10e779: 8b 7b 0c mov 0xc(%ebx),%edi
10e77c: 8b 8d 60 ff ff ff mov -0xa0(%ebp),%ecx
10e782: 89 79 08 mov %edi,0x8(%ecx)
s->avl.right = q->avl.right;
10e785: 89 43 0c mov %eax,0xc(%ebx)
s->avl.bal = q->avl.bal;
10e788: 8a 42 11 mov 0x11(%edx),%al
10e78b: 88 43 11 mov %al,0x11(%ebx)
s->avl.cache = 1;
10e78e: c6 43 10 01 movb $0x1,0x10(%ebx)
*t = q = s;
10e792: 8b 85 5c ff ff ff mov -0xa4(%ebp),%eax
10e798: 89 58 fc mov %ebx,-0x4(%eax)
10e79b: 89 d8 mov %ebx,%eax
}
}
if (p != NULL)
10e79d: 83 bd 58 ff ff ff 00 cmpl $0x0,-0xa8(%ebp)
10e7a4: 74 2f je 10e7d5 <rtems_bdbuf_remove_from_tree+0x159>
{
if (p->avl.cache == -1)
10e7a6: 8b 95 58 ff ff ff mov -0xa8(%ebp),%edx
10e7ac: 80 7a 10 ff cmpb $0xff,0x10(%edx)
10e7b0: 75 18 jne 10e7ca <rtems_bdbuf_remove_from_tree+0x14e>
{
p->avl.left = q;
10e7b2: 89 42 08 mov %eax,0x8(%edx)
default:
break;
}
}
if (buf_prev > buf_stack)
10e7b5: 8d 8d 68 ff ff ff lea -0x98(%ebp),%ecx
10e7bb: 89 8d 64 ff ff ff mov %ecx,-0x9c(%ebp)
modified = true;
while (modified)
{
if (buf_prev > buf_stack)
10e7c1: 39 ce cmp %ecx,%esi
10e7c3: 77 17 ja 10e7dc <rtems_bdbuf_remove_from_tree+0x160>
10e7c5: e9 3c 01 00 00 jmp 10e906 <rtems_bdbuf_remove_from_tree+0x28a>
{
p->avl.left = q;
}
else
{
p->avl.right = q;
10e7ca: 8b bd 58 ff ff ff mov -0xa8(%ebp),%edi
10e7d0: 89 47 0c mov %eax,0xc(%edi)
10e7d3: eb e0 jmp 10e7b5 <rtems_bdbuf_remove_from_tree+0x139>
}
}
else
{
*root = q;
10e7d5: a3 fc 20 13 00 mov %eax,0x1320fc
10e7da: eb d9 jmp 10e7b5 <rtems_bdbuf_remove_from_tree+0x139>
while (modified)
{
if (buf_prev > buf_stack)
{
p = *--buf_prev;
10e7dc: 83 ee 04 sub $0x4,%esi
10e7df: 8b 06 mov (%esi),%eax
else
{
break;
}
if (p->avl.cache == -1)
10e7e1: 80 78 10 ff cmpb $0xff,0x10(%eax)
10e7e5: 8a 50 11 mov 0x11(%eax),%dl
10e7e8: 75 65 jne 10e84f <rtems_bdbuf_remove_from_tree+0x1d3>
{
/* rebalance left branch */
switch (p->avl.bal)
10e7ea: 84 d2 test %dl,%dl
10e7ec: 74 0f je 10e7fd <rtems_bdbuf_remove_from_tree+0x181>
10e7ee: 80 fa 01 cmp $0x1,%dl
10e7f1: 74 10 je 10e803 <rtems_bdbuf_remove_from_tree+0x187>
10e7f3: fe c2 inc %dl
10e7f5: 0f 85 c0 00 00 00 jne 10e8bb <rtems_bdbuf_remove_from_tree+0x23f><== NEVER TAKEN
10e7fb: eb 61 jmp 10e85e <rtems_bdbuf_remove_from_tree+0x1e2>
{
case -1:
p->avl.bal = 0;
break;
case 0:
p->avl.bal = 1;
10e7fd: c6 40 11 01 movb $0x1,0x11(%eax)
10e801: eb 1a jmp 10e81d <rtems_bdbuf_remove_from_tree+0x1a1>
modified = false;
break;
case +1:
p1 = p->avl.right;
10e803: 8b 50 0c mov 0xc(%eax),%edx
if (p1->avl.bal >= 0) /* simple RR-turn */
10e806: 80 7a 11 00 cmpb $0x0,0x11(%edx)
10e80a: 8b 5a 08 mov 0x8(%edx),%ebx
10e80d: 7c 15 jl 10e824 <rtems_bdbuf_remove_from_tree+0x1a8>
{
p->avl.right = p1->avl.left;
10e80f: 89 58 0c mov %ebx,0xc(%eax)
p1->avl.left = p;
10e812: 89 42 08 mov %eax,0x8(%edx)
if (p1->avl.bal == 0)
10e815: 75 6d jne 10e884 <rtems_bdbuf_remove_from_tree+0x208>
{
p1->avl.bal = -1;
10e817: c6 42 11 ff movb $0xff,0x11(%edx)
10e81b: 89 d0 mov %edx,%eax
modified = false;
10e81d: 31 d2 xor %edx,%edx
10e81f: e9 99 00 00 00 jmp 10e8bd <rtems_bdbuf_remove_from_tree+0x241>
}
else /* double RL-turn */
{
p2 = p1->avl.left;
p1->avl.left = p2->avl.right;
10e824: 8b 7b 0c mov 0xc(%ebx),%edi
10e827: 89 7a 08 mov %edi,0x8(%edx)
p2->avl.right = p1;
10e82a: 89 53 0c mov %edx,0xc(%ebx)
p->avl.right = p2->avl.left;
10e82d: 8b 7b 08 mov 0x8(%ebx),%edi
10e830: 89 78 0c mov %edi,0xc(%eax)
p2->avl.left = p;
10e833: 89 43 08 mov %eax,0x8(%ebx)
if (p2->avl.bal == +1) p->avl.bal = -1; else p->avl.bal = 0;
10e836: 80 7b 11 01 cmpb $0x1,0x11(%ebx)
10e83a: 0f 95 c1 setne %cl
10e83d: 89 cf mov %ecx,%edi
10e83f: 4f dec %edi
10e840: 89 f9 mov %edi,%ecx
10e842: 88 48 11 mov %cl,0x11(%eax)
if (p2->avl.bal == -1) p1->avl.bal = 1; else p1->avl.bal = 0;
10e845: 80 7b 11 ff cmpb $0xff,0x11(%ebx)
10e849: 0f 94 42 11 sete 0x11(%edx)
10e84d: eb 66 jmp 10e8b5 <rtems_bdbuf_remove_from_tree+0x239>
}
}
else
{
/* rebalance right branch */
switch (p->avl.bal)
10e84f: 84 d2 test %dl,%dl
10e851: 74 11 je 10e864 <rtems_bdbuf_remove_from_tree+0x1e8>
10e853: 80 fa 01 cmp $0x1,%dl
10e856: 74 06 je 10e85e <rtems_bdbuf_remove_from_tree+0x1e2>
10e858: fe c2 inc %dl
10e85a: 75 5f jne 10e8bb <rtems_bdbuf_remove_from_tree+0x23f><== NEVER TAKEN
10e85c: eb 0c jmp 10e86a <rtems_bdbuf_remove_from_tree+0x1ee>
{
case +1:
p->avl.bal = 0;
10e85e: c6 40 11 00 movb $0x0,0x11(%eax)
10e862: eb 57 jmp 10e8bb <rtems_bdbuf_remove_from_tree+0x23f>
break;
case 0:
p->avl.bal = -1;
10e864: c6 40 11 ff movb $0xff,0x11(%eax)
10e868: eb b3 jmp 10e81d <rtems_bdbuf_remove_from_tree+0x1a1>
modified = false;
break;
case -1:
p1 = p->avl.left;
10e86a: 8b 50 08 mov 0x8(%eax),%edx
if (p1->avl.bal <= 0) /* simple LL-turn */
10e86d: 80 7a 11 00 cmpb $0x0,0x11(%edx)
10e871: 8b 5a 0c mov 0xc(%edx),%ebx
10e874: 7f 1a jg 10e890 <rtems_bdbuf_remove_from_tree+0x214>
{
p->avl.left = p1->avl.right;
10e876: 89 58 08 mov %ebx,0x8(%eax)
p1->avl.right = p;
10e879: 89 42 0c mov %eax,0xc(%edx)
if (p1->avl.bal == 0)
10e87c: 75 06 jne 10e884 <rtems_bdbuf_remove_from_tree+0x208><== NEVER TAKEN
{
p1->avl.bal = 1;
10e87e: c6 42 11 01 movb $0x1,0x11(%edx)
10e882: eb 97 jmp 10e81b <rtems_bdbuf_remove_from_tree+0x19f>
modified = false;
}
else
{
p->avl.bal = 0;
10e884: c6 40 11 00 movb $0x0,0x11(%eax)
p1->avl.bal = 0;
10e888: c6 42 11 00 movb $0x0,0x11(%edx)
10e88c: 89 d0 mov %edx,%eax
10e88e: eb 2b jmp 10e8bb <rtems_bdbuf_remove_from_tree+0x23f>
}
else /* double LR-turn */
{
p2 = p1->avl.right;
p1->avl.right = p2->avl.left;
10e890: 8b 7b 08 mov 0x8(%ebx),%edi
10e893: 89 7a 0c mov %edi,0xc(%edx)
p2->avl.left = p1;
10e896: 89 53 08 mov %edx,0x8(%ebx)
p->avl.left = p2->avl.right;
10e899: 8b 7b 0c mov 0xc(%ebx),%edi
10e89c: 89 78 08 mov %edi,0x8(%eax)
p2->avl.right = p;
10e89f: 89 43 0c mov %eax,0xc(%ebx)
if (p2->avl.bal == -1) p->avl.bal = 1; else p->avl.bal = 0;
10e8a2: 80 7b 11 ff cmpb $0xff,0x11(%ebx)
10e8a6: 0f 94 40 11 sete 0x11(%eax)
if (p2->avl.bal == +1) p1->avl.bal = -1; else p1->avl.bal = 0;
10e8aa: 80 7b 11 01 cmpb $0x1,0x11(%ebx)
10e8ae: 0f 95 c0 setne %al
10e8b1: 48 dec %eax
10e8b2: 88 42 11 mov %al,0x11(%edx)
p = p2;
p2->avl.bal = 0;
10e8b5: c6 43 11 00 movb $0x0,0x11(%ebx)
10e8b9: 89 d8 mov %ebx,%eax
}
}
else
{
/* rebalance right branch */
switch (p->avl.bal)
10e8bb: b2 01 mov $0x1,%dl
default:
break;
}
}
if (buf_prev > buf_stack)
10e8bd: 3b b5 64 ff ff ff cmp -0x9c(%ebp),%esi
10e8c3: 76 13 jbe 10e8d8 <rtems_bdbuf_remove_from_tree+0x25c>
{
q = *(buf_prev - 1);
10e8c5: 8b 5e fc mov -0x4(%esi),%ebx
if (q->avl.cache == -1)
10e8c8: 80 7b 10 ff cmpb $0xff,0x10(%ebx)
10e8cc: 75 05 jne 10e8d3 <rtems_bdbuf_remove_from_tree+0x257>
{
q->avl.left = p;
10e8ce: 89 43 08 mov %eax,0x8(%ebx)
10e8d1: eb 0c jmp 10e8df <rtems_bdbuf_remove_from_tree+0x263>
}
else
{
q->avl.right = p;
10e8d3: 89 43 0c mov %eax,0xc(%ebx)
10e8d6: eb 07 jmp 10e8df <rtems_bdbuf_remove_from_tree+0x263>
}
}
else
{
*root = p;
10e8d8: a3 fc 20 13 00 mov %eax,0x1320fc
10e8dd: eb 27 jmp 10e906 <rtems_bdbuf_remove_from_tree+0x28a>
*root = q;
}
modified = true;
while (modified)
10e8df: 84 d2 test %dl,%dl
10e8e1: 0f 85 f5 fe ff ff jne 10e7dc <rtems_bdbuf_remove_from_tree+0x160>
10e8e7: eb 1d jmp 10e906 <rtems_bdbuf_remove_from_tree+0x28a>
}
q = p;
buf_prev--;
if (buf_prev > buf_stack)
10e8e9: 8d 85 68 ff ff ff lea -0x98(%ebp),%eax
10e8ef: 39 c6 cmp %eax,%esi
10e8f1: 0f 87 0e fe ff ff ja 10e705 <rtems_bdbuf_remove_from_tree+0x89>
{
p = *(buf_prev - 1);
}
else
{
p = NULL;
10e8f7: c7 85 58 ff ff ff 00 movl $0x0,-0xa8(%ebp)
10e8fe: 00 00 00
10e901: e9 0e fe ff ff jmp 10e714 <rtems_bdbuf_remove_from_tree+0x98>
static void
rtems_bdbuf_remove_from_tree (rtems_bdbuf_buffer *bd)
{
if (rtems_bdbuf_avl_remove (&bdbuf_cache.tree, bd) != 0)
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_TREE_RM);
}
10e906: 81 c4 9c 00 00 00 add $0x9c,%esp
10e90c: 5b pop %ebx
10e90d: 5e pop %esi
10e90e: 5f pop %edi
10e90f: 5d pop %ebp
10e910: c3 ret
0010e9d1 <rtems_bdbuf_remove_from_tree_and_lru_list>:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_TREE_RM);
}
static void
rtems_bdbuf_remove_from_tree_and_lru_list (rtems_bdbuf_buffer *bd)
{
10e9d1: 55 push %ebp
10e9d2: 89 e5 mov %esp,%ebp
10e9d4: 53 push %ebx
10e9d5: 52 push %edx
10e9d6: 89 c3 mov %eax,%ebx
switch (bd->state)
10e9d8: 8b 40 20 mov 0x20(%eax),%eax
10e9db: 85 c0 test %eax,%eax
10e9dd: 74 18 je 10e9f7 <rtems_bdbuf_remove_from_tree_and_lru_list+0x26>
10e9df: 83 f8 02 cmp $0x2,%eax
10e9e2: 75 09 jne 10e9ed <rtems_bdbuf_remove_from_tree_and_lru_list+0x1c><== NEVER TAKEN
{
case RTEMS_BDBUF_STATE_FREE:
break;
case RTEMS_BDBUF_STATE_CACHED:
rtems_bdbuf_remove_from_tree (bd);
10e9e4: 89 d8 mov %ebx,%eax
10e9e6: e8 91 fc ff ff call 10e67c <rtems_bdbuf_remove_from_tree>
break;
10e9eb: eb 0a jmp 10e9f7 <rtems_bdbuf_remove_from_tree_and_lru_list+0x26>
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_10);
10e9ed: ba 08 00 00 42 mov $0x42000008,%edx <== NOT EXECUTED
10e9f2: e8 e4 f9 ff ff call 10e3db <rtems_bdbuf_fatal> <== NOT EXECUTED
)
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
10e9f7: 8b 13 mov (%ebx),%edx
previous = the_node->previous;
10e9f9: 8b 43 04 mov 0x4(%ebx),%eax
next->previous = previous;
10e9fc: 89 42 04 mov %eax,0x4(%edx)
previous->next = next;
10e9ff: 89 10 mov %edx,(%eax)
}
rtems_chain_extract_unprotected (&bd->link);
}
10ea01: 58 pop %eax
10ea02: 5b pop %ebx
10ea03: 5d pop %ebp
10ea04: c3 ret
00110164 <rtems_bdbuf_reset_device_stats>:
}
void rtems_bdbuf_reset_device_stats (rtems_disk_device *dd)
{
110164: 55 push %ebp <== NOT EXECUTED
110165: 89 e5 mov %esp,%ebp <== NOT EXECUTED
110167: 57 push %edi <== NOT EXECUTED
110168: 53 push %ebx <== NOT EXECUTED
110169: 8b 5d 08 mov 0x8(%ebp),%ebx <== NOT EXECUTED
rtems_bdbuf_lock_cache ();
11016c: e8 5a e2 ff ff call 10e3cb <rtems_bdbuf_lock_cache><== NOT EXECUTED
memset (&dd->stats, 0, sizeof(dd->stats));
110171: 8d 53 44 lea 0x44(%ebx),%edx <== NOT EXECUTED
110174: b9 08 00 00 00 mov $0x8,%ecx <== NOT EXECUTED
110179: 31 c0 xor %eax,%eax <== NOT EXECUTED
11017b: 89 d7 mov %edx,%edi <== NOT EXECUTED
11017d: f3 ab rep stos %eax,%es:(%edi) <== NOT EXECUTED
rtems_bdbuf_unlock_cache ();
}
11017f: 5b pop %ebx <== NOT EXECUTED
110180: 5f pop %edi <== NOT EXECUTED
110181: 5d pop %ebp <== NOT EXECUTED
void rtems_bdbuf_reset_device_stats (rtems_disk_device *dd)
{
rtems_bdbuf_lock_cache ();
memset (&dd->stats, 0, sizeof(dd->stats));
rtems_bdbuf_unlock_cache ();
110182: e9 89 e2 ff ff jmp 10e410 <rtems_bdbuf_unlock_cache><== NOT EXECUTED
0010e4dd <rtems_bdbuf_restore_preemption>:
static void
rtems_bdbuf_restore_preemption (rtems_mode prev_mode)
{
10e4dd: 55 push %ebp
10e4de: 89 e5 mov %esp,%ebp
10e4e0: 83 ec 1c sub $0x1c,%esp
10e4e3: 89 c2 mov %eax,%edx
10e4e5: 89 45 f4 mov %eax,-0xc(%ebp)
rtems_status_code sc = RTEMS_SUCCESSFUL;
sc = rtems_task_mode (prev_mode, RTEMS_ALL_MODE_MASKS, &prev_mode);
10e4e8: 8d 45 f4 lea -0xc(%ebp),%eax
10e4eb: 50 push %eax
10e4ec: 68 ff ff 00 00 push $0xffff
10e4f1: 52 push %edx
10e4f2: e8 f5 39 00 00 call 111eec <rtems_task_mode>
if (sc != RTEMS_SUCCESSFUL)
10e4f7: 83 c4 10 add $0x10,%esp
10e4fa: 85 c0 test %eax,%eax
10e4fc: 74 0d je 10e50b <rtems_bdbuf_restore_preemption+0x2e><== ALWAYS TAKEN
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_PREEMPT_RST);
10e4fe: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10e501: 68 11 00 00 42 push $0x42000011 <== NOT EXECUTED
10e506: e8 05 ce ff ff call 10b310 <rtems_fatal_error_occurred><== NOT EXECUTED
}
10e50b: c9 leave
10e50c: c3 ret
00110078 <rtems_bdbuf_set_block_size>:
rtems_status_code
rtems_bdbuf_set_block_size (rtems_disk_device *dd, uint32_t block_size)
{
110078: 55 push %ebp
110079: 89 e5 mov %esp,%ebp
11007b: 57 push %edi
11007c: 56 push %esi
11007d: 53 push %ebx
11007e: 83 ec 1c sub $0x1c,%esp
110081: 8b 5d 08 mov 0x8(%ebp),%ebx
110084: 8b 75 0c mov 0xc(%ebp),%esi
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_bdbuf_lock_cache ();
110087: e8 3f e3 ff ff call 10e3cb <rtems_bdbuf_lock_cache>
sc = RTEMS_INVALID_NUMBER;
}
}
else
{
sc = RTEMS_INVALID_NUMBER;
11008c: bf 0a 00 00 00 mov $0xa,%edi
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_bdbuf_lock_cache ();
if (block_size > 0)
110091: 85 f6 test %esi,%esi
110093: 0f 84 90 00 00 00 je 110129 <rtems_bdbuf_set_block_size+0xb1>
rtems_bdbuf_bds_per_group (size_t size)
{
size_t bufs_per_size;
size_t bds_per_size;
if (size > bdbuf_config.buffer_max)
110099: 3b 35 74 14 12 00 cmp 0x121474,%esi
11009f: 0f 87 84 00 00 00 ja 110129 <rtems_bdbuf_set_block_size+0xb1><== NEVER TAKEN
return 0;
bufs_per_size = ((size - 1) / bdbuf_config.buffer_min) + 1;
1100a5: 8d 46 ff lea -0x1(%esi),%eax
1100a8: 31 d2 xor %edx,%edx
1100aa: f7 35 70 14 12 00 divl 0x121470
1100b0: 40 inc %eax
for (bds_per_size = 1;
1100b1: b9 01 00 00 00 mov $0x1,%ecx
1100b6: eb 02 jmp 1100ba <rtems_bdbuf_set_block_size+0x42>
bds_per_size < bufs_per_size;
bds_per_size <<= 1)
1100b8: d1 e1 shl %ecx
if (size > bdbuf_config.buffer_max)
return 0;
bufs_per_size = ((size - 1) / bdbuf_config.buffer_min) + 1;
for (bds_per_size = 1;
1100ba: 39 c1 cmp %eax,%ecx
1100bc: 72 fa jb 1100b8 <rtems_bdbuf_set_block_size+0x40>
bds_per_size < bufs_per_size;
bds_per_size <<= 1)
;
return bdbuf_cache.max_bds_per_group / bds_per_size;
1100be: a1 e0 20 13 00 mov 0x1320e0,%eax
1100c3: 31 d2 xor %edx,%edx
1100c5: f7 f1 div %ecx
1100c7: 89 45 e0 mov %eax,-0x20(%ebp)
sc = RTEMS_INVALID_NUMBER;
}
}
else
{
sc = RTEMS_INVALID_NUMBER;
1100ca: bf 0a 00 00 00 mov $0xa,%edi
if (block_size > 0)
{
size_t bds_per_group = rtems_bdbuf_bds_per_group (block_size);
if (bds_per_group != 0)
1100cf: 85 c0 test %eax,%eax
1100d1: 74 56 je 110129 <rtems_bdbuf_set_block_size+0xb1><== NEVER TAKEN
{
int block_to_media_block_shift = 0;
uint32_t media_blocks_per_block = block_size / dd->media_block_size;
1100d3: 8b 43 20 mov 0x20(%ebx),%eax
1100d6: 89 45 e4 mov %eax,-0x1c(%ebp)
1100d9: 89 f0 mov %esi,%eax
1100db: 31 d2 xor %edx,%edx
1100dd: f7 75 e4 divl -0x1c(%ebp)
1100e0: 89 c7 mov %eax,%edi
{
size_t bds_per_group = rtems_bdbuf_bds_per_group (block_size);
if (bds_per_group != 0)
{
int block_to_media_block_shift = 0;
1100e2: 31 c9 xor %ecx,%ecx
uint32_t media_blocks_per_block = block_size / dd->media_block_size;
uint32_t one = 1;
while ((one << block_to_media_block_shift) < media_blocks_per_block)
1100e4: b8 01 00 00 00 mov $0x1,%eax
1100e9: eb 01 jmp 1100ec <rtems_bdbuf_set_block_size+0x74>
{
++block_to_media_block_shift;
1100eb: 41 inc %ecx
{
int block_to_media_block_shift = 0;
uint32_t media_blocks_per_block = block_size / dd->media_block_size;
uint32_t one = 1;
while ((one << block_to_media_block_shift) < media_blocks_per_block)
1100ec: 89 c2 mov %eax,%edx
1100ee: d3 e2 shl %cl,%edx
1100f0: 39 fa cmp %edi,%edx
1100f2: 72 f7 jb 1100eb <rtems_bdbuf_set_block_size+0x73>
{
++block_to_media_block_shift;
}
if ((dd->media_block_size << block_to_media_block_shift) != block_size)
1100f4: 8b 45 e4 mov -0x1c(%ebp),%eax
1100f7: d3 e0 shl %cl,%eax
1100f9: 39 f0 cmp %esi,%eax
1100fb: 74 03 je 110100 <rtems_bdbuf_set_block_size+0x88><== ALWAYS TAKEN
block_to_media_block_shift = -1;
1100fd: 83 c9 ff or $0xffffffff,%ecx <== NOT EXECUTED
dd->block_size = block_size;
110100: 89 73 24 mov %esi,0x24(%ebx)
dd->block_count = dd->size / media_blocks_per_block;
110103: 8b 43 1c mov 0x1c(%ebx),%eax
110106: 31 d2 xor %edx,%edx
110108: f7 f7 div %edi
11010a: 89 43 28 mov %eax,0x28(%ebx)
dd->media_blocks_per_block = media_blocks_per_block;
11010d: 89 7b 2c mov %edi,0x2c(%ebx)
dd->block_to_media_block_shift = block_to_media_block_shift;
110110: 89 4b 30 mov %ecx,0x30(%ebx)
dd->bds_per_group = bds_per_group;
110113: 8b 45 e0 mov -0x20(%ebp),%eax
110116: 89 43 34 mov %eax,0x34(%ebx)
}
static void
rtems_bdbuf_read_ahead_reset (rtems_disk_device *dd)
{
rtems_bdbuf_read_ahead_cancel (dd);
110119: 89 d8 mov %ebx,%eax
11011b: e8 69 f5 ff ff call 10f689 <rtems_bdbuf_read_ahead_cancel>
dd->read_ahead.trigger = RTEMS_DISK_READ_AHEAD_NO_TRIGGER;
110120: c7 43 6c ff ff ff ff movl $0xffffffff,0x6c(%ebx)
}
rtems_status_code
rtems_bdbuf_set_block_size (rtems_disk_device *dd, uint32_t block_size)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
110127: 31 ff xor %edi,%edi
else
{
sc = RTEMS_INVALID_NUMBER;
}
rtems_bdbuf_unlock_cache ();
110129: e8 e2 e2 ff ff call 10e410 <rtems_bdbuf_unlock_cache>
return sc;
}
11012e: 89 f8 mov %edi,%eax
110130: 83 c4 1c add $0x1c,%esp
110133: 5b pop %ebx
110134: 5e pop %esi
110135: 5f pop %edi
110136: 5d pop %ebp
110137: c3 ret
0010ee6d <rtems_bdbuf_swapout_modified_processing>:
rtems_chain_control* chain,
rtems_chain_control* transfer,
bool sync_active,
bool update_timers,
uint32_t timer_delta)
{
10ee6d: 55 push %ebp
10ee6e: 89 e5 mov %esp,%ebp
10ee70: 57 push %edi
10ee71: 56 push %esi
10ee72: 53 push %ebx
10ee73: 83 ec 0c sub $0xc,%esp
10ee76: 8a 5d 08 mov 0x8(%ebp),%bl
10ee79: 88 5d f2 mov %bl,-0xe(%ebp)
10ee7c: 8a 5d 0c mov 0xc(%ebp),%bl
10ee7f: 88 5d f1 mov %bl,-0xf(%ebp)
*/
RTEMS_INLINE_ROUTINE const Chain_Node *_Chain_Immutable_first(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_head( the_chain )->next;
10ee82: 8b 1a mov (%edx),%ebx
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
10ee84: 83 c2 04 add $0x4,%edx
10ee87: 89 55 ec mov %edx,-0x14(%ebp)
if (!rtems_chain_is_empty (chain))
10ee8a: 39 d3 cmp %edx,%ebx
10ee8c: 0f 84 c6 00 00 00 je 10ef58 <rtems_bdbuf_swapout_modified_processing+0xeb>
* A sync active with no valid dev means sync all.
*/
if (sync_active && (*dd_ptr == BDBUF_INVALID_DEV))
sync_all = true;
else
sync_all = false;
10ee92: c6 45 f3 00 movb $0x0,-0xd(%ebp)
node = node->next;
/*
* A sync active with no valid dev means sync all.
*/
if (sync_active && (*dd_ptr == BDBUF_INVALID_DEV))
10ee96: 80 7d f2 00 cmpb $0x0,-0xe(%ebp)
10ee9a: 74 07 je 10eea3 <rtems_bdbuf_swapout_modified_processing+0x36>
10ee9c: 83 38 00 cmpl $0x0,(%eax)
10ee9f: 0f 94 45 f3 sete -0xd(%ebp)
}
static bool
rtems_bdbuf_has_buffer_waiters (void)
{
return bdbuf_cache.buffer_waiters.count;
10eea3: 8b 3d 34 21 13 00 mov 0x132134,%edi
10eea9: 89 7d e8 mov %edi,-0x18(%ebp)
* or someone waits for a buffer written force all the timers to 0.
*
* @note Lots of sync requests will skew this timer. It should be based
* on TOD to be accurate. Does it matter ?
*/
if (sync_all || (sync_active && (*dd_ptr == bd->dd))
10eeac: 80 7d f3 00 cmpb $0x0,-0xd(%ebp)
10eeb0: 75 13 jne 10eec5 <rtems_bdbuf_swapout_modified_processing+0x58>
10eeb2: 80 7d f2 00 cmpb $0x0,-0xe(%ebp)
10eeb6: 74 07 je 10eebf <rtems_bdbuf_swapout_modified_processing+0x52>
10eeb8: 8b 53 14 mov 0x14(%ebx),%edx
10eebb: 39 10 cmp %edx,(%eax)
10eebd: 74 06 je 10eec5 <rtems_bdbuf_swapout_modified_processing+0x58>
|| rtems_bdbuf_has_buffer_waiters ())
10eebf: 83 7d e8 00 cmpl $0x0,-0x18(%ebp)
10eec3: 74 07 je 10eecc <rtems_bdbuf_swapout_modified_processing+0x5f>
bd->hold_timer = 0;
10eec5: c7 43 2c 00 00 00 00 movl $0x0,0x2c(%ebx)
if (bd->hold_timer)
10eecc: 8b 53 2c mov 0x2c(%ebx),%edx
10eecf: 85 d2 test %edx,%edx
10eed1: 74 24 je 10eef7 <rtems_bdbuf_swapout_modified_processing+0x8a>
{
if (update_timers)
10eed3: 80 7d f1 00 cmpb $0x0,-0xf(%ebp)
10eed7: 74 14 je 10eeed <rtems_bdbuf_swapout_modified_processing+0x80>
{
if (bd->hold_timer > timer_delta)
10eed9: 3b 55 10 cmp 0x10(%ebp),%edx
10eedc: 76 08 jbe 10eee6 <rtems_bdbuf_swapout_modified_processing+0x79>
bd->hold_timer -= timer_delta;
10eede: 2b 55 10 sub 0x10(%ebp),%edx
10eee1: 89 53 2c mov %edx,0x2c(%ebx)
10eee4: eb 07 jmp 10eeed <rtems_bdbuf_swapout_modified_processing+0x80>
else
bd->hold_timer = 0;
10eee6: c7 43 2c 00 00 00 00 movl $0x0,0x2c(%ebx)
}
if (bd->hold_timer)
10eeed: 83 7b 2c 00 cmpl $0x0,0x2c(%ebx)
10eef1: 74 04 je 10eef7 <rtems_bdbuf_swapout_modified_processing+0x8a>
{
node = node->next;
10eef3: 8b 1b mov (%ebx),%ebx
continue;
10eef5: eb 48 jmp 10ef3f <rtems_bdbuf_swapout_modified_processing+0xd2>
/*
* This assumes we can set it to BDBUF_INVALID_DEV which is just an
* assumption. Cannot use the transfer list being empty the sync dev
* calls sets the dev to use.
*/
if (*dd_ptr == BDBUF_INVALID_DEV)
10eef7: 83 38 00 cmpl $0x0,(%eax)
10eefa: 75 05 jne 10ef01 <rtems_bdbuf_swapout_modified_processing+0x94>
*dd_ptr = bd->dd;
10eefc: 8b 53 14 mov 0x14(%ebx),%edx
10eeff: 89 10 mov %edx,(%eax)
if (bd->dd == *dd_ptr)
10ef01: 8b 38 mov (%eax),%edi
10ef03: 39 7b 14 cmp %edi,0x14(%ebx)
10ef06: 8b 33 mov (%ebx),%esi
10ef08: 75 33 jne 10ef3d <rtems_bdbuf_swapout_modified_processing+0xd0><== NEVER TAKEN
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
10ef0a: c7 43 20 09 00 00 00 movl $0x9,0x20(%ebx)
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
previous = the_node->previous;
10ef11: 8b 53 04 mov 0x4(%ebx),%edx
next->previous = previous;
10ef14: 89 56 04 mov %edx,0x4(%esi)
previous->next = next;
10ef17: 89 32 mov %esi,(%edx)
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_TRANSFER);
rtems_chain_extract_unprotected (node);
tnode = tnode->previous;
10ef19: 8b 51 08 mov 0x8(%ecx),%edx
10ef1c: eb 19 jmp 10ef37 <rtems_bdbuf_swapout_modified_processing+0xca>
while (node && !rtems_chain_is_head (transfer, tnode))
{
rtems_bdbuf_buffer* tbd = (rtems_bdbuf_buffer*) tnode;
if (bd->block > tbd->block)
10ef1e: 8b 7a 18 mov 0x18(%edx),%edi
10ef21: 39 7b 18 cmp %edi,0x18(%ebx)
10ef24: 76 0e jbe 10ef34 <rtems_bdbuf_swapout_modified_processing+0xc7>
Chain_Node *the_node
)
{
Chain_Node *before_node;
the_node->previous = after_node;
10ef26: 89 53 04 mov %edx,0x4(%ebx)
before_node = after_node->next;
10ef29: 8b 3a mov (%edx),%edi
after_node->next = the_node;
10ef2b: 89 1a mov %ebx,(%edx)
the_node->next = before_node;
10ef2d: 89 3b mov %edi,(%ebx)
before_node->previous = the_node;
10ef2f: 89 5f 04 mov %ebx,0x4(%edi)
10ef32: eb 09 jmp 10ef3d <rtems_bdbuf_swapout_modified_processing+0xd0>
{
rtems_chain_insert_unprotected (tnode, node);
node = NULL;
}
else
tnode = tnode->previous;
10ef34: 8b 52 04 mov 0x4(%edx),%edx
rtems_chain_extract_unprotected (node);
tnode = tnode->previous;
while (node && !rtems_chain_is_head (transfer, tnode))
10ef37: 39 ca cmp %ecx,%edx
10ef39: 75 e3 jne 10ef1e <rtems_bdbuf_swapout_modified_processing+0xb1>
10ef3b: eb 0d jmp 10ef4a <rtems_bdbuf_swapout_modified_processing+0xdd>
node = next_node;
}
else
{
node = node->next;
10ef3d: 89 f3 mov %esi,%ebx
if (sync_active && (*dd_ptr == BDBUF_INVALID_DEV))
sync_all = true;
else
sync_all = false;
while (!rtems_chain_is_tail (chain, node))
10ef3f: 3b 5d ec cmp -0x14(%ebp),%ebx
10ef42: 0f 85 64 ff ff ff jne 10eeac <rtems_bdbuf_swapout_modified_processing+0x3f>
10ef48: eb 0e jmp 10ef58 <rtems_bdbuf_swapout_modified_processing+0xeb>
Chain_Node *the_node
)
{
Chain_Node *before_node;
the_node->previous = after_node;
10ef4a: 89 4b 04 mov %ecx,0x4(%ebx)
before_node = after_node->next;
10ef4d: 8b 11 mov (%ecx),%edx
after_node->next = the_node;
10ef4f: 89 19 mov %ebx,(%ecx)
the_node->next = before_node;
10ef51: 89 13 mov %edx,(%ebx)
before_node->previous = the_node;
10ef53: 89 5a 04 mov %ebx,0x4(%edx)
10ef56: eb e5 jmp 10ef3d <rtems_bdbuf_swapout_modified_processing+0xd0>
{
node = node->next;
}
}
}
}
10ef58: 83 c4 0c add $0xc,%esp
10ef5b: 5b pop %ebx
10ef5c: 5e pop %esi
10ef5d: 5f pop %edi
10ef5e: 5d pop %ebp
10ef5f: c3 ret
0010f17b <rtems_bdbuf_swapout_task>:
* not this.
* @return rtems_task Not used.
*/
static rtems_task
rtems_bdbuf_swapout_task (rtems_task_argument arg)
{
10f17b: 55 push %ebp
10f17c: 89 e5 mov %esp,%ebp
10f17e: 57 push %edi
10f17f: 56 push %esi
10f180: 53 push %ebx
10f181: 83 ec 3c sub $0x3c,%esp
rtems_bdbuf_swapout_transfer transfer;
uint32_t period_in_ticks;
const uint32_t period_in_msecs = bdbuf_config.swapout_period;
uint32_t timer_delta;
transfer.write_req = rtems_bdbuf_swapout_writereq_alloc ();
10f184: e8 03 f4 ff ff call 10e58c <rtems_bdbuf_swapout_writereq_alloc>
10f189: 89 45 e4 mov %eax,-0x1c(%ebp)
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
10f18c: 8d 45 d0 lea -0x30(%ebp),%eax
10f18f: 8d 55 d4 lea -0x2c(%ebp),%edx
10f192: 89 55 d0 mov %edx,-0x30(%ebp)
head->previous = NULL;
10f195: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)
tail->previous = head;
10f19c: 89 45 d8 mov %eax,-0x28(%ebp)
rtems_chain_initialize_empty (&transfer.bds);
transfer.dd = BDBUF_INVALID_DEV;
10f19f: c7 45 dc 00 00 00 00 movl $0x0,-0x24(%ebp)
transfer.syncing = false;
10f1a6: c6 45 e0 00 movb $0x0,-0x20(%ebp)
/*
* Localise the period.
*/
period_in_ticks = RTEMS_MICROSECONDS_TO_TICKS (period_in_msecs * 1000);
10f1aa: 69 05 58 14 12 00 e8 imul $0x3e8,0x121458,%eax
10f1b1: 03 00 00
10f1b4: 31 d2 xor %edx,%edx
10f1b6: f7 35 4c e1 12 00 divl 0x12e14c
10f1bc: 89 45 c0 mov %eax,-0x40(%ebp)
rtems_bdbuf_swapout_workers_open (void)
{
rtems_status_code sc;
size_t w;
rtems_bdbuf_lock_cache ();
10f1bf: e8 07 f2 ff ff call 10e3cb <rtems_bdbuf_lock_cache>
for (w = 0; w < bdbuf_config.swapout_workers; w++)
10f1c4: 31 db xor %ebx,%ebx
10f1c6: e9 8d 00 00 00 jmp 10f258 <rtems_bdbuf_swapout_task+0xdd>
{
rtems_bdbuf_swapout_worker* worker;
worker = malloc (sizeof (rtems_bdbuf_swapout_worker));
10f1cb: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10f1ce: 6a 28 push $0x28 <== NOT EXECUTED
10f1d0: e8 6f 87 ff ff call 107944 <malloc> <== NOT EXECUTED
10f1d5: 89 c6 mov %eax,%esi <== NOT EXECUTED
if (!worker)
10f1d7: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
10f1da: 85 c0 test %eax,%eax <== NOT EXECUTED
10f1dc: 75 0a jne 10f1e8 <rtems_bdbuf_swapout_task+0x6d><== NOT EXECUTED
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_SO_NOMEM);
10f1de: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10f1e1: 68 15 00 00 42 push $0x42000015 <== NOT EXECUTED
10f1e6: eb 6a jmp 10f252 <rtems_bdbuf_swapout_task+0xd7><== NOT EXECUTED
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
Chain_Node *old_last = tail->previous;
10f1e8: a1 d0 20 13 00 mov 0x1320d0,%eax <== NOT EXECUTED
the_node->next = tail;
10f1ed: c7 06 cc 20 13 00 movl $0x1320cc,(%esi) <== NOT EXECUTED
tail->previous = the_node;
10f1f3: 89 35 d0 20 13 00 mov %esi,0x1320d0 <== NOT EXECUTED
old_last->next = the_node;
10f1f9: 89 30 mov %esi,(%eax) <== NOT EXECUTED
the_node->previous = old_last;
10f1fb: 89 46 04 mov %eax,0x4(%esi) <== NOT EXECUTED
rtems_chain_append_unprotected (&bdbuf_cache.swapout_workers, &worker->link);
worker->enabled = true;
10f1fe: c6 46 0c 01 movb $0x1,0xc(%esi) <== NOT EXECUTED
worker->transfer.write_req = rtems_bdbuf_swapout_writereq_alloc ();
10f202: e8 85 f3 ff ff call 10e58c <rtems_bdbuf_swapout_writereq_alloc><== NOT EXECUTED
10f207: 89 46 24 mov %eax,0x24(%esi) <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
10f20a: 8d 46 10 lea 0x10(%esi),%eax <== NOT EXECUTED
10f20d: 8d 56 14 lea 0x14(%esi),%edx <== NOT EXECUTED
10f210: 89 56 10 mov %edx,0x10(%esi) <== NOT EXECUTED
head->next = tail;
head->previous = NULL;
10f213: c7 46 14 00 00 00 00 movl $0x0,0x14(%esi) <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
10f21a: 89 46 18 mov %eax,0x18(%esi) <== NOT EXECUTED
rtems_chain_initialize_empty (&worker->transfer.bds);
worker->transfer.dd = BDBUF_INVALID_DEV;
10f21d: c7 46 1c 00 00 00 00 movl $0x0,0x1c(%esi) <== NOT EXECUTED
sc = rtems_bdbuf_create_task (rtems_build_name('B', 'D', 'o', 'a' + w),
10f224: 51 push %ecx <== NOT EXECUTED
10f225: 51 push %ecx <== NOT EXECUTED
* @param arg A pointer to the global cache data. Use the global variable and
* not this.
* @return rtems_task Not used.
*/
static rtems_task
rtems_bdbuf_swapout_task (rtems_task_argument arg)
10f226: 8d 43 61 lea 0x61(%ebx),%eax <== NOT EXECUTED
worker->transfer.write_req = rtems_bdbuf_swapout_writereq_alloc ();
rtems_chain_initialize_empty (&worker->transfer.bds);
worker->transfer.dd = BDBUF_INVALID_DEV;
sc = rtems_bdbuf_create_task (rtems_build_name('B', 'D', 'o', 'a' + w),
10f229: 0d 00 6f 44 42 or $0x42446f00,%eax <== NOT EXECUTED
10f22e: 8d 56 08 lea 0x8(%esi),%edx <== NOT EXECUTED
10f231: 52 push %edx <== NOT EXECUTED
10f232: 56 push %esi <== NOT EXECUTED
10f233: b9 23 f4 10 00 mov $0x10f423,%ecx <== NOT EXECUTED
10f238: 8b 15 64 14 12 00 mov 0x121464,%edx <== NOT EXECUTED
10f23e: e8 eb f3 ff ff call 10e62e <rtems_bdbuf_create_task.constprop.14><== NOT EXECUTED
bdbuf_config.swapout_worker_priority,
RTEMS_BDBUF_SWAPOUT_WORKER_TASK_PRIORITY_DEFAULT,
rtems_bdbuf_swapout_worker_task,
(rtems_task_argument) worker,
&worker->id);
if (sc != RTEMS_SUCCESSFUL)
10f243: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
10f246: 85 c0 test %eax,%eax <== NOT EXECUTED
10f248: 74 0d je 10f257 <rtems_bdbuf_swapout_task+0xdc><== NOT EXECUTED
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_SO_WK_CREATE);
10f24a: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10f24d: 68 16 00 00 42 push $0x42000016 <== NOT EXECUTED
10f252: e8 b9 c0 ff ff call 10b310 <rtems_fatal_error_occurred><== NOT EXECUTED
rtems_status_code sc;
size_t w;
rtems_bdbuf_lock_cache ();
for (w = 0; w < bdbuf_config.swapout_workers; w++)
10f257: 43 inc %ebx <== NOT EXECUTED
10f258: 3b 1d 60 14 12 00 cmp 0x121460,%ebx
10f25e: 0f 82 67 ff ff ff jb 10f1cb <rtems_bdbuf_swapout_task+0x50><== NEVER TAKEN
&worker->id);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_SO_WK_CREATE);
}
rtems_bdbuf_unlock_cache ();
10f264: e8 a7 f1 ff ff call 10e410 <rtems_bdbuf_unlock_cache>
10f269: e9 3a 01 00 00 jmp 10f3a8 <rtems_bdbuf_swapout_task+0x22d>
/*
* Create the worker threads.
*/
rtems_bdbuf_swapout_workers_open ();
while (bdbuf_cache.swapout_enabled)
10f26e: bf 01 00 00 00 mov $0x1,%edi
rtems_bdbuf_swapout_transfer* transfer)
{
rtems_bdbuf_swapout_worker* worker;
bool transfered_buffers = false;
rtems_bdbuf_lock_cache ();
10f273: e8 53 f1 ff ff call 10e3cb <rtems_bdbuf_lock_cache>
* here. We do not know the worker is the last in a sequence of sync writes
* until after we have it running so we do not know to tell it to release the
* lock. The simplest solution is to get the main swap out task perform all
* sync operations.
*/
if (bdbuf_cache.sync_active)
10f278: 80 3d f0 20 13 00 00 cmpb $0x0,0x1320f0
10f27f: 74 07 je 10f288 <rtems_bdbuf_swapout_task+0x10d>
worker = NULL;
10f281: 31 f6 xor %esi,%esi
/*
* Extact all the buffers we find for a specific device. The device is
* the first one we find on a modified list. Process the sync queue of
* buffers first.
*/
if (rtems_bdbuf_swapout_processing (timer_delta,
10f283: 8d 5d d0 lea -0x30(%ebp),%ebx
10f286: eb 13 jmp 10f29b <rtems_bdbuf_swapout_task+0x120>
10f288: b8 c8 20 13 00 mov $0x1320c8,%eax
10f28d: e8 f6 f0 ff ff call 10e388 <_Chain_Get_unprotected>
10f292: 89 c6 mov %eax,%esi
worker = NULL;
else
{
worker = (rtems_bdbuf_swapout_worker*)
rtems_chain_get_unprotected (&bdbuf_cache.swapout_workers);
if (worker)
10f294: 85 c0 test %eax,%eax
10f296: 74 e9 je 10f281 <rtems_bdbuf_swapout_task+0x106><== ALWAYS TAKEN
transfer = &worker->transfer;
10f298: 8d 58 10 lea 0x10(%eax),%ebx <== NOT EXECUTED
Chain_Node *tail = _Chain_Tail( the_chain );
10f29b: 8d 43 04 lea 0x4(%ebx),%eax
10f29e: 89 03 mov %eax,(%ebx)
head->next = tail;
head->previous = NULL;
10f2a0: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx)
tail->previous = head;
10f2a7: 89 5b 08 mov %ebx,0x8(%ebx)
}
rtems_chain_initialize_empty (&transfer->bds);
transfer->dd = BDBUF_INVALID_DEV;
10f2aa: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx)
transfer->syncing = bdbuf_cache.sync_active;
10f2b1: a0 f0 20 13 00 mov 0x1320f0,%al
10f2b6: 88 43 10 mov %al,0x10(%ebx)
/*
* When the sync is for a device limit the sync to that device. If the sync
* is for a buffer handle process the devices in the order on the sync
* list. This means the dev is BDBUF_INVALID_DEV.
*/
if (bdbuf_cache.sync_active)
10f2b9: 84 c0 test %al,%al
10f2bb: 74 08 je 10f2c5 <rtems_bdbuf_swapout_task+0x14a>
transfer->dd = bdbuf_cache.sync_device;
10f2bd: a1 f8 20 13 00 mov 0x1320f8,%eax
10f2c2: 89 43 0c mov %eax,0xc(%ebx)
/*
* If we have any buffers in the sync queue move them to the modified
* list. The first sync buffer will select the device we use.
*/
rtems_bdbuf_swapout_modified_processing (&transfer->dd,
10f2c5: 8d 43 0c lea 0xc(%ebx),%eax
10f2c8: 89 45 c4 mov %eax,-0x3c(%ebp)
10f2cb: 52 push %edx
10f2cc: ff 35 58 14 12 00 pushl 0x121458
10f2d2: 6a 00 push $0x0
10f2d4: 6a 01 push $0x1
10f2d6: 89 d9 mov %ebx,%ecx
10f2d8: ba 18 21 13 00 mov $0x132118,%edx
10f2dd: e8 8b fb ff ff call 10ee6d <rtems_bdbuf_swapout_modified_processing>
timer_delta);
/*
* Process the cache's modified list.
*/
rtems_bdbuf_swapout_modified_processing (&transfer->dd,
10f2e2: 83 c4 0c add $0xc,%esp
10f2e5: ff 35 58 14 12 00 pushl 0x121458
10f2eb: 81 e7 ff 00 00 00 and $0xff,%edi
10f2f1: 57 push %edi
10f2f2: 0f b6 05 f0 20 13 00 movzbl 0x1320f0,%eax
10f2f9: 50 push %eax
10f2fa: 89 d9 mov %ebx,%ecx
10f2fc: ba 0c 21 13 00 mov $0x13210c,%edx
10f301: 8b 45 c4 mov -0x3c(%ebp),%eax
10f304: e8 64 fb ff ff call 10ee6d <rtems_bdbuf_swapout_modified_processing>
/*
* We have all the buffers that have been modified for this device so the
* cache can be unlocked because the state of each buffer has been set to
* TRANSFER.
*/
rtems_bdbuf_unlock_cache ();
10f309: e8 02 f1 ff ff call 10e410 <rtems_bdbuf_unlock_cache>
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
10f30e: 8d 43 04 lea 0x4(%ebx),%eax
/*
* If there are buffers to transfer to the media transfer them.
*/
if (!rtems_chain_is_empty (&transfer->bds))
10f311: 83 c4 10 add $0x10,%esp
10f314: 39 03 cmp %eax,(%ebx)
10f316: 74 2d je 10f345 <rtems_bdbuf_swapout_task+0x1ca>
{
if (worker)
10f318: 85 f6 test %esi,%esi
10f31a: 74 20 je 10f33c <rtems_bdbuf_swapout_task+0x1c1><== ALWAYS TAKEN
{
rtems_status_code sc = rtems_event_send (worker->id,
10f31c: 50 push %eax <== NOT EXECUTED
10f31d: 50 push %eax <== NOT EXECUTED
10f31e: 6a 04 push $0x4 <== NOT EXECUTED
10f320: ff 76 08 pushl 0x8(%esi) <== NOT EXECUTED
10f323: e8 40 b6 ff ff call 10a968 <rtems_event_send> <== NOT EXECUTED
RTEMS_BDBUF_SWAPOUT_SYNC);
if (sc != RTEMS_SUCCESSFUL)
10f328: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
10f32b: 85 c0 test %eax,%eax <== NOT EXECUTED
10f32d: 74 1a je 10f349 <rtems_bdbuf_swapout_task+0x1ce><== NOT EXECUTED
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_SO_WAKE);
10f32f: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10f332: 68 14 00 00 42 push $0x42000014 <== NOT EXECUTED
10f337: e9 16 ff ff ff jmp 10f252 <rtems_bdbuf_swapout_task+0xd7><== NOT EXECUTED
}
else
{
rtems_bdbuf_swapout_write (transfer);
10f33c: 89 d8 mov %ebx,%eax
10f33e: e8 3c fd ff ff call 10f07f <rtems_bdbuf_swapout_write>
10f343: eb 04 jmp 10f349 <rtems_bdbuf_swapout_task+0x1ce>
rtems_bdbuf_swapout_processing (unsigned long timer_delta,
bool update_timers,
rtems_bdbuf_swapout_transfer* transfer)
{
rtems_bdbuf_swapout_worker* worker;
bool transfered_buffers = false;
10f345: 31 c0 xor %eax,%eax
10f347: eb 02 jmp 10f34b <rtems_bdbuf_swapout_task+0x1d0>
else
{
rtems_bdbuf_swapout_write (transfer);
}
transfered_buffers = true;
10f349: b0 01 mov $0x1,%al
10f34b: 31 ff xor %edi,%edi
}
if (bdbuf_cache.sync_active && !transfered_buffers)
10f34d: 80 3d f0 20 13 00 00 cmpb $0x0,0x1320f0
10f354: 74 3c je 10f392 <rtems_bdbuf_swapout_task+0x217>
10f356: 84 c0 test %al,%al
10f358: 0f 85 15 ff ff ff jne 10f273 <rtems_bdbuf_swapout_task+0xf8>
{
rtems_id sync_requester;
rtems_bdbuf_lock_cache ();
10f35e: e8 68 f0 ff ff call 10e3cb <rtems_bdbuf_lock_cache>
sync_requester = bdbuf_cache.sync_requester;
10f363: 8b 1d f4 20 13 00 mov 0x1320f4,%ebx
bdbuf_cache.sync_active = false;
10f369: c6 05 f0 20 13 00 00 movb $0x0,0x1320f0
bdbuf_cache.sync_requester = 0;
10f370: c7 05 f4 20 13 00 00 movl $0x0,0x1320f4
10f377: 00 00 00
rtems_bdbuf_unlock_cache ();
10f37a: e8 91 f0 ff ff call 10e410 <rtems_bdbuf_unlock_cache>
if (sync_requester)
10f37f: 85 db test %ebx,%ebx
10f381: 74 7a je 10f3fd <rtems_bdbuf_swapout_task+0x282><== NEVER TAKEN
rtems_event_send (sync_requester, RTEMS_BDBUF_TRANSFER_SYNC);
10f383: 57 push %edi
10f384: 57 push %edi
10f385: 6a 02 push $0x2
10f387: 53 push %ebx
10f388: e8 db b5 ff ff call 10a968 <rtems_event_send>
10f38d: 83 c4 10 add $0x10,%esp
10f390: eb 6b jmp 10f3fd <rtems_bdbuf_swapout_task+0x282>
/*
* Extact all the buffers we find for a specific device. The device is
* the first one we find on a modified list. Process the sync queue of
* buffers first.
*/
if (rtems_bdbuf_swapout_processing (timer_delta,
10f392: 84 c0 test %al,%al
10f394: 74 67 je 10f3fd <rtems_bdbuf_swapout_task+0x282>
10f396: e9 d8 fe ff ff jmp 10f273 <rtems_bdbuf_swapout_task+0xf8>
RTEMS_EVENT_ALL | RTEMS_WAIT,
period_in_ticks,
&out);
if ((sc != RTEMS_SUCCESSFUL) && (sc != RTEMS_TIMEOUT))
rtems_fatal_error_occurred (BLKDEV_FATAL_BDBUF_SWAPOUT_RE);
10f39b: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10f39e: 68 18 00 00 42 push $0x42000018 <== NOT EXECUTED
10f3a3: e9 aa fe ff ff jmp 10f252 <rtems_bdbuf_swapout_task+0xd7><== NOT EXECUTED
/*
* Create the worker threads.
*/
rtems_bdbuf_swapout_workers_open ();
while (bdbuf_cache.swapout_enabled)
10f3a8: 80 3d c4 20 13 00 00 cmpb $0x0,0x1320c4
10f3af: 0f 85 b9 fe ff ff jne 10f26e <rtems_bdbuf_swapout_task+0xf3><== ALWAYS TAKEN
static void
rtems_bdbuf_swapout_workers_close (void)
{
rtems_chain_node* node;
rtems_bdbuf_lock_cache ();
10f3b5: e8 11 f0 ff ff call 10e3cb <rtems_bdbuf_lock_cache><== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_First(
Chain_Control *the_chain
)
{
return _Chain_Head( the_chain )->next;
10f3ba: 8b 1d c8 20 13 00 mov 0x1320c8,%ebx <== NOT EXECUTED
10f3c0: eb 15 jmp 10f3d7 <rtems_bdbuf_swapout_task+0x25c><== NOT EXECUTED
node = rtems_chain_first (&bdbuf_cache.swapout_workers);
while (!rtems_chain_is_tail (&bdbuf_cache.swapout_workers, node))
{
rtems_bdbuf_swapout_worker* worker = (rtems_bdbuf_swapout_worker*) node;
worker->enabled = false;
10f3c2: c6 43 0c 00 movb $0x0,0xc(%ebx) <== NOT EXECUTED
rtems_event_send (worker->id, RTEMS_BDBUF_SWAPOUT_SYNC);
10f3c6: 56 push %esi <== NOT EXECUTED
10f3c7: 56 push %esi <== NOT EXECUTED
10f3c8: 6a 04 push $0x4 <== NOT EXECUTED
10f3ca: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
10f3cd: e8 96 b5 ff ff call 10a968 <rtems_event_send> <== NOT EXECUTED
void rtems_bdbuf_reset_device_stats (rtems_disk_device *dd)
{
rtems_bdbuf_lock_cache ();
memset (&dd->stats, 0, sizeof(dd->stats));
rtems_bdbuf_unlock_cache ();
}
10f3d2: 8b 1b mov (%ebx),%ebx <== NOT EXECUTED
10f3d4: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rtems_chain_node* node;
rtems_bdbuf_lock_cache ();
node = rtems_chain_first (&bdbuf_cache.swapout_workers);
while (!rtems_chain_is_tail (&bdbuf_cache.swapout_workers, node))
10f3d7: 81 fb cc 20 13 00 cmp $0x1320cc,%ebx <== NOT EXECUTED
10f3dd: 75 e3 jne 10f3c2 <rtems_bdbuf_swapout_task+0x247><== NOT EXECUTED
worker->enabled = false;
rtems_event_send (worker->id, RTEMS_BDBUF_SWAPOUT_SYNC);
node = rtems_chain_next (node);
}
rtems_bdbuf_unlock_cache ();
10f3df: e8 2c f0 ff ff call 10e410 <rtems_bdbuf_unlock_cache><== NOT EXECUTED
rtems_fatal_error_occurred (BLKDEV_FATAL_BDBUF_SWAPOUT_RE);
}
rtems_bdbuf_swapout_workers_close ();
free (transfer.write_req);
10f3e4: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10f3e7: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
10f3ea: e8 35 81 ff ff call 107524 <free> <== NOT EXECUTED
rtems_task_delete (RTEMS_SELF);
10f3ef: c7 04 24 00 00 00 00 movl $0x0,(%esp) <== NOT EXECUTED
10f3f6: e8 f1 bb ff ff call 10afec <rtems_task_delete> <== NOT EXECUTED
10f3fb: eb 1e jmp 10f41b <rtems_bdbuf_swapout_task+0x2a0><== NOT EXECUTED
*/
update_timers = false;
}
while (transfered_buffers);
sc = rtems_event_receive (RTEMS_BDBUF_SWAPOUT_SYNC,
10f3fd: 8d 45 cc lea -0x34(%ebp),%eax
10f400: 50 push %eax
10f401: ff 75 c0 pushl -0x40(%ebp)
10f404: 6a 00 push $0x0
10f406: 6a 04 push $0x4
10f408: e8 f3 b3 ff ff call 10a800 <rtems_event_receive>
RTEMS_EVENT_ALL | RTEMS_WAIT,
period_in_ticks,
&out);
if ((sc != RTEMS_SUCCESSFUL) && (sc != RTEMS_TIMEOUT))
10f40d: 83 c4 10 add $0x10,%esp
10f410: 83 f8 06 cmp $0x6,%eax
10f413: 74 93 je 10f3a8 <rtems_bdbuf_swapout_task+0x22d>
10f415: 85 c0 test %eax,%eax
10f417: 74 8f je 10f3a8 <rtems_bdbuf_swapout_task+0x22d><== ALWAYS TAKEN
10f419: eb 80 jmp 10f39b <rtems_bdbuf_swapout_task+0x220><== NOT EXECUTED
rtems_bdbuf_swapout_workers_close ();
free (transfer.write_req);
rtems_task_delete (RTEMS_SELF);
}
10f41b: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
10f41e: 5b pop %ebx <== NOT EXECUTED
10f41f: 5e pop %esi <== NOT EXECUTED
10f420: 5f pop %edi <== NOT EXECUTED
10f421: 5d pop %ebp <== NOT EXECUTED
10f422: c3 ret <== NOT EXECUTED
0010f423 <rtems_bdbuf_swapout_worker_task>:
* @param arg A pointer to the worker thread's private data.
* @return rtems_task Not used.
*/
static rtems_task
rtems_bdbuf_swapout_worker_task (rtems_task_argument arg)
{
10f423: 55 push %ebp <== NOT EXECUTED
10f424: 89 e5 mov %esp,%ebp <== NOT EXECUTED
10f426: 57 push %edi <== NOT EXECUTED
10f427: 56 push %esi <== NOT EXECUTED
10f428: 53 push %ebx <== NOT EXECUTED
10f429: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10f42c: 8b 5d 08 mov 0x8(%ebp),%ebx <== NOT EXECUTED
while (worker->enabled)
{
rtems_bdbuf_wait_for_event (RTEMS_BDBUF_SWAPOUT_SYNC);
rtems_bdbuf_swapout_write (&worker->transfer);
10f42f: 8d 73 10 lea 0x10(%ebx),%esi <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
10f432: 8d 7b 14 lea 0x14(%ebx),%edi <== NOT EXECUTED
static rtems_task
rtems_bdbuf_swapout_worker_task (rtems_task_argument arg)
{
rtems_bdbuf_swapout_worker* worker = (rtems_bdbuf_swapout_worker*) arg;
while (worker->enabled)
10f435: eb 45 jmp 10f47c <rtems_bdbuf_swapout_worker_task+0x59><== NOT EXECUTED
{
rtems_bdbuf_wait_for_event (RTEMS_BDBUF_SWAPOUT_SYNC);
10f437: b8 04 00 00 00 mov $0x4,%eax <== NOT EXECUTED
10f43c: e8 27 f0 ff ff call 10e468 <rtems_bdbuf_wait_for_event><== NOT EXECUTED
rtems_bdbuf_swapout_write (&worker->transfer);
10f441: 89 f0 mov %esi,%eax <== NOT EXECUTED
10f443: e8 37 fc ff ff call 10f07f <rtems_bdbuf_swapout_write><== NOT EXECUTED
rtems_bdbuf_lock_cache ();
10f448: e8 7e ef ff ff call 10e3cb <rtems_bdbuf_lock_cache><== NOT EXECUTED
10f44d: 89 7b 10 mov %edi,0x10(%ebx) <== NOT EXECUTED
head->next = tail;
head->previous = NULL;
10f450: c7 43 14 00 00 00 00 movl $0x0,0x14(%ebx) <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
10f457: 89 73 18 mov %esi,0x18(%ebx) <== NOT EXECUTED
rtems_chain_initialize_empty (&worker->transfer.bds);
worker->transfer.dd = BDBUF_INVALID_DEV;
10f45a: c7 43 1c 00 00 00 00 movl $0x0,0x1c(%ebx) <== NOT EXECUTED
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
Chain_Node *old_last = tail->previous;
10f461: a1 d0 20 13 00 mov 0x1320d0,%eax <== NOT EXECUTED
the_node->next = tail;
10f466: c7 03 cc 20 13 00 movl $0x1320cc,(%ebx) <== NOT EXECUTED
tail->previous = the_node;
10f46c: 89 1d d0 20 13 00 mov %ebx,0x1320d0 <== NOT EXECUTED
old_last->next = the_node;
10f472: 89 18 mov %ebx,(%eax) <== NOT EXECUTED
the_node->previous = old_last;
10f474: 89 43 04 mov %eax,0x4(%ebx) <== NOT EXECUTED
rtems_chain_append_unprotected (&bdbuf_cache.swapout_workers, &worker->link);
rtems_bdbuf_unlock_cache ();
10f477: e8 94 ef ff ff call 10e410 <rtems_bdbuf_unlock_cache><== NOT EXECUTED
static rtems_task
rtems_bdbuf_swapout_worker_task (rtems_task_argument arg)
{
rtems_bdbuf_swapout_worker* worker = (rtems_bdbuf_swapout_worker*) arg;
while (worker->enabled)
10f47c: 80 7b 0c 00 cmpb $0x0,0xc(%ebx) <== NOT EXECUTED
10f480: 75 b5 jne 10f437 <rtems_bdbuf_swapout_worker_task+0x14><== NOT EXECUTED
rtems_chain_append_unprotected (&bdbuf_cache.swapout_workers, &worker->link);
rtems_bdbuf_unlock_cache ();
}
free (worker->transfer.write_req);
10f482: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10f485: ff 73 24 pushl 0x24(%ebx) <== NOT EXECUTED
10f488: e8 97 80 ff ff call 107524 <free> <== NOT EXECUTED
free (worker);
10f48d: 89 1c 24 mov %ebx,(%esp) <== NOT EXECUTED
10f490: e8 8f 80 ff ff call 107524 <free> <== NOT EXECUTED
rtems_task_delete (RTEMS_SELF);
10f495: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
10f498: c7 45 08 00 00 00 00 movl $0x0,0x8(%ebp) <== NOT EXECUTED
}
10f49f: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
10f4a2: 5b pop %ebx <== NOT EXECUTED
10f4a3: 5e pop %esi <== NOT EXECUTED
10f4a4: 5f pop %edi <== NOT EXECUTED
10f4a5: 5d pop %ebp <== NOT EXECUTED
}
free (worker->transfer.write_req);
free (worker);
rtems_task_delete (RTEMS_SELF);
10f4a6: e9 41 bb ff ff jmp 10afec <rtems_task_delete> <== NOT EXECUTED
0010f07f <rtems_bdbuf_swapout_write>:
*
* @param transfer The transfer transaction.
*/
static void
rtems_bdbuf_swapout_write (rtems_bdbuf_swapout_transfer* transfer)
{
10f07f: 55 push %ebp
10f080: 89 e5 mov %esp,%ebp
10f082: 57 push %edi
10f083: 56 push %esi
10f084: 53 push %ebx
10f085: 83 ec 1c sub $0x1c,%esp
10f088: 89 c3 mov %eax,%ebx
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
10f08a: 8d 40 04 lea 0x4(%eax),%eax
10f08d: 89 45 dc mov %eax,-0x24(%ebp)
printf ("bdbuf:swapout transfer: %08x\n", (unsigned) transfer->dd->dev);
/*
* If there are buffers to transfer to the media transfer them.
*/
if (!rtems_chain_is_empty (&transfer->bds))
10f090: 39 03 cmp %eax,(%ebx)
10f092: 0f 84 db 00 00 00 je 10f173 <rtems_bdbuf_swapout_write+0xf4><== NEVER TAKEN
* The last block number used when the driver only supports
* continuous blocks in a single request.
*/
uint32_t last_block = 0;
rtems_disk_device *dd = transfer->dd;
10f098: 8b 73 0c mov 0xc(%ebx),%esi
uint32_t media_blocks_per_block = dd->media_blocks_per_block;
10f09b: 8b 56 2c mov 0x2c(%esi),%edx
10f09e: 89 55 d8 mov %edx,-0x28(%ebp)
bool need_continuous_blocks =
(dd->phys_dev->capabilities & RTEMS_BLKDEV_CAP_MULTISECTOR_CONT) != 0;
10f0a1: 8b 46 08 mov 0x8(%esi),%eax
10f0a4: 8b 40 0c mov 0xc(%eax),%eax
10f0a7: 83 e0 01 and $0x1,%eax
10f0aa: 89 45 e0 mov %eax,-0x20(%ebp)
* should be possible to make this change with little effect in this
* code. The array that is passed is broken in design and should be
* removed. Merging members of a struct into the first member is
* trouble waiting to happen.
*/
transfer->write_req->status = RTEMS_RESOURCE_IN_USE;
10f0ad: 8b 43 14 mov 0x14(%ebx),%eax
10f0b0: c7 40 0c 0c 00 00 00 movl $0xc,0xc(%eax)
transfer->write_req->bufnum = 0;
10f0b7: c7 40 10 00 00 00 00 movl $0x0,0x10(%eax)
{
/*
* The last block number used when the driver only supports
* continuous blocks in a single request.
*/
uint32_t last_block = 0;
10f0be: 31 ff xor %edi,%edi
* trouble waiting to happen.
*/
transfer->write_req->status = RTEMS_RESOURCE_IN_USE;
transfer->write_req->bufnum = 0;
while ((node = rtems_chain_get_unprotected(&transfer->bds)) != NULL)
10f0c0: e9 84 00 00 00 jmp 10f149 <rtems_bdbuf_swapout_write+0xca>
if (rtems_bdbuf_tracer)
printf ("bdbuf:swapout write: bd:%" PRIu32 ", bufnum:%" PRIu32 " mode:%s\n",
bd->block, transfer->write_req->bufnum,
need_continuous_blocks ? "MULTI" : "SCAT");
if (need_continuous_blocks && transfer->write_req->bufnum &&
10f0c5: 83 7d e0 00 cmpl $0x0,-0x20(%ebp)
10f0c9: 8b 53 14 mov 0x14(%ebx),%edx
10f0cc: 74 20 je 10f0ee <rtems_bdbuf_swapout_write+0x6f>
10f0ce: 83 7a 10 00 cmpl $0x0,0x10(%edx)
10f0d2: 74 1a je 10f0ee <rtems_bdbuf_swapout_write+0x6f>
bd->block != last_block + media_blocks_per_block)
10f0d4: 8b 4d d8 mov -0x28(%ebp),%ecx
10f0d7: 01 f9 add %edi,%ecx
if (rtems_bdbuf_tracer)
printf ("bdbuf:swapout write: bd:%" PRIu32 ", bufnum:%" PRIu32 " mode:%s\n",
bd->block, transfer->write_req->bufnum,
need_continuous_blocks ? "MULTI" : "SCAT");
if (need_continuous_blocks && transfer->write_req->bufnum &&
10f0d9: 39 48 18 cmp %ecx,0x18(%eax)
10f0dc: 74 10 je 10f0ee <rtems_bdbuf_swapout_write+0x6f>
Chain_Node *the_node
)
{
Chain_Node *before_node;
the_node->previous = after_node;
10f0de: 89 58 04 mov %ebx,0x4(%eax)
before_node = after_node->next;
10f0e1: 8b 13 mov (%ebx),%edx
after_node->next = the_node;
10f0e3: 89 03 mov %eax,(%ebx)
the_node->next = before_node;
10f0e5: 89 10 mov %edx,(%eax)
before_node->previous = the_node;
10f0e7: 89 42 04 mov %eax,0x4(%edx)
bd->block != last_block + media_blocks_per_block)
{
rtems_chain_prepend_unprotected (&transfer->bds, &bd->link);
write = true;
10f0ea: b0 01 mov $0x1,%al
10f0ec: eb 28 jmp 10f116 <rtems_bdbuf_swapout_write+0x97>
}
else
{
rtems_blkdev_sg_buffer* buf;
buf = &transfer->write_req->bufs[transfer->write_req->bufnum];
10f0ee: 8b 7a 10 mov 0x10(%edx),%edi
10f0f1: 47 inc %edi
10f0f2: 89 f9 mov %edi,%ecx
10f0f4: c1 e1 04 shl $0x4,%ecx
10f0f7: 01 d1 add %edx,%ecx
10f0f9: 89 4d e4 mov %ecx,-0x1c(%ebp)
transfer->write_req->bufnum++;
10f0fc: 89 7a 10 mov %edi,0x10(%edx)
buf->user = bd;
10f0ff: 89 41 14 mov %eax,0x14(%ecx)
buf->block = bd->block;
10f102: 8b 78 18 mov 0x18(%eax),%edi
10f105: 89 79 08 mov %edi,0x8(%ecx)
buf->length = dd->block_size;
10f108: 8b 56 24 mov 0x24(%esi),%edx
10f10b: 89 51 0c mov %edx,0xc(%ecx)
buf->buffer = bd->buffer;
10f10e: 8b 40 1c mov 0x1c(%eax),%eax
10f111: 89 41 10 mov %eax,0x10(%ecx)
transfer->write_req->bufnum = 0;
while ((node = rtems_chain_get_unprotected(&transfer->bds)) != NULL)
{
rtems_bdbuf_buffer* bd = (rtems_bdbuf_buffer*) node;
bool write = false;
10f114: 31 c0 xor %eax,%eax
/*
* Perform the transfer if there are no more buffers, or the transfer
* size has reached the configured max. value.
*/
if (rtems_chain_is_empty (&transfer->bds) ||
10f116: 8b 4d dc mov -0x24(%ebp),%ecx
10f119: 39 0b cmp %ecx,(%ebx)
10f11b: 8b 53 14 mov 0x14(%ebx),%edx
10f11e: 74 0f je 10f12f <rtems_bdbuf_swapout_write+0xb0>
10f120: 8b 0d 50 14 12 00 mov 0x121450,%ecx
10f126: 39 4a 10 cmp %ecx,0x10(%edx)
10f129: 73 04 jae 10f12f <rtems_bdbuf_swapout_write+0xb0>
(transfer->write_req->bufnum >= bdbuf_config.max_write_blocks))
write = true;
if (write)
10f12b: 84 c0 test %al,%al
10f12d: 74 1a je 10f149 <rtems_bdbuf_swapout_write+0xca>
{
rtems_bdbuf_execute_transfer_request (dd, transfer->write_req, false);
10f12f: 31 c9 xor %ecx,%ecx
10f131: 89 f0 mov %esi,%eax
10f133: e8 28 fe ff ff call 10ef60 <rtems_bdbuf_execute_transfer_request>
transfer->write_req->status = RTEMS_RESOURCE_IN_USE;
10f138: 8b 43 14 mov 0x14(%ebx),%eax
10f13b: c7 40 0c 0c 00 00 00 movl $0xc,0xc(%eax)
transfer->write_req->bufnum = 0;
10f142: c7 40 10 00 00 00 00 movl $0x0,0x10(%eax)
*/
RTEMS_INLINE_ROUTINE rtems_chain_node *rtems_chain_get_unprotected(
rtems_chain_control *the_chain
)
{
return _Chain_Get_unprotected( the_chain );
10f149: 89 d8 mov %ebx,%eax
10f14b: e8 38 f2 ff ff call 10e388 <_Chain_Get_unprotected>
* trouble waiting to happen.
*/
transfer->write_req->status = RTEMS_RESOURCE_IN_USE;
transfer->write_req->bufnum = 0;
while ((node = rtems_chain_get_unprotected(&transfer->bds)) != NULL)
10f150: 85 c0 test %eax,%eax
10f152: 0f 85 6d ff ff ff jne 10f0c5 <rtems_bdbuf_swapout_write+0x46>
/*
* If sync'ing and the deivce is capability of handling a sync IO control
* call perform the call.
*/
if (transfer->syncing &&
10f158: 80 7b 10 00 cmpb $0x0,0x10(%ebx)
10f15c: 74 15 je 10f173 <rtems_bdbuf_swapout_write+0xf4>
(dd->phys_dev->capabilities & RTEMS_BLKDEV_CAP_SYNC))
10f15e: 8b 46 08 mov 0x8(%esi),%eax
/*
* If sync'ing and the deivce is capability of handling a sync IO control
* call perform the call.
*/
if (transfer->syncing &&
10f161: f6 40 0c 02 testb $0x2,0xc(%eax)
10f165: 74 0c je 10f173 <rtems_bdbuf_swapout_write+0xf4><== ALWAYS TAKEN
(dd->phys_dev->capabilities & RTEMS_BLKDEV_CAP_SYNC))
{
/* int result = */ dd->ioctl (dd->phys_dev, RTEMS_BLKDEV_REQ_SYNC, NULL);
10f167: 53 push %ebx <== NOT EXECUTED
10f168: 6a 00 push $0x0 <== NOT EXECUTED
10f16a: 6a 02 push $0x2 <== NOT EXECUTED
10f16c: 50 push %eax <== NOT EXECUTED
10f16d: ff 56 38 call *0x38(%esi) <== NOT EXECUTED
10f170: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
/* How should the error be handled ? */
}
}
}
10f173: 8d 65 f4 lea -0xc(%ebp),%esp
10f176: 5b pop %ebx
10f177: 5e pop %esi
10f178: 5f pop %edi
10f179: 5d pop %ebp
10f17a: c3 ret
0010e58c <rtems_bdbuf_swapout_writereq_alloc>:
*
* @return rtems_blkdev_request* The write reference memory.
*/
static rtems_blkdev_request*
rtems_bdbuf_swapout_writereq_alloc (void)
{
10e58c: 55 push %ebp
10e58d: 89 e5 mov %esp,%ebp
10e58f: 53 push %ebx
10e590: 83 ec 10 sub $0x10,%esp
* have been a rtems_chain_control. Simple, fast and less storage as the node
* is already part of the buffer structure.
*/
rtems_blkdev_request* write_req =
malloc (sizeof (rtems_blkdev_request) +
(bdbuf_config.max_write_blocks * sizeof (rtems_blkdev_sg_buffer)));
10e593: a1 50 14 12 00 mov 0x121450,%eax
10e598: c1 e0 04 shl $0x4,%eax
* I am disappointment at finding code like this in RTEMS. The request should
* have been a rtems_chain_control. Simple, fast and less storage as the node
* is already part of the buffer structure.
*/
rtems_blkdev_request* write_req =
malloc (sizeof (rtems_blkdev_request) +
10e59b: 83 c0 18 add $0x18,%eax
* @note chrisj The rtems_blkdev_request and the array at the end is a hack.
* I am disappointment at finding code like this in RTEMS. The request should
* have been a rtems_chain_control. Simple, fast and less storage as the node
* is already part of the buffer structure.
*/
rtems_blkdev_request* write_req =
10e59e: 50 push %eax
10e59f: e8 a0 93 ff ff call 107944 <malloc>
10e5a4: 89 c3 mov %eax,%ebx
malloc (sizeof (rtems_blkdev_request) +
(bdbuf_config.max_write_blocks * sizeof (rtems_blkdev_sg_buffer)));
if (!write_req)
10e5a6: 83 c4 10 add $0x10,%esp
10e5a9: 85 c0 test %eax,%eax
10e5ab: 75 0d jne 10e5ba <rtems_bdbuf_swapout_writereq_alloc+0x2e><== ALWAYS TAKEN
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_SO_NOMEM);
10e5ad: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10e5b0: 68 15 00 00 42 push $0x42000015 <== NOT EXECUTED
10e5b5: e8 56 cd ff ff call 10b310 <rtems_fatal_error_occurred><== NOT EXECUTED
write_req->req = RTEMS_BLKDEV_REQ_WRITE;
10e5ba: c7 00 01 00 00 00 movl $0x1,(%eax)
write_req->req_done = rtems_bdbuf_transfer_done;
10e5c0: c7 40 04 49 e4 10 00 movl $0x10e449,0x4(%eax)
write_req->done_arg = write_req;
10e5c7: 89 43 08 mov %eax,0x8(%ebx)
write_req->io_task = rtems_task_self ();
10e5ca: e8 3d 3a 00 00 call 11200c <rtems_task_self>
10e5cf: 89 43 14 mov %eax,0x14(%ebx)
return write_req;
}
10e5d2: 89 d8 mov %ebx,%eax
10e5d4: 8b 5d fc mov -0x4(%ebp),%ebx
10e5d7: c9 leave
10e5d8: c3 ret
0010fdea <rtems_bdbuf_sync>:
rtems_status_code
rtems_bdbuf_sync (rtems_bdbuf_buffer *bd)
{
10fdea: 55 push %ebp
10fdeb: 89 e5 mov %esp,%ebp
10fded: 53 push %ebx
10fdee: 51 push %ecx
10fdef: 8b 5d 08 mov 0x8(%ebp),%ebx
}
static rtems_status_code
rtems_bdbuf_check_bd_and_lock_cache (rtems_bdbuf_buffer *bd, const char *kind)
{
if (bd == NULL)
10fdf2: 85 db test %ebx,%ebx
10fdf4: 0f 84 c4 00 00 00 je 10febe <rtems_bdbuf_sync+0xd4> <== NEVER TAKEN
if (rtems_bdbuf_tracer)
{
printf ("bdbuf:%s: %" PRIu32 "\n", kind, bd->block);
rtems_bdbuf_show_users (kind, bd);
}
rtems_bdbuf_lock_cache();
10fdfa: e8 cc e5 ff ff call 10e3cb <rtems_bdbuf_lock_cache>
sc = rtems_bdbuf_check_bd_and_lock_cache (bd, "sync");
if (sc != RTEMS_SUCCESSFUL)
return sc;
switch (bd->state)
10fdff: 8b 43 20 mov 0x20(%ebx),%eax
10fe02: 83 f8 03 cmp $0x3,%eax
10fe05: 0f 82 a0 00 00 00 jb 10feab <rtems_bdbuf_sync+0xc1> <== NEVER TAKEN
10fe0b: 83 f8 05 cmp $0x5,%eax
10fe0e: 76 0e jbe 10fe1e <rtems_bdbuf_sync+0x34>
10fe10: 83 f8 06 cmp $0x6,%eax
10fe13: 0f 85 92 00 00 00 jne 10feab <rtems_bdbuf_sync+0xc1> <== NEVER TAKEN
10fe19: e9 84 00 00 00 jmp 10fea2 <rtems_bdbuf_sync+0xb8>
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
10fe1e: c7 43 20 08 00 00 00 movl $0x8,0x20(%ebx)
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
Chain_Node *old_last = tail->previous;
10fe25: a1 20 21 13 00 mov 0x132120,%eax
the_node->next = tail;
10fe2a: c7 03 1c 21 13 00 movl $0x13211c,(%ebx)
tail->previous = the_node;
10fe30: 89 1d 20 21 13 00 mov %ebx,0x132120
old_last->next = the_node;
10fe36: 89 18 mov %ebx,(%eax)
the_node->previous = old_last;
10fe38: 89 43 04 mov %eax,0x4(%ebx)
{
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_SYNC);
rtems_chain_append_unprotected (&bdbuf_cache.sync, &bd->link);
if (bd->waiters)
10fe3b: 83 7b 24 00 cmpl $0x0,0x24(%ebx)
10fe3f: 74 0a je 10fe4b <rtems_bdbuf_sync+0x61>
rtems_bdbuf_wake (&bdbuf_cache.access_waiters);
10fe41: b8 24 21 13 00 mov $0x132124,%eax
10fe46: e8 ba e7 ff ff call 10e605 <rtems_bdbuf_wake>
rtems_bdbuf_wake_swapper ();
10fe4b: e8 d0 e5 ff ff call 10e420 <rtems_bdbuf_wake_swapper>
static void
rtems_bdbuf_wait_for_sync_done (rtems_bdbuf_buffer *bd)
{
while (true)
{
switch (bd->state)
10fe50: 8b 43 20 mov 0x20(%ebx),%eax
10fe53: 83 f8 01 cmp $0x1,%eax
10fe56: 72 18 jb 10fe70 <rtems_bdbuf_sync+0x86> <== NEVER TAKEN
10fe58: 83 f8 07 cmp $0x7,%eax
10fe5b: 76 1a jbe 10fe77 <rtems_bdbuf_sync+0x8d>
10fe5d: 83 f8 0a cmp $0xa,%eax
10fe60: 77 0e ja 10fe70 <rtems_bdbuf_sync+0x86> <== NEVER TAKEN
case RTEMS_BDBUF_STATE_ACCESS_PURGED:
return;
case RTEMS_BDBUF_STATE_SYNC:
case RTEMS_BDBUF_STATE_TRANSFER:
case RTEMS_BDBUF_STATE_TRANSFER_PURGED:
rtems_bdbuf_wait (bd, &bdbuf_cache.transfer_waiters);
10fe62: ba 2c 21 13 00 mov $0x13212c,%edx
10fe67: 89 d8 mov %ebx,%eax
10fe69: e8 fa e6 ff ff call 10e568 <rtems_bdbuf_wait>
10fe6e: eb e0 jmp 10fe50 <rtems_bdbuf_sync+0x66>
break;
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_9);
10fe70: ba 07 00 00 42 mov $0x42000007,%edx <== NOT EXECUTED
10fe75: eb 39 jmp 10feb0 <rtems_bdbuf_sync+0xc6> <== NOT EXECUTED
rtems_bdbuf_wait_for_sync_done (bd);
/*
* We may have created a cached or empty buffer which may be recycled.
*/
if (bd->waiters == 0
10fe77: 83 7b 24 00 cmpl $0x0,0x24(%ebx)
10fe7b: 75 38 jne 10feb5 <rtems_bdbuf_sync+0xcb>
&& (bd->state == RTEMS_BDBUF_STATE_CACHED
|| bd->state == RTEMS_BDBUF_STATE_EMPTY))
10fe7d: 8d 50 ff lea -0x1(%eax),%edx
/*
* We may have created a cached or empty buffer which may be recycled.
*/
if (bd->waiters == 0
&& (bd->state == RTEMS_BDBUF_STATE_CACHED
10fe80: 83 fa 01 cmp $0x1,%edx
10fe83: 77 30 ja 10feb5 <rtems_bdbuf_sync+0xcb> <== NEVER TAKEN
|| bd->state == RTEMS_BDBUF_STATE_EMPTY))
{
if (bd->state == RTEMS_BDBUF_STATE_EMPTY)
10fe85: 48 dec %eax
10fe86: 75 0e jne 10fe96 <rtems_bdbuf_sync+0xac>
{
rtems_bdbuf_remove_from_tree (bd);
10fe88: 89 d8 mov %ebx,%eax
10fe8a: e8 ed e7 ff ff call 10e67c <rtems_bdbuf_remove_from_tree>
rtems_bdbuf_make_free_and_add_to_lru_list (bd);
10fe8f: 89 d8 mov %ebx,%eax
10fe91: e8 7b ea ff ff call 10e911 <rtems_bdbuf_make_free_and_add_to_lru_list>
}
rtems_bdbuf_wake (&bdbuf_cache.buffer_waiters);
10fe96: b8 34 21 13 00 mov $0x132134,%eax
10fe9b: e8 65 e7 ff ff call 10e605 <rtems_bdbuf_wake>
10fea0: eb 13 jmp 10feb5 <rtems_bdbuf_sync+0xcb>
case RTEMS_BDBUF_STATE_ACCESS_EMPTY:
case RTEMS_BDBUF_STATE_ACCESS_MODIFIED:
rtems_bdbuf_sync_after_access (bd);
break;
case RTEMS_BDBUF_STATE_ACCESS_PURGED:
rtems_bdbuf_discard_buffer_after_access (bd);
10fea2: 89 d8 mov %ebx,%eax
10fea4: e8 11 f8 ff ff call 10f6ba <rtems_bdbuf_discard_buffer_after_access>
break;
10fea9: eb 0a jmp 10feb5 <rtems_bdbuf_sync+0xcb>
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_5);
10feab: ba 03 00 00 42 mov $0x42000003,%edx <== NOT EXECUTED
10feb0: e8 26 e5 ff ff call 10e3db <rtems_bdbuf_fatal> <== NOT EXECUTED
}
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_usage ();
rtems_bdbuf_unlock_cache ();
10feb5: e8 56 e5 ff ff call 10e410 <rtems_bdbuf_unlock_cache>
return RTEMS_SUCCESSFUL;
10feba: 31 c0 xor %eax,%eax
10febc: eb 05 jmp 10fec3 <rtems_bdbuf_sync+0xd9>
static rtems_status_code
rtems_bdbuf_check_bd_and_lock_cache (rtems_bdbuf_buffer *bd, const char *kind)
{
if (bd == NULL)
return RTEMS_INVALID_ADDRESS;
10febe: b8 09 00 00 00 mov $0x9,%eax <== NOT EXECUTED
rtems_bdbuf_show_usage ();
rtems_bdbuf_unlock_cache ();
return RTEMS_SUCCESSFUL;
}
10fec3: 5a pop %edx
10fec4: 5b pop %ebx
10fec5: 5d pop %ebp
10fec6: c3 ret
0010e3ec <rtems_bdbuf_unlock>:
* @param lock The mutex to unlock.
* @param fatal_error_code The error code if the call fails.
*/
static void
rtems_bdbuf_unlock (rtems_id lock, uint32_t fatal_error_code)
{
10e3ec: 55 push %ebp
10e3ed: 89 e5 mov %esp,%ebp
10e3ef: 53 push %ebx
10e3f0: 83 ec 10 sub $0x10,%esp
10e3f3: 89 d3 mov %edx,%ebx
rtems_status_code sc = rtems_semaphore_release (lock);
10e3f5: 50 push %eax
10e3f6: e8 29 ca ff ff call 10ae24 <rtems_semaphore_release>
if (sc != RTEMS_SUCCESSFUL)
10e3fb: 83 c4 10 add $0x10,%esp
10e3fe: 85 c0 test %eax,%eax
10e400: 74 09 je 10e40b <rtems_bdbuf_unlock+0x1f><== ALWAYS TAKEN
rtems_fatal_error_occurred (fatal_error_code);
10e402: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10e405: 53 push %ebx <== NOT EXECUTED
10e406: e8 05 cf ff ff call 10b310 <rtems_fatal_error_occurred><== NOT EXECUTED
}
10e40b: 8b 5d fc mov -0x4(%ebp),%ebx
10e40e: c9 leave
10e40f: c3 ret
0010e468 <rtems_bdbuf_wait_for_event>:
return RTEMS_UNSATISFIED;
}
static void
rtems_bdbuf_wait_for_event (rtems_event_set event)
{
10e468: 55 push %ebp
10e469: 89 e5 mov %esp,%ebp
10e46b: 53 push %ebx
10e46c: 83 ec 14 sub $0x14,%esp
10e46f: 89 c3 mov %eax,%ebx
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_event_set out = 0;
10e471: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp)
sc = rtems_event_receive (event,
10e478: 8d 45 f4 lea -0xc(%ebp),%eax
10e47b: 50 push %eax
10e47c: 6a 00 push $0x0
10e47e: 6a 00 push $0x0
10e480: 53 push %ebx
10e481: e8 7a c3 ff ff call 10a800 <rtems_event_receive>
RTEMS_EVENT_ALL | RTEMS_WAIT,
RTEMS_NO_TIMEOUT,
&out);
if (sc != RTEMS_SUCCESSFUL || out != event)
10e486: 83 c4 10 add $0x10,%esp
10e489: 85 c0 test %eax,%eax
10e48b: 75 05 jne 10e492 <rtems_bdbuf_wait_for_event+0x2a><== NEVER TAKEN
10e48d: 39 5d f4 cmp %ebx,-0xc(%ebp)
10e490: 74 0d je 10e49f <rtems_bdbuf_wait_for_event+0x37><== ALWAYS TAKEN
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_WAIT_EVNT);
10e492: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10e495: 68 1a 00 00 42 push $0x4200001a <== NOT EXECUTED
10e49a: e8 71 ce ff ff call 10b310 <rtems_fatal_error_occurred><== NOT EXECUTED
}
10e49f: 8b 5d fc mov -0x4(%ebp),%ebx
10e4a2: c9 leave
10e4a3: c3 ret
0010e605 <rtems_bdbuf_wake>:
static void
rtems_bdbuf_wake (const rtems_bdbuf_waiters *waiters)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
if (waiters->count > 0)
10e605: 83 38 00 cmpl $0x0,(%eax)
10e608: 74 23 je 10e62d <rtems_bdbuf_wake+0x28>
* Wake a blocked resource. The resource has a counter that lets us know if
* there are any waiters.
*/
static void
rtems_bdbuf_wake (const rtems_bdbuf_waiters *waiters)
{
10e60a: 55 push %ebp
10e60b: 89 e5 mov %esp,%ebp
10e60d: 83 ec 14 sub $0x14,%esp
rtems_status_code sc = RTEMS_SUCCESSFUL;
if (waiters->count > 0)
{
sc = rtems_semaphore_flush (waiters->sema);
10e610: ff 70 04 pushl 0x4(%eax)
10e613: e8 50 38 00 00 call 111e68 <rtems_semaphore_flush>
if (sc != RTEMS_SUCCESSFUL)
10e618: 83 c4 10 add $0x10,%esp
10e61b: 85 c0 test %eax,%eax
10e61d: 74 0d je 10e62c <rtems_bdbuf_wake+0x27> <== ALWAYS TAKEN
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_CACHE_WAKE);
10e61f: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10e622: 68 13 00 00 42 push $0x42000013 <== NOT EXECUTED
10e627: e8 e4 cc ff ff call 10b310 <rtems_fatal_error_occurred><== NOT EXECUTED
}
}
10e62c: c9 leave
10e62d: c3 ret
0010e420 <rtems_bdbuf_wake_swapper>:
}
}
static void
rtems_bdbuf_wake_swapper (void)
{
10e420: 55 push %ebp
10e421: 89 e5 mov %esp,%ebp
10e423: 83 ec 10 sub $0x10,%esp
rtems_status_code sc = rtems_event_send (bdbuf_cache.swapout,
10e426: 6a 04 push $0x4
10e428: ff 35 c0 20 13 00 pushl 0x1320c0
10e42e: e8 35 c5 ff ff call 10a968 <rtems_event_send>
RTEMS_BDBUF_SWAPOUT_SYNC);
if (sc != RTEMS_SUCCESSFUL)
10e433: 83 c4 10 add $0x10,%esp
10e436: 85 c0 test %eax,%eax
10e438: 74 0d je 10e447 <rtems_bdbuf_wake_swapper+0x27><== ALWAYS TAKEN
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_SO_WAKE);
10e43a: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10e43d: 68 14 00 00 42 push $0x42000014 <== NOT EXECUTED
10e442: e8 c9 ce ff ff call 10b310 <rtems_fatal_error_occurred><== NOT EXECUTED
}
10e447: c9 leave
10e448: c3 ret
0010607c <rtems_bdpart_create>:
const rtems_bdpart_format *format,
rtems_bdpart_partition *pt,
const unsigned *dist,
size_t count
)
{
10607c: 55 push %ebp
10607d: 89 e5 mov %esp,%ebp
10607f: 57 push %edi
106080: 56 push %esi
106081: 53 push %ebx
106082: 83 ec 3c sub $0x3c,%esp
106085: 8b 5d 0c mov 0xc(%ebp),%ebx
rtems_status_code sc = RTEMS_SUCCESSFUL;
bool dos_compatibility = format != NULL
&& format->type == RTEMS_BDPART_FORMAT_MBR
&& format->mbr.dos_compatibility;
106088: 31 ff xor %edi,%edi
10608a: 85 db test %ebx,%ebx
10608c: 74 09 je 106097 <rtems_bdpart_create+0x1b><== NEVER TAKEN
size_t count
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
bool dos_compatibility = format != NULL
&& format->type == RTEMS_BDPART_FORMAT_MBR
10608e: 83 3b 00 cmpl $0x0,(%ebx)
106091: 75 04 jne 106097 <rtems_bdpart_create+0x1b><== NEVER TAKEN
&& format->mbr.dos_compatibility;
106093: 0f b6 7b 08 movzbl 0x8(%ebx),%edi
const unsigned *dist,
size_t count
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
bool dos_compatibility = format != NULL
106097: 89 f8 mov %edi,%eax
106099: 83 e0 01 and $0x1,%eax
10609c: 88 45 d4 mov %al,-0x2c(%ebp)
&& format->type == RTEMS_BDPART_FORMAT_MBR
&& format->mbr.dos_compatibility;
rtems_blkdev_bnum disk_end = 0;
10609f: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
rtems_blkdev_bnum pos = 0;
rtems_blkdev_bnum dist_sum = 0;
rtems_blkdev_bnum record_space =
1060a6: 3c 01 cmp $0x1,%al
1060a8: 19 ff sbb %edi,%edi
1060aa: 83 e7 c2 and $0xffffffc2,%edi
1060ad: 83 c7 3f add $0x3f,%edi
size_t i = 0;
/* Check if we have something to do */
if (count == 0) {
/* Nothing to do */
return RTEMS_SUCCESSFUL;
1060b0: 31 c9 xor %ecx,%ecx
rtems_blkdev_bnum overhead = 0;
rtems_blkdev_bnum free_space = 0;
size_t i = 0;
/* Check if we have something to do */
if (count == 0) {
1060b2: 83 7d 18 00 cmpl $0x0,0x18(%ebp)
1060b6: 0f 84 56 01 00 00 je 106212 <rtems_bdpart_create+0x196><== NEVER TAKEN
/* Nothing to do */
return RTEMS_SUCCESSFUL;
}
/* Check parameter */
if (format == NULL || pt == NULL || dist == NULL) {
1060bc: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
1060c0: 0f 84 39 01 00 00 je 1061ff <rtems_bdpart_create+0x183><== NEVER TAKEN
1060c6: 85 db test %ebx,%ebx
1060c8: 0f 84 31 01 00 00 je 1061ff <rtems_bdpart_create+0x183><== NEVER TAKEN
return RTEMS_INVALID_ADDRESS;
1060ce: b1 09 mov $0x9,%cl
/* Nothing to do */
return RTEMS_SUCCESSFUL;
}
/* Check parameter */
if (format == NULL || pt == NULL || dist == NULL) {
1060d0: 83 7d 14 00 cmpl $0x0,0x14(%ebp)
1060d4: 0f 84 38 01 00 00 je 106212 <rtems_bdpart_create+0x196><== NEVER TAKEN
return RTEMS_INVALID_ADDRESS;
}
/* Get disk data */
sc = rtems_bdpart_get_disk_data( disk_name, NULL, NULL, &disk_end);
1060da: 8d 45 e4 lea -0x1c(%ebp),%eax
1060dd: 50 push %eax
1060de: 6a 00 push $0x0
1060e0: 6a 00 push $0x0
1060e2: ff 75 08 pushl 0x8(%ebp)
1060e5: e8 9c 03 00 00 call 106486 <rtems_bdpart_get_disk_data>
1060ea: 89 c1 mov %eax,%ecx
if (sc != RTEMS_SUCCESSFUL) {
1060ec: 83 c4 10 add $0x10,%esp
1060ef: 85 c0 test %eax,%eax
1060f1: 0f 85 1b 01 00 00 jne 106212 <rtems_bdpart_create+0x196><== NEVER TAKEN
1060f7: 31 c0 xor %eax,%eax
1060f9: c7 45 d0 00 00 00 00 movl $0x0,-0x30(%ebp)
/* Get distribution sum and check for overflow */
for (i = 0; i < count; ++i) {
unsigned prev_sum = dist_sum;
dist_sum += dist [i];
106100: 8b 75 14 mov 0x14(%ebp),%esi
106103: 8b 14 86 mov (%esi,%eax,4),%edx
if (dist_sum < prev_sum) {
106106: 8b 75 d0 mov -0x30(%ebp),%esi
106109: 01 d6 add %edx,%esi
10610b: 89 75 cc mov %esi,-0x34(%ebp)
10610e: 73 0a jae 10611a <rtems_bdpart_create+0x9e><== ALWAYS TAKEN
return RTEMS_INVALID_NUMBER;
106110: b9 0a 00 00 00 mov $0xa,%ecx <== NOT EXECUTED
106115: e9 f8 00 00 00 jmp 106212 <rtems_bdpart_create+0x196><== NOT EXECUTED
}
if (dist [i] == 0) {
10611a: 85 d2 test %edx,%edx
10611c: 74 f2 je 106110 <rtems_bdpart_create+0x94><== NEVER TAKEN
if (sc != RTEMS_SUCCESSFUL) {
return sc;
}
/* Get distribution sum and check for overflow */
for (i = 0; i < count; ++i) {
10611e: 40 inc %eax
unsigned prev_sum = dist_sum;
dist_sum += dist [i];
10611f: 8b 75 cc mov -0x34(%ebp),%esi
106122: 89 75 d0 mov %esi,-0x30(%ebp)
if (sc != RTEMS_SUCCESSFUL) {
return sc;
}
/* Get distribution sum and check for overflow */
for (i = 0; i < count; ++i) {
106125: 3b 45 18 cmp 0x18(%ebp),%eax
106128: 75 d6 jne 106100 <rtems_bdpart_create+0x84>
return RTEMS_INVALID_NUMBER;
}
}
/* Check format */
if (format->type != RTEMS_BDPART_FORMAT_MBR) {
10612a: 83 3b 00 cmpl $0x0,(%ebx)
10612d: 0f 85 d3 00 00 00 jne 106206 <rtems_bdpart_create+0x18a><== NEVER TAKEN
return RTEMS_NOT_IMPLEMENTED;
}
/* Align end of disk on cylinder boundary if necessary */
if (dos_compatibility) {
106133: 80 7d d4 00 cmpb $0x0,-0x2c(%ebp)
106137: 74 0f je 106148 <rtems_bdpart_create+0xcc><== NEVER TAKEN
disk_end -= (disk_end % record_space);
106139: 8b 45 e4 mov -0x1c(%ebp),%eax
10613c: 31 d2 xor %edx,%edx
10613e: f7 f7 div %edi
106140: 8b 45 e4 mov -0x1c(%ebp),%eax
106143: 29 d0 sub %edx,%eax
106145: 89 45 e4 mov %eax,-0x1c(%ebp)
/*
* We need at least space for the MBR and the compatibility space for the
* first primary partition.
*/
overhead += record_space;
106148: 89 f8 mov %edi,%eax
/*
* In case we need an extended partition and logical partitions we have to
* account for the space of each EBR.
*/
if (count > 4) {
10614a: 83 7d 18 04 cmpl $0x4,0x18(%ebp)
10614e: 76 0b jbe 10615b <rtems_bdpart_create+0xdf><== NEVER TAKEN
overhead += (count - 3) * record_space;
106150: 8b 45 18 mov 0x18(%ebp),%eax
106153: 83 e8 03 sub $0x3,%eax
106156: 0f af c7 imul %edi,%eax
106159: 01 f8 add %edi,%eax
/*
* Account space to align every partition on cylinder boundaries if
* necessary.
*/
if (dos_compatibility) {
10615b: 80 7d d4 00 cmpb $0x0,-0x2c(%ebp)
10615f: 74 09 je 10616a <rtems_bdpart_create+0xee><== NEVER TAKEN
overhead += (count - 1) * record_space;
106161: 8b 55 18 mov 0x18(%ebp),%edx
106164: 4a dec %edx
106165: 0f af d7 imul %edi,%edx
106168: 01 d0 add %edx,%eax
}
/* Check disk space */
if ((overhead + count) > disk_end) {
10616a: 8b 75 e4 mov -0x1c(%ebp),%esi
10616d: 89 75 c8 mov %esi,-0x38(%ebp)
106170: 8b 55 18 mov 0x18(%ebp),%edx
106173: 01 c2 add %eax,%edx
106175: 39 f2 cmp %esi,%edx
106177: 0f 87 90 00 00 00 ja 10620d <rtems_bdpart_create+0x191><== NEVER TAKEN
/* Begin of first primary partition */
pos = record_space;
/* Space for partitions */
free_space = disk_end - overhead;
10617d: 29 c6 sub %eax,%esi
10617f: 89 75 c4 mov %esi,-0x3c(%ebp)
106182: 8b 75 10 mov 0x10(%ebp),%esi
106185: 89 75 d0 mov %esi,-0x30(%ebp)
if ((overhead + count) > disk_end) {
return RTEMS_IO_ERROR;
}
/* Begin of first primary partition */
pos = record_space;
106188: 89 fe mov %edi,%esi
/* Space for partitions */
free_space = disk_end - overhead;
for (i = 0; i < count; ++i) {
10618a: 31 db xor %ebx,%ebx
rtems_bdpart_partition *p = pt + i;
/* Partition size */
rtems_blkdev_bnum s = free_space * dist [i];
10618c: 8b 55 14 mov 0x14(%ebp),%edx
10618f: 8b 04 9a mov (%edx,%ebx,4),%eax
106192: 8b 55 c4 mov -0x3c(%ebp),%edx
106195: 0f af d0 imul %eax,%edx
if (s < free_space || s < dist [i]) {
106198: 3b 55 c4 cmp -0x3c(%ebp),%edx
10619b: 0f 82 6f ff ff ff jb 106110 <rtems_bdpart_create+0x94><== NEVER TAKEN
1061a1: 39 c2 cmp %eax,%edx
1061a3: 0f 82 67 ff ff ff jb 106110 <rtems_bdpart_create+0x94><== NEVER TAKEN
/* TODO: Calculate without overflow */
return RTEMS_INVALID_NUMBER;
}
s /= dist_sum;
1061a9: 89 d0 mov %edx,%eax
1061ab: 31 d2 xor %edx,%edx
1061ad: f7 75 cc divl -0x34(%ebp)
1061b0: 89 45 d4 mov %eax,-0x2c(%ebp)
/* Ensure that the partition is not empty */
if (s == 0) {
1061b3: 85 c0 test %eax,%eax
1061b5: 75 07 jne 1061be <rtems_bdpart_create+0x142><== ALWAYS TAKEN
s = 1;
1061b7: c7 45 d4 01 00 00 00 movl $0x1,-0x2c(%ebp) <== NOT EXECUTED
}
/* Align partition upwards */
s += record_space - (s % record_space);
1061be: 8b 45 d4 mov -0x2c(%ebp),%eax
1061c1: 31 d2 xor %edx,%edx
1061c3: f7 f7 div %edi
1061c5: 8b 45 d4 mov -0x2c(%ebp),%eax
1061c8: 01 f8 add %edi,%eax
1061ca: 29 d0 sub %edx,%eax
/* Reserve space for the EBR if necessary */
if (count > 4 && i > 2) {
1061cc: 83 fb 02 cmp $0x2,%ebx
1061cf: 76 08 jbe 1061d9 <rtems_bdpart_create+0x15d>
1061d1: 83 7d 18 04 cmpl $0x4,0x18(%ebp)
1061d5: 76 02 jbe 1061d9 <rtems_bdpart_create+0x15d><== NEVER TAKEN
pos += record_space;
1061d7: 01 fe add %edi,%esi
}
/* Partition begin and end */
p->begin = pos;
1061d9: 8b 55 d0 mov -0x30(%ebp),%edx
1061dc: 89 32 mov %esi,(%edx)
pos += s;
1061de: 01 c6 add %eax,%esi
p->end = pos;
1061e0: 89 72 04 mov %esi,0x4(%edx)
pos = record_space;
/* Space for partitions */
free_space = disk_end - overhead;
for (i = 0; i < count; ++i) {
1061e3: 43 inc %ebx
1061e4: 83 c2 30 add $0x30,%edx
1061e7: 89 55 d0 mov %edx,-0x30(%ebp)
1061ea: 3b 5d 18 cmp 0x18(%ebp),%ebx
1061ed: 75 9d jne 10618c <rtems_bdpart_create+0x110>
pos += s;
p->end = pos;
}
/* Expand the last partition to the disk end */
pt [count - 1].end = disk_end;
1061ef: 4b dec %ebx
1061f0: 6b db 30 imul $0x30,%ebx,%ebx
1061f3: 8b 45 c8 mov -0x38(%ebp),%eax
1061f6: 8b 75 10 mov 0x10(%ebp),%esi
1061f9: 89 44 1e 04 mov %eax,0x4(%esi,%ebx,1)
1061fd: eb 13 jmp 106212 <rtems_bdpart_create+0x196>
return RTEMS_SUCCESSFUL;
}
/* Check parameter */
if (format == NULL || pt == NULL || dist == NULL) {
return RTEMS_INVALID_ADDRESS;
1061ff: b9 09 00 00 00 mov $0x9,%ecx <== NOT EXECUTED
106204: eb 0c jmp 106212 <rtems_bdpart_create+0x196><== NOT EXECUTED
}
}
/* Check format */
if (format->type != RTEMS_BDPART_FORMAT_MBR) {
return RTEMS_NOT_IMPLEMENTED;
106206: b9 18 00 00 00 mov $0x18,%ecx <== NOT EXECUTED
10620b: eb 05 jmp 106212 <rtems_bdpart_create+0x196><== NOT EXECUTED
overhead += (count - 1) * record_space;
}
/* Check disk space */
if ((overhead + count) > disk_end) {
return RTEMS_IO_ERROR;
10620d: b9 1b 00 00 00 mov $0x1b,%ecx <== NOT EXECUTED
/* Expand the last partition to the disk end */
pt [count - 1].end = disk_end;
return RTEMS_SUCCESSFUL;
}
106212: 89 c8 mov %ecx,%eax
106214: 8d 65 f4 lea -0xc(%ebp),%esp
106217: 5b pop %ebx
106218: 5e pop %esi
106219: 5f pop %edi
10621a: 5d pop %ebp
10621b: c3 ret
0010621c <rtems_bdpart_dump>:
{
uuid_unparse_lower( type, str);
}
void rtems_bdpart_dump( const rtems_bdpart_partition *pt, size_t count)
{
10621c: 55 push %ebp
10621d: 89 e5 mov %esp,%ebp
10621f: 57 push %edi
106220: 56 push %esi
106221: 53 push %ebx
106222: 83 ec 68 sub $0x68,%esp
size_t i = 0;
printf(
106225: 68 ed 36 12 00 push $0x1236ed
10622a: e8 b5 f9 00 00 call 115be4 <puts>
10622f: 8b 5d 08 mov 0x8(%ebp),%ebx
"------------+------------+-----------------------------------------------------\n"
" BEGIN | END | TYPE\n"
"------------+------------+-----------------------------------------------------\n"
);
for (i = 0; i < count; ++i) {
106232: 83 c4 10 add $0x10,%esp
106235: 31 ff xor %edi,%edi
snprintf( type_buffer, sizeof( type_buffer), "0x%02" PRIx8, type_mbr);
type = type_buffer;
break;
}
} else {
rtems_bdpart_type_to_string( p->type, type_buffer);
106237: 8d 75 b4 lea -0x4c(%ebp),%esi
"------------+------------+-----------------------------------------------------\n"
" BEGIN | END | TYPE\n"
"------------+------------+-----------------------------------------------------\n"
);
for (i = 0; i < count; ++i) {
10623a: e9 a1 00 00 00 jmp 1062e0 <rtems_bdpart_dump+0xc4>
const rtems_bdpart_partition *p = pt + i;
const char *type = NULL;
char type_buffer [52];
uint8_t type_mbr = 0;
10623f: c6 45 b3 00 movb $0x0,-0x4d(%ebp)
if (rtems_bdpart_to_mbr_partition_type( p->type, &type_mbr)) {
106243: 8d 53 08 lea 0x8(%ebx),%edx
106246: 51 push %ecx
106247: 51 push %ecx
106248: 8d 45 b3 lea -0x4d(%ebp),%eax
10624b: 50 push %eax
10624c: 52 push %edx
10624d: 89 55 a4 mov %edx,-0x5c(%ebp)
106250: e8 09 02 00 00 call 10645e <rtems_bdpart_to_mbr_partition_type>
106255: 83 c4 10 add $0x10,%esp
106258: 84 c0 test %al,%al
10625a: 8b 55 a4 mov -0x5c(%ebp),%edx
10625d: 74 55 je 1062b4 <rtems_bdpart_dump+0x98><== NEVER TAKEN
switch (type_mbr) {
10625f: 0f b6 45 b3 movzbl -0x4d(%ebp),%eax
106263: 3c 0b cmp $0xb,%al
106265: 74 28 je 10628f <rtems_bdpart_dump+0x73><== ALWAYS TAKEN
106267: 77 0a ja 106273 <rtems_bdpart_dump+0x57><== NOT EXECUTED
106269: 3c 01 cmp $0x1,%al <== NOT EXECUTED
10626b: 74 14 je 106281 <rtems_bdpart_dump+0x65><== NOT EXECUTED
10626d: 3c 04 cmp $0x4,%al <== NOT EXECUTED
10626f: 75 33 jne 1062a4 <rtems_bdpart_dump+0x88><== NOT EXECUTED
106271: eb 51 jmp 1062c4 <rtems_bdpart_dump+0xa8><== NOT EXECUTED
106273: 3c 0e cmp $0xe,%al <== NOT EXECUTED
106275: 74 11 je 106288 <rtems_bdpart_dump+0x6c><== NOT EXECUTED
106277: 3c da cmp $0xda,%al <== NOT EXECUTED
106279: 74 22 je 10629d <rtems_bdpart_dump+0x81><== NOT EXECUTED
10627b: 3c 0c cmp $0xc,%al <== NOT EXECUTED
10627d: 75 25 jne 1062a4 <rtems_bdpart_dump+0x88><== NOT EXECUTED
10627f: eb 15 jmp 106296 <rtems_bdpart_dump+0x7a><== NOT EXECUTED
case RTEMS_BDPART_MBR_FAT_12:
type = "FAT 12";
106281: b8 c4 36 12 00 mov $0x1236c4,%eax <== NOT EXECUTED
106286: eb 41 jmp 1062c9 <rtems_bdpart_dump+0xad><== NOT EXECUTED
break;
case RTEMS_BDPART_MBR_FAT_16:
type = "FAT 16";
break;
case RTEMS_BDPART_MBR_FAT_16_LBA:
type = "FAT 16 LBA";
106288: b8 e2 36 12 00 mov $0x1236e2,%eax <== NOT EXECUTED
break;
10628d: eb 3a jmp 1062c9 <rtems_bdpart_dump+0xad><== NOT EXECUTED
case RTEMS_BDPART_MBR_FAT_32:
type = "FAT 32";
10628f: b8 db 36 12 00 mov $0x1236db,%eax
break;
106294: eb 33 jmp 1062c9 <rtems_bdpart_dump+0xad>
case RTEMS_BDPART_MBR_FAT_32_LBA:
type = "FAT 32 LBA";
106296: b8 d0 36 12 00 mov $0x1236d0,%eax <== NOT EXECUTED
break;
10629b: eb 2c jmp 1062c9 <rtems_bdpart_dump+0xad><== NOT EXECUTED
case RTEMS_BDPART_MBR_DATA:
type = "DATA";
10629d: b8 cb 36 12 00 mov $0x1236cb,%eax <== NOT EXECUTED
break;
1062a2: eb 25 jmp 1062c9 <rtems_bdpart_dump+0xad><== NOT EXECUTED
default:
snprintf( type_buffer, sizeof( type_buffer), "0x%02" PRIx8, type_mbr);
1062a4: 50 push %eax <== NOT EXECUTED
1062a5: 68 2d 38 12 00 push $0x12382d <== NOT EXECUTED
1062aa: 6a 34 push $0x34 <== NOT EXECUTED
1062ac: 56 push %esi <== NOT EXECUTED
1062ad: e8 92 fb 00 00 call 115e44 <snprintf> <== NOT EXECUTED
1062b2: eb 09 jmp 1062bd <rtems_bdpart_dump+0xa1><== NOT EXECUTED
static void rtems_bdpart_type_to_string(
const uuid_t type,
char str [37]
)
{
uuid_unparse_lower( type, str);
1062b4: 50 push %eax <== NOT EXECUTED
1062b5: 50 push %eax <== NOT EXECUTED
1062b6: 56 push %esi <== NOT EXECUTED
1062b7: 52 push %edx <== NOT EXECUTED
1062b8: e8 aa 90 00 00 call 10f367 <uuid_unparse_lower> <== NOT EXECUTED
1062bd: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
type = type_buffer;
break;
}
} else {
rtems_bdpart_type_to_string( p->type, type_buffer);
type = type_buffer;
1062c0: 89 f0 mov %esi,%eax <== NOT EXECUTED
1062c2: eb 05 jmp 1062c9 <rtems_bdpart_dump+0xad><== NOT EXECUTED
switch (type_mbr) {
case RTEMS_BDPART_MBR_FAT_12:
type = "FAT 12";
break;
case RTEMS_BDPART_MBR_FAT_16:
type = "FAT 16";
1062c4: b8 bd 36 12 00 mov $0x1236bd,%eax <== NOT EXECUTED
} else {
rtems_bdpart_type_to_string( p->type, type_buffer);
type = type_buffer;
}
printf(
1062c9: 50 push %eax
1062ca: ff 73 04 pushl 0x4(%ebx)
1062cd: ff 33 pushl (%ebx)
1062cf: 68 34 38 12 00 push $0x123834
1062d4: e8 57 f8 00 00 call 115b30 <printf>
"------------+------------+-----------------------------------------------------\n"
" BEGIN | END | TYPE\n"
"------------+------------+-----------------------------------------------------\n"
);
for (i = 0; i < count; ++i) {
1062d9: 47 inc %edi
1062da: 83 c3 30 add $0x30,%ebx
1062dd: 83 c4 10 add $0x10,%esp
1062e0: 3b 7d 0c cmp 0xc(%ebp),%edi
1062e3: 0f 85 56 ff ff ff jne 10623f <rtems_bdpart_dump+0x23>
p->end,
type
);
}
puts( "------------+------------+-----------------------------------------------------");
1062e9: 83 ec 0c sub $0xc,%esp
1062ec: 68 dd 37 12 00 push $0x1237dd
1062f1: e8 ee f8 00 00 call 115be4 <puts>
1062f6: 83 c4 10 add $0x10,%esp
}
1062f9: 8d 65 f4 lea -0xc(%ebp),%esp
1062fc: 5b pop %ebx
1062fd: 5e pop %esi
1062fe: 5f pop %edi
1062ff: 5d pop %ebp
106300: c3 ret
00106486 <rtems_bdpart_get_disk_data>:
const char *disk_name,
int *fd_ptr,
rtems_disk_device **dd_ptr,
rtems_blkdev_bnum *disk_end
)
{
106486: 55 push %ebp
106487: 89 e5 mov %esp,%ebp
106489: 57 push %edi
10648a: 56 push %esi
10648b: 53 push %ebx
10648c: 83 ec 24 sub $0x24,%esp
10648f: 8b 7d 0c mov 0xc(%ebp),%edi
rtems_status_code sc = RTEMS_SUCCESSFUL;
int rv = 0;
int fd = -1;
rtems_disk_device *dd = NULL;
106492: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
rtems_blkdev_bnum disk_begin = 0;
rtems_blkdev_bnum block_size = 0;
/* Open device file */
fd = open( disk_name, O_RDWR);
106499: 6a 02 push $0x2
10649b: ff 75 08 pushl 0x8(%ebp)
10649e: e8 15 2d 00 00 call 1091b8 <open>
1064a3: 89 c6 mov %eax,%esi
if (fd < 0) {
1064a5: 83 c4 10 add $0x10,%esp
1064a8: 85 c0 test %eax,%eax
1064aa: 79 07 jns 1064b3 <rtems_bdpart_get_disk_data+0x2d><== ALWAYS TAKEN
sc = RTEMS_INVALID_NAME;
1064ac: bb 03 00 00 00 mov $0x3,%ebx <== NOT EXECUTED
1064b1: eb 3d jmp 1064f0 <rtems_bdpart_get_disk_data+0x6a><== NOT EXECUTED
static inline int rtems_disk_fd_get_disk_device(
int fd,
rtems_disk_device **dd_ptr
)
{
return ioctl(fd, RTEMS_BLKIO_GETDISKDEV, dd_ptr);
1064b3: 53 push %ebx
goto error;
}
/* Get disk handle */
rv = rtems_disk_fd_get_disk_device( fd, &dd);
1064b4: 8d 45 e4 lea -0x1c(%ebp),%eax
1064b7: 50 push %eax
1064b8: 68 09 42 04 40 push $0x40044209
1064bd: 56 push %esi
1064be: e8 ed 20 00 00 call 1085b0 <ioctl>
if (rv != 0) {
1064c3: 83 c4 10 add $0x10,%esp
1064c6: 85 c0 test %eax,%eax
1064c8: 75 e2 jne 1064ac <rtems_bdpart_get_disk_data+0x26><== NEVER TAKEN
sc = RTEMS_INVALID_NAME;
goto error;
}
/* Get disk begin, end and block size */
disk_begin = dd->start;
1064ca: 8b 45 e4 mov -0x1c(%ebp),%eax
1064cd: 8b 48 18 mov 0x18(%eax),%ecx
*disk_end = dd->size;
1064d0: 8b 5d 14 mov 0x14(%ebp),%ebx
1064d3: 8b 50 1c mov 0x1c(%eax),%edx
1064d6: 89 13 mov %edx,(%ebx)
block_size = dd->block_size;
/* Check block size */
if (block_size < RTEMS_BDPART_BLOCK_SIZE) {
sc = RTEMS_IO_ERROR;
1064d8: bb 1b 00 00 00 mov $0x1b,%ebx
disk_begin = dd->start;
*disk_end = dd->size;
block_size = dd->block_size;
/* Check block size */
if (block_size < RTEMS_BDPART_BLOCK_SIZE) {
1064dd: 81 78 24 ff 01 00 00 cmpl $0x1ff,0x24(%eax)
1064e4: 76 0a jbe 1064f0 <rtems_bdpart_get_disk_data+0x6a><== NEVER TAKEN
int *fd_ptr,
rtems_disk_device **dd_ptr,
rtems_blkdev_bnum *disk_end
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
1064e6: 83 f9 01 cmp $0x1,%ecx
1064e9: 19 db sbb %ebx,%ebx
1064eb: f7 d3 not %ebx
1064ed: 83 e3 1b and $0x1b,%ebx
goto error;
}
error:
if (sc == RTEMS_SUCCESSFUL && fd_ptr != NULL && dd_ptr != NULL) {
1064f0: 85 db test %ebx,%ebx
1064f2: 75 16 jne 10650a <rtems_bdpart_get_disk_data+0x84><== NEVER TAKEN
1064f4: 85 ff test %edi,%edi
1064f6: 74 12 je 10650a <rtems_bdpart_get_disk_data+0x84>
1064f8: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
1064fc: 74 0c je 10650a <rtems_bdpart_get_disk_data+0x84><== NEVER TAKEN
*fd_ptr = fd;
1064fe: 89 37 mov %esi,(%edi)
*dd_ptr = dd;
106500: 8b 45 e4 mov -0x1c(%ebp),%eax
106503: 8b 55 10 mov 0x10(%ebp),%edx
106506: 89 02 mov %eax,(%edx)
106508: eb 0c jmp 106516 <rtems_bdpart_get_disk_data+0x90>
} else {
close( fd);
10650a: 83 ec 0c sub $0xc,%esp
10650d: 56 push %esi
10650e: e8 e5 1c 00 00 call 1081f8 <close>
106513: 83 c4 10 add $0x10,%esp
}
return sc;
}
106516: 89 d8 mov %ebx,%eax
106518: 8d 65 f4 lea -0xc(%ebp),%esp
10651b: 5b pop %ebx
10651c: 5e pop %esi
10651d: 5f pop %edi
10651e: 5d pop %ebp
10651f: c3 ret
0011fae8 <rtems_bdpart_mount>:
const char *disk_name,
const rtems_bdpart_partition *pt __attribute__((unused)),
size_t count,
const char *mount_base
)
{
11fae8: 55 push %ebp <== NOT EXECUTED
11fae9: 89 e5 mov %esp,%ebp <== NOT EXECUTED
11faeb: 57 push %edi <== NOT EXECUTED
11faec: 56 push %esi <== NOT EXECUTED
11faed: 53 push %ebx <== NOT EXECUTED
11faee: 83 ec 34 sub $0x34,%esp <== NOT EXECUTED
11faf1: 8b 75 08 mov 0x8(%ebp),%esi <== NOT EXECUTED
rtems_status_code esc = RTEMS_SUCCESSFUL;
const char *disk_file_name = strrchr( disk_name, '/');
11faf4: 6a 2f push $0x2f <== NOT EXECUTED
11faf6: 56 push %esi <== NOT EXECUTED
11faf7: e8 d4 80 01 00 call 137bd0 <strrchr> <== NOT EXECUTED
11fafc: 89 c3 mov %eax,%ebx <== NOT EXECUTED
char *logical_disk_name = NULL;
char *logical_disk_marker = NULL;
char *mount_point = NULL;
char *mount_marker = NULL;
size_t disk_file_name_size = 0;
size_t disk_name_size = strlen( disk_name);
11fafe: 83 c9 ff or $0xffffffff,%ecx <== NOT EXECUTED
11fb01: 89 f7 mov %esi,%edi <== NOT EXECUTED
11fb03: 31 c0 xor %eax,%eax <== NOT EXECUTED
11fb05: f2 ae repnz scas %es:(%edi),%al <== NOT EXECUTED
11fb07: 89 ca mov %ecx,%edx <== NOT EXECUTED
11fb09: f7 d2 not %edx <== NOT EXECUTED
11fb0b: 8d 42 ff lea -0x1(%edx),%eax <== NOT EXECUTED
11fb0e: 89 45 d8 mov %eax,-0x28(%ebp) <== NOT EXECUTED
size_t mount_base_size = strlen( mount_base);
11fb11: 83 c9 ff or $0xffffffff,%ecx <== NOT EXECUTED
11fb14: 8b 7d 14 mov 0x14(%ebp),%edi <== NOT EXECUTED
11fb17: 31 c0 xor %eax,%eax <== NOT EXECUTED
11fb19: f2 ae repnz scas %es:(%edi),%al <== NOT EXECUTED
11fb1b: f7 d1 not %ecx <== NOT EXECUTED
11fb1d: 89 4d e4 mov %ecx,-0x1c(%ebp) <== NOT EXECUTED
11fb20: 49 dec %ecx <== NOT EXECUTED
11fb21: 89 4d d4 mov %ecx,-0x2c(%ebp) <== NOT EXECUTED
size_t i = 0;
/* Create logical disk name base */
logical_disk_name = malloc( disk_name_size + RTEMS_BDPART_NUMBER_SIZE);
11fb24: 83 c2 03 add $0x3,%edx <== NOT EXECUTED
11fb27: 89 14 24 mov %edx,(%esp) <== NOT EXECUTED
11fb2a: e8 e5 6c fe ff call 106814 <malloc> <== NOT EXECUTED
11fb2f: 89 45 e0 mov %eax,-0x20(%ebp) <== NOT EXECUTED
if (logical_disk_name == NULL) {
11fb32: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
return RTEMS_NO_MEMORY;
11fb35: bf 1a 00 00 00 mov $0x1a,%edi <== NOT EXECUTED
size_t mount_base_size = strlen( mount_base);
size_t i = 0;
/* Create logical disk name base */
logical_disk_name = malloc( disk_name_size + RTEMS_BDPART_NUMBER_SIZE);
if (logical_disk_name == NULL) {
11fb3a: 85 c0 test %eax,%eax <== NOT EXECUTED
11fb3c: 0f 84 18 01 00 00 je 11fc5a <rtems_bdpart_mount+0x172><== NOT EXECUTED
return RTEMS_NO_MEMORY;
}
strncpy( logical_disk_name, disk_name, disk_name_size);
11fb42: 52 push %edx <== NOT EXECUTED
11fb43: ff 75 d8 pushl -0x28(%ebp) <== NOT EXECUTED
11fb46: 56 push %esi <== NOT EXECUTED
11fb47: 50 push %eax <== NOT EXECUTED
11fb48: e8 6b 76 01 00 call 1371b8 <strncpy> <== NOT EXECUTED
/* Get disk file name */
if (disk_file_name != NULL) {
11fb4d: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11fb50: 85 db test %ebx,%ebx <== NOT EXECUTED
11fb52: 74 14 je 11fb68 <rtems_bdpart_mount+0x80><== NOT EXECUTED
disk_file_name += 1;
11fb54: 43 inc %ebx <== NOT EXECUTED
11fb55: 89 5d dc mov %ebx,-0x24(%ebp) <== NOT EXECUTED
disk_file_name_size = strlen( disk_file_name);
11fb58: 83 c9 ff or $0xffffffff,%ecx <== NOT EXECUTED
11fb5b: 89 df mov %ebx,%edi <== NOT EXECUTED
11fb5d: 31 c0 xor %eax,%eax <== NOT EXECUTED
11fb5f: f2 ae repnz scas %es:(%edi),%al <== NOT EXECUTED
11fb61: f7 d1 not %ecx <== NOT EXECUTED
11fb63: 8d 79 ff lea -0x1(%ecx),%edi <== NOT EXECUTED
11fb66: eb 06 jmp 11fb6e <rtems_bdpart_mount+0x86><== NOT EXECUTED
} else {
disk_file_name = disk_name;
disk_file_name_size = disk_name_size;
11fb68: 8b 7d d8 mov -0x28(%ebp),%edi <== NOT EXECUTED
/* Get disk file name */
if (disk_file_name != NULL) {
disk_file_name += 1;
disk_file_name_size = strlen( disk_file_name);
} else {
disk_file_name = disk_name;
11fb6b: 89 75 dc mov %esi,-0x24(%ebp) <== NOT EXECUTED
disk_file_name_size = disk_name_size;
}
/* Create mount point base */
mount_point = malloc( mount_base_size + 1 + disk_file_name_size + RTEMS_BDPART_NUMBER_SIZE);
11fb6e: 8b 5d d4 mov -0x2c(%ebp),%ebx <== NOT EXECUTED
11fb71: 01 fb add %edi,%ebx <== NOT EXECUTED
11fb73: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11fb76: 8d 43 05 lea 0x5(%ebx),%eax <== NOT EXECUTED
11fb79: 50 push %eax <== NOT EXECUTED
11fb7a: e8 95 6c fe ff call 106814 <malloc> <== NOT EXECUTED
11fb7f: 89 c6 mov %eax,%esi <== NOT EXECUTED
if (mount_point == NULL) {
11fb81: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11fb84: 85 c0 test %eax,%eax <== NOT EXECUTED
11fb86: 0f 84 a5 00 00 00 je 11fc31 <rtems_bdpart_mount+0x149><== NOT EXECUTED
esc = RTEMS_NO_MEMORY;
goto cleanup;
}
strncpy( mount_point, mount_base, mount_base_size);
11fb8c: 50 push %eax <== NOT EXECUTED
11fb8d: ff 75 d4 pushl -0x2c(%ebp) <== NOT EXECUTED
11fb90: ff 75 14 pushl 0x14(%ebp) <== NOT EXECUTED
11fb93: 56 push %esi <== NOT EXECUTED
11fb94: e8 1f 76 01 00 call 1371b8 <strncpy> <== NOT EXECUTED
mount_point [mount_base_size] = '/';
11fb99: 8b 4d e4 mov -0x1c(%ebp),%ecx <== NOT EXECUTED
11fb9c: c6 44 0e ff 2f movb $0x2f,-0x1(%esi,%ecx,1) <== NOT EXECUTED
strncpy( mount_point + mount_base_size + 1, disk_file_name, disk_file_name_size);
11fba1: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11fba4: 57 push %edi <== NOT EXECUTED
11fba5: ff 75 dc pushl -0x24(%ebp) <== NOT EXECUTED
11fba8: 8b 55 d4 mov -0x2c(%ebp),%edx <== NOT EXECUTED
11fbab: 8d 44 16 01 lea 0x1(%esi,%edx,1),%eax <== NOT EXECUTED
11fbaf: 50 push %eax <== NOT EXECUTED
11fbb0: e8 03 76 01 00 call 1371b8 <strncpy> <== NOT EXECUTED
/* Markers */
logical_disk_marker = logical_disk_name + disk_name_size;
11fbb5: 8b 7d e0 mov -0x20(%ebp),%edi <== NOT EXECUTED
11fbb8: 03 7d d8 add -0x28(%ebp),%edi <== NOT EXECUTED
mount_marker = mount_point + mount_base_size + 1 + disk_file_name_size;
11fbbb: 8d 5c 1e 01 lea 0x1(%esi,%ebx,1),%ebx <== NOT EXECUTED
11fbbf: 89 5d e4 mov %ebx,-0x1c(%ebp) <== NOT EXECUTED
/* Mount supported file systems for each partition */
for (i = 0; i < count; ++i) {
11fbc2: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11fbc5: 31 db xor %ebx,%ebx <== NOT EXECUTED
11fbc7: eb 5f jmp 11fc28 <rtems_bdpart_mount+0x140><== NOT EXECUTED
/* Create logical disk name */
int rv = snprintf( logical_disk_marker, RTEMS_BDPART_NUMBER_SIZE, "%zu", i + 1);
11fbc9: 43 inc %ebx <== NOT EXECUTED
11fbca: 53 push %ebx <== NOT EXECUTED
11fbcb: 68 bc 14 15 00 push $0x1514bc <== NOT EXECUTED
11fbd0: 6a 04 push $0x4 <== NOT EXECUTED
11fbd2: 57 push %edi <== NOT EXECUTED
11fbd3: e8 28 6a 01 00 call 136600 <snprintf> <== NOT EXECUTED
if (rv >= RTEMS_BDPART_NUMBER_SIZE) {
11fbd8: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11fbdb: 83 f8 03 cmp $0x3,%eax <== NOT EXECUTED
11fbde: 7f 58 jg 11fc38 <rtems_bdpart_mount+0x150><== NOT EXECUTED
esc = RTEMS_INVALID_NAME;
goto cleanup;
}
/* Create mount point */
strncpy( mount_marker, logical_disk_marker, RTEMS_BDPART_NUMBER_SIZE);
11fbe0: 50 push %eax <== NOT EXECUTED
11fbe1: 6a 04 push $0x4 <== NOT EXECUTED
11fbe3: 57 push %edi <== NOT EXECUTED
11fbe4: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
11fbe7: e8 cc 75 01 00 call 1371b8 <strncpy> <== NOT EXECUTED
rv = rtems_mkdir( mount_point, S_IRWXU | S_IRWXG | S_IRWXO);
11fbec: 5a pop %edx <== NOT EXECUTED
11fbed: 59 pop %ecx <== NOT EXECUTED
11fbee: 68 ff 01 00 00 push $0x1ff <== NOT EXECUTED
11fbf3: 56 push %esi <== NOT EXECUTED
11fbf4: e8 7b 30 00 00 call 122c74 <rtems_mkdir> <== NOT EXECUTED
if (rv != 0) {
11fbf9: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11fbfc: 85 c0 test %eax,%eax <== NOT EXECUTED
11fbfe: 75 3f jne 11fc3f <rtems_bdpart_mount+0x157><== NOT EXECUTED
esc = RTEMS_IO_ERROR;
goto cleanup;
}
/* Mount */
rv = mount(
11fc00: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11fc03: 6a 00 push $0x0 <== NOT EXECUTED
11fc05: 6a 00 push $0x0 <== NOT EXECUTED
11fc07: 68 8d fc 14 00 push $0x14fc8d <== NOT EXECUTED
11fc0c: 56 push %esi <== NOT EXECUTED
11fc0d: ff 75 e0 pushl -0x20(%ebp) <== NOT EXECUTED
11fc10: e8 b7 6d fe ff call 1069cc <mount> <== NOT EXECUTED
mount_point,
"msdos",
0,
NULL
);
if (rv != 0) {
11fc15: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
11fc18: 85 c0 test %eax,%eax <== NOT EXECUTED
11fc1a: 74 0c je 11fc28 <rtems_bdpart_mount+0x140><== NOT EXECUTED
rmdir( mount_point);
11fc1c: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11fc1f: 56 push %esi <== NOT EXECUTED
11fc20: e8 d7 2f 00 00 call 122bfc <rmdir> <== NOT EXECUTED
11fc25: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
/* Markers */
logical_disk_marker = logical_disk_name + disk_name_size;
mount_marker = mount_point + mount_base_size + 1 + disk_file_name_size;
/* Mount supported file systems for each partition */
for (i = 0; i < count; ++i) {
11fc28: 3b 5d 10 cmp 0x10(%ebp),%ebx <== NOT EXECUTED
11fc2b: 75 9c jne 11fbc9 <rtems_bdpart_mount+0xe1><== NOT EXECUTED
const rtems_bdpart_partition *pt __attribute__((unused)),
size_t count,
const char *mount_base
)
{
rtems_status_code esc = RTEMS_SUCCESSFUL;
11fc2d: 31 ff xor %edi,%edi <== NOT EXECUTED
11fc2f: eb 13 jmp 11fc44 <rtems_bdpart_mount+0x15c><== NOT EXECUTED
}
/* Create mount point base */
mount_point = malloc( mount_base_size + 1 + disk_file_name_size + RTEMS_BDPART_NUMBER_SIZE);
if (mount_point == NULL) {
esc = RTEMS_NO_MEMORY;
11fc31: bf 1a 00 00 00 mov $0x1a,%edi <== NOT EXECUTED
11fc36: eb 0c jmp 11fc44 <rtems_bdpart_mount+0x15c><== NOT EXECUTED
/* Mount supported file systems for each partition */
for (i = 0; i < count; ++i) {
/* Create logical disk name */
int rv = snprintf( logical_disk_marker, RTEMS_BDPART_NUMBER_SIZE, "%zu", i + 1);
if (rv >= RTEMS_BDPART_NUMBER_SIZE) {
esc = RTEMS_INVALID_NAME;
11fc38: bf 03 00 00 00 mov $0x3,%edi <== NOT EXECUTED
11fc3d: eb 05 jmp 11fc44 <rtems_bdpart_mount+0x15c><== NOT EXECUTED
/* Create mount point */
strncpy( mount_marker, logical_disk_marker, RTEMS_BDPART_NUMBER_SIZE);
rv = rtems_mkdir( mount_point, S_IRWXU | S_IRWXG | S_IRWXO);
if (rv != 0) {
esc = RTEMS_IO_ERROR;
11fc3f: bf 1b 00 00 00 mov $0x1b,%edi <== NOT EXECUTED
}
}
cleanup:
free( logical_disk_name);
11fc44: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11fc47: ff 75 e0 pushl -0x20(%ebp) <== NOT EXECUTED
11fc4a: e8 05 69 fe ff call 106554 <free> <== NOT EXECUTED
free( mount_point);
11fc4f: 89 34 24 mov %esi,(%esp) <== NOT EXECUTED
11fc52: e8 fd 68 fe ff call 106554 <free> <== NOT EXECUTED
return esc;
11fc57: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
11fc5a: 89 f8 mov %edi,%eax <== NOT EXECUTED
11fc5c: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
11fc5f: 5b pop %ebx <== NOT EXECUTED
11fc60: 5e pop %esi <== NOT EXECUTED
11fc61: 5f pop %edi <== NOT EXECUTED
11fc62: 5d pop %ebp <== NOT EXECUTED
11fc63: c3 ret <== NOT EXECUTED
00106940 <rtems_bdpart_new_record>:
static rtems_status_code rtems_bdpart_new_record(
rtems_disk_device *dd,
rtems_blkdev_bnum index,
rtems_bdbuf_buffer **block
)
{
106940: 55 push %ebp
106941: 89 e5 mov %esp,%ebp
106943: 57 push %edi
106944: 56 push %esi
106945: 53 push %ebx
106946: 83 ec 0c sub $0xc,%esp
106949: 89 c6 mov %eax,%esi
10694b: 89 d7 mov %edx,%edi
10694d: 89 cb mov %ecx,%ebx
rtems_status_code sc = RTEMS_SUCCESSFUL;
/* Synchronize previous block if necessary */
if (*block != NULL) {
10694f: 8b 01 mov (%ecx),%eax
106951: 85 c0 test %eax,%eax
106953: 75 12 jne 106967 <rtems_bdpart_new_record+0x27>
return sc;
}
}
/* Read the new record block (this accounts for disk block sizes > 512) */
sc = rtems_bdbuf_read( dd, index, block);
106955: 50 push %eax
106956: 53 push %ebx
106957: 57 push %edi
106958: 56 push %esi
106959: e8 5f a2 00 00 call 110bbd <rtems_bdbuf_read>
if (sc != RTEMS_SUCCESSFUL) {
10695e: 83 c4 10 add $0x10,%esp
106961: 85 c0 test %eax,%eax
106963: 74 14 je 106979 <rtems_bdpart_new_record+0x39><== ALWAYS TAKEN
106965: eb 43 jmp 1069aa <rtems_bdpart_new_record+0x6a><== NOT EXECUTED
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
/* Synchronize previous block if necessary */
if (*block != NULL) {
sc = rtems_bdbuf_sync( *block);
106967: 83 ec 0c sub $0xc,%esp
10696a: 50 push %eax
10696b: e8 92 a4 00 00 call 110e02 <rtems_bdbuf_sync>
if (sc != RTEMS_SUCCESSFUL) {
106970: 83 c4 10 add $0x10,%esp
106973: 85 c0 test %eax,%eax
106975: 74 de je 106955 <rtems_bdpart_new_record+0x15><== ALWAYS TAKEN
106977: eb 31 jmp 1069aa <rtems_bdpart_new_record+0x6a><== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
return sc;
}
/* just in case block did not get filled in */
if ( *block == NULL ) {
106979: 8b 13 mov (%ebx),%edx
10697b: 85 d2 test %edx,%edx
10697d: 74 26 je 1069a5 <rtems_bdpart_new_record+0x65><== NEVER TAKEN
return RTEMS_INVALID_ADDRESS;
}
/* Clear record */
memset( (*block)->buffer, 0, RTEMS_BDPART_BLOCK_SIZE);
10697f: 8b 52 1c mov 0x1c(%edx),%edx
106982: b9 80 00 00 00 mov $0x80,%ecx
106987: 89 d7 mov %edx,%edi
106989: f3 ab rep stos %eax,%es:(%edi)
/* Write signature */
(*block)->buffer [RTEMS_BDPART_MBR_OFFSET_SIGNATURE_0] =
10698b: 8b 13 mov (%ebx),%edx
10698d: 8b 52 1c mov 0x1c(%edx),%edx
106990: c6 82 fe 01 00 00 55 movb $0x55,0x1fe(%edx)
RTEMS_BDPART_MBR_SIGNATURE_0;
(*block)->buffer [RTEMS_BDPART_MBR_OFFSET_SIGNATURE_1] =
106997: 8b 13 mov (%ebx),%edx
106999: 8b 52 1c mov 0x1c(%edx),%edx
10699c: c6 82 ff 01 00 00 aa movb $0xaa,0x1ff(%edx)
1069a3: eb 05 jmp 1069aa <rtems_bdpart_new_record+0x6a>
return sc;
}
/* just in case block did not get filled in */
if ( *block == NULL ) {
return RTEMS_INVALID_ADDRESS;
1069a5: b8 09 00 00 00 mov $0x9,%eax <== NOT EXECUTED
RTEMS_BDPART_MBR_SIGNATURE_0;
(*block)->buffer [RTEMS_BDPART_MBR_OFFSET_SIGNATURE_1] =
RTEMS_BDPART_MBR_SIGNATURE_1;
return RTEMS_SUCCESSFUL;
}
1069aa: 8d 65 f4 lea -0xc(%ebp),%esp
1069ad: 5b pop %ebx
1069ae: 5e pop %esi
1069af: 5f pop %edi
1069b0: 5d pop %ebp
1069b1: c3 ret
00106520 <rtems_bdpart_read>:
const char *disk_name,
rtems_bdpart_format *format,
rtems_bdpart_partition *pt,
size_t *count
)
{
106520: 55 push %ebp
106521: 89 e5 mov %esp,%ebp
106523: 57 push %edi
106524: 56 push %esi
106525: 53 push %ebx
106526: 83 ec 3c sub $0x3c,%esp
106529: 8b 5d 0c mov 0xc(%ebp),%ebx
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
rtems_bdbuf_buffer *block = NULL;
10652c: c7 45 d0 00 00 00 00 movl $0x0,-0x30(%ebp)
rtems_bdpart_partition *p = pt - 1;
106533: 8b 45 10 mov 0x10(%ebp),%eax
106536: 83 e8 30 sub $0x30,%eax
106539: 89 45 d4 mov %eax,-0x2c(%ebp)
const rtems_bdpart_partition *p_end = pt + (count != NULL ? *count : 0);
10653c: 83 7d 14 00 cmpl $0x0,0x14(%ebp)
106540: 74 08 je 10654a <rtems_bdpart_read+0x2a><== NEVER TAKEN
106542: 8b 45 14 mov 0x14(%ebp),%eax
106545: 6b 30 30 imul $0x30,(%eax),%esi
106548: eb 02 jmp 10654c <rtems_bdpart_read+0x2c>
10654a: 31 f6 xor %esi,%esi
rtems_blkdev_bnum ep_begin = 0; /* Extended partition begin */
10654c: c7 45 d8 00 00 00 00 movl $0x0,-0x28(%ebp)
rtems_blkdev_bnum ebr = 0; /* Extended boot record block index */
rtems_blkdev_bnum disk_end = 0;
106553: c7 45 dc 00 00 00 00 movl $0x0,-0x24(%ebp)
size_t i = 0;
const uint8_t *data = NULL;
int fd = -1;
10655a: c7 45 e0 ff ff ff ff movl $0xffffffff,-0x20(%ebp)
rtems_disk_device *dd = NULL;
106561: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
/* Check parameter */
if (format == NULL || pt == NULL || count == NULL) {
return RTEMS_INVALID_ADDRESS;
106568: b8 09 00 00 00 mov $0x9,%eax
const uint8_t *data = NULL;
int fd = -1;
rtems_disk_device *dd = NULL;
/* Check parameter */
if (format == NULL || pt == NULL || count == NULL) {
10656d: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
106571: 0f 84 c7 01 00 00 je 10673e <rtems_bdpart_read+0x21e><== NEVER TAKEN
106577: 85 db test %ebx,%ebx
106579: 0f 84 bf 01 00 00 je 10673e <rtems_bdpart_read+0x21e><== NEVER TAKEN
10657f: 83 7d 14 00 cmpl $0x0,0x14(%ebp)
106583: 0f 84 b5 01 00 00 je 10673e <rtems_bdpart_read+0x21e><== NEVER TAKEN
return RTEMS_INVALID_ADDRESS;
}
/* Set count to a save value */
*count = 0;
106589: 8b 55 14 mov 0x14(%ebp),%edx
10658c: c7 02 00 00 00 00 movl $0x0,(%edx)
/* Get disk data */
sc = rtems_bdpart_get_disk_data( disk_name, &fd, &dd, &disk_end);
106592: 8d 45 dc lea -0x24(%ebp),%eax
106595: 50 push %eax
106596: 8d 45 e4 lea -0x1c(%ebp),%eax
106599: 50 push %eax
10659a: 8d 45 e0 lea -0x20(%ebp),%eax
10659d: 50 push %eax
10659e: ff 75 08 pushl 0x8(%ebp)
1065a1: e8 e0 fe ff ff call 106486 <rtems_bdpart_get_disk_data>
if (sc != RTEMS_SUCCESSFUL) {
1065a6: 83 c4 10 add $0x10,%esp
1065a9: 85 c0 test %eax,%eax
1065ab: 0f 85 8d 01 00 00 jne 10673e <rtems_bdpart_read+0x21e><== NEVER TAKEN
return sc;
}
/* Read MBR */
sc = rtems_bdpart_read_record( dd, 0, &block);
1065b1: 8d 4d d0 lea -0x30(%ebp),%ecx
1065b4: 31 d2 xor %edx,%edx
1065b6: 8b 45 e4 mov -0x1c(%ebp),%eax
1065b9: e8 65 fd ff ff call 106323 <rtems_bdpart_read_record>
1065be: 89 c7 mov %eax,%edi
if (sc != RTEMS_SUCCESSFUL) {
1065c0: 85 c0 test %eax,%eax
1065c2: 0f 85 4e 01 00 00 jne 106716 <rtems_bdpart_read+0x1f6><== NEVER TAKEN
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
rtems_bdbuf_buffer *block = NULL;
rtems_bdpart_partition *p = pt - 1;
const rtems_bdpart_partition *p_end = pt + (count != NULL ? *count : 0);
1065c8: 03 75 10 add 0x10(%ebp),%esi
1065cb: 89 75 bc mov %esi,-0x44(%ebp)
esc = sc;
goto cleanup;
}
/* Read the first partition entry */
data = block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_0;
1065ce: 8b 45 d0 mov -0x30(%ebp),%eax
1065d1: 8b 40 1c mov 0x1c(%eax),%eax
1065d4: 89 45 b8 mov %eax,-0x48(%ebp)
1065d7: 05 be 01 00 00 add $0x1be,%eax
1065dc: 89 45 c0 mov %eax,-0x40(%ebp)
sc = rtems_bdpart_read_mbr_partition( data, &p, p_end, &ep_begin);
1065df: 83 ec 0c sub $0xc,%esp
1065e2: 8d 45 d4 lea -0x2c(%ebp),%eax
1065e5: 89 45 c4 mov %eax,-0x3c(%ebp)
1065e8: 8d 75 d8 lea -0x28(%ebp),%esi
1065eb: 56 push %esi
1065ec: 8b 4d bc mov -0x44(%ebp),%ecx
1065ef: 89 c2 mov %eax,%edx
1065f1: 8b 45 c0 mov -0x40(%ebp),%eax
1065f4: e8 bb fd ff ff call 1063b4 <rtems_bdpart_read_mbr_partition>
if (sc != RTEMS_SUCCESSFUL) {
1065f9: 83 c4 10 add $0x10,%esp
1065fc: 89 c7 mov %eax,%edi
1065fe: 85 c0 test %eax,%eax
106600: 0f 85 10 01 00 00 jne 106716 <rtems_bdpart_read+0x1f6><== NEVER TAKEN
if (block != NULL) {
rtems_bdbuf_release( block);
}
return esc;
}
106606: 8b 45 d4 mov -0x2c(%ebp),%eax
esc = sc;
goto cleanup;
}
/* Determine if we have a MBR or GPT format */
if (rtems_bdpart_mbr_partition_type( p->type) == RTEMS_BDPART_MBR_GPT) {
106609: 80 78 08 ee cmpb $0xee,0x8(%eax)
10660d: 0f 84 fa 00 00 00 je 10670d <rtems_bdpart_read+0x1ed><== NEVER TAKEN
esc = RTEMS_NOT_IMPLEMENTED;
goto cleanup;
}
/* Set format */
format->type = RTEMS_BDPART_FORMAT_MBR;
106613: c7 03 00 00 00 00 movl $0x0,(%ebx)
format->mbr.disk_id = rtems_uint32_from_little_endian(
block->buffer + RTEMS_BDPART_MBR_OFFSET_DISK_ID
106619: 8b 45 d0 mov -0x30(%ebp),%eax
goto cleanup;
}
/* Set format */
format->type = RTEMS_BDPART_FORMAT_MBR;
format->mbr.disk_id = rtems_uint32_from_little_endian(
10661c: 8b 40 1c mov 0x1c(%eax),%eax
10661f: 05 b8 01 00 00 add $0x1b8,%eax
106624: e8 db fc ff ff call 106304 <rtems_uint32_from_little_endian>
106629: 89 43 04 mov %eax,0x4(%ebx)
block->buffer + RTEMS_BDPART_MBR_OFFSET_DISK_ID
);
format->mbr.dos_compatibility = true;
10662c: c6 43 08 01 movb $0x1,0x8(%ebx)
}
return RTEMS_SUCCESSFUL;
}
rtems_status_code rtems_bdpart_read(
106630: 8b 7d b8 mov -0x48(%ebp),%edi
106633: 81 c7 ee 01 00 00 add $0x1ee,%edi
/* Iterate through the rest of the primary partition table */
for (i = 1; i < 4; ++i) {
data += RTEMS_BDPART_MBR_TABLE_ENTRY_SIZE;
sc = rtems_bdpart_read_mbr_partition( data, &p, p_end, &ep_begin);
106639: 8d 5d d4 lea -0x2c(%ebp),%ebx
);
format->mbr.dos_compatibility = true;
/* Iterate through the rest of the primary partition table */
for (i = 1; i < 4; ++i) {
data += RTEMS_BDPART_MBR_TABLE_ENTRY_SIZE;
10663c: 83 45 c0 10 addl $0x10,-0x40(%ebp)
sc = rtems_bdpart_read_mbr_partition( data, &p, p_end, &ep_begin);
106640: 83 ec 0c sub $0xc,%esp
106643: 56 push %esi
106644: 8b 4d bc mov -0x44(%ebp),%ecx
106647: 89 da mov %ebx,%edx
106649: 8b 45 c0 mov -0x40(%ebp),%eax
10664c: e8 63 fd ff ff call 1063b4 <rtems_bdpart_read_mbr_partition>
if (sc != RTEMS_SUCCESSFUL) {
106651: 83 c4 10 add $0x10,%esp
106654: 85 c0 test %eax,%eax
106656: 0f 85 b8 00 00 00 jne 106714 <rtems_bdpart_read+0x1f4><== NEVER TAKEN
block->buffer + RTEMS_BDPART_MBR_OFFSET_DISK_ID
);
format->mbr.dos_compatibility = true;
/* Iterate through the rest of the primary partition table */
for (i = 1; i < 4; ++i) {
10665c: 39 7d c0 cmp %edi,-0x40(%ebp)
10665f: 75 db jne 10663c <rtems_bdpart_read+0x11c>
goto cleanup;
}
}
/* Iterate through the logical partitions within the extended partition */
ebr = ep_begin;
106661: 8b 5d d8 mov -0x28(%ebp),%ebx
while (ebr != 0) {
106664: e9 83 00 00 00 jmp 1066ec <rtems_bdpart_read+0x1cc>
rtems_blkdev_bnum tmp = 0;
/* Read EBR */
sc = rtems_bdpart_read_record( dd, ebr, &block);
106669: 8d 4d d0 lea -0x30(%ebp),%ecx
10666c: 89 da mov %ebx,%edx
10666e: 8b 45 e4 mov -0x1c(%ebp),%eax
106671: e8 ad fc ff ff call 106323 <rtems_bdpart_read_record>
if (sc != RTEMS_SUCCESSFUL) {
106676: 85 c0 test %eax,%eax
106678: 0f 85 96 00 00 00 jne 106714 <rtems_bdpart_read+0x1f4><== NEVER TAKEN
esc = sc;
goto cleanup;
}
/* Read first partition entry */
sc = rtems_bdpart_read_mbr_partition(
10667e: 83 ec 0c sub $0xc,%esp
block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_0,
106681: 8b 45 d0 mov -0x30(%ebp),%eax
esc = sc;
goto cleanup;
}
/* Read first partition entry */
sc = rtems_bdpart_read_mbr_partition(
106684: 8b 40 1c mov 0x1c(%eax),%eax
106687: 05 be 01 00 00 add $0x1be,%eax
10668c: 6a 00 push $0x0
10668e: 8b 4d bc mov -0x44(%ebp),%ecx
106691: 8d 55 d4 lea -0x2c(%ebp),%edx
106694: e8 1b fd ff ff call 1063b4 <rtems_bdpart_read_mbr_partition>
block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_0,
&p,
p_end,
NULL
);
if (sc != RTEMS_SUCCESSFUL) {
106699: 83 c4 10 add $0x10,%esp
10669c: 85 c0 test %eax,%eax
10669e: 75 74 jne 106714 <rtems_bdpart_read+0x1f4><== NEVER TAKEN
esc = sc;
goto cleanup;
}
/* Adjust partition begin */
tmp = p->begin + ebr;
1066a0: 8b 45 d4 mov -0x2c(%ebp),%eax
1066a3: 8b 08 mov (%eax),%ecx
1066a5: 8d 14 0b lea (%ebx,%ecx,1),%edx
if (tmp > p->begin) {
1066a8: 39 ca cmp %ecx,%edx
1066aa: 77 07 ja 1066b3 <rtems_bdpart_read+0x193><== ALWAYS TAKEN
p->begin = tmp;
} else {
esc = RTEMS_IO_ERROR;
1066ac: bf 1b 00 00 00 mov $0x1b,%edi <== NOT EXECUTED
1066b1: eb 63 jmp 106716 <rtems_bdpart_read+0x1f6><== NOT EXECUTED
}
/* Adjust partition begin */
tmp = p->begin + ebr;
if (tmp > p->begin) {
p->begin = tmp;
1066b3: 89 10 mov %edx,(%eax)
esc = RTEMS_IO_ERROR;
goto cleanup;
}
/* Adjust partition end */
tmp = p->end + ebr;
1066b5: 8b 50 04 mov 0x4(%eax),%edx
1066b8: 01 d3 add %edx,%ebx
if (tmp > p->end) {
1066ba: 39 d3 cmp %edx,%ebx
1066bc: 76 ee jbe 1066ac <rtems_bdpart_read+0x18c><== NEVER TAKEN
p->end = tmp;
1066be: 89 58 04 mov %ebx,0x4(%eax)
goto cleanup;
}
/* Read second partition entry for next EBR block */
ebr = rtems_bdpart_next_ebr(
block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_1
1066c1: 8b 45 d0 mov -0x30(%ebp),%eax
1066c4: 8b 70 1c mov 0x1c(%eax),%esi
}
static rtems_blkdev_bnum rtems_bdpart_next_ebr( const uint8_t *data)
{
rtems_blkdev_bnum begin =
rtems_uint32_from_little_endian( data + RTEMS_BDPART_MBR_OFFSET_BEGIN);
1066c7: 8d 86 d6 01 00 00 lea 0x1d6(%esi),%eax
== RTEMS_BDPART_MBR_SIGNATURE_1;
}
static rtems_blkdev_bnum rtems_bdpart_next_ebr( const uint8_t *data)
{
rtems_blkdev_bnum begin =
1066cd: e8 32 fc ff ff call 106304 <rtems_uint32_from_little_endian>
1066d2: 89 c3 mov %eax,%ebx
rtems_uint32_from_little_endian( data + RTEMS_BDPART_MBR_OFFSET_BEGIN);
uint8_t type = data [RTEMS_BDPART_MBR_OFFSET_TYPE];
if (type == RTEMS_BDPART_MBR_EXTENDED) {
1066d4: 80 be d2 01 00 00 05 cmpb $0x5,0x1d2(%esi)
1066db: 75 17 jne 1066f4 <rtems_bdpart_read+0x1d4>
/* Read second partition entry for next EBR block */
ebr = rtems_bdpart_next_ebr(
block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_1
);
if (ebr != 0) {
1066dd: 85 c0 test %eax,%eax
1066df: 74 13 je 1066f4 <rtems_bdpart_read+0x1d4><== NEVER TAKEN
/* Adjust partition EBR block index */
tmp = ebr + ep_begin;
1066e1: 8b 45 d8 mov -0x28(%ebp),%eax
1066e4: 01 d8 add %ebx,%eax
if (tmp > ebr) {
1066e6: 39 d8 cmp %ebx,%eax
1066e8: 76 c2 jbe 1066ac <rtems_bdpart_read+0x18c><== NEVER TAKEN
1066ea: 89 c3 mov %eax,%ebx
}
}
/* Iterate through the logical partitions within the extended partition */
ebr = ep_begin;
while (ebr != 0) {
1066ec: 85 db test %ebx,%ebx
1066ee: 0f 85 75 ff ff ff jne 106669 <rtems_bdpart_read+0x149><== ALWAYS TAKEN
}
}
}
/* Return partition count */
*count = (size_t) (p - pt + 1);
1066f4: 8b 45 d4 mov -0x2c(%ebp),%eax
1066f7: 2b 45 10 sub 0x10(%ebp),%eax
1066fa: c1 f8 04 sar $0x4,%eax
1066fd: 69 c0 ab aa aa aa imul $0xaaaaaaab,%eax,%eax
106703: 40 inc %eax
106704: 8b 55 14 mov 0x14(%ebp),%edx
106707: 89 02 mov %eax,(%edx)
rtems_bdpart_partition *pt,
size_t *count
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
106709: 31 ff xor %edi,%edi
10670b: eb 09 jmp 106716 <rtems_bdpart_read+0x1f6>
goto cleanup;
}
/* Determine if we have a MBR or GPT format */
if (rtems_bdpart_mbr_partition_type( p->type) == RTEMS_BDPART_MBR_GPT) {
esc = RTEMS_NOT_IMPLEMENTED;
10670d: bf 18 00 00 00 mov $0x18,%edi <== NOT EXECUTED
106712: eb 02 jmp 106716 <rtems_bdpart_read+0x1f6><== NOT EXECUTED
esc = sc;
goto cleanup;
}
/* Read first partition entry */
sc = rtems_bdpart_read_mbr_partition(
106714: 89 c7 mov %eax,%edi <== NOT EXECUTED
/* Return partition count */
*count = (size_t) (p - pt + 1);
cleanup:
if (fd >= 0) {
106716: 8b 45 e0 mov -0x20(%ebp),%eax
106719: 85 c0 test %eax,%eax
10671b: 78 0c js 106729 <rtems_bdpart_read+0x209><== NEVER TAKEN
close( fd);
10671d: 83 ec 0c sub $0xc,%esp
106720: 50 push %eax
106721: e8 d2 1a 00 00 call 1081f8 <close>
106726: 83 c4 10 add $0x10,%esp
}
if (block != NULL) {
106729: 8b 45 d0 mov -0x30(%ebp),%eax
10672c: 85 c0 test %eax,%eax
10672e: 74 0c je 10673c <rtems_bdpart_read+0x21c><== NEVER TAKEN
rtems_bdbuf_release( block);
106730: 83 ec 0c sub $0xc,%esp
106733: 50 push %eax
106734: e8 e2 a5 00 00 call 110d1b <rtems_bdbuf_release>
106739: 83 c4 10 add $0x10,%esp
}
return esc;
10673c: 89 f8 mov %edi,%eax
}
10673e: 8d 65 f4 lea -0xc(%ebp),%esp
106741: 5b pop %ebx
106742: 5e pop %esi
106743: 5f pop %edi
106744: 5d pop %ebp
106745: c3 ret
001063b4 <rtems_bdpart_read_mbr_partition>:
const uint8_t *data,
rtems_bdpart_partition **p,
const rtems_bdpart_partition *p_end,
rtems_blkdev_bnum *ep_begin
)
{
1063b4: 55 push %ebp
1063b5: 89 e5 mov %esp,%ebp
1063b7: 57 push %edi
1063b8: 56 push %esi
1063b9: 53 push %ebx
1063ba: 83 ec 14 sub $0x14,%esp
1063bd: 89 c3 mov %eax,%ebx
1063bf: 89 d6 mov %edx,%esi
1063c1: 89 cf mov %ecx,%edi
rtems_blkdev_bnum begin =
rtems_uint32_from_little_endian( data + RTEMS_BDPART_MBR_OFFSET_BEGIN);
1063c3: 8d 40 08 lea 0x8(%eax),%eax
rtems_bdpart_partition **p,
const rtems_bdpart_partition *p_end,
rtems_blkdev_bnum *ep_begin
)
{
rtems_blkdev_bnum begin =
1063c6: e8 39 ff ff ff call 106304 <rtems_uint32_from_little_endian>
1063cb: 89 45 ec mov %eax,-0x14(%ebp)
rtems_uint32_from_little_endian( data + RTEMS_BDPART_MBR_OFFSET_BEGIN);
rtems_blkdev_bnum size =
rtems_uint32_from_little_endian( data + RTEMS_BDPART_MBR_OFFSET_SIZE);
1063ce: 8d 43 0c lea 0xc(%ebx),%eax
rtems_blkdev_bnum *ep_begin
)
{
rtems_blkdev_bnum begin =
rtems_uint32_from_little_endian( data + RTEMS_BDPART_MBR_OFFSET_BEGIN);
rtems_blkdev_bnum size =
1063d1: e8 2e ff ff ff call 106304 <rtems_uint32_from_little_endian>
rtems_uint32_from_little_endian( data + RTEMS_BDPART_MBR_OFFSET_SIZE);
rtems_blkdev_bnum end = begin + size;
uint8_t type = data [RTEMS_BDPART_MBR_OFFSET_TYPE];
1063d6: 8a 53 04 mov 0x4(%ebx),%dl
1063d9: 88 55 eb mov %dl,-0x15(%ebp)
if (type == RTEMS_BDPART_MBR_EMPTY) {
1063dc: 84 d2 test %dl,%dl
1063de: 74 74 je 106454 <rtems_bdpart_read_mbr_partition+0xa0><== NEVER TAKEN
return RTEMS_SUCCESSFUL;
} else if (*p == p_end) {
1063e0: 8b 16 mov (%esi),%edx
1063e2: 39 fa cmp %edi,%edx
1063e4: 74 67 je 10644d <rtems_bdpart_read_mbr_partition+0x99><== NEVER TAKEN
{
rtems_blkdev_bnum begin =
rtems_uint32_from_little_endian( data + RTEMS_BDPART_MBR_OFFSET_BEGIN);
rtems_blkdev_bnum size =
rtems_uint32_from_little_endian( data + RTEMS_BDPART_MBR_OFFSET_SIZE);
rtems_blkdev_bnum end = begin + size;
1063e6: 03 45 ec add -0x14(%ebp),%eax
1063e9: 89 45 e4 mov %eax,-0x1c(%ebp)
if (type == RTEMS_BDPART_MBR_EMPTY) {
return RTEMS_SUCCESSFUL;
} else if (*p == p_end) {
return RTEMS_TOO_MANY;
} else if (begin >= end) {
return RTEMS_IO_ERROR;
1063ec: b8 1b 00 00 00 mov $0x1b,%eax
if (type == RTEMS_BDPART_MBR_EMPTY) {
return RTEMS_SUCCESSFUL;
} else if (*p == p_end) {
return RTEMS_TOO_MANY;
} else if (begin >= end) {
1063f1: 8b 4d e4 mov -0x1c(%ebp),%ecx
1063f4: 39 4d ec cmp %ecx,-0x14(%ebp)
1063f7: 73 5d jae 106456 <rtems_bdpart_read_mbr_partition+0xa2><== NEVER TAKEN
return RTEMS_IO_ERROR;
} else if (type == RTEMS_BDPART_MBR_EXTENDED) {
1063f9: 80 7d eb 05 cmpb $0x5,-0x15(%ebp)
1063fd: 75 10 jne 10640f <rtems_bdpart_read_mbr_partition+0x5b>
if (ep_begin != NULL) {
1063ff: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
106403: 74 4f je 106454 <rtems_bdpart_read_mbr_partition+0xa0><== NEVER TAKEN
*ep_begin = begin;
106405: 8b 45 ec mov -0x14(%ebp),%eax
106408: 8b 55 08 mov 0x8(%ebp),%edx
10640b: 89 02 mov %eax,(%edx)
10640d: eb 45 jmp 106454 <rtems_bdpart_read_mbr_partition+0xa0>
}
} else {
/* Increment partition index */
++(*p);
10640f: 83 c2 30 add $0x30,%edx
106412: 89 16 mov %edx,(%esi)
/* Clear partition */
memset( *p, 0, sizeof( rtems_bdpart_partition));
106414: b9 0c 00 00 00 mov $0xc,%ecx
106419: 31 c0 xor %eax,%eax
10641b: 89 d7 mov %edx,%edi
10641d: f3 ab rep stos %eax,%es:(%edi)
/* Set values */
(*p)->begin = begin;
10641f: 8b 06 mov (%esi),%eax
106421: 8b 55 ec mov -0x14(%ebp),%edx
106424: 89 10 mov %edx,(%eax)
(*p)->end = end;
106426: 8b 55 e4 mov -0x1c(%ebp),%edx
106429: 89 50 04 mov %edx,0x4(%eax)
rtems_bdpart_to_partition_type( type, (*p)->type);
10642c: 83 c0 08 add $0x8,%eax
10642f: 50 push %eax
106430: 0f b6 45 eb movzbl -0x15(%ebp),%eax
106434: 50 push %eax
106435: e8 5a ff ff ff call 106394 <rtems_bdpart_to_partition_type>
(*p)->flags = data [RTEMS_BDPART_MBR_OFFSET_FLAGS];
10643a: 8b 06 mov (%esi),%eax
10643c: 0f b6 13 movzbl (%ebx),%edx
10643f: 89 50 28 mov %edx,0x28(%eax)
106442: c7 40 2c 00 00 00 00 movl $0x0,0x2c(%eax)
106449: 5a pop %edx
10644a: 59 pop %ecx
10644b: eb 07 jmp 106454 <rtems_bdpart_read_mbr_partition+0xa0>
uint8_t type = data [RTEMS_BDPART_MBR_OFFSET_TYPE];
if (type == RTEMS_BDPART_MBR_EMPTY) {
return RTEMS_SUCCESSFUL;
} else if (*p == p_end) {
return RTEMS_TOO_MANY;
10644d: b8 05 00 00 00 mov $0x5,%eax <== NOT EXECUTED
106452: eb 02 jmp 106456 <rtems_bdpart_read_mbr_partition+0xa2><== NOT EXECUTED
rtems_uint32_from_little_endian( data + RTEMS_BDPART_MBR_OFFSET_SIZE);
rtems_blkdev_bnum end = begin + size;
uint8_t type = data [RTEMS_BDPART_MBR_OFFSET_TYPE];
if (type == RTEMS_BDPART_MBR_EMPTY) {
return RTEMS_SUCCESSFUL;
106454: 31 c0 xor %eax,%eax
rtems_bdpart_to_partition_type( type, (*p)->type);
(*p)->flags = data [RTEMS_BDPART_MBR_OFFSET_FLAGS];
}
return RTEMS_SUCCESSFUL;
}
106456: 8d 65 f4 lea -0xc(%ebp),%esp
106459: 5b pop %ebx
10645a: 5e pop %esi
10645b: 5f pop %edi
10645c: 5d pop %ebp
10645d: c3 ret
00106323 <rtems_bdpart_read_record>:
static rtems_status_code rtems_bdpart_read_record(
rtems_disk_device *dd,
rtems_blkdev_bnum index,
rtems_bdbuf_buffer **block
)
{
106323: 55 push %ebp
106324: 89 e5 mov %esp,%ebp
106326: 57 push %edi
106327: 56 push %esi
106328: 53 push %ebx
106329: 83 ec 0c sub $0xc,%esp
10632c: 89 c6 mov %eax,%esi
10632e: 89 d7 mov %edx,%edi
106330: 89 cb mov %ecx,%ebx
rtems_status_code sc = RTEMS_SUCCESSFUL;
/* Release previous block if necessary */
if (*block != NULL) {
106332: 8b 01 mov (%ecx),%eax
106334: 85 c0 test %eax,%eax
106336: 75 12 jne 10634a <rtems_bdpart_read_record+0x27>
return sc;
}
}
/* Read the record block */
sc = rtems_bdbuf_read( dd, index, block);
106338: 50 push %eax
106339: 53 push %ebx
10633a: 57 push %edi
10633b: 56 push %esi
10633c: e8 7c a8 00 00 call 110bbd <rtems_bdbuf_read>
if (sc != RTEMS_SUCCESSFUL) {
106341: 83 c4 10 add $0x10,%esp
106344: 85 c0 test %eax,%eax
106346: 74 14 je 10635c <rtems_bdpart_read_record+0x39><== ALWAYS TAKEN
106348: eb 42 jmp 10638c <rtems_bdpart_read_record+0x69><== NOT EXECUTED
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
/* Release previous block if necessary */
if (*block != NULL) {
sc = rtems_bdbuf_release( *block);
10634a: 83 ec 0c sub $0xc,%esp
10634d: 50 push %eax
10634e: e8 c8 a9 00 00 call 110d1b <rtems_bdbuf_release>
if (sc != RTEMS_SUCCESSFUL) {
106353: 83 c4 10 add $0x10,%esp
106356: 85 c0 test %eax,%eax
106358: 74 de je 106338 <rtems_bdpart_read_record+0x15><== ALWAYS TAKEN
10635a: eb 30 jmp 10638c <rtems_bdpart_read_record+0x69><== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
return sc;
}
/* just in case block did not get filled in */
if ( *block == NULL ) {
10635c: 8b 13 mov (%ebx),%edx
10635e: 85 d2 test %edx,%edx
106360: 74 25 je 106387 <rtems_bdpart_read_record+0x64><== NEVER TAKEN
return RTEMS_INVALID_ADDRESS;
}
/* Check MBR signature */
if (!rtems_bdpart_is_valid_record( (*block)->buffer)) {
106362: 8b 4a 1c mov 0x1c(%edx),%ecx
static bool rtems_bdpart_is_valid_record( const uint8_t *data)
{
return data [RTEMS_BDPART_MBR_OFFSET_SIGNATURE_0]
== RTEMS_BDPART_MBR_SIGNATURE_0
&& data [RTEMS_BDPART_MBR_OFFSET_SIGNATURE_1]
106365: 31 d2 xor %edx,%edx
106367: 80 b9 fe 01 00 00 55 cmpb $0x55,0x1fe(%ecx)
10636e: 75 0c jne 10637c <rtems_bdpart_read_record+0x59><== NEVER TAKEN
106370: 31 d2 xor %edx,%edx
106372: 80 b9 ff 01 00 00 aa cmpb $0xaa,0x1ff(%ecx)
106379: 0f 94 c2 sete %dl
if ( *block == NULL ) {
return RTEMS_INVALID_ADDRESS;
}
/* Check MBR signature */
if (!rtems_bdpart_is_valid_record( (*block)->buffer)) {
10637c: 85 d2 test %edx,%edx
10637e: 75 0c jne 10638c <rtems_bdpart_read_record+0x69><== ALWAYS TAKEN
return RTEMS_IO_ERROR;
106380: b8 1b 00 00 00 mov $0x1b,%eax <== NOT EXECUTED
106385: eb 05 jmp 10638c <rtems_bdpart_read_record+0x69><== NOT EXECUTED
return sc;
}
/* just in case block did not get filled in */
if ( *block == NULL ) {
return RTEMS_INVALID_ADDRESS;
106387: b8 09 00 00 00 mov $0x9,%eax <== NOT EXECUTED
if (!rtems_bdpart_is_valid_record( (*block)->buffer)) {
return RTEMS_IO_ERROR;
}
return RTEMS_SUCCESSFUL;
}
10638c: 8d 65 f4 lea -0xc(%ebp),%esp
10638f: 5b pop %ebx
106390: 5e pop %esi
106391: 5f pop %edi
106392: 5d pop %ebp
106393: c3 ret
00106748 <rtems_bdpart_register>:
rtems_status_code rtems_bdpart_register(
const char *disk_name,
const rtems_bdpart_partition *pt,
size_t count
)
{
106748: 55 push %ebp
106749: 89 e5 mov %esp,%ebp
10674b: 57 push %edi
10674c: 56 push %esi
10674d: 53 push %ebx
10674e: 83 ec 3c sub $0x3c,%esp
106751: 8b 75 08 mov 0x8(%ebp),%esi
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
rtems_blkdev_bnum disk_end = 0;
106754: c7 45 dc 00 00 00 00 movl $0x0,-0x24(%ebp)
dev_t disk = 0;
dev_t logical_disk = 0;
char *logical_disk_name = NULL;
char *logical_disk_marker = NULL;
size_t disk_name_size = strlen( disk_name);
10675b: 31 c0 xor %eax,%eax
10675d: 83 c9 ff or $0xffffffff,%ecx
106760: 89 f7 mov %esi,%edi
106762: f2 ae repnz scas %es:(%edi),%al
106764: 89 cb mov %ecx,%ebx
106766: f7 d3 not %ebx
106768: 8d 7b ff lea -0x1(%ebx),%edi
size_t i = 0;
int fd = -1;
10676b: c7 45 e0 ff ff ff ff movl $0xffffffff,-0x20(%ebp)
rtems_disk_device *dd = NULL;
106772: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
/* Get disk data */
sc = rtems_bdpart_get_disk_data( disk_name, &fd, &dd, &disk_end);
106779: 8d 45 dc lea -0x24(%ebp),%eax
10677c: 50 push %eax
10677d: 8d 45 e4 lea -0x1c(%ebp),%eax
106780: 50 push %eax
106781: 8d 45 e0 lea -0x20(%ebp),%eax
106784: 50 push %eax
106785: 56 push %esi
106786: e8 fb fc ff ff call 106486 <rtems_bdpart_get_disk_data>
if (sc != RTEMS_SUCCESSFUL) {
10678b: 83 c4 10 add $0x10,%esp
10678e: 85 c0 test %eax,%eax
106790: 0f 85 d1 00 00 00 jne 106867 <rtems_bdpart_register+0x11f><== NEVER TAKEN
static inline dev_t rtems_disk_get_device_identifier(
const rtems_disk_device *dd
)
{
return dd->dev;
106796: 8b 45 e4 mov -0x1c(%ebp),%eax
106799: 8b 10 mov (%eax),%edx
10679b: 8b 48 04 mov 0x4(%eax),%ecx
10679e: 89 55 d0 mov %edx,-0x30(%ebp)
1067a1: 89 4d d4 mov %ecx,-0x2c(%ebp)
return sc;
}
disk = rtems_disk_get_device_identifier( dd);
close( fd);
1067a4: 83 ec 0c sub $0xc,%esp
1067a7: ff 75 e0 pushl -0x20(%ebp)
1067aa: e8 49 1a 00 00 call 1081f8 <close>
)
{
union __rtems_dev_t temp;
temp.device = device;
return temp.__overlay.major;
1067af: 8b 4d d0 mov -0x30(%ebp),%ecx
1067b2: 89 4d bc mov %ecx,-0x44(%ebp)
dev_t device
)
{
union __rtems_dev_t temp;
temp.device = device;
1067b5: 8b 45 d4 mov -0x2c(%ebp),%eax
1067b8: 89 45 cc mov %eax,-0x34(%ebp)
/* Get the disk device identifier */
rtems_filesystem_split_dev_t( disk, major, minor);
/* Create logical disk name */
logical_disk_name = malloc( disk_name_size + RTEMS_BDPART_NUMBER_SIZE);
1067bb: 83 c3 03 add $0x3,%ebx
1067be: 89 1c 24 mov %ebx,(%esp)
1067c1: e8 7a 21 00 00 call 108940 <malloc>
1067c6: 89 c3 mov %eax,%ebx
if (logical_disk_name == NULL) {
1067c8: 83 c4 10 add $0x10,%esp
return RTEMS_NO_MEMORY;
1067cb: b8 1a 00 00 00 mov $0x1a,%eax
/* Get the disk device identifier */
rtems_filesystem_split_dev_t( disk, major, minor);
/* Create logical disk name */
logical_disk_name = malloc( disk_name_size + RTEMS_BDPART_NUMBER_SIZE);
if (logical_disk_name == NULL) {
1067d0: 85 db test %ebx,%ebx
1067d2: 0f 84 8f 00 00 00 je 106867 <rtems_bdpart_register+0x11f><== NEVER TAKEN
return RTEMS_NO_MEMORY;
}
strncpy( logical_disk_name, disk_name, disk_name_size);
1067d8: 52 push %edx
1067d9: 57 push %edi
1067da: 56 push %esi
1067db: 53 push %ebx
1067dc: e8 ab ff 00 00 call 11678c <strncpy>
logical_disk_marker = logical_disk_name + disk_name_size;
1067e1: 01 df add %ebx,%edi
1067e3: 89 7d c8 mov %edi,-0x38(%ebp)
1067e6: 8b 7d 0c mov 0xc(%ebp),%edi
#include <string.h>
#include <rtems.h>
#include <rtems/bdpart.h>
rtems_status_code rtems_bdpart_register(
1067e9: 8b 55 cc mov -0x34(%ebp),%edx
1067ec: 03 55 10 add 0x10(%ebp),%edx
1067ef: 89 55 b8 mov %edx,-0x48(%ebp)
}
strncpy( logical_disk_name, disk_name, disk_name_size);
logical_disk_marker = logical_disk_name + disk_name_size;
/* Create a logical disk for each partition */
for (i = 0; i < count; ++i) {
1067f2: 83 c4 10 add $0x10,%esp
}
disk = rtems_disk_get_device_identifier( dd);
close( fd);
/* Get the disk device identifier */
rtems_filesystem_split_dev_t( disk, major, minor);
1067f5: 8b 75 cc mov -0x34(%ebp),%esi
}
strncpy( logical_disk_name, disk_name, disk_name_size);
logical_disk_marker = logical_disk_name + disk_name_size;
/* Create a logical disk for each partition */
for (i = 0; i < count; ++i) {
1067f8: eb 4d jmp 106847 <rtems_bdpart_register+0xff>
const rtems_bdpart_partition *p = pt + i;
int rv = 0;
/* New minor number */
++minor;
1067fa: 46 inc %esi
{
union __rtems_dev_t temp;
temp.__overlay.major = _major;
temp.__overlay.minor = _minor;
return temp.device;
1067fb: 8b 4d bc mov -0x44(%ebp),%ecx
1067fe: 89 4d c0 mov %ecx,-0x40(%ebp)
106801: 89 75 c4 mov %esi,-0x3c(%ebp)
#include <string.h>
#include <rtems.h>
#include <rtems/bdpart.h>
rtems_status_code rtems_bdpart_register(
106804: 89 f0 mov %esi,%eax
106806: 2b 45 cc sub -0x34(%ebp),%eax
/* Create a new device identifier */
logical_disk = rtems_filesystem_make_dev_t( major, minor);
/* Set partition number for logical disk name */
rv = snprintf( logical_disk_marker, RTEMS_BDPART_NUMBER_SIZE, "%zu", i + 1);
106809: 50 push %eax
10680a: 68 5c 38 12 00 push $0x12385c
10680f: 6a 04 push $0x4
106811: ff 75 c8 pushl -0x38(%ebp)
106814: e8 2b f6 00 00 call 115e44 <snprintf>
if (rv >= RTEMS_BDPART_NUMBER_SIZE) {
106819: 83 c4 10 add $0x10,%esp
10681c: 83 f8 03 cmp $0x3,%eax
10681f: 7f 2f jg 106850 <rtems_bdpart_register+0x108><== NEVER TAKEN
/* Create logical disk */
sc = rtems_disk_create_log(
logical_disk,
disk,
p->begin,
p->end - p->begin,
106821: 8b 17 mov (%edi),%edx
esc = RTEMS_INVALID_NAME;
goto cleanup;
}
/* Create logical disk */
sc = rtems_disk_create_log(
106823: 50 push %eax
106824: 53 push %ebx
106825: 8b 47 04 mov 0x4(%edi),%eax
106828: 29 d0 sub %edx,%eax
10682a: 50 push %eax
10682b: 52 push %edx
10682c: ff 75 d4 pushl -0x2c(%ebp)
10682f: ff 75 d0 pushl -0x30(%ebp)
106832: ff 75 c4 pushl -0x3c(%ebp)
106835: ff 75 c0 pushl -0x40(%ebp)
106838: e8 82 0a 00 00 call 1072bf <rtems_disk_create_log>
10683d: 83 c7 30 add $0x30,%edi
disk,
p->begin,
p->end - p->begin,
logical_disk_name
);
if (sc != RTEMS_SUCCESSFUL) {
106840: 83 c4 20 add $0x20,%esp
106843: 85 c0 test %eax,%eax
106845: 75 10 jne 106857 <rtems_bdpart_register+0x10f><== NEVER TAKEN
}
strncpy( logical_disk_name, disk_name, disk_name_size);
logical_disk_marker = logical_disk_name + disk_name_size;
/* Create a logical disk for each partition */
for (i = 0; i < count; ++i) {
106847: 3b 75 b8 cmp -0x48(%ebp),%esi
10684a: 75 ae jne 1067fa <rtems_bdpart_register+0xb2>
const rtems_bdpart_partition *pt,
size_t count
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
10684c: 31 f6 xor %esi,%esi
10684e: eb 09 jmp 106859 <rtems_bdpart_register+0x111>
logical_disk = rtems_filesystem_make_dev_t( major, minor);
/* Set partition number for logical disk name */
rv = snprintf( logical_disk_marker, RTEMS_BDPART_NUMBER_SIZE, "%zu", i + 1);
if (rv >= RTEMS_BDPART_NUMBER_SIZE) {
esc = RTEMS_INVALID_NAME;
106850: be 03 00 00 00 mov $0x3,%esi <== NOT EXECUTED
106855: eb 02 jmp 106859 <rtems_bdpart_register+0x111><== NOT EXECUTED
goto cleanup;
}
/* Create logical disk */
sc = rtems_disk_create_log(
106857: 89 c6 mov %eax,%esi <== NOT EXECUTED
}
}
cleanup:
free( logical_disk_name);
106859: 83 ec 0c sub $0xc,%esp
10685c: 53 push %ebx
10685d: e8 c6 1b 00 00 call 108428 <free>
106862: 83 c4 10 add $0x10,%esp
return esc;
106865: 89 f0 mov %esi,%eax
}
106867: 8d 65 f4 lea -0xc(%ebp),%esp
10686a: 5b pop %ebx
10686b: 5e pop %esi
10686c: 5f pop %edi
10686d: 5d pop %ebp
10686e: c3 ret
0010686f <rtems_bdpart_register_from_disk>:
rtems_status_code rtems_bdpart_register_from_disk( const char *disk_name)
{
10686f: 55 push %ebp
106870: 89 e5 mov %esp,%ebp
106872: 56 push %esi
106873: 53 push %ebx
106874: 81 ec 20 03 00 00 sub $0x320,%esp
10687a: 8b 5d 08 mov 0x8(%ebp),%ebx
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_bdpart_format format;
rtems_bdpart_partition pt [RTEMS_BDPART_PARTITION_NUMBER_HINT];
size_t count = RTEMS_BDPART_PARTITION_NUMBER_HINT;
10687d: c7 85 e0 fc ff ff 10 movl $0x10,-0x320(%ebp)
106884: 00 00 00
/* Read partitions */
sc = rtems_bdpart_read( disk_name, &format, pt, &count);
106887: 8d 85 e0 fc ff ff lea -0x320(%ebp),%eax
10688d: 50 push %eax
10688e: 8d b5 f8 fc ff ff lea -0x308(%ebp),%esi
106894: 56 push %esi
106895: 8d 85 e4 fc ff ff lea -0x31c(%ebp),%eax
10689b: 50 push %eax
10689c: 53 push %ebx
10689d: e8 7e fc ff ff call 106520 <rtems_bdpart_read>
if (sc != RTEMS_SUCCESSFUL) {
1068a2: 83 c4 10 add $0x10,%esp
1068a5: 85 c0 test %eax,%eax
1068a7: 75 11 jne 1068ba <rtems_bdpart_register_from_disk+0x4b><== NEVER TAKEN
return sc;
}
/* Register partitions */
return rtems_bdpart_register( disk_name, pt, count);
1068a9: 51 push %ecx
1068aa: ff b5 e0 fc ff ff pushl -0x320(%ebp)
1068b0: 56 push %esi
1068b1: 53 push %ebx
1068b2: e8 91 fe ff ff call 106748 <rtems_bdpart_register>
1068b7: 83 c4 10 add $0x10,%esp
}
1068ba: 8d 65 f8 lea -0x8(%ebp),%esp
1068bd: 5b pop %ebx
1068be: 5e pop %esi
1068bf: 5d pop %ebp
1068c0: c3 ret
0011fc64 <rtems_bdpart_unmount>:
const char *disk_name,
const rtems_bdpart_partition *pt __attribute__((unused)),
size_t count,
const char *mount_base
)
{
11fc64: 55 push %ebp <== NOT EXECUTED
11fc65: 89 e5 mov %esp,%ebp <== NOT EXECUTED
11fc67: 57 push %edi <== NOT EXECUTED
11fc68: 56 push %esi <== NOT EXECUTED
11fc69: 53 push %ebx <== NOT EXECUTED
11fc6a: 83 ec 24 sub $0x24,%esp <== NOT EXECUTED
rtems_status_code esc = RTEMS_SUCCESSFUL;
const char *disk_file_name = strrchr( disk_name, '/');
11fc6d: 6a 2f push $0x2f <== NOT EXECUTED
11fc6f: ff 75 08 pushl 0x8(%ebp) <== NOT EXECUTED
11fc72: e8 59 7f 01 00 call 137bd0 <strrchr> <== NOT EXECUTED
11fc77: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11fc7a: 89 c3 mov %eax,%ebx <== NOT EXECUTED
char *mount_point = NULL;
char *mount_marker = NULL;
size_t disk_file_name_size = 0;
size_t disk_name_size = strlen( disk_name);
11fc7c: 83 ce ff or $0xffffffff,%esi <== NOT EXECUTED
11fc7f: 31 c0 xor %eax,%eax <== NOT EXECUTED
11fc81: 89 f1 mov %esi,%ecx <== NOT EXECUTED
11fc83: 8b 7d 08 mov 0x8(%ebp),%edi <== NOT EXECUTED
11fc86: f2 ae repnz scas %es:(%edi),%al <== NOT EXECUTED
11fc88: f7 d1 not %ecx <== NOT EXECUTED
11fc8a: 8d 51 ff lea -0x1(%ecx),%edx <== NOT EXECUTED
size_t mount_base_size = strlen( mount_base);
11fc8d: 89 f1 mov %esi,%ecx <== NOT EXECUTED
11fc8f: 8b 7d 14 mov 0x14(%ebp),%edi <== NOT EXECUTED
11fc92: f2 ae repnz scas %es:(%edi),%al <== NOT EXECUTED
11fc94: f7 d1 not %ecx <== NOT EXECUTED
11fc96: 89 4d e0 mov %ecx,-0x20(%ebp) <== NOT EXECUTED
11fc99: 49 dec %ecx <== NOT EXECUTED
11fc9a: 89 4d dc mov %ecx,-0x24(%ebp) <== NOT EXECUTED
size_t i = 0;
/* Get disk file name */
if (disk_file_name != NULL) {
11fc9d: 85 db test %ebx,%ebx <== NOT EXECUTED
11fc9f: 74 11 je 11fcb2 <rtems_bdpart_unmount+0x4e><== NOT EXECUTED
disk_file_name += 1;
11fca1: 43 inc %ebx <== NOT EXECUTED
11fca2: 89 5d e4 mov %ebx,-0x1c(%ebp) <== NOT EXECUTED
disk_file_name_size = strlen( disk_file_name);
11fca5: 89 f1 mov %esi,%ecx <== NOT EXECUTED
11fca7: 89 df mov %ebx,%edi <== NOT EXECUTED
11fca9: f2 ae repnz scas %es:(%edi),%al <== NOT EXECUTED
11fcab: f7 d1 not %ecx <== NOT EXECUTED
11fcad: 8d 71 ff lea -0x1(%ecx),%esi <== NOT EXECUTED
11fcb0: eb 08 jmp 11fcba <rtems_bdpart_unmount+0x56><== NOT EXECUTED
} else {
disk_file_name = disk_name;
disk_file_name_size = disk_name_size;
11fcb2: 89 d6 mov %edx,%esi <== NOT EXECUTED
/* Get disk file name */
if (disk_file_name != NULL) {
disk_file_name += 1;
disk_file_name_size = strlen( disk_file_name);
} else {
disk_file_name = disk_name;
11fcb4: 8b 45 08 mov 0x8(%ebp),%eax <== NOT EXECUTED
11fcb7: 89 45 e4 mov %eax,-0x1c(%ebp) <== NOT EXECUTED
disk_file_name_size = disk_name_size;
}
/* Create mount point base */
mount_point = malloc( mount_base_size + 1 + disk_file_name_size + RTEMS_BDPART_NUMBER_SIZE);
11fcba: 8b 7d dc mov -0x24(%ebp),%edi <== NOT EXECUTED
11fcbd: 01 f7 add %esi,%edi <== NOT EXECUTED
11fcbf: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11fcc2: 8d 47 05 lea 0x5(%edi),%eax <== NOT EXECUTED
11fcc5: 50 push %eax <== NOT EXECUTED
11fcc6: e8 49 6b fe ff call 106814 <malloc> <== NOT EXECUTED
11fccb: 89 c3 mov %eax,%ebx <== NOT EXECUTED
if (mount_point == NULL) {
11fccd: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
esc = RTEMS_NO_MEMORY;
11fcd0: b8 1a 00 00 00 mov $0x1a,%eax <== NOT EXECUTED
disk_file_name_size = disk_name_size;
}
/* Create mount point base */
mount_point = malloc( mount_base_size + 1 + disk_file_name_size + RTEMS_BDPART_NUMBER_SIZE);
if (mount_point == NULL) {
11fcd5: 85 db test %ebx,%ebx <== NOT EXECUTED
11fcd7: 0f 84 80 00 00 00 je 11fd5d <rtems_bdpart_unmount+0xf9><== NOT EXECUTED
esc = RTEMS_NO_MEMORY;
goto cleanup;
}
strncpy( mount_point, mount_base, mount_base_size);
11fcdd: 51 push %ecx <== NOT EXECUTED
11fcde: ff 75 dc pushl -0x24(%ebp) <== NOT EXECUTED
11fce1: ff 75 14 pushl 0x14(%ebp) <== NOT EXECUTED
11fce4: 53 push %ebx <== NOT EXECUTED
11fce5: e8 ce 74 01 00 call 1371b8 <strncpy> <== NOT EXECUTED
mount_point [mount_base_size] = '/';
11fcea: 8b 4d e0 mov -0x20(%ebp),%ecx <== NOT EXECUTED
11fced: c6 44 0b ff 2f movb $0x2f,-0x1(%ebx,%ecx,1) <== NOT EXECUTED
strncpy( mount_point + mount_base_size + 1, disk_file_name, disk_file_name_size);
11fcf2: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11fcf5: 56 push %esi <== NOT EXECUTED
11fcf6: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
11fcf9: 8b 55 dc mov -0x24(%ebp),%edx <== NOT EXECUTED
11fcfc: 8d 44 13 01 lea 0x1(%ebx,%edx,1),%eax <== NOT EXECUTED
11fd00: 50 push %eax <== NOT EXECUTED
11fd01: e8 b2 74 01 00 call 1371b8 <strncpy> <== NOT EXECUTED
/* Marker */
mount_marker = mount_point + mount_base_size + 1 + disk_file_name_size;
11fd06: 8d 7c 3b 01 lea 0x1(%ebx,%edi,1),%edi <== NOT EXECUTED
/* Mount supported file systems for each partition */
for (i = 0; i < count; ++i) {
11fd0a: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11fd0d: 31 f6 xor %esi,%esi <== NOT EXECUTED
11fd0f: eb 37 jmp 11fd48 <rtems_bdpart_unmount+0xe4><== NOT EXECUTED
/* Create mount point */
int rv = snprintf( mount_marker, RTEMS_BDPART_NUMBER_SIZE, "%zu", i + 1);
11fd11: 46 inc %esi <== NOT EXECUTED
11fd12: 56 push %esi <== NOT EXECUTED
11fd13: 68 bc 14 15 00 push $0x1514bc <== NOT EXECUTED
11fd18: 6a 04 push $0x4 <== NOT EXECUTED
11fd1a: 57 push %edi <== NOT EXECUTED
11fd1b: e8 e0 68 01 00 call 136600 <snprintf> <== NOT EXECUTED
if (rv >= RTEMS_BDPART_NUMBER_SIZE) {
11fd20: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11fd23: 83 f8 03 cmp $0x3,%eax <== NOT EXECUTED
11fd26: 7f 29 jg 11fd51 <rtems_bdpart_unmount+0xed><== NOT EXECUTED
esc = RTEMS_INVALID_NAME;
goto cleanup;
}
/* Unmount */
rv = unmount( mount_point);
11fd28: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11fd2b: 53 push %ebx <== NOT EXECUTED
11fd2c: e8 6b 34 00 00 call 12319c <unmount> <== NOT EXECUTED
if (rv == 0) {
11fd31: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11fd34: 85 c0 test %eax,%eax <== NOT EXECUTED
11fd36: 75 10 jne 11fd48 <rtems_bdpart_unmount+0xe4><== NOT EXECUTED
/* Remove mount point */
rv = rmdir( mount_point);
11fd38: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11fd3b: 53 push %ebx <== NOT EXECUTED
11fd3c: e8 bb 2e 00 00 call 122bfc <rmdir> <== NOT EXECUTED
if (rv != 0) {
11fd41: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11fd44: 85 c0 test %eax,%eax <== NOT EXECUTED
11fd46: 75 10 jne 11fd58 <rtems_bdpart_unmount+0xf4><== NOT EXECUTED
/* Marker */
mount_marker = mount_point + mount_base_size + 1 + disk_file_name_size;
/* Mount supported file systems for each partition */
for (i = 0; i < count; ++i) {
11fd48: 3b 75 10 cmp 0x10(%ebp),%esi <== NOT EXECUTED
11fd4b: 75 c4 jne 11fd11 <rtems_bdpart_unmount+0xad><== NOT EXECUTED
const rtems_bdpart_partition *pt __attribute__((unused)),
size_t count,
const char *mount_base
)
{
rtems_status_code esc = RTEMS_SUCCESSFUL;
11fd4d: 31 c0 xor %eax,%eax <== NOT EXECUTED
11fd4f: eb 0c jmp 11fd5d <rtems_bdpart_unmount+0xf9><== NOT EXECUTED
/* Mount supported file systems for each partition */
for (i = 0; i < count; ++i) {
/* Create mount point */
int rv = snprintf( mount_marker, RTEMS_BDPART_NUMBER_SIZE, "%zu", i + 1);
if (rv >= RTEMS_BDPART_NUMBER_SIZE) {
esc = RTEMS_INVALID_NAME;
11fd51: b8 03 00 00 00 mov $0x3,%eax <== NOT EXECUTED
11fd56: eb 05 jmp 11fd5d <rtems_bdpart_unmount+0xf9><== NOT EXECUTED
rv = unmount( mount_point);
if (rv == 0) {
/* Remove mount point */
rv = rmdir( mount_point);
if (rv != 0) {
esc = RTEMS_IO_ERROR;
11fd58: b8 1b 00 00 00 mov $0x1b,%eax <== NOT EXECUTED
}
}
cleanup:
free( mount_point);
11fd5d: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11fd60: 53 push %ebx <== NOT EXECUTED
11fd61: 89 45 d8 mov %eax,-0x28(%ebp) <== NOT EXECUTED
11fd64: e8 eb 67 fe ff call 106554 <free> <== NOT EXECUTED
return esc;
}
11fd69: 8b 45 d8 mov -0x28(%ebp),%eax <== NOT EXECUTED
11fd6c: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
11fd6f: 5b pop %ebx <== NOT EXECUTED
11fd70: 5e pop %esi <== NOT EXECUTED
11fd71: 5f pop %edi <== NOT EXECUTED
11fd72: 5d pop %ebp <== NOT EXECUTED
11fd73: c3 ret <== NOT EXECUTED
001068c1 <rtems_bdpart_unregister>:
rtems_status_code rtems_bdpart_unregister(
const char *disk_name,
const rtems_bdpart_partition *pt __attribute__((unused)),
size_t count
)
{
1068c1: 55 push %ebp
1068c2: 89 e5 mov %esp,%ebp
1068c4: 57 push %edi
1068c5: 56 push %esi
1068c6: 53 push %ebx
1068c7: 83 ec 2c sub $0x2c,%esp
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
rtems_blkdev_bnum disk_end = 0;
1068ca: c7 45 dc 00 00 00 00 movl $0x0,-0x24(%ebp)
dev_t disk = 0;
dev_t logical_disk = 0;
size_t i = 0;
int fd = -1;
1068d1: c7 45 e0 ff ff ff ff movl $0xffffffff,-0x20(%ebp)
rtems_disk_device *dd = NULL;
1068d8: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
/* Get disk data */
sc = rtems_bdpart_get_disk_data( disk_name, &fd, &dd, &disk_end);
1068df: 8d 45 dc lea -0x24(%ebp),%eax
1068e2: 50 push %eax
1068e3: 8d 45 e4 lea -0x1c(%ebp),%eax
1068e6: 50 push %eax
1068e7: 8d 45 e0 lea -0x20(%ebp),%eax
1068ea: 50 push %eax
1068eb: ff 75 08 pushl 0x8(%ebp)
1068ee: e8 93 fb ff ff call 106486 <rtems_bdpart_get_disk_data>
1068f3: 89 c3 mov %eax,%ebx
if (sc != RTEMS_SUCCESSFUL) {
1068f5: 83 c4 10 add $0x10,%esp
1068f8: 85 c0 test %eax,%eax
1068fa: 75 3a jne 106936 <rtems_bdpart_unregister+0x75><== NEVER TAKEN
1068fc: 8b 45 e4 mov -0x1c(%ebp),%eax
1068ff: 8b 38 mov (%eax),%edi
106901: 8b 70 04 mov 0x4(%eax),%esi
return sc;
}
disk = rtems_disk_get_device_identifier( dd);
close( fd);
106904: 83 ec 0c sub $0xc,%esp
106907: ff 75 e0 pushl -0x20(%ebp)
10690a: e8 e9 18 00 00 call 1081f8 <close>
/* Register partitions */
return rtems_bdpart_register( disk_name, pt, count);
}
rtems_status_code rtems_bdpart_unregister(
10690f: 8b 45 10 mov 0x10(%ebp),%eax
106912: 01 f0 add %esi,%eax
106914: 89 45 d4 mov %eax,-0x2c(%ebp)
/* Get the disk device identifier */
rtems_filesystem_split_dev_t( disk, major, minor);
/* Create a logical disk for each partition */
for (i = 0; i < count; ++i) {
106917: 83 c4 10 add $0x10,%esp
10691a: eb 11 jmp 10692d <rtems_bdpart_unregister+0x6c>
/* New minor number */
++minor;
10691c: 46 inc %esi
/* Get the device identifier */
logical_disk = rtems_filesystem_make_dev_t( major, minor);
/* Delete logical disk */
sc = rtems_disk_delete( logical_disk);
10691d: 51 push %ecx
10691e: 51 push %ecx
10691f: 56 push %esi
106920: 57 push %edi
106921: e8 6f 08 00 00 call 107195 <rtems_disk_delete>
if (sc != RTEMS_SUCCESSFUL) {
106926: 83 c4 10 add $0x10,%esp
106929: 85 c0 test %eax,%eax
10692b: 75 07 jne 106934 <rtems_bdpart_unregister+0x73><== NEVER TAKEN
/* Get the disk device identifier */
rtems_filesystem_split_dev_t( disk, major, minor);
/* Create a logical disk for each partition */
for (i = 0; i < count; ++i) {
10692d: 3b 75 d4 cmp -0x2c(%ebp),%esi
106930: 75 ea jne 10691c <rtems_bdpart_unregister+0x5b>
106932: eb 02 jmp 106936 <rtems_bdpart_unregister+0x75>
/* Get the device identifier */
logical_disk = rtems_filesystem_make_dev_t( major, minor);
/* Delete logical disk */
sc = rtems_disk_delete( logical_disk);
106934: 89 c3 mov %eax,%ebx <== NOT EXECUTED
return sc;
}
}
return RTEMS_SUCCESSFUL;
}
106936: 89 d8 mov %ebx,%eax
106938: 8d 65 f4 lea -0xc(%ebp),%esp
10693b: 5b pop %ebx
10693c: 5e pop %esi
10693d: 5f pop %edi
10693e: 5d pop %ebp
10693f: c3 ret
001069ec <rtems_bdpart_write>:
const char *disk_name,
const rtems_bdpart_format *format,
const rtems_bdpart_partition *pt,
size_t count
)
{
1069ec: 55 push %ebp
1069ed: 89 e5 mov %esp,%ebp
1069ef: 57 push %edi
1069f0: 56 push %esi
1069f1: 53 push %ebx
1069f2: 83 ec 4c sub $0x4c,%esp
1069f5: 8b 7d 0c mov 0xc(%ebp),%edi
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
bool dos_compatibility = format != NULL
&& format->type == RTEMS_BDPART_FORMAT_MBR
&& format->mbr.dos_compatibility;
1069f8: 31 db xor %ebx,%ebx
1069fa: 85 ff test %edi,%edi
1069fc: 74 09 je 106a07 <rtems_bdpart_write+0x1b><== NEVER TAKEN
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
bool dos_compatibility = format != NULL
&& format->type == RTEMS_BDPART_FORMAT_MBR
1069fe: 83 3f 00 cmpl $0x0,(%edi)
106a01: 75 04 jne 106a07 <rtems_bdpart_write+0x1b><== NEVER TAKEN
&& format->mbr.dos_compatibility;
106a03: 0f b6 5f 08 movzbl 0x8(%edi),%ebx
size_t count
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
bool dos_compatibility = format != NULL
106a07: 83 e3 01 and $0x1,%ebx
&& format->type == RTEMS_BDPART_FORMAT_MBR
&& format->mbr.dos_compatibility;
rtems_bdbuf_buffer *block = NULL;
106a0a: c7 45 d8 00 00 00 00 movl $0x0,-0x28(%ebp)
rtems_blkdev_bnum disk_end = 0;
106a11: c7 45 dc 00 00 00 00 movl $0x0,-0x24(%ebp)
rtems_blkdev_bnum record_space =
106a18: 80 fb 01 cmp $0x1,%bl
106a1b: 19 f6 sbb %esi,%esi
106a1d: 83 e6 c2 and $0xffffffc2,%esi
106a20: 83 c6 3f add $0x3f,%esi
106a23: 89 75 c0 mov %esi,-0x40(%ebp)
dos_compatibility ? RTEMS_BDPART_MBR_CYLINDER_SIZE : 1;
size_t ppc = 0; /* Primary partition count */
size_t i = 0;
uint8_t *data = NULL;
int fd = -1;
106a26: c7 45 e0 ff ff ff ff movl $0xffffffff,-0x20(%ebp)
rtems_disk_device *dd = NULL;
106a2d: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
/* Check if we have something to do */
if (count == 0) {
/* Nothing to do */
return RTEMS_SUCCESSFUL;
106a34: 31 c0 xor %eax,%eax
uint8_t *data = NULL;
int fd = -1;
rtems_disk_device *dd = NULL;
/* Check if we have something to do */
if (count == 0) {
106a36: 83 7d 14 00 cmpl $0x0,0x14(%ebp)
106a3a: 0f 84 a6 02 00 00 je 106ce6 <rtems_bdpart_write+0x2fa><== NEVER TAKEN
/* Nothing to do */
return RTEMS_SUCCESSFUL;
}
/* Check parameter */
if (format == NULL || pt == NULL) {
106a40: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
106a44: 0f 84 93 02 00 00 je 106cdd <rtems_bdpart_write+0x2f1><== NEVER TAKEN
106a4a: 85 ff test %edi,%edi
106a4c: 0f 84 8b 02 00 00 je 106cdd <rtems_bdpart_write+0x2f1><== NEVER TAKEN
return RTEMS_INVALID_ADDRESS;
}
/* Get disk data */
sc = rtems_bdpart_get_disk_data( disk_name, &fd, &dd, &disk_end);
106a52: 8d 45 dc lea -0x24(%ebp),%eax
106a55: 50 push %eax
106a56: 8d 45 e4 lea -0x1c(%ebp),%eax
106a59: 50 push %eax
106a5a: 8d 45 e0 lea -0x20(%ebp),%eax
106a5d: 50 push %eax
106a5e: ff 75 08 pushl 0x8(%ebp)
106a61: e8 20 fa ff ff call 106486 <rtems_bdpart_get_disk_data>
if (sc != RTEMS_SUCCESSFUL) {
106a66: 83 c4 10 add $0x10,%esp
106a69: 85 c0 test %eax,%eax
106a6b: 0f 85 75 02 00 00 jne 106ce6 <rtems_bdpart_write+0x2fa><== NEVER TAKEN
return sc;
}
/* Align end of disk on cylinder boundary if necessary */
if (dos_compatibility) {
106a71: 84 db test %bl,%bl
106a73: 74 0f je 106a84 <rtems_bdpart_write+0x98><== NEVER TAKEN
disk_end -= (disk_end % record_space);
106a75: 8b 45 dc mov -0x24(%ebp),%eax
106a78: 31 d2 xor %edx,%edx
106a7a: f7 f6 div %esi
106a7c: 8b 45 dc mov -0x24(%ebp),%eax
106a7f: 29 d0 sub %edx,%eax
106a81: 89 45 dc mov %eax,-0x24(%ebp)
/* Check that we have a consistent partition table */
for (i = 0; i < count; ++i) {
const rtems_bdpart_partition *p = pt + i;
/* Check that begin and end are proper within the disk */
if (p->begin >= disk_end || p->end > disk_end) {
106a84: 8b 45 dc mov -0x24(%ebp),%eax
106a87: 89 45 bc mov %eax,-0x44(%ebp)
106a8a: 8b 75 10 mov 0x10(%ebp),%esi
106a8d: 89 75 b8 mov %esi,-0x48(%ebp)
106a90: 89 f0 mov %esi,%eax
if (dos_compatibility) {
disk_end -= (disk_end % record_space);
}
/* Check that we have a consistent partition table */
for (i = 0; i < count; ++i) {
106a92: 31 d2 xor %edx,%edx
const rtems_bdpart_partition *p = pt + i;
/* Check that begin and end are proper within the disk */
if (p->begin >= disk_end || p->end > disk_end) {
106a94: 8b 08 mov (%eax),%ecx
106a96: 3b 4d bc cmp -0x44(%ebp),%ecx
106a99: 0f 83 0d 02 00 00 jae 106cac <rtems_bdpart_write+0x2c0><== NEVER TAKEN
106a9f: 8b 70 04 mov 0x4(%eax),%esi
106aa2: 89 75 c4 mov %esi,-0x3c(%ebp)
106aa5: 8b 75 bc mov -0x44(%ebp),%esi
106aa8: 39 75 c4 cmp %esi,-0x3c(%ebp)
106aab: 0f 87 fb 01 00 00 ja 106cac <rtems_bdpart_write+0x2c0><== NEVER TAKEN
esc = RTEMS_INVALID_NUMBER;
goto cleanup;
}
/* Check that begin and end are valid */
if (p->begin >= p->end) {
106ab1: 3b 4d c4 cmp -0x3c(%ebp),%ecx
106ab4: 0f 83 f2 01 00 00 jae 106cac <rtems_bdpart_write+0x2c0><== NEVER TAKEN
esc = RTEMS_INVALID_NUMBER;
goto cleanup;
}
/* Check that partitions do not overlap */
if (i > 0 && pt [i - 1].end > p->begin) {
106aba: 85 d2 test %edx,%edx
106abc: 74 09 je 106ac7 <rtems_bdpart_write+0xdb>
106abe: 39 48 d4 cmp %ecx,-0x2c(%eax)
106ac1: 0f 87 e5 01 00 00 ja 106cac <rtems_bdpart_write+0x2c0><== NEVER TAKEN
if (dos_compatibility) {
disk_end -= (disk_end % record_space);
}
/* Check that we have a consistent partition table */
for (i = 0; i < count; ++i) {
106ac7: 42 inc %edx
106ac8: 83 c0 30 add $0x30,%eax
106acb: 3b 55 14 cmp 0x14(%ebp),%edx
106ace: 75 c4 jne 106a94 <rtems_bdpart_write+0xa8>
}
}
/* Check format */
if (format->type != RTEMS_BDPART_FORMAT_MBR) {
esc = RTEMS_NOT_IMPLEMENTED;
106ad0: be 18 00 00 00 mov $0x18,%esi
goto cleanup;
}
}
/* Check format */
if (format->type != RTEMS_BDPART_FORMAT_MBR) {
106ad5: 83 3f 00 cmpl $0x0,(%edi)
106ad8: 0f 85 d7 01 00 00 jne 106cb5 <rtems_bdpart_write+0x2c9><== NEVER TAKEN
* Set primary partition count. If we have more than four partitions we need
* an extended partition which will contain the partitions of number four and
* above as logical partitions. If we have four or less partitions we can
* use the primary partition table.
*/
ppc = count <= 4 ? count : 3;
106ade: 8b 75 14 mov 0x14(%ebp),%esi
106ae1: 89 75 c4 mov %esi,-0x3c(%ebp)
106ae4: 83 fe 04 cmp $0x4,%esi
106ae7: 76 07 jbe 106af0 <rtems_bdpart_write+0x104><== NEVER TAKEN
106ae9: c7 45 c4 03 00 00 00 movl $0x3,-0x3c(%ebp)
/*
* Check that the first primary partition starts at head one and sector one
* under the virtual one head and 63 sectors geometry if necessary.
*/
if (dos_compatibility && pt [0].begin != RTEMS_BDPART_MBR_CYLINDER_SIZE) {
106af0: 84 db test %bl,%bl
106af2: 75 13 jne 106b07 <rtems_bdpart_write+0x11b><== ALWAYS TAKEN
RTEMS_BDPART_MBR_SIGNATURE_1;
return RTEMS_SUCCESSFUL;
}
rtems_status_code rtems_bdpart_write(
106af4: 6b 45 c4 30 imul $0x30,-0x3c(%ebp),%eax
106af8: 03 45 10 add 0x10(%ebp),%eax
106afb: 89 45 b4 mov %eax,-0x4c(%ebp)
106afe: 89 c3 mov %eax,%ebx
106b00: 89 c2 mov %eax,%edx
106b02: 8b 45 c4 mov -0x3c(%ebp),%eax
106b05: eb 27 jmp 106b2e <rtems_bdpart_write+0x142>
/*
* Check that the first primary partition starts at head one and sector one
* under the virtual one head and 63 sectors geometry if necessary.
*/
if (dos_compatibility && pt [0].begin != RTEMS_BDPART_MBR_CYLINDER_SIZE) {
esc = RTEMS_INVALID_NUMBER;
106b07: be 0a 00 00 00 mov $0xa,%esi
/*
* Check that the first primary partition starts at head one and sector one
* under the virtual one head and 63 sectors geometry if necessary.
*/
if (dos_compatibility && pt [0].begin != RTEMS_BDPART_MBR_CYLINDER_SIZE) {
106b0c: 8b 45 10 mov 0x10(%ebp),%eax
106b0f: 83 38 3f cmpl $0x3f,(%eax)
106b12: 0f 85 9d 01 00 00 jne 106cb5 <rtems_bdpart_write+0x2c9><== NEVER TAKEN
106b18: eb da jmp 106af4 <rtems_bdpart_write+0x108>
RTEMS_BDPART_MBR_SIGNATURE_1;
return RTEMS_SUCCESSFUL;
}
rtems_status_code rtems_bdpart_write(
106b1a: 89 d6 mov %edx,%esi
106b1c: 83 c2 30 add $0x30,%edx
* The space for the EBR and maybe some space which is needed for DOS
* compatibility resides between the partitions. So there have to be gaps of
* the appropriate size between the partitions.
*/
for (i = ppc; i < count; ++i) {
if ((pt [i].begin - pt [i - 1].end) < record_space) {
106b1f: 8b 0e mov (%esi),%ecx
106b21: 2b 4e d4 sub -0x2c(%esi),%ecx
106b24: 3b 4d c0 cmp -0x40(%ebp),%ecx
106b27: 0f 82 7f 01 00 00 jb 106cac <rtems_bdpart_write+0x2c0><== NEVER TAKEN
* Each logical partition is described via one EBR preceding the partition.
* The space for the EBR and maybe some space which is needed for DOS
* compatibility resides between the partitions. So there have to be gaps of
* the appropriate size between the partitions.
*/
for (i = ppc; i < count; ++i) {
106b2d: 40 inc %eax
106b2e: 3b 45 14 cmp 0x14(%ebp),%eax
106b31: 72 e7 jb 106b1a <rtems_bdpart_write+0x12e>
106b33: 8b 75 10 mov 0x10(%ebp),%esi
106b36: 31 d2 xor %edx,%edx
uint8_t type = 0;
const rtems_bdpart_partition *p = pt + i;
/* Check type */
if (!rtems_bdpart_to_mbr_partition_type( p->type, &type)) {
106b38: 8d 4d d7 lea -0x29(%ebp),%ecx
}
}
/* Check that we can convert the parition descriptions to the MBR format */
for (i = 0; i < count; ++i) {
uint8_t type = 0;
106b3b: c6 45 d7 00 movb $0x0,-0x29(%ebp)
const rtems_bdpart_partition *p = pt + i;
/* Check type */
if (!rtems_bdpart_to_mbr_partition_type( p->type, &type)) {
106b3f: 50 push %eax
106b40: 50 push %eax
106b41: 51 push %ecx
106b42: 8d 46 08 lea 0x8(%esi),%eax
106b45: 50 push %eax
106b46: 89 55 b0 mov %edx,-0x50(%ebp)
106b49: 89 4d ac mov %ecx,-0x54(%ebp)
106b4c: e8 0d f9 ff ff call 10645e <rtems_bdpart_to_mbr_partition_type>
106b51: 83 c4 10 add $0x10,%esp
106b54: 84 c0 test %al,%al
106b56: 8b 55 b0 mov -0x50(%ebp),%edx
106b59: 8b 4d ac mov -0x54(%ebp),%ecx
106b5c: 74 1a je 106b78 <rtems_bdpart_write+0x18c><== NEVER TAKEN
106b5e: 83 c6 30 add $0x30,%esi
esc = RTEMS_INVALID_ID;
goto cleanup;
}
/* Check flags */
if (p->flags > 0xffU) {
106b61: 83 7e fc 00 cmpl $0x0,-0x4(%esi)
106b65: 77 11 ja 106b78 <rtems_bdpart_write+0x18c><== NEVER TAKEN
106b67: 81 7e f8 ff 00 00 00 cmpl $0xff,-0x8(%esi)
106b6e: 77 08 ja 106b78 <rtems_bdpart_write+0x18c><== NEVER TAKEN
goto cleanup;
}
}
/* Check that we can convert the parition descriptions to the MBR format */
for (i = 0; i < count; ++i) {
106b70: 42 inc %edx
106b71: 3b 55 14 cmp 0x14(%ebp),%edx
106b74: 75 c5 jne 106b3b <rtems_bdpart_write+0x14f>
106b76: eb 0a jmp 106b82 <rtems_bdpart_write+0x196>
106b78: be 04 00 00 00 mov $0x4,%esi <== NOT EXECUTED
106b7d: e9 33 01 00 00 jmp 106cb5 <rtems_bdpart_write+0x2c9><== NOT EXECUTED
/* Check ID */
/* TODO */
}
/* New MBR */
sc = rtems_bdpart_new_record( dd, 0, &block);
106b82: 8d 4d d8 lea -0x28(%ebp),%ecx
106b85: 31 d2 xor %edx,%edx
106b87: 8b 45 e4 mov -0x1c(%ebp),%eax
106b8a: e8 b1 fd ff ff call 106940 <rtems_bdpart_new_record>
if (sc != RTEMS_SUCCESSFUL) {
106b8f: 89 c6 mov %eax,%esi
106b91: 85 c0 test %eax,%eax
106b93: 0f 85 1c 01 00 00 jne 106cb5 <rtems_bdpart_write+0x2c9><== NEVER TAKEN
}
/* Write disk ID */
rtems_uint32_to_little_endian(
format->mbr.disk_id,
block->buffer + RTEMS_BDPART_MBR_OFFSET_DISK_ID
106b99: 8b 45 d8 mov -0x28(%ebp),%eax
106b9c: 8b 48 1c mov 0x1c(%eax),%ecx
esc = sc;
goto cleanup;
}
/* Write disk ID */
rtems_uint32_to_little_endian(
106b9f: 8b 57 04 mov 0x4(%edi),%edx
106ba2: 31 c0 xor %eax,%eax
data [i] = (uint8_t) value;
106ba4: 88 94 01 b8 01 00 00 mov %dl,0x1b8(%ecx,%eax,1)
value >>= 8;
106bab: c1 ea 08 shr $0x8,%edx
static inline void rtems_uint32_to_little_endian( uint32_t value, uint8_t *data)
{
size_t i = 0;
for (i = 0; i < 4; ++i) {
106bae: 40 inc %eax
106baf: 83 f8 04 cmp $0x4,%eax
106bb2: 75 f0 jne 106ba4 <rtems_bdpart_write+0x1b8>
format->mbr.disk_id,
block->buffer + RTEMS_BDPART_MBR_OFFSET_DISK_ID
);
/* Write primary partition table */
data = block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_0;
106bb4: 8b 45 d8 mov -0x28(%ebp),%eax
106bb7: 8b 40 1c mov 0x1c(%eax),%eax
106bba: 05 be 01 00 00 add $0x1be,%eax
106bbf: 89 45 bc mov %eax,-0x44(%ebp)
106bc2: 89 c7 mov %eax,%edi
for (i = 0; i < ppc; ++i) {
106bc4: 31 f6 xor %esi,%esi
106bc6: eb 34 jmp 106bfc <rtems_bdpart_write+0x210>
/* Write partition entry */
rtems_bdpart_write_mbr_partition(
data,
p->begin,
p->end - p->begin,
106bc8: 8b 55 b8 mov -0x48(%ebp),%edx
106bcb: 8b 12 mov (%edx),%edx
106bcd: 89 55 a8 mov %edx,-0x58(%ebp)
data = block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_0;
for (i = 0; i < ppc; ++i) {
const rtems_bdpart_partition *p = pt + i;
/* Write partition entry */
rtems_bdpart_write_mbr_partition(
106bd0: 51 push %ecx
106bd1: 51 push %ecx
106bd2: 8b 45 b8 mov -0x48(%ebp),%eax
106bd5: 8b 48 04 mov 0x4(%eax),%ecx
106bd8: 29 d1 sub %edx,%ecx
106bda: 0f b6 40 28 movzbl 0x28(%eax),%eax
106bde: 50 push %eax
106bdf: 8b 55 b8 mov -0x48(%ebp),%edx
106be2: 0f b6 42 08 movzbl 0x8(%edx),%eax
106be6: 50 push %eax
106be7: 8b 55 a8 mov -0x58(%ebp),%edx
106bea: 89 f8 mov %edi,%eax
106bec: e8 c1 fd ff ff call 1069b2 <rtems_bdpart_write_mbr_partition>
p->end - p->begin,
rtems_bdpart_mbr_partition_type( p->type),
(uint8_t) p->flags
);
data += RTEMS_BDPART_MBR_TABLE_ENTRY_SIZE;
106bf1: 83 c7 10 add $0x10,%edi
block->buffer + RTEMS_BDPART_MBR_OFFSET_DISK_ID
);
/* Write primary partition table */
data = block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_0;
for (i = 0; i < ppc; ++i) {
106bf4: 46 inc %esi
106bf5: 83 45 b8 30 addl $0x30,-0x48(%ebp)
106bf9: 83 c4 10 add $0x10,%esp
106bfc: 3b 75 c4 cmp -0x3c(%ebp),%esi
106bff: 75 c7 jne 106bc8 <rtems_bdpart_write+0x1dc>
RTEMS_BDPART_MBR_SIGNATURE_1;
return RTEMS_SUCCESSFUL;
}
rtems_status_code rtems_bdpart_write(
106c01: 8b 45 c4 mov -0x3c(%ebp),%eax
106c04: c1 e0 04 shl $0x4,%eax
106c07: 03 45 bc add -0x44(%ebp),%eax
const rtems_bdpart_partition *pt,
size_t count
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
106c0a: 31 f6 xor %esi,%esi
data += RTEMS_BDPART_MBR_TABLE_ENTRY_SIZE;
}
/* Write extended partition with logical partitions if necessary */
if (ppc != count) {
106c0c: 8b 55 14 mov 0x14(%ebp),%edx
106c0f: 39 55 c4 cmp %edx,-0x3c(%ebp)
106c12: 0f 84 9d 00 00 00 je 106cb5 <rtems_bdpart_write+0x2c9><== NEVER TAKEN
rtems_blkdev_bnum ebr = 0; /* Extended boot record block index */
/* Begin of extended partition */
rtems_blkdev_bnum ep_begin = pt [ppc].begin - record_space;
106c18: 8b 75 b4 mov -0x4c(%ebp),%esi
106c1b: 8b 3e mov (%esi),%edi
106c1d: 2b 7d c0 sub -0x40(%ebp),%edi
/* Write extended partition */
rtems_bdpart_write_mbr_partition(
106c20: 52 push %edx
106c21: 52 push %edx
106c22: 8b 4d dc mov -0x24(%ebp),%ecx
106c25: 29 f9 sub %edi,%ecx
106c27: 6a 00 push $0x0
106c29: 6a 05 push $0x5
106c2b: 89 fa mov %edi,%edx
106c2d: e8 80 fd ff ff call 1069b2 <rtems_bdpart_write_mbr_partition>
RTEMS_BDPART_MBR_EXTENDED,
0
);
/* Write logical partitions */
for (i = ppc; i < count; ++i) {
106c32: 83 c4 10 add $0x10,%esp
106c35: 8b 75 c4 mov -0x3c(%ebp),%esi
106c38: eb 69 jmp 106ca3 <rtems_bdpart_write+0x2b7>
const rtems_bdpart_partition *p = pt + i;
/* Write second partition entry */
if (i > ppc) {
106c3a: 3b 75 c4 cmp -0x3c(%ebp),%esi
106c3d: 76 25 jbe 106c64 <rtems_bdpart_write+0x278>
rtems_blkdev_bnum begin = p->begin - record_space;
106c3f: 8b 13 mov (%ebx),%edx
106c41: 2b 55 c0 sub -0x40(%ebp),%edx
rtems_bdpart_write_mbr_partition(
106c44: 50 push %eax
106c45: 50 push %eax
106c46: 8b 4d dc mov -0x24(%ebp),%ecx
106c49: 29 d1 sub %edx,%ecx
106c4b: 29 fa sub %edi,%edx
block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_1,
106c4d: 8b 45 d8 mov -0x28(%ebp),%eax
/* Write second partition entry */
if (i > ppc) {
rtems_blkdev_bnum begin = p->begin - record_space;
rtems_bdpart_write_mbr_partition(
106c50: 8b 40 1c mov 0x1c(%eax),%eax
106c53: 05 ce 01 00 00 add $0x1ce,%eax
106c58: 6a 00 push $0x0
106c5a: 6a 05 push $0x5
106c5c: e8 51 fd ff ff call 1069b2 <rtems_bdpart_write_mbr_partition>
106c61: 83 c4 10 add $0x10,%esp
0
);
}
/* New EBR */
ebr = p->begin - record_space;
106c64: 8b 13 mov (%ebx),%edx
106c66: 2b 55 c0 sub -0x40(%ebp),%edx
sc = rtems_bdpart_new_record( dd, ebr, &block);
106c69: 8d 4d d8 lea -0x28(%ebp),%ecx
106c6c: 8b 45 e4 mov -0x1c(%ebp),%eax
106c6f: e8 cc fc ff ff call 106940 <rtems_bdpart_new_record>
if (sc != RTEMS_SUCCESSFUL) {
106c74: 85 c0 test %eax,%eax
106c76: 75 3b jne 106cb3 <rtems_bdpart_write+0x2c7><== NEVER TAKEN
esc = sc;
goto cleanup;
}
/* Write first partition entry */
rtems_bdpart_write_mbr_partition(
106c78: 50 push %eax
106c79: 50 push %eax
106c7a: 8b 4b 04 mov 0x4(%ebx),%ecx
106c7d: 2b 0b sub (%ebx),%ecx
block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_0,
106c7f: 8b 45 d8 mov -0x28(%ebp),%eax
esc = sc;
goto cleanup;
}
/* Write first partition entry */
rtems_bdpart_write_mbr_partition(
106c82: 8b 40 1c mov 0x1c(%eax),%eax
106c85: 05 be 01 00 00 add $0x1be,%eax
106c8a: 0f b6 53 28 movzbl 0x28(%ebx),%edx
106c8e: 52 push %edx
106c8f: 0f b6 53 08 movzbl 0x8(%ebx),%edx
106c93: 52 push %edx
106c94: 8b 55 c0 mov -0x40(%ebp),%edx
106c97: e8 16 fd ff ff call 1069b2 <rtems_bdpart_write_mbr_partition>
RTEMS_BDPART_MBR_EXTENDED,
0
);
/* Write logical partitions */
for (i = ppc; i < count; ++i) {
106c9c: 46 inc %esi
106c9d: 83 c3 30 add $0x30,%ebx
106ca0: 83 c4 10 add $0x10,%esp
106ca3: 3b 75 14 cmp 0x14(%ebp),%esi
106ca6: 72 92 jb 106c3a <rtems_bdpart_write+0x24e>
const rtems_bdpart_partition *pt,
size_t count
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
106ca8: 31 f6 xor %esi,%esi
106caa: eb 09 jmp 106cb5 <rtems_bdpart_write+0x2c9>
* compatibility resides between the partitions. So there have to be gaps of
* the appropriate size between the partitions.
*/
for (i = ppc; i < count; ++i) {
if ((pt [i].begin - pt [i - 1].end) < record_space) {
esc = RTEMS_INVALID_NUMBER;
106cac: be 0a 00 00 00 mov $0xa,%esi <== NOT EXECUTED
106cb1: eb 02 jmp 106cb5 <rtems_bdpart_write+0x2c9><== NOT EXECUTED
}
/* New EBR */
ebr = p->begin - record_space;
sc = rtems_bdpart_new_record( dd, ebr, &block);
if (sc != RTEMS_SUCCESSFUL) {
106cb3: 89 c6 mov %eax,%esi <== NOT EXECUTED
}
}
cleanup:
if (fd >= 0) {
106cb5: 8b 45 e0 mov -0x20(%ebp),%eax
106cb8: 85 c0 test %eax,%eax
106cba: 78 0c js 106cc8 <rtems_bdpart_write+0x2dc><== NEVER TAKEN
close( fd);
106cbc: 83 ec 0c sub $0xc,%esp
106cbf: 50 push %eax
106cc0: e8 33 15 00 00 call 1081f8 <close>
106cc5: 83 c4 10 add $0x10,%esp
}
if (block != NULL) {
106cc8: 8b 45 d8 mov -0x28(%ebp),%eax
106ccb: 85 c0 test %eax,%eax
106ccd: 74 15 je 106ce4 <rtems_bdpart_write+0x2f8><== NEVER TAKEN
rtems_bdbuf_sync( block);
106ccf: 83 ec 0c sub $0xc,%esp
106cd2: 50 push %eax
106cd3: e8 2a a1 00 00 call 110e02 <rtems_bdbuf_sync>
106cd8: 83 c4 10 add $0x10,%esp
106cdb: eb 07 jmp 106ce4 <rtems_bdpart_write+0x2f8>
return RTEMS_SUCCESSFUL;
}
/* Check parameter */
if (format == NULL || pt == NULL) {
return RTEMS_INVALID_ADDRESS;
106cdd: b8 09 00 00 00 mov $0x9,%eax <== NOT EXECUTED
106ce2: eb 02 jmp 106ce6 <rtems_bdpart_write+0x2fa><== NOT EXECUTED
if (block != NULL) {
rtems_bdbuf_sync( block);
}
return esc;
106ce4: 89 f0 mov %esi,%eax
}
106ce6: 8d 65 f4 lea -0xc(%ebp),%esp
106ce9: 5b pop %ebx
106cea: 5e pop %esi
106ceb: 5f pop %edi
106cec: 5d pop %ebp
106ced: c3 ret
0010694b <rtems_blkdev_create_partition>:
const char *partition,
const char *device,
rtems_blkdev_bnum block_begin,
rtems_blkdev_bnum block_count
)
{
10694b: 55 push %ebp
10694c: 89 e5 mov %esp,%ebp
10694e: 57 push %edi
10694f: 56 push %esi
106950: 53 push %ebx
106951: 83 ec 64 sub $0x64,%esp
rtems_status_code sc = RTEMS_SUCCESSFUL;
int fd = open(device, O_RDWR);
106954: 6a 02 push $0x2
106956: ff 75 0c pushl 0xc(%ebp)
106959: e8 f6 21 00 00 call 108b54 <open>
10695e: 89 c7 mov %eax,%edi
if (fd >= 0) {
106960: 83 c4 10 add $0x10,%esp
if (sc != RTEMS_SUCCESSFUL) {
close(fd);
}
} else {
sc = RTEMS_INVALID_ID;
106963: bb 04 00 00 00 mov $0x4,%ebx
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
int fd = open(device, O_RDWR);
if (fd >= 0) {
106968: 85 c0 test %eax,%eax
10696a: 0f 88 c3 00 00 00 js 106a33 <rtems_blkdev_create_partition+0xe8>
int rv;
struct stat st;
rv = fstat(fd, &st);
106970: 50 push %eax
106971: 50 push %eax
106972: 8d 45 a0 lea -0x60(%ebp),%eax
106975: 50 push %eax
106976: 57 push %edi
106977: e8 c0 14 00 00 call 107e3c <fstat>
if (rv == 0 && S_ISBLK(st.st_mode)) {
10697c: 83 c4 10 add $0x10,%esp
10697f: 85 c0 test %eax,%eax
106981: 0f 85 9b 00 00 00 jne 106a22 <rtems_blkdev_create_partition+0xd7><== NEVER TAKEN
106987: 8b 45 ac mov -0x54(%ebp),%eax
10698a: 25 00 f0 00 00 and $0xf000,%eax
10698f: b3 15 mov $0x15,%bl
106991: 3d 00 60 00 00 cmp $0x6000,%eax
106996: 0f 85 8b 00 00 00 jne 106a27 <rtems_blkdev_create_partition+0xdc>
static inline int rtems_disk_fd_get_disk_device(
int fd,
rtems_disk_device **dd_ptr
)
{
return ioctl(fd, RTEMS_BLKIO_GETDISKDEV, dd_ptr);
10699c: 50 push %eax
rtems_disk_device *phys_dd;
rv = rtems_disk_fd_get_disk_device(fd, &phys_dd);
10699d: 8d 45 9c lea -0x64(%ebp),%eax
1069a0: 50 push %eax
1069a1: 68 09 42 04 40 push $0x40044209
1069a6: 57 push %edi
1069a7: e8 a0 15 00 00 call 107f4c <ioctl>
if (rv == 0) {
1069ac: 83 c4 10 add $0x10,%esp
}
} else {
sc = RTEMS_NO_MEMORY;
}
} else {
sc = RTEMS_NOT_IMPLEMENTED;
1069af: b3 18 mov $0x18,%bl
rv = fstat(fd, &st);
if (rv == 0 && S_ISBLK(st.st_mode)) {
rtems_disk_device *phys_dd;
rv = rtems_disk_fd_get_disk_device(fd, &phys_dd);
if (rv == 0) {
1069b1: 85 c0 test %eax,%eax
1069b3: 75 72 jne 106a27 <rtems_blkdev_create_partition+0xdc><== NEVER TAKEN
rtems_blkdev_imfs_context *ctx = malloc(sizeof(*ctx));
1069b5: 83 ec 0c sub $0xc,%esp
1069b8: 6a 78 push $0x78
1069ba: e8 1d 19 00 00 call 1082dc <malloc>
1069bf: 89 c6 mov %eax,%esi
if (ctx != NULL) {
1069c1: 83 c4 10 add $0x10,%esp
1069c4: 85 c0 test %eax,%eax
1069c6: 74 53 je 106a1b <rtems_blkdev_create_partition+0xd0><== NEVER TAKEN
sc = rtems_disk_init_log(
1069c8: ff 75 14 pushl 0x14(%ebp)
1069cb: ff 75 10 pushl 0x10(%ebp)
1069ce: ff 75 9c pushl -0x64(%ebp)
1069d1: 50 push %eax
1069d2: e8 fa 01 00 00 call 106bd1 <rtems_disk_init_log>
1069d7: 89 c3 mov %eax,%ebx
phys_dd,
block_begin,
block_count
);
if (sc == RTEMS_SUCCESSFUL) {
1069d9: 83 c4 10 add $0x10,%esp
1069dc: 85 c0 test %eax,%eax
1069de: 75 2d jne 106a0d <rtems_blkdev_create_partition+0xc2><== NEVER TAKEN
ctx->fd = fd;
1069e0: 89 7e 74 mov %edi,0x74(%esi)
rv = IMFS_make_generic_node(
1069e3: 56 push %esi
1069e4: 68 48 2c 12 00 push $0x122c48
1069e9: 68 ff 61 00 00 push $0x61ff
1069ee: ff 75 08 pushl 0x8(%ebp)
1069f1: e8 f7 0b 00 00 call 1075ed <IMFS_make_generic_node>
S_IFBLK | S_IRWXU | S_IRWXG | S_IRWXO,
&rtems_blkdev_imfs_control,
ctx
);
if (rv != 0) {
1069f6: 83 c4 10 add $0x10,%esp
1069f9: 85 c0 test %eax,%eax
1069fb: 74 36 je 106a33 <rtems_blkdev_create_partition+0xe8><== ALWAYS TAKEN
free(ctx);
1069fd: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
106a00: 56 push %esi <== NOT EXECUTED
106a01: e8 be 13 00 00 call 107dc4 <free> <== NOT EXECUTED
106a06: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
sc = RTEMS_UNSATISFIED;
106a09: b3 0d mov $0xd,%bl <== NOT EXECUTED
106a0b: eb 1a jmp 106a27 <rtems_blkdev_create_partition+0xdc><== NOT EXECUTED
}
} else {
free(ctx);
106a0d: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
106a10: 56 push %esi <== NOT EXECUTED
106a11: e8 ae 13 00 00 call 107dc4 <free> <== NOT EXECUTED
106a16: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
106a19: eb 0c jmp 106a27 <rtems_blkdev_create_partition+0xdc><== NOT EXECUTED
}
} else {
sc = RTEMS_NO_MEMORY;
106a1b: bb 1a 00 00 00 mov $0x1a,%ebx <== NOT EXECUTED
106a20: eb 05 jmp 106a27 <rtems_blkdev_create_partition+0xdc><== NOT EXECUTED
if (fd >= 0) {
int rv;
struct stat st;
rv = fstat(fd, &st);
if (rv == 0 && S_ISBLK(st.st_mode)) {
106a22: bb 15 00 00 00 mov $0x15,%ebx <== NOT EXECUTED
} else {
sc = RTEMS_INVALID_NODE;
}
if (sc != RTEMS_SUCCESSFUL) {
close(fd);
106a27: 83 ec 0c sub $0xc,%esp
106a2a: 57 push %edi
106a2b: e8 64 11 00 00 call 107b94 <close>
106a30: 83 c4 10 add $0x10,%esp
} else {
sc = RTEMS_INVALID_ID;
}
return sc;
}
106a33: 89 d8 mov %ebx,%eax
106a35: 8d 65 f4 lea -0xc(%ebp),%esp
106a38: 5b pop %ebx
106a39: 5e pop %esi
106a3a: 5f pop %edi
106a3b: 5d pop %ebp
106a3c: c3 ret
00110471 <rtems_blkdev_generic_ioctl>:
rtems_device_driver
rtems_blkdev_generic_ioctl(
rtems_device_major_number major __attribute__((unused)),
rtems_device_minor_number minor __attribute__((unused)),
void * arg)
{
110471: 55 push %ebp
110472: 89 e5 mov %esp,%ebp
110474: 53 push %ebx
110475: 53 push %ebx
110476: 8b 5d 10 mov 0x10(%ebp),%ebx
rtems_libio_ioctl_args_t *args = arg;
rtems_libio_t *iop = args->iop;
rtems_disk_device *dd = iop->data1;
110479: 8b 03 mov (%ebx),%eax
11047b: 8b 40 2c mov 0x2c(%eax),%eax
if (args->command != RTEMS_BLKIO_REQUEST)
11047e: 8b 53 04 mov 0x4(%ebx),%edx
110481: 81 fa 01 42 18 c0 cmp $0xc0184201,%edx
110487: 74 11 je 11049a <rtems_blkdev_generic_ioctl+0x29><== NEVER TAKEN
{
args->ioctl_return = dd->ioctl(dd,
110489: 51 push %ecx
11048a: ff 73 08 pushl 0x8(%ebx)
11048d: 52 push %edx
11048e: 50 push %eax
11048f: ff 50 38 call *0x38(%eax)
110492: 89 43 0c mov %eax,0xc(%ebx)
110495: 83 c4 10 add $0x10,%esp
110498: eb 07 jmp 1104a1 <rtems_blkdev_generic_ioctl+0x30>
{
/*
* It is not allowed to directly access the driver circumventing the
* cache.
*/
args->ioctl_return = -1;
11049a: c7 43 0c ff ff ff ff movl $0xffffffff,0xc(%ebx) <== NOT EXECUTED
}
return RTEMS_SUCCESSFUL;
}
1104a1: 31 c0 xor %eax,%eax
1104a3: 8b 5d fc mov -0x4(%ebp),%ebx
1104a6: c9 leave
1104a7: c3 ret
00110270 <rtems_blkdev_generic_read>:
rtems_device_driver
rtems_blkdev_generic_read(
rtems_device_major_number major __attribute__((unused)),
rtems_device_minor_number minor __attribute__((unused)),
void * arg)
{
110270: 55 push %ebp
110271: 89 e5 mov %esp,%ebp
110273: 57 push %edi
110274: 56 push %esi
110275: 53 push %ebx
110276: 83 ec 4c sub $0x4c,%esp
110279: 8b 5d 10 mov 0x10(%ebp),%ebx
rtems_status_code rc = RTEMS_SUCCESSFUL;
rtems_libio_rw_args_t *args = arg;
rtems_libio_t *iop = args->iop;
rtems_disk_device *dd = iop->data1;
11027c: 8b 03 mov (%ebx),%eax
11027e: 8b 40 2c mov 0x2c(%eax),%eax
110281: 89 45 c8 mov %eax,-0x38(%ebp)
uint32_t block_size = dd->block_size;
110284: 8b 40 24 mov 0x24(%eax),%eax
110287: 89 45 c4 mov %eax,-0x3c(%ebp)
char *buf = args->buffer;
11028a: 8b 43 0c mov 0xc(%ebx),%eax
11028d: 89 45 d0 mov %eax,-0x30(%ebp)
uint32_t count = args->count;
110290: 8b 43 10 mov 0x10(%ebx),%eax
110293: 89 45 d4 mov %eax,-0x2c(%ebp)
rtems_blkdev_bnum block = (rtems_blkdev_bnum) (args->offset / block_size);
110296: 8b 73 04 mov 0x4(%ebx),%esi
110299: 8b 7b 08 mov 0x8(%ebx),%edi
11029c: 8b 45 c4 mov -0x3c(%ebp),%eax
11029f: 89 45 b8 mov %eax,-0x48(%ebp)
1102a2: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp)
1102a9: ff 75 bc pushl -0x44(%ebp)
1102ac: ff 75 b8 pushl -0x48(%ebp)
1102af: 57 push %edi
1102b0: 56 push %esi
1102b1: e8 12 03 01 00 call 1205c8 <__divdi3>
1102b6: 83 c4 10 add $0x10,%esp
1102b9: 89 45 cc mov %eax,-0x34(%ebp)
uint32_t blkofs = (uint32_t) (args->offset % block_size);
1102bc: ff 75 bc pushl -0x44(%ebp)
1102bf: ff 75 b8 pushl -0x48(%ebp)
1102c2: 57 push %edi
1102c3: 56 push %esi
1102c4: e8 53 04 01 00 call 12071c <__moddi3>
1102c9: 83 c4 10 add $0x10,%esp
1102cc: 89 c6 mov %eax,%esi
args->bytes_moved = 0;
1102ce: c7 43 18 00 00 00 00 movl $0x0,0x18(%ebx)
while (count > 0)
1102d5: eb 57 jmp 11032e <rtems_blkdev_generic_read+0xbe>
{
rtems_bdbuf_buffer *diskbuf;
uint32_t copy;
rc = rtems_bdbuf_read(dd, block, &diskbuf);
1102d7: 50 push %eax
1102d8: 8d 45 e4 lea -0x1c(%ebp),%eax
1102db: 50 push %eax
1102dc: ff 75 cc pushl -0x34(%ebp)
1102df: ff 75 c8 pushl -0x38(%ebp)
1102e2: e8 be f8 ff ff call 10fba5 <rtems_bdbuf_read>
if (rc != RTEMS_SUCCESSFUL)
1102e7: 83 c4 10 add $0x10,%esp
1102ea: 85 c0 test %eax,%eax
1102ec: 75 48 jne 110336 <rtems_blkdev_generic_read+0xc6><== NEVER TAKEN
1102ee: 8b 55 c4 mov -0x3c(%ebp),%edx
1102f1: 29 f2 sub %esi,%edx
1102f3: 3b 55 d4 cmp -0x2c(%ebp),%edx
1102f6: 76 03 jbe 1102fb <rtems_blkdev_generic_read+0x8b><== ALWAYS TAKEN
1102f8: 8b 55 d4 mov -0x2c(%ebp),%edx <== NOT EXECUTED
break;
copy = block_size - blkofs;
if (copy > count)
copy = count;
memcpy(buf, (char *)diskbuf->buffer + blkofs, copy);
1102fb: 8b 45 e4 mov -0x1c(%ebp),%eax
1102fe: 03 70 1c add 0x1c(%eax),%esi
110301: 8b 7d d0 mov -0x30(%ebp),%edi
110304: 89 d1 mov %edx,%ecx
110306: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
rc = rtems_bdbuf_release(diskbuf);
110308: 83 ec 0c sub $0xc,%esp
11030b: ff 75 e4 pushl -0x1c(%ebp)
11030e: 89 55 b4 mov %edx,-0x4c(%ebp)
110311: e8 ed f9 ff ff call 10fd03 <rtems_bdbuf_release>
args->bytes_moved += copy;
110316: 8b 55 b4 mov -0x4c(%ebp),%edx
110319: 01 53 18 add %edx,0x18(%ebx)
if (rc != RTEMS_SUCCESSFUL)
11031c: 83 c4 10 add $0x10,%esp
11031f: 85 c0 test %eax,%eax
110321: 75 13 jne 110336 <rtems_blkdev_generic_read+0xc6><== NEVER TAKEN
break;
count -= copy;
110323: 29 55 d4 sub %edx,-0x2c(%ebp)
buf += copy;
110326: 89 7d d0 mov %edi,-0x30(%ebp)
blkofs = 0;
block++;
110329: ff 45 cc incl -0x34(%ebp)
args->bytes_moved += copy;
if (rc != RTEMS_SUCCESSFUL)
break;
count -= copy;
buf += copy;
blkofs = 0;
11032c: 31 f6 xor %esi,%esi
rtems_blkdev_bnum block = (rtems_blkdev_bnum) (args->offset / block_size);
uint32_t blkofs = (uint32_t) (args->offset % block_size);
args->bytes_moved = 0;
while (count > 0)
11032e: 83 7d d4 00 cmpl $0x0,-0x2c(%ebp)
110332: 75 a3 jne 1102d7 <rtems_blkdev_generic_read+0x67>
110334: 31 c0 xor %eax,%eax
blkofs = 0;
block++;
}
return rc;
}
110336: 8d 65 f4 lea -0xc(%ebp),%esp
110339: 5b pop %ebx
11033a: 5e pop %esi
11033b: 5f pop %edi
11033c: 5d pop %ebp
11033d: c3 ret
0011033e <rtems_blkdev_generic_write>:
rtems_device_driver
rtems_blkdev_generic_write(
rtems_device_major_number major __attribute__((unused)),
rtems_device_minor_number minor __attribute__((unused)),
void * arg)
{
11033e: 55 push %ebp
11033f: 89 e5 mov %esp,%ebp
110341: 57 push %edi
110342: 56 push %esi
110343: 53 push %ebx
110344: 83 ec 4c sub $0x4c,%esp
110347: 8b 5d 10 mov 0x10(%ebp),%ebx
rtems_status_code rc = RTEMS_SUCCESSFUL;
rtems_libio_rw_args_t *args = arg;
rtems_libio_t *iop = args->iop;
rtems_disk_device *dd = iop->data1;
11034a: 8b 03 mov (%ebx),%eax
11034c: 8b 40 2c mov 0x2c(%eax),%eax
11034f: 89 45 c8 mov %eax,-0x38(%ebp)
uint32_t block_size = dd->block_size;
110352: 8b 40 24 mov 0x24(%eax),%eax
110355: 89 45 c4 mov %eax,-0x3c(%ebp)
char *buf = args->buffer;
110358: 8b 43 0c mov 0xc(%ebx),%eax
11035b: 89 45 cc mov %eax,-0x34(%ebp)
uint32_t count = args->count;
11035e: 8b 43 10 mov 0x10(%ebx),%eax
110361: 89 45 d4 mov %eax,-0x2c(%ebp)
rtems_blkdev_bnum block = (rtems_blkdev_bnum) (args->offset / block_size);
110364: 8b 73 04 mov 0x4(%ebx),%esi
110367: 8b 7b 08 mov 0x8(%ebx),%edi
11036a: 8b 45 c4 mov -0x3c(%ebp),%eax
11036d: 89 45 b8 mov %eax,-0x48(%ebp)
110370: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp)
110377: ff 75 bc pushl -0x44(%ebp)
11037a: ff 75 b8 pushl -0x48(%ebp)
11037d: 57 push %edi
11037e: 56 push %esi
11037f: e8 44 02 01 00 call 1205c8 <__divdi3>
110384: 83 c4 10 add $0x10,%esp
110387: 89 45 d0 mov %eax,-0x30(%ebp)
uint32_t blkofs = (uint32_t) (args->offset % block_size);
11038a: ff 75 bc pushl -0x44(%ebp)
11038d: ff 75 b8 pushl -0x48(%ebp)
110390: 57 push %edi
110391: 56 push %esi
110392: e8 85 03 01 00 call 12071c <__moddi3>
110397: 83 c4 10 add $0x10,%esp
11039a: 89 c6 mov %eax,%esi
args->bytes_moved = 0;
11039c: c7 43 18 00 00 00 00 movl $0x0,0x18(%ebx)
while (count > 0)
1103a3: eb 79 jmp 11041e <rtems_blkdev_generic_write+0xe0>
{
rtems_bdbuf_buffer *diskbuf;
uint32_t copy;
if ((blkofs == 0) && (count >= block_size))
1103a5: 8b 45 c4 mov -0x3c(%ebp),%eax
1103a8: 39 45 d4 cmp %eax,-0x2c(%ebp)
1103ab: 72 16 jb 1103c3 <rtems_blkdev_generic_write+0x85><== NEVER TAKEN
1103ad: 85 f6 test %esi,%esi
1103af: 75 12 jne 1103c3 <rtems_blkdev_generic_write+0x85><== NEVER TAKEN
rc = rtems_bdbuf_get(dd, block, &diskbuf);
1103b1: 51 push %ecx
1103b2: 8d 45 e4 lea -0x1c(%ebp),%eax
1103b5: 50 push %eax
1103b6: ff 75 d0 pushl -0x30(%ebp)
1103b9: ff 75 c8 pushl -0x38(%ebp)
1103bc: e8 48 f7 ff ff call 10fb09 <rtems_bdbuf_get>
1103c1: eb 10 jmp 1103d3 <rtems_blkdev_generic_write+0x95>
else
rc = rtems_bdbuf_read(dd, block, &diskbuf);
1103c3: 52 push %edx <== NOT EXECUTED
1103c4: 8d 45 e4 lea -0x1c(%ebp),%eax <== NOT EXECUTED
1103c7: 50 push %eax <== NOT EXECUTED
1103c8: ff 75 d0 pushl -0x30(%ebp) <== NOT EXECUTED
1103cb: ff 75 c8 pushl -0x38(%ebp) <== NOT EXECUTED
1103ce: e8 d2 f7 ff ff call 10fba5 <rtems_bdbuf_read> <== NOT EXECUTED
1103d3: 83 c4 10 add $0x10,%esp
if (rc != RTEMS_SUCCESSFUL)
1103d6: 85 c0 test %eax,%eax
1103d8: 75 4c jne 110426 <rtems_blkdev_generic_write+0xe8><== NEVER TAKEN
1103da: 8b 55 c4 mov -0x3c(%ebp),%edx
1103dd: 29 f2 sub %esi,%edx
1103df: 3b 55 d4 cmp -0x2c(%ebp),%edx
1103e2: 76 03 jbe 1103e7 <rtems_blkdev_generic_write+0xa9><== ALWAYS TAKEN
1103e4: 8b 55 d4 mov -0x2c(%ebp),%edx <== NOT EXECUTED
break;
copy = block_size - blkofs;
if (copy > count)
copy = count;
memcpy((char *)diskbuf->buffer + blkofs, buf, copy);
1103e7: 8b 45 e4 mov -0x1c(%ebp),%eax
1103ea: 8b 40 1c mov 0x1c(%eax),%eax
1103ed: 01 f0 add %esi,%eax
1103ef: 89 c7 mov %eax,%edi
1103f1: 8b 75 cc mov -0x34(%ebp),%esi
1103f4: 89 d1 mov %edx,%ecx
1103f6: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
args->bytes_moved += copy;
1103f8: 01 53 18 add %edx,0x18(%ebx)
rc = rtems_bdbuf_release_modified(diskbuf);
1103fb: 83 ec 0c sub $0xc,%esp
1103fe: ff 75 e4 pushl -0x1c(%ebp)
110401: 89 55 b4 mov %edx,-0x4c(%ebp)
110404: e8 8b f9 ff ff call 10fd94 <rtems_bdbuf_release_modified>
if (rc != RTEMS_SUCCESSFUL)
110409: 83 c4 10 add $0x10,%esp
11040c: 85 c0 test %eax,%eax
11040e: 8b 55 b4 mov -0x4c(%ebp),%edx
110411: 75 13 jne 110426 <rtems_blkdev_generic_write+0xe8><== NEVER TAKEN
break;
count -= copy;
110413: 29 55 d4 sub %edx,-0x2c(%ebp)
buf += copy;
110416: 89 75 cc mov %esi,-0x34(%ebp)
blkofs = 0;
block++;
110419: ff 45 d0 incl -0x30(%ebp)
if (rc != RTEMS_SUCCESSFUL)
break;
count -= copy;
buf += copy;
blkofs = 0;
11041c: 31 f6 xor %esi,%esi
rtems_blkdev_bnum block = (rtems_blkdev_bnum) (args->offset / block_size);
uint32_t blkofs = (uint32_t) (args->offset % block_size);
args->bytes_moved = 0;
while (count > 0)
11041e: 83 7d d4 00 cmpl $0x0,-0x2c(%ebp)
110422: 75 81 jne 1103a5 <rtems_blkdev_generic_write+0x67>
110424: 31 c0 xor %eax,%eax
blkofs = 0;
block++;
}
return rc;
}
110426: 8d 65 f4 lea -0xc(%ebp),%esp
110429: 5b pop %ebx
11042a: 5e pop %esi
11042b: 5f pop %edi
11042c: 5d pop %ebp
11042d: c3 ret
00106866 <rtems_blkdev_imfs_fsync_or_fdatasync>:
}
static int rtems_blkdev_imfs_fsync_or_fdatasync(
rtems_libio_t *iop
)
{
106866: 55 push %ebp <== NOT EXECUTED
106867: 89 e5 mov %esp,%ebp <== NOT EXECUTED
106869: 83 ec 14 sub $0x14,%esp <== NOT EXECUTED
} else {
sc = RTEMS_INVALID_ID;
}
return sc;
}
10686c: 8b 45 08 mov 0x8(%ebp),%eax <== NOT EXECUTED
10686f: 8b 40 18 mov 0x18(%eax),%eax <== NOT EXECUTED
)
{
int rv = 0;
rtems_blkdev_imfs_context *ctx = IMFS_generic_get_context_by_iop(iop);
rtems_disk_device *dd = &ctx->dd;
rtems_status_code sc = rtems_bdbuf_syncdev(dd);
106872: ff 70 50 pushl 0x50(%eax) <== NOT EXECUTED
106875: e8 09 a0 00 00 call 110883 <rtems_bdbuf_syncdev> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
10687a: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
static int rtems_blkdev_imfs_fsync_or_fdatasync(
rtems_libio_t *iop
)
{
int rv = 0;
10687d: 31 d2 xor %edx,%edx <== NOT EXECUTED
rtems_blkdev_imfs_context *ctx = IMFS_generic_get_context_by_iop(iop);
rtems_disk_device *dd = &ctx->dd;
rtems_status_code sc = rtems_bdbuf_syncdev(dd);
if (sc != RTEMS_SUCCESSFUL) {
10687f: 85 c0 test %eax,%eax <== NOT EXECUTED
106881: 74 0e je 106891 <rtems_blkdev_imfs_fsync_or_fdatasync+0x2b><== NOT EXECUTED
errno = EIO;
106883: e8 9c df 00 00 call 114824 <__errno> <== NOT EXECUTED
106888: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
10688e: 83 ca ff or $0xffffffff,%edx <== NOT EXECUTED
rv = -1;
}
return rv;
}
106891: 89 d0 mov %edx,%eax <== NOT EXECUTED
106893: c9 leave <== NOT EXECUTED
106894: c3 ret <== NOT EXECUTED
00106895 <rtems_blkdev_imfs_ioctl>:
static int rtems_blkdev_imfs_ioctl(
rtems_libio_t *iop,
uint32_t request,
void *buffer
)
{
106895: 55 push %ebp
106896: 89 e5 mov %esp,%ebp
106898: 83 ec 08 sub $0x8,%esp
10689b: 8b 45 08 mov 0x8(%ebp),%eax
10689e: 8b 55 0c mov 0xc(%ebp),%edx
int rv = 0;
if (request != RTEMS_BLKIO_REQUEST) {
1068a1: 81 fa 01 42 18 c0 cmp $0xc0184201,%edx
1068a7: 74 0f je 1068b8 <rtems_blkdev_imfs_ioctl+0x23><== NEVER TAKEN
} else {
sc = RTEMS_INVALID_ID;
}
return sc;
}
1068a9: 8b 40 18 mov 0x18(%eax),%eax
1068ac: 8b 40 50 mov 0x50(%eax),%eax
if (request != RTEMS_BLKIO_REQUEST) {
rtems_blkdev_imfs_context *ctx = IMFS_generic_get_context_by_iop(iop);
rtems_disk_device *dd = &ctx->dd;
rv = (*dd->ioctl)(dd, request, buffer);
1068af: 89 45 08 mov %eax,0x8(%ebp)
1068b2: 8b 40 38 mov 0x38(%eax),%eax
errno = EINVAL;
rv = -1;
}
return rv;
}
1068b5: c9 leave
if (request != RTEMS_BLKIO_REQUEST) {
rtems_blkdev_imfs_context *ctx = IMFS_generic_get_context_by_iop(iop);
rtems_disk_device *dd = &ctx->dd;
rv = (*dd->ioctl)(dd, request, buffer);
1068b6: ff e0 jmp *%eax
} else {
/*
* It is not allowed to directly access the driver circumventing the cache.
*/
errno = EINVAL;
1068b8: e8 67 df 00 00 call 114824 <__errno> <== NOT EXECUTED
1068bd: c7 00 16 00 00 00 movl $0x16,(%eax) <== NOT EXECUTED
rv = -1;
}
return rv;
}
1068c3: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
1068c6: c9 leave <== NOT EXECUTED
1068c7: c3 ret <== NOT EXECUTED
00106725 <rtems_blkdev_imfs_read>:
static ssize_t rtems_blkdev_imfs_read(
rtems_libio_t *iop,
void *buffer,
size_t count
)
{
106725: 55 push %ebp
106726: 89 e5 mov %esp,%ebp
106728: 57 push %edi
106729: 56 push %esi
10672a: 53 push %ebx
10672b: 83 ec 3c sub $0x3c,%esp
} else {
sc = RTEMS_INVALID_ID;
}
return sc;
}
10672e: 8b 55 08 mov 0x8(%ebp),%edx
106731: 8b 42 18 mov 0x18(%edx),%eax
106734: 8b 40 50 mov 0x50(%eax),%eax
106737: 89 45 c8 mov %eax,-0x38(%ebp)
{
int rv;
rtems_blkdev_imfs_context *ctx = IMFS_generic_get_context_by_iop(iop);
rtems_disk_device *dd = &ctx->dd;
ssize_t remaining = (ssize_t) count;
off_t offset = iop->offset;
10673a: 8b 72 04 mov 0x4(%edx),%esi
10673d: 8b 7a 08 mov 0x8(%edx),%edi
ssize_t block_size = (ssize_t) rtems_disk_get_block_size(dd);
106740: 8b 40 24 mov 0x24(%eax),%eax
106743: 89 45 c4 mov %eax,-0x3c(%ebp)
rtems_blkdev_bnum block = (rtems_blkdev_bnum) (offset / block_size);
106746: 99 cltd
106747: 89 d3 mov %edx,%ebx
106749: 52 push %edx
10674a: 50 push %eax
10674b: 57 push %edi
10674c: 56 push %esi
10674d: 89 45 c0 mov %eax,-0x40(%ebp)
106750: e8 53 a4 01 00 call 120ba8 <__divdi3>
106755: 83 c4 10 add $0x10,%esp
106758: 89 45 d0 mov %eax,-0x30(%ebp)
ssize_t block_offset = (ssize_t) (offset % block_size);
10675b: 8b 4d c0 mov -0x40(%ebp),%ecx
10675e: 53 push %ebx
10675f: 51 push %ecx
106760: 57 push %edi
106761: 56 push %esi
106762: e8 95 a5 01 00 call 120cfc <__moddi3>
106767: 83 c4 10 add $0x10,%esp
10676a: 89 c6 mov %eax,%esi
char *dst = buffer;
10676c: 8b 55 0c mov 0xc(%ebp),%edx
10676f: 89 55 cc mov %edx,-0x34(%ebp)
)
{
int rv;
rtems_blkdev_imfs_context *ctx = IMFS_generic_get_context_by_iop(iop);
rtems_disk_device *dd = &ctx->dd;
ssize_t remaining = (ssize_t) count;
106772: 8b 5d 10 mov 0x10(%ebp),%ebx
ssize_t block_size = (ssize_t) rtems_disk_get_block_size(dd);
rtems_blkdev_bnum block = (rtems_blkdev_bnum) (offset / block_size);
ssize_t block_offset = (ssize_t) (offset % block_size);
char *dst = buffer;
while (remaining > 0) {
106775: eb 4f jmp 1067c6 <rtems_blkdev_imfs_read+0xa1>
rtems_bdbuf_buffer *bd;
rtems_status_code sc = rtems_bdbuf_read(dd, block, &bd);
106777: 51 push %ecx
106778: 8d 4d e4 lea -0x1c(%ebp),%ecx
10677b: 51 push %ecx
10677c: ff 75 d0 pushl -0x30(%ebp)
10677f: ff 75 c8 pushl -0x38(%ebp)
106782: e8 da 9d 00 00 call 110561 <rtems_bdbuf_read>
if (sc == RTEMS_SUCCESSFUL) {
106787: 83 c4 10 add $0x10,%esp
10678a: 85 c0 test %eax,%eax
10678c: 75 52 jne 1067e0 <rtems_blkdev_imfs_read+0xbb><== NEVER TAKEN
10678e: 8b 45 c4 mov -0x3c(%ebp),%eax
106791: 29 f0 sub %esi,%eax
106793: 89 45 d4 mov %eax,-0x2c(%ebp)
106796: 39 d8 cmp %ebx,%eax
106798: 7e 03 jle 10679d <rtems_blkdev_imfs_read+0x78>
10679a: 89 5d d4 mov %ebx,-0x2c(%ebp)
if (copy > remaining) {
copy = remaining;
}
memcpy(dst, (char *) bd->buffer + block_offset, (size_t) copy);
10679d: 8b 55 e4 mov -0x1c(%ebp),%edx
1067a0: 03 72 1c add 0x1c(%edx),%esi
1067a3: 8b 7d cc mov -0x34(%ebp),%edi
1067a6: 8b 4d d4 mov -0x2c(%ebp),%ecx
1067a9: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
sc = rtems_bdbuf_release(bd);
1067ab: 83 ec 0c sub $0xc,%esp
1067ae: 52 push %edx
1067af: e8 0b 9f 00 00 call 1106bf <rtems_bdbuf_release>
if (sc == RTEMS_SUCCESSFUL) {
1067b4: 83 c4 10 add $0x10,%esp
1067b7: 85 c0 test %eax,%eax
1067b9: 75 25 jne 1067e0 <rtems_blkdev_imfs_read+0xbb><== NEVER TAKEN
block_offset = 0;
remaining -= copy;
1067bb: 2b 5d d4 sub -0x2c(%ebp),%ebx
dst += copy;
1067be: 89 7d cc mov %edi,-0x34(%ebp)
++block;
1067c1: ff 45 d0 incl -0x30(%ebp)
memcpy(dst, (char *) bd->buffer + block_offset, (size_t) copy);
sc = rtems_bdbuf_release(bd);
if (sc == RTEMS_SUCCESSFUL) {
block_offset = 0;
1067c4: 31 f6 xor %esi,%esi
ssize_t block_size = (ssize_t) rtems_disk_get_block_size(dd);
rtems_blkdev_bnum block = (rtems_blkdev_bnum) (offset / block_size);
ssize_t block_offset = (ssize_t) (offset % block_size);
char *dst = buffer;
while (remaining > 0) {
1067c6: 83 fb 00 cmp $0x0,%ebx
1067c9: 7f ac jg 106777 <rtems_blkdev_imfs_read+0x52>
} else {
remaining = -1;
}
}
if (remaining >= 0) {
1067cb: 75 13 jne 1067e0 <rtems_blkdev_imfs_read+0xbb><== NEVER TAKEN
iop->offset += count;
1067cd: 8b 45 10 mov 0x10(%ebp),%eax
1067d0: 31 d2 xor %edx,%edx
1067d2: 8b 4d 08 mov 0x8(%ebp),%ecx
1067d5: 01 41 04 add %eax,0x4(%ecx)
1067d8: 11 51 08 adc %edx,0x8(%ecx)
rv = (ssize_t) count;
1067db: 8b 45 10 mov 0x10(%ebp),%eax
1067de: eb 0e jmp 1067ee <rtems_blkdev_imfs_read+0xc9>
} else {
errno = EIO;
1067e0: e8 3f e0 00 00 call 114824 <__errno> <== NOT EXECUTED
1067e5: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
rv = -1;
1067eb: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
}
return rv;
}
1067ee: 8d 65 f4 lea -0xc(%ebp),%esp
1067f1: 5b pop %ebx
1067f2: 5e pop %esi
1067f3: 5f pop %edi
1067f4: 5d pop %ebp
1067f5: c3 ret
0010663c <rtems_blkdev_imfs_write>:
static ssize_t rtems_blkdev_imfs_write(
rtems_libio_t *iop,
const void *buffer,
size_t count
)
{
10663c: 55 push %ebp
10663d: 89 e5 mov %esp,%ebp
10663f: 57 push %edi
106640: 56 push %esi
106641: 53 push %ebx
106642: 83 ec 2c sub $0x2c,%esp
} else {
sc = RTEMS_INVALID_ID;
}
return sc;
}
106645: 8b 55 08 mov 0x8(%ebp),%edx
106648: 8b 42 18 mov 0x18(%edx),%eax
10664b: 8b 40 50 mov 0x50(%eax),%eax
10664e: 89 45 d0 mov %eax,-0x30(%ebp)
{
int rv;
rtems_blkdev_imfs_context *ctx = IMFS_generic_get_context_by_iop(iop);
rtems_disk_device *dd = &ctx->dd;
ssize_t remaining = (ssize_t) count;
off_t offset = iop->offset;
106651: 8b 72 04 mov 0x4(%edx),%esi
106654: 8b 7a 08 mov 0x8(%edx),%edi
ssize_t block_size = (ssize_t) rtems_disk_get_block_size(dd);
106657: 8b 40 24 mov 0x24(%eax),%eax
10665a: 89 45 cc mov %eax,-0x34(%ebp)
rtems_blkdev_bnum block = (rtems_blkdev_bnum) (offset / block_size);
10665d: 99 cltd
10665e: 89 d3 mov %edx,%ebx
106660: 52 push %edx
106661: 50 push %eax
106662: 57 push %edi
106663: 56 push %esi
106664: 89 45 c8 mov %eax,-0x38(%ebp)
106667: e8 3c a5 01 00 call 120ba8 <__divdi3>
10666c: 83 c4 10 add $0x10,%esp
10666f: 89 45 d4 mov %eax,-0x2c(%ebp)
ssize_t block_offset = (ssize_t) (offset % block_size);
106672: 8b 4d c8 mov -0x38(%ebp),%ecx
106675: 53 push %ebx
106676: 51 push %ecx
106677: 57 push %edi
106678: 56 push %esi
106679: e8 7e a6 01 00 call 120cfc <__moddi3>
10667e: 83 c4 10 add $0x10,%esp
106681: 89 c7 mov %eax,%edi
const char *src = buffer;
106683: 8b 75 0c mov 0xc(%ebp),%esi
)
{
int rv;
rtems_blkdev_imfs_context *ctx = IMFS_generic_get_context_by_iop(iop);
rtems_disk_device *dd = &ctx->dd;
ssize_t remaining = (ssize_t) count;
106686: 8b 5d 10 mov 0x10(%ebp),%ebx
ssize_t block_size = (ssize_t) rtems_disk_get_block_size(dd);
rtems_blkdev_bnum block = (rtems_blkdev_bnum) (offset / block_size);
ssize_t block_offset = (ssize_t) (offset % block_size);
const char *src = buffer;
while (remaining > 0) {
106689: eb 6a jmp 1066f5 <rtems_blkdev_imfs_write+0xb9>
rtems_status_code sc;
rtems_bdbuf_buffer *bd;
if (block_offset == 0 && remaining >= block_size) {
10668b: 3b 5d cc cmp -0x34(%ebp),%ebx
10668e: 7c 16 jl 1066a6 <rtems_blkdev_imfs_write+0x6a>
106690: 85 ff test %edi,%edi
106692: 75 12 jne 1066a6 <rtems_blkdev_imfs_write+0x6a>
sc = rtems_bdbuf_get(dd, block, &bd);
106694: 52 push %edx
106695: 8d 55 e4 lea -0x1c(%ebp),%edx
106698: 52 push %edx
106699: ff 75 d4 pushl -0x2c(%ebp)
10669c: ff 75 d0 pushl -0x30(%ebp)
10669f: e8 21 9e 00 00 call 1104c5 <rtems_bdbuf_get>
1066a4: eb 10 jmp 1066b6 <rtems_blkdev_imfs_write+0x7a>
} else {
sc = rtems_bdbuf_read(dd, block, &bd);
1066a6: 50 push %eax
1066a7: 8d 4d e4 lea -0x1c(%ebp),%ecx
1066aa: 51 push %ecx
1066ab: ff 75 d4 pushl -0x2c(%ebp)
1066ae: ff 75 d0 pushl -0x30(%ebp)
1066b1: e8 ab 9e 00 00 call 110561 <rtems_bdbuf_read>
1066b6: 83 c4 10 add $0x10,%esp
}
if (sc == RTEMS_SUCCESSFUL) {
1066b9: 85 c0 test %eax,%eax
1066bb: 75 52 jne 10670f <rtems_blkdev_imfs_write+0xd3><== NEVER TAKEN
1066bd: 8b 55 cc mov -0x34(%ebp),%edx
1066c0: 29 fa sub %edi,%edx
1066c2: 39 da cmp %ebx,%edx
1066c4: 7e 02 jle 1066c8 <rtems_blkdev_imfs_write+0x8c>
1066c6: 89 da mov %ebx,%edx
if (copy > remaining) {
copy = remaining;
}
memcpy((char *) bd->buffer + block_offset, src, (size_t) copy);
1066c8: 8b 45 e4 mov -0x1c(%ebp),%eax
1066cb: 8b 40 1c mov 0x1c(%eax),%eax
1066ce: 01 f8 add %edi,%eax
1066d0: 89 c7 mov %eax,%edi
1066d2: 89 d1 mov %edx,%ecx
1066d4: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
sc = rtems_bdbuf_release_modified(bd);
1066d6: 83 ec 0c sub $0xc,%esp
1066d9: ff 75 e4 pushl -0x1c(%ebp)
1066dc: 89 55 c8 mov %edx,-0x38(%ebp)
1066df: e8 6c a0 00 00 call 110750 <rtems_bdbuf_release_modified>
if (sc == RTEMS_SUCCESSFUL) {
1066e4: 83 c4 10 add $0x10,%esp
1066e7: 85 c0 test %eax,%eax
1066e9: 8b 55 c8 mov -0x38(%ebp),%edx
1066ec: 75 21 jne 10670f <rtems_blkdev_imfs_write+0xd3><== NEVER TAKEN
block_offset = 0;
remaining -= copy;
1066ee: 29 d3 sub %edx,%ebx
src += copy;
++block;
1066f0: ff 45 d4 incl -0x2c(%ebp)
memcpy((char *) bd->buffer + block_offset, src, (size_t) copy);
sc = rtems_bdbuf_release_modified(bd);
if (sc == RTEMS_SUCCESSFUL) {
block_offset = 0;
1066f3: 31 ff xor %edi,%edi
ssize_t block_size = (ssize_t) rtems_disk_get_block_size(dd);
rtems_blkdev_bnum block = (rtems_blkdev_bnum) (offset / block_size);
ssize_t block_offset = (ssize_t) (offset % block_size);
const char *src = buffer;
while (remaining > 0) {
1066f5: 83 fb 00 cmp $0x0,%ebx
1066f8: 7f 91 jg 10668b <rtems_blkdev_imfs_write+0x4f>
} else {
remaining = -1;
}
}
if (remaining >= 0) {
1066fa: 75 13 jne 10670f <rtems_blkdev_imfs_write+0xd3><== NEVER TAKEN
iop->offset += count;
1066fc: 8b 45 10 mov 0x10(%ebp),%eax
1066ff: 31 d2 xor %edx,%edx
106701: 8b 4d 08 mov 0x8(%ebp),%ecx
106704: 01 41 04 add %eax,0x4(%ecx)
106707: 11 51 08 adc %edx,0x8(%ecx)
rv = (ssize_t) count;
10670a: 8b 45 10 mov 0x10(%ebp),%eax
10670d: eb 0e jmp 10671d <rtems_blkdev_imfs_write+0xe1>
} else {
errno = EIO;
10670f: e8 10 e1 00 00 call 114824 <__errno> <== NOT EXECUTED
106714: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
rv = -1;
10671a: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
}
return rv;
}
10671d: 8d 65 f4 lea -0xc(%ebp),%esp
106720: 5b pop %ebx
106721: 5e pop %esi
106722: 5f pop %edi
106723: 5d pop %ebp
106724: c3 ret
00110188 <rtems_blkdev_ioctl>:
#include <rtems/blkdev.h>
#include <rtems/bdbuf.h>
int
rtems_blkdev_ioctl(rtems_disk_device *dd, uint32_t req, void *argp)
{
110188: 55 push %ebp
110189: 89 e5 mov %esp,%ebp
11018b: 83 ec 08 sub $0x8,%esp
11018e: 8b 45 08 mov 0x8(%ebp),%eax
110191: 8b 55 0c mov 0xc(%ebp),%edx
110194: 8b 4d 10 mov 0x10(%ebp),%ecx
rtems_status_code sc;
int rc = 0;
switch (req)
110197: 81 fa 03 42 04 40 cmp $0x40044203,%edx
11019d: 74 63 je 110202 <rtems_blkdev_ioctl+0x7a>
11019f: 77 36 ja 1101d7 <rtems_blkdev_ioctl+0x4f>
1101a1: 81 fa 0a 42 00 20 cmp $0x2000420a,%edx
1101a7: 0f 84 8c 00 00 00 je 110239 <rtems_blkdev_ioctl+0xb1>
1101ad: 77 0e ja 1101bd <rtems_blkdev_ioctl+0x35>
1101af: 81 fa 06 42 00 20 cmp $0x20004206,%edx
1101b5: 0f 85 a4 00 00 00 jne 11025f <rtems_blkdev_ioctl+0xd7>
1101bb: eb 5b jmp 110218 <rtems_blkdev_ioctl+0x90>
1101bd: 81 fa 0c 42 00 20 cmp $0x2000420c,%edx
1101c3: 0f 84 86 00 00 00 je 11024f <rtems_blkdev_ioctl+0xc7><== NEVER TAKEN
1101c9: 81 fa 02 42 04 40 cmp $0x40044202,%edx
1101cf: 0f 85 8a 00 00 00 jne 11025f <rtems_blkdev_ioctl+0xd7><== NEVER TAKEN
1101d5: eb 26 jmp 1101fd <rtems_blkdev_ioctl+0x75>
1101d7: 81 fa 09 42 04 40 cmp $0x40044209,%edx
1101dd: 74 56 je 110235 <rtems_blkdev_ioctl+0xad>
1101df: 77 0a ja 1101eb <rtems_blkdev_ioctl+0x63>
1101e1: 81 fa 05 42 04 40 cmp $0x40044205,%edx
1101e7: 75 76 jne 11025f <rtems_blkdev_ioctl+0xd7><== NEVER TAKEN
1101e9: eb 28 jmp 110213 <rtems_blkdev_ioctl+0x8b>
1101eb: 81 fa 0b 42 04 40 cmp $0x4004420b,%edx
1101f1: 74 51 je 110244 <rtems_blkdev_ioctl+0xbc><== NEVER TAKEN
1101f3: 81 fa 04 42 04 80 cmp $0x80044204,%edx
1101f9: 75 64 jne 11025f <rtems_blkdev_ioctl+0xd7><== NEVER TAKEN
1101fb: eb 0a jmp 110207 <rtems_blkdev_ioctl+0x7f>
{
case RTEMS_BLKIO_GETMEDIABLKSIZE:
*(uint32_t *) argp = dd->media_block_size;
1101fd: 8b 40 20 mov 0x20(%eax),%eax
110200: eb 33 jmp 110235 <rtems_blkdev_ioctl+0xad>
break;
case RTEMS_BLKIO_GETBLKSIZE:
*(uint32_t *) argp = dd->block_size;
110202: 8b 40 24 mov 0x24(%eax),%eax
110205: eb 2e jmp 110235 <rtems_blkdev_ioctl+0xad>
break;
case RTEMS_BLKIO_SETBLKSIZE:
sc = rtems_bdbuf_set_block_size(dd, *(uint32_t *) argp);
110207: 52 push %edx
110208: 52 push %edx
110209: ff 31 pushl (%ecx)
11020b: 50 push %eax
11020c: e8 67 fe ff ff call 110078 <rtems_bdbuf_set_block_size>
110211: eb 0e jmp 110221 <rtems_blkdev_ioctl+0x99>
rc = -1;
}
break;
case RTEMS_BLKIO_GETSIZE:
*(rtems_blkdev_bnum *) argp = dd->size;
110213: 8b 40 1c mov 0x1c(%eax),%eax
110216: eb 1d jmp 110235 <rtems_blkdev_ioctl+0xad>
break;
case RTEMS_BLKIO_SYNCDEV:
sc = rtems_bdbuf_syncdev(dd);
110218: 83 ec 0c sub $0xc,%esp
11021b: 50 push %eax
11021c: e8 a6 fc ff ff call 10fec7 <rtems_bdbuf_syncdev>
if (sc != RTEMS_SUCCESSFUL) {
110221: 83 c4 10 add $0x10,%esp
110224: 85 c0 test %eax,%eax
110226: 74 33 je 11025b <rtems_blkdev_ioctl+0xd3><== ALWAYS TAKEN
errno = EIO;
110228: e8 ef 40 00 00 call 11431c <__errno> <== NOT EXECUTED
11022d: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
110233: eb 35 jmp 11026a <rtems_blkdev_ioctl+0xe2><== NOT EXECUTED
rc = -1;
}
break;
case RTEMS_BLKIO_GETDISKDEV:
*(rtems_disk_device **) argp = dd;
110235: 89 01 mov %eax,(%ecx)
110237: eb 22 jmp 11025b <rtems_blkdev_ioctl+0xd3>
break;
case RTEMS_BLKIO_PURGEDEV:
rtems_bdbuf_purge_dev(dd);
110239: 83 ec 0c sub $0xc,%esp
11023c: 50 push %eax
11023d: e8 df fc ff ff call 10ff21 <rtems_bdbuf_purge_dev>
110242: eb 14 jmp 110258 <rtems_blkdev_ioctl+0xd0>
break;
case RTEMS_BLKIO_GETDEVSTATS:
rtems_bdbuf_get_device_stats(dd, (rtems_blkdev_stats *) argp);
110244: 52 push %edx <== NOT EXECUTED
110245: 52 push %edx <== NOT EXECUTED
110246: 51 push %ecx <== NOT EXECUTED
110247: 50 push %eax <== NOT EXECUTED
110248: e8 eb fe ff ff call 110138 <rtems_bdbuf_get_device_stats><== NOT EXECUTED
11024d: eb 09 jmp 110258 <rtems_blkdev_ioctl+0xd0><== NOT EXECUTED
break;
case RTEMS_BLKIO_RESETDEVSTATS:
rtems_bdbuf_reset_device_stats(dd);
11024f: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
110252: 50 push %eax <== NOT EXECUTED
110253: e8 0c ff ff ff call 110164 <rtems_bdbuf_reset_device_stats><== NOT EXECUTED
break;
110258: 83 c4 10 add $0x10,%esp
int
rtems_blkdev_ioctl(rtems_disk_device *dd, uint32_t req, void *argp)
{
rtems_status_code sc;
int rc = 0;
11025b: 31 c0 xor %eax,%eax
rtems_bdbuf_get_device_stats(dd, (rtems_blkdev_stats *) argp);
break;
case RTEMS_BLKIO_RESETDEVSTATS:
rtems_bdbuf_reset_device_stats(dd);
break;
11025d: eb 0e jmp 11026d <rtems_blkdev_ioctl+0xe5>
default:
errno = EINVAL;
11025f: e8 b8 40 00 00 call 11431c <__errno>
110264: c7 00 16 00 00 00 movl $0x16,(%eax)
rc = -1;
11026a: 83 c8 ff or $0xffffffff,%eax
break;
}
return rc;
}
11026d: c9 leave
11026e: c3 ret
00120760 <rtems_blkstats>:
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
void rtems_blkstats(FILE *output, const char *device, bool reset)
{
120760: 55 push %ebp <== NOT EXECUTED
120761: 89 e5 mov %esp,%ebp <== NOT EXECUTED
120763: 57 push %edi <== NOT EXECUTED
120764: 56 push %esi <== NOT EXECUTED
120765: 53 push %ebx <== NOT EXECUTED
120766: 81 ec 94 00 00 00 sub $0x94,%esp <== NOT EXECUTED
12076c: 8b 5d 08 mov 0x8(%ebp),%ebx <== NOT EXECUTED
12076f: 8a 45 10 mov 0x10(%ebp),%al <== NOT EXECUTED
120772: 88 85 77 ff ff ff mov %al,-0x89(%ebp) <== NOT EXECUTED
int fd = open(device, O_RDONLY);
120778: 6a 00 push $0x0 <== NOT EXECUTED
12077a: ff 75 0c pushl 0xc(%ebp) <== NOT EXECUTED
12077d: e8 0a 69 fe ff call 10708c <open> <== NOT EXECUTED
120782: 89 c6 mov %eax,%esi <== NOT EXECUTED
if (fd >= 0) {
120784: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
120787: 85 c0 test %eax,%eax <== NOT EXECUTED
120789: 0f 88 fb 00 00 00 js 12088a <rtems_blkstats+0x12a> <== NOT EXECUTED
struct stat st;
int rv;
rv = fstat(fd, &st);
12078f: 50 push %eax <== NOT EXECUTED
120790: 50 push %eax <== NOT EXECUTED
120791: 8d 45 a0 lea -0x60(%ebp),%eax <== NOT EXECUTED
120794: 50 push %eax <== NOT EXECUTED
120795: 56 push %esi <== NOT EXECUTED
120796: e8 35 16 00 00 call 121dd0 <fstat> <== NOT EXECUTED
if (rv == 0) {
12079b: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
12079e: 85 c0 test %eax,%eax <== NOT EXECUTED
1207a0: 0f 85 99 00 00 00 jne 12083f <rtems_blkstats+0xdf> <== NOT EXECUTED
if (S_ISBLK(st.st_mode)) {
1207a6: 8b 45 ac mov -0x54(%ebp),%eax <== NOT EXECUTED
1207a9: 25 00 f0 00 00 and $0xf000,%eax <== NOT EXECUTED
1207ae: 3d 00 60 00 00 cmp $0x6000,%eax <== NOT EXECUTED
1207b3: 75 7b jne 120830 <rtems_blkstats+0xd0> <== NOT EXECUTED
if (reset) {
1207b5: 80 bd 77 ff ff ff 00 cmpb $0x0,-0x89(%ebp) <== NOT EXECUTED
1207bc: 74 32 je 1207f0 <rtems_blkstats+0x90> <== NOT EXECUTED
return ioctl(fd, RTEMS_BLKIO_GETDEVSTATS, stats);
}
static inline int rtems_disk_fd_reset_device_stats(int fd)
{
return ioctl(fd, RTEMS_BLKIO_RESETDEVSTATS);
1207be: 57 push %edi <== NOT EXECUTED
1207bf: 57 push %edi <== NOT EXECUTED
1207c0: 68 0c 42 00 20 push $0x2000420c <== NOT EXECUTED
1207c5: 56 push %esi <== NOT EXECUTED
1207c6: e8 f1 ed fe ff call 10f5bc <ioctl> <== NOT EXECUTED
rv = rtems_disk_fd_reset_device_stats(fd);
if (rv != 0) {
1207cb: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
1207ce: 85 c0 test %eax,%eax <== NOT EXECUTED
1207d0: 0f 84 8a 00 00 00 je 120860 <rtems_blkstats+0x100> <== NOT EXECUTED
fprintf(output, "error: reset stats: %s\n", strerror(errno));
1207d6: e8 ad 06 01 00 call 130e88 <__errno> <== NOT EXECUTED
1207db: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1207de: ff 30 pushl (%eax) <== NOT EXECUTED
1207e0: e8 af 67 01 00 call 136f94 <strerror> <== NOT EXECUTED
1207e5: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
1207e8: 50 push %eax <== NOT EXECUTED
1207e9: 68 a4 fc 14 00 push $0x14fca4 <== NOT EXECUTED
1207ee: eb 67 jmp 120857 <rtems_blkstats+0xf7> <== NOT EXECUTED
static inline int rtems_disk_fd_get_device_stats(
int fd,
rtems_blkdev_stats *stats
)
{
return ioctl(fd, RTEMS_BLKIO_GETDEVSTATS, stats);
1207f0: 51 push %ecx <== NOT EXECUTED
}
} else {
rtems_blkdev_stats stats;
rv = rtems_disk_fd_get_device_stats(fd, &stats);
1207f1: 8d 7d 80 lea -0x80(%ebp),%edi <== NOT EXECUTED
1207f4: 57 push %edi <== NOT EXECUTED
1207f5: 68 0b 42 04 40 push $0x4004420b <== NOT EXECUTED
1207fa: 56 push %esi <== NOT EXECUTED
1207fb: e8 bc ed fe ff call 10f5bc <ioctl> <== NOT EXECUTED
if (rv == 0) {
120800: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
120803: 85 c0 test %eax,%eax <== NOT EXECUTED
120805: 75 0f jne 120816 <rtems_blkstats+0xb6> <== NOT EXECUTED
rtems_blkdev_print_stats(
120807: 52 push %edx <== NOT EXECUTED
120808: 53 push %ebx <== NOT EXECUTED
120809: 68 6c 18 13 00 push $0x13186c <== NOT EXECUTED
12080e: 57 push %edi <== NOT EXECUTED
12080f: e8 a0 00 00 00 call 1208b4 <rtems_blkdev_print_stats><== NOT EXECUTED
120814: eb 47 jmp 12085d <rtems_blkstats+0xfd> <== NOT EXECUTED
&stats,
(rtems_printk_plugin_t) fprintf,
output
);
} else {
fprintf(output, "error: get stats: %s\n", strerror(errno));
120816: e8 6d 06 01 00 call 130e88 <__errno> <== NOT EXECUTED
12081b: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
12081e: ff 30 pushl (%eax) <== NOT EXECUTED
120820: e8 6f 67 01 00 call 136f94 <strerror> <== NOT EXECUTED
120825: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
120828: 50 push %eax <== NOT EXECUTED
120829: 68 bc fc 14 00 push $0x14fcbc <== NOT EXECUTED
12082e: eb 27 jmp 120857 <rtems_blkstats+0xf7> <== NOT EXECUTED
}
}
} else {
fprintf(output, "error: not a block device\n");
120830: 50 push %eax <== NOT EXECUTED
120831: 50 push %eax <== NOT EXECUTED
120832: 53 push %ebx <== NOT EXECUTED
120833: 68 d2 fc 14 00 push $0x14fcd2 <== NOT EXECUTED
120838: e8 4f 11 01 00 call 13198c <fputs> <== NOT EXECUTED
12083d: eb 1e jmp 12085d <rtems_blkstats+0xfd> <== NOT EXECUTED
}
} else {
fprintf(output, "error: get file stats: %s\n", strerror(errno));
12083f: e8 44 06 01 00 call 130e88 <__errno> <== NOT EXECUTED
120844: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
120847: ff 30 pushl (%eax) <== NOT EXECUTED
120849: e8 46 67 01 00 call 136f94 <strerror> <== NOT EXECUTED
12084e: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
120851: 50 push %eax <== NOT EXECUTED
120852: 68 ed fc 14 00 push $0x14fced <== NOT EXECUTED
120857: 53 push %ebx <== NOT EXECUTED
120858: e8 0f 10 01 00 call 13186c <fprintf> <== NOT EXECUTED
12085d: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
rv = close(fd);
120860: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
120863: 56 push %esi <== NOT EXECUTED
120864: e8 f7 13 00 00 call 121c60 <close> <== NOT EXECUTED
if (rv != 0) {
120869: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
12086c: 85 c0 test %eax,%eax <== NOT EXECUTED
12086e: 74 3b je 1208ab <rtems_blkstats+0x14b> <== NOT EXECUTED
fprintf(output, "error: close device: %s\n", strerror(errno));
120870: e8 13 06 01 00 call 130e88 <__errno> <== NOT EXECUTED
120875: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
120878: ff 30 pushl (%eax) <== NOT EXECUTED
12087a: e8 15 67 01 00 call 136f94 <strerror> <== NOT EXECUTED
12087f: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
120882: 50 push %eax <== NOT EXECUTED
120883: 68 08 fd 14 00 push $0x14fd08 <== NOT EXECUTED
120888: eb 18 jmp 1208a2 <rtems_blkstats+0x142> <== NOT EXECUTED
}
} else {
fprintf(output, "error: open device: %s\n", strerror(errno));
12088a: e8 f9 05 01 00 call 130e88 <__errno> <== NOT EXECUTED
12088f: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
120892: ff 30 pushl (%eax) <== NOT EXECUTED
120894: e8 fb 66 01 00 call 136f94 <strerror> <== NOT EXECUTED
120899: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
12089c: 50 push %eax <== NOT EXECUTED
12089d: 68 21 fd 14 00 push $0x14fd21 <== NOT EXECUTED
1208a2: 53 push %ebx <== NOT EXECUTED
1208a3: e8 c4 0f 01 00 call 13186c <fprintf> <== NOT EXECUTED
1208a8: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
}
1208ab: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
1208ae: 5b pop %ebx <== NOT EXECUTED
1208af: 5e pop %esi <== NOT EXECUTED
1208b0: 5f pop %edi <== NOT EXECUTED
1208b1: 5d pop %ebp <== NOT EXECUTED
1208b2: c3 ret <== NOT EXECUTED
0010a718 <rtems_chain_get_with_wait>:
rtems_chain_control *chain,
rtems_event_set events,
rtems_interval timeout,
rtems_chain_node **node_ptr
)
{
10a718: 55 push %ebp
10a719: 89 e5 mov %esp,%ebp
10a71b: 56 push %esi
10a71c: 53 push %ebx
10a71d: 83 ec 10 sub $0x10,%esp
while (
sc == RTEMS_SUCCESSFUL
&& (node = rtems_chain_get( chain )) == NULL
) {
rtems_event_set out;
sc = rtems_event_receive(
10a720: 8d 5d f4 lea -0xc(%ebp),%ebx
10a723: eb 15 jmp 10a73a <rtems_chain_get_with_wait+0x22>
10a725: 53 push %ebx
10a726: ff 75 10 pushl 0x10(%ebp)
10a729: 6a 00 push $0x0
10a72b: ff 75 0c pushl 0xc(%ebp)
10a72e: e8 99 f5 ff ff call 109ccc <rtems_event_receive>
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_chain_node *node = NULL;
while (
10a733: 83 c4 10 add $0x10,%esp
10a736: 85 c0 test %eax,%eax
10a738: 75 16 jne 10a750 <rtems_chain_get_with_wait+0x38><== ALWAYS TAKEN
*/
RTEMS_INLINE_ROUTINE rtems_chain_node *rtems_chain_get(
rtems_chain_control *the_chain
)
{
return _Chain_Get( the_chain );
10a73a: 83 ec 0c sub $0xc,%esp
10a73d: ff 75 08 pushl 0x8(%ebp)
10a740: e8 cf 04 00 00 call 10ac14 <_Chain_Get>
10a745: 89 c6 mov %eax,%esi
sc == RTEMS_SUCCESSFUL
&& (node = rtems_chain_get( chain )) == NULL
10a747: 83 c4 10 add $0x10,%esp
10a74a: 85 c0 test %eax,%eax
10a74c: 74 d7 je 10a725 <rtems_chain_get_with_wait+0xd>
10a74e: 31 c0 xor %eax,%eax
timeout,
&out
);
}
*node_ptr = node;
10a750: 8b 55 14 mov 0x14(%ebp),%edx
10a753: 89 32 mov %esi,(%edx)
return sc;
}
10a755: 8d 65 f8 lea -0x8(%ebp),%esp
10a758: 5b pop %ebx
10a759: 5e pop %esi
10a75a: 5d pop %ebp
10a75b: c3 ret
0010694c <rtems_cpu_usage_report_with_plugin>:
*/
void rtems_cpu_usage_report_with_plugin(
void *context,
rtems_printk_plugin_t print
)
{
10694c: 55 push %ebp
10694d: 89 e5 mov %esp,%ebp
10694f: 57 push %edi
106950: 56 push %esi
106951: 53 push %ebx
106952: 83 ec 4c sub $0x4c,%esp
uint32_t seconds, nanoseconds;
#else
uint32_t total_units = 0;
#endif
if ( !print )
106955: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
106959: 0f 84 ca 01 00 00 je 106b29 <rtems_cpu_usage_report_with_plugin+0x1dd><== NEVER TAKEN
static inline void _Timestamp64_implementation_Set_to_zero(
Timestamp64_Control *_time
)
{
*_time = 0;
10695f: c7 45 c8 00 00 00 00 movl $0x0,-0x38(%ebp)
106966: c7 45 cc 00 00 00 00 movl $0x0,-0x34(%ebp)
* the number of "ticks" we gave credit for to give the user a rough
* guideline as to what each number means proportionally.
*/
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
_Timestamp_Set_to_zero( &total );
uptime_at_last_reset = CPU_usage_Uptime_at_last_reset;
10696d: a1 e8 13 13 00 mov 0x1313e8,%eax
106972: 8b 15 ec 13 13 00 mov 0x1313ec,%edx
106978: 89 45 a8 mov %eax,-0x58(%ebp)
10697b: 89 55 ac mov %edx,-0x54(%ebp)
}
}
}
#endif
(*print)(
10697e: 53 push %ebx
10697f: 53 push %ebx
106980: 68 35 0e 12 00 push $0x120e35
106985: ff 75 08 pushl 0x8(%ebp)
106988: 8b 55 0c mov 0xc(%ebp),%edx
10698b: ff d2 call *%edx
10698d: 83 c4 10 add $0x10,%esp
" ID | NAME | TICKS | PERCENT\n"
#endif
"------------+----------------------------------------+---------------+---------\n"
);
for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; api_index++ ) {
106990: c7 45 b0 01 00 00 00 movl $0x1,-0x50(%ebp)
#if !defined(RTEMS_POSIX_API) || defined(RTEMS_DEBUG)
if ( !_Objects_Information_table[ api_index ] )
continue;
#endif
information = _Objects_Information_table[ api_index ][ 1 ];
106997: 8b 55 b0 mov -0x50(%ebp),%edx
10699a: 8b 04 95 3c 0e 13 00 mov 0x130e3c(,%edx,4),%eax
1069a1: 8b 58 04 mov 0x4(%eax),%ebx
if ( information ) {
1069a4: c7 45 b4 01 00 00 00 movl $0x1,-0x4c(%ebp)
1069ab: 85 db test %ebx,%ebx
1069ad: 0f 85 0b 01 00 00 jne 106abe <rtems_cpu_usage_report_with_plugin+0x172><== ALWAYS TAKEN
" ID | NAME | TICKS | PERCENT\n"
#endif
"------------+----------------------------------------+---------------+---------\n"
);
for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; api_index++ ) {
1069b3: ff 45 b0 incl -0x50(%ebp)
1069b6: 83 7d b0 04 cmpl $0x4,-0x50(%ebp)
1069ba: 75 db jne 106997 <rtems_cpu_usage_report_with_plugin+0x4b>
1069bc: e9 0f 01 00 00 jmp 106ad0 <rtems_cpu_usage_report_with_plugin+0x184>
#endif
information = _Objects_Information_table[ api_index ][ 1 ];
if ( information ) {
for ( i=1 ; i <= information->maximum ; i++ ) {
the_thread = (Thread_Control *)information->local_table[ i ];
1069c1: 8b 43 1c mov 0x1c(%ebx),%eax
1069c4: 8b 55 b4 mov -0x4c(%ebp),%edx
1069c7: 8b 34 90 mov (%eax,%edx,4),%esi
if ( !the_thread )
1069ca: 85 f6 test %esi,%esi
1069cc: 0f 84 e9 00 00 00 je 106abb <rtems_cpu_usage_report_with_plugin+0x16f><== NEVER TAKEN
continue;
rtems_object_get_name( the_thread->Object.id, sizeof(name), name );
1069d2: 51 push %ecx
1069d3: 8d 45 db lea -0x25(%ebp),%eax
1069d6: 50 push %eax
1069d7: 6a 0d push $0xd
1069d9: ff 76 08 pushl 0x8(%esi)
1069dc: e8 47 40 00 00 call 10aa28 <rtems_object_get_name>
(*print)(
1069e1: 8d 55 db lea -0x25(%ebp),%edx
1069e4: 52 push %edx
1069e5: ff 76 08 pushl 0x8(%esi)
1069e8: 68 a7 0f 12 00 push $0x120fa7
1069ed: ff 75 08 pushl 0x8(%ebp)
1069f0: 8b 55 0c mov 0xc(%ebp),%edx
1069f3: ff d2 call *%edx
/*
* If this is the currently executing thread, account for time
* since the last context switch.
*/
ran = the_thread->cpu_time_used;
1069f5: 8b 86 80 00 00 00 mov 0x80(%esi),%eax
1069fb: 8b 96 84 00 00 00 mov 0x84(%esi),%edx
106a01: 89 45 d0 mov %eax,-0x30(%ebp)
106a04: 89 55 d4 mov %edx,-0x2c(%ebp)
Thread_Control *the_thread,
Timestamp_Control *time_of_context_switch
)
{
#ifndef RTEMS_SMP
if ( _Thread_Executing->Object.id == the_thread->Object.id ) {
106a07: 83 c4 20 add $0x20,%esp
106a0a: a1 ac 13 13 00 mov 0x1313ac,%eax
106a0f: 8b 56 08 mov 0x8(%esi),%edx
106a12: 39 50 08 cmp %edx,0x8(%eax)
106a15: 0f 85 fd 00 00 00 jne 106b18 <rtems_cpu_usage_report_with_plugin+0x1cc>
*time_of_context_switch = _Thread_Time_of_last_context_switch;
106a1b: 8b 35 bc 13 13 00 mov 0x1313bc,%esi
106a21: 8b 3d c0 13 13 00 mov 0x1313c0,%edi
* since the last context switch.
*/
ran = the_thread->cpu_time_used;
if ( is_executing_on_a_core( the_thread, &last ) ) {
Timestamp_Control used;
_TOD_Get_uptime( &uptime );
106a27: 83 ec 0c sub $0xc,%esp
106a2a: 8d 45 c0 lea -0x40(%ebp),%eax
106a2d: 50 push %eax
106a2e: e8 bd 50 00 00 call 10baf0 <_TOD_Get_uptime>
const Timestamp64_Control *_start,
const Timestamp64_Control *_end,
Timestamp64_Control *_result
)
{
*_result = *_end - *_start;
106a33: 8b 45 c0 mov -0x40(%ebp),%eax
106a36: 8b 55 c4 mov -0x3c(%ebp),%edx
106a39: 29 f0 sub %esi,%eax
106a3b: 19 fa sbb %edi,%edx
static inline void _Timestamp64_implementation_Add_to(
Timestamp64_Control *_time,
const Timestamp64_Control *_add
)
{
*_time += *_add;
106a3d: 01 45 d0 add %eax,-0x30(%ebp)
106a40: 11 55 d4 adc %edx,-0x2c(%ebp)
106a43: 83 c4 10 add $0x10,%esp
const Timestamp64_Control *_start,
const Timestamp64_Control *_end,
Timestamp64_Control *_result
)
{
*_result = *_end - *_start;
106a46: 8b 45 c0 mov -0x40(%ebp),%eax
106a49: 8b 55 c4 mov -0x3c(%ebp),%edx
106a4c: 2b 45 a8 sub -0x58(%ebp),%eax
106a4f: 1b 55 ac sbb -0x54(%ebp),%edx
106a52: 89 45 c8 mov %eax,-0x38(%ebp)
106a55: 89 55 cc mov %edx,-0x34(%ebp)
_Timestamp_Add_to( &ran, &used );
} else {
_TOD_Get_uptime( &uptime );
}
_Timestamp_Subtract( &uptime_at_last_reset, &uptime, &total );
_Timestamp_Divide( &ran, &total, &ival, &fval );
106a58: 8d 45 bc lea -0x44(%ebp),%eax
106a5b: 50 push %eax
106a5c: 8d 45 b8 lea -0x48(%ebp),%eax
106a5f: 50 push %eax
106a60: 8d 45 c8 lea -0x38(%ebp),%eax
106a63: 50 push %eax
106a64: 8d 45 d0 lea -0x30(%ebp),%eax
106a67: 50 push %eax
106a68: e8 07 6f 00 00 call 10d974 <_Timestamp64_Divide>
/*
* Print the information
*/
seconds = _Timestamp_Get_seconds( &ran );
106a6d: 8b 75 d0 mov -0x30(%ebp),%esi
106a70: 8b 7d d4 mov -0x2c(%ebp),%edi
nanoseconds = _Timestamp_Get_nanoseconds( &ran ) /
TOD_NANOSECONDS_PER_MICROSECOND;
(*print)( context,
106a73: 58 pop %eax
106a74: 5a pop %edx
106a75: ff 75 bc pushl -0x44(%ebp)
106a78: ff 75 b8 pushl -0x48(%ebp)
static inline uint32_t _Timestamp64_implementation_Get_nanoseconds(
const Timestamp64_Control *_time
)
{
return (uint32_t) (*_time % 1000000000L);
106a7b: 6a 00 push $0x0
106a7d: 68 00 ca 9a 3b push $0x3b9aca00
106a82: 57 push %edi
106a83: 56 push %esi
106a84: e8 e3 80 01 00 call 11eb6c <__moddi3>
106a89: 83 c4 10 add $0x10,%esp
/*
* Print the information
*/
seconds = _Timestamp_Get_seconds( &ran );
nanoseconds = _Timestamp_Get_nanoseconds( &ran ) /
106a8c: b9 e8 03 00 00 mov $0x3e8,%ecx
106a91: 31 d2 xor %edx,%edx
106a93: f7 f1 div %ecx
TOD_NANOSECONDS_PER_MICROSECOND;
(*print)( context,
106a95: 50 push %eax
static inline uint32_t _Timestamp64_implementation_Get_seconds(
const Timestamp64_Control *_time
)
{
return (uint32_t) (*_time / 1000000000L);
106a96: 83 ec 0c sub $0xc,%esp
106a99: 6a 00 push $0x0
106a9b: 68 00 ca 9a 3b push $0x3b9aca00
106aa0: 57 push %edi
106aa1: 56 push %esi
106aa2: e8 71 7f 01 00 call 11ea18 <__divdi3>
106aa7: 83 c4 1c add $0x1c,%esp
106aaa: 50 push %eax
106aab: 68 ba 0f 12 00 push $0x120fba
106ab0: ff 75 08 pushl 0x8(%ebp)
106ab3: 8b 55 0c mov 0xc(%ebp),%edx
106ab6: ff d2 call *%edx
106ab8: 83 c4 20 add $0x20,%esp
continue;
#endif
information = _Objects_Information_table[ api_index ][ 1 ];
if ( information ) {
for ( i=1 ; i <= information->maximum ; i++ ) {
106abb: ff 45 b4 incl -0x4c(%ebp)
106abe: 0f b7 43 10 movzwl 0x10(%ebx),%eax
106ac2: 39 45 b4 cmp %eax,-0x4c(%ebp)
106ac5: 0f 86 f6 fe ff ff jbe 1069c1 <rtems_cpu_usage_report_with_plugin+0x75>
106acb: e9 e3 fe ff ff jmp 1069b3 <rtems_cpu_usage_report_with_plugin+0x67>
}
}
}
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
seconds = _Timestamp_Get_seconds( &total );
106ad0: 8b 75 c8 mov -0x38(%ebp),%esi
106ad3: 8b 7d cc mov -0x34(%ebp),%edi
static inline uint32_t _Timestamp64_implementation_Get_nanoseconds(
const Timestamp64_Control *_time
)
{
return (uint32_t) (*_time % 1000000000L);
106ad6: 6a 00 push $0x0
106ad8: 68 00 ca 9a 3b push $0x3b9aca00
106add: 57 push %edi
106ade: 56 push %esi
106adf: e8 88 80 01 00 call 11eb6c <__moddi3>
106ae4: 83 c4 10 add $0x10,%esp
nanoseconds = _Timestamp_Get_nanoseconds( &total ) /
106ae7: b9 e8 03 00 00 mov $0x3e8,%ecx
106aec: 31 d2 xor %edx,%edx
106aee: f7 f1 div %ecx
TOD_NANOSECONDS_PER_MICROSECOND;
(*print)(
106af0: 50 push %eax
static inline uint32_t _Timestamp64_implementation_Get_seconds(
const Timestamp64_Control *_time
)
{
return (uint32_t) (*_time / 1000000000L);
106af1: 83 ec 0c sub $0xc,%esp
106af4: 6a 00 push $0x0
106af6: 68 00 ca 9a 3b push $0x3b9aca00
106afb: 57 push %edi
106afc: 56 push %esi
106afd: e8 16 7f 01 00 call 11ea18 <__divdi3>
106b02: 83 c4 1c add $0x1c,%esp
106b05: 50 push %eax
106b06: 68 d2 0f 12 00 push $0x120fd2
106b0b: ff 75 08 pushl 0x8(%ebp)
106b0e: 8b 55 0c mov 0xc(%ebp),%edx
106b11: ff d2 call *%edx
106b13: 83 c4 10 add $0x10,%esp
106b16: eb 11 jmp 106b29 <rtems_cpu_usage_report_with_plugin+0x1dd>
Timestamp_Control used;
_TOD_Get_uptime( &uptime );
_Timestamp_Subtract( &last, &uptime, &used );
_Timestamp_Add_to( &ran, &used );
} else {
_TOD_Get_uptime( &uptime );
106b18: 83 ec 0c sub $0xc,%esp
106b1b: 8d 45 c0 lea -0x40(%ebp),%eax
106b1e: 50 push %eax
106b1f: e8 cc 4f 00 00 call 10baf0 <_TOD_Get_uptime>
106b24: e9 1a ff ff ff jmp 106a43 <rtems_cpu_usage_report_with_plugin+0xf7>
"-------------------------------------------------------------------------------\n",
_Watchdog_Ticks_since_boot - CPU_usage_Ticks_at_last_reset,
total_units
);
#endif
}
106b29: 8d 65 f4 lea -0xc(%ebp),%esp
106b2c: 5b pop %ebx
106b2d: 5e pop %esi
106b2e: 5f pop %edi
106b2f: 5d pop %ebp
106b30: c3 ret
00110e24 <rtems_deviceio_errno>:
[RTEMS_IO_ERROR] = EIO,
[RTEMS_PROXY_BLOCKING] = EIO
};
int rtems_deviceio_errno(rtems_status_code sc)
{
110e24: 55 push %ebp
110e25: 89 e5 mov %esp,%ebp
110e27: 53 push %ebx
110e28: 51 push %ecx
110e29: 8b 55 08 mov 0x8(%ebp),%edx
if (sc == RTEMS_SUCCESSFUL) {
return 0;
110e2c: 31 c0 xor %eax,%eax
[RTEMS_PROXY_BLOCKING] = EIO
};
int rtems_deviceio_errno(rtems_status_code sc)
{
if (sc == RTEMS_SUCCESSFUL) {
110e2e: 85 d2 test %edx,%edx
110e30: 74 1b je 110e4d <rtems_deviceio_errno+0x29>
return 0;
} else {
int eno = EINVAL;
110e32: bb 16 00 00 00 mov $0x16,%ebx
if ((unsigned) sc <= RTEMS_STATUS_CODES_LAST) {
110e37: 83 fa 1c cmp $0x1c,%edx
110e3a: 77 07 ja 110e43 <rtems_deviceio_errno+0x1f><== NEVER TAKEN
eno = status_code_to_errno [sc];
110e3c: 8b 1c 95 4c 01 12 00 mov 0x12014c(,%edx,4),%ebx
}
errno = eno;
110e43: e8 94 00 00 00 call 110edc <__errno>
110e48: 89 18 mov %ebx,(%eax)
return -1;
110e4a: 83 c8 ff or $0xffffffff,%eax
}
}
110e4d: 5a pop %edx
110e4e: 5b pop %ebx
110e4f: 5d pop %ebp
110e50: c3 ret
00106913 <rtems_disk_create_log>:
dev_t phys,
rtems_blkdev_bnum block_begin,
rtems_blkdev_bnum block_count,
const char *name
)
{
106913: 55 push %ebp
106914: 89 e5 mov %esp,%ebp
106916: 57 push %edi
106917: 56 push %esi
106918: 53 push %ebx
106919: 83 ec 2c sub $0x2c,%esp
10691c: 8b 75 08 mov 0x8(%ebp),%esi
10691f: 8b 7d 0c mov 0xc(%ebp),%edi
106922: 8b 45 10 mov 0x10(%ebp),%eax
106925: 8b 55 14 mov 0x14(%ebp),%edx
106928: 89 45 d0 mov %eax,-0x30(%ebp)
10692b: 89 55 d4 mov %edx,-0x2c(%ebp)
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_disk_device *phys_dd = NULL;
rtems_disk_device *dd = NULL;
10692e: c7 45 e0 00 00 00 00 movl $0x0,-0x20(%ebp)
char *alloc_name = NULL;
106935: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
sc = disk_lock();
10693c: e8 cd fc ff ff call 10660e <disk_lock>
106941: 89 c3 mov %eax,%ebx
if (sc != RTEMS_SUCCESSFUL) {
106943: 85 c0 test %eax,%eax
106945: 0f 85 8e 00 00 00 jne 1069d9 <rtems_disk_create_log+0xc6><== NEVER TAKEN
return sc;
}
phys_dd = get_disk_entry(phys, true);
10694b: b9 01 00 00 00 mov $0x1,%ecx
106950: 8b 45 d0 mov -0x30(%ebp),%eax
106953: 8b 55 d4 mov -0x2c(%ebp),%edx
106956: e8 21 fc ff ff call 10657c <get_disk_entry>
10695b: 89 45 d0 mov %eax,-0x30(%ebp)
if (phys_dd == NULL) {
10695e: 85 c0 test %eax,%eax
106960: 75 09 jne 10696b <rtems_disk_create_log+0x58>
disk_unlock();
106962: e8 d5 fc ff ff call 10663c <disk_unlock>
return RTEMS_INVALID_ID;
106967: b3 04 mov $0x4,%bl
106969: eb 6e jmp 1069d9 <rtems_disk_create_log+0xc6>
}
sc = create_disk(dev, name, &dd, &alloc_name);
10696b: 50 push %eax
10696c: 50 push %eax
10696d: 8d 45 e4 lea -0x1c(%ebp),%eax
106970: 50 push %eax
106971: 8d 45 e0 lea -0x20(%ebp),%eax
106974: 50 push %eax
106975: 8b 4d 20 mov 0x20(%ebp),%ecx
106978: 89 f0 mov %esi,%eax
10697a: 89 fa mov %edi,%edx
10697c: e8 e9 fc ff ff call 10666a <create_disk>
106981: 89 c3 mov %eax,%ebx
if (sc != RTEMS_SUCCESSFUL) {
106983: 83 c4 10 add $0x10,%esp
106986: 85 c0 test %eax,%eax
106988: 74 02 je 10698c <rtems_disk_create_log+0x79>
10698a: eb 48 jmp 1069d4 <rtems_disk_create_log+0xc1>
disk_unlock();
return sc;
}
sc = rtems_disk_init_log(
10698c: ff 75 1c pushl 0x1c(%ebp)
10698f: ff 75 18 pushl 0x18(%ebp)
106992: ff 75 d0 pushl -0x30(%ebp)
106995: ff 75 e0 pushl -0x20(%ebp)
106998: e8 b4 9c 00 00 call 110651 <rtems_disk_init_log>
10699d: 89 c3 mov %eax,%ebx
phys_dd,
block_begin,
block_count
);
dd->dev = dev;
10699f: 8b 45 e0 mov -0x20(%ebp),%eax
1069a2: 89 30 mov %esi,(%eax)
1069a4: 89 78 04 mov %edi,0x4(%eax)
dd->name = alloc_name;
1069a7: 8b 55 e4 mov -0x1c(%ebp),%edx
1069aa: 89 50 10 mov %edx,0x10(%eax)
++phys_dd->uses;
1069ad: 8b 55 d0 mov -0x30(%ebp),%edx
1069b0: ff 42 14 incl 0x14(%edx)
if (sc != RTEMS_SUCCESSFUL) {
1069b3: 83 c4 10 add $0x10,%esp
1069b6: 85 db test %ebx,%ebx
1069b8: 74 1a je 1069d4 <rtems_disk_create_log+0xc1>
dd->ioctl = null_handler;
1069ba: c7 40 38 be 65 10 00 movl $0x1065be,0x38(%eax)
rtems_disk_delete(dev);
1069c1: 50 push %eax
1069c2: 50 push %eax
1069c3: 57 push %edi
1069c4: 56 push %esi
1069c5: e8 1f fe ff ff call 1067e9 <rtems_disk_delete>
disk_unlock();
1069ca: e8 6d fc ff ff call 10663c <disk_unlock>
1069cf: 83 c4 10 add $0x10,%esp
1069d2: eb 05 jmp 1069d9 <rtems_disk_create_log+0xc6>
return sc;
}
disk_unlock();
1069d4: e8 63 fc ff ff call 10663c <disk_unlock>
return RTEMS_SUCCESSFUL;
}
1069d9: 89 d8 mov %ebx,%eax
1069db: 8d 65 f4 lea -0xc(%ebp),%esp
1069de: 5b pop %ebx
1069df: 5e pop %esi
1069e0: 5f pop %edi
1069e1: 5d pop %ebp
1069e2: c3 ret
001069e3 <rtems_disk_create_phys>:
rtems_blkdev_bnum block_count,
rtems_block_device_ioctl handler,
void *driver_data,
const char *name
)
{
1069e3: 55 push %ebp
1069e4: 89 e5 mov %esp,%ebp
1069e6: 57 push %edi
1069e7: 56 push %esi
1069e8: 53 push %ebx
1069e9: 83 ec 1c sub $0x1c,%esp
1069ec: 8b 75 08 mov 0x8(%ebp),%esi
1069ef: 8b 7d 0c mov 0xc(%ebp),%edi
rtems_disk_device *dd = NULL;
1069f2: c7 45 e0 00 00 00 00 movl $0x0,-0x20(%ebp)
rtems_status_code sc = RTEMS_SUCCESSFUL;
char *alloc_name = NULL;
1069f9: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
if (handler == NULL) {
return RTEMS_INVALID_ADDRESS;
106a00: bb 09 00 00 00 mov $0x9,%ebx
{
rtems_disk_device *dd = NULL;
rtems_status_code sc = RTEMS_SUCCESSFUL;
char *alloc_name = NULL;
if (handler == NULL) {
106a05: 83 7d 18 00 cmpl $0x0,0x18(%ebp)
106a09: 74 79 je 106a84 <rtems_disk_create_phys+0xa1>
return RTEMS_INVALID_ADDRESS;
}
sc = disk_lock();
106a0b: e8 fe fb ff ff call 10660e <disk_lock>
106a10: 89 c3 mov %eax,%ebx
if (sc != RTEMS_SUCCESSFUL) {
106a12: 85 c0 test %eax,%eax
106a14: 75 6e jne 106a84 <rtems_disk_create_phys+0xa1><== NEVER TAKEN
return sc;
}
sc = create_disk(dev, name, &dd, &alloc_name);
106a16: 50 push %eax
106a17: 50 push %eax
106a18: 8d 45 e4 lea -0x1c(%ebp),%eax
106a1b: 50 push %eax
106a1c: 8d 45 e0 lea -0x20(%ebp),%eax
106a1f: 50 push %eax
106a20: 8b 4d 20 mov 0x20(%ebp),%ecx
106a23: 89 f0 mov %esi,%eax
106a25: 89 fa mov %edi,%edx
106a27: e8 3e fc ff ff call 10666a <create_disk>
106a2c: 89 c3 mov %eax,%ebx
if (sc != RTEMS_SUCCESSFUL) {
106a2e: 83 c4 10 add $0x10,%esp
106a31: 85 c0 test %eax,%eax
106a33: 74 02 je 106a37 <rtems_disk_create_phys+0x54>
106a35: eb 48 jmp 106a7f <rtems_disk_create_phys+0x9c>
disk_unlock();
return sc;
}
sc = rtems_disk_init_phys(
106a37: 83 ec 0c sub $0xc,%esp
106a3a: ff 75 1c pushl 0x1c(%ebp)
106a3d: ff 75 18 pushl 0x18(%ebp)
106a40: ff 75 14 pushl 0x14(%ebp)
106a43: ff 75 10 pushl 0x10(%ebp)
106a46: ff 75 e0 pushl -0x20(%ebp)
106a49: e8 8a 9b 00 00 call 1105d8 <rtems_disk_init_phys>
106a4e: 89 c3 mov %eax,%ebx
block_count,
handler,
driver_data
);
dd->dev = dev;
106a50: 8b 45 e0 mov -0x20(%ebp),%eax
106a53: 89 30 mov %esi,(%eax)
106a55: 89 78 04 mov %edi,0x4(%eax)
dd->name = alloc_name;
106a58: 8b 55 e4 mov -0x1c(%ebp),%edx
106a5b: 89 50 10 mov %edx,0x10(%eax)
if (sc != RTEMS_SUCCESSFUL) {
106a5e: 83 c4 20 add $0x20,%esp
106a61: 85 db test %ebx,%ebx
106a63: 74 1a je 106a7f <rtems_disk_create_phys+0x9c>
dd->ioctl = null_handler;
106a65: c7 40 38 be 65 10 00 movl $0x1065be,0x38(%eax)
rtems_disk_delete(dev);
106a6c: 50 push %eax
106a6d: 50 push %eax
106a6e: 57 push %edi
106a6f: 56 push %esi
106a70: e8 74 fd ff ff call 1067e9 <rtems_disk_delete>
disk_unlock();
106a75: e8 c2 fb ff ff call 10663c <disk_unlock>
106a7a: 83 c4 10 add $0x10,%esp
106a7d: eb 05 jmp 106a84 <rtems_disk_create_phys+0xa1>
return sc;
}
disk_unlock();
106a7f: e8 b8 fb ff ff call 10663c <disk_unlock>
return RTEMS_SUCCESSFUL;
}
106a84: 89 d8 mov %ebx,%eax
106a86: 8d 65 f4 lea -0xc(%ebp),%esp
106a89: 5b pop %ebx
106a8a: 5e pop %esi
106a8b: 5f pop %edi
106a8c: 5d pop %ebp
106a8d: c3 ret
001067e9 <rtems_disk_delete>:
}
}
rtems_status_code
rtems_disk_delete(dev_t dev)
{
1067e9: 55 push %ebp
1067ea: 89 e5 mov %esp,%ebp
1067ec: 57 push %edi
1067ed: 56 push %esi
1067ee: 53 push %ebx
1067ef: 83 ec 2c sub $0x2c,%esp
1067f2: 8b 75 08 mov 0x8(%ebp),%esi
1067f5: 8b 7d 0c mov 0xc(%ebp),%edi
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_disk_device *dd = NULL;
sc = disk_lock();
1067f8: e8 11 fe ff ff call 10660e <disk_lock>
1067fd: 89 45 dc mov %eax,-0x24(%ebp)
if (sc != RTEMS_SUCCESSFUL) {
106800: 85 c0 test %eax,%eax
106802: 0f 85 00 01 00 00 jne 106908 <rtems_disk_delete+0x11f><== NEVER TAKEN
return sc;
}
dd = get_disk_entry(dev, true);
106808: b9 01 00 00 00 mov $0x1,%ecx
10680d: 89 f0 mov %esi,%eax
10680f: 89 fa mov %edi,%edx
106811: e8 66 fd ff ff call 10657c <get_disk_entry>
if (dd == NULL) {
106816: 85 c0 test %eax,%eax
106818: 75 11 jne 10682b <rtems_disk_delete+0x42><== ALWAYS TAKEN
disk_unlock();
10681a: e8 1d fe ff ff call 10663c <disk_unlock> <== NOT EXECUTED
return RTEMS_INVALID_ID;
10681f: c7 45 dc 04 00 00 00 movl $0x4,-0x24(%ebp) <== NOT EXECUTED
106826: e9 dd 00 00 00 jmp 106908 <rtems_disk_delete+0x11f><== NOT EXECUTED
}
dd->deleted = true;
10682b: c6 40 40 01 movb $0x1,0x40(%eax)
}
static void
rtems_disk_cleanup(rtems_disk_device *disk_to_remove)
{
rtems_disk_device *const physical_disk = disk_to_remove->phys_dev;
10682f: 8b 58 08 mov 0x8(%eax),%ebx
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
if (physical_disk->deleted) {
106832: 80 7b 40 00 cmpb $0x0,0x40(%ebx)
106836: 0f 84 a4 00 00 00 je 1068e0 <rtems_disk_delete+0xf7>
dev_t dev = physical_disk->dev;
10683c: 8b 13 mov (%ebx),%edx
10683e: 89 55 d8 mov %edx,-0x28(%ebp)
106841: 8b 53 04 mov 0x4(%ebx),%edx
106844: 89 55 d4 mov %edx,-0x2c(%ebp)
unsigned deleted_count = 0;
106847: c7 45 e0 00 00 00 00 movl $0x0,-0x20(%ebp)
for (major = 0; major < disktab_size; ++major) {
10684e: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
106855: eb 59 jmp 1068b0 <rtems_disk_delete+0xc7>
rtems_disk_device_table *dtab = disktab + major;
106857: a1 a0 1f 13 00 mov 0x131fa0,%eax
10685c: 8b 55 e4 mov -0x1c(%ebp),%edx
10685f: 8d 3c d0 lea (%eax,%edx,8),%edi
for (minor = 0; minor < dtab->size; ++minor) {
106862: 31 f6 xor %esi,%esi
106864: eb 42 jmp 1068a8 <rtems_disk_delete+0xbf>
rtems_disk_device *dd = dtab->minor [minor];
106866: 8b 07 mov (%edi),%eax
106868: 8d 04 b0 lea (%eax,%esi,4),%eax
10686b: 89 45 d0 mov %eax,-0x30(%ebp)
10686e: 8b 00 mov (%eax),%eax
if (dd != NULL && dd->phys_dev->dev == dev && dd != physical_disk) {
106870: 85 c0 test %eax,%eax
106872: 74 33 je 1068a7 <rtems_disk_delete+0xbe>
106874: 8b 48 08 mov 0x8(%eax),%ecx
106877: 8b 55 d4 mov -0x2c(%ebp),%edx
10687a: 39 51 04 cmp %edx,0x4(%ecx)
10687d: 75 28 jne 1068a7 <rtems_disk_delete+0xbe><== NEVER TAKEN
10687f: 8b 55 d8 mov -0x28(%ebp),%edx
106882: 39 11 cmp %edx,(%ecx)
106884: 75 21 jne 1068a7 <rtems_disk_delete+0xbe><== NEVER TAKEN
106886: 39 d8 cmp %ebx,%eax
106888: 74 1d je 1068a7 <rtems_disk_delete+0xbe>
if (dd->uses == 0) {
10688a: 83 78 14 00 cmpl $0x0,0x14(%eax)
10688e: 75 13 jne 1068a3 <rtems_disk_delete+0xba>
++deleted_count;
106890: ff 45 e0 incl -0x20(%ebp)
dtab->minor [minor] = NULL;
106893: 8b 55 d0 mov -0x30(%ebp),%edx
106896: c7 02 00 00 00 00 movl $0x0,(%edx)
free_disk_device(dd);
10689c: e8 25 fd ff ff call 1065c6 <free_disk_device>
1068a1: eb 04 jmp 1068a7 <rtems_disk_delete+0xbe>
} else {
dd->deleted = true;
1068a3: c6 40 40 01 movb $0x1,0x40(%eax)
unsigned deleted_count = 0;
for (major = 0; major < disktab_size; ++major) {
rtems_disk_device_table *dtab = disktab + major;
for (minor = 0; minor < dtab->size; ++minor) {
1068a7: 46 inc %esi
1068a8: 3b 77 04 cmp 0x4(%edi),%esi
1068ab: 72 b9 jb 106866 <rtems_disk_delete+0x7d>
if (physical_disk->deleted) {
dev_t dev = physical_disk->dev;
unsigned deleted_count = 0;
for (major = 0; major < disktab_size; ++major) {
1068ad: ff 45 e4 incl -0x1c(%ebp)
1068b0: 8b 55 e4 mov -0x1c(%ebp),%edx
1068b3: 3b 15 9c 1f 13 00 cmp 0x131f9c,%edx
1068b9: 72 9c jb 106857 <rtems_disk_delete+0x6e>
}
}
}
}
physical_disk->uses -= deleted_count;
1068bb: 8b 43 14 mov 0x14(%ebx),%eax
1068be: 2b 45 e0 sub -0x20(%ebp),%eax
1068c1: 89 43 14 mov %eax,0x14(%ebx)
if (physical_disk->uses == 0) {
1068c4: 85 c0 test %eax,%eax
1068c6: 75 3b jne 106903 <rtems_disk_delete+0x11a>
dev_t device
)
{
union __rtems_dev_t temp;
temp.device = device;
1068c8: 8b 0b mov (%ebx),%ecx
dev_t device
)
{
union __rtems_dev_t temp;
temp.device = device;
1068ca: 8b 53 04 mov 0x4(%ebx),%edx
rtems_filesystem_split_dev_t(physical_disk->dev, major, minor);
disktab [major].minor [minor] = NULL;
1068cd: a1 a0 1f 13 00 mov 0x131fa0,%eax
1068d2: 8b 04 c8 mov (%eax,%ecx,8),%eax
1068d5: c7 04 90 00 00 00 00 movl $0x0,(%eax,%edx,4)
free_disk_device(physical_disk);
1068dc: 89 d8 mov %ebx,%eax
1068de: eb 1e jmp 1068fe <rtems_disk_delete+0x115>
}
} else {
if (disk_to_remove->uses == 0) {
1068e0: 83 78 14 00 cmpl $0x0,0x14(%eax)
1068e4: 75 1d jne 106903 <rtems_disk_delete+0x11a><== NEVER TAKEN
--physical_disk->uses;
1068e6: ff 4b 14 decl 0x14(%ebx)
dev_t device
)
{
union __rtems_dev_t temp;
temp.device = device;
1068e9: 8b 18 mov (%eax),%ebx
dev_t device
)
{
union __rtems_dev_t temp;
temp.device = device;
1068eb: 8b 48 04 mov 0x4(%eax),%ecx
rtems_filesystem_split_dev_t(disk_to_remove->dev, major, minor);
disktab [major].minor [minor] = NULL;
1068ee: 8b 15 a0 1f 13 00 mov 0x131fa0,%edx
1068f4: 8b 14 da mov (%edx,%ebx,8),%edx
1068f7: c7 04 8a 00 00 00 00 movl $0x0,(%edx,%ecx,4)
free_disk_device(disk_to_remove);
1068fe: e8 c3 fc ff ff call 1065c6 <free_disk_device>
}
dd->deleted = true;
rtems_disk_cleanup(dd);
disk_unlock();
106903: e8 34 fd ff ff call 10663c <disk_unlock>
return RTEMS_SUCCESSFUL;
}
106908: 8b 45 dc mov -0x24(%ebp),%eax
10690b: 83 c4 2c add $0x2c,%esp
10690e: 5b pop %ebx
10690f: 5e pop %esi
106910: 5f pop %edi
106911: 5d pop %ebp
106912: c3 ret
00110651 <rtems_disk_init_log>:
rtems_disk_device *dd,
rtems_disk_device *phys_dd,
rtems_blkdev_bnum block_begin,
rtems_blkdev_bnum block_count
)
{
110651: 55 push %ebp
110652: 89 e5 mov %esp,%ebp
110654: 57 push %edi
110655: 56 push %esi
110656: 53 push %ebx
110657: 83 ec 1c sub $0x1c,%esp
11065a: 8b 55 08 mov 0x8(%ebp),%edx
11065d: 8b 5d 0c mov 0xc(%ebp),%ebx
110660: 8b 45 10 mov 0x10(%ebp),%eax
110663: 89 45 e4 mov %eax,-0x1c(%ebp)
110666: 8b 75 14 mov 0x14(%ebp),%esi
rtems_status_code sc;
dd = memset(dd, 0, sizeof(*dd));
110669: b9 1d 00 00 00 mov $0x1d,%ecx
11066e: 31 c0 xor %eax,%eax
110670: 89 d7 mov %edx,%edi
110672: f3 ab rep stos %eax,%es:(%edi)
dd->phys_dev = phys_dd;
110674: 89 5a 08 mov %ebx,0x8(%edx)
dd->start = block_begin;
110677: 8b 45 e4 mov -0x1c(%ebp),%eax
11067a: 89 42 18 mov %eax,0x18(%edx)
dd->size = block_count;
11067d: 89 72 1c mov %esi,0x1c(%edx)
dd->media_block_size = phys_dd->media_block_size;
110680: 8b 43 20 mov 0x20(%ebx),%eax
110683: 89 42 20 mov %eax,0x20(%edx)
dd->ioctl = phys_dd->ioctl;
110686: 8b 43 38 mov 0x38(%ebx),%eax
110689: 89 42 38 mov %eax,0x38(%edx)
dd->driver_data = phys_dd->driver_data;
11068c: 8b 43 3c mov 0x3c(%ebx),%eax
11068f: 89 42 3c mov %eax,0x3c(%edx)
dd->read_ahead.trigger = RTEMS_DISK_READ_AHEAD_NO_TRIGGER;
110692: c7 42 6c ff ff ff ff movl $0xffffffff,0x6c(%edx)
if (phys_dd->phys_dev == phys_dd) {
110699: 8b 4b 08 mov 0x8(%ebx),%ecx
sc = rtems_bdbuf_set_block_size(dd, phys_dd->media_block_size);
} else {
sc = RTEMS_INVALID_NUMBER;
}
} else {
sc = RTEMS_INVALID_ID;
11069c: b8 04 00 00 00 mov $0x4,%eax
dd->media_block_size = phys_dd->media_block_size;
dd->ioctl = phys_dd->ioctl;
dd->driver_data = phys_dd->driver_data;
dd->read_ahead.trigger = RTEMS_DISK_READ_AHEAD_NO_TRIGGER;
if (phys_dd->phys_dev == phys_dd) {
1106a1: 39 d9 cmp %ebx,%ecx
1106a3: 75 34 jne 1106d9 <rtems_disk_init_log+0x88>
rtems_blkdev_bnum phys_block_count = phys_dd->size;
1106a5: 8b 41 1c mov 0x1c(%ecx),%eax
if (
1106a8: 85 f6 test %esi,%esi
1106aa: 74 28 je 1106d4 <rtems_disk_init_log+0x83>
1106ac: 39 45 e4 cmp %eax,-0x1c(%ebp)
1106af: 73 23 jae 1106d4 <rtems_disk_init_log+0x83><== NEVER TAKEN
block_begin < phys_block_count
&& block_count > 0
&& block_count <= phys_block_count - block_begin
1106b1: 89 c3 mov %eax,%ebx
1106b3: 2b 5d e4 sub -0x1c(%ebp),%ebx
) {
sc = rtems_bdbuf_set_block_size(dd, phys_dd->media_block_size);
} else {
sc = RTEMS_INVALID_NUMBER;
1106b6: b8 0a 00 00 00 mov $0xa,%eax
rtems_blkdev_bnum phys_block_count = phys_dd->size;
if (
block_begin < phys_block_count
&& block_count > 0
&& block_count <= phys_block_count - block_begin
1106bb: 39 de cmp %ebx,%esi
1106bd: 77 1a ja 1106d9 <rtems_disk_init_log+0x88>
) {
sc = rtems_bdbuf_set_block_size(dd, phys_dd->media_block_size);
1106bf: 8b 41 20 mov 0x20(%ecx),%eax
1106c2: 89 45 0c mov %eax,0xc(%ebp)
1106c5: 89 55 08 mov %edx,0x8(%ebp)
} else {
sc = RTEMS_INVALID_ID;
}
return sc;
}
1106c8: 83 c4 1c add $0x1c,%esp
1106cb: 5b pop %ebx
1106cc: 5e pop %esi
1106cd: 5f pop %edi
1106ce: 5d pop %ebp
if (
block_begin < phys_block_count
&& block_count > 0
&& block_count <= phys_block_count - block_begin
) {
sc = rtems_bdbuf_set_block_size(dd, phys_dd->media_block_size);
1106cf: e9 a4 f9 ff ff jmp 110078 <rtems_bdbuf_set_block_size>
} else {
sc = RTEMS_INVALID_NUMBER;
1106d4: b8 0a 00 00 00 mov $0xa,%eax
} else {
sc = RTEMS_INVALID_ID;
}
return sc;
}
1106d9: 83 c4 1c add $0x1c,%esp
1106dc: 5b pop %ebx
1106dd: 5e pop %esi
1106de: 5f pop %edi
1106df: 5d pop %ebp
1106e0: c3 ret
00106bbc <rtems_disk_io_initialize>:
rtems_status_code
rtems_disk_io_initialize(void)
{
106bbc: 55 push %ebp
106bbd: 89 e5 mov %esp,%ebp
106bbf: 53 push %ebx
106bc0: 50 push %eax
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_device_major_number size = DISKTAB_INITIAL_SIZE;
if (disktab_size > 0) {
return RTEMS_SUCCESSFUL;
106bc1: 31 db xor %ebx,%ebx
rtems_disk_io_initialize(void)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_device_major_number size = DISKTAB_INITIAL_SIZE;
if (disktab_size > 0) {
106bc3: 83 3d 9c 1f 13 00 00 cmpl $0x0,0x131f9c
106bca: 0f 85 8b 00 00 00 jne 106c5b <rtems_disk_io_initialize+0x9f>
return RTEMS_SUCCESSFUL;
}
disktab = calloc(size, sizeof(rtems_disk_device_table));
106bd0: 50 push %eax
106bd1: 50 push %eax
106bd2: 6a 08 push $0x8
106bd4: 6a 08 push $0x8
106bd6: e8 dd 06 00 00 call 1072b8 <calloc>
106bdb: a3 a0 1f 13 00 mov %eax,0x131fa0
if (disktab == NULL) {
106be0: 83 c4 10 add $0x10,%esp
return RTEMS_NO_MEMORY;
106be3: b3 1a mov $0x1a,%bl
if (disktab_size > 0) {
return RTEMS_SUCCESSFUL;
}
disktab = calloc(size, sizeof(rtems_disk_device_table));
if (disktab == NULL) {
106be5: 85 c0 test %eax,%eax
106be7: 74 72 je 106c5b <rtems_disk_io_initialize+0x9f><== NEVER TAKEN
return RTEMS_NO_MEMORY;
}
diskdevs_protected = false;
106be9: c6 05 94 1f 13 00 00 movb $0x0,0x131f94
sc = rtems_semaphore_create(
106bf0: 83 ec 0c sub $0xc,%esp
106bf3: 68 98 1f 13 00 push $0x131f98
106bf8: 6a 00 push $0x0
106bfa: 6a 10 push $0x10
106bfc: 6a 01 push $0x1
106bfe: 68 56 45 44 44 push $0x44444556
106c03: e8 fc 3e 00 00 call 10ab04 <rtems_semaphore_create>
RTEMS_FIFO | RTEMS_BINARY_SEMAPHORE | RTEMS_NO_INHERIT_PRIORITY
| RTEMS_NO_PRIORITY_CEILING | RTEMS_LOCAL,
0,
&diskdevs_mutex
);
if (sc != RTEMS_SUCCESSFUL) {
106c08: 83 c4 20 add $0x20,%esp
106c0b: 85 c0 test %eax,%eax
106c0d: 74 13 je 106c22 <rtems_disk_io_initialize+0x66><== ALWAYS TAKEN
free(disktab);
106c0f: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
106c12: ff 35 a0 1f 13 00 pushl 0x131fa0 <== NOT EXECUTED
106c18: e8 07 09 00 00 call 107524 <free> <== NOT EXECUTED
return RTEMS_NO_MEMORY;
106c1d: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
106c20: eb 39 jmp 106c5b <rtems_disk_io_initialize+0x9f><== NOT EXECUTED
}
sc = rtems_bdbuf_init();
106c22: e8 d3 8a 00 00 call 10f6fa <rtems_bdbuf_init>
if (sc != RTEMS_SUCCESSFUL) {
106c27: 85 c0 test %eax,%eax
106c29: 74 24 je 106c4f <rtems_disk_io_initialize+0x93><== ALWAYS TAKEN
rtems_semaphore_delete(diskdevs_mutex);
106c2b: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
106c2e: ff 35 98 1f 13 00 pushl 0x131f98 <== NOT EXECUTED
106c34: e8 6b 40 00 00 call 10aca4 <rtems_semaphore_delete><== NOT EXECUTED
free(disktab);
106c39: 5b pop %ebx <== NOT EXECUTED
106c3a: ff 35 a0 1f 13 00 pushl 0x131fa0 <== NOT EXECUTED
106c40: e8 df 08 00 00 call 107524 <free> <== NOT EXECUTED
return RTEMS_UNSATISFIED;
106c45: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
106c48: bb 0d 00 00 00 mov $0xd,%ebx <== NOT EXECUTED
106c4d: eb 0c jmp 106c5b <rtems_disk_io_initialize+0x9f><== NOT EXECUTED
}
disktab_size = size;
106c4f: c7 05 9c 1f 13 00 08 movl $0x8,0x131f9c
106c56: 00 00 00
return RTEMS_SUCCESSFUL;
106c59: 31 db xor %ebx,%ebx
}
106c5b: 89 d8 mov %ebx,%eax
106c5d: 8b 5d fc mov -0x4(%ebp),%ebx
106c60: c9 leave
106c61: c3 ret
00106b1e <rtems_disk_next>:
rtems_disk_device *
rtems_disk_next(dev_t dev)
{
106b1e: 55 push %ebp
106b1f: 89 e5 mov %esp,%ebp
106b21: 57 push %edi
106b22: 56 push %esi
106b23: 53 push %ebx
106b24: 83 ec 1c sub $0x1c,%esp
106b27: 8b 45 08 mov 0x8(%ebp),%eax
106b2a: 8b 55 0c mov 0xc(%ebp),%edx
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_disk_device_table *dtab = NULL;
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
if (dev != (dev_t) -1) {
106b2d: 83 fa ff cmp $0xffffffff,%edx
106b30: 75 05 jne 106b37 <rtems_disk_next+0x19>
106b32: 83 f8 ff cmp $0xffffffff,%eax
106b35: 74 12 je 106b49 <rtems_disk_next+0x2b> <== ALWAYS TAKEN
rtems_filesystem_split_dev_t(dev, major, minor);
/* If minor wraps around */
if ((minor + 1) < minor) {
106b37: 8d 5a 01 lea 0x1(%edx),%ebx
106b3a: 39 d3 cmp %edx,%ebx
106b3c: 73 11 jae 106b4f <rtems_disk_next+0x31> <== ALWAYS TAKEN
/* If major wraps around */
if ((major + 1) < major) {
106b3e: 8d 70 01 lea 0x1(%eax),%esi <== NOT EXECUTED
return NULL;
}
++major;
minor = 0;
106b41: 31 db xor %ebx,%ebx <== NOT EXECUTED
rtems_filesystem_split_dev_t(dev, major, minor);
/* If minor wraps around */
if ((minor + 1) < minor) {
/* If major wraps around */
if ((major + 1) < major) {
106b43: 39 c6 cmp %eax,%esi <== NOT EXECUTED
106b45: 73 0a jae 106b51 <rtems_disk_next+0x33> <== NOT EXECUTED
106b47: eb 22 jmp 106b6b <rtems_disk_next+0x4d> <== NOT EXECUTED
rtems_disk_next(dev_t dev)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_disk_device_table *dtab = NULL;
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
106b49: 31 db xor %ebx,%ebx
rtems_disk_device *
rtems_disk_next(dev_t dev)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_disk_device_table *dtab = NULL;
rtems_device_major_number major = 0;
106b4b: 31 f6 xor %esi,%esi
106b4d: eb 02 jmp 106b51 <rtems_disk_next+0x33>
)
{
union __rtems_dev_t temp;
temp.device = device;
return temp.__overlay.major;
106b4f: 89 c6 mov %eax,%esi
} else {
++minor;
}
}
sc = disk_lock();
106b51: e8 b8 fa ff ff call 10660e <disk_lock>
if (sc != RTEMS_SUCCESSFUL) {
106b56: 85 c0 test %eax,%eax
106b58: 75 11 jne 106b6b <rtems_disk_next+0x4d> <== NEVER TAKEN
return NULL;
}
if (major >= disktab_size) {
106b5a: a1 9c 1f 13 00 mov 0x131f9c,%eax
106b5f: 89 45 e0 mov %eax,-0x20(%ebp)
106b62: 39 c6 cmp %eax,%esi
106b64: 72 09 jb 106b6f <rtems_disk_next+0x51> <== ALWAYS TAKEN
disk_unlock();
106b66: e8 d1 fa ff ff call 10663c <disk_unlock>
return NULL;
106b6b: 31 c0 xor %eax,%eax
106b6d: eb 45 jmp 106bb4 <rtems_disk_next+0x96>
}
dtab = disktab + major;
106b6f: 8b 0d a0 1f 13 00 mov 0x131fa0,%ecx
106b75: 8d 3c f1 lea (%ecx,%esi,8),%edi
while (true) {
if (dtab->minor == NULL || minor >= dtab->size) {
106b78: 8b 07 mov (%edi),%eax
106b7a: 85 c0 test %eax,%eax
106b7c: 74 05 je 106b83 <rtems_disk_next+0x65>
106b7e: 3b 5f 04 cmp 0x4(%edi),%ebx
106b81: 72 0d jb 106b90 <rtems_disk_next+0x72>
minor = 0;
++major;
106b83: 46 inc %esi
if (major >= disktab_size) {
106b84: 3b 75 e0 cmp -0x20(%ebp),%esi
106b87: 73 dd jae 106b66 <rtems_disk_next+0x48>
disk_unlock();
return NULL;
}
dtab = disktab + major;
106b89: 8d 3c f1 lea (%ecx,%esi,8),%edi
}
dtab = disktab + major;
while (true) {
if (dtab->minor == NULL || minor >= dtab->size) {
minor = 0;
106b8c: 31 db xor %ebx,%ebx
if (major >= disktab_size) {
disk_unlock();
return NULL;
}
dtab = disktab + major;
106b8e: eb e8 jmp 106b78 <rtems_disk_next+0x5a>
} else if (dtab->minor [minor] == NULL) {
106b90: 8d 14 9d 00 00 00 00 lea 0x0(,%ebx,4),%edx
106b97: 89 55 e4 mov %edx,-0x1c(%ebp)
106b9a: 8b 04 98 mov (%eax,%ebx,4),%eax
106b9d: 85 c0 test %eax,%eax
106b9f: 75 03 jne 106ba4 <rtems_disk_next+0x86>
++minor;
106ba1: 43 inc %ebx
106ba2: eb d4 jmp 106b78 <rtems_disk_next+0x5a>
} else {
++dtab->minor [minor]->uses;
106ba4: ff 40 14 incl 0x14(%eax)
disk_unlock();
106ba7: e8 90 fa ff ff call 10663c <disk_unlock>
return dtab->minor [minor];
106bac: 8b 07 mov (%edi),%eax
106bae: 8b 55 e4 mov -0x1c(%ebp),%edx
106bb1: 8b 04 10 mov (%eax,%edx,1),%eax
}
}
}
106bb4: 83 c4 1c add $0x1c,%esp
106bb7: 5b pop %ebx
106bb8: 5e pop %esi
106bb9: 5f pop %edi
106bba: 5d pop %ebp
106bbb: c3 ret
00106a8e <rtems_disk_obtain>:
return RTEMS_SUCCESSFUL;
}
rtems_disk_device *
rtems_disk_obtain(dev_t dev)
{
106a8e: 55 push %ebp
106a8f: 89 e5 mov %esp,%ebp
106a91: 57 push %edi
106a92: 56 push %esi
106a93: 53 push %ebx
106a94: 83 ec 1c sub $0x1c,%esp
106a97: 8b 75 08 mov 0x8(%ebp),%esi
106a9a: 8b 7d 0c mov 0xc(%ebp),%edi
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_disk_device *dd = NULL;
rtems_interrupt_level level;
rtems_interrupt_disable(level);
106a9d: 9c pushf
106a9e: fa cli
106a9f: 5b pop %ebx
if (!diskdevs_protected) {
106aa0: a0 94 1f 13 00 mov 0x131f94,%al
106aa5: 84 c0 test %al,%al
106aa7: 75 0f jne 106ab8 <rtems_disk_obtain+0x2a><== NEVER TAKEN
/* Frequent and quickest case */
dd = get_disk_entry(dev, false);
106aa9: 31 c9 xor %ecx,%ecx
106aab: 89 f0 mov %esi,%eax
106aad: 89 fa mov %edi,%edx
106aaf: e8 c8 fa ff ff call 10657c <get_disk_entry>
rtems_interrupt_enable(level);
106ab4: 53 push %ebx
106ab5: 9d popf
106ab6: eb 25 jmp 106add <rtems_disk_obtain+0x4f>
} else {
rtems_interrupt_enable(level);
106ab8: 53 push %ebx <== NOT EXECUTED
106ab9: 9d popf <== NOT EXECUTED
sc = disk_lock();
106aba: e8 4f fb ff ff call 10660e <disk_lock> <== NOT EXECUTED
if (sc == RTEMS_SUCCESSFUL) {
106abf: 85 c0 test %eax,%eax <== NOT EXECUTED
106ac1: 75 18 jne 106adb <rtems_disk_obtain+0x4d><== NOT EXECUTED
dd = get_disk_entry(dev, false);
106ac3: 31 c9 xor %ecx,%ecx <== NOT EXECUTED
106ac5: 89 f0 mov %esi,%eax <== NOT EXECUTED
106ac7: 89 fa mov %edi,%edx <== NOT EXECUTED
106ac9: e8 ae fa ff ff call 10657c <get_disk_entry> <== NOT EXECUTED
disk_unlock();
106ace: 89 45 e4 mov %eax,-0x1c(%ebp) <== NOT EXECUTED
106ad1: e8 66 fb ff ff call 10663c <disk_unlock> <== NOT EXECUTED
106ad6: 8b 45 e4 mov -0x1c(%ebp),%eax <== NOT EXECUTED
106ad9: eb 02 jmp 106add <rtems_disk_obtain+0x4f><== NOT EXECUTED
rtems_disk_device *
rtems_disk_obtain(dev_t dev)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_disk_device *dd = NULL;
106adb: 31 c0 xor %eax,%eax <== NOT EXECUTED
disk_unlock();
}
}
return dd;
}
106add: 83 c4 1c add $0x1c,%esp
106ae0: 5b pop %ebx
106ae1: 5e pop %esi
106ae2: 5f pop %edi
106ae3: 5d pop %ebp
106ae4: c3 ret
00109579 <rtems_fdisk_abort.constprop.9>:
*
* @param format The format string. See printf for details.
* @param ... The arguments for the format text.
*/
static void
rtems_fdisk_abort (const char *format, ...)
109579: 55 push %ebp <== NOT EXECUTED
10957a: 89 e5 mov %esp,%ebp <== NOT EXECUTED
10957c: 83 ec 10 sub $0x10,%esp <== NOT EXECUTED
{
va_list args;
va_start (args, format);
fprintf (stderr, "fdisk:abort:");
10957f: a1 40 17 14 00 mov 0x141740,%eax <== NOT EXECUTED
109584: ff 70 0c pushl 0xc(%eax) <== NOT EXECUTED
109587: 68 c8 e3 12 00 push $0x12e3c8 <== NOT EXECUTED
10958c: e8 83 64 01 00 call 11fa14 <fputs> <== NOT EXECUTED
vfprintf (stderr, format, args);
109591: 58 pop %eax <== NOT EXECUTED
109592: 5a pop %edx <== NOT EXECUTED
109593: a1 40 17 14 00 mov 0x141740,%eax <== NOT EXECUTED
109598: ff 70 0c pushl 0xc(%eax) <== NOT EXECUTED
10959b: 68 d5 e3 12 00 push $0x12e3d5 <== NOT EXECUTED
1095a0: e8 6f 64 01 00 call 11fa14 <fputs> <== NOT EXECUTED
fprintf (stderr, "\n");
1095a5: 59 pop %ecx <== NOT EXECUTED
1095a6: 58 pop %eax <== NOT EXECUTED
1095a7: a1 40 17 14 00 mov 0x141740,%eax <== NOT EXECUTED
1095ac: ff 70 0c pushl 0xc(%eax) <== NOT EXECUTED
1095af: 6a 0a push $0xa <== NOT EXECUTED
1095b1: e8 a6 63 01 00 call 11f95c <fputc> <== NOT EXECUTED
fflush (stderr);
1095b6: 58 pop %eax <== NOT EXECUTED
1095b7: a1 40 17 14 00 mov 0x141740,%eax <== NOT EXECUTED
1095bc: ff 70 0c pushl 0xc(%eax) <== NOT EXECUTED
1095bf: e8 70 5f 01 00 call 11f534 <fflush> <== NOT EXECUTED
va_end (args);
exit (1);
1095c4: c7 04 24 01 00 00 00 movl $0x1,(%esp) <== NOT EXECUTED
1095cb: e8 04 5c 01 00 call 11f1d4 <exit> <== NOT EXECUTED
00108224 <rtems_fdisk_compact>:
* used segments that will fit. The used queue is sorted on the least
* number of active pages.
*/
static int
rtems_fdisk_compact (rtems_flashdisk* fd)
{
108224: 55 push %ebp
108225: 89 e5 mov %esp,%ebp
108227: 57 push %edi
108228: 56 push %esi
108229: 53 push %ebx
10822a: 83 ec 3c sub $0x3c,%esp
10822d: 89 c3 mov %eax,%ebx
static bool
rtems_fdisk_is_erased_blocks_starvation (rtems_flashdisk* fd)
{
bool starvation = fd->erased_blocks < fd->starvation_threshold;
if (starvation)
10822f: 8b 40 24 mov 0x24(%eax),%eax
108232: 39 43 28 cmp %eax,0x28(%ebx)
108235: 0f 83 72 01 00 00 jae 1083ad <rtems_fdisk_compact+0x189>
fd->starvations++;
10823b: ff 43 70 incl 0x70(%ebx)
uint32_t pages;
if (rtems_fdisk_is_erased_blocks_starvation (fd))
{
#if RTEMS_FDISK_TRACE
rtems_fdisk_printf (fd, " resolve starvation");
10823e: 50 push %eax
10823f: 50 push %eax
108240: 68 42 e7 12 00 push $0x12e742
108245: 53 push %ebx
108246: e8 d7 f4 ff ff call 107722 <rtems_fdisk_printf>
#endif
ssc = rtems_fdisk_segment_queue_pop_head (&fd->used);
10824b: 8d 43 40 lea 0x40(%ebx),%eax
10824e: e8 78 f3 ff ff call 1075cb <rtems_fdisk_segment_queue_pop_head>
108253: 89 c6 mov %eax,%esi
if (!ssc)
108255: 83 c4 10 add $0x10,%esp
108258: 85 c0 test %eax,%eax
10825a: 75 0e jne 10826a <rtems_fdisk_compact+0x46><== ALWAYS TAKEN
ssc = rtems_fdisk_segment_queue_pop_head (&fd->available);
10825c: 8d 43 34 lea 0x34(%ebx),%eax <== NOT EXECUTED
10825f: e8 67 f3 ff ff call 1075cb <rtems_fdisk_segment_queue_pop_head><== NOT EXECUTED
108264: 89 c6 mov %eax,%esi <== NOT EXECUTED
if (ssc)
108266: 85 c0 test %eax,%eax <== NOT EXECUTED
108268: 74 38 je 1082a2 <rtems_fdisk_compact+0x7e><== NOT EXECUTED
{
dsc = rtems_fdisk_seg_most_available (&fd->available);
10826a: 8b 43 34 mov 0x34(%ebx),%eax
10826d: e8 e6 f5 ff ff call 107858 <rtems_fdisk_seg_most_available.isra.8>
if (dsc)
108272: 85 c0 test %eax,%eax
108274: 74 22 je 108298 <rtems_fdisk_compact+0x74><== NEVER TAKEN
{
ret = rtems_fdisk_recycle_segment (fd, ssc, dsc, &pages);
108276: 83 ec 0c sub $0xc,%esp
108279: 8d 55 e4 lea -0x1c(%ebp),%edx
10827c: 52 push %edx
10827d: 89 c1 mov %eax,%ecx
10827f: 89 f2 mov %esi,%edx
108281: 89 d8 mov %ebx,%eax
108283: e8 c7 fc ff ff call 107f4f <rtems_fdisk_recycle_segment>
if (ret)
108288: 83 c4 10 add $0x10,%esp
10828b: 85 c0 test %eax,%eax
10828d: 0f 84 1a 01 00 00 je 1083ad <rtems_fdisk_compact+0x189><== ALWAYS TAKEN
108293: e9 46 01 00 00 jmp 1083de <rtems_fdisk_compact+0x1ba><== NOT EXECUTED
return ret;
}
else
{
rtems_fdisk_error ("compacting: starvation");
108298: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10829b: 68 56 e7 12 00 push $0x12e756 <== NOT EXECUTED
1082a0: eb 08 jmp 1082aa <rtems_fdisk_compact+0x86><== NOT EXECUTED
return EIO;
}
}
else
{
rtems_fdisk_error ("compacting: nothing to recycle");
1082a2: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1082a5: 68 6d e7 12 00 push $0x12e76d <== NOT EXECUTED
1082aa: e8 3f f5 ff ff call 1077ee <rtems_fdisk_error> <== NOT EXECUTED
1082af: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
return EIO;
1082b2: b8 05 00 00 00 mov $0x5,%eax <== NOT EXECUTED
1082b7: e9 22 01 00 00 jmp 1083de <rtems_fdisk_compact+0x1ba><== NOT EXECUTED
{
uint32_t dst_pages;
uint32_t segments;
#if RTEMS_FDISK_TRACE
rtems_fdisk_printf (fd, " compacting");
1082bc: 57 push %edi
1082bd: 57 push %edi
1082be: 68 8c e7 12 00 push $0x12e78c
1082c3: 53 push %ebx
1082c4: e8 59 f4 ff ff call 107722 <rtems_fdisk_printf>
#endif
dsc = rtems_fdisk_seg_most_available (&fd->available);
1082c9: 8b 43 34 mov 0x34(%ebx),%eax
1082cc: e8 87 f5 ff ff call 107858 <rtems_fdisk_seg_most_available.isra.8>
1082d1: 89 c7 mov %eax,%edi
if (dsc == 0)
1082d3: 83 c4 10 add $0x10,%esp
1082d6: 85 c0 test %eax,%eax
1082d8: 75 0a jne 1082e4 <rtems_fdisk_compact+0xc0><== ALWAYS TAKEN
{
rtems_fdisk_error ("compacting: no available segments to compact too");
1082da: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1082dd: 68 98 e7 12 00 push $0x12e798 <== NOT EXECUTED
1082e2: eb c6 jmp 1082aa <rtems_fdisk_compact+0x86><== NOT EXECUTED
return EIO;
}
ssc = fd->used.head;
1082e4: 8b 73 40 mov 0x40(%ebx),%esi
dst_pages = rtems_fdisk_seg_pages_available (dsc);
1082e7: e8 b9 f3 ff ff call 1076a5 <rtems_fdisk_seg_pages_available>
1082ec: 89 45 cc mov %eax,-0x34(%ebp)
segments = 0;
pages = 0;
1082ef: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
#if RTEMS_FDISK_TRACE
rtems_fdisk_printf (fd, " dsc:%02d-%03d: most available",
1082f6: ff 77 0c pushl 0xc(%edi)
1082f9: ff 77 08 pushl 0x8(%edi)
1082fc: 68 c9 e7 12 00 push $0x12e7c9
108301: 53 push %ebx
108302: e8 1b f4 ff ff call 107722 <rtems_fdisk_printf>
108307: 8b 45 e4 mov -0x1c(%ebp),%eax
* we handle during one compaction. A lower number means less aggressive
* compaction or less delay when compacting but it may mean the disk
* will fill.
*/
while (ssc &&
10830a: 83 c4 10 add $0x10,%esp
return EIO;
}
ssc = fd->used.head;
dst_pages = rtems_fdisk_seg_pages_available (dsc);
segments = 0;
10830d: 31 d2 xor %edx,%edx
* we handle during one compaction. A lower number means less aggressive
* compaction or less delay when compacting but it may mean the disk
* will fill.
*/
while (ssc &&
10830f: eb 06 jmp 108317 <rtems_fdisk_compact+0xf3>
((pages + ssc->pages_active) < dst_pages) &&
((compacted_segs + segments) < fd->compact_segs))
{
pages += ssc->pages_active;
segments++;
108311: 42 inc %edx
ssc = ssc->next;
108312: 8b 36 mov (%esi),%esi
while (ssc &&
((pages + ssc->pages_active) < dst_pages) &&
((compacted_segs + segments) < fd->compact_segs))
{
pages += ssc->pages_active;
108314: 8b 45 d0 mov -0x30(%ebp),%eax
* we handle during one compaction. A lower number means less aggressive
* compaction or less delay when compacting but it may mean the disk
* will fill.
*/
while (ssc &&
108317: 85 f6 test %esi,%esi
108319: 75 18 jne 108333 <rtems_fdisk_compact+0x10f>
10831b: 89 45 e4 mov %eax,-0x1c(%ebp)
*/
if (!ssc || (pages == 0) || ((compacted_segs + segments) == 1))
{
#if RTEMS_FDISK_TRACE
rtems_fdisk_printf (fd, " nothing to compact");
10831e: 56 push %esi
10831f: 56 push %esi
108320: 68 e8 e7 12 00 push $0x12e7e8
108325: 53 push %ebx
108326: e8 f7 f3 ff ff call 107722 <rtems_fdisk_printf>
#endif
break;
10832b: 83 c4 10 add $0x10,%esp
10832e: e9 97 00 00 00 jmp 1083ca <rtems_fdisk_compact+0x1a6>
* compaction or less delay when compacting but it may mean the disk
* will fill.
*/
while (ssc &&
((pages + ssc->pages_active) < dst_pages) &&
108333: 8b 4e 1c mov 0x1c(%esi),%ecx
108336: 01 c1 add %eax,%ecx
108338: 89 4d d0 mov %ecx,-0x30(%ebp)
* we handle during one compaction. A lower number means less aggressive
* compaction or less delay when compacting but it may mean the disk
* will fill.
*/
while (ssc &&
10833b: 8b 4d cc mov -0x34(%ebp),%ecx
10833e: 39 4d d0 cmp %ecx,-0x30(%ebp)
108341: 0f 83 87 00 00 00 jae 1083ce <rtems_fdisk_compact+0x1aa>
* with the most available number of pages and see if we have
* used segments that will fit. The used queue is sorted on the least
* number of active pages.
*/
static int
rtems_fdisk_compact (rtems_flashdisk* fd)
108347: 8b 4d d4 mov -0x2c(%ebp),%ecx
10834a: 01 d1 add %edx,%ecx
* compaction or less delay when compacting but it may mean the disk
* will fill.
*/
while (ssc &&
((pages + ssc->pages_active) < dst_pages) &&
10834c: 3b 4b 0c cmp 0xc(%ebx),%ecx
10834f: 72 c0 jb 108311 <rtems_fdisk_compact+0xed><== ALWAYS TAKEN
108351: eb 7b jmp 1083ce <rtems_fdisk_compact+0x1aa><== NOT EXECUTED
* We need a source segment and have pages to copy and
* compacting one segment to another is silly. Compaction needs
* to free at least one more segment.
*/
if (!ssc || (pages == 0) || ((compacted_segs + segments) == 1))
108353: 01 55 d4 add %edx,-0x2c(%ebp)
108356: 83 7d d4 01 cmpl $0x1,-0x2c(%ebp)
10835a: 74 c2 je 10831e <rtems_fdisk_compact+0xfa>
#endif
break;
}
#if RTEMS_FDISK_TRACE
rtems_fdisk_printf (fd, " ssc scan: %d-%d: p=%ld, seg=%ld",
10835c: 51 push %ecx
10835d: 51 push %ecx
10835e: 52 push %edx
10835f: 50 push %eax
108360: ff 76 0c pushl 0xc(%esi)
108363: ff 76 08 pushl 0x8(%esi)
108366: 68 fc e7 12 00 push $0x12e7fc
10836b: 53 push %ebx
10836c: e8 b1 f3 ff ff call 107722 <rtems_fdisk_printf>
ssc->device, ssc->segment,
pages, segments);
#endif
rtems_fdisk_segment_queue_remove (&fd->available, dsc);
108371: 83 c4 20 add $0x20,%esp
108374: 89 fa mov %edi,%edx
108376: 8b 45 c8 mov -0x38(%ebp),%eax
108379: e8 98 f2 ff ff call 107616 <rtems_fdisk_segment_queue_remove>
{
ssc = rtems_fdisk_segment_queue_pop_head (&fd->used);
if (ssc)
{
ret = rtems_fdisk_recycle_segment (fd, ssc, dsc, &pages);
10837e: 8d 75 e4 lea -0x1c(%ebp),%esi
/*
* We now copy the pages to the new segment.
*/
while (pages)
108381: eb 22 jmp 1083a5 <rtems_fdisk_compact+0x181>
{
ssc = rtems_fdisk_segment_queue_pop_head (&fd->used);
108383: 8b 45 c4 mov -0x3c(%ebp),%eax
108386: e8 40 f2 ff ff call 1075cb <rtems_fdisk_segment_queue_pop_head>
if (ssc)
10838b: 85 c0 test %eax,%eax
10838d: 74 16 je 1083a5 <rtems_fdisk_compact+0x181><== NEVER TAKEN
{
ret = rtems_fdisk_recycle_segment (fd, ssc, dsc, &pages);
10838f: 83 ec 0c sub $0xc,%esp
108392: 56 push %esi
108393: 89 f9 mov %edi,%ecx
108395: 89 c2 mov %eax,%edx
108397: 89 d8 mov %ebx,%eax
108399: e8 b1 fb ff ff call 107f4f <rtems_fdisk_recycle_segment>
if (ret)
10839e: 83 c4 10 add $0x10,%esp
1083a1: 85 c0 test %eax,%eax
1083a3: 75 39 jne 1083de <rtems_fdisk_compact+0x1ba><== NEVER TAKEN
/*
* We now copy the pages to the new segment.
*/
while (pages)
1083a5: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp)
1083a9: 74 15 je 1083c0 <rtems_fdisk_compact+0x19c>
1083ab: eb d6 jmp 108383 <rtems_fdisk_compact+0x15f>
* compaction or less delay when compacting but it may mean the disk
* will fill.
*/
while (ssc &&
((pages + ssc->pages_active) < dst_pages) &&
1083ad: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)
rtems_fdisk_printf (fd, " ssc scan: %d-%d: p=%ld, seg=%ld",
ssc->device, ssc->segment,
pages, segments);
#endif
rtems_fdisk_segment_queue_remove (&fd->available, dsc);
1083b4: 8d 43 34 lea 0x34(%ebx),%eax
1083b7: 89 45 c8 mov %eax,-0x38(%ebp)
* We now copy the pages to the new segment.
*/
while (pages)
{
ssc = rtems_fdisk_segment_queue_pop_head (&fd->used);
1083ba: 8d 4b 40 lea 0x40(%ebx),%ecx
1083bd: 89 4d c4 mov %ecx,-0x3c(%ebp)
rtems_fdisk_error ("compacting: nothing to recycle");
return EIO;
}
}
while (fd->used.head)
1083c0: 83 7b 40 00 cmpl $0x0,0x40(%ebx)
1083c4: 0f 85 f2 fe ff ff jne 1082bc <rtems_fdisk_compact+0x98>
}
compacted_segs += segments;
}
return 0;
1083ca: 31 c0 xor %eax,%eax
1083cc: eb 10 jmp 1083de <rtems_fdisk_compact+0x1ba>
1083ce: 89 45 e4 mov %eax,-0x1c(%ebp)
* We need a source segment and have pages to copy and
* compacting one segment to another is silly. Compaction needs
* to free at least one more segment.
*/
if (!ssc || (pages == 0) || ((compacted_segs + segments) == 1))
1083d1: 85 c0 test %eax,%eax
1083d3: 0f 85 7a ff ff ff jne 108353 <rtems_fdisk_compact+0x12f>
1083d9: e9 40 ff ff ff jmp 10831e <rtems_fdisk_compact+0xfa>
compacted_segs += segments;
}
return 0;
}
1083de: 8d 65 f4 lea -0xc(%ebp),%esp
1083e1: 5b pop %ebx
1083e2: 5e pop %esi
1083e3: 5f pop %edi
1083e4: 5d pop %ebp
1083e5: c3 ret
00107aaf <rtems_fdisk_erase_segment>:
/**
* Erase the segment.
*/
static int
rtems_fdisk_erase_segment (rtems_flashdisk* fd, rtems_fdisk_segment_ctl* sc)
{
107aaf: 55 push %ebp
107ab0: 89 e5 mov %esp,%ebp
107ab2: 57 push %edi
107ab3: 56 push %esi
107ab4: 53 push %ebx
107ab5: 83 ec 20 sub $0x20,%esp
107ab8: 89 c6 mov %eax,%esi
107aba: 89 d3 mov %edx,%ebx
int ret;
uint32_t device;
uint32_t segment;
const rtems_fdisk_segment_desc* sd;
const rtems_fdisk_driver_handlers* ops;
device = sc->device;
107abc: 8b 7a 08 mov 0x8(%edx),%edi
segment = sc->segment;
107abf: 8b 52 0c mov 0xc(%edx),%edx
static const rtems_fdisk_segment_desc*
rtems_fdisk_seg_descriptor (const rtems_flashdisk* fd,
uint32_t device,
uint32_t segment)
{
return fd->devices[device].segments[segment].descriptor;
107ac2: 6b c7 0c imul $0xc,%edi,%eax
107ac5: 03 46 2c add 0x2c(%esi),%eax
const rtems_fdisk_segment_desc* sd;
const rtems_fdisk_driver_handlers* ops;
device = sc->device;
segment = sc->segment;
sd = rtems_fdisk_seg_descriptor (fd, device, segment);
ops = fd->devices[device].descriptor->flash_ops;
107ac8: 8b 48 08 mov 0x8(%eax),%ecx
ret = ops->erase (sd, device, segment);
107acb: 8b 49 08 mov 0x8(%ecx),%ecx
107ace: 52 push %edx
107acf: 57 push %edi
static const rtems_fdisk_segment_desc*
rtems_fdisk_seg_descriptor (const rtems_flashdisk* fd,
uint32_t device,
uint32_t segment)
{
return fd->devices[device].segments[segment].descriptor;
107ad0: 6b d2 30 imul $0x30,%edx,%edx
107ad3: 03 10 add (%eax),%edx
const rtems_fdisk_driver_handlers* ops;
device = sc->device;
segment = sc->segment;
sd = rtems_fdisk_seg_descriptor (fd, device, segment);
ops = fd->devices[device].descriptor->flash_ops;
ret = ops->erase (sd, device, segment);
107ad5: ff 72 04 pushl 0x4(%edx)
107ad8: ff 51 10 call *0x10(%ecx)
107adb: 89 45 e4 mov %eax,-0x1c(%ebp)
if (ret)
107ade: 83 c4 10 add $0x10,%esp
107ae1: 85 c0 test %eax,%eax
107ae3: 74 39 je 107b1e <rtems_fdisk_erase_segment+0x6f><== ALWAYS TAKEN
{
rtems_fdisk_error (" erase-segment:%02d-%03d: " \
107ae5: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
107ae8: 50 push %eax <== NOT EXECUTED
107ae9: e8 d6 95 01 00 call 1210c4 <strerror> <== NOT EXECUTED
107aee: 59 pop %ecx <== NOT EXECUTED
107aef: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
107af2: 50 push %eax <== NOT EXECUTED
107af3: ff 73 0c pushl 0xc(%ebx) <== NOT EXECUTED
107af6: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
107af9: 68 5f e4 12 00 push $0x12e45f <== NOT EXECUTED
107afe: e8 eb fc ff ff call 1077ee <rtems_fdisk_error> <== NOT EXECUTED
"segment erase failed: %s (%d)",
sc->device, sc->segment, strerror (ret), ret);
sc->failed = true;
107b03: c7 43 28 01 00 00 00 movl $0x1,0x28(%ebx) <== NOT EXECUTED
}
rtems_flashdisk_count = rtems_flashdisk_configuration_size;
return RTEMS_SUCCESSFUL;
}
107b0a: 8b 46 58 mov 0x58(%esi),%eax <== NOT EXECUTED
107b0d: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
107b10: eb 06 jmp 107b18 <rtems_fdisk_erase_segment+0x69><== NOT EXECUTED
{
rtems_fdisk_segment_ctl* it = queue->head;
while (it)
{
if (it == sc)
107b12: 39 d8 cmp %ebx,%eax <== NOT EXECUTED
107b14: 74 4a je 107b60 <rtems_fdisk_erase_segment+0xb1><== NOT EXECUTED
return true;
it = it->next;
107b16: 8b 00 mov (%eax),%eax <== NOT EXECUTED
rtems_fdisk_segment_queue_present (rtems_fdisk_segment_ctl_queue* queue,
rtems_fdisk_segment_ctl* sc)
{
rtems_fdisk_segment_ctl* it = queue->head;
while (it)
107b18: 85 c0 test %eax,%eax <== NOT EXECUTED
107b1a: 75 f6 jne 107b12 <rtems_fdisk_erase_segment+0x63><== NOT EXECUTED
107b1c: eb 38 jmp 107b56 <rtems_fdisk_erase_segment+0xa7><== NOT EXECUTED
if (!rtems_fdisk_segment_queue_present (&fd->failed, sc))
rtems_fdisk_segment_queue_push_tail (&fd->failed, sc);
return ret;
}
fd->erased_blocks += sc->pages;
107b1e: 8b 43 14 mov 0x14(%ebx),%eax
107b21: 01 46 28 add %eax,0x28(%esi)
sc->erased++;
107b24: ff 43 2c incl 0x2c(%ebx)
memset (sc->page_descriptors, 0xff, sc->pages_desc * fd->block_size);
107b27: 8b 4e 14 mov 0x14(%esi),%ecx
107b2a: 0f af 4b 18 imul 0x18(%ebx),%ecx
107b2e: b0 ff mov $0xff,%al
107b30: 8b 7b 10 mov 0x10(%ebx),%edi
107b33: f3 aa rep stos %al,%es:(%edi)
sc->pages_active = 0;
107b35: c7 43 1c 00 00 00 00 movl $0x0,0x1c(%ebx)
sc->pages_used = 0;
107b3c: c7 43 20 00 00 00 00 movl $0x0,0x20(%ebx)
sc->pages_bad = 0;
107b43: c7 43 24 00 00 00 00 movl $0x0,0x24(%ebx)
sc->failed = false;
107b4a: c7 43 28 00 00 00 00 movl $0x0,0x28(%ebx)
/*
* Push to the tail of the available queue. It is a very
* simple type of wear reduction. Every other available
* segment will now get a go.
*/
rtems_fdisk_segment_queue_push_tail (&fd->available, sc);
107b51: 8d 46 34 lea 0x34(%esi),%eax
107b54: eb 03 jmp 107b59 <rtems_fdisk_erase_segment+0xaa>
rtems_fdisk_error (" erase-segment:%02d-%03d: " \
"segment erase failed: %s (%d)",
sc->device, sc->segment, strerror (ret), ret);
sc->failed = true;
if (!rtems_fdisk_segment_queue_present (&fd->failed, sc))
rtems_fdisk_segment_queue_push_tail (&fd->failed, sc);
107b56: 8d 46 58 lea 0x58(%esi),%eax <== NOT EXECUTED
107b59: 89 da mov %ebx,%edx
107b5b: e8 90 fa ff ff call 1075f0 <rtems_fdisk_segment_queue_push_tail>
* segment will now get a go.
*/
rtems_fdisk_segment_queue_push_tail (&fd->available, sc);
return 0;
}
107b60: 8b 45 e4 mov -0x1c(%ebp),%eax
107b63: 8d 65 f4 lea -0xc(%ebp),%esp
107b66: 5b pop %ebx
107b67: 5e pop %esi
107b68: 5f pop %edi
107b69: 5d pop %ebp
107b6a: c3 ret
001077ee <rtems_fdisk_error>:
* @param ... The arguments for the format text.
* @return int The number of bytes written to the output.
*/
static int
rtems_fdisk_error (const char *format, ...)
{
1077ee: 55 push %ebp <== NOT EXECUTED
1077ef: 89 e5 mov %esp,%ebp <== NOT EXECUTED
1077f1: 53 push %ebx <== NOT EXECUTED
1077f2: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
int ret;
va_list args;
va_start (args, format);
1077f5: 8d 5d 0c lea 0xc(%ebp),%ebx <== NOT EXECUTED
fprintf (stderr, "fdisk:error:");
1077f8: a1 40 17 14 00 mov 0x141740,%eax <== NOT EXECUTED
1077fd: ff 70 0c pushl 0xc(%eax) <== NOT EXECUTED
107800: 68 bb e3 12 00 push $0x12e3bb <== NOT EXECUTED
107805: e8 0a 82 01 00 call 11fa14 <fputs> <== NOT EXECUTED
ret = vfprintf (stderr, format, args);
10780a: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
10780d: 53 push %ebx <== NOT EXECUTED
10780e: ff 75 08 pushl 0x8(%ebp) <== NOT EXECUTED
107811: a1 40 17 14 00 mov 0x141740,%eax <== NOT EXECUTED
107816: ff 70 0c pushl 0xc(%eax) <== NOT EXECUTED
107819: e8 fa 08 02 00 call 128118 <vfprintf> <== NOT EXECUTED
10781e: 89 c3 mov %eax,%ebx <== NOT EXECUTED
fprintf (stderr, "\n");
107820: 58 pop %eax <== NOT EXECUTED
107821: 5a pop %edx <== NOT EXECUTED
107822: a1 40 17 14 00 mov 0x141740,%eax <== NOT EXECUTED
107827: ff 70 0c pushl 0xc(%eax) <== NOT EXECUTED
10782a: 6a 0a push $0xa <== NOT EXECUTED
10782c: e8 2b 81 01 00 call 11f95c <fputc> <== NOT EXECUTED
fflush (stderr);
107831: 59 pop %ecx <== NOT EXECUTED
107832: a1 40 17 14 00 mov 0x141740,%eax <== NOT EXECUTED
107837: ff 70 0c pushl 0xc(%eax) <== NOT EXECUTED
10783a: e8 f5 7c 01 00 call 11f534 <fflush> <== NOT EXECUTED
va_end (args);
return ret;
}
10783f: 89 d8 mov %ebx,%eax <== NOT EXECUTED
107841: 8b 5d fc mov -0x4(%ebp),%ebx <== NOT EXECUTED
107844: c9 leave <== NOT EXECUTED
107845: c3 ret <== NOT EXECUTED
001076ba <rtems_fdisk_info>:
* @param ... The arguments for the format text.
* @return int The number of bytes written to the output.
*/
static int
rtems_fdisk_info (const rtems_flashdisk* fd, const char *format, ...)
{
1076ba: 55 push %ebp
1076bb: 89 e5 mov %esp,%ebp
1076bd: 53 push %ebx
1076be: 50 push %eax
int ret = 0;
if (fd->info_level >= 2)
1076bf: 8b 45 08 mov 0x8(%ebp),%eax
1076c2: 83 78 6c 01 cmpl $0x1,0x6c(%eax)
1076c6: 76 51 jbe 107719 <rtems_fdisk_info+0x5f> <== ALWAYS TAKEN
{
va_list args;
va_start (args, format);
1076c8: 8d 5d 10 lea 0x10(%ebp),%ebx <== NOT EXECUTED
fprintf (stdout, "fdisk:");
1076cb: 50 push %eax <== NOT EXECUTED
1076cc: 50 push %eax <== NOT EXECUTED
1076cd: a1 40 17 14 00 mov 0x141740,%eax <== NOT EXECUTED
1076d2: ff 70 08 pushl 0x8(%eax) <== NOT EXECUTED
1076d5: 68 a5 e3 12 00 push $0x12e3a5 <== NOT EXECUTED
1076da: e8 35 83 01 00 call 11fa14 <fputs> <== NOT EXECUTED
ret = vfprintf (stdout, format, args);
1076df: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
1076e2: 53 push %ebx <== NOT EXECUTED
1076e3: ff 75 0c pushl 0xc(%ebp) <== NOT EXECUTED
1076e6: a1 40 17 14 00 mov 0x141740,%eax <== NOT EXECUTED
1076eb: ff 70 08 pushl 0x8(%eax) <== NOT EXECUTED
1076ee: e8 25 0a 02 00 call 128118 <vfprintf> <== NOT EXECUTED
1076f3: 89 c3 mov %eax,%ebx <== NOT EXECUTED
fprintf (stdout, "\n");
1076f5: 5a pop %edx <== NOT EXECUTED
1076f6: 59 pop %ecx <== NOT EXECUTED
1076f7: a1 40 17 14 00 mov 0x141740,%eax <== NOT EXECUTED
1076fc: ff 70 08 pushl 0x8(%eax) <== NOT EXECUTED
1076ff: 6a 0a push $0xa <== NOT EXECUTED
107701: e8 56 82 01 00 call 11f95c <fputc> <== NOT EXECUTED
fflush (stdout);
107706: 58 pop %eax <== NOT EXECUTED
107707: a1 40 17 14 00 mov 0x141740,%eax <== NOT EXECUTED
10770c: ff 70 08 pushl 0x8(%eax) <== NOT EXECUTED
10770f: e8 20 7e 01 00 call 11f534 <fflush> <== NOT EXECUTED
va_end (args);
107714: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
107717: eb 02 jmp 10771b <rtems_fdisk_info+0x61> <== NOT EXECUTED
* @return int The number of bytes written to the output.
*/
static int
rtems_fdisk_info (const rtems_flashdisk* fd, const char *format, ...)
{
int ret = 0;
107719: 31 db xor %ebx,%ebx
fprintf (stdout, "\n");
fflush (stdout);
va_end (args);
}
return ret;
}
10771b: 89 d8 mov %ebx,%eax
10771d: 8b 5d fc mov -0x4(%ebp),%ebx
107720: c9 leave
107721: c3 ret
0010911f <rtems_fdisk_initialize>:
*/
rtems_device_driver
rtems_fdisk_initialize (rtems_device_major_number major,
rtems_device_minor_number minor,
void* arg __attribute__((unused)))
{
10911f: 55 push %ebp
109120: 89 e5 mov %esp,%ebp
109122: 57 push %edi
109123: 56 push %esi
109124: 53 push %ebx
109125: 83 ec 4c sub $0x4c,%esp
const rtems_flashdisk_config* c = rtems_flashdisk_configuration;
rtems_flashdisk* fd;
rtems_status_code sc;
sc = rtems_disk_io_initialize ();
109128: e8 57 e3 ff ff call 107484 <rtems_disk_io_initialize>
if (sc != RTEMS_SUCCESSFUL)
10912d: 85 c0 test %eax,%eax
10912f: 0f 85 3c 04 00 00 jne 109571 <rtems_fdisk_initialize+0x452><== NEVER TAKEN
static rtems_status_code
rtems_fdisk_crc16_gen_factors (uint16_t pattern)
{
uint32_t b;
rtems_fdisk_crc16_factor = malloc (sizeof (uint16_t) * 256);
109135: 83 ec 0c sub $0xc,%esp
109138: 68 00 02 00 00 push $0x200
10913d: e8 be 12 00 00 call 10a400 <malloc>
109142: a3 84 34 15 00 mov %eax,0x153484
if (!rtems_fdisk_crc16_factor)
109147: 83 c4 10 add $0x10,%esp
10914a: 31 c9 xor %ecx,%ecx
10914c: 85 c0 test %eax,%eax
10914e: 75 05 jne 109155 <rtems_fdisk_initialize+0x36><== ALWAYS TAKEN
109150: e9 cd 03 00 00 jmp 109522 <rtems_fdisk_initialize+0x403><== NOT EXECUTED
return RTEMS_NO_MEMORY;
for (b = 0; b < 256; b++)
{
uint32_t i;
uint16_t v = b;
109155: 89 ca mov %ecx,%edx
109157: bb 09 00 00 00 mov $0x9,%ebx
10915c: eb 12 jmp 109170 <rtems_fdisk_initialize+0x51>
for (i = 8; i--;)
v = v & 1 ? (v >> 1) ^ pattern : v >> 1;
10915e: f6 c2 01 test $0x1,%dl
109161: 74 0a je 10916d <rtems_fdisk_initialize+0x4e>
109163: 66 d1 ea shr %dx
109166: 66 81 f2 08 84 xor $0x8408,%dx
10916b: eb 03 jmp 109170 <rtems_fdisk_initialize+0x51>
10916d: 66 d1 ea shr %dx
for (b = 0; b < 256; b++)
{
uint32_t i;
uint16_t v = b;
for (i = 8; i--;)
109170: 4b dec %ebx
109171: 75 eb jne 10915e <rtems_fdisk_initialize+0x3f>
v = v & 1 ? (v >> 1) ^ pattern : v >> 1;
rtems_fdisk_crc16_factor[b] = v & 0xffff;
109173: 66 89 14 48 mov %dx,(%eax,%ecx,2)
rtems_fdisk_crc16_factor = malloc (sizeof (uint16_t) * 256);
if (!rtems_fdisk_crc16_factor)
return RTEMS_NO_MEMORY;
for (b = 0; b < 256; b++)
109177: 41 inc %ecx
109178: 81 f9 00 01 00 00 cmp $0x100,%ecx
10917e: 75 d5 jne 109155 <rtems_fdisk_initialize+0x36>
109180: e9 bb 03 00 00 jmp 109540 <rtems_fdisk_initialize+0x421>
if (!rtems_flashdisks)
return RTEMS_NO_MEMORY;
for (minor = 0; minor < rtems_flashdisk_configuration_size; minor++, c++)
{
char name[] = RTEMS_FLASHDISK_DEVICE_BASE_NAME "a";
109185: be 38 ee 12 00 mov $0x12ee38,%esi
10918a: b9 0a 00 00 00 mov $0xa,%ecx
10918f: 8b 7d d4 mov -0x2c(%ebp),%edi
109192: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
{
union __rtems_dev_t temp;
temp.__overlay.major = _major;
temp.__overlay.minor = _minor;
return temp.device;
109194: 8b 45 08 mov 0x8(%ebp),%eax
109197: 89 45 b0 mov %eax,-0x50(%ebp)
10919a: 8b 55 bc mov -0x44(%ebp),%edx
10919d: 89 55 b4 mov %edx,-0x4c(%ebp)
* @param major Flash disk major device number.
* @param minor Minor device number, not applicable.
* @param arg Initialization argument, not applicable.
*/
rtems_device_driver
rtems_fdisk_initialize (rtems_device_major_number major,
1091a0: 6b da 74 imul $0x74,%edx,%ebx
dev_t dev = rtems_filesystem_make_dev_t (major, minor);
uint32_t device;
uint32_t blocks = 0;
int ret;
fd = &rtems_flashdisks[minor];
1091a3: 03 1d 7c 34 15 00 add 0x15347c,%ebx
name [sizeof(RTEMS_FLASHDISK_DEVICE_BASE_NAME)] += minor;
1091a9: 88 55 e7 mov %dl,-0x19(%ebp)
fd->major = major;
1091ac: 89 03 mov %eax,(%ebx)
fd->minor = minor;
1091ae: 89 53 04 mov %edx,0x4(%ebx)
fd->flags = c->flags;
1091b1: 8b 55 d0 mov -0x30(%ebp),%edx
1091b4: 8b 42 0c mov 0xc(%edx),%eax
1091b7: 89 43 08 mov %eax,0x8(%ebx)
fd->compact_segs = c->compact_segs;
1091ba: 8b 42 14 mov 0x14(%edx),%eax
1091bd: 89 43 0c mov %eax,0xc(%ebx)
fd->avail_compact_segs = c->avail_compact_segs;
1091c0: 8b 42 18 mov 0x18(%edx),%eax
1091c3: 89 43 10 mov %eax,0x10(%ebx)
fd->block_size = c->block_size;
1091c6: 8b 0a mov (%edx),%ecx
1091c8: 89 4d cc mov %ecx,-0x34(%ebp)
1091cb: 89 4b 14 mov %ecx,0x14(%ebx)
fd->unavail_blocks = c->unavail_blocks;
1091ce: 8b 42 10 mov 0x10(%edx),%eax
1091d1: 89 43 20 mov %eax,0x20(%ebx)
fd->info_level = c->info_level;
1091d4: 8b 42 1c mov 0x1c(%edx),%eax
1091d7: 89 43 6c mov %eax,0x6c(%ebx)
for (device = 0; device < c->device_count; device++)
1091da: 8b 4a 04 mov 0x4(%edx),%ecx
1091dd: 89 4d ac mov %ecx,-0x54(%ebp)
for (minor = 0; minor < rtems_flashdisk_configuration_size; minor++, c++)
{
char name[] = RTEMS_FLASHDISK_DEVICE_BASE_NAME "a";
dev_t dev = rtems_filesystem_make_dev_t (major, minor);
uint32_t device;
uint32_t blocks = 0;
1091e0: c7 45 c8 00 00 00 00 movl $0x0,-0x38(%ebp)
fd->avail_compact_segs = c->avail_compact_segs;
fd->block_size = c->block_size;
fd->unavail_blocks = c->unavail_blocks;
fd->info_level = c->info_level;
for (device = 0; device < c->device_count; device++)
1091e7: 31 f6 xor %esi,%esi
1091e9: eb 5e jmp 109249 <rtems_fdisk_initialize+0x12a>
* @param major Flash disk major device number.
* @param minor Minor device number, not applicable.
* @param arg Initialization argument, not applicable.
*/
rtems_device_driver
rtems_fdisk_initialize (rtems_device_major_number major,
1091eb: 6b fe 0c imul $0xc,%esi,%edi
fd->block_size = c->block_size;
fd->unavail_blocks = c->unavail_blocks;
fd->info_level = c->info_level;
for (device = 0; device < c->device_count; device++)
blocks += rtems_fdisk_blocks_in_device (&c->devices[device],
1091ee: 8b 45 d0 mov -0x30(%ebp),%eax
1091f1: 03 78 08 add 0x8(%eax),%edi
rtems_fdisk_blocks_in_device (const rtems_fdisk_device_desc* dd,
uint32_t page_size)
{
uint32_t count = 0;
uint32_t s;
for (s = 0; s < dd->segment_count; s++)
1091f4: 8b 0f mov (%edi),%ecx
1091f6: 89 4d a8 mov %ecx,-0x58(%ebp)
1091f9: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp)
*/
static uint32_t
rtems_fdisk_blocks_in_device (const rtems_fdisk_device_desc* dd,
uint32_t page_size)
{
uint32_t count = 0;
109200: c7 45 b8 00 00 00 00 movl $0x0,-0x48(%ebp)
109207: eb 31 jmp 10923a <rtems_fdisk_initialize+0x11b>
* @param major Flash disk major device number.
* @param minor Minor device number, not applicable.
* @param arg Initialization argument, not applicable.
*/
rtems_device_driver
rtems_fdisk_initialize (rtems_device_major_number major,
109209: 6b 4d c0 0c imul $0xc,-0x40(%ebp),%ecx
{
uint32_t count = 0;
uint32_t s;
for (s = 0; s < dd->segment_count; s++)
{
const rtems_fdisk_segment_desc* sd = &dd->segments[s];
10920d: 03 4f 04 add 0x4(%edi),%ecx
*/
static uint32_t
rtems_fdisk_pages_in_segment (const rtems_fdisk_segment_desc* sd,
uint32_t page_size)
{
return sd->size / page_size;
109210: 8b 41 08 mov 0x8(%ecx),%eax
109213: 31 d2 xor %edx,%edx
109215: f7 75 cc divl -0x34(%ebp)
rtems_fdisk_page_desc_pages (const rtems_fdisk_segment_desc* sd,
uint32_t page_size)
{
uint32_t pages = rtems_fdisk_pages_in_segment (sd, page_size);
uint32_t bytes = pages * sizeof (rtems_fdisk_page_desc);
return ((bytes - 1) / page_size) + 1;
109218: 8d 50 ff lea -0x1(%eax),%edx
10921b: 89 55 c4 mov %edx,-0x3c(%ebp)
10921e: 8d 04 c5 ff ff ff ff lea -0x1(,%eax,8),%eax
109225: 31 d2 xor %edx,%edx
109227: f7 75 cc divl -0x34(%ebp)
uint32_t s;
for (s = 0; s < dd->segment_count; s++)
{
const rtems_fdisk_segment_desc* sd = &dd->segments[s];
count +=
(rtems_fdisk_pages_in_segment (sd, page_size) -
10922a: 29 45 c4 sub %eax,-0x3c(%ebp)
rtems_fdisk_page_desc_pages (sd, page_size)) * sd->count;
10922d: 0f b7 01 movzwl (%ecx),%eax
109230: 0f af 45 c4 imul -0x3c(%ebp),%eax
uint32_t count = 0;
uint32_t s;
for (s = 0; s < dd->segment_count; s++)
{
const rtems_fdisk_segment_desc* sd = &dd->segments[s];
count +=
109234: 01 45 b8 add %eax,-0x48(%ebp)
rtems_fdisk_blocks_in_device (const rtems_fdisk_device_desc* dd,
uint32_t page_size)
{
uint32_t count = 0;
uint32_t s;
for (s = 0; s < dd->segment_count; s++)
109237: ff 45 c0 incl -0x40(%ebp)
10923a: 8b 4d a8 mov -0x58(%ebp),%ecx
10923d: 39 4d c0 cmp %ecx,-0x40(%ebp)
109240: 75 c7 jne 109209 <rtems_fdisk_initialize+0xea>
fd->block_size = c->block_size;
fd->unavail_blocks = c->unavail_blocks;
fd->info_level = c->info_level;
for (device = 0; device < c->device_count; device++)
blocks += rtems_fdisk_blocks_in_device (&c->devices[device],
109242: 8b 4d b8 mov -0x48(%ebp),%ecx
109245: 01 4d c8 add %ecx,-0x38(%ebp)
fd->avail_compact_segs = c->avail_compact_segs;
fd->block_size = c->block_size;
fd->unavail_blocks = c->unavail_blocks;
fd->info_level = c->info_level;
for (device = 0; device < c->device_count; device++)
109248: 46 inc %esi
109249: 3b 75 ac cmp -0x54(%ebp),%esi
10924c: 75 9d jne 1091eb <rtems_fdisk_initialize+0xcc>
c->block_size);
/*
* One copy buffer of a page size.
*/
fd->copy_buffer = malloc (c->block_size);
10924e: 83 ec 0c sub $0xc,%esp
109251: ff 75 cc pushl -0x34(%ebp)
109254: e8 a7 11 00 00 call 10a400 <malloc>
109259: 89 43 68 mov %eax,0x68(%ebx)
if (!fd->copy_buffer)
10925c: 83 c4 10 add $0x10,%esp
10925f: 85 c0 test %eax,%eax
109261: 0f 84 bb 02 00 00 je 109522 <rtems_fdisk_initialize+0x403><== NEVER TAKEN
return RTEMS_NO_MEMORY;
fd->blocks = calloc (blocks, sizeof (rtems_fdisk_block_ctl));
109267: 52 push %edx
109268: 52 push %edx
109269: 6a 08 push $0x8
10926b: ff 75 c8 pushl -0x38(%ebp)
10926e: e8 69 09 00 00 call 109bdc <calloc>
109273: 89 43 18 mov %eax,0x18(%ebx)
if (!fd->blocks)
109276: 83 c4 10 add $0x10,%esp
109279: 85 c0 test %eax,%eax
10927b: 0f 84 a1 02 00 00 je 109522 <rtems_fdisk_initialize+0x403><== NEVER TAKEN
return RTEMS_NO_MEMORY;
fd->block_count = blocks;
109281: 8b 4d c8 mov -0x38(%ebp),%ecx
109284: 89 4b 1c mov %ecx,0x1c(%ebx)
fd->devices = calloc (c->device_count, sizeof (rtems_fdisk_device_ctl));
109287: 50 push %eax
109288: 50 push %eax
109289: 6a 0c push $0xc
10928b: 56 push %esi
10928c: e8 4b 09 00 00 call 109bdc <calloc>
109291: 89 43 2c mov %eax,0x2c(%ebx)
if (!fd->devices)
109294: 83 c4 10 add $0x10,%esp
109297: 85 c0 test %eax,%eax
109299: 0f 84 83 02 00 00 je 109522 <rtems_fdisk_initialize+0x403><== NEVER TAKEN
return RTEMS_NO_MEMORY;
sc = rtems_semaphore_create (rtems_build_name ('F', 'D', 'S', 'K'), 1,
10929f: 83 ec 0c sub $0xc,%esp
1092a2: 8d 43 64 lea 0x64(%ebx),%eax
1092a5: 50 push %eax
1092a6: 6a 00 push $0x0
1092a8: 6a 54 push $0x54
1092aa: 6a 01 push $0x1
1092ac: 68 4b 53 44 46 push $0x4644534b
1092b1: e8 b2 47 00 00 call 10da68 <rtems_semaphore_create>
1092b6: 89 c6 mov %eax,%esi
RTEMS_PRIORITY | RTEMS_BINARY_SEMAPHORE |
RTEMS_INHERIT_PRIORITY, 0, &fd->lock);
if (sc != RTEMS_SUCCESSFUL)
1092b8: 83 c4 20 add $0x20,%esp
1092bb: 85 c0 test %eax,%eax
1092bd: 74 2a je 1092e9 <rtems_fdisk_initialize+0x1ca><== ALWAYS TAKEN
{
rtems_fdisk_error ("disk lock create failed");
1092bf: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1092c2: 68 c5 ed 12 00 push $0x12edc5 <== NOT EXECUTED
1092c7: e8 22 e5 ff ff call 1077ee <rtems_fdisk_error> <== NOT EXECUTED
free (fd->copy_buffer);
1092cc: 58 pop %eax <== NOT EXECUTED
1092cd: ff 73 68 pushl 0x68(%ebx) <== NOT EXECUTED
1092d0: e8 13 0c 00 00 call 109ee8 <free> <== NOT EXECUTED
free (fd->blocks);
1092d5: 58 pop %eax <== NOT EXECUTED
1092d6: ff 73 18 pushl 0x18(%ebx) <== NOT EXECUTED
1092d9: e8 0a 0c 00 00 call 109ee8 <free> <== NOT EXECUTED
free (fd->devices);
1092de: 58 pop %eax <== NOT EXECUTED
1092df: ff 73 2c pushl 0x2c(%ebx) <== NOT EXECUTED
1092e2: e8 01 0c 00 00 call 109ee8 <free> <== NOT EXECUTED
1092e7: eb 6f jmp 109358 <rtems_fdisk_initialize+0x239><== NOT EXECUTED
return sc;
}
sc = rtems_disk_create_phys(dev, c->block_size,
1092e9: 50 push %eax
1092ea: 8d 45 de lea -0x22(%ebp),%eax
1092ed: 50 push %eax
1092ee: 6a 00 push $0x0
1092f0: 68 e6 83 10 00 push $0x1083e6
1092f5: 8b 45 c8 mov -0x38(%ebp),%eax
1092f8: 2b 43 20 sub 0x20(%ebx),%eax
1092fb: 50 push %eax
1092fc: 8b 55 d0 mov -0x30(%ebp),%edx
1092ff: ff 32 pushl (%edx)
109301: ff 75 b4 pushl -0x4c(%ebp)
109304: ff 75 b0 pushl -0x50(%ebp)
109307: e8 9f df ff ff call 1072ab <rtems_disk_create_phys>
10930c: 89 c6 mov %eax,%esi
blocks - fd->unavail_blocks,
rtems_fdisk_ioctl, NULL, name);
if (sc != RTEMS_SUCCESSFUL)
10930e: 83 c4 20 add $0x20,%esp
109311: 85 c0 test %eax,%eax
109313: 0f 84 39 01 00 00 je 109452 <rtems_fdisk_initialize+0x333><== ALWAYS TAKEN
{
rtems_semaphore_delete (fd->lock);
109319: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10931c: ff 73 64 pushl 0x64(%ebx) <== NOT EXECUTED
10931f: e8 e4 48 00 00 call 10dc08 <rtems_semaphore_delete><== NOT EXECUTED
rtems_disk_delete (dev);
109324: 58 pop %eax <== NOT EXECUTED
109325: 5a pop %edx <== NOT EXECUTED
109326: ff 75 b4 pushl -0x4c(%ebp) <== NOT EXECUTED
109329: ff 75 b0 pushl -0x50(%ebp) <== NOT EXECUTED
10932c: e8 80 dd ff ff call 1070b1 <rtems_disk_delete> <== NOT EXECUTED
free (fd->copy_buffer);
109331: 59 pop %ecx <== NOT EXECUTED
109332: ff 73 68 pushl 0x68(%ebx) <== NOT EXECUTED
109335: e8 ae 0b 00 00 call 109ee8 <free> <== NOT EXECUTED
free (fd->blocks);
10933a: 5f pop %edi <== NOT EXECUTED
10933b: ff 73 18 pushl 0x18(%ebx) <== NOT EXECUTED
10933e: e8 a5 0b 00 00 call 109ee8 <free> <== NOT EXECUTED
free (fd->devices);
109343: 58 pop %eax <== NOT EXECUTED
109344: ff 73 2c pushl 0x2c(%ebx) <== NOT EXECUTED
109347: e8 9c 0b 00 00 call 109ee8 <free> <== NOT EXECUTED
rtems_fdisk_error ("disk create phy failed");
10934c: c7 04 24 dd ed 12 00 movl $0x12eddd,(%esp) <== NOT EXECUTED
109353: e8 96 e4 ff ff call 1077ee <rtems_fdisk_error> <== NOT EXECUTED
109358: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
free (fd->blocks);
free (fd->devices);
return sc;
}
sc = rtems_disk_create_phys(dev, c->block_size,
10935b: 89 f0 mov %esi,%eax <== NOT EXECUTED
10935d: e9 0f 02 00 00 jmp 109571 <rtems_fdisk_initialize+0x452><== NOT EXECUTED
* @param major Flash disk major device number.
* @param minor Minor device number, not applicable.
* @param arg Initialization argument, not applicable.
*/
rtems_device_driver
rtems_fdisk_initialize (rtems_device_major_number major,
109362: 6b 4d cc 0c imul $0xc,-0x34(%ebp),%ecx
{
rtems_fdisk_segment_ctl* sc;
uint32_t segment_count;
uint32_t segment;
segment_count = rtems_fdisk_count_segments (&c->devices[device]);
109366: 8b 45 d0 mov -0x30(%ebp),%eax
109369: 8b 70 08 mov 0x8(%eax),%esi
10936c: 01 ce add %ecx,%esi
static uint32_t
rtems_fdisk_count_segments (const rtems_fdisk_device_desc* dd)
{
uint32_t count = 0;
uint32_t segment;
for (segment = 0; segment < dd->segment_count; segment++)
10936e: 8b 16 mov (%esi),%edx
109370: 89 55 ac mov %edx,-0x54(%ebp)
109373: 31 c0 xor %eax,%eax
* Count the segments for a device.
*/
static uint32_t
rtems_fdisk_count_segments (const rtems_fdisk_device_desc* dd)
{
uint32_t count = 0;
109375: c7 45 c4 00 00 00 00 movl $0x0,-0x3c(%ebp)
10937c: eb 0d jmp 10938b <rtems_fdisk_initialize+0x26c>
uint32_t segment;
for (segment = 0; segment < dd->segment_count; segment++)
count += dd->segments[segment].count;
10937e: 6b d0 0c imul $0xc,%eax,%edx
109381: 03 56 04 add 0x4(%esi),%edx
109384: 0f b7 12 movzwl (%edx),%edx
109387: 01 55 c4 add %edx,-0x3c(%ebp)
static uint32_t
rtems_fdisk_count_segments (const rtems_fdisk_device_desc* dd)
{
uint32_t count = 0;
uint32_t segment;
for (segment = 0; segment < dd->segment_count; segment++)
10938a: 40 inc %eax
10938b: 3b 45 ac cmp -0x54(%ebp),%eax
10938e: 75 ee jne 10937e <rtems_fdisk_initialize+0x25f>
uint32_t segment_count;
uint32_t segment;
segment_count = rtems_fdisk_count_segments (&c->devices[device]);
fd->devices[device].segments = calloc (segment_count,
109390: 03 4b 2c add 0x2c(%ebx),%ecx
109393: 89 4d c0 mov %ecx,-0x40(%ebp)
109396: 57 push %edi
109397: 57 push %edi
109398: 6a 30 push $0x30
10939a: ff 75 c4 pushl -0x3c(%ebp)
10939d: e8 3a 08 00 00 call 109bdc <calloc>
1093a2: 8b 4d c0 mov -0x40(%ebp),%ecx
1093a5: 89 01 mov %eax,(%ecx)
sizeof (rtems_fdisk_segment_ctl));
if (!fd->devices[device].segments)
1093a7: 83 c4 10 add $0x10,%esp
1093aa: 85 c0 test %eax,%eax
1093ac: 0f 85 80 00 00 00 jne 109432 <rtems_fdisk_initialize+0x313><== ALWAYS TAKEN
{
rtems_disk_delete (dev);
1093b2: 50 push %eax <== NOT EXECUTED
1093b3: 50 push %eax <== NOT EXECUTED
1093b4: ff 75 b4 pushl -0x4c(%ebp) <== NOT EXECUTED
1093b7: ff 75 b0 pushl -0x50(%ebp) <== NOT EXECUTED
1093ba: e8 f2 dc ff ff call 1070b1 <rtems_disk_delete> <== NOT EXECUTED
rtems_semaphore_delete (fd->lock);
1093bf: 58 pop %eax <== NOT EXECUTED
1093c0: ff 73 64 pushl 0x64(%ebx) <== NOT EXECUTED
1093c3: e8 40 48 00 00 call 10dc08 <rtems_semaphore_delete><== NOT EXECUTED
free (fd->copy_buffer);
1093c8: 58 pop %eax <== NOT EXECUTED
1093c9: ff 73 68 pushl 0x68(%ebx) <== NOT EXECUTED
1093cc: e8 17 0b 00 00 call 109ee8 <free> <== NOT EXECUTED
free (fd->blocks);
1093d1: 5a pop %edx <== NOT EXECUTED
1093d2: ff 73 18 pushl 0x18(%ebx) <== NOT EXECUTED
1093d5: e8 0e 0b 00 00 call 109ee8 <free> <== NOT EXECUTED
free (fd->devices);
1093da: 59 pop %ecx <== NOT EXECUTED
1093db: ff 73 2c pushl 0x2c(%ebx) <== NOT EXECUTED
1093de: e8 05 0b 00 00 call 109ee8 <free> <== NOT EXECUTED
1093e3: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
1093e6: e9 37 01 00 00 jmp 109522 <rtems_fdisk_initialize+0x403><== NOT EXECUTED
* @param major Flash disk major device number.
* @param minor Minor device number, not applicable.
* @param arg Initialization argument, not applicable.
*/
rtems_device_driver
rtems_fdisk_initialize (rtems_device_major_number major,
1093eb: 6b 7d c8 0c imul $0xc,-0x38(%ebp),%edi
for (segment = 0; segment < c->devices[device].segment_count; segment++)
{
const rtems_fdisk_segment_desc* sd;
uint32_t seg_segment;
sd = &c->devices[device].segments[segment];
1093ef: 03 7e 04 add 0x4(%esi),%edi
for (seg_segment = 0; seg_segment < sd->count; seg_segment++, sc++)
1093f2: 0f b7 17 movzwl (%edi),%edx
1093f5: 89 55 b8 mov %edx,-0x48(%ebp)
1093f8: 89 c2 mov %eax,%edx
1093fa: c7 45 a8 00 00 00 00 movl $0x0,-0x58(%ebp)
109401: eb 1d jmp 109420 <rtems_fdisk_initialize+0x301>
{
sc->descriptor = sd;
109403: 89 7a 04 mov %edi,0x4(%edx)
sc->device = device;
109406: 8b 4d cc mov -0x34(%ebp),%ecx
109409: 89 4a 08 mov %ecx,0x8(%edx)
sc->segment = seg_segment;
10940c: 8b 4d a8 mov -0x58(%ebp),%ecx
10940f: 89 4a 0c mov %ecx,0xc(%edx)
sc->erased = 0;
109412: c7 42 2c 00 00 00 00 movl $0x0,0x2c(%edx)
const rtems_fdisk_segment_desc* sd;
uint32_t seg_segment;
sd = &c->devices[device].segments[segment];
for (seg_segment = 0; seg_segment < sd->count; seg_segment++, sc++)
109419: 41 inc %ecx
10941a: 89 4d a8 mov %ecx,-0x58(%ebp)
10941d: 83 c2 30 add $0x30,%edx
109420: 8b 4d b8 mov -0x48(%ebp),%ecx
109423: 39 4d a8 cmp %ecx,-0x58(%ebp)
109426: 72 db jb 109403 <rtems_fdisk_initialize+0x2e4>
* @param major Flash disk major device number.
* @param minor Minor device number, not applicable.
* @param arg Initialization argument, not applicable.
*/
rtems_device_driver
rtems_fdisk_initialize (rtems_device_major_number major,
109428: 6b d1 30 imul $0x30,%ecx,%edx
10942b: 01 d0 add %edx,%eax
return RTEMS_NO_MEMORY;
}
sc = fd->devices[device].segments;
for (segment = 0; segment < c->devices[device].segment_count; segment++)
10942d: ff 45 c8 incl -0x38(%ebp)
109430: eb 07 jmp 109439 <rtems_fdisk_initialize+0x31a>
segment_count = rtems_fdisk_count_segments (&c->devices[device]);
fd->devices[device].segments = calloc (segment_count,
sizeof (rtems_fdisk_segment_ctl));
if (!fd->devices[device].segments)
109432: c7 45 c8 00 00 00 00 movl $0x0,-0x38(%ebp)
return RTEMS_NO_MEMORY;
}
sc = fd->devices[device].segments;
for (segment = 0; segment < c->devices[device].segment_count; segment++)
109439: 8b 55 ac mov -0x54(%ebp),%edx
10943c: 39 55 c8 cmp %edx,-0x38(%ebp)
10943f: 75 aa jne 1093eb <rtems_fdisk_initialize+0x2cc>
sc->segment = seg_segment;
sc->erased = 0;
}
}
fd->devices[device].segment_count = segment_count;
109441: 8b 55 c4 mov -0x3c(%ebp),%edx
109444: 8b 4d c0 mov -0x40(%ebp),%ecx
109447: 89 51 04 mov %edx,0x4(%ecx)
fd->devices[device].descriptor = &c->devices[device];
10944a: 89 71 08 mov %esi,0x8(%ecx)
free (fd->devices);
rtems_fdisk_error ("disk create phy failed");
return sc;
}
for (device = 0; device < c->device_count; device++)
10944d: ff 45 cc incl -0x34(%ebp)
109450: eb 07 jmp 109459 <rtems_fdisk_initialize+0x33a>
}
sc = rtems_disk_create_phys(dev, c->block_size,
blocks - fd->unavail_blocks,
rtems_fdisk_ioctl, NULL, name);
if (sc != RTEMS_SUCCESSFUL)
109452: c7 45 cc 00 00 00 00 movl $0x0,-0x34(%ebp)
free (fd->devices);
rtems_fdisk_error ("disk create phy failed");
return sc;
}
for (device = 0; device < c->device_count; device++)
109459: 8b 4d d0 mov -0x30(%ebp),%ecx
10945c: 8b 41 04 mov 0x4(%ecx),%eax
10945f: 39 45 cc cmp %eax,-0x34(%ebp)
109462: 0f 82 fa fe ff ff jb 109362 <rtems_fdisk_initialize+0x243>
fd->devices[device].segment_count = segment_count;
fd->devices[device].descriptor = &c->devices[device];
}
fd->device_count = c->device_count;
109468: 89 43 30 mov %eax,0x30(%ebx)
ret = rtems_fdisk_recover_block_mappings (fd);
10946b: 89 d8 mov %ebx,%eax
10946d: e8 1d e8 ff ff call 107c8f <rtems_fdisk_recover_block_mappings>
109472: 89 c6 mov %eax,%esi
if (ret)
109474: 85 c0 test %eax,%eax
109476: 74 45 je 1094bd <rtems_fdisk_initialize+0x39e><== ALWAYS TAKEN
{
rtems_disk_delete (dev);
109478: 51 push %ecx <== NOT EXECUTED
109479: 51 push %ecx <== NOT EXECUTED
10947a: ff 75 b4 pushl -0x4c(%ebp) <== NOT EXECUTED
10947d: ff 75 b0 pushl -0x50(%ebp) <== NOT EXECUTED
109480: e8 2c dc ff ff call 1070b1 <rtems_disk_delete> <== NOT EXECUTED
rtems_semaphore_delete (fd->lock);
109485: 5f pop %edi <== NOT EXECUTED
109486: ff 73 64 pushl 0x64(%ebx) <== NOT EXECUTED
109489: e8 7a 47 00 00 call 10dc08 <rtems_semaphore_delete><== NOT EXECUTED
free (fd->copy_buffer);
10948e: 58 pop %eax <== NOT EXECUTED
10948f: ff 73 68 pushl 0x68(%ebx) <== NOT EXECUTED
109492: e8 51 0a 00 00 call 109ee8 <free> <== NOT EXECUTED
free (fd->blocks);
109497: 58 pop %eax <== NOT EXECUTED
109498: ff 73 18 pushl 0x18(%ebx) <== NOT EXECUTED
10949b: e8 48 0a 00 00 call 109ee8 <free> <== NOT EXECUTED
free (fd->devices);
1094a0: 58 pop %eax <== NOT EXECUTED
1094a1: ff 73 2c pushl 0x2c(%ebx) <== NOT EXECUTED
1094a4: e8 3f 0a 00 00 call 109ee8 <free> <== NOT EXECUTED
rtems_fdisk_error ("recovery of disk failed: %s (%d)",
1094a9: 89 34 24 mov %esi,(%esp) <== NOT EXECUTED
1094ac: e8 13 7c 01 00 call 1210c4 <strerror> <== NOT EXECUTED
1094b1: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
1094b4: 56 push %esi <== NOT EXECUTED
1094b5: 50 push %eax <== NOT EXECUTED
1094b6: 68 f4 ed 12 00 push $0x12edf4 <== NOT EXECUTED
1094bb: eb 50 jmp 10950d <rtems_fdisk_initialize+0x3ee><== NOT EXECUTED
strerror (ret), ret);
return ret;
}
ret = rtems_fdisk_compact (fd);
1094bd: 89 d8 mov %ebx,%eax
1094bf: e8 60 ed ff ff call 108224 <rtems_fdisk_compact>
1094c4: 89 c6 mov %eax,%esi
if (ret)
1094c6: 85 c0 test %eax,%eax
1094c8: 74 4f je 109519 <rtems_fdisk_initialize+0x3fa><== ALWAYS TAKEN
{
rtems_disk_delete (dev);
1094ca: 50 push %eax <== NOT EXECUTED
1094cb: 50 push %eax <== NOT EXECUTED
1094cc: ff 75 b4 pushl -0x4c(%ebp) <== NOT EXECUTED
1094cf: ff 75 b0 pushl -0x50(%ebp) <== NOT EXECUTED
1094d2: e8 da db ff ff call 1070b1 <rtems_disk_delete> <== NOT EXECUTED
rtems_semaphore_delete (fd->lock);
1094d7: 58 pop %eax <== NOT EXECUTED
1094d8: ff 73 64 pushl 0x64(%ebx) <== NOT EXECUTED
1094db: e8 28 47 00 00 call 10dc08 <rtems_semaphore_delete><== NOT EXECUTED
free (fd->copy_buffer);
1094e0: 58 pop %eax <== NOT EXECUTED
1094e1: ff 73 68 pushl 0x68(%ebx) <== NOT EXECUTED
1094e4: e8 ff 09 00 00 call 109ee8 <free> <== NOT EXECUTED
free (fd->blocks);
1094e9: 58 pop %eax <== NOT EXECUTED
1094ea: ff 73 18 pushl 0x18(%ebx) <== NOT EXECUTED
1094ed: e8 f6 09 00 00 call 109ee8 <free> <== NOT EXECUTED
free (fd->devices);
1094f2: 5a pop %edx <== NOT EXECUTED
1094f3: ff 73 2c pushl 0x2c(%ebx) <== NOT EXECUTED
1094f6: e8 ed 09 00 00 call 109ee8 <free> <== NOT EXECUTED
rtems_fdisk_error ("compacting of disk failed: %s (%d)",
1094fb: 89 34 24 mov %esi,(%esp) <== NOT EXECUTED
1094fe: e8 c1 7b 01 00 call 1210c4 <strerror> <== NOT EXECUTED
109503: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
109506: 56 push %esi <== NOT EXECUTED
109507: 50 push %eax <== NOT EXECUTED
109508: 68 15 ee 12 00 push $0x12ee15 <== NOT EXECUTED
10950d: e8 dc e2 ff ff call 1077ee <rtems_fdisk_error> <== NOT EXECUTED
strerror (ret), ret);
return ret;
109512: 89 f0 mov %esi,%eax <== NOT EXECUTED
109514: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
109517: eb 58 jmp 109571 <rtems_fdisk_initialize+0x452><== NOT EXECUTED
sizeof (rtems_flashdisk));
if (!rtems_flashdisks)
return RTEMS_NO_MEMORY;
for (minor = 0; minor < rtems_flashdisk_configuration_size; minor++, c++)
109519: ff 45 bc incl -0x44(%ebp)
10951c: 83 45 d0 20 addl $0x20,-0x30(%ebp)
109520: eb 07 jmp 109529 <rtems_fdisk_initialize+0x40a>
/*
* One copy buffer of a page size.
*/
fd->copy_buffer = malloc (c->block_size);
if (!fd->copy_buffer)
return RTEMS_NO_MEMORY;
109522: b8 1a 00 00 00 mov $0x1a,%eax <== NOT EXECUTED
109527: eb 48 jmp 109571 <rtems_fdisk_initialize+0x452><== NOT EXECUTED
sizeof (rtems_flashdisk));
if (!rtems_flashdisks)
return RTEMS_NO_MEMORY;
for (minor = 0; minor < rtems_flashdisk_configuration_size; minor++, c++)
109529: a1 18 f7 13 00 mov 0x13f718,%eax
10952e: 39 45 bc cmp %eax,-0x44(%ebp)
109531: 0f 82 4e fc ff ff jb 109185 <rtems_fdisk_initialize+0x66>
strerror (ret), ret);
return ret;
}
}
rtems_flashdisk_count = rtems_flashdisk_configuration_size;
109537: a3 80 34 15 00 mov %eax,0x153480
return RTEMS_SUCCESSFUL;
10953c: 31 c0 xor %eax,%eax
10953e: eb 31 jmp 109571 <rtems_fdisk_initialize+0x452>
sc = rtems_fdisk_crc16_gen_factors (0x8408);
if (sc != RTEMS_SUCCESSFUL)
return sc;
rtems_flashdisks = calloc (rtems_flashdisk_configuration_size,
109540: 50 push %eax
109541: 50 push %eax
109542: 6a 74 push $0x74
109544: ff 35 18 f7 13 00 pushl 0x13f718
10954a: e8 8d 06 00 00 call 109bdc <calloc>
10954f: a3 7c 34 15 00 mov %eax,0x15347c
sizeof (rtems_flashdisk));
if (!rtems_flashdisks)
109554: 83 c4 10 add $0x10,%esp
109557: 85 c0 test %eax,%eax
109559: 74 c7 je 109522 <rtems_fdisk_initialize+0x403><== NEVER TAKEN
10955b: c7 45 d0 e8 cc 12 00 movl $0x12cce8,-0x30(%ebp)
109562: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp)
return RTEMS_NO_MEMORY;
for (minor = 0; minor < rtems_flashdisk_configuration_size; minor++, c++)
{
char name[] = RTEMS_FLASHDISK_DEVICE_BASE_NAME "a";
109569: 8d 45 de lea -0x22(%ebp),%eax
10956c: 89 45 d4 mov %eax,-0x2c(%ebp)
10956f: eb b8 jmp 109529 <rtems_fdisk_initialize+0x40a>
}
rtems_flashdisk_count = rtems_flashdisk_configuration_size;
return RTEMS_SUCCESSFUL;
}
109571: 8d 65 f4 lea -0xc(%ebp),%esp
109574: 5b pop %ebx
109575: 5e pop %esi
109576: 5f pop %edi
109577: 5d pop %ebp
109578: c3 ret
001083e6 <rtems_fdisk_ioctl>:
* @param argp IOCTL argument.
* @retval The IOCTL return value
*/
static int
rtems_fdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
{
1083e6: 55 push %ebp
1083e7: 89 e5 mov %esp,%ebp
1083e9: 57 push %edi
1083ea: 56 push %esi
1083eb: 53 push %ebx
1083ec: 83 ec 6c sub $0x6c,%esp
1083ef: 8b 5d 0c mov 0xc(%ebp),%ebx
1083f2: 8b 75 10 mov 0x10(%ebp),%esi
dev_t device
)
{
union __rtems_dev_t temp;
temp.device = device;
1083f5: 8b 55 08 mov 0x8(%ebp),%edx
1083f8: 8b 7a 04 mov 0x4(%edx),%edi
dev_t dev = rtems_disk_get_device_identifier (dd);
rtems_device_minor_number minor = rtems_filesystem_dev_minor_t (dev);
rtems_blkdev_request* r = argp;
rtems_status_code sc;
errno = 0;
1083fb: e8 cc 6d 01 00 call 11f1cc <__errno>
108400: c7 00 00 00 00 00 movl $0x0,(%eax)
sc = rtems_semaphore_obtain (rtems_flashdisks[minor].lock, RTEMS_WAIT, 0);
108406: 6b cf 74 imul $0x74,%edi,%ecx
108409: 89 4d b8 mov %ecx,-0x48(%ebp)
10840c: 50 push %eax
10840d: 6a 00 push $0x0
10840f: 6a 00 push $0x0
108411: a1 7c 34 15 00 mov 0x15347c,%eax
108416: ff 74 08 64 pushl 0x64(%eax,%ecx,1)
10841a: e8 79 58 00 00 call 10dc98 <rtems_semaphore_obtain>
if (sc != RTEMS_SUCCESSFUL)
10841f: 83 c4 10 add $0x10,%esp
108422: 85 c0 test %eax,%eax
108424: 74 05 je 10842b <rtems_fdisk_ioctl+0x45><== ALWAYS TAKEN
108426: e9 b8 0c 00 00 jmp 1090e3 <rtems_fdisk_ioctl+0xcfd><== NOT EXECUTED
errno = EIO;
else
{
errno = 0;
10842b: e8 9c 6d 01 00 call 11f1cc <__errno>
108430: c7 00 00 00 00 00 movl $0x0,(%eax)
switch (req)
108436: 81 fb 83 42 00 20 cmp $0x20004283,%ebx
10843c: 0f 84 95 08 00 00 je 108cd7 <rtems_fdisk_ioctl+0x8f1><== NEVER TAKEN
108442: 77 23 ja 108467 <rtems_fdisk_ioctl+0x81>
108444: 81 fb 81 42 00 20 cmp $0x20004281,%ebx
10844a: 0f 84 2b 08 00 00 je 108c7b <rtems_fdisk_ioctl+0x895><== NEVER TAKEN
108450: 0f 87 41 08 00 00 ja 108c97 <rtems_fdisk_ioctl+0x8b1><== NEVER TAKEN
108456: 81 fb 80 42 00 20 cmp $0x20004280,%ebx
10845c: 0f 85 58 0c 00 00 jne 1090ba <rtems_fdisk_ioctl+0xcd4>
108462: e9 71 07 00 00 jmp 108bd8 <rtems_fdisk_ioctl+0x7f2><== NOT EXECUTED
108467: 81 fb 85 42 00 20 cmp $0x20004285,%ebx
10846d: 0f 84 73 09 00 00 je 108de6 <rtems_fdisk_ioctl+0xa00>
108473: 0f 82 5c 09 00 00 jb 108dd5 <rtems_fdisk_ioctl+0x9ef><== NEVER TAKEN
108479: 81 fb 01 42 18 c0 cmp $0xc0184201,%ebx
10847f: 0f 85 35 0c 00 00 jne 1090ba <rtems_fdisk_ioctl+0xcd4><== NEVER TAKEN
{
case RTEMS_BLKIO_REQUEST:
if ((minor >= rtems_flashdisk_count) ||
108485: 3b 3d 80 34 15 00 cmp 0x153480,%edi
10848b: 73 0f jae 10849c <rtems_fdisk_ioctl+0xb6><== NEVER TAKEN
(rtems_flashdisks[minor].device_count == 0))
10848d: a1 7c 34 15 00 mov 0x15347c,%eax
{
errno = 0;
switch (req)
{
case RTEMS_BLKIO_REQUEST:
if ((minor >= rtems_flashdisk_count) ||
108492: 8b 55 b8 mov -0x48(%ebp),%edx
108495: 83 7c 10 30 00 cmpl $0x0,0x30(%eax,%edx,1)
10849a: 75 10 jne 1084ac <rtems_fdisk_ioctl+0xc6><== ALWAYS TAKEN
(rtems_flashdisks[minor].device_count == 0))
{
errno = ENODEV;
10849c: e8 2b 6d 01 00 call 11f1cc <__errno> <== NOT EXECUTED
1084a1: c7 00 13 00 00 00 movl $0x13,(%eax) <== NOT EXECUTED
1084a7: e9 1c 0c 00 00 jmp 1090c8 <rtems_fdisk_ioctl+0xce2><== NOT EXECUTED
}
else
{
switch (r->req)
1084ac: 8b 06 mov (%esi),%eax
1084ae: 85 c0 test %eax,%eax
1084b0: 74 0c je 1084be <rtems_fdisk_ioctl+0xd8>
1084b2: 48 dec %eax
1084b3: 0f 85 0f 07 00 00 jne 108bc8 <rtems_fdisk_ioctl+0x7e2><== NEVER TAKEN
1084b9: e9 4b 02 00 00 jmp 108709 <rtems_fdisk_ioctl+0x323>
{
case RTEMS_BLKDEV_REQ_READ:
errno = rtems_fdisk_read (&rtems_flashdisks[minor], r);
1084be: e8 09 6d 01 00 call 11f1cc <__errno>
1084c3: 89 45 b0 mov %eax,-0x50(%ebp)
1084c6: 8b 4d b8 mov -0x48(%ebp),%ecx
1084c9: 03 0d 7c 34 15 00 add 0x15347c,%ecx
1084cf: 89 4d d4 mov %ecx,-0x2c(%ebp)
* @retval 0 Always. The request done callback contains the status.
*/
static int
rtems_fdisk_read (rtems_flashdisk* fd, rtems_blkdev_request* req)
{
rtems_blkdev_sg_buffer* sg = req->bufs;
1084d2: 8d 46 18 lea 0x18(%esi),%eax
1084d5: 89 45 d0 mov %eax,-0x30(%ebp)
uint32_t buf;
int ret = 0;
for (buf = 0; (ret == 0) && (buf < req->bufnum); buf++, sg++)
1084d8: c7 45 b4 00 00 00 00 movl $0x0,-0x4c(%ebp)
1084df: e9 fc 01 00 00 jmp 1086e0 <rtems_fdisk_ioctl+0x2fa>
{
uint8_t* data;
uint32_t fb;
uint32_t b;
fb = sg->length / fd->block_size;
1084e4: 8b 55 d0 mov -0x30(%ebp),%edx
1084e7: 8b 42 04 mov 0x4(%edx),%eax
1084ea: 8b 4d d4 mov -0x2c(%ebp),%ecx
1084ed: 31 d2 xor %edx,%edx
1084ef: f7 71 14 divl 0x14(%ecx)
1084f2: 89 45 a8 mov %eax,-0x58(%ebp)
data = sg->buffer;
1084f5: 8b 45 d0 mov -0x30(%ebp),%eax
1084f8: 8b 40 08 mov 0x8(%eax),%eax
1084fb: 89 45 c8 mov %eax,-0x38(%ebp)
for (b = 0; b < fb; b++, data += fd->block_size)
1084fe: c7 45 c4 00 00 00 00 movl $0x0,-0x3c(%ebp)
108505: e9 bd 01 00 00 jmp 1086c7 <rtems_fdisk_ioctl+0x2e1>
{
ret = rtems_fdisk_read_block (fd, sg->block + b, data);
10850a: 8b 7d c4 mov -0x3c(%ebp),%edi
10850d: 8b 55 d0 mov -0x30(%ebp),%edx
108510: 03 3a add (%edx),%edi
rtems_fdisk_block_ctl* bc;
rtems_fdisk_segment_ctl* sc;
rtems_fdisk_page_desc* pd;
#if RTEMS_FDISK_TRACE
rtems_fdisk_info (fd, "read-block:%d", block);
108512: 51 push %ecx
108513: 57 push %edi
108514: 68 28 e8 12 00 push $0x12e828
108519: ff 75 d4 pushl -0x2c(%ebp)
10851c: e8 99 f1 ff ff call 1076ba <rtems_fdisk_info>
/*
* Broken out to allow info messages when testing.
*/
if (block >= (fd->block_count - fd->unavail_blocks))
108521: 8b 4d d4 mov -0x2c(%ebp),%ecx
108524: 8b 41 1c mov 0x1c(%ecx),%eax
108527: 2b 41 20 sub 0x20(%ecx),%eax
10852a: 83 c4 10 add $0x10,%esp
10852d: 39 c7 cmp %eax,%edi
10852f: 72 0d jb 10853e <rtems_fdisk_ioctl+0x158><== ALWAYS TAKEN
{
rtems_fdisk_error ("read-block: block out of range: %d", block);
108531: 52 push %edx <== NOT EXECUTED
108532: 52 push %edx <== NOT EXECUTED
108533: 57 push %edi <== NOT EXECUTED
108534: 68 36 e8 12 00 push $0x12e836 <== NOT EXECUTED
108539: e9 43 01 00 00 jmp 108681 <rtems_fdisk_ioctl+0x29b><== NOT EXECUTED
return EIO;
}
bc = &fd->blocks[block];
10853e: 8b 55 d4 mov -0x2c(%ebp),%edx
108541: 8b 42 18 mov 0x18(%edx),%eax
108544: 8d 04 f8 lea (%eax,%edi,8),%eax
108547: 89 45 cc mov %eax,-0x34(%ebp)
if (!bc->segment)
10854a: 8b 18 mov (%eax),%ebx
10854c: 85 db test %ebx,%ebx
10854e: 75 22 jne 108572 <rtems_fdisk_ioctl+0x18c>
{
#if RTEMS_FDISK_TRACE
rtems_fdisk_info (fd, "read-block: no segment mapping: %d", block);
108550: 50 push %eax
108551: 57 push %edi
108552: 68 59 e8 12 00 push $0x12e859
108557: 52 push %edx
108558: e8 5d f1 ff ff call 1076ba <rtems_fdisk_info>
#endif
memset (buffer, 0xff, fd->block_size);
10855d: 8b 45 d4 mov -0x2c(%ebp),%eax
108560: 8b 48 14 mov 0x14(%eax),%ecx
108563: b0 ff mov $0xff,%al
108565: 8b 7d c8 mov -0x38(%ebp),%edi
108568: f3 aa rep stos %al,%es:(%edi)
10856a: 83 c4 10 add $0x10,%esp
10856d: e9 8a 0b 00 00 jmp 1090fc <rtems_fdisk_ioctl+0xd16>
return 0;
}
sc = fd->blocks[block].segment;
pd = &sc->page_descriptors[bc->page];
108572: 8b 55 cc mov -0x34(%ebp),%edx
108575: 8b 42 04 mov 0x4(%edx),%eax
108578: 8b 53 10 mov 0x10(%ebx),%edx
10857b: 8d 14 c2 lea (%edx,%eax,8),%edx
10857e: 89 55 c0 mov %edx,-0x40(%ebp)
#if RTEMS_FDISK_TRACE
rtems_fdisk_info (fd,
108581: 8b 4a 04 mov 0x4(%edx),%ecx
108584: 89 4d bc mov %ecx,-0x44(%ebp)
108587: 0f b7 12 movzwl (%edx),%edx
10858a: 89 55 ac mov %edx,-0x54(%ebp)
10858d: 8b 55 c0 mov -0x40(%ebp),%edx
108590: 0f b7 4a 02 movzwl 0x2(%edx),%ecx
108594: 83 3b 00 cmpl $0x0,(%ebx)
108597: 74 07 je 1085a0 <rtems_fdisk_ioctl+0x1ba>
108599: ba 22 08 13 00 mov $0x130822,%edx
10859e: eb 05 jmp 1085a5 <rtems_fdisk_ioctl+0x1bf>
1085a0: ba 97 e4 12 00 mov $0x12e497,%edx
1085a5: 83 ec 08 sub $0x8,%esp
1085a8: ff 75 bc pushl -0x44(%ebp)
1085ab: ff 75 ac pushl -0x54(%ebp)
1085ae: 51 push %ecx
1085af: 52 push %edx
1085b0: ff 73 24 pushl 0x24(%ebx)
1085b3: ff 73 20 pushl 0x20(%ebx)
1085b6: ff 73 1c pushl 0x1c(%ebx)
1085b9: ff 73 14 pushl 0x14(%ebx)
1085bc: 50 push %eax
1085bd: ff 73 0c pushl 0xc(%ebx)
1085c0: ff 73 08 pushl 0x8(%ebx)
1085c3: 57 push %edi
1085c4: 68 7c e8 12 00 push $0x12e87c
1085c9: ff 75 d4 pushl -0x2c(%ebp)
1085cc: e8 e9 f0 ff ff call 1076ba <rtems_fdisk_info>
}
rtems_flashdisk_count = rtems_flashdisk_configuration_size;
return RTEMS_SUCCESSFUL;
}
1085d1: 8b 4d c0 mov -0x40(%ebp),%ecx
1085d4: 66 8b 41 02 mov 0x2(%ecx),%ax
sc->pages, sc->pages_active, sc->pages_used, sc->pages_bad,
sc->next ? "set" : "null",
pd->flags, pd->crc, pd->block);
#endif
if (rtems_fdisk_page_desc_flags_set (pd, RTEMS_FDISK_PAGE_ACTIVE))
1085d8: 83 c4 40 add $0x40,%esp
1085db: a8 01 test $0x1,%al
1085dd: 0f 85 c2 00 00 00 jne 1086a5 <rtems_fdisk_ioctl+0x2bf><== NEVER TAKEN
{
if (rtems_fdisk_page_desc_flags_clear (pd, RTEMS_FDISK_PAGE_USED))
1085e3: a8 02 test $0x2,%al
1085e5: 0f 84 a3 00 00 00 je 10868e <rtems_fdisk_ioctl+0x2a8><== NEVER TAKEN
rtems_fdisk_segment_ctl* sc,
uint32_t page,
void* buffer)
{
return rtems_fdisk_seg_read (fd, sc,
page * fd->block_size, buffer, fd->block_size);
1085eb: 8b 55 d4 mov -0x2c(%ebp),%edx
1085ee: 8b 42 14 mov 0x14(%edx),%eax
rtems_fdisk_seg_read_page (const rtems_flashdisk* fd,
rtems_fdisk_segment_ctl* sc,
uint32_t page,
void* buffer)
{
return rtems_fdisk_seg_read (fd, sc,
1085f1: 51 push %ecx
1085f2: 51 push %ecx
/*
* We use the segment page offset not the page number used in the
* driver. This skips the page descriptors.
*/
int ret = rtems_fdisk_seg_read_page (fd, sc,
1085f3: 8b 4b 18 mov 0x18(%ebx),%ecx
1085f6: 8b 55 cc mov -0x34(%ebp),%edx
1085f9: 03 4a 04 add 0x4(%edx),%ecx
rtems_fdisk_seg_read_page (const rtems_flashdisk* fd,
rtems_fdisk_segment_ctl* sc,
uint32_t page,
void* buffer)
{
return rtems_fdisk_seg_read (fd, sc,
1085fc: 0f af c8 imul %eax,%ecx
1085ff: 50 push %eax
108600: ff 75 c8 pushl -0x38(%ebp)
108603: 89 da mov %ebx,%edx
108605: 8b 45 d4 mov -0x2c(%ebp),%eax
108608: e8 7a f2 ff ff call 107887 <rtems_fdisk_seg_read>
* driver. This skips the page descriptors.
*/
int ret = rtems_fdisk_seg_read_page (fd, sc,
bc->page + sc->pages_desc, buffer);
if (ret)
10860d: 83 c4 10 add $0x10,%esp
108610: 85 c0 test %eax,%eax
108612: 74 2f je 108643 <rtems_fdisk_ioctl+0x25d><== ALWAYS TAKEN
{
#if RTEMS_FDISK_TRACE
rtems_fdisk_info (fd,
108614: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
108617: 50 push %eax <== NOT EXECUTED
108618: 89 45 90 mov %eax,-0x70(%ebp) <== NOT EXECUTED
10861b: e8 a4 8a 01 00 call 1210c4 <strerror> <== NOT EXECUTED
108620: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
108623: 8b 55 90 mov -0x70(%ebp),%edx <== NOT EXECUTED
108626: 52 push %edx <== NOT EXECUTED
108627: 50 push %eax <== NOT EXECUTED
108628: 8b 4d cc mov -0x34(%ebp),%ecx <== NOT EXECUTED
10862b: ff 71 04 pushl 0x4(%ecx) <== NOT EXECUTED
10862e: ff 73 0c pushl 0xc(%ebx) <== NOT EXECUTED
108631: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
108634: 68 c3 e8 12 00 push $0x12e8c3 <== NOT EXECUTED
108639: ff 75 d4 pushl -0x2c(%ebp) <== NOT EXECUTED
10863c: e8 79 f0 ff ff call 1076ba <rtems_fdisk_info> <== NOT EXECUTED
108641: eb 7c jmp 1086bf <rtems_fdisk_ioctl+0x2d9><== NOT EXECUTED
{
uint16_t cs = 0xffff;
uint32_t i;
for (i = 0; i < page_size; i++, buffer++)
cs = rtems_fdisk_calc_crc16 (cs, *buffer);
108643: 8b 1d 84 34 15 00 mov 0x153484,%ebx
* @param req IOCTL request code.
* @param argp IOCTL argument.
* @retval The IOCTL return value
*/
static int
rtems_fdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
108649: 8b 4d c8 mov -0x38(%ebp),%ecx
10864c: 8b 45 d4 mov -0x2c(%ebp),%eax
10864f: 03 48 14 add 0x14(%eax),%ecx
108652: 8b 55 c8 mov -0x38(%ebp),%edx
* Calculate the checksum of a page in a segment.
*/
static uint16_t
rtems_fdisk_page_checksum (const uint8_t* buffer, uint32_t page_size)
{
uint16_t cs = 0xffff;
108655: b8 ff ff 00 00 mov $0xffff,%eax
10865a: eb 0a jmp 108666 <rtems_fdisk_ioctl+0x280>
uint32_t i;
for (i = 0; i < page_size; i++, buffer++)
cs = rtems_fdisk_calc_crc16 (cs, *buffer);
10865c: 32 02 xor (%edx),%al
10865e: 0f b6 c0 movzbl %al,%eax
108661: 0f b7 04 43 movzwl (%ebx,%eax,2),%eax
rtems_fdisk_page_checksum (const uint8_t* buffer, uint32_t page_size)
{
uint16_t cs = 0xffff;
uint32_t i;
for (i = 0; i < page_size; i++, buffer++)
108665: 42 inc %edx
108666: 39 ca cmp %ecx,%edx
108668: 75 f2 jne 10865c <rtems_fdisk_ioctl+0x276>
return ret;
}
cs = rtems_fdisk_page_checksum (buffer, fd->block_size);
if (cs == pd->crc)
10866a: 8b 4d c0 mov -0x40(%ebp),%ecx
10866d: 0f b7 11 movzwl (%ecx),%edx
108670: 66 39 d0 cmp %dx,%ax
108673: 0f 84 83 0a 00 00 je 1090fc <rtems_fdisk_ioctl+0xd16>
return 0;
rtems_fdisk_error ("read-block: crc failure: %d: buffer:%04x page:%04x",
108679: 52 push %edx <== NOT EXECUTED
10867a: 50 push %eax <== NOT EXECUTED
10867b: 57 push %edi <== NOT EXECUTED
10867c: 68 f8 e8 12 00 push $0x12e8f8 <== NOT EXECUTED
108681: e8 68 f1 ff ff call 1077ee <rtems_fdisk_error> <== NOT EXECUTED
108686: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
108689: e9 7f 0a 00 00 jmp 10910d <rtems_fdisk_ioctl+0xd27><== NOT EXECUTED
block, cs, pd->crc);
}
else
{
rtems_fdisk_error ("read-block: block points to used page: %d: %d-%d-%d",
10868e: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
108691: 8b 45 cc mov -0x34(%ebp),%eax <== NOT EXECUTED
108694: ff 70 04 pushl 0x4(%eax) <== NOT EXECUTED
108697: ff 73 0c pushl 0xc(%ebx) <== NOT EXECUTED
10869a: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
10869d: 57 push %edi <== NOT EXECUTED
10869e: 68 2b e9 12 00 push $0x12e92b <== NOT EXECUTED
1086a3: eb 15 jmp 1086ba <rtems_fdisk_ioctl+0x2d4><== NOT EXECUTED
block, sc->device, sc->segment, bc->page);
}
}
else
{
rtems_fdisk_error ("read-block: block page not active: %d: %d-%d-%d",
1086a5: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1086a8: 8b 55 cc mov -0x34(%ebp),%edx <== NOT EXECUTED
1086ab: ff 72 04 pushl 0x4(%edx) <== NOT EXECUTED
1086ae: ff 73 0c pushl 0xc(%ebx) <== NOT EXECUTED
1086b1: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
1086b4: 57 push %edi <== NOT EXECUTED
1086b5: 68 5f e9 12 00 push $0x12e95f <== NOT EXECUTED
1086ba: e8 2f f1 ff ff call 1077ee <rtems_fdisk_error> <== NOT EXECUTED
1086bf: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
1086c2: e9 46 0a 00 00 jmp 10910d <rtems_fdisk_ioctl+0xd27><== NOT EXECUTED
uint8_t* data;
uint32_t fb;
uint32_t b;
fb = sg->length / fd->block_size;
data = sg->buffer;
for (b = 0; b < fb; b++, data += fd->block_size)
1086c7: 8b 45 a8 mov -0x58(%ebp),%eax
1086ca: 39 45 c4 cmp %eax,-0x3c(%ebp)
1086cd: 0f 85 37 fe ff ff jne 10850a <rtems_fdisk_ioctl+0x124>
1086d3: 31 c0 xor %eax,%eax
{
rtems_blkdev_sg_buffer* sg = req->bufs;
uint32_t buf;
int ret = 0;
for (buf = 0; (ret == 0) && (buf < req->bufnum); buf++, sg++)
1086d5: ff 45 b4 incl -0x4c(%ebp)
1086d8: 83 45 d0 10 addl $0x10,-0x30(%ebp)
1086dc: 85 c0 test %eax,%eax
1086de: 75 10 jne 1086f0 <rtems_fdisk_ioctl+0x30a><== NEVER TAKEN
1086e0: 8b 55 b4 mov -0x4c(%ebp),%edx
1086e3: 3b 56 10 cmp 0x10(%esi),%edx
1086e6: 0f 82 f8 fd ff ff jb 1084e4 <rtems_fdisk_ioctl+0xfe>
if (ret)
break;
}
}
req->status = ret ? RTEMS_IO_ERROR : RTEMS_SUCCESSFUL;
1086ec: 31 c0 xor %eax,%eax
1086ee: eb 05 jmp 1086f5 <rtems_fdisk_ioctl+0x30f>
1086f0: b8 1b 00 00 00 mov $0x1b,%eax <== NOT EXECUTED
1086f5: 89 46 0c mov %eax,0xc(%esi)
req->req_done (req->done_arg, req->status);
1086f8: 52 push %edx
1086f9: 52 push %edx
1086fa: 50 push %eax
1086fb: ff 76 08 pushl 0x8(%esi)
1086fe: ff 56 04 call *0x4(%esi)
else
{
switch (r->req)
{
case RTEMS_BLKDEV_REQ_READ:
errno = rtems_fdisk_read (&rtems_flashdisks[minor], r);
108701: 8b 45 b0 mov -0x50(%ebp),%eax
108704: e9 b4 04 00 00 jmp 108bbd <rtems_fdisk_ioctl+0x7d7>
break;
case RTEMS_BLKDEV_REQ_WRITE:
errno = rtems_fdisk_write (&rtems_flashdisks[minor], r);
108709: e8 be 6a 01 00 call 11f1cc <__errno>
10870e: 89 45 a4 mov %eax,-0x5c(%ebp)
108711: 8b 7d b8 mov -0x48(%ebp),%edi
108714: 03 3d 7c 34 15 00 add 0x15347c,%edi
* @retval 0 Always. The request done callback contains the status.
*/
static int
rtems_fdisk_write (rtems_flashdisk* fd, rtems_blkdev_request* req)
{
rtems_blkdev_sg_buffer* sg = req->bufs;
10871a: 8d 56 18 lea 0x18(%esi),%edx
10871d: 89 55 c4 mov %edx,-0x3c(%ebp)
uint32_t buf;
int ret = 0;
for (buf = 0; (ret == 0) && (buf < req->bufnum); buf++, sg++)
108720: c7 45 b0 00 00 00 00 movl $0x0,-0x50(%ebp)
rtems_fdisk_compact (fd);
/*
* Get the next avaliable segment.
*/
sc = rtems_fdisk_segment_queue_pop_head (&fd->available);
108727: 8d 4f 34 lea 0x34(%edi),%ecx
10872a: 89 4d a8 mov %ecx,-0x58(%ebp)
10872d: e9 67 04 00 00 jmp 108b99 <rtems_fdisk_ioctl+0x7b3>
for (buf = 0; (ret == 0) && (buf < req->bufnum); buf++, sg++)
{
uint8_t* data;
uint32_t fb;
uint32_t b;
fb = sg->length / fd->block_size;
108732: 8b 55 c4 mov -0x3c(%ebp),%edx
108735: 8b 42 04 mov 0x4(%edx),%eax
108738: 31 d2 xor %edx,%edx
10873a: f7 77 14 divl 0x14(%edi)
10873d: 89 45 98 mov %eax,-0x68(%ebp)
data = sg->buffer;
108740: 8b 4d c4 mov -0x3c(%ebp),%ecx
108743: 8b 49 08 mov 0x8(%ecx),%ecx
108746: 89 4d c0 mov %ecx,-0x40(%ebp)
for (b = 0; b < fb; b++, data += fd->block_size)
108749: c7 45 b4 00 00 00 00 movl $0x0,-0x4c(%ebp)
108750: e9 2b 04 00 00 jmp 108b80 <rtems_fdisk_ioctl+0x79a>
{
ret = rtems_fdisk_write_block (fd, sg->block + b, data);
108755: 8b 55 b4 mov -0x4c(%ebp),%edx
108758: 8b 45 c4 mov -0x3c(%ebp),%eax
10875b: 03 10 add (%eax),%edx
10875d: 89 55 d4 mov %edx,-0x2c(%ebp)
rtems_fdisk_page_desc* pd;
uint32_t page;
int ret;
#if RTEMS_FDISK_TRACE
rtems_fdisk_info (fd, "write-block:%d", block);
108760: 50 push %eax
108761: 52 push %edx
108762: 68 8f e9 12 00 push $0x12e98f
108767: 57 push %edi
108768: e8 4d ef ff ff call 1076ba <rtems_fdisk_info>
/*
* Broken out to allow info messages when testing.
*/
if (block >= (fd->block_count - fd->unavail_blocks))
10876d: 8b 47 1c mov 0x1c(%edi),%eax
108770: 2b 47 20 sub 0x20(%edi),%eax
108773: 83 c4 10 add $0x10,%esp
108776: 39 45 d4 cmp %eax,-0x2c(%ebp)
108779: 72 14 jb 10878f <rtems_fdisk_ioctl+0x3a9><== ALWAYS TAKEN
{
rtems_fdisk_error ("write-block: block out of range: %d", block);
10877b: 50 push %eax <== NOT EXECUTED
10877c: 50 push %eax <== NOT EXECUTED
10877d: ff 75 d4 pushl -0x2c(%ebp) <== NOT EXECUTED
108780: 68 9e e9 12 00 push $0x12e99e <== NOT EXECUTED
108785: e8 64 f0 ff ff call 1077ee <rtems_fdisk_error> <== NOT EXECUTED
10878a: e9 da 03 00 00 jmp 108b69 <rtems_fdisk_ioctl+0x783><== NOT EXECUTED
return EIO;
}
bc = &fd->blocks[block];
10878f: 8b 47 18 mov 0x18(%edi),%eax
108792: 8b 4d d4 mov -0x2c(%ebp),%ecx
108795: 8d 04 c8 lea (%eax,%ecx,8),%eax
108798: 89 45 c8 mov %eax,-0x38(%ebp)
/*
* Does the page exist in flash ?
*/
if (bc->segment)
10879b: 8b 18 mov (%eax),%ebx
10879d: 85 db test %ebx,%ebx
10879f: 0f 84 9e 01 00 00 je 108943 <rtems_fdisk_ioctl+0x55d>
{
sc = bc->segment;
pd = &sc->page_descriptors[bc->page];
1087a5: 8b 53 10 mov 0x10(%ebx),%edx
1087a8: 89 55 a0 mov %edx,-0x60(%ebp)
1087ab: 8b 48 04 mov 0x4(%eax),%ecx
1087ae: 89 4d ac mov %ecx,-0x54(%ebp)
#if RTEMS_FDISK_TRACE
rtems_fdisk_info (fd, " write:%02d-%03d-%03d: flag used",
1087b1: 83 ec 0c sub $0xc,%esp
1087b4: 51 push %ecx
1087b5: ff 73 0c pushl 0xc(%ebx)
1087b8: ff 73 08 pushl 0x8(%ebx)
1087bb: 68 c2 e9 12 00 push $0x12e9c2
1087c0: 57 push %edi
1087c1: e8 f4 ee ff ff call 1076ba <rtems_fdisk_info>
#endif
/*
* The page exists in flash so see if the page has been changed.
*/
if (rtems_fdisk_seg_verify_page (fd, sc->device, sc->segment,
1087c6: 8b 53 0c mov 0xc(%ebx),%edx
1087c9: 89 55 cc mov %edx,-0x34(%ebp)
1087cc: 8b 4b 08 mov 0x8(%ebx),%ecx
1087cf: 89 4d d0 mov %ecx,-0x30(%ebp)
uint32_t segment,
uint32_t page,
const void* buffer)
{
return rtems_fdisk_seg_verify (fd, device, segment,
page * fd->block_size, buffer, fd->block_size);
1087d2: 8b 57 14 mov 0x14(%edi),%edx
1087d5: 89 55 bc mov %edx,-0x44(%ebp)
#endif
/*
* The page exists in flash so see if the page has been changed.
*/
if (rtems_fdisk_seg_verify_page (fd, sc->device, sc->segment,
1087d8: 8b 53 18 mov 0x18(%ebx),%edx
1087db: 8b 4d c8 mov -0x38(%ebp),%ecx
1087de: 03 51 04 add 0x4(%ecx),%edx
uint32_t device,
uint32_t segment,
uint32_t page,
const void* buffer)
{
return rtems_fdisk_seg_verify (fd, device, segment,
1087e1: 0f af 55 bc imul -0x44(%ebp),%edx
static const rtems_fdisk_segment_desc*
rtems_fdisk_seg_descriptor (const rtems_flashdisk* fd,
uint32_t device,
uint32_t segment)
{
return fd->devices[device].segments[segment].descriptor;
1087e5: 6b 45 d0 0c imul $0xc,-0x30(%ebp),%eax
1087e9: 03 47 2c add 0x2c(%edi),%eax
1087ec: 6b 4d cc 30 imul $0x30,-0x34(%ebp),%ecx
1087f0: 03 08 add (%eax),%ecx
1087f2: 8b 49 04 mov 0x4(%ecx),%ecx
1087f5: 89 4d 9c mov %ecx,-0x64(%ebp)
uint32_t size)
{
const rtems_fdisk_segment_desc* sd;
const rtems_fdisk_driver_handlers* ops;
sd = rtems_fdisk_seg_descriptor (fd, device, segment);
ops = fd->devices[device].descriptor->flash_ops;
1087f8: 8b 40 08 mov 0x8(%eax),%eax
1087fb: 8b 48 08 mov 0x8(%eax),%ecx
#if RTEMS_FDISK_TRACE
rtems_fdisk_printf (fd, " seg-verify: %02d-%03d: o=%08x s=%d",
1087fe: 83 c4 18 add $0x18,%esp
108801: ff 75 bc pushl -0x44(%ebp)
108804: 52 push %edx
108805: ff 75 cc pushl -0x34(%ebp)
108808: ff 75 d0 pushl -0x30(%ebp)
10880b: 68 e3 e9 12 00 push $0x12e9e3
108810: 57 push %edi
108811: 89 55 90 mov %edx,-0x70(%ebp)
108814: 89 4d 94 mov %ecx,-0x6c(%ebp)
108817: e8 06 ef ff ff call 107722 <rtems_fdisk_printf>
device, segment, offset, size);
#endif
return ops->verify (sd, device, segment, offset, buffer, size);
10881c: 83 c4 18 add $0x18,%esp
10881f: ff 75 bc pushl -0x44(%ebp)
108822: ff 75 c0 pushl -0x40(%ebp)
108825: 8b 55 90 mov -0x70(%ebp),%edx
108828: 52 push %edx
108829: ff 75 cc pushl -0x34(%ebp)
10882c: ff 75 d0 pushl -0x30(%ebp)
10882f: ff 75 9c pushl -0x64(%ebp)
108832: 8b 4d 94 mov -0x6c(%ebp),%ecx
108835: ff 51 0c call *0xc(%ecx)
#endif
/*
* The page exists in flash so see if the page has been changed.
*/
if (rtems_fdisk_seg_verify_page (fd, sc->device, sc->segment,
108838: 83 c4 20 add $0x20,%esp
10883b: 85 c0 test %eax,%eax
10883d: 75 24 jne 108863 <rtems_fdisk_ioctl+0x47d>
bc->page + sc->pages_desc, buffer) == 0)
{
#if RTEMS_FDISK_TRACE
rtems_fdisk_info (fd, "write-block:%d=>%02d-%03d-%03d: page verified",
10883f: 50 push %eax
108840: 50 push %eax
108841: 8b 45 c8 mov -0x38(%ebp),%eax
108844: ff 70 04 pushl 0x4(%eax)
108847: ff 73 0c pushl 0xc(%ebx)
10884a: ff 73 08 pushl 0x8(%ebx)
10884d: ff 75 d4 pushl -0x2c(%ebp)
108850: 68 08 ea 12 00 push $0x12ea08
108855: 57 push %edi
108856: e8 5f ee ff ff call 1076ba <rtems_fdisk_info>
10885b: 83 c4 20 add $0x20,%esp
10885e: e9 14 03 00 00 jmp 108b77 <rtems_fdisk_ioctl+0x791>
* Does the page exist in flash ?
*/
if (bc->segment)
{
sc = bc->segment;
pd = &sc->page_descriptors[bc->page];
108863: 8b 55 ac mov -0x54(%ebp),%edx
108866: 8b 4d a0 mov -0x60(%ebp),%ecx
108869: 8d 14 d1 lea (%ecx,%edx,8),%edx
10886c: 89 55 cc mov %edx,-0x34(%ebp)
* Set the flags. Setting means clear the bit to 0.
*/
static void
rtems_fdisk_page_desc_set_flags (rtems_fdisk_page_desc* pd, uint16_t flags)
{
pd->flags &= ~flags;
10886f: 66 83 62 02 fd andw $0xfffd,0x2(%edx)
* matches the flash device.
*/
rtems_fdisk_page_desc_set_flags (pd, RTEMS_FDISK_PAGE_USED);
ret = rtems_fdisk_seg_write_page_desc_flags (fd, sc, bc->page, pd);
108874: 8b 4d c8 mov -0x38(%ebp),%ecx
108877: 8b 49 04 mov 0x4(%ecx),%ecx
10887a: 89 4d d0 mov %ecx,-0x30(%ebp)
rtems_fdisk_segment_ctl* sc,
uint32_t page,
const rtems_fdisk_page_desc* page_desc)
{
uint32_t offset = ((page * sizeof (rtems_fdisk_page_desc)) +
((uint8_t*) &page_desc->flags) - ((uint8_t*) page_desc));
10887d: 8d 0c cd 02 00 00 00 lea 0x2(,%ecx,8),%ecx
108884: 89 4d bc mov %ecx,-0x44(%ebp)
if ((fd->flags & RTEMS_FDISK_BLANK_CHECK_BEFORE_WRITE))
108887: f6 47 08 08 testb $0x8,0x8(%edi)
10888b: 74 4a je 1088d7 <rtems_fdisk_ioctl+0x4f1><== NEVER TAKEN
{
uint16_t flash_flags;
int ret;
ret = rtems_fdisk_seg_read (fd, sc, offset,
10888d: 50 push %eax
10888e: 50 push %eax
10888f: 6a 02 push $0x2
&flash_flags, sizeof (flash_flags));
108891: 8d 45 e0 lea -0x20(%ebp),%eax
((uint8_t*) &page_desc->flags) - ((uint8_t*) page_desc));
if ((fd->flags & RTEMS_FDISK_BLANK_CHECK_BEFORE_WRITE))
{
uint16_t flash_flags;
int ret;
ret = rtems_fdisk_seg_read (fd, sc, offset,
108894: 50 push %eax
108895: 89 da mov %ebx,%edx
108897: 89 f8 mov %edi,%eax
108899: e8 e9 ef ff ff call 107887 <rtems_fdisk_seg_read>
10889e: 89 c2 mov %eax,%edx
&flash_flags, sizeof (flash_flags));
if (ret)
1088a0: 83 c4 10 add $0x10,%esp
1088a3: 85 c0 test %eax,%eax
1088a5: 75 50 jne 1088f7 <rtems_fdisk_ioctl+0x511><== NEVER TAKEN
return ret;
if ((flash_flags & page_desc->flags) != page_desc->flags)
1088a7: 0f b7 55 e0 movzwl -0x20(%ebp),%edx
1088ab: 8b 4d cc mov -0x34(%ebp),%ecx
1088ae: 0f b7 41 02 movzwl 0x2(%ecx),%eax
1088b2: 89 c1 mov %eax,%ecx
1088b4: 21 d1 and %edx,%ecx
1088b6: 66 39 c1 cmp %ax,%cx
1088b9: 74 1c je 1088d7 <rtems_fdisk_ioctl+0x4f1><== ALWAYS TAKEN
{
rtems_fdisk_error (" seg-write-page-flags: %02d-%03d-%03d: "
1088bb: 51 push %ecx <== NOT EXECUTED
1088bc: 51 push %ecx <== NOT EXECUTED
1088bd: 50 push %eax <== NOT EXECUTED
1088be: 52 push %edx <== NOT EXECUTED
1088bf: ff 75 d0 pushl -0x30(%ebp) <== NOT EXECUTED
1088c2: ff 73 0c pushl 0xc(%ebx) <== NOT EXECUTED
1088c5: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
1088c8: 68 36 ea 12 00 push $0x12ea36 <== NOT EXECUTED
1088cd: e8 1c ef ff ff call 1077ee <rtems_fdisk_error> <== NOT EXECUTED
1088d2: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
1088d5: eb 50 jmp 108927 <rtems_fdisk_ioctl+0x541><== NOT EXECUTED
sc->device, sc->segment, page,
flash_flags, page_desc->flags);
return ret;
}
}
return rtems_fdisk_seg_write (fd, sc, offset,
1088d7: 52 push %edx
1088d8: 52 push %edx
1088d9: 6a 02 push $0x2
&page_desc->flags, sizeof (page_desc->flags));
1088db: 8b 45 cc mov -0x34(%ebp),%eax
1088de: 83 c0 02 add $0x2,%eax
sc->device, sc->segment, page,
flash_flags, page_desc->flags);
return ret;
}
}
return rtems_fdisk_seg_write (fd, sc, offset,
1088e1: 50 push %eax
1088e2: 8b 4d bc mov -0x44(%ebp),%ecx
1088e5: 89 da mov %ebx,%edx
1088e7: 89 f8 mov %edi,%eax
1088e9: e8 49 f0 ff ff call 107937 <rtems_fdisk_seg_write>
1088ee: 89 c2 mov %eax,%edx
1088f0: 83 c4 10 add $0x10,%esp
rtems_fdisk_page_desc_set_flags (pd, RTEMS_FDISK_PAGE_USED);
ret = rtems_fdisk_seg_write_page_desc_flags (fd, sc, bc->page, pd);
if (ret)
1088f3: 85 c0 test %eax,%eax
1088f5: 74 30 je 108927 <rtems_fdisk_ioctl+0x541><== ALWAYS TAKEN
{
#if RTEMS_FDISK_TRACE
rtems_fdisk_info (fd, " write:%02d-%03d-%03d: " \
1088f7: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1088fa: 52 push %edx <== NOT EXECUTED
1088fb: 89 55 90 mov %edx,-0x70(%ebp) <== NOT EXECUTED
1088fe: e8 c1 87 01 00 call 1210c4 <strerror> <== NOT EXECUTED
108903: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
108906: 8b 55 90 mov -0x70(%ebp),%edx <== NOT EXECUTED
108909: 52 push %edx <== NOT EXECUTED
10890a: 50 push %eax <== NOT EXECUTED
10890b: 8b 45 c8 mov -0x38(%ebp),%eax <== NOT EXECUTED
10890e: ff 70 04 pushl 0x4(%eax) <== NOT EXECUTED
108911: ff 73 0c pushl 0xc(%ebx) <== NOT EXECUTED
108914: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
108917: 68 80 ea 12 00 push $0x12ea80 <== NOT EXECUTED
10891c: 57 push %edi <== NOT EXECUTED
10891d: e8 98 ed ff ff call 1076ba <rtems_fdisk_info> <== NOT EXECUTED
108922: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
108925: eb 06 jmp 10892d <rtems_fdisk_ioctl+0x547><== NOT EXECUTED
strerror (ret), ret);
#endif
}
else
{
sc->pages_active--;
108927: ff 4b 1c decl 0x1c(%ebx)
sc->pages_used++;
10892a: ff 43 20 incl 0x20(%ebx)
/*
* If possible reuse this segment. This will mean the segment
* needs to be removed from the available list and placed
* back if space is still available.
*/
rtems_fdisk_queue_segment (fd, sc);
10892d: 89 da mov %ebx,%edx
10892f: 89 f8 mov %edi,%eax
108931: e8 35 f2 ff ff call 107b6b <rtems_fdisk_queue_segment>
/*
* If no background compacting then compact in the forground.
* If we compact we ignore the error as there is little we
* can do from here. The write may will work.
*/
if ((fd->flags & RTEMS_FDISK_BACKGROUND_COMPACT) == 0)
108936: f6 47 08 02 testb $0x2,0x8(%edi)
10893a: 75 07 jne 108943 <rtems_fdisk_ioctl+0x55d><== NEVER TAKEN
rtems_fdisk_compact (fd);
10893c: 89 f8 mov %edi,%eax
10893e: e8 e1 f8 ff ff call 108224 <rtems_fdisk_compact>
/*
* Is it time to compact the disk ?
*
* We override the background compaction configruation.
*/
if (rtems_fdisk_segment_count_queue (&fd->available) <=
108943: 8b 47 34 mov 0x34(%edi),%eax
108946: e8 fb ee ff ff call 107846 <rtems_fdisk_segment_count_queue.isra.1>
10894b: 3b 47 10 cmp 0x10(%edi),%eax
10894e: 77 07 ja 108957 <rtems_fdisk_ioctl+0x571>
fd->avail_compact_segs)
rtems_fdisk_compact (fd);
108950: 89 f8 mov %edi,%eax
108952: e8 cd f8 ff ff call 108224 <rtems_fdisk_compact>
/*
* Get the next avaliable segment.
*/
sc = rtems_fdisk_segment_queue_pop_head (&fd->available);
108957: 8b 45 a8 mov -0x58(%ebp),%eax
10895a: e8 6c ec ff ff call 1075cb <rtems_fdisk_segment_queue_pop_head>
10895f: 89 c3 mov %eax,%ebx
/*
* Is the flash disk full ?
*/
if (!sc)
108961: 85 c0 test %eax,%eax
108963: 75 35 jne 10899a <rtems_fdisk_ioctl+0x5b4><== ALWAYS TAKEN
{
/*
* If compacting is configured for the background do it now
* to see if we can get some space back.
*/
if ((fd->flags & RTEMS_FDISK_BACKGROUND_COMPACT))
108965: f6 47 08 02 testb $0x2,0x8(%edi) <== NOT EXECUTED
108969: 74 07 je 108972 <rtems_fdisk_ioctl+0x58c><== NOT EXECUTED
rtems_fdisk_compact (fd);
10896b: 89 f8 mov %edi,%eax <== NOT EXECUTED
10896d: e8 b2 f8 ff ff call 108224 <rtems_fdisk_compact> <== NOT EXECUTED
/*
* Try again for some free space.
*/
sc = rtems_fdisk_segment_queue_pop_head (&fd->available);
108972: 8b 45 a8 mov -0x58(%ebp),%eax <== NOT EXECUTED
108975: e8 51 ec ff ff call 1075cb <rtems_fdisk_segment_queue_pop_head><== NOT EXECUTED
10897a: 89 c3 mov %eax,%ebx <== NOT EXECUTED
if (!sc)
10897c: 85 c0 test %eax,%eax <== NOT EXECUTED
10897e: 75 1a jne 10899a <rtems_fdisk_ioctl+0x5b4><== NOT EXECUTED
{
rtems_fdisk_error ("write-block: no available pages");
108980: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
108983: 68 bc ea 12 00 push $0x12eabc <== NOT EXECUTED
108988: e8 61 ee ff ff call 1077ee <rtems_fdisk_error> <== NOT EXECUTED
10898d: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
return ENOSPC;
108990: b9 1c 00 00 00 mov $0x1c,%ecx <== NOT EXECUTED
108995: e9 f4 01 00 00 jmp 108b8e <rtems_fdisk_ioctl+0x7a8><== NOT EXECUTED
}
}
#if RTEMS_FDISK_TRACE
if (fd->info_level >= 3)
10899a: 83 7f 6c 02 cmpl $0x2,0x6c(%edi)
10899e: 76 29 jbe 1089c9 <rtems_fdisk_ioctl+0x5e3><== ALWAYS TAKEN
{
char queues[5];
rtems_fdisk_queue_status (fd, sc, queues);
1089a0: 8d 4d e3 lea -0x1d(%ebp),%ecx <== NOT EXECUTED
1089a3: 89 da mov %ebx,%edx <== NOT EXECUTED
1089a5: 89 f8 mov %edi,%eax <== NOT EXECUTED
1089a7: e8 99 f0 ff ff call 107a45 <rtems_fdisk_queue_status><== NOT EXECUTED
rtems_fdisk_info (fd, " write:%d=>%02d-%03d: queue check: %s",
1089ac: 50 push %eax <== NOT EXECUTED
1089ad: 50 push %eax <== NOT EXECUTED
1089ae: 8d 55 e3 lea -0x1d(%ebp),%edx <== NOT EXECUTED
1089b1: 52 push %edx <== NOT EXECUTED
1089b2: ff 73 0c pushl 0xc(%ebx) <== NOT EXECUTED
1089b5: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
1089b8: ff 75 d4 pushl -0x2c(%ebp) <== NOT EXECUTED
1089bb: 68 dc ea 12 00 push $0x12eadc <== NOT EXECUTED
1089c0: 57 push %edi <== NOT EXECUTED
1089c1: e8 f4 ec ff ff call 1076ba <rtems_fdisk_info> <== NOT EXECUTED
1089c6: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
/*
* Find the next avaliable page in the segment.
*/
pd = sc->page_descriptors;
1089c9: 8b 4b 10 mov 0x10(%ebx),%ecx
1089cc: 89 4d cc mov %ecx,-0x34(%ebp)
for (page = 0; page < sc->pages; page++, pd++)
1089cf: 8b 53 14 mov 0x14(%ebx),%edx
1089d2: 89 55 bc mov %edx,-0x44(%ebp)
1089d5: c7 45 d0 00 00 00 00 movl $0x0,-0x30(%ebp)
1089dc: e9 5b 01 00 00 jmp 108b3c <rtems_fdisk_ioctl+0x756>
{
if (rtems_fdisk_page_desc_erased (pd))
1089e1: 8b 45 cc mov -0x34(%ebp),%eax
1089e4: e8 a4 ec ff ff call 10768d <rtems_fdisk_page_desc_erased>
1089e9: 84 c0 test %al,%al
1089eb: 0f 84 44 01 00 00 je 108b35 <rtems_fdisk_ioctl+0x74f>
{
uint16_t cs = 0xffff;
uint32_t i;
for (i = 0; i < page_size; i++, buffer++)
cs = rtems_fdisk_calc_crc16 (cs, *buffer);
1089f1: 8b 0d 84 34 15 00 mov 0x153484,%ecx
* @param req IOCTL request code.
* @param argp IOCTL argument.
* @retval The IOCTL return value
*/
static int
rtems_fdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
1089f7: 8b 45 c0 mov -0x40(%ebp),%eax
1089fa: 03 47 14 add 0x14(%edi),%eax
1089fd: 89 45 ac mov %eax,-0x54(%ebp)
108a00: 8b 55 c0 mov -0x40(%ebp),%edx
* Calculate the checksum of a page in a segment.
*/
static uint16_t
rtems_fdisk_page_checksum (const uint8_t* buffer, uint32_t page_size)
{
uint16_t cs = 0xffff;
108a03: b8 ff ff 00 00 mov $0xffff,%eax
108a08: eb 0a jmp 108a14 <rtems_fdisk_ioctl+0x62e>
uint32_t i;
for (i = 0; i < page_size; i++, buffer++)
cs = rtems_fdisk_calc_crc16 (cs, *buffer);
108a0a: 32 02 xor (%edx),%al
108a0c: 0f b6 c0 movzbl %al,%eax
108a0f: 0f b7 04 41 movzwl (%ecx,%eax,2),%eax
rtems_fdisk_page_checksum (const uint8_t* buffer, uint32_t page_size)
{
uint16_t cs = 0xffff;
uint32_t i;
for (i = 0; i < page_size; i++, buffer++)
108a13: 42 inc %edx
108a14: 3b 55 ac cmp -0x54(%ebp),%edx
108a17: 75 f1 jne 108a0a <rtems_fdisk_ioctl+0x624>
for (page = 0; page < sc->pages; page++, pd++)
{
if (rtems_fdisk_page_desc_erased (pd))
{
pd->crc = rtems_fdisk_page_checksum (buffer, fd->block_size);
108a19: 8b 55 cc mov -0x34(%ebp),%edx
108a1c: 66 89 02 mov %ax,(%edx)
pd->block = block;
108a1f: 8b 4d d4 mov -0x2c(%ebp),%ecx
108a22: 89 4a 04 mov %ecx,0x4(%edx)
bc->segment = sc;
108a25: 8b 55 c8 mov -0x38(%ebp),%edx
108a28: 89 1a mov %ebx,(%edx)
bc->page = page;
108a2a: 8b 4d d0 mov -0x30(%ebp),%ecx
108a2d: 89 4a 04 mov %ecx,0x4(%edx)
* Set the flags. Setting means clear the bit to 0.
*/
static void
rtems_fdisk_page_desc_set_flags (rtems_fdisk_page_desc* pd, uint16_t flags)
{
pd->flags &= ~flags;
108a30: 8b 4d cc mov -0x34(%ebp),%ecx
108a33: 66 8b 51 02 mov 0x2(%ecx),%dx
108a37: 83 e2 fe and $0xfffffffe,%edx
108a3a: 66 89 51 02 mov %dx,0x2(%ecx)
bc->page = page;
rtems_fdisk_page_desc_set_flags (pd, RTEMS_FDISK_PAGE_ACTIVE);
#if RTEMS_FDISK_TRACE
rtems_fdisk_info (fd, " write:%d=>%02d-%03d-%03d: write: " \
108a3e: 0f b7 d2 movzwl %dx,%edx
108a41: 83 3b 00 cmpl $0x0,(%ebx)
108a44: 74 07 je 108a4d <rtems_fdisk_ioctl+0x667><== ALWAYS TAKEN
108a46: b9 22 08 13 00 mov $0x130822,%ecx <== NOT EXECUTED
108a4b: eb 05 jmp 108a52 <rtems_fdisk_ioctl+0x66c><== NOT EXECUTED
108a4d: b9 97 e4 12 00 mov $0x12e497,%ecx
108a52: 83 ec 08 sub $0x8,%esp
108a55: ff 75 d4 pushl -0x2c(%ebp)
108a58: 50 push %eax
108a59: 52 push %edx
108a5a: 51 push %ecx
108a5b: ff 73 24 pushl 0x24(%ebx)
108a5e: ff 73 20 pushl 0x20(%ebx)
108a61: ff 73 1c pushl 0x1c(%ebx)
108a64: ff 75 bc pushl -0x44(%ebp)
108a67: ff 75 d0 pushl -0x30(%ebp)
108a6a: ff 73 0c pushl 0xc(%ebx)
108a6d: ff 73 08 pushl 0x8(%ebx)
108a70: ff 75 d4 pushl -0x2c(%ebp)
108a73: 68 02 eb 12 00 push $0x12eb02
108a78: 57 push %edi
108a79: e8 3c ec ff ff call 1076ba <rtems_fdisk_info>
/*
* We use the segment page offset not the page number used in the
* driver. This skips the page descriptors.
*/
ret = rtems_fdisk_seg_write_page (fd, sc, page + sc->pages_desc, buffer);
108a7e: 83 c4 34 add $0x34,%esp
108a81: 8b 4d d0 mov -0x30(%ebp),%ecx
108a84: 03 4b 18 add 0x18(%ebx),%ecx
108a87: ff 75 c0 pushl -0x40(%ebp)
108a8a: 89 da mov %ebx,%edx
108a8c: 89 f8 mov %edi,%eax
108a8e: e8 5e ef ff ff call 1079f1 <rtems_fdisk_seg_write_page>
if (ret)
108a93: 83 c4 10 add $0x10,%esp
108a96: 85 c0 test %eax,%eax
108a98: 74 24 je 108abe <rtems_fdisk_ioctl+0x6d8><== ALWAYS TAKEN
{
#if RTEMS_FDISK_TRACE
rtems_fdisk_info (fd, "write-block:%02d-%03d-%03d: write page failed: " \
108a9a: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
108a9d: 50 push %eax <== NOT EXECUTED
108a9e: 89 45 94 mov %eax,-0x6c(%ebp) <== NOT EXECUTED
108aa1: e8 1e 86 01 00 call 1210c4 <strerror> <== NOT EXECUTED
108aa6: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
108aa9: 8b 4d 94 mov -0x6c(%ebp),%ecx <== NOT EXECUTED
108aac: 51 push %ecx <== NOT EXECUTED
108aad: 50 push %eax <== NOT EXECUTED
108aae: ff 75 d0 pushl -0x30(%ebp) <== NOT EXECUTED
108ab1: ff 73 0c pushl 0xc(%ebx) <== NOT EXECUTED
108ab4: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
108ab7: 68 51 eb 12 00 push $0x12eb51 <== NOT EXECUTED
108abc: eb 40 jmp 108afe <rtems_fdisk_ioctl+0x718><== NOT EXECUTED
strerror (ret), ret);
#endif
}
else
{
ret = rtems_fdisk_seg_write_page_desc (fd, sc, page, pd);
108abe: 83 ec 0c sub $0xc,%esp
108ac1: ff 75 cc pushl -0x34(%ebp)
108ac4: 8b 4d d0 mov -0x30(%ebp),%ecx
108ac7: 89 da mov %ebx,%edx
108ac9: 89 f8 mov %edi,%eax
108acb: e8 d5 ee ff ff call 1079a5 <rtems_fdisk_seg_write_page_desc>
108ad0: 89 c1 mov %eax,%ecx
if (ret)
108ad2: 83 c4 10 add $0x10,%esp
108ad5: 85 c0 test %eax,%eax
108ad7: 74 33 je 108b0c <rtems_fdisk_ioctl+0x726><== ALWAYS TAKEN
{
#if RTEMS_FDISK_TRACE
rtems_fdisk_info (fd, "write-block:%02d-%03d-%03d: " \
108ad9: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
108adc: 50 push %eax <== NOT EXECUTED
108add: 89 45 94 mov %eax,-0x6c(%ebp) <== NOT EXECUTED
108ae0: e8 df 85 01 00 call 1210c4 <strerror> <== NOT EXECUTED
108ae5: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
108ae8: 8b 4d 94 mov -0x6c(%ebp),%ecx <== NOT EXECUTED
108aeb: 51 push %ecx <== NOT EXECUTED
108aec: 50 push %eax <== NOT EXECUTED
108aed: 8b 45 c8 mov -0x38(%ebp),%eax <== NOT EXECUTED
108af0: ff 70 04 pushl 0x4(%eax) <== NOT EXECUTED
108af3: ff 73 0c pushl 0xc(%ebx) <== NOT EXECUTED
108af6: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
108af9: 68 88 eb 12 00 push $0x12eb88 <== NOT EXECUTED
108afe: 57 push %edi <== NOT EXECUTED
108aff: e8 b6 eb ff ff call 1076ba <rtems_fdisk_info> <== NOT EXECUTED
108b04: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
108b07: 8b 4d 94 mov -0x6c(%ebp),%ecx <== NOT EXECUTED
108b0a: eb 03 jmp 108b0f <rtems_fdisk_ioctl+0x729><== NOT EXECUTED
strerror (ret), ret);
#endif
}
else
{
sc->pages_active++;
108b0c: ff 43 1c incl 0x1c(%ebx)
}
}
rtems_fdisk_queue_segment (fd, sc);
108b0f: 89 da mov %ebx,%edx
108b11: 89 f8 mov %edi,%eax
108b13: 89 4d 94 mov %ecx,-0x6c(%ebp)
108b16: e8 50 f0 ff ff call 107b6b <rtems_fdisk_queue_segment>
static bool
rtems_fdisk_is_erased_blocks_starvation (rtems_flashdisk* fd)
{
bool starvation = fd->erased_blocks < fd->starvation_threshold;
if (starvation)
108b1b: 8b 57 24 mov 0x24(%edi),%edx
108b1e: 39 57 28 cmp %edx,0x28(%edi)
108b21: 8b 4d 94 mov -0x6c(%ebp),%ecx
108b24: 73 4d jae 108b73 <rtems_fdisk_ioctl+0x78d>
fd->starvations++;
108b26: ff 47 70 incl 0x70(%edi)
}
rtems_fdisk_queue_segment (fd, sc);
if (rtems_fdisk_is_erased_blocks_starvation (fd))
rtems_fdisk_compact (fd);
108b29: 89 f8 mov %edi,%eax
108b2b: e8 f4 f6 ff ff call 108224 <rtems_fdisk_compact>
108b30: 8b 4d 94 mov -0x6c(%ebp),%ecx
108b33: eb 3e jmp 108b73 <rtems_fdisk_ioctl+0x78d>
* Find the next avaliable page in the segment.
*/
pd = sc->page_descriptors;
for (page = 0; page < sc->pages; page++, pd++)
108b35: ff 45 d0 incl -0x30(%ebp)
108b38: 83 45 cc 08 addl $0x8,-0x34(%ebp)
108b3c: 8b 4d bc mov -0x44(%ebp),%ecx
108b3f: 39 4d d0 cmp %ecx,-0x30(%ebp)
108b42: 0f 85 99 fe ff ff jne 1089e1 <rtems_fdisk_ioctl+0x5fb><== ALWAYS TAKEN
return ret;
}
}
rtems_fdisk_error ("write-block: no erased page descs in segment: %d-%d",
108b48: 50 push %eax <== NOT EXECUTED
108b49: ff 73 0c pushl 0xc(%ebx) <== NOT EXECUTED
108b4c: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
108b4f: 68 c4 eb 12 00 push $0x12ebc4 <== NOT EXECUTED
108b54: e8 95 ec ff ff call 1077ee <rtems_fdisk_error> <== NOT EXECUTED
sc->device, sc->segment);
sc->failed = true;
108b59: c7 43 28 01 00 00 00 movl $0x1,0x28(%ebx) <== NOT EXECUTED
rtems_fdisk_queue_segment (fd, sc);
108b60: 89 da mov %ebx,%edx <== NOT EXECUTED
108b62: 89 f8 mov %edi,%eax <== NOT EXECUTED
108b64: e8 02 f0 ff ff call 107b6b <rtems_fdisk_queue_segment><== NOT EXECUTED
108b69: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
return EIO;
108b6c: b9 05 00 00 00 mov $0x5,%ecx <== NOT EXECUTED
108b71: eb 1b jmp 108b8e <rtems_fdisk_ioctl+0x7a8><== NOT EXECUTED
fb = sg->length / fd->block_size;
data = sg->buffer;
for (b = 0; b < fb; b++, data += fd->block_size)
{
ret = rtems_fdisk_write_block (fd, sg->block + b, data);
if (ret)
108b73: 85 c9 test %ecx,%ecx
108b75: 75 17 jne 108b8e <rtems_fdisk_ioctl+0x7a8><== NEVER TAKEN
uint8_t* data;
uint32_t fb;
uint32_t b;
fb = sg->length / fd->block_size;
data = sg->buffer;
for (b = 0; b < fb; b++, data += fd->block_size)
108b77: ff 45 b4 incl -0x4c(%ebp)
108b7a: 8b 47 14 mov 0x14(%edi),%eax
108b7d: 01 45 c0 add %eax,-0x40(%ebp)
108b80: 8b 45 98 mov -0x68(%ebp),%eax
108b83: 39 45 b4 cmp %eax,-0x4c(%ebp)
108b86: 0f 85 c9 fb ff ff jne 108755 <rtems_fdisk_ioctl+0x36f>
108b8c: 31 c9 xor %ecx,%ecx
{
rtems_blkdev_sg_buffer* sg = req->bufs;
uint32_t buf;
int ret = 0;
for (buf = 0; (ret == 0) && (buf < req->bufnum); buf++, sg++)
108b8e: ff 45 b0 incl -0x50(%ebp)
108b91: 83 45 c4 10 addl $0x10,-0x3c(%ebp)
108b95: 85 c9 test %ecx,%ecx
108b97: 75 10 jne 108ba9 <rtems_fdisk_ioctl+0x7c3><== NEVER TAKEN
108b99: 8b 55 b0 mov -0x50(%ebp),%edx
108b9c: 3b 56 10 cmp 0x10(%esi),%edx
108b9f: 0f 82 8d fb ff ff jb 108732 <rtems_fdisk_ioctl+0x34c>
if (ret)
break;
}
}
req->status = ret ? RTEMS_IO_ERROR : RTEMS_SUCCESSFUL;
108ba5: 31 c0 xor %eax,%eax
108ba7: eb 05 jmp 108bae <rtems_fdisk_ioctl+0x7c8>
108ba9: b8 1b 00 00 00 mov $0x1b,%eax <== NOT EXECUTED
108bae: 89 46 0c mov %eax,0xc(%esi)
req->req_done (req->done_arg, req->status);
108bb1: 57 push %edi
108bb2: 57 push %edi
108bb3: 50 push %eax
108bb4: ff 76 08 pushl 0x8(%esi)
108bb7: ff 56 04 call *0x4(%esi)
case RTEMS_BLKDEV_REQ_READ:
errno = rtems_fdisk_read (&rtems_flashdisks[minor], r);
break;
case RTEMS_BLKDEV_REQ_WRITE:
errno = rtems_fdisk_write (&rtems_flashdisks[minor], r);
108bba: 8b 45 a4 mov -0x5c(%ebp),%eax
108bbd: c7 00 00 00 00 00 movl $0x0,(%eax)
108bc3: e9 fd 04 00 00 jmp 1090c5 <rtems_fdisk_ioctl+0xcdf>
break;
default:
errno = EINVAL;
108bc8: e8 ff 65 01 00 call 11f1cc <__errno> <== NOT EXECUTED
108bcd: c7 00 16 00 00 00 movl $0x16,(%eax) <== NOT EXECUTED
break;
108bd3: e9 f0 04 00 00 jmp 1090c8 <rtems_fdisk_ioctl+0xce2><== NOT EXECUTED
}
}
break;
case RTEMS_FDISK_IOCTL_ERASE_DISK:
errno = rtems_fdisk_erase_disk (&rtems_flashdisks[minor]);
108bd8: e8 ef 65 01 00 call 11f1cc <__errno> <== NOT EXECUTED
108bdd: 89 c7 mov %eax,%edi <== NOT EXECUTED
108bdf: 8b 5d b8 mov -0x48(%ebp),%ebx <== NOT EXECUTED
108be2: 03 1d 7c 34 15 00 add 0x15347c,%ebx <== NOT EXECUTED
{
uint32_t device;
int ret;
#if RTEMS_FDISK_TRACE
rtems_fdisk_info (fd, "erase-disk");
108be8: 56 push %esi <== NOT EXECUTED
108be9: 56 push %esi <== NOT EXECUTED
108bea: 68 f8 eb 12 00 push $0x12ebf8 <== NOT EXECUTED
108bef: 53 push %ebx <== NOT EXECUTED
108bf0: e8 c5 ea ff ff call 1076ba <rtems_fdisk_info> <== NOT EXECUTED
108bf5: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
*/
static int
rtems_fdisk_erase_flash (const rtems_flashdisk* fd)
{
uint32_t device;
for (device = 0; device < fd->device_count; device++)
108bf8: 31 f6 xor %esi,%esi <== NOT EXECUTED
108bfa: eb 4a jmp 108c46 <rtems_fdisk_ioctl+0x860><== NOT EXECUTED
{
int ret;
#if RTEMS_FDISK_TRACE
rtems_fdisk_info (fd, " erase-flash:%02d", device);
108bfc: 50 push %eax <== NOT EXECUTED
108bfd: 56 push %esi <== NOT EXECUTED
108bfe: 68 03 ec 12 00 push $0x12ec03 <== NOT EXECUTED
108c03: 53 push %ebx <== NOT EXECUTED
108c04: e8 b1 ea ff ff call 1076ba <rtems_fdisk_info> <== NOT EXECUTED
* @param req IOCTL request code.
* @param argp IOCTL argument.
* @retval The IOCTL return value
*/
static int
rtems_fdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
108c09: 6b d6 0c imul $0xc,%esi,%edx <== NOT EXECUTED
*/
static int
rtems_fdisk_device_erase (const rtems_flashdisk* fd, uint32_t device)
{
const rtems_fdisk_driver_handlers* ops;
ops = fd->devices[device].descriptor->flash_ops;
108c0c: 8b 43 2c mov 0x2c(%ebx),%eax <== NOT EXECUTED
108c0f: 8b 44 10 08 mov 0x8(%eax,%edx,1),%eax <== NOT EXECUTED
108c13: 8b 48 08 mov 0x8(%eax),%ecx <== NOT EXECUTED
#if RTEMS_FDISK_TRACE
rtems_fdisk_printf (fd, " device-erase: %02d", device);
108c16: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
108c19: 56 push %esi <== NOT EXECUTED
108c1a: 68 15 ec 12 00 push $0x12ec15 <== NOT EXECUTED
108c1f: 53 push %ebx <== NOT EXECUTED
108c20: 89 55 90 mov %edx,-0x70(%ebp) <== NOT EXECUTED
108c23: 89 4d 94 mov %ecx,-0x6c(%ebp) <== NOT EXECUTED
108c26: e8 f7 ea ff ff call 107722 <rtems_fdisk_printf> <== NOT EXECUTED
#endif
return ops->erase_device (fd->devices[device].descriptor, device);
108c2b: 5a pop %edx <== NOT EXECUTED
108c2c: 59 pop %ecx <== NOT EXECUTED
108c2d: 56 push %esi <== NOT EXECUTED
108c2e: 8b 43 2c mov 0x2c(%ebx),%eax <== NOT EXECUTED
108c31: 8b 55 90 mov -0x70(%ebp),%edx <== NOT EXECUTED
108c34: ff 74 10 08 pushl 0x8(%eax,%edx,1) <== NOT EXECUTED
108c38: 8b 4d 94 mov -0x6c(%ebp),%ecx <== NOT EXECUTED
108c3b: ff 51 14 call *0x14(%ecx) <== NOT EXECUTED
rtems_fdisk_info (fd, " erase-flash:%02d", device);
#endif
ret = rtems_fdisk_device_erase (fd, device);
if (ret != 0)
108c3e: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
108c41: 85 c0 test %eax,%eax <== NOT EXECUTED
108c43: 75 2f jne 108c74 <rtems_fdisk_ioctl+0x88e><== NOT EXECUTED
*/
static int
rtems_fdisk_erase_flash (const rtems_flashdisk* fd)
{
uint32_t device;
for (device = 0; device < fd->device_count; device++)
108c45: 46 inc %esi <== NOT EXECUTED
108c46: 3b 73 30 cmp 0x30(%ebx),%esi <== NOT EXECUTED
108c49: 72 b1 jb 108bfc <rtems_fdisk_ioctl+0x816><== NOT EXECUTED
108c4b: 31 f6 xor %esi,%esi <== NOT EXECUTED
108c4d: eb 17 jmp 108c66 <rtems_fdisk_ioctl+0x880><== NOT EXECUTED
if (ret == 0)
{
for (device = 0; device < fd->device_count; device++)
{
if (!fd->devices[device].segments)
108c4f: 6b c6 0c imul $0xc,%esi,%eax <== NOT EXECUTED
108c52: 03 43 2c add 0x2c(%ebx),%eax <== NOT EXECUTED
108c55: 83 38 00 cmpl $0x0,(%eax) <== NOT EXECUTED
108c58: 74 15 je 108c6f <rtems_fdisk_ioctl+0x889><== NOT EXECUTED
return ENOMEM;
ret = rtems_fdisk_recover_block_mappings (fd);
108c5a: 89 d8 mov %ebx,%eax <== NOT EXECUTED
108c5c: e8 2e f0 ff ff call 107c8f <rtems_fdisk_recover_block_mappings><== NOT EXECUTED
if (ret)
108c61: 85 c0 test %eax,%eax <== NOT EXECUTED
108c63: 75 0f jne 108c74 <rtems_fdisk_ioctl+0x88e><== NOT EXECUTED
ret = rtems_fdisk_erase_flash (fd);
if (ret == 0)
{
for (device = 0; device < fd->device_count; device++)
108c65: 46 inc %esi <== NOT EXECUTED
108c66: 3b 73 30 cmp 0x30(%ebx),%esi <== NOT EXECUTED
108c69: 72 e4 jb 108c4f <rtems_fdisk_ioctl+0x869><== NOT EXECUTED
108c6b: 31 c0 xor %eax,%eax <== NOT EXECUTED
108c6d: eb 05 jmp 108c74 <rtems_fdisk_ioctl+0x88e><== NOT EXECUTED
{
if (!fd->devices[device].segments)
return ENOMEM;
108c6f: b8 0c 00 00 00 mov $0xc,%eax <== NOT EXECUTED
}
}
break;
case RTEMS_FDISK_IOCTL_ERASE_DISK:
errno = rtems_fdisk_erase_disk (&rtems_flashdisks[minor]);
108c74: 89 07 mov %eax,(%edi) <== NOT EXECUTED
break;
108c76: e9 4d 04 00 00 jmp 1090c8 <rtems_fdisk_ioctl+0xce2><== NOT EXECUTED
case RTEMS_FDISK_IOCTL_COMPACT:
errno = rtems_fdisk_compact (&rtems_flashdisks[minor]);
108c7b: e8 4c 65 01 00 call 11f1cc <__errno> <== NOT EXECUTED
108c80: 89 c3 mov %eax,%ebx <== NOT EXECUTED
108c82: 8b 45 b8 mov -0x48(%ebp),%eax <== NOT EXECUTED
108c85: 03 05 7c 34 15 00 add 0x15347c,%eax <== NOT EXECUTED
108c8b: e8 94 f5 ff ff call 108224 <rtems_fdisk_compact> <== NOT EXECUTED
108c90: 89 03 mov %eax,(%ebx) <== NOT EXECUTED
break;
108c92: e9 31 04 00 00 jmp 1090c8 <rtems_fdisk_ioctl+0xce2><== NOT EXECUTED
case RTEMS_FDISK_IOCTL_ERASE_USED:
errno = rtems_fdisk_erase_used (&rtems_flashdisks[minor]);
108c97: e8 30 65 01 00 call 11f1cc <__errno> <== NOT EXECUTED
108c9c: 89 c6 mov %eax,%esi <== NOT EXECUTED
108c9e: 8b 5d b8 mov -0x48(%ebp),%ebx <== NOT EXECUTED
108ca1: 03 1d 7c 34 15 00 add 0x15347c,%ebx <== NOT EXECUTED
*/
static int
rtems_fdisk_erase_used (rtems_flashdisk* fd)
{
rtems_fdisk_segment_ctl* sc;
int latched_ret = 0;
108ca7: 31 ff xor %edi,%edi <== NOT EXECUTED
while ((sc = rtems_fdisk_segment_queue_pop_head (&fd->erase)))
108ca9: 8d 4b 4c lea 0x4c(%ebx),%ecx <== NOT EXECUTED
108cac: 89 4d d4 mov %ecx,-0x2c(%ebp) <== NOT EXECUTED
108caf: eb 13 jmp 108cc4 <rtems_fdisk_ioctl+0x8de><== NOT EXECUTED
{
/*
* The segment will either end up on the available queue or
* the failed queue.
*/
int ret = rtems_fdisk_erase_segment (fd, sc);
108cb1: 89 c2 mov %eax,%edx <== NOT EXECUTED
108cb3: 89 d8 mov %ebx,%eax <== NOT EXECUTED
108cb5: e8 f5 ed ff ff call 107aaf <rtems_fdisk_erase_segment><== NOT EXECUTED
if (ret && !latched_ret)
108cba: 85 c0 test %eax,%eax <== NOT EXECUTED
108cbc: 74 06 je 108cc4 <rtems_fdisk_ioctl+0x8de><== NOT EXECUTED
108cbe: 85 ff test %edi,%edi <== NOT EXECUTED
108cc0: 75 02 jne 108cc4 <rtems_fdisk_ioctl+0x8de><== NOT EXECUTED
108cc2: 89 c7 mov %eax,%edi <== NOT EXECUTED
rtems_fdisk_erase_used (rtems_flashdisk* fd)
{
rtems_fdisk_segment_ctl* sc;
int latched_ret = 0;
while ((sc = rtems_fdisk_segment_queue_pop_head (&fd->erase)))
108cc4: 8b 45 d4 mov -0x2c(%ebp),%eax <== NOT EXECUTED
108cc7: e8 ff e8 ff ff call 1075cb <rtems_fdisk_segment_queue_pop_head><== NOT EXECUTED
108ccc: 85 c0 test %eax,%eax <== NOT EXECUTED
108cce: 75 e1 jne 108cb1 <rtems_fdisk_ioctl+0x8cb><== NOT EXECUTED
case RTEMS_FDISK_IOCTL_COMPACT:
errno = rtems_fdisk_compact (&rtems_flashdisks[minor]);
break;
case RTEMS_FDISK_IOCTL_ERASE_USED:
errno = rtems_fdisk_erase_used (&rtems_flashdisks[minor]);
108cd0: 89 3e mov %edi,(%esi) <== NOT EXECUTED
break;
108cd2: e9 f1 03 00 00 jmp 1090c8 <rtems_fdisk_ioctl+0xce2><== NOT EXECUTED
case RTEMS_FDISK_IOCTL_MONITORING:
errno = rtems_fdisk_monitoring_data (&rtems_flashdisks[minor],
108cd7: e8 f0 64 01 00 call 11f1cc <__errno> <== NOT EXECUTED
108cdc: 89 45 cc mov %eax,-0x34(%ebp) <== NOT EXECUTED
108cdf: 8b 5d b8 mov -0x48(%ebp),%ebx <== NOT EXECUTED
108ce2: 03 1d 7c 34 15 00 add 0x15347c,%ebx <== NOT EXECUTED
rtems_fdisk_monitor_data* data)
{
uint32_t i;
uint32_t j;
data->block_size = fd->block_size;
108ce8: 8b 43 14 mov 0x14(%ebx),%eax <== NOT EXECUTED
108ceb: 89 06 mov %eax,(%esi) <== NOT EXECUTED
data->block_count = fd->block_count;
108ced: 8b 53 1c mov 0x1c(%ebx),%edx <== NOT EXECUTED
108cf0: 89 56 04 mov %edx,0x4(%esi) <== NOT EXECUTED
data->unavail_blocks = fd->unavail_blocks;
108cf3: 8b 43 20 mov 0x20(%ebx),%eax <== NOT EXECUTED
108cf6: 89 46 08 mov %eax,0x8(%esi) <== NOT EXECUTED
data->device_count = fd->device_count;
108cf9: 8b 4b 30 mov 0x30(%ebx),%ecx <== NOT EXECUTED
108cfc: 89 4d d4 mov %ecx,-0x2c(%ebp) <== NOT EXECUTED
108cff: 89 4e 0c mov %ecx,0xc(%esi) <== NOT EXECUTED
data->blocks_used = 0;
108d02: c7 46 18 00 00 00 00 movl $0x0,0x18(%esi) <== NOT EXECUTED
for (i = 0; i < fd->block_count; i++)
108d09: 31 c0 xor %eax,%eax <== NOT EXECUTED
108d0b: eb 0d jmp 108d1a <rtems_fdisk_ioctl+0x934><== NOT EXECUTED
if (fd->blocks[i].segment)
108d0d: 8b 4b 18 mov 0x18(%ebx),%ecx <== NOT EXECUTED
108d10: 83 3c c1 00 cmpl $0x0,(%ecx,%eax,8) <== NOT EXECUTED
108d14: 74 03 je 108d19 <rtems_fdisk_ioctl+0x933><== NOT EXECUTED
data->blocks_used++;
108d16: ff 46 18 incl 0x18(%esi) <== NOT EXECUTED
data->block_count = fd->block_count;
data->unavail_blocks = fd->unavail_blocks;
data->device_count = fd->device_count;
data->blocks_used = 0;
for (i = 0; i < fd->block_count; i++)
108d19: 40 inc %eax <== NOT EXECUTED
108d1a: 39 d0 cmp %edx,%eax <== NOT EXECUTED
108d1c: 75 ef jne 108d0d <rtems_fdisk_ioctl+0x927><== NOT EXECUTED
if (fd->blocks[i].segment)
data->blocks_used++;
data->segs_available = rtems_fdisk_segment_count_queue (&fd->available);
108d1e: 8b 43 34 mov 0x34(%ebx),%eax <== NOT EXECUTED
108d21: e8 20 eb ff ff call 107846 <rtems_fdisk_segment_count_queue.isra.1><== NOT EXECUTED
108d26: 89 46 1c mov %eax,0x1c(%esi) <== NOT EXECUTED
data->segs_used = rtems_fdisk_segment_count_queue (&fd->used);
108d29: 8b 43 40 mov 0x40(%ebx),%eax <== NOT EXECUTED
108d2c: e8 15 eb ff ff call 107846 <rtems_fdisk_segment_count_queue.isra.1><== NOT EXECUTED
108d31: 89 46 20 mov %eax,0x20(%esi) <== NOT EXECUTED
data->segs_failed = rtems_fdisk_segment_count_queue (&fd->failed);
108d34: 8b 43 58 mov 0x58(%ebx),%eax <== NOT EXECUTED
108d37: e8 0a eb ff ff call 107846 <rtems_fdisk_segment_count_queue.isra.1><== NOT EXECUTED
108d3c: 89 46 24 mov %eax,0x24(%esi) <== NOT EXECUTED
data->segment_count = 0;
108d3f: c7 46 10 00 00 00 00 movl $0x0,0x10(%esi) <== NOT EXECUTED
data->page_count = 0;
108d46: c7 46 14 00 00 00 00 movl $0x0,0x14(%esi) <== NOT EXECUTED
data->pages_desc = 0;
108d4d: c7 46 2c 00 00 00 00 movl $0x0,0x2c(%esi) <== NOT EXECUTED
data->pages_active = 0;
108d54: c7 46 30 00 00 00 00 movl $0x0,0x30(%esi) <== NOT EXECUTED
data->pages_used = 0;
108d5b: c7 46 34 00 00 00 00 movl $0x0,0x34(%esi) <== NOT EXECUTED
data->pages_bad = 0;
108d62: c7 46 38 00 00 00 00 movl $0x0,0x38(%esi) <== NOT EXECUTED
data->seg_erases = 0;
108d69: c7 46 28 00 00 00 00 movl $0x0,0x28(%esi) <== NOT EXECUTED
for (i = 0; i < fd->device_count; i++)
108d70: c7 45 d0 00 00 00 00 movl $0x0,-0x30(%ebp) <== NOT EXECUTED
108d77: eb 46 jmp 108dbf <rtems_fdisk_ioctl+0x9d9><== NOT EXECUTED
* @param req IOCTL request code.
* @param argp IOCTL argument.
* @retval The IOCTL return value
*/
static int
rtems_fdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
108d79: 6b 7d d0 0c imul $0xc,-0x30(%ebp),%edi <== NOT EXECUTED
data->pages_bad = 0;
data->seg_erases = 0;
for (i = 0; i < fd->device_count; i++)
{
data->segment_count += fd->devices[i].segment_count;
108d7d: 03 7b 2c add 0x2c(%ebx),%edi <== NOT EXECUTED
108d80: 8b 47 04 mov 0x4(%edi),%eax <== NOT EXECUTED
108d83: 89 45 c8 mov %eax,-0x38(%ebp) <== NOT EXECUTED
108d86: 01 46 10 add %eax,0x10(%esi) <== NOT EXECUTED
for (j = 0; j < fd->devices[i].segment_count; j++)
108d89: 31 c9 xor %ecx,%ecx <== NOT EXECUTED
108d8b: eb 2a jmp 108db7 <rtems_fdisk_ioctl+0x9d1><== NOT EXECUTED
* @param req IOCTL request code.
* @param argp IOCTL argument.
* @retval The IOCTL return value
*/
static int
rtems_fdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
108d8d: 6b c1 30 imul $0x30,%ecx,%eax <== NOT EXECUTED
{
data->segment_count += fd->devices[i].segment_count;
for (j = 0; j < fd->devices[i].segment_count; j++)
{
rtems_fdisk_segment_ctl* sc = &fd->devices[i].segments[j];
108d90: 03 07 add (%edi),%eax <== NOT EXECUTED
data->page_count += sc->pages;
108d92: 8b 50 14 mov 0x14(%eax),%edx <== NOT EXECUTED
108d95: 01 56 14 add %edx,0x14(%esi) <== NOT EXECUTED
data->pages_desc += sc->pages_desc;
108d98: 8b 50 18 mov 0x18(%eax),%edx <== NOT EXECUTED
108d9b: 01 56 2c add %edx,0x2c(%esi) <== NOT EXECUTED
data->pages_active += sc->pages_active;
108d9e: 8b 50 1c mov 0x1c(%eax),%edx <== NOT EXECUTED
108da1: 01 56 30 add %edx,0x30(%esi) <== NOT EXECUTED
data->pages_used += sc->pages_used;
108da4: 8b 50 20 mov 0x20(%eax),%edx <== NOT EXECUTED
108da7: 01 56 34 add %edx,0x34(%esi) <== NOT EXECUTED
data->pages_bad += sc->pages_bad;
108daa: 8b 50 24 mov 0x24(%eax),%edx <== NOT EXECUTED
108dad: 01 56 38 add %edx,0x38(%esi) <== NOT EXECUTED
data->seg_erases += sc->erased;
108db0: 8b 40 2c mov 0x2c(%eax),%eax <== NOT EXECUTED
108db3: 01 46 28 add %eax,0x28(%esi) <== NOT EXECUTED
for (i = 0; i < fd->device_count; i++)
{
data->segment_count += fd->devices[i].segment_count;
for (j = 0; j < fd->devices[i].segment_count; j++)
108db6: 41 inc %ecx <== NOT EXECUTED
108db7: 3b 4d c8 cmp -0x38(%ebp),%ecx <== NOT EXECUTED
108dba: 75 d1 jne 108d8d <rtems_fdisk_ioctl+0x9a7><== NOT EXECUTED
data->pages_active = 0;
data->pages_used = 0;
data->pages_bad = 0;
data->seg_erases = 0;
for (i = 0; i < fd->device_count; i++)
108dbc: ff 45 d0 incl -0x30(%ebp) <== NOT EXECUTED
108dbf: 8b 4d d4 mov -0x2c(%ebp),%ecx <== NOT EXECUTED
108dc2: 39 4d d0 cmp %ecx,-0x30(%ebp) <== NOT EXECUTED
108dc5: 75 b2 jne 108d79 <rtems_fdisk_ioctl+0x993><== NOT EXECUTED
data->pages_bad += sc->pages_bad;
data->seg_erases += sc->erased;
}
}
data->info_level = fd->info_level;
108dc7: 8b 43 6c mov 0x6c(%ebx),%eax <== NOT EXECUTED
108dca: 89 46 3c mov %eax,0x3c(%esi) <== NOT EXECUTED
case RTEMS_FDISK_IOCTL_ERASE_USED:
errno = rtems_fdisk_erase_used (&rtems_flashdisks[minor]);
break;
case RTEMS_FDISK_IOCTL_MONITORING:
errno = rtems_fdisk_monitoring_data (&rtems_flashdisks[minor],
108dcd: 8b 45 cc mov -0x34(%ebp),%eax <== NOT EXECUTED
108dd0: e9 dd 02 00 00 jmp 1090b2 <rtems_fdisk_ioctl+0xccc><== NOT EXECUTED
(rtems_fdisk_monitor_data*) argp);
break;
case RTEMS_FDISK_IOCTL_INFO_LEVEL:
rtems_flashdisks[minor].info_level = (uintptr_t) argp;
108dd5: a1 7c 34 15 00 mov 0x15347c,%eax <== NOT EXECUTED
108dda: 8b 55 b8 mov -0x48(%ebp),%edx <== NOT EXECUTED
108ddd: 89 74 10 6c mov %esi,0x6c(%eax,%edx,1) <== NOT EXECUTED
break;
108de1: e9 e2 02 00 00 jmp 1090c8 <rtems_fdisk_ioctl+0xce2><== NOT EXECUTED
case RTEMS_FDISK_IOCTL_PRINT_STATUS:
errno = rtems_fdisk_print_status (&rtems_flashdisks[minor]);
108de6: e8 e1 63 01 00 call 11f1cc <__errno>
108deb: 89 45 b0 mov %eax,-0x50(%ebp)
108dee: 8b 5d b8 mov -0x48(%ebp),%ebx
108df1: 03 1d 7c 34 15 00 add 0x15347c,%ebx
*/
static int
rtems_fdisk_print_status (rtems_flashdisk* fd)
{
#if RTEMS_FDISK_TRACE
uint32_t current_info_level = fd->info_level;
108df7: 8b 73 6c mov 0x6c(%ebx),%esi
108dfa: 89 75 bc mov %esi,-0x44(%ebp)
uint32_t total;
uint32_t count;
uint32_t device;
fd->info_level = 3;
108dfd: c7 43 6c 03 00 00 00 movl $0x3,0x6c(%ebx)
rtems_fdisk_printf (fd,
108e04: ff 73 04 pushl 0x4(%ebx)
108e07: ff 33 pushl (%ebx)
108e09: 68 29 ec 12 00 push $0x12ec29
108e0e: 53 push %ebx
108e0f: e8 0e e9 ff ff call 107722 <rtems_fdisk_printf>
"Flash Disk Driver Status : %d.%d", fd->major, fd->minor);
rtems_fdisk_printf (fd, "Block count\t%d", fd->block_count);
108e14: 83 c4 0c add $0xc,%esp
108e17: ff 73 1c pushl 0x1c(%ebx)
108e1a: 68 4a ec 12 00 push $0x12ec4a
108e1f: 53 push %ebx
108e20: e8 fd e8 ff ff call 107722 <rtems_fdisk_printf>
rtems_fdisk_printf (fd, "Unavail blocks\t%d", fd->unavail_blocks);
108e25: 83 c4 0c add $0xc,%esp
108e28: ff 73 20 pushl 0x20(%ebx)
108e2b: 68 59 ec 12 00 push $0x12ec59
108e30: 53 push %ebx
108e31: e8 ec e8 ff ff call 107722 <rtems_fdisk_printf>
rtems_fdisk_printf (fd, "Starvation threshold\t%d", fd->starvation_threshold);
108e36: 83 c4 0c add $0xc,%esp
108e39: ff 73 24 pushl 0x24(%ebx)
108e3c: 68 6b ec 12 00 push $0x12ec6b
108e41: 53 push %ebx
108e42: e8 db e8 ff ff call 107722 <rtems_fdisk_printf>
rtems_fdisk_printf (fd, "Starvations\t%d", fd->starvations);
108e47: 83 c4 0c add $0xc,%esp
108e4a: ff 73 70 pushl 0x70(%ebx)
108e4d: 68 83 ec 12 00 push $0x12ec83
108e52: 53 push %ebx
108e53: e8 ca e8 ff ff call 107722 <rtems_fdisk_printf>
count = rtems_fdisk_segment_count_queue (&fd->available);
108e58: 8b 43 34 mov 0x34(%ebx),%eax
108e5b: e8 e6 e9 ff ff call 107846 <rtems_fdisk_segment_count_queue.isra.1>
108e60: 89 c7 mov %eax,%edi
total = count;
rtems_fdisk_printf (fd, "Available queue\t%ld (%ld)",
108e62: ff 73 3c pushl 0x3c(%ebx)
108e65: 50 push %eax
108e66: 68 92 ec 12 00 push $0x12ec92
108e6b: 53 push %ebx
108e6c: e8 b1 e8 ff ff call 107722 <rtems_fdisk_printf>
count, rtems_fdisk_segment_queue_count (&fd->available));
count = rtems_fdisk_segment_count_queue (&fd->used);
108e71: 83 c4 20 add $0x20,%esp
108e74: 8b 43 40 mov 0x40(%ebx),%eax
108e77: e8 ca e9 ff ff call 107846 <rtems_fdisk_segment_count_queue.isra.1>
total += count;
108e7c: 01 c7 add %eax,%edi
rtems_fdisk_printf (fd, "Used queue\t%ld (%ld)",
108e7e: ff 73 48 pushl 0x48(%ebx)
108e81: 50 push %eax
108e82: 68 ac ec 12 00 push $0x12ecac
108e87: 53 push %ebx
108e88: e8 95 e8 ff ff call 107722 <rtems_fdisk_printf>
count, rtems_fdisk_segment_queue_count (&fd->used));
count = rtems_fdisk_segment_count_queue (&fd->erase);
108e8d: 8b 43 4c mov 0x4c(%ebx),%eax
108e90: e8 b1 e9 ff ff call 107846 <rtems_fdisk_segment_count_queue.isra.1>
total += count;
108e95: 01 c7 add %eax,%edi
rtems_fdisk_printf (fd, "Erase queue\t%ld (%ld)",
108e97: ff 73 54 pushl 0x54(%ebx)
108e9a: 50 push %eax
108e9b: 68 c1 ec 12 00 push $0x12ecc1
108ea0: 53 push %ebx
108ea1: e8 7c e8 ff ff call 107722 <rtems_fdisk_printf>
count, rtems_fdisk_segment_queue_count (&fd->erase));
count = rtems_fdisk_segment_count_queue (&fd->failed);
108ea6: 83 c4 20 add $0x20,%esp
108ea9: 8b 43 58 mov 0x58(%ebx),%eax
108eac: e8 95 e9 ff ff call 107846 <rtems_fdisk_segment_count_queue.isra.1>
total += count;
108eb1: 01 c7 add %eax,%edi
rtems_fdisk_printf (fd, "Failed queue\t%ld (%ld)",
108eb3: ff 73 60 pushl 0x60(%ebx)
108eb6: 50 push %eax
108eb7: 68 d7 ec 12 00 push $0x12ecd7
108ebc: 53 push %ebx
108ebd: e8 60 e8 ff ff call 107722 <rtems_fdisk_printf>
count, rtems_fdisk_segment_queue_count (&fd->failed));
count = 0;
for (device = 0; device < fd->device_count; device++)
108ec2: 8b 43 30 mov 0x30(%ebx),%eax
108ec5: 83 c4 10 add $0x10,%esp
108ec8: 31 c9 xor %ecx,%ecx
count = rtems_fdisk_segment_count_queue (&fd->failed);
total += count;
rtems_fdisk_printf (fd, "Failed queue\t%ld (%ld)",
count, rtems_fdisk_segment_queue_count (&fd->failed));
count = 0;
108eca: 31 d2 xor %edx,%edx
108ecc: eb 0a jmp 108ed8 <rtems_fdisk_ioctl+0xaf2>
for (device = 0; device < fd->device_count; device++)
count += fd->devices[device].segment_count;
108ece: 6b f1 0c imul $0xc,%ecx,%esi
108ed1: 03 73 2c add 0x2c(%ebx),%esi
108ed4: 03 56 04 add 0x4(%esi),%edx
total += count;
rtems_fdisk_printf (fd, "Failed queue\t%ld (%ld)",
count, rtems_fdisk_segment_queue_count (&fd->failed));
count = 0;
for (device = 0; device < fd->device_count; device++)
108ed7: 41 inc %ecx
108ed8: 39 c1 cmp %eax,%ecx
108eda: 75 f2 jne 108ece <rtems_fdisk_ioctl+0xae8>
count += fd->devices[device].segment_count;
rtems_fdisk_printf (fd, "Queue total\t%ld of %ld, %s", total, count,
108edc: b8 20 e8 12 00 mov $0x12e820,%eax
108ee1: 39 d7 cmp %edx,%edi
108ee3: 75 05 jne 108eea <rtems_fdisk_ioctl+0xb04><== NEVER TAKEN
108ee5: b8 1d e8 12 00 mov $0x12e81d,%eax
108eea: 83 ec 0c sub $0xc,%esp
108eed: 50 push %eax
108eee: 52 push %edx
108eef: 57 push %edi
108ef0: 68 ee ec 12 00 push $0x12ecee
108ef5: 53 push %ebx
108ef6: e8 27 e8 ff ff call 107722 <rtems_fdisk_printf>
total == count ? "ok" : "MISSING");
rtems_fdisk_printf (fd, "Device count\t%d", fd->device_count);
108efb: 83 c4 1c add $0x1c,%esp
108efe: ff 73 30 pushl 0x30(%ebx)
108f01: 68 09 ed 12 00 push $0x12ed09
108f06: 53 push %ebx
108f07: e8 16 e8 ff ff call 107722 <rtems_fdisk_printf>
108f0c: 83 c4 10 add $0x10,%esp
for (device = 0; device < fd->device_count; device++)
108f0f: 31 ff xor %edi,%edi
108f11: e9 52 01 00 00 jmp 109068 <rtems_fdisk_ioctl+0xc82>
{
uint32_t block;
uint32_t seg;
rtems_fdisk_printf (fd, " Device\t\t%ld", device);
108f16: 50 push %eax
108f17: 57 push %edi
108f18: 68 19 ed 12 00 push $0x12ed19
108f1d: 53 push %ebx
108f1e: e8 ff e7 ff ff call 107722 <rtems_fdisk_printf>
* @param req IOCTL request code.
* @param argp IOCTL argument.
* @retval The IOCTL return value
*/
static int
rtems_fdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
108f23: 6b f7 0c imul $0xc,%edi,%esi
108f26: 89 75 b4 mov %esi,-0x4c(%ebp)
{
uint32_t block;
uint32_t seg;
rtems_fdisk_printf (fd, " Device\t\t%ld", device);
rtems_fdisk_printf (fd, " Segment count\t%ld",
108f29: 83 c4 0c add $0xc,%esp
108f2c: 8b 43 2c mov 0x2c(%ebx),%eax
108f2f: ff 74 30 04 pushl 0x4(%eax,%esi,1)
108f33: 68 26 ed 12 00 push $0x12ed26
108f38: 53 push %ebx
108f39: e8 e4 e7 ff ff call 107722 <rtems_fdisk_printf>
108f3e: 83 c4 10 add $0x10,%esp
fd->devices[device].segment_count);
for (seg = 0; seg < fd->devices[device].segment_count; seg++)
108f41: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)
108f48: e9 08 01 00 00 jmp 109055 <rtems_fdisk_ioctl+0xc6f>
* @param req IOCTL request code.
* @param argp IOCTL argument.
* @retval The IOCTL return value
*/
static int
rtems_fdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
108f4d: 6b 75 d4 30 imul $0x30,-0x2c(%ebp),%esi
rtems_fdisk_printf (fd, " Segment count\t%ld",
fd->devices[device].segment_count);
for (seg = 0; seg < fd->devices[device].segment_count; seg++)
{
rtems_fdisk_segment_ctl* sc = &fd->devices[device].segments[seg];
108f51: 03 30 add (%eax),%esi
uint32_t active = 0;
uint32_t used = 0;
bool is_active = false;
char queues[5];
rtems_fdisk_queue_status (fd, sc, queues);
108f53: 8d 4d e3 lea -0x1d(%ebp),%ecx
108f56: 89 f2 mov %esi,%edx
108f58: 89 d8 mov %ebx,%eax
108f5a: e8 e6 ea ff ff call 107a45 <rtems_fdisk_queue_status>
rtems_fdisk_segment_ctl* sc = &fd->devices[device].segments[seg];
uint32_t page;
uint32_t erased = 0;
uint32_t active = 0;
uint32_t used = 0;
bool is_active = false;
108f5f: c6 45 c4 00 movb $0x0,-0x3c(%ebp)
{
rtems_fdisk_segment_ctl* sc = &fd->devices[device].segments[seg];
uint32_t page;
uint32_t erased = 0;
uint32_t active = 0;
uint32_t used = 0;
108f63: c7 45 cc 00 00 00 00 movl $0x0,-0x34(%ebp)
for (seg = 0; seg < fd->devices[device].segment_count; seg++)
{
rtems_fdisk_segment_ctl* sc = &fd->devices[device].segments[seg];
uint32_t page;
uint32_t erased = 0;
uint32_t active = 0;
108f6a: c7 45 d0 00 00 00 00 movl $0x0,-0x30(%ebp)
for (seg = 0; seg < fd->devices[device].segment_count; seg++)
{
rtems_fdisk_segment_ctl* sc = &fd->devices[device].segments[seg];
uint32_t page;
uint32_t erased = 0;
108f71: c7 45 c8 00 00 00 00 movl $0x0,-0x38(%ebp)
bool is_active = false;
char queues[5];
rtems_fdisk_queue_status (fd, sc, queues);
for (page = 0; page < sc->pages; page++)
108f78: 31 d2 xor %edx,%edx
108f7a: eb 76 jmp 108ff2 <rtems_fdisk_ioctl+0xc0c>
{
if (rtems_fdisk_page_desc_erased (&sc->page_descriptors[page]))
108f7c: 8b 46 10 mov 0x10(%esi),%eax
108f7f: 8d 0c d0 lea (%eax,%edx,8),%ecx
108f82: 89 c8 mov %ecx,%eax
108f84: 89 55 90 mov %edx,-0x70(%ebp)
108f87: 89 4d 94 mov %ecx,-0x6c(%ebp)
108f8a: e8 fe e6 ff ff call 10768d <rtems_fdisk_page_desc_erased>
108f8f: 84 c0 test %al,%al
108f91: 8b 55 90 mov -0x70(%ebp),%edx
108f94: 8b 4d 94 mov -0x6c(%ebp),%ecx
108f97: 74 05 je 108f9e <rtems_fdisk_ioctl+0xbb8>
erased++;
108f99: ff 45 c8 incl -0x38(%ebp)
108f9c: eb 18 jmp 108fb6 <rtems_fdisk_ioctl+0xbd0>
}
rtems_flashdisk_count = rtems_flashdisk_configuration_size;
return RTEMS_SUCCESSFUL;
}
108f9e: 66 8b 41 02 mov 0x2(%ecx),%ax
for (page = 0; page < sc->pages; page++)
{
if (rtems_fdisk_page_desc_erased (&sc->page_descriptors[page]))
erased++;
else if (rtems_fdisk_page_desc_flags_set (&sc->page_descriptors[page],
108fa2: a8 01 test $0x1,%al
108fa4: 75 10 jne 108fb6 <rtems_fdisk_ioctl+0xbd0><== NEVER TAKEN
RTEMS_FDISK_PAGE_ACTIVE))
{
if (rtems_fdisk_page_desc_flags_set (&sc->page_descriptors[page],
108fa6: a8 02 test $0x2,%al
108fa8: 75 05 jne 108faf <rtems_fdisk_ioctl+0xbc9>
RTEMS_FDISK_PAGE_USED))
used++;
108faa: ff 45 cc incl -0x34(%ebp)
108fad: eb 07 jmp 108fb6 <rtems_fdisk_ioctl+0xbd0>
else
{
active++;
108faf: ff 45 d0 incl -0x30(%ebp)
is_active = true;
108fb2: c6 45 c4 01 movb $0x1,-0x3c(%ebp)
}
}
for (block = 0; block < fd->block_count; block++)
108fb6: 31 c9 xor %ecx,%ecx
108fb8: eb 32 jmp 108fec <rtems_fdisk_ioctl+0xc06>
{
if ((fd->blocks[block].segment == sc) &&
108fba: 8b 43 18 mov 0x18(%ebx),%eax
108fbd: 8d 04 c8 lea (%eax,%ecx,8),%eax
108fc0: 39 30 cmp %esi,(%eax)
108fc2: 75 27 jne 108feb <rtems_fdisk_ioctl+0xc05>
108fc4: 39 50 04 cmp %edx,0x4(%eax)
108fc7: 75 22 jne 108feb <rtems_fdisk_ioctl+0xc05>
(fd->blocks[block].page == page) && !is_active)
108fc9: 80 7d c4 00 cmpb $0x0,-0x3c(%ebp)
108fcd: 75 1c jne 108feb <rtems_fdisk_ioctl+0xc05><== ALWAYS TAKEN
rtems_fdisk_printf (fd,
108fcf: 51 push %ecx <== NOT EXECUTED
108fd0: 52 push %edx <== NOT EXECUTED
108fd1: 68 3a ed 12 00 push $0x12ed3a <== NOT EXECUTED
108fd6: 53 push %ebx <== NOT EXECUTED
108fd7: 89 55 90 mov %edx,-0x70(%ebp) <== NOT EXECUTED
108fda: 89 4d 94 mov %ecx,-0x6c(%ebp) <== NOT EXECUTED
108fdd: e8 40 e7 ff ff call 107722 <rtems_fdisk_printf> <== NOT EXECUTED
108fe2: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
108fe5: 8b 4d 94 mov -0x6c(%ebp),%ecx <== NOT EXECUTED
108fe8: 8b 55 90 mov -0x70(%ebp),%edx <== NOT EXECUTED
active++;
is_active = true;
}
}
for (block = 0; block < fd->block_count; block++)
108feb: 41 inc %ecx
108fec: 3b 4b 1c cmp 0x1c(%ebx),%ecx
108fef: 72 c9 jb 108fba <rtems_fdisk_ioctl+0xbd4>
bool is_active = false;
char queues[5];
rtems_fdisk_queue_status (fd, sc, queues);
for (page = 0; page < sc->pages; page++)
108ff1: 42 inc %edx
108ff2: 8b 46 14 mov 0x14(%esi),%eax
108ff5: 89 45 c0 mov %eax,-0x40(%ebp)
108ff8: 39 c2 cmp %eax,%edx
108ffa: 72 80 jb 108f7c <rtems_fdisk_ioctl+0xb96>
page, block);
}
}
count = 0;
for (block = 0; block < fd->block_count; block++)
108ffc: 8b 53 1c mov 0x1c(%ebx),%edx
108fff: 89 55 ac mov %edx,-0x54(%ebp)
109002: 31 c0 xor %eax,%eax
109004: 31 d2 xor %edx,%edx
109006: eb 0f jmp 109017 <rtems_fdisk_ioctl+0xc31>
{
if (fd->blocks[block].segment == sc)
count++;
109008: 8b 4b 18 mov 0x18(%ebx),%ecx
10900b: 39 34 c1 cmp %esi,(%ecx,%eax,8)
10900e: 0f 94 c1 sete %cl
109011: 0f b6 c9 movzbl %cl,%ecx
109014: 01 ca add %ecx,%edx
page, block);
}
}
count = 0;
for (block = 0; block < fd->block_count; block++)
109016: 40 inc %eax
109017: 3b 45 ac cmp -0x54(%ebp),%eax
10901a: 75 ec jne 109008 <rtems_fdisk_ioctl+0xc22>
rtems_fdisk_printf (fd, " %3ld %s p:%3ld a:%3ld/%3ld" \
" u:%3ld/%3ld e:%3ld/%3ld br:%ld",
seg, queues,
sc->pages, sc->pages_active, active,
sc->pages_used, used, erased,
sc->pages - (sc->pages_active +
10901c: 8b 46 1c mov 0x1c(%esi),%eax
sc->pages_used + sc->pages_bad),
10901f: 8b 4e 20 mov 0x20(%esi),%ecx
{
if (fd->blocks[block].segment == sc)
count++;
}
rtems_fdisk_printf (fd, " %3ld %s p:%3ld a:%3ld/%3ld" \
109022: 52 push %edx
* @param req IOCTL request code.
* @param argp IOCTL argument.
* @retval The IOCTL return value
*/
static int
rtems_fdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
109023: 8d 14 01 lea (%ecx,%eax,1),%edx
109026: 03 56 24 add 0x24(%esi),%edx
{
if (fd->blocks[block].segment == sc)
count++;
}
rtems_fdisk_printf (fd, " %3ld %s p:%3ld a:%3ld/%3ld" \
109029: 8b 75 c0 mov -0x40(%ebp),%esi
10902c: 29 d6 sub %edx,%esi
10902e: 56 push %esi
10902f: ff 75 c8 pushl -0x38(%ebp)
109032: ff 75 cc pushl -0x34(%ebp)
109035: 51 push %ecx
109036: ff 75 d0 pushl -0x30(%ebp)
109039: 50 push %eax
10903a: ff 75 c0 pushl -0x40(%ebp)
10903d: 8d 45 e3 lea -0x1d(%ebp),%eax
109040: 50 push %eax
109041: ff 75 d4 pushl -0x2c(%ebp)
109044: 68 67 ed 12 00 push $0x12ed67
109049: 53 push %ebx
10904a: e8 d3 e6 ff ff call 107722 <rtems_fdisk_printf>
rtems_fdisk_printf (fd, " Device\t\t%ld", device);
rtems_fdisk_printf (fd, " Segment count\t%ld",
fd->devices[device].segment_count);
for (seg = 0; seg < fd->devices[device].segment_count; seg++)
10904f: ff 45 d4 incl -0x2c(%ebp)
109052: 83 c4 30 add $0x30,%esp
109055: 8b 45 b4 mov -0x4c(%ebp),%eax
109058: 03 43 2c add 0x2c(%ebx),%eax
10905b: 8b 75 d4 mov -0x2c(%ebp),%esi
10905e: 3b 70 04 cmp 0x4(%eax),%esi
109061: 0f 82 e6 fe ff ff jb 108f4d <rtems_fdisk_ioctl+0xb67><== NEVER TAKEN
rtems_fdisk_printf (fd, "Queue total\t%ld of %ld, %s", total, count,
total == count ? "ok" : "MISSING");
rtems_fdisk_printf (fd, "Device count\t%d", fd->device_count);
for (device = 0; device < fd->device_count; device++)
109067: 47 inc %edi
109068: 3b 7b 30 cmp 0x30(%ebx),%edi
10906b: 0f 82 a5 fe ff ff jb 108f16 <rtems_fdisk_ioctl+0xb30><== NEVER TAKEN
count);
}
}
{
rtems_fdisk_segment_ctl* sc = fd->used.head;
109071: 8b 73 40 mov 0x40(%ebx),%esi
int count = 0;
rtems_fdisk_printf (fd, "Used List:");
109074: 50 push %eax
109075: 50 push %eax
109076: 68 a3 ed 12 00 push $0x12eda3
10907b: 53 push %ebx
10907c: e8 a1 e6 ff ff call 107722 <rtems_fdisk_printf>
109081: 83 c4 10 add $0x10,%esp
}
}
{
rtems_fdisk_segment_ctl* sc = fd->used.head;
int count = 0;
109084: 31 ff xor %edi,%edi
109086: eb 1d jmp 1090a5 <rtems_fdisk_ioctl+0xcbf>
rtems_fdisk_printf (fd, "Used List:");
while (sc)
{
rtems_fdisk_printf (fd, " %3d %02d:%03d u:%3ld",
109088: 50 push %eax
109089: 50 push %eax
10908a: ff 76 20 pushl 0x20(%esi)
10908d: ff 76 0c pushl 0xc(%esi)
109090: ff 76 08 pushl 0x8(%esi)
109093: 57 push %edi
109094: 68 ae ed 12 00 push $0x12edae
109099: 53 push %ebx
10909a: e8 83 e6 ff ff call 107722 <rtems_fdisk_printf>
count, sc->device, sc->segment, sc->pages_used);
sc = sc->next;
10909f: 8b 36 mov (%esi),%esi
count++;
1090a1: 47 inc %edi
1090a2: 83 c4 20 add $0x20,%esp
{
rtems_fdisk_segment_ctl* sc = fd->used.head;
int count = 0;
rtems_fdisk_printf (fd, "Used List:");
while (sc)
1090a5: 85 f6 test %esi,%esi
1090a7: 75 df jne 109088 <rtems_fdisk_ioctl+0xca2>
count, sc->device, sc->segment, sc->pages_used);
sc = sc->next;
count++;
}
}
fd->info_level = current_info_level;
1090a9: 8b 75 bc mov -0x44(%ebp),%esi
1090ac: 89 73 6c mov %esi,0x6c(%ebx)
case RTEMS_FDISK_IOCTL_INFO_LEVEL:
rtems_flashdisks[minor].info_level = (uintptr_t) argp;
break;
case RTEMS_FDISK_IOCTL_PRINT_STATUS:
errno = rtems_fdisk_print_status (&rtems_flashdisks[minor]);
1090af: 8b 45 b0 mov -0x50(%ebp),%eax
1090b2: c7 00 00 00 00 00 movl $0x0,(%eax)
break;
1090b8: eb 0e jmp 1090c8 <rtems_fdisk_ioctl+0xce2>
default:
rtems_blkdev_ioctl (dd, req, argp);
1090ba: 50 push %eax
1090bb: 56 push %esi
1090bc: 53 push %ebx
1090bd: ff 75 08 pushl 0x8(%ebp)
1090c0: e8 4b c8 00 00 call 115910 <rtems_blkdev_ioctl>
break;
1090c5: 83 c4 10 add $0x10,%esp
}
sc = rtems_semaphore_release (rtems_flashdisks[minor].lock);
1090c8: 83 ec 0c sub $0xc,%esp
1090cb: a1 7c 34 15 00 mov 0x15347c,%eax
1090d0: 8b 75 b8 mov -0x48(%ebp),%esi
1090d3: ff 74 30 64 pushl 0x64(%eax,%esi,1)
1090d7: e8 ac 4c 00 00 call 10dd88 <rtems_semaphore_release>
if (sc != RTEMS_SUCCESSFUL)
1090dc: 83 c4 10 add $0x10,%esp
1090df: 85 c0 test %eax,%eax
1090e1: 74 0b je 1090ee <rtems_fdisk_ioctl+0xd08><== ALWAYS TAKEN
errno = EIO;
1090e3: e8 e4 60 01 00 call 11f1cc <__errno> <== NOT EXECUTED
1090e8: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
}
return errno == 0 ? 0 : -1;
1090ee: e8 d9 60 01 00 call 11f1cc <__errno>
1090f3: 83 38 01 cmpl $0x1,(%eax)
1090f6: 19 c0 sbb %eax,%eax
1090f8: f7 d0 not %eax
1090fa: eb 1b jmp 109117 <rtems_fdisk_ioctl+0xd31>
uint8_t* data;
uint32_t fb;
uint32_t b;
fb = sg->length / fd->block_size;
data = sg->buffer;
for (b = 0; b < fb; b++, data += fd->block_size)
1090fc: ff 45 c4 incl -0x3c(%ebp)
1090ff: 8b 45 d4 mov -0x2c(%ebp),%eax
109102: 8b 40 14 mov 0x14(%eax),%eax
109105: 01 45 c8 add %eax,-0x38(%ebp)
109108: e9 ba f5 ff ff jmp 1086c7 <rtems_fdisk_ioctl+0x2e1>
10910d: b8 01 00 00 00 mov $0x1,%eax <== NOT EXECUTED
109112: e9 be f5 ff ff jmp 1086d5 <rtems_fdisk_ioctl+0x2ef><== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
errno = EIO;
}
return errno == 0 ? 0 : -1;
}
109117: 8d 65 f4 lea -0xc(%ebp),%esp
10911a: 5b pop %ebx
10911b: 5e pop %esi
10911c: 5f pop %edi
10911d: 5d pop %ebp
10911e: c3 ret
00107b6b <rtems_fdisk_queue_segment>:
* @param fd The flash disk control table.
* @param sc The segment control table to be reallocated
*/
static void
rtems_fdisk_queue_segment (rtems_flashdisk* fd, rtems_fdisk_segment_ctl* sc)
{
107b6b: 55 push %ebp
107b6c: 89 e5 mov %esp,%ebp
107b6e: 57 push %edi
107b6f: 56 push %esi
107b70: 53 push %ebx
107b71: 83 ec 1c sub $0x1c,%esp
107b74: 89 c6 mov %eax,%esi
107b76: 89 d3 mov %edx,%ebx
#if RTEMS_FDISK_TRACE
rtems_fdisk_info (fd, " queue-seg:%02d-%03d: p=%d a=%d u=%d b=%d f=%s n=%s",
107b78: 83 3a 00 cmpl $0x0,(%edx)
107b7b: 74 07 je 107b84 <rtems_fdisk_queue_segment+0x19>
107b7d: ba 22 08 13 00 mov $0x130822,%edx
107b82: eb 05 jmp 107b89 <rtems_fdisk_queue_segment+0x1e>
107b84: ba 97 e4 12 00 mov $0x12e497,%edx
107b89: b8 8f 07 13 00 mov $0x13078f,%eax
107b8e: 83 7b 28 00 cmpl $0x0,0x28(%ebx)
107b92: 74 05 je 107b99 <rtems_fdisk_queue_segment+0x2e><== ALWAYS TAKEN
107b94: b8 9c e4 12 00 mov $0x12e49c,%eax <== NOT EXECUTED
107b99: 57 push %edi
107b9a: 57 push %edi
107b9b: 52 push %edx
107b9c: 50 push %eax
107b9d: ff 73 24 pushl 0x24(%ebx)
107ba0: ff 73 20 pushl 0x20(%ebx)
107ba3: ff 73 1c pushl 0x1c(%ebx)
107ba6: ff 73 14 pushl 0x14(%ebx)
107ba9: ff 73 0c pushl 0xc(%ebx)
107bac: ff 73 08 pushl 0x8(%ebx)
107baf: 68 a3 e4 12 00 push $0x12e4a3
107bb4: 56 push %esi
107bb5: e8 00 fb ff ff call 1076ba <rtems_fdisk_info>
/*
* If the segment has failed then check the failed queue and append
* if not failed.
*/
if (sc->failed)
107bba: 83 c4 30 add $0x30,%esp
107bbd: 83 7b 28 00 cmpl $0x0,0x28(%ebx)
107bc1: 74 15 je 107bd8 <rtems_fdisk_queue_segment+0x6d><== ALWAYS TAKEN
}
rtems_flashdisk_count = rtems_flashdisk_configuration_size;
return RTEMS_SUCCESSFUL;
}
107bc3: 8b 46 58 mov 0x58(%esi),%eax <== NOT EXECUTED
107bc6: eb 0a jmp 107bd2 <rtems_fdisk_queue_segment+0x67><== NOT EXECUTED
{
rtems_fdisk_segment_ctl* it = queue->head;
while (it)
{
if (it == sc)
107bc8: 39 d8 cmp %ebx,%eax <== NOT EXECUTED
107bca: 0f 84 b7 00 00 00 je 107c87 <rtems_fdisk_queue_segment+0x11c><== NOT EXECUTED
return true;
it = it->next;
107bd0: 8b 00 mov (%eax),%eax <== NOT EXECUTED
rtems_fdisk_segment_queue_present (rtems_fdisk_segment_ctl_queue* queue,
rtems_fdisk_segment_ctl* sc)
{
rtems_fdisk_segment_ctl* it = queue->head;
while (it)
107bd2: 85 c0 test %eax,%eax <== NOT EXECUTED
107bd4: 75 f2 jne 107bc8 <rtems_fdisk_queue_segment+0x5d><== NOT EXECUTED
107bd6: eb 78 jmp 107c50 <rtems_fdisk_queue_segment+0xe5><== NOT EXECUTED
}
/*
* Remove the queue from the available or used queue.
*/
rtems_fdisk_segment_queue_remove (&fd->available, sc);
107bd8: 8d 46 34 lea 0x34(%esi),%eax
107bdb: 89 45 e4 mov %eax,-0x1c(%ebp)
107bde: 89 da mov %ebx,%edx
107be0: e8 31 fa ff ff call 107616 <rtems_fdisk_segment_queue_remove>
rtems_fdisk_segment_queue_remove (&fd->used, sc);
107be5: 8d 7e 40 lea 0x40(%esi),%edi
107be8: 89 da mov %ebx,%edx
107bea: 89 f8 mov %edi,%eax
107bec: e8 25 fa ff ff call 107616 <rtems_fdisk_segment_queue_remove>
* If they are and the driver has been configured to background
* erase place the segment on the used queue. If not configured
* to background erase perform the erase now.
*
*/
if (rtems_fdisk_seg_pages_available (sc) == 0)
107bf1: 89 d8 mov %ebx,%eax
107bf3: e8 ad fa ff ff call 1076a5 <rtems_fdisk_seg_pages_available>
107bf8: 89 c2 mov %eax,%edx
107bfa: 85 c0 test %eax,%eax
107bfc: 75 34 jne 107c32 <rtems_fdisk_queue_segment+0xc7>
{
if (sc->pages_active)
107bfe: 83 7b 1c 00 cmpl $0x0,0x1c(%ebx)
107c02: 74 15 je 107c19 <rtems_fdisk_queue_segment+0xae><== NEVER TAKEN
/*
* Keep the used queue sorted by the most number of used
* pages. When we compact we want to move the pages into
* a new segment and cover more than one segment.
*/
rtems_fdisk_segment_ctl* seg = fd->used.head;
107c04: 8b 56 40 mov 0x40(%esi),%edx
while (seg)
107c07: eb 0a jmp 107c13 <rtems_fdisk_queue_segment+0xa8>
{
if (sc->pages_used > seg->pages_used)
107c09: 8b 42 20 mov 0x20(%edx),%eax
107c0c: 39 43 20 cmp %eax,0x20(%ebx)
107c0f: 77 4c ja 107c5d <rtems_fdisk_queue_segment+0xf2>
break;
seg = seg->next;
107c11: 8b 12 mov (%edx),%edx
* pages. When we compact we want to move the pages into
* a new segment and cover more than one segment.
*/
rtems_fdisk_segment_ctl* seg = fd->used.head;
while (seg)
107c13: 85 d2 test %edx,%edx
107c15: 75 f2 jne 107c09 <rtems_fdisk_queue_segment+0x9e>
107c17: eb 3e jmp 107c57 <rtems_fdisk_queue_segment+0xec>
rtems_fdisk_segment_queue_push_tail (&fd->used, sc);
}
else
{
if ((fd->flags & RTEMS_FDISK_BACKGROUND_ERASE))
rtems_fdisk_segment_queue_push_tail (&fd->erase, sc);
107c19: 8d 46 4c lea 0x4c(%esi),%eax <== NOT EXECUTED
else
rtems_fdisk_segment_queue_push_tail (&fd->used, sc);
}
else
{
if ((fd->flags & RTEMS_FDISK_BACKGROUND_ERASE))
107c1c: f6 46 08 01 testb $0x1,0x8(%esi) <== NOT EXECUTED
107c20: 75 31 jne 107c53 <rtems_fdisk_queue_segment+0xe8><== NOT EXECUTED
rtems_fdisk_segment_queue_push_tail (&fd->erase, sc);
else
rtems_fdisk_erase_segment (fd, sc);
107c22: 89 da mov %ebx,%edx <== NOT EXECUTED
107c24: 89 f0 mov %esi,%eax <== NOT EXECUTED
if (seg)
rtems_fdisk_segment_queue_insert_before (&fd->available, seg, sc);
else
rtems_fdisk_segment_queue_push_tail (&fd->available, sc);
}
}
107c26: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
107c29: 5b pop %ebx <== NOT EXECUTED
107c2a: 5e pop %esi <== NOT EXECUTED
107c2b: 5f pop %edi <== NOT EXECUTED
107c2c: 5d pop %ebp <== NOT EXECUTED
else
{
if ((fd->flags & RTEMS_FDISK_BACKGROUND_ERASE))
rtems_fdisk_segment_queue_push_tail (&fd->erase, sc);
else
rtems_fdisk_erase_segment (fd, sc);
107c2d: e9 7d fe ff ff jmp 107aaf <rtems_fdisk_erase_segment><== NOT EXECUTED
* bit is cleared for that segment. When 32 erasers
* has occurred the page is re-written to the flash
* with all the counters updated with the number of
* bits cleared and all bits set back to 1.
*/
rtems_fdisk_segment_ctl* seg = fd->available.head;
107c32: 8b 7e 34 mov 0x34(%esi),%edi
while (seg)
107c35: eb 13 jmp 107c4a <rtems_fdisk_queue_segment+0xdf>
{
if (rtems_fdisk_seg_pages_available (sc) <
rtems_fdisk_seg_pages_available (seg))
107c37: 89 f8 mov %edi,%eax
107c39: 89 55 e0 mov %edx,-0x20(%ebp)
107c3c: e8 64 fa ff ff call 1076a5 <rtems_fdisk_seg_pages_available>
*/
rtems_fdisk_segment_ctl* seg = fd->available.head;
while (seg)
{
if (rtems_fdisk_seg_pages_available (sc) <
107c41: 8b 55 e0 mov -0x20(%ebp),%edx
107c44: 39 c2 cmp %eax,%edx
107c46: 72 1b jb 107c63 <rtems_fdisk_queue_segment+0xf8>
rtems_fdisk_seg_pages_available (seg))
break;
seg = seg->next;
107c48: 8b 3f mov (%edi),%edi
* with all the counters updated with the number of
* bits cleared and all bits set back to 1.
*/
rtems_fdisk_segment_ctl* seg = fd->available.head;
while (seg)
107c4a: 85 ff test %edi,%edi
107c4c: 75 e9 jne 107c37 <rtems_fdisk_queue_segment+0xcc>
107c4e: eb 26 jmp 107c76 <rtems_fdisk_queue_segment+0x10b>
* if not failed.
*/
if (sc->failed)
{
if (!rtems_fdisk_segment_queue_present (&fd->failed, sc))
rtems_fdisk_segment_queue_push_tail (&fd->failed, sc);
107c50: 8d 46 58 lea 0x58(%esi),%eax <== NOT EXECUTED
107c53: 89 da mov %ebx,%edx <== NOT EXECUTED
107c55: eb 24 jmp 107c7b <rtems_fdisk_queue_segment+0x110><== NOT EXECUTED
}
if (seg)
rtems_fdisk_segment_queue_insert_before (&fd->used, seg, sc);
else
rtems_fdisk_segment_queue_push_tail (&fd->used, sc);
107c57: 89 da mov %ebx,%edx
107c59: 89 f8 mov %edi,%eax
107c5b: eb 1e jmp 107c7b <rtems_fdisk_queue_segment+0x110>
break;
seg = seg->next;
}
if (seg)
rtems_fdisk_segment_queue_insert_before (&fd->used, seg, sc);
107c5d: 89 d9 mov %ebx,%ecx
107c5f: 89 f8 mov %edi,%eax
107c61: eb 07 jmp 107c6a <rtems_fdisk_queue_segment+0xff>
break;
seg = seg->next;
}
if (seg)
rtems_fdisk_segment_queue_insert_before (&fd->available, seg, sc);
107c63: 89 d9 mov %ebx,%ecx
107c65: 89 fa mov %edi,%edx
107c67: 8b 45 e4 mov -0x1c(%ebp),%eax
else
rtems_fdisk_segment_queue_push_tail (&fd->available, sc);
}
}
107c6a: 8d 65 f4 lea -0xc(%ebp),%esp
107c6d: 5b pop %ebx
107c6e: 5e pop %esi
107c6f: 5f pop %edi
107c70: 5d pop %ebp
break;
seg = seg->next;
}
if (seg)
rtems_fdisk_segment_queue_insert_before (&fd->available, seg, sc);
107c71: e9 e3 f9 ff ff jmp 107659 <rtems_fdisk_segment_queue_insert_before>
else
rtems_fdisk_segment_queue_push_tail (&fd->available, sc);
107c76: 89 da mov %ebx,%edx
107c78: 8b 45 e4 mov -0x1c(%ebp),%eax
}
}
107c7b: 8d 65 f4 lea -0xc(%ebp),%esp
107c7e: 5b pop %ebx
107c7f: 5e pop %esi
107c80: 5f pop %edi
107c81: 5d pop %ebp
}
if (seg)
rtems_fdisk_segment_queue_insert_before (&fd->available, seg, sc);
else
rtems_fdisk_segment_queue_push_tail (&fd->available, sc);
107c82: e9 69 f9 ff ff jmp 1075f0 <rtems_fdisk_segment_queue_push_tail>
}
}
107c87: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
107c8a: 5b pop %ebx <== NOT EXECUTED
107c8b: 5e pop %esi <== NOT EXECUTED
107c8c: 5f pop %edi <== NOT EXECUTED
107c8d: 5d pop %ebp <== NOT EXECUTED
107c8e: c3 ret <== NOT EXECUTED
00107a45 <rtems_fdisk_queue_status>:
*/
static void
rtems_fdisk_queue_status (rtems_flashdisk* fd,
rtems_fdisk_segment_ctl* sc,
char queues[5])
{
107a45: 55 push %ebp
107a46: 89 e5 mov %esp,%ebp
107a48: 53 push %ebx
}
rtems_flashdisk_count = rtems_flashdisk_configuration_size;
return RTEMS_SUCCESSFUL;
}
107a49: 8b 58 34 mov 0x34(%eax),%ebx
107a4c: eb 06 jmp 107a54 <rtems_fdisk_queue_status+0xf>
{
rtems_fdisk_segment_ctl* it = queue->head;
while (it)
{
if (it == sc)
107a4e: 39 d3 cmp %edx,%ebx
107a50: 74 0a je 107a5c <rtems_fdisk_queue_status+0x17>
return true;
it = it->next;
107a52: 8b 1b mov (%ebx),%ebx
rtems_fdisk_segment_queue_present (rtems_fdisk_segment_ctl_queue* queue,
rtems_fdisk_segment_ctl* sc)
{
rtems_fdisk_segment_ctl* it = queue->head;
while (it)
107a54: 85 db test %ebx,%ebx
107a56: 75 f6 jne 107a4e <rtems_fdisk_queue_status+0x9>
static void
rtems_fdisk_queue_status (rtems_flashdisk* fd,
rtems_fdisk_segment_ctl* sc,
char queues[5])
{
queues[0] = rtems_fdisk_segment_queue_present (&fd->available, sc) ? 'A' : '-';
107a58: b3 2d mov $0x2d,%bl
107a5a: eb 02 jmp 107a5e <rtems_fdisk_queue_status+0x19>
107a5c: b3 41 mov $0x41,%bl
107a5e: 88 19 mov %bl,(%ecx)
}
rtems_flashdisk_count = rtems_flashdisk_configuration_size;
return RTEMS_SUCCESSFUL;
}
107a60: 8b 58 40 mov 0x40(%eax),%ebx
107a63: eb 06 jmp 107a6b <rtems_fdisk_queue_status+0x26>
{
rtems_fdisk_segment_ctl* it = queue->head;
while (it)
{
if (it == sc)
107a65: 39 d3 cmp %edx,%ebx
107a67: 74 0a je 107a73 <rtems_fdisk_queue_status+0x2e>
return true;
it = it->next;
107a69: 8b 1b mov (%ebx),%ebx
rtems_fdisk_segment_queue_present (rtems_fdisk_segment_ctl_queue* queue,
rtems_fdisk_segment_ctl* sc)
{
rtems_fdisk_segment_ctl* it = queue->head;
while (it)
107a6b: 85 db test %ebx,%ebx
107a6d: 75 f6 jne 107a65 <rtems_fdisk_queue_status+0x20>
rtems_fdisk_queue_status (rtems_flashdisk* fd,
rtems_fdisk_segment_ctl* sc,
char queues[5])
{
queues[0] = rtems_fdisk_segment_queue_present (&fd->available, sc) ? 'A' : '-';
queues[1] = rtems_fdisk_segment_queue_present (&fd->used, sc) ? 'U' : '-';
107a6f: b3 2d mov $0x2d,%bl
107a71: eb 02 jmp 107a75 <rtems_fdisk_queue_status+0x30>
107a73: b3 55 mov $0x55,%bl
107a75: 88 59 01 mov %bl,0x1(%ecx)
}
rtems_flashdisk_count = rtems_flashdisk_configuration_size;
return RTEMS_SUCCESSFUL;
}
107a78: 8b 58 4c mov 0x4c(%eax),%ebx
107a7b: eb 06 jmp 107a83 <rtems_fdisk_queue_status+0x3e>
{
rtems_fdisk_segment_ctl* it = queue->head;
while (it)
{
if (it == sc)
107a7d: 39 d3 cmp %edx,%ebx <== NOT EXECUTED
107a7f: 74 0a je 107a8b <rtems_fdisk_queue_status+0x46><== NOT EXECUTED
return true;
it = it->next;
107a81: 8b 1b mov (%ebx),%ebx <== NOT EXECUTED
rtems_fdisk_segment_queue_present (rtems_fdisk_segment_ctl_queue* queue,
rtems_fdisk_segment_ctl* sc)
{
rtems_fdisk_segment_ctl* it = queue->head;
while (it)
107a83: 85 db test %ebx,%ebx
107a85: 75 f6 jne 107a7d <rtems_fdisk_queue_status+0x38><== NEVER TAKEN
rtems_fdisk_segment_ctl* sc,
char queues[5])
{
queues[0] = rtems_fdisk_segment_queue_present (&fd->available, sc) ? 'A' : '-';
queues[1] = rtems_fdisk_segment_queue_present (&fd->used, sc) ? 'U' : '-';
queues[2] = rtems_fdisk_segment_queue_present (&fd->erase, sc) ? 'E' : '-';
107a87: b3 2d mov $0x2d,%bl
107a89: eb 02 jmp 107a8d <rtems_fdisk_queue_status+0x48>
107a8b: b3 45 mov $0x45,%bl <== NOT EXECUTED
107a8d: 88 59 02 mov %bl,0x2(%ecx)
}
rtems_flashdisk_count = rtems_flashdisk_configuration_size;
return RTEMS_SUCCESSFUL;
}
107a90: 8b 40 58 mov 0x58(%eax),%eax
107a93: eb 06 jmp 107a9b <rtems_fdisk_queue_status+0x56>
{
rtems_fdisk_segment_ctl* it = queue->head;
while (it)
{
if (it == sc)
107a95: 39 d0 cmp %edx,%eax <== NOT EXECUTED
107a97: 74 0a je 107aa3 <rtems_fdisk_queue_status+0x5e><== NOT EXECUTED
return true;
it = it->next;
107a99: 8b 00 mov (%eax),%eax <== NOT EXECUTED
rtems_fdisk_segment_queue_present (rtems_fdisk_segment_ctl_queue* queue,
rtems_fdisk_segment_ctl* sc)
{
rtems_fdisk_segment_ctl* it = queue->head;
while (it)
107a9b: 85 c0 test %eax,%eax
107a9d: 75 f6 jne 107a95 <rtems_fdisk_queue_status+0x50><== NEVER TAKEN
char queues[5])
{
queues[0] = rtems_fdisk_segment_queue_present (&fd->available, sc) ? 'A' : '-';
queues[1] = rtems_fdisk_segment_queue_present (&fd->used, sc) ? 'U' : '-';
queues[2] = rtems_fdisk_segment_queue_present (&fd->erase, sc) ? 'E' : '-';
queues[3] = rtems_fdisk_segment_queue_present (&fd->failed, sc) ? 'F' : '-';
107a9f: b0 2d mov $0x2d,%al
107aa1: eb 02 jmp 107aa5 <rtems_fdisk_queue_status+0x60>
107aa3: b0 46 mov $0x46,%al <== NOT EXECUTED
107aa5: 88 41 03 mov %al,0x3(%ecx)
queues[4] = '\0';
107aa8: c6 41 04 00 movb $0x0,0x4(%ecx)
}
107aac: 5b pop %ebx
107aad: 5d pop %ebp
107aae: c3 ret
00107c8f <rtems_fdisk_recover_block_mappings>:
/**
* Recover the block mappings from the devices.
*/
static int
rtems_fdisk_recover_block_mappings (rtems_flashdisk* fd)
{
107c8f: 55 push %ebp
107c90: 89 e5 mov %esp,%ebp
107c92: 57 push %edi
107c93: 56 push %esi
107c94: 53 push %ebx
107c95: 83 ec 2c sub $0x2c,%esp
107c98: 89 c3 mov %eax,%ebx
* Initialise the segment control queue.
*/
static void
rtems_fdisk_segment_queue_init (rtems_fdisk_segment_ctl_queue* queue)
{
queue->head = queue->tail = 0;
107c9a: c7 40 38 00 00 00 00 movl $0x0,0x38(%eax)
107ca1: c7 40 34 00 00 00 00 movl $0x0,0x34(%eax)
queue->count = 0;
107ca8: c7 40 3c 00 00 00 00 movl $0x0,0x3c(%eax)
* Initialise the segment control queue.
*/
static void
rtems_fdisk_segment_queue_init (rtems_fdisk_segment_ctl_queue* queue)
{
queue->head = queue->tail = 0;
107caf: c7 40 44 00 00 00 00 movl $0x0,0x44(%eax)
107cb6: c7 40 40 00 00 00 00 movl $0x0,0x40(%eax)
queue->count = 0;
107cbd: c7 40 48 00 00 00 00 movl $0x0,0x48(%eax)
* Initialise the segment control queue.
*/
static void
rtems_fdisk_segment_queue_init (rtems_fdisk_segment_ctl_queue* queue)
{
queue->head = queue->tail = 0;
107cc4: c7 40 50 00 00 00 00 movl $0x0,0x50(%eax)
107ccb: c7 40 4c 00 00 00 00 movl $0x0,0x4c(%eax)
queue->count = 0;
107cd2: c7 40 54 00 00 00 00 movl $0x0,0x54(%eax)
* Initialise the segment control queue.
*/
static void
rtems_fdisk_segment_queue_init (rtems_fdisk_segment_ctl_queue* queue)
{
queue->head = queue->tail = 0;
107cd9: c7 40 5c 00 00 00 00 movl $0x0,0x5c(%eax)
107ce0: c7 40 58 00 00 00 00 movl $0x0,0x58(%eax)
queue->count = 0;
107ce7: c7 40 60 00 00 00 00 movl $0x0,0x60(%eax)
rtems_fdisk_segment_queue_init (&fd->failed);
/*
* Clear the lock mappings.
*/
memset (fd->blocks, 0, fd->block_count * sizeof (rtems_fdisk_block_ctl));
107cee: 8b 48 1c mov 0x1c(%eax),%ecx
107cf1: c1 e1 03 shl $0x3,%ecx
107cf4: 31 c0 xor %eax,%eax
107cf6: 8b 7b 18 mov 0x18(%ebx),%edi
107cf9: f3 aa rep stos %al,%es:(%edi)
/*
* Scan each segment or each device recovering the valid pages.
*/
fd->erased_blocks = 0;
107cfb: c7 43 28 00 00 00 00 movl $0x0,0x28(%ebx)
fd->starvation_threshold = 0;
107d02: c7 43 24 00 00 00 00 movl $0x0,0x24(%ebx)
for (device = 0; device < fd->device_count; device++)
107d09: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
107d10: e9 17 02 00 00 jmp 107f2c <rtems_fdisk_recover_block_mappings+0x29d>
/**
* Recover the block mappings from the devices.
*/
static int
rtems_fdisk_recover_block_mappings (rtems_flashdisk* fd)
107d15: 6b 75 e0 30 imul $0x30,-0x20(%ebp),%esi
for (device = 0; device < fd->device_count; device++)
{
uint32_t segment;
for (segment = 0; segment < fd->devices[device].segment_count; segment++)
{
rtems_fdisk_segment_ctl* sc = &fd->devices[device].segments[segment];
107d19: 03 30 add (%eax),%esi
const rtems_fdisk_segment_desc* sd = sc->descriptor;
107d1b: 8b 7e 04 mov 0x4(%esi),%edi
rtems_fdisk_page_desc* pd;
uint32_t page;
int ret;
#if RTEMS_FDISK_TRACE
rtems_fdisk_info (fd, "recover-block-mappings:%02d-%03d", device, segment);
107d1e: ff 75 e0 pushl -0x20(%ebp)
107d21: ff 75 e4 pushl -0x1c(%ebp)
107d24: 68 d7 e4 12 00 push $0x12e4d7
107d29: 53 push %ebx
107d2a: e8 8b f9 ff ff call 1076ba <rtems_fdisk_info>
#endif
sc->pages_desc = rtems_fdisk_page_desc_pages (sd, fd->block_size);
107d2f: 8b 4b 14 mov 0x14(%ebx),%ecx
*/
static uint32_t
rtems_fdisk_pages_in_segment (const rtems_fdisk_segment_desc* sd,
uint32_t page_size)
{
return sd->size / page_size;
107d32: 8b 47 08 mov 0x8(%edi),%eax
107d35: 31 d2 xor %edx,%edx
107d37: f7 f1 div %ecx
107d39: 89 c7 mov %eax,%edi
rtems_fdisk_page_desc_pages (const rtems_fdisk_segment_desc* sd,
uint32_t page_size)
{
uint32_t pages = rtems_fdisk_pages_in_segment (sd, page_size);
uint32_t bytes = pages * sizeof (rtems_fdisk_page_desc);
return ((bytes - 1) / page_size) + 1;
107d3b: 8d 04 c5 ff ff ff ff lea -0x1(,%eax,8),%eax
107d42: 31 d2 xor %edx,%edx
107d44: f7 f1 div %ecx
107d46: 8d 50 01 lea 0x1(%eax),%edx
#if RTEMS_FDISK_TRACE
rtems_fdisk_info (fd, "recover-block-mappings:%02d-%03d", device, segment);
#endif
sc->pages_desc = rtems_fdisk_page_desc_pages (sd, fd->block_size);
107d49: 89 56 18 mov %edx,0x18(%esi)
sc->pages =
rtems_fdisk_pages_in_segment (sd, fd->block_size) - sc->pages_desc;
107d4c: 29 d7 sub %edx,%edi
#if RTEMS_FDISK_TRACE
rtems_fdisk_info (fd, "recover-block-mappings:%02d-%03d", device, segment);
#endif
sc->pages_desc = rtems_fdisk_page_desc_pages (sd, fd->block_size);
sc->pages =
107d4e: 89 7e 14 mov %edi,0x14(%esi)
rtems_fdisk_pages_in_segment (sd, fd->block_size) - sc->pages_desc;
if (sc->pages > fd->starvation_threshold)
107d51: 83 c4 10 add $0x10,%esp
107d54: 3b 7b 24 cmp 0x24(%ebx),%edi
107d57: 76 03 jbe 107d5c <rtems_fdisk_recover_block_mappings+0xcd>
fd->starvation_threshold = sc->pages;
107d59: 89 7b 24 mov %edi,0x24(%ebx)
sc->pages_active = 0;
107d5c: c7 46 1c 00 00 00 00 movl $0x0,0x1c(%esi)
sc->pages_used = 0;
107d63: c7 46 20 00 00 00 00 movl $0x0,0x20(%esi)
sc->pages_bad = 0;
107d6a: c7 46 24 00 00 00 00 movl $0x0,0x24(%esi)
sc->failed = false;
107d71: c7 46 28 00 00 00 00 movl $0x0,0x28(%esi)
if (!sc->page_descriptors)
107d78: 83 7e 10 00 cmpl $0x0,0x10(%esi)
107d7c: 75 20 jne 107d9e <rtems_fdisk_recover_block_mappings+0x10f><== NEVER TAKEN
sc->page_descriptors = malloc (sc->pages_desc * fd->block_size);
107d7e: 83 ec 0c sub $0xc,%esp
107d81: 89 d0 mov %edx,%eax
107d83: 0f af c1 imul %ecx,%eax
107d86: 50 push %eax
107d87: 89 55 d4 mov %edx,-0x2c(%ebp)
107d8a: 89 4d d0 mov %ecx,-0x30(%ebp)
107d8d: e8 6e 26 00 00 call 10a400 <malloc>
107d92: 89 46 10 mov %eax,0x10(%esi)
107d95: 83 c4 10 add $0x10,%esp
107d98: 8b 4d d0 mov -0x30(%ebp),%ecx
107d9b: 8b 55 d4 mov -0x2c(%ebp),%edx
if (!sc->page_descriptors)
107d9e: 8b 7e 10 mov 0x10(%esi),%edi
107da1: 85 ff test %edi,%edi
107da3: 75 0d jne 107db2 <rtems_fdisk_recover_block_mappings+0x123><== ALWAYS TAKEN
rtems_fdisk_abort ("no memory for page descriptors");
107da5: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
107da8: 68 d5 e3 12 00 push $0x12e3d5 <== NOT EXECUTED
107dad: e8 c7 17 00 00 call 109579 <rtems_fdisk_abort.constprop.9><== NOT EXECUTED
* descriptors.
*
* @todo It may be better to ask the driver to get these value
* so NAND flash could be better supported.
*/
ret = rtems_fdisk_seg_read (fd, sc, 0, (void*) pd,
107db2: 50 push %eax
107db3: 50 push %eax
107db4: 0f af ca imul %edx,%ecx
107db7: 51 push %ecx
107db8: 57 push %edi
107db9: 31 c9 xor %ecx,%ecx
107dbb: 89 f2 mov %esi,%edx
107dbd: 89 d8 mov %ebx,%eax
107dbf: e8 c3 fa ff ff call 107887 <rtems_fdisk_seg_read>
sc->pages_desc * fd->block_size);
if (ret)
107dc4: 83 c4 10 add $0x10,%esp
107dc7: 85 c0 test %eax,%eax
107dc9: 0f 84 29 01 00 00 je 107ef8 <rtems_fdisk_recover_block_mappings+0x269><== ALWAYS TAKEN
{
rtems_fdisk_error ("recover-block-mappings:%02d-%03d: " \
107dcf: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
107dd2: 50 push %eax <== NOT EXECUTED
107dd3: 89 45 d4 mov %eax,-0x2c(%ebp) <== NOT EXECUTED
107dd6: e8 e9 92 01 00 call 1210c4 <strerror> <== NOT EXECUTED
107ddb: 8b 55 d4 mov -0x2c(%ebp),%edx <== NOT EXECUTED
107dde: 89 14 24 mov %edx,(%esp) <== NOT EXECUTED
107de1: 50 push %eax <== NOT EXECUTED
107de2: ff 75 e0 pushl -0x20(%ebp) <== NOT EXECUTED
107de5: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
107de8: 68 f8 e4 12 00 push $0x12e4f8 <== NOT EXECUTED
107ded: e8 fc f9 ff ff call 1077ee <rtems_fdisk_error> <== NOT EXECUTED
"read page desc failed: %s (%d)",
device, segment, strerror (ret), ret);
return ret;
107df2: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
107df5: 8b 55 d4 mov -0x2c(%ebp),%edx <== NOT EXECUTED
107df8: e9 48 01 00 00 jmp 107f45 <rtems_fdisk_recover_block_mappings+0x2b6><== NOT EXECUTED
* If the page is active see if the block is with-in range and
* if the block is a duplicate.
*/
for (page = 0; page < sc->pages; page++, pd++)
{
if (rtems_fdisk_page_desc_erased (pd))
107dfd: 89 f8 mov %edi,%eax
107dff: e8 89 f8 ff ff call 10768d <rtems_fdisk_page_desc_erased>
107e04: 84 c0 test %al,%al
107e06: 74 75 je 107e7d <rtems_fdisk_recover_block_mappings+0x1ee><== NEVER TAKEN
rtems_fdisk_seg_blank_check_page (const rtems_flashdisk* fd,
rtems_fdisk_segment_ctl* sc,
uint32_t page)
{
return rtems_fdisk_seg_blank_check (fd, sc,
page * fd->block_size, fd->block_size);
107e08: 8b 43 14 mov 0x14(%ebx),%eax
static int
rtems_fdisk_seg_blank_check_page (const rtems_flashdisk* fd,
rtems_fdisk_segment_ctl* sc,
uint32_t page)
{
return rtems_fdisk_seg_blank_check (fd, sc,
107e0b: 83 ec 0c sub $0xc,%esp
if (rtems_fdisk_page_desc_erased (pd))
{
/*
* Is the page erased ?
*/
ret = rtems_fdisk_seg_blank_check_page (fd, sc,
107e0e: 8b 4d dc mov -0x24(%ebp),%ecx
107e11: 03 4e 18 add 0x18(%esi),%ecx
static int
rtems_fdisk_seg_blank_check_page (const rtems_flashdisk* fd,
rtems_fdisk_segment_ctl* sc,
uint32_t page)
{
return rtems_fdisk_seg_blank_check (fd, sc,
107e14: 0f af c8 imul %eax,%ecx
107e17: 50 push %eax
107e18: 89 f2 mov %esi,%edx
107e1a: 89 d8 mov %ebx,%eax
107e1c: e8 bf fa ff ff call 1078e0 <rtems_fdisk_seg_blank_check>
* Is the page erased ?
*/
ret = rtems_fdisk_seg_blank_check_page (fd, sc,
page + sc->pages_desc);
if (ret == 0)
107e21: 83 c4 10 add $0x10,%esp
107e24: 85 c0 test %eax,%eax
107e26: 75 08 jne 107e30 <rtems_fdisk_recover_block_mappings+0x1a1><== NEVER TAKEN
{
++fd->erased_blocks;
107e28: ff 43 28 incl 0x28(%ebx)
107e2b: e9 c0 00 00 00 jmp 107ef0 <rtems_fdisk_recover_block_mappings+0x261>
}
else
{
#if RTEMS_FDISK_TRACE
rtems_fdisk_warning (fd, "page not blank: %d-%d-%d",
107e30: 51 push %ecx <== NOT EXECUTED
107e31: 51 push %ecx <== NOT EXECUTED
107e32: ff 77 04 pushl 0x4(%edi) <== NOT EXECUTED
107e35: ff 75 dc pushl -0x24(%ebp) <== NOT EXECUTED
107e38: ff 75 e0 pushl -0x20(%ebp) <== NOT EXECUTED
107e3b: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
107e3e: 68 39 e5 12 00 push $0x12e539 <== NOT EXECUTED
107e43: 53 push %ebx <== NOT EXECUTED
107e44: e8 3f f9 ff ff call 107788 <rtems_fdisk_warning> <== NOT EXECUTED
* Set the flags. Setting means clear the bit to 0.
*/
static void
rtems_fdisk_page_desc_set_flags (rtems_fdisk_page_desc* pd, uint16_t flags)
{
pd->flags &= ~flags;
107e49: 66 83 67 02 fd andw $0xfffd,0x2(%edi) <== NOT EXECUTED
rtems_fdisk_warning (fd, "page not blank: %d-%d-%d",
device, segment, page, pd->block);
#endif
rtems_fdisk_page_desc_set_flags (pd, RTEMS_FDISK_PAGE_USED);
ret = rtems_fdisk_seg_write_page_desc (fd, sc,
107e4e: 83 c4 14 add $0x14,%esp <== NOT EXECUTED
107e51: 57 push %edi <== NOT EXECUTED
107e52: 8b 4d dc mov -0x24(%ebp),%ecx <== NOT EXECUTED
107e55: 89 f2 mov %esi,%edx <== NOT EXECUTED
107e57: 89 d8 mov %ebx,%eax <== NOT EXECUTED
107e59: e8 47 fb ff ff call 1079a5 <rtems_fdisk_seg_write_page_desc><== NOT EXECUTED
page, pd);
if (ret)
107e5e: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
107e61: 85 c0 test %eax,%eax <== NOT EXECUTED
107e63: 74 20 je 107e85 <rtems_fdisk_recover_block_mappings+0x1f6><== NOT EXECUTED
{
rtems_fdisk_error ("forcing page to used failed: %d-%d-%d",
107e65: ff 75 dc pushl -0x24(%ebp) <== NOT EXECUTED
107e68: ff 75 e0 pushl -0x20(%ebp) <== NOT EXECUTED
107e6b: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
107e6e: 68 52 e5 12 00 push $0x12e552 <== NOT EXECUTED
107e73: e8 76 f9 ff ff call 1077ee <rtems_fdisk_error> <== NOT EXECUTED
107e78: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
107e7b: eb 08 jmp 107e85 <rtems_fdisk_recover_block_mappings+0x1f6><== NOT EXECUTED
}
rtems_flashdisk_count = rtems_flashdisk_configuration_size;
return RTEMS_SUCCESSFUL;
}
107e7d: 66 8b 47 02 mov 0x2(%edi),%ax <== NOT EXECUTED
sc->pages_used++;
}
}
else
{
if (rtems_fdisk_page_desc_flags_set (pd, RTEMS_FDISK_PAGE_USED))
107e81: a8 02 test $0x2,%al <== NOT EXECUTED
107e83: 75 05 jne 107e8a <rtems_fdisk_recover_block_mappings+0x1fb><== NOT EXECUTED
{
sc->pages_used++;
107e85: ff 46 20 incl 0x20(%esi) <== NOT EXECUTED
107e88: eb 66 jmp 107ef0 <rtems_fdisk_recover_block_mappings+0x261><== NOT EXECUTED
}
else if (rtems_fdisk_page_desc_flags_set (pd, RTEMS_FDISK_PAGE_ACTIVE))
107e8a: a8 01 test $0x1,%al <== NOT EXECUTED
107e8c: 75 5f jne 107eed <rtems_fdisk_recover_block_mappings+0x25e><== NOT EXECUTED
{
if (pd->block >= fd->block_count)
107e8e: 8b 47 04 mov 0x4(%edi),%eax <== NOT EXECUTED
107e91: 3b 43 1c cmp 0x1c(%ebx),%eax <== NOT EXECUTED
107e94: 72 19 jb 107eaf <rtems_fdisk_recover_block_mappings+0x220><== NOT EXECUTED
{
#if RTEMS_FDISK_TRACE
rtems_fdisk_warning (fd,
107e96: 52 push %edx <== NOT EXECUTED
107e97: 52 push %edx <== NOT EXECUTED
107e98: 50 push %eax <== NOT EXECUTED
107e99: ff 75 dc pushl -0x24(%ebp) <== NOT EXECUTED
107e9c: ff 75 e0 pushl -0x20(%ebp) <== NOT EXECUTED
107e9f: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
107ea2: 68 78 e5 12 00 push $0x12e578 <== NOT EXECUTED
107ea7: 53 push %ebx <== NOT EXECUTED
107ea8: e8 db f8 ff ff call 107788 <rtems_fdisk_warning> <== NOT EXECUTED
107ead: eb 29 jmp 107ed8 <rtems_fdisk_recover_block_mappings+0x249><== NOT EXECUTED
"invalid block number: %d-%d-%d: block: %d",
device, segment, page, pd->block);
#endif
sc->pages_bad++;
}
else if (fd->blocks[pd->block].segment)
107eaf: 8b 53 18 mov 0x18(%ebx),%edx <== NOT EXECUTED
107eb2: 8d 04 c2 lea (%edx,%eax,8),%eax <== NOT EXECUTED
107eb5: 8b 10 mov (%eax),%edx <== NOT EXECUTED
107eb7: 85 d2 test %edx,%edx <== NOT EXECUTED
107eb9: 74 25 je 107ee0 <rtems_fdisk_recover_block_mappings+0x251><== NOT EXECUTED
* each block so we can tell which is the later block when
* duplicates appear. A power down with a failed wirte could cause
* a duplicate.
*/
const rtems_fdisk_segment_ctl* bsc = fd->blocks[pd->block].segment;
rtems_fdisk_error ("duplicate block: %d-%d-%d: " \
107ebb: 51 push %ecx <== NOT EXECUTED
107ebc: ff 75 dc pushl -0x24(%ebp) <== NOT EXECUTED
107ebf: ff 75 e0 pushl -0x20(%ebp) <== NOT EXECUTED
107ec2: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
107ec5: ff 70 04 pushl 0x4(%eax) <== NOT EXECUTED
107ec8: ff 72 0c pushl 0xc(%edx) <== NOT EXECUTED
107ecb: ff 72 08 pushl 0x8(%edx) <== NOT EXECUTED
107ece: 68 a2 e5 12 00 push $0x12e5a2 <== NOT EXECUTED
107ed3: e8 16 f9 ff ff call 1077ee <rtems_fdisk_error> <== NOT EXECUTED
"duplicate: %d-%d-%d",
bsc->device, bsc->segment,
fd->blocks[pd->block].page,
device, segment, page);
sc->pages_bad++;
107ed8: ff 46 24 incl 0x24(%esi) <== NOT EXECUTED
107edb: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
107ede: eb 10 jmp 107ef0 <rtems_fdisk_recover_block_mappings+0x261><== NOT EXECUTED
{
/**
* @todo
* Add start up crc checks here.
*/
fd->blocks[pd->block].segment = sc;
107ee0: 89 30 mov %esi,(%eax) <== NOT EXECUTED
fd->blocks[pd->block].page = page;
107ee2: 8b 55 dc mov -0x24(%ebp),%edx <== NOT EXECUTED
107ee5: 89 50 04 mov %edx,0x4(%eax) <== NOT EXECUTED
/*
* The page is active.
*/
sc->pages_active++;
107ee8: ff 46 1c incl 0x1c(%esi) <== NOT EXECUTED
107eeb: eb 03 jmp 107ef0 <rtems_fdisk_recover_block_mappings+0x261><== NOT EXECUTED
}
}
else
sc->pages_bad++;
107eed: ff 46 24 incl 0x24(%esi) <== NOT EXECUTED
* are active and how many are used.
*
* If the page is active see if the block is with-in range and
* if the block is a duplicate.
*/
for (page = 0; page < sc->pages; page++, pd++)
107ef0: ff 45 dc incl -0x24(%ebp)
107ef3: 83 c7 08 add $0x8,%edi
107ef6: eb 07 jmp 107eff <rtems_fdisk_recover_block_mappings+0x270>
* so NAND flash could be better supported.
*/
ret = rtems_fdisk_seg_read (fd, sc, 0, (void*) pd,
sc->pages_desc * fd->block_size);
if (ret)
107ef8: c7 45 dc 00 00 00 00 movl $0x0,-0x24(%ebp)
* are active and how many are used.
*
* If the page is active see if the block is with-in range and
* if the block is a duplicate.
*/
for (page = 0; page < sc->pages; page++, pd++)
107eff: 8b 45 dc mov -0x24(%ebp),%eax
107f02: 3b 46 14 cmp 0x14(%esi),%eax
107f05: 0f 82 f2 fe ff ff jb 107dfd <rtems_fdisk_recover_block_mappings+0x16e>
}
/*
* Place the segment on to the correct queue.
*/
rtems_fdisk_queue_segment (fd, sc);
107f0b: 89 f2 mov %esi,%edx
107f0d: 89 d8 mov %ebx,%eax
107f0f: e8 57 fc ff ff call 107b6b <rtems_fdisk_queue_segment>
fd->erased_blocks = 0;
fd->starvation_threshold = 0;
for (device = 0; device < fd->device_count; device++)
{
uint32_t segment;
for (segment = 0; segment < fd->devices[device].segment_count; segment++)
107f14: ff 45 e0 incl -0x20(%ebp)
107f17: 8b 45 d8 mov -0x28(%ebp),%eax
107f1a: 03 43 2c add 0x2c(%ebx),%eax
107f1d: 8b 55 e0 mov -0x20(%ebp),%edx
107f20: 3b 50 04 cmp 0x4(%eax),%edx
107f23: 0f 82 ec fd ff ff jb 107d15 <rtems_fdisk_recover_block_mappings+0x86>
/*
* Scan each segment or each device recovering the valid pages.
*/
fd->erased_blocks = 0;
fd->starvation_threshold = 0;
for (device = 0; device < fd->device_count; device++)
107f29: ff 45 e4 incl -0x1c(%ebp)
107f2c: 8b 45 e4 mov -0x1c(%ebp),%eax
107f2f: 3b 43 30 cmp 0x30(%ebx),%eax
107f32: 73 0f jae 107f43 <rtems_fdisk_recover_block_mappings+0x2b4>
/**
* Recover the block mappings from the devices.
*/
static int
rtems_fdisk_recover_block_mappings (rtems_flashdisk* fd)
107f34: 6b d0 0c imul $0xc,%eax,%edx
107f37: 89 55 d8 mov %edx,-0x28(%ebp)
107f3a: c7 45 e0 00 00 00 00 movl $0x0,-0x20(%ebp)
107f41: eb d4 jmp 107f17 <rtems_fdisk_recover_block_mappings+0x288>
*/
rtems_fdisk_queue_segment (fd, sc);
}
}
return 0;
107f43: 31 d2 xor %edx,%edx
}
107f45: 89 d0 mov %edx,%eax
107f47: 8d 65 f4 lea -0xc(%ebp),%esp
107f4a: 5b pop %ebx
107f4b: 5e pop %esi
107f4c: 5f pop %edi
107f4d: 5d pop %ebp
107f4e: c3 ret
00107f4f <rtems_fdisk_recycle_segment>:
static int
rtems_fdisk_recycle_segment (rtems_flashdisk* fd,
rtems_fdisk_segment_ctl* ssc,
rtems_fdisk_segment_ctl* dsc,
uint32_t *pages)
{
107f4f: 55 push %ebp
107f50: 89 e5 mov %esp,%ebp
107f52: 57 push %edi
107f53: 56 push %esi
107f54: 53 push %ebx
107f55: 83 ec 3c sub $0x3c,%esp
107f58: 89 c7 mov %eax,%edi
107f5a: 89 d6 mov %edx,%esi
107f5c: 89 cb mov %ecx,%ebx
107f5e: 8b 45 08 mov 0x8(%ebp),%eax
107f61: 89 45 cc mov %eax,-0x34(%ebp)
int ret;
uint32_t spage;
uint32_t used = 0;
uint32_t active = 0;
107f64: c7 45 d0 00 00 00 00 movl $0x0,-0x30(%ebp)
rtems_fdisk_segment_ctl* dsc,
uint32_t *pages)
{
int ret;
uint32_t spage;
uint32_t used = 0;
107f6b: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)
uint32_t active = 0;
for (spage = 0; spage < ssc->pages; spage++)
107f72: c7 45 e0 00 00 00 00 movl $0x0,-0x20(%ebp)
107f79: e9 4b 02 00 00 jmp 1081c9 <rtems_fdisk_recycle_segment+0x27a>
{
rtems_fdisk_page_desc* spd = &ssc->page_descriptors[spage];
107f7e: 8b 46 10 mov 0x10(%esi),%eax
107f81: 8b 55 e0 mov -0x20(%ebp),%edx
107f84: 8d 04 d0 lea (%eax,%edx,8),%eax
107f87: 89 45 d8 mov %eax,-0x28(%ebp)
if (!dsc && ssc->pages_active > 0)
107f8a: 85 db test %ebx,%ebx
107f8c: 75 18 jne 107fa6 <rtems_fdisk_recycle_segment+0x57>
107f8e: 83 7e 1c 00 cmpl $0x0,0x1c(%esi)
107f92: 74 12 je 107fa6 <rtems_fdisk_recycle_segment+0x57><== ALWAYS TAKEN
{
rtems_fdisk_error ("recycle: no available dst segment");
107f94: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
107f97: 68 d1 e5 12 00 push $0x12e5d1 <== NOT EXECUTED
107f9c: e8 4d f8 ff ff call 1077ee <rtems_fdisk_error> <== NOT EXECUTED
107fa1: e9 95 00 00 00 jmp 10803b <rtems_fdisk_recycle_segment+0xec><== NOT EXECUTED
}
rtems_flashdisk_count = rtems_flashdisk_configuration_size;
return RTEMS_SUCCESSFUL;
}
107fa6: 8b 4d d8 mov -0x28(%ebp),%ecx
107fa9: 66 8b 41 02 mov 0x2(%ecx),%ax
{
rtems_fdisk_error ("recycle: no available dst segment");
return EIO;
}
if (rtems_fdisk_page_desc_flags_set (spd, RTEMS_FDISK_PAGE_ACTIVE) &&
107fad: a8 01 test $0x1,%al
107faf: 0f 85 fd 01 00 00 jne 1081b2 <rtems_fdisk_recycle_segment+0x263><== NEVER TAKEN
107fb5: a8 02 test $0x2,%al
107fb7: 0f 84 f5 01 00 00 je 1081b2 <rtems_fdisk_recycle_segment+0x263><== NEVER TAKEN
* Find the next available page in a segment.
*/
static uint32_t
rtems_fdisk_seg_next_available_page (rtems_fdisk_segment_ctl* sc)
{
rtems_fdisk_page_desc* pd = &sc->page_descriptors[0];
107fbd: 8b 4b 10 mov 0x10(%ebx),%ecx
uint32_t page;
for (page = 0; page < sc->pages; page++, pd++)
107fc0: 8b 53 14 mov 0x14(%ebx),%edx
107fc3: 89 55 dc mov %edx,-0x24(%ebp)
* Find the next available page in a segment.
*/
static uint32_t
rtems_fdisk_seg_next_available_page (rtems_fdisk_segment_ctl* sc)
{
rtems_fdisk_page_desc* pd = &sc->page_descriptors[0];
107fc6: 89 ca mov %ecx,%edx
uint32_t page;
for (page = 0; page < sc->pages; page++, pd++)
107fc8: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
107fcf: eb 1d jmp 107fee <rtems_fdisk_recycle_segment+0x9f>
if (rtems_fdisk_page_desc_erased (pd))
107fd1: 89 d0 mov %edx,%eax
107fd3: 89 55 c0 mov %edx,-0x40(%ebp)
107fd6: 89 4d c4 mov %ecx,-0x3c(%ebp)
107fd9: e8 af f6 ff ff call 10768d <rtems_fdisk_page_desc_erased>
107fde: 84 c0 test %al,%al
107fe0: 8b 55 c0 mov -0x40(%ebp),%edx
107fe3: 8b 4d c4 mov -0x3c(%ebp),%ecx
107fe6: 75 0e jne 107ff6 <rtems_fdisk_recycle_segment+0xa7>
rtems_fdisk_seg_next_available_page (rtems_fdisk_segment_ctl* sc)
{
rtems_fdisk_page_desc* pd = &sc->page_descriptors[0];
uint32_t page;
for (page = 0; page < sc->pages; page++, pd++)
107fe8: ff 45 e4 incl -0x1c(%ebp)
107feb: 83 c2 08 add $0x8,%edx
107fee: 8b 45 dc mov -0x24(%ebp),%eax
107ff1: 39 45 e4 cmp %eax,-0x1c(%ebp)
107ff4: 75 db jne 107fd1 <rtems_fdisk_recycle_segment+0x82><== ALWAYS TAKEN
uint32_t dst_pages;
rtems_fdisk_page_desc* dpd;
uint32_t dpage;
dpage = rtems_fdisk_seg_next_available_page (dsc);
dpd = &dsc->page_descriptors[dpage];
107ff6: 8b 55 e4 mov -0x1c(%ebp),%edx
107ff9: 8d 0c d1 lea (%ecx,%edx,8),%ecx
107ffc: 89 4d c8 mov %ecx,-0x38(%ebp)
active++;
107fff: ff 45 d0 incl -0x30(%ebp)
if (dpage >= dsc->pages)
108002: 8b 4d dc mov -0x24(%ebp),%ecx
108005: 39 ca cmp %ecx,%edx
108007: 72 3f jb 108048 <rtems_fdisk_recycle_segment+0xf9><== ALWAYS TAKEN
{
rtems_fdisk_error ("recycle: %02d-%03d: " \
108009: 89 d8 mov %ebx,%eax <== NOT EXECUTED
10800b: e8 95 f6 ff ff call 1076a5 <rtems_fdisk_seg_pages_available><== NOT EXECUTED
108010: 50 push %eax <== NOT EXECUTED
108011: ff 73 0c pushl 0xc(%ebx) <== NOT EXECUTED
108014: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
108017: 68 f3 e5 12 00 push $0x12e5f3 <== NOT EXECUTED
10801c: e8 cd f7 ff ff call 1077ee <rtems_fdisk_error> <== NOT EXECUTED
"no page desc available: %d",
dsc->device, dsc->segment,
rtems_fdisk_seg_pages_available (dsc));
dsc->failed = true;
108021: c7 43 28 01 00 00 00 movl $0x1,0x28(%ebx) <== NOT EXECUTED
rtems_fdisk_queue_segment (fd, dsc);
108028: 89 da mov %ebx,%edx <== NOT EXECUTED
10802a: 89 f8 mov %edi,%eax <== NOT EXECUTED
10802c: e8 3a fb ff ff call 107b6b <rtems_fdisk_queue_segment><== NOT EXECUTED
rtems_fdisk_segment_queue_push_head (&fd->used, ssc);
108031: 8d 47 40 lea 0x40(%edi),%eax <== NOT EXECUTED
108034: 89 f2 mov %esi,%edx <== NOT EXECUTED
108036: e8 75 f5 ff ff call 1075b0 <rtems_fdisk_segment_queue_push_head><== NOT EXECUTED
return EIO;
10803b: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
10803e: b9 05 00 00 00 mov $0x5,%ecx <== NOT EXECUTED
108043: e9 d2 01 00 00 jmp 10821a <rtems_fdisk_recycle_segment+0x2cb><== NOT EXECUTED
}
#if RTEMS_FDISK_TRACE
rtems_fdisk_info (fd, "recycle: %02d-%03d-%03d=>%02d-%03d-%03d",
108048: ff 75 e4 pushl -0x1c(%ebp)
10804b: ff 73 0c pushl 0xc(%ebx)
10804e: ff 73 08 pushl 0x8(%ebx)
108051: ff 75 e0 pushl -0x20(%ebp)
108054: ff 76 0c pushl 0xc(%esi)
108057: ff 76 08 pushl 0x8(%esi)
10805a: 68 22 e6 12 00 push $0x12e622
10805f: 57 push %edi
108060: e8 55 f6 ff ff call 1076ba <rtems_fdisk_info>
ssc->device, ssc->segment, spage,
dsc->device, dsc->segment, dpage);
#endif
ret = rtems_fdisk_seg_copy_page (fd, ssc,
108065: 8b 45 e4 mov -0x1c(%ebp),%eax
108068: 03 43 18 add 0x18(%ebx),%eax
10806b: 89 45 dc mov %eax,-0x24(%ebp)
10806e: 8b 4d e0 mov -0x20(%ebp),%ecx
108071: 03 4e 18 add 0x18(%esi),%ecx
rtems_fdisk_segment_ctl* dst_sc,
uint32_t dst_page)
{
int ret;
#if RTEMS_FDISK_TRACE
rtems_fdisk_printf (fd, " seg-copy-page: %02d-%03d~%03d=>%02d-%03d~%03d",
108074: 83 c4 20 add $0x20,%esp
108077: 50 push %eax
108078: ff 73 0c pushl 0xc(%ebx)
10807b: ff 73 08 pushl 0x8(%ebx)
10807e: 51 push %ecx
10807f: ff 76 0c pushl 0xc(%esi)
108082: ff 76 08 pushl 0x8(%esi)
108085: 68 4a e6 12 00 push $0x12e64a
10808a: 57 push %edi
10808b: 89 4d c4 mov %ecx,-0x3c(%ebp)
10808e: e8 8f f6 ff ff call 107722 <rtems_fdisk_printf>
rtems_fdisk_segment_ctl* sc,
uint32_t page,
void* buffer)
{
return rtems_fdisk_seg_read (fd, sc,
page * fd->block_size, buffer, fd->block_size);
108093: 8b 47 14 mov 0x14(%edi),%eax
rtems_fdisk_seg_read_page (const rtems_flashdisk* fd,
rtems_fdisk_segment_ctl* sc,
uint32_t page,
void* buffer)
{
return rtems_fdisk_seg_read (fd, sc,
108096: 83 c4 18 add $0x18,%esp
108099: 8b 4d c4 mov -0x3c(%ebp),%ecx
10809c: 0f af c8 imul %eax,%ecx
10809f: 50 push %eax
1080a0: ff 77 68 pushl 0x68(%edi)
1080a3: 89 f2 mov %esi,%edx
1080a5: 89 f8 mov %edi,%eax
1080a7: e8 db f7 ff ff call 107887 <rtems_fdisk_seg_read>
1080ac: 89 c1 mov %eax,%ecx
src_sc->device, src_sc->segment, src_page,
dst_sc->device, dst_sc->segment, dst_page);
#endif
ret = rtems_fdisk_seg_read_page (fd, src_sc, src_page,
fd->copy_buffer);
if (ret)
1080ae: 83 c4 10 add $0x10,%esp
1080b1: 85 c0 test %eax,%eax
1080b3: 75 1b jne 1080d0 <rtems_fdisk_recycle_segment+0x181><== NEVER TAKEN
return ret;
return rtems_fdisk_seg_write_page (fd, dst_sc, dst_page,
1080b5: 83 ec 0c sub $0xc,%esp
1080b8: ff 77 68 pushl 0x68(%edi)
1080bb: 8b 4d dc mov -0x24(%ebp),%ecx
1080be: 89 da mov %ebx,%edx
1080c0: 89 f8 mov %edi,%eax
1080c2: e8 2a f9 ff ff call 1079f1 <rtems_fdisk_seg_write_page>
1080c7: 89 c1 mov %eax,%ecx
#endif
ret = rtems_fdisk_seg_copy_page (fd, ssc,
spage + ssc->pages_desc,
dsc,
dpage + dsc->pages_desc);
if (ret)
1080c9: 83 c4 10 add $0x10,%esp
1080cc: 85 c0 test %eax,%eax
1080ce: 74 2c je 1080fc <rtems_fdisk_recycle_segment+0x1ad><== ALWAYS TAKEN
{
rtems_fdisk_error ("recycle: %02d-%03d-%03d=>" \
1080d0: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1080d3: 51 push %ecx <== NOT EXECUTED
1080d4: 89 4d c4 mov %ecx,-0x3c(%ebp) <== NOT EXECUTED
1080d7: e8 e8 8f 01 00 call 1210c4 <strerror> <== NOT EXECUTED
1080dc: 8b 4d c4 mov -0x3c(%ebp),%ecx <== NOT EXECUTED
1080df: 89 0c 24 mov %ecx,(%esp) <== NOT EXECUTED
1080e2: 50 push %eax <== NOT EXECUTED
1080e3: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
1080e6: ff 73 0c pushl 0xc(%ebx) <== NOT EXECUTED
1080e9: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
1080ec: ff 75 e0 pushl -0x20(%ebp) <== NOT EXECUTED
1080ef: ff 76 0c pushl 0xc(%esi) <== NOT EXECUTED
1080f2: ff 76 08 pushl 0x8(%esi) <== NOT EXECUTED
1080f5: 68 7a e6 12 00 push $0x12e67a <== NOT EXECUTED
1080fa: eb 51 jmp 10814d <rtems_fdisk_recycle_segment+0x1fe><== NOT EXECUTED
rtems_fdisk_queue_segment (fd, dsc);
rtems_fdisk_segment_queue_push_head (&fd->used, ssc);
return ret;
}
*dpd = *spd;
1080fc: 8b 4d d8 mov -0x28(%ebp),%ecx
1080ff: 8b 01 mov (%ecx),%eax
108101: 8b 51 04 mov 0x4(%ecx),%edx
108104: 8b 4d c8 mov -0x38(%ebp),%ecx
108107: 89 01 mov %eax,(%ecx)
108109: 89 51 04 mov %edx,0x4(%ecx)
ret = rtems_fdisk_seg_write_page_desc (fd,
10810c: 83 ec 0c sub $0xc,%esp
10810f: 51 push %ecx
108110: 8b 4d e4 mov -0x1c(%ebp),%ecx
108113: 89 da mov %ebx,%edx
108115: 89 f8 mov %edi,%eax
108117: e8 89 f8 ff ff call 1079a5 <rtems_fdisk_seg_write_page_desc>
dsc,
dpage, dpd);
if (ret)
10811c: 83 c4 10 add $0x10,%esp
10811f: 85 c0 test %eax,%eax
108121: 74 4d je 108170 <rtems_fdisk_recycle_segment+0x221><== ALWAYS TAKEN
{
rtems_fdisk_error ("recycle: %02d-%03d-%03d=>" \
108123: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
108126: 50 push %eax <== NOT EXECUTED
108127: 89 45 c4 mov %eax,-0x3c(%ebp) <== NOT EXECUTED
10812a: e8 95 8f 01 00 call 1210c4 <strerror> <== NOT EXECUTED
10812f: 8b 4d c4 mov -0x3c(%ebp),%ecx <== NOT EXECUTED
108132: 89 0c 24 mov %ecx,(%esp) <== NOT EXECUTED
108135: 50 push %eax <== NOT EXECUTED
108136: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
108139: ff 73 0c pushl 0xc(%ebx) <== NOT EXECUTED
10813c: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
10813f: ff 75 e0 pushl -0x20(%ebp) <== NOT EXECUTED
108142: ff 76 0c pushl 0xc(%esi) <== NOT EXECUTED
108145: ff 76 08 pushl 0x8(%esi) <== NOT EXECUTED
108148: 68 bd e6 12 00 push $0x12e6bd <== NOT EXECUTED
10814d: e8 9c f6 ff ff call 1077ee <rtems_fdisk_error> <== NOT EXECUTED
"%02d-%03d-%03d: copy pd failed: %s (%d)",
ssc->device, ssc->segment, spage,
dsc->device, dsc->segment, dpage,
strerror (ret), ret);
rtems_fdisk_queue_segment (fd, dsc);
108152: 83 c4 30 add $0x30,%esp <== NOT EXECUTED
108155: 89 da mov %ebx,%edx <== NOT EXECUTED
108157: 89 f8 mov %edi,%eax <== NOT EXECUTED
108159: e8 0d fa ff ff call 107b6b <rtems_fdisk_queue_segment><== NOT EXECUTED
rtems_fdisk_segment_queue_push_head (&fd->used, ssc);
10815e: 8d 47 40 lea 0x40(%edi),%eax <== NOT EXECUTED
108161: 89 f2 mov %esi,%edx <== NOT EXECUTED
108163: e8 48 f4 ff ff call 1075b0 <rtems_fdisk_segment_queue_push_head><== NOT EXECUTED
return ret;
108168: 8b 4d c4 mov -0x3c(%ebp),%ecx <== NOT EXECUTED
10816b: e9 aa 00 00 00 jmp 10821a <rtems_fdisk_recycle_segment+0x2cb><== NOT EXECUTED
}
dsc->pages_active++;
108170: ff 43 1c incl 0x1c(%ebx)
* segment will be erased. Power down could be a problem.
* We do the stats to make sure everything is as it should
* be.
*/
ssc->pages_active--;
108173: ff 4e 1c decl 0x1c(%esi)
ssc->pages_used++;
108176: ff 46 20 incl 0x20(%esi)
fd->blocks[spd->block].segment = dsc;
108179: 8b 45 d8 mov -0x28(%ebp),%eax
10817c: 8b 50 04 mov 0x4(%eax),%edx
10817f: 8b 47 18 mov 0x18(%edi),%eax
108182: 8d 04 d0 lea (%eax,%edx,8),%eax
108185: 89 18 mov %ebx,(%eax)
fd->blocks[spd->block].page = dpage;
108187: 8b 55 e4 mov -0x1c(%ebp),%edx
10818a: 89 50 04 mov %edx,0x4(%eax)
/*
* Place the segment on to the correct queue.
*/
rtems_fdisk_queue_segment (fd, dsc);
10818d: 89 da mov %ebx,%edx
10818f: 89 f8 mov %edi,%eax
108191: e8 d5 f9 ff ff call 107b6b <rtems_fdisk_queue_segment>
/*
* Get new destination segment if necessary.
*/
dst_pages = rtems_fdisk_seg_pages_available (dsc);
108196: 89 d8 mov %ebx,%eax
108198: e8 08 f5 ff ff call 1076a5 <rtems_fdisk_seg_pages_available>
if (dst_pages == 0)
10819d: 85 c0 test %eax,%eax
10819f: 75 0a jne 1081ab <rtems_fdisk_recycle_segment+0x25c>
dsc = rtems_fdisk_seg_most_available (&fd->available);
1081a1: 8b 47 34 mov 0x34(%edi),%eax
1081a4: e8 af f6 ff ff call 107858 <rtems_fdisk_seg_most_available.isra.8>
1081a9: 89 c3 mov %eax,%ebx
(*pages)--;
1081ab: 8b 4d cc mov -0x34(%ebp),%ecx
1081ae: ff 09 decl (%ecx)
return EIO;
}
if (rtems_fdisk_page_desc_flags_set (spd, RTEMS_FDISK_PAGE_ACTIVE) &&
!rtems_fdisk_page_desc_flags_set (spd, RTEMS_FDISK_PAGE_USED))
{
1081b0: eb 14 jmp 1081c6 <rtems_fdisk_recycle_segment+0x277>
if (dst_pages == 0)
dsc = rtems_fdisk_seg_most_available (&fd->available);
(*pages)--;
}
else if (rtems_fdisk_page_desc_erased (spd))
1081b2: 8b 45 d8 mov -0x28(%ebp),%eax
1081b5: e8 d3 f4 ff ff call 10768d <rtems_fdisk_page_desc_erased>
1081ba: 84 c0 test %al,%al
1081bc: 74 05 je 1081c3 <rtems_fdisk_recycle_segment+0x274><== ALWAYS TAKEN
{
--fd->erased_blocks;
1081be: ff 4f 28 decl 0x28(%edi) <== NOT EXECUTED
1081c1: eb 03 jmp 1081c6 <rtems_fdisk_recycle_segment+0x277><== NOT EXECUTED
}
else
{
used++;
1081c3: ff 45 d4 incl -0x2c(%ebp)
int ret;
uint32_t spage;
uint32_t used = 0;
uint32_t active = 0;
for (spage = 0; spage < ssc->pages; spage++)
1081c6: ff 45 e0 incl -0x20(%ebp)
1081c9: 8b 45 e0 mov -0x20(%ebp),%eax
1081cc: 3b 46 14 cmp 0x14(%esi),%eax
1081cf: 0f 82 a9 fd ff ff jb 107f7e <rtems_fdisk_recycle_segment+0x2f><== NEVER TAKEN
used++;
}
}
#if RTEMS_FDISK_TRACE
rtems_fdisk_printf (fd, "ssc end: %d-%d: p=%ld, a=%ld, u=%ld",
1081d5: 51 push %ecx
1081d6: ff 75 d4 pushl -0x2c(%ebp)
1081d9: ff 75 d0 pushl -0x30(%ebp)
1081dc: ff 75 cc pushl -0x34(%ebp)
1081df: ff 76 0c pushl 0xc(%esi)
1081e2: ff 76 08 pushl 0x8(%esi)
1081e5: 68 fe e6 12 00 push $0x12e6fe
1081ea: 57 push %edi
1081eb: e8 32 f5 ff ff call 107722 <rtems_fdisk_printf>
ssc->device, ssc->segment,
pages, active, used);
#endif
if (ssc->pages_active != 0)
1081f0: 8b 46 1c mov 0x1c(%esi),%eax
1081f3: 83 c4 20 add $0x20,%esp
1081f6: 85 c0 test %eax,%eax
1081f8: 74 10 je 10820a <rtems_fdisk_recycle_segment+0x2bb><== ALWAYS TAKEN
{
rtems_fdisk_error ("compacting: ssc pages not 0: %d",
1081fa: 52 push %edx <== NOT EXECUTED
1081fb: 52 push %edx <== NOT EXECUTED
1081fc: 50 push %eax <== NOT EXECUTED
1081fd: 68 22 e7 12 00 push $0x12e722 <== NOT EXECUTED
108202: e8 e7 f5 ff ff call 1077ee <rtems_fdisk_error> <== NOT EXECUTED
108207: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
ssc->pages_active);
}
ret = rtems_fdisk_erase_segment (fd, ssc);
10820a: 89 f2 mov %esi,%edx
10820c: 89 f8 mov %edi,%eax
return ret;
}
10820e: 8d 65 f4 lea -0xc(%ebp),%esp
108211: 5b pop %ebx
108212: 5e pop %esi
108213: 5f pop %edi
108214: 5d pop %ebp
{
rtems_fdisk_error ("compacting: ssc pages not 0: %d",
ssc->pages_active);
}
ret = rtems_fdisk_erase_segment (fd, ssc);
108215: e9 95 f8 ff ff jmp 107aaf <rtems_fdisk_erase_segment>
return ret;
}
10821a: 89 c8 mov %ecx,%eax <== NOT EXECUTED
10821c: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
10821f: 5b pop %ebx <== NOT EXECUTED
108220: 5e pop %esi <== NOT EXECUTED
108221: 5f pop %edi <== NOT EXECUTED
108222: 5d pop %ebp <== NOT EXECUTED
108223: c3 ret <== NOT EXECUTED
00107937 <rtems_fdisk_seg_write>:
rtems_fdisk_seg_write (const rtems_flashdisk* fd,
rtems_fdisk_segment_ctl* sc,
uint32_t offset,
const void* buffer,
uint32_t size)
{
107937: 55 push %ebp
107938: 89 e5 mov %esp,%ebp
10793a: 57 push %edi
10793b: 56 push %esi
10793c: 53 push %ebx
10793d: 83 ec 24 sub $0x24,%esp
107940: 89 d3 mov %edx,%ebx
107942: 89 4d e4 mov %ecx,-0x1c(%ebp)
int ret;
uint32_t device;
uint32_t segment;
const rtems_fdisk_segment_desc* sd;
const rtems_fdisk_driver_handlers* ops;
device = sc->device;
107945: 8b 72 08 mov 0x8(%edx),%esi
segment = sc->segment;
107948: 8b 7a 0c mov 0xc(%edx),%edi
static const rtems_fdisk_segment_desc*
rtems_fdisk_seg_descriptor (const rtems_flashdisk* fd,
uint32_t device,
uint32_t segment)
{
return fd->devices[device].segments[segment].descriptor;
10794b: 6b ce 0c imul $0xc,%esi,%ecx
10794e: 03 48 2c add 0x2c(%eax),%ecx
107951: 6b d7 30 imul $0x30,%edi,%edx
107954: 03 11 add (%ecx),%edx
107956: 8b 52 04 mov 0x4(%edx),%edx
107959: 89 55 e0 mov %edx,-0x20(%ebp)
const rtems_fdisk_segment_desc* sd;
const rtems_fdisk_driver_handlers* ops;
device = sc->device;
segment = sc->segment;
sd = rtems_fdisk_seg_descriptor (fd, device, segment);
ops = fd->devices[device].descriptor->flash_ops;
10795c: 8b 51 08 mov 0x8(%ecx),%edx
10795f: 8b 52 08 mov 0x8(%edx),%edx
#if RTEMS_FDISK_TRACE
rtems_fdisk_printf (fd, " seg-write: %02d-%03d: o=%08x s=%d",
107962: ff 75 0c pushl 0xc(%ebp)
107965: ff 75 e4 pushl -0x1c(%ebp)
107968: 57 push %edi
107969: 56 push %esi
10796a: 68 3b e4 12 00 push $0x12e43b
10796f: 50 push %eax
107970: 89 55 dc mov %edx,-0x24(%ebp)
107973: e8 aa fd ff ff call 107722 <rtems_fdisk_printf>
device, segment, offset, size);
#endif
ret = ops->write (sd, device, segment, offset, buffer, size);
107978: 83 c4 18 add $0x18,%esp
10797b: ff 75 0c pushl 0xc(%ebp)
10797e: ff 75 08 pushl 0x8(%ebp)
107981: ff 75 e4 pushl -0x1c(%ebp)
107984: 57 push %edi
107985: 56 push %esi
107986: ff 75 e0 pushl -0x20(%ebp)
107989: 8b 55 dc mov -0x24(%ebp),%edx
10798c: ff 52 04 call *0x4(%edx)
if (ret)
10798f: 83 c4 20 add $0x20,%esp
107992: 85 c0 test %eax,%eax
107994: 74 07 je 10799d <rtems_fdisk_seg_write+0x66><== ALWAYS TAKEN
sc->failed = true;
107996: c7 43 28 01 00 00 00 movl $0x1,0x28(%ebx) <== NOT EXECUTED
return ret;
}
10799d: 8d 65 f4 lea -0xc(%ebp),%esp
1079a0: 5b pop %ebx
1079a1: 5e pop %esi
1079a2: 5f pop %edi
1079a3: 5d pop %ebp
1079a4: c3 ret
001079f1 <rtems_fdisk_seg_write_page>:
static int
rtems_fdisk_seg_write_page (rtems_flashdisk* fd,
rtems_fdisk_segment_ctl* sc,
uint32_t page,
const void* buffer)
{
1079f1: 55 push %ebp
1079f2: 89 e5 mov %esp,%ebp
1079f4: 57 push %edi
1079f5: 56 push %esi
1079f6: 53 push %ebx
1079f7: 83 ec 0c sub $0xc,%esp
1079fa: 89 c3 mov %eax,%ebx
1079fc: 89 d6 mov %edx,%esi
1079fe: 89 cf mov %ecx,%edi
if ((fd->flags & RTEMS_FDISK_BLANK_CHECK_BEFORE_WRITE))
107a00: f6 40 08 08 testb $0x8,0x8(%eax)
107a04: 75 1f jne 107a25 <rtems_fdisk_seg_write_page+0x34><== ALWAYS TAKEN
{
int ret = rtems_fdisk_seg_blank_check_page (fd, sc, page);
if (ret)
return ret;
}
--fd->erased_blocks;
107a06: ff 4b 28 decl 0x28(%ebx)
return rtems_fdisk_seg_write (fd, sc,
page * fd->block_size, buffer, fd->block_size);
107a09: 8b 43 14 mov 0x14(%ebx),%eax
int ret = rtems_fdisk_seg_blank_check_page (fd, sc, page);
if (ret)
return ret;
}
--fd->erased_blocks;
return rtems_fdisk_seg_write (fd, sc,
107a0c: 52 push %edx
107a0d: 52 push %edx
107a0e: 89 f9 mov %edi,%ecx
107a10: 0f af c8 imul %eax,%ecx
107a13: 50 push %eax
107a14: ff 75 08 pushl 0x8(%ebp)
107a17: 89 f2 mov %esi,%edx
107a19: 89 d8 mov %ebx,%eax
107a1b: e8 17 ff ff ff call 107937 <rtems_fdisk_seg_write>
107a20: 83 c4 10 add $0x10,%esp
107a23: eb 18 jmp 107a3d <rtems_fdisk_seg_write_page+0x4c>
rtems_fdisk_seg_blank_check_page (const rtems_flashdisk* fd,
rtems_fdisk_segment_ctl* sc,
uint32_t page)
{
return rtems_fdisk_seg_blank_check (fd, sc,
page * fd->block_size, fd->block_size);
107a25: 8b 40 14 mov 0x14(%eax),%eax
static int
rtems_fdisk_seg_blank_check_page (const rtems_flashdisk* fd,
rtems_fdisk_segment_ctl* sc,
uint32_t page)
{
return rtems_fdisk_seg_blank_check (fd, sc,
107a28: 83 ec 0c sub $0xc,%esp
107a2b: 0f af c8 imul %eax,%ecx
107a2e: 50 push %eax
107a2f: 89 d8 mov %ebx,%eax
107a31: e8 aa fe ff ff call 1078e0 <rtems_fdisk_seg_blank_check>
const void* buffer)
{
if ((fd->flags & RTEMS_FDISK_BLANK_CHECK_BEFORE_WRITE))
{
int ret = rtems_fdisk_seg_blank_check_page (fd, sc, page);
if (ret)
107a36: 83 c4 10 add $0x10,%esp
107a39: 85 c0 test %eax,%eax
107a3b: 74 c9 je 107a06 <rtems_fdisk_seg_write_page+0x15><== ALWAYS TAKEN
return ret;
}
--fd->erased_blocks;
return rtems_fdisk_seg_write (fd, sc,
page * fd->block_size, buffer, fd->block_size);
}
107a3d: 8d 65 f4 lea -0xc(%ebp),%esp
107a40: 5b pop %ebx
107a41: 5e pop %esi
107a42: 5f pop %edi
107a43: 5d pop %ebp
107a44: c3 ret
001079a5 <rtems_fdisk_seg_write_page_desc>:
static int
rtems_fdisk_seg_write_page_desc (const rtems_flashdisk* fd,
rtems_fdisk_segment_ctl* sc,
uint32_t page,
const rtems_fdisk_page_desc* page_desc)
{
1079a5: 55 push %ebp
1079a6: 89 e5 mov %esp,%ebp
1079a8: 57 push %edi
1079a9: 56 push %esi
1079aa: 53 push %ebx
1079ab: 83 ec 0c sub $0xc,%esp
1079ae: 89 c3 mov %eax,%ebx
1079b0: 89 d6 mov %edx,%esi
uint32_t offset = page * sizeof (rtems_fdisk_page_desc);
1079b2: 8d 3c cd 00 00 00 00 lea 0x0(,%ecx,8),%edi
if ((fd->flags & RTEMS_FDISK_BLANK_CHECK_BEFORE_WRITE))
1079b9: f6 40 08 08 testb $0x8,0x8(%eax)
1079bd: 75 17 jne 1079d6 <rtems_fdisk_seg_write_page_desc+0x31><== ALWAYS TAKEN
offset,
sizeof (rtems_fdisk_page_desc));
if (ret)
return ret;
}
return rtems_fdisk_seg_write (fd, sc, offset,
1079bf: 50 push %eax
1079c0: 50 push %eax
1079c1: 6a 08 push $0x8
1079c3: ff 75 08 pushl 0x8(%ebp)
1079c6: 89 f9 mov %edi,%ecx
1079c8: 89 f2 mov %esi,%edx
1079ca: 89 d8 mov %ebx,%eax
1079cc: e8 66 ff ff ff call 107937 <rtems_fdisk_seg_write>
1079d1: 83 c4 10 add $0x10,%esp
1079d4: eb 13 jmp 1079e9 <rtems_fdisk_seg_write_page_desc+0x44>
const rtems_fdisk_page_desc* page_desc)
{
uint32_t offset = page * sizeof (rtems_fdisk_page_desc);
if ((fd->flags & RTEMS_FDISK_BLANK_CHECK_BEFORE_WRITE))
{
int ret = rtems_fdisk_seg_blank_check (fd, sc,
1079d6: 83 ec 0c sub $0xc,%esp
1079d9: 6a 08 push $0x8
1079db: 89 f9 mov %edi,%ecx
1079dd: e8 fe fe ff ff call 1078e0 <rtems_fdisk_seg_blank_check>
offset,
sizeof (rtems_fdisk_page_desc));
if (ret)
1079e2: 83 c4 10 add $0x10,%esp
1079e5: 85 c0 test %eax,%eax
1079e7: 74 d6 je 1079bf <rtems_fdisk_seg_write_page_desc+0x1a><== ALWAYS TAKEN
return ret;
}
return rtems_fdisk_seg_write (fd, sc, offset,
page_desc, sizeof (rtems_fdisk_page_desc));
}
1079e9: 8d 65 f4 lea -0xc(%ebp),%esp
1079ec: 5b pop %ebx
1079ed: 5e pop %esi
1079ee: 5f pop %edi
1079ef: 5d pop %ebp
1079f0: c3 ret
00107659 <rtems_fdisk_segment_queue_insert_before>:
*/
static void
rtems_fdisk_segment_queue_insert_before (rtems_fdisk_segment_ctl_queue* queue,
rtems_fdisk_segment_ctl* item,
rtems_fdisk_segment_ctl* sc)
{
107659: 55 push %ebp
10765a: 89 e5 mov %esp,%ebp
10765c: 56 push %esi
10765d: 53 push %ebx
10765e: 89 d6 mov %edx,%esi
107660: 89 ca mov %ecx,%edx
if (item)
107662: 85 f6 test %esi,%esi
107664: 74 1b je 107681 <rtems_fdisk_segment_queue_insert_before+0x28><== NEVER TAKEN
{
rtems_fdisk_segment_ctl** prev = &queue->head;
107666: 89 c1 mov %eax,%ecx
rtems_fdisk_segment_ctl* it = queue->head;
107668: 8b 18 mov (%eax),%ebx
while (it)
10766a: eb 11 jmp 10767d <rtems_fdisk_segment_queue_insert_before+0x24>
{
if (item == it)
10766c: 39 de cmp %ebx,%esi
10766e: 75 09 jne 107679 <rtems_fdisk_segment_queue_insert_before+0x20>
{
sc->next = item;
107670: 89 32 mov %esi,(%edx)
*prev = sc;
107672: 89 11 mov %edx,(%ecx)
queue->count++;
107674: ff 40 08 incl 0x8(%eax)
return;
107677: eb 10 jmp 107689 <rtems_fdisk_segment_queue_insert_before+0x30>
}
prev = &it->next;
107679: 89 d9 mov %ebx,%ecx
it = it->next;
10767b: 8b 1b mov (%ebx),%ebx
if (item)
{
rtems_fdisk_segment_ctl** prev = &queue->head;
rtems_fdisk_segment_ctl* it = queue->head;
while (it)
10767d: 85 db test %ebx,%ebx
10767f: 75 eb jne 10766c <rtems_fdisk_segment_queue_insert_before+0x13><== ALWAYS TAKEN
it = it->next;
}
}
rtems_fdisk_segment_queue_push_tail (queue, sc);
}
107681: 5b pop %ebx <== NOT EXECUTED
107682: 5e pop %esi <== NOT EXECUTED
107683: 5d pop %ebp <== NOT EXECUTED
prev = &it->next;
it = it->next;
}
}
rtems_fdisk_segment_queue_push_tail (queue, sc);
107684: e9 67 ff ff ff jmp 1075f0 <rtems_fdisk_segment_queue_push_tail><== NOT EXECUTED
}
107689: 5b pop %ebx
10768a: 5e pop %esi
10768b: 5d pop %ebp
10768c: c3 ret
001075cb <rtems_fdisk_segment_queue_pop_head>:
/**
* Pop the head of the segment control queue.
*/
static rtems_fdisk_segment_ctl*
rtems_fdisk_segment_queue_pop_head (rtems_fdisk_segment_ctl_queue* queue)
{
1075cb: 55 push %ebp
1075cc: 89 e5 mov %esp,%ebp
1075ce: 89 c2 mov %eax,%edx
if (queue->head)
1075d0: 8b 00 mov (%eax),%eax
1075d2: 85 c0 test %eax,%eax
1075d4: 74 18 je 1075ee <rtems_fdisk_segment_queue_pop_head+0x23><== NEVER TAKEN
{
rtems_fdisk_segment_ctl* sc = queue->head;
queue->head = sc->next;
1075d6: 8b 08 mov (%eax),%ecx
1075d8: 89 0a mov %ecx,(%edx)
if (!queue->head)
1075da: 85 c9 test %ecx,%ecx
1075dc: 75 07 jne 1075e5 <rtems_fdisk_segment_queue_pop_head+0x1a>
queue->tail = 0;
1075de: c7 42 04 00 00 00 00 movl $0x0,0x4(%edx)
queue->count--;
1075e5: ff 4a 08 decl 0x8(%edx)
sc->next = 0;
1075e8: c7 00 00 00 00 00 movl $0x0,(%eax)
return sc;
}
return 0;
}
1075ee: 5d pop %ebp
1075ef: c3 ret
001075b0 <rtems_fdisk_segment_queue_push_head>:
* Push to the head of the segment control queue.
*/
static void
rtems_fdisk_segment_queue_push_head (rtems_fdisk_segment_ctl_queue* queue,
rtems_fdisk_segment_ctl* sc)
{
1075b0: 55 push %ebp <== NOT EXECUTED
1075b1: 89 e5 mov %esp,%ebp <== NOT EXECUTED
if (sc)
1075b3: 85 d2 test %edx,%edx <== NOT EXECUTED
1075b5: 74 12 je 1075c9 <rtems_fdisk_segment_queue_push_head+0x19><== NOT EXECUTED
{
sc->next = queue->head;
1075b7: 8b 08 mov (%eax),%ecx <== NOT EXECUTED
1075b9: 89 0a mov %ecx,(%edx) <== NOT EXECUTED
queue->head = sc;
1075bb: 89 10 mov %edx,(%eax) <== NOT EXECUTED
if (queue->tail == 0)
1075bd: 83 78 04 00 cmpl $0x0,0x4(%eax) <== NOT EXECUTED
1075c1: 75 03 jne 1075c6 <rtems_fdisk_segment_queue_push_head+0x16><== NOT EXECUTED
queue->tail = sc;
1075c3: 89 50 04 mov %edx,0x4(%eax) <== NOT EXECUTED
queue->count++;
1075c6: ff 40 08 incl 0x8(%eax) <== NOT EXECUTED
}
}
1075c9: 5d pop %ebp <== NOT EXECUTED
1075ca: c3 ret <== NOT EXECUTED
001075f0 <rtems_fdisk_segment_queue_push_tail>:
* Push to the tail of the segment control queue.
*/
static void
rtems_fdisk_segment_queue_push_tail (rtems_fdisk_segment_ctl_queue* queue,
rtems_fdisk_segment_ctl* sc)
{
1075f0: 55 push %ebp
1075f1: 89 e5 mov %esp,%ebp
if (sc)
1075f3: 85 d2 test %edx,%edx
1075f5: 74 1d je 107614 <rtems_fdisk_segment_queue_push_tail+0x24><== NEVER TAKEN
{
sc->next = 0;
1075f7: c7 02 00 00 00 00 movl $0x0,(%edx)
if (queue->head)
1075fd: 83 38 00 cmpl $0x0,(%eax)
107600: 74 0a je 10760c <rtems_fdisk_segment_queue_push_tail+0x1c>
{
queue->tail->next = sc;
107602: 8b 48 04 mov 0x4(%eax),%ecx
107605: 89 11 mov %edx,(%ecx)
queue->tail = sc;
107607: 89 50 04 mov %edx,0x4(%eax)
10760a: eb 05 jmp 107611 <rtems_fdisk_segment_queue_push_tail+0x21>
}
else
{
queue->head = queue->tail = sc;
10760c: 89 50 04 mov %edx,0x4(%eax)
10760f: 89 10 mov %edx,(%eax)
}
queue->count++;
107611: ff 40 08 incl 0x8(%eax)
}
}
107614: 5d pop %ebp
107615: c3 ret
00107616 <rtems_fdisk_segment_queue_remove>:
* Remove from the segment control queue.
*/
static void
rtems_fdisk_segment_queue_remove (rtems_fdisk_segment_ctl_queue* queue,
rtems_fdisk_segment_ctl* sc)
{
107616: 55 push %ebp
107617: 89 e5 mov %esp,%ebp
107619: 53 push %ebx
rtems_fdisk_segment_ctl* prev = 0;
rtems_fdisk_segment_ctl* it = queue->head;
10761a: 8b 08 mov (%eax),%ecx
*/
static void
rtems_fdisk_segment_queue_remove (rtems_fdisk_segment_ctl_queue* queue,
rtems_fdisk_segment_ctl* sc)
{
rtems_fdisk_segment_ctl* prev = 0;
10761c: 31 db xor %ebx,%ebx
/*
* Do not change sc->next as sc could be on another queue.
*/
while (it)
10761e: eb 32 jmp 107652 <rtems_fdisk_segment_queue_remove+0x3c>
{
if (sc == it)
107620: 39 ca cmp %ecx,%edx
107622: 75 2a jne 10764e <rtems_fdisk_segment_queue_remove+0x38>
{
if (prev == 0)
107624: 85 db test %ebx,%ebx
107626: 8b 0a mov (%edx),%ecx
107628: 75 0f jne 107639 <rtems_fdisk_segment_queue_remove+0x23>
{
queue->head = sc->next;
10762a: 89 08 mov %ecx,(%eax)
if (queue->head == 0)
10762c: 85 c9 test %ecx,%ecx
10762e: 75 13 jne 107643 <rtems_fdisk_segment_queue_remove+0x2d>
queue->tail = 0;
107630: c7 40 04 00 00 00 00 movl $0x0,0x4(%eax)
107637: eb 0a jmp 107643 <rtems_fdisk_segment_queue_remove+0x2d>
}
else
{
prev->next = sc->next;
107639: 89 0b mov %ecx,(%ebx)
if (queue->tail == sc)
10763b: 39 50 04 cmp %edx,0x4(%eax)
10763e: 75 03 jne 107643 <rtems_fdisk_segment_queue_remove+0x2d><== NEVER TAKEN
queue->tail = prev;
107640: 89 58 04 mov %ebx,0x4(%eax)
}
sc->next = 0;
107643: c7 02 00 00 00 00 movl $0x0,(%edx)
queue->count--;
107649: ff 48 08 decl 0x8(%eax)
break;
10764c: eb 08 jmp 107656 <rtems_fdisk_segment_queue_remove+0x40>
10764e: 89 cb mov %ecx,%ebx
}
prev = it;
it = it->next;
107650: 8b 09 mov (%ecx),%ecx
/*
* Do not change sc->next as sc could be on another queue.
*/
while (it)
107652: 85 c9 test %ecx,%ecx
107654: 75 ca jne 107620 <rtems_fdisk_segment_queue_remove+0xa>
}
prev = it;
it = it->next;
}
}
107656: 5b pop %ebx
107657: 5d pop %ebp
107658: c3 ret
00107788 <rtems_fdisk_warning>:
* @param ... The arguments for the format text.
* @return int The number of bytes written to the output.
*/
static int
rtems_fdisk_warning (const rtems_flashdisk* fd, const char *format, ...)
{
107788: 55 push %ebp <== NOT EXECUTED
107789: 89 e5 mov %esp,%ebp <== NOT EXECUTED
10778b: 53 push %ebx <== NOT EXECUTED
10778c: 53 push %ebx <== NOT EXECUTED
int ret = 0;
10778d: 31 db xor %ebx,%ebx <== NOT EXECUTED
if (fd->info_level >= 1)
10778f: 8b 45 08 mov 0x8(%ebp),%eax <== NOT EXECUTED
107792: 83 78 6c 00 cmpl $0x0,0x6c(%eax) <== NOT EXECUTED
107796: 74 4f je 1077e7 <rtems_fdisk_warning+0x5f><== NOT EXECUTED
{
va_list args;
va_start (args, format);
107798: 8d 5d 10 lea 0x10(%ebp),%ebx <== NOT EXECUTED
fprintf (stdout, "fdisk:warning:");
10779b: 50 push %eax <== NOT EXECUTED
10779c: 50 push %eax <== NOT EXECUTED
10779d: a1 40 17 14 00 mov 0x141740,%eax <== NOT EXECUTED
1077a2: ff 70 08 pushl 0x8(%eax) <== NOT EXECUTED
1077a5: 68 ac e3 12 00 push $0x12e3ac <== NOT EXECUTED
1077aa: e8 65 82 01 00 call 11fa14 <fputs> <== NOT EXECUTED
ret = vfprintf (stdout, format, args);
1077af: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
1077b2: 53 push %ebx <== NOT EXECUTED
1077b3: ff 75 0c pushl 0xc(%ebp) <== NOT EXECUTED
1077b6: a1 40 17 14 00 mov 0x141740,%eax <== NOT EXECUTED
1077bb: ff 70 08 pushl 0x8(%eax) <== NOT EXECUTED
1077be: e8 55 09 02 00 call 128118 <vfprintf> <== NOT EXECUTED
1077c3: 89 c3 mov %eax,%ebx <== NOT EXECUTED
fprintf (stdout, "\n");
1077c5: 58 pop %eax <== NOT EXECUTED
1077c6: 5a pop %edx <== NOT EXECUTED
1077c7: a1 40 17 14 00 mov 0x141740,%eax <== NOT EXECUTED
1077cc: ff 70 08 pushl 0x8(%eax) <== NOT EXECUTED
1077cf: 6a 0a push $0xa <== NOT EXECUTED
1077d1: e8 86 81 01 00 call 11f95c <fputc> <== NOT EXECUTED
fflush (stdout);
1077d6: 59 pop %ecx <== NOT EXECUTED
1077d7: a1 40 17 14 00 mov 0x141740,%eax <== NOT EXECUTED
1077dc: ff 70 08 pushl 0x8(%eax) <== NOT EXECUTED
1077df: e8 50 7d 01 00 call 11f534 <fflush> <== NOT EXECUTED
va_end (args);
1077e4: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
return ret;
}
1077e7: 89 d8 mov %ebx,%eax <== NOT EXECUTED
1077e9: 8b 5d fc mov -0x4(%ebp),%ebx <== NOT EXECUTED
1077ec: c9 leave <== NOT EXECUTED
1077ed: c3 ret <== NOT EXECUTED
0010ddf0 <rtems_filesystem_check_access>:
int eval_flags,
mode_t node_mode,
uid_t node_uid,
gid_t node_gid
)
{
10ddf0: 55 push %ebp
10ddf1: 89 e5 mov %esp,%ebp
10ddf3: 57 push %edi
10ddf4: 56 push %esi
10ddf5: 53 push %ebx
10ddf6: 83 ec 0c sub $0xc,%esp
10ddf9: 8b 5d 08 mov 0x8(%ebp),%ebx
10ddfc: 8b 7d 10 mov 0x10(%ebp),%edi
10ddff: 8b 75 14 mov 0x14(%ebp),%esi
mode_t perm_flags = eval_flags & RTEMS_FS_PERMS_RWX;
10de02: 83 e3 07 and $0x7,%ebx
uid_t task_uid = geteuid();
10de05: e8 3e fc ff ff call 10da48 <geteuid>
if (task_uid == 0 || task_uid == node_uid) {
10de0a: 66 39 f8 cmp %di,%ax
10de0d: 74 05 je 10de14 <rtems_filesystem_check_access+0x24>
10de0f: 66 85 c0 test %ax,%ax
10de12: 75 05 jne 10de19 <rtems_filesystem_check_access+0x29>
perm_flags <<= RTEMS_FS_USR_SHIFT;
10de14: c1 e3 06 shl $0x6,%ebx
10de17: eb 12 jmp 10de2b <rtems_filesystem_check_access+0x3b>
} else {
gid_t task_gid = getegid();
10de19: e8 1a fc ff ff call 10da38 <getegid>
if (task_gid == 0 || task_gid == node_gid) {
10de1e: 66 39 f0 cmp %si,%ax
10de21: 74 05 je 10de28 <rtems_filesystem_check_access+0x38>
10de23: 66 85 c0 test %ax,%ax
10de26: 75 03 jne 10de2b <rtems_filesystem_check_access+0x3b><== ALWAYS TAKEN
perm_flags <<= RTEMS_FS_GRP_SHIFT;
10de28: c1 e3 03 shl $0x3,%ebx
} else {
perm_flags <<= RTEMS_FS_OTH_SHIFT;
}
}
return (perm_flags & node_mode) == perm_flags;
10de2b: 8b 45 0c mov 0xc(%ebp),%eax
10de2e: 21 d8 and %ebx,%eax
10de30: 39 d8 cmp %ebx,%eax
10de32: 0f 94 c0 sete %al
}
10de35: 83 c4 0c add $0xc,%esp
10de38: 5b pop %ebx
10de39: 5e pop %esi
10de3a: 5f pop %edi
10de3b: 5d pop %ebp
10de3c: c3 ret
00107a95 <rtems_filesystem_do_unmount>:
}
void rtems_filesystem_do_unmount(
rtems_filesystem_mount_table_entry_t *mt_entry
)
{
107a95: 55 push %ebp
107a96: 89 e5 mov %esp,%ebp
107a98: 53 push %ebx
107a99: 83 ec 08 sub $0x8,%esp
107a9c: 8b 5d 08 mov 0x8(%ebp),%ebx
*/
#include <rtems/userenv.h>
static inline void rtems_libio_lock( void )
{
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
107a9f: 6a 00 push $0x0
107aa1: 6a 00 push $0x0
107aa3: ff 35 d8 e2 12 00 pushl 0x12e2d8
107aa9: e8 e2 22 00 00 call 109d90 <rtems_semaphore_obtain>
)
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
107aae: 8b 13 mov (%ebx),%edx
previous = the_node->previous;
107ab0: 8b 43 04 mov 0x4(%ebx),%eax
next->previous = previous;
107ab3: 89 42 04 mov %eax,0x4(%edx)
previous->next = next;
107ab6: 89 10 mov %edx,(%eax)
}
static inline void rtems_libio_unlock( void )
{
rtems_semaphore_release( rtems_libio_semaphore );
107ab8: 58 pop %eax
107ab9: ff 35 d8 e2 12 00 pushl 0x12e2d8
107abf: e8 bc 23 00 00 call 109e80 <rtems_semaphore_release>
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);
107ac4: 58 pop %eax
107ac5: ff 73 20 pushl 0x20(%ebx)
107ac8: e8 fc 00 00 00 call 107bc9 <rtems_filesystem_global_location_release>
(*mt_entry->ops->fsunmount_me_h)(mt_entry);
107acd: 8b 43 0c mov 0xc(%ebx),%eax
107ad0: 89 1c 24 mov %ebx,(%esp)
107ad3: ff 50 3c call *0x3c(%eax)
if (mt_entry->unmount_task != 0) {
107ad6: 8b 43 3c mov 0x3c(%ebx),%eax
107ad9: 83 c4 10 add $0x10,%esp
107adc: 85 c0 test %eax,%eax
107ade: 74 1e je 107afe <rtems_filesystem_do_unmount+0x69><== NEVER TAKEN
rtems_status_code sc =
107ae0: 51 push %ecx
107ae1: 51 push %ecx
107ae2: 6a 02 push $0x2
107ae4: 50 push %eax
107ae5: e8 da 1e 00 00 call 1099c4 <rtems_event_send>
rtems_event_send(mt_entry->unmount_task, RTEMS_FILESYSTEM_UNMOUNT_EVENT);
if (sc != RTEMS_SUCCESSFUL) {
107aea: 83 c4 10 add $0x10,%esp
107aed: 85 c0 test %eax,%eax
107aef: 74 0d je 107afe <rtems_filesystem_do_unmount+0x69><== ALWAYS TAKEN
rtems_fatal_error_occurred(0xdeadbeef);
107af1: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
107af4: 68 ef be ad de push $0xdeadbeef <== NOT EXECUTED
107af9: e8 b6 28 00 00 call 10a3b4 <rtems_fatal_error_occurred><== NOT EXECUTED
}
}
free(mt_entry);
107afe: 89 5d 08 mov %ebx,0x8(%ebp)
}
107b01: 8b 5d fc mov -0x4(%ebp),%ebx
107b04: c9 leave
if (sc != RTEMS_SUCCESSFUL) {
rtems_fatal_error_occurred(0xdeadbeef);
}
}
free(mt_entry);
107b05: e9 2a ec ff ff jmp 106734 <free>
0010de78 <rtems_filesystem_eval_path_generic>:
void rtems_filesystem_eval_path_generic(
rtems_filesystem_eval_path_context_t *ctx,
void *arg,
const rtems_filesystem_eval_path_generic_config *config
)
{
10de78: 55 push %ebp
10de79: 89 e5 mov %esp,%ebp
10de7b: 57 push %edi
10de7c: 56 push %esi
10de7d: 53 push %ebx
10de7e: 83 ec 1c sub $0x1c,%esp
10de81: 8b 5d 08 mov 0x8(%ebp),%ebx
10de84: 8b 75 0c mov 0xc(%ebp),%esi
10de87: 8b 7d 10 mov 0x10(%ebp),%edi
rtems_filesystem_eval_path_error(ctx, EINVAL);
status = RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_DONE;
}
}
} else if (rtems_filesystem_is_parent_directory(token, tokenlen)) {
rtems_filesystem_location_info_t *currentloc =
10de8a: 8d 43 18 lea 0x18(%ebx),%eax
10de8d: 89 45 e4 mov %eax,-0x1c(%ebp)
rtems_filesystem_eval_path_context_t *ctx,
const char **token,
size_t *tokenlen
)
{
rtems_filesystem_eval_path_next_token(ctx);
10de90: 83 ec 0c sub $0xc,%esp
10de93: 53 push %ebx
10de94: e8 72 01 00 00 call 10e00b <rtems_filesystem_eval_path_next_token>
*token = ctx->token;
10de99: 8b 53 08 mov 0x8(%ebx),%edx
*tokenlen = ctx->tokenlen;
10de9c: 8b 4b 0c mov 0xc(%ebx),%ecx
const char *token;
size_t tokenlen;
rtems_filesystem_eval_path_get_next_token(ctx, &token, &tokenlen);
if (tokenlen > 0) {
10de9f: 83 c4 10 add $0x10,%esp
10dea2: 85 c9 test %ecx,%ecx
10dea4: 0f 84 27 01 00 00 je 10dfd1 <rtems_filesystem_eval_path_generic+0x159>
if ((*config->is_directory)(ctx, arg)) {
10deaa: 50 push %eax
10deab: 50 push %eax
10deac: 56 push %esi
10dead: 53 push %ebx
10deae: 89 55 e0 mov %edx,-0x20(%ebp)
10deb1: 89 4d dc mov %ecx,-0x24(%ebp)
10deb4: ff 17 call *(%edi)
10deb6: 83 c4 10 add $0x10,%esp
10deb9: 84 c0 test %al,%al
10debb: 8b 55 e0 mov -0x20(%ebp),%edx
10debe: 8b 4d dc mov -0x24(%ebp),%ecx
10dec1: 0f 84 f6 00 00 00 je 10dfbd <rtems_filesystem_eval_path_generic+0x145>
static inline bool rtems_filesystem_is_current_directory(
const char *token,
size_t tokenlen
)
{
return tokenlen == 1 && token [0] == '.';
10dec7: 31 c0 xor %eax,%eax
10dec9: 83 f9 01 cmp $0x1,%ecx
10decc: 75 08 jne 10ded6 <rtems_filesystem_eval_path_generic+0x5e>
10dece: 31 c0 xor %eax,%eax
10ded0: 80 3a 2e cmpb $0x2e,(%edx)
10ded3: 0f 94 c0 sete %al
if (rtems_filesystem_is_current_directory(token, tokenlen)) {
10ded6: 85 c0 test %eax,%eax
10ded8: 74 1f je 10def9 <rtems_filesystem_eval_path_generic+0x81>
if (rtems_filesystem_eval_path_has_path(ctx)) {
10deda: 83 7b 04 00 cmpl $0x0,0x4(%ebx)
10dede: 74 05 je 10dee5 <rtems_filesystem_eval_path_generic+0x6d>
10dee0: e9 93 00 00 00 jmp 10df78 <rtems_filesystem_eval_path_generic+0x100>
status = (*config->eval_token)(ctx, arg, ".", 1);
} else {
int eval_flags = rtems_filesystem_eval_path_get_flags(ctx);
if ((eval_flags & RTEMS_FS_REJECT_TERMINAL_DOT) == 0) {
10dee5: f6 43 11 01 testb $0x1,0x11(%ebx)
10dee9: 75 05 jne 10def0 <rtems_filesystem_eval_path_generic+0x78>
10deeb: e9 88 00 00 00 jmp 10df78 <rtems_filesystem_eval_path_generic+0x100>
status = (*config->eval_token)(ctx, arg, ".", 1);
} else {
rtems_filesystem_eval_path_error(ctx, EINVAL);
10def0: 50 push %eax
10def1: 50 push %eax
10def2: 6a 16 push $0x16
10def4: e9 c8 00 00 00 jmp 10dfc1 <rtems_filesystem_eval_path_generic+0x149>
static inline bool rtems_filesystem_is_parent_directory(
const char *token,
size_t tokenlen
)
{
return tokenlen == 2 && token [0] == '.' && token [1] == '.';
10def9: 31 c0 xor %eax,%eax
10defb: 83 f9 02 cmp $0x2,%ecx
10defe: 75 0e jne 10df0e <rtems_filesystem_eval_path_generic+0x96>
10df00: 80 3a 2e cmpb $0x2e,(%edx)
10df03: 75 09 jne 10df0e <rtems_filesystem_eval_path_generic+0x96>
10df05: 31 c0 xor %eax,%eax
10df07: 80 7a 01 2e cmpb $0x2e,0x1(%edx)
10df0b: 0f 94 c0 sete %al
status = RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_DONE;
}
}
} else if (rtems_filesystem_is_parent_directory(token, tokenlen)) {
10df0e: 85 c0 test %eax,%eax
10df10: 74 78 je 10df8a <rtems_filesystem_eval_path_generic+0x112>
}
} else {
status = RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_DONE;
}
}
}
10df12: 8b 53 30 mov 0x30(%ebx),%edx
static bool is_eval_path_root(
const rtems_filesystem_eval_path_context_t *ctx,
const rtems_filesystem_location_info_t *loc
)
{
const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry;
10df15: 8b 4b 2c mov 0x2c(%ebx),%ecx
const rtems_filesystem_location_info_t *rootloc = &ctx->rootloc->location;
return mt_entry == rootloc->mt_entry
&& (*mt_entry->ops->are_nodes_equal_h)( loc, rootloc );
10df18: 31 c0 xor %eax,%eax
10df1a: 3b 4a 14 cmp 0x14(%edx),%ecx
10df1d: 75 12 jne 10df31 <rtems_filesystem_eval_path_generic+0xb9>
10df1f: 50 push %eax
10df20: 50 push %eax
10df21: 8b 41 0c mov 0xc(%ecx),%eax
10df24: 52 push %edx
10df25: ff 75 e4 pushl -0x1c(%ebp)
10df28: ff 50 10 call *0x10(%eax)
10df2b: 0f b6 c0 movzbl %al,%eax
10df2e: 83 c4 10 add $0x10,%esp
}
} else if (rtems_filesystem_is_parent_directory(token, tokenlen)) {
rtems_filesystem_location_info_t *currentloc =
rtems_filesystem_eval_path_get_currentloc( ctx );
if (is_eval_path_root(ctx, currentloc)) {
10df31: a8 01 test $0x1,%al
10df33: 74 02 je 10df37 <rtems_filesystem_eval_path_generic+0xbf>
10df35: eb 41 jmp 10df78 <rtems_filesystem_eval_path_generic+0x100>
#include <rtems/libio_.h>
static bool is_fs_root( const rtems_filesystem_location_info_t *loc )
{
const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry;
10df37: 8b 43 2c mov 0x2c(%ebx),%eax
const rtems_filesystem_location_info_t *mt_fs_root =
&mt_entry->mt_fs_root->location;
return (*mt_entry->ops->are_nodes_equal_h)( loc, mt_fs_root );
10df3a: 52 push %edx
10df3b: 52 push %edx
10df3c: 8b 50 0c mov 0xc(%eax),%edx
10df3f: ff 70 24 pushl 0x24(%eax)
10df42: ff 75 e4 pushl -0x1c(%ebp)
10df45: ff 52 10 call *0x10(%edx)
rtems_filesystem_eval_path_get_currentloc( ctx );
if (is_eval_path_root(ctx, currentloc)) {
/* This prevents the escape from a chroot() environment */
status = (*config->eval_token)(ctx, arg, ".", 1);
} else if (is_fs_root(currentloc)) {
10df48: 83 c4 10 add $0x10,%esp
10df4b: 84 c0 test %al,%al
10df4d: 74 32 je 10df81 <rtems_filesystem_eval_path_generic+0x109>
if (currentloc->mt_entry->mt_point_node != NULL) {
10df4f: 8b 43 2c mov 0x2c(%ebx),%eax
10df52: 83 78 20 00 cmpl $0x0,0x20(%eax)
10df56: 74 20 je 10df78 <rtems_filesystem_eval_path_generic+0x100><== NEVER TAKEN
static inline void rtems_filesystem_eval_path_put_back_token(
rtems_filesystem_eval_path_context_t *ctx
)
{
size_t tokenlen = ctx->tokenlen;
10df58: 8b 53 0c mov 0xc(%ebx),%edx
ctx->path -= tokenlen;
10df5b: 29 13 sub %edx,(%ebx)
ctx->pathlen += tokenlen;
10df5d: 01 53 04 add %edx,0x4(%ebx)
ctx->tokenlen = 0;
10df60: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx)
rtems_filesystem_eval_path_put_back_token(ctx);
rtems_filesystem_eval_path_restart(
10df67: 51 push %ecx
10df68: 51 push %ecx
10df69: 83 c0 20 add $0x20,%eax
10df6c: 50 push %eax
10df6d: 53 push %ebx
10df6e: e8 84 99 ff ff call 1078f7 <rtems_filesystem_eval_path_restart>
10df73: 83 c4 10 add $0x10,%esp
10df76: eb 59 jmp 10dfd1 <rtems_filesystem_eval_path_generic+0x159>
¤tloc->mt_entry->mt_point_node
);
status = RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_DONE;
} else {
/* This is the root file system */
status = (*config->eval_token)(ctx, arg, ".", 1);
10df78: 6a 01 push $0x1
10df7a: 68 71 ff 11 00 push $0x11ff71
10df7f: eb 0b jmp 10df8c <rtems_filesystem_eval_path_generic+0x114>
}
} else {
status = (*config->eval_token)(ctx, arg, "..", 2);
10df81: 6a 02 push $0x2
10df83: 68 70 ff 11 00 push $0x11ff70
10df88: eb 02 jmp 10df8c <rtems_filesystem_eval_path_generic+0x114>
}
} else {
status = (*config->eval_token)(ctx, arg, token, tokenlen);
10df8a: 51 push %ecx
10df8b: 52 push %edx
10df8c: 56 push %esi
10df8d: 53 push %ebx
10df8e: ff 57 04 call *0x4(%edi)
10df91: 83 c4 10 add $0x10,%esp
}
if (status == RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_NO_ENTRY) {
10df94: 83 f8 02 cmp $0x2,%eax
10df97: 75 30 jne 10dfc9 <rtems_filesystem_eval_path_generic+0x151>
if (rtems_filesystem_eval_path_has_path(ctx)) {
10df99: 83 7b 04 00 cmpl $0x0,0x4(%ebx)
10df9d: 74 32 je 10dfd1 <rtems_filesystem_eval_path_generic+0x159>
int eval_flags;
rtems_filesystem_eval_path_eat_delimiter(ctx);
10df9f: 83 ec 0c sub $0xc,%esp
10dfa2: 53 push %ebx
10dfa3: e8 34 00 00 00 call 10dfdc <rtems_filesystem_eval_path_eat_delimiter>
eval_flags = rtems_filesystem_eval_path_get_flags(ctx);
if (
10dfa8: 83 c4 10 add $0x10,%esp
10dfab: f6 43 10 80 testb $0x80,0x10(%ebx)
10dfaf: 74 06 je 10dfb7 <rtems_filesystem_eval_path_generic+0x13f>
(eval_flags & RTEMS_FS_ACCEPT_RESIDUAL_DELIMITERS) == 0
|| rtems_filesystem_eval_path_has_path(ctx)
10dfb1: 83 7b 04 00 cmpl $0x0,0x4(%ebx)
10dfb5: 74 1a je 10dfd1 <rtems_filesystem_eval_path_generic+0x159>
) {
rtems_filesystem_eval_path_error(ctx, ENOENT);
10dfb7: 52 push %edx
10dfb8: 52 push %edx
10dfb9: 6a 02 push $0x2
10dfbb: eb 04 jmp 10dfc1 <rtems_filesystem_eval_path_generic+0x149>
}
}
}
} else {
rtems_filesystem_eval_path_error(ctx, ENOTDIR);
10dfbd: 50 push %eax
10dfbe: 50 push %eax
10dfbf: 6a 14 push $0x14
10dfc1: 53 push %ebx
10dfc2: e8 f7 95 ff ff call 1075be <rtems_filesystem_eval_path_error>
10dfc7: eb aa jmp 10df73 <rtems_filesystem_eval_path_generic+0xfb>
)
{
rtems_filesystem_eval_path_generic_status status =
RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_CONTINUE;
while (status == RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_CONTINUE) {
10dfc9: 85 c0 test %eax,%eax
10dfcb: 0f 84 bf fe ff ff je 10de90 <rtems_filesystem_eval_path_generic+0x18>
}
} else {
status = RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_DONE;
}
}
}
10dfd1: 8d 65 f4 lea -0xc(%ebp),%esp
10dfd4: 5b pop %ebx
10dfd5: 5e pop %esi
10dfd6: 5f pop %edi
10dfd7: 5d pop %ebp
10dfd8: c3 ret
0010e00b <rtems_filesystem_eval_path_next_token>:
}
void rtems_filesystem_eval_path_next_token(
rtems_filesystem_eval_path_context_t *ctx
)
{
10e00b: 55 push %ebp
10e00c: 89 e5 mov %esp,%ebp
10e00e: 56 push %esi
10e00f: 53 push %ebx
10e010: 8b 5d 08 mov 0x8(%ebp),%ebx
rtems_filesystem_eval_path_eat_delimiter(ctx);
10e013: 53 push %ebx
10e014: e8 c3 ff ff ff call 10dfdc <rtems_filesystem_eval_path_eat_delimiter>
ctx->pathlen = (size_t) (end - current);
}
static void next_token(rtems_filesystem_eval_path_context_t *ctx)
{
const char *begin = ctx->path;
10e019: 8b 13 mov (%ebx),%edx
const char *end = begin + ctx->pathlen;
10e01b: 8b 73 04 mov 0x4(%ebx),%esi
10e01e: 01 d6 add %edx,%esi
10e020: 58 pop %eax
const char *current = begin;
10e021: 89 d0 mov %edx,%eax
10e023: eb 01 jmp 10e026 <rtems_filesystem_eval_path_next_token+0x1b>
while (current != end && !rtems_filesystem_is_delimiter(*current)) {
++current;
10e025: 40 inc %eax
{
const char *begin = ctx->path;
const char *end = begin + ctx->pathlen;
const char *current = begin;
while (current != end && !rtems_filesystem_is_delimiter(*current)) {
10e026: 39 f0 cmp %esi,%eax
10e028: 75 11 jne 10e03b <rtems_filesystem_eval_path_next_token+0x30>
++current;
}
ctx->path = current;
10e02a: 89 03 mov %eax,(%ebx)
ctx->pathlen = (size_t) (end - current);
10e02c: 29 c6 sub %eax,%esi
10e02e: 89 73 04 mov %esi,0x4(%ebx)
ctx->token = begin;
10e031: 89 53 08 mov %edx,0x8(%ebx)
ctx->tokenlen = (size_t) (current - begin);
10e034: 29 d0 sub %edx,%eax
10e036: 89 43 0c mov %eax,0xc(%ebx)
10e039: eb 0e jmp 10e049 <rtems_filesystem_eval_path_next_token+0x3e>
{
const char *begin = ctx->path;
const char *end = begin + ctx->pathlen;
const char *current = begin;
while (current != end && !rtems_filesystem_is_delimiter(*current)) {
10e03b: 8a 08 mov (%eax),%cl
10e03d: 80 f9 5c cmp $0x5c,%cl
10e040: 74 e8 je 10e02a <rtems_filesystem_eval_path_next_token+0x1f><== NEVER TAKEN
10e042: 80 f9 2f cmp $0x2f,%cl
10e045: 75 de jne 10e025 <rtems_filesystem_eval_path_next_token+0x1a>
10e047: eb e1 jmp 10e02a <rtems_filesystem_eval_path_next_token+0x1f>
rtems_filesystem_eval_path_context_t *ctx
)
{
rtems_filesystem_eval_path_eat_delimiter(ctx);
next_token(ctx);
}
10e049: 8d 65 f8 lea -0x8(%ebp),%esp
10e04c: 5b pop %ebx
10e04d: 5e pop %esi
10e04e: 5d pop %ebp
10e04f: c3 ret
0010795a <rtems_filesystem_eval_path_recursive>:
void rtems_filesystem_eval_path_recursive(
rtems_filesystem_eval_path_context_t *ctx,
const char *path,
size_t pathlen
)
{
10795a: 55 push %ebp
10795b: 89 e5 mov %esp,%ebp
10795d: 57 push %edi
10795e: 56 push %esi
10795f: 53 push %ebx
107960: 83 ec 1c sub $0x1c,%esp
107963: 8b 5d 08 mov 0x8(%ebp),%ebx
107966: 8b 4d 0c mov 0xc(%ebp),%ecx
107969: 8b 55 10 mov 0x10(%ebp),%edx
if (pathlen > 0) {
10796c: 85 d2 test %edx,%edx
10796e: 74 63 je 1079d3 <rtems_filesystem_eval_path_recursive+0x79><== NEVER TAKEN
if (ctx->recursionlevel < RTEMS_FILESYSTEM_SYMLOOP_MAX) {
107970: 83 7b 14 1f cmpl $0x1f,0x14(%ebx)
107974: 7f 54 jg 1079ca <rtems_filesystem_eval_path_recursive+0x70>
const char *saved_path = ctx->path;
107976: 8b 3b mov (%ebx),%edi
size_t saved_pathlen = ctx->pathlen;
107978: 8b 73 04 mov 0x4(%ebx),%esi
if (rtems_filesystem_is_delimiter(path [0])) {
10797b: 8a 01 mov (%ecx),%al
10797d: 3c 5c cmp $0x5c,%al
10797f: 74 04 je 107985 <rtems_filesystem_eval_path_recursive+0x2b><== NEVER TAKEN
107981: 3c 2f cmp $0x2f,%al
107983: 75 1b jne 1079a0 <rtems_filesystem_eval_path_recursive+0x46>
rtems_filesystem_eval_path_restart(ctx, &ctx->rootloc);
107985: 50 push %eax
107986: 50 push %eax
107987: 8d 43 30 lea 0x30(%ebx),%eax
10798a: 50 push %eax
10798b: 53 push %ebx
10798c: 89 55 e0 mov %edx,-0x20(%ebp)
10798f: 89 4d e4 mov %ecx,-0x1c(%ebp)
107992: e8 60 ff ff ff call 1078f7 <rtems_filesystem_eval_path_restart>
107997: 83 c4 10 add $0x10,%esp
10799a: 8b 4d e4 mov -0x1c(%ebp),%ecx
10799d: 8b 55 e0 mov -0x20(%ebp),%edx
}
ctx->path = path;
1079a0: 89 0b mov %ecx,(%ebx)
ctx->pathlen = pathlen;
1079a2: 89 53 04 mov %edx,0x4(%ebx)
++ctx->recursionlevel;
1079a5: ff 43 14 incl 0x14(%ebx)
while (ctx->pathlen > 0) {
1079a8: eb 10 jmp 1079ba <rtems_filesystem_eval_path_recursive+0x60>
(*ctx->currentloc.mt_entry->ops->eval_path_h)(ctx);
1079aa: 83 ec 0c sub $0xc,%esp
1079ad: 8b 43 2c mov 0x2c(%ebx),%eax
1079b0: 8b 40 0c mov 0xc(%eax),%eax
1079b3: 53 push %ebx
1079b4: ff 50 08 call *0x8(%eax)
1079b7: 83 c4 10 add $0x10,%esp
ctx->path = path;
ctx->pathlen = pathlen;
++ctx->recursionlevel;
while (ctx->pathlen > 0) {
1079ba: 83 7b 04 00 cmpl $0x0,0x4(%ebx)
1079be: 75 ea jne 1079aa <rtems_filesystem_eval_path_recursive+0x50>
(*ctx->currentloc.mt_entry->ops->eval_path_h)(ctx);
}
--ctx->recursionlevel;
1079c0: ff 4b 14 decl 0x14(%ebx)
ctx->path = saved_path;
1079c3: 89 3b mov %edi,(%ebx)
ctx->pathlen = saved_pathlen;
1079c5: 89 73 04 mov %esi,0x4(%ebx)
1079c8: eb 1f jmp 1079e9 <rtems_filesystem_eval_path_recursive+0x8f>
} else {
rtems_filesystem_eval_path_error(ctx, ELOOP);
1079ca: c7 45 0c 5c 00 00 00 movl $0x5c,0xc(%ebp)
1079d1: eb 07 jmp 1079da <rtems_filesystem_eval_path_recursive+0x80>
}
} else {
rtems_filesystem_eval_path_error(ctx, ENOENT);
1079d3: c7 45 0c 02 00 00 00 movl $0x2,0xc(%ebp) <== NOT EXECUTED
1079da: 89 5d 08 mov %ebx,0x8(%ebp)
}
}
1079dd: 8d 65 f4 lea -0xc(%ebp),%esp
1079e0: 5b pop %ebx
1079e1: 5e pop %esi
1079e2: 5f pop %edi
1079e3: 5d pop %ebp
ctx->pathlen = saved_pathlen;
} else {
rtems_filesystem_eval_path_error(ctx, ELOOP);
}
} else {
rtems_filesystem_eval_path_error(ctx, ENOENT);
1079e4: e9 d5 fb ff ff jmp 1075be <rtems_filesystem_eval_path_error>
}
}
1079e9: 8d 65 f4 lea -0xc(%ebp),%esp
1079ec: 5b pop %ebx
1079ed: 5e pop %esi
1079ee: 5f pop %edi
1079ef: 5d pop %ebp
1079f0: c3 ret
00107805 <rtems_filesystem_eval_path_start_with_parent>:
const char *path,
int eval_flags,
rtems_filesystem_location_info_t *parentloc,
int parent_eval_flags
)
{
107805: 55 push %ebp
107806: 89 e5 mov %esp,%ebp
107808: 57 push %edi
107809: 56 push %esi
10780a: 53 push %ebx
10780b: 83 ec 0c sub $0xc,%esp
10780e: 8b 5d 08 mov 0x8(%ebp),%ebx
107811: 8b 55 0c mov 0xc(%ebp),%edx
size_t pathlen = strlen(path);
107814: 31 c0 xor %eax,%eax
107816: 83 c9 ff or $0xffffffff,%ecx
107819: 89 d7 mov %edx,%edi
10781b: f2 ae repnz scas %es:(%edi),%al
10781d: f7 d1 not %ecx
10781f: 8d 79 ff lea -0x1(%ecx),%edi
107822: 89 f9 mov %edi,%ecx
107824: eb 11 jmp 107837 <rtems_filesystem_eval_path_start_with_parent+0x32>
#include <rtems/libio_.h>
static size_t get_parentpathlen(const char *path, size_t pathlen)
{
while (pathlen > 0) {
size_t i = pathlen - 1;
107826: 8d 71 ff lea -0x1(%ecx),%esi
if (rtems_filesystem_is_delimiter(path [i])) {
107829: 8a 44 0a ff mov -0x1(%edx,%ecx,1),%al
10782d: 3c 5c cmp $0x5c,%al
10782f: 74 60 je 107891 <rtems_filesystem_eval_path_start_with_parent+0x8c><== NEVER TAKEN
107831: 3c 2f cmp $0x2f,%al
107833: 74 5c je 107891 <rtems_filesystem_eval_path_start_with_parent+0x8c>
return pathlen;
}
pathlen = i;
107835: 89 f1 mov %esi,%ecx
#include <rtems/libio_.h>
static size_t get_parentpathlen(const char *path, size_t pathlen)
{
while (pathlen > 0) {
107837: 85 c9 test %ecx,%ecx
107839: 75 eb jne 107826 <rtems_filesystem_eval_path_start_with_parent+0x21>
size_t parentpathlen = get_parentpathlen(path, pathlen);
const char *name = NULL;
size_t namelen = 0;
const rtems_filesystem_location_info_t *currentloc = NULL;
if (pathlen > 0) {
10783b: 85 ff test %edi,%edi
10783d: 74 12 je 107851 <rtems_filesystem_eval_path_start_with_parent+0x4c>
if (parentpathlen == 0) {
parentpath = ".";
parentpathlen = 1;
name = path;
10783f: 89 d6 mov %edx,%esi
const rtems_filesystem_location_info_t *currentloc = NULL;
if (pathlen > 0) {
if (parentpathlen == 0) {
parentpath = ".";
parentpathlen = 1;
107841: b1 01 mov $0x1,%cl
size_t namelen = 0;
const rtems_filesystem_location_info_t *currentloc = NULL;
if (pathlen > 0) {
if (parentpathlen == 0) {
parentpath = ".";
107843: ba 71 ff 11 00 mov $0x11ff71,%edx
107848: eb 0d jmp 107857 <rtems_filesystem_eval_path_start_with_parent+0x52>
parentpathlen = 1;
name = path;
namelen = pathlen;
} else {
name = path + parentpathlen;
10784a: 8d 34 0a lea (%edx,%ecx,1),%esi
namelen = pathlen - parentpathlen;
10784d: 29 cf sub %ecx,%edi
10784f: eb 06 jmp 107857 <rtems_filesystem_eval_path_start_with_parent+0x52>
{
size_t pathlen = strlen(path);
const char *parentpath = path;
size_t parentpathlen = get_parentpathlen(path, pathlen);
const char *name = NULL;
size_t namelen = 0;
107851: 31 ff xor %edi,%edi
)
{
size_t pathlen = strlen(path);
const char *parentpath = path;
size_t parentpathlen = get_parentpathlen(path, pathlen);
const char *name = NULL;
107853: 31 f6 xor %esi,%esi
}
pathlen = i;
}
return 0;
107855: 31 c9 xor %ecx,%ecx
ctx,
parentpath,
parentpathlen,
parent_eval_flags,
&rtems_filesystem_root,
&rtems_filesystem_current
107857: a1 14 c1 12 00 mov 0x12c114,%eax
name = path + parentpathlen;
namelen = pathlen - parentpathlen;
}
}
currentloc = eval_path_start(
10785c: 83 ec 04 sub $0x4,%esp
10785f: 50 push %eax
ctx,
parentpath,
parentpathlen,
parent_eval_flags,
&rtems_filesystem_root,
107860: 83 c0 04 add $0x4,%eax
name = path + parentpathlen;
namelen = pathlen - parentpathlen;
}
}
currentloc = eval_path_start(
107863: 50 push %eax
107864: ff 75 18 pushl 0x18(%ebp)
107867: 89 d8 mov %ebx,%eax
107869: e8 79 fe ff ff call 1076e7 <eval_path_start>
parent_eval_flags,
&rtems_filesystem_root,
&rtems_filesystem_current
);
rtems_filesystem_location_clone(parentloc, currentloc);
10786e: 5a pop %edx
10786f: 59 pop %ecx
107870: 50 push %eax
107871: ff 75 14 pushl 0x14(%ebp)
107874: e8 cf 60 00 00 call 10d948 <rtems_filesystem_location_clone>
ctx->path = name;
107879: 89 33 mov %esi,(%ebx)
ctx->pathlen = namelen;
10787b: 89 7b 04 mov %edi,0x4(%ebx)
ctx->flags = eval_flags;
10787e: 8b 45 10 mov 0x10(%ebp),%eax
107881: 89 43 10 mov %eax,0x10(%ebx)
rtems_filesystem_eval_path_continue(ctx);
107884: 89 1c 24 mov %ebx,(%esp)
107887: e8 ff fd ff ff call 10768b <rtems_filesystem_eval_path_continue>
return &ctx->currentloc;
10788c: 8d 43 18 lea 0x18(%ebx),%eax
10788f: eb 08 jmp 107899 <rtems_filesystem_eval_path_start_with_parent+0x94>
)
{
size_t pathlen = strlen(path);
const char *parentpath = path;
size_t parentpathlen = get_parentpathlen(path, pathlen);
const char *name = NULL;
107891: 31 f6 xor %esi,%esi
size_t namelen = 0;
const rtems_filesystem_location_info_t *currentloc = NULL;
if (pathlen > 0) {
107893: 85 ff test %edi,%edi
107895: 74 c0 je 107857 <rtems_filesystem_eval_path_start_with_parent+0x52><== NEVER TAKEN
107897: eb b1 jmp 10784a <rtems_filesystem_eval_path_start_with_parent+0x45>
ctx->flags = eval_flags;
rtems_filesystem_eval_path_continue(ctx);
return &ctx->currentloc;
}
107899: 8d 65 f4 lea -0xc(%ebp),%esp
10789c: 5b pop %ebx
10789d: 5e pop %esi
10789e: 5f pop %edi
10789f: 5d pop %ebp
1078a0: c3 ret
0010dc8f <rtems_filesystem_get_mount_handler>:
rtems_filesystem_fsmount_me_t
rtems_filesystem_get_mount_handler(
const char *type
)
{
10dc8f: 55 push %ebp
10dc90: 89 e5 mov %esp,%ebp
10dc92: 83 ec 18 sub $0x18,%esp
10dc95: 8b 45 08 mov 0x8(%ebp),%eax
find_arg fa = {
10dc98: 89 45 f0 mov %eax,-0x10(%ebp)
10dc9b: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp)
.type = type,
.mount_h = NULL
};
if ( type != NULL ) {
10dca2: 85 c0 test %eax,%eax
10dca4: 74 13 je 10dcb9 <rtems_filesystem_get_mount_handler+0x2a><== NEVER TAKEN
rtems_filesystem_iterate( find_handler, &fa );
10dca6: 50 push %eax
10dca7: 50 push %eax
10dca8: 8d 45 f0 lea -0x10(%ebp),%eax
10dcab: 50 push %eax
10dcac: 68 b8 db 10 00 push $0x10dbb8
10dcb1: e8 62 ff ff ff call 10dc18 <rtems_filesystem_iterate>
10dcb6: 83 c4 10 add $0x10,%esp
}
return fa.mount_h;
}
10dcb9: 8b 45 f4 mov -0xc(%ebp),%eax
10dcbc: c9 leave
10dcbd: c3 ret
001064c8 <rtems_filesystem_initialize>:
* configuration is a single instantiation of the IMFS or miniIMFS with
* a single "/dev" directory in it.
*/
void rtems_filesystem_initialize( void )
{
1064c8: 55 push %ebp
1064c9: 89 e5 mov %esp,%ebp
1064cb: 83 ec 14 sub $0x14,%esp
int rv = 0;
const rtems_filesystem_mount_configuration *root_config =
&rtems_filesystem_root_configuration;
rv = mount(
1064ce: ff 35 94 df 11 00 pushl 0x11df94
1064d4: ff 35 90 df 11 00 pushl 0x11df90
1064da: ff 35 8c df 11 00 pushl 0x11df8c
1064e0: ff 35 88 df 11 00 pushl 0x11df88
1064e6: ff 35 84 df 11 00 pushl 0x11df84
1064ec: e8 bb 06 00 00 call 106bac <mount>
root_config->target,
root_config->filesystemtype,
root_config->options,
root_config->data
);
if ( rv != 0 )
1064f1: 83 c4 20 add $0x20,%esp
1064f4: 85 c0 test %eax,%eax
1064f6: 74 0a je 106502 <rtems_filesystem_initialize+0x3a><== ALWAYS TAKEN
rtems_fatal_error_occurred( 0xABCD0002 );
1064f8: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1064fb: 68 02 00 cd ab push $0xabcd0002 <== NOT EXECUTED
106500: eb 20 jmp 106522 <rtems_filesystem_initialize+0x5a><== NOT EXECUTED
*
* NOTE: UNIX root is 755 and owned by root/root (0/0). It is actually
* created that way by the IMFS.
*/
rv = mkdir( "/dev", 0777);
106502: 50 push %eax
106503: 50 push %eax
106504: 68 ff 01 00 00 push $0x1ff
106509: 68 ac f3 11 00 push $0x11f3ac
10650e: e8 81 05 00 00 call 106a94 <mkdir>
if ( rv != 0 )
106513: 83 c4 10 add $0x10,%esp
106516: 85 c0 test %eax,%eax
106518: 74 0d je 106527 <rtems_filesystem_initialize+0x5f><== ALWAYS TAKEN
rtems_fatal_error_occurred( 0xABCD0003 );
10651a: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10651d: 68 03 00 cd ab push $0xabcd0003 <== NOT EXECUTED
106522: e8 8d 3e 00 00 call 10a3b4 <rtems_fatal_error_occurred><== NOT EXECUTED
* 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.
*/
}
106527: c9 leave
106528: c3 ret
0010dc18 <rtems_filesystem_iterate>:
bool rtems_filesystem_iterate(
rtems_per_filesystem_routine routine,
void *routine_arg
)
{
10dc18: 55 push %ebp
10dc19: 89 e5 mov %esp,%ebp
10dc1b: 57 push %edi
10dc1c: 56 push %esi
10dc1d: 53 push %ebx
10dc1e: 83 ec 1c sub $0x1c,%esp
10dc21: 8b 5d 08 mov 0x8(%ebp),%ebx
10dc24: 8b 75 0c mov 0xc(%ebp),%esi
const rtems_filesystem_table_t *table_entry = &rtems_filesystem_table [0];
rtems_chain_node *node = NULL;
bool stop = false;
10dc27: 31 c0 xor %eax,%eax
bool rtems_filesystem_iterate(
rtems_per_filesystem_routine routine,
void *routine_arg
)
{
const rtems_filesystem_table_t *table_entry = &rtems_filesystem_table [0];
10dc29: bf 98 df 11 00 mov $0x11df98,%edi
rtems_chain_node *node = NULL;
bool stop = false;
while ( table_entry->type && !stop ) {
10dc2e: eb 0c jmp 10dc3c <rtems_filesystem_iterate+0x24>
stop = (*routine)( table_entry, routine_arg );
10dc30: 51 push %ecx
10dc31: 51 push %ecx
10dc32: 56 push %esi
10dc33: 57 push %edi
10dc34: ff d3 call *%ebx
++table_entry;
10dc36: 83 c7 08 add $0x8,%edi
10dc39: 83 c4 10 add $0x10,%esp
{
const rtems_filesystem_table_t *table_entry = &rtems_filesystem_table [0];
rtems_chain_node *node = NULL;
bool stop = false;
while ( table_entry->type && !stop ) {
10dc3c: 83 3f 00 cmpl $0x0,(%edi)
10dc3f: 74 06 je 10dc47 <rtems_filesystem_iterate+0x2f>
10dc41: 84 c0 test %al,%al
10dc43: 74 eb je 10dc30 <rtems_filesystem_iterate+0x18>
10dc45: eb 40 jmp 10dc87 <rtems_filesystem_iterate+0x6f>
stop = (*routine)( table_entry, routine_arg );
++table_entry;
}
if ( !stop ) {
10dc47: 84 c0 test %al,%al
10dc49: 75 3c jne 10dc87 <rtems_filesystem_iterate+0x6f>
rtems_libio_lock();
10dc4b: 88 45 e4 mov %al,-0x1c(%ebp)
10dc4e: e8 95 ff ff ff call 10dbe8 <rtems_libio_lock>
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_First(
Chain_Control *the_chain
)
{
return _Chain_Head( the_chain )->next;
10dc53: 8b 3d b0 c1 12 00 mov 0x12c1b0,%edi
for (
10dc59: 8a 45 e4 mov -0x1c(%ebp),%al
10dc5c: eb 0e jmp 10dc6c <rtems_filesystem_iterate+0x54>
!rtems_chain_is_tail( &filesystem_chain, node ) && !stop;
node = rtems_chain_next( node )
) {
const filesystem_node *fsn = (filesystem_node *) node;
stop = (*routine)( &fsn->entry, routine_arg );
10dc5e: 52 push %edx
10dc5f: 52 push %edx
10dc60: 56 push %esi
10dc61: 8d 47 08 lea 0x8(%edi),%eax
10dc64: 50 push %eax
10dc65: ff d3 call *%ebx
}
}
rtems_libio_unlock();
rtems_set_errno_and_return_minus_one( ENOENT );
}
10dc67: 8b 3f mov (%edi),%edi
10dc69: 83 c4 10 add $0x10,%esp
++table_entry;
}
if ( !stop ) {
rtems_libio_lock();
for (
10dc6c: 81 ff b4 c1 12 00 cmp $0x12c1b4,%edi
10dc72: 75 0d jne 10dc81 <rtems_filesystem_iterate+0x69>
) {
const filesystem_node *fsn = (filesystem_node *) node;
stop = (*routine)( &fsn->entry, routine_arg );
}
rtems_libio_unlock();
10dc74: 88 45 e4 mov %al,-0x1c(%ebp)
10dc77: e8 86 ff ff ff call 10dc02 <rtems_libio_unlock>
10dc7c: 8a 45 e4 mov -0x1c(%ebp),%al
10dc7f: eb 06 jmp 10dc87 <rtems_filesystem_iterate+0x6f>
if ( !stop ) {
rtems_libio_lock();
for (
node = rtems_chain_first( &filesystem_chain );
!rtems_chain_is_tail( &filesystem_chain, node ) && !stop;
10dc81: 84 c0 test %al,%al
10dc83: 74 d9 je 10dc5e <rtems_filesystem_iterate+0x46><== ALWAYS TAKEN
10dc85: eb ed jmp 10dc74 <rtems_filesystem_iterate+0x5c><== NOT EXECUTED
}
rtems_libio_unlock();
}
return stop;
}
10dc87: 8d 65 f4 lea -0xc(%ebp),%esp
10dc8a: 5b pop %ebx
10dc8b: 5e pop %esi
10dc8c: 5f pop %edi
10dc8d: 5d pop %ebp
10dc8e: c3 ret
00107b0a <rtems_filesystem_location_remove_from_mt_entry>:
}
void rtems_filesystem_location_remove_from_mt_entry(
rtems_filesystem_location_info_t *loc
)
{
107b0a: 55 push %ebp
107b0b: 89 e5 mov %esp,%ebp
107b0d: 56 push %esi
107b0e: 53 push %ebx
107b0f: 8b 5d 08 mov 0x8(%ebp),%ebx
rtems_filesystem_mt_entry_declare_lock_context(lock_context);
bool do_unmount;
rtems_filesystem_mt_entry_lock(lock_context);
107b12: 9c pushf
107b13: fa cli
107b14: 5e pop %esi
)
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
107b15: 8b 13 mov (%ebx),%edx
previous = the_node->previous;
107b17: 8b 43 04 mov 0x4(%ebx),%eax
next->previous = previous;
107b1a: 89 42 04 mov %eax,0x4(%edx)
previous->next = next;
107b1d: 89 10 mov %edx,(%eax)
rtems_chain_extract_unprotected(&loc->mt_entry_node);
do_unmount = rtems_filesystem_is_ready_for_unmount(loc->mt_entry);
107b1f: 8b 43 14 mov 0x14(%ebx),%eax
107b22: e8 cd fe ff ff call 1079f4 <rtems_filesystem_is_ready_for_unmount>
rtems_filesystem_mt_entry_unlock(lock_context);
107b27: 56 push %esi
107b28: 9d popf
if (do_unmount) {
107b29: 84 c0 test %al,%al
107b2b: 74 0e je 107b3b <rtems_filesystem_location_remove_from_mt_entry+0x31><== ALWAYS TAKEN
rtems_filesystem_do_unmount(loc->mt_entry);
107b2d: 8b 43 14 mov 0x14(%ebx),%eax <== NOT EXECUTED
107b30: 89 45 08 mov %eax,0x8(%ebp) <== NOT EXECUTED
}
}
107b33: 5b pop %ebx <== NOT EXECUTED
107b34: 5e pop %esi <== NOT EXECUTED
107b35: 5d pop %ebp <== NOT EXECUTED
rtems_chain_extract_unprotected(&loc->mt_entry_node);
do_unmount = rtems_filesystem_is_ready_for_unmount(loc->mt_entry);
rtems_filesystem_mt_entry_unlock(lock_context);
if (do_unmount) {
rtems_filesystem_do_unmount(loc->mt_entry);
107b36: e9 5a ff ff ff jmp 107a95 <rtems_filesystem_do_unmount><== NOT EXECUTED
}
}
107b3b: 5b pop %ebx
107b3c: 5e pop %esi
107b3d: 5d pop %ebp
107b3e: c3 ret
00107cb2 <rtems_filesystem_location_transform_to_global>:
}
rtems_filesystem_global_location_t *rtems_filesystem_location_transform_to_global(
rtems_filesystem_location_info_t *loc
)
{
107cb2: 55 push %ebp
107cb3: 89 e5 mov %esp,%ebp
107cb5: 56 push %esi
107cb6: 53 push %ebx
107cb7: 83 ec 1c sub $0x1c,%esp
107cba: 8b 75 08 mov 0x8(%ebp),%esi
rtems_filesystem_global_location_t *global_loc = malloc(sizeof(*global_loc));
107cbd: 6a 24 push $0x24
107cbf: e8 30 ed ff ff call 1069f4 <malloc>
107cc4: 89 c3 mov %eax,%ebx
if (global_loc != NULL) {
107cc6: 83 c4 10 add $0x10,%esp
107cc9: 85 c0 test %eax,%eax
107ccb: 74 28 je 107cf5 <rtems_filesystem_location_transform_to_global+0x43><== NEVER TAKEN
global_loc->reference_count = 1;
107ccd: c7 40 18 01 00 00 00 movl $0x1,0x18(%eax)
global_loc->deferred_released_next = NULL;
107cd4: c7 40 1c 00 00 00 00 movl $0x0,0x1c(%eax)
global_loc->deferred_released_count = 0;
107cdb: c7 40 20 00 00 00 00 movl $0x0,0x20(%eax)
rtems_filesystem_location_copy(&global_loc->location, loc);
107ce2: 50 push %eax
107ce3: 50 push %eax
107ce4: 56 push %esi
107ce5: 53 push %ebx
107ce6: e8 46 fd ff ff call 107a31 <rtems_filesystem_location_copy>
rtems_filesystem_location_remove_from_mt_entry(loc);
107ceb: 89 34 24 mov %esi,(%esp)
107cee: e8 17 fe ff ff call 107b0a <rtems_filesystem_location_remove_from_mt_entry>
107cf3: eb 28 jmp 107d1d <rtems_filesystem_location_transform_to_global+0x6b>
} else {
rtems_filesystem_location_free(loc);
107cf5: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
107cf8: 56 push %esi <== NOT EXECUTED
107cf9: e8 96 5c 00 00 call 10d994 <rtems_filesystem_location_free><== NOT EXECUTED
);
static inline rtems_filesystem_global_location_t *
rtems_filesystem_global_location_obtain_null(void)
{
rtems_filesystem_global_location_t *global_loc = NULL;
107cfe: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) <== NOT EXECUTED
return rtems_filesystem_global_location_obtain( &global_loc );
107d05: 8d 45 f4 lea -0xc(%ebp),%eax <== NOT EXECUTED
107d08: 89 04 24 mov %eax,(%esp) <== NOT EXECUTED
107d0b: e8 1b ff ff ff call 107c2b <rtems_filesystem_global_location_obtain><== NOT EXECUTED
107d10: 89 c3 mov %eax,%ebx <== NOT EXECUTED
global_loc = rtems_filesystem_global_location_obtain_null();
errno = ENOMEM;
107d12: e8 c5 91 00 00 call 110edc <__errno> <== NOT EXECUTED
107d17: c7 00 0c 00 00 00 movl $0xc,(%eax) <== NOT EXECUTED
107d1d: 83 c4 10 add $0x10,%esp
}
return global_loc;
}
107d20: 89 d8 mov %ebx,%eax
107d22: 8d 65 f8 lea -0x8(%ebp),%esp
107d25: 5b pop %ebx
107d26: 5e pop %esi
107d27: 5d pop %ebp
107d28: c3 ret
00106db8 <rtems_gxx_key_create>:
int rtems_gxx_key_create (__gthread_key_t *key, void (*dtor) (void *))
{
106db8: 55 push %ebp
106db9: 89 e5 mov %esp,%ebp
106dbb: 56 push %esi
106dbc: 53 push %ebx
106dbd: 8b 75 0c mov 0xc(%ebp),%esi
* pointer to the buffer that will hold the value of the key itself.
* We have to to this, because the others functions on this interface
* deal with the value of the key, as used with the POSIX API.
*/
/* Do not pull your hair, trust me this works. :-) */
__gthread_key_t new_key = (__gthread_key_t) malloc( sizeof( *new_key ) );
106dc0: 83 ec 0c sub $0xc,%esp
106dc3: 6a 08 push $0x8
106dc5: e8 82 03 00 00 call 10714c <malloc>
106dca: 89 c3 mov %eax,%ebx
*key = new_key;
106dcc: 8b 45 08 mov 0x8(%ebp),%eax
106dcf: 89 18 mov %ebx,(%eax)
new_key->val = NULL;
106dd1: c7 03 00 00 00 00 movl $0x0,(%ebx)
new_key->dtor = dtor;
106dd7: 89 73 04 mov %esi,0x4(%ebx)
"gxx_wrappers: create key=%x, dtor=%x, new_key=%x\n", key, dtor, new_key
);
#endif
/* register with RTEMS the buffer that will hold the key values */
status = rtems_task_variable_add( RTEMS_SELF, (void **)new_key, dtor );
106dda: 83 c4 0c add $0xc,%esp
106ddd: 56 push %esi
106dde: 53 push %ebx
106ddf: 6a 00 push $0x0
106de1: e8 3a 3c 00 00 call 10aa20 <rtems_task_variable_add>
if ( status == RTEMS_SUCCESSFUL )
106de6: 83 c4 10 add $0x10,%esp
return 0;
106de9: 31 d2 xor %edx,%edx
);
#endif
/* register with RTEMS the buffer that will hold the key values */
status = rtems_task_variable_add( RTEMS_SELF, (void **)new_key, dtor );
if ( status == RTEMS_SUCCESSFUL )
106deb: 85 c0 test %eax,%eax
106ded: 74 0f je 106dfe <rtems_gxx_key_create+0x46><== ALWAYS TAKEN
return 0;
free( new_key );
106def: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
106df2: 53 push %ebx <== NOT EXECUTED
106df3: e8 5c fe ff ff call 106c54 <free> <== NOT EXECUTED
return -1;
106df8: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
106dfb: 83 ca ff or $0xffffffff,%edx <== NOT EXECUTED
}
106dfe: 89 d0 mov %edx,%eax
106e00: 8d 65 f8 lea -0x8(%ebp),%esp
106e03: 5b pop %ebx
106e04: 5e pop %esi
106e05: 5d pop %ebp
106e06: c3 ret
00106e17 <rtems_gxx_key_delete>:
int rtems_gxx_key_delete (__gthread_key_t key)
{
106e17: 55 push %ebp
106e18: 89 e5 mov %esp,%ebp
106e1a: 53 push %ebx
106e1b: 83 ec 0c sub $0xc,%esp
106e1e: 8b 5d 08 mov 0x8(%ebp),%ebx
#ifdef DEBUG_GXX_WRAPPERS
printk( "gxx_wrappers: delete key=%x\n", key );
#endif
/* register with RTEMS the buffer that will hold the key values */
status = rtems_task_variable_delete( RTEMS_SELF, (void **)key );
106e21: 53 push %ebx
106e22: 6a 00 push $0x0
106e24: e8 8f 3c 00 00 call 10aab8 <rtems_task_variable_delete>
if ( status == RTEMS_SUCCESSFUL ) {
106e29: 83 c4 10 add $0x10,%esp
106e2c: 85 c0 test %eax,%eax
106e2e: 75 11 jne 106e41 <rtems_gxx_key_delete+0x2a><== NEVER TAKEN
/* Hmm - hopefully all tasks using this key have gone away... */
if ( key ) free( *(void **)key );
106e30: 85 db test %ebx,%ebx
106e32: 74 0d je 106e41 <rtems_gxx_key_delete+0x2a><== NEVER TAKEN
106e34: 83 ec 0c sub $0xc,%esp
106e37: ff 33 pushl (%ebx)
106e39: e8 16 fe ff ff call 106c54 <free>
106e3e: 83 c4 10 add $0x10,%esp
return 0;
}
key = NULL;
return 0;
}
106e41: 31 c0 xor %eax,%eax
106e43: 8b 5d fc mov -0x4(%ebp),%ebx
106e46: c9 leave
106e47: c3 ret
00106d60 <rtems_gxx_once>:
/* uncomment this if you need to debug this interface */
/*#define DEBUG_GXX_WRAPPERS 1*/
int rtems_gxx_once(__gthread_once_t *once, void (*func) (void))
{
106d60: 55 push %ebp
106d61: 89 e5 mov %esp,%ebp
106d63: 57 push %edi
106d64: 56 push %esi
106d65: 53 push %ebx
106d66: 83 ec 1c sub $0x1c,%esp
106d69: 8b 5d 08 mov 0x8(%ebp),%ebx
#ifdef DEBUG_GXX_WRAPPERS
printk( "gxx_wrappers: once=%x, func=%x\n", *once, func );
#endif
if ( *(volatile __gthread_once_t *)once == 0 ) {
106d6c: 8b 03 mov (%ebx),%eax
106d6e: 85 c0 test %eax,%eax
106d70: 75 3c jne 106dae <rtems_gxx_once+0x4e>
rtems_mode saveMode;
__gthread_once_t o;
rtems_task_mode(RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &saveMode);
106d72: 52 push %edx
106d73: 8d 7d e4 lea -0x1c(%ebp),%edi
106d76: 57 push %edi
106d77: 68 00 01 00 00 push $0x100
106d7c: 68 00 01 00 00 push $0x100
106d81: e8 16 3b 00 00 call 10a89c <rtems_task_mode>
if ( (o = *(volatile __gthread_once_t *)once) == 0 ) {
106d86: 8b 33 mov (%ebx),%esi
106d88: 83 c4 10 add $0x10,%esp
106d8b: 85 f6 test %esi,%esi
106d8d: 75 06 jne 106d95 <rtems_gxx_once+0x35> <== NEVER TAKEN
*(volatile __gthread_once_t *)once = 1;
106d8f: c7 03 01 00 00 00 movl $0x1,(%ebx)
}
rtems_task_mode(saveMode, RTEMS_PREEMPT_MASK, &saveMode);
106d95: 50 push %eax
106d96: 57 push %edi
106d97: 68 00 01 00 00 push $0x100
106d9c: ff 75 e4 pushl -0x1c(%ebp)
106d9f: e8 f8 3a 00 00 call 10a89c <rtems_task_mode>
if ( o == 0 )
106da4: 83 c4 10 add $0x10,%esp
106da7: 85 f6 test %esi,%esi
106da9: 75 03 jne 106dae <rtems_gxx_once+0x4e> <== NEVER TAKEN
(*func)();
106dab: ff 55 0c call *0xc(%ebp)
}
return 0;
}
106dae: 31 c0 xor %eax,%eax
106db0: 8d 65 f4 lea -0xc(%ebp),%esp
106db3: 5b pop %ebx
106db4: 5e pop %esi
106db5: 5f pop %edi
106db6: 5d pop %ebp
106db7: c3 ret
00106ea0 <rtems_gxx_setspecific>:
int rtems_gxx_setspecific(__gthread_key_t key, const void *ptr)
{
106ea0: 55 push %ebp
106ea1: 89 e5 mov %esp,%ebp
106ea3: 53 push %ebx
106ea4: 83 ec 08 sub $0x8,%esp
106ea7: 8b 5d 08 mov 0x8(%ebp),%ebx
rtems_task_self()
);
#endif
/* register with RTEMS the buffer that will hold the key values */
status = rtems_task_variable_add( RTEMS_SELF, (void **)key, key->dtor );
106eaa: ff 73 04 pushl 0x4(%ebx)
106ead: 53 push %ebx
106eae: 6a 00 push $0x0
106eb0: e8 6b 3b 00 00 call 10aa20 <rtems_task_variable_add>
if ( status == RTEMS_SUCCESSFUL ) {
106eb5: 83 c4 10 add $0x10,%esp
106eb8: 85 c0 test %eax,%eax
106eba: 75 09 jne 106ec5 <rtems_gxx_setspecific+0x25><== NEVER TAKEN
/* now let's set the proper value */
key->val = (void *)ptr;
106ebc: 8b 45 0c mov 0xc(%ebp),%eax
106ebf: 89 03 mov %eax,(%ebx)
return 0;
106ec1: 31 c0 xor %eax,%eax
106ec3: eb 03 jmp 106ec8 <rtems_gxx_setspecific+0x28>
}
return -1;
106ec5: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
}
106ec8: 8b 5d fc mov -0x4(%ebp),%ebx
106ecb: c9 leave
106ecc: c3 ret
00109ad0 <rtems_heap_allocate_aligned_with_boundary>:
void *rtems_heap_allocate_aligned_with_boundary(
size_t size,
uintptr_t alignment,
uintptr_t boundary
)
{
109ad0: 55 push %ebp
109ad1: 89 e5 mov %esp,%ebp
109ad3: 83 ec 08 sub $0x8,%esp
if (
109ad6: 83 3d f0 3d 13 00 03 cmpl $0x3,0x133df0
109add: 74 1e je 109afd <rtems_heap_allocate_aligned_with_boundary+0x2d><== ALWAYS TAKEN
&& !malloc_is_system_state_OK()
) {
return NULL;
}
malloc_deferred_frees_process();
109adf: e8 97 f1 ff ff call 108c7b <malloc_deferred_frees_process>
/* FIXME: Statistics, boundary checks */
return _Protected_heap_Allocate_aligned_with_boundary(
109ae4: ff 75 10 pushl 0x10(%ebp)
109ae7: ff 75 0c pushl 0xc(%ebp)
109aea: ff 75 08 pushl 0x8(%ebp)
109aed: ff 35 30 f2 12 00 pushl 0x12f230
109af3: e8 34 4a 00 00 call 10e52c <_Protected_heap_Allocate_aligned_with_boundary>
109af8: 83 c4 10 add $0x10,%esp
109afb: eb 0b jmp 109b08 <rtems_heap_allocate_aligned_with_boundary+0x38>
uintptr_t boundary
)
{
if (
_System_state_Is_up( _System_state_Get() )
&& !malloc_is_system_state_OK()
109afd: e8 3a f1 ff ff call 108c3c <malloc_is_system_state_OK>
109b02: 84 c0 test %al,%al
109b04: 75 d9 jne 109adf <rtems_heap_allocate_aligned_with_boundary+0xf>
) {
return NULL;
109b06: 31 c0 xor %eax,%eax
RTEMS_Malloc_Heap,
size,
alignment,
boundary
);
}
109b08: c9 leave
109b09: c3 ret
00107b05 <rtems_ide_part_table_free>:
* RETURNS:
* N/A
*/
void
rtems_ide_part_table_free(rtems_disk_desc_t *disk_desc)
{
107b05: 55 push %ebp <== NOT EXECUTED
107b06: 89 e5 mov %esp,%ebp <== NOT EXECUTED
partition_table_free( disk_desc );
107b08: 8b 45 08 mov 0x8(%ebp),%eax <== NOT EXECUTED
}
107b0b: 5d pop %ebp <== NOT EXECUTED
* N/A
*/
void
rtems_ide_part_table_free(rtems_disk_desc_t *disk_desc)
{
partition_table_free( disk_desc );
107b0c: e9 c0 fb ff ff jmp 1076d1 <partition_table_free> <== NOT EXECUTED
00107b11 <rtems_ide_part_table_get>:
* RTEMS_SUCCESSFUL if success,
* RTEMS_INTERNAL_ERROR otherwise
*/
rtems_status_code
rtems_ide_part_table_get(const char *dev_name, rtems_disk_desc_t *disk_desc)
{
107b11: 55 push %ebp <== NOT EXECUTED
107b12: 89 e5 mov %esp,%ebp <== NOT EXECUTED
return partition_table_get( dev_name, disk_desc );
107b14: 8b 55 0c mov 0xc(%ebp),%edx <== NOT EXECUTED
107b17: 8b 45 08 mov 0x8(%ebp),%eax <== NOT EXECUTED
}
107b1a: 5d pop %ebp <== NOT EXECUTED
* RTEMS_INTERNAL_ERROR otherwise
*/
rtems_status_code
rtems_ide_part_table_get(const char *dev_name, rtems_disk_desc_t *disk_desc)
{
return partition_table_get( dev_name, disk_desc );
107b1b: e9 1e fe ff ff jmp 10793e <partition_table_get> <== NOT EXECUTED
00107b20 <rtems_ide_part_table_initialize>:
* RTEMS_NO_MEMOTY if cannot have not enough memory,
* RTEMS_INTERNAL_ERROR if other error occurs.
*/
rtems_status_code
rtems_ide_part_table_initialize(const char *dev_name)
{
107b20: 55 push %ebp
107b21: 89 e5 mov %esp,%ebp
107b23: 57 push %edi
107b24: 56 push %esi
107b25: 53 push %ebx
107b26: 83 ec 34 sub $0x34,%esp
rtems_part_desc_t *part_desc;
/* logical device name /dev/hdxyy */
char name[RTEMS_IDE_PARTITION_DEV_NAME_LENGTH_MAX];
disk_desc = (rtems_disk_desc_t *) calloc(1, sizeof(rtems_disk_desc_t));
107b29: 68 24 01 00 00 push $0x124
107b2e: 6a 01 push $0x1
107b30: e8 87 06 00 00 call 1081bc <calloc>
107b35: 89 c3 mov %eax,%ebx
if (disk_desc == NULL)
107b37: 83 c4 10 add $0x10,%esp
{
return RTEMS_NO_MEMORY;
107b3a: c7 45 d4 1a 00 00 00 movl $0x1a,-0x2c(%ebp)
/* logical device name /dev/hdxyy */
char name[RTEMS_IDE_PARTITION_DEV_NAME_LENGTH_MAX];
disk_desc = (rtems_disk_desc_t *) calloc(1, sizeof(rtems_disk_desc_t));
if (disk_desc == NULL)
107b41: 85 c0 test %eax,%eax
107b43: 0f 84 95 00 00 00 je 107bde <rtems_ide_part_table_initialize+0xbe><== NEVER TAKEN
{
return RTEMS_NO_MEMORY;
}
/* get partition table */
rc = partition_table_get(dev_name, disk_desc);
107b49: 89 c2 mov %eax,%edx
107b4b: 8b 45 08 mov 0x8(%ebp),%eax
107b4e: e8 eb fd ff ff call 10793e <partition_table_get>
107b53: 89 45 d4 mov %eax,-0x2c(%ebp)
if (rc != RTEMS_SUCCESSFUL)
107b56: 85 c0 test %eax,%eax
107b58: 74 0e je 107b68 <rtems_ide_part_table_initialize+0x48><== ALWAYS TAKEN
{
free(disk_desc);
107b5a: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
107b5d: 53 push %ebx <== NOT EXECUTED
107b5e: e8 c5 08 00 00 call 108428 <free> <== NOT EXECUTED
107b63: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
107b66: eb 76 jmp 107bde <rtems_ide_part_table_initialize+0xbe><== NOT EXECUTED
107b68: 8b 03 mov (%ebx),%eax
107b6a: 89 45 d0 mov %eax,-0x30(%ebp)
dev_t device
)
{
union __rtems_dev_t temp;
temp.device = device;
107b6d: 8b 43 04 mov 0x4(%ebx),%eax
107b70: 89 45 cc mov %eax,-0x34(%ebp)
*/
rtems_filesystem_split_dev_t (disk_desc->dev, major, minor);
/* create logical disks on the physical one */
for (part_num = 0; part_num < disk_desc->last_log_id; part_num++)
107b73: 31 f6 xor %esi,%esi
{
sprintf(name, "%s%d", dev_name, part_num + 1);
107b75: 8d 7d d8 lea -0x28(%ebp),%edi
*/
rtems_filesystem_split_dev_t (disk_desc->dev, major, minor);
/* create logical disks on the physical one */
for (part_num = 0; part_num < disk_desc->last_log_id; part_num++)
107b78: eb 58 jmp 107bd2 <rtems_ide_part_table_initialize+0xb2>
{
sprintf(name, "%s%d", dev_name, part_num + 1);
107b7a: 46 inc %esi
107b7b: 56 push %esi
107b7c: ff 75 08 pushl 0x8(%ebp)
107b7f: 68 60 38 12 00 push $0x123860
107b84: 57 push %edi
107b85: e8 ce e3 00 00 call 115f58 <sprintf>
{
union __rtems_dev_t temp;
temp.__overlay.major = _major;
temp.__overlay.minor = _minor;
return temp.device;
107b8a: 8b 55 d0 mov -0x30(%ebp),%edx
107b8d: 8b 45 cc mov -0x34(%ebp),%eax
107b90: 8d 0c 06 lea (%esi,%eax,1),%ecx
dev = rtems_filesystem_make_dev_t(major, ++minor);
part_desc = disk_desc->partitions[part_num];
107b93: 8b 44 b3 24 mov 0x24(%ebx,%esi,4),%eax
if (part_desc == NULL)
107b97: 83 c4 10 add $0x10,%esp
107b9a: 85 c0 test %eax,%eax
107b9c: 74 34 je 107bd2 <rtems_ide_part_table_initialize+0xb2>
{
continue;
}
rc = rtems_disk_create_log(dev, disk_desc->dev, part_desc->start,
107b9e: 83 ec 04 sub $0x4,%esp
107ba1: 57 push %edi
107ba2: ff 70 08 pushl 0x8(%eax)
107ba5: ff 70 04 pushl 0x4(%eax)
107ba8: ff 73 04 pushl 0x4(%ebx)
107bab: ff 33 pushl (%ebx)
107bad: 51 push %ecx
107bae: 52 push %edx
107baf: e8 0b f7 ff ff call 1072bf <rtems_disk_create_log>
part_desc->size, name);
if (rc != RTEMS_SUCCESSFUL)
107bb4: 83 c4 20 add $0x20,%esp
107bb7: 85 c0 test %eax,%eax
107bb9: 74 17 je 107bd2 <rtems_ide_part_table_initialize+0xb2><== ALWAYS TAKEN
{
fprintf(stdout,"Cannot create device %s, error code %d\n", name, rc);
107bbb: 50 push %eax <== NOT EXECUTED
107bbc: 57 push %edi <== NOT EXECUTED
107bbd: 68 65 38 12 00 push $0x123865 <== NOT EXECUTED
107bc2: a1 c0 12 13 00 mov 0x1312c0,%eax <== NOT EXECUTED
107bc7: ff 70 08 pushl 0x8(%eax) <== NOT EXECUTED
107bca: e8 c5 dc 00 00 call 115894 <fprintf> <== NOT EXECUTED
continue;
107bcf: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
*/
rtems_filesystem_split_dev_t (disk_desc->dev, major, minor);
/* create logical disks on the physical one */
for (part_num = 0; part_num < disk_desc->last_log_id; part_num++)
107bd2: 3b 73 24 cmp 0x24(%ebx),%esi
107bd5: 7c a3 jl 107b7a <rtems_ide_part_table_initialize+0x5a>
fprintf(stdout,"Cannot create device %s, error code %d\n", name, rc);
continue;
}
}
partition_table_free(disk_desc);
107bd7: 89 d8 mov %ebx,%eax
107bd9: e8 f3 fa ff ff call 1076d1 <partition_table_free>
return RTEMS_SUCCESSFUL;
}
107bde: 8b 45 d4 mov -0x2c(%ebp),%eax
107be1: 8d 65 f4 lea -0xc(%ebp),%esp
107be4: 5b pop %ebx
107be5: 5e pop %esi
107be6: 5f pop %edi
107be7: 5d pop %ebp
107be8: c3 ret
0010c020 <rtems_iterate_over_all_threads>:
#include <rtems/system.h>
#include <rtems/score/thread.h>
void rtems_iterate_over_all_threads(rtems_per_thread_routine routine)
{
10c020: 55 push %ebp
10c021: 89 e5 mov %esp,%ebp
10c023: 57 push %edi
10c024: 56 push %esi
10c025: 53 push %ebx
10c026: 83 ec 0c sub $0xc,%esp
uint32_t i;
uint32_t api_index;
Thread_Control *the_thread;
Objects_Information *information;
if ( !routine )
10c029: bb 01 00 00 00 mov $0x1,%ebx
10c02e: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
10c032: 74 3a je 10c06e <rtems_iterate_over_all_threads+0x4e>
#if !defined(RTEMS_POSIX_API) || defined(RTEMS_DEBUG)
if ( !_Objects_Information_table[ api_index ] )
continue;
#endif
information = _Objects_Information_table[ api_index ][ 1 ];
10c034: 8b 04 9d 3c 0e 13 00 mov 0x130e3c(,%ebx,4),%eax
10c03b: 8b 78 04 mov 0x4(%eax),%edi
if ( !information )
10c03e: be 01 00 00 00 mov $0x1,%esi
10c043: 85 ff test %edi,%edi
10c045: 75 1d jne 10c064 <rtems_iterate_over_all_threads+0x44>
Objects_Information *information;
if ( !routine )
return;
for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; api_index++ ) {
10c047: 43 inc %ebx
10c048: 83 fb 04 cmp $0x4,%ebx
10c04b: eb e5 jmp 10c032 <rtems_iterate_over_all_threads+0x12>
information = _Objects_Information_table[ api_index ][ 1 ];
if ( !information )
continue;
for ( i=1 ; i <= information->maximum ; i++ ) {
the_thread = (Thread_Control *)information->local_table[ i ];
10c04d: 8b 57 1c mov 0x1c(%edi),%edx
10c050: 8b 14 b2 mov (%edx,%esi,4),%edx
if ( !the_thread )
10c053: 85 d2 test %edx,%edx
10c055: 74 0c je 10c063 <rtems_iterate_over_all_threads+0x43><== NEVER TAKEN
continue;
(*routine)(the_thread);
10c057: 83 ec 0c sub $0xc,%esp
10c05a: 52 push %edx
10c05b: 8b 45 08 mov 0x8(%ebp),%eax
10c05e: ff d0 call *%eax
10c060: 83 c4 10 add $0x10,%esp
information = _Objects_Information_table[ api_index ][ 1 ];
if ( !information )
continue;
for ( i=1 ; i <= information->maximum ; i++ ) {
10c063: 46 inc %esi
10c064: 0f b7 57 10 movzwl 0x10(%edi),%edx
10c068: 39 d6 cmp %edx,%esi
10c06a: 76 e1 jbe 10c04d <rtems_iterate_over_all_threads+0x2d>
10c06c: eb d9 jmp 10c047 <rtems_iterate_over_all_threads+0x27>
(*routine)(the_thread);
}
}
}
10c06e: 8d 65 f4 lea -0xc(%ebp),%esp
10c071: 5b pop %ebx
10c072: 5e pop %esi
10c073: 5f pop %edi
10c074: 5d pop %ebp
10c075: c3 ret
00106840 <rtems_libio_init>:
*
* Called by BSP startup code to initialize the libio subsystem.
*/
void rtems_libio_init( void )
{
106840: 55 push %ebp
106841: 89 e5 mov %esp,%ebp
106843: 53 push %ebx
106844: 52 push %edx
rtems_status_code rc;
uint32_t i;
rtems_libio_t *iop;
if (rtems_libio_number_iops > 0)
106845: 8b 1d 70 a2 12 00 mov 0x12a270,%ebx
10684b: 85 db test %ebx,%ebx
10684d: 74 3e je 10688d <rtems_libio_init+0x4d> <== NEVER TAKEN
{
rtems_libio_iops = (rtems_libio_t *) calloc(rtems_libio_number_iops,
10684f: 50 push %eax
106850: 50 push %eax
106851: 6a 30 push $0x30
106853: 53 push %ebx
106854: e8 d3 fc ff ff call 10652c <calloc>
106859: a3 d0 e2 12 00 mov %eax,0x12e2d0
sizeof(rtems_libio_t));
if (rtems_libio_iops == NULL)
10685e: 83 c4 10 add $0x10,%esp
106861: 85 c0 test %eax,%eax
106863: 75 07 jne 10686c <rtems_libio_init+0x2c>
rtems_fatal_error_occurred(RTEMS_NO_MEMORY);
106865: 83 ec 0c sub $0xc,%esp
106868: 6a 1a push $0x1a
10686a: eb 44 jmp 1068b0 <rtems_libio_init+0x70>
iop = rtems_libio_iop_freelist = rtems_libio_iops;
10686c: a3 d4 e2 12 00 mov %eax,0x12e2d4
for (i = 0 ; (i + 1) < rtems_libio_number_iops ; i++, iop++)
106871: 89 c1 mov %eax,%ecx
106873: 31 d2 xor %edx,%edx
106875: eb 06 jmp 10687d <rtems_libio_init+0x3d>
iop->data1 = iop + 1;
106877: 83 c1 30 add $0x30,%ecx
10687a: 89 49 fc mov %ecx,-0x4(%ecx)
sizeof(rtems_libio_t));
if (rtems_libio_iops == NULL)
rtems_fatal_error_occurred(RTEMS_NO_MEMORY);
iop = rtems_libio_iop_freelist = rtems_libio_iops;
for (i = 0 ; (i + 1) < rtems_libio_number_iops ; i++, iop++)
10687d: 42 inc %edx
10687e: 39 da cmp %ebx,%edx
106880: 75 f5 jne 106877 <rtems_libio_init+0x37>
iop->data1 = iop + 1;
iop->data1 = NULL;
106882: 6b d2 30 imul $0x30,%edx,%edx
106885: c7 44 10 fc 00 00 00 movl $0x0,-0x4(%eax,%edx,1)
10688c: 00
/*
* Create the binary semaphore used to provide mutual exclusion
* on the IOP Table.
*/
rc = rtems_semaphore_create(
10688d: 83 ec 0c sub $0xc,%esp
106890: 68 d8 e2 12 00 push $0x12e2d8
106895: 6a 00 push $0x0
106897: 6a 54 push $0x54
106899: 6a 01 push $0x1
10689b: 68 4f 49 42 4c push $0x4c42494f
1068a0: e8 bb 32 00 00 call 109b60 <rtems_semaphore_create>
1,
RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY,
RTEMS_NO_PRIORITY,
&rtems_libio_semaphore
);
if ( rc != RTEMS_SUCCESSFUL )
1068a5: 83 c4 20 add $0x20,%esp
1068a8: 85 c0 test %eax,%eax
1068aa: 74 09 je 1068b5 <rtems_libio_init+0x75> <== ALWAYS TAKEN
rtems_fatal_error_occurred( rc );
1068ac: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1068af: 50 push %eax <== NOT EXECUTED
1068b0: e8 ff 3a 00 00 call 10a3b4 <rtems_fatal_error_occurred>
/*
* Initialize the base file system infrastructure.
*/
if (rtems_fs_init_helper)
1068b5: a1 74 a2 12 00 mov 0x12a274,%eax
1068ba: 85 c0 test %eax,%eax
1068bc: 74 06 je 1068c4 <rtems_libio_init+0x84>
(* rtems_fs_init_helper)();
}
1068be: 8b 5d fc mov -0x4(%ebp),%ebx
1068c1: c9 leave
/*
* Initialize the base file system infrastructure.
*/
if (rtems_fs_init_helper)
(* rtems_fs_init_helper)();
1068c2: ff e0 jmp *%eax
}
1068c4: 8b 5d fc mov -0x4(%ebp),%ebx
1068c7: c9 leave
1068c8: c3 ret
00105207 <rtems_libio_set_private_env>:
}
rtems_status_code rtems_libio_set_private_env(void)
{
105207: 55 push %ebp
105208: 89 e5 mov %esp,%ebp
10520a: 57 push %edi
10520b: 56 push %esi
10520c: 53 push %ebx
10520d: 83 ec 1c sub $0x1c,%esp
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_id self_task_id = rtems_task_self();
105210: e8 fb 14 00 00 call 106710 <rtems_task_self>
105215: 89 c2 mov %eax,%edx
rtems_user_env_t *old_env = rtems_current_user_env;
105217: a1 5c 7b 12 00 mov 0x127b5c,%eax
10521c: 89 45 e4 mov %eax,-0x1c(%ebp)
bool uses_global_env = old_env == &rtems_global_user_env;
bool uses_shared_env = old_env->task_id != self_task_id;
if (uses_global_env || uses_shared_env) {
10521f: 39 50 24 cmp %edx,0x24(%eax)
105222: 75 0d jne 105231 <rtems_libio_set_private_env+0x2a>
_Thread_Enable_dispatch();
}
rtems_status_code rtems_libio_set_private_env(void)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
105224: 31 f6 xor %esi,%esi
rtems_id self_task_id = rtems_task_self();
rtems_user_env_t *old_env = rtems_current_user_env;
bool uses_global_env = old_env == &rtems_global_user_env;
bool uses_shared_env = old_env->task_id != self_task_id;
if (uses_global_env || uses_shared_env) {
105226: 3d 60 7b 12 00 cmp $0x127b60,%eax
10522b: 0f 85 b1 00 00 00 jne 1052e2 <rtems_libio_set_private_env+0xdb><== ALWAYS TAKEN
rtems_user_env_t *new_env = calloc(1, sizeof(*new_env));
105231: 57 push %edi
105232: 57 push %edi
105233: 6a 2c push $0x2c
105235: 6a 01 push $0x1
105237: 89 55 e0 mov %edx,-0x20(%ebp)
10523a: e8 61 41 00 00 call 1093a0 <calloc>
10523f: 89 c3 mov %eax,%ebx
if (new_env != NULL) {
105241: 83 c4 10 add $0x10,%esp
if (sc != RTEMS_SUCCESSFUL) {
free_user_env(new_env);
}
} else {
sc = RTEMS_NO_MEMORY;
105244: be 1a 00 00 00 mov $0x1a,%esi
bool uses_shared_env = old_env->task_id != self_task_id;
if (uses_global_env || uses_shared_env) {
rtems_user_env_t *new_env = calloc(1, sizeof(*new_env));
if (new_env != NULL) {
105249: 85 c0 test %eax,%eax
10524b: 8b 55 e0 mov -0x20(%ebp),%edx
10524e: 0f 84 8e 00 00 00 je 1052e2 <rtems_libio_set_private_env+0xdb>
*new_env = *old_env;
105254: b9 0b 00 00 00 mov $0xb,%ecx
105259: 89 c7 mov %eax,%edi
10525b: 8b 75 e4 mov -0x1c(%ebp),%esi
10525e: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
new_env->reference_count = 1;
105260: c7 40 28 01 00 00 00 movl $0x1,0x28(%eax)
new_env->task_id = self_task_id;
105267: 89 50 24 mov %edx,0x24(%eax)
new_env->root_directory =
rtems_filesystem_global_location_obtain(&old_env->root_directory);
10526a: 83 ec 0c sub $0xc,%esp
10526d: 8b 45 e4 mov -0x1c(%ebp),%eax
105270: 83 c0 04 add $0x4,%eax
105273: 50 push %eax
105274: e8 aa 09 00 00 call 105c23 <rtems_filesystem_global_location_obtain>
if (new_env != NULL) {
*new_env = *old_env;
new_env->reference_count = 1;
new_env->task_id = self_task_id;
new_env->root_directory =
105279: 89 43 04 mov %eax,0x4(%ebx)
rtems_filesystem_global_location_obtain(&old_env->root_directory);
new_env->current_directory =
rtems_filesystem_global_location_obtain(&old_env->current_directory);
10527c: 5e pop %esi
10527d: ff 75 e4 pushl -0x1c(%ebp)
105280: e8 9e 09 00 00 call 105c23 <rtems_filesystem_global_location_obtain>
*new_env = *old_env;
new_env->reference_count = 1;
new_env->task_id = self_task_id;
new_env->root_directory =
rtems_filesystem_global_location_obtain(&old_env->root_directory);
new_env->current_directory =
105285: 89 03 mov %eax,(%ebx)
rtems_fatal_error_occurred(0xdeadbeef);
}
rtems_current_user_env = &rtems_global_user_env;
}
}
105287: 8b 53 04 mov 0x4(%ebx),%edx
new_env->root_directory =
rtems_filesystem_global_location_obtain(&old_env->root_directory);
new_env->current_directory =
rtems_filesystem_global_location_obtain(&old_env->current_directory);
if (
10528a: 83 c4 10 add $0x10,%esp
10528d: 81 7a 10 24 d6 11 00 cmpl $0x11d624,0x10(%edx)
105294: 74 34 je 1052ca <rtems_libio_set_private_env+0xc3>
!rtems_filesystem_global_location_is_null(new_env->root_directory)
&& !rtems_filesystem_global_location_is_null(new_env->current_directory)
105296: 81 78 10 24 d6 11 00 cmpl $0x11d624,0x10(%eax)
10529d: 74 2b je 1052ca <rtems_libio_set_private_env+0xc3><== NEVER TAKEN
) {
sc = rtems_task_variable_add(
10529f: 51 push %ecx
1052a0: 68 9c 51 10 00 push $0x10519c
1052a5: 68 5c 7b 12 00 push $0x127b5c
1052aa: 6a 00 push $0x0
1052ac: e8 d3 14 00 00 call 106784 <rtems_task_variable_add>
1052b1: 89 c6 mov %eax,%esi
RTEMS_SELF,
(void **) &rtems_current_user_env,
free_user_env
);
if (sc == RTEMS_SUCCESSFUL) {
1052b3: 83 c4 10 add $0x10,%esp
1052b6: 85 c0 test %eax,%eax
1052b8: 75 17 jne 1052d1 <rtems_libio_set_private_env+0xca>
free_user_env_protected(old_env);
1052ba: 8b 45 e4 mov -0x1c(%ebp),%eax
1052bd: e8 1d ff ff ff call 1051df <free_user_env_protected>
rtems_current_user_env = new_env;
1052c2: 89 1d 5c 7b 12 00 mov %ebx,0x127b5c
1052c8: eb 18 jmp 1052e2 <rtems_libio_set_private_env+0xdb>
} else {
sc = RTEMS_TOO_MANY;
}
} else {
sc = RTEMS_UNSATISFIED;
1052ca: be 0d 00 00 00 mov $0xd,%esi
1052cf: eb 05 jmp 1052d6 <rtems_libio_set_private_env+0xcf>
);
if (sc == RTEMS_SUCCESSFUL) {
free_user_env_protected(old_env);
rtems_current_user_env = new_env;
} else {
sc = RTEMS_TOO_MANY;
1052d1: be 05 00 00 00 mov $0x5,%esi
} else {
sc = RTEMS_UNSATISFIED;
}
if (sc != RTEMS_SUCCESSFUL) {
free_user_env(new_env);
1052d6: 83 ec 0c sub $0xc,%esp
1052d9: 53 push %ebx
1052da: e8 bd fe ff ff call 10519c <free_user_env>
1052df: 83 c4 10 add $0x10,%esp
sc = RTEMS_NO_MEMORY;
}
}
return sc;
}
1052e2: 89 f0 mov %esi,%eax
1052e4: 8d 65 f4 lea -0xc(%ebp),%esp
1052e7: 5b pop %ebx
1052e8: 5e pop %esi
1052e9: 5f pop %edi
1052ea: 5d pop %ebp
1052eb: c3 ret
001052ec <rtems_libio_share_private_env>:
rtems_status_code rtems_libio_share_private_env(rtems_id task_id)
{
1052ec: 55 push %ebp
1052ed: 89 e5 mov %esp,%ebp
1052ef: 53 push %ebx
1052f0: 83 ec 14 sub $0x14,%esp
1052f3: 8b 5d 08 mov 0x8(%ebp),%ebx
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_id self_task_id = rtems_task_self();
1052f6: e8 15 14 00 00 call 106710 <rtems_task_self>
if (task_id != RTEMS_SELF && self_task_id != task_id) {
1052fb: 39 d8 cmp %ebx,%eax
1052fd: 0f 84 81 00 00 00 je 105384 <rtems_libio_share_private_env+0x98>
105303: 85 db test %ebx,%ebx
105305: 74 7d je 105384 <rtems_libio_share_private_env+0x98>
*
* This rountine increments the thread dispatch level
*/
RTEMS_INLINE_ROUTINE uint32_t _Thread_Dispatch_increment_disable_level(void)
{
_Thread_Dispatch_disable_level++;
105307: a1 fc b2 12 00 mov 0x12b2fc,%eax
10530c: 40 inc %eax
10530d: a3 fc b2 12 00 mov %eax,0x12b2fc
return _Thread_Dispatch_disable_level;
105312: a1 fc b2 12 00 mov 0x12b2fc,%eax
/*
* We have to disable the thread dispatching to prevent deletion of the
* environment in the meantime.
*/
_Thread_Disable_dispatch();
sc = rtems_task_variable_get(
105317: 50 push %eax
task_id,
(void *) &rtems_current_user_env,
(void *) &env
105318: 8d 45 f4 lea -0xc(%ebp),%eax
/*
* We have to disable the thread dispatching to prevent deletion of the
* environment in the meantime.
*/
_Thread_Disable_dispatch();
sc = rtems_task_variable_get(
10531b: 50 push %eax
10531c: 68 5c 7b 12 00 push $0x127b5c
105321: 53 push %ebx
105322: e8 71 15 00 00 call 106898 <rtems_task_variable_get>
105327: 89 c3 mov %eax,%ebx
task_id,
(void *) &rtems_current_user_env,
(void *) &env
);
if (sc == RTEMS_SUCCESSFUL) {
105329: 83 c4 10 add $0x10,%esp
10532c: 85 c0 test %eax,%eax
10532e: 75 08 jne 105338 <rtems_libio_share_private_env+0x4c>
++env->reference_count;
105330: 8b 45 f4 mov -0xc(%ebp),%eax
105333: ff 40 28 incl 0x28(%eax)
105336: eb 05 jmp 10533d <rtems_libio_share_private_env+0x51>
} else {
sc = RTEMS_UNSATISFIED;
105338: bb 0d 00 00 00 mov $0xd,%ebx
}
_Thread_Enable_dispatch();
10533d: e8 8a 2e 00 00 call 1081cc <_Thread_Enable_dispatch>
if (sc == RTEMS_SUCCESSFUL) {
105342: 85 db test %ebx,%ebx
105344: 75 40 jne 105386 <rtems_libio_share_private_env+0x9a>
sc = rtems_task_variable_add(
105346: 50 push %eax
105347: 68 9c 51 10 00 push $0x10519c
10534c: 68 5c 7b 12 00 push $0x127b5c
105351: 6a 00 push $0x0
105353: e8 2c 14 00 00 call 106784 <rtems_task_variable_add>
105358: 89 c3 mov %eax,%ebx
RTEMS_SELF,
(void **) &rtems_current_user_env,
free_user_env
);
if (sc == RTEMS_SUCCESSFUL) {
10535a: 83 c4 10 add $0x10,%esp
10535d: 85 c0 test %eax,%eax
10535f: 75 14 jne 105375 <rtems_libio_share_private_env+0x89><== NEVER TAKEN
free_user_env_protected(rtems_current_user_env);
105361: a1 5c 7b 12 00 mov 0x127b5c,%eax
105366: e8 74 fe ff ff call 1051df <free_user_env_protected>
rtems_current_user_env = env;
10536b: 8b 45 f4 mov -0xc(%ebp),%eax
10536e: a3 5c 7b 12 00 mov %eax,0x127b5c
105373: eb 11 jmp 105386 <rtems_libio_share_private_env+0x9a>
} else {
free_user_env_protected(env);
105375: 8b 45 f4 mov -0xc(%ebp),%eax <== NOT EXECUTED
105378: e8 62 fe ff ff call 1051df <free_user_env_protected><== NOT EXECUTED
sc = RTEMS_TOO_MANY;
10537d: bb 05 00 00 00 mov $0x5,%ebx <== NOT EXECUTED
105382: eb 02 jmp 105386 <rtems_libio_share_private_env+0x9a><== NOT EXECUTED
return sc;
}
rtems_status_code rtems_libio_share_private_env(rtems_id task_id)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
105384: 31 db xor %ebx,%ebx
}
}
}
return sc;
}
105386: 89 d8 mov %ebx,%eax
105388: 8b 5d fc mov -0x4(%ebp),%ebx
10538b: c9 leave
10538c: c3 ret
0010dad4 <rtems_libio_to_fcntl_flags>:
*
* Convert RTEMS internal flags to UNIX fnctl(2) flags
*/
int rtems_libio_to_fcntl_flags( uint32_t flags )
{
10dad4: 55 push %ebp
10dad5: 89 e5 mov %esp,%ebp
10dad7: 8b 55 08 mov 0x8(%ebp),%edx
int fcntl_flags = 0;
if ( (flags & LIBIO_FLAGS_READ_WRITE) == LIBIO_FLAGS_READ_WRITE ) {
10dada: 89 d0 mov %edx,%eax
10dadc: 83 e0 06 and $0x6,%eax
10dadf: 83 f8 06 cmp $0x6,%eax
10dae2: 74 11 je 10daf5 <rtems_libio_to_fcntl_flags+0x21>
fcntl_flags |= O_RDWR;
} else if ( (flags & LIBIO_FLAGS_READ) == LIBIO_FLAGS_READ) {
fcntl_flags |= O_RDONLY;
10dae4: 31 c0 xor %eax,%eax
{
int fcntl_flags = 0;
if ( (flags & LIBIO_FLAGS_READ_WRITE) == LIBIO_FLAGS_READ_WRITE ) {
fcntl_flags |= O_RDWR;
} else if ( (flags & LIBIO_FLAGS_READ) == LIBIO_FLAGS_READ) {
10dae6: f6 c2 02 test $0x2,%dl
10dae9: 75 0f jne 10dafa <rtems_libio_to_fcntl_flags+0x26><== ALWAYS TAKEN
fcntl_flags |= O_RDONLY;
} else if ( (flags & LIBIO_FLAGS_WRITE) == LIBIO_FLAGS_WRITE) {
10daeb: 89 d0 mov %edx,%eax <== NOT EXECUTED
10daed: c1 e8 02 shr $0x2,%eax <== NOT EXECUTED
int rtems_libio_to_fcntl_flags( uint32_t flags )
{
int fcntl_flags = 0;
if ( (flags & LIBIO_FLAGS_READ_WRITE) == LIBIO_FLAGS_READ_WRITE ) {
fcntl_flags |= O_RDWR;
10daf0: 83 e0 01 and $0x1,%eax <== NOT EXECUTED
10daf3: eb 05 jmp 10dafa <rtems_libio_to_fcntl_flags+0x26><== NOT EXECUTED
10daf5: b8 02 00 00 00 mov $0x2,%eax
fcntl_flags |= O_RDONLY;
} else if ( (flags & LIBIO_FLAGS_WRITE) == LIBIO_FLAGS_WRITE) {
fcntl_flags |= O_WRONLY;
}
if ( (flags & LIBIO_FLAGS_NO_DELAY) == LIBIO_FLAGS_NO_DELAY ) {
10dafa: f6 c2 01 test $0x1,%dl
10dafd: 74 03 je 10db02 <rtems_libio_to_fcntl_flags+0x2e>
fcntl_flags |= O_NONBLOCK;
10daff: 80 cc 40 or $0x40,%ah
}
if ( (flags & LIBIO_FLAGS_APPEND) == LIBIO_FLAGS_APPEND ) {
10db02: f6 c6 02 test $0x2,%dh
10db05: 74 03 je 10db0a <rtems_libio_to_fcntl_flags+0x36>
fcntl_flags |= O_APPEND;
10db07: 83 c8 08 or $0x8,%eax
}
if ( (flags & LIBIO_FLAGS_CREATE) == LIBIO_FLAGS_CREATE ) {
10db0a: 80 e6 04 and $0x4,%dh
10db0d: 74 03 je 10db12 <rtems_libio_to_fcntl_flags+0x3e>
fcntl_flags |= O_CREAT;
10db0f: 80 cc 02 or $0x2,%ah
}
return fcntl_flags;
}
10db12: 5d pop %ebp
10db13: c3 ret
0010538d <rtems_libio_use_global_env>:
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_user_env_t *env = rtems_current_user_env;
bool uses_private_env = env != &rtems_global_user_env;
if (uses_private_env) {
10538d: 81 3d 5c 7b 12 00 60 cmpl $0x127b60,0x127b5c
105394: 7b 12 00
105397: 74 31 je 1053ca <rtems_libio_use_global_env+0x3d>
return sc;
}
void rtems_libio_use_global_env(void)
{
105399: 55 push %ebp
10539a: 89 e5 mov %esp,%ebp
10539c: 83 ec 10 sub $0x10,%esp
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_user_env_t *env = rtems_current_user_env;
bool uses_private_env = env != &rtems_global_user_env;
if (uses_private_env) {
sc = rtems_task_variable_delete(
10539f: 68 5c 7b 12 00 push $0x127b5c
1053a4: 6a 00 push $0x0
1053a6: e8 71 14 00 00 call 10681c <rtems_task_variable_delete>
RTEMS_SELF,
(void **) &rtems_current_user_env
);
if (sc != RTEMS_SUCCESSFUL) {
1053ab: 83 c4 10 add $0x10,%esp
1053ae: 85 c0 test %eax,%eax
1053b0: 74 0d je 1053bf <rtems_libio_use_global_env+0x32><== ALWAYS TAKEN
rtems_fatal_error_occurred(0xdeadbeef);
1053b2: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1053b5: 68 ef be ad de push $0xdeadbeef <== NOT EXECUTED
1053ba: e8 09 17 00 00 call 106ac8 <rtems_fatal_error_occurred><== NOT EXECUTED
}
rtems_current_user_env = &rtems_global_user_env;
1053bf: c7 05 5c 7b 12 00 60 movl $0x127b60,0x127b5c
1053c6: 7b 12 00
}
}
1053c9: c9 leave
1053ca: c3 ret
00108f14 <rtems_malloc_statistics_at_free>:
* size and thus we skip updating the statistics.
*/
static void rtems_malloc_statistics_at_free(
void *pointer
)
{
108f14: 55 push %ebp
108f15: 89 e5 mov %esp,%ebp
108f17: 83 ec 1c sub $0x1c,%esp
uintptr_t size;
if (_Protected_heap_Get_block_size(RTEMS_Malloc_Heap, pointer, &size) ) {
108f1a: 8d 45 f4 lea -0xc(%ebp),%eax
108f1d: 50 push %eax
108f1e: ff 75 08 pushl 0x8(%ebp)
108f21: ff 35 30 f2 12 00 pushl 0x12f230
108f27: e8 a8 56 00 00 call 10e5d4 <_Protected_heap_Get_block_size>
108f2c: 83 c4 10 add $0x10,%esp
108f2f: 84 c0 test %al,%al
108f31: 74 11 je 108f44 <rtems_malloc_statistics_at_free+0x30><== NEVER TAKEN
MSBUMP(lifetime_freed, size);
108f33: 8b 45 f4 mov -0xc(%ebp),%eax
108f36: 31 d2 xor %edx,%edx
108f38: 01 05 dc 3b 13 00 add %eax,0x133bdc
108f3e: 11 15 e0 3b 13 00 adc %edx,0x133be0
}
}
108f44: c9 leave
108f45: c3 ret
00108f46 <rtems_malloc_statistics_at_malloc>:
}
static void rtems_malloc_statistics_at_malloc(
void *pointer
)
{
108f46: 55 push %ebp
108f47: 89 e5 mov %esp,%ebp
108f49: 83 ec 18 sub $0x18,%esp
108f4c: 8b 45 08 mov 0x8(%ebp),%eax
uintptr_t actual_size = 0;
108f4f: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp)
uint32_t current_depth;
rtems_malloc_statistics_t *s = &rtems_malloc_statistics;
if ( !pointer )
108f56: 85 c0 test %eax,%eax
108f58: 74 43 je 108f9d <rtems_malloc_statistics_at_malloc+0x57><== NEVER TAKEN
return;
_Protected_heap_Get_block_size(RTEMS_Malloc_Heap, pointer, &actual_size);
108f5a: 52 push %edx
108f5b: 8d 55 f4 lea -0xc(%ebp),%edx
108f5e: 52 push %edx
108f5f: 50 push %eax
108f60: ff 35 30 f2 12 00 pushl 0x12f230
108f66: e8 69 56 00 00 call 10e5d4 <_Protected_heap_Get_block_size>
MSBUMP(lifetime_allocated, actual_size);
108f6b: 8b 45 f4 mov -0xc(%ebp),%eax
108f6e: 31 d2 xor %edx,%edx
108f70: 03 05 d4 3b 13 00 add 0x133bd4,%eax
108f76: 13 15 d8 3b 13 00 adc 0x133bd8,%edx
108f7c: a3 d4 3b 13 00 mov %eax,0x133bd4
108f81: 89 15 d8 3b 13 00 mov %edx,0x133bd8
current_depth = (uint32_t) (s->lifetime_allocated - s->lifetime_freed);
108f87: 2b 05 dc 3b 13 00 sub 0x133bdc,%eax
if (current_depth > s->max_depth)
108f8d: 83 c4 10 add $0x10,%esp
108f90: 3b 05 d0 3b 13 00 cmp 0x133bd0,%eax
108f96: 76 05 jbe 108f9d <rtems_malloc_statistics_at_malloc+0x57>
s->max_depth = current_depth;
108f98: a3 d0 3b 13 00 mov %eax,0x133bd0
}
108f9d: c9 leave
108f9e: c3 ret
0011117c <rtems_memalign>:
int rtems_memalign(
void **pointer,
size_t alignment,
size_t size
)
{
11117c: 55 push %ebp
11117d: 89 e5 mov %esp,%ebp
11117f: 56 push %esi
111180: 53 push %ebx
111181: 8b 5d 08 mov 0x8(%ebp),%ebx
void *return_this;
/*
* Parameter error checks
*/
if ( !pointer )
111184: 85 db test %ebx,%ebx
111186: 75 07 jne 11118f <rtems_memalign+0x13>
return EINVAL;
111188: b8 16 00 00 00 mov $0x16,%eax
11118d: eb 5b jmp 1111ea <rtems_memalign+0x6e>
*pointer = NULL;
11118f: c7 03 00 00 00 00 movl $0x0,(%ebx)
/*
* Do not attempt to allocate memory if not in correct system state.
*/
if ( _System_state_Is_up(_System_state_Get()) &&
111195: 83 3d a8 25 13 00 03 cmpl $0x3,0x1325a8
11119c: 74 23 je 1111c1 <rtems_memalign+0x45>
return EINVAL;
/*
* If some free's have been deferred, then do them now.
*/
malloc_deferred_frees_process();
11119e: e8 b8 66 ff ff call 10785b <malloc_deferred_frees_process>
Heap_Control *heap,
uintptr_t size,
uintptr_t alignment
)
{
return
1111a3: 6a 00 push $0x0
1111a5: ff 75 0c pushl 0xc(%ebp)
1111a8: ff 75 10 pushl 0x10(%ebp)
1111ab: ff 35 14 e2 12 00 pushl 0x12e214
1111b1: e8 72 b3 ff ff call 10c528 <_Protected_heap_Allocate_aligned_with_boundary>
1111b6: 89 c6 mov %eax,%esi
return_this = _Protected_heap_Allocate_aligned(
RTEMS_Malloc_Heap,
size,
alignment
);
if ( !return_this )
1111b8: 83 c4 10 add $0x10,%esp
1111bb: 85 c0 test %eax,%eax
1111bd: 75 0d jne 1111cc <rtems_memalign+0x50>
1111bf: eb 24 jmp 1111e5 <rtems_memalign+0x69>
/*
* Do not attempt to allocate memory if not in correct system state.
*/
if ( _System_state_Is_up(_System_state_Get()) &&
!malloc_is_system_state_OK() )
1111c1: e8 56 66 ff ff call 10781c <malloc_is_system_state_OK>
*pointer = NULL;
/*
* Do not attempt to allocate memory if not in correct system state.
*/
if ( _System_state_Is_up(_System_state_Get()) &&
1111c6: 84 c0 test %al,%al
1111c8: 74 be je 111188 <rtems_memalign+0xc> <== NEVER TAKEN
1111ca: eb d2 jmp 11119e <rtems_memalign+0x22>
return ENOMEM;
/*
* If configured, update the more involved statistics
*/
if ( rtems_malloc_statistics_helpers )
1111cc: a1 e4 07 13 00 mov 0x1307e4,%eax
1111d1: 85 c0 test %eax,%eax
1111d3: 74 0a je 1111df <rtems_memalign+0x63>
(*rtems_malloc_statistics_helpers->at_malloc)(pointer);
1111d5: 83 ec 0c sub $0xc,%esp
1111d8: 53 push %ebx
1111d9: ff 50 04 call *0x4(%eax)
1111dc: 83 c4 10 add $0x10,%esp
*pointer = return_this;
1111df: 89 33 mov %esi,(%ebx)
return 0;
1111e1: 31 c0 xor %eax,%eax
1111e3: eb 05 jmp 1111ea <rtems_memalign+0x6e>
RTEMS_Malloc_Heap,
size,
alignment
);
if ( !return_this )
return ENOMEM;
1111e5: b8 0c 00 00 00 mov $0xc,%eax
if ( rtems_malloc_statistics_helpers )
(*rtems_malloc_statistics_helpers->at_malloc)(pointer);
*pointer = return_this;
return 0;
}
1111ea: 8d 65 f8 lea -0x8(%ebp),%esp
1111ed: 5b pop %ebx
1111ee: 5e pop %esi
1111ef: 5d pop %ebp
1111f0: c3 ret
0010e848 <rtems_message_queue_delete>:
*/
rtems_status_code rtems_message_queue_delete(
rtems_id id
)
{
10e848: 55 push %ebp
10e849: 89 e5 mov %esp,%ebp
10e84b: 53 push %ebx
10e84c: 83 ec 18 sub $0x18,%esp
register Message_queue_Control *the_message_queue;
Objects_Locations location;
the_message_queue = _Message_queue_Get( id, &location );
10e84f: 8d 45 f4 lea -0xc(%ebp),%eax
RTEMS_INLINE_ROUTINE Message_queue_Control *_Message_queue_Get (
Objects_Id id,
Objects_Locations *location
)
{
return (Message_queue_Control *)
10e852: 50 push %eax
10e853: ff 75 08 pushl 0x8(%ebp)
10e856: 68 94 ed 12 00 push $0x12ed94
10e85b: e8 08 ca ff ff call 10b268 <_Objects_Get>
switch ( location ) {
10e860: 83 c4 10 add $0x10,%esp
10e863: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
10e867: 75 38 jne 10e8a1 <rtems_message_queue_delete+0x59><== NEVER TAKEN
10e869: 89 c3 mov %eax,%ebx
case OBJECTS_LOCAL:
_Objects_Close( &_Message_queue_Information,
10e86b: 50 push %eax
10e86c: 50 push %eax
10e86d: 53 push %ebx
10e86e: 68 94 ed 12 00 push $0x12ed94
10e873: e8 50 c6 ff ff call 10aec8 <_Objects_Close>
&the_message_queue->Object );
_CORE_message_queue_Close(
10e878: 83 c4 0c add $0xc,%esp
10e87b: 6a 05 push $0x5
10e87d: 6a 00 push $0x0
10e87f: 8d 43 14 lea 0x14(%ebx),%eax
10e882: 50 push %eax
10e883: e8 a0 04 00 00 call 10ed28 <_CORE_message_queue_Close>
*/
RTEMS_INLINE_ROUTINE void _Message_queue_Free (
Message_queue_Control *the_message_queue
)
{
_Objects_Free( &_Message_queue_Information, &the_message_queue->Object );
10e888: 5a pop %edx
10e889: 59 pop %ecx
10e88a: 53 push %ebx
10e88b: 68 94 ed 12 00 push $0x12ed94
10e890: e8 a7 c8 ff ff call 10b13c <_Objects_Free>
0, /* Not used */
0
);
}
#endif
_Thread_Enable_dispatch();
10e895: e8 72 d5 ff ff call 10be0c <_Thread_Enable_dispatch>
10e89a: 83 c4 10 add $0x10,%esp
return RTEMS_SUCCESSFUL;
10e89d: 31 c0 xor %eax,%eax
10e89f: eb 05 jmp 10e8a6 <rtems_message_queue_delete+0x5e>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
10e8a1: b8 04 00 00 00 mov $0x4,%eax
}
10e8a6: 8b 5d fc mov -0x4(%ebp),%ebx
10e8a9: c9 leave
10e8aa: c3 ret
0010b0b8 <rtems_mkdir>:
return (retval);
}
int
rtems_mkdir(const char *path, mode_t mode)
{
10b0b8: 55 push %ebp
10b0b9: 89 e5 mov %esp,%ebp
10b0bb: 57 push %edi
10b0bc: 56 push %esi
10b0bd: 53 push %ebx
10b0be: 83 ec 78 sub $0x78,%esp
int success = 0;
char *dup_path = strdup(path);
10b0c1: ff 75 08 pushl 0x8(%ebp)
10b0c4: e8 87 5c 01 00 call 120d50 <strdup>
10b0c9: 89 c7 mov %eax,%edi
if (dup_path != NULL) {
10b0cb: 83 c4 10 add $0x10,%esp
10b0ce: 85 c0 test %eax,%eax
10b0d0: 75 08 jne 10b0da <rtems_mkdir+0x22>
success = build(dup_path, mode);
free(dup_path);
}
return success != 0 ? 0 : -1;
10b0d2: 83 c8 ff or $0xffffffff,%eax
10b0d5: e9 56 01 00 00 jmp 10b230 <rtems_mkdir+0x178>
p = path;
oumask = 0;
retval = 1;
if (p[0] == '/') /* Skip leading '/'. */
++p;
10b0da: 31 c0 xor %eax,%eax
10b0dc: 80 3f 2f cmpb $0x2f,(%edi)
10b0df: 0f 94 c0 sete %al
10b0e2: 01 f8 add %edi,%eax
10b0e4: 89 45 94 mov %eax,-0x6c(%ebp)
char *p;
p = path;
oumask = 0;
retval = 1;
if (p[0] == '/') /* Skip leading '/'. */
10b0e7: be 01 00 00 00 mov $0x1,%esi
10b0ec: c7 45 90 00 00 00 00 movl $0x0,-0x70(%ebp)
10b0f3: b8 01 00 00 00 mov $0x1,%eax
++p;
for (first = 1, last = 0; !last ; ++p) {
if (p[0] == '\0')
10b0f8: 8b 55 94 mov -0x6c(%ebp),%edx
10b0fb: 8a 0a mov (%edx),%cl
10b0fd: 84 c9 test %cl,%cl
10b0ff: 74 0d je 10b10e <rtems_mkdir+0x56>
last = 1;
else if (p[0] != '/')
10b101: 31 d2 xor %edx,%edx
10b103: 80 f9 2f cmp $0x2f,%cl
10b106: 0f 85 e6 00 00 00 jne 10b1f2 <rtems_mkdir+0x13a>
10b10c: eb 05 jmp 10b113 <rtems_mkdir+0x5b>
retval = 1;
if (p[0] == '/') /* Skip leading '/'. */
++p;
for (first = 1, last = 0; !last ; ++p) {
if (p[0] == '\0')
last = 1;
10b10e: ba 01 00 00 00 mov $0x1,%edx
else if (p[0] != '/')
continue;
*p = '\0';
10b113: 8b 4d 94 mov -0x6c(%ebp),%ecx
10b116: c6 01 00 movb $0x0,(%ecx)
if (!last && p[1] == '\0')
10b119: bb 01 00 00 00 mov $0x1,%ebx
10b11e: 85 d2 test %edx,%edx
10b120: 75 09 jne 10b12b <rtems_mkdir+0x73>
10b122: 31 db xor %ebx,%ebx
10b124: 80 79 01 00 cmpb $0x0,0x1(%ecx)
10b128: 0f 94 c3 sete %bl
last = 1;
if (first) {
10b12b: 85 c0 test %eax,%eax
10b12d: 74 1a je 10b149 <rtems_mkdir+0x91>
* mkdir [-m mode] dir
*
* We change the user's umask and then restore it,
* instead of doing chmod's.
*/
oumask = umask(0);
10b12f: 83 ec 0c sub $0xc,%esp
10b132: 6a 00 push $0x0
10b134: e8 2b 21 00 00 call 10d264 <umask>
10b139: 89 45 90 mov %eax,-0x70(%ebp)
numask = oumask & ~(S_IWUSR | S_IXUSR);
10b13c: 24 3f and $0x3f,%al
(void)umask(numask);
10b13e: 89 04 24 mov %eax,(%esp)
10b141: e8 1e 21 00 00 call 10d264 <umask>
10b146: 83 c4 10 add $0x10,%esp
first = 0;
}
if (last)
(void)umask(oumask);
if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
10b149: b8 ff 01 00 00 mov $0x1ff,%eax
oumask = umask(0);
numask = oumask & ~(S_IWUSR | S_IXUSR);
(void)umask(numask);
first = 0;
}
if (last)
10b14e: 85 db test %ebx,%ebx
10b150: 74 11 je 10b163 <rtems_mkdir+0xab>
(void)umask(oumask);
10b152: 83 ec 0c sub $0xc,%esp
10b155: ff 75 90 pushl -0x70(%ebp)
10b158: e8 07 21 00 00 call 10d264 <umask>
10b15d: 83 c4 10 add $0x10,%esp
if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
10b160: 8b 45 0c mov 0xc(%ebp),%eax
10b163: 52 push %edx
10b164: 52 push %edx
10b165: 50 push %eax
10b166: 57 push %edi
10b167: e8 34 f3 ff ff call 10a4a0 <mkdir>
10b16c: 83 c4 10 add $0x10,%esp
10b16f: 85 c0 test %eax,%eax
10b171: 79 6d jns 10b1e0 <rtems_mkdir+0x128>
if (errno == EEXIST || errno == EISDIR) {
10b173: e8 54 40 01 00 call 11f1cc <__errno>
10b178: 83 38 11 cmpl $0x11,(%eax)
10b17b: 75 15 jne 10b192 <rtems_mkdir+0xda>
if (stat(path, &sb) < 0) {
10b17d: 50 push %eax
10b17e: 50 push %eax
10b17f: 8d 45 a0 lea -0x60(%ebp),%eax
10b182: 50 push %eax
10b183: 57 push %edi
10b184: e8 af 00 00 00 call 10b238 <stat>
10b189: 83 c4 10 add $0x10,%esp
10b18c: 85 c0 test %eax,%eax
10b18e: 79 0e jns 10b19e <rtems_mkdir+0xe6> <== ALWAYS TAKEN
10b190: eb 72 jmp 10b204 <rtems_mkdir+0x14c> <== NOT EXECUTED
first = 0;
}
if (last)
(void)umask(oumask);
if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
if (errno == EEXIST || errno == EISDIR) {
10b192: e8 35 40 01 00 call 11f1cc <__errno>
10b197: 83 38 15 cmpl $0x15,(%eax)
10b19a: 74 e1 je 10b17d <rtems_mkdir+0xc5> <== NEVER TAKEN
10b19c: eb 66 jmp 10b204 <rtems_mkdir+0x14c>
if (stat(path, &sb) < 0) {
retval = 0;
break;
} else if (!S_ISDIR(sb.st_mode)) {
10b19e: 8b 45 ac mov -0x54(%ebp),%eax
10b1a1: 25 00 f0 00 00 and $0xf000,%eax
10b1a6: 3d 00 40 00 00 cmp $0x4000,%eax
10b1ab: 74 25 je 10b1d2 <rtems_mkdir+0x11a>
if (last)
10b1ad: 85 db test %ebx,%ebx
10b1af: 74 14 je 10b1c5 <rtems_mkdir+0x10d>
errno = EEXIST;
10b1b1: e8 16 40 01 00 call 11f1cc <__errno>
10b1b6: c7 00 11 00 00 00 movl $0x11,(%eax)
else
errno = ENOTDIR;
retval = 0;
10b1bc: 31 f6 xor %esi,%esi
if (stat(path, &sb) < 0) {
retval = 0;
break;
} else if (!S_ISDIR(sb.st_mode)) {
if (last)
errno = EEXIST;
10b1be: bb 01 00 00 00 mov $0x1,%ebx
10b1c3: eb 41 jmp 10b206 <rtems_mkdir+0x14e>
else
errno = ENOTDIR;
10b1c5: e8 02 40 01 00 call 11f1cc <__errno>
10b1ca: c7 00 14 00 00 00 movl $0x14,(%eax)
10b1d0: eb 32 jmp 10b204 <rtems_mkdir+0x14c>
retval = 0;
break;
}
if (last)
10b1d2: 85 db test %ebx,%ebx
10b1d4: 75 10 jne 10b1e6 <rtems_mkdir+0x12e>
retval = 0;
break;
}
}
if (!last)
*p = '/';
10b1d6: 8b 55 94 mov -0x6c(%ebp),%edx
10b1d9: c6 02 2f movb $0x2f,(%edx)
10b1dc: 31 d2 xor %edx,%edx
10b1de: eb 10 jmp 10b1f0 <rtems_mkdir+0x138>
} else {
retval = 0;
break;
}
}
if (!last)
10b1e0: 85 db test %ebx,%ebx
10b1e2: 74 f2 je 10b1d6 <rtems_mkdir+0x11e>
10b1e4: eb 05 jmp 10b1eb <rtems_mkdir+0x133>
errno = ENOTDIR;
retval = 0;
break;
}
if (last)
retval = 2;
10b1e6: be 02 00 00 00 mov $0x2,%esi
else
errno = ENOTDIR;
retval = 0;
break;
}
if (last)
10b1eb: ba 01 00 00 00 mov $0x1,%edx
10b1f0: 31 c0 xor %eax,%eax
p = path;
oumask = 0;
retval = 1;
if (p[0] == '/') /* Skip leading '/'. */
++p;
for (first = 1, last = 0; !last ; ++p) {
10b1f2: ff 45 94 incl -0x6c(%ebp)
10b1f5: 85 d2 test %edx,%edx
10b1f7: 0f 84 fb fe ff ff je 10b0f8 <rtems_mkdir+0x40>
10b1fd: bb 01 00 00 00 mov $0x1,%ebx
10b202: eb 04 jmp 10b208 <rtems_mkdir+0x150>
if (last)
(void)umask(oumask);
if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
if (errno == EEXIST || errno == EISDIR) {
if (stat(path, &sb) < 0) {
retval = 0;
10b204: 31 f6 xor %esi,%esi
}
if (last)
(void)umask(oumask);
if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
if (errno == EEXIST || errno == EISDIR) {
if (stat(path, &sb) < 0) {
10b206: 31 c0 xor %eax,%eax
}
}
if (!last)
*p = '/';
}
if (!first && !last)
10b208: 09 c3 or %eax,%ebx
10b20a: 75 0e jne 10b21a <rtems_mkdir+0x162>
(void)umask(oumask);
10b20c: 83 ec 0c sub $0xc,%esp
10b20f: ff 75 90 pushl -0x70(%ebp)
10b212: e8 4d 20 00 00 call 10d264 <umask>
10b217: 83 c4 10 add $0x10,%esp
int success = 0;
char *dup_path = strdup(path);
if (dup_path != NULL) {
success = build(dup_path, mode);
free(dup_path);
10b21a: 83 ec 0c sub $0xc,%esp
10b21d: 57 push %edi
10b21e: e8 c5 ec ff ff call 109ee8 <free>
}
return success != 0 ? 0 : -1;
10b223: 83 c4 10 add $0x10,%esp
10b226: 85 f6 test %esi,%esi
10b228: 0f 84 a4 fe ff ff je 10b0d2 <rtems_mkdir+0x1a>
10b22e: 31 c0 xor %eax,%eax
}
10b230: 8d 65 f4 lea -0xc(%ebp),%esp
10b233: 5b pop %ebx
10b234: 5e pop %esi
10b235: 5f pop %edi
10b236: 5d pop %ebp
10b237: c3 ret
0010ae70 <rtems_partition_create>:
uint32_t length,
uint32_t buffer_size,
rtems_attribute attribute_set,
rtems_id *id
)
{
10ae70: 55 push %ebp
10ae71: 89 e5 mov %esp,%ebp
10ae73: 57 push %edi
10ae74: 56 push %esi
10ae75: 53 push %ebx
10ae76: 83 ec 0c sub $0xc,%esp
10ae79: 8b 7d 0c mov 0xc(%ebp),%edi
10ae7c: 8b 75 14 mov 0x14(%ebp),%esi
register Partition_Control *the_partition;
if ( !rtems_is_name_valid( name ) )
return RTEMS_INVALID_NAME;
10ae7f: b8 03 00 00 00 mov $0x3,%eax
rtems_id *id
)
{
register Partition_Control *the_partition;
if ( !rtems_is_name_valid( name ) )
10ae84: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
10ae88: 0f 84 d9 00 00 00 je 10af67 <rtems_partition_create+0xf7>
return RTEMS_INVALID_NAME;
if ( !starting_address )
10ae8e: 85 ff test %edi,%edi
10ae90: 0f 84 c5 00 00 00 je 10af5b <rtems_partition_create+0xeb>
return RTEMS_INVALID_ADDRESS;
if ( !id )
10ae96: 83 7d 1c 00 cmpl $0x0,0x1c(%ebp)
10ae9a: 0f 84 bb 00 00 00 je 10af5b <rtems_partition_create+0xeb><== NEVER TAKEN
return RTEMS_INVALID_ADDRESS;
if ( length == 0 || buffer_size == 0 || length < buffer_size ||
10aea0: 85 f6 test %esi,%esi
10aea2: 0f 84 ba 00 00 00 je 10af62 <rtems_partition_create+0xf2>
10aea8: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
10aeac: 0f 84 b0 00 00 00 je 10af62 <rtems_partition_create+0xf2>
!_Partition_Is_buffer_size_aligned( buffer_size ) )
return RTEMS_INVALID_SIZE;
10aeb2: b0 08 mov $0x8,%al
return RTEMS_INVALID_ADDRESS;
if ( !id )
return RTEMS_INVALID_ADDRESS;
if ( length == 0 || buffer_size == 0 || length < buffer_size ||
10aeb4: 39 75 10 cmp %esi,0x10(%ebp)
10aeb7: 0f 82 aa 00 00 00 jb 10af67 <rtems_partition_create+0xf7>
10aebd: f7 c6 03 00 00 00 test $0x3,%esi
10aec3: 0f 85 9e 00 00 00 jne 10af67 <rtems_partition_create+0xf7>
if ( !rtems_is_name_valid( name ) )
return RTEMS_INVALID_NAME;
if ( !starting_address )
return RTEMS_INVALID_ADDRESS;
10aec9: b0 09 mov $0x9,%al
if ( length == 0 || buffer_size == 0 || length < buffer_size ||
!_Partition_Is_buffer_size_aligned( buffer_size ) )
return RTEMS_INVALID_SIZE;
if ( !_Addresses_Is_aligned( starting_address ) )
10aecb: f7 c7 03 00 00 00 test $0x3,%edi
10aed1: 0f 85 90 00 00 00 jne 10af67 <rtems_partition_create+0xf7>
*
* This rountine increments the thread dispatch level
*/
RTEMS_INLINE_ROUTINE uint32_t _Thread_Dispatch_increment_disable_level(void)
{
_Thread_Dispatch_disable_level++;
10aed7: a1 b4 31 13 00 mov 0x1331b4,%eax
10aedc: 40 inc %eax
10aedd: a3 b4 31 13 00 mov %eax,0x1331b4
return _Thread_Dispatch_disable_level;
10aee2: a1 b4 31 13 00 mov 0x1331b4,%eax
* This function allocates a partition control block from
* the inactive chain of free partition control blocks.
*/
RTEMS_INLINE_ROUTINE Partition_Control *_Partition_Allocate ( void )
{
return (Partition_Control *) _Objects_Allocate( &_Partition_Information );
10aee7: 83 ec 0c sub $0xc,%esp
10aeea: 68 30 30 13 00 push $0x133030
10aeef: e8 c4 17 00 00 call 10c6b8 <_Objects_Allocate>
10aef4: 89 c3 mov %eax,%ebx
_Thread_Disable_dispatch(); /* prevents deletion */
the_partition = _Partition_Allocate();
if ( !the_partition ) {
10aef6: 83 c4 10 add $0x10,%esp
10aef9: 85 c0 test %eax,%eax
10aefb: 75 0c jne 10af09 <rtems_partition_create+0x99>
_Thread_Enable_dispatch();
10aefd: e8 ba 27 00 00 call 10d6bc <_Thread_Enable_dispatch>
return RTEMS_TOO_MANY;
10af02: b8 05 00 00 00 mov $0x5,%eax
10af07: eb 5e jmp 10af67 <rtems_partition_create+0xf7>
_Thread_Enable_dispatch();
return RTEMS_TOO_MANY;
}
#endif
the_partition->starting_address = starting_address;
10af09: 89 78 10 mov %edi,0x10(%eax)
the_partition->length = length;
10af0c: 8b 45 10 mov 0x10(%ebp),%eax
10af0f: 89 43 14 mov %eax,0x14(%ebx)
the_partition->buffer_size = buffer_size;
10af12: 89 73 18 mov %esi,0x18(%ebx)
the_partition->attribute_set = attribute_set;
10af15: 8b 45 18 mov 0x18(%ebp),%eax
10af18: 89 43 1c mov %eax,0x1c(%ebx)
the_partition->number_of_used_blocks = 0;
10af1b: c7 43 20 00 00 00 00 movl $0x0,0x20(%ebx)
_Chain_Initialize( &the_partition->Memory, starting_address,
10af22: 56 push %esi
10af23: 8b 45 10 mov 0x10(%ebp),%eax
10af26: 31 d2 xor %edx,%edx
10af28: f7 f6 div %esi
10af2a: 50 push %eax
10af2b: 57 push %edi
10af2c: 8d 43 24 lea 0x24(%ebx),%eax
10af2f: 50 push %eax
10af30: e8 3f 0f 00 00 call 10be74 <_Chain_Initialize>
Objects_Name name
)
{
_Objects_Set_local_object(
information,
_Objects_Get_index( the_object->id ),
10af35: 8b 43 08 mov 0x8(%ebx),%eax
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
10af38: 0f b7 c8 movzwl %ax,%ecx
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
10af3b: 8b 15 4c 30 13 00 mov 0x13304c,%edx
10af41: 89 1c 8a mov %ebx,(%edx,%ecx,4)
information,
_Objects_Get_index( the_object->id ),
the_object
);
the_object->name = name;
10af44: 8b 55 08 mov 0x8(%ebp),%edx
10af47: 89 53 0c mov %edx,0xc(%ebx)
&_Partition_Information,
&the_partition->Object,
(Objects_Name) name
);
*id = the_partition->Object.id;
10af4a: 8b 55 1c mov 0x1c(%ebp),%edx
10af4d: 89 02 mov %eax,(%edx)
name,
0 /* Not used */
);
#endif
_Thread_Enable_dispatch();
10af4f: e8 68 27 00 00 call 10d6bc <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
10af54: 83 c4 10 add $0x10,%esp
10af57: 31 c0 xor %eax,%eax
10af59: eb 0c jmp 10af67 <rtems_partition_create+0xf7>
if ( !rtems_is_name_valid( name ) )
return RTEMS_INVALID_NAME;
if ( !starting_address )
return RTEMS_INVALID_ADDRESS;
10af5b: b8 09 00 00 00 mov $0x9,%eax
10af60: eb 05 jmp 10af67 <rtems_partition_create+0xf7>
if ( !id )
return RTEMS_INVALID_ADDRESS;
if ( length == 0 || buffer_size == 0 || length < buffer_size ||
!_Partition_Is_buffer_size_aligned( buffer_size ) )
return RTEMS_INVALID_SIZE;
10af62: b8 08 00 00 00 mov $0x8,%eax
);
#endif
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
10af67: 8d 65 f4 lea -0xc(%ebp),%esp
10af6a: 5b pop %ebx
10af6b: 5e pop %esi
10af6c: 5f pop %edi
10af6d: 5d pop %ebp
10af6e: c3 ret
0011445c <rtems_partition_return_buffer>:
rtems_status_code rtems_partition_return_buffer(
rtems_id id,
void *buffer
)
{
11445c: 55 push %ebp
11445d: 89 e5 mov %esp,%ebp
11445f: 56 push %esi
114460: 53 push %ebx
114461: 83 ec 14 sub $0x14,%esp
114464: 8b 75 0c mov 0xc(%ebp),%esi
register Partition_Control *the_partition;
Objects_Locations location;
the_partition = _Partition_Get( id, &location );
114467: 8d 45 f4 lea -0xc(%ebp),%eax
RTEMS_INLINE_ROUTINE Partition_Control *_Partition_Get (
Objects_Id id,
Objects_Locations *location
)
{
return (Partition_Control *)
11446a: 50 push %eax
11446b: ff 75 08 pushl 0x8(%ebp)
11446e: 68 d0 7c 14 00 push $0x147cd0
114473: e8 78 43 00 00 call 1187f0 <_Objects_Get>
switch ( location ) {
114478: 83 c4 10 add $0x10,%esp
11447b: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
11447f: 75 53 jne 1144d4 <rtems_partition_return_buffer+0x78>
114481: 89 c3 mov %eax,%ebx
)
{
void *starting;
void *ending;
starting = the_partition->starting_address;
114483: 8b 40 10 mov 0x10(%eax),%eax
114486: 8b 53 14 mov 0x14(%ebx),%edx
114489: 01 c2 add %eax,%edx
ending = _Addresses_Add_offset( starting, the_partition->length );
return (
_Addresses_Is_in_range( the_buffer, starting, ending ) &&
11448b: 39 d6 cmp %edx,%esi
11448d: 77 18 ja 1144a7 <rtems_partition_return_buffer+0x4b><== NEVER TAKEN
11448f: 39 c6 cmp %eax,%esi
114491: 72 14 jb 1144a7 <rtems_partition_return_buffer+0x4b>
RTEMS_INLINE_ROUTINE int32_t _Addresses_Subtract (
const void *left,
const void *right
)
{
return (int32_t) ((const char *) left - (const char *) right);
114493: 89 f2 mov %esi,%edx
114495: 29 c2 sub %eax,%edx
114497: 89 d0 mov %edx,%eax
offset = (uint32_t) _Addresses_Subtract(
the_buffer,
the_partition->starting_address
);
return ((offset % the_partition->buffer_size) == 0);
114499: 31 d2 xor %edx,%edx
11449b: f7 73 18 divl 0x18(%ebx)
starting = the_partition->starting_address;
ending = _Addresses_Add_offset( starting, the_partition->length );
return (
_Addresses_Is_in_range( the_buffer, starting, ending ) &&
11449e: 31 c0 xor %eax,%eax
1144a0: 85 d2 test %edx,%edx
1144a2: 0f 94 c0 sete %al
1144a5: eb 02 jmp 1144a9 <rtems_partition_return_buffer+0x4d>
1144a7: 31 c0 xor %eax,%eax
case OBJECTS_LOCAL:
if ( _Partition_Is_buffer_valid( buffer, the_partition ) ) {
1144a9: 85 c0 test %eax,%eax
1144ab: 74 1b je 1144c8 <rtems_partition_return_buffer+0x6c>
RTEMS_INLINE_ROUTINE void _Partition_Free_buffer (
Partition_Control *the_partition,
Chain_Node *the_buffer
)
{
_Chain_Append( &the_partition->Memory, the_buffer );
1144ad: 50 push %eax
1144ae: 50 push %eax
1144af: 56 push %esi
1144b0: 8d 43 24 lea 0x24(%ebx),%eax
1144b3: 50 push %eax
1144b4: e8 db 2a 00 00 call 116f94 <_Chain_Append>
_Partition_Free_buffer( the_partition, buffer );
the_partition->number_of_used_blocks -= 1;
1144b9: ff 4b 20 decl 0x20(%ebx)
_Thread_Enable_dispatch();
1144bc: e8 d3 4e 00 00 call 119394 <_Thread_Enable_dispatch>
1144c1: 83 c4 10 add $0x10,%esp
return RTEMS_SUCCESSFUL;
1144c4: 31 c0 xor %eax,%eax
1144c6: eb 11 jmp 1144d9 <rtems_partition_return_buffer+0x7d>
}
_Thread_Enable_dispatch();
1144c8: e8 c7 4e 00 00 call 119394 <_Thread_Enable_dispatch>
return RTEMS_INVALID_ADDRESS;
1144cd: b8 09 00 00 00 mov $0x9,%eax
1144d2: eb 05 jmp 1144d9 <rtems_partition_return_buffer+0x7d>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
1144d4: b8 04 00 00 00 mov $0x4,%eax
}
1144d9: 8d 65 f8 lea -0x8(%ebp),%esp
1144dc: 5b pop %ebx
1144dd: 5e pop %esi
1144de: 5d pop %ebp
1144df: c3 ret
0012dd58 <rtems_rate_monotonic_period>:
rtems_status_code rtems_rate_monotonic_period(
rtems_id id,
rtems_interval length
)
{
12dd58: 55 push %ebp
12dd59: 89 e5 mov %esp,%ebp
12dd5b: 57 push %edi
12dd5c: 56 push %esi
12dd5d: 53 push %ebx
12dd5e: 83 ec 30 sub $0x30,%esp
12dd61: 8b 7d 08 mov 0x8(%ebp),%edi
12dd64: 8b 5d 0c mov 0xc(%ebp),%ebx
Objects_Locations location;
rtems_status_code return_value;
rtems_rate_monotonic_period_states local_state;
ISR_Level level;
the_period = _Rate_monotonic_Get( id, &location );
12dd67: 8d 45 e4 lea -0x1c(%ebp),%eax
12dd6a: 50 push %eax
12dd6b: 57 push %edi
12dd6c: 68 a0 ec 16 00 push $0x16eca0
12dd71: e8 ca d2 fd ff call 10b040 <_Objects_Get>
switch ( location ) {
12dd76: 83 c4 10 add $0x10,%esp
12dd79: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp)
12dd7d: 0f 85 47 01 00 00 jne 12deca <rtems_rate_monotonic_period+0x172>
12dd83: 89 c6 mov %eax,%esi
case OBJECTS_LOCAL:
if ( !_Thread_Is_executing( the_period->owner ) ) {
12dd85: a1 04 e7 16 00 mov 0x16e704,%eax
12dd8a: 39 46 40 cmp %eax,0x40(%esi)
12dd8d: 74 0f je 12dd9e <rtems_rate_monotonic_period+0x46>
_Thread_Enable_dispatch();
12dd8f: e8 e0 dd fd ff call 10bb74 <_Thread_Enable_dispatch>
return RTEMS_NOT_OWNER_OF_RESOURCE;
12dd94: bf 17 00 00 00 mov $0x17,%edi
12dd99: e9 31 01 00 00 jmp 12decf <rtems_rate_monotonic_period+0x177>
}
if ( length == RTEMS_PERIOD_STATUS ) {
12dd9e: 85 db test %ebx,%ebx
12dda0: 75 1b jne 12ddbd <rtems_rate_monotonic_period+0x65>
switch ( the_period->state ) {
12dda2: 8b 46 38 mov 0x38(%esi),%eax
12dda5: 31 ff xor %edi,%edi
12dda7: 83 f8 04 cmp $0x4,%eax
12ddaa: 77 07 ja 12ddb3 <rtems_rate_monotonic_period+0x5b><== NEVER TAKEN
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
12ddac: 0f b6 b8 08 31 15 00 movzbl 0x153108(%eax),%edi
case RATE_MONOTONIC_ACTIVE:
default: /* unreached -- only to remove warnings */
return_value = RTEMS_SUCCESSFUL;
break;
}
_Thread_Enable_dispatch();
12ddb3: e8 bc dd fd ff call 10bb74 <_Thread_Enable_dispatch>
12ddb8: e9 12 01 00 00 jmp 12decf <rtems_rate_monotonic_period+0x177>
return( return_value );
}
_ISR_Disable( level );
12ddbd: 9c pushf
12ddbe: fa cli
12ddbf: 8f 45 d4 popl -0x2c(%ebp)
if ( the_period->state == RATE_MONOTONIC_INACTIVE ) {
12ddc2: 8b 46 38 mov 0x38(%esi),%eax
12ddc5: 85 c0 test %eax,%eax
12ddc7: 75 4c jne 12de15 <rtems_rate_monotonic_period+0xbd>
_ISR_Enable( level );
12ddc9: ff 75 d4 pushl -0x2c(%ebp)
12ddcc: 9d popf
the_period->next_length = length;
12ddcd: 89 5e 3c mov %ebx,0x3c(%esi)
/*
* Baseline statistics information for the beginning of a period.
*/
_Rate_monotonic_Initiate_statistics( the_period );
12ddd0: 83 ec 0c sub $0xc,%esp
12ddd3: 56 push %esi
12ddd4: e8 0f ff ff ff call 12dce8 <_Rate_monotonic_Initiate_statistics>
the_period->state = RATE_MONOTONIC_ACTIVE;
12ddd9: c7 46 38 02 00 00 00 movl $0x2,0x38(%esi)
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
12dde0: c7 46 18 00 00 00 00 movl $0x0,0x18(%esi)
the_watchdog->routine = routine;
12dde7: c7 46 2c dc de 12 00 movl $0x12dedc,0x2c(%esi)
the_watchdog->id = id;
12ddee: 89 7e 30 mov %edi,0x30(%esi)
the_watchdog->user_data = user_data;
12ddf1: c7 46 34 00 00 00 00 movl $0x0,0x34(%esi)
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
12ddf8: 89 5e 1c mov %ebx,0x1c(%esi)
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
12ddfb: 59 pop %ecx
12ddfc: 5b pop %ebx
_Rate_monotonic_Timeout,
id,
NULL
);
_Watchdog_Insert_ticks( &the_period->Timer, length );
12ddfd: 8d 56 10 lea 0x10(%esi),%edx
12de00: 52 push %edx
12de01: 68 a0 e2 16 00 push $0x16e2a0
12de06: e8 61 e8 fd ff call 10c66c <_Watchdog_Insert>
_Thread_Enable_dispatch();
12de0b: e8 64 dd fd ff call 10bb74 <_Thread_Enable_dispatch>
12de10: 83 c4 10 add $0x10,%esp
12de13: eb 63 jmp 12de78 <rtems_rate_monotonic_period+0x120>
return RTEMS_SUCCESSFUL;
}
if ( the_period->state == RATE_MONOTONIC_ACTIVE ) {
12de15: 83 f8 02 cmp $0x2,%eax
12de18: 75 62 jne 12de7c <rtems_rate_monotonic_period+0x124>
/*
* Update statistics from the concluding period.
*/
_Rate_monotonic_Update_statistics( the_period );
12de1a: 89 f0 mov %esi,%eax
12de1c: e8 28 fe ff ff call 12dc49 <_Rate_monotonic_Update_statistics>
/*
* This tells the _Rate_monotonic_Timeout that this task is
* in the process of blocking on the period and that we
* may be changing the length of the next period.
*/
the_period->state = RATE_MONOTONIC_OWNER_IS_BLOCKING;
12de21: c7 46 38 01 00 00 00 movl $0x1,0x38(%esi)
the_period->next_length = length;
12de28: 89 5e 3c mov %ebx,0x3c(%esi)
_ISR_Enable( level );
12de2b: ff 75 d4 pushl -0x2c(%ebp)
12de2e: 9d popf
_Thread_Executing->Wait.id = the_period->Object.id;
12de2f: a1 04 e7 16 00 mov 0x16e704,%eax
12de34: 8b 4e 08 mov 0x8(%esi),%ecx
12de37: 89 48 20 mov %ecx,0x20(%eax)
_Thread_Set_state( _Thread_Executing, STATES_WAITING_FOR_PERIOD );
12de3a: 52 push %edx
12de3b: 52 push %edx
12de3c: 68 00 40 00 00 push $0x4000
12de41: 50 push %eax
12de42: e8 95 e4 fd ff call 10c2dc <_Thread_Set_state>
/*
* Did the watchdog timer expire while we were actually blocking
* on it?
*/
_ISR_Disable( level );
12de47: 9c pushf
12de48: fa cli
12de49: 59 pop %ecx
local_state = the_period->state;
12de4a: 8b 46 38 mov 0x38(%esi),%eax
the_period->state = RATE_MONOTONIC_ACTIVE;
12de4d: c7 46 38 02 00 00 00 movl $0x2,0x38(%esi)
_ISR_Enable( level );
12de54: 51 push %ecx
12de55: 9d popf
/*
* If it did, then we want to unblock ourself and continue as
* if nothing happen. The period was reset in the timeout routine.
*/
if ( local_state == RATE_MONOTONIC_EXPIRED_WHILE_BLOCKING )
12de56: 83 c4 10 add $0x10,%esp
12de59: 83 f8 03 cmp $0x3,%eax
12de5c: 75 15 jne 12de73 <rtems_rate_monotonic_period+0x11b>
_Thread_Clear_state( _Thread_Executing, STATES_WAITING_FOR_PERIOD );
12de5e: 50 push %eax
12de5f: 50 push %eax
12de60: 68 00 40 00 00 push $0x4000
12de65: ff 35 04 e7 16 00 pushl 0x16e704
12de6b: e8 d4 d9 fd ff call 10b844 <_Thread_Clear_state>
12de70: 83 c4 10 add $0x10,%esp
_Thread_Enable_dispatch();
12de73: e8 fc dc fd ff call 10bb74 <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
12de78: 31 ff xor %edi,%edi
12de7a: eb 53 jmp 12decf <rtems_rate_monotonic_period+0x177>
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
12de7c: bf 04 00 00 00 mov $0x4,%edi
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
if ( the_period->state == RATE_MONOTONIC_EXPIRED ) {
12de81: 83 f8 04 cmp $0x4,%eax
12de84: 75 49 jne 12decf <rtems_rate_monotonic_period+0x177><== NEVER TAKEN
/*
* Update statistics from the concluding period
*/
_Rate_monotonic_Update_statistics( the_period );
12de86: 89 f0 mov %esi,%eax
12de88: e8 bc fd ff ff call 12dc49 <_Rate_monotonic_Update_statistics>
_ISR_Enable( level );
12de8d: ff 75 d4 pushl -0x2c(%ebp)
12de90: 9d popf
the_period->state = RATE_MONOTONIC_ACTIVE;
12de91: c7 46 38 02 00 00 00 movl $0x2,0x38(%esi)
the_period->next_length = length;
12de98: 89 5e 3c mov %ebx,0x3c(%esi)
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
12de9b: 89 5e 1c mov %ebx,0x1c(%esi)
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
12de9e: 51 push %ecx
12de9f: 51 push %ecx
_Watchdog_Insert_ticks( &the_period->Timer, length );
12dea0: 8d 46 10 lea 0x10(%esi),%eax
12dea3: 50 push %eax
12dea4: 68 a0 e2 16 00 push $0x16e2a0
12dea9: e8 be e7 fd ff call 10c66c <_Watchdog_Insert>
12deae: 5b pop %ebx
12deaf: 58 pop %eax
12deb0: ff 76 3c pushl 0x3c(%esi)
12deb3: ff 76 40 pushl 0x40(%esi)
12deb6: ff 15 10 69 16 00 call *0x166910
_Scheduler_Release_job(the_period->owner, the_period->next_length);
_Thread_Enable_dispatch();
12debc: e8 b3 dc fd ff call 10bb74 <_Thread_Enable_dispatch>
12dec1: 83 c4 10 add $0x10,%esp
return RTEMS_TIMEOUT;
12dec4: 66 bf 06 00 mov $0x6,%di
12dec8: eb 05 jmp 12decf <rtems_rate_monotonic_period+0x177>
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
12deca: bf 04 00 00 00 mov $0x4,%edi
}
12decf: 89 f8 mov %edi,%eax
12ded1: 8d 65 f4 lea -0xc(%ebp),%esp
12ded4: 5b pop %ebx
12ded5: 5e pop %esi
12ded6: 5f pop %edi
12ded7: 5d pop %ebp
12ded8: c3 ret
00123b14 <rtems_rate_monotonic_report_statistics_with_plugin>:
*/
void rtems_rate_monotonic_report_statistics_with_plugin(
void *context,
rtems_printk_plugin_t print
)
{
123b14: 55 push %ebp
123b15: 89 e5 mov %esp,%ebp
123b17: 57 push %edi
123b18: 56 push %esi
123b19: 53 push %ebx
123b1a: 83 ec 7c sub $0x7c,%esp
123b1d: 8b 75 08 mov 0x8(%ebp),%esi
123b20: 8b 5d 0c mov 0xc(%ebp),%ebx
rtems_id id;
rtems_rate_monotonic_period_statistics the_stats;
rtems_rate_monotonic_period_status the_status;
char name[5];
if ( !print )
123b23: 85 db test %ebx,%ebx
123b25: 0f 84 2e 01 00 00 je 123c59 <rtems_rate_monotonic_report_statistics_with_plugin+0x145><== NEVER TAKEN
return;
(*print)( context, "Period information by period\n" );
123b2b: 57 push %edi
123b2c: 57 push %edi
123b2d: 68 4c 05 15 00 push $0x15054c
123b32: 56 push %esi
123b33: ff d3 call *%ebx
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
(*print)( context, "--- CPU times are in seconds ---\n" );
123b35: 58 pop %eax
123b36: 5a pop %edx
123b37: 68 6a 05 15 00 push $0x15056a
123b3c: 56 push %esi
123b3d: ff d3 call *%ebx
(*print)( context, "--- Wall times are in seconds ---\n" );
123b3f: 59 pop %ecx
123b40: 5f pop %edi
123b41: 68 8c 05 15 00 push $0x15058c
123b46: 56 push %esi
123b47: ff d3 call *%ebx
Be sure to test the various cases.
(*print)( context,"\
1234567890123456789012345678901234567890123456789012345678901234567890123456789\
\n");
*/
(*print)( context, " ID OWNER COUNT MISSED "
123b49: 58 pop %eax
123b4a: 5a pop %edx
123b4b: 68 af 05 15 00 push $0x1505af
123b50: 56 push %esi
123b51: ff d3 call *%ebx
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
" "
#endif
" WALL TIME\n"
);
(*print)( context, " "
123b53: 59 pop %ecx
123b54: 5f pop %edi
123b55: 68 fa 05 15 00 push $0x1505fa
123b5a: 56 push %esi
123b5b: ff d3 call *%ebx
/*
* Cycle through all possible ids and try to report on each one. If it
* is a period that is inactive, we just get an error back. No big deal.
*/
for ( id=_Rate_monotonic_Information.minimum_id ;
123b5d: 8b 3d a8 ec 16 00 mov 0x16eca8,%edi
123b63: 83 c4 10 add $0x10,%esp
123b66: e9 e2 00 00 00 jmp 123c4d <rtems_rate_monotonic_report_statistics_with_plugin+0x139>
id <= _Rate_monotonic_Information.maximum_id ;
id++ ) {
status = rtems_rate_monotonic_get_statistics( id, &the_stats );
123b6b: 51 push %ecx
123b6c: 51 push %ecx
123b6d: 8d 45 b0 lea -0x50(%ebp),%eax
123b70: 50 push %eax
123b71: 57 push %edi
123b72: e8 b9 9d 00 00 call 12d930 <rtems_rate_monotonic_get_statistics>
if ( status != RTEMS_SUCCESSFUL )
123b77: 83 c4 10 add $0x10,%esp
123b7a: 85 c0 test %eax,%eax
123b7c: 0f 85 ca 00 00 00 jne 123c4c <rtems_rate_monotonic_report_statistics_with_plugin+0x138>
#if defined(RTEMS_DEBUG)
status = rtems_rate_monotonic_get_status( id, &the_status );
if ( status != RTEMS_SUCCESSFUL )
continue;
#else
(void) rtems_rate_monotonic_get_status( id, &the_status );
123b82: 50 push %eax
123b83: 50 push %eax
123b84: 8d 55 98 lea -0x68(%ebp),%edx
123b87: 52 push %edx
123b88: 57 push %edi
123b89: e8 2e 9f 00 00 call 12dabc <rtems_rate_monotonic_get_status>
#endif
rtems_object_get_name( the_status.owner, sizeof(name), name );
123b8e: 83 c4 0c add $0xc,%esp
123b91: 8d 55 8b lea -0x75(%ebp),%edx
123b94: 52 push %edx
123b95: 6a 05 push $0x5
123b97: ff 75 98 pushl -0x68(%ebp)
123b9a: 89 55 84 mov %edx,-0x7c(%ebp)
123b9d: e8 e2 c9 fe ff call 110584 <rtems_object_get_name>
/*
* Print part of report line that is not dependent on granularity
*/
(*print)( context,
123ba2: 58 pop %eax
123ba3: 5a pop %edx
123ba4: ff 75 b4 pushl -0x4c(%ebp)
123ba7: ff 75 b0 pushl -0x50(%ebp)
123baa: 8b 55 84 mov -0x7c(%ebp),%edx
123bad: 52 push %edx
123bae: 57 push %edi
123baf: 68 46 06 15 00 push $0x150646
123bb4: 56 push %esi
123bb5: ff d3 call *%ebx
);
/*
* If the count is zero, don't print statistics
*/
if (the_stats.count == 0) {
123bb7: 8b 45 b0 mov -0x50(%ebp),%eax
123bba: 83 c4 20 add $0x20,%esp
123bbd: 85 c0 test %eax,%eax
123bbf: 75 0f jne 123bd0 <rtems_rate_monotonic_report_statistics_with_plugin+0xbc>
(*print)( context, "\n" );
123bc1: 51 push %ecx
123bc2: 51 push %ecx
123bc3: 68 29 b1 14 00 push $0x14b129
123bc8: 56 push %esi
123bc9: ff d3 call *%ebx
continue;
123bcb: 83 c4 10 add $0x10,%esp
123bce: eb 7c jmp 123c4c <rtems_rate_monotonic_report_statistics_with_plugin+0x138>
struct timespec cpu_average;
struct timespec *min_cpu = &the_stats.min_cpu_time;
struct timespec *max_cpu = &the_stats.max_cpu_time;
struct timespec *total_cpu = &the_stats.total_cpu_time;
_Timespec_Divide_by_integer( total_cpu, the_stats.count, &cpu_average );
123bd0: 52 push %edx
123bd1: 8d 55 90 lea -0x70(%ebp),%edx
123bd4: 52 push %edx
123bd5: 50 push %eax
{
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
struct timespec cpu_average;
struct timespec *min_cpu = &the_stats.min_cpu_time;
struct timespec *max_cpu = &the_stats.max_cpu_time;
struct timespec *total_cpu = &the_stats.total_cpu_time;
123bd6: 8d 45 c8 lea -0x38(%ebp),%eax
_Timespec_Divide_by_integer( total_cpu, the_stats.count, &cpu_average );
123bd9: 50 push %eax
123bda: e8 79 09 00 00 call 124558 <_Timespec_Divide_by_integer>
(*print)( context,
123bdf: 8b 45 94 mov -0x6c(%ebp),%eax
123be2: b9 e8 03 00 00 mov $0x3e8,%ecx
123be7: 99 cltd
123be8: f7 f9 idiv %ecx
123bea: 50 push %eax
123beb: ff 75 90 pushl -0x70(%ebp)
123bee: 8b 45 c4 mov -0x3c(%ebp),%eax
123bf1: 99 cltd
123bf2: f7 f9 idiv %ecx
123bf4: 50 push %eax
123bf5: ff 75 c0 pushl -0x40(%ebp)
123bf8: 8b 45 bc mov -0x44(%ebp),%eax
123bfb: 99 cltd
123bfc: f7 f9 idiv %ecx
123bfe: 50 push %eax
123bff: ff 75 b8 pushl -0x48(%ebp)
123c02: 68 5d 06 15 00 push $0x15065d
123c07: 56 push %esi
123c08: 89 4d 84 mov %ecx,-0x7c(%ebp)
123c0b: ff d3 call *%ebx
struct timespec wall_average;
struct timespec *min_wall = &the_stats.min_wall_time;
struct timespec *max_wall = &the_stats.max_wall_time;
struct timespec *total_wall = &the_stats.total_wall_time;
_Timespec_Divide_by_integer(total_wall, the_stats.count, &wall_average);
123c0d: 83 c4 2c add $0x2c,%esp
123c10: 8d 45 90 lea -0x70(%ebp),%eax
123c13: 50 push %eax
123c14: ff 75 b0 pushl -0x50(%ebp)
{
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
struct timespec wall_average;
struct timespec *min_wall = &the_stats.min_wall_time;
struct timespec *max_wall = &the_stats.max_wall_time;
struct timespec *total_wall = &the_stats.total_wall_time;
123c17: 8d 45 e0 lea -0x20(%ebp),%eax
_Timespec_Divide_by_integer(total_wall, the_stats.count, &wall_average);
123c1a: 50 push %eax
123c1b: e8 38 09 00 00 call 124558 <_Timespec_Divide_by_integer>
(*print)( context,
123c20: 8b 45 94 mov -0x6c(%ebp),%eax
123c23: 8b 4d 84 mov -0x7c(%ebp),%ecx
123c26: 99 cltd
123c27: f7 f9 idiv %ecx
123c29: 50 push %eax
123c2a: ff 75 90 pushl -0x70(%ebp)
123c2d: 8b 45 dc mov -0x24(%ebp),%eax
123c30: 99 cltd
123c31: f7 f9 idiv %ecx
123c33: 50 push %eax
123c34: ff 75 d8 pushl -0x28(%ebp)
123c37: 8b 45 d4 mov -0x2c(%ebp),%eax
123c3a: 99 cltd
123c3b: f7 f9 idiv %ecx
123c3d: 50 push %eax
123c3e: ff 75 d0 pushl -0x30(%ebp)
123c41: 68 7c 06 15 00 push $0x15067c
123c46: 56 push %esi
123c47: ff d3 call *%ebx
123c49: 83 c4 30 add $0x30,%esp
* Cycle through all possible ids and try to report on each one. If it
* is a period that is inactive, we just get an error back. No big deal.
*/
for ( id=_Rate_monotonic_Information.minimum_id ;
id <= _Rate_monotonic_Information.maximum_id ;
id++ ) {
123c4c: 47 inc %edi
/*
* Cycle through all possible ids and try to report on each one. If it
* is a period that is inactive, we just get an error back. No big deal.
*/
for ( id=_Rate_monotonic_Information.minimum_id ;
123c4d: 3b 3d ac ec 16 00 cmp 0x16ecac,%edi
123c53: 0f 86 12 ff ff ff jbe 123b6b <rtems_rate_monotonic_report_statistics_with_plugin+0x57>
the_stats.min_wall_time, the_stats.max_wall_time, ival_wall, fval_wall
);
#endif
}
}
}
123c59: 8d 65 f4 lea -0xc(%ebp),%esp
123c5c: 5b pop %ebx
123c5d: 5e pop %esi
123c5e: 5f pop %edi
123c5f: 5d pop %ebp
123c60: c3 ret
0010abb5 <rtems_rbheap_allocate>:
return big_enough;
}
void *rtems_rbheap_allocate(rtems_rbheap_control *control, size_t size)
{
10abb5: 55 push %ebp
10abb6: 89 e5 mov %esp,%ebp
10abb8: 57 push %edi
10abb9: 56 push %esi
10abba: 53 push %ebx
10abbb: 83 ec 1c sub $0x1c,%esp
10abbe: 8b 4d 08 mov 0x8(%ebp),%ecx
10abc1: 8b 5d 0c mov 0xc(%ebp),%ebx
void *ptr = NULL;
rtems_chain_control *free_chain = &control->free_chunk_chain;
rtems_rbtree_control *chunk_tree = &control->chunk_tree;
uintptr_t alignment = control->alignment;
10abc4: 8b 79 30 mov 0x30(%ecx),%edi
#include <stdlib.h>
static uintptr_t align_up(uintptr_t alignment, uintptr_t value)
{
uintptr_t excess = value % alignment;
10abc7: 89 d8 mov %ebx,%eax
10abc9: 31 d2 xor %edx,%edx
10abcb: f7 f7 div %edi
if (excess > 0) {
10abcd: 89 de mov %ebx,%esi
10abcf: 85 d2 test %edx,%edx
10abd1: 74 05 je 10abd8 <rtems_rbheap_allocate+0x23><== ALWAYS TAKEN
value += alignment - excess;
10abd3: 8d 34 3b lea (%ebx,%edi,1),%esi <== NOT EXECUTED
10abd6: 29 d6 sub %edx,%esi <== NOT EXECUTED
rtems_chain_control *free_chain = &control->free_chunk_chain;
rtems_rbtree_control *chunk_tree = &control->chunk_tree;
uintptr_t alignment = control->alignment;
uintptr_t aligned_size = align_up(alignment, size);
if (size > 0 && size <= aligned_size) {
10abd8: 39 f3 cmp %esi,%ebx
10abda: 77 04 ja 10abe0 <rtems_rbheap_allocate+0x2b><== NEVER TAKEN
10abdc: 85 db test %ebx,%ebx
10abde: 75 07 jne 10abe7 <rtems_rbheap_allocate+0x32>
return big_enough;
}
void *rtems_rbheap_allocate(rtems_rbheap_control *control, size_t size)
{
void *ptr = NULL;
10abe0: 31 c0 xor %eax,%eax
10abe2: e9 8f 00 00 00 jmp 10ac76 <rtems_rbheap_allocate+0xc1>
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_First(
Chain_Control *the_chain
)
{
return _Chain_Head( the_chain )->next;
10abe7: 8b 01 mov (%ecx),%eax
rtems_chain_control *free_chain,
size_t size
)
{
rtems_chain_node *current = rtems_chain_first(free_chain);
const rtems_chain_node *tail = rtems_chain_tail(free_chain);
10abe9: 8d 51 04 lea 0x4(%ecx),%edx
rtems_rbheap_chunk *big_enough = NULL;
10abec: 31 db xor %ebx,%ebx
10abee: eb 0e jmp 10abfe <rtems_rbheap_allocate+0x49>
while (current != tail && big_enough == NULL) {
rtems_rbheap_chunk *free_chunk = (rtems_rbheap_chunk *) current;
if (free_chunk->size >= size) {
10abf0: 31 db xor %ebx,%ebx
10abf2: 39 70 1c cmp %esi,0x1c(%eax)
10abf5: 0f 93 c3 setae %bl
10abf8: f7 db neg %ebx
10abfa: 21 c3 and %eax,%ebx
rtems_rbheap_chunk *chunk = malloc(sizeof(*chunk));
if (chunk != NULL) {
rtems_rbheap_add_to_spare_descriptor_chain(control, chunk);
}
}
10abfc: 8b 00 mov (%eax),%eax
{
rtems_chain_node *current = rtems_chain_first(free_chain);
const rtems_chain_node *tail = rtems_chain_tail(free_chain);
rtems_rbheap_chunk *big_enough = NULL;
while (current != tail && big_enough == NULL) {
10abfe: 85 db test %ebx,%ebx
10ac00: 75 04 jne 10ac06 <rtems_rbheap_allocate+0x51>
10ac02: 39 d0 cmp %edx,%eax
10ac04: 75 ea jne 10abf0 <rtems_rbheap_allocate+0x3b>
uintptr_t aligned_size = align_up(alignment, size);
if (size > 0 && size <= aligned_size) {
rtems_rbheap_chunk *free_chunk = search_free_chunk(free_chain, aligned_size);
if (free_chunk != NULL) {
10ac06: 85 db test %ebx,%ebx
10ac08: 74 d6 je 10abe0 <rtems_rbheap_allocate+0x2b>
uintptr_t free_size = free_chunk->size;
10ac0a: 8b 53 1c mov 0x1c(%ebx),%edx
if (free_size > aligned_size) {
10ac0d: 39 f2 cmp %esi,%edx
10ac0f: 76 4b jbe 10ac5c <rtems_rbheap_allocate+0xa7>
rtems_rbheap_chunk *new_chunk = get_chunk(control);
10ac11: 89 c8 mov %ecx,%eax
10ac13: 89 55 e4 mov %edx,-0x1c(%ebp)
10ac16: 89 4d e0 mov %ecx,-0x20(%ebp)
10ac19: e8 49 fe ff ff call 10aa67 <get_chunk>
10ac1e: 89 c7 mov %eax,%edi
if (new_chunk != NULL) {
10ac20: 85 c0 test %eax,%eax
10ac22: 8b 55 e4 mov -0x1c(%ebp),%edx
10ac25: 8b 4d e0 mov -0x20(%ebp),%ecx
10ac28: 74 b6 je 10abe0 <rtems_rbheap_allocate+0x2b><== NEVER TAKEN
uintptr_t new_free_size = free_size - aligned_size;
10ac2a: 29 f2 sub %esi,%edx
free_chunk->size = new_free_size;
10ac2c: 89 53 1c mov %edx,0x1c(%ebx)
new_chunk->begin = free_chunk->begin + new_free_size;
10ac2f: 03 53 18 add 0x18(%ebx),%edx
10ac32: 89 50 18 mov %edx,0x18(%eax)
new_chunk->size = aligned_size;
10ac35: 89 70 1c mov %esi,0x1c(%eax)
*/
RTEMS_INLINE_ROUTINE void _Chain_Set_off_chain(
Chain_Node *node
)
{
node->next = node->previous = NULL;
10ac38: c7 40 04 00 00 00 00 movl $0x0,0x4(%eax)
10ac3f: c7 00 00 00 00 00 movl $0x0,(%eax)
static void insert_into_tree(
rtems_rbtree_control *tree,
rtems_rbheap_chunk *chunk
)
{
_RBTree_Insert_unprotected(tree, &chunk->tree_node);
10ac45: 53 push %ebx
10ac46: 53 push %ebx
10ac47: 8d 40 08 lea 0x8(%eax),%eax
10ac4a: 50 push %eax
void *rtems_rbheap_allocate(rtems_rbheap_control *control, size_t size)
{
void *ptr = NULL;
rtems_chain_control *free_chain = &control->free_chunk_chain;
rtems_rbtree_control *chunk_tree = &control->chunk_tree;
10ac4b: 83 c1 18 add $0x18,%ecx
static void insert_into_tree(
rtems_rbtree_control *tree,
rtems_rbheap_chunk *chunk
)
{
_RBTree_Insert_unprotected(tree, &chunk->tree_node);
10ac4e: 51 push %ecx
10ac4f: e8 40 15 00 00 call 10c194 <_RBTree_Insert_unprotected>
free_chunk->size = new_free_size;
new_chunk->begin = free_chunk->begin + new_free_size;
new_chunk->size = aligned_size;
rtems_chain_set_off_chain(&new_chunk->chain_node);
insert_into_tree(chunk_tree, new_chunk);
ptr = (void *) new_chunk->begin;
10ac54: 8b 47 18 mov 0x18(%edi),%eax
10ac57: 83 c4 10 add $0x10,%esp
10ac5a: eb 1a jmp 10ac76 <rtems_rbheap_allocate+0xc1>
)
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
10ac5c: 8b 13 mov (%ebx),%edx
previous = the_node->previous;
10ac5e: 8b 43 04 mov 0x4(%ebx),%eax
next->previous = previous;
10ac61: 89 42 04 mov %eax,0x4(%edx)
previous->next = next;
10ac64: 89 10 mov %edx,(%eax)
*/
RTEMS_INLINE_ROUTINE void _Chain_Set_off_chain(
Chain_Node *node
)
{
node->next = node->previous = NULL;
10ac66: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx)
10ac6d: c7 03 00 00 00 00 movl $0x0,(%ebx)
}
} else {
rtems_chain_extract_unprotected(&free_chunk->chain_node);
rtems_chain_set_off_chain(&free_chunk->chain_node);
ptr = (void *) free_chunk->begin;
10ac73: 8b 43 18 mov 0x18(%ebx),%eax
}
}
}
return ptr;
}
10ac76: 8d 65 f4 lea -0xc(%ebp),%esp
10ac79: 5b pop %ebx
10ac7a: 5e pop %esi
10ac7b: 5f pop %edi
10ac7c: 5d pop %ebp
10ac7d: c3 ret
0010ad71 <rtems_rbheap_extend_descriptors_with_malloc>:
void rtems_rbheap_extend_descriptors_with_malloc(rtems_rbheap_control *control)
{
10ad71: 55 push %ebp <== NOT EXECUTED
10ad72: 89 e5 mov %esp,%ebp <== NOT EXECUTED
10ad74: 53 push %ebx <== NOT EXECUTED
10ad75: 83 ec 10 sub $0x10,%esp <== NOT EXECUTED
10ad78: 8b 5d 08 mov 0x8(%ebp),%ebx <== NOT EXECUTED
rtems_rbheap_chunk *chunk = malloc(sizeof(*chunk));
10ad7b: 6a 20 push $0x20 <== NOT EXECUTED
10ad7d: e8 f2 c1 ff ff call 106f74 <malloc> <== NOT EXECUTED
if (chunk != NULL) {
10ad82: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
10ad85: 85 c0 test %eax,%eax <== NOT EXECUTED
10ad87: 74 11 je 10ad9a <rtems_rbheap_extend_descriptors_with_malloc+0x29><== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Prepend_unprotected(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
_Chain_Insert_unprotected(_Chain_Head(the_chain), the_node);
10ad89: 8d 53 0c lea 0xc(%ebx),%edx <== NOT EXECUTED
10ad8c: 89 50 04 mov %edx,0x4(%eax) <== NOT EXECUTED
)
{
Chain_Node *before_node;
the_node->previous = after_node;
before_node = after_node->next;
10ad8f: 8b 53 0c mov 0xc(%ebx),%edx <== NOT EXECUTED
after_node->next = the_node;
10ad92: 89 43 0c mov %eax,0xc(%ebx) <== NOT EXECUTED
the_node->next = before_node;
10ad95: 89 10 mov %edx,(%eax) <== NOT EXECUTED
before_node->previous = the_node;
10ad97: 89 42 04 mov %eax,0x4(%edx) <== NOT EXECUTED
rtems_rbheap_add_to_spare_descriptor_chain(control, chunk);
}
}
10ad9a: 8b 5d fc mov -0x4(%ebp),%ebx <== NOT EXECUTED
10ad9d: c9 leave <== NOT EXECUTED
10ad9e: c3 ret <== NOT EXECUTED
0010ac7e <rtems_rbheap_free>:
_RBTree_Extract_unprotected(chunk_tree, &b->tree_node);
}
}
rtems_status_code rtems_rbheap_free(rtems_rbheap_control *control, void *ptr)
{
10ac7e: 55 push %ebp
10ac7f: 89 e5 mov %esp,%ebp
10ac81: 57 push %edi
10ac82: 56 push %esi
10ac83: 53 push %ebx
10ac84: 83 ec 3c sub $0x3c,%esp
10ac87: 8b 5d 08 mov 0x8(%ebp),%ebx
10ac8a: 8b 55 0c mov 0xc(%ebp),%edx
rtems_status_code sc = RTEMS_SUCCESSFUL;
if (ptr != NULL) {
10ac8d: 85 d2 test %edx,%edx
10ac8f: 0f 84 c6 00 00 00 je 10ad5b <rtems_rbheap_free+0xdd>
rtems_chain_control *free_chain = &control->free_chunk_chain;
rtems_rbtree_control *chunk_tree = &control->chunk_tree;
10ac95: 8d 73 18 lea 0x18(%ebx),%esi
#define NULL_PAGE rtems_rbheap_chunk_of_node(NULL)
static rtems_rbheap_chunk *find(rtems_rbtree_control *chunk_tree, uintptr_t key)
{
rtems_rbheap_chunk chunk = { .begin = key };
10ac98: 8d 7d c8 lea -0x38(%ebp),%edi
10ac9b: b9 08 00 00 00 mov $0x8,%ecx
10aca0: 31 c0 xor %eax,%eax
10aca2: f3 ab rep stos %eax,%es:(%edi)
10aca4: 89 55 e0 mov %edx,-0x20(%ebp)
RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Find_unprotected(
RBTree_Control *the_rbtree,
RBTree_Node *the_node
)
{
RBTree_Node* iter_node = the_rbtree->root;
10aca7: 8b 53 1c mov 0x1c(%ebx),%edx
RBTree_Node* found = NULL;
10acaa: 31 ff xor %edi,%edi
return rtems_rbheap_chunk_of_node(
10acac: 8d 4d d0 lea -0x30(%ebp),%ecx
10acaf: eb 2e jmp 10acdf <rtems_rbheap_free+0x61>
int compare_result;
while (iter_node) {
compare_result = the_rbtree->compare_function(the_node, iter_node);
10acb1: 50 push %eax
10acb2: 50 push %eax
10acb3: 52 push %edx
10acb4: 51 push %ecx
10acb5: 89 55 c0 mov %edx,-0x40(%ebp)
10acb8: 89 4d bc mov %ecx,-0x44(%ebp)
10acbb: ff 56 10 call *0x10(%esi)
if ( _RBTree_Is_equal( compare_result ) ) {
10acbe: 83 c4 10 add $0x10,%esp
10acc1: 85 c0 test %eax,%eax
10acc3: 8b 55 c0 mov -0x40(%ebp),%edx
10acc6: 8b 4d bc mov -0x44(%ebp),%ecx
10acc9: 75 08 jne 10acd3 <rtems_rbheap_free+0x55>
found = iter_node;
if ( the_rbtree->is_unique )
10accb: 80 7e 14 00 cmpb $0x0,0x14(%esi)
10accf: 75 14 jne 10ace5 <rtems_rbheap_free+0x67><== ALWAYS TAKEN
10acd1: 89 d7 mov %edx,%edi <== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _RBTree_Is_greater(
int compare_result
)
{
return compare_result > 0;
10acd3: 85 c0 test %eax,%eax
10acd5: 0f 9f c0 setg %al
10acd8: 0f b6 c0 movzbl %al,%eax
break;
}
RBTree_Direction dir =
(RBTree_Direction) _RBTree_Is_greater( compare_result );
iter_node = iter_node->child[dir];
10acdb: 8b 54 82 04 mov 0x4(%edx,%eax,4),%edx
)
{
RBTree_Node* iter_node = the_rbtree->root;
RBTree_Node* found = NULL;
int compare_result;
while (iter_node) {
10acdf: 85 d2 test %edx,%edx
10ace1: 75 ce jne 10acb1 <rtems_rbheap_free+0x33>
10ace3: 89 fa mov %edi,%edx
10ace5: 8d 7a f8 lea -0x8(%edx),%edi
if (ptr != NULL) {
rtems_chain_control *free_chain = &control->free_chunk_chain;
rtems_rbtree_control *chunk_tree = &control->chunk_tree;
rtems_rbheap_chunk *chunk = find(chunk_tree, (uintptr_t) ptr);
if (chunk != NULL_PAGE) {
10ace8: 83 ff f8 cmp $0xfffffff8,%edi
10aceb: 74 72 je 10ad5f <rtems_rbheap_free+0xe1>
*/
RTEMS_INLINE_ROUTINE bool _Chain_Is_node_off_chain(
const Chain_Node *node
)
{
return (node->next == NULL) && (node->previous == NULL);
10aced: 31 c9 xor %ecx,%ecx
10acef: 83 7a f8 00 cmpl $0x0,-0x8(%edx)
10acf3: 75 09 jne 10acfe <rtems_rbheap_free+0x80>
10acf5: 31 c9 xor %ecx,%ecx
10acf7: 83 7f 04 00 cmpl $0x0,0x4(%edi)
10acfb: 0f 94 c1 sete %cl
check_and_merge(free_chain, chunk_tree, chunk, succ);
add_to_chain(free_chain, chunk);
check_and_merge(free_chain, chunk_tree, chunk, pred);
} else {
sc = RTEMS_INCORRECT_STATE;
10acfe: b8 0e 00 00 00 mov $0xe,%eax
rtems_chain_control *free_chain = &control->free_chunk_chain;
rtems_rbtree_control *chunk_tree = &control->chunk_tree;
rtems_rbheap_chunk *chunk = find(chunk_tree, (uintptr_t) ptr);
if (chunk != NULL_PAGE) {
if (!rtems_rbheap_is_chunk_free(chunk)) {
10ad03: 85 c9 test %ecx,%ecx
10ad05: 74 5d je 10ad64 <rtems_rbheap_free+0xe6>
static rtems_rbheap_chunk *get_next(
const rtems_rbheap_chunk *chunk,
RBTree_Direction dir
)
{
return rtems_rbheap_chunk_of_node(
10ad07: 8d 57 08 lea 0x8(%edi),%edx
10ad0a: 50 push %eax
10ad0b: 50 push %eax
10ad0c: 6a 00 push $0x0
10ad0e: 52 push %edx
10ad0f: 89 55 c0 mov %edx,-0x40(%ebp)
10ad12: e8 6d 16 00 00 call 10c384 <_RBTree_Next_unprotected>
10ad17: 89 45 c4 mov %eax,-0x3c(%ebp)
10ad1a: 58 pop %eax
10ad1b: 5a pop %edx
10ad1c: 6a 01 push $0x1
10ad1e: 8b 55 c0 mov -0x40(%ebp),%edx
10ad21: 52 push %edx
10ad22: e8 5d 16 00 00 call 10c384 <_RBTree_Next_unprotected>
10ad27: 83 e8 08 sub $0x8,%eax
if (chunk != NULL_PAGE) {
if (!rtems_rbheap_is_chunk_free(chunk)) {
rtems_rbheap_chunk *pred = get_next(chunk, RBT_LEFT);
rtems_rbheap_chunk *succ = get_next(chunk, RBT_RIGHT);
check_and_merge(free_chain, chunk_tree, chunk, succ);
10ad2a: 89 04 24 mov %eax,(%esp)
10ad2d: 89 f9 mov %edi,%ecx
10ad2f: 89 f2 mov %esi,%edx
10ad31: 89 d8 mov %ebx,%eax
10ad33: e8 c5 fc ff ff call 10a9fd <check_and_merge>
Chain_Node *the_node
)
{
Chain_Node *before_node;
the_node->previous = after_node;
10ad38: 89 5f 04 mov %ebx,0x4(%edi)
before_node = after_node->next;
10ad3b: 8b 03 mov (%ebx),%eax
after_node->next = the_node;
10ad3d: 89 3b mov %edi,(%ebx)
the_node->next = before_node;
10ad3f: 89 07 mov %eax,(%edi)
before_node->previous = the_node;
10ad41: 89 78 04 mov %edi,0x4(%eax)
static rtems_rbheap_chunk *get_next(
const rtems_rbheap_chunk *chunk,
RBTree_Direction dir
)
{
return rtems_rbheap_chunk_of_node(
10ad44: 8b 45 c4 mov -0x3c(%ebp),%eax
10ad47: 83 e8 08 sub $0x8,%eax
rtems_rbheap_chunk *pred = get_next(chunk, RBT_LEFT);
rtems_rbheap_chunk *succ = get_next(chunk, RBT_RIGHT);
check_and_merge(free_chain, chunk_tree, chunk, succ);
add_to_chain(free_chain, chunk);
check_and_merge(free_chain, chunk_tree, chunk, pred);
10ad4a: 89 04 24 mov %eax,(%esp)
10ad4d: 89 f9 mov %edi,%ecx
10ad4f: 89 f2 mov %esi,%edx
10ad51: 89 d8 mov %ebx,%eax
10ad53: e8 a5 fc ff ff call 10a9fd <check_and_merge>
10ad58: 83 c4 10 add $0x10,%esp
}
}
rtems_status_code rtems_rbheap_free(rtems_rbheap_control *control, void *ptr)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
10ad5b: 31 c0 xor %eax,%eax
10ad5d: eb 05 jmp 10ad64 <rtems_rbheap_free+0xe6>
check_and_merge(free_chain, chunk_tree, chunk, pred);
} else {
sc = RTEMS_INCORRECT_STATE;
}
} else {
sc = RTEMS_INVALID_ID;
10ad5f: b8 04 00 00 00 mov $0x4,%eax
}
}
return sc;
}
10ad64: 8d 65 f4 lea -0xc(%ebp),%esp
10ad67: 5b pop %ebx
10ad68: 5e pop %esi
10ad69: 5f pop %edi
10ad6a: 5d pop %ebp
10ad6b: c3 ret
00119154 <rtems_rfs_bitmap_create_search>:
int
rtems_rfs_bitmap_create_search (rtems_rfs_bitmap_control* control)
{
119154: 55 push %ebp
119155: 89 e5 mov %esp,%ebp
119157: 57 push %edi
119158: 56 push %esi
119159: 53 push %ebx
11915a: 83 ec 2c sub $0x2c,%esp
11915d: 8b 5d 08 mov 0x8(%ebp),%ebx
rtems_rfs_bitmap_map map;
size_t size;
rtems_rfs_bitmap_bit bit;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
119160: 8d 55 e4 lea -0x1c(%ebp),%edx
119163: 89 d8 mov %ebx,%eax
119165: e8 e6 fa ff ff call 118c50 <rtems_rfs_bitmap_load_map>
if (rc > 0)
11916a: 85 c0 test %eax,%eax
11916c: 0f 8f 91 00 00 00 jg 119203 <rtems_rfs_bitmap_create_search+0xaf><== NEVER TAKEN
return rc;
control->free = 0;
119172: c7 43 10 00 00 00 00 movl $0x0,0x10(%ebx)
search_map = control->search_bits;
119179: 8b 7b 14 mov 0x14(%ebx),%edi
size = control->size;
11917c: 8b 73 0c mov 0xc(%ebx),%esi
bit = 0;
*search_map = RTEMS_RFS_BITMAP_ELEMENT_CLEAR;
11917f: c7 07 ff ff ff ff movl $0xffffffff,(%edi)
119185: 8b 55 e4 mov -0x1c(%ebp),%edx
119188: 89 55 d0 mov %edx,-0x30(%ebp)
return rc;
control->free = 0;
search_map = control->search_bits;
size = control->size;
bit = 0;
11918b: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)
*search_map = RTEMS_RFS_BITMAP_ELEMENT_CLEAR;
while (size)
119192: eb 69 jmp 1191fd <rtems_rfs_bitmap_create_search+0xa9>
{
rtems_rfs_bitmap_element bits;
int available;
if (size < rtems_rfs_bitmap_element_bits ())
119194: 83 fe 1f cmp $0x1f,%esi
119197: 77 17 ja 1191b0 <rtems_rfs_bitmap_create_search+0x5c>
{
bits = rtems_rfs_bitmap_merge (*map,
119199: 50 push %eax
11919a: 50 push %eax
11919b: 56 push %esi
11919c: 6a 00 push $0x0
11919e: e8 f7 fc ff ff call 118e9a <rtems_rfs_bitmap_mask_section>
1191a3: 83 c4 10 add $0x10,%esp
{
/*
* Use the normal bit operators because we do not change the bits just merge
* the 2 separate parts.
*/
bits1 &= mask;
1191a6: 8b 55 d0 mov -0x30(%ebp),%edx
1191a9: 23 02 and (%edx),%eax
if (size < rtems_rfs_bitmap_element_bits ())
{
bits = rtems_rfs_bitmap_merge (*map,
RTEMS_RFS_BITMAP_ELEMENT_SET,
rtems_rfs_bitmap_mask_section (0, size));
available = size;
1191ab: 89 75 c8 mov %esi,-0x38(%ebp)
1191ae: eb 0c jmp 1191bc <rtems_rfs_bitmap_create_search+0x68>
}
else
{
bits = *map;
1191b0: 8b 55 d0 mov -0x30(%ebp),%edx
1191b3: 8b 02 mov (%edx),%eax
available = rtems_rfs_bitmap_element_bits ();
1191b5: c7 45 c8 20 00 00 00 movl $0x20,-0x38(%ebp)
}
if (rtems_rfs_bitmap_match (bits, RTEMS_RFS_BITMAP_ELEMENT_SET))
1191bc: 85 c0 test %eax,%eax
1191be: 75 0b jne 1191cb <rtems_rfs_bitmap_create_search+0x77>
for (b = 0; b < available; b++)
if (!rtems_rfs_bitmap_test (bits, b))
control->free++;
}
size -= available;
1191c0: 2b 75 c8 sub -0x38(%ebp),%esi
if (bit == rtems_rfs_bitmap_element_bits ())
1191c3: 83 7d d4 20 cmpl $0x20,-0x2c(%ebp)
1191c7: 75 2d jne 1191f6 <rtems_rfs_bitmap_create_search+0xa2>
1191c9: eb 18 jmp 1191e3 <rtems_rfs_bitmap_create_search+0x8f>
{
bits = *map;
available = rtems_rfs_bitmap_element_bits ();
}
if (rtems_rfs_bitmap_match (bits, RTEMS_RFS_BITMAP_ELEMENT_SET))
1191cb: 31 c9 xor %ecx,%ecx
*/
static bool
rtems_rfs_bitmap_test (rtems_rfs_bitmap_element target,
rtems_rfs_bitmap_bit bit)
{
return RTEMS_RFS_BITMAP_TEST_BIT (target, bit);
1191cd: ba 01 00 00 00 mov $0x1,%edx
1191d2: d3 e2 shl %cl,%edx
rtems_rfs_bitmap_set (*search_map, bit);
else
{
int b;
for (b = 0; b < available; b++)
if (!rtems_rfs_bitmap_test (bits, b))
1191d4: 85 c2 test %eax,%edx
1191d6: 74 03 je 1191db <rtems_rfs_bitmap_create_search+0x87>
control->free++;
1191d8: ff 43 10 incl 0x10(%ebx)
if (rtems_rfs_bitmap_match (bits, RTEMS_RFS_BITMAP_ELEMENT_SET))
rtems_rfs_bitmap_set (*search_map, bit);
else
{
int b;
for (b = 0; b < available; b++)
1191db: 41 inc %ecx
1191dc: 3b 4d c8 cmp -0x38(%ebp),%ecx
1191df: 7c ec jl 1191cd <rtems_rfs_bitmap_create_search+0x79>
1191e1: eb dd jmp 1191c0 <rtems_rfs_bitmap_create_search+0x6c>
if (bit == rtems_rfs_bitmap_element_bits ())
{
bit = 0;
search_map++;
*search_map = RTEMS_RFS_BITMAP_ELEMENT_CLEAR;
1191e3: c7 47 04 ff ff ff ff movl $0xffffffff,0x4(%edi)
size -= available;
if (bit == rtems_rfs_bitmap_element_bits ())
{
bit = 0;
search_map++;
1191ea: 83 c7 04 add $0x4,%edi
size -= available;
if (bit == rtems_rfs_bitmap_element_bits ())
{
bit = 0;
1191ed: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)
1191f4: eb 03 jmp 1191f9 <rtems_rfs_bitmap_create_search+0xa5>
search_map++;
*search_map = RTEMS_RFS_BITMAP_ELEMENT_CLEAR;
}
else
bit++;
1191f6: ff 45 d4 incl -0x2c(%ebp)
1191f9: 83 45 d0 04 addl $0x4,-0x30(%ebp)
search_map = control->search_bits;
size = control->size;
bit = 0;
*search_map = RTEMS_RFS_BITMAP_ELEMENT_CLEAR;
while (size)
1191fd: 85 f6 test %esi,%esi
1191ff: 75 93 jne 119194 <rtems_rfs_bitmap_create_search+0x40>
else
bit++;
map++;
}
return 0;
119201: 31 c0 xor %eax,%eax
}
119203: 8d 65 f4 lea -0xc(%ebp),%esp
119206: 5b pop %ebx
119207: 5e pop %esi
119208: 5f pop %edi
119209: 5d pop %ebp
11920a: c3 ret
00118c50 <rtems_rfs_bitmap_load_map>:
* @return int The error number (errno). No error if 0.
*/
static int
rtems_rfs_bitmap_load_map (rtems_rfs_bitmap_control* control,
rtems_rfs_bitmap_map* map)
{
118c50: 55 push %ebp
118c51: 89 e5 mov %esp,%ebp
118c53: 56 push %esi
118c54: 53 push %ebx
118c55: 89 c3 mov %eax,%ebx
int rc;
if (!control->buffer)
return ENXIO;
118c57: b8 06 00 00 00 mov $0x6,%eax
rtems_rfs_bitmap_load_map (rtems_rfs_bitmap_control* control,
rtems_rfs_bitmap_map* map)
{
int rc;
if (!control->buffer)
118c5c: 83 3b 00 cmpl $0x0,(%ebx)
118c5f: 74 2a je 118c8b <rtems_rfs_bitmap_load_map+0x3b><== NEVER TAKEN
118c61: 89 d6 mov %edx,%esi
return ENXIO;
*map = NULL;
118c63: c7 02 00 00 00 00 movl $0x0,(%edx)
rc = rtems_rfs_buffer_handle_request (control->fs,
118c69: 6a 01 push $0x1
118c6b: ff 73 08 pushl 0x8(%ebx)
118c6e: ff 33 pushl (%ebx)
118c70: ff 73 04 pushl 0x4(%ebx)
118c73: e8 32 16 00 00 call 11a2aa <rtems_rfs_buffer_handle_request>
control->buffer,
control->block,
true);
if (rc)
118c78: 83 c4 10 add $0x10,%esp
118c7b: 85 c0 test %eax,%eax
118c7d: 75 0c jne 118c8b <rtems_rfs_bitmap_load_map+0x3b><== NEVER TAKEN
return rc;
*map = rtems_rfs_buffer_data (control->buffer);
118c7f: 8b 13 mov (%ebx),%edx
118c81: 8b 52 08 mov 0x8(%edx),%edx
118c84: 8b 52 1c mov 0x1c(%edx),%edx
118c87: 89 16 mov %edx,(%esi)
118c89: eb 00 jmp 118c8b <rtems_rfs_bitmap_load_map+0x3b>
return 0;
}
118c8b: 8d 65 f8 lea -0x8(%ebp),%esp
118c8e: 5b pop %ebx
118c8f: 5e pop %esi
118c90: 5d pop %ebp
118c91: c3 ret
001190ab <rtems_rfs_bitmap_map_alloc>:
int
rtems_rfs_bitmap_map_alloc (rtems_rfs_bitmap_control* control,
rtems_rfs_bitmap_bit seed,
bool* allocated,
rtems_rfs_bitmap_bit* bit)
{
1190ab: 55 push %ebp
1190ac: 89 e5 mov %esp,%ebp
1190ae: 57 push %edi
1190af: 56 push %esi
1190b0: 53 push %ebx
1190b1: 83 ec 0c sub $0xc,%esp
1190b4: 8b 5d 08 mov 0x8(%ebp),%ebx
int rc = 0;
/*
* By default we assume the allocation failed.
*/
*allocated = false;
1190b7: 8b 45 10 mov 0x10(%ebp),%eax
1190ba: c6 00 00 movb $0x0,(%eax)
* seed up then from the seed down a window number of bits, then repeat the
* process from the window distance from the seed, again above then
* below. Keep moving out until all bits have been searched.
*/
upper_seed = seed;
lower_seed = seed;
1190bd: 8b 7d 0c mov 0xc(%ebp),%edi
* of bits from the original seed above then below. That is search from the
* seed up then from the seed down a window number of bits, then repeat the
* process from the window distance from the seed, again above then
* below. Keep moving out until all bits have been searched.
*/
upper_seed = seed;
1190c0: 89 fe mov %edi,%esi
* we have searched all of the map. The seed may not be aligned to a window
* boundary so we may need to search a partial window and this may also not
* be balanced for the upper or lower seeds. We move to the limits, search
* then return false if no clear bits are found.
*/
while (((upper_seed >= 0) && (upper_seed < control->size))
1190c2: eb 70 jmp 119134 <rtems_rfs_bitmap_map_alloc+0x89>
|| ((lower_seed >= 0) && (lower_seed < control->size)))
{
/*
* Search up first so bits allocated in succession are grouped together.
*/
if (upper_seed < control->size)
1190c4: 3b 73 0c cmp 0xc(%ebx),%esi
1190c7: 72 06 jb 1190cf <rtems_rfs_bitmap_map_alloc+0x24>
window, 1);
if ((rc > 0) || *allocated)
break;
}
if (lower_seed >= 0)
1190c9: 85 ff test %edi,%edi
1190cb: 79 30 jns 1190fd <rtems_rfs_bitmap_map_alloc+0x52>
1190cd: eb 27 jmp 1190f6 <rtems_rfs_bitmap_map_alloc+0x4b>
/*
* Search up first so bits allocated in succession are grouped together.
*/
if (upper_seed < control->size)
{
*bit = upper_seed;
1190cf: 8b 45 14 mov 0x14(%ebp),%eax
1190d2: 89 30 mov %esi,(%eax)
rc = rtems_rfs_search_map_for_clear_bit (control, bit, allocated,
1190d4: 83 ec 0c sub $0xc,%esp
1190d7: 6a 01 push $0x1
1190d9: 8b 4d 10 mov 0x10(%ebp),%ecx
1190dc: 89 c2 mov %eax,%edx
1190de: 89 d8 mov %ebx,%eax
1190e0: e8 ad fb ff ff call 118c92 <rtems_rfs_search_map_for_clear_bit.constprop.1>
window, 1);
if ((rc > 0) || *allocated)
1190e5: 83 c4 10 add $0x10,%esp
1190e8: 85 c0 test %eax,%eax
1190ea: 7f 5e jg 11914a <rtems_rfs_bitmap_map_alloc+0x9f><== NEVER TAKEN
1190ec: 8b 45 10 mov 0x10(%ebp),%eax
1190ef: 80 38 00 cmpb $0x0,(%eax)
1190f2: 74 d5 je 1190c9 <rtems_rfs_bitmap_map_alloc+0x1e>
1190f4: eb 54 jmp 11914a <rtems_rfs_bitmap_map_alloc+0x9f>
/*
* Do not bound the limits at the edges of the map. Do not update if an
* edge has been passed.
*/
if (upper_seed < control->size)
1190f6: 3b 73 0c cmp 0xc(%ebx),%esi
1190f9: 72 29 jb 119124 <rtems_rfs_bitmap_map_alloc+0x79>
1190fb: eb 2d jmp 11912a <rtems_rfs_bitmap_map_alloc+0x7f>
break;
}
if (lower_seed >= 0)
{
*bit = lower_seed;
1190fd: 8b 45 14 mov 0x14(%ebp),%eax
119100: 89 38 mov %edi,(%eax)
rc = rtems_rfs_search_map_for_clear_bit (control, bit, allocated,
119102: 83 ec 0c sub $0xc,%esp
119105: 6a ff push $0xffffffff
119107: 8b 4d 10 mov 0x10(%ebp),%ecx
11910a: 89 c2 mov %eax,%edx
11910c: 89 d8 mov %ebx,%eax
11910e: e8 7f fb ff ff call 118c92 <rtems_rfs_search_map_for_clear_bit.constprop.1>
window, -1);
if ((rc > 0) || *allocated)
119113: 83 c4 10 add $0x10,%esp
119116: 85 c0 test %eax,%eax
119118: 7f 30 jg 11914a <rtems_rfs_bitmap_map_alloc+0x9f><== NEVER TAKEN
11911a: 8b 45 10 mov 0x10(%ebp),%eax
11911d: 80 38 00 cmpb $0x0,(%eax)
119120: 74 d4 je 1190f6 <rtems_rfs_bitmap_map_alloc+0x4b>
119122: eb 26 jmp 11914a <rtems_rfs_bitmap_map_alloc+0x9f>
/*
* Do not bound the limits at the edges of the map. Do not update if an
* edge has been passed.
*/
if (upper_seed < control->size)
upper_seed += window;
119124: 81 c6 00 08 00 00 add $0x800,%esi
if (lower_seed >= 0)
11912a: 85 ff test %edi,%edi
11912c: 78 06 js 119134 <rtems_rfs_bitmap_map_alloc+0x89>
lower_seed -= window;
11912e: 81 ef 00 08 00 00 sub $0x800,%edi
* we have searched all of the map. The seed may not be aligned to a window
* boundary so we may need to search a partial window and this may also not
* be balanced for the upper or lower seeds. We move to the limits, search
* then return false if no clear bits are found.
*/
while (((upper_seed >= 0) && (upper_seed < control->size))
119134: 85 f6 test %esi,%esi
119136: 78 05 js 11913d <rtems_rfs_bitmap_map_alloc+0x92>
119138: 3b 73 0c cmp 0xc(%ebx),%esi
11913b: 72 87 jb 1190c4 <rtems_rfs_bitmap_map_alloc+0x19>
|| ((lower_seed >= 0) && (lower_seed < control->size)))
11913d: 85 ff test %edi,%edi
11913f: 78 09 js 11914a <rtems_rfs_bitmap_map_alloc+0x9f>
119141: 3b 7b 0c cmp 0xc(%ebx),%edi
119144: 0f 82 7a ff ff ff jb 1190c4 <rtems_rfs_bitmap_map_alloc+0x19>
if (lower_seed >= 0)
lower_seed -= window;
}
return 0;
}
11914a: 31 c0 xor %eax,%eax
11914c: 8d 65 f4 lea -0xc(%ebp),%esp
11914f: 5b pop %ebx
119150: 5e pop %esi
119151: 5f pop %edi
119152: 5d pop %ebp
119153: c3 ret
00118f2b <rtems_rfs_bitmap_map_clear>:
int
rtems_rfs_bitmap_map_clear (rtems_rfs_bitmap_control* control,
rtems_rfs_bitmap_bit bit)
{
118f2b: 55 push %ebp
118f2c: 89 e5 mov %esp,%ebp
118f2e: 57 push %edi
118f2f: 56 push %esi
118f30: 53 push %ebx
118f31: 83 ec 2c sub $0x2c,%esp
118f34: 8b 5d 08 mov 0x8(%ebp),%ebx
rtems_rfs_bitmap_map map;
rtems_rfs_bitmap_map search_map;
int index;
int offset;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
118f37: 8d 55 e4 lea -0x1c(%ebp),%edx
118f3a: 89 d8 mov %ebx,%eax
118f3c: e8 0f fd ff ff call 118c50 <rtems_rfs_bitmap_load_map>
if (rc > 0)
118f41: 85 c0 test %eax,%eax
118f43: 7f 3c jg 118f81 <rtems_rfs_bitmap_map_clear+0x56><== NEVER TAKEN
return rc;
if (bit >= control->size)
return EINVAL;
118f45: b8 16 00 00 00 mov $0x16,%eax
int offset;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
if (rc > 0)
return rc;
if (bit >= control->size)
118f4a: 8b 4d 0c mov 0xc(%ebp),%ecx
118f4d: 3b 4b 0c cmp 0xc(%ebx),%ecx
118f50: 73 2f jae 118f81 <rtems_rfs_bitmap_map_clear+0x56>
return EINVAL;
search_map = control->search_bits;
index = rtems_rfs_bitmap_map_index (bit);
118f52: 89 c8 mov %ecx,%eax
118f54: c1 f8 05 sar $0x5,%eax
offset = rtems_rfs_bitmap_map_offset (bit);
map[index] = rtems_rfs_bitmap_clear (map[index], 1 << offset);
118f57: 8b 7d e4 mov -0x1c(%ebp),%edi
118f5a: ba 01 00 00 00 mov $0x1,%edx
118f5f: 89 d6 mov %edx,%esi
118f61: d3 e6 shl %cl,%esi
*/
static rtems_rfs_bitmap_element
rtems_rfs_bitmap_clear (rtems_rfs_bitmap_element target,
rtems_rfs_bitmap_element bits)
{
return RTEMS_RFS_BITMAP_CLEAR_BITS (target, bits);
118f63: 09 34 87 or %esi,(%edi,%eax,4)
search_map = control->search_bits;
index = rtems_rfs_bitmap_map_index (bit);
offset = rtems_rfs_bitmap_map_offset (bit);
map[index] = rtems_rfs_bitmap_clear (map[index], 1 << offset);
bit = index;
index = rtems_rfs_bitmap_map_index (bit);
118f66: 89 ce mov %ecx,%esi
118f68: c1 fe 0a sar $0xa,%esi
offset = rtems_rfs_bitmap_map_offset(bit);
search_map[index] = rtems_rfs_bitmap_clear (search_map[index], 1 << offset);
118f6b: 88 c1 mov %al,%cl
118f6d: d3 e2 shl %cl,%edx
118f6f: 89 d0 mov %edx,%eax
*/
static rtems_rfs_bitmap_element
rtems_rfs_bitmap_clear (rtems_rfs_bitmap_element target,
rtems_rfs_bitmap_element bits)
{
return RTEMS_RFS_BITMAP_CLEAR_BITS (target, bits);
118f71: 8b 53 14 mov 0x14(%ebx),%edx
118f74: 09 04 b2 or %eax,(%edx,%esi,4)
map[index] = rtems_rfs_bitmap_clear (map[index], 1 << offset);
bit = index;
index = rtems_rfs_bitmap_map_index (bit);
offset = rtems_rfs_bitmap_map_offset(bit);
search_map[index] = rtems_rfs_bitmap_clear (search_map[index], 1 << offset);
rtems_rfs_buffer_mark_dirty (control->buffer);
118f77: 8b 03 mov (%ebx),%eax
118f79: c6 00 01 movb $0x1,(%eax)
control->free++;
118f7c: ff 43 10 incl 0x10(%ebx)
return 0;
118f7f: 31 c0 xor %eax,%eax
}
118f81: 83 c4 2c add $0x2c,%esp
118f84: 5b pop %ebx
118f85: 5e pop %esi
118f86: 5f pop %edi
118f87: 5d pop %ebp
118f88: c3 ret
00119033 <rtems_rfs_bitmap_map_clear_all>:
int
rtems_rfs_bitmap_map_clear_all (rtems_rfs_bitmap_control* control)
{
119033: 55 push %ebp
119034: 89 e5 mov %esp,%ebp
119036: 56 push %esi
119037: 53 push %ebx
119038: 83 ec 10 sub $0x10,%esp
11903b: 8b 5d 08 mov 0x8(%ebp),%ebx
rtems_rfs_bitmap_bit last_search_bit;
size_t elements;
int e;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
11903e: 8d 55 f4 lea -0xc(%ebp),%edx
119041: 89 d8 mov %ebx,%eax
119043: e8 08 fc ff ff call 118c50 <rtems_rfs_bitmap_load_map>
if (rc > 0)
119048: 85 c0 test %eax,%eax
11904a: 7f 58 jg 1190a4 <rtems_rfs_bitmap_map_clear_all+0x71><== NEVER TAKEN
return rc;
elements = rtems_rfs_bitmap_elements (control->size);
11904c: 8b 43 0c mov 0xc(%ebx),%eax
11904f: 48 dec %eax
119050: c1 e8 05 shr $0x5,%eax
119053: 8d 50 01 lea 0x1(%eax),%edx
control->free = elements;
119056: 89 53 10 mov %edx,0x10(%ebx)
for (e = 0; e < elements; e++)
map[e] = RTEMS_RFS_BITMAP_ELEMENT_CLEAR;
119059: 8b 75 f4 mov -0xc(%ebp),%esi
elements = rtems_rfs_bitmap_elements (control->size);
control->free = elements;
for (e = 0; e < elements; e++)
11905c: 31 c9 xor %ecx,%ecx
11905e: eb 08 jmp 119068 <rtems_rfs_bitmap_map_clear_all+0x35>
map[e] = RTEMS_RFS_BITMAP_ELEMENT_CLEAR;
119060: c7 04 8e ff ff ff ff movl $0xffffffff,(%esi,%ecx,4)
elements = rtems_rfs_bitmap_elements (control->size);
control->free = elements;
for (e = 0; e < elements; e++)
119067: 41 inc %ecx
119068: 39 d1 cmp %edx,%ecx
11906a: 72 f4 jb 119060 <rtems_rfs_bitmap_map_clear_all+0x2d>
* Set the un-mapped bits in the last search element so the available logic
* works.
*/
last_search_bit = rtems_rfs_bitmap_map_offset (elements);
if (last_search_bit == 0)
11906c: 83 e2 1f and $0x1f,%edx
11906f: 75 05 jne 119076 <rtems_rfs_bitmap_map_clear_all+0x43>
last_search_bit = rtems_rfs_bitmap_element_bits ();
119071: ba 20 00 00 00 mov $0x20,%edx
elements = rtems_rfs_bitmap_elements (elements);
119076: 89 c1 mov %eax,%ecx
119078: c1 e9 05 shr $0x5,%ecx
for (e = 0; e < (elements - 1); e++)
11907b: 31 c0 xor %eax,%eax
11907d: eb 08 jmp 119087 <rtems_rfs_bitmap_map_clear_all+0x54>
control->search_bits[e] = RTEMS_RFS_BITMAP_ELEMENT_CLEAR;
11907f: c7 04 86 ff ff ff ff movl $0xffffffff,(%esi,%eax,4)
if (last_search_bit == 0)
last_search_bit = rtems_rfs_bitmap_element_bits ();
elements = rtems_rfs_bitmap_elements (elements);
for (e = 0; e < (elements - 1); e++)
119086: 40 inc %eax
119087: 39 c8 cmp %ecx,%eax
119089: 8b 73 14 mov 0x14(%ebx),%esi
11908c: 75 f1 jne 11907f <rtems_rfs_bitmap_map_clear_all+0x4c>
rtems_rfs_bitmap_element
rtems_rfs_bitmap_mask (unsigned int size)
{
rtems_rfs_bitmap_element mask = RTEMS_RFS_BITMAP_ELEMENT_FULL_MASK;
mask >>= (rtems_rfs_bitmap_element_bits () - size);
11908e: b9 20 00 00 00 mov $0x20,%ecx
119093: 29 d1 sub %edx,%ecx
119095: 83 ca ff or $0xffffffff,%edx
119098: d3 ea shr %cl,%edx
11909a: 89 14 86 mov %edx,(%esi,%eax,4)
control->search_bits[elements - 1] =
rtems_rfs_bitmap_merge (RTEMS_RFS_BITMAP_ELEMENT_CLEAR,
RTEMS_RFS_BITMAP_ELEMENT_SET,
rtems_rfs_bitmap_mask (last_search_bit));
rtems_rfs_buffer_mark_dirty (control->buffer);
11909d: 8b 03 mov (%ebx),%eax
11909f: c6 00 01 movb $0x1,(%eax)
return 0;
1190a2: 31 c0 xor %eax,%eax
}
1190a4: 83 c4 10 add $0x10,%esp
1190a7: 5b pop %ebx
1190a8: 5e pop %esi
1190a9: 5d pop %ebp
1190aa: c3 ret
00118ebb <rtems_rfs_bitmap_map_set>:
int
rtems_rfs_bitmap_map_set (rtems_rfs_bitmap_control* control,
rtems_rfs_bitmap_bit bit)
{
118ebb: 55 push %ebp
118ebc: 89 e5 mov %esp,%ebp
118ebe: 57 push %edi
118ebf: 56 push %esi
118ec0: 53 push %ebx
118ec1: 83 ec 2c sub $0x2c,%esp
118ec4: 8b 5d 08 mov 0x8(%ebp),%ebx
rtems_rfs_bitmap_map map;
rtems_rfs_bitmap_map search_map;
int index;
int offset;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
118ec7: 8d 55 e4 lea -0x1c(%ebp),%edx
118eca: 89 d8 mov %ebx,%eax
118ecc: e8 7f fd ff ff call 118c50 <rtems_rfs_bitmap_load_map>
if (rc > 0)
118ed1: 85 c0 test %eax,%eax
118ed3: 7f 4e jg 118f23 <rtems_rfs_bitmap_map_set+0x68><== NEVER TAKEN
return rc;
if (bit >= control->size)
return EINVAL;
118ed5: b8 16 00 00 00 mov $0x16,%eax
int offset;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
if (rc > 0)
return rc;
if (bit >= control->size)
118eda: 8b 4d 0c mov 0xc(%ebp),%ecx
118edd: 3b 4b 0c cmp 0xc(%ebx),%ecx
118ee0: 73 41 jae 118f23 <rtems_rfs_bitmap_map_set+0x68>
return EINVAL;
search_map = control->search_bits;
118ee2: 8b 53 14 mov 0x14(%ebx),%edx
index = rtems_rfs_bitmap_map_index (bit);
118ee5: c1 f9 05 sar $0x5,%ecx
118ee8: 89 4d d4 mov %ecx,-0x2c(%ebp)
offset = rtems_rfs_bitmap_map_offset (bit);
map[index] = rtems_rfs_bitmap_set (map[index], 1 << offset);
118eeb: 8b 45 e4 mov -0x1c(%ebp),%eax
118eee: 8d 04 88 lea (%eax,%ecx,4),%eax
118ef1: bf 01 00 00 00 mov $0x1,%edi
118ef6: 89 fe mov %edi,%esi
118ef8: 8a 4d 0c mov 0xc(%ebp),%cl
118efb: d3 e6 shl %cl,%esi
*/
static rtems_rfs_bitmap_element
rtems_rfs_bitmap_set (rtems_rfs_bitmap_element target,
rtems_rfs_bitmap_element bits)
{
return RTEMS_RFS_BITMAP_SET_BITS (target, bits);
118efd: f7 d6 not %esi
118eff: 8b 08 mov (%eax),%ecx
118f01: 21 ce and %ecx,%esi
if (bit >= control->size)
return EINVAL;
search_map = control->search_bits;
index = rtems_rfs_bitmap_map_index (bit);
offset = rtems_rfs_bitmap_map_offset (bit);
map[index] = rtems_rfs_bitmap_set (map[index], 1 << offset);
118f03: 89 30 mov %esi,(%eax)
offset = rtems_rfs_bitmap_map_offset (bit);
search_map[index] = rtems_rfs_bitmap_set (search_map[index], 1 << offset);
control->free--;
rtems_rfs_buffer_mark_dirty (control->buffer);
}
return 0;
118f05: 31 c0 xor %eax,%eax
return EINVAL;
search_map = control->search_bits;
index = rtems_rfs_bitmap_map_index (bit);
offset = rtems_rfs_bitmap_map_offset (bit);
map[index] = rtems_rfs_bitmap_set (map[index], 1 << offset);
if (rtems_rfs_bitmap_match(map[index], RTEMS_RFS_BITMAP_ELEMENT_SET))
118f07: 85 f6 test %esi,%esi
118f09: 75 18 jne 118f23 <rtems_rfs_bitmap_map_set+0x68>
{
bit = index;
index = rtems_rfs_bitmap_map_index (bit);
118f0b: 8b 75 0c mov 0xc(%ebp),%esi
118f0e: c1 fe 0a sar $0xa,%esi
offset = rtems_rfs_bitmap_map_offset (bit);
search_map[index] = rtems_rfs_bitmap_set (search_map[index], 1 << offset);
118f11: 8a 4d d4 mov -0x2c(%ebp),%cl
118f14: d3 e7 shl %cl,%edi
*/
static rtems_rfs_bitmap_element
rtems_rfs_bitmap_set (rtems_rfs_bitmap_element target,
rtems_rfs_bitmap_element bits)
{
return RTEMS_RFS_BITMAP_SET_BITS (target, bits);
118f16: f7 d7 not %edi
118f18: 21 3c b2 and %edi,(%edx,%esi,4)
{
bit = index;
index = rtems_rfs_bitmap_map_index (bit);
offset = rtems_rfs_bitmap_map_offset (bit);
search_map[index] = rtems_rfs_bitmap_set (search_map[index], 1 << offset);
control->free--;
118f1b: ff 4b 10 decl 0x10(%ebx)
rtems_rfs_buffer_mark_dirty (control->buffer);
118f1e: 8b 13 mov (%ebx),%edx
118f20: c6 02 01 movb $0x1,(%edx)
}
return 0;
}
118f23: 83 c4 2c add $0x2c,%esp
118f26: 5b pop %ebx
118f27: 5e pop %esi
118f28: 5f pop %edi
118f29: 5d pop %ebp
118f2a: c3 ret
00118fcf <rtems_rfs_bitmap_map_set_all>:
int
rtems_rfs_bitmap_map_set_all (rtems_rfs_bitmap_control* control)
{
118fcf: 55 push %ebp
118fd0: 89 e5 mov %esp,%ebp
118fd2: 56 push %esi
118fd3: 53 push %ebx
118fd4: 83 ec 10 sub $0x10,%esp
118fd7: 8b 5d 08 mov 0x8(%ebp),%ebx
rtems_rfs_bitmap_map map;
size_t elements;
int e;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
118fda: 8d 55 f4 lea -0xc(%ebp),%edx
118fdd: 89 d8 mov %ebx,%eax
118fdf: e8 6c fc ff ff call 118c50 <rtems_rfs_bitmap_load_map>
if (rc > 0)
118fe4: 85 c0 test %eax,%eax
118fe6: 7f 44 jg 11902c <rtems_rfs_bitmap_map_set_all+0x5d><== NEVER TAKEN
return rc;
elements = rtems_rfs_bitmap_elements (control->size);
118fe8: 8b 43 0c mov 0xc(%ebx),%eax
118feb: 48 dec %eax
118fec: c1 e8 05 shr $0x5,%eax
118fef: 8d 48 01 lea 0x1(%eax),%ecx
control->free = 0;
118ff2: c7 43 10 00 00 00 00 movl $0x0,0x10(%ebx)
for (e = 0; e < elements; e++)
map[e] = RTEMS_RFS_BITMAP_ELEMENT_SET;
118ff9: 8b 75 f4 mov -0xc(%ebp),%esi
elements = rtems_rfs_bitmap_elements (control->size);
control->free = 0;
for (e = 0; e < elements; e++)
118ffc: 31 d2 xor %edx,%edx
118ffe: eb 08 jmp 119008 <rtems_rfs_bitmap_map_set_all+0x39>
map[e] = RTEMS_RFS_BITMAP_ELEMENT_SET;
119000: c7 04 96 00 00 00 00 movl $0x0,(%esi,%edx,4)
elements = rtems_rfs_bitmap_elements (control->size);
control->free = 0;
for (e = 0; e < elements; e++)
119007: 42 inc %edx
119008: 39 ca cmp %ecx,%edx
11900a: 72 f4 jb 119000 <rtems_rfs_bitmap_map_set_all+0x31>
map[e] = RTEMS_RFS_BITMAP_ELEMENT_SET;
elements = rtems_rfs_bitmap_elements (elements);
11900c: c1 e8 05 shr $0x5,%eax
11900f: 8d 50 01 lea 0x1(%eax),%edx
for (e = 0; e < elements; e++)
119012: 31 c0 xor %eax,%eax
119014: eb 0b jmp 119021 <rtems_rfs_bitmap_map_set_all+0x52>
control->search_bits[e] = RTEMS_RFS_BITMAP_ELEMENT_SET;
119016: 8b 4b 14 mov 0x14(%ebx),%ecx
119019: c7 04 81 00 00 00 00 movl $0x0,(%ecx,%eax,4)
for (e = 0; e < elements; e++)
map[e] = RTEMS_RFS_BITMAP_ELEMENT_SET;
elements = rtems_rfs_bitmap_elements (elements);
for (e = 0; e < elements; e++)
119020: 40 inc %eax
119021: 39 d0 cmp %edx,%eax
119023: 72 f1 jb 119016 <rtems_rfs_bitmap_map_set_all+0x47>
control->search_bits[e] = RTEMS_RFS_BITMAP_ELEMENT_SET;
rtems_rfs_buffer_mark_dirty (control->buffer);
119025: 8b 03 mov (%ebx),%eax
119027: c6 00 01 movb $0x1,(%eax)
return 0;
11902a: 31 c0 xor %eax,%eax
}
11902c: 83 c4 10 add $0x10,%esp
11902f: 5b pop %ebx
119030: 5e pop %esi
119031: 5d pop %ebp
119032: c3 ret
00118f89 <rtems_rfs_bitmap_map_test>:
int
rtems_rfs_bitmap_map_test (rtems_rfs_bitmap_control* control,
rtems_rfs_bitmap_bit bit,
bool* state)
{
118f89: 55 push %ebp
118f8a: 89 e5 mov %esp,%ebp
118f8c: 56 push %esi
118f8d: 53 push %ebx
118f8e: 83 ec 10 sub $0x10,%esp
118f91: 8b 75 08 mov 0x8(%ebp),%esi
118f94: 8b 5d 0c mov 0xc(%ebp),%ebx
rtems_rfs_bitmap_map map;
int index;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
118f97: 8d 55 f4 lea -0xc(%ebp),%edx
118f9a: 89 f0 mov %esi,%eax
118f9c: e8 af fc ff ff call 118c50 <rtems_rfs_bitmap_load_map>
if (rc > 0)
118fa1: 85 c0 test %eax,%eax
118fa3: 7f 23 jg 118fc8 <rtems_rfs_bitmap_map_test+0x3f><== NEVER TAKEN
return rc;
if (bit >= control->size)
return EINVAL;
118fa5: b8 16 00 00 00 mov $0x16,%eax
int index;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
if (rc > 0)
return rc;
if (bit >= control->size)
118faa: 3b 5e 0c cmp 0xc(%esi),%ebx
118fad: 73 19 jae 118fc8 <rtems_rfs_bitmap_map_test+0x3f>
return EINVAL;
index = rtems_rfs_bitmap_map_index (bit);
118faf: 89 da mov %ebx,%edx
118fb1: c1 fa 05 sar $0x5,%edx
*/
static bool
rtems_rfs_bitmap_test (rtems_rfs_bitmap_element target,
rtems_rfs_bitmap_bit bit)
{
return RTEMS_RFS_BITMAP_TEST_BIT (target, bit);
118fb4: b0 01 mov $0x1,%al
118fb6: 88 d9 mov %bl,%cl
118fb8: d3 e0 shl %cl,%eax
118fba: 8b 4d f4 mov -0xc(%ebp),%ecx
118fbd: 85 04 91 test %eax,(%ecx,%edx,4)
if (rc > 0)
return rc;
if (bit >= control->size)
return EINVAL;
index = rtems_rfs_bitmap_map_index (bit);
*state = rtems_rfs_bitmap_test (map[index], bit);
118fc0: 8b 45 10 mov 0x10(%ebp),%eax
118fc3: 0f 94 00 sete (%eax)
return 0;
118fc6: 31 c0 xor %eax,%eax
}
118fc8: 83 c4 10 add $0x10,%esp
118fcb: 5b pop %ebx
118fcc: 5e pop %esi
118fcd: 5d pop %ebp
118fce: c3 ret
00118e88 <rtems_rfs_bitmap_mask>:
return 0;
}
rtems_rfs_bitmap_element
rtems_rfs_bitmap_mask (unsigned int size)
{
118e88: 55 push %ebp <== NOT EXECUTED
118e89: 89 e5 mov %esp,%ebp <== NOT EXECUTED
rtems_rfs_bitmap_element mask = RTEMS_RFS_BITMAP_ELEMENT_FULL_MASK;
mask >>= (rtems_rfs_bitmap_element_bits () - size);
118e8b: b9 20 00 00 00 mov $0x20,%ecx <== NOT EXECUTED
118e90: 2b 4d 08 sub 0x8(%ebp),%ecx <== NOT EXECUTED
118e93: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
118e96: d3 e8 shr %cl,%eax <== NOT EXECUTED
return mask;
}
118e98: 5d pop %ebp <== NOT EXECUTED
118e99: c3 ret <== NOT EXECUTED
00118e9a <rtems_rfs_bitmap_mask_section>:
rtems_rfs_bitmap_element
rtems_rfs_bitmap_mask_section (unsigned int start, unsigned int end)
{
118e9a: 55 push %ebp
118e9b: 89 e5 mov %esp,%ebp
118e9d: 8b 55 08 mov 0x8(%ebp),%edx
118ea0: 8b 4d 0c mov 0xc(%ebp),%ecx
rtems_rfs_bitmap_element mask = 0;
118ea3: 31 c0 xor %eax,%eax
if (end > start)
118ea5: 39 d1 cmp %edx,%ecx
118ea7: 76 10 jbe 118eb9 <rtems_rfs_bitmap_mask_section+0x1f><== NEVER TAKEN
rtems_rfs_bitmap_element
rtems_rfs_bitmap_mask (unsigned int size)
{
rtems_rfs_bitmap_element mask = RTEMS_RFS_BITMAP_ELEMENT_FULL_MASK;
mask >>= (rtems_rfs_bitmap_element_bits () - size);
118ea9: 89 d0 mov %edx,%eax
118eab: 29 c8 sub %ecx,%eax
118ead: 8d 48 20 lea 0x20(%eax),%ecx
118eb0: 83 c8 ff or $0xffffffff,%eax
118eb3: d3 e8 shr %cl,%eax
rtems_rfs_bitmap_element
rtems_rfs_bitmap_mask_section (unsigned int start, unsigned int end)
{
rtems_rfs_bitmap_element mask = 0;
if (end > start)
mask = rtems_rfs_bitmap_mask (end - start) << start;
118eb5: 88 d1 mov %dl,%cl
118eb7: d3 e0 shl %cl,%eax
return mask;
}
118eb9: 5d pop %ebp
118eba: c3 ret
0011920b <rtems_rfs_bitmap_open>:
rtems_rfs_bitmap_open (rtems_rfs_bitmap_control* control,
rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* buffer,
size_t size,
rtems_rfs_buffer_block block)
{
11920b: 55 push %ebp
11920c: 89 e5 mov %esp,%ebp
11920e: 53 push %ebx
11920f: 83 ec 10 sub $0x10,%esp
119212: 8b 5d 08 mov 0x8(%ebp),%ebx
119215: 8b 45 14 mov 0x14(%ebp),%eax
size_t elements = rtems_rfs_bitmap_elements (size);
control->buffer = buffer;
119218: 8b 55 10 mov 0x10(%ebp),%edx
11921b: 89 13 mov %edx,(%ebx)
control->fs = fs;
11921d: 8b 55 0c mov 0xc(%ebp),%edx
119220: 89 53 04 mov %edx,0x4(%ebx)
control->block = block;
119223: 8b 55 18 mov 0x18(%ebp),%edx
119226: 89 53 08 mov %edx,0x8(%ebx)
control->size = size;
119229: 89 43 0c mov %eax,0xc(%ebx)
rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* buffer,
size_t size,
rtems_rfs_buffer_block block)
{
size_t elements = rtems_rfs_bitmap_elements (size);
11922c: 48 dec %eax
control->buffer = buffer;
control->fs = fs;
control->block = block;
control->size = size;
elements = rtems_rfs_bitmap_elements (elements);
11922d: c1 e8 0a shr $0xa,%eax
control->search_bits = malloc (elements * sizeof (rtems_rfs_bitmap_element));
119230: 8d 04 85 04 00 00 00 lea 0x4(,%eax,4),%eax
119237: 50 push %eax
119238: e8 c3 11 ff ff call 10a400 <malloc>
11923d: 89 43 14 mov %eax,0x14(%ebx)
if (!control->search_bits)
119240: 83 c4 10 add $0x10,%esp
119243: 85 c0 test %eax,%eax
119245: 74 0c je 119253 <rtems_rfs_bitmap_open+0x48><== NEVER TAKEN
return ENOMEM;
return rtems_rfs_bitmap_create_search (control);
119247: 89 5d 08 mov %ebx,0x8(%ebp)
}
11924a: 8b 5d fc mov -0x4(%ebp),%ebx
11924d: c9 leave
control->search_bits = malloc (elements * sizeof (rtems_rfs_bitmap_element));
if (!control->search_bits)
return ENOMEM;
return rtems_rfs_bitmap_create_search (control);
11924e: e9 01 ff ff ff jmp 119154 <rtems_rfs_bitmap_create_search>
}
119253: b8 0c 00 00 00 mov $0xc,%eax <== NOT EXECUTED
119258: 8b 5d fc mov -0x4(%ebp),%ebx <== NOT EXECUTED
11925b: c9 leave <== NOT EXECUTED
11925c: c3 ret <== NOT EXECUTED
001002ea <rtems_rfs_bitmap_ut_alloc_seq_test>:
bool
rtems_rfs_bitmap_ut_alloc_seq_test (rtems_rfs_bitmap_control* control,
int test,
rtems_rfs_bitmap_bit bit,
size_t size)
{
1002ea: 55 push %ebp
1002eb: 89 e5 mov %esp,%ebp
1002ed: 57 push %edi
1002ee: 56 push %esi
1002ef: 53 push %ebx
1002f0: 83 ec 30 sub $0x30,%esp
1002f3: 8b 5d 0c mov 0xc(%ebp),%ebx
bool state;
int i;
int rc;
printf (" %2d. Set all bits\n", test);
1002f6: 53 push %ebx
1002f7: 68 8b b4 12 00 push $0x12b48b
1002fc: a1 a0 f2 13 00 mov 0x13f2a0,%eax
100301: ff 70 0c pushl 0xc(%eax)
100304: e8 53 e4 01 00 call 11e75c <fiprintf>
rc = rtems_rfs_bitmap_map_set_all (control);
100309: 5e pop %esi
10030a: ff 75 08 pushl 0x8(%ebp)
10030d: e8 e1 f7 00 00 call 10faf3 <rtems_rfs_bitmap_map_set_all>
if (rc > 0)
100312: 83 c4 10 add $0x10,%esp
return true;
}
bool
rtems_rfs_bitmap_ut_alloc_seq_test (rtems_rfs_bitmap_control* control,
100315: 31 f6 xor %esi,%esi
int i;
int rc;
printf (" %2d. Set all bits\n", test);
rc = rtems_rfs_bitmap_map_set_all (control);
if (rc > 0)
100317: 85 c0 test %eax,%eax
100319: 7e 23 jle 10033e <rtems_rfs_bitmap_ut_alloc_seq_test+0x54><== ALWAYS TAKEN
{
printf (" %2d. set all bits: FAIL (%s)\n", test, strerror (rc));
10031b: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10031e: 50 push %eax <== NOT EXECUTED
10031f: e8 90 f1 01 00 call 11f4b4 <strerror> <== NOT EXECUTED
100324: 50 push %eax <== NOT EXECUTED
100325: 53 push %ebx <== NOT EXECUTED
100326: 68 9f b4 12 00 push $0x12b49f <== NOT EXECUTED
10032b: eb 69 jmp 100396 <rtems_rfs_bitmap_ut_alloc_seq_test+0xac><== NOT EXECUTED
return false;
}
for (i = 0; i < size; i++)
rtems_rfs_bitmap_map_clear (control, bit + i);
10032d: 51 push %ecx
10032e: 51 push %ecx
10032f: 01 f0 add %esi,%eax
100331: 50 push %eax
100332: ff 75 08 pushl 0x8(%ebp)
100335: e8 15 f7 00 00 call 10fa4f <rtems_rfs_bitmap_map_clear>
{
printf (" %2d. set all bits: FAIL (%s)\n", test, strerror (rc));
return false;
}
for (i = 0; i < size; i++)
10033a: 46 inc %esi
10033b: 83 c4 10 add $0x10,%esp
10033e: 3b 75 14 cmp 0x14(%ebp),%esi
100341: 8b 45 10 mov 0x10(%ebp),%eax
100344: 75 e7 jne 10032d <rtems_rfs_bitmap_ut_alloc_seq_test+0x43>
rtems_rfs_bitmap_map_clear (control, bit + i);
printf (" %2d. Cleared bits (%" PRId32 ", %ld] (%zd)\n",
100346: 52 push %edx
100347: 52 push %edx
100348: ff 75 14 pushl 0x14(%ebp)
10034b: 8b 4d 14 mov 0x14(%ebp),%ecx
10034e: 8d 54 01 ff lea -0x1(%ecx,%eax,1),%edx
100352: 52 push %edx
100353: 50 push %eax
100354: 53 push %ebx
100355: 68 be b4 12 00 push $0x12b4be
10035a: a1 a0 f2 13 00 mov 0x13f2a0,%eax
10035f: ff 70 0c pushl 0xc(%eax)
100362: e8 f5 e3 01 00 call 11e75c <fiprintf>
100367: 83 c4 20 add $0x20,%esp
test, bit, bit + size - 1, size);
for (i = 0; i < rtems_rfs_bitmap_element_bits (); i++)
10036a: 31 f6 xor %esi,%esi
{
rc = rtems_rfs_bitmap_map_test (control, bit + i, &state);
10036c: 8d 7d e6 lea -0x1a(%ebp),%edi
10036f: 50 push %eax
100370: 57 push %edi
100371: 8b 45 10 mov 0x10(%ebp),%eax
100374: 01 f0 add %esi,%eax
100376: 50 push %eax
100377: ff 75 08 pushl 0x8(%ebp)
10037a: e8 2e f7 00 00 call 10faad <rtems_rfs_bitmap_map_test>
if (rc > 0)
10037f: 83 c4 10 add $0x10,%esp
100382: 85 c0 test %eax,%eax
100384: 7e 27 jle 1003ad <rtems_rfs_bitmap_ut_alloc_seq_test+0xc3><== ALWAYS TAKEN
{
printf (" %2d. test bit: FAIL (%s)\n", test, strerror (rc));
100386: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
100389: 50 push %eax <== NOT EXECUTED
10038a: e8 25 f1 01 00 call 11f4b4 <strerror> <== NOT EXECUTED
10038f: 50 push %eax <== NOT EXECUTED
100390: 53 push %ebx <== NOT EXECUTED
100391: 68 e3 b4 12 00 push $0x12b4e3 <== NOT EXECUTED
100396: a1 a0 f2 13 00 mov 0x13f2a0,%eax <== NOT EXECUTED
10039b: ff 70 0c pushl 0xc(%eax) <== NOT EXECUTED
10039e: e8 b9 e3 01 00 call 11e75c <fiprintf> <== NOT EXECUTED
1003a3: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
return false;
1003a6: 31 c0 xor %eax,%eax <== NOT EXECUTED
1003a8: e9 c0 00 00 00 jmp 10046d <rtems_rfs_bitmap_ut_alloc_seq_test+0x183><== NOT EXECUTED
}
if (state)
1003ad: 80 7d e6 00 cmpb $0x0,-0x1a(%ebp)
1003b1: 74 1c je 1003cf <rtems_rfs_bitmap_ut_alloc_seq_test+0xe5><== ALWAYS TAKEN
{
printf (" %2d. Cleared bit still set: bit = %" PRId32 "\n", test, bit + i);
1003b3: 03 75 10 add 0x10(%ebp),%esi <== NOT EXECUTED
1003b6: 56 push %esi <== NOT EXECUTED
1003b7: 53 push %ebx <== NOT EXECUTED
1003b8: 68 fe b4 12 00 push $0x12b4fe <== NOT EXECUTED
1003bd: a1 a0 f2 13 00 mov 0x13f2a0,%eax <== NOT EXECUTED
1003c2: ff 70 0c pushl 0xc(%eax) <== NOT EXECUTED
1003c5: e8 92 e3 01 00 call 11e75c <fiprintf> <== NOT EXECUTED
1003ca: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
1003cd: eb d7 jmp 1003a6 <rtems_rfs_bitmap_ut_alloc_seq_test+0xbc><== NOT EXECUTED
rtems_rfs_bitmap_map_clear (control, bit + i);
printf (" %2d. Cleared bits (%" PRId32 ", %ld] (%zd)\n",
test, bit, bit + size - 1, size);
for (i = 0; i < rtems_rfs_bitmap_element_bits (); i++)
1003cf: 46 inc %esi
1003d0: 83 fe 20 cmp $0x20,%esi
1003d3: 75 9a jne 10036f <rtems_rfs_bitmap_ut_alloc_seq_test+0x85>
printf (" %2d. Cleared bit still set: bit = %" PRId32 "\n", test, bit + i);
return false;
}
}
for (i = 0, bit = 0; i < size; i++)
1003d5: c7 45 10 00 00 00 00 movl $0x0,0x10(%ebp)
1003dc: 66 31 f6 xor %si,%si
{
rtems_rfs_bitmap_bit seed = bit;
bool result;
int rc;
rc = rtems_rfs_bitmap_map_alloc (control, seed, &result, &bit);
1003df: 8d 55 10 lea 0x10(%ebp),%edx
1003e2: 8d 4d e7 lea -0x19(%ebp),%ecx
printf (" %2d. Cleared bit still set: bit = %" PRId32 "\n", test, bit + i);
return false;
}
}
for (i = 0, bit = 0; i < size; i++)
1003e5: eb 5d jmp 100444 <rtems_rfs_bitmap_ut_alloc_seq_test+0x15a>
{
rtems_rfs_bitmap_bit seed = bit;
bool result;
int rc;
rc = rtems_rfs_bitmap_map_alloc (control, seed, &result, &bit);
1003e7: 52 push %edx
1003e8: 51 push %ecx
1003e9: 57 push %edi
1003ea: ff 75 08 pushl 0x8(%ebp)
1003ed: 89 55 d4 mov %edx,-0x2c(%ebp)
1003f0: 89 4d d0 mov %ecx,-0x30(%ebp)
1003f3: e8 d7 f7 00 00 call 10fbcf <rtems_rfs_bitmap_map_alloc>
if (rc > 0)
1003f8: 83 c4 10 add $0x10,%esp
1003fb: 85 c0 test %eax,%eax
1003fd: 8b 55 d4 mov -0x2c(%ebp),%edx
100400: 8b 4d d0 mov -0x30(%ebp),%ecx
100403: 7e 15 jle 10041a <rtems_rfs_bitmap_ut_alloc_seq_test+0x130><== ALWAYS TAKEN
{
printf (" %2d. map all: FAIL (%s)\n", test, strerror (rc));
100405: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
100408: 50 push %eax <== NOT EXECUTED
100409: e8 a6 f0 01 00 call 11f4b4 <strerror> <== NOT EXECUTED
10040e: 50 push %eax <== NOT EXECUTED
10040f: 53 push %ebx <== NOT EXECUTED
100410: 68 26 b5 12 00 push $0x12b526 <== NOT EXECUTED
100415: e9 7c ff ff ff jmp 100396 <rtems_rfs_bitmap_ut_alloc_seq_test+0xac><== NOT EXECUTED
return false;
}
if (!result)
10041a: 80 7d e7 00 cmpb $0x0,-0x19(%ebp)
10041e: 75 23 jne 100443 <rtems_rfs_bitmap_ut_alloc_seq_test+0x159><== ALWAYS TAKEN
{
printf (" %2d. Find bit with seed = %" PRId32 ": %s: bit = %" PRId32 "\n",
100420: 50 push %eax <== NOT EXECUTED
100421: 50 push %eax <== NOT EXECUTED
100422: ff 75 10 pushl 0x10(%ebp) <== NOT EXECUTED
100425: 68 2b b4 12 00 push $0x12b42b <== NOT EXECUTED
10042a: 57 push %edi <== NOT EXECUTED
10042b: 53 push %ebx <== NOT EXECUTED
10042c: 68 40 b5 12 00 push $0x12b540 <== NOT EXECUTED
100431: a1 a0 f2 13 00 mov 0x13f2a0,%eax <== NOT EXECUTED
100436: ff 70 0c pushl 0xc(%eax) <== NOT EXECUTED
100439: e8 1e e3 01 00 call 11e75c <fiprintf> <== NOT EXECUTED
10043e: e9 60 ff ff ff jmp 1003a3 <rtems_rfs_bitmap_ut_alloc_seq_test+0xb9><== NOT EXECUTED
printf (" %2d. Cleared bit still set: bit = %" PRId32 "\n", test, bit + i);
return false;
}
}
for (i = 0, bit = 0; i < size; i++)
100443: 46 inc %esi
100444: 3b 75 14 cmp 0x14(%ebp),%esi
100447: 8b 7d 10 mov 0x10(%ebp),%edi
10044a: 75 9b jne 1003e7 <rtems_rfs_bitmap_ut_alloc_seq_test+0xfd>
test, seed, result ? "pass" : "FAIL", bit);
return false;
}
}
printf (" %2d. Alloc'ed all bits (%" PRId32 ", %ld] (%zd)\n",
10044c: 50 push %eax
10044d: 50 push %eax
10044e: 56 push %esi
10044f: 8d 44 3e ff lea -0x1(%esi,%edi,1),%eax
100453: 50 push %eax
100454: 57 push %edi
100455: 53 push %ebx
100456: 68 6f b5 12 00 push $0x12b56f
10045b: a1 a0 f2 13 00 mov 0x13f2a0,%eax
100460: ff 70 0c pushl 0xc(%eax)
100463: e8 f4 e2 01 00 call 11e75c <fiprintf>
100468: 83 c4 20 add $0x20,%esp
test, bit, bit + size - 1, size);
return true;
10046b: b0 01 mov $0x1,%al
}
10046d: 8d 65 f4 lea -0xc(%ebp),%esp
100470: 5b pop %ebx
100471: 5e pop %esi
100472: 5f pop %edi
100473: 5d pop %ebp
100474: c3 ret
00100475 <rtems_rfs_bitmap_ut_test_bitmap>:
void
rtems_rfs_bitmap_ut_test_bitmap (size_t size)
{
100475: 55 push %ebp
100476: 89 e5 mov %esp,%ebp
100478: 57 push %edi
100479: 56 push %esi
10047a: 53 push %ebx
10047b: 81 ec 18 01 00 00 sub $0x118,%esp
rtems_rfs_file_system fs;
rtems_rfs_bitmap_control control;
rtems_rfs_buffer_handle handle;
rtems_rfs_buffer buffer;
rtems_rfs_bitmap_bit bit = 0;
100481: c7 85 04 ff ff ff 00 movl $0x0,-0xfc(%ebp)
100488: 00 00 00
bool result;
size_t bytes;
size_t clear;
int rc;
bytes = (rtems_rfs_bitmap_elements (size) *
10048b: 8b 45 08 mov 0x8(%ebp),%eax
10048e: 48 dec %eax
10048f: 89 85 ec fe ff ff mov %eax,-0x114(%ebp)
100495: 89 c3 mov %eax,%ebx
100497: c1 eb 05 shr $0x5,%ebx
10049a: 43 inc %ebx
10049b: 8d 04 9d 00 00 00 00 lea 0x0(,%ebx,4),%eax
1004a2: 89 85 e8 fe ff ff mov %eax,-0x118(%ebp)
sizeof (rtems_rfs_bitmap_element));
memset (&fs, 0, sizeof (fs));
1004a8: 8d 85 64 ff ff ff lea -0x9c(%ebp),%eax
1004ae: 89 85 f4 fe ff ff mov %eax,-0x10c(%ebp)
1004b4: 31 c0 xor %eax,%eax
1004b6: b9 21 00 00 00 mov $0x21,%ecx
1004bb: 8b bd f4 fe ff ff mov -0x10c(%ebp),%edi
1004c1: f3 ab rep stos %eax,%es:(%edi)
memset (&buffer, 0, sizeof (buffer));
1004c3: 8d b5 2c ff ff ff lea -0xd4(%ebp),%esi
1004c9: b1 0e mov $0xe,%cl
1004cb: 89 f7 mov %esi,%edi
1004cd: f3 ab rep stos %eax,%es:(%edi)
buffer.buffer = malloc (bytes);
1004cf: ff b5 e8 fe ff ff pushl -0x118(%ebp)
1004d5: e8 12 85 00 00 call 1089ec <malloc>
1004da: 89 c2 mov %eax,%edx
1004dc: 89 85 48 ff ff ff mov %eax,-0xb8(%ebp)
buffer.block = 1;
1004e2: c7 85 44 ff ff ff 01 movl $0x1,-0xbc(%ebp)
1004e9: 00 00 00
if (!buffer.buffer)
1004ec: 83 c4 10 add $0x10,%esp
1004ef: 85 c0 test %eax,%eax
1004f1: 75 19 jne 10050c <rtems_rfs_bitmap_ut_test_bitmap+0x97><== ALWAYS TAKEN
{
printf (" Cannot allocate bitmap memory\n");
1004f3: 53 push %ebx <== NOT EXECUTED
1004f4: 53 push %ebx <== NOT EXECUTED
1004f5: 68 9e b5 12 00 push $0x12b59e <== NOT EXECUTED
1004fa: a1 a0 f2 13 00 mov 0x13f2a0,%eax <== NOT EXECUTED
1004ff: ff 70 0c pushl 0xc(%eax) <== NOT EXECUTED
100502: e8 55 e2 01 00 call 11e75c <fiprintf> <== NOT EXECUTED
100507: e9 c9 10 00 00 jmp 1015d5 <rtems_rfs_bitmap_ut_test_bitmap+0x1160><== NOT EXECUTED
}
#if RTEMS_RFS_BITMAP_CLEAR_ZERO
memset (buffer.buffer, 0, bytes);
#else
memset (buffer.buffer, 0xff, bytes);
10050c: b0 ff mov $0xff,%al
10050e: 89 d7 mov %edx,%edi
100510: 8b 8d e8 fe ff ff mov -0x118(%ebp),%ecx
100516: f3 aa rep stos %al,%es:(%edi)
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
100518: c6 85 08 ff ff ff 00 movb $0x0,-0xf8(%ebp)
printf (" Cannot open the handle: %d: %s\n", rc, strerror (rc));
free (buffer.buffer);
return;
}
handle.buffer = &buffer;
10051f: 89 b5 10 ff ff ff mov %esi,-0xf0(%ebp)
handle.bnum = 1;
100525: c7 85 0c ff ff ff 01 movl $0x1,-0xf4(%ebp)
10052c: 00 00 00
printf ("\nRFS Bitmap Test : size = %zd (%zd)\n",
10052f: 53 push %ebx
100530: ff 75 08 pushl 0x8(%ebp)
100533: 68 be b5 12 00 push $0x12b5be
100538: a1 a0 f2 13 00 mov 0x13f2a0,%eax
10053d: ff 70 0c pushl 0xc(%eax)
100540: e8 17 e2 01 00 call 11e75c <fiprintf>
size, rtems_rfs_bitmap_elements (size));
rc = rtems_rfs_bitmap_open (&control, &fs, &handle, size, 1);
100545: c7 04 24 01 00 00 00 movl $0x1,(%esp)
10054c: ff 75 08 pushl 0x8(%ebp)
10054f: 8d 85 08 ff ff ff lea -0xf8(%ebp),%eax
100555: 50 push %eax
100556: 8d 85 64 ff ff ff lea -0x9c(%ebp),%eax
10055c: 50 push %eax
10055d: 8d 9d 14 ff ff ff lea -0xec(%ebp),%ebx
100563: 53 push %ebx
100564: e8 c6 f7 00 00 call 10fd2f <rtems_rfs_bitmap_open>
if (rc > 0)
100569: 83 c4 20 add $0x20,%esp
10056c: 85 c0 test %eax,%eax
10056e: 7e 24 jle 100594 <rtems_rfs_bitmap_ut_test_bitmap+0x11f><== ALWAYS TAKEN
{
printf (" Cannot open the bitmap: %s\n", strerror (rc));
100570: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
100573: 50 push %eax <== NOT EXECUTED
100574: e8 3b ef 01 00 call 11f4b4 <strerror> <== NOT EXECUTED
100579: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
10057c: 50 push %eax <== NOT EXECUTED
10057d: 68 e3 b5 12 00 push $0x12b5e3 <== NOT EXECUTED
100582: a1 a0 f2 13 00 mov 0x13f2a0,%eax <== NOT EXECUTED
100587: ff 70 0c pushl 0xc(%eax) <== NOT EXECUTED
10058a: e8 cd e1 01 00 call 11e75c <fiprintf> <== NOT EXECUTED
10058f: e9 35 10 00 00 jmp 1015c9 <rtems_rfs_bitmap_ut_test_bitmap+0x1154><== NOT EXECUTED
/*
* This is a new bitmap with no bits set. Try and find a bit with a few
* seeds.
*/
rc = rtems_rfs_bitmap_map_alloc (&control, size * 2, &result, &bit);
100594: 8d 85 04 ff ff ff lea -0xfc(%ebp),%eax
10059a: 50 push %eax
10059b: 8d 85 03 ff ff ff lea -0xfd(%ebp),%eax
1005a1: 50 push %eax
1005a2: 8b 45 08 mov 0x8(%ebp),%eax
1005a5: d1 e0 shl %eax
1005a7: 50 push %eax
1005a8: 53 push %ebx
1005a9: e8 21 f6 00 00 call 10fbcf <rtems_rfs_bitmap_map_alloc>
1005ae: 89 c3 mov %eax,%ebx
printf (" 1. Find bit with seed > size: %s (%s)\n",
1005b0: 89 04 24 mov %eax,(%esp)
1005b3: e8 fc ee 01 00 call 11f4b4 <strerror>
1005b8: 83 c4 10 add $0x10,%esp
1005bb: ba 26 b4 12 00 mov $0x12b426,%edx
1005c0: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
1005c7: 74 05 je 1005ce <rtems_rfs_bitmap_ut_test_bitmap+0x159><== ALWAYS TAKEN
1005c9: ba 2b b4 12 00 mov $0x12b42b,%edx <== NOT EXECUTED
1005ce: 50 push %eax
1005cf: 52 push %edx
1005d0: 68 00 b6 12 00 push $0x12b600
1005d5: a1 a0 f2 13 00 mov 0x13f2a0,%eax
1005da: ff 70 0c pushl 0xc(%eax)
1005dd: e8 7a e1 01 00 call 11e75c <fiprintf>
result ? "FAIL" : "pass", strerror (rc));
rtems_rfs_exit_on_error (rc, result, &control, buffer.buffer);
1005e2: 83 c4 10 add $0x10,%esp
1005e5: 85 db test %ebx,%ebx
1005e7: 0f 8f 84 0c 00 00 jg 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NEVER TAKEN
1005ed: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
1005f4: 74 05 je 1005fb <rtems_rfs_bitmap_ut_test_bitmap+0x186><== ALWAYS TAKEN
1005f6: e9 76 0c 00 00 jmp 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NOT EXECUTED
rc = rtems_rfs_bitmap_map_alloc (&control, size, &result, &bit);
1005fb: 8d 85 04 ff ff ff lea -0xfc(%ebp),%eax
100601: 50 push %eax
100602: 8d 85 03 ff ff ff lea -0xfd(%ebp),%eax
100608: 50 push %eax
100609: ff 75 08 pushl 0x8(%ebp)
10060c: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax
100612: 50 push %eax
100613: e8 b7 f5 00 00 call 10fbcf <rtems_rfs_bitmap_map_alloc>
100618: 89 c3 mov %eax,%ebx
printf (" 2. Find bit with seed = size: %s (%s)\n",
10061a: 89 04 24 mov %eax,(%esp)
10061d: e8 92 ee 01 00 call 11f4b4 <strerror>
100622: 83 c4 10 add $0x10,%esp
100625: ba 26 b4 12 00 mov $0x12b426,%edx
10062a: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100631: 74 05 je 100638 <rtems_rfs_bitmap_ut_test_bitmap+0x1c3><== ALWAYS TAKEN
100633: ba 2b b4 12 00 mov $0x12b42b,%edx <== NOT EXECUTED
100638: 50 push %eax
100639: 52 push %edx
10063a: 68 29 b6 12 00 push $0x12b629
10063f: a1 a0 f2 13 00 mov 0x13f2a0,%eax
100644: ff 70 0c pushl 0xc(%eax)
100647: e8 10 e1 01 00 call 11e75c <fiprintf>
result ? "FAIL" : "pass", strerror (rc));
rtems_rfs_exit_on_error (rc, result, &control, buffer.buffer);
10064c: 83 c4 10 add $0x10,%esp
10064f: 85 db test %ebx,%ebx
100651: 0f 8f 1a 0c 00 00 jg 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NEVER TAKEN
100657: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
10065e: 74 05 je 100665 <rtems_rfs_bitmap_ut_test_bitmap+0x1f0><== ALWAYS TAKEN
100660: e9 0c 0c 00 00 jmp 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NOT EXECUTED
rc = rtems_rfs_bitmap_map_alloc (&control, 0, &result, &bit);
100665: 8d 85 04 ff ff ff lea -0xfc(%ebp),%eax
10066b: 50 push %eax
10066c: 8d 85 03 ff ff ff lea -0xfd(%ebp),%eax
100672: 50 push %eax
100673: 6a 00 push $0x0
100675: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax
10067b: 50 push %eax
10067c: e8 4e f5 00 00 call 10fbcf <rtems_rfs_bitmap_map_alloc>
100681: 89 c3 mov %eax,%ebx
result = result && (bit == 0);
100683: 83 c4 10 add $0x10,%esp
100686: 31 c0 xor %eax,%eax
100688: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
10068f: 74 0c je 10069d <rtems_rfs_bitmap_ut_test_bitmap+0x228><== NEVER TAKEN
100691: 31 c0 xor %eax,%eax
100693: 83 bd 04 ff ff ff 00 cmpl $0x0,-0xfc(%ebp)
10069a: 0f 94 c0 sete %al
10069d: 88 85 03 ff ff ff mov %al,-0xfd(%ebp)
1006a3: 80 a5 03 ff ff ff 01 andb $0x1,-0xfd(%ebp)
printf (" 3. Find bit 0 with seed = 0: %s (%s): bit = %" PRId32 "\n",
1006aa: 8b b5 04 ff ff ff mov -0xfc(%ebp),%esi
1006b0: 83 ec 0c sub $0xc,%esp
1006b3: 53 push %ebx
1006b4: e8 fb ed 01 00 call 11f4b4 <strerror>
1006b9: 83 c4 10 add $0x10,%esp
1006bc: ba 2b b4 12 00 mov $0x12b42b,%edx
1006c1: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
1006c8: 74 05 je 1006cf <rtems_rfs_bitmap_ut_test_bitmap+0x25a><== NEVER TAKEN
1006ca: ba 26 b4 12 00 mov $0x12b426,%edx
1006cf: 83 ec 0c sub $0xc,%esp
1006d2: 56 push %esi
1006d3: 50 push %eax
1006d4: 52 push %edx
1006d5: 68 52 b6 12 00 push $0x12b652
1006da: a1 a0 f2 13 00 mov 0x13f2a0,%eax
1006df: ff 70 0c pushl 0xc(%eax)
1006e2: e8 75 e0 01 00 call 11e75c <fiprintf>
result ? "pass" : "FAIL", strerror (rc), bit);
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
1006e7: 83 c4 20 add $0x20,%esp
1006ea: 85 db test %ebx,%ebx
1006ec: 0f 8f 7f 0b 00 00 jg 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NEVER TAKEN
1006f2: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
1006f9: 75 05 jne 100700 <rtems_rfs_bitmap_ut_test_bitmap+0x28b><== ALWAYS TAKEN
1006fb: e9 71 0b 00 00 jmp 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NOT EXECUTED
rc = rtems_rfs_bitmap_map_alloc (&control, size - 1, &result, &bit);
100700: 8d 85 04 ff ff ff lea -0xfc(%ebp),%eax
100706: 50 push %eax
100707: 8d 85 03 ff ff ff lea -0xfd(%ebp),%eax
10070d: 50 push %eax
10070e: ff b5 ec fe ff ff pushl -0x114(%ebp)
100714: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax
10071a: 50 push %eax
10071b: e8 af f4 00 00 call 10fbcf <rtems_rfs_bitmap_map_alloc>
100720: 89 c3 mov %eax,%ebx
result = result && (bit == (size - 1));
100722: 83 c4 10 add $0x10,%esp
100725: 31 c0 xor %eax,%eax
100727: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
10072e: 74 12 je 100742 <rtems_rfs_bitmap_ut_test_bitmap+0x2cd><== NEVER TAKEN
100730: 8b 85 ec fe ff ff mov -0x114(%ebp),%eax
100736: 39 85 04 ff ff ff cmp %eax,-0xfc(%ebp)
10073c: 0f 94 c0 sete %al
10073f: 0f b6 c0 movzbl %al,%eax
100742: 88 85 03 ff ff ff mov %al,-0xfd(%ebp)
100748: 80 a5 03 ff ff ff 01 andb $0x1,-0xfd(%ebp)
printf (" 4. Find bit (size - 1) with seed = (size - 1) (%zd): %s (%s): bit = %" PRId32 "\n",
10074f: 8b b5 04 ff ff ff mov -0xfc(%ebp),%esi
100755: 83 ec 0c sub $0xc,%esp
100758: 53 push %ebx
100759: e8 56 ed 01 00 call 11f4b4 <strerror>
10075e: 83 c4 10 add $0x10,%esp
100761: ba 2b b4 12 00 mov $0x12b42b,%edx
100766: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
10076d: 74 05 je 100774 <rtems_rfs_bitmap_ut_test_bitmap+0x2ff><== NEVER TAKEN
10076f: ba 26 b4 12 00 mov $0x12b426,%edx
100774: 51 push %ecx
100775: 51 push %ecx
100776: 56 push %esi
100777: 50 push %eax
100778: 52 push %edx
100779: ff b5 ec fe ff ff pushl -0x114(%ebp)
10077f: 68 85 b6 12 00 push $0x12b685
100784: a1 a0 f2 13 00 mov 0x13f2a0,%eax
100789: ff 70 0c pushl 0xc(%eax)
10078c: e8 cb df 01 00 call 11e75c <fiprintf>
size - 1, result ? "pass" : "FAIL", strerror (rc), bit);
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
100791: 83 c4 20 add $0x20,%esp
100794: 85 db test %ebx,%ebx
100796: 0f 8f d5 0a 00 00 jg 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NEVER TAKEN
10079c: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
1007a3: 75 05 jne 1007aa <rtems_rfs_bitmap_ut_test_bitmap+0x335><== ALWAYS TAKEN
1007a5: e9 c7 0a 00 00 jmp 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NOT EXECUTED
/*
* Test the bits allocated to make sure they are set.
*/
rc = rtems_rfs_bitmap_map_test (&control, 0, &result);
1007aa: 50 push %eax
1007ab: 8d 85 03 ff ff ff lea -0xfd(%ebp),%eax
1007b1: 50 push %eax
1007b2: 6a 00 push $0x0
1007b4: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax
1007ba: 50 push %eax
1007bb: e8 ed f2 00 00 call 10faad <rtems_rfs_bitmap_map_test>
1007c0: 89 c3 mov %eax,%ebx
printf (" 5. Test bit 0: %s (%s)\n",
1007c2: 89 04 24 mov %eax,(%esp)
1007c5: e8 ea ec 01 00 call 11f4b4 <strerror>
1007ca: 83 c4 10 add $0x10,%esp
1007cd: ba 2b b4 12 00 mov $0x12b42b,%edx
1007d2: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
1007d9: 74 05 je 1007e0 <rtems_rfs_bitmap_ut_test_bitmap+0x36b><== NEVER TAKEN
1007db: ba 26 b4 12 00 mov $0x12b426,%edx
1007e0: 50 push %eax
1007e1: 52 push %edx
1007e2: 68 d0 b6 12 00 push $0x12b6d0
1007e7: a1 a0 f2 13 00 mov 0x13f2a0,%eax
1007ec: ff 70 0c pushl 0xc(%eax)
1007ef: e8 68 df 01 00 call 11e75c <fiprintf>
result ? "pass" : "FAIL", strerror (rc));
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
1007f4: 83 c4 10 add $0x10,%esp
1007f7: 85 db test %ebx,%ebx
1007f9: 0f 8f 72 0a 00 00 jg 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NEVER TAKEN
1007ff: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100806: 75 05 jne 10080d <rtems_rfs_bitmap_ut_test_bitmap+0x398><== ALWAYS TAKEN
100808: e9 64 0a 00 00 jmp 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NOT EXECUTED
rc = rtems_rfs_bitmap_map_test (&control, size - 1, &result);
10080d: 50 push %eax
10080e: 8d 85 03 ff ff ff lea -0xfd(%ebp),%eax
100814: 50 push %eax
100815: ff b5 ec fe ff ff pushl -0x114(%ebp)
10081b: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax
100821: 50 push %eax
100822: e8 86 f2 00 00 call 10faad <rtems_rfs_bitmap_map_test>
100827: 89 c3 mov %eax,%ebx
printf (" 6. Test bit (size - 1) (%zd): %s (%s)\n",
100829: 89 04 24 mov %eax,(%esp)
10082c: e8 83 ec 01 00 call 11f4b4 <strerror>
100831: 83 c4 10 add $0x10,%esp
100834: ba 2b b4 12 00 mov $0x12b42b,%edx
100839: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100840: 74 05 je 100847 <rtems_rfs_bitmap_ut_test_bitmap+0x3d2><== NEVER TAKEN
100842: ba 26 b4 12 00 mov $0x12b426,%edx
100847: 83 ec 0c sub $0xc,%esp
10084a: 50 push %eax
10084b: 52 push %edx
10084c: ff b5 ec fe ff ff pushl -0x114(%ebp)
100852: 68 ea b6 12 00 push $0x12b6ea
100857: a1 a0 f2 13 00 mov 0x13f2a0,%eax
10085c: ff 70 0c pushl 0xc(%eax)
10085f: e8 f8 de 01 00 call 11e75c <fiprintf>
size - 1, result ? "pass" : "FAIL", strerror (rc));
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
100864: 83 c4 20 add $0x20,%esp
100867: 85 db test %ebx,%ebx
100869: 0f 8f 02 0a 00 00 jg 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NEVER TAKEN
10086f: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100876: 75 05 jne 10087d <rtems_rfs_bitmap_ut_test_bitmap+0x408><== ALWAYS TAKEN
100878: e9 f4 09 00 00 jmp 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NOT EXECUTED
if (!rtems_rfs_bitmap_ut_test_range (&control, 7, false, 1, size - 2))
10087d: 83 ec 0c sub $0xc,%esp
100880: 8b 45 08 mov 0x8(%ebp),%eax
100883: 83 e8 02 sub $0x2,%eax
100886: 50 push %eax
100887: 6a 01 push $0x1
100889: 6a 00 push $0x0
10088b: 6a 07 push $0x7
10088d: 8d 9d 14 ff ff ff lea -0xec(%ebp),%ebx
100893: 53 push %ebx
100894: e8 1b f9 ff ff call 1001b4 <rtems_rfs_bitmap_ut_test_range>
100899: 83 c4 20 add $0x20,%esp
10089c: 84 c0 test %al,%al
10089e: 75 0e jne 1008ae <rtems_rfs_bitmap_ut_test_bitmap+0x439><== ALWAYS TAKEN
rtems_rfs_exit_on_error (0, !result, &control, buffer.buffer);
1008a0: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp) <== NOT EXECUTED
1008a7: 75 05 jne 1008ae <rtems_rfs_bitmap_ut_test_bitmap+0x439><== NOT EXECUTED
1008a9: e9 a9 08 00 00 jmp 101157 <rtems_rfs_bitmap_ut_test_bitmap+0xce2><== NOT EXECUTED
/*
* Set all bits then clear one and find it.
*/
rc = rtems_rfs_bitmap_map_set_all (&control);
1008ae: 83 ec 0c sub $0xc,%esp
1008b1: 53 push %ebx
1008b2: e8 3c f2 00 00 call 10faf3 <rtems_rfs_bitmap_map_set_all>
1008b7: 89 c3 mov %eax,%ebx
printf (" 8. Set all bits: %s (%s)\n",
1008b9: 89 04 24 mov %eax,(%esp)
1008bc: e8 f3 eb 01 00 call 11f4b4 <strerror>
1008c1: 83 c4 10 add $0x10,%esp
1008c4: ba 2b b4 12 00 mov $0x12b42b,%edx
1008c9: 85 db test %ebx,%ebx
1008cb: 75 05 jne 1008d2 <rtems_rfs_bitmap_ut_test_bitmap+0x45d><== NEVER TAKEN
1008cd: ba 99 b5 12 00 mov $0x12b599,%edx
1008d2: 50 push %eax
1008d3: 52 push %edx
1008d4: 68 13 b7 12 00 push $0x12b713
1008d9: a1 a0 f2 13 00 mov 0x13f2a0,%eax
1008de: ff 70 0c pushl 0xc(%eax)
1008e1: e8 76 de 01 00 call 11e75c <fiprintf>
rc == 0 ? "PASS" : "FAIL", strerror (rc));
rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
1008e6: 83 c4 10 add $0x10,%esp
1008e9: 85 db test %ebx,%ebx
1008eb: 7e 05 jle 1008f2 <rtems_rfs_bitmap_ut_test_bitmap+0x47d><== ALWAYS TAKEN
1008ed: e9 7f 09 00 00 jmp 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NOT EXECUTED
bit = rand () % size;
1008f2: e8 d9 e2 01 00 call 11ebd0 <rand>
1008f7: 31 d2 xor %edx,%edx
1008f9: f7 75 08 divl 0x8(%ebp)
1008fc: 89 95 04 ff ff ff mov %edx,-0xfc(%ebp)
rc = rtems_rfs_bitmap_map_clear (&control, bit);
100902: 50 push %eax
100903: 50 push %eax
100904: 52 push %edx
100905: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax
10090b: 50 push %eax
10090c: e8 3e f1 00 00 call 10fa4f <rtems_rfs_bitmap_map_clear>
100911: 89 c3 mov %eax,%ebx
printf (" 9. Clear bit %" PRId32 ": %s (%s)\n",
100913: 89 04 24 mov %eax,(%esp)
100916: e8 99 eb 01 00 call 11f4b4 <strerror>
10091b: 83 c4 10 add $0x10,%esp
10091e: ba 2b b4 12 00 mov $0x12b42b,%edx
100923: 85 db test %ebx,%ebx
100925: 75 05 jne 10092c <rtems_rfs_bitmap_ut_test_bitmap+0x4b7><== NEVER TAKEN
100927: ba 99 b5 12 00 mov $0x12b599,%edx
10092c: 83 ec 0c sub $0xc,%esp
10092f: 50 push %eax
100930: 52 push %edx
100931: ff b5 04 ff ff ff pushl -0xfc(%ebp)
100937: 68 2f b7 12 00 push $0x12b72f
10093c: a1 a0 f2 13 00 mov 0x13f2a0,%eax
100941: ff 70 0c pushl 0xc(%eax)
100944: e8 13 de 01 00 call 11e75c <fiprintf>
bit, rc == 0 ? "PASS" : "FAIL", strerror (rc));
rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
100949: 83 c4 20 add $0x20,%esp
10094c: 85 db test %ebx,%ebx
10094e: 7e 05 jle 100955 <rtems_rfs_bitmap_ut_test_bitmap+0x4e0><== ALWAYS TAKEN
100950: e9 1c 09 00 00 jmp 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NOT EXECUTED
last_bit = bit;
100955: 8b b5 04 ff ff ff mov -0xfc(%ebp),%esi
rc = rtems_rfs_bitmap_map_alloc (&control, 0, &result, &bit);
10095b: 8d 85 04 ff ff ff lea -0xfc(%ebp),%eax
100961: 50 push %eax
100962: 8d 85 03 ff ff ff lea -0xfd(%ebp),%eax
100968: 50 push %eax
100969: 6a 00 push $0x0
10096b: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax
100971: 50 push %eax
100972: e8 58 f2 00 00 call 10fbcf <rtems_rfs_bitmap_map_alloc>
100977: 89 c3 mov %eax,%ebx
result = result && (bit == last_bit);
100979: 83 c4 10 add $0x10,%esp
10097c: 31 c0 xor %eax,%eax
10097e: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100985: 74 0b je 100992 <rtems_rfs_bitmap_ut_test_bitmap+0x51d><== NEVER TAKEN
100987: 31 c0 xor %eax,%eax
100989: 39 b5 04 ff ff ff cmp %esi,-0xfc(%ebp)
10098f: 0f 94 c0 sete %al
100992: 88 85 03 ff ff ff mov %al,-0xfd(%ebp)
100998: 80 a5 03 ff ff ff 01 andb $0x1,-0xfd(%ebp)
printf (" 10. Find bit with seed = 0: %s (%s): bit = %" PRId32 "\n",
10099f: 8b bd 04 ff ff ff mov -0xfc(%ebp),%edi
1009a5: 83 ec 0c sub $0xc,%esp
1009a8: 53 push %ebx
1009a9: e8 06 eb 01 00 call 11f4b4 <strerror>
1009ae: 83 c4 10 add $0x10,%esp
1009b1: ba 2b b4 12 00 mov $0x12b42b,%edx
1009b6: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
1009bd: 74 05 je 1009c4 <rtems_rfs_bitmap_ut_test_bitmap+0x54f><== NEVER TAKEN
1009bf: ba 26 b4 12 00 mov $0x12b426,%edx
1009c4: 83 ec 0c sub $0xc,%esp
1009c7: 57 push %edi
1009c8: 50 push %eax
1009c9: 52 push %edx
1009ca: 68 4c b7 12 00 push $0x12b74c
1009cf: a1 a0 f2 13 00 mov 0x13f2a0,%eax
1009d4: ff 70 0c pushl 0xc(%eax)
1009d7: e8 80 dd 01 00 call 11e75c <fiprintf>
result ? "pass" : "FAIL", strerror (rc), bit);
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
1009dc: 83 c4 20 add $0x20,%esp
1009df: 85 db test %ebx,%ebx
1009e1: 0f 8f 8a 08 00 00 jg 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NEVER TAKEN
1009e7: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
1009ee: 75 05 jne 1009f5 <rtems_rfs_bitmap_ut_test_bitmap+0x580><== ALWAYS TAKEN
1009f0: e9 7c 08 00 00 jmp 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NOT EXECUTED
rc = rtems_rfs_bitmap_map_alloc (&control, 0, &result, &bit);
1009f5: 8d 85 04 ff ff ff lea -0xfc(%ebp),%eax
1009fb: 50 push %eax
1009fc: 8d 85 03 ff ff ff lea -0xfd(%ebp),%eax
100a02: 50 push %eax
100a03: 6a 00 push $0x0
100a05: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax
100a0b: 50 push %eax
100a0c: e8 be f1 00 00 call 10fbcf <rtems_rfs_bitmap_map_alloc>
100a11: 89 c3 mov %eax,%ebx
result = !result || (bit != last_bit);
100a13: 83 c4 10 add $0x10,%esp
100a16: b8 01 00 00 00 mov $0x1,%eax
100a1b: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100a22: 74 0b je 100a2f <rtems_rfs_bitmap_ut_test_bitmap+0x5ba><== ALWAYS TAKEN
100a24: 31 c0 xor %eax,%eax
100a26: 39 b5 04 ff ff ff cmp %esi,-0xfc(%ebp) <== NOT EXECUTED
100a2c: 0f 95 c0 setne %al <== NOT EXECUTED
100a2f: 88 85 03 ff ff ff mov %al,-0xfd(%ebp)
100a35: 80 a5 03 ff ff ff 01 andb $0x1,-0xfd(%ebp)
printf (" 11. Fail to find bit with seed = 0: %s (%s): bit = %" PRId32 "\n",
100a3c: 8b b5 04 ff ff ff mov -0xfc(%ebp),%esi
100a42: 83 ec 0c sub $0xc,%esp
100a45: 53 push %ebx
100a46: e8 69 ea 01 00 call 11f4b4 <strerror>
100a4b: 83 c4 10 add $0x10,%esp
100a4e: ba 2b b4 12 00 mov $0x12b42b,%edx
100a53: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100a5a: 74 05 je 100a61 <rtems_rfs_bitmap_ut_test_bitmap+0x5ec><== NEVER TAKEN
100a5c: ba 26 b4 12 00 mov $0x12b426,%edx
100a61: 83 ec 0c sub $0xc,%esp
100a64: 56 push %esi
100a65: 50 push %eax
100a66: 52 push %edx
100a67: 68 7d b7 12 00 push $0x12b77d
100a6c: a1 a0 f2 13 00 mov 0x13f2a0,%eax
100a71: ff 70 0c pushl 0xc(%eax)
100a74: e8 e3 dc 01 00 call 11e75c <fiprintf>
result ? "pass" : "FAIL", strerror (rc), bit);
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
100a79: 83 c4 20 add $0x20,%esp
100a7c: 85 db test %ebx,%ebx
100a7e: 0f 8f ed 07 00 00 jg 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NEVER TAKEN
100a84: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100a8b: 75 05 jne 100a92 <rtems_rfs_bitmap_ut_test_bitmap+0x61d><== ALWAYS TAKEN
100a8d: e9 df 07 00 00 jmp 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NOT EXECUTED
rc = rtems_rfs_bitmap_map_clear (&control, 0);
100a92: 57 push %edi
100a93: 57 push %edi
100a94: 6a 00 push $0x0
100a96: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax
100a9c: 50 push %eax
100a9d: e8 ad ef 00 00 call 10fa4f <rtems_rfs_bitmap_map_clear>
100aa2: 89 c3 mov %eax,%ebx
printf (" 12. Clear bit 0: %s (%s)\n",
100aa4: 89 04 24 mov %eax,(%esp)
100aa7: e8 08 ea 01 00 call 11f4b4 <strerror>
100aac: 83 c4 10 add $0x10,%esp
100aaf: ba 2b b4 12 00 mov $0x12b42b,%edx
100ab4: 85 db test %ebx,%ebx
100ab6: 75 05 jne 100abd <rtems_rfs_bitmap_ut_test_bitmap+0x648><== NEVER TAKEN
100ab8: ba 26 b4 12 00 mov $0x12b426,%edx
100abd: 50 push %eax
100abe: 52 push %edx
100abf: 68 b6 b7 12 00 push $0x12b7b6
100ac4: a1 a0 f2 13 00 mov 0x13f2a0,%eax
100ac9: ff 70 0c pushl 0xc(%eax)
100acc: e8 8b dc 01 00 call 11e75c <fiprintf>
rc == 0 ? "pass" : "FAIL", strerror (rc));
rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
100ad1: 83 c4 10 add $0x10,%esp
100ad4: 85 db test %ebx,%ebx
100ad6: 7e 05 jle 100add <rtems_rfs_bitmap_ut_test_bitmap+0x668><== ALWAYS TAKEN
100ad8: e9 94 07 00 00 jmp 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NOT EXECUTED
rc = rtems_rfs_bitmap_map_alloc (&control, size - 1, &result, &bit);
100add: 8d 85 04 ff ff ff lea -0xfc(%ebp),%eax
100ae3: 50 push %eax
100ae4: 8d 85 03 ff ff ff lea -0xfd(%ebp),%eax
100aea: 50 push %eax
100aeb: ff b5 ec fe ff ff pushl -0x114(%ebp)
100af1: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax
100af7: 50 push %eax
100af8: e8 d2 f0 00 00 call 10fbcf <rtems_rfs_bitmap_map_alloc>
100afd: 89 c3 mov %eax,%ebx
result = result && (bit == 0);
100aff: 83 c4 10 add $0x10,%esp
100b02: 31 c0 xor %eax,%eax
100b04: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100b0b: 74 0c je 100b19 <rtems_rfs_bitmap_ut_test_bitmap+0x6a4><== NEVER TAKEN
100b0d: 31 c0 xor %eax,%eax
100b0f: 83 bd 04 ff ff ff 00 cmpl $0x0,-0xfc(%ebp)
100b16: 0f 94 c0 sete %al
100b19: 88 85 03 ff ff ff mov %al,-0xfd(%ebp)
100b1f: 80 a5 03 ff ff ff 01 andb $0x1,-0xfd(%ebp)
printf (" 13. Find bit with seed = (size - 1): %s (%s): bit = %" PRId32 "\n",
100b26: 8b b5 04 ff ff ff mov -0xfc(%ebp),%esi
100b2c: 83 ec 0c sub $0xc,%esp
100b2f: 53 push %ebx
100b30: e8 7f e9 01 00 call 11f4b4 <strerror>
100b35: 83 c4 10 add $0x10,%esp
100b38: ba 2b b4 12 00 mov $0x12b42b,%edx
100b3d: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100b44: 74 05 je 100b4b <rtems_rfs_bitmap_ut_test_bitmap+0x6d6><== NEVER TAKEN
100b46: ba 26 b4 12 00 mov $0x12b426,%edx
100b4b: 83 ec 0c sub $0xc,%esp
100b4e: 56 push %esi
100b4f: 50 push %eax
100b50: 52 push %edx
100b51: 68 d1 b7 12 00 push $0x12b7d1
100b56: a1 a0 f2 13 00 mov 0x13f2a0,%eax
100b5b: ff 70 0c pushl 0xc(%eax)
100b5e: e8 f9 db 01 00 call 11e75c <fiprintf>
result ? "pass" : "FAIL", strerror (rc), bit);
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
100b63: 83 c4 20 add $0x20,%esp
100b66: 85 db test %ebx,%ebx
100b68: 0f 8f 03 07 00 00 jg 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NEVER TAKEN
100b6e: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100b75: 75 05 jne 100b7c <rtems_rfs_bitmap_ut_test_bitmap+0x707><== ALWAYS TAKEN
100b77: e9 f5 06 00 00 jmp 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NOT EXECUTED
rc = rtems_rfs_bitmap_map_clear (&control, size - 1);
100b7c: 56 push %esi
100b7d: 56 push %esi
100b7e: ff b5 ec fe ff ff pushl -0x114(%ebp)
100b84: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax
100b8a: 50 push %eax
100b8b: e8 bf ee 00 00 call 10fa4f <rtems_rfs_bitmap_map_clear>
100b90: 89 c3 mov %eax,%ebx
printf (" 14. Clear bit (size - 1) (%zd): %s (%s)\n",
100b92: 89 04 24 mov %eax,(%esp)
100b95: e8 1a e9 01 00 call 11f4b4 <strerror>
100b9a: 83 c4 10 add $0x10,%esp
100b9d: ba 2b b4 12 00 mov $0x12b42b,%edx
100ba2: 85 db test %ebx,%ebx
100ba4: 75 05 jne 100bab <rtems_rfs_bitmap_ut_test_bitmap+0x736><== NEVER TAKEN
100ba6: ba 26 b4 12 00 mov $0x12b426,%edx
100bab: 83 ec 0c sub $0xc,%esp
100bae: 50 push %eax
100baf: 52 push %edx
100bb0: ff b5 ec fe ff ff pushl -0x114(%ebp)
100bb6: 68 0b b8 12 00 push $0x12b80b
100bbb: a1 a0 f2 13 00 mov 0x13f2a0,%eax
100bc0: ff 70 0c pushl 0xc(%eax)
100bc3: e8 94 db 01 00 call 11e75c <fiprintf>
size - 1, rc == 0 ? "pass" : "FAIL", strerror (rc));
rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
100bc8: 83 c4 20 add $0x20,%esp
100bcb: 85 db test %ebx,%ebx
100bcd: 7e 05 jle 100bd4 <rtems_rfs_bitmap_ut_test_bitmap+0x75f><== ALWAYS TAKEN
100bcf: e9 9d 06 00 00 jmp 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NOT EXECUTED
rc = rtems_rfs_bitmap_map_alloc (&control, 0, &result, &bit);
100bd4: 8d 85 04 ff ff ff lea -0xfc(%ebp),%eax
100bda: 50 push %eax
100bdb: 8d 85 03 ff ff ff lea -0xfd(%ebp),%eax
100be1: 50 push %eax
100be2: 6a 00 push $0x0
100be4: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax
100bea: 50 push %eax
100beb: e8 df ef 00 00 call 10fbcf <rtems_rfs_bitmap_map_alloc>
100bf0: 89 c3 mov %eax,%ebx
result = result && (bit == (size - 1));
100bf2: 83 c4 10 add $0x10,%esp
100bf5: 31 c0 xor %eax,%eax
100bf7: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100bfe: 74 12 je 100c12 <rtems_rfs_bitmap_ut_test_bitmap+0x79d><== NEVER TAKEN
100c00: 8b 85 ec fe ff ff mov -0x114(%ebp),%eax
100c06: 39 85 04 ff ff ff cmp %eax,-0xfc(%ebp)
100c0c: 0f 94 c0 sete %al
100c0f: 0f b6 c0 movzbl %al,%eax
100c12: 88 85 03 ff ff ff mov %al,-0xfd(%ebp)
100c18: 80 a5 03 ff ff ff 01 andb $0x1,-0xfd(%ebp)
printf (" 15. Find bit with seed = 0: %s (%s): bit = %" PRId32 "\n",
100c1f: 8b b5 04 ff ff ff mov -0xfc(%ebp),%esi
100c25: 83 ec 0c sub $0xc,%esp
100c28: 53 push %ebx
100c29: e8 86 e8 01 00 call 11f4b4 <strerror>
100c2e: 83 c4 10 add $0x10,%esp
100c31: ba 2b b4 12 00 mov $0x12b42b,%edx
100c36: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100c3d: 74 05 je 100c44 <rtems_rfs_bitmap_ut_test_bitmap+0x7cf><== NEVER TAKEN
100c3f: ba 26 b4 12 00 mov $0x12b426,%edx
100c44: 83 ec 0c sub $0xc,%esp
100c47: 56 push %esi
100c48: 50 push %eax
100c49: 52 push %edx
100c4a: 68 35 b8 12 00 push $0x12b835
100c4f: a1 a0 f2 13 00 mov 0x13f2a0,%eax
100c54: ff 70 0c pushl 0xc(%eax)
100c57: e8 00 db 01 00 call 11e75c <fiprintf>
result ? "pass" : "FAIL", strerror (rc), bit);
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
100c5c: 83 c4 20 add $0x20,%esp
100c5f: 85 db test %ebx,%ebx
100c61: 0f 8f 0a 06 00 00 jg 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NEVER TAKEN
100c67: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100c6e: 75 05 jne 100c75 <rtems_rfs_bitmap_ut_test_bitmap+0x800><== ALWAYS TAKEN
100c70: e9 fc 05 00 00 jmp 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NOT EXECUTED
rc = rtems_rfs_bitmap_map_clear (&control, 0);
100c75: 53 push %ebx
100c76: 53 push %ebx
100c77: 6a 00 push $0x0
100c79: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax
100c7f: 50 push %eax
100c80: e8 ca ed 00 00 call 10fa4f <rtems_rfs_bitmap_map_clear>
100c85: 89 c3 mov %eax,%ebx
printf (" 16. Clear bit 0: %s (%s)\n",
100c87: 89 04 24 mov %eax,(%esp)
100c8a: e8 25 e8 01 00 call 11f4b4 <strerror>
100c8f: 83 c4 10 add $0x10,%esp
100c92: ba 2b b4 12 00 mov $0x12b42b,%edx
100c97: 85 db test %ebx,%ebx
100c99: 75 05 jne 100ca0 <rtems_rfs_bitmap_ut_test_bitmap+0x82b><== NEVER TAKEN
100c9b: ba 26 b4 12 00 mov $0x12b426,%edx
100ca0: 50 push %eax
100ca1: 52 push %edx
100ca2: 68 66 b8 12 00 push $0x12b866
100ca7: a1 a0 f2 13 00 mov 0x13f2a0,%eax
100cac: ff 70 0c pushl 0xc(%eax)
100caf: e8 a8 da 01 00 call 11e75c <fiprintf>
rc == 0 ? "pass" : "FAIL", strerror (rc));
rc = rtems_rfs_bitmap_map_alloc (&control, size / 2, &result, &bit);
100cb4: 8b 45 08 mov 0x8(%ebp),%eax
100cb7: d1 e8 shr %eax
100cb9: 89 85 f0 fe ff ff mov %eax,-0x110(%ebp)
100cbf: 8d 85 04 ff ff ff lea -0xfc(%ebp),%eax
100cc5: 50 push %eax
100cc6: 8d 85 03 ff ff ff lea -0xfd(%ebp),%eax
100ccc: 50 push %eax
100ccd: ff b5 f0 fe ff ff pushl -0x110(%ebp)
100cd3: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax
100cd9: 50 push %eax
100cda: e8 f0 ee 00 00 call 10fbcf <rtems_rfs_bitmap_map_alloc>
100cdf: 89 c3 mov %eax,%ebx
result = result && (bit == 0);
100ce1: 83 c4 20 add $0x20,%esp
100ce4: 31 c0 xor %eax,%eax
100ce6: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100ced: 74 0c je 100cfb <rtems_rfs_bitmap_ut_test_bitmap+0x886><== NEVER TAKEN
100cef: 31 c0 xor %eax,%eax
100cf1: 83 bd 04 ff ff ff 00 cmpl $0x0,-0xfc(%ebp)
100cf8: 0f 94 c0 sete %al
100cfb: 88 85 03 ff ff ff mov %al,-0xfd(%ebp)
100d01: 80 a5 03 ff ff ff 01 andb $0x1,-0xfd(%ebp)
printf (" 17. Find bit with seed = (size / 2) (%zd): %s (%s): bit = %" PRId32 "\n",
100d08: 8b b5 04 ff ff ff mov -0xfc(%ebp),%esi
100d0e: 83 ec 0c sub $0xc,%esp
100d11: 53 push %ebx
100d12: e8 9d e7 01 00 call 11f4b4 <strerror>
100d17: 83 c4 10 add $0x10,%esp
100d1a: ba 2b b4 12 00 mov $0x12b42b,%edx
100d1f: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100d26: 74 05 je 100d2d <rtems_rfs_bitmap_ut_test_bitmap+0x8b8><== NEVER TAKEN
100d28: ba 26 b4 12 00 mov $0x12b426,%edx
100d2d: 51 push %ecx
100d2e: 51 push %ecx
100d2f: 56 push %esi
100d30: 50 push %eax
100d31: 52 push %edx
100d32: ff b5 f0 fe ff ff pushl -0x110(%ebp)
100d38: 68 81 b8 12 00 push $0x12b881
100d3d: a1 a0 f2 13 00 mov 0x13f2a0,%eax
100d42: ff 70 0c pushl 0xc(%eax)
100d45: e8 12 da 01 00 call 11e75c <fiprintf>
size / 2, result ? "pass" : "FAIL", strerror (rc), bit);
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
100d4a: 83 c4 20 add $0x20,%esp
100d4d: 85 db test %ebx,%ebx
100d4f: 0f 8f 1c 05 00 00 jg 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NEVER TAKEN
100d55: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100d5c: 75 05 jne 100d63 <rtems_rfs_bitmap_ut_test_bitmap+0x8ee><== ALWAYS TAKEN
100d5e: e9 0e 05 00 00 jmp 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NOT EXECUTED
rc = rtems_rfs_bitmap_map_clear (&control, size - 1);
100d63: 50 push %eax
100d64: 50 push %eax
100d65: ff b5 ec fe ff ff pushl -0x114(%ebp)
100d6b: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax
100d71: 50 push %eax
100d72: e8 d8 ec 00 00 call 10fa4f <rtems_rfs_bitmap_map_clear>
100d77: 89 c3 mov %eax,%ebx
printf (" 18. Clear bit (size - 1) (%zd): %s, (%s)\n",
100d79: 89 04 24 mov %eax,(%esp)
100d7c: e8 33 e7 01 00 call 11f4b4 <strerror>
100d81: 83 c4 10 add $0x10,%esp
100d84: ba 2b b4 12 00 mov $0x12b42b,%edx
100d89: 85 db test %ebx,%ebx
100d8b: 75 05 jne 100d92 <rtems_rfs_bitmap_ut_test_bitmap+0x91d><== NEVER TAKEN
100d8d: ba 26 b4 12 00 mov $0x12b426,%edx
100d92: 83 ec 0c sub $0xc,%esp
100d95: 50 push %eax
100d96: 52 push %edx
100d97: ff b5 ec fe ff ff pushl -0x114(%ebp)
100d9d: 68 c1 b8 12 00 push $0x12b8c1
100da2: a1 a0 f2 13 00 mov 0x13f2a0,%eax
100da7: ff 70 0c pushl 0xc(%eax)
100daa: e8 ad d9 01 00 call 11e75c <fiprintf>
size - 1, rc == 0 ? "pass" : "FAIL", strerror (rc));
rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
100daf: 83 c4 20 add $0x20,%esp
100db2: 85 db test %ebx,%ebx
100db4: 7e 05 jle 100dbb <rtems_rfs_bitmap_ut_test_bitmap+0x946><== ALWAYS TAKEN
100db6: e9 b6 04 00 00 jmp 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NOT EXECUTED
rc = rtems_rfs_bitmap_map_alloc (&control, size / 2, &result, &bit);
100dbb: 8d 85 04 ff ff ff lea -0xfc(%ebp),%eax
100dc1: 50 push %eax
100dc2: 8d 85 03 ff ff ff lea -0xfd(%ebp),%eax
100dc8: 50 push %eax
100dc9: ff b5 f0 fe ff ff pushl -0x110(%ebp)
100dcf: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax
100dd5: 50 push %eax
100dd6: e8 f4 ed 00 00 call 10fbcf <rtems_rfs_bitmap_map_alloc>
100ddb: 89 c3 mov %eax,%ebx
result = result && (bit == (size - 1));
100ddd: 83 c4 10 add $0x10,%esp
100de0: 31 c0 xor %eax,%eax
100de2: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100de9: 74 12 je 100dfd <rtems_rfs_bitmap_ut_test_bitmap+0x988><== NEVER TAKEN
100deb: 8b 85 ec fe ff ff mov -0x114(%ebp),%eax
100df1: 39 85 04 ff ff ff cmp %eax,-0xfc(%ebp)
100df7: 0f 94 c0 sete %al
100dfa: 0f b6 c0 movzbl %al,%eax
100dfd: 88 85 03 ff ff ff mov %al,-0xfd(%ebp)
100e03: 80 a5 03 ff ff ff 01 andb $0x1,-0xfd(%ebp)
printf (" 19. Find bit with seed = (size / 2) (%zd): %s (%s): bit = %" PRId32 "\n",
100e0a: 8b b5 04 ff ff ff mov -0xfc(%ebp),%esi
100e10: 83 ec 0c sub $0xc,%esp
100e13: 53 push %ebx
100e14: e8 9b e6 01 00 call 11f4b4 <strerror>
100e19: 83 c4 10 add $0x10,%esp
100e1c: ba 2b b4 12 00 mov $0x12b42b,%edx
100e21: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100e28: 74 05 je 100e2f <rtems_rfs_bitmap_ut_test_bitmap+0x9ba><== NEVER TAKEN
100e2a: ba 26 b4 12 00 mov $0x12b426,%edx
100e2f: 57 push %edi
100e30: 57 push %edi
100e31: 56 push %esi
100e32: 50 push %eax
100e33: 52 push %edx
100e34: ff b5 f0 fe ff ff pushl -0x110(%ebp)
100e3a: 68 ec b8 12 00 push $0x12b8ec
100e3f: a1 a0 f2 13 00 mov 0x13f2a0,%eax
100e44: ff 70 0c pushl 0xc(%eax)
100e47: e8 10 d9 01 00 call 11e75c <fiprintf>
size / 2, result ? "pass" : "FAIL", strerror (rc), bit);
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
100e4c: 83 c4 20 add $0x20,%esp
100e4f: 85 db test %ebx,%ebx
100e51: 0f 8f 1a 04 00 00 jg 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NEVER TAKEN
100e57: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100e5e: 75 05 jne 100e65 <rtems_rfs_bitmap_ut_test_bitmap+0x9f0><== ALWAYS TAKEN
100e60: e9 0c 04 00 00 jmp 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NOT EXECUTED
rc = rtems_rfs_bitmap_map_clear (&control, 0);
100e65: 53 push %ebx
100e66: 53 push %ebx
100e67: 6a 00 push $0x0
100e69: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax
100e6f: 50 push %eax
100e70: e8 da eb 00 00 call 10fa4f <rtems_rfs_bitmap_map_clear>
100e75: 89 c3 mov %eax,%ebx
printf (" 20. Clear bit 0: %s (%s)\n",
100e77: 89 04 24 mov %eax,(%esp)
100e7a: e8 35 e6 01 00 call 11f4b4 <strerror>
100e7f: 83 c4 10 add $0x10,%esp
100e82: ba 2b b4 12 00 mov $0x12b42b,%edx
100e87: 85 db test %ebx,%ebx
100e89: 75 05 jne 100e90 <rtems_rfs_bitmap_ut_test_bitmap+0xa1b><== NEVER TAKEN
100e8b: ba 26 b4 12 00 mov $0x12b426,%edx
100e90: 50 push %eax
100e91: 52 push %edx
100e92: 68 2c b9 12 00 push $0x12b92c
100e97: a1 a0 f2 13 00 mov 0x13f2a0,%eax
100e9c: ff 70 0c pushl 0xc(%eax)
100e9f: e8 b8 d8 01 00 call 11e75c <fiprintf>
rc == 0 ? "pass" : "FAIL", strerror (rc));
rc = rtems_rfs_bitmap_map_alloc (&control, (size / 2) - 1, &result, &bit);
100ea4: 8b 9d f0 fe ff ff mov -0x110(%ebp),%ebx
100eaa: 4b dec %ebx
100eab: 8d 85 04 ff ff ff lea -0xfc(%ebp),%eax
100eb1: 50 push %eax
100eb2: 8d 85 03 ff ff ff lea -0xfd(%ebp),%eax
100eb8: 50 push %eax
100eb9: 53 push %ebx
100eba: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax
100ec0: 50 push %eax
100ec1: e8 09 ed 00 00 call 10fbcf <rtems_rfs_bitmap_map_alloc>
100ec6: 89 c6 mov %eax,%esi
result = result && (bit == 0);
100ec8: 83 c4 20 add $0x20,%esp
100ecb: 31 c0 xor %eax,%eax
100ecd: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100ed4: 74 0c je 100ee2 <rtems_rfs_bitmap_ut_test_bitmap+0xa6d><== NEVER TAKEN
100ed6: 31 c0 xor %eax,%eax
100ed8: 83 bd 04 ff ff ff 00 cmpl $0x0,-0xfc(%ebp)
100edf: 0f 94 c0 sete %al
100ee2: 88 85 03 ff ff ff mov %al,-0xfd(%ebp)
100ee8: 80 a5 03 ff ff ff 01 andb $0x1,-0xfd(%ebp)
printf (" 21. Find bit with seed = ((size / 2) - 1) (%zd): %s (%s): bit = %" PRId32 "\n",
100eef: 8b bd 04 ff ff ff mov -0xfc(%ebp),%edi
100ef5: 83 ec 0c sub $0xc,%esp
100ef8: 56 push %esi
100ef9: e8 b6 e5 01 00 call 11f4b4 <strerror>
100efe: 83 c4 10 add $0x10,%esp
100f01: ba 2b b4 12 00 mov $0x12b42b,%edx
100f06: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100f0d: 74 05 je 100f14 <rtems_rfs_bitmap_ut_test_bitmap+0xa9f><== NEVER TAKEN
100f0f: ba 26 b4 12 00 mov $0x12b426,%edx
100f14: 51 push %ecx
100f15: 51 push %ecx
100f16: 57 push %edi
100f17: 50 push %eax
100f18: 52 push %edx
100f19: 53 push %ebx
100f1a: 68 47 b9 12 00 push $0x12b947
100f1f: a1 a0 f2 13 00 mov 0x13f2a0,%eax
100f24: ff 70 0c pushl 0xc(%eax)
100f27: e8 30 d8 01 00 call 11e75c <fiprintf>
(size / 2) - 1, result ? "pass" : "FAIL", strerror (rc), bit);
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
100f2c: 83 c4 20 add $0x20,%esp
100f2f: 85 f6 test %esi,%esi
100f31: 0f 8f 3a 03 00 00 jg 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NEVER TAKEN
100f37: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100f3e: 75 05 jne 100f45 <rtems_rfs_bitmap_ut_test_bitmap+0xad0><== ALWAYS TAKEN
100f40: e9 2c 03 00 00 jmp 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NOT EXECUTED
rc = rtems_rfs_bitmap_map_clear (&control, size - 1);
100f45: 56 push %esi
100f46: 56 push %esi
100f47: ff b5 ec fe ff ff pushl -0x114(%ebp)
100f4d: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax
100f53: 50 push %eax
100f54: e8 f6 ea 00 00 call 10fa4f <rtems_rfs_bitmap_map_clear>
100f59: 89 c6 mov %eax,%esi
printf (" 22. Clear bit (size - 1) (%zd): %s (%s)\n",
100f5b: 89 04 24 mov %eax,(%esp)
100f5e: e8 51 e5 01 00 call 11f4b4 <strerror>
100f63: 83 c4 10 add $0x10,%esp
100f66: ba 2b b4 12 00 mov $0x12b42b,%edx
100f6b: 85 f6 test %esi,%esi
100f6d: 75 05 jne 100f74 <rtems_rfs_bitmap_ut_test_bitmap+0xaff><== NEVER TAKEN
100f6f: ba 26 b4 12 00 mov $0x12b426,%edx
100f74: 83 ec 0c sub $0xc,%esp
100f77: 50 push %eax
100f78: 52 push %edx
100f79: ff b5 ec fe ff ff pushl -0x114(%ebp)
100f7f: 68 8d b9 12 00 push $0x12b98d
100f84: a1 a0 f2 13 00 mov 0x13f2a0,%eax
100f89: ff 70 0c pushl 0xc(%eax)
100f8c: e8 cb d7 01 00 call 11e75c <fiprintf>
size - 1, rc == 0 ? "pass" : "FAIL", strerror (rc));
rc = rtems_rfs_bitmap_map_alloc (&control, (size / 2) - 1, &result, &bit);
100f91: 83 c4 20 add $0x20,%esp
100f94: 8d 85 04 ff ff ff lea -0xfc(%ebp),%eax
100f9a: 50 push %eax
100f9b: 8d 85 03 ff ff ff lea -0xfd(%ebp),%eax
100fa1: 50 push %eax
100fa2: 53 push %ebx
100fa3: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax
100fa9: 50 push %eax
100faa: e8 20 ec 00 00 call 10fbcf <rtems_rfs_bitmap_map_alloc>
100faf: 89 c6 mov %eax,%esi
result = result && (bit == (size - 1));
100fb1: 83 c4 10 add $0x10,%esp
100fb4: 31 c0 xor %eax,%eax
100fb6: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100fbd: 74 12 je 100fd1 <rtems_rfs_bitmap_ut_test_bitmap+0xb5c><== NEVER TAKEN
100fbf: 8b 85 ec fe ff ff mov -0x114(%ebp),%eax
100fc5: 39 85 04 ff ff ff cmp %eax,-0xfc(%ebp)
100fcb: 0f 94 c0 sete %al
100fce: 0f b6 c0 movzbl %al,%eax
100fd1: 88 85 03 ff ff ff mov %al,-0xfd(%ebp)
100fd7: 80 a5 03 ff ff ff 01 andb $0x1,-0xfd(%ebp)
printf (" 23. Find bit with seed = ((size / 2) - 1) (%zd): %s (%s): bit = %" PRId32 "\n",
100fde: 8b bd 04 ff ff ff mov -0xfc(%ebp),%edi
100fe4: 83 ec 0c sub $0xc,%esp
100fe7: 56 push %esi
100fe8: e8 c7 e4 01 00 call 11f4b4 <strerror>
100fed: 83 c4 10 add $0x10,%esp
100ff0: ba 2b b4 12 00 mov $0x12b42b,%edx
100ff5: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
100ffc: 74 05 je 101003 <rtems_rfs_bitmap_ut_test_bitmap+0xb8e><== NEVER TAKEN
100ffe: ba 26 b4 12 00 mov $0x12b426,%edx
101003: 51 push %ecx
101004: 51 push %ecx
101005: 57 push %edi
101006: 50 push %eax
101007: 52 push %edx
101008: 53 push %ebx
101009: 68 b7 b9 12 00 push $0x12b9b7
10100e: a1 a0 f2 13 00 mov 0x13f2a0,%eax
101013: ff 70 0c pushl 0xc(%eax)
101016: e8 41 d7 01 00 call 11e75c <fiprintf>
(size / 2) - 1, result ? "pass" : "FAIL", strerror (rc), bit);
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
10101b: 83 c4 20 add $0x20,%esp
10101e: 85 f6 test %esi,%esi
101020: 0f 8f 4b 02 00 00 jg 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NEVER TAKEN
101026: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
10102d: 75 05 jne 101034 <rtems_rfs_bitmap_ut_test_bitmap+0xbbf><== ALWAYS TAKEN
10102f: e9 3d 02 00 00 jmp 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NOT EXECUTED
bit = rand () % (size / 2) + rtems_rfs_bitmap_element_bits ();
101034: e8 97 db 01 00 call 11ebd0 <rand>
101039: 31 d2 xor %edx,%edx
10103b: f7 b5 f0 fe ff ff divl -0x110(%ebp)
101041: 8d 42 20 lea 0x20(%edx),%eax
101044: 89 85 04 ff ff ff mov %eax,-0xfc(%ebp)
result = rtems_rfs_bitmap_ut_alloc_seq_test (&control, 23, bit,
10104a: 6a 20 push $0x20
10104c: 50 push %eax
10104d: 6a 17 push $0x17
10104f: 8d 9d 14 ff ff ff lea -0xec(%ebp),%ebx
101055: 53 push %ebx
101056: e8 8f f2 ff ff call 1002ea <rtems_rfs_bitmap_ut_alloc_seq_test>
10105b: 88 85 03 ff ff ff mov %al,-0xfd(%ebp)
rtems_rfs_bitmap_element_bits ());
rtems_rfs_exit_on_error (0, !result, &control, buffer.buffer);
101061: 83 c4 10 add $0x10,%esp
101064: 84 c0 test %al,%al
101066: 75 05 jne 10106d <rtems_rfs_bitmap_ut_test_bitmap+0xbf8><== ALWAYS TAKEN
101068: e9 ea 00 00 00 jmp 101157 <rtems_rfs_bitmap_ut_test_bitmap+0xce2><== NOT EXECUTED
bit = rand () % (size / 2) + rtems_rfs_bitmap_element_bits ();
10106d: e8 5e db 01 00 call 11ebd0 <rand>
101072: 31 d2 xor %edx,%edx
101074: f7 b5 f0 fe ff ff divl -0x110(%ebp)
10107a: 8d 42 20 lea 0x20(%edx),%eax
10107d: 89 85 04 ff ff ff mov %eax,-0xfc(%ebp)
result = rtems_rfs_bitmap_ut_alloc_seq_test (&control, 24, bit, 57);
101083: 6a 39 push $0x39
101085: 50 push %eax
101086: 6a 18 push $0x18
101088: 53 push %ebx
101089: e8 5c f2 ff ff call 1002ea <rtems_rfs_bitmap_ut_alloc_seq_test>
10108e: 88 85 03 ff ff ff mov %al,-0xfd(%ebp)
rtems_rfs_exit_on_error (0, !result, &control, buffer.buffer);
101094: 83 c4 10 add $0x10,%esp
101097: 84 c0 test %al,%al
101099: 75 05 jne 1010a0 <rtems_rfs_bitmap_ut_test_bitmap+0xc2b><== ALWAYS TAKEN
10109b: e9 b7 00 00 00 jmp 101157 <rtems_rfs_bitmap_ut_test_bitmap+0xce2><== NOT EXECUTED
/*
* Set all bits, clear a random numberone then create a search map and make
* sure the clear count is correct.
*/
rc = rtems_rfs_bitmap_map_set_all (&control);
1010a0: 83 ec 0c sub $0xc,%esp
1010a3: 53 push %ebx
1010a4: e8 4a ea 00 00 call 10faf3 <rtems_rfs_bitmap_map_set_all>
1010a9: 89 c6 mov %eax,%esi
printf (" 25. Set all bits: %s (%s)\n",
1010ab: 89 04 24 mov %eax,(%esp)
1010ae: e8 01 e4 01 00 call 11f4b4 <strerror>
1010b3: 83 c4 10 add $0x10,%esp
1010b6: ba 2b b4 12 00 mov $0x12b42b,%edx
1010bb: 85 f6 test %esi,%esi
1010bd: 75 05 jne 1010c4 <rtems_rfs_bitmap_ut_test_bitmap+0xc4f><== NEVER TAKEN
1010bf: ba 99 b5 12 00 mov $0x12b599,%edx
1010c4: 50 push %eax
1010c5: 52 push %edx
1010c6: 68 fd b9 12 00 push $0x12b9fd
1010cb: a1 a0 f2 13 00 mov 0x13f2a0,%eax
1010d0: ff 70 0c pushl 0xc(%eax)
1010d3: e8 84 d6 01 00 call 11e75c <fiprintf>
rc == 0 ? "PASS" : "FAIL", strerror (rc));
rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
1010d8: 83 c4 10 add $0x10,%esp
1010db: 85 f6 test %esi,%esi
1010dd: 7e 05 jle 1010e4 <rtems_rfs_bitmap_ut_test_bitmap+0xc6f><== ALWAYS TAKEN
1010df: e9 8d 01 00 00 jmp 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NOT EXECUTED
first_bit = rand () % (size / 2) + rtems_rfs_bitmap_element_bits ();
1010e4: e8 e7 da 01 00 call 11ebd0 <rand>
1010e9: 31 d2 xor %edx,%edx
1010eb: f7 b5 f0 fe ff ff divl -0x110(%ebp)
1010f1: 8d 7a 20 lea 0x20(%edx),%edi
last_bit = first_bit + rand () % (size / 2) + rtems_rfs_bitmap_element_bits();
1010f4: e8 d7 da 01 00 call 11ebd0 <rand>
1010f9: 31 d2 xor %edx,%edx
1010fb: f7 b5 f0 fe ff ff divl -0x110(%ebp)
101101: 8d 54 17 20 lea 0x20(%edi,%edx,1),%edx
101105: 89 95 e8 fe ff ff mov %edx,-0x118(%ebp)
for (bit = first_bit; bit < last_bit; bit++)
10110b: 89 bd 04 ff ff ff mov %edi,-0xfc(%ebp)
{
rc = rtems_rfs_bitmap_map_clear (&control, bit);
101111: 8d 9d 14 ff ff ff lea -0xec(%ebp),%ebx
rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
first_bit = rand () % (size / 2) + rtems_rfs_bitmap_element_bits ();
last_bit = first_bit + rand () % (size / 2) + rtems_rfs_bitmap_element_bits();
for (bit = first_bit; bit < last_bit; bit++)
101117: eb 5a jmp 101173 <rtems_rfs_bitmap_ut_test_bitmap+0xcfe>
{
rc = rtems_rfs_bitmap_map_clear (&control, bit);
101119: 56 push %esi
10111a: 56 push %esi
10111b: 50 push %eax
10111c: 53 push %ebx
10111d: e8 2d e9 00 00 call 10fa4f <rtems_rfs_bitmap_map_clear>
101122: 89 c6 mov %eax,%esi
if (rc > 0)
101124: 83 c4 10 add $0x10,%esp
101127: 85 c0 test %eax,%eax
101129: 7e 42 jle 10116d <rtems_rfs_bitmap_ut_test_bitmap+0xcf8><== ALWAYS TAKEN
{
printf (" 26. Clear bit %" PRId32 ": %s (%s)\n",
10112b: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10112e: 50 push %eax <== NOT EXECUTED
10112f: e8 80 e3 01 00 call 11f4b4 <strerror> <== NOT EXECUTED
101134: 89 04 24 mov %eax,(%esp) <== NOT EXECUTED
101137: 68 2b b4 12 00 push $0x12b42b <== NOT EXECUTED
10113c: ff b5 04 ff ff ff pushl -0xfc(%ebp) <== NOT EXECUTED
101142: 68 19 ba 12 00 push $0x12ba19 <== NOT EXECUTED
101147: a1 a0 f2 13 00 mov 0x13f2a0,%eax <== NOT EXECUTED
10114c: ff 70 0c pushl 0xc(%eax) <== NOT EXECUTED
10114f: e8 08 d6 01 00 call 11e75c <fiprintf> <== NOT EXECUTED
bit, rc == 0 ? "PASS" : "FAIL", strerror (rc));
rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
101154: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
101157: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10115a: ff b5 48 ff ff ff pushl -0xb8(%ebp) <== NOT EXECUTED
101160: e8 c7 75 00 00 call 10872c <free> <== NOT EXECUTED
101165: 89 1c 24 mov %ebx,(%esp) <== NOT EXECUTED
101168: e9 1b 01 00 00 jmp 101288 <rtems_rfs_bitmap_ut_test_bitmap+0xe13><== NOT EXECUTED
rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
first_bit = rand () % (size / 2) + rtems_rfs_bitmap_element_bits ();
last_bit = first_bit + rand () % (size / 2) + rtems_rfs_bitmap_element_bits();
for (bit = first_bit; bit < last_bit; bit++)
10116d: ff 85 04 ff ff ff incl -0xfc(%ebp)
101173: 8b 85 04 ff ff ff mov -0xfc(%ebp),%eax
101179: 3b 85 e8 fe ff ff cmp -0x118(%ebp),%eax
10117f: 7c 98 jl 101119 <rtems_rfs_bitmap_ut_test_bitmap+0xca4>
bit, rc == 0 ? "PASS" : "FAIL", strerror (rc));
rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
}
}
printf (" 26. Clear bit (%" PRId32 ", %" PRId32 "]: %s (%s)\n",
101181: 83 ec 0c sub $0xc,%esp
101184: 56 push %esi
101185: e8 2a e3 01 00 call 11f4b4 <strerror>
10118a: 83 c4 10 add $0x10,%esp
10118d: ba 2b b4 12 00 mov $0x12b42b,%edx
101192: 85 f6 test %esi,%esi
101194: 75 05 jne 10119b <rtems_rfs_bitmap_ut_test_bitmap+0xd26><== NEVER TAKEN
101196: ba 99 b5 12 00 mov $0x12b599,%edx
10119b: 53 push %ebx
10119c: 53 push %ebx
10119d: 50 push %eax
10119e: 52 push %edx
10119f: ff b5 e8 fe ff ff pushl -0x118(%ebp)
1011a5: 57 push %edi
1011a6: 68 36 ba 12 00 push $0x12ba36
1011ab: a1 a0 f2 13 00 mov 0x13f2a0,%eax
1011b0: ff 70 0c pushl 0xc(%eax)
1011b3: e8 a4 d5 01 00 call 11e75c <fiprintf>
first_bit, last_bit, rc == 0 ? "PASS" : "FAIL", strerror (rc));
clear = rtems_rfs_bitmap_map_free (&control);
1011b8: 8b 9d 24 ff ff ff mov -0xdc(%ebp),%ebx
result = clear == (last_bit - first_bit);
1011be: 8b 85 e8 fe ff ff mov -0x118(%ebp),%eax
1011c4: 29 f8 sub %edi,%eax
1011c6: 89 c7 mov %eax,%edi
1011c8: 83 c4 14 add $0x14,%esp
1011cb: 39 c3 cmp %eax,%ebx
1011cd: 0f 94 85 03 ff ff ff sete -0xfd(%ebp)
printf (" 27. Check free count is %zd: %" PRId32 ": %s (%s)\n",
1011d4: 56 push %esi
1011d5: e8 da e2 01 00 call 11f4b4 <strerror>
1011da: 83 c4 10 add $0x10,%esp
1011dd: ba 2b b4 12 00 mov $0x12b42b,%edx
1011e2: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
1011e9: 74 05 je 1011f0 <rtems_rfs_bitmap_ut_test_bitmap+0xd7b><== NEVER TAKEN
1011eb: ba 26 b4 12 00 mov $0x12b426,%edx
1011f0: 51 push %ecx
1011f1: 51 push %ecx
1011f2: 50 push %eax
1011f3: 52 push %edx
1011f4: 57 push %edi
1011f5: 53 push %ebx
1011f6: 68 5a ba 12 00 push $0x12ba5a
1011fb: a1 a0 f2 13 00 mov 0x13f2a0,%eax
101200: ff 70 0c pushl 0xc(%eax)
101203: e8 54 d5 01 00 call 11e75c <fiprintf>
clear, last_bit - first_bit,
result ? "pass" : "FAIL", strerror (rc));
rc = rtems_rfs_bitmap_create_search (&control);
101208: 83 c4 14 add $0x14,%esp
10120b: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax
101211: 50 push %eax
101212: e8 61 ea 00 00 call 10fc78 <rtems_rfs_bitmap_create_search>
101217: 89 c6 mov %eax,%esi
result = clear == rtems_rfs_bitmap_map_free (&control);
101219: 3b 9d 24 ff ff ff cmp -0xdc(%ebp),%ebx
10121f: 0f 94 85 03 ff ff ff sete -0xfd(%ebp)
printf (" 28. Create search check free count is %zd: %zd: %s (%s)\n",
101226: 89 04 24 mov %eax,(%esp)
101229: e8 86 e2 01 00 call 11f4b4 <strerror>
10122e: 83 c4 10 add $0x10,%esp
101231: ba 2b b4 12 00 mov $0x12b42b,%edx
101236: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
10123d: 74 05 je 101244 <rtems_rfs_bitmap_ut_test_bitmap+0xdcf><== NEVER TAKEN
10123f: ba 26 b4 12 00 mov $0x12b426,%edx
101244: 57 push %edi
101245: 57 push %edi
101246: 50 push %eax
101247: 52 push %edx
101248: ff b5 24 ff ff ff pushl -0xdc(%ebp)
10124e: 53 push %ebx
10124f: 68 86 ba 12 00 push $0x12ba86
101254: a1 a0 f2 13 00 mov 0x13f2a0,%eax
101259: ff 70 0c pushl 0xc(%eax)
10125c: e8 fb d4 01 00 call 11e75c <fiprintf>
clear, rtems_rfs_bitmap_map_free (&control),
result ? "pass" : "FAIL", strerror (rc));
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
101261: 83 c4 20 add $0x20,%esp
101264: 85 f6 test %esi,%esi
101266: 7f 09 jg 101271 <rtems_rfs_bitmap_ut_test_bitmap+0xdfc><== NEVER TAKEN
101268: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
10126f: 75 21 jne 101292 <rtems_rfs_bitmap_ut_test_bitmap+0xe1d><== ALWAYS TAKEN
101271: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
101274: ff b5 48 ff ff ff pushl -0xb8(%ebp) <== NOT EXECUTED
10127a: e8 ad 74 00 00 call 10872c <free> <== NOT EXECUTED
10127f: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax <== NOT EXECUTED
101285: 89 04 24 mov %eax,(%esp) <== NOT EXECUTED
101288: e8 f4 ea 00 00 call 10fd81 <rtems_rfs_bitmap_close><== NOT EXECUTED
10128d: e9 43 03 00 00 jmp 1015d5 <rtems_rfs_bitmap_ut_test_bitmap+0x1160><== NOT EXECUTED
rtems_rfs_bitmap_bit mybit = control.size +2;
101292: 8b 85 20 ff ff ff mov -0xe0(%ebp),%eax
101298: 8d 70 02 lea 0x2(%eax),%esi
printf (" 29. Map set check with bit (%d) larger than size (%d)\n",
10129b: 50 push %eax
10129c: 56 push %esi
10129d: 68 c0 ba 12 00 push $0x12bac0
1012a2: a1 a0 f2 13 00 mov 0x13f2a0,%eax
1012a7: ff 70 0c pushl 0xc(%eax)
1012aa: e8 ad d4 01 00 call 11e75c <fiprintf>
(int)mybit, (int)control.size);
rc = rtems_rfs_bitmap_map_set(&control, mybit);
1012af: 59 pop %ecx
1012b0: 5b pop %ebx
1012b1: 56 push %esi
1012b2: 8d 9d 14 ff ff ff lea -0xec(%ebp),%ebx
1012b8: 53 push %ebx
1012b9: e8 21 e7 00 00 call 10f9df <rtems_rfs_bitmap_map_set>
rtems_test_assert( rc == EINVAL );
1012be: 83 c4 10 add $0x10,%esp
1012c1: 83 f8 16 cmp $0x16,%eax
1012c4: 74 0f je 1012d5 <rtems_rfs_bitmap_ut_test_bitmap+0xe60><== ALWAYS TAKEN
1012c6: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1012c9: 68 f8 ba 12 00 push $0x12baf8 <== NOT EXECUTED
1012ce: 68 7d 01 00 00 push $0x17d <== NOT EXECUTED
1012d3: eb 37 jmp 10130c <rtems_rfs_bitmap_ut_test_bitmap+0xe97><== NOT EXECUTED
printf (" 30. Map clear check with bit (%d) larger than size (%d)\n",
1012d5: ff b5 20 ff ff ff pushl -0xe0(%ebp)
1012db: 56 push %esi
1012dc: 68 74 bb 12 00 push $0x12bb74
1012e1: a1 a0 f2 13 00 mov 0x13f2a0,%eax
1012e6: ff 70 0c pushl 0xc(%eax)
1012e9: e8 6e d4 01 00 call 11e75c <fiprintf>
(int)mybit, (int)control.size);
rc = rtems_rfs_bitmap_map_clear(&control, mybit);
1012ee: 58 pop %eax
1012ef: 5a pop %edx
1012f0: 56 push %esi
1012f1: 53 push %ebx
1012f2: e8 58 e7 00 00 call 10fa4f <rtems_rfs_bitmap_map_clear>
rtems_test_assert( rc == EINVAL );
1012f7: 83 c4 10 add $0x10,%esp
1012fa: 83 f8 16 cmp $0x16,%eax
1012fd: 74 2e je 10132d <rtems_rfs_bitmap_ut_test_bitmap+0xeb8><== ALWAYS TAKEN
1012ff: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
101302: 68 f8 ba 12 00 push $0x12baf8 <== NOT EXECUTED
101307: 68 82 01 00 00 push $0x182 <== NOT EXECUTED
10130c: 68 05 bb 12 00 push $0x12bb05 <== NOT EXECUTED
101311: 68 69 bb 12 00 push $0x12bb69 <== NOT EXECUTED
101316: a1 a0 f2 13 00 mov 0x13f2a0,%eax <== NOT EXECUTED
10131b: ff 70 0c pushl 0xc(%eax) <== NOT EXECUTED
10131e: e8 39 d4 01 00 call 11e75c <fiprintf> <== NOT EXECUTED
101323: 83 c4 14 add $0x14,%esp <== NOT EXECUTED
101326: 6a 00 push $0x0 <== NOT EXECUTED
101328: e8 67 cd 01 00 call 11e094 <exit> <== NOT EXECUTED
printf (" 31. Map test check with bit (%d) larger than size (%d)\n",
10132d: ff b5 20 ff ff ff pushl -0xe0(%ebp)
101333: 56 push %esi
101334: 68 ae bb 12 00 push $0x12bbae
101339: a1 a0 f2 13 00 mov 0x13f2a0,%eax
10133e: ff 70 0c pushl 0xc(%eax)
101341: e8 16 d4 01 00 call 11e75c <fiprintf>
(int)mybit, (int)control.size);
rc = rtems_rfs_bitmap_map_test(&control, mybit ,&result);
101346: 83 c4 0c add $0xc,%esp
101349: 8d bd 03 ff ff ff lea -0xfd(%ebp),%edi
10134f: 57 push %edi
101350: 56 push %esi
101351: 53 push %ebx
101352: e8 56 e7 00 00 call 10faad <rtems_rfs_bitmap_map_test>
rtems_test_assert( rc == EINVAL );
101357: 83 c4 10 add $0x10,%esp
10135a: 83 f8 16 cmp $0x16,%eax
10135d: 74 0f je 10136e <rtems_rfs_bitmap_ut_test_bitmap+0xef9><== ALWAYS TAKEN
10135f: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
101362: 68 f8 ba 12 00 push $0x12baf8 <== NOT EXECUTED
101367: 68 87 01 00 00 push $0x187 <== NOT EXECUTED
10136c: eb 9e jmp 10130c <rtems_rfs_bitmap_ut_test_bitmap+0xe97><== NOT EXECUTED
/* Set all bits, clear one and then set this cleared bit once again */
printf (" 32. Set all bits in the map, then clear bit (%lu) and set this bit once again:",control.size/2);
10136e: 50 push %eax
10136f: 8b 85 20 ff ff ff mov -0xe0(%ebp),%eax
101375: d1 e8 shr %eax
101377: 50 push %eax
101378: 68 e7 bb 12 00 push $0x12bbe7
10137d: a1 a0 f2 13 00 mov 0x13f2a0,%eax
101382: ff 70 0c pushl 0xc(%eax)
101385: e8 d2 d3 01 00 call 11e75c <fiprintf>
rc = rtems_rfs_bitmap_map_set_all(&control);
10138a: 89 1c 24 mov %ebx,(%esp)
10138d: e8 61 e7 00 00 call 10faf3 <rtems_rfs_bitmap_map_set_all>
rtems_test_assert( rc == 0 );
101392: 83 c4 10 add $0x10,%esp
101395: 85 c0 test %eax,%eax
101397: 74 12 je 1013ab <rtems_rfs_bitmap_ut_test_bitmap+0xf36><== ALWAYS TAKEN
101399: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10139c: 68 37 bc 12 00 push $0x12bc37 <== NOT EXECUTED
1013a1: 68 8c 01 00 00 push $0x18c <== NOT EXECUTED
1013a6: e9 61 ff ff ff jmp 10130c <rtems_rfs_bitmap_ut_test_bitmap+0xe97><== NOT EXECUTED
rc = rtems_rfs_bitmap_map_clear(&control, control.size/2);
1013ab: 50 push %eax
1013ac: 50 push %eax
1013ad: 8b 85 20 ff ff ff mov -0xe0(%ebp),%eax
1013b3: d1 e8 shr %eax
1013b5: 50 push %eax
1013b6: 53 push %ebx
1013b7: e8 93 e6 00 00 call 10fa4f <rtems_rfs_bitmap_map_clear>
rtems_test_assert (rc == 0 );
1013bc: 83 c4 10 add $0x10,%esp
1013bf: 85 c0 test %eax,%eax
1013c1: 74 12 je 1013d5 <rtems_rfs_bitmap_ut_test_bitmap+0xf60><== ALWAYS TAKEN
1013c3: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1013c6: 68 37 bc 12 00 push $0x12bc37 <== NOT EXECUTED
1013cb: 68 8e 01 00 00 push $0x18e <== NOT EXECUTED
1013d0: e9 37 ff ff ff jmp 10130c <rtems_rfs_bitmap_ut_test_bitmap+0xe97><== NOT EXECUTED
rc = rtems_rfs_bitmap_map_set(&control, control.size/2);
1013d5: 50 push %eax
1013d6: 50 push %eax
1013d7: 8b 85 20 ff ff ff mov -0xe0(%ebp),%eax
1013dd: d1 e8 shr %eax
1013df: 50 push %eax
1013e0: 53 push %ebx
1013e1: e8 f9 e5 00 00 call 10f9df <rtems_rfs_bitmap_map_set>
rtems_test_assert (rc == 0 );
1013e6: 83 c4 10 add $0x10,%esp
1013e9: 85 c0 test %eax,%eax
1013eb: 74 12 je 1013ff <rtems_rfs_bitmap_ut_test_bitmap+0xf8a><== ALWAYS TAKEN
1013ed: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1013f0: 68 37 bc 12 00 push $0x12bc37 <== NOT EXECUTED
1013f5: 68 90 01 00 00 push $0x190 <== NOT EXECUTED
1013fa: e9 0d ff ff ff jmp 10130c <rtems_rfs_bitmap_ut_test_bitmap+0xe97><== NOT EXECUTED
printf (" PASSED\n");
1013ff: 51 push %ecx
101400: 51 push %ecx
101401: 68 3f bc 12 00 push $0x12bc3f
101406: a1 a0 f2 13 00 mov 0x13f2a0,%eax
10140b: ff 70 0c pushl 0xc(%eax)
10140e: e8 49 d3 01 00 call 11e75c <fiprintf>
/* Attempt to find free bit (with different seeds) when all bits are set */
printf (" 33. Attempt to find bit when all bits are set (expected FAILED):");
101413: 5e pop %esi
101414: 58 pop %eax
101415: 68 49 bc 12 00 push $0x12bc49
10141a: a1 a0 f2 13 00 mov 0x13f2a0,%eax
10141f: ff 70 0c pushl 0xc(%eax)
101422: e8 35 d3 01 00 call 11e75c <fiprintf>
rc = rtems_rfs_bitmap_map_alloc(&control, 0, &result, &bit);
101427: 8d b5 04 ff ff ff lea -0xfc(%ebp),%esi
10142d: 56 push %esi
10142e: 57 push %edi
10142f: 6a 00 push $0x0
101431: 53 push %ebx
101432: e8 98 e7 00 00 call 10fbcf <rtems_rfs_bitmap_map_alloc>
rtems_test_assert(rc == 0 );
101437: 83 c4 20 add $0x20,%esp
10143a: 85 c0 test %eax,%eax
10143c: 74 12 je 101450 <rtems_rfs_bitmap_ut_test_bitmap+0xfdb><== ALWAYS TAKEN
10143e: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
101441: 68 37 bc 12 00 push $0x12bc37 <== NOT EXECUTED
101446: 68 96 01 00 00 push $0x196 <== NOT EXECUTED
10144b: e9 bc fe ff ff jmp 10130c <rtems_rfs_bitmap_ut_test_bitmap+0xe97><== NOT EXECUTED
rtems_test_assert ( result == false );
101450: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
101457: 74 12 je 10146b <rtems_rfs_bitmap_ut_test_bitmap+0xff6><== ALWAYS TAKEN
101459: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10145c: 68 8b bc 12 00 push $0x12bc8b <== NOT EXECUTED
101461: 68 97 01 00 00 push $0x197 <== NOT EXECUTED
101466: e9 a1 fe ff ff jmp 10130c <rtems_rfs_bitmap_ut_test_bitmap+0xe97><== NOT EXECUTED
rc = rtems_rfs_bitmap_map_alloc(&control, size-1, &result, &bit);
10146b: 56 push %esi
10146c: 8d 9d 03 ff ff ff lea -0xfd(%ebp),%ebx
101472: 53 push %ebx
101473: ff b5 ec fe ff ff pushl -0x114(%ebp)
101479: 8d bd 14 ff ff ff lea -0xec(%ebp),%edi
10147f: 57 push %edi
101480: e8 4a e7 00 00 call 10fbcf <rtems_rfs_bitmap_map_alloc>
rtems_test_assert(rc == 0 );
101485: 83 c4 10 add $0x10,%esp
101488: 85 c0 test %eax,%eax
10148a: 74 12 je 10149e <rtems_rfs_bitmap_ut_test_bitmap+0x1029><== ALWAYS TAKEN
10148c: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10148f: 68 37 bc 12 00 push $0x12bc37 <== NOT EXECUTED
101494: 68 99 01 00 00 push $0x199 <== NOT EXECUTED
101499: e9 6e fe ff ff jmp 10130c <rtems_rfs_bitmap_ut_test_bitmap+0xe97><== NOT EXECUTED
rtems_test_assert ( result == false );
10149e: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
1014a5: 74 12 je 1014b9 <rtems_rfs_bitmap_ut_test_bitmap+0x1044><== ALWAYS TAKEN
1014a7: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1014aa: 68 8b bc 12 00 push $0x12bc8b <== NOT EXECUTED
1014af: 68 9a 01 00 00 push $0x19a <== NOT EXECUTED
1014b4: e9 53 fe ff ff jmp 10130c <rtems_rfs_bitmap_ut_test_bitmap+0xe97><== NOT EXECUTED
rc = rtems_rfs_bitmap_map_alloc(&control, size/2, &result, &bit);
1014b9: 56 push %esi
1014ba: 53 push %ebx
1014bb: ff b5 f0 fe ff ff pushl -0x110(%ebp)
1014c1: 57 push %edi
1014c2: e8 08 e7 00 00 call 10fbcf <rtems_rfs_bitmap_map_alloc>
rtems_test_assert(rc == 0 );
1014c7: 83 c4 10 add $0x10,%esp
1014ca: 85 c0 test %eax,%eax
1014cc: 74 12 je 1014e0 <rtems_rfs_bitmap_ut_test_bitmap+0x106b><== ALWAYS TAKEN
1014ce: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1014d1: 68 37 bc 12 00 push $0x12bc37 <== NOT EXECUTED
1014d6: 68 9c 01 00 00 push $0x19c <== NOT EXECUTED
1014db: e9 2c fe ff ff jmp 10130c <rtems_rfs_bitmap_ut_test_bitmap+0xe97><== NOT EXECUTED
rtems_test_assert ( result == false );
1014e0: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
1014e7: 74 12 je 1014fb <rtems_rfs_bitmap_ut_test_bitmap+0x1086><== ALWAYS TAKEN
1014e9: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1014ec: 68 8b bc 12 00 push $0x12bc8b <== NOT EXECUTED
1014f1: 68 9d 01 00 00 push $0x19d <== NOT EXECUTED
1014f6: e9 11 fe ff ff jmp 10130c <rtems_rfs_bitmap_ut_test_bitmap+0xe97><== NOT EXECUTED
rc = rtems_rfs_bitmap_map_alloc(&control, 1, &result, &bit);
1014fb: 56 push %esi
1014fc: 53 push %ebx
1014fd: 6a 01 push $0x1
1014ff: 57 push %edi
101500: e8 ca e6 00 00 call 10fbcf <rtems_rfs_bitmap_map_alloc>
rtems_test_assert(rc == 0 );
101505: 83 c4 10 add $0x10,%esp
101508: 85 c0 test %eax,%eax
10150a: 74 12 je 10151e <rtems_rfs_bitmap_ut_test_bitmap+0x10a9><== ALWAYS TAKEN
10150c: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10150f: 68 37 bc 12 00 push $0x12bc37 <== NOT EXECUTED
101514: 68 9f 01 00 00 push $0x19f <== NOT EXECUTED
101519: e9 ee fd ff ff jmp 10130c <rtems_rfs_bitmap_ut_test_bitmap+0xe97><== NOT EXECUTED
rtems_test_assert ( result == false );
10151e: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
101525: 74 12 je 101539 <rtems_rfs_bitmap_ut_test_bitmap+0x10c4><== ALWAYS TAKEN
101527: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10152a: 68 8b bc 12 00 push $0x12bc8b <== NOT EXECUTED
10152f: 68 a0 01 00 00 push $0x1a0 <== NOT EXECUTED
101534: e9 d3 fd ff ff jmp 10130c <rtems_rfs_bitmap_ut_test_bitmap+0xe97><== NOT EXECUTED
rc = rtems_rfs_bitmap_map_alloc(&control, -2, &result, &bit);
101539: 56 push %esi
10153a: 53 push %ebx
10153b: 6a fe push $0xfffffffe
10153d: 57 push %edi
10153e: e8 8c e6 00 00 call 10fbcf <rtems_rfs_bitmap_map_alloc>
rtems_test_assert(rc == 0 );
101543: 83 c4 10 add $0x10,%esp
101546: 85 c0 test %eax,%eax
101548: 74 12 je 10155c <rtems_rfs_bitmap_ut_test_bitmap+0x10e7><== ALWAYS TAKEN
10154a: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10154d: 68 37 bc 12 00 push $0x12bc37 <== NOT EXECUTED
101552: 68 a2 01 00 00 push $0x1a2 <== NOT EXECUTED
101557: e9 b0 fd ff ff jmp 10130c <rtems_rfs_bitmap_ut_test_bitmap+0xe97><== NOT EXECUTED
rtems_test_assert ( result == false );
10155c: 80 bd 03 ff ff ff 00 cmpb $0x0,-0xfd(%ebp)
101563: 74 12 je 101577 <rtems_rfs_bitmap_ut_test_bitmap+0x1102><== ALWAYS TAKEN
101565: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
101568: 68 8b bc 12 00 push $0x12bc8b <== NOT EXECUTED
10156d: 68 a3 01 00 00 push $0x1a3 <== NOT EXECUTED
101572: e9 95 fd ff ff jmp 10130c <rtems_rfs_bitmap_ut_test_bitmap+0xe97><== NOT EXECUTED
printf(" FAILED\n");
101577: 50 push %eax
101578: 50 push %eax
101579: 68 9b bc 12 00 push $0x12bc9b
10157e: a1 a0 f2 13 00 mov 0x13f2a0,%eax
101583: ff 70 0c pushl 0xc(%eax)
101586: e8 d1 d1 01 00 call 11e75c <fiprintf>
/* Simply clear all bits */
printf (" 34. Clear all bits in the map.\n");
10158b: 58 pop %eax
10158c: 5a pop %edx
10158d: 68 a4 bc 12 00 push $0x12bca4
101592: a1 a0 f2 13 00 mov 0x13f2a0,%eax
101597: ff 70 0c pushl 0xc(%eax)
10159a: e8 bd d1 01 00 call 11e75c <fiprintf>
rc = rtems_rfs_bitmap_map_clear_all(&control);
10159f: 89 3c 24 mov %edi,(%esp)
1015a2: e8 b0 e5 00 00 call 10fb57 <rtems_rfs_bitmap_map_clear_all>
rtems_test_assert( rc == 0 );
1015a7: 83 c4 10 add $0x10,%esp
1015aa: 85 c0 test %eax,%eax
1015ac: 74 12 je 1015c0 <rtems_rfs_bitmap_ut_test_bitmap+0x114b><== ALWAYS TAKEN
1015ae: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1015b1: 68 37 bc 12 00 push $0x12bc37 <== NOT EXECUTED
1015b6: 68 a9 01 00 00 push $0x1a9 <== NOT EXECUTED
1015bb: e9 4c fd ff ff jmp 10130c <rtems_rfs_bitmap_ut_test_bitmap+0xe97><== NOT EXECUTED
rtems_rfs_bitmap_close (&control);
1015c0: 83 ec 0c sub $0xc,%esp
1015c3: 57 push %edi
1015c4: e8 b8 e7 00 00 call 10fd81 <rtems_rfs_bitmap_close>
free (buffer.buffer);
1015c9: 5f pop %edi
1015ca: ff b5 48 ff ff ff pushl -0xb8(%ebp)
1015d0: e8 57 71 00 00 call 10872c <free>
1015d5: 83 c4 10 add $0x10,%esp
}
1015d8: 8d 65 f4 lea -0xc(%ebp),%esp
1015db: 5b pop %ebx
1015dc: 5e pop %esi
1015dd: 5f pop %edi
1015de: 5d pop %ebp
1015df: c3 ret
0011937f <rtems_rfs_block_find_indirect>:
rtems_rfs_block_find_indirect (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* buffer,
rtems_rfs_block_no block,
int offset,
rtems_rfs_block_no* result)
{
11937f: 55 push %ebp
119380: 89 e5 mov %esp,%ebp
119382: 57 push %edi
119383: 56 push %esi
119384: 53 push %ebx
119385: 83 ec 1c sub $0x1c,%esp
119388: 89 c6 mov %eax,%esi
11938a: 89 d3 mov %edx,%ebx
11938c: 89 cf mov %ecx,%edi
/*
* If the handle has a buffer and this request is a different block the current
* buffer is released.
*/
rc = rtems_rfs_buffer_handle_request (fs, buffer, block, true);
11938e: 6a 01 push $0x1
119390: 51 push %ecx
119391: 52 push %edx
119392: 50 push %eax
119393: e8 12 0f 00 00 call 11a2aa <rtems_rfs_buffer_handle_request>
if (rc > 0)
119398: 83 c4 10 add $0x10,%esp
11939b: 85 c0 test %eax,%eax
11939d: 7f 7f jg 11941e <rtems_rfs_block_find_indirect+0x9f><== NEVER TAKEN
return rc;
*result = rtems_rfs_block_get_number (buffer, offset);
11939f: 8b 43 08 mov 0x8(%ebx),%eax
1193a2: 8b 58 1c mov 0x1c(%eax),%ebx
1193a5: 8b 45 08 mov 0x8(%ebp),%eax
1193a8: c1 e0 02 shl $0x2,%eax
1193ab: 0f b6 54 03 03 movzbl 0x3(%ebx,%eax,1),%edx
1193b0: 8b 4d 08 mov 0x8(%ebp),%ecx
1193b3: 0f b6 0c 8b movzbl (%ebx,%ecx,4),%ecx
1193b7: c1 e1 18 shl $0x18,%ecx
1193ba: 09 ca or %ecx,%edx
1193bc: 0f b6 4c 03 01 movzbl 0x1(%ebx,%eax,1),%ecx
1193c1: c1 e1 10 shl $0x10,%ecx
1193c4: 09 ca or %ecx,%edx
1193c6: 0f b6 44 03 02 movzbl 0x2(%ebx,%eax,1),%eax
1193cb: c1 e0 08 shl $0x8,%eax
1193ce: 09 c2 or %eax,%edx
if ((*result + 1) == 0)
*result = 0;
1193d0: 31 c0 xor %eax,%eax
1193d2: 83 fa ff cmp $0xffffffff,%edx
1193d5: 0f 95 c0 setne %al
1193d8: f7 d8 neg %eax
1193da: 21 c2 and %eax,%edx
1193dc: 8b 4d 0c mov 0xc(%ebp),%ecx
1193df: 89 11 mov %edx,(%ecx)
if (*result >= rtems_rfs_fs_blocks (fs))
1193e1: 31 c0 xor %eax,%eax
1193e3: 3b 56 04 cmp 0x4(%esi),%edx
1193e6: 72 36 jb 11941e <rtems_rfs_block_find_indirect+0x9f><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BLOCK_FIND))
1193e8: 53 push %ebx <== NOT EXECUTED
1193e9: 53 push %ebx <== NOT EXECUTED
1193ea: 6a 00 push $0x0 <== NOT EXECUTED
1193ec: 68 00 10 00 00 push $0x1000 <== NOT EXECUTED
1193f1: e8 a6 a4 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
1193f6: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
1193f9: 84 c0 test %al,%al <== NOT EXECUTED
1193fb: 74 16 je 119413 <rtems_rfs_block_find_indirect+0x94><== NOT EXECUTED
printf ("rtems-rfs: block-find: invalid block in table:"
1193fd: ff 75 08 pushl 0x8(%ebp) <== NOT EXECUTED
119400: 57 push %edi <== NOT EXECUTED
119401: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
119404: ff 31 pushl (%ecx) <== NOT EXECUTED
119406: 68 d3 0c 13 00 push $0x130cd3 <== NOT EXECUTED
11940b: e8 2c 6f 00 00 call 12033c <printf> <== NOT EXECUTED
119410: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
" block=%" PRId32 ", indirect=%" PRId32 "/%d\n", *result, block, offset);
*result = 0;
119413: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
119416: c7 01 00 00 00 00 movl $0x0,(%ecx) <== NOT EXECUTED
11941c: 31 c0 xor %eax,%eax <== NOT EXECUTED
rc = EIO;
}
return 0;
}
11941e: 8d 65 f4 lea -0xc(%ebp),%esp
119421: 5b pop %ebx
119422: 5e pop %esi
119423: 5f pop %edi
119424: 5d pop %ebp
119425: c3 ret
00119513 <rtems_rfs_block_get_block_size>:
void
rtems_rfs_block_get_block_size (rtems_rfs_file_system* fs,
rtems_rfs_pos pos,
rtems_rfs_block_size* size)
{
119513: 55 push %ebp <== NOT EXECUTED
119514: 89 e5 mov %esp,%ebp <== NOT EXECUTED
119516: 57 push %edi <== NOT EXECUTED
119517: 56 push %esi <== NOT EXECUTED
119518: 53 push %ebx <== NOT EXECUTED
119519: 83 ec 1c sub $0x1c,%esp <== NOT EXECUTED
11951c: 8b 75 0c mov 0xc(%ebp),%esi <== NOT EXECUTED
11951f: 8b 7d 10 mov 0x10(%ebp),%edi <== NOT EXECUTED
119522: 8b 5d 14 mov 0x14(%ebp),%ebx <== NOT EXECUTED
if (pos == 0)
119525: 89 f8 mov %edi,%eax <== NOT EXECUTED
119527: 09 f0 or %esi,%eax <== NOT EXECUTED
119529: 75 0f jne 11953a <rtems_rfs_block_get_block_size+0x27><== NOT EXECUTED
* @param size A pointer to the block size.
*/
static inline void
rtems_rfs_block_set_size_zero (rtems_rfs_block_size* size)
{
size->count = 0;
11952b: c7 03 00 00 00 00 movl $0x0,(%ebx) <== NOT EXECUTED
size->offset = 0;
119531: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx) <== NOT EXECUTED
119538: eb 30 jmp 11956a <rtems_rfs_block_get_block_size+0x57><== NOT EXECUTED
rtems_rfs_block_set_size_zero (size);
else
{
size->count = pos / rtems_rfs_fs_block_size (fs) + 1;
11953a: 8b 45 08 mov 0x8(%ebp),%eax <== NOT EXECUTED
11953d: 8b 50 08 mov 0x8(%eax),%edx <== NOT EXECUTED
119540: 31 c9 xor %ecx,%ecx <== NOT EXECUTED
119542: 89 55 e0 mov %edx,-0x20(%ebp) <== NOT EXECUTED
119545: 89 4d e4 mov %ecx,-0x1c(%ebp) <== NOT EXECUTED
119548: 51 push %ecx <== NOT EXECUTED
119549: 52 push %edx <== NOT EXECUTED
11954a: 57 push %edi <== NOT EXECUTED
11954b: 56 push %esi <== NOT EXECUTED
11954c: e8 03 2d 01 00 call 12c254 <__udivdi3> <== NOT EXECUTED
119551: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
119554: 40 inc %eax <== NOT EXECUTED
119555: 89 03 mov %eax,(%ebx) <== NOT EXECUTED
size->offset = pos % rtems_rfs_fs_block_size (fs);
119557: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
11955a: ff 75 e0 pushl -0x20(%ebp) <== NOT EXECUTED
11955d: 57 push %edi <== NOT EXECUTED
11955e: 56 push %esi <== NOT EXECUTED
11955f: e8 f4 2d 01 00 call 12c358 <__umoddi3> <== NOT EXECUTED
119564: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
119567: 89 43 04 mov %eax,0x4(%ebx) <== NOT EXECUTED
}
}
11956a: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
11956d: 5b pop %ebx <== NOT EXECUTED
11956e: 5e pop %esi <== NOT EXECUTED
11956f: 5f pop %edi <== NOT EXECUTED
119570: 5d pop %ebp <== NOT EXECUTED
119571: c3 ret <== NOT EXECUTED
00119749 <rtems_rfs_block_map_close>:
int
rtems_rfs_block_map_close (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map)
{
119749: 55 push %ebp
11974a: 89 e5 mov %esp,%ebp
11974c: 57 push %edi
11974d: 56 push %esi
11974e: 53 push %ebx
11974f: 83 ec 1c sub $0x1c,%esp
119752: 8b 5d 0c mov 0xc(%ebp),%ebx
int rc = 0;
119755: 31 f6 xor %esi,%esi
int brc;
if (map->dirty && map->inode)
119757: 80 3b 00 cmpb $0x0,(%ebx)
11975a: 0f 84 48 01 00 00 je 1198a8 <rtems_rfs_block_map_close+0x15f>
119760: 8b 43 04 mov 0x4(%ebx),%eax
119763: 85 c0 test %eax,%eax
119765: 0f 84 3d 01 00 00 je 1198a8 <rtems_rfs_block_map_close+0x15f><== NEVER TAKEN
{
brc = rtems_rfs_inode_load (fs, map->inode);
11976b: 52 push %edx
11976c: 52 push %edx
11976d: 50 push %eax
11976e: ff 75 08 pushl 0x8(%ebp)
119771: e8 3c 8a ff ff call 1121b2 <rtems_rfs_inode_load>
if (brc > 0)
119776: 83 c4 10 add $0x10,%esp
119779: 89 c6 mov %eax,%esi
11977b: 85 c0 test %eax,%eax
11977d: 0f 8f 25 01 00 00 jg 1198a8 <rtems_rfs_block_map_close+0x15f><== NEVER TAKEN
119783: c7 45 e0 00 00 00 00 movl $0x0,-0x20(%ebp)
if (rc == 0)
{
int b;
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
rtems_rfs_inode_set_block (map->inode, b, map->blocks[b]);
11978a: 8b 45 e0 mov -0x20(%ebp),%eax
11978d: 8b 74 83 24 mov 0x24(%ebx,%eax,4),%esi
119791: 8b 53 04 mov 0x4(%ebx),%edx
* @param bno The block number.
*/
static inline void
rtems_rfs_inode_set_block (rtems_rfs_inode_handle* handle, int block, uint32_t bno)
{
rtems_rfs_write_u32 (&handle->node->data.blocks[block], bno);
119794: 8d 0c 85 10 00 00 00 lea 0x10(,%eax,4),%ecx
11979b: 89 f7 mov %esi,%edi
11979d: c1 ef 18 shr $0x18,%edi
1197a0: 89 7d e4 mov %edi,-0x1c(%ebp)
1197a3: 8a 45 e4 mov -0x1c(%ebp),%al
1197a6: 8b 7a 0c mov 0xc(%edx),%edi
1197a9: 88 44 0f 0c mov %al,0xc(%edi,%ecx,1)
1197ad: 89 f0 mov %esi,%eax
1197af: c1 e8 10 shr $0x10,%eax
1197b2: 8b 7a 0c mov 0xc(%edx),%edi
1197b5: 88 44 0f 0d mov %al,0xd(%edi,%ecx,1)
1197b9: 89 f0 mov %esi,%eax
1197bb: c1 e8 08 shr $0x8,%eax
1197be: 8b 7a 0c mov 0xc(%edx),%edi
1197c1: 88 44 0f 0e mov %al,0xe(%edi,%ecx,1)
1197c5: 89 f0 mov %esi,%eax
1197c7: 8b 7a 0c mov 0xc(%edx),%edi
1197ca: 88 44 0f 0f mov %al,0xf(%edi,%ecx,1)
rtems_rfs_buffer_mark_dirty (&handle->buffer);
1197ce: c6 42 10 01 movb $0x1,0x10(%edx)
if (rc == 0)
{
int b;
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
1197d2: ff 45 e0 incl -0x20(%ebp)
1197d5: 83 7d e0 05 cmpl $0x5,-0x20(%ebp)
1197d9: 75 af jne 11978a <rtems_rfs_block_map_close+0x41>
rtems_rfs_inode_set_block (map->inode, b, map->blocks[b]);
rtems_rfs_inode_set_block_count (map->inode, map->size.count);
1197db: 8b 53 08 mov 0x8(%ebx),%edx
1197de: 8b 43 04 mov 0x4(%ebx),%eax
* @param block_count The block count.
*/
static inline void
rtems_rfs_inode_set_block_count (rtems_rfs_inode_handle* handle, uint32_t block_count)
{
rtems_rfs_write_u32 (&handle->node->block_count, block_count);
1197e1: 8b 70 0c mov 0xc(%eax),%esi
1197e4: 89 d1 mov %edx,%ecx
1197e6: c1 e9 18 shr $0x18,%ecx
1197e9: 88 4e 0c mov %cl,0xc(%esi)
1197ec: 8b 70 0c mov 0xc(%eax),%esi
1197ef: 89 d1 mov %edx,%ecx
1197f1: c1 e9 10 shr $0x10,%ecx
1197f4: 88 4e 0d mov %cl,0xd(%esi)
1197f7: 8b 70 0c mov 0xc(%eax),%esi
1197fa: 89 d1 mov %edx,%ecx
1197fc: c1 e9 08 shr $0x8,%ecx
1197ff: 88 4e 0e mov %cl,0xe(%esi)
119802: 8b 48 0c mov 0xc(%eax),%ecx
119805: 88 51 0f mov %dl,0xf(%ecx)
rtems_rfs_buffer_mark_dirty (&handle->buffer);
119808: c6 40 10 01 movb $0x1,0x10(%eax)
int
rtems_rfs_block_map_free_all (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map)
{
return rtems_rfs_block_map_shrink (fs, map, map->size.count);
}
11980c: 0f b7 53 0c movzwl 0xc(%ebx),%edx
int b;
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
rtems_rfs_inode_set_block (map->inode, b, map->blocks[b]);
rtems_rfs_inode_set_block_count (map->inode, map->size.count);
rtems_rfs_inode_set_block_offset (map->inode, map->size.offset);
119810: 8b 43 04 mov 0x4(%ebx),%eax
*/
static inline void
rtems_rfs_inode_set_block_offset (rtems_rfs_inode_handle* handle,
uint16_t block_offset)
{
rtems_rfs_write_u16 (&handle->node->block_offset, block_offset);
119813: 8b 70 0c mov 0xc(%eax),%esi
119816: 89 d1 mov %edx,%ecx
119818: 66 c1 e9 08 shr $0x8,%cx
11981c: 88 4e 0a mov %cl,0xa(%esi)
11981f: 8b 48 0c mov 0xc(%eax),%ecx
119822: 88 51 0b mov %dl,0xb(%ecx)
rtems_rfs_buffer_mark_dirty (&handle->buffer);
119825: c6 40 10 01 movb $0x1,0x10(%eax)
rtems_rfs_inode_set_last_map_block (map->inode, map->last_map_block);
119829: 8b 53 1c mov 0x1c(%ebx),%edx
11982c: 8b 43 04 mov 0x4(%ebx),%eax
* @param block_count The last map block number.
*/
static inline void
rtems_rfs_inode_set_last_map_block (rtems_rfs_inode_handle* handle, uint32_t last_map_block)
{
rtems_rfs_write_u32 (&handle->node->last_map_block, last_map_block);
11982f: 8b 70 0c mov 0xc(%eax),%esi
119832: 89 d1 mov %edx,%ecx
119834: c1 e9 18 shr $0x18,%ecx
119837: 88 4e 30 mov %cl,0x30(%esi)
11983a: 8b 70 0c mov 0xc(%eax),%esi
11983d: 89 d1 mov %edx,%ecx
11983f: c1 e9 10 shr $0x10,%ecx
119842: 88 4e 31 mov %cl,0x31(%esi)
119845: 8b 70 0c mov 0xc(%eax),%esi
119848: 89 d1 mov %edx,%ecx
11984a: c1 e9 08 shr $0x8,%ecx
11984d: 88 4e 32 mov %cl,0x32(%esi)
119850: 8b 48 0c mov 0xc(%eax),%ecx
119853: 88 51 33 mov %dl,0x33(%ecx)
rtems_rfs_buffer_mark_dirty (&handle->buffer);
119856: c6 40 10 01 movb $0x1,0x10(%eax)
rtems_rfs_inode_set_last_data_block (map->inode, map->last_data_block);
11985a: 8b 53 20 mov 0x20(%ebx),%edx
11985d: 8b 43 04 mov 0x4(%ebx),%eax
* @param block_count The last data block number.
*/
static inline void
rtems_rfs_inode_set_last_data_block (rtems_rfs_inode_handle* handle, uint32_t last_data_block)
{
rtems_rfs_write_u32 (&handle->node->last_data_block, last_data_block);
119860: 8b 70 0c mov 0xc(%eax),%esi
119863: 89 d1 mov %edx,%ecx
119865: c1 e9 18 shr $0x18,%ecx
119868: 88 4e 34 mov %cl,0x34(%esi)
11986b: 8b 70 0c mov 0xc(%eax),%esi
11986e: 89 d1 mov %edx,%ecx
119870: c1 e9 10 shr $0x10,%ecx
119873: 88 4e 35 mov %cl,0x35(%esi)
119876: 8b 70 0c mov 0xc(%eax),%esi
119879: 89 d1 mov %edx,%ecx
11987b: c1 e9 08 shr $0x8,%ecx
11987e: 88 4e 36 mov %cl,0x36(%esi)
119881: 8b 48 0c mov 0xc(%eax),%ecx
119884: 88 51 37 mov %dl,0x37(%ecx)
rtems_rfs_buffer_mark_dirty (&handle->buffer);
119887: c6 40 10 01 movb $0x1,0x10(%eax)
brc = rtems_rfs_inode_unload (fs, map->inode, true);
11988b: 50 push %eax
11988c: 6a 01 push $0x1
11988e: ff 73 04 pushl 0x4(%ebx)
119891: ff 75 08 pushl 0x8(%ebp)
119894: e8 44 8a ff ff call 1122dd <rtems_rfs_inode_unload>
119899: 83 c4 10 add $0x10,%esp
11989c: 89 c6 mov %eax,%esi
11989e: f7 d6 not %esi
1198a0: c1 fe 1f sar $0x1f,%esi
1198a3: 21 c6 and %eax,%esi
if (brc > 0)
rc = brc;
map->dirty = false;
1198a5: c6 03 00 movb $0x0,(%ebx)
}
}
map->inode = NULL;
1198a8: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx)
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
1198af: 51 push %ecx
1198b0: 51 push %ecx
brc = rtems_rfs_buffer_handle_close (fs, &map->singly_buffer);
1198b1: 8d 43 38 lea 0x38(%ebx),%eax
1198b4: 50 push %eax
1198b5: ff 75 08 pushl 0x8(%ebp)
1198b8: e8 74 08 00 00 call 11a131 <rtems_rfs_buffer_handle_release>
handle->dirty = false;
1198bd: c6 43 38 00 movb $0x0,0x38(%ebx)
handle->bnum = 0;
1198c1: c7 43 3c 00 00 00 00 movl $0x0,0x3c(%ebx)
handle->buffer = NULL;
1198c8: c7 43 40 00 00 00 00 movl $0x0,0x40(%ebx)
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
1198cf: 5f pop %edi
1198d0: 58 pop %eax
if ((brc > 0) && (rc == 0))
rc = brc;
brc = rtems_rfs_buffer_handle_close (fs, &map->doubly_buffer);
1198d1: 8d 43 44 lea 0x44(%ebx),%eax
1198d4: 50 push %eax
1198d5: ff 75 08 pushl 0x8(%ebp)
1198d8: e8 54 08 00 00 call 11a131 <rtems_rfs_buffer_handle_release>
handle->dirty = false;
1198dd: c6 43 44 00 movb $0x0,0x44(%ebx)
handle->bnum = 0;
1198e1: c7 43 48 00 00 00 00 movl $0x0,0x48(%ebx)
handle->buffer = NULL;
1198e8: c7 43 4c 00 00 00 00 movl $0x0,0x4c(%ebx)
if ((brc > 0) && (rc == 0))
rc = brc;
return rc;
}
1198ef: 89 f0 mov %esi,%eax
1198f1: 8d 65 f4 lea -0xc(%ebp),%esp
1198f4: 5b pop %ebx
1198f5: 5e pop %esi
1198f6: 5f pop %edi
1198f7: 5d pop %ebp
1198f8: c3 ret
001198f9 <rtems_rfs_block_map_find>:
int
rtems_rfs_block_map_find (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
rtems_rfs_block_pos* bpos,
rtems_rfs_block_no* block)
{
1198f9: 55 push %ebp
1198fa: 89 e5 mov %esp,%ebp
1198fc: 57 push %edi
1198fd: 56 push %esi
1198fe: 53 push %ebx
1198ff: 83 ec 2c sub $0x2c,%esp
119902: 8b 5d 0c mov 0xc(%ebp),%ebx
119905: 8b 75 10 mov 0x10(%ebp),%esi
119908: 8b 7d 14 mov 0x14(%ebp),%edi
int rc = 0;
*block = 0;
11990b: c7 07 00 00 00 00 movl $0x0,(%edi)
/*
* Range checking here makes the remaining logic simpler.
*/
if (rtems_rfs_block_pos_block_past_end (bpos, &map->size))
119911: 8b 06 mov (%esi),%eax
119913: 89 45 d0 mov %eax,-0x30(%ebp)
119916: 85 c0 test %eax,%eax
119918: 74 0f je 119929 <rtems_rfs_block_map_find+0x30>
return ENXIO;
11991a: b8 06 00 00 00 mov $0x6,%eax
*block = 0;
/*
* Range checking here makes the remaining logic simpler.
*/
if (rtems_rfs_block_pos_block_past_end (bpos, &map->size))
11991f: 83 7b 08 00 cmpl $0x0,0x8(%ebx)
119923: 0f 84 d3 00 00 00 je 1199fc <rtems_rfs_block_map_find+0x103><== NEVER TAKEN
119929: 8b 4b 08 mov 0x8(%ebx),%ecx
return ENXIO;
11992c: b8 06 00 00 00 mov $0x6,%eax
*block = 0;
/*
* Range checking here makes the remaining logic simpler.
*/
if (rtems_rfs_block_pos_block_past_end (bpos, &map->size))
119931: 39 4d d0 cmp %ecx,-0x30(%ebp)
119934: 0f 83 c2 00 00 00 jae 1199fc <rtems_rfs_block_map_find+0x103>
return ENXIO;
/*
* If the block position is the same and we have found the block just return it.
*/
if ((bpos->bno == map->bpos.bno) && (map->bpos.block != 0))
11993a: 8b 45 d0 mov -0x30(%ebp),%eax
11993d: 3b 43 10 cmp 0x10(%ebx),%eax
119940: 75 09 jne 11994b <rtems_rfs_block_map_find+0x52>
119942: 8b 43 18 mov 0x18(%ebx),%eax
119945: 85 c0 test %eax,%eax
119947: 74 02 je 11994b <rtems_rfs_block_map_find+0x52>
119949: eb 0c jmp 119957 <rtems_rfs_block_map_find+0x5e>
/*
* Determine the type of access we need to perform. If the number of blocks
* is less than or equal to the number of slots in the inode the blocks are
* directly accessed.
*/
if (map->size.count <= RTEMS_RFS_INODE_BLOCKS)
11994b: 83 f9 05 cmp $0x5,%ecx
11994e: 77 0e ja 11995e <rtems_rfs_block_map_find+0x65>
{
*block = map->blocks[bpos->bno];
119950: 8b 55 d0 mov -0x30(%ebp),%edx
119953: 8b 44 93 24 mov 0x24(%ebx,%edx,4),%eax
119957: 89 07 mov %eax,(%edi)
119959: e9 86 00 00 00 jmp 1199e4 <rtems_rfs_block_map_find+0xeb>
* The map is either singly or doubly indirect.
*/
rtems_rfs_block_no direct;
rtems_rfs_block_no singly;
direct = bpos->bno % fs->blocks_per_block;
11995e: 8b 45 08 mov 0x8(%ebp),%eax
119961: 8b 40 34 mov 0x34(%eax),%eax
119964: 89 45 d4 mov %eax,-0x2c(%ebp)
119967: 8b 45 d0 mov -0x30(%ebp),%eax
11996a: 31 d2 xor %edx,%edx
11996c: f7 75 d4 divl -0x2c(%ebp)
11996f: 89 55 d0 mov %edx,-0x30(%ebp)
singly = bpos->bno / fs->blocks_per_block;
119972: 89 45 e4 mov %eax,-0x1c(%ebp)
if (map->size.count <= fs->block_map_singly_blocks)
119975: 8b 55 08 mov 0x8(%ebp),%edx
119978: 3b 4a 38 cmp 0x38(%edx),%ecx
11997b: 77 0f ja 11998c <rtems_rfs_block_map_find+0x93><== NEVER TAKEN
{
/*
* This is a single indirect table of blocks anchored off a slot in the
* inode.
*/
rc = rtems_rfs_block_find_indirect (fs,
11997d: 52 push %edx
11997e: 52 push %edx
11997f: 8b 4c 83 24 mov 0x24(%ebx,%eax,4),%ecx
119983: 8d 53 38 lea 0x38(%ebx),%edx
119986: 57 push %edi
119987: ff 75 d0 pushl -0x30(%ebp)
11998a: eb 49 jmp 1199d5 <rtems_rfs_block_map_find+0xdc>
* The map is doubly indirect.
*/
rtems_rfs_block_no doubly;
doubly = singly / fs->blocks_per_block;
singly %= fs->blocks_per_block;
11998c: 31 d2 xor %edx,%edx <== NOT EXECUTED
11998e: f7 75 d4 divl -0x2c(%ebp) <== NOT EXECUTED
119991: 89 55 cc mov %edx,-0x34(%ebp) <== NOT EXECUTED
119994: 89 45 d4 mov %eax,-0x2c(%ebp) <== NOT EXECUTED
119997: 89 55 e4 mov %edx,-0x1c(%ebp) <== NOT EXECUTED
{
/*
* This should never happen. Here so Joel can remove once his coverage
* testing gets to the file systems.
*/
rc = ENXIO;
11999a: b8 06 00 00 00 mov $0x6,%eax <== NOT EXECUTED
rtems_rfs_block_no doubly;
doubly = singly / fs->blocks_per_block;
singly %= fs->blocks_per_block;
if (map->size.count < fs->block_map_doubly_blocks)
11999f: 8b 55 08 mov 0x8(%ebp),%edx <== NOT EXECUTED
1199a2: 3b 4a 3c cmp 0x3c(%edx),%ecx <== NOT EXECUTED
1199a5: 73 55 jae 1199fc <rtems_rfs_block_map_find+0x103><== NOT EXECUTED
{
rc = rtems_rfs_block_find_indirect (fs,
1199a7: 50 push %eax <== NOT EXECUTED
1199a8: 50 push %eax <== NOT EXECUTED
1199a9: 8b 45 d4 mov -0x2c(%ebp),%eax <== NOT EXECUTED
1199ac: 8b 4c 83 24 mov 0x24(%ebx,%eax,4),%ecx <== NOT EXECUTED
1199b0: 8d 53 44 lea 0x44(%ebx),%edx <== NOT EXECUTED
1199b3: 8d 45 e4 lea -0x1c(%ebp),%eax <== NOT EXECUTED
1199b6: 50 push %eax <== NOT EXECUTED
1199b7: ff 75 cc pushl -0x34(%ebp) <== NOT EXECUTED
1199ba: 8b 45 08 mov 0x8(%ebp),%eax <== NOT EXECUTED
1199bd: e8 bd f9 ff ff call 11937f <rtems_rfs_block_find_indirect><== NOT EXECUTED
&map->doubly_buffer,
map->blocks[doubly],
singly, &singly);
if (rc == 0)
1199c2: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
1199c5: 85 c0 test %eax,%eax <== NOT EXECUTED
1199c7: 75 33 jne 1199fc <rtems_rfs_block_map_find+0x103><== NOT EXECUTED
{
rc = rtems_rfs_block_find_indirect (fs,
1199c9: 51 push %ecx <== NOT EXECUTED
1199ca: 51 push %ecx <== NOT EXECUTED
1199cb: 8d 53 38 lea 0x38(%ebx),%edx <== NOT EXECUTED
1199ce: 57 push %edi <== NOT EXECUTED
1199cf: ff 75 d0 pushl -0x30(%ebp) <== NOT EXECUTED
1199d2: 8b 4d e4 mov -0x1c(%ebp),%ecx <== NOT EXECUTED
1199d5: 8b 45 08 mov 0x8(%ebp),%eax
1199d8: e8 a2 f9 ff ff call 11937f <rtems_rfs_block_find_indirect>
1199dd: 83 c4 10 add $0x10,%esp
}
}
}
}
if (rc == 0)
1199e0: 85 c0 test %eax,%eax
1199e2: 75 18 jne 1199fc <rtems_rfs_block_map_find+0x103><== NEVER TAKEN
{
rtems_rfs_block_copy_bpos (&map->bpos, bpos);
1199e4: 8b 06 mov (%esi),%eax
1199e6: 89 43 10 mov %eax,0x10(%ebx)
1199e9: 8b 46 04 mov 0x4(%esi),%eax
1199ec: 89 43 14 mov %eax,0x14(%ebx)
1199ef: 8b 46 08 mov 0x8(%esi),%eax
1199f2: 89 43 18 mov %eax,0x18(%ebx)
map->bpos.block = *block;
1199f5: 8b 07 mov (%edi),%eax
1199f7: 89 43 18 mov %eax,0x18(%ebx)
1199fa: 31 c0 xor %eax,%eax
}
return rc;
}
1199fc: 8d 65 f4 lea -0xc(%ebp),%esp
1199ff: 5b pop %ebx
119a00: 5e pop %esi
119a01: 5f pop %edi
119a02: 5d pop %ebp
119a03: c3 ret
00119a9e <rtems_rfs_block_map_grow>:
int
rtems_rfs_block_map_grow (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
size_t blocks,
rtems_rfs_block_no* new_block)
{
119a9e: 55 push %ebp
119a9f: 89 e5 mov %esp,%ebp
119aa1: 57 push %edi
119aa2: 56 push %esi
119aa3: 53 push %ebx
119aa4: 83 ec 44 sub $0x44,%esp
119aa7: 8b 75 08 mov 0x8(%ebp),%esi
119aaa: 8b 5d 0c mov 0xc(%ebp),%ebx
int b;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BLOCK_MAP_GROW))
119aad: 6a 00 push $0x0
119aaf: 68 00 20 00 00 push $0x2000
119ab4: e8 e3 9d ff ff call 11389c <rtems_rfs_trace>
119ab9: 83 c4 10 add $0x10,%esp
119abc: 84 c0 test %al,%al
119abe: 74 14 je 119ad4 <rtems_rfs_block_map_grow+0x36><== ALWAYS TAKEN
printf ("rtems-rfs: block-map-grow: entry: blocks=%zd count=%" PRIu32 "\n",
119ac0: 51 push %ecx <== NOT EXECUTED
119ac1: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
119ac4: ff 75 10 pushl 0x10(%ebp) <== NOT EXECUTED
119ac7: 68 1e 0d 13 00 push $0x130d1e <== NOT EXECUTED
119acc: e8 6b 68 00 00 call 12033c <printf> <== NOT EXECUTED
119ad1: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
blocks, map->size.count);
if ((map->size.count + blocks) >= rtems_rfs_fs_max_block_map_blocks (fs))
119ad4: 8b 45 10 mov 0x10(%ebp),%eax
119ad7: 03 43 08 add 0x8(%ebx),%eax
return EFBIG;
119ada: bf 1b 00 00 00 mov $0x1b,%edi
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BLOCK_MAP_GROW))
printf ("rtems-rfs: block-map-grow: entry: blocks=%zd count=%" PRIu32 "\n",
blocks, map->size.count);
if ((map->size.count + blocks) >= rtems_rfs_fs_max_block_map_blocks (fs))
119adf: 3b 46 3c cmp 0x3c(%esi),%eax
119ae2: 0f 83 5f 02 00 00 jae 119d47 <rtems_rfs_block_map_grow+0x2a9><== NEVER TAKEN
119ae8: e9 3f 02 00 00 jmp 119d2c <rtems_rfs_block_map_grow+0x28e>
/*
* Allocate the block. If an indirect block is needed and cannot be
* allocated free this block.
*/
rc = rtems_rfs_group_bitmap_alloc (fs, map->last_data_block,
119aed: 8d 45 e0 lea -0x20(%ebp),%eax
119af0: 50 push %eax
119af1: 6a 00 push $0x0
119af3: ff 73 20 pushl 0x20(%ebx)
119af6: 56 push %esi
119af7: e8 56 83 ff ff call 111e52 <rtems_rfs_group_bitmap_alloc>
119afc: 89 c7 mov %eax,%edi
false, &block);
if (rc > 0)
119afe: 83 c4 10 add $0x10,%esp
119b01: 85 c0 test %eax,%eax
119b03: 0f 8f 3e 02 00 00 jg 119d47 <rtems_rfs_block_map_grow+0x2a9>
return rc;
if (map->size.count < RTEMS_RFS_INODE_BLOCKS)
119b09: 8b 7b 08 mov 0x8(%ebx),%edi
119b0c: 83 ff 04 cmp $0x4,%edi
119b0f: 77 0c ja 119b1d <rtems_rfs_block_map_grow+0x7f>
map->blocks[map->size.count] = block;
119b11: 8b 45 e0 mov -0x20(%ebp),%eax
119b14: 89 44 bb 24 mov %eax,0x24(%ebx,%edi,4)
119b18: e9 ec 01 00 00 jmp 119d09 <rtems_rfs_block_map_grow+0x26b>
* Single indirect access is occuring. It could still be doubly indirect.
*/
rtems_rfs_block_no direct;
rtems_rfs_block_no singly;
direct = map->size.count % fs->blocks_per_block;
119b1d: 8b 4e 34 mov 0x34(%esi),%ecx
119b20: 89 f8 mov %edi,%eax
119b22: 31 d2 xor %edx,%edx
119b24: f7 f1 div %ecx
119b26: 89 55 d0 mov %edx,-0x30(%ebp)
singly = map->size.count / fs->blocks_per_block;
if (map->size.count < fs->block_map_singly_blocks)
119b29: 3b 7e 38 cmp 0x38(%esi),%edi
119b2c: 73 39 jae 119b67 <rtems_rfs_block_map_grow+0xc9><== NEVER TAKEN
* Singly indirect tables are being used. Allocate a new block for a
* mapping table if direct is 0 or we are moving up (upping). If upping
* move the direct blocks into the table and if not this is the first
* entry of a new block.
*/
if ((direct == 0) ||
119b2e: 85 d2 test %edx,%edx
119b30: 74 09 je 119b3b <rtems_rfs_block_map_grow+0x9d><== NEVER TAKEN
119b32: 83 fa 05 cmp $0x5,%edx
119b35: 75 25 jne 119b5c <rtems_rfs_block_map_grow+0xbe>
119b37: 85 c0 test %eax,%eax
119b39: 75 21 jne 119b5c <rtems_rfs_block_map_grow+0xbe><== NEVER TAKEN
/*
* Upping is when we move from direct to singly indirect.
*/
bool upping;
upping = map->size.count == RTEMS_RFS_INODE_BLOCKS;
rc = rtems_rfs_block_map_indirect_alloc (fs, map,
119b3b: 52 push %edx
119b3c: 52 push %edx
119b3d: 8d 4b 38 lea 0x38(%ebx),%ecx
{
/*
* Upping is when we move from direct to singly indirect.
*/
bool upping;
upping = map->size.count == RTEMS_RFS_INODE_BLOCKS;
119b40: 31 d2 xor %edx,%edx
119b42: 83 ff 05 cmp $0x5,%edi
119b45: 0f 94 c2 sete %dl
rc = rtems_rfs_block_map_indirect_alloc (fs, map,
119b48: 52 push %edx
&map->singly_buffer,
&map->blocks[singly],
119b49: 8d 44 83 24 lea 0x24(%ebx,%eax,4),%eax
/*
* Upping is when we move from direct to singly indirect.
*/
bool upping;
upping = map->size.count == RTEMS_RFS_INODE_BLOCKS;
rc = rtems_rfs_block_map_indirect_alloc (fs, map,
119b4d: 50 push %eax
119b4e: 89 da mov %ebx,%edx
119b50: 89 f0 mov %esi,%eax
119b52: e8 1d f7 ff ff call 119274 <rtems_rfs_block_map_indirect_alloc>
119b57: e9 4b 01 00 00 jmp 119ca7 <rtems_rfs_block_map_grow+0x209>
&map->blocks[singly],
upping);
}
else
{
rc = rtems_rfs_buffer_handle_request (fs, &map->singly_buffer,
119b5c: 6a 01 push $0x1
119b5e: ff 74 83 24 pushl 0x24(%ebx,%eax,4)
119b62: e9 36 01 00 00 jmp 119c9d <rtems_rfs_block_map_grow+0x1ff>
* Doubly indirect tables are being used.
*/
rtems_rfs_block_no doubly;
rtems_rfs_block_no singly_block;
doubly = singly / fs->blocks_per_block;
119b67: 31 d2 xor %edx,%edx <== NOT EXECUTED
119b69: f7 f1 div %ecx <== NOT EXECUTED
119b6b: 89 55 d4 mov %edx,-0x2c(%ebp) <== NOT EXECUTED
119b6e: 89 45 c8 mov %eax,-0x38(%ebp) <== NOT EXECUTED
* Allocate a new block for a singly indirect table if direct is 0 as
* it is the first entry of a new block. We may also need to allocate a
* doubly indirect block as well. Both always occur when direct is 0
* and the doubly indirect block when singly is 0.
*/
if (direct == 0)
119b71: 83 7d d0 00 cmpl $0x0,-0x30(%ebp) <== NOT EXECUTED
119b75: 0f 85 ce 00 00 00 jne 119c49 <rtems_rfs_block_map_grow+0x1ab><== NOT EXECUTED
{
rc = rtems_rfs_block_map_indirect_alloc (fs, map,
119b7b: 50 push %eax <== NOT EXECUTED
119b7c: 50 push %eax <== NOT EXECUTED
119b7d: 8d 4b 38 lea 0x38(%ebx),%ecx <== NOT EXECUTED
119b80: 6a 00 push $0x0 <== NOT EXECUTED
119b82: 8d 45 e4 lea -0x1c(%ebp),%eax <== NOT EXECUTED
119b85: 50 push %eax <== NOT EXECUTED
119b86: 89 da mov %ebx,%edx <== NOT EXECUTED
119b88: 89 f0 mov %esi,%eax <== NOT EXECUTED
119b8a: e8 e5 f6 ff ff call 119274 <rtems_rfs_block_map_indirect_alloc><== NOT EXECUTED
119b8f: 89 c7 mov %eax,%edi <== NOT EXECUTED
&map->singly_buffer,
&singly_block,
false);
if (rc > 0)
119b91: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
119b94: 85 c0 test %eax,%eax <== NOT EXECUTED
119b96: 7e 05 jle 119b9d <rtems_rfs_block_map_grow+0xff><== NOT EXECUTED
119b98: e9 13 01 00 00 jmp 119cb0 <rtems_rfs_block_map_grow+0x212><== NOT EXECUTED
/*
* Allocate a new block for a doubly indirect table if singly is 0 as
* it is the first entry of a new singly indirect block.
*/
if ((singly == 0) ||
119b9d: 83 7d d4 00 cmpl $0x0,-0x2c(%ebp) <== NOT EXECUTED
119ba1: 74 0c je 119baf <rtems_rfs_block_map_grow+0x111><== NOT EXECUTED
119ba3: 83 7d d4 05 cmpl $0x5,-0x2c(%ebp) <== NOT EXECUTED
119ba7: 75 2a jne 119bd3 <rtems_rfs_block_map_grow+0x135><== NOT EXECUTED
119ba9: 83 7d c8 00 cmpl $0x0,-0x38(%ebp) <== NOT EXECUTED
119bad: 75 24 jne 119bd3 <rtems_rfs_block_map_grow+0x135><== NOT EXECUTED
((doubly == 0) && (singly == RTEMS_RFS_INODE_BLOCKS)))
{
bool upping;
upping = map->size.count == fs->block_map_singly_blocks;
rc = rtems_rfs_block_map_indirect_alloc (fs, map,
119baf: 57 push %edi <== NOT EXECUTED
119bb0: 57 push %edi <== NOT EXECUTED
*/
if ((singly == 0) ||
((doubly == 0) && (singly == RTEMS_RFS_INODE_BLOCKS)))
{
bool upping;
upping = map->size.count == fs->block_map_singly_blocks;
119bb1: 8b 7e 38 mov 0x38(%esi),%edi <== NOT EXECUTED
119bb4: 31 c0 xor %eax,%eax <== NOT EXECUTED
119bb6: 39 7b 08 cmp %edi,0x8(%ebx) <== NOT EXECUTED
119bb9: 0f 94 c0 sete %al <== NOT EXECUTED
rc = rtems_rfs_block_map_indirect_alloc (fs, map,
119bbc: 50 push %eax <== NOT EXECUTED
&map->doubly_buffer,
&map->blocks[doubly],
119bbd: 8b 55 c8 mov -0x38(%ebp),%edx <== NOT EXECUTED
119bc0: 8d 44 93 24 lea 0x24(%ebx,%edx,4),%eax <== NOT EXECUTED
if ((singly == 0) ||
((doubly == 0) && (singly == RTEMS_RFS_INODE_BLOCKS)))
{
bool upping;
upping = map->size.count == fs->block_map_singly_blocks;
rc = rtems_rfs_block_map_indirect_alloc (fs, map,
119bc4: 50 push %eax <== NOT EXECUTED
119bc5: 8b 4d c4 mov -0x3c(%ebp),%ecx <== NOT EXECUTED
119bc8: 89 da mov %ebx,%edx <== NOT EXECUTED
119bca: 89 f0 mov %esi,%eax <== NOT EXECUTED
119bcc: e8 a3 f6 ff ff call 119274 <rtems_rfs_block_map_indirect_alloc><== NOT EXECUTED
119bd1: eb 12 jmp 119be5 <rtems_rfs_block_map_grow+0x147><== NOT EXECUTED
return rc;
}
}
else
{
rc = rtems_rfs_buffer_handle_request (fs, &map->doubly_buffer,
119bd3: 6a 01 push $0x1 <== NOT EXECUTED
119bd5: 8b 45 c8 mov -0x38(%ebp),%eax <== NOT EXECUTED
119bd8: ff 74 83 24 pushl 0x24(%ebx,%eax,4) <== NOT EXECUTED
119bdc: ff 75 c4 pushl -0x3c(%ebp) <== NOT EXECUTED
119bdf: 56 push %esi <== NOT EXECUTED
119be0: e8 c5 06 00 00 call 11a2aa <rtems_rfs_buffer_handle_request><== NOT EXECUTED
119be5: 89 c7 mov %eax,%edi <== NOT EXECUTED
map->blocks[doubly], true);
if (rc > 0)
119be7: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
119bea: 85 c0 test %eax,%eax <== NOT EXECUTED
119bec: 7e 14 jle 119c02 <rtems_rfs_block_map_grow+0x164><== NOT EXECUTED
{
rtems_rfs_group_bitmap_free (fs, false, singly_block);
119bee: 53 push %ebx <== NOT EXECUTED
119bef: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
119bf2: 6a 00 push $0x0 <== NOT EXECUTED
119bf4: 56 push %esi <== NOT EXECUTED
119bf5: e8 e1 83 ff ff call 111fdb <rtems_rfs_group_bitmap_free><== NOT EXECUTED
rtems_rfs_group_bitmap_free (fs, false, block);
119bfa: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
119bfd: e9 af 00 00 00 jmp 119cb1 <rtems_rfs_block_map_grow+0x213><== NOT EXECUTED
return rc;
}
}
rtems_rfs_block_set_number (&map->doubly_buffer,
119c02: 8b 45 d4 mov -0x2c(%ebp),%eax <== NOT EXECUTED
119c05: c1 e0 02 shl $0x2,%eax <== NOT EXECUTED
119c08: 8b 53 4c mov 0x4c(%ebx),%edx <== NOT EXECUTED
119c0b: 8b 52 1c mov 0x1c(%edx),%edx <== NOT EXECUTED
119c0e: 0f b6 4d e7 movzbl -0x19(%ebp),%ecx <== NOT EXECUTED
119c12: 8b 7d d4 mov -0x2c(%ebp),%edi <== NOT EXECUTED
119c15: 88 0c ba mov %cl,(%edx,%edi,4) <== NOT EXECUTED
119c18: 8b 53 4c mov 0x4c(%ebx),%edx <== NOT EXECUTED
119c1b: 8b 52 1c mov 0x1c(%edx),%edx <== NOT EXECUTED
119c1e: 0f b7 4d e6 movzwl -0x1a(%ebp),%ecx <== NOT EXECUTED
119c22: 88 4c 02 01 mov %cl,0x1(%edx,%eax,1) <== NOT EXECUTED
119c26: 8b 53 4c mov 0x4c(%ebx),%edx <== NOT EXECUTED
119c29: 8b 4a 1c mov 0x1c(%edx),%ecx <== NOT EXECUTED
119c2c: 8b 55 e4 mov -0x1c(%ebp),%edx <== NOT EXECUTED
119c2f: c1 ea 08 shr $0x8,%edx <== NOT EXECUTED
119c32: 88 54 01 02 mov %dl,0x2(%ecx,%eax,1) <== NOT EXECUTED
119c36: 8b 53 4c mov 0x4c(%ebx),%edx <== NOT EXECUTED
119c39: 8b 4a 1c mov 0x1c(%edx),%ecx <== NOT EXECUTED
119c3c: 8b 55 e4 mov -0x1c(%ebp),%edx <== NOT EXECUTED
119c3f: 88 54 01 03 mov %dl,0x3(%ecx,%eax,1) <== NOT EXECUTED
119c43: c6 43 44 01 movb $0x1,0x44(%ebx) <== NOT EXECUTED
119c47: eb 7b jmp 119cc4 <rtems_rfs_block_map_grow+0x226><== NOT EXECUTED
singly,
singly_block);
}
else
{
rc = rtems_rfs_buffer_handle_request (fs,
119c49: 6a 01 push $0x1 <== NOT EXECUTED
119c4b: 8b 45 c8 mov -0x38(%ebp),%eax <== NOT EXECUTED
119c4e: ff 74 83 24 pushl 0x24(%ebx,%eax,4) <== NOT EXECUTED
119c52: ff 75 c4 pushl -0x3c(%ebp) <== NOT EXECUTED
119c55: 56 push %esi <== NOT EXECUTED
119c56: e8 4f 06 00 00 call 11a2aa <rtems_rfs_buffer_handle_request><== NOT EXECUTED
119c5b: 89 c7 mov %eax,%edi <== NOT EXECUTED
&map->doubly_buffer,
map->blocks[doubly],
true);
if (rc > 0)
119c5d: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
119c60: 85 c0 test %eax,%eax <== NOT EXECUTED
119c62: 7e 02 jle 119c66 <rtems_rfs_block_map_grow+0x1c8><== NOT EXECUTED
119c64: eb 4a jmp 119cb0 <rtems_rfs_block_map_grow+0x212><== NOT EXECUTED
{
rtems_rfs_group_bitmap_free (fs, false, block);
return rc;
}
singly_block = rtems_rfs_block_get_number (&map->doubly_buffer,
119c66: 8b 43 4c mov 0x4c(%ebx),%eax <== NOT EXECUTED
119c69: 8b 50 1c mov 0x1c(%eax),%edx <== NOT EXECUTED
119c6c: 8b 4d d4 mov -0x2c(%ebp),%ecx <== NOT EXECUTED
119c6f: c1 e1 02 shl $0x2,%ecx <== NOT EXECUTED
119c72: 0f b6 44 0a 03 movzbl 0x3(%edx,%ecx,1),%eax <== NOT EXECUTED
119c77: 8b 7d d4 mov -0x2c(%ebp),%edi <== NOT EXECUTED
119c7a: 0f b6 3c ba movzbl (%edx,%edi,4),%edi <== NOT EXECUTED
119c7e: c1 e7 18 shl $0x18,%edi <== NOT EXECUTED
119c81: 09 f8 or %edi,%eax <== NOT EXECUTED
119c83: 0f b6 7c 0a 01 movzbl 0x1(%edx,%ecx,1),%edi <== NOT EXECUTED
119c88: c1 e7 10 shl $0x10,%edi <== NOT EXECUTED
119c8b: 09 f8 or %edi,%eax <== NOT EXECUTED
119c8d: 0f b6 54 0a 02 movzbl 0x2(%edx,%ecx,1),%edx <== NOT EXECUTED
119c92: c1 e2 08 shl $0x8,%edx <== NOT EXECUTED
119c95: 09 d0 or %edx,%eax <== NOT EXECUTED
119c97: 89 45 e4 mov %eax,-0x1c(%ebp) <== NOT EXECUTED
singly);
rc = rtems_rfs_buffer_handle_request (fs, &map->singly_buffer,
119c9a: 6a 01 push $0x1 <== NOT EXECUTED
119c9c: 50 push %eax <== NOT EXECUTED
119c9d: 8d 43 38 lea 0x38(%ebx),%eax
119ca0: 50 push %eax
119ca1: 56 push %esi
119ca2: e8 03 06 00 00 call 11a2aa <rtems_rfs_buffer_handle_request>
119ca7: 89 c7 mov %eax,%edi
singly_block, true);
if (rc > 0)
119ca9: 83 c4 10 add $0x10,%esp
119cac: 85 c0 test %eax,%eax
119cae: 7e 14 jle 119cc4 <rtems_rfs_block_map_grow+0x226><== ALWAYS TAKEN
{
rtems_rfs_group_bitmap_free (fs, false, block);
119cb0: 51 push %ecx <== NOT EXECUTED
119cb1: ff 75 e0 pushl -0x20(%ebp) <== NOT EXECUTED
119cb4: 6a 00 push $0x0 <== NOT EXECUTED
119cb6: 56 push %esi <== NOT EXECUTED
119cb7: e8 1f 83 ff ff call 111fdb <rtems_rfs_group_bitmap_free><== NOT EXECUTED
119cbc: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
119cbf: e9 83 00 00 00 jmp 119d47 <rtems_rfs_block_map_grow+0x2a9><== NOT EXECUTED
return rc;
}
}
}
rtems_rfs_block_set_number (&map->singly_buffer, direct, block);
119cc4: 8b 45 d0 mov -0x30(%ebp),%eax
119cc7: c1 e0 02 shl $0x2,%eax
119cca: 8b 53 40 mov 0x40(%ebx),%edx
119ccd: 8b 52 1c mov 0x1c(%edx),%edx
119cd0: 0f b6 4d e3 movzbl -0x1d(%ebp),%ecx
119cd4: 8b 7d d0 mov -0x30(%ebp),%edi
119cd7: 88 0c ba mov %cl,(%edx,%edi,4)
119cda: 8b 53 40 mov 0x40(%ebx),%edx
119cdd: 8b 52 1c mov 0x1c(%edx),%edx
119ce0: 0f b7 4d e2 movzwl -0x1e(%ebp),%ecx
119ce4: 88 4c 02 01 mov %cl,0x1(%edx,%eax,1)
119ce8: 8b 53 40 mov 0x40(%ebx),%edx
119ceb: 8b 4a 1c mov 0x1c(%edx),%ecx
119cee: 8b 55 e0 mov -0x20(%ebp),%edx
119cf1: c1 ea 08 shr $0x8,%edx
119cf4: 88 54 01 02 mov %dl,0x2(%ecx,%eax,1)
119cf8: 8b 53 40 mov 0x40(%ebx),%edx
119cfb: 8b 4a 1c mov 0x1c(%edx),%ecx
119cfe: 8b 55 e0 mov -0x20(%ebp),%edx
119d01: 88 54 01 03 mov %dl,0x3(%ecx,%eax,1)
119d05: c6 43 38 01 movb $0x1,0x38(%ebx)
}
map->size.count++;
119d09: ff 43 08 incl 0x8(%ebx)
map->size.offset = 0;
119d0c: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx)
if (b == 0)
119d13: 83 7d cc 00 cmpl $0x0,-0x34(%ebp)
119d17: 8b 45 e0 mov -0x20(%ebp),%eax
119d1a: 75 05 jne 119d21 <rtems_rfs_block_map_grow+0x283><== NEVER TAKEN
*new_block = block;
119d1c: 8b 7d 14 mov 0x14(%ebp),%edi
119d1f: 89 07 mov %eax,(%edi)
map->last_data_block = block;
119d21: 89 43 20 mov %eax,0x20(%ebx)
map->dirty = true;
119d24: c6 03 01 movb $0x1,(%ebx)
/*
* Allocate a block at a time. The buffer handles hold the blocks so adding
* this way does not thrash the cache with lots of requests.
*/
for (b = 0; b < blocks; b++)
119d27: ff 45 cc incl -0x34(%ebp)
119d2a: eb 0d jmp 119d39 <rtems_rfs_block_map_grow+0x29b>
map->last_map_block = new_block;
return 0;
}
int
rtems_rfs_block_map_grow (rtems_rfs_file_system* fs,
119d2c: c7 45 cc 00 00 00 00 movl $0x0,-0x34(%ebp)
singly,
singly_block);
}
else
{
rc = rtems_rfs_buffer_handle_request (fs,
119d33: 8d 7b 44 lea 0x44(%ebx),%edi
119d36: 89 7d c4 mov %edi,-0x3c(%ebp)
/*
* Allocate a block at a time. The buffer handles hold the blocks so adding
* this way does not thrash the cache with lots of requests.
*/
for (b = 0; b < blocks; b++)
119d39: 8b 7d 10 mov 0x10(%ebp),%edi
119d3c: 39 7d cc cmp %edi,-0x34(%ebp)
119d3f: 0f 85 a8 fd ff ff jne 119aed <rtems_rfs_block_map_grow+0x4f>
*new_block = block;
map->last_data_block = block;
map->dirty = true;
}
return 0;
119d45: 31 ff xor %edi,%edi
}
119d47: 89 f8 mov %edi,%eax
119d49: 8d 65 f4 lea -0xc(%ebp),%esp
119d4c: 5b pop %ebx
119d4d: 5e pop %esi
119d4e: 5f pop %edi
119d4f: 5d pop %ebp
119d50: c3 ret
00119274 <rtems_rfs_block_map_indirect_alloc>:
rtems_rfs_block_map_indirect_alloc (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
rtems_rfs_buffer_handle* buffer,
rtems_rfs_block_no* block,
bool upping)
{
119274: 55 push %ebp
119275: 89 e5 mov %esp,%ebp
119277: 57 push %edi
119278: 56 push %esi
119279: 53 push %ebx
11927a: 83 ec 2c sub $0x2c,%esp
11927d: 89 c7 mov %eax,%edi
11927f: 89 d3 mov %edx,%ebx
119281: 89 ce mov %ecx,%esi
119283: 8a 45 0c mov 0xc(%ebp),%al
119286: 88 45 d7 mov %al,-0x29(%ebp)
int rc;
/*
* Save the new block locally because upping can have *block pointing to the
* slots which are cleared when upping.
*/
rc = rtems_rfs_group_bitmap_alloc (fs, map->last_map_block, false, &new_block);
119289: 8d 45 e4 lea -0x1c(%ebp),%eax
11928c: 50 push %eax
11928d: 6a 00 push $0x0
11928f: ff 72 1c pushl 0x1c(%edx)
119292: 57 push %edi
119293: e8 ba 8b ff ff call 111e52 <rtems_rfs_group_bitmap_alloc>
119298: 89 c2 mov %eax,%edx
if (rc > 0)
11929a: 83 c4 10 add $0x10,%esp
11929d: 85 c0 test %eax,%eax
11929f: 0f 8f d0 00 00 00 jg 119375 <rtems_rfs_block_map_indirect_alloc+0x101><== NEVER TAKEN
return rc;
rc = rtems_rfs_buffer_handle_request (fs, buffer, new_block, false);
1192a5: 6a 00 push $0x0
1192a7: ff 75 e4 pushl -0x1c(%ebp)
1192aa: 56 push %esi
1192ab: 57 push %edi
1192ac: e8 f9 0f 00 00 call 11a2aa <rtems_rfs_buffer_handle_request>
if (rc > 0)
1192b1: 83 c4 10 add $0x10,%esp
1192b4: 85 c0 test %eax,%eax
1192b6: 7e 1a jle 1192d2 <rtems_rfs_block_map_indirect_alloc+0x5e><== ALWAYS TAKEN
{
rtems_rfs_group_bitmap_free (fs, false, new_block);
1192b8: 51 push %ecx <== NOT EXECUTED
1192b9: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
1192bc: 6a 00 push $0x0 <== NOT EXECUTED
1192be: 57 push %edi <== NOT EXECUTED
1192bf: 89 45 d0 mov %eax,-0x30(%ebp) <== NOT EXECUTED
1192c2: e8 14 8d ff ff call 111fdb <rtems_rfs_group_bitmap_free><== NOT EXECUTED
1192c7: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
1192ca: 8b 55 d0 mov -0x30(%ebp),%edx <== NOT EXECUTED
1192cd: e9 a3 00 00 00 jmp 119375 <rtems_rfs_block_map_indirect_alloc+0x101><== NOT EXECUTED
return rc;
}
memset (rtems_rfs_buffer_data (buffer), 0xff, rtems_rfs_fs_block_size (fs));
1192d2: 8b 46 08 mov 0x8(%esi),%eax
1192d5: 8b 50 1c mov 0x1c(%eax),%edx
1192d8: 8b 4f 08 mov 0x8(%edi),%ecx
1192db: b0 ff mov $0xff,%al
1192dd: 89 d7 mov %edx,%edi
1192df: f3 aa rep stos %al,%es:(%edi)
if (upping)
1192e1: 80 7d d7 00 cmpb $0x0,-0x29(%ebp)
1192e5: 74 7e je 119365 <rtems_rfs_block_map_indirect_alloc+0xf1><== NEVER TAKEN
{
int b;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BLOCK_MAP_GROW))
1192e7: 52 push %edx
1192e8: 52 push %edx
1192e9: 6a 00 push $0x0
1192eb: 68 00 20 00 00 push $0x2000
1192f0: e8 a7 a5 ff ff call 11389c <rtems_rfs_trace>
1192f5: 83 c4 10 add $0x10,%esp
1192f8: 84 c0 test %al,%al
1192fa: 74 12 je 11930e <rtems_rfs_block_map_indirect_alloc+0x9a><== ALWAYS TAKEN
printf ("rtems-rfs: block-map-grow: upping: block-count=%" PRId32 "\n",
1192fc: 50 push %eax <== NOT EXECUTED
1192fd: 50 push %eax <== NOT EXECUTED
1192fe: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
119301: 68 9f 0c 13 00 push $0x130c9f <== NOT EXECUTED
119306: e8 31 70 00 00 call 12033c <printf> <== NOT EXECUTED
11930b: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rtems_rfs_block_map_indirect_alloc (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
rtems_rfs_buffer_handle* buffer,
rtems_rfs_block_no* block,
bool upping)
{
11930e: 31 c0 xor %eax,%eax
int b;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BLOCK_MAP_GROW))
printf ("rtems-rfs: block-map-grow: upping: block-count=%" PRId32 "\n",
map->size.count);
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
rtems_rfs_block_set_number (buffer, b, map->blocks[b]);
119310: 8b 56 08 mov 0x8(%esi),%edx
119313: 8b 52 1c mov 0x1c(%edx),%edx
119316: 0f b6 4c 03 27 movzbl 0x27(%ebx,%eax,1),%ecx
11931b: 88 0c 02 mov %cl,(%edx,%eax,1)
11931e: 8b 56 08 mov 0x8(%esi),%edx
119321: 8b 52 1c mov 0x1c(%edx),%edx
119324: 0f b7 4c 03 26 movzwl 0x26(%ebx,%eax,1),%ecx
119329: 88 4c 02 01 mov %cl,0x1(%edx,%eax,1)
11932d: 8b 56 08 mov 0x8(%esi),%edx
119330: 8b 4a 1c mov 0x1c(%edx),%ecx
119333: 8b 54 03 24 mov 0x24(%ebx,%eax,1),%edx
119337: c1 ea 08 shr $0x8,%edx
11933a: 88 54 01 02 mov %dl,0x2(%ecx,%eax,1)
11933e: 8b 56 08 mov 0x8(%esi),%edx
119341: 8b 4a 1c mov 0x1c(%edx),%ecx
119344: 8b 54 03 24 mov 0x24(%ebx,%eax,1),%edx
119348: 88 54 01 03 mov %dl,0x3(%ecx,%eax,1)
11934c: c6 06 01 movb $0x1,(%esi)
11934f: 83 c0 04 add $0x4,%eax
{
int b;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BLOCK_MAP_GROW))
printf ("rtems-rfs: block-map-grow: upping: block-count=%" PRId32 "\n",
map->size.count);
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
119352: 83 f8 14 cmp $0x14,%eax
119355: 75 b9 jne 119310 <rtems_rfs_block_map_indirect_alloc+0x9c>
rtems_rfs_block_set_number (buffer, b, map->blocks[b]);
memset (map->blocks, 0, sizeof (map->blocks));
119357: 8d 53 24 lea 0x24(%ebx),%edx
11935a: b9 05 00 00 00 mov $0x5,%ecx
11935f: 30 c0 xor %al,%al
119361: 89 d7 mov %edx,%edi
119363: f3 ab rep stos %eax,%es:(%edi)
}
rtems_rfs_buffer_mark_dirty (buffer);
119365: c6 06 01 movb $0x1,(%esi)
*block = new_block;
119368: 8b 45 e4 mov -0x1c(%ebp),%eax
11936b: 8b 55 08 mov 0x8(%ebp),%edx
11936e: 89 02 mov %eax,(%edx)
map->last_map_block = new_block;
119370: 89 43 1c mov %eax,0x1c(%ebx)
return 0;
119373: 31 d2 xor %edx,%edx
}
119375: 89 d0 mov %edx,%eax
119377: 8d 65 f4 lea -0xc(%ebp),%esp
11937a: 5b pop %ebx
11937b: 5e pop %esi
11937c: 5f pop %edi
11937d: 5d pop %ebp
11937e: c3 ret
00119426 <rtems_rfs_block_map_indirect_shrink.isra.7>:
* @param indirect The index index in the inode's block table.
* @param index The index in the indirect table of the block.
* @return int The error number (errno). No error if 0.
*/
static int
rtems_rfs_block_map_indirect_shrink (rtems_rfs_file_system* fs,
119426: 55 push %ebp
119427: 89 e5 mov %esp,%ebp
119429: 57 push %edi
11942a: 56 push %esi
11942b: 53 push %ebx
11942c: 83 ec 1c sub $0x1c,%esp
11942f: 89 d6 mov %edx,%esi
119431: 8b 55 08 mov 0x8(%ebp),%edx
119434: 8b 5d 0c mov 0xc(%ebp),%ebx
* block to be freed and the indirect block is now also free, or we have only
* one indirect table and we can fit the remaining blocks into the inode,
* then either move to the next indirect block or move the remaining blocks
* into the inode and free the indirect table's block.
*/
if ((index == 0) ||
119437: 85 db test %ebx,%ebx
119439: 74 09 je 119444 <rtems_rfs_block_map_indirect_shrink.isra.7+0x1e><== NEVER TAKEN
11943b: 83 fb 05 cmp $0x5,%ebx
11943e: 75 6b jne 1194ab <rtems_rfs_block_map_indirect_shrink.isra.7+0x85>
119440: 85 d2 test %edx,%edx
119442: 75 67 jne 1194ab <rtems_rfs_block_map_indirect_shrink.isra.7+0x85><== NEVER TAKEN
((indirect == 0) && (index == RTEMS_RFS_INODE_BLOCKS)))
{
rtems_rfs_block_no block_to_free = map->blocks[indirect];
119444: 8b 7c 96 24 mov 0x24(%esi,%edx,4),%edi
119448: 89 7d e4 mov %edi,-0x1c(%ebp)
if ((indirect == 0) && (index == RTEMS_RFS_INODE_BLOCKS))
11944b: 83 fb 05 cmp $0x5,%ebx
11944e: 75 38 jne 119488 <rtems_rfs_block_map_indirect_shrink.isra.7+0x62><== NEVER TAKEN
119450: 85 d2 test %edx,%edx
119452: 75 34 jne 119488 <rtems_rfs_block_map_indirect_shrink.isra.7+0x62><== NEVER TAKEN
/*
* Move to direct inode access.
*/
int b;
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
map->blocks[b] = rtems_rfs_block_get_number (buffer, b);
119454: 8b 11 mov (%ecx),%edx
119456: 8b 5a 1c mov 0x1c(%edx),%ebx
119459: 31 d2 xor %edx,%edx
11945b: 0f b6 0b movzbl (%ebx),%ecx
11945e: c1 e1 18 shl $0x18,%ecx
119461: 0f b6 7b 01 movzbl 0x1(%ebx),%edi
119465: c1 e7 10 shl $0x10,%edi
119468: 09 f9 or %edi,%ecx
11946a: 0f b6 7b 03 movzbl 0x3(%ebx),%edi
11946e: 09 f9 or %edi,%ecx
119470: 0f b6 7b 02 movzbl 0x2(%ebx),%edi
119474: c1 e7 08 shl $0x8,%edi
119477: 09 f9 or %edi,%ecx
119479: 89 4c 96 24 mov %ecx,0x24(%esi,%edx,4)
{
/*
* Move to direct inode access.
*/
int b;
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
11947d: 42 inc %edx
11947e: 83 c3 04 add $0x4,%ebx
119481: 83 fa 05 cmp $0x5,%edx
119484: 75 d5 jne 11945b <rtems_rfs_block_map_indirect_shrink.isra.7+0x35>
119486: eb 08 jmp 119490 <rtems_rfs_block_map_indirect_shrink.isra.7+0x6a>
else
{
/*
* One less singly indirect block in the inode.
*/
map->blocks[indirect] = 0;
119488: c7 44 96 24 00 00 00 movl $0x0,0x24(%esi,%edx,4) <== NOT EXECUTED
11948f: 00
}
rc = rtems_rfs_group_bitmap_free (fs, false, block_to_free);
119490: 57 push %edi
119491: ff 75 e4 pushl -0x1c(%ebp)
119494: 6a 00 push $0x0
119496: 50 push %eax
119497: e8 3f 8b ff ff call 111fdb <rtems_rfs_group_bitmap_free>
if (rc > 0)
11949c: 83 c4 10 add $0x10,%esp
11949f: 85 c0 test %eax,%eax
1194a1: 7f 0a jg 1194ad <rtems_rfs_block_map_indirect_shrink.isra.7+0x87><== NEVER TAKEN
return rc;
map->last_map_block = block_to_free;
1194a3: 8b 55 e4 mov -0x1c(%ebp),%edx
1194a6: 89 56 1c mov %edx,0x1c(%esi)
1194a9: eb 02 jmp 1194ad <rtems_rfs_block_map_indirect_shrink.isra.7+0x87>
rtems_rfs_block_map* map,
rtems_rfs_buffer_handle* buffer,
rtems_rfs_block_no indirect,
rtems_rfs_block_no index)
{
int rc = 0;
1194ab: 31 c0 xor %eax,%eax
map->last_map_block = block_to_free;
}
return rc;
}
1194ad: 8d 65 f4 lea -0xc(%ebp),%esp
1194b0: 5b pop %ebx
1194b1: 5e pop %esi
1194b2: 5f pop %edi
1194b3: 5d pop %ebp
1194b4: c3 ret
001195a2 <rtems_rfs_block_map_open>:
int
rtems_rfs_block_map_open (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* inode,
rtems_rfs_block_map* map)
{
1195a2: 55 push %ebp
1195a3: 89 e5 mov %esp,%ebp
1195a5: 57 push %edi
1195a6: 56 push %esi
1195a7: 53 push %ebx
1195a8: 83 ec 24 sub $0x24,%esp
1195ab: 8b 75 08 mov 0x8(%ebp),%esi
1195ae: 8b 7d 0c mov 0xc(%ebp),%edi
1195b1: 8b 5d 10 mov 0x10(%ebp),%ebx
* Set the count to 0 so at least find fails, then open the handle and make
* sure the inode has been loaded into memory. If we did not load the inode
* do not unload it. The caller may assume it is still loaded when we return.
*/
map->dirty = false;
1195b4: c6 03 00 movb $0x0,(%ebx)
map->inode = NULL;
1195b7: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx)
* @param size A pointer to the block size.
*/
static inline void
rtems_rfs_block_set_size_zero (rtems_rfs_block_size* size)
{
size->count = 0;
1195be: c7 43 08 00 00 00 00 movl $0x0,0x8(%ebx)
size->offset = 0;
1195c5: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx)
* @param bpos A pointer to the block position.
*/
static inline void
rtems_rfs_block_set_bpos_zero (rtems_rfs_block_pos* bpos)
{
bpos->bno = 0;
1195cc: c7 43 10 00 00 00 00 movl $0x0,0x10(%ebx)
bpos->boff = 0;
1195d3: c7 43 14 00 00 00 00 movl $0x0,0x14(%ebx)
bpos->block = 0;
1195da: c7 43 18 00 00 00 00 movl $0x0,0x18(%ebx)
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
1195e1: c6 43 38 00 movb $0x0,0x38(%ebx)
handle->bnum = 0;
1195e5: c7 43 3c 00 00 00 00 movl $0x0,0x3c(%ebx)
handle->buffer = NULL;
1195ec: c7 43 40 00 00 00 00 movl $0x0,0x40(%ebx)
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
1195f3: c6 43 44 00 movb $0x0,0x44(%ebx)
handle->bnum = 0;
1195f7: c7 43 48 00 00 00 00 movl $0x0,0x48(%ebx)
handle->buffer = NULL;
1195fe: c7 43 4c 00 00 00 00 movl $0x0,0x4c(%ebx)
return rc;
rc = rtems_rfs_buffer_handle_open (fs, &map->doubly_buffer);
if (rc > 0)
return rc;
rc = rtems_rfs_inode_load (fs, inode);
119605: 57 push %edi
119606: 56 push %esi
119607: e8 a6 8b ff ff call 1121b2 <rtems_rfs_inode_load>
11960c: 89 c2 mov %eax,%edx
if (rc > 0)
11960e: 83 c4 10 add $0x10,%esp
119611: 85 c0 test %eax,%eax
119613: 0f 8f e1 00 00 00 jg 1196fa <rtems_rfs_block_map_open+0x158><== NEVER TAKEN
/*
* Extract the block and block count data from the inode into the targets
* byte order.
*/
map->inode = inode;
119619: 89 7b 04 mov %edi,0x4(%ebx)
int
rtems_rfs_block_map_free_all (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map)
{
return rtems_rfs_block_map_shrink (fs, map, map->size.count);
}
11961c: 8b 47 0c mov 0xc(%edi),%eax
/*
* Extract the block and block count data from the inode into the targets
* byte order.
*/
map->inode = inode;
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
11961f: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
* @return uint32_t The block number.
*/
static inline uint32_t
rtems_rfs_inode_get_block (rtems_rfs_inode_handle* handle, int block)
{
return rtems_rfs_read_u32 (&handle->node->data.blocks[block]);
119626: 8b 4d e4 mov -0x1c(%ebp),%ecx
119629: 8d 54 88 10 lea 0x10(%eax,%ecx,4),%edx
11962d: 8d 4a 0c lea 0xc(%edx),%ecx
119630: 89 4d e0 mov %ecx,-0x20(%ebp)
119633: 0f b6 52 0c movzbl 0xc(%edx),%edx
119637: c1 e2 18 shl $0x18,%edx
11963a: 0f b6 49 01 movzbl 0x1(%ecx),%ecx
11963e: c1 e1 10 shl $0x10,%ecx
119641: 09 ca or %ecx,%edx
119643: 8b 4d e0 mov -0x20(%ebp),%ecx
119646: 0f b6 49 03 movzbl 0x3(%ecx),%ecx
11964a: 09 ca or %ecx,%edx
11964c: 8b 4d e0 mov -0x20(%ebp),%ecx
11964f: 0f b6 49 02 movzbl 0x2(%ecx),%ecx
119653: c1 e1 08 shl $0x8,%ecx
119656: 09 ca or %ecx,%edx
119658: 8b 4d e4 mov -0x1c(%ebp),%ecx
11965b: 89 54 8b 24 mov %edx,0x24(%ebx,%ecx,4)
11965f: 41 inc %ecx
119660: 89 4d e4 mov %ecx,-0x1c(%ebp)
119663: 83 f9 05 cmp $0x5,%ecx
119666: 75 be jne 119626 <rtems_rfs_block_map_open+0x84>
* @return uint32_t The block count.
*/
static inline uint32_t
rtems_rfs_inode_get_block_count (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->block_count);
119668: 0f b6 50 0c movzbl 0xc(%eax),%edx
11966c: c1 e2 18 shl $0x18,%edx
11966f: 0f b6 48 0d movzbl 0xd(%eax),%ecx
119673: c1 e1 10 shl $0x10,%ecx
119676: 09 ca or %ecx,%edx
119678: 0f b6 48 0f movzbl 0xf(%eax),%ecx
11967c: 09 ca or %ecx,%edx
11967e: 0f b6 48 0e movzbl 0xe(%eax),%ecx
119682: c1 e1 08 shl $0x8,%ecx
119685: 09 ca or %ecx,%edx
119687: 89 53 08 mov %edx,0x8(%ebx)
* @return uint32_t The block offset.
*/
static inline uint16_t
rtems_rfs_inode_get_block_offset (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u16 (&handle->node->block_offset);
11968a: 0f b6 48 0a movzbl 0xa(%eax),%ecx
11968e: c1 e1 08 shl $0x8,%ecx
119691: 0f b6 50 0b movzbl 0xb(%eax),%edx
119695: 09 ca or %ecx,%edx
map->blocks[b] = rtems_rfs_inode_get_block (inode, b);
map->size.count = rtems_rfs_inode_get_block_count (inode);
map->size.offset = rtems_rfs_inode_get_block_offset (inode);
119697: 0f b7 d2 movzwl %dx,%edx
11969a: 89 53 0c mov %edx,0xc(%ebx)
* @return uint32_t The last map block number.
*/
static inline uint32_t
rtems_rfs_inode_get_last_map_block (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->last_map_block);
11969d: 0f b6 50 30 movzbl 0x30(%eax),%edx
1196a1: c1 e2 18 shl $0x18,%edx
1196a4: 0f b6 48 31 movzbl 0x31(%eax),%ecx
1196a8: c1 e1 10 shl $0x10,%ecx
1196ab: 09 ca or %ecx,%edx
1196ad: 0f b6 48 33 movzbl 0x33(%eax),%ecx
1196b1: 09 ca or %ecx,%edx
1196b3: 0f b6 48 32 movzbl 0x32(%eax),%ecx
1196b7: c1 e1 08 shl $0x8,%ecx
1196ba: 09 ca or %ecx,%edx
1196bc: 89 53 1c mov %edx,0x1c(%ebx)
* @return uint32_t The last data block number.
*/
static inline uint32_t
rtems_rfs_inode_get_last_data_block (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->last_data_block);
1196bf: 0f b6 50 34 movzbl 0x34(%eax),%edx
1196c3: c1 e2 18 shl $0x18,%edx
1196c6: 0f b6 48 35 movzbl 0x35(%eax),%ecx
1196ca: c1 e1 10 shl $0x10,%ecx
1196cd: 09 ca or %ecx,%edx
1196cf: 0f b6 48 37 movzbl 0x37(%eax),%ecx
1196d3: 09 ca or %ecx,%edx
1196d5: 0f b6 40 36 movzbl 0x36(%eax),%eax
1196d9: c1 e0 08 shl $0x8,%eax
1196dc: 09 c2 or %eax,%edx
1196de: 89 53 20 mov %edx,0x20(%ebx)
map->last_map_block = rtems_rfs_inode_get_last_map_block (inode);
map->last_data_block = rtems_rfs_inode_get_last_data_block (inode);
rc = rtems_rfs_inode_unload (fs, inode, false);
1196e1: c7 45 10 00 00 00 00 movl $0x0,0x10(%ebp)
1196e8: 89 7d 0c mov %edi,0xc(%ebp)
1196eb: 89 75 08 mov %esi,0x8(%ebp)
return rc;
}
1196ee: 8d 65 f4 lea -0xc(%ebp),%esp
1196f1: 5b pop %ebx
1196f2: 5e pop %esi
1196f3: 5f pop %edi
1196f4: 5d pop %ebp
map->size.count = rtems_rfs_inode_get_block_count (inode);
map->size.offset = rtems_rfs_inode_get_block_offset (inode);
map->last_map_block = rtems_rfs_inode_get_last_map_block (inode);
map->last_data_block = rtems_rfs_inode_get_last_data_block (inode);
rc = rtems_rfs_inode_unload (fs, inode, false);
1196f5: e9 e3 8b ff ff jmp 1122dd <rtems_rfs_inode_unload>
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
1196fa: 50 push %eax <== NOT EXECUTED
1196fb: 50 push %eax <== NOT EXECUTED
return rc;
rc = rtems_rfs_inode_load (fs, inode);
if (rc > 0)
{
rtems_rfs_buffer_handle_close (fs, &map->singly_buffer);
1196fc: 8d 43 38 lea 0x38(%ebx),%eax <== NOT EXECUTED
1196ff: 50 push %eax <== NOT EXECUTED
119700: 56 push %esi <== NOT EXECUTED
119701: 89 55 dc mov %edx,-0x24(%ebp) <== NOT EXECUTED
119704: e8 28 0a 00 00 call 11a131 <rtems_rfs_buffer_handle_release><== NOT EXECUTED
handle->dirty = false;
119709: c6 43 38 00 movb $0x0,0x38(%ebx) <== NOT EXECUTED
handle->bnum = 0;
11970d: c7 43 3c 00 00 00 00 movl $0x0,0x3c(%ebx) <== NOT EXECUTED
handle->buffer = NULL;
119714: c7 43 40 00 00 00 00 movl $0x0,0x40(%ebx) <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
11971b: 58 pop %eax <== NOT EXECUTED
11971c: 5a pop %edx <== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &map->doubly_buffer);
11971d: 8d 43 44 lea 0x44(%ebx),%eax <== NOT EXECUTED
119720: 50 push %eax <== NOT EXECUTED
119721: 56 push %esi <== NOT EXECUTED
119722: e8 0a 0a 00 00 call 11a131 <rtems_rfs_buffer_handle_release><== NOT EXECUTED
handle->dirty = false;
119727: c6 43 44 00 movb $0x0,0x44(%ebx) <== NOT EXECUTED
handle->bnum = 0;
11972b: c7 43 48 00 00 00 00 movl $0x0,0x48(%ebx) <== NOT EXECUTED
handle->buffer = NULL;
119732: c7 43 4c 00 00 00 00 movl $0x0,0x4c(%ebx) <== NOT EXECUTED
119739: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11973c: 8b 55 dc mov -0x24(%ebp),%edx <== NOT EXECUTED
map->last_data_block = rtems_rfs_inode_get_last_data_block (inode);
rc = rtems_rfs_inode_unload (fs, inode, false);
return rc;
}
11973f: 89 d0 mov %edx,%eax <== NOT EXECUTED
119741: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
119744: 5b pop %ebx <== NOT EXECUTED
119745: 5e pop %esi <== NOT EXECUTED
119746: 5f pop %edi <== NOT EXECUTED
119747: 5d pop %ebp <== NOT EXECUTED
119748: c3 ret <== NOT EXECUTED
00119d51 <rtems_rfs_block_map_shrink>:
int
rtems_rfs_block_map_shrink (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
size_t blocks)
{
119d51: 55 push %ebp
119d52: 89 e5 mov %esp,%ebp
119d54: 57 push %edi
119d55: 56 push %esi
119d56: 53 push %ebx
119d57: 83 ec 34 sub $0x34,%esp
119d5a: 8b 5d 0c mov 0xc(%ebp),%ebx
119d5d: 8b 75 10 mov 0x10(%ebp),%esi
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BLOCK_MAP_SHRINK))
119d60: 6a 00 push $0x0
119d62: 68 00 40 00 00 push $0x4000
119d67: e8 30 9b ff ff call 11389c <rtems_rfs_trace>
119d6c: 83 c4 10 add $0x10,%esp
119d6f: 84 c0 test %al,%al
119d71: 74 12 je 119d85 <rtems_rfs_block_map_shrink+0x34><== ALWAYS TAKEN
printf ("rtems-rfs: block-map-shrink: entry: blocks=%zd count=%" PRIu32 "\n",
119d73: 50 push %eax <== NOT EXECUTED
119d74: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
119d77: 56 push %esi <== NOT EXECUTED
119d78: 68 56 0d 13 00 push $0x130d56 <== NOT EXECUTED
119d7d: e8 ba 65 00 00 call 12033c <printf> <== NOT EXECUTED
119d82: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
blocks, map->size.count);
if (map->size.count == 0)
119d85: 8b 43 08 mov 0x8(%ebx),%eax
119d88: 85 c0 test %eax,%eax
119d8a: 75 05 jne 119d91 <rtems_rfs_block_map_shrink+0x40>
119d8c: e9 19 02 00 00 jmp 119faa <rtems_rfs_block_map_shrink+0x259>
119d91: 89 75 e0 mov %esi,-0x20(%ebp)
119d94: 39 c6 cmp %eax,%esi
119d96: 0f 86 ad 01 00 00 jbe 119f49 <rtems_rfs_block_map_shrink+0x1f8><== ALWAYS TAKEN
119d9c: 89 45 e0 mov %eax,-0x20(%ebp) <== NOT EXECUTED
119d9f: e9 a5 01 00 00 jmp 119f49 <rtems_rfs_block_map_shrink+0x1f8><== NOT EXECUTED
{
rtems_rfs_block_no block;
rtems_rfs_block_no block_to_free;
int rc;
block = map->size.count - 1;
119da4: 8b 43 08 mov 0x8(%ebx),%eax
119da7: 8d 48 ff lea -0x1(%eax),%ecx
if (block < RTEMS_RFS_INODE_BLOCKS)
119daa: 83 f9 04 cmp $0x4,%ecx
119dad: 77 14 ja 119dc3 <rtems_rfs_block_map_shrink+0x72>
{
/*
* We have less than RTEMS_RFS_INODE_BLOCKS so they are held in the
* inode.
*/
block_to_free = map->blocks[block];
119daf: 83 c0 07 add $0x7,%eax
119db2: 8b 74 83 04 mov 0x4(%ebx,%eax,4),%esi
map->blocks[block] = 0;
119db6: c7 44 83 04 00 00 00 movl $0x0,0x4(%ebx,%eax,4)
119dbd: 00
119dbe: e9 5e 01 00 00 jmp 119f21 <rtems_rfs_block_map_shrink+0x1d0>
* table of block numbers.
*/
rtems_rfs_block_no direct;
rtems_rfs_block_no singly;
direct = block % fs->blocks_per_block;
119dc3: 8b 7d 08 mov 0x8(%ebp),%edi
119dc6: 8b 77 34 mov 0x34(%edi),%esi
119dc9: 89 c8 mov %ecx,%eax
119dcb: 31 d2 xor %edx,%edx
119dcd: f7 f6 div %esi
119dcf: 89 55 e4 mov %edx,-0x1c(%ebp)
119dd2: 89 45 dc mov %eax,-0x24(%ebp)
singly = block / fs->blocks_per_block;
if (block < fs->block_map_singly_blocks)
119dd5: 3b 4f 38 cmp 0x38(%edi),%ecx
119dd8: 73 59 jae 119e33 <rtems_rfs_block_map_shrink+0xe2><== NEVER TAKEN
{
/*
* Request the indirect block and then obtain the block number from the
* indirect block.
*/
rc = rtems_rfs_buffer_handle_request (fs, &map->singly_buffer,
119dda: 6a 01 push $0x1
119ddc: ff 74 83 24 pushl 0x24(%ebx,%eax,4)
119de0: ff 75 d4 pushl -0x2c(%ebp)
119de3: 57 push %edi
119de4: e8 c1 04 00 00 call 11a2aa <rtems_rfs_buffer_handle_request>
map->blocks[singly], true);
if (rc > 0)
119de9: 83 c4 10 add $0x10,%esp
119dec: 85 c0 test %eax,%eax
119dee: 0f 8f b8 01 00 00 jg 119fac <rtems_rfs_block_map_shrink+0x25b><== NEVER TAKEN
return rc;
block_to_free = rtems_rfs_block_get_number (&map->singly_buffer,
119df4: 8b 43 40 mov 0x40(%ebx),%eax
119df7: 8b 40 1c mov 0x1c(%eax),%eax
119dfa: 8b 55 e4 mov -0x1c(%ebp),%edx
119dfd: c1 e2 02 shl $0x2,%edx
119e00: 0f b6 74 10 03 movzbl 0x3(%eax,%edx,1),%esi
119e05: 8b 7d e4 mov -0x1c(%ebp),%edi
119e08: 0f b6 0c b8 movzbl (%eax,%edi,4),%ecx
119e0c: c1 e1 18 shl $0x18,%ecx
119e0f: 09 ce or %ecx,%esi
119e11: 0f b6 4c 10 01 movzbl 0x1(%eax,%edx,1),%ecx
119e16: c1 e1 10 shl $0x10,%ecx
119e19: 09 ce or %ecx,%esi
119e1b: 0f b6 44 10 02 movzbl 0x2(%eax,%edx,1),%eax
119e20: c1 e0 08 shl $0x8,%eax
119e23: 09 c6 or %eax,%esi
direct);
rc = rtems_rfs_block_map_indirect_shrink (fs, map, &map->singly_buffer,
119e25: 50 push %eax
119e26: 50 push %eax
int
rtems_rfs_block_map_free_all (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map)
{
return rtems_rfs_block_map_shrink (fs, map, map->size.count);
}
119e27: 8d 4b 40 lea 0x40(%ebx),%ecx
return rc;
block_to_free = rtems_rfs_block_get_number (&map->singly_buffer,
direct);
rc = rtems_rfs_block_map_indirect_shrink (fs, map, &map->singly_buffer,
119e2a: 57 push %edi
119e2b: ff 75 dc pushl -0x24(%ebp)
119e2e: e9 d9 00 00 00 jmp 119f0c <rtems_rfs_block_map_shrink+0x1bb>
singly, direct);
if (rc)
return rc;
}
else if (block < fs->block_map_doubly_blocks)
119e33: 8b 7d 08 mov 0x8(%ebp),%edi <== NOT EXECUTED
119e36: 3b 4f 3c cmp 0x3c(%edi),%ecx <== NOT EXECUTED
119e39: 0f 83 20 01 00 00 jae 119f5f <rtems_rfs_block_map_shrink+0x20e><== NOT EXECUTED
* value is still valid for doubly indirect tables.
*/
rtems_rfs_block_no doubly;
rtems_rfs_block_no doubly_singly;
doubly = singly / fs->blocks_per_block;
119e3f: 8b 45 dc mov -0x24(%ebp),%eax <== NOT EXECUTED
119e42: 31 d2 xor %edx,%edx <== NOT EXECUTED
119e44: f7 f6 div %esi <== NOT EXECUTED
119e46: 89 55 dc mov %edx,-0x24(%ebp) <== NOT EXECUTED
119e49: 89 45 d8 mov %eax,-0x28(%ebp) <== NOT EXECUTED
doubly_singly = singly % fs->blocks_per_block;
rc = rtems_rfs_buffer_handle_request (fs, &map->doubly_buffer,
119e4c: 6a 01 push $0x1 <== NOT EXECUTED
119e4e: ff 74 83 24 pushl 0x24(%ebx,%eax,4) <== NOT EXECUTED
119e52: ff 75 d0 pushl -0x30(%ebp) <== NOT EXECUTED
119e55: 57 push %edi <== NOT EXECUTED
119e56: e8 4f 04 00 00 call 11a2aa <rtems_rfs_buffer_handle_request><== NOT EXECUTED
map->blocks[doubly], true);
if (rc > 0)
119e5b: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
119e5e: 85 c0 test %eax,%eax <== NOT EXECUTED
119e60: 0f 8f 46 01 00 00 jg 119fac <rtems_rfs_block_map_shrink+0x25b><== NOT EXECUTED
return rc;
singly = rtems_rfs_block_get_number (&map->doubly_buffer,
119e66: 8b 43 4c mov 0x4c(%ebx),%eax <== NOT EXECUTED
119e69: 8b 40 1c mov 0x1c(%eax),%eax <== NOT EXECUTED
119e6c: 8b 55 dc mov -0x24(%ebp),%edx <== NOT EXECUTED
119e6f: c1 e2 02 shl $0x2,%edx <== NOT EXECUTED
119e72: 0f b6 7c 10 03 movzbl 0x3(%eax,%edx,1),%edi <== NOT EXECUTED
119e77: 8b 75 dc mov -0x24(%ebp),%esi <== NOT EXECUTED
119e7a: 0f b6 0c b0 movzbl (%eax,%esi,4),%ecx <== NOT EXECUTED
119e7e: c1 e1 18 shl $0x18,%ecx <== NOT EXECUTED
119e81: 09 cf or %ecx,%edi <== NOT EXECUTED
119e83: 0f b6 4c 10 01 movzbl 0x1(%eax,%edx,1),%ecx <== NOT EXECUTED
119e88: c1 e1 10 shl $0x10,%ecx <== NOT EXECUTED
119e8b: 09 cf or %ecx,%edi <== NOT EXECUTED
119e8d: 0f b6 44 10 02 movzbl 0x2(%eax,%edx,1),%eax <== NOT EXECUTED
119e92: c1 e0 08 shl $0x8,%eax <== NOT EXECUTED
119e95: 09 c7 or %eax,%edi <== NOT EXECUTED
doubly_singly);
/*
* Read the singly indirect table and get the block number.
*/
rc = rtems_rfs_buffer_handle_request (fs, &map->singly_buffer,
119e97: 6a 01 push $0x1 <== NOT EXECUTED
119e99: 57 push %edi <== NOT EXECUTED
119e9a: ff 75 d4 pushl -0x2c(%ebp) <== NOT EXECUTED
119e9d: ff 75 08 pushl 0x8(%ebp) <== NOT EXECUTED
119ea0: e8 05 04 00 00 call 11a2aa <rtems_rfs_buffer_handle_request><== NOT EXECUTED
singly, true);
if (rc > 0)
119ea5: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
119ea8: 85 c0 test %eax,%eax <== NOT EXECUTED
119eaa: 0f 8f fc 00 00 00 jg 119fac <rtems_rfs_block_map_shrink+0x25b><== NOT EXECUTED
return rc;
block_to_free = rtems_rfs_block_get_number (&map->singly_buffer,
119eb0: 8b 43 40 mov 0x40(%ebx),%eax <== NOT EXECUTED
119eb3: 8b 40 1c mov 0x1c(%eax),%eax <== NOT EXECUTED
119eb6: 8b 55 e4 mov -0x1c(%ebp),%edx <== NOT EXECUTED
119eb9: c1 e2 02 shl $0x2,%edx <== NOT EXECUTED
119ebc: 0f b6 74 10 03 movzbl 0x3(%eax,%edx,1),%esi <== NOT EXECUTED
119ec1: 8b 4d e4 mov -0x1c(%ebp),%ecx <== NOT EXECUTED
119ec4: 0f b6 0c 88 movzbl (%eax,%ecx,4),%ecx <== NOT EXECUTED
119ec8: c1 e1 18 shl $0x18,%ecx <== NOT EXECUTED
119ecb: 09 ce or %ecx,%esi <== NOT EXECUTED
119ecd: 0f b6 4c 10 01 movzbl 0x1(%eax,%edx,1),%ecx <== NOT EXECUTED
119ed2: c1 e1 10 shl $0x10,%ecx <== NOT EXECUTED
119ed5: 09 ce or %ecx,%esi <== NOT EXECUTED
119ed7: 0f b6 44 10 02 movzbl 0x2(%eax,%edx,1),%eax <== NOT EXECUTED
119edc: c1 e0 08 shl $0x8,%eax <== NOT EXECUTED
119edf: 09 c6 or %eax,%esi <== NOT EXECUTED
direct);
if (direct == 0)
119ee1: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp) <== NOT EXECUTED
119ee5: 75 3a jne 119f21 <rtems_rfs_block_map_shrink+0x1d0><== NOT EXECUTED
{
rc = rtems_rfs_group_bitmap_free (fs, false, singly);
119ee7: 50 push %eax <== NOT EXECUTED
119ee8: 57 push %edi <== NOT EXECUTED
119ee9: 6a 00 push $0x0 <== NOT EXECUTED
119eeb: ff 75 08 pushl 0x8(%ebp) <== NOT EXECUTED
119eee: e8 e8 80 ff ff call 111fdb <rtems_rfs_group_bitmap_free><== NOT EXECUTED
if (rc > 0)
119ef3: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
119ef6: 85 c0 test %eax,%eax <== NOT EXECUTED
119ef8: 0f 8f ae 00 00 00 jg 119fac <rtems_rfs_block_map_shrink+0x25b><== NOT EXECUTED
return rc;
map->last_map_block = singly;
119efe: 89 7b 1c mov %edi,0x1c(%ebx) <== NOT EXECUTED
rc = rtems_rfs_block_map_indirect_shrink (fs, map, &map->doubly_buffer,
119f01: 50 push %eax <== NOT EXECUTED
119f02: 50 push %eax <== NOT EXECUTED
int
rtems_rfs_block_map_free_all (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map)
{
return rtems_rfs_block_map_shrink (fs, map, map->size.count);
}
119f03: 8d 4b 4c lea 0x4c(%ebx),%ecx <== NOT EXECUTED
if (rc > 0)
return rc;
map->last_map_block = singly;
rc = rtems_rfs_block_map_indirect_shrink (fs, map, &map->doubly_buffer,
119f06: ff 75 dc pushl -0x24(%ebp) <== NOT EXECUTED
119f09: ff 75 d8 pushl -0x28(%ebp) <== NOT EXECUTED
119f0c: 89 da mov %ebx,%edx
119f0e: 8b 45 08 mov 0x8(%ebp),%eax
119f11: e8 10 f5 ff ff call 119426 <rtems_rfs_block_map_indirect_shrink.isra.7>
doubly, doubly_singly);
if (rc)
119f16: 83 c4 10 add $0x10,%esp
119f19: 85 c0 test %eax,%eax
119f1b: 0f 85 8b 00 00 00 jne 119fac <rtems_rfs_block_map_shrink+0x25b><== NEVER TAKEN
{
rc = EIO;
break;
}
}
rc = rtems_rfs_group_bitmap_free (fs, false, block_to_free);
119f21: 57 push %edi
119f22: 56 push %esi
119f23: 6a 00 push $0x0
119f25: ff 75 08 pushl 0x8(%ebp)
119f28: e8 ae 80 ff ff call 111fdb <rtems_rfs_group_bitmap_free>
if (rc > 0)
119f2d: 83 c4 10 add $0x10,%esp
119f30: 85 c0 test %eax,%eax
119f32: 7f 78 jg 119fac <rtems_rfs_block_map_shrink+0x25b><== NEVER TAKEN
return rc;
map->size.count--;
119f34: ff 4b 08 decl 0x8(%ebx)
map->size.offset = 0;
119f37: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx)
map->last_data_block = block_to_free;
119f3e: 89 73 20 mov %esi,0x20(%ebx)
map->dirty = true;
119f41: c6 03 01 movb $0x1,(%ebx)
blocks--;
119f44: ff 4d e0 decl -0x20(%ebp)
119f47: eb 0c jmp 119f55 <rtems_rfs_block_map_shrink+0x204>
rtems_rfs_block_no doubly_singly;
doubly = singly / fs->blocks_per_block;
doubly_singly = singly % fs->blocks_per_block;
rc = rtems_rfs_buffer_handle_request (fs, &map->doubly_buffer,
119f49: 8d 73 44 lea 0x44(%ebx),%esi
119f4c: 89 75 d0 mov %esi,-0x30(%ebp)
doubly_singly);
/*
* Read the singly indirect table and get the block number.
*/
rc = rtems_rfs_buffer_handle_request (fs, &map->singly_buffer,
119f4f: 8d 7b 38 lea 0x38(%ebx),%edi
119f52: 89 7d d4 mov %edi,-0x2c(%ebp)
return 0;
if (blocks > map->size.count)
blocks = map->size.count;
while (blocks)
119f55: 83 7d e0 00 cmpl $0x0,-0x20(%ebp)
119f59: 0f 85 45 fe ff ff jne 119da4 <rtems_rfs_block_map_shrink+0x53>
map->last_data_block = block_to_free;
map->dirty = true;
blocks--;
}
if (map->size.count == 0)
119f5f: 8b 43 08 mov 0x8(%ebx),%eax
119f62: 85 c0 test %eax,%eax
119f64: 75 0e jne 119f74 <rtems_rfs_block_map_shrink+0x223>
{
map->last_map_block = 0;
119f66: c7 43 1c 00 00 00 00 movl $0x0,0x1c(%ebx)
map->last_data_block = 0;
119f6d: c7 43 20 00 00 00 00 movl $0x0,0x20(%ebx)
}
/*
* Keep the position inside the map.
*/
if (rtems_rfs_block_pos_past_end (&map->bpos, &map->size))
119f74: 8b 53 10 mov 0x10(%ebx),%edx
119f77: 85 d2 test %edx,%edx
119f79: 74 04 je 119f7f <rtems_rfs_block_map_shrink+0x22e>
119f7b: 85 c0 test %eax,%eax
119f7d: 74 13 je 119f92 <rtems_rfs_block_map_shrink+0x241><== ALWAYS TAKEN
119f7f: 39 c2 cmp %eax,%edx
119f81: 73 0f jae 119f92 <rtems_rfs_block_map_shrink+0x241>
119f83: 8d 48 ff lea -0x1(%eax),%ecx
119f86: 39 ca cmp %ecx,%edx
119f88: 75 20 jne 119faa <rtems_rfs_block_map_shrink+0x259><== NEVER TAKEN
119f8a: 8b 53 0c mov 0xc(%ebx),%edx
119f8d: 39 53 14 cmp %edx,0x14(%ebx)
119f90: 76 18 jbe 119faa <rtems_rfs_block_map_shrink+0x259><== NEVER TAKEN
rtems_rfs_block_size_get_bpos (&map->size, &map->bpos);
119f92: 89 43 10 mov %eax,0x10(%ebx)
119f95: 8b 53 0c mov 0xc(%ebx),%edx
119f98: 89 53 14 mov %edx,0x14(%ebx)
119f9b: c7 43 18 00 00 00 00 movl $0x0,0x18(%ebx)
119fa2: 85 d2 test %edx,%edx
119fa4: 74 04 je 119faa <rtems_rfs_block_map_shrink+0x259><== ALWAYS TAKEN
119fa6: 48 dec %eax <== NOT EXECUTED
119fa7: 89 43 10 mov %eax,0x10(%ebx) <== NOT EXECUTED
return 0;
119faa: 31 c0 xor %eax,%eax
}
119fac: 8d 65 f4 lea -0xc(%ebp),%esp
119faf: 5b pop %ebx
119fb0: 5e pop %esi
119fb1: 5f pop %edi
119fb2: 5d pop %ebp
119fb3: c3 ret
0011ecb8 <rtems_rfs_buffer_bdbuf_release>:
int
rtems_rfs_buffer_bdbuf_release (rtems_rfs_buffer* buffer,
bool modified)
{
11ecb8: 55 push %ebp
11ecb9: 89 e5 mov %esp,%ebp
11ecbb: 53 push %ebx
11ecbc: 83 ec 1c sub $0x1c,%esp
11ecbf: 8b 5d 08 mov 0x8(%ebp),%ebx
11ecc2: 8a 45 0c mov 0xc(%ebp),%al
11ecc5: 88 45 f7 mov %al,-0x9(%ebp)
rtems_status_code sc;
int rc = 0;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_RELEASE))
11ecc8: 6a 00 push $0x0
11ecca: 6a 40 push $0x40
11eccc: e8 cb 4b ff ff call 11389c <rtems_rfs_trace>
11ecd1: 83 c4 10 add $0x10,%esp
11ecd4: 84 c0 test %al,%al
11ecd6: 74 24 je 11ecfc <rtems_rfs_buffer_bdbuf_release+0x44><== ALWAYS TAKEN
printf ("rtems-rfs: bdbuf-release: block=%" PRIuPTR " bdbuf=%" PRIu32 " %s\n",
11ecd8: b8 f5 f5 12 00 mov $0x12f5f5,%eax <== NOT EXECUTED
11ecdd: 80 7d f7 00 cmpb $0x0,-0x9(%ebp) <== NOT EXECUTED
11ece1: 74 05 je 11ece8 <rtems_rfs_buffer_bdbuf_release+0x30><== NOT EXECUTED
11ece3: b8 44 22 13 00 mov $0x132244,%eax <== NOT EXECUTED
11ece8: 50 push %eax <== NOT EXECUTED
11ece9: ff 73 18 pushl 0x18(%ebx) <== NOT EXECUTED
11ecec: ff 73 34 pushl 0x34(%ebx) <== NOT EXECUTED
11ecef: 68 4f 22 13 00 push $0x13224f <== NOT EXECUTED
11ecf4: e8 43 16 00 00 call 12033c <printf> <== NOT EXECUTED
11ecf9: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
((intptr_t) buffer->user),
buffer->block, modified ? "(modified)" : "");
if (modified)
11ecfc: 80 7d f7 00 cmpb $0x0,-0x9(%ebp)
11ed00: 74 0b je 11ed0d <rtems_rfs_buffer_bdbuf_release+0x55>
sc = rtems_bdbuf_release_modified (buffer);
11ed02: 83 ec 0c sub $0xc,%esp
11ed05: 53 push %ebx
11ed06: e8 11 68 ff ff call 11551c <rtems_bdbuf_release_modified>
11ed0b: eb 09 jmp 11ed16 <rtems_rfs_buffer_bdbuf_release+0x5e>
else
sc = rtems_bdbuf_release (buffer);
11ed0d: 83 ec 0c sub $0xc,%esp
11ed10: 53 push %ebx
11ed11: e8 75 67 ff ff call 11548b <rtems_bdbuf_release>
11ed16: 83 c4 10 add $0x10,%esp
int
rtems_rfs_buffer_bdbuf_release (rtems_rfs_buffer* buffer,
bool modified)
{
rtems_status_code sc;
int rc = 0;
11ed19: 83 f8 01 cmp $0x1,%eax
11ed1c: 19 c0 sbb %eax,%eax
11ed1e: f7 d0 not %eax
11ed20: 83 e0 05 and $0x5,%eax
#endif
rc = EIO;
}
return rc;
}
11ed23: 8b 5d fc mov -0x4(%ebp),%ebx
11ed26: c9 leave
11ed27: c3 ret
0011a7db <rtems_rfs_buffer_close>:
return 0;
}
int
rtems_rfs_buffer_close (rtems_rfs_file_system* fs)
{
11a7db: 55 push %ebp
11a7dc: 89 e5 mov %esp,%ebp
11a7de: 56 push %esi
11a7df: 53 push %ebx
11a7e0: 8b 75 08 mov 0x8(%ebp),%esi
int rc = 0;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CLOSE))
11a7e3: 52 push %edx
11a7e4: 52 push %edx
11a7e5: 6a 00 push $0x0
11a7e7: 6a 10 push $0x10
11a7e9: e8 ae 90 ff ff call 11389c <rtems_rfs_trace>
11a7ee: 83 c4 10 add $0x10,%esp
11a7f1: 84 c0 test %al,%al
11a7f3: 74 10 je 11a805 <rtems_rfs_buffer_close+0x2a><== ALWAYS TAKEN
printf ("rtems-rfs: buffer-close: closing\n");
11a7f5: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11a7f8: 68 da 11 13 00 push $0x1311da <== NOT EXECUTED
11a7fd: e8 52 5d 00 00 call 120554 <puts> <== NOT EXECUTED
11a802: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
/*
* Change the block size to the media device size. It will release and sync
* all buffers.
*/
rc = rtems_rfs_buffer_setblksize (fs, rtems_rfs_fs_media_block_size (fs));
11a805: 50 push %eax
11a806: 50 push %eax
11a807: 8b 46 10 mov 0x10(%esi),%eax
11a80a: ff 70 20 pushl 0x20(%eax)
11a80d: 56 push %esi
11a80e: e8 ef fe ff ff call 11a702 <rtems_rfs_buffer_setblksize>
11a813: 89 c3 mov %eax,%ebx
if ((rc > 0) && rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CLOSE))
11a815: 83 c4 10 add $0x10,%esp
11a818: 85 c0 test %eax,%eax
11a81a: 7e 2d jle 11a849 <rtems_rfs_buffer_close+0x6e><== ALWAYS TAKEN
11a81c: 50 push %eax <== NOT EXECUTED
11a81d: 50 push %eax <== NOT EXECUTED
11a81e: 6a 00 push $0x0 <== NOT EXECUTED
11a820: 6a 10 push $0x10 <== NOT EXECUTED
11a822: e8 75 90 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11a827: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11a82a: 84 c0 test %al,%al <== NOT EXECUTED
11a82c: 74 1b je 11a849 <rtems_rfs_buffer_close+0x6e><== NOT EXECUTED
printf ("rtems-rfs: buffer-close: set media block size failed: %d: %s\n",
11a82e: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11a831: 53 push %ebx <== NOT EXECUTED
11a832: e8 8d 68 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11a837: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11a83a: 50 push %eax <== NOT EXECUTED
11a83b: 53 push %ebx <== NOT EXECUTED
11a83c: 68 fb 11 13 00 push $0x1311fb <== NOT EXECUTED
11a841: e8 f6 5a 00 00 call 12033c <printf> <== NOT EXECUTED
11a846: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rc, strerror (rc));
if (close (fs->device) < 0)
11a849: 83 ec 0c sub $0xc,%esp
11a84c: ff 76 0c pushl 0xc(%esi)
11a84f: e8 64 f4 fe ff call 109cb8 <close>
11a854: 83 c4 10 add $0x10,%esp
11a857: 85 c0 test %eax,%eax
11a859: 79 34 jns 11a88f <rtems_rfs_buffer_close+0xb4><== ALWAYS TAKEN
{
rc = errno;
11a85b: e8 6c 49 00 00 call 11f1cc <__errno> <== NOT EXECUTED
11a860: 8b 18 mov (%eax),%ebx <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CLOSE))
11a862: 50 push %eax <== NOT EXECUTED
11a863: 50 push %eax <== NOT EXECUTED
11a864: 6a 00 push $0x0 <== NOT EXECUTED
11a866: 6a 10 push $0x10 <== NOT EXECUTED
11a868: e8 2f 90 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11a86d: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11a870: 84 c0 test %al,%al <== NOT EXECUTED
11a872: 74 1b je 11a88f <rtems_rfs_buffer_close+0xb4><== NOT EXECUTED
printf ("rtems-rfs: buffer-close: file close failed: %d: %s\n",
11a874: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11a877: 53 push %ebx <== NOT EXECUTED
11a878: e8 47 68 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11a87d: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11a880: 50 push %eax <== NOT EXECUTED
11a881: 53 push %ebx <== NOT EXECUTED
11a882: 68 39 12 13 00 push $0x131239 <== NOT EXECUTED
11a887: e8 b0 5a 00 00 call 12033c <printf> <== NOT EXECUTED
11a88c: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rc, strerror (rc));
}
return rc;
}
11a88f: 89 d8 mov %ebx,%eax
11a891: 8d 65 f8 lea -0x8(%ebp),%esp
11a894: 5b pop %ebx
11a895: 5e pop %esi
11a896: 5d pop %ebp
11a897: c3 ret
0011a131 <rtems_rfs_buffer_handle_release>:
}
int
rtems_rfs_buffer_handle_release (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
11a131: 55 push %ebp
11a132: 89 e5 mov %esp,%ebp
11a134: 56 push %esi
11a135: 53 push %ebx
11a136: 83 ec 10 sub $0x10,%esp
11a139: 8b 5d 08 mov 0x8(%ebp),%ebx
11a13c: 8b 75 0c mov 0xc(%ebp),%esi
int rc = 0;
if (rtems_rfs_buffer_handle_has_block (handle))
11a13f: 83 7e 08 00 cmpl $0x0,0x8(%esi)
11a143: 0f 84 58 01 00 00 je 11a2a1 <rtems_rfs_buffer_handle_release+0x170>
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_HANDLE_RELEASE))
11a149: 51 push %ecx
11a14a: 51 push %ecx
11a14b: 6a 00 push $0x0
11a14d: 68 00 02 00 00 push $0x200
11a152: e8 45 97 ff ff call 11389c <rtems_rfs_trace>
11a157: 83 c4 10 add $0x10,%esp
11a15a: 84 c0 test %al,%al
11a15c: 74 39 je 11a197 <rtems_rfs_buffer_handle_release+0x66><== ALWAYS TAKEN
printf ("rtems-rfs: buffer-release: block=%" PRIu32 " %s refs=%d %s\n",
rtems_rfs_buffer_bnum (handle),
rtems_rfs_buffer_dirty (handle) ? "(dirty)" : "",
rtems_rfs_buffer_refs (handle),
rtems_rfs_buffer_refs (handle) == 0 ? "BAD REF COUNT" : "");
11a15e: 8b 46 08 mov 0x8(%esi),%eax <== NOT EXECUTED
11a161: 8b 50 30 mov 0x30(%eax),%edx <== NOT EXECUTED
int rc = 0;
if (rtems_rfs_buffer_handle_has_block (handle))
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_HANDLE_RELEASE))
printf ("rtems-rfs: buffer-release: block=%" PRIu32 " %s refs=%d %s\n",
11a164: b9 f5 f5 12 00 mov $0x12f5f5,%ecx <== NOT EXECUTED
11a169: 85 d2 test %edx,%edx <== NOT EXECUTED
11a16b: 75 05 jne 11a172 <rtems_rfs_buffer_handle_release+0x41><== NOT EXECUTED
11a16d: b9 08 0e 13 00 mov $0x130e08,%ecx <== NOT EXECUTED
11a172: b8 f5 f5 12 00 mov $0x12f5f5,%eax <== NOT EXECUTED
11a177: 80 3e 00 cmpb $0x0,(%esi) <== NOT EXECUTED
11a17a: 74 05 je 11a181 <rtems_rfs_buffer_handle_release+0x50><== NOT EXECUTED
11a17c: b8 16 0e 13 00 mov $0x130e16,%eax <== NOT EXECUTED
11a181: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11a184: 51 push %ecx <== NOT EXECUTED
11a185: 52 push %edx <== NOT EXECUTED
11a186: 50 push %eax <== NOT EXECUTED
11a187: ff 76 04 pushl 0x4(%esi) <== NOT EXECUTED
11a18a: 68 1e 0e 13 00 push $0x130e1e <== NOT EXECUTED
11a18f: e8 a8 61 00 00 call 12033c <printf> <== NOT EXECUTED
11a194: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
rtems_rfs_buffer_bnum (handle),
rtems_rfs_buffer_dirty (handle) ? "(dirty)" : "",
rtems_rfs_buffer_refs (handle),
rtems_rfs_buffer_refs (handle) == 0 ? "BAD REF COUNT" : "");
if (rtems_rfs_buffer_refs (handle) > 0)
11a197: 8b 56 08 mov 0x8(%esi),%edx
11a19a: 8b 42 30 mov 0x30(%edx),%eax
11a19d: 85 c0 test %eax,%eax
11a19f: 7e 04 jle 11a1a5 <rtems_rfs_buffer_handle_release+0x74>
rtems_rfs_buffer_refs_down (handle);
11a1a1: 48 dec %eax
11a1a2: 89 42 30 mov %eax,0x30(%edx)
int
rtems_rfs_buffer_handle_release (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
int rc = 0;
11a1a5: 31 c0 xor %eax,%eax
rtems_rfs_buffer_refs (handle) == 0 ? "BAD REF COUNT" : "");
if (rtems_rfs_buffer_refs (handle) > 0)
rtems_rfs_buffer_refs_down (handle);
if (rtems_rfs_buffer_refs (handle) == 0)
11a1a7: 83 7a 30 00 cmpl $0x0,0x30(%edx)
11a1ab: 0f 85 e7 00 00 00 jne 11a298 <rtems_rfs_buffer_handle_release+0x167>
11a1b1: 83 ec 0c sub $0xc,%esp
11a1b4: 52 push %edx
11a1b5: e8 4a d6 ff ff call 117804 <_Chain_Extract>
{
rtems_chain_extract (rtems_rfs_buffer_link (handle));
fs->buffers_count--;
11a1ba: ff 4b 50 decl 0x50(%ebx)
if (rtems_rfs_fs_no_local_cache (fs))
11a1bd: 83 c4 10 add $0x10,%esp
11a1c0: 8b 03 mov (%ebx),%eax
11a1c2: 83 e0 02 and $0x2,%eax
11a1c5: 74 1e je 11a1e5 <rtems_rfs_buffer_handle_release+0xb4>
{
handle->buffer->user = (void*) 0;
11a1c7: 8b 46 08 mov 0x8(%esi),%eax
11a1ca: c7 40 34 00 00 00 00 movl $0x0,0x34(%eax)
rc = rtems_rfs_buffer_io_release (handle->buffer,
11a1d1: 52 push %edx
11a1d2: 52 push %edx
11a1d3: 0f b6 16 movzbl (%esi),%edx
11a1d6: 52 push %edx
11a1d7: 50 push %eax
11a1d8: e8 db 4a 00 00 call 11ecb8 <rtems_rfs_buffer_bdbuf_release>
11a1dd: 83 c4 10 add $0x10,%esp
11a1e0: e9 b3 00 00 00 jmp 11a298 <rtems_rfs_buffer_handle_release+0x167>
* head.
*
* This code stops a large series of transactions causing all the
* buffers in the cache being held in queues of this file system.
*/
if ((fs->release_count +
11a1e5: 8b 53 70 mov 0x70(%ebx),%edx
11a1e8: 03 53 60 add 0x60(%ebx),%edx
11a1eb: 3b 53 40 cmp 0x40(%ebx),%edx
11a1ee: 72 73 jb 11a263 <rtems_rfs_buffer_handle_release+0x132>
fs->release_modified_count) >= fs->max_held_buffers)
{
rtems_rfs_buffer* buffer;
bool modified;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_HANDLE_RELEASE))
11a1f0: 50 push %eax
11a1f1: 50 push %eax
11a1f2: 6a 00 push $0x0
11a1f4: 68 00 02 00 00 push $0x200
11a1f9: e8 9e 96 ff ff call 11389c <rtems_rfs_trace>
11a1fe: 83 c4 10 add $0x10,%esp
11a201: 84 c0 test %al,%al
11a203: 74 16 je 11a21b <rtems_rfs_buffer_handle_release+0xea><== ALWAYS TAKEN
printf ("rtems-rfs: buffer-release: local cache overflow:"
11a205: 50 push %eax <== NOT EXECUTED
11a206: 50 push %eax <== NOT EXECUTED
11a207: 8b 43 70 mov 0x70(%ebx),%eax <== NOT EXECUTED
11a20a: 03 43 60 add 0x60(%ebx),%eax <== NOT EXECUTED
11a20d: 50 push %eax <== NOT EXECUTED
11a20e: 68 52 0e 13 00 push $0x130e52 <== NOT EXECUTED
11a213: e8 24 61 00 00 call 12033c <printf> <== NOT EXECUTED
11a218: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
" %" PRIu32 "\n", fs->release_count + fs->release_modified_count);
if (fs->release_count > fs->release_modified_count)
11a21b: 8b 43 70 mov 0x70(%ebx),%eax
11a21e: 39 43 60 cmp %eax,0x60(%ebx)
11a221: 76 16 jbe 11a239 <rtems_rfs_buffer_handle_release+0x108>
*/
RTEMS_INLINE_ROUTINE rtems_chain_node *rtems_chain_get(
rtems_chain_control *the_chain
)
{
return _Chain_Get( the_chain );
11a223: 83 ec 0c sub $0xc,%esp
{
buffer = (rtems_rfs_buffer*) rtems_chain_get (&fs->release);
11a226: 8d 43 54 lea 0x54(%ebx),%eax
11a229: 50 push %eax
11a22a: e8 21 43 ff ff call 10e550 <_Chain_Get>
fs->release_count--;
11a22f: ff 4b 60 decl 0x60(%ebx)
11a232: 83 c4 10 add $0x10,%esp
modified = false;
11a235: 31 d2 xor %edx,%edx
11a237: eb 17 jmp 11a250 <rtems_rfs_buffer_handle_release+0x11f>
11a239: 83 ec 0c sub $0xc,%esp
}
else
{
buffer =
(rtems_rfs_buffer*) rtems_chain_get (&fs->release_modified);
11a23c: 8d 43 64 lea 0x64(%ebx),%eax
11a23f: 50 push %eax
11a240: e8 0b 43 ff ff call 10e550 <_Chain_Get>
fs->release_modified_count--;
11a245: ff 4b 70 decl 0x70(%ebx)
11a248: 83 c4 10 add $0x10,%esp
modified = true;
11a24b: ba 01 00 00 00 mov $0x1,%edx
}
buffer->user = (void*) 0;
11a250: c7 40 34 00 00 00 00 movl $0x0,0x34(%eax)
rc = rtems_rfs_buffer_io_release (buffer, modified);
11a257: 51 push %ecx
11a258: 51 push %ecx
11a259: 52 push %edx
11a25a: 50 push %eax
11a25b: e8 58 4a 00 00 call 11ecb8 <rtems_rfs_buffer_bdbuf_release>
11a260: 83 c4 10 add $0x10,%esp
}
if (rtems_rfs_buffer_dirty (handle))
11a263: 80 3e 00 cmpb $0x0,(%esi)
11a266: 74 16 je 11a27e <rtems_rfs_buffer_handle_release+0x14d>
RTEMS_INLINE_ROUTINE void rtems_chain_append(
rtems_chain_control *the_chain,
rtems_chain_node *the_node
)
{
_Chain_Append( the_chain, the_node );
11a268: 52 push %edx
11a269: 52 push %edx
11a26a: ff 76 08 pushl 0x8(%esi)
{
rtems_chain_append (&fs->release_modified,
11a26d: 8d 53 64 lea 0x64(%ebx),%edx
11a270: 52 push %edx
11a271: 89 45 f4 mov %eax,-0xc(%ebp)
11a274: e8 b3 42 ff ff call 10e52c <_Chain_Append>
rtems_rfs_buffer_link (handle));
fs->release_modified_count++;
11a279: ff 43 70 incl 0x70(%ebx)
11a27c: eb 14 jmp 11a292 <rtems_rfs_buffer_handle_release+0x161>
11a27e: 51 push %ecx
11a27f: 51 push %ecx
11a280: ff 76 08 pushl 0x8(%esi)
}
else
{
rtems_chain_append (&fs->release, rtems_rfs_buffer_link (handle));
11a283: 8d 53 54 lea 0x54(%ebx),%edx
11a286: 52 push %edx
11a287: 89 45 f4 mov %eax,-0xc(%ebp)
11a28a: e8 9d 42 ff ff call 10e52c <_Chain_Append>
fs->release_count++;
11a28f: ff 43 60 incl 0x60(%ebx)
11a292: 83 c4 10 add $0x10,%esp
11a295: 8b 45 f4 mov -0xc(%ebp),%eax
}
}
}
handle->buffer = NULL;
11a298: c7 46 08 00 00 00 00 movl $0x0,0x8(%esi)
11a29f: eb 02 jmp 11a2a3 <rtems_rfs_buffer_handle_release+0x172>
int
rtems_rfs_buffer_handle_release (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
int rc = 0;
11a2a1: 31 c0 xor %eax,%eax
}
handle->buffer = NULL;
}
return rc;
}
11a2a3: 8d 65 f8 lea -0x8(%ebp),%esp
11a2a6: 5b pop %ebx
11a2a7: 5e pop %esi
11a2a8: 5d pop %ebp
11a2a9: c3 ret
0011a2aa <rtems_rfs_buffer_handle_request>:
int
rtems_rfs_buffer_handle_request (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle,
rtems_rfs_buffer_block block,
bool read)
{
11a2aa: 55 push %ebp
11a2ab: 89 e5 mov %esp,%ebp
11a2ad: 57 push %edi
11a2ae: 56 push %esi
11a2af: 53 push %ebx
11a2b0: 83 ec 1c sub $0x1c,%esp
11a2b3: 8b 75 08 mov 0x8(%ebp),%esi
11a2b6: 8b 5d 0c mov 0xc(%ebp),%ebx
11a2b9: 8b 7d 10 mov 0x10(%ebp),%edi
11a2bc: 8a 45 14 mov 0x14(%ebp),%al
11a2bf: 88 45 e7 mov %al,-0x19(%ebp)
/*
* If the handle has a buffer release it. This allows a handle to be reused
* without needing to close then open it again.
*/
if (rtems_rfs_buffer_handle_has_block (handle))
11a2c2: 83 7b 08 00 cmpl $0x0,0x8(%ebx)
11a2c6: 74 55 je 11a31d <rtems_rfs_buffer_handle_request+0x73>
{
/*
* Treat block 0 as special to handle the loading of the super block.
*/
if (block && (rtems_rfs_buffer_bnum (handle) == block))
11a2c8: 85 ff test %edi,%edi
11a2ca: 74 0a je 11a2d6 <rtems_rfs_buffer_handle_request+0x2c><== NEVER TAKEN
11a2cc: 39 7b 04 cmp %edi,0x4(%ebx)
11a2cf: 75 05 jne 11a2d6 <rtems_rfs_buffer_handle_request+0x2c>
11a2d1: e9 e3 01 00 00 jmp 11a4b9 <rtems_rfs_buffer_handle_request+0x20f>
return 0;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_HANDLE_REQUEST))
11a2d6: 51 push %ecx
11a2d7: 51 push %ecx
11a2d8: 6a 00 push $0x0
11a2da: 68 00 01 00 00 push $0x100
11a2df: e8 b8 95 ff ff call 11389c <rtems_rfs_trace>
11a2e4: 83 c4 10 add $0x10,%esp
11a2e7: 84 c0 test %al,%al
11a2e9: 74 12 je 11a2fd <rtems_rfs_buffer_handle_request+0x53><== ALWAYS TAKEN
printf ("rtems-rfs: buffer-request: handle has buffer: %" PRIu32 "\n",
11a2eb: 52 push %edx <== NOT EXECUTED
11a2ec: 52 push %edx <== NOT EXECUTED
11a2ed: ff 73 04 pushl 0x4(%ebx) <== NOT EXECUTED
11a2f0: 68 8c 0e 13 00 push $0x130e8c <== NOT EXECUTED
11a2f5: e8 42 60 00 00 call 12033c <printf> <== NOT EXECUTED
11a2fa: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rtems_rfs_buffer_bnum (handle));
rc = rtems_rfs_buffer_handle_release (fs, handle);
11a2fd: 50 push %eax
11a2fe: 50 push %eax
11a2ff: 53 push %ebx
11a300: 56 push %esi
11a301: e8 2b fe ff ff call 11a131 <rtems_rfs_buffer_handle_release>
11a306: 89 c2 mov %eax,%edx
if (rc > 0)
11a308: 83 c4 10 add $0x10,%esp
11a30b: 85 c0 test %eax,%eax
11a30d: 0f 8f a8 01 00 00 jg 11a4bb <rtems_rfs_buffer_handle_request+0x211><== NEVER TAKEN
return rc;
handle->dirty = false;
11a313: c6 03 00 movb $0x0,(%ebx)
handle->bnum = 0;
11a316: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx)
}
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_HANDLE_REQUEST))
11a31d: 50 push %eax
11a31e: 50 push %eax
11a31f: 6a 00 push $0x0
11a321: 68 00 01 00 00 push $0x100
11a326: e8 71 95 ff ff call 11389c <rtems_rfs_trace>
11a32b: 83 c4 10 add $0x10,%esp
11a32e: 84 c0 test %al,%al
11a330: 74 10 je 11a342 <rtems_rfs_buffer_handle_request+0x98><== ALWAYS TAKEN
printf ("rtems-rfs: buffer-request: block=%" PRIu32 "\n", block);
11a332: 50 push %eax <== NOT EXECUTED
11a333: 50 push %eax <== NOT EXECUTED
11a334: 57 push %edi <== NOT EXECUTED
11a335: 68 bf 0e 13 00 push $0x130ebf <== NOT EXECUTED
11a33a: e8 fd 5f 00 00 call 12033c <printf> <== NOT EXECUTED
11a33f: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
* currently attached to a handle. If it is share the access. A buffer could
* be shared where different parts of the block have separate functions. An
* example is an inode block and the file system needs to handle 2 inodes in
* the same block at the same time.
*/
if (fs->buffers_count)
11a342: 83 7e 50 00 cmpl $0x0,0x50(%esi)
11a346: 74 40 je 11a388 <rtems_rfs_buffer_handle_request+0xde>
{
/*
* Check the active buffer list for shared buffers.
*/
handle->buffer = rtems_rfs_scan_chain (&fs->buffers,
11a348: 8d 56 50 lea 0x50(%esi),%edx
11a34b: 8d 46 44 lea 0x44(%esi),%eax
11a34e: 89 f9 mov %edi,%ecx
11a350: e8 f9 fc ff ff call 11a04e <rtems_rfs_scan_chain>
11a355: 89 43 08 mov %eax,0x8(%ebx)
&fs->buffers_count,
block);
if (rtems_rfs_buffer_handle_has_block (handle) &&
11a358: 85 c0 test %eax,%eax
11a35a: 74 2c je 11a388 <rtems_rfs_buffer_handle_request+0xde>
rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_HANDLE_REQUEST))
11a35c: 50 push %eax
11a35d: 50 push %eax
11a35e: 6a 00 push $0x0
11a360: 68 00 01 00 00 push $0x100
11a365: e8 32 95 ff ff call 11389c <rtems_rfs_trace>
* Check the active buffer list for shared buffers.
*/
handle->buffer = rtems_rfs_scan_chain (&fs->buffers,
&fs->buffers_count,
block);
if (rtems_rfs_buffer_handle_has_block (handle) &&
11a36a: 83 c4 10 add $0x10,%esp
11a36d: 84 c0 test %al,%al
11a36f: 74 17 je 11a388 <rtems_rfs_buffer_handle_request+0xde><== ALWAYS TAKEN
rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_HANDLE_REQUEST))
printf ("rtems-rfs: buffer-request: buffer shared: refs: %d\n",
11a371: 50 push %eax <== NOT EXECUTED
11a372: 50 push %eax <== NOT EXECUTED
rtems_rfs_buffer_refs (handle) + 1);
11a373: 8b 43 08 mov 0x8(%ebx),%eax <== NOT EXECUTED
handle->buffer = rtems_rfs_scan_chain (&fs->buffers,
&fs->buffers_count,
block);
if (rtems_rfs_buffer_handle_has_block (handle) &&
rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_HANDLE_REQUEST))
printf ("rtems-rfs: buffer-request: buffer shared: refs: %d\n",
11a376: 8b 40 30 mov 0x30(%eax),%eax <== NOT EXECUTED
11a379: 40 inc %eax <== NOT EXECUTED
11a37a: 50 push %eax <== NOT EXECUTED
11a37b: 68 e5 0e 13 00 push $0x130ee5 <== NOT EXECUTED
11a380: e8 b7 5f 00 00 call 12033c <printf> <== NOT EXECUTED
11a385: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
/*
* If the buffer has not been found check the local cache of released
* buffers. There are release and released modified lists to preserve the
* state.
*/
if (!rtems_rfs_fs_no_local_cache (fs) &&
11a388: f6 06 02 testb $0x2,(%esi)
11a38b: 75 3f jne 11a3cc <rtems_rfs_buffer_handle_request+0x122>
11a38d: 83 7b 08 00 cmpl $0x0,0x8(%ebx)
11a391: 75 39 jne 11a3cc <rtems_rfs_buffer_handle_request+0x122>
!rtems_rfs_buffer_handle_has_block (handle))
{
/*
* Check the local cache of released buffers.
*/
if (fs->release_count)
11a393: 83 7e 60 00 cmpl $0x0,0x60(%esi)
11a397: 74 10 je 11a3a9 <rtems_rfs_buffer_handle_request+0xff>
handle->buffer = rtems_rfs_scan_chain (&fs->release,
11a399: 8d 56 60 lea 0x60(%esi),%edx
11a39c: 8d 46 54 lea 0x54(%esi),%eax
11a39f: 89 f9 mov %edi,%ecx
11a3a1: e8 a8 fc ff ff call 11a04e <rtems_rfs_scan_chain>
11a3a6: 89 43 08 mov %eax,0x8(%ebx)
&fs->release_count,
block);
if (!rtems_rfs_buffer_handle_has_block (handle) &&
11a3a9: 83 7b 08 00 cmpl $0x0,0x8(%ebx)
11a3ad: 75 1d jne 11a3cc <rtems_rfs_buffer_handle_request+0x122>
11a3af: 83 7e 70 00 cmpl $0x0,0x70(%esi)
11a3b3: 74 17 je 11a3cc <rtems_rfs_buffer_handle_request+0x122>
fs->release_modified_count)
{
handle->buffer = rtems_rfs_scan_chain (&fs->release_modified,
11a3b5: 8d 56 70 lea 0x70(%esi),%edx
11a3b8: 8d 46 64 lea 0x64(%esi),%eax
11a3bb: 89 f9 mov %edi,%ecx
11a3bd: e8 8c fc ff ff call 11a04e <rtems_rfs_scan_chain>
11a3c2: 89 43 08 mov %eax,0x8(%ebx)
&fs->release_modified_count,
block);
/*
* If we found a buffer retain the dirty buffer state.
*/
if (rtems_rfs_buffer_handle_has_block (handle))
11a3c5: 85 c0 test %eax,%eax
11a3c7: 74 03 je 11a3cc <rtems_rfs_buffer_handle_request+0x122>
rtems_rfs_buffer_mark_dirty (handle);
11a3c9: c6 03 01 movb $0x1,(%ebx)
}
/*
* If not located we request the buffer from the I/O layer.
*/
if (!rtems_rfs_buffer_handle_has_block (handle))
11a3cc: 83 7b 08 00 cmpl $0x0,0x8(%ebx)
11a3d0: 0f 85 83 00 00 00 jne 11a459 <rtems_rfs_buffer_handle_request+0x1af>
{
rc = rtems_rfs_buffer_io_request (fs, block, read, &handle->buffer);
11a3d6: 8d 43 08 lea 0x8(%ebx),%eax
11a3d9: 50 push %eax
11a3da: 0f b6 45 e7 movzbl -0x19(%ebp),%eax
11a3de: 50 push %eax
11a3df: 57 push %edi
11a3e0: 56 push %esi
11a3e1: e8 92 48 00 00 call 11ec78 <rtems_rfs_buffer_bdbuf_request>
11a3e6: 89 c2 mov %eax,%edx
if (rc > 0)
11a3e8: 83 c4 10 add $0x10,%esp
11a3eb: 85 c0 test %eax,%eax
11a3ed: 7e 5a jle 11a449 <rtems_rfs_buffer_handle_request+0x19f><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_HANDLE_REQUEST))
11a3ef: 50 push %eax <== NOT EXECUTED
11a3f0: 50 push %eax <== NOT EXECUTED
11a3f1: 6a 00 push $0x0 <== NOT EXECUTED
11a3f3: 68 00 01 00 00 push $0x100 <== NOT EXECUTED
11a3f8: 89 55 e0 mov %edx,-0x20(%ebp) <== NOT EXECUTED
11a3fb: e8 9c 94 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11a400: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11a403: 84 c0 test %al,%al <== NOT EXECUTED
11a405: 8b 55 e0 mov -0x20(%ebp),%edx <== NOT EXECUTED
11a408: 0f 84 ad 00 00 00 je 11a4bb <rtems_rfs_buffer_handle_request+0x211><== NOT EXECUTED
printf ("rtems-rfs: buffer-request: block=%" PRIu32 ": bdbuf-%s: %d: %s\n",
11a40e: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11a411: 52 push %edx <== NOT EXECUTED
11a412: e8 ad 6c 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11a417: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11a41a: b9 88 0e 13 00 mov $0x130e88,%ecx <== NOT EXECUTED
11a41f: 80 7d e7 00 cmpb $0x0,-0x19(%ebp) <== NOT EXECUTED
11a423: 8b 55 e0 mov -0x20(%ebp),%edx <== NOT EXECUTED
11a426: 74 05 je 11a42d <rtems_rfs_buffer_handle_request+0x183><== NOT EXECUTED
11a428: b9 fb 07 13 00 mov $0x1307fb,%ecx <== NOT EXECUTED
11a42d: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11a430: 50 push %eax <== NOT EXECUTED
11a431: 52 push %edx <== NOT EXECUTED
11a432: 51 push %ecx <== NOT EXECUTED
11a433: 57 push %edi <== NOT EXECUTED
11a434: 68 19 0f 13 00 push $0x130f19 <== NOT EXECUTED
11a439: 89 55 e0 mov %edx,-0x20(%ebp) <== NOT EXECUTED
11a43c: e8 fb 5e 00 00 call 12033c <printf> <== NOT EXECUTED
11a441: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
11a444: 8b 55 e0 mov -0x20(%ebp),%edx <== NOT EXECUTED
11a447: eb 72 jmp 11a4bb <rtems_rfs_buffer_handle_request+0x211><== NOT EXECUTED
block, read ? "read" : "get", rc, strerror (rc));
return rc;
}
rtems_chain_set_off_chain (rtems_rfs_buffer_link(handle));
11a449: 8b 43 08 mov 0x8(%ebx),%eax
11a44c: c7 40 04 00 00 00 00 movl $0x0,0x4(%eax)
11a453: c7 00 00 00 00 00 movl $0x0,(%eax)
}
/*
* Increase the reference count of the buffer.
*/
rtems_rfs_buffer_refs_up (handle);
11a459: 8b 43 08 mov 0x8(%ebx),%eax
11a45c: ff 40 30 incl 0x30(%eax)
11a45f: 52 push %edx
11a460: 52 push %edx
11a461: 50 push %eax
rtems_chain_append (&fs->buffers, rtems_rfs_buffer_link (handle));
11a462: 8d 46 44 lea 0x44(%esi),%eax
11a465: 50 push %eax
11a466: e8 c1 40 ff ff call 10e52c <_Chain_Append>
fs->buffers_count++;
11a46b: ff 46 50 incl 0x50(%esi)
handle->buffer->user = (void*) ((intptr_t) block);
11a46e: 8b 43 08 mov 0x8(%ebx),%eax
11a471: 89 78 34 mov %edi,0x34(%eax)
handle->bnum = block;
11a474: 89 7b 04 mov %edi,0x4(%ebx)
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_HANDLE_REQUEST))
11a477: 59 pop %ecx
11a478: 5e pop %esi
11a479: 6a 00 push $0x0
11a47b: 68 00 01 00 00 push $0x100
11a480: e8 17 94 ff ff call 11389c <rtems_rfs_trace>
11a485: 83 c4 10 add $0x10,%esp
11a488: 84 c0 test %al,%al
11a48a: 74 2d je 11a4b9 <rtems_rfs_buffer_handle_request+0x20f><== ALWAYS TAKEN
printf ("rtems-rfs: buffer-request: block=%" PRIu32 " bdbuf-%s=%" PRIu32 " refs=%d\n",
block, read ? "read" : "get", handle->buffer->block,
handle->buffer->references);
11a48c: 8b 43 08 mov 0x8(%ebx),%eax <== NOT EXECUTED
handle->buffer->user = (void*) ((intptr_t) block);
handle->bnum = block;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_HANDLE_REQUEST))
printf ("rtems-rfs: buffer-request: block=%" PRIu32 " bdbuf-%s=%" PRIu32 " refs=%d\n",
11a48f: 8b 48 30 mov 0x30(%eax),%ecx <== NOT EXECUTED
11a492: 8b 50 18 mov 0x18(%eax),%edx <== NOT EXECUTED
11a495: b8 88 0e 13 00 mov $0x130e88,%eax <== NOT EXECUTED
11a49a: 80 7d e7 00 cmpb $0x0,-0x19(%ebp) <== NOT EXECUTED
11a49e: 74 05 je 11a4a5 <rtems_rfs_buffer_handle_request+0x1fb><== NOT EXECUTED
11a4a0: b8 fb 07 13 00 mov $0x1307fb,%eax <== NOT EXECUTED
11a4a5: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11a4a8: 51 push %ecx <== NOT EXECUTED
11a4a9: 52 push %edx <== NOT EXECUTED
11a4aa: 50 push %eax <== NOT EXECUTED
11a4ab: 57 push %edi <== NOT EXECUTED
11a4ac: 68 51 0f 13 00 push $0x130f51 <== NOT EXECUTED
11a4b1: e8 86 5e 00 00 call 12033c <printf> <== NOT EXECUTED
11a4b6: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
block, read ? "read" : "get", handle->buffer->block,
handle->buffer->references);
return 0;
11a4b9: 31 d2 xor %edx,%edx
}
11a4bb: 89 d0 mov %edx,%eax
11a4bd: 8d 65 f4 lea -0xc(%ebp),%esp
11a4c0: 5b pop %ebx
11a4c1: 5e pop %esi
11a4c2: 5f pop %edi
11a4c3: 5d pop %ebp
11a4c4: c3 ret
0011a4c5 <rtems_rfs_buffer_open>:
return rc;
}
int
rtems_rfs_buffer_open (const char* name, rtems_rfs_file_system* fs)
{
11a4c5: 55 push %ebp
11a4c6: 89 e5 mov %esp,%ebp
11a4c8: 56 push %esi
11a4c9: 53 push %ebx
11a4ca: 83 ec 58 sub $0x58,%esp
11a4cd: 8b 5d 08 mov 0x8(%ebp),%ebx
11a4d0: 8b 75 0c mov 0xc(%ebp),%esi
struct stat st;
#if RTEMS_RFS_USE_LIBBLOCK
int rv;
#endif
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_SYNC))
11a4d3: 6a 00 push $0x0
11a4d5: 6a 20 push $0x20
11a4d7: e8 c0 93 ff ff call 11389c <rtems_rfs_trace>
11a4dc: 83 c4 10 add $0x10,%esp
11a4df: 84 c0 test %al,%al
11a4e1: 74 10 je 11a4f3 <rtems_rfs_buffer_open+0x2e><== ALWAYS TAKEN
printf ("rtems-rfs: buffer-open: opening: %s\n", name);
11a4e3: 50 push %eax <== NOT EXECUTED
11a4e4: 50 push %eax <== NOT EXECUTED
11a4e5: 53 push %ebx <== NOT EXECUTED
11a4e6: 68 8c 0f 13 00 push $0x130f8c <== NOT EXECUTED
11a4eb: e8 4c 5e 00 00 call 12033c <printf> <== NOT EXECUTED
11a4f0: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
fs->device = open (name, O_RDWR);
11a4f3: 50 push %eax
11a4f4: 50 push %eax
11a4f5: 6a 02 push $0x2
11a4f7: 53 push %ebx
11a4f8: e8 eb 07 ff ff call 10ace8 <open>
11a4fd: 89 46 0c mov %eax,0xc(%esi)
if (fs->device < 0)
11a500: 83 c4 10 add $0x10,%esp
11a503: 85 c0 test %eax,%eax
11a505: 79 2e jns 11a535 <rtems_rfs_buffer_open+0x70><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_OPEN))
11a507: 51 push %ecx <== NOT EXECUTED
11a508: 51 push %ecx <== NOT EXECUTED
11a509: 6a 00 push $0x0 <== NOT EXECUTED
11a50b: 6a 08 push $0x8 <== NOT EXECUTED
11a50d: e8 8a 93 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11a512: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11a515: 84 c0 test %al,%al <== NOT EXECUTED
11a517: 75 02 jne 11a51b <rtems_rfs_buffer_open+0x56><== NOT EXECUTED
11a519: eb 10 jmp 11a52b <rtems_rfs_buffer_open+0x66><== NOT EXECUTED
printf ("rtems-rfs: buffer-open: cannot open file\n");
11a51b: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11a51e: 68 b1 0f 13 00 push $0x130fb1 <== NOT EXECUTED
11a523: e8 2c 60 00 00 call 120554 <puts> <== NOT EXECUTED
11a528: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
return ENXIO;
11a52b: bb 06 00 00 00 mov $0x6,%ebx <== NOT EXECUTED
11a530: e9 d7 00 00 00 jmp 11a60c <rtems_rfs_buffer_open+0x147><== NOT EXECUTED
}
if (fstat (fs->device, &st) < 0)
11a535: 52 push %edx
11a536: 52 push %edx
11a537: 8d 55 b0 lea -0x50(%ebp),%edx
11a53a: 52 push %edx
11a53b: 50 push %eax
11a53c: e8 1f fa fe ff call 109f60 <fstat>
11a541: 83 c4 10 add $0x10,%esp
11a544: 85 c0 test %eax,%eax
11a546: 79 2d jns 11a575 <rtems_rfs_buffer_open+0xb0><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_OPEN))
11a548: 50 push %eax <== NOT EXECUTED
11a549: 50 push %eax <== NOT EXECUTED
11a54a: 6a 00 push $0x0 <== NOT EXECUTED
11a54c: 6a 08 push $0x8 <== NOT EXECUTED
11a54e: e8 49 93 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11a553: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11a556: 84 c0 test %al,%al <== NOT EXECUTED
11a558: 74 d1 je 11a52b <rtems_rfs_buffer_open+0x66><== NOT EXECUTED
printf ("rtems-rfs: buffer-open: stat '%s' failed: %s\n",
name, strerror (errno));
11a55a: e8 6d 4c 00 00 call 11f1cc <__errno> <== NOT EXECUTED
}
if (fstat (fs->device, &st) < 0)
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_OPEN))
printf ("rtems-rfs: buffer-open: stat '%s' failed: %s\n",
11a55f: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11a562: ff 30 pushl (%eax) <== NOT EXECUTED
11a564: e8 5b 6b 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11a569: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11a56c: 50 push %eax <== NOT EXECUTED
11a56d: 53 push %ebx <== NOT EXECUTED
11a56e: 68 da 0f 13 00 push $0x130fda <== NOT EXECUTED
11a573: eb 29 jmp 11a59e <rtems_rfs_buffer_open+0xd9><== NOT EXECUTED
#if RTEMS_RFS_USE_LIBBLOCK
/*
* Is the device a block device ?
*/
if (!S_ISBLK (st.st_mode))
11a575: 8b 45 bc mov -0x44(%ebp),%eax
11a578: 25 00 f0 00 00 and $0xf000,%eax
11a57d: 3d 00 60 00 00 cmp $0x6000,%eax
11a582: 74 21 je 11a5a5 <rtems_rfs_buffer_open+0xe0><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_OPEN))
11a584: 50 push %eax <== NOT EXECUTED
11a585: 50 push %eax <== NOT EXECUTED
11a586: 6a 00 push $0x0 <== NOT EXECUTED
11a588: 6a 08 push $0x8 <== NOT EXECUTED
11a58a: e8 0d 93 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11a58f: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11a592: 84 c0 test %al,%al <== NOT EXECUTED
11a594: 74 95 je 11a52b <rtems_rfs_buffer_open+0x66><== NOT EXECUTED
printf ("rtems-rfs: buffer-open: '%s' is not a block device\n", name);
11a596: 50 push %eax <== NOT EXECUTED
11a597: 50 push %eax <== NOT EXECUTED
11a598: 53 push %ebx <== NOT EXECUTED
11a599: 68 08 10 13 00 push $0x131008 <== NOT EXECUTED
11a59e: e8 99 5d 00 00 call 12033c <printf> <== NOT EXECUTED
11a5a3: eb 83 jmp 11a528 <rtems_rfs_buffer_open+0x63><== NOT EXECUTED
static inline int rtems_disk_fd_get_disk_device(
int fd,
rtems_disk_device **dd_ptr
)
{
return ioctl(fd, RTEMS_BLKIO_GETDISKDEV, dd_ptr);
11a5a5: 50 push %eax
}
/*
* Check that device is registred as a block device and lock it.
*/
rv = rtems_disk_fd_get_disk_device (fs->device, &fs->disk);
11a5a6: 8d 46 10 lea 0x10(%esi),%eax
11a5a9: 50 push %eax
11a5aa: 68 09 42 04 40 push $0x40044209
11a5af: ff 76 0c pushl 0xc(%esi)
11a5b2: e8 b9 fa fe ff call 10a070 <ioctl>
if (rv != 0)
11a5b7: 83 c4 10 add $0x10,%esp
11a5ba: 85 c0 test %eax,%eax
11a5bc: 74 23 je 11a5e1 <rtems_rfs_buffer_open+0x11c><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_OPEN))
11a5be: 50 push %eax <== NOT EXECUTED
11a5bf: 50 push %eax <== NOT EXECUTED
11a5c0: 6a 00 push $0x0 <== NOT EXECUTED
11a5c2: 6a 08 push $0x8 <== NOT EXECUTED
11a5c4: e8 d3 92 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11a5c9: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11a5cc: 84 c0 test %al,%al <== NOT EXECUTED
11a5ce: 0f 84 57 ff ff ff je 11a52b <rtems_rfs_buffer_open+0x66><== NOT EXECUTED
printf ("rtems-rfs: buffer-open: cannot obtain the disk\n");
11a5d4: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11a5d7: 68 3c 10 13 00 push $0x13103c <== NOT EXECUTED
11a5dc: e9 42 ff ff ff jmp 11a523 <rtems_rfs_buffer_open+0x5e><== NOT EXECUTED
#else
fs->media_size = st.st_size;
strcat (fs->name, name);
#endif
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_SYNC))
11a5e1: 50 push %eax
11a5e2: 50 push %eax
11a5e3: 6a 00 push $0x0
11a5e5: 6a 20 push $0x20
11a5e7: e8 b0 92 ff ff call 11389c <rtems_rfs_trace>
11a5ec: 83 c4 10 add $0x10,%esp
printf ("rtems-rfs: buffer-open: blks=%" PRId32 ", blk-size=%" PRId32 "\n",
rtems_rfs_fs_media_blocks (fs),
rtems_rfs_fs_media_block_size (fs));
return 0;
11a5ef: 31 db xor %ebx,%ebx
#else
fs->media_size = st.st_size;
strcat (fs->name, name);
#endif
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_SYNC))
11a5f1: 84 c0 test %al,%al
11a5f3: 74 17 je 11a60c <rtems_rfs_buffer_open+0x147><== ALWAYS TAKEN
printf ("rtems-rfs: buffer-open: blks=%" PRId32 ", blk-size=%" PRId32 "\n",
rtems_rfs_fs_media_blocks (fs),
rtems_rfs_fs_media_block_size (fs));
11a5f5: 8b 46 10 mov 0x10(%esi),%eax <== NOT EXECUTED
fs->media_size = st.st_size;
strcat (fs->name, name);
#endif
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_SYNC))
printf ("rtems-rfs: buffer-open: blks=%" PRId32 ", blk-size=%" PRId32 "\n",
11a5f8: 56 push %esi <== NOT EXECUTED
11a5f9: ff 70 20 pushl 0x20(%eax) <== NOT EXECUTED
11a5fc: ff 70 1c pushl 0x1c(%eax) <== NOT EXECUTED
11a5ff: 68 6b 10 13 00 push $0x13106b <== NOT EXECUTED
11a604: e8 33 5d 00 00 call 12033c <printf> <== NOT EXECUTED
11a609: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rtems_rfs_fs_media_blocks (fs),
rtems_rfs_fs_media_block_size (fs));
return 0;
}
11a60c: 89 d8 mov %ebx,%eax
11a60e: 8d 65 f8 lea -0x8(%ebp),%esp
11a611: 5b pop %ebx
11a612: 5e pop %esi
11a613: 5d pop %ebp
11a614: c3 ret
0011a702 <rtems_rfs_buffer_setblksize>:
return result;
}
int
rtems_rfs_buffer_setblksize (rtems_rfs_file_system* fs, size_t size)
{
11a702: 55 push %ebp
11a703: 89 e5 mov %esp,%ebp
11a705: 56 push %esi
11a706: 53 push %ebx
11a707: 8b 5d 08 mov 0x8(%ebp),%ebx
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_SETBLKSIZE))
11a70a: 50 push %eax
11a70b: 50 push %eax
11a70c: 6a 00 push $0x0
11a70e: 68 00 04 00 00 push $0x400
11a713: e8 84 91 ff ff call 11389c <rtems_rfs_trace>
11a718: 83 c4 10 add $0x10,%esp
11a71b: 84 c0 test %al,%al
11a71d: 74 12 je 11a731 <rtems_rfs_buffer_setblksize+0x2f><== ALWAYS TAKEN
printf ("rtems-rfs: buffer-setblksize: block size: %zu\n", size);
11a71f: 50 push %eax <== NOT EXECUTED
11a720: 50 push %eax <== NOT EXECUTED
11a721: ff 75 0c pushl 0xc(%ebp) <== NOT EXECUTED
11a724: 68 34 11 13 00 push $0x131134 <== NOT EXECUTED
11a729: e8 0e 5c 00 00 call 12033c <printf> <== NOT EXECUTED
11a72e: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rc = rtems_rfs_buffers_release (fs);
11a731: 83 ec 0c sub $0xc,%esp
11a734: 53 push %ebx
11a735: e8 5f ff ff ff call 11a699 <rtems_rfs_buffers_release>
11a73a: 89 c6 mov %eax,%esi
if ((rc > 0) && rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_SETBLKSIZE))
11a73c: 83 c4 10 add $0x10,%esp
11a73f: 85 c0 test %eax,%eax
11a741: 7e 30 jle 11a773 <rtems_rfs_buffer_setblksize+0x71><== ALWAYS TAKEN
11a743: 50 push %eax <== NOT EXECUTED
11a744: 50 push %eax <== NOT EXECUTED
11a745: 6a 00 push $0x0 <== NOT EXECUTED
11a747: 68 00 04 00 00 push $0x400 <== NOT EXECUTED
11a74c: e8 4b 91 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11a751: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11a754: 84 c0 test %al,%al <== NOT EXECUTED
11a756: 74 1b je 11a773 <rtems_rfs_buffer_setblksize+0x71><== NOT EXECUTED
printf ("rtems-rfs: buffer-setblksize: buffer release failed: %d: %s\n",
11a758: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11a75b: 56 push %esi <== NOT EXECUTED
11a75c: e8 63 69 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11a761: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11a764: 50 push %eax <== NOT EXECUTED
11a765: 56 push %esi <== NOT EXECUTED
11a766: 68 63 11 13 00 push $0x131163 <== NOT EXECUTED
11a76b: e8 cc 5b 00 00 call 12033c <printf> <== NOT EXECUTED
11a770: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rc, strerror (rc));
rc = rtems_rfs_buffer_sync (fs);
11a773: 83 ec 0c sub $0xc,%esp
11a776: 53 push %ebx
11a777: e8 99 fe ff ff call 11a615 <rtems_rfs_buffer_sync>
11a77c: 89 c6 mov %eax,%esi
if ((rc > 0) && rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_SETBLKSIZE))
11a77e: 83 c4 10 add $0x10,%esp
11a781: 85 c0 test %eax,%eax
11a783: 7e 30 jle 11a7b5 <rtems_rfs_buffer_setblksize+0xb3><== ALWAYS TAKEN
11a785: 51 push %ecx <== NOT EXECUTED
11a786: 51 push %ecx <== NOT EXECUTED
11a787: 6a 00 push $0x0 <== NOT EXECUTED
11a789: 68 00 04 00 00 push $0x400 <== NOT EXECUTED
11a78e: e8 09 91 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11a793: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11a796: 84 c0 test %al,%al <== NOT EXECUTED
11a798: 74 1b je 11a7b5 <rtems_rfs_buffer_setblksize+0xb3><== NOT EXECUTED
printf ("rtems-rfs: buffer-setblksize: device sync failed: %d: %s\n",
11a79a: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11a79d: 56 push %esi <== NOT EXECUTED
11a79e: e8 21 69 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11a7a3: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11a7a6: 50 push %eax <== NOT EXECUTED
11a7a7: 56 push %esi <== NOT EXECUTED
11a7a8: 68 a0 11 13 00 push $0x1311a0 <== NOT EXECUTED
11a7ad: e8 8a 5b 00 00 call 12033c <printf> <== NOT EXECUTED
11a7b2: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rc, strerror (rc));
#if RTEMS_RFS_USE_LIBBLOCK
rc = fs->disk->ioctl (fs->disk, RTEMS_BLKIO_SETBLKSIZE, &size);
11a7b5: 8b 43 10 mov 0x10(%ebx),%eax
11a7b8: 52 push %edx
11a7b9: 8d 55 0c lea 0xc(%ebp),%edx
11a7bc: 52 push %edx
11a7bd: 68 04 42 04 80 push $0x80044204
11a7c2: 50 push %eax
11a7c3: ff 50 38 call *0x38(%eax)
if (rc < 0)
11a7c6: 83 c4 10 add $0x10,%esp
11a7c9: 85 c0 test %eax,%eax
11a7cb: 79 07 jns 11a7d4 <rtems_rfs_buffer_setblksize+0xd2><== ALWAYS TAKEN
rc = errno;
11a7cd: e8 fa 49 00 00 call 11f1cc <__errno> <== NOT EXECUTED
11a7d2: 8b 00 mov (%eax),%eax <== NOT EXECUTED
#endif
return rc;
}
11a7d4: 8d 65 f8 lea -0x8(%ebp),%esp
11a7d7: 5b pop %ebx
11a7d8: 5e pop %esi
11a7d9: 5d pop %ebp
11a7da: c3 ret
0011a615 <rtems_rfs_buffer_sync>:
return rc;
}
int
rtems_rfs_buffer_sync (rtems_rfs_file_system* fs)
{
11a615: 55 push %ebp
11a616: 89 e5 mov %esp,%ebp
11a618: 57 push %edi
11a619: 56 push %esi
11a61a: 53 push %ebx
11a61b: 83 ec 14 sub $0x14,%esp
11a61e: 8b 75 08 mov 0x8(%ebp),%esi
int result = 0;
#if RTEMS_RFS_USE_LIBBLOCK
rtems_status_code sc;
#endif
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_SYNC))
11a621: 6a 00 push $0x0
11a623: 6a 20 push $0x20
11a625: e8 72 92 ff ff call 11389c <rtems_rfs_trace>
11a62a: 83 c4 10 add $0x10,%esp
11a62d: 84 c0 test %al,%al
11a62f: 74 10 je 11a641 <rtems_rfs_buffer_sync+0x2c><== ALWAYS TAKEN
printf ("rtems-rfs: buffer-sync: syncing\n");
11a631: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11a634: 68 9b 10 13 00 push $0x13109b <== NOT EXECUTED
11a639: e8 16 5f 00 00 call 120554 <puts> <== NOT EXECUTED
11a63e: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
/*
* @todo Split in the separate files for each type.
*/
#if RTEMS_RFS_USE_LIBBLOCK
sc = rtems_bdbuf_syncdev (rtems_rfs_fs_device (fs));
11a641: 83 ec 0c sub $0xc,%esp
11a644: ff 76 10 pushl 0x10(%esi)
11a647: e8 03 b0 ff ff call 11564f <rtems_bdbuf_syncdev>
11a64c: 89 c7 mov %eax,%edi
if (sc != RTEMS_SUCCESSFUL)
11a64e: 83 c4 10 add $0x10,%esp
}
int
rtems_rfs_buffer_sync (rtems_rfs_file_system* fs)
{
int result = 0;
11a651: 31 db xor %ebx,%ebx
/*
* @todo Split in the separate files for each type.
*/
#if RTEMS_RFS_USE_LIBBLOCK
sc = rtems_bdbuf_syncdev (rtems_rfs_fs_device (fs));
if (sc != RTEMS_SUCCESSFUL)
11a653: 85 c0 test %eax,%eax
11a655: 74 2d je 11a684 <rtems_rfs_buffer_sync+0x6f><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_SYNC))
11a657: 50 push %eax <== NOT EXECUTED
11a658: 50 push %eax <== NOT EXECUTED
11a659: 6a 00 push $0x0 <== NOT EXECUTED
11a65b: 6a 20 push $0x20 <== NOT EXECUTED
11a65d: e8 3a 92 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11a662: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
printf ("rtems-rfs: buffer-sync: device sync failed: %s\n",
rtems_status_text (sc));
result = EIO;
11a665: b3 05 mov $0x5,%bl <== NOT EXECUTED
*/
#if RTEMS_RFS_USE_LIBBLOCK
sc = rtems_bdbuf_syncdev (rtems_rfs_fs_device (fs));
if (sc != RTEMS_SUCCESSFUL)
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_SYNC))
11a667: 84 c0 test %al,%al <== NOT EXECUTED
11a669: 74 19 je 11a684 <rtems_rfs_buffer_sync+0x6f><== NOT EXECUTED
printf ("rtems-rfs: buffer-sync: device sync failed: %s\n",
11a66b: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11a66e: 57 push %edi <== NOT EXECUTED
11a66f: e8 a8 f6 fe ff call 109d1c <rtems_status_text> <== NOT EXECUTED
11a674: 5a pop %edx <== NOT EXECUTED
11a675: 59 pop %ecx <== NOT EXECUTED
11a676: 50 push %eax <== NOT EXECUTED
11a677: 68 bb 10 13 00 push $0x1310bb <== NOT EXECUTED
11a67c: e8 bb 5c 00 00 call 12033c <printf> <== NOT EXECUTED
11a681: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rtems_status_text (sc));
result = EIO;
}
rtems_disk_release (fs->disk);
11a684: 83 ec 0c sub $0xc,%esp
11a687: ff 76 10 pushl 0x10(%esi)
11a68a: e8 1e cd fe ff call 1073ad <rtems_disk_release>
printf ("rtems-rfs: buffer-sync: file sync failed: %d: %s\n",
result, strerror (result));
}
#endif
return result;
}
11a68f: 89 d8 mov %ebx,%eax
11a691: 8d 65 f4 lea -0xc(%ebp),%esp
11a694: 5b pop %ebx
11a695: 5e pop %esi
11a696: 5f pop %edi
11a697: 5d pop %ebp
11a698: c3 ret
0011a699 <rtems_rfs_buffers_release>:
return rrc;
}
int
rtems_rfs_buffers_release (rtems_rfs_file_system* fs)
{
11a699: 55 push %ebp
11a69a: 89 e5 mov %esp,%ebp
11a69c: 56 push %esi
11a69d: 53 push %ebx
11a69e: 8b 5d 08 mov 0x8(%ebp),%ebx
int rrc = 0;
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_RELEASE))
11a6a1: 50 push %eax
11a6a2: 50 push %eax
11a6a3: 6a 00 push $0x0
11a6a5: 6a 40 push $0x40
11a6a7: e8 f0 91 ff ff call 11389c <rtems_rfs_trace>
11a6ac: 83 c4 10 add $0x10,%esp
11a6af: 84 c0 test %al,%al
11a6b1: 74 16 je 11a6c9 <rtems_rfs_buffers_release+0x30><== ALWAYS TAKEN
printf ("rtems-rfs: buffers-release: active:%" PRIu32 " "
11a6b3: ff 73 70 pushl 0x70(%ebx) <== NOT EXECUTED
11a6b6: ff 73 60 pushl 0x60(%ebx) <== NOT EXECUTED
11a6b9: ff 73 50 pushl 0x50(%ebx) <== NOT EXECUTED
11a6bc: 68 eb 10 13 00 push $0x1310eb <== NOT EXECUTED
11a6c1: e8 76 5c 00 00 call 12033c <printf> <== NOT EXECUTED
11a6c6: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
"release:%" PRIu32 " release-modified:%" PRIu32 "\n",
fs->buffers_count, fs->release_count, fs->release_modified_count);
rc = rtems_rfs_release_chain (&fs->release,
11a6c9: 8d 53 60 lea 0x60(%ebx),%edx
11a6cc: 8d 43 54 lea 0x54(%ebx),%eax
11a6cf: 31 c9 xor %ecx,%ecx
11a6d1: e8 f6 f8 ff ff call 119fcc <rtems_rfs_release_chain>
11a6d6: 89 c6 mov %eax,%esi
11a6d8: f7 d0 not %eax
11a6da: c1 f8 1f sar $0x1f,%eax
11a6dd: 21 c6 and %eax,%esi
&fs->release_count,
false);
if ((rc > 0) && (rrc == 0))
rrc = rc;
rc = rtems_rfs_release_chain (&fs->release_modified,
11a6df: 8d 53 70 lea 0x70(%ebx),%edx
11a6e2: 8d 43 64 lea 0x64(%ebx),%eax
11a6e5: b9 01 00 00 00 mov $0x1,%ecx
11a6ea: e8 dd f8 ff ff call 119fcc <rtems_rfs_release_chain>
&fs->release_modified_count,
true);
if ((rc > 0) && (rrc == 0))
11a6ef: 85 f6 test %esi,%esi
11a6f1: 75 06 jne 11a6f9 <rtems_rfs_buffers_release+0x60><== NEVER TAKEN
11a6f3: 85 c0 test %eax,%eax
11a6f5: 7e 02 jle 11a6f9 <rtems_rfs_buffers_release+0x60><== ALWAYS TAKEN
11a6f7: 89 c6 mov %eax,%esi <== NOT EXECUTED
rrc = rc;
return rrc;
}
11a6f9: 89 f0 mov %esi,%eax
11a6fb: 8d 65 f8 lea -0x8(%ebp),%esp
11a6fe: 5b pop %ebx
11a6ff: 5e pop %esi
11a700: 5d pop %ebp
11a701: c3 ret
0011ad36 <rtems_rfs_dir_add_entry>:
rtems_rfs_dir_add_entry (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* dir,
const char* name,
size_t length,
rtems_rfs_ino ino)
{
11ad36: 55 push %ebp
11ad37: 89 e5 mov %esp,%ebp
11ad39: 57 push %edi
11ad3a: 56 push %esi
11ad3b: 53 push %ebx
11ad3c: 81 ec 94 00 00 00 sub $0x94,%esp
11ad42: 8b 5d 08 mov 0x8(%ebp),%ebx
rtems_rfs_block_map map;
rtems_rfs_block_pos bpos;
rtems_rfs_buffer_handle buffer;
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_ADD_ENTRY))
11ad45: 6a 00 push $0x0
11ad47: 68 00 00 00 20 push $0x20000000
11ad4c: e8 4b 8b ff ff call 11389c <rtems_rfs_trace>
11ad51: 83 c4 10 add $0x10,%esp
11ad54: 84 c0 test %al,%al
11ad56: 74 42 je 11ad9a <rtems_rfs_dir_add_entry+0x64><== ALWAYS TAKEN
{
int c;
printf ("rtems-rfs: dir-add-entry: dir=%" PRId32 ", name=",
11ad58: 50 push %eax <== NOT EXECUTED
11ad59: 50 push %eax <== NOT EXECUTED
11ad5a: 8b 45 0c mov 0xc(%ebp),%eax <== NOT EXECUTED
11ad5d: ff 70 08 pushl 0x8(%eax) <== NOT EXECUTED
11ad60: 68 15 15 13 00 push $0x131515 <== NOT EXECUTED
11ad65: e8 d2 55 00 00 call 12033c <printf> <== NOT EXECUTED
11ad6a: 8b 7d 10 mov 0x10(%ebp),%edi <== NOT EXECUTED
rtems_rfs_block_map_close (fs, &map);
return rc;
}
int
rtems_rfs_dir_add_entry (rtems_rfs_file_system* fs,
11ad6d: 8b 75 14 mov 0x14(%ebp),%esi <== NOT EXECUTED
11ad70: 01 fe add %edi,%esi <== NOT EXECUTED
11ad72: eb 0d jmp 11ad81 <rtems_rfs_dir_add_entry+0x4b><== NOT EXECUTED
{
int c;
printf ("rtems-rfs: dir-add-entry: dir=%" PRId32 ", name=",
rtems_rfs_inode_ino (dir));
for (c = 0; c < length; c++)
printf ("%c", name[c]);
11ad74: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11ad77: 0f be 07 movsbl (%edi),%eax <== NOT EXECUTED
11ad7a: 50 push %eax <== NOT EXECUTED
11ad7b: e8 28 57 00 00 call 1204a8 <putchar> <== NOT EXECUTED
11ad80: 47 inc %edi <== NOT EXECUTED
11ad81: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_ADD_ENTRY))
{
int c;
printf ("rtems-rfs: dir-add-entry: dir=%" PRId32 ", name=",
rtems_rfs_inode_ino (dir));
for (c = 0; c < length; c++)
11ad84: 39 f7 cmp %esi,%edi <== NOT EXECUTED
11ad86: 75 ec jne 11ad74 <rtems_rfs_dir_add_entry+0x3e><== NOT EXECUTED
printf ("%c", name[c]);
printf (", len=%zd\n", length);
11ad88: 50 push %eax <== NOT EXECUTED
11ad89: 50 push %eax <== NOT EXECUTED
11ad8a: ff 75 14 pushl 0x14(%ebp) <== NOT EXECUTED
11ad8d: 68 3e 15 13 00 push $0x13153e <== NOT EXECUTED
11ad92: e8 a5 55 00 00 call 12033c <printf> <== NOT EXECUTED
11ad97: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
rc = rtems_rfs_block_map_open (fs, dir, &map);
11ad9a: 50 push %eax
11ad9b: 8d 45 98 lea -0x68(%ebp),%eax
11ad9e: 50 push %eax
11ad9f: ff 75 0c pushl 0xc(%ebp)
11ada2: 53 push %ebx
11ada3: e8 fa e7 ff ff call 1195a2 <rtems_rfs_block_map_open>
11ada8: 89 c6 mov %eax,%esi
if (rc > 0)
11adaa: 83 c4 10 add $0x10,%esp
11adad: 85 c0 test %eax,%eax
11adaf: 0f 8f eb 02 00 00 jg 11b0a0 <rtems_rfs_dir_add_entry+0x36a><== NEVER TAKEN
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
11adb5: c6 45 8c 00 movb $0x0,-0x74(%ebp)
handle->bnum = 0;
11adb9: c7 45 90 00 00 00 00 movl $0x0,-0x70(%ebp)
handle->buffer = NULL;
11adc0: c7 45 94 00 00 00 00 movl $0x0,-0x6c(%ebp)
* @param bpos A pointer to the block position.
*/
static inline void
rtems_rfs_block_set_bpos_zero (rtems_rfs_block_pos* bpos)
{
bpos->bno = 0;
11adc7: c7 45 80 00 00 00 00 movl $0x0,-0x80(%ebp)
bpos->boff = 0;
11adce: c7 45 84 00 00 00 00 movl $0x0,-0x7c(%ebp)
bpos->block = 0;
11add5: c7 45 88 00 00 00 00 movl $0x0,-0x78(%ebp)
/*
* Locate the first block. If an error the block will be 0. If the map is
* empty which happens when creating a directory and adding the first entry
* the seek will return ENXIO. In this case we need to grow the directory.
*/
rc = rtems_rfs_block_map_find (fs, &map, &bpos, &block);
11addc: 8d 85 7c ff ff ff lea -0x84(%ebp),%eax
11ade2: 50 push %eax
11ade3: 8d 45 80 lea -0x80(%ebp),%eax
11ade6: 50 push %eax
11ade7: 8d 7d 98 lea -0x68(%ebp),%edi
11adea: 57 push %edi
11adeb: 53 push %ebx
11adec: e8 08 eb ff ff call 1198f9 <rtems_rfs_block_map_find>
11adf1: 89 c6 mov %eax,%esi
if (rc > 0)
11adf3: 83 c4 10 add $0x10,%esp
11adf6: 85 c0 test %eax,%eax
11adf8: 0f 8e 8b 00 00 00 jle 11ae89 <rtems_rfs_dir_add_entry+0x153>
{
if (rc != ENXIO)
11adfe: 83 f8 06 cmp $0x6,%eax
11ae01: 74 31 je 11ae34 <rtems_rfs_dir_add_entry+0xfe><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_ADD_ENTRY))
11ae03: 50 push %eax <== NOT EXECUTED
11ae04: 50 push %eax <== NOT EXECUTED
11ae05: 6a 00 push $0x0 <== NOT EXECUTED
11ae07: 68 00 00 00 20 push $0x20000000 <== NOT EXECUTED
11ae0c: e8 8b 8a ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11ae11: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11ae14: 84 c0 test %al,%al <== NOT EXECUTED
11ae16: 0f 84 6b 02 00 00 je 11b087 <rtems_rfs_dir_add_entry+0x351><== NOT EXECUTED
printf ("rtems-rfs: dir-add-entry: "
11ae1c: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11ae1f: 56 push %esi <== NOT EXECUTED
11ae20: e8 9f 62 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11ae25: 50 push %eax <== NOT EXECUTED
11ae26: 56 push %esi <== NOT EXECUTED
11ae27: 8b 45 0c mov 0xc(%ebp),%eax <== NOT EXECUTED
11ae2a: ff 70 08 pushl 0x8(%eax) <== NOT EXECUTED
11ae2d: 68 49 15 13 00 push $0x131549 <== NOT EXECUTED
11ae32: eb 48 jmp 11ae7c <rtems_rfs_dir_add_entry+0x146><== NOT EXECUTED
}
/*
* We have reached the end of the directory so add a block.
*/
rc = rtems_rfs_block_map_grow (fs, &map, 1, &block);
11ae34: 8d 85 7c ff ff ff lea -0x84(%ebp),%eax
11ae3a: 50 push %eax
11ae3b: 6a 01 push $0x1
11ae3d: 57 push %edi
11ae3e: 53 push %ebx
11ae3f: e8 5a ec ff ff call 119a9e <rtems_rfs_block_map_grow>
11ae44: 89 c6 mov %eax,%esi
if (rc > 0)
11ae46: 83 c4 10 add $0x10,%esp
11ae49: 85 c0 test %eax,%eax
11ae4b: 7e 40 jle 11ae8d <rtems_rfs_dir_add_entry+0x157><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_ADD_ENTRY))
11ae4d: 50 push %eax <== NOT EXECUTED
11ae4e: 50 push %eax <== NOT EXECUTED
11ae4f: 6a 00 push $0x0 <== NOT EXECUTED
11ae51: 68 00 00 00 20 push $0x20000000 <== NOT EXECUTED
11ae56: e8 41 8a ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11ae5b: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11ae5e: 84 c0 test %al,%al <== NOT EXECUTED
11ae60: 0f 84 21 02 00 00 je 11b087 <rtems_rfs_dir_add_entry+0x351><== NOT EXECUTED
printf ("rtems-rfs: dir-add-entry: "
11ae66: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11ae69: 56 push %esi <== NOT EXECUTED
11ae6a: e8 55 62 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11ae6f: 50 push %eax <== NOT EXECUTED
11ae70: 56 push %esi <== NOT EXECUTED
11ae71: 8b 45 0c mov 0xc(%ebp),%eax <== NOT EXECUTED
11ae74: ff 70 08 pushl 0x8(%eax) <== NOT EXECUTED
11ae77: 68 8e 15 13 00 push $0x13158e <== NOT EXECUTED
11ae7c: e8 bb 54 00 00 call 12033c <printf> <== NOT EXECUTED
11ae81: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
11ae84: e9 fe 01 00 00 jmp 11b087 <rtems_rfs_dir_add_entry+0x351><== NOT EXECUTED
while (true)
{
rtems_rfs_block_no block;
uint8_t* entry;
int offset;
bool read = true;
11ae89: b2 01 mov $0x1,%dl
11ae8b: eb 02 jmp 11ae8f <rtems_rfs_dir_add_entry+0x159>
"block map grow failed for ino %" PRIu32 ": %d: %s\n",
rtems_rfs_inode_ino (dir), rc, strerror (rc));
break;
}
read = false;
11ae8d: 31 d2 xor %edx,%edx
}
bpos.bno++;
11ae8f: ff 45 80 incl -0x80(%ebp)
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, read);
11ae92: 0f b6 c2 movzbl %dl,%eax
11ae95: 50 push %eax
11ae96: ff b5 7c ff ff ff pushl -0x84(%ebp)
11ae9c: 8d 45 8c lea -0x74(%ebp),%eax
11ae9f: 50 push %eax
11aea0: 53 push %ebx
11aea1: 88 95 6c ff ff ff mov %dl,-0x94(%ebp)
11aea7: e8 fe f3 ff ff call 11a2aa <rtems_rfs_buffer_handle_request>
11aeac: 89 c6 mov %eax,%esi
if (rc > 0)
11aeae: 83 c4 10 add $0x10,%esp
11aeb1: 85 c0 test %eax,%eax
11aeb3: 8a 95 6c ff ff ff mov -0x94(%ebp),%dl
11aeb9: 7e 31 jle 11aeec <rtems_rfs_dir_add_entry+0x1b6><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_ADD_ENTRY))
11aebb: 57 push %edi <== NOT EXECUTED
11aebc: 57 push %edi <== NOT EXECUTED
11aebd: 6a 00 push $0x0 <== NOT EXECUTED
11aebf: 68 00 00 00 20 push $0x20000000 <== NOT EXECUTED
11aec4: e8 d3 89 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11aec9: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11aecc: 84 c0 test %al,%al <== NOT EXECUTED
11aece: 0f 84 b3 01 00 00 je 11b087 <rtems_rfs_dir_add_entry+0x351><== NOT EXECUTED
printf ("rtems-rfs: dir-add-entry: "
11aed4: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11aed7: 56 push %esi <== NOT EXECUTED
11aed8: e8 e7 61 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11aedd: 50 push %eax <== NOT EXECUTED
11aede: 56 push %esi <== NOT EXECUTED
11aedf: 8b 45 0c mov 0xc(%ebp),%eax <== NOT EXECUTED
11aee2: ff 70 08 pushl 0x8(%eax) <== NOT EXECUTED
11aee5: 68 d3 15 13 00 push $0x1315d3 <== NOT EXECUTED
11aeea: eb 90 jmp 11ae7c <rtems_rfs_dir_add_entry+0x146><== NOT EXECUTED
"block buffer req failed for ino %" PRIu32 ": %d: %s\n",
rtems_rfs_inode_ino (dir), rc, strerror (rc));
break;
}
entry = rtems_rfs_buffer_data (&buffer);
11aeec: 8b 45 94 mov -0x6c(%ebp),%eax
11aeef: 8b 70 1c mov 0x1c(%eax),%esi
if (!read)
11aef2: 84 d2 test %dl,%dl
11aef4: 75 09 jne 11aeff <rtems_rfs_dir_add_entry+0x1c9>
memset (entry, 0xff, rtems_rfs_fs_block_size (fs));
11aef6: 8b 4b 08 mov 0x8(%ebx),%ecx
11aef9: b0 ff mov $0xff,%al
11aefb: 89 f7 mov %esi,%edi
11aefd: f3 aa rep stos %al,%es:(%edi)
offset = 0;
while (offset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
11aeff: 8b 4b 08 mov 0x8(%ebx),%ecx
11af02: 8d 41 f6 lea -0xa(%ecx),%eax
11af05: 89 85 70 ff ff ff mov %eax,-0x90(%ebp)
entry = rtems_rfs_buffer_data (&buffer);
if (!read)
memset (entry, 0xff, rtems_rfs_fs_block_size (fs));
offset = 0;
11af0b: c7 85 74 ff ff ff 00 movl $0x0,-0x8c(%ebp)
11af12: 00 00 00
while (offset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
11af15: e9 56 01 00 00 jmp 11b070 <rtems_rfs_dir_add_entry+0x33a>
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
11af1a: 0f b6 56 08 movzbl 0x8(%esi),%edx
11af1e: c1 e2 08 shl $0x8,%edx
11af21: 0f b6 46 09 movzbl 0x9(%esi),%eax
11af25: 09 c2 or %eax,%edx
eino = rtems_rfs_dir_entry_ino (entry);
11af27: 0f b6 3e movzbl (%esi),%edi
11af2a: c1 e7 18 shl $0x18,%edi
11af2d: 0f b6 46 01 movzbl 0x1(%esi),%eax
11af31: c1 e0 10 shl $0x10,%eax
11af34: 09 c7 or %eax,%edi
11af36: 0f b6 46 03 movzbl 0x3(%esi),%eax
11af3a: 09 c7 or %eax,%edi
11af3c: 0f b6 46 02 movzbl 0x2(%esi),%eax
11af40: c1 e0 08 shl $0x8,%eax
11af43: 09 c7 or %eax,%edi
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
11af45: 81 fa ff ff 00 00 cmp $0xffff,%edx
11af4b: 0f 85 a5 00 00 00 jne 11aff6 <rtems_rfs_dir_add_entry+0x2c0>
{
if ((length + RTEMS_RFS_DIR_ENTRY_SIZE) <
11af51: 8b 45 14 mov 0x14(%ebp),%eax
11af54: 83 c0 0a add $0xa,%eax
(rtems_rfs_fs_block_size (fs) - offset))
11af57: 89 ca mov %ecx,%edx
11af59: 2b 95 74 ff ff ff sub -0x8c(%ebp),%edx
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
{
if ((length + RTEMS_RFS_DIR_ENTRY_SIZE) <
11af5f: 39 d0 cmp %edx,%eax
11af61: 0f 83 75 fe ff ff jae 11addc <rtems_rfs_dir_add_entry+0xa6><== NEVER TAKEN
(rtems_rfs_fs_block_size (fs) - offset))
{
uint32_t hash;
hash = rtems_rfs_dir_hash (name, length);
11af67: 52 push %edx
11af68: 52 push %edx
11af69: ff 75 14 pushl 0x14(%ebp)
11af6c: ff 75 10 pushl 0x10(%ebp)
11af6f: e8 b4 3d 00 00 call 11ed28 <rtems_rfs_dir_hash>
rtems_rfs_dir_set_entry_hash (entry, hash);
11af74: 89 c2 mov %eax,%edx
11af76: c1 ea 18 shr $0x18,%edx
11af79: 88 56 04 mov %dl,0x4(%esi)
11af7c: 89 c2 mov %eax,%edx
11af7e: c1 ea 10 shr $0x10,%edx
11af81: 88 56 05 mov %dl,0x5(%esi)
11af84: 89 c2 mov %eax,%edx
11af86: c1 ea 08 shr $0x8,%edx
11af89: 88 56 06 mov %dl,0x6(%esi)
11af8c: 88 46 07 mov %al,0x7(%esi)
rtems_rfs_dir_set_entry_ino (entry, ino);
11af8f: 8b 45 18 mov 0x18(%ebp),%eax
11af92: c1 e8 18 shr $0x18,%eax
11af95: 88 06 mov %al,(%esi)
11af97: 8b 45 18 mov 0x18(%ebp),%eax
11af9a: c1 e8 10 shr $0x10,%eax
11af9d: 88 46 01 mov %al,0x1(%esi)
11afa0: 8b 45 18 mov 0x18(%ebp),%eax
11afa3: c1 e8 08 shr $0x8,%eax
11afa6: 88 46 02 mov %al,0x2(%esi)
11afa9: 8a 45 18 mov 0x18(%ebp),%al
11afac: 88 46 03 mov %al,0x3(%esi)
rtems_rfs_dir_set_entry_length (entry,
11afaf: 8b 45 14 mov 0x14(%ebp),%eax
11afb2: 83 c0 0a add $0xa,%eax
11afb5: 66 c1 e8 08 shr $0x8,%ax
11afb9: 88 46 08 mov %al,0x8(%esi)
11afbc: 8a 45 14 mov 0x14(%ebp),%al
11afbf: 83 c0 0a add $0xa,%eax
11afc2: 88 46 09 mov %al,0x9(%esi)
RTEMS_RFS_DIR_ENTRY_SIZE + length);
memcpy (entry + RTEMS_RFS_DIR_ENTRY_SIZE, name, length);
11afc5: 8d 46 0a lea 0xa(%esi),%eax
11afc8: 89 c7 mov %eax,%edi
11afca: 8b 75 10 mov 0x10(%ebp),%esi
11afcd: 8b 4d 14 mov 0x14(%ebp),%ecx
11afd0: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
rtems_rfs_buffer_mark_dirty (&buffer);
11afd2: c6 45 8c 01 movb $0x1,-0x74(%ebp)
rtems_rfs_buffer_handle_close (fs, &buffer);
11afd6: 8d 55 8c lea -0x74(%ebp),%edx
11afd9: 89 d8 mov %ebx,%eax
11afdb: e8 b8 f8 ff ff call 11a898 <rtems_rfs_buffer_handle_close>
rtems_rfs_block_map_close (fs, &map);
11afe0: 59 pop %ecx
11afe1: 5e pop %esi
11afe2: 8d 45 98 lea -0x68(%ebp),%eax
11afe5: 50 push %eax
11afe6: 53 push %ebx
11afe7: e8 5d e7 ff ff call 119749 <rtems_rfs_block_map_close>
11afec: 83 c4 10 add $0x10,%esp
return 0;
11afef: 31 f6 xor %esi,%esi
11aff1: e9 aa 00 00 00 jmp 11b0a0 <rtems_rfs_dir_add_entry+0x36a>
}
break;
}
if (rtems_rfs_dir_entry_valid (fs, elength, eino))
11aff6: 83 fa 0a cmp $0xa,%edx
11aff9: 7e 0e jle 11b009 <rtems_rfs_dir_add_entry+0x2d3><== NEVER TAKEN
11affb: 3b 53 1c cmp 0x1c(%ebx),%edx
11affe: 73 09 jae 11b009 <rtems_rfs_dir_add_entry+0x2d3><== NEVER TAKEN
11b000: 85 ff test %edi,%edi
11b002: 74 05 je 11b009 <rtems_rfs_dir_add_entry+0x2d3><== NEVER TAKEN
11b004: 3b 7b 14 cmp 0x14(%ebx),%edi
11b007: 76 5f jbe 11b068 <rtems_rfs_dir_add_entry+0x332><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_ADD_ENTRY))
11b009: 50 push %eax <== NOT EXECUTED
11b00a: 50 push %eax <== NOT EXECUTED
11b00b: 6a 00 push $0x0 <== NOT EXECUTED
11b00d: 68 00 00 00 20 push $0x20000000 <== NOT EXECUTED
11b012: 89 95 6c ff ff ff mov %edx,-0x94(%ebp) <== NOT EXECUTED
11b018: e8 7f 88 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11b01d: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11b020: 84 c0 test %al,%al <== NOT EXECUTED
11b022: 8b 95 6c ff ff ff mov -0x94(%ebp),%edx <== NOT EXECUTED
11b028: 74 1e je 11b048 <rtems_rfs_dir_add_entry+0x312><== NOT EXECUTED
printf ("rtems-rfs: dir-add-entry: "
11b02a: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11b02d: ff b5 74 ff ff ff pushl -0x8c(%ebp) <== NOT EXECUTED
11b033: 57 push %edi <== NOT EXECUTED
11b034: 52 push %edx <== NOT EXECUTED
11b035: 8b 45 0c mov 0xc(%ebp),%eax <== NOT EXECUTED
11b038: ff 70 08 pushl 0x8(%eax) <== NOT EXECUTED
11b03b: 68 1a 16 13 00 push $0x13161a <== NOT EXECUTED
11b040: e8 f7 52 00 00 call 12033c <printf> <== NOT EXECUTED
11b045: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
"bad length or ino for ino %" PRIu32 ": %u/%" PRId32 " @ %04x\n",
rtems_rfs_inode_ino (dir), elength, eino, offset);
rtems_rfs_buffer_handle_close (fs, &buffer);
11b048: 8d 55 8c lea -0x74(%ebp),%edx <== NOT EXECUTED
11b04b: 89 d8 mov %ebx,%eax <== NOT EXECUTED
11b04d: e8 46 f8 ff ff call 11a898 <rtems_rfs_buffer_handle_close><== NOT EXECUTED
rtems_rfs_block_map_close (fs, &map);
11b052: 50 push %eax <== NOT EXECUTED
11b053: 50 push %eax <== NOT EXECUTED
11b054: 8d 45 98 lea -0x68(%ebp),%eax <== NOT EXECUTED
11b057: 50 push %eax <== NOT EXECUTED
11b058: 53 push %ebx <== NOT EXECUTED
11b059: e8 eb e6 ff ff call 119749 <rtems_rfs_block_map_close><== NOT EXECUTED
11b05e: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
return EIO;
11b061: be 05 00 00 00 mov $0x5,%esi <== NOT EXECUTED
11b066: eb 38 jmp 11b0a0 <rtems_rfs_dir_add_entry+0x36a><== NOT EXECUTED
}
entry += elength;
11b068: 01 d6 add %edx,%esi
offset += elength;
11b06a: 01 95 74 ff ff ff add %edx,-0x8c(%ebp)
if (!read)
memset (entry, 0xff, rtems_rfs_fs_block_size (fs));
offset = 0;
while (offset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
11b070: 8b 85 70 ff ff ff mov -0x90(%ebp),%eax
11b076: 39 85 74 ff ff ff cmp %eax,-0x8c(%ebp)
11b07c: 0f 82 98 fe ff ff jb 11af1a <rtems_rfs_dir_add_entry+0x1e4><== ALWAYS TAKEN
11b082: e9 55 fd ff ff jmp 11addc <rtems_rfs_dir_add_entry+0xa6><== NOT EXECUTED
entry += elength;
offset += elength;
}
}
rtems_rfs_buffer_handle_close (fs, &buffer);
11b087: 8d 55 8c lea -0x74(%ebp),%edx <== NOT EXECUTED
11b08a: 89 d8 mov %ebx,%eax <== NOT EXECUTED
11b08c: e8 07 f8 ff ff call 11a898 <rtems_rfs_buffer_handle_close><== NOT EXECUTED
rtems_rfs_block_map_close (fs, &map);
11b091: 50 push %eax <== NOT EXECUTED
11b092: 50 push %eax <== NOT EXECUTED
11b093: 8d 45 98 lea -0x68(%ebp),%eax <== NOT EXECUTED
11b096: 50 push %eax <== NOT EXECUTED
11b097: 53 push %ebx <== NOT EXECUTED
11b098: e8 ac e6 ff ff call 119749 <rtems_rfs_block_map_close><== NOT EXECUTED
11b09d: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
return rc;
}
11b0a0: 89 f0 mov %esi,%eax
11b0a2: 8d 65 f4 lea -0xc(%ebp),%esp
11b0a5: 5b pop %ebx
11b0a6: 5e pop %esi
11b0a7: 5f pop %edi
11b0a8: 5d pop %ebp
11b0a9: c3 ret
0011b0aa <rtems_rfs_dir_del_entry>:
int
rtems_rfs_dir_del_entry (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* dir,
rtems_rfs_ino ino,
uint32_t offset)
{
11b0aa: 55 push %ebp
11b0ab: 89 e5 mov %esp,%ebp
11b0ad: 57 push %edi
11b0ae: 56 push %esi
11b0af: 53 push %ebx
11b0b0: 81 ec 94 00 00 00 sub $0x94,%esp
rtems_rfs_block_no block;
rtems_rfs_buffer_handle buffer;
bool search;
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_DEL_ENTRY))
11b0b6: 6a 00 push $0x0
11b0b8: 68 00 00 00 40 push $0x40000000
11b0bd: e8 da 87 ff ff call 11389c <rtems_rfs_trace>
11b0c2: 83 c4 10 add $0x10,%esp
11b0c5: 84 c0 test %al,%al
11b0c7: 74 19 je 11b0e2 <rtems_rfs_dir_del_entry+0x38><== ALWAYS TAKEN
printf ("rtems-rfs: dir-del-entry: dir=%" PRId32 ", entry=%" PRId32 " offset=%" PRIu32 "\n",
11b0c9: ff 75 14 pushl 0x14(%ebp) <== NOT EXECUTED
11b0cc: ff 75 10 pushl 0x10(%ebp) <== NOT EXECUTED
11b0cf: 8b 45 0c mov 0xc(%ebp),%eax <== NOT EXECUTED
11b0d2: ff 70 08 pushl 0x8(%eax) <== NOT EXECUTED
11b0d5: 68 62 16 13 00 push $0x131662 <== NOT EXECUTED
11b0da: e8 5d 52 00 00 call 12033c <printf> <== NOT EXECUTED
11b0df: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rtems_rfs_inode_ino (dir), ino, offset);
rc = rtems_rfs_block_map_open (fs, dir, &map);
11b0e2: 50 push %eax
11b0e3: 8d 7d 98 lea -0x68(%ebp),%edi
11b0e6: 57 push %edi
11b0e7: ff 75 0c pushl 0xc(%ebp)
11b0ea: ff 75 08 pushl 0x8(%ebp)
11b0ed: e8 b0 e4 ff ff call 1195a2 <rtems_rfs_block_map_open>
11b0f2: 89 c3 mov %eax,%ebx
if (rc > 0)
11b0f4: 83 c4 10 add $0x10,%esp
11b0f7: 85 c0 test %eax,%eax
11b0f9: 0f 8f 19 03 00 00 jg 11b418 <rtems_rfs_dir_del_entry+0x36e><== NEVER TAKEN
return rc;
rc = rtems_rfs_block_map_seek (fs, &map, offset, &block);
11b0ff: 83 ec 0c sub $0xc,%esp
11b102: 8d 75 88 lea -0x78(%ebp),%esi
11b105: 56 push %esi
11b106: 8b 45 14 mov 0x14(%ebp),%eax
11b109: 31 d2 xor %edx,%edx
11b10b: 52 push %edx
11b10c: 50 push %eax
11b10d: 57 push %edi
11b10e: ff 75 08 pushl 0x8(%ebp)
11b111: e8 ee e8 ff ff call 119a04 <rtems_rfs_block_map_seek>
11b116: 89 c3 mov %eax,%ebx
if (rc > 0)
11b118: 83 c4 20 add $0x20,%esp
11b11b: 85 c0 test %eax,%eax
11b11d: 7e 10 jle 11b12f <rtems_rfs_dir_del_entry+0x85><== ALWAYS TAKEN
{
if (rc == ENXIO)
11b11f: 83 f8 06 cmp $0x6,%eax <== NOT EXECUTED
11b122: 0f 85 6d 02 00 00 jne 11b395 <rtems_rfs_dir_del_entry+0x2eb><== NOT EXECUTED
rc = ENOENT;
11b128: b3 02 mov $0x2,%bl <== NOT EXECUTED
11b12a: e9 66 02 00 00 jmp 11b395 <rtems_rfs_dir_del_entry+0x2eb><== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
11b12f: c6 45 8c 00 movb $0x0,-0x74(%ebp)
handle->bnum = 0;
11b133: c7 45 90 00 00 00 00 movl $0x0,-0x70(%ebp)
handle->buffer = NULL;
11b13a: c7 45 94 00 00 00 00 movl $0x0,-0x6c(%ebp)
}
/*
* Only search if the offset is 0 else we are at that position.
*/
search = offset ? false : true;
11b141: 83 7d 14 00 cmpl $0x0,0x14(%ebp)
11b145: 0f 94 45 83 sete -0x7d(%ebp)
rc = ENOENT;
rtems_rfs_block_map_close (fs, &map);
return rc;
}
rc = rtems_rfs_buffer_handle_open (fs, &buffer);
11b149: 31 db xor %ebx,%ebx
/*
* Only search if the offset is 0 else we are at that position.
*/
search = offset ? false : true;
while (rc == 0)
11b14b: e9 97 02 00 00 jmp 11b3e7 <rtems_rfs_dir_del_entry+0x33d>
{
uint8_t* entry;
int eoffset;
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, true);
11b150: 6a 01 push $0x1
11b152: ff 75 88 pushl -0x78(%ebp)
11b155: 8d 55 8c lea -0x74(%ebp),%edx
11b158: 52 push %edx
11b159: ff 75 08 pushl 0x8(%ebp)
11b15c: e8 49 f1 ff ff call 11a2aa <rtems_rfs_buffer_handle_request>
11b161: 89 c7 mov %eax,%edi
if (rc > 0)
11b163: 83 c4 10 add $0x10,%esp
11b166: 85 c0 test %eax,%eax
11b168: 7e 3c jle 11b1a6 <rtems_rfs_dir_del_entry+0xfc><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_DEL_ENTRY))
11b16a: 50 push %eax <== NOT EXECUTED
11b16b: 50 push %eax <== NOT EXECUTED
11b16c: 6a 00 push $0x0 <== NOT EXECUTED
11b16e: 68 00 00 00 40 push $0x40000000 <== NOT EXECUTED
11b173: e8 24 87 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11b178: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11b17b: 84 c0 test %al,%al <== NOT EXECUTED
11b17d: 0f 84 6e 02 00 00 je 11b3f1 <rtems_rfs_dir_del_entry+0x347><== NOT EXECUTED
printf ("rtems-rfs: dir-del-entry: "
11b183: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11b186: 57 push %edi <== NOT EXECUTED
11b187: e8 38 5f 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11b18c: 50 push %eax <== NOT EXECUTED
11b18d: 57 push %edi <== NOT EXECUTED
11b18e: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
11b191: ff 71 08 pushl 0x8(%ecx) <== NOT EXECUTED
11b194: 68 9b 16 13 00 push $0x13169b <== NOT EXECUTED
11b199: e8 9e 51 00 00 call 12033c <printf> <== NOT EXECUTED
11b19e: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
11b1a1: e9 4b 02 00 00 jmp 11b3f1 <rtems_rfs_dir_del_entry+0x347><== NOT EXECUTED
/*
* If we are searching start at the beginning of the block. If not searching
* skip to the offset in the block.
*/
if (search)
eoffset = 0;
11b1a6: c7 45 84 00 00 00 00 movl $0x0,-0x7c(%ebp)
/*
* If we are searching start at the beginning of the block. If not searching
* skip to the offset in the block.
*/
if (search)
11b1ad: 80 7d 83 00 cmpb $0x0,-0x7d(%ebp)
11b1b1: 75 0e jne 11b1c1 <rtems_rfs_dir_del_entry+0x117><== NEVER TAKEN
eoffset = 0;
else
eoffset = offset % rtems_rfs_fs_block_size (fs);
11b1b3: 8b 45 14 mov 0x14(%ebp),%eax
11b1b6: 8b 4d 08 mov 0x8(%ebp),%ecx
11b1b9: 31 d2 xor %edx,%edx
11b1bb: f7 71 08 divl 0x8(%ecx)
11b1be: 89 55 84 mov %edx,-0x7c(%ebp)
entry = rtems_rfs_buffer_data (&buffer) + eoffset;
11b1c1: 8b 45 94 mov -0x6c(%ebp),%eax
11b1c4: 8b 75 84 mov -0x7c(%ebp),%esi
11b1c7: 03 70 1c add 0x1c(%eax),%esi
while (eoffset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
11b1ca: 8b 45 08 mov 0x8(%ebp),%eax
11b1cd: 8b 40 08 mov 0x8(%eax),%eax
11b1d0: 89 85 7c ff ff ff mov %eax,-0x84(%ebp)
11b1d6: 83 e8 0a sub $0xa,%eax
11b1d9: 89 85 78 ff ff ff mov %eax,-0x88(%ebp)
11b1df: e9 cf 01 00 00 jmp 11b3b3 <rtems_rfs_dir_del_entry+0x309>
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
11b1e4: 0f b6 4e 08 movzbl 0x8(%esi),%ecx
11b1e8: c1 e1 08 shl $0x8,%ecx
11b1eb: 0f b6 46 09 movzbl 0x9(%esi),%eax
11b1ef: 09 c1 or %eax,%ecx
eino = rtems_rfs_dir_entry_ino (entry);
11b1f1: 0f b6 16 movzbl (%esi),%edx
11b1f4: c1 e2 18 shl $0x18,%edx
11b1f7: 0f b6 46 01 movzbl 0x1(%esi),%eax
11b1fb: c1 e0 10 shl $0x10,%eax
11b1fe: 09 c2 or %eax,%edx
11b200: 0f b6 46 03 movzbl 0x3(%esi),%eax
11b204: 09 c2 or %eax,%edx
11b206: 0f b6 46 02 movzbl 0x2(%esi),%eax
11b20a: c1 e0 08 shl $0x8,%eax
11b20d: 09 c2 or %eax,%edx
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
11b20f: 81 f9 ff ff 00 00 cmp $0xffff,%ecx
11b215: 0f 84 a7 01 00 00 je 11b3c2 <rtems_rfs_dir_del_entry+0x318><== NEVER TAKEN
break;
if (rtems_rfs_dir_entry_valid (fs, elength, eino))
11b21b: 83 f9 0a cmp $0xa,%ecx
11b21e: 7e 11 jle 11b231 <rtems_rfs_dir_del_entry+0x187><== NEVER TAKEN
11b220: 8b 45 08 mov 0x8(%ebp),%eax
11b223: 3b 48 1c cmp 0x1c(%eax),%ecx
11b226: 73 09 jae 11b231 <rtems_rfs_dir_del_entry+0x187><== NEVER TAKEN
11b228: 85 d2 test %edx,%edx
11b22a: 74 05 je 11b231 <rtems_rfs_dir_del_entry+0x187><== NEVER TAKEN
11b22c: 3b 50 14 cmp 0x14(%eax),%edx
11b22f: 76 53 jbe 11b284 <rtems_rfs_dir_del_entry+0x1da><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_DEL_ENTRY))
11b231: 56 push %esi <== NOT EXECUTED
11b232: 56 push %esi <== NOT EXECUTED
11b233: 6a 00 push $0x0 <== NOT EXECUTED
11b235: 68 00 00 00 40 push $0x40000000 <== NOT EXECUTED
11b23a: 89 95 70 ff ff ff mov %edx,-0x90(%ebp) <== NOT EXECUTED
11b240: 89 8d 74 ff ff ff mov %ecx,-0x8c(%ebp) <== NOT EXECUTED
11b246: e8 51 86 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11b24b: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11b24e: 84 c0 test %al,%al <== NOT EXECUTED
11b250: 8b 95 70 ff ff ff mov -0x90(%ebp),%edx <== NOT EXECUTED
11b256: 8b 8d 74 ff ff ff mov -0x8c(%ebp),%ecx <== NOT EXECUTED
11b25c: 0f 84 af 01 00 00 je 11b411 <rtems_rfs_dir_del_entry+0x367><== NOT EXECUTED
printf ("rtems-rfs: dir-del-entry: "
11b262: 53 push %ebx <== NOT EXECUTED
11b263: 53 push %ebx <== NOT EXECUTED
11b264: ff 75 84 pushl -0x7c(%ebp) <== NOT EXECUTED
11b267: ff 75 88 pushl -0x78(%ebp) <== NOT EXECUTED
11b26a: 52 push %edx <== NOT EXECUTED
11b26b: 51 push %ecx <== NOT EXECUTED
11b26c: 8b 55 0c mov 0xc(%ebp),%edx <== NOT EXECUTED
11b26f: ff 72 08 pushl 0x8(%edx) <== NOT EXECUTED
11b272: 68 e2 16 13 00 push $0x1316e2 <== NOT EXECUTED
11b277: e8 c0 50 00 00 call 12033c <printf> <== NOT EXECUTED
11b27c: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
11b27f: e9 8d 01 00 00 jmp 11b411 <rtems_rfs_dir_del_entry+0x367><== NOT EXECUTED
rtems_rfs_inode_ino (dir), elength, eino, block, eoffset);
rc = EIO;
break;
}
if (ino == rtems_rfs_dir_entry_ino (entry))
11b284: 39 55 10 cmp %edx,0x10(%ebp)
11b287: 0f 85 1b 01 00 00 jne 11b3a8 <rtems_rfs_dir_del_entry+0x2fe><== NEVER TAKEN
{
uint32_t remaining;
remaining = rtems_rfs_fs_block_size (fs) - (eoffset + elength);
11b28d: 8b 45 84 mov -0x7c(%ebp),%eax
11b290: 01 c8 add %ecx,%eax
11b292: 8b bd 7c ff ff ff mov -0x84(%ebp),%edi
11b298: 29 c7 sub %eax,%edi
memmove (entry, entry + elength, remaining);
11b29a: 50 push %eax
11b29b: 57 push %edi
11b29c: 8d 04 0e lea (%esi,%ecx,1),%eax
11b29f: 50 push %eax
11b2a0: 56 push %esi
11b2a1: 89 8d 74 ff ff ff mov %ecx,-0x8c(%ebp)
11b2a7: e8 b4 4e 00 00 call 120160 <memmove>
memset (entry + remaining, 0xff, elength);
11b2ac: 8d 14 3e lea (%esi,%edi,1),%edx
11b2af: b0 ff mov $0xff,%al
11b2b1: 8b 8d 74 ff ff ff mov -0x8c(%ebp),%ecx
11b2b7: 89 d7 mov %edx,%edi
11b2b9: f3 aa rep stos %al,%es:(%edi)
* block and it is the last block in the map shrink the map.
*
* @note We could check again to see if the new end block in the map is
* also empty. This way we could clean up an empty directory.
*/
elength = rtems_rfs_dir_entry_length (entry);
11b2bb: 0f b6 7e 08 movzbl 0x8(%esi),%edi
11b2bf: c1 e7 08 shl $0x8,%edi
11b2c2: 0f b6 46 09 movzbl 0x9(%esi),%eax
11b2c6: 09 c7 or %eax,%edi
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_DEL_ENTRY))
11b2c8: 58 pop %eax
11b2c9: 5a pop %edx
11b2ca: 6a 00 push $0x0
11b2cc: 68 00 00 00 40 push $0x40000000
11b2d1: e8 c6 85 ff ff call 11389c <rtems_rfs_trace>
11b2d6: 83 c4 10 add $0x10,%esp
11b2d9: 84 c0 test %al,%al
11b2db: 74 3b je 11b318 <rtems_rfs_dir_del_entry+0x26e><== ALWAYS TAKEN
printf ("rtems-rfs: dir-del-entry: "
"last block free for ino %" PRIu32 ": elength=%i block=%" PRIu32
" offset=%d last=%s\n",
ino, elength, block, eoffset,
rtems_rfs_block_map_last (&map) ? "yes" : "no");
11b2dd: 8b 45 a8 mov -0x58(%ebp),%eax <== NOT EXECUTED
* also empty. This way we could clean up an empty directory.
*/
elength = rtems_rfs_dir_entry_length (entry);
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_DEL_ENTRY))
printf ("rtems-rfs: dir-del-entry: "
11b2e0: 85 c0 test %eax,%eax <== NOT EXECUTED
11b2e2: 75 0d jne 11b2f1 <rtems_rfs_dir_del_entry+0x247><== NOT EXECUTED
"last block free for ino %" PRIu32 ": elength=%i block=%" PRIu32
" offset=%d last=%s\n",
ino, elength, block, eoffset,
rtems_rfs_block_map_last (&map) ? "yes" : "no");
11b2e4: 83 7d a0 00 cmpl $0x0,-0x60(%ebp) <== NOT EXECUTED
11b2e8: 75 07 jne 11b2f1 <rtems_rfs_dir_del_entry+0x247><== NOT EXECUTED
* also empty. This way we could clean up an empty directory.
*/
elength = rtems_rfs_dir_entry_length (entry);
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_DEL_ENTRY))
printf ("rtems-rfs: dir-del-entry: "
11b2ea: b8 3c de 12 00 mov $0x12de3c,%eax <== NOT EXECUTED
11b2ef: eb 0d jmp 11b2fe <rtems_rfs_dir_del_entry+0x254><== NOT EXECUTED
"last block free for ino %" PRIu32 ": elength=%i block=%" PRIu32
" offset=%d last=%s\n",
ino, elength, block, eoffset,
rtems_rfs_block_map_last (&map) ? "yes" : "no");
11b2f1: 8b 55 a0 mov -0x60(%ebp),%edx <== NOT EXECUTED
11b2f4: 4a dec %edx <== NOT EXECUTED
11b2f5: 39 d0 cmp %edx,%eax <== NOT EXECUTED
11b2f7: 74 f1 je 11b2ea <rtems_rfs_dir_del_entry+0x240><== NOT EXECUTED
* also empty. This way we could clean up an empty directory.
*/
elength = rtems_rfs_dir_entry_length (entry);
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_DEL_ENTRY))
printf ("rtems-rfs: dir-del-entry: "
11b2f9: b8 8f 07 13 00 mov $0x13078f,%eax <== NOT EXECUTED
11b2fe: 52 push %edx <== NOT EXECUTED
11b2ff: 52 push %edx <== NOT EXECUTED
11b300: 50 push %eax <== NOT EXECUTED
11b301: ff 75 84 pushl -0x7c(%ebp) <== NOT EXECUTED
11b304: ff 75 88 pushl -0x78(%ebp) <== NOT EXECUTED
11b307: 57 push %edi <== NOT EXECUTED
11b308: ff 75 10 pushl 0x10(%ebp) <== NOT EXECUTED
11b30b: 68 2e 17 13 00 push $0x13172e <== NOT EXECUTED
11b310: e8 27 50 00 00 call 12033c <printf> <== NOT EXECUTED
11b315: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
"last block free for ino %" PRIu32 ": elength=%i block=%" PRIu32
" offset=%d last=%s\n",
ino, elength, block, eoffset,
rtems_rfs_block_map_last (&map) ? "yes" : "no");
if ((elength == RTEMS_RFS_DIR_ENTRY_EMPTY) &&
11b318: 81 ff ff ff 00 00 cmp $0xffff,%edi
11b31e: 75 66 jne 11b386 <rtems_rfs_dir_del_entry+0x2dc>
11b320: 83 7d 84 00 cmpl $0x0,-0x7c(%ebp)
11b324: 75 60 jne 11b386 <rtems_rfs_dir_del_entry+0x2dc><== ALWAYS TAKEN
(eoffset == 0) && rtems_rfs_block_map_last (&map))
11b326: 8b 45 a8 mov -0x58(%ebp),%eax <== NOT EXECUTED
11b329: 85 c0 test %eax,%eax <== NOT EXECUTED
11b32b: 75 06 jne 11b333 <rtems_rfs_dir_del_entry+0x289><== NOT EXECUTED
11b32d: 83 7d a0 00 cmpl $0x0,-0x60(%ebp) <== NOT EXECUTED
11b331: 74 08 je 11b33b <rtems_rfs_dir_del_entry+0x291><== NOT EXECUTED
11b333: 8b 55 a0 mov -0x60(%ebp),%edx <== NOT EXECUTED
11b336: 4a dec %edx <== NOT EXECUTED
11b337: 39 d0 cmp %edx,%eax <== NOT EXECUTED
11b339: 75 4b jne 11b386 <rtems_rfs_dir_del_entry+0x2dc><== NOT EXECUTED
{
rc = rtems_rfs_block_map_shrink (fs, &map, 1);
11b33b: 50 push %eax <== NOT EXECUTED
11b33c: 6a 01 push $0x1 <== NOT EXECUTED
11b33e: 8d 45 98 lea -0x68(%ebp),%eax <== NOT EXECUTED
11b341: 50 push %eax <== NOT EXECUTED
11b342: ff 75 08 pushl 0x8(%ebp) <== NOT EXECUTED
11b345: e8 07 ea ff ff call 119d51 <rtems_rfs_block_map_shrink><== NOT EXECUTED
11b34a: 89 c6 mov %eax,%esi <== NOT EXECUTED
if (rc > 0)
11b34c: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11b34f: 85 c0 test %eax,%eax <== NOT EXECUTED
11b351: 7e 33 jle 11b386 <rtems_rfs_dir_del_entry+0x2dc><== NOT EXECUTED
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_DEL_ENTRY))
11b353: 57 push %edi <== NOT EXECUTED
11b354: 57 push %edi <== NOT EXECUTED
11b355: 6a 00 push $0x0 <== NOT EXECUTED
11b357: 68 00 00 00 40 push $0x40000000 <== NOT EXECUTED
11b35c: e8 3b 85 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11b361: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11b364: 84 c0 test %al,%al <== NOT EXECUTED
11b366: 74 1e je 11b386 <rtems_rfs_dir_del_entry+0x2dc><== NOT EXECUTED
printf ("rtems-rfs: dir-del-entry: "
11b368: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11b36b: 56 push %esi <== NOT EXECUTED
11b36c: e8 53 5d 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11b371: 50 push %eax <== NOT EXECUTED
11b372: 56 push %esi <== NOT EXECUTED
11b373: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
11b376: ff 71 08 pushl 0x8(%ecx) <== NOT EXECUTED
11b379: 68 8d 17 13 00 push $0x13178d <== NOT EXECUTED
11b37e: e8 b9 4f 00 00 call 12033c <printf> <== NOT EXECUTED
11b383: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
"block map shrink failed for ino %" PRIu32 ": %d: %s\n",
rtems_rfs_inode_ino (dir), rc, strerror (rc));
}
}
rtems_rfs_buffer_mark_dirty (&buffer);
11b386: c6 45 8c 01 movb $0x1,-0x74(%ebp)
rtems_rfs_buffer_handle_close (fs, &buffer);
11b38a: 8d 55 8c lea -0x74(%ebp),%edx
11b38d: 8b 45 08 mov 0x8(%ebp),%eax
11b390: e8 03 f5 ff ff call 11a898 <rtems_rfs_buffer_handle_close>
rtems_rfs_block_map_close (fs, &map);
11b395: 51 push %ecx
11b396: 51 push %ecx
11b397: 8d 45 98 lea -0x68(%ebp),%eax
11b39a: 50 push %eax
11b39b: ff 75 08 pushl 0x8(%ebp)
11b39e: e8 a6 e3 ff ff call 119749 <rtems_rfs_block_map_close>
11b3a3: 83 c4 10 add $0x10,%esp
11b3a6: eb 70 jmp 11b418 <rtems_rfs_dir_del_entry+0x36e>
return 0;
}
if (!search)
11b3a8: 80 7d 83 00 cmpb $0x0,-0x7d(%ebp) <== NOT EXECUTED
11b3ac: 74 63 je 11b411 <rtems_rfs_dir_del_entry+0x367><== NOT EXECUTED
{
rc = EIO;
break;
}
entry += elength;
11b3ae: 01 ce add %ecx,%esi <== NOT EXECUTED
eoffset += elength;
11b3b0: 01 4d 84 add %ecx,-0x7c(%ebp) <== NOT EXECUTED
else
eoffset = offset % rtems_rfs_fs_block_size (fs);
entry = rtems_rfs_buffer_data (&buffer) + eoffset;
while (eoffset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
11b3b3: 8b 85 78 ff ff ff mov -0x88(%ebp),%eax
11b3b9: 39 45 84 cmp %eax,-0x7c(%ebp)
11b3bc: 0f 82 22 fe ff ff jb 11b1e4 <rtems_rfs_dir_del_entry+0x13a><== ALWAYS TAKEN
entry += elength;
eoffset += elength;
}
if (rc == 0)
11b3c2: 85 ff test %edi,%edi <== NOT EXECUTED
11b3c4: 75 1f jne 11b3e5 <rtems_rfs_dir_del_entry+0x33b><== NOT EXECUTED
{
rc = rtems_rfs_block_map_next_block (fs, &map, &block);
11b3c6: 52 push %edx <== NOT EXECUTED
11b3c7: 8d 55 88 lea -0x78(%ebp),%edx <== NOT EXECUTED
11b3ca: 52 push %edx <== NOT EXECUTED
11b3cb: 8d 45 98 lea -0x68(%ebp),%eax <== NOT EXECUTED
11b3ce: 50 push %eax <== NOT EXECUTED
11b3cf: ff 75 08 pushl 0x8(%ebp) <== NOT EXECUTED
11b3d2: e8 97 e6 ff ff call 119a6e <rtems_rfs_block_map_next_block><== NOT EXECUTED
11b3d7: 89 c3 mov %eax,%ebx <== NOT EXECUTED
if (rc == ENXIO)
11b3d9: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11b3dc: 83 f8 06 cmp $0x6,%eax <== NOT EXECUTED
11b3df: 75 06 jne 11b3e7 <rtems_rfs_dir_del_entry+0x33d><== NOT EXECUTED
rc = ENOENT;
11b3e1: b3 02 mov $0x2,%bl <== NOT EXECUTED
11b3e3: eb 0a jmp 11b3ef <rtems_rfs_dir_del_entry+0x345><== NOT EXECUTED
rc = ENOENT;
rtems_rfs_block_map_close (fs, &map);
return rc;
}
rc = rtems_rfs_buffer_handle_open (fs, &buffer);
11b3e5: 89 fb mov %edi,%ebx <== NOT EXECUTED
/*
* Only search if the offset is 0 else we are at that position.
*/
search = offset ? false : true;
while (rc == 0)
11b3e7: 85 db test %ebx,%ebx
11b3e9: 0f 84 61 fd ff ff je 11b150 <rtems_rfs_dir_del_entry+0xa6><== ALWAYS TAKEN
11b3ef: 89 df mov %ebx,%edi <== NOT EXECUTED
if (rc == ENXIO)
rc = ENOENT;
}
}
rtems_rfs_buffer_handle_close (fs, &buffer);
11b3f1: 8d 55 8c lea -0x74(%ebp),%edx <== NOT EXECUTED
11b3f4: 8b 45 08 mov 0x8(%ebp),%eax <== NOT EXECUTED
11b3f7: e8 9c f4 ff ff call 11a898 <rtems_rfs_buffer_handle_close><== NOT EXECUTED
rtems_rfs_block_map_close (fs, &map);
11b3fc: 50 push %eax <== NOT EXECUTED
11b3fd: 50 push %eax <== NOT EXECUTED
11b3fe: 8d 45 98 lea -0x68(%ebp),%eax <== NOT EXECUTED
11b401: 50 push %eax <== NOT EXECUTED
11b402: ff 75 08 pushl 0x8(%ebp) <== NOT EXECUTED
11b405: e8 3f e3 ff ff call 119749 <rtems_rfs_block_map_close><== NOT EXECUTED
11b40a: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
return rc;
11b40d: 89 fb mov %edi,%ebx <== NOT EXECUTED
11b40f: eb 07 jmp 11b418 <rtems_rfs_dir_del_entry+0x36e><== NOT EXECUTED
rc = ENOENT;
rtems_rfs_block_map_close (fs, &map);
return rc;
}
rc = rtems_rfs_buffer_handle_open (fs, &buffer);
11b411: bf 05 00 00 00 mov $0x5,%edi <== NOT EXECUTED
11b416: eb cd jmp 11b3e5 <rtems_rfs_dir_del_entry+0x33b><== NOT EXECUTED
}
rtems_rfs_buffer_handle_close (fs, &buffer);
rtems_rfs_block_map_close (fs, &map);
return rc;
}
11b418: 89 d8 mov %ebx,%eax
11b41a: 8d 65 f4 lea -0xc(%ebp),%esp
11b41d: 5b pop %ebx
11b41e: 5e pop %esi
11b41f: 5f pop %edi
11b420: 5d pop %ebp
11b421: c3 ret
0011b785 <rtems_rfs_dir_empty>:
int
rtems_rfs_dir_empty (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* dir)
{
11b785: 55 push %ebp
11b786: 89 e5 mov %esp,%ebp
11b788: 57 push %edi
11b789: 56 push %esi
11b78a: 53 push %ebx
11b78b: 81 ec 84 00 00 00 sub $0x84,%esp
11b791: 8b 7d 08 mov 0x8(%ebp),%edi
rtems_rfs_buffer_handle buffer;
rtems_rfs_block_no block;
bool empty;
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_READ))
11b794: 6a 00 push $0x0
11b796: 68 00 00 00 80 push $0x80000000
11b79b: e8 fc 80 ff ff call 11389c <rtems_rfs_trace>
11b7a0: 83 c4 10 add $0x10,%esp
11b7a3: 84 c0 test %al,%al
11b7a5: 74 15 je 11b7bc <rtems_rfs_dir_empty+0x37><== ALWAYS TAKEN
printf ("rtems-rfs: dir-empty: dir=%" PRId32 "\n", rtems_rfs_inode_ino (dir));
11b7a7: 50 push %eax <== NOT EXECUTED
11b7a8: 50 push %eax <== NOT EXECUTED
11b7a9: 8b 55 0c mov 0xc(%ebp),%edx <== NOT EXECUTED
11b7ac: ff 72 08 pushl 0x8(%edx) <== NOT EXECUTED
11b7af: 68 ad 18 13 00 push $0x1318ad <== NOT EXECUTED
11b7b4: e8 83 4b 00 00 call 12033c <printf> <== NOT EXECUTED
11b7b9: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
empty = true;
rc = rtems_rfs_block_map_open (fs, dir, &map);
11b7bc: 50 push %eax
11b7bd: 8d 75 98 lea -0x68(%ebp),%esi
11b7c0: 56 push %esi
11b7c1: ff 75 0c pushl 0xc(%ebp)
11b7c4: 57 push %edi
11b7c5: e8 d8 dd ff ff call 1195a2 <rtems_rfs_block_map_open>
11b7ca: 89 c3 mov %eax,%ebx
if (rc > 0)
11b7cc: 83 c4 10 add $0x10,%esp
11b7cf: 85 c0 test %eax,%eax
11b7d1: 0f 8f 7c 01 00 00 jg 11b953 <rtems_rfs_dir_empty+0x1ce><== NEVER TAKEN
return rc;
rc = rtems_rfs_block_map_seek (fs, &map, 0, &block);
11b7d7: 83 ec 0c sub $0xc,%esp
11b7da: 8d 55 88 lea -0x78(%ebp),%edx
11b7dd: 52 push %edx
11b7de: 6a 00 push $0x0
11b7e0: 6a 00 push $0x0
11b7e2: 56 push %esi
11b7e3: 57 push %edi
11b7e4: 89 95 7c ff ff ff mov %edx,-0x84(%ebp)
11b7ea: e8 15 e2 ff ff call 119a04 <rtems_rfs_block_map_seek>
11b7ef: 89 c3 mov %eax,%ebx
if (rc > 0)
11b7f1: 83 c4 20 add $0x20,%esp
11b7f4: 85 c0 test %eax,%eax
11b7f6: 7e 08 jle 11b800 <rtems_rfs_dir_empty+0x7b><== ALWAYS TAKEN
{
rtems_rfs_block_map_close (fs, &map);
11b7f8: 50 push %eax <== NOT EXECUTED
11b7f9: 50 push %eax <== NOT EXECUTED
11b7fa: 56 push %esi <== NOT EXECUTED
11b7fb: e9 2a 01 00 00 jmp 11b92a <rtems_rfs_dir_empty+0x1a5><== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
11b800: c6 45 8c 00 movb $0x0,-0x74(%ebp)
handle->bnum = 0;
11b804: c7 45 90 00 00 00 00 movl $0x0,-0x70(%ebp)
handle->buffer = NULL;
11b80b: c7 45 94 00 00 00 00 movl $0x0,-0x6c(%ebp)
while (empty)
{
uint8_t* entry;
int offset;
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, true);
11b812: 6a 01 push $0x1
11b814: ff 75 88 pushl -0x78(%ebp)
11b817: 8d 45 8c lea -0x74(%ebp),%eax
11b81a: 50 push %eax
11b81b: 57 push %edi
11b81c: e8 89 ea ff ff call 11a2aa <rtems_rfs_buffer_handle_request>
11b821: 89 c3 mov %eax,%ebx
if (rc > 0)
11b823: 83 c4 10 add $0x10,%esp
11b826: 85 c0 test %eax,%eax
11b828: 0f 8f e0 00 00 00 jg 11b90e <rtems_rfs_dir_empty+0x189><== NEVER TAKEN
break;
entry = rtems_rfs_buffer_data (&buffer);
11b82e: 8b 45 94 mov -0x6c(%ebp),%eax
11b831: 8b 40 1c mov 0x1c(%eax),%eax
offset = 0;
while (offset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
11b834: 8b 57 08 mov 0x8(%edi),%edx
11b837: 83 ea 0a sub $0xa,%edx
11b83a: 89 55 80 mov %edx,-0x80(%ebp)
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, true);
if (rc > 0)
break;
entry = rtems_rfs_buffer_data (&buffer);
offset = 0;
11b83d: c7 45 84 00 00 00 00 movl $0x0,-0x7c(%ebp)
while (offset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
11b844: e9 aa 00 00 00 jmp 11b8f3 <rtems_rfs_dir_empty+0x16e>
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
11b849: 0f b6 70 08 movzbl 0x8(%eax),%esi
11b84d: c1 e6 08 shl $0x8,%esi
11b850: 0f b6 50 09 movzbl 0x9(%eax),%edx
11b854: 09 d6 or %edx,%esi
eino = rtems_rfs_dir_entry_ino (entry);
11b856: 0f b6 10 movzbl (%eax),%edx
11b859: c1 e2 18 shl $0x18,%edx
11b85c: 0f b6 48 01 movzbl 0x1(%eax),%ecx
11b860: c1 e1 10 shl $0x10,%ecx
11b863: 09 ca or %ecx,%edx
11b865: 0f b6 48 03 movzbl 0x3(%eax),%ecx
11b869: 09 ca or %ecx,%edx
11b86b: 0f b6 48 02 movzbl 0x2(%eax),%ecx
11b86f: c1 e1 08 shl $0x8,%ecx
11b872: 09 ca or %ecx,%edx
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
11b874: 81 fe ff ff 00 00 cmp $0xffff,%esi
11b87a: 0f 84 b5 00 00 00 je 11b935 <rtems_rfs_dir_empty+0x1b0>
break;
if (rtems_rfs_dir_entry_valid (fs, elength, eino))
11b880: 83 fe 0a cmp $0xa,%esi
11b883: 7e 0e jle 11b893 <rtems_rfs_dir_empty+0x10e><== NEVER TAKEN
11b885: 3b 77 1c cmp 0x1c(%edi),%esi
11b888: 73 09 jae 11b893 <rtems_rfs_dir_empty+0x10e><== NEVER TAKEN
11b88a: 85 d2 test %edx,%edx
11b88c: 74 05 je 11b893 <rtems_rfs_dir_empty+0x10e><== NEVER TAKEN
11b88e: 3b 57 14 cmp 0x14(%edi),%edx
11b891: 76 3f jbe 11b8d2 <rtems_rfs_dir_empty+0x14d><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_EMPTY))
11b893: 50 push %eax <== NOT EXECUTED
11b894: 50 push %eax <== NOT EXECUTED
11b895: 6a 01 push $0x1 <== NOT EXECUTED
11b897: 6a 00 push $0x0 <== NOT EXECUTED
11b899: 89 95 7c ff ff ff mov %edx,-0x84(%ebp) <== NOT EXECUTED
11b89f: e8 f8 7f ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11b8a4: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11b8a7: 84 c0 test %al,%al <== NOT EXECUTED
11b8a9: 8b 95 7c ff ff ff mov -0x84(%ebp),%edx <== NOT EXECUTED
11b8af: 0f 84 80 00 00 00 je 11b935 <rtems_rfs_dir_empty+0x1b0><== NOT EXECUTED
printf ("rtems-rfs: dir-empty: "
11b8b5: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11b8b8: ff 75 84 pushl -0x7c(%ebp) <== NOT EXECUTED
11b8bb: 52 push %edx <== NOT EXECUTED
11b8bc: 56 push %esi <== NOT EXECUTED
11b8bd: 8b 55 0c mov 0xc(%ebp),%edx <== NOT EXECUTED
11b8c0: ff 72 08 pushl 0x8(%edx) <== NOT EXECUTED
11b8c3: 68 cc 18 13 00 push $0x1318cc <== NOT EXECUTED
11b8c8: e8 6f 4a 00 00 call 12033c <printf> <== NOT EXECUTED
11b8cd: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
11b8d0: eb 63 jmp 11b935 <rtems_rfs_dir_empty+0x1b0><== NOT EXECUTED
/*
* Ignore the current (.) and parent (..) entries. Anything else means
* the directory is not empty.
*/
if (((elength != (RTEMS_RFS_DIR_ENTRY_SIZE + 1)) ||
11b8d2: 83 fe 0b cmp $0xb,%esi
11b8d5: 75 06 jne 11b8dd <rtems_rfs_dir_empty+0x158>
11b8d7: 80 78 0a 2e cmpb $0x2e,0xa(%eax)
11b8db: eb 0f jmp 11b8ec <rtems_rfs_dir_empty+0x167>
(entry[RTEMS_RFS_DIR_ENTRY_SIZE] != '.')) &&
11b8dd: 83 fe 0c cmp $0xc,%esi
11b8e0: 75 26 jne 11b908 <rtems_rfs_dir_empty+0x183>
((elength != (RTEMS_RFS_DIR_ENTRY_SIZE + 2)) ||
11b8e2: 80 78 0a 2e cmpb $0x2e,0xa(%eax)
11b8e6: 75 20 jne 11b908 <rtems_rfs_dir_empty+0x183><== NEVER TAKEN
(entry[RTEMS_RFS_DIR_ENTRY_SIZE] != '.') ||
11b8e8: 80 78 0b 2e cmpb $0x2e,0xb(%eax)
11b8ec: 75 1a jne 11b908 <rtems_rfs_dir_empty+0x183><== NEVER TAKEN
{
empty = false;
break;
}
entry += elength;
11b8ee: 01 f0 add %esi,%eax
offset += elength;
11b8f0: 01 75 84 add %esi,-0x7c(%ebp)
break;
entry = rtems_rfs_buffer_data (&buffer);
offset = 0;
while (offset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
11b8f3: 8b 55 80 mov -0x80(%ebp),%edx
11b8f6: 39 55 84 cmp %edx,-0x7c(%ebp)
11b8f9: 0f 82 4a ff ff ff jb 11b849 <rtems_rfs_dir_empty+0xc4><== ALWAYS TAKEN
11b8ff: eb 34 jmp 11b935 <rtems_rfs_dir_empty+0x1b0><== NOT EXECUTED
if (empty)
{
rc = rtems_rfs_block_map_next_block (fs, &map, &block);
if (rc > 0)
{
if (rc == ENXIO)
11b901: 83 fb 06 cmp $0x6,%ebx
11b904: 74 06 je 11b90c <rtems_rfs_dir_empty+0x187><== ALWAYS TAKEN
11b906: eb 06 jmp 11b90e <rtems_rfs_dir_empty+0x189><== NOT EXECUTED
* the directory is not empty.
*/
if (((elength != (RTEMS_RFS_DIR_ENTRY_SIZE + 1)) ||
(entry[RTEMS_RFS_DIR_ENTRY_SIZE] != '.')) &&
((elength != (RTEMS_RFS_DIR_ENTRY_SIZE + 2)) ||
(entry[RTEMS_RFS_DIR_ENTRY_SIZE] != '.') ||
11b908: 31 c0 xor %eax,%eax
11b90a: eb 04 jmp 11b910 <rtems_rfs_dir_empty+0x18b>
{
rc = rtems_rfs_block_map_next_block (fs, &map, &block);
if (rc > 0)
{
if (rc == ENXIO)
rc = 0;
11b90c: 31 db xor %ebx,%ebx
if (empty)
{
rc = rtems_rfs_block_map_next_block (fs, &map, &block);
if (rc > 0)
{
if (rc == ENXIO)
11b90e: b0 01 mov $0x1,%al
break;
}
}
}
if ((rc == 0) && !empty)
11b910: 84 c0 test %al,%al
11b912: 75 06 jne 11b91a <rtems_rfs_dir_empty+0x195>
11b914: 85 db test %ebx,%ebx
11b916: 75 02 jne 11b91a <rtems_rfs_dir_empty+0x195><== NEVER TAKEN
rc = ENOTEMPTY;
11b918: b3 5a mov $0x5a,%bl
rtems_rfs_buffer_handle_close (fs, &buffer);
11b91a: 8d 55 8c lea -0x74(%ebp),%edx
11b91d: 89 f8 mov %edi,%eax
11b91f: e8 74 ef ff ff call 11a898 <rtems_rfs_buffer_handle_close>
rtems_rfs_block_map_close (fs, &map);
11b924: 56 push %esi
11b925: 56 push %esi
11b926: 8d 45 98 lea -0x68(%ebp),%eax
11b929: 50 push %eax
11b92a: 57 push %edi
11b92b: e8 19 de ff ff call 119749 <rtems_rfs_block_map_close>
11b930: 83 c4 10 add $0x10,%esp
11b933: eb 1e jmp 11b953 <rtems_rfs_dir_empty+0x1ce>
offset += elength;
}
if (empty)
{
rc = rtems_rfs_block_map_next_block (fs, &map, &block);
11b935: 53 push %ebx
11b936: 8d 45 88 lea -0x78(%ebp),%eax
11b939: 50 push %eax
11b93a: 8d 45 98 lea -0x68(%ebp),%eax
11b93d: 50 push %eax
11b93e: 57 push %edi
11b93f: e8 2a e1 ff ff call 119a6e <rtems_rfs_block_map_next_block>
11b944: 89 c3 mov %eax,%ebx
if (rc > 0)
11b946: 83 c4 10 add $0x10,%esp
11b949: 85 c0 test %eax,%eax
11b94b: 0f 8e c1 fe ff ff jle 11b812 <rtems_rfs_dir_empty+0x8d><== NEVER TAKEN
11b951: eb ae jmp 11b901 <rtems_rfs_dir_empty+0x17c>
rc = ENOTEMPTY;
rtems_rfs_buffer_handle_close (fs, &buffer);
rtems_rfs_block_map_close (fs, &map);
return rc;
}
11b953: 89 d8 mov %ebx,%eax
11b955: 8d 65 f4 lea -0xc(%ebp),%esp
11b958: 5b pop %ebx
11b959: 5e pop %esi
11b95a: 5f pop %edi
11b95b: 5d pop %ebp
11b95c: c3 ret
0011ed28 <rtems_rfs_dir_hash>:
*/
#define initval (20010928)
uint32_t
rtems_rfs_dir_hash (const void *key, size_t length)
{
11ed28: 55 push %ebp
11ed29: 89 e5 mov %esp,%ebp
11ed2b: 57 push %edi
11ed2c: 56 push %esi
11ed2d: 53 push %ebx
11ed2e: 8b 4d 08 mov 0x8(%ebp),%ecx
11ed31: 8b 5d 0c mov 0xc(%ebp),%ebx
uint32_t a,b,c; /* internal state */
union { const void *ptr; size_t i; } u; /* needed for Mac Powerbook G4 */
/* Set up the internal state */
a = b = c = 0xdeadbeef + ((uint32_t)length) + initval;
11ed34: 8d 83 9f 16 df df lea -0x2020e961(%ebx),%eax
u.ptr = key;
if (HASH_LITTLE_ENDIAN && ((u.i & 0x3) == 0)) {
11ed3a: 89 c2 mov %eax,%edx
11ed3c: 89 c6 mov %eax,%esi
11ed3e: f6 c1 03 test $0x3,%cl
11ed41: 0f 85 f4 00 00 00 jne 11ee3b <rtems_rfs_dir_hash+0x113>
11ed47: eb 5d jmp 11eda6 <rtems_rfs_dir_hash+0x7e>
/*const uint8_t *k8;*/
/*------ all but last block: aligned reads and affect 32 bits of (a,b,c) */
while (length > 12)
{
a += k[0];
11ed49: 03 31 add (%ecx),%esi
b += k[1];
11ed4b: 8b 79 04 mov 0x4(%ecx),%edi
11ed4e: 01 d7 add %edx,%edi
c += k[2];
11ed50: 03 41 08 add 0x8(%ecx),%eax
mix(a,b,c);
11ed53: 29 c6 sub %eax,%esi
11ed55: 89 c2 mov %eax,%edx
11ed57: c1 c2 04 rol $0x4,%edx
11ed5a: 31 d6 xor %edx,%esi
11ed5c: 8d 14 38 lea (%eax,%edi,1),%edx
11ed5f: 89 f8 mov %edi,%eax
11ed61: 29 f0 sub %esi,%eax
11ed63: 89 f7 mov %esi,%edi
11ed65: c1 c7 06 rol $0x6,%edi
11ed68: 31 c7 xor %eax,%edi
11ed6a: 8d 04 16 lea (%esi,%edx,1),%eax
11ed6d: 89 d6 mov %edx,%esi
11ed6f: 29 fe sub %edi,%esi
11ed71: 89 fa mov %edi,%edx
11ed73: c1 c2 08 rol $0x8,%edx
11ed76: 31 f2 xor %esi,%edx
11ed78: 8d 34 07 lea (%edi,%eax,1),%esi
11ed7b: 89 c7 mov %eax,%edi
11ed7d: 29 d7 sub %edx,%edi
11ed7f: 89 d0 mov %edx,%eax
11ed81: c1 c0 10 rol $0x10,%eax
11ed84: 31 f8 xor %edi,%eax
11ed86: 8d 3c 32 lea (%edx,%esi,1),%edi
11ed89: 29 c6 sub %eax,%esi
11ed8b: 89 c2 mov %eax,%edx
11ed8d: c1 c2 13 rol $0x13,%edx
11ed90: 31 f2 xor %esi,%edx
11ed92: 8d 34 38 lea (%eax,%edi,1),%esi
11ed95: 29 d7 sub %edx,%edi
11ed97: 89 d0 mov %edx,%eax
11ed99: c1 c0 04 rol $0x4,%eax
11ed9c: 31 f8 xor %edi,%eax
11ed9e: 01 f2 add %esi,%edx
length -= 12;
11eda0: 83 eb 0c sub $0xc,%ebx
k += 3;
11eda3: 83 c1 0c add $0xc,%ecx
if (HASH_LITTLE_ENDIAN && ((u.i & 0x3) == 0)) {
const uint32_t *k = (const uint32_t *)key; /* read 32-bit chunks */
/*const uint8_t *k8;*/
/*------ all but last block: aligned reads and affect 32 bits of (a,b,c) */
while (length > 12)
11eda6: 83 fb 0c cmp $0xc,%ebx
11eda9: 77 9e ja 11ed49 <rtems_rfs_dir_hash+0x21>
* still catch it and complain. The masking trick does make the hash
* noticably faster for short strings (like English words).
*/
#ifndef VALGRIND
switch(length)
11edab: 4b dec %ebx
11edac: 83 fb 0b cmp $0xb,%ebx
11edaf: 0f 87 00 03 00 00 ja 11f0b5 <rtems_rfs_dir_hash+0x38d><== NEVER TAKEN
11edb5: 8b 39 mov (%ecx),%edi
11edb7: ff 24 9d 84 22 13 00 jmp *0x132284(,%ebx,4)
{
case 12: c+=k[2]; b+=k[1]; a+=k[0]; break;
11edbe: 03 41 08 add 0x8(%ecx),%eax
11edc1: eb 17 jmp 11edda <rtems_rfs_dir_hash+0xb2>
case 11: c+=k[2]&0xffffff; b+=k[1]; a+=k[0]; break;
11edc3: 8b 59 08 mov 0x8(%ecx),%ebx
11edc6: 81 e3 ff ff ff 00 and $0xffffff,%ebx
11edcc: eb 0a jmp 11edd8 <rtems_rfs_dir_hash+0xb0>
case 10: c+=k[2]&0xffff; b+=k[1]; a+=k[0]; break;
11edce: 0f b7 59 08 movzwl 0x8(%ecx),%ebx
11edd2: eb 04 jmp 11edd8 <rtems_rfs_dir_hash+0xb0>
case 9 : c+=k[2]&0xff; b+=k[1]; a+=k[0]; break;
11edd4: 0f b6 59 08 movzbl 0x8(%ecx),%ebx
11edd8: 01 d8 add %ebx,%eax
11edda: 03 51 04 add 0x4(%ecx),%edx
11eddd: 03 31 add (%ecx),%esi
11eddf: 89 f1 mov %esi,%ecx
11ede1: e9 94 02 00 00 jmp 11f07a <rtems_rfs_dir_hash+0x352>
case 8 : b+=k[1]; a+=k[0]; break;
11ede6: 03 51 04 add 0x4(%ecx),%edx
11ede9: eb 21 jmp 11ee0c <rtems_rfs_dir_hash+0xe4>
case 7 : b+=k[1]&0xffffff; a+=k[0]; break;
11edeb: 8b 49 04 mov 0x4(%ecx),%ecx
11edee: 81 e1 ff ff ff 00 and $0xffffff,%ecx
11edf4: eb 14 jmp 11ee0a <rtems_rfs_dir_hash+0xe2>
case 6 : b+=k[1]&0xffff; a+=k[0]; break;
11edf6: 8b 49 04 mov 0x4(%ecx),%ecx
11edf9: 81 e1 ff ff 00 00 and $0xffff,%ecx
11edff: eb 09 jmp 11ee0a <rtems_rfs_dir_hash+0xe2>
case 5 : b+=k[1]&0xff; a+=k[0]; break;
11ee01: 8b 49 04 mov 0x4(%ecx),%ecx
11ee04: 81 e1 ff 00 00 00 and $0xff,%ecx
11ee0a: 01 ca add %ecx,%edx
case 4 : a+=k[0]; break;
11ee0c: 8d 0c 3e lea (%esi,%edi,1),%ecx
11ee0f: e9 66 02 00 00 jmp 11f07a <rtems_rfs_dir_hash+0x352>
case 3 : a+=k[0]&0xffffff; break;
11ee14: 89 f9 mov %edi,%ecx
11ee16: 81 e1 ff ff ff 00 and $0xffffff,%ecx
11ee1c: e9 57 02 00 00 jmp 11f078 <rtems_rfs_dir_hash+0x350>
case 2 : a+=k[0]&0xffff; break;
11ee21: 89 f9 mov %edi,%ecx
11ee23: 81 e1 ff ff 00 00 and $0xffff,%ecx
11ee29: e9 4a 02 00 00 jmp 11f078 <rtems_rfs_dir_hash+0x350>
case 1 : a+=k[0]&0xff; break;
11ee2e: 89 f9 mov %edi,%ecx
11ee30: 81 e1 ff 00 00 00 and $0xff,%ecx
11ee36: e9 3d 02 00 00 jmp 11f078 <rtems_rfs_dir_hash+0x350>
case 0 : return c;
}
#endif /* !valgrind */
} else if (HASH_LITTLE_ENDIAN && ((u.i & 0x1) == 0)) {
11ee3b: f6 c1 01 test $0x1,%cl
11ee3e: 0f 84 83 00 00 00 je 11eec7 <rtems_rfs_dir_hash+0x19f>
11ee44: e9 b5 01 00 00 jmp 11effe <rtems_rfs_dir_hash+0x2d6>
const uint8_t *k8;
/*--------------- all but last block: aligned reads and different mixing */
while (length > 12)
{
a += k[0] + (((uint32_t)k[1])<<16);
11ee49: 0f b7 39 movzwl (%ecx),%edi
11ee4c: 01 fe add %edi,%esi
11ee4e: 0f b7 79 02 movzwl 0x2(%ecx),%edi
11ee52: c1 e7 10 shl $0x10,%edi
11ee55: 01 fe add %edi,%esi
b += k[2] + (((uint32_t)k[3])<<16);
11ee57: 0f b7 79 04 movzwl 0x4(%ecx),%edi
11ee5b: 01 fa add %edi,%edx
11ee5d: 0f b7 79 06 movzwl 0x6(%ecx),%edi
11ee61: c1 e7 10 shl $0x10,%edi
11ee64: 01 d7 add %edx,%edi
c += k[4] + (((uint32_t)k[5])<<16);
11ee66: 0f b7 51 08 movzwl 0x8(%ecx),%edx
11ee6a: 01 d0 add %edx,%eax
11ee6c: 0f b7 51 0a movzwl 0xa(%ecx),%edx
11ee70: c1 e2 10 shl $0x10,%edx
11ee73: 01 c2 add %eax,%edx
mix(a,b,c);
11ee75: 29 d6 sub %edx,%esi
11ee77: 89 d0 mov %edx,%eax
11ee79: c1 c0 04 rol $0x4,%eax
11ee7c: 31 c6 xor %eax,%esi
11ee7e: 01 fa add %edi,%edx
11ee80: 89 f8 mov %edi,%eax
11ee82: 29 f0 sub %esi,%eax
11ee84: 89 f7 mov %esi,%edi
11ee86: c1 c7 06 rol $0x6,%edi
11ee89: 31 c7 xor %eax,%edi
11ee8b: 8d 04 16 lea (%esi,%edx,1),%eax
11ee8e: 89 d6 mov %edx,%esi
11ee90: 29 fe sub %edi,%esi
11ee92: 89 fa mov %edi,%edx
11ee94: c1 c2 08 rol $0x8,%edx
11ee97: 31 f2 xor %esi,%edx
11ee99: 8d 34 07 lea (%edi,%eax,1),%esi
11ee9c: 89 c7 mov %eax,%edi
11ee9e: 29 d7 sub %edx,%edi
11eea0: 89 d0 mov %edx,%eax
11eea2: c1 c0 10 rol $0x10,%eax
11eea5: 31 f8 xor %edi,%eax
11eea7: 8d 3c 32 lea (%edx,%esi,1),%edi
11eeaa: 29 c6 sub %eax,%esi
11eeac: 89 c2 mov %eax,%edx
11eeae: c1 c2 13 rol $0x13,%edx
11eeb1: 31 f2 xor %esi,%edx
11eeb3: 8d 34 38 lea (%eax,%edi,1),%esi
11eeb6: 29 d7 sub %edx,%edi
11eeb8: 89 d0 mov %edx,%eax
11eeba: c1 c0 04 rol $0x4,%eax
11eebd: 31 f8 xor %edi,%eax
11eebf: 01 f2 add %esi,%edx
length -= 12;
11eec1: 83 eb 0c sub $0xc,%ebx
k += 6;
11eec4: 83 c1 0c add $0xc,%ecx
} else if (HASH_LITTLE_ENDIAN && ((u.i & 0x1) == 0)) {
const uint16_t *k = (const uint16_t *)key; /* read 16-bit chunks */
const uint8_t *k8;
/*--------------- all but last block: aligned reads and different mixing */
while (length > 12)
11eec7: 83 fb 0c cmp $0xc,%ebx
11eeca: 0f 87 79 ff ff ff ja 11ee49 <rtems_rfs_dir_hash+0x121>
k += 6;
}
/*----------------------------- handle the last (probably partial) block */
k8 = (const uint8_t *)k;
switch(length)
11eed0: 4b dec %ebx
11eed1: 83 fb 0b cmp $0xb,%ebx
11eed4: 0f 87 db 01 00 00 ja 11f0b5 <rtems_rfs_dir_hash+0x38d><== NEVER TAKEN
11eeda: ff 24 9d b4 22 13 00 jmp *0x1322b4(,%ebx,4)
{
case 12: c+=k[4]+(((uint32_t)k[5])<<16);
11eee1: 0f b7 59 08 movzwl 0x8(%ecx),%ebx <== NOT EXECUTED
11eee5: 01 d8 add %ebx,%eax <== NOT EXECUTED
11eee7: 0f b7 59 0a movzwl 0xa(%ecx),%ebx <== NOT EXECUTED
11eeeb: c1 e3 10 shl $0x10,%ebx <== NOT EXECUTED
11eeee: eb 13 jmp 11ef03 <rtems_rfs_dir_hash+0x1db><== NOT EXECUTED
b+=k[2]+(((uint32_t)k[3])<<16);
a+=k[0]+(((uint32_t)k[1])<<16);
break;
case 11: c+=((uint32_t)k8[10])<<16; /* fall through */
11eef0: 0f b6 59 0a movzbl 0xa(%ecx),%ebx
11eef4: c1 e3 10 shl $0x10,%ebx
11eef7: 01 d8 add %ebx,%eax
case 10: c+=k[4];
11eef9: 0f b7 59 08 movzwl 0x8(%ecx),%ebx
11eefd: eb 04 jmp 11ef03 <rtems_rfs_dir_hash+0x1db>
b+=k[2]+(((uint32_t)k[3])<<16);
a+=k[0]+(((uint32_t)k[1])<<16);
break;
case 9 : c+=k8[8]; /* fall through */
11eeff: 0f b6 59 08 movzbl 0x8(%ecx),%ebx <== NOT EXECUTED
11ef03: 01 d8 add %ebx,%eax
case 8 : b+=k[2]+(((uint32_t)k[3])<<16);
11ef05: 0f b7 59 04 movzwl 0x4(%ecx),%ebx
11ef09: 01 da add %ebx,%edx
11ef0b: 0f b7 59 06 movzwl 0x6(%ecx),%ebx
11ef0f: c1 e3 10 shl $0x10,%ebx
11ef12: eb 13 jmp 11ef27 <rtems_rfs_dir_hash+0x1ff>
a+=k[0]+(((uint32_t)k[1])<<16);
break;
case 7 : b+=((uint32_t)k8[6])<<16; /* fall through */
11ef14: 0f b6 59 06 movzbl 0x6(%ecx),%ebx <== NOT EXECUTED
11ef18: c1 e3 10 shl $0x10,%ebx <== NOT EXECUTED
11ef1b: 01 da add %ebx,%edx <== NOT EXECUTED
case 6 : b+=k[2];
11ef1d: 0f b7 59 04 movzwl 0x4(%ecx),%ebx
11ef21: eb 04 jmp 11ef27 <rtems_rfs_dir_hash+0x1ff>
a+=k[0]+(((uint32_t)k[1])<<16);
break;
case 5 : b+=k8[4]; /* fall through */
11ef23: 0f b6 59 04 movzbl 0x4(%ecx),%ebx
11ef27: 01 da add %ebx,%edx
case 4 : a+=k[0]+(((uint32_t)k[1])<<16);
11ef29: 0f b7 19 movzwl (%ecx),%ebx
11ef2c: 01 de add %ebx,%esi
11ef2e: 0f b7 59 02 movzwl 0x2(%ecx),%ebx
11ef32: c1 e3 10 shl $0x10,%ebx
11ef35: 8d 0c 1e lea (%esi,%ebx,1),%ecx
break;
11ef38: e9 3d 01 00 00 jmp 11f07a <rtems_rfs_dir_hash+0x352>
case 3 : a+=((uint32_t)k8[2])<<16; /* fall through */
11ef3d: 0f b6 59 02 movzbl 0x2(%ecx),%ebx
11ef41: c1 e3 10 shl $0x10,%ebx
11ef44: 01 de add %ebx,%esi
case 2 : a+=k[0];
11ef46: 0f b7 09 movzwl (%ecx),%ecx
11ef49: e9 2a 01 00 00 jmp 11f078 <rtems_rfs_dir_hash+0x350>
const uint8_t *k = (const uint8_t *)key;
/*--------------- all but the last block: affect some 32 bits of (a,b,c) */
while (length > 12)
{
a += k[0];
11ef4e: 0f b6 39 movzbl (%ecx),%edi
11ef51: 01 fe add %edi,%esi
a += ((uint32_t)k[1])<<8;
11ef53: 0f b6 79 01 movzbl 0x1(%ecx),%edi
11ef57: c1 e7 08 shl $0x8,%edi
11ef5a: 01 fe add %edi,%esi
a += ((uint32_t)k[2])<<16;
11ef5c: 0f b6 79 02 movzbl 0x2(%ecx),%edi
11ef60: c1 e7 10 shl $0x10,%edi
11ef63: 01 fe add %edi,%esi
a += ((uint32_t)k[3])<<24;
11ef65: 0f b6 79 03 movzbl 0x3(%ecx),%edi
11ef69: c1 e7 18 shl $0x18,%edi
11ef6c: 01 fe add %edi,%esi
b += k[4];
11ef6e: 0f b6 79 04 movzbl 0x4(%ecx),%edi
11ef72: 01 fa add %edi,%edx
b += ((uint32_t)k[5])<<8;
11ef74: 0f b6 79 05 movzbl 0x5(%ecx),%edi
11ef78: c1 e7 08 shl $0x8,%edi
11ef7b: 01 fa add %edi,%edx
b += ((uint32_t)k[6])<<16;
11ef7d: 0f b6 79 06 movzbl 0x6(%ecx),%edi
11ef81: c1 e7 10 shl $0x10,%edi
11ef84: 01 d7 add %edx,%edi
b += ((uint32_t)k[7])<<24;
11ef86: 0f b6 51 07 movzbl 0x7(%ecx),%edx
11ef8a: c1 e2 18 shl $0x18,%edx
11ef8d: 01 d7 add %edx,%edi
c += k[8];
11ef8f: 0f b6 51 08 movzbl 0x8(%ecx),%edx
11ef93: 01 d0 add %edx,%eax
c += ((uint32_t)k[9])<<8;
11ef95: 0f b6 51 09 movzbl 0x9(%ecx),%edx
11ef99: c1 e2 08 shl $0x8,%edx
11ef9c: 01 d0 add %edx,%eax
c += ((uint32_t)k[10])<<16;
11ef9e: 0f b6 51 0a movzbl 0xa(%ecx),%edx
11efa2: c1 e2 10 shl $0x10,%edx
11efa5: 01 c2 add %eax,%edx
c += ((uint32_t)k[11])<<24;
11efa7: 0f b6 41 0b movzbl 0xb(%ecx),%eax
11efab: c1 e0 18 shl $0x18,%eax
11efae: 01 c2 add %eax,%edx
mix(a,b,c);
11efb0: 29 d6 sub %edx,%esi
11efb2: 89 d0 mov %edx,%eax
11efb4: c1 c0 04 rol $0x4,%eax
11efb7: 31 c6 xor %eax,%esi
11efb9: 01 fa add %edi,%edx
11efbb: 29 f7 sub %esi,%edi
11efbd: 89 f0 mov %esi,%eax
11efbf: c1 c0 06 rol $0x6,%eax
11efc2: 31 f8 xor %edi,%eax
11efc4: 8d 3c 16 lea (%esi,%edx,1),%edi
11efc7: 89 d6 mov %edx,%esi
11efc9: 29 c6 sub %eax,%esi
11efcb: 89 c2 mov %eax,%edx
11efcd: c1 c2 08 rol $0x8,%edx
11efd0: 31 f2 xor %esi,%edx
11efd2: 8d 34 38 lea (%eax,%edi,1),%esi
11efd5: 29 d7 sub %edx,%edi
11efd7: 89 d0 mov %edx,%eax
11efd9: c1 c0 10 rol $0x10,%eax
11efdc: 31 f8 xor %edi,%eax
11efde: 8d 3c 32 lea (%edx,%esi,1),%edi
11efe1: 29 c6 sub %eax,%esi
11efe3: 89 c2 mov %eax,%edx
11efe5: c1 c2 13 rol $0x13,%edx
11efe8: 31 f2 xor %esi,%edx
11efea: 8d 34 38 lea (%eax,%edi,1),%esi
11efed: 29 d7 sub %edx,%edi
11efef: 89 d0 mov %edx,%eax
11eff1: c1 c0 04 rol $0x4,%eax
11eff4: 31 f8 xor %edi,%eax
11eff6: 01 f2 add %esi,%edx
length -= 12;
11eff8: 83 eb 0c sub $0xc,%ebx
k += 12;
11effb: 83 c1 0c add $0xc,%ecx
} else { /* need to read the key one byte at a time */
const uint8_t *k = (const uint8_t *)key;
/*--------------- all but the last block: affect some 32 bits of (a,b,c) */
while (length > 12)
11effe: 83 fb 0c cmp $0xc,%ebx
11f001: 0f 87 47 ff ff ff ja 11ef4e <rtems_rfs_dir_hash+0x226>
length -= 12;
k += 12;
}
/*-------------------------------- last block: affect all 32 bits of (c) */
switch(length) /* all the case statements fall through */
11f007: 4b dec %ebx
11f008: 83 fb 0b cmp $0xb,%ebx
11f00b: 0f 87 a4 00 00 00 ja 11f0b5 <rtems_rfs_dir_hash+0x38d><== NEVER TAKEN
11f011: ff 24 9d e4 22 13 00 jmp *0x1322e4(,%ebx,4)
{
case 12: c+=((uint32_t)k[11])<<24;
11f018: 0f b6 59 0b movzbl 0xb(%ecx),%ebx <== NOT EXECUTED
11f01c: c1 e3 18 shl $0x18,%ebx <== NOT EXECUTED
11f01f: 01 d8 add %ebx,%eax <== NOT EXECUTED
case 11: c+=((uint32_t)k[10])<<16;
11f021: 0f b6 59 0a movzbl 0xa(%ecx),%ebx
11f025: c1 e3 10 shl $0x10,%ebx
11f028: 01 d8 add %ebx,%eax
case 10: c+=((uint32_t)k[9])<<8;
11f02a: 0f b6 59 09 movzbl 0x9(%ecx),%ebx
11f02e: c1 e3 08 shl $0x8,%ebx
11f031: 01 d8 add %ebx,%eax
case 9 : c+=k[8];
11f033: 0f b6 59 08 movzbl 0x8(%ecx),%ebx
11f037: 01 d8 add %ebx,%eax
case 8 : b+=((uint32_t)k[7])<<24;
11f039: 0f b6 59 07 movzbl 0x7(%ecx),%ebx
11f03d: c1 e3 18 shl $0x18,%ebx
11f040: 01 da add %ebx,%edx
case 7 : b+=((uint32_t)k[6])<<16;
11f042: 0f b6 59 06 movzbl 0x6(%ecx),%ebx
11f046: c1 e3 10 shl $0x10,%ebx
11f049: 01 da add %ebx,%edx
case 6 : b+=((uint32_t)k[5])<<8;
11f04b: 0f b6 59 05 movzbl 0x5(%ecx),%ebx
11f04f: c1 e3 08 shl $0x8,%ebx
11f052: 01 da add %ebx,%edx
case 5 : b+=k[4];
11f054: 0f b6 59 04 movzbl 0x4(%ecx),%ebx
11f058: 01 da add %ebx,%edx
case 4 : a+=((uint32_t)k[3])<<24;
11f05a: 0f b6 59 03 movzbl 0x3(%ecx),%ebx
11f05e: c1 e3 18 shl $0x18,%ebx
11f061: 01 de add %ebx,%esi
case 3 : a+=((uint32_t)k[2])<<16;
11f063: 0f b6 59 02 movzbl 0x2(%ecx),%ebx
11f067: c1 e3 10 shl $0x10,%ebx
11f06a: 01 de add %ebx,%esi
case 2 : a+=((uint32_t)k[1])<<8;
11f06c: 0f b6 59 01 movzbl 0x1(%ecx),%ebx
11f070: c1 e3 08 shl $0x8,%ebx
11f073: 01 de add %ebx,%esi
case 1 : a+=k[0];
11f075: 0f b6 09 movzbl (%ecx),%ecx
11f078: 01 f1 add %esi,%ecx
break;
case 0 : return c;
}
}
final(a,b,c);
11f07a: 31 d0 xor %edx,%eax
11f07c: 89 d3 mov %edx,%ebx
11f07e: c1 c3 0e rol $0xe,%ebx
11f081: 29 d8 sub %ebx,%eax
11f083: 31 c1 xor %eax,%ecx
11f085: 89 c3 mov %eax,%ebx
11f087: c1 c3 0b rol $0xb,%ebx
11f08a: 29 d9 sub %ebx,%ecx
11f08c: 31 ca xor %ecx,%edx
11f08e: 89 cb mov %ecx,%ebx
11f090: c1 c3 19 rol $0x19,%ebx
11f093: 29 da sub %ebx,%edx
11f095: 31 d0 xor %edx,%eax
11f097: 89 d3 mov %edx,%ebx
11f099: c1 c3 10 rol $0x10,%ebx
11f09c: 29 d8 sub %ebx,%eax
11f09e: 31 c1 xor %eax,%ecx
11f0a0: 89 c3 mov %eax,%ebx
11f0a2: c1 c3 04 rol $0x4,%ebx
11f0a5: 29 d9 sub %ebx,%ecx
11f0a7: 31 ca xor %ecx,%edx
11f0a9: c1 c1 0e rol $0xe,%ecx
11f0ac: 29 ca sub %ecx,%edx
11f0ae: 31 d0 xor %edx,%eax
11f0b0: c1 c2 18 rol $0x18,%edx
11f0b3: 29 d0 sub %edx,%eax
return c;
}
11f0b5: 5b pop %ebx
11f0b6: 5e pop %esi
11f0b7: 5f pop %edi
11f0b8: 5d pop %ebp
11f0b9: c3 ret
0011a8c0 <rtems_rfs_dir_lookup_ino>:
rtems_rfs_inode_handle* inode,
const char* name,
int length,
rtems_rfs_ino* ino,
uint32_t* offset)
{
11a8c0: 55 push %ebp
11a8c1: 89 e5 mov %esp,%ebp
11a8c3: 57 push %edi
11a8c4: 56 push %esi
11a8c5: 53 push %ebx
11a8c6: 81 ec 84 00 00 00 sub $0x84,%esp
11a8cc: 8b 7d 08 mov 0x8(%ebp),%edi
rtems_rfs_block_map map;
rtems_rfs_buffer_handle entries;
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_LOOKUP_INO))
11a8cf: 6a 00 push $0x0
11a8d1: 68 00 00 00 04 push $0x4000000
11a8d6: e8 c1 8f ff ff call 11389c <rtems_rfs_trace>
11a8db: 83 c4 10 add $0x10,%esp
11a8de: 84 c0 test %al,%al
11a8e0: 74 44 je 11a926 <rtems_rfs_dir_lookup_ino+0x66><== ALWAYS TAKEN
{
int c;
printf ("rtems-rfs: dir-lookup-ino: lookup ino: root=%" PRId32 ", path=",
11a8e2: 50 push %eax <== NOT EXECUTED
11a8e3: 50 push %eax <== NOT EXECUTED
11a8e4: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
11a8e7: ff 71 08 pushl 0x8(%ecx) <== NOT EXECUTED
11a8ea: 68 6d 12 13 00 push $0x13126d <== NOT EXECUTED
11a8ef: e8 48 5a 00 00 call 12033c <printf> <== NOT EXECUTED
inode->ino);
for (c = 0; c < length; c++)
11a8f4: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11a8f7: 31 db xor %ebx,%ebx <== NOT EXECUTED
11a8f9: eb 14 jmp 11a90f <rtems_rfs_dir_lookup_ino+0x4f><== NOT EXECUTED
printf ("%c", name[c]);
11a8fb: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11a8fe: 8b 55 10 mov 0x10(%ebp),%edx <== NOT EXECUTED
11a901: 0f be 04 1a movsbl (%edx,%ebx,1),%eax <== NOT EXECUTED
11a905: 50 push %eax <== NOT EXECUTED
11a906: e8 9d 5b 00 00 call 1204a8 <putchar> <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_LOOKUP_INO))
{
int c;
printf ("rtems-rfs: dir-lookup-ino: lookup ino: root=%" PRId32 ", path=",
inode->ino);
for (c = 0; c < length; c++)
11a90b: 43 inc %ebx <== NOT EXECUTED
11a90c: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11a90f: 3b 5d 14 cmp 0x14(%ebp),%ebx <== NOT EXECUTED
11a912: 7c e7 jl 11a8fb <rtems_rfs_dir_lookup_ino+0x3b><== NOT EXECUTED
printf ("%c", name[c]);
printf (", len=%d\n", length);
11a914: 50 push %eax <== NOT EXECUTED
11a915: 50 push %eax <== NOT EXECUTED
11a916: ff 75 14 pushl 0x14(%ebp) <== NOT EXECUTED
11a919: 68 a4 12 13 00 push $0x1312a4 <== NOT EXECUTED
11a91e: e8 19 5a 00 00 call 12033c <printf> <== NOT EXECUTED
11a923: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
*ino = RTEMS_RFS_EMPTY_INO;
11a926: 8b 4d 18 mov 0x18(%ebp),%ecx
11a929: c7 01 00 00 00 00 movl $0x0,(%ecx)
*offset = 0;
11a92f: 8b 4d 1c mov 0x1c(%ebp),%ecx
11a932: c7 01 00 00 00 00 movl $0x0,(%ecx)
rc = rtems_rfs_block_map_open (fs, inode, &map);
11a938: 50 push %eax
11a939: 8d 75 98 lea -0x68(%ebp),%esi
11a93c: 56 push %esi
11a93d: ff 75 0c pushl 0xc(%ebp)
11a940: 57 push %edi
11a941: e8 5c ec ff ff call 1195a2 <rtems_rfs_block_map_open>
11a946: 89 c3 mov %eax,%ebx
if (rc > 0)
11a948: 83 c4 10 add $0x10,%esp
11a94b: 85 c0 test %eax,%eax
11a94d: 7e 3c jle 11a98b <rtems_rfs_dir_lookup_ino+0xcb><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_LOOKUP_INO))
11a94f: 56 push %esi <== NOT EXECUTED
11a950: 56 push %esi <== NOT EXECUTED
11a951: 6a 00 push $0x0 <== NOT EXECUTED
11a953: 68 00 00 00 04 push $0x4000000 <== NOT EXECUTED
11a958: e8 3f 8f ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11a95d: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11a960: 84 c0 test %al,%al <== NOT EXECUTED
11a962: 0f 84 c4 03 00 00 je 11ad2c <rtems_rfs_dir_lookup_ino+0x46c><== NOT EXECUTED
printf ("rtems-rfs: dir-lookup-ino: map open failed for ino %" PRIu32 ": %d: %s",
11a968: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11a96b: 53 push %ebx <== NOT EXECUTED
11a96c: e8 53 67 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11a971: 50 push %eax <== NOT EXECUTED
11a972: 53 push %ebx <== NOT EXECUTED
11a973: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
11a976: ff 71 08 pushl 0x8(%ecx) <== NOT EXECUTED
11a979: 68 ae 12 13 00 push $0x1312ae <== NOT EXECUTED
11a97e: e8 b9 59 00 00 call 12033c <printf> <== NOT EXECUTED
11a983: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
11a986: e9 a1 03 00 00 jmp 11ad2c <rtems_rfs_dir_lookup_ino+0x46c><== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
11a98b: c6 45 8c 00 movb $0x0,-0x74(%ebp)
handle->bnum = 0;
11a98f: c7 45 90 00 00 00 00 movl $0x0,-0x70(%ebp)
handle->buffer = NULL;
11a996: c7 45 94 00 00 00 00 movl $0x0,-0x6c(%ebp)
uint32_t hash;
/*
* Calculate the hash of the look up string.
*/
hash = rtems_rfs_dir_hash (name, length);
11a99d: 51 push %ecx
11a99e: 51 push %ecx
11a99f: ff 75 14 pushl 0x14(%ebp)
11a9a2: ff 75 10 pushl 0x10(%ebp)
11a9a5: e8 7e 43 00 00 call 11ed28 <rtems_rfs_dir_hash>
11a9aa: 89 85 7c ff ff ff mov %eax,-0x84(%ebp)
/*
* Locate the first block. The map points to the start after open so just
* seek 0. If an error the block will be 0.
*/
rc = rtems_rfs_block_map_seek (fs, &map, 0, &block);
11a9b0: 8d 55 88 lea -0x78(%ebp),%edx
11a9b3: 89 14 24 mov %edx,(%esp)
11a9b6: 6a 00 push $0x0
11a9b8: 6a 00 push $0x0
11a9ba: 56 push %esi
11a9bb: 57 push %edi
11a9bc: 89 95 78 ff ff ff mov %edx,-0x88(%ebp)
11a9c2: e8 3d f0 ff ff call 119a04 <rtems_rfs_block_map_seek>
11a9c7: 89 c3 mov %eax,%ebx
if (rc > 0)
11a9c9: 83 c4 20 add $0x20,%esp
11a9cc: 85 c0 test %eax,%eax
11a9ce: 0f 8e e0 02 00 00 jle 11acb4 <rtems_rfs_dir_lookup_ino+0x3f4><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_LOOKUP_INO))
11a9d4: 52 push %edx <== NOT EXECUTED
11a9d5: 52 push %edx <== NOT EXECUTED
11a9d6: 6a 00 push $0x0 <== NOT EXECUTED
11a9d8: 68 00 00 00 04 push $0x4000000 <== NOT EXECUTED
11a9dd: e8 ba 8e ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11a9e2: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11a9e5: 84 c0 test %al,%al <== NOT EXECUTED
11a9e7: 74 1b je 11aa04 <rtems_rfs_dir_lookup_ino+0x144><== NOT EXECUTED
printf ("rtems-rfs: dir-lookup-ino: block map find failed: %d: %s\n",
11a9e9: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11a9ec: 53 push %ebx <== NOT EXECUTED
11a9ed: e8 d2 66 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11a9f2: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11a9f5: 50 push %eax <== NOT EXECUTED
11a9f6: 53 push %ebx <== NOT EXECUTED
11a9f7: 68 ed 12 13 00 push $0x1312ed <== NOT EXECUTED
11a9fc: e8 3b 59 00 00 call 12033c <printf> <== NOT EXECUTED
11aa01: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rc, strerror (rc));
if (rc == ENXIO)
11aa04: 83 fb 06 cmp $0x6,%ebx <== NOT EXECUTED
11aa07: 0f 85 dc 02 00 00 jne 11ace9 <rtems_rfs_dir_lookup_ino+0x429><== NOT EXECUTED
rc = ENOENT;
11aa0d: b3 02 mov $0x2,%bl <== NOT EXECUTED
11aa0f: e9 d5 02 00 00 jmp 11ace9 <rtems_rfs_dir_lookup_ino+0x429><== NOT EXECUTED
while ((rc == 0) && block)
{
uint8_t* entry;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_LOOKUP_INO))
11aa14: 50 push %eax
11aa15: 50 push %eax
11aa16: 6a 00 push $0x0
11aa18: 68 00 00 00 04 push $0x4000000
11aa1d: e8 7a 8e ff ff call 11389c <rtems_rfs_trace>
11aa22: 83 c4 10 add $0x10,%esp
11aa25: 84 c0 test %al,%al
11aa27: 74 17 je 11aa40 <rtems_rfs_dir_lookup_ino+0x180><== ALWAYS TAKEN
printf ("rtems-rfs: dir-lookup-ino: block read, ino=%" PRIu32 " bno=%" PRId32 "\n",
11aa29: 50 push %eax <== NOT EXECUTED
11aa2a: ff 75 a8 pushl -0x58(%ebp) <== NOT EXECUTED
11aa2d: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
11aa30: ff 71 08 pushl 0x8(%ecx) <== NOT EXECUTED
11aa33: 68 27 13 13 00 push $0x131327 <== NOT EXECUTED
11aa38: e8 ff 58 00 00 call 12033c <printf> <== NOT EXECUTED
11aa3d: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rtems_rfs_inode_ino (inode), map.bpos.bno);
rc = rtems_rfs_buffer_handle_request (fs, &entries, block, true);
11aa40: 6a 01 push $0x1
11aa42: ff 75 88 pushl -0x78(%ebp)
11aa45: 8d 45 8c lea -0x74(%ebp),%eax
11aa48: 50 push %eax
11aa49: 57 push %edi
11aa4a: e8 5b f8 ff ff call 11a2aa <rtems_rfs_buffer_handle_request>
11aa4f: 89 45 80 mov %eax,-0x80(%ebp)
if (rc > 0)
11aa52: 83 c4 10 add $0x10,%esp
11aa55: 85 c0 test %eax,%eax
11aa57: 7e 45 jle 11aa9e <rtems_rfs_dir_lookup_ino+0x1de><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_LOOKUP_INO))
11aa59: 50 push %eax <== NOT EXECUTED
11aa5a: 50 push %eax <== NOT EXECUTED
11aa5b: 6a 00 push $0x0 <== NOT EXECUTED
11aa5d: 68 00 00 00 04 push $0x4000000 <== NOT EXECUTED
11aa62: e8 35 8e ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11aa67: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11aa6a: 84 c0 test %al,%al <== NOT EXECUTED
11aa6c: 0f 84 9e 02 00 00 je 11ad10 <rtems_rfs_dir_lookup_ino+0x450><== NOT EXECUTED
printf ("rtems-rfs: dir-lookup-ino: block read, ino=%" PRIu32 " block=%" PRId32 ": %d: %s\n",
11aa72: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11aa75: ff 75 80 pushl -0x80(%ebp) <== NOT EXECUTED
11aa78: e8 47 66 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11aa7d: 89 04 24 mov %eax,(%esp) <== NOT EXECUTED
11aa80: ff 75 80 pushl -0x80(%ebp) <== NOT EXECUTED
11aa83: ff 75 88 pushl -0x78(%ebp) <== NOT EXECUTED
11aa86: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
11aa89: ff 71 08 pushl 0x8(%ecx) <== NOT EXECUTED
11aa8c: 68 5f 13 13 00 push $0x13135f <== NOT EXECUTED
11aa91: e8 a6 58 00 00 call 12033c <printf> <== NOT EXECUTED
11aa96: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
11aa99: e9 72 02 00 00 jmp 11ad10 <rtems_rfs_dir_lookup_ino+0x450><== NOT EXECUTED
/*
* Search the block to see if the name matches. A hash of 0xffff or 0x0
* means the entry is empty.
*/
entry = rtems_rfs_buffer_data (&entries);
11aa9e: 8b 45 94 mov -0x6c(%ebp),%eax
11aaa1: 8b 70 1c mov 0x1c(%eax),%esi
map.bpos.boff = 0;
11aaa4: c7 45 ac 00 00 00 00 movl $0x0,-0x54(%ebp)
while (map.bpos.boff < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
11aaab: e9 8d 01 00 00 jmp 11ac3d <rtems_rfs_dir_lookup_ino+0x37d>
{
uint32_t ehash;
int elength;
ehash = rtems_rfs_dir_entry_hash (entry);
11aab0: 0f b6 56 04 movzbl 0x4(%esi),%edx
11aab4: c1 e2 18 shl $0x18,%edx
11aab7: 0f b6 46 05 movzbl 0x5(%esi),%eax
11aabb: c1 e0 10 shl $0x10,%eax
11aabe: 09 c2 or %eax,%edx
11aac0: 0f b6 46 07 movzbl 0x7(%esi),%eax
11aac4: 09 c2 or %eax,%edx
11aac6: 0f b6 46 06 movzbl 0x6(%esi),%eax
11aaca: c1 e0 08 shl $0x8,%eax
11aacd: 09 c2 or %eax,%edx
elength = rtems_rfs_dir_entry_length (entry);
11aacf: 0f b6 4e 08 movzbl 0x8(%esi),%ecx
11aad3: c1 e1 08 shl $0x8,%ecx
11aad6: 0f b6 46 09 movzbl 0x9(%esi),%eax
11aada: 09 c1 or %eax,%ecx
11aadc: 89 4d 84 mov %ecx,-0x7c(%ebp)
*ino = rtems_rfs_dir_entry_ino (entry);
11aadf: 0f b6 06 movzbl (%esi),%eax
11aae2: c1 e0 18 shl $0x18,%eax
11aae5: 0f b6 4e 01 movzbl 0x1(%esi),%ecx
11aae9: c1 e1 10 shl $0x10,%ecx
11aaec: 09 c8 or %ecx,%eax
11aaee: 0f b6 4e 03 movzbl 0x3(%esi),%ecx
11aaf2: 09 c8 or %ecx,%eax
11aaf4: 0f b6 4e 02 movzbl 0x2(%esi),%ecx
11aaf8: c1 e1 08 shl $0x8,%ecx
11aafb: 09 c8 or %ecx,%eax
11aafd: 8b 4d 18 mov 0x18(%ebp),%ecx
11ab00: 89 01 mov %eax,(%ecx)
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
11ab02: 81 7d 84 ff ff 00 00 cmpl $0xffff,-0x7c(%ebp)
11ab09: 75 0f jne 11ab1a <rtems_rfs_dir_lookup_ino+0x25a>
map.bpos.boff += elength;
entry += elength;
}
if (rc == 0)
11ab0b: 83 7d 80 00 cmpl $0x0,-0x80(%ebp)
11ab0f: 0f 85 9c 01 00 00 jne 11acb1 <rtems_rfs_dir_lookup_ino+0x3f1><== NEVER TAKEN
11ab15: e9 37 01 00 00 jmp 11ac51 <rtems_rfs_dir_lookup_ino+0x391>
*ino = rtems_rfs_dir_entry_ino (entry);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
break;
if (rtems_rfs_dir_entry_valid (fs, elength, *ino))
11ab1a: 83 7d 84 0a cmpl $0xa,-0x7c(%ebp)
11ab1e: 7f 1b jg 11ab3b <rtems_rfs_dir_lookup_ino+0x27b><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_LOOKUP_INO))
11ab20: 50 push %eax <== NOT EXECUTED
11ab21: 50 push %eax <== NOT EXECUTED
11ab22: 6a 00 push $0x0 <== NOT EXECUTED
11ab24: 68 00 00 00 04 push $0x4000000 <== NOT EXECUTED
11ab29: e8 6e 8d ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11ab2e: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11ab31: 84 c0 test %al,%al <== NOT EXECUTED
11ab33: 0f 84 cb 01 00 00 je 11ad04 <rtems_rfs_dir_lookup_ino+0x444><== NOT EXECUTED
11ab39: eb 13 jmp 11ab4e <rtems_rfs_dir_lookup_ino+0x28e><== NOT EXECUTED
*ino = rtems_rfs_dir_entry_ino (entry);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
break;
if (rtems_rfs_dir_entry_valid (fs, elength, *ino))
11ab3b: 8b 4d 84 mov -0x7c(%ebp),%ecx
11ab3e: 3b 4f 1c cmp 0x1c(%edi),%ecx
11ab41: 73 dd jae 11ab20 <rtems_rfs_dir_lookup_ino+0x260><== NEVER TAKEN
11ab43: 85 c0 test %eax,%eax
11ab45: 74 d9 je 11ab20 <rtems_rfs_dir_lookup_ino+0x260><== NEVER TAKEN
11ab47: 3b 47 14 cmp 0x14(%edi),%eax
11ab4a: 76 28 jbe 11ab74 <rtems_rfs_dir_lookup_ino+0x2b4><== ALWAYS TAKEN
11ab4c: eb d2 jmp 11ab20 <rtems_rfs_dir_lookup_ino+0x260><== NOT EXECUTED
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_LOOKUP_INO))
printf ("rtems-rfs: dir-lookup-ino: "
11ab4e: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11ab51: ff 75 ac pushl -0x54(%ebp) <== NOT EXECUTED
11ab54: 8b 4d 18 mov 0x18(%ebp),%ecx <== NOT EXECUTED
11ab57: ff 31 pushl (%ecx) <== NOT EXECUTED
11ab59: ff 75 84 pushl -0x7c(%ebp) <== NOT EXECUTED
11ab5c: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
11ab5f: ff 71 08 pushl 0x8(%ecx) <== NOT EXECUTED
11ab62: 68 a1 13 13 00 push $0x1313a1 <== NOT EXECUTED
11ab67: e8 d0 57 00 00 call 12033c <printf> <== NOT EXECUTED
11ab6c: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
11ab6f: e9 90 01 00 00 jmp 11ad04 <rtems_rfs_dir_lookup_ino+0x444><== NOT EXECUTED
rtems_rfs_inode_ino (inode), elength, *ino, map.bpos.boff);
rc = EIO;
break;
}
if (ehash == hash)
11ab74: 3b 95 7c ff ff ff cmp -0x84(%ebp),%edx
11ab7a: 0f 85 b5 00 00 00 jne 11ac35 <rtems_rfs_dir_lookup_ino+0x375>
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_LOOKUP_INO_CHECK))
11ab80: 50 push %eax
11ab81: 50 push %eax
11ab82: 6a 00 push $0x0
11ab84: 68 00 00 00 08 push $0x8000000
11ab89: e8 0e 8d ff ff call 11389c <rtems_rfs_trace>
11ab8e: 83 c4 10 add $0x10,%esp
11ab91: 84 c0 test %al,%al
11ab93: 74 3d je 11abd2 <rtems_rfs_dir_lookup_ino+0x312><== ALWAYS TAKEN
printf ("rtems-rfs: dir-lookup-ino: "
11ab95: 50 push %eax <== NOT EXECUTED
11ab96: 50 push %eax <== NOT EXECUTED
"checking entry for ino %" PRId32 ": bno=%04" PRIx32 "/off=%04" PRIx32
" length:%d ino:%" PRId32 "\n",
rtems_rfs_inode_ino (inode), map.bpos.bno, map.bpos.boff,
elength, rtems_rfs_dir_entry_ino (entry));
11ab97: 0f b6 06 movzbl (%esi),%eax <== NOT EXECUTED
11ab9a: c1 e0 18 shl $0x18,%eax <== NOT EXECUTED
11ab9d: 0f b6 4e 01 movzbl 0x1(%esi),%ecx <== NOT EXECUTED
11aba1: c1 e1 10 shl $0x10,%ecx <== NOT EXECUTED
11aba4: 09 c8 or %ecx,%eax <== NOT EXECUTED
11aba6: 0f b6 4e 03 movzbl 0x3(%esi),%ecx <== NOT EXECUTED
11abaa: 09 c8 or %ecx,%eax <== NOT EXECUTED
11abac: 0f b6 4e 02 movzbl 0x2(%esi),%ecx <== NOT EXECUTED
11abb0: c1 e1 08 shl $0x8,%ecx <== NOT EXECUTED
}
if (ehash == hash)
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_LOOKUP_INO_CHECK))
printf ("rtems-rfs: dir-lookup-ino: "
11abb3: 09 c8 or %ecx,%eax <== NOT EXECUTED
11abb5: 50 push %eax <== NOT EXECUTED
11abb6: ff 75 84 pushl -0x7c(%ebp) <== NOT EXECUTED
11abb9: ff 75 ac pushl -0x54(%ebp) <== NOT EXECUTED
11abbc: ff 75 a8 pushl -0x58(%ebp) <== NOT EXECUTED
11abbf: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
11abc2: ff 71 08 pushl 0x8(%ecx) <== NOT EXECUTED
11abc5: 68 eb 13 13 00 push $0x1313eb <== NOT EXECUTED
11abca: e8 6d 57 00 00 call 12033c <printf> <== NOT EXECUTED
11abcf: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
"checking entry for ino %" PRId32 ": bno=%04" PRIx32 "/off=%04" PRIx32
" length:%d ino:%" PRId32 "\n",
rtems_rfs_inode_ino (inode), map.bpos.bno, map.bpos.boff,
elength, rtems_rfs_dir_entry_ino (entry));
if (memcmp (entry + RTEMS_RFS_DIR_ENTRY_SIZE, name, length) == 0)
11abd2: 51 push %ecx
11abd3: ff 75 14 pushl 0x14(%ebp)
11abd6: ff 75 10 pushl 0x10(%ebp)
11abd9: 8d 46 0a lea 0xa(%esi),%eax
11abdc: 50 push %eax
11abdd: e8 d6 54 00 00 call 1200b8 <memcmp>
11abe2: 83 c4 10 add $0x10,%esp
11abe5: 85 c0 test %eax,%eax
11abe7: 75 4c jne 11ac35 <rtems_rfs_dir_lookup_ino+0x375><== NEVER TAKEN
{
*offset = rtems_rfs_block_map_pos (fs, &map);
11abe9: 56 push %esi
11abea: 56 push %esi
11abeb: 8d 45 a8 lea -0x58(%ebp),%eax
11abee: 50 push %eax
11abef: 57 push %edi
11abf0: e8 08 e9 ff ff call 1194fd <rtems_rfs_block_get_pos>
11abf5: 8b 4d 1c mov 0x1c(%ebp),%ecx
11abf8: 89 01 mov %eax,(%ecx)
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_LOOKUP_INO_FOUND))
11abfa: 58 pop %eax
11abfb: 5a pop %edx
11abfc: 6a 00 push $0x0
11abfe: 68 00 00 00 10 push $0x10000000
11ac03: e8 94 8c ff ff call 11389c <rtems_rfs_trace>
11ac08: 83 c4 10 add $0x10,%esp
11ac0b: 84 c0 test %al,%al
11ac0d: 0f 84 d6 00 00 00 je 11ace9 <rtems_rfs_dir_lookup_ino+0x429><== ALWAYS TAKEN
printf ("rtems-rfs: dir-lookup-ino: "
11ac13: 8b 4d 1c mov 0x1c(%ebp),%ecx <== NOT EXECUTED
11ac16: ff 31 pushl (%ecx) <== NOT EXECUTED
11ac18: 8b 4d 18 mov 0x18(%ebp),%ecx <== NOT EXECUTED
11ac1b: ff 31 pushl (%ecx) <== NOT EXECUTED
11ac1d: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
11ac20: ff 71 08 pushl 0x8(%ecx) <== NOT EXECUTED
11ac23: 68 49 14 13 00 push $0x131449 <== NOT EXECUTED
11ac28: e8 0f 57 00 00 call 12033c <printf> <== NOT EXECUTED
11ac2d: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11ac30: e9 b4 00 00 00 jmp 11ace9 <rtems_rfs_dir_lookup_ino+0x429><== NOT EXECUTED
rtems_rfs_block_map_close (fs, &map);
return 0;
}
}
map.bpos.boff += elength;
11ac35: 8b 55 84 mov -0x7c(%ebp),%edx
11ac38: 01 55 ac add %edx,-0x54(%ebp)
entry += elength;
11ac3b: 01 d6 add %edx,%esi
entry = rtems_rfs_buffer_data (&entries);
map.bpos.boff = 0;
while (map.bpos.boff < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
11ac3d: 8b 47 08 mov 0x8(%edi),%eax
11ac40: 83 e8 0a sub $0xa,%eax
11ac43: 39 45 ac cmp %eax,-0x54(%ebp)
11ac46: 0f 82 64 fe ff ff jb 11aab0 <rtems_rfs_dir_lookup_ino+0x1f0><== ALWAYS TAKEN
11ac4c: e9 ba fe ff ff jmp 11ab0b <rtems_rfs_dir_lookup_ino+0x24b><== NOT EXECUTED
entry += elength;
}
if (rc == 0)
{
rc = rtems_rfs_block_map_next_block (fs, &map, &block);
11ac51: 53 push %ebx
11ac52: 8d 4d 88 lea -0x78(%ebp),%ecx
11ac55: 51 push %ecx
11ac56: 8d 45 98 lea -0x68(%ebp),%eax
11ac59: 50 push %eax
11ac5a: 57 push %edi
11ac5b: e8 0e ee ff ff call 119a6e <rtems_rfs_block_map_next_block>
11ac60: 89 c3 mov %eax,%ebx
if ((rc > 0) && (rc != ENXIO))
11ac62: 83 c4 10 add $0x10,%esp
11ac65: 83 f8 06 cmp $0x6,%eax
11ac68: 74 04 je 11ac6e <rtems_rfs_dir_lookup_ino+0x3ae><== ALWAYS TAKEN
11ac6a: 85 c0 test %eax,%eax <== NOT EXECUTED
11ac6c: 7f 07 jg 11ac75 <rtems_rfs_dir_lookup_ino+0x3b5><== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_LOOKUP_INO))
printf ("rtems-rfs: dir-lookup-ino: "
"block map next block failed in ino %" PRIu32 ": %d: %s\n",
rtems_rfs_inode_ino (inode), rc, strerror (rc));
}
if (rc == ENXIO)
11ac6e: 83 fb 06 cmp $0x6,%ebx
11ac71: 75 41 jne 11acb4 <rtems_rfs_dir_lookup_ino+0x3f4><== NEVER TAKEN
11ac73: eb 35 jmp 11acaa <rtems_rfs_dir_lookup_ino+0x3ea>
if (rc == 0)
{
rc = rtems_rfs_block_map_next_block (fs, &map, &block);
if ((rc > 0) && (rc != ENXIO))
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_LOOKUP_INO))
11ac75: 51 push %ecx <== NOT EXECUTED
11ac76: 51 push %ecx <== NOT EXECUTED
11ac77: 6a 00 push $0x0 <== NOT EXECUTED
11ac79: 68 00 00 00 04 push $0x4000000 <== NOT EXECUTED
11ac7e: e8 19 8c ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11ac83: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11ac86: 84 c0 test %al,%al <== NOT EXECUTED
11ac88: 74 e4 je 11ac6e <rtems_rfs_dir_lookup_ino+0x3ae><== NOT EXECUTED
printf ("rtems-rfs: dir-lookup-ino: "
11ac8a: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11ac8d: 53 push %ebx <== NOT EXECUTED
11ac8e: e8 31 64 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11ac93: 50 push %eax <== NOT EXECUTED
11ac94: 53 push %ebx <== NOT EXECUTED
11ac95: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
11ac98: ff 71 08 pushl 0x8(%ecx) <== NOT EXECUTED
11ac9b: 68 90 14 13 00 push $0x131490 <== NOT EXECUTED
11aca0: e8 97 56 00 00 call 12033c <printf> <== NOT EXECUTED
11aca5: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
11aca8: eb 0a jmp 11acb4 <rtems_rfs_dir_lookup_ino+0x3f4><== NOT EXECUTED
"block map next block failed in ino %" PRIu32 ": %d: %s\n",
rtems_rfs_inode_ino (inode), rc, strerror (rc));
}
if (rc == ENXIO)
rc = ENOENT;
11acaa: bb 02 00 00 00 mov $0x2,%ebx
11acaf: eb 5c jmp 11ad0d <rtems_rfs_dir_lookup_ino+0x44d>
11acb1: 8b 5d 80 mov -0x80(%ebp),%ebx <== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &entries);
rtems_rfs_block_map_close (fs, &map);
return rc;
}
while ((rc == 0) && block)
11acb4: 85 db test %ebx,%ebx
11acb6: 75 55 jne 11ad0d <rtems_rfs_dir_lookup_ino+0x44d><== NEVER TAKEN
11acb8: 83 7d 88 00 cmpl $0x0,-0x78(%ebp)
11acbc: 0f 85 52 fd ff ff jne 11aa14 <rtems_rfs_dir_lookup_ino+0x154><== ALWAYS TAKEN
11acc2: eb 51 jmp 11ad15 <rtems_rfs_dir_lookup_ino+0x455><== NOT EXECUTED
if ((rc == 0) && (block == 0))
{
rc = EIO;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_LOOKUP_INO))
printf ("rtems-rfs: dir-lookup-ino: block is 0 in ino %" PRIu32 ": %d: %s\n",
11acc4: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11acc7: 6a 05 push $0x5 <== NOT EXECUTED
11acc9: e8 f6 63 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11acce: 50 push %eax <== NOT EXECUTED
11accf: 6a 05 push $0x5 <== NOT EXECUTED
11acd1: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
11acd4: ff 71 08 pushl 0x8(%ecx) <== NOT EXECUTED
11acd7: 68 db 14 13 00 push $0x1314db <== NOT EXECUTED
11acdc: e8 5b 56 00 00 call 12033c <printf> <== NOT EXECUTED
11ace1: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
}
}
if ((rc == 0) && (block == 0))
{
rc = EIO;
11ace4: bb 05 00 00 00 mov $0x5,%ebx <== NOT EXECUTED
printf ("rtems-rfs: dir-lookup-ino: block is 0 in ino %" PRIu32 ": %d: %s\n",
rtems_rfs_inode_ino (inode), rc, strerror (rc));
}
}
rtems_rfs_buffer_handle_close (fs, &entries);
11ace9: 8d 55 8c lea -0x74(%ebp),%edx
11acec: 89 f8 mov %edi,%eax
11acee: e8 a5 fb ff ff call 11a898 <rtems_rfs_buffer_handle_close>
rtems_rfs_block_map_close (fs, &map);
11acf3: 52 push %edx
11acf4: 52 push %edx
11acf5: 8d 45 98 lea -0x68(%ebp),%eax
11acf8: 50 push %eax
11acf9: 57 push %edi
11acfa: e8 4a ea ff ff call 119749 <rtems_rfs_block_map_close>
11acff: 83 c4 10 add $0x10,%esp
11ad02: eb 28 jmp 11ad2c <rtems_rfs_dir_lookup_ino+0x46c>
printf ("rtems-rfs: dir-lookup-ino: "
"block map next block failed in ino %" PRIu32 ": %d: %s\n",
rtems_rfs_inode_ino (inode), rc, strerror (rc));
}
if (rc == ENXIO)
rc = ENOENT;
11ad04: c7 45 80 05 00 00 00 movl $0x5,-0x80(%ebp) <== NOT EXECUTED
11ad0b: eb a4 jmp 11acb1 <rtems_rfs_dir_lookup_ino+0x3f1><== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &entries);
rtems_rfs_block_map_close (fs, &map);
return rc;
}
while ((rc == 0) && block)
11ad0d: 89 5d 80 mov %ebx,-0x80(%ebp)
printf ("rtems-rfs: dir-lookup-ino: "
"block map next block failed in ino %" PRIu32 ": %d: %s\n",
rtems_rfs_inode_ino (inode), rc, strerror (rc));
}
if (rc == ENXIO)
rc = ENOENT;
11ad10: 8b 5d 80 mov -0x80(%ebp),%ebx
11ad13: eb d4 jmp 11ace9 <rtems_rfs_dir_lookup_ino+0x429>
}
if ((rc == 0) && (block == 0))
{
rc = EIO;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_LOOKUP_INO))
11ad15: 50 push %eax <== NOT EXECUTED
11ad16: 50 push %eax <== NOT EXECUTED
11ad17: 6a 00 push $0x0 <== NOT EXECUTED
11ad19: 68 00 00 00 04 push $0x4000000 <== NOT EXECUTED
11ad1e: e8 79 8b ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11ad23: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11ad26: 84 c0 test %al,%al <== NOT EXECUTED
11ad28: 75 9a jne 11acc4 <rtems_rfs_dir_lookup_ino+0x404><== NOT EXECUTED
11ad2a: eb b8 jmp 11ace4 <rtems_rfs_dir_lookup_ino+0x424><== NOT EXECUTED
}
rtems_rfs_buffer_handle_close (fs, &entries);
rtems_rfs_block_map_close (fs, &map);
return rc;
}
11ad2c: 89 d8 mov %ebx,%eax
11ad2e: 8d 65 f4 lea -0xc(%ebp),%esp
11ad31: 5b pop %ebx
11ad32: 5e pop %esi
11ad33: 5f pop %edi
11ad34: 5d pop %ebp
11ad35: c3 ret
0011b422 <rtems_rfs_dir_read>:
rtems_rfs_dir_read (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* dir,
rtems_rfs_pos_rel offset,
struct dirent* dirent,
size_t* length)
{
11b422: 55 push %ebp
11b423: 89 e5 mov %esp,%ebp
11b425: 57 push %edi
11b426: 56 push %esi
11b427: 53 push %ebx
11b428: 81 ec 94 00 00 00 sub $0x94,%esp
11b42e: 8b 45 10 mov 0x10(%ebp),%eax
11b431: 8b 55 14 mov 0x14(%ebp),%edx
11b434: 89 85 78 ff ff ff mov %eax,-0x88(%ebp)
11b43a: 89 95 7c ff ff ff mov %edx,-0x84(%ebp)
rtems_rfs_block_map map;
rtems_rfs_buffer_handle buffer;
rtems_rfs_block_no block;
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_READ))
11b440: 6a 00 push $0x0
11b442: 68 00 00 00 80 push $0x80000000
11b447: e8 50 84 ff ff call 11389c <rtems_rfs_trace>
11b44c: 83 c4 10 add $0x10,%esp
11b44f: 84 c0 test %al,%al
11b451: 74 1f je 11b472 <rtems_rfs_dir_read+0x50><== ALWAYS TAKEN
printf ("rtems-rfs: dir-read: dir=%" PRId32 " offset=%" PRId64 "\n",
11b453: ff b5 7c ff ff ff pushl -0x84(%ebp) <== NOT EXECUTED
11b459: ff b5 78 ff ff ff pushl -0x88(%ebp) <== NOT EXECUTED
11b45f: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
11b462: ff 71 08 pushl 0x8(%ecx) <== NOT EXECUTED
11b465: 68 d4 17 13 00 push $0x1317d4 <== NOT EXECUTED
11b46a: e8 cd 4e 00 00 call 12033c <printf> <== NOT EXECUTED
11b46f: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rtems_rfs_inode_ino (dir), offset);
*length = 0;
11b472: 8b 5d 1c mov 0x1c(%ebp),%ebx
11b475: c7 03 00 00 00 00 movl $0x0,(%ebx)
rc = rtems_rfs_block_map_open (fs, dir, &map);
11b47b: 51 push %ecx
11b47c: 8d 45 98 lea -0x68(%ebp),%eax
11b47f: 50 push %eax
11b480: ff 75 0c pushl 0xc(%ebp)
11b483: ff 75 08 pushl 0x8(%ebp)
11b486: e8 17 e1 ff ff call 1195a2 <rtems_rfs_block_map_open>
11b48b: 89 45 84 mov %eax,-0x7c(%ebp)
if (rc > 0)
11b48e: 83 c4 10 add $0x10,%esp
11b491: 85 c0 test %eax,%eax
11b493: 0f 8f e1 02 00 00 jg 11b77a <rtems_rfs_dir_read+0x358><== NEVER TAKEN
return rc;
if (((rtems_rfs_fs_block_size (fs) -
(offset % rtems_rfs_fs_block_size (fs))) <= RTEMS_RFS_DIR_ENTRY_SIZE))
11b499: 8b 5d 08 mov 0x8(%ebp),%ebx
11b49c: 8b 73 08 mov 0x8(%ebx),%esi
11b49f: 31 ff xor %edi,%edi
11b4a1: 57 push %edi
11b4a2: 56 push %esi
11b4a3: ff b5 7c ff ff ff pushl -0x84(%ebp)
11b4a9: ff b5 78 ff ff ff pushl -0x88(%ebp)
11b4af: e8 14 0c 01 00 call 12c0c8 <__moddi3>
11b4b4: 83 c4 10 add $0x10,%esp
rc = rtems_rfs_block_map_open (fs, dir, &map);
if (rc > 0)
return rc;
if (((rtems_rfs_fs_block_size (fs) -
11b4b7: 89 f1 mov %esi,%ecx
11b4b9: 89 fb mov %edi,%ebx
11b4bb: 29 c1 sub %eax,%ecx
11b4bd: 19 d3 sbb %edx,%ebx
11b4bf: 83 fb 00 cmp $0x0,%ebx
11b4c2: 7f 56 jg 11b51a <rtems_rfs_dir_read+0xf8><== NEVER TAKEN
11b4c4: 7c 05 jl 11b4cb <rtems_rfs_dir_read+0xa9><== NEVER TAKEN
11b4c6: 83 f9 0a cmp $0xa,%ecx
11b4c9: 77 4f ja 11b51a <rtems_rfs_dir_read+0xf8><== ALWAYS TAKEN
(offset % rtems_rfs_fs_block_size (fs))) <= RTEMS_RFS_DIR_ENTRY_SIZE))
offset = (((offset / rtems_rfs_fs_block_size (fs)) + 1) *
11b4cb: 57 push %edi <== NOT EXECUTED
11b4cc: 56 push %esi <== NOT EXECUTED
11b4cd: ff b5 7c ff ff ff pushl -0x84(%ebp) <== NOT EXECUTED
11b4d3: ff b5 78 ff ff ff pushl -0x88(%ebp) <== NOT EXECUTED
11b4d9: e8 96 0a 01 00 call 12bf74 <__divdi3> <== NOT EXECUTED
11b4de: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11b4e1: 89 85 78 ff ff ff mov %eax,-0x88(%ebp) <== NOT EXECUTED
11b4e7: 89 95 7c ff ff ff mov %edx,-0x84(%ebp) <== NOT EXECUTED
11b4ed: 83 85 78 ff ff ff 01 addl $0x1,-0x88(%ebp) <== NOT EXECUTED
11b4f4: 83 95 7c ff ff ff 00 adcl $0x0,-0x84(%ebp) <== NOT EXECUTED
11b4fb: 8b 8d 7c ff ff ff mov -0x84(%ebp),%ecx <== NOT EXECUTED
11b501: 0f af ce imul %esi,%ecx <== NOT EXECUTED
11b504: 8b 85 78 ff ff ff mov -0x88(%ebp),%eax <== NOT EXECUTED
11b50a: f7 e6 mul %esi <== NOT EXECUTED
11b50c: 89 85 78 ff ff ff mov %eax,-0x88(%ebp) <== NOT EXECUTED
11b512: 01 ca add %ecx,%edx <== NOT EXECUTED
11b514: 89 95 7c ff ff ff mov %edx,-0x84(%ebp) <== NOT EXECUTED
rtems_rfs_fs_block_size (fs));
rc = rtems_rfs_block_map_seek (fs, &map, offset, &block);
11b51a: 83 ec 0c sub $0xc,%esp
11b51d: 8d 5d 88 lea -0x78(%ebp),%ebx
11b520: 53 push %ebx
11b521: ff b5 7c ff ff ff pushl -0x84(%ebp)
11b527: ff b5 78 ff ff ff pushl -0x88(%ebp)
11b52d: 8d 45 98 lea -0x68(%ebp),%eax
11b530: 50 push %eax
11b531: ff 75 08 pushl 0x8(%ebp)
11b534: e8 cb e4 ff ff call 119a04 <rtems_rfs_block_map_seek>
11b539: 89 45 84 mov %eax,-0x7c(%ebp)
if (rc > 0)
11b53c: 83 c4 20 add $0x20,%esp
11b53f: 85 c0 test %eax,%eax
11b541: 7e 15 jle 11b558 <rtems_rfs_dir_read+0x136><== ALWAYS TAKEN
{
if (rc == ENXIO)
11b543: 83 f8 06 cmp $0x6,%eax <== NOT EXECUTED
11b546: 0f 85 1d 02 00 00 jne 11b769 <rtems_rfs_dir_read+0x347><== NOT EXECUTED
rc = ENOENT;
11b54c: c7 45 84 02 00 00 00 movl $0x2,-0x7c(%ebp) <== NOT EXECUTED
11b553: e9 11 02 00 00 jmp 11b769 <rtems_rfs_dir_read+0x347><== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
11b558: c6 45 8c 00 movb $0x0,-0x74(%ebp)
handle->bnum = 0;
11b55c: c7 45 90 00 00 00 00 movl $0x0,-0x70(%ebp)
handle->buffer = NULL;
11b563: c7 45 94 00 00 00 00 movl $0x0,-0x6c(%ebp)
uint8_t* entry;
rtems_rfs_ino eino;
int elength;
int remaining;
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, true);
11b56a: 8d 7d 8c lea -0x74(%ebp),%edi
11b56d: 6a 01 push $0x1
11b56f: ff 75 88 pushl -0x78(%ebp)
11b572: 57 push %edi
11b573: ff 75 08 pushl 0x8(%ebp)
11b576: e8 2f ed ff ff call 11a2aa <rtems_rfs_buffer_handle_request>
11b57b: 89 45 84 mov %eax,-0x7c(%ebp)
if (rc > 0)
11b57e: 83 c4 10 add $0x10,%esp
11b581: 85 c0 test %eax,%eax
11b583: 7e 07 jle 11b58c <rtems_rfs_dir_read+0x16a><== ALWAYS TAKEN
{
rtems_rfs_buffer_handle_close (fs, &buffer);
11b585: 89 fa mov %edi,%edx <== NOT EXECUTED
11b587: e9 d5 01 00 00 jmp 11b761 <rtems_rfs_dir_read+0x33f><== NOT EXECUTED
rtems_rfs_block_map_close (fs, &map);
return rc;
}
entry = rtems_rfs_buffer_data (&buffer);
entry += map.bpos.boff;
11b58c: 8b 55 ac mov -0x54(%ebp),%edx
11b58f: 89 55 80 mov %edx,-0x80(%ebp)
11b592: 8b 45 94 mov -0x6c(%ebp),%eax
11b595: 03 50 1c add 0x1c(%eax),%edx
elength = rtems_rfs_dir_entry_length (entry);
11b598: 0f b6 72 08 movzbl 0x8(%edx),%esi
11b59c: c1 e6 08 shl $0x8,%esi
11b59f: 0f b6 42 09 movzbl 0x9(%edx),%eax
11b5a3: 09 c6 or %eax,%esi
eino = rtems_rfs_dir_entry_ino (entry);
11b5a5: 8a 1a mov (%edx),%bl
11b5a7: 0f b6 42 01 movzbl 0x1(%edx),%eax
11b5ab: 8a 4a 02 mov 0x2(%edx),%cl
11b5ae: 88 8d 76 ff ff ff mov %cl,-0x8a(%ebp)
11b5b4: 8a 4a 03 mov 0x3(%edx),%cl
11b5b7: 88 8d 77 ff ff ff mov %cl,-0x89(%ebp)
if (elength != RTEMS_RFS_DIR_ENTRY_EMPTY)
11b5bd: 81 fe ff ff 00 00 cmp $0xffff,%esi
11b5c3: 0f 84 2a 01 00 00 je 11b6f3 <rtems_rfs_dir_read+0x2d1>
entry = rtems_rfs_buffer_data (&buffer);
entry += map.bpos.boff;
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
11b5c9: c1 e3 18 shl $0x18,%ebx
11b5cc: c1 e0 10 shl $0x10,%eax
11b5cf: 09 c3 or %eax,%ebx
11b5d1: 0f b6 c1 movzbl %cl,%eax
11b5d4: 09 c3 or %eax,%ebx
11b5d6: 0f b6 8d 76 ff ff ff movzbl -0x8a(%ebp),%ecx
11b5dd: c1 e1 08 shl $0x8,%ecx
11b5e0: 09 cb or %ecx,%ebx
if (elength != RTEMS_RFS_DIR_ENTRY_EMPTY)
{
if (rtems_rfs_dir_entry_valid (fs, elength, eino))
11b5e2: 83 fe 0a cmp $0xa,%esi
11b5e5: 7e 11 jle 11b5f8 <rtems_rfs_dir_read+0x1d6><== NEVER TAKEN
11b5e7: 8b 45 08 mov 0x8(%ebp),%eax
11b5ea: 3b 70 1c cmp 0x1c(%eax),%esi
11b5ed: 73 09 jae 11b5f8 <rtems_rfs_dir_read+0x1d6><== NEVER TAKEN
11b5ef: 85 db test %ebx,%ebx
11b5f1: 74 05 je 11b5f8 <rtems_rfs_dir_read+0x1d6><== NEVER TAKEN
11b5f3: 3b 58 14 cmp 0x14(%eax),%ebx
11b5f6: 76 38 jbe 11b630 <rtems_rfs_dir_read+0x20e><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_READ))
11b5f8: 52 push %edx <== NOT EXECUTED
11b5f9: 52 push %edx <== NOT EXECUTED
11b5fa: 6a 00 push $0x0 <== NOT EXECUTED
11b5fc: 68 00 00 00 80 push $0x80000000 <== NOT EXECUTED
11b601: e8 96 82 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11b606: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
printf ("rtems-rfs: dir-read: "
"bad length or ino for ino %" PRIu32 ": %u/%" PRId32 " @ %04" PRIx32 "\n",
rtems_rfs_inode_ino (dir), elength, eino, map.bpos.boff);
rc = EIO;
11b609: c7 45 84 05 00 00 00 movl $0x5,-0x7c(%ebp) <== NOT EXECUTED
if (elength != RTEMS_RFS_DIR_ENTRY_EMPTY)
{
if (rtems_rfs_dir_entry_valid (fs, elength, eino))
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_READ))
11b610: 84 c0 test %al,%al <== NOT EXECUTED
11b612: 0f 84 46 01 00 00 je 11b75e <rtems_rfs_dir_read+0x33c><== NOT EXECUTED
printf ("rtems-rfs: dir-read: "
11b618: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11b61b: ff 75 ac pushl -0x54(%ebp) <== NOT EXECUTED
11b61e: 53 push %ebx <== NOT EXECUTED
11b61f: 56 push %esi <== NOT EXECUTED
11b620: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
11b623: ff 71 08 pushl 0x8(%ecx) <== NOT EXECUTED
11b626: 68 fe 17 13 00 push $0x1317fe <== NOT EXECUTED
11b62b: e9 b9 00 00 00 jmp 11b6e9 <rtems_rfs_dir_read+0x2c7><== NOT EXECUTED
rtems_rfs_inode_ino (dir), elength, eino, map.bpos.boff);
rc = EIO;
break;
}
memset (dirent, 0, sizeof (struct dirent));
11b630: b9 44 00 00 00 mov $0x44,%ecx
11b635: 31 c0 xor %eax,%eax
11b637: 8b 7d 18 mov 0x18(%ebp),%edi
11b63a: f3 ab rep stos %eax,%es:(%edi)
dirent->d_off = offset;
11b63c: 8b 8d 78 ff ff ff mov -0x88(%ebp),%ecx
11b642: 8b 9d 7c ff ff ff mov -0x84(%ebp),%ebx
11b648: 8b 45 18 mov 0x18(%ebp),%eax
11b64b: 89 48 04 mov %ecx,0x4(%eax)
11b64e: 89 58 08 mov %ebx,0x8(%eax)
dirent->d_reclen = sizeof (struct dirent);
11b651: 66 c7 40 0c 10 01 movw $0x110,0xc(%eax)
*length += elength;
11b657: 89 f1 mov %esi,%ecx
11b659: 8b 5d 1c mov 0x1c(%ebp),%ebx
11b65c: 03 0b add (%ebx),%ecx
11b65e: 89 0b mov %ecx,(%ebx)
remaining = rtems_rfs_fs_block_size (fs) - (map.bpos.boff + elength);
11b660: 8b 5d 08 mov 0x8(%ebp),%ebx
11b663: 8b 43 08 mov 0x8(%ebx),%eax
11b666: 2b 45 80 sub -0x80(%ebp),%eax
11b669: 29 f0 sub %esi,%eax
if (remaining <= RTEMS_RFS_DIR_ENTRY_SIZE)
11b66b: 83 f8 0a cmp $0xa,%eax
11b66e: 7f 07 jg 11b677 <rtems_rfs_dir_read+0x255><== ALWAYS TAKEN
*length += remaining;
11b670: 01 c8 add %ecx,%eax <== NOT EXECUTED
11b672: 8b 5d 1c mov 0x1c(%ebp),%ebx <== NOT EXECUTED
11b675: 89 03 mov %eax,(%ebx) <== NOT EXECUTED
11b677: 8d 46 f6 lea -0xa(%esi),%eax
11b67a: 3d ff 00 00 00 cmp $0xff,%eax
11b67f: 7e 05 jle 11b686 <rtems_rfs_dir_read+0x264><== ALWAYS TAKEN
11b681: b8 ff 00 00 00 mov $0xff,%eax <== NOT EXECUTED
elength -= RTEMS_RFS_DIR_ENTRY_SIZE;
if (elength > NAME_MAX)
elength = NAME_MAX;
memcpy (dirent->d_name, entry + RTEMS_RFS_DIR_ENTRY_SIZE, elength);
11b686: 8b 5d 18 mov 0x18(%ebp),%ebx
11b689: 83 c3 10 add $0x10,%ebx
11b68c: 8d 72 0a lea 0xa(%edx),%esi
11b68f: 89 df mov %ebx,%edi
11b691: 89 c1 mov %eax,%ecx
11b693: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
dirent->d_ino = rtems_rfs_dir_entry_ino (entry);
11b695: 0f b6 0a movzbl (%edx),%ecx
11b698: c1 e1 18 shl $0x18,%ecx
11b69b: 0f b6 72 01 movzbl 0x1(%edx),%esi
11b69f: c1 e6 10 shl $0x10,%esi
11b6a2: 09 f1 or %esi,%ecx
11b6a4: 0f b6 72 03 movzbl 0x3(%edx),%esi
11b6a8: 09 f1 or %esi,%ecx
11b6aa: 0f b6 52 02 movzbl 0x2(%edx),%edx
11b6ae: c1 e2 08 shl $0x8,%edx
11b6b1: 09 d1 or %edx,%ecx
11b6b3: 8b 55 18 mov 0x18(%ebp),%edx
11b6b6: 89 0a mov %ecx,(%edx)
dirent->d_namlen = elength;
11b6b8: 66 89 42 0e mov %ax,0xe(%edx)
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_READ))
11b6bc: 50 push %eax
11b6bd: 50 push %eax
11b6be: 6a 00 push $0x0
11b6c0: 68 00 00 00 80 push $0x80000000
11b6c5: e8 d2 81 ff ff call 11389c <rtems_rfs_trace>
11b6ca: 83 c4 10 add $0x10,%esp
11b6cd: 84 c0 test %al,%al
11b6cf: 0f 84 89 00 00 00 je 11b75e <rtems_rfs_dir_read+0x33c><== ALWAYS TAKEN
printf ("rtems-rfs: dir-read: found off:%" PRIooff_t " ino:%ld name=%s\n",
11b6d5: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11b6d8: 53 push %ebx <== NOT EXECUTED
11b6d9: 8b 4d 18 mov 0x18(%ebp),%ecx <== NOT EXECUTED
11b6dc: ff 31 pushl (%ecx) <== NOT EXECUTED
11b6de: ff 71 08 pushl 0x8(%ecx) <== NOT EXECUTED
11b6e1: ff 71 04 pushl 0x4(%ecx) <== NOT EXECUTED
11b6e4: 68 42 18 13 00 push $0x131842 <== NOT EXECUTED
11b6e9: e8 4e 4c 00 00 call 12033c <printf> <== NOT EXECUTED
11b6ee: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
11b6f1: eb 6b jmp 11b75e <rtems_rfs_dir_read+0x33c><== NOT EXECUTED
dirent->d_off, dirent->d_ino, dirent->d_name);
break;
}
*length += rtems_rfs_fs_block_size (fs) - map.bpos.boff;
11b6f3: 8b 5d 08 mov 0x8(%ebp),%ebx
11b6f6: 8b 43 08 mov 0x8(%ebx),%eax
11b6f9: 2b 45 80 sub -0x80(%ebp),%eax
11b6fc: 8b 5d 1c mov 0x1c(%ebp),%ebx
11b6ff: 01 03 add %eax,(%ebx)
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_READ))
11b701: 50 push %eax
11b702: 50 push %eax
11b703: 6a 00 push $0x0
11b705: 68 00 00 00 80 push $0x80000000
11b70a: e8 8d 81 ff ff call 11389c <rtems_rfs_trace>
11b70f: 83 c4 10 add $0x10,%esp
11b712: 84 c0 test %al,%al
11b714: 74 1b je 11b731 <rtems_rfs_dir_read+0x30f><== ALWAYS TAKEN
printf ("rtems-rfs: dir-read: next block: off:%" PRId64 " length:%zd\n",
11b716: ff 33 pushl (%ebx) <== NOT EXECUTED
11b718: ff b5 7c ff ff ff pushl -0x84(%ebp) <== NOT EXECUTED
11b71e: ff b5 78 ff ff ff pushl -0x88(%ebp) <== NOT EXECUTED
11b724: 68 77 18 13 00 push $0x131877 <== NOT EXECUTED
11b729: e8 0e 4c 00 00 call 12033c <printf> <== NOT EXECUTED
11b72e: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
offset, *length);
rc = rtems_rfs_block_map_next_block (fs, &map, &block);
11b731: 50 push %eax
11b732: 8d 45 88 lea -0x78(%ebp),%eax
11b735: 50 push %eax
11b736: 8d 45 98 lea -0x68(%ebp),%eax
11b739: 50 push %eax
11b73a: ff 75 08 pushl 0x8(%ebp)
11b73d: e8 2c e3 ff ff call 119a6e <rtems_rfs_block_map_next_block>
11b742: 89 45 84 mov %eax,-0x7c(%ebp)
if (rc == ENXIO)
11b745: 83 c4 10 add $0x10,%esp
11b748: 83 f8 06 cmp $0x6,%eax
11b74b: 74 0a je 11b757 <rtems_rfs_dir_read+0x335><== ALWAYS TAKEN
/*
* Look for an empty entry and if this is the last block that is the end of
* the directory.
*/
while (rc == 0)
11b74d: 85 c0 test %eax,%eax <== NOT EXECUTED
11b74f: 0f 84 18 fe ff ff je 11b56d <rtems_rfs_dir_read+0x14b><== NOT EXECUTED
11b755: eb 07 jmp 11b75e <rtems_rfs_dir_read+0x33c><== NOT EXECUTED
printf ("rtems-rfs: dir-read: next block: off:%" PRId64 " length:%zd\n",
offset, *length);
rc = rtems_rfs_block_map_next_block (fs, &map, &block);
if (rc == ENXIO)
rc = ENOENT;
11b757: c7 45 84 02 00 00 00 movl $0x2,-0x7c(%ebp)
}
rtems_rfs_buffer_handle_close (fs, &buffer);
11b75e: 8d 55 8c lea -0x74(%ebp),%edx
11b761: 8b 45 08 mov 0x8(%ebp),%eax
11b764: e8 2f f1 ff ff call 11a898 <rtems_rfs_buffer_handle_close>
rtems_rfs_block_map_close (fs, &map);
11b769: 50 push %eax
11b76a: 50 push %eax
11b76b: 8d 45 98 lea -0x68(%ebp),%eax
11b76e: 50 push %eax
11b76f: ff 75 08 pushl 0x8(%ebp)
11b772: e8 d2 df ff ff call 119749 <rtems_rfs_block_map_close>
11b777: 83 c4 10 add $0x10,%esp
return rc;
}
11b77a: 8b 45 84 mov -0x7c(%ebp),%eax
11b77d: 8d 65 f4 lea -0xc(%ebp),%esp
11b780: 5b pop %ebx
11b781: 5e pop %esi
11b782: 5f pop %edi
11b783: 5d pop %ebp
11b784: c3 ret
0011b960 <rtems_rfs_file_close>:
}
int
rtems_rfs_file_close (rtems_rfs_file_system* fs,
rtems_rfs_file_handle* handle)
{
11b960: 55 push %ebp
11b961: 89 e5 mov %esp,%ebp
11b963: 57 push %edi
11b964: 56 push %esi
11b965: 53 push %ebx
11b966: 83 ec 14 sub $0x14,%esp
11b969: 8b 5d 0c mov 0xc(%ebp),%ebx
int rrc;
int rc;
rrc = 0;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_CLOSE))
11b96c: 6a 10 push $0x10
11b96e: 6a 00 push $0x0
11b970: e8 27 7f ff ff call 11389c <rtems_rfs_trace>
11b975: 83 c4 10 add $0x10,%esp
11b978: 84 c0 test %al,%al
11b97a: 74 15 je 11b991 <rtems_rfs_file_close+0x31><== ALWAYS TAKEN
printf ("rtems-rfs: file-close: entry: ino=%" PRId32 "\n",
11b97c: 51 push %ecx <== NOT EXECUTED
11b97d: 51 push %ecx <== NOT EXECUTED
handle->shared->inode.ino);
11b97e: 8b 43 1c mov 0x1c(%ebx),%eax <== NOT EXECUTED
int rc;
rrc = 0;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_CLOSE))
printf ("rtems-rfs: file-close: entry: ino=%" PRId32 "\n",
11b981: ff 70 14 pushl 0x14(%eax) <== NOT EXECUTED
11b984: 68 10 19 13 00 push $0x131910 <== NOT EXECUTED
11b989: e8 ae 49 00 00 call 12033c <printf> <== NOT EXECUTED
11b98e: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
handle->shared->inode.ino);
if (handle->shared->references > 0)
11b991: 8b 43 1c mov 0x1c(%ebx),%eax
11b994: 8b 50 08 mov 0x8(%eax),%edx
11b997: 85 d2 test %edx,%edx
11b999: 7e 04 jle 11b99f <rtems_rfs_file_close+0x3f><== NEVER TAKEN
handle->shared->references--;
11b99b: 4a dec %edx
11b99c: 89 50 08 mov %edx,0x8(%eax)
rtems_rfs_file_handle* handle)
{
int rrc;
int rc;
rrc = 0;
11b99f: 31 f6 xor %esi,%esi
handle->shared->inode.ino);
if (handle->shared->references > 0)
handle->shared->references--;
if (handle->shared->references == 0)
11b9a1: 83 78 08 00 cmpl $0x0,0x8(%eax)
11b9a5: 0f 85 9f 01 00 00 jne 11bb4a <rtems_rfs_file_close+0x1ea><== NEVER TAKEN
{
if (!rtems_rfs_inode_is_loaded (&handle->shared->inode))
11b9ab: 83 78 18 00 cmpl $0x0,0x18(%eax)
11b9af: 75 1b jne 11b9cc <rtems_rfs_file_close+0x6c><== NEVER TAKEN
rrc = rtems_rfs_inode_load (fs, &handle->shared->inode);
11b9b1: 52 push %edx
11b9b2: 52 push %edx
11b9b3: 83 c0 0c add $0xc,%eax
11b9b6: 50 push %eax
11b9b7: ff 75 08 pushl 0x8(%ebp)
11b9ba: e8 f3 67 ff ff call 1121b2 <rtems_rfs_inode_load>
11b9bf: 89 c6 mov %eax,%esi
if (rrc == 0)
11b9c1: 83 c4 10 add $0x10,%esp
11b9c4: 85 c0 test %eax,%eax
11b9c6: 0f 85 c7 00 00 00 jne 11ba93 <rtems_rfs_file_close+0x133><== NEVER TAKEN
{
/*
* @todo This could be clever and only update if different.
*/
rtems_rfs_inode_set_atime (&handle->shared->inode,
handle->shared->atime);
11b9cc: 8b 43 1c mov 0x1c(%ebx),%eax
if (rrc == 0)
{
/*
* @todo This could be clever and only update if different.
*/
rtems_rfs_inode_set_atime (&handle->shared->inode,
11b9cf: 8b 90 8c 00 00 00 mov 0x8c(%eax),%edx
*/
static inline void
rtems_rfs_inode_set_atime (rtems_rfs_inode_handle* handle,
rtems_rfs_time atime)
{
rtems_rfs_write_u32 (&handle->node->atime, atime);
11b9d5: 8b 70 18 mov 0x18(%eax),%esi
11b9d8: 89 d1 mov %edx,%ecx
11b9da: c1 e9 18 shr $0x18,%ecx
11b9dd: 88 4e 10 mov %cl,0x10(%esi)
11b9e0: 8b 70 18 mov 0x18(%eax),%esi
11b9e3: 89 d1 mov %edx,%ecx
11b9e5: c1 e9 10 shr $0x10,%ecx
11b9e8: 88 4e 11 mov %cl,0x11(%esi)
11b9eb: 8b 70 18 mov 0x18(%eax),%esi
11b9ee: 89 d1 mov %edx,%ecx
11b9f0: c1 e9 08 shr $0x8,%ecx
11b9f3: 88 4e 12 mov %cl,0x12(%esi)
11b9f6: 8b 48 18 mov 0x18(%eax),%ecx
11b9f9: 88 51 13 mov %dl,0x13(%ecx)
rtems_rfs_buffer_mark_dirty (&handle->buffer);
11b9fc: c6 40 1c 01 movb $0x1,0x1c(%eax)
handle->shared->atime);
rtems_rfs_inode_set_mtime (&handle->shared->inode,
handle->shared->mtime);
11ba00: 8b 43 1c mov 0x1c(%ebx),%eax
/*
* @todo This could be clever and only update if different.
*/
rtems_rfs_inode_set_atime (&handle->shared->inode,
handle->shared->atime);
rtems_rfs_inode_set_mtime (&handle->shared->inode,
11ba03: 8b 90 90 00 00 00 mov 0x90(%eax),%edx
*/
static inline void
rtems_rfs_inode_set_mtime (rtems_rfs_inode_handle* handle,
rtems_rfs_time mtime)
{
rtems_rfs_write_u32 (&handle->node->mtime, mtime);
11ba09: 8b 70 18 mov 0x18(%eax),%esi
11ba0c: 89 d1 mov %edx,%ecx
11ba0e: c1 e9 18 shr $0x18,%ecx
11ba11: 88 4e 14 mov %cl,0x14(%esi)
11ba14: 8b 70 18 mov 0x18(%eax),%esi
11ba17: 89 d1 mov %edx,%ecx
11ba19: c1 e9 10 shr $0x10,%ecx
11ba1c: 88 4e 15 mov %cl,0x15(%esi)
11ba1f: 8b 70 18 mov 0x18(%eax),%esi
11ba22: 89 d1 mov %edx,%ecx
11ba24: c1 e9 08 shr $0x8,%ecx
11ba27: 88 4e 16 mov %cl,0x16(%esi)
11ba2a: 8b 48 18 mov 0x18(%eax),%ecx
11ba2d: 88 51 17 mov %dl,0x17(%ecx)
rtems_rfs_buffer_mark_dirty (&handle->buffer);
11ba30: c6 40 1c 01 movb $0x1,0x1c(%eax)
handle->shared->mtime);
rtems_rfs_inode_set_ctime (&handle->shared->inode,
handle->shared->ctime);
11ba34: 8b 43 1c mov 0x1c(%ebx),%eax
*/
rtems_rfs_inode_set_atime (&handle->shared->inode,
handle->shared->atime);
rtems_rfs_inode_set_mtime (&handle->shared->inode,
handle->shared->mtime);
rtems_rfs_inode_set_ctime (&handle->shared->inode,
11ba37: 8b 90 94 00 00 00 mov 0x94(%eax),%edx
*/
static inline void
rtems_rfs_inode_set_ctime (rtems_rfs_inode_handle* handle,
rtems_rfs_time ctime)
{
rtems_rfs_write_u32 (&handle->node->ctime, ctime);
11ba3d: 8b 70 18 mov 0x18(%eax),%esi
11ba40: 89 d1 mov %edx,%ecx
11ba42: c1 e9 18 shr $0x18,%ecx
11ba45: 88 4e 18 mov %cl,0x18(%esi)
11ba48: 8b 70 18 mov 0x18(%eax),%esi
11ba4b: 89 d1 mov %edx,%ecx
11ba4d: c1 e9 10 shr $0x10,%ecx
11ba50: 88 4e 19 mov %cl,0x19(%esi)
11ba53: 8b 70 18 mov 0x18(%eax),%esi
11ba56: 89 d1 mov %edx,%ecx
11ba58: c1 e9 08 shr $0x8,%ecx
11ba5b: 88 4e 1a mov %cl,0x1a(%esi)
11ba5e: 8b 48 18 mov 0x18(%eax),%ecx
11ba61: 88 51 1b mov %dl,0x1b(%ecx)
rtems_rfs_buffer_mark_dirty (&handle->buffer);
11ba64: c6 40 1c 01 movb $0x1,0x1c(%eax)
handle->shared->ctime);
if (!rtems_rfs_block_size_equal (&handle->shared->size,
11ba68: 8b 43 1c mov 0x1c(%ebx),%eax
11ba6b: 8b 90 84 00 00 00 mov 0x84(%eax),%edx
11ba71: 3b 50 3c cmp 0x3c(%eax),%edx
11ba74: 75 0b jne 11ba81 <rtems_rfs_file_close+0x121><== NEVER TAKEN
11ba76: 8b 48 40 mov 0x40(%eax),%ecx
11ba79: 39 88 88 00 00 00 cmp %ecx,0x88(%eax)
11ba7f: 74 10 je 11ba91 <rtems_rfs_file_close+0x131><== ALWAYS TAKEN
*/
static inline void
rtems_rfs_block_map_set_size (rtems_rfs_block_map* map,
rtems_rfs_block_size* size)
{
rtems_rfs_block_copy_size (&map->size, size);
11ba81: 89 50 3c mov %edx,0x3c(%eax) <== NOT EXECUTED
11ba84: 8b 90 88 00 00 00 mov 0x88(%eax),%edx <== NOT EXECUTED
11ba8a: 89 50 40 mov %edx,0x40(%eax) <== NOT EXECUTED
map->dirty = true;
11ba8d: c6 40 34 01 movb $0x1,0x34(%eax) <== NOT EXECUTED
11ba91: 31 f6 xor %esi,%esi
&handle->shared->map.size))
rtems_rfs_block_map_set_size (&handle->shared->map,
&handle->shared->size);
}
rc = rtems_rfs_block_map_close (fs, &handle->shared->map);
11ba93: 50 push %eax
11ba94: 50 push %eax
11ba95: 8b 43 1c mov 0x1c(%ebx),%eax
11ba98: 83 c0 34 add $0x34,%eax
11ba9b: 50 push %eax
11ba9c: ff 75 08 pushl 0x8(%ebp)
11ba9f: e8 a5 dc ff ff call 119749 <rtems_rfs_block_map_close>
11baa4: 89 c7 mov %eax,%edi
if (rc > 0)
11baa6: 83 c4 10 add $0x10,%esp
11baa9: 85 c0 test %eax,%eax
11baab: 7e 36 jle 11bae3 <rtems_rfs_file_close+0x183><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_CLOSE))
11baad: 50 push %eax <== NOT EXECUTED
11baae: 50 push %eax <== NOT EXECUTED
11baaf: 6a 10 push $0x10 <== NOT EXECUTED
11bab1: 6a 00 push $0x0 <== NOT EXECUTED
11bab3: e8 e4 7d ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11bab8: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11babb: 84 c0 test %al,%al <== NOT EXECUTED
11babd: 74 1e je 11badd <rtems_rfs_file_close+0x17d><== NOT EXECUTED
printf ("rtems-rfs: file-close: map close error: ino=%" PRId32 ": %d: %s\n",
11babf: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11bac2: 57 push %edi <== NOT EXECUTED
11bac3: e8 fc 55 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11bac8: 50 push %eax <== NOT EXECUTED
11bac9: 57 push %edi <== NOT EXECUTED
handle->shared->inode.ino, rc, strerror (rc));
11baca: 8b 43 1c mov 0x1c(%ebx),%eax <== NOT EXECUTED
rc = rtems_rfs_block_map_close (fs, &handle->shared->map);
if (rc > 0)
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_CLOSE))
printf ("rtems-rfs: file-close: map close error: ino=%" PRId32 ": %d: %s\n",
11bacd: ff 70 14 pushl 0x14(%eax) <== NOT EXECUTED
11bad0: 68 37 19 13 00 push $0x131937 <== NOT EXECUTED
11bad5: e8 62 48 00 00 call 12033c <printf> <== NOT EXECUTED
11bada: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
handle->shared->inode.ino, rc, strerror (rc));
if (rrc == 0)
11badd: 85 f6 test %esi,%esi <== NOT EXECUTED
11badf: 75 02 jne 11bae3 <rtems_rfs_file_close+0x183><== NOT EXECUTED
11bae1: 89 fe mov %edi,%esi <== NOT EXECUTED
rrc = rc;
}
rc = rtems_rfs_inode_close (fs, &handle->shared->inode);
11bae3: 50 push %eax
11bae4: 50 push %eax
11bae5: 8b 43 1c mov 0x1c(%ebx),%eax
11bae8: 83 c0 0c add $0xc,%eax
11baeb: 50 push %eax
11baec: ff 75 08 pushl 0x8(%ebp)
11baef: e8 b3 68 ff ff call 1123a7 <rtems_rfs_inode_close>
11baf4: 89 c7 mov %eax,%edi
if (rc > 0)
11baf6: 83 c4 10 add $0x10,%esp
11baf9: 85 c0 test %eax,%eax
11bafb: 7e 36 jle 11bb33 <rtems_rfs_file_close+0x1d3><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_CLOSE))
11bafd: 50 push %eax <== NOT EXECUTED
11bafe: 50 push %eax <== NOT EXECUTED
11baff: 6a 10 push $0x10 <== NOT EXECUTED
11bb01: 6a 00 push $0x0 <== NOT EXECUTED
11bb03: e8 94 7d ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11bb08: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11bb0b: 84 c0 test %al,%al <== NOT EXECUTED
11bb0d: 74 1e je 11bb2d <rtems_rfs_file_close+0x1cd><== NOT EXECUTED
printf ("rtems-rfs: file-close: inode close error: ino=%" PRId32 ": %d: %s\n",
11bb0f: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11bb12: 57 push %edi <== NOT EXECUTED
11bb13: e8 ac 55 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11bb18: 50 push %eax <== NOT EXECUTED
11bb19: 57 push %edi <== NOT EXECUTED
handle->shared->inode.ino, rc, strerror (rc));
11bb1a: 8b 43 1c mov 0x1c(%ebx),%eax <== NOT EXECUTED
rc = rtems_rfs_inode_close (fs, &handle->shared->inode);
if (rc > 0)
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_CLOSE))
printf ("rtems-rfs: file-close: inode close error: ino=%" PRId32 ": %d: %s\n",
11bb1d: ff 70 14 pushl 0x14(%eax) <== NOT EXECUTED
11bb20: 68 70 19 13 00 push $0x131970 <== NOT EXECUTED
11bb25: e8 12 48 00 00 call 12033c <printf> <== NOT EXECUTED
11bb2a: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
handle->shared->inode.ino, rc, strerror (rc));
if (rrc == 0)
11bb2d: 85 f6 test %esi,%esi <== NOT EXECUTED
11bb2f: 75 02 jne 11bb33 <rtems_rfs_file_close+0x1d3><== NOT EXECUTED
11bb31: 89 fe mov %edi,%esi <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void rtems_chain_extract(
rtems_chain_node *the_node
)
{
_Chain_Extract( the_node );
11bb33: 83 ec 0c sub $0xc,%esp
11bb36: ff 73 1c pushl 0x1c(%ebx)
11bb39: e8 c6 bc ff ff call 117804 <_Chain_Extract>
rrc = rc;
}
rtems_chain_extract (&handle->shared->link);
free (handle->shared);
11bb3e: 59 pop %ecx
11bb3f: ff 73 1c pushl 0x1c(%ebx)
11bb42: e8 a1 e3 fe ff call 109ee8 <free>
11bb47: 83 c4 10 add $0x10,%esp
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
11bb4a: 52 push %edx
11bb4b: 52 push %edx
}
rc = rtems_rfs_buffer_handle_close (fs, &handle->buffer);
11bb4c: 8d 43 04 lea 0x4(%ebx),%eax
11bb4f: 50 push %eax
11bb50: ff 75 08 pushl 0x8(%ebp)
11bb53: e8 d9 e5 ff ff call 11a131 <rtems_rfs_buffer_handle_release>
handle->dirty = false;
11bb58: c6 43 04 00 movb $0x0,0x4(%ebx)
handle->bnum = 0;
11bb5c: c7 43 08 00 00 00 00 movl $0x0,0x8(%ebx)
handle->buffer = NULL;
11bb63: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx)
if ((rrc == 0) && (rc > 0))
rrc = rc;
if (rrc > 0)
11bb6a: 83 c4 10 add $0x10,%esp
11bb6d: 85 f6 test %esi,%esi
11bb6f: 7e 2d jle 11bb9e <rtems_rfs_file_close+0x23e><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_CLOSE))
11bb71: 50 push %eax <== NOT EXECUTED
11bb72: 50 push %eax <== NOT EXECUTED
11bb73: 6a 10 push $0x10 <== NOT EXECUTED
11bb75: 6a 00 push $0x0 <== NOT EXECUTED
11bb77: e8 20 7d ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11bb7c: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11bb7f: 84 c0 test %al,%al <== NOT EXECUTED
11bb81: 74 1b je 11bb9e <rtems_rfs_file_close+0x23e><== NOT EXECUTED
printf ("rtems-rfs: file-close: result: %d: %s\n", rrc, strerror (rrc));
11bb83: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11bb86: 56 push %esi <== NOT EXECUTED
11bb87: e8 38 55 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11bb8c: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11bb8f: 50 push %eax <== NOT EXECUTED
11bb90: 56 push %esi <== NOT EXECUTED
11bb91: 68 ab 19 13 00 push $0x1319ab <== NOT EXECUTED
11bb96: e8 a1 47 00 00 call 12033c <printf> <== NOT EXECUTED
11bb9b: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
free (handle);
11bb9e: 83 ec 0c sub $0xc,%esp
11bba1: 53 push %ebx
11bba2: e8 41 e3 fe ff call 109ee8 <free>
return rrc;
}
11bba7: 89 f0 mov %esi,%eax
11bba9: 8d 65 f4 lea -0xc(%ebp),%esp
11bbac: 5b pop %ebx
11bbad: 5e pop %esi
11bbae: 5f pop %edi
11bbaf: 5d pop %ebp
11bbb0: c3 ret
0011bd7f <rtems_rfs_file_io_end>:
int
rtems_rfs_file_io_end (rtems_rfs_file_handle* handle,
size_t size,
bool read)
{
11bd7f: 55 push %ebp
11bd80: 89 e5 mov %esp,%ebp
11bd82: 57 push %edi
11bd83: 56 push %esi
11bd84: 53 push %ebx
11bd85: 83 ec 24 sub $0x24,%esp
11bd88: 8b 75 08 mov 0x8(%ebp),%esi
11bd8b: 8b 7d 0c mov 0xc(%ebp),%edi
11bd8e: 8a 5d 10 mov 0x10(%ebp),%bl
bool atime;
bool mtime;
bool length;
int rc = 0;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_IO))
11bd91: 6a 20 push $0x20
11bd93: 6a 00 push $0x0
11bd95: e8 02 7b ff ff call 11389c <rtems_rfs_trace>
11bd9a: 83 c4 10 add $0x10,%esp
11bd9d: 84 c0 test %al,%al
11bd9f: 74 1e je 11bdbf <rtems_rfs_file_io_end+0x40><== ALWAYS TAKEN
printf ("rtems-rfs: file-io: end: %s size=%zu\n",
11bda1: b8 d2 19 13 00 mov $0x1319d2,%eax <== NOT EXECUTED
11bda6: 84 db test %bl,%bl <== NOT EXECUTED
11bda8: 74 05 je 11bdaf <rtems_rfs_file_io_end+0x30><== NOT EXECUTED
11bdaa: b8 fb 07 13 00 mov $0x1307fb,%eax <== NOT EXECUTED
11bdaf: 51 push %ecx <== NOT EXECUTED
11bdb0: 57 push %edi <== NOT EXECUTED
11bdb1: 50 push %eax <== NOT EXECUTED
11bdb2: 68 89 1a 13 00 push $0x131a89 <== NOT EXECUTED
11bdb7: e8 80 45 00 00 call 12033c <printf> <== NOT EXECUTED
11bdbc: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
read ? "read" : "write", size);
if (rtems_rfs_buffer_handle_has_block (&handle->buffer))
11bdbf: 83 7e 0c 00 cmpl $0x0,0xc(%esi)
11bdc3: 74 5b je 11be20 <rtems_rfs_file_io_end+0xa1><== NEVER TAKEN
{
if (!read)
11bdc5: 84 db test %bl,%bl
11bdc7: 75 04 jne 11bdcd <rtems_rfs_file_io_end+0x4e>
rtems_rfs_buffer_mark_dirty (rtems_rfs_file_buffer (handle));
11bdc9: c6 46 04 01 movb $0x1,0x4(%esi)
rc = rtems_rfs_buffer_handle_release (rtems_rfs_file_fs (handle),
11bdcd: 52 push %edx
11bdce: 52 push %edx
11bdcf: 8d 46 04 lea 0x4(%esi),%eax
11bdd2: 50 push %eax
11bdd3: 8b 46 1c mov 0x1c(%esi),%eax
11bdd6: ff b0 98 00 00 00 pushl 0x98(%eax)
11bddc: e8 50 e3 ff ff call 11a131 <rtems_rfs_buffer_handle_release>
11bde1: 89 45 e4 mov %eax,-0x1c(%ebp)
rtems_rfs_file_buffer (handle));
if (rc > 0)
11bde4: 83 c4 10 add $0x10,%esp
11bde7: 85 c0 test %eax,%eax
11bde9: 7e 3c jle 11be27 <rtems_rfs_file_io_end+0xa8><== ALWAYS TAKEN
{
printf (
11bdeb: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11bdee: 50 push %eax <== NOT EXECUTED
11bdef: e8 d0 52 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11bdf4: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11bdf7: ba d2 19 13 00 mov $0x1319d2,%edx <== NOT EXECUTED
11bdfc: 84 db test %bl,%bl <== NOT EXECUTED
11bdfe: 74 05 je 11be05 <rtems_rfs_file_io_end+0x86><== NOT EXECUTED
11be00: ba fb 07 13 00 mov $0x1307fb,%edx <== NOT EXECUTED
11be05: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11be08: 50 push %eax <== NOT EXECUTED
11be09: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
11be0c: 57 push %edi <== NOT EXECUTED
11be0d: 52 push %edx <== NOT EXECUTED
11be0e: 68 b1 1a 13 00 push $0x131ab1 <== NOT EXECUTED
11be13: e8 24 45 00 00 call 12033c <printf> <== NOT EXECUTED
"rtems-rfs: file-io: end: error on release: %s size=%zu: %d: %s\n",
read ? "read" : "write", size, rc, strerror (rc));
return rc;
11be18: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
11be1b: e9 2f 01 00 00 jmp 11bf4f <rtems_rfs_file_io_end+0x1d0><== NOT EXECUTED
bool read)
{
bool atime;
bool mtime;
bool length;
int rc = 0;
11be20: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp) <== NOT EXECUTED
* increase the block number and adjust the offset.
*
* If we are the last block and the position is past the current size update
* the size with the new length. The map holds the block count.
*/
handle->bpos.boff += size;
11be27: 03 7e 14 add 0x14(%esi),%edi
11be2a: 89 7e 14 mov %edi,0x14(%esi)
if (handle->bpos.boff >=
rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle)))
11be2d: 8b 46 1c mov 0x1c(%esi),%eax
11be30: 8b 90 98 00 00 00 mov 0x98(%eax),%edx
11be36: 8b 52 08 mov 0x8(%edx),%edx
* If we are the last block and the position is past the current size update
* the size with the new length. The map holds the block count.
*/
handle->bpos.boff += size;
if (handle->bpos.boff >=
11be39: 39 d7 cmp %edx,%edi
11be3b: 72 08 jb 11be45 <rtems_rfs_file_io_end+0xc6>
rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle)))
{
handle->bpos.bno++;
11be3d: ff 46 10 incl 0x10(%esi)
handle->bpos.boff -= rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle));
11be40: 29 d7 sub %edx,%edi
11be42: 89 7e 14 mov %edi,0x14(%esi)
}
length = false;
mtime = false;
11be45: 31 d2 xor %edx,%edx
if (!read &&
11be47: 84 db test %bl,%bl
11be49: 75 2f jne 11be7a <rtems_rfs_file_io_end+0xfb>
rtems_rfs_block_map_past_end (rtems_rfs_file_map (handle),
11be4b: 8b 4e 10 mov 0x10(%esi),%ecx
}
length = false;
mtime = false;
if (!read &&
11be4e: 85 c9 test %ecx,%ecx
11be50: 74 06 je 11be58 <rtems_rfs_file_io_end+0xd9>
rtems_rfs_block_map_past_end (rtems_rfs_file_map (handle),
11be52: 83 78 3c 00 cmpl $0x0,0x3c(%eax)
11be56: 74 16 je 11be6e <rtems_rfs_file_io_end+0xef><== NEVER TAKEN
11be58: 8b 78 3c mov 0x3c(%eax),%edi
11be5b: 39 f9 cmp %edi,%ecx
11be5d: 73 0f jae 11be6e <rtems_rfs_file_io_end+0xef>
11be5f: 4f dec %edi
handle->bpos.bno++;
handle->bpos.boff -= rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle));
}
length = false;
mtime = false;
11be60: 31 d2 xor %edx,%edx
if (!read &&
rtems_rfs_block_map_past_end (rtems_rfs_file_map (handle),
11be62: 39 f9 cmp %edi,%ecx
11be64: 75 14 jne 11be7a <rtems_rfs_file_io_end+0xfb>
11be66: 8b 48 40 mov 0x40(%eax),%ecx
11be69: 39 4e 14 cmp %ecx,0x14(%esi)
11be6c: 76 0c jbe 11be7a <rtems_rfs_file_io_end+0xfb>
*/
static inline void
rtems_rfs_block_map_set_size_offset (rtems_rfs_block_map* map,
rtems_rfs_block_off offset)
{
map->size.offset = offset;
11be6e: 8b 56 14 mov 0x14(%esi),%edx
11be71: 89 50 40 mov %edx,0x40(%eax)
map->dirty = true;
11be74: c6 40 34 01 movb $0x1,0x34(%eax)
rtems_rfs_file_bpos (handle)))
{
rtems_rfs_block_map_set_size_offset (rtems_rfs_file_map (handle),
handle->bpos.boff);
length = true;
mtime = true;
11be78: b2 01 mov $0x1,%dl
}
atime = rtems_rfs_file_update_atime (handle);
11be7a: 8b 06 mov (%esi),%eax
11be7c: 89 c1 mov %eax,%ecx
11be7e: 83 e1 01 and $0x1,%ecx
11be81: 83 f1 01 xor $0x1,%ecx
11be84: 89 4d e0 mov %ecx,-0x20(%ebp)
11be87: 88 4d df mov %cl,-0x21(%ebp)
mtime = rtems_rfs_file_update_mtime (handle) && mtime;
11be8a: 31 ff xor %edi,%edi
11be8c: a8 02 test $0x2,%al
11be8e: 75 03 jne 11be93 <rtems_rfs_file_io_end+0x114><== NEVER TAKEN
11be90: 0f b6 fa movzbl %dl,%edi
11be93: 89 f9 mov %edi,%ecx
11be95: 83 e1 01 and $0x1,%ecx
11be98: 88 4d de mov %cl,-0x22(%ebp)
length = rtems_rfs_file_update_length (handle) && length;
11be9b: 31 c9 xor %ecx,%ecx
11be9d: a8 04 test $0x4,%al
11be9f: 75 03 jne 11bea4 <rtems_rfs_file_io_end+0x125><== NEVER TAKEN
11bea1: 0f b6 ca movzbl %dl,%ecx
11bea4: 83 e1 01 and $0x1,%ecx
11bea7: 88 4d dd mov %cl,-0x23(%ebp)
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_IO))
11beaa: 50 push %eax
11beab: 50 push %eax
11beac: 6a 20 push $0x20
11beae: 6a 00 push $0x0
11beb0: e8 e7 79 ff ff call 11389c <rtems_rfs_trace>
11beb5: 83 c4 10 add $0x10,%esp
11beb8: 84 c0 test %al,%al
11beba: 74 3d je 11bef9 <rtems_rfs_file_io_end+0x17a><== ALWAYS TAKEN
printf ("rtems-rfs: file-io: end: pos=%" PRIu32 ":%" PRIu32 " %c %c %c\n",
11bebc: 80 7d dd 01 cmpb $0x1,-0x23(%ebp) <== NOT EXECUTED
11bec0: 19 c9 sbb %ecx,%ecx <== NOT EXECUTED
11bec2: 83 e1 e1 and $0xffffffe1,%ecx <== NOT EXECUTED
11bec5: 83 c1 4c add $0x4c,%ecx <== NOT EXECUTED
11bec8: 80 7d de 01 cmpb $0x1,-0x22(%ebp) <== NOT EXECUTED
11becc: 19 d2 sbb %edx,%edx <== NOT EXECUTED
11bece: 83 e2 e0 and $0xffffffe0,%edx <== NOT EXECUTED
11bed1: 83 c2 4d add $0x4d,%edx <== NOT EXECUTED
11bed4: 80 7d df 01 cmpb $0x1,-0x21(%ebp) <== NOT EXECUTED
11bed8: 19 c0 sbb %eax,%eax <== NOT EXECUTED
11beda: 83 e0 ec and $0xffffffec,%eax <== NOT EXECUTED
11bedd: 83 c0 41 add $0x41,%eax <== NOT EXECUTED
11bee0: 83 ec 08 sub $0x8,%esp <== NOT EXECUTED
11bee3: 51 push %ecx <== NOT EXECUTED
11bee4: 52 push %edx <== NOT EXECUTED
11bee5: 50 push %eax <== NOT EXECUTED
11bee6: ff 76 14 pushl 0x14(%esi) <== NOT EXECUTED
11bee9: ff 76 10 pushl 0x10(%esi) <== NOT EXECUTED
11beec: 68 f3 1a 13 00 push $0x131af3 <== NOT EXECUTED
11bef1: e8 46 44 00 00 call 12033c <printf> <== NOT EXECUTED
11bef6: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
handle->bpos.bno, handle->bpos.boff,
atime ? 'A' : '-', mtime ? 'M' : '-', length ? 'L' : '-');
if (atime || mtime)
11bef9: 0b 7d e0 or -0x20(%ebp),%edi
11befc: 83 e7 01 and $0x1,%edi
11beff: 74 33 je 11bf34 <rtems_rfs_file_io_end+0x1b5><== NEVER TAKEN
{
time_t now = time (NULL);
11bf01: 83 ec 0c sub $0xc,%esp
11bf04: 6a 00 push $0x0
11bf06: e8 41 86 00 00 call 12454c <time>
if (read && atime)
11bf0b: 83 c4 10 add $0x10,%esp
11bf0e: 84 db test %bl,%bl
11bf10: 74 0f je 11bf21 <rtems_rfs_file_io_end+0x1a2>
11bf12: 80 7d df 00 cmpb $0x0,-0x21(%ebp)
11bf16: 74 09 je 11bf21 <rtems_rfs_file_io_end+0x1a2><== NEVER TAKEN
handle->shared->atime = now;
11bf18: 8b 56 1c mov 0x1c(%esi),%edx
11bf1b: 89 82 8c 00 00 00 mov %eax,0x8c(%edx)
if (!read && mtime)
11bf21: 80 7d de 00 cmpb $0x0,-0x22(%ebp)
11bf25: 74 0d je 11bf34 <rtems_rfs_file_io_end+0x1b5>
11bf27: fe cb dec %bl
11bf29: 74 09 je 11bf34 <rtems_rfs_file_io_end+0x1b5><== NEVER TAKEN
handle->shared->mtime = now;
11bf2b: 8b 56 1c mov 0x1c(%esi),%edx
11bf2e: 89 82 90 00 00 00 mov %eax,0x90(%edx)
}
if (length)
11bf34: 80 7d dd 00 cmpb $0x0,-0x23(%ebp)
11bf38: 74 15 je 11bf4f <rtems_rfs_file_io_end+0x1d0>
{
handle->shared->size.count =
rtems_rfs_block_map_count (rtems_rfs_file_map (handle));
11bf3a: 8b 46 1c mov 0x1c(%esi),%eax
if (!read && mtime)
handle->shared->mtime = now;
}
if (length)
{
handle->shared->size.count =
11bf3d: 8b 50 3c mov 0x3c(%eax),%edx
11bf40: 89 90 84 00 00 00 mov %edx,0x84(%eax)
rtems_rfs_block_map_count (rtems_rfs_file_map (handle));
handle->shared->size.offset =
11bf46: 8b 50 40 mov 0x40(%eax),%edx
11bf49: 89 90 88 00 00 00 mov %edx,0x88(%eax)
rtems_rfs_block_map_size_offset (rtems_rfs_file_map (handle));
}
return rc;
}
11bf4f: 8b 45 e4 mov -0x1c(%ebp),%eax
11bf52: 8d 65 f4 lea -0xc(%ebp),%esp
11bf55: 5b pop %ebx
11bf56: 5e pop %esi
11bf57: 5f pop %edi
11bf58: 5d pop %ebp
11bf59: c3 ret
0011bf5a <rtems_rfs_file_io_release>:
int
rtems_rfs_file_io_release (rtems_rfs_file_handle* handle)
{
11bf5a: 55 push %ebp
11bf5b: 89 e5 mov %esp,%ebp
11bf5d: 83 ec 08 sub $0x8,%esp
11bf60: 8b 45 08 mov 0x8(%ebp),%eax
int rc = 0;
if (rtems_rfs_buffer_handle_has_block (&handle->buffer))
11bf63: 83 78 0c 00 cmpl $0x0,0xc(%eax)
11bf67: 74 19 je 11bf82 <rtems_rfs_file_io_release+0x28><== ALWAYS TAKEN
rc = rtems_rfs_buffer_handle_release (rtems_rfs_file_fs (handle),
11bf69: 52 push %edx <== NOT EXECUTED
11bf6a: 52 push %edx <== NOT EXECUTED
11bf6b: 8d 50 04 lea 0x4(%eax),%edx <== NOT EXECUTED
11bf6e: 52 push %edx <== NOT EXECUTED
11bf6f: 8b 40 1c mov 0x1c(%eax),%eax <== NOT EXECUTED
11bf72: ff b0 98 00 00 00 pushl 0x98(%eax) <== NOT EXECUTED
11bf78: e8 b4 e1 ff ff call 11a131 <rtems_rfs_buffer_handle_release><== NOT EXECUTED
11bf7d: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11bf80: eb 02 jmp 11bf84 <rtems_rfs_file_io_release+0x2a><== NOT EXECUTED
}
int
rtems_rfs_file_io_release (rtems_rfs_file_handle* handle)
{
int rc = 0;
11bf82: 31 c0 xor %eax,%eax
if (rtems_rfs_buffer_handle_has_block (&handle->buffer))
rc = rtems_rfs_buffer_handle_release (rtems_rfs_file_fs (handle),
rtems_rfs_file_buffer (handle));
return rc;
}
11bf84: c9 leave
11bf85: c3 ret
0011bbb1 <rtems_rfs_file_io_start>:
int
rtems_rfs_file_io_start (rtems_rfs_file_handle* handle,
size_t* available,
bool read)
{
11bbb1: 55 push %ebp
11bbb2: 89 e5 mov %esp,%ebp
11bbb4: 57 push %edi
11bbb5: 56 push %esi
11bbb6: 53 push %ebx
11bbb7: 83 ec 34 sub $0x34,%esp
11bbba: 8b 5d 08 mov 0x8(%ebp),%ebx
11bbbd: 8b 7d 0c mov 0xc(%ebp),%edi
11bbc0: 8a 55 10 mov 0x10(%ebp),%dl
11bbc3: 88 55 d7 mov %dl,-0x29(%ebp)
size_t size;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_IO))
11bbc6: 6a 20 push $0x20
11bbc8: 6a 00 push $0x0
11bbca: e8 cd 7c ff ff call 11389c <rtems_rfs_trace>
11bbcf: 83 c4 10 add $0x10,%esp
11bbd2: 84 c0 test %al,%al
11bbd4: 74 26 je 11bbfc <rtems_rfs_file_io_start+0x4b><== ALWAYS TAKEN
printf ("rtems-rfs: file-io: start: %s pos=%" PRIu32 ":%" PRIu32 "\n",
11bbd6: 8b 4b 14 mov 0x14(%ebx),%ecx <== NOT EXECUTED
11bbd9: 8b 53 10 mov 0x10(%ebx),%edx <== NOT EXECUTED
11bbdc: b8 d2 19 13 00 mov $0x1319d2,%eax <== NOT EXECUTED
11bbe1: 80 7d d7 00 cmpb $0x0,-0x29(%ebp) <== NOT EXECUTED
11bbe5: 74 05 je 11bbec <rtems_rfs_file_io_start+0x3b><== NOT EXECUTED
11bbe7: b8 fb 07 13 00 mov $0x1307fb,%eax <== NOT EXECUTED
11bbec: 51 push %ecx <== NOT EXECUTED
11bbed: 52 push %edx <== NOT EXECUTED
11bbee: 50 push %eax <== NOT EXECUTED
11bbef: 68 d8 19 13 00 push $0x1319d8 <== NOT EXECUTED
11bbf4: e8 43 47 00 00 call 12033c <printf> <== NOT EXECUTED
11bbf9: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
read ? "read" : "write", handle->bpos.bno, handle->bpos.boff);
if (!rtems_rfs_buffer_handle_has_block (&handle->buffer))
11bbfc: 83 7b 0c 00 cmpl $0x0,0xc(%ebx)
11bc00: 0f 85 0c 01 00 00 jne 11bd12 <rtems_rfs_file_io_start+0x161>
int rc;
request_read = read;
rc = rtems_rfs_block_map_find (rtems_rfs_file_fs (handle),
rtems_rfs_file_map (handle),
11bc06: 8b 43 1c mov 0x1c(%ebx),%eax
bool request_read;
int rc;
request_read = read;
rc = rtems_rfs_block_map_find (rtems_rfs_file_fs (handle),
11bc09: 8d 55 e4 lea -0x1c(%ebp),%edx
11bc0c: 52 push %edx
11bc0d: 8d 53 10 lea 0x10(%ebx),%edx
11bc10: 52 push %edx
11bc11: 8d 50 34 lea 0x34(%eax),%edx
11bc14: 52 push %edx
11bc15: ff b0 98 00 00 00 pushl 0x98(%eax)
11bc1b: e8 d9 dc ff ff call 1198f9 <rtems_rfs_block_map_find>
11bc20: 89 c2 mov %eax,%edx
rtems_rfs_file_map (handle),
rtems_rfs_file_bpos (handle),
&block);
if (rc > 0)
11bc22: 83 c4 10 add $0x10,%esp
11bc25: 85 c0 test %eax,%eax
11bc27: 7e 6c jle 11bc95 <rtems_rfs_file_io_start+0xe4>
{
/*
* Has the read reached the EOF ?
*/
if (read && (rc == ENXIO))
11bc29: 83 f8 06 cmp $0x6,%eax
11bc2c: 75 13 jne 11bc41 <rtems_rfs_file_io_start+0x90><== NEVER TAKEN
11bc2e: 80 7d d7 00 cmpb $0x0,-0x29(%ebp)
11bc32: 74 0d je 11bc41 <rtems_rfs_file_io_start+0x90><== ALWAYS TAKEN
{
*available = 0;
11bc34: c7 07 00 00 00 00 movl $0x0,(%edi) <== NOT EXECUTED
return 0;
11bc3a: 30 d2 xor %dl,%dl <== NOT EXECUTED
11bc3c: e9 34 01 00 00 jmp 11bd75 <rtems_rfs_file_io_start+0x1c4><== NOT EXECUTED
}
if (rc != ENXIO)
11bc41: 83 fa 06 cmp $0x6,%edx
11bc44: 0f 85 2b 01 00 00 jne 11bd75 <rtems_rfs_file_io_start+0x1c4><== NEVER TAKEN
return rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_IO))
11bc4a: 56 push %esi
11bc4b: 56 push %esi
11bc4c: 6a 20 push $0x20
11bc4e: 6a 00 push $0x0
11bc50: e8 47 7c ff ff call 11389c <rtems_rfs_trace>
11bc55: 83 c4 10 add $0x10,%esp
11bc58: 84 c0 test %al,%al
11bc5a: 74 10 je 11bc6c <rtems_rfs_file_io_start+0xbb><== ALWAYS TAKEN
printf ("rtems-rfs: file-io: start: grow\n");
11bc5c: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11bc5f: 68 03 1a 13 00 push $0x131a03 <== NOT EXECUTED
11bc64: e8 eb 48 00 00 call 120554 <puts> <== NOT EXECUTED
11bc69: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rc = rtems_rfs_block_map_grow (rtems_rfs_file_fs (handle),
rtems_rfs_file_map (handle),
11bc6c: 8b 43 1c mov 0x1c(%ebx),%eax
1, &block);
11bc6f: 8d 55 e4 lea -0x1c(%ebp),%edx
return rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_IO))
printf ("rtems-rfs: file-io: start: grow\n");
rc = rtems_rfs_block_map_grow (rtems_rfs_file_fs (handle),
11bc72: 52 push %edx
11bc73: 6a 01 push $0x1
11bc75: 8d 50 34 lea 0x34(%eax),%edx
11bc78: 52 push %edx
11bc79: ff b0 98 00 00 00 pushl 0x98(%eax)
11bc7f: e8 1a de ff ff call 119a9e <rtems_rfs_block_map_grow>
11bc84: 89 c2 mov %eax,%edx
rtems_rfs_file_map (handle),
1, &block);
if (rc > 0)
11bc86: 83 c4 10 add $0x10,%esp
11bc89: 85 c0 test %eax,%eax
11bc8b: 0f 8f e4 00 00 00 jg 11bd75 <rtems_rfs_file_io_start+0x1c4>
return rc;
request_read = false;
11bc91: 31 f6 xor %esi,%esi
11bc93: eb 25 jmp 11bcba <rtems_rfs_file_io_start+0x109>
/*
* If this is a write check if the write starts within a block or the
* amount of data is less than a block size. If it is read the block
* rather than getting a block to fill.
*/
if (!read &&
11bc95: 0f b6 75 d7 movzbl -0x29(%ebp),%esi
11bc99: 80 7d d7 00 cmpb $0x0,-0x29(%ebp)
11bc9d: 75 1b jne 11bcba <rtems_rfs_file_io_start+0x109>
(rtems_rfs_file_block_offset (handle) ||
(*available < rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle)))))
request_read = true;
11bc9f: be 01 00 00 00 mov $0x1,%esi
/*
* If this is a write check if the write starts within a block or the
* amount of data is less than a block size. If it is read the block
* rather than getting a block to fill.
*/
if (!read &&
11bca4: 83 7b 14 00 cmpl $0x0,0x14(%ebx)
11bca8: 75 10 jne 11bcba <rtems_rfs_file_io_start+0x109>
(rtems_rfs_file_block_offset (handle) ||
(*available < rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle)))))
11bcaa: 8b 43 1c mov 0x1c(%ebx),%eax
11bcad: 8b 80 98 00 00 00 mov 0x98(%eax),%eax
* If this is a write check if the write starts within a block or the
* amount of data is less than a block size. If it is read the block
* rather than getting a block to fill.
*/
if (!read &&
(rtems_rfs_file_block_offset (handle) ||
11bcb3: 8b 48 08 mov 0x8(%eax),%ecx
11bcb6: 39 0f cmp %ecx,(%edi)
11bcb8: 73 d7 jae 11bc91 <rtems_rfs_file_io_start+0xe0><== NEVER TAKEN
(*available < rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle)))))
request_read = true;
}
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_IO))
11bcba: 51 push %ecx
11bcbb: 51 push %ecx
11bcbc: 6a 20 push $0x20
11bcbe: 6a 00 push $0x0
11bcc0: e8 d7 7b ff ff call 11389c <rtems_rfs_trace>
11bcc5: 83 c4 10 add $0x10,%esp
11bcc8: 84 c0 test %al,%al
11bcca: 74 22 je 11bcee <rtems_rfs_file_io_start+0x13d><== ALWAYS TAKEN
printf ("rtems-rfs: file-io: start: block=%" PRIu32 " request-read=%s\n",
11bccc: b8 8f 07 13 00 mov $0x13078f,%eax <== NOT EXECUTED
11bcd1: 89 f2 mov %esi,%edx <== NOT EXECUTED
11bcd3: 84 d2 test %dl,%dl <== NOT EXECUTED
11bcd5: 74 05 je 11bcdc <rtems_rfs_file_io_start+0x12b><== NOT EXECUTED
11bcd7: b8 3c de 12 00 mov $0x12de3c,%eax <== NOT EXECUTED
11bcdc: 52 push %edx <== NOT EXECUTED
11bcdd: 50 push %eax <== NOT EXECUTED
11bcde: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
11bce1: 68 23 1a 13 00 push $0x131a23 <== NOT EXECUTED
11bce6: e8 51 46 00 00 call 12033c <printf> <== NOT EXECUTED
11bceb: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
block, request_read ? "yes" : "no");
rc = rtems_rfs_buffer_handle_request (rtems_rfs_file_fs (handle),
11bcee: 89 f1 mov %esi,%ecx
11bcf0: 0f b6 d1 movzbl %cl,%edx
11bcf3: 52 push %edx
11bcf4: ff 75 e4 pushl -0x1c(%ebp)
11bcf7: 8d 43 04 lea 0x4(%ebx),%eax
11bcfa: 50 push %eax
11bcfb: 8b 43 1c mov 0x1c(%ebx),%eax
11bcfe: ff b0 98 00 00 00 pushl 0x98(%eax)
11bd04: e8 a1 e5 ff ff call 11a2aa <rtems_rfs_buffer_handle_request>
11bd09: 89 c2 mov %eax,%edx
rtems_rfs_file_buffer (handle),
block, request_read);
if (rc > 0)
11bd0b: 83 c4 10 add $0x10,%esp
11bd0e: 85 c0 test %eax,%eax
11bd10: 7f 63 jg 11bd75 <rtems_rfs_file_io_start+0x1c4><== NEVER TAKEN
return rc;
}
if (read
11bd12: 80 7d d7 00 cmpb $0x0,-0x29(%ebp)
11bd16: 74 1f je 11bd37 <rtems_rfs_file_io_start+0x186>
&& rtems_rfs_block_map_last (rtems_rfs_file_map (handle))
11bd18: 8b 43 1c mov 0x1c(%ebx),%eax
11bd1b: 8b 50 44 mov 0x44(%eax),%edx
11bd1e: 85 d2 test %edx,%edx
11bd20: 75 06 jne 11bd28 <rtems_rfs_file_io_start+0x177>
11bd22: 83 78 3c 00 cmpl $0x0,0x3c(%eax)
11bd26: 74 08 je 11bd30 <rtems_rfs_file_io_start+0x17f><== NEVER TAKEN
11bd28: 8b 48 3c mov 0x3c(%eax),%ecx
11bd2b: 49 dec %ecx
11bd2c: 39 ca cmp %ecx,%edx
11bd2e: 75 07 jne 11bd37 <rtems_rfs_file_io_start+0x186>
&& rtems_rfs_block_map_size_offset (rtems_rfs_file_map (handle)))
11bd30: 8b 70 40 mov 0x40(%eax),%esi
11bd33: 85 f6 test %esi,%esi
11bd35: 75 0c jne 11bd43 <rtems_rfs_file_io_start+0x192>
size = rtems_rfs_block_map_size_offset (rtems_rfs_file_map (handle));
else
size = rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle));
11bd37: 8b 43 1c mov 0x1c(%ebx),%eax
11bd3a: 8b 80 98 00 00 00 mov 0x98(%eax),%eax
11bd40: 8b 70 08 mov 0x8(%eax),%esi
*available = size - rtems_rfs_file_block_offset (handle);
11bd43: 89 f0 mov %esi,%eax
11bd45: 2b 43 14 sub 0x14(%ebx),%eax
11bd48: 89 07 mov %eax,(%edi)
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_IO))
11bd4a: 50 push %eax
11bd4b: 50 push %eax
11bd4c: 6a 20 push $0x20
11bd4e: 6a 00 push $0x0
11bd50: e8 47 7b ff ff call 11389c <rtems_rfs_trace>
11bd55: 83 c4 10 add $0x10,%esp
printf ("rtems-rfs: file-io: start: available=%zu (%zu)\n",
*available, size);
return 0;
11bd58: 31 d2 xor %edx,%edx
else
size = rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle));
*available = size - rtems_rfs_file_block_offset (handle);
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_IO))
11bd5a: 84 c0 test %al,%al
11bd5c: 74 17 je 11bd75 <rtems_rfs_file_io_start+0x1c4><== ALWAYS TAKEN
printf ("rtems-rfs: file-io: start: available=%zu (%zu)\n",
11bd5e: 53 push %ebx <== NOT EXECUTED
11bd5f: 56 push %esi <== NOT EXECUTED
11bd60: ff 37 pushl (%edi) <== NOT EXECUTED
11bd62: 68 59 1a 13 00 push $0x131a59 <== NOT EXECUTED
11bd67: 89 55 d0 mov %edx,-0x30(%ebp) <== NOT EXECUTED
11bd6a: e8 cd 45 00 00 call 12033c <printf> <== NOT EXECUTED
11bd6f: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11bd72: 8b 55 d0 mov -0x30(%ebp),%edx <== NOT EXECUTED
*available, size);
return 0;
}
11bd75: 89 d0 mov %edx,%eax
11bd77: 8d 65 f4 lea -0xc(%ebp),%esp
11bd7a: 5b pop %ebx
11bd7b: 5e pop %esi
11bd7c: 5f pop %edi
11bd7d: 5d pop %ebp
11bd7e: c3 ret
0011c366 <rtems_rfs_file_open>:
int
rtems_rfs_file_open (rtems_rfs_file_system* fs,
rtems_rfs_ino ino,
int oflag,
rtems_rfs_file_handle** file)
{
11c366: 55 push %ebp
11c367: 89 e5 mov %esp,%ebp
11c369: 57 push %edi
11c36a: 56 push %esi
11c36b: 53 push %ebx
11c36c: 83 ec 24 sub $0x24,%esp
rtems_rfs_file_handle* handle;
rtems_rfs_file_shared* shared;
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_OPEN))
11c36f: 6a 08 push $0x8
11c371: 6a 00 push $0x0
11c373: e8 24 75 ff ff call 11389c <rtems_rfs_trace>
11c378: 83 c4 10 add $0x10,%esp
11c37b: 84 c0 test %al,%al
11c37d: 74 12 je 11c391 <rtems_rfs_file_open+0x2b><== ALWAYS TAKEN
printf ("rtems-rfs: file-open: ino=%" PRId32 "\n", ino);
11c37f: 56 push %esi <== NOT EXECUTED
11c380: 56 push %esi <== NOT EXECUTED
11c381: ff 75 0c pushl 0xc(%ebp) <== NOT EXECUTED
11c384: 68 69 1b 13 00 push $0x131b69 <== NOT EXECUTED
11c389: e8 ae 3f 00 00 call 12033c <printf> <== NOT EXECUTED
11c38e: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
*file = NULL;
11c391: 8b 45 14 mov 0x14(%ebp),%eax
11c394: c7 00 00 00 00 00 movl $0x0,(%eax)
/*
* Allocate a new handle and initialise it. Do this before we deal with the
* shared node data so we do not have to be concerned with reference
* counting.
*/
handle = malloc (sizeof (rtems_rfs_file_handle));
11c39a: 83 ec 0c sub $0xc,%esp
11c39d: 6a 20 push $0x20
11c39f: e8 5c e0 fe ff call 10a400 <malloc>
11c3a4: 89 c6 mov %eax,%esi
if (!handle)
11c3a6: 83 c4 10 add $0x10,%esp
return ENOMEM;
11c3a9: c7 45 e4 0c 00 00 00 movl $0xc,-0x1c(%ebp)
* Allocate a new handle and initialise it. Do this before we deal with the
* shared node data so we do not have to be concerned with reference
* counting.
*/
handle = malloc (sizeof (rtems_rfs_file_handle));
if (!handle)
11c3b0: 85 c0 test %eax,%eax
11c3b2: 0f 84 62 02 00 00 je 11c61a <rtems_rfs_file_open+0x2b4><== NEVER TAKEN
return ENOMEM;
memset (handle, 0, sizeof (rtems_rfs_file_handle));
11c3b8: 31 c0 xor %eax,%eax
11c3ba: 89 f7 mov %esi,%edi
11c3bc: b9 08 00 00 00 mov $0x8,%ecx
11c3c1: f3 ab rep stos %eax,%es:(%edi)
11c3c3: 89 4d e0 mov %ecx,-0x20(%ebp)
/*
* Scan the file system data list of open files for this ino. If found up
* the reference count and return the pointer to the data.
*/
shared = rtems_rfs_file_get_shared (fs, ino);
11c3c6: 53 push %ebx
11c3c7: 53 push %ebx
11c3c8: ff 75 0c pushl 0xc(%ebp)
11c3cb: ff 75 08 pushl 0x8(%ebp)
11c3ce: e8 73 ff ff ff call 11c346 <rtems_rfs_file_get_shared>
11c3d3: 83 c4 10 add $0x10,%esp
11c3d6: 89 c3 mov %eax,%ebx
if (shared)
11c3d8: 85 c0 test %eax,%eax
11c3da: 74 28 je 11c404 <rtems_rfs_file_open+0x9e><== ALWAYS TAKEN
{
shared->references++;
11c3dc: ff 40 08 incl 0x8(%eax) <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_OPEN))
11c3df: 51 push %ecx <== NOT EXECUTED
11c3e0: 51 push %ecx <== NOT EXECUTED
11c3e1: 6a 08 push $0x8 <== NOT EXECUTED
11c3e3: 6a 00 push $0x0 <== NOT EXECUTED
11c3e5: e8 b2 74 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11c3ea: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11c3ed: 84 c0 test %al,%al <== NOT EXECUTED
11c3ef: 0f 84 11 02 00 00 je 11c606 <rtems_rfs_file_open+0x2a0><== NOT EXECUTED
printf ("rtems-rfs: file-open: ino=%" PRId32 " shared\n", ino);
11c3f5: 52 push %edx <== NOT EXECUTED
11c3f6: 52 push %edx <== NOT EXECUTED
11c3f7: ff 75 0c pushl 0xc(%ebp) <== NOT EXECUTED
11c3fa: 68 88 1b 13 00 push $0x131b88 <== NOT EXECUTED
11c3ff: e9 fa 01 00 00 jmp 11c5fe <rtems_rfs_file_open+0x298><== NOT EXECUTED
{
/*
* None exists so create. Copy in the shared parts of the inode we hold in
* memory.
*/
shared = malloc (sizeof (rtems_rfs_file_shared));
11c404: 83 ec 0c sub $0xc,%esp
11c407: 68 9c 00 00 00 push $0x9c
11c40c: e8 ef df fe ff call 10a400 <malloc>
11c411: 89 c3 mov %eax,%ebx
if (!shared)
11c413: 83 c4 10 add $0x10,%esp
11c416: 85 c0 test %eax,%eax
11c418: 75 07 jne 11c421 <rtems_rfs_file_open+0xbb><== ALWAYS TAKEN
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
11c41a: 50 push %eax <== NOT EXECUTED
11c41b: 50 push %eax <== NOT EXECUTED
11c41c: e9 ba 00 00 00 jmp 11c4db <rtems_rfs_file_open+0x175><== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &handle->buffer);
free (handle);
return ENOMEM;
}
memset (shared, 0, sizeof (rtems_rfs_file_shared));
11c421: b9 27 00 00 00 mov $0x27,%ecx
11c426: 89 c7 mov %eax,%edi
11c428: 8b 45 e0 mov -0x20(%ebp),%eax
11c42b: f3 ab rep stos %eax,%es:(%edi)
rc = rtems_rfs_inode_open (fs, ino, &shared->inode, true);
11c42d: 8d 7b 0c lea 0xc(%ebx),%edi
11c430: 6a 01 push $0x1
11c432: 57 push %edi
11c433: ff 75 0c pushl 0xc(%ebp)
11c436: ff 75 08 pushl 0x8(%ebp)
11c439: e8 ec 5d ff ff call 11222a <rtems_rfs_inode_open>
11c43e: 89 45 e4 mov %eax,-0x1c(%ebp)
if (rc > 0)
11c441: 83 c4 10 add $0x10,%esp
11c444: 85 c0 test %eax,%eax
11c446: 7e 36 jle 11c47e <rtems_rfs_file_open+0x118><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_OPEN))
11c448: 50 push %eax <== NOT EXECUTED
11c449: 50 push %eax <== NOT EXECUTED
11c44a: 6a 08 push $0x8 <== NOT EXECUTED
11c44c: 6a 00 push $0x0 <== NOT EXECUTED
11c44e: e8 49 74 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11c453: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11c456: 84 c0 test %al,%al <== NOT EXECUTED
11c458: 74 1f je 11c479 <rtems_rfs_file_open+0x113><== NOT EXECUTED
printf ("rtems-rfs: file-open: inode open failed: %d: %s\n",
11c45a: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11c45d: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
11c460: e8 5f 4c 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11c465: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11c468: 50 push %eax <== NOT EXECUTED
11c469: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
11c46c: 68 ae 1b 13 00 push $0x131bae <== NOT EXECUTED
11c471: e8 c6 3e 00 00 call 12033c <printf> <== NOT EXECUTED
11c476: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rc, strerror (rc));
free (shared);
11c479: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11c47c: eb 55 jmp 11c4d3 <rtems_rfs_file_open+0x16d><== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &handle->buffer);
free (handle);
return rc;
}
rc = rtems_rfs_block_map_open (fs, &shared->inode, &shared->map);
11c47e: 50 push %eax
11c47f: 8d 43 34 lea 0x34(%ebx),%eax
11c482: 50 push %eax
11c483: 57 push %edi
11c484: ff 75 08 pushl 0x8(%ebp)
11c487: e8 16 d1 ff ff call 1195a2 <rtems_rfs_block_map_open>
11c48c: 89 45 e4 mov %eax,-0x1c(%ebp)
if (rc > 0)
11c48f: 83 c4 10 add $0x10,%esp
11c492: 85 c0 test %eax,%eax
11c494: 7e 73 jle 11c509 <rtems_rfs_file_open+0x1a3><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_OPEN))
11c496: 50 push %eax <== NOT EXECUTED
11c497: 50 push %eax <== NOT EXECUTED
11c498: 6a 08 push $0x8 <== NOT EXECUTED
11c49a: 6a 00 push $0x0 <== NOT EXECUTED
11c49c: e8 fb 73 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11c4a1: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11c4a4: 84 c0 test %al,%al <== NOT EXECUTED
11c4a6: 74 1f je 11c4c7 <rtems_rfs_file_open+0x161><== NOT EXECUTED
printf ("rtems-rfs: file-open: block map open failed: %d: %s\n",
11c4a8: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11c4ab: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
11c4ae: e8 11 4c 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11c4b3: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11c4b6: 50 push %eax <== NOT EXECUTED
11c4b7: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
11c4ba: 68 df 1b 13 00 push $0x131bdf <== NOT EXECUTED
11c4bf: e8 78 3e 00 00 call 12033c <printf> <== NOT EXECUTED
11c4c4: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rc, strerror (rc));
rtems_rfs_inode_close (fs, &shared->inode);
11c4c7: 50 push %eax <== NOT EXECUTED
11c4c8: 50 push %eax <== NOT EXECUTED
11c4c9: 57 push %edi <== NOT EXECUTED
11c4ca: ff 75 08 pushl 0x8(%ebp) <== NOT EXECUTED
11c4cd: e8 d5 5e ff ff call 1123a7 <rtems_rfs_inode_close> <== NOT EXECUTED
free (shared);
11c4d2: 58 pop %eax <== NOT EXECUTED
11c4d3: 53 push %ebx <== NOT EXECUTED
11c4d4: e8 0f da fe ff call 109ee8 <free> <== NOT EXECUTED
11c4d9: 59 pop %ecx <== NOT EXECUTED
11c4da: 5b pop %ebx <== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &handle->buffer);
11c4db: 8d 46 04 lea 0x4(%esi),%eax <== NOT EXECUTED
11c4de: 50 push %eax <== NOT EXECUTED
11c4df: ff 75 08 pushl 0x8(%ebp) <== NOT EXECUTED
11c4e2: e8 4a dc ff ff call 11a131 <rtems_rfs_buffer_handle_release><== NOT EXECUTED
handle->dirty = false;
11c4e7: c6 46 04 00 movb $0x0,0x4(%esi) <== NOT EXECUTED
handle->bnum = 0;
11c4eb: c7 46 08 00 00 00 00 movl $0x0,0x8(%esi) <== NOT EXECUTED
handle->buffer = NULL;
11c4f2: c7 46 0c 00 00 00 00 movl $0x0,0xc(%esi) <== NOT EXECUTED
free (handle);
11c4f9: 89 34 24 mov %esi,(%esp) <== NOT EXECUTED
11c4fc: e8 e7 d9 fe ff call 109ee8 <free> <== NOT EXECUTED
return rc;
11c501: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11c504: e9 11 01 00 00 jmp 11c61a <rtems_rfs_file_open+0x2b4><== NOT EXECUTED
}
shared->references = 1;
11c509: c7 43 08 01 00 00 00 movl $0x1,0x8(%ebx)
if (shared->inode.ino == ino)
return shared;
node = rtems_chain_next (node);
}
return NULL;
}
11c510: 8b 43 18 mov 0x18(%ebx),%eax
* @return uint32_t The block count.
*/
static inline uint32_t
rtems_rfs_inode_get_block_count (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->block_count);
11c513: 0f b6 50 0c movzbl 0xc(%eax),%edx
11c517: c1 e2 18 shl $0x18,%edx
11c51a: 0f b6 48 0d movzbl 0xd(%eax),%ecx
11c51e: c1 e1 10 shl $0x10,%ecx
11c521: 09 ca or %ecx,%edx
11c523: 0f b6 48 0f movzbl 0xf(%eax),%ecx
11c527: 09 ca or %ecx,%edx
11c529: 0f b6 48 0e movzbl 0xe(%eax),%ecx
11c52d: c1 e1 08 shl $0x8,%ecx
11c530: 09 ca or %ecx,%edx
11c532: 89 93 84 00 00 00 mov %edx,0x84(%ebx)
* @return uint32_t The block offset.
*/
static inline uint16_t
rtems_rfs_inode_get_block_offset (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u16 (&handle->node->block_offset);
11c538: 0f b6 48 0a movzbl 0xa(%eax),%ecx
11c53c: c1 e1 08 shl $0x8,%ecx
11c53f: 0f b6 50 0b movzbl 0xb(%eax),%edx
11c543: 09 ca or %ecx,%edx
return rc;
}
shared->references = 1;
shared->size.count = rtems_rfs_inode_get_block_count (&shared->inode);
shared->size.offset = rtems_rfs_inode_get_block_offset (&shared->inode);
11c545: 0f b7 d2 movzwl %dx,%edx
11c548: 89 93 88 00 00 00 mov %edx,0x88(%ebx)
* @return rtems_rfs_time The atime.
*/
static inline rtems_rfs_time
rtems_rfs_inode_get_atime (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->atime);
11c54e: 0f b6 50 10 movzbl 0x10(%eax),%edx
11c552: c1 e2 18 shl $0x18,%edx
11c555: 0f b6 48 11 movzbl 0x11(%eax),%ecx
11c559: c1 e1 10 shl $0x10,%ecx
11c55c: 09 ca or %ecx,%edx
11c55e: 0f b6 48 13 movzbl 0x13(%eax),%ecx
11c562: 09 ca or %ecx,%edx
11c564: 0f b6 48 12 movzbl 0x12(%eax),%ecx
11c568: c1 e1 08 shl $0x8,%ecx
11c56b: 09 ca or %ecx,%edx
11c56d: 89 93 8c 00 00 00 mov %edx,0x8c(%ebx)
* @return rtems_rfs_time The mtime.
*/
static inline rtems_rfs_time
rtems_rfs_inode_get_mtime (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->mtime);
11c573: 0f b6 50 14 movzbl 0x14(%eax),%edx
11c577: c1 e2 18 shl $0x18,%edx
11c57a: 0f b6 48 15 movzbl 0x15(%eax),%ecx
11c57e: c1 e1 10 shl $0x10,%ecx
11c581: 09 ca or %ecx,%edx
11c583: 0f b6 48 17 movzbl 0x17(%eax),%ecx
11c587: 09 ca or %ecx,%edx
11c589: 0f b6 48 16 movzbl 0x16(%eax),%ecx
11c58d: c1 e1 08 shl $0x8,%ecx
11c590: 09 ca or %ecx,%edx
11c592: 89 93 90 00 00 00 mov %edx,0x90(%ebx)
* @return rtems_rfs_time The ctime.
*/
static inline rtems_rfs_time
rtems_rfs_inode_get_ctime (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->ctime);
11c598: 0f b6 50 18 movzbl 0x18(%eax),%edx
11c59c: c1 e2 18 shl $0x18,%edx
11c59f: 0f b6 48 19 movzbl 0x19(%eax),%ecx
11c5a3: c1 e1 10 shl $0x10,%ecx
11c5a6: 09 ca or %ecx,%edx
11c5a8: 0f b6 48 1b movzbl 0x1b(%eax),%ecx
11c5ac: 09 ca or %ecx,%edx
11c5ae: 0f b6 40 1a movzbl 0x1a(%eax),%eax
11c5b2: c1 e0 08 shl $0x8,%eax
11c5b5: 09 c2 or %eax,%edx
11c5b7: 89 93 94 00 00 00 mov %edx,0x94(%ebx)
shared->atime = rtems_rfs_inode_get_atime (&shared->inode);
shared->mtime = rtems_rfs_inode_get_mtime (&shared->inode);
shared->ctime = rtems_rfs_inode_get_ctime (&shared->inode);
shared->fs = fs;
11c5bd: 8b 4d 08 mov 0x8(%ebp),%ecx
11c5c0: 89 8b 98 00 00 00 mov %ecx,0x98(%ebx)
RTEMS_INLINE_ROUTINE void rtems_chain_append(
rtems_chain_control *the_chain,
rtems_chain_node *the_node
)
{
_Chain_Append( the_chain, the_node );
11c5c6: 50 push %eax
11c5c7: 50 push %eax
11c5c8: 53 push %ebx
rtems_chain_append (&fs->file_shares, &shared->link);
11c5c9: 89 c8 mov %ecx,%eax
11c5cb: 83 c0 74 add $0x74,%eax
11c5ce: 50 push %eax
11c5cf: e8 58 1f ff ff call 10e52c <_Chain_Append>
rtems_rfs_inode_unload (fs, &shared->inode, false);
11c5d4: 83 c4 0c add $0xc,%esp
11c5d7: 6a 00 push $0x0
11c5d9: 57 push %edi
11c5da: ff 75 08 pushl 0x8(%ebp)
11c5dd: e8 fb 5c ff ff call 1122dd <rtems_rfs_inode_unload>
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_OPEN))
11c5e2: 58 pop %eax
11c5e3: 5a pop %edx
11c5e4: 6a 08 push $0x8
11c5e6: 6a 00 push $0x0
11c5e8: e8 af 72 ff ff call 11389c <rtems_rfs_trace>
11c5ed: 83 c4 10 add $0x10,%esp
11c5f0: 84 c0 test %al,%al
11c5f2: 74 12 je 11c606 <rtems_rfs_file_open+0x2a0><== ALWAYS TAKEN
printf ("rtems-rfs: file-open: ino=%" PRId32 " share created\n", ino);
11c5f4: 57 push %edi <== NOT EXECUTED
11c5f5: 57 push %edi <== NOT EXECUTED
11c5f6: ff 75 0c pushl 0xc(%ebp) <== NOT EXECUTED
11c5f9: 68 14 1c 13 00 push $0x131c14 <== NOT EXECUTED
11c5fe: e8 39 3d 00 00 call 12033c <printf> <== NOT EXECUTED
11c603: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
handle->flags = oflag;
11c606: 8b 45 10 mov 0x10(%ebp),%eax
11c609: 89 06 mov %eax,(%esi)
handle->shared = shared;
11c60b: 89 5e 1c mov %ebx,0x1c(%esi)
*file = handle;
11c60e: 8b 45 14 mov 0x14(%ebp),%eax
11c611: 89 30 mov %esi,(%eax)
return 0;
11c613: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
}
11c61a: 8b 45 e4 mov -0x1c(%ebp),%eax
11c61d: 8d 65 f4 lea -0xc(%ebp),%esp
11c620: 5b pop %ebx
11c621: 5e pop %esi
11c622: 5f pop %edi
11c623: 5d pop %ebp
11c624: c3 ret
0011bf86 <rtems_rfs_file_seek>:
int
rtems_rfs_file_seek (rtems_rfs_file_handle* handle,
rtems_rfs_pos pos,
rtems_rfs_pos* new_pos)
{
11bf86: 55 push %ebp
11bf87: 89 e5 mov %esp,%ebp
11bf89: 57 push %edi
11bf8a: 56 push %esi
11bf8b: 53 push %ebx
11bf8c: 83 ec 34 sub $0x34,%esp
11bf8f: 8b 5d 08 mov 0x8(%ebp),%ebx
11bf92: 8b 75 0c mov 0xc(%ebp),%esi
11bf95: 8b 7d 10 mov 0x10(%ebp),%edi
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_IO))
11bf98: 6a 20 push $0x20
11bf9a: 6a 00 push $0x0
11bf9c: e8 fb 78 ff ff call 11389c <rtems_rfs_trace>
11bfa1: 83 c4 10 add $0x10,%esp
11bfa4: 84 c0 test %al,%al
11bfa6: 74 10 je 11bfb8 <rtems_rfs_file_seek+0x32><== ALWAYS TAKEN
printf ("rtems-rfs: file-seek: new=%" PRIu64 "\n", pos);
11bfa8: 51 push %ecx <== NOT EXECUTED
11bfa9: 57 push %edi <== NOT EXECUTED
11bfaa: 56 push %esi <== NOT EXECUTED
11bfab: 68 24 1b 13 00 push $0x131b24 <== NOT EXECUTED
11bfb0: e8 87 43 00 00 call 12033c <printf> <== NOT EXECUTED
11bfb5: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
* file, this function does not itself extend the size of the file."
*
* This means the file needs to set the file size to the pos only when a
* write occurs.
*/
if (pos <= rtems_rfs_file_shared_get_size (rtems_rfs_file_fs (handle),
11bfb8: 8b 43 1c mov 0x1c(%ebx),%eax
11bfbb: 52 push %edx
11bfbc: 52 push %edx
11bfbd: 8d 90 84 00 00 00 lea 0x84(%eax),%edx
11bfc3: 52 push %edx
11bfc4: ff b0 98 00 00 00 pushl 0x98(%eax)
11bfca: e8 a3 d5 ff ff call 119572 <rtems_rfs_block_get_size>
11bfcf: 83 c4 10 add $0x10,%esp
11bfd2: 39 d7 cmp %edx,%edi
11bfd4: 77 65 ja 11c03b <rtems_rfs_file_seek+0xb5><== NEVER TAKEN
11bfd6: 72 04 jb 11bfdc <rtems_rfs_file_seek+0x56><== NEVER TAKEN
11bfd8: 39 c6 cmp %eax,%esi
11bfda: 77 5f ja 11c03b <rtems_rfs_file_seek+0xb5>
handle->shared))
{
rtems_rfs_file_set_bpos (handle, pos);
11bfdc: 8d 53 10 lea 0x10(%ebx),%edx
11bfdf: 52 push %edx
11bfe0: 57 push %edi
11bfe1: 56 push %esi
11bfe2: 8b 43 1c mov 0x1c(%ebx),%eax
11bfe5: ff b0 98 00 00 00 pushl 0x98(%eax)
11bfeb: 89 55 d4 mov %edx,-0x2c(%ebp)
11bfee: e8 c2 d4 ff ff call 1194b5 <rtems_rfs_block_get_bpos>
/*
* If the file has a block check if it maps to the current position and it
* does not release it. That will force us to get the block at the new
* position when the I/O starts.
*/
if (rtems_rfs_buffer_handle_has_block (&handle->buffer))
11bff3: 83 c4 10 add $0x10,%esp
11bff6: 83 7b 0c 00 cmpl $0x0,0xc(%ebx)
11bffa: 8b 55 d4 mov -0x2c(%ebp),%edx
11bffd: 74 4c je 11c04b <rtems_rfs_file_seek+0xc5>
{
rtems_rfs_buffer_block block;
int rc;
rc = rtems_rfs_block_map_find (rtems_rfs_file_fs (handle),
rtems_rfs_file_map (handle),
11bfff: 8b 43 1c mov 0x1c(%ebx),%eax
if (rtems_rfs_buffer_handle_has_block (&handle->buffer))
{
rtems_rfs_buffer_block block;
int rc;
rc = rtems_rfs_block_map_find (rtems_rfs_file_fs (handle),
11c002: 8d 4d e4 lea -0x1c(%ebp),%ecx
11c005: 51 push %ecx
11c006: 52 push %edx
11c007: 8d 50 34 lea 0x34(%eax),%edx
11c00a: 52 push %edx
11c00b: ff b0 98 00 00 00 pushl 0x98(%eax)
11c011: e8 e3 d8 ff ff call 1198f9 <rtems_rfs_block_map_find>
rtems_rfs_file_map (handle),
rtems_rfs_file_bpos (handle),
&block);
if (rc > 0)
11c016: 83 c4 10 add $0x10,%esp
11c019: 85 c0 test %eax,%eax
11c01b: 7f 38 jg 11c055 <rtems_rfs_file_seek+0xcf><== NEVER TAKEN
return rc;
if (rtems_rfs_buffer_bnum (&handle->buffer) != block)
11c01d: 8b 45 e4 mov -0x1c(%ebp),%eax
11c020: 39 43 08 cmp %eax,0x8(%ebx)
11c023: 74 26 je 11c04b <rtems_rfs_file_seek+0xc5><== ALWAYS TAKEN
{
rc = rtems_rfs_buffer_handle_release (rtems_rfs_file_fs (handle),
11c025: 50 push %eax <== NOT EXECUTED
11c026: 50 push %eax <== NOT EXECUTED
11c027: 8d 43 04 lea 0x4(%ebx),%eax <== NOT EXECUTED
11c02a: 50 push %eax <== NOT EXECUTED
11c02b: 8b 43 1c mov 0x1c(%ebx),%eax <== NOT EXECUTED
11c02e: ff b0 98 00 00 00 pushl 0x98(%eax) <== NOT EXECUTED
11c034: e8 f8 e0 ff ff call 11a131 <rtems_rfs_buffer_handle_release><== NOT EXECUTED
11c039: eb 09 jmp 11c044 <rtems_rfs_file_seek+0xbe><== NOT EXECUTED
{
/*
* The seek is outside the current file so release any buffer. A write will
* extend the file.
*/
int rc = rtems_rfs_file_io_release (handle);
11c03b: 83 ec 0c sub $0xc,%esp
11c03e: 53 push %ebx
11c03f: e8 16 ff ff ff call 11bf5a <rtems_rfs_file_io_release>
if (rc > 0)
11c044: 83 c4 10 add $0x10,%esp
11c047: 85 c0 test %eax,%eax
11c049: 7f 0a jg 11c055 <rtems_rfs_file_seek+0xcf><== NEVER TAKEN
return rc;
}
*new_pos = pos;
11c04b: 8b 45 14 mov 0x14(%ebp),%eax
11c04e: 89 30 mov %esi,(%eax)
11c050: 89 78 04 mov %edi,0x4(%eax)
return 0;
11c053: 31 c0 xor %eax,%eax
}
11c055: 8d 65 f4 lea -0xc(%ebp),%esp
11c058: 5b pop %ebx
11c059: 5e pop %esi
11c05a: 5f pop %edi
11c05b: 5d pop %ebp
11c05c: c3 ret
0011c05d <rtems_rfs_file_set_size>:
int
rtems_rfs_file_set_size (rtems_rfs_file_handle* handle,
rtems_rfs_pos new_size)
{
11c05d: 55 push %ebp
11c05e: 89 e5 mov %esp,%ebp
11c060: 57 push %edi
11c061: 56 push %esi
11c062: 53 push %ebx
11c063: 83 ec 54 sub $0x54,%esp
11c066: 8b 5d 08 mov 0x8(%ebp),%ebx
11c069: 8b 75 0c mov 0xc(%ebp),%esi
11c06c: 8b 7d 10 mov 0x10(%ebp),%edi
11c06f: 89 75 b0 mov %esi,-0x50(%ebp)
11c072: 89 7d b4 mov %edi,-0x4c(%ebp)
rtems_rfs_block_map* map = rtems_rfs_file_map (handle);
11c075: 8b 73 1c mov 0x1c(%ebx),%esi
11c078: 89 75 d4 mov %esi,-0x2c(%ebp)
11c07b: 83 c6 34 add $0x34,%esi
11c07e: 89 75 c0 mov %esi,-0x40(%ebp)
rtems_rfs_pos size;
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_IO))
11c081: 6a 20 push $0x20
11c083: 6a 00 push $0x0
11c085: e8 12 78 ff ff call 11389c <rtems_rfs_trace>
11c08a: 83 c4 10 add $0x10,%esp
11c08d: 84 c0 test %al,%al
11c08f: 74 14 je 11c0a5 <rtems_rfs_file_set_size+0x48><== ALWAYS TAKEN
printf ("rtems-rfs: file-set-size: size=%" PRIu64 "\n", new_size);
11c091: 51 push %ecx <== NOT EXECUTED
11c092: ff 75 b4 pushl -0x4c(%ebp) <== NOT EXECUTED
11c095: ff 75 b0 pushl -0x50(%ebp) <== NOT EXECUTED
11c098: 68 44 1b 13 00 push $0x131b44 <== NOT EXECUTED
11c09d: e8 9a 42 00 00 call 12033c <printf> <== NOT EXECUTED
11c0a2: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
size = rtems_rfs_file_size (handle);
11c0a5: 8b 43 1c mov 0x1c(%ebx),%eax
11c0a8: 52 push %edx
11c0a9: 52 push %edx
11c0aa: 8d 90 84 00 00 00 lea 0x84(%eax),%edx
11c0b0: 52 push %edx
11c0b1: ff b0 98 00 00 00 pushl 0x98(%eax)
11c0b7: e8 b6 d4 ff ff call 119572 <rtems_rfs_block_get_size>
/*
* If the file is same size do nothing else grow or shrink it ?
*
* If the file does not change size do not update the times.
*/
if (size != new_size)
11c0bc: 83 c4 10 add $0x10,%esp
11c0bf: 3b 55 b4 cmp -0x4c(%ebp),%edx
11c0c2: 75 0a jne 11c0ce <rtems_rfs_file_set_size+0x71><== NEVER TAKEN
11c0c4: 3b 45 b0 cmp -0x50(%ebp),%eax
11c0c7: 75 05 jne 11c0ce <rtems_rfs_file_set_size+0x71>
11c0c9: e9 6e 02 00 00 jmp 11c33c <rtems_rfs_file_set_size+0x2df>
{
/*
* Short cut for the common truncate on open call.
*/
if (new_size == 0)
11c0ce: 8b 7d b4 mov -0x4c(%ebp),%edi
11c0d1: 0b 7d b0 or -0x50(%ebp),%edi
11c0d4: 8b 4b 1c mov 0x1c(%ebx),%ecx
11c0d7: 89 4d d0 mov %ecx,-0x30(%ebp)
11c0da: 75 20 jne 11c0fc <rtems_rfs_file_set_size+0x9f>
{
rc = rtems_rfs_block_map_free_all (rtems_rfs_file_fs (handle), map);
11c0dc: 50 push %eax
11c0dd: 50 push %eax
11c0de: ff 75 c0 pushl -0x40(%ebp)
11c0e1: ff b1 98 00 00 00 pushl 0x98(%ecx)
11c0e7: e8 c8 de ff ff call 119fb4 <rtems_rfs_block_map_free_all>
if (rc > 0)
11c0ec: 83 c4 10 add $0x10,%esp
11c0ef: 85 c0 test %eax,%eax
11c0f1: 0f 8f 47 02 00 00 jg 11c33e <rtems_rfs_file_set_size+0x2e1><== NEVER TAKEN
11c0f7: e9 10 02 00 00 jmp 11c30c <rtems_rfs_file_set_size+0x2af>
return rc;
}
else
{
if (size < new_size)
11c0fc: 3b 55 b4 cmp -0x4c(%ebp),%edx
11c0ff: 0f 87 51 01 00 00 ja 11c256 <rtems_rfs_file_set_size+0x1f9><== NEVER TAKEN
11c105: 72 09 jb 11c110 <rtems_rfs_file_set_size+0xb3><== NEVER TAKEN
11c107: 3b 45 b0 cmp -0x50(%ebp),%eax
11c10a: 0f 83 46 01 00 00 jae 11c256 <rtems_rfs_file_set_size+0x1f9>
*/
rtems_rfs_pos count;
uint32_t length;
bool read_block;
count = new_size - size;
11c110: 8b 75 b0 mov -0x50(%ebp),%esi
11c113: 8b 7d b4 mov -0x4c(%ebp),%edi
11c116: 29 c6 sub %eax,%esi
11c118: 19 d7 sbb %edx,%edi
11c11a: 89 75 c8 mov %esi,-0x38(%ebp)
11c11d: 89 7d cc mov %edi,-0x34(%ebp)
length = rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle));
11c120: 8b 7d d0 mov -0x30(%ebp),%edi
11c123: 8b 87 98 00 00 00 mov 0x98(%edi),%eax
11c129: 8b 70 08 mov 0x8(%eax),%esi
read_block = false;
11c12c: c6 45 d0 00 movb $0x0,-0x30(%ebp)
while (count)
11c130: e9 10 01 00 00 jmp 11c245 <rtems_rfs_file_set_size+0x1e8>
/*
* Get the block position for the current end of the file as seen by
* the map. If not found and the EOF grow the map then fill the block
* with 0.
*/
rtems_rfs_block_size_get_bpos (rtems_rfs_block_map_size (map), &bpos);
11c135: 8b 55 d4 mov -0x2c(%ebp),%edx
11c138: 8b 42 3c mov 0x3c(%edx),%eax
11c13b: 89 45 dc mov %eax,-0x24(%ebp)
11c13e: 8b 52 40 mov 0x40(%edx),%edx
11c141: 89 55 e0 mov %edx,-0x20(%ebp)
11c144: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
11c14b: 85 d2 test %edx,%edx
11c14d: 74 04 je 11c153 <rtems_rfs_file_set_size+0xf6>
11c14f: 48 dec %eax
11c150: 89 45 dc mov %eax,-0x24(%ebp)
rc = rtems_rfs_block_map_find (rtems_rfs_file_fs (handle),
11c153: 8d 7d d8 lea -0x28(%ebp),%edi
11c156: 57 push %edi
11c157: 8d 45 dc lea -0x24(%ebp),%eax
11c15a: 50 push %eax
11c15b: ff 75 c0 pushl -0x40(%ebp)
11c15e: 8b 43 1c mov 0x1c(%ebx),%eax
11c161: ff b0 98 00 00 00 pushl 0x98(%eax)
11c167: e8 8d d7 ff ff call 1198f9 <rtems_rfs_block_map_find>
map, &bpos, &block);
if (rc > 0)
11c16c: 83 c4 10 add $0x10,%esp
11c16f: 85 c0 test %eax,%eax
11c171: 7f 14 jg 11c187 <rtems_rfs_file_set_size+0x12a>
map, 1, &block);
if (rc > 0)
return rc;
}
if (count < (length - bpos.boff))
11c173: 8b 45 e0 mov -0x20(%ebp),%eax
11c176: 89 f2 mov %esi,%edx
11c178: 29 c2 sub %eax,%edx
11c17a: 83 7d cc 00 cmpl $0x0,-0x34(%ebp)
11c17e: 77 48 ja 11c1c8 <rtems_rfs_file_set_size+0x16b><== NEVER TAKEN
11c180: 39 55 c8 cmp %edx,-0x38(%ebp)
11c183: 72 2e jb 11c1b3 <rtems_rfs_file_set_size+0x156>
11c185: eb 41 jmp 11c1c8 <rtems_rfs_file_set_size+0x16b>
if (rc > 0)
{
/*
* Have we reached the EOF ?
*/
if (rc != ENXIO)
11c187: 83 f8 06 cmp $0x6,%eax
11c18a: 0f 85 ae 01 00 00 jne 11c33e <rtems_rfs_file_set_size+0x2e1><== NEVER TAKEN
return rc;
rc = rtems_rfs_block_map_grow (rtems_rfs_file_fs (handle),
11c190: 8d 55 d8 lea -0x28(%ebp),%edx
11c193: 52 push %edx
11c194: 6a 01 push $0x1
11c196: ff 75 c0 pushl -0x40(%ebp)
11c199: 8b 43 1c mov 0x1c(%ebx),%eax
11c19c: ff b0 98 00 00 00 pushl 0x98(%eax)
11c1a2: e8 f7 d8 ff ff call 119a9e <rtems_rfs_block_map_grow>
map, 1, &block);
if (rc > 0)
11c1a7: 83 c4 10 add $0x10,%esp
11c1aa: 85 c0 test %eax,%eax
11c1ac: 7e c5 jle 11c173 <rtems_rfs_file_set_size+0x116><== ALWAYS TAKEN
11c1ae: e9 8b 01 00 00 jmp 11c33e <rtems_rfs_file_set_size+0x2e1><== NOT EXECUTED
return rc;
}
if (count < (length - bpos.boff))
{
length = count + bpos.boff;
11c1b3: 8b 75 c8 mov -0x38(%ebp),%esi
11c1b6: 01 c6 add %eax,%esi
*/
static inline void
rtems_rfs_block_map_set_size_offset (rtems_rfs_block_map* map,
rtems_rfs_block_off offset)
{
map->size.offset = offset;
11c1b8: 8b 4d d4 mov -0x2c(%ebp),%ecx
11c1bb: 89 71 40 mov %esi,0x40(%ecx)
map->dirty = true;
11c1be: c6 41 34 01 movb $0x1,0x34(%ecx)
read_block = true;
11c1c2: c6 45 d0 01 movb $0x1,-0x30(%ebp)
11c1c6: eb 0e jmp 11c1d6 <rtems_rfs_file_set_size+0x179>
*/
static inline void
rtems_rfs_block_map_set_size_offset (rtems_rfs_block_map* map,
rtems_rfs_block_off offset)
{
map->size.offset = offset;
11c1c8: 8b 7d d4 mov -0x2c(%ebp),%edi
11c1cb: c7 47 40 00 00 00 00 movl $0x0,0x40(%edi)
map->dirty = true;
11c1d2: c6 47 34 01 movb $0x1,0x34(%edi)
}
/*
* Only read the block if the length is not the block size.
*/
rc = rtems_rfs_buffer_handle_request (rtems_rfs_file_fs (handle),
11c1d6: 8d 53 04 lea 0x4(%ebx),%edx
11c1d9: 0f b6 45 d0 movzbl -0x30(%ebp),%eax
11c1dd: 50 push %eax
11c1de: ff 75 d8 pushl -0x28(%ebp)
11c1e1: 52 push %edx
11c1e2: 8b 43 1c mov 0x1c(%ebx),%eax
11c1e5: ff b0 98 00 00 00 pushl 0x98(%eax)
11c1eb: 89 55 b8 mov %edx,-0x48(%ebp)
11c1ee: e8 b7 e0 ff ff call 11a2aa <rtems_rfs_buffer_handle_request>
rtems_rfs_file_buffer (handle),
block, read_block);
if (rc > 0)
11c1f3: 83 c4 10 add $0x10,%esp
11c1f6: 85 c0 test %eax,%eax
11c1f8: 8b 55 b8 mov -0x48(%ebp),%edx
11c1fb: 0f 8f 3d 01 00 00 jg 11c33e <rtems_rfs_file_set_size+0x2e1><== NEVER TAKEN
return rc;
dst = rtems_rfs_buffer_data (&handle->buffer);
memset (dst + bpos.boff, 0, length - bpos.boff);
11c201: 8b 45 e0 mov -0x20(%ebp),%eax
11c204: 89 f1 mov %esi,%ecx
11c206: 29 c1 sub %eax,%ecx
rtems_rfs_file_buffer (handle),
block, read_block);
if (rc > 0)
return rc;
dst = rtems_rfs_buffer_data (&handle->buffer);
11c208: 8b 7b 0c mov 0xc(%ebx),%edi
memset (dst + bpos.boff, 0, length - bpos.boff);
11c20b: 03 47 1c add 0x1c(%edi),%eax
11c20e: 89 45 bc mov %eax,-0x44(%ebp)
11c211: 31 c0 xor %eax,%eax
11c213: 8b 7d bc mov -0x44(%ebp),%edi
11c216: f3 aa rep stos %al,%es:(%edi)
rtems_rfs_buffer_mark_dirty (rtems_rfs_file_buffer (handle));
11c218: c6 43 04 01 movb $0x1,0x4(%ebx)
rc = rtems_rfs_buffer_handle_release (rtems_rfs_file_fs (handle),
11c21c: 50 push %eax
11c21d: 50 push %eax
11c21e: 52 push %edx
11c21f: 8b 43 1c mov 0x1c(%ebx),%eax
11c222: ff b0 98 00 00 00 pushl 0x98(%eax)
11c228: e8 04 df ff ff call 11a131 <rtems_rfs_buffer_handle_release>
rtems_rfs_file_buffer (handle));
if (rc > 0)
11c22d: 83 c4 10 add $0x10,%esp
11c230: 85 c0 test %eax,%eax
11c232: 0f 8f 06 01 00 00 jg 11c33e <rtems_rfs_file_set_size+0x2e1><== NEVER TAKEN
return rc;
count -= length - bpos.boff;
11c238: 89 f0 mov %esi,%eax
11c23a: 2b 45 e0 sub -0x20(%ebp),%eax
11c23d: 31 d2 xor %edx,%edx
11c23f: 29 45 c8 sub %eax,-0x38(%ebp)
11c242: 19 55 cc sbb %edx,-0x34(%ebp)
count = new_size - size;
length = rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle));
read_block = false;
while (count)
11c245: 8b 45 cc mov -0x34(%ebp),%eax
11c248: 0b 45 c8 or -0x38(%ebp),%eax
11c24b: 0f 85 e4 fe ff ff jne 11c135 <rtems_rfs_file_set_size+0xd8>
11c251: e9 b6 00 00 00 jmp 11c30c <rtems_rfs_file_set_size+0x2af>
uint32_t offset;
blocks =
rtems_rfs_block_map_count (map) -
(((new_size - 1) /
rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle))) + 1);
11c256: 8b 4d d0 mov -0x30(%ebp),%ecx
11c259: 8b b9 98 00 00 00 mov 0x98(%ecx),%edi
rtems_rfs_block_no blocks;
uint32_t offset;
blocks =
rtems_rfs_block_map_count (map) -
(((new_size - 1) /
11c25f: 8b 47 08 mov 0x8(%edi),%eax
11c262: 31 d2 xor %edx,%edx
11c264: 89 45 c0 mov %eax,-0x40(%ebp)
11c267: 89 55 c4 mov %edx,-0x3c(%ebp)
11c26a: 8b 45 b0 mov -0x50(%ebp),%eax
11c26d: 8b 55 b4 mov -0x4c(%ebp),%edx
11c270: 83 c0 ff add $0xffffffff,%eax
11c273: 83 d2 ff adc $0xffffffff,%edx
11c276: ff 75 c4 pushl -0x3c(%ebp)
11c279: ff 75 c0 pushl -0x40(%ebp)
11c27c: 52 push %edx
11c27d: 50 push %eax
11c27e: e8 d1 ff 00 00 call 12c254 <__udivdi3>
11c283: 83 c4 10 add $0x10,%esp
11c286: 89 c1 mov %eax,%ecx
* Shrink
*/
rtems_rfs_block_no blocks;
uint32_t offset;
blocks =
11c288: f7 d1 not %ecx
11c28a: 8b 75 d4 mov -0x2c(%ebp),%esi
11c28d: 03 4e 3c add 0x3c(%esi),%ecx
rtems_rfs_block_map_count (map) -
(((new_size - 1) /
rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle))) + 1);
offset =
new_size % rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle));
11c290: ff 75 c4 pushl -0x3c(%ebp)
11c293: ff 75 c0 pushl -0x40(%ebp)
11c296: ff 75 b4 pushl -0x4c(%ebp)
11c299: ff 75 b0 pushl -0x50(%ebp)
11c29c: 89 4d b8 mov %ecx,-0x48(%ebp)
11c29f: e8 b4 00 01 00 call 12c358 <__umoddi3>
11c2a4: 83 c4 10 add $0x10,%esp
11c2a7: 89 c6 mov %eax,%esi
if (blocks)
11c2a9: 8b 4d b8 mov -0x48(%ebp),%ecx
11c2ac: 85 c9 test %ecx,%ecx
11c2ae: 75 16 jne 11c2c6 <rtems_rfs_file_set_size+0x269>
*/
static inline void
rtems_rfs_block_map_set_size_offset (rtems_rfs_block_map* map,
rtems_rfs_block_off offset)
{
map->size.offset = offset;
11c2b0: 8b 7d d4 mov -0x2c(%ebp),%edi
11c2b3: 89 77 40 mov %esi,0x40(%edi)
map->dirty = true;
11c2b6: c6 47 34 01 movb $0x1,0x34(%edi)
return rc;
}
rtems_rfs_block_map_set_size_offset (map, offset);
if (rtems_rfs_block_pos_past_end (rtems_rfs_file_bpos (handle),
11c2ba: 8b 53 10 mov 0x10(%ebx),%edx
11c2bd: 85 d2 test %edx,%edx
11c2bf: 8b 47 3c mov 0x3c(%edi),%eax
11c2c2: 75 1a jne 11c2de <rtems_rfs_file_set_size+0x281>
11c2c4: eb 21 jmp 11c2e7 <rtems_rfs_file_set_size+0x28a>
new_size % rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle));
if (blocks)
{
int rc;
rc = rtems_rfs_block_map_shrink (rtems_rfs_file_fs (handle),
11c2c6: 50 push %eax
11c2c7: 51 push %ecx
11c2c8: 8b 45 d0 mov -0x30(%ebp),%eax
11c2cb: 83 c0 34 add $0x34,%eax
11c2ce: 50 push %eax
11c2cf: 57 push %edi
11c2d0: e8 7c da ff ff call 119d51 <rtems_rfs_block_map_shrink>
rtems_rfs_file_map (handle),
blocks);
if (rc > 0)
11c2d5: 83 c4 10 add $0x10,%esp
11c2d8: 85 c0 test %eax,%eax
11c2da: 7f 62 jg 11c33e <rtems_rfs_file_set_size+0x2e1><== NEVER TAKEN
11c2dc: eb d2 jmp 11c2b0 <rtems_rfs_file_set_size+0x253>
return rc;
}
rtems_rfs_block_map_set_size_offset (map, offset);
if (rtems_rfs_block_pos_past_end (rtems_rfs_file_bpos (handle),
11c2de: 8b 4d d4 mov -0x2c(%ebp),%ecx
11c2e1: 83 79 3c 00 cmpl $0x0,0x3c(%ecx)
11c2e5: 74 10 je 11c2f7 <rtems_rfs_file_set_size+0x29a><== NEVER TAKEN
11c2e7: 39 c2 cmp %eax,%edx
11c2e9: 73 0c jae 11c2f7 <rtems_rfs_file_set_size+0x29a><== NEVER TAKEN
11c2eb: 8d 48 ff lea -0x1(%eax),%ecx
11c2ee: 39 ca cmp %ecx,%edx
11c2f0: 75 1a jne 11c30c <rtems_rfs_file_set_size+0x2af><== NEVER TAKEN
11c2f2: 39 73 14 cmp %esi,0x14(%ebx)
11c2f5: 76 15 jbe 11c30c <rtems_rfs_file_set_size+0x2af>
rtems_rfs_block_map_size (map)))
rtems_rfs_block_size_get_bpos (rtems_rfs_block_map_size (map),
11c2f7: 89 43 10 mov %eax,0x10(%ebx)
11c2fa: 89 73 14 mov %esi,0x14(%ebx)
11c2fd: c7 43 18 00 00 00 00 movl $0x0,0x18(%ebx)
11c304: 85 f6 test %esi,%esi
11c306: 74 04 je 11c30c <rtems_rfs_file_set_size+0x2af><== NEVER TAKEN
11c308: 48 dec %eax
11c309: 89 43 10 mov %eax,0x10(%ebx)
rtems_rfs_file_bpos (handle));
}
}
handle->shared->size.count = rtems_rfs_block_map_count (map);
11c30c: 8b 73 1c mov 0x1c(%ebx),%esi
11c30f: 8b 7d d4 mov -0x2c(%ebp),%edi
11c312: 8b 47 3c mov 0x3c(%edi),%eax
11c315: 89 86 84 00 00 00 mov %eax,0x84(%esi)
handle->shared->size.offset = rtems_rfs_block_map_size_offset (map);
11c31b: 8b 47 40 mov 0x40(%edi),%eax
11c31e: 89 86 88 00 00 00 mov %eax,0x88(%esi)
if (rtems_rfs_file_update_mtime (handle))
11c324: f6 03 02 testb $0x2,(%ebx)
11c327: 75 13 jne 11c33c <rtems_rfs_file_set_size+0x2df><== NEVER TAKEN
handle->shared->mtime = time (NULL);
11c329: 83 ec 0c sub $0xc,%esp
11c32c: 6a 00 push $0x0
11c32e: e8 19 82 00 00 call 12454c <time>
11c333: 89 86 90 00 00 00 mov %eax,0x90(%esi)
11c339: 83 c4 10 add $0x10,%esp
}
return 0;
11c33c: 31 c0 xor %eax,%eax
}
11c33e: 8d 65 f4 lea -0xc(%ebp),%esp
11c341: 5b pop %ebx
11c342: 5e pop %esi
11c343: 5f pop %edi
11c344: 5d pop %ebp
11c345: c3 ret
00110f92 <rtems_rfs_format>:
return rc;
}
int
rtems_rfs_format (const char* name, const rtems_rfs_format_config* config)
{
110f92: 55 push %ebp
110f93: 89 e5 mov %esp,%ebp
110f95: 57 push %edi
110f96: 56 push %esi
110f97: 53 push %ebx
110f98: 81 ec 0c 01 00 00 sub $0x10c,%esp
rtems_rfs_file_system fs;
int group;
int rc;
if (config->verbose)
110f9e: 8b 45 0c mov 0xc(%ebp),%eax
110fa1: 80 78 15 00 cmpb $0x0,0x15(%eax)
110fa5: 74 12 je 110fb9 <rtems_rfs_format+0x27> <== ALWAYS TAKEN
printf ("rtems-rfs: format: %s\n", name);
110fa7: 50 push %eax <== NOT EXECUTED
110fa8: 50 push %eax <== NOT EXECUTED
110fa9: ff 75 08 pushl 0x8(%ebp) <== NOT EXECUTED
110fac: 68 2c f9 12 00 push $0x12f92c <== NOT EXECUTED
110fb1: e8 86 f3 00 00 call 12033c <printf> <== NOT EXECUTED
110fb6: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
memset (&fs, 0, sizeof (rtems_rfs_file_system));
110fb9: 8d 9d 64 ff ff ff lea -0x9c(%ebp),%ebx
110fbf: b9 21 00 00 00 mov $0x21,%ecx
110fc4: 31 c0 xor %eax,%eax
110fc6: 89 df mov %ebx,%edi
110fc8: f3 ab rep stos %eax,%es:(%edi)
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
110fca: 8d 45 ac lea -0x54(%ebp),%eax
110fcd: 89 45 a8 mov %eax,-0x58(%ebp)
head->previous = NULL;
tail->previous = head;
110fd0: 8d 45 a8 lea -0x58(%ebp),%eax
110fd3: 89 45 b0 mov %eax,-0x50(%ebp)
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
110fd6: 8d 45 bc lea -0x44(%ebp),%eax
110fd9: 89 45 b8 mov %eax,-0x48(%ebp)
head->previous = NULL;
tail->previous = head;
110fdc: 8d 45 b8 lea -0x48(%ebp),%eax
110fdf: 89 45 c0 mov %eax,-0x40(%ebp)
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
110fe2: 8d 45 cc lea -0x34(%ebp),%eax
110fe5: 89 45 c8 mov %eax,-0x38(%ebp)
head->previous = NULL;
tail->previous = head;
110fe8: 8d 45 c8 lea -0x38(%ebp),%eax
110feb: 89 45 d0 mov %eax,-0x30(%ebp)
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
110fee: 8d 45 dc lea -0x24(%ebp),%eax
110ff1: 89 45 d8 mov %eax,-0x28(%ebp)
head->previous = NULL;
tail->previous = head;
110ff4: 8d 45 d8 lea -0x28(%ebp),%eax
110ff7: 89 45 e0 mov %eax,-0x20(%ebp)
rtems_chain_initialize_empty (&fs.buffers);
rtems_chain_initialize_empty (&fs.release);
rtems_chain_initialize_empty (&fs.release_modified);
rtems_chain_initialize_empty (&fs.file_shares);
fs.max_held_buffers = RTEMS_RFS_FS_MAX_HELD_BUFFERS;
110ffa: c7 45 a4 05 00 00 00 movl $0x5,-0x5c(%ebp)
fs.release_count = 0;
fs.release_modified_count = 0;
fs.flags = RTEMS_RFS_FS_NO_LOCAL_CACHE;
111001: c7 85 64 ff ff ff 02 movl $0x2,-0x9c(%ebp)
111008: 00 00 00
/*
* Open the buffer interface.
*/
rc = rtems_rfs_buffer_open (name, &fs);
11100b: 50 push %eax
11100c: 50 push %eax
11100d: 53 push %ebx
11100e: ff 75 08 pushl 0x8(%ebp)
111011: e8 af 94 00 00 call 11a4c5 <rtems_rfs_buffer_open>
111016: 89 c6 mov %eax,%esi
if (rc > 0)
111018: 83 c4 10 add $0x10,%esp
11101b: 85 c0 test %eax,%eax
11101d: 7e 18 jle 111037 <rtems_rfs_format+0xa5> <== ALWAYS TAKEN
{
printf ("rtems-rfs: format: buffer open failed: %d: %s\n",
11101f: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
111022: 50 push %eax <== NOT EXECUTED
111023: e8 9c 00 01 00 call 1210c4 <strerror> <== NOT EXECUTED
111028: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11102b: 50 push %eax <== NOT EXECUTED
11102c: 56 push %esi <== NOT EXECUTED
11102d: 68 43 f9 12 00 push $0x12f943 <== NOT EXECUTED
111032: e9 ef 08 00 00 jmp 111926 <rtems_rfs_format+0x994><== NOT EXECUTED
}
/*
* Check the media.
*/
if (rtems_rfs_fs_media_block_size (&fs) == 0)
111037: 8b 85 74 ff ff ff mov -0x8c(%ebp),%eax
11103d: 83 78 20 00 cmpl $0x0,0x20(%eax)
111041: 75 0e jne 111051 <rtems_rfs_format+0xbf> <== ALWAYS TAKEN
{
printf ("rtems-rfs: media block is invalid: %" PRIu32 "\n",
111043: 57 push %edi <== NOT EXECUTED
111044: 57 push %edi <== NOT EXECUTED
111045: 6a 00 push $0x0 <== NOT EXECUTED
111047: 68 72 f9 12 00 push $0x12f972 <== NOT EXECUTED
11104c: e9 d5 08 00 00 jmp 111926 <rtems_rfs_format+0x994><== NOT EXECUTED
static bool
rtems_rfs_check_config (rtems_rfs_file_system* fs,
const rtems_rfs_format_config* config)
{
fs->block_size = config->block_size;
111051: 8b 55 0c mov 0xc(%ebp),%edx
111054: 8b 02 mov (%edx),%eax
111056: 89 85 6c ff ff ff mov %eax,-0x94(%ebp)
if (!fs->block_size)
11105c: 85 c0 test %eax,%eax
11105e: 75 75 jne 1110d5 <rtems_rfs_format+0x143>
{
uint64_t total_size = rtems_rfs_fs_media_size (fs);
111060: 83 ec 0c sub $0xc,%esp
111063: 53 push %ebx
111064: e8 f5 b5 00 00 call 11c65e <rtems_rfs_fs_media_size>
if (total_size >= GIGS (1))
111069: 83 c4 10 add $0x10,%esp
11106c: 83 fa 00 cmp $0x0,%edx
11106f: 77 07 ja 111078 <rtems_rfs_format+0xe6> <== NEVER TAKEN
111071: 3d ff ff 0f 00 cmp $0xfffff,%eax
111076: 76 31 jbe 1110a9 <rtems_rfs_format+0x117><== ALWAYS TAKEN
{
uint32_t gigs = (total_size + GIGS (1)) / GIGS (1);
111078: 05 00 00 10 00 add $0x100000,%eax <== NOT EXECUTED
11107d: 83 d2 00 adc $0x0,%edx <== NOT EXECUTED
111080: 0f ac d0 14 shrd $0x14,%edx,%eax <== NOT EXECUTED
111084: c1 ea 14 shr $0x14,%edx <== NOT EXECUTED
int b;
for (b = 31; b > 0; b--)
111087: b9 1f 00 00 00 mov $0x1f,%ecx <== NOT EXECUTED
if ((gigs & (1 << b)) != 0)
11108c: ba 01 00 00 00 mov $0x1,%edx <== NOT EXECUTED
111091: 89 d3 mov %edx,%ebx <== NOT EXECUTED
111093: d3 e3 shl %cl,%ebx <== NOT EXECUTED
111095: 85 c3 test %eax,%ebx <== NOT EXECUTED
111097: 75 03 jne 11109c <rtems_rfs_format+0x10a><== NOT EXECUTED
if (total_size >= GIGS (1))
{
uint32_t gigs = (total_size + GIGS (1)) / GIGS (1);
int b;
for (b = 31; b > 0; b--)
111099: 49 dec %ecx <== NOT EXECUTED
11109a: 75 f5 jne 111091 <rtems_rfs_format+0xff> <== NOT EXECUTED
if ((gigs & (1 << b)) != 0)
break;
fs->block_size = 1 << b;
11109c: b8 01 00 00 00 mov $0x1,%eax <== NOT EXECUTED
1110a1: d3 e0 shl %cl,%eax <== NOT EXECUTED
1110a3: 89 85 6c ff ff ff mov %eax,-0x94(%ebp) <== NOT EXECUTED
}
if (fs->block_size < 512)
1110a9: 81 bd 6c ff ff ff ff cmpl $0x1ff,-0x94(%ebp)
1110b0: 01 00 00
1110b3: 77 0a ja 1110bf <rtems_rfs_format+0x12d><== NEVER TAKEN
fs->block_size = 512;
1110b5: c7 85 6c ff ff ff 00 movl $0x200,-0x94(%ebp)
1110bc: 02 00 00
if (fs->block_size > (4 * 1024))
1110bf: 81 bd 6c ff ff ff 00 cmpl $0x1000,-0x94(%ebp)
1110c6: 10 00 00
1110c9: 76 0a jbe 1110d5 <rtems_rfs_format+0x143><== ALWAYS TAKEN
fs->block_size = (4 * 1024);
1110cb: c7 85 6c ff ff ff 00 movl $0x1000,-0x94(%ebp) <== NOT EXECUTED
1110d2: 10 00 00
}
if ((fs->block_size % rtems_rfs_fs_media_block_size (fs)) != 0)
1110d5: 8b 8d 6c ff ff ff mov -0x94(%ebp),%ecx
1110db: 8b 85 74 ff ff ff mov -0x8c(%ebp),%eax
1110e1: 8b 58 20 mov 0x20(%eax),%ebx
1110e4: 89 c8 mov %ecx,%eax
1110e6: 31 d2 xor %edx,%edx
1110e8: f7 f3 div %ebx
1110ea: 85 d2 test %edx,%edx
1110ec: 74 0d je 1110fb <rtems_rfs_format+0x169><== ALWAYS TAKEN
{
printf ("block size (%zd) is not a multiple of media block size (%" PRId32 ")\n",
1110ee: 56 push %esi <== NOT EXECUTED
1110ef: 53 push %ebx <== NOT EXECUTED
1110f0: 51 push %ecx <== NOT EXECUTED
1110f1: 68 9a f9 12 00 push $0x12f99a <== NOT EXECUTED
1110f6: e9 2b 08 00 00 jmp 111926 <rtems_rfs_format+0x994><== NOT EXECUTED
fs->block_size, rtems_rfs_fs_media_block_size (fs));
return false;
}
fs->group_blocks = config->group_blocks;
1110fb: 8b 55 0c mov 0xc(%ebp),%edx
1110fe: 8b 42 04 mov 0x4(%edx),%eax
if (!fs->group_blocks)
111101: 85 c0 test %eax,%eax
111103: 74 02 je 111107 <rtems_rfs_format+0x175><== ALWAYS TAKEN
111105: eb 07 jmp 11110e <rtems_rfs_format+0x17c><== NOT EXECUTED
{
/*
* The number of blocks per group is defined by the number of bits in a
* block.
*/
fs->group_blocks = rtems_rfs_bitmap_numof_bits (fs->block_size);
111107: 8d 04 cd 00 00 00 00 lea 0x0(,%ecx,8),%eax
11110e: 89 45 8c mov %eax,-0x74(%ebp)
}
if (fs->group_blocks > rtems_rfs_bitmap_numof_bits (fs->block_size))
111111: c1 e1 03 shl $0x3,%ecx
111114: 39 4d 8c cmp %ecx,-0x74(%ebp)
111117: 76 15 jbe 11112e <rtems_rfs_format+0x19c><== ALWAYS TAKEN
{
printf ("group block count is higher than bits in block\n");
111119: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11111c: 68 d8 f9 12 00 push $0x12f9d8 <== NOT EXECUTED
111121: e8 2e f4 00 00 call 120554 <puts> <== NOT EXECUTED
111126: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
111129: e9 62 0a 00 00 jmp 111b90 <rtems_rfs_format+0xbfe><== NOT EXECUTED
return false;
}
fs->blocks = rtems_rfs_fs_media_size (fs) / fs->block_size;
11112e: 83 ec 0c sub $0xc,%esp
}
/*
* Check the configuration data.
*/
if (!rtems_rfs_check_config (&fs, config))
111131: 8d 85 64 ff ff ff lea -0x9c(%ebp),%eax
{
printf ("group block count is higher than bits in block\n");
return false;
}
fs->blocks = rtems_rfs_fs_media_size (fs) / fs->block_size;
111137: 50 push %eax
111138: e8 21 b5 00 00 call 11c65e <rtems_rfs_fs_media_size>
11113d: 8b 9d 6c ff ff ff mov -0x94(%ebp),%ebx
111143: 31 ff xor %edi,%edi
111145: 57 push %edi
111146: 53 push %ebx
111147: 52 push %edx
111148: 50 push %eax
111149: e8 06 b1 01 00 call 12c254 <__udivdi3>
11114e: 89 c7 mov %eax,%edi
111150: 89 85 68 ff ff ff mov %eax,-0x98(%ebp)
* Return the number of bits that fit in the block size.
*/
static int
rtems_rfs_bits_per_block (rtems_rfs_file_system* fs)
{
return rtems_rfs_bitmap_numof_bits (rtems_rfs_fs_block_size (fs));
111156: 8d 34 dd 00 00 00 00 lea 0x0(,%ebx,8),%esi
/*
* The bits per block sets the upper limit for the number of blocks in a
* group. The disk will be divided into groups which are the number of bits
* per block.
*/
fs->group_count = rtems_rfs_rup_quotient (rtems_rfs_fs_blocks (fs),
11115d: 83 c4 18 add $0x18,%esp
111160: 56 push %esi
111161: 50 push %eax
111162: e8 11 fe ff ff call 110f78 <rtems_rfs_rup_quotient>
111167: 83 c4 10 add $0x10,%esp
11116a: 89 45 88 mov %eax,-0x78(%ebp)
rtems_rfs_bits_per_block (fs));
fs->group_inodes = config->group_inodes;
11116d: 8b 4d 0c mov 0xc(%ebp),%ecx
111170: 8b 51 08 mov 0x8(%ecx),%edx
111173: 89 55 90 mov %edx,-0x70(%ebp)
if (!fs->group_inodes)
111176: 85 d2 test %edx,%edx
111178: 75 37 jne 1111b1 <rtems_rfs_format+0x21f><== NEVER TAKEN
int inode_overhead = RTEMS_RFS_INODE_OVERHEAD_PERCENTAGE;
/*
* The number of inodes per group is set as a percentage.
*/
if (config->inode_overhead)
11117a: 8b 51 0c mov 0xc(%ecx),%edx
11117d: 85 d2 test %edx,%edx
11117f: 75 02 jne 111183 <rtems_rfs_format+0x1f1><== NEVER TAKEN
rtems_rfs_bits_per_block (fs));
fs->group_inodes = config->group_inodes;
if (!fs->group_inodes)
{
int inode_overhead = RTEMS_RFS_INODE_OVERHEAD_PERCENTAGE;
111181: b2 01 mov $0x1,%dl
int percentage)
{
int blocks;
blocks = ((rtems_rfs_fs_blocks (fs) -
RTEMS_RFS_SUPERBLOCK_SIZE) * percentage) / 100;
blocks = rtems_rfs_rup_quotient (blocks, fs->group_count);
111183: 51 push %ecx
111184: 51 push %ecx
111185: 50 push %eax
static int
rtems_rfs_inodes_from_percent (rtems_rfs_file_system* fs,
int percentage)
{
int blocks;
blocks = ((rtems_rfs_fs_blocks (fs) -
111186: 4f dec %edi
RTEMS_RFS_SUPERBLOCK_SIZE) * percentage) / 100;
111187: 89 d0 mov %edx,%eax
111189: 0f af c7 imul %edi,%eax
11118c: b9 64 00 00 00 mov $0x64,%ecx
111191: 31 d2 xor %edx,%edx
111193: f7 f1 div %ecx
blocks = rtems_rfs_rup_quotient (blocks, fs->group_count);
111195: 50 push %eax
111196: e8 dd fd ff ff call 110f78 <rtems_rfs_rup_quotient>
11119b: 83 c4 10 add $0x10,%esp
11119e: 89 c1 mov %eax,%ecx
return blocks * (rtems_rfs_fs_block_size (fs) / RTEMS_RFS_INODE_SIZE);
1111a0: bf 38 00 00 00 mov $0x38,%edi
1111a5: 89 d8 mov %ebx,%eax
1111a7: 31 d2 xor %edx,%edx
1111a9: f7 f7 div %edi
1111ab: 0f af c8 imul %eax,%ecx
* The number of inodes per group is set as a percentage.
*/
if (config->inode_overhead)
inode_overhead = config->inode_overhead;
fs->group_inodes = rtems_rfs_inodes_from_percent (fs, inode_overhead);
1111ae: 89 4d 90 mov %ecx,-0x70(%ebp)
}
/*
* Round up to fill a block because the minimum allocation unit is a block.
*/
fs->inodes_per_block = rtems_rfs_fs_block_size (fs) / RTEMS_RFS_INODE_SIZE;
1111b1: b9 38 00 00 00 mov $0x38,%ecx
1111b6: 89 d8 mov %ebx,%eax
1111b8: 31 d2 xor %edx,%edx
1111ba: f7 f1 div %ecx
1111bc: 89 c3 mov %eax,%ebx
1111be: 89 45 94 mov %eax,-0x6c(%ebp)
fs->group_inodes =
rtems_rfs_rup_quotient (fs->group_inodes,
1111c1: 51 push %ecx
1111c2: 51 push %ecx
1111c3: 50 push %eax
1111c4: ff 75 90 pushl -0x70(%ebp)
1111c7: e8 ac fd ff ff call 110f78 <rtems_rfs_rup_quotient>
1111cc: 83 c4 10 add $0x10,%esp
fs->inodes_per_block) * fs->inodes_per_block;
1111cf: 0f af c3 imul %ebx,%eax
if (fs->group_inodes > rtems_rfs_bitmap_numof_bits (fs->block_size))
1111d2: 39 f0 cmp %esi,%eax
1111d4: 77 05 ja 1111db <rtems_rfs_format+0x249><== NEVER TAKEN
/*
* Round up to fill a block because the minimum allocation unit is a block.
*/
fs->inodes_per_block = rtems_rfs_fs_block_size (fs) / RTEMS_RFS_INODE_SIZE;
fs->group_inodes =
1111d6: 89 45 90 mov %eax,-0x70(%ebp)
1111d9: eb 03 jmp 1111de <rtems_rfs_format+0x24c>
rtems_rfs_rup_quotient (fs->group_inodes,
fs->inodes_per_block) * fs->inodes_per_block;
if (fs->group_inodes > rtems_rfs_bitmap_numof_bits (fs->block_size))
fs->group_inodes = rtems_rfs_bitmap_numof_bits (fs->block_size);
1111db: 89 75 90 mov %esi,-0x70(%ebp) <== NOT EXECUTED
fs->max_name_length = config->max_name_length;
1111de: 8b 55 0c mov 0xc(%ebp),%edx
1111e1: 8b 42 10 mov 0x10(%edx),%eax
if (!fs->max_name_length)
1111e4: 85 c0 test %eax,%eax
1111e6: 0f 85 a9 09 00 00 jne 111b95 <rtems_rfs_format+0xc03><== NEVER TAKEN
{
fs->max_name_length = 512;
1111ec: c7 45 80 00 02 00 00 movl $0x200,-0x80(%ebp)
1111f3: e9 a0 09 00 00 jmp 111b98 <rtems_rfs_format+0xc06>
if (!rtems_rfs_check_config (&fs, config))
return -1;
if (config->verbose)
{
printf ("rtems-rfs: format: media size = %" PRIu64 "\n",
1111f8: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1111fb: 8d 9d 64 ff ff ff lea -0x9c(%ebp),%ebx <== NOT EXECUTED
111201: 53 push %ebx <== NOT EXECUTED
111202: e8 57 b4 00 00 call 11c65e <rtems_rfs_fs_media_size><== NOT EXECUTED
111207: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11120a: 52 push %edx <== NOT EXECUTED
11120b: 50 push %eax <== NOT EXECUTED
11120c: 68 07 fa 12 00 push $0x12fa07 <== NOT EXECUTED
111211: e8 26 f1 00 00 call 12033c <printf> <== NOT EXECUTED
rtems_rfs_fs_media_size (&fs));
printf ("rtems-rfs: format: media blocks = %" PRIu32 "\n",
111216: 58 pop %eax <== NOT EXECUTED
111217: 5a pop %edx <== NOT EXECUTED
rtems_rfs_fs_media_blocks (&fs));
111218: 8b 85 74 ff ff ff mov -0x8c(%ebp),%eax <== NOT EXECUTED
if (config->verbose)
{
printf ("rtems-rfs: format: media size = %" PRIu64 "\n",
rtems_rfs_fs_media_size (&fs));
printf ("rtems-rfs: format: media blocks = %" PRIu32 "\n",
11121e: ff 70 1c pushl 0x1c(%eax) <== NOT EXECUTED
111221: 68 2d fa 12 00 push $0x12fa2d <== NOT EXECUTED
111226: e8 11 f1 00 00 call 12033c <printf> <== NOT EXECUTED
rtems_rfs_fs_media_blocks (&fs));
printf ("rtems-rfs: format: media block size = %" PRIu32 "\n",
11122b: 59 pop %ecx <== NOT EXECUTED
11122c: 5e pop %esi <== NOT EXECUTED
rtems_rfs_fs_media_block_size (&fs));
11122d: 8b 85 74 ff ff ff mov -0x8c(%ebp),%eax <== NOT EXECUTED
{
printf ("rtems-rfs: format: media size = %" PRIu64 "\n",
rtems_rfs_fs_media_size (&fs));
printf ("rtems-rfs: format: media blocks = %" PRIu32 "\n",
rtems_rfs_fs_media_blocks (&fs));
printf ("rtems-rfs: format: media block size = %" PRIu32 "\n",
111233: ff 70 20 pushl 0x20(%eax) <== NOT EXECUTED
111236: 68 54 fa 12 00 push $0x12fa54 <== NOT EXECUTED
11123b: e8 fc f0 00 00 call 12033c <printf> <== NOT EXECUTED
rtems_rfs_fs_media_block_size (&fs));
printf ("rtems-rfs: format: size = %" PRIu64 "\n",
111240: 89 1c 24 mov %ebx,(%esp) <== NOT EXECUTED
111243: e8 08 b4 00 00 call 11c650 <rtems_rfs_fs_size> <== NOT EXECUTED
111248: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11124b: 52 push %edx <== NOT EXECUTED
11124c: 50 push %eax <== NOT EXECUTED
11124d: 68 7f fa 12 00 push $0x12fa7f <== NOT EXECUTED
111252: e8 e5 f0 00 00 call 12033c <printf> <== NOT EXECUTED
rtems_rfs_fs_size (&fs));
printf ("rtems-rfs: format: blocks = %zu\n",
111257: 5f pop %edi <== NOT EXECUTED
111258: 58 pop %eax <== NOT EXECUTED
111259: ff b5 68 ff ff ff pushl -0x98(%ebp) <== NOT EXECUTED
11125f: 68 9f fa 12 00 push $0x12fa9f <== NOT EXECUTED
111264: e8 d3 f0 00 00 call 12033c <printf> <== NOT EXECUTED
rtems_rfs_fs_blocks (&fs));
printf ("rtems-rfs: format: block size = %zu\n",
111269: 58 pop %eax <== NOT EXECUTED
11126a: 5a pop %edx <== NOT EXECUTED
11126b: ff b5 6c ff ff ff pushl -0x94(%ebp) <== NOT EXECUTED
111271: 68 c0 fa 12 00 push $0x12fac0 <== NOT EXECUTED
111276: e8 c1 f0 00 00 call 12033c <printf> <== NOT EXECUTED
rtems_rfs_fs_block_size (&fs));
printf ("rtems-rfs: format: bits per block = %u\n",
11127b: 59 pop %ecx <== NOT EXECUTED
11127c: 5b pop %ebx <== NOT EXECUTED
* Return the number of bits that fit in the block size.
*/
static int
rtems_rfs_bits_per_block (rtems_rfs_file_system* fs)
{
return rtems_rfs_bitmap_numof_bits (rtems_rfs_fs_block_size (fs));
11127d: 8b 85 6c ff ff ff mov -0x94(%ebp),%eax <== NOT EXECUTED
111283: c1 e0 03 shl $0x3,%eax <== NOT EXECUTED
rtems_rfs_fs_size (&fs));
printf ("rtems-rfs: format: blocks = %zu\n",
rtems_rfs_fs_blocks (&fs));
printf ("rtems-rfs: format: block size = %zu\n",
rtems_rfs_fs_block_size (&fs));
printf ("rtems-rfs: format: bits per block = %u\n",
111286: 50 push %eax <== NOT EXECUTED
111287: 68 e5 fa 12 00 push $0x12fae5 <== NOT EXECUTED
11128c: e8 ab f0 00 00 call 12033c <printf> <== NOT EXECUTED
rtems_rfs_bits_per_block (&fs));
printf ("rtems-rfs: format: inode size = %zu\n", RTEMS_RFS_INODE_SIZE);
111291: 5e pop %esi <== NOT EXECUTED
111292: 5f pop %edi <== NOT EXECUTED
111293: 6a 38 push $0x38 <== NOT EXECUTED
111295: 68 0d fb 12 00 push $0x12fb0d <== NOT EXECUTED
11129a: e8 9d f0 00 00 call 12033c <printf> <== NOT EXECUTED
static int
rtems_rfs_inode_overhead (rtems_rfs_file_system* fs)
{
int blocks;
int bits_per_block;
blocks = rtems_rfs_rup_quotient(fs->group_inodes * RTEMS_RFS_INODE_SIZE,
11129f: 8b b5 6c ff ff ff mov -0x94(%ebp),%esi <== NOT EXECUTED
1112a5: 8b 5d 90 mov -0x70(%ebp),%ebx <== NOT EXECUTED
1112a8: 58 pop %eax <== NOT EXECUTED
1112a9: 5a pop %edx <== NOT EXECUTED
1112aa: 56 push %esi <== NOT EXECUTED
1112ab: 6b c3 38 imul $0x38,%ebx,%eax <== NOT EXECUTED
1112ae: 50 push %eax <== NOT EXECUTED
1112af: e8 c4 fc ff ff call 110f78 <rtems_rfs_rup_quotient><== NOT EXECUTED
1112b4: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
* Return the number of bits that fit in the block size.
*/
static int
rtems_rfs_bits_per_block (rtems_rfs_file_system* fs)
{
return rtems_rfs_bitmap_numof_bits (rtems_rfs_fs_block_size (fs));
1112b7: c1 e6 03 shl $0x3,%esi <== NOT EXECUTED
bits_per_block = rtems_rfs_bits_per_block (fs);
/*
* There could be more bits than blocks, eg 512K disk with 512 blocks.
*/
if (bits_per_block > (rtems_rfs_fs_blocks (fs) - RTEMS_RFS_SUPERBLOCK_SIZE))
bits_per_block = rtems_rfs_fs_blocks (fs) - RTEMS_RFS_SUPERBLOCK_SIZE;
1112ba: 8b 8d 68 ff ff ff mov -0x98(%ebp),%ecx <== NOT EXECUTED
1112c0: 49 dec %ecx <== NOT EXECUTED
rtems_rfs_fs_block_size (fs));
bits_per_block = rtems_rfs_bits_per_block (fs);
/*
* There could be more bits than blocks, eg 512K disk with 512 blocks.
*/
if (bits_per_block > (rtems_rfs_fs_blocks (fs) - RTEMS_RFS_SUPERBLOCK_SIZE))
1112c1: 39 ce cmp %ecx,%esi <== NOT EXECUTED
1112c3: 77 02 ja 1112c7 <rtems_rfs_format+0x335><== NOT EXECUTED
* Return the number of bits that fit in the block size.
*/
static int
rtems_rfs_bits_per_block (rtems_rfs_file_system* fs)
{
return rtems_rfs_bitmap_numof_bits (rtems_rfs_fs_block_size (fs));
1112c5: 89 f1 mov %esi,%ecx <== NOT EXECUTED
/*
* There could be more bits than blocks, eg 512K disk with 512 blocks.
*/
if (bits_per_block > (rtems_rfs_fs_blocks (fs) - RTEMS_RFS_SUPERBLOCK_SIZE))
bits_per_block = rtems_rfs_fs_blocks (fs) - RTEMS_RFS_SUPERBLOCK_SIZE;
return ((blocks + 1) * 100 * 10) / bits_per_block;
1112c7: 40 inc %eax <== NOT EXECUTED
1112c8: 69 c0 e8 03 00 00 imul $0x3e8,%eax,%eax <== NOT EXECUTED
1112ce: 99 cltd <== NOT EXECUTED
1112cf: f7 f9 idiv %ecx <== NOT EXECUTED
printf ("rtems-rfs: format: block size = %zu\n",
rtems_rfs_fs_block_size (&fs));
printf ("rtems-rfs: format: bits per block = %u\n",
rtems_rfs_bits_per_block (&fs));
printf ("rtems-rfs: format: inode size = %zu\n", RTEMS_RFS_INODE_SIZE);
printf ("rtems-rfs: format: inodes = %zu (%d.%d%%)\n",
1112d1: b9 0a 00 00 00 mov $0xa,%ecx <== NOT EXECUTED
1112d6: 99 cltd <== NOT EXECUTED
1112d7: f7 f9 idiv %ecx <== NOT EXECUTED
1112d9: 52 push %edx <== NOT EXECUTED
1112da: 50 push %eax <== NOT EXECUTED
1112db: 0f af 5d 88 imul -0x78(%ebp),%ebx <== NOT EXECUTED
1112df: 53 push %ebx <== NOT EXECUTED
1112e0: 68 32 fb 12 00 push $0x12fb32 <== NOT EXECUTED
1112e5: e8 52 f0 00 00 call 12033c <printf> <== NOT EXECUTED
fs.group_inodes * fs.group_count,
rtems_rfs_inode_overhead (&fs) / 10,
rtems_rfs_inode_overhead (&fs) % 10);
printf ("rtems-rfs: format: groups = %u\n", fs.group_count);
1112ea: 58 pop %eax <== NOT EXECUTED
1112eb: 5a pop %edx <== NOT EXECUTED
1112ec: ff 75 88 pushl -0x78(%ebp) <== NOT EXECUTED
1112ef: 68 5d fb 12 00 push $0x12fb5d <== NOT EXECUTED
1112f4: e8 43 f0 00 00 call 12033c <printf> <== NOT EXECUTED
printf ("rtems-rfs: format: group blocks = %zu\n", fs.group_blocks);
1112f9: 59 pop %ecx <== NOT EXECUTED
1112fa: 5b pop %ebx <== NOT EXECUTED
1112fb: ff 75 8c pushl -0x74(%ebp) <== NOT EXECUTED
1112fe: 68 7d fb 12 00 push $0x12fb7d <== NOT EXECUTED
111303: e8 34 f0 00 00 call 12033c <printf> <== NOT EXECUTED
printf ("rtems-rfs: format: group inodes = %zu\n", fs.group_inodes);
111308: 5e pop %esi <== NOT EXECUTED
111309: 5f pop %edi <== NOT EXECUTED
11130a: ff 75 90 pushl -0x70(%ebp) <== NOT EXECUTED
11130d: 68 a4 fb 12 00 push $0x12fba4 <== NOT EXECUTED
111312: e8 25 f0 00 00 call 12033c <printf> <== NOT EXECUTED
111317: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
rc = rtems_rfs_buffer_setblksize (&fs, rtems_rfs_fs_block_size (&fs));
11131a: 50 push %eax
11131b: 50 push %eax
11131c: ff b5 6c ff ff ff pushl -0x94(%ebp)
111322: 8d 9d 64 ff ff ff lea -0x9c(%ebp),%ebx
111328: 53 push %ebx
111329: e8 d4 93 00 00 call 11a702 <rtems_rfs_buffer_setblksize>
11132e: 89 c6 mov %eax,%esi
if (rc > 0)
111330: 83 c4 10 add $0x10,%esp
111333: 85 c0 test %eax,%eax
111335: 7e 18 jle 11134f <rtems_rfs_format+0x3bd><== ALWAYS TAKEN
{
printf ("rtems-rfs: format: setting block size failed: %d: %s\n",
111337: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11133a: 50 push %eax <== NOT EXECUTED
11133b: e8 84 fd 00 00 call 1210c4 <strerror> <== NOT EXECUTED
111340: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
111343: 50 push %eax <== NOT EXECUTED
111344: 56 push %esi <== NOT EXECUTED
111345: 68 cb fb 12 00 push $0x12fbcb <== NOT EXECUTED
11134a: e9 d7 05 00 00 jmp 111926 <rtems_rfs_format+0x994><== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
11134f: c6 85 18 ff ff ff 00 movb $0x0,-0xe8(%ebp)
handle->bnum = 0;
111356: c7 85 1c ff ff ff 00 movl $0x0,-0xe4(%ebp)
11135d: 00 00 00
handle->buffer = NULL;
111360: c7 85 20 ff ff ff 00 movl $0x0,-0xe0(%ebp)
111367: 00 00 00
printf ("rtems-rfs: write-superblock: handle open failed: %d: %s\n",
rc, strerror (rc));
return false;
}
rc = rtems_rfs_buffer_handle_request (fs, &handle, 0, false);
11136a: 6a 00 push $0x0
11136c: 6a 00 push $0x0
11136e: 8d b5 18 ff ff ff lea -0xe8(%ebp),%esi
111374: 56 push %esi
111375: 53 push %ebx
111376: e8 2f 8f 00 00 call 11a2aa <rtems_rfs_buffer_handle_request>
11137b: 89 c7 mov %eax,%edi
if (rc > 0)
11137d: 83 c4 10 add $0x10,%esp
111380: 85 c0 test %eax,%eax
111382: 7e 21 jle 1113a5 <rtems_rfs_format+0x413><== ALWAYS TAKEN
{
rtems_rfs_buffer_handle_close (fs, &handle);
111384: 89 f2 mov %esi,%edx <== NOT EXECUTED
111386: 89 d8 mov %ebx,%eax <== NOT EXECUTED
111388: e8 c3 fb ff ff call 110f50 <rtems_rfs_buffer_handle_close><== NOT EXECUTED
printf ("rtems-rfs: write-superblock: request failed: %d: %s\n",
11138d: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
111390: 57 push %edi <== NOT EXECUTED
111391: e8 2e fd 00 00 call 1210c4 <strerror> <== NOT EXECUTED
111396: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
111399: 50 push %eax <== NOT EXECUTED
11139a: 57 push %edi <== NOT EXECUTED
11139b: 68 01 fc 12 00 push $0x12fc01 <== NOT EXECUTED
1113a0: e9 60 01 00 00 jmp 111505 <rtems_rfs_format+0x573><== NOT EXECUTED
rc, strerror (rc));
return false;
}
sb = rtems_rfs_buffer_data (&handle);
1113a5: 8b 85 20 ff ff ff mov -0xe0(%ebp),%eax
1113ab: 8b 50 1c mov 0x1c(%eax),%edx
#define write_sb(_o, _d) rtems_rfs_write_u32(sb + (_o), _d)
memset (sb, 0xff, rtems_rfs_fs_block_size (fs));
1113ae: 8b 8d 6c ff ff ff mov -0x94(%ebp),%ecx
1113b4: b0 ff mov $0xff,%al
1113b6: 89 d7 mov %edx,%edi
1113b8: f3 aa rep stos %al,%es:(%edi)
write_sb (RTEMS_RFS_SB_OFFSET_MAGIC, RTEMS_RFS_SB_MAGIC);
1113ba: c6 02 28 movb $0x28,(%edx)
1113bd: c6 42 01 09 movb $0x9,0x1(%edx)
1113c1: c6 42 02 20 movb $0x20,0x2(%edx)
1113c5: c6 42 03 01 movb $0x1,0x3(%edx)
write_sb (RTEMS_RFS_SB_OFFSET_VERSION, RTEMS_RFS_VERSION);
1113c9: c6 42 04 00 movb $0x0,0x4(%edx)
1113cd: c6 42 05 00 movb $0x0,0x5(%edx)
1113d1: c6 42 06 00 movb $0x0,0x6(%edx)
1113d5: c6 42 07 00 movb $0x0,0x7(%edx)
write_sb (RTEMS_RFS_SB_OFFSET_BLOCKS, rtems_rfs_fs_blocks (fs));
1113d9: 8b 85 68 ff ff ff mov -0x98(%ebp),%eax
1113df: 89 c1 mov %eax,%ecx
1113e1: c1 e9 18 shr $0x18,%ecx
1113e4: 88 4a 0c mov %cl,0xc(%edx)
1113e7: 89 c1 mov %eax,%ecx
1113e9: c1 e9 10 shr $0x10,%ecx
1113ec: 88 4a 0d mov %cl,0xd(%edx)
1113ef: 89 c1 mov %eax,%ecx
1113f1: c1 e9 08 shr $0x8,%ecx
1113f4: 88 4a 0e mov %cl,0xe(%edx)
1113f7: 88 42 0f mov %al,0xf(%edx)
write_sb (RTEMS_RFS_SB_OFFSET_BLOCK_SIZE, rtems_rfs_fs_block_size (fs));
1113fa: 0f b6 85 6f ff ff ff movzbl -0x91(%ebp),%eax
111401: 88 42 08 mov %al,0x8(%edx)
111404: 0f b7 85 6e ff ff ff movzwl -0x92(%ebp),%eax
11140b: 88 42 09 mov %al,0x9(%edx)
11140e: 8b 85 6c ff ff ff mov -0x94(%ebp),%eax
111414: c1 e8 08 shr $0x8,%eax
111417: 88 42 0a mov %al,0xa(%edx)
11141a: 8b 85 6c ff ff ff mov -0x94(%ebp),%eax
111420: 88 42 0b mov %al,0xb(%edx)
write_sb (RTEMS_RFS_SB_OFFSET_BAD_BLOCKS, fs->bad_blocks);
111423: 0f b6 85 7f ff ff ff movzbl -0x81(%ebp),%eax
11142a: 88 42 10 mov %al,0x10(%edx)
11142d: 0f b7 85 7e ff ff ff movzwl -0x82(%ebp),%eax
111434: 88 42 11 mov %al,0x11(%edx)
111437: 8b 85 7c ff ff ff mov -0x84(%ebp),%eax
11143d: c1 e8 08 shr $0x8,%eax
111440: 88 42 12 mov %al,0x12(%edx)
111443: 8b 85 7c ff ff ff mov -0x84(%ebp),%eax
111449: 88 42 13 mov %al,0x13(%edx)
write_sb (RTEMS_RFS_SB_OFFSET_MAX_NAME_LENGTH, fs->max_name_length);
11144c: 0f b6 45 83 movzbl -0x7d(%ebp),%eax
111450: 88 42 14 mov %al,0x14(%edx)
111453: 0f b7 45 82 movzwl -0x7e(%ebp),%eax
111457: 88 42 15 mov %al,0x15(%edx)
11145a: 8b 45 80 mov -0x80(%ebp),%eax
11145d: c1 e8 08 shr $0x8,%eax
111460: 88 42 16 mov %al,0x16(%edx)
111463: 8b 45 80 mov -0x80(%ebp),%eax
111466: 88 42 17 mov %al,0x17(%edx)
write_sb (RTEMS_RFS_SB_OFFSET_GROUPS, fs->group_count);
111469: 0f b6 45 8b movzbl -0x75(%ebp),%eax
11146d: 88 42 18 mov %al,0x18(%edx)
111470: 0f b7 45 8a movzwl -0x76(%ebp),%eax
111474: 88 42 19 mov %al,0x19(%edx)
111477: 8b 45 88 mov -0x78(%ebp),%eax
11147a: c1 e8 08 shr $0x8,%eax
11147d: 88 42 1a mov %al,0x1a(%edx)
111480: 8b 45 88 mov -0x78(%ebp),%eax
111483: 88 42 1b mov %al,0x1b(%edx)
write_sb (RTEMS_RFS_SB_OFFSET_GROUP_BLOCKS, fs->group_blocks);
111486: 0f b6 45 8f movzbl -0x71(%ebp),%eax
11148a: 88 42 1c mov %al,0x1c(%edx)
11148d: 0f b7 45 8e movzwl -0x72(%ebp),%eax
111491: 88 42 1d mov %al,0x1d(%edx)
111494: 8b 45 8c mov -0x74(%ebp),%eax
111497: c1 e8 08 shr $0x8,%eax
11149a: 88 42 1e mov %al,0x1e(%edx)
11149d: 8b 45 8c mov -0x74(%ebp),%eax
1114a0: 88 42 1f mov %al,0x1f(%edx)
write_sb (RTEMS_RFS_SB_OFFSET_GROUP_INODES, fs->group_inodes);
1114a3: 0f b6 45 93 movzbl -0x6d(%ebp),%eax
1114a7: 88 42 20 mov %al,0x20(%edx)
1114aa: 0f b7 45 92 movzwl -0x6e(%ebp),%eax
1114ae: 88 42 21 mov %al,0x21(%edx)
1114b1: 8b 45 90 mov -0x70(%ebp),%eax
1114b4: c1 e8 08 shr $0x8,%eax
1114b7: 88 42 22 mov %al,0x22(%edx)
1114ba: 8b 45 90 mov -0x70(%ebp),%eax
1114bd: 88 42 23 mov %al,0x23(%edx)
write_sb (RTEMS_RFS_SB_OFFSET_INODE_SIZE, RTEMS_RFS_INODE_SIZE);
1114c0: c6 42 24 00 movb $0x0,0x24(%edx)
1114c4: c6 42 25 00 movb $0x0,0x25(%edx)
1114c8: c6 42 26 00 movb $0x0,0x26(%edx)
1114cc: c6 42 27 38 movb $0x38,0x27(%edx)
rtems_rfs_buffer_mark_dirty (&handle);
1114d0: c6 85 18 ff ff ff 01 movb $0x1,-0xe8(%ebp)
rc = rtems_rfs_buffer_handle_release (fs, &handle);
1114d7: 50 push %eax
1114d8: 50 push %eax
1114d9: 56 push %esi
1114da: 53 push %ebx
1114db: e8 51 8c 00 00 call 11a131 <rtems_rfs_buffer_handle_release>
1114e0: 89 c7 mov %eax,%edi
if (rc > 0)
1114e2: 83 c4 10 add $0x10,%esp
{
rtems_rfs_buffer_handle_close (fs, &handle);
1114e5: 89 f2 mov %esi,%edx
1114e7: 89 d8 mov %ebx,%eax
write_sb (RTEMS_RFS_SB_OFFSET_INODE_SIZE, RTEMS_RFS_INODE_SIZE);
rtems_rfs_buffer_mark_dirty (&handle);
rc = rtems_rfs_buffer_handle_release (fs, &handle);
if (rc > 0)
1114e9: 85 ff test %edi,%edi
1114eb: 7e 22 jle 11150f <rtems_rfs_format+0x57d><== ALWAYS TAKEN
{
rtems_rfs_buffer_handle_close (fs, &handle);
1114ed: e8 5e fa ff ff call 110f50 <rtems_rfs_buffer_handle_close><== NOT EXECUTED
printf ("rtems-rfs: write-superblock: buffer release failed: %d: %s\n",
1114f2: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1114f5: 57 push %edi <== NOT EXECUTED
1114f6: e8 c9 fb 00 00 call 1210c4 <strerror> <== NOT EXECUTED
1114fb: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
1114fe: 50 push %eax <== NOT EXECUTED
1114ff: 57 push %edi <== NOT EXECUTED
111500: 68 36 fc 12 00 push $0x12fc36 <== NOT EXECUTED
111505: e8 32 ee 00 00 call 12033c <printf> <== NOT EXECUTED
11150a: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11150d: eb 2f jmp 11153e <rtems_rfs_format+0x5ac><== NOT EXECUTED
rc, strerror (rc));
return false;
}
rc = rtems_rfs_buffer_handle_close (fs, &handle);
11150f: e8 3c fa ff ff call 110f50 <rtems_rfs_buffer_handle_close>
111514: 89 c7 mov %eax,%edi
if (rc > 0)
111516: 85 c0 test %eax,%eax
111518: 7e 15 jle 11152f <rtems_rfs_format+0x59d><== ALWAYS TAKEN
{
printf ("rtems-rfs: write-superblock: buffer handle close failed: %d: %s\n",
11151a: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11151d: 50 push %eax <== NOT EXECUTED
11151e: e8 a1 fb 00 00 call 1210c4 <strerror> <== NOT EXECUTED
111523: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
111526: 50 push %eax <== NOT EXECUTED
111527: 57 push %edi <== NOT EXECUTED
111528: 68 72 fc 12 00 push $0x12fc72 <== NOT EXECUTED
11152d: eb d6 jmp 111505 <rtems_rfs_format+0x573><== NOT EXECUTED
printf ("rtems-rfs: format: setting block size failed: %d: %s\n",
rc, strerror (rc));
return -1;
}
if (!rtems_rfs_write_superblock (&fs))
11152f: c7 85 04 ff ff ff 00 movl $0x0,-0xfc(%ebp)
111536: 00 00 00
111539: e9 f2 03 00 00 jmp 111930 <rtems_rfs_format+0x99e>
{
printf ("rtems-rfs: format: superblock write failed\n");
11153e: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
111541: 68 b3 fc 12 00 push $0x12fcb3 <== NOT EXECUTED
111546: e9 d6 fb ff ff jmp 111121 <rtems_rfs_format+0x18f><== NOT EXECUTED
return -1;
}
for (group = 0; group < fs.group_count; group++)
if (!rtems_rfs_write_group (&fs, group,
config->initialise_inodes, config->verbose))
11154b: 8b 55 0c mov 0xc(%ebp),%edx
11154e: 8a 52 15 mov 0x15(%edx),%dl
111551: 88 95 00 ff ff ff mov %dl,-0x100(%ebp)
111557: 8b 55 0c mov 0xc(%ebp),%edx
11155a: 8a 52 14 mov 0x14(%edx),%dl
11155d: 88 95 f7 fe ff ff mov %dl,-0x109(%ebp)
size_t group_size;
int blocks;
int b;
int rc;
group_base = rtems_rfs_fs_block (fs, group, 0);
111563: 8b 75 8c mov -0x74(%ebp),%esi
111566: 8b 8d 04 ff ff ff mov -0xfc(%ebp),%ecx
11156c: 0f af ce imul %esi,%ecx
11156f: 89 8d fc fe ff ff mov %ecx,-0x104(%ebp)
111575: 89 cb mov %ecx,%ebx
111577: 43 inc %ebx
if (group_base > rtems_rfs_fs_blocks (fs))
111578: 8b 85 68 ff ff ff mov -0x98(%ebp),%eax
11157e: 39 c3 cmp %eax,%ebx
111580: 76 12 jbe 111594 <rtems_rfs_format+0x602><== ALWAYS TAKEN
{
printf ("rtems-rfs: write-group: group %d base beyond disk limit\n",
111582: 50 push %eax <== NOT EXECUTED
111583: 50 push %eax <== NOT EXECUTED
111584: ff b5 04 ff ff ff pushl -0xfc(%ebp) <== NOT EXECUTED
11158a: 68 de fc 12 00 push $0x12fcde <== NOT EXECUTED
11158f: e9 92 03 00 00 jmp 111926 <rtems_rfs_format+0x994><== NOT EXECUTED
/*
* Be nice to strange sizes of disks. These are embedded systems after all
* and nice numbers do not always work out. Let the last block pick up the
* remainder of the blocks.
*/
if ((group_base + group_size) > rtems_rfs_fs_blocks (fs))
111594: 8d 14 33 lea (%ebx,%esi,1),%edx
111597: 39 c2 cmp %eax,%edx
111599: 76 04 jbe 11159f <rtems_rfs_format+0x60d><== NEVER TAKEN
group_size = rtems_rfs_fs_blocks (fs) - group_base;
11159b: 89 c6 mov %eax,%esi
11159d: 29 de sub %ebx,%esi
if (verbose)
11159f: 80 bd 00 ff ff ff 00 cmpb $0x0,-0x100(%ebp)
1115a6: 74 15 je 1115bd <rtems_rfs_format+0x62b><== ALWAYS TAKEN
printf ("\rrtems-rfs: format: group %3d: base = %" PRId32 ", size = %zd",
1115a8: 56 push %esi <== NOT EXECUTED
1115a9: 53 push %ebx <== NOT EXECUTED
1115aa: ff b5 04 ff ff ff pushl -0xfc(%ebp) <== NOT EXECUTED
1115b0: 68 17 fd 12 00 push $0x12fd17 <== NOT EXECUTED
1115b5: e8 82 ed 00 00 call 12033c <printf> <== NOT EXECUTED
1115ba: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
1115bd: c6 85 18 ff ff ff 00 movb $0x0,-0xe8(%ebp)
handle->bnum = 0;
1115c4: c7 85 1c ff ff ff 00 movl $0x0,-0xe4(%ebp)
1115cb: 00 00 00
handle->buffer = NULL;
1115ce: c7 85 20 ff ff ff 00 movl $0x0,-0xe0(%ebp)
1115d5: 00 00 00
printf ("\nrtems-rfs: write-group: handle open failed: %d: %s\n",
rc, strerror (rc));
return false;
}
if (verbose)
1115d8: 80 bd 00 ff ff ff 00 cmpb $0x0,-0x100(%ebp)
1115df: 74 10 je 1115f1 <rtems_rfs_format+0x65f><== ALWAYS TAKEN
printf (", blocks");
1115e1: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1115e4: 68 4d fd 12 00 push $0x12fd4d <== NOT EXECUTED
1115e9: e8 4e ed 00 00 call 12033c <printf> <== NOT EXECUTED
1115ee: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
/*
* Open the block bitmap using the new buffer.
*/
rc = rtems_rfs_bitmap_open (&bitmap, fs, &handle, group_size,
1115f1: 83 ec 0c sub $0xc,%esp
1115f4: 53 push %ebx
1115f5: 56 push %esi
1115f6: 8d 85 18 ff ff ff lea -0xe8(%ebp),%eax
1115fc: 50 push %eax
1115fd: 8d 95 64 ff ff ff lea -0x9c(%ebp),%edx
111603: 52 push %edx
111604: 8d 9d 24 ff ff ff lea -0xdc(%ebp),%ebx
11160a: 53 push %ebx
11160b: e8 fb 7b 00 00 call 11920b <rtems_rfs_bitmap_open>
111610: 89 c7 mov %eax,%edi
group_base + RTEMS_RFS_GROUP_BLOCK_BITMAP_BLOCK);
if (rc > 0)
111612: 83 c4 20 add $0x20,%esp
111615: 85 c0 test %eax,%eax
111617: 7e 29 jle 111642 <rtems_rfs_format+0x6b0><== ALWAYS TAKEN
{
rtems_rfs_buffer_handle_close (fs, &handle);
111619: 8d 95 18 ff ff ff lea -0xe8(%ebp),%edx <== NOT EXECUTED
11161f: 8d 85 64 ff ff ff lea -0x9c(%ebp),%eax <== NOT EXECUTED
111625: e8 26 f9 ff ff call 110f50 <rtems_rfs_buffer_handle_close><== NOT EXECUTED
printf ("\nrtems-rfs: write-group: group %3d: open block bitmap failed: %d: %s\n",
11162a: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11162d: 57 push %edi <== NOT EXECUTED
11162e: e8 91 fa 00 00 call 1210c4 <strerror> <== NOT EXECUTED
111633: 50 push %eax <== NOT EXECUTED
111634: 57 push %edi <== NOT EXECUTED
111635: ff b5 04 ff ff ff pushl -0xfc(%ebp) <== NOT EXECUTED
11163b: 68 56 fd 12 00 push $0x12fd56 <== NOT EXECUTED
111640: eb 56 jmp 111698 <rtems_rfs_format+0x706><== NOT EXECUTED
/*
* Force the whole buffer to a known state. The bit map may not occupy the
* whole block.
*/
memset (rtems_rfs_buffer_data (&handle), 0xff, rtems_rfs_fs_block_size (fs));
111642: 8b 85 20 ff ff ff mov -0xe0(%ebp),%eax
111648: 8b 50 1c mov 0x1c(%eax),%edx
11164b: 8b 8d 6c ff ff ff mov -0x94(%ebp),%ecx
111651: b0 ff mov $0xff,%al
111653: 89 d7 mov %edx,%edi
111655: f3 aa rep stos %al,%es:(%edi)
/*
* Clear the bitmap.
*/
rc = rtems_rfs_bitmap_map_clear_all (&bitmap);
111657: 83 ec 0c sub $0xc,%esp
11165a: 53 push %ebx
11165b: e8 d3 79 00 00 call 119033 <rtems_rfs_bitmap_map_clear_all>
111660: 89 c7 mov %eax,%edi
if (rc > 0)
111662: 83 c4 10 add $0x10,%esp
111665: 85 c0 test %eax,%eax
111667: 7e 39 jle 1116a2 <rtems_rfs_format+0x710><== ALWAYS TAKEN
{
rtems_rfs_bitmap_close (&bitmap);
111669: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11166c: 53 push %ebx <== NOT EXECUTED
11166d: e8 eb 7b 00 00 call 11925d <rtems_rfs_bitmap_close><== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &handle);
111672: 8d 95 18 ff ff ff lea -0xe8(%ebp),%edx <== NOT EXECUTED
111678: 8d 85 64 ff ff ff lea -0x9c(%ebp),%eax <== NOT EXECUTED
11167e: e8 cd f8 ff ff call 110f50 <rtems_rfs_buffer_handle_close><== NOT EXECUTED
printf ("\nrtems-rfs: write-group: group %3d: block bitmap clear all failed: %d: %s\n",
111683: 89 3c 24 mov %edi,(%esp) <== NOT EXECUTED
111686: e8 39 fa 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11168b: 50 push %eax <== NOT EXECUTED
11168c: 57 push %edi <== NOT EXECUTED
11168d: ff b5 04 ff ff ff pushl -0xfc(%ebp) <== NOT EXECUTED
111693: 68 9c fd 12 00 push $0x12fd9c <== NOT EXECUTED
111698: e8 9f ec 00 00 call 12033c <printf> <== NOT EXECUTED
11169d: e9 3b 02 00 00 jmp 1118dd <rtems_rfs_format+0x94b><== NOT EXECUTED
}
/*
* Forced allocation of the block bitmap.
*/
rtems_rfs_bitmap_map_set (&bitmap, RTEMS_RFS_GROUP_BLOCK_BITMAP_BLOCK);
1116a2: 50 push %eax
1116a3: 50 push %eax
1116a4: 6a 00 push $0x0
1116a6: 53 push %ebx
1116a7: e8 0f 78 00 00 call 118ebb <rtems_rfs_bitmap_map_set>
/*
* Forced allocation of the inode bitmap.
*/
rtems_rfs_bitmap_map_set (&bitmap, RTEMS_RFS_GROUP_INODE_BITMAP_BLOCK);
1116ac: 58 pop %eax
1116ad: 5a pop %edx
1116ae: 6a 01 push $0x1
1116b0: 53 push %ebx
1116b1: e8 05 78 00 00 call 118ebb <rtems_rfs_bitmap_map_set>
/*
* Determine the number of inodes blocks in the group.
*/
blocks = rtems_rfs_rup_quotient (fs->group_inodes, fs->inodes_per_block);
1116b6: 59 pop %ecx
1116b7: 5f pop %edi
1116b8: ff 75 94 pushl -0x6c(%ebp)
1116bb: ff 75 90 pushl -0x70(%ebp)
1116be: e8 b5 f8 ff ff call 110f78 <rtems_rfs_rup_quotient>
1116c3: 83 c4 10 add $0x10,%esp
1116c6: 89 85 f8 fe ff ff mov %eax,-0x108(%ebp)
/*
* Forced allocation of the inode blocks which follow the block bitmap.
*/
for (b = 0; b < blocks; b++)
1116cc: 31 ff xor %edi,%edi
1116ce: eb 10 jmp 1116e0 <rtems_rfs_format+0x74e>
rtems_rfs_bitmap_map_set (&bitmap, b + RTEMS_RFS_GROUP_INODE_BLOCK);
1116d0: 50 push %eax
1116d1: 50 push %eax
return rc;
}
int
rtems_rfs_format (const char* name, const rtems_rfs_format_config* config)
1116d2: 8d 47 02 lea 0x2(%edi),%eax
/*
* Forced allocation of the inode blocks which follow the block bitmap.
*/
for (b = 0; b < blocks; b++)
rtems_rfs_bitmap_map_set (&bitmap, b + RTEMS_RFS_GROUP_INODE_BLOCK);
1116d5: 50 push %eax
1116d6: 53 push %ebx
1116d7: e8 df 77 00 00 call 118ebb <rtems_rfs_bitmap_map_set>
blocks = rtems_rfs_rup_quotient (fs->group_inodes, fs->inodes_per_block);
/*
* Forced allocation of the inode blocks which follow the block bitmap.
*/
for (b = 0; b < blocks; b++)
1116dc: 47 inc %edi
1116dd: 83 c4 10 add $0x10,%esp
1116e0: 3b bd f8 fe ff ff cmp -0x108(%ebp),%edi
1116e6: 7c e8 jl 1116d0 <rtems_rfs_format+0x73e>
rtems_rfs_bitmap_map_set (&bitmap, b + RTEMS_RFS_GROUP_INODE_BLOCK);
/*
* Close the block bitmap.
*/
rc = rtems_rfs_bitmap_close (&bitmap);
1116e8: 83 ec 0c sub $0xc,%esp
1116eb: 53 push %ebx
1116ec: e8 6c 7b 00 00 call 11925d <rtems_rfs_bitmap_close>
1116f1: 89 c3 mov %eax,%ebx
if (rc > 0)
1116f3: 83 c4 10 add $0x10,%esp
1116f6: 85 c0 test %eax,%eax
1116f8: 7e 2c jle 111726 <rtems_rfs_format+0x794><== ALWAYS TAKEN
{
rtems_rfs_buffer_handle_close (fs, &handle);
1116fa: 8d 95 18 ff ff ff lea -0xe8(%ebp),%edx <== NOT EXECUTED
111700: 8d 85 64 ff ff ff lea -0x9c(%ebp),%eax <== NOT EXECUTED
111706: e8 45 f8 ff ff call 110f50 <rtems_rfs_buffer_handle_close><== NOT EXECUTED
printf ("\nrtems-rfs: write-group: group %3d: close block bitmap failed: %d: %s\n",
11170b: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11170e: 53 push %ebx <== NOT EXECUTED
11170f: e8 b0 f9 00 00 call 1210c4 <strerror> <== NOT EXECUTED
111714: 50 push %eax <== NOT EXECUTED
111715: 53 push %ebx <== NOT EXECUTED
111716: ff b5 04 ff ff ff pushl -0xfc(%ebp) <== NOT EXECUTED
11171c: 68 e7 fd 12 00 push $0x12fde7 <== NOT EXECUTED
111721: e9 72 ff ff ff jmp 111698 <rtems_rfs_format+0x706><== NOT EXECUTED
group, rc, strerror (rc));
return false;
}
rtems_rfs_buffer_mark_dirty (&handle);
111726: c6 85 18 ff ff ff 01 movb $0x1,-0xe8(%ebp)
if (verbose)
11172d: 80 bd 00 ff ff ff 00 cmpb $0x0,-0x100(%ebp)
111734: 74 10 je 111746 <rtems_rfs_format+0x7b4><== ALWAYS TAKEN
printf (", inodes");
111736: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
111739: 68 2e fe 12 00 push $0x12fe2e <== NOT EXECUTED
11173e: e8 f9 eb 00 00 call 12033c <printf> <== NOT EXECUTED
111743: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
/*
* Open the inode bitmap using the old buffer. Should release any changes.
*/
rc = rtems_rfs_bitmap_open (&bitmap, fs, &handle, group_size,
111746: 83 ec 0c sub $0xc,%esp
111749: 8b 85 fc fe ff ff mov -0x104(%ebp),%eax
11174f: 83 c0 02 add $0x2,%eax
111752: 50 push %eax
111753: 56 push %esi
111754: 8d 8d 18 ff ff ff lea -0xe8(%ebp),%ecx
11175a: 51 push %ecx
11175b: 8d 85 64 ff ff ff lea -0x9c(%ebp),%eax
111761: 50 push %eax
111762: 8d 9d 24 ff ff ff lea -0xdc(%ebp),%ebx
111768: 53 push %ebx
111769: e8 9d 7a 00 00 call 11920b <rtems_rfs_bitmap_open>
11176e: 89 c6 mov %eax,%esi
group_base + RTEMS_RFS_GROUP_INODE_BITMAP_BLOCK);
if (rc > 0)
111770: 83 c4 20 add $0x20,%esp
111773: 85 c0 test %eax,%eax
111775: 7e 2c jle 1117a3 <rtems_rfs_format+0x811><== ALWAYS TAKEN
{
rtems_rfs_buffer_handle_close (fs, &handle);
111777: 8d 95 18 ff ff ff lea -0xe8(%ebp),%edx <== NOT EXECUTED
11177d: 8d 85 64 ff ff ff lea -0x9c(%ebp),%eax <== NOT EXECUTED
111783: e8 c8 f7 ff ff call 110f50 <rtems_rfs_buffer_handle_close><== NOT EXECUTED
printf ("\nrtems-rfs: write-group: group %3d: open inode bitmap failed: %d: %s\n",
111788: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11178b: 56 push %esi <== NOT EXECUTED
11178c: e8 33 f9 00 00 call 1210c4 <strerror> <== NOT EXECUTED
111791: 50 push %eax <== NOT EXECUTED
111792: 56 push %esi <== NOT EXECUTED
111793: ff b5 04 ff ff ff pushl -0xfc(%ebp) <== NOT EXECUTED
111799: 68 37 fe 12 00 push $0x12fe37 <== NOT EXECUTED
11179e: e9 f5 fe ff ff jmp 111698 <rtems_rfs_format+0x706><== NOT EXECUTED
/*
* Force the whole buffer to a known state. The bit map may not occupy the
* whole block.
*/
memset (rtems_rfs_buffer_data (&handle), 0x00, rtems_rfs_fs_block_size (fs));
1117a3: 8b 85 20 ff ff ff mov -0xe0(%ebp),%eax
1117a9: 8b 50 1c mov 0x1c(%eax),%edx
1117ac: 8b 8d 6c ff ff ff mov -0x94(%ebp),%ecx
1117b2: 31 c0 xor %eax,%eax
1117b4: 89 d7 mov %edx,%edi
1117b6: f3 aa rep stos %al,%es:(%edi)
/*
* Clear the inode bitmap.
*/
rc = rtems_rfs_bitmap_map_clear_all (&bitmap);
1117b8: 83 ec 0c sub $0xc,%esp
1117bb: 53 push %ebx
1117bc: e8 72 78 00 00 call 119033 <rtems_rfs_bitmap_map_clear_all>
1117c1: 89 c6 mov %eax,%esi
if (rc > 0)
1117c3: 83 c4 10 add $0x10,%esp
1117c6: 85 c0 test %eax,%eax
1117c8: 7e 34 jle 1117fe <rtems_rfs_format+0x86c><== ALWAYS TAKEN
{
rtems_rfs_bitmap_close (&bitmap);
1117ca: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1117cd: 53 push %ebx <== NOT EXECUTED
1117ce: e8 8a 7a 00 00 call 11925d <rtems_rfs_bitmap_close><== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &handle);
1117d3: 8d 95 18 ff ff ff lea -0xe8(%ebp),%edx <== NOT EXECUTED
1117d9: 8d 85 64 ff ff ff lea -0x9c(%ebp),%eax <== NOT EXECUTED
1117df: e8 6c f7 ff ff call 110f50 <rtems_rfs_buffer_handle_close><== NOT EXECUTED
printf ("\nrtems-rfs: write-group: group %3d: inode bitmap" \
1117e4: 89 34 24 mov %esi,(%esp) <== NOT EXECUTED
1117e7: e8 d8 f8 00 00 call 1210c4 <strerror> <== NOT EXECUTED
1117ec: 50 push %eax <== NOT EXECUTED
1117ed: 56 push %esi <== NOT EXECUTED
1117ee: ff b5 04 ff ff ff pushl -0xfc(%ebp) <== NOT EXECUTED
1117f4: 68 7d fe 12 00 push $0x12fe7d <== NOT EXECUTED
1117f9: e9 9a fe ff ff jmp 111698 <rtems_rfs_format+0x706><== NOT EXECUTED
}
/*
* Close the inode bitmap.
*/
rc = rtems_rfs_bitmap_close (&bitmap);
1117fe: 83 ec 0c sub $0xc,%esp
111801: 53 push %ebx
111802: e8 56 7a 00 00 call 11925d <rtems_rfs_bitmap_close>
111807: 89 c3 mov %eax,%ebx
if (rc > 0)
111809: 83 c4 10 add $0x10,%esp
11180c: 85 c0 test %eax,%eax
11180e: 7e 2c jle 11183c <rtems_rfs_format+0x8aa><== ALWAYS TAKEN
{
rtems_rfs_buffer_handle_close (fs, &handle);
111810: 8d 95 18 ff ff ff lea -0xe8(%ebp),%edx <== NOT EXECUTED
111816: 8d 85 64 ff ff ff lea -0x9c(%ebp),%eax <== NOT EXECUTED
11181c: e8 2f f7 ff ff call 110f50 <rtems_rfs_buffer_handle_close><== NOT EXECUTED
printf ("\nrtems-rfs: write-group: group %3d: close inode" \
111821: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
111824: 53 push %ebx <== NOT EXECUTED
111825: e8 9a f8 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11182a: 50 push %eax <== NOT EXECUTED
11182b: 53 push %ebx <== NOT EXECUTED
11182c: ff b5 04 ff ff ff pushl -0xfc(%ebp) <== NOT EXECUTED
111832: 68 c8 fe 12 00 push $0x12fec8 <== NOT EXECUTED
111837: e9 5c fe ff ff jmp 111698 <rtems_rfs_format+0x706><== NOT EXECUTED
" bitmap failed: %d: %s\n", group, rc, strerror (rc));
return false;
}
rtems_rfs_buffer_mark_dirty (&handle);
11183c: c6 85 18 ff ff ff 01 movb $0x1,-0xe8(%ebp)
/*
* Initialise the inode tables if required to do so.
*/
if (initialise_inodes)
111843: 31 db xor %ebx,%ebx
{
for (b = 0; b < blocks; b++)
{
rc = rtems_rfs_buffer_handle_request (fs, &handle,
group_base + b + RTEMS_RFS_GROUP_INODE_BLOCK,
111845: 8b 95 fc fe ff ff mov -0x104(%ebp),%edx
11184b: 83 c2 03 add $0x3,%edx
11184e: 89 95 00 ff ff ff mov %edx,-0x100(%ebp)
rtems_rfs_buffer_mark_dirty (&handle);
/*
* Initialise the inode tables if required to do so.
*/
if (initialise_inodes)
111854: 80 bd f7 fe ff ff 00 cmpb $0x0,-0x109(%ebp)
11185b: 0f 85 a1 00 00 00 jne 111902 <rtems_rfs_format+0x970><== NEVER TAKEN
rtems_rfs_buffer_mark_dirty (&handle);
}
}
rc = rtems_rfs_buffer_handle_close (fs, &handle);
111861: 8d 95 18 ff ff ff lea -0xe8(%ebp),%edx
111867: 8d 85 64 ff ff ff lea -0x9c(%ebp),%eax
11186d: e8 de f6 ff ff call 110f50 <rtems_rfs_buffer_handle_close>
111872: 89 c3 mov %eax,%ebx
if (rc > 0)
111874: 85 c0 test %eax,%eax
111876: 0f 8f 97 00 00 00 jg 111913 <rtems_rfs_format+0x981><== NEVER TAKEN
{
printf ("rtems-rfs: format: superblock write failed\n");
return -1;
}
for (group = 0; group < fs.group_count; group++)
11187c: ff 85 04 ff ff ff incl -0xfc(%ebp)
111882: e9 a9 00 00 00 jmp 111930 <rtems_rfs_format+0x99e>
return rc;
}
int
rtems_rfs_format (const char* name, const rtems_rfs_format_config* config)
111887: 8b bd 00 ff ff ff mov -0x100(%ebp),%edi <== NOT EXECUTED
11188d: 01 df add %ebx,%edi <== NOT EXECUTED
*/
if (initialise_inodes)
{
for (b = 0; b < blocks; b++)
{
rc = rtems_rfs_buffer_handle_request (fs, &handle,
11188f: 6a 00 push $0x0 <== NOT EXECUTED
111891: 57 push %edi <== NOT EXECUTED
111892: 8d 8d 18 ff ff ff lea -0xe8(%ebp),%ecx <== NOT EXECUTED
111898: 51 push %ecx <== NOT EXECUTED
111899: 8d 85 64 ff ff ff lea -0x9c(%ebp),%eax <== NOT EXECUTED
11189f: 50 push %eax <== NOT EXECUTED
1118a0: e8 05 8a 00 00 call 11a2aa <rtems_rfs_buffer_handle_request><== NOT EXECUTED
1118a5: 89 c6 mov %eax,%esi <== NOT EXECUTED
group_base + b + RTEMS_RFS_GROUP_INODE_BLOCK,
false);
if (rc > 0)
1118a7: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
1118aa: 85 c0 test %eax,%eax <== NOT EXECUTED
1118ac: 7e 37 jle 1118e5 <rtems_rfs_format+0x953><== NOT EXECUTED
{
rtems_rfs_buffer_handle_close (fs, &handle);
1118ae: 8d 95 18 ff ff ff lea -0xe8(%ebp),%edx <== NOT EXECUTED
1118b4: 8d 85 64 ff ff ff lea -0x9c(%ebp),%eax <== NOT EXECUTED
1118ba: e8 91 f6 ff ff call 110f50 <rtems_rfs_buffer_handle_close><== NOT EXECUTED
printf ("\nrtems-rfs: write-group: group %3d: block %" PRId32 " request failed: %d: %s\n",
1118bf: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1118c2: 56 push %esi <== NOT EXECUTED
1118c3: e8 fc f7 00 00 call 1210c4 <strerror> <== NOT EXECUTED
1118c8: 89 04 24 mov %eax,(%esp) <== NOT EXECUTED
1118cb: 56 push %esi <== NOT EXECUTED
1118cc: 57 push %edi <== NOT EXECUTED
1118cd: ff b5 04 ff ff ff pushl -0xfc(%ebp) <== NOT EXECUTED
1118d3: 68 0f ff 12 00 push $0x12ff0f <== NOT EXECUTED
1118d8: e8 5f ea 00 00 call 12033c <printf> <== NOT EXECUTED
1118dd: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
1118e0: e9 ab 02 00 00 jmp 111b90 <rtems_rfs_format+0xbfe><== NOT EXECUTED
/*
* Force the whole buffer to a known state. The bit map may not occupy the
* whole block.
*/
memset (rtems_rfs_buffer_data (&handle), 0xff, rtems_rfs_fs_block_size (fs));
1118e5: 8b 85 20 ff ff ff mov -0xe0(%ebp),%eax <== NOT EXECUTED
1118eb: 8b 50 1c mov 0x1c(%eax),%edx <== NOT EXECUTED
1118ee: 8b 8d 6c ff ff ff mov -0x94(%ebp),%ecx <== NOT EXECUTED
1118f4: b0 ff mov $0xff,%al <== NOT EXECUTED
1118f6: 89 d7 mov %edx,%edi <== NOT EXECUTED
1118f8: f3 aa rep stos %al,%es:(%edi) <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle);
1118fa: c6 85 18 ff ff ff 01 movb $0x1,-0xe8(%ebp) <== NOT EXECUTED
/*
* Initialise the inode tables if required to do so.
*/
if (initialise_inodes)
{
for (b = 0; b < blocks; b++)
111901: 43 inc %ebx <== NOT EXECUTED
111902: 3b 9d f8 fe ff ff cmp -0x108(%ebp),%ebx <== NOT EXECUTED
111908: 0f 8c 79 ff ff ff jl 111887 <rtems_rfs_format+0x8f5><== NOT EXECUTED
11190e: e9 4e ff ff ff jmp 111861 <rtems_rfs_format+0x8cf><== NOT EXECUTED
}
rc = rtems_rfs_buffer_handle_close (fs, &handle);
if (rc > 0)
{
printf ("\nrtems-rfs: write-group: buffer handle close failed: %d: %s\n",
111913: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
111916: 50 push %eax <== NOT EXECUTED
111917: e8 a8 f7 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11191c: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11191f: 50 push %eax <== NOT EXECUTED
111920: 53 push %ebx <== NOT EXECUTED
111921: 68 55 ff 12 00 push $0x12ff55 <== NOT EXECUTED
111926: e8 11 ea 00 00 call 12033c <printf> <== NOT EXECUTED
11192b: e9 f6 f7 ff ff jmp 111126 <rtems_rfs_format+0x194><== NOT EXECUTED
{
printf ("rtems-rfs: format: superblock write failed\n");
return -1;
}
for (group = 0; group < fs.group_count; group++)
111930: 8b 95 04 ff ff ff mov -0xfc(%ebp),%edx
111936: 3b 55 88 cmp -0x78(%ebp),%edx
111939: 0f 8c 0c fc ff ff jl 11154b <rtems_rfs_format+0x5b9>
if (!rtems_rfs_write_group (&fs, group,
config->initialise_inodes, config->verbose))
return -1;
if (config->verbose)
11193f: 8b 4d 0c mov 0xc(%ebp),%ecx
111942: 80 79 15 00 cmpb $0x0,0x15(%ecx)
111946: 74 0d je 111955 <rtems_rfs_format+0x9c3><== ALWAYS TAKEN
printf ("\n");
111948: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11194b: 6a 0a push $0xa <== NOT EXECUTED
11194d: e8 56 eb 00 00 call 1204a8 <putchar> <== NOT EXECUTED
111952: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rc = rtems_rfs_buffer_close (&fs);
111955: 83 ec 0c sub $0xc,%esp
111958: 8d 85 64 ff ff ff lea -0x9c(%ebp),%eax
11195e: 50 push %eax
11195f: e8 77 8e 00 00 call 11a7db <rtems_rfs_buffer_close>
111964: 89 c3 mov %eax,%ebx
if (rc > 0)
111966: 83 c4 10 add $0x10,%esp
111969: 85 c0 test %eax,%eax
11196b: 7e 15 jle 111982 <rtems_rfs_format+0x9f0><== ALWAYS TAKEN
{
printf ("rtems-rfs: format: buffer close failed: %d: %s\n",
11196d: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
111970: 50 push %eax <== NOT EXECUTED
111971: e8 4e f7 00 00 call 1210c4 <strerror> <== NOT EXECUTED
111976: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
111979: 50 push %eax <== NOT EXECUTED
11197a: 53 push %ebx <== NOT EXECUTED
11197b: 68 92 ff 12 00 push $0x12ff92 <== NOT EXECUTED
111980: eb a4 jmp 111926 <rtems_rfs_format+0x994><== NOT EXECUTED
int rc;
/*
* External API so returns -1.
*/
rc = rtems_rfs_fs_open (name, NULL,
111982: 83 ec 0c sub $0xc,%esp
111985: 8d 85 10 ff ff ff lea -0xf0(%ebp),%eax
11198b: 50 push %eax
11198c: 6a 00 push $0x0
11198e: 6a 06 push $0x6
111990: 6a 00 push $0x0
111992: ff 75 08 pushl 0x8(%ebp)
111995: e8 d5 ac 00 00 call 11c66f <rtems_rfs_fs_open>
RTEMS_RFS_FS_FORCE_OPEN | RTEMS_RFS_FS_NO_LOCAL_CACHE,
0, &fs);
if (rc < 0)
11199a: 83 c4 20 add $0x20,%esp
11199d: 85 c0 test %eax,%eax
11199f: 79 2e jns 1119cf <rtems_rfs_format+0xa3d><== ALWAYS TAKEN
{
printf ("rtems-rfs: format: file system open failed: %d: %s\n",
errno, strerror (errno));
1119a1: e8 26 d8 00 00 call 11f1cc <__errno> <== NOT EXECUTED
rc = rtems_rfs_fs_open (name, NULL,
RTEMS_RFS_FS_FORCE_OPEN | RTEMS_RFS_FS_NO_LOCAL_CACHE,
0, &fs);
if (rc < 0)
{
printf ("rtems-rfs: format: file system open failed: %d: %s\n",
1119a6: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1119a9: ff 30 pushl (%eax) <== NOT EXECUTED
1119ab: e8 14 f7 00 00 call 1210c4 <strerror> <== NOT EXECUTED
1119b0: 89 c3 mov %eax,%ebx <== NOT EXECUTED
errno, strerror (errno));
1119b2: e8 15 d8 00 00 call 11f1cc <__errno> <== NOT EXECUTED
rc = rtems_rfs_fs_open (name, NULL,
RTEMS_RFS_FS_FORCE_OPEN | RTEMS_RFS_FS_NO_LOCAL_CACHE,
0, &fs);
if (rc < 0)
{
printf ("rtems-rfs: format: file system open failed: %d: %s\n",
1119b7: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
1119ba: 53 push %ebx <== NOT EXECUTED
1119bb: ff 30 pushl (%eax) <== NOT EXECUTED
1119bd: 68 c2 ff 12 00 push $0x12ffc2 <== NOT EXECUTED
1119c2: e8 75 e9 00 00 call 12033c <printf> <== NOT EXECUTED
1119c7: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
1119ca: e9 bd 01 00 00 jmp 111b8c <rtems_rfs_format+0xbfa><== NOT EXECUTED
errno, strerror (errno));
return -1;
}
rc = rtems_rfs_inode_alloc (fs, RTEMS_RFS_ROOT_INO, &ino);
1119cf: 53 push %ebx
1119d0: 8d 85 14 ff ff ff lea -0xec(%ebp),%eax
1119d6: 50 push %eax
1119d7: 6a 01 push $0x1
1119d9: ff b5 10 ff ff ff pushl -0xf0(%ebp)
1119df: e8 98 07 00 00 call 11217c <rtems_rfs_inode_alloc>
1119e4: 89 c3 mov %eax,%ebx
if (rc > 0)
1119e6: 83 c4 10 add $0x10,%esp
1119e9: 85 c0 test %eax,%eax
1119eb: 7e 15 jle 111a02 <rtems_rfs_format+0xa70><== ALWAYS TAKEN
{
printf ("rtems-rfs: format: inode allocation failed: %d: %s\n",
1119ed: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1119f0: 50 push %eax <== NOT EXECUTED
1119f1: e8 ce f6 00 00 call 1210c4 <strerror> <== NOT EXECUTED
1119f6: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
1119f9: 50 push %eax <== NOT EXECUTED
1119fa: 53 push %ebx <== NOT EXECUTED
1119fb: 68 f6 ff 12 00 push $0x12fff6 <== NOT EXECUTED
111a00: eb 13 jmp 111a15 <rtems_rfs_format+0xa83><== NOT EXECUTED
rc, strerror (rc));
rtems_rfs_fs_close (fs);
return rc;
}
if (ino != RTEMS_RFS_ROOT_INO)
111a02: 8b 85 14 ff ff ff mov -0xec(%ebp),%eax
111a08: 83 f8 01 cmp $0x1,%eax
111a0b: 74 0f je 111a1c <rtems_rfs_format+0xa8a><== ALWAYS TAKEN
{
printf ("rtems-rfs: format: allocated inode not root ino: %" PRId32 "\n", ino);
111a0d: 51 push %ecx <== NOT EXECUTED
111a0e: 51 push %ecx <== NOT EXECUTED
111a0f: 50 push %eax <== NOT EXECUTED
111a10: 68 2a 00 13 00 push $0x13002a <== NOT EXECUTED
111a15: e8 22 e9 00 00 call 12033c <printf> <== NOT EXECUTED
111a1a: eb 4d jmp 111a69 <rtems_rfs_format+0xad7><== NOT EXECUTED
rtems_rfs_fs_close (fs);
return rc;
}
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
111a1c: 6a 01 push $0x1
111a1e: 8d b5 3c ff ff ff lea -0xc4(%ebp),%esi
111a24: 56 push %esi
111a25: 6a 01 push $0x1
111a27: ff b5 10 ff ff ff pushl -0xf0(%ebp)
111a2d: e8 f8 07 00 00 call 11222a <rtems_rfs_inode_open>
111a32: 89 c3 mov %eax,%ebx
if (rc > 0)
111a34: 83 c4 10 add $0x10,%esp
111a37: 85 c0 test %eax,%eax
111a39: 7e 3f jle 111a7a <rtems_rfs_format+0xae8><== ALWAYS TAKEN
{
printf ("rtems-rfs: format: inode open failed: %d: %s\n",
111a3b: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
111a3e: 50 push %eax <== NOT EXECUTED
111a3f: e8 80 f6 00 00 call 1210c4 <strerror> <== NOT EXECUTED
111a44: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
111a47: 50 push %eax <== NOT EXECUTED
111a48: 53 push %ebx <== NOT EXECUTED
111a49: 68 60 00 13 00 push $0x130060 <== NOT EXECUTED
111a4e: e8 e9 e8 00 00 call 12033c <printf> <== NOT EXECUTED
rc, strerror (rc));
rtems_rfs_group_bitmap_free (fs, true, ino);
111a53: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
111a56: ff b5 14 ff ff ff pushl -0xec(%ebp) <== NOT EXECUTED
111a5c: 6a 01 push $0x1 <== NOT EXECUTED
111a5e: ff b5 10 ff ff ff pushl -0xf0(%ebp) <== NOT EXECUTED
111a64: e8 72 05 00 00 call 111fdb <rtems_rfs_group_bitmap_free><== NOT EXECUTED
rtems_rfs_fs_close (fs);
111a69: 5a pop %edx <== NOT EXECUTED
111a6a: ff b5 10 ff ff ff pushl -0xf0(%ebp) <== NOT EXECUTED
111a70: e8 a2 b2 00 00 call 11cd17 <rtems_rfs_fs_close> <== NOT EXECUTED
111a75: e9 f3 00 00 00 jmp 111b6d <rtems_rfs_format+0xbdb><== NOT EXECUTED
return rc;
}
rc = rtems_rfs_inode_initialise (&inode, 0,
111a7a: 83 ec 0c sub $0xc,%esp
111a7d: 6a 00 push $0x0
111a7f: 6a 00 push $0x0
111a81: 68 c9 41 00 00 push $0x41c9
111a86: 6a 00 push $0x0
111a88: 56 push %esi
111a89: e8 f6 0a 00 00 call 112584 <rtems_rfs_inode_initialise>
111a8e: 89 c3 mov %eax,%ebx
(RTEMS_RFS_S_IFDIR | RTEMS_RFS_S_IRWXU |
RTEMS_RFS_S_IXGRP | RTEMS_RFS_S_IXOTH),
0, 0);
if (rc > 0)
111a90: 83 c4 20 add $0x20,%esp
111a93: 85 c0 test %eax,%eax
111a95: 7e 1b jle 111ab2 <rtems_rfs_format+0xb20><== ALWAYS TAKEN
printf ("rtems-rfs: format: inode initialise failed: %d: %s\n",
111a97: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
111a9a: 50 push %eax <== NOT EXECUTED
111a9b: e8 24 f6 00 00 call 1210c4 <strerror> <== NOT EXECUTED
111aa0: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
111aa3: 50 push %eax <== NOT EXECUTED
111aa4: 53 push %ebx <== NOT EXECUTED
111aa5: 68 8e 00 13 00 push $0x13008e <== NOT EXECUTED
111aaa: e8 8d e8 00 00 call 12033c <printf> <== NOT EXECUTED
111aaf: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rc, strerror (rc));
rc = rtems_rfs_dir_add_entry (fs, &inode, ".", 1, ino);
111ab2: 83 ec 0c sub $0xc,%esp
111ab5: ff b5 14 ff ff ff pushl -0xec(%ebp)
111abb: 6a 01 push $0x1
111abd: 68 61 cd 12 00 push $0x12cd61
111ac2: 8d 85 3c ff ff ff lea -0xc4(%ebp),%eax
111ac8: 50 push %eax
111ac9: ff b5 10 ff ff ff pushl -0xf0(%ebp)
111acf: e8 62 92 00 00 call 11ad36 <rtems_rfs_dir_add_entry>
111ad4: 89 c3 mov %eax,%ebx
if (rc > 0)
111ad6: 83 c4 20 add $0x20,%esp
111ad9: 85 c0 test %eax,%eax
111adb: 7e 1b jle 111af8 <rtems_rfs_format+0xb66><== ALWAYS TAKEN
printf ("rtems-rfs: format: directory add failed: %d: %s\n",
111add: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
111ae0: 50 push %eax <== NOT EXECUTED
111ae1: e8 de f5 00 00 call 1210c4 <strerror> <== NOT EXECUTED
111ae6: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
111ae9: 50 push %eax <== NOT EXECUTED
111aea: 53 push %ebx <== NOT EXECUTED
111aeb: 68 c2 00 13 00 push $0x1300c2 <== NOT EXECUTED
111af0: e8 47 e8 00 00 call 12033c <printf> <== NOT EXECUTED
111af5: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rc, strerror (rc));
rc = rtems_rfs_inode_close (fs, &inode);
111af8: 50 push %eax
111af9: 50 push %eax
111afa: 8d 85 3c ff ff ff lea -0xc4(%ebp),%eax
111b00: 50 push %eax
111b01: ff b5 10 ff ff ff pushl -0xf0(%ebp)
111b07: e8 9b 08 00 00 call 1123a7 <rtems_rfs_inode_close>
111b0c: 89 c3 mov %eax,%ebx
if (rc > 0)
111b0e: 83 c4 10 add $0x10,%esp
111b11: 85 c0 test %eax,%eax
111b13: 7e 1b jle 111b30 <rtems_rfs_format+0xb9e><== ALWAYS TAKEN
printf ("rtems-rfs: format: inode close failed: %d: %s\n",
111b15: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
111b18: 50 push %eax <== NOT EXECUTED
111b19: e8 a6 f5 00 00 call 1210c4 <strerror> <== NOT EXECUTED
111b1e: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
111b21: 50 push %eax <== NOT EXECUTED
111b22: 53 push %ebx <== NOT EXECUTED
111b23: 68 f3 00 13 00 push $0x1300f3 <== NOT EXECUTED
111b28: e8 0f e8 00 00 call 12033c <printf> <== NOT EXECUTED
111b2d: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rc, strerror (rc));
rc = rtems_rfs_fs_close (fs);
111b30: 83 ec 0c sub $0xc,%esp
111b33: ff b5 10 ff ff ff pushl -0xf0(%ebp)
111b39: e8 d9 b1 00 00 call 11cd17 <rtems_rfs_fs_close>
111b3e: 89 c3 mov %eax,%ebx
if (rc < 0)
111b40: 83 c4 10 add $0x10,%esp
111b43: 85 c0 test %eax,%eax
111b45: 79 29 jns 111b70 <rtems_rfs_format+0xbde><== ALWAYS TAKEN
printf ("rtems-rfs: format: file system close failed: %d: %s\n",
errno, strerror (errno));
111b47: e8 80 d6 00 00 call 11f1cc <__errno> <== NOT EXECUTED
printf ("rtems-rfs: format: inode close failed: %d: %s\n",
rc, strerror (rc));
rc = rtems_rfs_fs_close (fs);
if (rc < 0)
printf ("rtems-rfs: format: file system close failed: %d: %s\n",
111b4c: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
111b4f: ff 30 pushl (%eax) <== NOT EXECUTED
111b51: e8 6e f5 00 00 call 1210c4 <strerror> <== NOT EXECUTED
111b56: 89 c6 mov %eax,%esi <== NOT EXECUTED
errno, strerror (errno));
111b58: e8 6f d6 00 00 call 11f1cc <__errno> <== NOT EXECUTED
printf ("rtems-rfs: format: inode close failed: %d: %s\n",
rc, strerror (rc));
rc = rtems_rfs_fs_close (fs);
if (rc < 0)
printf ("rtems-rfs: format: file system close failed: %d: %s\n",
111b5d: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
111b60: 56 push %esi <== NOT EXECUTED
111b61: ff 30 pushl (%eax) <== NOT EXECUTED
111b63: 68 22 01 13 00 push $0x130122 <== NOT EXECUTED
111b68: e8 cf e7 00 00 call 12033c <printf> <== NOT EXECUTED
111b6d: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rc, strerror (rc));
return -1;
}
rc = rtems_rfs_write_root_dir (name);
if (rc > 0)
111b70: 85 db test %ebx,%ebx
111b72: 7e 18 jle 111b8c <rtems_rfs_format+0xbfa><== ALWAYS TAKEN
{
printf ("rtems-rfs: format: writing root dir failed: %d: %s\n",
111b74: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
111b77: 53 push %ebx <== NOT EXECUTED
111b78: e8 47 f5 00 00 call 1210c4 <strerror> <== NOT EXECUTED
111b7d: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
111b80: 50 push %eax <== NOT EXECUTED
111b81: 53 push %ebx <== NOT EXECUTED
111b82: 68 57 01 13 00 push $0x130157 <== NOT EXECUTED
111b87: e9 9a fd ff ff jmp 111926 <rtems_rfs_format+0x994><== NOT EXECUTED
rc, strerror (rc));
return -1;
}
return 0;
111b8c: 31 c0 xor %eax,%eax
111b8e: eb 1a jmp 111baa <rtems_rfs_format+0xc18>
/*
* Check the configuration data.
*/
if (!rtems_rfs_check_config (&fs, config))
return -1;
111b90: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
111b93: eb 15 jmp 111baa <rtems_rfs_format+0xc18><== NOT EXECUTED
fs->inodes_per_block) * fs->inodes_per_block;
if (fs->group_inodes > rtems_rfs_bitmap_numof_bits (fs->block_size))
fs->group_inodes = rtems_rfs_bitmap_numof_bits (fs->block_size);
fs->max_name_length = config->max_name_length;
111b95: 89 45 80 mov %eax,-0x80(%ebp) <== NOT EXECUTED
* Check the configuration data.
*/
if (!rtems_rfs_check_config (&fs, config))
return -1;
if (config->verbose)
111b98: 8b 45 0c mov 0xc(%ebp),%eax
111b9b: 80 78 15 00 cmpb $0x0,0x15(%eax)
111b9f: 0f 84 75 f7 ff ff je 11131a <rtems_rfs_format+0x388><== ALWAYS TAKEN
111ba5: e9 4e f6 ff ff jmp 1111f8 <rtems_rfs_format+0x266><== NOT EXECUTED
rc, strerror (rc));
return -1;
}
return 0;
}
111baa: 8d 65 f4 lea -0xc(%ebp),%esp
111bad: 5b pop %ebx
111bae: 5e pop %esi
111baf: 5f pop %edi
111bb0: 5d pop %ebp
111bb1: c3 ret
0011cd17 <rtems_rfs_fs_close>:
int
rtems_rfs_fs_close (rtems_rfs_file_system* fs)
{
11cd17: 55 push %ebp
11cd18: 89 e5 mov %esp,%ebp
11cd1a: 56 push %esi
11cd1b: 53 push %ebx
11cd1c: 8b 5d 08 mov 0x8(%ebp),%ebx
int group;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_CLOSE))
11cd1f: 50 push %eax
11cd20: 50 push %eax
11cd21: 6a 00 push $0x0
11cd23: 6a 02 push $0x2
11cd25: e8 72 6b ff ff call 11389c <rtems_rfs_trace>
11cd2a: 83 c4 10 add $0x10,%esp
11cd2d: 84 c0 test %al,%al
11cd2f: 74 10 je 11cd41 <rtems_rfs_fs_close+0x2a><== ALWAYS TAKEN
printf ("rtems-rfs: close\n");
11cd31: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11cd34: 68 48 1f 13 00 push $0x131f48 <== NOT EXECUTED
11cd39: e8 16 38 00 00 call 120554 <puts> <== NOT EXECUTED
11cd3e: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
return 0;
}
int
rtems_rfs_fs_close (rtems_rfs_file_system* fs)
{
11cd41: 31 f6 xor %esi,%esi
11cd43: eb 13 jmp 11cd58 <rtems_rfs_fs_close+0x41>
if (rtems_rfs_trace (RTEMS_RFS_TRACE_CLOSE))
printf ("rtems-rfs: close\n");
for (group = 0; group < fs->group_count; group++)
rtems_rfs_group_close (fs, &fs->groups[group]);
11cd45: 50 push %eax
11cd46: 50 push %eax
errno = 0;
return 0;
}
int
rtems_rfs_fs_close (rtems_rfs_file_system* fs)
11cd47: 6b c6 50 imul $0x50,%esi,%eax
if (rtems_rfs_trace (RTEMS_RFS_TRACE_CLOSE))
printf ("rtems-rfs: close\n");
for (group = 0; group < fs->group_count; group++)
rtems_rfs_group_close (fs, &fs->groups[group]);
11cd4a: 03 43 20 add 0x20(%ebx),%eax
11cd4d: 50 push %eax
11cd4e: 53 push %ebx
11cd4f: e8 59 50 ff ff call 111dad <rtems_rfs_group_close>
int group;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_CLOSE))
printf ("rtems-rfs: close\n");
for (group = 0; group < fs->group_count; group++)
11cd54: 46 inc %esi
11cd55: 83 c4 10 add $0x10,%esp
11cd58: 3b 73 24 cmp 0x24(%ebx),%esi
11cd5b: 7c e8 jl 11cd45 <rtems_rfs_fs_close+0x2e>
rtems_rfs_group_close (fs, &fs->groups[group]);
rtems_rfs_buffer_close (fs);
11cd5d: 83 ec 0c sub $0xc,%esp
11cd60: 53 push %ebx
11cd61: e8 75 da ff ff call 11a7db <rtems_rfs_buffer_close>
free (fs);
11cd66: 89 1c 24 mov %ebx,(%esp)
11cd69: e8 7a d1 fe ff call 109ee8 <free>
return 0;
}
11cd6e: 31 c0 xor %eax,%eax
11cd70: 8d 65 f8 lea -0x8(%ebp),%esp
11cd73: 5b pop %ebx
11cd74: 5e pop %esi
11cd75: 5d pop %ebp
11cd76: c3 ret
0011c66f <rtems_rfs_fs_open>:
rtems_rfs_fs_open (const char* name,
void* user,
uint32_t flags,
uint32_t max_held_buffers,
rtems_rfs_file_system** fs)
{
11c66f: 55 push %ebp
11c670: 89 e5 mov %esp,%ebp
11c672: 57 push %edi
11c673: 56 push %esi
11c674: 53 push %ebx
11c675: 83 ec 74 sub $0x74,%esp
11c678: 8b 5d 08 mov 0x8(%ebp),%ebx
11c67b: 8b 75 18 mov 0x18(%ebp),%esi
#endif
rtems_rfs_inode_handle inode;
uint16_t mode;
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
11c67e: 6a 00 push $0x0
11c680: 6a 01 push $0x1
11c682: e8 15 72 ff ff call 11389c <rtems_rfs_trace>
11c687: 83 c4 10 add $0x10,%esp
11c68a: 84 c0 test %al,%al
11c68c: 74 10 je 11c69e <rtems_rfs_fs_open+0x2f><== ALWAYS TAKEN
printf ("rtems-rfs: open: %s\n", name);
11c68e: 57 push %edi <== NOT EXECUTED
11c68f: 57 push %edi <== NOT EXECUTED
11c690: 53 push %ebx <== NOT EXECUTED
11c691: 68 41 1c 13 00 push $0x131c41 <== NOT EXECUTED
11c696: e8 a1 3c 00 00 call 12033c <printf> <== NOT EXECUTED
11c69b: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
*fs = malloc (sizeof (rtems_rfs_file_system));
11c69e: 83 ec 0c sub $0xc,%esp
11c6a1: 68 84 00 00 00 push $0x84
11c6a6: e8 55 dd fe ff call 10a400 <malloc>
11c6ab: 89 c2 mov %eax,%edx
11c6ad: 89 06 mov %eax,(%esi)
if (!*fs)
11c6af: 83 c4 10 add $0x10,%esp
11c6b2: 85 c0 test %eax,%eax
11c6b4: 75 32 jne 11c6e8 <rtems_rfs_fs_open+0x79><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
11c6b6: 53 push %ebx <== NOT EXECUTED
11c6b7: 53 push %ebx <== NOT EXECUTED
11c6b8: 6a 00 push $0x0 <== NOT EXECUTED
11c6ba: 6a 01 push $0x1 <== NOT EXECUTED
11c6bc: e8 db 71 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11c6c1: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11c6c4: 84 c0 test %al,%al <== NOT EXECUTED
11c6c6: 74 10 je 11c6d8 <rtems_rfs_fs_open+0x69><== NOT EXECUTED
printf ("rtems-rfs: open: no memory for file system data\n");
11c6c8: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11c6cb: 68 56 1c 13 00 push $0x131c56 <== NOT EXECUTED
11c6d0: e8 7f 3e 00 00 call 120554 <puts> <== NOT EXECUTED
11c6d5: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
errno = ENOMEM;
11c6d8: e8 ef 2a 00 00 call 11f1cc <__errno> <== NOT EXECUTED
11c6dd: c7 00 0c 00 00 00 movl $0xc,(%eax) <== NOT EXECUTED
11c6e3: e9 9f 00 00 00 jmp 11c787 <rtems_rfs_fs_open+0x118><== NOT EXECUTED
return -1;
}
memset (*fs, 0, sizeof (rtems_rfs_file_system));
11c6e8: b9 21 00 00 00 mov $0x21,%ecx
11c6ed: 31 c0 xor %eax,%eax
11c6ef: 89 d7 mov %edx,%edi
11c6f1: f3 ab rep stos %eax,%es:(%edi)
(*fs)->user = user;
11c6f3: 8b 45 0c mov 0xc(%ebp),%eax
11c6f6: 89 82 80 00 00 00 mov %eax,0x80(%edx)
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
11c6fc: 8d 42 44 lea 0x44(%edx),%eax
11c6ff: 8d 4a 48 lea 0x48(%edx),%ecx
11c702: 89 4a 44 mov %ecx,0x44(%edx)
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
11c705: 89 42 4c mov %eax,0x4c(%edx)
Chain_Node *tail = _Chain_Tail( the_chain );
11c708: 8d 42 54 lea 0x54(%edx),%eax
11c70b: 8d 4a 58 lea 0x58(%edx),%ecx
11c70e: 89 4a 54 mov %ecx,0x54(%edx)
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
11c711: 89 42 5c mov %eax,0x5c(%edx)
Chain_Node *tail = _Chain_Tail( the_chain );
11c714: 8d 42 64 lea 0x64(%edx),%eax
11c717: 8d 4a 68 lea 0x68(%edx),%ecx
11c71a: 89 4a 64 mov %ecx,0x64(%edx)
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
11c71d: 89 42 6c mov %eax,0x6c(%edx)
Chain_Node *tail = _Chain_Tail( the_chain );
11c720: 8d 42 74 lea 0x74(%edx),%eax
11c723: 8d 4a 78 lea 0x78(%edx),%ecx
11c726: 89 4a 74 mov %ecx,0x74(%edx)
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
11c729: 89 42 7c mov %eax,0x7c(%edx)
rtems_chain_initialize_empty (&(*fs)->buffers);
rtems_chain_initialize_empty (&(*fs)->release);
rtems_chain_initialize_empty (&(*fs)->release_modified);
rtems_chain_initialize_empty (&(*fs)->file_shares);
(*fs)->max_held_buffers = max_held_buffers;
11c72c: 8b 45 14 mov 0x14(%ebp),%eax
11c72f: 89 42 40 mov %eax,0x40(%edx)
(*fs)->buffers_count = 0;
(*fs)->release_count = 0;
(*fs)->release_modified_count = 0;
(*fs)->flags = flags;
11c732: 8b 45 10 mov 0x10(%ebp),%eax
11c735: 89 02 mov %eax,(%edx)
#endif
/*
* Open the buffer interface.
*/
rc = rtems_rfs_buffer_open (name, *fs);
11c737: 51 push %ecx
11c738: 51 push %ecx
11c739: 52 push %edx
11c73a: 53 push %ebx
11c73b: e8 85 dd ff ff call 11a4c5 <rtems_rfs_buffer_open>
11c740: 89 c3 mov %eax,%ebx
if (rc > 0)
11c742: 83 c4 10 add $0x10,%esp
11c745: 85 c0 test %eax,%eax
11c747: 7e 46 jle 11c78f <rtems_rfs_fs_open+0x120><== ALWAYS TAKEN
{
free (*fs);
11c749: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11c74c: ff 36 pushl (%esi) <== NOT EXECUTED
11c74e: e8 95 d7 fe ff call 109ee8 <free> <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
11c753: 58 pop %eax <== NOT EXECUTED
11c754: 5a pop %edx <== NOT EXECUTED
11c755: 6a 00 push $0x0 <== NOT EXECUTED
11c757: 6a 01 push $0x1 <== NOT EXECUTED
11c759: e8 3e 71 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11c75e: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11c761: 84 c0 test %al,%al <== NOT EXECUTED
11c763: 74 1b je 11c780 <rtems_rfs_fs_open+0x111><== NOT EXECUTED
printf ("rtems-rfs: open: buffer open failed: %d: %s\n",
11c765: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11c768: 53 push %ebx <== NOT EXECUTED
11c769: e8 56 49 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11c76e: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11c771: 50 push %eax <== NOT EXECUTED
11c772: 53 push %ebx <== NOT EXECUTED
11c773: 68 86 1c 13 00 push $0x131c86 <== NOT EXECUTED
11c778: e8 bf 3b 00 00 call 12033c <printf> <== NOT EXECUTED
11c77d: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rc, strerror (rc));
errno = rc;
11c780: e8 47 2a 00 00 call 11f1cc <__errno> <== NOT EXECUTED
11c785: 89 18 mov %ebx,(%eax) <== NOT EXECUTED
return -1;
11c787: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
11c78a: e9 80 05 00 00 jmp 11cd0f <rtems_rfs_fs_open+0x6a0><== NOT EXECUTED
}
rc = rtems_rfs_fs_read_superblock (*fs);
11c78f: 8b 3e mov (%esi),%edi
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
11c791: c6 45 b4 00 movb $0x0,-0x4c(%ebp)
handle->bnum = 0;
11c795: c7 45 b8 00 00 00 00 movl $0x0,-0x48(%ebp)
handle->buffer = NULL;
11c79c: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp)
printf ("rtems-rfs: read-superblock: handle open failed: %d: %s\n",
rc, strerror (rc));
return rc;
}
rc = rtems_rfs_buffer_handle_request (fs, &handle, 0, true);
11c7a3: 6a 01 push $0x1
11c7a5: 6a 00 push $0x0
11c7a7: 8d 45 b4 lea -0x4c(%ebp),%eax
11c7aa: 50 push %eax
11c7ab: 57 push %edi
11c7ac: e8 f9 da ff ff call 11a2aa <rtems_rfs_buffer_handle_request>
11c7b1: 89 c3 mov %eax,%ebx
if (rc > 0)
11c7b3: 83 c4 10 add $0x10,%esp
11c7b6: 85 c0 test %eax,%eax
11c7b8: 7e 2e jle 11c7e8 <rtems_rfs_fs_open+0x179><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
11c7ba: 50 push %eax <== NOT EXECUTED
11c7bb: 50 push %eax <== NOT EXECUTED
11c7bc: 6a 00 push $0x0 <== NOT EXECUTED
11c7be: 6a 01 push $0x1 <== NOT EXECUTED
11c7c0: e8 d7 70 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11c7c5: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11c7c8: 84 c0 test %al,%al <== NOT EXECUTED
11c7ca: 0f 84 cc 03 00 00 je 11cb9c <rtems_rfs_fs_open+0x52d><== NOT EXECUTED
printf ("rtems-rfs: read-superblock: request failed%d: %s\n",
11c7d0: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11c7d3: 53 push %ebx <== NOT EXECUTED
11c7d4: e8 eb 48 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11c7d9: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11c7dc: 50 push %eax <== NOT EXECUTED
11c7dd: 53 push %ebx <== NOT EXECUTED
11c7de: 68 b3 1c 13 00 push $0x131cb3 <== NOT EXECUTED
11c7e3: e9 bf 02 00 00 jmp 11caa7 <rtems_rfs_fs_open+0x438><== NOT EXECUTED
rc, strerror (rc));
return rc;
}
sb = rtems_rfs_buffer_data (&handle);
11c7e8: 8b 45 bc mov -0x44(%ebp),%eax
11c7eb: 8b 58 1c mov 0x1c(%eax),%ebx
#define read_sb(_o) rtems_rfs_read_u32 (sb + (_o))
if (read_sb (RTEMS_RFS_SB_OFFSET_MAGIC) != RTEMS_RFS_SB_MAGIC)
11c7ee: 0f b6 03 movzbl (%ebx),%eax
11c7f1: c1 e0 18 shl $0x18,%eax
11c7f4: 0f b6 53 01 movzbl 0x1(%ebx),%edx
11c7f8: c1 e2 10 shl $0x10,%edx
11c7fb: 09 d0 or %edx,%eax
11c7fd: 0f b6 53 03 movzbl 0x3(%ebx),%edx
11c801: 09 d0 or %edx,%eax
11c803: 0f b6 53 02 movzbl 0x2(%ebx),%edx
11c807: c1 e2 08 shl $0x8,%edx
11c80a: 09 d0 or %edx,%eax
11c80c: 3d 01 20 09 28 cmp $0x28092001,%eax
11c811: 74 23 je 11c836 <rtems_rfs_fs_open+0x1c7><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
11c813: 50 push %eax <== NOT EXECUTED
11c814: 50 push %eax <== NOT EXECUTED
11c815: 6a 00 push $0x0 <== NOT EXECUTED
11c817: 6a 01 push $0x1 <== NOT EXECUTED
11c819: e8 7e 70 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11c81e: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11c821: 84 c0 test %al,%al <== NOT EXECUTED
11c823: 0f 84 05 01 00 00 je 11c92e <rtems_rfs_fs_open+0x2bf><== NOT EXECUTED
printf ("rtems-rfs: read-superblock: invalid superblock, bad magic\n");
11c829: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11c82c: 68 e5 1c 13 00 push $0x131ce5 <== NOT EXECUTED
11c831: e9 88 00 00 00 jmp 11c8be <rtems_rfs_fs_open+0x24f><== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &handle);
return EIO;
}
fs->blocks = read_sb (RTEMS_RFS_SB_OFFSET_BLOCKS);
11c836: 0f b6 43 0c movzbl 0xc(%ebx),%eax
11c83a: c1 e0 18 shl $0x18,%eax
11c83d: 0f b6 53 0d movzbl 0xd(%ebx),%edx
11c841: c1 e2 10 shl $0x10,%edx
11c844: 09 d0 or %edx,%eax
11c846: 0f b6 53 0f movzbl 0xf(%ebx),%edx
11c84a: 09 d0 or %edx,%eax
11c84c: 0f b6 53 0e movzbl 0xe(%ebx),%edx
11c850: c1 e2 08 shl $0x8,%edx
11c853: 09 d0 or %edx,%eax
11c855: 89 45 98 mov %eax,-0x68(%ebp)
11c858: 89 47 04 mov %eax,0x4(%edi)
fs->block_size = read_sb (RTEMS_RFS_SB_OFFSET_BLOCK_SIZE);
11c85b: 0f b6 43 08 movzbl 0x8(%ebx),%eax
11c85f: c1 e0 18 shl $0x18,%eax
11c862: 0f b6 53 09 movzbl 0x9(%ebx),%edx
11c866: c1 e2 10 shl $0x10,%edx
11c869: 09 d0 or %edx,%eax
11c86b: 0f b6 53 0b movzbl 0xb(%ebx),%edx
11c86f: 09 d0 or %edx,%eax
11c871: 0f b6 53 0a movzbl 0xa(%ebx),%edx
11c875: c1 e2 08 shl $0x8,%edx
11c878: 09 d0 or %edx,%eax
11c87a: 89 45 a4 mov %eax,-0x5c(%ebp)
11c87d: 89 47 08 mov %eax,0x8(%edi)
}
uint64_t
rtems_rfs_fs_media_size (rtems_rfs_file_system* fs)
{
uint64_t media_blocks = (uint64_t) rtems_rfs_fs_media_blocks (fs);
11c880: 8b 4f 10 mov 0x10(%edi),%ecx
uint64_t
rtems_rfs_fs_size (rtems_rfs_file_system* fs)
{
uint64_t blocks = rtems_rfs_fs_blocks (fs);
uint64_t block_size = rtems_rfs_fs_block_size (fs);
return blocks * block_size;
11c883: f7 65 98 mull -0x68(%ebp)
11c886: 89 45 98 mov %eax,-0x68(%ebp)
11c889: 89 55 9c mov %edx,-0x64(%ebp)
uint64_t
rtems_rfs_fs_media_size (rtems_rfs_file_system* fs)
{
uint64_t media_blocks = (uint64_t) rtems_rfs_fs_media_blocks (fs);
uint64_t media_block_size = (uint64_t) rtems_rfs_fs_media_block_size (fs);
return media_blocks * media_block_size;
11c88c: 8b 41 20 mov 0x20(%ecx),%eax
11c88f: f7 61 1c mull 0x1c(%ecx)
11c892: 89 45 88 mov %eax,-0x78(%ebp)
11c895: 89 55 8c mov %edx,-0x74(%ebp)
}
fs->blocks = read_sb (RTEMS_RFS_SB_OFFSET_BLOCKS);
fs->block_size = read_sb (RTEMS_RFS_SB_OFFSET_BLOCK_SIZE);
if (rtems_rfs_fs_size(fs) > rtems_rfs_fs_media_size (fs))
11c898: 39 55 9c cmp %edx,-0x64(%ebp)
11c89b: 72 28 jb 11c8c5 <rtems_rfs_fs_open+0x256><== NEVER TAKEN
11c89d: 77 05 ja 11c8a4 <rtems_rfs_fs_open+0x235><== NEVER TAKEN
11c89f: 39 45 98 cmp %eax,-0x68(%ebp)
11c8a2: 76 21 jbe 11c8c5 <rtems_rfs_fs_open+0x256><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
11c8a4: 53 push %ebx <== NOT EXECUTED
11c8a5: 53 push %ebx <== NOT EXECUTED
11c8a6: 6a 00 push $0x0 <== NOT EXECUTED
11c8a8: 6a 01 push $0x1 <== NOT EXECUTED
11c8aa: e8 ed 6f ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11c8af: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11c8b2: 84 c0 test %al,%al <== NOT EXECUTED
11c8b4: 74 78 je 11c92e <rtems_rfs_fs_open+0x2bf><== NOT EXECUTED
printf ("rtems-rfs: read-superblock: invalid superblock block/size count\n");
11c8b6: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11c8b9: 68 1f 1d 13 00 push $0x131d1f <== NOT EXECUTED
11c8be: e8 91 3c 00 00 call 120554 <puts> <== NOT EXECUTED
11c8c3: eb 66 jmp 11c92b <rtems_rfs_fs_open+0x2bc><== NOT EXECUTED
read_sb (RTEMS_RFS_SB_OFFSET_VERSION), RTEMS_RFS_VERSION_MASK);
rtems_rfs_buffer_handle_close (fs, &handle);
return EIO;
}
if (read_sb (RTEMS_RFS_SB_OFFSET_INODE_SIZE) != RTEMS_RFS_INODE_SIZE)
11c8c5: 0f b6 53 24 movzbl 0x24(%ebx),%edx
11c8c9: c1 e2 18 shl $0x18,%edx
11c8cc: 0f b6 43 25 movzbl 0x25(%ebx),%eax
11c8d0: c1 e0 10 shl $0x10,%eax
11c8d3: 09 c2 or %eax,%edx
11c8d5: 0f b6 43 27 movzbl 0x27(%ebx),%eax
11c8d9: 09 c2 or %eax,%edx
11c8db: 0f b6 43 26 movzbl 0x26(%ebx),%eax
11c8df: c1 e0 08 shl $0x8,%eax
11c8e2: 09 c2 or %eax,%edx
11c8e4: 89 55 98 mov %edx,-0x68(%ebp)
11c8e7: 83 fa 38 cmp $0x38,%edx
11c8ea: 74 56 je 11c942 <rtems_rfs_fs_open+0x2d3><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
11c8ec: 51 push %ecx <== NOT EXECUTED
11c8ed: 51 push %ecx <== NOT EXECUTED
11c8ee: 6a 00 push $0x0 <== NOT EXECUTED
11c8f0: 6a 01 push $0x1 <== NOT EXECUTED
11c8f2: e8 a5 6f ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11c8f7: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11c8fa: 84 c0 test %al,%al <== NOT EXECUTED
11c8fc: 74 30 je 11c92e <rtems_rfs_fs_open+0x2bf><== NOT EXECUTED
printf ("rtems-rfs: read-superblock: inode size mismatch: fs:%" PRId32 " target:%" PRId32 "\n",
11c8fe: 52 push %edx <== NOT EXECUTED
11c8ff: 6a 00 push $0x0 <== NOT EXECUTED
read_sb (RTEMS_RFS_SB_OFFSET_VERSION), RTEMS_RFS_VERSION_MASK);
11c901: 0f b6 43 04 movzbl 0x4(%ebx),%eax <== NOT EXECUTED
11c905: c1 e0 18 shl $0x18,%eax <== NOT EXECUTED
11c908: 0f b6 53 05 movzbl 0x5(%ebx),%edx <== NOT EXECUTED
11c90c: c1 e2 10 shl $0x10,%edx <== NOT EXECUTED
11c90f: 09 d0 or %edx,%eax <== NOT EXECUTED
11c911: 0f b6 53 07 movzbl 0x7(%ebx),%edx <== NOT EXECUTED
11c915: 09 d0 or %edx,%eax <== NOT EXECUTED
11c917: 0f b6 53 06 movzbl 0x6(%ebx),%edx <== NOT EXECUTED
11c91b: c1 e2 08 shl $0x8,%edx <== NOT EXECUTED
}
if (read_sb (RTEMS_RFS_SB_OFFSET_INODE_SIZE) != RTEMS_RFS_INODE_SIZE)
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
printf ("rtems-rfs: read-superblock: inode size mismatch: fs:%" PRId32 " target:%" PRId32 "\n",
11c91e: 09 d0 or %edx,%eax <== NOT EXECUTED
11c920: 50 push %eax <== NOT EXECUTED
11c921: 68 5f 1d 13 00 push $0x131d5f <== NOT EXECUTED
11c926: e8 11 3a 00 00 call 12033c <printf> <== NOT EXECUTED
11c92b: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
read_sb (RTEMS_RFS_SB_OFFSET_VERSION), RTEMS_RFS_VERSION_MASK);
rtems_rfs_buffer_handle_close (fs, &handle);
11c92e: 8d 55 b4 lea -0x4c(%ebp),%edx <== NOT EXECUTED
11c931: 89 f8 mov %edi,%eax <== NOT EXECUTED
11c933: e8 f0 fc ff ff call 11c628 <rtems_rfs_buffer_handle_close><== NOT EXECUTED
return EIO;
11c938: bb 05 00 00 00 mov $0x5,%ebx <== NOT EXECUTED
11c93d: e9 5e 02 00 00 jmp 11cba0 <rtems_rfs_fs_open+0x531><== NOT EXECUTED
}
fs->bad_blocks = read_sb (RTEMS_RFS_SB_OFFSET_BAD_BLOCKS);
11c942: 0f b6 43 10 movzbl 0x10(%ebx),%eax
11c946: c1 e0 18 shl $0x18,%eax
11c949: 0f b6 53 11 movzbl 0x11(%ebx),%edx
11c94d: c1 e2 10 shl $0x10,%edx
11c950: 09 d0 or %edx,%eax
11c952: 0f b6 53 13 movzbl 0x13(%ebx),%edx
11c956: 09 d0 or %edx,%eax
11c958: 0f b6 53 12 movzbl 0x12(%ebx),%edx
11c95c: c1 e2 08 shl $0x8,%edx
11c95f: 09 d0 or %edx,%eax
11c961: 89 47 18 mov %eax,0x18(%edi)
fs->max_name_length = read_sb (RTEMS_RFS_SB_OFFSET_MAX_NAME_LENGTH);
11c964: 0f b6 43 14 movzbl 0x14(%ebx),%eax
11c968: c1 e0 18 shl $0x18,%eax
11c96b: 0f b6 53 15 movzbl 0x15(%ebx),%edx
11c96f: c1 e2 10 shl $0x10,%edx
11c972: 09 d0 or %edx,%eax
11c974: 0f b6 53 17 movzbl 0x17(%ebx),%edx
11c978: 09 d0 or %edx,%eax
11c97a: 0f b6 53 16 movzbl 0x16(%ebx),%edx
11c97e: c1 e2 08 shl $0x8,%edx
11c981: 09 d0 or %edx,%eax
11c983: 89 47 1c mov %eax,0x1c(%edi)
fs->group_count = read_sb (RTEMS_RFS_SB_OFFSET_GROUPS);
11c986: 0f b6 43 18 movzbl 0x18(%ebx),%eax
11c98a: c1 e0 18 shl $0x18,%eax
11c98d: 89 45 a0 mov %eax,-0x60(%ebp)
11c990: 0f b6 43 19 movzbl 0x19(%ebx),%eax
11c994: c1 e0 10 shl $0x10,%eax
11c997: 09 45 a0 or %eax,-0x60(%ebp)
11c99a: 0f b6 43 1b movzbl 0x1b(%ebx),%eax
11c99e: 09 45 a0 or %eax,-0x60(%ebp)
11c9a1: 0f b6 43 1a movzbl 0x1a(%ebx),%eax
11c9a5: c1 e0 08 shl $0x8,%eax
11c9a8: 09 45 a0 or %eax,-0x60(%ebp)
11c9ab: 8b 55 a0 mov -0x60(%ebp),%edx
11c9ae: 89 57 24 mov %edx,0x24(%edi)
fs->group_blocks = read_sb (RTEMS_RFS_SB_OFFSET_GROUP_BLOCKS);
11c9b1: 0f b6 4b 1c movzbl 0x1c(%ebx),%ecx
11c9b5: c1 e1 18 shl $0x18,%ecx
11c9b8: 0f b6 43 1d movzbl 0x1d(%ebx),%eax
11c9bc: c1 e0 10 shl $0x10,%eax
11c9bf: 09 c1 or %eax,%ecx
11c9c1: 0f b6 43 1f movzbl 0x1f(%ebx),%eax
11c9c5: 09 c1 or %eax,%ecx
11c9c7: 0f b6 43 1e movzbl 0x1e(%ebx),%eax
11c9cb: c1 e0 08 shl $0x8,%eax
11c9ce: 09 c1 or %eax,%ecx
11c9d0: 89 4f 28 mov %ecx,0x28(%edi)
fs->group_inodes = read_sb (RTEMS_RFS_SB_OFFSET_GROUP_INODES);
11c9d3: 0f b6 43 20 movzbl 0x20(%ebx),%eax
11c9d7: c1 e0 18 shl $0x18,%eax
11c9da: 0f b6 53 21 movzbl 0x21(%ebx),%edx
11c9de: c1 e2 10 shl $0x10,%edx
11c9e1: 09 d0 or %edx,%eax
11c9e3: 0f b6 53 23 movzbl 0x23(%ebx),%edx
11c9e7: 09 d0 or %edx,%eax
11c9e9: 0f b6 53 22 movzbl 0x22(%ebx),%edx
11c9ed: c1 e2 08 shl $0x8,%edx
11c9f0: 09 d0 or %edx,%eax
11c9f2: 89 47 2c mov %eax,0x2c(%edi)
fs->blocks_per_block =
rtems_rfs_fs_block_size (fs) / sizeof (rtems_rfs_inode_block);
11c9f5: 8b 55 a4 mov -0x5c(%ebp),%edx
11c9f8: c1 ea 02 shr $0x2,%edx
fs->max_name_length = read_sb (RTEMS_RFS_SB_OFFSET_MAX_NAME_LENGTH);
fs->group_count = read_sb (RTEMS_RFS_SB_OFFSET_GROUPS);
fs->group_blocks = read_sb (RTEMS_RFS_SB_OFFSET_GROUP_BLOCKS);
fs->group_inodes = read_sb (RTEMS_RFS_SB_OFFSET_GROUP_INODES);
fs->blocks_per_block =
11c9fb: 89 57 34 mov %edx,0x34(%edi)
rtems_rfs_fs_block_size (fs) / sizeof (rtems_rfs_inode_block);
fs->block_map_singly_blocks =
fs->blocks_per_block * RTEMS_RFS_INODE_BLOCKS;
11c9fe: 8d 1c 92 lea (%edx,%edx,4),%ebx
fs->group_inodes = read_sb (RTEMS_RFS_SB_OFFSET_GROUP_INODES);
fs->blocks_per_block =
rtems_rfs_fs_block_size (fs) / sizeof (rtems_rfs_inode_block);
fs->block_map_singly_blocks =
11ca01: 89 5f 38 mov %ebx,0x38(%edi)
fs->blocks_per_block * RTEMS_RFS_INODE_BLOCKS;
fs->block_map_doubly_blocks =
fs->blocks_per_block * fs->blocks_per_block * RTEMS_RFS_INODE_BLOCKS;
11ca04: 0f af d2 imul %edx,%edx
11ca07: 8d 14 92 lea (%edx,%edx,4),%edx
fs->blocks_per_block =
rtems_rfs_fs_block_size (fs) / sizeof (rtems_rfs_inode_block);
fs->block_map_singly_blocks =
fs->blocks_per_block * RTEMS_RFS_INODE_BLOCKS;
fs->block_map_doubly_blocks =
11ca0a: 89 57 3c mov %edx,0x3c(%edi)
fs->blocks_per_block * fs->blocks_per_block * RTEMS_RFS_INODE_BLOCKS;
fs->inodes = fs->group_count * fs->group_inodes;
11ca0d: 0f af 45 a0 imul -0x60(%ebp),%eax
11ca11: 89 47 14 mov %eax,0x14(%edi)
fs->inodes_per_block = fs->block_size / RTEMS_RFS_INODE_SIZE;
11ca14: 8b 45 a4 mov -0x5c(%ebp),%eax
11ca17: 31 d2 xor %edx,%edx
11ca19: f7 75 98 divl -0x68(%ebp)
11ca1c: 89 47 30 mov %eax,0x30(%edi)
if (fs->group_blocks >
rtems_rfs_bitmap_numof_bits (rtems_rfs_fs_block_size (fs)))
11ca1f: 8b 45 a4 mov -0x5c(%ebp),%eax
11ca22: c1 e0 03 shl $0x3,%eax
{
rtems_rfs_buffer_handle_close (fs, &handle);
11ca25: 8d 55 b4 lea -0x4c(%ebp),%edx
fs->inodes = fs->group_count * fs->group_inodes;
fs->inodes_per_block = fs->block_size / RTEMS_RFS_INODE_SIZE;
if (fs->group_blocks >
11ca28: 39 c1 cmp %eax,%ecx
rtems_rfs_bitmap_numof_bits (rtems_rfs_fs_block_size (fs)))
{
rtems_rfs_buffer_handle_close (fs, &handle);
11ca2a: 89 f8 mov %edi,%eax
fs->inodes = fs->group_count * fs->group_inodes;
fs->inodes_per_block = fs->block_size / RTEMS_RFS_INODE_SIZE;
if (fs->group_blocks >
11ca2c: 76 2d jbe 11ca5b <rtems_rfs_fs_open+0x3ec><== ALWAYS TAKEN
rtems_rfs_bitmap_numof_bits (rtems_rfs_fs_block_size (fs)))
{
rtems_rfs_buffer_handle_close (fs, &handle);
11ca2e: e8 f5 fb ff ff call 11c628 <rtems_rfs_buffer_handle_close><== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
11ca33: 50 push %eax <== NOT EXECUTED
11ca34: 50 push %eax <== NOT EXECUTED
11ca35: 6a 00 push $0x0 <== NOT EXECUTED
11ca37: 6a 01 push $0x1 <== NOT EXECUTED
11ca39: e8 5e 6e ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11ca3e: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
printf ("rtems-rfs: read-superblock: groups blocks larger than block bits\n");
return EIO;
11ca41: bb 05 00 00 00 mov $0x5,%ebx <== NOT EXECUTED
if (fs->group_blocks >
rtems_rfs_bitmap_numof_bits (rtems_rfs_fs_block_size (fs)))
{
rtems_rfs_buffer_handle_close (fs, &handle);
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
11ca46: 84 c0 test %al,%al <== NOT EXECUTED
11ca48: 0f 84 52 01 00 00 je 11cba0 <rtems_rfs_fs_open+0x531><== NOT EXECUTED
printf ("rtems-rfs: read-superblock: groups blocks larger than block bits\n");
11ca4e: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11ca51: 68 a3 1d 13 00 push $0x131da3 <== NOT EXECUTED
11ca56: e9 a2 00 00 00 jmp 11cafd <rtems_rfs_fs_open+0x48e><== NOT EXECUTED
return EIO;
}
rtems_rfs_buffer_handle_close (fs, &handle);
11ca5b: e8 c8 fb ff ff call 11c628 <rtems_rfs_buffer_handle_close>
/*
* Change the block size to the value in the superblock.
*/
rc = rtems_rfs_buffer_setblksize (fs, rtems_rfs_fs_block_size (fs));
11ca60: 50 push %eax
11ca61: 50 push %eax
11ca62: ff 77 08 pushl 0x8(%edi)
11ca65: 57 push %edi
11ca66: e8 97 dc ff ff call 11a702 <rtems_rfs_buffer_setblksize>
11ca6b: 89 c3 mov %eax,%ebx
if (rc > 0)
11ca6d: 83 c4 10 add $0x10,%esp
11ca70: 85 c0 test %eax,%eax
11ca72: 7e 40 jle 11cab4 <rtems_rfs_fs_open+0x445><== ALWAYS TAKEN
{
rtems_rfs_buffer_handle_close (fs, &handle);
11ca74: 8d 55 b4 lea -0x4c(%ebp),%edx <== NOT EXECUTED
11ca77: 89 f8 mov %edi,%eax <== NOT EXECUTED
11ca79: e8 aa fb ff ff call 11c628 <rtems_rfs_buffer_handle_close><== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
11ca7e: 50 push %eax <== NOT EXECUTED
11ca7f: 50 push %eax <== NOT EXECUTED
11ca80: 6a 00 push $0x0 <== NOT EXECUTED
11ca82: 6a 01 push $0x1 <== NOT EXECUTED
11ca84: e8 13 6e ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11ca89: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11ca8c: 84 c0 test %al,%al <== NOT EXECUTED
11ca8e: 0f 84 08 01 00 00 je 11cb9c <rtems_rfs_fs_open+0x52d><== NOT EXECUTED
printf ("rtems-rfs: read-superblock: invalid superblock block size%d: %s\n",
11ca94: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11ca97: 53 push %ebx <== NOT EXECUTED
11ca98: e8 27 46 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11ca9d: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11caa0: 50 push %eax <== NOT EXECUTED
11caa1: 53 push %ebx <== NOT EXECUTED
11caa2: 68 e4 1d 13 00 push $0x131de4 <== NOT EXECUTED
11caa7: e8 90 38 00 00 call 12033c <printf> <== NOT EXECUTED
11caac: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11caaf: e9 e8 00 00 00 jmp 11cb9c <rtems_rfs_fs_open+0x52d><== NOT EXECUTED
rc, strerror (rc));
return rc;
}
fs->groups = calloc (fs->group_count, sizeof (rtems_rfs_group));
11cab4: 50 push %eax
11cab5: 50 push %eax
11cab6: 6a 50 push $0x50
11cab8: ff 77 24 pushl 0x24(%edi)
11cabb: e8 1c d1 fe ff call 109bdc <calloc>
11cac0: 89 47 20 mov %eax,0x20(%edi)
if (!fs->groups)
11cac3: 83 c4 10 add $0x10,%esp
11cac6: 31 d2 xor %edx,%edx
11cac8: 85 c0 test %eax,%eax
11caca: 0f 85 c1 00 00 00 jne 11cb91 <rtems_rfs_fs_open+0x522><== ALWAYS TAKEN
{
rtems_rfs_buffer_handle_close (fs, &handle);
11cad0: 8d 55 b4 lea -0x4c(%ebp),%edx <== NOT EXECUTED
11cad3: 89 f8 mov %edi,%eax <== NOT EXECUTED
11cad5: e8 4e fb ff ff call 11c628 <rtems_rfs_buffer_handle_close><== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
11cada: 50 push %eax <== NOT EXECUTED
11cadb: 50 push %eax <== NOT EXECUTED
11cadc: 6a 00 push $0x0 <== NOT EXECUTED
11cade: 6a 01 push $0x1 <== NOT EXECUTED
11cae0: e8 b7 6d ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11cae5: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
printf ("rtems-rfs: read-superblock: no memory for group table\n");
return ENOMEM;
11cae8: bb 0c 00 00 00 mov $0xc,%ebx <== NOT EXECUTED
fs->groups = calloc (fs->group_count, sizeof (rtems_rfs_group));
if (!fs->groups)
{
rtems_rfs_buffer_handle_close (fs, &handle);
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
11caed: 84 c0 test %al,%al <== NOT EXECUTED
11caef: 0f 84 ab 00 00 00 je 11cba0 <rtems_rfs_fs_open+0x531><== NOT EXECUTED
printf ("rtems-rfs: read-superblock: no memory for group table\n");
11caf5: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11caf8: 68 25 1e 13 00 push $0x131e25 <== NOT EXECUTED
11cafd: e8 52 3a 00 00 call 120554 <puts> <== NOT EXECUTED
11cb02: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11cb05: e9 96 00 00 00 jmp 11cba0 <rtems_rfs_fs_open+0x531><== NOT EXECUTED
* close everything.
*/
for (group = 0; group < fs->group_count; group++)
{
rc = rtems_rfs_group_open (fs,
rtems_rfs_fs_block (fs, group, 0),
11cb0a: 8b 4f 28 mov 0x28(%edi),%ecx
* know how far the initialisation has gone if an error occurs and we need to
* close everything.
*/
for (group = 0; group < fs->group_count; group++)
{
rc = rtems_rfs_group_open (fs,
11cb0d: 83 ec 0c sub $0xc,%esp
return 0;
}
int
rtems_rfs_fs_open (const char* name,
11cb10: 6b c2 50 imul $0x50,%edx,%eax
* know how far the initialisation has gone if an error occurs and we need to
* close everything.
*/
for (group = 0; group < fs->group_count; group++)
{
rc = rtems_rfs_group_open (fs,
11cb13: 03 47 20 add 0x20(%edi),%eax
11cb16: 50 push %eax
11cb17: ff 77 2c pushl 0x2c(%edi)
11cb1a: 51 push %ecx
rtems_rfs_fs_block (fs, group, 0),
11cb1b: 0f af ca imul %edx,%ecx
* know how far the initialisation has gone if an error occurs and we need to
* close everything.
*/
for (group = 0; group < fs->group_count; group++)
{
rc = rtems_rfs_group_open (fs,
11cb1e: 41 inc %ecx
11cb1f: 51 push %ecx
11cb20: 57 push %edi
11cb21: 89 55 94 mov %edx,-0x6c(%ebp)
11cb24: e8 8b 50 ff ff call 111bb4 <rtems_rfs_group_open>
11cb29: 89 c3 mov %eax,%ebx
rtems_rfs_fs_block (fs, group, 0),
fs->group_blocks,
fs->group_inodes,
&fs->groups[group]);
if (rc > 0)
11cb2b: 83 c4 20 add $0x20,%esp
11cb2e: 85 c0 test %eax,%eax
11cb30: 8b 55 94 mov -0x6c(%ebp),%edx
11cb33: 7e 5b jle 11cb90 <rtems_rfs_fs_open+0x521><== ALWAYS TAKEN
11cb35: 31 c9 xor %ecx,%ecx <== NOT EXECUTED
11cb37: eb 1f jmp 11cb58 <rtems_rfs_fs_open+0x4e9><== NOT EXECUTED
{
int g;
for (g = 0; g < group; g++)
rtems_rfs_group_close (fs, &fs->groups[g]);
11cb39: 50 push %eax <== NOT EXECUTED
11cb3a: 50 push %eax <== NOT EXECUTED
return 0;
}
int
rtems_rfs_fs_open (const char* name,
11cb3b: 6b c1 50 imul $0x50,%ecx,%eax <== NOT EXECUTED
&fs->groups[group]);
if (rc > 0)
{
int g;
for (g = 0; g < group; g++)
rtems_rfs_group_close (fs, &fs->groups[g]);
11cb3e: 03 47 20 add 0x20(%edi),%eax <== NOT EXECUTED
11cb41: 50 push %eax <== NOT EXECUTED
11cb42: 57 push %edi <== NOT EXECUTED
11cb43: 89 55 94 mov %edx,-0x6c(%ebp) <== NOT EXECUTED
11cb46: 89 4d 90 mov %ecx,-0x70(%ebp) <== NOT EXECUTED
11cb49: e8 5f 52 ff ff call 111dad <rtems_rfs_group_close> <== NOT EXECUTED
fs->group_inodes,
&fs->groups[group]);
if (rc > 0)
{
int g;
for (g = 0; g < group; g++)
11cb4e: 8b 4d 90 mov -0x70(%ebp),%ecx <== NOT EXECUTED
11cb51: 41 inc %ecx <== NOT EXECUTED
11cb52: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11cb55: 8b 55 94 mov -0x6c(%ebp),%edx <== NOT EXECUTED
11cb58: 39 d1 cmp %edx,%ecx <== NOT EXECUTED
11cb5a: 7c dd jl 11cb39 <rtems_rfs_fs_open+0x4ca><== NOT EXECUTED
rtems_rfs_group_close (fs, &fs->groups[g]);
rtems_rfs_buffer_handle_close (fs, &handle);
11cb5c: 8d 55 b4 lea -0x4c(%ebp),%edx <== NOT EXECUTED
11cb5f: 89 f8 mov %edi,%eax <== NOT EXECUTED
11cb61: e8 c2 fa ff ff call 11c628 <rtems_rfs_buffer_handle_close><== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
11cb66: 51 push %ecx <== NOT EXECUTED
11cb67: 51 push %ecx <== NOT EXECUTED
11cb68: 6a 00 push $0x0 <== NOT EXECUTED
11cb6a: 6a 01 push $0x1 <== NOT EXECUTED
11cb6c: e8 2b 6d ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11cb71: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11cb74: 84 c0 test %al,%al <== NOT EXECUTED
11cb76: 74 24 je 11cb9c <rtems_rfs_fs_open+0x52d><== NOT EXECUTED
printf ("rtems-rfs: read-superblock: no memory for group table%d: %s\n",
11cb78: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11cb7b: 53 push %ebx <== NOT EXECUTED
11cb7c: e8 43 45 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11cb81: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11cb84: 50 push %eax <== NOT EXECUTED
11cb85: 53 push %ebx <== NOT EXECUTED
11cb86: 68 5b 1e 13 00 push $0x131e5b <== NOT EXECUTED
11cb8b: e9 17 ff ff ff jmp 11caa7 <rtems_rfs_fs_open+0x438><== NOT EXECUTED
/*
* Perform each phase of group initialisation at the same time. This way we
* know how far the initialisation has gone if an error occurs and we need to
* close everything.
*/
for (group = 0; group < fs->group_count; group++)
11cb90: 42 inc %edx
11cb91: 3b 57 24 cmp 0x24(%edi),%edx
11cb94: 0f 8c 70 ff ff ff jl 11cb0a <rtems_rfs_fs_open+0x49b>
11cb9a: eb 44 jmp 11cbe0 <rtems_rfs_fs_open+0x571>
errno = rc;
return -1;
}
rc = rtems_rfs_fs_read_superblock (*fs);
if (rc > 0)
11cb9c: 85 db test %ebx,%ebx <== NOT EXECUTED
11cb9e: 74 40 je 11cbe0 <rtems_rfs_fs_open+0x571><== NOT EXECUTED
{
rtems_rfs_buffer_close (*fs);
11cba0: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11cba3: ff 36 pushl (%esi) <== NOT EXECUTED
11cba5: e8 31 dc ff ff call 11a7db <rtems_rfs_buffer_close><== NOT EXECUTED
free (*fs);
11cbaa: 58 pop %eax <== NOT EXECUTED
11cbab: ff 36 pushl (%esi) <== NOT EXECUTED
11cbad: e8 36 d3 fe ff call 109ee8 <free> <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
11cbb2: 58 pop %eax <== NOT EXECUTED
11cbb3: 5a pop %edx <== NOT EXECUTED
11cbb4: 6a 00 push $0x0 <== NOT EXECUTED
11cbb6: 6a 01 push $0x1 <== NOT EXECUTED
11cbb8: e8 df 6c ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11cbbd: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11cbc0: 84 c0 test %al,%al <== NOT EXECUTED
11cbc2: 0f 84 b8 fb ff ff je 11c780 <rtems_rfs_fs_open+0x111><== NOT EXECUTED
printf ("rtems-rfs: open: reading superblock: %d: %s\n",
11cbc8: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11cbcb: 53 push %ebx <== NOT EXECUTED
11cbcc: e8 f3 44 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11cbd1: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11cbd4: 50 push %eax <== NOT EXECUTED
11cbd5: 53 push %ebx <== NOT EXECUTED
11cbd6: 68 98 1e 13 00 push $0x131e98 <== NOT EXECUTED
11cbdb: e9 98 fb ff ff jmp 11c778 <rtems_rfs_fs_open+0x109><== NOT EXECUTED
rc, strerror (rc));
errno = rc;
return -1;
}
rc = rtems_rfs_inode_open (*fs, RTEMS_RFS_ROOT_INO, &inode, true);
11cbe0: 6a 01 push $0x1
11cbe2: 8d 45 c0 lea -0x40(%ebp),%eax
11cbe5: 50 push %eax
11cbe6: 6a 01 push $0x1
11cbe8: ff 36 pushl (%esi)
11cbea: e8 3b 56 ff ff call 11222a <rtems_rfs_inode_open>
11cbef: 89 c3 mov %eax,%ebx
if (rc > 0)
11cbf1: 83 c4 10 add $0x10,%esp
11cbf4: 85 c0 test %eax,%eax
11cbf6: 7e 40 jle 11cc38 <rtems_rfs_fs_open+0x5c9><== ALWAYS TAKEN
{
rtems_rfs_buffer_close (*fs);
11cbf8: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11cbfb: ff 36 pushl (%esi) <== NOT EXECUTED
11cbfd: e8 d9 db ff ff call 11a7db <rtems_rfs_buffer_close><== NOT EXECUTED
free (*fs);
11cc02: 59 pop %ecx <== NOT EXECUTED
11cc03: ff 36 pushl (%esi) <== NOT EXECUTED
11cc05: e8 de d2 fe ff call 109ee8 <free> <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
11cc0a: 5e pop %esi <== NOT EXECUTED
11cc0b: 5f pop %edi <== NOT EXECUTED
11cc0c: 6a 00 push $0x0 <== NOT EXECUTED
11cc0e: 6a 01 push $0x1 <== NOT EXECUTED
11cc10: e8 87 6c ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11cc15: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11cc18: 84 c0 test %al,%al <== NOT EXECUTED
11cc1a: 0f 84 60 fb ff ff je 11c780 <rtems_rfs_fs_open+0x111><== NOT EXECUTED
printf ("rtems-rfs: open: reading root inode: %d: %s\n",
11cc20: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11cc23: 53 push %ebx <== NOT EXECUTED
11cc24: e8 9b 44 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11cc29: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11cc2c: 50 push %eax <== NOT EXECUTED
11cc2d: 53 push %ebx <== NOT EXECUTED
11cc2e: 68 c5 1e 13 00 push $0x131ec5 <== NOT EXECUTED
11cc33: e9 40 fb ff ff jmp 11c778 <rtems_rfs_fs_open+0x109><== NOT EXECUTED
rc, strerror (rc));
errno = rc;
return -1;
}
if (((*fs)->flags & RTEMS_RFS_FS_FORCE_OPEN) == 0)
11cc38: 8b 16 mov (%esi),%edx
11cc3a: f6 02 04 testb $0x4,(%edx)
11cc3d: 75 6e jne 11ccad <rtems_rfs_fs_open+0x63e>
{
mode = rtems_rfs_inode_get_mode (&inode);
11cc3f: 8b 45 cc mov -0x34(%ebp),%eax
* @return uint16_t The mode.
*/
static inline uint16_t
rtems_rfs_inode_get_mode (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u16 (&handle->node->mode);
11cc42: 0f b6 48 02 movzbl 0x2(%eax),%ecx
11cc46: c1 e1 08 shl $0x8,%ecx
11cc49: 0f b6 40 03 movzbl 0x3(%eax),%eax
11cc4d: 09 c8 or %ecx,%eax
if ((mode == 0xffff) || !RTEMS_RFS_S_ISDIR (mode))
11cc4f: 66 83 f8 ff cmp $0xffff,%ax
11cc53: 74 0a je 11cc5f <rtems_rfs_fs_open+0x5f0><== NEVER TAKEN
11cc55: 66 25 00 f0 and $0xf000,%ax
11cc59: 66 3d 00 40 cmp $0x4000,%ax
11cc5d: 74 4e je 11ccad <rtems_rfs_fs_open+0x63e><== ALWAYS TAKEN
{
rtems_rfs_inode_close (*fs, &inode);
11cc5f: 57 push %edi <== NOT EXECUTED
11cc60: 57 push %edi <== NOT EXECUTED
11cc61: 8d 45 c0 lea -0x40(%ebp),%eax <== NOT EXECUTED
11cc64: 50 push %eax <== NOT EXECUTED
11cc65: 52 push %edx <== NOT EXECUTED
11cc66: e8 3c 57 ff ff call 1123a7 <rtems_rfs_inode_close> <== NOT EXECUTED
rtems_rfs_buffer_close (*fs);
11cc6b: 58 pop %eax <== NOT EXECUTED
11cc6c: ff 36 pushl (%esi) <== NOT EXECUTED
11cc6e: e8 68 db ff ff call 11a7db <rtems_rfs_buffer_close><== NOT EXECUTED
free (*fs);
11cc73: 58 pop %eax <== NOT EXECUTED
11cc74: ff 36 pushl (%esi) <== NOT EXECUTED
11cc76: e8 6d d2 fe ff call 109ee8 <free> <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
11cc7b: 58 pop %eax <== NOT EXECUTED
11cc7c: 5a pop %edx <== NOT EXECUTED
11cc7d: 6a 00 push $0x0 <== NOT EXECUTED
11cc7f: 6a 01 push $0x1 <== NOT EXECUTED
11cc81: e8 16 6c ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11cc86: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11cc89: 84 c0 test %al,%al <== NOT EXECUTED
11cc8b: 74 10 je 11cc9d <rtems_rfs_fs_open+0x62e><== NOT EXECUTED
printf ("rtems-rfs: open: invalid root inode mode\n");
11cc8d: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11cc90: 68 f2 1e 13 00 push $0x131ef2 <== NOT EXECUTED
11cc95: e8 ba 38 00 00 call 120554 <puts> <== NOT EXECUTED
11cc9a: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
errno = EIO;
11cc9d: e8 2a 25 00 00 call 11f1cc <__errno> <== NOT EXECUTED
11cca2: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
11cca8: e9 da fa ff ff jmp 11c787 <rtems_rfs_fs_open+0x118><== NOT EXECUTED
return -1;
}
}
rc = rtems_rfs_inode_close (*fs, &inode);
11ccad: 53 push %ebx
11ccae: 53 push %ebx
11ccaf: 8d 45 c0 lea -0x40(%ebp),%eax
11ccb2: 50 push %eax
11ccb3: 52 push %edx
11ccb4: e8 ee 56 ff ff call 1123a7 <rtems_rfs_inode_close>
11ccb9: 89 c3 mov %eax,%ebx
if (rc > 0)
11ccbb: 83 c4 10 add $0x10,%esp
11ccbe: 85 c0 test %eax,%eax
11ccc0: 7e 40 jle 11cd02 <rtems_rfs_fs_open+0x693><== ALWAYS TAKEN
{
rtems_rfs_buffer_close (*fs);
11ccc2: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11ccc5: ff 36 pushl (%esi) <== NOT EXECUTED
11ccc7: e8 0f db ff ff call 11a7db <rtems_rfs_buffer_close><== NOT EXECUTED
free (*fs);
11cccc: 58 pop %eax <== NOT EXECUTED
11cccd: ff 36 pushl (%esi) <== NOT EXECUTED
11cccf: e8 14 d2 fe ff call 109ee8 <free> <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
11ccd4: 5a pop %edx <== NOT EXECUTED
11ccd5: 59 pop %ecx <== NOT EXECUTED
11ccd6: 6a 00 push $0x0 <== NOT EXECUTED
11ccd8: 6a 01 push $0x1 <== NOT EXECUTED
11ccda: e8 bd 6b ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11ccdf: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11cce2: 84 c0 test %al,%al <== NOT EXECUTED
11cce4: 0f 84 96 fa ff ff je 11c780 <rtems_rfs_fs_open+0x111><== NOT EXECUTED
printf ("rtems-rfs: open: closing root inode: %d: %s\n", rc, strerror (rc));
11ccea: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11cced: 53 push %ebx <== NOT EXECUTED
11ccee: e8 d1 43 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11ccf3: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11ccf6: 50 push %eax <== NOT EXECUTED
11ccf7: 53 push %ebx <== NOT EXECUTED
11ccf8: 68 1b 1f 13 00 push $0x131f1b <== NOT EXECUTED
11ccfd: e9 76 fa ff ff jmp 11c778 <rtems_rfs_fs_open+0x109><== NOT EXECUTED
errno = rc;
return -1;
}
errno = 0;
11cd02: e8 c5 24 00 00 call 11f1cc <__errno>
11cd07: c7 00 00 00 00 00 movl $0x0,(%eax)
return 0;
11cd0d: 31 c0 xor %eax,%eax
}
11cd0f: 8d 65 f4 lea -0xc(%ebp),%esp
11cd12: 5b pop %ebx
11cd13: 5e pop %esi
11cd14: 5f pop %edi
11cd15: 5d pop %ebp
11cd16: c3 ret
0011c650 <rtems_rfs_fs_size>:
#include <rtems/rfs/rtems-rfs-inode.h>
#include <rtems/rfs/rtems-rfs-trace.h>
uint64_t
rtems_rfs_fs_size (rtems_rfs_file_system* fs)
{
11c650: 55 push %ebp <== NOT EXECUTED
11c651: 89 e5 mov %esp,%ebp <== NOT EXECUTED
11c653: 8b 55 08 mov 0x8(%ebp),%edx <== NOT EXECUTED
uint64_t blocks = rtems_rfs_fs_blocks (fs);
uint64_t block_size = rtems_rfs_fs_block_size (fs);
11c656: 8b 42 08 mov 0x8(%edx),%eax <== NOT EXECUTED
return blocks * block_size;
11c659: f7 62 04 mull 0x4(%edx) <== NOT EXECUTED
}
11c65c: 5d pop %ebp <== NOT EXECUTED
11c65d: c3 ret <== NOT EXECUTED
00111e52 <rtems_rfs_group_bitmap_alloc>:
int
rtems_rfs_group_bitmap_alloc (rtems_rfs_file_system* fs,
rtems_rfs_bitmap_bit goal,
bool inode,
rtems_rfs_bitmap_bit* result)
{
111e52: 55 push %ebp
111e53: 89 e5 mov %esp,%ebp
111e55: 57 push %edi
111e56: 56 push %esi
111e57: 53 push %ebx
111e58: 83 ec 3c sub $0x3c,%esp
111e5b: 8b 75 08 mov 0x8(%ebp),%esi
111e5e: 8b 45 0c mov 0xc(%ebp),%eax
111e61: 8a 55 10 mov 0x10(%ebp),%dl
111e64: 88 55 cf mov %dl,-0x31(%ebp)
rtems_rfs_bitmap_bit bit;
int offset;
bool updown;
int direction;
if (inode)
111e67: 84 d2 test %dl,%dl
111e69: 74 09 je 111e74 <rtems_rfs_group_bitmap_alloc+0x22>
{
size = fs->group_inodes;
111e6b: 8b 56 2c mov 0x2c(%esi),%edx
111e6e: 89 55 d4 mov %edx,-0x2c(%ebp)
goal -= RTEMS_RFS_ROOT_INO;
111e71: 48 dec %eax
111e72: eb 06 jmp 111e7a <rtems_rfs_group_bitmap_alloc+0x28>
}
else
size = fs->group_blocks;
111e74: 8b 56 28 mov 0x28(%esi),%edx
111e77: 89 55 d4 mov %edx,-0x2c(%ebp)
group_start = goal / size;
111e7a: 31 d2 xor %edx,%edx
111e7c: f7 75 d4 divl -0x2c(%ebp)
111e7f: 89 45 c8 mov %eax,-0x38(%ebp)
bit = (rtems_rfs_bitmap_bit) (goal % size);
111e82: 89 55 e4 mov %edx,-0x1c(%ebp)
offset = 0;
updown = true;
direction = 1;
111e85: bb 01 00 00 00 mov $0x1,%ebx
size = fs->group_blocks;
group_start = goal / size;
bit = (rtems_rfs_bitmap_bit) (goal % size);
offset = 0;
updown = true;
111e8a: b1 01 mov $0x1,%cl
else
size = fs->group_blocks;
group_start = goal / size;
bit = (rtems_rfs_bitmap_bit) (goal % size);
offset = 0;
111e8c: c7 45 d0 00 00 00 00 movl $0x0,-0x30(%ebp)
*/
while (true)
{
rtems_rfs_bitmap_control* bitmap;
int group;
bool allocated = false;
111e93: c6 45 e3 00 movb $0x0,-0x1d(%ebp)
/*
* We can start at any location and we move out from that point in each
* direction. The offset grows until we find a free bit or we hit an end.
*/
group = group_start + (direction * offset);
111e97: 8b 7d d0 mov -0x30(%ebp),%edi
111e9a: 0f af fb imul %ebx,%edi
111e9d: 03 7d c8 add -0x38(%ebp),%edi
if (offset)
111ea0: 83 7d d0 00 cmpl $0x0,-0x30(%ebp)
111ea4: 74 0d je 111eb3 <rtems_rfs_group_bitmap_alloc+0x61>
bit = direction > 0 ? 0 : size - 1;
111ea6: 31 c0 xor %eax,%eax
111ea8: 85 db test %ebx,%ebx
111eaa: 7f 04 jg 111eb0 <rtems_rfs_group_bitmap_alloc+0x5e>
111eac: 8b 45 d4 mov -0x2c(%ebp),%eax
111eaf: 48 dec %eax
111eb0: 89 45 e4 mov %eax,-0x1c(%ebp)
/*
* If we are still looking up and down and if the group is out of range we
* have reached one end. Stopping looking up and down and just move in the
* one direction one group at a time.
*/
if ((group < 0) || (group >= fs->group_count))
111eb3: 85 ff test %edi,%edi
111eb5: 78 05 js 111ebc <rtems_rfs_group_bitmap_alloc+0x6a>
111eb7: 3b 7e 24 cmp 0x24(%esi),%edi
111eba: 7c 18 jl 111ed4 <rtems_rfs_group_bitmap_alloc+0x82>
{
if (!updown)
111ebc: 84 c9 test %cl,%cl
111ebe: 0f 84 e3 00 00 00 je 111fa7 <rtems_rfs_group_bitmap_alloc+0x155>
break;
direction = direction > 0 ? -1 : 1;
111ec4: 85 db test %ebx,%ebx
111ec6: 0f 9e c3 setle %bl
111ec9: 0f b6 db movzbl %bl,%ebx
111ecc: 8d 5c 1b ff lea -0x1(%ebx,%ebx,1),%ebx
updown = false;
111ed0: 31 c9 xor %ecx,%ecx
111ed2: eb bf jmp 111e93 <rtems_rfs_group_bitmap_alloc+0x41>
continue;
}
if (inode)
bitmap = &fs->groups[group].inode_bitmap;
111ed4: 6b d7 50 imul $0x50,%edi,%edx
direction = direction > 0 ? -1 : 1;
updown = false;
continue;
}
if (inode)
111ed7: 80 7d cf 00 cmpb $0x0,-0x31(%ebp)
111edb: 8b 46 20 mov 0x20(%esi),%eax
111ede: 74 06 je 111ee6 <rtems_rfs_group_bitmap_alloc+0x94>
bitmap = &fs->groups[group].inode_bitmap;
111ee0: 8d 54 10 2c lea 0x2c(%eax,%edx,1),%edx
111ee4: eb 04 jmp 111eea <rtems_rfs_group_bitmap_alloc+0x98>
else
bitmap = &fs->groups[group].block_bitmap;
111ee6: 8d 54 10 08 lea 0x8(%eax,%edx,1),%edx
rc = rtems_rfs_bitmap_map_alloc (bitmap, bit, &allocated, &bit);
111eea: 8d 45 e4 lea -0x1c(%ebp),%eax
111eed: 50 push %eax
111eee: 8d 45 e3 lea -0x1d(%ebp),%eax
111ef1: 50 push %eax
111ef2: ff 75 e4 pushl -0x1c(%ebp)
111ef5: 52 push %edx
111ef6: 89 55 c0 mov %edx,-0x40(%ebp)
111ef9: 88 4d c4 mov %cl,-0x3c(%ebp)
111efc: e8 aa 71 00 00 call 1190ab <rtems_rfs_bitmap_map_alloc>
if (rc > 0)
111f01: 83 c4 10 add $0x10,%esp
111f04: 85 c0 test %eax,%eax
111f06: 8b 55 c0 mov -0x40(%ebp),%edx
111f09: 8a 4d c4 mov -0x3c(%ebp),%cl
111f0c: 0f 8f c1 00 00 00 jg 111fd3 <rtems_rfs_group_bitmap_alloc+0x181><== NEVER TAKEN
return rc;
if (rtems_rfs_fs_release_bitmaps (fs))
111f12: f6 06 01 testb $0x1,(%esi)
111f15: 75 10 jne 111f27 <rtems_rfs_group_bitmap_alloc+0xd5><== NEVER TAKEN
rtems_rfs_bitmap_release_buffer (fs, bitmap);
111f17: 50 push %eax
111f18: 50 push %eax
111f19: ff 32 pushl (%edx)
111f1b: 56 push %esi
111f1c: e8 10 82 00 00 call 11a131 <rtems_rfs_buffer_handle_release>
111f21: 83 c4 10 add $0x10,%esp
111f24: 8a 4d c4 mov -0x3c(%ebp),%cl
if (allocated)
111f27: 80 7d e3 00 cmpb $0x0,-0x1d(%ebp)
111f2b: 74 62 je 111f8f <rtems_rfs_group_bitmap_alloc+0x13d>
{
if (inode)
111f2d: 80 7d cf 00 cmpb $0x0,-0x31(%ebp)
111f31: 8b 45 e4 mov -0x1c(%ebp),%eax
111f34: 74 0a je 111f40 <rtems_rfs_group_bitmap_alloc+0xee>
*result = rtems_rfs_group_inode (fs, group, bit);
111f36: 0f af 7e 2c imul 0x2c(%esi),%edi
111f3a: 8d 44 07 01 lea 0x1(%edi,%eax,1),%eax
111f3e: eb 08 jmp 111f48 <rtems_rfs_group_bitmap_alloc+0xf6>
else
*result = rtems_rfs_group_block (&fs->groups[group], bit);
111f40: 6b ff 50 imul $0x50,%edi,%edi
111f43: 03 7e 20 add 0x20(%esi),%edi
111f46: 03 07 add (%edi),%eax
111f48: 8b 55 14 mov 0x14(%ebp),%edx
111f4b: 89 02 mov %eax,(%edx)
if (rtems_rfs_trace (RTEMS_RFS_TRACE_GROUP_BITMAPS))
111f4d: 57 push %edi
111f4e: 57 push %edi
111f4f: 6a 00 push $0x0
111f51: 68 00 00 02 00 push $0x20000
111f56: e8 41 19 00 00 call 11389c <rtems_rfs_trace>
111f5b: 88 c2 mov %al,%dl
111f5d: 83 c4 10 add $0x10,%esp
printf ("rtems-rfs: group-bitmap-alloc: %s allocated: %" PRId32 "\n",
inode ? "inode" : "block", *result);
return 0;
111f60: 31 c0 xor %eax,%eax
{
if (inode)
*result = rtems_rfs_group_inode (fs, group, bit);
else
*result = rtems_rfs_group_block (&fs->groups[group], bit);
if (rtems_rfs_trace (RTEMS_RFS_TRACE_GROUP_BITMAPS))
111f62: 84 d2 test %dl,%dl
111f64: 74 6d je 111fd3 <rtems_rfs_group_bitmap_alloc+0x181><== ALWAYS TAKEN
printf ("rtems-rfs: group-bitmap-alloc: %s allocated: %" PRId32 "\n",
111f66: 8b 45 14 mov 0x14(%ebp),%eax <== NOT EXECUTED
111f69: 8b 10 mov (%eax),%edx <== NOT EXECUTED
111f6b: b8 01 fa 12 00 mov $0x12fa01,%eax <== NOT EXECUTED
111f70: 80 7d cf 00 cmpb $0x0,-0x31(%ebp) <== NOT EXECUTED
111f74: 74 05 je 111f7b <rtems_rfs_group_bitmap_alloc+0x129><== NOT EXECUTED
111f76: b8 9c 02 13 00 mov $0x13029c,%eax <== NOT EXECUTED
111f7b: 56 push %esi <== NOT EXECUTED
111f7c: 52 push %edx <== NOT EXECUTED
111f7d: 50 push %eax <== NOT EXECUTED
111f7e: 68 a2 02 13 00 push $0x1302a2 <== NOT EXECUTED
111f83: e8 b4 e3 00 00 call 12033c <printf> <== NOT EXECUTED
111f88: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
inode ? "inode" : "block", *result);
return 0;
111f8b: 31 c0 xor %eax,%eax <== NOT EXECUTED
111f8d: eb 44 jmp 111fd3 <rtems_rfs_group_bitmap_alloc+0x181><== NOT EXECUTED
}
if (updown)
111f8f: 84 c9 test %cl,%cl
111f91: 74 0c je 111f9f <rtems_rfs_group_bitmap_alloc+0x14d><== NEVER TAKEN
direction = direction > 0 ? -1 : 1;
111f93: 85 db test %ebx,%ebx
111f95: 0f 9e c3 setle %bl
111f98: 0f b6 db movzbl %bl,%ebx
111f9b: 8d 5c 1b ff lea -0x1(%ebx,%ebx,1),%ebx
offset++;
111f9f: ff 45 d0 incl -0x30(%ebp)
111fa2: e9 ec fe ff ff jmp 111e93 <rtems_rfs_group_bitmap_alloc+0x41>
}
if (rtems_rfs_trace (RTEMS_RFS_TRACE_GROUP_BITMAPS))
111fa7: 53 push %ebx
111fa8: 53 push %ebx
111fa9: 6a 00 push $0x0
111fab: 68 00 00 02 00 push $0x20000
111fb0: e8 e7 18 00 00 call 11389c <rtems_rfs_trace>
111fb5: 83 c4 10 add $0x10,%esp
111fb8: 84 c0 test %al,%al
111fba: 75 02 jne 111fbe <rtems_rfs_group_bitmap_alloc+0x16c><== NEVER TAKEN
111fbc: eb 10 jmp 111fce <rtems_rfs_group_bitmap_alloc+0x17c>
printf ("rtems-rfs: group-bitmap-alloc: no blocks available\n");
111fbe: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
111fc1: 68 d4 02 13 00 push $0x1302d4 <== NOT EXECUTED
111fc6: e8 89 e5 00 00 call 120554 <puts> <== NOT EXECUTED
111fcb: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
return ENOSPC;
111fce: b8 1c 00 00 00 mov $0x1c,%eax
}
111fd3: 8d 65 f4 lea -0xc(%ebp),%esp
111fd6: 5b pop %ebx
111fd7: 5e pop %esi
111fd8: 5f pop %edi
111fd9: 5d pop %ebp
111fda: c3 ret
00111fdb <rtems_rfs_group_bitmap_free>:
int
rtems_rfs_group_bitmap_free (rtems_rfs_file_system* fs,
bool inode,
rtems_rfs_bitmap_bit no)
{
111fdb: 55 push %ebp
111fdc: 89 e5 mov %esp,%ebp
111fde: 57 push %edi
111fdf: 56 push %esi
111fe0: 53 push %ebx
111fe1: 83 ec 14 sub $0x14,%esp
111fe4: 8b 75 10 mov 0x10(%ebp),%esi
111fe7: 8a 5d 0c mov 0xc(%ebp),%bl
unsigned int group;
rtems_rfs_bitmap_bit bit;
size_t size;
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_GROUP_BITMAPS))
111fea: 6a 00 push $0x0
111fec: 68 00 00 02 00 push $0x20000
111ff1: e8 a6 18 00 00 call 11389c <rtems_rfs_trace>
111ff6: 83 c4 10 add $0x10,%esp
111ff9: 84 c0 test %al,%al
111ffb: 74 1e je 11201b <rtems_rfs_group_bitmap_free+0x40><== ALWAYS TAKEN
printf ("rtems-rfs: group-bitmap-free: %s free: %" PRId32 "\n",
111ffd: b8 01 fa 12 00 mov $0x12fa01,%eax <== NOT EXECUTED
112002: 84 db test %bl,%bl <== NOT EXECUTED
112004: 74 05 je 11200b <rtems_rfs_group_bitmap_free+0x30><== NOT EXECUTED
112006: b8 9c 02 13 00 mov $0x13029c,%eax <== NOT EXECUTED
11200b: 51 push %ecx <== NOT EXECUTED
11200c: 56 push %esi <== NOT EXECUTED
11200d: 50 push %eax <== NOT EXECUTED
11200e: 68 07 03 13 00 push $0x130307 <== NOT EXECUTED
112013: e8 24 e3 00 00 call 12033c <printf> <== NOT EXECUTED
112018: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
inode ? "inode" : "block", no);
if (inode)
{
no -= RTEMS_RFS_ROOT_INO;
size = fs->group_inodes;
11201b: 8b 55 08 mov 0x8(%ebp),%edx
if (rtems_rfs_trace (RTEMS_RFS_TRACE_GROUP_BITMAPS))
printf ("rtems-rfs: group-bitmap-free: %s free: %" PRId32 "\n",
inode ? "inode" : "block", no);
if (inode)
11201e: 84 db test %bl,%bl
112020: 8d 46 ff lea -0x1(%esi),%eax
112023: 74 05 je 11202a <rtems_rfs_group_bitmap_free+0x4f>
{
no -= RTEMS_RFS_ROOT_INO;
size = fs->group_inodes;
112025: 8b 72 2c mov 0x2c(%edx),%esi
112028: eb 03 jmp 11202d <rtems_rfs_group_bitmap_free+0x52>
}
else
{
no -= RTEMS_RFS_SUPERBLOCK_SIZE;
size = fs->group_blocks;
11202a: 8b 72 28 mov 0x28(%edx),%esi
}
group = no / size;
11202d: 31 d2 xor %edx,%edx
11202f: f7 f6 div %esi
bit = (rtems_rfs_bitmap_bit) (no % size);
if (inode)
bitmap = &fs->groups[group].inode_bitmap;
112031: 6b c0 50 imul $0x50,%eax,%eax
}
group = no / size;
bit = (rtems_rfs_bitmap_bit) (no % size);
if (inode)
112034: 84 db test %bl,%bl
112036: 8b 5d 08 mov 0x8(%ebp),%ebx
112039: 8b 4b 20 mov 0x20(%ebx),%ecx
11203c: 74 06 je 112044 <rtems_rfs_group_bitmap_free+0x69>
bitmap = &fs->groups[group].inode_bitmap;
11203e: 8d 74 01 2c lea 0x2c(%ecx,%eax,1),%esi
112042: eb 04 jmp 112048 <rtems_rfs_group_bitmap_free+0x6d>
else
bitmap = &fs->groups[group].block_bitmap;
112044: 8d 74 01 08 lea 0x8(%ecx,%eax,1),%esi
rc = rtems_rfs_bitmap_map_clear (bitmap, bit);
112048: 50 push %eax
112049: 50 push %eax
11204a: 52 push %edx
11204b: 56 push %esi
11204c: e8 da 6e 00 00 call 118f2b <rtems_rfs_bitmap_map_clear>
112051: 89 c7 mov %eax,%edi
rtems_rfs_bitmap_release_buffer (fs, bitmap);
112053: 58 pop %eax
112054: 5a pop %edx
112055: ff 36 pushl (%esi)
112057: ff 75 08 pushl 0x8(%ebp)
11205a: e8 d2 80 00 00 call 11a131 <rtems_rfs_buffer_handle_release>
return rc;
}
11205f: 89 f8 mov %edi,%eax
112061: 8d 65 f4 lea -0xc(%ebp),%esp
112064: 5b pop %ebx
112065: 5e pop %esi
112066: 5f pop %edi
112067: 5d pop %ebp
112068: c3 ret
00112069 <rtems_rfs_group_bitmap_test>:
int
rtems_rfs_group_bitmap_test (rtems_rfs_file_system* fs,
bool inode,
rtems_rfs_bitmap_bit no,
bool* state)
{
112069: 55 push %ebp <== NOT EXECUTED
11206a: 89 e5 mov %esp,%ebp <== NOT EXECUTED
11206c: 57 push %edi <== NOT EXECUTED
11206d: 56 push %esi <== NOT EXECUTED
11206e: 53 push %ebx <== NOT EXECUTED
11206f: 83 ec 24 sub $0x24,%esp <== NOT EXECUTED
112072: 8b 75 08 mov 0x8(%ebp),%esi <== NOT EXECUTED
112075: 8b 5d 10 mov 0x10(%ebp),%ebx <== NOT EXECUTED
112078: 8a 4d 0c mov 0xc(%ebp),%cl <== NOT EXECUTED
unsigned int group;
rtems_rfs_bitmap_bit bit;
size_t size;
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_GROUP_BITMAPS))
11207b: 6a 00 push $0x0 <== NOT EXECUTED
11207d: 68 00 00 02 00 push $0x20000 <== NOT EXECUTED
112082: 88 4d e4 mov %cl,-0x1c(%ebp) <== NOT EXECUTED
112085: e8 12 18 00 00 call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11208a: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11208d: 84 c0 test %al,%al <== NOT EXECUTED
11208f: 8a 4d e4 mov -0x1c(%ebp),%cl <== NOT EXECUTED
112092: 74 24 je 1120b8 <rtems_rfs_group_bitmap_test+0x4f><== NOT EXECUTED
printf ("rtems-rfs: group-bitmap-test: %s test: %" PRId32 "\n",
112094: b8 01 fa 12 00 mov $0x12fa01,%eax <== NOT EXECUTED
112099: 84 c9 test %cl,%cl <== NOT EXECUTED
11209b: 74 05 je 1120a2 <rtems_rfs_group_bitmap_test+0x39><== NOT EXECUTED
11209d: b8 9c 02 13 00 mov $0x13029c,%eax <== NOT EXECUTED
1120a2: 57 push %edi <== NOT EXECUTED
1120a3: 53 push %ebx <== NOT EXECUTED
1120a4: 50 push %eax <== NOT EXECUTED
1120a5: 68 33 03 13 00 push $0x130333 <== NOT EXECUTED
1120aa: 88 4d e4 mov %cl,-0x1c(%ebp) <== NOT EXECUTED
1120ad: e8 8a e2 00 00 call 12033c <printf> <== NOT EXECUTED
1120b2: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
1120b5: 8a 4d e4 mov -0x1c(%ebp),%cl <== NOT EXECUTED
inode ? "inode" : "block", no);
if (inode)
{
if ((no < RTEMS_RFS_ROOT_INO) || (no > rtems_rfs_fs_inodes (fs)))
return EINVAL;
1120b8: bf 16 00 00 00 mov $0x16,%edi <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_GROUP_BITMAPS))
printf ("rtems-rfs: group-bitmap-test: %s test: %" PRId32 "\n",
inode ? "inode" : "block", no);
if (inode)
1120bd: 84 c9 test %cl,%cl <== NOT EXECUTED
1120bf: 74 0f je 1120d0 <rtems_rfs_group_bitmap_test+0x67><== NOT EXECUTED
{
if ((no < RTEMS_RFS_ROOT_INO) || (no > rtems_rfs_fs_inodes (fs)))
1120c1: 85 db test %ebx,%ebx <== NOT EXECUTED
1120c3: 7e 47 jle 11210c <rtems_rfs_group_bitmap_test+0xa3><== NOT EXECUTED
1120c5: 3b 5e 14 cmp 0x14(%esi),%ebx <== NOT EXECUTED
1120c8: 77 42 ja 11210c <rtems_rfs_group_bitmap_test+0xa3><== NOT EXECUTED
return EINVAL;
no -= RTEMS_RFS_ROOT_INO;
1120ca: 4b dec %ebx <== NOT EXECUTED
size = fs->group_inodes;
1120cb: 8b 7e 2c mov 0x2c(%esi),%edi <== NOT EXECUTED
1120ce: eb 08 jmp 1120d8 <rtems_rfs_group_bitmap_test+0x6f><== NOT EXECUTED
}
else
{
if (no >= rtems_rfs_fs_blocks (fs))
1120d0: 3b 5e 04 cmp 0x4(%esi),%ebx <== NOT EXECUTED
1120d3: 73 37 jae 11210c <rtems_rfs_group_bitmap_test+0xa3><== NOT EXECUTED
return EINVAL;
size = fs->group_blocks;
1120d5: 8b 7e 28 mov 0x28(%esi),%edi <== NOT EXECUTED
}
group = no / size;
1120d8: 89 d8 mov %ebx,%eax <== NOT EXECUTED
1120da: 31 d2 xor %edx,%edx <== NOT EXECUTED
1120dc: f7 f7 div %edi <== NOT EXECUTED
bit = (rtems_rfs_bitmap_bit) (no % size);
if (inode)
bitmap = &fs->groups[group].inode_bitmap;
1120de: 6b d8 50 imul $0x50,%eax,%ebx <== NOT EXECUTED
}
group = no / size;
bit = (rtems_rfs_bitmap_bit) (no % size);
if (inode)
1120e1: 84 c9 test %cl,%cl <== NOT EXECUTED
1120e3: 8b 46 20 mov 0x20(%esi),%eax <== NOT EXECUTED
1120e6: 74 06 je 1120ee <rtems_rfs_group_bitmap_test+0x85><== NOT EXECUTED
bitmap = &fs->groups[group].inode_bitmap;
1120e8: 8d 5c 18 2c lea 0x2c(%eax,%ebx,1),%ebx <== NOT EXECUTED
1120ec: eb 04 jmp 1120f2 <rtems_rfs_group_bitmap_test+0x89><== NOT EXECUTED
else
bitmap = &fs->groups[group].block_bitmap;
1120ee: 8d 5c 18 08 lea 0x8(%eax,%ebx,1),%ebx <== NOT EXECUTED
rc = rtems_rfs_bitmap_map_test (bitmap, bit, state);
1120f2: 57 push %edi <== NOT EXECUTED
1120f3: ff 75 14 pushl 0x14(%ebp) <== NOT EXECUTED
1120f6: 52 push %edx <== NOT EXECUTED
1120f7: 53 push %ebx <== NOT EXECUTED
1120f8: e8 8c 6e 00 00 call 118f89 <rtems_rfs_bitmap_map_test><== NOT EXECUTED
1120fd: 89 c7 mov %eax,%edi <== NOT EXECUTED
rtems_rfs_bitmap_release_buffer (fs, bitmap);
1120ff: 58 pop %eax <== NOT EXECUTED
112100: 5a pop %edx <== NOT EXECUTED
112101: ff 33 pushl (%ebx) <== NOT EXECUTED
112103: 56 push %esi <== NOT EXECUTED
112104: e8 28 80 00 00 call 11a131 <rtems_rfs_buffer_handle_release><== NOT EXECUTED
return rc;
112109: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
11210c: 89 f8 mov %edi,%eax <== NOT EXECUTED
11210e: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
112111: 5b pop %ebx <== NOT EXECUTED
112112: 5e pop %esi <== NOT EXECUTED
112113: 5f pop %edi <== NOT EXECUTED
112114: 5d pop %ebp <== NOT EXECUTED
112115: c3 ret <== NOT EXECUTED
00111dad <rtems_rfs_group_close>:
int
rtems_rfs_group_close (rtems_rfs_file_system* fs, rtems_rfs_group* group)
{
111dad: 55 push %ebp
111dae: 89 e5 mov %esp,%ebp
111db0: 57 push %edi
111db1: 56 push %esi
111db2: 53 push %ebx
111db3: 83 ec 14 sub $0x14,%esp
111db6: 8b 5d 0c mov 0xc(%ebp),%ebx
int result = 0;
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_GROUP_CLOSE))
111db9: 6a 00 push $0x0
111dbb: 68 00 00 01 00 push $0x10000
111dc0: e8 d7 1a 00 00 call 11389c <rtems_rfs_trace>
111dc5: 83 c4 10 add $0x10,%esp
111dc8: 84 c0 test %al,%al
111dca: 74 11 je 111ddd <rtems_rfs_group_close+0x30><== ALWAYS TAKEN
printf ("rtems-rfs: group-close: base=%" PRId32 "\n", group->base);
111dcc: 51 push %ecx <== NOT EXECUTED
111dcd: 51 push %ecx <== NOT EXECUTED
111dce: ff 33 pushl (%ebx) <== NOT EXECUTED
111dd0: 68 7a 02 13 00 push $0x13027a <== NOT EXECUTED
111dd5: e8 62 e5 00 00 call 12033c <printf> <== NOT EXECUTED
111dda: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
/*
* We need to close as much as possible and also return any error if one
* occurs but this may result in one even more important error being lost but
* we cannot OR the errors together so this is a reasonable compromise.
*/
rc = rtems_rfs_bitmap_close (&group->inode_bitmap);
111ddd: 83 ec 0c sub $0xc,%esp
111de0: 8d 43 2c lea 0x2c(%ebx),%eax
111de3: 50 push %eax
111de4: e8 74 74 00 00 call 11925d <rtems_rfs_bitmap_close>
111de9: 89 c7 mov %eax,%edi
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
111deb: 58 pop %eax
111dec: 5a pop %edx
if (rc > 0)
result = rc;
rc = rtems_rfs_buffer_handle_close (fs, &group->inode_bitmap_buffer);
111ded: 8d 43 44 lea 0x44(%ebx),%eax
111df0: 50 push %eax
111df1: ff 75 08 pushl 0x8(%ebp)
111df4: e8 38 83 00 00 call 11a131 <rtems_rfs_buffer_handle_release>
handle->dirty = false;
111df9: c6 43 44 00 movb $0x0,0x44(%ebx)
handle->bnum = 0;
111dfd: c7 43 48 00 00 00 00 movl $0x0,0x48(%ebx)
handle->buffer = NULL;
111e04: c7 43 4c 00 00 00 00 movl $0x0,0x4c(%ebx)
if (rc > 0)
result = rc;
rc = rtems_rfs_bitmap_close (&group->block_bitmap);
111e0b: 8d 43 08 lea 0x8(%ebx),%eax
111e0e: 89 04 24 mov %eax,(%esp)
111e11: e8 47 74 00 00 call 11925d <rtems_rfs_bitmap_close>
if (rc > 0)
111e16: 83 c4 10 add $0x10,%esp
111e19: 89 c6 mov %eax,%esi
111e1b: 85 c0 test %eax,%eax
111e1d: 7f 09 jg 111e28 <rtems_rfs_group_close+0x7b><== NEVER TAKEN
111e1f: 89 fe mov %edi,%esi
111e21: f7 d6 not %esi
111e23: c1 fe 1f sar $0x1f,%esi
111e26: 21 fe and %edi,%esi
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
111e28: 50 push %eax
111e29: 50 push %eax
result = rc;
rc = rtems_rfs_buffer_handle_close (fs, &group->block_bitmap_buffer);
111e2a: 8d 43 20 lea 0x20(%ebx),%eax
111e2d: 50 push %eax
111e2e: ff 75 08 pushl 0x8(%ebp)
111e31: e8 fb 82 00 00 call 11a131 <rtems_rfs_buffer_handle_release>
handle->dirty = false;
111e36: c6 43 20 00 movb $0x0,0x20(%ebx)
handle->bnum = 0;
111e3a: c7 43 24 00 00 00 00 movl $0x0,0x24(%ebx)
handle->buffer = NULL;
111e41: c7 43 28 00 00 00 00 movl $0x0,0x28(%ebx)
if (rc > 0)
result = rc;
return result;
}
111e48: 89 f0 mov %esi,%eax
111e4a: 8d 65 f4 lea -0xc(%ebp),%esp
111e4d: 5b pop %ebx
111e4e: 5e pop %esi
111e4f: 5f pop %edi
111e50: 5d pop %ebp
111e51: c3 ret
00111bb4 <rtems_rfs_group_open>:
rtems_rfs_group_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_block base,
size_t size,
size_t inodes,
rtems_rfs_group* group)
{
111bb4: 55 push %ebp
111bb5: 89 e5 mov %esp,%ebp
111bb7: 57 push %edi
111bb8: 56 push %esi
111bb9: 53 push %ebx
111bba: 83 ec 1c sub $0x1c,%esp
111bbd: 8b 75 08 mov 0x8(%ebp),%esi
111bc0: 8b 4d 0c mov 0xc(%ebp),%ecx
111bc3: 8b 5d 10 mov 0x10(%ebp),%ebx
111bc6: 8b 7d 18 mov 0x18(%ebp),%edi
int rc;
if (base >= rtems_rfs_fs_blocks (fs))
111bc9: 8b 46 04 mov 0x4(%esi),%eax
111bcc: 39 c1 cmp %eax,%ecx
111bce: 72 38 jb 111c08 <rtems_rfs_group_open+0x54><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_GROUP_OPEN))
111bd0: 50 push %eax <== NOT EXECUTED
111bd1: 50 push %eax <== NOT EXECUTED
111bd2: 6a 00 push $0x0 <== NOT EXECUTED
111bd4: 68 00 80 00 00 push $0x8000 <== NOT EXECUTED
111bd9: e8 be 1c 00 00 call 11389c <rtems_rfs_trace> <== NOT EXECUTED
111bde: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
printf ("rtems-rfs: group-open: base outside file system range: %d: %s\n",
EIO, strerror (EIO));
return EIO;
111be1: bb 05 00 00 00 mov $0x5,%ebx <== NOT EXECUTED
{
int rc;
if (base >= rtems_rfs_fs_blocks (fs))
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_GROUP_OPEN))
111be6: 84 c0 test %al,%al <== NOT EXECUTED
111be8: 0f 84 b5 01 00 00 je 111da3 <rtems_rfs_group_open+0x1ef><== NOT EXECUTED
printf ("rtems-rfs: group-open: base outside file system range: %d: %s\n",
111bee: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
111bf1: 6a 05 push $0x5 <== NOT EXECUTED
111bf3: e8 cc f4 00 00 call 1210c4 <strerror> <== NOT EXECUTED
111bf8: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
111bfb: 50 push %eax <== NOT EXECUTED
111bfc: 6a 05 push $0x5 <== NOT EXECUTED
111bfe: 68 8b 01 13 00 push $0x13018b <== NOT EXECUTED
111c03: e9 74 01 00 00 jmp 111d7c <rtems_rfs_group_open+0x1c8><== NOT EXECUTED
EIO, strerror (EIO));
return EIO;
}
if ((base + size) >= rtems_rfs_fs_blocks (fs))
111c08: 8d 14 0b lea (%ebx,%ecx,1),%edx
111c0b: 39 c2 cmp %eax,%edx
111c0d: 72 04 jb 111c13 <rtems_rfs_group_open+0x5f><== NEVER TAKEN
size = rtems_rfs_fs_blocks (fs) - base;
111c0f: 89 c3 mov %eax,%ebx
111c11: 29 cb sub %ecx,%ebx
111c13: 89 5d e0 mov %ebx,-0x20(%ebp)
111c16: 3b 5d 14 cmp 0x14(%ebp),%ebx
111c19: 76 06 jbe 111c21 <rtems_rfs_group_open+0x6d><== NEVER TAKEN
111c1b: 8b 45 14 mov 0x14(%ebp),%eax
111c1e: 89 45 e0 mov %eax,-0x20(%ebp)
* the format configuration needs reviewing.
*/
if (inodes > size)
inodes = size;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_GROUP_OPEN))
111c21: 50 push %eax
111c22: 50 push %eax
111c23: 6a 00 push $0x0
111c25: 68 00 80 00 00 push $0x8000
111c2a: 89 4d d8 mov %ecx,-0x28(%ebp)
111c2d: e8 6a 1c 00 00 call 11389c <rtems_rfs_trace>
111c32: 83 c4 10 add $0x10,%esp
111c35: 84 c0 test %al,%al
111c37: 8b 4d d8 mov -0x28(%ebp),%ecx
111c3a: 74 15 je 111c51 <rtems_rfs_group_open+0x9d><== ALWAYS TAKEN
printf ("rtems-rfs: group-open: base=%" PRId32 ", blocks=%zd inodes=%zd\n",
111c3c: ff 75 e0 pushl -0x20(%ebp) <== NOT EXECUTED
111c3f: 53 push %ebx <== NOT EXECUTED
111c40: 51 push %ecx <== NOT EXECUTED
111c41: 68 ca 01 13 00 push $0x1301ca <== NOT EXECUTED
111c46: e8 f1 e6 00 00 call 12033c <printf> <== NOT EXECUTED
111c4b: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
111c4e: 8b 4d d8 mov -0x28(%ebp),%ecx <== NOT EXECUTED
base, size, inodes);
group->base = base;
111c51: 89 0f mov %ecx,(%edi)
group->size = size;
111c53: 89 5f 04 mov %ebx,0x4(%edi)
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
111c56: c6 47 20 00 movb $0x0,0x20(%edi)
handle->bnum = 0;
111c5a: c7 47 24 00 00 00 00 movl $0x0,0x24(%edi)
handle->buffer = NULL;
111c61: c7 47 28 00 00 00 00 movl $0x0,0x28(%edi)
printf ("rtems-rfs: group-open: could not open block bitmap handle: %d: %s\n",
rc, strerror (rc));
return rc;
}
rc = rtems_rfs_bitmap_open (&group->block_bitmap, fs,
111c68: 8d 47 20 lea 0x20(%edi),%eax
111c6b: 89 45 e4 mov %eax,-0x1c(%ebp)
111c6e: 8d 47 08 lea 0x8(%edi),%eax
111c71: 89 45 dc mov %eax,-0x24(%ebp)
111c74: 83 ec 0c sub $0xc,%esp
111c77: 51 push %ecx
111c78: 53 push %ebx
111c79: ff 75 e4 pushl -0x1c(%ebp)
111c7c: 56 push %esi
111c7d: 50 push %eax
111c7e: e8 88 75 00 00 call 11920b <rtems_rfs_bitmap_open>
111c83: 89 c3 mov %eax,%ebx
&group->block_bitmap_buffer, size,
group->base + RTEMS_RFS_GROUP_BLOCK_BITMAP_BLOCK);
if (rc > 0)
111c85: 83 c4 20 add $0x20,%esp
111c88: 85 c0 test %eax,%eax
111c8a: 7e 4e jle 111cda <rtems_rfs_group_open+0x126><== ALWAYS TAKEN
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
111c8c: 50 push %eax <== NOT EXECUTED
111c8d: 50 push %eax <== NOT EXECUTED
111c8e: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
111c91: 56 push %esi <== NOT EXECUTED
111c92: e8 9a 84 00 00 call 11a131 <rtems_rfs_buffer_handle_release><== NOT EXECUTED
handle->dirty = false;
111c97: c6 47 20 00 movb $0x0,0x20(%edi) <== NOT EXECUTED
handle->bnum = 0;
111c9b: c7 47 24 00 00 00 00 movl $0x0,0x24(%edi) <== NOT EXECUTED
handle->buffer = NULL;
111ca2: c7 47 28 00 00 00 00 movl $0x0,0x28(%edi) <== NOT EXECUTED
{
rtems_rfs_buffer_handle_close (fs, &group->block_bitmap_buffer);
if (rtems_rfs_trace (RTEMS_RFS_TRACE_GROUP_OPEN))
111ca9: 58 pop %eax <== NOT EXECUTED
111caa: 5a pop %edx <== NOT EXECUTED
111cab: 6a 00 push $0x0 <== NOT EXECUTED
111cad: 68 00 80 00 00 push $0x8000 <== NOT EXECUTED
111cb2: e8 e5 1b 00 00 call 11389c <rtems_rfs_trace> <== NOT EXECUTED
111cb7: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
111cba: 84 c0 test %al,%al <== NOT EXECUTED
111cbc: 0f 84 e1 00 00 00 je 111da3 <rtems_rfs_group_open+0x1ef><== NOT EXECUTED
printf ("rtems-rfs: group-open: could not open block bitmap: %d: %s\n",
111cc2: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
111cc5: 53 push %ebx <== NOT EXECUTED
111cc6: e8 f9 f3 00 00 call 1210c4 <strerror> <== NOT EXECUTED
111ccb: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
111cce: 50 push %eax <== NOT EXECUTED
111ccf: 53 push %ebx <== NOT EXECUTED
111cd0: 68 02 02 13 00 push $0x130202 <== NOT EXECUTED
111cd5: e9 a2 00 00 00 jmp 111d7c <rtems_rfs_group_open+0x1c8><== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
111cda: c6 47 44 00 movb $0x0,0x44(%edi)
handle->bnum = 0;
111cde: c7 47 48 00 00 00 00 movl $0x0,0x48(%edi)
handle->buffer = NULL;
111ce5: c7 47 4c 00 00 00 00 movl $0x0,0x4c(%edi)
printf ("rtems-rfs: group-open: could not open inode bitmap handle: %d: %s\n",
rc, strerror (rc));
return rc;
}
rc = rtems_rfs_bitmap_open (&group->inode_bitmap, fs,
111cec: 8d 4f 44 lea 0x44(%edi),%ecx
111cef: 83 ec 0c sub $0xc,%esp
111cf2: 8b 07 mov (%edi),%eax
111cf4: 40 inc %eax
111cf5: 50 push %eax
111cf6: ff 75 e0 pushl -0x20(%ebp)
111cf9: 51 push %ecx
111cfa: 56 push %esi
111cfb: 8d 47 2c lea 0x2c(%edi),%eax
111cfe: 50 push %eax
111cff: 89 4d d8 mov %ecx,-0x28(%ebp)
111d02: e8 04 75 00 00 call 11920b <rtems_rfs_bitmap_open>
111d07: 89 c3 mov %eax,%ebx
&group->inode_bitmap_buffer, inodes,
group->base + RTEMS_RFS_GROUP_INODE_BITMAP_BLOCK);
if (rc > 0)
111d09: 83 c4 20 add $0x20,%esp
111d0c: 85 c0 test %eax,%eax
111d0e: 8b 4d d8 mov -0x28(%ebp),%ecx
111d11: 7e 70 jle 111d83 <rtems_rfs_group_open+0x1cf><== ALWAYS TAKEN
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
111d13: 50 push %eax <== NOT EXECUTED
111d14: 50 push %eax <== NOT EXECUTED
111d15: 51 push %ecx <== NOT EXECUTED
111d16: 56 push %esi <== NOT EXECUTED
111d17: e8 15 84 00 00 call 11a131 <rtems_rfs_buffer_handle_release><== NOT EXECUTED
handle->dirty = false;
111d1c: c6 47 44 00 movb $0x0,0x44(%edi) <== NOT EXECUTED
handle->bnum = 0;
111d20: c7 47 48 00 00 00 00 movl $0x0,0x48(%edi) <== NOT EXECUTED
handle->buffer = NULL;
111d27: c7 47 4c 00 00 00 00 movl $0x0,0x4c(%edi) <== NOT EXECUTED
{
rtems_rfs_buffer_handle_close (fs, &group->inode_bitmap_buffer);
rtems_rfs_bitmap_close (&group->block_bitmap);
111d2e: 58 pop %eax <== NOT EXECUTED
111d2f: ff 75 dc pushl -0x24(%ebp) <== NOT EXECUTED
111d32: e8 26 75 00 00 call 11925d <rtems_rfs_bitmap_close><== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
111d37: 58 pop %eax <== NOT EXECUTED
111d38: 5a pop %edx <== NOT EXECUTED
111d39: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
111d3c: 56 push %esi <== NOT EXECUTED
111d3d: e8 ef 83 00 00 call 11a131 <rtems_rfs_buffer_handle_release><== NOT EXECUTED
handle->dirty = false;
111d42: c6 47 20 00 movb $0x0,0x20(%edi) <== NOT EXECUTED
handle->bnum = 0;
111d46: c7 47 24 00 00 00 00 movl $0x0,0x24(%edi) <== NOT EXECUTED
handle->buffer = NULL;
111d4d: c7 47 28 00 00 00 00 movl $0x0,0x28(%edi) <== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &group->block_bitmap_buffer);
if (rtems_rfs_trace (RTEMS_RFS_TRACE_GROUP_OPEN))
111d54: 59 pop %ecx <== NOT EXECUTED
111d55: 5e pop %esi <== NOT EXECUTED
111d56: 6a 00 push $0x0 <== NOT EXECUTED
111d58: 68 00 80 00 00 push $0x8000 <== NOT EXECUTED
111d5d: e8 3a 1b 00 00 call 11389c <rtems_rfs_trace> <== NOT EXECUTED
111d62: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
111d65: 84 c0 test %al,%al <== NOT EXECUTED
111d67: 74 3a je 111da3 <rtems_rfs_group_open+0x1ef><== NOT EXECUTED
printf ("rtems-rfs: group-open: could not open inode bitmap: %d: %s\n",
111d69: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
111d6c: 53 push %ebx <== NOT EXECUTED
111d6d: e8 52 f3 00 00 call 1210c4 <strerror> <== NOT EXECUTED
111d72: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
111d75: 50 push %eax <== NOT EXECUTED
111d76: 53 push %ebx <== NOT EXECUTED
111d77: 68 3e 02 13 00 push $0x13023e <== NOT EXECUTED
111d7c: e8 bb e5 00 00 call 12033c <printf> <== NOT EXECUTED
111d81: eb 1d jmp 111da0 <rtems_rfs_group_open+0x1ec><== NOT EXECUTED
{
rtems_rfs_bitmap_release_buffer (fs, &group->block_bitmap);
rtems_rfs_bitmap_release_buffer (fs, &group->inode_bitmap);
}
return 0;
111d83: 31 db xor %ebx,%ebx
printf ("rtems-rfs: group-open: could not open inode bitmap: %d: %s\n",
rc, strerror (rc));
return rc;
}
if (rtems_rfs_fs_release_bitmaps (fs))
111d85: f6 06 01 testb $0x1,(%esi)
111d88: 75 19 jne 111da3 <rtems_rfs_group_open+0x1ef><== NEVER TAKEN
{
rtems_rfs_bitmap_release_buffer (fs, &group->block_bitmap);
111d8a: 50 push %eax
111d8b: 50 push %eax
111d8c: ff 77 08 pushl 0x8(%edi)
111d8f: 56 push %esi
111d90: e8 9c 83 00 00 call 11a131 <rtems_rfs_buffer_handle_release>
rtems_rfs_bitmap_release_buffer (fs, &group->inode_bitmap);
111d95: 5a pop %edx
111d96: 59 pop %ecx
111d97: ff 77 2c pushl 0x2c(%edi)
111d9a: 56 push %esi
111d9b: e8 91 83 00 00 call 11a131 <rtems_rfs_buffer_handle_release>
111da0: 83 c4 10 add $0x10,%esp
}
return 0;
}
111da3: 89 d8 mov %ebx,%eax
111da5: 8d 65 f4 lea -0xc(%ebp),%esp
111da8: 5b pop %ebx
111da9: 5e pop %esi
111daa: 5f pop %edi
111dab: 5d pop %ebp
111dac: c3 ret
00112116 <rtems_rfs_group_usage>:
int
rtems_rfs_group_usage (rtems_rfs_file_system* fs,
size_t* blocks,
size_t* inodes)
{
112116: 55 push %ebp <== NOT EXECUTED
112117: 89 e5 mov %esp,%ebp <== NOT EXECUTED
112119: 57 push %edi <== NOT EXECUTED
11211a: 56 push %esi <== NOT EXECUTED
11211b: 53 push %ebx <== NOT EXECUTED
11211c: 51 push %ecx <== NOT EXECUTED
11211d: 8b 5d 08 mov 0x8(%ebp),%ebx <== NOT EXECUTED
112120: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
112123: 8b 55 10 mov 0x10(%ebp),%edx <== NOT EXECUTED
int g;
*blocks = 0;
112126: c7 01 00 00 00 00 movl $0x0,(%ecx) <== NOT EXECUTED
*inodes = 0;
11212c: c7 02 00 00 00 00 movl $0x0,(%edx) <== NOT EXECUTED
for (g = 0; g < fs->group_count; g++)
112132: 8b 43 24 mov 0x24(%ebx),%eax <== NOT EXECUTED
112135: 89 45 f0 mov %eax,-0x10(%ebp) <== NOT EXECUTED
112138: 31 f6 xor %esi,%esi <== NOT EXECUTED
11213a: eb 17 jmp 112153 <rtems_rfs_group_usage+0x3d><== NOT EXECUTED
return rc;
}
int
rtems_rfs_group_usage (rtems_rfs_file_system* fs,
11213c: 6b c6 50 imul $0x50,%esi,%eax <== NOT EXECUTED
*blocks = 0;
*inodes = 0;
for (g = 0; g < fs->group_count; g++)
{
rtems_rfs_group* group = &fs->groups[g];
11213f: 03 43 20 add 0x20(%ebx),%eax <== NOT EXECUTED
*blocks +=
rtems_rfs_bitmap_map_size(&group->block_bitmap) -
112142: 8b 78 14 mov 0x14(%eax),%edi <== NOT EXECUTED
112145: 2b 78 18 sub 0x18(%eax),%edi <== NOT EXECUTED
*inodes = 0;
for (g = 0; g < fs->group_count; g++)
{
rtems_rfs_group* group = &fs->groups[g];
*blocks +=
112148: 01 39 add %edi,(%ecx) <== NOT EXECUTED
rtems_rfs_bitmap_map_size(&group->block_bitmap) -
rtems_rfs_bitmap_map_free (&group->block_bitmap);
*inodes +=
rtems_rfs_bitmap_map_size (&group->inode_bitmap) -
11214a: 8b 78 38 mov 0x38(%eax),%edi <== NOT EXECUTED
11214d: 2b 78 3c sub 0x3c(%eax),%edi <== NOT EXECUTED
{
rtems_rfs_group* group = &fs->groups[g];
*blocks +=
rtems_rfs_bitmap_map_size(&group->block_bitmap) -
rtems_rfs_bitmap_map_free (&group->block_bitmap);
*inodes +=
112150: 01 3a add %edi,(%edx) <== NOT EXECUTED
int g;
*blocks = 0;
*inodes = 0;
for (g = 0; g < fs->group_count; g++)
112152: 46 inc %esi <== NOT EXECUTED
112153: 3b 75 f0 cmp -0x10(%ebp),%esi <== NOT EXECUTED
112156: 7c e4 jl 11213c <rtems_rfs_group_usage+0x26><== NOT EXECUTED
*inodes +=
rtems_rfs_bitmap_map_size (&group->inode_bitmap) -
rtems_rfs_bitmap_map_free (&group->inode_bitmap);
}
if (*blocks > rtems_rfs_fs_blocks (fs))
112158: 8b 73 04 mov 0x4(%ebx),%esi <== NOT EXECUTED
11215b: 8b 01 mov (%ecx),%eax <== NOT EXECUTED
11215d: 39 f0 cmp %esi,%eax <== NOT EXECUTED
11215f: 76 02 jbe 112163 <rtems_rfs_group_usage+0x4d><== NOT EXECUTED
112161: 89 f0 mov %esi,%eax <== NOT EXECUTED
112163: 89 01 mov %eax,(%ecx) <== NOT EXECUTED
*blocks = rtems_rfs_fs_blocks (fs);
if (*inodes > rtems_rfs_fs_inodes (fs))
112165: 8b 4b 14 mov 0x14(%ebx),%ecx <== NOT EXECUTED
112168: 8b 02 mov (%edx),%eax <== NOT EXECUTED
11216a: 39 c8 cmp %ecx,%eax <== NOT EXECUTED
11216c: 76 02 jbe 112170 <rtems_rfs_group_usage+0x5a><== NOT EXECUTED
11216e: 89 c8 mov %ecx,%eax <== NOT EXECUTED
112170: 89 02 mov %eax,(%edx) <== NOT EXECUTED
*inodes = rtems_rfs_fs_inodes (fs);
return 0;
}
112172: 31 c0 xor %eax,%eax <== NOT EXECUTED
112174: 5a pop %edx <== NOT EXECUTED
112175: 5b pop %ebx <== NOT EXECUTED
112176: 5e pop %esi <== NOT EXECUTED
112177: 5f pop %edi <== NOT EXECUTED
112178: 5d pop %ebp <== NOT EXECUTED
112179: c3 ret <== NOT EXECUTED
001123a7 <rtems_rfs_inode_close>:
}
int
rtems_rfs_inode_close (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* handle)
{
1123a7: 55 push %ebp
1123a8: 89 e5 mov %esp,%ebp
1123aa: 56 push %esi
1123ab: 53 push %ebx
1123ac: 8b 5d 0c mov 0xc(%ebp),%ebx
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_INODE_CLOSE))
1123af: 50 push %eax
1123b0: 50 push %eax
1123b1: 6a 00 push $0x0
1123b3: 68 00 00 08 00 push $0x80000
1123b8: e8 df 14 00 00 call 11389c <rtems_rfs_trace>
1123bd: 83 c4 10 add $0x10,%esp
1123c0: 84 c0 test %al,%al
1123c2: 74 12 je 1123d6 <rtems_rfs_inode_close+0x2f><== ALWAYS TAKEN
printf ("rtems-rfs: inode-close: ino: %" PRIu32 "\n", handle->ino);
1123c4: 50 push %eax <== NOT EXECUTED
1123c5: 50 push %eax <== NOT EXECUTED
1123c6: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
1123c9: 68 e8 03 13 00 push $0x1303e8 <== NOT EXECUTED
1123ce: e8 69 df 00 00 call 12033c <printf> <== NOT EXECUTED
1123d3: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rc = rtems_rfs_inode_unload (fs, handle, true);
1123d6: 50 push %eax
1123d7: 6a 01 push $0x1
1123d9: 53 push %ebx
1123da: ff 75 08 pushl 0x8(%ebp)
1123dd: e8 fb fe ff ff call 1122dd <rtems_rfs_inode_unload>
1123e2: 89 c6 mov %eax,%esi
if ((rc == 0) && (handle->loads > 0))
1123e4: 83 c4 10 add $0x10,%esp
1123e7: 85 c0 test %eax,%eax
1123e9: 75 31 jne 11241c <rtems_rfs_inode_close+0x75><== NEVER TAKEN
1123eb: 83 7b 24 00 cmpl $0x0,0x24(%ebx)
1123ef: 7e 2b jle 11241c <rtems_rfs_inode_close+0x75><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_INODE_CLOSE))
1123f1: 50 push %eax <== NOT EXECUTED
1123f2: 50 push %eax <== NOT EXECUTED
1123f3: 6a 00 push $0x0 <== NOT EXECUTED
1123f5: 68 00 00 08 00 push $0x80000 <== NOT EXECUTED
1123fa: e8 9d 14 00 00 call 11389c <rtems_rfs_trace> <== NOT EXECUTED
1123ff: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
printf ("rtems-rfs: inode-close: bad loads number: %d\n",
handle->loads);
rc = EIO;
112402: 66 be 05 00 mov $0x5,%si <== NOT EXECUTED
rc = rtems_rfs_inode_unload (fs, handle, true);
if ((rc == 0) && (handle->loads > 0))
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_INODE_CLOSE))
112406: 84 c0 test %al,%al <== NOT EXECUTED
112408: 74 12 je 11241c <rtems_rfs_inode_close+0x75><== NOT EXECUTED
printf ("rtems-rfs: inode-close: bad loads number: %d\n",
11240a: 51 push %ecx <== NOT EXECUTED
11240b: 51 push %ecx <== NOT EXECUTED
11240c: ff 73 24 pushl 0x24(%ebx) <== NOT EXECUTED
11240f: 68 0a 04 13 00 push $0x13040a <== NOT EXECUTED
112414: e8 23 df 00 00 call 12033c <printf> <== NOT EXECUTED
112419: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
handle->loads);
rc = EIO;
}
handle->ino = 0;
11241c: c7 43 08 00 00 00 00 movl $0x0,0x8(%ebx)
return rc;
}
112423: 89 f0 mov %esi,%eax
112425: 8d 65 f8 lea -0x8(%ebp),%esp
112428: 5b pop %ebx
112429: 5e pop %esi
11242a: 5d pop %ebp
11242b: c3 ret
001126af <rtems_rfs_inode_create>:
uint16_t mode,
uint16_t links,
uid_t uid,
gid_t gid,
rtems_rfs_ino* ino)
{
1126af: 55 push %ebp
1126b0: 89 e5 mov %esp,%ebp
1126b2: 57 push %edi
1126b3: 56 push %esi
1126b4: 53 push %ebx
1126b5: 81 ec 84 00 00 00 sub $0x84,%esp
1126bb: 8b 5d 08 mov 0x8(%ebp),%ebx
1126be: 8b 45 18 mov 0x18(%ebp),%eax
1126c1: 66 89 85 78 ff ff ff mov %ax,-0x88(%ebp)
1126c8: 8b 45 1c mov 0x1c(%ebp),%eax
1126cb: 66 89 45 92 mov %ax,-0x6e(%ebp)
1126cf: 8b 45 20 mov 0x20(%ebp),%eax
1126d2: 66 89 45 90 mov %ax,-0x70(%ebp)
1126d6: 8b 45 24 mov 0x24(%ebp),%eax
1126d9: 66 89 45 8e mov %ax,-0x72(%ebp)
rtems_rfs_inode_handle parent_inode;
rtems_rfs_inode_handle inode;
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_INODE_CREATE))
1126dd: 6a 00 push $0x0
1126df: 68 00 00 40 00 push $0x400000
1126e4: e8 b3 11 00 00 call 11389c <rtems_rfs_trace>
1126e9: 83 c4 10 add $0x10,%esp
1126ec: 84 c0 test %al,%al
1126ee: 0f 84 a3 00 00 00 je 112797 <rtems_rfs_inode_create+0xe8><== ALWAYS TAKEN
{
const char* type = "unknown";
int c;
if (RTEMS_RFS_S_ISDIR (mode))
1126f4: 8b 85 78 ff ff ff mov -0x88(%ebp),%eax <== NOT EXECUTED
1126fa: 66 25 00 f0 and $0xf000,%ax <== NOT EXECUTED
1126fe: 66 3d 00 40 cmp $0x4000,%ax <== NOT EXECUTED
112702: 74 1f je 112723 <rtems_rfs_inode_create+0x74><== NOT EXECUTED
type = "dir";
else if (RTEMS_RFS_S_ISCHR (mode))
112704: 66 3d 00 20 cmp $0x2000,%ax <== NOT EXECUTED
112708: 74 20 je 11272a <rtems_rfs_inode_create+0x7b><== NOT EXECUTED
type = "char";
else if (RTEMS_RFS_S_ISBLK (mode))
11270a: 66 3d 00 60 cmp $0x6000,%ax <== NOT EXECUTED
11270e: 74 21 je 112731 <rtems_rfs_inode_create+0x82><== NOT EXECUTED
type = "block";
else if (RTEMS_RFS_S_ISREG (mode))
112710: 66 3d 00 80 cmp $0x8000,%ax <== NOT EXECUTED
112714: 74 22 je 112738 <rtems_rfs_inode_create+0x89><== NOT EXECUTED
type = "file";
else if (RTEMS_RFS_S_ISLNK (mode))
112716: 66 3d 00 a0 cmp $0xa000,%ax <== NOT EXECUTED
11271a: 74 23 je 11273f <rtems_rfs_inode_create+0x90><== NOT EXECUTED
rtems_rfs_inode_handle inode;
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_INODE_CREATE))
{
const char* type = "unknown";
11271c: bf 34 de 12 00 mov $0x12de34,%edi <== NOT EXECUTED
112721: eb 21 jmp 112744 <rtems_rfs_inode_create+0x95><== NOT EXECUTED
int c;
if (RTEMS_RFS_S_ISDIR (mode))
type = "dir";
112723: bf 64 04 13 00 mov $0x130464,%edi <== NOT EXECUTED
112728: eb 1a jmp 112744 <rtems_rfs_inode_create+0x95><== NOT EXECUTED
else if (RTEMS_RFS_S_ISCHR (mode))
type = "char";
11272a: bf 68 04 13 00 mov $0x130468,%edi <== NOT EXECUTED
11272f: eb 13 jmp 112744 <rtems_rfs_inode_create+0x95><== NOT EXECUTED
else if (RTEMS_RFS_S_ISBLK (mode))
type = "block";
112731: bf 01 fa 12 00 mov $0x12fa01,%edi <== NOT EXECUTED
112736: eb 0c jmp 112744 <rtems_rfs_inode_create+0x95><== NOT EXECUTED
else if (RTEMS_RFS_S_ISREG (mode))
type = "file";
112738: bf d5 0f 13 00 mov $0x130fd5,%edi <== NOT EXECUTED
11273d: eb 05 jmp 112744 <rtems_rfs_inode_create+0x95><== NOT EXECUTED
else if (RTEMS_RFS_S_ISLNK (mode))
type = "link";
11273f: bf a4 27 13 00 mov $0x1327a4,%edi <== NOT EXECUTED
printf("rtems-rfs: inode-create: parent:%" PRIu32 " name:", parent);
112744: 56 push %esi <== NOT EXECUTED
112745: 56 push %esi <== NOT EXECUTED
112746: ff 75 0c pushl 0xc(%ebp) <== NOT EXECUTED
112749: 68 6d 04 13 00 push $0x13046d <== NOT EXECUTED
11274e: e8 e9 db 00 00 call 12033c <printf> <== NOT EXECUTED
112753: 8b 75 10 mov 0x10(%ebp),%esi <== NOT EXECUTED
return rc;
}
int
rtems_rfs_inode_create (rtems_rfs_file_system* fs,
112756: 8b 45 14 mov 0x14(%ebp),%eax <== NOT EXECUTED
112759: 01 f0 add %esi,%eax <== NOT EXECUTED
11275b: 89 45 94 mov %eax,-0x6c(%ebp) <== NOT EXECUTED
11275e: eb 0d jmp 11276d <rtems_rfs_inode_create+0xbe><== NOT EXECUTED
type = "file";
else if (RTEMS_RFS_S_ISLNK (mode))
type = "link";
printf("rtems-rfs: inode-create: parent:%" PRIu32 " name:", parent);
for (c = 0; c < length; c++)
printf ("%c", name[c]);
112760: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
112763: 0f be 06 movsbl (%esi),%eax <== NOT EXECUTED
112766: 50 push %eax <== NOT EXECUTED
112767: e8 3c dd 00 00 call 1204a8 <putchar> <== NOT EXECUTED
11276c: 46 inc %esi <== NOT EXECUTED
11276d: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
else if (RTEMS_RFS_S_ISREG (mode))
type = "file";
else if (RTEMS_RFS_S_ISLNK (mode))
type = "link";
printf("rtems-rfs: inode-create: parent:%" PRIu32 " name:", parent);
for (c = 0; c < length; c++)
112770: 3b 75 94 cmp -0x6c(%ebp),%esi <== NOT EXECUTED
112773: 75 eb jne 112760 <rtems_rfs_inode_create+0xb1><== NOT EXECUTED
printf ("%c", name[c]);
printf (" type:%s mode:%04x (%03o)\n", type, mode, mode & ((1 << 10) - 1));
112775: 8b 85 78 ff ff ff mov -0x88(%ebp),%eax <== NOT EXECUTED
11277b: 25 ff 03 00 00 and $0x3ff,%eax <== NOT EXECUTED
112780: 50 push %eax <== NOT EXECUTED
112781: 0f b7 85 78 ff ff ff movzwl -0x88(%ebp),%eax <== NOT EXECUTED
112788: 50 push %eax <== NOT EXECUTED
112789: 57 push %edi <== NOT EXECUTED
11278a: 68 97 04 13 00 push $0x130497 <== NOT EXECUTED
11278f: e8 a8 db 00 00 call 12033c <printf> <== NOT EXECUTED
112794: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
/*
* The file type is field within the mode. Check we have a sane mode set.
*/
switch (mode & RTEMS_RFS_S_IFMT)
112797: 8b 85 78 ff ff ff mov -0x88(%ebp),%eax
11279d: 66 25 00 f0 and $0xf000,%ax
1127a1: 66 89 45 94 mov %ax,-0x6c(%ebp)
1127a5: 66 3d 00 60 cmp $0x6000,%ax
1127a9: 74 22 je 1127cd <rtems_rfs_inode_create+0x11e><== NEVER TAKEN
1127ab: 77 0c ja 1127b9 <rtems_rfs_inode_create+0x10a>
1127ad: 66 3d 00 20 cmp $0x2000,%ax
1127b1: 74 1a je 1127cd <rtems_rfs_inode_create+0x11e><== NEVER TAKEN
1127b3: 66 3d 00 40 cmp $0x4000,%ax
1127b7: eb 0e jmp 1127c7 <rtems_rfs_inode_create+0x118>
1127b9: 66 81 7d 94 00 80 cmpw $0x8000,-0x6c(%ebp)
1127bf: 74 0c je 1127cd <rtems_rfs_inode_create+0x11e>
1127c1: 66 81 7d 94 00 a0 cmpw $0xa000,-0x6c(%ebp)
1127c7: 0f 85 9f 01 00 00 jne 11296c <rtems_rfs_inode_create+0x2bd><== NEVER TAKEN
break;
default:
return EINVAL;
}
rc = rtems_rfs_inode_alloc (fs, parent, ino);
1127cd: 51 push %ecx
1127ce: ff 75 28 pushl 0x28(%ebp)
1127d1: ff 75 0c pushl 0xc(%ebp)
1127d4: 53 push %ebx
1127d5: e8 a2 f9 ff ff call 11217c <rtems_rfs_inode_alloc>
1127da: 89 c7 mov %eax,%edi
if (rc > 0)
1127dc: 83 c4 10 add $0x10,%esp
1127df: 85 c0 test %eax,%eax
1127e1: 0f 8f 8e 01 00 00 jg 112975 <rtems_rfs_inode_create+0x2c6>
return rc;
rc = rtems_rfs_inode_open (fs, *ino, &inode, true);
1127e7: 6a 01 push $0x1
1127e9: 8d 75 c0 lea -0x40(%ebp),%esi
1127ec: 56 push %esi
1127ed: 8b 45 28 mov 0x28(%ebp),%eax
1127f0: ff 30 pushl (%eax)
1127f2: 53 push %ebx
1127f3: e8 32 fa ff ff call 11222a <rtems_rfs_inode_open>
1127f8: 89 c7 mov %eax,%edi
if (rc > 0)
1127fa: 83 c4 10 add $0x10,%esp
1127fd: 85 c0 test %eax,%eax
1127ff: 7e 05 jle 112806 <rtems_rfs_inode_create+0x157><== ALWAYS TAKEN
112801: e9 54 01 00 00 jmp 11295a <rtems_rfs_inode_create+0x2ab><== NOT EXECUTED
{
rtems_rfs_inode_free (fs, *ino);
return rc;
}
rc = rtems_rfs_inode_initialise (&inode, links, mode, uid, gid);
112806: 83 ec 0c sub $0xc,%esp
112809: 0f b7 45 8e movzwl -0x72(%ebp),%eax
11280d: 50 push %eax
11280e: 0f b7 45 90 movzwl -0x70(%ebp),%eax
112812: 50 push %eax
112813: 0f b7 bd 78 ff ff ff movzwl -0x88(%ebp),%edi
11281a: 57 push %edi
11281b: 0f b7 45 92 movzwl -0x6e(%ebp),%eax
11281f: 50 push %eax
112820: 56 push %esi
112821: e8 5e fd ff ff call 112584 <rtems_rfs_inode_initialise>
112826: 89 c7 mov %eax,%edi
if (rc > 0)
112828: 83 c4 20 add $0x20,%esp
11282b: 85 c0 test %eax,%eax
11282d: 7e 10 jle 11283f <rtems_rfs_inode_create+0x190><== ALWAYS TAKEN
{
rtems_rfs_inode_close (fs, &inode);
11282f: 50 push %eax <== NOT EXECUTED
112830: 50 push %eax <== NOT EXECUTED
112831: 56 push %esi <== NOT EXECUTED
112832: 53 push %ebx <== NOT EXECUTED
112833: e8 6f fb ff ff call 1123a7 <rtems_rfs_inode_close> <== NOT EXECUTED
rtems_rfs_inode_free (fs, *ino);
112838: 58 pop %eax <== NOT EXECUTED
112839: 5a pop %edx <== NOT EXECUTED
11283a: e9 1d 01 00 00 jmp 11295c <rtems_rfs_inode_create+0x2ad><== NOT EXECUTED
/*
* Only handle the specifics of a directory. Let caller handle the others.
*
* The inode delete will free the inode.
*/
if (RTEMS_RFS_S_ISDIR (mode))
11283f: 66 81 7d 94 00 40 cmpw $0x4000,-0x6c(%ebp)
112845: 75 3e jne 112885 <rtems_rfs_inode_create+0x1d6>
{
rc = rtems_rfs_dir_add_entry (fs, &inode, ".", 1, *ino);
112847: 83 ec 0c sub $0xc,%esp
11284a: 8b 45 28 mov 0x28(%ebp),%eax
11284d: ff 30 pushl (%eax)
11284f: 6a 01 push $0x1
112851: 68 61 cd 12 00 push $0x12cd61
112856: 56 push %esi
112857: 53 push %ebx
112858: e8 d9 84 00 00 call 11ad36 <rtems_rfs_dir_add_entry>
11285d: 89 c7 mov %eax,%edi
if (rc == 0)
11285f: 83 c4 20 add $0x20,%esp
112862: 85 c0 test %eax,%eax
112864: 75 19 jne 11287f <rtems_rfs_inode_create+0x1d0><== NEVER TAKEN
rc = rtems_rfs_dir_add_entry (fs, &inode, "..", 2, parent);
112866: 83 ec 0c sub $0xc,%esp
112869: ff 75 0c pushl 0xc(%ebp)
11286c: 6a 02 push $0x2
11286e: 68 60 cd 12 00 push $0x12cd60
112873: 56 push %esi
112874: 53 push %ebx
112875: e8 bc 84 00 00 call 11ad36 <rtems_rfs_dir_add_entry>
11287a: 89 c7 mov %eax,%edi
11287c: 83 c4 20 add $0x20,%esp
if (rc > 0)
11287f: 85 ff test %edi,%edi
112881: 7e 02 jle 112885 <rtems_rfs_inode_create+0x1d6><== ALWAYS TAKEN
112883: eb 18 jmp 11289d <rtems_rfs_inode_create+0x1ee><== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
return rc;
}
}
rc = rtems_rfs_inode_open (fs, parent, &parent_inode, true);
112885: 6a 01 push $0x1
112887: 8d 45 98 lea -0x68(%ebp),%eax
11288a: 50 push %eax
11288b: ff 75 0c pushl 0xc(%ebp)
11288e: 53 push %ebx
11288f: e8 96 f9 ff ff call 11222a <rtems_rfs_inode_open>
112894: 89 c7 mov %eax,%edi
if (rc > 0)
112896: 83 c4 10 add $0x10,%esp
112899: 85 c0 test %eax,%eax
11289b: 7e 0a jle 1128a7 <rtems_rfs_inode_create+0x1f8><== ALWAYS TAKEN
{
rtems_rfs_inode_delete (fs, &inode);
11289d: 50 push %eax <== NOT EXECUTED
11289e: 50 push %eax <== NOT EXECUTED
11289f: 8d 75 c0 lea -0x40(%ebp),%esi <== NOT EXECUTED
1128a2: e9 8f 00 00 00 jmp 112936 <rtems_rfs_inode_create+0x287><== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
return rc;
}
rc = rtems_rfs_dir_add_entry (fs, &parent_inode, name, length, *ino);
1128a7: 83 ec 0c sub $0xc,%esp
1128aa: 8b 45 28 mov 0x28(%ebp),%eax
1128ad: ff 30 pushl (%eax)
1128af: ff 75 14 pushl 0x14(%ebp)
1128b2: ff 75 10 pushl 0x10(%ebp)
1128b5: 8d 45 98 lea -0x68(%ebp),%eax
1128b8: 50 push %eax
1128b9: 53 push %ebx
1128ba: e8 77 84 00 00 call 11ad36 <rtems_rfs_dir_add_entry>
1128bf: 89 c7 mov %eax,%edi
if (rc > 0)
1128c1: 83 c4 20 add $0x20,%esp
1128c4: 85 c0 test %eax,%eax
1128c6: 7e 1d jle 1128e5 <rtems_rfs_inode_create+0x236><== ALWAYS TAKEN
{
rtems_rfs_inode_delete (fs, &inode);
1128c8: 50 push %eax <== NOT EXECUTED
1128c9: 50 push %eax <== NOT EXECUTED
1128ca: 8d 75 c0 lea -0x40(%ebp),%esi <== NOT EXECUTED
1128cd: 56 push %esi <== NOT EXECUTED
1128ce: 53 push %ebx <== NOT EXECUTED
1128cf: e8 58 fb ff ff call 11242c <rtems_rfs_inode_delete><== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
1128d4: 58 pop %eax <== NOT EXECUTED
1128d5: 5a pop %edx <== NOT EXECUTED
1128d6: 56 push %esi <== NOT EXECUTED
1128d7: 53 push %ebx <== NOT EXECUTED
1128d8: e8 ca fa ff ff call 1123a7 <rtems_rfs_inode_close> <== NOT EXECUTED
rtems_rfs_inode_close (fs, &parent_inode);
1128dd: 59 pop %ecx <== NOT EXECUTED
1128de: 5e pop %esi <== NOT EXECUTED
1128df: 8d 45 98 lea -0x68(%ebp),%eax <== NOT EXECUTED
1128e2: 50 push %eax <== NOT EXECUTED
1128e3: eb 5b jmp 112940 <rtems_rfs_inode_create+0x291><== NOT EXECUTED
/*
* If the node is a directory update the parent link count as the
* new directory has the '..' link that points to the parent.
*/
if (RTEMS_RFS_S_ISDIR (mode))
1128e5: 66 81 7d 94 00 40 cmpw $0x4000,-0x6c(%ebp)
1128eb: 75 2f jne 11291c <rtems_rfs_inode_create+0x26d>
rtems_rfs_inode_set_links (&parent_inode,
rtems_rfs_inode_get_links (&parent_inode) + 1);
1128ed: 8b 55 a4 mov -0x5c(%ebp),%edx
*/
static inline uint16_t
rtems_rfs_inode_get_links (rtems_rfs_inode_handle* handle)
{
uint16_t links;
links = rtems_rfs_read_u16 (&handle->node->links);
1128f0: 0f b6 0a movzbl (%edx),%ecx
1128f3: c1 e1 08 shl $0x8,%ecx
1128f6: 0f b6 42 01 movzbl 0x1(%edx),%eax
1128fa: 09 c8 or %ecx,%eax
if (links == 0xffff)
links = 0;
1128fc: 31 c9 xor %ecx,%ecx
1128fe: 66 83 f8 ff cmp $0xffff,%ax
112902: 0f 95 c1 setne %cl
112905: f7 d9 neg %ecx
112907: 21 c8 and %ecx,%eax
/*
* If the node is a directory update the parent link count as the
* new directory has the '..' link that points to the parent.
*/
if (RTEMS_RFS_S_ISDIR (mode))
rtems_rfs_inode_set_links (&parent_inode,
112909: 40 inc %eax
* @prarm links The links.
*/
static inline void
rtems_rfs_inode_set_links (rtems_rfs_inode_handle* handle, uint16_t links)
{
rtems_rfs_write_u16 (&handle->node->links, links);
11290a: 89 c1 mov %eax,%ecx
11290c: 66 c1 e9 08 shr $0x8,%cx
112910: 88 0a mov %cl,(%edx)
112912: 8b 55 a4 mov -0x5c(%ebp),%edx
112915: 88 42 01 mov %al,0x1(%edx)
rtems_rfs_buffer_mark_dirty (&handle->buffer);
112918: c6 45 a8 01 movb $0x1,-0x58(%ebp)
rtems_rfs_inode_get_links (&parent_inode) + 1);
rc = rtems_rfs_inode_close (fs, &parent_inode);
11291c: 56 push %esi
11291d: 56 push %esi
11291e: 8d 45 98 lea -0x68(%ebp),%eax
112921: 50 push %eax
112922: 53 push %ebx
112923: e8 7f fa ff ff call 1123a7 <rtems_rfs_inode_close>
112928: 89 c7 mov %eax,%edi
if (rc > 0)
11292a: 83 c4 10 add $0x10,%esp
11292d: 85 c0 test %eax,%eax
11292f: 8d 75 c0 lea -0x40(%ebp),%esi
112932: 7e 14 jle 112948 <rtems_rfs_inode_create+0x299><== ALWAYS TAKEN
{
rtems_rfs_inode_delete (fs, &inode);
112934: 51 push %ecx <== NOT EXECUTED
112935: 51 push %ecx <== NOT EXECUTED
112936: 56 push %esi <== NOT EXECUTED
112937: 53 push %ebx <== NOT EXECUTED
112938: e8 ef fa ff ff call 11242c <rtems_rfs_inode_delete><== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
11293d: 58 pop %eax <== NOT EXECUTED
11293e: 5a pop %edx <== NOT EXECUTED
11293f: 56 push %esi <== NOT EXECUTED
112940: 53 push %ebx <== NOT EXECUTED
112941: e8 61 fa ff ff call 1123a7 <rtems_rfs_inode_close> <== NOT EXECUTED
112946: eb 1f jmp 112967 <rtems_rfs_inode_create+0x2b8><== NOT EXECUTED
return rc;
}
rc = rtems_rfs_inode_close (fs, &inode);
112948: 57 push %edi
112949: 57 push %edi
11294a: 56 push %esi
11294b: 53 push %ebx
11294c: e8 56 fa ff ff call 1123a7 <rtems_rfs_inode_close>
112951: 89 c7 mov %eax,%edi
if (rc > 0)
112953: 83 c4 10 add $0x10,%esp
112956: 85 c0 test %eax,%eax
112958: 7e 19 jle 112973 <rtems_rfs_inode_create+0x2c4><== ALWAYS TAKEN
{
rtems_rfs_inode_free (fs, *ino);
11295a: 51 push %ecx <== NOT EXECUTED
11295b: 51 push %ecx <== NOT EXECUTED
11295c: 8b 45 28 mov 0x28(%ebp),%eax <== NOT EXECUTED
11295f: ff 30 pushl (%eax) <== NOT EXECUTED
112961: 53 push %ebx <== NOT EXECUTED
112962: e8 36 f8 ff ff call 11219d <rtems_rfs_inode_free> <== NOT EXECUTED
112967: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11296a: eb 09 jmp 112975 <rtems_rfs_inode_create+0x2c6><== NOT EXECUTED
case RTEMS_RFS_S_IFBLK:
case RTEMS_RFS_S_IFREG:
case RTEMS_RFS_S_IFLNK:
break;
default:
return EINVAL;
11296c: bf 16 00 00 00 mov $0x16,%edi <== NOT EXECUTED
112971: eb 02 jmp 112975 <rtems_rfs_inode_create+0x2c6><== NOT EXECUTED
{
rtems_rfs_inode_free (fs, *ino);
return rc;
}
return 0;
112973: 31 ff xor %edi,%edi
}
112975: 89 f8 mov %edi,%eax
112977: 8d 65 f4 lea -0xc(%ebp),%esp
11297a: 5b pop %ebx
11297b: 5e pop %esi
11297c: 5f pop %edi
11297d: 5d pop %ebp
11297e: c3 ret
0011242c <rtems_rfs_inode_delete>:
}
int
rtems_rfs_inode_delete (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* handle)
{
11242c: 55 push %ebp
11242d: 89 e5 mov %esp,%ebp
11242f: 57 push %edi
112430: 56 push %esi
112431: 53 push %ebx
112432: 83 ec 64 sub $0x64,%esp
112435: 8b 75 08 mov 0x8(%ebp),%esi
112438: 8b 5d 0c mov 0xc(%ebp),%ebx
int rc = 0;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_INODE_DELETE))
11243b: 6a 00 push $0x0
11243d: 68 00 00 80 00 push $0x800000
112442: e8 55 14 00 00 call 11389c <rtems_rfs_trace>
112447: 83 c4 10 add $0x10,%esp
11244a: 84 c0 test %al,%al
11244c: 74 24 je 112472 <rtems_rfs_inode_delete+0x46><== ALWAYS TAKEN
printf("rtems-rfs: inode-delete: ino:%" PRIu32 " loaded:%s\n",
11244e: 83 7b 0c 00 cmpl $0x0,0xc(%ebx) <== NOT EXECUTED
112452: 74 07 je 11245b <rtems_rfs_inode_delete+0x2f><== NOT EXECUTED
112454: b8 3c de 12 00 mov $0x12de3c,%eax <== NOT EXECUTED
112459: eb 05 jmp 112460 <rtems_rfs_inode_delete+0x34><== NOT EXECUTED
11245b: b8 8f 07 13 00 mov $0x13078f,%eax <== NOT EXECUTED
112460: 52 push %edx <== NOT EXECUTED
112461: 50 push %eax <== NOT EXECUTED
112462: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
112465: 68 38 04 13 00 push $0x130438 <== NOT EXECUTED
11246a: e8 cd de 00 00 call 12033c <printf> <== NOT EXECUTED
11246f: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rtems_rfs_inode_ino (handle),
rtems_rfs_inode_is_loaded (handle) ? "yes" : "no");
if (rtems_rfs_inode_is_loaded (handle))
112472: 83 7b 0c 00 cmpl $0x0,0xc(%ebx)
112476: 74 67 je 1124df <rtems_rfs_inode_delete+0xb3><== NEVER TAKEN
rtems_rfs_block_map map;
/*
* Free the ino number.
*/
rc = rtems_rfs_inode_free (fs, handle->ino);
112478: 50 push %eax
112479: 50 push %eax
11247a: ff 73 08 pushl 0x8(%ebx)
11247d: 56 push %esi
11247e: e8 1a fd ff ff call 11219d <rtems_rfs_inode_free>
if (rc > 0)
112483: 83 c4 10 add $0x10,%esp
112486: 85 c0 test %eax,%eax
112488: 7f 57 jg 1124e1 <rtems_rfs_inode_delete+0xb5><== NEVER TAKEN
return rc;
/*
* Free the blocks the inode may have attached.
*/
rc = rtems_rfs_block_map_open (fs, handle, &map);
11248a: 50 push %eax
11248b: 8d 7d 98 lea -0x68(%ebp),%edi
11248e: 57 push %edi
11248f: 53 push %ebx
112490: 56 push %esi
112491: e8 0c 71 00 00 call 1195a2 <rtems_rfs_block_map_open>
if (rc == 0)
112496: 83 c4 10 add $0x10,%esp
112499: 85 c0 test %eax,%eax
11249b: 75 44 jne 1124e1 <rtems_rfs_inode_delete+0xb5><== NEVER TAKEN
{
int rrc;
rrc = rtems_rfs_block_map_free_all (fs, &map);
11249d: 50 push %eax
11249e: 50 push %eax
11249f: 57 push %edi
1124a0: 56 push %esi
1124a1: e8 0e 7b 00 00 call 119fb4 <rtems_rfs_block_map_free_all>
rc = rtems_rfs_block_map_close (fs, &map);
1124a6: 58 pop %eax
1124a7: 5a pop %edx
1124a8: 57 push %edi
1124a9: 56 push %esi
1124aa: e8 9a 72 00 00 call 119749 <rtems_rfs_block_map_close>
if (rc > 0)
rrc = rc;
memset (handle->node, 0xff, RTEMS_RFS_INODE_SIZE);
1124af: b9 0e 00 00 00 mov $0xe,%ecx
1124b4: 83 c8 ff or $0xffffffff,%eax
1124b7: 8b 7b 0c mov 0xc(%ebx),%edi
1124ba: f3 ab rep stos %eax,%es:(%edi)
rtems_rfs_buffer_mark_dirty (&handle->buffer);
1124bc: c6 43 10 01 movb $0x1,0x10(%ebx)
/*
* Do the release here to avoid the ctime field being set on a
* close. Also if there loads is greater then one then other loads
* active. Forcing the loads count to 0.
*/
rc = rtems_rfs_buffer_handle_release (fs, &handle->buffer);
1124c0: 59 pop %ecx
1124c1: 5f pop %edi
1124c2: 8d 43 10 lea 0x10(%ebx),%eax
1124c5: 50 push %eax
1124c6: 56 push %esi
1124c7: e8 65 7c 00 00 call 11a131 <rtems_rfs_buffer_handle_release>
handle->loads = 0;
1124cc: c7 43 24 00 00 00 00 movl $0x0,0x24(%ebx)
handle->node = NULL;
1124d3: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx)
1124da: 83 c4 10 add $0x10,%esp
1124dd: eb 02 jmp 1124e1 <rtems_rfs_inode_delete+0xb5>
int
rtems_rfs_inode_delete (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* handle)
{
int rc = 0;
1124df: 31 c0 xor %eax,%eax
handle->loads = 0;
handle->node = NULL;
}
}
return rc;
}
1124e1: 8d 65 f4 lea -0xc(%ebp),%esp
1124e4: 5b pop %ebx
1124e5: 5e pop %esi
1124e6: 5f pop %edi
1124e7: 5d pop %ebp
1124e8: c3 ret
0011d81d <rtems_rfs_inode_get_block.isra.0>:
* @param handle The inode handle.
* @param block The block number to return.
* @return uint32_t The block number.
*/
static inline uint32_t
rtems_rfs_inode_get_block (rtems_rfs_inode_handle* handle, int block)
11d81d: 55 push %ebp <== NOT EXECUTED
11d81e: 89 e5 mov %esp,%ebp <== NOT EXECUTED
{
return rtems_rfs_read_u32 (&handle->node->data.blocks[block]);
11d820: 8d 44 90 10 lea 0x10(%eax,%edx,4),%eax <== NOT EXECUTED
11d824: 8d 50 0c lea 0xc(%eax),%edx <== NOT EXECUTED
11d827: 0f b6 40 0c movzbl 0xc(%eax),%eax <== NOT EXECUTED
11d82b: c1 e0 18 shl $0x18,%eax <== NOT EXECUTED
11d82e: 0f b6 4a 01 movzbl 0x1(%edx),%ecx <== NOT EXECUTED
11d832: c1 e1 10 shl $0x10,%ecx <== NOT EXECUTED
11d835: 09 c8 or %ecx,%eax <== NOT EXECUTED
11d837: 0f b6 4a 03 movzbl 0x3(%edx),%ecx <== NOT EXECUTED
11d83b: 09 c8 or %ecx,%eax <== NOT EXECUTED
11d83d: 0f b6 52 02 movzbl 0x2(%edx),%edx <== NOT EXECUTED
11d841: c1 e2 08 shl $0x8,%edx <== NOT EXECUTED
11d844: 09 d0 or %edx,%eax <== NOT EXECUTED
}
11d846: 5d pop %ebp <== NOT EXECUTED
11d847: c3 ret <== NOT EXECUTED
001130b0 <rtems_rfs_inode_get_block.isra.12>:
* @param handle The inode handle.
* @param block The block number to return.
* @return uint32_t The block number.
*/
static inline uint32_t
rtems_rfs_inode_get_block (rtems_rfs_inode_handle* handle, int block)
1130b0: 55 push %ebp <== NOT EXECUTED
1130b1: 89 e5 mov %esp,%ebp <== NOT EXECUTED
{
return rtems_rfs_read_u32 (&handle->node->data.blocks[block]);
1130b3: 8d 44 90 10 lea 0x10(%eax,%edx,4),%eax <== NOT EXECUTED
1130b7: 8d 50 0c lea 0xc(%eax),%edx <== NOT EXECUTED
1130ba: 0f b6 40 0c movzbl 0xc(%eax),%eax <== NOT EXECUTED
1130be: c1 e0 18 shl $0x18,%eax <== NOT EXECUTED
1130c1: 0f b6 4a 01 movzbl 0x1(%edx),%ecx <== NOT EXECUTED
1130c5: c1 e1 10 shl $0x10,%ecx <== NOT EXECUTED
1130c8: 09 c8 or %ecx,%eax <== NOT EXECUTED
1130ca: 0f b6 4a 03 movzbl 0x3(%edx),%ecx <== NOT EXECUTED
1130ce: 09 c8 or %ecx,%eax <== NOT EXECUTED
1130d0: 0f b6 52 02 movzbl 0x2(%edx),%edx <== NOT EXECUTED
1130d4: c1 e2 08 shl $0x8,%edx <== NOT EXECUTED
1130d7: 09 d0 or %edx,%eax <== NOT EXECUTED
}
1130d9: 5d pop %ebp <== NOT EXECUTED
1130da: c3 ret <== NOT EXECUTED
0011e760 <rtems_rfs_inode_get_block.isra.5>:
* @param handle The inode handle.
* @param block The block number to return.
* @return uint32_t The block number.
*/
static inline uint32_t
rtems_rfs_inode_get_block (rtems_rfs_inode_handle* handle, int block)
11e760: 55 push %ebp <== NOT EXECUTED
11e761: 89 e5 mov %esp,%ebp <== NOT EXECUTED
{
return rtems_rfs_read_u32 (&handle->node->data.blocks[block]);
11e763: 8d 44 90 10 lea 0x10(%eax,%edx,4),%eax <== NOT EXECUTED
11e767: 8d 50 0c lea 0xc(%eax),%edx <== NOT EXECUTED
11e76a: 0f b6 40 0c movzbl 0xc(%eax),%eax <== NOT EXECUTED
11e76e: c1 e0 18 shl $0x18,%eax <== NOT EXECUTED
11e771: 0f b6 4a 01 movzbl 0x1(%edx),%ecx <== NOT EXECUTED
11e775: c1 e1 10 shl $0x10,%ecx <== NOT EXECUTED
11e778: 09 c8 or %ecx,%eax <== NOT EXECUTED
11e77a: 0f b6 4a 03 movzbl 0x3(%edx),%ecx <== NOT EXECUTED
11e77e: 09 c8 or %ecx,%eax <== NOT EXECUTED
11e780: 0f b6 52 02 movzbl 0x2(%edx),%edx <== NOT EXECUTED
11e784: c1 e2 08 shl $0x8,%edx <== NOT EXECUTED
11e787: 09 d0 or %edx,%eax <== NOT EXECUTED
}
11e789: 5d pop %ebp <== NOT EXECUTED
11e78a: c3 ret <== NOT EXECUTED
001121b2 <rtems_rfs_inode_load>:
}
int
rtems_rfs_inode_load (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* handle)
{
1121b2: 55 push %ebp
1121b3: 89 e5 mov %esp,%ebp
1121b5: 53 push %ebx
1121b6: 83 ec 0c sub $0xc,%esp
1121b9: 8b 5d 0c mov 0xc(%ebp),%ebx
if (rtems_rfs_trace (RTEMS_RFS_TRACE_INODE_LOAD))
1121bc: 6a 00 push $0x0
1121be: 68 00 00 10 00 push $0x100000
1121c3: e8 d4 16 00 00 call 11389c <rtems_rfs_trace>
1121c8: 83 c4 10 add $0x10,%esp
1121cb: 84 c0 test %al,%al
1121cd: 74 26 je 1121f5 <rtems_rfs_inode_load+0x43><== ALWAYS TAKEN
printf ("rtems-rfs: inode-load: ino=%" PRIu32 " loads=%i loaded=%s\n",
1121cf: 83 7b 0c 00 cmpl $0x0,0xc(%ebx) <== NOT EXECUTED
1121d3: 74 07 je 1121dc <rtems_rfs_inode_load+0x2a><== NOT EXECUTED
1121d5: b8 3c de 12 00 mov $0x12de3c,%eax <== NOT EXECUTED
1121da: eb 05 jmp 1121e1 <rtems_rfs_inode_load+0x2f><== NOT EXECUTED
1121dc: b8 8f 07 13 00 mov $0x13078f,%eax <== NOT EXECUTED
1121e1: 50 push %eax <== NOT EXECUTED
1121e2: ff 73 24 pushl 0x24(%ebx) <== NOT EXECUTED
1121e5: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
1121e8: 68 5f 03 13 00 push $0x13035f <== NOT EXECUTED
1121ed: e8 4a e1 00 00 call 12033c <printf> <== NOT EXECUTED
1121f2: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
/*
* An inode does not move so once loaded no need to do again.
*/
if (!rtems_rfs_inode_is_loaded (handle))
1121f5: 83 7b 0c 00 cmpl $0x0,0xc(%ebx)
1121f9: 75 25 jne 112220 <rtems_rfs_inode_load+0x6e>
{
int rc;
rc = rtems_rfs_buffer_handle_request (fs,&handle->buffer,
1121fb: 6a 01 push $0x1
1121fd: ff 73 1c pushl 0x1c(%ebx)
112200: 8d 43 10 lea 0x10(%ebx),%eax
112203: 50 push %eax
112204: ff 75 08 pushl 0x8(%ebp)
112207: e8 9e 80 00 00 call 11a2aa <rtems_rfs_buffer_handle_request>
handle->block, true);
if (rc > 0)
11220c: 83 c4 10 add $0x10,%esp
11220f: 85 c0 test %eax,%eax
112211: 7f 12 jg 112225 <rtems_rfs_inode_load+0x73><== NEVER TAKEN
return rc;
handle->node = rtems_rfs_buffer_data (&handle->buffer);
112213: 8b 53 18 mov 0x18(%ebx),%edx
handle->node += handle->offset;
112216: 6b 43 20 38 imul $0x38,0x20(%ebx),%eax
11221a: 03 42 1c add 0x1c(%edx),%eax
11221d: 89 43 0c mov %eax,0xc(%ebx)
}
handle->loads++;
112220: ff 43 24 incl 0x24(%ebx)
return 0;
112223: 31 c0 xor %eax,%eax
}
112225: 8b 5d fc mov -0x4(%ebp),%ebx
112228: c9 leave
112229: c3 ret
0011222a <rtems_rfs_inode_open>:
int
rtems_rfs_inode_open (rtems_rfs_file_system* fs,
rtems_rfs_ino ino,
rtems_rfs_inode_handle* handle,
bool load)
{
11222a: 55 push %ebp
11222b: 89 e5 mov %esp,%ebp
11222d: 57 push %edi
11222e: 56 push %esi
11222f: 53 push %ebx
112230: 83 ec 24 sub $0x24,%esp
112233: 8b 75 08 mov 0x8(%ebp),%esi
112236: 8b 7d 0c mov 0xc(%ebp),%edi
112239: 8b 5d 10 mov 0x10(%ebp),%ebx
11223c: 8a 45 14 mov 0x14(%ebp),%al
11223f: 88 45 e7 mov %al,-0x19(%ebp)
int group;
int gino;
int index;
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_INODE_OPEN))
112242: 6a 00 push $0x0
112244: 68 00 00 04 00 push $0x40000
112249: e8 4e 16 00 00 call 11389c <rtems_rfs_trace>
11224e: 83 c4 10 add $0x10,%esp
112251: 84 c0 test %al,%al
112253: 74 10 je 112265 <rtems_rfs_inode_open+0x3b><== ALWAYS TAKEN
printf ("rtems-rfs: inode-open: ino: %" PRIu32 "\n", ino);
112255: 50 push %eax <== NOT EXECUTED
112256: 50 push %eax <== NOT EXECUTED
112257: 57 push %edi <== NOT EXECUTED
112258: 68 92 03 13 00 push $0x130392 <== NOT EXECUTED
11225d: e8 da e0 00 00 call 12033c <printf> <== NOT EXECUTED
112262: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
if (ino == RTEMS_RFS_EMPTY_INO)
return EINVAL;
112265: b8 16 00 00 00 mov $0x16,%eax
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_INODE_OPEN))
printf ("rtems-rfs: inode-open: ino: %" PRIu32 "\n", ino);
if (ino == RTEMS_RFS_EMPTY_INO)
11226a: 85 ff test %edi,%edi
11226c: 74 67 je 1122d5 <rtems_rfs_inode_open+0xab><== NEVER TAKEN
return EINVAL;
if ((ino - RTEMS_RFS_ROOT_INO) > rtems_rfs_fs_inodes (fs))
11226e: 8d 4f ff lea -0x1(%edi),%ecx
112271: 3b 4e 14 cmp 0x14(%esi),%ecx
112274: 77 5f ja 1122d5 <rtems_rfs_inode_open+0xab><== NEVER TAKEN
return EINVAL;
handle->ino = ino;
112276: 89 7b 08 mov %edi,0x8(%ebx)
handle->node = NULL;
112279: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx)
handle->loads = 0;
112280: c7 43 24 00 00 00 00 movl $0x0,0x24(%ebx)
gino = ino - RTEMS_RFS_ROOT_INO;
group = gino / fs->group_inodes;
gino = gino % fs->group_inodes;
112287: 89 c8 mov %ecx,%eax
112289: 31 d2 xor %edx,%edx
11228b: f7 76 2c divl 0x2c(%esi)
11228e: 89 c1 mov %eax,%ecx
index = (gino / fs->inodes_per_block) + RTEMS_RFS_GROUP_INODE_BLOCK;
handle->offset = gino % fs->inodes_per_block;
112290: 89 d0 mov %edx,%eax
112292: 31 d2 xor %edx,%edx
112294: f7 76 30 divl 0x30(%esi)
112297: 89 53 20 mov %edx,0x20(%ebx)
handle->block = rtems_rfs_group_block (&fs->groups[group], index);
11229a: 6b c9 50 imul $0x50,%ecx,%ecx
11229d: 03 4e 20 add 0x20(%esi),%ecx
handle->loads = 0;
gino = ino - RTEMS_RFS_ROOT_INO;
group = gino / fs->group_inodes;
gino = gino % fs->group_inodes;
index = (gino / fs->inodes_per_block) + RTEMS_RFS_GROUP_INODE_BLOCK;
1122a0: 8b 11 mov (%ecx),%edx
handle->offset = gino % fs->inodes_per_block;
handle->block = rtems_rfs_group_block (&fs->groups[group], index);
1122a2: 8d 44 10 02 lea 0x2(%eax,%edx,1),%eax
1122a6: 89 43 1c mov %eax,0x1c(%ebx)
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
1122a9: c6 43 10 00 movb $0x0,0x10(%ebx)
handle->bnum = 0;
1122ad: c7 43 14 00 00 00 00 movl $0x0,0x14(%ebx)
handle->buffer = NULL;
1122b4: c7 43 18 00 00 00 00 movl $0x0,0x18(%ebx)
rc = rtems_rfs_buffer_handle_open (fs, &handle->buffer);
1122bb: 31 c0 xor %eax,%eax
if ((rc == 0) && load)
1122bd: 80 7d e7 00 cmpb $0x0,-0x19(%ebp)
1122c1: 74 12 je 1122d5 <rtems_rfs_inode_open+0xab><== NEVER TAKEN
rc = rtems_rfs_inode_load (fs, handle);
1122c3: 89 5d 0c mov %ebx,0xc(%ebp)
1122c6: 89 75 08 mov %esi,0x8(%ebp)
return rc;
}
1122c9: 8d 65 f4 lea -0xc(%ebp),%esp
1122cc: 5b pop %ebx
1122cd: 5e pop %esi
1122ce: 5f pop %edi
1122cf: 5d pop %ebp
handle->offset = gino % fs->inodes_per_block;
handle->block = rtems_rfs_group_block (&fs->groups[group], index);
rc = rtems_rfs_buffer_handle_open (fs, &handle->buffer);
if ((rc == 0) && load)
rc = rtems_rfs_inode_load (fs, handle);
1122d0: e9 dd fe ff ff jmp 1121b2 <rtems_rfs_inode_load>
return rc;
}
1122d5: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
1122d8: 5b pop %ebx <== NOT EXECUTED
1122d9: 5e pop %esi <== NOT EXECUTED
1122da: 5f pop %edi <== NOT EXECUTED
1122db: 5d pop %ebp <== NOT EXECUTED
1122dc: c3 ret <== NOT EXECUTED
001129d0 <rtems_rfs_inode_set_block>:
* @param block The block index.
* @param bno The block number.
*/
static inline void
rtems_rfs_inode_set_block (rtems_rfs_inode_handle* handle, int block, uint32_t bno)
{
1129d0: 55 push %ebp <== NOT EXECUTED
1129d1: 89 e5 mov %esp,%ebp <== NOT EXECUTED
1129d3: 56 push %esi <== NOT EXECUTED
1129d4: 53 push %ebx <== NOT EXECUTED
rtems_rfs_write_u32 (&handle->node->data.blocks[block], bno);
1129d5: 8d 14 95 10 00 00 00 lea 0x10(,%edx,4),%edx <== NOT EXECUTED
1129dc: 8b 70 0c mov 0xc(%eax),%esi <== NOT EXECUTED
1129df: 89 cb mov %ecx,%ebx <== NOT EXECUTED
1129e1: c1 eb 18 shr $0x18,%ebx <== NOT EXECUTED
1129e4: 88 5c 16 0c mov %bl,0xc(%esi,%edx,1) <== NOT EXECUTED
1129e8: 8b 70 0c mov 0xc(%eax),%esi <== NOT EXECUTED
1129eb: 89 cb mov %ecx,%ebx <== NOT EXECUTED
1129ed: c1 eb 10 shr $0x10,%ebx <== NOT EXECUTED
1129f0: 88 5c 16 0d mov %bl,0xd(%esi,%edx,1) <== NOT EXECUTED
1129f4: 89 cb mov %ecx,%ebx <== NOT EXECUTED
1129f6: c1 eb 08 shr $0x8,%ebx <== NOT EXECUTED
1129f9: 8b 70 0c mov 0xc(%eax),%esi <== NOT EXECUTED
1129fc: 88 5c 16 0e mov %bl,0xe(%esi,%edx,1) <== NOT EXECUTED
112a00: 8b 58 0c mov 0xc(%eax),%ebx <== NOT EXECUTED
112a03: 88 4c 13 0f mov %cl,0xf(%ebx,%edx,1) <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
112a07: c6 40 10 01 movb $0x1,0x10(%eax) <== NOT EXECUTED
}
112a0b: 5b pop %ebx <== NOT EXECUTED
112a0c: 5e pop %esi <== NOT EXECUTED
112a0d: 5d pop %ebp <== NOT EXECUTED
112a0e: c3 ret <== NOT EXECUTED
001124e9 <rtems_rfs_inode_time_stamp_now>:
int
rtems_rfs_inode_time_stamp_now (rtems_rfs_inode_handle* handle,
bool atime,
bool mtime)
{
1124e9: 55 push %ebp
1124ea: 89 e5 mov %esp,%ebp
1124ec: 56 push %esi
1124ed: 53 push %ebx
1124ee: 83 ec 10 sub $0x10,%esp
1124f1: 8b 5d 08 mov 0x8(%ebp),%ebx
1124f4: 8a 45 0c mov 0xc(%ebp),%al
1124f7: 88 45 f7 mov %al,-0x9(%ebp)
1124fa: 8a 4d 10 mov 0x10(%ebp),%cl
time_t now;
if (!rtems_rfs_inode_is_loaded (handle))
return ENXIO;
1124fd: b8 06 00 00 00 mov $0x6,%eax
rtems_rfs_inode_time_stamp_now (rtems_rfs_inode_handle* handle,
bool atime,
bool mtime)
{
time_t now;
if (!rtems_rfs_inode_is_loaded (handle))
112502: 83 7b 0c 00 cmpl $0x0,0xc(%ebx)
112506: 74 75 je 11257d <rtems_rfs_inode_time_stamp_now+0x94><== NEVER TAKEN
return ENXIO;
now = time (NULL);
112508: 83 ec 0c sub $0xc,%esp
11250b: 6a 00 push $0x0
11250d: 88 4d f0 mov %cl,-0x10(%ebp)
112510: e8 37 20 01 00 call 12454c <time>
112515: 89 c2 mov %eax,%edx
if (atime)
112517: 83 c4 10 add $0x10,%esp
11251a: 80 7d f7 00 cmpb $0x0,-0x9(%ebp)
11251e: 8a 4d f0 mov -0x10(%ebp),%cl
112521: 74 29 je 11254c <rtems_rfs_inode_time_stamp_now+0x63><== NEVER TAKEN
*/
static inline void
rtems_rfs_inode_set_atime (rtems_rfs_inode_handle* handle,
rtems_rfs_time atime)
{
rtems_rfs_write_u32 (&handle->node->atime, atime);
112523: 8b 73 0c mov 0xc(%ebx),%esi
112526: c1 e8 18 shr $0x18,%eax
112529: 88 46 10 mov %al,0x10(%esi)
11252c: 8b 73 0c mov 0xc(%ebx),%esi
11252f: 89 d0 mov %edx,%eax
112531: c1 e8 10 shr $0x10,%eax
112534: 88 46 11 mov %al,0x11(%esi)
112537: 8b 73 0c mov 0xc(%ebx),%esi
11253a: 89 d0 mov %edx,%eax
11253c: c1 e8 08 shr $0x8,%eax
11253f: 88 46 12 mov %al,0x12(%esi)
112542: 8b 43 0c mov 0xc(%ebx),%eax
112545: 88 50 13 mov %dl,0x13(%eax)
rtems_rfs_buffer_mark_dirty (&handle->buffer);
112548: c6 43 10 01 movb $0x1,0x10(%ebx)
rtems_rfs_inode_set_atime (handle, now);
if (mtime)
rtems_rfs_inode_set_mtime (handle, now);
return 0;
11254c: 31 c0 xor %eax,%eax
if (!rtems_rfs_inode_is_loaded (handle))
return ENXIO;
now = time (NULL);
if (atime)
rtems_rfs_inode_set_atime (handle, now);
if (mtime)
11254e: 84 c9 test %cl,%cl
112550: 74 2b je 11257d <rtems_rfs_inode_time_stamp_now+0x94><== NEVER TAKEN
*/
static inline void
rtems_rfs_inode_set_mtime (rtems_rfs_inode_handle* handle,
rtems_rfs_time mtime)
{
rtems_rfs_write_u32 (&handle->node->mtime, mtime);
112552: 8b 73 0c mov 0xc(%ebx),%esi
112555: 89 d1 mov %edx,%ecx
112557: c1 e9 18 shr $0x18,%ecx
11255a: 88 4e 14 mov %cl,0x14(%esi)
11255d: 8b 73 0c mov 0xc(%ebx),%esi
112560: 89 d1 mov %edx,%ecx
112562: c1 e9 10 shr $0x10,%ecx
112565: 88 4e 15 mov %cl,0x15(%esi)
112568: 8b 73 0c mov 0xc(%ebx),%esi
11256b: 89 d1 mov %edx,%ecx
11256d: c1 e9 08 shr $0x8,%ecx
112570: 88 4e 16 mov %cl,0x16(%esi)
112573: 8b 4b 0c mov 0xc(%ebx),%ecx
112576: 88 51 17 mov %dl,0x17(%ecx)
rtems_rfs_buffer_mark_dirty (&handle->buffer);
112579: c6 43 10 01 movb $0x1,0x10(%ebx)
rtems_rfs_inode_set_mtime (handle, now);
return 0;
}
11257d: 8d 65 f8 lea -0x8(%ebp),%esp
112580: 5b pop %ebx
112581: 5e pop %esi
112582: 5d pop %ebp
112583: c3 ret
001122dd <rtems_rfs_inode_unload>:
int
rtems_rfs_inode_unload (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* handle,
bool update_ctime)
{
1122dd: 55 push %ebp
1122de: 89 e5 mov %esp,%ebp
1122e0: 53 push %ebx
1122e1: 83 ec 1c sub $0x1c,%esp
1122e4: 8b 5d 0c mov 0xc(%ebp),%ebx
1122e7: 8a 45 10 mov 0x10(%ebp),%al
1122ea: 88 45 f7 mov %al,-0x9(%ebp)
int rc = 0;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_INODE_UNLOAD))
1122ed: 6a 00 push $0x0
1122ef: 68 00 00 20 00 push $0x200000
1122f4: e8 a3 15 00 00 call 11389c <rtems_rfs_trace>
1122f9: 83 c4 10 add $0x10,%esp
1122fc: 84 c0 test %al,%al
1122fe: 74 26 je 112326 <rtems_rfs_inode_unload+0x49><== ALWAYS TAKEN
printf ("rtems-rfs: inode-unload: ino=%" PRIu32 " loads=%i loaded=%s\n",
112300: 83 7b 0c 00 cmpl $0x0,0xc(%ebx) <== NOT EXECUTED
112304: 74 07 je 11230d <rtems_rfs_inode_unload+0x30><== NOT EXECUTED
112306: b8 3c de 12 00 mov $0x12de3c,%eax <== NOT EXECUTED
11230b: eb 05 jmp 112312 <rtems_rfs_inode_unload+0x35><== NOT EXECUTED
11230d: b8 8f 07 13 00 mov $0x13078f,%eax <== NOT EXECUTED
112312: 50 push %eax <== NOT EXECUTED
112313: ff 73 24 pushl 0x24(%ebx) <== NOT EXECUTED
112316: ff 73 08 pushl 0x8(%ebx) <== NOT EXECUTED
112319: 68 b3 03 13 00 push $0x1303b3 <== NOT EXECUTED
11231e: e8 19 e0 00 00 call 12033c <printf> <== NOT EXECUTED
112323: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
handle->ino, handle->loads,
rtems_rfs_inode_is_loaded (handle) ? "yes" : "no");
if (rtems_rfs_inode_is_loaded (handle))
112326: 83 7b 0c 00 cmpl $0x0,0xc(%ebx)
11232a: 75 04 jne 112330 <rtems_rfs_inode_unload+0x53>
int
rtems_rfs_inode_unload (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* handle,
bool update_ctime)
{
int rc = 0;
11232c: 31 c0 xor %eax,%eax
11232e: eb 72 jmp 1123a2 <rtems_rfs_inode_unload+0xc5>
handle->ino, handle->loads,
rtems_rfs_inode_is_loaded (handle) ? "yes" : "no");
if (rtems_rfs_inode_is_loaded (handle))
{
if (handle->loads == 0)
112330: 8b 53 24 mov 0x24(%ebx),%edx
return EIO;
112333: b8 05 00 00 00 mov $0x5,%eax
handle->ino, handle->loads,
rtems_rfs_inode_is_loaded (handle) ? "yes" : "no");
if (rtems_rfs_inode_is_loaded (handle))
{
if (handle->loads == 0)
112338: 85 d2 test %edx,%edx
11233a: 74 66 je 1123a2 <rtems_rfs_inode_unload+0xc5><== NEVER TAKEN
return EIO;
handle->loads--;
11233c: 8d 42 ff lea -0x1(%edx),%eax
11233f: 89 43 24 mov %eax,0x24(%ebx)
if (handle->loads == 0)
112342: 85 c0 test %eax,%eax
112344: 75 e6 jne 11232c <rtems_rfs_inode_unload+0x4f>
{
/*
* If the buffer is dirty it will be release. Also set the ctime.
*/
if (rtems_rfs_buffer_dirty (&handle->buffer) && update_ctime)
112346: 80 7b 10 00 cmpb $0x0,0x10(%ebx)
11234a: 74 3e je 11238a <rtems_rfs_inode_unload+0xad>
11234c: 80 7d f7 00 cmpb $0x0,-0x9(%ebp)
112350: 74 38 je 11238a <rtems_rfs_inode_unload+0xad><== NEVER TAKEN
rtems_rfs_inode_set_ctime (handle, time (NULL));
112352: 83 ec 0c sub $0xc,%esp
112355: 6a 00 push $0x0
112357: e8 f0 21 01 00 call 12454c <time>
*/
static inline void
rtems_rfs_inode_set_ctime (rtems_rfs_inode_handle* handle,
rtems_rfs_time ctime)
{
rtems_rfs_write_u32 (&handle->node->ctime, ctime);
11235c: 8b 53 0c mov 0xc(%ebx),%edx
11235f: 89 c1 mov %eax,%ecx
112361: c1 e9 18 shr $0x18,%ecx
112364: 88 4a 18 mov %cl,0x18(%edx)
112367: 8b 53 0c mov 0xc(%ebx),%edx
11236a: 89 c1 mov %eax,%ecx
11236c: c1 e9 10 shr $0x10,%ecx
11236f: 88 4a 19 mov %cl,0x19(%edx)
112372: 8b 53 0c mov 0xc(%ebx),%edx
112375: 89 c1 mov %eax,%ecx
112377: c1 e9 08 shr $0x8,%ecx
11237a: 88 4a 1a mov %cl,0x1a(%edx)
11237d: 8b 53 0c mov 0xc(%ebx),%edx
112380: 88 42 1b mov %al,0x1b(%edx)
rtems_rfs_buffer_mark_dirty (&handle->buffer);
112383: c6 43 10 01 movb $0x1,0x10(%ebx)
112387: 83 c4 10 add $0x10,%esp
rc = rtems_rfs_buffer_handle_release (fs, &handle->buffer);
11238a: 52 push %edx
11238b: 52 push %edx
11238c: 8d 43 10 lea 0x10(%ebx),%eax
11238f: 50 push %eax
112390: ff 75 08 pushl 0x8(%ebp)
112393: e8 99 7d 00 00 call 11a131 <rtems_rfs_buffer_handle_release>
handle->node = NULL;
112398: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx)
11239f: 83 c4 10 add $0x10,%esp
}
}
return rc;
}
1123a2: 8b 5d fc mov -0x4(%ebp),%ebx
1123a5: c9 leave
1123a6: c3 ret
0011cd78 <rtems_rfs_link>:
const char* name,
int length,
rtems_rfs_ino parent,
rtems_rfs_ino target,
bool link_dir)
{
11cd78: 55 push %ebp
11cd79: 89 e5 mov %esp,%ebp
11cd7b: 57 push %edi
11cd7c: 56 push %esi
11cd7d: 53 push %ebx
11cd7e: 83 ec 74 sub $0x74,%esp
11cd81: 8b 5d 08 mov 0x8(%ebp),%ebx
11cd84: 8b 75 18 mov 0x18(%ebp),%esi
11cd87: 8a 55 1c mov 0x1c(%ebp),%dl
11cd8a: 88 55 97 mov %dl,-0x69(%ebp)
rtems_rfs_inode_handle parent_inode;
rtems_rfs_inode_handle target_inode;
uint16_t links;
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_LINK))
11cd8d: 6a 00 push $0x0
11cd8f: 68 00 00 00 01 push $0x1000000
11cd94: e8 03 6b ff ff call 11389c <rtems_rfs_trace>
11cd99: 83 c4 10 add $0x10,%esp
11cd9c: 84 c0 test %al,%al
11cd9e: 74 3f je 11cddf <rtems_rfs_link+0x67> <== ALWAYS TAKEN
{
int c;
printf ("rtems-rfs: link: parent(%" PRIu32 ") -> ", parent);
11cda0: 50 push %eax <== NOT EXECUTED
11cda1: 50 push %eax <== NOT EXECUTED
11cda2: ff 75 14 pushl 0x14(%ebp) <== NOT EXECUTED
11cda5: 68 59 1f 13 00 push $0x131f59 <== NOT EXECUTED
11cdaa: e8 8d 35 00 00 call 12033c <printf> <== NOT EXECUTED
for (c = 0; c < length; c++)
11cdaf: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11cdb2: 31 ff xor %edi,%edi <== NOT EXECUTED
11cdb4: eb 14 jmp 11cdca <rtems_rfs_link+0x52> <== NOT EXECUTED
printf ("%c", name[c]);
11cdb6: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11cdb9: 8b 55 0c mov 0xc(%ebp),%edx <== NOT EXECUTED
11cdbc: 0f be 04 3a movsbl (%edx,%edi,1),%eax <== NOT EXECUTED
11cdc0: 50 push %eax <== NOT EXECUTED
11cdc1: e8 e2 36 00 00 call 1204a8 <putchar> <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_LINK))
{
int c;
printf ("rtems-rfs: link: parent(%" PRIu32 ") -> ", parent);
for (c = 0; c < length; c++)
11cdc6: 47 inc %edi <== NOT EXECUTED
11cdc7: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11cdca: 3b 7d 10 cmp 0x10(%ebp),%edi <== NOT EXECUTED
11cdcd: 7c e7 jl 11cdb6 <rtems_rfs_link+0x3e> <== NOT EXECUTED
printf ("%c", name[c]);
printf ("(%" PRIu32 ")\n", target);
11cdcf: 57 push %edi <== NOT EXECUTED
11cdd0: 57 push %edi <== NOT EXECUTED
11cdd1: 56 push %esi <== NOT EXECUTED
11cdd2: 68 9e 1f 13 00 push $0x131f9e <== NOT EXECUTED
11cdd7: e8 60 35 00 00 call 12033c <printf> <== NOT EXECUTED
11cddc: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
rc = rtems_rfs_inode_open (fs, target, &target_inode, true);
11cddf: 6a 01 push $0x1
11cde1: 8d 4d c0 lea -0x40(%ebp),%ecx
11cde4: 51 push %ecx
11cde5: 56 push %esi
11cde6: 53 push %ebx
11cde7: 89 4d 90 mov %ecx,-0x70(%ebp)
11cdea: e8 3b 54 ff ff call 11222a <rtems_rfs_inode_open>
11cdef: 89 c7 mov %eax,%edi
if (rc)
11cdf1: 83 c4 10 add $0x10,%esp
11cdf4: 85 c0 test %eax,%eax
11cdf6: 8b 4d 90 mov -0x70(%ebp),%ecx
11cdf9: 0f 85 fe 00 00 00 jne 11cefd <rtems_rfs_link+0x185> <== NEVER TAKEN
/*
* If the target inode is a directory and we cannot link directories
* return a not supported error code.
*/
if (!link_dir && S_ISDIR (rtems_rfs_inode_get_mode (&target_inode)))
11cdff: 80 7d 97 00 cmpb $0x0,-0x69(%ebp)
11ce03: 75 29 jne 11ce2e <rtems_rfs_link+0xb6> <== NEVER TAKEN
11ce05: 8b 45 cc mov -0x34(%ebp),%eax
11ce08: 0f b6 40 02 movzbl 0x2(%eax),%eax
11ce0c: c1 e0 08 shl $0x8,%eax
11ce0f: 66 25 00 f0 and $0xf000,%ax
11ce13: 66 3d 00 40 cmp $0x4000,%ax
11ce17: 75 15 jne 11ce2e <rtems_rfs_link+0xb6> <== ALWAYS TAKEN
{
rtems_rfs_inode_close (fs, &target_inode);
11ce19: 56 push %esi <== NOT EXECUTED
11ce1a: 56 push %esi <== NOT EXECUTED
11ce1b: 51 push %ecx <== NOT EXECUTED
11ce1c: 53 push %ebx <== NOT EXECUTED
11ce1d: e8 85 55 ff ff call 1123a7 <rtems_rfs_inode_close> <== NOT EXECUTED
11ce22: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
return ENOTSUP;
11ce25: 66 bf 86 00 mov $0x86,%di <== NOT EXECUTED
11ce29: e9 cf 00 00 00 jmp 11cefd <rtems_rfs_link+0x185> <== NOT EXECUTED
}
rc = rtems_rfs_inode_open (fs, parent, &parent_inode, true);
11ce2e: 6a 01 push $0x1
11ce30: 8d 4d 98 lea -0x68(%ebp),%ecx
11ce33: 51 push %ecx
11ce34: ff 75 14 pushl 0x14(%ebp)
11ce37: 53 push %ebx
11ce38: 89 4d 90 mov %ecx,-0x70(%ebp)
11ce3b: e8 ea 53 ff ff call 11222a <rtems_rfs_inode_open>
11ce40: 89 c7 mov %eax,%edi
if (rc)
11ce42: 83 c4 10 add $0x10,%esp
11ce45: 85 c0 test %eax,%eax
11ce47: 8b 4d 90 mov -0x70(%ebp),%ecx
11ce4a: 74 04 je 11ce50 <rtems_rfs_link+0xd8> <== ALWAYS TAKEN
{
rtems_rfs_inode_close (fs, &target_inode);
11ce4c: 51 push %ecx <== NOT EXECUTED
11ce4d: 51 push %ecx <== NOT EXECUTED
11ce4e: eb 2b jmp 11ce7b <rtems_rfs_link+0x103> <== NOT EXECUTED
return rc;
}
rc = rtems_rfs_dir_add_entry (fs, &parent_inode, name, length, target);
11ce50: 83 ec 0c sub $0xc,%esp
11ce53: 56 push %esi
11ce54: ff 75 10 pushl 0x10(%ebp)
11ce57: ff 75 0c pushl 0xc(%ebp)
11ce5a: 51 push %ecx
11ce5b: 53 push %ebx
11ce5c: 89 4d 90 mov %ecx,-0x70(%ebp)
11ce5f: e8 d2 de ff ff call 11ad36 <rtems_rfs_dir_add_entry>
11ce64: 89 c7 mov %eax,%edi
if (rc > 0)
11ce66: 83 c4 20 add $0x20,%esp
11ce69: 85 c0 test %eax,%eax
11ce6b: 8b 4d 90 mov -0x70(%ebp),%ecx
11ce6e: 7e 10 jle 11ce80 <rtems_rfs_link+0x108> <== ALWAYS TAKEN
{
rtems_rfs_inode_close (fs, &parent_inode);
11ce70: 50 push %eax <== NOT EXECUTED
11ce71: 50 push %eax <== NOT EXECUTED
11ce72: 51 push %ecx <== NOT EXECUTED
11ce73: 53 push %ebx <== NOT EXECUTED
11ce74: e8 2e 55 ff ff call 1123a7 <rtems_rfs_inode_close> <== NOT EXECUTED
rtems_rfs_inode_close (fs, &target_inode);
11ce79: 58 pop %eax <== NOT EXECUTED
11ce7a: 5a pop %edx <== NOT EXECUTED
11ce7b: 8d 45 c0 lea -0x40(%ebp),%eax <== NOT EXECUTED
11ce7e: eb 66 jmp 11cee6 <rtems_rfs_link+0x16e> <== NOT EXECUTED
return rc;
}
links = rtems_rfs_inode_get_links (&target_inode) + 1;
11ce80: 8b 7d cc mov -0x34(%ebp),%edi
*/
static inline uint16_t
rtems_rfs_inode_get_links (rtems_rfs_inode_handle* handle)
{
uint16_t links;
links = rtems_rfs_read_u16 (&handle->node->links);
11ce83: 0f b6 37 movzbl (%edi),%esi
11ce86: c1 e6 08 shl $0x8,%esi
11ce89: 0f b6 47 01 movzbl 0x1(%edi),%eax
11ce8d: 09 f0 or %esi,%eax
if (links == 0xffff)
links = 0;
11ce8f: 31 d2 xor %edx,%edx
11ce91: 66 83 f8 ff cmp $0xffff,%ax
11ce95: 0f 95 c2 setne %dl
11ce98: 89 d6 mov %edx,%esi
11ce9a: f7 de neg %esi
11ce9c: 21 f0 and %esi,%eax
11ce9e: 40 inc %eax
* @prarm links The links.
*/
static inline void
rtems_rfs_inode_set_links (rtems_rfs_inode_handle* handle, uint16_t links)
{
rtems_rfs_write_u16 (&handle->node->links, links);
11ce9f: 89 c6 mov %eax,%esi
11cea1: 66 c1 ee 08 shr $0x8,%si
11cea5: 89 f2 mov %esi,%edx
11cea7: 88 17 mov %dl,(%edi)
11cea9: 8b 55 cc mov -0x34(%ebp),%edx
11ceac: 88 42 01 mov %al,0x1(%edx)
rtems_rfs_buffer_mark_dirty (&handle->buffer);
11ceaf: c6 45 d0 01 movb $0x1,-0x30(%ebp)
rtems_rfs_inode_set_links (&target_inode, links);
rc = rtems_rfs_inode_time_stamp_now (&parent_inode, true, true);
11ceb3: 57 push %edi
11ceb4: 6a 01 push $0x1
11ceb6: 6a 01 push $0x1
11ceb8: 51 push %ecx
11ceb9: 89 4d 90 mov %ecx,-0x70(%ebp)
11cebc: e8 28 56 ff ff call 1124e9 <rtems_rfs_inode_time_stamp_now>
11cec1: 89 c7 mov %eax,%edi
if (rc > 0)
11cec3: 83 c4 10 add $0x10,%esp
11cec6: 85 c0 test %eax,%eax
11cec8: 8b 4d 90 mov -0x70(%ebp),%ecx
11cecb: 7e 02 jle 11cecf <rtems_rfs_link+0x157> <== ALWAYS TAKEN
11cecd: eb a1 jmp 11ce70 <rtems_rfs_link+0xf8> <== NOT EXECUTED
rtems_rfs_inode_close (fs, &parent_inode);
rtems_rfs_inode_close (fs, &target_inode);
return rc;
}
rc = rtems_rfs_inode_close (fs, &parent_inode);
11cecf: 56 push %esi
11ced0: 56 push %esi
11ced1: 51 push %ecx
11ced2: 53 push %ebx
11ced3: e8 cf 54 ff ff call 1123a7 <rtems_rfs_inode_close>
11ced8: 89 c7 mov %eax,%edi
if (rc > 0)
11ceda: 83 c4 10 add $0x10,%esp
11cedd: 85 c0 test %eax,%eax
11cedf: 8d 45 c0 lea -0x40(%ebp),%eax
11cee2: 7e 0b jle 11ceef <rtems_rfs_link+0x177> <== ALWAYS TAKEN
{
rtems_rfs_inode_close (fs, &target_inode);
11cee4: 51 push %ecx <== NOT EXECUTED
11cee5: 51 push %ecx <== NOT EXECUTED
11cee6: 50 push %eax <== NOT EXECUTED
11cee7: 53 push %ebx <== NOT EXECUTED
11cee8: e8 ba 54 ff ff call 1123a7 <rtems_rfs_inode_close> <== NOT EXECUTED
11ceed: eb 0b jmp 11cefa <rtems_rfs_link+0x182> <== NOT EXECUTED
return rc;
}
rc = rtems_rfs_inode_close (fs, &target_inode);
11ceef: 52 push %edx
11cef0: 52 push %edx
11cef1: 50 push %eax
11cef2: 53 push %ebx
11cef3: e8 af 54 ff ff call 1123a7 <rtems_rfs_inode_close>
11cef8: 89 c7 mov %eax,%edi
11cefa: 83 c4 10 add $0x10,%esp
return rc;
}
11cefd: 89 f8 mov %edi,%eax
11ceff: 8d 65 f4 lea -0xc(%ebp),%esp
11cf02: 5b pop %ebx
11cf03: 5e pop %esi
11cf04: 5f pop %edi
11cf05: 5d pop %ebp
11cf06: c3 ret
0011d6f8 <rtems_rfs_mutex_create>:
RTEMS_INHERIT_PRIORITY | RTEMS_NO_PRIORITY_CEILING | RTEMS_LOCAL)
#endif
int
rtems_rfs_mutex_create (rtems_rfs_mutex* mutex)
{
11d6f8: 55 push %ebp
11d6f9: 89 e5 mov %esp,%ebp
11d6fb: 56 push %esi
11d6fc: 53 push %ebx
#if __rtems__
rtems_status_code sc;
sc = rtems_semaphore_create (rtems_build_name ('R', 'F', 'S', 'm'),
11d6fd: 83 ec 0c sub $0xc,%esp
11d700: ff 75 08 pushl 0x8(%ebp)
11d703: 6a 00 push $0x0
11d705: 6a 54 push $0x54
11d707: 6a 01 push $0x1
11d709: 68 6d 53 46 52 push $0x5246536d
11d70e: e8 55 03 ff ff call 10da68 <rtems_semaphore_create>
11d713: 89 c6 mov %eax,%esi
1, RTEMS_RFS_MUTEX_ATTRIBS, 0,
mutex);
if (sc != RTEMS_SUCCESSFUL)
11d715: 83 c4 20 add $0x20,%esp
printf ("rtems-rfs: mutex: open failed: %s\n",
rtems_status_text (sc));
return EIO;
}
#endif
return 0;
11d718: 31 db xor %ebx,%ebx
#if __rtems__
rtems_status_code sc;
sc = rtems_semaphore_create (rtems_build_name ('R', 'F', 'S', 'm'),
1, RTEMS_RFS_MUTEX_ATTRIBS, 0,
mutex);
if (sc != RTEMS_SUCCESSFUL)
11d71a: 85 c0 test %eax,%eax
11d71c: 74 2d je 11d74b <rtems_rfs_mutex_create+0x53><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_MUTEX))
11d71e: 50 push %eax <== NOT EXECUTED
11d71f: 50 push %eax <== NOT EXECUTED
11d720: 6a 00 push $0x0 <== NOT EXECUTED
11d722: 6a 04 push $0x4 <== NOT EXECUTED
11d724: e8 73 61 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11d729: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
printf ("rtems-rfs: mutex: open failed: %s\n",
rtems_status_text (sc));
return EIO;
11d72c: b3 05 mov $0x5,%bl <== NOT EXECUTED
sc = rtems_semaphore_create (rtems_build_name ('R', 'F', 'S', 'm'),
1, RTEMS_RFS_MUTEX_ATTRIBS, 0,
mutex);
if (sc != RTEMS_SUCCESSFUL)
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_MUTEX))
11d72e: 84 c0 test %al,%al <== NOT EXECUTED
11d730: 74 19 je 11d74b <rtems_rfs_mutex_create+0x53><== NOT EXECUTED
printf ("rtems-rfs: mutex: open failed: %s\n",
11d732: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11d735: 56 push %esi <== NOT EXECUTED
11d736: e8 e1 c5 fe ff call 109d1c <rtems_status_text> <== NOT EXECUTED
11d73b: 5a pop %edx <== NOT EXECUTED
11d73c: 59 pop %ecx <== NOT EXECUTED
11d73d: 50 push %eax <== NOT EXECUTED
11d73e: 68 77 21 13 00 push $0x132177 <== NOT EXECUTED
11d743: e8 f4 2b 00 00 call 12033c <printf> <== NOT EXECUTED
11d748: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rtems_status_text (sc));
return EIO;
}
#endif
return 0;
}
11d74b: 89 d8 mov %ebx,%eax
11d74d: 8d 65 f8 lea -0x8(%ebp),%esp
11d750: 5b pop %ebx
11d751: 5e pop %esi
11d752: 5d pop %ebp
11d753: c3 ret
0011d754 <rtems_rfs_mutex_destroy>:
int
rtems_rfs_mutex_destroy (rtems_rfs_mutex* mutex)
{
11d754: 55 push %ebp
11d755: 89 e5 mov %esp,%ebp
11d757: 56 push %esi
11d758: 53 push %ebx
#if __rtems__
rtems_status_code sc;
sc = rtems_semaphore_delete (*mutex);
11d759: 83 ec 0c sub $0xc,%esp
11d75c: 8b 45 08 mov 0x8(%ebp),%eax
11d75f: ff 30 pushl (%eax)
11d761: e8 a2 04 ff ff call 10dc08 <rtems_semaphore_delete>
11d766: 89 c6 mov %eax,%esi
if (sc != RTEMS_SUCCESSFUL)
11d768: 83 c4 10 add $0x10,%esp
printf ("rtems-rfs: mutex: close failed: %s\n",
rtems_status_text (sc));
return EIO;
}
#endif
return 0;
11d76b: 31 db xor %ebx,%ebx
rtems_rfs_mutex_destroy (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc;
sc = rtems_semaphore_delete (*mutex);
if (sc != RTEMS_SUCCESSFUL)
11d76d: 85 c0 test %eax,%eax
11d76f: 74 2d je 11d79e <rtems_rfs_mutex_destroy+0x4a><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_MUTEX))
11d771: 50 push %eax <== NOT EXECUTED
11d772: 50 push %eax <== NOT EXECUTED
11d773: 6a 00 push $0x0 <== NOT EXECUTED
11d775: 6a 04 push $0x4 <== NOT EXECUTED
11d777: e8 20 61 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11d77c: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
printf ("rtems-rfs: mutex: close failed: %s\n",
rtems_status_text (sc));
return EIO;
11d77f: b3 05 mov $0x5,%bl <== NOT EXECUTED
#if __rtems__
rtems_status_code sc;
sc = rtems_semaphore_delete (*mutex);
if (sc != RTEMS_SUCCESSFUL)
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_MUTEX))
11d781: 84 c0 test %al,%al <== NOT EXECUTED
11d783: 74 19 je 11d79e <rtems_rfs_mutex_destroy+0x4a><== NOT EXECUTED
printf ("rtems-rfs: mutex: close failed: %s\n",
11d785: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11d788: 56 push %esi <== NOT EXECUTED
11d789: e8 8e c5 fe ff call 109d1c <rtems_status_text> <== NOT EXECUTED
11d78e: 5a pop %edx <== NOT EXECUTED
11d78f: 59 pop %ecx <== NOT EXECUTED
11d790: 50 push %eax <== NOT EXECUTED
11d791: 68 9a 21 13 00 push $0x13219a <== NOT EXECUTED
11d796: e8 a1 2b 00 00 call 12033c <printf> <== NOT EXECUTED
11d79b: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rtems_status_text (sc));
return EIO;
}
#endif
return 0;
}
11d79e: 89 d8 mov %ebx,%eax
11d7a0: 8d 65 f8 lea -0x8(%ebp),%esp
11d7a3: 5b pop %ebx
11d7a4: 5e pop %esi
11d7a5: 5d pop %ebp
11d7a6: c3 ret
0011dbf4 <rtems_rfs_mutex_lock.isra.0>:
* @param mutex The mutex to lock.
* @retval true The mutex is locked.
* @retval false The mutex could not be locked.
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
11dbf4: 55 push %ebp
11dbf5: 89 e5 mov %esp,%ebp
11dbf7: 56 push %esi
11dbf8: 53 push %ebx
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
11dbf9: 56 push %esi
11dbfa: 6a 00 push $0x0
11dbfc: 6a 00 push $0x0
11dbfe: 50 push %eax
11dbff: e8 94 00 ff ff call 10dc98 <rtems_semaphore_obtain>
11dc04: 89 c6 mov %eax,%esi
if (sc != RTEMS_SUCCESSFUL)
11dc06: 83 c4 10 add $0x10,%esp
rtems_status_text (sc));
#endif
return EIO;
}
#endif
return 0;
11dc09: 31 db xor %ebx,%ebx
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
if (sc != RTEMS_SUCCESSFUL)
11dc0b: 85 c0 test %eax,%eax
11dc0d: 74 32 je 11dc41 <rtems_rfs_mutex_lock.isra.0+0x4d><== ALWAYS TAKEN
{
#if RTEMS_RFS_TRACE
if (rtems_rfs_trace (RTEMS_RFS_TRACE_MUTEX))
11dc0f: 53 push %ebx <== NOT EXECUTED
11dc10: 53 push %ebx <== NOT EXECUTED
11dc11: 6a 00 push $0x0 <== NOT EXECUTED
11dc13: 6a 04 push $0x4 <== NOT EXECUTED
11dc15: e8 82 5c ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11dc1a: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
printf ("rtems-rfs: mutex: obtain failed: %s\n",
rtems_status_text (sc));
#endif
return EIO;
11dc1d: bb 05 00 00 00 mov $0x5,%ebx <== NOT EXECUTED
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
if (sc != RTEMS_SUCCESSFUL)
{
#if RTEMS_RFS_TRACE
if (rtems_rfs_trace (RTEMS_RFS_TRACE_MUTEX))
11dc22: 84 c0 test %al,%al <== NOT EXECUTED
11dc24: 74 1b je 11dc41 <rtems_rfs_mutex_lock.isra.0+0x4d><== NOT EXECUTED
printf ("rtems-rfs: mutex: obtain failed: %s\n",
11dc26: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11dc29: 56 push %esi <== NOT EXECUTED
11dc2a: e8 ed c0 fe ff call 109d1c <rtems_status_text> <== NOT EXECUTED
11dc2f: 5a pop %edx <== NOT EXECUTED
11dc30: 59 pop %ecx <== NOT EXECUTED
11dc31: 50 push %eax <== NOT EXECUTED
11dc32: 68 d8 04 13 00 push $0x1304d8 <== NOT EXECUTED
11dc37: e8 00 27 00 00 call 12033c <printf> <== NOT EXECUTED
11dc3c: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11dc3f: eb 00 jmp 11dc41 <rtems_rfs_mutex_lock.isra.0+0x4d><== NOT EXECUTED
#endif
return EIO;
}
#endif
return 0;
}
11dc41: 89 d8 mov %ebx,%eax
11dc43: 8d 65 f8 lea -0x8(%ebp),%esp
11dc46: 5b pop %ebx
11dc47: 5e pop %esi
11dc48: 5d pop %ebp
11dc49: c3 ret
0011d9ab <rtems_rfs_mutex_lock.isra.1>:
* @param mutex The mutex to lock.
* @retval true The mutex is locked.
* @retval false The mutex could not be locked.
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
11d9ab: 55 push %ebp
11d9ac: 89 e5 mov %esp,%ebp
11d9ae: 56 push %esi
11d9af: 53 push %ebx
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
11d9b0: 56 push %esi
11d9b1: 6a 00 push $0x0
11d9b3: 6a 00 push $0x0
11d9b5: 50 push %eax
11d9b6: e8 dd 02 ff ff call 10dc98 <rtems_semaphore_obtain>
11d9bb: 89 c6 mov %eax,%esi
if (sc != RTEMS_SUCCESSFUL)
11d9bd: 83 c4 10 add $0x10,%esp
rtems_status_text (sc));
#endif
return EIO;
}
#endif
return 0;
11d9c0: 31 db xor %ebx,%ebx
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
if (sc != RTEMS_SUCCESSFUL)
11d9c2: 85 c0 test %eax,%eax
11d9c4: 74 32 je 11d9f8 <rtems_rfs_mutex_lock.isra.1+0x4d><== ALWAYS TAKEN
{
#if RTEMS_RFS_TRACE
if (rtems_rfs_trace (RTEMS_RFS_TRACE_MUTEX))
11d9c6: 53 push %ebx <== NOT EXECUTED
11d9c7: 53 push %ebx <== NOT EXECUTED
11d9c8: 6a 00 push $0x0 <== NOT EXECUTED
11d9ca: 6a 04 push $0x4 <== NOT EXECUTED
11d9cc: e8 cb 5e ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11d9d1: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
printf ("rtems-rfs: mutex: obtain failed: %s\n",
rtems_status_text (sc));
#endif
return EIO;
11d9d4: bb 05 00 00 00 mov $0x5,%ebx <== NOT EXECUTED
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
if (sc != RTEMS_SUCCESSFUL)
{
#if RTEMS_RFS_TRACE
if (rtems_rfs_trace (RTEMS_RFS_TRACE_MUTEX))
11d9d9: 84 c0 test %al,%al <== NOT EXECUTED
11d9db: 74 1b je 11d9f8 <rtems_rfs_mutex_lock.isra.1+0x4d><== NOT EXECUTED
printf ("rtems-rfs: mutex: obtain failed: %s\n",
11d9dd: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11d9e0: 56 push %esi <== NOT EXECUTED
11d9e1: e8 36 c3 fe ff call 109d1c <rtems_status_text> <== NOT EXECUTED
11d9e6: 5a pop %edx <== NOT EXECUTED
11d9e7: 59 pop %ecx <== NOT EXECUTED
11d9e8: 50 push %eax <== NOT EXECUTED
11d9e9: 68 d8 04 13 00 push $0x1304d8 <== NOT EXECUTED
11d9ee: e8 49 29 00 00 call 12033c <printf> <== NOT EXECUTED
11d9f3: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11d9f6: eb 00 jmp 11d9f8 <rtems_rfs_mutex_lock.isra.1+0x4d><== NOT EXECUTED
#endif
return EIO;
}
#endif
return 0;
}
11d9f8: 89 d8 mov %ebx,%eax
11d9fa: 8d 65 f8 lea -0x8(%ebp),%esp
11d9fd: 5b pop %ebx
11d9fe: 5e pop %esi
11d9ff: 5d pop %ebp
11da00: c3 ret
001133c9 <rtems_rfs_mutex_lock.isra.21>:
* @param mutex The mutex to lock.
* @retval true The mutex is locked.
* @retval false The mutex could not be locked.
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
1133c9: 55 push %ebp
1133ca: 89 e5 mov %esp,%ebp
1133cc: 56 push %esi
1133cd: 53 push %ebx
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
1133ce: 53 push %ebx
1133cf: 6a 00 push $0x0
1133d1: 6a 00 push $0x0
1133d3: 50 push %eax
1133d4: e8 bf a8 ff ff call 10dc98 <rtems_semaphore_obtain>
1133d9: 89 c6 mov %eax,%esi
if (sc != RTEMS_SUCCESSFUL)
1133db: 83 c4 10 add $0x10,%esp
rtems_status_text (sc));
#endif
return EIO;
}
#endif
return 0;
1133de: 31 db xor %ebx,%ebx
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
if (sc != RTEMS_SUCCESSFUL)
1133e0: 85 c0 test %eax,%eax
1133e2: 74 32 je 113416 <rtems_rfs_mutex_lock.isra.21+0x4d><== ALWAYS TAKEN
{
#if RTEMS_RFS_TRACE
if (rtems_rfs_trace (RTEMS_RFS_TRACE_MUTEX))
1133e4: 51 push %ecx <== NOT EXECUTED
1133e5: 51 push %ecx <== NOT EXECUTED
1133e6: 6a 00 push $0x0 <== NOT EXECUTED
1133e8: 6a 04 push $0x4 <== NOT EXECUTED
1133ea: e8 ad 04 00 00 call 11389c <rtems_rfs_trace> <== NOT EXECUTED
1133ef: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
printf ("rtems-rfs: mutex: obtain failed: %s\n",
rtems_status_text (sc));
#endif
return EIO;
1133f2: bb 05 00 00 00 mov $0x5,%ebx <== NOT EXECUTED
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
if (sc != RTEMS_SUCCESSFUL)
{
#if RTEMS_RFS_TRACE
if (rtems_rfs_trace (RTEMS_RFS_TRACE_MUTEX))
1133f7: 84 c0 test %al,%al <== NOT EXECUTED
1133f9: 74 1b je 113416 <rtems_rfs_mutex_lock.isra.21+0x4d><== NOT EXECUTED
printf ("rtems-rfs: mutex: obtain failed: %s\n",
1133fb: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1133fe: 56 push %esi <== NOT EXECUTED
1133ff: e8 18 69 ff ff call 109d1c <rtems_status_text> <== NOT EXECUTED
113404: 5e pop %esi <== NOT EXECUTED
113405: 5a pop %edx <== NOT EXECUTED
113406: 50 push %eax <== NOT EXECUTED
113407: 68 d8 04 13 00 push $0x1304d8 <== NOT EXECUTED
11340c: e8 2b cf 00 00 call 12033c <printf> <== NOT EXECUTED
113411: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
113414: eb 00 jmp 113416 <rtems_rfs_mutex_lock.isra.21+0x4d><== NOT EXECUTED
#endif
return EIO;
}
#endif
return 0;
}
113416: 89 d8 mov %ebx,%eax
113418: 8d 65 f8 lea -0x8(%ebp),%esp
11341b: 5b pop %ebx
11341c: 5e pop %esi
11341d: 5d pop %ebp
11341e: c3 ret
0011e78b <rtems_rfs_mutex_lock.isra.6>:
* @param mutex The mutex to lock.
* @retval true The mutex is locked.
* @retval false The mutex could not be locked.
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
11e78b: 55 push %ebp <== NOT EXECUTED
11e78c: 89 e5 mov %esp,%ebp <== NOT EXECUTED
11e78e: 56 push %esi <== NOT EXECUTED
11e78f: 53 push %ebx <== NOT EXECUTED
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
11e790: 56 push %esi <== NOT EXECUTED
11e791: 6a 00 push $0x0 <== NOT EXECUTED
11e793: 6a 00 push $0x0 <== NOT EXECUTED
11e795: 50 push %eax <== NOT EXECUTED
11e796: e8 15 b4 fe ff call 109bb0 <rtems_semaphore_obtain><== NOT EXECUTED
11e79b: 89 c6 mov %eax,%esi <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
11e79d: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rtems_status_text (sc));
#endif
return EIO;
}
#endif
return 0;
11e7a0: 31 db xor %ebx,%ebx <== NOT EXECUTED
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
if (sc != RTEMS_SUCCESSFUL)
11e7a2: 85 c0 test %eax,%eax <== NOT EXECUTED
11e7a4: 74 32 je 11e7d8 <rtems_rfs_mutex_lock.isra.6+0x4d><== NOT EXECUTED
{
#if RTEMS_RFS_TRACE
if (rtems_rfs_trace (RTEMS_RFS_TRACE_MUTEX))
11e7a6: 53 push %ebx <== NOT EXECUTED
11e7a7: 53 push %ebx <== NOT EXECUTED
11e7a8: 6a 00 push $0x0 <== NOT EXECUTED
11e7aa: 6a 04 push $0x4 <== NOT EXECUTED
11e7ac: e8 3b 0e 00 00 call 11f5ec <rtems_rfs_trace> <== NOT EXECUTED
11e7b1: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
printf ("rtems-rfs: mutex: obtain failed: %s\n",
rtems_status_text (sc));
#endif
return EIO;
11e7b4: bb 05 00 00 00 mov $0x5,%ebx <== NOT EXECUTED
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
if (sc != RTEMS_SUCCESSFUL)
{
#if RTEMS_RFS_TRACE
if (rtems_rfs_trace (RTEMS_RFS_TRACE_MUTEX))
11e7b9: 84 c0 test %al,%al <== NOT EXECUTED
11e7bb: 74 1b je 11e7d8 <rtems_rfs_mutex_lock.isra.6+0x4d><== NOT EXECUTED
printf ("rtems-rfs: mutex: obtain failed: %s\n",
11e7bd: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11e7c0: 56 push %esi <== NOT EXECUTED
11e7c1: e8 c2 7b fe ff call 106388 <rtems_status_text> <== NOT EXECUTED
11e7c6: 5a pop %edx <== NOT EXECUTED
11e7c7: 59 pop %ecx <== NOT EXECUTED
11e7c8: 50 push %eax <== NOT EXECUTED
11e7c9: 68 9d ee 14 00 push $0x14ee9d <== NOT EXECUTED
11e7ce: e8 6d 68 01 00 call 135040 <printf> <== NOT EXECUTED
11e7d3: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11e7d6: eb 00 jmp 11e7d8 <rtems_rfs_mutex_lock.isra.6+0x4d><== NOT EXECUTED
#endif
return EIO;
}
#endif
return 0;
}
11e7d8: 89 d8 mov %ebx,%eax <== NOT EXECUTED
11e7da: 8d 65 f8 lea -0x8(%ebp),%esp <== NOT EXECUTED
11e7dd: 5b pop %ebx <== NOT EXECUTED
11e7de: 5e pop %esi <== NOT EXECUTED
11e7df: 5d pop %ebp <== NOT EXECUTED
11e7e0: c3 ret <== NOT EXECUTED
00113375 <rtems_rfs_mutex_unlock.isra.20>:
* @param mutex The mutex to unlock.
* @retval true The mutex is unlocked.
* @retval false The mutex could not be unlocked.
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
113375: 55 push %ebp
113376: 89 e5 mov %esp,%ebp
113378: 56 push %esi
113379: 53 push %ebx
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
11337a: 83 ec 0c sub $0xc,%esp
11337d: 50 push %eax
11337e: e8 05 aa ff ff call 10dd88 <rtems_semaphore_release>
113383: 89 c6 mov %eax,%esi
if (sc != RTEMS_SUCCESSFUL)
113385: 83 c4 10 add $0x10,%esp
rtems_status_text (sc));
#endif
return EIO;
}
#endif
return 0;
113388: 31 db xor %ebx,%ebx
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
if (sc != RTEMS_SUCCESSFUL)
11338a: 85 c0 test %eax,%eax
11338c: 74 32 je 1133c0 <rtems_rfs_mutex_unlock.isra.20+0x4b><== ALWAYS TAKEN
{
#if RTEMS_RFS_TRACE
if (rtems_rfs_trace (RTEMS_RFS_TRACE_MUTEX))
11338e: 53 push %ebx <== NOT EXECUTED
11338f: 53 push %ebx <== NOT EXECUTED
113390: 6a 00 push $0x0 <== NOT EXECUTED
113392: 6a 04 push $0x4 <== NOT EXECUTED
113394: e8 03 05 00 00 call 11389c <rtems_rfs_trace> <== NOT EXECUTED
113399: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
printf ("rtems-rfs: mutex: release failed: %s\n",
rtems_status_text (sc));
#endif
return EIO;
11339c: bb 05 00 00 00 mov $0x5,%ebx <== NOT EXECUTED
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
if (sc != RTEMS_SUCCESSFUL)
{
#if RTEMS_RFS_TRACE
if (rtems_rfs_trace (RTEMS_RFS_TRACE_MUTEX))
1133a1: 84 c0 test %al,%al <== NOT EXECUTED
1133a3: 74 1b je 1133c0 <rtems_rfs_mutex_unlock.isra.20+0x4b><== NOT EXECUTED
printf ("rtems-rfs: mutex: release failed: %s\n",
1133a5: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1133a8: 56 push %esi <== NOT EXECUTED
1133a9: e8 6e 69 ff ff call 109d1c <rtems_status_text> <== NOT EXECUTED
1133ae: 5a pop %edx <== NOT EXECUTED
1133af: 59 pop %ecx <== NOT EXECUTED
1133b0: 50 push %eax <== NOT EXECUTED
1133b1: 68 b2 04 13 00 push $0x1304b2 <== NOT EXECUTED
1133b6: e8 81 cf 00 00 call 12033c <printf> <== NOT EXECUTED
1133bb: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
1133be: eb 00 jmp 1133c0 <rtems_rfs_mutex_unlock.isra.20+0x4b><== NOT EXECUTED
#endif
return EIO;
}
#endif
return 0;
}
1133c0: 89 d8 mov %ebx,%eax
1133c2: 8d 65 f8 lea -0x8(%ebp),%esp
1133c5: 5b pop %ebx
1133c6: 5e pop %esi
1133c7: 5d pop %ebp
1133c8: c3 ret
00119fcc <rtems_rfs_release_chain>:
static int
rtems_rfs_release_chain (rtems_chain_control* chain,
uint32_t* count,
bool modified)
{
119fcc: 55 push %ebp
119fcd: 89 e5 mov %esp,%ebp
119fcf: 57 push %edi
119fd0: 56 push %esi
119fd1: 53 push %ebx
119fd2: 83 ec 24 sub $0x24,%esp
119fd5: 89 c3 mov %eax,%ebx
119fd7: 89 d6 mov %edx,%esi
119fd9: 89 cf mov %ecx,%edi
rtems_rfs_buffer* buffer;
int rrc = 0;
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
119fdb: 6a 00 push $0x0
119fdd: 68 80 00 00 00 push $0x80
119fe2: e8 b5 98 ff ff call 11389c <rtems_rfs_trace>
119fe7: 83 c4 10 add $0x10,%esp
119fea: 84 c0 test %al,%al
119fec: 74 11 je 119fff <rtems_rfs_release_chain+0x33><== ALWAYS TAKEN
printf ("rtems-rfs: release-chain: count=%" PRIu32 "\n", *count);
119fee: 50 push %eax <== NOT EXECUTED
119fef: 50 push %eax <== NOT EXECUTED
119ff0: ff 36 pushl (%esi) <== NOT EXECUTED
119ff2: 68 90 0d 13 00 push $0x130d90 <== NOT EXECUTED
119ff7: e8 40 63 00 00 call 12033c <printf> <== NOT EXECUTED
119ffc: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
(*count)--;
buffer->user = (void*) 0;
rc = rtems_rfs_buffer_io_release (buffer, modified);
if ((rc > 0) && (rrc == 0))
119fff: 31 d2 xor %edx,%edx
11a001: 8d 4b 04 lea 0x4(%ebx),%ecx
buffer = (rtems_rfs_buffer*) rtems_chain_get (chain);
(*count)--;
buffer->user = (void*) 0;
rc = rtems_rfs_buffer_io_release (buffer, modified);
11a004: 81 e7 ff 00 00 00 and $0xff,%edi
11a00a: eb 34 jmp 11a040 <rtems_rfs_release_chain+0x74>
*/
RTEMS_INLINE_ROUTINE rtems_chain_node *rtems_chain_get(
rtems_chain_control *the_chain
)
{
return _Chain_Get( the_chain );
11a00c: 83 ec 0c sub $0xc,%esp
11a00f: 53 push %ebx
11a010: 89 55 e4 mov %edx,-0x1c(%ebp)
11a013: 89 4d e0 mov %ecx,-0x20(%ebp)
11a016: e8 35 45 ff ff call 10e550 <_Chain_Get>
printf ("rtems-rfs: release-chain: count=%" PRIu32 "\n", *count);
while (!rtems_chain_is_empty (chain))
{
buffer = (rtems_rfs_buffer*) rtems_chain_get (chain);
(*count)--;
11a01b: ff 0e decl (%esi)
buffer->user = (void*) 0;
11a01d: c7 40 34 00 00 00 00 movl $0x0,0x34(%eax)
rc = rtems_rfs_buffer_io_release (buffer, modified);
11a024: 5a pop %edx
11a025: 59 pop %ecx
11a026: 57 push %edi
11a027: 50 push %eax
11a028: e8 8b 4c 00 00 call 11ecb8 <rtems_rfs_buffer_bdbuf_release>
if ((rc > 0) && (rrc == 0))
11a02d: 83 c4 10 add $0x10,%esp
11a030: 85 c0 test %eax,%eax
11a032: 8b 55 e4 mov -0x1c(%ebp),%edx
11a035: 8b 4d e0 mov -0x20(%ebp),%ecx
11a038: 7e 06 jle 11a040 <rtems_rfs_release_chain+0x74><== ALWAYS TAKEN
11a03a: 85 d2 test %edx,%edx <== NOT EXECUTED
11a03c: 75 02 jne 11a040 <rtems_rfs_release_chain+0x74><== NOT EXECUTED
11a03e: 89 c2 mov %eax,%edx <== NOT EXECUTED
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
printf ("rtems-rfs: release-chain: count=%" PRIu32 "\n", *count);
while (!rtems_chain_is_empty (chain))
11a040: 39 0b cmp %ecx,(%ebx)
11a042: 75 c8 jne 11a00c <rtems_rfs_release_chain+0x40>
rc = rtems_rfs_buffer_io_release (buffer, modified);
if ((rc > 0) && (rrc == 0))
rrc = rc;
}
return rrc;
}
11a044: 89 d0 mov %edx,%eax
11a046: 8d 65 f4 lea -0xc(%ebp),%esp
11a049: 5b pop %ebx
11a04a: 5e pop %esi
11a04b: 5f pop %edi
11a04c: 5d pop %ebp
11a04d: c3 ret
00112ce5 <rtems_rfs_rtems_chown>:
static int
rtems_rfs_rtems_chown (const rtems_filesystem_location_info_t *pathloc,
uid_t owner,
gid_t group)
{
112ce5: 55 push %ebp
112ce6: 89 e5 mov %esp,%ebp
112ce8: 57 push %edi
112ce9: 56 push %esi
112cea: 53 push %ebx
112ceb: 83 ec 5c sub $0x5c,%esp
112cee: 8b 45 08 mov 0x8(%ebp),%eax
112cf1: 8b 55 0c mov 0xc(%ebp),%edx
112cf4: 66 89 55 b6 mov %dx,-0x4a(%ebp)
112cf8: 8b 55 10 mov 0x10(%ebp),%edx
112cfb: 66 89 55 98 mov %dx,-0x68(%ebp)
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
112cff: 8b 50 14 mov 0x14(%eax),%edx
112d02: 8b 5a 08 mov 0x8(%edx),%ebx
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_CHOWN))
printf ("rtems-rfs-rtems: chown: in: ino:%" PRId32 " uid:%d gid:%d\n",
ino, owner, group);
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
112d05: 6a 01 push $0x1
112d07: 8d 75 c0 lea -0x40(%ebp),%esi
112d0a: 56 push %esi
112d0b: ff 70 08 pushl 0x8(%eax)
112d0e: 53 push %ebx
112d0f: e8 16 f5 ff ff call 11222a <rtems_rfs_inode_open>
112d14: 89 c7 mov %eax,%edi
if (rc > 0)
112d16: 83 c4 10 add $0x10,%esp
112d19: 85 c0 test %eax,%eax
112d1b: 7e 0c jle 112d29 <rtems_rfs_rtems_chown+0x44><== ALWAYS TAKEN
{
return rtems_rfs_rtems_error ("chown: opening inode", rc);
112d1d: e8 aa c4 00 00 call 11f1cc <__errno> <== NOT EXECUTED
112d22: 89 38 mov %edi,(%eax) <== NOT EXECUTED
112d24: e9 8b 00 00 00 jmp 112db4 <rtems_rfs_rtems_chown+0xcf><== NOT EXECUTED
/*
* Verify I am the owner of the node or the super user.
*/
#if defined (RTEMS_POSIX_API)
uid = geteuid();
112d29: e8 82 37 00 00 call 1164b0 <geteuid>
if ((uid != rtems_rfs_inode_get_uid (&inode)) && (uid != 0))
112d2e: 8b 4d cc mov -0x34(%ebp),%ecx
* @return uint16_t The user id (uid).
*/
static inline uint16_t
rtems_rfs_inode_get_uid (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->owner) & 0xffff;
112d31: 0f b6 51 06 movzbl 0x6(%ecx),%edx
112d35: c1 e2 08 shl $0x8,%edx
112d38: 0f b6 79 07 movzbl 0x7(%ecx),%edi
112d3c: 09 fa or %edi,%edx
112d3e: 66 39 d0 cmp %dx,%ax
112d41: 74 1e je 112d61 <rtems_rfs_rtems_chown+0x7c><== ALWAYS TAKEN
112d43: 66 85 c0 test %ax,%ax <== NOT EXECUTED
112d46: 74 19 je 112d61 <rtems_rfs_rtems_chown+0x7c><== NOT EXECUTED
{
rtems_rfs_inode_close (fs, &inode);
112d48: 51 push %ecx <== NOT EXECUTED
112d49: 51 push %ecx <== NOT EXECUTED
112d4a: 56 push %esi <== NOT EXECUTED
112d4b: 53 push %ebx <== NOT EXECUTED
112d4c: e8 56 f6 ff ff call 1123a7 <rtems_rfs_inode_close> <== NOT EXECUTED
return rtems_rfs_rtems_error ("chown: not able", EPERM);
112d51: e8 76 c4 00 00 call 11f1cc <__errno> <== NOT EXECUTED
112d56: c7 00 01 00 00 00 movl $0x1,(%eax) <== NOT EXECUTED
112d5c: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
112d5f: eb 53 jmp 112db4 <rtems_rfs_rtems_chown+0xcf><== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_uid_gid (rtems_rfs_inode_handle* handle,
uint16_t uid, uint16_t gid)
{
rtems_rfs_write_u32 (&handle->node->owner, (((uint32_t) gid) << 16) | uid);
112d61: 8b 45 98 mov -0x68(%ebp),%eax
112d64: c1 e0 10 shl $0x10,%eax
112d67: 0f b7 55 b6 movzwl -0x4a(%ebp),%edx
112d6b: 09 d0 or %edx,%eax
112d6d: 89 c2 mov %eax,%edx
112d6f: c1 ea 18 shr $0x18,%edx
112d72: 88 51 04 mov %dl,0x4(%ecx)
112d75: 89 c1 mov %eax,%ecx
112d77: c1 e9 10 shr $0x10,%ecx
112d7a: 8b 55 cc mov -0x34(%ebp),%edx
112d7d: 88 4a 05 mov %cl,0x5(%edx)
112d80: c1 e8 08 shr $0x8,%eax
112d83: 8b 55 cc mov -0x34(%ebp),%edx
112d86: 88 42 06 mov %al,0x6(%edx)
112d89: 8b 45 cc mov -0x34(%ebp),%eax
112d8c: 8a 55 b6 mov -0x4a(%ebp),%dl
112d8f: 88 50 07 mov %dl,0x7(%eax)
rtems_rfs_buffer_mark_dirty (&handle->buffer);
112d92: c6 45 d0 01 movb $0x1,-0x30(%ebp)
}
#endif
rtems_rfs_inode_set_uid_gid (&inode, owner, group);
rc = rtems_rfs_inode_close (fs, &inode);
112d96: 52 push %edx
112d97: 52 push %edx
112d98: 8d 45 c0 lea -0x40(%ebp),%eax
112d9b: 50 push %eax
112d9c: 53 push %ebx
112d9d: e8 05 f6 ff ff call 1123a7 <rtems_rfs_inode_close>
112da2: 89 c3 mov %eax,%ebx
if (rc)
112da4: 83 c4 10 add $0x10,%esp
{
return rtems_rfs_rtems_error ("chown: closing inode", rc);
}
return 0;
112da7: 31 c0 xor %eax,%eax
#endif
rtems_rfs_inode_set_uid_gid (&inode, owner, group);
rc = rtems_rfs_inode_close (fs, &inode);
if (rc)
112da9: 85 db test %ebx,%ebx
112dab: 74 0a je 112db7 <rtems_rfs_rtems_chown+0xd2><== ALWAYS TAKEN
{
return rtems_rfs_rtems_error ("chown: closing inode", rc);
112dad: e8 1a c4 00 00 call 11f1cc <__errno> <== NOT EXECUTED
112db2: 89 18 mov %ebx,(%eax) <== NOT EXECUTED
112db4: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
}
return 0;
}
112db7: 8d 65 f4 lea -0xc(%ebp),%esp
112dba: 5b pop %ebx
112dbb: 5e pop %esi
112dbc: 5f pop %edi
112dbd: 5d pop %ebp
112dbe: c3 ret
0011d806 <rtems_rfs_rtems_device_close>:
* @return int
*/
static int
rtems_rfs_rtems_device_close (rtems_libio_t* iop)
{
11d806: 55 push %ebp <== NOT EXECUTED
11d807: 89 e5 mov %esp,%ebp <== NOT EXECUTED
11d809: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11d80c: 8b 45 08 mov 0x8(%ebp),%eax <== NOT EXECUTED
rtems_device_major_number major;
rtems_device_minor_number minor;
rtems_rfs_rtems_device_get_major_and_minor (iop, &major, &minor);
return rtems_deviceio_close (iop, major, minor);
11d80f: ff 70 2c pushl 0x2c(%eax) <== NOT EXECUTED
11d812: ff 70 28 pushl 0x28(%eax) <== NOT EXECUTED
11d815: 50 push %eax <== NOT EXECUTED
11d816: e8 b6 0c 00 00 call 11e4d1 <rtems_deviceio_close> <== NOT EXECUTED
}
11d81b: c9 leave <== NOT EXECUTED
11d81c: c3 ret <== NOT EXECUTED
0011d7a8 <rtems_rfs_rtems_device_ftruncate>:
* @return int
*/
static int
rtems_rfs_rtems_device_ftruncate (rtems_libio_t* iop, off_t length)
{
11d7a8: 55 push %ebp <== NOT EXECUTED
11d7a9: 89 e5 mov %esp,%ebp <== NOT EXECUTED
return 0;
}
11d7ab: 31 c0 xor %eax,%eax <== NOT EXECUTED
11d7ad: 5d pop %ebp <== NOT EXECUTED
11d7ae: c3 ret <== NOT EXECUTED
0011d7af <rtems_rfs_rtems_device_ioctl>:
static int
rtems_rfs_rtems_device_ioctl (rtems_libio_t* iop,
ioctl_command_t command,
void* buffer)
{
11d7af: 55 push %ebp <== NOT EXECUTED
11d7b0: 89 e5 mov %esp,%ebp <== NOT EXECUTED
11d7b2: 83 ec 14 sub $0x14,%esp <== NOT EXECUTED
11d7b5: 8b 45 08 mov 0x8(%ebp),%eax <== NOT EXECUTED
rtems_device_major_number major;
rtems_device_minor_number minor;
rtems_rfs_rtems_device_get_major_and_minor (iop, &major, &minor);
return rtems_deviceio_control (iop, command, buffer, major, minor);
11d7b8: ff 70 2c pushl 0x2c(%eax) <== NOT EXECUTED
11d7bb: ff 70 28 pushl 0x28(%eax) <== NOT EXECUTED
11d7be: ff 75 10 pushl 0x10(%ebp) <== NOT EXECUTED
11d7c1: ff 75 0c pushl 0xc(%ebp) <== NOT EXECUTED
11d7c4: 50 push %eax <== NOT EXECUTED
11d7c5: e8 0c 0e 00 00 call 11e5d6 <rtems_deviceio_control><== NOT EXECUTED
}
11d7ca: c9 leave <== NOT EXECUTED
11d7cb: c3 ret <== NOT EXECUTED
0011d89c <rtems_rfs_rtems_device_open>:
static int
rtems_rfs_rtems_device_open ( rtems_libio_t *iop,
const char *pathname,
int oflag,
mode_t mode)
{
11d89c: 55 push %ebp <== NOT EXECUTED
11d89d: 89 e5 mov %esp,%ebp <== NOT EXECUTED
11d89f: 57 push %edi <== NOT EXECUTED
11d8a0: 56 push %esi <== NOT EXECUTED
11d8a1: 53 push %ebx <== NOT EXECUTED
11d8a2: 83 ec 50 sub $0x50,%esp <== NOT EXECUTED
11d8a5: 8b 75 08 mov 0x8(%ebp),%esi <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (&iop->pathinfo);
11d8a8: 8b 46 24 mov 0x24(%esi),%eax <== NOT EXECUTED
11d8ab: 8b 58 08 mov 0x8(%eax),%ebx <== NOT EXECUTED
rtems_rfs_ino ino = rtems_rfs_rtems_get_iop_ino (iop);
11d8ae: 8b 46 18 mov 0x18(%esi),%eax <== NOT EXECUTED
11d8b1: 89 45 b4 mov %eax,-0x4c(%ebp) <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
11d8b4: 6a 00 push $0x0 <== NOT EXECUTED
11d8b6: 6a 00 push $0x0 <== NOT EXECUTED
.fstat_h = rtems_rfs_rtems_fstat,
.ftruncate_h = rtems_rfs_rtems_device_ftruncate,
.fsync_h = rtems_filesystem_default_fsync_or_fdatasync,
.fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync,
.fcntl_h = rtems_filesystem_default_fcntl
};
11d8b8: 8b 83 80 00 00 00 mov 0x80(%ebx),%eax <== NOT EXECUTED
11d8be: ff 30 pushl (%eax) <== NOT EXECUTED
11d8c0: e8 d3 03 ff ff call 10dc98 <rtems_semaphore_obtain><== NOT EXECUTED
11d8c5: 89 c7 mov %eax,%edi <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
11d8c7: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11d8ca: 85 c0 test %eax,%eax <== NOT EXECUTED
11d8cc: 74 2b je 11d8f9 <rtems_rfs_rtems_device_open+0x5d><== NOT EXECUTED
{
#if RTEMS_RFS_TRACE
if (rtems_rfs_trace (RTEMS_RFS_TRACE_MUTEX))
11d8ce: 51 push %ecx <== NOT EXECUTED
11d8cf: 51 push %ecx <== NOT EXECUTED
11d8d0: 6a 00 push $0x0 <== NOT EXECUTED
11d8d2: 6a 04 push $0x4 <== NOT EXECUTED
11d8d4: e8 c3 5f ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11d8d9: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11d8dc: 84 c0 test %al,%al <== NOT EXECUTED
11d8de: 74 19 je 11d8f9 <rtems_rfs_rtems_device_open+0x5d><== NOT EXECUTED
printf ("rtems-rfs: mutex: obtain failed: %s\n",
11d8e0: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11d8e3: 57 push %edi <== NOT EXECUTED
11d8e4: e8 33 c4 fe ff call 109d1c <rtems_status_text> <== NOT EXECUTED
11d8e9: 5f pop %edi <== NOT EXECUTED
11d8ea: 5a pop %edx <== NOT EXECUTED
11d8eb: 50 push %eax <== NOT EXECUTED
11d8ec: 68 d8 04 13 00 push $0x1304d8 <== NOT EXECUTED
11d8f1: e8 46 2a 00 00 call 12033c <printf> <== NOT EXECUTED
11d8f6: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rtems_device_minor_number minor;
int rc;
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
11d8f9: 6a 01 push $0x1 <== NOT EXECUTED
11d8fb: 8d 7d c0 lea -0x40(%ebp),%edi <== NOT EXECUTED
11d8fe: 57 push %edi <== NOT EXECUTED
11d8ff: ff 75 b4 pushl -0x4c(%ebp) <== NOT EXECUTED
11d902: 53 push %ebx <== NOT EXECUTED
11d903: e8 22 49 ff ff call 11222a <rtems_rfs_inode_open> <== NOT EXECUTED
11d908: 89 c2 mov %eax,%edx <== NOT EXECUTED
if (rc > 0)
11d90a: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11d90d: 85 c0 test %eax,%eax <== NOT EXECUTED
11d90f: 7e 16 jle 11d927 <rtems_rfs_rtems_device_open+0x8b><== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
11d911: 89 d8 mov %ebx,%eax <== NOT EXECUTED
11d913: 89 55 ac mov %edx,-0x54(%ebp) <== NOT EXECUTED
11d916: e8 2d ff ff ff call 11d848 <rtems_rfs_rtems_unlock><== NOT EXECUTED
return rtems_rfs_rtems_error ("device_open: opening inode", rc);
11d91b: e8 ac 18 00 00 call 11f1cc <__errno> <== NOT EXECUTED
11d920: 8b 55 ac mov -0x54(%ebp),%edx <== NOT EXECUTED
11d923: 89 10 mov %edx,(%eax) <== NOT EXECUTED
11d925: eb 44 jmp 11d96b <rtems_rfs_rtems_device_open+0xcf><== NOT EXECUTED
}
major = rtems_rfs_inode_get_block (&inode, 0);
11d927: 8b 4d cc mov -0x34(%ebp),%ecx <== NOT EXECUTED
11d92a: 31 d2 xor %edx,%edx <== NOT EXECUTED
11d92c: 89 c8 mov %ecx,%eax <== NOT EXECUTED
11d92e: 89 4d ac mov %ecx,-0x54(%ebp) <== NOT EXECUTED
11d931: e8 e7 fe ff ff call 11d81d <rtems_rfs_inode_get_block.isra.0><== NOT EXECUTED
11d936: 89 45 b4 mov %eax,-0x4c(%ebp) <== NOT EXECUTED
minor = rtems_rfs_inode_get_block (&inode, 1);
11d939: ba 01 00 00 00 mov $0x1,%edx <== NOT EXECUTED
11d93e: 8b 4d ac mov -0x54(%ebp),%ecx <== NOT EXECUTED
11d941: 89 c8 mov %ecx,%eax <== NOT EXECUTED
11d943: e8 d5 fe ff ff call 11d81d <rtems_rfs_inode_get_block.isra.0><== NOT EXECUTED
11d948: 89 45 b0 mov %eax,-0x50(%ebp) <== NOT EXECUTED
rc = rtems_rfs_inode_close (fs, &inode);
11d94b: 51 push %ecx <== NOT EXECUTED
11d94c: 51 push %ecx <== NOT EXECUTED
11d94d: 57 push %edi <== NOT EXECUTED
11d94e: 53 push %ebx <== NOT EXECUTED
11d94f: e8 53 4a ff ff call 1123a7 <rtems_rfs_inode_close> <== NOT EXECUTED
11d954: 89 c7 mov %eax,%edi <== NOT EXECUTED
if (rc > 0)
11d956: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
11d959: 89 d8 mov %ebx,%eax <== NOT EXECUTED
major = rtems_rfs_inode_get_block (&inode, 0);
minor = rtems_rfs_inode_get_block (&inode, 1);
rc = rtems_rfs_inode_close (fs, &inode);
if (rc > 0)
11d95b: 85 ff test %edi,%edi <== NOT EXECUTED
11d95d: 7e 11 jle 11d970 <rtems_rfs_rtems_device_open+0xd4><== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
11d95f: e8 e4 fe ff ff call 11d848 <rtems_rfs_rtems_unlock><== NOT EXECUTED
return rtems_rfs_rtems_error ("device_open: closing inode", rc);
11d964: e8 63 18 00 00 call 11f1cc <__errno> <== NOT EXECUTED
11d969: 89 38 mov %edi,(%eax) <== NOT EXECUTED
11d96b: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
11d96e: eb 29 jmp 11d999 <rtems_rfs_rtems_device_open+0xfd><== NOT EXECUTED
}
rtems_rfs_rtems_unlock (fs);
11d970: e8 d3 fe ff ff call 11d848 <rtems_rfs_rtems_unlock><== NOT EXECUTED
iop->data0 = major;
11d975: 8b 45 b4 mov -0x4c(%ebp),%eax <== NOT EXECUTED
11d978: 89 46 28 mov %eax,0x28(%esi) <== NOT EXECUTED
iop->data1 = (void *) minor;
11d97b: 8b 45 b0 mov -0x50(%ebp),%eax <== NOT EXECUTED
11d97e: 89 46 2c mov %eax,0x2c(%esi) <== NOT EXECUTED
return rtems_deviceio_open (iop, pathname, oflag, mode, minor, major);
11d981: 52 push %edx <== NOT EXECUTED
11d982: 52 push %edx <== NOT EXECUTED
11d983: ff 75 b4 pushl -0x4c(%ebp) <== NOT EXECUTED
11d986: 50 push %eax <== NOT EXECUTED
11d987: ff 75 14 pushl 0x14(%ebp) <== NOT EXECUTED
11d98a: ff 75 10 pushl 0x10(%ebp) <== NOT EXECUTED
11d98d: ff 75 0c pushl 0xc(%ebp) <== NOT EXECUTED
11d990: 56 push %esi <== NOT EXECUTED
11d991: e8 0a 0b 00 00 call 11e4a0 <rtems_deviceio_open> <== NOT EXECUTED
11d996: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
}
11d999: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
11d99c: 5b pop %ebx <== NOT EXECUTED
11d99d: 5e pop %esi <== NOT EXECUTED
11d99e: 5f pop %edi <== NOT EXECUTED
11d99f: 5d pop %ebp <== NOT EXECUTED
11d9a0: c3 ret <== NOT EXECUTED
0011d7e9 <rtems_rfs_rtems_device_read>:
* @return ssize_t
*/
static ssize_t
rtems_rfs_rtems_device_read (rtems_libio_t* iop, void* buffer, size_t count)
{
11d7e9: 55 push %ebp <== NOT EXECUTED
11d7ea: 89 e5 mov %esp,%ebp <== NOT EXECUTED
11d7ec: 83 ec 14 sub $0x14,%esp <== NOT EXECUTED
11d7ef: 8b 45 08 mov 0x8(%ebp),%eax <== NOT EXECUTED
rtems_device_major_number major;
rtems_device_minor_number minor;
rtems_rfs_rtems_device_get_major_and_minor (iop, &major, &minor);
return rtems_deviceio_read (iop, buffer, count, major, minor);
11d7f2: ff 70 2c pushl 0x2c(%eax) <== NOT EXECUTED
11d7f5: ff 70 28 pushl 0x28(%eax) <== NOT EXECUTED
11d7f8: ff 75 10 pushl 0x10(%ebp) <== NOT EXECUTED
11d7fb: ff 75 0c pushl 0xc(%ebp) <== NOT EXECUTED
11d7fe: 50 push %eax <== NOT EXECUTED
11d7ff: e8 00 0d 00 00 call 11e504 <rtems_deviceio_read> <== NOT EXECUTED
}
11d804: c9 leave <== NOT EXECUTED
11d805: c3 ret <== NOT EXECUTED
0011d7cc <rtems_rfs_rtems_device_write>:
static ssize_t
rtems_rfs_rtems_device_write (rtems_libio_t* iop,
const void* buffer,
size_t count)
{
11d7cc: 55 push %ebp <== NOT EXECUTED
11d7cd: 89 e5 mov %esp,%ebp <== NOT EXECUTED
11d7cf: 83 ec 14 sub $0x14,%esp <== NOT EXECUTED
11d7d2: 8b 45 08 mov 0x8(%ebp),%eax <== NOT EXECUTED
rtems_device_major_number major;
rtems_device_minor_number minor;
rtems_rfs_rtems_device_get_major_and_minor (iop, &major, &minor);
return rtems_deviceio_write (iop, buffer, count, major, minor);
11d7d5: ff 70 2c pushl 0x2c(%eax) <== NOT EXECUTED
11d7d8: ff 70 28 pushl 0x28(%eax) <== NOT EXECUTED
11d7db: ff 75 10 pushl 0x10(%ebp) <== NOT EXECUTED
11d7de: ff 75 0c pushl 0xc(%ebp) <== NOT EXECUTED
11d7e1: 50 push %eax <== NOT EXECUTED
11d7e2: e8 86 0d 00 00 call 11e56d <rtems_deviceio_write> <== NOT EXECUTED
}
11d7e7: c9 leave <== NOT EXECUTED
11d7e8: c3 ret <== NOT EXECUTED
0011db3e <rtems_rfs_rtems_dir_open>:
static int
rtems_rfs_rtems_dir_open (rtems_libio_t* iop,
const char* pathname,
int oflag,
mode_t mode)
{
11db3e: 55 push %ebp
11db3f: 89 e5 mov %esp,%ebp
11db41: 57 push %edi
11db42: 56 push %esi
11db43: 53 push %ebx
11db44: 83 ec 4c sub $0x4c,%esp
11db47: 8b 7d 08 mov 0x8(%ebp),%edi
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (&iop->pathinfo);
11db4a: 8b 47 24 mov 0x24(%edi),%eax
11db4d: 8b 58 08 mov 0x8(%eax),%ebx
rtems_rfs_ino ino = rtems_rfs_rtems_get_iop_ino (iop);
11db50: 8b 57 18 mov 0x18(%edi),%edx
.fstat_h = rtems_rfs_rtems_fstat,
.ftruncate_h = rtems_filesystem_default_ftruncate_directory,
.fsync_h = rtems_filesystem_default_fsync_or_fdatasync,
.fdatasync_h = rtems_rfs_rtems_fdatasync,
.fcntl_h = rtems_filesystem_default_fcntl
};
11db53: 8b 83 80 00 00 00 mov 0x80(%ebx),%eax
11db59: 8b 00 mov (%eax),%eax
11db5b: 89 55 b4 mov %edx,-0x4c(%ebp)
11db5e: e8 48 fe ff ff call 11d9ab <rtems_rfs_mutex_lock.isra.1>
rtems_rfs_inode_handle inode;
int rc;
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
11db63: 6a 01 push $0x1
11db65: 8d 75 c0 lea -0x40(%ebp),%esi
11db68: 56 push %esi
11db69: 8b 55 b4 mov -0x4c(%ebp),%edx
11db6c: 52 push %edx
11db6d: 53 push %ebx
11db6e: e8 b7 46 ff ff call 11222a <rtems_rfs_inode_open>
11db73: 89 c2 mov %eax,%edx
if (rc)
11db75: 83 c4 10 add $0x10,%esp
11db78: 85 c0 test %eax,%eax
11db7a: 74 16 je 11db92 <rtems_rfs_rtems_dir_open+0x54><== ALWAYS TAKEN
{
rtems_rfs_rtems_unlock (fs);
11db7c: 89 d8 mov %ebx,%eax <== NOT EXECUTED
11db7e: 89 55 b4 mov %edx,-0x4c(%ebp) <== NOT EXECUTED
11db81: e8 7b fe ff ff call 11da01 <rtems_rfs_rtems_unlock><== NOT EXECUTED
return rtems_rfs_rtems_error ("dir_open: opening inode", rc);
11db86: e8 41 16 00 00 call 11f1cc <__errno> <== NOT EXECUTED
11db8b: 8b 55 b4 mov -0x4c(%ebp),%edx <== NOT EXECUTED
11db8e: 89 10 mov %edx,(%eax) <== NOT EXECUTED
11db90: eb 32 jmp 11dbc4 <rtems_rfs_rtems_dir_open+0x86><== NOT EXECUTED
}
if (!RTEMS_RFS_S_ISDIR (rtems_rfs_inode_get_mode (&inode)))
11db92: 8b 45 cc mov -0x34(%ebp),%eax
* @return uint16_t The mode.
*/
static inline uint16_t
rtems_rfs_inode_get_mode (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u16 (&handle->node->mode);
11db95: 0f b6 40 02 movzbl 0x2(%eax),%eax
11db99: c1 e0 08 shl $0x8,%eax
11db9c: 66 25 00 f0 and $0xf000,%ax
11dba0: 66 3d 00 40 cmp $0x4000,%ax
11dba4: 74 23 je 11dbc9 <rtems_rfs_rtems_dir_open+0x8b><== ALWAYS TAKEN
{
rtems_rfs_inode_close (fs, &inode);
11dba6: 57 push %edi <== NOT EXECUTED
11dba7: 57 push %edi <== NOT EXECUTED
11dba8: 56 push %esi <== NOT EXECUTED
11dba9: 53 push %ebx <== NOT EXECUTED
11dbaa: e8 f8 47 ff ff call 1123a7 <rtems_rfs_inode_close> <== NOT EXECUTED
rtems_rfs_rtems_unlock (fs);
11dbaf: 89 d8 mov %ebx,%eax <== NOT EXECUTED
11dbb1: e8 4b fe ff ff call 11da01 <rtems_rfs_rtems_unlock><== NOT EXECUTED
return rtems_rfs_rtems_error ("dir_open: not dir", ENOTDIR);
11dbb6: e8 11 16 00 00 call 11f1cc <__errno> <== NOT EXECUTED
11dbbb: c7 00 14 00 00 00 movl $0x14,(%eax) <== NOT EXECUTED
11dbc1: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11dbc4: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
11dbc7: eb 23 jmp 11dbec <rtems_rfs_rtems_dir_open+0xae><== NOT EXECUTED
}
iop->offset = 0;
11dbc9: c7 47 04 00 00 00 00 movl $0x0,0x4(%edi)
11dbd0: c7 47 08 00 00 00 00 movl $0x0,0x8(%edi)
rtems_rfs_inode_close (fs, &inode);
11dbd7: 51 push %ecx
11dbd8: 51 push %ecx
11dbd9: 56 push %esi
11dbda: 53 push %ebx
11dbdb: e8 c7 47 ff ff call 1123a7 <rtems_rfs_inode_close>
rtems_rfs_rtems_unlock (fs);
11dbe0: 89 d8 mov %ebx,%eax
11dbe2: e8 1a fe ff ff call 11da01 <rtems_rfs_rtems_unlock>
11dbe7: 83 c4 10 add $0x10,%esp
return 0;
11dbea: 31 c0 xor %eax,%eax
}
11dbec: 8d 65 f4 lea -0xc(%ebp),%esp
11dbef: 5b pop %ebx
11dbf0: 5e pop %esi
11dbf1: 5f pop %edi
11dbf2: 5d pop %ebp
11dbf3: c3 ret
0011da55 <rtems_rfs_rtems_dir_read>:
*/
static ssize_t
rtems_rfs_rtems_dir_read (rtems_libio_t* iop,
void* buffer,
size_t count)
{
11da55: 55 push %ebp
11da56: 89 e5 mov %esp,%ebp
11da58: 57 push %edi
11da59: 56 push %esi
11da5a: 53 push %ebx
11da5b: 83 ec 4c sub $0x4c,%esp
11da5e: 8b 75 08 mov 0x8(%ebp),%esi
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (&iop->pathinfo);
11da61: 8b 46 24 mov 0x24(%esi),%eax
11da64: 8b 58 08 mov 0x8(%eax),%ebx
rtems_rfs_ino ino = rtems_rfs_rtems_get_iop_ino (iop);
11da67: 8b 56 18 mov 0x18(%esi),%edx
.fstat_h = rtems_rfs_rtems_fstat,
.ftruncate_h = rtems_filesystem_default_ftruncate_directory,
.fsync_h = rtems_filesystem_default_fsync_or_fdatasync,
.fdatasync_h = rtems_rfs_rtems_fdatasync,
.fcntl_h = rtems_filesystem_default_fcntl
};
11da6a: 8b 83 80 00 00 00 mov 0x80(%ebx),%eax
*/
static inline void
rtems_rfs_rtems_lock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
rtems_rfs_mutex_lock (&rtems->access);
11da70: 8b 00 mov (%eax),%eax
11da72: 89 55 ac mov %edx,-0x54(%ebp)
11da75: e8 31 ff ff ff call 11d9ab <rtems_rfs_mutex_lock.isra.1>
count = count / sizeof (struct dirent);
dirent = buffer;
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
11da7a: 6a 01 push $0x1
11da7c: 8d 7d c0 lea -0x40(%ebp),%edi
11da7f: 57 push %edi
11da80: 8b 55 ac mov -0x54(%ebp),%edx
11da83: 52 push %edx
11da84: 53 push %ebx
11da85: e8 a0 47 ff ff call 11222a <rtems_rfs_inode_open>
11da8a: 89 c2 mov %eax,%edx
if (rc)
11da8c: 83 c4 10 add $0x10,%esp
11da8f: 85 c0 test %eax,%eax
11da91: 74 61 je 11daf4 <rtems_rfs_rtems_dir_read+0x9f><== ALWAYS TAKEN
{
rtems_rfs_rtems_unlock (fs);
11da93: 89 d8 mov %ebx,%eax <== NOT EXECUTED
11da95: 89 55 ac mov %edx,-0x54(%ebp) <== NOT EXECUTED
11da98: e8 64 ff ff ff call 11da01 <rtems_rfs_rtems_unlock><== NOT EXECUTED
return rtems_rfs_rtems_error ("dir_read: read inode", rc);
11da9d: e8 2a 17 00 00 call 11f1cc <__errno> <== NOT EXECUTED
11daa2: 8b 55 ac mov -0x54(%ebp),%edx <== NOT EXECUTED
11daa5: 89 10 mov %edx,(%eax) <== NOT EXECUTED
11daa7: 83 cf ff or $0xffffffff,%edi <== NOT EXECUTED
11daaa: e9 85 00 00 00 jmp 11db34 <rtems_rfs_rtems_dir_read+0xdf><== NOT EXECUTED
bytes_transferred = 0;
for (d = 0; d < count; d++, dirent++)
{
size_t size;
rc = rtems_rfs_dir_read (fs, &inode, iop->offset, dirent, &size);
11daaf: 52 push %edx
11dab0: 52 push %edx
11dab1: 8d 55 bc lea -0x44(%ebp),%edx
11dab4: 52 push %edx
11dab5: 50 push %eax
11dab6: ff 76 08 pushl 0x8(%esi)
11dab9: ff 76 04 pushl 0x4(%esi)
11dabc: 8d 45 c0 lea -0x40(%ebp),%eax
11dabf: 50 push %eax
11dac0: 53 push %ebx
11dac1: e8 5c d9 ff ff call 11b422 <rtems_rfs_dir_read>
if (rc == ENOENT)
11dac6: 83 c4 20 add $0x20,%esp
11dac9: 83 f8 02 cmp $0x2,%eax
11dacc: 74 50 je 11db1e <rtems_rfs_rtems_dir_read+0xc9>
{
rc = 0;
break;
}
if (rc > 0)
11dace: 85 c0 test %eax,%eax
11dad0: 7e 12 jle 11dae4 <rtems_rfs_rtems_dir_read+0x8f><== ALWAYS TAKEN
{
bytes_transferred = rtems_rfs_rtems_error ("dir_read: dir read", rc);
11dad2: 89 45 ac mov %eax,-0x54(%ebp) <== NOT EXECUTED
11dad5: e8 f2 16 00 00 call 11f1cc <__errno> <== NOT EXECUTED
11dada: 8b 4d ac mov -0x54(%ebp),%ecx <== NOT EXECUTED
11dadd: 89 08 mov %ecx,(%eax) <== NOT EXECUTED
11dadf: 83 cf ff or $0xffffffff,%edi <== NOT EXECUTED
11dae2: eb 3a jmp 11db1e <rtems_rfs_rtems_dir_read+0xc9><== NOT EXECUTED
break;
}
iop->offset += size;
11dae4: 8b 45 bc mov -0x44(%ebp),%eax
11dae7: 31 d2 xor %edx,%edx
11dae9: 01 46 04 add %eax,0x4(%esi)
11daec: 11 56 08 adc %edx,0x8(%esi)
return rtems_rfs_rtems_error ("dir_read: read inode", rc);
}
bytes_transferred = 0;
for (d = 0; d < count; d++, dirent++)
11daef: ff 45 b4 incl -0x4c(%ebp)
11daf2: eb 16 jmp 11db0a <rtems_rfs_rtems_dir_read+0xb5>
struct dirent* dirent;
ssize_t bytes_transferred;
int d;
int rc;
count = count / sizeof (struct dirent);
11daf4: b9 10 01 00 00 mov $0x110,%ecx
11daf9: 8b 45 10 mov 0x10(%ebp),%eax
11dafc: 31 d2 xor %edx,%edx
11dafe: f7 f1 div %ecx
11db00: 89 45 b0 mov %eax,-0x50(%ebp)
* exisiting file, the remaining entries will be placed in the buffer and the
* returned value will be equal to -m actual- times the size of a directory
* entry.
*/
static ssize_t
rtems_rfs_rtems_dir_read (rtems_libio_t* iop,
11db03: c7 45 b4 00 00 00 00 movl $0x0,-0x4c(%ebp)
11db0a: 69 7d b4 10 01 00 00 imul $0x110,-0x4c(%ebp),%edi
11db11: 8b 45 0c mov 0xc(%ebp),%eax
11db14: 01 f8 add %edi,%eax
return rtems_rfs_rtems_error ("dir_read: read inode", rc);
}
bytes_transferred = 0;
for (d = 0; d < count; d++, dirent++)
11db16: 8b 55 b0 mov -0x50(%ebp),%edx
11db19: 39 55 b4 cmp %edx,-0x4c(%ebp)
11db1c: 75 91 jne 11daaf <rtems_rfs_rtems_dir_read+0x5a>
}
iop->offset += size;
bytes_transferred += sizeof (struct dirent);
}
rtems_rfs_inode_close (fs, &inode);
11db1e: 50 push %eax
11db1f: 50 push %eax
11db20: 8d 45 c0 lea -0x40(%ebp),%eax
11db23: 50 push %eax
11db24: 53 push %ebx
11db25: e8 7d 48 ff ff call 1123a7 <rtems_rfs_inode_close>
rtems_rfs_rtems_unlock (fs);
11db2a: 89 d8 mov %ebx,%eax
11db2c: e8 d0 fe ff ff call 11da01 <rtems_rfs_rtems_unlock>
11db31: 83 c4 10 add $0x10,%esp
return bytes_transferred;
}
11db34: 89 f8 mov %edi,%eax
11db36: 8d 65 f4 lea -0xc(%ebp),%esp
11db39: 5b pop %ebx
11db3a: 5e pop %esi
11db3b: 5f pop %edi
11db3c: 5d pop %ebp
11db3d: c3 ret
0011300e <rtems_rfs_rtems_eval_path>:
.eval_token = rtems_rfs_rtems_eval_token
};
static void
rtems_rfs_rtems_eval_path (rtems_filesystem_eval_path_context_t *ctx)
{
11300e: 55 push %ebp
11300f: 89 e5 mov %esp,%ebp
113011: 57 push %edi
113012: 56 push %esi
113013: 53 push %ebx
113014: 83 ec 4c sub $0x4c,%esp
113017: 8b 5d 08 mov 0x8(%ebp),%ebx
rtems_filesystem_location_info_t *currentloc =
rtems_filesystem_eval_path_get_currentloc (ctx);
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (currentloc);
11301a: 8b 43 2c mov 0x2c(%ebx),%eax
11301d: 8b 78 08 mov 0x8(%eax),%edi
rtems_rfs_ino ino = rtems_rfs_rtems_get_pathloc_ino (currentloc);
rtems_rfs_inode_handle inode;
int rc;
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
113020: 6a 01 push $0x1
113022: 8d 75 c0 lea -0x40(%ebp),%esi
113025: 56 push %esi
113026: ff 73 20 pushl 0x20(%ebx)
113029: 57 push %edi
11302a: e8 fb f1 ff ff call 11222a <rtems_rfs_inode_open>
if (rc == 0) {
11302f: 83 c4 10 add $0x10,%esp
113032: 85 c0 test %eax,%eax
113034: 75 28 jne 11305e <rtems_rfs_rtems_eval_path+0x50><== NEVER TAKEN
rtems_filesystem_eval_path_generic (
113036: 50 push %eax
113037: 68 b4 05 13 00 push $0x1305b4
11303c: 56 push %esi
11303d: 53 push %ebx
11303e: e8 b5 37 00 00 call 1167f8 <rtems_filesystem_eval_path_generic>
ctx,
&inode,
&rtems_rfs_rtems_eval_config
);
rc = rtems_rfs_inode_close (fs, &inode);
113043: 58 pop %eax
113044: 5a pop %edx
113045: 56 push %esi
113046: 57 push %edi
113047: e8 5b f3 ff ff call 1123a7 <rtems_rfs_inode_close>
11304c: 89 c6 mov %eax,%esi
if (rc != 0) {
11304e: 83 c4 10 add $0x10,%esp
113051: 85 c0 test %eax,%eax
113053: 74 23 je 113078 <rtems_rfs_rtems_eval_path+0x6a><== ALWAYS TAKEN
rtems_filesystem_eval_path_error (
ctx,
rtems_rfs_rtems_error ("eval_path: closing inode", rc)
113055: e8 72 c1 00 00 call 11f1cc <__errno> <== NOT EXECUTED
11305a: 89 30 mov %esi,(%eax) <== NOT EXECUTED
11305c: eb 0d jmp 11306b <rtems_rfs_rtems_eval_path+0x5d><== NOT EXECUTED
);
}
} else {
rtems_filesystem_eval_path_error (
ctx,
rtems_rfs_rtems_error ("eval_path: opening inode", rc)
11305e: 89 45 b4 mov %eax,-0x4c(%ebp) <== NOT EXECUTED
113061: e8 66 c1 00 00 call 11f1cc <__errno> <== NOT EXECUTED
113066: 8b 55 b4 mov -0x4c(%ebp),%edx <== NOT EXECUTED
113069: 89 10 mov %edx,(%eax) <== NOT EXECUTED
ctx,
rtems_rfs_rtems_error ("eval_path: closing inode", rc)
);
}
} else {
rtems_filesystem_eval_path_error (
11306b: 50 push %eax <== NOT EXECUTED
11306c: 50 push %eax <== NOT EXECUTED
11306d: 6a ff push $0xffffffff <== NOT EXECUTED
11306f: 53 push %ebx <== NOT EXECUTED
113070: e8 49 82 ff ff call 10b2be <rtems_filesystem_eval_path_error><== NOT EXECUTED
113075: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
ctx,
rtems_rfs_rtems_error ("eval_path: opening inode", rc)
);
}
}
113078: 8d 65 f4 lea -0xc(%ebp),%esp
11307b: 5b pop %ebx
11307c: 5e pop %esi
11307d: 5f pop %edi
11307e: 5d pop %ebp
11307f: c3 ret
001135d4 <rtems_rfs_rtems_eval_token>:
rtems_filesystem_eval_path_context_t *ctx,
void *arg,
const char *token,
size_t tokenlen
)
{
1135d4: 55 push %ebp
1135d5: 89 e5 mov %esp,%ebp
1135d7: 57 push %edi
1135d8: 56 push %esi
1135d9: 53 push %ebx
1135da: 83 ec 38 sub $0x38,%esp
1135dd: 8b 5d 08 mov 0x8(%ebp),%ebx
1135e0: 8b 75 0c mov 0xc(%ebp),%esi
/* FIXME: Return value? */
rtems_rfs_fs_close(fs);
rtems_rfs_mutex_destroy (&rtems->access);
free (rtems);
}
1135e3: 8b 56 0c mov 0xc(%esi),%edx
* @return uint16_t The group id (gid).
*/
static inline uint16_t
rtems_rfs_inode_get_gid (rtems_rfs_inode_handle* handle)
{
return (rtems_rfs_read_u32 (&handle->node->owner) >> 16) & 0xffff;
1135e6: 0f b6 42 04 movzbl 0x4(%edx),%eax
1135ea: c1 e0 18 shl $0x18,%eax
1135ed: 0f b6 4a 05 movzbl 0x5(%edx),%ecx
1135f1: c1 e1 10 shl $0x10,%ecx
1135f4: 09 c8 or %ecx,%eax
1135f6: c1 e8 10 shr $0x10,%eax
static bool
rtems_rfs_rtems_eval_perms (rtems_filesystem_eval_path_context_t *ctx,
int eval_flags,
rtems_rfs_inode_handle* inode)
{
return rtems_filesystem_eval_path_check_access(
1135f9: 50 push %eax
* @return uint16_t The user id (uid).
*/
static inline uint16_t
rtems_rfs_inode_get_uid (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->owner) & 0xffff;
1135fa: 0f b6 42 06 movzbl 0x6(%edx),%eax
1135fe: c1 e0 08 shl $0x8,%eax
113601: 0f b6 4a 07 movzbl 0x7(%edx),%ecx
113605: 09 c8 or %ecx,%eax
113607: 0f b7 c0 movzwl %ax,%eax
11360a: 50 push %eax
* @return uint16_t The mode.
*/
static inline uint16_t
rtems_rfs_inode_get_mode (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u16 (&handle->node->mode);
11360b: 0f b6 4a 02 movzbl 0x2(%edx),%ecx
11360f: c1 e1 08 shl $0x8,%ecx
113612: 0f b6 42 03 movzbl 0x3(%edx),%eax
113616: 09 c8 or %ecx,%eax
113618: 0f b7 c0 movzwl %ax,%eax
11361b: 50 push %eax
11361c: 6a 01 push $0x1
11361e: 53 push %ebx
11361f: e8 99 31 00 00 call 1167bd <rtems_filesystem_eval_path_check_access>
rtems_filesystem_eval_path_generic_status status =
RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_DONE;
rtems_rfs_inode_handle* inode = arg;
bool access_ok = rtems_rfs_rtems_eval_perms (ctx, RTEMS_FS_PERMS_EXEC, inode);
if (access_ok) {
113624: 83 c4 20 add $0x20,%esp
void *arg,
const char *token,
size_t tokenlen
)
{
rtems_filesystem_eval_path_generic_status status =
113627: ba 01 00 00 00 mov $0x1,%edx
RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_DONE;
rtems_rfs_inode_handle* inode = arg;
bool access_ok = rtems_rfs_rtems_eval_perms (ctx, RTEMS_FS_PERMS_EXEC, inode);
if (access_ok) {
11362c: 84 c0 test %al,%al
11362e: 0f 84 6b 01 00 00 je 11379f <rtems_rfs_rtems_eval_token+0x1cb>
static inline bool rtems_filesystem_is_current_directory(
const char *token,
size_t tokenlen
)
{
return tokenlen == 1 && token [0] == '.';
113634: 31 c0 xor %eax,%eax
113636: 83 7d 14 01 cmpl $0x1,0x14(%ebp)
11363a: 75 0c jne 113648 <rtems_rfs_rtems_eval_token+0x74>
11363c: 8b 45 10 mov 0x10(%ebp),%eax
11363f: 80 38 2e cmpb $0x2e,(%eax)
113642: 0f 94 c0 sete %al
113645: 0f b6 c0 movzbl %al,%eax
if (rtems_filesystem_is_current_directory (token, tokenlen)) {
113648: 85 c0 test %eax,%eax
11364a: 74 0c je 113658 <rtems_rfs_rtems_eval_token+0x84>
static inline void rtems_filesystem_eval_path_clear_token(
rtems_filesystem_eval_path_context_t *ctx
)
{
ctx->tokenlen = 0;
11364c: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx)
113653: e9 dd 00 00 00 jmp 113735 <rtems_rfs_rtems_eval_token+0x161>
rtems_filesystem_eval_path_clear_token (ctx);
} else {
rtems_filesystem_location_info_t *currentloc =
rtems_filesystem_eval_path_get_currentloc( ctx );
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (currentloc);
113658: 8b 43 2c mov 0x2c(%ebx),%eax
11365b: 8b 78 08 mov 0x8(%eax),%edi
rtems_rfs_ino entry_ino;
uint32_t entry_doff;
int rc = rtems_rfs_dir_lookup_ino (
11365e: 50 push %eax
11365f: 50 push %eax
113660: 8d 45 e0 lea -0x20(%ebp),%eax
113663: 50 push %eax
113664: 8d 45 dc lea -0x24(%ebp),%eax
113667: 50 push %eax
113668: ff 75 14 pushl 0x14(%ebp)
11366b: ff 75 10 pushl 0x10(%ebp)
11366e: 56 push %esi
11366f: 57 push %edi
113670: e8 4b 72 00 00 call 11a8c0 <rtems_rfs_dir_lookup_ino>
tokenlen,
&entry_ino,
&entry_doff
);
if (rc == 0) {
113675: 83 c4 20 add $0x20,%esp
* rtems_rfs_rtems_eval_path().
*/
memset (inode, 0, sizeof(*inode));
}
} else {
status = RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_NO_ENTRY;
113678: ba 02 00 00 00 mov $0x2,%edx
tokenlen,
&entry_ino,
&entry_doff
);
if (rc == 0) {
11367d: 85 c0 test %eax,%eax
11367f: 0f 85 1a 01 00 00 jne 11379f <rtems_rfs_rtems_eval_token+0x1cb>
rc = rtems_rfs_inode_close (fs, inode);
113685: 50 push %eax
113686: 50 push %eax
113687: 56 push %esi
113688: 57 push %edi
113689: e8 19 ed ff ff call 1123a7 <rtems_rfs_inode_close>
if (rc == 0) {
11368e: 83 c4 10 add $0x10,%esp
113691: 85 c0 test %eax,%eax
113693: 74 10 je 1136a5 <rtems_rfs_rtems_eval_token+0xd1><== ALWAYS TAKEN
if (rc != 0) {
/*
* This prevents the rtems_rfs_inode_close() from doing something in
* rtems_rfs_rtems_eval_path().
*/
memset (inode, 0, sizeof(*inode));
113695: b9 0a 00 00 00 mov $0xa,%ecx <== NOT EXECUTED
11369a: 31 c0 xor %eax,%eax <== NOT EXECUTED
11369c: 89 f7 mov %esi,%edi <== NOT EXECUTED
11369e: f3 ab rep stos %eax,%es:(%edi) <== NOT EXECUTED
1136a0: e9 90 00 00 00 jmp 113735 <rtems_rfs_rtems_eval_token+0x161><== NOT EXECUTED
);
if (rc == 0) {
rc = rtems_rfs_inode_close (fs, inode);
if (rc == 0) {
rc = rtems_rfs_inode_open (fs, entry_ino, inode, true);
1136a5: 6a 01 push $0x1
1136a7: 56 push %esi
1136a8: ff 75 dc pushl -0x24(%ebp)
1136ab: 57 push %edi
1136ac: e8 79 eb ff ff call 11222a <rtems_rfs_inode_open>
}
if (rc != 0) {
1136b1: 83 c4 10 add $0x10,%esp
1136b4: 85 c0 test %eax,%eax
1136b6: 0f 84 9b 00 00 00 je 113757 <rtems_rfs_rtems_eval_token+0x183><== ALWAYS TAKEN
1136bc: eb d7 jmp 113695 <rtems_rfs_rtems_eval_token+0xc1><== NOT EXECUTED
bool follow_sym_link = (eval_flags & RTEMS_FS_FOLLOW_SYM_LINK) != 0;
bool terminal = !rtems_filesystem_eval_path_has_path (ctx);
rtems_filesystem_eval_path_clear_token (ctx);
if (is_sym_link && (follow_sym_link || !terminal)) {
1136be: 84 c9 test %cl,%cl
1136c0: 74 04 je 1136c6 <rtems_rfs_rtems_eval_token+0xf2>
1136c2: 84 d2 test %dl,%dl
1136c4: 74 76 je 11373c <rtems_rfs_rtems_eval_token+0x168>
rtems_rfs_rtems_follow_link (ctx, fs, entry_ino);
1136c6: 8b 55 dc mov -0x24(%ebp),%edx
rtems_filesystem_eval_path_context_t* ctx,
rtems_rfs_file_system* fs,
rtems_rfs_ino ino
)
{
size_t len = MAXPATHLEN;
1136c9: c7 45 e4 00 04 00 00 movl $0x400,-0x1c(%ebp)
char *link = malloc(len + 1);
1136d0: 83 ec 0c sub $0xc,%esp
1136d3: 68 01 04 00 00 push $0x401
1136d8: 89 55 d4 mov %edx,-0x2c(%ebp)
1136db: e8 20 6d ff ff call 10a400 <malloc>
1136e0: 89 c6 mov %eax,%esi
if (link != NULL) {
1136e2: 83 c4 10 add $0x10,%esp
1136e5: 85 c0 test %eax,%eax
1136e7: 8b 55 d4 mov -0x2c(%ebp),%edx
1136ea: 74 3c je 113728 <rtems_rfs_rtems_eval_token+0x154><== NEVER TAKEN
int rc = rtems_rfs_symlink_read (fs, ino, link, len, &len);
1136ec: 83 ec 0c sub $0xc,%esp
1136ef: 8d 45 e4 lea -0x1c(%ebp),%eax
1136f2: 50 push %eax
1136f3: 68 00 04 00 00 push $0x400
1136f8: 56 push %esi
1136f9: 52 push %edx
1136fa: 57 push %edi
1136fb: e8 1c 9e 00 00 call 11d51c <rtems_rfs_symlink_read>
if (rc == 0) {
113700: 83 c4 20 add $0x20,%esp
113703: 85 c0 test %eax,%eax
113705: 75 0d jne 113714 <rtems_rfs_rtems_eval_token+0x140><== NEVER TAKEN
rtems_filesystem_eval_path_recursive (ctx, link, len);
113707: 50 push %eax
113708: ff 75 e4 pushl -0x1c(%ebp)
11370b: 56 push %esi
11370c: 53 push %ebx
11370d: e8 48 7f ff ff call 10b65a <rtems_filesystem_eval_path_recursive>
113712: eb 0a jmp 11371e <rtems_rfs_rtems_eval_token+0x14a>
} else {
rtems_filesystem_eval_path_error (ctx, 0);
113714: 57 push %edi <== NOT EXECUTED
113715: 57 push %edi <== NOT EXECUTED
113716: 6a 00 push $0x0 <== NOT EXECUTED
113718: 53 push %ebx <== NOT EXECUTED
113719: e8 a0 7b ff ff call 10b2be <rtems_filesystem_eval_path_error><== NOT EXECUTED
}
free(link);
11371e: 89 34 24 mov %esi,(%esp)
113721: e8 c2 67 ff ff call 109ee8 <free>
113726: eb 0a jmp 113732 <rtems_rfs_rtems_eval_token+0x15e>
} else {
rtems_filesystem_eval_path_error (ctx, ENOMEM);
113728: 51 push %ecx <== NOT EXECUTED
113729: 51 push %ecx <== NOT EXECUTED
11372a: 6a 0c push $0xc <== NOT EXECUTED
11372c: 53 push %ebx <== NOT EXECUTED
11372d: e8 8c 7b ff ff call 10b2be <rtems_filesystem_eval_path_error><== NOT EXECUTED
113732: 83 c4 10 add $0x10,%esp
void *arg,
const char *token,
size_t tokenlen
)
{
rtems_filesystem_eval_path_generic_status status =
113735: ba 01 00 00 00 mov $0x1,%edx
11373a: eb 63 jmp 11379f <rtems_rfs_rtems_eval_token+0x1cb>
rtems_filesystem_eval_path_clear_token (ctx);
if (is_sym_link && (follow_sym_link || !terminal)) {
rtems_rfs_rtems_follow_link (ctx, fs, entry_ino);
} else {
rc = rtems_rfs_rtems_set_handlers (currentloc, inode) ? 0 : EIO;
11373c: 52 push %edx
11373d: 52 push %edx
11373e: 56 push %esi
if (access_ok) {
if (rtems_filesystem_is_current_directory (token, tokenlen)) {
rtems_filesystem_eval_path_clear_token (ctx);
} else {
rtems_filesystem_location_info_t *currentloc =
11373f: 8d 43 18 lea 0x18(%ebx),%eax
rtems_filesystem_eval_path_clear_token (ctx);
if (is_sym_link && (follow_sym_link || !terminal)) {
rtems_rfs_rtems_follow_link (ctx, fs, entry_ino);
} else {
rc = rtems_rfs_rtems_set_handlers (currentloc, inode) ? 0 : EIO;
113742: 50 push %eax
113743: 88 4d d4 mov %cl,-0x2c(%ebp)
113746: e8 b5 00 00 00 call 113800 <rtems_rfs_rtems_set_handlers>
11374b: 83 c4 10 add $0x10,%esp
11374e: 84 c0 test %al,%al
113750: 8a 4d d4 mov -0x2c(%ebp),%cl
113753: 75 3b jne 113790 <rtems_rfs_rtems_eval_token+0x1bc><== ALWAYS TAKEN
113755: eb 28 jmp 11377f <rtems_rfs_rtems_eval_token+0x1ab><== NOT EXECUTED
status = RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_NO_ENTRY;
rc = -1;
}
if (rc == 0) {
bool is_sym_link = rtems_rfs_rtems_node_type_by_inode (inode)
113757: 89 f0 mov %esi,%eax
113759: e8 b1 f2 ff ff call 112a0f <rtems_rfs_rtems_node_type_by_inode>
== RTEMS_FILESYSTEM_SYM_LINK;
int eval_flags = rtems_filesystem_eval_path_get_flags (ctx);
bool follow_sym_link = (eval_flags & RTEMS_FS_FOLLOW_SYM_LINK) != 0;
11375e: 8b 53 10 mov 0x10(%ebx),%edx
113761: c1 ea 04 shr $0x4,%edx
113764: 83 e2 01 and $0x1,%edx
bool terminal = !rtems_filesystem_eval_path_has_path (ctx);
113767: 83 7b 04 00 cmpl $0x0,0x4(%ebx)
11376b: 0f 94 c1 sete %cl
11376e: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx)
rtems_filesystem_eval_path_clear_token (ctx);
if (is_sym_link && (follow_sym_link || !terminal)) {
113775: 83 f8 03 cmp $0x3,%eax
113778: 75 c2 jne 11373c <rtems_rfs_rtems_eval_token+0x168>
11377a: e9 3f ff ff ff jmp 1136be <rtems_rfs_rtems_eval_token+0xea>
status = RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_CONTINUE;
}
} else {
rtems_filesystem_eval_path_error (
ctx,
rtems_rfs_rtems_error ("eval_path: set handlers", rc)
11377f: e8 48 ba 00 00 call 11f1cc <__errno> <== NOT EXECUTED
113784: c7 00 05 00 00 00 movl $0x5,(%eax) <== NOT EXECUTED
if (!terminal) {
status = RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_CONTINUE;
}
} else {
rtems_filesystem_eval_path_error (
11378a: 50 push %eax <== NOT EXECUTED
11378b: 50 push %eax <== NOT EXECUTED
11378c: 6a ff push $0xffffffff <== NOT EXECUTED
11378e: eb 9c jmp 11372c <rtems_rfs_rtems_eval_token+0x158><== NOT EXECUTED
if (is_sym_link && (follow_sym_link || !terminal)) {
rtems_rfs_rtems_follow_link (ctx, fs, entry_ino);
} else {
rc = rtems_rfs_rtems_set_handlers (currentloc, inode) ? 0 : EIO;
if (rc == 0) {
rtems_rfs_rtems_set_pathloc_ino (currentloc, entry_ino);
113790: 8b 45 dc mov -0x24(%ebp),%eax
113793: 89 43 20 mov %eax,0x20(%ebx)
rtems_rfs_rtems_set_pathloc_doff (currentloc, entry_doff);
113796: 8b 45 e0 mov -0x20(%ebp),%eax
113799: 89 43 24 mov %eax,0x24(%ebx)
void *arg,
const char *token,
size_t tokenlen
)
{
rtems_filesystem_eval_path_generic_status status =
11379c: 0f b6 d1 movzbl %cl,%edx
}
}
}
return status;
}
11379f: 89 d0 mov %edx,%eax
1137a1: 8d 65 f4 lea -0xc(%ebp),%esp
1137a4: 5b pop %ebx
1137a5: 5e pop %esi
1137a6: 5f pop %edi
1137a7: 5d pop %ebp
1137a8: c3 ret
00112dbf <rtems_rfs_rtems_fchmod>:
}
static int
rtems_rfs_rtems_fchmod (const rtems_filesystem_location_info_t* pathloc,
mode_t mode)
{
112dbf: 55 push %ebp
112dc0: 89 e5 mov %esp,%ebp
112dc2: 57 push %edi
112dc3: 56 push %esi
112dc4: 53 push %ebx
112dc5: 83 ec 4c sub $0x4c,%esp
112dc8: 8b 45 08 mov 0x8(%ebp),%eax
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
112dcb: 8b 50 14 mov 0x14(%eax),%edx
112dce: 8b 5a 08 mov 0x8(%edx),%ebx
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_FCHMOD))
printf ("rtems-rfs-rtems: fchmod: in: ino:%" PRId32 " mode:%06" PRIomode_t "\n",
ino, mode);
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
112dd1: 6a 01 push $0x1
112dd3: 8d 75 c0 lea -0x40(%ebp),%esi
112dd6: 56 push %esi
112dd7: ff 70 08 pushl 0x8(%eax)
112dda: 53 push %ebx
112ddb: e8 4a f4 ff ff call 11222a <rtems_rfs_inode_open>
112de0: 89 c7 mov %eax,%edi
if (rc)
112de2: 83 c4 10 add $0x10,%esp
112de5: 85 c0 test %eax,%eax
112de7: 74 0c je 112df5 <rtems_rfs_rtems_fchmod+0x36><== ALWAYS TAKEN
{
return rtems_rfs_rtems_error ("fchmod: opening inode", rc);
112de9: e8 de c3 00 00 call 11f1cc <__errno> <== NOT EXECUTED
112dee: 89 38 mov %edi,(%eax) <== NOT EXECUTED
112df0: e9 8d 00 00 00 jmp 112e82 <rtems_rfs_rtems_fchmod+0xc3><== NOT EXECUTED
}
imode = rtems_rfs_inode_get_mode (&inode);
112df5: 8b 55 cc mov -0x34(%ebp),%edx
* @return uint16_t The mode.
*/
static inline uint16_t
rtems_rfs_inode_get_mode (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u16 (&handle->node->mode);
112df8: 0f b6 42 02 movzbl 0x2(%edx),%eax
112dfc: c1 e0 08 shl $0x8,%eax
112dff: 0f b6 52 03 movzbl 0x3(%edx),%edx
112e03: 09 c2 or %eax,%edx
112e05: 66 89 55 b4 mov %dx,-0x4c(%ebp)
/*
* Verify I am the owner of the node or the super user.
*/
#if defined (RTEMS_POSIX_API)
uid = geteuid();
112e09: e8 a2 36 00 00 call 1164b0 <geteuid>
if ((uid != rtems_rfs_inode_get_uid (&inode)) && (uid != 0))
112e0e: 8b 4d cc mov -0x34(%ebp),%ecx
* @return uint16_t The user id (uid).
*/
static inline uint16_t
rtems_rfs_inode_get_uid (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->owner) & 0xffff;
112e11: 0f b6 51 06 movzbl 0x6(%ecx),%edx
112e15: c1 e2 08 shl $0x8,%edx
112e18: 0f b6 79 07 movzbl 0x7(%ecx),%edi
112e1c: 09 fa or %edi,%edx
112e1e: 66 39 d0 cmp %dx,%ax
112e21: 74 1e je 112e41 <rtems_rfs_rtems_fchmod+0x82><== ALWAYS TAKEN
112e23: 66 85 c0 test %ax,%ax <== NOT EXECUTED
112e26: 74 19 je 112e41 <rtems_rfs_rtems_fchmod+0x82><== NOT EXECUTED
{
rtems_rfs_inode_close (fs, &inode);
112e28: 57 push %edi <== NOT EXECUTED
112e29: 57 push %edi <== NOT EXECUTED
112e2a: 56 push %esi <== NOT EXECUTED
112e2b: 53 push %ebx <== NOT EXECUTED
112e2c: e8 76 f5 ff ff call 1123a7 <rtems_rfs_inode_close> <== NOT EXECUTED
return rtems_rfs_rtems_error ("fchmod: checking uid", EPERM);
112e31: e8 96 c3 00 00 call 11f1cc <__errno> <== NOT EXECUTED
112e36: c7 00 01 00 00 00 movl $0x1,(%eax) <== NOT EXECUTED
112e3c: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
112e3f: eb 41 jmp 112e82 <rtems_rfs_rtems_fchmod+0xc3><== NOT EXECUTED
}
#endif
imode &= ~(S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID | S_ISVTX);
112e41: 8b 45 b4 mov -0x4c(%ebp),%eax
112e44: 66 25 00 f0 and $0xf000,%ax
imode |= mode & (S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID | S_ISVTX);
112e48: 8b 55 0c mov 0xc(%ebp),%edx
112e4b: 81 e2 ff 0f 00 00 and $0xfff,%edx
112e51: 09 d0 or %edx,%eax
* @prarm mode The mode.
*/
static inline void
rtems_rfs_inode_set_mode (rtems_rfs_inode_handle* handle, uint16_t mode)
{
rtems_rfs_write_u16 (&handle->node->mode, mode);
112e53: 89 c2 mov %eax,%edx
112e55: 66 c1 ea 08 shr $0x8,%dx
112e59: 88 51 02 mov %dl,0x2(%ecx)
112e5c: 8b 55 cc mov -0x34(%ebp),%edx
112e5f: 88 42 03 mov %al,0x3(%edx)
rtems_rfs_buffer_mark_dirty (&handle->buffer);
112e62: c6 45 d0 01 movb $0x1,-0x30(%ebp)
rtems_rfs_inode_set_mode (&inode, imode);
rc = rtems_rfs_inode_close (fs, &inode);
112e66: 56 push %esi
112e67: 56 push %esi
112e68: 8d 45 c0 lea -0x40(%ebp),%eax
112e6b: 50 push %eax
112e6c: 53 push %ebx
112e6d: e8 35 f5 ff ff call 1123a7 <rtems_rfs_inode_close>
112e72: 89 c3 mov %eax,%ebx
if (rc > 0)
112e74: 83 c4 10 add $0x10,%esp
112e77: 85 c0 test %eax,%eax
112e79: 7e 0c jle 112e87 <rtems_rfs_rtems_fchmod+0xc8><== ALWAYS TAKEN
{
return rtems_rfs_rtems_error ("fchmod: closing inode", rc);
112e7b: e8 4c c3 00 00 call 11f1cc <__errno> <== NOT EXECUTED
112e80: 89 18 mov %ebx,(%eax) <== NOT EXECUTED
112e82: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
112e85: eb 02 jmp 112e89 <rtems_rfs_rtems_fchmod+0xca><== NOT EXECUTED
}
return 0;
112e87: 31 c0 xor %eax,%eax
}
112e89: 8d 65 f4 lea -0xc(%ebp),%esp
112e8c: 5b pop %ebx
112e8d: 5e pop %esi
112e8e: 5f pop %edi
112e8f: 5d pop %ebp
112e90: c3 ret
001137d0 <rtems_rfs_rtems_fdatasync>:
* @param iop
* @return int
*/
int
rtems_rfs_rtems_fdatasync (rtems_libio_t* iop)
{
1137d0: 55 push %ebp <== NOT EXECUTED
1137d1: 89 e5 mov %esp,%ebp <== NOT EXECUTED
1137d3: 53 push %ebx <== NOT EXECUTED
1137d4: 83 ec 10 sub $0x10,%esp <== NOT EXECUTED
int rc;
rc = rtems_rfs_buffer_sync (rtems_rfs_rtems_pathloc_dev (&iop->pathinfo));
1137d7: 8b 45 08 mov 0x8(%ebp),%eax <== NOT EXECUTED
1137da: 8b 40 24 mov 0x24(%eax),%eax <== NOT EXECUTED
1137dd: ff 70 08 pushl 0x8(%eax) <== NOT EXECUTED
1137e0: e8 30 6e 00 00 call 11a615 <rtems_rfs_buffer_sync> <== NOT EXECUTED
1137e5: 89 c3 mov %eax,%ebx <== NOT EXECUTED
if (rc)
1137e7: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
return rtems_rfs_rtems_error ("fdatasync: sync", rc);
return 0;
1137ea: 31 c0 xor %eax,%eax <== NOT EXECUTED
rtems_rfs_rtems_fdatasync (rtems_libio_t* iop)
{
int rc;
rc = rtems_rfs_buffer_sync (rtems_rfs_rtems_pathloc_dev (&iop->pathinfo));
if (rc)
1137ec: 85 db test %ebx,%ebx <== NOT EXECUTED
1137ee: 74 0a je 1137fa <rtems_rfs_rtems_fdatasync+0x2a><== NOT EXECUTED
return rtems_rfs_rtems_error ("fdatasync: sync", rc);
1137f0: e8 d7 b9 00 00 call 11f1cc <__errno> <== NOT EXECUTED
1137f5: 89 18 mov %ebx,(%eax) <== NOT EXECUTED
1137f7: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
return 0;
}
1137fa: 8b 5d fc mov -0x4(%ebp),%ebx <== NOT EXECUTED
1137fd: c9 leave <== NOT EXECUTED
1137fe: c3 ret <== NOT EXECUTED
0011ddb5 <rtems_rfs_rtems_file_close>:
* @param iop
* @return int
*/
static int
rtems_rfs_rtems_file_close (rtems_libio_t* iop)
{
11ddb5: 55 push %ebp
11ddb6: 89 e5 mov %esp,%ebp
11ddb8: 56 push %esi
11ddb9: 53 push %ebx
rtems_rfs_file_handle* file = rtems_rfs_rtems_get_iop_file_handle (iop);
11ddba: 8b 45 08 mov 0x8(%ebp),%eax
11ddbd: 8b 58 1c mov 0x1c(%eax),%ebx
rtems_rfs_file_system* fs = rtems_rfs_file_fs (file);
11ddc0: 8b 43 1c mov 0x1c(%ebx),%eax
11ddc3: 8b b0 98 00 00 00 mov 0x98(%eax),%esi
.fstat_h = rtems_rfs_rtems_fstat,
.ftruncate_h = rtems_rfs_rtems_file_ftruncate,
.fsync_h = rtems_rfs_rtems_fdatasync,
.fdatasync_h = rtems_rfs_rtems_fdatasync,
.fcntl_h = rtems_filesystem_default_fcntl
};
11ddc9: 8b 86 80 00 00 00 mov 0x80(%esi),%eax
11ddcf: 8b 00 mov (%eax),%eax
11ddd1: e8 1e fe ff ff call 11dbf4 <rtems_rfs_mutex_lock.isra.0>
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_FILE_CLOSE))
printf("rtems-rfs: file-close: handle:%p\n", file);
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_file_close (fs, file);
11ddd6: 50 push %eax
11ddd7: 50 push %eax
11ddd8: 53 push %ebx
11ddd9: 56 push %esi
11ddda: e8 81 db ff ff call 11b960 <rtems_rfs_file_close>
11dddf: 89 c3 mov %eax,%ebx
if (rc > 0)
11dde1: 83 c4 10 add $0x10,%esp
11dde4: 85 c0 test %eax,%eax
11dde6: 7e 0a jle 11ddf2 <rtems_rfs_rtems_file_close+0x3d><== ALWAYS TAKEN
rc = rtems_rfs_rtems_error ("file-close: file close", rc);
11dde8: e8 df 13 00 00 call 11f1cc <__errno> <== NOT EXECUTED
11dded: 89 18 mov %ebx,(%eax) <== NOT EXECUTED
11ddef: 83 cb ff or $0xffffffff,%ebx <== NOT EXECUTED
rtems_rfs_rtems_unlock (fs);
11ddf2: 89 f0 mov %esi,%eax
11ddf4: e8 51 fe ff ff call 11dc4a <rtems_rfs_rtems_unlock>
return rc;
}
11ddf9: 89 d8 mov %ebx,%eax
11ddfb: 8d 65 f8 lea -0x8(%ebp),%esp
11ddfe: 5b pop %ebx
11ddff: 5e pop %esi
11de00: 5d pop %ebp
11de01: c3 ret
0011de63 <rtems_rfs_rtems_file_ftruncate>:
* @return int
*/
static int
rtems_rfs_rtems_file_ftruncate (rtems_libio_t* iop,
off_t length)
{
11de63: 55 push %ebp
11de64: 89 e5 mov %esp,%ebp
11de66: 57 push %edi
11de67: 56 push %esi
11de68: 53 push %ebx
11de69: 83 ec 0c sub $0xc,%esp
11de6c: 8b 75 0c mov 0xc(%ebp),%esi
11de6f: 8b 7d 10 mov 0x10(%ebp),%edi
rtems_rfs_file_handle* file = rtems_rfs_rtems_get_iop_file_handle (iop);
11de72: 8b 45 08 mov 0x8(%ebp),%eax
11de75: 8b 58 1c mov 0x1c(%eax),%ebx
int rc;
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_FILE_FTRUNC))
printf("rtems-rfs: file-ftrunc: handle:%p length:%" PRIdoff_t "\n", file, length);
rtems_rfs_rtems_lock (rtems_rfs_file_fs (file));
11de78: 8b 43 1c mov 0x1c(%ebx),%eax
.fstat_h = rtems_rfs_rtems_fstat,
.ftruncate_h = rtems_rfs_rtems_file_ftruncate,
.fsync_h = rtems_rfs_rtems_fdatasync,
.fdatasync_h = rtems_rfs_rtems_fdatasync,
.fcntl_h = rtems_filesystem_default_fcntl
};
11de7b: 8b 80 98 00 00 00 mov 0x98(%eax),%eax
11de81: 8b 80 80 00 00 00 mov 0x80(%eax),%eax
11de87: 8b 00 mov (%eax),%eax
11de89: e8 66 fd ff ff call 11dbf4 <rtems_rfs_mutex_lock.isra.0>
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_FILE_FTRUNC))
printf("rtems-rfs: file-ftrunc: handle:%p length:%" PRIdoff_t "\n", file, length);
rtems_rfs_rtems_lock (rtems_rfs_file_fs (file));
rc = rtems_rfs_file_set_size (file, length);
11de8e: 50 push %eax
11de8f: 57 push %edi
11de90: 56 push %esi
11de91: 53 push %ebx
11de92: e8 c6 e1 ff ff call 11c05d <rtems_rfs_file_set_size>
11de97: 89 c6 mov %eax,%esi
if (rc)
11de99: 83 c4 10 add $0x10,%esp
11de9c: 85 c0 test %eax,%eax
11de9e: 74 0a je 11deaa <rtems_rfs_rtems_file_ftruncate+0x47><== ALWAYS TAKEN
rc = rtems_rfs_rtems_error ("file_ftruncate: set size", rc);
11dea0: e8 27 13 00 00 call 11f1cc <__errno> <== NOT EXECUTED
11dea5: 89 30 mov %esi,(%eax) <== NOT EXECUTED
11dea7: 83 ce ff or $0xffffffff,%esi <== NOT EXECUTED
rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
11deaa: 8b 43 1c mov 0x1c(%ebx),%eax
11dead: 8b 80 98 00 00 00 mov 0x98(%eax),%eax
11deb3: e8 92 fd ff ff call 11dc4a <rtems_rfs_rtems_unlock>
return rc;
}
11deb8: 89 f0 mov %esi,%eax
11deba: 8d 65 f4 lea -0xc(%ebp),%esp
11debd: 5b pop %ebx
11debe: 5e pop %esi
11debf: 5f pop %edi
11dec0: 5d pop %ebp
11dec1: c3 ret
0011dec2 <rtems_rfs_rtems_file_lseek>:
*/
static off_t
rtems_rfs_rtems_file_lseek (rtems_libio_t* iop,
off_t offset,
int whence)
{
11dec2: 55 push %ebp
11dec3: 89 e5 mov %esp,%ebp
11dec5: 57 push %edi
11dec6: 56 push %esi
11dec7: 53 push %ebx
11dec8: 83 ec 3c sub $0x3c,%esp
11decb: 8b 5d 08 mov 0x8(%ebp),%ebx
11dece: 8b 75 0c mov 0xc(%ebp),%esi
11ded1: 8b 7d 10 mov 0x10(%ebp),%edi
rtems_rfs_file_handle* file = rtems_rfs_rtems_get_iop_file_handle (iop);
11ded4: 8b 43 1c mov 0x1c(%ebx),%eax
11ded7: 89 45 d4 mov %eax,-0x2c(%ebp)
off_t new_offset;
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_FILE_LSEEK))
printf("rtems-rfs: file-lseek: handle:%p offset:%" PRIdoff_t "\n", file, offset);
rtems_rfs_rtems_lock (rtems_rfs_file_fs (file));
11deda: 8b 40 1c mov 0x1c(%eax),%eax
.fstat_h = rtems_rfs_rtems_fstat,
.ftruncate_h = rtems_rfs_rtems_file_ftruncate,
.fsync_h = rtems_rfs_rtems_fdatasync,
.fdatasync_h = rtems_rfs_rtems_fdatasync,
.fcntl_h = rtems_filesystem_default_fcntl
};
11dedd: 8b 80 98 00 00 00 mov 0x98(%eax),%eax
11dee3: 8b 80 80 00 00 00 mov 0x80(%eax),%eax
11dee9: 8b 00 mov (%eax),%eax
11deeb: e8 04 fd ff ff call 11dbf4 <rtems_rfs_mutex_lock.isra.0>
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_FILE_LSEEK))
printf("rtems-rfs: file-lseek: handle:%p offset:%" PRIdoff_t "\n", file, offset);
rtems_rfs_rtems_lock (rtems_rfs_file_fs (file));
old_offset = iop->offset;
11def0: 8b 43 04 mov 0x4(%ebx),%eax
11def3: 8b 53 08 mov 0x8(%ebx),%edx
11def6: 89 45 c8 mov %eax,-0x38(%ebp)
11def9: 89 55 cc mov %edx,-0x34(%ebp)
new_offset = rtems_filesystem_default_lseek_file (iop, offset, whence);
11defc: ff 75 14 pushl 0x14(%ebp)
11deff: 57 push %edi
11df00: 56 push %esi
11df01: 53 push %ebx
11df02: e8 79 02 00 00 call 11e180 <rtems_filesystem_default_lseek_file>
11df07: 89 c6 mov %eax,%esi
11df09: 89 d7 mov %edx,%edi
if (new_offset != -1)
11df0b: 83 c4 10 add $0x10,%esp
11df0e: 83 fa ff cmp $0xffffffff,%edx
11df11: 75 05 jne 11df18 <rtems_rfs_rtems_file_lseek+0x56>
11df13: 83 f8 ff cmp $0xffffffff,%eax
11df16: 74 3f je 11df57 <rtems_rfs_rtems_file_lseek+0x95><== ALWAYS TAKEN
{
rtems_rfs_pos pos = iop->offset;
11df18: 8b 43 04 mov 0x4(%ebx),%eax
11df1b: 8b 53 08 mov 0x8(%ebx),%edx
11df1e: 89 45 e0 mov %eax,-0x20(%ebp)
11df21: 89 55 e4 mov %edx,-0x1c(%ebp)
int rc = rtems_rfs_file_seek (file, pos, &pos);
11df24: 8d 4d e0 lea -0x20(%ebp),%ecx
11df27: 51 push %ecx
11df28: 52 push %edx
11df29: 50 push %eax
11df2a: ff 75 d4 pushl -0x2c(%ebp)
11df2d: e8 54 e0 ff ff call 11bf86 <rtems_rfs_file_seek>
if (rc)
11df32: 83 c4 10 add $0x10,%esp
11df35: 85 c0 test %eax,%eax
11df37: 74 1e je 11df57 <rtems_rfs_rtems_file_lseek+0x95><== ALWAYS TAKEN
{
rtems_rfs_rtems_error ("file_lseek: lseek", rc);
11df39: 89 45 c4 mov %eax,-0x3c(%ebp) <== NOT EXECUTED
11df3c: e8 8b 12 00 00 call 11f1cc <__errno> <== NOT EXECUTED
11df41: 8b 55 c4 mov -0x3c(%ebp),%edx <== NOT EXECUTED
11df44: 89 10 mov %edx,(%eax) <== NOT EXECUTED
iop->offset = old_offset;
11df46: 8b 45 c8 mov -0x38(%ebp),%eax <== NOT EXECUTED
11df49: 8b 55 cc mov -0x34(%ebp),%edx <== NOT EXECUTED
11df4c: 89 43 04 mov %eax,0x4(%ebx) <== NOT EXECUTED
11df4f: 89 53 08 mov %edx,0x8(%ebx) <== NOT EXECUTED
new_offset = -1;
11df52: 83 ce ff or $0xffffffff,%esi <== NOT EXECUTED
11df55: 89 f7 mov %esi,%edi <== NOT EXECUTED
}
}
rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
11df57: 8b 55 d4 mov -0x2c(%ebp),%edx
11df5a: 8b 42 1c mov 0x1c(%edx),%eax
11df5d: 8b 80 98 00 00 00 mov 0x98(%eax),%eax
11df63: e8 e2 fc ff ff call 11dc4a <rtems_rfs_rtems_unlock>
return new_offset;
}
11df68: 89 f0 mov %esi,%eax
11df6a: 89 fa mov %edi,%edx
11df6c: 8d 65 f4 lea -0xc(%ebp),%esp
11df6f: 5b pop %ebx
11df70: 5e pop %esi
11df71: 5f pop %edi
11df72: 5d pop %ebp
11df73: c3 ret
0011de02 <rtems_rfs_rtems_file_open>:
static int
rtems_rfs_rtems_file_open (rtems_libio_t* iop,
const char* pathname,
int oflag,
mode_t mode)
{
11de02: 55 push %ebp
11de03: 89 e5 mov %esp,%ebp
11de05: 57 push %edi
11de06: 56 push %esi
11de07: 53 push %ebx
11de08: 83 ec 1c sub $0x1c,%esp
11de0b: 8b 75 08 mov 0x8(%ebp),%esi
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (&iop->pathinfo);
11de0e: 8b 46 24 mov 0x24(%esi),%eax
11de11: 8b 58 08 mov 0x8(%eax),%ebx
.fstat_h = rtems_rfs_rtems_fstat,
.ftruncate_h = rtems_rfs_rtems_file_ftruncate,
.fsync_h = rtems_rfs_rtems_fdatasync,
.fdatasync_h = rtems_rfs_rtems_fdatasync,
.fcntl_h = rtems_filesystem_default_fcntl
};
11de14: 8b 83 80 00 00 00 mov 0x80(%ebx),%eax
11de1a: 8b 00 mov (%eax),%eax
11de1c: e8 d3 fd ff ff call 11dbf4 <rtems_rfs_mutex_lock.isra.0>
rtems_rfs_rtems_lock (fs);
ino = rtems_rfs_rtems_get_iop_ino (iop);
rc = rtems_rfs_file_open (fs, ino, flags, &file);
11de21: 8d 45 e4 lea -0x1c(%ebp),%eax
11de24: 50 push %eax
11de25: 6a 00 push $0x0
11de27: ff 76 18 pushl 0x18(%esi)
11de2a: 53 push %ebx
11de2b: e8 36 e5 ff ff call 11c366 <rtems_rfs_file_open>
11de30: 89 c7 mov %eax,%edi
if (rc > 0)
11de32: 83 c4 10 add $0x10,%esp
11de35: 85 c0 test %eax,%eax
11de37: 7e 13 jle 11de4c <rtems_rfs_rtems_file_open+0x4a><== ALWAYS TAKEN
{
rtems_rfs_rtems_unlock (fs);
11de39: 89 d8 mov %ebx,%eax <== NOT EXECUTED
11de3b: e8 0a fe ff ff call 11dc4a <rtems_rfs_rtems_unlock><== NOT EXECUTED
return rtems_rfs_rtems_error ("file-open: open", rc);
11de40: e8 87 13 00 00 call 11f1cc <__errno> <== NOT EXECUTED
11de45: 89 38 mov %edi,(%eax) <== NOT EXECUTED
11de47: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
11de4a: eb 0f jmp 11de5b <rtems_rfs_rtems_file_open+0x59><== NOT EXECUTED
}
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_FILE_OPEN))
printf("rtems-rfs: file-open: handle:%p\n", file);
rtems_rfs_rtems_set_iop_file_handle (iop, file);
11de4c: 8b 45 e4 mov -0x1c(%ebp),%eax
11de4f: 89 46 1c mov %eax,0x1c(%esi)
rtems_rfs_rtems_unlock (fs);
11de52: 89 d8 mov %ebx,%eax
11de54: e8 f1 fd ff ff call 11dc4a <rtems_rfs_rtems_unlock>
return 0;
11de59: 31 c0 xor %eax,%eax
}
11de5b: 8d 65 f4 lea -0xc(%ebp),%esp
11de5e: 5b pop %ebx
11de5f: 5e pop %esi
11de60: 5f pop %edi
11de61: 5d pop %ebp
11de62: c3 ret
0011dc9e <rtems_rfs_rtems_file_read>:
*/
static ssize_t
rtems_rfs_rtems_file_read (rtems_libio_t* iop,
void* buffer,
size_t count)
{
11dc9e: 55 push %ebp
11dc9f: 89 e5 mov %esp,%ebp
11dca1: 57 push %edi
11dca2: 56 push %esi
11dca3: 53 push %ebx
11dca4: 83 ec 3c sub $0x3c,%esp
rtems_rfs_file_handle* file = rtems_rfs_rtems_get_iop_file_handle (iop);
11dca7: 8b 45 08 mov 0x8(%ebp),%eax
11dcaa: 8b 58 1c mov 0x1c(%eax),%ebx
int rc;
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_FILE_READ))
printf("rtems-rfs: file-read: handle:%p count:%zd\n", file, count);
rtems_rfs_rtems_lock (rtems_rfs_file_fs (file));
11dcad: 8b 43 1c mov 0x1c(%ebx),%eax
.fstat_h = rtems_rfs_rtems_fstat,
.ftruncate_h = rtems_rfs_rtems_file_ftruncate,
.fsync_h = rtems_rfs_rtems_fdatasync,
.fdatasync_h = rtems_rfs_rtems_fdatasync,
.fcntl_h = rtems_filesystem_default_fcntl
};
11dcb0: 8b 80 98 00 00 00 mov 0x98(%eax),%eax
11dcb6: 8b 80 80 00 00 00 mov 0x80(%eax),%eax
*/
static inline void
rtems_rfs_rtems_lock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
rtems_rfs_mutex_lock (&rtems->access);
11dcbc: 8b 00 mov (%eax),%eax
11dcbe: e8 31 ff ff ff call 11dbf4 <rtems_rfs_mutex_lock.isra.0>
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_FILE_READ))
printf("rtems-rfs: file-read: handle:%p count:%zd\n", file, count);
rtems_rfs_rtems_lock (rtems_rfs_file_fs (file));
pos = iop->offset;
11dcc3: 8b 55 08 mov 0x8(%ebp),%edx
11dcc6: 8b 42 04 mov 0x4(%edx),%eax
11dcc9: 8b 52 08 mov 0x8(%edx),%edx
11dccc: 89 45 c8 mov %eax,-0x38(%ebp)
11dccf: 89 55 cc mov %edx,-0x34(%ebp)
if (pos < rtems_rfs_file_size (file))
11dcd2: 8b 43 1c mov 0x1c(%ebx),%eax
11dcd5: 57 push %edi
11dcd6: 57 push %edi
11dcd7: 8d 90 84 00 00 00 lea 0x84(%eax),%edx
11dcdd: 52 push %edx
11dcde: ff b0 98 00 00 00 pushl 0x98(%eax)
11dce4: e8 89 b8 ff ff call 119572 <rtems_rfs_block_get_size>
11dce9: 83 c4 10 add $0x10,%esp
11dcec: 39 55 cc cmp %edx,-0x34(%ebp)
11dcef: 72 7e jb 11dd6f <rtems_rfs_rtems_file_read+0xd1><== NEVER TAKEN
11dcf1: 77 05 ja 11dcf8 <rtems_rfs_rtems_file_read+0x5a><== NEVER TAKEN
11dcf3: 39 45 c8 cmp %eax,-0x38(%ebp)
11dcf6: 72 77 jb 11dd6f <rtems_rfs_rtems_file_read+0xd1>
size_t count)
{
rtems_rfs_file_handle* file = rtems_rfs_rtems_get_iop_file_handle (iop);
rtems_rfs_pos pos;
uint8_t* data = buffer;
ssize_t read = 0;
11dcf8: 31 d2 xor %edx,%edx
11dcfa: e9 82 00 00 00 jmp 11dd81 <rtems_rfs_rtems_file_read+0xe3>
{
while (count)
{
size_t size;
rc = rtems_rfs_file_io_start (file, &size, true);
11dcff: 56 push %esi
11dd00: 6a 01 push $0x1
11dd02: 8d 45 e4 lea -0x1c(%ebp),%eax
11dd05: 50 push %eax
11dd06: 53 push %ebx
11dd07: 89 55 c4 mov %edx,-0x3c(%ebp)
11dd0a: e8 a2 de ff ff call 11bbb1 <rtems_rfs_file_io_start>
11dd0f: 89 c6 mov %eax,%esi
if (rc > 0)
11dd11: 83 c4 10 add $0x10,%esp
11dd14: 85 c0 test %eax,%eax
11dd16: 8b 55 c4 mov -0x3c(%ebp),%edx
11dd19: 7e 02 jle 11dd1d <rtems_rfs_rtems_file_read+0x7f><== ALWAYS TAKEN
11dd1b: eb 46 jmp 11dd63 <rtems_rfs_rtems_file_read+0xc5><== NOT EXECUTED
{
read = rtems_rfs_rtems_error ("file-read: read: io-start", rc);
break;
}
if (size == 0)
11dd1d: 8b 45 e4 mov -0x1c(%ebp),%eax
11dd20: 85 c0 test %eax,%eax
11dd22: 74 59 je 11dd7d <rtems_rfs_rtems_file_read+0xdf>
break;
if (size > count)
11dd24: 3b 45 10 cmp 0x10(%ebp),%eax
11dd27: 76 06 jbe 11dd2f <rtems_rfs_rtems_file_read+0x91>
size = count;
11dd29: 8b 45 10 mov 0x10(%ebp),%eax
11dd2c: 89 45 e4 mov %eax,-0x1c(%ebp)
memcpy (data, rtems_rfs_file_data (file), size);
11dd2f: 8b 45 e4 mov -0x1c(%ebp),%eax
11dd32: 8b 4b 0c mov 0xc(%ebx),%ecx
11dd35: 8b 71 1c mov 0x1c(%ecx),%esi
11dd38: 03 73 14 add 0x14(%ebx),%esi
11dd3b: 8b 7d d4 mov -0x2c(%ebp),%edi
11dd3e: 89 c1 mov %eax,%ecx
11dd40: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
data += size;
11dd42: 89 7d d4 mov %edi,-0x2c(%ebp)
count -= size;
11dd45: 29 45 10 sub %eax,0x10(%ebp)
read += size;
11dd48: 01 c2 add %eax,%edx
rc = rtems_rfs_file_io_end (file, size, true);
11dd4a: 51 push %ecx
11dd4b: 6a 01 push $0x1
11dd4d: 50 push %eax
11dd4e: 53 push %ebx
11dd4f: 89 55 c4 mov %edx,-0x3c(%ebp)
11dd52: e8 28 e0 ff ff call 11bd7f <rtems_rfs_file_io_end>
11dd57: 89 c6 mov %eax,%esi
if (rc > 0)
11dd59: 83 c4 10 add $0x10,%esp
11dd5c: 85 c0 test %eax,%eax
11dd5e: 8b 55 c4 mov -0x3c(%ebp),%edx
11dd61: 7e 14 jle 11dd77 <rtems_rfs_rtems_file_read+0xd9><== ALWAYS TAKEN
{
read = rtems_rfs_rtems_error ("file-read: read: io-end", rc);
11dd63: e8 64 14 00 00 call 11f1cc <__errno> <== NOT EXECUTED
11dd68: 89 30 mov %esi,(%eax) <== NOT EXECUTED
11dd6a: 83 ca ff or $0xffffffff,%edx <== NOT EXECUTED
11dd6d: eb 28 jmp 11dd97 <rtems_rfs_rtems_file_read+0xf9><== NOT EXECUTED
rtems_rfs_rtems_lock (rtems_rfs_file_fs (file));
pos = iop->offset;
if (pos < rtems_rfs_file_size (file))
11dd6f: 8b 55 0c mov 0xc(%ebp),%edx
11dd72: 89 55 d4 mov %edx,-0x2c(%ebp)
11dd75: 31 d2 xor %edx,%edx
{
while (count)
11dd77: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
11dd7b: 75 82 jne 11dcff <rtems_rfs_rtems_file_read+0x61>
break;
}
}
}
if (read >= 0)
11dd7d: 85 d2 test %edx,%edx
11dd7f: 78 16 js 11dd97 <rtems_rfs_rtems_file_read+0xf9><== NEVER TAKEN
iop->offset = pos + read;
11dd81: 89 d6 mov %edx,%esi
11dd83: 89 d7 mov %edx,%edi
11dd85: c1 ff 1f sar $0x1f,%edi
11dd88: 03 75 c8 add -0x38(%ebp),%esi
11dd8b: 13 7d cc adc -0x34(%ebp),%edi
11dd8e: 8b 45 08 mov 0x8(%ebp),%eax
11dd91: 89 70 04 mov %esi,0x4(%eax)
11dd94: 89 78 08 mov %edi,0x8(%eax)
rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
11dd97: 8b 43 1c mov 0x1c(%ebx),%eax
11dd9a: 8b 80 98 00 00 00 mov 0x98(%eax),%eax
11dda0: 89 55 c4 mov %edx,-0x3c(%ebp)
11dda3: e8 a2 fe ff ff call 11dc4a <rtems_rfs_rtems_unlock>
return read;
}
11dda8: 8b 55 c4 mov -0x3c(%ebp),%edx
11ddab: 89 d0 mov %edx,%eax
11ddad: 8d 65 f4 lea -0xc(%ebp),%esp
11ddb0: 5b pop %ebx
11ddb1: 5e pop %esi
11ddb2: 5f pop %edi
11ddb3: 5d pop %ebp
11ddb4: c3 ret
0011df74 <rtems_rfs_rtems_file_write>:
*/
static ssize_t
rtems_rfs_rtems_file_write (rtems_libio_t* iop,
const void* buffer,
size_t count)
{
11df74: 55 push %ebp
11df75: 89 e5 mov %esp,%ebp
11df77: 57 push %edi
11df78: 56 push %esi
11df79: 53 push %ebx
11df7a: 83 ec 2c sub $0x2c,%esp
rtems_rfs_file_handle* file = rtems_rfs_rtems_get_iop_file_handle (iop);
11df7d: 8b 45 08 mov 0x8(%ebp),%eax
11df80: 8b 58 1c mov 0x1c(%eax),%ebx
int rc;
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_FILE_WRITE))
printf("rtems-rfs: file-write: handle:%p count:%zd\n", file, count);
rtems_rfs_rtems_lock (rtems_rfs_file_fs (file));
11df83: 8b 43 1c mov 0x1c(%ebx),%eax
.fstat_h = rtems_rfs_rtems_fstat,
.ftruncate_h = rtems_rfs_rtems_file_ftruncate,
.fsync_h = rtems_rfs_rtems_fdatasync,
.fdatasync_h = rtems_rfs_rtems_fdatasync,
.fcntl_h = rtems_filesystem_default_fcntl
};
11df86: 8b 80 98 00 00 00 mov 0x98(%eax),%eax
11df8c: 8b 80 80 00 00 00 mov 0x80(%eax),%eax
11df92: 8b 00 mov (%eax),%eax
11df94: e8 5b fc ff ff call 11dbf4 <rtems_rfs_mutex_lock.isra.0>
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_FILE_WRITE))
printf("rtems-rfs: file-write: handle:%p count:%zd\n", file, count);
rtems_rfs_rtems_lock (rtems_rfs_file_fs (file));
pos = iop->offset;
11df99: 8b 4d 08 mov 0x8(%ebp),%ecx
11df9c: 8b 41 04 mov 0x4(%ecx),%eax
11df9f: 8b 51 08 mov 0x8(%ecx),%edx
11dfa2: 89 45 e0 mov %eax,-0x20(%ebp)
11dfa5: 89 55 e4 mov %edx,-0x1c(%ebp)
file_size = rtems_rfs_file_size (file);
11dfa8: 8b 43 1c mov 0x1c(%ebx),%eax
11dfab: 52 push %edx
11dfac: 52 push %edx
11dfad: 8d 90 84 00 00 00 lea 0x84(%eax),%edx
11dfb3: 52 push %edx
11dfb4: ff b0 98 00 00 00 pushl 0x98(%eax)
11dfba: e8 b3 b5 ff ff call 119572 <rtems_rfs_block_get_size>
if (pos > file_size)
11dfbf: 8b 75 e0 mov -0x20(%ebp),%esi
11dfc2: 8b 7d e4 mov -0x1c(%ebp),%edi
11dfc5: 83 c4 10 add $0x10,%esp
11dfc8: 39 d7 cmp %edx,%edi
11dfca: 72 4c jb 11e018 <rtems_rfs_rtems_file_write+0xa4><== NEVER TAKEN
11dfcc: 77 04 ja 11dfd2 <rtems_rfs_rtems_file_write+0x5e><== NEVER TAKEN
11dfce: 39 c6 cmp %eax,%esi
11dfd0: 76 3c jbe 11e00e <rtems_rfs_rtems_file_write+0x9a>
/*
* If the iop position is past the physical end of the file we need to set
* the file size to the new length before writing. The
* rtems_rfs_file_io_end() will grow the file subsequently.
*/
rc = rtems_rfs_file_set_size (file, pos);
11dfd2: 50 push %eax
11dfd3: 57 push %edi
11dfd4: 56 push %esi
11dfd5: 53 push %ebx
11dfd6: e8 82 e0 ff ff call 11c05d <rtems_rfs_file_set_size>
11dfdb: 89 c6 mov %eax,%esi
if (rc)
11dfdd: 83 c4 10 add $0x10,%esp
11dfe0: 85 c0 test %eax,%eax
11dfe2: 8b 43 1c mov 0x1c(%ebx),%eax
11dfe5: 74 02 je 11dfe9 <rtems_rfs_rtems_file_write+0x75><== ALWAYS TAKEN
11dfe7: eb 56 jmp 11e03f <rtems_rfs_rtems_file_write+0xcb><== NOT EXECUTED
{
rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
return rtems_rfs_rtems_error ("file-write: write extend", rc);
}
rtems_rfs_file_set_bpos (file, pos);
11dfe9: 8d 53 10 lea 0x10(%ebx),%edx
11dfec: 52 push %edx
11dfed: ff 75 e4 pushl -0x1c(%ebp)
11dff0: ff 75 e0 pushl -0x20(%ebp)
11dff3: ff b0 98 00 00 00 pushl 0x98(%eax)
11dff9: e8 b7 b4 ff ff call 1194b5 <rtems_rfs_block_get_bpos>
11dffe: 83 c4 10 add $0x10,%esp
*/
static ssize_t
rtems_rfs_rtems_file_write (rtems_libio_t* iop,
const void* buffer,
size_t count)
{
11e001: 8b 45 0c mov 0xc(%ebp),%eax
11e004: 89 45 d4 mov %eax,-0x2c(%ebp)
11e007: 31 d2 xor %edx,%edx
11e009: e9 bd 00 00 00 jmp 11e0cb <rtems_rfs_rtems_file_write+0x157>
return rtems_rfs_rtems_error ("file-write: write extend", rc);
}
rtems_rfs_file_set_bpos (file, pos);
}
else if (pos < file_size && (iop->flags & LIBIO_FLAGS_APPEND) != 0)
11e00e: 39 d7 cmp %edx,%edi
11e010: 72 06 jb 11e018 <rtems_rfs_rtems_file_write+0xa4><== NEVER TAKEN
11e012: 77 ed ja 11e001 <rtems_rfs_rtems_file_write+0x8d><== NEVER TAKEN
11e014: 39 c6 cmp %eax,%esi
11e016: 73 e9 jae 11e001 <rtems_rfs_rtems_file_write+0x8d>
11e018: 8b 4d 08 mov 0x8(%ebp),%ecx
11e01b: f6 41 0d 02 testb $0x2,0xd(%ecx)
11e01f: 74 e0 je 11e001 <rtems_rfs_rtems_file_write+0x8d>
{
pos = file_size;
11e021: 89 45 e0 mov %eax,-0x20(%ebp)
11e024: 89 55 e4 mov %edx,-0x1c(%ebp)
rc = rtems_rfs_file_seek (file, pos, &pos);
11e027: 8d 4d e0 lea -0x20(%ebp),%ecx
11e02a: 51 push %ecx
11e02b: 52 push %edx
11e02c: 50 push %eax
11e02d: 53 push %ebx
11e02e: e8 53 df ff ff call 11bf86 <rtems_rfs_file_seek>
11e033: 89 c6 mov %eax,%esi
if (rc)
11e035: 83 c4 10 add $0x10,%esp
11e038: 85 c0 test %eax,%eax
11e03a: 74 c5 je 11e001 <rtems_rfs_rtems_file_write+0x8d><== ALWAYS TAKEN
{
rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
11e03c: 8b 43 1c mov 0x1c(%ebx),%eax <== NOT EXECUTED
11e03f: 8b 80 98 00 00 00 mov 0x98(%eax),%eax <== NOT EXECUTED
11e045: e8 00 fc ff ff call 11dc4a <rtems_rfs_rtems_unlock><== NOT EXECUTED
return rtems_rfs_rtems_error ("file-write: write append seek", rc);
11e04a: e8 7d 11 00 00 call 11f1cc <__errno> <== NOT EXECUTED
11e04f: 89 30 mov %esi,(%eax) <== NOT EXECUTED
11e051: 83 ca ff or $0xffffffff,%edx <== NOT EXECUTED
11e054: e9 a6 00 00 00 jmp 11e0ff <rtems_rfs_rtems_file_write+0x18b><== NOT EXECUTED
}
}
while (count)
{
size_t size = count;
11e059: 8b 45 10 mov 0x10(%ebp),%eax
11e05c: 89 45 dc mov %eax,-0x24(%ebp)
rc = rtems_rfs_file_io_start (file, &size, false);
11e05f: 56 push %esi
11e060: 6a 00 push $0x0
11e062: 8d 4d dc lea -0x24(%ebp),%ecx
11e065: 51 push %ecx
11e066: 53 push %ebx
11e067: 89 55 d0 mov %edx,-0x30(%ebp)
11e06a: e8 42 db ff ff call 11bbb1 <rtems_rfs_file_io_start>
11e06f: 89 c6 mov %eax,%esi
if (rc)
11e071: 83 c4 10 add $0x10,%esp
11e074: 85 c0 test %eax,%eax
11e076: 8b 55 d0 mov -0x30(%ebp),%edx
11e079: 74 02 je 11e07d <rtems_rfs_rtems_file_write+0x109>
11e07b: eb 42 jmp 11e0bf <rtems_rfs_rtems_file_write+0x14b>
{
write = rtems_rfs_rtems_error ("file-write: write open", rc);
break;
}
if (size > count)
11e07d: 8b 45 10 mov 0x10(%ebp),%eax
11e080: 39 45 dc cmp %eax,-0x24(%ebp)
11e083: 76 03 jbe 11e088 <rtems_rfs_rtems_file_write+0x114>
size = count;
11e085: 89 45 dc mov %eax,-0x24(%ebp)
memcpy (rtems_rfs_file_data (file), data, size);
11e088: 8b 43 0c mov 0xc(%ebx),%eax
11e08b: 8b 40 1c mov 0x1c(%eax),%eax
11e08e: 03 43 14 add 0x14(%ebx),%eax
11e091: 8b 4d dc mov -0x24(%ebp),%ecx
11e094: 89 c7 mov %eax,%edi
11e096: 8b 75 d4 mov -0x2c(%ebp),%esi
11e099: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
data += size;
11e09b: 8b 45 dc mov -0x24(%ebp),%eax
11e09e: 01 45 d4 add %eax,-0x2c(%ebp)
count -= size;
11e0a1: 29 45 10 sub %eax,0x10(%ebp)
write += size;
11e0a4: 01 c2 add %eax,%edx
rc = rtems_rfs_file_io_end (file, size, false);
11e0a6: 51 push %ecx
11e0a7: 6a 00 push $0x0
11e0a9: 50 push %eax
11e0aa: 53 push %ebx
11e0ab: 89 55 d0 mov %edx,-0x30(%ebp)
11e0ae: e8 cc dc ff ff call 11bd7f <rtems_rfs_file_io_end>
11e0b3: 89 c6 mov %eax,%esi
if (rc)
11e0b5: 83 c4 10 add $0x10,%esp
11e0b8: 85 c0 test %eax,%eax
11e0ba: 8b 55 d0 mov -0x30(%ebp),%edx
11e0bd: 74 0c je 11e0cb <rtems_rfs_rtems_file_write+0x157><== ALWAYS TAKEN
{
write = rtems_rfs_rtems_error ("file-write: write close", rc);
11e0bf: e8 08 11 00 00 call 11f1cc <__errno>
11e0c4: 89 30 mov %esi,(%eax)
11e0c6: 83 ca ff or $0xffffffff,%edx
11e0c9: eb 20 jmp 11e0eb <rtems_rfs_rtems_file_write+0x177>
rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
return rtems_rfs_rtems_error ("file-write: write append seek", rc);
}
}
while (count)
11e0cb: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
11e0cf: 75 88 jne 11e059 <rtems_rfs_rtems_file_write+0xe5>
write = rtems_rfs_rtems_error ("file-write: write close", rc);
break;
}
}
if (write >= 0)
11e0d1: 85 d2 test %edx,%edx
11e0d3: 78 16 js 11e0eb <rtems_rfs_rtems_file_write+0x177><== NEVER TAKEN
iop->offset = pos + write;
11e0d5: 89 d6 mov %edx,%esi
11e0d7: 89 d7 mov %edx,%edi
11e0d9: c1 ff 1f sar $0x1f,%edi
11e0dc: 03 75 e0 add -0x20(%ebp),%esi
11e0df: 13 7d e4 adc -0x1c(%ebp),%edi
11e0e2: 8b 4d 08 mov 0x8(%ebp),%ecx
11e0e5: 89 71 04 mov %esi,0x4(%ecx)
11e0e8: 89 79 08 mov %edi,0x8(%ecx)
rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
11e0eb: 8b 43 1c mov 0x1c(%ebx),%eax
11e0ee: 8b 80 98 00 00 00 mov 0x98(%eax),%eax
11e0f4: 89 55 d0 mov %edx,-0x30(%ebp)
11e0f7: e8 4e fb ff ff call 11dc4a <rtems_rfs_rtems_unlock>
11e0fc: 8b 55 d0 mov -0x30(%ebp),%edx
return write;
}
11e0ff: 89 d0 mov %edx,%eax
11e101: 8d 65 f4 lea -0xc(%ebp),%esp
11e104: 5b pop %ebx
11e105: 5e pop %esi
11e106: 5f pop %edi
11e107: 5d pop %ebp
11e108: c3 ret
001130db <rtems_rfs_rtems_fstat>:
}
int
rtems_rfs_rtems_fstat (const rtems_filesystem_location_info_t* pathloc,
struct stat* buf)
{
1130db: 55 push %ebp
1130dc: 89 e5 mov %esp,%ebp
1130de: 57 push %edi
1130df: 56 push %esi
1130e0: 53 push %ebx
1130e1: 83 ec 4c sub $0x4c,%esp
1130e4: 8b 45 08 mov 0x8(%ebp),%eax
1130e7: 8b 5d 0c mov 0xc(%ebp),%ebx
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
1130ea: 8b 50 14 mov 0x14(%eax),%edx
1130ed: 8b 7a 08 mov 0x8(%edx),%edi
int rc;
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_STAT))
printf ("rtems-rfs-rtems: stat: in: ino:%" PRId32 "\n", ino);
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
1130f0: 6a 01 push $0x1
1130f2: 8d 55 c0 lea -0x40(%ebp),%edx
1130f5: 52 push %edx
1130f6: ff 70 08 pushl 0x8(%eax)
1130f9: 57 push %edi
1130fa: e8 2b f1 ff ff call 11222a <rtems_rfs_inode_open>
1130ff: 89 c6 mov %eax,%esi
if (rc)
113101: 83 c4 10 add $0x10,%esp
113104: 85 c0 test %eax,%eax
113106: 74 0c je 113114 <rtems_rfs_rtems_fstat+0x39><== ALWAYS TAKEN
{
return rtems_rfs_rtems_error ("stat: opening inode", rc);
113108: e8 bf c0 00 00 call 11f1cc <__errno> <== NOT EXECUTED
11310d: 89 30 mov %esi,(%eax) <== NOT EXECUTED
11310f: e9 fe 01 00 00 jmp 113312 <rtems_rfs_rtems_fstat+0x237><== NOT EXECUTED
}
mode = rtems_rfs_inode_get_mode (&inode);
113114: 8b 4d cc mov -0x34(%ebp),%ecx
* @return uint16_t The mode.
*/
static inline uint16_t
rtems_rfs_inode_get_mode (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u16 (&handle->node->mode);
113117: 0f b6 41 02 movzbl 0x2(%ecx),%eax
11311b: c1 e0 08 shl $0x8,%eax
11311e: 0f b6 71 03 movzbl 0x3(%ecx),%esi
113122: 09 c6 or %eax,%esi
if (RTEMS_RFS_S_ISCHR (mode) || RTEMS_RFS_S_ISBLK (mode))
113124: 89 f0 mov %esi,%eax
113126: 66 25 00 b0 and $0xb000,%ax
11312a: 66 3d 00 20 cmp $0x2000,%ax
11312e: 75 27 jne 113157 <rtems_rfs_rtems_fstat+0x7c><== ALWAYS TAKEN
{
buf->st_rdev =
rtems_filesystem_make_dev_t (rtems_rfs_inode_get_block (&inode, 0),
113130: ba 01 00 00 00 mov $0x1,%edx <== NOT EXECUTED
113135: 89 c8 mov %ecx,%eax <== NOT EXECUTED
113137: 89 4d b0 mov %ecx,-0x50(%ebp) <== NOT EXECUTED
11313a: e8 71 ff ff ff call 1130b0 <rtems_rfs_inode_get_block.isra.12><== NOT EXECUTED
11313f: 89 45 b4 mov %eax,-0x4c(%ebp) <== NOT EXECUTED
113142: 31 d2 xor %edx,%edx <== NOT EXECUTED
113144: 8b 4d b0 mov -0x50(%ebp),%ecx <== NOT EXECUTED
113147: 89 c8 mov %ecx,%eax <== NOT EXECUTED
113149: e8 62 ff ff ff call 1130b0 <rtems_rfs_inode_get_block.isra.12><== NOT EXECUTED
mode = rtems_rfs_inode_get_mode (&inode);
if (RTEMS_RFS_S_ISCHR (mode) || RTEMS_RFS_S_ISBLK (mode))
{
buf->st_rdev =
11314e: 89 43 18 mov %eax,0x18(%ebx) <== NOT EXECUTED
113151: 8b 45 b4 mov -0x4c(%ebp),%eax <== NOT EXECUTED
113154: 89 43 1c mov %eax,0x1c(%ebx) <== NOT EXECUTED
rtems_filesystem_make_dev_t (rtems_rfs_inode_get_block (&inode, 0),
rtems_rfs_inode_get_block (&inode, 1));
}
buf->st_dev = rtems_rfs_fs_device (fs);
113157: 8b 47 10 mov 0x10(%edi),%eax
11315a: 89 03 mov %eax,(%ebx)
11315c: 99 cltd
11315d: 89 53 04 mov %edx,0x4(%ebx)
buf->st_ino = rtems_rfs_inode_ino (&inode);
113160: 8b 45 c8 mov -0x38(%ebp),%eax
113163: 89 43 08 mov %eax,0x8(%ebx)
buf->st_mode = rtems_rfs_rtems_mode (mode);
113166: 83 ec 0c sub $0xc,%esp
113169: 0f b7 f6 movzwl %si,%esi
11316c: 56 push %esi
11316d: e8 22 07 00 00 call 113894 <rtems_rfs_rtems_mode>
113172: 89 43 0c mov %eax,0xc(%ebx)
buf->st_nlink = rtems_rfs_inode_get_links (&inode);
113175: 8b 55 cc mov -0x34(%ebp),%edx
*/
static inline uint16_t
rtems_rfs_inode_get_links (rtems_rfs_inode_handle* handle)
{
uint16_t links;
links = rtems_rfs_read_u16 (&handle->node->links);
113178: 0f b6 0a movzbl (%edx),%ecx
11317b: c1 e1 08 shl $0x8,%ecx
11317e: 0f b6 42 01 movzbl 0x1(%edx),%eax
113182: 09 c8 or %ecx,%eax
if (links == 0xffff)
113184: 59 pop %ecx
113185: 5e pop %esi
links = 0;
113186: 31 c9 xor %ecx,%ecx
113188: 66 83 f8 ff cmp $0xffff,%ax
11318c: 0f 95 c1 setne %cl
11318f: f7 d9 neg %ecx
113191: 21 c8 and %ecx,%eax
113193: 66 89 43 10 mov %ax,0x10(%ebx)
* @return uint16_t The user id (uid).
*/
static inline uint16_t
rtems_rfs_inode_get_uid (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->owner) & 0xffff;
113197: 0f b6 42 06 movzbl 0x6(%edx),%eax
11319b: c1 e0 08 shl $0x8,%eax
11319e: 0f b6 4a 07 movzbl 0x7(%edx),%ecx
1131a2: 09 c8 or %ecx,%eax
1131a4: 66 89 43 12 mov %ax,0x12(%ebx)
* @return uint16_t The group id (gid).
*/
static inline uint16_t
rtems_rfs_inode_get_gid (rtems_rfs_inode_handle* handle)
{
return (rtems_rfs_read_u32 (&handle->node->owner) >> 16) & 0xffff;
1131a8: 0f b6 42 04 movzbl 0x4(%edx),%eax
1131ac: c1 e0 18 shl $0x18,%eax
1131af: 0f b6 52 05 movzbl 0x5(%edx),%edx
1131b3: c1 e2 10 shl $0x10,%edx
1131b6: 09 d0 or %edx,%eax
1131b8: c1 e8 10 shr $0x10,%eax
1131bb: 66 89 43 14 mov %ax,0x14(%ebx)
/*
* Need to check is the ino is an open file. If so we take the values from
* the open file rather than the inode.
*/
shared = rtems_rfs_file_get_shared (fs, rtems_rfs_inode_ino (&inode));
1131bf: ff 75 c8 pushl -0x38(%ebp)
1131c2: 57 push %edi
1131c3: e8 7e 91 00 00 call 11c346 <rtems_rfs_file_get_shared>
if (shared)
1131c8: 83 c4 10 add $0x10,%esp
1131cb: 85 c0 test %eax,%eax
1131cd: 74 54 je 113223 <rtems_rfs_rtems_fstat+0x148>
{
buf->st_atime = rtems_rfs_file_shared_get_atime (shared);
1131cf: 8b 90 8c 00 00 00 mov 0x8c(%eax),%edx
1131d5: 89 53 28 mov %edx,0x28(%ebx)
buf->st_mtime = rtems_rfs_file_shared_get_mtime (shared);
1131d8: 8b 90 90 00 00 00 mov 0x90(%eax),%edx
1131de: 89 53 30 mov %edx,0x30(%ebx)
buf->st_ctime = rtems_rfs_file_shared_get_ctime (shared);
1131e1: 8b 90 94 00 00 00 mov 0x94(%eax),%edx
1131e7: 89 53 38 mov %edx,0x38(%ebx)
buf->st_blocks = rtems_rfs_file_shared_get_block_count (shared);
1131ea: 8b 90 84 00 00 00 mov 0x84(%eax),%edx
1131f0: 89 53 44 mov %edx,0x44(%ebx)
if (S_ISLNK (buf->st_mode))
1131f3: 8b 53 0c mov 0xc(%ebx),%edx
1131f6: 81 e2 00 f0 00 00 and $0xf000,%edx
1131fc: 81 fa 00 a0 00 00 cmp $0xa000,%edx
113202: 75 0c jne 113210 <rtems_rfs_rtems_fstat+0x135><== ALWAYS TAKEN
buf->st_size = rtems_rfs_file_shared_get_block_offset (shared);
113204: 0f b7 80 88 00 00 00 movzwl 0x88(%eax),%eax <== NOT EXECUTED
11320b: e9 bf 00 00 00 jmp 1132cf <rtems_rfs_rtems_fstat+0x1f4><== NOT EXECUTED
*/
static inline rtems_rfs_pos
rtems_rfs_file_shared_get_size (rtems_rfs_file_system* fs,
rtems_rfs_file_shared* shared)
{
return rtems_rfs_block_get_size (fs, &shared->size);
113210: 52 push %edx
113211: 52 push %edx
113212: 05 84 00 00 00 add $0x84,%eax
113217: 50 push %eax
113218: 57 push %edi
113219: e8 54 63 00 00 call 119572 <rtems_rfs_block_get_size>
11321e: e9 c4 00 00 00 jmp 1132e7 <rtems_rfs_rtems_fstat+0x20c>
else
buf->st_size = rtems_rfs_file_shared_get_size (fs, shared);
}
else
{
buf->st_atime = rtems_rfs_inode_get_atime (&inode);
113223: 8b 45 cc mov -0x34(%ebp),%eax
* @return rtems_rfs_time The atime.
*/
static inline rtems_rfs_time
rtems_rfs_inode_get_atime (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->atime);
113226: 0f b6 50 10 movzbl 0x10(%eax),%edx
11322a: c1 e2 18 shl $0x18,%edx
11322d: 0f b6 48 11 movzbl 0x11(%eax),%ecx
113231: c1 e1 10 shl $0x10,%ecx
113234: 09 ca or %ecx,%edx
113236: 0f b6 48 13 movzbl 0x13(%eax),%ecx
11323a: 09 ca or %ecx,%edx
11323c: 0f b6 48 12 movzbl 0x12(%eax),%ecx
113240: c1 e1 08 shl $0x8,%ecx
113243: 09 ca or %ecx,%edx
113245: 89 53 28 mov %edx,0x28(%ebx)
* @return rtems_rfs_time The mtime.
*/
static inline rtems_rfs_time
rtems_rfs_inode_get_mtime (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->mtime);
113248: 0f b6 50 14 movzbl 0x14(%eax),%edx
11324c: c1 e2 18 shl $0x18,%edx
11324f: 0f b6 48 15 movzbl 0x15(%eax),%ecx
113253: c1 e1 10 shl $0x10,%ecx
113256: 09 ca or %ecx,%edx
113258: 0f b6 48 17 movzbl 0x17(%eax),%ecx
11325c: 09 ca or %ecx,%edx
11325e: 0f b6 48 16 movzbl 0x16(%eax),%ecx
113262: c1 e1 08 shl $0x8,%ecx
113265: 09 ca or %ecx,%edx
113267: 89 53 30 mov %edx,0x30(%ebx)
* @return rtems_rfs_time The ctime.
*/
static inline rtems_rfs_time
rtems_rfs_inode_get_ctime (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->ctime);
11326a: 0f b6 50 18 movzbl 0x18(%eax),%edx
11326e: c1 e2 18 shl $0x18,%edx
113271: 0f b6 48 19 movzbl 0x19(%eax),%ecx
113275: c1 e1 10 shl $0x10,%ecx
113278: 09 ca or %ecx,%edx
11327a: 0f b6 48 1b movzbl 0x1b(%eax),%ecx
11327e: 09 ca or %ecx,%edx
113280: 0f b6 48 1a movzbl 0x1a(%eax),%ecx
113284: c1 e1 08 shl $0x8,%ecx
113287: 09 ca or %ecx,%edx
113289: 89 53 38 mov %edx,0x38(%ebx)
* @return uint32_t The block count.
*/
static inline uint32_t
rtems_rfs_inode_get_block_count (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->block_count);
11328c: 0f b6 50 0c movzbl 0xc(%eax),%edx
113290: c1 e2 18 shl $0x18,%edx
113293: 0f b6 48 0d movzbl 0xd(%eax),%ecx
113297: c1 e1 10 shl $0x10,%ecx
11329a: 09 ca or %ecx,%edx
11329c: 0f b6 48 0f movzbl 0xf(%eax),%ecx
1132a0: 09 ca or %ecx,%edx
1132a2: 0f b6 48 0e movzbl 0xe(%eax),%ecx
1132a6: c1 e1 08 shl $0x8,%ecx
1132a9: 09 ca or %ecx,%edx
1132ab: 89 53 44 mov %edx,0x44(%ebx)
buf->st_mtime = rtems_rfs_inode_get_mtime (&inode);
buf->st_ctime = rtems_rfs_inode_get_ctime (&inode);
buf->st_blocks = rtems_rfs_inode_get_block_count (&inode);
if (S_ISLNK (buf->st_mode))
1132ae: 8b 53 0c mov 0xc(%ebx),%edx
1132b1: 81 e2 00 f0 00 00 and $0xf000,%edx
1132b7: 81 fa 00 a0 00 00 cmp $0xa000,%edx
1132bd: 75 1c jne 1132db <rtems_rfs_rtems_fstat+0x200>
* @return uint32_t The block offset.
*/
static inline uint16_t
rtems_rfs_inode_get_block_offset (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u16 (&handle->node->block_offset);
1132bf: 0f b6 50 0a movzbl 0xa(%eax),%edx
1132c3: c1 e2 08 shl $0x8,%edx
1132c6: 0f b6 40 0b movzbl 0xb(%eax),%eax
1132ca: 09 d0 or %edx,%eax
buf->st_size = rtems_rfs_inode_get_block_offset (&inode);
1132cc: 0f b7 c0 movzwl %ax,%eax
1132cf: 89 43 20 mov %eax,0x20(%ebx)
1132d2: c7 43 24 00 00 00 00 movl $0x0,0x24(%ebx)
1132d9: eb 15 jmp 1132f0 <rtems_rfs_rtems_fstat+0x215>
else
buf->st_size = rtems_rfs_inode_get_size (fs, &inode);
1132db: 56 push %esi
1132dc: 56 push %esi
1132dd: 8d 45 c0 lea -0x40(%ebp),%eax
1132e0: 50 push %eax
1132e1: 57 push %edi
1132e2: e8 98 f6 ff ff call 11297f <rtems_rfs_inode_get_size>
1132e7: 89 43 20 mov %eax,0x20(%ebx)
1132ea: 89 53 24 mov %edx,0x24(%ebx)
1132ed: 83 c4 10 add $0x10,%esp
}
buf->st_blksize = rtems_rfs_fs_block_size (fs);
1132f0: 8b 47 08 mov 0x8(%edi),%eax
1132f3: 89 43 40 mov %eax,0x40(%ebx)
rc = rtems_rfs_inode_close (fs, &inode);
1132f6: 51 push %ecx
1132f7: 51 push %ecx
1132f8: 8d 45 c0 lea -0x40(%ebp),%eax
1132fb: 50 push %eax
1132fc: 57 push %edi
1132fd: e8 a5 f0 ff ff call 1123a7 <rtems_rfs_inode_close>
113302: 89 c3 mov %eax,%ebx
if (rc > 0)
113304: 83 c4 10 add $0x10,%esp
113307: 85 c0 test %eax,%eax
113309: 7e 0c jle 113317 <rtems_rfs_rtems_fstat+0x23c><== ALWAYS TAKEN
{
return rtems_rfs_rtems_error ("stat: closing inode", rc);
11330b: e8 bc be 00 00 call 11f1cc <__errno> <== NOT EXECUTED
113310: 89 18 mov %ebx,(%eax) <== NOT EXECUTED
113312: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
113315: eb 02 jmp 113319 <rtems_rfs_rtems_fstat+0x23e><== NOT EXECUTED
}
return 0;
113317: 31 c0 xor %eax,%eax
}
113319: 8d 65 f4 lea -0xc(%ebp),%esp
11331c: 5b pop %ebx
11331d: 5e pop %esi
11331e: 5f pop %edi
11331f: 5d pop %ebp
113320: c3 ret
0011341f <rtems_rfs_rtems_initialise>:
*/
int
rtems_rfs_rtems_initialise (rtems_filesystem_mount_table_entry_t* mt_entry,
const void* data)
{
11341f: 55 push %ebp
113420: 89 e5 mov %esp,%ebp
113422: 57 push %edi
113423: 56 push %esi
113424: 53 push %ebx
113425: 83 ec 2c sub $0x2c,%esp
rtems_rfs_rtems_private* rtems;
rtems_rfs_file_system* fs;
uint32_t flags = 0;
uint32_t max_held_buffers = RTEMS_RFS_FS_MAX_HELD_BUFFERS;
const char* options = data;
113428: 8b 75 0c mov 0xc(%ebp),%esi
const void* data)
{
rtems_rfs_rtems_private* rtems;
rtems_rfs_file_system* fs;
uint32_t flags = 0;
uint32_t max_held_buffers = RTEMS_RFS_FS_MAX_HELD_BUFFERS;
11342b: bf 05 00 00 00 mov $0x5,%edi
rtems_rfs_rtems_initialise (rtems_filesystem_mount_table_entry_t* mt_entry,
const void* data)
{
rtems_rfs_rtems_private* rtems;
rtems_rfs_file_system* fs;
uint32_t flags = 0;
113430: 31 db xor %ebx,%ebx
int rc;
/*
* Parse the options the user specifiies.
*/
while (options)
113432: e9 94 00 00 00 jmp 1134cb <rtems_rfs_rtems_initialise+0xac>
{
printf ("options=%s\n", options);
113437: 50 push %eax <== NOT EXECUTED
113438: 50 push %eax <== NOT EXECUTED
113439: 56 push %esi <== NOT EXECUTED
11343a: 68 fd 04 13 00 push $0x1304fd <== NOT EXECUTED
11343f: e8 f8 ce 00 00 call 12033c <printf> <== NOT EXECUTED
if (strncmp (options, "hold-bitmaps",
113444: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
113447: 6a 0c push $0xc <== NOT EXECUTED
113449: 68 09 05 13 00 push $0x130509 <== NOT EXECUTED
11344e: 56 push %esi <== NOT EXECUTED
11344f: e8 58 dd 00 00 call 1211ac <strncmp> <== NOT EXECUTED
113454: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
113457: 85 c0 test %eax,%eax <== NOT EXECUTED
113459: 75 05 jne 113460 <rtems_rfs_rtems_initialise+0x41><== NOT EXECUTED
sizeof ("hold-bitmaps") - 1) == 0)
flags |= RTEMS_RFS_FS_BITMAPS_HOLD;
11345b: 83 cb 01 or $0x1,%ebx <== NOT EXECUTED
11345e: eb 51 jmp 1134b1 <rtems_rfs_rtems_initialise+0x92><== NOT EXECUTED
else if (strncmp (options, "no-local-cache",
113460: 50 push %eax <== NOT EXECUTED
113461: 6a 0e push $0xe <== NOT EXECUTED
113463: 68 16 05 13 00 push $0x130516 <== NOT EXECUTED
113468: 56 push %esi <== NOT EXECUTED
113469: e8 3e dd 00 00 call 1211ac <strncmp> <== NOT EXECUTED
11346e: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
113471: 85 c0 test %eax,%eax <== NOT EXECUTED
113473: 75 05 jne 11347a <rtems_rfs_rtems_initialise+0x5b><== NOT EXECUTED
sizeof ("no-local-cache") - 1) == 0)
flags |= RTEMS_RFS_FS_NO_LOCAL_CACHE;
113475: 83 cb 02 or $0x2,%ebx <== NOT EXECUTED
113478: eb 37 jmp 1134b1 <rtems_rfs_rtems_initialise+0x92><== NOT EXECUTED
else if (strncmp (options, "max-held-bufs",
11347a: 50 push %eax <== NOT EXECUTED
11347b: 6a 0d push $0xd <== NOT EXECUTED
11347d: 68 25 05 13 00 push $0x130525 <== NOT EXECUTED
113482: 56 push %esi <== NOT EXECUTED
113483: e8 24 dd 00 00 call 1211ac <strncmp> <== NOT EXECUTED
113488: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11348b: 85 c0 test %eax,%eax <== NOT EXECUTED
11348d: 75 15 jne 1134a4 <rtems_rfs_rtems_initialise+0x85><== NOT EXECUTED
sizeof ("max-held-bufs") - 1) == 0)
{
max_held_buffers = strtoul (options + sizeof ("max-held-bufs"), 0, 0);
11348f: 50 push %eax <== NOT EXECUTED
113490: 6a 00 push $0x0 <== NOT EXECUTED
113492: 6a 00 push $0x0 <== NOT EXECUTED
113494: 8d 46 0e lea 0xe(%esi),%eax <== NOT EXECUTED
113497: 50 push %eax <== NOT EXECUTED
113498: e8 ff e6 00 00 call 121b9c <strtoul> <== NOT EXECUTED
11349d: 89 c7 mov %eax,%edi <== NOT EXECUTED
11349f: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
1134a2: eb 0d jmp 1134b1 <rtems_rfs_rtems_initialise+0x92><== NOT EXECUTED
}
else
return rtems_rfs_rtems_error ("initialise: invalid option", EINVAL);
1134a4: e8 23 bd 00 00 call 11f1cc <__errno> <== NOT EXECUTED
1134a9: c7 00 16 00 00 00 movl $0x16,(%eax) <== NOT EXECUTED
1134af: eb 40 jmp 1134f1 <rtems_rfs_rtems_initialise+0xd2><== NOT EXECUTED
options = strchr (options, ',');
1134b1: 50 push %eax <== NOT EXECUTED
1134b2: 50 push %eax <== NOT EXECUTED
1134b3: 6a 2c push $0x2c <== NOT EXECUTED
1134b5: 56 push %esi <== NOT EXECUTED
1134b6: e8 d5 d6 00 00 call 120b90 <strchr> <== NOT EXECUTED
1134bb: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
1134be: 89 c6 mov %eax,%esi <== NOT EXECUTED
if (options)
1134c0: 85 c0 test %eax,%eax <== NOT EXECUTED
1134c2: 74 0f je 1134d3 <rtems_rfs_rtems_initialise+0xb4><== NOT EXECUTED
{
++options;
if (*options == '\0')
1134c4: 80 78 01 00 cmpb $0x0,0x1(%eax) <== NOT EXECUTED
1134c8: 74 09 je 1134d3 <rtems_rfs_rtems_initialise+0xb4><== NOT EXECUTED
return rtems_rfs_rtems_error ("initialise: invalid option", EINVAL);
options = strchr (options, ',');
if (options)
{
++options;
1134ca: 46 inc %esi <== NOT EXECUTED
int rc;
/*
* Parse the options the user specifiies.
*/
while (options)
1134cb: 85 f6 test %esi,%esi
1134cd: 0f 85 64 ff ff ff jne 113437 <rtems_rfs_rtems_initialise+0x18><== NEVER TAKEN
if (*options == '\0')
options = NULL;
}
}
rtems = malloc (sizeof (rtems_rfs_rtems_private));
1134d3: 83 ec 0c sub $0xc,%esp
1134d6: 6a 04 push $0x4
1134d8: e8 23 6f ff ff call 10a400 <malloc>
1134dd: 89 c6 mov %eax,%esi
if (!rtems)
1134df: 83 c4 10 add $0x10,%esp
1134e2: 85 c0 test %eax,%eax
1134e4: 75 13 jne 1134f9 <rtems_rfs_rtems_initialise+0xda><== ALWAYS TAKEN
return rtems_rfs_rtems_error ("initialise: local data", ENOMEM);
1134e6: e8 e1 bc 00 00 call 11f1cc <__errno> <== NOT EXECUTED
1134eb: c7 00 0c 00 00 00 movl $0xc,(%eax) <== NOT EXECUTED
1134f1: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
1134f4: e9 bc 00 00 00 jmp 1135b5 <rtems_rfs_rtems_initialise+0x196><== NOT EXECUTED
memset (rtems, 0, sizeof (rtems_rfs_rtems_private));
1134f9: c7 00 00 00 00 00 movl $0x0,(%eax)
rc = rtems_rfs_mutex_create (&rtems->access);
1134ff: 83 ec 0c sub $0xc,%esp
113502: 50 push %eax
113503: e8 f0 a1 00 00 call 11d6f8 <rtems_rfs_mutex_create>
if (rc > 0)
113508: 83 c4 10 add $0x10,%esp
11350b: 85 c0 test %eax,%eax
11350d: 7e 09 jle 113518 <rtems_rfs_rtems_initialise+0xf9><== ALWAYS TAKEN
{
free (rtems);
11350f: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
113512: 56 push %esi <== NOT EXECUTED
113513: 89 45 d4 mov %eax,-0x2c(%ebp) <== NOT EXECUTED
113516: eb 1a jmp 113532 <rtems_rfs_rtems_initialise+0x113><== NOT EXECUTED
return rtems_rfs_rtems_error ("initialise: cannot create mutex", rc);
}
rc = rtems_rfs_mutex_lock (&rtems->access);
113518: 8b 06 mov (%esi),%eax
11351a: e8 aa fe ff ff call 1133c9 <rtems_rfs_mutex_lock.isra.21>
if (rc > 0)
11351f: 85 c0 test %eax,%eax
113521: 7e 20 jle 113543 <rtems_rfs_rtems_initialise+0x124><== ALWAYS TAKEN
{
rtems_rfs_mutex_destroy (&rtems->access);
113523: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
113526: 56 push %esi <== NOT EXECUTED
113527: 89 45 d4 mov %eax,-0x2c(%ebp) <== NOT EXECUTED
11352a: e8 25 a2 00 00 call 11d754 <rtems_rfs_mutex_destroy><== NOT EXECUTED
free (rtems);
11352f: 89 34 24 mov %esi,(%esp) <== NOT EXECUTED
113532: e8 b1 69 ff ff call 109ee8 <free> <== NOT EXECUTED
return rtems_rfs_rtems_error ("initialise: cannot lock access mutex", rc);
113537: e8 90 bc 00 00 call 11f1cc <__errno> <== NOT EXECUTED
11353c: 8b 4d d4 mov -0x2c(%ebp),%ecx <== NOT EXECUTED
11353f: 89 08 mov %ecx,(%eax) <== NOT EXECUTED
113541: eb 2e jmp 113571 <rtems_rfs_rtems_initialise+0x152><== NOT EXECUTED
}
rc = rtems_rfs_fs_open (mt_entry->dev, rtems, flags, max_held_buffers, &fs);
113543: 83 ec 0c sub $0xc,%esp
113546: 8d 45 e4 lea -0x1c(%ebp),%eax
113549: 50 push %eax
11354a: 57 push %edi
11354b: 53 push %ebx
11354c: 56 push %esi
11354d: 8b 55 08 mov 0x8(%ebp),%edx
113550: ff 72 38 pushl 0x38(%edx)
113553: e8 17 91 00 00 call 11c66f <rtems_rfs_fs_open>
113558: 89 c3 mov %eax,%ebx
if (rc)
11355a: 83 c4 20 add $0x20,%esp
11355d: 85 c0 test %eax,%eax
11355f: 74 18 je 113579 <rtems_rfs_rtems_initialise+0x15a><== ALWAYS TAKEN
{
free (rtems);
113561: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
113564: 56 push %esi <== NOT EXECUTED
113565: e8 7e 69 ff ff call 109ee8 <free> <== NOT EXECUTED
return rtems_rfs_rtems_error ("initialise: open", rc);
11356a: e8 5d bc 00 00 call 11f1cc <__errno> <== NOT EXECUTED
11356f: 89 18 mov %ebx,(%eax) <== NOT EXECUTED
113571: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
113574: e9 78 ff ff ff jmp 1134f1 <rtems_rfs_rtems_initialise+0xd2><== NOT EXECUTED
}
mt_entry->fs_info = fs;
113579: 8b 45 e4 mov -0x1c(%ebp),%eax
11357c: 8b 4d 08 mov 0x8(%ebp),%ecx
11357f: 89 41 08 mov %eax,0x8(%ecx)
mt_entry->ops = &rtems_rfs_ops;
113582: c7 41 0c 34 05 13 00 movl $0x130534,0xc(%ecx)
mt_entry->mt_fs_root->location.node_access = (void*) RTEMS_RFS_ROOT_INO;
113589: 8b 51 24 mov 0x24(%ecx),%edx
11358c: c7 42 08 01 00 00 00 movl $0x1,0x8(%edx)
mt_entry->mt_fs_root->location.handlers = &rtems_rfs_rtems_dir_handlers;
113593: c7 42 10 ec 21 13 00 movl $0x1321ec,0x10(%edx)
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
11359a: 8b 98 80 00 00 00 mov 0x80(%eax),%ebx
rtems_rfs_buffers_release (fs);
1135a0: 83 ec 0c sub $0xc,%esp
1135a3: 50 push %eax
1135a4: e8 f0 70 00 00 call 11a699 <rtems_rfs_buffers_release>
rtems_rfs_mutex_unlock (&rtems->access);
1135a9: 8b 03 mov (%ebx),%eax
1135ab: e8 c5 fd ff ff call 113375 <rtems_rfs_mutex_unlock.isra.20>
1135b0: 83 c4 10 add $0x10,%esp
rtems_rfs_rtems_unlock (fs);
return 0;
1135b3: 31 c0 xor %eax,%eax
}
1135b5: 8d 65 f4 lea -0xc(%ebp),%esp
1135b8: 5b pop %ebx
1135b9: 5e pop %esi
1135ba: 5f pop %edi
1135bb: 5d pop %ebp
1135bc: c3 ret
00112ae8 <rtems_rfs_rtems_link>:
static int
rtems_rfs_rtems_link (const rtems_filesystem_location_info_t *parentloc,
const rtems_filesystem_location_info_t *targetloc,
const char *name,
size_t namelen)
{
112ae8: 55 push %ebp
112ae9: 89 e5 mov %esp,%ebp
112aeb: 53 push %ebx
112aec: 83 ec 0c sub $0xc,%esp
112aef: 8b 45 0c mov 0xc(%ebp),%eax
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_LINK))
printf ("rtems-rfs-rtems: link: in: parent:%" PRId32 " target:%" PRId32 "\n",
parent, target);
rc = rtems_rfs_link (fs, name, namelen, parent, target, false);
112af2: 6a 00 push $0x0
112af4: ff 70 08 pushl 0x8(%eax)
112af7: 8b 55 08 mov 0x8(%ebp),%edx
112afa: ff 72 08 pushl 0x8(%edx)
112afd: ff 75 14 pushl 0x14(%ebp)
112b00: ff 75 10 pushl 0x10(%ebp)
rtems_rfs_rtems_link (const rtems_filesystem_location_info_t *parentloc,
const rtems_filesystem_location_info_t *targetloc,
const char *name,
size_t namelen)
{
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (targetloc);
112b03: 8b 40 14 mov 0x14(%eax),%eax
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_LINK))
printf ("rtems-rfs-rtems: link: in: parent:%" PRId32 " target:%" PRId32 "\n",
parent, target);
rc = rtems_rfs_link (fs, name, namelen, parent, target, false);
112b06: ff 70 08 pushl 0x8(%eax)
112b09: e8 6a a2 00 00 call 11cd78 <rtems_rfs_link>
112b0e: 89 c3 mov %eax,%ebx
if (rc)
112b10: 83 c4 20 add $0x20,%esp
{
return rtems_rfs_rtems_error ("link: linking", rc);
}
return 0;
112b13: 31 c0 xor %eax,%eax
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_LINK))
printf ("rtems-rfs-rtems: link: in: parent:%" PRId32 " target:%" PRId32 "\n",
parent, target);
rc = rtems_rfs_link (fs, name, namelen, parent, target, false);
if (rc)
112b15: 85 db test %ebx,%ebx
112b17: 74 0a je 112b23 <rtems_rfs_rtems_link+0x3b><== ALWAYS TAKEN
{
return rtems_rfs_rtems_error ("link: linking", rc);
112b19: e8 ae c6 00 00 call 11f1cc <__errno> <== NOT EXECUTED
112b1e: 89 18 mov %ebx,(%eax) <== NOT EXECUTED
112b20: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
}
return 0;
}
112b23: 8b 5d fc mov -0x4(%ebp),%ebx
112b26: c9 leave
112b27: c3 ret
00112ef3 <rtems_rfs_rtems_mknod>:
rtems_rfs_rtems_mknod (const rtems_filesystem_location_info_t *parentloc,
const char *name,
size_t namelen,
mode_t mode,
dev_t dev)
{
112ef3: 55 push %ebp
112ef4: 89 e5 mov %esp,%ebp
112ef6: 57 push %edi
112ef7: 56 push %esi
112ef8: 53 push %ebx
112ef9: 83 ec 4c sub $0x4c,%esp
112efc: 8b 45 08 mov 0x8(%ebp),%eax
112eff: 8b 55 18 mov 0x18(%ebp),%edx
112f02: 89 55 b4 mov %edx,-0x4c(%ebp)
112f05: 8b 55 1c mov 0x1c(%ebp),%edx
112f08: 89 55 b0 mov %edx,-0x50(%ebp)
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (parentloc);
112f0b: 8b 50 14 mov 0x14(%eax),%edx
112f0e: 8b 5a 08 mov 0x8(%edx),%ebx
rtems_rfs_ino parent = rtems_rfs_rtems_get_pathloc_ino (parentloc);
112f11: 8b 50 08 mov 0x8(%eax),%edx
uid_t uid;
gid_t gid;
int rc;
#if defined(RTEMS_POSIX_API)
uid = geteuid ();
112f14: 89 55 ac mov %edx,-0x54(%ebp)
112f17: e8 94 35 00 00 call 1164b0 <geteuid>
112f1c: 0f b7 f0 movzwl %ax,%esi
gid = getegid ();
112f1f: e8 7c 35 00 00 call 1164a0 <getegid>
112f24: 0f b7 f8 movzwl %ax,%edi
uid = 0;
gid = 0;
#endif
rc = rtems_rfs_inode_create (fs, parent, name, namelen,
rtems_rfs_rtems_imode (mode),
112f27: 83 ec 0c sub $0xc,%esp
112f2a: ff 75 14 pushl 0x14(%ebp)
112f2d: e8 5a 09 00 00 call 11388c <rtems_rfs_rtems_imode>
#else
uid = 0;
gid = 0;
#endif
rc = rtems_rfs_inode_create (fs, parent, name, namelen,
112f32: 8d 4d bc lea -0x44(%ebp),%ecx
112f35: 89 0c 24 mov %ecx,(%esp)
112f38: 57 push %edi
112f39: 56 push %esi
112f3a: 6a 01 push $0x1
112f3c: 0f b7 c0 movzwl %ax,%eax
112f3f: 50 push %eax
112f40: ff 75 10 pushl 0x10(%ebp)
112f43: ff 75 0c pushl 0xc(%ebp)
112f46: 8b 55 ac mov -0x54(%ebp),%edx
112f49: 52 push %edx
112f4a: 53 push %ebx
112f4b: e8 5f f7 ff ff call 1126af <rtems_rfs_inode_create>
112f50: 89 c6 mov %eax,%esi
rtems_rfs_rtems_imode (mode),
1, uid, gid, &ino);
if (rc > 0)
112f52: 83 c4 30 add $0x30,%esp
112f55: 85 c0 test %eax,%eax
112f57: 7e 0c jle 112f65 <rtems_rfs_rtems_mknod+0x72>
{
return rtems_rfs_rtems_error ("mknod: inode create", rc);
112f59: e8 6e c2 00 00 call 11f1cc <__errno>
112f5e: 89 30 mov %esi,(%eax)
112f60: e9 9a 00 00 00 jmp 112fff <rtems_rfs_rtems_mknod+0x10c>
}
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
112f65: 6a 01 push $0x1
112f67: 8d 75 c0 lea -0x40(%ebp),%esi
112f6a: 56 push %esi
112f6b: ff 75 bc pushl -0x44(%ebp)
112f6e: 53 push %ebx
112f6f: e8 b6 f2 ff ff call 11222a <rtems_rfs_inode_open>
112f74: 89 c7 mov %eax,%edi
if (rc > 0)
112f76: 83 c4 10 add $0x10,%esp
112f79: 85 c0 test %eax,%eax
112f7b: 7e 09 jle 112f86 <rtems_rfs_rtems_mknod+0x93><== ALWAYS TAKEN
{
return rtems_rfs_rtems_error ("mknod: inode open", rc);
112f7d: e8 4a c2 00 00 call 11f1cc <__errno> <== NOT EXECUTED
112f82: 89 38 mov %edi,(%eax) <== NOT EXECUTED
112f84: eb 79 jmp 112fff <rtems_rfs_rtems_mknod+0x10c><== NOT EXECUTED
}
if (S_ISDIR(mode) || S_ISREG(mode))
112f86: 8b 45 14 mov 0x14(%ebp),%eax
112f89: 25 00 f0 00 00 and $0xf000,%eax
112f8e: 3d 00 80 00 00 cmp $0x8000,%eax
112f93: 74 4e je 112fe3 <rtems_rfs_rtems_mknod+0xf0>
112f95: 3d 00 40 00 00 cmp $0x4000,%eax
112f9a: 74 47 je 112fe3 <rtems_rfs_rtems_mknod+0xf0><== ALWAYS TAKEN
{
}
else if (S_ISCHR (mode) || S_ISBLK (mode))
112f9c: 8b 45 14 mov 0x14(%ebp),%eax <== NOT EXECUTED
112f9f: 25 00 b0 00 00 and $0xb000,%eax <== NOT EXECUTED
112fa4: 3d 00 20 00 00 cmp $0x2000,%eax <== NOT EXECUTED
112fa9: 75 1f jne 112fca <rtems_rfs_rtems_mknod+0xd7><== NOT EXECUTED
112fab: 8b 7d b0 mov -0x50(%ebp),%edi <== NOT EXECUTED
{
int major;
int minor;
rtems_filesystem_split_dev_t (dev, major, minor);
rtems_rfs_inode_set_block (&inode, 0, major);
112fae: 8b 4d b4 mov -0x4c(%ebp),%ecx <== NOT EXECUTED
112fb1: 31 d2 xor %edx,%edx <== NOT EXECUTED
112fb3: 89 f0 mov %esi,%eax <== NOT EXECUTED
112fb5: e8 16 fa ff ff call 1129d0 <rtems_rfs_inode_set_block><== NOT EXECUTED
rtems_rfs_inode_set_block (&inode, 1, minor);
112fba: 89 f9 mov %edi,%ecx <== NOT EXECUTED
112fbc: ba 01 00 00 00 mov $0x1,%edx <== NOT EXECUTED
112fc1: 89 f0 mov %esi,%eax <== NOT EXECUTED
112fc3: e8 08 fa ff ff call 1129d0 <rtems_rfs_inode_set_block><== NOT EXECUTED
112fc8: eb 19 jmp 112fe3 <rtems_rfs_rtems_mknod+0xf0><== NOT EXECUTED
}
else
{
rtems_rfs_inode_close (fs, &inode);
112fca: 50 push %eax <== NOT EXECUTED
112fcb: 50 push %eax <== NOT EXECUTED
112fcc: 56 push %esi <== NOT EXECUTED
112fcd: 53 push %ebx <== NOT EXECUTED
112fce: e8 d4 f3 ff ff call 1123a7 <rtems_rfs_inode_close> <== NOT EXECUTED
return rtems_rfs_rtems_error ("mknod: bad mode", EINVAL);
112fd3: e8 f4 c1 00 00 call 11f1cc <__errno> <== NOT EXECUTED
112fd8: c7 00 16 00 00 00 movl $0x16,(%eax) <== NOT EXECUTED
112fde: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
112fe1: eb 1c jmp 112fff <rtems_rfs_rtems_mknod+0x10c><== NOT EXECUTED
}
rc = rtems_rfs_inode_close (fs, &inode);
112fe3: 50 push %eax
112fe4: 50 push %eax
112fe5: 8d 45 c0 lea -0x40(%ebp),%eax
112fe8: 50 push %eax
112fe9: 53 push %ebx
112fea: e8 b8 f3 ff ff call 1123a7 <rtems_rfs_inode_close>
112fef: 89 c3 mov %eax,%ebx
if (rc > 0)
112ff1: 83 c4 10 add $0x10,%esp
112ff4: 85 c0 test %eax,%eax
112ff6: 7e 0c jle 113004 <rtems_rfs_rtems_mknod+0x111><== ALWAYS TAKEN
{
return rtems_rfs_rtems_error ("mknod: closing inode", rc);
112ff8: e8 cf c1 00 00 call 11f1cc <__errno> <== NOT EXECUTED
112ffd: 89 18 mov %ebx,(%eax) <== NOT EXECUTED
112fff: 83 c8 ff or $0xffffffff,%eax
113002: eb 02 jmp 113006 <rtems_rfs_rtems_mknod+0x113>
}
return 0;
113004: 31 c0 xor %eax,%eax
}
113006: 8d 65 f4 lea -0xc(%ebp),%esp
113009: 5b pop %ebx
11300a: 5e pop %esi
11300b: 5f pop %edi
11300c: 5d pop %ebp
11300d: c3 ret
00112e91 <rtems_rfs_rtems_node_type>:
* @return rtems_filesystem_node_types_t
*/
static rtems_filesystem_node_types_t
rtems_rfs_rtems_node_type (const rtems_filesystem_location_info_t* pathloc)
{
112e91: 55 push %ebp
112e92: 89 e5 mov %esp,%ebp
112e94: 57 push %edi
112e95: 56 push %esi
112e96: 53 push %ebx
112e97: 83 ec 3c sub $0x3c,%esp
112e9a: 8b 45 08 mov 0x8(%ebp),%eax
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
112e9d: 8b 50 14 mov 0x14(%eax),%edx
112ea0: 8b 7a 08 mov 0x8(%edx),%edi
rtems_rfs_ino ino = rtems_rfs_rtems_get_pathloc_ino (pathloc);
rtems_filesystem_node_types_t type;
rtems_rfs_inode_handle inode;
int rc;
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
112ea3: 6a 01 push $0x1
112ea5: 8d 5d c0 lea -0x40(%ebp),%ebx
112ea8: 53 push %ebx
112ea9: ff 70 08 pushl 0x8(%eax)
112eac: 57 push %edi
112ead: e8 78 f3 ff ff call 11222a <rtems_rfs_inode_open>
112eb2: 89 c6 mov %eax,%esi
if (rc > 0)
112eb4: 83 c4 10 add $0x10,%esp
112eb7: 85 c0 test %eax,%eax
112eb9: 7e 09 jle 112ec4 <rtems_rfs_rtems_node_type+0x33><== ALWAYS TAKEN
{
return rtems_rfs_rtems_error ("node_type: opening inode", rc);
112ebb: e8 0c c3 00 00 call 11f1cc <__errno> <== NOT EXECUTED
112ec0: 89 30 mov %esi,(%eax) <== NOT EXECUTED
112ec2: eb 22 jmp 112ee6 <rtems_rfs_rtems_node_type+0x55><== NOT EXECUTED
}
type = rtems_rfs_rtems_node_type_by_inode (&inode);
112ec4: 89 d8 mov %ebx,%eax
112ec6: e8 44 fb ff ff call 112a0f <rtems_rfs_rtems_node_type_by_inode>
112ecb: 89 c6 mov %eax,%esi
rc = rtems_rfs_inode_close (fs, &inode);
112ecd: 50 push %eax
112ece: 50 push %eax
112ecf: 53 push %ebx
112ed0: 57 push %edi
112ed1: e8 d1 f4 ff ff call 1123a7 <rtems_rfs_inode_close>
112ed6: 89 c3 mov %eax,%ebx
if (rc > 0)
112ed8: 83 c4 10 add $0x10,%esp
112edb: 85 c0 test %eax,%eax
112edd: 7e 0a jle 112ee9 <rtems_rfs_rtems_node_type+0x58><== ALWAYS TAKEN
{
return rtems_rfs_rtems_error ("node_type: closing inode", rc);
112edf: e8 e8 c2 00 00 call 11f1cc <__errno> <== NOT EXECUTED
112ee4: 89 18 mov %ebx,(%eax) <== NOT EXECUTED
112ee6: 83 ce ff or $0xffffffff,%esi <== NOT EXECUTED
}
return type;
}
112ee9: 89 f0 mov %esi,%eax
112eeb: 8d 65 f4 lea -0xc(%ebp),%esp
112eee: 5b pop %ebx
112eef: 5e pop %esi
112ef0: 5f pop %edi
112ef1: 5d pop %ebp
112ef2: c3 ret
00112ba4 <rtems_rfs_rtems_readlink>:
static ssize_t
rtems_rfs_rtems_readlink (const rtems_filesystem_location_info_t* pathloc,
char* buf,
size_t bufsize)
{
112ba4: 55 push %ebp
112ba5: 89 e5 mov %esp,%ebp
112ba7: 53 push %ebx
112ba8: 83 ec 20 sub $0x20,%esp
112bab: 8b 45 08 mov 0x8(%ebp),%eax
int rc;
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_READLINK))
printf ("rtems-rfs-rtems: readlink: in: ino:%" PRId32 "\n", ino);
rc = rtems_rfs_symlink_read (fs, ino, buf, bufsize, &length);
112bae: 8d 55 f4 lea -0xc(%ebp),%edx
112bb1: 52 push %edx
112bb2: ff 75 10 pushl 0x10(%ebp)
112bb5: ff 75 0c pushl 0xc(%ebp)
112bb8: ff 70 08 pushl 0x8(%eax)
static ssize_t
rtems_rfs_rtems_readlink (const rtems_filesystem_location_info_t* pathloc,
char* buf,
size_t bufsize)
{
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
112bbb: 8b 40 14 mov 0x14(%eax),%eax
int rc;
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_READLINK))
printf ("rtems-rfs-rtems: readlink: in: ino:%" PRId32 "\n", ino);
rc = rtems_rfs_symlink_read (fs, ino, buf, bufsize, &length);
112bbe: ff 70 08 pushl 0x8(%eax)
112bc1: e8 56 a9 00 00 call 11d51c <rtems_rfs_symlink_read>
112bc6: 89 c3 mov %eax,%ebx
if (rc)
112bc8: 83 c4 20 add $0x20,%esp
112bcb: 85 c0 test %eax,%eax
112bcd: 74 0c je 112bdb <rtems_rfs_rtems_readlink+0x37><== ALWAYS TAKEN
{
return rtems_rfs_rtems_error ("readlink: reading link", rc);
112bcf: e8 f8 c5 00 00 call 11f1cc <__errno> <== NOT EXECUTED
112bd4: 89 18 mov %ebx,(%eax) <== NOT EXECUTED
112bd6: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
112bd9: eb 03 jmp 112bde <rtems_rfs_rtems_readlink+0x3a><== NOT EXECUTED
}
return (ssize_t) length;
112bdb: 8b 45 f4 mov -0xc(%ebp),%eax
}
112bde: 8b 5d fc mov -0x4(%ebp),%ebx
112be1: c9 leave
112be2: c3 ret
00112b28 <rtems_rfs_rtems_rename>:
rtems_rfs_rtems_rename(const rtems_filesystem_location_info_t* old_parent_loc,
const rtems_filesystem_location_info_t* old_loc,
const rtems_filesystem_location_info_t* new_parent_loc,
const char* new_name,
size_t new_name_len)
{
112b28: 55 push %ebp <== NOT EXECUTED
112b29: 89 e5 mov %esp,%ebp <== NOT EXECUTED
112b2b: 57 push %edi <== NOT EXECUTED
112b2c: 56 push %esi <== NOT EXECUTED
112b2d: 53 push %ebx <== NOT EXECUTED
112b2e: 83 ec 24 sub $0x24,%esp <== NOT EXECUTED
112b31: 8b 45 0c mov 0xc(%ebp),%eax <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (old_loc);
112b34: 8b 50 14 mov 0x14(%eax),%edx <== NOT EXECUTED
112b37: 8b 5a 08 mov 0x8(%edx),%ebx <== NOT EXECUTED
rtems_rfs_ino new_parent;
rtems_rfs_ino ino;
uint32_t doff;
int rc;
old_parent = rtems_rfs_rtems_get_pathloc_ino (old_parent_loc);
112b3a: 8b 55 08 mov 0x8(%ebp),%edx <== NOT EXECUTED
112b3d: 8b 52 08 mov 0x8(%edx),%edx <== NOT EXECUTED
new_parent = rtems_rfs_rtems_get_pathloc_ino (new_parent_loc);
ino = rtems_rfs_rtems_get_pathloc_ino (old_loc);
112b40: 8b 70 08 mov 0x8(%eax),%esi <== NOT EXECUTED
doff = rtems_rfs_rtems_get_pathloc_doff (old_loc);
112b43: 8b 48 0c mov 0xc(%eax),%ecx <== NOT EXECUTED
/*
* Link to the inode before unlinking so the inode is not erased when
* unlinked.
*/
rc = rtems_rfs_link (fs, new_name, new_name_len, new_parent, ino, true);
112b46: 6a 01 push $0x1 <== NOT EXECUTED
112b48: 56 push %esi <== NOT EXECUTED
112b49: 8b 45 10 mov 0x10(%ebp),%eax <== NOT EXECUTED
112b4c: ff 70 08 pushl 0x8(%eax) <== NOT EXECUTED
112b4f: ff 75 18 pushl 0x18(%ebp) <== NOT EXECUTED
112b52: ff 75 14 pushl 0x14(%ebp) <== NOT EXECUTED
112b55: 53 push %ebx <== NOT EXECUTED
112b56: 89 55 e4 mov %edx,-0x1c(%ebp) <== NOT EXECUTED
112b59: 89 4d e0 mov %ecx,-0x20(%ebp) <== NOT EXECUTED
112b5c: e8 17 a2 00 00 call 11cd78 <rtems_rfs_link> <== NOT EXECUTED
112b61: 89 c7 mov %eax,%edi <== NOT EXECUTED
if (rc)
112b63: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
112b66: 85 c0 test %eax,%eax <== NOT EXECUTED
112b68: 8b 55 e4 mov -0x1c(%ebp),%edx <== NOT EXECUTED
112b6b: 8b 4d e0 mov -0x20(%ebp),%ecx <== NOT EXECUTED
112b6e: 74 09 je 112b79 <rtems_rfs_rtems_rename+0x51><== NOT EXECUTED
{
return rtems_rfs_rtems_error ("rename: linking", rc);
112b70: e8 57 c6 00 00 call 11f1cc <__errno> <== NOT EXECUTED
112b75: 89 38 mov %edi,(%eax) <== NOT EXECUTED
112b77: eb 20 jmp 112b99 <rtems_rfs_rtems_rename+0x71><== NOT EXECUTED
/*
* Unlink all inodes even directories with the dir option as false because a
* directory may not be empty.
*/
rc = rtems_rfs_unlink (fs, old_parent, ino, doff,
112b79: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
112b7c: 6a 02 push $0x2 <== NOT EXECUTED
112b7e: 51 push %ecx <== NOT EXECUTED
112b7f: 56 push %esi <== NOT EXECUTED
112b80: 52 push %edx <== NOT EXECUTED
112b81: 53 push %ebx <== NOT EXECUTED
112b82: e8 80 a3 00 00 call 11cf07 <rtems_rfs_unlink> <== NOT EXECUTED
112b87: 89 c3 mov %eax,%ebx <== NOT EXECUTED
rtems_rfs_unlink_dir_allowed);
if (rc)
112b89: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
{
return rtems_rfs_rtems_error ("rename: unlinking", rc);
}
return 0;
112b8c: 31 c0 xor %eax,%eax <== NOT EXECUTED
* Unlink all inodes even directories with the dir option as false because a
* directory may not be empty.
*/
rc = rtems_rfs_unlink (fs, old_parent, ino, doff,
rtems_rfs_unlink_dir_allowed);
if (rc)
112b8e: 85 db test %ebx,%ebx <== NOT EXECUTED
112b90: 74 0a je 112b9c <rtems_rfs_rtems_rename+0x74><== NOT EXECUTED
{
return rtems_rfs_rtems_error ("rename: unlinking", rc);
112b92: e8 35 c6 00 00 call 11f1cc <__errno> <== NOT EXECUTED
112b97: 89 18 mov %ebx,(%eax) <== NOT EXECUTED
112b99: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
}
return 0;
}
112b9c: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
112b9f: 5b pop %ebx <== NOT EXECUTED
112ba0: 5e pop %esi <== NOT EXECUTED
112ba1: 5f pop %edi <== NOT EXECUTED
112ba2: 5d pop %ebp <== NOT EXECUTED
112ba3: c3 ret <== NOT EXECUTED
00113800 <rtems_rfs_rtems_set_handlers>:
*/
bool
rtems_rfs_rtems_set_handlers (rtems_filesystem_location_info_t* loc,
rtems_rfs_inode_handle* inode)
{
113800: 55 push %ebp
113801: 89 e5 mov %esp,%ebp
113803: 53 push %ebx
113804: 51 push %ecx
113805: 8b 55 08 mov 0x8(%ebp),%edx
{
/*
* Mapping matches RTEMS so no need to change.
*/
return imode;
}
113808: 8b 45 0c mov 0xc(%ebp),%eax
11380b: 8b 40 0c mov 0xc(%eax),%eax
11380e: 0f b6 48 02 movzbl 0x2(%eax),%ecx
113812: c1 e1 08 shl $0x8,%ecx
113815: 0f b6 40 03 movzbl 0x3(%eax),%eax
113819: 09 c8 or %ecx,%eax
bool
rtems_rfs_rtems_set_handlers (rtems_filesystem_location_info_t* loc,
rtems_rfs_inode_handle* inode)
{
uint16_t mode = rtems_rfs_inode_get_mode (inode);
loc->handlers = NULL;
11381b: c7 42 10 00 00 00 00 movl $0x0,0x10(%edx)
if (RTEMS_RFS_S_ISDIR (mode))
113822: 89 c1 mov %eax,%ecx
113824: 66 81 e1 00 f0 and $0xf000,%cx
113829: 66 81 f9 00 40 cmp $0x4000,%cx
11382e: 75 09 jne 113839 <rtems_rfs_rtems_set_handlers+0x39>
loc->handlers = rtems_rfs_rtems_handlers (dir);
113830: c7 42 10 ec 21 13 00 movl $0x1321ec,0x10(%edx)
113837: eb 15 jmp 11384e <rtems_rfs_rtems_set_handlers+0x4e>
else if (RTEMS_RFS_S_ISCHR (mode) || RTEMS_RFS_S_ISBLK(mode))
113839: 89 c3 mov %eax,%ebx
11383b: 66 81 e3 00 b0 and $0xb000,%bx
113840: 66 81 fb 00 20 cmp $0x2000,%bx
113845: 75 0b jne 113852 <rtems_rfs_rtems_set_handlers+0x52><== ALWAYS TAKEN
loc->handlers = rtems_rfs_rtems_handlers (device);
113847: c7 42 10 c0 21 13 00 movl $0x1321c0,0x10(%edx) <== NOT EXECUTED
else
{
printf ("rtems-rfs: mode type unknown: %04x\n", mode);
return false;
}
return true;
11384e: b0 01 mov $0x1,%al
113850: eb 35 jmp 113887 <rtems_rfs_rtems_set_handlers+0x87>
loc->handlers = NULL;
if (RTEMS_RFS_S_ISDIR (mode))
loc->handlers = rtems_rfs_rtems_handlers (dir);
else if (RTEMS_RFS_S_ISCHR (mode) || RTEMS_RFS_S_ISBLK(mode))
loc->handlers = rtems_rfs_rtems_handlers (device);
else if (RTEMS_RFS_S_ISLNK (mode))
113852: 66 81 f9 00 a0 cmp $0xa000,%cx
113857: 75 09 jne 113862 <rtems_rfs_rtems_set_handlers+0x62>
loc->handlers = rtems_rfs_rtems_handlers (link);
113859: c7 42 10 88 05 13 00 movl $0x130588,0x10(%edx)
113860: eb ec jmp 11384e <rtems_rfs_rtems_set_handlers+0x4e>
else if (RTEMS_RFS_S_ISREG (mode))
113862: 66 81 f9 00 80 cmp $0x8000,%cx
113867: 75 09 jne 113872 <rtems_rfs_rtems_set_handlers+0x72><== NEVER TAKEN
loc->handlers = rtems_rfs_rtems_handlers (file);
113869: c7 42 10 18 22 13 00 movl $0x132218,0x10(%edx)
113870: eb dc jmp 11384e <rtems_rfs_rtems_set_handlers+0x4e>
else
{
printf ("rtems-rfs: mode type unknown: %04x\n", mode);
113872: 52 push %edx <== NOT EXECUTED
113873: 52 push %edx <== NOT EXECUTED
113874: 0f b7 c0 movzwl %ax,%eax <== NOT EXECUTED
113877: 50 push %eax <== NOT EXECUTED
113878: 68 bc 05 13 00 push $0x1305bc <== NOT EXECUTED
11387d: e8 ba ca 00 00 call 12033c <printf> <== NOT EXECUTED
return false;
113882: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
113885: 31 c0 xor %eax,%eax <== NOT EXECUTED
}
return true;
}
113887: 8b 5d fc mov -0x4(%ebp),%ebx
11388a: c9 leave
11388b: c3 ret
00112a67 <rtems_rfs_rtems_statvfs>:
* @return int
*/
static int
rtems_rfs_rtems_statvfs (const rtems_filesystem_location_info_t* pathloc,
struct statvfs* sb)
{
112a67: 55 push %ebp <== NOT EXECUTED
112a68: 89 e5 mov %esp,%ebp <== NOT EXECUTED
112a6a: 56 push %esi <== NOT EXECUTED
112a6b: 53 push %ebx <== NOT EXECUTED
112a6c: 83 ec 14 sub $0x14,%esp <== NOT EXECUTED
112a6f: 8b 5d 0c mov 0xc(%ebp),%ebx <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
112a72: 8b 45 08 mov 0x8(%ebp),%eax <== NOT EXECUTED
112a75: 8b 40 14 mov 0x14(%eax),%eax <== NOT EXECUTED
112a78: 8b 70 08 mov 0x8(%eax),%esi <== NOT EXECUTED
size_t blocks;
size_t inodes;
rtems_rfs_group_usage (fs, &blocks, &inodes);
112a7b: 8d 45 f4 lea -0xc(%ebp),%eax <== NOT EXECUTED
112a7e: 50 push %eax <== NOT EXECUTED
112a7f: 8d 45 f0 lea -0x10(%ebp),%eax <== NOT EXECUTED
112a82: 50 push %eax <== NOT EXECUTED
112a83: 56 push %esi <== NOT EXECUTED
112a84: e8 8d f6 ff ff call 112116 <rtems_rfs_group_usage> <== NOT EXECUTED
sb->f_bsize = rtems_rfs_fs_block_size (fs);
112a89: 8b 46 08 mov 0x8(%esi),%eax <== NOT EXECUTED
112a8c: 89 03 mov %eax,(%ebx) <== NOT EXECUTED
sb->f_frsize = rtems_rfs_fs_media_block_size (fs);
112a8e: 8b 46 10 mov 0x10(%esi),%eax <== NOT EXECUTED
112a91: 8b 50 20 mov 0x20(%eax),%edx <== NOT EXECUTED
112a94: 89 53 04 mov %edx,0x4(%ebx) <== NOT EXECUTED
sb->f_blocks = rtems_rfs_fs_media_blocks (fs);
112a97: 8b 50 1c mov 0x1c(%eax),%edx <== NOT EXECUTED
112a9a: 89 53 08 mov %edx,0x8(%ebx) <== NOT EXECUTED
112a9d: c7 43 0c 00 00 00 00 movl $0x0,0xc(%ebx) <== NOT EXECUTED
sb->f_bfree = rtems_rfs_fs_blocks (fs) - blocks;
112aa4: 8b 46 04 mov 0x4(%esi),%eax <== NOT EXECUTED
112aa7: 2b 45 f0 sub -0x10(%ebp),%eax <== NOT EXECUTED
112aaa: 89 43 10 mov %eax,0x10(%ebx) <== NOT EXECUTED
112aad: c7 43 14 00 00 00 00 movl $0x0,0x14(%ebx) <== NOT EXECUTED
sb->f_bavail = sb->f_bfree;
112ab4: 89 43 18 mov %eax,0x18(%ebx) <== NOT EXECUTED
112ab7: c7 43 1c 00 00 00 00 movl $0x0,0x1c(%ebx) <== NOT EXECUTED
sb->f_files = rtems_rfs_fs_inodes (fs);
112abe: 8b 46 14 mov 0x14(%esi),%eax <== NOT EXECUTED
112ac1: 89 43 20 mov %eax,0x20(%ebx) <== NOT EXECUTED
sb->f_ffree = rtems_rfs_fs_inodes (fs) - inodes;
112ac4: 2b 45 f4 sub -0xc(%ebp),%eax <== NOT EXECUTED
112ac7: 89 43 24 mov %eax,0x24(%ebx) <== NOT EXECUTED
sb->f_favail = sb->f_ffree;
112aca: 89 43 28 mov %eax,0x28(%ebx) <== NOT EXECUTED
sb->f_fsid = RTEMS_RFS_SB_MAGIC;
112acd: c7 43 2c 01 20 09 28 movl $0x28092001,0x2c(%ebx) <== NOT EXECUTED
sb->f_flag = rtems_rfs_fs_flags (fs);
112ad4: 8b 06 mov (%esi),%eax <== NOT EXECUTED
112ad6: 89 43 30 mov %eax,0x30(%ebx) <== NOT EXECUTED
sb->f_namemax = rtems_rfs_fs_max_name (fs);
112ad9: 8b 46 1c mov 0x1c(%esi),%eax <== NOT EXECUTED
112adc: 89 43 34 mov %eax,0x34(%ebx) <== NOT EXECUTED
return 0;
}
112adf: 31 c0 xor %eax,%eax <== NOT EXECUTED
112ae1: 8d 65 f8 lea -0x8(%ebp),%esp <== NOT EXECUTED
112ae4: 5b pop %ebx <== NOT EXECUTED
112ae5: 5e pop %esi <== NOT EXECUTED
112ae6: 5d pop %ebp <== NOT EXECUTED
112ae7: c3 ret <== NOT EXECUTED
00112be3 <rtems_rfs_rtems_symlink>:
static int
rtems_rfs_rtems_symlink (const rtems_filesystem_location_info_t* parent_loc,
const char* node_name,
size_t node_name_len,
const char* target)
{
112be3: 55 push %ebp
112be4: 89 e5 mov %esp,%ebp
112be6: 57 push %edi
112be7: 56 push %esi
112be8: 53 push %ebx
112be9: 83 ec 1c sub $0x1c,%esp
112bec: 8b 45 08 mov 0x8(%ebp),%eax
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (parent_loc);
112bef: 8b 50 14 mov 0x14(%eax),%edx
112bf2: 8b 5a 08 mov 0x8(%edx),%ebx
rtems_rfs_ino parent = rtems_rfs_rtems_get_pathloc_ino (parent_loc);
112bf5: 8b 70 08 mov 0x8(%eax),%esi
int rc;
rc = rtems_rfs_symlink (fs, node_name, node_name_len,
target, strlen (target),
geteuid(), getegid(), parent);
112bf8: e8 a3 38 00 00 call 1164a0 <getegid>
112bfd: 66 89 45 e6 mov %ax,-0x1a(%ebp)
112c01: e8 aa 38 00 00 call 1164b0 <geteuid>
112c06: 0f b7 d0 movzwl %ax,%edx
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (parent_loc);
rtems_rfs_ino parent = rtems_rfs_rtems_get_pathloc_ino (parent_loc);
int rc;
rc = rtems_rfs_symlink (fs, node_name, node_name_len,
target, strlen (target),
112c09: 31 c0 xor %eax,%eax
112c0b: 83 c9 ff or $0xffffffff,%ecx
112c0e: 8b 7d 14 mov 0x14(%ebp),%edi
112c11: f2 ae repnz scas %es:(%edi),%al
112c13: f7 d1 not %ecx
112c15: 49 dec %ecx
{
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (parent_loc);
rtems_rfs_ino parent = rtems_rfs_rtems_get_pathloc_ino (parent_loc);
int rc;
rc = rtems_rfs_symlink (fs, node_name, node_name_len,
112c16: 56 push %esi
112c17: 0f b7 45 e6 movzwl -0x1a(%ebp),%eax
112c1b: 50 push %eax
112c1c: 52 push %edx
112c1d: 51 push %ecx
112c1e: ff 75 14 pushl 0x14(%ebp)
112c21: ff 75 10 pushl 0x10(%ebp)
112c24: ff 75 0c pushl 0xc(%ebp)
112c27: 53 push %ebx
112c28: e8 45 a6 00 00 call 11d272 <rtems_rfs_symlink>
112c2d: 89 c3 mov %eax,%ebx
target, strlen (target),
geteuid(), getegid(), parent);
if (rc)
112c2f: 83 c4 20 add $0x20,%esp
{
return rtems_rfs_rtems_error ("symlink: linking", rc);
}
return 0;
112c32: 31 c0 xor %eax,%eax
int rc;
rc = rtems_rfs_symlink (fs, node_name, node_name_len,
target, strlen (target),
geteuid(), getegid(), parent);
if (rc)
112c34: 85 db test %ebx,%ebx
112c36: 74 0a je 112c42 <rtems_rfs_rtems_symlink+0x5f><== ALWAYS TAKEN
{
return rtems_rfs_rtems_error ("symlink: linking", rc);
112c38: e8 8f c5 00 00 call 11f1cc <__errno> <== NOT EXECUTED
112c3d: 89 18 mov %ebx,(%eax) <== NOT EXECUTED
112c3f: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
}
return 0;
}
112c42: 8d 65 f4 lea -0xc(%ebp),%esp
112c45: 5b pop %ebx
112c46: 5e pop %esi
112c47: 5f pop %edi
112c48: 5d pop %ebp
112c49: c3 ret
0011d848 <rtems_rfs_rtems_unlock>:
/**
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
11d848: 55 push %ebp
11d849: 89 e5 mov %esp,%ebp
11d84b: 53 push %ebx
11d84c: 83 ec 10 sub $0x10,%esp
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
11d84f: 8b 98 80 00 00 00 mov 0x80(%eax),%ebx
rtems_rfs_buffers_release (fs);
11d855: 50 push %eax
11d856: e8 3e ce ff ff call 11a699 <rtems_rfs_buffers_release>
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
11d85b: 58 pop %eax
11d85c: ff 33 pushl (%ebx)
11d85e: e8 25 05 ff ff call 10dd88 <rtems_semaphore_release>
11d863: 89 c3 mov %eax,%ebx
if (sc != RTEMS_SUCCESSFUL)
11d865: 83 c4 10 add $0x10,%esp
11d868: 85 c0 test %eax,%eax
11d86a: 74 2b je 11d897 <rtems_rfs_rtems_unlock+0x4f><== ALWAYS TAKEN
{
#if RTEMS_RFS_TRACE
if (rtems_rfs_trace (RTEMS_RFS_TRACE_MUTEX))
11d86c: 50 push %eax <== NOT EXECUTED
11d86d: 50 push %eax <== NOT EXECUTED
11d86e: 6a 00 push $0x0 <== NOT EXECUTED
11d870: 6a 04 push $0x4 <== NOT EXECUTED
11d872: e8 25 60 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11d877: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11d87a: 84 c0 test %al,%al <== NOT EXECUTED
11d87c: 74 19 je 11d897 <rtems_rfs_rtems_unlock+0x4f><== NOT EXECUTED
printf ("rtems-rfs: mutex: release failed: %s\n",
11d87e: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11d881: 53 push %ebx <== NOT EXECUTED
11d882: e8 95 c4 fe ff call 109d1c <rtems_status_text> <== NOT EXECUTED
11d887: 5a pop %edx <== NOT EXECUTED
11d888: 59 pop %ecx <== NOT EXECUTED
11d889: 50 push %eax <== NOT EXECUTED
11d88a: 68 b2 04 13 00 push $0x1304b2 <== NOT EXECUTED
11d88f: e8 a8 2a 00 00 call 12033c <printf> <== NOT EXECUTED
11d894: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rtems_rfs_mutex_unlock (&rtems->access);
}
11d897: 8b 5d fc mov -0x4(%ebp),%ebx
11d89a: c9 leave
11d89b: c3 ret
00112c4a <rtems_rfs_rtems_utime>:
static int
rtems_rfs_rtems_utime(const rtems_filesystem_location_info_t* pathloc,
time_t atime,
time_t mtime)
{
112c4a: 55 push %ebp <== NOT EXECUTED
112c4b: 89 e5 mov %esp,%ebp <== NOT EXECUTED
112c4d: 57 push %edi <== NOT EXECUTED
112c4e: 56 push %esi <== NOT EXECUTED
112c4f: 53 push %ebx <== NOT EXECUTED
112c50: 83 ec 3c sub $0x3c,%esp <== NOT EXECUTED
112c53: 8b 45 08 mov 0x8(%ebp),%eax <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
112c56: 8b 50 14 mov 0x14(%eax),%edx <== NOT EXECUTED
112c59: 8b 7a 08 mov 0x8(%edx),%edi <== NOT EXECUTED
rtems_rfs_ino ino = rtems_rfs_rtems_get_pathloc_ino (pathloc);
rtems_rfs_inode_handle inode;
int rc;
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
112c5c: 6a 01 push $0x1 <== NOT EXECUTED
112c5e: 8d 75 c0 lea -0x40(%ebp),%esi <== NOT EXECUTED
112c61: 56 push %esi <== NOT EXECUTED
112c62: ff 70 08 pushl 0x8(%eax) <== NOT EXECUTED
112c65: 57 push %edi <== NOT EXECUTED
112c66: e8 bf f5 ff ff call 11222a <rtems_rfs_inode_open> <== NOT EXECUTED
112c6b: 89 c3 mov %eax,%ebx <== NOT EXECUTED
if (rc)
112c6d: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
112c70: 85 c0 test %eax,%eax <== NOT EXECUTED
112c72: 74 02 je 112c76 <rtems_rfs_rtems_utime+0x2c><== NOT EXECUTED
112c74: eb 5d jmp 112cd3 <rtems_rfs_rtems_utime+0x89><== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_atime (rtems_rfs_inode_handle* handle,
rtems_rfs_time atime)
{
rtems_rfs_write_u32 (&handle->node->atime, atime);
112c76: 8b 45 cc mov -0x34(%ebp),%eax <== NOT EXECUTED
112c79: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
112c7c: c1 e9 18 shr $0x18,%ecx <== NOT EXECUTED
112c7f: 88 48 10 mov %cl,0x10(%eax) <== NOT EXECUTED
112c82: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
112c85: c1 e9 10 shr $0x10,%ecx <== NOT EXECUTED
112c88: 88 48 11 mov %cl,0x11(%eax) <== NOT EXECUTED
112c8b: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
112c8e: c1 e9 08 shr $0x8,%ecx <== NOT EXECUTED
112c91: 88 48 12 mov %cl,0x12(%eax) <== NOT EXECUTED
112c94: 8a 55 0c mov 0xc(%ebp),%dl <== NOT EXECUTED
112c97: 88 50 13 mov %dl,0x13(%eax) <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
112c9a: c6 45 d0 01 movb $0x1,-0x30(%ebp) <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_mtime (rtems_rfs_inode_handle* handle,
rtems_rfs_time mtime)
{
rtems_rfs_write_u32 (&handle->node->mtime, mtime);
112c9e: 8b 4d 10 mov 0x10(%ebp),%ecx <== NOT EXECUTED
112ca1: c1 e9 18 shr $0x18,%ecx <== NOT EXECUTED
112ca4: 88 48 14 mov %cl,0x14(%eax) <== NOT EXECUTED
112ca7: 8b 4d 10 mov 0x10(%ebp),%ecx <== NOT EXECUTED
112caa: c1 e9 10 shr $0x10,%ecx <== NOT EXECUTED
112cad: 88 48 15 mov %cl,0x15(%eax) <== NOT EXECUTED
112cb0: 8b 4d 10 mov 0x10(%ebp),%ecx <== NOT EXECUTED
112cb3: c1 e9 08 shr $0x8,%ecx <== NOT EXECUTED
112cb6: 88 48 16 mov %cl,0x16(%eax) <== NOT EXECUTED
112cb9: 8a 55 10 mov 0x10(%ebp),%dl <== NOT EXECUTED
112cbc: 88 50 17 mov %dl,0x17(%eax) <== NOT EXECUTED
}
rtems_rfs_inode_set_atime (&inode, atime);
rtems_rfs_inode_set_mtime (&inode, mtime);
rc = rtems_rfs_inode_close (fs, &inode);
112cbf: 50 push %eax <== NOT EXECUTED
112cc0: 50 push %eax <== NOT EXECUTED
112cc1: 56 push %esi <== NOT EXECUTED
112cc2: 57 push %edi <== NOT EXECUTED
112cc3: e8 df f6 ff ff call 1123a7 <rtems_rfs_inode_close> <== NOT EXECUTED
112cc8: 89 c3 mov %eax,%ebx <== NOT EXECUTED
if (rc)
112cca: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
{
return rtems_rfs_rtems_error ("utime: closing inode", rc);
}
return 0;
112ccd: 31 c0 xor %eax,%eax <== NOT EXECUTED
rtems_rfs_inode_set_atime (&inode, atime);
rtems_rfs_inode_set_mtime (&inode, mtime);
rc = rtems_rfs_inode_close (fs, &inode);
if (rc)
112ccf: 85 db test %ebx,%ebx <== NOT EXECUTED
112cd1: 74 0a je 112cdd <rtems_rfs_rtems_utime+0x93><== NOT EXECUTED
{
return rtems_rfs_rtems_error ("utime: closing inode", rc);
112cd3: e8 f4 c4 00 00 call 11f1cc <__errno> <== NOT EXECUTED
112cd8: 89 18 mov %ebx,(%eax) <== NOT EXECUTED
112cda: 83 c8 ff or $0xffffffff,%eax <== NOT EXECUTED
}
return 0;
}
112cdd: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
112ce0: 5b pop %ebx <== NOT EXECUTED
112ce1: 5e pop %esi <== NOT EXECUTED
112ce2: 5f pop %edi <== NOT EXECUTED
112ce3: 5d pop %ebp <== NOT EXECUTED
112ce4: c3 ret <== NOT EXECUTED
0011a04e <rtems_rfs_scan_chain>:
*/
static rtems_rfs_buffer*
rtems_rfs_scan_chain (rtems_chain_control* chain,
uint32_t* count,
rtems_rfs_buffer_block block)
{
11a04e: 55 push %ebp
11a04f: 89 e5 mov %esp,%ebp
11a051: 57 push %edi
11a052: 56 push %esi
11a053: 53 push %ebx
11a054: 83 ec 24 sub $0x24,%esp
11a057: 89 45 e4 mov %eax,-0x1c(%ebp)
11a05a: 89 d6 mov %edx,%esi
11a05c: 89 cf mov %ecx,%edi
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Last(
Chain_Control *the_chain
)
{
return _Chain_Tail( the_chain )->previous;
11a05e: 8b 58 08 mov 0x8(%eax),%ebx
rtems_rfs_buffer* buffer;
rtems_chain_node* node;
node = rtems_chain_last (chain);
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
11a061: 6a 00 push $0x0
11a063: 68 80 00 00 00 push $0x80
11a068: e8 2f 98 ff ff call 11389c <rtems_rfs_trace>
11a06d: 83 c4 10 add $0x10,%esp
11a070: 84 c0 test %al,%al
11a072: 0f 84 83 00 00 00 je 11a0fb <rtems_rfs_scan_chain+0xad><== ALWAYS TAKEN
printf ("rtems-rfs: buffer-scan: count=%" PRIu32 ", block=%" PRIu32 ": ", *count, block);
11a078: 52 push %edx <== NOT EXECUTED
11a079: 57 push %edi <== NOT EXECUTED
11a07a: ff 36 pushl (%esi) <== NOT EXECUTED
11a07c: 68 b5 0d 13 00 push $0x130db5 <== NOT EXECUTED
11a081: e8 b6 62 00 00 call 12033c <printf> <== NOT EXECUTED
11a086: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11a089: eb 70 jmp 11a0fb <rtems_rfs_scan_chain+0xad><== NOT EXECUTED
while (!rtems_chain_is_head (chain, node))
{
buffer = (rtems_rfs_buffer*) node;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
11a08b: 50 push %eax
11a08c: 50 push %eax
11a08d: 6a 00 push $0x0
11a08f: 68 80 00 00 00 push $0x80
11a094: e8 03 98 ff ff call 11389c <rtems_rfs_trace>
11a099: 83 c4 10 add $0x10,%esp
11a09c: 84 c0 test %al,%al
11a09e: 74 12 je 11a0b2 <rtems_rfs_scan_chain+0x64><== ALWAYS TAKEN
printf ("%" PRIuPTR " ", ((intptr_t) buffer->user));
11a0a0: 50 push %eax <== NOT EXECUTED
11a0a1: 50 push %eax <== NOT EXECUTED
11a0a2: ff 73 34 pushl 0x34(%ebx) <== NOT EXECUTED
11a0a5: 68 e4 0d 13 00 push $0x130de4 <== NOT EXECUTED
11a0aa: e8 8d 62 00 00 call 12033c <printf> <== NOT EXECUTED
11a0af: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
if (((rtems_rfs_buffer_block) ((intptr_t)(buffer->user))) == block)
11a0b2: 39 7b 34 cmp %edi,0x34(%ebx)
11a0b5: 75 41 jne 11a0f8 <rtems_rfs_scan_chain+0xaa>
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
11a0b7: 50 push %eax
11a0b8: 50 push %eax
11a0b9: 6a 00 push $0x0
11a0bb: 68 80 00 00 00 push $0x80
11a0c0: e8 d7 97 ff ff call 11389c <rtems_rfs_trace>
11a0c5: 83 c4 10 add $0x10,%esp
11a0c8: 84 c0 test %al,%al
11a0ca: 74 12 je 11a0de <rtems_rfs_scan_chain+0x90><== ALWAYS TAKEN
printf (": found block=%" PRIuPTR "\n",
11a0cc: 50 push %eax <== NOT EXECUTED
11a0cd: 50 push %eax <== NOT EXECUTED
11a0ce: ff 73 34 pushl 0x34(%ebx) <== NOT EXECUTED
11a0d1: 68 e9 0d 13 00 push $0x130de9 <== NOT EXECUTED
11a0d6: e8 61 62 00 00 call 12033c <printf> <== NOT EXECUTED
11a0db: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
((intptr_t)(buffer->user)));
(*count)--;
11a0de: ff 0e decl (%esi)
*/
RTEMS_INLINE_ROUTINE void rtems_chain_extract(
rtems_chain_node *the_node
)
{
_Chain_Extract( the_node );
11a0e0: 83 ec 0c sub $0xc,%esp
11a0e3: 53 push %ebx
11a0e4: e8 1b d7 ff ff call 117804 <_Chain_Extract>
*/
RTEMS_INLINE_ROUTINE void _Chain_Set_off_chain(
Chain_Node *node
)
{
node->next = node->previous = NULL;
11a0e9: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx)
11a0f0: c7 03 00 00 00 00 movl $0x0,(%ebx)
11a0f6: eb 2c jmp 11a124 <rtems_rfs_scan_chain+0xd6>
true);
if ((rc > 0) && (rrc == 0))
rrc = rc;
return rrc;
}
11a0f8: 8b 5b 04 mov 0x4(%ebx),%ebx
node = rtems_chain_last (chain);
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
printf ("rtems-rfs: buffer-scan: count=%" PRIu32 ", block=%" PRIu32 ": ", *count, block);
while (!rtems_chain_is_head (chain, node))
11a0fb: 3b 5d e4 cmp -0x1c(%ebp),%ebx
11a0fe: 75 8b jne 11a08b <rtems_rfs_scan_chain+0x3d>
return buffer;
}
node = rtems_chain_previous (node);
}
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
11a100: 50 push %eax
11a101: 50 push %eax
11a102: 6a 00 push $0x0
11a104: 68 80 00 00 00 push $0x80
11a109: e8 8e 97 ff ff call 11389c <rtems_rfs_trace>
11a10e: 83 c4 10 add $0x10,%esp
printf (": not found\n");
return NULL;
11a111: 31 db xor %ebx,%ebx
return buffer;
}
node = rtems_chain_previous (node);
}
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
11a113: 84 c0 test %al,%al
11a115: 74 10 je 11a127 <rtems_rfs_scan_chain+0xd9><== ALWAYS TAKEN
printf (": not found\n");
11a117: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11a11a: 68 fc 0d 13 00 push $0x130dfc <== NOT EXECUTED
11a11f: e8 30 64 00 00 call 120554 <puts> <== NOT EXECUTED
11a124: 83 c4 10 add $0x10,%esp
return NULL;
}
11a127: 89 d8 mov %ebx,%eax
11a129: 8d 65 f4 lea -0xc(%ebp),%esp
11a12c: 5b pop %ebx
11a12d: 5e pop %esi
11a12e: 5f pop %edi
11a12f: 5d pop %ebp
11a130: c3 ret
00118c92 <rtems_rfs_search_map_for_clear_bit.constprop.1>:
return 0;
}
static int
rtems_rfs_search_map_for_clear_bit (rtems_rfs_bitmap_control* control,
118c92: 55 push %ebp
118c93: 89 e5 mov %esp,%ebp
118c95: 57 push %edi
118c96: 56 push %esi
118c97: 53 push %ebx
118c98: 83 ec 6c sub $0x6c,%esp
118c9b: 89 c3 mov %eax,%ebx
118c9d: 89 55 ac mov %edx,-0x54(%ebp)
118ca0: 89 4d a8 mov %ecx,-0x58(%ebp)
118ca3: 8b 7d 08 mov 0x8(%ebp),%edi
rtems_rfs_bitmap_element* map_bits;
int map_index;
int map_offset;
int rc;
*found = false;
118ca6: c6 01 00 movb $0x0,(%ecx)
/*
* Load the bitmap.
*/
rc = rtems_rfs_bitmap_load_map (control, &map);
118ca9: 8d 55 e4 lea -0x1c(%ebp),%edx
118cac: e8 9f ff ff ff call 118c50 <rtems_rfs_bitmap_load_map>
if (rc > 0)
118cb1: 85 c0 test %eax,%eax
118cb3: 0f 8f c7 01 00 00 jg 118e80 <rtems_rfs_search_map_for_clear_bit.constprop.1+0x1ee><== NEVER TAKEN
return rc;
/*
* Calculate the bit we are testing plus the end point we search over.
*/
test_bit = *bit;
118cb9: 8b 55 ac mov -0x54(%ebp),%edx
118cbc: 8b 02 mov (%edx),%eax
end_bit = test_bit + (window * direction);
118cbe: 89 fa mov %edi,%edx
118cc0: c1 e2 0b shl $0xb,%edx
if (end_bit < 0)
118cc3: 01 c2 add %eax,%edx
118cc5: 89 55 d0 mov %edx,-0x30(%ebp)
118cc8: 78 0e js 118cd8 <rtems_rfs_search_map_for_clear_bit.constprop.1+0x46>
end_bit = 0;
else if (end_bit >= control->size)
118cca: 8b 53 0c mov 0xc(%ebx),%edx
118ccd: 39 55 d0 cmp %edx,-0x30(%ebp)
118cd0: 72 0d jb 118cdf <rtems_rfs_search_map_for_clear_bit.constprop.1+0x4d>
end_bit = control->size - 1;
118cd2: 4a dec %edx
118cd3: 89 55 d0 mov %edx,-0x30(%ebp)
118cd6: eb 07 jmp 118cdf <rtems_rfs_search_map_for_clear_bit.constprop.1+0x4d>
*/
test_bit = *bit;
end_bit = test_bit + (window * direction);
if (end_bit < 0)
end_bit = 0;
118cd8: c7 45 d0 00 00 00 00 movl $0x0,-0x30(%ebp)
else if (end_bit >= control->size)
end_bit = control->size - 1;
map_index = rtems_rfs_bitmap_map_index (test_bit);
118cdf: 89 c6 mov %eax,%esi
118ce1: c1 fe 05 sar $0x5,%esi
118ce4: 89 75 c8 mov %esi,-0x38(%ebp)
map_offset = rtems_rfs_bitmap_map_offset (test_bit);
118ce7: 89 c6 mov %eax,%esi
118ce9: 83 e6 1f and $0x1f,%esi
search_index = rtems_rfs_bitmap_map_index (map_index);
search_offset = rtems_rfs_bitmap_map_offset (map_index);
118cec: 8b 55 c8 mov -0x38(%ebp),%edx
118cef: 83 e2 1f and $0x1f,%edx
118cf2: 89 55 d4 mov %edx,-0x2c(%ebp)
else if (end_bit >= control->size)
end_bit = control->size - 1;
map_index = rtems_rfs_bitmap_map_index (test_bit);
map_offset = rtems_rfs_bitmap_map_offset (test_bit);
search_index = rtems_rfs_bitmap_map_index (map_index);
118cf5: 89 c1 mov %eax,%ecx
118cf7: c1 f9 0a sar $0xa,%ecx
search_offset = rtems_rfs_bitmap_map_offset (map_index);
search_bits = &control->search_bits[search_index];
118cfa: 8b 53 14 mov 0x14(%ebx),%edx
118cfd: 8d 14 8a lea (%edx,%ecx,4),%edx
118d00: 89 55 c0 mov %edx,-0x40(%ebp)
map_bits = &map[map_index];
118d03: 8b 55 e4 mov -0x1c(%ebp),%edx
118d06: 8b 4d c8 mov -0x38(%ebp),%ecx
118d09: 8d 14 8a lea (%edx,%ecx,4),%edx
118d0c: 89 55 c4 mov %edx,-0x3c(%ebp)
map_offset += direction;
test_bit += direction;
}
}
map_bits += direction;
118d0f: 8d 14 bd 00 00 00 00 lea 0x0(,%edi,4),%edx
118d16: 89 55 b0 mov %edx,-0x50(%ebp)
118d19: 31 d2 xor %edx,%edx
118d1b: 85 ff test %edi,%edi
118d1d: 0f 9f c2 setg %dl
118d20: 4a dec %edx
118d21: 83 e2 1f and $0x1f,%edx
118d24: 89 55 cc mov %edx,-0x34(%ebp)
return 0;
}
static int
rtems_rfs_search_map_for_clear_bit (rtems_rfs_bitmap_control* control,
118d27: 89 fa mov %edi,%edx
118d29: c1 e2 05 shl $0x5,%edx
118d2c: 89 55 94 mov %edx,-0x6c(%ebp)
test_bit = (map_index * rtems_rfs_bitmap_element_bits ()) + map_offset;
search_offset += direction;
if (((direction < 0) && (test_bit <= end_bit))
118d2f: 89 fa mov %edi,%edx
118d31: c1 ea 1f shr $0x1f,%edx
118d34: 88 55 98 mov %dl,-0x68(%ebp)
118d37: eb 03 jmp 118d3c <rtems_rfs_search_map_for_clear_bit.constprop.1+0xaa>
*/
test_bit = *bit;
end_bit = test_bit + (window * direction);
if (end_bit < 0)
end_bit = 0;
118d39: 89 55 c8 mov %edx,-0x38(%ebp)
/*
* If any bit is clear find that bit and then search the map element. If
* all bits are set there are no map bits so move to the next search
* element.
*/
if (!rtems_rfs_bitmap_match (*search_bits, RTEMS_RFS_BITMAP_ELEMENT_SET))
118d3c: 8b 55 c0 mov -0x40(%ebp),%edx
118d3f: 8b 12 mov (%edx),%edx
118d41: 89 55 b4 mov %edx,-0x4c(%ebp)
118d44: 85 d2 test %edx,%edx
118d46: 0f 84 c1 00 00 00 je 118e0d <rtems_rfs_search_map_for_clear_bit.constprop.1+0x17b>
return 0;
}
static int
rtems_rfs_search_map_for_clear_bit (rtems_rfs_bitmap_control* control,
118d4c: 8b 55 c8 mov -0x38(%ebp),%edx
118d4f: 01 fa add %edi,%edx
118d51: c1 e2 05 shl $0x5,%edx
118d54: 03 55 cc add -0x34(%ebp),%edx
118d57: 89 55 b8 mov %edx,-0x48(%ebp)
118d5a: 8b 55 c8 mov -0x38(%ebp),%edx
118d5d: e9 98 00 00 00 jmp 118dfa <rtems_rfs_search_map_for_clear_bit.constprop.1+0x168>
*/
static bool
rtems_rfs_bitmap_test (rtems_rfs_bitmap_element target,
rtems_rfs_bitmap_bit bit)
{
return RTEMS_RFS_BITMAP_TEST_BIT (target, bit);
118d62: c7 45 bc 01 00 00 00 movl $0x1,-0x44(%ebp)
118d69: d3 65 bc shll %cl,-0x44(%ebp)
if (!rtems_rfs_bitmap_match (*search_bits, RTEMS_RFS_BITMAP_ELEMENT_SET))
{
while ((search_offset >= 0)
&& (search_offset < rtems_rfs_bitmap_element_bits ()))
{
if (!rtems_rfs_bitmap_test (*search_bits, search_offset))
118d6c: 8b 4d b4 mov -0x4c(%ebp),%ecx
118d6f: 85 4d bc test %ecx,-0x44(%ebp)
118d72: 74 5e je 118dd2 <rtems_rfs_search_map_for_clear_bit.constprop.1+0x140>
return 0;
}
static int
rtems_rfs_search_map_for_clear_bit (rtems_rfs_bitmap_control* control,
118d74: 29 c6 sub %eax,%esi
118d76: 89 75 90 mov %esi,-0x70(%ebp)
118d79: eb 4d jmp 118dc8 <rtems_rfs_search_map_for_clear_bit.constprop.1+0x136>
* found. We may find none are spare if searching up from the seed.
*/
while ((map_offset >= 0)
&& (map_offset < rtems_rfs_bitmap_element_bits ()))
{
if (!rtems_rfs_bitmap_test (*map_bits, map_offset))
118d7b: 8b 75 c4 mov -0x3c(%ebp),%esi
118d7e: 8b 36 mov (%esi),%esi
118d80: 89 75 8c mov %esi,-0x74(%ebp)
*/
static bool
rtems_rfs_bitmap_test (rtems_rfs_bitmap_element target,
rtems_rfs_bitmap_bit bit)
{
return RTEMS_RFS_BITMAP_TEST_BIT (target, bit);
118d83: be 01 00 00 00 mov $0x1,%esi
118d88: d3 e6 shl %cl,%esi
118d8a: 89 f1 mov %esi,%ecx
* found. We may find none are spare if searching up from the seed.
*/
while ((map_offset >= 0)
&& (map_offset < rtems_rfs_bitmap_element_bits ()))
{
if (!rtems_rfs_bitmap_test (*map_bits, map_offset))
118d8c: 85 75 8c test %esi,-0x74(%ebp)
118d8f: 74 30 je 118dc1 <rtems_rfs_search_map_for_clear_bit.constprop.1+0x12f>
*/
static rtems_rfs_bitmap_element
rtems_rfs_bitmap_set (rtems_rfs_bitmap_element target,
rtems_rfs_bitmap_element bits)
{
return RTEMS_RFS_BITMAP_SET_BITS (target, bits);
118d91: f7 d1 not %ecx
118d93: 23 4d 8c and -0x74(%ebp),%ecx
while ((map_offset >= 0)
&& (map_offset < rtems_rfs_bitmap_element_bits ()))
{
if (!rtems_rfs_bitmap_test (*map_bits, map_offset))
{
*map_bits = rtems_rfs_bitmap_set (*map_bits, 1 << map_offset);
118d96: 8b 55 c4 mov -0x3c(%ebp),%edx
118d99: 89 0a mov %ecx,(%edx)
if (rtems_rfs_bitmap_match(*map_bits,
118d9b: 85 c9 test %ecx,%ecx
118d9d: 75 0a jne 118da9 <rtems_rfs_search_map_for_clear_bit.constprop.1+0x117>
*/
static rtems_rfs_bitmap_element
rtems_rfs_bitmap_set (rtems_rfs_bitmap_element target,
rtems_rfs_bitmap_element bits)
{
return RTEMS_RFS_BITMAP_SET_BITS (target, bits);
118d9f: 8b 55 bc mov -0x44(%ebp),%edx
118da2: f7 d2 not %edx
118da4: 8b 75 c0 mov -0x40(%ebp),%esi
118da7: 21 16 and %edx,(%esi)
*map_bits = rtems_rfs_bitmap_set (*map_bits, 1 << map_offset);
if (rtems_rfs_bitmap_match(*map_bits,
RTEMS_RFS_BITMAP_ELEMENT_SET))
*search_bits = rtems_rfs_bitmap_set (*search_bits,
1 << search_offset);
control->free--;
118da9: ff 4b 10 decl 0x10(%ebx)
*bit = test_bit;
118dac: 8b 55 ac mov -0x54(%ebp),%edx
118daf: 89 02 mov %eax,(%edx)
*found = true;
118db1: 8b 4d a8 mov -0x58(%ebp),%ecx
118db4: c6 01 01 movb $0x1,(%ecx)
rtems_rfs_buffer_mark_dirty (control->buffer);
118db7: 8b 03 mov (%ebx),%eax
118db9: c6 00 01 movb $0x1,(%eax)
118dbc: e9 bd 00 00 00 jmp 118e7e <rtems_rfs_search_map_for_clear_bit.constprop.1+0x1ec>
return 0;
}
if (test_bit == end_bit)
118dc1: 3b 45 d0 cmp -0x30(%ebp),%eax
118dc4: 74 0c je 118dd2 <rtems_rfs_search_map_for_clear_bit.constprop.1+0x140>
break;
map_offset += direction;
test_bit += direction;
118dc6: 01 f8 add %edi,%eax
return 0;
}
static int
rtems_rfs_search_map_for_clear_bit (rtems_rfs_bitmap_control* control,
118dc8: 8b 4d 90 mov -0x70(%ebp),%ecx
118dcb: 01 c1 add %eax,%ecx
{
/*
* Find the clear bit in the map. Update the search map and map if
* found. We may find none are spare if searching up from the seed.
*/
while ((map_offset >= 0)
118dcd: 83 f9 1f cmp $0x1f,%ecx
118dd0: 76 a9 jbe 118d7b <rtems_rfs_search_map_for_clear_bit.constprop.1+0xe9><== ALWAYS TAKEN
map_offset += direction;
test_bit += direction;
}
}
map_bits += direction;
118dd2: 8b 75 b0 mov -0x50(%ebp),%esi
118dd5: 01 75 c4 add %esi,-0x3c(%ebp)
map_index += direction;
118dd8: 01 fa add %edi,%edx
map_offset = direction > 0 ? 0 : rtems_rfs_bitmap_element_bits () - 1;
test_bit = (map_index * rtems_rfs_bitmap_element_bits ()) + map_offset;
118dda: 8b 45 b8 mov -0x48(%ebp),%eax
search_offset += direction;
if (((direction < 0) && (test_bit <= end_bit))
118ddd: 3b 45 d0 cmp -0x30(%ebp),%eax
118de0: 7f 06 jg 118de8 <rtems_rfs_search_map_for_clear_bit.constprop.1+0x156>
118de2: 80 7d 98 00 cmpb $0x0,-0x68(%ebp)
118de6: 75 63 jne 118e4b <rtems_rfs_search_map_for_clear_bit.constprop.1+0x1b9>
118de8: 8b 75 94 mov -0x6c(%ebp),%esi
118deb: 01 75 b8 add %esi,-0x48(%ebp)
}
}
map_bits += direction;
map_index += direction;
map_offset = direction > 0 ? 0 : rtems_rfs_bitmap_element_bits () - 1;
118dee: 8b 75 cc mov -0x34(%ebp),%esi
test_bit = (map_index * rtems_rfs_bitmap_element_bits ()) + map_offset;
search_offset += direction;
if (((direction < 0) && (test_bit <= end_bit))
|| ((direction > 0) && (test_bit >= end_bit)))
118df1: 3b 45 d0 cmp -0x30(%ebp),%eax
118df4: 7c 04 jl 118dfa <rtems_rfs_search_map_for_clear_bit.constprop.1+0x168>
118df6: 85 ff test %edi,%edi
118df8: 7f 54 jg 118e4e <rtems_rfs_search_map_for_clear_bit.constprop.1+0x1bc>
return 0;
}
static int
rtems_rfs_search_map_for_clear_bit (rtems_rfs_bitmap_control* control,
118dfa: 8b 4d d4 mov -0x2c(%ebp),%ecx
118dfd: 2b 4d c8 sub -0x38(%ebp),%ecx
118e00: 01 d1 add %edx,%ecx
* all bits are set there are no map bits so move to the next search
* element.
*/
if (!rtems_rfs_bitmap_match (*search_bits, RTEMS_RFS_BITMAP_ELEMENT_SET))
{
while ((search_offset >= 0)
118e02: 83 f9 1f cmp $0x1f,%ecx
118e05: 0f 86 57 ff ff ff jbe 118d62 <rtems_rfs_search_map_for_clear_bit.constprop.1+0xd0>
118e0b: eb 41 jmp 118e4e <rtems_rfs_search_map_for_clear_bit.constprop.1+0x1bc>
*
* Align test_bit either up or down depending on the direction to next 32
* bit boundary.
*/
rtems_rfs_bitmap_bit bits_skipped;
test_bit &= ~((1 << RTEMS_RFS_ELEMENT_BITS_POWER_2) - 1);
118e0d: 83 e0 e0 and $0xffffffe0,%eax
if (direction > 0)
118e10: 85 ff test %edi,%edi
118e12: 7e 13 jle 118e27 <rtems_rfs_search_map_for_clear_bit.constprop.1+0x195>
{
bits_skipped = rtems_rfs_bitmap_element_bits () - search_offset;
118e14: ba 20 00 00 00 mov $0x20,%edx
118e19: 2b 55 d4 sub -0x2c(%ebp),%edx
test_bit += bits_skipped * rtems_rfs_bitmap_element_bits ();
118e1c: 89 d1 mov %edx,%ecx
118e1e: c1 e1 05 shl $0x5,%ecx
118e21: 01 c8 add %ecx,%eax
map_offset = 0;
118e23: 31 f6 xor %esi,%esi
118e25: eb 13 jmp 118e3a <rtems_rfs_search_map_for_clear_bit.constprop.1+0x1a8>
}
else
{
bits_skipped = search_offset + 1;
118e27: 8b 55 d4 mov -0x2c(%ebp),%edx
118e2a: 42 inc %edx
/*
* Need to remove 1 for the rounding up. The above rounds down and
* adds 1. Remember the logic is for subtraction.
*/
test_bit -= ((bits_skipped - 1) * rtems_rfs_bitmap_element_bits ()) + 1;
118e2b: 8b 4d d4 mov -0x2c(%ebp),%ecx
118e2e: c1 e1 05 shl $0x5,%ecx
118e31: f7 d1 not %ecx
118e33: 01 c8 add %ecx,%eax
map_offset = rtems_rfs_bitmap_element_bits () - 1;
118e35: be 1f 00 00 00 mov $0x1f,%esi
}
map_bits += direction * bits_skipped;
118e3a: 0f af d7 imul %edi,%edx
118e3d: 8b 4d c4 mov -0x3c(%ebp),%ecx
118e40: 8d 0c 91 lea (%ecx,%edx,4),%ecx
118e43: 89 4d c4 mov %ecx,-0x3c(%ebp)
map_index += direction * bits_skipped;
118e46: 03 55 c8 add -0x38(%ebp),%edx
118e49: eb 03 jmp 118e4e <rtems_rfs_search_map_for_clear_bit.constprop.1+0x1bc>
}
}
map_bits += direction;
map_index += direction;
map_offset = direction > 0 ? 0 : rtems_rfs_bitmap_element_bits () - 1;
118e4b: 8b 75 cc mov -0x34(%ebp),%esi
}
map_bits += direction * bits_skipped;
map_index += direction * bits_skipped;
}
search_bits += direction;
118e4e: 8b 4d b0 mov -0x50(%ebp),%ecx
118e51: 01 4d c0 add %ecx,-0x40(%ebp)
search_offset = direction > 0 ? 0 : rtems_rfs_bitmap_element_bits () - 1;
118e54: 31 c9 xor %ecx,%ecx
118e56: 85 ff test %edi,%edi
118e58: 0f 9f c1 setg %cl
118e5b: 49 dec %ecx
118e5c: 83 e1 1f and $0x1f,%ecx
118e5f: 89 4d d4 mov %ecx,-0x2c(%ebp)
}
while (((direction < 0) && (test_bit >= end_bit))
|| ((direction > 0) && (test_bit <= end_bit)));
118e62: 3b 45 d0 cmp -0x30(%ebp),%eax
118e65: 7c 0a jl 118e71 <rtems_rfs_search_map_for_clear_bit.constprop.1+0x1df>
118e67: 80 7d 98 00 cmpb $0x0,-0x68(%ebp)
118e6b: 0f 85 c8 fe ff ff jne 118d39 <rtems_rfs_search_map_for_clear_bit.constprop.1+0xa7>
118e71: 3b 45 d0 cmp -0x30(%ebp),%eax
118e74: 7f 08 jg 118e7e <rtems_rfs_search_map_for_clear_bit.constprop.1+0x1ec>
118e76: 85 ff test %edi,%edi
118e78: 0f 8f bb fe ff ff jg 118d39 <rtems_rfs_search_map_for_clear_bit.constprop.1+0xa7>
return 0;
118e7e: 31 c0 xor %eax,%eax
}
118e80: 83 c4 6c add $0x6c,%esp
118e83: 5b pop %ebx
118e84: 5e pop %esi
118e85: 5f pop %edi
118e86: 5d pop %ebp
118e87: c3 ret
0011d272 <rtems_rfs_symlink>:
const char* link,
int link_length,
uid_t uid,
gid_t gid,
rtems_rfs_ino parent)
{
11d272: 55 push %ebp
11d273: 89 e5 mov %esp,%ebp
11d275: 57 push %edi
11d276: 56 push %esi
11d277: 53 push %ebx
11d278: 81 ec b4 00 00 00 sub $0xb4,%esp
11d27e: 8b 5d 08 mov 0x8(%ebp),%ebx
11d281: 8b 75 14 mov 0x14(%ebp),%esi
11d284: 8b 55 1c mov 0x1c(%ebp),%edx
11d287: 66 89 95 56 ff ff ff mov %dx,-0xaa(%ebp)
11d28e: 8b 55 20 mov 0x20(%ebp),%edx
11d291: 66 89 95 54 ff ff ff mov %dx,-0xac(%ebp)
rtems_rfs_inode_handle inode;
rtems_rfs_ino ino;
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_SYMLINK))
11d298: 6a 02 push $0x2
11d29a: 6a 00 push $0x0
11d29c: e8 fb 65 ff ff call 11389c <rtems_rfs_trace>
11d2a1: 83 c4 10 add $0x10,%esp
11d2a4: 84 c0 test %al,%al
11d2a6: 75 13 jne 11d2bb <rtems_rfs_symlink+0x49><== NEVER TAKEN
for (c = 0; c < link_length; c++)
printf ("%c", link[c]);
}
if (link_length >= rtems_rfs_fs_block_size (fs))
return ENAMETOOLONG;
11d2a8: bf 5b 00 00 00 mov $0x5b,%edi
printf (" link:");
for (c = 0; c < link_length; c++)
printf ("%c", link[c]);
}
if (link_length >= rtems_rfs_fs_block_size (fs))
11d2ad: 8b 45 18 mov 0x18(%ebp),%eax
11d2b0: 3b 43 08 cmp 0x8(%ebx),%eax
11d2b3: 0f 83 59 02 00 00 jae 11d512 <rtems_rfs_symlink+0x2a0><== NEVER TAKEN
11d2b9: eb 5b jmp 11d316 <rtems_rfs_symlink+0xa4>
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_SYMLINK))
{
int c;
printf ("rtems-rfs: symlink: parent:%" PRIu32 " name:", parent);
11d2bb: 50 push %eax <== NOT EXECUTED
11d2bc: 50 push %eax <== NOT EXECUTED
11d2bd: ff 75 24 pushl 0x24(%ebp) <== NOT EXECUTED
11d2c0: 68 28 21 13 00 push $0x132128 <== NOT EXECUTED
11d2c5: e8 72 30 00 00 call 12033c <printf> <== NOT EXECUTED
for (c = 0; c < length; c++)
11d2ca: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11d2cd: 31 ff xor %edi,%edi <== NOT EXECUTED
11d2cf: eb 14 jmp 11d2e5 <rtems_rfs_symlink+0x73><== NOT EXECUTED
printf ("%c", name[c]);
11d2d1: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11d2d4: 8b 55 0c mov 0xc(%ebp),%edx <== NOT EXECUTED
11d2d7: 0f be 04 3a movsbl (%edx,%edi,1),%eax <== NOT EXECUTED
11d2db: 50 push %eax <== NOT EXECUTED
11d2dc: e8 c7 31 00 00 call 1204a8 <putchar> <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_SYMLINK))
{
int c;
printf ("rtems-rfs: symlink: parent:%" PRIu32 " name:", parent);
for (c = 0; c < length; c++)
11d2e1: 47 inc %edi <== NOT EXECUTED
11d2e2: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11d2e5: 3b 7d 10 cmp 0x10(%ebp),%edi <== NOT EXECUTED
11d2e8: 7c e7 jl 11d2d1 <rtems_rfs_symlink+0x5f><== NOT EXECUTED
printf ("%c", name[c]);
printf (" link:");
11d2ea: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11d2ed: 68 4d 21 13 00 push $0x13214d <== NOT EXECUTED
11d2f2: e8 45 30 00 00 call 12033c <printf> <== NOT EXECUTED
for (c = 0; c < link_length; c++)
11d2f7: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11d2fa: 31 ff xor %edi,%edi <== NOT EXECUTED
11d2fc: eb 11 jmp 11d30f <rtems_rfs_symlink+0x9d><== NOT EXECUTED
printf ("%c", link[c]);
11d2fe: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11d301: 0f be 04 3e movsbl (%esi,%edi,1),%eax <== NOT EXECUTED
11d305: 50 push %eax <== NOT EXECUTED
11d306: e8 9d 31 00 00 call 1204a8 <putchar> <== NOT EXECUTED
int c;
printf ("rtems-rfs: symlink: parent:%" PRIu32 " name:", parent);
for (c = 0; c < length; c++)
printf ("%c", name[c]);
printf (" link:");
for (c = 0; c < link_length; c++)
11d30b: 47 inc %edi <== NOT EXECUTED
11d30c: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11d30f: 3b 7d 18 cmp 0x18(%ebp),%edi <== NOT EXECUTED
11d312: 7c ea jl 11d2fe <rtems_rfs_symlink+0x8c><== NOT EXECUTED
11d314: eb 92 jmp 11d2a8 <rtems_rfs_symlink+0x36><== NOT EXECUTED
}
if (link_length >= rtems_rfs_fs_block_size (fs))
return ENAMETOOLONG;
rc = rtems_rfs_inode_create (fs, parent, name, strlen (name),
11d316: 31 c0 xor %eax,%eax
11d318: 83 c9 ff or $0xffffffff,%ecx
11d31b: 8b 7d 0c mov 0xc(%ebp),%edi
11d31e: f2 ae repnz scas %es:(%edi),%al
11d320: f7 d1 not %ecx
11d322: 49 dec %ecx
11d323: 83 ec 0c sub $0xc,%esp
11d326: 8d 85 5c ff ff ff lea -0xa4(%ebp),%eax
11d32c: 50 push %eax
11d32d: 0f b7 85 54 ff ff ff movzwl -0xac(%ebp),%eax
11d334: 50 push %eax
11d335: 0f b7 85 56 ff ff ff movzwl -0xaa(%ebp),%eax
11d33c: 50 push %eax
11d33d: 6a 01 push $0x1
11d33f: 68 ff a1 00 00 push $0xa1ff
11d344: 51 push %ecx
11d345: ff 75 0c pushl 0xc(%ebp)
11d348: ff 75 24 pushl 0x24(%ebp)
11d34b: 53 push %ebx
11d34c: e8 5e 53 ff ff call 1126af <rtems_rfs_inode_create>
11d351: 89 c7 mov %eax,%edi
RTEMS_RFS_S_SYMLINK,
1, uid, gid, &ino);
if (rc > 0)
11d353: 83 c4 30 add $0x30,%esp
11d356: 85 c0 test %eax,%eax
11d358: 0f 8f b4 01 00 00 jg 11d512 <rtems_rfs_symlink+0x2a0><== NEVER TAKEN
return rc;
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
11d35e: 6a 01 push $0x1
11d360: 8d 85 70 ff ff ff lea -0x90(%ebp),%eax
11d366: 50 push %eax
11d367: ff b5 5c ff ff ff pushl -0xa4(%ebp)
11d36d: 53 push %ebx
11d36e: e8 b7 4e ff ff call 11222a <rtems_rfs_inode_open>
11d373: 89 c7 mov %eax,%edi
if (rc > 0)
11d375: 83 c4 10 add $0x10,%esp
11d378: 85 c0 test %eax,%eax
11d37a: 0f 8f 92 01 00 00 jg 11d512 <rtems_rfs_symlink+0x2a0><== NEVER TAKEN
/*
* If the link length is less than the length of data union in the inode
* place the link into the data area else allocate a block and write the link
* to that.
*/
if (link_length < RTEMS_RFS_INODE_DATA_NAME_SIZE)
11d380: 83 7d 18 13 cmpl $0x13,0x18(%ebp)
11d384: 77 51 ja 11d3d7 <rtems_rfs_symlink+0x165><== NEVER TAKEN
{
memset (inode.node->data.name, 0, RTEMS_RFS_INODE_DATA_NAME_SIZE);
11d386: 8b 95 7c ff ff ff mov -0x84(%ebp),%edx
11d38c: 83 c2 1c add $0x1c,%edx
11d38f: b9 05 00 00 00 mov $0x5,%ecx
11d394: 31 c0 xor %eax,%eax
11d396: 89 d7 mov %edx,%edi
11d398: f3 ab rep stos %eax,%es:(%edi)
memcpy (inode.node->data.name, link, link_length);
11d39a: 8b 85 7c ff ff ff mov -0x84(%ebp),%eax
11d3a0: 83 c0 1c add $0x1c,%eax
11d3a3: 89 c7 mov %eax,%edi
11d3a5: 8b 4d 18 mov 0x18(%ebp),%ecx
11d3a8: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
* @param block_count The block count.
*/
static inline void
rtems_rfs_inode_set_block_count (rtems_rfs_inode_handle* handle, uint32_t block_count)
{
rtems_rfs_write_u32 (&handle->node->block_count, block_count);
11d3aa: 8b 85 7c ff ff ff mov -0x84(%ebp),%eax
11d3b0: c6 40 0c 00 movb $0x0,0xc(%eax)
11d3b4: 8b 85 7c ff ff ff mov -0x84(%ebp),%eax
11d3ba: c6 40 0d 00 movb $0x0,0xd(%eax)
11d3be: 8b 85 7c ff ff ff mov -0x84(%ebp),%eax
11d3c4: c6 40 0e 00 movb $0x0,0xe(%eax)
11d3c8: 8b 85 7c ff ff ff mov -0x84(%ebp),%eax
11d3ce: c6 40 0f 00 movb $0x0,0xf(%eax)
11d3d2: e9 07 01 00 00 jmp 11d4de <rtems_rfs_symlink+0x26c>
rtems_rfs_block_map map;
rtems_rfs_block_no block;
rtems_rfs_buffer_handle buffer;
uint8_t* data;
rc = rtems_rfs_block_map_open (fs, &inode, &map);
11d3d7: 50 push %eax <== NOT EXECUTED
11d3d8: 8d 55 98 lea -0x68(%ebp),%edx <== NOT EXECUTED
11d3db: 52 push %edx <== NOT EXECUTED
11d3dc: 8d 85 70 ff ff ff lea -0x90(%ebp),%eax <== NOT EXECUTED
11d3e2: 50 push %eax <== NOT EXECUTED
11d3e3: 53 push %ebx <== NOT EXECUTED
11d3e4: e8 b9 c1 ff ff call 1195a2 <rtems_rfs_block_map_open><== NOT EXECUTED
11d3e9: 89 c7 mov %eax,%edi <== NOT EXECUTED
if (rc > 0)
11d3eb: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11d3ee: 85 c0 test %eax,%eax <== NOT EXECUTED
11d3f0: 7e 04 jle 11d3f6 <rtems_rfs_symlink+0x184><== NOT EXECUTED
{
rtems_rfs_inode_close (fs, &inode);
11d3f2: 50 push %eax <== NOT EXECUTED
11d3f3: 50 push %eax <== NOT EXECUTED
11d3f4: eb 76 jmp 11d46c <rtems_rfs_symlink+0x1fa><== NOT EXECUTED
return rc;
}
rc = rtems_rfs_block_map_grow (fs, &map, 1, &block);
11d3f6: 8d 85 60 ff ff ff lea -0xa0(%ebp),%eax <== NOT EXECUTED
11d3fc: 50 push %eax <== NOT EXECUTED
11d3fd: 6a 01 push $0x1 <== NOT EXECUTED
11d3ff: 8d 45 98 lea -0x68(%ebp),%eax <== NOT EXECUTED
11d402: 50 push %eax <== NOT EXECUTED
11d403: 53 push %ebx <== NOT EXECUTED
11d404: e8 95 c6 ff ff call 119a9e <rtems_rfs_block_map_grow><== NOT EXECUTED
11d409: 89 c7 mov %eax,%edi <== NOT EXECUTED
if (rc > 0)
11d40b: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11d40e: 85 c0 test %eax,%eax <== NOT EXECUTED
11d410: 7e 13 jle 11d425 <rtems_rfs_symlink+0x1b3><== NOT EXECUTED
{
rtems_rfs_block_map_close (fs, &map);
11d412: 51 push %ecx <== NOT EXECUTED
11d413: 51 push %ecx <== NOT EXECUTED
11d414: 8d 55 98 lea -0x68(%ebp),%edx <== NOT EXECUTED
11d417: 52 push %edx <== NOT EXECUTED
11d418: 53 push %ebx <== NOT EXECUTED
11d419: e8 2b c3 ff ff call 119749 <rtems_rfs_block_map_close><== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
11d41e: 5e pop %esi <== NOT EXECUTED
11d41f: 58 pop %eax <== NOT EXECUTED
11d420: e9 aa 00 00 00 jmp 11d4cf <rtems_rfs_symlink+0x25d><== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
11d425: c6 85 64 ff ff ff 00 movb $0x0,-0x9c(%ebp) <== NOT EXECUTED
handle->bnum = 0;
11d42c: c7 85 68 ff ff ff 00 movl $0x0,-0x98(%ebp) <== NOT EXECUTED
11d433: 00 00 00
handle->buffer = NULL;
11d436: c7 85 6c ff ff ff 00 movl $0x0,-0x94(%ebp) <== NOT EXECUTED
11d43d: 00 00 00
rtems_rfs_block_map_close (fs, &map);
rtems_rfs_inode_close (fs, &inode);
return rc;
}
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, false);
11d440: 6a 00 push $0x0 <== NOT EXECUTED
11d442: ff b5 60 ff ff ff pushl -0xa0(%ebp) <== NOT EXECUTED
11d448: 8d 95 64 ff ff ff lea -0x9c(%ebp),%edx <== NOT EXECUTED
11d44e: 52 push %edx <== NOT EXECUTED
11d44f: 53 push %ebx <== NOT EXECUTED
11d450: e8 55 ce ff ff call 11a2aa <rtems_rfs_buffer_handle_request><== NOT EXECUTED
11d455: 89 c7 mov %eax,%edi <== NOT EXECUTED
if (rc > 0)
11d457: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11d45a: 85 c0 test %eax,%eax <== NOT EXECUTED
11d45c: 7e 17 jle 11d475 <rtems_rfs_symlink+0x203><== NOT EXECUTED
{
rtems_rfs_block_map_close (fs, &map);
11d45e: 50 push %eax <== NOT EXECUTED
11d45f: 50 push %eax <== NOT EXECUTED
11d460: 8d 45 98 lea -0x68(%ebp),%eax <== NOT EXECUTED
11d463: 50 push %eax <== NOT EXECUTED
11d464: 53 push %ebx <== NOT EXECUTED
11d465: e8 df c2 ff ff call 119749 <rtems_rfs_block_map_close><== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
11d46a: 58 pop %eax <== NOT EXECUTED
11d46b: 5a pop %edx <== NOT EXECUTED
11d46c: 8d 95 70 ff ff ff lea -0x90(%ebp),%edx <== NOT EXECUTED
11d472: 52 push %edx <== NOT EXECUTED
11d473: eb 61 jmp 11d4d6 <rtems_rfs_symlink+0x264><== NOT EXECUTED
return rc;
}
data = rtems_rfs_buffer_data (&buffer);
11d475: 8b 85 6c ff ff ff mov -0x94(%ebp),%eax <== NOT EXECUTED
11d47b: 8b 50 1c mov 0x1c(%eax),%edx <== NOT EXECUTED
memset (data, 0xff, rtems_rfs_fs_block_size (fs));
11d47e: 8b 4b 08 mov 0x8(%ebx),%ecx <== NOT EXECUTED
11d481: b0 ff mov $0xff,%al <== NOT EXECUTED
11d483: 89 d7 mov %edx,%edi <== NOT EXECUTED
11d485: f3 aa rep stos %al,%es:(%edi) <== NOT EXECUTED
memcpy (data, link, link_length);
11d487: 89 d7 mov %edx,%edi <== NOT EXECUTED
11d489: 8b 4d 18 mov 0x18(%ebp),%ecx <== NOT EXECUTED
11d48c: f3 a4 rep movsb %ds:(%esi),%es:(%edi) <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
11d48e: 52 push %edx <== NOT EXECUTED
11d48f: 52 push %edx <== NOT EXECUTED
11d490: 8d 85 64 ff ff ff lea -0x9c(%ebp),%eax <== NOT EXECUTED
11d496: 50 push %eax <== NOT EXECUTED
11d497: 53 push %ebx <== NOT EXECUTED
11d498: e8 94 cc ff ff call 11a131 <rtems_rfs_buffer_handle_release><== NOT EXECUTED
handle->dirty = false;
11d49d: c6 85 64 ff ff ff 00 movb $0x0,-0x9c(%ebp) <== NOT EXECUTED
handle->bnum = 0;
11d4a4: c7 85 68 ff ff ff 00 movl $0x0,-0x98(%ebp) <== NOT EXECUTED
11d4ab: 00 00 00
handle->buffer = NULL;
11d4ae: c7 85 6c ff ff ff 00 movl $0x0,-0x94(%ebp) <== NOT EXECUTED
11d4b5: 00 00 00
rtems_rfs_block_map_close (fs, &map);
rtems_rfs_inode_close (fs, &inode);
return rc;
}
rc = rtems_rfs_block_map_close (fs, &map);
11d4b8: 59 pop %ecx <== NOT EXECUTED
11d4b9: 5e pop %esi <== NOT EXECUTED
11d4ba: 8d 55 98 lea -0x68(%ebp),%edx <== NOT EXECUTED
11d4bd: 52 push %edx <== NOT EXECUTED
11d4be: 53 push %ebx <== NOT EXECUTED
11d4bf: e8 85 c2 ff ff call 119749 <rtems_rfs_block_map_close><== NOT EXECUTED
11d4c4: 89 c7 mov %eax,%edi <== NOT EXECUTED
if (rc > 0)
11d4c6: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11d4c9: 85 c0 test %eax,%eax <== NOT EXECUTED
11d4cb: 7e 11 jle 11d4de <rtems_rfs_symlink+0x26c><== NOT EXECUTED
{
rtems_rfs_inode_close (fs, &inode);
11d4cd: 50 push %eax <== NOT EXECUTED
11d4ce: 50 push %eax <== NOT EXECUTED
11d4cf: 8d 85 70 ff ff ff lea -0x90(%ebp),%eax <== NOT EXECUTED
11d4d5: 50 push %eax <== NOT EXECUTED
11d4d6: 53 push %ebx <== NOT EXECUTED
11d4d7: e8 cb 4e ff ff call 1123a7 <rtems_rfs_inode_close> <== NOT EXECUTED
11d4dc: eb 31 jmp 11d50f <rtems_rfs_symlink+0x29d><== NOT EXECUTED
return rc;
}
}
rtems_rfs_inode_set_block_offset (&inode, link_length);
11d4de: 0f b7 45 18 movzwl 0x18(%ebp),%eax
*/
static inline void
rtems_rfs_inode_set_block_offset (rtems_rfs_inode_handle* handle,
uint16_t block_offset)
{
rtems_rfs_write_u16 (&handle->node->block_offset, block_offset);
11d4e2: 89 c1 mov %eax,%ecx
11d4e4: 66 c1 e9 08 shr $0x8,%cx
11d4e8: 8b 95 7c ff ff ff mov -0x84(%ebp),%edx
11d4ee: 88 4a 0a mov %cl,0xa(%edx)
11d4f1: 8b 95 7c ff ff ff mov -0x84(%ebp),%edx
11d4f7: 88 42 0b mov %al,0xb(%edx)
rtems_rfs_buffer_mark_dirty (&handle->buffer);
11d4fa: c6 45 80 01 movb $0x1,-0x80(%ebp)
rc = rtems_rfs_inode_close (fs, &inode);
11d4fe: 50 push %eax
11d4ff: 50 push %eax
11d500: 8d 85 70 ff ff ff lea -0x90(%ebp),%eax
11d506: 50 push %eax
11d507: 53 push %ebx
11d508: e8 9a 4e ff ff call 1123a7 <rtems_rfs_inode_close>
11d50d: 89 c7 mov %eax,%edi
11d50f: 83 c4 10 add $0x10,%esp
return rc;
}
11d512: 89 f8 mov %edi,%eax
11d514: 8d 65 f4 lea -0xc(%ebp),%esp
11d517: 5b pop %ebx
11d518: 5e pop %esi
11d519: 5f pop %edi
11d51a: 5d pop %ebp
11d51b: c3 ret
0011d51c <rtems_rfs_symlink_read>:
rtems_rfs_symlink_read (rtems_rfs_file_system* fs,
rtems_rfs_ino link,
char* path,
size_t size,
size_t* length)
{
11d51c: 55 push %ebp
11d51d: 89 e5 mov %esp,%ebp
11d51f: 57 push %edi
11d520: 56 push %esi
11d521: 53 push %ebx
11d522: 81 ec b4 00 00 00 sub $0xb4,%esp
11d528: 8b 5d 08 mov 0x8(%ebp),%ebx
11d52b: 8b 75 0c mov 0xc(%ebp),%esi
rtems_rfs_inode_handle inode;
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_SYMLINK_READ))
11d52e: 6a 04 push $0x4
11d530: 6a 00 push $0x0
11d532: e8 65 63 ff ff call 11389c <rtems_rfs_trace>
11d537: 83 c4 10 add $0x10,%esp
11d53a: 84 c0 test %al,%al
11d53c: 74 10 je 11d54e <rtems_rfs_symlink_read+0x32><== ALWAYS TAKEN
printf ("rtems-rfs: symlink-read: link:%" PRIu32 "\n", link);
11d53e: 57 push %edi <== NOT EXECUTED
11d53f: 57 push %edi <== NOT EXECUTED
11d540: 56 push %esi <== NOT EXECUTED
11d541: 68 54 21 13 00 push $0x132154 <== NOT EXECUTED
11d546: e8 f1 2d 00 00 call 12033c <printf> <== NOT EXECUTED
11d54b: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rc = rtems_rfs_inode_open (fs, link, &inode, true);
11d54e: 6a 01 push $0x1
11d550: 8d bd 70 ff ff ff lea -0x90(%ebp),%edi
11d556: 57 push %edi
11d557: 56 push %esi
11d558: 53 push %ebx
11d559: e8 cc 4c ff ff call 11222a <rtems_rfs_inode_open>
11d55e: 89 c6 mov %eax,%esi
if (rc)
11d560: 83 c4 10 add $0x10,%esp
11d563: 85 c0 test %eax,%eax
11d565: 0f 85 81 01 00 00 jne 11d6ec <rtems_rfs_symlink_read+0x1d0><== NEVER TAKEN
return rc;
if (!RTEMS_RFS_S_ISLNK (rtems_rfs_inode_get_mode (&inode)))
11d56b: 8b b5 7c ff ff ff mov -0x84(%ebp),%esi
* @return uint16_t The mode.
*/
static inline uint16_t
rtems_rfs_inode_get_mode (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u16 (&handle->node->mode);
11d571: 0f b6 46 02 movzbl 0x2(%esi),%eax
11d575: c1 e0 08 shl $0x8,%eax
11d578: 66 25 00 f0 and $0xf000,%ax
11d57c: 66 3d 00 a0 cmp $0xa000,%ax
11d580: 74 16 je 11d598 <rtems_rfs_symlink_read+0x7c><== ALWAYS TAKEN
{
rtems_rfs_inode_close (fs, &inode);
11d582: 56 push %esi <== NOT EXECUTED
11d583: 56 push %esi <== NOT EXECUTED
11d584: 57 push %edi <== NOT EXECUTED
11d585: 53 push %ebx <== NOT EXECUTED
11d586: e8 1c 4e ff ff call 1123a7 <rtems_rfs_inode_close> <== NOT EXECUTED
11d58b: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
return EINVAL;
11d58e: be 16 00 00 00 mov $0x16,%esi <== NOT EXECUTED
11d593: e9 54 01 00 00 jmp 11d6ec <rtems_rfs_symlink_read+0x1d0><== NOT EXECUTED
* @return uint32_t The block offset.
*/
static inline uint16_t
rtems_rfs_inode_get_block_offset (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u16 (&handle->node->block_offset);
11d598: 0f b6 46 0a movzbl 0xa(%esi),%eax
11d59c: c1 e0 08 shl $0x8,%eax
11d59f: 0f b6 4e 0b movzbl 0xb(%esi),%ecx
11d5a3: 09 c1 or %eax,%ecx
}
*length = rtems_rfs_inode_get_block_offset (&inode);
11d5a5: 0f b7 c9 movzwl %cx,%ecx
11d5a8: 3b 4d 14 cmp 0x14(%ebp),%ecx
11d5ab: 76 03 jbe 11d5b0 <rtems_rfs_symlink_read+0x94>
11d5ad: 8b 4d 14 mov 0x14(%ebp),%ecx
11d5b0: 8b 45 18 mov 0x18(%ebp),%eax
11d5b3: 89 08 mov %ecx,(%eax)
* @return uint32_t The block count.
*/
static inline uint32_t
rtems_rfs_inode_get_block_count (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->block_count);
11d5b5: 0f b6 46 0c movzbl 0xc(%esi),%eax
11d5b9: c1 e0 18 shl $0x18,%eax
11d5bc: 0f b6 56 0d movzbl 0xd(%esi),%edx
11d5c0: c1 e2 10 shl $0x10,%edx
11d5c3: 09 d0 or %edx,%eax
11d5c5: 0f b6 56 0f movzbl 0xf(%esi),%edx
11d5c9: 09 d0 or %edx,%eax
11d5cb: 0f b6 56 0e movzbl 0xe(%esi),%edx
11d5cf: c1 e2 08 shl $0x8,%edx
if (size < *length)
{
*length = size;
}
if (rtems_rfs_inode_get_block_count (&inode) == 0)
11d5d2: 09 d0 or %edx,%eax
11d5d4: 75 0d jne 11d5e3 <rtems_rfs_symlink_read+0xc7><== NEVER TAKEN
{
memcpy (path, inode.node->data.name, *length);
11d5d6: 83 c6 1c add $0x1c,%esi
11d5d9: 8b 7d 10 mov 0x10(%ebp),%edi
11d5dc: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
11d5de: e9 f5 00 00 00 jmp 11d6d8 <rtems_rfs_symlink_read+0x1bc>
rtems_rfs_block_map map;
rtems_rfs_block_no block;
rtems_rfs_buffer_handle buffer;
char* data;
rc = rtems_rfs_block_map_open (fs, &inode, &map);
11d5e3: 51 push %ecx <== NOT EXECUTED
11d5e4: 8d 45 98 lea -0x68(%ebp),%eax <== NOT EXECUTED
11d5e7: 50 push %eax <== NOT EXECUTED
11d5e8: 8d 85 70 ff ff ff lea -0x90(%ebp),%eax <== NOT EXECUTED
11d5ee: 50 push %eax <== NOT EXECUTED
11d5ef: 53 push %ebx <== NOT EXECUTED
11d5f0: e8 ad bf ff ff call 1195a2 <rtems_rfs_block_map_open><== NOT EXECUTED
11d5f5: 89 c6 mov %eax,%esi <== NOT EXECUTED
if (rc > 0)
11d5f7: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11d5fa: 85 c0 test %eax,%eax <== NOT EXECUTED
11d5fc: 7e 05 jle 11d603 <rtems_rfs_symlink_read+0xe7><== NOT EXECUTED
11d5fe: e9 c4 00 00 00 jmp 11d6c7 <rtems_rfs_symlink_read+0x1ab><== NOT EXECUTED
{
rtems_rfs_inode_close (fs, &inode);
return rc;
}
rc = rtems_rfs_block_map_seek (fs, &map, 0, &block);
11d603: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11d606: 8d 85 60 ff ff ff lea -0xa0(%ebp),%eax <== NOT EXECUTED
11d60c: 50 push %eax <== NOT EXECUTED
11d60d: 6a 00 push $0x0 <== NOT EXECUTED
11d60f: 6a 00 push $0x0 <== NOT EXECUTED
11d611: 8d 45 98 lea -0x68(%ebp),%eax <== NOT EXECUTED
11d614: 50 push %eax <== NOT EXECUTED
11d615: 53 push %ebx <== NOT EXECUTED
11d616: e8 e9 c3 ff ff call 119a04 <rtems_rfs_block_map_seek><== NOT EXECUTED
11d61b: 89 c6 mov %eax,%esi <== NOT EXECUTED
if (rc > 0)
11d61d: 83 c4 20 add $0x20,%esp <== NOT EXECUTED
11d620: 85 c0 test %eax,%eax <== NOT EXECUTED
11d622: 7e 02 jle 11d626 <rtems_rfs_symlink_read+0x10a><== NOT EXECUTED
11d624: eb 45 jmp 11d66b <rtems_rfs_symlink_read+0x14f><== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
11d626: c6 85 64 ff ff ff 00 movb $0x0,-0x9c(%ebp) <== NOT EXECUTED
handle->bnum = 0;
11d62d: c7 85 68 ff ff ff 00 movl $0x0,-0x98(%ebp) <== NOT EXECUTED
11d634: 00 00 00
handle->buffer = NULL;
11d637: c7 85 6c ff ff ff 00 movl $0x0,-0x94(%ebp) <== NOT EXECUTED
11d63e: 00 00 00
rtems_rfs_block_map_close (fs, &map);
rtems_rfs_inode_close (fs, &inode);
return rc;
}
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, false);
11d641: 6a 00 push $0x0 <== NOT EXECUTED
11d643: ff b5 60 ff ff ff pushl -0xa0(%ebp) <== NOT EXECUTED
11d649: 8d 95 64 ff ff ff lea -0x9c(%ebp),%edx <== NOT EXECUTED
11d64f: 52 push %edx <== NOT EXECUTED
11d650: 53 push %ebx <== NOT EXECUTED
11d651: 89 95 54 ff ff ff mov %edx,-0xac(%ebp) <== NOT EXECUTED
11d657: e8 4e cc ff ff call 11a2aa <rtems_rfs_buffer_handle_request><== NOT EXECUTED
11d65c: 89 c6 mov %eax,%esi <== NOT EXECUTED
if (rc > 0)
11d65e: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11d661: 85 c0 test %eax,%eax <== NOT EXECUTED
11d663: 8b 95 54 ff ff ff mov -0xac(%ebp),%edx <== NOT EXECUTED
11d669: 7e 10 jle 11d67b <rtems_rfs_symlink_read+0x15f><== NOT EXECUTED
{
rtems_rfs_block_map_close (fs, &map);
11d66b: 50 push %eax <== NOT EXECUTED
11d66c: 50 push %eax <== NOT EXECUTED
11d66d: 8d 45 98 lea -0x68(%ebp),%eax <== NOT EXECUTED
11d670: 50 push %eax <== NOT EXECUTED
11d671: 53 push %ebx <== NOT EXECUTED
11d672: e8 d2 c0 ff ff call 119749 <rtems_rfs_block_map_close><== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
11d677: 58 pop %eax <== NOT EXECUTED
11d678: 5a pop %edx <== NOT EXECUTED
11d679: eb 4e jmp 11d6c9 <rtems_rfs_symlink_read+0x1ad><== NOT EXECUTED
return rc;
}
data = rtems_rfs_buffer_data (&buffer);
11d67b: 8b 85 6c ff ff ff mov -0x94(%ebp),%eax <== NOT EXECUTED
memcpy (path, data, *length);
11d681: 8b 70 1c mov 0x1c(%eax),%esi <== NOT EXECUTED
11d684: 8b 45 18 mov 0x18(%ebp),%eax <== NOT EXECUTED
11d687: 8b 08 mov (%eax),%ecx <== NOT EXECUTED
11d689: 8b 7d 10 mov 0x10(%ebp),%edi <== NOT EXECUTED
11d68c: f3 a4 rep movsb %ds:(%esi),%es:(%edi) <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
11d68e: 51 push %ecx <== NOT EXECUTED
11d68f: 51 push %ecx <== NOT EXECUTED
11d690: 52 push %edx <== NOT EXECUTED
11d691: 53 push %ebx <== NOT EXECUTED
11d692: e8 9a ca ff ff call 11a131 <rtems_rfs_buffer_handle_release><== NOT EXECUTED
handle->dirty = false;
11d697: c6 85 64 ff ff ff 00 movb $0x0,-0x9c(%ebp) <== NOT EXECUTED
handle->bnum = 0;
11d69e: c7 85 68 ff ff ff 00 movl $0x0,-0x98(%ebp) <== NOT EXECUTED
11d6a5: 00 00 00
handle->buffer = NULL;
11d6a8: c7 85 6c ff ff ff 00 movl $0x0,-0x94(%ebp) <== NOT EXECUTED
11d6af: 00 00 00
rtems_rfs_block_map_close (fs, &map);
rtems_rfs_inode_close (fs, &inode);
return rc;
}
rc = rtems_rfs_block_map_close (fs, &map);
11d6b2: 5e pop %esi <== NOT EXECUTED
11d6b3: 5f pop %edi <== NOT EXECUTED
11d6b4: 8d 45 98 lea -0x68(%ebp),%eax <== NOT EXECUTED
11d6b7: 50 push %eax <== NOT EXECUTED
11d6b8: 53 push %ebx <== NOT EXECUTED
11d6b9: e8 8b c0 ff ff call 119749 <rtems_rfs_block_map_close><== NOT EXECUTED
11d6be: 89 c6 mov %eax,%esi <== NOT EXECUTED
if (rc > 0)
11d6c0: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11d6c3: 85 c0 test %eax,%eax <== NOT EXECUTED
11d6c5: 7e 11 jle 11d6d8 <rtems_rfs_symlink_read+0x1bc><== NOT EXECUTED
{
rtems_rfs_inode_close (fs, &inode);
11d6c7: 50 push %eax <== NOT EXECUTED
11d6c8: 50 push %eax <== NOT EXECUTED
11d6c9: 8d 85 70 ff ff ff lea -0x90(%ebp),%eax <== NOT EXECUTED
11d6cf: 50 push %eax <== NOT EXECUTED
11d6d0: 53 push %ebx <== NOT EXECUTED
11d6d1: e8 d1 4c ff ff call 1123a7 <rtems_rfs_inode_close> <== NOT EXECUTED
11d6d6: eb 11 jmp 11d6e9 <rtems_rfs_symlink_read+0x1cd><== NOT EXECUTED
return rc;
}
}
rc = rtems_rfs_inode_close (fs, &inode);
11d6d8: 50 push %eax
11d6d9: 50 push %eax
11d6da: 8d 85 70 ff ff ff lea -0x90(%ebp),%eax
11d6e0: 50 push %eax
11d6e1: 53 push %ebx
11d6e2: e8 c0 4c ff ff call 1123a7 <rtems_rfs_inode_close>
11d6e7: 89 c6 mov %eax,%esi
11d6e9: 83 c4 10 add $0x10,%esp
return rc;
}
11d6ec: 89 f0 mov %esi,%eax
11d6ee: 8d 65 f4 lea -0xc(%ebp),%esp
11d6f1: 5b pop %ebx
11d6f2: 5e pop %esi
11d6f3: 5f pop %edi
11d6f4: 5d pop %ebp
11d6f5: c3 ret
001138e0 <rtems_rfs_trace_clear_mask>:
rtems_rfs_trace_mask
rtems_rfs_trace_clear_mask (rtems_rfs_trace_mask mask)
{
1138e0: 55 push %ebp <== NOT EXECUTED
1138e1: 89 e5 mov %esp,%ebp <== NOT EXECUTED
1138e3: 53 push %ebx <== NOT EXECUTED
1138e4: 8b 5d 08 mov 0x8(%ebp),%ebx <== NOT EXECUTED
1138e7: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
rtems_rfs_trace_mask state = rtems_rfs_trace_flags;
1138ea: a1 a8 35 15 00 mov 0x1535a8,%eax <== NOT EXECUTED
1138ef: 8b 15 ac 35 15 00 mov 0x1535ac,%edx <== NOT EXECUTED
rtems_rfs_trace_flags &= ~mask;
1138f5: f7 d3 not %ebx <== NOT EXECUTED
1138f7: f7 d1 not %ecx <== NOT EXECUTED
1138f9: 21 c3 and %eax,%ebx <== NOT EXECUTED
1138fb: 89 1d a8 35 15 00 mov %ebx,0x1535a8 <== NOT EXECUTED
113901: 21 d1 and %edx,%ecx <== NOT EXECUTED
113903: 89 0d ac 35 15 00 mov %ecx,0x1535ac <== NOT EXECUTED
return state;
}
113909: 5b pop %ebx <== NOT EXECUTED
11390a: 5d pop %ebp <== NOT EXECUTED
11390b: c3 ret <== NOT EXECUTED
001138b8 <rtems_rfs_trace_set_mask>:
rtems_rfs_trace_mask
rtems_rfs_trace_set_mask (rtems_rfs_trace_mask mask)
{
1138b8: 55 push %ebp <== NOT EXECUTED
1138b9: 89 e5 mov %esp,%ebp <== NOT EXECUTED
1138bb: 53 push %ebx <== NOT EXECUTED
1138bc: 8b 4d 0c mov 0xc(%ebp),%ecx <== NOT EXECUTED
rtems_rfs_trace_mask state = rtems_rfs_trace_flags;
1138bf: a1 a8 35 15 00 mov 0x1535a8,%eax <== NOT EXECUTED
1138c4: 8b 15 ac 35 15 00 mov 0x1535ac,%edx <== NOT EXECUTED
rtems_rfs_trace_flags |= mask;
1138ca: 8b 5d 08 mov 0x8(%ebp),%ebx <== NOT EXECUTED
1138cd: 09 c3 or %eax,%ebx <== NOT EXECUTED
1138cf: 89 1d a8 35 15 00 mov %ebx,0x1535a8 <== NOT EXECUTED
1138d5: 09 d1 or %edx,%ecx <== NOT EXECUTED
1138d7: 89 0d ac 35 15 00 mov %ecx,0x1535ac <== NOT EXECUTED
return state;
}
1138dd: 5b pop %ebx <== NOT EXECUTED
1138de: 5d pop %ebp <== NOT EXECUTED
1138df: c3 ret <== NOT EXECUTED
0011390c <rtems_rfs_trace_shell_command>:
int
rtems_rfs_trace_shell_command (int argc, char *argv[])
{
11390c: 55 push %ebp <== NOT EXECUTED
11390d: 89 e5 mov %esp,%ebp <== NOT EXECUTED
11390f: 57 push %edi <== NOT EXECUTED
113910: 56 push %esi <== NOT EXECUTED
113911: 53 push %ebx <== NOT EXECUTED
113912: 81 ec cc 00 00 00 sub $0xcc,%esp <== NOT EXECUTED
const char* table[] =
113918: 8d bd 4c ff ff ff lea -0xb4(%ebp),%edi <== NOT EXECUTED
11391e: be 28 08 13 00 mov $0x130828,%esi <== NOT EXECUTED
113923: b9 27 00 00 00 mov $0x27,%ecx <== NOT EXECUTED
113928: f3 a5 rep movsl %ds:(%esi),%es:(%edi) <== NOT EXECUTED
rtems_rfs_trace_mask clear_value = 0;
bool set = true;
int arg;
int t;
for (arg = 1; arg < argc; arg++)
11392a: c7 85 38 ff ff ff 01 movl $0x1,-0xc8(%ebp) <== NOT EXECUTED
113931: 00 00 00
"file-set"
};
rtems_rfs_trace_mask set_value = 0;
rtems_rfs_trace_mask clear_value = 0;
bool set = true;
113934: c6 85 3f ff ff ff 01 movb $0x1,-0xc1(%ebp) <== NOT EXECUTED
"file-io",
"file-set"
};
rtems_rfs_trace_mask set_value = 0;
rtems_rfs_trace_mask clear_value = 0;
11393b: c7 85 40 ff ff ff 00 movl $0x0,-0xc0(%ebp) <== NOT EXECUTED
113942: 00 00 00
113945: c7 85 44 ff ff ff 00 movl $0x0,-0xbc(%ebp) <== NOT EXECUTED
11394c: 00 00 00
"file-close",
"file-io",
"file-set"
};
rtems_rfs_trace_mask set_value = 0;
11394f: 31 f6 xor %esi,%esi <== NOT EXECUTED
113951: 31 ff xor %edi,%edi <== NOT EXECUTED
rtems_rfs_trace_mask clear_value = 0;
bool set = true;
int arg;
int t;
for (arg = 1; arg < argc; arg++)
113953: e9 9a 01 00 00 jmp 113af2 <rtems_rfs_trace_shell_command+0x1e6><== NOT EXECUTED
{
if (argv[arg][0] == '-')
113958: 8b 95 38 ff ff ff mov -0xc8(%ebp),%edx <== NOT EXECUTED
11395e: 8b 45 0c mov 0xc(%ebp),%eax <== NOT EXECUTED
113961: 8b 1c 90 mov (%eax,%edx,4),%ebx <== NOT EXECUTED
113964: 80 3b 2d cmpb $0x2d,(%ebx) <== NOT EXECUTED
113967: 75 76 jne 1139df <rtems_rfs_trace_shell_command+0xd3><== NOT EXECUTED
{
switch (argv[arg][1])
113969: 8a 43 01 mov 0x1(%ebx),%al <== NOT EXECUTED
11396c: 3c 68 cmp $0x68,%al <== NOT EXECUTED
11396e: 74 06 je 113976 <rtems_rfs_trace_shell_command+0x6a><== NOT EXECUTED
113970: 3c 6c cmp $0x6c,%al <== NOT EXECUTED
113972: 75 51 jne 1139c5 <rtems_rfs_trace_shell_command+0xb9><== NOT EXECUTED
113974: eb 16 jmp 11398c <rtems_rfs_trace_shell_command+0x80><== NOT EXECUTED
{
case 'h':
printf ("usage: %s [-hl] [set/clear] [flags]\n", argv[0]);
113976: 50 push %eax <== NOT EXECUTED
113977: 50 push %eax <== NOT EXECUTED
113978: 8b 55 0c mov 0xc(%ebp),%edx <== NOT EXECUTED
11397b: ff 32 pushl (%edx) <== NOT EXECUTED
11397d: 68 e0 05 13 00 push $0x1305e0 <== NOT EXECUTED
113982: e8 b5 c9 00 00 call 12033c <printf> <== NOT EXECUTED
113987: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11398a: eb 32 jmp 1139be <rtems_rfs_trace_shell_command+0xb2><== NOT EXECUTED
return 0;
case 'l':
printf ("%s: valid flags to set or clear are:\n", argv[0]);
11398c: 50 push %eax <== NOT EXECUTED
11398d: 50 push %eax <== NOT EXECUTED
11398e: 8b 55 0c mov 0xc(%ebp),%edx <== NOT EXECUTED
113991: ff 32 pushl (%edx) <== NOT EXECUTED
113993: 68 05 06 13 00 push $0x130605 <== NOT EXECUTED
113998: e8 9f c9 00 00 call 12033c <printf> <== NOT EXECUTED
11399d: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
for (t = 0; t < (sizeof (table) / sizeof (const char*)); t++)
1139a0: 31 db xor %ebx,%ebx <== NOT EXECUTED
printf (" %s\n", table[t]);
1139a2: 50 push %eax <== NOT EXECUTED
1139a3: 50 push %eax <== NOT EXECUTED
1139a4: ff b4 9d 4c ff ff ff pushl -0xb4(%ebp,%ebx,4) <== NOT EXECUTED
1139ab: 68 2b 06 13 00 push $0x13062b <== NOT EXECUTED
1139b0: e8 87 c9 00 00 call 12033c <printf> <== NOT EXECUTED
case 'h':
printf ("usage: %s [-hl] [set/clear] [flags]\n", argv[0]);
return 0;
case 'l':
printf ("%s: valid flags to set or clear are:\n", argv[0]);
for (t = 0; t < (sizeof (table) / sizeof (const char*)); t++)
1139b5: 43 inc %ebx <== NOT EXECUTED
1139b6: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
1139b9: 83 fb 27 cmp $0x27,%ebx <== NOT EXECUTED
1139bc: 75 e4 jne 1139a2 <rtems_rfs_trace_shell_command+0x96><== NOT EXECUTED
printf (" %s\n", table[t]);
return 0;
1139be: 31 c0 xor %eax,%eax <== NOT EXECUTED
1139c0: e9 41 01 00 00 jmp 113b06 <rtems_rfs_trace_shell_command+0x1fa><== NOT EXECUTED
default:
printf ("error: unknown option\n");
1139c5: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1139c8: 68 31 06 13 00 push $0x130631 <== NOT EXECUTED
1139cd: e8 82 cb 00 00 call 120554 <puts> <== NOT EXECUTED
1139d2: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
return 1;
1139d5: b8 01 00 00 00 mov $0x1,%eax <== NOT EXECUTED
1139da: e9 27 01 00 00 jmp 113b06 <rtems_rfs_trace_shell_command+0x1fa><== NOT EXECUTED
}
}
else
{
if (strcmp (argv[arg], "set") == 0)
1139df: 50 push %eax <== NOT EXECUTED
1139e0: 50 push %eax <== NOT EXECUTED
1139e1: 68 22 08 13 00 push $0x130822 <== NOT EXECUTED
1139e6: 53 push %ebx <== NOT EXECUTED
1139e7: e8 a0 d2 00 00 call 120c8c <strcmp> <== NOT EXECUTED
1139ec: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
1139ef: 85 c0 test %eax,%eax <== NOT EXECUTED
1139f1: 75 07 jne 1139fa <rtems_rfs_trace_shell_command+0xee><== NOT EXECUTED
set = true;
1139f3: c6 85 3f ff ff ff 01 movb $0x1,-0xc1(%ebp) <== NOT EXECUTED
if (strcmp (argv[arg], "clear") == 0)
1139fa: 51 push %ecx <== NOT EXECUTED
1139fb: 51 push %ecx <== NOT EXECUTED
1139fc: 68 47 06 13 00 push $0x130647 <== NOT EXECUTED
113a01: 53 push %ebx <== NOT EXECUTED
113a02: e8 85 d2 00 00 call 120c8c <strcmp> <== NOT EXECUTED
113a07: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
113a0a: 85 c0 test %eax,%eax <== NOT EXECUTED
113a0c: 0f 84 8e 00 00 00 je 113aa0 <rtems_rfs_trace_shell_command+0x194><== NOT EXECUTED
set = false;
else if (strcmp (argv[arg], "all") == 0)
113a12: 52 push %edx <== NOT EXECUTED
113a13: 52 push %edx <== NOT EXECUTED
113a14: 68 94 26 13 00 push $0x132694 <== NOT EXECUTED
113a19: 53 push %ebx <== NOT EXECUTED
113a1a: e8 6d d2 00 00 call 120c8c <strcmp> <== NOT EXECUTED
113a1f: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
113a22: 85 c0 test %eax,%eax <== NOT EXECUTED
113a24: 75 13 jne 113a39 <rtems_rfs_trace_shell_command+0x12d><== NOT EXECUTED
{
if (set)
113a26: 80 bd 3f ff ff ff 00 cmpb $0x0,-0xc1(%ebp) <== NOT EXECUTED
113a2d: 74 7a je 113aa9 <rtems_rfs_trace_shell_command+0x19d><== NOT EXECUTED
set_value = RTEMS_RFS_TRACE_ALL;
113a2f: 83 ce ff or $0xffffffff,%esi <== NOT EXECUTED
113a32: 89 f7 mov %esi,%edi <== NOT EXECUTED
113a34: e9 84 00 00 00 jmp 113abd <rtems_rfs_trace_shell_command+0x1b1><== NOT EXECUTED
{
if (strcmp (argv[arg], "set") == 0)
set = true;
if (strcmp (argv[arg], "clear") == 0)
set = false;
else if (strcmp (argv[arg], "all") == 0)
113a39: 31 c9 xor %ecx,%ecx <== NOT EXECUTED
}
else
{
for (t = 0; t < (sizeof (table) / sizeof (const char*)); t++)
{
if (strcmp (argv[arg], table[t]) == 0)
113a3b: 50 push %eax <== NOT EXECUTED
113a3c: 50 push %eax <== NOT EXECUTED
113a3d: ff b4 8d 4c ff ff ff pushl -0xb4(%ebp,%ecx,4) <== NOT EXECUTED
113a44: 53 push %ebx <== NOT EXECUTED
113a45: 89 8d 34 ff ff ff mov %ecx,-0xcc(%ebp) <== NOT EXECUTED
113a4b: e8 3c d2 00 00 call 120c8c <strcmp> <== NOT EXECUTED
113a50: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
113a53: 85 c0 test %eax,%eax <== NOT EXECUTED
113a55: 8b 8d 34 ff ff ff mov -0xcc(%ebp),%ecx <== NOT EXECUTED
113a5b: 75 3b jne 113a98 <rtems_rfs_trace_shell_command+0x18c><== NOT EXECUTED
{
if (set)
113a5d: 80 bd 3f ff ff ff 00 cmpb $0x0,-0xc1(%ebp) <== NOT EXECUTED
113a64: 74 13 je 113a79 <rtems_rfs_trace_shell_command+0x16d><== NOT EXECUTED
set_value = 1ULL << t;
113a66: 89 cf mov %ecx,%edi <== NOT EXECUTED
113a68: c1 ef 05 shr $0x5,%edi <== NOT EXECUTED
113a6b: 83 e7 01 and $0x1,%edi <== NOT EXECUTED
113a6e: 89 fe mov %edi,%esi <== NOT EXECUTED
113a70: 83 f6 01 xor $0x1,%esi <== NOT EXECUTED
113a73: d3 e6 shl %cl,%esi <== NOT EXECUTED
113a75: d3 e7 shl %cl,%edi <== NOT EXECUTED
113a77: eb 44 jmp 113abd <rtems_rfs_trace_shell_command+0x1b1><== NOT EXECUTED
else
clear_value = 1ULL << t;
113a79: 31 c0 xor %eax,%eax <== NOT EXECUTED
113a7b: 31 d2 xor %edx,%edx <== NOT EXECUTED
113a7d: f6 c1 20 test $0x20,%cl <== NOT EXECUTED
113a80: 0f 94 c0 sete %al <== NOT EXECUTED
113a83: 0f 95 c2 setne %dl <== NOT EXECUTED
113a86: d3 e0 shl %cl,%eax <== NOT EXECUTED
113a88: d3 e2 shl %cl,%edx <== NOT EXECUTED
113a8a: 89 85 40 ff ff ff mov %eax,-0xc0(%ebp) <== NOT EXECUTED
113a90: 89 95 44 ff ff ff mov %edx,-0xbc(%ebp) <== NOT EXECUTED
113a96: eb 25 jmp 113abd <rtems_rfs_trace_shell_command+0x1b1><== NOT EXECUTED
else
clear_value = RTEMS_RFS_TRACE_ALL;
}
else
{
for (t = 0; t < (sizeof (table) / sizeof (const char*)); t++)
113a98: 41 inc %ecx <== NOT EXECUTED
113a99: 83 f9 27 cmp $0x27,%ecx <== NOT EXECUTED
113a9c: 75 9d jne 113a3b <rtems_rfs_trace_shell_command+0x12f><== NOT EXECUTED
113a9e: eb 1d jmp 113abd <rtems_rfs_trace_shell_command+0x1b1><== NOT EXECUTED
else
{
if (strcmp (argv[arg], "set") == 0)
set = true;
if (strcmp (argv[arg], "clear") == 0)
set = false;
113aa0: c6 85 3f ff ff ff 00 movb $0x0,-0xc1(%ebp) <== NOT EXECUTED
113aa7: eb 14 jmp 113abd <rtems_rfs_trace_shell_command+0x1b1><== NOT EXECUTED
else if (strcmp (argv[arg], "all") == 0)
{
if (set)
set_value = RTEMS_RFS_TRACE_ALL;
else
clear_value = RTEMS_RFS_TRACE_ALL;
113aa9: c7 85 40 ff ff ff ff movl $0xffffffff,-0xc0(%ebp) <== NOT EXECUTED
113ab0: ff ff ff
113ab3: c7 85 44 ff ff ff ff movl $0xffffffff,-0xbc(%ebp) <== NOT EXECUTED
113aba: ff ff ff
}
}
}
rtems_rfs_trace_flags |= set_value;
rtems_rfs_trace_flags &= ~clear_value;
113abd: 8b 95 40 ff ff ff mov -0xc0(%ebp),%edx <== NOT EXECUTED
113ac3: f7 d2 not %edx <== NOT EXECUTED
113ac5: 8b 85 44 ff ff ff mov -0xbc(%ebp),%eax <== NOT EXECUTED
113acb: f7 d0 not %eax <== NOT EXECUTED
break;
}
}
}
rtems_rfs_trace_flags |= set_value;
113acd: 8b 1d a8 35 15 00 mov 0x1535a8,%ebx <== NOT EXECUTED
113ad3: 09 f3 or %esi,%ebx <== NOT EXECUTED
113ad5: 8b 0d ac 35 15 00 mov 0x1535ac,%ecx <== NOT EXECUTED
113adb: 09 f9 or %edi,%ecx <== NOT EXECUTED
rtems_rfs_trace_flags &= ~clear_value;
113add: 21 da and %ebx,%edx <== NOT EXECUTED
113adf: 89 15 a8 35 15 00 mov %edx,0x1535a8 <== NOT EXECUTED
113ae5: 21 c8 and %ecx,%eax <== NOT EXECUTED
113ae7: a3 ac 35 15 00 mov %eax,0x1535ac <== NOT EXECUTED
rtems_rfs_trace_mask clear_value = 0;
bool set = true;
int arg;
int t;
for (arg = 1; arg < argc; arg++)
113aec: ff 85 38 ff ff ff incl -0xc8(%ebp) <== NOT EXECUTED
113af2: 8b 55 08 mov 0x8(%ebp),%edx <== NOT EXECUTED
113af5: 39 95 38 ff ff ff cmp %edx,-0xc8(%ebp) <== NOT EXECUTED
113afb: 0f 8c 57 fe ff ff jl 113958 <rtems_rfs_trace_shell_command+0x4c><== NOT EXECUTED
113b01: e9 b8 fe ff ff jmp 1139be <rtems_rfs_trace_shell_command+0xb2><== NOT EXECUTED
rtems_rfs_trace_flags &= ~clear_value;
}
}
return 0;
}
113b06: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
113b09: 5b pop %ebx <== NOT EXECUTED
113b0a: 5e pop %esi <== NOT EXECUTED
113b0b: 5f pop %edi <== NOT EXECUTED
113b0c: 5d pop %ebp <== NOT EXECUTED
113b0d: c3 ret <== NOT EXECUTED
0011cf07 <rtems_rfs_unlink>:
rtems_rfs_unlink (rtems_rfs_file_system* fs,
rtems_rfs_ino parent,
rtems_rfs_ino target,
uint32_t doff,
rtems_rfs_unlink_dir dir_mode)
{
11cf07: 55 push %ebp
11cf08: 89 e5 mov %esp,%ebp
11cf0a: 57 push %edi
11cf0b: 56 push %esi
11cf0c: 53 push %ebx
11cf0d: 83 ec 74 sub $0x74,%esp
11cf10: 8b 75 08 mov 0x8(%ebp),%esi
11cf13: 8b 7d 10 mov 0x10(%ebp),%edi
rtems_rfs_inode_handle target_inode;
uint16_t links;
bool dir;
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_UNLINK))
11cf16: 6a 00 push $0x0
11cf18: 68 00 00 00 02 push $0x2000000
11cf1d: e8 7a 69 ff ff call 11389c <rtems_rfs_trace>
11cf22: 83 c4 10 add $0x10,%esp
11cf25: 84 c0 test %al,%al
11cf27: 74 12 je 11cf3b <rtems_rfs_unlink+0x34> <== ALWAYS TAKEN
printf ("rtems-rfs: unlink: parent(%" PRIu32 ") -X-> (%" PRIu32 ")\n", parent, target);
11cf29: 50 push %eax <== NOT EXECUTED
11cf2a: 57 push %edi <== NOT EXECUTED
11cf2b: ff 75 0c pushl 0xc(%ebp) <== NOT EXECUTED
11cf2e: 68 7a 1f 13 00 push $0x131f7a <== NOT EXECUTED
11cf33: e8 04 34 00 00 call 12033c <printf> <== NOT EXECUTED
11cf38: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rc = rtems_rfs_inode_open (fs, target, &target_inode, true);
11cf3b: 6a 01 push $0x1
11cf3d: 8d 55 c0 lea -0x40(%ebp),%edx
11cf40: 52 push %edx
11cf41: 57 push %edi
11cf42: 56 push %esi
11cf43: 89 55 90 mov %edx,-0x70(%ebp)
11cf46: e8 df 52 ff ff call 11222a <rtems_rfs_inode_open>
11cf4b: 89 c3 mov %eax,%ebx
if (rc)
11cf4d: 83 c4 10 add $0x10,%esp
11cf50: 85 c0 test %eax,%eax
11cf52: 8b 55 90 mov -0x70(%ebp),%edx
11cf55: 0f 85 0d 03 00 00 jne 11d268 <rtems_rfs_unlink+0x361><== NEVER TAKEN
/*
* If a directory process the unlink mode.
*/
dir = RTEMS_RFS_S_ISDIR (rtems_rfs_inode_get_mode (&target_inode));
11cf5b: 8b 45 cc mov -0x34(%ebp),%eax
* @return uint16_t The mode.
*/
static inline uint16_t
rtems_rfs_inode_get_mode (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u16 (&handle->node->mode);
11cf5e: 0f b6 40 02 movzbl 0x2(%eax),%eax
11cf62: c1 e0 08 shl $0x8,%eax
11cf65: 66 25 00 f0 and $0xf000,%ax
11cf69: 66 3d 00 40 cmp $0x4000,%ax
if (dir)
11cf6d: 0f 94 45 97 sete -0x69(%ebp)
11cf71: 0f 85 93 00 00 00 jne 11d00a <rtems_rfs_unlink+0x103>
{
switch (dir_mode)
11cf77: 83 7d 18 00 cmpl $0x0,0x18(%ebp)
11cf7b: 74 0c je 11cf89 <rtems_rfs_unlink+0x82> <== NEVER TAKEN
11cf7d: 83 7d 18 01 cmpl $0x1,0x18(%ebp)
11cf81: 0f 85 83 00 00 00 jne 11d00a <rtems_rfs_unlink+0x103><== NEVER TAKEN
11cf87: eb 3e jmp 11cfc7 <rtems_rfs_unlink+0xc0>
{
case rtems_rfs_unlink_dir_denied:
if (rtems_rfs_trace (RTEMS_RFS_TRACE_UNLINK))
11cf89: 50 push %eax <== NOT EXECUTED
11cf8a: 50 push %eax <== NOT EXECUTED
11cf8b: 6a 00 push $0x0 <== NOT EXECUTED
11cf8d: 68 00 00 00 02 push $0x2000000 <== NOT EXECUTED
11cf92: e8 05 69 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11cf97: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11cf9a: 84 c0 test %al,%al <== NOT EXECUTED
11cf9c: 74 10 je 11cfae <rtems_rfs_unlink+0xa7> <== NOT EXECUTED
printf ("rtems-rfs: link is a directory\n");
11cf9e: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11cfa1: 68 a5 1f 13 00 push $0x131fa5 <== NOT EXECUTED
11cfa6: e8 a9 35 00 00 call 120554 <puts> <== NOT EXECUTED
11cfab: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rtems_rfs_inode_close (fs, &target_inode);
11cfae: 50 push %eax <== NOT EXECUTED
11cfaf: 50 push %eax <== NOT EXECUTED
11cfb0: 8d 45 c0 lea -0x40(%ebp),%eax <== NOT EXECUTED
11cfb3: 50 push %eax <== NOT EXECUTED
11cfb4: 56 push %esi <== NOT EXECUTED
11cfb5: e8 ed 53 ff ff call 1123a7 <rtems_rfs_inode_close> <== NOT EXECUTED
11cfba: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
return EISDIR;
11cfbd: bb 15 00 00 00 mov $0x15,%ebx <== NOT EXECUTED
11cfc2: e9 a1 02 00 00 jmp 11d268 <rtems_rfs_unlink+0x361><== NOT EXECUTED
case rtems_rfs_unlink_dir_if_empty:
rc = rtems_rfs_dir_empty (fs, &target_inode);
11cfc7: 50 push %eax
11cfc8: 50 push %eax
11cfc9: 52 push %edx
11cfca: 56 push %esi
11cfcb: e8 b5 e7 ff ff call 11b785 <rtems_rfs_dir_empty>
11cfd0: 89 c3 mov %eax,%ebx
if (rc > 0)
11cfd2: 83 c4 10 add $0x10,%esp
11cfd5: 85 c0 test %eax,%eax
11cfd7: 7e 31 jle 11d00a <rtems_rfs_unlink+0x103>
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_UNLINK))
11cfd9: 57 push %edi
11cfda: 57 push %edi
11cfdb: 6a 00 push $0x0
11cfdd: 68 00 00 00 02 push $0x2000000
11cfe2: e8 b5 68 ff ff call 11389c <rtems_rfs_trace>
11cfe7: 83 c4 10 add $0x10,%esp
11cfea: 84 c0 test %al,%al
11cfec: 0f 84 23 02 00 00 je 11d215 <rtems_rfs_unlink+0x30e>
printf ("rtems-rfs: dir-empty: %d: %s\n", rc, strerror (rc));
11cff2: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11cff5: 53 push %ebx <== NOT EXECUTED
11cff6: e8 c9 40 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11cffb: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11cffe: 50 push %eax <== NOT EXECUTED
11cfff: 53 push %ebx <== NOT EXECUTED
11d000: 68 c4 1f 13 00 push $0x131fc4 <== NOT EXECUTED
11d005: e9 03 02 00 00 jmp 11d20d <rtems_rfs_unlink+0x306><== NOT EXECUTED
default:
break;
}
}
rc = rtems_rfs_inode_open (fs, parent, &parent_inode, true);
11d00a: 6a 01 push $0x1
11d00c: 8d 55 98 lea -0x68(%ebp),%edx
11d00f: 52 push %edx
11d010: ff 75 0c pushl 0xc(%ebp)
11d013: 56 push %esi
11d014: 89 55 90 mov %edx,-0x70(%ebp)
11d017: e8 0e 52 ff ff call 11222a <rtems_rfs_inode_open>
11d01c: 89 c3 mov %eax,%ebx
if (rc)
11d01e: 83 c4 10 add $0x10,%esp
11d021: 85 c0 test %eax,%eax
11d023: 8b 55 90 mov -0x70(%ebp),%edx
11d026: 74 31 je 11d059 <rtems_rfs_unlink+0x152><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_UNLINK))
11d028: 51 push %ecx <== NOT EXECUTED
11d029: 51 push %ecx <== NOT EXECUTED
11d02a: 6a 00 push $0x0 <== NOT EXECUTED
11d02c: 68 00 00 00 02 push $0x2000000 <== NOT EXECUTED
11d031: e8 66 68 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11d036: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11d039: 84 c0 test %al,%al <== NOT EXECUTED
11d03b: 0f 84 d4 01 00 00 je 11d215 <rtems_rfs_unlink+0x30e><== NOT EXECUTED
printf ("rtems-rfs: link: inode-open failed: %d: %s\n",
11d041: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11d044: 53 push %ebx <== NOT EXECUTED
11d045: e8 7a 40 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11d04a: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11d04d: 50 push %eax <== NOT EXECUTED
11d04e: 53 push %ebx <== NOT EXECUTED
11d04f: 68 e2 1f 13 00 push $0x131fe2 <== NOT EXECUTED
11d054: e9 b4 01 00 00 jmp 11d20d <rtems_rfs_unlink+0x306><== NOT EXECUTED
rc, strerror (rc));
rtems_rfs_inode_close (fs, &target_inode);
return rc;
}
rc = rtems_rfs_dir_del_entry (fs, &parent_inode, target, doff);
11d059: ff 75 14 pushl 0x14(%ebp)
11d05c: 57 push %edi
11d05d: 52 push %edx
11d05e: 56 push %esi
11d05f: e8 46 e0 ff ff call 11b0aa <rtems_rfs_dir_del_entry>
11d064: 89 c3 mov %eax,%ebx
if (rc > 0)
11d066: 83 c4 10 add $0x10,%esp
11d069: 85 c0 test %eax,%eax
11d06b: 7e 31 jle 11d09e <rtems_rfs_unlink+0x197><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_UNLINK))
11d06d: 52 push %edx <== NOT EXECUTED
11d06e: 52 push %edx <== NOT EXECUTED
11d06f: 6a 00 push $0x0 <== NOT EXECUTED
11d071: 68 00 00 00 02 push $0x2000000 <== NOT EXECUTED
11d076: e8 21 68 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11d07b: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11d07e: 84 c0 test %al,%al <== NOT EXECUTED
11d080: 0f 84 3d 01 00 00 je 11d1c3 <rtems_rfs_unlink+0x2bc><== NOT EXECUTED
printf ("rtems-rfs: unlink: dir-del failed: %d: %s\n",
11d086: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11d089: 53 push %ebx <== NOT EXECUTED
11d08a: e8 35 40 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11d08f: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11d092: 50 push %eax <== NOT EXECUTED
11d093: 53 push %ebx <== NOT EXECUTED
11d094: 68 0e 20 13 00 push $0x13200e <== NOT EXECUTED
11d099: e9 1d 01 00 00 jmp 11d1bb <rtems_rfs_unlink+0x2b4><== NOT EXECUTED
rtems_rfs_inode_close (fs, &parent_inode);
rtems_rfs_inode_close (fs, &target_inode);
return rc;
}
links = rtems_rfs_inode_get_links (&target_inode);
11d09e: 8b 55 cc mov -0x34(%ebp),%edx
*/
static inline uint16_t
rtems_rfs_inode_get_links (rtems_rfs_inode_handle* handle)
{
uint16_t links;
links = rtems_rfs_read_u16 (&handle->node->links);
11d0a1: 0f b6 02 movzbl (%edx),%eax
11d0a4: c1 e0 08 shl $0x8,%eax
11d0a7: 0f b6 5a 01 movzbl 0x1(%edx),%ebx
11d0ab: 09 c3 or %eax,%ebx
if (links == 0xffff)
links = 0;
11d0ad: 31 c0 xor %eax,%eax
11d0af: 66 83 fb ff cmp $0xffff,%bx
11d0b3: 0f 95 c0 setne %al
11d0b6: f7 d8 neg %eax
11d0b8: 21 c3 and %eax,%ebx
if (rtems_rfs_trace (RTEMS_RFS_TRACE_UNLINK))
11d0ba: 50 push %eax
11d0bb: 50 push %eax
11d0bc: 6a 00 push $0x0
11d0be: 68 00 00 00 02 push $0x2000000
11d0c3: e8 d4 67 ff ff call 11389c <rtems_rfs_trace>
11d0c8: 83 c4 10 add $0x10,%esp
11d0cb: 84 c0 test %al,%al
11d0cd: 74 13 je 11d0e2 <rtems_rfs_unlink+0x1db><== ALWAYS TAKEN
printf ("rtems-rfs: unlink: target:%" PRIu32 " links:%u\n", target, links);
11d0cf: 50 push %eax <== NOT EXECUTED
11d0d0: 0f b7 c3 movzwl %bx,%eax <== NOT EXECUTED
11d0d3: 50 push %eax <== NOT EXECUTED
11d0d4: 57 push %edi <== NOT EXECUTED
11d0d5: 68 39 20 13 00 push $0x132039 <== NOT EXECUTED
11d0da: e8 5d 32 00 00 call 12033c <printf> <== NOT EXECUTED
11d0df: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
if (links > 1)
11d0e2: 66 83 fb 01 cmp $0x1,%bx
11d0e6: 76 18 jbe 11d100 <rtems_rfs_unlink+0x1f9>
{
links--;
11d0e8: 4b dec %ebx
* @prarm links The links.
*/
static inline void
rtems_rfs_inode_set_links (rtems_rfs_inode_handle* handle, uint16_t links)
{
rtems_rfs_write_u16 (&handle->node->links, links);
11d0e9: 89 da mov %ebx,%edx
11d0eb: 66 c1 ea 08 shr $0x8,%dx
11d0ef: 8b 45 cc mov -0x34(%ebp),%eax
11d0f2: 88 10 mov %dl,(%eax)
11d0f4: 8b 45 cc mov -0x34(%ebp),%eax
11d0f7: 88 58 01 mov %bl,0x1(%eax)
rtems_rfs_buffer_mark_dirty (&handle->buffer);
11d0fa: c6 45 d0 01 movb $0x1,-0x30(%ebp)
11d0fe: eb 7c jmp 11d17c <rtems_rfs_unlink+0x275>
else
{
/*
* Erasing the inode releases all blocks attached to it.
*/
rc = rtems_rfs_inode_delete (fs, &target_inode);
11d100: 50 push %eax
11d101: 50 push %eax
11d102: 8d 45 c0 lea -0x40(%ebp),%eax
11d105: 50 push %eax
11d106: 56 push %esi
11d107: e8 20 53 ff ff call 11242c <rtems_rfs_inode_delete>
11d10c: 89 c3 mov %eax,%ebx
if (rc > 0)
11d10e: 83 c4 10 add $0x10,%esp
11d111: 85 c0 test %eax,%eax
11d113: 7e 2e jle 11d143 <rtems_rfs_unlink+0x23c><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_UNLINK))
11d115: 50 push %eax <== NOT EXECUTED
11d116: 50 push %eax <== NOT EXECUTED
11d117: 6a 00 push $0x0 <== NOT EXECUTED
11d119: 68 00 00 00 02 push $0x2000000 <== NOT EXECUTED
11d11e: e8 79 67 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11d123: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11d126: 84 c0 test %al,%al <== NOT EXECUTED
11d128: 0f 84 95 00 00 00 je 11d1c3 <rtems_rfs_unlink+0x2bc><== NOT EXECUTED
printf ("rtems-rfs: unlink: inode-del failed: %d: %s\n",
11d12e: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11d131: 53 push %ebx <== NOT EXECUTED
11d132: e8 8d 3f 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11d137: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11d13a: 50 push %eax <== NOT EXECUTED
11d13b: 53 push %ebx <== NOT EXECUTED
11d13c: 68 61 20 13 00 push $0x132061 <== NOT EXECUTED
11d141: eb 78 jmp 11d1bb <rtems_rfs_unlink+0x2b4><== NOT EXECUTED
rtems_rfs_inode_close (fs, &parent_inode);
rtems_rfs_inode_close (fs, &target_inode);
return rc;
}
if (dir)
11d143: 80 7d 97 00 cmpb $0x0,-0x69(%ebp)
11d147: 74 33 je 11d17c <rtems_rfs_unlink+0x275>
{
links = rtems_rfs_inode_get_links (&parent_inode);
11d149: 8b 55 a4 mov -0x5c(%ebp),%edx
*/
static inline uint16_t
rtems_rfs_inode_get_links (rtems_rfs_inode_handle* handle)
{
uint16_t links;
links = rtems_rfs_read_u16 (&handle->node->links);
11d14c: 0f b6 0a movzbl (%edx),%ecx
11d14f: c1 e1 08 shl $0x8,%ecx
11d152: 0f b6 42 01 movzbl 0x1(%edx),%eax
11d156: 09 c8 or %ecx,%eax
if (links == 0xffff)
11d158: 66 83 f8 ff cmp $0xffff,%ax
11d15c: 74 0a je 11d168 <rtems_rfs_unlink+0x261><== NEVER TAKEN
if (links > 1)
links--;
11d15e: 66 83 f8 02 cmp $0x2,%ax
11d162: 66 83 d0 ff adc $0xffff,%ax
11d166: eb 02 jmp 11d16a <rtems_rfs_unlink+0x263>
links = 0;
11d168: 31 c0 xor %eax,%eax
* @prarm links The links.
*/
static inline void
rtems_rfs_inode_set_links (rtems_rfs_inode_handle* handle, uint16_t links)
{
rtems_rfs_write_u16 (&handle->node->links, links);
11d16a: 89 c1 mov %eax,%ecx
11d16c: 66 c1 e9 08 shr $0x8,%cx
11d170: 88 0a mov %cl,(%edx)
11d172: 8b 55 a4 mov -0x5c(%ebp),%edx
11d175: 88 42 01 mov %al,0x1(%edx)
rtems_rfs_buffer_mark_dirty (&handle->buffer);
11d178: c6 45 a8 01 movb $0x1,-0x58(%ebp)
rtems_rfs_inode_set_links (&parent_inode, links);
}
}
rc = rtems_rfs_inode_time_stamp_now (&parent_inode, true, true);
11d17c: 50 push %eax
11d17d: 6a 01 push $0x1
11d17f: 6a 01 push $0x1
11d181: 8d 7d 98 lea -0x68(%ebp),%edi
11d184: 57 push %edi
11d185: e8 5f 53 ff ff call 1124e9 <rtems_rfs_inode_time_stamp_now>
11d18a: 89 c3 mov %eax,%ebx
if (rc > 0)
11d18c: 83 c4 10 add $0x10,%esp
11d18f: 85 c0 test %eax,%eax
11d191: 7e 40 jle 11d1d3 <rtems_rfs_unlink+0x2cc><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_UNLINK))
11d193: 50 push %eax <== NOT EXECUTED
11d194: 50 push %eax <== NOT EXECUTED
11d195: 6a 00 push $0x0 <== NOT EXECUTED
11d197: 68 00 00 00 02 push $0x2000000 <== NOT EXECUTED
11d19c: e8 fb 66 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11d1a1: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11d1a4: 84 c0 test %al,%al <== NOT EXECUTED
11d1a6: 74 1b je 11d1c3 <rtems_rfs_unlink+0x2bc><== NOT EXECUTED
printf ("rtems-rfs: link: inode-time-stamp failed: %d: %s\n",
11d1a8: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11d1ab: 53 push %ebx <== NOT EXECUTED
11d1ac: e8 13 3f 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11d1b1: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11d1b4: 50 push %eax <== NOT EXECUTED
11d1b5: 53 push %ebx <== NOT EXECUTED
11d1b6: 68 8e 20 13 00 push $0x13208e <== NOT EXECUTED
11d1bb: e8 7c 31 00 00 call 12033c <printf> <== NOT EXECUTED
11d1c0: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rc, strerror (rc));
rtems_rfs_inode_close (fs, &parent_inode);
11d1c3: 52 push %edx <== NOT EXECUTED
11d1c4: 52 push %edx <== NOT EXECUTED
11d1c5: 8d 45 98 lea -0x68(%ebp),%eax <== NOT EXECUTED
11d1c8: 50 push %eax <== NOT EXECUTED
11d1c9: 56 push %esi <== NOT EXECUTED
11d1ca: e8 d8 51 ff ff call 1123a7 <rtems_rfs_inode_close> <== NOT EXECUTED
rtems_rfs_inode_close (fs, &target_inode);
11d1cf: 59 pop %ecx <== NOT EXECUTED
11d1d0: 5f pop %edi <== NOT EXECUTED
11d1d1: eb 44 jmp 11d217 <rtems_rfs_unlink+0x310><== NOT EXECUTED
return rc;
}
rc = rtems_rfs_inode_close (fs, &parent_inode);
11d1d3: 50 push %eax
11d1d4: 50 push %eax
11d1d5: 57 push %edi
11d1d6: 56 push %esi
11d1d7: e8 cb 51 ff ff call 1123a7 <rtems_rfs_inode_close>
11d1dc: 89 c3 mov %eax,%ebx
if (rc > 0)
11d1de: 83 c4 10 add $0x10,%esp
11d1e1: 85 c0 test %eax,%eax
11d1e3: 7e 3e jle 11d223 <rtems_rfs_unlink+0x31c><== ALWAYS TAKEN
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_UNLINK))
11d1e5: 50 push %eax <== NOT EXECUTED
11d1e6: 50 push %eax <== NOT EXECUTED
11d1e7: 6a 00 push $0x0 <== NOT EXECUTED
11d1e9: 68 00 00 00 02 push $0x2000000 <== NOT EXECUTED
11d1ee: e8 a9 66 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11d1f3: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11d1f6: 84 c0 test %al,%al <== NOT EXECUTED
11d1f8: 74 1b je 11d215 <rtems_rfs_unlink+0x30e><== NOT EXECUTED
printf ("rtems-rfs: link: parent inode-close failed: %d: %s\n",
11d1fa: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11d1fd: 53 push %ebx <== NOT EXECUTED
11d1fe: e8 c1 3e 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11d203: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11d206: 50 push %eax <== NOT EXECUTED
11d207: 53 push %ebx <== NOT EXECUTED
11d208: 68 c0 20 13 00 push $0x1320c0 <== NOT EXECUTED
11d20d: e8 2a 31 00 00 call 12033c <printf> <== NOT EXECUTED
11d212: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
rc, strerror (rc));
rtems_rfs_inode_close (fs, &target_inode);
11d215: 50 push %eax
11d216: 50 push %eax
11d217: 8d 45 c0 lea -0x40(%ebp),%eax
11d21a: 50 push %eax
11d21b: 56 push %esi
11d21c: e8 86 51 ff ff call 1123a7 <rtems_rfs_inode_close>
11d221: eb 42 jmp 11d265 <rtems_rfs_unlink+0x35e>
return rc;
}
rc = rtems_rfs_inode_close (fs, &target_inode);
11d223: 50 push %eax
11d224: 50 push %eax
11d225: 8d 45 c0 lea -0x40(%ebp),%eax
11d228: 50 push %eax
11d229: 56 push %esi
11d22a: e8 78 51 ff ff call 1123a7 <rtems_rfs_inode_close>
11d22f: 89 c3 mov %eax,%ebx
if ((rc > 0) && rtems_rfs_trace (RTEMS_RFS_TRACE_UNLINK))
11d231: 83 c4 10 add $0x10,%esp
11d234: 85 c0 test %eax,%eax
11d236: 7e 30 jle 11d268 <rtems_rfs_unlink+0x361><== ALWAYS TAKEN
11d238: 50 push %eax <== NOT EXECUTED
11d239: 50 push %eax <== NOT EXECUTED
11d23a: 6a 00 push $0x0 <== NOT EXECUTED
11d23c: 68 00 00 00 02 push $0x2000000 <== NOT EXECUTED
11d241: e8 56 66 ff ff call 11389c <rtems_rfs_trace> <== NOT EXECUTED
11d246: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11d249: 84 c0 test %al,%al <== NOT EXECUTED
11d24b: 74 1b je 11d268 <rtems_rfs_unlink+0x361><== NOT EXECUTED
printf ("rtems-rfs: link: target inode-close failed: %d: %s\n",
11d24d: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11d250: 53 push %ebx <== NOT EXECUTED
11d251: e8 6e 3e 00 00 call 1210c4 <strerror> <== NOT EXECUTED
11d256: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11d259: 50 push %eax <== NOT EXECUTED
11d25a: 53 push %ebx <== NOT EXECUTED
11d25b: 68 f4 20 13 00 push $0x1320f4 <== NOT EXECUTED
11d260: e8 d7 30 00 00 call 12033c <printf> <== NOT EXECUTED
11d265: 83 c4 10 add $0x10,%esp
rc, strerror (rc));
return rc;
}
11d268: 89 d8 mov %ebx,%eax
11d26a: 8d 65 f4 lea -0xc(%ebp),%esp
11d26d: 5b pop %ebx
11d26e: 5e pop %esi
11d26f: 5f pop %edi
11d270: 5d pop %ebp
11d271: c3 ret
0011f46f <rtems_shell_rfs_format>:
int
rtems_shell_rfs_format (int argc, char* argv[])
{
11f46f: 55 push %ebp <== NOT EXECUTED
11f470: 89 e5 mov %esp,%ebp <== NOT EXECUTED
11f472: 57 push %edi <== NOT EXECUTED
11f473: 56 push %esi <== NOT EXECUTED
11f474: 53 push %ebx <== NOT EXECUTED
11f475: 83 ec 2c sub $0x2c,%esp <== NOT EXECUTED
11f478: 8b 75 0c mov 0xc(%ebp),%esi <== NOT EXECUTED
rtems_rfs_format_config config;
const char* driver = NULL;
int arg;
memset (&config, 0, sizeof (rtems_rfs_format_config));
11f47b: 8d 55 d0 lea -0x30(%ebp),%edx <== NOT EXECUTED
11f47e: b9 06 00 00 00 mov $0x6,%ecx <== NOT EXECUTED
11f483: 31 c0 xor %eax,%eax <== NOT EXECUTED
11f485: 89 d7 mov %edx,%edi <== NOT EXECUTED
11f487: f3 ab rep stos %eax,%es:(%edi) <== NOT EXECUTED
for (arg = 1; arg < argc; arg++)
11f489: bb 01 00 00 00 mov $0x1,%ebx <== NOT EXECUTED
int
rtems_shell_rfs_format (int argc, char* argv[])
{
rtems_rfs_format_config config;
const char* driver = NULL;
11f48e: 31 ff xor %edi,%edi <== NOT EXECUTED
int arg;
memset (&config, 0, sizeof (rtems_rfs_format_config));
for (arg = 1; arg < argc; arg++)
11f490: e9 f4 00 00 00 jmp 11f589 <rtems_shell_rfs_format+0x11a><== NOT EXECUTED
{
if (argv[arg][0] == '-')
11f495: 8b 0c 9e mov (%esi,%ebx,4),%ecx <== NOT EXECUTED
11f498: 80 39 2d cmpb $0x2d,(%ecx) <== NOT EXECUTED
11f49b: 0f 85 d7 00 00 00 jne 11f578 <rtems_shell_rfs_format+0x109><== NOT EXECUTED
{
switch (argv[arg][1])
11f4a1: 8a 41 01 mov 0x1(%ecx),%al <== NOT EXECUTED
11f4a4: 3c 69 cmp $0x69,%al <== NOT EXECUTED
11f4a6: 74 79 je 11f521 <rtems_shell_rfs_format+0xb2><== NOT EXECUTED
11f4a8: 7f 12 jg 11f4bc <rtems_shell_rfs_format+0x4d><== NOT EXECUTED
11f4aa: 3c 49 cmp $0x49,%al <== NOT EXECUTED
11f4ac: 0f 84 94 00 00 00 je 11f546 <rtems_shell_rfs_format+0xd7><== NOT EXECUTED
11f4b2: 3c 62 cmp $0x62,%al <== NOT EXECUTED
11f4b4: 0f 85 b4 00 00 00 jne 11f56e <rtems_shell_rfs_format+0xff><== NOT EXECUTED
11f4ba: eb 40 jmp 11f4fc <rtems_shell_rfs_format+0x8d><== NOT EXECUTED
11f4bc: 3c 73 cmp $0x73,%al <== NOT EXECUTED
11f4be: 74 17 je 11f4d7 <rtems_shell_rfs_format+0x68><== NOT EXECUTED
11f4c0: 3c 76 cmp $0x76,%al <== NOT EXECUTED
11f4c2: 74 0a je 11f4ce <rtems_shell_rfs_format+0x5f><== NOT EXECUTED
11f4c4: 3c 6f cmp $0x6f,%al <== NOT EXECUTED
11f4c6: 0f 85 a2 00 00 00 jne 11f56e <rtems_shell_rfs_format+0xff><== NOT EXECUTED
11f4cc: eb 7e jmp 11f54c <rtems_shell_rfs_format+0xdd><== NOT EXECUTED
{
case 'v':
config.verbose = true;
11f4ce: c6 45 e5 01 movb $0x1,-0x1b(%ebp) <== NOT EXECUTED
break;
11f4d2: e9 b1 00 00 00 jmp 11f588 <rtems_shell_rfs_format+0x119><== NOT EXECUTED
case 's':
arg++;
11f4d7: 43 inc %ebx <== NOT EXECUTED
if (arg >= argc)
11f4d8: 3b 5d 08 cmp 0x8(%ebp),%ebx <== NOT EXECUTED
11f4db: 7c 0d jl 11f4ea <rtems_shell_rfs_format+0x7b><== NOT EXECUTED
{
printf ("error: block size needs an argument\n");
11f4dd: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11f4e0: 68 d7 f6 14 00 push $0x14f6d7 <== NOT EXECUTED
11f4e5: e9 b4 00 00 00 jmp 11f59e <rtems_shell_rfs_format+0x12f><== NOT EXECUTED
return 1;
}
config.block_size = strtoul (argv[arg], 0, 0);
11f4ea: 50 push %eax <== NOT EXECUTED
11f4eb: 6a 00 push $0x0 <== NOT EXECUTED
11f4ed: 6a 00 push $0x0 <== NOT EXECUTED
11f4ef: ff 34 9e pushl (%esi,%ebx,4) <== NOT EXECUTED
11f4f2: e8 b1 96 01 00 call 138ba8 <strtoul> <== NOT EXECUTED
11f4f7: 89 45 d0 mov %eax,-0x30(%ebp) <== NOT EXECUTED
11f4fa: eb 45 jmp 11f541 <rtems_shell_rfs_format+0xd2><== NOT EXECUTED
break;
case 'b':
arg++;
11f4fc: 43 inc %ebx <== NOT EXECUTED
if (arg >= argc)
11f4fd: 3b 5d 08 cmp 0x8(%ebp),%ebx <== NOT EXECUTED
11f500: 7c 0d jl 11f50f <rtems_shell_rfs_format+0xa0><== NOT EXECUTED
{
printf ("error: group block count needs an argument\n");
11f502: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11f505: 68 fb f6 14 00 push $0x14f6fb <== NOT EXECUTED
11f50a: e9 8f 00 00 00 jmp 11f59e <rtems_shell_rfs_format+0x12f><== NOT EXECUTED
return 1;
}
config.group_blocks = strtoul (argv[arg], 0, 0);
11f50f: 50 push %eax <== NOT EXECUTED
11f510: 6a 00 push $0x0 <== NOT EXECUTED
11f512: 6a 00 push $0x0 <== NOT EXECUTED
11f514: ff 34 9e pushl (%esi,%ebx,4) <== NOT EXECUTED
11f517: e8 8c 96 01 00 call 138ba8 <strtoul> <== NOT EXECUTED
11f51c: 89 45 d4 mov %eax,-0x2c(%ebp) <== NOT EXECUTED
11f51f: eb 20 jmp 11f541 <rtems_shell_rfs_format+0xd2><== NOT EXECUTED
break;
case 'i':
arg++;
11f521: 43 inc %ebx <== NOT EXECUTED
if (arg >= argc)
11f522: 3b 5d 08 cmp 0x8(%ebp),%ebx <== NOT EXECUTED
11f525: 7c 0a jl 11f531 <rtems_shell_rfs_format+0xc2><== NOT EXECUTED
{
printf ("error: group inode count needs an argument\n");
11f527: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11f52a: 68 26 f7 14 00 push $0x14f726 <== NOT EXECUTED
11f52f: eb 6d jmp 11f59e <rtems_shell_rfs_format+0x12f><== NOT EXECUTED
return 1;
}
config.group_inodes = strtoul (argv[arg], 0, 0);
11f531: 50 push %eax <== NOT EXECUTED
11f532: 6a 00 push $0x0 <== NOT EXECUTED
11f534: 6a 00 push $0x0 <== NOT EXECUTED
11f536: ff 34 9e pushl (%esi,%ebx,4) <== NOT EXECUTED
11f539: e8 6a 96 01 00 call 138ba8 <strtoul> <== NOT EXECUTED
11f53e: 89 45 d8 mov %eax,-0x28(%ebp) <== NOT EXECUTED
break;
11f541: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
11f544: eb 42 jmp 11f588 <rtems_shell_rfs_format+0x119><== NOT EXECUTED
case 'I':
config.initialise_inodes = true;
11f546: c6 45 e4 01 movb $0x1,-0x1c(%ebp) <== NOT EXECUTED
break;
11f54a: eb 3c jmp 11f588 <rtems_shell_rfs_format+0x119><== NOT EXECUTED
case 'o':
arg++;
11f54c: 43 inc %ebx <== NOT EXECUTED
if (arg >= argc)
11f54d: 3b 5d 08 cmp 0x8(%ebp),%ebx <== NOT EXECUTED
11f550: 7c 0a jl 11f55c <rtems_shell_rfs_format+0xed><== NOT EXECUTED
{
printf ("error: inode percentage overhead needs an argument\n");
11f552: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11f555: 68 51 f7 14 00 push $0x14f751 <== NOT EXECUTED
11f55a: eb 42 jmp 11f59e <rtems_shell_rfs_format+0x12f><== NOT EXECUTED
return 1;
}
config.inode_overhead = strtoul (argv[arg], 0, 0);
11f55c: 50 push %eax <== NOT EXECUTED
11f55d: 6a 00 push $0x0 <== NOT EXECUTED
11f55f: 6a 00 push $0x0 <== NOT EXECUTED
11f561: ff 34 9e pushl (%esi,%ebx,4) <== NOT EXECUTED
11f564: e8 3f 96 01 00 call 138ba8 <strtoul> <== NOT EXECUTED
11f569: 89 45 dc mov %eax,-0x24(%ebp) <== NOT EXECUTED
11f56c: eb d3 jmp 11f541 <rtems_shell_rfs_format+0xd2><== NOT EXECUTED
break;
default:
printf ("error: invalid option: %s\n", argv[arg]);
11f56e: 57 push %edi <== NOT EXECUTED
11f56f: 57 push %edi <== NOT EXECUTED
11f570: 51 push %ecx <== NOT EXECUTED
11f571: 68 2a dc 14 00 push $0x14dc2a <== NOT EXECUTED
11f576: eb 5b jmp 11f5d3 <rtems_shell_rfs_format+0x164><== NOT EXECUTED
return 1;
}
}
else
{
if (!driver)
11f578: 85 ff test %edi,%edi <== NOT EXECUTED
11f57a: 74 0a je 11f586 <rtems_shell_rfs_format+0x117><== NOT EXECUTED
driver = argv[arg];
else
{
printf ("error: only one driver name allowed: %s\n", argv[arg]);
11f57c: 56 push %esi <== NOT EXECUTED
11f57d: 56 push %esi <== NOT EXECUTED
11f57e: 51 push %ecx <== NOT EXECUTED
11f57f: 68 84 f7 14 00 push $0x14f784 <== NOT EXECUTED
11f584: eb 4d jmp 11f5d3 <rtems_shell_rfs_format+0x164><== NOT EXECUTED
return 1;
}
}
else
{
if (!driver)
11f586: 89 cf mov %ecx,%edi <== NOT EXECUTED
const char* driver = NULL;
int arg;
memset (&config, 0, sizeof (rtems_rfs_format_config));
for (arg = 1; arg < argc; arg++)
11f588: 43 inc %ebx <== NOT EXECUTED
11f589: 3b 5d 08 cmp 0x8(%ebp),%ebx <== NOT EXECUTED
11f58c: 0f 8c 03 ff ff ff jl 11f495 <rtems_shell_rfs_format+0x26><== NOT EXECUTED
return 1;
}
}
}
if (!driver) {
11f592: 85 ff test %edi,%edi <== NOT EXECUTED
11f594: 75 0f jne 11f5a5 <rtems_shell_rfs_format+0x136><== NOT EXECUTED
printf ("error: no driver name provided\n");
11f596: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11f599: 68 ad f7 14 00 push $0x14f7ad <== NOT EXECUTED
11f59e: e8 b5 5c 01 00 call 135258 <puts> <== NOT EXECUTED
11f5a3: eb 33 jmp 11f5d8 <rtems_shell_rfs_format+0x169><== NOT EXECUTED
return 1;
}
if (rtems_rfs_format (driver, &config) < 0)
11f5a5: 53 push %ebx <== NOT EXECUTED
11f5a6: 53 push %ebx <== NOT EXECUTED
11f5a7: 8d 45 d0 lea -0x30(%ebp),%eax <== NOT EXECUTED
11f5aa: 50 push %eax <== NOT EXECUTED
11f5ab: 57 push %edi <== NOT EXECUTED
11f5ac: e8 51 a6 00 00 call 129c02 <rtems_rfs_format> <== NOT EXECUTED
11f5b1: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
printf ("error: format of %s failed: %s\n",
driver, strerror (errno));
return 1;
}
return 0;
11f5b4: 31 d2 xor %edx,%edx <== NOT EXECUTED
if (!driver) {
printf ("error: no driver name provided\n");
return 1;
}
if (rtems_rfs_format (driver, &config) < 0)
11f5b6: 85 c0 test %eax,%eax <== NOT EXECUTED
11f5b8: 79 26 jns 11f5e0 <rtems_shell_rfs_format+0x171><== NOT EXECUTED
{
printf ("error: format of %s failed: %s\n",
driver, strerror (errno));
11f5ba: e8 c9 18 01 00 call 130e88 <__errno> <== NOT EXECUTED
return 1;
}
if (rtems_rfs_format (driver, &config) < 0)
{
printf ("error: format of %s failed: %s\n",
11f5bf: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
11f5c2: ff 30 pushl (%eax) <== NOT EXECUTED
11f5c4: e8 cb 79 01 00 call 136f94 <strerror> <== NOT EXECUTED
11f5c9: 83 c4 0c add $0xc,%esp <== NOT EXECUTED
11f5cc: 50 push %eax <== NOT EXECUTED
11f5cd: 57 push %edi <== NOT EXECUTED
11f5ce: 68 cc f7 14 00 push $0x14f7cc <== NOT EXECUTED
11f5d3: e8 68 5a 01 00 call 135040 <printf> <== NOT EXECUTED
11f5d8: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
driver, strerror (errno));
return 1;
11f5db: ba 01 00 00 00 mov $0x1,%edx <== NOT EXECUTED
}
return 0;
}
11f5e0: 89 d0 mov %edx,%eax <== NOT EXECUTED
11f5e2: 8d 65 f4 lea -0xc(%ebp),%esp <== NOT EXECUTED
11f5e5: 5b pop %ebx <== NOT EXECUTED
11f5e6: 5e pop %esi <== NOT EXECUTED
11f5e7: 5f pop %edi <== NOT EXECUTED
11f5e8: 5d pop %ebp <== NOT EXECUTED
11f5e9: c3 ret <== NOT EXECUTED
00115724 <rtems_signal_send>:
rtems_status_code rtems_signal_send(
rtems_id id,
rtems_signal_set signal_set
)
{
115724: 55 push %ebp
115725: 89 e5 mov %esp,%ebp
115727: 53 push %ebx
115728: 83 ec 14 sub $0x14,%esp
11572b: 8b 5d 0c mov 0xc(%ebp),%ebx
Objects_Locations location;
RTEMS_API_Control *api;
ASR_Information *asr;
if ( !signal_set )
return RTEMS_INVALID_NUMBER;
11572e: b8 0a 00 00 00 mov $0xa,%eax
register Thread_Control *the_thread;
Objects_Locations location;
RTEMS_API_Control *api;
ASR_Information *asr;
if ( !signal_set )
115733: 85 db test %ebx,%ebx
115735: 74 6d je 1157a4 <rtems_signal_send+0x80>
return RTEMS_INVALID_NUMBER;
the_thread = _Thread_Get( id, &location );
115737: 50 push %eax
115738: 50 push %eax
115739: 8d 45 f4 lea -0xc(%ebp),%eax
11573c: 50 push %eax
11573d: ff 75 08 pushl 0x8(%ebp)
115740: e8 6f 3c 00 00 call 1193b4 <_Thread_Get>
switch ( location ) {
115745: 83 c4 10 add $0x10,%esp
115748: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
11574c: 75 51 jne 11579f <rtems_signal_send+0x7b>
case OBJECTS_LOCAL:
api = the_thread->API_Extensions[ THREAD_API_RTEMS ];
11574e: 8b 90 e4 00 00 00 mov 0xe4(%eax),%edx
asr = &api->Signal;
if ( ! _ASR_Is_null_handler( asr->handler ) ) {
115754: 83 7a 0c 00 cmpl $0x0,0xc(%edx)
115758: 74 39 je 115793 <rtems_signal_send+0x6f>
if ( asr->is_enabled ) {
11575a: 80 7a 08 00 cmpb $0x0,0x8(%edx)
11575e: 74 22 je 115782 <rtems_signal_send+0x5e>
rtems_signal_set *signal_set
)
{
ISR_Level _level;
_ISR_Disable( _level );
115760: 9c pushf
115761: fa cli
115762: 59 pop %ecx
*signal_set |= signals;
115763: 09 5a 14 or %ebx,0x14(%edx)
_ISR_Enable( _level );
115766: 51 push %ecx
115767: 9d popf
_ASR_Post_signals( signal_set, &asr->signals_posted );
if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) )
115768: 83 3d 60 83 14 00 00 cmpl $0x0,0x148360
11576f: 74 19 je 11578a <rtems_signal_send+0x66>
115771: 3b 05 64 83 14 00 cmp 0x148364,%eax
115777: 75 11 jne 11578a <rtems_signal_send+0x66><== NEVER TAKEN
_Thread_Dispatch_necessary = true;
115779: c6 05 70 83 14 00 01 movb $0x1,0x148370
115780: eb 08 jmp 11578a <rtems_signal_send+0x66>
rtems_signal_set *signal_set
)
{
ISR_Level _level;
_ISR_Disable( _level );
115782: 9c pushf
115783: fa cli
115784: 58 pop %eax
*signal_set |= signals;
115785: 09 5a 18 or %ebx,0x18(%edx)
_ISR_Enable( _level );
115788: 50 push %eax
115789: 9d popf
} else {
_ASR_Post_signals( signal_set, &asr->signals_pending );
}
_Thread_Enable_dispatch();
11578a: e8 05 3c 00 00 call 119394 <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
11578f: 31 c0 xor %eax,%eax
115791: eb 11 jmp 1157a4 <rtems_signal_send+0x80>
}
_Thread_Enable_dispatch();
115793: e8 fc 3b 00 00 call 119394 <_Thread_Enable_dispatch>
return RTEMS_NOT_DEFINED;
115798: b8 0b 00 00 00 mov $0xb,%eax
11579d: eb 05 jmp 1157a4 <rtems_signal_send+0x80>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
11579f: b8 04 00 00 00 mov $0x4,%eax
}
1157a4: 8b 5d fc mov -0x4(%ebp),%ebx
1157a7: c9 leave
1157a8: c3 ret
00120a83 <rtems_stack_checker_begin_extension>:
* rtems_stack_checker_Begin_extension
*/
void rtems_stack_checker_begin_extension(
Thread_Control *the_thread
)
{
120a83: 55 push %ebp
120a84: 89 e5 mov %esp,%ebp
120a86: 57 push %edi
120a87: 56 push %esi
120a88: 8b 45 08 mov 0x8(%ebp),%eax
Stack_check_Control *the_pattern;
if ( the_thread->Object.id == 0 ) /* skip system tasks */
120a8b: 83 78 08 00 cmpl $0x0,0x8(%eax)
120a8f: 74 15 je 120aa6 <rtems_stack_checker_begin_extension+0x23><== NEVER TAKEN
return;
the_pattern = Stack_check_Get_pattern_area(&the_thread->Start.Initial_stack);
*the_pattern = Stack_check_Pattern;
120a91: 8b b8 b8 00 00 00 mov 0xb8(%eax),%edi
120a97: 83 c7 08 add $0x8,%edi
120a9a: be 08 ec 16 00 mov $0x16ec08,%esi
120a9f: b9 04 00 00 00 mov $0x4,%ecx
120aa4: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
}
120aa6: 5e pop %esi
120aa7: 5f pop %edi
120aa8: 5d pop %ebp
120aa9: c3 ret
001209fc <rtems_stack_checker_create_extension>:
*/
bool rtems_stack_checker_create_extension(
Thread_Control *running __attribute__((unused)),
Thread_Control *the_thread
)
{
1209fc: 55 push %ebp
1209fd: 89 e5 mov %esp,%ebp
1209ff: 57 push %edi
120a00: 53 push %ebx
120a01: 8b 5d 0c mov 0xc(%ebp),%ebx
static uint32_t pattern[ 4 ] = {
0xFEEDF00D, 0x0BAD0D06, /* FEED FOOD to BAD DOG */
0xDEADF00D, 0x600D0D06 /* DEAD FOOD but GOOD DOG */
};
if ( Stack_check_Initialized )
120a04: 83 3d 40 da 16 00 00 cmpl $0x0,0x16da40
120a0b: 75 5a jne 120a67 <rtems_stack_checker_create_extension+0x6b>
/*
* Dope the pattern and fill areas
*/
p = Stack_check_Pattern.pattern;
for ( i = 0; i < PATTERN_SIZE_WORDS; i++ ) {
p[i] = pattern[ i%4 ];
120a0d: c7 05 08 ec 16 00 0d movl $0xfeedf00d,0x16ec08
120a14: f0 ed fe
120a17: c7 05 0c ec 16 00 06 movl $0xbad0d06,0x16ec0c
120a1e: 0d ad 0b
120a21: c7 05 10 ec 16 00 0d movl $0xdeadf00d,0x16ec10
120a28: f0 ad de
120a2b: c7 05 14 ec 16 00 06 movl $0x600d0d06,0x16ec14
120a32: 0d 0d 60
/*
* If appropriate, setup the interrupt stack for high water testing
* also.
*/
#if (CPU_ALLOCATE_INTERRUPT_STACK == TRUE)
if (_CPU_Interrupt_stack_low && _CPU_Interrupt_stack_high) {
120a35: 8b 15 f8 e6 16 00 mov 0x16e6f8,%edx
120a3b: 85 d2 test %edx,%edx
120a3d: 74 1e je 120a5d <rtems_stack_checker_create_extension+0x61><== NEVER TAKEN
120a3f: 8b 0d fc e6 16 00 mov 0x16e6fc,%ecx
120a45: 85 c9 test %ecx,%ecx
120a47: 74 14 je 120a5d <rtems_stack_checker_create_extension+0x61><== NEVER TAKEN
Stack_check_Interrupt_stack.area = _CPU_Interrupt_stack_low;
120a49: 89 15 1c ec 16 00 mov %edx,0x16ec1c
Stack_check_Interrupt_stack.size = (char *) _CPU_Interrupt_stack_high -
120a4f: 29 d1 sub %edx,%ecx
120a51: 89 0d 18 ec 16 00 mov %ecx,0x16ec18
(char *) _CPU_Interrupt_stack_low;
Stack_check_Dope_stack(&Stack_check_Interrupt_stack);
120a57: b0 a5 mov $0xa5,%al
120a59: 89 d7 mov %edx,%edi
120a5b: f3 aa rep stos %al,%es:(%edi)
}
#endif
Stack_check_Initialized = 1;
120a5d: c7 05 40 da 16 00 01 movl $0x1,0x16da40
120a64: 00 00 00
Thread_Control *the_thread
)
{
Stack_check_Initialize();
if (the_thread)
120a67: 85 db test %ebx,%ebx
120a69: 74 12 je 120a7d <rtems_stack_checker_create_extension+0x81><== NEVER TAKEN
Stack_check_Dope_stack(&the_thread->Start.Initial_stack);
120a6b: 8b 93 b8 00 00 00 mov 0xb8(%ebx),%edx
120a71: 8b 8b b4 00 00 00 mov 0xb4(%ebx),%ecx
120a77: b0 a5 mov $0xa5,%al
120a79: 89 d7 mov %edx,%edi
120a7b: f3 aa rep stos %al,%es:(%edi)
return true;
}
120a7d: b0 01 mov $0x1,%al
120a7f: 5b pop %ebx
120a80: 5f pop %edi
120a81: 5d pop %ebp
120a82: c3 ret
00120bb5 <rtems_stack_checker_is_blown>:
/*
* Check if blown
*/
bool rtems_stack_checker_is_blown( void )
{
120bb5: 55 push %ebp
120bb6: 89 e5 mov %esp,%ebp
120bb8: 53 push %ebx
120bb9: 83 ec 14 sub $0x14,%esp
Stack_Control *the_stack = &_Thread_Executing->Start.Initial_stack;
120bbc: 8b 1d 04 e7 16 00 mov 0x16e704,%ebx
)
{
#if defined(__GNUC__)
void *sp = __builtin_frame_address(0);
if ( sp < the_stack->area ) {
120bc2: 8b 93 b8 00 00 00 mov 0xb8(%ebx),%edx
return false;
120bc8: 31 c9 xor %ecx,%ecx
)
{
#if defined(__GNUC__)
void *sp = __builtin_frame_address(0);
if ( sp < the_stack->area ) {
120bca: 39 d5 cmp %edx,%ebp
120bcc: 72 0d jb 120bdb <rtems_stack_checker_is_blown+0x26><== NEVER TAKEN
return false;
}
if ( sp > (the_stack->area + the_stack->size) ) {
120bce: 8b 83 b4 00 00 00 mov 0xb4(%ebx),%eax
120bd4: 01 d0 add %edx,%eax
120bd6: 39 c5 cmp %eax,%ebp
120bd8: 0f 96 c1 setbe %cl
*/
bool rtems_stack_checker_is_blown( void )
{
Stack_Control *the_stack = &_Thread_Executing->Start.Initial_stack;
bool sp_ok;
bool pattern_ok = true;
120bdb: b0 01 mov $0x1,%al
/*
* The stack checker must be initialized before the pattern is there
* to check.
*/
if ( Stack_check_Initialized ) {
120bdd: 83 3d 40 da 16 00 00 cmpl $0x0,0x16da40
120be4: 74 1f je 120c05 <rtems_stack_checker_is_blown+0x50><== NEVER TAKEN
pattern_ok = (!memcmp(
120be6: 50 push %eax
120be7: 6a 10 push $0x10
120be9: 68 08 ec 16 00 push $0x16ec08
120bee: 83 c2 08 add $0x8,%edx
120bf1: 52 push %edx
120bf2: 88 4d f4 mov %cl,-0xc(%ebp)
120bf5: e8 6e 34 01 00 call 134068 <memcmp>
120bfa: 83 c4 10 add $0x10,%esp
120bfd: 85 c0 test %eax,%eax
120bff: 0f 94 c0 sete %al
120c02: 8a 4d f4 mov -0xc(%ebp),%cl
/*
* Let's report as much as we can.
*/
if ( !sp_ok || !pattern_ok ) {
120c05: 84 c0 test %al,%al
120c07: 74 04 je 120c0d <rtems_stack_checker_is_blown+0x58><== NEVER TAKEN
120c09: 84 c9 test %cl,%cl
120c0b: 75 0c jne 120c19 <rtems_stack_checker_is_blown+0x64><== ALWAYS TAKEN
Stack_check_report_blown_task( _Thread_Executing, pattern_ok );
120c0d: 52 push %edx <== NOT EXECUTED
120c0e: 52 push %edx <== NOT EXECUTED
120c0f: 0f b6 c0 movzbl %al,%eax <== NOT EXECUTED
120c12: 50 push %eax <== NOT EXECUTED
120c13: 53 push %ebx <== NOT EXECUTED
120c14: e8 91 fe ff ff call 120aaa <Stack_check_report_blown_task><== NOT EXECUTED
/*
* The Stack Pointer and the Pattern Area are OK so return false.
*/
return false;
}
120c19: 31 c0 xor %eax,%eax
120c1b: 8b 5d fc mov -0x4(%ebp),%ebx
120c1e: c9 leave
120c1f: c3 ret
00120c85 <rtems_stack_checker_report_usage>:
void rtems_stack_checker_report_usage( void )
{
120c85: 55 push %ebp <== NOT EXECUTED
120c86: 89 e5 mov %esp,%ebp <== NOT EXECUTED
120c88: 83 ec 10 sub $0x10,%esp <== NOT EXECUTED
rtems_stack_checker_report_usage_with_plugin( NULL, printk_plugin );
120c8b: 68 c0 28 12 00 push $0x1228c0 <== NOT EXECUTED
120c90: 6a 00 push $0x0 <== NOT EXECUTED
120c92: e8 89 ff ff ff call 120c20 <rtems_stack_checker_report_usage_with_plugin><== NOT EXECUTED
120c97: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
120c9a: c9 leave <== NOT EXECUTED
120c9b: c3 ret <== NOT EXECUTED
00120c20 <rtems_stack_checker_report_usage_with_plugin>:
void rtems_stack_checker_report_usage_with_plugin(
void *context,
rtems_printk_plugin_t print
)
{
120c20: 55 push %ebp <== NOT EXECUTED
120c21: 89 e5 mov %esp,%ebp <== NOT EXECUTED
120c23: 56 push %esi <== NOT EXECUTED
120c24: 53 push %ebx <== NOT EXECUTED
120c25: 8b 75 08 mov 0x8(%ebp),%esi <== NOT EXECUTED
120c28: 8b 5d 0c mov 0xc(%ebp),%ebx <== NOT EXECUTED
if ( !print )
120c2b: 85 db test %ebx,%ebx <== NOT EXECUTED
120c2d: 74 4f je 120c7e <rtems_stack_checker_report_usage_with_plugin+0x5e><== NOT EXECUTED
return;
print_context = context;
120c2f: 89 35 44 da 16 00 mov %esi,0x16da44 <== NOT EXECUTED
print_handler = print;
120c35: 89 1d 48 da 16 00 mov %ebx,0x16da48 <== NOT EXECUTED
(*print)( context, "Stack usage by thread\n");
120c3b: 50 push %eax <== NOT EXECUTED
120c3c: 50 push %eax <== NOT EXECUTED
120c3d: 68 57 00 15 00 push $0x150057 <== NOT EXECUTED
120c42: 56 push %esi <== NOT EXECUTED
120c43: ff d3 call *%ebx <== NOT EXECUTED
(*print)( context,
120c45: 58 pop %eax <== NOT EXECUTED
120c46: 5a pop %edx <== NOT EXECUTED
120c47: 68 6e 00 15 00 push $0x15006e <== NOT EXECUTED
120c4c: 56 push %esi <== NOT EXECUTED
120c4d: ff d3 call *%ebx <== NOT EXECUTED
" ID NAME LOW HIGH CURRENT AVAILABLE USED\n"
);
/* iterate over all threads and dump the usage */
rtems_iterate_over_all_threads( Stack_check_Dump_threads_usage );
120c4f: c7 04 24 e4 08 12 00 movl $0x1208e4,(%esp) <== NOT EXECUTED
120c56: e8 6d 36 00 00 call 1242c8 <rtems_iterate_over_all_threads><== NOT EXECUTED
#if (CPU_ALLOCATE_INTERRUPT_STACK == TRUE)
/* dump interrupt stack info if any */
Stack_check_Dump_threads_usage((Thread_Control *) -1);
120c5b: c7 04 24 ff ff ff ff movl $0xffffffff,(%esp) <== NOT EXECUTED
120c62: e8 7d fc ff ff call 1208e4 <Stack_check_Dump_threads_usage><== NOT EXECUTED
#endif
print_context = NULL;
120c67: c7 05 44 da 16 00 00 movl $0x0,0x16da44 <== NOT EXECUTED
120c6e: 00 00 00
print_handler = NULL;
120c71: c7 05 48 da 16 00 00 movl $0x0,0x16da48 <== NOT EXECUTED
120c78: 00 00 00
120c7b: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
120c7e: 8d 65 f8 lea -0x8(%ebp),%esp <== NOT EXECUTED
120c81: 5b pop %ebx <== NOT EXECUTED
120c82: 5e pop %esi <== NOT EXECUTED
120c83: 5d pop %ebp <== NOT EXECUTED
120c84: c3 ret <== NOT EXECUTED
00120b5e <rtems_stack_checker_switch_extension>:
*/
void rtems_stack_checker_switch_extension(
Thread_Control *running __attribute__((unused)),
Thread_Control *heir __attribute__((unused))
)
{
120b5e: 55 push %ebp
120b5f: 89 e5 mov %esp,%ebp
120b61: 53 push %ebx
120b62: 83 ec 14 sub $0x14,%esp
120b65: 8b 5d 08 mov 0x8(%ebp),%ebx
Stack_Control *the_stack = &running->Start.Initial_stack;
void *pattern;
bool sp_ok;
bool pattern_ok = true;
pattern = Stack_check_Get_pattern_area(the_stack);
120b68: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax
120b6e: 8d 48 08 lea 0x8(%eax),%ecx
{
#if defined(__GNUC__)
void *sp = __builtin_frame_address(0);
if ( sp < the_stack->area ) {
return false;
120b71: 31 d2 xor %edx,%edx
)
{
#if defined(__GNUC__)
void *sp = __builtin_frame_address(0);
if ( sp < the_stack->area ) {
120b73: 39 c5 cmp %eax,%ebp
120b75: 72 0b jb 120b82 <rtems_stack_checker_switch_extension+0x24><== NEVER TAKEN
return false;
}
if ( sp > (the_stack->area + the_stack->size) ) {
120b77: 03 83 b4 00 00 00 add 0xb4(%ebx),%eax
120b7d: 39 c5 cmp %eax,%ebp
120b7f: 0f 96 c2 setbe %dl
/*
* Check for an out of bounds stack pointer or an overwrite
*/
sp_ok = Stack_check_Frame_pointer_in_range( the_stack );
pattern_ok = (!memcmp( pattern,
120b82: 50 push %eax
120b83: 6a 10 push $0x10
120b85: 68 08 ec 16 00 push $0x16ec08
120b8a: 51 push %ecx
120b8b: 88 55 f4 mov %dl,-0xc(%ebp)
120b8e: e8 d5 34 01 00 call 134068 <memcmp>
120b93: 83 c4 10 add $0x10,%esp
120b96: 85 c0 test %eax,%eax
(void *) Stack_check_Pattern.pattern, PATTERN_SIZE_BYTES));
if ( !sp_ok || !pattern_ok ) {
120b98: 0f 94 c0 sete %al
120b9b: 8a 55 f4 mov -0xc(%ebp),%dl
120b9e: 75 04 jne 120ba4 <rtems_stack_checker_switch_extension+0x46><== NEVER TAKEN
120ba0: 84 d2 test %dl,%dl
120ba2: 75 0c jne 120bb0 <rtems_stack_checker_switch_extension+0x52><== ALWAYS TAKEN
Stack_check_report_blown_task( running, pattern_ok );
120ba4: 51 push %ecx <== NOT EXECUTED
120ba5: 51 push %ecx <== NOT EXECUTED
120ba6: 0f b6 c0 movzbl %al,%eax <== NOT EXECUTED
120ba9: 50 push %eax <== NOT EXECUTED
120baa: 53 push %ebx <== NOT EXECUTED
120bab: e8 fa fe ff ff call 120aaa <Stack_check_report_blown_task><== NOT EXECUTED
}
}
120bb0: 8b 5d fc mov -0x4(%ebp),%ebx
120bb3: c9 leave
120bb4: c3 ret
0010e8cc <rtems_string_to_double>:
rtems_status_code rtems_string_to_double (
const char *s,
double *n,
char **endptr
)
{
10e8cc: 55 push %ebp
10e8cd: 89 e5 mov %esp,%ebp
10e8cf: 57 push %edi
10e8d0: 56 push %esi
10e8d1: 53 push %ebx
10e8d2: 83 ec 2c sub $0x2c,%esp
10e8d5: 8b 75 08 mov 0x8(%ebp),%esi
10e8d8: 8b 5d 0c mov 0xc(%ebp),%ebx
10e8db: 8b 7d 10 mov 0x10(%ebp),%edi
double result;
char *end;
if ( !n )
return RTEMS_INVALID_ADDRESS;
10e8de: ba 09 00 00 00 mov $0x9,%edx
)
{
double result;
char *end;
if ( !n )
10e8e3: 85 db test %ebx,%ebx
10e8e5: 0f 84 95 00 00 00 je 10e980 <rtems_string_to_double+0xb4>
return RTEMS_INVALID_ADDRESS;
errno = 0;
10e8eb: e8 dc 30 00 00 call 1119cc <__errno>
10e8f0: c7 00 00 00 00 00 movl $0x0,(%eax)
*n = 0;
10e8f6: c7 03 00 00 00 00 movl $0x0,(%ebx)
10e8fc: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx)
result = strtod( s, &end );
10e903: 50 push %eax
10e904: 50 push %eax
10e905: 8d 45 e4 lea -0x1c(%ebp),%eax
10e908: 50 push %eax
10e909: 56 push %esi
10e90a: e8 61 5e 00 00 call 114770 <strtod>
if ( endptr )
10e90f: 83 c4 10 add $0x10,%esp
10e912: 85 ff test %edi,%edi
10e914: 74 05 je 10e91b <rtems_string_to_double+0x4f>
*endptr = end;
10e916: 8b 45 e4 mov -0x1c(%ebp),%eax
10e919: 89 07 mov %eax,(%edi)
if ( end == s )
return RTEMS_NOT_DEFINED;
10e91b: ba 0b 00 00 00 mov $0xb,%edx
result = strtod( s, &end );
if ( endptr )
*endptr = end;
if ( end == s )
10e920: 39 75 e4 cmp %esi,-0x1c(%ebp)
10e923: 74 4d je 10e972 <rtems_string_to_double+0xa6>
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
10e925: dd 5d c8 fstpl -0x38(%ebp)
10e928: e8 9f 30 00 00 call 1119cc <__errno>
10e92d: 83 38 22 cmpl $0x22,(%eax)
10e930: dd 45 c8 fldl -0x38(%ebp)
10e933: 75 37 jne 10e96c <rtems_string_to_double+0xa0>
10e935: d9 ee fldz
10e937: d9 c9 fxch %st(1)
10e939: dd e1 fucom %st(1)
10e93b: df e0 fnstsw %ax
10e93d: dd d9 fstp %st(1)
10e93f: 9e sahf
10e940: 7a 07 jp 10e949 <rtems_string_to_double+0x7d><== NEVER TAKEN
(( result == 0 ) || ( result == HUGE_VAL ) || ( result == -HUGE_VAL )))
return RTEMS_INVALID_NUMBER;
10e942: ba 0a 00 00 00 mov $0xa,%edx
*endptr = end;
if ( end == s )
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
10e947: 74 2d je 10e976 <rtems_string_to_double+0xaa><== NEVER TAKEN
(( result == 0 ) || ( result == HUGE_VAL ) || ( result == -HUGE_VAL )))
return RTEMS_INVALID_NUMBER;
10e949: ba 0a 00 00 00 mov $0xa,%edx
if ( end == s )
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
(( result == 0 ) || ( result == HUGE_VAL ) || ( result == -HUGE_VAL )))
10e94e: dd 05 38 45 12 00 fldl 0x124538
10e954: d9 c9 fxch %st(1)
10e956: dd e1 fucom %st(1)
10e958: df e0 fnstsw %ax
10e95a: dd d9 fstp %st(1)
10e95c: 9e sahf
10e95d: 77 1b ja 10e97a <rtems_string_to_double+0xae>
10e95f: dd 05 40 45 12 00 fldl 0x124540
10e965: dd e9 fucomp %st(1)
10e967: df e0 fnstsw %ax
10e969: 9e sahf
10e96a: 77 12 ja 10e97e <rtems_string_to_double+0xb2><== ALWAYS TAKEN
return RTEMS_INVALID_NUMBER;
*n = result;
10e96c: dd 1b fstpl (%ebx)
return RTEMS_SUCCESSFUL;
10e96e: 31 d2 xor %edx,%edx
10e970: eb 0e jmp 10e980 <rtems_string_to_double+0xb4>
10e972: dd d8 fstp %st(0)
10e974: eb 0a jmp 10e980 <rtems_string_to_double+0xb4>
10e976: dd d8 fstp %st(0) <== NOT EXECUTED
10e978: eb 06 jmp 10e980 <rtems_string_to_double+0xb4><== NOT EXECUTED
10e97a: dd d8 fstp %st(0)
10e97c: eb 02 jmp 10e980 <rtems_string_to_double+0xb4>
10e97e: dd d8 fstp %st(0)
}
10e980: 89 d0 mov %edx,%eax
10e982: 8d 65 f4 lea -0xc(%ebp),%esp
10e985: 5b pop %ebx
10e986: 5e pop %esi
10e987: 5f pop %edi
10e988: 5d pop %ebp
10e989: c3 ret
0010e98c <rtems_string_to_float>:
rtems_status_code rtems_string_to_float (
const char *s,
float *n,
char **endptr
)
{
10e98c: 55 push %ebp
10e98d: 89 e5 mov %esp,%ebp
10e98f: 57 push %edi
10e990: 56 push %esi
10e991: 53 push %ebx
10e992: 83 ec 2c sub $0x2c,%esp
10e995: 8b 75 08 mov 0x8(%ebp),%esi
10e998: 8b 5d 0c mov 0xc(%ebp),%ebx
10e99b: 8b 7d 10 mov 0x10(%ebp),%edi
float result;
char *end;
if ( !n )
return RTEMS_INVALID_ADDRESS;
10e99e: ba 09 00 00 00 mov $0x9,%edx
)
{
float result;
char *end;
if ( !n )
10e9a3: 85 db test %ebx,%ebx
10e9a5: 0f 84 8e 00 00 00 je 10ea39 <rtems_string_to_float+0xad>
return RTEMS_INVALID_ADDRESS;
errno = 0;
10e9ab: e8 1c 30 00 00 call 1119cc <__errno>
10e9b0: c7 00 00 00 00 00 movl $0x0,(%eax)
*n = 0;
10e9b6: c7 03 00 00 00 00 movl $0x0,(%ebx)
result = strtof( s, &end );
10e9bc: 50 push %eax
10e9bd: 50 push %eax
10e9be: 8d 45 e4 lea -0x1c(%ebp),%eax
10e9c1: 50 push %eax
10e9c2: 56 push %esi
10e9c3: e8 cc 5d 00 00 call 114794 <strtof>
if ( endptr )
10e9c8: 83 c4 10 add $0x10,%esp
10e9cb: 85 ff test %edi,%edi
10e9cd: 74 05 je 10e9d4 <rtems_string_to_float+0x48>
*endptr = end;
10e9cf: 8b 45 e4 mov -0x1c(%ebp),%eax
10e9d2: 89 07 mov %eax,(%edi)
if ( end == s )
return RTEMS_NOT_DEFINED;
10e9d4: ba 0b 00 00 00 mov $0xb,%edx
result = strtof( s, &end );
if ( endptr )
*endptr = end;
if ( end == s )
10e9d9: 39 75 e4 cmp %esi,-0x1c(%ebp)
10e9dc: 74 4d je 10ea2b <rtems_string_to_float+0x9f>
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
10e9de: d9 5d c8 fstps -0x38(%ebp)
10e9e1: e8 e6 2f 00 00 call 1119cc <__errno>
10e9e6: 83 38 22 cmpl $0x22,(%eax)
10e9e9: d9 45 c8 flds -0x38(%ebp)
10e9ec: 75 37 jne 10ea25 <rtems_string_to_float+0x99>
10e9ee: d9 ee fldz
10e9f0: d9 c9 fxch %st(1)
10e9f2: dd e1 fucom %st(1)
10e9f4: df e0 fnstsw %ax
10e9f6: dd d9 fstp %st(1)
10e9f8: 9e sahf
10e9f9: 7a 07 jp 10ea02 <rtems_string_to_float+0x76><== NEVER TAKEN
(( result == 0 ) || ( result == HUGE_VALF ) || ( result == -HUGE_VALF )))
return RTEMS_INVALID_NUMBER;
10e9fb: ba 0a 00 00 00 mov $0xa,%edx
*endptr = end;
if ( end == s )
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
10ea00: 74 2d je 10ea2f <rtems_string_to_float+0xa3><== NEVER TAKEN
(( result == 0 ) || ( result == HUGE_VALF ) || ( result == -HUGE_VALF )))
return RTEMS_INVALID_NUMBER;
10ea02: ba 0a 00 00 00 mov $0xa,%edx
if ( end == s )
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
(( result == 0 ) || ( result == HUGE_VALF ) || ( result == -HUGE_VALF )))
10ea07: d9 05 48 45 12 00 flds 0x124548
10ea0d: d9 c9 fxch %st(1)
10ea0f: dd e1 fucom %st(1)
10ea11: df e0 fnstsw %ax
10ea13: dd d9 fstp %st(1)
10ea15: 9e sahf
10ea16: 77 1b ja 10ea33 <rtems_string_to_float+0xa7>
10ea18: d9 05 4c 45 12 00 flds 0x12454c
10ea1e: dd e9 fucomp %st(1)
10ea20: df e0 fnstsw %ax
10ea22: 9e sahf
10ea23: 77 12 ja 10ea37 <rtems_string_to_float+0xab><== ALWAYS TAKEN
return RTEMS_INVALID_NUMBER;
*n = result;
10ea25: d9 1b fstps (%ebx)
return RTEMS_SUCCESSFUL;
10ea27: 31 d2 xor %edx,%edx
10ea29: eb 0e jmp 10ea39 <rtems_string_to_float+0xad>
10ea2b: dd d8 fstp %st(0)
10ea2d: eb 0a jmp 10ea39 <rtems_string_to_float+0xad>
10ea2f: dd d8 fstp %st(0) <== NOT EXECUTED
10ea31: eb 06 jmp 10ea39 <rtems_string_to_float+0xad><== NOT EXECUTED
10ea33: dd d8 fstp %st(0)
10ea35: eb 02 jmp 10ea39 <rtems_string_to_float+0xad>
10ea37: dd d8 fstp %st(0)
}
10ea39: 89 d0 mov %edx,%eax
10ea3b: 8d 65 f4 lea -0xc(%ebp),%esp
10ea3e: 5b pop %ebx
10ea3f: 5e pop %esi
10ea40: 5f pop %edi
10ea41: 5d pop %ebp
10ea42: c3 ret
0011c6f0 <rtems_string_to_int>:
const char *s,
int *n,
char **endptr,
int base
)
{
11c6f0: 55 push %ebp
11c6f1: 89 e5 mov %esp,%ebp
11c6f3: 57 push %edi
11c6f4: 56 push %esi
11c6f5: 53 push %ebx
11c6f6: 83 ec 1c sub $0x1c,%esp
11c6f9: 8b 5d 0c mov 0xc(%ebp),%ebx
11c6fc: 8b 7d 10 mov 0x10(%ebp),%edi
long result;
char *end;
if ( !n )
return RTEMS_INVALID_ADDRESS;
11c6ff: b8 09 00 00 00 mov $0x9,%eax
)
{
long result;
char *end;
if ( !n )
11c704: 85 db test %ebx,%ebx
11c706: 74 63 je 11c76b <rtems_string_to_int+0x7b>
return RTEMS_INVALID_ADDRESS;
errno = 0;
11c708: e8 7b 47 01 00 call 130e88 <__errno>
11c70d: c7 00 00 00 00 00 movl $0x0,(%eax)
*n = 0;
11c713: c7 03 00 00 00 00 movl $0x0,(%ebx)
result = strtol( s, &end, base );
11c719: 50 push %eax
11c71a: ff 75 14 pushl 0x14(%ebp)
11c71d: 8d 45 e4 lea -0x1c(%ebp),%eax
11c720: 50 push %eax
11c721: ff 75 08 pushl 0x8(%ebp)
11c724: e8 03 bf 01 00 call 13862c <strtol>
11c729: 89 c6 mov %eax,%esi
if ( endptr )
11c72b: 83 c4 10 add $0x10,%esp
11c72e: 85 ff test %edi,%edi
11c730: 74 05 je 11c737 <rtems_string_to_int+0x47>
*endptr = end;
11c732: 8b 45 e4 mov -0x1c(%ebp),%eax
11c735: 89 07 mov %eax,(%edi)
if ( end == s )
return RTEMS_NOT_DEFINED;
11c737: b8 0b 00 00 00 mov $0xb,%eax
result = strtol( s, &end, base );
if ( endptr )
*endptr = end;
if ( end == s )
11c73c: 8b 55 08 mov 0x8(%ebp),%edx
11c73f: 39 55 e4 cmp %edx,-0x1c(%ebp)
11c742: 74 27 je 11c76b <rtems_string_to_int+0x7b>
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
11c744: e8 3f 47 01 00 call 130e88 <__errno>
11c749: 83 38 22 cmpl $0x22,(%eax)
11c74c: 75 19 jne 11c767 <rtems_string_to_int+0x77>
(( result == 0 ) || ( result == LONG_MAX ) || ( result == LONG_MIN )))
return RTEMS_INVALID_NUMBER;
11c74e: b8 0a 00 00 00 mov $0xa,%eax
*endptr = end;
if ( end == s )
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
11c753: 81 fe ff ff ff 7f cmp $0x7fffffff,%esi
11c759: 74 10 je 11c76b <rtems_string_to_int+0x7b>
11c75b: 85 f6 test %esi,%esi
11c75d: 74 0c je 11c76b <rtems_string_to_int+0x7b><== NEVER TAKEN
(( result == 0 ) || ( result == LONG_MAX ) || ( result == LONG_MIN )))
11c75f: 81 fe 00 00 00 80 cmp $0x80000000,%esi
11c765: 74 04 je 11c76b <rtems_string_to_int+0x7b><== ALWAYS TAKEN
errno = ERANGE;
return RTEMS_INVALID_NUMBER;
}
#endif
*n = result;
11c767: 89 33 mov %esi,(%ebx)
return RTEMS_SUCCESSFUL;
11c769: 31 c0 xor %eax,%eax
}
11c76b: 8d 65 f4 lea -0xc(%ebp),%esp
11c76e: 5b pop %ebx
11c76f: 5e pop %esi
11c770: 5f pop %edi
11c771: 5d pop %ebp
11c772: c3 ret
0010eb74 <rtems_string_to_long>:
const char *s,
long *n,
char **endptr,
int base
)
{
10eb74: 55 push %ebp
10eb75: 89 e5 mov %esp,%ebp
10eb77: 57 push %edi
10eb78: 56 push %esi
10eb79: 53 push %ebx
10eb7a: 83 ec 1c sub $0x1c,%esp
10eb7d: 8b 5d 0c mov 0xc(%ebp),%ebx
10eb80: 8b 7d 10 mov 0x10(%ebp),%edi
long result;
char *end;
if ( !n )
return RTEMS_INVALID_ADDRESS;
10eb83: b8 09 00 00 00 mov $0x9,%eax
)
{
long result;
char *end;
if ( !n )
10eb88: 85 db test %ebx,%ebx
10eb8a: 74 63 je 10ebef <rtems_string_to_long+0x7b>
return RTEMS_INVALID_ADDRESS;
errno = 0;
10eb8c: e8 3b 2e 00 00 call 1119cc <__errno>
10eb91: c7 00 00 00 00 00 movl $0x0,(%eax)
*n = 0;
10eb97: c7 03 00 00 00 00 movl $0x0,(%ebx)
result = strtol( s, &end, base );
10eb9d: 50 push %eax
10eb9e: ff 75 14 pushl 0x14(%ebp)
10eba1: 8d 45 e4 lea -0x1c(%ebp),%eax
10eba4: 50 push %eax
10eba5: ff 75 08 pushl 0x8(%ebp)
10eba8: e8 fb 5d 00 00 call 1149a8 <strtol>
10ebad: 89 c6 mov %eax,%esi
if ( endptr )
10ebaf: 83 c4 10 add $0x10,%esp
10ebb2: 85 ff test %edi,%edi
10ebb4: 74 05 je 10ebbb <rtems_string_to_long+0x47>
*endptr = end;
10ebb6: 8b 45 e4 mov -0x1c(%ebp),%eax
10ebb9: 89 07 mov %eax,(%edi)
if ( end == s )
return RTEMS_NOT_DEFINED;
10ebbb: b8 0b 00 00 00 mov $0xb,%eax
result = strtol( s, &end, base );
if ( endptr )
*endptr = end;
if ( end == s )
10ebc0: 8b 55 08 mov 0x8(%ebp),%edx
10ebc3: 39 55 e4 cmp %edx,-0x1c(%ebp)
10ebc6: 74 27 je 10ebef <rtems_string_to_long+0x7b>
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
10ebc8: e8 ff 2d 00 00 call 1119cc <__errno>
10ebcd: 83 38 22 cmpl $0x22,(%eax)
10ebd0: 75 19 jne 10ebeb <rtems_string_to_long+0x77>
(( result == 0 ) || ( result == LONG_MAX ) || ( result == LONG_MIN )))
return RTEMS_INVALID_NUMBER;
10ebd2: b8 0a 00 00 00 mov $0xa,%eax
*endptr = end;
if ( end == s )
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
10ebd7: 81 fe ff ff ff 7f cmp $0x7fffffff,%esi
10ebdd: 74 10 je 10ebef <rtems_string_to_long+0x7b>
10ebdf: 85 f6 test %esi,%esi
10ebe1: 74 0c je 10ebef <rtems_string_to_long+0x7b><== NEVER TAKEN
(( result == 0 ) || ( result == LONG_MAX ) || ( result == LONG_MIN )))
10ebe3: 81 fe 00 00 00 80 cmp $0x80000000,%esi
10ebe9: 74 04 je 10ebef <rtems_string_to_long+0x7b><== ALWAYS TAKEN
return RTEMS_INVALID_NUMBER;
*n = result;
10ebeb: 89 33 mov %esi,(%ebx)
return RTEMS_SUCCESSFUL;
10ebed: 31 c0 xor %eax,%eax
}
10ebef: 8d 65 f4 lea -0xc(%ebp),%esp
10ebf2: 5b pop %ebx
10ebf3: 5e pop %esi
10ebf4: 5f pop %edi
10ebf5: 5d pop %ebp
10ebf6: c3 ret
0010eac8 <rtems_string_to_long_long>:
const char *s,
long long *n,
char **endptr,
int base
)
{
10eac8: 55 push %ebp
10eac9: 89 e5 mov %esp,%ebp
10eacb: 57 push %edi
10eacc: 56 push %esi
10eacd: 53 push %ebx
10eace: 83 ec 2c sub $0x2c,%esp
10ead1: 8b 75 08 mov 0x8(%ebp),%esi
10ead4: 8b 5d 0c mov 0xc(%ebp),%ebx
long long result;
char *end;
if ( !n )
return RTEMS_INVALID_ADDRESS;
10ead7: b8 09 00 00 00 mov $0x9,%eax
)
{
long long result;
char *end;
if ( !n )
10eadc: 85 db test %ebx,%ebx
10eade: 0f 84 85 00 00 00 je 10eb69 <rtems_string_to_long_long+0xa1>
return RTEMS_INVALID_ADDRESS;
errno = 0;
10eae4: e8 e3 2e 00 00 call 1119cc <__errno>
10eae9: c7 00 00 00 00 00 movl $0x0,(%eax)
*n = 0;
10eaef: c7 03 00 00 00 00 movl $0x0,(%ebx)
10eaf5: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx)
result = strtoll( s, &end, base );
10eafc: 50 push %eax
10eafd: ff 75 14 pushl 0x14(%ebp)
10eb00: 8d 45 e4 lea -0x1c(%ebp),%eax
10eb03: 50 push %eax
10eb04: 56 push %esi
10eb05: e8 ca 5e 00 00 call 1149d4 <strtoll>
10eb0a: 89 c7 mov %eax,%edi
if ( endptr )
10eb0c: 83 c4 10 add $0x10,%esp
10eb0f: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
10eb13: 74 08 je 10eb1d <rtems_string_to_long_long+0x55>
*endptr = end;
10eb15: 8b 45 e4 mov -0x1c(%ebp),%eax
10eb18: 8b 4d 10 mov 0x10(%ebp),%ecx
10eb1b: 89 01 mov %eax,(%ecx)
if ( end == s )
return RTEMS_NOT_DEFINED;
10eb1d: b8 0b 00 00 00 mov $0xb,%eax
result = strtoll( s, &end, base );
if ( endptr )
*endptr = end;
if ( end == s )
10eb22: 39 75 e4 cmp %esi,-0x1c(%ebp)
10eb25: 74 42 je 10eb69 <rtems_string_to_long_long+0xa1>
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
10eb27: 89 55 d4 mov %edx,-0x2c(%ebp)
10eb2a: e8 9d 2e 00 00 call 1119cc <__errno>
10eb2f: 83 38 22 cmpl $0x22,(%eax)
10eb32: 8b 55 d4 mov -0x2c(%ebp),%edx
10eb35: 75 24 jne 10eb5b <rtems_string_to_long_long+0x93>
(( result == 0 ) || ( result == LONG_LONG_MAX ) || ( result == LONG_LONG_MIN )))
10eb37: 89 fe mov %edi,%esi
10eb39: f7 d6 not %esi
10eb3b: 89 d0 mov %edx,%eax
10eb3d: 35 ff ff ff 7f xor $0x7fffffff,%eax
*endptr = end;
if ( end == s )
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
10eb42: 09 c6 or %eax,%esi
10eb44: 74 1e je 10eb64 <rtems_string_to_long_long+0x9c>
10eb46: 89 f8 mov %edi,%eax
10eb48: 09 d0 or %edx,%eax
10eb4a: 74 18 je 10eb64 <rtems_string_to_long_long+0x9c><== NEVER TAKEN
(( result == 0 ) || ( result == LONG_LONG_MAX ) || ( result == LONG_LONG_MIN )))
10eb4c: 8d b2 00 00 00 80 lea -0x80000000(%edx),%esi
return RTEMS_INVALID_NUMBER;
10eb52: b8 0a 00 00 00 mov $0xa,%eax
if ( end == s )
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
(( result == 0 ) || ( result == LONG_LONG_MAX ) || ( result == LONG_LONG_MIN )))
10eb57: 09 fe or %edi,%esi
10eb59: 74 0e je 10eb69 <rtems_string_to_long_long+0xa1><== ALWAYS TAKEN
return RTEMS_INVALID_NUMBER;
*n = result;
10eb5b: 89 3b mov %edi,(%ebx)
10eb5d: 89 53 04 mov %edx,0x4(%ebx)
return RTEMS_SUCCESSFUL;
10eb60: 31 c0 xor %eax,%eax
10eb62: eb 05 jmp 10eb69 <rtems_string_to_long_long+0xa1>
if ( end == s )
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
(( result == 0 ) || ( result == LONG_LONG_MAX ) || ( result == LONG_LONG_MIN )))
return RTEMS_INVALID_NUMBER;
10eb64: b8 0a 00 00 00 mov $0xa,%eax
*n = result;
return RTEMS_SUCCESSFUL;
}
10eb69: 8d 65 f4 lea -0xc(%ebp),%esp
10eb6c: 5b pop %ebx
10eb6d: 5e pop %esi
10eb6e: 5f pop %edi
10eb6f: 5d pop %ebp
10eb70: c3 ret
0011c78c <rtems_string_to_unsigned_char>:
const char *s,
unsigned char *n,
char **endptr,
int base
)
{
11c78c: 55 push %ebp
11c78d: 89 e5 mov %esp,%ebp
11c78f: 57 push %edi
11c790: 56 push %esi
11c791: 53 push %ebx
11c792: 83 ec 2c sub $0x2c,%esp
11c795: 8b 75 08 mov 0x8(%ebp),%esi
11c798: 8b 5d 0c mov 0xc(%ebp),%ebx
11c79b: 8b 7d 10 mov 0x10(%ebp),%edi
unsigned long result;
char *end;
if ( !n )
return RTEMS_INVALID_ADDRESS;
11c79e: ba 09 00 00 00 mov $0x9,%edx
)
{
unsigned long result;
char *end;
if ( !n )
11c7a3: 85 db test %ebx,%ebx
11c7a5: 74 6f je 11c816 <rtems_string_to_unsigned_char+0x8a>
return RTEMS_INVALID_ADDRESS;
errno = 0;
11c7a7: e8 dc 46 01 00 call 130e88 <__errno>
11c7ac: c7 00 00 00 00 00 movl $0x0,(%eax)
*n = 0;
11c7b2: c6 03 00 movb $0x0,(%ebx)
result = strtoul( s, &end, base );
11c7b5: 50 push %eax
11c7b6: ff 75 14 pushl 0x14(%ebp)
11c7b9: 8d 45 e4 lea -0x1c(%ebp),%eax
11c7bc: 50 push %eax
11c7bd: 56 push %esi
11c7be: e8 e5 c3 01 00 call 138ba8 <strtoul>
11c7c3: 89 c1 mov %eax,%ecx
if ( endptr )
11c7c5: 83 c4 10 add $0x10,%esp
11c7c8: 85 ff test %edi,%edi
11c7ca: 74 05 je 11c7d1 <rtems_string_to_unsigned_char+0x45>
*endptr = end;
11c7cc: 8b 45 e4 mov -0x1c(%ebp),%eax
11c7cf: 89 07 mov %eax,(%edi)
if ( end == s )
return RTEMS_NOT_DEFINED;
11c7d1: ba 0b 00 00 00 mov $0xb,%edx
result = strtoul( s, &end, base );
if ( endptr )
*endptr = end;
if ( end == s )
11c7d6: 39 75 e4 cmp %esi,-0x1c(%ebp)
11c7d9: 74 3b je 11c816 <rtems_string_to_unsigned_char+0x8a>
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
11c7db: 89 4d d4 mov %ecx,-0x2c(%ebp)
11c7de: e8 a5 46 01 00 call 130e88 <__errno>
11c7e3: 83 38 22 cmpl $0x22,(%eax)
11c7e6: 8b 4d d4 mov -0x2c(%ebp),%ecx
11c7e9: 75 0d jne 11c7f8 <rtems_string_to_unsigned_char+0x6c>
(( result == 0 ) || ( result == ULONG_MAX )))
11c7eb: 8d 41 ff lea -0x1(%ecx),%eax
return RTEMS_INVALID_NUMBER;
11c7ee: ba 0a 00 00 00 mov $0xa,%edx
*endptr = end;
if ( end == s )
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
11c7f3: 83 f8 fd cmp $0xfffffffd,%eax
11c7f6: 77 1e ja 11c816 <rtems_string_to_unsigned_char+0x8a><== ALWAYS TAKEN
(( result == 0 ) || ( result == ULONG_MAX )))
return RTEMS_INVALID_NUMBER;
#if (UCHAR_MAX < ULONG_MAX)
if ( result > UCHAR_MAX ) {
11c7f8: 81 f9 ff 00 00 00 cmp $0xff,%ecx
11c7fe: 76 12 jbe 11c812 <rtems_string_to_unsigned_char+0x86>
errno = ERANGE;
11c800: e8 83 46 01 00 call 130e88 <__errno>
11c805: c7 00 22 00 00 00 movl $0x22,(%eax)
return RTEMS_INVALID_NUMBER;
11c80b: ba 0a 00 00 00 mov $0xa,%edx
11c810: eb 04 jmp 11c816 <rtems_string_to_unsigned_char+0x8a>
}
#endif
*n = result;
11c812: 88 0b mov %cl,(%ebx)
return RTEMS_SUCCESSFUL;
11c814: 31 d2 xor %edx,%edx
}
11c816: 89 d0 mov %edx,%eax
11c818: 8d 65 f4 lea -0xc(%ebp),%esp
11c81b: 5b pop %ebx
11c81c: 5e pop %esi
11c81d: 5f pop %edi
11c81e: 5d pop %ebp
11c81f: c3 ret
0010eca4 <rtems_string_to_unsigned_int>:
const char *s,
unsigned int *n,
char **endptr,
int base
)
{
10eca4: 55 push %ebp
10eca5: 89 e5 mov %esp,%ebp
10eca7: 57 push %edi
10eca8: 56 push %esi
10eca9: 53 push %ebx
10ecaa: 83 ec 1c sub $0x1c,%esp
10ecad: 8b 5d 0c mov 0xc(%ebp),%ebx
10ecb0: 8b 7d 10 mov 0x10(%ebp),%edi
unsigned long result;
char *end;
if ( !n )
return RTEMS_INVALID_ADDRESS;
10ecb3: ba 09 00 00 00 mov $0x9,%edx
)
{
unsigned long result;
char *end;
if ( !n )
10ecb8: 85 db test %ebx,%ebx
10ecba: 74 57 je 10ed13 <rtems_string_to_unsigned_int+0x6f>
return RTEMS_INVALID_ADDRESS;
errno = 0;
10ecbc: e8 0b 2d 00 00 call 1119cc <__errno>
10ecc1: c7 00 00 00 00 00 movl $0x0,(%eax)
*n = 0;
10ecc7: c7 03 00 00 00 00 movl $0x0,(%ebx)
result = strtoul( s, &end, base );
10eccd: 50 push %eax
10ecce: ff 75 14 pushl 0x14(%ebp)
10ecd1: 8d 45 e4 lea -0x1c(%ebp),%eax
10ecd4: 50 push %eax
10ecd5: ff 75 08 pushl 0x8(%ebp)
10ecd8: e8 47 62 00 00 call 114f24 <strtoul>
10ecdd: 89 c6 mov %eax,%esi
if ( endptr )
10ecdf: 83 c4 10 add $0x10,%esp
10ece2: 85 ff test %edi,%edi
10ece4: 74 05 je 10eceb <rtems_string_to_unsigned_int+0x47>
*endptr = end;
10ece6: 8b 45 e4 mov -0x1c(%ebp),%eax
10ece9: 89 07 mov %eax,(%edi)
if ( end == s )
return RTEMS_NOT_DEFINED;
10eceb: ba 0b 00 00 00 mov $0xb,%edx
result = strtoul( s, &end, base );
if ( endptr )
*endptr = end;
if ( end == s )
10ecf0: 8b 45 08 mov 0x8(%ebp),%eax
10ecf3: 39 45 e4 cmp %eax,-0x1c(%ebp)
10ecf6: 74 1b je 10ed13 <rtems_string_to_unsigned_int+0x6f>
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
10ecf8: e8 cf 2c 00 00 call 1119cc <__errno>
10ecfd: 83 38 22 cmpl $0x22,(%eax)
10ed00: 75 0d jne 10ed0f <rtems_string_to_unsigned_int+0x6b>
(( result == 0 ) || ( result == ULONG_MAX )))
10ed02: 8d 46 ff lea -0x1(%esi),%eax
return RTEMS_INVALID_NUMBER;
10ed05: ba 0a 00 00 00 mov $0xa,%edx
*endptr = end;
if ( end == s )
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
10ed0a: 83 f8 fd cmp $0xfffffffd,%eax
10ed0d: 77 04 ja 10ed13 <rtems_string_to_unsigned_int+0x6f><== ALWAYS TAKEN
errno = ERANGE;
return RTEMS_INVALID_NUMBER;
}
#endif
*n = result;
10ed0f: 89 33 mov %esi,(%ebx)
return RTEMS_SUCCESSFUL;
10ed11: 31 d2 xor %edx,%edx
}
10ed13: 89 d0 mov %edx,%eax
10ed15: 8d 65 f4 lea -0xc(%ebp),%esp
10ed18: 5b pop %ebx
10ed19: 5e pop %esi
10ed1a: 5f pop %edi
10ed1b: 5d pop %ebp
10ed1c: c3 ret
0010d460 <rtems_string_to_unsigned_long>:
const char *s,
unsigned long *n,
char **endptr,
int base
)
{
10d460: 55 push %ebp
10d461: 89 e5 mov %esp,%ebp
10d463: 57 push %edi
10d464: 56 push %esi
10d465: 53 push %ebx
10d466: 83 ec 1c sub $0x1c,%esp
10d469: 8b 5d 0c mov 0xc(%ebp),%ebx
10d46c: 8b 7d 10 mov 0x10(%ebp),%edi
unsigned long result;
char *end;
if ( !n )
return RTEMS_INVALID_ADDRESS;
10d46f: ba 09 00 00 00 mov $0x9,%edx
)
{
unsigned long result;
char *end;
if ( !n )
10d474: 85 db test %ebx,%ebx
10d476: 74 57 je 10d4cf <rtems_string_to_unsigned_long+0x6f>
return RTEMS_INVALID_ADDRESS;
errno = 0;
10d478: e8 0b 3a 02 00 call 130e88 <__errno>
10d47d: c7 00 00 00 00 00 movl $0x0,(%eax)
*n = 0;
10d483: c7 03 00 00 00 00 movl $0x0,(%ebx)
result = strtoul( s, &end, base );
10d489: 50 push %eax
10d48a: ff 75 14 pushl 0x14(%ebp)
10d48d: 8d 45 e4 lea -0x1c(%ebp),%eax
10d490: 50 push %eax
10d491: ff 75 08 pushl 0x8(%ebp)
10d494: e8 0f b7 02 00 call 138ba8 <strtoul>
10d499: 89 c6 mov %eax,%esi
if ( endptr )
10d49b: 83 c4 10 add $0x10,%esp
10d49e: 85 ff test %edi,%edi
10d4a0: 74 05 je 10d4a7 <rtems_string_to_unsigned_long+0x47>
*endptr = end;
10d4a2: 8b 45 e4 mov -0x1c(%ebp),%eax
10d4a5: 89 07 mov %eax,(%edi)
if ( end == s )
return RTEMS_NOT_DEFINED;
10d4a7: ba 0b 00 00 00 mov $0xb,%edx
result = strtoul( s, &end, base );
if ( endptr )
*endptr = end;
if ( end == s )
10d4ac: 8b 45 08 mov 0x8(%ebp),%eax
10d4af: 39 45 e4 cmp %eax,-0x1c(%ebp)
10d4b2: 74 1b je 10d4cf <rtems_string_to_unsigned_long+0x6f>
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
10d4b4: e8 cf 39 02 00 call 130e88 <__errno>
10d4b9: 83 38 22 cmpl $0x22,(%eax)
10d4bc: 75 0d jne 10d4cb <rtems_string_to_unsigned_long+0x6b>
(( result == 0 ) || ( result == ULONG_MAX )))
10d4be: 8d 46 ff lea -0x1(%esi),%eax
return RTEMS_INVALID_NUMBER;
10d4c1: ba 0a 00 00 00 mov $0xa,%edx
*endptr = end;
if ( end == s )
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
10d4c6: 83 f8 fd cmp $0xfffffffd,%eax
10d4c9: 77 04 ja 10d4cf <rtems_string_to_unsigned_long+0x6f><== ALWAYS TAKEN
(( result == 0 ) || ( result == ULONG_MAX )))
return RTEMS_INVALID_NUMBER;
*n = result;
10d4cb: 89 33 mov %esi,(%ebx)
return RTEMS_SUCCESSFUL;
10d4cd: 31 d2 xor %edx,%edx
}
10d4cf: 89 d0 mov %edx,%eax
10d4d1: 8d 65 f4 lea -0xc(%ebp),%esp
10d4d4: 5b pop %ebx
10d4d5: 5e pop %esi
10d4d6: 5f pop %edi
10d4d7: 5d pop %ebp
10d4d8: c3 ret
0010ed20 <rtems_string_to_unsigned_long_long>:
const char *s,
unsigned long long *n,
char **endptr,
int base
)
{
10ed20: 55 push %ebp
10ed21: 89 e5 mov %esp,%ebp
10ed23: 57 push %edi
10ed24: 56 push %esi
10ed25: 53 push %ebx
10ed26: 83 ec 1c sub $0x1c,%esp
10ed29: 8b 5d 08 mov 0x8(%ebp),%ebx
unsigned long long result;
char *end;
if ( !n )
return RTEMS_INVALID_ADDRESS;
10ed2c: b8 09 00 00 00 mov $0x9,%eax
)
{
unsigned long long result;
char *end;
if ( !n )
10ed31: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
10ed35: 74 75 je 10edac <rtems_string_to_unsigned_long_long+0x8c>
return RTEMS_INVALID_ADDRESS;
errno = 0;
10ed37: e8 90 2c 00 00 call 1119cc <__errno>
10ed3c: c7 00 00 00 00 00 movl $0x0,(%eax)
*n = 0;
10ed42: 8b 45 0c mov 0xc(%ebp),%eax
10ed45: c7 00 00 00 00 00 movl $0x0,(%eax)
10ed4b: c7 40 04 00 00 00 00 movl $0x0,0x4(%eax)
result = strtoull( s, &end, base );
10ed52: 50 push %eax
10ed53: ff 75 14 pushl 0x14(%ebp)
10ed56: 8d 45 e4 lea -0x1c(%ebp),%eax
10ed59: 50 push %eax
10ed5a: 53 push %ebx
10ed5b: e8 f0 61 00 00 call 114f50 <strtoull>
10ed60: 89 c6 mov %eax,%esi
10ed62: 89 d7 mov %edx,%edi
if ( endptr )
10ed64: 83 c4 10 add $0x10,%esp
10ed67: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
10ed6b: 74 08 je 10ed75 <rtems_string_to_unsigned_long_long+0x55>
*endptr = end;
10ed6d: 8b 45 e4 mov -0x1c(%ebp),%eax
10ed70: 8b 55 10 mov 0x10(%ebp),%edx
10ed73: 89 02 mov %eax,(%edx)
if ( end == s )
return RTEMS_NOT_DEFINED;
10ed75: b8 0b 00 00 00 mov $0xb,%eax
result = strtoull( s, &end, base );
if ( endptr )
*endptr = end;
if ( end == s )
10ed7a: 39 5d e4 cmp %ebx,-0x1c(%ebp)
10ed7d: 74 2d je 10edac <rtems_string_to_unsigned_long_long+0x8c>
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
10ed7f: e8 48 2c 00 00 call 1119cc <__errno>
10ed84: 83 38 22 cmpl $0x22,(%eax)
10ed87: 75 19 jne 10eda2 <rtems_string_to_unsigned_long_long+0x82>
(( result == 0 ) || ( result == ULONG_LONG_MAX )))
10ed89: 89 f1 mov %esi,%ecx
10ed8b: 89 fb mov %edi,%ebx
10ed8d: 83 c1 ff add $0xffffffff,%ecx
10ed90: 83 d3 ff adc $0xffffffff,%ebx
*endptr = end;
if ( end == s )
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
10ed93: 83 fb ff cmp $0xffffffff,%ebx
10ed96: 72 0a jb 10eda2 <rtems_string_to_unsigned_long_long+0x82><== NEVER TAKEN
(( result == 0 ) || ( result == ULONG_LONG_MAX )))
return RTEMS_INVALID_NUMBER;
10ed98: b8 0a 00 00 00 mov $0xa,%eax
*endptr = end;
if ( end == s )
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
10ed9d: 83 f9 fd cmp $0xfffffffd,%ecx
10eda0: 77 0a ja 10edac <rtems_string_to_unsigned_long_long+0x8c><== ALWAYS TAKEN
(( result == 0 ) || ( result == ULONG_LONG_MAX )))
return RTEMS_INVALID_NUMBER;
*n = result;
10eda2: 8b 45 0c mov 0xc(%ebp),%eax
10eda5: 89 30 mov %esi,(%eax)
10eda7: 89 78 04 mov %edi,0x4(%eax)
return RTEMS_SUCCESSFUL;
10edaa: 31 c0 xor %eax,%eax
}
10edac: 8d 65 f4 lea -0xc(%ebp),%esp
10edaf: 5b pop %ebx
10edb0: 5e pop %esi
10edb1: 5f pop %edi
10edb2: 5d pop %ebp
10edb3: c3 ret
001062b0 <rtems_tarfs_load>:
int rtems_tarfs_load(
const char *mountpoint,
uint8_t *tar_image,
size_t tar_size
)
{
1062b0: 55 push %ebp
1062b1: 89 e5 mov %esp,%ebp
1062b3: 57 push %edi
1062b4: 56 push %esi
1062b5: 53 push %ebx
1062b6: 81 ec f0 01 00 00 sub $0x1f0,%esp
IMFS_jnode_t *node;
int rv = 0;
int eval_flags = RTEMS_FS_FOLLOW_LINK;
rtems_filesystem_eval_path_context_t ctx;
rtems_filesystem_location_info_t rootloc;
rtems_filesystem_location_info_t *currentloc =
1062bc: 6a 18 push $0x18
1062be: ff 75 08 pushl 0x8(%ebp)
rtems_filesystem_eval_path_start( &ctx, mountpoint, eval_flags );
1062c1: 8d 85 4c fe ff ff lea -0x1b4(%ebp),%eax
IMFS_jnode_t *node;
int rv = 0;
int eval_flags = RTEMS_FS_FOLLOW_LINK;
rtems_filesystem_eval_path_context_t ctx;
rtems_filesystem_location_info_t rootloc;
rtems_filesystem_location_info_t *currentloc =
1062c7: 50 push %eax
1062c8: e8 28 1c 00 00 call 107ef5 <rtems_filesystem_eval_path_start>
1062cd: 89 c6 mov %eax,%esi
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(
1062cf: 5b pop %ebx
1062d0: 5f pop %edi
1062d1: 8d 85 64 fe ff ff lea -0x19c(%ebp),%eax
1062d7: 50 push %eax
rtems_filesystem_eval_path_start( &ctx, mountpoint, eval_flags );
rtems_filesystem_eval_path_extract_currentloc( &ctx, &rootloc );
1062d8: 8d 85 34 fe ff ff lea -0x1cc(%ebp),%eax
1062de: 50 push %eax
1062df: e8 6b 1f 00 00 call 10824f <rtems_filesystem_location_copy_and_detach>
static inline void rtems_filesystem_eval_path_set_flags(
rtems_filesystem_eval_path_context_t *ctx,
int flags
)
{
ctx->flags = flags;
1062e4: c7 85 5c fe ff ff 60 movl $0x60,-0x1a4(%ebp)
1062eb: 00 00 00
&ctx,
RTEMS_FS_MAKE | RTEMS_FS_EXCLUSIVE
);
if (
rootloc.mt_entry->ops != &IMFS_ops
1062ee: 8b 85 48 fe ff ff mov -0x1b8(%ebp),%eax
1062f4: 8b 40 0c mov 0xc(%eax),%eax
rtems_filesystem_eval_path_set_flags(
&ctx,
RTEMS_FS_MAKE | RTEMS_FS_EXCLUSIVE
);
if (
1062f7: 83 c4 10 add $0x10,%esp
1062fa: 3d e8 3d 12 00 cmp $0x123de8,%eax
1062ff: 74 0b je 10630c <rtems_tarfs_load+0x5c>
rootloc.mt_entry->ops != &IMFS_ops
&& rootloc.mt_entry->ops != &fifoIMFS_ops
106301: 3d 00 49 12 00 cmp $0x124900,%eax
106306: 0f 85 ee 01 00 00 jne 1064fa <rtems_tarfs_load+0x24a><== ALWAYS TAKEN
rtems_filesystem_eval_path_set_flags(
&ctx,
RTEMS_FS_MAKE | RTEMS_FS_EXCLUSIVE
);
if (
10630c: 31 db xor %ebx,%ebx
hdr_ptr = (char *) &tar_image[offset];
offset += 512;
if (strncmp(&hdr_ptr[257], "ustar", 5))
break;
strncpy(filename, hdr_ptr, MAX_NAME_FIELD_SIZE);
10630e: 8d 85 84 fe ff ff lea -0x17c(%ebp),%eax
106314: 89 85 24 fe ff ff mov %eax,-0x1dc(%ebp)
/*
* Create an IMFS node structure pointing to tar image memory.
*/
offset = 0;
while ( rv == 0 ) {
if (offset + 512 > tar_size)
10631a: 8d 93 00 02 00 00 lea 0x200(%ebx),%edx
106320: 89 95 20 fe ff ff mov %edx,-0x1e0(%ebp)
106326: 8b 45 10 mov 0x10(%ebp),%eax
106329: 39 c2 cmp %eax,%edx
10632b: 0f 87 ce 01 00 00 ja 1064ff <rtems_tarfs_load+0x24f><== NEVER TAKEN
break;
/*
* Read a header.
*/
hdr_ptr = (char *) &tar_image[offset];
106331: 03 5d 0c add 0xc(%ebp),%ebx
offset += 512;
if (strncmp(&hdr_ptr[257], "ustar", 5))
106334: 51 push %ecx
106335: 6a 05 push $0x5
106337: 68 6c 3e 12 00 push $0x123e6c
10633c: 8d 83 01 01 00 00 lea 0x101(%ebx),%eax
106342: 50 push %eax
106343: e8 24 ed 00 00 call 11506c <strncmp>
106348: 83 c4 10 add $0x10,%esp
10634b: 85 c0 test %eax,%eax
10634d: 0f 85 ac 01 00 00 jne 1064ff <rtems_tarfs_load+0x24f>
break;
strncpy(filename, hdr_ptr, MAX_NAME_FIELD_SIZE);
106353: 50 push %eax
106354: 6a 63 push $0x63
106356: 53 push %ebx
106357: 8d 95 84 fe ff ff lea -0x17c(%ebp),%edx
10635d: 52 push %edx
10635e: e8 c9 ed 00 00 call 11512c <strncpy>
filename[MAX_NAME_FIELD_SIZE] = '\0';
106363: c6 85 e7 fe ff ff 00 movb $0x0,-0x119(%ebp)
linkflag = hdr_ptr[156];
10636a: 8a 93 9c 00 00 00 mov 0x9c(%ebx),%dl
file_mode = _rtems_octal2ulong(&hdr_ptr[100], 8);
106370: 58 pop %eax
106371: 59 pop %ecx
106372: 6a 08 push $0x8
106374: 8d 43 64 lea 0x64(%ebx),%eax
106377: 50 push %eax
106378: 88 95 14 fe ff ff mov %dl,-0x1ec(%ebp)
10637e: e8 bd 73 00 00 call 10d740 <_rtems_octal2ulong>
106383: 89 85 18 fe ff ff mov %eax,-0x1e8(%ebp)
file_size = _rtems_octal2ulong(&hdr_ptr[124], 12);
106389: 5f pop %edi
10638a: 58 pop %eax
10638b: 6a 0c push $0xc
10638d: 8d 43 7c lea 0x7c(%ebx),%eax
106390: 50 push %eax
106391: e8 aa 73 00 00 call 10d740 <_rtems_octal2ulong>
106396: 89 85 1c fe ff ff mov %eax,-0x1e4(%ebp)
hdr_chksum = _rtems_octal2ulong(&hdr_ptr[148], 8);
10639c: 58 pop %eax
10639d: 5a pop %edx
10639e: 6a 08 push $0x8
1063a0: 8d 83 94 00 00 00 lea 0x94(%ebx),%eax
1063a6: 50 push %eax
1063a7: e8 94 73 00 00 call 10d740 <_rtems_octal2ulong>
1063ac: 89 c7 mov %eax,%edi
if (_rtems_tar_header_checksum(hdr_ptr) != hdr_chksum)
1063ae: 89 1c 24 mov %ebx,(%esp)
1063b1: e8 b0 73 00 00 call 10d766 <_rtems_tar_header_checksum>
1063b6: 83 c4 10 add $0x10,%esp
1063b9: 39 f8 cmp %edi,%eax
1063bb: 8a 95 14 fe ff ff mov -0x1ec(%ebp),%dl
1063c1: 0f 85 38 01 00 00 jne 1064ff <rtems_tarfs_load+0x24f><== NEVER TAKEN
* Generate an IMFS node depending on the file type.
* - For directories, just create directories as usual. IMFS
* will take care of the rest.
* - For files, create a file node with special tarfs properties.
*/
if (linkflag == DIRTYPE) {
1063c7: 80 fa 35 cmp $0x35,%dl
1063ca: 75 63 jne 10642f <rtems_tarfs_load+0x17f>
strcpy(full_filename, mountpoint);
1063cc: 50 push %eax
1063cd: 50 push %eax
1063ce: ff 75 08 pushl 0x8(%ebp)
1063d1: 8d 9d e8 fe ff ff lea -0x118(%ebp),%ebx
1063d7: 53 push %ebx
1063d8: e8 07 e8 00 00 call 114be4 <strcpy>
if (full_filename[strlen(full_filename)-1] != '/')
1063dd: 31 c0 xor %eax,%eax
1063df: 83 c9 ff or $0xffffffff,%ecx
1063e2: 89 df mov %ebx,%edi
1063e4: f2 ae repnz scas %es:(%edi),%al
1063e6: f7 d1 not %ecx
1063e8: 83 c4 10 add $0x10,%esp
1063eb: 80 bc 0d e6 fe ff ff cmpb $0x2f,-0x11a(%ebp,%ecx,1)
1063f2: 2f
1063f3: 74 10 je 106405 <rtems_tarfs_load+0x155><== ALWAYS TAKEN
strcat(full_filename, "/");
1063f5: 50 push %eax <== NOT EXECUTED
1063f6: 50 push %eax <== NOT EXECUTED
1063f7: 68 79 00 12 00 push $0x120079 <== NOT EXECUTED
1063fc: 53 push %ebx <== NOT EXECUTED
1063fd: e8 26 e6 00 00 call 114a28 <strcat> <== NOT EXECUTED
106402: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
strcat(full_filename, filename);
106405: 53 push %ebx
106406: 53 push %ebx
106407: 8d 85 84 fe ff ff lea -0x17c(%ebp),%eax
10640d: 50 push %eax
10640e: 8d 9d e8 fe ff ff lea -0x118(%ebp),%ebx
106414: 53 push %ebx
106415: e8 0e e6 00 00 call 114a28 <strcat>
mkdir(full_filename, S_IRWXU | S_IRWXG | S_IRWXO);
10641a: 5f pop %edi
10641b: 58 pop %eax
10641c: 68 ff 01 00 00 push $0x1ff
106421: 53 push %ebx
106422: e8 f1 0c 00 00 call 107118 <mkdir>
106427: 83 c4 10 add $0x10,%esp
10642a: e9 c0 00 00 00 jmp 1064ef <rtems_tarfs_load+0x23f>
}
/*
* Create a LINEAR_FILE node
*/
else if (linkflag == REGTYPE) {
10642f: 80 fa 30 cmp $0x30,%dl
106432: 0f 85 b7 00 00 00 jne 1064ef <rtems_tarfs_load+0x23f>
rtems_filesystem_location_free( currentloc );
106438: 83 ec 0c sub $0xc,%esp
10643b: 56 push %esi
10643c: e8 a7 07 00 00 call 106be8 <rtems_filesystem_location_free>
rtems_filesystem_location_clone( currentloc, &rootloc );
106441: 5a pop %edx
106442: 59 pop %ecx
106443: 8d 95 34 fe ff ff lea -0x1cc(%ebp),%edx
106449: 52 push %edx
10644a: 56 push %esi
10644b: e8 1c 05 00 00 call 10696c <rtems_filesystem_location_clone>
rtems_filesystem_eval_path_set_path(
106450: 31 c0 xor %eax,%eax
106452: 83 c9 ff or $0xffffffff,%ecx
106455: 8b bd 24 fe ff ff mov -0x1dc(%ebp),%edi
10645b: f2 ae repnz scas %es:(%edi),%al
10645d: f7 d1 not %ecx
10645f: 49 dec %ecx
rtems_filesystem_eval_path_context_t *ctx,
const char *path,
size_t pathlen
)
{
ctx->path = path;
106460: 8d 85 84 fe ff ff lea -0x17c(%ebp),%eax
106466: 89 85 4c fe ff ff mov %eax,-0x1b4(%ebp)
ctx->pathlen = pathlen;
10646c: 89 8d 50 fe ff ff mov %ecx,-0x1b0(%ebp)
&ctx,
filename,
strlen( filename )
);
rtems_filesystem_eval_path_continue( &ctx );
106472: 8d 85 4c fe ff ff lea -0x1b4(%ebp),%eax
106478: 89 04 24 mov %eax,(%esp)
10647b: e8 1b 19 00 00 call 107d9b <rtems_filesystem_eval_path_continue>
if ( !rtems_filesystem_location_is_null( currentloc ) ) {
106480: 83 c4 10 add $0x10,%esp
106483: 81 7e 10 64 45 12 00 cmpl $0x124564,0x10(%esi)
10648a: 74 4d je 1064d9 <rtems_tarfs_load+0x229><== NEVER TAKEN
10648c: 50 push %eax
10648d: 50 push %eax
10648e: 6a 00 push $0x0
node = IMFS_create_node(
currentloc,
IMFS_LINEAR_FILE,
rtems_filesystem_eval_path_get_token( &ctx ),
rtems_filesystem_eval_path_get_tokenlen( &ctx ),
(file_mode & (S_IRWXU | S_IRWXG | S_IRWXO)) | S_IFREG,
106490: 8b 85 18 fe ff ff mov -0x1e8(%ebp),%eax
106496: 25 ff 01 00 00 and $0x1ff,%eax
strlen( filename )
);
rtems_filesystem_eval_path_continue( &ctx );
if ( !rtems_filesystem_location_is_null( currentloc ) ) {
node = IMFS_create_node(
10649b: 80 cc 80 or $0x80,%ah
10649e: 50 push %eax
10649f: ff b5 58 fe ff ff pushl -0x1a8(%ebp)
1064a5: ff b5 54 fe ff ff pushl -0x1ac(%ebp)
size_t namelen,
mode_t mode,
const IMFS_types_union *info
)
{
const IMFS_fs_info_t *fs_info =
1064ab: 8b 46 14 mov 0x14(%esi),%eax
(const IMFS_fs_info_t *) parentloc->mt_entry->fs_info;
return IMFS_create_node_with_control(
1064ae: 8b 40 08 mov 0x8(%eax),%eax
1064b1: ff 70 1c pushl 0x1c(%eax)
1064b4: 56 push %esi
1064b5: e8 36 79 00 00 call 10ddf0 <IMFS_create_node_with_control>
rtems_filesystem_eval_path_get_token( &ctx ),
rtems_filesystem_eval_path_get_tokenlen( &ctx ),
(file_mode & (S_IRWXU | S_IRWXG | S_IRWXO)) | S_IFREG,
NULL
);
node->info.linearfile.size = file_size;
1064ba: 8b 95 1c fe ff ff mov -0x1e4(%ebp),%edx
1064c0: 89 50 50 mov %edx,0x50(%eax)
1064c3: c7 40 54 00 00 00 00 movl $0x0,0x54(%eax)
node->info.linearfile.direct = &tar_image[offset];
1064ca: 8b 55 0c mov 0xc(%ebp),%edx
1064cd: 03 95 20 fe ff ff add -0x1e0(%ebp),%edx
1064d3: 89 50 58 mov %edx,0x58(%eax)
1064d6: 83 c4 20 add $0x20,%esp
}
nblocks = (((file_size) + 511) & ~511) / 512;
1064d9: 8b 85 1c fe ff ff mov -0x1e4(%ebp),%eax
1064df: 05 ff 01 00 00 add $0x1ff,%eax
offset += 512 * nblocks;
1064e4: 25 00 fe ff ff and $0xfffffe00,%eax
1064e9: 01 85 20 fe ff ff add %eax,-0x1e0(%ebp)
rtems_filesystem_eval_path_set_flags(
&ctx,
RTEMS_FS_MAKE | RTEMS_FS_EXCLUSIVE
);
if (
1064ef: 8b 9d 20 fe ff ff mov -0x1e0(%ebp),%ebx
1064f5: e9 20 fe ff ff jmp 10631a <rtems_tarfs_load+0x6a>
rootloc.mt_entry->ops != &IMFS_ops
&& rootloc.mt_entry->ops != &fifoIMFS_ops
) {
rv = -1;
1064fa: 83 cb ff or $0xffffffff,%ebx
1064fd: eb 02 jmp 106501 <rtems_tarfs_load+0x251>
linkflag = hdr_ptr[156];
file_mode = _rtems_octal2ulong(&hdr_ptr[100], 8);
file_size = _rtems_octal2ulong(&hdr_ptr[124], 12);
hdr_chksum = _rtems_octal2ulong(&hdr_ptr[148], 8);
if (_rtems_tar_header_checksum(hdr_ptr) != hdr_chksum)
1064ff: 31 db xor %ebx,%ebx
nblocks = (((file_size) + 511) & ~511) / 512;
offset += 512 * nblocks;
}
}
rtems_filesystem_location_free( &rootloc );
106501: 83 ec 0c sub $0xc,%esp
106504: 8d 85 34 fe ff ff lea -0x1cc(%ebp),%eax
10650a: 50 push %eax
10650b: e8 d8 06 00 00 call 106be8 <rtems_filesystem_location_free>
rtems_filesystem_eval_path_cleanup( &ctx );
106510: 8d 85 4c fe ff ff lea -0x1b4(%ebp),%eax
106516: 89 04 24 mov %eax,(%esp)
106519: e8 93 1a 00 00 call 107fb1 <rtems_filesystem_eval_path_cleanup>
return rv;
}
10651e: 89 d8 mov %ebx,%eax
106520: 8d 65 f4 lea -0xc(%ebp),%esp
106523: 5b pop %ebx
106524: 5e pop %esi
106525: 5f pop %edi
106526: 5d pop %ebp
106527: c3 ret
0010b68c <rtems_task_get_note>:
rtems_status_code rtems_task_get_note(
rtems_id id,
uint32_t notepad,
uint32_t *note
)
{
10b68c: 55 push %ebp
10b68d: 89 e5 mov %esp,%ebp
10b68f: 56 push %esi
10b690: 53 push %ebx
10b691: 83 ec 10 sub $0x10,%esp
10b694: 8b 55 08 mov 0x8(%ebp),%edx
10b697: 8b 75 0c mov 0xc(%ebp),%esi
10b69a: 8b 5d 10 mov 0x10(%ebp),%ebx
register Thread_Control *the_thread;
Objects_Locations location;
RTEMS_API_Control *api;
if ( !rtems_configuration_get_notepads_enabled() )
return RTEMS_NOT_CONFIGURED;
10b69d: b8 16 00 00 00 mov $0x16,%eax
{
register Thread_Control *the_thread;
Objects_Locations location;
RTEMS_API_Control *api;
if ( !rtems_configuration_get_notepads_enabled() )
10b6a2: 80 3d 54 cf 12 00 00 cmpb $0x0,0x12cf54
10b6a9: 74 5d je 10b708 <rtems_task_get_note+0x7c><== NEVER TAKEN
return RTEMS_NOT_CONFIGURED;
if ( !note )
10b6ab: 85 db test %ebx,%ebx
10b6ad: 74 4d je 10b6fc <rtems_task_get_note+0x70>
* NOTE: There is no check for < RTEMS_NOTEPAD_FIRST because that would
* be checking an unsigned number for being negative.
*/
if ( notepad > RTEMS_NOTEPAD_LAST )
return RTEMS_INVALID_NUMBER;
10b6af: b0 0a mov $0xa,%al
/*
* NOTE: There is no check for < RTEMS_NOTEPAD_FIRST because that would
* be checking an unsigned number for being negative.
*/
if ( notepad > RTEMS_NOTEPAD_LAST )
10b6b1: 83 fe 0f cmp $0xf,%esi
10b6b4: 77 52 ja 10b708 <rtems_task_get_note+0x7c>
/*
* Optimize the most likely case to avoid the Thread_Dispatch.
*/
if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ||
10b6b6: 85 d2 test %edx,%edx
10b6b8: a1 3c 19 13 00 mov 0x13193c,%eax
10b6bd: 74 05 je 10b6c4 <rtems_task_get_note+0x38>
10b6bf: 3b 50 08 cmp 0x8(%eax),%edx
10b6c2: 75 0e jne 10b6d2 <rtems_task_get_note+0x46>
_Objects_Are_ids_equal( id, _Thread_Executing->Object.id ) ) {
api = _Thread_Executing->API_Extensions[ THREAD_API_RTEMS ];
*note = api->Notepads[ notepad ];
10b6c4: 8b 80 e4 00 00 00 mov 0xe4(%eax),%eax
10b6ca: 8b 44 b0 20 mov 0x20(%eax,%esi,4),%eax
10b6ce: 89 03 mov %eax,(%ebx)
10b6d0: eb 26 jmp 10b6f8 <rtems_task_get_note+0x6c>
return RTEMS_SUCCESSFUL;
}
the_thread = _Thread_Get( id, &location );
10b6d2: 50 push %eax
10b6d3: 50 push %eax
10b6d4: 8d 45 f4 lea -0xc(%ebp),%eax
10b6d7: 50 push %eax
10b6d8: 52 push %edx
10b6d9: e8 fe 1f 00 00 call 10d6dc <_Thread_Get>
switch ( location ) {
10b6de: 83 c4 10 add $0x10,%esp
10b6e1: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
10b6e5: 75 1c jne 10b703 <rtems_task_get_note+0x77>
case OBJECTS_LOCAL:
api = the_thread->API_Extensions[ THREAD_API_RTEMS ];
*note = api->Notepads[ notepad ];
10b6e7: 8b 80 e4 00 00 00 mov 0xe4(%eax),%eax
10b6ed: 8b 44 b0 20 mov 0x20(%eax,%esi,4),%eax
10b6f1: 89 03 mov %eax,(%ebx)
_Thread_Enable_dispatch();
10b6f3: e8 c4 1f 00 00 call 10d6bc <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
10b6f8: 31 c0 xor %eax,%eax
10b6fa: eb 0c jmp 10b708 <rtems_task_get_note+0x7c>
if ( !rtems_configuration_get_notepads_enabled() )
return RTEMS_NOT_CONFIGURED;
if ( !note )
return RTEMS_INVALID_ADDRESS;
10b6fc: b8 09 00 00 00 mov $0x9,%eax
10b701: eb 05 jmp 10b708 <rtems_task_get_note+0x7c>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
10b703: b8 04 00 00 00 mov $0x4,%eax
}
10b708: 8d 65 f8 lea -0x8(%ebp),%esp
10b70b: 5b pop %ebx
10b70c: 5e pop %esi
10b70d: 5d pop %ebp
10b70e: c3 ret
00110a2c <rtems_task_mode>:
rtems_status_code rtems_task_mode(
rtems_mode mode_set,
rtems_mode mask,
rtems_mode *previous_mode_set
)
{
110a2c: 55 push %ebp
110a2d: 89 e5 mov %esp,%ebp
110a2f: 57 push %edi
110a30: 56 push %esi
110a31: 53 push %ebx
110a32: 83 ec 1c sub $0x1c,%esp
ASR_Information *asr;
bool is_asr_enabled = false;
bool needs_asr_dispatching = false;
rtems_mode old_mode;
if ( !previous_mode_set )
110a35: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
110a39: 0f 84 00 01 00 00 je 110b3f <rtems_task_mode+0x113>
return RTEMS_INVALID_ADDRESS;
executing = _Thread_Executing;
110a3f: 8b 35 ec e8 12 00 mov 0x12e8ec,%esi
api = executing->API_Extensions[ THREAD_API_RTEMS ];
110a45: 8b 9e e4 00 00 00 mov 0xe4(%esi),%ebx
asr = &api->Signal;
old_mode = (executing->is_preemptible) ? RTEMS_PREEMPT : RTEMS_NO_PREEMPT;
110a4b: 80 7e 70 01 cmpb $0x1,0x70(%esi)
110a4f: 19 ff sbb %edi,%edi
110a51: 81 e7 00 01 00 00 and $0x100,%edi
if ( executing->budget_algorithm == THREAD_CPU_BUDGET_ALGORITHM_NONE )
110a57: 83 7e 78 00 cmpl $0x0,0x78(%esi)
110a5b: 74 06 je 110a63 <rtems_task_mode+0x37>
old_mode |= RTEMS_NO_TIMESLICE;
else
old_mode |= RTEMS_TIMESLICE;
110a5d: 81 cf 00 02 00 00 or $0x200,%edi
old_mode |= (asr->is_enabled) ? RTEMS_ASR : RTEMS_NO_ASR;
110a63: 80 7b 08 01 cmpb $0x1,0x8(%ebx)
110a67: 19 c9 sbb %ecx,%ecx
110a69: 81 e1 00 04 00 00 and $0x400,%ecx
old_mode |= _ISR_Get_level();
110a6f: 89 4d e4 mov %ecx,-0x1c(%ebp)
110a72: e8 89 c4 ff ff call 10cf00 <_CPU_ISR_Get_level>
if ( executing->budget_algorithm == THREAD_CPU_BUDGET_ALGORITHM_NONE )
old_mode |= RTEMS_NO_TIMESLICE;
else
old_mode |= RTEMS_TIMESLICE;
old_mode |= (asr->is_enabled) ? RTEMS_ASR : RTEMS_NO_ASR;
110a77: 8b 4d e4 mov -0x1c(%ebp),%ecx
110a7a: 09 c8 or %ecx,%eax
old_mode |= _ISR_Get_level();
110a7c: 09 f8 or %edi,%eax
110a7e: 8b 55 10 mov 0x10(%ebp),%edx
110a81: 89 02 mov %eax,(%edx)
*previous_mode_set = old_mode;
/*
* These are generic thread scheduling characteristics.
*/
if ( mask & RTEMS_PREEMPT_MASK )
110a83: f7 45 0c 00 01 00 00 testl $0x100,0xc(%ebp)
110a8a: 74 0f je 110a9b <rtems_task_mode+0x6f>
110a8c: 8b 45 08 mov 0x8(%ebp),%eax
110a8f: c1 e8 08 shr $0x8,%eax
110a92: 83 f0 01 xor $0x1,%eax
110a95: 83 e0 01 and $0x1,%eax
110a98: 88 46 70 mov %al,0x70(%esi)
executing->is_preemptible = _Modes_Is_preempt(mode_set) ? true : false;
if ( mask & RTEMS_TIMESLICE_MASK ) {
110a9b: f7 45 0c 00 02 00 00 testl $0x200,0xc(%ebp)
110aa2: 74 21 je 110ac5 <rtems_task_mode+0x99>
if ( _Modes_Is_timeslice(mode_set) ) {
110aa4: f7 45 08 00 02 00 00 testl $0x200,0x8(%ebp)
110aab: 74 11 je 110abe <rtems_task_mode+0x92>
executing->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE;
110aad: c7 46 78 01 00 00 00 movl $0x1,0x78(%esi)
executing->cpu_time_budget = _Thread_Ticks_per_timeslice;
110ab4: a1 b8 e3 12 00 mov 0x12e3b8,%eax
110ab9: 89 46 74 mov %eax,0x74(%esi)
110abc: eb 07 jmp 110ac5 <rtems_task_mode+0x99>
} else
executing->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_NONE;
110abe: c7 46 78 00 00 00 00 movl $0x0,0x78(%esi)
}
/*
* Set the new interrupt level
*/
if ( mask & RTEMS_INTERRUPT_MASK )
110ac5: f6 45 0c 01 testb $0x1,0xc(%ebp)
110ac9: 74 0a je 110ad5 <rtems_task_mode+0xa9>
*/
RTEMS_INLINE_ROUTINE void _Modes_Set_interrupt_level (
Modes_Control mode_set
)
{
_ISR_Set_level( _Modes_Get_interrupt_level( mode_set ) );
110acb: f6 45 08 01 testb $0x1,0x8(%ebp)
110acf: 74 03 je 110ad4 <rtems_task_mode+0xa8>
110ad1: fa cli
110ad2: eb 01 jmp 110ad5 <rtems_task_mode+0xa9>
110ad4: fb sti
/*
* This is specific to the RTEMS API
*/
is_asr_enabled = false;
needs_asr_dispatching = false;
110ad5: 31 d2 xor %edx,%edx
if ( mask & RTEMS_ASR_MASK ) {
110ad7: f7 45 0c 00 04 00 00 testl $0x400,0xc(%ebp)
110ade: 74 2c je 110b0c <rtems_task_mode+0xe0>
is_asr_enabled = _Modes_Is_asr_disabled( mode_set ) ? false : true;
110ae0: 8b 45 08 mov 0x8(%ebp),%eax
110ae3: c1 e8 0a shr $0xa,%eax
110ae6: 83 f0 01 xor $0x1,%eax
110ae9: 83 e0 01 and $0x1,%eax
if ( is_asr_enabled != asr->is_enabled ) {
110aec: 3a 43 08 cmp 0x8(%ebx),%al
110aef: 74 1b je 110b0c <rtems_task_mode+0xe0>
asr->is_enabled = is_asr_enabled;
110af1: 88 43 08 mov %al,0x8(%ebx)
)
{
rtems_signal_set _signals;
ISR_Level _level;
_ISR_Disable( _level );
110af4: 9c pushf
110af5: fa cli
110af6: 58 pop %eax
_signals = information->signals_pending;
110af7: 8b 53 18 mov 0x18(%ebx),%edx
information->signals_pending = information->signals_posted;
110afa: 8b 4b 14 mov 0x14(%ebx),%ecx
110afd: 89 4b 18 mov %ecx,0x18(%ebx)
information->signals_posted = _signals;
110b00: 89 53 14 mov %edx,0x14(%ebx)
_ISR_Enable( _level );
110b03: 50 push %eax
110b04: 9d popf
_ASR_Swap_signals( asr );
if ( _ASR_Are_signals_pending( asr ) ) {
110b05: 83 7b 14 00 cmpl $0x0,0x14(%ebx)
110b09: 0f 95 c2 setne %dl
if ( _System_state_Is_up( _System_state_Get() ) ) {
if (_Thread_Evaluate_is_dispatch_needed( needs_asr_dispatching ) )
_Thread_Dispatch();
}
return RTEMS_SUCCESSFUL;
110b0c: 31 c0 xor %eax,%eax
needs_asr_dispatching = true;
}
}
}
if ( _System_state_Is_up( _System_state_Get() ) ) {
110b0e: 83 3d 20 e5 12 00 03 cmpl $0x3,0x12e520
110b15: 75 2d jne 110b44 <rtems_task_mode+0x118>
bool are_signals_pending
)
{
Thread_Control *executing;
executing = _Thread_Executing;
110b17: 8b 0d ec e8 12 00 mov 0x12e8ec,%ecx
if ( are_signals_pending ||
110b1d: 84 d2 test %dl,%dl
110b1f: 75 0e jne 110b2f <rtems_task_mode+0x103>
110b21: 3b 0d f0 e8 12 00 cmp 0x12e8f0,%ecx
110b27: 74 1b je 110b44 <rtems_task_mode+0x118>
(!_Thread_Is_heir( executing ) && executing->is_preemptible) ) {
110b29: 80 79 70 00 cmpb $0x0,0x70(%ecx)
110b2d: 74 15 je 110b44 <rtems_task_mode+0x118> <== NEVER TAKEN
_Thread_Dispatch_necessary = true;
110b2f: c6 05 f8 e8 12 00 01 movb $0x1,0x12e8f8
if (_Thread_Evaluate_is_dispatch_needed( needs_asr_dispatching ) )
_Thread_Dispatch();
110b36: e8 95 b1 ff ff call 10bcd0 <_Thread_Dispatch>
}
return RTEMS_SUCCESSFUL;
110b3b: 31 c0 xor %eax,%eax
110b3d: eb 05 jmp 110b44 <rtems_task_mode+0x118>
bool is_asr_enabled = false;
bool needs_asr_dispatching = false;
rtems_mode old_mode;
if ( !previous_mode_set )
return RTEMS_INVALID_ADDRESS;
110b3f: b8 09 00 00 00 mov $0x9,%eax
if (_Thread_Evaluate_is_dispatch_needed( needs_asr_dispatching ) )
_Thread_Dispatch();
}
return RTEMS_SUCCESSFUL;
}
110b44: 83 c4 1c add $0x1c,%esp
110b47: 5b pop %ebx
110b48: 5e pop %esi
110b49: 5f pop %edi
110b4a: 5d pop %ebp
110b4b: c3 ret
0010d48c <rtems_task_set_priority>:
rtems_status_code rtems_task_set_priority(
rtems_id id,
rtems_task_priority new_priority,
rtems_task_priority *old_priority
)
{
10d48c: 55 push %ebp
10d48d: 89 e5 mov %esp,%ebp
10d48f: 56 push %esi
10d490: 53 push %ebx
10d491: 83 ec 10 sub $0x10,%esp
10d494: 8b 5d 0c mov 0xc(%ebp),%ebx
10d497: 8b 75 10 mov 0x10(%ebp),%esi
register Thread_Control *the_thread;
Objects_Locations location;
if ( new_priority != RTEMS_CURRENT_PRIORITY &&
10d49a: 85 db test %ebx,%ebx
10d49c: 74 10 je 10d4ae <rtems_task_set_priority+0x22>
RTEMS_INLINE_ROUTINE bool _RTEMS_tasks_Priority_is_valid (
rtems_task_priority the_priority
)
{
return ( ( the_priority >= RTEMS_MINIMUM_PRIORITY ) &&
( the_priority <= RTEMS_MAXIMUM_PRIORITY ) );
10d49e: 0f b6 15 88 e1 12 00 movzbl 0x12e188,%edx
!_RTEMS_tasks_Priority_is_valid( new_priority ) )
return RTEMS_INVALID_PRIORITY;
10d4a5: b8 13 00 00 00 mov $0x13,%eax
)
{
register Thread_Control *the_thread;
Objects_Locations location;
if ( new_priority != RTEMS_CURRENT_PRIORITY &&
10d4aa: 39 d3 cmp %edx,%ebx
10d4ac: 77 52 ja 10d500 <rtems_task_set_priority+0x74>
!_RTEMS_tasks_Priority_is_valid( new_priority ) )
return RTEMS_INVALID_PRIORITY;
if ( !old_priority )
return RTEMS_INVALID_ADDRESS;
10d4ae: b8 09 00 00 00 mov $0x9,%eax
if ( new_priority != RTEMS_CURRENT_PRIORITY &&
!_RTEMS_tasks_Priority_is_valid( new_priority ) )
return RTEMS_INVALID_PRIORITY;
if ( !old_priority )
10d4b3: 85 f6 test %esi,%esi
10d4b5: 74 49 je 10d500 <rtems_task_set_priority+0x74>
return RTEMS_INVALID_ADDRESS;
the_thread = _Thread_Get( id, &location );
10d4b7: 51 push %ecx
10d4b8: 51 push %ecx
10d4b9: 8d 45 f4 lea -0xc(%ebp),%eax
10d4bc: 50 push %eax
10d4bd: ff 75 08 pushl 0x8(%ebp)
10d4c0: e8 d7 1d 00 00 call 10f29c <_Thread_Get>
switch ( location ) {
10d4c5: 83 c4 10 add $0x10,%esp
10d4c8: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
10d4cc: 75 2d jne 10d4fb <rtems_task_set_priority+0x6f>
case OBJECTS_LOCAL:
/* XXX need helper to "convert" from core priority */
*old_priority = the_thread->current_priority;
10d4ce: 8b 50 14 mov 0x14(%eax),%edx
10d4d1: 89 16 mov %edx,(%esi)
if ( new_priority != RTEMS_CURRENT_PRIORITY ) {
10d4d3: 85 db test %ebx,%ebx
10d4d5: 74 1b je 10d4f2 <rtems_task_set_priority+0x66>
the_thread->real_priority = new_priority;
10d4d7: 89 58 18 mov %ebx,0x18(%eax)
if ( the_thread->resource_count == 0 ||
10d4da: 83 78 1c 00 cmpl $0x0,0x1c(%eax)
10d4de: 74 05 je 10d4e5 <rtems_task_set_priority+0x59>
10d4e0: 39 58 14 cmp %ebx,0x14(%eax)
10d4e3: 76 0d jbe 10d4f2 <rtems_task_set_priority+0x66><== ALWAYS TAKEN
the_thread->current_priority > new_priority )
_Thread_Change_priority( the_thread, new_priority, false );
10d4e5: 52 push %edx
10d4e6: 6a 00 push $0x0
10d4e8: 53 push %ebx
10d4e9: 50 push %eax
10d4ea: e8 9d 19 00 00 call 10ee8c <_Thread_Change_priority>
10d4ef: 83 c4 10 add $0x10,%esp
}
_Thread_Enable_dispatch();
10d4f2: e8 85 1d 00 00 call 10f27c <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
10d4f7: 31 c0 xor %eax,%eax
10d4f9: eb 05 jmp 10d500 <rtems_task_set_priority+0x74>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
10d4fb: b8 04 00 00 00 mov $0x4,%eax
}
10d500: 8d 65 f8 lea -0x8(%ebp),%esp
10d503: 5b pop %ebx
10d504: 5e pop %esi
10d505: 5d pop %ebp
10d506: c3 ret
00108cfc <rtems_termios_baud_to_index>:
#include <rtems/termiostypes.h>
int rtems_termios_baud_to_index(
rtems_termios_baud_t termios_baud
)
{
108cfc: 55 push %ebp
108cfd: 89 e5 mov %esp,%ebp
108cff: 8b 55 08 mov 0x8(%ebp),%edx
int baud_index;
switch (termios_baud) {
108d02: 83 fa 09 cmp $0x9,%edx
108d05: 0f 84 eb 00 00 00 je 108df6 <rtems_termios_baud_to_index+0xfa>
108d0b: 77 61 ja 108d6e <rtems_termios_baud_to_index+0x72>
108d0d: 83 fa 04 cmp $0x4,%edx
108d10: 0f 84 c4 00 00 00 je 108dda <rtems_termios_baud_to_index+0xde>
108d16: 77 2b ja 108d43 <rtems_termios_baud_to_index+0x47>
108d18: 83 fa 01 cmp $0x1,%edx
108d1b: 0f 84 20 01 00 00 je 108e41 <rtems_termios_baud_to_index+0x145>
case B0: baud_index = 0; break;
108d21: b8 00 00 00 00 mov $0x0,%eax
rtems_termios_baud_t termios_baud
)
{
int baud_index;
switch (termios_baud) {
108d26: 0f 82 1a 01 00 00 jb 108e46 <rtems_termios_baud_to_index+0x14a>
108d2c: 83 fa 02 cmp $0x2,%edx
108d2f: 0f 84 97 00 00 00 je 108dcc <rtems_termios_baud_to_index+0xd0>
108d35: 83 fa 03 cmp $0x3,%edx
108d38: 0f 85 fe 00 00 00 jne 108e3c <rtems_termios_baud_to_index+0x140><== NEVER TAKEN
108d3e: e9 90 00 00 00 jmp 108dd3 <rtems_termios_baud_to_index+0xd7>
108d43: 83 fa 06 cmp $0x6,%edx
108d46: 0f 84 95 00 00 00 je 108de1 <rtems_termios_baud_to_index+0xe5>
case B0: baud_index = 0; break;
case B50: baud_index = 1; break;
case B75: baud_index = 2; break;
case B110: baud_index = 3; break;
case B134: baud_index = 4; break;
case B150: baud_index = 5; break;
108d4c: b8 05 00 00 00 mov $0x5,%eax
rtems_termios_baud_t termios_baud
)
{
int baud_index;
switch (termios_baud) {
108d51: 0f 82 ef 00 00 00 jb 108e46 <rtems_termios_baud_to_index+0x14a>
108d57: 83 fa 07 cmp $0x7,%edx
108d5a: 0f 84 88 00 00 00 je 108de8 <rtems_termios_baud_to_index+0xec>
108d60: 83 fa 08 cmp $0x8,%edx
108d63: 0f 85 d3 00 00 00 jne 108e3c <rtems_termios_baud_to_index+0x140><== NEVER TAKEN
108d69: e9 81 00 00 00 jmp 108def <rtems_termios_baud_to_index+0xf3>
108d6e: 83 fa 0e cmp $0xe,%edx
108d71: 0f 84 9b 00 00 00 je 108e12 <rtems_termios_baud_to_index+0x116>
108d77: 77 20 ja 108d99 <rtems_termios_baud_to_index+0x9d>
108d79: 83 fa 0b cmp $0xb,%edx
108d7c: 74 7f je 108dfd <rtems_termios_baud_to_index+0x101>
case B150: baud_index = 5; break;
case B200: baud_index = 6; break;
case B300: baud_index = 7; break;
case B600: baud_index = 8; break;
case B1200: baud_index = 9; break;
case B1800: baud_index = 10; break;
108d7e: b8 0a 00 00 00 mov $0xa,%eax
rtems_termios_baud_t termios_baud
)
{
int baud_index;
switch (termios_baud) {
108d83: 0f 82 bd 00 00 00 jb 108e46 <rtems_termios_baud_to_index+0x14a>
108d89: 83 fa 0c cmp $0xc,%edx
108d8c: 74 76 je 108e04 <rtems_termios_baud_to_index+0x108>
108d8e: 83 fa 0d cmp $0xd,%edx
108d91: 0f 85 a5 00 00 00 jne 108e3c <rtems_termios_baud_to_index+0x140><== NEVER TAKEN
108d97: eb 72 jmp 108e0b <rtems_termios_baud_to_index+0x10f>
108d99: 81 fa 02 10 00 00 cmp $0x1002,%edx
108d9f: 0f 84 82 00 00 00 je 108e27 <rtems_termios_baud_to_index+0x12b>
108da5: 77 13 ja 108dba <rtems_termios_baud_to_index+0xbe>
108da7: 83 fa 0f cmp $0xf,%edx
108daa: 74 6d je 108e19 <rtems_termios_baud_to_index+0x11d>
108dac: 81 fa 01 10 00 00 cmp $0x1001,%edx
108db2: 0f 85 84 00 00 00 jne 108e3c <rtems_termios_baud_to_index+0x140><== NEVER TAKEN
108db8: eb 66 jmp 108e20 <rtems_termios_baud_to_index+0x124>
108dba: 81 fa 03 10 00 00 cmp $0x1003,%edx
108dc0: 74 6c je 108e2e <rtems_termios_baud_to_index+0x132>
108dc2: 81 fa 04 10 00 00 cmp $0x1004,%edx
108dc8: 75 72 jne 108e3c <rtems_termios_baud_to_index+0x140>
108dca: eb 69 jmp 108e35 <rtems_termios_baud_to_index+0x139>
case B0: baud_index = 0; break;
case B50: baud_index = 1; break;
case B75: baud_index = 2; break;
108dcc: b8 02 00 00 00 mov $0x2,%eax
108dd1: eb 73 jmp 108e46 <rtems_termios_baud_to_index+0x14a>
case B110: baud_index = 3; break;
108dd3: b8 03 00 00 00 mov $0x3,%eax
108dd8: eb 6c jmp 108e46 <rtems_termios_baud_to_index+0x14a>
case B134: baud_index = 4; break;
108dda: b8 04 00 00 00 mov $0x4,%eax
108ddf: eb 65 jmp 108e46 <rtems_termios_baud_to_index+0x14a>
case B150: baud_index = 5; break;
case B200: baud_index = 6; break;
108de1: b8 06 00 00 00 mov $0x6,%eax
108de6: eb 5e jmp 108e46 <rtems_termios_baud_to_index+0x14a>
case B300: baud_index = 7; break;
108de8: b8 07 00 00 00 mov $0x7,%eax
108ded: eb 57 jmp 108e46 <rtems_termios_baud_to_index+0x14a>
case B600: baud_index = 8; break;
108def: b8 08 00 00 00 mov $0x8,%eax
108df4: eb 50 jmp 108e46 <rtems_termios_baud_to_index+0x14a>
case B1200: baud_index = 9; break;
108df6: b8 09 00 00 00 mov $0x9,%eax
108dfb: eb 49 jmp 108e46 <rtems_termios_baud_to_index+0x14a>
case B1800: baud_index = 10; break;
case B2400: baud_index = 11; break;
108dfd: b8 0b 00 00 00 mov $0xb,%eax
108e02: eb 42 jmp 108e46 <rtems_termios_baud_to_index+0x14a>
case B4800: baud_index = 12; break;
108e04: b8 0c 00 00 00 mov $0xc,%eax
108e09: eb 3b jmp 108e46 <rtems_termios_baud_to_index+0x14a>
case B9600: baud_index = 13; break;
108e0b: b8 0d 00 00 00 mov $0xd,%eax
108e10: eb 34 jmp 108e46 <rtems_termios_baud_to_index+0x14a>
case B19200: baud_index = 14; break;
108e12: b8 0e 00 00 00 mov $0xe,%eax
108e17: eb 2d jmp 108e46 <rtems_termios_baud_to_index+0x14a>
case B38400: baud_index = 15; break;
108e19: b8 0f 00 00 00 mov $0xf,%eax
108e1e: eb 26 jmp 108e46 <rtems_termios_baud_to_index+0x14a>
case B57600: baud_index = 16; break;
108e20: b8 10 00 00 00 mov $0x10,%eax
108e25: eb 1f jmp 108e46 <rtems_termios_baud_to_index+0x14a>
case B115200: baud_index = 17; break;
108e27: b8 11 00 00 00 mov $0x11,%eax
108e2c: eb 18 jmp 108e46 <rtems_termios_baud_to_index+0x14a>
case B230400: baud_index = 18; break;
108e2e: b8 12 00 00 00 mov $0x12,%eax
108e33: eb 11 jmp 108e46 <rtems_termios_baud_to_index+0x14a>
case B460800: baud_index = 19; break;
108e35: b8 13 00 00 00 mov $0x13,%eax
108e3a: eb 0a jmp 108e46 <rtems_termios_baud_to_index+0x14a>
default: baud_index = -1; break;
108e3c: 83 c8 ff or $0xffffffff,%eax
108e3f: eb 05 jmp 108e46 <rtems_termios_baud_to_index+0x14a>
{
int baud_index;
switch (termios_baud) {
case B0: baud_index = 0; break;
case B50: baud_index = 1; break;
108e41: b8 01 00 00 00 mov $0x1,%eax
case B460800: baud_index = 19; break;
default: baud_index = -1; break;
}
return baud_index;
}
108e46: 5d pop %ebp
108e47: c3 ret
001083dd <rtems_termios_close>:
}
}
rtems_status_code
rtems_termios_close (void *arg)
{
1083dd: 55 push %ebp
1083de: 89 e5 mov %esp,%ebp
1083e0: 56 push %esi
1083e1: 53 push %ebx
1083e2: 8b 75 08 mov 0x8(%ebp),%esi
rtems_libio_open_close_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
1083e5: 8b 06 mov (%esi),%eax
1083e7: 8b 58 2c mov 0x2c(%eax),%ebx
rtems_status_code sc;
sc = rtems_semaphore_obtain(
1083ea: 50 push %eax
1083eb: 6a 00 push $0x0
1083ed: 6a 00 push $0x0
1083ef: ff 35 14 e3 12 00 pushl 0x12e314
1083f5: e8 96 19 00 00 call 109d90 <rtems_semaphore_obtain>
rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
1083fa: 83 c4 10 add $0x10,%esp
1083fd: 85 c0 test %eax,%eax
1083ff: 74 05 je 108406 <rtems_termios_close+0x29><== ALWAYS TAKEN
108401: e9 8f 00 00 00 jmp 108495 <rtems_termios_close+0xb8><== NOT EXECUTED
rtems_fatal_error_occurred (sc);
if (--tty->refcount == 0) {
108406: ff 4b 08 decl 0x8(%ebx)
108409: 0f 85 4b 01 00 00 jne 10855a <rtems_termios_close+0x17d>
if (rtems_termios_linesw[tty->t_line].l_close != NULL) {
10840f: 8b 83 cc 00 00 00 mov 0xcc(%ebx),%eax
108415: c1 e0 05 shl $0x5,%eax
108418: 8b 80 c4 df 12 00 mov 0x12dfc4(%eax),%eax
10841e: 85 c0 test %eax,%eax
108420: 74 08 je 10842a <rtems_termios_close+0x4d>
/*
* call discipline-specific close
*/
sc = rtems_termios_linesw[tty->t_line].l_close(tty);
108422: 83 ec 0c sub $0xc,%esp
108425: 53 push %ebx
108426: ff d0 call *%eax
108428: eb 31 jmp 10845b <rtems_termios_close+0x7e>
} else {
/*
* default: just flush output buffer
*/
sc = rtems_semaphore_obtain(tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
10842a: 50 push %eax
10842b: 6a 00 push $0x0
10842d: 6a 00 push $0x0
10842f: ff 73 18 pushl 0x18(%ebx)
108432: e8 59 19 00 00 call 109d90 <rtems_semaphore_obtain>
if (sc != RTEMS_SUCCESSFUL) {
108437: 83 c4 10 add $0x10,%esp
10843a: 85 c0 test %eax,%eax
10843c: 74 02 je 108440 <rtems_termios_close+0x63><== ALWAYS TAKEN
10843e: eb 55 jmp 108495 <rtems_termios_close+0xb8><== NOT EXECUTED
drainOutput (struct rtems_termios_tty *tty)
{
rtems_interrupt_level level;
rtems_status_code sc;
if (tty->device.outputUsesInterrupts != TERMIOS_POLLED) {
108440: 83 bb b4 00 00 00 00 cmpl $0x0,0xb4(%ebx)
108447: 74 07 je 108450 <rtems_termios_close+0x73>
108449: 89 d8 mov %ebx,%eax
10844b: e8 56 fb ff ff call 107fa6 <drainOutput.part.0>
sc = rtems_semaphore_obtain(tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL) {
rtems_fatal_error_occurred (sc);
}
drainOutput (tty);
rtems_semaphore_release (tty->osem);
108450: 83 ec 0c sub $0xc,%esp
108453: ff 73 18 pushl 0x18(%ebx)
108456: e8 25 1a 00 00 call 109e80 <rtems_semaphore_release>
10845b: 83 c4 10 add $0x10,%esp
}
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
10845e: 83 bb b4 00 00 00 02 cmpl $0x2,0xb4(%ebx)
108465: 75 37 jne 10849e <rtems_termios_close+0xc1>
/*
* send "terminate" to I/O tasks
*/
sc = rtems_event_send( tty->rxTaskId, TERMIOS_RX_TERMINATE_EVENT );
108467: 50 push %eax
108468: 50 push %eax
108469: 6a 01 push $0x1
10846b: ff b3 c4 00 00 00 pushl 0xc4(%ebx)
108471: e8 4e 15 00 00 call 1099c4 <rtems_event_send>
if (sc != RTEMS_SUCCESSFUL)
108476: 83 c4 10 add $0x10,%esp
108479: 85 c0 test %eax,%eax
10847b: 74 02 je 10847f <rtems_termios_close+0xa2><== ALWAYS TAKEN
10847d: eb 16 jmp 108495 <rtems_termios_close+0xb8><== NOT EXECUTED
rtems_fatal_error_occurred (sc);
sc = rtems_event_send( tty->txTaskId, TERMIOS_TX_TERMINATE_EVENT );
10847f: 51 push %ecx
108480: 51 push %ecx
108481: 6a 01 push $0x1
108483: ff b3 c8 00 00 00 pushl 0xc8(%ebx)
108489: e8 36 15 00 00 call 1099c4 <rtems_event_send>
if (sc != RTEMS_SUCCESSFUL)
10848e: 83 c4 10 add $0x10,%esp
108491: 85 c0 test %eax,%eax
108493: 74 09 je 10849e <rtems_termios_close+0xc1><== ALWAYS TAKEN
rtems_fatal_error_occurred (sc);
108495: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
108498: 50 push %eax <== NOT EXECUTED
108499: e8 16 1f 00 00 call 10a3b4 <rtems_fatal_error_occurred><== NOT EXECUTED
}
if (tty->device.lastClose)
10849e: 8b 83 9c 00 00 00 mov 0x9c(%ebx),%eax
1084a4: 85 c0 test %eax,%eax
1084a6: 74 0d je 1084b5 <rtems_termios_close+0xd8>
(*tty->device.lastClose)(tty->major, tty->minor, arg);
1084a8: 52 push %edx
1084a9: 56 push %esi
1084aa: ff 73 10 pushl 0x10(%ebx)
1084ad: ff 73 0c pushl 0xc(%ebx)
1084b0: ff d0 call *%eax
1084b2: 83 c4 10 add $0x10,%esp
if (tty->forw == NULL) {
1084b5: 8b 13 mov (%ebx),%edx
1084b7: 85 d2 test %edx,%edx
1084b9: 8b 43 04 mov 0x4(%ebx),%eax
1084bc: 75 11 jne 1084cf <rtems_termios_close+0xf2>
rtems_termios_ttyTail = tty->back;
1084be: a3 18 e3 12 00 mov %eax,0x12e318
if ( rtems_termios_ttyTail != NULL ) {
1084c3: 85 c0 test %eax,%eax
1084c5: 74 0b je 1084d2 <rtems_termios_close+0xf5><== ALWAYS TAKEN
rtems_termios_ttyTail->forw = NULL;
1084c7: c7 00 00 00 00 00 movl $0x0,(%eax) <== NOT EXECUTED
1084cd: eb 03 jmp 1084d2 <rtems_termios_close+0xf5><== NOT EXECUTED
}
} else {
tty->forw->back = tty->back;
1084cf: 89 42 04 mov %eax,0x4(%edx)
}
if (tty->back == NULL) {
1084d2: 8b 53 04 mov 0x4(%ebx),%edx
1084d5: 85 d2 test %edx,%edx
1084d7: 8b 03 mov (%ebx),%eax
1084d9: 75 12 jne 1084ed <rtems_termios_close+0x110><== NEVER TAKEN
rtems_termios_ttyHead = tty->forw;
1084db: a3 1c e3 12 00 mov %eax,0x12e31c
if ( rtems_termios_ttyHead != NULL ) {
1084e0: 85 c0 test %eax,%eax
1084e2: 74 0b je 1084ef <rtems_termios_close+0x112>
rtems_termios_ttyHead->back = NULL;
1084e4: c7 40 04 00 00 00 00 movl $0x0,0x4(%eax)
1084eb: eb 02 jmp 1084ef <rtems_termios_close+0x112>
}
} else {
tty->back->forw = tty->forw;
1084ed: 89 02 mov %eax,(%edx) <== NOT EXECUTED
}
rtems_semaphore_delete (tty->isem);
1084ef: 83 ec 0c sub $0xc,%esp
1084f2: ff 73 14 pushl 0x14(%ebx)
1084f5: e8 06 18 00 00 call 109d00 <rtems_semaphore_delete>
rtems_semaphore_delete (tty->osem);
1084fa: 58 pop %eax
1084fb: ff 73 18 pushl 0x18(%ebx)
1084fe: e8 fd 17 00 00 call 109d00 <rtems_semaphore_delete>
rtems_semaphore_delete (tty->rawOutBuf.Semaphore);
108503: 58 pop %eax
108504: ff b3 8c 00 00 00 pushl 0x8c(%ebx)
10850a: e8 f1 17 00 00 call 109d00 <rtems_semaphore_delete>
if ((tty->device.pollRead == NULL) ||
10850f: 83 c4 10 add $0x10,%esp
108512: 83 bb a0 00 00 00 00 cmpl $0x0,0xa0(%ebx)
108519: 74 09 je 108524 <rtems_termios_close+0x147>
10851b: 83 bb b4 00 00 00 02 cmpl $0x2,0xb4(%ebx)
108522: 75 0e jne 108532 <rtems_termios_close+0x155>
(tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN))
rtems_semaphore_delete (tty->rawInBuf.Semaphore);
108524: 83 ec 0c sub $0xc,%esp
108527: ff 73 68 pushl 0x68(%ebx)
10852a: e8 d1 17 00 00 call 109d00 <rtems_semaphore_delete>
10852f: 83 c4 10 add $0x10,%esp
free (tty->rawInBuf.theBuf);
108532: 83 ec 0c sub $0xc,%esp
108535: ff 73 58 pushl 0x58(%ebx)
108538: e8 f7 e1 ff ff call 106734 <free>
free (tty->rawOutBuf.theBuf);
10853d: 58 pop %eax
10853e: ff 73 7c pushl 0x7c(%ebx)
108541: e8 ee e1 ff ff call 106734 <free>
free (tty->cbuf);
108546: 58 pop %eax
108547: ff 73 1c pushl 0x1c(%ebx)
10854a: e8 e5 e1 ff ff call 106734 <free>
free (tty);
10854f: 89 1c 24 mov %ebx,(%esp)
108552: e8 dd e1 ff ff call 106734 <free>
108557: 83 c4 10 add $0x10,%esp
}
rtems_semaphore_release (rtems_termios_ttyMutex);
10855a: 83 ec 0c sub $0xc,%esp
10855d: ff 35 14 e3 12 00 pushl 0x12e314
108563: e8 18 19 00 00 call 109e80 <rtems_semaphore_release>
return RTEMS_SUCCESSFUL;
}
108568: 31 c0 xor %eax,%eax
10856a: 8d 65 f8 lea -0x8(%ebp),%esp
10856d: 5b pop %ebx
10856e: 5e pop %esi
10856f: 5d pop %ebp
108570: c3 ret
00109495 <rtems_termios_dequeue_characters>:
* for each transmitted character.
* It returns number of characters left to transmit
*/
int
rtems_termios_dequeue_characters (void *ttyp, int len)
{
109495: 55 push %ebp
109496: 89 e5 mov %esp,%ebp
109498: 83 ec 08 sub $0x8,%esp
10949b: 8b 45 08 mov 0x8(%ebp),%eax
rtems_status_code sc;
/*
* sum up character count already sent
*/
tty->t_dqlen += len;
10949e: 8b 55 0c mov 0xc(%ebp),%edx
1094a1: 01 90 90 00 00 00 add %edx,0x90(%eax)
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
1094a7: 83 b8 b4 00 00 00 02 cmpl $0x2,0xb4(%eax)
1094ae: 75 1f jne 1094cf <rtems_termios_dequeue_characters+0x3a>
/*
* send wake up to transmitter task
*/
sc = rtems_event_send(tty->txTaskId, TERMIOS_TX_START_EVENT);
1094b0: 52 push %edx
1094b1: 52 push %edx
1094b2: 6a 02 push $0x2
1094b4: ff b0 c8 00 00 00 pushl 0xc8(%eax)
1094ba: e8 05 05 00 00 call 1099c4 <rtems_event_send>
if (sc != RTEMS_SUCCESSFUL)
1094bf: 83 c4 10 add $0x10,%esp
1094c2: 85 c0 test %eax,%eax
1094c4: 74 2d je 1094f3 <rtems_termios_dequeue_characters+0x5e><== ALWAYS TAKEN
rtems_fatal_error_occurred (sc);
1094c6: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1094c9: 50 push %eax <== NOT EXECUTED
1094ca: e8 e5 0e 00 00 call 10a3b4 <rtems_fatal_error_occurred><== NOT EXECUTED
return 0; /* nothing to output in IRQ... */
}
if (tty->t_line == PPPDISC ) {
1094cf: 83 b8 cc 00 00 00 05 cmpl $0x5,0xcc(%eax)
1094d6: 75 15 jne 1094ed <rtems_termios_dequeue_characters+0x58><== ALWAYS TAKEN
/*
* call any line discipline start function
*/
if (rtems_termios_linesw[tty->t_line].l_start != NULL) {
1094d8: 8b 15 74 e0 12 00 mov 0x12e074,%edx
1094de: 85 d2 test %edx,%edx
1094e0: 74 11 je 1094f3 <rtems_termios_dequeue_characters+0x5e><== NEVER TAKEN
rtems_termios_linesw[tty->t_line].l_start(tty);
1094e2: 83 ec 0c sub $0xc,%esp
1094e5: 50 push %eax
1094e6: ff d2 call *%edx
1094e8: 83 c4 10 add $0x10,%esp
1094eb: eb 06 jmp 1094f3 <rtems_termios_dequeue_characters+0x5e>
}
return 0; /* nothing to output in IRQ... */
}
return rtems_termios_refill_transmitter(tty);
}
1094ed: c9 leave
rtems_termios_linesw[tty->t_line].l_start(tty);
}
return 0; /* nothing to output in IRQ... */
}
return rtems_termios_refill_transmitter(tty);
1094ee: e9 8d e8 ff ff jmp 107d80 <rtems_termios_refill_transmitter>
}
1094f3: 31 c0 xor %eax,%eax
1094f5: c9 leave
1094f6: c3 ret
001091b7 <rtems_termios_enqueue_raw_characters>:
* device receive interrupt handler.
* Returns the number of characters dropped because of overflow.
*/
int
rtems_termios_enqueue_raw_characters (void *ttyp, const char *buf, int len)
{
1091b7: 55 push %ebp
1091b8: 89 e5 mov %esp,%ebp
1091ba: 57 push %edi
1091bb: 56 push %esi
1091bc: 53 push %ebx
1091bd: 83 ec 2c sub $0x2c,%esp
1091c0: 8b 5d 08 mov 0x8(%ebp),%ebx
1091c3: 8b 75 0c mov 0xc(%ebp),%esi
char c;
int dropped = 0;
bool flow_rcv = false; /* true, if flow control char received */
rtems_interrupt_level level;
if (rtems_termios_linesw[tty->t_line].l_rint != NULL) {
1091c6: 8b 83 cc 00 00 00 mov 0xcc(%ebx),%eax
1091cc: c1 e0 05 shl $0x5,%eax
1091cf: 83 b8 d0 df 12 00 00 cmpl $0x0,0x12dfd0(%eax)
1091d6: 8b 45 10 mov 0x10(%ebp),%eax
1091d9: 8d 04 06 lea (%esi,%eax,1),%eax
1091dc: 89 45 dc mov %eax,-0x24(%ebp)
1091df: 75 31 jne 109212 <rtems_termios_enqueue_raw_characters+0x5b>
* NOTE: This routine runs in the context of the
* device receive interrupt handler.
* Returns the number of characters dropped because of overflow.
*/
int
rtems_termios_enqueue_raw_characters (void *ttyp, const char *buf, int len)
1091e1: c6 45 e3 00 movb $0x0,-0x1d(%ebp)
1091e5: 31 ff xor %edi,%edi
/*
* check to see if rcv wakeup callback was set
*/
if (( !tty->tty_rcvwakeup ) && ( tty->tty_rcv.sw_pfn != NULL )) {
(*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg);
1091e7: 8d 4b 30 lea 0x30(%ebx),%ecx
1091ea: 89 4d d4 mov %ecx,-0x2c(%ebp)
(tty->rawOutBufState == rob_idle)) {
/* if tx is stopped due to XOFF or out of data */
/* call write function here */
tty->flow_ctrl |= FL_ISNTXOF;
(*tty->device.write)(tty->minor,
(void *)&(tty->termios.c_cc[VSTOP]), 1);
1091ed: 8d 4b 4a lea 0x4a(%ebx),%ecx
1091f0: 89 4d d0 mov %ecx,-0x30(%ebp)
1091f3: e9 0a 02 00 00 jmp 109402 <rtems_termios_enqueue_raw_characters+0x24b>
bool flow_rcv = false; /* true, if flow control char received */
rtems_interrupt_level level;
if (rtems_termios_linesw[tty->t_line].l_rint != NULL) {
while (len--) {
c = *buf++;
1091f8: 0f be 16 movsbl (%esi),%edx
1091fb: 46 inc %esi
rtems_termios_linesw[tty->t_line].l_rint(c,tty);
1091fc: 57 push %edi
1091fd: 57 push %edi
1091fe: 8b 83 cc 00 00 00 mov 0xcc(%ebx),%eax
109204: c1 e0 05 shl $0x5,%eax
109207: 53 push %ebx
109208: 52 push %edx
109209: ff 90 d0 df 12 00 call *0x12dfd0(%eax)
10920f: 83 c4 10 add $0x10,%esp
int dropped = 0;
bool flow_rcv = false; /* true, if flow control char received */
rtems_interrupt_level level;
if (rtems_termios_linesw[tty->t_line].l_rint != NULL) {
while (len--) {
109212: 3b 75 dc cmp -0x24(%ebp),%esi
109215: 75 e1 jne 1091f8 <rtems_termios_enqueue_raw_characters+0x41>
*/
if (( !tty->tty_rcvwakeup ) && ( tty->tty_rcv.sw_pfn != NULL )) {
(*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg);
tty->tty_rcvwakeup = 1;
}
return 0;
109217: 31 ff xor %edi,%edi
}
/*
* check to see if rcv wakeup callback was set
*/
if (( !tty->tty_rcvwakeup ) && ( tty->tty_rcv.sw_pfn != NULL )) {
109219: 83 bb e4 00 00 00 00 cmpl $0x0,0xe4(%ebx)
109220: 0f 85 01 02 00 00 jne 109427 <rtems_termios_enqueue_raw_characters+0x270><== NEVER TAKEN
109226: 8b 83 dc 00 00 00 mov 0xdc(%ebx),%eax
10922c: 85 c0 test %eax,%eax
10922e: 0f 84 f3 01 00 00 je 109427 <rtems_termios_enqueue_raw_characters+0x270>
(*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg);
109234: 51 push %ecx
109235: 51 push %ecx
109236: ff b3 e0 00 00 00 pushl 0xe0(%ebx)
10923c: 8d 53 30 lea 0x30(%ebx),%edx
10923f: 52 push %edx
109240: ff d0 call *%eax
tty->tty_rcvwakeup = 1;
109242: c7 83 e4 00 00 00 01 movl $0x1,0xe4(%ebx)
109249: 00 00 00
10924c: e9 c8 01 00 00 jmp 109419 <rtems_termios_enqueue_raw_characters+0x262>
}
return 0;
}
while (len--) {
c = *buf++;
109251: 8a 0e mov (%esi),%cl
109253: 88 4d e2 mov %cl,-0x1e(%ebp)
109256: 46 inc %esi
/* FIXME: implement IXANY: any character restarts output */
/* if incoming XON/XOFF controls outgoing stream: */
if (tty->flow_ctrl & FL_MDXON) {
109257: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax
10925d: f6 c4 02 test $0x2,%ah
109260: 74 3b je 10929d <rtems_termios_enqueue_raw_characters+0xe6>
/* if received char is V_STOP and V_START (both are equal value) */
if (c == tty->termios.c_cc[VSTOP]) {
109262: 0f be c1 movsbl %cl,%eax
109265: 0f b6 53 4a movzbl 0x4a(%ebx),%edx
109269: 39 d0 cmp %edx,%eax
if (c == tty->termios.c_cc[VSTART]) {
10926b: 0f b6 53 49 movzbl 0x49(%ebx),%edx
c = *buf++;
/* FIXME: implement IXANY: any character restarts output */
/* if incoming XON/XOFF controls outgoing stream: */
if (tty->flow_ctrl & FL_MDXON) {
/* if received char is V_STOP and V_START (both are equal value) */
if (c == tty->termios.c_cc[VSTOP]) {
10926f: 75 1d jne 10928e <rtems_termios_enqueue_raw_characters+0xd7>
if (c == tty->termios.c_cc[VSTART]) {
109271: 39 d0 cmp %edx,%eax
/* received VSTOP and VSTART==VSTOP? */
/* then toggle "stop output" status */
tty->flow_ctrl = tty->flow_ctrl ^ FL_ORCVXOF;
109273: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax
/* FIXME: implement IXANY: any character restarts output */
/* if incoming XON/XOFF controls outgoing stream: */
if (tty->flow_ctrl & FL_MDXON) {
/* if received char is V_STOP and V_START (both are equal value) */
if (c == tty->termios.c_cc[VSTOP]) {
if (c == tty->termios.c_cc[VSTART]) {
109279: 75 05 jne 109280 <rtems_termios_enqueue_raw_characters+0xc9><== ALWAYS TAKEN
/* received VSTOP and VSTART==VSTOP? */
/* then toggle "stop output" status */
tty->flow_ctrl = tty->flow_ctrl ^ FL_ORCVXOF;
10927b: 83 f0 10 xor $0x10,%eax <== NOT EXECUTED
10927e: eb 03 jmp 109283 <rtems_termios_enqueue_raw_characters+0xcc><== NOT EXECUTED
}
else {
/* VSTOP received (other code than VSTART) */
/* stop output */
tty->flow_ctrl |= FL_ORCVXOF;
109280: 83 c8 10 or $0x10,%eax
109283: 89 83 b8 00 00 00 mov %eax,0xb8(%ebx)
109289: e9 90 01 00 00 jmp 10941e <rtems_termios_enqueue_raw_characters+0x267>
}
flow_rcv = true;
}
else if (c == tty->termios.c_cc[VSTART]) {
10928e: 39 d0 cmp %edx,%eax
109290: 75 0b jne 10929d <rtems_termios_enqueue_raw_characters+0xe6><== ALWAYS TAKEN
/* VSTART received */
/* restart output */
tty->flow_ctrl &= ~FL_ORCVXOF;
109292: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax <== NOT EXECUTED
109298: 83 e0 ef and $0xffffffef,%eax <== NOT EXECUTED
10929b: eb e6 jmp 109283 <rtems_termios_enqueue_raw_characters+0xcc><== NOT EXECUTED
flow_rcv = true;
}
}
if (flow_rcv) {
10929d: 80 7d e3 00 cmpb $0x0,-0x1d(%ebp)
1092a1: 74 51 je 1092f4 <rtems_termios_enqueue_raw_characters+0x13d><== ALWAYS TAKEN
/* restart output according to FL_ORCVXOF flag */
if ((tty->flow_ctrl & (FL_ORCVXOF | FL_OSTOP)) == FL_OSTOP) {
1092a3: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax
1092a9: 83 e0 30 and $0x30,%eax
1092ac: 83 f8 20 cmp $0x20,%eax
1092af: 0f 85 4d 01 00 00 jne 109402 <rtems_termios_enqueue_raw_characters+0x24b><== ALWAYS TAKEN
/* disable interrupts */
rtems_interrupt_disable(level);
1092b5: 9c pushf <== NOT EXECUTED
1092b6: fa cli <== NOT EXECUTED
1092b7: 8f 45 e4 popl -0x1c(%ebp) <== NOT EXECUTED
tty->flow_ctrl &= ~FL_OSTOP;
1092ba: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax <== NOT EXECUTED
1092c0: 83 e0 df and $0xffffffdf,%eax <== NOT EXECUTED
1092c3: 89 83 b8 00 00 00 mov %eax,0xb8(%ebx) <== NOT EXECUTED
/* check for chars in output buffer (or rob_state?) */
if (tty->rawOutBufState != rob_idle) {
1092c9: 83 bb 94 00 00 00 00 cmpl $0x0,0x94(%ebx) <== NOT EXECUTED
1092d0: 74 19 je 1092eb <rtems_termios_enqueue_raw_characters+0x134><== NOT EXECUTED
/* if chars available, call write function... */
(*tty->device.write)(
tty->minor, &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail], 1);
1092d2: 8b 83 84 00 00 00 mov 0x84(%ebx),%eax <== NOT EXECUTED
rtems_interrupt_disable(level);
tty->flow_ctrl &= ~FL_OSTOP;
/* check for chars in output buffer (or rob_state?) */
if (tty->rawOutBufState != rob_idle) {
/* if chars available, call write function... */
(*tty->device.write)(
1092d8: 52 push %edx <== NOT EXECUTED
1092d9: 6a 01 push $0x1 <== NOT EXECUTED
1092db: 03 43 7c add 0x7c(%ebx),%eax <== NOT EXECUTED
1092de: 50 push %eax <== NOT EXECUTED
1092df: ff 73 10 pushl 0x10(%ebx) <== NOT EXECUTED
1092e2: ff 93 a4 00 00 00 call *0xa4(%ebx) <== NOT EXECUTED
1092e8: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
tty->minor, &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail], 1);
}
/* reenable interrupts */
rtems_interrupt_enable(level);
1092eb: ff 75 e4 pushl -0x1c(%ebp) <== NOT EXECUTED
1092ee: 9d popf <== NOT EXECUTED
1092ef: e9 0e 01 00 00 jmp 109402 <rtems_termios_enqueue_raw_characters+0x24b><== NOT EXECUTED
}
} else {
newTail = (tty->rawInBuf.Tail + 1) % tty->rawInBuf.Size;
1092f4: 8b 43 60 mov 0x60(%ebx),%eax
1092f7: 8b 4b 64 mov 0x64(%ebx),%ecx
1092fa: 40 inc %eax
1092fb: 31 d2 xor %edx,%edx
1092fd: f7 f1 div %ecx
1092ff: 89 55 e4 mov %edx,-0x1c(%ebp)
/* if chars_in_buffer > highwater */
rtems_interrupt_disable(level);
109302: 9c pushf
109303: fa cli
109304: 8f 45 d8 popl -0x28(%ebp)
if ((((newTail - tty->rawInBuf.Head + tty->rawInBuf.Size)
109307: 8b 53 5c mov 0x5c(%ebx),%edx
10930a: 8b 43 64 mov 0x64(%ebx),%eax
% tty->rawInBuf.Size) > tty->highwater) &&
10930d: 8b 4b 64 mov 0x64(%ebx),%ecx
}
} else {
newTail = (tty->rawInBuf.Tail + 1) % tty->rawInBuf.Size;
/* if chars_in_buffer > highwater */
rtems_interrupt_disable(level);
if ((((newTail - tty->rawInBuf.Head + tty->rawInBuf.Size)
109310: 29 d0 sub %edx,%eax
109312: 03 45 e4 add -0x1c(%ebp),%eax
% tty->rawInBuf.Size) > tty->highwater) &&
109315: 31 d2 xor %edx,%edx
109317: f7 f1 div %ecx
}
} else {
newTail = (tty->rawInBuf.Tail + 1) % tty->rawInBuf.Size;
/* if chars_in_buffer > highwater */
rtems_interrupt_disable(level);
if ((((newTail - tty->rawInBuf.Head + tty->rawInBuf.Size)
109319: 3b 93 c0 00 00 00 cmp 0xc0(%ebx),%edx
10931f: 0f 86 92 00 00 00 jbe 1093b7 <rtems_termios_enqueue_raw_characters+0x200><== ALWAYS TAKEN
% tty->rawInBuf.Size) > tty->highwater) &&
!(tty->flow_ctrl & FL_IREQXOF)) {
109325: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax <== NOT EXECUTED
} else {
newTail = (tty->rawInBuf.Tail + 1) % tty->rawInBuf.Size;
/* if chars_in_buffer > highwater */
rtems_interrupt_disable(level);
if ((((newTail - tty->rawInBuf.Head + tty->rawInBuf.Size)
% tty->rawInBuf.Size) > tty->highwater) &&
10932b: a8 01 test $0x1,%al <== NOT EXECUTED
10932d: 0f 85 84 00 00 00 jne 1093b7 <rtems_termios_enqueue_raw_characters+0x200><== NOT EXECUTED
!(tty->flow_ctrl & FL_IREQXOF)) {
/* incoming data stream should be stopped */
tty->flow_ctrl |= FL_IREQXOF;
109333: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax <== NOT EXECUTED
109339: 83 c8 01 or $0x1,%eax <== NOT EXECUTED
10933c: 89 83 b8 00 00 00 mov %eax,0xb8(%ebx) <== NOT EXECUTED
if ((tty->flow_ctrl & (FL_MDXOF | FL_ISNTXOF))
109342: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax <== NOT EXECUTED
109348: 25 02 04 00 00 and $0x402,%eax <== NOT EXECUTED
10934d: 3d 00 04 00 00 cmp $0x400,%eax <== NOT EXECUTED
== (FL_MDXOF ) ) {
if ((tty->flow_ctrl & FL_OSTOP) ||
109352: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax <== NOT EXECUTED
if ((((newTail - tty->rawInBuf.Head + tty->rawInBuf.Size)
% tty->rawInBuf.Size) > tty->highwater) &&
!(tty->flow_ctrl & FL_IREQXOF)) {
/* incoming data stream should be stopped */
tty->flow_ctrl |= FL_IREQXOF;
if ((tty->flow_ctrl & (FL_MDXOF | FL_ISNTXOF))
109358: 75 2d jne 109387 <rtems_termios_enqueue_raw_characters+0x1d0><== NOT EXECUTED
== (FL_MDXOF ) ) {
if ((tty->flow_ctrl & FL_OSTOP) ||
10935a: a8 20 test $0x20,%al <== NOT EXECUTED
10935c: 75 09 jne 109367 <rtems_termios_enqueue_raw_characters+0x1b0><== NOT EXECUTED
10935e: 83 bb 94 00 00 00 00 cmpl $0x0,0x94(%ebx) <== NOT EXECUTED
109365: 75 50 jne 1093b7 <rtems_termios_enqueue_raw_characters+0x200><== NOT EXECUTED
(tty->rawOutBufState == rob_idle)) {
/* if tx is stopped due to XOFF or out of data */
/* call write function here */
tty->flow_ctrl |= FL_ISNTXOF;
109367: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax <== NOT EXECUTED
10936d: 83 c8 02 or $0x2,%eax <== NOT EXECUTED
109370: 89 83 b8 00 00 00 mov %eax,0xb8(%ebx) <== NOT EXECUTED
(*tty->device.write)(tty->minor,
109376: 51 push %ecx <== NOT EXECUTED
109377: 6a 01 push $0x1 <== NOT EXECUTED
109379: ff 75 d0 pushl -0x30(%ebp) <== NOT EXECUTED
10937c: ff 73 10 pushl 0x10(%ebx) <== NOT EXECUTED
10937f: ff 93 a4 00 00 00 call *0xa4(%ebx) <== NOT EXECUTED
109385: eb 2d jmp 1093b4 <rtems_termios_enqueue_raw_characters+0x1fd><== NOT EXECUTED
(void *)&(tty->termios.c_cc[VSTOP]), 1);
}
} else if ((tty->flow_ctrl & (FL_MDRTS | FL_IRTSOFF)) == (FL_MDRTS) ) {
109387: 25 04 01 00 00 and $0x104,%eax <== NOT EXECUTED
10938c: 3d 00 01 00 00 cmp $0x100,%eax <== NOT EXECUTED
109391: 75 24 jne 1093b7 <rtems_termios_enqueue_raw_characters+0x200><== NOT EXECUTED
tty->flow_ctrl |= FL_IRTSOFF;
109393: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax <== NOT EXECUTED
109399: 83 c8 04 or $0x4,%eax <== NOT EXECUTED
10939c: 89 83 b8 00 00 00 mov %eax,0xb8(%ebx) <== NOT EXECUTED
/* deactivate RTS line */
if (tty->device.stopRemoteTx != NULL) {
1093a2: 8b 83 ac 00 00 00 mov 0xac(%ebx),%eax <== NOT EXECUTED
1093a8: 85 c0 test %eax,%eax <== NOT EXECUTED
1093aa: 74 0b je 1093b7 <rtems_termios_enqueue_raw_characters+0x200><== NOT EXECUTED
tty->device.stopRemoteTx(tty->minor);
1093ac: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1093af: ff 73 10 pushl 0x10(%ebx) <== NOT EXECUTED
1093b2: ff d0 call *%eax <== NOT EXECUTED
1093b4: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
}
}
/* reenable interrupts */
rtems_interrupt_enable(level);
1093b7: ff 75 d8 pushl -0x28(%ebp)
1093ba: 9d popf
if (newTail == tty->rawInBuf.Head) {
1093bb: 8b 43 5c mov 0x5c(%ebx),%eax
1093be: 39 45 e4 cmp %eax,-0x1c(%ebp)
1093c1: 75 03 jne 1093c6 <rtems_termios_enqueue_raw_characters+0x20f><== ALWAYS TAKEN
dropped++;
1093c3: 47 inc %edi <== NOT EXECUTED
1093c4: eb 3c jmp 109402 <rtems_termios_enqueue_raw_characters+0x24b><== NOT EXECUTED
} else {
tty->rawInBuf.theBuf[newTail] = c;
1093c6: 8b 43 58 mov 0x58(%ebx),%eax
1093c9: 8a 4d e2 mov -0x1e(%ebp),%cl
1093cc: 8b 55 e4 mov -0x1c(%ebp),%edx
1093cf: 88 0c 10 mov %cl,(%eax,%edx,1)
tty->rawInBuf.Tail = newTail;
1093d2: 89 53 60 mov %edx,0x60(%ebx)
/*
* check to see if rcv wakeup callback was set
*/
if (( !tty->tty_rcvwakeup ) && ( tty->tty_rcv.sw_pfn != NULL )) {
1093d5: 83 bb e4 00 00 00 00 cmpl $0x0,0xe4(%ebx)
1093dc: 75 24 jne 109402 <rtems_termios_enqueue_raw_characters+0x24b><== NEVER TAKEN
1093de: 8b 83 dc 00 00 00 mov 0xdc(%ebx),%eax
1093e4: 85 c0 test %eax,%eax
1093e6: 74 1a je 109402 <rtems_termios_enqueue_raw_characters+0x24b><== ALWAYS TAKEN
(*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg);
1093e8: 52 push %edx <== NOT EXECUTED
1093e9: 52 push %edx <== NOT EXECUTED
1093ea: ff b3 e0 00 00 00 pushl 0xe0(%ebx) <== NOT EXECUTED
1093f0: ff 75 d4 pushl -0x2c(%ebp) <== NOT EXECUTED
1093f3: ff d0 call *%eax <== NOT EXECUTED
tty->tty_rcvwakeup = 1;
1093f5: c7 83 e4 00 00 00 01 movl $0x1,0xe4(%ebx) <== NOT EXECUTED
1093fc: 00 00 00
1093ff: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
tty->tty_rcvwakeup = 1;
}
return 0;
}
while (len--) {
109402: 3b 75 dc cmp -0x24(%ebp),%esi
109405: 0f 85 46 fe ff ff jne 109251 <rtems_termios_enqueue_raw_characters+0x9a>
}
}
}
}
tty->rawInBufDropped += dropped;
10940b: 01 7b 78 add %edi,0x78(%ebx)
rtems_semaphore_release (tty->rawInBuf.Semaphore);
10940e: 83 ec 0c sub $0xc,%esp
109411: ff 73 68 pushl 0x68(%ebx)
109414: e8 67 0a 00 00 call 109e80 <rtems_semaphore_release>
return dropped;
109419: 83 c4 10 add $0x10,%esp
10941c: eb 09 jmp 109427 <rtems_termios_enqueue_raw_characters+0x270>
* device receive interrupt handler.
* Returns the number of characters dropped because of overflow.
*/
int
rtems_termios_enqueue_raw_characters (void *ttyp, const char *buf, int len)
{
10941e: c6 45 e3 01 movb $0x1,-0x1d(%ebp)
109422: e9 7c fe ff ff jmp 1092a3 <rtems_termios_enqueue_raw_characters+0xec>
}
tty->rawInBufDropped += dropped;
rtems_semaphore_release (tty->rawInBuf.Semaphore);
return dropped;
}
109427: 89 f8 mov %edi,%eax
109429: 8d 65 f4 lea -0xc(%ebp),%esp
10942c: 5b pop %ebx
10942d: 5e pop %esi
10942e: 5f pop %edi
10942f: 5d pop %ebp
109430: c3 ret
00108590 <rtems_termios_ioctl>:
}
}
rtems_status_code
rtems_termios_ioctl (void *arg)
{
108590: 55 push %ebp
108591: 89 e5 mov %esp,%ebp
108593: 57 push %edi
108594: 56 push %esi
108595: 53 push %ebx
108596: 83 ec 20 sub $0x20,%esp
108599: 8b 75 08 mov 0x8(%ebp),%esi
rtems_libio_ioctl_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
10859c: 8b 06 mov (%esi),%eax
10859e: 8b 58 2c mov 0x2c(%eax),%ebx
struct ttywakeup *wakeup = (struct ttywakeup *)args->buffer;
1085a1: 8b 7e 08 mov 0x8(%esi),%edi
rtems_status_code sc;
args->ioctl_return = 0;
1085a4: c7 46 0c 00 00 00 00 movl $0x0,0xc(%esi)
sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
1085ab: 6a 00 push $0x0
1085ad: 6a 00 push $0x0
1085af: ff 73 18 pushl 0x18(%ebx)
1085b2: e8 d9 17 00 00 call 109d90 <rtems_semaphore_obtain>
1085b7: 89 45 e4 mov %eax,-0x1c(%ebp)
if (sc != RTEMS_SUCCESSFUL) {
1085ba: 83 c4 10 add $0x10,%esp
1085bd: 85 c0 test %eax,%eax
1085bf: 0f 85 f5 02 00 00 jne 1088ba <rtems_termios_ioctl+0x32a><== NEVER TAKEN
return sc;
}
switch (args->command) {
1085c5: 8b 46 04 mov 0x4(%esi),%eax
1085c8: 83 f8 04 cmp $0x4,%eax
1085cb: 0f 84 55 02 00 00 je 108826 <rtems_termios_ioctl+0x296>
1085d1: 77 10 ja 1085e3 <rtems_termios_ioctl+0x53>
1085d3: 83 f8 02 cmp $0x2,%eax
1085d6: 74 71 je 108649 <rtems_termios_ioctl+0xb9>
1085d8: 0f 87 19 02 00 00 ja 1087f7 <rtems_termios_ioctl+0x267>
1085de: 48 dec %eax
1085df: 75 35 jne 108616 <rtems_termios_ioctl+0x86><== NEVER TAKEN
1085e1: eb 52 jmp 108635 <rtems_termios_ioctl+0xa5>
1085e3: 3d 7f 66 04 40 cmp $0x4004667f,%eax
1085e8: 0f 84 9b 02 00 00 je 108889 <rtems_termios_ioctl+0x2f9><== NEVER TAKEN
1085ee: 77 0a ja 1085fa <rtems_termios_ioctl+0x6a>
1085f0: 83 f8 05 cmp $0x5,%eax
1085f3: 75 21 jne 108616 <rtems_termios_ioctl+0x86>
1085f5: e9 16 02 00 00 jmp 108810 <rtems_termios_ioctl+0x280>
1085fa: 3d 1a 74 04 40 cmp $0x4004741a,%eax
1085ff: 8b 93 cc 00 00 00 mov 0xcc(%ebx),%edx
108605: 0f 84 77 02 00 00 je 108882 <rtems_termios_ioctl+0x2f2>
10860b: 3d 1b 74 04 80 cmp $0x8004741b,%eax
108610: 0f 84 23 02 00 00 je 108839 <rtems_termios_ioctl+0x2a9><== ALWAYS TAKEN
default:
if (rtems_termios_linesw[tty->t_line].l_ioctl != NULL) {
108616: 8b 83 cc 00 00 00 mov 0xcc(%ebx),%eax
10861c: c1 e0 05 shl $0x5,%eax
10861f: 8b 80 d8 df 12 00 mov 0x12dfd8(%eax),%eax
108625: 85 c0 test %eax,%eax
108627: 0f 84 78 02 00 00 je 1088a5 <rtems_termios_ioctl+0x315><== NEVER TAKEN
sc = rtems_termios_linesw[tty->t_line].l_ioctl(tty,args);
10862d: 57 push %edi
10862e: 57 push %edi
10862f: 56 push %esi
108630: e9 42 02 00 00 jmp 108877 <rtems_termios_ioctl+0x2e7>
sc = RTEMS_INVALID_NUMBER;
}
break;
case RTEMS_IO_GET_ATTRIBUTES:
*(struct termios *)args->buffer = tty->termios;
108635: 8b 46 08 mov 0x8(%esi),%eax
108638: 8d 73 30 lea 0x30(%ebx),%esi
10863b: b9 09 00 00 00 mov $0x9,%ecx
108640: 89 c7 mov %eax,%edi
108642: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
break;
108644: e9 63 02 00 00 jmp 1088ac <rtems_termios_ioctl+0x31c>
case RTEMS_IO_SET_ATTRIBUTES:
tty->termios = *(struct termios *)args->buffer;
108649: 8b 76 08 mov 0x8(%esi),%esi
10864c: 8d 7b 30 lea 0x30(%ebx),%edi
10864f: b9 09 00 00 00 mov $0x9,%ecx
108654: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
/*
* check for flow control options to be switched off
*/
/* check for outgoing XON/XOFF flow control switched off */
if (( tty->flow_ctrl & FL_MDXON) &&
108656: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax
10865c: f6 c4 02 test $0x2,%ah
10865f: 74 57 je 1086b8 <rtems_termios_ioctl+0x128>
108661: f6 43 31 04 testb $0x4,0x31(%ebx)
108665: 75 51 jne 1086b8 <rtems_termios_ioctl+0x128>
!(tty->termios.c_iflag & IXON)) {
/* clear related flags in flow_ctrl */
tty->flow_ctrl &= ~(FL_MDXON | FL_ORCVXOF);
108667: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax
10866d: 25 ef fd ff ff and $0xfffffdef,%eax
108672: 89 83 b8 00 00 00 mov %eax,0xb8(%ebx)
/* has output been stopped due to received XOFF? */
if (tty->flow_ctrl & FL_OSTOP) {
108678: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax
10867e: a8 20 test $0x20,%al
108680: 74 36 je 1086b8 <rtems_termios_ioctl+0x128><== ALWAYS TAKEN
/* disable interrupts */
rtems_interrupt_disable(level);
108682: 9c pushf <== NOT EXECUTED
108683: fa cli <== NOT EXECUTED
108684: 5e pop %esi <== NOT EXECUTED
tty->flow_ctrl &= ~FL_OSTOP;
108685: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax <== NOT EXECUTED
10868b: 83 e0 df and $0xffffffdf,%eax <== NOT EXECUTED
10868e: 89 83 b8 00 00 00 mov %eax,0xb8(%ebx) <== NOT EXECUTED
/* check for chars in output buffer (or rob_state?) */
if (tty->rawOutBufState != rob_idle) {
108694: 83 bb 94 00 00 00 00 cmpl $0x0,0x94(%ebx) <== NOT EXECUTED
10869b: 74 19 je 1086b6 <rtems_termios_ioctl+0x126><== NOT EXECUTED
/* if chars available, call write function... */
(*tty->device.write)(
tty->minor, &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail],1);
10869d: 8b 83 84 00 00 00 mov 0x84(%ebx),%eax <== NOT EXECUTED
rtems_interrupt_disable(level);
tty->flow_ctrl &= ~FL_OSTOP;
/* check for chars in output buffer (or rob_state?) */
if (tty->rawOutBufState != rob_idle) {
/* if chars available, call write function... */
(*tty->device.write)(
1086a3: 51 push %ecx <== NOT EXECUTED
1086a4: 6a 01 push $0x1 <== NOT EXECUTED
1086a6: 03 43 7c add 0x7c(%ebx),%eax <== NOT EXECUTED
1086a9: 50 push %eax <== NOT EXECUTED
1086aa: ff 73 10 pushl 0x10(%ebx) <== NOT EXECUTED
1086ad: ff 93 a4 00 00 00 call *0xa4(%ebx) <== NOT EXECUTED
1086b3: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
tty->minor, &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail],1);
}
/* reenable interrupts */
rtems_interrupt_enable(level);
1086b6: 56 push %esi <== NOT EXECUTED
1086b7: 9d popf <== NOT EXECUTED
}
}
/* check for incoming XON/XOFF flow control switched off */
if (( tty->flow_ctrl & FL_MDXOF) && !(tty->termios.c_iflag & IXOFF)) {
1086b8: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax
1086be: f6 c4 04 test $0x4,%ah
1086c1: 74 24 je 1086e7 <rtems_termios_ioctl+0x157>
1086c3: f6 43 31 10 testb $0x10,0x31(%ebx)
1086c7: 75 1e jne 1086e7 <rtems_termios_ioctl+0x157><== NEVER TAKEN
/* clear related flags in flow_ctrl */
tty->flow_ctrl &= ~(FL_MDXOF);
1086c9: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax
1086cf: 80 e4 fb and $0xfb,%ah
1086d2: 89 83 b8 00 00 00 mov %eax,0xb8(%ebx)
/* FIXME: what happens, if we had sent XOFF but not yet XON? */
tty->flow_ctrl &= ~(FL_ISNTXOF);
1086d8: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax
1086de: 83 e0 fd and $0xfffffffd,%eax
1086e1: 89 83 b8 00 00 00 mov %eax,0xb8(%ebx)
}
/* check for incoming RTS/CTS flow control switched off */
if (( tty->flow_ctrl & FL_MDRTS) && !(tty->termios.c_cflag & CRTSCTS)) {
1086e7: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax
1086ed: f6 c4 01 test $0x1,%ah
1086f0: 74 43 je 108735 <rtems_termios_ioctl+0x1a5><== ALWAYS TAKEN
1086f2: 83 7b 38 00 cmpl $0x0,0x38(%ebx) <== NOT EXECUTED
1086f6: 78 3d js 108735 <rtems_termios_ioctl+0x1a5><== NOT EXECUTED
/* clear related flags in flow_ctrl */
tty->flow_ctrl &= ~(FL_MDRTS);
1086f8: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax <== NOT EXECUTED
1086fe: 80 e4 fe and $0xfe,%ah <== NOT EXECUTED
108701: 89 83 b8 00 00 00 mov %eax,0xb8(%ebx) <== NOT EXECUTED
/* restart remote Tx, if it was stopped */
if ((tty->flow_ctrl & FL_IRTSOFF) && (tty->device.startRemoteTx != NULL)) {
108707: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax <== NOT EXECUTED
10870d: a8 04 test $0x4,%al <== NOT EXECUTED
10870f: 74 15 je 108726 <rtems_termios_ioctl+0x196><== NOT EXECUTED
108711: 8b 83 b0 00 00 00 mov 0xb0(%ebx),%eax <== NOT EXECUTED
108717: 85 c0 test %eax,%eax <== NOT EXECUTED
108719: 74 0b je 108726 <rtems_termios_ioctl+0x196><== NOT EXECUTED
tty->device.startRemoteTx(tty->minor);
10871b: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
10871e: ff 73 10 pushl 0x10(%ebx) <== NOT EXECUTED
108721: ff d0 call *%eax <== NOT EXECUTED
108723: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
tty->flow_ctrl &= ~(FL_IRTSOFF);
108726: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax <== NOT EXECUTED
10872c: 83 e0 fb and $0xfffffffb,%eax <== NOT EXECUTED
10872f: 89 83 b8 00 00 00 mov %eax,0xb8(%ebx) <== NOT EXECUTED
/*
* check for flow control options to be switched on
*/
/* check for incoming RTS/CTS flow control switched on */
if (tty->termios.c_cflag & CRTSCTS) {
108735: 83 7b 38 00 cmpl $0x0,0x38(%ebx)
108739: 79 0f jns 10874a <rtems_termios_ioctl+0x1ba><== ALWAYS TAKEN
tty->flow_ctrl |= FL_MDRTS;
10873b: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax <== NOT EXECUTED
108741: 80 cc 01 or $0x1,%ah <== NOT EXECUTED
108744: 89 83 b8 00 00 00 mov %eax,0xb8(%ebx) <== NOT EXECUTED
}
/* check for incoming XON/XOF flow control switched on */
if (tty->termios.c_iflag & IXOFF) {
10874a: 8b 53 30 mov 0x30(%ebx),%edx
10874d: f6 c6 10 test $0x10,%dh
108750: 74 0f je 108761 <rtems_termios_ioctl+0x1d1>
tty->flow_ctrl |= FL_MDXOF;
108752: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax
108758: 80 cc 04 or $0x4,%ah
10875b: 89 83 b8 00 00 00 mov %eax,0xb8(%ebx)
}
/* check for outgoing XON/XOF flow control switched on */
if (tty->termios.c_iflag & IXON) {
108761: 80 e6 04 and $0x4,%dh
108764: 74 0f je 108775 <rtems_termios_ioctl+0x1e5>
tty->flow_ctrl |= FL_MDXON;
108766: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax
10876c: 80 cc 02 or $0x2,%ah
10876f: 89 83 b8 00 00 00 mov %eax,0xb8(%ebx)
tty->termios = *(struct termios *)args->buffer;
/* check for and process change in flow control options */
termios_set_flowctrl(tty);
if (tty->termios.c_lflag & ICANON) {
108775: f6 43 3c 02 testb $0x2,0x3c(%ebx)
108779: 74 02 je 10877d <rtems_termios_ioctl+0x1ed>
10877b: eb 3b jmp 1087b8 <rtems_termios_ioctl+0x228>
tty->rawInBufSemaphoreOptions = RTEMS_WAIT;
tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT;
tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT;
} else {
tty->vtimeTicks = tty->termios.c_cc[VTIME] *
10877d: 0f b6 73 46 movzbl 0x46(%ebx),%esi
rtems_clock_get_ticks_per_second() / 10;
108781: e8 5e 10 00 00 call 1097e4 <rtems_clock_get_ticks_per_second>
if (tty->termios.c_lflag & ICANON) {
tty->rawInBufSemaphoreOptions = RTEMS_WAIT;
tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT;
tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT;
} else {
tty->vtimeTicks = tty->termios.c_cc[VTIME] *
108786: 0f af c6 imul %esi,%eax
rtems_clock_get_ticks_per_second() / 10;
108789: b9 0a 00 00 00 mov $0xa,%ecx
10878e: 31 d2 xor %edx,%edx
108790: f7 f1 div %ecx
if (tty->termios.c_lflag & ICANON) {
tty->rawInBufSemaphoreOptions = RTEMS_WAIT;
tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT;
tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT;
} else {
tty->vtimeTicks = tty->termios.c_cc[VTIME] *
108792: 89 43 54 mov %eax,0x54(%ebx)
rtems_clock_get_ticks_per_second() / 10;
if (tty->termios.c_cc[VTIME]) {
108795: 80 7b 46 00 cmpb $0x0,0x46(%ebx)
108799: 74 17 je 1087b2 <rtems_termios_ioctl+0x222>
tty->rawInBufSemaphoreOptions = RTEMS_WAIT;
10879b: c7 43 6c 00 00 00 00 movl $0x0,0x6c(%ebx)
tty->rawInBufSemaphoreTimeout = tty->vtimeTicks;
1087a2: 89 43 70 mov %eax,0x70(%ebx)
if (tty->termios.c_cc[VMIN])
1087a5: 80 7b 47 00 cmpb $0x0,0x47(%ebx)
1087a9: 74 02 je 1087ad <rtems_termios_ioctl+0x21d>
1087ab: eb 19 jmp 1087c6 <rtems_termios_ioctl+0x236>
tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT;
else
tty->rawInBufSemaphoreFirstTimeout = tty->vtimeTicks;
1087ad: 89 43 74 mov %eax,0x74(%ebx)
1087b0: eb 24 jmp 1087d6 <rtems_termios_ioctl+0x246>
} else {
if (tty->termios.c_cc[VMIN]) {
1087b2: 80 7b 47 00 cmpb $0x0,0x47(%ebx)
1087b6: 74 17 je 1087cf <rtems_termios_ioctl+0x23f><== ALWAYS TAKEN
tty->rawInBufSemaphoreOptions = RTEMS_WAIT;
1087b8: c7 43 6c 00 00 00 00 movl $0x0,0x6c(%ebx)
tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT;
1087bf: c7 43 70 00 00 00 00 movl $0x0,0x70(%ebx)
tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT;
1087c6: c7 43 74 00 00 00 00 movl $0x0,0x74(%ebx)
1087cd: eb 07 jmp 1087d6 <rtems_termios_ioctl+0x246>
} else {
tty->rawInBufSemaphoreOptions = RTEMS_NO_WAIT;
1087cf: c7 43 6c 01 00 00 00 movl $0x1,0x6c(%ebx)
}
}
}
if (tty->device.setAttributes)
1087d6: 8b 83 a8 00 00 00 mov 0xa8(%ebx),%eax
1087dc: 85 c0 test %eax,%eax
1087de: 0f 84 c8 00 00 00 je 1088ac <rtems_termios_ioctl+0x31c><== NEVER TAKEN
(*tty->device.setAttributes)(tty->minor, &tty->termios);
1087e4: 52 push %edx
1087e5: 52 push %edx
1087e6: 8d 53 30 lea 0x30(%ebx),%edx
1087e9: 52 push %edx
1087ea: ff 73 10 pushl 0x10(%ebx)
1087ed: ff d0 call *%eax
1087ef: 83 c4 10 add $0x10,%esp
1087f2: e9 b5 00 00 00 jmp 1088ac <rtems_termios_ioctl+0x31c>
drainOutput (struct rtems_termios_tty *tty)
{
rtems_interrupt_level level;
rtems_status_code sc;
if (tty->device.outputUsesInterrupts != TERMIOS_POLLED) {
1087f7: 83 bb b4 00 00 00 00 cmpl $0x0,0xb4(%ebx)
1087fe: 0f 84 a8 00 00 00 je 1088ac <rtems_termios_ioctl+0x31c>
108804: 89 d8 mov %ebx,%eax
108806: e8 9b f7 ff ff call 107fa6 <drainOutput.part.0>
10880b: e9 9c 00 00 00 jmp 1088ac <rtems_termios_ioctl+0x31c>
case RTEMS_IO_TCDRAIN:
drainOutput (tty);
break;
case RTEMS_IO_SNDWAKEUP:
tty->tty_snd = *wakeup;
108810: 8b 07 mov (%edi),%eax
108812: 8b 57 04 mov 0x4(%edi),%edx
108815: 89 83 d4 00 00 00 mov %eax,0xd4(%ebx)
10881b: 89 93 d8 00 00 00 mov %edx,0xd8(%ebx)
break;
108821: e9 86 00 00 00 jmp 1088ac <rtems_termios_ioctl+0x31c>
case RTEMS_IO_RCVWAKEUP:
tty->tty_rcv = *wakeup;
108826: 8b 07 mov (%edi),%eax
108828: 8b 57 04 mov 0x4(%edi),%edx
10882b: 89 83 dc 00 00 00 mov %eax,0xdc(%ebx)
108831: 89 93 e0 00 00 00 mov %edx,0xe0(%ebx)
break;
108837: eb 73 jmp 1088ac <rtems_termios_ioctl+0x31c>
#if 1 /* FIXME */
case TIOCSETD:
/*
* close old line discipline
*/
if (rtems_termios_linesw[tty->t_line].l_close != NULL) {
108839: c1 e2 05 shl $0x5,%edx
10883c: 8b 82 c4 df 12 00 mov 0x12dfc4(%edx),%eax
108842: 85 c0 test %eax,%eax
108844: 74 0c je 108852 <rtems_termios_ioctl+0x2c2>
sc = rtems_termios_linesw[tty->t_line].l_close(tty);
108846: 83 ec 0c sub $0xc,%esp
108849: 53 push %ebx
10884a: ff d0 call *%eax
10884c: 89 45 e4 mov %eax,-0x1c(%ebp)
10884f: 83 c4 10 add $0x10,%esp
}
tty->t_line=*(int*)(args->buffer);
108852: 8b 46 08 mov 0x8(%esi),%eax
108855: 8b 00 mov (%eax),%eax
108857: 89 83 cc 00 00 00 mov %eax,0xcc(%ebx)
tty->t_sc = NULL; /* ensure that no more valid data */
10885d: c7 83 d0 00 00 00 00 movl $0x0,0xd0(%ebx)
108864: 00 00 00
/*
* open new line discipline
*/
if (rtems_termios_linesw[tty->t_line].l_open != NULL) {
108867: c1 e0 05 shl $0x5,%eax
10886a: 8b 80 c0 df 12 00 mov 0x12dfc0(%eax),%eax
108870: 85 c0 test %eax,%eax
108872: 74 38 je 1088ac <rtems_termios_ioctl+0x31c>
sc = rtems_termios_linesw[tty->t_line].l_open(tty);
108874: 83 ec 0c sub $0xc,%esp
108877: 53 push %ebx
108878: ff d0 call *%eax
10887a: 89 45 e4 mov %eax,-0x1c(%ebp)
10887d: e9 6d ff ff ff jmp 1087ef <rtems_termios_ioctl+0x25f>
}
break;
case TIOCGETD:
*(int*)(args->buffer)=tty->t_line;
108882: 8b 46 08 mov 0x8(%esi),%eax
108885: 89 10 mov %edx,(%eax)
break;
108887: eb 23 jmp 1088ac <rtems_termios_ioctl+0x31c>
#endif
case FIONREAD: {
int rawnc = tty->rawInBuf.Tail - tty->rawInBuf.Head;
108889: 8b 43 60 mov 0x60(%ebx),%eax <== NOT EXECUTED
10888c: 8b 53 5c mov 0x5c(%ebx),%edx <== NOT EXECUTED
if ( rawnc < 0 )
10888f: 29 d0 sub %edx,%eax <== NOT EXECUTED
108891: 79 05 jns 108898 <rtems_termios_ioctl+0x308><== NOT EXECUTED
rawnc += tty->rawInBuf.Size;
108893: 8b 53 64 mov 0x64(%ebx),%edx <== NOT EXECUTED
108896: 01 d0 add %edx,%eax <== NOT EXECUTED
/* Half guess that this is the right operation */
*(int *)args->buffer = tty->ccount - tty->cindex + rawnc;
108898: 8b 56 08 mov 0x8(%esi),%edx <== NOT EXECUTED
10889b: 03 43 20 add 0x20(%ebx),%eax <== NOT EXECUTED
10889e: 2b 43 24 sub 0x24(%ebx),%eax <== NOT EXECUTED
1088a1: 89 02 mov %eax,(%edx) <== NOT EXECUTED
}
break;
1088a3: eb 07 jmp 1088ac <rtems_termios_ioctl+0x31c><== NOT EXECUTED
default:
if (rtems_termios_linesw[tty->t_line].l_ioctl != NULL) {
sc = rtems_termios_linesw[tty->t_line].l_ioctl(tty,args);
}
else {
sc = RTEMS_INVALID_NUMBER;
1088a5: c7 45 e4 0a 00 00 00 movl $0xa,-0x1c(%ebp) <== NOT EXECUTED
*(int *)args->buffer = tty->ccount - tty->cindex + rawnc;
}
break;
}
rtems_semaphore_release (tty->osem);
1088ac: 83 ec 0c sub $0xc,%esp
1088af: ff 73 18 pushl 0x18(%ebx)
1088b2: e8 c9 15 00 00 call 109e80 <rtems_semaphore_release>
return sc;
1088b7: 83 c4 10 add $0x10,%esp
}
1088ba: 8b 45 e4 mov -0x1c(%ebp),%eax
1088bd: 8d 65 f4 lea -0xc(%ebp),%esp
1088c0: 5b pop %ebx
1088c1: 5e pop %esi
1088c2: 5f pop %edi
1088c3: 5d pop %ebp
1088c4: c3 ret
00107ff5 <rtems_termios_open>:
rtems_device_major_number major,
rtems_device_minor_number minor,
void *arg,
const rtems_termios_callbacks *callbacks
)
{
107ff5: 55 push %ebp
107ff6: 89 e5 mov %esp,%ebp
107ff8: 57 push %edi
107ff9: 56 push %esi
107ffa: 53 push %ebx
107ffb: 83 ec 20 sub $0x20,%esp
struct rtems_termios_tty *tty;
/*
* See if the device has already been opened
*/
sc = rtems_semaphore_obtain(
107ffe: 6a 00 push $0x0
108000: 6a 00 push $0x0
108002: ff 35 14 e3 12 00 pushl 0x12e314
108008: e8 83 1d 00 00 call 109d90 <rtems_semaphore_obtain>
10800d: 89 45 e4 mov %eax,-0x1c(%ebp)
rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
108010: 83 c4 10 add $0x10,%esp
108013: 85 c0 test %eax,%eax
108015: 0f 85 b7 03 00 00 jne 1083d2 <rtems_termios_open+0x3dd><== NEVER TAKEN
return sc;
for (tty = rtems_termios_ttyHead ; tty != NULL ; tty = tty->forw) {
10801b: 8b 35 1c e3 12 00 mov 0x12e31c,%esi
108021: 89 f3 mov %esi,%ebx
108023: eb 16 jmp 10803b <rtems_termios_open+0x46>
if ((tty->major == major) && (tty->minor == minor))
108025: 8b 55 08 mov 0x8(%ebp),%edx
108028: 39 53 0c cmp %edx,0xc(%ebx)
10802b: 75 0c jne 108039 <rtems_termios_open+0x44>
10802d: 8b 55 0c mov 0xc(%ebp),%edx
108030: 39 53 10 cmp %edx,0x10(%ebx)
108033: 0f 84 f2 02 00 00 je 10832b <rtems_termios_open+0x336>
sc = rtems_semaphore_obtain(
rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
return sc;
for (tty = rtems_termios_ttyHead ; tty != NULL ; tty = tty->forw) {
108039: 8b 1b mov (%ebx),%ebx
10803b: 85 db test %ebx,%ebx
10803d: 75 e6 jne 108025 <rtems_termios_open+0x30>
10803f: e9 6e 03 00 00 jmp 1083b2 <rtems_termios_open+0x3bd>
/*
* Create a new device
*/
tty = calloc (1, sizeof (struct rtems_termios_tty));
if (tty == NULL) {
rtems_semaphore_release (rtems_termios_ttyMutex);
108044: 83 ec 0c sub $0xc,%esp
108047: e9 84 00 00 00 jmp 1080d0 <rtems_termios_open+0xdb>
return RTEMS_NO_MEMORY;
}
/*
* allocate raw input buffer
*/
tty->rawInBuf.Size = RAW_INPUT_BUFFER_SIZE;
10804c: a1 04 c1 12 00 mov 0x12c104,%eax
108051: 89 43 64 mov %eax,0x64(%ebx)
tty->rawInBuf.theBuf = malloc (tty->rawInBuf.Size);
108054: 8b 43 64 mov 0x64(%ebx),%eax
108057: 83 ec 0c sub $0xc,%esp
10805a: 50 push %eax
10805b: e8 94 e9 ff ff call 1069f4 <malloc>
108060: 89 c7 mov %eax,%edi
108062: 89 43 58 mov %eax,0x58(%ebx)
if (tty->rawInBuf.theBuf == NULL) {
108065: 83 c4 10 add $0x10,%esp
108068: 85 c0 test %eax,%eax
10806a: 75 05 jne 108071 <rtems_termios_open+0x7c>
free(tty);
10806c: 83 ec 0c sub $0xc,%esp
10806f: eb 58 jmp 1080c9 <rtems_termios_open+0xd4>
return RTEMS_NO_MEMORY;
}
/*
* allocate raw output buffer
*/
tty->rawOutBuf.Size = RAW_OUTPUT_BUFFER_SIZE;
108071: a1 08 c1 12 00 mov 0x12c108,%eax
108076: 89 83 88 00 00 00 mov %eax,0x88(%ebx)
tty->rawOutBuf.theBuf = malloc (tty->rawOutBuf.Size);
10807c: 8b 83 88 00 00 00 mov 0x88(%ebx),%eax
108082: 83 ec 0c sub $0xc,%esp
108085: 50 push %eax
108086: e8 69 e9 ff ff call 1069f4 <malloc>
10808b: 89 43 7c mov %eax,0x7c(%ebx)
if (tty->rawOutBuf.theBuf == NULL) {
10808e: 83 c4 10 add $0x10,%esp
108091: 85 c0 test %eax,%eax
108093: 75 05 jne 10809a <rtems_termios_open+0xa5>
free((void *)(tty->rawInBuf.theBuf));
108095: 83 ec 0c sub $0xc,%esp
108098: eb 28 jmp 1080c2 <rtems_termios_open+0xcd>
return RTEMS_NO_MEMORY;
}
/*
* allocate cooked buffer
*/
tty->cbuf = malloc (CBUFSIZE);
10809a: 83 ec 0c sub $0xc,%esp
10809d: ff 35 0c c1 12 00 pushl 0x12c10c
1080a3: 89 45 e0 mov %eax,-0x20(%ebp)
1080a6: e8 49 e9 ff ff call 1069f4 <malloc>
1080ab: 89 43 1c mov %eax,0x1c(%ebx)
if (tty->cbuf == NULL) {
1080ae: 83 c4 10 add $0x10,%esp
1080b1: 85 c0 test %eax,%eax
1080b3: 8b 55 e0 mov -0x20(%ebp),%edx
1080b6: 75 32 jne 1080ea <rtems_termios_open+0xf5>
free((void *)(tty->rawOutBuf.theBuf));
1080b8: 83 ec 0c sub $0xc,%esp
1080bb: 52 push %edx
1080bc: e8 73 e6 ff ff call 106734 <free>
free((void *)(tty->rawInBuf.theBuf));
1080c1: 58 pop %eax
1080c2: 57 push %edi
1080c3: e8 6c e6 ff ff call 106734 <free>
free(tty);
1080c8: 58 pop %eax
1080c9: 53 push %ebx
1080ca: e8 65 e6 ff ff call 106734 <free>
rtems_semaphore_release (rtems_termios_ttyMutex);
1080cf: 5f pop %edi
1080d0: ff 35 14 e3 12 00 pushl 0x12e314
1080d6: e8 a5 1d 00 00 call 109e80 <rtems_semaphore_release>
return RTEMS_NO_MEMORY;
1080db: 83 c4 10 add $0x10,%esp
1080de: c7 45 e4 1a 00 00 00 movl $0x1a,-0x1c(%ebp)
1080e5: e9 e8 02 00 00 jmp 1083d2 <rtems_termios_open+0x3dd>
}
/*
* Initialize wakeup callbacks
*/
tty->tty_snd.sw_pfn = NULL;
1080ea: c7 83 d4 00 00 00 00 movl $0x0,0xd4(%ebx)
1080f1: 00 00 00
tty->tty_snd.sw_arg = NULL;
1080f4: c7 83 d8 00 00 00 00 movl $0x0,0xd8(%ebx)
1080fb: 00 00 00
tty->tty_rcv.sw_pfn = NULL;
1080fe: c7 83 dc 00 00 00 00 movl $0x0,0xdc(%ebx)
108105: 00 00 00
tty->tty_rcv.sw_arg = NULL;
108108: c7 83 e0 00 00 00 00 movl $0x0,0xe0(%ebx)
10810f: 00 00 00
tty->tty_rcvwakeup = 0;
108112: c7 83 e4 00 00 00 00 movl $0x0,0xe4(%ebx)
108119: 00 00 00
/*
* link tty
*/
tty->forw = rtems_termios_ttyHead;
10811c: 89 33 mov %esi,(%ebx)
tty->back = NULL;
10811e: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx)
if (rtems_termios_ttyHead != NULL)
108125: 85 f6 test %esi,%esi
108127: 74 03 je 10812c <rtems_termios_open+0x137>
rtems_termios_ttyHead->back = tty;
108129: 89 5e 04 mov %ebx,0x4(%esi)
rtems_termios_ttyHead = tty;
10812c: 89 1d 1c e3 12 00 mov %ebx,0x12e31c
if (rtems_termios_ttyTail == NULL)
108132: 83 3d 18 e3 12 00 00 cmpl $0x0,0x12e318
108139: 75 06 jne 108141 <rtems_termios_open+0x14c>
rtems_termios_ttyTail = tty;
10813b: 89 1d 18 e3 12 00 mov %ebx,0x12e318
tty->minor = minor;
108141: 8b 55 0c mov 0xc(%ebp),%edx
108144: 89 53 10 mov %edx,0x10(%ebx)
tty->major = major;
108147: 8b 55 08 mov 0x8(%ebp),%edx
10814a: 89 53 0c mov %edx,0xc(%ebx)
/*
* Set up mutex semaphores
*/
sc = rtems_semaphore_create (
10814d: 83 ec 0c sub $0xc,%esp
108150: 8d 43 14 lea 0x14(%ebx),%eax
108153: 50 push %eax
108154: 6a 00 push $0x0
108156: 6a 54 push $0x54
108158: 6a 01 push $0x1
rtems_build_name ('T', 'R', 'i', c),
10815a: 0f be 05 10 c1 12 00 movsbl 0x12c110,%eax
tty->major = major;
/*
* Set up mutex semaphores
*/
sc = rtems_semaphore_create (
108161: 0d 00 69 52 54 or $0x54526900,%eax
108166: 50 push %eax
108167: e8 f4 19 00 00 call 109b60 <rtems_semaphore_create>
rtems_build_name ('T', 'R', 'i', c),
1,
RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY,
RTEMS_NO_PRIORITY,
&tty->isem);
if (sc != RTEMS_SUCCESSFUL)
10816c: 83 c4 20 add $0x20,%esp
10816f: 85 c0 test %eax,%eax
108171: 74 05 je 108178 <rtems_termios_open+0x183>
108173: e9 1e 02 00 00 jmp 108396 <rtems_termios_open+0x3a1>
rtems_fatal_error_occurred (sc);
sc = rtems_semaphore_create (
108178: 83 ec 0c sub $0xc,%esp
10817b: 8d 43 18 lea 0x18(%ebx),%eax
10817e: 50 push %eax
10817f: 6a 00 push $0x0
108181: 6a 54 push $0x54
108183: 6a 01 push $0x1
rtems_build_name ('T', 'R', 'o', c),
108185: 0f be 05 10 c1 12 00 movsbl 0x12c110,%eax
RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY,
RTEMS_NO_PRIORITY,
&tty->isem);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
sc = rtems_semaphore_create (
10818c: 0d 00 6f 52 54 or $0x54526f00,%eax
108191: 50 push %eax
108192: e8 c9 19 00 00 call 109b60 <rtems_semaphore_create>
rtems_build_name ('T', 'R', 'o', c),
1,
RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY,
RTEMS_NO_PRIORITY,
&tty->osem);
if (sc != RTEMS_SUCCESSFUL)
108197: 83 c4 20 add $0x20,%esp
10819a: 85 c0 test %eax,%eax
10819c: 74 05 je 1081a3 <rtems_termios_open+0x1ae>
10819e: e9 f3 01 00 00 jmp 108396 <rtems_termios_open+0x3a1>
rtems_fatal_error_occurred (sc);
sc = rtems_semaphore_create (
1081a3: 83 ec 0c sub $0xc,%esp
1081a6: 8d 83 8c 00 00 00 lea 0x8c(%ebx),%eax
1081ac: 50 push %eax
1081ad: 6a 00 push $0x0
1081af: 6a 20 push $0x20
1081b1: 6a 00 push $0x0
rtems_build_name ('T', 'R', 'x', c),
1081b3: 0f be 05 10 c1 12 00 movsbl 0x12c110,%eax
RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY,
RTEMS_NO_PRIORITY,
&tty->osem);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
sc = rtems_semaphore_create (
1081ba: 0d 00 78 52 54 or $0x54527800,%eax
1081bf: 50 push %eax
1081c0: e8 9b 19 00 00 call 109b60 <rtems_semaphore_create>
rtems_build_name ('T', 'R', 'x', c),
0,
RTEMS_SIMPLE_BINARY_SEMAPHORE | RTEMS_FIFO,
RTEMS_NO_PRIORITY,
&tty->rawOutBuf.Semaphore);
if (sc != RTEMS_SUCCESSFUL)
1081c5: 83 c4 20 add $0x20,%esp
1081c8: 85 c0 test %eax,%eax
1081ca: 74 05 je 1081d1 <rtems_termios_open+0x1dc>
1081cc: e9 c5 01 00 00 jmp 108396 <rtems_termios_open+0x3a1>
rtems_fatal_error_occurred (sc);
tty->rawOutBufState = rob_idle;
1081d1: c7 83 94 00 00 00 00 movl $0x0,0x94(%ebx)
1081d8: 00 00 00
/*
* Set callbacks
*/
tty->device = *callbacks;
1081db: 8d bb 98 00 00 00 lea 0x98(%ebx),%edi
1081e1: b9 08 00 00 00 mov $0x8,%ecx
1081e6: 8b 75 14 mov 0x14(%ebp),%esi
1081e9: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
/*
* Create I/O tasks
*/
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
1081eb: 83 bb b4 00 00 00 02 cmpl $0x2,0xb4(%ebx)
1081f2: 75 6a jne 10825e <rtems_termios_open+0x269>
sc = rtems_task_create (
1081f4: 56 push %esi
1081f5: 56 push %esi
1081f6: 8d 83 c8 00 00 00 lea 0xc8(%ebx),%eax
1081fc: 50 push %eax
1081fd: 6a 00 push $0x0
1081ff: 68 00 05 00 00 push $0x500
108204: 68 00 04 00 00 push $0x400
108209: 6a 0a push $0xa
rtems_build_name ('T', 'x', 'T', c),
10820b: 0f be 05 10 c1 12 00 movsbl 0x12c110,%eax
/*
* Create I/O tasks
*/
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
sc = rtems_task_create (
108212: 0d 00 54 78 54 or $0x54785400,%eax
108217: 50 push %eax
108218: e8 f3 1c 00 00 call 109f10 <rtems_task_create>
TERMIOS_TXTASK_STACKSIZE,
RTEMS_NO_PREEMPT | RTEMS_NO_TIMESLICE |
RTEMS_NO_ASR,
RTEMS_NO_FLOATING_POINT | RTEMS_LOCAL,
&tty->txTaskId);
if (sc != RTEMS_SUCCESSFUL)
10821d: 83 c4 20 add $0x20,%esp
108220: 85 c0 test %eax,%eax
108222: 74 05 je 108229 <rtems_termios_open+0x234><== ALWAYS TAKEN
108224: e9 6d 01 00 00 jmp 108396 <rtems_termios_open+0x3a1><== NOT EXECUTED
rtems_fatal_error_occurred (sc);
sc = rtems_task_create (
108229: 51 push %ecx
10822a: 51 push %ecx
10822b: 8d 83 c4 00 00 00 lea 0xc4(%ebx),%eax
108231: 50 push %eax
108232: 6a 00 push $0x0
108234: 68 00 05 00 00 push $0x500
108239: 68 00 04 00 00 push $0x400
10823e: 6a 09 push $0x9
rtems_build_name ('R', 'x', 'T', c),
108240: 0f be 05 10 c1 12 00 movsbl 0x12c110,%eax
RTEMS_NO_ASR,
RTEMS_NO_FLOATING_POINT | RTEMS_LOCAL,
&tty->txTaskId);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
sc = rtems_task_create (
108247: 0d 00 54 78 52 or $0x52785400,%eax
10824c: 50 push %eax
10824d: e8 be 1c 00 00 call 109f10 <rtems_task_create>
TERMIOS_RXTASK_STACKSIZE,
RTEMS_NO_PREEMPT | RTEMS_NO_TIMESLICE |
RTEMS_NO_ASR,
RTEMS_NO_FLOATING_POINT | RTEMS_LOCAL,
&tty->rxTaskId);
if (sc != RTEMS_SUCCESSFUL)
108252: 83 c4 20 add $0x20,%esp
108255: 85 c0 test %eax,%eax
108257: 74 05 je 10825e <rtems_termios_open+0x269><== ALWAYS TAKEN
108259: e9 38 01 00 00 jmp 108396 <rtems_termios_open+0x3a1><== NOT EXECUTED
rtems_fatal_error_occurred (sc);
}
if ((tty->device.pollRead == NULL) ||
10825e: 83 bb a0 00 00 00 00 cmpl $0x0,0xa0(%ebx)
108265: 74 09 je 108270 <rtems_termios_open+0x27b>
108267: 83 bb b4 00 00 00 02 cmpl $0x2,0xb4(%ebx)
10826e: 75 2b jne 10829b <rtems_termios_open+0x2a6>
(tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN)){
sc = rtems_semaphore_create (
108270: 83 ec 0c sub $0xc,%esp
108273: 8d 43 68 lea 0x68(%ebx),%eax
108276: 50 push %eax
108277: 6a 00 push $0x0
108279: 6a 24 push $0x24
10827b: 6a 00 push $0x0
rtems_build_name ('T', 'R', 'r', c),
10827d: 0f be 05 10 c1 12 00 movsbl 0x12c110,%eax
rtems_fatal_error_occurred (sc);
}
if ((tty->device.pollRead == NULL) ||
(tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN)){
sc = rtems_semaphore_create (
108284: 0d 00 72 52 54 or $0x54527200,%eax
108289: 50 push %eax
10828a: e8 d1 18 00 00 call 109b60 <rtems_semaphore_create>
rtems_build_name ('T', 'R', 'r', c),
0,
RTEMS_SIMPLE_BINARY_SEMAPHORE | RTEMS_PRIORITY,
RTEMS_NO_PRIORITY,
&tty->rawInBuf.Semaphore);
if (sc != RTEMS_SUCCESSFUL)
10828f: 83 c4 20 add $0x20,%esp
108292: 85 c0 test %eax,%eax
108294: 74 05 je 10829b <rtems_termios_open+0x2a6>
108296: e9 fb 00 00 00 jmp 108396 <rtems_termios_open+0x3a1>
}
/*
* Set default parameters
*/
tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL;
10829b: c7 43 30 02 25 00 00 movl $0x2502,0x30(%ebx)
tty->termios.c_oflag = OPOST | ONLCR | XTABS;
1082a2: c7 43 34 05 18 00 00 movl $0x1805,0x34(%ebx)
tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL;
1082a9: c7 43 38 bd 08 00 00 movl $0x8bd,0x38(%ebx)
tty->termios.c_lflag =
1082b0: c7 43 3c 3b 82 00 00 movl $0x823b,0x3c(%ebx)
ISIG | ICANON | IEXTEN | ECHO | ECHOK | ECHOE | ECHOCTL;
tty->termios.c_cc[VINTR] = '\003';
1082b7: c6 43 41 03 movb $0x3,0x41(%ebx)
tty->termios.c_cc[VQUIT] = '\034';
1082bb: c6 43 42 1c movb $0x1c,0x42(%ebx)
tty->termios.c_cc[VERASE] = '\177';
1082bf: c6 43 43 7f movb $0x7f,0x43(%ebx)
tty->termios.c_cc[VKILL] = '\025';
1082c3: c6 43 44 15 movb $0x15,0x44(%ebx)
tty->termios.c_cc[VEOF] = '\004';
1082c7: c6 43 45 04 movb $0x4,0x45(%ebx)
tty->termios.c_cc[VEOL] = '\000';
1082cb: c6 43 4c 00 movb $0x0,0x4c(%ebx)
tty->termios.c_cc[VEOL2] = '\000';
1082cf: c6 43 51 00 movb $0x0,0x51(%ebx)
tty->termios.c_cc[VSTART] = '\021';
1082d3: c6 43 49 11 movb $0x11,0x49(%ebx)
tty->termios.c_cc[VSTOP] = '\023';
1082d7: c6 43 4a 13 movb $0x13,0x4a(%ebx)
tty->termios.c_cc[VSUSP] = '\032';
1082db: c6 43 4b 1a movb $0x1a,0x4b(%ebx)
tty->termios.c_cc[VREPRINT] = '\022';
1082df: c6 43 4d 12 movb $0x12,0x4d(%ebx)
tty->termios.c_cc[VDISCARD] = '\017';
1082e3: c6 43 4e 0f movb $0xf,0x4e(%ebx)
tty->termios.c_cc[VWERASE] = '\027';
1082e7: c6 43 4f 17 movb $0x17,0x4f(%ebx)
tty->termios.c_cc[VLNEXT] = '\026';
1082eb: c6 43 50 16 movb $0x16,0x50(%ebx)
/* start with no flow control, clear flow control flags */
tty->flow_ctrl = 0;
1082ef: c7 83 b8 00 00 00 00 movl $0x0,0xb8(%ebx)
1082f6: 00 00 00
/*
* set low/highwater mark for XON/XOFF support
*/
tty->lowwater = tty->rawInBuf.Size * 1/2;
1082f9: 8b 43 64 mov 0x64(%ebx),%eax
1082fc: d1 e8 shr %eax
1082fe: 89 83 bc 00 00 00 mov %eax,0xbc(%ebx)
tty->highwater = tty->rawInBuf.Size * 3/4;
108304: 8b 43 64 mov 0x64(%ebx),%eax
108307: 8d 04 40 lea (%eax,%eax,2),%eax
10830a: c1 e8 02 shr $0x2,%eax
10830d: 89 83 c0 00 00 00 mov %eax,0xc0(%ebx)
/*
* Bump name characer
*/
if (c++ == 'z')
108313: a0 10 c1 12 00 mov 0x12c110,%al
108318: 3c 7a cmp $0x7a,%al
10831a: 74 08 je 108324 <rtems_termios_open+0x32f>
10831c: 40 inc %eax
10831d: a2 10 c1 12 00 mov %al,0x12c110
108322: eb 07 jmp 10832b <rtems_termios_open+0x336>
c = 'a';
108324: c6 05 10 c1 12 00 61 movb $0x61,0x12c110
}
args->iop->data1 = tty;
10832b: 8b 55 10 mov 0x10(%ebp),%edx
10832e: 8b 02 mov (%edx),%eax
108330: 89 58 2c mov %ebx,0x2c(%eax)
if (!tty->refcount++) {
108333: 8b 43 08 mov 0x8(%ebx),%eax
108336: 8d 50 01 lea 0x1(%eax),%edx
108339: 89 53 08 mov %edx,0x8(%ebx)
10833c: 85 c0 test %eax,%eax
10833e: 75 5f jne 10839f <rtems_termios_open+0x3aa>
if (tty->device.firstOpen)
108340: 8b 83 98 00 00 00 mov 0x98(%ebx),%eax
108346: 85 c0 test %eax,%eax
108348: 74 0f je 108359 <rtems_termios_open+0x364>
(*tty->device.firstOpen)(major, minor, arg);
10834a: 52 push %edx
10834b: ff 75 10 pushl 0x10(%ebp)
10834e: ff 75 0c pushl 0xc(%ebp)
108351: ff 75 08 pushl 0x8(%ebp)
108354: ff d0 call *%eax
108356: 83 c4 10 add $0x10,%esp
/*
* start I/O tasks, if needed
*/
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
108359: 83 bb b4 00 00 00 02 cmpl $0x2,0xb4(%ebx)
108360: 75 3d jne 10839f <rtems_termios_open+0x3aa>
sc = rtems_task_start(
108362: 57 push %edi
108363: 53 push %ebx
108364: 68 31 94 10 00 push $0x109431
108369: ff b3 c4 00 00 00 pushl 0xc4(%ebx)
10836f: e8 18 1e 00 00 call 10a18c <rtems_task_start>
tty->rxTaskId, rtems_termios_rxdaemon, (rtems_task_argument)tty);
if (sc != RTEMS_SUCCESSFUL)
108374: 83 c4 10 add $0x10,%esp
108377: 85 c0 test %eax,%eax
108379: 74 02 je 10837d <rtems_termios_open+0x388><== ALWAYS TAKEN
10837b: eb 19 jmp 108396 <rtems_termios_open+0x3a1><== NOT EXECUTED
rtems_fatal_error_occurred (sc);
sc = rtems_task_start(
10837d: 56 push %esi
10837e: 53 push %ebx
10837f: 68 47 7f 10 00 push $0x107f47
108384: ff b3 c8 00 00 00 pushl 0xc8(%ebx)
10838a: e8 fd 1d 00 00 call 10a18c <rtems_task_start>
tty->txTaskId, rtems_termios_txdaemon, (rtems_task_argument)tty);
if (sc != RTEMS_SUCCESSFUL)
10838f: 83 c4 10 add $0x10,%esp
108392: 85 c0 test %eax,%eax
108394: 74 09 je 10839f <rtems_termios_open+0x3aa><== ALWAYS TAKEN
rtems_fatal_error_occurred (sc);
108396: 83 ec 0c sub $0xc,%esp
108399: 50 push %eax
10839a: e8 15 20 00 00 call 10a3b4 <rtems_fatal_error_occurred>
}
}
rtems_semaphore_release (rtems_termios_ttyMutex);
10839f: 83 ec 0c sub $0xc,%esp
1083a2: ff 35 14 e3 12 00 pushl 0x12e314
1083a8: e8 d3 1a 00 00 call 109e80 <rtems_semaphore_release>
return RTEMS_SUCCESSFUL;
1083ad: 83 c4 10 add $0x10,%esp
1083b0: eb 20 jmp 1083d2 <rtems_termios_open+0x3dd>
static char c = 'a';
/*
* Create a new device
*/
tty = calloc (1, sizeof (struct rtems_termios_tty));
1083b2: 51 push %ecx
1083b3: 51 push %ecx
1083b4: 68 e8 00 00 00 push $0xe8
1083b9: 6a 01 push $0x1
1083bb: e8 6c e1 ff ff call 10652c <calloc>
1083c0: 89 c3 mov %eax,%ebx
if (tty == NULL) {
1083c2: 83 c4 10 add $0x10,%esp
1083c5: 85 c0 test %eax,%eax
1083c7: 0f 85 7f fc ff ff jne 10804c <rtems_termios_open+0x57>
1083cd: e9 72 fc ff ff jmp 108044 <rtems_termios_open+0x4f>
rtems_fatal_error_occurred (sc);
}
}
rtems_semaphore_release (rtems_termios_ttyMutex);
return RTEMS_SUCCESSFUL;
}
1083d2: 8b 45 e4 mov -0x1c(%ebp),%eax
1083d5: 8d 65 f4 lea -0xc(%ebp),%esp
1083d8: 5b pop %ebx
1083d9: 5e pop %esi
1083da: 5f pop %edi
1083db: 5d pop %ebp
1083dc: c3 ret
001088c5 <rtems_termios_puts>:
* Send characters to device-specific code
*/
void
rtems_termios_puts (
const void *_buf, size_t len, struct rtems_termios_tty *tty)
{
1088c5: 55 push %ebp
1088c6: 89 e5 mov %esp,%ebp
1088c8: 57 push %edi
1088c9: 56 push %esi
1088ca: 53 push %ebx
1088cb: 83 ec 1c sub $0x1c,%esp
1088ce: 8b 75 08 mov 0x8(%ebp),%esi
1088d1: 8b 45 0c mov 0xc(%ebp),%eax
1088d4: 8b 5d 10 mov 0x10(%ebp),%ebx
const unsigned char *buf = _buf;
unsigned int newHead;
rtems_interrupt_level level;
rtems_status_code sc;
if (tty->device.outputUsesInterrupts == TERMIOS_POLLED) {
1088d7: 83 bb b4 00 00 00 00 cmpl $0x0,0xb4(%ebx)
1088de: 75 1b jne 1088fb <rtems_termios_puts+0x36>
(*tty->device.write)(tty->minor, buf, len);
1088e0: 89 45 10 mov %eax,0x10(%ebp)
1088e3: 89 75 0c mov %esi,0xc(%ebp)
1088e6: 8b 43 10 mov 0x10(%ebx),%eax
1088e9: 89 45 08 mov %eax,0x8(%ebp)
1088ec: 8b 83 a4 00 00 00 mov 0xa4(%ebx),%eax
tty->rawOutBufState = rob_busy;
}
rtems_interrupt_enable (level);
len--;
}
}
1088f2: 8d 65 f4 lea -0xc(%ebp),%esp
1088f5: 5b pop %ebx
1088f6: 5e pop %esi
1088f7: 5f pop %edi
1088f8: 5d pop %ebp
unsigned int newHead;
rtems_interrupt_level level;
rtems_status_code sc;
if (tty->device.outputUsesInterrupts == TERMIOS_POLLED) {
(*tty->device.write)(tty->minor, buf, len);
1088f9: ff e0 jmp *%eax
return;
}
newHead = tty->rawOutBuf.Head;
1088fb: 8b bb 80 00 00 00 mov 0x80(%ebx),%edi
/*
* Send characters to device-specific code
*/
void
rtems_termios_puts (
108901: 01 f0 add %esi,%eax
108903: 89 45 e0 mov %eax,-0x20(%ebp)
if (tty->device.outputUsesInterrupts == TERMIOS_POLLED) {
(*tty->device.write)(tty->minor, buf, len);
return;
}
newHead = tty->rawOutBuf.Head;
while (len) {
108906: e9 b5 00 00 00 jmp 1089c0 <rtems_termios_puts+0xfb>
* len -= ncopy
*
* To minimize latency, the memcpy should be done
* with interrupts enabled.
*/
newHead = (newHead + 1) % tty->rawOutBuf.Size;
10890b: 8d 47 01 lea 0x1(%edi),%eax
10890e: 8b 8b 88 00 00 00 mov 0x88(%ebx),%ecx
108914: 31 d2 xor %edx,%edx
108916: f7 f1 div %ecx
108918: 89 55 d8 mov %edx,-0x28(%ebp)
10891b: 89 d7 mov %edx,%edi
10891d: eb 2e jmp 10894d <rtems_termios_puts+0x88>
rtems_interrupt_disable (level);
while (newHead == tty->rawOutBuf.Tail) {
tty->rawOutBufState = rob_wait;
10891f: c7 83 94 00 00 00 02 movl $0x2,0x94(%ebx)
108926: 00 00 00
rtems_interrupt_enable (level);
108929: ff 75 e4 pushl -0x1c(%ebp)
10892c: 9d popf
sc = rtems_semaphore_obtain(
10892d: 51 push %ecx
10892e: 6a 00 push $0x0
108930: 6a 00 push $0x0
108932: ff b3 8c 00 00 00 pushl 0x8c(%ebx)
108938: e8 53 14 00 00 call 109d90 <rtems_semaphore_obtain>
tty->rawOutBuf.Semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
10893d: 83 c4 10 add $0x10,%esp
108940: 85 c0 test %eax,%eax
108942: 74 09 je 10894d <rtems_termios_puts+0x88><== ALWAYS TAKEN
rtems_fatal_error_occurred (sc);
108944: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
108947: 50 push %eax <== NOT EXECUTED
108948: e8 67 1a 00 00 call 10a3b4 <rtems_fatal_error_occurred><== NOT EXECUTED
rtems_interrupt_disable (level);
10894d: 9c pushf
10894e: fa cli
10894f: 8f 45 e4 popl -0x1c(%ebp)
* To minimize latency, the memcpy should be done
* with interrupts enabled.
*/
newHead = (newHead + 1) % tty->rawOutBuf.Size;
rtems_interrupt_disable (level);
while (newHead == tty->rawOutBuf.Tail) {
108952: 8b 83 84 00 00 00 mov 0x84(%ebx),%eax
108958: 39 45 d8 cmp %eax,-0x28(%ebp)
10895b: 74 c2 je 10891f <rtems_termios_puts+0x5a>
tty->rawOutBuf.Semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
rtems_interrupt_disable (level);
}
tty->rawOutBuf.theBuf[tty->rawOutBuf.Head] = *buf++;
10895d: 8b 83 80 00 00 00 mov 0x80(%ebx),%eax
108963: 8a 0e mov (%esi),%cl
108965: 8b 53 7c mov 0x7c(%ebx),%edx
108968: 88 0c 02 mov %cl,(%edx,%eax,1)
10896b: 46 inc %esi
tty->rawOutBuf.Head = newHead;
10896c: 8b 55 d8 mov -0x28(%ebp),%edx
10896f: 89 93 80 00 00 00 mov %edx,0x80(%ebx)
if (tty->rawOutBufState == rob_idle) {
108975: 83 bb 94 00 00 00 00 cmpl $0x0,0x94(%ebx)
10897c: 75 3e jne 1089bc <rtems_termios_puts+0xf7>
/* check, whether XOFF has been received */
if (!(tty->flow_ctrl & FL_ORCVXOF)) {
10897e: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax
108984: a8 10 test $0x10,%al
108986: 75 1b jne 1089a3 <rtems_termios_puts+0xde><== NEVER TAKEN
(*tty->device.write)(
tty->minor, &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail],1);
108988: 8b 83 84 00 00 00 mov 0x84(%ebx),%eax
tty->rawOutBuf.theBuf[tty->rawOutBuf.Head] = *buf++;
tty->rawOutBuf.Head = newHead;
if (tty->rawOutBufState == rob_idle) {
/* check, whether XOFF has been received */
if (!(tty->flow_ctrl & FL_ORCVXOF)) {
(*tty->device.write)(
10898e: 52 push %edx
10898f: 6a 01 push $0x1
108991: 03 43 7c add 0x7c(%ebx),%eax
108994: 50 push %eax
108995: ff 73 10 pushl 0x10(%ebx)
108998: ff 93 a4 00 00 00 call *0xa4(%ebx)
10899e: 83 c4 10 add $0x10,%esp
1089a1: eb 0f jmp 1089b2 <rtems_termios_puts+0xed>
tty->minor, &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail],1);
} else {
/* remember that output has been stopped due to flow ctrl*/
tty->flow_ctrl |= FL_OSTOP;
1089a3: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax <== NOT EXECUTED
1089a9: 83 c8 20 or $0x20,%eax <== NOT EXECUTED
1089ac: 89 83 b8 00 00 00 mov %eax,0xb8(%ebx) <== NOT EXECUTED
}
tty->rawOutBufState = rob_busy;
1089b2: c7 83 94 00 00 00 01 movl $0x1,0x94(%ebx)
1089b9: 00 00 00
}
rtems_interrupt_enable (level);
1089bc: ff 75 e4 pushl -0x1c(%ebp)
1089bf: 9d popf
if (tty->device.outputUsesInterrupts == TERMIOS_POLLED) {
(*tty->device.write)(tty->minor, buf, len);
return;
}
newHead = tty->rawOutBuf.Head;
while (len) {
1089c0: 3b 75 e0 cmp -0x20(%ebp),%esi
1089c3: 0f 85 42 ff ff ff jne 10890b <rtems_termios_puts+0x46>
tty->rawOutBufState = rob_busy;
}
rtems_interrupt_enable (level);
len--;
}
}
1089c9: 8d 65 f4 lea -0xc(%ebp),%esp
1089cc: 5b pop %ebx
1089cd: 5e pop %esi
1089ce: 5f pop %edi
1089cf: 5d pop %ebp
1089d0: c3 ret
00108ed2 <rtems_termios_read>:
return RTEMS_SUCCESSFUL;
}
rtems_status_code
rtems_termios_read (void *arg)
{
108ed2: 55 push %ebp
108ed3: 89 e5 mov %esp,%ebp
108ed5: 57 push %edi
108ed6: 56 push %esi
108ed7: 53 push %ebx
108ed8: 83 ec 30 sub $0x30,%esp
108edb: 8b 75 08 mov 0x8(%ebp),%esi
rtems_libio_rw_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
108ede: 8b 06 mov (%esi),%eax
108ee0: 8b 58 2c mov 0x2c(%eax),%ebx
uint32_t count = args->count;
108ee3: 8b 4e 10 mov 0x10(%esi),%ecx
108ee6: 89 4d e4 mov %ecx,-0x1c(%ebp)
char *buffer = args->buffer;
108ee9: 8b 4e 0c mov 0xc(%esi),%ecx
108eec: 89 4d dc mov %ecx,-0x24(%ebp)
rtems_status_code sc;
sc = rtems_semaphore_obtain (tty->isem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
108eef: 6a 00 push $0x0
108ef1: 6a 00 push $0x0
108ef3: ff 73 14 pushl 0x14(%ebx)
108ef6: e8 95 0e 00 00 call 109d90 <rtems_semaphore_obtain>
108efb: 89 45 d8 mov %eax,-0x28(%ebp)
if (sc != RTEMS_SUCCESSFUL)
108efe: 83 c4 10 add $0x10,%esp
108f01: 85 c0 test %eax,%eax
108f03: 0f 85 88 02 00 00 jne 109191 <rtems_termios_read+0x2bf><== NEVER TAKEN
return sc;
if (rtems_termios_linesw[tty->t_line].l_read != NULL) {
108f09: 8b 83 cc 00 00 00 mov 0xcc(%ebx),%eax
108f0f: c1 e0 05 shl $0x5,%eax
108f12: 8b 80 c8 df 12 00 mov 0x12dfc8(%eax),%eax
108f18: 85 c0 test %eax,%eax
108f1a: 74 19 je 108f35 <rtems_termios_read+0x63>
sc = rtems_termios_linesw[tty->t_line].l_read(tty,args);
108f1c: 52 push %edx
108f1d: 52 push %edx
108f1e: 56 push %esi
108f1f: 53 push %ebx
108f20: ff d0 call *%eax
108f22: 89 45 d8 mov %eax,-0x28(%ebp)
tty->tty_rcvwakeup = 0;
108f25: c7 83 e4 00 00 00 00 movl $0x0,0xe4(%ebx)
108f2c: 00 00 00
rtems_semaphore_release (tty->isem);
108f2f: 59 pop %ecx
108f30: e9 51 02 00 00 jmp 109186 <rtems_termios_read+0x2b4>
return sc;
}
if (tty->cindex == tty->ccount) {
108f35: 8b 43 20 mov 0x20(%ebx),%eax
108f38: 39 43 24 cmp %eax,0x24(%ebx)
108f3b: 0f 85 21 02 00 00 jne 109162 <rtems_termios_read+0x290><== NEVER TAKEN
tty->cindex = tty->ccount = 0;
108f41: c7 43 20 00 00 00 00 movl $0x0,0x20(%ebx)
108f48: c7 43 24 00 00 00 00 movl $0x0,0x24(%ebx)
tty->read_start_column = tty->column;
108f4f: 8b 43 28 mov 0x28(%ebx),%eax
108f52: 89 43 2c mov %eax,0x2c(%ebx)
if (tty->device.pollRead != NULL &&
108f55: 83 bb a0 00 00 00 00 cmpl $0x0,0xa0(%ebx)
108f5c: 0f 84 c9 00 00 00 je 10902b <rtems_termios_read+0x159>
108f62: 83 bb b4 00 00 00 00 cmpl $0x0,0xb4(%ebx)
108f69: 0f 85 bc 00 00 00 jne 10902b <rtems_termios_read+0x159>
static rtems_status_code
fillBufferPoll (struct rtems_termios_tty *tty)
{
int n;
if (tty->termios.c_lflag & ICANON) {
108f6f: f6 43 3c 02 testb $0x2,0x3c(%ebx)
108f73: 74 37 je 108fac <rtems_termios_read+0xda>
for (;;) {
n = (*tty->device.pollRead)(tty->minor);
108f75: 83 ec 0c sub $0xc,%esp
108f78: ff 73 10 pushl 0x10(%ebx)
108f7b: ff 93 a0 00 00 00 call *0xa0(%ebx)
if (n < 0) {
108f81: 83 c4 10 add $0x10,%esp
108f84: 85 c0 test %eax,%eax
108f86: 79 0f jns 108f97 <rtems_termios_read+0xc5>
rtems_task_wake_after (1);
108f88: 83 ec 0c sub $0xc,%esp
108f8b: 6a 01 push $0x1
108f8d: e8 5e 12 00 00 call 10a1f0 <rtems_task_wake_after>
108f92: 83 c4 10 add $0x10,%esp
108f95: eb de jmp 108f75 <rtems_termios_read+0xa3>
} else {
if (siproc (n, tty))
108f97: 25 ff 00 00 00 and $0xff,%eax
108f9c: 89 da mov %ebx,%edx
108f9e: e8 3a fe ff ff call 108ddd <siproc>
108fa3: 85 c0 test %eax,%eax
108fa5: 74 ce je 108f75 <rtems_termios_read+0xa3>
108fa7: e9 b6 01 00 00 jmp 109162 <rtems_termios_read+0x290>
}
}
} else {
rtems_interval then, now;
then = rtems_clock_get_ticks_since_boot();
108fac: e8 47 08 00 00 call 1097f8 <rtems_clock_get_ticks_since_boot>
108fb1: 89 c7 mov %eax,%edi
for (;;) {
n = (*tty->device.pollRead)(tty->minor);
108fb3: 83 ec 0c sub $0xc,%esp
108fb6: ff 73 10 pushl 0x10(%ebx)
108fb9: ff 93 a0 00 00 00 call *0xa0(%ebx)
if (n < 0) {
108fbf: 83 c4 10 add $0x10,%esp
108fc2: 85 c0 test %eax,%eax
108fc4: 79 3e jns 109004 <rtems_termios_read+0x132>
if (tty->termios.c_cc[VMIN]) {
108fc6: 80 7b 47 00 cmpb $0x0,0x47(%ebx)
108fca: 74 1d je 108fe9 <rtems_termios_read+0x117><== NEVER TAKEN
if (tty->termios.c_cc[VTIME] && tty->ccount) {
108fcc: 80 7b 46 00 cmpb $0x0,0x46(%ebx)
108fd0: 75 0f jne 108fe1 <rtems_termios_read+0x10f><== ALWAYS TAKEN
now = rtems_clock_get_ticks_since_boot();
if ((now - then) > tty->vtimeTicks) {
break;
}
}
rtems_task_wake_after (1);
108fd2: 83 ec 0c sub $0xc,%esp
108fd5: 6a 01 push $0x1
108fd7: e8 14 12 00 00 call 10a1f0 <rtems_task_wake_after>
108fdc: 83 c4 10 add $0x10,%esp
108fdf: eb d2 jmp 108fb3 <rtems_termios_read+0xe1>
then = rtems_clock_get_ticks_since_boot();
for (;;) {
n = (*tty->device.pollRead)(tty->minor);
if (n < 0) {
if (tty->termios.c_cc[VMIN]) {
if (tty->termios.c_cc[VTIME] && tty->ccount) {
108fe1: 83 7b 20 00 cmpl $0x0,0x20(%ebx)
108fe5: 74 eb je 108fd2 <rtems_termios_read+0x100>
108fe7: eb 0a jmp 108ff3 <rtems_termios_read+0x121>
if ((now - then) > tty->vtimeTicks) {
break;
}
}
} else {
if (!tty->termios.c_cc[VTIME])
108fe9: 80 7b 46 00 cmpb $0x0,0x46(%ebx) <== NOT EXECUTED
108fed: 0f 84 6f 01 00 00 je 109162 <rtems_termios_read+0x290><== NOT EXECUTED
break;
now = rtems_clock_get_ticks_since_boot();
108ff3: e8 00 08 00 00 call 1097f8 <rtems_clock_get_ticks_since_boot>
if ((now - then) > tty->vtimeTicks) {
108ff8: 29 f8 sub %edi,%eax
108ffa: 3b 43 54 cmp 0x54(%ebx),%eax
108ffd: 76 d3 jbe 108fd2 <rtems_termios_read+0x100>
108fff: e9 5e 01 00 00 jmp 109162 <rtems_termios_read+0x290>
break;
}
}
rtems_task_wake_after (1);
} else {
siproc (n, tty);
109004: 25 ff 00 00 00 and $0xff,%eax
109009: 89 da mov %ebx,%edx
10900b: e8 cd fd ff ff call 108ddd <siproc>
if (tty->ccount >= tty->termios.c_cc[VMIN])
109010: 8a 43 47 mov 0x47(%ebx),%al
109013: 0f b6 d0 movzbl %al,%edx
109016: 39 53 20 cmp %edx,0x20(%ebx)
109019: 0f 8d 43 01 00 00 jge 109162 <rtems_termios_read+0x290>
break;
if (tty->termios.c_cc[VMIN] && tty->termios.c_cc[VTIME])
10901f: 84 c0 test %al,%al
109021: 74 90 je 108fb3 <rtems_termios_read+0xe1><== NEVER TAKEN
109023: 80 7b 46 00 cmpb $0x0,0x46(%ebx)
109027: 74 8a je 108fb3 <rtems_termios_read+0xe1><== NEVER TAKEN
109029: eb 81 jmp 108fac <rtems_termios_read+0xda>
* Fill the input buffer from the raw input queue
*/
static rtems_status_code
fillBufferQueue (struct rtems_termios_tty *tty)
{
rtems_interval timeout = tty->rawInBufSemaphoreFirstTimeout;
10902b: 8b 7b 74 mov 0x74(%ebx),%edi
rtems_status_code sc;
int wait = 1;
10902e: c7 45 d4 01 00 00 00 movl $0x1,-0x2c(%ebp)
== (FL_MDXON | FL_ISNTXOF))
&& ((tty->rawOutBufState == rob_idle)
|| (tty->flow_ctrl & FL_OSTOP))) {
/* XON should be sent now... */
(*tty->device.write)(
tty->minor, (void *)&(tty->termios.c_cc[VSTART]), 1);
109035: 8d 4b 49 lea 0x49(%ebx),%ecx
109038: 89 4d d0 mov %ecx,-0x30(%ebp)
10903b: e9 d3 00 00 00 jmp 109113 <rtems_termios_read+0x241>
while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) &&
(tty->ccount < (CBUFSIZE-1))) {
unsigned char c;
unsigned int newHead;
newHead = (tty->rawInBuf.Head + 1) % tty->rawInBuf.Size;
109040: 8b 43 5c mov 0x5c(%ebx),%eax
109043: 8b 4b 64 mov 0x64(%ebx),%ecx
109046: 40 inc %eax
109047: 31 d2 xor %edx,%edx
109049: f7 f1 div %ecx
c = tty->rawInBuf.theBuf[newHead];
10904b: 8b 43 58 mov 0x58(%ebx),%eax
10904e: 8a 04 10 mov (%eax,%edx,1),%al
109051: 88 45 e3 mov %al,-0x1d(%ebp)
tty->rawInBuf.Head = newHead;
109054: 89 53 5c mov %edx,0x5c(%ebx)
if(((tty->rawInBuf.Tail-newHead+tty->rawInBuf.Size)
109057: 8b 43 60 mov 0x60(%ebx),%eax
10905a: 8b 7b 64 mov 0x64(%ebx),%edi
% tty->rawInBuf.Size)
10905d: 8b 4b 64 mov 0x64(%ebx),%ecx
unsigned int newHead;
newHead = (tty->rawInBuf.Head + 1) % tty->rawInBuf.Size;
c = tty->rawInBuf.theBuf[newHead];
tty->rawInBuf.Head = newHead;
if(((tty->rawInBuf.Tail-newHead+tty->rawInBuf.Size)
109060: 01 f8 add %edi,%eax
109062: 29 d0 sub %edx,%eax
% tty->rawInBuf.Size)
109064: 31 d2 xor %edx,%edx
109066: f7 f1 div %ecx
unsigned int newHead;
newHead = (tty->rawInBuf.Head + 1) % tty->rawInBuf.Size;
c = tty->rawInBuf.theBuf[newHead];
tty->rawInBuf.Head = newHead;
if(((tty->rawInBuf.Tail-newHead+tty->rawInBuf.Size)
109068: 3b 93 bc 00 00 00 cmp 0xbc(%ebx),%edx
10906e: 73 74 jae 1090e4 <rtems_termios_read+0x212><== NEVER TAKEN
% tty->rawInBuf.Size)
< tty->lowwater) {
tty->flow_ctrl &= ~FL_IREQXOF;
109070: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax
109076: 83 e0 fe and $0xfffffffe,%eax
109079: 89 83 b8 00 00 00 mov %eax,0xb8(%ebx)
/* if tx stopped and XON should be sent... */
if (((tty->flow_ctrl & (FL_MDXON | FL_ISNTXOF))
10907f: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax
109085: 25 02 02 00 00 and $0x202,%eax
10908a: 3d 02 02 00 00 cmp $0x202,%eax
10908f: 75 24 jne 1090b5 <rtems_termios_read+0x1e3><== ALWAYS TAKEN
== (FL_MDXON | FL_ISNTXOF))
&& ((tty->rawOutBufState == rob_idle)
109091: 83 bb 94 00 00 00 00 cmpl $0x0,0x94(%ebx) <== NOT EXECUTED
109098: 74 0a je 1090a4 <rtems_termios_read+0x1d2><== NOT EXECUTED
|| (tty->flow_ctrl & FL_OSTOP))) {
10909a: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax <== NOT EXECUTED
1090a0: a8 20 test $0x20,%al <== NOT EXECUTED
1090a2: 74 11 je 1090b5 <rtems_termios_read+0x1e3><== NOT EXECUTED
/* XON should be sent now... */
(*tty->device.write)(
1090a4: 50 push %eax <== NOT EXECUTED
1090a5: 6a 01 push $0x1 <== NOT EXECUTED
1090a7: ff 75 d0 pushl -0x30(%ebp) <== NOT EXECUTED
1090aa: ff 73 10 pushl 0x10(%ebx) <== NOT EXECUTED
1090ad: ff 93 a4 00 00 00 call *0xa4(%ebx) <== NOT EXECUTED
1090b3: eb 2c jmp 1090e1 <rtems_termios_read+0x20f><== NOT EXECUTED
tty->minor, (void *)&(tty->termios.c_cc[VSTART]), 1);
} else if (tty->flow_ctrl & FL_MDRTS) {
1090b5: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax
1090bb: f6 c4 01 test $0x1,%ah
1090be: 74 24 je 1090e4 <rtems_termios_read+0x212><== ALWAYS TAKEN
tty->flow_ctrl &= ~FL_IRTSOFF;
1090c0: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax <== NOT EXECUTED
1090c6: 83 e0 fb and $0xfffffffb,%eax <== NOT EXECUTED
1090c9: 89 83 b8 00 00 00 mov %eax,0xb8(%ebx) <== NOT EXECUTED
/* activate RTS line */
if (tty->device.startRemoteTx != NULL) {
1090cf: 8b 83 b0 00 00 00 mov 0xb0(%ebx),%eax <== NOT EXECUTED
1090d5: 85 c0 test %eax,%eax <== NOT EXECUTED
1090d7: 74 0b je 1090e4 <rtems_termios_read+0x212><== NOT EXECUTED
tty->device.startRemoteTx(tty->minor);
1090d9: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1090dc: ff 73 10 pushl 0x10(%ebx) <== NOT EXECUTED
1090df: ff d0 call *%eax <== NOT EXECUTED
1090e1: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
}
/* continue processing new character */
if (tty->termios.c_lflag & ICANON) {
if (siproc (c, tty))
1090e4: 0f b6 45 e3 movzbl -0x1d(%ebp),%eax
1090e8: 89 da mov %ebx,%edx
}
}
}
/* continue processing new character */
if (tty->termios.c_lflag & ICANON) {
1090ea: f6 43 3c 02 testb $0x2,0x3c(%ebx)
1090ee: 74 12 je 109102 <rtems_termios_read+0x230><== NEVER TAKEN
if (siproc (c, tty))
1090f0: e8 e8 fc ff ff call 108ddd <siproc>
1090f5: 85 c0 test %eax,%eax
1090f7: 74 17 je 109110 <rtems_termios_read+0x23e>
wait = 0;
1090f9: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)
109100: eb 0e jmp 109110 <rtems_termios_read+0x23e>
} else {
siproc (c, tty);
109102: e8 d6 fc ff ff call 108ddd <siproc> <== NOT EXECUTED
if (tty->ccount >= tty->termios.c_cc[VMIN])
109107: 0f b6 43 47 movzbl 0x47(%ebx),%eax <== NOT EXECUTED
10910b: 39 43 20 cmp %eax,0x20(%ebx) <== NOT EXECUTED
10910e: 7d e9 jge 1090f9 <rtems_termios_read+0x227><== NOT EXECUTED
wait = 0;
}
timeout = tty->rawInBufSemaphoreTimeout;
109110: 8b 7b 70 mov 0x70(%ebx),%edi
while ( wait ) {
/*
* Process characters read from raw queue
*/
while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) &&
109113: 8b 53 5c mov 0x5c(%ebx),%edx
109116: 8b 43 60 mov 0x60(%ebx),%eax
109119: 39 c2 cmp %eax,%edx
10911b: 75 08 jne 109125 <rtems_termios_read+0x253>
}
/*
* Wait for characters
*/
if ( wait ) {
10911d: 83 7d d4 00 cmpl $0x0,-0x2c(%ebp)
109121: 74 3f je 109162 <rtems_termios_read+0x290>
109123: eb 11 jmp 109136 <rtems_termios_read+0x264>
while ( wait ) {
/*
* Process characters read from raw queue
*/
while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) &&
(tty->ccount < (CBUFSIZE-1))) {
109125: a1 0c c1 12 00 mov 0x12c10c,%eax
10912a: 48 dec %eax
while ( wait ) {
/*
* Process characters read from raw queue
*/
while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) &&
10912b: 39 43 20 cmp %eax,0x20(%ebx)
10912e: 0f 82 0c ff ff ff jb 109040 <rtems_termios_read+0x16e><== ALWAYS TAKEN
109134: eb e7 jmp 10911d <rtems_termios_read+0x24b><== NOT EXECUTED
/*
* Wait for characters
*/
if ( wait ) {
sc = rtems_semaphore_obtain(
109136: 50 push %eax
109137: 57 push %edi
109138: ff 73 6c pushl 0x6c(%ebx)
10913b: ff 73 68 pushl 0x68(%ebx)
10913e: e8 4d 0c 00 00 call 109d90 <rtems_semaphore_obtain>
tty->rawInBuf.Semaphore, tty->rawInBufSemaphoreOptions, timeout);
if (sc != RTEMS_SUCCESSFUL)
109143: 83 c4 10 add $0x10,%esp
109146: 85 c0 test %eax,%eax
109148: 74 c9 je 109113 <rtems_termios_read+0x241>
10914a: eb 16 jmp 109162 <rtems_termios_read+0x290>
if (sc != RTEMS_SUCCESSFUL)
tty->cindex = tty->ccount = 0;
}
while (count && (tty->cindex < tty->ccount)) {
*buffer++ = tty->cbuf[tty->cindex++];
10914c: 8b 53 1c mov 0x1c(%ebx),%edx
10914f: 8a 14 02 mov (%edx,%eax,1),%dl
109152: 8b 4d dc mov -0x24(%ebp),%ecx
109155: 88 11 mov %dl,(%ecx)
109157: 41 inc %ecx
109158: 89 4d dc mov %ecx,-0x24(%ebp)
10915b: 40 inc %eax
10915c: 89 43 24 mov %eax,0x24(%ebx)
count--;
10915f: ff 4d e4 decl -0x1c(%ebp)
sc = fillBufferQueue (tty);
if (sc != RTEMS_SUCCESSFUL)
tty->cindex = tty->ccount = 0;
}
while (count && (tty->cindex < tty->ccount)) {
109162: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp)
109166: 74 08 je 109170 <rtems_termios_read+0x29e>
109168: 8b 43 24 mov 0x24(%ebx),%eax
10916b: 3b 43 20 cmp 0x20(%ebx),%eax
10916e: 7c dc jl 10914c <rtems_termios_read+0x27a>
*buffer++ = tty->cbuf[tty->cindex++];
count--;
}
args->bytes_moved = args->count - count;
109170: 8b 46 10 mov 0x10(%esi),%eax
109173: 2b 45 e4 sub -0x1c(%ebp),%eax
109176: 89 46 18 mov %eax,0x18(%esi)
tty->tty_rcvwakeup = 0;
109179: c7 83 e4 00 00 00 00 movl $0x0,0xe4(%ebx)
109180: 00 00 00
rtems_semaphore_release (tty->isem);
109183: 83 ec 0c sub $0xc,%esp
109186: ff 73 14 pushl 0x14(%ebx)
109189: e8 f2 0c 00 00 call 109e80 <rtems_semaphore_release>
return sc;
10918e: 83 c4 10 add $0x10,%esp
}
109191: 8b 45 d8 mov -0x28(%ebp),%eax
109194: 8d 65 f4 lea -0xc(%ebp),%esp
109197: 5b pop %ebx
109198: 5e pop %esi
109199: 5f pop %edi
10919a: 5d pop %ebp
10919b: c3 ret
00107d80 <rtems_termios_refill_transmitter>:
* in task-driven mode, this function is called in Tx task context
* in interrupt-driven mode, this function is called in TxIRQ context
*/
static int
rtems_termios_refill_transmitter (struct rtems_termios_tty *tty)
{
107d80: 55 push %ebp
107d81: 89 e5 mov %esp,%ebp
107d83: 57 push %edi
107d84: 56 push %esi
107d85: 53 push %ebx
107d86: 83 ec 0c sub $0xc,%esp
107d89: 89 c3 mov %eax,%ebx
int nToSend;
rtems_interrupt_level level;
int len;
/* check for XOF/XON to send */
if ((tty->flow_ctrl & (FL_MDXOF | FL_IREQXOF | FL_ISNTXOF))
107d8b: 8b 80 b8 00 00 00 mov 0xb8(%eax),%eax
107d91: 25 03 04 00 00 and $0x403,%eax
107d96: 3d 01 04 00 00 cmp $0x401,%eax
107d9b: 75 24 jne 107dc1 <rtems_termios_refill_transmitter+0x41><== ALWAYS TAKEN
== (FL_MDXOF | FL_IREQXOF)) {
/* XOFF should be sent now... */
(*tty->device.write)(tty->minor, (void *)&(tty->termios.c_cc[VSTOP]), 1);
107d9d: 56 push %esi <== NOT EXECUTED
107d9e: 6a 01 push $0x1 <== NOT EXECUTED
107da0: 8d 43 4a lea 0x4a(%ebx),%eax <== NOT EXECUTED
107da3: 50 push %eax <== NOT EXECUTED
107da4: ff 73 10 pushl 0x10(%ebx) <== NOT EXECUTED
107da7: ff 93 a4 00 00 00 call *0xa4(%ebx) <== NOT EXECUTED
rtems_interrupt_disable(level);
107dad: 9c pushf <== NOT EXECUTED
107dae: fa cli <== NOT EXECUTED
107daf: 5a pop %edx <== NOT EXECUTED
tty->t_dqlen--;
107db0: ff 8b 90 00 00 00 decl 0x90(%ebx) <== NOT EXECUTED
tty->flow_ctrl |= FL_ISNTXOF;
107db6: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax <== NOT EXECUTED
107dbc: 83 c8 02 or $0x2,%eax <== NOT EXECUTED
107dbf: eb 30 jmp 107df1 <rtems_termios_refill_transmitter+0x71><== NOT EXECUTED
rtems_interrupt_enable(level);
nToSend = 1;
} else if ((tty->flow_ctrl & (FL_IREQXOF | FL_ISNTXOF)) == FL_ISNTXOF) {
107dc1: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax
107dc7: 83 e0 03 and $0x3,%eax
107dca: 83 f8 02 cmp $0x2,%eax
107dcd: 75 37 jne 107e06 <rtems_termios_refill_transmitter+0x86><== ALWAYS TAKEN
* FIXME: this .write call will generate another
* dequeue callback. This will advance the "Tail" in the data
* buffer, although the corresponding data is not yet out!
* Therefore the dequeue "length" should be reduced by 1
*/
(*tty->device.write)(tty->minor, (void *)&(tty->termios.c_cc[VSTART]), 1);
107dcf: 51 push %ecx <== NOT EXECUTED
107dd0: 6a 01 push $0x1 <== NOT EXECUTED
107dd2: 8d 43 49 lea 0x49(%ebx),%eax <== NOT EXECUTED
107dd5: 50 push %eax <== NOT EXECUTED
107dd6: ff 73 10 pushl 0x10(%ebx) <== NOT EXECUTED
107dd9: ff 93 a4 00 00 00 call *0xa4(%ebx) <== NOT EXECUTED
rtems_interrupt_disable(level);
107ddf: 9c pushf <== NOT EXECUTED
107de0: fa cli <== NOT EXECUTED
107de1: 5a pop %edx <== NOT EXECUTED
tty->t_dqlen--;
107de2: ff 8b 90 00 00 00 decl 0x90(%ebx) <== NOT EXECUTED
tty->flow_ctrl &= ~FL_ISNTXOF;
107de8: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax <== NOT EXECUTED
107dee: 83 e0 fd and $0xfffffffd,%eax <== NOT EXECUTED
107df1: 89 83 b8 00 00 00 mov %eax,0xb8(%ebx) <== NOT EXECUTED
rtems_interrupt_enable(level);
107df7: 52 push %edx <== NOT EXECUTED
107df8: 9d popf <== NOT EXECUTED
107df9: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
nToSend = 1;
107dfc: be 01 00 00 00 mov $0x1,%esi <== NOT EXECUTED
107e01: e9 37 01 00 00 jmp 107f3d <rtems_termios_refill_transmitter+0x1bd><== NOT EXECUTED
} else {
if ( tty->rawOutBuf.Head == tty->rawOutBuf.Tail ) {
107e06: 8b 93 80 00 00 00 mov 0x80(%ebx),%edx
107e0c: 8b 83 84 00 00 00 mov 0x84(%ebx),%eax
107e12: 39 c2 cmp %eax,%edx
107e14: 75 25 jne 107e3b <rtems_termios_refill_transmitter+0xbb>
/*
* this should never happen...
*/
rtems_semaphore_release (tty->rawOutBuf.Semaphore);
}
return 0;
107e16: 31 f6 xor %esi,%esi
} else {
if ( tty->rawOutBuf.Head == tty->rawOutBuf.Tail ) {
/*
* buffer was empty
*/
if (tty->rawOutBufState == rob_wait) {
107e18: 83 bb 94 00 00 00 02 cmpl $0x2,0x94(%ebx)
107e1f: 0f 85 18 01 00 00 jne 107f3d <rtems_termios_refill_transmitter+0x1bd><== ALWAYS TAKEN
/*
* this should never happen...
*/
rtems_semaphore_release (tty->rawOutBuf.Semaphore);
107e25: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
107e28: ff b3 8c 00 00 00 pushl 0x8c(%ebx) <== NOT EXECUTED
107e2e: e8 4d 20 00 00 call 109e80 <rtems_semaphore_release><== NOT EXECUTED
107e33: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
107e36: e9 02 01 00 00 jmp 107f3d <rtems_termios_refill_transmitter+0x1bd><== NOT EXECUTED
}
return 0;
}
rtems_interrupt_disable(level);
107e3b: 9c pushf
107e3c: fa cli
107e3d: 58 pop %eax
len = tty->t_dqlen;
107e3e: 8b bb 90 00 00 00 mov 0x90(%ebx),%edi
tty->t_dqlen = 0;
107e44: c7 83 90 00 00 00 00 movl $0x0,0x90(%ebx)
107e4b: 00 00 00
rtems_interrupt_enable(level);
107e4e: 50 push %eax
107e4f: 9d popf
newTail = (tty->rawOutBuf.Tail + len) % tty->rawOutBuf.Size;
107e50: 8b 83 84 00 00 00 mov 0x84(%ebx),%eax
107e56: 8b 8b 88 00 00 00 mov 0x88(%ebx),%ecx
107e5c: 01 f8 add %edi,%eax
107e5e: 31 d2 xor %edx,%edx
107e60: f7 f1 div %ecx
107e62: 89 d7 mov %edx,%edi
tty->rawOutBuf.Tail = newTail;
107e64: 89 93 84 00 00 00 mov %edx,0x84(%ebx)
if (tty->rawOutBufState == rob_wait) {
107e6a: 83 bb 94 00 00 00 02 cmpl $0x2,0x94(%ebx)
107e71: 75 11 jne 107e84 <rtems_termios_refill_transmitter+0x104>
/*
* wake up any pending writer task
*/
rtems_semaphore_release (tty->rawOutBuf.Semaphore);
107e73: 83 ec 0c sub $0xc,%esp
107e76: ff b3 8c 00 00 00 pushl 0x8c(%ebx)
107e7c: e8 ff 1f 00 00 call 109e80 <rtems_semaphore_release>
107e81: 83 c4 10 add $0x10,%esp
}
if (newTail == tty->rawOutBuf.Head) {
107e84: 8b 83 80 00 00 00 mov 0x80(%ebx),%eax
107e8a: 39 c7 cmp %eax,%edi
107e8c: 75 2b jne 107eb9 <rtems_termios_refill_transmitter+0x139>
/*
* Buffer has become empty
*/
tty->rawOutBufState = rob_idle;
107e8e: c7 83 94 00 00 00 00 movl $0x0,0x94(%ebx)
107e95: 00 00 00
nToSend = 0;
/*
* check to see if snd wakeup callback was set
*/
if ( tty->tty_snd.sw_pfn != NULL) {
107e98: 8b 83 d4 00 00 00 mov 0xd4(%ebx),%eax
107e9e: 85 c0 test %eax,%eax
107ea0: 0f 84 8f 00 00 00 je 107f35 <rtems_termios_refill_transmitter+0x1b5><== ALWAYS TAKEN
(*tty->tty_snd.sw_pfn)(&tty->termios, tty->tty_snd.sw_arg);
107ea6: 52 push %edx <== NOT EXECUTED
107ea7: 52 push %edx <== NOT EXECUTED
107ea8: ff b3 d8 00 00 00 pushl 0xd8(%ebx) <== NOT EXECUTED
107eae: 8d 53 30 lea 0x30(%ebx),%edx <== NOT EXECUTED
107eb1: 52 push %edx <== NOT EXECUTED
107eb2: ff d0 call *%eax <== NOT EXECUTED
107eb4: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
107eb7: eb 7c jmp 107f35 <rtems_termios_refill_transmitter+0x1b5><== NOT EXECUTED
}
}
/* check, whether output should stop due to received XOFF */
else if ((tty->flow_ctrl & (FL_MDXON | FL_ORCVXOF))
107eb9: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax
107ebf: 25 10 02 00 00 and $0x210,%eax
107ec4: 3d 10 02 00 00 cmp $0x210,%eax
107ec9: 75 20 jne 107eeb <rtems_termios_refill_transmitter+0x16b><== ALWAYS TAKEN
== (FL_MDXON | FL_ORCVXOF)) {
/* Buffer not empty, but output stops due to XOFF */
/* set flag, that output has been stopped */
rtems_interrupt_disable(level);
107ecb: 9c pushf <== NOT EXECUTED
107ecc: fa cli <== NOT EXECUTED
107ecd: 5a pop %edx <== NOT EXECUTED
tty->flow_ctrl |= FL_OSTOP;
107ece: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax <== NOT EXECUTED
107ed4: 83 c8 20 or $0x20,%eax <== NOT EXECUTED
107ed7: 89 83 b8 00 00 00 mov %eax,0xb8(%ebx) <== NOT EXECUTED
tty->rawOutBufState = rob_busy; /*apm*/
107edd: c7 83 94 00 00 00 01 movl $0x1,0x94(%ebx) <== NOT EXECUTED
107ee4: 00 00 00
rtems_interrupt_enable(level);
107ee7: 52 push %edx <== NOT EXECUTED
107ee8: 9d popf <== NOT EXECUTED
107ee9: eb 4a jmp 107f35 <rtems_termios_refill_transmitter+0x1b5><== NOT EXECUTED
nToSend = 0;
} else {
/*
* Buffer not empty, start tranmitter
*/
if (newTail > tty->rawOutBuf.Head)
107eeb: 8b 83 80 00 00 00 mov 0x80(%ebx),%eax
107ef1: 39 c7 cmp %eax,%edi
107ef3: 76 08 jbe 107efd <rtems_termios_refill_transmitter+0x17d>
nToSend = tty->rawOutBuf.Size - newTail;
107ef5: 8b b3 88 00 00 00 mov 0x88(%ebx),%esi
107efb: eb 06 jmp 107f03 <rtems_termios_refill_transmitter+0x183>
else
nToSend = tty->rawOutBuf.Head - newTail;
107efd: 8b b3 80 00 00 00 mov 0x80(%ebx),%esi
107f03: 29 fe sub %edi,%esi
/* when flow control XON or XOF, don't send blocks of data */
/* to allow fast reaction on incoming flow ctrl and low latency*/
/* for outgoing flow control */
if (tty->flow_ctrl & (FL_MDXON | FL_MDXOF)) {
107f05: 8b 83 b8 00 00 00 mov 0xb8(%ebx),%eax
107f0b: f6 c4 06 test $0x6,%ah
107f0e: 74 05 je 107f15 <rtems_termios_refill_transmitter+0x195>
nToSend = 1;
107f10: be 01 00 00 00 mov $0x1,%esi
}
tty->rawOutBufState = rob_busy; /*apm*/
107f15: c7 83 94 00 00 00 01 movl $0x1,0x94(%ebx)
107f1c: 00 00 00
(*tty->device.write)(
107f1f: 50 push %eax
107f20: 56 push %esi
107f21: 8b 43 7c mov 0x7c(%ebx),%eax
107f24: 01 f8 add %edi,%eax
107f26: 50 push %eax
107f27: ff 73 10 pushl 0x10(%ebx)
107f2a: ff 93 a4 00 00 00 call *0xa4(%ebx)
107f30: 83 c4 10 add $0x10,%esp
107f33: eb 02 jmp 107f37 <rtems_termios_refill_transmitter+0x1b7>
if (newTail == tty->rawOutBuf.Head) {
/*
* Buffer has become empty
*/
tty->rawOutBufState = rob_idle;
nToSend = 0;
107f35: 31 f6 xor %esi,%esi
}
tty->rawOutBufState = rob_busy; /*apm*/
(*tty->device.write)(
tty->minor, &tty->rawOutBuf.theBuf[newTail], nToSend);
}
tty->rawOutBuf.Tail = newTail; /*apm*/
107f37: 89 bb 84 00 00 00 mov %edi,0x84(%ebx)
}
return nToSend;
}
107f3d: 89 f0 mov %esi,%eax
107f3f: 8d 65 f4 lea -0xc(%ebp),%esp
107f42: 5b pop %ebx
107f43: 5e pop %esi
107f44: 5f pop %edi
107f45: 5d pop %ebp
107f46: c3 ret
00109431 <rtems_termios_rxdaemon>:
/*
* this task actually processes any receive events
*/
static rtems_task rtems_termios_rxdaemon(rtems_task_argument argument)
{
109431: 55 push %ebp
109432: 89 e5 mov %esp,%ebp
109434: 57 push %edi
109435: 56 push %esi
109436: 53 push %ebx
109437: 83 ec 1c sub $0x1c,%esp
10943a: 8b 5d 08 mov 0x8(%ebp),%ebx
while (1) {
/*
* wait for rtems event
*/
rtems_event_receive(
10943d: 8d 7d e4 lea -0x1c(%ebp),%edi
if (c != EOF) {
/*
* pollRead did call enqueue on its own
*/
c_buf = c;
rtems_termios_enqueue_raw_characters ( tty,&c_buf,1);
109440: 8d 75 e3 lea -0x1d(%ebp),%esi
while (1) {
/*
* wait for rtems event
*/
rtems_event_receive(
109443: 57 push %edi
109444: 6a 00 push $0x0
109446: 6a 02 push $0x2
109448: 6a 03 push $0x3
10944a: e8 0d 04 00 00 call 10985c <rtems_event_receive>
(TERMIOS_RX_PROC_EVENT | TERMIOS_RX_TERMINATE_EVENT),
RTEMS_EVENT_ANY | RTEMS_WAIT,
RTEMS_NO_TIMEOUT,
&the_event
);
if ((the_event & TERMIOS_RX_TERMINATE_EVENT) != 0) {
10944f: 83 c4 10 add $0x10,%esp
109452: f6 45 e4 01 testb $0x1,-0x1c(%ebp)
109456: 74 17 je 10946f <rtems_termios_rxdaemon+0x3e><== ALWAYS TAKEN
tty->rxTaskId = 0;
109458: c7 83 c4 00 00 00 00 movl $0x0,0xc4(%ebx) <== NOT EXECUTED
10945f: 00 00 00
rtems_task_delete(RTEMS_SELF);
109462: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
109465: 6a 00 push $0x0 <== NOT EXECUTED
109467: e8 dc 0b 00 00 call 10a048 <rtems_task_delete> <== NOT EXECUTED
10946c: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
/*
* do something
*/
c = tty->device.pollRead(tty->minor);
10946f: 83 ec 0c sub $0xc,%esp
109472: ff 73 10 pushl 0x10(%ebx)
109475: ff 93 a0 00 00 00 call *0xa0(%ebx)
if (c != EOF) {
10947b: 83 c4 10 add $0x10,%esp
10947e: 83 f8 ff cmp $0xffffffff,%eax
109481: 74 c0 je 109443 <rtems_termios_rxdaemon+0x12>
/*
* pollRead did call enqueue on its own
*/
c_buf = c;
109483: 88 45 e3 mov %al,-0x1d(%ebp)
rtems_termios_enqueue_raw_characters ( tty,&c_buf,1);
109486: 50 push %eax
109487: 6a 01 push $0x1
109489: 56 push %esi
10948a: 53 push %ebx
10948b: e8 27 fd ff ff call 1091b7 <rtems_termios_enqueue_raw_characters>
109490: 83 c4 10 add $0x10,%esp
109493: eb ae jmp 109443 <rtems_termios_rxdaemon+0x12>
00107f47 <rtems_termios_txdaemon>:
/*
* this task actually processes any transmit events
*/
static rtems_task rtems_termios_txdaemon(rtems_task_argument argument)
{
107f47: 55 push %ebp
107f48: 89 e5 mov %esp,%ebp
107f4a: 56 push %esi
107f4b: 53 push %ebx
107f4c: 83 ec 10 sub $0x10,%esp
107f4f: 8b 5d 08 mov 0x8(%ebp),%ebx
while (1) {
/*
* wait for rtems event
*/
rtems_event_receive(
107f52: 8d 75 f4 lea -0xc(%ebp),%esi
107f55: 56 push %esi
107f56: 6a 00 push $0x0
107f58: 6a 02 push $0x2
107f5a: 6a 03 push $0x3
107f5c: e8 fb 18 00 00 call 10985c <rtems_event_receive>
(TERMIOS_TX_START_EVENT | TERMIOS_TX_TERMINATE_EVENT),
RTEMS_EVENT_ANY | RTEMS_WAIT,
RTEMS_NO_TIMEOUT,
&the_event
);
if ((the_event & TERMIOS_TX_TERMINATE_EVENT) != 0) {
107f61: 83 c4 10 add $0x10,%esp
107f64: f6 45 f4 01 testb $0x1,-0xc(%ebp)
107f68: 74 17 je 107f81 <rtems_termios_txdaemon+0x3a><== ALWAYS TAKEN
tty->txTaskId = 0;
107f6a: c7 83 c8 00 00 00 00 movl $0x0,0xc8(%ebx) <== NOT EXECUTED
107f71: 00 00 00
rtems_task_delete(RTEMS_SELF);
107f74: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
107f77: 6a 00 push $0x0 <== NOT EXECUTED
107f79: e8 ca 20 00 00 call 10a048 <rtems_task_delete> <== NOT EXECUTED
107f7e: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
/*
* call any line discipline start function
*/
if (rtems_termios_linesw[tty->t_line].l_start != NULL) {
107f81: 8b 83 cc 00 00 00 mov 0xcc(%ebx),%eax
107f87: c1 e0 05 shl $0x5,%eax
107f8a: 8b 80 d4 df 12 00 mov 0x12dfd4(%eax),%eax
107f90: 85 c0 test %eax,%eax
107f92: 74 09 je 107f9d <rtems_termios_txdaemon+0x56><== ALWAYS TAKEN
rtems_termios_linesw[tty->t_line].l_start(tty);
107f94: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
107f97: 53 push %ebx <== NOT EXECUTED
107f98: ff d0 call *%eax <== NOT EXECUTED
107f9a: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
/*
* try to push further characters to device
*/
rtems_termios_refill_transmitter(tty);
107f9d: 89 d8 mov %ebx,%eax
107f9f: e8 dc fd ff ff call 107d80 <rtems_termios_refill_transmitter>
}
107fa4: eb af jmp 107f55 <rtems_termios_txdaemon+0xe>
00108e2f <rtems_termios_write>:
rtems_termios_puts (&c, 1, tty);
}
rtems_status_code
rtems_termios_write (void *arg)
{
108e2f: 55 push %ebp
108e30: 89 e5 mov %esp,%ebp
108e32: 57 push %edi
108e33: 56 push %esi
108e34: 53 push %ebx
108e35: 83 ec 20 sub $0x20,%esp
108e38: 8b 5d 08 mov 0x8(%ebp),%ebx
rtems_libio_rw_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
108e3b: 8b 03 mov (%ebx),%eax
108e3d: 8b 70 2c mov 0x2c(%eax),%esi
rtems_status_code sc;
sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
108e40: 6a 00 push $0x0
108e42: 6a 00 push $0x0
108e44: ff 76 18 pushl 0x18(%esi)
108e47: e8 44 0f 00 00 call 109d90 <rtems_semaphore_obtain>
108e4c: 89 c7 mov %eax,%edi
if (sc != RTEMS_SUCCESSFUL)
108e4e: 83 c4 10 add $0x10,%esp
108e51: 85 c0 test %eax,%eax
108e53: 75 73 jne 108ec8 <rtems_termios_write+0x99><== NEVER TAKEN
return sc;
if (rtems_termios_linesw[tty->t_line].l_write != NULL) {
108e55: 8b 86 cc 00 00 00 mov 0xcc(%esi),%eax
108e5b: c1 e0 05 shl $0x5,%eax
108e5e: 8b 80 cc df 12 00 mov 0x12dfcc(%eax),%eax
108e64: 85 c0 test %eax,%eax
108e66: 74 0b je 108e73 <rtems_termios_write+0x44>
sc = rtems_termios_linesw[tty->t_line].l_write(tty,args);
108e68: 52 push %edx
108e69: 52 push %edx
108e6a: 53 push %ebx
108e6b: 56 push %esi
108e6c: ff d0 call *%eax
108e6e: 89 c7 mov %eax,%edi
rtems_semaphore_release (tty->osem);
108e70: 59 pop %ecx
108e71: eb 4a jmp 108ebd <rtems_termios_write+0x8e>
return sc;
}
if (tty->termios.c_oflag & OPOST) {
108e73: f6 46 34 01 testb $0x1,0x34(%esi)
108e77: 74 2b je 108ea4 <rtems_termios_write+0x75><== NEVER TAKEN
uint32_t count = args->count;
char *buffer = args->buffer;
108e79: 8b 4b 0c mov 0xc(%ebx),%ecx
}
rtems_termios_puts (&c, 1, tty);
}
rtems_status_code
rtems_termios_write (void *arg)
108e7c: 8b 43 10 mov 0x10(%ebx),%eax
108e7f: 01 c8 add %ecx,%eax
108e81: 89 45 e4 mov %eax,-0x1c(%ebp)
return sc;
}
if (tty->termios.c_oflag & OPOST) {
uint32_t count = args->count;
char *buffer = args->buffer;
while (count--)
108e84: eb 11 jmp 108e97 <rtems_termios_write+0x68>
oproc (*buffer++, tty);
108e86: 0f b6 01 movzbl (%ecx),%eax
108e89: 41 inc %ecx
108e8a: 89 f2 mov %esi,%edx
108e8c: 89 4d e0 mov %ecx,-0x20(%ebp)
108e8f: e8 3d fb ff ff call 1089d1 <oproc>
108e94: 8b 4d e0 mov -0x20(%ebp),%ecx
return sc;
}
if (tty->termios.c_oflag & OPOST) {
uint32_t count = args->count;
char *buffer = args->buffer;
while (count--)
108e97: 3b 4d e4 cmp -0x1c(%ebp),%ecx
108e9a: 75 ea jne 108e86 <rtems_termios_write+0x57>
oproc (*buffer++, tty);
args->bytes_moved = args->count;
108e9c: 8b 43 10 mov 0x10(%ebx),%eax
108e9f: 89 43 18 mov %eax,0x18(%ebx)
108ea2: eb 16 jmp 108eba <rtems_termios_write+0x8b>
} else {
rtems_termios_puts (args->buffer, args->count, tty);
108ea4: 50 push %eax <== NOT EXECUTED
108ea5: 56 push %esi <== NOT EXECUTED
108ea6: ff 73 10 pushl 0x10(%ebx) <== NOT EXECUTED
108ea9: ff 73 0c pushl 0xc(%ebx) <== NOT EXECUTED
108eac: e8 14 fa ff ff call 1088c5 <rtems_termios_puts> <== NOT EXECUTED
args->bytes_moved = args->count;
108eb1: 8b 43 10 mov 0x10(%ebx),%eax <== NOT EXECUTED
108eb4: 89 43 18 mov %eax,0x18(%ebx) <== NOT EXECUTED
108eb7: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
}
rtems_semaphore_release (tty->osem);
108eba: 83 ec 0c sub $0xc,%esp
108ebd: ff 76 18 pushl 0x18(%esi)
108ec0: e8 bb 0f 00 00 call 109e80 <rtems_semaphore_release>
return sc;
108ec5: 83 c4 10 add $0x10,%esp
}
108ec8: 89 f8 mov %edi,%eax
108eca: 8d 65 f4 lea -0xc(%ebp),%esp
108ecd: 5b pop %ebx
108ece: 5e pop %esi
108ecf: 5f pop %edi
108ed0: 5d pop %ebp
108ed1: c3 ret
00115fac <rtems_timer_cancel>:
*/
rtems_status_code rtems_timer_cancel(
rtems_id id
)
{
115fac: 55 push %ebp
115fad: 89 e5 mov %esp,%ebp
115faf: 83 ec 1c sub $0x1c,%esp
Timer_Control *the_timer;
Objects_Locations location;
the_timer = _Timer_Get( id, &location );
115fb2: 8d 45 f4 lea -0xc(%ebp),%eax
RTEMS_INLINE_ROUTINE Timer_Control *_Timer_Get (
Objects_Id id,
Objects_Locations *location
)
{
return (Timer_Control *)
115fb5: 50 push %eax
115fb6: ff 75 08 pushl 0x8(%ebp)
115fb9: 68 84 87 14 00 push $0x148784
115fbe: e8 2d 28 00 00 call 1187f0 <_Objects_Get>
switch ( location ) {
115fc3: 83 c4 10 add $0x10,%esp
115fc6: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
115fca: 75 1e jne 115fea <rtems_timer_cancel+0x3e>
case OBJECTS_LOCAL:
if ( !_Timer_Is_dormant_class( the_timer->the_class ) )
115fcc: 83 78 38 04 cmpl $0x4,0x38(%eax)
115fd0: 74 0f je 115fe1 <rtems_timer_cancel+0x35><== NEVER TAKEN
(void) _Watchdog_Remove( &the_timer->Ticker );
115fd2: 83 ec 0c sub $0xc,%esp
115fd5: 83 c0 10 add $0x10,%eax
115fd8: 50 push %eax
115fd9: e8 62 41 00 00 call 11a140 <_Watchdog_Remove>
115fde: 83 c4 10 add $0x10,%esp
_Thread_Enable_dispatch();
115fe1: e8 ae 33 00 00 call 119394 <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
115fe6: 31 c0 xor %eax,%eax
115fe8: eb 05 jmp 115fef <rtems_timer_cancel+0x43>
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
115fea: b8 04 00 00 00 mov $0x4,%eax
}
115fef: c9 leave
115ff0: c3 ret
001168b9 <rtems_timer_initiate_server>:
rtems_status_code rtems_timer_initiate_server(
uint32_t priority,
uint32_t stack_size,
rtems_attribute attribute_set
)
{
1168b9: 55 push %ebp
1168ba: 89 e5 mov %esp,%ebp
1168bc: 53 push %ebx
1168bd: 83 ec 24 sub $0x24,%esp
1168c0: 8b 55 08 mov 0x8(%ebp),%edx
*/
RTEMS_INLINE_ROUTINE bool _RTEMS_tasks_Priority_is_valid (
rtems_task_priority the_priority
)
{
return ( ( the_priority >= RTEMS_MINIMUM_PRIORITY ) &&
1168c3: 31 c0 xor %eax,%eax
1168c5: 85 d2 test %edx,%edx
1168c7: 74 0f je 1168d8 <rtems_timer_initiate_server+0x1f>
( the_priority <= RTEMS_MAXIMUM_PRIORITY ) );
1168c9: 0f b6 05 48 f8 13 00 movzbl 0x13f848,%eax
*/
RTEMS_INLINE_ROUTINE bool _RTEMS_tasks_Priority_is_valid (
rtems_task_priority the_priority
)
{
return ( ( the_priority >= RTEMS_MINIMUM_PRIORITY ) &&
1168d0: 39 c2 cmp %eax,%edx
1168d2: 0f 96 c0 setbe %al
1168d5: 0f b6 c0 movzbl %al,%eax
* Make sure the requested priority is valid. The if is
* structured so we check it is invalid before looking for
* a specific invalid value as the default.
*/
_priority = priority;
if ( !_RTEMS_tasks_Priority_is_valid( priority ) ) {
1168d8: 85 c0 test %eax,%eax
1168da: 75 0d jne 1168e9 <rtems_timer_initiate_server+0x30>
if ( priority != RTEMS_TIMER_SERVER_DEFAULT_PRIORITY )
return RTEMS_INVALID_PRIORITY;
1168dc: b0 13 mov $0x13,%al
* structured so we check it is invalid before looking for
* a specific invalid value as the default.
*/
_priority = priority;
if ( !_RTEMS_tasks_Priority_is_valid( priority ) ) {
if ( priority != RTEMS_TIMER_SERVER_DEFAULT_PRIORITY )
1168de: 42 inc %edx
1168df: 0f 85 5c 01 00 00 jne 116a41 <rtems_timer_initiate_server+0x188>
return RTEMS_INVALID_PRIORITY;
_priority = 0;
1168e5: 31 db xor %ebx,%ebx
1168e7: eb 02 jmp 1168eb <rtems_timer_initiate_server+0x32>
* Make sure the requested priority is valid. The if is
* structured so we check it is invalid before looking for
* a specific invalid value as the default.
*/
_priority = priority;
if ( !_RTEMS_tasks_Priority_is_valid( priority ) ) {
1168e9: 89 d3 mov %edx,%ebx
1168eb: e8 78 fc ff ff call 116568 <_Thread_Dispatch_increment_disable_level>
/*
* Just to make sure this is only called once.
*/
_Thread_Disable_dispatch();
tmpInitialized = initialized;
1168f0: 8a 15 c0 37 14 00 mov 0x1437c0,%dl
initialized = true;
1168f6: c6 05 c0 37 14 00 01 movb $0x1,0x1437c0
_Thread_Enable_dispatch();
1168fd: 88 55 e4 mov %dl,-0x1c(%ebp)
116900: e8 8f 2a 00 00 call 119394 <_Thread_Enable_dispatch>
if ( tmpInitialized )
return RTEMS_INCORRECT_STATE;
116905: b8 0e 00 00 00 mov $0xe,%eax
_Thread_Disable_dispatch();
tmpInitialized = initialized;
initialized = true;
_Thread_Enable_dispatch();
if ( tmpInitialized )
11690a: 8a 55 e4 mov -0x1c(%ebp),%dl
11690d: 84 d2 test %dl,%dl
11690f: 0f 85 2c 01 00 00 jne 116a41 <rtems_timer_initiate_server+0x188><== NEVER TAKEN
* other library rules. For example, if using a TSR written in Ada the
* Server should run at the same priority as the priority Ada task.
* Otherwise, the priority ceiling for the mutex used to protect the
* GNAT run-time is violated.
*/
status = rtems_task_create(
116915: 50 push %eax
116916: 50 push %eax
116917: 8d 45 f4 lea -0xc(%ebp),%eax
11691a: 50 push %eax
11691b: 8b 45 10 mov 0x10(%ebp),%eax
11691e: 80 cc 80 or $0x80,%ah
116921: 50 push %eax
116922: 68 00 01 00 00 push $0x100
116927: ff 75 0c pushl 0xc(%ebp)
11692a: 53 push %ebx
11692b: 68 45 4d 49 54 push $0x54494d45
116930: e8 77 ee ff ff call 1157ac <rtems_task_create>
/* user may want floating point but we need */
/* system task specified for 0 priority */
attribute_set | RTEMS_SYSTEM_TASK,
&id /* get the id back */
);
if (status) {
116935: 83 c4 20 add $0x20,%esp
116938: 85 c0 test %eax,%eax
11693a: 74 0c je 116948 <rtems_timer_initiate_server+0x8f>
initialized = false;
11693c: c6 05 c0 37 14 00 00 movb $0x0,0x1437c0
116943: e9 f9 00 00 00 jmp 116a41 <rtems_timer_initiate_server+0x188>
* We work with the TCB pointer, not the ID, so we need to convert
* to a TCB pointer from here out.
*/
ts->thread = (Thread_Control *)_Objects_Get_local_object(
&_RTEMS_tasks_Information,
_Objects_Get_index(id)
116948: 8b 5d f4 mov -0xc(%ebp),%ebx
*/
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return NULL;
#endif
return information->local_table[ index ];
11694b: 0f b7 d3 movzwl %bx,%edx
11694e: a1 ec 7d 14 00 mov 0x147dec,%eax
116953: 8b 04 90 mov (%eax,%edx,4),%eax
/*
* We work with the TCB pointer, not the ID, so we need to convert
* to a TCB pointer from here out.
*/
ts->thread = (Thread_Control *)_Objects_Get_local_object(
116956: a3 c4 37 14 00 mov %eax,0x1437c4
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
11695b: c7 05 f4 37 14 00 f8 movl $0x1437f8,0x1437f4
116962: 37 14 00
head->previous = NULL;
116965: c7 05 f8 37 14 00 00 movl $0x0,0x1437f8
11696c: 00 00 00
tail->previous = head;
11696f: c7 05 fc 37 14 00 f4 movl $0x1437f4,0x1437fc
116976: 37 14 00
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
116979: c7 05 2c 38 14 00 30 movl $0x143830,0x14382c
116980: 38 14 00
head->previous = NULL;
116983: c7 05 30 38 14 00 00 movl $0x0,0x143830
11698a: 00 00 00
tail->previous = head;
11698d: c7 05 34 38 14 00 2c movl $0x14382c,0x143834
116994: 38 14 00
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
116997: c7 05 d4 37 14 00 00 movl $0x0,0x1437d4
11699e: 00 00 00
the_watchdog->routine = routine;
1169a1: c7 05 e8 37 14 00 18 movl $0x119218,0x1437e8
1169a8: 92 11 00
the_watchdog->id = id;
1169ab: 89 1d ec 37 14 00 mov %ebx,0x1437ec
the_watchdog->user_data = user_data;
1169b1: c7 05 f0 37 14 00 00 movl $0x0,0x1437f0
1169b8: 00 00 00
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
1169bb: c7 05 0c 38 14 00 00 movl $0x0,0x14380c
1169c2: 00 00 00
the_watchdog->routine = routine;
1169c5: c7 05 20 38 14 00 18 movl $0x119218,0x143820
1169cc: 92 11 00
the_watchdog->id = id;
1169cf: 89 1d 24 38 14 00 mov %ebx,0x143824
the_watchdog->user_data = user_data;
1169d5: c7 05 28 38 14 00 00 movl $0x0,0x143828
1169dc: 00 00 00
/*
* Initialize the pointer to the timer schedule method so applications that
* do not use the Timer Server do not have to pull it in.
*/
ts->schedule_operation = _Timer_server_Schedule_operation_method;
1169df: c7 05 c8 37 14 00 09 movl $0x116609,0x1437c8
1169e6: 66 11 00
ts->Interval_watchdogs.last_snapshot = _Watchdog_Ticks_since_boot;
1169e9: a1 48 7f 14 00 mov 0x147f48,%eax
1169ee: a3 00 38 14 00 mov %eax,0x143800
1169f3: 6a 00 push $0x0
1169f5: 68 00 ca 9a 3b push $0x3b9aca00
1169fa: ff 35 14 7e 14 00 pushl 0x147e14
116a00: ff 35 10 7e 14 00 pushl 0x147e10
116a06: e8 e9 3b 01 00 call 12a5f4 <__divdi3>
116a0b: 83 c4 0c add $0xc,%esp
ts->TOD_watchdogs.last_snapshot = (Watchdog_Interval) _TOD_Seconds_since_epoch();
116a0e: a3 38 38 14 00 mov %eax,0x143838
ts->insert_chain = NULL;
116a13: c7 05 3c 38 14 00 00 movl $0x0,0x14383c
116a1a: 00 00 00
ts->active = false;
116a1d: c6 05 40 38 14 00 00 movb $0x0,0x143840
/*
* The default timer server is now available.
*/
_Timer_server = ts;
116a24: c7 05 c4 87 14 00 c4 movl $0x1437c4,0x1487c4
116a2b: 37 14 00
/*
* Start the timer server
*/
status = rtems_task_start(
116a2e: 68 c4 37 14 00 push $0x1437c4
116a33: 68 32 67 11 00 push $0x116732
116a38: 53 push %ebx
116a39: e8 56 f3 ff ff call 115d94 <rtems_task_start>
116a3e: 83 c4 10 add $0x10,%esp
initialized = false;
}
#endif
return status;
}
116a41: 8b 5d fc mov -0x4(%ebp),%ebx
116a44: c9 leave
116a45: c3 ret
0011645c <rtems_timer_server_fire_when>:
rtems_id id,
rtems_time_of_day *wall_time,
rtems_timer_service_routine_entry routine,
void *user_data
)
{
11645c: 55 push %ebp
11645d: 89 e5 mov %esp,%ebp
11645f: 57 push %edi
116460: 56 push %esi
116461: 53 push %ebx
116462: 83 ec 1c sub $0x1c,%esp
116465: 8b 75 0c mov 0xc(%ebp),%esi
Timer_Control *the_timer;
Objects_Locations location;
rtems_interval seconds;
Timer_server_Control *timer_server = _Timer_server;
116468: 8b 1d c4 87 14 00 mov 0x1487c4,%ebx
if ( !timer_server )
11646e: 85 db test %ebx,%ebx
116470: 0f 84 e1 00 00 00 je 116557 <rtems_timer_server_fire_when+0xfb>
return RTEMS_INCORRECT_STATE;
if ( !_TOD.is_set )
return RTEMS_NOT_DEFINED;
116476: b8 0b 00 00 00 mov $0xb,%eax
Timer_server_Control *timer_server = _Timer_server;
if ( !timer_server )
return RTEMS_INCORRECT_STATE;
if ( !_TOD.is_set )
11647b: 80 3d 24 7e 14 00 00 cmpb $0x0,0x147e24
116482: 0f 84 d6 00 00 00 je 11655e <rtems_timer_server_fire_when+0x102><== NEVER TAKEN
return RTEMS_NOT_DEFINED;
if ( !routine )
return RTEMS_INVALID_ADDRESS;
116488: b0 09 mov $0x9,%al
return RTEMS_INCORRECT_STATE;
if ( !_TOD.is_set )
return RTEMS_NOT_DEFINED;
if ( !routine )
11648a: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
11648e: 0f 84 ca 00 00 00 je 11655e <rtems_timer_server_fire_when+0x102>
return RTEMS_INVALID_ADDRESS;
if ( !_TOD_Validate( wall_time ) )
116494: 83 ec 0c sub $0xc,%esp
116497: 56 push %esi
116498: e8 b3 d4 ff ff call 113950 <_TOD_Validate>
11649d: 83 c4 10 add $0x10,%esp
1164a0: 84 c0 test %al,%al
1164a2: 75 0a jne 1164ae <rtems_timer_server_fire_when+0x52>
return RTEMS_INVALID_CLOCK;
1164a4: b8 14 00 00 00 mov $0x14,%eax
1164a9: e9 b0 00 00 00 jmp 11655e <rtems_timer_server_fire_when+0x102>
seconds = _TOD_To_seconds( wall_time );
1164ae: 83 ec 0c sub $0xc,%esp
1164b1: 56 push %esi
1164b2: e8 25 d4 ff ff call 1138dc <_TOD_To_seconds>
1164b7: 89 c6 mov %eax,%esi
1164b9: 6a 00 push $0x0
1164bb: 68 00 ca 9a 3b push $0x3b9aca00
1164c0: ff 35 14 7e 14 00 pushl 0x147e14
1164c6: ff 35 10 7e 14 00 pushl 0x147e10
1164cc: e8 23 41 01 00 call 12a5f4 <__divdi3>
if ( seconds <= _TOD_Seconds_since_epoch() )
1164d1: 83 c4 20 add $0x20,%esp
1164d4: 39 c6 cmp %eax,%esi
1164d6: 76 cc jbe 1164a4 <rtems_timer_server_fire_when+0x48>
1164d8: 50 push %eax
return RTEMS_INVALID_CLOCK;
the_timer = _Timer_Get( id, &location );
1164d9: 8d 45 e4 lea -0x1c(%ebp),%eax
1164dc: 50 push %eax
1164dd: ff 75 08 pushl 0x8(%ebp)
1164e0: 68 84 87 14 00 push $0x148784
1164e5: e8 06 23 00 00 call 1187f0 <_Objects_Get>
1164ea: 89 c7 mov %eax,%edi
switch ( location ) {
1164ec: 83 c4 10 add $0x10,%esp
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
1164ef: b8 04 00 00 00 mov $0x4,%eax
seconds = _TOD_To_seconds( wall_time );
if ( seconds <= _TOD_Seconds_since_epoch() )
return RTEMS_INVALID_CLOCK;
the_timer = _Timer_Get( id, &location );
switch ( location ) {
1164f4: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp)
1164f8: 75 64 jne 11655e <rtems_timer_server_fire_when+0x102>
case OBJECTS_LOCAL:
(void) _Watchdog_Remove( &the_timer->Ticker );
1164fa: 83 ec 0c sub $0xc,%esp
1164fd: 8d 47 10 lea 0x10(%edi),%eax
116500: 50 push %eax
116501: e8 3a 3c 00 00 call 11a140 <_Watchdog_Remove>
the_timer->the_class = TIMER_TIME_OF_DAY_ON_TASK;
116506: c7 47 38 03 00 00 00 movl $0x3,0x38(%edi)
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
11650d: c7 47 18 00 00 00 00 movl $0x0,0x18(%edi)
the_watchdog->routine = routine;
116514: 8b 45 10 mov 0x10(%ebp),%eax
116517: 89 47 2c mov %eax,0x2c(%edi)
the_watchdog->id = id;
11651a: 8b 45 08 mov 0x8(%ebp),%eax
11651d: 89 47 30 mov %eax,0x30(%edi)
the_watchdog->user_data = user_data;
116520: 8b 45 14 mov 0x14(%ebp),%eax
116523: 89 47 34 mov %eax,0x34(%edi)
116526: 6a 00 push $0x0
116528: 68 00 ca 9a 3b push $0x3b9aca00
11652d: ff 35 14 7e 14 00 pushl 0x147e14
116533: ff 35 10 7e 14 00 pushl 0x147e10
116539: e8 b6 40 01 00 call 12a5f4 <__divdi3>
_Watchdog_Initialize( &the_timer->Ticker, routine, id, user_data );
the_timer->Ticker.initial = seconds - _TOD_Seconds_since_epoch();
11653e: 29 c6 sub %eax,%esi
116540: 89 77 1c mov %esi,0x1c(%edi)
(*timer_server->schedule_operation)( timer_server, the_timer );
116543: 83 c4 18 add $0x18,%esp
116546: 57 push %edi
116547: 53 push %ebx
116548: ff 53 04 call *0x4(%ebx)
_Thread_Enable_dispatch();
11654b: e8 44 2e 00 00 call 119394 <_Thread_Enable_dispatch>
116550: 83 c4 10 add $0x10,%esp
return RTEMS_SUCCESSFUL;
116553: 31 c0 xor %eax,%eax
116555: eb 07 jmp 11655e <rtems_timer_server_fire_when+0x102>
Objects_Locations location;
rtems_interval seconds;
Timer_server_Control *timer_server = _Timer_server;
if ( !timer_server )
return RTEMS_INCORRECT_STATE;
116557: b8 0e 00 00 00 mov $0xe,%eax
11655c: eb 00 jmp 11655e <rtems_timer_server_fire_when+0x102>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
11655e: 8d 65 f4 lea -0xc(%ebp),%esp
116561: 5b pop %ebx
116562: 5e pop %esi
116563: 5f pop %edi
116564: 5d pop %ebp
116565: c3 ret
0010657d <rtems_verror>:
static int rtems_verror(
rtems_error_code_t error_flag,
const char *printf_format,
va_list arglist
)
{
10657d: 55 push %ebp
10657e: 89 e5 mov %esp,%ebp
106580: 57 push %edi
106581: 56 push %esi
106582: 53 push %ebx
106583: 83 ec 1c sub $0x1c,%esp
106586: 89 c3 mov %eax,%ebx
106588: 89 55 e4 mov %edx,-0x1c(%ebp)
10658b: 89 cf mov %ecx,%edi
int local_errno = 0;
int chars_written = 0;
rtems_status_code status;
if (error_flag & RTEMS_ERROR_PANIC) {
10658d: a9 00 00 00 20 test $0x20000000,%eax
106592: 75 27 jne 1065bb <rtems_verror+0x3e>
/* don't aggravate things */
if (rtems_panic_in_progress > 2)
return 0;
}
(void) fflush(stdout); /* in case stdout/stderr same */
106594: 83 ec 0c sub $0xc,%esp
106597: a1 a0 c2 12 00 mov 0x12c2a0,%eax
10659c: ff 70 08 pushl 0x8(%eax)
10659f: e8 a0 ac 00 00 call 111244 <fflush>
status = error_flag & ~RTEMS_ERROR_MASK;
1065a4: 89 de mov %ebx,%esi
1065a6: 81 e6 ff ff ff 8f and $0x8fffffff,%esi
if (error_flag & RTEMS_ERROR_ERRNO) /* include errno? */
1065ac: 83 c4 10 add $0x10,%esp
1065af: 81 e3 00 00 00 40 and $0x40000000,%ebx
1065b5: 75 36 jne 1065ed <rtems_verror+0x70>
rtems_error_code_t error_flag,
const char *printf_format,
va_list arglist
)
{
int local_errno = 0;
1065b7: 31 db xor %ebx,%ebx
1065b9: eb 39 jmp 1065f4 <rtems_verror+0x77>
int chars_written = 0;
rtems_status_code status;
if (error_flag & RTEMS_ERROR_PANIC) {
if (rtems_panic_in_progress++)
1065bb: a1 cc e2 12 00 mov 0x12e2cc,%eax
1065c0: 8d 50 01 lea 0x1(%eax),%edx
1065c3: 89 15 cc e2 12 00 mov %edx,0x12e2cc
1065c9: 85 c0 test %eax,%eax
1065cb: 74 10 je 1065dd <rtems_verror+0x60> <== ALWAYS TAKEN
*
* This rountine increments the thread dispatch level
*/
RTEMS_INLINE_ROUTINE uint32_t _Thread_Dispatch_increment_disable_level(void)
{
_Thread_Dispatch_disable_level++;
1065cd: a1 e4 e3 12 00 mov 0x12e3e4,%eax <== NOT EXECUTED
1065d2: 40 inc %eax <== NOT EXECUTED
1065d3: a3 e4 e3 12 00 mov %eax,0x12e3e4 <== NOT EXECUTED
return _Thread_Dispatch_disable_level;
1065d8: a1 e4 e3 12 00 mov 0x12e3e4,%eax <== NOT EXECUTED
_Thread_Disable_dispatch(); /* disable task switches */
/* don't aggravate things */
if (rtems_panic_in_progress > 2)
return 0;
1065dd: 31 f6 xor %esi,%esi
if (error_flag & RTEMS_ERROR_PANIC) {
if (rtems_panic_in_progress++)
_Thread_Disable_dispatch(); /* disable task switches */
/* don't aggravate things */
if (rtems_panic_in_progress > 2)
1065df: 83 3d cc e2 12 00 02 cmpl $0x2,0x12e2cc
1065e6: 7e ac jle 106594 <rtems_verror+0x17> <== ALWAYS TAKEN
1065e8: e9 b3 00 00 00 jmp 1066a0 <rtems_verror+0x123> <== NOT EXECUTED
(void) fflush(stdout); /* in case stdout/stderr same */
status = error_flag & ~RTEMS_ERROR_MASK;
if (error_flag & RTEMS_ERROR_ERRNO) /* include errno? */
local_errno = errno;
1065ed: e8 ea a8 00 00 call 110edc <__errno>
1065f2: 8b 18 mov (%eax),%ebx
#if defined(RTEMS_MULTIPROCESSING)
if (_System_state_Is_multiprocessing)
fprintf(stderr, "[%" PRIu32 "] ", _Configuration_MP_table->node);
#endif
chars_written += vfprintf(stderr, printf_format, arglist);
1065f4: 50 push %eax
1065f5: 57 push %edi
1065f6: ff 75 e4 pushl -0x1c(%ebp)
1065f9: a1 a0 c2 12 00 mov 0x12c2a0,%eax
1065fe: ff 70 0c pushl 0xc(%eax)
106601: e8 ea 26 01 00 call 118cf0 <vfprintf>
106606: 89 c7 mov %eax,%edi
if (status)
106608: 83 c4 10 add $0x10,%esp
10660b: 85 f6 test %esi,%esi
10660d: 74 24 je 106633 <rtems_verror+0xb6>
chars_written +=
fprintf(stderr, " (status: %s)", rtems_status_text(status));
10660f: 83 ec 0c sub $0xc,%esp
106612: 56 push %esi
106613: e8 50 ff ff ff call 106568 <rtems_status_text>
106618: 83 c4 0c add $0xc,%esp
10661b: 50 push %eax
10661c: 68 b1 f3 11 00 push $0x11f3b1
106621: a1 a0 c2 12 00 mov 0x12c2a0,%eax
106626: ff 70 0c pushl 0xc(%eax)
106629: e8 d6 af 00 00 call 111604 <fprintf>
#endif
chars_written += vfprintf(stderr, printf_format, arglist);
if (status)
chars_written +=
10662e: 01 c7 add %eax,%edi
106630: 83 c4 10 add $0x10,%esp
fprintf(stderr, " (status: %s)", rtems_status_text(status));
if (local_errno) {
106633: 83 fb 00 cmp $0x0,%ebx
106636: 74 40 je 106678 <rtems_verror+0xfb>
if ((local_errno > 0) && *strerror(local_errno))
106638: 7e 25 jle 10665f <rtems_verror+0xe2>
10663a: 83 ec 0c sub $0xc,%esp
10663d: 53 push %ebx
10663e: e8 71 ba 00 00 call 1120b4 <strerror>
106643: 83 c4 10 add $0x10,%esp
106646: 80 38 00 cmpb $0x0,(%eax)
106649: 74 14 je 10665f <rtems_verror+0xe2> <== NEVER TAKEN
chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno));
10664b: 83 ec 0c sub $0xc,%esp
10664e: 53 push %ebx
10664f: e8 60 ba 00 00 call 1120b4 <strerror>
106654: 83 c4 0c add $0xc,%esp
106657: 50 push %eax
106658: 68 bf f3 11 00 push $0x11f3bf
10665d: eb 07 jmp 106666 <rtems_verror+0xe9>
else
chars_written += fprintf(stderr, " (unknown errno=%d)", local_errno);
10665f: 51 push %ecx
106660: 53 push %ebx
106661: 68 cc f3 11 00 push $0x11f3cc
106666: a1 a0 c2 12 00 mov 0x12c2a0,%eax
10666b: ff 70 0c pushl 0xc(%eax)
10666e: e8 91 af 00 00 call 111604 <fprintf>
106673: 01 c7 add %eax,%edi
106675: 83 c4 10 add $0x10,%esp
}
chars_written += fprintf(stderr, "\n");
106678: 50 push %eax
106679: 50 push %eax
10667a: 68 af fc 11 00 push $0x11fcaf
10667f: a1 a0 c2 12 00 mov 0x12c2a0,%eax
106684: ff 70 0c pushl 0xc(%eax)
106687: e8 78 af 00 00 call 111604 <fprintf>
10668c: 8d 34 07 lea (%edi,%eax,1),%esi
(void) fflush(stderr);
10668f: 5a pop %edx
106690: a1 a0 c2 12 00 mov 0x12c2a0,%eax
106695: ff 70 0c pushl 0xc(%eax)
106698: e8 a7 ab 00 00 call 111244 <fflush>
return chars_written;
10669d: 83 c4 10 add $0x10,%esp
}
1066a0: 89 f0 mov %esi,%eax
1066a2: 8d 65 f4 lea -0xc(%ebp),%esp
1066a5: 5b pop %ebx
1066a6: 5e pop %esi
1066a7: 5f pop %edi
1066a8: 5d pop %ebp
1066a9: c3 ret
00121e9c <scanInt>:
/*
* Extract an integer value from the database
*/
static int
scanInt(FILE *fp, int *val)
{
121e9c: 55 push %ebp
121e9d: 89 e5 mov %esp,%ebp
121e9f: 57 push %edi
121ea0: 56 push %esi
121ea1: 53 push %ebx
121ea2: 83 ec 1c sub $0x1c,%esp
121ea5: 89 c6 mov %eax,%esi
121ea7: 89 55 dc mov %edx,-0x24(%ebp)
int c;
unsigned int i = 0;
unsigned int limit = INT_MAX;
int sign = 0;
121eaa: 31 db xor %ebx,%ebx
static int
scanInt(FILE *fp, int *val)
{
int c;
unsigned int i = 0;
unsigned int limit = INT_MAX;
121eac: c7 45 e4 ff ff ff 7f movl $0x7fffffff,-0x1c(%ebp)
*/
static int
scanInt(FILE *fp, int *val)
{
int c;
unsigned int i = 0;
121eb3: 31 ff xor %edi,%edi
unsigned int limit = INT_MAX;
int sign = 0;
int d;
for (;;) {
c = getc(fp);
121eb5: ff 4e 04 decl 0x4(%esi)
121eb8: 79 13 jns 121ecd <scanInt+0x31> <== ALWAYS TAKEN
121eba: 50 push %eax <== NOT EXECUTED
121ebb: 50 push %eax <== NOT EXECUTED
121ebc: 56 push %esi <== NOT EXECUTED
121ebd: ff 35 20 91 16 00 pushl 0x169120 <== NOT EXECUTED
121ec3: e8 78 40 01 00 call 135f40 <__srget_r> <== NOT EXECUTED
121ec8: 83 c4 10 add $0x10,%esp <== NOT EXECUTED
121ecb: eb 08 jmp 121ed5 <scanInt+0x39> <== NOT EXECUTED
121ecd: 8b 16 mov (%esi),%edx
121ecf: 0f b6 02 movzbl (%edx),%eax
121ed2: 42 inc %edx
121ed3: 89 16 mov %edx,(%esi)
if (c == ':')
121ed5: 83 f8 3a cmp $0x3a,%eax
121ed8: 74 45 je 121f1f <scanInt+0x83>
break;
if (sign == 0) {
121eda: 85 db test %ebx,%ebx
121edc: 75 0f jne 121eed <scanInt+0x51>
if (c == '-') {
sign = -1;
limit++;
continue;
}
sign = 1;
121ede: b3 01 mov $0x1,%bl
for (;;) {
c = getc(fp);
if (c == ':')
break;
if (sign == 0) {
if (c == '-') {
121ee0: 83 f8 2d cmp $0x2d,%eax
121ee3: 75 08 jne 121eed <scanInt+0x51>
sign = -1;
limit++;
121ee5: ff 45 e4 incl -0x1c(%ebp)
c = getc(fp);
if (c == ':')
break;
if (sign == 0) {
if (c == '-') {
sign = -1;
121ee8: 83 cb ff or $0xffffffff,%ebx
limit++;
continue;
121eeb: eb c8 jmp 121eb5 <scanInt+0x19>
}
sign = 1;
}
if (!isdigit(c))
121eed: 8b 15 00 91 16 00 mov 0x169100,%edx
121ef3: f6 44 02 01 04 testb $0x4,0x1(%edx,%eax,1)
121ef8: 74 3a je 121f34 <scanInt+0x98>
return 0;
d = c - '0';
121efa: 83 e8 30 sub $0x30,%eax
121efd: 89 45 e0 mov %eax,-0x20(%ebp)
if ((i > (limit / 10))
121f00: b9 0a 00 00 00 mov $0xa,%ecx
121f05: 8b 45 e4 mov -0x1c(%ebp),%eax
121f08: 31 d2 xor %edx,%edx
121f0a: f7 f1 div %ecx
121f0c: 39 c7 cmp %eax,%edi
121f0e: 77 24 ja 121f34 <scanInt+0x98>
|| ((i == (limit / 10)) && (d > (limit % 10))))
121f10: 75 05 jne 121f17 <scanInt+0x7b>
121f12: 39 55 e0 cmp %edx,-0x20(%ebp)
121f15: 77 1d ja 121f34 <scanInt+0x98> <== ALWAYS TAKEN
return 0;
i = i * 10 + d;
121f17: 6b ff 0a imul $0xa,%edi,%edi
121f1a: 03 7d e0 add -0x20(%ebp),%edi
121f1d: eb 96 jmp 121eb5 <scanInt+0x19>
continue;
}
sign = 1;
}
if (!isdigit(c))
return 0;
121f1f: 31 c0 xor %eax,%eax
if ((i > (limit / 10))
|| ((i == (limit / 10)) && (d > (limit % 10))))
return 0;
i = i * 10 + d;
}
if (sign == 0)
121f21: 85 db test %ebx,%ebx
121f23: 74 11 je 121f36 <scanInt+0x9a> <== NEVER TAKEN
return 0;
*val = i * sign;
121f25: 0f af df imul %edi,%ebx
121f28: 8b 45 dc mov -0x24(%ebp),%eax
121f2b: 89 18 mov %ebx,(%eax)
return 1;
121f2d: b8 01 00 00 00 mov $0x1,%eax
121f32: eb 02 jmp 121f36 <scanInt+0x9a>
continue;
}
sign = 1;
}
if (!isdigit(c))
return 0;
121f34: 31 c0 xor %eax,%eax
}
if (sign == 0)
return 0;
*val = i * sign;
return 1;
}
121f36: 8d 65 f4 lea -0xc(%ebp),%esp
121f39: 5b pop %ebx
121f3a: 5e pop %esi
121f3b: 5f pop %edi
121f3c: 5d pop %ebp
121f3d: c3 ret
00121fbe <scangr>:
FILE *fp,
struct group *grp,
char *buffer,
size_t bufsize
)
{
121fbe: 55 push %ebp
121fbf: 89 e5 mov %esp,%ebp
121fc1: 56 push %esi
121fc2: 53 push %ebx
121fc3: 83 ec 28 sub $0x28,%esp
121fc6: 89 c6 mov %eax,%esi
121fc8: 89 d3 mov %edx,%ebx
121fca: 89 4d e4 mov %ecx,-0x1c(%ebp)
int grgid;
char *grmem, *cp;
int memcount;
if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0)
121fcd: 6a 00 push $0x0
121fcf: 8d 45 08 lea 0x8(%ebp),%eax
121fd2: 50 push %eax
121fd3: 8d 4d e4 lea -0x1c(%ebp),%ecx
121fd6: 89 f0 mov %esi,%eax
121fd8: e8 61 ff ff ff call 121f3e <scanString>
121fdd: 83 c4 10 add $0x10,%esp
121fe0: 85 c0 test %eax,%eax
121fe2: 75 07 jne 121feb <scangr+0x2d>
|| !scanString(fp, &grp->gr_passwd, &buffer, &bufsize, 0)
|| !scanInt(fp, &grgid)
|| !scanString(fp, &grmem, &buffer, &bufsize, 1))
return 0;
121fe4: 31 c0 xor %eax,%eax
121fe6: e9 b7 00 00 00 jmp 1220a2 <scangr+0xe4>
int grgid;
char *grmem, *cp;
int memcount;
if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0)
|| !scanString(fp, &grp->gr_passwd, &buffer, &bufsize, 0)
121feb: 50 push %eax
121fec: 50 push %eax
121fed: 8d 53 04 lea 0x4(%ebx),%edx
121ff0: 6a 00 push $0x0
121ff2: 8d 45 08 lea 0x8(%ebp),%eax
121ff5: 50 push %eax
121ff6: 8d 4d e4 lea -0x1c(%ebp),%ecx
121ff9: 89 f0 mov %esi,%eax
121ffb: e8 3e ff ff ff call 121f3e <scanString>
122000: 83 c4 10 add $0x10,%esp
122003: 85 c0 test %eax,%eax
122005: 74 dd je 121fe4 <scangr+0x26> <== NEVER TAKEN
|| !scanInt(fp, &grgid)
122007: 8d 55 f0 lea -0x10(%ebp),%edx
12200a: 89 f0 mov %esi,%eax
12200c: e8 8b fe ff ff call 121e9c <scanInt>
122011: 85 c0 test %eax,%eax
122013: 74 cf je 121fe4 <scangr+0x26> <== NEVER TAKEN
|| !scanString(fp, &grmem, &buffer, &bufsize, 1))
122015: 51 push %ecx
122016: 51 push %ecx
122017: 6a 01 push $0x1
122019: 8d 45 08 lea 0x8(%ebp),%eax
12201c: 50 push %eax
12201d: 8d 4d e4 lea -0x1c(%ebp),%ecx
122020: 8d 55 f4 lea -0xc(%ebp),%edx
122023: 89 f0 mov %esi,%eax
122025: e8 14 ff ff ff call 121f3e <scanString>
12202a: 83 c4 10 add $0x10,%esp
12202d: 85 c0 test %eax,%eax
12202f: 74 b3 je 121fe4 <scangr+0x26> <== NEVER TAKEN
return 0;
grp->gr_gid = grgid;
122031: 8b 45 f0 mov -0x10(%ebp),%eax
122034: 66 89 43 08 mov %ax,0x8(%ebx)
/*
* Determine number of members
*/
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
122038: 8b 75 f4 mov -0xc(%ebp),%esi
12203b: 89 f2 mov %esi,%edx
12203d: b8 01 00 00 00 mov $0x1,%eax
122042: eb 0c jmp 122050 <scangr+0x92>
if(*cp == ',')
memcount++;
122044: 80 f9 2c cmp $0x2c,%cl
122047: 0f 94 c1 sete %cl
12204a: 0f b6 c9 movzbl %cl,%ecx
12204d: 01 c8 add %ecx,%eax
grp->gr_gid = grgid;
/*
* Determine number of members
*/
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
12204f: 42 inc %edx
122050: 8a 0a mov (%edx),%cl
122052: 84 c9 test %cl,%cl
122054: 75 ee jne 122044 <scangr+0x86>
}
/*
* Hack to produce (hopefully) a suitably-aligned array of pointers
*/
if (bufsize < (((memcount+1)*sizeof(char *)) + 15))
122056: 8d 04 85 13 00 00 00 lea 0x13(,%eax,4),%eax
12205d: 39 45 08 cmp %eax,0x8(%ebp)
122060: 72 82 jb 121fe4 <scangr+0x26> <== NEVER TAKEN
return 0;
grp->gr_mem = (char **)(((uintptr_t)buffer + 15) & ~15);
122062: 8b 45 e4 mov -0x1c(%ebp),%eax
122065: 83 c0 0f add $0xf,%eax
122068: 83 e0 f0 and $0xfffffff0,%eax
12206b: 89 43 0c mov %eax,0xc(%ebx)
/*
* Fill in pointer array
*/
grp->gr_mem[0] = grmem;
12206e: 89 30 mov %esi,(%eax)
}
/*
* Extract a single group record from the database
*/
static int scangr(
122070: 8b 45 f4 mov -0xc(%ebp),%eax
122073: 40 inc %eax
/*
* Fill in pointer array
*/
grp->gr_mem[0] = grmem;
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
122074: ba 01 00 00 00 mov $0x1,%edx
122079: eb 11 jmp 12208c <scangr+0xce>
if(*cp == ',') {
12207b: 80 f9 2c cmp $0x2c,%cl
12207e: 75 0b jne 12208b <scangr+0xcd>
*cp = '\0';
122080: c6 40 ff 00 movb $0x0,-0x1(%eax)
grp->gr_mem[memcount++] = cp + 1;
122084: 8b 4b 0c mov 0xc(%ebx),%ecx
122087: 89 04 91 mov %eax,(%ecx,%edx,4)
12208a: 42 inc %edx
12208b: 40 inc %eax
/*
* Fill in pointer array
*/
grp->gr_mem[0] = grmem;
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
12208c: 8a 48 ff mov -0x1(%eax),%cl
12208f: 84 c9 test %cl,%cl
122091: 75 e8 jne 12207b <scangr+0xbd>
if(*cp == ',') {
*cp = '\0';
grp->gr_mem[memcount++] = cp + 1;
}
}
grp->gr_mem[memcount] = NULL;
122093: 8b 43 0c mov 0xc(%ebx),%eax
122096: c7 04 90 00 00 00 00 movl $0x0,(%eax,%edx,4)
return 1;
12209d: b8 01 00 00 00 mov $0x1,%eax
}
1220a2: 8d 65 f8 lea -0x8(%ebp),%esp
1220a5: 5b pop %ebx
1220a6: 5e pop %esi
1220a7: 5d pop %ebp
1220a8: c3 ret
001220a9 <scanpw>:
FILE *fp,
struct passwd *pwd,
char *buffer,
size_t bufsize
)
{
1220a9: 55 push %ebp
1220aa: 89 e5 mov %esp,%ebp
1220ac: 56 push %esi
1220ad: 53 push %ebx
1220ae: 83 ec 28 sub $0x28,%esp
1220b1: 89 c6 mov %eax,%esi
1220b3: 89 d3 mov %edx,%ebx
1220b5: 89 4d e4 mov %ecx,-0x1c(%ebp)
int pwuid, pwgid;
if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0)
1220b8: 6a 00 push $0x0
1220ba: 8d 45 08 lea 0x8(%ebp),%eax
1220bd: 50 push %eax
1220be: 8d 4d e4 lea -0x1c(%ebp),%ecx
1220c1: 89 f0 mov %esi,%eax
1220c3: e8 76 fe ff ff call 121f3e <scanString>
1220c8: 83 c4 10 add $0x10,%esp
1220cb: 85 c0 test %eax,%eax
1220cd: 75 07 jne 1220d6 <scanpw+0x2d>
|| !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;
1220cf: 31 c0 xor %eax,%eax
1220d1: e9 c3 00 00 00 jmp 122199 <scanpw+0xf0>
)
{
int pwuid, pwgid;
if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0)
|| !scanString(fp, &pwd->pw_passwd, &buffer, &bufsize, 0)
1220d6: 50 push %eax
1220d7: 50 push %eax
1220d8: 8d 53 04 lea 0x4(%ebx),%edx
1220db: 6a 00 push $0x0
1220dd: 8d 45 08 lea 0x8(%ebp),%eax
1220e0: 50 push %eax
1220e1: 8d 4d e4 lea -0x1c(%ebp),%ecx
1220e4: 89 f0 mov %esi,%eax
1220e6: e8 53 fe ff ff call 121f3e <scanString>
1220eb: 83 c4 10 add $0x10,%esp
1220ee: 85 c0 test %eax,%eax
1220f0: 74 dd je 1220cf <scanpw+0x26> <== NEVER TAKEN
|| !scanInt(fp, &pwuid)
1220f2: 8d 55 f0 lea -0x10(%ebp),%edx
1220f5: 89 f0 mov %esi,%eax
1220f7: e8 a0 fd ff ff call 121e9c <scanInt>
1220fc: 85 c0 test %eax,%eax
1220fe: 74 cf je 1220cf <scanpw+0x26>
|| !scanInt(fp, &pwgid)
122100: 8d 55 f4 lea -0xc(%ebp),%edx
122103: 89 f0 mov %esi,%eax
122105: e8 92 fd ff ff call 121e9c <scanInt>
12210a: 85 c0 test %eax,%eax
12210c: 74 c1 je 1220cf <scanpw+0x26>
|| !scanString(fp, &pwd->pw_comment, &buffer, &bufsize, 0)
12210e: 50 push %eax
12210f: 50 push %eax
122110: 8d 53 0c lea 0xc(%ebx),%edx
122113: 6a 00 push $0x0
122115: 8d 45 08 lea 0x8(%ebp),%eax
122118: 50 push %eax
122119: 8d 4d e4 lea -0x1c(%ebp),%ecx
12211c: 89 f0 mov %esi,%eax
12211e: e8 1b fe ff ff call 121f3e <scanString>
122123: 83 c4 10 add $0x10,%esp
122126: 85 c0 test %eax,%eax
122128: 74 a5 je 1220cf <scanpw+0x26> <== NEVER TAKEN
|| !scanString(fp, &pwd->pw_gecos, &buffer, &bufsize, 0)
12212a: 50 push %eax
12212b: 50 push %eax
12212c: 8d 53 10 lea 0x10(%ebx),%edx
12212f: 6a 00 push $0x0
122131: 8d 45 08 lea 0x8(%ebp),%eax
122134: 50 push %eax
122135: 8d 4d e4 lea -0x1c(%ebp),%ecx
122138: 89 f0 mov %esi,%eax
12213a: e8 ff fd ff ff call 121f3e <scanString>
12213f: 83 c4 10 add $0x10,%esp
122142: 85 c0 test %eax,%eax
122144: 74 89 je 1220cf <scanpw+0x26> <== NEVER TAKEN
|| !scanString(fp, &pwd->pw_dir, &buffer, &bufsize, 0)
122146: 50 push %eax
122147: 50 push %eax
122148: 8d 53 14 lea 0x14(%ebx),%edx
12214b: 6a 00 push $0x0
12214d: 8d 45 08 lea 0x8(%ebp),%eax
122150: 50 push %eax
122151: 8d 4d e4 lea -0x1c(%ebp),%ecx
122154: 89 f0 mov %esi,%eax
122156: e8 e3 fd ff ff call 121f3e <scanString>
12215b: 83 c4 10 add $0x10,%esp
12215e: 85 c0 test %eax,%eax
122160: 0f 84 69 ff ff ff je 1220cf <scanpw+0x26> <== NEVER TAKEN
|| !scanString(fp, &pwd->pw_shell, &buffer, &bufsize, 1))
122166: 50 push %eax
122167: 50 push %eax
122168: 8d 53 18 lea 0x18(%ebx),%edx
12216b: 6a 01 push $0x1
12216d: 8d 45 08 lea 0x8(%ebp),%eax
122170: 50 push %eax
122171: 8d 4d e4 lea -0x1c(%ebp),%ecx
122174: 89 f0 mov %esi,%eax
122176: e8 c3 fd ff ff call 121f3e <scanString>
12217b: 83 c4 10 add $0x10,%esp
12217e: 85 c0 test %eax,%eax
122180: 0f 84 49 ff ff ff je 1220cf <scanpw+0x26>
return 0;
pwd->pw_uid = pwuid;
122186: 8b 45 f0 mov -0x10(%ebp),%eax
122189: 66 89 43 08 mov %ax,0x8(%ebx)
pwd->pw_gid = pwgid;
12218d: 8b 45 f4 mov -0xc(%ebp),%eax
122190: 66 89 43 0a mov %ax,0xa(%ebx)
return 1;
122194: b8 01 00 00 00 mov $0x1,%eax
}
122199: 8d 65 f8 lea -0x8(%ebp),%esp
12219c: 5b pop %ebx
12219d: 5e pop %esi
12219e: 5d pop %ebp
12219f: c3 ret
0010a400 <sched_get_priority_max>:
#include <rtems/posix/priority.h>
int sched_get_priority_max(
int policy
)
{
10a400: 55 push %ebp
10a401: 89 e5 mov %esp,%ebp
10a403: 83 ec 08 sub $0x8,%esp
10a406: 8b 4d 08 mov 0x8(%ebp),%ecx
switch ( policy ) {
10a409: 83 f9 04 cmp $0x4,%ecx
10a40c: 77 0b ja 10a419 <sched_get_priority_max+0x19>
10a40e: b8 01 00 00 00 mov $0x1,%eax
10a413: d3 e0 shl %cl,%eax
10a415: a8 17 test $0x17,%al
10a417: 75 10 jne 10a429 <sched_get_priority_max+0x29><== ALWAYS TAKEN
case SCHED_RR:
case SCHED_SPORADIC:
break;
default:
rtems_set_errno_and_return_minus_one( EINVAL );
10a419: e8 36 74 00 00 call 111854 <__errno>
10a41e: c7 00 16 00 00 00 movl $0x16,(%eax)
10a424: 83 c8 ff or $0xffffffff,%eax
10a427: eb 08 jmp 10a431 <sched_get_priority_max+0x31>
}
return POSIX_SCHEDULER_MAXIMUM_PRIORITY;
10a429: 0f b6 05 88 b1 12 00 movzbl 0x12b188,%eax
10a430: 48 dec %eax
}
10a431: c9 leave
10a432: c3 ret
0010a434 <sched_get_priority_min>:
#include <rtems/posix/priority.h>
int sched_get_priority_min(
int policy
)
{
10a434: 55 push %ebp
10a435: 89 e5 mov %esp,%ebp
10a437: 83 ec 08 sub $0x8,%esp
10a43a: 8b 4d 08 mov 0x8(%ebp),%ecx
switch ( policy ) {
10a43d: 83 f9 04 cmp $0x4,%ecx
10a440: 77 11 ja 10a453 <sched_get_priority_min+0x1f>
10a442: ba 01 00 00 00 mov $0x1,%edx
10a447: d3 e2 shl %cl,%edx
default:
rtems_set_errno_and_return_minus_one( EINVAL );
}
return POSIX_SCHEDULER_MINIMUM_PRIORITY;
10a449: b8 01 00 00 00 mov $0x1,%eax
int sched_get_priority_min(
int policy
)
{
switch ( policy ) {
10a44e: 80 e2 17 and $0x17,%dl
10a451: 75 0e jne 10a461 <sched_get_priority_min+0x2d><== ALWAYS TAKEN
case SCHED_RR:
case SCHED_SPORADIC:
break;
default:
rtems_set_errno_and_return_minus_one( EINVAL );
10a453: e8 fc 73 00 00 call 111854 <__errno>
10a458: c7 00 16 00 00 00 movl $0x16,(%eax)
10a45e: 83 c8 ff or $0xffffffff,%eax
}
return POSIX_SCHEDULER_MINIMUM_PRIORITY;
}
10a461: c9 leave
10a462: c3 ret
0010a464 <sched_rr_get_interval>:
int sched_rr_get_interval(
pid_t pid,
struct timespec *interval
)
{
10a464: 55 push %ebp
10a465: 89 e5 mov %esp,%ebp
10a467: 56 push %esi
10a468: 53 push %ebx
10a469: 8b 75 08 mov 0x8(%ebp),%esi
10a46c: 8b 5d 0c mov 0xc(%ebp),%ebx
/*
* Only supported for the "calling process" (i.e. this node).
*/
if ( pid && pid != getpid() )
10a46f: 85 f6 test %esi,%esi
10a471: 74 16 je 10a489 <sched_rr_get_interval+0x25><== NEVER TAKEN
10a473: e8 a4 c7 ff ff call 106c1c <getpid>
10a478: 39 c6 cmp %eax,%esi
10a47a: 74 0d je 10a489 <sched_rr_get_interval+0x25>
rtems_set_errno_and_return_minus_one( ESRCH );
10a47c: e8 d3 73 00 00 call 111854 <__errno>
10a481: c7 00 03 00 00 00 movl $0x3,(%eax)
10a487: eb 0f jmp 10a498 <sched_rr_get_interval+0x34>
if ( !interval )
10a489: 85 db test %ebx,%ebx
10a48b: 75 10 jne 10a49d <sched_rr_get_interval+0x39>
rtems_set_errno_and_return_minus_one( EINVAL );
10a48d: e8 c2 73 00 00 call 111854 <__errno>
10a492: c7 00 16 00 00 00 movl $0x16,(%eax)
10a498: 83 c8 ff or $0xffffffff,%eax
10a49b: eb 13 jmp 10a4b0 <sched_rr_get_interval+0x4c>
_Timespec_From_ticks( _Thread_Ticks_per_timeslice, interval );
10a49d: 50 push %eax
10a49e: 50 push %eax
10a49f: 53 push %ebx
10a4a0: ff 35 a8 f3 12 00 pushl 0x12f3a8
10a4a6: e8 2d 2f 00 00 call 10d3d8 <_Timespec_From_ticks>
return 0;
10a4ab: 83 c4 10 add $0x10,%esp
10a4ae: 31 c0 xor %eax,%eax
}
10a4b0: 8d 65 f8 lea -0x8(%ebp),%esp
10a4b3: 5b pop %ebx
10a4b4: 5e pop %esi
10a4b5: 5d pop %ebp
10a4b6: c3 ret
0010a90c <sem_open>:
int oflag,
...
/* mode_t mode, */
/* unsigned int value */
)
{
10a90c: 55 push %ebp
10a90d: 89 e5 mov %esp,%ebp
10a90f: 57 push %edi
10a910: 56 push %esi
10a911: 53 push %ebx
10a912: 83 ec 1c sub $0x1c,%esp
*
* This rountine increments the thread dispatch level
*/
RTEMS_INLINE_ROUTINE uint32_t _Thread_Dispatch_increment_disable_level(void)
{
_Thread_Dispatch_disable_level++;
10a915: a1 b4 31 13 00 mov 0x1331b4,%eax
10a91a: 40 inc %eax
10a91b: a3 b4 31 13 00 mov %eax,0x1331b4
return _Thread_Dispatch_disable_level;
10a920: a1 b4 31 13 00 mov 0x1331b4,%eax
va_list arg;
mode_t mode;
unsigned int value = 0;
10a925: 31 db xor %ebx,%ebx
Objects_Locations location;
size_t name_len;
_Thread_Disable_dispatch();
if ( oflag & O_CREAT ) {
10a927: 8b 75 0c mov 0xc(%ebp),%esi
10a92a: 81 e6 00 02 00 00 and $0x200,%esi
10a930: 74 03 je 10a935 <sem_open+0x29>
va_start(arg, oflag);
mode = va_arg( arg, mode_t );
value = va_arg( arg, unsigned int );
10a932: 8b 5d 14 mov 0x14(%ebp),%ebx
va_end(arg);
}
status = _POSIX_Semaphore_Name_to_id( name, &the_semaphore_id, &name_len );
10a935: 8d 45 e4 lea -0x1c(%ebp),%eax
const char *name,
Objects_Id *id,
size_t *len
)
{
return _POSIX_Name_to_id( &_POSIX_Semaphore_Information, name, id, len );
10a938: 50 push %eax
10a939: 8d 45 d8 lea -0x28(%ebp),%eax
10a93c: 50 push %eax
10a93d: ff 75 08 pushl 0x8(%ebp)
10a940: 68 78 34 13 00 push $0x133478
10a945: e8 16 fa ff ff call 10a360 <_POSIX_Name_to_id>
10a94a: 89 c7 mov %eax,%edi
* and we can just return a pointer to the id. Otherwise we may
* need to check to see if this is a "semaphore does not exist"
* or some other miscellaneous error on the name.
*/
if ( status ) {
10a94c: 83 c4 10 add $0x10,%esp
10a94f: 85 c0 test %eax,%eax
10a951: 74 17 je 10a96a <sem_open+0x5e>
/*
* Unless provided a valid name that did not already exist
* and we are willing to create then it is an error.
*/
if ( !( status == ENOENT && (oflag & O_CREAT) ) ) {
10a953: 83 f8 02 cmp $0x2,%eax
10a956: 75 04 jne 10a95c <sem_open+0x50>
10a958: 85 f6 test %esi,%esi
10a95a: 75 56 jne 10a9b2 <sem_open+0xa6>
_Thread_Enable_dispatch();
10a95c: e8 5b 2d 00 00 call 10d6bc <_Thread_Enable_dispatch>
rtems_set_errno_and_return_minus_one_cast( status, sem_t * );
10a961: e8 32 7f 00 00 call 112898 <__errno>
10a966: 89 38 mov %edi,(%eax)
10a968: eb 72 jmp 10a9dc <sem_open+0xd0>
/*
* Check for existence with creation.
*/
if ( (oflag & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL) ) {
10a96a: 8b 45 0c mov 0xc(%ebp),%eax
10a96d: 25 00 0a 00 00 and $0xa00,%eax
10a972: 3d 00 0a 00 00 cmp $0xa00,%eax
10a977: 75 12 jne 10a98b <sem_open+0x7f>
_Thread_Enable_dispatch();
10a979: e8 3e 2d 00 00 call 10d6bc <_Thread_Enable_dispatch>
rtems_set_errno_and_return_minus_one_cast( EEXIST, sem_t * );
10a97e: e8 15 7f 00 00 call 112898 <__errno>
10a983: c7 00 11 00 00 00 movl $0x11,(%eax)
10a989: eb 51 jmp 10a9dc <sem_open+0xd0>
RTEMS_INLINE_ROUTINE POSIX_Semaphore_Control *_POSIX_Semaphore_Get (
sem_t *id,
Objects_Locations *location
)
{
return (POSIX_Semaphore_Control *)
10a98b: 50 push %eax
}
the_semaphore = _POSIX_Semaphore_Get( (sem_t *) &the_semaphore_id, &location );
10a98c: 8d 45 e0 lea -0x20(%ebp),%eax
10a98f: 50 push %eax
10a990: ff 75 d8 pushl -0x28(%ebp)
10a993: 68 78 34 13 00 push $0x133478
10a998: e8 27 21 00 00 call 10cac4 <_Objects_Get>
10a99d: 89 45 dc mov %eax,-0x24(%ebp)
the_semaphore->open_count += 1;
10a9a0: ff 40 18 incl 0x18(%eax)
_Thread_Enable_dispatch();
10a9a3: e8 14 2d 00 00 call 10d6bc <_Thread_Enable_dispatch>
_Thread_Enable_dispatch();
10a9a8: e8 0f 2d 00 00 call 10d6bc <_Thread_Enable_dispatch>
goto return_id;
10a9ad: 83 c4 10 add $0x10,%esp
10a9b0: eb 22 jmp 10a9d4 <sem_open+0xc8>
/*
* At this point, the semaphore does not exist and everything has been
* checked. We should go ahead and create a semaphore.
*/
status =_POSIX_Semaphore_Create_support(
10a9b2: 83 ec 0c sub $0xc,%esp
10a9b5: 8d 45 dc lea -0x24(%ebp),%eax
10a9b8: 50 push %eax
10a9b9: 53 push %ebx
10a9ba: 6a 00 push $0x0
10a9bc: ff 75 e4 pushl -0x1c(%ebp)
10a9bf: ff 75 08 pushl 0x8(%ebp)
10a9c2: e8 11 57 00 00 call 1100d8 <_POSIX_Semaphore_Create_support>
10a9c7: 89 c3 mov %eax,%ebx
/*
* errno was set by Create_support, so don't set it again.
*/
_Thread_Enable_dispatch();
10a9c9: 83 c4 20 add $0x20,%esp
10a9cc: e8 eb 2c 00 00 call 10d6bc <_Thread_Enable_dispatch>
if ( status == -1 )
10a9d1: 43 inc %ebx
10a9d2: 74 08 je 10a9dc <sem_open+0xd0> <== NEVER TAKEN
return_id:
#if defined(RTEMS_USE_16_BIT_OBJECT)
the_semaphore->Semaphore_id = the_semaphore->Object.id;
return &the_semaphore->Semaphore_id;
#else
return (sem_t *)&the_semaphore->Object.id;
10a9d4: 8b 45 dc mov -0x24(%ebp),%eax
10a9d7: 83 c0 08 add $0x8,%eax
10a9da: eb 03 jmp 10a9df <sem_open+0xd3>
*/
_Thread_Enable_dispatch();
if ( status == -1 )
return SEM_FAILED;
10a9dc: 83 c8 ff or $0xffffffff,%eax
the_semaphore->Semaphore_id = the_semaphore->Object.id;
return &the_semaphore->Semaphore_id;
#else
return (sem_t *)&the_semaphore->Object.id;
#endif
}
10a9df: 8d 65 f4 lea -0xc(%ebp),%esp
10a9e2: 5b pop %ebx
10a9e3: 5e pop %esi
10a9e4: 5f pop %edi
10a9e5: 5d pop %ebp
10a9e6: c3 ret
0010cc08 <sem_timedwait>:
int sem_timedwait(
sem_t *sem,
const struct timespec *abstime
)
{
10cc08: 55 push %ebp
10cc09: 89 e5 mov %esp,%ebp
10cc0b: 53 push %ebx
10cc0c: 83 ec 1c sub $0x1c,%esp
*
* If the status is POSIX_ABSOLUTE_TIMEOUT_INVALID,
* POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST, or POSIX_ABSOLUTE_TIMEOUT_IS_NOW,
* then we should not wait.
*/
status = _POSIX_Absolute_timeout_to_ticks( abstime, &ticks );
10cc0f: 8d 45 f4 lea -0xc(%ebp),%eax
10cc12: 50 push %eax
10cc13: ff 75 0c pushl 0xc(%ebp)
10cc16: e8 49 49 00 00 call 111564 <_POSIX_Absolute_timeout_to_ticks>
if ( status != POSIX_ABSOLUTE_TIMEOUT_IS_IN_FUTURE )
10cc1b: 83 c4 0c add $0xc,%esp
10cc1e: 83 f8 03 cmp $0x3,%eax
10cc21: 0f 94 c3 sete %bl
do_wait = false;
lock_status = _POSIX_Semaphore_Wait_support( sem, do_wait, ticks );
10cc24: ff 75 f4 pushl -0xc(%ebp)
10cc27: 0f b6 c3 movzbl %bl,%eax
10cc2a: 50 push %eax
10cc2b: ff 75 08 pushl 0x8(%ebp)
10cc2e: e8 59 53 00 00 call 111f8c <_POSIX_Semaphore_Wait_support>
* This service only gives us the option to block. We used a polling
* attempt to obtain if the abstime was not in the future. If we did
* not obtain the semaphore, then not look at the status immediately,
* make sure the right reason is returned.
*/
if ( !do_wait && (lock_status == EBUSY) ) {
10cc33: 83 c4 10 add $0x10,%esp
10cc36: 84 db test %bl,%bl
10cc38: 75 00 jne 10cc3a <sem_timedwait+0x32> <== ALWAYS TAKEN
lock_status == POSIX_ABSOLUTE_TIMEOUT_IS_NOW )
rtems_set_errno_and_return_minus_one( ETIMEDOUT );
}
return lock_status;
}
10cc3a: 8b 5d fc mov -0x4(%ebp),%ebx
10cc3d: c9 leave
10cc3e: c3 ret
0010a2a8 <sigaction>:
int sigaction(
int sig,
const struct sigaction *act,
struct sigaction *oact
)
{
10a2a8: 55 push %ebp
10a2a9: 89 e5 mov %esp,%ebp
10a2ab: 57 push %edi
10a2ac: 56 push %esi
10a2ad: 53 push %ebx
10a2ae: 83 ec 1c sub $0x1c,%esp
10a2b1: 8b 5d 08 mov 0x8(%ebp),%ebx
10a2b4: 8b 45 10 mov 0x10(%ebp),%eax
ISR_Level level;
if ( oact )
10a2b7: 85 c0 test %eax,%eax
10a2b9: 74 12 je 10a2cd <sigaction+0x25>
*oact = _POSIX_signals_Vectors[ sig ];
10a2bb: 6b f3 0c imul $0xc,%ebx,%esi
10a2be: 81 c6 68 09 13 00 add $0x130968,%esi
10a2c4: b9 03 00 00 00 mov $0x3,%ecx
10a2c9: 89 c7 mov %eax,%edi
10a2cb: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
if ( !sig )
10a2cd: 85 db test %ebx,%ebx
10a2cf: 75 02 jne 10a2d3 <sigaction+0x2b>
10a2d1: eb 0f jmp 10a2e2 <sigaction+0x3a>
static inline bool is_valid_signo(
int signo
)
{
return ((signo) >= 1 && (signo) <= 32 );
10a2d3: 8d 43 ff lea -0x1(%ebx),%eax
rtems_set_errno_and_return_minus_one( EINVAL );
if ( !is_valid_signo(sig) )
10a2d6: 83 f8 1f cmp $0x1f,%eax
10a2d9: 76 02 jbe 10a2dd <sigaction+0x35>
10a2db: eb 05 jmp 10a2e2 <sigaction+0x3a>
*
* NOTE: Solaris documentation claims to "silently enforce" this which
* contradicts the POSIX specification.
*/
if ( sig == SIGKILL )
10a2dd: 83 fb 09 cmp $0x9,%ebx
10a2e0: 75 10 jne 10a2f2 <sigaction+0x4a>
rtems_set_errno_and_return_minus_one( EINVAL );
10a2e2: e8 b5 78 00 00 call 111b9c <__errno>
10a2e7: c7 00 16 00 00 00 movl $0x16,(%eax)
10a2ed: 83 c8 ff or $0xffffffff,%eax
10a2f0: eb 55 jmp 10a347 <sigaction+0x9f>
/*
* Evaluate the new action structure and set the global signal vector
* appropriately.
*/
if ( act ) {
10a2f2: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
10a2f6: 74 4d je 10a345 <sigaction+0x9d> <== NEVER TAKEN
/*
* Unless the user is installing the default signal actions, then
* we can just copy the provided sigaction structure into the vectors.
*/
_ISR_Disable( level );
10a2f8: 9c pushf
10a2f9: fa cli
10a2fa: 8f 45 e4 popl -0x1c(%ebp)
if ( act->sa_handler == SIG_DFL ) {
10a2fd: 8b 45 0c mov 0xc(%ebp),%eax
10a300: 83 78 08 00 cmpl $0x0,0x8(%eax)
10a304: 75 1a jne 10a320 <sigaction+0x78>
_POSIX_signals_Vectors[ sig ] = _POSIX_signals_Default_vectors[ sig ];
10a306: 6b f3 0c imul $0xc,%ebx,%esi
10a309: 8d 86 68 09 13 00 lea 0x130968(%esi),%eax
10a30f: 81 c6 a8 19 12 00 add $0x1219a8,%esi
10a315: b9 03 00 00 00 mov $0x3,%ecx
10a31a: 89 c7 mov %eax,%edi
10a31c: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
10a31e: eb 21 jmp 10a341 <sigaction+0x99>
} else {
_POSIX_signals_Clear_process_signals( sig );
10a320: 83 ec 0c sub $0xc,%esp
10a323: 53 push %ebx
10a324: e8 6f 4c 00 00 call 10ef98 <_POSIX_signals_Clear_process_signals>
_POSIX_signals_Vectors[ sig ] = *act;
10a329: 6b db 0c imul $0xc,%ebx,%ebx
10a32c: 81 c3 68 09 13 00 add $0x130968,%ebx
10a332: b9 03 00 00 00 mov $0x3,%ecx
10a337: 89 df mov %ebx,%edi
10a339: 8b 75 0c mov 0xc(%ebp),%esi
10a33c: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
10a33e: 83 c4 10 add $0x10,%esp
}
_ISR_Enable( level );
10a341: ff 75 e4 pushl -0x1c(%ebp)
10a344: 9d popf
* now (signals not posted when SIG_IGN).
* + If we are now ignoring a signal that was previously pending,
* we clear the pending signal indicator.
*/
return 0;
10a345: 31 c0 xor %eax,%eax
}
10a347: 8d 65 f4 lea -0xc(%ebp),%esp
10a34a: 5b pop %ebx
10a34b: 5e pop %esi
10a34c: 5f pop %edi
10a34d: 5d pop %ebp
10a34e: c3 ret
0010a702 <sigtimedwait>:
int sigtimedwait(
const sigset_t *set,
siginfo_t *info,
const struct timespec *timeout
)
{
10a702: 55 push %ebp
10a703: 89 e5 mov %esp,%ebp
10a705: 57 push %edi
10a706: 56 push %esi
10a707: 53 push %ebx
10a708: 83 ec 2c sub $0x2c,%esp
10a70b: 8b 5d 10 mov 0x10(%ebp),%ebx
ISR_Level level;
/*
* Error check parameters before disabling interrupts.
*/
if ( !set )
10a70e: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
10a712: 75 02 jne 10a716 <sigtimedwait+0x14>
10a714: eb 28 jmp 10a73e <sigtimedwait+0x3c>
/* NOTE: This is very specifically a RELATIVE not ABSOLUTE time
* in the Open Group specification.
*/
interval = 0;
if ( timeout ) {
10a716: 85 db test %ebx,%ebx
10a718: 74 34 je 10a74e <sigtimedwait+0x4c>
if ( !_Timespec_Is_valid( timeout ) )
10a71a: 83 ec 0c sub $0xc,%esp
10a71d: 53 push %ebx
10a71e: e8 35 30 00 00 call 10d758 <_Timespec_Is_valid>
10a723: 83 c4 10 add $0x10,%esp
10a726: 84 c0 test %al,%al
10a728: 75 02 jne 10a72c <sigtimedwait+0x2a>
10a72a: eb 12 jmp 10a73e <sigtimedwait+0x3c>
rtems_set_errno_and_return_minus_one( EINVAL );
interval = _Timespec_To_ticks( timeout );
10a72c: 83 ec 0c sub $0xc,%esp
10a72f: 53 push %ebx
10a730: e8 47 30 00 00 call 10d77c <_Timespec_To_ticks>
10a735: 89 c1 mov %eax,%ecx
if ( !interval )
10a737: 83 c4 10 add $0x10,%esp
10a73a: 85 c0 test %eax,%eax
10a73c: 75 12 jne 10a750 <sigtimedwait+0x4e> <== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one( EINVAL );
10a73e: e8 1d 7a 00 00 call 112160 <__errno>
10a743: c7 00 16 00 00 00 movl $0x16,(%eax)
10a749: e9 29 01 00 00 jmp 10a877 <sigtimedwait+0x175>
/* NOTE: This is very specifically a RELATIVE not ABSOLUTE time
* in the Open Group specification.
*/
interval = 0;
10a74e: 31 c9 xor %ecx,%ecx
/*
* Initialize local variables.
*/
the_info = ( info ) ? info : &signal_information;
10a750: 8b 5d 0c mov 0xc(%ebp),%ebx
10a753: 85 db test %ebx,%ebx
10a755: 75 03 jne 10a75a <sigtimedwait+0x58>
10a757: 8d 5d dc lea -0x24(%ebp),%ebx
the_thread = _Thread_Executing;
10a75a: 8b 15 2c 09 13 00 mov 0x13092c,%edx
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
10a760: 8b b2 e8 00 00 00 mov 0xe8(%edx),%esi
* What if they are already pending?
*/
/* API signals pending? */
_ISR_Disable( level );
10a766: 9c pushf
10a767: fa cli
10a768: 8f 45 d4 popl -0x2c(%ebp)
if ( *set & api->signals_pending ) {
10a76b: 8b 45 08 mov 0x8(%ebp),%eax
10a76e: 8b 38 mov (%eax),%edi
10a770: 8b 86 d4 00 00 00 mov 0xd4(%esi),%eax
10a776: 85 c7 test %eax,%edi
10a778: 74 2c je 10a7a6 <sigtimedwait+0xa4>
/* XXX real info later */
the_info->si_signo = _POSIX_signals_Get_lowest( api->signals_pending );
10a77a: e8 45 ff ff ff call 10a6c4 <_POSIX_signals_Get_lowest>
10a77f: 89 03 mov %eax,(%ebx)
_POSIX_signals_Clear_signals(
10a781: 83 ec 0c sub $0xc,%esp
10a784: 6a 00 push $0x0
10a786: 6a 00 push $0x0
10a788: 53 push %ebx
10a789: 50 push %eax
10a78a: 56 push %esi
10a78b: e8 f4 4e 00 00 call 10f684 <_POSIX_signals_Clear_signals>
the_info->si_signo,
the_info,
false,
false
);
_ISR_Enable( level );
10a790: ff 75 d4 pushl -0x2c(%ebp)
10a793: 9d popf
the_info->si_code = SI_USER;
10a794: c7 43 04 01 00 00 00 movl $0x1,0x4(%ebx)
the_info->si_value.sival_int = 0;
10a79b: c7 43 08 00 00 00 00 movl $0x0,0x8(%ebx)
return the_info->si_signo;
10a7a2: 8b 3b mov (%ebx),%edi
10a7a4: eb 33 jmp 10a7d9 <sigtimedwait+0xd7>
}
/* Process pending signals? */
if ( *set & _POSIX_signals_Pending ) {
10a7a6: a1 5c 0b 13 00 mov 0x130b5c,%eax
10a7ab: 85 c7 test %eax,%edi
10a7ad: 74 32 je 10a7e1 <sigtimedwait+0xdf>
signo = _POSIX_signals_Get_lowest( _POSIX_signals_Pending );
10a7af: e8 10 ff ff ff call 10a6c4 <_POSIX_signals_Get_lowest>
10a7b4: 89 c7 mov %eax,%edi
_POSIX_signals_Clear_signals( api, signo, the_info, true, false );
10a7b6: 83 ec 0c sub $0xc,%esp
10a7b9: 6a 00 push $0x0
10a7bb: 6a 01 push $0x1
10a7bd: 53 push %ebx
10a7be: 50 push %eax
10a7bf: 56 push %esi
10a7c0: e8 bf 4e 00 00 call 10f684 <_POSIX_signals_Clear_signals>
_ISR_Enable( level );
10a7c5: ff 75 d4 pushl -0x2c(%ebp)
10a7c8: 9d popf
the_info->si_signo = signo;
10a7c9: 89 3b mov %edi,(%ebx)
the_info->si_code = SI_USER;
10a7cb: c7 43 04 01 00 00 00 movl $0x1,0x4(%ebx)
the_info->si_value.sival_int = 0;
10a7d2: c7 43 08 00 00 00 00 movl $0x0,0x8(%ebx)
10a7d9: 83 c4 20 add $0x20,%esp
10a7dc: e9 99 00 00 00 jmp 10a87a <sigtimedwait+0x178>
return signo;
}
the_info->si_signo = -1;
10a7e1: c7 03 ff ff ff ff movl $0xffffffff,(%ebx)
*
* This rountine increments the thread dispatch level
*/
RTEMS_INLINE_ROUTINE uint32_t _Thread_Dispatch_increment_disable_level(void)
{
_Thread_Dispatch_disable_level++;
10a7e7: a1 24 04 13 00 mov 0x130424,%eax
10a7ec: 40 inc %eax
10a7ed: a3 24 04 13 00 mov %eax,0x130424
return _Thread_Dispatch_disable_level;
10a7f2: a1 24 04 13 00 mov 0x130424,%eax
_Thread_Disable_dispatch();
the_thread->Wait.queue = &_POSIX_signals_Wait_queue;
10a7f7: c7 42 44 f4 0a 13 00 movl $0x130af4,0x44(%edx)
the_thread->Wait.return_code = EINTR;
10a7fe: c7 42 34 04 00 00 00 movl $0x4,0x34(%edx)
the_thread->Wait.option = *set;
10a805: 8b 7d 08 mov 0x8(%ebp),%edi
10a808: 8b 07 mov (%edi),%eax
10a80a: 89 42 30 mov %eax,0x30(%edx)
the_thread->Wait.return_argument = the_info;
10a80d: 89 5a 28 mov %ebx,0x28(%edx)
RTEMS_INLINE_ROUTINE void _Thread_queue_Enter_critical_section (
Thread_queue_Control *the_thread_queue
)
{
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
10a810: c7 05 24 0b 13 00 01 movl $0x1,0x130b24
10a817: 00 00 00
_Thread_queue_Enter_critical_section( &_POSIX_signals_Wait_queue );
_ISR_Enable( level );
10a81a: ff 75 d4 pushl -0x2c(%ebp)
10a81d: 9d popf
_Thread_queue_Enqueue( &_POSIX_signals_Wait_queue, interval );
10a81e: 50 push %eax
10a81f: 68 90 d5 10 00 push $0x10d590
10a824: 51 push %ecx
10a825: 68 f4 0a 13 00 push $0x130af4
10a82a: e8 a9 2a 00 00 call 10d2d8 <_Thread_queue_Enqueue_with_handler>
_Thread_Enable_dispatch();
10a82f: e8 44 26 00 00 call 10ce78 <_Thread_Enable_dispatch>
/*
* When the thread is set free by a signal, it is need to eliminate
* the signal.
*/
_POSIX_signals_Clear_signals( api, the_info->si_signo, the_info, false, false );
10a834: c7 04 24 00 00 00 00 movl $0x0,(%esp)
10a83b: 6a 00 push $0x0
10a83d: 53 push %ebx
10a83e: ff 33 pushl (%ebx)
10a840: 56 push %esi
10a841: e8 3e 4e 00 00 call 10f684 <_POSIX_signals_Clear_signals>
/* Set errno only if return code is not EINTR or
* if EINTR was caused by a signal being caught, which
* was not in our set.
*/
if ( (_Thread_Executing->Wait.return_code != EINTR)
10a846: 83 c4 20 add $0x20,%esp
10a849: a1 2c 09 13 00 mov 0x13092c,%eax
10a84e: 83 78 34 04 cmpl $0x4,0x34(%eax)
10a852: 75 13 jne 10a867 <sigtimedwait+0x165>
|| !(*set & signo_to_mask( the_info->si_signo )) ) {
10a854: 8b 3b mov (%ebx),%edi
10a856: 8d 4f ff lea -0x1(%edi),%ecx
10a859: b8 01 00 00 00 mov $0x1,%eax
10a85e: d3 e0 shl %cl,%eax
10a860: 8b 55 08 mov 0x8(%ebp),%edx
10a863: 85 02 test %eax,(%edx)
10a865: 75 13 jne 10a87a <sigtimedwait+0x178>
errno = _Thread_Executing->Wait.return_code;
10a867: e8 f4 78 00 00 call 112160 <__errno>
10a86c: 8b 15 2c 09 13 00 mov 0x13092c,%edx
10a872: 8b 52 34 mov 0x34(%edx),%edx
10a875: 89 10 mov %edx,(%eax)
return -1;
10a877: 83 cf ff or $0xffffffff,%edi
}
return the_info->si_signo;
}
10a87a: 89 f8 mov %edi,%eax
10a87c: 8d 65 f4 lea -0xc(%ebp),%esp
10a87f: 5b pop %ebx
10a880: 5e pop %esi
10a881: 5f pop %edi
10a882: 5d pop %ebp
10a883: c3 ret
0010c244 <sigwait>:
int sigwait(
const sigset_t *set,
int *sig
)
{
10c244: 55 push %ebp
10c245: 89 e5 mov %esp,%ebp
10c247: 53 push %ebx
10c248: 83 ec 08 sub $0x8,%esp
10c24b: 8b 5d 0c mov 0xc(%ebp),%ebx
int status;
status = sigtimedwait( set, NULL, NULL );
10c24e: 6a 00 push $0x0
10c250: 6a 00 push $0x0
10c252: ff 75 08 pushl 0x8(%ebp)
10c255: e8 50 fe ff ff call 10c0aa <sigtimedwait>
if ( status != -1 ) {
10c25a: 83 c4 10 add $0x10,%esp
10c25d: 83 f8 ff cmp $0xffffffff,%eax
10c260: 74 08 je 10c26a <sigwait+0x26>
if ( sig )
10c262: 85 db test %ebx,%ebx
10c264: 74 0d je 10c273 <sigwait+0x2f> <== NEVER TAKEN
*sig = status;
10c266: 89 03 mov %eax,(%ebx)
10c268: eb 09 jmp 10c273 <sigwait+0x2f>
return 0;
}
return errno;
10c26a: e8 1d 76 00 00 call 11388c <__errno>
10c26f: 8b 00 mov (%eax),%eax
10c271: eb 02 jmp 10c275 <sigwait+0x31>
status = sigtimedwait( set, NULL, NULL );
if ( status != -1 ) {
if ( sig )
*sig = status;
return 0;
10c273: 31 c0 xor %eax,%eax
}
return errno;
}
10c275: 8b 5d fc mov -0x4(%ebp),%ebx
10c278: c9 leave
10c279: c3 ret
00108ddd <siproc>:
/*
* Process input character, with semaphore.
*/
static int
siproc (unsigned char c, struct rtems_termios_tty *tty)
{
108ddd: 55 push %ebp
108dde: 89 e5 mov %esp,%ebp
108de0: 56 push %esi
108de1: 53 push %ebx
108de2: 89 d3 mov %edx,%ebx
108de4: 89 c6 mov %eax,%esi
int i;
/*
* Obtain output semaphore if character will be echoed
*/
if (tty->termios.c_lflag & (ECHO|ECHOE|ECHOK|ECHONL|ECHOPRT|ECHOCTL|ECHOKE)) {
108de6: f7 42 3c 78 0e 00 00 testl $0xe78,0x3c(%edx)
108ded: 75 10 jne 108dff <siproc+0x22> <== ALWAYS TAKEN
rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
i = iproc (c, tty);
rtems_semaphore_release (tty->osem);
}
else {
i = iproc (c, tty);
108def: 0f b6 c0 movzbl %al,%eax <== NOT EXECUTED
108df2: 89 da mov %ebx,%edx <== NOT EXECUTED
}
return i;
}
108df4: 8d 65 f8 lea -0x8(%ebp),%esp <== NOT EXECUTED
108df7: 5b pop %ebx <== NOT EXECUTED
108df8: 5e pop %esi <== NOT EXECUTED
108df9: 5d pop %ebp <== NOT EXECUTED
rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
i = iproc (c, tty);
rtems_semaphore_release (tty->osem);
}
else {
i = iproc (c, tty);
108dfa: e9 70 fe ff ff jmp 108c6f <iproc> <== NOT EXECUTED
/*
* Obtain output semaphore if character will be echoed
*/
if (tty->termios.c_lflag & (ECHO|ECHOE|ECHOK|ECHONL|ECHOPRT|ECHOCTL|ECHOKE)) {
rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
108dff: 50 push %eax
108e00: 6a 00 push $0x0
108e02: 6a 00 push $0x0
108e04: ff 72 18 pushl 0x18(%edx)
108e07: e8 84 0f 00 00 call 109d90 <rtems_semaphore_obtain>
i = iproc (c, tty);
108e0c: 89 f2 mov %esi,%edx
108e0e: 0f b6 c2 movzbl %dl,%eax
108e11: 89 da mov %ebx,%edx
108e13: e8 57 fe ff ff call 108c6f <iproc>
108e18: 89 c6 mov %eax,%esi
rtems_semaphore_release (tty->osem);
108e1a: 58 pop %eax
108e1b: ff 73 18 pushl 0x18(%ebx)
108e1e: e8 5d 10 00 00 call 109e80 <rtems_semaphore_release>
108e23: 83 c4 10 add $0x10,%esp
}
else {
i = iproc (c, tty);
}
return i;
}
108e26: 89 f0 mov %esi,%eax
108e28: 8d 65 f8 lea -0x8(%ebp),%esp
108e2b: 5b pop %ebx
108e2c: 5e pop %esi
108e2d: 5d pop %ebp
108e2e: c3 ret
001088c4 <sync_per_thread>:
fdatasync(fn);
}
/* iterate over all FILE *'s for this thread */
static void sync_per_thread(Thread_Control *t)
{
1088c4: 55 push %ebp
1088c5: 89 e5 mov %esp,%ebp
1088c7: 53 push %ebx
1088c8: 51 push %ecx
1088c9: 8b 45 08 mov 0x8(%ebp),%eax
/*
* The sync_wrapper() function will operate on the current thread's
* reent structure so we will temporarily use that.
*/
this_reent = t->libc_reent;
1088cc: 8b 88 e0 00 00 00 mov 0xe0(%eax),%ecx
if ( this_reent ) {
1088d2: 85 c9 test %ecx,%ecx
1088d4: 74 32 je 108908 <sync_per_thread+0x44> <== NEVER TAKEN
current_reent = _Thread_Executing->libc_reent;
1088d6: 8b 15 2c 09 13 00 mov 0x13092c,%edx
1088dc: 8b 9a e0 00 00 00 mov 0xe0(%edx),%ebx
_Thread_Executing->libc_reent = this_reent;
1088e2: 89 8a e0 00 00 00 mov %ecx,0xe0(%edx)
_fwalk (t->libc_reent, sync_wrapper);
1088e8: 52 push %edx
1088e9: 52 push %edx
1088ea: 68 0d 89 10 00 push $0x10890d
1088ef: ff b0 e0 00 00 00 pushl 0xe0(%eax)
1088f5: e8 56 a0 00 00 call 112950 <_fwalk>
_Thread_Executing->libc_reent = current_reent;
1088fa: a1 2c 09 13 00 mov 0x13092c,%eax
1088ff: 89 98 e0 00 00 00 mov %ebx,0xe0(%eax)
108905: 83 c4 10 add $0x10,%esp
}
}
108908: 8b 5d fc mov -0x4(%ebp),%ebx
10890b: c9 leave
10890c: c3 ret
00109808 <sysconf>:
*/
long sysconf(
int name
)
{
109808: 55 push %ebp
109809: 89 e5 mov %esp,%ebp
10980b: 83 ec 08 sub $0x8,%esp
10980e: 8b 55 08 mov 0x8(%ebp),%edx
if ( name == _SC_CLK_TCK )
109811: 83 fa 02 cmp $0x2,%edx
109814: 75 0f jne 109825 <sysconf+0x1d>
return (TOD_MICROSECONDS_PER_SECOND /
109816: b8 40 42 0f 00 mov $0xf4240,%eax
10981b: 31 d2 xor %edx,%edx
10981d: f7 35 4c a1 12 00 divl 0x12a14c
109823: eb 34 jmp 109859 <sysconf+0x51>
rtems_configuration_get_microseconds_per_tick());
if ( name == _SC_OPEN_MAX )
return rtems_libio_number_iops;
109825: a1 94 a2 12 00 mov 0x12a294,%eax
{
if ( name == _SC_CLK_TCK )
return (TOD_MICROSECONDS_PER_SECOND /
rtems_configuration_get_microseconds_per_tick());
if ( name == _SC_OPEN_MAX )
10982a: 83 fa 04 cmp $0x4,%edx
10982d: 74 2a je 109859 <sysconf+0x51>
return rtems_libio_number_iops;
if ( name == _SC_GETPW_R_SIZE_MAX )
return 1024;
10982f: b8 00 04 00 00 mov $0x400,%eax
rtems_configuration_get_microseconds_per_tick());
if ( name == _SC_OPEN_MAX )
return rtems_libio_number_iops;
if ( name == _SC_GETPW_R_SIZE_MAX )
109834: 83 fa 33 cmp $0x33,%edx
109837: 74 20 je 109859 <sysconf+0x51>
return 1024;
if ( name == _SC_PAGESIZE )
return PAGE_SIZE;
109839: 66 b8 00 10 mov $0x1000,%ax
return rtems_libio_number_iops;
if ( name == _SC_GETPW_R_SIZE_MAX )
return 1024;
if ( name == _SC_PAGESIZE )
10983d: 83 fa 08 cmp $0x8,%edx
109840: 74 17 je 109859 <sysconf+0x51>
return PAGE_SIZE;
if ( name == _SC_SYMLOOP_MAX )
return RTEMS_FILESYSTEM_SYMLOOP_MAX;
109842: 66 b8 20 00 mov $0x20,%ax
return 1024;
if ( name == _SC_PAGESIZE )
return PAGE_SIZE;
if ( name == _SC_SYMLOOP_MAX )
109846: 83 fa 4f cmp $0x4f,%edx
109849: 74 0e je 109859 <sysconf+0x51> <== NEVER TAKEN
#if defined(__sparc__)
if ( name == 515 ) /* Solaris _SC_STACK_PROT */
return 0;
#endif
rtems_set_errno_and_return_minus_one( EINVAL );
10984b: e8 5c 79 00 00 call 1111ac <__errno>
109850: c7 00 16 00 00 00 movl $0x16,(%eax)
109856: 83 c8 ff or $0xffffffff,%eax
}
109859: c9 leave
10985a: c3 ret
00113240 <tcsetattr>:
int tcsetattr(
int fd,
int opt,
struct termios *tp
)
{
113240: 55 push %ebp
113241: 89 e5 mov %esp,%ebp
113243: 56 push %esi
113244: 53 push %ebx
113245: 8b 5d 08 mov 0x8(%ebp),%ebx
113248: 8b 45 0c mov 0xc(%ebp),%eax
11324b: 8b 75 10 mov 0x10(%ebp),%esi
switch (opt) {
11324e: 85 c0 test %eax,%eax
113250: 74 22 je 113274 <tcsetattr+0x34>
113252: 48 dec %eax
113253: 74 0d je 113262 <tcsetattr+0x22>
default:
rtems_set_errno_and_return_minus_one( ENOTSUP );
113255: e8 3a 3a 00 00 call 116c94 <__errno>
11325a: c7 00 86 00 00 00 movl $0x86,(%eax)
113260: eb 2a jmp 11328c <tcsetattr+0x4c>
case TCSADRAIN:
if (ioctl( fd, RTEMS_IO_TCDRAIN, NULL ) < 0)
113262: 50 push %eax
113263: 6a 00 push $0x0
113265: 6a 03 push $0x3
113267: 53 push %ebx
113268: e8 37 f9 ff ff call 112ba4 <ioctl>
11326d: 83 c4 10 add $0x10,%esp
113270: 85 c0 test %eax,%eax
113272: 78 18 js 11328c <tcsetattr+0x4c> <== NEVER TAKEN
return -1;
/*
* Fall through to....
*/
case TCSANOW:
return ioctl( fd, RTEMS_IO_SET_ATTRIBUTES, tp );
113274: 89 75 10 mov %esi,0x10(%ebp)
113277: c7 45 0c 02 00 00 00 movl $0x2,0xc(%ebp)
11327e: 89 5d 08 mov %ebx,0x8(%ebp)
}
}
113281: 8d 65 f8 lea -0x8(%ebp),%esp
113284: 5b pop %ebx
113285: 5e pop %esi
113286: 5d pop %ebp
return -1;
/*
* Fall through to....
*/
case TCSANOW:
return ioctl( fd, RTEMS_IO_SET_ATTRIBUTES, tp );
113287: e9 18 f9 ff ff jmp 112ba4 <ioctl>
}
}
11328c: 83 c8 ff or $0xffffffff,%eax
11328f: 8d 65 f8 lea -0x8(%ebp),%esp
113292: 5b pop %ebx
113293: 5e pop %esi
113294: 5d pop %ebp
113295: c3 ret
0010a9e8 <timer_create>:
int timer_create(
clockid_t clock_id,
struct sigevent *evp,
timer_t *timerid
)
{
10a9e8: 55 push %ebp
10a9e9: 89 e5 mov %esp,%ebp
10a9eb: 56 push %esi
10a9ec: 53 push %ebx
10a9ed: 8b 5d 0c mov 0xc(%ebp),%ebx
10a9f0: 8b 75 10 mov 0x10(%ebp),%esi
POSIX_Timer_Control *ptimer;
if ( clock_id != CLOCK_REALTIME )
10a9f3: 83 7d 08 01 cmpl $0x1,0x8(%ebp)
10a9f7: 74 02 je 10a9fb <timer_create+0x13>
10a9f9: eb 23 jmp 10aa1e <timer_create+0x36>
rtems_set_errno_and_return_minus_one( EINVAL );
if ( !timerid )
10a9fb: 85 f6 test %esi,%esi
10a9fd: 75 02 jne 10aa01 <timer_create+0x19>
10a9ff: eb 1d jmp 10aa1e <timer_create+0x36>
/*
* The data of the structure evp are checked in order to verify if they
* are coherent.
*/
if (evp != NULL) {
10aa01: 85 db test %ebx,%ebx
10aa03: 74 26 je 10aa2b <timer_create+0x43>
/* The structure has data */
if ( ( evp->sigev_notify != SIGEV_NONE ) &&
10aa05: 8b 03 mov (%ebx),%eax
10aa07: 48 dec %eax
10aa08: 83 f8 01 cmp $0x1,%eax
10aa0b: 76 02 jbe 10aa0f <timer_create+0x27> <== ALWAYS TAKEN
10aa0d: eb 0f jmp 10aa1e <timer_create+0x36> <== NOT EXECUTED
( evp->sigev_notify != SIGEV_SIGNAL ) ) {
/* The value of the field sigev_notify is not valid */
rtems_set_errno_and_return_minus_one( EINVAL );
}
if ( !evp->sigev_signo )
10aa0f: 8b 43 04 mov 0x4(%ebx),%eax
10aa12: 85 c0 test %eax,%eax
10aa14: 75 02 jne 10aa18 <timer_create+0x30> <== ALWAYS TAKEN
10aa16: eb 06 jmp 10aa1e <timer_create+0x36> <== NOT EXECUTED
static inline bool is_valid_signo(
int signo
)
{
return ((signo) >= 1 && (signo) <= 32 );
10aa18: 48 dec %eax
rtems_set_errno_and_return_minus_one( EINVAL );
if ( !is_valid_signo(evp->sigev_signo) )
10aa19: 83 f8 1f cmp $0x1f,%eax
10aa1c: 76 0d jbe 10aa2b <timer_create+0x43> <== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one( EINVAL );
10aa1e: e8 75 7e 00 00 call 112898 <__errno>
10aa23: c7 00 16 00 00 00 movl $0x16,(%eax)
10aa29: eb 34 jmp 10aa5f <timer_create+0x77>
*
* This rountine increments the thread dispatch level
*/
RTEMS_INLINE_ROUTINE uint32_t _Thread_Dispatch_increment_disable_level(void)
{
_Thread_Dispatch_disable_level++;
10aa2b: a1 b4 31 13 00 mov 0x1331b4,%eax
10aa30: 40 inc %eax
10aa31: a3 b4 31 13 00 mov %eax,0x1331b4
return _Thread_Dispatch_disable_level;
10aa36: a1 b4 31 13 00 mov 0x1331b4,%eax
* the inactive chain of free timer control blocks.
*/
RTEMS_INLINE_ROUTINE POSIX_Timer_Control *_POSIX_Timer_Allocate( void )
{
return (POSIX_Timer_Control *) _Objects_Allocate( &_POSIX_Timer_Information );
10aa3b: 83 ec 0c sub $0xc,%esp
10aa3e: 68 b8 34 13 00 push $0x1334b8
10aa43: e8 70 1c 00 00 call 10c6b8 <_Objects_Allocate>
/*
* Allocate a timer
*/
ptimer = _POSIX_Timer_Allocate();
if ( !ptimer ) {
10aa48: 83 c4 10 add $0x10,%esp
10aa4b: 85 c0 test %eax,%eax
10aa4d: 75 18 jne 10aa67 <timer_create+0x7f>
_Thread_Enable_dispatch();
10aa4f: e8 68 2c 00 00 call 10d6bc <_Thread_Enable_dispatch>
rtems_set_errno_and_return_minus_one( EAGAIN );
10aa54: e8 3f 7e 00 00 call 112898 <__errno>
10aa59: c7 00 0b 00 00 00 movl $0xb,(%eax)
10aa5f: 83 c8 ff or $0xffffffff,%eax
10aa62: e9 83 00 00 00 jmp 10aaea <timer_create+0x102>
}
/* The data of the created timer are stored to use them later */
ptimer->state = POSIX_TIMER_STATE_CREATE_NEW;
10aa67: c6 40 3c 02 movb $0x2,0x3c(%eax)
ptimer->thread_id = _Thread_Executing->Object.id;
10aa6b: 8b 15 fc 36 13 00 mov 0x1336fc,%edx
10aa71: 8b 52 08 mov 0x8(%edx),%edx
10aa74: 89 50 38 mov %edx,0x38(%eax)
if ( evp != NULL ) {
10aa77: 85 db test %ebx,%ebx
10aa79: 74 11 je 10aa8c <timer_create+0xa4>
ptimer->inf.sigev_notify = evp->sigev_notify;
10aa7b: 8b 13 mov (%ebx),%edx
10aa7d: 89 50 40 mov %edx,0x40(%eax)
ptimer->inf.sigev_signo = evp->sigev_signo;
10aa80: 8b 53 04 mov 0x4(%ebx),%edx
10aa83: 89 50 44 mov %edx,0x44(%eax)
ptimer->inf.sigev_value = evp->sigev_value;
10aa86: 8b 53 08 mov 0x8(%ebx),%edx
10aa89: 89 50 48 mov %edx,0x48(%eax)
}
ptimer->overrun = 0;
10aa8c: c7 40 68 00 00 00 00 movl $0x0,0x68(%eax)
ptimer->timer_data.it_value.tv_sec = 0;
10aa93: c7 40 5c 00 00 00 00 movl $0x0,0x5c(%eax)
ptimer->timer_data.it_value.tv_nsec = 0;
10aa9a: c7 40 60 00 00 00 00 movl $0x0,0x60(%eax)
ptimer->timer_data.it_interval.tv_sec = 0;
10aaa1: c7 40 54 00 00 00 00 movl $0x0,0x54(%eax)
ptimer->timer_data.it_interval.tv_nsec = 0;
10aaa8: c7 40 58 00 00 00 00 movl $0x0,0x58(%eax)
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
10aaaf: c7 40 18 00 00 00 00 movl $0x0,0x18(%eax)
the_watchdog->routine = routine;
10aab6: c7 40 2c 00 00 00 00 movl $0x0,0x2c(%eax)
the_watchdog->id = id;
10aabd: c7 40 30 00 00 00 00 movl $0x0,0x30(%eax)
the_watchdog->user_data = user_data;
10aac4: c7 40 34 00 00 00 00 movl $0x0,0x34(%eax)
uint32_t name
)
{
_Objects_Set_local_object(
information,
_Objects_Get_index( the_object->id ),
10aacb: 8b 50 08 mov 0x8(%eax),%edx
Objects_Information *information,
Objects_Control *the_object,
uint32_t name
)
{
_Objects_Set_local_object(
10aace: 0f b7 da movzwl %dx,%ebx
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
10aad1: 8b 0d d4 34 13 00 mov 0x1334d4,%ecx
10aad7: 89 04 99 mov %eax,(%ecx,%ebx,4)
_Objects_Get_index( the_object->id ),
the_object
);
/* ASSERT: information->is_string == false */
the_object->name.name_u32 = name;
10aada: c7 40 0c 00 00 00 00 movl $0x0,0xc(%eax)
_Watchdog_Initialize( &ptimer->Timer, NULL, 0, NULL );
_Objects_Open_u32(&_POSIX_Timer_Information, &ptimer->Object, 0);
*timerid = ptimer->Object.id;
10aae1: 89 16 mov %edx,(%esi)
_Thread_Enable_dispatch();
10aae3: e8 d4 2b 00 00 call 10d6bc <_Thread_Enable_dispatch>
return 0;
10aae8: 31 c0 xor %eax,%eax
}
10aaea: 8d 65 f8 lea -0x8(%ebp),%esp
10aaed: 5b pop %ebx
10aaee: 5e pop %esi
10aaef: 5d pop %ebp
10aaf0: c3 ret
001099d0 <timer_settime>:
timer_t timerid,
int flags,
const struct itimerspec *value,
struct itimerspec *ovalue
)
{
1099d0: 55 push %ebp
1099d1: 89 e5 mov %esp,%ebp
1099d3: 57 push %edi
1099d4: 56 push %esi
1099d5: 53 push %ebx
1099d6: 83 ec 3c sub $0x3c,%esp
1099d9: 8b 5d 0c mov 0xc(%ebp),%ebx
Objects_Locations location;
bool activated;
uint32_t initial_period;
struct itimerspec normalize;
if ( !value )
1099dc: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
1099e0: 75 05 jne 1099e7 <timer_settime+0x17> <== ALWAYS TAKEN
1099e2: e9 ba 01 00 00 jmp 109ba1 <timer_settime+0x1d1> <== NOT EXECUTED
/*
* First, it verifies if the structure "value" is correct
* if the number of nanoseconds is not correct return EINVAL
*/
if ( !_Timespec_Is_valid( &(value->it_value) ) ) {
1099e7: 83 ec 0c sub $0xc,%esp
1099ea: 8b 45 10 mov 0x10(%ebp),%eax
1099ed: 83 c0 08 add $0x8,%eax
1099f0: 50 push %eax
1099f1: e8 06 32 00 00 call 10cbfc <_Timespec_Is_valid>
1099f6: 83 c4 10 add $0x10,%esp
1099f9: 84 c0 test %al,%al
1099fb: 75 05 jne 109a02 <timer_settime+0x32>
1099fd: e9 9f 01 00 00 jmp 109ba1 <timer_settime+0x1d1>
rtems_set_errno_and_return_minus_one( EINVAL );
}
if ( !_Timespec_Is_valid( &(value->it_interval) ) ) {
109a02: 83 ec 0c sub $0xc,%esp
109a05: ff 75 10 pushl 0x10(%ebp)
109a08: e8 ef 31 00 00 call 10cbfc <_Timespec_Is_valid>
109a0d: 83 c4 10 add $0x10,%esp
109a10: 84 c0 test %al,%al
109a12: 75 05 jne 109a19 <timer_settime+0x49> <== ALWAYS TAKEN
109a14: e9 88 01 00 00 jmp 109ba1 <timer_settime+0x1d1> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
}
if ( flags != TIMER_ABSTIME && flags != POSIX_TIMER_RELATIVE ) {
109a19: f7 c3 fb ff ff ff test $0xfffffffb,%ebx
109a1f: 74 05 je 109a26 <timer_settime+0x56>
109a21: e9 7b 01 00 00 jmp 109ba1 <timer_settime+0x1d1>
rtems_set_errno_and_return_minus_one( EINVAL );
}
normalize = *value;
109a26: 8d 7d d8 lea -0x28(%ebp),%edi
109a29: b9 04 00 00 00 mov $0x4,%ecx
109a2e: 8b 75 10 mov 0x10(%ebp),%esi
109a31: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
/* Convert absolute to relative time */
if (flags == TIMER_ABSTIME) {
109a33: 83 fb 04 cmp $0x4,%ebx
109a36: 75 5f jne 109a97 <timer_settime+0xc7>
struct timespec *tod_as_timespec
)
{
Timestamp_Control tod_as_timestamp;
_TOD_Get_as_timestamp( &tod_as_timestamp );
109a38: 83 ec 0c sub $0xc,%esp
109a3b: 8d 45 c8 lea -0x38(%ebp),%eax
109a3e: 50 push %eax
109a3f: e8 18 15 00 00 call 10af5c <_TOD_Get_as_timestamp>
_Timestamp_To_timespec( &tod_as_timestamp, tod_as_timespec );
109a44: 8b 75 c8 mov -0x38(%ebp),%esi
109a47: 8b 7d cc mov -0x34(%ebp),%edi
static inline void _Timestamp64_implementation_To_timespec(
const Timestamp64_Control *_timestamp,
struct timespec *_timespec
)
{
_timespec->tv_sec = (time_t) (*_timestamp / 1000000000L);
109a4a: 6a 00 push $0x0
109a4c: 68 00 ca 9a 3b push $0x3b9aca00
109a51: 57 push %edi
109a52: 56 push %esi
109a53: e8 8c 41 01 00 call 11dbe4 <__divdi3>
109a58: 83 c4 10 add $0x10,%esp
109a5b: 89 45 d0 mov %eax,-0x30(%ebp)
_timespec->tv_nsec = (long) (*_timestamp % 1000000000L);
109a5e: 6a 00 push $0x0
109a60: 68 00 ca 9a 3b push $0x3b9aca00
109a65: 57 push %edi
109a66: 56 push %esi
109a67: e8 cc 42 01 00 call 11dd38 <__moddi3>
109a6c: 89 45 d4 mov %eax,-0x2c(%ebp)
struct timespec now;
_TOD_Get( &now );
/* Check for seconds in the past */
if ( _Timespec_Greater_than( &now, &normalize.it_value ) )
109a6f: 83 c4 18 add $0x18,%esp
109a72: 8d 75 d0 lea -0x30(%ebp),%esi
109a75: 56 push %esi
109a76: 8d 5d e0 lea -0x20(%ebp),%ebx
109a79: 53 push %ebx
109a7a: e8 a1 31 00 00 call 10cc20 <_Timespec_Less_than>
109a7f: 83 c4 10 add $0x10,%esp
109a82: 84 c0 test %al,%al
109a84: 74 05 je 109a8b <timer_settime+0xbb>
109a86: e9 16 01 00 00 jmp 109ba1 <timer_settime+0x1d1>
rtems_set_errno_and_return_minus_one( EINVAL );
_Timespec_Subtract( &now, &normalize.it_value, &normalize.it_value );
109a8b: 52 push %edx
109a8c: 53 push %ebx
109a8d: 53 push %ebx
109a8e: 56 push %esi
109a8f: e8 b0 31 00 00 call 10cc44 <_Timespec_Subtract>
109a94: 83 c4 10 add $0x10,%esp
RTEMS_INLINE_ROUTINE POSIX_Timer_Control *_POSIX_Timer_Get (
timer_t id,
Objects_Locations *location
)
{
return (POSIX_Timer_Control *)
109a97: 50 push %eax
/* If the function reaches this point, then it will be necessary to do
* something with the structure of times of the timer: to stop, start
* or start it again
*/
ptimer = _POSIX_Timer_Get( timerid, &location );
109a98: 8d 45 c4 lea -0x3c(%ebp),%eax
109a9b: 50 push %eax
109a9c: ff 75 08 pushl 0x8(%ebp)
109a9f: 68 b8 e6 12 00 push $0x12e6b8
109aa4: e8 3f 1d 00 00 call 10b7e8 <_Objects_Get>
109aa9: 89 c3 mov %eax,%ebx
switch ( location ) {
109aab: 83 c4 10 add $0x10,%esp
109aae: 83 7d c4 00 cmpl $0x0,-0x3c(%ebp)
109ab2: 0f 85 e9 00 00 00 jne 109ba1 <timer_settime+0x1d1>
case OBJECTS_LOCAL:
/* First, it verifies if the timer must be stopped */
if ( normalize.it_value.tv_sec == 0 && normalize.it_value.tv_nsec == 0 ) {
109ab8: 83 7d e0 00 cmpl $0x0,-0x20(%ebp)
109abc: 75 3c jne 109afa <timer_settime+0x12a>
109abe: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp)
109ac2: 75 36 jne 109afa <timer_settime+0x12a>
/* Stop the timer */
(void) _Watchdog_Remove( &ptimer->Timer );
109ac4: 83 ec 0c sub $0xc,%esp
109ac7: 8d 40 10 lea 0x10(%eax),%eax
109aca: 50 push %eax
109acb: e8 10 35 00 00 call 10cfe0 <_Watchdog_Remove>
/* The old data of the timer are returned */
if ( ovalue )
109ad0: 83 c4 10 add $0x10,%esp
109ad3: 83 7d 14 00 cmpl $0x0,0x14(%ebp)
109ad7: 8d 43 54 lea 0x54(%ebx),%eax
109ada: 74 0c je 109ae8 <timer_settime+0x118>
*ovalue = ptimer->timer_data;
109adc: b9 04 00 00 00 mov $0x4,%ecx
109ae1: 8b 7d 14 mov 0x14(%ebp),%edi
109ae4: 89 c6 mov %eax,%esi
109ae6: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
/* The new data are set */
ptimer->timer_data = normalize;
109ae8: 8d 75 d8 lea -0x28(%ebp),%esi
109aeb: b9 04 00 00 00 mov $0x4,%ecx
109af0: 89 c7 mov %eax,%edi
109af2: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
/* Indicates that the timer is created and stopped */
ptimer->state = POSIX_TIMER_STATE_CREATE_STOP;
109af4: c6 43 3c 04 movb $0x4,0x3c(%ebx)
109af8: eb 35 jmp 109b2f <timer_settime+0x15f>
_Thread_Enable_dispatch();
return 0;
}
/* Convert from seconds and nanoseconds to ticks */
ptimer->ticks = _Timespec_To_ticks( &value->it_interval );
109afa: 83 ec 0c sub $0xc,%esp
109afd: ff 75 10 pushl 0x10(%ebp)
109b00: e8 77 31 00 00 call 10cc7c <_Timespec_To_ticks>
109b05: 89 43 64 mov %eax,0x64(%ebx)
initial_period = _Timespec_To_ticks( &normalize.it_value );
109b08: 8d 45 e0 lea -0x20(%ebp),%eax
109b0b: 89 04 24 mov %eax,(%esp)
109b0e: e8 69 31 00 00 call 10cc7c <_Timespec_To_ticks>
activated = _POSIX_Timer_Insert_helper(
109b13: 89 1c 24 mov %ebx,(%esp)
109b16: 68 b8 9b 10 00 push $0x109bb8
109b1b: ff 73 08 pushl 0x8(%ebx)
109b1e: 50 push %eax
109b1f: 8d 43 10 lea 0x10(%ebx),%eax
109b22: 50 push %eax
109b23: e8 28 52 00 00 call 10ed50 <_POSIX_Timer_Insert_helper>
initial_period,
ptimer->Object.id,
_POSIX_Timer_TSR,
ptimer
);
if ( !activated ) {
109b28: 83 c4 20 add $0x20,%esp
109b2b: 84 c0 test %al,%al
109b2d: 75 07 jne 109b36 <timer_settime+0x166>
_Thread_Enable_dispatch();
109b2f: e8 e8 27 00 00 call 10c31c <_Thread_Enable_dispatch>
109b34: eb 67 jmp 109b9d <timer_settime+0x1cd>
/*
* The timer has been started and is running. So we return the
* old ones in "ovalue"
*/
if ( ovalue )
109b36: 83 7d 14 00 cmpl $0x0,0x14(%ebp)
109b3a: 8d 43 54 lea 0x54(%ebx),%eax
109b3d: 74 0c je 109b4b <timer_settime+0x17b>
*ovalue = ptimer->timer_data;
109b3f: b9 04 00 00 00 mov $0x4,%ecx
109b44: 8b 7d 14 mov 0x14(%ebp),%edi
109b47: 89 c6 mov %eax,%esi
109b49: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
ptimer->timer_data = normalize;
109b4b: 8d 75 d8 lea -0x28(%ebp),%esi
109b4e: b9 04 00 00 00 mov $0x4,%ecx
109b53: 89 c7 mov %eax,%edi
109b55: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
/* Indicate that the time is running */
ptimer->state = POSIX_TIMER_STATE_CREATE_RUN;
109b57: c6 43 3c 03 movb $0x3,0x3c(%ebx)
struct timespec *tod_as_timespec
)
{
Timestamp_Control tod_as_timestamp;
_TOD_Get_as_timestamp( &tod_as_timestamp );
109b5b: 83 ec 0c sub $0xc,%esp
109b5e: 8d 45 c8 lea -0x38(%ebp),%eax
109b61: 50 push %eax
109b62: e8 f5 13 00 00 call 10af5c <_TOD_Get_as_timestamp>
_Timestamp_To_timespec( &tod_as_timestamp, tod_as_timespec );
109b67: 8b 75 c8 mov -0x38(%ebp),%esi
109b6a: 8b 7d cc mov -0x34(%ebp),%edi
static inline void _Timestamp64_implementation_To_timespec(
const Timestamp64_Control *_timestamp,
struct timespec *_timespec
)
{
_timespec->tv_sec = (time_t) (*_timestamp / 1000000000L);
109b6d: 6a 00 push $0x0
109b6f: 68 00 ca 9a 3b push $0x3b9aca00
109b74: 57 push %edi
109b75: 56 push %esi
109b76: e8 69 40 01 00 call 11dbe4 <__divdi3>
109b7b: 83 c4 10 add $0x10,%esp
109b7e: 89 43 6c mov %eax,0x6c(%ebx)
_timespec->tv_nsec = (long) (*_timestamp % 1000000000L);
109b81: 6a 00 push $0x0
109b83: 68 00 ca 9a 3b push $0x3b9aca00
109b88: 57 push %edi
109b89: 56 push %esi
109b8a: e8 a9 41 01 00 call 11dd38 <__moddi3>
109b8f: 83 c4 10 add $0x10,%esp
109b92: 89 43 70 mov %eax,0x70(%ebx)
_TOD_Get( &ptimer->time );
_Thread_Enable_dispatch();
109b95: e8 82 27 00 00 call 10c31c <_Thread_Enable_dispatch>
109b9a: 83 c4 10 add $0x10,%esp
return 0;
109b9d: 31 c0 xor %eax,%eax
109b9f: eb 0e jmp 109baf <timer_settime+0x1df>
#endif
case OBJECTS_ERROR:
break;
}
rtems_set_errno_and_return_minus_one( EINVAL );
109ba1: e8 c6 7a 00 00 call 11166c <__errno>
109ba6: c7 00 16 00 00 00 movl $0x16,(%eax)
109bac: 83 c8 ff or $0xffffffff,%eax
}
109baf: 8d 65 f4 lea -0xc(%ebp),%esp
109bb2: 5b pop %ebx
109bb3: 5e pop %esi
109bb4: 5f pop %edi
109bb5: 5d pop %ebp
109bb6: c3 ret
00109aa8 <ualarm>:
useconds_t ualarm(
useconds_t useconds,
useconds_t interval
)
{
109aa8: 55 push %ebp
109aa9: 89 e5 mov %esp,%ebp
109aab: 56 push %esi
109aac: 53 push %ebx
109aad: 83 ec 10 sub $0x10,%esp
/*
* Initialize the timer used to implement alarm().
*/
if ( !the_timer->routine ) {
109ab0: 83 3d 0c fd 12 00 00 cmpl $0x0,0x12fd0c
109ab7: 75 2c jne 109ae5 <ualarm+0x3d>
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
109ab9: c7 05 f8 fc 12 00 00 movl $0x0,0x12fcf8
109ac0: 00 00 00
the_watchdog->routine = routine;
109ac3: c7 05 0c fd 12 00 70 movl $0x109a70,0x12fd0c
109aca: 9a 10 00
the_watchdog->id = id;
109acd: c7 05 10 fd 12 00 00 movl $0x0,0x12fd10
109ad4: 00 00 00
the_watchdog->user_data = user_data;
109ad7: c7 05 14 fd 12 00 00 movl $0x0,0x12fd14
109ade: 00 00 00
useconds_t ualarm(
useconds_t useconds,
useconds_t interval
)
{
useconds_t remaining = 0;
109ae1: 31 db xor %ebx,%ebx
109ae3: eb 4f jmp 109b34 <ualarm+0x8c>
if ( !the_timer->routine ) {
_Watchdog_Initialize( the_timer, _POSIX_signals_Ualarm_TSR, 0, NULL );
} else {
Watchdog_States state;
state = _Watchdog_Remove( the_timer );
109ae5: 83 ec 0c sub $0xc,%esp
109ae8: 68 f0 fc 12 00 push $0x12fcf0
109aed: e8 12 33 00 00 call 10ce04 <_Watchdog_Remove>
if ( (state == WATCHDOG_ACTIVE) || (state == WATCHDOG_REMOVE_IT) ) {
109af2: 83 e8 02 sub $0x2,%eax
109af5: 83 c4 10 add $0x10,%esp
useconds_t ualarm(
useconds_t useconds,
useconds_t interval
)
{
useconds_t remaining = 0;
109af8: 31 db xor %ebx,%ebx
_Watchdog_Initialize( the_timer, _POSIX_signals_Ualarm_TSR, 0, NULL );
} else {
Watchdog_States state;
state = _Watchdog_Remove( the_timer );
if ( (state == WATCHDOG_ACTIVE) || (state == WATCHDOG_REMOVE_IT) ) {
109afa: 83 f8 01 cmp $0x1,%eax
109afd: 77 35 ja 109b34 <ualarm+0x8c> <== NEVER TAKEN
* boot. Since alarm() is dealing in seconds, we must account for
* this.
*/
ticks = the_timer->initial;
ticks -= (the_timer->stop_time - the_timer->start_time);
109aff: 8b 0d 04 fd 12 00 mov 0x12fd04,%ecx
109b05: 03 0d fc fc 12 00 add 0x12fcfc,%ecx
/* remaining is now in ticks */
_Timespec_From_ticks( ticks, &tp );
109b0b: 50 push %eax
109b0c: 50 push %eax
109b0d: 8d 45 f0 lea -0x10(%ebp),%eax
109b10: 50 push %eax
* boot. Since alarm() is dealing in seconds, we must account for
* this.
*/
ticks = the_timer->initial;
ticks -= (the_timer->stop_time - the_timer->start_time);
109b11: 2b 0d 08 fd 12 00 sub 0x12fd08,%ecx
/* remaining is now in ticks */
_Timespec_From_ticks( ticks, &tp );
109b17: 51 push %ecx
109b18: e8 f3 2e 00 00 call 10ca10 <_Timespec_From_ticks>
remaining = tp.tv_sec * TOD_MICROSECONDS_PER_SECOND;
109b1d: 69 5d f0 40 42 0f 00 imul $0xf4240,-0x10(%ebp),%ebx
remaining += tp.tv_nsec / 1000;
109b24: 8b 45 f4 mov -0xc(%ebp),%eax
109b27: b9 e8 03 00 00 mov $0x3e8,%ecx
109b2c: 99 cltd
109b2d: f7 f9 idiv %ecx
109b2f: 01 c3 add %eax,%ebx
109b31: 83 c4 10 add $0x10,%esp
/*
* If useconds is non-zero, then the caller wants to schedule
* the alarm repeatedly at that interval. If the interval is
* less than a single clock tick, then fudge it to a clock tick.
*/
if ( useconds ) {
109b34: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
109b38: 74 45 je 109b7f <ualarm+0xd7>
Watchdog_Interval ticks;
tp.tv_sec = useconds / TOD_MICROSECONDS_PER_SECOND;
109b3a: b9 40 42 0f 00 mov $0xf4240,%ecx
109b3f: 8b 45 08 mov 0x8(%ebp),%eax
109b42: 31 d2 xor %edx,%edx
109b44: f7 f1 div %ecx
109b46: 89 45 f0 mov %eax,-0x10(%ebp)
tp.tv_nsec = (useconds % TOD_MICROSECONDS_PER_SECOND) * 1000;
109b49: 69 d2 e8 03 00 00 imul $0x3e8,%edx,%edx
109b4f: 89 55 f4 mov %edx,-0xc(%ebp)
ticks = _Timespec_To_ticks( &tp );
109b52: 83 ec 0c sub $0xc,%esp
109b55: 8d 75 f0 lea -0x10(%ebp),%esi
109b58: 56 push %esi
109b59: e8 da 2e 00 00 call 10ca38 <_Timespec_To_ticks>
if ( ticks == 0 )
ticks = 1;
_Watchdog_Insert_ticks( the_timer, _Timespec_To_ticks( &tp ) );
109b5e: 89 34 24 mov %esi,(%esp)
109b61: e8 d2 2e 00 00 call 10ca38 <_Timespec_To_ticks>
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
109b66: a3 fc fc 12 00 mov %eax,0x12fcfc
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
109b6b: 59 pop %ecx
109b6c: 5e pop %esi
109b6d: 68 f0 fc 12 00 push $0x12fcf0
109b72: 68 d8 f4 12 00 push $0x12f4d8
109b77: e8 74 31 00 00 call 10ccf0 <_Watchdog_Insert>
109b7c: 83 c4 10 add $0x10,%esp
}
return remaining;
}
109b7f: 89 d8 mov %ebx,%eax
109b81: 8d 65 f8 lea -0x8(%ebp),%esp
109b84: 5b pop %ebx
109b85: 5e pop %esi
109b86: 5d pop %ebp
109b87: c3 ret
0010981c <unmount>:
return mt_entry == root->mt_entry || mt_entry == current->mt_entry;
}
int unmount( const char *path )
{
10981c: 55 push %ebp
10981d: 89 e5 mov %esp,%ebp
10981f: 56 push %esi
109820: 53 push %ebx
109821: 83 ec 44 sub $0x44,%esp
int rv = 0;
rtems_filesystem_eval_path_context_t ctx;
int eval_flags = RTEMS_FS_FOLLOW_LINK;
const rtems_filesystem_location_info_t *currentloc =
109824: 6a 18 push $0x18
109826: ff 75 08 pushl 0x8(%ebp)
rtems_filesystem_eval_path_start( &ctx, path, eval_flags );
109829: 8d 45 c0 lea -0x40(%ebp),%eax
int unmount( const char *path )
{
int rv = 0;
rtems_filesystem_eval_path_context_t ctx;
int eval_flags = RTEMS_FS_FOLLOW_LINK;
const rtems_filesystem_location_info_t *currentloc =
10982c: 50 push %eax
10982d: e8 a3 e2 ff ff call 107ad5 <rtems_filesystem_eval_path_start>
rtems_filesystem_eval_path_start( &ctx, path, eval_flags );
rtems_filesystem_mount_table_entry_t *mt_entry = currentloc->mt_entry;
109832: 8b 58 14 mov 0x14(%eax),%ebx
const rtems_filesystem_location_info_t *loc
)
{
const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry;
return (*mt_entry->ops->are_nodes_equal_h)(
109835: 5a pop %edx
109836: 59 pop %ecx
109837: 8b 53 0c mov 0xc(%ebx),%edx
10983a: ff 73 24 pushl 0x24(%ebx)
10983d: 50 push %eax
10983e: ff 52 10 call *0x10(%edx)
if ( rtems_filesystem_location_is_root( currentloc ) ) {
109841: 83 c4 10 add $0x10,%esp
109844: 84 c0 test %al,%al
109846: 74 5b je 1098a3 <unmount+0x87>
static bool contains_root_or_current_directory(
const rtems_filesystem_mount_table_entry_t *mt_entry
)
{
const rtems_filesystem_location_info_t *root =
&rtems_filesystem_root->location;
109848: a1 14 c1 12 00 mov 0x12c114,%eax
const rtems_filesystem_location_info_t *current =
&rtems_filesystem_current->location;
10984d: 8b 10 mov (%eax),%edx
return mt_entry == root->mt_entry || mt_entry == current->mt_entry;
10984f: 8b 40 04 mov 0x4(%eax),%eax
109852: 3b 58 14 cmp 0x14(%eax),%ebx
109855: 74 0a je 109861 <unmount+0x45>
109857: 31 c0 xor %eax,%eax
109859: 3b 5a 14 cmp 0x14(%edx),%ebx
10985c: 0f 94 c0 sete %al
10985f: eb 05 jmp 109866 <unmount+0x4a>
109861: b8 01 00 00 00 mov $0x1,%eax
const rtems_filesystem_location_info_t *currentloc =
rtems_filesystem_eval_path_start( &ctx, path, eval_flags );
rtems_filesystem_mount_table_entry_t *mt_entry = currentloc->mt_entry;
if ( rtems_filesystem_location_is_root( currentloc ) ) {
if ( !contains_root_or_current_directory( mt_entry ) ) {
109866: 85 c0 test %eax,%eax
109868: 75 2c jne 109896 <unmount+0x7a>
const rtems_filesystem_operations_table *mt_point_ops =
mt_entry->mt_point_node->location.mt_entry->ops;
rv = (*mt_point_ops->unmount_h)( mt_entry );
10986a: 83 ec 0c sub $0xc,%esp
rtems_filesystem_mount_table_entry_t *mt_entry = currentloc->mt_entry;
if ( rtems_filesystem_location_is_root( currentloc ) ) {
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;
10986d: 8b 43 20 mov 0x20(%ebx),%eax
109870: 8b 40 14 mov 0x14(%eax),%eax
rv = (*mt_point_ops->unmount_h)( mt_entry );
109873: 8b 40 0c mov 0xc(%eax),%eax
109876: 53 push %ebx
109877: ff 50 38 call *0x38(%eax)
10987a: 89 c6 mov %eax,%esi
if ( rv == 0 ) {
10987c: 83 c4 10 add $0x10,%esp
10987f: 85 c0 test %eax,%eax
109881: 75 2e jne 1098b1 <unmount+0x95>
rtems_id self_task_id = rtems_task_self();
109883: e8 80 0c 00 00 call 10a508 <rtems_task_self>
rtems_filesystem_mt_entry_declare_lock_context( lock_context );
rtems_filesystem_mt_entry_lock( lock_context );
109888: 9c pushf
109889: fa cli
10988a: 5a pop %edx
mt_entry->unmount_task = self_task_id;
10988b: 89 43 3c mov %eax,0x3c(%ebx)
mt_entry->mounted = false;
10988e: c6 43 28 00 movb $0x0,0x28(%ebx)
rtems_filesystem_mt_entry_unlock( lock_context );
109892: 52 push %edx
109893: 9d popf
109894: eb 1b jmp 1098b1 <unmount+0x95>
}
} else {
errno = EBUSY;
109896: e8 c9 79 00 00 call 111264 <__errno>
10989b: c7 00 10 00 00 00 movl $0x10,(%eax)
1098a1: eb 0b jmp 1098ae <unmount+0x92>
rv = -1;
}
} else {
errno = EACCES;
1098a3: e8 bc 79 00 00 call 111264 <__errno>
1098a8: c7 00 0d 00 00 00 movl $0xd,(%eax)
rv = -1;
1098ae: 83 ce ff or $0xffffffff,%esi
}
rtems_filesystem_eval_path_cleanup( &ctx );
1098b1: 83 ec 0c sub $0xc,%esp
1098b4: 8d 45 c0 lea -0x40(%ebp),%eax
1098b7: 50 push %eax
1098b8: e8 d4 e2 ff ff call 107b91 <rtems_filesystem_eval_path_cleanup>
if ( rv == 0 ) {
1098bd: 83 c4 10 add $0x10,%esp
1098c0: 85 f6 test %esi,%esi
1098c2: 75 23 jne 1098e7 <unmount+0xcb>
rtems_event_set out;
rtems_status_code sc = rtems_event_receive(
1098c4: 8d 45 bc lea -0x44(%ebp),%eax
1098c7: 50 push %eax
1098c8: 6a 00 push $0x0
1098ca: 6a 00 push $0x0
1098cc: 6a 02 push $0x2
1098ce: e8 4d 03 00 00 call 109c20 <rtems_event_receive>
RTEMS_EVENT_ALL | RTEMS_WAIT,
RTEMS_NO_TIMEOUT,
&out
);
if ( sc != RTEMS_SUCCESSFUL ) {
1098d3: 83 c4 10 add $0x10,%esp
1098d6: 85 c0 test %eax,%eax
1098d8: 74 0d je 1098e7 <unmount+0xcb> <== ALWAYS TAKEN
rtems_fatal_error_occurred( 0xdeadbeef );
1098da: 83 ec 0c sub $0xc,%esp <== NOT EXECUTED
1098dd: 68 ef be ad de push $0xdeadbeef <== NOT EXECUTED
1098e2: e8 59 0e 00 00 call 10a740 <rtems_fatal_error_occurred><== NOT EXECUTED
}
}
return rv;
}
1098e7: 89 f0 mov %esi,%eax
1098e9: 8d 65 f8 lea -0x8(%ebp),%esp
1098ec: 5b pop %ebx
1098ed: 5e pop %esi
1098ee: 5d pop %ebp
1098ef: c3 ret
0011d920 <write>:
ssize_t write(
int fd,
const void *buffer,
size_t count
)
{
11d920: 55 push %ebp
11d921: 89 e5 mov %esp,%ebp
11d923: 53 push %ebx
11d924: 53 push %ebx
11d925: 8b 45 08 mov 0x8(%ebp),%eax
11d928: 8b 55 0c mov 0xc(%ebp),%edx
11d92b: 8b 4d 10 mov 0x10(%ebp),%ecx
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
11d92e: 3b 05 70 a2 12 00 cmp 0x12a270,%eax
11d934: 72 02 jb 11d938 <write+0x18>
11d936: eb 2d jmp 11d965 <write+0x45>
iop = rtems_libio_iop( fd );
11d938: 6b c0 30 imul $0x30,%eax,%eax
11d93b: 03 05 d0 e2 12 00 add 0x12e2d0,%eax
rtems_libio_check_is_open( iop );
11d941: 8b 58 0c mov 0xc(%eax),%ebx
11d944: f6 c7 01 test $0x1,%bh
11d947: 75 02 jne 11d94b <write+0x2b>
11d949: eb 1a jmp 11d965 <write+0x45>
rtems_libio_check_buffer( buffer );
11d94b: 85 d2 test %edx,%edx
11d94d: 75 0d jne 11d95c <write+0x3c> <== ALWAYS TAKEN
11d94f: e8 88 35 ff ff call 110edc <__errno> <== NOT EXECUTED
11d954: c7 00 16 00 00 00 movl $0x16,(%eax) <== NOT EXECUTED
11d95a: eb 14 jmp 11d970 <write+0x50> <== NOT EXECUTED
rtems_libio_check_count( count );
11d95c: 85 c9 test %ecx,%ecx
11d95e: 74 29 je 11d989 <write+0x69>
rtems_libio_check_permissions_with_error( iop, LIBIO_FLAGS_WRITE, EBADF );
11d960: 80 e3 04 and $0x4,%bl
11d963: 75 10 jne 11d975 <write+0x55>
11d965: e8 72 35 ff ff call 110edc <__errno>
11d96a: c7 00 09 00 00 00 movl $0x9,(%eax)
11d970: 83 c8 ff or $0xffffffff,%eax
11d973: eb 16 jmp 11d98b <write+0x6b>
/*
* Now process the write() request.
*/
return (*iop->pathinfo.handlers->write_h)( iop, buffer, count );
11d975: 8b 58 20 mov 0x20(%eax),%ebx
11d978: 89 4d 10 mov %ecx,0x10(%ebp)
11d97b: 89 55 0c mov %edx,0xc(%ebp)
11d97e: 89 45 08 mov %eax,0x8(%ebp)
11d981: 8b 43 0c mov 0xc(%ebx),%eax
}
11d984: 59 pop %ecx
11d985: 5b pop %ebx
11d986: 5d pop %ebp
rtems_libio_check_permissions_with_error( iop, LIBIO_FLAGS_WRITE, EBADF );
/*
* Now process the write() request.
*/
return (*iop->pathinfo.handlers->write_h)( iop, buffer, count );
11d987: ff e0 jmp *%eax
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open( iop );
rtems_libio_check_buffer( buffer );
rtems_libio_check_count( count );
11d989: 31 c0 xor %eax,%eax
/*
* Now process the write() request.
*/
return (*iop->pathinfo.handlers->write_h)( iop, buffer, count );
}
11d98b: 5a pop %edx
11d98c: 5b pop %ebx
11d98d: 5d pop %ebp
11d98e: c3 ret
0010a278 <writev>:
ssize_t writev(
int fd,
const struct iovec *iov,
int iovcnt
)
{
10a278: 55 push %ebp
10a279: 89 e5 mov %esp,%ebp
10a27b: 57 push %edi
10a27c: 56 push %esi
10a27d: 53 push %ebx
10a27e: 83 ec 1c sub $0x1c,%esp
10a281: 8b 75 08 mov 0x8(%ebp),%esi
10a284: 8b 5d 0c mov 0xc(%ebp),%ebx
10a287: 8b 45 10 mov 0x10(%ebp),%eax
int bytes;
rtems_libio_t *iop;
ssize_t old;
bool all_zeros;
rtems_libio_check_fd( fd );
10a28a: 3b 35 70 a2 12 00 cmp 0x12a270,%esi
10a290: 72 02 jb 10a294 <writev+0x1c>
10a292: eb 18 jmp 10a2ac <writev+0x34>
iop = rtems_libio_iop( fd );
10a294: 6b f6 30 imul $0x30,%esi,%esi
10a297: 03 35 d0 e2 12 00 add 0x12e2d0,%esi
rtems_libio_check_is_open( iop );
10a29d: 8b 56 0c mov 0xc(%esi),%edx
10a2a0: f6 c6 01 test $0x1,%dh
10a2a3: 75 02 jne 10a2a7 <writev+0x2f>
10a2a5: eb 05 jmp 10a2ac <writev+0x34>
rtems_libio_check_permissions_with_error( iop, LIBIO_FLAGS_WRITE, EBADF );
10a2a7: 80 e2 04 and $0x4,%dl
10a2aa: 75 10 jne 10a2bc <writev+0x44> <== ALWAYS TAKEN
10a2ac: e8 23 75 00 00 call 1117d4 <__errno>
10a2b1: c7 00 09 00 00 00 movl $0x9,(%eax)
10a2b7: e9 95 00 00 00 jmp 10a351 <writev+0xd9>
/*
* Argument validation on IO vector
*/
if ( !iov )
10a2bc: 85 db test %ebx,%ebx
10a2be: 75 02 jne 10a2c2 <writev+0x4a>
10a2c0: eb 3f jmp 10a301 <writev+0x89>
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iovcnt <= 0 )
10a2c2: 85 c0 test %eax,%eax
10a2c4: 7f 02 jg 10a2c8 <writev+0x50>
10a2c6: eb 39 jmp 10a301 <writev+0x89>
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iovcnt > IOV_MAX )
10a2c8: 3d 00 04 00 00 cmp $0x400,%eax
10a2cd: 7e 02 jle 10a2d1 <writev+0x59> <== ALWAYS TAKEN
10a2cf: eb 30 jmp 10a301 <writev+0x89> <== NOT EXECUTED
#include <sys/uio.h>
#include <rtems/libio_.h>
#include <rtems/seterr.h>
ssize_t writev(
10a2d1: 8d 04 c3 lea (%ebx,%eax,8),%eax
10a2d4: 89 45 e4 mov %eax,-0x1c(%ebp)
10a2d7: 89 d8 mov %ebx,%eax
10a2d9: bf 01 00 00 00 mov $0x1,%edi
10a2de: 31 c9 xor %ecx,%ecx
10a2e0: eb 02 jmp 10a2e4 <writev+0x6c>
if ( iov[v].iov_len )
all_zeros = false;
/* check for wrap */
old = total;
total += iov[v].iov_len;
10a2e2: 89 d1 mov %edx,%ecx
/*
* iov[v].iov_len cannot be less than 0 because size_t is unsigned.
* So we only check for zero.
*/
if ( iov[v].iov_base == 0 )
10a2e4: 83 38 00 cmpl $0x0,(%eax)
10a2e7: 75 02 jne 10a2eb <writev+0x73>
10a2e9: eb 16 jmp 10a301 <writev+0x89>
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iov[v].iov_len )
all_zeros = false;
10a2eb: 83 78 04 00 cmpl $0x0,0x4(%eax)
10a2ef: 0f 94 c2 sete %dl
10a2f2: f7 da neg %edx
10a2f4: 21 d7 and %edx,%edi
/* check for wrap */
old = total;
total += iov[v].iov_len;
if ( total < old || total > SSIZE_MAX )
10a2f6: 8b 50 04 mov 0x4(%eax),%edx
10a2f9: 01 ca add %ecx,%edx
10a2fb: 78 04 js 10a301 <writev+0x89>
10a2fd: 39 ca cmp %ecx,%edx
10a2ff: 7d 0d jge 10a30e <writev+0x96>
rtems_set_errno_and_return_minus_one( EINVAL );
10a301: e8 ce 74 00 00 call 1117d4 <__errno>
10a306: c7 00 16 00 00 00 movl $0x16,(%eax)
10a30c: eb 43 jmp 10a351 <writev+0xd9>
10a30e: 83 c0 08 add $0x8,%eax
* this loop does that check as well and sets "all-zero" appropriately.
* The variable "all_zero" is used as an early exit point before
* entering the write loop.
*/
all_zeros = true;
for ( old=0, total=0, v=0 ; v < iovcnt ; v++ ) {
10a311: 3b 45 e4 cmp -0x1c(%ebp),%eax
10a314: 75 cc jne 10a2e2 <writev+0x6a>
/*
* A writev with all zeros is supposed to have no effect per OpenGroup.
*/
if ( all_zeros == true ) {
return 0;
10a316: 31 d2 xor %edx,%edx
}
/*
* A writev with all zeros is supposed to have no effect per OpenGroup.
*/
if ( all_zeros == true ) {
10a318: 89 f8 mov %edi,%eax
10a31a: 84 c0 test %al,%al
10a31c: 75 36 jne 10a354 <writev+0xdc>
/*
* Now process the writev().
*/
for ( total=0, v=0 ; v < iovcnt ; v++ ) {
/* all zero lengths has no effect */
if ( iov[v].iov_len == 0 )
10a31e: 8b 43 04 mov 0x4(%ebx),%eax
10a321: 85 c0 test %eax,%eax
10a323: 74 22 je 10a347 <writev+0xcf> <== NEVER TAKEN
continue;
bytes = (*iop->pathinfo.handlers->write_h)(
10a325: 51 push %ecx
10a326: 8b 4e 20 mov 0x20(%esi),%ecx
10a329: 50 push %eax
10a32a: ff 33 pushl (%ebx)
10a32c: 56 push %esi
10a32d: 89 55 e0 mov %edx,-0x20(%ebp)
10a330: ff 51 0c call *0xc(%ecx)
iop,
iov[v].iov_base,
iov[v].iov_len
);
if ( bytes < 0 )
10a333: 83 c4 10 add $0x10,%esp
10a336: 83 f8 00 cmp $0x0,%eax
10a339: 8b 55 e0 mov -0x20(%ebp),%edx
10a33c: 7c 13 jl 10a351 <writev+0xd9> <== NEVER TAKEN
return -1;
if ( bytes > 0 ) {
10a33e: 74 02 je 10a342 <writev+0xca> <== NEVER TAKEN
total += bytes;
10a340: 01 c2 add %eax,%edx
}
if (bytes != iov[ v ].iov_len)
10a342: 3b 43 04 cmp 0x4(%ebx),%eax
10a345: 75 0d jne 10a354 <writev+0xdc> <== NEVER TAKEN
10a347: 83 c3 08 add $0x8,%ebx
}
/*
* Now process the writev().
*/
for ( total=0, v=0 ; v < iovcnt ; v++ ) {
10a34a: 3b 5d e4 cmp -0x1c(%ebp),%ebx
10a34d: 75 cf jne 10a31e <writev+0xa6>
10a34f: eb 03 jmp 10a354 <writev+0xdc>
iov[v].iov_base,
iov[v].iov_len
);
if ( bytes < 0 )
return -1;
10a351: 83 ca ff or $0xffffffff,%edx
if (bytes != iov[ v ].iov_len)
break;
}
return total;
}
10a354: 89 d0 mov %edx,%eax
10a356: 8d 65 f4 lea -0xc(%ebp),%esp
10a359: 5b pop %ebx
10a35a: 5e pop %esi
10a35b: 5f pop %edi
10a35c: 5d pop %ebp
10a35d: c3 ret