RTEMS 4.11Annotated Report
Sat Jul 17 01:27:52 2010
0004a194 <IMFS_Set_handlers>:
{
IMFS_jnode_t *node = loc->node_access;
IMFS_fs_info_t *fs_info;
fs_info = loc->mt_entry->fs_info;
switch( node->type ) {
4a194: 7007 moveq #7,%d0
#define MAXSYMLINK 5
int IMFS_Set_handlers(
rtems_filesystem_location_info_t *loc
)
{
4a196: 4e56 0000 linkw %fp,#0
4a19a: 206e 0008 moveal %fp@(8),%a0
4a19e: 2f0a movel %a2,%sp@-
IMFS_jnode_t *node = loc->node_access;
IMFS_fs_info_t *fs_info;
fs_info = loc->mt_entry->fs_info;
4a1a0: 2468 0010 moveal %a0@(16),%a2
switch( node->type ) {
4a1a4: 2250 moveal %a0@,%a1
)
{
IMFS_jnode_t *node = loc->node_access;
IMFS_fs_info_t *fs_info;
fs_info = loc->mt_entry->fs_info;
4a1a6: 246a 0034 moveal %a2@(52),%a2
switch( node->type ) {
4a1aa: b0a9 0048 cmpl %a1@(72),%d0
4a1ae: 6526 bcss 4a1d6 <IMFS_Set_handlers+0x42> <== NEVER TAKEN
4a1b0: 2029 0048 movel %a1@(72),%d0
4a1b4: d080 addl %d0,%d0
4a1b6: 303b 0808 movew %pc@(4a1c0 <IMFS_Set_handlers+0x2c>,%d0:l),%d0
4a1ba: 48c0 extl %d0
4a1bc: 4efb 0802 jmp %pc@(4a1c0 <IMFS_Set_handlers+0x2c>,%d0:l)
4a1c0: 0016 026 <== NOT EXECUTED
4a1c2: 0010 020 <== NOT EXECUTED
4a1c4: 004c 0114 <== NOT EXECUTED
4a1c6: 002c 054 <== NOT EXECUTED
4a1c8: 002c 054 <== NOT EXECUTED
4a1ca: 001e 036 <== NOT EXECUTED
4a1cc: 001e 036 <== NOT EXECUTED
4a1ce: 003e 076 <== NOT EXECUTED
case IMFS_DIRECTORY:
loc->handlers = fs_info->directory_handlers;
4a1d0: 216a 000c 0008 movel %a2@(12),%a0@(8)
loc->handlers = fs_info->fifo_handlers;
break;
}
return 0;
}
4a1d6: 245f moveal %sp@+,%a2
4a1d8: 4280 clrl %d0
4a1da: 4e5e unlk %fp
4a1dc: 4e75 rts
4a1de: 4280 clrl %d0
break;
case IMFS_LINEAR_FILE:
loc->handlers = fs_info->memfile_handlers;
break;
case IMFS_MEMORY_FILE:
loc->handlers = fs_info->memfile_handlers;
4a1e0: 216a 0008 0008 movel %a2@(8),%a0@(8)
loc->handlers = fs_info->fifo_handlers;
break;
}
return 0;
}
4a1e6: 245f moveal %sp@+,%a2
4a1e8: 4e5e unlk %fp
4a1ea: 4e75 rts
4a1ec: 245f moveal %sp@+,%a2
case IMFS_DEVICE:
loc->handlers = &IMFS_device_handlers;
break;
case IMFS_SYM_LINK:
case IMFS_HARD_LINK:
loc->handlers = &IMFS_link_handlers;
4a1ee: 203c 0005 c1b6 movel #377270,%d0
loc->handlers = fs_info->fifo_handlers;
break;
}
return 0;
}
4a1f4: 4e5e unlk %fp
case IMFS_DEVICE:
loc->handlers = &IMFS_device_handlers;
break;
case IMFS_SYM_LINK:
case IMFS_HARD_LINK:
loc->handlers = &IMFS_link_handlers;
4a1f6: 2140 0008 movel %d0,%a0@(8)
loc->handlers = fs_info->fifo_handlers;
break;
}
return 0;
}
4a1fa: 4280 clrl %d0
4a1fc: 4e75 rts
4a1fe: 4280 clrl %d0
break;
case IMFS_MEMORY_FILE:
loc->handlers = fs_info->memfile_handlers;
break;
case IMFS_FIFO:
loc->handlers = fs_info->fifo_handlers;
4a200: 216a 0010 0008 movel %a2@(16),%a0@(8)
break;
}
return 0;
}
4a206: 245f moveal %sp@+,%a2
4a208: 4e5e unlk %fp
4a20a: 4e75 rts
4a20c: 245f moveal %sp@+,%a2
switch( node->type ) {
case IMFS_DIRECTORY:
loc->handlers = fs_info->directory_handlers;
break;
case IMFS_DEVICE:
loc->handlers = &IMFS_device_handlers;
4a20e: 203c 0005 c146 movel #377158,%d0
loc->handlers = fs_info->fifo_handlers;
break;
}
return 0;
}
4a214: 4e5e unlk %fp
switch( node->type ) {
case IMFS_DIRECTORY:
loc->handlers = fs_info->directory_handlers;
break;
case IMFS_DEVICE:
loc->handlers = &IMFS_device_handlers;
4a216: 2140 0008 movel %d0,%a0@(8)
loc->handlers = fs_info->fifo_handlers;
break;
}
return 0;
}
4a21a: 4280 clrl %d0 <== NOT EXECUTED
0004abec <IMFS_check_node_remove>:
void IMFS_check_node_remove( IMFS_jnode_t *jnode )
{
4abec: 4e56 0000 linkw %fp,#0
4abf0: 2f0a movel %a2,%sp@-
4abf2: 246e 0008 moveal %fp@(8),%a2
if ( !rtems_libio_is_file_open( jnode ) && jnode->st_nlink < 1 ) {
4abf6: 2f0a movel %a2,%sp@-
4abf8: 4eb9 0004 b25a jsr 4b25a <rtems_libio_is_file_open>
4abfe: 588f addql #4,%sp
4ac00: 4a80 tstl %d0
4ac02: 6634 bnes 4ac38 <IMFS_check_node_remove+0x4c>
4ac04: 4a6a 0032 tstw %a2@(50)
4ac08: 662e bnes 4ac38 <IMFS_check_node_remove+0x4c>
if ( rtems_filesystem_current.node_access == jnode )
4ac0a: 2079 0005 cd60 moveal 5cd60 <rtems_current_user_env>,%a0
4ac10: b5e8 0004 cmpal %a0@(4),%a2
4ac14: 6744 beqs 4ac5a <IMFS_check_node_remove+0x6e>
rtems_filesystem_current.node_access = NULL;
switch ( jnode->type ) {
4ac16: 202a 0048 movel %a2@(72),%d0
4ac1a: 7204 moveq #4,%d1
4ac1c: b280 cmpl %d0,%d1
4ac1e: 6748 beqs 4ac68 <IMFS_check_node_remove+0x7c>
4ac20: 123c 0005 moveb #5,%d1
4ac24: b280 cmpl %d0,%d1
4ac26: 6718 beqs 4ac40 <IMFS_check_node_remove+0x54>
break;
default:
break;
}
free( jnode );
4ac28: 2d4a 0008 movel %a2,%fp@(8)
}
}
4ac2c: 246e fffc moveal %fp@(-4),%a2
4ac30: 4e5e unlk %fp
break;
default:
break;
}
free( jnode );
4ac32: 4ef9 0004 2db8 jmp 42db8 <free>
}
}
4ac38: 246e fffc moveal %fp@(-4),%a2
4ac3c: 4e5e unlk %fp
4ac3e: 4e75 rts
if ( rtems_filesystem_current.node_access == jnode )
rtems_filesystem_current.node_access = NULL;
switch ( jnode->type ) {
case IMFS_MEMORY_FILE:
IMFS_memfile_remove( jnode );
4ac40: 2f0a movel %a2,%sp@-
4ac42: 4eb9 0004 c8e0 jsr 4c8e0 <IMFS_memfile_remove>
break;
4ac48: 588f addql #4,%sp
break;
default:
break;
}
free( jnode );
4ac4a: 2d4a 0008 movel %a2,%fp@(8)
}
}
4ac4e: 246e fffc moveal %fp@(-4),%a2
4ac52: 4e5e unlk %fp
break;
default:
break;
}
free( jnode );
4ac54: 4ef9 0004 2db8 jmp 42db8 <free>
{
if ( !rtems_libio_is_file_open( jnode ) && jnode->st_nlink < 1 ) {
if ( rtems_filesystem_current.node_access == jnode )
rtems_filesystem_current.node_access = NULL;
switch ( jnode->type ) {
4ac5a: 202a 0048 movel %a2@(72),%d0
4ac5e: 7204 moveq #4,%d1
void IMFS_check_node_remove( IMFS_jnode_t *jnode )
{
if ( !rtems_libio_is_file_open( jnode ) && jnode->st_nlink < 1 ) {
if ( rtems_filesystem_current.node_access == jnode )
rtems_filesystem_current.node_access = NULL;
4ac60: 42a8 0004 clrl %a0@(4)
switch ( jnode->type ) {
4ac64: b280 cmpl %d0,%d1
4ac66: 66b8 bnes 4ac20 <IMFS_check_node_remove+0x34> <== ALWAYS TAKEN
case IMFS_MEMORY_FILE:
IMFS_memfile_remove( jnode );
break;
case IMFS_SYM_LINK:
free( jnode->info.sym_link.name );
4ac68: 2f2a 004c movel %a2@(76),%sp@-
4ac6c: 4eb9 0004 2db8 jsr 42db8 <free>
break;
4ac72: 588f addql #4,%sp
default:
break;
}
free( jnode );
4ac74: 2d4a 0008 movel %a2,%fp@(8)
}
}
4ac78: 246e fffc moveal %fp@(-4),%a2
4ac7c: 4e5e unlk %fp
break;
default:
break;
}
free( jnode );
4ac7e: 4ef9 0004 2db8 jmp 42db8 <free>
00049fa4 <IMFS_create_node>:
IMFS_jnode_types_t type,
const char *name,
mode_t mode,
const IMFS_types_union *info
)
{
49fa4: 4e56 ffec linkw %fp,#-20
49fa8: 206e 0008 moveal %fp@(8),%a0
49fac: 48d7 3c04 moveml %d2/%a2-%a5,%sp@
49fb0: 242e 000c movel %fp@(12),%d2
49fb4: 286e 0018 moveal %fp@(24),%a4
IMFS_fs_info_t *fs_info;
/*
* MUST have a parent node to call this routine.
*/
if ( parent_loc == NULL )
49fb8: 4a88 tstl %a0
49fba: 6776 beqs 4a032 <IMFS_create_node+0x8e> <== NEVER TAKEN
return NULL;
parent = parent_loc->node_access;
fs_info = parent_loc->mt_entry->fs_info;
49fbc: 2268 0010 moveal %a0@(16),%a1
/*
* Reject creation of FIFOs if support is disabled.
*/
if ( type == IMFS_FIFO &&
49fc0: 7007 moveq #7,%d0
* MUST have a parent node to call this routine.
*/
if ( parent_loc == NULL )
return NULL;
parent = parent_loc->node_access;
49fc2: 2650 moveal %a0@,%a3
fs_info = parent_loc->mt_entry->fs_info;
49fc4: 2469 0034 moveal %a1@(52),%a2
/*
* Reject creation of FIFOs if support is disabled.
*/
if ( type == IMFS_FIFO &&
49fc8: b082 cmpl %d2,%d0
49fca: 675a beqs 4a026 <IMFS_create_node+0x82>
return NULL;
/*
* Allocate filesystem node and fill in basic information
*/
node = IMFS_allocate_node( type, name, mode & ~rtems_filesystem_umask );
49fcc: 2079 0005 cd60 moveal 5cd60 <rtems_current_user_env>,%a0
49fd2: 2028 002c movel %a0@(44),%d0
49fd6: 4680 notl %d0
49fd8: c0ae 0014 andl %fp@(20),%d0
49fdc: 2f00 movel %d0,%sp@-
49fde: 2f2e 0010 movel %fp@(16),%sp@-
49fe2: 2f02 movel %d2,%sp@-
49fe4: 4eb9 0004 9f30 jsr 49f30 <IMFS_allocate_node>
if ( !node )
49fea: 4fef 000c lea %sp@(12),%sp
return NULL;
/*
* Allocate filesystem node and fill in basic information
*/
node = IMFS_allocate_node( type, name, mode & ~rtems_filesystem_umask );
49fee: 2a40 moveal %d0,%a5
if ( !node )
49ff0: 4a80 tstl %d0
49ff2: 6726 beqs 4a01a <IMFS_create_node+0x76>
return NULL;
/*
* Set the type specific information
*/
switch (type) {
49ff4: 7007 moveq #7,%d0
49ff6: b082 cmpl %d2,%d0
49ff8: 6446 bccs 4a040 <IMFS_create_node+0x9c> <== ALWAYS TAKEN
/*
* This node MUST have a parent, so put it in that directory list.
*/
node->Parent = parent;
node->st_ino = ++fs_info->ino_count;
49ffa: 202a 0004 movel %a2@(4),%d0 <== NOT EXECUTED
49ffe: 5280 addql #1,%d0 <== NOT EXECUTED
/*
* This node MUST have a parent, so put it in that directory list.
*/
node->Parent = parent;
4a000: 2b4b 0008 movel %a3,%a5@(8) <== NOT EXECUTED
node->st_ino = ++fs_info->ino_count;
4a004: 2540 0004 movel %d0,%a2@(4) <== NOT EXECUTED
4a008: 2b40 0034 movel %d0,%a5@(52) <== NOT EXECUTED
4a00c: 2f0d movel %a5,%sp@- <== NOT EXECUTED
4a00e: 486b 004c pea %a3@(76) <== NOT EXECUTED
4a012: 4eb9 0004 703c jsr 4703c <_Chain_Append> <== NOT EXECUTED
rtems_chain_append( &parent->info.directory.Entries, &node->Node );
return node;
4a018: 508f addql #8,%sp <== NOT EXECUTED
}
4a01a: 200d movel %a5,%d0
4a01c: 4cee 3c04 ffec moveml %fp@(-20),%d2/%a2-%a5
4a022: 4e5e unlk %fp
4a024: 4e75 rts
fs_info = parent_loc->mt_entry->fs_info;
/*
* Reject creation of FIFOs if support is disabled.
*/
if ( type == IMFS_FIFO &&
4a026: 223c 0005 c0d6 movel #377046,%d1
4a02c: b2aa 0010 cmpl %a2@(16),%d1
4a030: 669a bnes 49fcc <IMFS_create_node+0x28>
fs_info->fifo_handlers == &rtems_filesystem_handlers_default )
return NULL;
4a032: 9bcd subal %a5,%a5
node->st_ino = ++fs_info->ino_count;
rtems_chain_append( &parent->info.directory.Entries, &node->Node );
return node;
}
4a034: 200d movel %a5,%d0
4a036: 4cee 3c04 ffec moveml %fp@(-20),%d2/%a2-%a5
4a03c: 4e5e unlk %fp
4a03e: 4e75 rts
return NULL;
/*
* Set the type specific information
*/
switch (type) {
4a040: 303b 2a08 movew %pc@(4a04a <IMFS_create_node+0xa6>,%d2:l:2),%d0
4a044: 48c0 extl %d0
4a046: 4efb 0802 jmp %pc@(4a04a <IMFS_create_node+0xa6>,%d0:l)
4a04a: ffb0 0177660 <== NOT EXECUTED
4a04c: 00d8 0330 <== NOT EXECUTED
4a04e: 00aa 0010 0010 oril #1048592,%d2 <== NOT EXECUTED
4a054: 0046 0106 <== NOT EXECUTED
4a056: 0036 066 <== NOT EXECUTED
4a058: 0082 2b54 004c oril #726925388,%d2 <== NOT EXECUTED
/*
* This node MUST have a parent, so put it in that directory list.
*/
node->Parent = parent;
node->st_ino = ++fs_info->ino_count;
4a05e: 202a 0004 movel %a2@(4),%d0
4a062: 5280 addql #1,%d0
/*
* This node MUST have a parent, so put it in that directory list.
*/
node->Parent = parent;
4a064: 2b4b 0008 movel %a3,%a5@(8)
node->st_ino = ++fs_info->ino_count;
4a068: 2540 0004 movel %d0,%a2@(4)
4a06c: 2b40 0034 movel %d0,%a5@(52)
4a070: 2f0d movel %a5,%sp@-
4a072: 486b 004c pea %a3@(76)
4a076: 4eb9 0004 703c jsr 4703c <_Chain_Append>
rtems_chain_append( &parent->info.directory.Entries, &node->Node );
return node;
4a07c: 508f addql #8,%sp
4a07e: 609a bras 4a01a <IMFS_create_node+0x76>
node->info.device.minor = info->device.minor;
break;
case IMFS_LINEAR_FILE:
node->info.linearfile.size = 0;
node->info.linearfile.direct = 0;
4a080: 42ad 0054 clrl %a5@(84)
node->info.device.major = info->device.major;
node->info.device.minor = info->device.minor;
break;
case IMFS_LINEAR_FILE:
node->info.linearfile.size = 0;
4a084: 4280 clrl %d0
4a086: 4281 clrl %d1
4a088: 2b40 004c movel %d0,%a5@(76)
4a08c: 2b41 0050 movel %d1,%a5@(80)
node->info.linearfile.direct = 0;
case IMFS_MEMORY_FILE:
node->info.file.size = 0;
node->info.file.indirect = 0;
4a090: 42ad 0054 clrl %a5@(84)
case IMFS_LINEAR_FILE:
node->info.linearfile.size = 0;
node->info.linearfile.direct = 0;
case IMFS_MEMORY_FILE:
node->info.file.size = 0;
4a094: 4280 clrl %d0
4a096: 4281 clrl %d1
node->info.file.indirect = 0;
node->info.file.doubly_indirect = 0;
4a098: 42ad 0058 clrl %a5@(88)
case IMFS_LINEAR_FILE:
node->info.linearfile.size = 0;
node->info.linearfile.direct = 0;
case IMFS_MEMORY_FILE:
node->info.file.size = 0;
4a09c: 2b40 004c movel %d0,%a5@(76)
4a0a0: 2b41 0050 movel %d1,%a5@(80)
/*
* This node MUST have a parent, so put it in that directory list.
*/
node->Parent = parent;
node->st_ino = ++fs_info->ino_count;
4a0a4: 202a 0004 movel %a2@(4),%d0
4a0a8: 5280 addql #1,%d0
case IMFS_MEMORY_FILE:
node->info.file.size = 0;
node->info.file.indirect = 0;
node->info.file.doubly_indirect = 0;
node->info.file.triply_indirect = 0;
4a0aa: 42ad 005c clrl %a5@(92)
/*
* This node MUST have a parent, so put it in that directory list.
*/
node->Parent = parent;
4a0ae: 2b4b 0008 movel %a3,%a5@(8)
node->st_ino = ++fs_info->ino_count;
4a0b2: 2540 0004 movel %d0,%a2@(4)
4a0b6: 2b40 0034 movel %d0,%a5@(52)
4a0ba: 2f0d movel %a5,%sp@-
4a0bc: 486b 004c pea %a3@(76)
4a0c0: 4eb9 0004 703c jsr 4703c <_Chain_Append>
rtems_chain_append( &parent->info.directory.Entries, &node->Node );
return node;
4a0c6: 508f addql #8,%sp
4a0c8: 6000 ff50 braw 4a01a <IMFS_create_node+0x76>
/*
* This node MUST have a parent, so put it in that directory list.
*/
node->Parent = parent;
node->st_ino = ++fs_info->ino_count;
4a0cc: 202a 0004 movel %a2@(4),%d0
4a0d0: 5280 addql #1,%d0
node->info.file.doubly_indirect = 0;
node->info.file.triply_indirect = 0;
break;
case IMFS_FIFO:
node->info.fifo.pipe = NULL;
4a0d2: 42ad 004c clrl %a5@(76)
/*
* This node MUST have a parent, so put it in that directory list.
*/
node->Parent = parent;
4a0d6: 2b4b 0008 movel %a3,%a5@(8)
node->st_ino = ++fs_info->ino_count;
4a0da: 2540 0004 movel %d0,%a2@(4)
4a0de: 2b40 0034 movel %d0,%a5@(52)
4a0e2: 2f0d movel %a5,%sp@-
4a0e4: 486b 004c pea %a3@(76)
4a0e8: 4eb9 0004 703c jsr 4703c <_Chain_Append>
rtems_chain_append( &parent->info.directory.Entries, &node->Node );
return node;
4a0ee: 508f addql #8,%sp
4a0f0: 6000 ff28 braw 4a01a <IMFS_create_node+0x76>
case IMFS_SYM_LINK:
node->info.sym_link.name = info->sym_link.name;
break;
case IMFS_DEVICE:
node->info.device.major = info->device.major;
4a0f4: 2b54 004c movel %a4@,%a5@(76)
node->info.device.minor = info->device.minor;
4a0f8: 2b6c 0004 0050 movel %a4@(4),%a5@(80)
/*
* This node MUST have a parent, so put it in that directory list.
*/
node->Parent = parent;
node->st_ino = ++fs_info->ino_count;
4a0fe: 202a 0004 movel %a2@(4),%d0
4a102: 5280 addql #1,%d0
/*
* This node MUST have a parent, so put it in that directory list.
*/
node->Parent = parent;
4a104: 2b4b 0008 movel %a3,%a5@(8)
node->st_ino = ++fs_info->ino_count;
4a108: 2540 0004 movel %d0,%a2@(4)
4a10c: 2b40 0034 movel %d0,%a5@(52)
4a110: 2f0d movel %a5,%sp@-
4a112: 486b 004c pea %a3@(76)
4a116: 4eb9 0004 703c jsr 4703c <_Chain_Append>
rtems_chain_append( &parent->info.directory.Entries, &node->Node );
return node;
4a11c: 508f addql #8,%sp
4a11e: 6000 fefa braw 4a01a <IMFS_create_node+0x76>
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
4a122: 41ed 0050 lea %a5@(80),%a0
4a126: 2b48 004c movel %a0,%a5@(76)
/*
* Set the type specific information
*/
switch (type) {
case IMFS_DIRECTORY:
rtems_chain_initialize_empty(&node->info.directory.Entries);
4a12a: 41ed 004c lea %a5@(76),%a0
/*
* This node MUST have a parent, so put it in that directory list.
*/
node->Parent = parent;
node->st_ino = ++fs_info->ino_count;
4a12e: 202a 0004 movel %a2@(4),%d0
4a132: 5280 addql #1,%d0
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
4a134: 42ad 0050 clrl %a5@(80)
/*
* Set the type specific information
*/
switch (type) {
case IMFS_DIRECTORY:
rtems_chain_initialize_empty(&node->info.directory.Entries);
4a138: 2b48 0054 movel %a0,%a5@(84)
/*
* This node MUST have a parent, so put it in that directory list.
*/
node->Parent = parent;
4a13c: 2b4b 0008 movel %a3,%a5@(8)
node->st_ino = ++fs_info->ino_count;
4a140: 2540 0004 movel %d0,%a2@(4)
4a144: 2b40 0034 movel %d0,%a5@(52)
4a148: 2f0d movel %a5,%sp@-
4a14a: 486b 004c pea %a3@(76)
4a14e: 4eb9 0004 703c jsr 4703c <_Chain_Append>
rtems_chain_append( &parent->info.directory.Entries, &node->Node );
return node;
4a154: 508f addql #8,%sp
4a156: 6000 fec2 braw 4a01a <IMFS_create_node+0x76>
0004a15a <IMFS_create_root_node>:
return node;
}
IMFS_jnode_t *IMFS_create_root_node(void)
{
4a15a: 4e56 0000 linkw %fp,#0
IMFS_jnode_t *node;
/*
* Allocate filesystem node and fill in basic information
*/
node = IMFS_allocate_node( IMFS_DIRECTORY, "", (S_IFDIR | 0755) );
4a15e: 4878 41ed pea 41ed <D_MAX_EXP+0x39ee>
4a162: 4879 0005 bf34 pea 5bf34 <rtems_filesystem_default_pathconf+0x40>
4a168: 4878 0001 pea 1 <ADD>
4a16c: 4eb9 0004 9f30 jsr 49f30 <IMFS_allocate_node>
if ( !node )
4a172: 4fef 000c lea %sp@(12),%sp
4a176: 4a80 tstl %d0
4a178: 6716 beqs 4a190 <IMFS_create_root_node+0x36> <== NEVER TAKEN
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
4a17a: 2240 moveal %d0,%a1
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
4a17c: 2040 moveal %d0,%a0
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
4a17e: 43e9 0050 lea %a1@(80),%a1
4a182: 2149 004c movel %a1,%a0@(76)
/*
* Set the type specific information
*
* NOTE: Root node is always a directory.
*/
rtems_chain_initialize_empty(&node->info.directory.Entries);
4a186: 5989 subql #4,%a1
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
4a188: 42a8 0050 clrl %a0@(80)
4a18c: 2149 0054 movel %a1,%a0@(84)
return node;
}
4a190: 4e5e unlk %fp <== NOT EXECUTED
00044290 <IMFS_dump_directory>:
void IMFS_dump_directory(
IMFS_jnode_t *the_directory,
int level
)
{
44290: 4e56 ffe0 linkw %fp,#-32
44294: 206e 0008 moveal %fp@(8),%a0
44298: 48d7 3c3c moveml %d2-%d5/%a2-%a5,%sp@
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
4429c: 2808 movel %a0,%d4
4429e: 0684 0000 0050 addil #80,%d4
442a4: 262e 000c movel %fp@(12),%d3
assert( the_directory->type == IMFS_DIRECTORY );
#endif
the_chain = &the_directory->info.directory.Entries;
for ( the_node = the_chain->first;
442a8: 2668 004c moveal %a0@(76),%a3
442ac: b88b cmpl %a3,%d4
442ae: 6754 beqs 44304 <IMFS_dump_directory+0x74> <== NEVER TAKEN
for ( i=0 ; i<=level ; i++ )
fprintf(stdout, "...." );
IMFS_print_jnode( the_jnode );
if ( the_jnode->type == IMFS_DIRECTORY )
IMFS_dump_directory( the_jnode, level + 1 );
442b0: 2a03 movel %d3,%d5
442b2: 49f9 0004 4104 lea 44104 <IMFS_print_jnode>,%a4
442b8: 45f9 0005 21e8 lea 521e8 <fwrite>,%a2
442be: 5285 addql #1,%d5
442c0: 4bf9 0004 4290 lea 44290 <IMFS_dump_directory>,%a5
!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++ )
442c6: 4a83 tstl %d3
442c8: 6d26 blts 442f0 <IMFS_dump_directory+0x60> <== NEVER TAKEN
442ca: 4282 clrl %d2
fprintf(stdout, "...." );
442cc: 2079 0006 2030 moveal 62030 <_impure_ptr>,%a0
!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++ )
442d2: 5282 addql #1,%d2
fprintf(stdout, "...." );
442d4: 2f28 0008 movel %a0@(8),%sp@-
442d8: 4878 0004 pea 4 <CONTEXT_ARG>
442dc: 4878 0001 pea 1 <ADD>
442e0: 4879 0006 0a75 pea 60a75 <IntUartPollCallbacks.6194+0x83>
442e6: 4e92 jsr %a2@
!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++ )
442e8: 4fef 0010 lea %sp@(16),%sp
442ec: b483 cmpl %d3,%d2
442ee: 6fdc bles 442cc <IMFS_dump_directory+0x3c>
fprintf(stdout, "...." );
IMFS_print_jnode( the_jnode );
442f0: 2f0b movel %a3,%sp@-
442f2: 4e94 jsr %a4@
if ( the_jnode->type == IMFS_DIRECTORY )
442f4: 588f addql #4,%sp
442f6: 7001 moveq #1,%d0
442f8: b0ab 0048 cmpl %a3@(72),%d0
442fc: 6710 beqs 4430e <IMFS_dump_directory+0x7e>
the_chain = &the_directory->info.directory.Entries;
for ( the_node = the_chain->first;
!rtems_chain_is_tail( the_chain, the_node );
the_node = the_node->next ) {
442fe: 2653 moveal %a3@,%a3
assert( the_directory->type == IMFS_DIRECTORY );
#endif
the_chain = &the_directory->info.directory.Entries;
for ( the_node = the_chain->first;
44300: b88b cmpl %a3,%d4
44302: 66c2 bnes 442c6 <IMFS_dump_directory+0x36>
fprintf(stdout, "...." );
IMFS_print_jnode( the_jnode );
if ( the_jnode->type == IMFS_DIRECTORY )
IMFS_dump_directory( the_jnode, level + 1 );
}
}
44304: 4cee 3c3c ffe0 moveml %fp@(-32),%d2-%d5/%a2-%a5
4430a: 4e5e unlk %fp
4430c: 4e75 rts
for ( i=0 ; i<=level ; i++ )
fprintf(stdout, "...." );
IMFS_print_jnode( the_jnode );
if ( the_jnode->type == IMFS_DIRECTORY )
IMFS_dump_directory( the_jnode, level + 1 );
4430e: 2f05 movel %d5,%sp@-
44310: 2f0b movel %a3,%sp@-
44312: 4e95 jsr %a5@
the_chain = &the_directory->info.directory.Entries;
for ( the_node = the_chain->first;
!rtems_chain_is_tail( the_chain, the_node );
the_node = the_node->next ) {
44314: 2653 moveal %a3@,%a3
for ( i=0 ; i<=level ; i++ )
fprintf(stdout, "...." );
IMFS_print_jnode( the_jnode );
if ( the_jnode->type == IMFS_DIRECTORY )
IMFS_dump_directory( the_jnode, level + 1 );
44316: 508f addql #8,%sp
assert( the_directory->type == IMFS_DIRECTORY );
#endif
the_chain = &the_directory->info.directory.Entries;
for ( the_node = the_chain->first;
44318: b88b cmpl %a3,%d4
4431a: 66aa bnes 442c6 <IMFS_dump_directory+0x36> <== NEVER TAKEN
4431c: 60e6 bras 44304 <IMFS_dump_directory+0x74>
0004a2a0 <IMFS_eval_path>:
const char *pathname, /* IN */
size_t pathnamelen, /* IN */
int flags, /* IN */
rtems_filesystem_location_info_t *pathloc /* IN/OUT */
)
{
4a2a0: 4e56 ffb0 linkw %fp,#-80
4a2a4: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
4a2a8: 282e 0014 movel %fp@(20),%d4
/*
* This was filled in by the caller and is valid in the
* mount table.
*/
node = pathloc->node_access;
4a2ac: 2044 moveal %d4,%a0
4a2ae: 2a0e movel %fp,%d5
size_t pathnamelen, /* IN */
int flags, /* IN */
rtems_filesystem_location_info_t *pathloc /* IN/OUT */
)
{
int i = 0;
4a2b0: 4282 clrl %d2
4a2b2: 0685 ffff ffdb addil #-37,%d5
4a2b8: 2e3c 0004 aac8 movel #305864,%d7
const char *pathname, /* IN */
size_t pathnamelen, /* IN */
int flags, /* IN */
rtems_filesystem_location_info_t *pathloc /* IN/OUT */
)
{
4a2be: 2c2e 0008 movel %fp@(8),%d6
4a2c2: 266e 000c moveal %fp@(12),%a3
/*
* This was filled in by the caller and is valid in the
* mount table.
*/
node = pathloc->node_access;
4a2c6: 2850 moveal %a0@,%a4
* Evaluate all tokens until we are done or an error occurs.
*/
while( (type != IMFS_NO_MORE_PATH) && (type != IMFS_INVALID_TOKEN) ) {
type = IMFS_get_token( &pathname[i], pathnamelen, token, &len );
4a2c8: 486e fffc pea %fp@(-4)
4a2cc: 2246 moveal %d6,%a1
4a2ce: 2447 moveal %d7,%a2
4a2d0: 2f05 movel %d5,%sp@-
4a2d2: 2f0b movel %a3,%sp@-
4a2d4: 4871 2800 pea %a1@(00000000,%d2:l)
4a2d8: 4e92 jsr %a2@
pathnamelen -= len;
4a2da: 2a6e fffc moveal %fp@(-4),%a5
i += len;
if ( !pathloc->node_access )
4a2de: 2044 moveal %d4,%a0
* Evaluate all tokens until we are done or an error occurs.
*/
while( (type != IMFS_NO_MORE_PATH) && (type != IMFS_INVALID_TOKEN) ) {
type = IMFS_get_token( &pathname[i], pathnamelen, token, &len );
4a2e0: 2600 movel %d0,%d3
pathnamelen -= len;
i += len;
if ( !pathloc->node_access )
4a2e2: 4fef 0010 lea %sp@(16),%sp
4a2e6: 2450 moveal %a0@,%a2
4a2e8: 4a8a tstl %a2
4a2ea: 6700 01e0 beqw 4a4cc <IMFS_eval_path+0x22c>
*/
while( (type != IMFS_NO_MORE_PATH) && (type != IMFS_INVALID_TOKEN) ) {
type = IMFS_get_token( &pathname[i], pathnamelen, token, &len );
pathnamelen -= len;
4a2ee: 97cd subal %a5,%a3
i += len;
4a2f0: d48d addl %a5,%d2
rtems_set_errno_and_return_minus_one( ENOENT );
/*
* I cannot move out of this directory without execute permission.
*/
if ( type != IMFS_NO_MORE_PATH )
4a2f2: 4a80 tstl %d0
4a2f4: 6664 bnes 4a35a <IMFS_eval_path+0xba>
* new fs root node and let let the mounted filesystem set the handlers.
*
* NOTE: The behavior of stat() on a mount point appears to be questionable.
*/
if ( node->type == IMFS_DIRECTORY ) {
4a2f6: 7201 moveq #1,%d1
4a2f8: b2aa 0048 cmpl %a2@(72),%d1
4a2fc: 6600 0142 bnew 4a440 <IMFS_eval_path+0x1a0>
if ( node->info.directory.mt_fs != NULL ) {
4a300: 206a 0058 moveal %a2@(88),%a0
4a304: 4a88 tstl %a0
4a306: 6700 0138 beqw 4a440 <IMFS_eval_path+0x1a0>
4a30a: 2244 moveal %d4,%a1
newloc = node->info.directory.mt_fs->mt_fs_root;
*pathloc = newloc;
return (*pathloc->ops->evalpath_h)( &pathname[i-len],
4a30c: 2446 moveal %d6,%a2
4a30e: 948d subl %a5,%d2
*
* NOTE: The behavior of stat() on a mount point appears to be questionable.
*/
if ( node->type == IMFS_DIRECTORY ) {
if ( node->info.directory.mt_fs != NULL ) {
4a310: 22a8 001c movel %a0@(28),%a1@
4a314: 2628 0020 movel %a0@(32),%d3
4a318: 2268 0028 moveal %a0@(40),%a1
4a31c: 2228 0024 movel %a0@(36),%d1
4a320: 2028 002c movel %a0@(44),%d0
newloc = node->info.directory.mt_fs->mt_fs_root;
*pathloc = newloc;
return (*pathloc->ops->evalpath_h)( &pathname[i-len],
4a324: 2f04 movel %d4,%sp@-
4a326: 2f2e 0010 movel %fp@(16),%sp@-
4a32a: 4873 d800 pea %a3@(00000000,%a5:l)
4a32e: 4872 2800 pea %a2@(00000000,%d2:l)
*
* NOTE: The behavior of stat() on a mount point appears to be questionable.
*/
if ( node->type == IMFS_DIRECTORY ) {
if ( node->info.directory.mt_fs != NULL ) {
4a332: 2444 moveal %d4,%a2
newloc = node->info.directory.mt_fs->mt_fs_root;
*pathloc = newloc;
return (*pathloc->ops->evalpath_h)( &pathname[i-len],
4a334: 2051 moveal %a1@,%a0
*
* NOTE: The behavior of stat() on a mount point appears to be questionable.
*/
if ( node->type == IMFS_DIRECTORY ) {
if ( node->info.directory.mt_fs != NULL ) {
4a336: 2543 0004 movel %d3,%a2@(4)
4a33a: 2541 0008 movel %d1,%a2@(8)
4a33e: 2549 000c movel %a1,%a2@(12)
4a342: 2540 0010 movel %d0,%a2@(16)
newloc = node->info.directory.mt_fs->mt_fs_root;
*pathloc = newloc;
return (*pathloc->ops->evalpath_h)( &pathname[i-len],
4a346: 4e90 jsr %a0@
4a348: 4fef 0010 lea %sp@(16),%sp
4a34c: 2600 movel %d0,%d3
if ( !IMFS_evaluate_permission( pathloc, flags ) )
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
4a34e: 2003 movel %d3,%d0
4a350: 4cee 3cfc ffb0 moveml %fp@(-80),%d2-%d7/%a2-%a5
4a356: 4e5e unlk %fp
4a358: 4e75 rts
/*
* I cannot move out of this directory without execute permission.
*/
if ( type != IMFS_NO_MORE_PATH )
if ( node->type == IMFS_DIRECTORY )
4a35a: 7001 moveq #1,%d0
4a35c: b0ac 0048 cmpl %a4@(72),%d0
4a360: 6700 00b0 beqw 4a412 <IMFS_eval_path+0x172>
if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) )
rtems_set_errno_and_return_minus_one( EACCES );
node = pathloc->node_access;
4a364: 284a moveal %a2,%a4
switch( type ) {
4a366: 7003 moveq #3,%d0
4a368: b083 cmpl %d3,%d0
4a36a: 671c beqs 4a388 <IMFS_eval_path+0xe8>
4a36c: 7204 moveq #4,%d1
4a36e: b283 cmpl %d3,%d1
4a370: 6700 0086 beqw 4a3f8 <IMFS_eval_path+0x158>
4a374: 103c 0002 moveb #2,%d0
4a378: b083 cmpl %d3,%d0
4a37a: 674e beqs 4a3ca <IMFS_eval_path+0x12a>
/*
* Evaluate all tokens until we are done or an error occurs.
*/
while( (type != IMFS_NO_MORE_PATH) && (type != IMFS_INVALID_TOKEN) ) {
4a37c: 7004 moveq #4,%d0
4a37e: b083 cmpl %d3,%d0
4a380: 6600 ff46 bnew 4a2c8 <IMFS_eval_path+0x28>
4a384: 6000 ff70 braw 4a2f6 <IMFS_eval_path+0x56> <== NOT EXECUTED
case IMFS_NAME:
/*
* If we are at a link follow it.
*/
if ( node->type == IMFS_HARD_LINK ) {
4a388: 202a 0048 movel %a2@(72),%d0
4a38c: 7203 moveq #3,%d1
4a38e: b280 cmpl %d0,%d1
4a390: 6700 00d6 beqw 4a468 <IMFS_eval_path+0x1c8>
node = pathloc->node_access;
if ( !node )
rtems_set_errno_and_return_minus_one( ENOTDIR );
} else if ( node->type == IMFS_SYM_LINK ) {
4a394: 7204 moveq #4,%d1
4a396: b280 cmpl %d0,%d1
4a398: 6700 014c beqw 4a4e6 <IMFS_eval_path+0x246>
/*
* Only a directory can be decended into.
*/
if ( node->type != IMFS_DIRECTORY )
4a39c: 7201 moveq #1,%d1
4a39e: b280 cmpl %d0,%d1
4a3a0: 6600 0182 bnew 4a524 <IMFS_eval_path+0x284>
/*
* If we are at a node that is a mount point. Set loc to the
* new fs root node and let them finish evaluating the path.
*/
if ( node->info.directory.mt_fs != NULL ) {
4a3a4: 206c 0058 moveal %a4@(88),%a0
4a3a8: 4a88 tstl %a0
4a3aa: 6600 0192 bnew 4a53e <IMFS_eval_path+0x29e>
/*
* Otherwise find the token name in the present location.
*/
node = IMFS_find_match_in_dir( node, token );
4a3ae: 2f05 movel %d5,%sp@-
4a3b0: 2f0c movel %a4,%sp@-
4a3b2: 4eb9 0004 aa3c jsr 4aa3c <IMFS_find_match_in_dir>
if ( !node )
4a3b8: 508f addql #8,%sp
/*
* Otherwise find the token name in the present location.
*/
node = IMFS_find_match_in_dir( node, token );
4a3ba: 2840 moveal %d0,%a4
if ( !node )
4a3bc: 4a80 tstl %d0
4a3be: 6700 01ca beqw 4a58a <IMFS_eval_path+0x2ea>
/*
* Set the node access to the point we have found.
*/
pathloc->node_access = node;
4a3c2: 2244 moveal %d4,%a1
4a3c4: 2280 movel %d0,%a1@
4a3c6: 6000 ff00 braw 4a2c8 <IMFS_eval_path+0x28>
case IMFS_UP_DIR:
/*
* Am I at the root of all filesystems? (chroot'ed?)
*/
if ( pathloc->node_access == rtems_filesystem_root.node_access )
4a3ca: 2079 0005 cd60 moveal 5cd60 <rtems_current_user_env>,%a0
4a3d0: b5e8 0018 cmpal %a0@(24),%a2
4a3d4: 6700 fef2 beqw 4a2c8 <IMFS_eval_path+0x28>
/*
* Am I at the root of this mounted filesystem?
*/
if (pathloc->node_access ==
pathloc->mt_entry->mt_fs_root.node_access) {
4a3d8: 2244 moveal %d4,%a1
4a3da: 2069 0010 moveal %a1@(16),%a0
/*
* Am I at the root of this mounted filesystem?
*/
if (pathloc->node_access ==
4a3de: b5e8 001c cmpal %a0@(28),%a2
4a3e2: 6700 00a2 beqw 4a486 <IMFS_eval_path+0x1e6>
pathnamelen+len,
flags,pathloc);
}
} else {
if ( !node->Parent )
4a3e6: 286a 0008 moveal %a2@(8),%a4
4a3ea: 4a8c tstl %a4
4a3ec: 6700 00de beqw 4a4cc <IMFS_eval_path+0x22c>
rtems_set_errno_and_return_minus_one( ENOENT );
node = node->Parent;
pathloc->node_access = node;
4a3f0: 2444 moveal %d4,%a2
4a3f2: 248c movel %a4,%a2@
}
pathloc->node_access = node;
break;
4a3f4: 6000 fed2 braw 4a2c8 <IMFS_eval_path+0x28>
case IMFS_NO_MORE_PATH:
case IMFS_CURRENT_DIR:
break;
case IMFS_INVALID_TOKEN:
rtems_set_errno_and_return_minus_one( ENAMETOOLONG );
4a3f8: 4eb9 0004 da6c jsr 4da6c <__errno>
4a3fe: 76ff moveq #-1,%d3
4a400: 785b moveq #91,%d4
4a402: 2440 moveal %d0,%a2
if ( !IMFS_evaluate_permission( pathloc, flags ) )
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
4a404: 2003 movel %d3,%d0
case IMFS_NO_MORE_PATH:
case IMFS_CURRENT_DIR:
break;
case IMFS_INVALID_TOKEN:
rtems_set_errno_and_return_minus_one( ENAMETOOLONG );
4a406: 2484 movel %d4,%a2@
if ( !IMFS_evaluate_permission( pathloc, flags ) )
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
4a408: 4cee 3cfc ffb0 moveml %fp@(-80),%d2-%d7/%a2-%a5
4a40e: 4e5e unlk %fp
4a410: 4e75 rts
/*
* I cannot move out of this directory without execute permission.
*/
if ( type != IMFS_NO_MORE_PATH )
if ( node->type == IMFS_DIRECTORY )
if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) )
4a412: 4878 0001 pea 1 <ADD>
4a416: 2f04 movel %d4,%sp@-
4a418: 4eb9 0004 a21e jsr 4a21e <IMFS_evaluate_permission>
4a41e: 508f addql #8,%sp
4a420: 4a80 tstl %d0
4a422: 6600 ff40 bnew 4a364 <IMFS_eval_path+0xc4>
/*
* Verify we have the correct permissions for this node.
*/
if ( !IMFS_evaluate_permission( pathloc, flags ) )
rtems_set_errno_and_return_minus_one( EACCES );
4a426: 4eb9 0004 da6c jsr 4da6c <__errno>
4a42c: 76ff moveq #-1,%d3
4a42e: 740d moveq #13,%d2
4a430: 2040 moveal %d0,%a0
return result;
}
4a432: 2003 movel %d3,%d0
/*
* Verify we have the correct permissions for this node.
*/
if ( !IMFS_evaluate_permission( pathloc, flags ) )
rtems_set_errno_and_return_minus_one( EACCES );
4a434: 2082 movel %d2,%a0@
return result;
}
4a436: 4cee 3cfc ffb0 moveml %fp@(-80),%d2-%d7/%a2-%a5
4a43c: 4e5e unlk %fp
4a43e: 4e75 rts
flags, pathloc );
} else {
result = IMFS_Set_handlers( pathloc );
}
} else {
result = IMFS_Set_handlers( pathloc );
4a440: 2f04 movel %d4,%sp@-
4a442: 4eb9 0004 a194 jsr 4a194 <IMFS_Set_handlers>
/*
* Verify we have the correct permissions for this node.
*/
if ( !IMFS_evaluate_permission( pathloc, flags ) )
4a448: 2eae 0010 movel %fp@(16),%sp@
flags, pathloc );
} else {
result = IMFS_Set_handlers( pathloc );
}
} else {
result = IMFS_Set_handlers( pathloc );
4a44c: 2600 movel %d0,%d3
/*
* Verify we have the correct permissions for this node.
*/
if ( !IMFS_evaluate_permission( pathloc, flags ) )
4a44e: 2f04 movel %d4,%sp@-
4a450: 4eb9 0004 a21e jsr 4a21e <IMFS_evaluate_permission>
4a456: 508f addql #8,%sp
4a458: 4a80 tstl %d0
4a45a: 67ca beqs 4a426 <IMFS_eval_path+0x186>
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
4a45c: 2003 movel %d3,%d0
4a45e: 4cee 3cfc ffb0 moveml %fp@(-80),%d2-%d7/%a2-%a5
4a464: 4e5e unlk %fp
4a466: 4e75 rts
* If we are at a link follow it.
*/
if ( node->type == IMFS_HARD_LINK ) {
IMFS_evaluate_hard_link( pathloc, 0 );
4a468: 42a7 clrl %sp@-
4a46a: 2f04 movel %d4,%sp@-
4a46c: 4eb9 0004 a240 jsr 4a240 <IMFS_evaluate_hard_link>
node = pathloc->node_access;
if ( !node )
4a472: 508f addql #8,%sp
if ( node->type == IMFS_HARD_LINK ) {
IMFS_evaluate_hard_link( pathloc, 0 );
node = pathloc->node_access;
4a474: 2044 moveal %d4,%a0
4a476: 2850 moveal %a0@,%a4
if ( !node )
4a478: 4a8c tstl %a4
4a47a: 6700 008e beqw 4a50a <IMFS_eval_path+0x26a>
} else if ( node->type == IMFS_SYM_LINK ) {
result = IMFS_evaluate_sym_link( pathloc, 0 );
node = pathloc->node_access;
4a47e: 202c 0048 movel %a4@(72),%d0
4a482: 6000 ff18 braw 4a39c <IMFS_eval_path+0xfc>
/*
* Am I at the root of this mounted filesystem?
*/
if (pathloc->node_access ==
4a486: 2444 moveal %d4,%a2
if ( pathloc->node_access == rtems_filesystem_root.node_access ) {
break; /* Throw out the .. in this case */
} else {
newloc = pathloc->mt_entry->mt_point_node;
*pathloc = newloc;
return (*pathloc->ops->evalpath_h)(&(pathname[i-len]),
4a488: 948d subl %a5,%d2
/*
* Am I at the root of this mounted filesystem?
*/
if (pathloc->node_access ==
4a48a: 24a8 0008 movel %a0@(8),%a2@
4a48e: 2268 0014 moveal %a0@(20),%a1
4a492: 2628 000c movel %a0@(12),%d3
4a496: 2228 0010 movel %a0@(16),%d1
4a49a: 2028 0018 movel %a0@(24),%d0
if ( pathloc->node_access == rtems_filesystem_root.node_access ) {
break; /* Throw out the .. in this case */
} else {
newloc = pathloc->mt_entry->mt_point_node;
*pathloc = newloc;
return (*pathloc->ops->evalpath_h)(&(pathname[i-len]),
4a49e: 2046 moveal %d6,%a0
4a4a0: 2f04 movel %d4,%sp@-
4a4a2: 2f2e 0010 movel %fp@(16),%sp@-
4a4a6: 4875 b800 pea %a5@(00000000,%a3:l)
4a4aa: 4870 2800 pea %a0@(00000000,%d2:l)
4a4ae: 2051 moveal %a1@,%a0
*
* NOTE: The behavior of stat() on a mount point appears to be questionable.
*/
if ( node->type == IMFS_DIRECTORY ) {
if ( node->info.directory.mt_fs != NULL ) {
4a4b0: 2543 0004 movel %d3,%a2@(4)
4a4b4: 2541 0008 movel %d1,%a2@(8)
4a4b8: 2549 000c movel %a1,%a2@(12)
4a4bc: 2540 0010 movel %d0,%a2@(16)
newloc = node->info.directory.mt_fs->mt_fs_root;
*pathloc = newloc;
return (*pathloc->ops->evalpath_h)( &pathname[i-len],
4a4c0: 4e90 jsr %a0@
4a4c2: 4fef 0010 lea %sp@(16),%sp
4a4c6: 2600 movel %d0,%d3
4a4c8: 6000 fe84 braw 4a34e <IMFS_eval_path+0xae>
flags,pathloc);
}
} else {
if ( !node->Parent )
rtems_set_errno_and_return_minus_one( ENOENT );
4a4cc: 4eb9 0004 da6c jsr 4da6c <__errno>
4a4d2: 76ff moveq #-1,%d3
4a4d4: 2240 moveal %d0,%a1
4a4d6: 7002 moveq #2,%d0
4a4d8: 2280 movel %d0,%a1@
if ( !IMFS_evaluate_permission( pathloc, flags ) )
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
4a4da: 2003 movel %d3,%d0
4a4dc: 4cee 3cfc ffb0 moveml %fp@(-80),%d2-%d7/%a2-%a5
4a4e2: 4e5e unlk %fp
4a4e4: 4e75 rts
if ( !node )
rtems_set_errno_and_return_minus_one( ENOTDIR );
} else if ( node->type == IMFS_SYM_LINK ) {
result = IMFS_evaluate_sym_link( pathloc, 0 );
4a4e6: 42a7 clrl %sp@-
4a4e8: 2f04 movel %d4,%sp@-
4a4ea: 4eb9 0004 a5a4 jsr 4a5a4 <IMFS_evaluate_sym_link>
node = pathloc->node_access;
if ( result == -1 )
4a4f0: 508f addql #8,%sp
} else if ( node->type == IMFS_SYM_LINK ) {
result = IMFS_evaluate_sym_link( pathloc, 0 );
node = pathloc->node_access;
4a4f2: 2044 moveal %d4,%a0
if ( result == -1 )
4a4f4: 72ff moveq #-1,%d1
} else if ( node->type == IMFS_SYM_LINK ) {
result = IMFS_evaluate_sym_link( pathloc, 0 );
node = pathloc->node_access;
4a4f6: 2850 moveal %a0@,%a4
if ( result == -1 )
4a4f8: b280 cmpl %d0,%d1
4a4fa: 6682 bnes 4a47e <IMFS_eval_path+0x1de> <== ALWAYS TAKEN
4a4fc: 2600 movel %d0,%d3 <== NOT EXECUTED
if ( !IMFS_evaluate_permission( pathloc, flags ) )
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
4a4fe: 2003 movel %d3,%d0 <== NOT EXECUTED
4a500: 4cee 3cfc ffb0 moveml %fp@(-80),%d2-%d7/%a2-%a5 <== NOT EXECUTED
4a506: 4e5e unlk %fp <== NOT EXECUTED
4a508: 4e75 rts <== NOT EXECUTED
IMFS_evaluate_hard_link( pathloc, 0 );
node = pathloc->node_access;
if ( !node )
rtems_set_errno_and_return_minus_one( ENOTDIR );
4a50a: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
4a510: 76ff moveq #-1,%d3 <== NOT EXECUTED
4a512: 7e14 moveq #20,%d7 <== NOT EXECUTED
4a514: 2240 moveal %d0,%a1 <== NOT EXECUTED
if ( !IMFS_evaluate_permission( pathloc, flags ) )
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
4a516: 2003 movel %d3,%d0 <== NOT EXECUTED
IMFS_evaluate_hard_link( pathloc, 0 );
node = pathloc->node_access;
if ( !node )
rtems_set_errno_and_return_minus_one( ENOTDIR );
4a518: 2287 movel %d7,%a1@ <== NOT EXECUTED
if ( !IMFS_evaluate_permission( pathloc, flags ) )
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
4a51a: 4cee 3cfc ffb0 moveml %fp@(-80),%d2-%d7/%a2-%a5 <== NOT EXECUTED
4a520: 4e5e unlk %fp <== NOT EXECUTED
4a522: 4e75 rts <== NOT EXECUTED
/*
* Only a directory can be decended into.
*/
if ( node->type != IMFS_DIRECTORY )
rtems_set_errno_and_return_minus_one( ENOTDIR );
4a524: 4eb9 0004 da6c jsr 4da6c <__errno>
4a52a: 76ff moveq #-1,%d3
4a52c: 7c14 moveq #20,%d6
4a52e: 2040 moveal %d0,%a0
if ( !IMFS_evaluate_permission( pathloc, flags ) )
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
4a530: 2003 movel %d3,%d0
/*
* Only a directory can be decended into.
*/
if ( node->type != IMFS_DIRECTORY )
rtems_set_errno_and_return_minus_one( ENOTDIR );
4a532: 2086 movel %d6,%a0@
if ( !IMFS_evaluate_permission( pathloc, flags ) )
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
4a534: 4cee 3cfc ffb0 moveml %fp@(-80),%d2-%d7/%a2-%a5
4a53a: 4e5e unlk %fp
4a53c: 4e75 rts
/*
* If we are at a node that is a mount point. Set loc to the
* new fs root node and let them finish evaluating the path.
*/
if ( node->info.directory.mt_fs != NULL ) {
4a53e: 2244 moveal %d4,%a1
newloc = node->info.directory.mt_fs->mt_fs_root;
*pathloc = newloc;
return (*pathloc->ops->evalpath_h)( &pathname[i-len],
4a540: 2446 moveal %d6,%a2
/*
* If we are at a node that is a mount point. Set loc to the
* new fs root node and let them finish evaluating the path.
*/
if ( node->info.directory.mt_fs != NULL ) {
4a542: 22a8 001c movel %a0@(28),%a1@
4a546: 2628 0020 movel %a0@(32),%d3
4a54a: 2268 0028 moveal %a0@(40),%a1
4a54e: 2228 0024 movel %a0@(36),%d1
4a552: 2028 002c movel %a0@(44),%d0
newloc = node->info.directory.mt_fs->mt_fs_root;
*pathloc = newloc;
return (*pathloc->ops->evalpath_h)( &pathname[i-len],
4a556: 2f04 movel %d4,%sp@-
4a558: 2f2e 0010 movel %fp@(16),%sp@-
4a55c: 206e fffc moveal %fp@(-4),%a0
4a560: 4873 8800 pea %a3@(00000000,%a0:l)
4a564: 9488 subl %a0,%d2
4a566: 4872 2800 pea %a2@(00000000,%d2:l)
/*
* If we are at a node that is a mount point. Set loc to the
* new fs root node and let them finish evaluating the path.
*/
if ( node->info.directory.mt_fs != NULL ) {
4a56a: 2444 moveal %d4,%a2
newloc = node->info.directory.mt_fs->mt_fs_root;
*pathloc = newloc;
return (*pathloc->ops->evalpath_h)( &pathname[i-len],
4a56c: 2051 moveal %a1@,%a0
*
* NOTE: The behavior of stat() on a mount point appears to be questionable.
*/
if ( node->type == IMFS_DIRECTORY ) {
if ( node->info.directory.mt_fs != NULL ) {
4a56e: 2543 0004 movel %d3,%a2@(4)
4a572: 2541 0008 movel %d1,%a2@(8)
4a576: 2549 000c movel %a1,%a2@(12)
4a57a: 2540 0010 movel %d0,%a2@(16)
newloc = node->info.directory.mt_fs->mt_fs_root;
*pathloc = newloc;
return (*pathloc->ops->evalpath_h)( &pathname[i-len],
4a57e: 4e90 jsr %a0@
4a580: 4fef 0010 lea %sp@(16),%sp
4a584: 2600 movel %d0,%d3
4a586: 6000 fdc6 braw 4a34e <IMFS_eval_path+0xae>
* Otherwise find the token name in the present location.
*/
node = IMFS_find_match_in_dir( node, token );
if ( !node )
rtems_set_errno_and_return_minus_one( ENOENT );
4a58a: 4eb9 0004 da6c jsr 4da6c <__errno>
4a590: 76ff moveq #-1,%d3
4a592: 7a02 moveq #2,%d5
4a594: 2040 moveal %d0,%a0
if ( !IMFS_evaluate_permission( pathloc, flags ) )
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
4a596: 2003 movel %d3,%d0
* Otherwise find the token name in the present location.
*/
node = IMFS_find_match_in_dir( node, token );
if ( !node )
rtems_set_errno_and_return_minus_one( ENOENT );
4a598: 2085 movel %d5,%a0@
if ( !IMFS_evaluate_permission( pathloc, flags ) )
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
4a59a: 4cee 3cfc ffb0 moveml %fp@(-80),%d2-%d7/%a2-%a5
4a5a0: 4e5e unlk %fp <== NOT EXECUTED
0004a70c <IMFS_evaluate_for_make>:
int IMFS_evaluate_for_make(
const char *path, /* IN */
rtems_filesystem_location_info_t *pathloc, /* IN/OUT */
const char **name /* OUT */
)
{
4a70c: 4e56 ffb0 linkw %fp,#-80
4a710: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
4a714: 2a6e 0008 moveal %fp@(8),%a5
4a718: 2c0e movel %fp,%d6
int i = 0;
4a71a: 4284 clrl %d4
4a71c: 0686 ffff ffdb addil #-37,%d6
4a722: 2e3c 0004 aac8 movel #305864,%d7
node = pathloc->node_access;
/*
* Get the path length.
*/
pathlen = strlen( path );
4a728: 2f0d movel %a5,%sp@-
int IMFS_evaluate_for_make(
const char *path, /* IN */
rtems_filesystem_location_info_t *pathloc, /* IN/OUT */
const char **name /* OUT */
)
{
4a72a: 286e 000c moveal %fp@(12),%a4
node = pathloc->node_access;
/*
* Get the path length.
*/
pathlen = strlen( path );
4a72e: 4eb9 0004 eec4 jsr 4eec4 <strlen>
/*
* This was filled in by the caller and is valid in the
* mount table.
*/
node = pathloc->node_access;
4a734: 2654 moveal %a4@,%a3
/*
* Get the path length.
*/
pathlen = strlen( path );
4a736: 588f addql #4,%sp
4a738: 2400 movel %d0,%d2
* Evaluate all tokens until we are done or an error occurs.
*/
while( !done ) {
type = IMFS_get_token( &path[i], pathlen, token, &len );
4a73a: 486e fffc pea %fp@(-4)
4a73e: 2047 moveal %d7,%a0
4a740: 2f06 movel %d6,%sp@-
4a742: 2f02 movel %d2,%sp@-
4a744: 4875 4800 pea %a5@(00000000,%d4:l)
4a748: 4e90 jsr %a0@
pathlen -= len;
4a74a: 2a2e fffc movel %fp@(-4),%d5
* Evaluate all tokens until we are done or an error occurs.
*/
while( !done ) {
type = IMFS_get_token( &path[i], pathlen, token, &len );
4a74e: 2600 movel %d0,%d3
pathlen -= len;
i += len;
if ( !pathloc->node_access )
4a750: 4fef 0010 lea %sp@(16),%sp
*/
while( !done ) {
type = IMFS_get_token( &path[i], pathlen, token, &len );
pathlen -= len;
4a754: 9485 subl %d5,%d2
i += len;
if ( !pathloc->node_access )
4a756: 2454 moveal %a4@,%a2
4a758: 4a8a tstl %a2
4a75a: 6700 00f4 beqw 4a850 <IMFS_evaluate_for_make+0x144>
/*
* I cannot move out of this directory without execute permission.
*/
if ( type != IMFS_NO_MORE_PATH )
4a75e: 4a80 tstl %d0
4a760: 6740 beqs 4a7a2 <IMFS_evaluate_for_make+0x96>
if ( node->type == IMFS_DIRECTORY )
4a762: 7001 moveq #1,%d0
4a764: b0ab 0048 cmpl %a3@(72),%d0
4a768: 6752 beqs 4a7bc <IMFS_evaluate_for_make+0xb0>
while( !done ) {
type = IMFS_get_token( &path[i], pathlen, token, &len );
pathlen -= len;
i += len;
4a76a: d885 addl %d5,%d4
if ( type != IMFS_NO_MORE_PATH )
if ( node->type == IMFS_DIRECTORY )
if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) )
rtems_set_errno_and_return_minus_one( EACCES );
node = pathloc->node_access;
4a76c: 264a moveal %a2,%a3
switch( type ) {
4a76e: 7002 moveq #2,%d0
4a770: b083 cmpl %d3,%d0
4a772: 6700 00ba beqw 4a82e <IMFS_evaluate_for_make+0x122>
4a776: 6426 bccs 4a79e <IMFS_evaluate_for_make+0x92>
4a778: 7203 moveq #3,%d1
4a77a: b283 cmpl %d3,%d1
4a77c: 676a beqs 4a7e8 <IMFS_evaluate_for_make+0xdc>
4a77e: 7004 moveq #4,%d0
4a780: b083 cmpl %d3,%d0
4a782: 66b6 bnes 4a73a <IMFS_evaluate_for_make+0x2e> <== NEVER TAKEN
case IMFS_NO_MORE_PATH:
rtems_set_errno_and_return_minus_one( EEXIST );
break;
case IMFS_INVALID_TOKEN:
rtems_set_errno_and_return_minus_one( ENAMETOOLONG );
4a784: 4eb9 0004 da6c jsr 4da6c <__errno>
4a78a: 7e5b moveq #91,%d7
4a78c: 76ff moveq #-1,%d3
4a78e: 2040 moveal %d0,%a0
4a790: 2087 movel %d7,%a0@
if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) )
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
4a792: 2003 movel %d3,%d0
4a794: 4cee 3cfc ffb0 moveml %fp@(-80),%d2-%d7/%a2-%a5
4a79a: 4e5e unlk %fp
4a79c: 4e75 rts
if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) )
rtems_set_errno_and_return_minus_one( EACCES );
node = pathloc->node_access;
switch( type ) {
4a79e: 4a83 tstl %d3
4a7a0: 6698 bnes 4a73a <IMFS_evaluate_for_make+0x2e> <== ALWAYS TAKEN
pathloc->node_access = node;
break;
case IMFS_NO_MORE_PATH:
rtems_set_errno_and_return_minus_one( EEXIST );
4a7a2: 4eb9 0004 da6c jsr 4da6c <__errno>
4a7a8: 76ff moveq #-1,%d3
4a7aa: 2040 moveal %d0,%a0
4a7ac: 7011 moveq #17,%d0
4a7ae: 2080 movel %d0,%a0@
if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) )
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
4a7b0: 2003 movel %d3,%d0
4a7b2: 4cee 3cfc ffb0 moveml %fp@(-80),%d2-%d7/%a2-%a5
4a7b8: 4e5e unlk %fp
4a7ba: 4e75 rts
* I cannot move out of this directory without execute permission.
*/
if ( type != IMFS_NO_MORE_PATH )
if ( node->type == IMFS_DIRECTORY )
if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) )
4a7bc: 4878 0001 pea 1 <ADD>
4a7c0: 2f0c movel %a4,%sp@-
4a7c2: 4eb9 0004 a21e jsr 4a21e <IMFS_evaluate_permission>
4a7c8: 508f addql #8,%sp
4a7ca: 4a80 tstl %d0
4a7cc: 669c bnes 4a76a <IMFS_evaluate_for_make+0x5e>
/*
* We must have Write and execute permission on the returned node.
*/
if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) )
rtems_set_errno_and_return_minus_one( EACCES );
4a7ce: 4eb9 0004 da6c jsr 4da6c <__errno>
4a7d4: 76ff moveq #-1,%d3
4a7d6: 780d moveq #13,%d4
4a7d8: 2040 moveal %d0,%a0
return result;
}
4a7da: 2003 movel %d3,%d0
/*
* We must have Write and execute permission on the returned node.
*/
if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) )
rtems_set_errno_and_return_minus_one( EACCES );
4a7dc: 2084 movel %d4,%a0@
return result;
}
4a7de: 4cee 3cfc ffb0 moveml %fp@(-80),%d2-%d7/%a2-%a5
4a7e4: 4e5e unlk %fp
4a7e6: 4e75 rts
pathloc->node_access = node;
break;
case IMFS_NAME:
if ( node->type == IMFS_HARD_LINK ) {
4a7e8: 202a 0048 movel %a2@(72),%d0
4a7ec: 7203 moveq #3,%d1
4a7ee: b280 cmpl %d0,%d1
4a7f0: 6700 0126 beqw 4a918 <IMFS_evaluate_for_make+0x20c>
result = IMFS_evaluate_link( pathloc, 0 );
if ( result == -1 )
return -1;
} else if ( node->type == IMFS_SYM_LINK ) {
4a7f4: 7204 moveq #4,%d1
4a7f6: b280 cmpl %d0,%d1
4a7f8: 6700 011e beqw 4a918 <IMFS_evaluate_for_make+0x20c>
if ( result == -1 )
return -1;
}
node = pathloc->node_access;
if ( !node )
4a7fc: 4a8b tstl %a3
4a7fe: 6700 0134 beqw 4a934 <IMFS_evaluate_for_make+0x228>
/*
* Only a directory can be decended into.
*/
if ( node->type != IMFS_DIRECTORY )
4a802: 7001 moveq #1,%d0
4a804: b0ab 0048 cmpl %a3@(72),%d0
4a808: 6600 012a bnew 4a934 <IMFS_evaluate_for_make+0x228>
/*
* If we are at a node that is a mount point. Set loc to the
* new fs root node and let them finish evaluating the path.
*/
if ( node->info.directory.mt_fs != NULL ) {
4a80c: 206b 0058 moveal %a3@(88),%a0
4a810: 4a88 tstl %a0
4a812: 6600 013a bnew 4a94e <IMFS_evaluate_for_make+0x242>
/*
* Otherwise find the token name in the present location.
*/
node = IMFS_find_match_in_dir( node, token );
4a816: 2f06 movel %d6,%sp@-
4a818: 2f0b movel %a3,%sp@-
4a81a: 4eb9 0004 aa3c jsr 4aa3c <IMFS_find_match_in_dir>
/*
* If there is no node we have found the name of the node we
* wish to create.
*/
if ( ! node )
4a820: 508f addql #8,%sp
/*
* Otherwise find the token name in the present location.
*/
node = IMFS_find_match_in_dir( node, token );
4a822: 2640 moveal %d0,%a3
/*
* If there is no node we have found the name of the node we
* wish to create.
*/
if ( ! node )
4a824: 4a80 tstl %d0
4a826: 6742 beqs 4a86a <IMFS_evaluate_for_make+0x15e>
done = true;
else
pathloc->node_access = node;
4a828: 288b movel %a3,%a4@
4a82a: 6000 ff0e braw 4a73a <IMFS_evaluate_for_make+0x2e>
case IMFS_UP_DIR:
/*
* Am I at the root of all filesystems? (chroot'ed?)
*/
if ( pathloc->node_access == rtems_filesystem_root.node_access )
4a82e: 2079 0005 cd60 moveal 5cd60 <rtems_current_user_env>,%a0
4a834: b5e8 0018 cmpal %a0@(24),%a2
4a838: 6700 ff00 beqw 4a73a <IMFS_evaluate_for_make+0x2e>
/*
* Am I at the root of this mounted filesystem?
*/
if (pathloc->node_access == pathloc->mt_entry->mt_fs_root.node_access){
4a83c: 206c 0010 moveal %a4@(16),%a0
4a840: b5e8 001c cmpal %a0@(28),%a2
4a844: 6700 008a beqw 4a8d0 <IMFS_evaluate_for_make+0x1c4>
*pathloc = newloc;
return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name );
}
} else {
if ( !node->Parent )
4a848: 266a 0008 moveal %a2@(8),%a3
4a84c: 4a8b tstl %a3
4a84e: 66d8 bnes 4a828 <IMFS_evaluate_for_make+0x11c>
* Verify there is not any invalid stuff at the end of the name.
*/
for( ; path[i] != '\0'; i++) {
if ( !IMFS_is_separator( path[ i ] ) )
rtems_set_errno_and_return_minus_one( ENOENT );
4a850: 4eb9 0004 da6c jsr 4da6c <__errno>
4a856: 76ff moveq #-1,%d3
4a858: 7c02 moveq #2,%d6
4a85a: 2040 moveal %d0,%a0
if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) )
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
4a85c: 2003 movel %d3,%d0
* Verify there is not any invalid stuff at the end of the name.
*/
for( ; path[i] != '\0'; i++) {
if ( !IMFS_is_separator( path[ i ] ) )
rtems_set_errno_and_return_minus_one( ENOENT );
4a85e: 2086 movel %d6,%a0@
if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) )
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
4a860: 4cee 3cfc ffb0 moveml %fp@(-80),%d2-%d7/%a2-%a5
4a866: 4e5e unlk %fp
4a868: 4e75 rts
case IMFS_CURRENT_DIR:
break;
}
}
*name = &path[ i - len ];
4a86a: 2004 movel %d4,%d0
4a86c: 90ae fffc subl %fp@(-4),%d0
4a870: d08d addl %a5,%d0
4a872: 206e 0010 moveal %fp@(16),%a0
4a876: 2080 movel %d0,%a0@
/*
* We have evaluated the path as far as we can.
* Verify there is not any invalid stuff at the end of the name.
*/
for( ; path[i] != '\0'; i++) {
4a878: 1035 4800 moveb %a5@(00000000,%d4:l),%d0
4a87c: 671a beqs 4a898 <IMFS_evaluate_for_make+0x18c>
4a87e: 47f9 0004 3cdc lea 43cdc <rtems_filesystem_is_separator>,%a3
* pathloc is returned with a pointer to the parent of the new node.
* name is returned with a pointer to the first character in the
* new node name. The parent node is verified to be a directory.
*/
int IMFS_evaluate_for_make(
4a884: 45f5 4801 lea %a5@(00000001,%d4:l),%a2
* We have evaluated the path as far as we can.
* Verify there is not any invalid stuff at the end of the name.
*/
for( ; path[i] != '\0'; i++) {
if ( !IMFS_is_separator( path[ i ] ) )
4a888: 49c0 extbl %d0
4a88a: 2f00 movel %d0,%sp@-
4a88c: 4e93 jsr %a3@
4a88e: 588f addql #4,%sp
4a890: 4a80 tstl %d0
4a892: 67bc beqs 4a850 <IMFS_evaluate_for_make+0x144>
/*
* We have evaluated the path as far as we can.
* Verify there is not any invalid stuff at the end of the name.
*/
for( ; path[i] != '\0'; i++) {
4a894: 101a moveb %a2@+,%d0
4a896: 66f0 bnes 4a888 <IMFS_evaluate_for_make+0x17c>
/*
* Verify we can execute and write to this directory.
*/
result = IMFS_Set_handlers( pathloc );
4a898: 2f0c movel %a4,%sp@-
4a89a: 4eb9 0004 a194 jsr 4a194 <IMFS_Set_handlers>
/*
* The returned node must be a directory
*/
node = pathloc->node_access;
if ( node->type != IMFS_DIRECTORY )
4a8a0: 2054 moveal %a4@,%a0
/*
* Verify we can execute and write to this directory.
*/
result = IMFS_Set_handlers( pathloc );
4a8a2: 2600 movel %d0,%d3
/*
* The returned node must be a directory
*/
node = pathloc->node_access;
if ( node->type != IMFS_DIRECTORY )
4a8a4: 588f addql #4,%sp
4a8a6: 7001 moveq #1,%d0
4a8a8: b0a8 0048 cmpl %a0@(72),%d0
4a8ac: 6600 0086 bnew 4a934 <IMFS_evaluate_for_make+0x228>
/*
* We must have Write and execute permission on the returned node.
*/
if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) )
4a8b0: 4878 0003 pea 3 <DIVIDE>
4a8b4: 2f0c movel %a4,%sp@-
4a8b6: 4eb9 0004 a21e jsr 4a21e <IMFS_evaluate_permission>
4a8bc: 508f addql #8,%sp
4a8be: 4a80 tstl %d0
4a8c0: 6700 ff0c beqw 4a7ce <IMFS_evaluate_for_make+0xc2>
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
4a8c4: 2003 movel %d3,%d0
4a8c6: 4cee 3cfc ffb0 moveml %fp@(-80),%d2-%d7/%a2-%a5
4a8cc: 4e5e unlk %fp
4a8ce: 4e75 rts
/*
* Am I at the root of this mounted filesystem?
*/
if (pathloc->node_access == pathloc->mt_entry->mt_fs_root.node_access){
4a8d0: 2268 0014 moveal %a0@(20),%a1
break;
} else {
newloc = pathloc->mt_entry->mt_point_node;
*pathloc = newloc;
return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name );
4a8d4: 9885 subl %d5,%d4
/*
* Am I at the root of this mounted filesystem?
*/
if (pathloc->node_access == pathloc->mt_entry->mt_fs_root.node_access){
4a8d6: 2428 000c movel %a0@(12),%d2
4a8da: 2228 0010 movel %a0@(16),%d1
4a8de: 2028 0018 movel %a0@(24),%d0
4a8e2: 28a8 0008 movel %a0@(8),%a4@
*/
if ( node->info.directory.mt_fs != NULL ) {
newloc = node->info.directory.mt_fs->mt_fs_root;
*pathloc = newloc;
return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name );
4a8e6: 2f2e 0010 movel %fp@(16),%sp@-
4a8ea: 2f0c movel %a4,%sp@-
4a8ec: 4875 4800 pea %a5@(00000000,%d4:l)
4a8f0: 2069 0004 moveal %a1@(4),%a0
/*
* If we are at a node that is a mount point. Set loc to the
* new fs root node and let them finish evaluating the path.
*/
if ( node->info.directory.mt_fs != NULL ) {
4a8f4: 2942 0004 movel %d2,%a4@(4)
4a8f8: 2941 0008 movel %d1,%a4@(8)
4a8fc: 2949 000c movel %a1,%a4@(12)
4a900: 2940 0010 movel %d0,%a4@(16)
newloc = node->info.directory.mt_fs->mt_fs_root;
*pathloc = newloc;
return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name );
4a904: 4e90 jsr %a0@
4a906: 4fef 000c lea %sp@(12),%sp
4a90a: 2600 movel %d0,%d3
if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) )
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
4a90c: 2003 movel %d3,%d0
4a90e: 4cee 3cfc ffb0 moveml %fp@(-80),%d2-%d7/%a2-%a5
4a914: 4e5e unlk %fp
4a916: 4e75 rts
if ( result == -1 )
return -1;
} else if ( node->type == IMFS_SYM_LINK ) {
result = IMFS_evaluate_link( pathloc, 0 );
4a918: 42a7 clrl %sp@-
4a91a: 2f0c movel %a4,%sp@-
4a91c: 4eb9 0004 a652 jsr 4a652 <IMFS_evaluate_link>
if ( result == -1 )
4a922: 508f addql #8,%sp
if ( result == -1 )
return -1;
} else if ( node->type == IMFS_SYM_LINK ) {
result = IMFS_evaluate_link( pathloc, 0 );
4a924: 2600 movel %d0,%d3
if ( result == -1 )
4a926: 70ff moveq #-1,%d0
4a928: b083 cmpl %d3,%d0
4a92a: 6700 fe66 beqw 4a792 <IMFS_evaluate_for_make+0x86>
4a92e: 2654 moveal %a4@,%a3
4a930: 6000 feca braw 4a7fc <IMFS_evaluate_for_make+0xf0>
/*
* The returned node must be a directory
*/
node = pathloc->node_access;
if ( node->type != IMFS_DIRECTORY )
rtems_set_errno_and_return_minus_one( ENOTDIR );
4a934: 4eb9 0004 da6c jsr 4da6c <__errno>
4a93a: 76ff moveq #-1,%d3
4a93c: 7a14 moveq #20,%d5
4a93e: 2040 moveal %d0,%a0
if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) )
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
4a940: 2003 movel %d3,%d0
/*
* The returned node must be a directory
*/
node = pathloc->node_access;
if ( node->type != IMFS_DIRECTORY )
rtems_set_errno_and_return_minus_one( ENOTDIR );
4a942: 2085 movel %d5,%a0@
if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) )
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
4a944: 4cee 3cfc ffb0 moveml %fp@(-80),%d2-%d7/%a2-%a5
4a94a: 4e5e unlk %fp
4a94c: 4e75 rts
/*
* If we are at a node that is a mount point. Set loc to the
* new fs root node and let them finish evaluating the path.
*/
if ( node->info.directory.mt_fs != NULL ) {
4a94e: 2268 0028 moveal %a0@(40),%a1
newloc = node->info.directory.mt_fs->mt_fs_root;
*pathloc = newloc;
return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name );
4a952: 98ae fffc subl %fp@(-4),%d4
/*
* If we are at a node that is a mount point. Set loc to the
* new fs root node and let them finish evaluating the path.
*/
if ( node->info.directory.mt_fs != NULL ) {
4a956: 2428 0020 movel %a0@(32),%d2
4a95a: 2228 0024 movel %a0@(36),%d1
4a95e: 2028 002c movel %a0@(44),%d0
4a962: 28a8 001c movel %a0@(28),%a4@
newloc = node->info.directory.mt_fs->mt_fs_root;
*pathloc = newloc;
return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name );
4a966: 2f2e 0010 movel %fp@(16),%sp@-
4a96a: 2f0c movel %a4,%sp@-
4a96c: 4875 4800 pea %a5@(00000000,%d4:l)
4a970: 2069 0004 moveal %a1@(4),%a0
/*
* If we are at a node that is a mount point. Set loc to the
* new fs root node and let them finish evaluating the path.
*/
if ( node->info.directory.mt_fs != NULL ) {
4a974: 2942 0004 movel %d2,%a4@(4)
4a978: 2941 0008 movel %d1,%a4@(8)
4a97c: 2949 000c movel %a1,%a4@(12)
4a980: 2940 0010 movel %d0,%a4@(16)
newloc = node->info.directory.mt_fs->mt_fs_root;
*pathloc = newloc;
return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name );
4a984: 4e90 jsr %a0@
4a986: 4fef 000c lea %sp@(12),%sp
4a98a: 2600 movel %d0,%d3
4a98c: 6000 ff7e braw 4a90c <IMFS_evaluate_for_make+0x200>
0004a240 <IMFS_evaluate_hard_link>:
/*
* Check for things that should never happen.
*/
if ( jnode->type != IMFS_HARD_LINK )
4a240: 7003 moveq #3,%d0
int IMFS_evaluate_hard_link(
rtems_filesystem_location_info_t *node, /* IN/OUT */
int flags /* IN */
)
{
4a242: 4e56 0000 linkw %fp,#0
4a246: 2f0a movel %a2,%sp@-
4a248: 246e 0008 moveal %fp@(8),%a2
IMFS_jnode_t *jnode = node->node_access;
4a24c: 2052 moveal %a2@,%a0
/*
* Check for things that should never happen.
*/
if ( jnode->type != IMFS_HARD_LINK )
4a24e: b0a8 0048 cmpl %a0@(72),%d0
4a252: 6640 bnes 4a294 <IMFS_evaluate_hard_link+0x54> <== NEVER TAKEN
/*
* Set the hard link value and the handlers.
*/
node->node_access = jnode->info.hard_link.link_node;
4a254: 24a8 004c movel %a0@(76),%a2@
IMFS_Set_handlers( node );
4a258: 2f0a movel %a2,%sp@-
4a25a: 4eb9 0004 a194 jsr 4a194 <IMFS_Set_handlers>
/*
* Verify we have the correct permissions for this node.
*/
if ( !IMFS_evaluate_permission( node, flags ) )
4a260: 2f2e 000c movel %fp@(12),%sp@-
4a264: 2f0a movel %a2,%sp@-
4a266: 4eb9 0004 a21e jsr 4a21e <IMFS_evaluate_permission>
4a26c: 4fef 000c lea %sp@(12),%sp
4a270: 4a80 tstl %d0
4a272: 670a beqs 4a27e <IMFS_evaluate_hard_link+0x3e> <== NEVER TAKEN
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
4a274: 246e fffc moveal %fp@(-4),%a2
*/
if ( !IMFS_evaluate_permission( node, flags ) )
rtems_set_errno_and_return_minus_one( EACCES );
return result;
4a278: 4280 clrl %d0
}
4a27a: 4e5e unlk %fp
4a27c: 4e75 rts
/*
* Verify we have the correct permissions for this node.
*/
if ( !IMFS_evaluate_permission( node, flags ) )
rtems_set_errno_and_return_minus_one( EACCES );
4a27e: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
return result;
}
4a284: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
/*
* Verify we have the correct permissions for this node.
*/
if ( !IMFS_evaluate_permission( node, flags ) )
rtems_set_errno_and_return_minus_one( EACCES );
4a288: 2040 moveal %d0,%a0 <== NOT EXECUTED
4a28a: 720d moveq #13,%d1 <== NOT EXECUTED
4a28c: 70ff moveq #-1,%d0 <== NOT EXECUTED
return result;
}
4a28e: 4e5e unlk %fp <== NOT EXECUTED
/*
* Verify we have the correct permissions for this node.
*/
if ( !IMFS_evaluate_permission( node, flags ) )
rtems_set_errno_and_return_minus_one( EACCES );
4a290: 2081 movel %d1,%a0@ <== NOT EXECUTED
return result;
}
4a292: 4e75 rts <== NOT EXECUTED
/*
* Check for things that should never happen.
*/
if ( jnode->type != IMFS_HARD_LINK )
rtems_fatal_error_occurred (0xABCD0000);
4a294: 2f3c abcd 0000 movel #-1412628480,%sp@- <== NOT EXECUTED
4a29a: 4eb9 0004 6d6c jsr 46d6c <rtems_fatal_error_occurred> <== NOT EXECUTED
0004a652 <IMFS_evaluate_link>:
int IMFS_evaluate_link(
rtems_filesystem_location_info_t *node, /* IN/OUT */
int flags /* IN */
)
{
4a652: 4e56 ffec linkw %fp,#-20
*/
rtems_filesystem_link_counts ++;
if ( rtems_filesystem_link_counts > MAXSYMLINK ) {
rtems_filesystem_link_counts = 0;
rtems_set_errno_and_return_minus_one( ELOOP );
4a656: 2079 0005 cd60 moveal 5cd60 <rtems_current_user_env>,%a0
int IMFS_evaluate_link(
rtems_filesystem_location_info_t *node, /* IN/OUT */
int flags /* IN */
)
{
4a65c: 48d7 3c04 moveml %d2/%a2-%a5,%sp@
4a660: 266e 0008 moveal %fp@(8),%a3
if ( jnode->type == IMFS_HARD_LINK )
result = IMFS_evaluate_hard_link( node, flags );
else if (jnode->type == IMFS_SYM_LINK )
result = IMFS_evaluate_sym_link( node, flags );
4a664: 4bf9 0004 a5a4 lea 4a5a4 <IMFS_evaluate_sym_link>,%a5
/*
* Follow the Link node.
*/
if ( jnode->type == IMFS_HARD_LINK )
result = IMFS_evaluate_hard_link( node, flags );
4a66a: 49f9 0004 a240 lea 4a240 <IMFS_evaluate_hard_link>,%a4
int IMFS_evaluate_link(
rtems_filesystem_location_info_t *node, /* IN/OUT */
int flags /* IN */
)
{
4a670: 242e 000c movel %fp@(12),%d2
IMFS_jnode_t *jnode;
int result = 0;
do {
jnode = node->node_access;
4a674: 2453 moveal %a3@,%a2
/*
* Increment and check the link counter.
*/
rtems_filesystem_link_counts ++;
if ( rtems_filesystem_link_counts > MAXSYMLINK ) {
4a676: 4281 clrl %d1
/*
* Increment and check the link counter.
*/
rtems_filesystem_link_counts ++;
4a678: 3028 0030 movew %a0@(48),%d0
4a67c: 5280 addql #1,%d0
if ( rtems_filesystem_link_counts > MAXSYMLINK ) {
4a67e: 3200 movew %d0,%d1
/*
* Increment and check the link counter.
*/
rtems_filesystem_link_counts ++;
4a680: 3140 0030 movew %d0,%a0@(48)
if ( rtems_filesystem_link_counts > MAXSYMLINK ) {
4a684: 7005 moveq #5,%d0
4a686: b081 cmpl %d1,%d0
4a688: 6564 bcss 4a6ee <IMFS_evaluate_link+0x9c>
/*
* Follow the Link node.
*/
if ( jnode->type == IMFS_HARD_LINK )
4a68a: 202a 0048 movel %a2@(72),%d0
4a68e: 7203 moveq #3,%d1
4a690: b280 cmpl %d0,%d1
4a692: 6740 beqs 4a6d4 <IMFS_evaluate_link+0x82>
result = IMFS_evaluate_hard_link( node, flags );
else if (jnode->type == IMFS_SYM_LINK )
4a694: 7204 moveq #4,%d1
4a696: b280 cmpl %d0,%d1
4a698: 671a beqs 4a6b4 <IMFS_evaluate_link+0x62>
result = IMFS_evaluate_sym_link( node, flags );
} while ( ( result == 0 ) && ( ( jnode->type == IMFS_SYM_LINK ) ||
4a69a: 5780 subql #3,%d0
4a69c: 7201 moveq #1,%d1
4a69e: b280 cmpl %d0,%d1
4a6a0: 64d2 bccs 4a674 <IMFS_evaluate_link+0x22> <== NEVER TAKEN
4a6a2: 4280 clrl %d0
/*
* Clear link counter.
*/
rtems_filesystem_link_counts = 0;
4a6a4: 4241 clrw %d1
4a6a6: 3141 0030 movew %d1,%a0@(48)
return result;
}
4a6aa: 4cee 3c04 ffec moveml %fp@(-20),%d2/%a2-%a5
4a6b0: 4e5e unlk %fp
4a6b2: 4e75 rts
if ( jnode->type == IMFS_HARD_LINK )
result = IMFS_evaluate_hard_link( node, flags );
else if (jnode->type == IMFS_SYM_LINK )
result = IMFS_evaluate_sym_link( node, flags );
4a6b4: 2f02 movel %d2,%sp@-
4a6b6: 2f0b movel %a3,%sp@-
4a6b8: 4e95 jsr %a5@
4a6ba: 508f addql #8,%sp
} while ( ( result == 0 ) && ( ( jnode->type == IMFS_SYM_LINK ) ||
( jnode->type == IMFS_HARD_LINK ) ) );
4a6bc: 4a80 tstl %d0
4a6be: 6620 bnes 4a6e0 <IMFS_evaluate_link+0x8e>
4a6c0: 202a 0048 movel %a2@(72),%d0
result = IMFS_evaluate_hard_link( node, flags );
else if (jnode->type == IMFS_SYM_LINK )
result = IMFS_evaluate_sym_link( node, flags );
} while ( ( result == 0 ) && ( ( jnode->type == IMFS_SYM_LINK ) ||
4a6c4: 7201 moveq #1,%d1
4a6c6: 5780 subql #3,%d0
( jnode->type == IMFS_HARD_LINK ) ) );
4a6c8: 2079 0005 cd60 moveal 5cd60 <rtems_current_user_env>,%a0
result = IMFS_evaluate_hard_link( node, flags );
else if (jnode->type == IMFS_SYM_LINK )
result = IMFS_evaluate_sym_link( node, flags );
} while ( ( result == 0 ) && ( ( jnode->type == IMFS_SYM_LINK ) ||
4a6ce: b280 cmpl %d0,%d1
4a6d0: 64a2 bccs 4a674 <IMFS_evaluate_link+0x22> <== ALWAYS TAKEN
4a6d2: 60ce bras 4a6a2 <IMFS_evaluate_link+0x50> <== NOT EXECUTED
/*
* Follow the Link node.
*/
if ( jnode->type == IMFS_HARD_LINK )
result = IMFS_evaluate_hard_link( node, flags );
4a6d4: 2f02 movel %d2,%sp@-
4a6d6: 2f0b movel %a3,%sp@-
4a6d8: 4e94 jsr %a4@
4a6da: 508f addql #8,%sp
else if (jnode->type == IMFS_SYM_LINK )
result = IMFS_evaluate_sym_link( node, flags );
} while ( ( result == 0 ) && ( ( jnode->type == IMFS_SYM_LINK ) ||
( jnode->type == IMFS_HARD_LINK ) ) );
4a6dc: 4a80 tstl %d0
4a6de: 67e0 beqs 4a6c0 <IMFS_evaluate_link+0x6e> <== ALWAYS TAKEN
4a6e0: 2079 0005 cd60 moveal 5cd60 <rtems_current_user_env>,%a0
/*
* Clear link counter.
*/
rtems_filesystem_link_counts = 0;
4a6e6: 4241 clrw %d1
4a6e8: 3141 0030 movew %d1,%a0@(48)
4a6ec: 60bc bras 4a6aa <IMFS_evaluate_link+0x58>
*/
rtems_filesystem_link_counts ++;
if ( rtems_filesystem_link_counts > MAXSYMLINK ) {
rtems_filesystem_link_counts = 0;
rtems_set_errno_and_return_minus_one( ELOOP );
4a6ee: 745c moveq #92,%d2
* Increment and check the link counter.
*/
rtems_filesystem_link_counts ++;
if ( rtems_filesystem_link_counts > MAXSYMLINK ) {
rtems_filesystem_link_counts = 0;
4a6f0: 4241 clrw %d1
4a6f2: 3141 0030 movew %d1,%a0@(48)
rtems_set_errno_and_return_minus_one( ELOOP );
4a6f6: 4eb9 0004 da6c jsr 4da6c <__errno>
4a6fc: 2040 moveal %d0,%a0
4a6fe: 70ff moveq #-1,%d0
4a700: 2082 movel %d2,%a0@
*/
rtems_filesystem_link_counts = 0;
return result;
}
4a702: 4cee 3c04 ffec moveml %fp@(-20),%d2/%a2-%a5
4a708: 4e5e unlk %fp <== NOT EXECUTED
0004a5a4 <IMFS_evaluate_sym_link>:
/*
* Check for things that should never happen.
*/
if ( jnode->type != IMFS_SYM_LINK )
4a5a4: 7004 moveq #4,%d0
int IMFS_evaluate_sym_link(
rtems_filesystem_location_info_t *node, /* IN/OUT */
int flags /* IN */
)
{
4a5a6: 4e56 ffec linkw %fp,#-20
4a5aa: 48d7 0c0c moveml %d2-%d3/%a2-%a3,%sp@
4a5ae: 246e 0008 moveal %fp@(8),%a2
4a5b2: 242e 000c movel %fp@(12),%d2
IMFS_jnode_t *jnode = node->node_access;
4a5b6: 2652 moveal %a2@,%a3
/*
* Check for things that should never happen.
*/
if ( jnode->type != IMFS_SYM_LINK )
4a5b8: b0ab 0048 cmpl %a3@(72),%d0
4a5bc: 6600 0088 bnew 4a646 <IMFS_evaluate_sym_link+0xa2>
rtems_fatal_error_occurred (0xABCD0000);
if ( !jnode->Parent )
4a5c0: 202b 0008 movel %a3@(8),%d0
4a5c4: 6774 beqs 4a63a <IMFS_evaluate_sym_link+0x96> <== NEVER TAKEN
* root depending on the symbolic links path.
*/
node->node_access = jnode->Parent;
rtems_filesystem_get_sym_start_loc(
4a5c6: 2f0a movel %a2,%sp@-
4a5c8: 486e fffc pea %fp@(-4)
4a5cc: 2f2b 004c movel %a3@(76),%sp@-
/*
* Move the node_access to either the symbolic links parent or
* root depending on the symbolic links path.
*/
node->node_access = jnode->Parent;
4a5d0: 2480 movel %d0,%a2@
rtems_filesystem_get_sym_start_loc(
4a5d2: 4eb9 0004 b588 jsr 4b588 <rtems_filesystem_get_sym_start_loc>
/*
* Use eval path to evaluate the path of the symbolic link.
*/
result = IMFS_eval_path(
4a5d8: 262b 004c movel %a3@(76),%d3
4a5dc: d6ae fffc addl %fp@(-4),%d3
4a5e0: 2f03 movel %d3,%sp@-
4a5e2: 4eb9 0004 eec4 jsr 4eec4 <strlen>
4a5e8: 2e8a movel %a2,%sp@
4a5ea: 2f02 movel %d2,%sp@-
4a5ec: 2f00 movel %d0,%sp@-
4a5ee: 2f03 movel %d3,%sp@-
4a5f0: 4eb9 0004 a2a0 jsr 4a2a0 <IMFS_eval_path>
4a5f6: 2600 movel %d0,%d3
strlen( &jnode->info.sym_link.name[i] ),
flags,
node
);
IMFS_Set_handlers( node );
4a5f8: 2f0a movel %a2,%sp@-
4a5fa: 4eb9 0004 a194 jsr 4a194 <IMFS_Set_handlers>
/*
* Verify we have the correct permissions for this node.
*/
if ( !IMFS_evaluate_permission( node, flags ) )
4a600: 4fef 001c lea %sp@(28),%sp
4a604: 2e82 movel %d2,%sp@
4a606: 2f0a movel %a2,%sp@-
4a608: 4eb9 0004 a21e jsr 4a21e <IMFS_evaluate_permission>
4a60e: 508f addql #8,%sp
4a610: 4a80 tstl %d0
4a612: 670c beqs 4a620 <IMFS_evaluate_sym_link+0x7c> <== NEVER TAKEN
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
4a614: 2003 movel %d3,%d0
4a616: 4cee 0c0c ffec moveml %fp@(-20),%d2-%d3/%a2-%a3
4a61c: 4e5e unlk %fp
4a61e: 4e75 rts
/*
* Verify we have the correct permissions for this node.
*/
if ( !IMFS_evaluate_permission( node, flags ) )
rtems_set_errno_and_return_minus_one( EACCES );
4a620: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
4a626: 76ff moveq #-1,%d3 <== NOT EXECUTED
4a628: 720d moveq #13,%d1 <== NOT EXECUTED
4a62a: 2040 moveal %d0,%a0 <== NOT EXECUTED
return result;
}
4a62c: 2003 movel %d3,%d0 <== NOT EXECUTED
4a62e: 4cee 0c0c ffec moveml %fp@(-20),%d2-%d3/%a2-%a3 <== NOT EXECUTED
/*
* Verify we have the correct permissions for this node.
*/
if ( !IMFS_evaluate_permission( node, flags ) )
rtems_set_errno_and_return_minus_one( EACCES );
4a634: 2081 movel %d1,%a0@ <== NOT EXECUTED
return result;
}
4a636: 4e5e unlk %fp <== NOT EXECUTED
4a638: 4e75 rts <== NOT EXECUTED
if ( jnode->type != IMFS_SYM_LINK )
rtems_fatal_error_occurred (0xABCD0000);
if ( !jnode->Parent )
rtems_fatal_error_occurred( 0xBAD00000 );
4a63a: 2f3c bad0 0000 movel #-1160773632,%sp@- <== NOT EXECUTED
4a640: 4eb9 0004 6d6c jsr 46d6c <rtems_fatal_error_occurred> <== NOT EXECUTED
/*
* Check for things that should never happen.
*/
if ( jnode->type != IMFS_SYM_LINK )
rtems_fatal_error_occurred (0xABCD0000);
4a646: 2f3c abcd 0000 movel #-1412628480,%sp@- <== NOT EXECUTED
4a64c: 4eb9 0004 6d6c jsr 46d6c <rtems_fatal_error_occurred> <== NOT EXECUTED
00042f80 <IMFS_fifo_close>:
}
int IMFS_fifo_close(
rtems_libio_t *iop
)
{
42f80: 4e56 fff4 linkw %fp,#-12
42f84: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
42f88: 246e 0008 moveal %fp@(8),%a2
IMFS_jnode_t *jnode = iop->pathinfo.node_access;
42f8c: 266a 0018 moveal %a2@(24),%a3
int err = pipe_release(&JNODE2PIPE(jnode), iop);
42f90: 2f0a movel %a2,%sp@-
42f92: 486b 004c pea %a3@(76)
42f96: 4eb9 0004 c738 jsr 4c738 <pipe_release>
if (err == 0) {
42f9c: 508f addql #8,%sp
rtems_libio_t *iop
)
{
IMFS_jnode_t *jnode = iop->pathinfo.node_access;
int err = pipe_release(&JNODE2PIPE(jnode), iop);
42f9e: 2400 movel %d0,%d2
if (err == 0) {
42fa0: 670e beqs 42fb0 <IMFS_fifo_close+0x30> <== ALWAYS TAKEN
iop->flags &= ~LIBIO_FLAGS_OPEN;
IMFS_check_node_remove(jnode);
}
IMFS_FIFO_RETURN(err);
42fa2: 6d2c blts 42fd0 <IMFS_fifo_close+0x50> <== NOT EXECUTED
}
42fa4: 2002 movel %d2,%d0 <== NOT EXECUTED
42fa6: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3 <== NOT EXECUTED
42fac: 4e5e unlk %fp <== NOT EXECUTED
42fae: 4e75 rts <== NOT EXECUTED
IMFS_jnode_t *jnode = iop->pathinfo.node_access;
int err = pipe_release(&JNODE2PIPE(jnode), iop);
if (err == 0) {
iop->flags &= ~LIBIO_FLAGS_OPEN;
42fb0: 203c ffff feff movel #-257,%d0
IMFS_check_node_remove(jnode);
42fb6: 2f0b movel %a3,%sp@-
IMFS_jnode_t *jnode = iop->pathinfo.node_access;
int err = pipe_release(&JNODE2PIPE(jnode), iop);
if (err == 0) {
iop->flags &= ~LIBIO_FLAGS_OPEN;
42fb8: c1aa 0014 andl %d0,%a2@(20)
IMFS_check_node_remove(jnode);
42fbc: 4eb9 0004 369c jsr 4369c <IMFS_check_node_remove>
42fc2: 588f addql #4,%sp
}
IMFS_FIFO_RETURN(err);
}
42fc4: 2002 movel %d2,%d0
42fc6: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3
42fcc: 4e5e unlk %fp
42fce: 4e75 rts
if (err == 0) {
iop->flags &= ~LIBIO_FLAGS_OPEN;
IMFS_check_node_remove(jnode);
}
IMFS_FIFO_RETURN(err);
42fd0: 4eb9 0004 f3c8 jsr 4f3c8 <__errno> <== NOT EXECUTED
42fd6: 4482 negl %d2 <== NOT EXECUTED
42fd8: 2040 moveal %d0,%a0 <== NOT EXECUTED
42fda: 2082 movel %d2,%a0@ <== NOT EXECUTED
42fdc: 74ff moveq #-1,%d2 <== NOT EXECUTED
}
42fde: 2002 movel %d2,%d0 <== NOT EXECUTED
42fe0: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3 <== NOT EXECUTED
42fe6: 4e5e unlk %fp <== NOT EXECUTED
00042da8 <IMFS_fifo_lseek>:
rtems_off64_t IMFS_fifo_lseek(
rtems_libio_t *iop,
rtems_off64_t offset,
int whence
)
{
42da8: 4e56 0000 linkw %fp,#0
42dac: 206e 0008 moveal %fp@(8),%a0
42db0: 2f03 movel %d3,%sp@-
42db2: 2f02 movel %d2,%sp@-
off_t err = pipe_lseek(LIBIO2PIPE(iop), offset, whence, iop);
42db4: 2f08 movel %a0,%sp@-
42db6: 2f2e 0014 movel %fp@(20),%sp@-
42dba: 2068 0018 moveal %a0@(24),%a0
42dbe: 2f2e 0010 movel %fp@(16),%sp@-
42dc2: 2f2e 000c movel %fp@(12),%sp@-
42dc6: 2f28 004c movel %a0@(76),%sp@-
42dca: 4eb9 0004 d050 jsr 4d050 <pipe_lseek>
IMFS_FIFO_RETURN(err);
42dd0: 4fef 0014 lea %sp@(20),%sp
rtems_libio_t *iop,
rtems_off64_t offset,
int whence
)
{
off_t err = pipe_lseek(LIBIO2PIPE(iop), offset, whence, iop);
42dd4: 2600 movel %d0,%d3
42dd6: 2400 movel %d0,%d2
42dd8: 5bc1 smi %d1
42dda: 49c1 extbl %d1
IMFS_FIFO_RETURN(err);
42ddc: 4a81 tstl %d1
42dde: 6b10 bmis 42df0 <IMFS_fifo_lseek+0x48> <== ALWAYS TAKEN
}
42de0: 2001 movel %d1,%d0 <== NOT EXECUTED
42de2: 2202 movel %d2,%d1 <== NOT EXECUTED
42de4: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
42de8: 262e fffc movel %fp@(-4),%d3 <== NOT EXECUTED
42dec: 4e5e unlk %fp <== NOT EXECUTED
42dee: 4e75 rts <== NOT EXECUTED
rtems_off64_t offset,
int whence
)
{
off_t err = pipe_lseek(LIBIO2PIPE(iop), offset, whence, iop);
IMFS_FIFO_RETURN(err);
42df0: 4eb9 0004 f3c8 jsr 4f3c8 <__errno>
42df6: 4483 negl %d3
42df8: 2040 moveal %d0,%a0
42dfa: 72ff moveq #-1,%d1
42dfc: 74ff moveq #-1,%d2
42dfe: 2083 movel %d3,%a0@
}
42e00: 262e fffc movel %fp@(-4),%d3
42e04: 2001 movel %d1,%d0
42e06: 2202 movel %d2,%d1
42e08: 242e fff8 movel %fp@(-8),%d2
42e0c: 4e5e unlk %fp <== NOT EXECUTED
00042e9e <IMFS_fifo_write>:
ssize_t IMFS_fifo_write(
rtems_libio_t *iop,
const void *buffer,
size_t count
)
{
42e9e: 4e56 fff8 linkw %fp,#-8
42ea2: 206e 0008 moveal %fp@(8),%a0
42ea6: 2f0a movel %a2,%sp@-
42ea8: 2f02 movel %d2,%sp@-
IMFS_jnode_t *jnode = iop->pathinfo.node_access;
int err = pipe_write(JNODE2PIPE(jnode), buffer, count, iop);
42eaa: 2f08 movel %a0,%sp@-
42eac: 2f2e 0010 movel %fp@(16),%sp@-
rtems_libio_t *iop,
const void *buffer,
size_t count
)
{
IMFS_jnode_t *jnode = iop->pathinfo.node_access;
42eb0: 2468 0018 moveal %a0@(24),%a2
int err = pipe_write(JNODE2PIPE(jnode), buffer, count, iop);
42eb4: 2f2e 000c movel %fp@(12),%sp@-
42eb8: 2f2a 004c movel %a2@(76),%sp@-
42ebc: 4eb9 0004 ce04 jsr 4ce04 <pipe_write>
if (err > 0) {
42ec2: 4fef 0010 lea %sp@(16),%sp
size_t count
)
{
IMFS_jnode_t *jnode = iop->pathinfo.node_access;
int err = pipe_write(JNODE2PIPE(jnode), buffer, count, iop);
42ec6: 2400 movel %d0,%d2
if (err > 0) {
42ec8: 6f28 bles 42ef2 <IMFS_fifo_write+0x54>
IMFS_mtime_ctime_update(jnode);
42eca: 42a7 clrl %sp@-
42ecc: 486e fff8 pea %fp@(-8)
42ed0: 4eb9 0004 4240 jsr 44240 <gettimeofday>
42ed6: 202e fff8 movel %fp@(-8),%d0
42eda: 508f addql #8,%sp
42edc: 2540 0040 movel %d0,%a2@(64)
42ee0: 2540 0044 movel %d0,%a2@(68)
}
IMFS_FIFO_RETURN(err);
}
42ee4: 2002 movel %d2,%d0
42ee6: 242e fff0 movel %fp@(-16),%d2
42eea: 246e fff4 moveal %fp@(-12),%a2
42eee: 4e5e unlk %fp
42ef0: 4e75 rts
int err = pipe_write(JNODE2PIPE(jnode), buffer, count, iop);
if (err > 0) {
IMFS_mtime_ctime_update(jnode);
}
IMFS_FIFO_RETURN(err);
42ef2: 4a80 tstl %d0
42ef4: 67ee beqs 42ee4 <IMFS_fifo_write+0x46> <== NEVER TAKEN
42ef6: 4eb9 0004 f3c8 jsr 4f3c8 <__errno>
42efc: 4482 negl %d2
42efe: 2040 moveal %d0,%a0
42f00: 2082 movel %d2,%a0@
42f02: 74ff moveq #-1,%d2
}
42f04: 2002 movel %d2,%d0
42f06: 242e fff0 movel %fp@(-16),%d2
42f0a: 246e fff4 moveal %fp@(-12),%a2
42f0e: 4e5e unlk %fp <== NOT EXECUTED
0004aa3c <IMFS_find_match_in_dir>:
IMFS_jnode_t *IMFS_find_match_in_dir(
IMFS_jnode_t *directory,
char *name
)
{
4aa3c: 4e56 fff0 linkw %fp,#-16
4aa40: 48d7 1c04 moveml %d2/%a2-%a4,%sp@
4aa44: 246e 0008 moveal %fp@(8),%a2
4aa48: 242e 000c movel %fp@(12),%d2
#if defined(RTEMS_DEBUG)
assert( directory );
assert( name );
#endif
if ( !name )
4aa4c: 660e bnes 4aa5c <IMFS_find_match_in_dir+0x20> <== ALWAYS TAKEN
if ( !strcmp( name, the_jnode->name ) )
return the_jnode;
}
return 0;
4aa4e: 95ca subal %a2,%a2
}
4aa50: 200a movel %a2,%d0
4aa52: 4cee 1c04 fff0 moveml %fp@(-16),%d2/%a2-%a4
4aa58: 4e5e unlk %fp
4aa5a: 4e75 rts
assert( name );
#endif
if ( !name )
return 0;
if ( !directory )
4aa5c: 4a8a tstl %a2
4aa5e: 67f0 beqs 4aa50 <IMFS_find_match_in_dir+0x14> <== NEVER TAKEN
/*
* Check for "." and ".."
*/
if ( !strcmp( name, dotname ) )
4aa60: 4879 0005 c13e pea 5c13e <dotname>
4aa66: 47f9 0004 e96c lea 4e96c <strcmp>,%a3
4aa6c: 2f02 movel %d2,%sp@-
4aa6e: 4e93 jsr %a3@
4aa70: 508f addql #8,%sp
4aa72: 4a80 tstl %d0
4aa74: 67da beqs 4aa50 <IMFS_find_match_in_dir+0x14> <== NEVER TAKEN
return directory;
if ( !strcmp( name, dotdotname ) )
4aa76: 4879 0005 c140 pea 5c140 <dotdotname>
4aa7c: 2f02 movel %d2,%sp@-
4aa7e: 4e93 jsr %a3@
4aa80: 508f addql #8,%sp
4aa82: 4a80 tstl %d0
4aa84: 6610 bnes 4aa96 <IMFS_find_match_in_dir+0x5a> <== ALWAYS TAKEN
return directory->Parent;
4aa86: 246a 0008 moveal %a2@(8),%a2 <== NOT EXECUTED
if ( !strcmp( name, the_jnode->name ) )
return the_jnode;
}
return 0;
}
4aa8a: 200a movel %a2,%d0 <== NOT EXECUTED
4aa8c: 4cee 1c04 fff0 moveml %fp@(-16),%d2/%a2-%a4 <== NOT EXECUTED
4aa92: 4e5e unlk %fp <== NOT EXECUTED
4aa94: 4e75 rts <== NOT EXECUTED
if ( !strcmp( name, dotdotname ) )
return directory->Parent;
the_chain = &directory->info.directory.Entries;
for ( the_node = the_chain->first;
4aa96: 286a 004c moveal %a2@(76),%a4
4aa9a: 45ea 0050 lea %a2@(80),%a2
4aa9e: b5cc cmpal %a4,%a2
4aaa0: 67ac beqs 4aa4e <IMFS_find_match_in_dir+0x12>
!rtems_chain_is_tail( the_chain, the_node );
the_node = the_node->next ) {
the_jnode = (IMFS_jnode_t *) the_node;
if ( !strcmp( name, the_jnode->name ) )
4aaa2: 486c 000c pea %a4@(12)
4aaa6: 2f02 movel %d2,%sp@-
4aaa8: 4e93 jsr %a3@
4aaaa: 508f addql #8,%sp
4aaac: 4a80 tstl %d0
4aaae: 670a beqs 4aaba <IMFS_find_match_in_dir+0x7e>
the_chain = &directory->info.directory.Entries;
for ( the_node = the_chain->first;
!rtems_chain_is_tail( the_chain, the_node );
the_node = the_node->next ) {
4aab0: 2854 moveal %a4@,%a4
if ( !strcmp( name, dotdotname ) )
return directory->Parent;
the_chain = &directory->info.directory.Entries;
for ( the_node = the_chain->first;
4aab2: b5cc cmpal %a4,%a2
4aab4: 66ec bnes 4aaa2 <IMFS_find_match_in_dir+0x66>
if ( !strcmp( name, the_jnode->name ) )
return the_jnode;
}
return 0;
4aab6: 95ca subal %a2,%a2
4aab8: 6096 bras 4aa50 <IMFS_find_match_in_dir+0x14>
for ( the_node = the_chain->first;
!rtems_chain_is_tail( the_chain, the_node );
the_node = the_node->next ) {
the_jnode = (IMFS_jnode_t *) the_node;
4aaba: 244c moveal %a4,%a2
if ( !strcmp( name, the_jnode->name ) )
return the_jnode;
}
return 0;
}
4aabc: 200a movel %a2,%d0
4aabe: 4cee 1c04 fff0 moveml %fp@(-16),%d2/%a2-%a4
4aac4: 4e5e unlk %fp <== NOT EXECUTED
0004a990 <IMFS_fsunmount>:
((IMFS_jnode_t *)( rtems_chain_head( jnode_get_control( jnode ) )->next))
int IMFS_fsunmount(
rtems_filesystem_mount_table_entry_t *temp_mt_entry
)
{
4a990: 4e56 ffd8 linkw %fp,#-40
4a994: 206e 0008 moveal %fp@(8),%a0
4a998: 48d7 3c04 moveml %d2/%a2-%a5,%sp@
* Traverse tree that starts at the mt_fs_root and deallocate memory
* associated memory space
*/
jnode = (IMFS_jnode_t *)temp_mt_entry->mt_fs_root.node_access;
loc = temp_mt_entry->mt_fs_root;
4a99c: 47ee ffec lea %fp@(-20),%a3
4a9a0: 49f9 0004 a194 lea 4a194 <IMFS_Set_handlers>,%a4
next = jnode->Parent;
loc.node_access = (void *)jnode;
IMFS_Set_handlers( &loc );
if ( jnode->type != IMFS_DIRECTORY ) {
result = IMFS_unlink( NULL, &loc );
4a9a6: 4bf9 0004 25fc lea 425fc <IMFS_unlink>,%a5
* Traverse tree that starts at the mt_fs_root and deallocate memory
* associated memory space
*/
jnode = (IMFS_jnode_t *)temp_mt_entry->mt_fs_root.node_access;
loc = temp_mt_entry->mt_fs_root;
4a9ac: 26a8 001c movel %a0@(28),%a3@
/*
* Traverse tree that starts at the mt_fs_root and deallocate memory
* associated memory space
*/
jnode = (IMFS_jnode_t *)temp_mt_entry->mt_fs_root.node_access;
4a9b0: 2468 001c moveal %a0@(28),%a2
loc = temp_mt_entry->mt_fs_root;
4a9b4: 2d68 0020 fff0 movel %a0@(32),%fp@(-16)
4a9ba: 2d68 0024 fff4 movel %a0@(36),%fp@(-12)
4a9c0: 2d68 0028 fff8 movel %a0@(40),%fp@(-8)
4a9c6: 2d68 002c fffc movel %a0@(44),%fp@(-4)
/*
* Set this to null to indicate that it is being unmounted.
*/
temp_mt_entry->mt_fs_root.node_access = NULL;
4a9cc: 42a8 001c clrl %a0@(28)
do {
next = jnode->Parent;
4a9d0: 242a 0008 movel %a2@(8),%d2
loc.node_access = (void *)jnode;
4a9d4: 2d4a ffec movel %a2,%fp@(-20)
IMFS_Set_handlers( &loc );
4a9d8: 2f0b movel %a3,%sp@-
4a9da: 4e94 jsr %a4@
if ( jnode->type != IMFS_DIRECTORY ) {
4a9dc: 588f addql #4,%sp
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
4a9de: 200a movel %a2,%d0
4a9e0: 0680 0000 0050 addil #80,%d0
4a9e6: 7201 moveq #1,%d1
4a9e8: b2aa 0048 cmpl %a2@(72),%d1
4a9ec: 6634 bnes 4aa22 <IMFS_fsunmount+0x92>
result = IMFS_unlink( NULL, &loc );
if (result != 0)
return -1;
jnode = next;
} else if ( jnode_has_no_children( jnode ) ) {
4a9ee: b0aa 004c cmpl %a2@(76),%d0
4a9f2: 672e beqs 4aa22 <IMFS_fsunmount+0x92>
result = IMFS_unlink( NULL, &loc );
if (result != 0)
return -1;
jnode = next;
}
if ( jnode != NULL ) {
4a9f4: 4a8a tstl %a2
4a9f6: 671e beqs 4aa16 <IMFS_fsunmount+0x86>
if ( jnode->type == IMFS_DIRECTORY ) {
4a9f8: 7001 moveq #1,%d0
4a9fa: b0aa 0048 cmpl %a2@(72),%d0
4a9fe: 66d0 bnes 4a9d0 <IMFS_fsunmount+0x40> <== NEVER TAKEN
4aa00: 200a movel %a2,%d0
4aa02: 0680 0000 0050 addil #80,%d0
if ( jnode_has_children( jnode ) )
4aa08: b0aa 004c cmpl %a2@(76),%d0
4aa0c: 67c2 beqs 4a9d0 <IMFS_fsunmount+0x40>
jnode = jnode_get_first_child( jnode );
4aa0e: 246a 004c moveal %a2@(76),%a2
}
}
} while (jnode != NULL);
4aa12: 4a8a tstl %a2
4aa14: 66ba bnes 4a9d0 <IMFS_fsunmount+0x40> <== ALWAYS TAKEN
return 0;
4aa16: 4280 clrl %d0
}
4aa18: 4cee 3c04 ffd8 moveml %fp@(-40),%d2/%a2-%a5
4aa1e: 4e5e unlk %fp
4aa20: 4e75 rts
result = IMFS_unlink( NULL, &loc );
if (result != 0)
return -1;
jnode = next;
} else if ( jnode_has_no_children( jnode ) ) {
result = IMFS_unlink( NULL, &loc );
4aa22: 2f0b movel %a3,%sp@-
if (result != 0)
return -1;
jnode = next;
4aa24: 2442 moveal %d2,%a2
result = IMFS_unlink( NULL, &loc );
if (result != 0)
return -1;
jnode = next;
} else if ( jnode_has_no_children( jnode ) ) {
result = IMFS_unlink( NULL, &loc );
4aa26: 42a7 clrl %sp@-
4aa28: 4e95 jsr %a5@
if (result != 0)
4aa2a: 508f addql #8,%sp
4aa2c: 4a80 tstl %d0
4aa2e: 67c4 beqs 4a9f4 <IMFS_fsunmount+0x64> <== ALWAYS TAKEN
return -1;
4aa30: 70ff moveq #-1,%d0 <== NOT EXECUTED
}
}
} while (jnode != NULL);
return 0;
}
4aa32: 4cee 3c04 ffd8 moveml %fp@(-40),%d2/%a2-%a5 <== NOT EXECUTED
4aa38: 4e5e unlk %fp <== NOT EXECUTED
0004aac8 <IMFS_get_token>:
const char *path,
int pathlen,
char *token,
int *token_len
)
{
4aac8: 4e56 ffe4 linkw %fp,#-28
4aacc: 48d7 3c1c moveml %d2-%d4/%a2-%a5,%sp@
register char c;
/*
* Copy a name into token. (Remember NULL is a token.)
*/
c = path[i];
4aad0: 246e 0008 moveal %fp@(8),%a2
4aad4: 49f9 0004 3cdc lea 43cdc <rtems_filesystem_is_separator>,%a4
int pathlen,
char *token,
int *token_len
)
{
register int i = 0;
4aada: 4282 clrl %d2
register char c;
/*
* Copy a name into token. (Remember NULL is a token.)
*/
c = path[i];
4aadc: 161a moveb %a2@+,%d3
const char *path,
int pathlen,
char *token,
int *token_len
)
{
4aade: 2a6e 0010 moveal %fp@(16),%a5
register char c;
/*
* Copy a name into token. (Remember NULL is a token.)
*/
c = path[i];
4aae2: 264d moveal %a5,%a3
while ( (!IMFS_is_separator(c)) && (i < pathlen) && (i <= IMFS_NAME_MAX) ) {
4aae4: 1003 moveb %d3,%d0
const char *path,
int pathlen,
char *token,
int *token_len
)
{
4aae6: 282e 000c movel %fp@(12),%d4
/*
* Copy a name into token. (Remember NULL is a token.)
*/
c = path[i];
while ( (!IMFS_is_separator(c)) && (i < pathlen) && (i <= IMFS_NAME_MAX) ) {
4aaea: 49c0 extbl %d0
4aaec: 2f00 movel %d0,%sp@-
4aaee: 4e94 jsr %a4@
4aaf0: 588f addql #4,%sp
4aaf2: 4a80 tstl %d0
4aaf4: 6620 bnes 4ab16 <IMFS_get_token+0x4e>
4aaf6: b882 cmpl %d2,%d4
4aaf8: 6f1c bles 4ab16 <IMFS_get_token+0x4e>
token[i] = c;
if ( i == IMFS_NAME_MAX )
4aafa: 7020 moveq #32,%d0
* Copy a name into token. (Remember NULL is a token.)
*/
c = path[i];
while ( (!IMFS_is_separator(c)) && (i < pathlen) && (i <= IMFS_NAME_MAX) ) {
token[i] = c;
4aafc: 16c3 moveb %d3,%a3@+
if ( i == IMFS_NAME_MAX )
4aafe: b082 cmpl %d2,%d0
4ab00: 6700 0082 beqw 4ab84 <IMFS_get_token+0xbc>
return IMFS_INVALID_TOKEN;
if ( !IMFS_is_valid_name_char(c) )
type = IMFS_INVALID_TOKEN;
c = path [++i];
4ab04: 5282 addql #1,%d2
4ab06: 161a moveb %a2@+,%d3
/*
* Copy a name into token. (Remember NULL is a token.)
*/
c = path[i];
while ( (!IMFS_is_separator(c)) && (i < pathlen) && (i <= IMFS_NAME_MAX) ) {
4ab08: 1003 moveb %d3,%d0
4ab0a: 49c0 extbl %d0
4ab0c: 2f00 movel %d0,%sp@-
4ab0e: 4e94 jsr %a4@
4ab10: 588f addql #4,%sp
4ab12: 4a80 tstl %d0
4ab14: 67e0 beqs 4aaf6 <IMFS_get_token+0x2e>
/*
* Copy a seperator into token.
*/
if ( i == 0 ) {
4ab16: 4a82 tstl %d2
4ab18: 6626 bnes 4ab40 <IMFS_get_token+0x78>
token[i] = c;
4ab1a: 1a83 moveb %d3,%a5@
if ( (token[i] != '\0') && pathlen ) {
4ab1c: 6718 beqs 4ab36 <IMFS_get_token+0x6e>
4ab1e: 4a84 tstl %d4
4ab20: 6714 beqs 4ab36 <IMFS_get_token+0x6e>
/*
* Set token_len to the number of characters copied.
*/
*token_len = i;
4ab22: 206e 0014 moveal %fp@(20),%a0
if ( i == 0 ) {
token[i] = c;
if ( (token[i] != '\0') && pathlen ) {
i++;
4ab26: 7401 moveq #1,%d2
type = IMFS_CURRENT_DIR;
4ab28: 7001 moveq #1,%d0
/*
* Set token_len to the number of characters copied.
*/
*token_len = i;
4ab2a: 2082 movel %d2,%a0@
else if ( strcmp( token, "." ) == 0 )
type = IMFS_CURRENT_DIR;
}
return type;
}
4ab2c: 4cee 3c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a5
4ab32: 4e5e unlk %fp
4ab34: 4e75 rts
/*
* Set token_len to the number of characters copied.
*/
*token_len = i;
4ab36: 206e 0014 moveal %fp@(20),%a0
if ( (token[i] != '\0') && pathlen ) {
i++;
type = IMFS_CURRENT_DIR;
} else {
type = IMFS_NO_MORE_PATH;
4ab3a: 4280 clrl %d0
/*
* Set token_len to the number of characters copied.
*/
*token_len = i;
4ab3c: 2082 movel %d2,%a0@
4ab3e: 60ec bras 4ab2c <IMFS_get_token+0x64>
i++;
type = IMFS_CURRENT_DIR;
} else {
type = IMFS_NO_MORE_PATH;
}
} else if (token[ i-1 ] != '\0') {
4ab40: 4a35 28ff tstb %a5@(ffffffff,%d2:l)
4ab44: 6706 beqs 4ab4c <IMFS_get_token+0x84> <== NEVER TAKEN
token[i] = '\0';
4ab46: 4200 clrb %d0
4ab48: 1b80 2800 moveb %d0,%a5@(00000000,%d2:l)
* If we copied something that was not a seperator see if
* it was a special name.
*/
if ( type == IMFS_NAME ) {
if ( strcmp( token, "..") == 0 )
4ab4c: 4879 0005 c143 pea 5c143 <dotdotname+0x3>
4ab52: 45f9 0004 e96c lea 4e96c <strcmp>,%a2
/*
* Set token_len to the number of characters copied.
*/
*token_len = i;
4ab58: 206e 0014 moveal %fp@(20),%a0
4ab5c: 2082 movel %d2,%a0@
* If we copied something that was not a seperator see if
* it was a special name.
*/
if ( type == IMFS_NAME ) {
if ( strcmp( token, "..") == 0 )
4ab5e: 2f0d movel %a5,%sp@-
4ab60: 4e92 jsr %a2@
4ab62: 508f addql #8,%sp
4ab64: 4a80 tstl %d0
4ab66: 6728 beqs 4ab90 <IMFS_get_token+0xc8>
type = IMFS_UP_DIR;
else if ( strcmp( token, "." ) == 0 )
4ab68: 4879 0005 c144 pea 5c144 <dotdotname+0x4>
4ab6e: 2f0d movel %a5,%sp@-
4ab70: 4e92 jsr %a2@
4ab72: 508f addql #8,%sp
4ab74: 4a80 tstl %d0
4ab76: 6724 beqs 4ab9c <IMFS_get_token+0xd4>
4ab78: 7003 moveq #3,%d0
type = IMFS_CURRENT_DIR;
}
return type;
}
4ab7a: 4cee 3c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a5
4ab80: 4e5e unlk %fp
4ab82: 4e75 rts
while ( (!IMFS_is_separator(c)) && (i < pathlen) && (i <= IMFS_NAME_MAX) ) {
token[i] = c;
if ( i == IMFS_NAME_MAX )
return IMFS_INVALID_TOKEN;
4ab84: 7004 moveq #4,%d0
else if ( strcmp( token, "." ) == 0 )
type = IMFS_CURRENT_DIR;
}
return type;
}
4ab86: 4cee 3c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a5
4ab8c: 4e5e unlk %fp
4ab8e: 4e75 rts
* it was a special name.
*/
if ( type == IMFS_NAME ) {
if ( strcmp( token, "..") == 0 )
type = IMFS_UP_DIR;
4ab90: 7002 moveq #2,%d0
else if ( strcmp( token, "." ) == 0 )
type = IMFS_CURRENT_DIR;
}
return type;
}
4ab92: 4cee 3c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a5
4ab98: 4e5e unlk %fp
4ab9a: 4e75 rts
if ( type == IMFS_NAME ) {
if ( strcmp( token, "..") == 0 )
type = IMFS_UP_DIR;
else if ( strcmp( token, "." ) == 0 )
type = IMFS_CURRENT_DIR;
4ab9c: 7001 moveq #1,%d0
}
return type;
}
4ab9e: 4cee 3c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a5
4aba4: 4e5e unlk %fp <== NOT EXECUTED
00042138 <IMFS_initialize_support>:
int bit_mask;
/*
* check, whether requested bytes per block is valid
*/
for (bit_mask = 16; !is_valid && (bit_mask <= 512); bit_mask <<= 1) {
42138: 7010 moveq #16,%d0
const rtems_filesystem_operations_table *op_table,
const rtems_filesystem_file_handlers_r *memfile_handlers,
const rtems_filesystem_file_handlers_r *directory_handlers,
const rtems_filesystem_file_handlers_r *fifo_handlers
)
{
4213a: 4e56 fff4 linkw %fp,#-12
IMFS_jnode_t *jnode;
/*
* determine/check value for imfs_memfile_bytes_per_block
*/
IMFS_determine_bytes_per_block(&imfs_memfile_bytes_per_block,
4213e: 2079 0005 cc48 moveal 5cc48 <imfs_rq_memfile_bytes_per_block>,%a0
const rtems_filesystem_operations_table *op_table,
const rtems_filesystem_file_handlers_r *memfile_handlers,
const rtems_filesystem_file_handlers_r *directory_handlers,
const rtems_filesystem_file_handlers_r *fifo_handlers
)
{
42144: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
42148: 246e 0008 moveal %fp@(8),%a2
4214c: 242e 0014 movel %fp@(20),%d2
int bit_mask;
/*
* check, whether requested bytes per block is valid
*/
for (bit_mask = 16; !is_valid && (bit_mask <= 512); bit_mask <<= 1) {
42150: b088 cmpl %a0,%d0
42152: 6716 beqs 4216a <IMFS_initialize_support+0x32>
42154: 103c 0005 moveb #5,%d0
42158: 7220 moveq #32,%d1
4215a: 5380 subql #1,%d0
4215c: b288 cmpl %a0,%d1
4215e: 670a beqs 4216a <IMFS_initialize_support+0x32>
42160: d281 addl %d1,%d1
42162: 4a80 tstl %d0
42164: 66f4 bnes 4215a <IMFS_initialize_support+0x22> <== ALWAYS TAKEN
is_valid = true;
}
}
*dest_bytes_per_block = ((is_valid)
? requested_bytes_per_block
: default_bytes_per_block);
42166: 307c 0080 moveaw #128,%a0 <== NOT EXECUTED
for (bit_mask = 16; !is_valid && (bit_mask <= 512); bit_mask <<= 1) {
if (bit_mask == requested_bytes_per_block) {
is_valid = true;
}
}
*dest_bytes_per_block = ((is_valid)
4216a: 23c8 0005 dac8 movel %a0,5dac8 <imfs_memfile_bytes_per_block>
/*
* Create the root node
*
* NOTE: UNIX root is 755 and owned by root/root (0/0).
*/
temp_mt_entry->mt_fs_root.node_access = IMFS_create_root_node();
42170: 4eb9 0004 a15a jsr 4a15a <IMFS_create_root_node>
temp_mt_entry->pathconf_limits_and_options = IMFS_LIMITS_AND_OPTIONS;
/*
* Create custom file system data.
*/
fs_info = calloc( 1, sizeof( IMFS_fs_info_t ) );
42176: 4878 0014 pea 14 <OPER2>
* NOTE: UNIX root is 755 and owned by root/root (0/0).
*/
temp_mt_entry->mt_fs_root.node_access = IMFS_create_root_node();
temp_mt_entry->mt_fs_root.handlers = directory_handlers;
temp_mt_entry->mt_fs_root.ops = op_table;
temp_mt_entry->pathconf_limits_and_options = IMFS_LIMITS_AND_OPTIONS;
4217a: 41f9 0005 c10e lea 5c10e <IMFS_LIMITS_AND_OPTIONS>,%a0
42180: 43f9 0005 c112 lea 5c112 <IMFS_LIMITS_AND_OPTIONS+0x4>,%a1
/*
* Create the root node
*
* NOTE: UNIX root is 755 and owned by root/root (0/0).
*/
temp_mt_entry->mt_fs_root.node_access = IMFS_create_root_node();
42186: 2640 moveal %d0,%a3
temp_mt_entry->mt_fs_root.handlers = directory_handlers;
temp_mt_entry->mt_fs_root.ops = op_table;
temp_mt_entry->pathconf_limits_and_options = IMFS_LIMITS_AND_OPTIONS;
42188: 2550 0038 movel %a0@,%a2@(56)
4218c: 41f9 0005 c116 lea 5c116 <IMFS_LIMITS_AND_OPTIONS+0x8>,%a0
42192: 2551 003c movel %a1@,%a2@(60)
42196: 43f9 0005 c11a lea 5c11a <IMFS_LIMITS_AND_OPTIONS+0xc>,%a1
4219c: 2550 0040 movel %a0@,%a2@(64)
421a0: 41f9 0005 c11e lea 5c11e <IMFS_LIMITS_AND_OPTIONS+0x10>,%a0
421a6: 2551 0044 movel %a1@,%a2@(68)
421aa: 43f9 0005 c122 lea 5c122 <IMFS_LIMITS_AND_OPTIONS+0x14>,%a1
/*
* Create custom file system data.
*/
fs_info = calloc( 1, sizeof( IMFS_fs_info_t ) );
421b0: 4878 0001 pea 1 <ADD>
* NOTE: UNIX root is 755 and owned by root/root (0/0).
*/
temp_mt_entry->mt_fs_root.node_access = IMFS_create_root_node();
temp_mt_entry->mt_fs_root.handlers = directory_handlers;
temp_mt_entry->mt_fs_root.ops = op_table;
temp_mt_entry->pathconf_limits_and_options = IMFS_LIMITS_AND_OPTIONS;
421b4: 2550 0048 movel %a0@,%a2@(72)
421b8: 41f9 0005 c126 lea 5c126 <IMFS_LIMITS_AND_OPTIONS+0x18>,%a0
421be: 2551 004c movel %a1@,%a2@(76)
421c2: 43f9 0005 c12a lea 5c12a <IMFS_LIMITS_AND_OPTIONS+0x1c>,%a1
421c8: 2550 0050 movel %a0@,%a2@(80)
421cc: 41f9 0005 c12e lea 5c12e <IMFS_LIMITS_AND_OPTIONS+0x20>,%a0
421d2: 2551 0054 movel %a1@,%a2@(84)
421d6: 43f9 0005 c132 lea 5c132 <IMFS_LIMITS_AND_OPTIONS+0x24>,%a1
421dc: 2550 0058 movel %a0@,%a2@(88)
421e0: 41f9 0005 c136 lea 5c136 <IMFS_LIMITS_AND_OPTIONS+0x28>,%a0
421e6: 2551 005c movel %a1@,%a2@(92)
421ea: 43f9 0005 c13a lea 5c13a <IMFS_LIMITS_AND_OPTIONS+0x2c>,%a1
421f0: 2550 0060 movel %a0@,%a2@(96)
421f4: 2551 0064 movel %a1@,%a2@(100)
*
* NOTE: UNIX root is 755 and owned by root/root (0/0).
*/
temp_mt_entry->mt_fs_root.node_access = IMFS_create_root_node();
temp_mt_entry->mt_fs_root.handlers = directory_handlers;
temp_mt_entry->mt_fs_root.ops = op_table;
421f8: 256e 000c 0028 movel %fp@(12),%a2@(40)
/*
* Create the root node
*
* NOTE: UNIX root is 755 and owned by root/root (0/0).
*/
temp_mt_entry->mt_fs_root.node_access = IMFS_create_root_node();
421fe: 2540 001c movel %d0,%a2@(28)
temp_mt_entry->mt_fs_root.handlers = directory_handlers;
42202: 2542 0024 movel %d2,%a2@(36)
temp_mt_entry->pathconf_limits_and_options = IMFS_LIMITS_AND_OPTIONS;
/*
* Create custom file system data.
*/
fs_info = calloc( 1, sizeof( IMFS_fs_info_t ) );
42206: 4eb9 0004 292c jsr 4292c <calloc>
if ( !fs_info ) {
4220c: 508f addql #8,%sp
temp_mt_entry->pathconf_limits_and_options = IMFS_LIMITS_AND_OPTIONS;
/*
* Create custom file system data.
*/
fs_info = calloc( 1, sizeof( IMFS_fs_info_t ) );
4220e: 2040 moveal %d0,%a0
if ( !fs_info ) {
42210: 4a80 tstl %d0
42212: 673c beqs 42250 <IMFS_initialize_support+0x118> <== NEVER TAKEN
free(temp_mt_entry->mt_fs_root.node_access);
rtems_set_errno_and_return_minus_one(ENOMEM);
}
temp_mt_entry->fs_info = fs_info;
42214: 2548 0034 movel %a0,%a2@(52)
/*
* Set st_ino for the root to 1.
*/
fs_info->instance = imfs_instance++;
42218: 2239 0005 dacc movel 5dacc <imfs_instance.5796>,%d1
4221e: 2241 moveal %d1,%a1
42220: 5289 addql #1,%a1
fs_info->fifo_handlers = fifo_handlers;
jnode = temp_mt_entry->mt_fs_root.node_access;
jnode->st_ino = fs_info->ino_count;
return 0;
42222: 4280 clrl %d0
/*
* Set st_ino for the root to 1.
*/
fs_info->instance = imfs_instance++;
42224: 2081 movel %d1,%a0@
fs_info->ino_count = 1;
42226: 7201 moveq #1,%d1
fs_info->memfile_handlers = memfile_handlers;
42228: 216e 0010 0008 movel %fp@(16),%a0@(8)
fs_info->directory_handlers = directory_handlers;
fs_info->fifo_handlers = fifo_handlers;
4222e: 216e 0018 0010 movel %fp@(24),%a0@(16)
*/
fs_info->instance = imfs_instance++;
fs_info->ino_count = 1;
fs_info->memfile_handlers = memfile_handlers;
fs_info->directory_handlers = directory_handlers;
42234: 2142 000c movel %d2,%a0@(12)
/*
* Set st_ino for the root to 1.
*/
fs_info->instance = imfs_instance++;
fs_info->ino_count = 1;
42238: 2141 0004 movel %d1,%a0@(4)
fs_info->memfile_handlers = memfile_handlers;
fs_info->directory_handlers = directory_handlers;
fs_info->fifo_handlers = fifo_handlers;
jnode = temp_mt_entry->mt_fs_root.node_access;
jnode->st_ino = fs_info->ino_count;
4223c: 2741 0034 movel %d1,%a3@(52)
return 0;
}
42240: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3
/*
* Set st_ino for the root to 1.
*/
fs_info->instance = imfs_instance++;
42246: 23c9 0005 dacc movel %a1,5dacc <imfs_instance.5796>
jnode = temp_mt_entry->mt_fs_root.node_access;
jnode->st_ino = fs_info->ino_count;
return 0;
}
4224c: 4e5e unlk %fp
4224e: 4e75 rts
/*
* Create custom file system data.
*/
fs_info = calloc( 1, sizeof( IMFS_fs_info_t ) );
if ( !fs_info ) {
free(temp_mt_entry->mt_fs_root.node_access);
42250: 2f0b movel %a3,%sp@- <== NOT EXECUTED
42252: 4eb9 0004 2db8 jsr 42db8 <free> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENOMEM);
42258: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
4225e: 588f addql #4,%sp <== NOT EXECUTED
42260: 720c moveq #12,%d1 <== NOT EXECUTED
42262: 2040 moveal %d0,%a0 <== NOT EXECUTED
42264: 70ff moveq #-1,%d0 <== NOT EXECUTED
jnode = temp_mt_entry->mt_fs_root.node_access;
jnode->st_ino = fs_info->ino_count;
return 0;
}
42266: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3 <== NOT EXECUTED
* Create custom file system data.
*/
fs_info = calloc( 1, sizeof( IMFS_fs_info_t ) );
if ( !fs_info ) {
free(temp_mt_entry->mt_fs_root.node_access);
rtems_set_errno_and_return_minus_one(ENOMEM);
4226c: 2081 movel %d1,%a0@ <== NOT EXECUTED
jnode = temp_mt_entry->mt_fs_root.node_access;
jnode->st_ino = fs_info->ino_count;
return 0;
}
4226e: 4e5e unlk %fp <== NOT EXECUTED
...
00042274 <IMFS_link>:
/*
* Verify this node can be linked to.
*/
info.hard_link.link_node = to_loc->node_access;
if ( info.hard_link.link_node->st_nlink >= LINK_MAX )
42274: 4280 clrl %d0
42276: 7207 moveq #7,%d1
int IMFS_link(
rtems_filesystem_location_info_t *to_loc, /* IN */
rtems_filesystem_location_info_t *parent_loc, /* IN */
const char *token /* IN */
)
{
42278: 4e56 ffbc linkw %fp,#-68
4227c: 206e 0008 moveal %fp@(8),%a0
42280: 2f03 movel %d3,%sp@-
int i;
/*
* Verify this node can be linked to.
*/
info.hard_link.link_node = to_loc->node_access;
42282: 2050 moveal %a0@,%a0
int IMFS_link(
rtems_filesystem_location_info_t *to_loc, /* IN */
rtems_filesystem_location_info_t *parent_loc, /* IN */
const char *token /* IN */
)
{
42284: 2f02 movel %d2,%sp@-
42286: 242e 0010 movel %fp@(16),%d2
/*
* Verify this node can be linked to.
*/
info.hard_link.link_node = to_loc->node_access;
if ( info.hard_link.link_node->st_nlink >= LINK_MAX )
4228a: 3028 0032 movew %a0@(50),%d0
int i;
/*
* Verify this node can be linked to.
*/
info.hard_link.link_node = to_loc->node_access;
4228e: 2d48 ffe0 movel %a0,%fp@(-32)
if ( info.hard_link.link_node->st_nlink >= LINK_MAX )
42292: b280 cmpl %d0,%d1
42294: 6578 bcss 4230e <IMFS_link+0x9a>
rtems_set_errno_and_return_minus_one( EMLINK );
/*
* Remove any separators at the end of the string.
*/
IMFS_get_token( token, strlen( token ), new_name, &i );
42296: 2f02 movel %d2,%sp@-
42298: 260e movel %fp,%d3
4229a: 0683 ffff ffbf addil #-65,%d3
422a0: 4eb9 0004 eec4 jsr 4eec4 <strlen>
422a6: 588f addql #4,%sp
422a8: 486e fffc pea %fp@(-4)
422ac: 2f03 movel %d3,%sp@-
422ae: 2f00 movel %d0,%sp@-
422b0: 2f02 movel %d2,%sp@-
422b2: 4eb9 0004 aac8 jsr 4aac8 <IMFS_get_token>
* was ONLY passed a NULL when we created the root node. We
* added a new IMFS_create_root_node() so this path no longer
* existed. The result was simpler code which should not have
* this path.
*/
new_node = IMFS_create_node(
422b8: 486e ffe0 pea %fp@(-32)
422bc: 2f3c 0000 a1ff movel #41471,%sp@-
422c2: 2f03 movel %d3,%sp@-
422c4: 4878 0003 pea 3 <DIVIDE>
422c8: 2f2e 000c movel %fp@(12),%sp@-
422cc: 4eb9 0004 9fa4 jsr 49fa4 <IMFS_create_node>
new_name,
( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )),
&info
);
if ( !new_node )
422d2: 4fef 0024 lea %sp@(36),%sp
422d6: 4a80 tstl %d0
422d8: 674e beqs 42328 <IMFS_link+0xb4> <== NEVER TAKEN
rtems_set_errno_and_return_minus_one( ENOMEM );
/*
* Increment the link count of the node being pointed to.
*/
info.hard_link.link_node->st_nlink++;
422da: 206e ffe0 moveal %fp@(-32),%a0
422de: 3028 0032 movew %a0@(50),%d0
422e2: 5280 addql #1,%d0
422e4: 3140 0032 movew %d0,%a0@(50)
IMFS_update_ctime( info.hard_link.link_node );
422e8: 42a7 clrl %sp@-
422ea: 486e fff4 pea %fp@(-12)
422ee: 4eb9 0004 2e48 jsr 42e48 <gettimeofday>
422f4: 206e ffe0 moveal %fp@(-32),%a0
return 0;
422f8: 508f addql #8,%sp
422fa: 4280 clrl %d0
/*
* Increment the link count of the node being pointed to.
*/
info.hard_link.link_node->st_nlink++;
IMFS_update_ctime( info.hard_link.link_node );
422fc: 216e fff4 0044 movel %fp@(-12),%a0@(68)
return 0;
}
42302: 242e ffb4 movel %fp@(-76),%d2
42306: 262e ffb8 movel %fp@(-72),%d3
4230a: 4e5e unlk %fp
4230c: 4e75 rts
/*
* Verify this node can be linked to.
*/
info.hard_link.link_node = to_loc->node_access;
if ( info.hard_link.link_node->st_nlink >= LINK_MAX )
rtems_set_errno_and_return_minus_one( EMLINK );
4230e: 4eb9 0004 da6c jsr 4da6c <__errno>
42314: 741f moveq #31,%d2
42316: 2040 moveal %d0,%a0
42318: 70ff moveq #-1,%d0
4231a: 2082 movel %d2,%a0@
*/
info.hard_link.link_node->st_nlink++;
IMFS_update_ctime( info.hard_link.link_node );
return 0;
}
4231c: 242e ffb4 movel %fp@(-76),%d2
42320: 262e ffb8 movel %fp@(-72),%d3
42324: 4e5e unlk %fp
42326: 4e75 rts
( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )),
&info
);
if ( !new_node )
rtems_set_errno_and_return_minus_one( ENOMEM );
42328: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
*/
info.hard_link.link_node->st_nlink++;
IMFS_update_ctime( info.hard_link.link_node );
return 0;
}
4232e: 242e ffb4 movel %fp@(-76),%d2 <== NOT EXECUTED
( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )),
&info
);
if ( !new_node )
rtems_set_errno_and_return_minus_one( ENOMEM );
42332: 2040 moveal %d0,%a0 <== NOT EXECUTED
42334: 720c moveq #12,%d1 <== NOT EXECUTED
42336: 70ff moveq #-1,%d0 <== NOT EXECUTED
*/
info.hard_link.link_node->st_nlink++;
IMFS_update_ctime( info.hard_link.link_node );
return 0;
}
42338: 262e ffb8 movel %fp@(-72),%d3 <== NOT EXECUTED
4233c: 4e5e unlk %fp <== NOT EXECUTED
( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )),
&info
);
if ( !new_node )
rtems_set_errno_and_return_minus_one( ENOMEM );
4233e: 2081 movel %d1,%a0@ <== NOT EXECUTED
*/
info.hard_link.link_node->st_nlink++;
IMFS_update_ctime( info.hard_link.link_node );
return 0;
}
...
0004c82e <IMFS_memfile_addblock>:
MEMFILE_STATIC int IMFS_memfile_addblock(
IMFS_jnode_t *the_jnode,
unsigned int block
)
{
4c82e: 4e56 0000 linkw %fp,#0
4c832: 2f0a movel %a2,%sp@-
#if defined(RTEMS_DEBUG)
assert( the_jnode );
assert( the_jnode->type == IMFS_MEMORY_FILE );
#endif
block_entry_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 1 );
4c834: 4878 0001 pea 1 <ADD>
4c838: 2f2e 000c movel %fp@(12),%sp@-
4c83c: 2f2e 0008 movel %fp@(8),%sp@-
4c840: 4eb9 0004 c414 jsr 4c414 <IMFS_memfile_get_block_pointer>
if ( *block_entry_ptr )
4c846: 4fef 000c lea %sp@(12),%sp
#if defined(RTEMS_DEBUG)
assert( the_jnode );
assert( the_jnode->type == IMFS_MEMORY_FILE );
#endif
block_entry_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 1 );
4c84a: 2440 moveal %d0,%a2
if ( *block_entry_ptr )
4c84c: 4a92 tstl %a2@
4c84e: 670a beqs 4c85a <IMFS_memfile_addblock+0x2c>
if ( !memory )
return 1;
*block_entry_ptr = memory;
return 0;
}
4c850: 246e fffc moveal %fp@(-4),%a2
assert( the_jnode->type == IMFS_MEMORY_FILE );
#endif
block_entry_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 1 );
if ( *block_entry_ptr )
return 0;
4c854: 4280 clrl %d0
if ( !memory )
return 1;
*block_entry_ptr = memory;
return 0;
}
4c856: 4e5e unlk %fp
4c858: 4e75 rts
#if 0
fprintf(stdout, "%d %p", block, block_entry_ptr );
fflush(stdout);
#endif
memory = memfile_alloc_block();
4c85a: 4eb9 0004 c3f0 jsr 4c3f0 <memfile_alloc_block>
if ( !memory )
4c860: 4a80 tstl %d0
4c862: 670c beqs 4c870 <IMFS_memfile_addblock+0x42> <== NEVER TAKEN
return 1;
*block_entry_ptr = memory;
4c864: 2480 movel %d0,%a2@
return 0;
}
4c866: 246e fffc moveal %fp@(-4),%a2
memory = memfile_alloc_block();
if ( !memory )
return 1;
*block_entry_ptr = memory;
return 0;
4c86a: 4280 clrl %d0
}
4c86c: 4e5e unlk %fp
4c86e: 4e75 rts
4c870: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
fflush(stdout);
#endif
memory = memfile_alloc_block();
if ( !memory )
return 1;
4c874: 7001 moveq #1,%d0 <== NOT EXECUTED
*block_entry_ptr = memory;
return 0;
}
4c876: 4e5e unlk %fp <== NOT EXECUTED
0004ca2c <IMFS_memfile_extend>:
#if defined(RTEMS_DEBUG)
assert( the_jnode );
assert( the_jnode->type == IMFS_MEMORY_FILE );
#endif
if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE )
4ca2c: 4280 clrl %d0
MEMFILE_STATIC int IMFS_memfile_extend(
IMFS_jnode_t *the_jnode,
off_t new_length
)
{
4ca2e: 4e56 ffdc linkw %fp,#-36
4ca32: 48d7 1cfc moveml %d2-%d7/%a2-%a4,%sp@
#if defined(RTEMS_DEBUG)
assert( the_jnode );
assert( the_jnode->type == IMFS_MEMORY_FILE );
#endif
if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE )
4ca36: 2c39 0005 dac8 movel 5dac8 <imfs_memfile_bytes_per_block>,%d6
4ca3c: 2406 movel %d6,%d2
4ca3e: e48a lsrl #2,%d2
4ca40: 2802 movel %d2,%d4
4ca42: 5284 addql #1,%d4
4ca44: 4c02 4800 mulsl %d2,%d4
MEMFILE_STATIC int IMFS_memfile_extend(
IMFS_jnode_t *the_jnode,
off_t new_length
)
{
4ca48: 246e 0008 moveal %fp@(8),%a2
#if defined(RTEMS_DEBUG)
assert( the_jnode );
assert( the_jnode->type == IMFS_MEMORY_FILE );
#endif
if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE )
4ca4c: 5284 addql #1,%d4
4ca4e: 4c02 4800 mulsl %d2,%d4
MEMFILE_STATIC int IMFS_memfile_extend(
IMFS_jnode_t *the_jnode,
off_t new_length
)
{
4ca52: 242e 000c movel %fp@(12),%d2
4ca56: 262e 0010 movel %fp@(16),%d3
#if defined(RTEMS_DEBUG)
assert( the_jnode );
assert( the_jnode->type == IMFS_MEMORY_FILE );
#endif
if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE )
4ca5a: 5384 subql #1,%d4
4ca5c: 4c06 4800 mulsl %d6,%d4
4ca60: 2204 movel %d4,%d1
4ca62: 2800 movel %d0,%d4
4ca64: 2a01 movel %d1,%d5
4ca66: 9a83 subl %d3,%d5
4ca68: 9982 subxl %d2,%d4
4ca6a: 6f00 00ae blew 4cb1a <IMFS_memfile_extend+0xee>
rtems_set_errno_and_return_minus_one( EINVAL );
if ( new_length <= the_jnode->info.file.size )
4ca6e: 282a 004c movel %a2@(76),%d4
4ca72: 2a2a 0050 movel %a2@(80),%d5
4ca76: 2002 movel %d2,%d0
4ca78: 2203 movel %d3,%d1
4ca7a: 9285 subl %d5,%d1
4ca7c: 9184 subxl %d4,%d0
4ca7e: 6f5e bles 4cade <IMFS_memfile_extend+0xb2>
/*
* Calculate the number of range of blocks to allocate
*/
new_blocks = new_length / IMFS_MEMFILE_BYTES_PER_BLOCK;
4ca80: 49f9 0005 9800 lea 59800 <__divdi3>,%a4
4ca86: 2e06 movel %d6,%d7
4ca88: 5bc6 smi %d6
4ca8a: 49c6 extbl %d6
4ca8c: 2f07 movel %d7,%sp@-
4ca8e: 2f06 movel %d6,%sp@-
4ca90: 2f03 movel %d3,%sp@-
4ca92: 2f02 movel %d2,%sp@-
4ca94: 4e94 jsr %a4@
4ca96: 4fef 0010 lea %sp@(16),%sp
4ca9a: 2641 moveal %d1,%a3
old_blocks = the_jnode->info.file.size / IMFS_MEMFILE_BYTES_PER_BLOCK;
4ca9c: 2f07 movel %d7,%sp@-
4ca9e: 2f06 movel %d6,%sp@-
4caa0: 2f05 movel %d5,%sp@-
4caa2: 2f04 movel %d4,%sp@-
4caa4: 4e94 jsr %a4@
4caa6: 4fef 0010 lea %sp@(16),%sp
4caaa: 2c01 movel %d1,%d6
/*
* Now allocate each of those blocks.
*/
for ( block=old_blocks ; block<=new_blocks ; block++ ) {
4caac: b28b cmpl %a3,%d1
4caae: 621a bhis 4caca <IMFS_memfile_extend+0x9e> <== NEVER TAKEN
4cab0: 2801 movel %d1,%d4
4cab2: 49f9 0004 c82e lea 4c82e <IMFS_memfile_addblock>,%a4
if ( IMFS_memfile_addblock( the_jnode, block ) ) {
4cab8: 2f04 movel %d4,%sp@-
4caba: 2f0a movel %a2,%sp@-
4cabc: 4e94 jsr %a4@
4cabe: 508f addql #8,%sp
4cac0: 4a80 tstl %d0
4cac2: 6626 bnes 4caea <IMFS_memfile_extend+0xbe> <== NEVER TAKEN
/*
* Now allocate each of those blocks.
*/
for ( block=old_blocks ; block<=new_blocks ; block++ ) {
4cac4: 5284 addql #1,%d4
4cac6: b88b cmpl %a3,%d4
4cac8: 63ee blss 4cab8 <IMFS_memfile_extend+0x8c>
/*
* Set the new length of the file.
*/
the_jnode->info.file.size = new_length;
return 0;
4caca: 4280 clrl %d0
/*
* Set the new length of the file.
*/
the_jnode->info.file.size = new_length;
4cacc: 2542 004c movel %d2,%a2@(76)
4cad0: 2543 0050 movel %d3,%a2@(80)
return 0;
}
4cad4: 4cee 1cfc ffdc moveml %fp@(-36),%d2-%d7/%a2-%a4
4cada: 4e5e unlk %fp
4cadc: 4e75 rts
if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE )
rtems_set_errno_and_return_minus_one( EINVAL );
if ( new_length <= the_jnode->info.file.size )
return 0;
4cade: 4280 clrl %d0
* Set the new length of the file.
*/
the_jnode->info.file.size = new_length;
return 0;
}
4cae0: 4cee 1cfc ffdc moveml %fp@(-36),%d2-%d7/%a2-%a4
4cae6: 4e5e unlk %fp
4cae8: 4e75 rts
* Now allocate each of those blocks.
*/
for ( block=old_blocks ; block<=new_blocks ; block++ ) {
if ( IMFS_memfile_addblock( the_jnode, block ) ) {
for ( ; block>=old_blocks ; block-- ) {
4caea: b886 cmpl %d6,%d4 <== NOT EXECUTED
4caec: 6514 bcss 4cb02 <IMFS_memfile_extend+0xd6> <== NOT EXECUTED
4caee: 47f9 0004 c9fa lea 4c9fa <IMFS_memfile_remove_block>,%a3 <== NOT EXECUTED
IMFS_memfile_remove_block( the_jnode, block );
4caf4: 2f04 movel %d4,%sp@- <== NOT EXECUTED
* Now allocate each of those blocks.
*/
for ( block=old_blocks ; block<=new_blocks ; block++ ) {
if ( IMFS_memfile_addblock( the_jnode, block ) ) {
for ( ; block>=old_blocks ; block-- ) {
4caf6: 5384 subql #1,%d4 <== NOT EXECUTED
IMFS_memfile_remove_block( the_jnode, block );
4caf8: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4cafa: 4e93 jsr %a3@ <== NOT EXECUTED
* Now allocate each of those blocks.
*/
for ( block=old_blocks ; block<=new_blocks ; block++ ) {
if ( IMFS_memfile_addblock( the_jnode, block ) ) {
for ( ; block>=old_blocks ; block-- ) {
4cafc: 508f addql #8,%sp <== NOT EXECUTED
4cafe: b886 cmpl %d6,%d4 <== NOT EXECUTED
4cb00: 64f2 bccs 4caf4 <IMFS_memfile_extend+0xc8> <== NOT EXECUTED
IMFS_memfile_remove_block( the_jnode, block );
}
rtems_set_errno_and_return_minus_one( ENOSPC );
4cb02: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
4cb08: 741c moveq #28,%d2 <== NOT EXECUTED
4cb0a: 2040 moveal %d0,%a0 <== NOT EXECUTED
4cb0c: 70ff moveq #-1,%d0 <== NOT EXECUTED
4cb0e: 2082 movel %d2,%a0@ <== NOT EXECUTED
* Set the new length of the file.
*/
the_jnode->info.file.size = new_length;
return 0;
}
4cb10: 4cee 1cfc ffdc moveml %fp@(-36),%d2-%d7/%a2-%a4 <== NOT EXECUTED
4cb16: 4e5e unlk %fp <== NOT EXECUTED
4cb18: 4e75 rts <== NOT EXECUTED
assert( the_jnode );
assert( the_jnode->type == IMFS_MEMORY_FILE );
#endif
if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE )
rtems_set_errno_and_return_minus_one( EINVAL );
4cb1a: 4eb9 0004 da6c jsr 4da6c <__errno>
4cb20: 7616 moveq #22,%d3
4cb22: 2040 moveal %d0,%a0
4cb24: 70ff moveq #-1,%d0
4cb26: 2083 movel %d3,%a0@
* Set the new length of the file.
*/
the_jnode->info.file.size = new_length;
return 0;
}
4cb28: 4cee 1cfc ffdc moveml %fp@(-36),%d2-%d7/%a2-%a4
4cb2e: 4e5e unlk %fp <== NOT EXECUTED
0004c414 <IMFS_memfile_get_block_pointer>:
#endif
IMFS_jnode_t *the_jnode,
unsigned int block,
int malloc_it
)
{
4c414: 4e56 fff0 linkw %fp,#-16
/*
* Is the block number in the simple indirect portion?
*/
if ( my_block <= LAST_INDIRECT ) {
4c418: 2239 0005 dac8 movel 5dac8 <imfs_memfile_bytes_per_block>,%d1
4c41e: e489 lsrl #2,%d1
4c420: 2001 movel %d1,%d0
4c422: 5380 subql #1,%d0
#endif
IMFS_jnode_t *the_jnode,
unsigned int block,
int malloc_it
)
{
4c424: 48d7 041c moveml %d2-%d4/%a2,%sp@
4c428: 246e 0008 moveal %fp@(8),%a2
4c42c: 242e 000c movel %fp@(12),%d2
4c430: 206e 0010 moveal %fp@(16),%a0
/*
* Is the block number in the simple indirect portion?
*/
if ( my_block <= LAST_INDIRECT ) {
4c434: b082 cmpl %d2,%d0
4c436: 651e bcss 4c456 <IMFS_memfile_get_block_pointer+0x42>
p = info->indirect;
4c438: 226a 0054 moveal %a2@(84),%a1
if ( malloc_it ) {
4c43c: 4a88 tstl %a0
4c43e: 675c beqs 4c49c <IMFS_memfile_get_block_pointer+0x88>
if ( !p ) {
4c440: 4a89 tstl %a1
4c442: 6700 00be beqw 4c502 <IMFS_memfile_get_block_pointer+0xee>
}
if ( !p )
return 0;
return &info->indirect[ my_block ];
4c446: 43f1 2c00 lea %a1@(00000000,%d2:l:4),%a1
4c44a: 2009 movel %a1,%d0
/*
* This means the requested block number is out of range.
*/
return 0;
}
4c44c: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2
4c452: 4e5e unlk %fp
4c454: 4e75 rts
/*
* Is the block number in the doubly indirect portion?
*/
if ( my_block <= LAST_DOUBLY_INDIRECT ) {
4c456: 2001 movel %d1,%d0
4c458: 5280 addql #1,%d0
4c45a: 4c01 0800 mulsl %d1,%d0
4c45e: 2240 moveal %d0,%a1
4c460: 5389 subql #1,%a1
4c462: b3c2 cmpal %d2,%a1
4c464: 6546 bcss 4c4ac <IMFS_memfile_get_block_pointer+0x98><== NEVER TAKEN
#if 0
fprintf(stdout, "(d %d) ", block );
fflush(stdout);
#endif
my_block -= FIRST_DOUBLY_INDIRECT;
4c466: 9481 subl %d1,%d2
singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS;
doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS;
p = info->doubly_indirect;
4c468: 226a 0058 moveal %a2@(88),%a1
fflush(stdout);
#endif
my_block -= FIRST_DOUBLY_INDIRECT;
singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS;
4c46c: 4c41 2003 remul %d1,%d3,%d2
4c470: 4c41 2002 remul %d1,%d2,%d2
doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS;
p = info->doubly_indirect;
if ( malloc_it ) {
4c474: 4a88 tstl %a0
4c476: 6700 0132 beqw 4c5aa <IMFS_memfile_get_block_pointer+0x196>
if ( !p ) {
4c47a: 4a89 tstl %a1
4c47c: 6700 009e beqw 4c51c <IMFS_memfile_get_block_pointer+0x108>
if ( !p )
return 0;
info->doubly_indirect = p;
}
p1 = (block_p *)p[ doubly ];
4c480: 45f1 2c00 lea %a1@(00000000,%d2:l:4),%a2
4c484: 2052 moveal %a2@,%a0
if ( !p1 ) {
4c486: 4a88 tstl %a0
4c488: 6700 00b0 beqw 4c53a <IMFS_memfile_get_block_pointer+0x126>
#if 0
fprintf(stdout, "(d %d %d %d %d %p %p) ", block, my_block, doubly,
singly, p, &p[singly] );
fflush(stdout);
#endif
return (block_p *)&p[ singly ];
4c48c: 41f0 3c00 lea %a0@(00000000,%d3:l:4),%a0
4c490: 2008 movel %a0,%d0
/*
* This means the requested block number is out of range.
*/
return 0;
}
4c492: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2
4c498: 4e5e unlk %fp
4c49a: 4e75 rts
info->indirect = p;
}
return &info->indirect[ my_block ];
}
if ( !p )
4c49c: 4a89 tstl %a1
4c49e: 66a6 bnes 4c446 <IMFS_memfile_get_block_pointer+0x32><== ALWAYS TAKEN
fprintf(stdout, "(t %d %d %d %d %d) ", block, my_block, triply, doubly, singly );
fflush(stdout);
#endif
p1 = (block_p *) p[ triply ];
if ( !p1 )
return 0;
4c4a0: 4280 clrl %d0 <== NOT EXECUTED
/*
* This means the requested block number is out of range.
*/
return 0;
}
4c4a2: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2 <== NOT EXECUTED
4c4a8: 4e5e unlk %fp <== NOT EXECUTED
4c4aa: 4e75 rts <== NOT EXECUTED
#endif
/*
* Is the block number in the triply indirect portion?
*/
if ( my_block <= LAST_TRIPLY_INDIRECT ) {
4c4ac: 2600 movel %d0,%d3
4c4ae: 5283 addql #1,%d3
4c4b0: 4c01 3800 mulsl %d1,%d3
4c4b4: 5383 subql #1,%d3
4c4b6: b682 cmpl %d2,%d3
4c4b8: 65e6 bcss 4c4a0 <IMFS_memfile_get_block_pointer+0x8c><== NEVER TAKEN
my_block -= FIRST_TRIPLY_INDIRECT;
4c4ba: 9480 subl %d0,%d2
singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS;
4c4bc: 4c41 2004 remul %d1,%d4,%d2
4c4c0: 4c41 2002 remul %d1,%d2,%d2
doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS;
triply = doubly / IMFS_MEMFILE_BLOCK_SLOTS;
doubly %= IMFS_MEMFILE_BLOCK_SLOTS;
p = info->triply_indirect;
4c4c4: 226a 005c moveal %a2@(92),%a1
if ( my_block <= LAST_TRIPLY_INDIRECT ) {
my_block -= FIRST_TRIPLY_INDIRECT;
singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS;
doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS;
triply = doubly / IMFS_MEMFILE_BLOCK_SLOTS;
4c4c8: 4c41 2003 remul %d1,%d3,%d2
4c4cc: 4c41 2002 remul %d1,%d2,%d2
doubly %= IMFS_MEMFILE_BLOCK_SLOTS;
p = info->triply_indirect;
if ( malloc_it ) {
4c4d0: 4a88 tstl %a0
4c4d2: 6700 00f0 beqw 4c5c4 <IMFS_memfile_get_block_pointer+0x1b0>
if ( !p ) {
4c4d6: 4a89 tstl %a1
4c4d8: 6700 00b0 beqw 4c58a <IMFS_memfile_get_block_pointer+0x176>
if ( !p )
return 0;
info->triply_indirect = p;
}
p1 = (block_p *) p[ triply ];
4c4dc: 45f1 2c00 lea %a1@(00000000,%d2:l:4),%a2
4c4e0: 2052 moveal %a2@,%a0
if ( !p1 ) {
4c4e2: 4a88 tstl %a0
4c4e4: 6700 0086 beqw 4c56c <IMFS_memfile_get_block_pointer+0x158>
if ( !p1 )
return 0;
p[ triply ] = (block_p) p1;
}
p2 = (block_p *)p1[ doubly ];
4c4e8: 45f0 3c00 lea %a0@(00000000,%d3:l:4),%a2
4c4ec: 2052 moveal %a2@,%a0
if ( !p2 ) {
4c4ee: 4a88 tstl %a0
4c4f0: 6762 beqs 4c554 <IMFS_memfile_get_block_pointer+0x140>
p2 = memfile_alloc_block();
if ( !p2 )
return 0;
p1[ doubly ] = (block_p) p2;
}
return (block_p *)&p2[ singly ];
4c4f2: 41f0 4c00 lea %a0@(00000000,%d4:l:4),%a0
4c4f6: 2008 movel %a0,%d0
/*
* This means the requested block number is out of range.
*/
return 0;
}
4c4f8: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2
4c4fe: 4e5e unlk %fp
4c500: 4e75 rts
p = info->indirect;
if ( malloc_it ) {
if ( !p ) {
p = memfile_alloc_block();
4c502: 4eb9 0004 c3f0 jsr 4c3f0 <memfile_alloc_block>
4c508: 2240 moveal %d0,%a1
if ( !p )
4c50a: 4a80 tstl %d0
4c50c: 6792 beqs 4c4a0 <IMFS_memfile_get_block_pointer+0x8c><== NEVER TAKEN
return 0;
info->indirect = p;
4c50e: 2540 0054 movel %d0,%a2@(84)
}
if ( !p )
return 0;
return &info->indirect[ my_block ];
4c512: 43f1 2c00 lea %a1@(00000000,%d2:l:4),%a1
4c516: 2009 movel %a1,%d0
4c518: 6000 ff32 braw 4c44c <IMFS_memfile_get_block_pointer+0x38>
p = info->doubly_indirect;
if ( malloc_it ) {
if ( !p ) {
p = memfile_alloc_block();
4c51c: 4eb9 0004 c3f0 jsr 4c3f0 <memfile_alloc_block>
4c522: 2240 moveal %d0,%a1
if ( !p )
4c524: 4a80 tstl %d0
4c526: 6700 ff78 beqw 4c4a0 <IMFS_memfile_get_block_pointer+0x8c>
return 0;
info->doubly_indirect = p;
4c52a: 2540 0058 movel %d0,%a2@(88)
}
p1 = (block_p *)p[ doubly ];
4c52e: 45f1 2c00 lea %a1@(00000000,%d2:l:4),%a2
4c532: 2052 moveal %a2@,%a0
if ( !p1 ) {
4c534: 4a88 tstl %a0
4c536: 6600 ff54 bnew 4c48c <IMFS_memfile_get_block_pointer+0x78>
p1 = memfile_alloc_block();
4c53a: 4eb9 0004 c3f0 jsr 4c3f0 <memfile_alloc_block>
4c540: 2040 moveal %d0,%a0
if ( !p1 )
4c542: 4a80 tstl %d0
4c544: 6700 ff5a beqw 4c4a0 <IMFS_memfile_get_block_pointer+0x8c>
return 0;
p[ doubly ] = (block_p) p1;
4c548: 2480 movel %d0,%a2@
#if 0
fprintf(stdout, "(d %d %d %d %d %p %p) ", block, my_block, doubly,
singly, p, &p[singly] );
fflush(stdout);
#endif
return (block_p *)&p[ singly ];
4c54a: 41f0 3c00 lea %a0@(00000000,%d3:l:4),%a0
4c54e: 2008 movel %a0,%d0
4c550: 6000 ff40 braw 4c492 <IMFS_memfile_get_block_pointer+0x7e>
p[ triply ] = (block_p) p1;
}
p2 = (block_p *)p1[ doubly ];
if ( !p2 ) {
p2 = memfile_alloc_block();
4c554: 4eb9 0004 c3f0 jsr 4c3f0 <memfile_alloc_block>
4c55a: 2040 moveal %d0,%a0
if ( !p2 )
4c55c: 4a80 tstl %d0
4c55e: 6700 ff40 beqw 4c4a0 <IMFS_memfile_get_block_pointer+0x8c>
return 0;
p1[ doubly ] = (block_p) p2;
4c562: 2480 movel %d0,%a2@
}
return (block_p *)&p2[ singly ];
4c564: 41f0 4c00 lea %a0@(00000000,%d4:l:4),%a0
4c568: 2008 movel %a0,%d0
4c56a: 608c bras 4c4f8 <IMFS_memfile_get_block_pointer+0xe4>
info->triply_indirect = p;
}
p1 = (block_p *) p[ triply ];
if ( !p1 ) {
p1 = memfile_alloc_block();
4c56c: 4eb9 0004 c3f0 jsr 4c3f0 <memfile_alloc_block>
4c572: 2040 moveal %d0,%a0
if ( !p1 )
4c574: 4a80 tstl %d0
4c576: 6700 ff28 beqw 4c4a0 <IMFS_memfile_get_block_pointer+0x8c>
return 0;
p[ triply ] = (block_p) p1;
4c57a: 2480 movel %d0,%a2@
}
p2 = (block_p *)p1[ doubly ];
4c57c: 45f0 3c00 lea %a0@(00000000,%d3:l:4),%a2
4c580: 2052 moveal %a2@,%a0
if ( !p2 ) {
4c582: 4a88 tstl %a0
4c584: 6600 ff6c bnew 4c4f2 <IMFS_memfile_get_block_pointer+0xde>
4c588: 60ca bras 4c554 <IMFS_memfile_get_block_pointer+0x140>
p = info->triply_indirect;
if ( malloc_it ) {
if ( !p ) {
p = memfile_alloc_block();
4c58a: 4eb9 0004 c3f0 jsr 4c3f0 <memfile_alloc_block>
4c590: 2240 moveal %d0,%a1
if ( !p )
4c592: 4a80 tstl %d0
4c594: 6700 ff0a beqw 4c4a0 <IMFS_memfile_get_block_pointer+0x8c>
return 0;
info->triply_indirect = p;
4c598: 2540 005c movel %d0,%a2@(92)
}
p1 = (block_p *) p[ triply ];
4c59c: 45f1 2c00 lea %a1@(00000000,%d2:l:4),%a2
4c5a0: 2052 moveal %a2@,%a0
if ( !p1 ) {
4c5a2: 4a88 tstl %a0
4c5a4: 6600 ff42 bnew 4c4e8 <IMFS_memfile_get_block_pointer+0xd4>
4c5a8: 60c2 bras 4c56c <IMFS_memfile_get_block_pointer+0x158>
}
return (block_p *)&p1[ singly ];
}
if ( !p )
4c5aa: 4a89 tstl %a1
4c5ac: 6700 fef2 beqw 4c4a0 <IMFS_memfile_get_block_pointer+0x8c>
return 0;
p = (block_p *)p[ doubly ];
4c5b0: 2071 2c00 moveal %a1@(00000000,%d2:l:4),%a0
if ( !p )
4c5b4: 4a88 tstl %a0
4c5b6: 6700 fee8 beqw 4c4a0 <IMFS_memfile_get_block_pointer+0x8c>
#if 0
fprintf(stdout, "(d %d %d %d %d %p %p) ", block, my_block, doubly,
singly, p, &p[singly] );
fflush(stdout);
#endif
return (block_p *)&p[ singly ];
4c5ba: 41f0 3c00 lea %a0@(00000000,%d3:l:4),%a0
4c5be: 2008 movel %a0,%d0
4c5c0: 6000 fed0 braw 4c492 <IMFS_memfile_get_block_pointer+0x7e>
p1[ doubly ] = (block_p) p2;
}
return (block_p *)&p2[ singly ];
}
if ( !p )
4c5c4: 4a89 tstl %a1
4c5c6: 6700 fed8 beqw 4c4a0 <IMFS_memfile_get_block_pointer+0x8c>
#if 0
fprintf(stdout, "(t %d %d %d %d %d) ", block, my_block, triply, doubly, singly );
fflush(stdout);
#endif
p1 = (block_p *) p[ triply ];
4c5ca: 2071 2c00 moveal %a1@(00000000,%d2:l:4),%a0
if ( !p1 )
4c5ce: 4a88 tstl %a0
4c5d0: 6700 fece beqw 4c4a0 <IMFS_memfile_get_block_pointer+0x8c>
p2 = (block_p *)p1[ doubly ];
if ( !p )
return 0;
return (block_p *)&p2[ singly ];
4c5d4: 2004 movel %d4,%d0
4c5d6: e588 lsll #2,%d0
4c5d8: d0b0 3c00 addl %a0@(00000000,%d3:l:4),%d0
/*
* This means the requested block number is out of range.
*/
return 0;
}
4c5dc: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2
4c5e2: 4e5e unlk %fp <== NOT EXECUTED
0004c5e6 <IMFS_memfile_read>:
IMFS_jnode_t *the_jnode,
off_t start,
unsigned char *destination,
unsigned int length
)
{
4c5e6: 4e56 ffc0 linkw %fp,#-64
4c5ea: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
4c5ee: 246e 0008 moveal %fp@(8),%a2
4c5f2: 266e 0014 moveal %fp@(20),%a3
4c5f6: 2e2e 0018 movel %fp@(24),%d7
4c5fa: 242e 000c movel %fp@(12),%d2
4c5fe: 262e 0010 movel %fp@(16),%d3
/*
* Error checks on arguments
*/
if ( !dest )
4c602: 4a8b tstl %a3
4c604: 6700 01ea beqw 4c7f0 <IMFS_memfile_read+0x20a>
/*
* If there is nothing to read, then quick exit.
*/
my_length = length;
if ( !my_length )
4c608: 4a87 tstl %d7
4c60a: 6700 01e4 beqw 4c7f0 <IMFS_memfile_read+0x20a>
/*
* Linear files (as created from a tar file are easier to handle
* than block files).
*/
if (the_jnode->type == IMFS_LINEAR_FILE) {
4c60e: 7006 moveq #6,%d0
4c610: b0aa 0048 cmpl %a2@(72),%d0
4c614: 6700 013e beqw 4c754 <IMFS_memfile_read+0x16e>
/*
* 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;
4c618: 2043 moveal %d3,%a0
4c61a: 43f0 7800 lea %a0@(00000000,%d7:l),%a1
if ( last_byte > the_jnode->info.file.size )
4c61e: 99cc subal %a4,%a4
4c620: 2a49 moveal %a1,%a5
4c622: 282a 004c movel %a2@(76),%d4
4c626: 2a2a 0050 movel %a2@(80),%d5
4c62a: 200c movel %a4,%d0
4c62c: 220d movel %a5,%d1
4c62e: 9285 subl %d5,%d1
4c630: 9184 subxl %d4,%d0
4c632: 6f04 bles 4c638 <IMFS_memfile_read+0x52>
my_length = the_jnode->info.file.size - start;
4c634: 2e05 movel %d5,%d7
4c636: 9e83 subl %d3,%d7
/*
* Phase 1: possibly the last part of one block
*/
start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK;
4c638: 2c39 0005 dac8 movel 5dac8 <imfs_memfile_bytes_per_block>,%d6
4c63e: 2a06 movel %d6,%d5
4c640: 5bc4 smi %d4
4c642: 49c4 extbl %d4
4c644: 2f05 movel %d5,%sp@-
4c646: 2f04 movel %d4,%sp@-
4c648: 2f03 movel %d3,%sp@-
4c64a: 2f02 movel %d2,%sp@-
4c64c: 4eb9 0005 9bcc jsr 59bcc <__moddi3>
4c652: 4fef 0010 lea %sp@(16),%sp
4c656: 2841 moveal %d1,%a4
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
4c658: 2f05 movel %d5,%sp@-
4c65a: 2f04 movel %d4,%sp@-
4c65c: 2f03 movel %d3,%sp@-
4c65e: 2f02 movel %d2,%sp@-
4c660: 4eb9 0005 9800 jsr 59800 <__divdi3>
4c666: 4fef 0010 lea %sp@(16),%sp
4c66a: 2401 movel %d1,%d2
if ( start_offset ) {
4c66c: 4a8c tstl %a4
4c66e: 6700 00d0 beqw 4c740 <IMFS_memfile_read+0x15a>
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 );
4c672: 42a7 clrl %sp@-
4c674: 2f01 movel %d1,%sp@-
4c676: 2f0a movel %a2,%sp@-
4c678: 4eb9 0004 c414 jsr 4c414 <IMFS_memfile_get_block_pointer>
if ( !block_ptr )
4c67e: 4fef 000c lea %sp@(12),%sp
4c682: 4a80 tstl %d0
4c684: 6700 015e beqw 4c7e4 <IMFS_memfile_read+0x1fe>
*/
start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK;
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
if ( start_offset ) {
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset;
4c688: 9c8c subl %a4,%d6
4c68a: 2207 movel %d7,%d1
4c68c: bc87 cmpl %d7,%d6
4c68e: 6500 012a bcsw 4c7ba <IMFS_memfile_read+0x1d4>
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;
memcpy( dest, &(*block_ptr)[ start_offset ], to_copy );
4c692: 2f01 movel %d1,%sp@-
4c694: 2040 moveal %d0,%a0
4c696: d9d0 addal %a0@,%a4
dest += to_copy;
4c698: 280b movel %a3,%d4
4c69a: d881 addl %d1,%d4
block++;
my_length -= to_copy;
4c69c: 9e81 subl %d1,%d7
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
if ( !block_ptr )
return copied;
memcpy( dest, &(*block_ptr)[ start_offset ], to_copy );
dest += to_copy;
block++;
4c69e: 5282 addql #1,%d2
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;
memcpy( dest, &(*block_ptr)[ start_offset ], to_copy );
4c6a0: 2f0c movel %a4,%sp@-
dest += to_copy;
block++;
my_length -= to_copy;
copied += to_copy;
4c6a2: 2841 moveal %d1,%a4
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;
memcpy( dest, &(*block_ptr)[ start_offset ], to_copy );
4c6a4: 2f0b movel %a3,%sp@-
4c6a6: 4eb9 0004 e318 jsr 4e318 <memcpy>
dest += to_copy;
block++;
my_length -= to_copy;
4c6ac: 2c39 0005 dac8 movel 5dac8 <imfs_memfile_bytes_per_block>,%d6
4c6b2: 4fef 000c lea %sp@(12),%sp
/*
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
4c6b6: bc87 cmpl %d7,%d6
4c6b8: 623a bhis 4c6f4 <IMFS_memfile_read+0x10e>
4c6ba: 47f9 0004 c414 lea 4c414 <IMFS_memfile_get_block_pointer>,%a3
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
if ( !block_ptr )
return copied;
memcpy( dest, &(*block_ptr)[ 0 ], to_copy );
4c6c0: 4bf9 0004 e318 lea 4e318 <memcpy>,%a5
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
4c6c6: 42a7 clrl %sp@-
if ( !block_ptr )
return copied;
memcpy( dest, &(*block_ptr)[ 0 ], to_copy );
dest += to_copy;
block++;
my_length -= to_copy;
4c6c8: 9e86 subl %d6,%d7
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
4c6ca: 2f02 movel %d2,%sp@-
if ( !block_ptr )
return copied;
memcpy( dest, &(*block_ptr)[ 0 ], to_copy );
dest += to_copy;
block++;
4c6cc: 5282 addql #1,%d2
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
4c6ce: 2f0a movel %a2,%sp@-
4c6d0: 4e93 jsr %a3@
if ( !block_ptr )
4c6d2: 4fef 000c lea %sp@(12),%sp
4c6d6: 4a80 tstl %d0
4c6d8: 676e beqs 4c748 <IMFS_memfile_read+0x162> <== NEVER TAKEN
return copied;
memcpy( dest, &(*block_ptr)[ 0 ], to_copy );
4c6da: 2040 moveal %d0,%a0
dest += to_copy;
block++;
my_length -= to_copy;
copied += to_copy;
4c6dc: d9c6 addal %d6,%a4
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
if ( !block_ptr )
return copied;
memcpy( dest, &(*block_ptr)[ 0 ], to_copy );
4c6de: 2f06 movel %d6,%sp@-
4c6e0: 2f10 movel %a0@,%sp@-
4c6e2: 2f04 movel %d4,%sp@-
dest += to_copy;
4c6e4: d886 addl %d6,%d4
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
if ( !block_ptr )
return copied;
memcpy( dest, &(*block_ptr)[ 0 ], to_copy );
4c6e6: 4e95 jsr %a5@
/*
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
4c6e8: 4fef 000c lea %sp@(12),%sp
4c6ec: beb9 0005 dac8 cmpl 5dac8 <imfs_memfile_bytes_per_block>,%d7
4c6f2: 64d2 bccs 4c6c6 <IMFS_memfile_read+0xe0>
#if defined(RTEMS_DEBUG)
assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK );
#endif
if ( my_length ) {
4c6f4: 4a87 tstl %d7
4c6f6: 6728 beqs 4c720 <IMFS_memfile_read+0x13a>
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
4c6f8: 42a7 clrl %sp@-
4c6fa: 2f02 movel %d2,%sp@-
4c6fc: 2f0a movel %a2,%sp@-
4c6fe: 4eb9 0004 c414 jsr 4c414 <IMFS_memfile_get_block_pointer>
if ( !block_ptr )
4c704: 4fef 000c lea %sp@(12),%sp
4c708: 4a80 tstl %d0
4c70a: 673c beqs 4c748 <IMFS_memfile_read+0x162> <== NEVER TAKEN
return copied;
memcpy( dest, &(*block_ptr)[ 0 ], my_length );
4c70c: 2040 moveal %d0,%a0
copied += my_length;
4c70e: d9c7 addal %d7,%a4
if ( my_length ) {
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
if ( !block_ptr )
return copied;
memcpy( dest, &(*block_ptr)[ 0 ], my_length );
4c710: 2f07 movel %d7,%sp@-
4c712: 2f10 movel %a0@,%sp@-
4c714: 2f04 movel %d4,%sp@-
4c716: 4eb9 0004 e318 jsr 4e318 <memcpy>
copied += my_length;
4c71c: 4fef 000c lea %sp@(12),%sp
}
IMFS_update_atime( the_jnode );
4c720: 42a7 clrl %sp@-
4c722: 486e fff8 pea %fp@(-8)
4c726: 4eb9 0004 2e48 jsr 42e48 <gettimeofday>
4c72c: 256e fff8 003c movel %fp@(-8),%a2@(60)
return copied;
4c732: 200c movel %a4,%d0
4c734: 508f addql #8,%sp
}
4c736: 4cee 3cfc ffc0 moveml %fp@(-64),%d2-%d7/%a2-%a5
4c73c: 4e5e unlk %fp
4c73e: 4e75 rts
* 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 ) {
4c740: 280b movel %a3,%d4
last_byte = start + length;
if ( last_byte > the_jnode->info.file.size )
my_length = the_jnode->info.file.size - start;
copied = 0;
4c742: 99cc subal %a4,%a4
4c744: 6000 ff70 braw 4c6b6 <IMFS_memfile_read+0xd0>
#endif
if ( my_length ) {
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
if ( !block_ptr )
return copied;
4c748: 200c movel %a4,%d0 <== NOT EXECUTED
}
IMFS_update_atime( the_jnode );
return copied;
}
4c74a: 4cee 3cfc ffc0 moveml %fp@(-64),%d2-%d7/%a2-%a5 <== NOT EXECUTED
4c750: 4e5e unlk %fp <== NOT EXECUTED
4c752: 4e75 rts <== NOT EXECUTED
if (the_jnode->type == IMFS_LINEAR_FILE) {
unsigned char *file_ptr;
file_ptr = (unsigned char *)the_jnode->info.linearfile.direct;
if (my_length > (the_jnode->info.linearfile.size - start))
4c754: 91c8 subal %a0,%a0
4c756: 202a 004c movel %a2@(76),%d0
4c75a: 222a 0050 movel %a2@(80),%d1
4c75e: 2d47 fff4 movel %d7,%fp@(-12)
* than block files).
*/
if (the_jnode->type == IMFS_LINEAR_FILE) {
unsigned char *file_ptr;
file_ptr = (unsigned char *)the_jnode->info.linearfile.direct;
4c762: 286a 0054 moveal %a2@(84),%a4
if (my_length > (the_jnode->info.linearfile.size - start))
4c766: 2d48 fff0 movel %a0,%fp@(-16)
4c76a: 2d40 ffe8 movel %d0,%fp@(-24)
4c76e: 2d41 ffec movel %d1,%fp@(-20)
4c772: 9283 subl %d3,%d1
4c774: 9182 subxl %d2,%d0
4c776: 282e fff0 movel %fp@(-16),%d4
4c77a: 2a2e fff4 movel %fp@(-12),%d5
4c77e: 9a81 subl %d1,%d5
4c780: 9980 subxl %d0,%d4
4c782: 6f06 bles 4c78a <IMFS_memfile_read+0x1a4> <== NEVER TAKEN
my_length = the_jnode->info.linearfile.size - start;
4c784: 2e2e ffec movel %fp@(-20),%d7
4c788: 9e83 subl %d3,%d7
memcpy(dest, &file_ptr[start], my_length);
4c78a: 2f07 movel %d7,%sp@-
4c78c: 4874 3800 pea %a4@(00000000,%d3:l)
4c790: 2f0b movel %a3,%sp@-
4c792: 4eb9 0004 e318 jsr 4e318 <memcpy>
IMFS_update_atime( the_jnode );
4c798: 42a7 clrl %sp@-
4c79a: 486e fff8 pea %fp@(-8)
4c79e: 4eb9 0004 2e48 jsr 42e48 <gettimeofday>
4c7a4: 256e fff8 003c movel %fp@(-8),%a2@(60)
return my_length;
4c7aa: 2007 movel %d7,%d0
4c7ac: 4fef 0014 lea %sp@(20),%sp
}
IMFS_update_atime( the_jnode );
return copied;
}
4c7b0: 4cee 3cfc ffc0 moveml %fp@(-64),%d2-%d7/%a2-%a5
4c7b6: 4e5e unlk %fp
4c7b8: 4e75 rts
*/
start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK;
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
if ( start_offset ) {
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset;
4c7ba: 2206 movel %d6,%d1
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;
memcpy( dest, &(*block_ptr)[ start_offset ], to_copy );
4c7bc: 2040 moveal %d0,%a0
dest += to_copy;
4c7be: 280b movel %a3,%d4
4c7c0: d881 addl %d1,%d4
block++;
my_length -= to_copy;
4c7c2: 9e81 subl %d1,%d7
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
if ( !block_ptr )
return copied;
memcpy( dest, &(*block_ptr)[ start_offset ], to_copy );
dest += to_copy;
block++;
4c7c4: 5282 addql #1,%d2
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;
memcpy( dest, &(*block_ptr)[ start_offset ], to_copy );
4c7c6: 2f01 movel %d1,%sp@-
4c7c8: d9d0 addal %a0@,%a4
4c7ca: 2f0c movel %a4,%sp@-
dest += to_copy;
block++;
my_length -= to_copy;
copied += to_copy;
4c7cc: 2841 moveal %d1,%a4
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;
memcpy( dest, &(*block_ptr)[ start_offset ], to_copy );
4c7ce: 2f0b movel %a3,%sp@-
4c7d0: 4eb9 0004 e318 jsr 4e318 <memcpy>
dest += to_copy;
block++;
my_length -= to_copy;
4c7d6: 2c39 0005 dac8 movel 5dac8 <imfs_memfile_bytes_per_block>,%d6
4c7dc: 4fef 000c lea %sp@(12),%sp
4c7e0: 6000 fed4 braw 4c6b6 <IMFS_memfile_read+0xd0>
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;
4c7e4: 4280 clrl %d0 <== NOT EXECUTED
}
IMFS_update_atime( the_jnode );
return copied;
}
4c7e6: 4cee 3cfc ffc0 moveml %fp@(-64),%d2-%d7/%a2-%a5 <== NOT EXECUTED
4c7ec: 4e5e unlk %fp <== NOT EXECUTED
4c7ee: 4e75 rts <== NOT EXECUTED
* If there is nothing to read, then quick exit.
*/
my_length = length;
if ( !my_length )
rtems_set_errno_and_return_minus_one( EINVAL );
4c7f0: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
4c7f6: 7216 moveq #22,%d1 <== NOT EXECUTED
4c7f8: 2040 moveal %d0,%a0 <== NOT EXECUTED
4c7fa: 70ff moveq #-1,%d0 <== NOT EXECUTED
}
IMFS_update_atime( the_jnode );
return copied;
}
4c7fc: 4cee 3cfc ffc0 moveml %fp@(-64),%d2-%d7/%a2-%a5 <== NOT EXECUTED
* If there is nothing to read, then quick exit.
*/
my_length = length;
if ( !my_length )
rtems_set_errno_and_return_minus_one( EINVAL );
4c802: 2081 movel %d1,%a0@ <== NOT EXECUTED
}
IMFS_update_atime( the_jnode );
return copied;
}
4c804: 4e5e unlk %fp <== NOT EXECUTED
0004c8e0 <IMFS_memfile_remove>:
*/
int IMFS_memfile_remove(
IMFS_jnode_t *the_jnode
)
{
4c8e0: 4e56 ffe0 linkw %fp,#-32
4c8e4: 48d7 1c7c moveml %d2-%d6/%a2-%a4,%sp@
/*
* 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;
4c8e8: 2839 0005 dac8 movel 5dac8 <imfs_memfile_bytes_per_block>,%d4
4c8ee: e48c lsrl #2,%d4
*/
int IMFS_memfile_remove(
IMFS_jnode_t *the_jnode
)
{
4c8f0: 286e 0008 moveal %fp@(8),%a4
* + triply indirect
*/
info = &the_jnode->info.file;
if ( info->indirect ) {
4c8f4: 4aac 0054 tstl %a4@(84)
4c8f8: 670e beqs 4c908 <IMFS_memfile_remove+0x28>
memfile_free_blocks_in_table( &info->indirect, to_free );
4c8fa: 2f04 movel %d4,%sp@-
4c8fc: 486c 0054 pea %a4@(84)
4c900: 4eb9 0004 c894 jsr 4c894 <memfile_free_blocks_in_table>
4c906: 508f addql #8,%sp
}
if ( info->doubly_indirect ) {
4c908: 206c 0058 moveal %a4@(88),%a0
4c90c: 4a88 tstl %a0
4c90e: 6750 beqs 4c960 <IMFS_memfile_remove+0x80> <== ALWAYS TAKEN
for ( i=0 ; i<IMFS_MEMFILE_BLOCK_SLOTS ; i++ ) {
4c910: 2239 0005 dac8 movel 5dac8 <imfs_memfile_bytes_per_block>,%d1<== NOT EXECUTED
4c916: 2001 movel %d1,%d0 <== NOT EXECUTED
4c918: e488 lsrl #2,%d0 <== NOT EXECUTED
4c91a: 47f9 0004 c894 lea 4c894 <memfile_free_blocks_in_table>,%a3<== NOT EXECUTED
4c920: 6734 beqs 4c956 <IMFS_memfile_remove+0x76> <== NOT EXECUTED
4c922: 4280 clrl %d0 <== NOT EXECUTED
4c924: 4282 clrl %d2 <== NOT EXECUTED
4c926: 47f9 0004 c894 lea 4c894 <memfile_free_blocks_in_table>,%a3<== NOT EXECUTED
4c92c: 5282 addql #1,%d2 <== NOT EXECUTED
if ( info->doubly_indirect[i] ) {
4c92e: e588 lsll #2,%d0 <== NOT EXECUTED
4c930: 4ab0 0800 tstl %a0@(00000000,%d0:l) <== NOT EXECUTED
4c934: 6710 beqs 4c946 <IMFS_memfile_remove+0x66> <== NOT EXECUTED
memfile_free_blocks_in_table(
4c936: 2f04 movel %d4,%sp@- <== NOT EXECUTED
4c938: 4870 0800 pea %a0@(00000000,%d0:l) <== NOT EXECUTED
4c93c: 4e93 jsr %a3@ <== NOT EXECUTED
4c93e: 2239 0005 dac8 movel 5dac8 <imfs_memfile_bytes_per_block>,%d1<== NOT EXECUTED
4c944: 508f addql #8,%sp <== NOT EXECUTED
memfile_free_blocks_in_table( &info->indirect, to_free );
}
if ( info->doubly_indirect ) {
for ( i=0 ; i<IMFS_MEMFILE_BLOCK_SLOTS ; i++ ) {
4c946: 2601 movel %d1,%d3 <== NOT EXECUTED
4c948: 2002 movel %d2,%d0 <== NOT EXECUTED
4c94a: e48b lsrl #2,%d3 <== NOT EXECUTED
4c94c: b483 cmpl %d3,%d2 <== NOT EXECUTED
4c94e: 6406 bccs 4c956 <IMFS_memfile_remove+0x76> <== NOT EXECUTED
4c950: 206c 0058 moveal %a4@(88),%a0 <== NOT EXECUTED
4c954: 60d6 bras 4c92c <IMFS_memfile_remove+0x4c> <== NOT EXECUTED
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 );
4c956: 2f04 movel %d4,%sp@- <== NOT EXECUTED
4c958: 486c 0058 pea %a4@(88) <== NOT EXECUTED
4c95c: 4e93 jsr %a3@ <== NOT EXECUTED
4c95e: 508f addql #8,%sp <== NOT EXECUTED
}
if ( info->triply_indirect ) {
4c960: 206c 005c moveal %a4@(92),%a0
4c964: 4a88 tstl %a0
4c966: 6700 0086 beqw 4c9ee <IMFS_memfile_remove+0x10e>
for ( i=0 ; i<IMFS_MEMFILE_BLOCK_SLOTS ; i++ ) {
4c96a: 2239 0005 dac8 movel 5dac8 <imfs_memfile_bytes_per_block>,%d1<== NOT EXECUTED
4c970: 2001 movel %d1,%d0 <== NOT EXECUTED
4c972: e488 lsrl #2,%d0 <== NOT EXECUTED
4c974: 47f9 0004 c894 lea 4c894 <memfile_free_blocks_in_table>,%a3<== NOT EXECUTED
4c97a: 6768 beqs 4c9e4 <IMFS_memfile_remove+0x104> <== NOT EXECUTED
p = (block_p *) info->triply_indirect[i];
4c97c: 2450 moveal %a0@,%a2 <== NOT EXECUTED
4c97e: 47f9 0004 c894 lea 4c894 <memfile_free_blocks_in_table>,%a3<== NOT EXECUTED
if ( !p ) /* ensure we have a valid pointer */
4c984: 4a8a tstl %a2 <== NOT EXECUTED
4c986: 675c beqs 4c9e4 <IMFS_memfile_remove+0x104> <== NOT EXECUTED
}
if ( info->triply_indirect ) {
for ( i=0 ; i<IMFS_MEMFILE_BLOCK_SLOTS ; i++ ) {
p = (block_p *) info->triply_indirect[i];
4c988: 4286 clrl %d6 <== NOT EXECUTED
if ( !p ) /* ensure we have a valid pointer */
4c98a: 4285 clrl %d5 <== NOT EXECUTED
break;
for ( j=0 ; j<IMFS_MEMFILE_BLOCK_SLOTS ; j++ ) {
4c98c: 4a80 tstl %d0 <== NOT EXECUTED
4c98e: 6728 beqs 4c9b8 <IMFS_memfile_remove+0xd8> <== NOT EXECUTED
4c990: 4280 clrl %d0 <== NOT EXECUTED
4c992: 4282 clrl %d2 <== NOT EXECUTED
4c994: 5282 addql #1,%d2 <== NOT EXECUTED
if ( p[j] ) {
4c996: e588 lsll #2,%d0 <== NOT EXECUTED
4c998: 4ab2 0800 tstl %a2@(00000000,%d0:l) <== NOT EXECUTED
4c99c: 6710 beqs 4c9ae <IMFS_memfile_remove+0xce> <== NOT EXECUTED
memfile_free_blocks_in_table( (block_p **)&p[j], to_free);
4c99e: 2f04 movel %d4,%sp@- <== NOT EXECUTED
4c9a0: 4872 0800 pea %a2@(00000000,%d0:l) <== NOT EXECUTED
4c9a4: 4e93 jsr %a3@ <== NOT EXECUTED
4c9a6: 2239 0005 dac8 movel 5dac8 <imfs_memfile_bytes_per_block>,%d1<== NOT EXECUTED
4c9ac: 508f addql #8,%sp <== NOT EXECUTED
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++ ) {
4c9ae: 2601 movel %d1,%d3 <== NOT EXECUTED
4c9b0: 2002 movel %d2,%d0 <== NOT EXECUTED
4c9b2: e48b lsrl #2,%d3 <== NOT EXECUTED
4c9b4: b682 cmpl %d2,%d3 <== NOT EXECUTED
4c9b6: 62dc bhis 4c994 <IMFS_memfile_remove+0xb4> <== NOT EXECUTED
if ( p[j] ) {
memfile_free_blocks_in_table( (block_p **)&p[j], to_free);
}
}
memfile_free_blocks_in_table(
4c9b8: 2f04 movel %d4,%sp@- <== NOT EXECUTED
4c9ba: dcac 005c addl %a4@(92),%d6 <== NOT EXECUTED
memfile_free_blocks_in_table( &info->doubly_indirect, to_free );
}
if ( info->triply_indirect ) {
for ( i=0 ; i<IMFS_MEMFILE_BLOCK_SLOTS ; i++ ) {
4c9be: 5285 addql #1,%d5 <== NOT EXECUTED
for ( j=0 ; j<IMFS_MEMFILE_BLOCK_SLOTS ; j++ ) {
if ( p[j] ) {
memfile_free_blocks_in_table( (block_p **)&p[j], to_free);
}
}
memfile_free_blocks_in_table(
4c9c0: 2f06 movel %d6,%sp@- <== NOT EXECUTED
4c9c2: 4e93 jsr %a3@ <== NOT EXECUTED
memfile_free_blocks_in_table( &info->doubly_indirect, to_free );
}
if ( info->triply_indirect ) {
for ( i=0 ; i<IMFS_MEMFILE_BLOCK_SLOTS ; i++ ) {
4c9c4: 2239 0005 dac8 movel 5dac8 <imfs_memfile_bytes_per_block>,%d1<== NOT EXECUTED
4c9ca: 2001 movel %d1,%d0 <== NOT EXECUTED
4c9cc: 508f addql #8,%sp <== NOT EXECUTED
4c9ce: e488 lsrl #2,%d0 <== NOT EXECUTED
4c9d0: ba80 cmpl %d0,%d5 <== NOT EXECUTED
4c9d2: 6410 bccs 4c9e4 <IMFS_memfile_remove+0x104> <== NOT EXECUTED
p = (block_p *) info->triply_indirect[i];
if ( !p ) /* ensure we have a valid pointer */
4c9d4: 2c05 movel %d5,%d6 <== NOT EXECUTED
}
if ( info->triply_indirect ) {
for ( i=0 ; i<IMFS_MEMFILE_BLOCK_SLOTS ; i++ ) {
p = (block_p *) info->triply_indirect[i];
4c9d6: 206c 005c moveal %a4@(92),%a0 <== NOT EXECUTED
if ( !p ) /* ensure we have a valid pointer */
4c9da: e58e lsll #2,%d6 <== NOT EXECUTED
}
if ( info->triply_indirect ) {
for ( i=0 ; i<IMFS_MEMFILE_BLOCK_SLOTS ; i++ ) {
p = (block_p *) info->triply_indirect[i];
4c9dc: 2470 6800 moveal %a0@(00000000,%d6:l),%a2 <== NOT EXECUTED
if ( !p ) /* ensure we have a valid pointer */
4c9e0: 4a8a tstl %a2 <== NOT EXECUTED
4c9e2: 66a8 bnes 4c98c <IMFS_memfile_remove+0xac> <== NOT EXECUTED
}
}
memfile_free_blocks_in_table(
(block_p **)&info->triply_indirect[i], to_free );
}
memfile_free_blocks_in_table(
4c9e4: 2f04 movel %d4,%sp@- <== NOT EXECUTED
4c9e6: 486c 005c pea %a4@(92) <== NOT EXECUTED
4c9ea: 4e93 jsr %a3@ <== NOT EXECUTED
4c9ec: 508f addql #8,%sp <== NOT EXECUTED
(block_p **)&info->triply_indirect, to_free );
}
return 0;
}
4c9ee: 4280 clrl %d0
4c9f0: 4cee 1c7c ffe0 moveml %fp@(-32),%d2-%d6/%a2-%a4
4c9f6: 4e5e unlk %fp <== NOT EXECUTED
0004c9fa <IMFS_memfile_remove_block>:
MEMFILE_STATIC int IMFS_memfile_remove_block(
IMFS_jnode_t *the_jnode,
unsigned int block
)
{
4c9fa: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
block_p *block_ptr;
block_p ptr;
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
4c9fe: 42a7 clrl %sp@- <== NOT EXECUTED
4ca00: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
4ca04: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4ca08: 4eb9 0004 c414 jsr 4c414 <IMFS_memfile_get_block_pointer> <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
assert( block_ptr );
#endif
if ( block_ptr ) {
4ca0e: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4ca12: 4a80 tstl %d0 <== NOT EXECUTED
4ca14: 6710 beqs 4ca26 <IMFS_memfile_remove_block+0x2c> <== NOT EXECUTED
ptr = *block_ptr;
4ca16: 2040 moveal %d0,%a0 <== NOT EXECUTED
4ca18: 2210 movel %a0@,%d1 <== NOT EXECUTED
*block_ptr = 0;
4ca1a: 4290 clrl %a0@ <== NOT EXECUTED
memfile_free_block( ptr );
4ca1c: 2f01 movel %d1,%sp@- <== NOT EXECUTED
4ca1e: 4eb9 0004 c87a jsr 4c87a <memfile_free_block> <== NOT EXECUTED
4ca24: 588f addql #4,%sp <== NOT EXECUTED
}
return 1;
}
4ca26: 7001 moveq #1,%d0 <== NOT EXECUTED
4ca28: 4e5e unlk %fp <== NOT EXECUTED
0004cb32 <IMFS_memfile_write>:
IMFS_jnode_t *the_jnode,
off_t start,
const unsigned char *source,
unsigned int length
)
{
4cb32: 4e56 ffd4 linkw %fp,#-44
4cb36: 48d7 1cfc moveml %d2-%d7/%a2-%a4,%sp@
4cb3a: 246e 0008 moveal %fp@(8),%a2
4cb3e: 266e 0014 moveal %fp@(20),%a3
4cb42: 2e2e 0018 movel %fp@(24),%d7
4cb46: 242e 000c movel %fp@(12),%d2
4cb4a: 262e 0010 movel %fp@(16),%d3
/*
* Error check arguments
*/
if ( !source )
4cb4e: 4a8b tstl %a3
4cb50: 6700 019c beqw 4ccee <IMFS_memfile_write+0x1bc>
/*
* If there is nothing to write, then quick exit.
*/
my_length = length;
if ( !my_length )
4cb54: 4a87 tstl %d7
4cb56: 6700 0196 beqw 4ccee <IMFS_memfile_write+0x1bc>
/*
* 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 + length;
4cb5a: 2047 moveal %d7,%a0
4cb5c: d1c3 addal %d3,%a0
if ( last_byte > the_jnode->info.file.size ) {
4cb5e: 2208 movel %a0,%d1
4cb60: 4280 clrl %d0
4cb62: 282a 004c movel %a2@(76),%d4
4cb66: 2a2a 0050 movel %a2@(80),%d5
4cb6a: 9a81 subl %d1,%d5
4cb6c: 9980 subxl %d0,%d4
4cb6e: 6d00 0116 bltw 4cc86 <IMFS_memfile_write+0x154>
/*
* Phase 1: possibly the last part of one block
*/
start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK;
4cb72: 2c39 0005 dac8 movel 5dac8 <imfs_memfile_bytes_per_block>,%d6
4cb78: 2a06 movel %d6,%d5
4cb7a: 5bc4 smi %d4
4cb7c: 49c4 extbl %d4
4cb7e: 2f05 movel %d5,%sp@-
4cb80: 2f04 movel %d4,%sp@-
4cb82: 2f03 movel %d3,%sp@-
4cb84: 2f02 movel %d2,%sp@-
4cb86: 4eb9 0005 9bcc jsr 59bcc <__moddi3>
4cb8c: 4fef 0010 lea %sp@(16),%sp
4cb90: 2841 moveal %d1,%a4
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
4cb92: 2f05 movel %d5,%sp@-
4cb94: 2f04 movel %d4,%sp@-
4cb96: 2f03 movel %d3,%sp@-
4cb98: 2f02 movel %d2,%sp@-
4cb9a: 4eb9 0005 9800 jsr 59800 <__divdi3>
4cba0: 4fef 0010 lea %sp@(16),%sp
4cba4: 2401 movel %d1,%d2
if ( start_offset ) {
4cba6: 4a8c tstl %a4
4cba8: 6700 00d4 beqw 4cc7e <IMFS_memfile_write+0x14c>
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 );
4cbac: 42a7 clrl %sp@-
4cbae: 2f01 movel %d1,%sp@-
4cbb0: 2f0a movel %a2,%sp@-
4cbb2: 4eb9 0004 c414 jsr 4c414 <IMFS_memfile_get_block_pointer>
if ( !block_ptr )
4cbb8: 4fef 000c lea %sp@(12),%sp
4cbbc: 4a80 tstl %d0
4cbbe: 6700 0120 beqw 4cce0 <IMFS_memfile_write+0x1ae>
*/
start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK;
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
if ( start_offset ) {
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset;
4cbc2: 9c8c subl %a4,%d6
4cbc4: be86 cmpl %d6,%d7
4cbc6: 6500 00ee bcsw 4ccb6 <IMFS_memfile_write+0x184>
block,
to_copy,
src
);
#endif
memcpy( &(*block_ptr)[ start_offset ], src, to_copy );
4cbca: 2f06 movel %d6,%sp@-
4cbcc: 2040 moveal %d0,%a0
src += to_copy;
4cbce: 280b movel %a3,%d4
4cbd0: d886 addl %d6,%d4
block++;
my_length -= to_copy;
4cbd2: 9e86 subl %d6,%d7
copied += to_copy;
4cbd4: 2606 movel %d6,%d3
src
);
#endif
memcpy( &(*block_ptr)[ start_offset ], src, to_copy );
src += to_copy;
block++;
4cbd6: 5282 addql #1,%d2
block,
to_copy,
src
);
#endif
memcpy( &(*block_ptr)[ start_offset ], src, to_copy );
4cbd8: 2f0b movel %a3,%sp@-
4cbda: d9d0 addal %a0@,%a4
4cbdc: 2f0c movel %a4,%sp@-
4cbde: 4eb9 0004 e318 jsr 4e318 <memcpy>
src += to_copy;
block++;
my_length -= to_copy;
copied += to_copy;
4cbe4: 2c39 0005 dac8 movel 5dac8 <imfs_memfile_bytes_per_block>,%d6
4cbea: 4fef 000c lea %sp@(12),%sp
/*
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
4cbee: bc87 cmpl %d7,%d6
4cbf0: 623a bhis 4cc2c <IMFS_memfile_write+0xfa>
4cbf2: 47f9 0004 c414 lea 4c414 <IMFS_memfile_get_block_pointer>,%a3
if ( !block_ptr )
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 );
4cbf8: 49f9 0004 e318 lea 4e318 <memcpy>,%a4
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
4cbfe: 42a7 clrl %sp@-
fprintf(stdout, "write %d in %d: %*s\n", to_copy, block, to_copy, src );
#endif
memcpy( &(*block_ptr)[ 0 ], src, to_copy );
src += to_copy;
block++;
my_length -= to_copy;
4cc00: 9e86 subl %d6,%d7
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
4cc02: 2f02 movel %d2,%sp@-
#if 0
fprintf(stdout, "write %d in %d: %*s\n", to_copy, block, to_copy, src );
#endif
memcpy( &(*block_ptr)[ 0 ], src, to_copy );
src += to_copy;
block++;
4cc04: 5282 addql #1,%d2
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
4cc06: 2f0a movel %a2,%sp@-
4cc08: 4e93 jsr %a3@
if ( !block_ptr )
4cc0a: 4fef 000c lea %sp@(12),%sp
4cc0e: 4a80 tstl %d0
4cc10: 6760 beqs 4cc72 <IMFS_memfile_write+0x140> <== 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 );
4cc12: 2f06 movel %d6,%sp@-
4cc14: 2040 moveal %d0,%a0
*
* 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(
4cc16: d686 addl %d6,%d3
if ( !block_ptr )
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 );
4cc18: 2f04 movel %d4,%sp@-
4cc1a: 2f10 movel %a0@,%sp@-
src += to_copy;
4cc1c: d886 addl %d6,%d4
if ( !block_ptr )
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 );
4cc1e: 4e94 jsr %a4@
/*
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
4cc20: 4fef 000c lea %sp@(12),%sp
4cc24: beb9 0005 dac8 cmpl 5dac8 <imfs_memfile_bytes_per_block>,%d7
4cc2a: 64d2 bccs 4cbfe <IMFS_memfile_write+0xcc>
#if defined(RTEMS_DEBUG)
assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK );
#endif
to_copy = my_length;
if ( my_length ) {
4cc2c: 4a87 tstl %d7
4cc2e: 6728 beqs 4cc58 <IMFS_memfile_write+0x126>
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
4cc30: 42a7 clrl %sp@-
4cc32: 2f02 movel %d2,%sp@-
4cc34: 2f0a movel %a2,%sp@-
4cc36: 4eb9 0004 c414 jsr 4c414 <IMFS_memfile_get_block_pointer>
if ( !block_ptr )
4cc3c: 4fef 000c lea %sp@(12),%sp
4cc40: 4a80 tstl %d0
4cc42: 672e beqs 4cc72 <IMFS_memfile_write+0x140> <== 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 );
4cc44: 2f07 movel %d7,%sp@-
4cc46: 2040 moveal %d0,%a0
my_length = 0;
copied += to_copy;
4cc48: d687 addl %d7,%d3
if ( !block_ptr )
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 );
4cc4a: 2f04 movel %d4,%sp@-
4cc4c: 2f10 movel %a0@,%sp@-
4cc4e: 4eb9 0004 e318 jsr 4e318 <memcpy>
my_length = 0;
copied += to_copy;
4cc54: 4fef 000c lea %sp@(12),%sp
}
IMFS_mtime_ctime_update( the_jnode );
4cc58: 42a7 clrl %sp@-
4cc5a: 486e fff8 pea %fp@(-8)
4cc5e: 4eb9 0004 2e48 jsr 42e48 <gettimeofday>
4cc64: 202e fff8 movel %fp@(-8),%d0
return copied;
4cc68: 508f addql #8,%sp
memcpy( &(*block_ptr)[ 0 ], src, my_length );
my_length = 0;
copied += to_copy;
}
IMFS_mtime_ctime_update( the_jnode );
4cc6a: 2540 0040 movel %d0,%a2@(64)
4cc6e: 2540 0044 movel %d0,%a2@(68)
return copied;
}
4cc72: 2003 movel %d3,%d0
4cc74: 4cee 1cfc ffd4 moveml %fp@(-44),%d2-%d7/%a2-%a4
4cc7a: 4e5e unlk %fp
4cc7c: 4e75 rts
* 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 ) {
4cc7e: 280b movel %a3,%d4
status = IMFS_memfile_extend( the_jnode, last_byte );
if ( status )
rtems_set_errno_and_return_minus_one( ENOSPC );
}
copied = 0;
4cc80: 4283 clrl %d3
4cc82: 6000 ff6a braw 4cbee <IMFS_memfile_write+0xbc>
* in memory file, then extend the length.
*/
last_byte = start + length;
if ( last_byte > the_jnode->info.file.size ) {
status = IMFS_memfile_extend( the_jnode, last_byte );
4cc86: 2f08 movel %a0,%sp@-
4cc88: 2f00 movel %d0,%sp@-
4cc8a: 2f0a movel %a2,%sp@-
4cc8c: 4eb9 0004 ca2c jsr 4ca2c <IMFS_memfile_extend>
if ( status )
4cc92: 4fef 000c lea %sp@(12),%sp
4cc96: 4a80 tstl %d0
4cc98: 6700 fed8 beqw 4cb72 <IMFS_memfile_write+0x40>
rtems_set_errno_and_return_minus_one( ENOSPC );
4cc9c: 4eb9 0004 da6c jsr 4da6c <__errno>
4cca2: 76ff moveq #-1,%d3
4cca4: 781c moveq #28,%d4
4cca6: 2040 moveal %d0,%a0
}
IMFS_mtime_ctime_update( the_jnode );
return copied;
}
4cca8: 2003 movel %d3,%d0
last_byte = start + length;
if ( last_byte > the_jnode->info.file.size ) {
status = IMFS_memfile_extend( the_jnode, last_byte );
if ( status )
rtems_set_errno_and_return_minus_one( ENOSPC );
4ccaa: 2084 movel %d4,%a0@
}
IMFS_mtime_ctime_update( the_jnode );
return copied;
}
4ccac: 4cee 1cfc ffd4 moveml %fp@(-44),%d2-%d7/%a2-%a4
4ccb2: 4e5e unlk %fp
4ccb4: 4e75 rts
*/
start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK;
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
if ( start_offset ) {
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset;
4ccb6: 2c07 movel %d7,%d6 <== NOT EXECUTED
block,
to_copy,
src
);
#endif
memcpy( &(*block_ptr)[ start_offset ], src, to_copy );
4ccb8: 2040 moveal %d0,%a0 <== NOT EXECUTED
src += to_copy;
4ccba: 280b movel %a3,%d4 <== NOT EXECUTED
4ccbc: d886 addl %d6,%d4 <== NOT EXECUTED
block++;
my_length -= to_copy;
4ccbe: 9e86 subl %d6,%d7 <== NOT EXECUTED
copied += to_copy;
4ccc0: 2606 movel %d6,%d3 <== NOT EXECUTED
src
);
#endif
memcpy( &(*block_ptr)[ start_offset ], src, to_copy );
src += to_copy;
block++;
4ccc2: 5282 addql #1,%d2 <== NOT EXECUTED
block,
to_copy,
src
);
#endif
memcpy( &(*block_ptr)[ start_offset ], src, to_copy );
4ccc4: 2f06 movel %d6,%sp@- <== NOT EXECUTED
4ccc6: 2f0b movel %a3,%sp@- <== NOT EXECUTED
4ccc8: d9d0 addal %a0@,%a4 <== NOT EXECUTED
4ccca: 2f0c movel %a4,%sp@- <== NOT EXECUTED
4cccc: 4eb9 0004 e318 jsr 4e318 <memcpy> <== NOT EXECUTED
src += to_copy;
block++;
my_length -= to_copy;
copied += to_copy;
4ccd2: 2c39 0005 dac8 movel 5dac8 <imfs_memfile_bytes_per_block>,%d6<== NOT EXECUTED
4ccd8: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4ccdc: 6000 ff10 braw 4cbee <IMFS_memfile_write+0xbc> <== NOT EXECUTED
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;
4cce0: 4283 clrl %d3 <== NOT EXECUTED
}
IMFS_mtime_ctime_update( the_jnode );
return copied;
}
4cce2: 2003 movel %d3,%d0 <== NOT EXECUTED
4cce4: 4cee 1cfc ffd4 moveml %fp@(-44),%d2-%d7/%a2-%a4 <== NOT EXECUTED
4ccea: 4e5e unlk %fp <== NOT EXECUTED
4ccec: 4e75 rts <== NOT EXECUTED
* If there is nothing to write, then quick exit.
*/
my_length = length;
if ( !my_length )
rtems_set_errno_and_return_minus_one( EINVAL );
4ccee: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
4ccf4: 76ff moveq #-1,%d3 <== NOT EXECUTED
4ccf6: 7a16 moveq #22,%d5 <== NOT EXECUTED
4ccf8: 2040 moveal %d0,%a0 <== NOT EXECUTED
}
IMFS_mtime_ctime_update( the_jnode );
return copied;
}
4ccfa: 2003 movel %d3,%d0 <== NOT EXECUTED
* If there is nothing to write, then quick exit.
*/
my_length = length;
if ( !my_length )
rtems_set_errno_and_return_minus_one( EINVAL );
4ccfc: 2085 movel %d5,%a0@ <== NOT EXECUTED
}
IMFS_mtime_ctime_update( the_jnode );
return copied;
}
4ccfe: 4cee 1cfc ffd4 moveml %fp@(-44),%d2-%d7/%a2-%a4 <== NOT EXECUTED
4cd04: 4e5e unlk %fp <== NOT EXECUTED
00042344 <IMFS_mknod>:
const char *token, /* IN */
mode_t mode, /* IN */
dev_t dev, /* IN */
rtems_filesystem_location_info_t *pathloc /* IN/OUT */
)
{
42344: 4e56 ffb0 linkw %fp,#-80
42348: 48d7 007c moveml %d2-%d6,%sp@
4234c: 242e 0008 movel %fp@(8),%d2
IMFS_jnode_t *new_node;
int result;
char new_name[ IMFS_NAME_MAX + 1 ];
IMFS_types_union info;
IMFS_get_token( token, strlen( token ), new_name, &result );
42350: 260e movel %fp,%d3
42352: 0683 ffff ffc7 addil #-57,%d3
42358: 2f02 movel %d2,%sp@-
const char *token, /* IN */
mode_t mode, /* IN */
dev_t dev, /* IN */
rtems_filesystem_location_info_t *pathloc /* IN/OUT */
)
{
4235a: 282e 000c movel %fp@(12),%d4
IMFS_jnode_t *new_node;
int result;
char new_name[ IMFS_NAME_MAX + 1 ];
IMFS_types_union info;
IMFS_get_token( token, strlen( token ), new_name, &result );
4235e: 4eb9 0004 eec4 jsr 4eec4 <strlen>
42364: 588f addql #4,%sp
42366: 486e fffc pea %fp@(-4)
const char *token, /* IN */
mode_t mode, /* IN */
dev_t dev, /* IN */
rtems_filesystem_location_info_t *pathloc /* IN/OUT */
)
{
4236a: 2c2e 0010 movel %fp@(16),%d6
IMFS_jnode_t *new_node;
int result;
char new_name[ IMFS_NAME_MAX + 1 ];
IMFS_types_union info;
IMFS_get_token( token, strlen( token ), new_name, &result );
4236e: 2f03 movel %d3,%sp@-
const char *token, /* IN */
mode_t mode, /* IN */
dev_t dev, /* IN */
rtems_filesystem_location_info_t *pathloc /* IN/OUT */
)
{
42370: 2a2e 0014 movel %fp@(20),%d5
IMFS_jnode_t *new_node;
int result;
char new_name[ IMFS_NAME_MAX + 1 ];
IMFS_types_union info;
IMFS_get_token( token, strlen( token ), new_name, &result );
42374: 2f00 movel %d0,%sp@-
42376: 2f02 movel %d2,%sp@-
42378: 4eb9 0004 aac8 jsr 4aac8 <IMFS_get_token>
/*
* Figure out what type of IMFS node this is.
*/
if ( S_ISDIR(mode) )
4237e: 4fef 0010 lea %sp@(16),%sp
42382: 2004 movel %d4,%d0
42384: 0280 0000 f000 andil #61440,%d0
4238a: 0c80 0000 4000 cmpil #16384,%d0
42390: 675a beqs 423ec <IMFS_mknod+0xa8>
type = IMFS_DIRECTORY;
else if ( S_ISREG(mode) )
42392: 0c80 0000 8000 cmpil #32768,%d0
42398: 674e beqs 423e8 <IMFS_mknod+0xa4>
type = IMFS_MEMORY_FILE;
else if ( S_ISBLK(mode) || S_ISCHR(mode) ) {
4239a: 0c80 0000 6000 cmpil #24576,%d0
423a0: 673a beqs 423dc <IMFS_mknod+0x98>
423a2: 0c80 0000 2000 cmpil #8192,%d0
423a8: 6732 beqs 423dc <IMFS_mknod+0x98>
type = IMFS_DEVICE;
rtems_filesystem_split_dev_t( dev, info.device.major, info.device.minor );
}
else if (S_ISFIFO(mode))
423aa: 0c80 0000 1000 cmpil #4096,%d0
423b0: 663e bnes 423f0 <IMFS_mknod+0xac> <== NEVER TAKEN
type = IMFS_FIFO;
423b2: 7007 moveq #7,%d0
* was ONLY passed a NULL when we created the root node. We
* added a new IMFS_create_root_node() so this path no longer
* existed. The result was simpler code which should not have
* this path.
*/
new_node = IMFS_create_node(
423b4: 486e ffe8 pea %fp@(-24)
423b8: 2f04 movel %d4,%sp@-
423ba: 2f03 movel %d3,%sp@-
423bc: 2f00 movel %d0,%sp@-
423be: 2f2e 0018 movel %fp@(24),%sp@-
423c2: 4eb9 0004 9fa4 jsr 49fa4 <IMFS_create_node>
new_name,
mode,
&info
);
if ( !new_node )
423c8: 4fef 0014 lea %sp@(20),%sp
423cc: 4a80 tstl %d0
423ce: 6738 beqs 42408 <IMFS_mknod+0xc4>
rtems_set_errno_and_return_minus_one( ENOMEM );
return 0;
423d0: 4280 clrl %d0
}
423d2: 4cee 007c ffb0 moveml %fp@(-80),%d2-%d6
423d8: 4e5e unlk %fp
423da: 4e75 rts
type = IMFS_DIRECTORY;
else if ( S_ISREG(mode) )
type = IMFS_MEMORY_FILE;
else if ( S_ISBLK(mode) || S_ISCHR(mode) ) {
type = IMFS_DEVICE;
rtems_filesystem_split_dev_t( dev, info.device.major, info.device.minor );
423dc: 2d46 ffe8 movel %d6,%fp@(-24)
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;
423e0: 7002 moveq #2,%d0
rtems_filesystem_split_dev_t( dev, info.device.major, info.device.minor );
423e2: 2d45 ffec movel %d5,%fp@(-20)
423e6: 60cc bras 423b4 <IMFS_mknod+0x70>
* Figure out what type of IMFS node this is.
*/
if ( S_ISDIR(mode) )
type = IMFS_DIRECTORY;
else if ( S_ISREG(mode) )
type = IMFS_MEMORY_FILE;
423e8: 7005 moveq #5,%d0
423ea: 60c8 bras 423b4 <IMFS_mknod+0x70>
/*
* Figure out what type of IMFS node this is.
*/
if ( S_ISDIR(mode) )
type = IMFS_DIRECTORY;
423ec: 7001 moveq #1,%d0
423ee: 60c4 bras 423b4 <IMFS_mknod+0x70>
rtems_filesystem_split_dev_t( dev, info.device.major, info.device.minor );
}
else if (S_ISFIFO(mode))
type = IMFS_FIFO;
else {
rtems_set_errno_and_return_minus_one( EINVAL );
423f0: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
423f6: 7416 moveq #22,%d2 <== NOT EXECUTED
423f8: 2040 moveal %d0,%a0 <== NOT EXECUTED
423fa: 70ff moveq #-1,%d0 <== NOT EXECUTED
423fc: 2082 movel %d2,%a0@ <== NOT EXECUTED
if ( !new_node )
rtems_set_errno_and_return_minus_one( ENOMEM );
return 0;
}
423fe: 4cee 007c ffb0 moveml %fp@(-80),%d2-%d6 <== NOT EXECUTED
42404: 4e5e unlk %fp <== NOT EXECUTED
42406: 4e75 rts <== NOT EXECUTED
mode,
&info
);
if ( !new_node )
rtems_set_errno_and_return_minus_one( ENOMEM );
42408: 4eb9 0004 da6c jsr 4da6c <__errno>
4240e: 720c moveq #12,%d1
42410: 2040 moveal %d0,%a0
42412: 70ff moveq #-1,%d0
return 0;
}
42414: 4cee 007c ffb0 moveml %fp@(-80),%d2-%d6
mode,
&info
);
if ( !new_node )
rtems_set_errno_and_return_minus_one( ENOMEM );
4241a: 2081 movel %d1,%a0@
return 0;
}
4241c: 4e5e unlk %fp <== NOT EXECUTED
00042420 <IMFS_mount>:
/*
* Is the node that we are mounting onto a directory node ?
*/
if ( node->type != IMFS_DIRECTORY )
42420: 7001 moveq #1,%d0
#include <rtems/seterr.h>
int IMFS_mount(
rtems_filesystem_mount_table_entry_t *mt_entry
)
{
42422: 4e56 0000 linkw %fp,#0
42426: 226e 0008 moveal %fp@(8),%a1
IMFS_jnode_t *node;
node = mt_entry->mt_point_node.node_access;
4242a: 2069 0008 moveal %a1@(8),%a0
/*
* Is the node that we are mounting onto a directory node ?
*/
if ( node->type != IMFS_DIRECTORY )
4242e: b0a8 0048 cmpl %a0@(72),%d0
42432: 660a bnes 4243e <IMFS_mount+0x1e> <== NEVER TAKEN
/*
* Set mt_fs pointer to point to the mount table entry for
* the mounted file system.
*/
node->info.directory.mt_fs = mt_entry;
42434: 2149 0058 movel %a1,%a0@(88)
return 0;
42438: 4280 clrl %d0
}
4243a: 4e5e unlk %fp
4243c: 4e75 rts
/*
* Is the node that we are mounting onto a directory node ?
*/
if ( node->type != IMFS_DIRECTORY )
rtems_set_errno_and_return_minus_one( ENOTDIR );
4243e: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
42444: 7214 moveq #20,%d1 <== NOT EXECUTED
42446: 2040 moveal %d0,%a0 <== NOT EXECUTED
42448: 70ff moveq #-1,%d0 <== NOT EXECUTED
* the mounted file system.
*/
node->info.directory.mt_fs = mt_entry;
return 0;
}
4244a: 4e5e unlk %fp <== NOT EXECUTED
/*
* Is the node that we are mounting onto a directory node ?
*/
if ( node->type != IMFS_DIRECTORY )
rtems_set_errno_and_return_minus_one( ENOTDIR );
4244c: 2081 movel %d1,%a0@ <== NOT EXECUTED
* the mounted file system.
*/
node->info.directory.mt_fs = mt_entry;
return 0;
}
00044104 <IMFS_print_jnode>:
*/
void IMFS_print_jnode(
IMFS_jnode_t *the_jnode
)
{
44104: 4e56 0000 linkw %fp,#0
#if defined(RTEMS_DEBUG)
assert( the_jnode );
#endif
fprintf(stdout, "%s", the_jnode->name );
44108: 2079 0006 2030 moveal 62030 <_impure_ptr>,%a0
*/
void IMFS_print_jnode(
IMFS_jnode_t *the_jnode
)
{
4410e: 2f0a movel %a2,%sp@-
#if defined(RTEMS_DEBUG)
assert( the_jnode );
#endif
fprintf(stdout, "%s", the_jnode->name );
44110: 2f28 0008 movel %a0@(8),%sp@-
*/
void IMFS_print_jnode(
IMFS_jnode_t *the_jnode
)
{
44114: 246e 0008 moveal %fp@(8),%a2
#if defined(RTEMS_DEBUG)
assert( the_jnode );
#endif
fprintf(stdout, "%s", the_jnode->name );
44118: 486a 000c pea %a2@(12)
4411c: 4eb9 0005 1678 jsr 51678 <fputs>
switch( the_jnode->type ) {
44122: 202a 0048 movel %a2@(72),%d0
44126: 508f addql #8,%sp
44128: 7207 moveq #7,%d1
4412a: b280 cmpl %d0,%d1
4412c: 6424 bccs 44152 <IMFS_print_jnode+0x4e> <== ALWAYS TAKEN
case IMFS_FIFO:
fprintf(stdout, " FIFO not printed\n" );
return;
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
4412e: 2f00 movel %d0,%sp@- <== NOT EXECUTED
44130: 4879 0006 0a67 pea 60a67 <IntUartPollCallbacks.6194+0x75> <== NOT EXECUTED
44136: 2079 0006 2030 moveal 62030 <_impure_ptr>,%a0 <== NOT EXECUTED
4413c: 2f28 0008 movel %a0@(8),%sp@- <== NOT EXECUTED
44140: 4eb9 0005 152a jsr 5152a <fprintf> <== NOT EXECUTED
return;
}
puts("");
}
44146: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
fprintf(stdout, " FIFO not printed\n" );
return;
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
return;
4414a: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
}
puts("");
}
4414e: 4e5e unlk %fp <== NOT EXECUTED
44150: 4e75 rts <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
assert( the_jnode );
#endif
fprintf(stdout, "%s", the_jnode->name );
switch( the_jnode->type ) {
44152: 323b 0a08 movew %pc@(4415c <IMFS_print_jnode+0x58>,%d0:l:2),%d1
44156: 48c1 extl %d1
44158: 4efb 1802 jmp %pc@(4415c <IMFS_print_jnode+0x58>,%d1:l)
4415c: ffd2 0177722 <== NOT EXECUTED
4415e: 003a 072 <== NOT EXECUTED
44160: 0066 0146 <== NOT EXECUTED
44162: 0010 020 <== NOT EXECUTED
44164: 0010 020 <== NOT EXECUTED
44166: 009e 00d2 010a oril #13762826,%d6 <== NOT EXECUTED
case IMFS_HARD_LINK:
fprintf(stdout, " links not printed\n" );
return;
case IMFS_SYM_LINK:
fprintf(stdout, " links not printed\n" );
4416c: 2079 0006 2030 moveal 62030 <_impure_ptr>,%a0 <== NOT EXECUTED
44172: 2f28 0008 movel %a0@(8),%sp@- <== NOT EXECUTED
44176: 4878 0013 pea 13 <INVALID_OPERATION+0x3> <== NOT EXECUTED
4417a: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
4417e: 4879 0006 0a40 pea 60a40 <IntUartPollCallbacks.6194+0x4e> <== NOT EXECUTED
44184: 4eb9 0005 21e8 jsr 521e8 <fwrite> <== NOT EXECUTED
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
return;
}
puts("");
}
4418a: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
fprintf(stdout, " links not printed\n" );
return;
case IMFS_SYM_LINK:
fprintf(stdout, " links not printed\n" );
return;
4418e: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
return;
}
puts("");
}
44192: 4e5e unlk %fp <== NOT EXECUTED
44194: 4e75 rts <== NOT EXECUTED
#endif
fprintf(stdout, "%s", the_jnode->name );
switch( the_jnode->type ) {
case IMFS_DIRECTORY:
fprintf(stdout, "/" );
44196: 2079 0006 2030 moveal 62030 <_impure_ptr>,%a0
4419c: 2f28 0008 movel %a0@(8),%sp@-
441a0: 4878 002f pea 2f <OPER2+0x1b>
441a4: 4eb9 0005 15a8 jsr 515a8 <fputc>
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
return;
}
puts("");
}
441aa: 246e fffc moveal %fp@(-4),%a2
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
return;
}
puts("");
441ae: 203c 0006 10a8 movel #397480,%d0
fprintf(stdout, "%s", the_jnode->name );
switch( the_jnode->type ) {
case IMFS_DIRECTORY:
fprintf(stdout, "/" );
break;
441b4: 508f addql #8,%sp
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
return;
}
puts("");
441b6: 2d40 0008 movel %d0,%fp@(8)
}
441ba: 4e5e unlk %fp
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
return;
}
puts("");
441bc: 4ef9 0005 2f4a jmp 52f4a <puts>
case IMFS_DIRECTORY:
fprintf(stdout, "/" );
break;
case IMFS_DEVICE:
fprintf(stdout, " (device %" PRId32 ", %" PRId32 ")",
441c2: 2f2a 0050 movel %a2@(80),%sp@-
441c6: 2f2a 004c movel %a2@(76),%sp@-
441ca: 2079 0006 2030 moveal 62030 <_impure_ptr>,%a0
441d0: 4879 0006 0a12 pea 60a12 <IntUartPollCallbacks.6194+0x20>
441d6: 2f28 0008 movel %a0@(8),%sp@-
441da: 4eb9 0005 152a jsr 5152a <fprintf>
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
return;
}
puts("");
}
441e0: 246e fffc moveal %fp@(-4),%a2
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
return;
}
puts("");
441e4: 203c 0006 10a8 movel #397480,%d0
break;
case IMFS_DEVICE:
fprintf(stdout, " (device %" PRId32 ", %" PRId32 ")",
the_jnode->info.device.major, the_jnode->info.device.minor );
break;
441ea: 4fef 0010 lea %sp@(16),%sp
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
return;
}
puts("");
441ee: 2d40 0008 movel %d0,%fp@(8)
}
441f2: 4e5e unlk %fp
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
return;
}
puts("");
441f4: 4ef9 0005 2f4a jmp 52f4a <puts>
the_jnode->info.file.indirect,
the_jnode->info.file.doubly_indirect,
the_jnode->info.file.triply_indirect
);
#else
fprintf(stdout, " (file %" PRId32 ")",
441fa: 2f2a 0050 movel %a2@(80),%sp@- <== NOT EXECUTED
441fe: 2079 0006 2030 moveal 62030 <_impure_ptr>,%a0 <== NOT EXECUTED
44204: 4879 0006 0a34 pea 60a34 <IntUartPollCallbacks.6194+0x42> <== NOT EXECUTED
4420a: 2f28 0008 movel %a0@(8),%sp@- <== NOT EXECUTED
4420e: 4eb9 0005 152a jsr 5152a <fprintf> <== NOT EXECUTED
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
return;
}
puts("");
}
44214: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
return;
}
puts("");
44218: 203c 0006 10a8 movel #397480,%d0 <== NOT EXECUTED
);
#else
fprintf(stdout, " (file %" PRId32 ")",
(uint32_t)the_jnode->info.file.size );
#endif
break;
4421e: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
return;
}
puts("");
44222: 2d40 0008 movel %d0,%fp@(8) <== NOT EXECUTED
}
44226: 4e5e unlk %fp <== NOT EXECUTED
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
return;
}
puts("");
44228: 4ef9 0005 2f4a jmp 52f4a <puts> <== NOT EXECUTED
fprintf(stdout, " (device %" PRId32 ", %" PRId32 ")",
the_jnode->info.device.major, the_jnode->info.device.minor );
break;
case IMFS_LINEAR_FILE:
fprintf(stdout, " (file %" PRId32 " %p)",
4422e: 2f2a 0054 movel %a2@(84),%sp@- <== NOT EXECUTED
44232: 2f2a 0050 movel %a2@(80),%sp@- <== NOT EXECUTED
44236: 2079 0006 2030 moveal 62030 <_impure_ptr>,%a0 <== NOT EXECUTED
4423c: 4879 0006 0a25 pea 60a25 <IntUartPollCallbacks.6194+0x33> <== NOT EXECUTED
44242: 2f28 0008 movel %a0@(8),%sp@- <== NOT EXECUTED
44246: 4eb9 0005 152a jsr 5152a <fprintf> <== NOT EXECUTED
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
return;
}
puts("");
}
4424c: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
return;
}
puts("");
44250: 203c 0006 10a8 movel #397480,%d0 <== NOT EXECUTED
case IMFS_LINEAR_FILE:
fprintf(stdout, " (file %" PRId32 " %p)",
(uint32_t)the_jnode->info.linearfile.size,
the_jnode->info.linearfile.direct
);
break;
44256: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
return;
}
puts("");
4425a: 2d40 0008 movel %d0,%fp@(8) <== NOT EXECUTED
}
4425e: 4e5e unlk %fp <== NOT EXECUTED
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
return;
}
puts("");
44260: 4ef9 0005 2f4a jmp 52f4a <puts> <== NOT EXECUTED
case IMFS_SYM_LINK:
fprintf(stdout, " links not printed\n" );
return;
case IMFS_FIFO:
fprintf(stdout, " FIFO not printed\n" );
44266: 2079 0006 2030 moveal 62030 <_impure_ptr>,%a0 <== NOT EXECUTED
4426c: 2f28 0008 movel %a0@(8),%sp@- <== NOT EXECUTED
44270: 4878 0012 pea 12 <INVALID_OPERATION+0x2> <== NOT EXECUTED
44274: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
44278: 4879 0006 0a54 pea 60a54 <IntUartPollCallbacks.6194+0x62> <== NOT EXECUTED
4427e: 4eb9 0005 21e8 jsr 521e8 <fwrite> <== NOT EXECUTED
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
return;
}
puts("");
}
44284: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
fprintf(stdout, " links not printed\n" );
return;
case IMFS_FIFO:
fprintf(stdout, " FIFO not printed\n" );
return;
44288: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
return;
}
puts("");
}
4428c: 4e5e unlk %fp <== NOT EXECUTED
00042464 <IMFS_readlink>:
IMFS_jnode_t *node;
int i;
node = loc->node_access;
if ( node->type != IMFS_SYM_LINK )
42464: 7004 moveq #4,%d0
int IMFS_readlink(
rtems_filesystem_location_info_t *loc,
char *buf, /* OUT */
size_t bufsize
)
{
42466: 4e56 fff4 linkw %fp,#-12
IMFS_jnode_t *node;
int i;
node = loc->node_access;
4246a: 206e 0008 moveal %fp@(8),%a0
int IMFS_readlink(
rtems_filesystem_location_info_t *loc,
char *buf, /* OUT */
size_t bufsize
)
{
4246e: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
42472: 266e 000c moveal %fp@(12),%a3
42476: 242e 0010 movel %fp@(16),%d2
IMFS_jnode_t *node;
int i;
node = loc->node_access;
4247a: 2450 moveal %a0@,%a2
if ( node->type != IMFS_SYM_LINK )
4247c: b0aa 0048 cmpl %a2@(72),%d0
42480: 663c bnes 424be <IMFS_readlink+0x5a> <== NEVER TAKEN
rtems_set_errno_and_return_minus_one( EINVAL );
for( i=0; ((i<bufsize) && (node->info.sym_link.name[i] != '\0')); i++ )
42482: 4a82 tstl %d2
42484: 672c beqs 424b2 <IMFS_readlink+0x4e> <== NEVER TAKEN
42486: 206a 004c moveal %a2@(76),%a0
4248a: 1210 moveb %a0@,%d1
4248c: 6748 beqs 424d6 <IMFS_readlink+0x72> <== NEVER TAKEN
4248e: 91c8 subal %a0,%a0
42490: 4280 clrl %d0
42492: 5280 addql #1,%d0
buf[i] = node->info.sym_link.name[i];
42494: 1781 8800 moveb %d1,%a3@(00000000,%a0:l)
node = loc->node_access;
if ( node->type != IMFS_SYM_LINK )
rtems_set_errno_and_return_minus_one( EINVAL );
for( i=0; ((i<bufsize) && (node->info.sym_link.name[i] != '\0')); i++ )
42498: 2040 moveal %d0,%a0
4249a: b082 cmpl %d2,%d0
4249c: 640a bccs 424a8 <IMFS_readlink+0x44>
4249e: 226a 004c moveal %a2@(76),%a1
424a2: 1231 0800 moveb %a1@(00000000,%d0:l),%d1
424a6: 66ea bnes 42492 <IMFS_readlink+0x2e>
buf[i] = node->info.sym_link.name[i];
return i;
}
424a8: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3
424ae: 4e5e unlk %fp
424b0: 4e75 rts
node = loc->node_access;
if ( node->type != IMFS_SYM_LINK )
rtems_set_errno_and_return_minus_one( EINVAL );
for( i=0; ((i<bufsize) && (node->info.sym_link.name[i] != '\0')); i++ )
424b2: 4280 clrl %d0 <== NOT EXECUTED
buf[i] = node->info.sym_link.name[i];
return i;
}
424b4: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3 <== NOT EXECUTED
424ba: 4e5e unlk %fp <== NOT EXECUTED
424bc: 4e75 rts <== NOT EXECUTED
int i;
node = loc->node_access;
if ( node->type != IMFS_SYM_LINK )
rtems_set_errno_and_return_minus_one( EINVAL );
424be: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
424c4: 7216 moveq #22,%d1 <== NOT EXECUTED
424c6: 2040 moveal %d0,%a0 <== NOT EXECUTED
424c8: 70ff moveq #-1,%d0 <== NOT EXECUTED
for( i=0; ((i<bufsize) && (node->info.sym_link.name[i] != '\0')); i++ )
buf[i] = node->info.sym_link.name[i];
return i;
}
424ca: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3 <== NOT EXECUTED
int i;
node = loc->node_access;
if ( node->type != IMFS_SYM_LINK )
rtems_set_errno_and_return_minus_one( EINVAL );
424d0: 2081 movel %d1,%a0@ <== NOT EXECUTED
for( i=0; ((i<bufsize) && (node->info.sym_link.name[i] != '\0')); i++ )
buf[i] = node->info.sym_link.name[i];
return i;
}
424d2: 4e5e unlk %fp <== NOT EXECUTED
424d4: 4e75 rts <== NOT EXECUTED
node = loc->node_access;
if ( node->type != IMFS_SYM_LINK )
rtems_set_errno_and_return_minus_one( EINVAL );
for( i=0; ((i<bufsize) && (node->info.sym_link.name[i] != '\0')); i++ )
424d6: 4200 clrb %d0 <== NOT EXECUTED
buf[i] = node->info.sym_link.name[i];
return i;
}
424d8: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3 <== NOT EXECUTED
424de: 4e5e unlk %fp <== NOT EXECUTED
...
000424e4 <IMFS_rename>:
rtems_filesystem_location_info_t *old_parent_loc, /* IN */
rtems_filesystem_location_info_t *old_loc, /* IN */
rtems_filesystem_location_info_t *new_parent_loc, /* IN */
const char *new_name /* IN */
)
{
424e4: 4e56 fff8 linkw %fp,#-8 <== NOT EXECUTED
IMFS_jnode_t *the_jnode;
IMFS_jnode_t *new_parent;
the_jnode = old_loc->node_access;
424e8: 206e 000c moveal %fp@(12),%a0 <== NOT EXECUTED
rtems_filesystem_location_info_t *old_parent_loc, /* IN */
rtems_filesystem_location_info_t *old_loc, /* IN */
rtems_filesystem_location_info_t *new_parent_loc, /* IN */
const char *new_name /* IN */
)
{
424ec: 2f0a movel %a2,%sp@- <== NOT EXECUTED
IMFS_jnode_t *the_jnode;
IMFS_jnode_t *new_parent;
the_jnode = old_loc->node_access;
strncpy( the_jnode->name, new_name, IMFS_NAME_MAX );
424ee: 4878 0020 pea 20 <OPER2+0xc> <== NOT EXECUTED
424f2: 2f2e 0014 movel %fp@(20),%sp@- <== NOT EXECUTED
)
{
IMFS_jnode_t *the_jnode;
IMFS_jnode_t *new_parent;
the_jnode = old_loc->node_access;
424f6: 2450 moveal %a0@,%a2 <== NOT EXECUTED
strncpy( the_jnode->name, new_name, IMFS_NAME_MAX );
424f8: 486a 000c pea %a2@(12) <== NOT EXECUTED
424fc: 4eb9 0004 eedc jsr 4eedc <strncpy> <== NOT EXECUTED
if ( the_jnode->Parent != NULL )
42502: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
42506: 4aaa 0008 tstl %a2@(8) <== NOT EXECUTED
4250a: 670a beqs 42516 <IMFS_rename+0x32> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void rtems_chain_extract(
rtems_chain_node *the_node
)
{
_Chain_Extract( the_node );
4250c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4250e: 4eb9 0004 7074 jsr 47074 <_Chain_Extract> <== NOT EXECUTED
42514: 588f addql #4,%sp <== NOT EXECUTED
rtems_chain_extract( (rtems_chain_node *) the_jnode );
new_parent = new_parent_loc->node_access;
42516: 206e 0010 moveal %fp@(16),%a0 <== NOT EXECUTED
4251a: 2050 moveal %a0@,%a0 <== NOT EXECUTED
the_jnode->Parent = new_parent;
4251c: 2548 0008 movel %a0,%a2@(8) <== 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 );
42520: 2f0a movel %a2,%sp@- <== NOT EXECUTED
42522: 4868 004c pea %a0@(76) <== NOT EXECUTED
42526: 4eb9 0004 703c jsr 4703c <_Chain_Append> <== NOT EXECUTED
rtems_chain_append( &new_parent->info.directory.Entries, &the_jnode->Node );
/*
* Update the time.
*/
IMFS_update_ctime( the_jnode );
4252c: 42a7 clrl %sp@- <== NOT EXECUTED
4252e: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
42532: 4eb9 0004 2e48 jsr 42e48 <gettimeofday> <== NOT EXECUTED
42538: 256e fff8 0044 movel %fp@(-8),%a2@(68) <== NOT EXECUTED
return 0;
}
4253e: 4280 clrl %d0 <== NOT EXECUTED
42540: 246e fff4 moveal %fp@(-12),%a2 <== NOT EXECUTED
42544: 4e5e unlk %fp <== NOT EXECUTED
0004acac <IMFS_stat>:
IMFS_device_t *io;
the_jnode = loc->node_access;
switch ( the_jnode->type ) {
4acac: 7007 moveq #7,%d0
int IMFS_stat(
rtems_filesystem_location_info_t *loc,
struct stat *buf
)
{
4acae: 4e56 0000 linkw %fp,#0
4acb2: 206e 000c moveal %fp@(12),%a0
4acb6: 2f0a movel %a2,%sp@-
4acb8: 246e 0008 moveal %fp@(8),%a2
IMFS_fs_info_t *fs_info;
IMFS_jnode_t *the_jnode;
IMFS_device_t *io;
the_jnode = loc->node_access;
4acbc: 2252 moveal %a2@,%a1
switch ( the_jnode->type ) {
4acbe: b0a9 0048 cmpl %a1@(72),%d0
4acc2: 6418 bccs 4acdc <IMFS_stat+0x30> <== ALWAYS TAKEN
case IMFS_FIFO:
buf->st_size = 0;
break;
default:
rtems_set_errno_and_return_minus_one( ENOTSUP );
4acc4: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
buf->st_atime = the_jnode->stat_atime;
buf->st_mtime = the_jnode->stat_mtime;
buf->st_ctime = the_jnode->stat_ctime;
return 0;
}
4acca: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
case IMFS_FIFO:
buf->st_size = 0;
break;
default:
rtems_set_errno_and_return_minus_one( ENOTSUP );
4acce: 2040 moveal %d0,%a0 <== NOT EXECUTED
4acd0: 70ff moveq #-1,%d0 <== NOT EXECUTED
buf->st_atime = the_jnode->stat_atime;
buf->st_mtime = the_jnode->stat_mtime;
buf->st_ctime = the_jnode->stat_ctime;
return 0;
}
4acd2: 4e5e unlk %fp <== NOT EXECUTED
case IMFS_FIFO:
buf->st_size = 0;
break;
default:
rtems_set_errno_and_return_minus_one( ENOTSUP );
4acd4: 20bc 0000 0086 movel #134,%a0@ <== NOT EXECUTED
buf->st_atime = the_jnode->stat_atime;
buf->st_mtime = the_jnode->stat_mtime;
buf->st_ctime = the_jnode->stat_ctime;
return 0;
}
4acda: 4e75 rts <== NOT EXECUTED
IMFS_device_t *io;
the_jnode = loc->node_access;
switch ( the_jnode->type ) {
4acdc: 2029 0048 movel %a1@(72),%d0
4ace0: d080 addl %d0,%d0
4ace2: 303b 0808 movew %pc@(4acec <IMFS_stat+0x40>,%d0:l),%d0
4ace6: 48c0 extl %d0
4ace8: 4efb 0802 jmp %pc@(4acec <IMFS_stat+0x40>,%d0:l)
4acec: ffd8 0177730 <== NOT EXECUTED
4acee: ffd8 0177730 <== NOT EXECUTED
4acf0: 00c2 bitrev %d2 <== NOT EXECUTED
4acf2: ffd8 0177730 <== NOT EXECUTED
4acf4: 0010 020 <== NOT EXECUTED
4acf6: 006a 0152 <== NOT EXECUTED
4acf8: 006a 0152 <== NOT EXECUTED
4acfa: 0010 020 <== NOT EXECUTED
/*
* The device number of the IMFS is the major number and the minor is the
* instance.
*/
fs_info = loc->mt_entry->fs_info;
4acfc: 246a 0010 moveal %a2@(16),%a2
case IMFS_SYM_LINK:
buf->st_size = 0;
break;
case IMFS_FIFO:
buf->st_size = 0;
4ad00: 4280 clrl %d0
4ad02: 4281 clrl %d1
* The device number of the IMFS is the major number and the minor is the
* instance.
*/
fs_info = loc->mt_entry->fs_info;
buf->st_dev =
rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance );
4ad04: 246a 0034 moveal %a2@(52),%a2
case IMFS_SYM_LINK:
buf->st_size = 0;
break;
case IMFS_FIFO:
buf->st_size = 0;
4ad08: 2140 001e movel %d0,%a0@(30)
4ad0c: 2141 0022 movel %d1,%a0@(34)
* The device number of the IMFS is the major number and the minor is the
* instance.
*/
fs_info = loc->mt_entry->fs_info;
buf->st_dev =
rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance );
4ad10: 2212 movel %a2@,%d1
buf->st_atime = the_jnode->stat_atime;
buf->st_mtime = the_jnode->stat_mtime;
buf->st_ctime = the_jnode->stat_ctime;
return 0;
4ad12: 4280 clrl %d0
*/
fs_info = loc->mt_entry->fs_info;
buf->st_dev =
rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance );
buf->st_mode = the_jnode->st_mode;
4ad14: 2169 002e 000c movel %a1@(46),%a0@(12)
buf->st_nlink = the_jnode->st_nlink;
4ad1a: 3169 0032 0010 movew %a1@(50),%a0@(16)
buf->st_ino = the_jnode->st_ino;
4ad20: 2169 0034 0008 movel %a1@(52),%a0@(8)
buf->st_uid = the_jnode->st_uid;
4ad26: 3169 0038 0012 movew %a1@(56),%a0@(18)
buf->st_gid = the_jnode->st_gid;
4ad2c: 3169 003a 0014 movew %a1@(58),%a0@(20)
buf->st_atime = the_jnode->stat_atime;
4ad32: 2169 003c 0026 movel %a1@(60),%a0@(38)
buf->st_mtime = the_jnode->stat_mtime;
4ad38: 2169 0040 002e movel %a1@(64),%a0@(46)
buf->st_ctime = the_jnode->stat_ctime;
4ad3e: 2169 0044 0036 movel %a1@(68),%a0@(54)
/*
* The device number of the IMFS is the major number and the minor is the
* instance.
*/
fs_info = loc->mt_entry->fs_info;
buf->st_dev =
4ad44: 20bc 0000 fffe movel #65534,%a0@
4ad4a: 2141 0004 movel %d1,%a0@(4)
buf->st_atime = the_jnode->stat_atime;
buf->st_mtime = the_jnode->stat_mtime;
buf->st_ctime = the_jnode->stat_ctime;
return 0;
}
4ad4e: 246e fffc moveal %fp@(-4),%a2
4ad52: 4e5e unlk %fp
4ad54: 4e75 rts
/*
* The device number of the IMFS is the major number and the minor is the
* instance.
*/
fs_info = loc->mt_entry->fs_info;
4ad56: 246a 0010 moveal %a2@(16),%a2
buf->st_rdev = rtems_filesystem_make_dev_t( io->major, io->minor );
break;
case IMFS_LINEAR_FILE:
case IMFS_MEMORY_FILE:
buf->st_size = the_jnode->info.file.size;
4ad5a: 2029 004c movel %a1@(76),%d0
4ad5e: 2229 0050 movel %a1@(80),%d1
* The device number of the IMFS is the major number and the minor is the
* instance.
*/
fs_info = loc->mt_entry->fs_info;
buf->st_dev =
rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance );
4ad62: 246a 0034 moveal %a2@(52),%a2
buf->st_rdev = rtems_filesystem_make_dev_t( io->major, io->minor );
break;
case IMFS_LINEAR_FILE:
case IMFS_MEMORY_FILE:
buf->st_size = the_jnode->info.file.size;
4ad66: 2140 001e movel %d0,%a0@(30)
4ad6a: 2141 0022 movel %d1,%a0@(34)
* The device number of the IMFS is the major number and the minor is the
* instance.
*/
fs_info = loc->mt_entry->fs_info;
buf->st_dev =
rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance );
4ad6e: 2212 movel %a2@,%d1
buf->st_atime = the_jnode->stat_atime;
buf->st_mtime = the_jnode->stat_mtime;
buf->st_ctime = the_jnode->stat_ctime;
return 0;
4ad70: 4280 clrl %d0
*/
fs_info = loc->mt_entry->fs_info;
buf->st_dev =
rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance );
buf->st_mode = the_jnode->st_mode;
4ad72: 2169 002e 000c movel %a1@(46),%a0@(12)
buf->st_nlink = the_jnode->st_nlink;
4ad78: 3169 0032 0010 movew %a1@(50),%a0@(16)
buf->st_ino = the_jnode->st_ino;
4ad7e: 2169 0034 0008 movel %a1@(52),%a0@(8)
buf->st_uid = the_jnode->st_uid;
4ad84: 3169 0038 0012 movew %a1@(56),%a0@(18)
buf->st_gid = the_jnode->st_gid;
4ad8a: 3169 003a 0014 movew %a1@(58),%a0@(20)
buf->st_atime = the_jnode->stat_atime;
4ad90: 2169 003c 0026 movel %a1@(60),%a0@(38)
buf->st_mtime = the_jnode->stat_mtime;
4ad96: 2169 0040 002e movel %a1@(64),%a0@(46)
buf->st_ctime = the_jnode->stat_ctime;
4ad9c: 2169 0044 0036 movel %a1@(68),%a0@(54)
/*
* The device number of the IMFS is the major number and the minor is the
* instance.
*/
fs_info = loc->mt_entry->fs_info;
buf->st_dev =
4ada2: 20bc 0000 fffe movel #65534,%a0@
4ada8: 2141 0004 movel %d1,%a0@(4)
4adac: 60a0 bras 4ad4e <IMFS_stat+0xa2>
/*
* The device number of the IMFS is the major number and the minor is the
* instance.
*/
fs_info = loc->mt_entry->fs_info;
4adae: 246a 0010 moveal %a2@(16),%a2
switch ( the_jnode->type ) {
case IMFS_DEVICE:
io = &the_jnode->info.device;
buf->st_rdev = rtems_filesystem_make_dev_t( io->major, io->minor );
4adb2: 2029 0050 movel %a1@(80),%d0
* The device number of the IMFS is the major number and the minor is the
* instance.
*/
fs_info = loc->mt_entry->fs_info;
buf->st_dev =
rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance );
4adb6: 246a 0034 moveal %a2@(52),%a2
switch ( the_jnode->type ) {
case IMFS_DEVICE:
io = &the_jnode->info.device;
buf->st_rdev = rtems_filesystem_make_dev_t( io->major, io->minor );
4adba: 2169 004c 0016 movel %a1@(76),%a0@(22)
* The device number of the IMFS is the major number and the minor is the
* instance.
*/
fs_info = loc->mt_entry->fs_info;
buf->st_dev =
rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance );
4adc0: 2212 movel %a2@,%d1
buf->st_mode = the_jnode->st_mode;
4adc2: 2169 002e 000c movel %a1@(46),%a0@(12)
buf->st_nlink = the_jnode->st_nlink;
4adc8: 3169 0032 0010 movew %a1@(50),%a0@(16)
buf->st_ino = the_jnode->st_ino;
4adce: 2169 0034 0008 movel %a1@(52),%a0@(8)
buf->st_uid = the_jnode->st_uid;
4add4: 3169 0038 0012 movew %a1@(56),%a0@(18)
buf->st_gid = the_jnode->st_gid;
4adda: 3169 003a 0014 movew %a1@(58),%a0@(20)
buf->st_atime = the_jnode->stat_atime;
4ade0: 2169 003c 0026 movel %a1@(60),%a0@(38)
buf->st_mtime = the_jnode->stat_mtime;
4ade6: 2169 0040 002e movel %a1@(64),%a0@(46)
buf->st_ctime = the_jnode->stat_ctime;
4adec: 2169 0044 0036 movel %a1@(68),%a0@(54)
switch ( the_jnode->type ) {
case IMFS_DEVICE:
io = &the_jnode->info.device;
buf->st_rdev = rtems_filesystem_make_dev_t( io->major, io->minor );
4adf2: 2140 001a movel %d0,%a0@(26)
buf->st_atime = the_jnode->stat_atime;
buf->st_mtime = the_jnode->stat_mtime;
buf->st_ctime = the_jnode->stat_ctime;
return 0;
4adf6: 4280 clrl %d0
/*
* The device number of the IMFS is the major number and the minor is the
* instance.
*/
fs_info = loc->mt_entry->fs_info;
buf->st_dev =
4adf8: 20bc 0000 fffe movel #65534,%a0@
4adfe: 2141 0004 movel %d1,%a0@(4)
4ae02: 6000 ff4a braw 4ad4e <IMFS_stat+0xa2>
...
00042548 <IMFS_symlink>:
int IMFS_symlink(
rtems_filesystem_location_info_t *parent_loc,
const char *link_name,
const char *node_name
)
{
42548: 4e56 ffc4 linkw %fp,#-60
4254c: 2f03 movel %d3,%sp@-
int i;
/*
* Remove any separators at the end of the string.
*/
IMFS_get_token( node_name, strlen( node_name ), new_name, &i );
4254e: 260e movel %fp,%d3
42550: 0683 ffff ffc7 addil #-57,%d3
int IMFS_symlink(
rtems_filesystem_location_info_t *parent_loc,
const char *link_name,
const char *node_name
)
{
42556: 2f02 movel %d2,%sp@-
42558: 242e 0010 movel %fp@(16),%d2
int i;
/*
* Remove any separators at the end of the string.
*/
IMFS_get_token( node_name, strlen( node_name ), new_name, &i );
4255c: 2f02 movel %d2,%sp@-
4255e: 4eb9 0004 eec4 jsr 4eec4 <strlen>
42564: 588f addql #4,%sp
42566: 486e fffc pea %fp@(-4)
4256a: 2f03 movel %d3,%sp@-
4256c: 2f00 movel %d0,%sp@-
4256e: 2f02 movel %d2,%sp@-
42570: 4eb9 0004 aac8 jsr 4aac8 <IMFS_get_token>
/*
* Duplicate link name
*/
info.sym_link.name = strdup(link_name);
42576: 2f2e 000c movel %fp@(12),%sp@-
4257a: 4eb9 0004 ea34 jsr 4ea34 <strdup>
if (info.sym_link.name == NULL) {
42580: 4fef 0014 lea %sp@(20),%sp
IMFS_get_token( node_name, strlen( node_name ), new_name, &i );
/*
* Duplicate link name
*/
info.sym_link.name = strdup(link_name);
42584: 2d40 ffe8 movel %d0,%fp@(-24)
if (info.sym_link.name == NULL) {
42588: 6730 beqs 425ba <IMFS_symlink+0x72> <== NEVER TAKEN
* was ONLY passed a NULL when we created the root node. We
* added a new IMFS_create_root_node() so this path no longer
* existed. The result was simpler code which should not have
* this path.
*/
new_node = IMFS_create_node(
4258a: 486e ffe8 pea %fp@(-24)
4258e: 2f3c 0000 a1ff movel #41471,%sp@-
42594: 2f03 movel %d3,%sp@-
42596: 4878 0004 pea 4 <CONTEXT_ARG>
4259a: 2f2e 0008 movel %fp@(8),%sp@-
4259e: 4eb9 0004 9fa4 jsr 49fa4 <IMFS_create_node>
new_name,
( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )),
&info
);
if (new_node == NULL) {
425a4: 4fef 0014 lea %sp@(20),%sp
425a8: 4a80 tstl %d0
425aa: 6728 beqs 425d4 <IMFS_symlink+0x8c> <== NEVER TAKEN
free(info.sym_link.name);
rtems_set_errno_and_return_minus_one(ENOMEM);
}
return 0;
}
425ac: 242e ffbc movel %fp@(-68),%d2
if (new_node == NULL) {
free(info.sym_link.name);
rtems_set_errno_and_return_minus_one(ENOMEM);
}
return 0;
425b0: 4280 clrl %d0
}
425b2: 262e ffc0 movel %fp@(-64),%d3
425b6: 4e5e unlk %fp
425b8: 4e75 rts
/*
* Duplicate link name
*/
info.sym_link.name = strdup(link_name);
if (info.sym_link.name == NULL) {
rtems_set_errno_and_return_minus_one(ENOMEM);
425ba: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
425c0: 740c moveq #12,%d2 <== NOT EXECUTED
425c2: 2040 moveal %d0,%a0 <== NOT EXECUTED
425c4: 70ff moveq #-1,%d0 <== NOT EXECUTED
425c6: 2082 movel %d2,%a0@ <== NOT EXECUTED
free(info.sym_link.name);
rtems_set_errno_and_return_minus_one(ENOMEM);
}
return 0;
}
425c8: 242e ffbc movel %fp@(-68),%d2 <== NOT EXECUTED
425cc: 262e ffc0 movel %fp@(-64),%d3 <== NOT EXECUTED
425d0: 4e5e unlk %fp <== NOT EXECUTED
425d2: 4e75 rts <== NOT EXECUTED
( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )),
&info
);
if (new_node == NULL) {
free(info.sym_link.name);
425d4: 2f2e ffe8 movel %fp@(-24),%sp@- <== NOT EXECUTED
425d8: 4eb9 0004 2db8 jsr 42db8 <free> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENOMEM);
425de: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
}
return 0;
}
425e4: 242e ffbc movel %fp@(-68),%d2 <== NOT EXECUTED
&info
);
if (new_node == NULL) {
free(info.sym_link.name);
rtems_set_errno_and_return_minus_one(ENOMEM);
425e8: 2040 moveal %d0,%a0 <== NOT EXECUTED
425ea: 720c moveq #12,%d1 <== NOT EXECUTED
425ec: 588f addql #4,%sp <== NOT EXECUTED
425ee: 70ff moveq #-1,%d0 <== NOT EXECUTED
}
return 0;
}
425f0: 262e ffc0 movel %fp@(-64),%d3 <== NOT EXECUTED
425f4: 4e5e unlk %fp <== NOT EXECUTED
&info
);
if (new_node == NULL) {
free(info.sym_link.name);
rtems_set_errno_and_return_minus_one(ENOMEM);
425f6: 2081 movel %d1,%a0@ <== NOT EXECUTED
}
return 0;
}
...
000425fc <IMFS_unlink>:
/*
* If this is the last last pointer to the node
* free the node.
*/
if ( node->type == IMFS_HARD_LINK ) {
425fc: 7003 moveq #3,%d0
int IMFS_unlink(
rtems_filesystem_location_info_t *parentloc, /* IN */
rtems_filesystem_location_info_t *loc /* IN */
)
{
425fe: 4e56 ffd0 linkw %fp,#-48
42602: 48d7 0c1c moveml %d2-%d4/%a2-%a3,%sp@
42606: 246e 000c moveal %fp@(12),%a2
4260a: 242e 0008 movel %fp@(8),%d2
IMFS_jnode_t *node;
rtems_filesystem_location_info_t the_link;
int result = 0;
node = loc->node_access;
4260e: 2652 moveal %a2@,%a3
/*
* If this is the last last pointer to the node
* free the node.
*/
if ( node->type == IMFS_HARD_LINK ) {
42610: b0ab 0048 cmpl %a3@(72),%d0
42614: 671a beqs 42630 <IMFS_unlink+0x34>
/*
* Now actually free the node we were asked to free.
*/
result = (*loc->handlers->rmnod_h)( parentloc, loc );
42616: 2f0a movel %a2,%sp@-
42618: 206a 0008 moveal %a2@(8),%a0
4261c: 2f02 movel %d2,%sp@-
4261e: 2068 0034 moveal %a0@(52),%a0
42622: 4e90 jsr %a0@
return result;
42624: 508f addql #8,%sp
}
42626: 4cee 0c1c ffd0 moveml %fp@(-48),%d2-%d4/%a2-%a3
4262c: 4e5e unlk %fp
4262e: 4e75 rts
* free the node.
*/
if ( node->type == IMFS_HARD_LINK ) {
if ( !node->info.hard_link.link_node )
42630: 202b 004c movel %a3@(76),%d0
42634: 6700 0090 beqw 426c6 <IMFS_unlink+0xca>
rtems_set_errno_and_return_minus_one( EINVAL );
the_link = *loc;
42638: 41ea 0004 lea %a2@(4),%a0
the_link.node_access = node->info.hard_link.link_node;
IMFS_Set_handlers( &the_link );
4263c: 260e movel %fp,%d3
4263e: 0683 ffff ffe4 addil #-28,%d3
/*
* If removing the last hard link to a node, then we need
* to remove the node that is a link and the node itself.
*/
if ( node->info.hard_link.link_node->st_nlink == 1)
42644: 7801 moveq #1,%d4
if ( node->type == IMFS_HARD_LINK ) {
if ( !node->info.hard_link.link_node )
rtems_set_errno_and_return_minus_one( EINVAL );
the_link = *loc;
42646: 2d58 ffe8 movel %a0@+,%fp@(-24)
4264a: 2d58 ffec movel %a0@+,%fp@(-20)
4264e: 2d58 fff0 movel %a0@+,%fp@(-16)
42652: 2d50 fff4 movel %a0@,%fp@(-12)
the_link.node_access = node->info.hard_link.link_node;
IMFS_Set_handlers( &the_link );
42656: 2f03 movel %d3,%sp@-
if ( !node->info.hard_link.link_node )
rtems_set_errno_and_return_minus_one( EINVAL );
the_link = *loc;
the_link.node_access = node->info.hard_link.link_node;
42658: 2d40 ffe4 movel %d0,%fp@(-28)
IMFS_Set_handlers( &the_link );
4265c: 4eb9 0004 a194 jsr 4a194 <IMFS_Set_handlers>
/*
* If removing the last hard link to a node, then we need
* to remove the node that is a link and the node itself.
*/
if ( node->info.hard_link.link_node->st_nlink == 1)
42662: 206b 004c moveal %a3@(76),%a0
42666: 4281 clrl %d1
42668: 588f addql #4,%sp
4266a: 3028 0032 movew %a0@(50),%d0
4266e: 3200 movew %d0,%d1
42670: b881 cmpl %d1,%d4
42672: 6730 beqs 426a4 <IMFS_unlink+0xa8>
if ( result != 0 )
return -1;
}
else
{
node->info.hard_link.link_node->st_nlink --;
42674: 5380 subql #1,%d0
42676: 3140 0032 movew %d0,%a0@(50)
IMFS_update_ctime( node->info.hard_link.link_node );
4267a: 42a7 clrl %sp@-
4267c: 486e fff8 pea %fp@(-8)
42680: 4eb9 0004 2e48 jsr 42e48 <gettimeofday>
42686: 206b 004c moveal %a3@(76),%a0
4268a: 508f addql #8,%sp
4268c: 216e fff8 0044 movel %fp@(-8),%a0@(68)
/*
* Now actually free the node we were asked to free.
*/
result = (*loc->handlers->rmnod_h)( parentloc, loc );
42692: 2f0a movel %a2,%sp@-
42694: 206a 0008 moveal %a2@(8),%a0
42698: 2f02 movel %d2,%sp@-
4269a: 2068 0034 moveal %a0@(52),%a0
4269e: 4e90 jsr %a0@
return result;
426a0: 508f addql #8,%sp
426a2: 6082 bras 42626 <IMFS_unlink+0x2a>
* to remove the node that is a link and the node itself.
*/
if ( node->info.hard_link.link_node->st_nlink == 1)
{
result = (*the_link.handlers->rmnod_h)( parentloc, &the_link );
426a4: 2f03 movel %d3,%sp@-
426a6: 206e ffec moveal %fp@(-20),%a0
426aa: 2f02 movel %d2,%sp@-
426ac: 2068 0034 moveal %a0@(52),%a0
426b0: 4e90 jsr %a0@
if ( result != 0 )
426b2: 508f addql #8,%sp
426b4: 4a80 tstl %d0
426b6: 6700 ff5e beqw 42616 <IMFS_unlink+0x1a>
return -1;
426ba: 70ff moveq #-1,%d0
*/
result = (*loc->handlers->rmnod_h)( parentloc, loc );
return result;
}
426bc: 4cee 0c1c ffd0 moveml %fp@(-48),%d2-%d4/%a2-%a3
426c2: 4e5e unlk %fp
426c4: 4e75 rts
*/
if ( node->type == IMFS_HARD_LINK ) {
if ( !node->info.hard_link.link_node )
rtems_set_errno_and_return_minus_one( EINVAL );
426c6: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
426cc: 7216 moveq #22,%d1 <== NOT EXECUTED
426ce: 2040 moveal %d0,%a0 <== NOT EXECUTED
426d0: 70ff moveq #-1,%d0 <== NOT EXECUTED
*/
result = (*loc->handlers->rmnod_h)( parentloc, loc );
return result;
}
426d2: 4cee 0c1c ffd0 moveml %fp@(-48),%d2-%d4/%a2-%a3 <== NOT EXECUTED
*/
if ( node->type == IMFS_HARD_LINK ) {
if ( !node->info.hard_link.link_node )
rtems_set_errno_and_return_minus_one( EINVAL );
426d8: 2081 movel %d1,%a0@ <== NOT EXECUTED
*/
result = (*loc->handlers->rmnod_h)( parentloc, loc );
return result;
}
426da: 4e5e unlk %fp <== NOT EXECUTED
...
000426e0 <IMFS_unmount>:
/*
* Is the node that we are mounting onto a directory node ?
*/
if ( node->type != IMFS_DIRECTORY )
426e0: 7001 moveq #1,%d0
#include <rtems/seterr.h>
int IMFS_unmount(
rtems_filesystem_mount_table_entry_t *mt_entry
)
{
426e2: 4e56 0000 linkw %fp,#0
426e6: 206e 0008 moveal %fp@(8),%a0
IMFS_jnode_t *node;
node = mt_entry->mt_point_node.node_access;
426ea: 2068 0008 moveal %a0@(8),%a0
/*
* Is the node that we are mounting onto a directory node ?
*/
if ( node->type != IMFS_DIRECTORY )
426ee: b0a8 0048 cmpl %a0@(72),%d0
426f2: 6610 bnes 42704 <IMFS_unmount+0x24> <== NEVER TAKEN
/*
* Did the node indicate that there was a directory mounted here?
*/
if ( node->info.directory.mt_fs == NULL )
426f4: 4aa8 0058 tstl %a0@(88)
426f8: 671c beqs 42716 <IMFS_unmount+0x36> <== NEVER TAKEN
/*
* Set the mt_fs pointer to indicate that there is no longer
* a file system mounted to this point.
*/
node->info.directory.mt_fs = NULL;
426fa: 42a8 0058 clrl %a0@(88)
return 0;
426fe: 4280 clrl %d0
}
42700: 4e5e unlk %fp
42702: 4e75 rts
/*
* Is the node that we are mounting onto a directory node ?
*/
if ( node->type != IMFS_DIRECTORY )
rtems_set_errno_and_return_minus_one( ENOTDIR );
42704: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
4270a: 7214 moveq #20,%d1 <== NOT EXECUTED
4270c: 2040 moveal %d0,%a0 <== NOT EXECUTED
4270e: 70ff moveq #-1,%d0 <== NOT EXECUTED
*/
node->info.directory.mt_fs = NULL;
return 0;
}
42710: 4e5e unlk %fp <== NOT EXECUTED
/*
* Is the node that we are mounting onto a directory node ?
*/
if ( node->type != IMFS_DIRECTORY )
rtems_set_errno_and_return_minus_one( ENOTDIR );
42712: 2081 movel %d1,%a0@ <== NOT EXECUTED
*/
node->info.directory.mt_fs = NULL;
return 0;
}
42714: 4e75 rts <== NOT EXECUTED
/*
* Did the node indicate that there was a directory mounted here?
*/
if ( node->info.directory.mt_fs == NULL )
rtems_set_errno_and_return_minus_one( EINVAL ); /* XXX */
42716: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
4271c: 7216 moveq #22,%d1 <== NOT EXECUTED
4271e: 2040 moveal %d0,%a0 <== NOT EXECUTED
42720: 70ff moveq #-1,%d0 <== NOT EXECUTED
*/
node->info.directory.mt_fs = NULL;
return 0;
}
42722: 4e5e unlk %fp <== NOT EXECUTED
/*
* Did the node indicate that there was a directory mounted here?
*/
if ( node->info.directory.mt_fs == NULL )
rtems_set_errno_and_return_minus_one( EINVAL ); /* XXX */
42724: 2081 movel %d1,%a0@ <== NOT EXECUTED
*/
node->info.directory.mt_fs = NULL;
return 0;
}
00043018 <RTEMS_Malloc_Initialize>:
void RTEMS_Malloc_Initialize(
void *heap_begin,
uintptr_t heap_size,
size_t sbrk_amount
)
{
43018: 4e56 fff4 linkw %fp,#-12
/*
* If configured, initialize the statistics support
*/
if ( rtems_malloc_statistics_helpers != NULL ) {
4301c: 2079 0005 d296 moveal 5d296 <rtems_malloc_statistics_helpers>,%a0
void RTEMS_Malloc_Initialize(
void *heap_begin,
uintptr_t heap_size,
size_t sbrk_amount
)
{
43022: 48d7 001c moveml %d2-%d4,%sp@
43026: 242e 0008 movel %fp@(8),%d2
4302a: 262e 000c movel %fp@(12),%d3
4302e: 282e 0010 movel %fp@(16),%d4
/*
* If configured, initialize the statistics support
*/
if ( rtems_malloc_statistics_helpers != NULL ) {
43032: 4a88 tstl %a0
43034: 6704 beqs 4303a <RTEMS_Malloc_Initialize+0x22>
(*rtems_malloc_statistics_helpers->initialize)();
43036: 2050 moveal %a0@,%a0
43038: 4e90 jsr %a0@
}
/*
* Initialize the garbage collection list to start with nothing on it.
*/
malloc_deferred_frees_initialize();
4303a: 4eb9 0004 2f9c jsr 42f9c <malloc_deferred_frees_initialize>
/*
* Initialize the optional sbrk support for extending the heap
*/
if ( rtems_malloc_sbrk_helpers != NULL ) {
43040: 2079 0005 d29a moveal 5d29a <rtems_malloc_sbrk_helpers>,%a0
43046: 4a88 tstl %a0
43048: 670e beqs 43058 <RTEMS_Malloc_Initialize+0x40>
heap_begin = (*rtems_malloc_sbrk_helpers->initialize)(
4304a: 2f04 movel %d4,%sp@-
heap_begin,
sbrk_amount
);
heap_size = (uintptr_t) sbrk_amount;
4304c: 2604 movel %d4,%d3
/*
* Initialize the optional sbrk support for extending the heap
*/
if ( rtems_malloc_sbrk_helpers != NULL ) {
heap_begin = (*rtems_malloc_sbrk_helpers->initialize)(
4304e: 2f02 movel %d2,%sp@-
43050: 2050 moveal %a0@,%a0
43052: 4e90 jsr %a0@
43054: 508f addql #8,%sp
43056: 2400 movel %d0,%d2
* of the time under UNIX because zero'ing memory when it is first
* given to a process eliminates the chance of a process seeing data
* left over from another process. This would be a security violation.
*/
if (
43058: 4a39 0005 d294 tstb 5d294 <rtems_unified_work_area>
4305e: 6624 bnes 43084 <RTEMS_Malloc_Initialize+0x6c>
!rtems_unified_work_area
&& rtems_configuration_get_do_zero_of_workspace()
43060: 4a39 0005 cd1c tstb 5cd1c <Configuration+0x28>
43066: 6642 bnes 430aa <RTEMS_Malloc_Initialize+0x92>
void *area_begin,
uintptr_t area_size,
uintptr_t page_size
)
{
return _Heap_Initialize( heap, area_begin, area_size, page_size );
43068: 4878 0004 pea 4 <CONTEXT_ARG>
4306c: 2f03 movel %d3,%sp@-
4306e: 2f02 movel %d2,%sp@-
43070: 2f39 0005 cc50 movel 5cc50 <RTEMS_Malloc_Heap>,%sp@-
43076: 4eb9 0004 765e jsr 4765e <_Heap_Initialize>
RTEMS_Malloc_Heap,
heap_begin,
heap_size,
CPU_HEAP_ALIGNMENT
);
if ( status == 0 ) {
4307c: 4fef 0010 lea %sp@(16),%sp
43080: 4a80 tstl %d0
43082: 675a beqs 430de <RTEMS_Malloc_Initialize+0xc6>
rtems_fatal_error_occurred( RTEMS_NO_MEMORY );
}
}
MSBUMP( space_available, _Protected_heap_Get_size(RTEMS_Malloc_Heap) );
43084: 2f39 0005 cc50 movel 5cc50 <RTEMS_Malloc_Heap>,%sp@-
4308a: 2439 0005 e2e0 movel 5e2e0 <rtems_malloc_statistics>,%d2
43090: 4eb9 0004 8284 jsr 48284 <_Protected_heap_Get_size>
43096: 588f addql #4,%sp
43098: d082 addl %d2,%d0
printk( "\n" );
rtems_print_buffer( (heap_begin + heap_size) - 48, 48 );
rtems_fatal_error_occurred( RTEMS_NO_MEMORY );
}
#endif
}
4309a: 4cee 001c fff4 moveml %fp@(-12),%d2-%d4
if ( status == 0 ) {
rtems_fatal_error_occurred( RTEMS_NO_MEMORY );
}
}
MSBUMP( space_available, _Protected_heap_Get_size(RTEMS_Malloc_Heap) );
430a0: 23c0 0005 e2e0 movel %d0,5e2e0 <rtems_malloc_statistics>
printk( "\n" );
rtems_print_buffer( (heap_begin + heap_size) - 48, 48 );
rtems_fatal_error_occurred( RTEMS_NO_MEMORY );
}
#endif
}
430a6: 4e5e unlk %fp
430a8: 4e75 rts
if (
!rtems_unified_work_area
&& rtems_configuration_get_do_zero_of_workspace()
) {
memset( heap_begin, 0, heap_size );
430aa: 2f03 movel %d3,%sp@-
430ac: 42a7 clrl %sp@-
430ae: 2f02 movel %d2,%sp@-
430b0: 4eb9 0004 e388 jsr 4e388 <memset>
* Unfortunately we cannot use assert if this fails because if this
* has failed we do not have a heap and if we do not have a heap
* STDIO cannot work because there will be no buffers.
*/
if ( !rtems_unified_work_area ) {
430b6: 4fef 000c lea %sp@(12),%sp
430ba: 4a39 0005 d294 tstb 5d294 <rtems_unified_work_area>
430c0: 66c2 bnes 43084 <RTEMS_Malloc_Initialize+0x6c> <== NEVER TAKEN
430c2: 4878 0004 pea 4 <CONTEXT_ARG>
430c6: 2f03 movel %d3,%sp@-
430c8: 2f02 movel %d2,%sp@-
430ca: 2f39 0005 cc50 movel 5cc50 <RTEMS_Malloc_Heap>,%sp@-
430d0: 4eb9 0004 765e jsr 4765e <_Heap_Initialize>
RTEMS_Malloc_Heap,
heap_begin,
heap_size,
CPU_HEAP_ALIGNMENT
);
if ( status == 0 ) {
430d6: 4fef 0010 lea %sp@(16),%sp
430da: 4a80 tstl %d0
430dc: 66a6 bnes 43084 <RTEMS_Malloc_Initialize+0x6c> <== ALWAYS TAKEN
rtems_fatal_error_occurred( RTEMS_NO_MEMORY );
430de: 4878 001a pea 1a <OPER2+0x6>
430e2: 4eb9 0004 6d6c jsr 46d6c <rtems_fatal_error_occurred>
000420e8 <Stack_check_Dump_threads_usage>:
/*
* Obtain interrupt stack information
*/
#if (CPU_ALLOCATE_INTERRUPT_STACK == TRUE)
if (the_thread == (Thread_Control *) -1) {
420e8: 70ff moveq #-1,%d0 <== NOT EXECUTED
static rtems_printk_plugin_t print_handler;
void Stack_check_Dump_threads_usage(
Thread_Control *the_thread
)
{
420ea: 4e56 ffec linkw %fp,#-20 <== NOT EXECUTED
420ee: 48d7 0c04 moveml %d2/%a2-%a3,%sp@ <== NOT EXECUTED
420f2: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
/*
* Obtain interrupt stack information
*/
#if (CPU_ALLOCATE_INTERRUPT_STACK == TRUE)
if (the_thread == (Thread_Control *) -1) {
420f6: b08a cmpl %a2,%d0 <== NOT EXECUTED
420f8: 6700 0092 beqw 4218c <Stack_check_Dump_threads_usage+0xa4><== NOT EXECUTED
current = (void *)_CPU_Context_Get_SP( &the_thread->Registers );
}
#endif
low = Stack_check_usable_stack_start(stack);
size = Stack_check_usable_stack_size(stack);
420fc: 2439 0005 e80c movel 5e80c <Stack_check_Interrupt_stack>,%d2<== NOT EXECUTED
42102: 0682 ffff fff0 addil #-16,%d2 <== NOT EXECUTED
if ( high_water_mark )
used = Stack_check_Calculate_used( low, size, high_water_mark );
else
used = 0;
if ( the_thread ) {
42108: 4a8a tstl %a2 <== NOT EXECUTED
4210a: 6700 0094 beqw 421a0 <Stack_check_Dump_threads_usage+0xb8><== NOT EXECUTED
(*print_handler)(
4210e: 486e fffb pea %fp@(-5) <== NOT EXECUTED
42112: 4878 0005 pea 5 <COMPARE> <== NOT EXECUTED
42116: 2f2a 0008 movel %a2@(8),%sp@- <== NOT EXECUTED
4211a: 2679 0005 dffc moveal 5dffc <print_handler>,%a3 <== NOT EXECUTED
42120: 4eb9 0004 6708 jsr 46708 <rtems_object_get_name> <== NOT EXECUTED
42126: 2f00 movel %d0,%sp@- <== NOT EXECUTED
42128: 2f2a 0008 movel %a2@(8),%sp@- <== NOT EXECUTED
4212c: 4879 0005 bd9c pea 5bd9c <IntUartPollCallbacks.6194+0x20> <== NOT EXECUTED
42132: 2f39 0005 dff8 movel 5dff8 <print_context>,%sp@- <== NOT EXECUTED
42138: 4e93 jsr %a3@ <== NOT EXECUTED
4213a: 4fef 001c lea %sp@(28),%sp <== NOT EXECUTED
);
} else {
(*print_handler)( print_context, "0x%08" PRIx32 " INTR", ~0 );
}
(*print_handler)(
4213e: 2f02 movel %d2,%sp@- <== NOT EXECUTED
print_context,
" %010p - %010p %010p %8" PRId32 " ",
stack->area,
stack->area + stack->size - 1,
42140: 2039 0005 e80c movel 5e80c <Stack_check_Interrupt_stack>,%d0<== NOT EXECUTED
42146: 5380 subql #1,%d0 <== NOT EXECUTED
42148: 2079 0005 e810 moveal 5e810 <Stack_check_Interrupt_stack+0x4>,%a0<== NOT EXECUTED
);
} else {
(*print_handler)( print_context, "0x%08" PRIx32 " INTR", ~0 );
}
(*print_handler)(
4214e: 42a7 clrl %sp@- <== NOT EXECUTED
42150: 4870 0800 pea %a0@(00000000,%d0:l) <== NOT EXECUTED
42154: 2f08 movel %a0,%sp@- <== NOT EXECUTED
42156: 4879 0005 bdb7 pea 5bdb7 <IntUartPollCallbacks.6194+0x3b> <== NOT EXECUTED
4215c: 2f39 0005 dff8 movel 5dff8 <print_context>,%sp@- <== NOT EXECUTED
42162: 2079 0005 dffc moveal 5dffc <print_handler>,%a0 <== NOT EXECUTED
42168: 4e90 jsr %a0@ <== NOT EXECUTED
current,
size
);
if (Stack_check_Initialized == 0) {
(*print_handler)( print_context, "Unavailable\n" );
4216a: 4879 0005 bdd5 pea 5bdd5 <IntUartPollCallbacks.6194+0x59> <== NOT EXECUTED
42170: 2f39 0005 dff8 movel 5dff8 <print_context>,%sp@- <== NOT EXECUTED
42176: 2079 0005 dffc moveal 5dffc <print_handler>,%a0 <== NOT EXECUTED
4217c: 4e90 jsr %a0@ <== NOT EXECUTED
4217e: 4fef 0020 lea %sp@(32),%sp <== NOT EXECUTED
} else {
(*print_handler)( print_context, "%8" PRId32 "\n", used );
}
}
42182: 4cee 0c04 ffec moveml %fp@(-20),%d2/%a2-%a3 <== NOT EXECUTED
42188: 4e5e unlk %fp <== NOT EXECUTED
4218a: 4e75 rts <== NOT EXECUTED
/*
* Obtain interrupt stack information
*/
#if (CPU_ALLOCATE_INTERRUPT_STACK == TRUE)
if (the_thread == (Thread_Control *) -1) {
if (!Stack_check_Interrupt_stack.area)
4218c: 4ab9 0005 e810 tstl 5e810 <Stack_check_Interrupt_stack+0x4><== NOT EXECUTED
42192: 67ee beqs 42182 <Stack_check_Dump_threads_usage+0x9a><== NOT EXECUTED
current = (void *)_CPU_Context_Get_SP( &the_thread->Registers );
}
#endif
low = Stack_check_usable_stack_start(stack);
size = Stack_check_usable_stack_size(stack);
42194: 2439 0005 e80c movel 5e80c <Stack_check_Interrupt_stack>,%d2<== NOT EXECUTED
4219a: 0682 ffff fff0 addil #-16,%d2 <== NOT EXECUTED
"0x%08" PRIx32 " %4s",
the_thread->Object.id,
rtems_object_get_name( the_thread->Object.id, sizeof(name), name )
);
} else {
(*print_handler)( print_context, "0x%08" PRIx32 " INTR", ~0 );
421a0: 4878 ffff pea ffffffff <LESS> <== NOT EXECUTED
421a4: 4879 0005 bda9 pea 5bda9 <IntUartPollCallbacks.6194+0x2d> <== NOT EXECUTED
421aa: 2f39 0005 dff8 movel 5dff8 <print_context>,%sp@- <== NOT EXECUTED
421b0: 2079 0005 dffc moveal 5dffc <print_handler>,%a0 <== NOT EXECUTED
421b6: 4e90 jsr %a0@ <== NOT EXECUTED
421b8: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
}
(*print_handler)(
421bc: 2f02 movel %d2,%sp@- <== NOT EXECUTED
print_context,
" %010p - %010p %010p %8" PRId32 " ",
stack->area,
stack->area + stack->size - 1,
421be: 2039 0005 e80c movel 5e80c <Stack_check_Interrupt_stack>,%d0<== NOT EXECUTED
421c4: 5380 subql #1,%d0 <== NOT EXECUTED
421c6: 2079 0005 e810 moveal 5e810 <Stack_check_Interrupt_stack+0x4>,%a0<== NOT EXECUTED
);
} else {
(*print_handler)( print_context, "0x%08" PRIx32 " INTR", ~0 );
}
(*print_handler)(
421cc: 42a7 clrl %sp@- <== NOT EXECUTED
421ce: 4870 0800 pea %a0@(00000000,%d0:l) <== NOT EXECUTED
421d2: 2f08 movel %a0,%sp@- <== NOT EXECUTED
421d4: 4879 0005 bdb7 pea 5bdb7 <IntUartPollCallbacks.6194+0x3b> <== NOT EXECUTED
421da: 2f39 0005 dff8 movel 5dff8 <print_context>,%sp@- <== NOT EXECUTED
421e0: 2079 0005 dffc moveal 5dffc <print_handler>,%a0 <== NOT EXECUTED
421e6: 4e90 jsr %a0@ <== NOT EXECUTED
current,
size
);
if (Stack_check_Initialized == 0) {
(*print_handler)( print_context, "Unavailable\n" );
421e8: 4879 0005 bdd5 pea 5bdd5 <IntUartPollCallbacks.6194+0x59> <== NOT EXECUTED
421ee: 2f39 0005 dff8 movel 5dff8 <print_context>,%sp@- <== NOT EXECUTED
421f4: 2079 0005 dffc moveal 5dffc <print_handler>,%a0 <== NOT EXECUTED
421fa: 4e90 jsr %a0@ <== NOT EXECUTED
421fc: 4fef 0020 lea %sp@(32),%sp <== NOT EXECUTED
42200: 6080 bras 42182 <Stack_check_Dump_threads_usage+0x9a><== NOT EXECUTED
00042202 <Stack_check_Initialize>:
/*
* Stack_check_Initialize
*/
void Stack_check_Initialize( void )
{
42202: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
Stack_check_Dope_stack(&Stack_check_Interrupt_stack);
}
#endif
Stack_check_Initialized = 1;
}
42206: 4e5e unlk %fp <== NOT EXECUTED
00042270 <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)
{
42270: 4e56 ffd0 linkw %fp,#-48 <== NOT EXECUTED
42274: 48d7 1c04 moveml %d2/%a2-%a4,%sp@ <== NOT EXECUTED
Stack_Control *stack = &running->Start.Initial_stack;
void *pattern_area = Stack_check_Get_pattern_area(stack);
char name [32];
printk("BLOWN STACK!!!\n");
42278: 4879 0005 bde2 pea 5bde2 <IntUartPollCallbacks.6194+0x66> <== NOT EXECUTED
4227e: 47f9 0004 3f94 lea 43f94 <printk>,%a3 <== NOT EXECUTED
Thread_Control *running,
bool pattern_ok
) RTEMS_COMPILER_NO_RETURN_ATTRIBUTE;
void Stack_check_report_blown_task(Thread_Control *running, bool pattern_ok)
{
42284: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
Stack_Control *stack = &running->Start.Initial_stack;
void *pattern_area = Stack_check_Get_pattern_area(stack);
42288: 286a 00c0 moveal %a2@(192),%a4 <== NOT EXECUTED
Thread_Control *running,
bool pattern_ok
) RTEMS_COMPILER_NO_RETURN_ATTRIBUTE;
void Stack_check_report_blown_task(Thread_Control *running, bool pattern_ok)
{
4228c: 142e 000f moveb %fp@(15),%d2 <== NOT EXECUTED
Stack_Control *stack = &running->Start.Initial_stack;
void *pattern_area = Stack_check_Get_pattern_area(stack);
char name [32];
printk("BLOWN STACK!!!\n");
42290: 4e93 jsr %a3@ <== NOT EXECUTED
printk("task control block: 0x%08" PRIxPTR "\n", running);
42292: 2f0a movel %a2,%sp@- <== NOT EXECUTED
42294: 4879 0005 bdf2 pea 5bdf2 <IntUartPollCallbacks.6194+0x76> <== NOT EXECUTED
4229a: 4e93 jsr %a3@ <== NOT EXECUTED
printk("task ID: 0x%08lx\n", (unsigned long) running->Object.id);
4229c: 2f2a 0008 movel %a2@(8),%sp@- <== NOT EXECUTED
422a0: 4879 0005 be0f pea 5be0f <IntUartPollCallbacks.6194+0x93> <== NOT EXECUTED
422a6: 4e93 jsr %a3@ <== NOT EXECUTED
printk(
422a8: 2f2a 000c movel %a2@(12),%sp@- <== NOT EXECUTED
422ac: 4879 0005 be21 pea 5be21 <IntUartPollCallbacks.6194+0xa5> <== NOT EXECUTED
422b2: 4e93 jsr %a3@ <== NOT EXECUTED
"task name: 0x%08" PRIx32 "\n",
running->Object.name.name_u32
);
printk(
422b4: 486e ffe0 pea %fp@(-32) <== NOT EXECUTED
422b8: 4878 0020 pea 20 <OPER2+0xc> <== NOT EXECUTED
422bc: 2f2a 0008 movel %a2@(8),%sp@- <== NOT EXECUTED
422c0: 4eb9 0004 6708 jsr 46708 <rtems_object_get_name> <== NOT EXECUTED
422c6: 4fef 0024 lea %sp@(36),%sp <== NOT EXECUTED
422ca: 2e80 movel %d0,%sp@ <== NOT EXECUTED
422cc: 4879 0005 be35 pea 5be35 <IntUartPollCallbacks.6194+0xb9> <== NOT EXECUTED
422d2: 4e93 jsr %a3@ <== 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)
422d4: 206a 00c0 moveal %a2@(192),%a0 <== NOT EXECUTED
422d8: 202a 00bc movel %a2@(188),%d0 <== NOT EXECUTED
);
printk(
"task name string: %s\n",
rtems_object_get_name(running->Object.id, sizeof(name), name)
);
printk(
422dc: 4870 0800 pea %a0@(00000000,%d0:l) <== NOT EXECUTED
422e0: 2f08 movel %a0,%sp@- <== NOT EXECUTED
422e2: 2f00 movel %d0,%sp@- <== NOT EXECUTED
422e4: 4879 0005 be4b pea 5be4b <IntUartPollCallbacks.6194+0xcf> <== NOT EXECUTED
422ea: 4e93 jsr %a3@ <== 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) {
422ec: 4fef 0018 lea %sp@(24),%sp <== NOT EXECUTED
422f0: 4a02 tstb %d2 <== NOT EXECUTED
422f2: 670a beqs 422fe <Stack_check_report_blown_task+0x8e><== NOT EXECUTED
rtems_configuration_get_user_multiprocessing_table()->node
);
}
#endif
rtems_fatal_error_occurred(0x81);
422f4: 4878 0081 pea 81 <DBL_MANT_DIG+0x4c> <== NOT EXECUTED
422f8: 4eb9 0004 7084 jsr 47084 <rtems_fatal_error_occurred> <== NOT EXECUTED
(unsigned long) stack->size,
stack->area,
((char *) stack->area + stack->size)
);
if (!pattern_ok) {
printk(
422fe: 486c 0018 pea %a4@(24) <== NOT EXECUTED
42302: 486c 0008 pea %a4@(8) <== NOT EXECUTED
42306: 4878 0010 pea 10 <INVALID_OPERATION> <== NOT EXECUTED
4230a: 4879 0005 be7c pea 5be7c <IntUartPollCallbacks.6194+0x100> <== NOT EXECUTED
42310: 4e93 jsr %a3@ <== NOT EXECUTED
42312: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
rtems_configuration_get_user_multiprocessing_table()->node
);
}
#endif
rtems_fatal_error_occurred(0x81);
42316: 4878 0081 pea 81 <DBL_MANT_DIG+0x4c> <== NOT EXECUTED
4231a: 4eb9 0004 7084 jsr 47084 <rtems_fatal_error_occurred> <== NOT EXECUTED
00047008 <_API_Mutex_Unlock>:
#include <rtems/score/apimutex.h>
void _API_Mutex_Unlock(
API_Mutex_Control *the_mutex
)
{
47008: 4e56 0000 linkw %fp,#0
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
4700c: 2039 0005 e41c movel 5e41c <_Thread_Dispatch_disable_level>,%d0
47012: 5280 addql #1,%d0
47014: 206e 0008 moveal %fp@(8),%a0
47018: 23c0 0005 e41c movel %d0,5e41c <_Thread_Dispatch_disable_level>
_Thread_Disable_dispatch();
_CORE_mutex_Surrender(
4701e: 42a7 clrl %sp@-
47020: 2f28 0008 movel %a0@(8),%sp@-
47024: 4868 0010 pea %a0@(16)
47028: 4eb9 0004 7310 jsr 47310 <_CORE_mutex_Surrender>
&the_mutex->Mutex,
the_mutex->Object.id,
NULL
);
_Thread_Enable_dispatch();
4702e: 4fef 000c lea %sp@(12),%sp
}
47032: 4e5e unlk %fp
_CORE_mutex_Surrender(
&the_mutex->Mutex,
the_mutex->Object.id,
NULL
);
_Thread_Enable_dispatch();
47034: 4ef9 0004 882e jmp 4882e <_Thread_Enable_dispatch>
...
00046ee2 <_API_extensions_Run_postdriver>:
*
* _API_extensions_Run_postdriver
*/
void _API_extensions_Run_postdriver( void )
{
46ee2: 4e56 0000 linkw %fp,#0
46ee6: 2f0a movel %a2,%sp@-
Chain_Node *the_node;
API_extensions_Control *the_extension;
for ( the_node = _API_extensions_List.first ;
46ee8: 2479 0005 e59c moveal 5e59c <_API_extensions_List>,%a2
46eee: b5fc 0005 e5a0 cmpal #386464,%a2
46ef4: 6710 beqs 46f06 <_API_extensions_Run_postdriver+0x24><== NEVER TAKEN
* Currently all APIs configure this hook so it is always non-NULL.
*/
#if defined(FUNCTIONALITY_NOT_CURRENTLY_USED_BY_ANY_API)
if ( the_extension->postdriver_hook )
#endif
(*the_extension->postdriver_hook)();
46ef6: 206a 0008 moveal %a2@(8),%a0
46efa: 4e90 jsr %a0@
Chain_Node *the_node;
API_extensions_Control *the_extension;
for ( the_node = _API_extensions_List.first ;
!_Chain_Is_tail( &_API_extensions_List, the_node ) ;
the_node = the_node->next ) {
46efc: 2452 moveal %a2@,%a2
void _API_extensions_Run_postdriver( void )
{
Chain_Node *the_node;
API_extensions_Control *the_extension;
for ( the_node = _API_extensions_List.first ;
46efe: b5fc 0005 e5a0 cmpal #386464,%a2
46f04: 66f0 bnes 46ef6 <_API_extensions_Run_postdriver+0x14><== NEVER TAKEN
#if defined(FUNCTIONALITY_NOT_CURRENTLY_USED_BY_ANY_API)
if ( the_extension->postdriver_hook )
#endif
(*the_extension->postdriver_hook)();
}
}
46f06: 246e fffc moveal %fp@(-4),%a2
46f0a: 4e5e unlk %fp <== NOT EXECUTED
00046f0e <_API_extensions_Run_postswitch>:
*
* _API_extensions_Run_postswitch
*/
void _API_extensions_Run_postswitch( void )
{
46f0e: 4e56 0000 linkw %fp,#0
46f12: 2f0a movel %a2,%sp@-
Chain_Node *the_node;
API_extensions_Control *the_extension;
for ( the_node = _API_extensions_List.first ;
46f14: 2479 0005 e59c moveal 5e59c <_API_extensions_List>,%a2
46f1a: b5fc 0005 e5a0 cmpal #386464,%a2
46f20: 6718 beqs 46f3a <_API_extensions_Run_postswitch+0x2c><== NEVER TAKEN
!_Chain_Is_tail( &_API_extensions_List, the_node ) ;
the_node = the_node->next ) {
the_extension = (API_extensions_Control *) the_node;
(*the_extension->postswitch_hook)( _Thread_Executing );
46f22: 2f39 0005 e5e0 movel 5e5e0 <_Per_CPU_Information+0xc>,%sp@-
46f28: 206a 000c moveal %a2@(12),%a0
46f2c: 4e90 jsr %a0@
Chain_Node *the_node;
API_extensions_Control *the_extension;
for ( the_node = _API_extensions_List.first ;
!_Chain_Is_tail( &_API_extensions_List, the_node ) ;
the_node = the_node->next ) {
46f2e: 2452 moveal %a2@,%a2
void _API_extensions_Run_postswitch( void )
{
Chain_Node *the_node;
API_extensions_Control *the_extension;
for ( the_node = _API_extensions_List.first ;
46f30: 588f addql #4,%sp
46f32: b5fc 0005 e5a0 cmpal #386464,%a2
46f38: 66e8 bnes 46f22 <_API_extensions_Run_postswitch+0x14><== NEVER TAKEN
the_extension = (API_extensions_Control *) the_node;
(*the_extension->postswitch_hook)( _Thread_Executing );
}
}
46f3a: 246e fffc moveal %fp@(-4),%a2
46f3e: 4e5e unlk %fp
...
0004e664 <_CORE_barrier_Release>:
#else
Objects_Id id __attribute__((unused)),
CORE_barrier_API_mp_support_callout api_barrier_mp_support __attribute__((unused))
#endif
)
{
4e664: 4e56 fff4 linkw %fp,#-12
4e668: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
4e66c: 246e 0008 moveal %fp@(8),%a2
4e670: 47f9 0004 a400 lea 4a400 <_Thread_queue_Dequeue>,%a3
Thread_Control *the_thread;
uint32_t count;
count = 0;
4e676: 4282 clrl %d2
while ( (the_thread = _Thread_queue_Dequeue(&the_barrier->Wait_queue)) ) {
4e678: 2f0a movel %a2,%sp@-
4e67a: 4e93 jsr %a3@
4e67c: 588f addql #4,%sp
4e67e: 4a80 tstl %d0
4e680: 670c beqs 4e68e <_CORE_barrier_Release+0x2a>
4e682: 2f0a movel %a2,%sp@-
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
(*api_barrier_mp_support) ( the_thread, id );
#endif
count++;
4e684: 5282 addql #1,%d2
{
Thread_Control *the_thread;
uint32_t count;
count = 0;
while ( (the_thread = _Thread_queue_Dequeue(&the_barrier->Wait_queue)) ) {
4e686: 4e93 jsr %a3@
4e688: 588f addql #4,%sp
4e68a: 4a80 tstl %d0
4e68c: 66f4 bnes 4e682 <_CORE_barrier_Release+0x1e> <== NEVER TAKEN
#endif
count++;
}
the_barrier->number_of_waiting_threads = 0;
return count;
}
4e68e: 2002 movel %d2,%d0
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
(*api_barrier_mp_support) ( the_thread, id );
#endif
count++;
}
the_barrier->number_of_waiting_threads = 0;
4e690: 42aa 0048 clrl %a2@(72)
return count;
}
4e694: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3
4e69a: 4e5e unlk %fp
...
0004e6a0 <_CORE_barrier_Wait>:
Thread_Control *executing;
ISR_Level level;
executing = _Thread_Executing;
executing->Wait.return_code = CORE_BARRIER_STATUS_SUCCESSFUL;
_ISR_Disable( level );
4e6a0: 203c 0000 0700 movel #1792,%d0
Objects_Id id,
bool wait,
Watchdog_Interval timeout,
CORE_barrier_API_mp_support_callout api_barrier_mp_support
)
{
4e6a6: 4e56 fff4 linkw %fp,#-12
Thread_Control *executing;
ISR_Level level;
executing = _Thread_Executing;
4e6aa: 2279 0006 0078 moveal 60078 <_Per_CPU_Information+0xc>,%a1
Objects_Id id,
bool wait,
Watchdog_Interval timeout,
CORE_barrier_API_mp_support_callout api_barrier_mp_support
)
{
4e6b0: 48d7 001c moveml %d2-%d4,%sp@
4e6b4: 206e 0008 moveal %fp@(8),%a0
Thread_Control *executing;
ISR_Level level;
executing = _Thread_Executing;
executing->Wait.return_code = CORE_BARRIER_STATUS_SUCCESSFUL;
4e6b8: 42a9 0034 clrl %a1@(52)
Objects_Id id,
bool wait,
Watchdog_Interval timeout,
CORE_barrier_API_mp_support_callout api_barrier_mp_support
)
{
4e6bc: 242e 000c movel %fp@(12),%d2
4e6c0: 262e 0014 movel %fp@(20),%d3
4e6c4: 282e 0018 movel %fp@(24),%d4
Thread_Control *executing;
ISR_Level level;
executing = _Thread_Executing;
executing->Wait.return_code = CORE_BARRIER_STATUS_SUCCESSFUL;
_ISR_Disable( level );
4e6c8: 40c1 movew %sr,%d1
4e6ca: 8081 orl %d1,%d0
4e6cc: 46c0 movew %d0,%sr
the_barrier->number_of_waiting_threads++;
4e6ce: 2028 0048 movel %a0@(72),%d0
4e6d2: 5280 addql #1,%d0
4e6d4: 2140 0048 movel %d0,%a0@(72)
if ( _CORE_barrier_Is_automatic( &the_barrier->Attributes ) ) {
4e6d8: 4aa8 0040 tstl %a0@(64)
4e6dc: 6606 bnes 4e6e4 <_CORE_barrier_Wait+0x44>
if ( the_barrier->number_of_waiting_threads ==
4e6de: b0a8 0044 cmpl %a0@(68),%d0
4e6e2: 672e beqs 4e712 <_CORE_barrier_Wait+0x72>
4e6e4: 7001 moveq #1,%d0
4e6e6: 2140 0030 movel %d0,%a0@(48)
return;
}
}
_Thread_queue_Enter_critical_section( &the_barrier->Wait_queue );
executing->Wait.queue = &the_barrier->Wait_queue;
4e6ea: 2348 0044 movel %a0,%a1@(68)
executing->Wait.id = id;
4e6ee: 2342 0020 movel %d2,%a1@(32)
_ISR_Enable( level );
4e6f2: 46c1 movew %d1,%sr
_Thread_queue_Enqueue( &the_barrier->Wait_queue, timeout );
4e6f4: 2d43 000c movel %d3,%fp@(12)
4e6f8: 203c 0004 a938 movel #305464,%d0
4e6fe: 2d48 0008 movel %a0,%fp@(8)
}
4e702: 4cd7 001c moveml %sp@,%d2-%d4
_Thread_queue_Enter_critical_section( &the_barrier->Wait_queue );
executing->Wait.queue = &the_barrier->Wait_queue;
executing->Wait.id = id;
_ISR_Enable( level );
_Thread_queue_Enqueue( &the_barrier->Wait_queue, timeout );
4e706: 2d40 0010 movel %d0,%fp@(16)
}
4e70a: 4e5e unlk %fp
_Thread_queue_Enter_critical_section( &the_barrier->Wait_queue );
executing->Wait.queue = &the_barrier->Wait_queue;
executing->Wait.id = id;
_ISR_Enable( level );
_Thread_queue_Enqueue( &the_barrier->Wait_queue, timeout );
4e70c: 4ef9 0004 a570 jmp 4a570 <_Thread_queue_Enqueue_with_handler>
_ISR_Disable( level );
the_barrier->number_of_waiting_threads++;
if ( _CORE_barrier_Is_automatic( &the_barrier->Attributes ) ) {
if ( the_barrier->number_of_waiting_threads ==
the_barrier->Attributes.maximum_count) {
executing->Wait.return_code = CORE_BARRIER_STATUS_AUTOMATICALLY_RELEASED;
4e712: 7001 moveq #1,%d0
4e714: 2340 0034 movel %d0,%a1@(52)
_ISR_Enable( level );
4e718: 46c1 movew %d1,%sr
_CORE_barrier_Release( the_barrier, id, api_barrier_mp_support );
4e71a: 2d44 0010 movel %d4,%fp@(16)
4e71e: 2d42 000c movel %d2,%fp@(12)
executing->Wait.queue = &the_barrier->Wait_queue;
executing->Wait.id = id;
_ISR_Enable( level );
_Thread_queue_Enqueue( &the_barrier->Wait_queue, timeout );
}
4e722: 4cd7 001c moveml %sp@,%d2-%d4
if ( _CORE_barrier_Is_automatic( &the_barrier->Attributes ) ) {
if ( the_barrier->number_of_waiting_threads ==
the_barrier->Attributes.maximum_count) {
executing->Wait.return_code = CORE_BARRIER_STATUS_AUTOMATICALLY_RELEASED;
_ISR_Enable( level );
_CORE_barrier_Release( the_barrier, id, api_barrier_mp_support );
4e726: 2d48 0008 movel %a0,%fp@(8)
executing->Wait.queue = &the_barrier->Wait_queue;
executing->Wait.id = id;
_ISR_Enable( level );
_Thread_queue_Enqueue( &the_barrier->Wait_queue, timeout );
}
4e72a: 4e5e unlk %fp
if ( _CORE_barrier_Is_automatic( &the_barrier->Attributes ) ) {
if ( the_barrier->number_of_waiting_threads ==
the_barrier->Attributes.maximum_count) {
executing->Wait.return_code = CORE_BARRIER_STATUS_AUTOMATICALLY_RELEASED;
_ISR_Enable( level );
_CORE_barrier_Release( the_barrier, id, api_barrier_mp_support );
4e72c: 4ef9 0004 e664 jmp 4e664 <_CORE_barrier_Release>
...
00059fb8 <_CORE_message_queue_Broadcast>:
Objects_Id id __attribute__((unused)),
CORE_message_queue_API_mp_support_callout api_message_queue_mp_support __attribute__((unused)),
#endif
uint32_t *count
)
{
59fb8: 4e56 ffe0 linkw %fp,#-32
59fbc: 48d7 3c3c moveml %d2-%d5/%a2-%a5,%sp@
59fc0: 266e 0008 moveal %fp@(8),%a3
59fc4: 282e 000c movel %fp@(12),%d4
59fc8: 242e 0010 movel %fp@(16),%d2
59fcc: 2a2e 001c movel %fp@(28),%d5
Thread_Control *the_thread;
uint32_t number_broadcasted;
Thread_Wait_information *waitp;
if ( size > the_message_queue->maximum_message_size ) {
59fd0: b4ab 004c cmpl %a3@(76),%d2
59fd4: 6262 bhis 5a038 <_CORE_message_queue_Broadcast+0x80><== NEVER TAKEN
* NOTE: This check is critical because threads can block on
* send and receive and this ensures that we are broadcasting
* the message to threads waiting to receive -- not to send.
*/
if ( the_message_queue->number_of_pending_messages != 0 ) {
59fd6: 4aab 0048 tstl %a3@(72)
59fda: 664c bnes 5a028 <_CORE_message_queue_Broadcast+0x70>
/*
* There must be no pending messages if there is a thread waiting to
* receive a message.
*/
number_broadcasted = 0;
while ((the_thread =
59fdc: 2f0b movel %a3,%sp@-
59fde: 49f9 0005 c750 lea 5c750 <_Thread_queue_Dequeue>,%a4
* NOTE: This check is critical because threads can block on
* send and receive and this ensures that we are broadcasting
* the message to threads waiting to receive -- not to send.
*/
if ( the_message_queue->number_of_pending_messages != 0 ) {
59fe4: 4283 clrl %d3
const void *source,
void *destination,
size_t size
)
{
memcpy(destination, source, size);
59fe6: 4bf9 0006 1cd8 lea 61cd8 <memcpy>,%a5
/*
* There must be no pending messages if there is a thread waiting to
* receive a message.
*/
number_broadcasted = 0;
while ((the_thread =
59fec: 4e94 jsr %a4@
59fee: 588f addql #4,%sp
59ff0: 2440 moveal %d0,%a2
59ff2: 4a80 tstl %d0
59ff4: 6722 beqs 5a018 <_CORE_message_queue_Broadcast+0x60>
59ff6: 2f02 movel %d2,%sp@-
_Thread_queue_Dequeue(&the_message_queue->Wait_queue))) {
waitp = &the_thread->Wait;
number_broadcasted += 1;
59ff8: 5283 addql #1,%d3
59ffa: 2f04 movel %d4,%sp@-
59ffc: 2f2a 002c movel %a2@(44),%sp@-
5a000: 4e95 jsr %a5@
buffer,
waitp->return_argument_second.mutable_object,
size
);
*(size_t *) the_thread->Wait.return_argument = size;
5a002: 206a 0028 moveal %a2@(40),%a0
5a006: 4fef 000c lea %sp@(12),%sp
5a00a: 2082 movel %d2,%a0@
/*
* There must be no pending messages if there is a thread waiting to
* receive a message.
*/
number_broadcasted = 0;
while ((the_thread =
5a00c: 2f0b movel %a3,%sp@-
5a00e: 4e94 jsr %a4@
5a010: 588f addql #4,%sp
5a012: 2440 moveal %d0,%a2
5a014: 4a80 tstl %d0
5a016: 66de bnes 59ff6 <_CORE_message_queue_Broadcast+0x3e>
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
(*api_message_queue_mp_support) ( the_thread, id );
#endif
}
*count = number_broadcasted;
5a018: 2045 moveal %d5,%a0
return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;
5a01a: 4280 clrl %d0
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
(*api_message_queue_mp_support) ( the_thread, id );
#endif
}
*count = number_broadcasted;
5a01c: 2083 movel %d3,%a0@
return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;
}
5a01e: 4cee 3c3c ffe0 moveml %fp@(-32),%d2-%d5/%a2-%a5
5a024: 4e5e unlk %fp
5a026: 4e75 rts
* send and receive and this ensures that we are broadcasting
* the message to threads waiting to receive -- not to send.
*/
if ( the_message_queue->number_of_pending_messages != 0 ) {
*count = 0;
5a028: 2045 moveal %d5,%a0
return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;
5a02a: 4280 clrl %d0
#endif
}
*count = number_broadcasted;
return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;
}
5a02c: 4cee 3c3c ffe0 moveml %fp@(-32),%d2-%d5/%a2-%a5
* send and receive and this ensures that we are broadcasting
* the message to threads waiting to receive -- not to send.
*/
if ( the_message_queue->number_of_pending_messages != 0 ) {
*count = 0;
5a032: 4290 clrl %a0@
#endif
}
*count = number_broadcasted;
return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;
}
5a034: 4e5e unlk %fp
5a036: 4e75 rts
Thread_Control *the_thread;
uint32_t number_broadcasted;
Thread_Wait_information *waitp;
if ( size > the_message_queue->maximum_message_size ) {
return CORE_MESSAGE_QUEUE_STATUS_INVALID_SIZE;
5a038: 7001 moveq #1,%d0 <== NOT EXECUTED
#endif
}
*count = number_broadcasted;
return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;
}
5a03a: 4cee 3c3c ffe0 moveml %fp@(-32),%d2-%d5/%a2-%a5 <== NOT EXECUTED
5a040: 4e5e unlk %fp <== NOT EXECUTED
0005a044 <_CORE_message_queue_Close>:
void _CORE_message_queue_Close(
CORE_message_queue_Control *the_message_queue,
Thread_queue_Flush_callout remote_extract_callout,
uint32_t status
)
{
5a044: 4e56 0000 linkw %fp,#0
5a048: 2f0a movel %a2,%sp@-
/*
* This will flush blocked threads whether they were blocked on
* a send or receive.
*/
_Thread_queue_Flush(
5a04a: 2f2e 0010 movel %fp@(16),%sp@-
5a04e: 2f2e 000c movel %fp@(12),%sp@-
void _CORE_message_queue_Close(
CORE_message_queue_Control *the_message_queue,
Thread_queue_Flush_callout remote_extract_callout,
uint32_t status
)
{
5a052: 246e 0008 moveal %fp@(8),%a2
/*
* This will flush blocked threads whether they were blocked on
* a send or receive.
*/
_Thread_queue_Flush(
5a056: 2f0a movel %a2,%sp@-
5a058: 4eb9 0005 cb40 jsr 5cb40 <_Thread_queue_Flush>
* This removes all messages from the pending message queue. Since
* we just flushed all waiting threads, we don't have to worry about
* the flush satisfying any blocked senders as a side-effect.
*/
if ( the_message_queue->number_of_pending_messages != 0 )
5a05e: 4fef 000c lea %sp@(12),%sp
5a062: 4aaa 0048 tstl %a2@(72)
5a066: 6612 bnes 5a07a <_CORE_message_queue_Close+0x36>
(void) _CORE_message_queue_Flush_support( the_message_queue );
(void) _Workspace_Free( the_message_queue->message_buffers );
5a068: 2d6a 005c 0008 movel %a2@(92),%fp@(8)
}
5a06e: 246e fffc moveal %fp@(-4),%a2
5a072: 4e5e unlk %fp
*/
if ( the_message_queue->number_of_pending_messages != 0 )
(void) _CORE_message_queue_Flush_support( the_message_queue );
(void) _Workspace_Free( the_message_queue->message_buffers );
5a074: 4ef9 0005 db2a jmp 5db2a <_Workspace_Free>
* we just flushed all waiting threads, we don't have to worry about
* the flush satisfying any blocked senders as a side-effect.
*/
if ( the_message_queue->number_of_pending_messages != 0 )
(void) _CORE_message_queue_Flush_support( the_message_queue );
5a07a: 2f0a movel %a2,%sp@-
5a07c: 4eb9 0005 a0b4 jsr 5a0b4 <_CORE_message_queue_Flush_support>
(void) _Workspace_Free( the_message_queue->message_buffers );
5a082: 2d6a 005c 0008 movel %a2@(92),%fp@(8)
* we just flushed all waiting threads, we don't have to worry about
* the flush satisfying any blocked senders as a side-effect.
*/
if ( the_message_queue->number_of_pending_messages != 0 )
(void) _CORE_message_queue_Flush_support( the_message_queue );
5a088: 588f addql #4,%sp
(void) _Workspace_Free( the_message_queue->message_buffers );
}
5a08a: 246e fffc moveal %fp@(-4),%a2
5a08e: 4e5e unlk %fp
*/
if ( the_message_queue->number_of_pending_messages != 0 )
(void) _CORE_message_queue_Flush_support( the_message_queue );
(void) _Workspace_Free( the_message_queue->message_buffers );
5a090: 4ef9 0005 db2a jmp 5db2a <_Workspace_Free>
...
000502dc <_CORE_message_queue_Initialize>:
/*
* Round size up to multiple of a pointer for chain init and
* check for overflow on adding overhead to each message.
*/
allocated_message_size = maximum_message_size;
if (allocated_message_size & (sizeof(uint32_t) - 1)) {
502dc: 7203 moveq #3,%d1
CORE_message_queue_Control *the_message_queue,
CORE_message_queue_Attributes *the_message_queue_attributes,
uint32_t maximum_pending_messages,
size_t maximum_message_size
)
{
502de: 4e56 fff4 linkw %fp,#-12
502e2: 202e 0014 movel %fp@(20),%d0
502e6: 48d7 040c moveml %d2-%d3/%a2,%sp@
502ea: 246e 0008 moveal %fp@(8),%a2
502ee: 242e 0010 movel %fp@(16),%d2
/*
* Round size up to multiple of a pointer for chain init and
* check for overflow on adding overhead to each message.
*/
allocated_message_size = maximum_message_size;
if (allocated_message_size & (sizeof(uint32_t) - 1)) {
502f2: c280 andl %d0,%d1
)
{
size_t message_buffering_required;
size_t allocated_message_size;
the_message_queue->maximum_pending_messages = maximum_pending_messages;
502f4: 2542 0044 movel %d2,%a2@(68)
the_message_queue->number_of_pending_messages = 0;
502f8: 42aa 0048 clrl %a2@(72)
the_message_queue->maximum_message_size = maximum_message_size;
502fc: 2540 004c movel %d0,%a2@(76)
/*
* Round size up to multiple of a pointer for chain init and
* check for overflow on adding overhead to each message.
*/
allocated_message_size = maximum_message_size;
if (allocated_message_size & (sizeof(uint32_t) - 1)) {
50300: 4a81 tstl %d1
50302: 6718 beqs 5031c <_CORE_message_queue_Initialize+0x40>
allocated_message_size += sizeof(uint32_t);
50304: 2200 movel %d0,%d1
50306: 5881 addql #4,%d1
allocated_message_size &= ~(sizeof(uint32_t) - 1);
50308: 76fc moveq #-4,%d3
5030a: c283 andl %d3,%d1
}
if (allocated_message_size < maximum_message_size)
5030c: b280 cmpl %d0,%d1
5030e: 640e bccs 5031e <_CORE_message_queue_Initialize+0x42><== ALWAYS TAKEN
STATES_WAITING_FOR_MESSAGE,
CORE_MESSAGE_QUEUE_STATUS_TIMEOUT
);
return true;
}
50310: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
*/
the_message_queue->message_buffers = (CORE_message_queue_Buffer *)
_Workspace_Allocate( message_buffering_required );
if (the_message_queue->message_buffers == 0)
return false;
50316: 4200 clrb %d0
STATES_WAITING_FOR_MESSAGE,
CORE_MESSAGE_QUEUE_STATUS_TIMEOUT
);
return true;
}
50318: 4e5e unlk %fp
5031a: 4e75 rts
/*
* Round size up to multiple of a pointer for chain init and
* check for overflow on adding overhead to each message.
*/
allocated_message_size = maximum_message_size;
if (allocated_message_size & (sizeof(uint32_t) - 1)) {
5031c: 2200 movel %d0,%d1
/*
* Calculate how much total memory is required for message buffering and
* check for overflow on the multiplication.
*/
message_buffering_required = (size_t) maximum_pending_messages *
(allocated_message_size + sizeof(CORE_message_queue_Buffer_control));
5031e: 2601 movel %d1,%d3
50320: 0683 0000 0010 addil #16,%d3
/*
* Calculate how much total memory is required for message buffering and
* check for overflow on the multiplication.
*/
message_buffering_required = (size_t) maximum_pending_messages *
50326: 2003 movel %d3,%d0
50328: 4c02 0800 mulsl %d2,%d0
(allocated_message_size + sizeof(CORE_message_queue_Buffer_control));
if (message_buffering_required < allocated_message_size)
5032c: b280 cmpl %d0,%d1
5032e: 62e0 bhis 50310 <_CORE_message_queue_Initialize+0x34><== NEVER TAKEN
/*
* Attempt to allocate the message memory
*/
the_message_queue->message_buffers = (CORE_message_queue_Buffer *)
_Workspace_Allocate( message_buffering_required );
50330: 2f00 movel %d0,%sp@-
50332: 4eb9 0005 3132 jsr 53132 <_Workspace_Allocate>
if (the_message_queue->message_buffers == 0)
50338: 588f addql #4,%sp
return false;
/*
* Attempt to allocate the message memory
*/
the_message_queue->message_buffers = (CORE_message_queue_Buffer *)
5033a: 2540 005c movel %d0,%a2@(92)
_Workspace_Allocate( message_buffering_required );
if (the_message_queue->message_buffers == 0)
5033e: 67d0 beqs 50310 <_CORE_message_queue_Initialize+0x34>
/*
* Initialize the pool of inactive messages, pending messages,
* and set of waiting threads.
*/
_Chain_Initialize (
50340: 2f03 movel %d3,%sp@-
50342: 2f02 movel %d2,%sp@-
50344: 2f00 movel %d0,%sp@-
50346: 486a 0060 pea %a2@(96)
5034a: 4eb9 0005 4f68 jsr 54f68 <_Chain_Initialize>
allocated_message_size + sizeof( CORE_message_queue_Buffer_control )
);
_Chain_Initialize_empty( &the_message_queue->Pending_messages );
_Thread_queue_Initialize(
50350: 4878 0006 pea 6 <EXTENDSFDF>
50354: 7001 moveq #1,%d0
50356: 206e 000c moveal %fp@(12),%a0
5035a: b090 cmpl %a0@,%d0
5035c: 57c0 seq %d0
5035e: 4878 0080 pea 80 <DBL_MANT_DIG+0x4b>
50362: 49c0 extbl %d0
50364: 4480 negl %d0
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
50366: 41ea 0054 lea %a2@(84),%a0
5036a: 2f00 movel %d0,%sp@-
5036c: 2548 0050 movel %a0,%a2@(80)
the_message_queue->message_buffers,
(size_t) maximum_pending_messages,
allocated_message_size + sizeof( CORE_message_queue_Buffer_control )
);
_Chain_Initialize_empty( &the_message_queue->Pending_messages );
50370: 41ea 0050 lea %a2@(80),%a0
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
50374: 42aa 0054 clrl %a2@(84)
50378: 2548 0058 movel %a0,%a2@(88)
_Thread_queue_Initialize(
5037c: 2f0a movel %a2,%sp@-
5037e: 4eb9 0005 24a8 jsr 524a8 <_Thread_queue_Initialize>
THREAD_QUEUE_DISCIPLINE_PRIORITY : THREAD_QUEUE_DISCIPLINE_FIFO,
STATES_WAITING_FOR_MESSAGE,
CORE_MESSAGE_QUEUE_STATUS_TIMEOUT
);
return true;
50384: 4fef 0020 lea %sp@(32),%sp
}
50388: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
THREAD_QUEUE_DISCIPLINE_PRIORITY : THREAD_QUEUE_DISCIPLINE_FIFO,
STATES_WAITING_FOR_MESSAGE,
CORE_MESSAGE_QUEUE_STATUS_TIMEOUT
);
return true;
5038e: 7001 moveq #1,%d0
}
50390: 4e5e unlk %fp <== NOT EXECUTED
00050394 <_CORE_message_queue_Seize>:
CORE_message_queue_Buffer_control *the_message;
Thread_Control *executing;
executing = _Thread_Executing;
executing->Wait.return_code = CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;
_ISR_Disable( level );
50394: 203c 0000 0700 movel #1792,%d0
void *buffer,
size_t *size_p,
bool wait,
Watchdog_Interval timeout
)
{
5039a: 4e56 ffe4 linkw %fp,#-28
ISR_Level level;
CORE_message_queue_Buffer_control *the_message;
Thread_Control *executing;
executing = _Thread_Executing;
5039e: 2079 0006 8488 moveal 68488 <_Per_CPU_Information+0xc>,%a0
void *buffer,
size_t *size_p,
bool wait,
Watchdog_Interval timeout
)
{
503a4: 48d7 1c3c moveml %d2-%d5/%a2-%a4,%sp@
503a8: 246e 0008 moveal %fp@(8),%a2
503ac: 2a2e 000c movel %fp@(12),%d5
503b0: 242e 0010 movel %fp@(16),%d2
503b4: 226e 0014 moveal %fp@(20),%a1
503b8: 282e 001c movel %fp@(28),%d4
503bc: 162e 001b moveb %fp@(27),%d3
ISR_Level level;
CORE_message_queue_Buffer_control *the_message;
Thread_Control *executing;
executing = _Thread_Executing;
executing->Wait.return_code = CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;
503c0: 42a8 0034 clrl %a0@(52)
_ISR_Disable( level );
503c4: 40c1 movew %sr,%d1
503c6: 8081 orl %d1,%d0
503c8: 46c0 movew %d0,%sr
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
503ca: 200a movel %a2,%d0
503cc: 0680 0000 0054 addil #84,%d0
*/
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
Chain_Control *the_chain
)
{
return (the_chain->first == _Chain_Tail(the_chain));
503d2: 266a 0050 moveal %a2@(80),%a3
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Get_unprotected(
Chain_Control *the_chain
)
{
if ( !_Chain_Is_empty(the_chain))
503d6: b08b cmpl %a3,%d0
503d8: 674e beqs 50428 <_CORE_message_queue_Seize+0x94>
{
Chain_Node *return_node;
Chain_Node *new_first;
return_node = the_chain->first;
new_first = return_node->next;
503da: 2053 moveal %a3@,%a0
CORE_message_queue_Buffer_control *_CORE_message_queue_Get_pending_message (
CORE_message_queue_Control *the_message_queue
)
{
return (CORE_message_queue_Buffer_control *)
_Chain_Get_unprotected( &the_message_queue->Pending_messages );
503dc: 49ea 0050 lea %a2@(80),%a4
the_chain->first = new_first;
503e0: 2548 0050 movel %a0,%a2@(80)
503e4: 214c 0004 movel %a4,%a0@(4)
the_message = _CORE_message_queue_Get_pending_message( the_message_queue );
if ( the_message != NULL ) {
the_message_queue->number_of_pending_messages -= 1;
503e8: 53aa 0048 subql #1,%a2@(72)
_ISR_Enable( level );
503ec: 46c1 movew %d1,%sr
*size_p = the_message->Contents.size;
503ee: 22ab 0008 movel %a3@(8),%a1@
_Thread_Executing->Wait.count =
503f2: 2079 0006 8488 moveal 68488 <_Per_CPU_Information+0xc>,%a0
503f8: 42a8 0024 clrl %a0@(36)
const void *source,
void *destination,
size_t size
)
{
memcpy(destination, source, size);
503fc: 2f11 movel %a1@,%sp@-
503fe: 486b 000c pea %a3@(12)
RTEMS_INLINE_ROUTINE void _CORE_message_queue_Free_message_buffer (
CORE_message_queue_Control *the_message_queue,
CORE_message_queue_Buffer_control *the_message
)
{
_Chain_Append( &the_message_queue->Inactive_messages, &the_message->Node );
50402: 45ea 0060 lea %a2@(96),%a2
const void *source,
void *destination,
size_t size
)
{
memcpy(destination, source, size);
50406: 2f02 movel %d2,%sp@-
50408: 4eb9 0005 7804 jsr 57804 <memcpy>
RTEMS_INLINE_ROUTINE void _CORE_message_queue_Free_message_buffer (
CORE_message_queue_Control *the_message_queue,
CORE_message_queue_Buffer_control *the_message
)
{
_Chain_Append( &the_message_queue->Inactive_messages, &the_message->Node );
5040e: 4fef 000c lea %sp@(12),%sp
50412: 2d4a 0008 movel %a2,%fp@(8)
50416: 2d4b 000c movel %a3,%fp@(12)
executing->Wait.return_argument = size_p;
/* Wait.count will be filled in with the message priority */
_ISR_Enable( level );
_Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout );
}
5041a: 4cee 1c3c ffe4 moveml %fp@(-28),%d2-%d5/%a2-%a4
50420: 4e5e unlk %fp
50422: 4ef9 0005 0210 jmp 50210 <_Chain_Append>
return;
}
#endif
}
if ( !wait ) {
50428: 4a03 tstb %d3
5042a: 6612 bnes 5043e <_CORE_message_queue_Seize+0xaa>
_ISR_Enable( level );
5042c: 46c1 movew %d1,%sr
executing->Wait.return_code = CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_NOWAIT;
5042e: 7004 moveq #4,%d0
executing->Wait.return_argument = size_p;
/* Wait.count will be filled in with the message priority */
_ISR_Enable( level );
_Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout );
}
50430: 4cee 1c3c ffe4 moveml %fp@(-28),%d2-%d5/%a2-%a4
#endif
}
if ( !wait ) {
_ISR_Enable( level );
executing->Wait.return_code = CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_NOWAIT;
50436: 2140 0034 movel %d0,%a0@(52)
executing->Wait.return_argument = size_p;
/* Wait.count will be filled in with the message priority */
_ISR_Enable( level );
_Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout );
}
5043a: 4e5e unlk %fp
5043c: 4e75 rts
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;
5043e: 7001 moveq #1,%d0
50440: 2540 0030 movel %d0,%a2@(48)
}
_Thread_queue_Enter_critical_section( &the_message_queue->Wait_queue );
executing->Wait.queue = &the_message_queue->Wait_queue;
executing->Wait.id = id;
executing->Wait.return_argument_second.mutable_object = buffer;
50444: 2142 002c movel %d2,%a0@(44)
executing->Wait.return_code = CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_NOWAIT;
return;
}
_Thread_queue_Enter_critical_section( &the_message_queue->Wait_queue );
executing->Wait.queue = &the_message_queue->Wait_queue;
50448: 214a 0044 movel %a2,%a0@(68)
executing->Wait.id = id;
5044c: 2145 0020 movel %d5,%a0@(32)
executing->Wait.return_argument_second.mutable_object = buffer;
executing->Wait.return_argument = size_p;
50450: 2149 0028 movel %a1,%a0@(40)
/* Wait.count will be filled in with the message priority */
_ISR_Enable( level );
50454: 46c1 movew %d1,%sr
_Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout );
50456: 49f9 0005 25b4 lea 525b4 <_Thread_queue_Timeout>,%a4
5045c: 2d44 000c movel %d4,%fp@(12)
50460: 2d4c 0010 movel %a4,%fp@(16)
50464: 2d4a 0008 movel %a2,%fp@(8)
}
50468: 4cee 1c3c ffe4 moveml %fp@(-28),%d2-%d5/%a2-%a4
5046e: 4e5e unlk %fp
executing->Wait.return_argument_second.mutable_object = buffer;
executing->Wait.return_argument = size_p;
/* Wait.count will be filled in with the message priority */
_ISR_Enable( level );
_Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout );
50470: 4ef9 0005 21ec jmp 521ec <_Thread_queue_Enqueue_with_handler>
...
00050478 <_CORE_message_queue_Submit>:
#endif
CORE_message_queue_Submit_types submit_type,
bool wait,
Watchdog_Interval timeout
)
{
50478: 4e56 fff4 linkw %fp,#-12
5047c: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
50480: 246e 0008 moveal %fp@(8),%a2
50484: 242e 0010 movel %fp@(16),%d2
CORE_message_queue_Buffer_control *the_message;
Thread_Control *the_thread;
if ( size > the_message_queue->maximum_message_size ) {
50488: b4aa 004c cmpl %a2@(76),%d2
5048c: 6256 bhis 504e4 <_CORE_message_queue_Submit+0x6c>
}
/*
* Is there a thread currently waiting on this message queue?
*/
if ( the_message_queue->number_of_pending_messages == 0 ) {
5048e: 202a 0048 movel %a2@(72),%d0
50492: 675c beqs 504f0 <_CORE_message_queue_Submit+0x78>
/*
* No one waiting on the message queue at this time, so attempt to
* queue the message up for a future receive.
*/
if ( the_message_queue->number_of_pending_messages <
50494: b0aa 0044 cmpl %a2@(68),%d0
50498: 650c bcss 504a6 <_CORE_message_queue_Submit+0x2e>
);
return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;
}
#if !defined(RTEMS_SCORE_COREMSG_ENABLE_BLOCKING_SEND)
return CORE_MESSAGE_QUEUE_STATUS_TOO_MANY;
5049a: 7002 moveq #2,%d0
_Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout );
}
return CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_WAIT;
#endif
}
5049c: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3
504a2: 4e5e unlk %fp
504a4: 4e75 rts
_CORE_message_queue_Allocate_message_buffer (
CORE_message_queue_Control *the_message_queue
)
{
return (CORE_message_queue_Buffer_control *)
_Chain_Get( &the_message_queue->Inactive_messages );
504a6: 486a 0060 pea %a2@(96)
504aa: 4eb9 0005 0270 jsr 50270 <_Chain_Get>
504b0: 2640 moveal %d0,%a3
const void *source,
void *destination,
size_t size
)
{
memcpy(destination, source, size);
504b2: 2f02 movel %d2,%sp@-
504b4: 2f2e 000c movel %fp@(12),%sp@-
504b8: 486b 000c pea %a3@(12)
504bc: 4eb9 0005 7804 jsr 57804 <memcpy>
_CORE_message_queue_Copy_buffer(
buffer,
the_message->Contents.buffer,
size
);
the_message->Contents.size = size;
504c2: 2742 0008 movel %d2,%a3@(8)
_CORE_message_queue_Set_message_priority( the_message, submit_type );
_CORE_message_queue_Insert_message(
504c6: 2f2e 001c movel %fp@(28),%sp@-
504ca: 2f0b movel %a3,%sp@-
504cc: 2f0a movel %a2,%sp@-
504ce: 4eb9 0005 4fd0 jsr 54fd0 <_CORE_message_queue_Insert_message>
the_message_queue,
the_message,
submit_type
);
return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;
504d4: 4fef 001c lea %sp@(28),%sp
504d8: 4280 clrl %d0
_Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout );
}
return CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_WAIT;
#endif
}
504da: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3
504e0: 4e5e unlk %fp
504e2: 4e75 rts
{
CORE_message_queue_Buffer_control *the_message;
Thread_Control *the_thread;
if ( size > the_message_queue->maximum_message_size ) {
return CORE_MESSAGE_QUEUE_STATUS_INVALID_SIZE;
504e4: 7001 moveq #1,%d0
_Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout );
}
return CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_WAIT;
#endif
}
504e6: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3
504ec: 4e5e unlk %fp
504ee: 4e75 rts
/*
* Is there a thread currently waiting on this message queue?
*/
if ( the_message_queue->number_of_pending_messages == 0 ) {
the_thread = _Thread_queue_Dequeue( &the_message_queue->Wait_queue );
504f0: 2f0a movel %a2,%sp@-
504f2: 4eb9 0005 207c jsr 5207c <_Thread_queue_Dequeue>
if ( the_thread ) {
504f8: 588f addql #4,%sp
/*
* Is there a thread currently waiting on this message queue?
*/
if ( the_message_queue->number_of_pending_messages == 0 ) {
the_thread = _Thread_queue_Dequeue( &the_message_queue->Wait_queue );
504fa: 2640 moveal %d0,%a3
if ( the_thread ) {
504fc: 4a80 tstl %d0
504fe: 672e beqs 5052e <_CORE_message_queue_Submit+0xb6>
50500: 2f02 movel %d2,%sp@-
50502: 2f2e 000c movel %fp@(12),%sp@-
50506: 2f2b 002c movel %a3@(44),%sp@-
5050a: 4eb9 0005 7804 jsr 57804 <memcpy>
_CORE_message_queue_Copy_buffer(
buffer,
the_thread->Wait.return_argument_second.mutable_object,
size
);
*(size_t *) the_thread->Wait.return_argument = size;
50510: 206b 0028 moveal %a3@(40),%a0
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
(*api_message_queue_mp_support) ( the_thread, id );
#endif
return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;
50514: 4fef 000c lea %sp@(12),%sp
50518: 4280 clrl %d0
_CORE_message_queue_Copy_buffer(
buffer,
the_thread->Wait.return_argument_second.mutable_object,
size
);
*(size_t *) the_thread->Wait.return_argument = size;
5051a: 2082 movel %d2,%a0@
the_thread->Wait.count = (uint32_t) submit_type;
5051c: 222e 001c movel %fp@(28),%d1
50520: 2741 0024 movel %d1,%a3@(36)
_Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout );
}
return CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_WAIT;
#endif
}
50524: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3
5052a: 4e5e unlk %fp
5052c: 4e75 rts
/*
* Is there a thread currently waiting on this message queue?
*/
if ( the_message_queue->number_of_pending_messages == 0 ) {
the_thread = _Thread_queue_Dequeue( &the_message_queue->Wait_queue );
if ( the_thread ) {
5052e: 202a 0048 movel %a2@(72),%d0
/*
* No one waiting on the message queue at this time, so attempt to
* queue the message up for a future receive.
*/
if ( the_message_queue->number_of_pending_messages <
50532: b0aa 0044 cmpl %a2@(68),%d0
50536: 6400 ff62 bccw 5049a <_CORE_message_queue_Submit+0x22>
5053a: 6000 ff6a braw 504a6 <_CORE_message_queue_Submit+0x2e>
...
000470e4 <_CORE_mutex_Initialize>:
CORE_mutex_Status _CORE_mutex_Initialize(
CORE_mutex_Control *the_mutex,
CORE_mutex_Attributes *the_mutex_attributes,
uint32_t initial_lock
)
{
470e4: 4e56 0000 linkw %fp,#0
470e8: 206e 0008 moveal %fp@(8),%a0
470ec: 2f0a movel %a2,%sp@-
470ee: 246e 000c moveal %fp@(12),%a2
/* Add this to the RTEMS environment later ?????????
rtems_assert( initial_lock == CORE_MUTEX_LOCKED ||
initial_lock == CORE_MUTEX_UNLOCKED );
*/
the_mutex->Attributes = *the_mutex_attributes;
470f2: 224a moveal %a2,%a1
470f4: 2159 0040 movel %a1@+,%a0@(64)
470f8: 2159 0044 movel %a1@+,%a0@(68)
470fc: 2159 0048 movel %a1@+,%a0@(72)
CORE_mutex_Status _CORE_mutex_Initialize(
CORE_mutex_Control *the_mutex,
CORE_mutex_Attributes *the_mutex_attributes,
uint32_t initial_lock
)
{
47100: 202e 0010 movel %fp@(16),%d0
/* Add this to the RTEMS environment later ?????????
rtems_assert( initial_lock == CORE_MUTEX_LOCKED ||
initial_lock == CORE_MUTEX_UNLOCKED );
*/
the_mutex->Attributes = *the_mutex_attributes;
47104: 3151 004c movew %a1@,%a0@(76)
the_mutex->lock = initial_lock;
47108: 2140 004e movel %d0,%a0@(78)
the_mutex->blocked_count = 0;
4710c: 42a8 0056 clrl %a0@(86)
if ( initial_lock == CORE_MUTEX_LOCKED ) {
47110: 4a80 tstl %d0
47112: 6654 bnes 47168 <_CORE_mutex_Initialize+0x84>
the_mutex->nest_count = 1;
the_mutex->holder = _Thread_Executing;
47114: 2279 0005 e5e0 moveal 5e5e0 <_Per_CPU_Information+0xc>,%a1
the_mutex->Attributes = *the_mutex_attributes;
the_mutex->lock = initial_lock;
the_mutex->blocked_count = 0;
if ( initial_lock == CORE_MUTEX_LOCKED ) {
the_mutex->nest_count = 1;
4711a: 7201 moveq #1,%d1
the_mutex->holder = _Thread_Executing;
the_mutex->holder_id = _Thread_Executing->Object.id;
4711c: 2169 0008 005e movel %a1@(8),%a0@(94)
STATES_WAITING_FOR_MUTEX,
CORE_MUTEX_TIMEOUT
);
return CORE_MUTEX_STATUS_SUCCESSFUL;
}
47122: 2028 0046 movel %a0@(70),%d0
the_mutex->Attributes = *the_mutex_attributes;
the_mutex->lock = initial_lock;
the_mutex->blocked_count = 0;
if ( initial_lock == CORE_MUTEX_LOCKED ) {
the_mutex->nest_count = 1;
47126: 2141 0052 movel %d1,%a0@(82)
the_mutex->holder = _Thread_Executing;
the_mutex->holder_id = _Thread_Executing->Object.id;
if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ||
4712a: 123c 0002 moveb #2,%d1
the_mutex->lock = initial_lock;
the_mutex->blocked_count = 0;
if ( initial_lock == CORE_MUTEX_LOCKED ) {
the_mutex->nest_count = 1;
the_mutex->holder = _Thread_Executing;
4712e: 2149 005a movel %a1,%a0@(90)
the_mutex->holder_id = _Thread_Executing->Object.id;
if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ||
47132: b280 cmpl %d0,%d1
47134: 6762 beqs 47198 <_CORE_mutex_Initialize+0xb4>
47136: 123c 0003 moveb #3,%d1
4713a: b280 cmpl %d0,%d1
4713c: 675a beqs 47198 <_CORE_mutex_Initialize+0xb4>
the_mutex->nest_count = 0;
the_mutex->holder = NULL;
the_mutex->holder_id = 0;
}
_Thread_queue_Initialize(
4713e: 4aaa 0006 tstl %a2@(6)
47142: 56c0 sne %d0
47144: 4878 0005 pea 5 <COMPARE>
47148: 49c0 extbl %d0
4714a: 4878 0400 pea 400 <D_BIAS+0x2>
4714e: 4480 negl %d0
47150: 2f00 movel %d0,%sp@-
47152: 2f08 movel %a0,%sp@-
47154: 4eb9 0004 8fb8 jsr 48fb8 <_Thread_queue_Initialize>
THREAD_QUEUE_DISCIPLINE_FIFO : THREAD_QUEUE_DISCIPLINE_PRIORITY,
STATES_WAITING_FOR_MUTEX,
CORE_MUTEX_TIMEOUT
);
return CORE_MUTEX_STATUS_SUCCESSFUL;
4715a: 4fef 0010 lea %sp@(16),%sp
4715e: 4280 clrl %d0
}
47160: 246e fffc moveal %fp@(-4),%a2
47164: 4e5e unlk %fp
47166: 4e75 rts
the_mutex->nest_count = 0;
the_mutex->holder = NULL;
the_mutex->holder_id = 0;
}
_Thread_queue_Initialize(
47168: 4aaa 0006 tstl %a2@(6)
4716c: 56c0 sne %d0
#endif
_Thread_Executing->resource_count++;
}
} else {
the_mutex->nest_count = 0;
4716e: 42a8 0052 clrl %a0@(82)
the_mutex->holder = NULL;
the_mutex->holder_id = 0;
}
_Thread_queue_Initialize(
47172: 49c0 extbl %d0
47174: 4480 negl %d0
_Thread_Executing->resource_count++;
}
} else {
the_mutex->nest_count = 0;
the_mutex->holder = NULL;
47176: 42a8 005a clrl %a0@(90)
the_mutex->holder_id = 0;
4717a: 42a8 005e clrl %a0@(94)
}
_Thread_queue_Initialize(
4717e: 4878 0005 pea 5 <COMPARE>
47182: 4878 0400 pea 400 <D_BIAS+0x2>
47186: 2f00 movel %d0,%sp@-
47188: 2f08 movel %a0,%sp@-
4718a: 4eb9 0004 8fb8 jsr 48fb8 <_Thread_queue_Initialize>
THREAD_QUEUE_DISCIPLINE_FIFO : THREAD_QUEUE_DISCIPLINE_PRIORITY,
STATES_WAITING_FOR_MUTEX,
CORE_MUTEX_TIMEOUT
);
return CORE_MUTEX_STATUS_SUCCESSFUL;
47190: 4fef 0010 lea %sp@(16),%sp
47194: 4280 clrl %d0
47196: 60c8 bras 47160 <_CORE_mutex_Initialize+0x7c>
the_mutex->holder = _Thread_Executing;
the_mutex->holder_id = _Thread_Executing->Object.id;
if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ||
_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) {
if ( _Thread_Executing->current_priority <
47198: 2028 004a movel %a0@(74),%d0
4719c: b0a9 0014 cmpl %a1@(20),%d0
471a0: 6228 bhis 471ca <_CORE_mutex_Initialize+0xe6> <== NEVER TAKEN
_Chain_Prepend_unprotected( &_Thread_Executing->lock_mutex,
&the_mutex->queue.lock_queue );
the_mutex->queue.priority_before = _Thread_Executing->current_priority;
#endif
_Thread_Executing->resource_count++;
471a2: 52a9 001c addql #1,%a1@(28)
the_mutex->nest_count = 0;
the_mutex->holder = NULL;
the_mutex->holder_id = 0;
}
_Thread_queue_Initialize(
471a6: 4aaa 0006 tstl %a2@(6)
471aa: 56c0 sne %d0
471ac: 4878 0005 pea 5 <COMPARE>
471b0: 49c0 extbl %d0
471b2: 4878 0400 pea 400 <D_BIAS+0x2>
471b6: 4480 negl %d0
471b8: 2f00 movel %d0,%sp@-
471ba: 2f08 movel %a0,%sp@-
471bc: 4eb9 0004 8fb8 jsr 48fb8 <_Thread_queue_Initialize>
THREAD_QUEUE_DISCIPLINE_FIFO : THREAD_QUEUE_DISCIPLINE_PRIORITY,
STATES_WAITING_FOR_MUTEX,
CORE_MUTEX_TIMEOUT
);
return CORE_MUTEX_STATUS_SUCCESSFUL;
471c2: 4fef 0010 lea %sp@(16),%sp
471c6: 4280 clrl %d0
471c8: 6096 bras 47160 <_CORE_mutex_Initialize+0x7c>
}
471ca: 246e fffc moveal %fp@(-4),%a2
if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ||
_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) {
if ( _Thread_Executing->current_priority <
the_mutex->Attributes.priority_ceiling )
return CORE_MUTEX_STATUS_CEILING_VIOLATED;
471ce: 7006 moveq #6,%d0
STATES_WAITING_FOR_MUTEX,
CORE_MUTEX_TIMEOUT
);
return CORE_MUTEX_STATUS_SUCCESSFUL;
}
471d0: 4e5e unlk %fp <== NOT EXECUTED
00047260 <_CORE_mutex_Seize>:
Objects_Id _id,
bool _wait,
Watchdog_Interval _timeout,
ISR_Level _level
)
{
47260: 4e56 0000 linkw %fp,#0
_CORE_mutex_Seize_body( _the_mutex, _id, _wait, _timeout, _level );
47264: 2039 0005 e41c movel 5e41c <_Thread_Dispatch_disable_level>,%d0
Objects_Id _id,
bool _wait,
Watchdog_Interval _timeout,
ISR_Level _level
)
{
4726a: 2f0a movel %a2,%sp@-
4726c: 246e 0008 moveal %fp@(8),%a2
47270: 2f02 movel %d2,%sp@-
47272: 142e 0013 moveb %fp@(19),%d2
_CORE_mutex_Seize_body( _the_mutex, _id, _wait, _timeout, _level );
47276: 4a80 tstl %d0
47278: 6704 beqs 4727e <_CORE_mutex_Seize+0x1e>
4727a: 4a02 tstb %d2
4727c: 6634 bnes 472b2 <_CORE_mutex_Seize+0x52> <== ALWAYS TAKEN
4727e: 486e 0018 pea %fp@(24)
47282: 2f0a movel %a2,%sp@-
47284: 4eb9 0004 bacc jsr 4bacc <_CORE_mutex_Seize_interrupt_trylock>
4728a: 508f addql #8,%sp
4728c: 4a80 tstl %d0
4728e: 6716 beqs 472a6 <_CORE_mutex_Seize+0x46>
47290: 4a02 tstb %d2
47292: 6636 bnes 472ca <_CORE_mutex_Seize+0x6a>
47294: 202e 0018 movel %fp@(24),%d0
47298: 46c0 movew %d0,%sr
4729a: 2079 0005 e5e0 moveal 5e5e0 <_Per_CPU_Information+0xc>,%a0
472a0: 7001 moveq #1,%d0
472a2: 2140 0034 movel %d0,%a0@(52)
}
472a6: 242e fff8 movel %fp@(-8),%d2
472aa: 246e fffc moveal %fp@(-4),%a2
472ae: 4e5e unlk %fp
472b0: 4e75 rts
bool _wait,
Watchdog_Interval _timeout,
ISR_Level _level
)
{
_CORE_mutex_Seize_body( _the_mutex, _id, _wait, _timeout, _level );
472b2: 7001 moveq #1,%d0
472b4: b0b9 0005 e588 cmpl 5e588 <_System_state_Current>,%d0
472ba: 64c2 bccs 4727e <_CORE_mutex_Seize+0x1e>
472bc: 4878 0012 pea 12 <INVALID_OPERATION+0x2>
472c0: 42a7 clrl %sp@-
472c2: 42a7 clrl %sp@-
472c4: 4eb9 0004 79c8 jsr 479c8 <_Internal_error_Occurred>
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;
472ca: 7001 moveq #1,%d0
472cc: 2079 0005 e5e0 moveal 5e5e0 <_Per_CPU_Information+0xc>,%a0
472d2: 2540 0030 movel %d0,%a2@(48)
472d6: 2039 0005 e41c movel 5e41c <_Thread_Dispatch_disable_level>,%d0
472dc: 5280 addql #1,%d0
472de: 216e 000c 0020 movel %fp@(12),%a0@(32)
472e4: 214a 0044 movel %a2,%a0@(68)
472e8: 23c0 0005 e41c movel %d0,5e41c <_Thread_Dispatch_disable_level>
472ee: 202e 0018 movel %fp@(24),%d0
472f2: 46c0 movew %d0,%sr
472f4: 2f2e 0014 movel %fp@(20),%sp@-
472f8: 2f0a movel %a2,%sp@-
472fa: 4eb9 0004 71d4 jsr 471d4 <_CORE_mutex_Seize_interrupt_blocking>
}
47300: 242e fff8 movel %fp@(-8),%d2
bool _wait,
Watchdog_Interval _timeout,
ISR_Level _level
)
{
_CORE_mutex_Seize_body( _the_mutex, _id, _wait, _timeout, _level );
47304: 508f addql #8,%sp
}
47306: 246e fffc moveal %fp@(-4),%a2
4730a: 4e5e unlk %fp
...
0004bacc <_CORE_mutex_Seize_interrupt_trylock>:
#if defined(__RTEMS_DO_NOT_INLINE_CORE_MUTEX_SEIZE__)
int _CORE_mutex_Seize_interrupt_trylock(
CORE_mutex_Control *the_mutex,
ISR_Level *level_p
)
{
4bacc: 4e56 0000 linkw %fp,#0
{
Thread_Control *executing;
/* disabled when you get here */
executing = _Thread_Executing;
4bad0: 2279 0005 e5e0 moveal 5e5e0 <_Per_CPU_Information+0xc>,%a1
4bad6: 2f0a movel %a2,%sp@-
4bad8: 206e 0008 moveal %fp@(8),%a0
4badc: 2f02 movel %d2,%sp@-
4bade: 246e 000c moveal %fp@(12),%a2
executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL;
4bae2: 42a9 0034 clrl %a1@(52)
if ( !_CORE_mutex_Is_locked( the_mutex ) ) {
4bae6: 4aa8 004e tstl %a0@(78)
4baea: 673a beqs 4bb26 <_CORE_mutex_Seize_interrupt_trylock+0x5a>
the_mutex->lock = CORE_MUTEX_LOCKED;
the_mutex->holder = executing;
the_mutex->holder_id = executing->Object.id;
the_mutex->nest_count = 1;
4baec: 7201 moveq #1,%d1
executing = _Thread_Executing;
executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL;
if ( !_CORE_mutex_Is_locked( the_mutex ) ) {
the_mutex->lock = CORE_MUTEX_LOCKED;
the_mutex->holder = executing;
the_mutex->holder_id = executing->Object.id;
4baee: 2169 0008 005e movel %a1@(8),%a0@(94)
return _CORE_mutex_Seize_interrupt_trylock_body( the_mutex, level_p );
}
4baf4: 2028 0046 movel %a0@(70),%d0
the_mutex->nest_count = 1;
4baf8: 2141 0052 movel %d1,%a0@(82)
if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ||
4bafc: 123c 0002 moveb #2,%d1
/* disabled when you get here */
executing = _Thread_Executing;
executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL;
if ( !_CORE_mutex_Is_locked( the_mutex ) ) {
the_mutex->lock = CORE_MUTEX_LOCKED;
4bb00: 42a8 004e clrl %a0@(78)
the_mutex->holder = executing;
4bb04: 2149 005a movel %a1,%a0@(90)
the_mutex->holder_id = executing->Object.id;
the_mutex->nest_count = 1;
if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ||
4bb08: b280 cmpl %d0,%d1
4bb0a: 672e beqs 4bb3a <_CORE_mutex_Seize_interrupt_trylock+0x6e>
4bb0c: 123c 0003 moveb #3,%d1
4bb10: b280 cmpl %d0,%d1
4bb12: 674e beqs 4bb62 <_CORE_mutex_Seize_interrupt_trylock+0x96>
executing->resource_count++;
}
if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) {
_ISR_Enable( *level_p );
4bb14: 2012 movel %a2@,%d0
4bb16: 46c0 movew %d0,%sr
return 0;
4bb18: 4280 clrl %d0
4bb1a: 242e fff8 movel %fp@(-8),%d2
4bb1e: 246e fffc moveal %fp@(-4),%a2
4bb22: 4e5e unlk %fp
4bb24: 4e75 rts
/*
* At this point, we know the mutex was not available. If this thread
* is the thread that has locked the mutex, let's see if we are allowed
* to nest access.
*/
if ( _Thread_Is_executing( the_mutex->holder ) ) {
4bb26: b3e8 005a cmpal %a0@(90),%a1
4bb2a: 671a beqs 4bb46 <_CORE_mutex_Seize_interrupt_trylock+0x7a>
4bb2c: 242e fff8 movel %fp@(-8),%d2
/*
* The mutex is not available and the caller must deal with the possibility
* of blocking.
*/
return 1;
4bb30: 7001 moveq #1,%d0
4bb32: 246e fffc moveal %fp@(-4),%a2
4bb36: 4e5e unlk %fp
4bb38: 4e75 rts
_Chain_Prepend_unprotected( &executing->lock_mutex,
&the_mutex->queue.lock_queue );
the_mutex->queue.priority_before = executing->current_priority;
#endif
executing->resource_count++;
4bb3a: 52a9 001c addql #1,%a1@(28)
}
if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) {
_ISR_Enable( *level_p );
4bb3e: 2012 movel %a2@,%d0
4bb40: 46c0 movew %d0,%sr
return 0;
4bb42: 4280 clrl %d0
4bb44: 60d4 bras 4bb1a <_CORE_mutex_Seize_interrupt_trylock+0x4e>
* At this point, we know the mutex was not available. If this thread
* is the thread that has locked the mutex, let's see if we are allowed
* to nest access.
*/
if ( _Thread_Is_executing( the_mutex->holder ) ) {
switch ( the_mutex->Attributes.lock_nesting_behavior ) {
4bb46: 2028 0040 movel %a0@(64),%d0
4bb4a: 6658 bnes 4bba4 <_CORE_mutex_Seize_interrupt_trylock+0xd8>
case CORE_MUTEX_NESTING_ACQUIRES:
the_mutex->nest_count++;
4bb4c: 52a8 0052 addql #1,%a0@(82)
_ISR_Enable( *level_p );
4bb50: 2012 movel %a2@,%d0
4bb52: 46c0 movew %d0,%sr
4bb54: 242e fff8 movel %fp@(-8),%d2
return 0;
4bb58: 4280 clrl %d0
4bb5a: 246e fffc moveal %fp@(-4),%a2
4bb5e: 4e5e unlk %fp
4bb60: 4e75 rts
_Chain_Prepend_unprotected( &executing->lock_mutex,
&the_mutex->queue.lock_queue );
the_mutex->queue.priority_before = executing->current_priority;
#endif
executing->resource_count++;
4bb62: 2429 001c movel %a1@(28),%d2
4bb66: 2002 movel %d2,%d0
4bb68: 5280 addql #1,%d0
4bb6a: 2340 001c movel %d0,%a1@(28)
*/
{
Priority_Control ceiling;
Priority_Control current;
ceiling = the_mutex->Attributes.priority_ceiling;
4bb6e: 2228 004a movel %a0@(74),%d1
current = executing->current_priority;
4bb72: 2029 0014 movel %a1@(20),%d0
if ( current == ceiling ) {
4bb76: b081 cmpl %d1,%d0
4bb78: 6700 0082 beqw 4bbfc <_CORE_mutex_Seize_interrupt_trylock+0x130>
_ISR_Enable( *level_p );
return 0;
}
if ( current > ceiling ) {
4bb7c: 6244 bhis 4bbc2 <_CORE_mutex_Seize_interrupt_trylock+0xf6>
);
_Thread_Enable_dispatch();
return 0;
}
/* if ( current < ceiling ) */ {
executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED;
4bb7e: 7206 moveq #6,%d1
the_mutex->lock = CORE_MUTEX_UNLOCKED;
4bb80: 7001 moveq #1,%d0
);
_Thread_Enable_dispatch();
return 0;
}
/* if ( current < ceiling ) */ {
executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED;
4bb82: 2341 0034 movel %d1,%a1@(52)
the_mutex->lock = CORE_MUTEX_UNLOCKED;
4bb86: 2140 004e movel %d0,%a0@(78)
the_mutex->nest_count = 0; /* undo locking above */
4bb8a: 42a8 0052 clrl %a0@(82)
executing->resource_count--; /* undo locking above */
4bb8e: 2342 001c movel %d2,%a1@(28)
_ISR_Enable( *level_p );
4bb92: 2012 movel %a2@,%d0
4bb94: 46c0 movew %d0,%sr
4bb96: 242e fff8 movel %fp@(-8),%d2
return 0;
4bb9a: 4280 clrl %d0
4bb9c: 246e fffc moveal %fp@(-4),%a2
4bba0: 4e5e unlk %fp
4bba2: 4e75 rts
* At this point, we know the mutex was not available. If this thread
* is the thread that has locked the mutex, let's see if we are allowed
* to nest access.
*/
if ( _Thread_Is_executing( the_mutex->holder ) ) {
switch ( the_mutex->Attributes.lock_nesting_behavior ) {
4bba4: 7201 moveq #1,%d1
4bba6: b280 cmpl %d0,%d1
4bba8: 6682 bnes 4bb2c <_CORE_mutex_Seize_interrupt_trylock+0x60><== ALWAYS TAKEN
case CORE_MUTEX_NESTING_ACQUIRES:
the_mutex->nest_count++;
_ISR_Enable( *level_p );
return 0;
case CORE_MUTEX_NESTING_IS_ERROR:
executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED;
4bbaa: 7002 moveq #2,%d0 <== NOT EXECUTED
4bbac: 2340 0034 movel %d0,%a1@(52) <== NOT EXECUTED
_ISR_Enable( *level_p );
4bbb0: 2012 movel %a2@,%d0 <== NOT EXECUTED
4bbb2: 46c0 movew %d0,%sr <== NOT EXECUTED
4bbb4: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
return 0;
4bbb8: 4280 clrl %d0 <== NOT EXECUTED
4bbba: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
4bbbe: 4e5e unlk %fp <== NOT EXECUTED
4bbc0: 4e75 rts <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
4bbc2: 2039 0005 e41c movel 5e41c <_Thread_Dispatch_disable_level>,%d0
4bbc8: 5280 addql #1,%d0
4bbca: 23c0 0005 e41c movel %d0,5e41c <_Thread_Dispatch_disable_level>
return 0;
}
if ( current > ceiling ) {
_Thread_Disable_dispatch();
_ISR_Enable( *level_p );
4bbd0: 2012 movel %a2@,%d0
4bbd2: 46c0 movew %d0,%sr
_Thread_Change_priority(
4bbd4: 42a7 clrl %sp@-
4bbd6: 2f28 004a movel %a0@(74),%sp@-
4bbda: 2f28 005a movel %a0@(90),%sp@-
4bbde: 4eb9 0004 82fc jsr 482fc <_Thread_Change_priority>
the_mutex->holder,
the_mutex->Attributes.priority_ceiling,
false
);
_Thread_Enable_dispatch();
4bbe4: 4eb9 0004 882e jsr 4882e <_Thread_Enable_dispatch>
4bbea: 242e fff8 movel %fp@(-8),%d2
4bbee: 4fef 000c lea %sp@(12),%sp
return 0;
4bbf2: 4280 clrl %d0
4bbf4: 246e fffc moveal %fp@(-4),%a2
4bbf8: 4e5e unlk %fp
4bbfa: 4e75 rts
Priority_Control current;
ceiling = the_mutex->Attributes.priority_ceiling;
current = executing->current_priority;
if ( current == ceiling ) {
_ISR_Enable( *level_p );
4bbfc: 2012 movel %a2@,%d0
4bbfe: 46c0 movew %d0,%sr
4bc00: 242e fff8 movel %fp@(-8),%d2
return 0;
4bc04: 4280 clrl %d0
4bc06: 246e fffc moveal %fp@(-4),%a2
4bc0a: 4e5e unlk %fp
...
00047310 <_CORE_mutex_Surrender>:
#else
Objects_Id id __attribute__((unused)),
CORE_mutex_API_mp_support_callout api_mutex_mp_support __attribute__((unused))
#endif
)
{
47310: 4e56 0000 linkw %fp,#0
47314: 2f0a movel %a2,%sp@-
47316: 246e 0008 moveal %fp@(8),%a2
Thread_Control *the_thread;
Thread_Control *holder;
holder = the_mutex->holder;
4731a: 206a 005a moveal %a2@(90),%a0
* allowed when the mutex in quetion is FIFO or simple Priority
* discipline. But Priority Ceiling or Priority Inheritance mutexes
* must be released by the thread which acquired them.
*/
if ( the_mutex->Attributes.only_owner_release ) {
4731e: 4a2a 0044 tstb %a2@(68)
47322: 6712 beqs 47336 <_CORE_mutex_Surrender+0x26>
if ( !_Thread_Is_executing( holder ) )
47324: b1f9 0005 e5e0 cmpal 5e5e0 <_Per_CPU_Information+0xc>,%a0
4732a: 670a beqs 47336 <_CORE_mutex_Surrender+0x26>
}
} else
the_mutex->lock = CORE_MUTEX_UNLOCKED;
return CORE_MUTEX_STATUS_SUCCESSFUL;
}
4732c: 246e fffc moveal %fp@(-4),%a2
* must be released by the thread which acquired them.
*/
if ( the_mutex->Attributes.only_owner_release ) {
if ( !_Thread_Is_executing( holder ) )
return CORE_MUTEX_STATUS_NOT_OWNER_OF_RESOURCE;
47330: 7003 moveq #3,%d0
}
} else
the_mutex->lock = CORE_MUTEX_UNLOCKED;
return CORE_MUTEX_STATUS_SUCCESSFUL;
}
47332: 4e5e unlk %fp
47334: 4e75 rts
return CORE_MUTEX_STATUS_NOT_OWNER_OF_RESOURCE;
}
/* XXX already unlocked -- not right status */
if ( !the_mutex->nest_count )
47336: 202a 0052 movel %a2@(82),%d0
4733a: 6758 beqs 47394 <_CORE_mutex_Surrender+0x84>
return CORE_MUTEX_STATUS_SUCCESSFUL;
the_mutex->nest_count--;
4733c: 5380 subql #1,%d0
4733e: 2540 0052 movel %d0,%a2@(82)
if ( the_mutex->nest_count != 0 ) {
47342: 6650 bnes 47394 <_CORE_mutex_Surrender+0x84>
}
} else
the_mutex->lock = CORE_MUTEX_UNLOCKED;
return CORE_MUTEX_STATUS_SUCCESSFUL;
}
47344: 202a 0046 movel %a2@(70),%d0
/*
* Formally release the mutex before possibly transferring it to a
* blocked thread.
*/
if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ||
47348: 7202 moveq #2,%d1
4734a: b280 cmpl %d0,%d1
4734c: 6750 beqs 4739e <_CORE_mutex_Surrender+0x8e>
4734e: 123c 0003 moveb #3,%d1
47352: b280 cmpl %d0,%d1
47354: 6748 beqs 4739e <_CORE_mutex_Surrender+0x8e>
if ( holder->resource_count == 0 &&
holder->real_priority != holder->current_priority ) {
_Thread_Change_priority( holder, holder->real_priority, true );
}
}
the_mutex->holder = NULL;
47356: 42aa 005a clrl %a2@(90)
the_mutex->holder_id = 0;
4735a: 42aa 005e clrl %a2@(94)
/*
* Now we check if another thread was waiting for this mutex. If so,
* transfer the mutex to that thread.
*/
if ( ( the_thread = _Thread_queue_Dequeue( &the_mutex->Wait_queue ) ) ) {
4735e: 2f0a movel %a2,%sp@-
47360: 4eb9 0004 8b8c jsr 48b8c <_Thread_queue_Dequeue>
47366: 588f addql #4,%sp
47368: 2040 moveal %d0,%a0
4736a: 4a80 tstl %d0
4736c: 6700 0090 beqw 473fe <_CORE_mutex_Surrender+0xee>
#endif
{
the_mutex->holder = the_thread;
the_mutex->holder_id = the_thread->Object.id;
the_mutex->nest_count = 1;
47370: 7201 moveq #1,%d1
} else
#endif
{
the_mutex->holder = the_thread;
the_mutex->holder_id = the_thread->Object.id;
47372: 2568 0008 005e movel %a0@(8),%a2@(94)
the_mutex->nest_count = 1;
switch ( the_mutex->Attributes.discipline ) {
47378: 202a 0046 movel %a2@(70),%d0
#endif
{
the_mutex->holder = the_thread;
the_mutex->holder_id = the_thread->Object.id;
the_mutex->nest_count = 1;
4737c: 2541 0052 movel %d1,%a2@(82)
switch ( the_mutex->Attributes.discipline ) {
47380: 123c 0002 moveb #2,%d1
} else
#endif
{
the_mutex->holder = the_thread;
47384: 2548 005a movel %a0,%a2@(90)
the_mutex->holder_id = the_thread->Object.id;
the_mutex->nest_count = 1;
switch ( the_mutex->Attributes.discipline ) {
47388: b280 cmpl %d0,%d1
4738a: 6764 beqs 473f0 <_CORE_mutex_Surrender+0xe0>
4738c: 123c 0003 moveb #3,%d1
47390: b280 cmpl %d0,%d1
47392: 6734 beqs 473c8 <_CORE_mutex_Surrender+0xb8> <== NEVER TAKEN
}
} else
the_mutex->lock = CORE_MUTEX_UNLOCKED;
return CORE_MUTEX_STATUS_SUCCESSFUL;
}
47394: 246e fffc moveal %fp@(-4),%a2
}
}
} else
the_mutex->lock = CORE_MUTEX_UNLOCKED;
return CORE_MUTEX_STATUS_SUCCESSFUL;
47398: 4280 clrl %d0
}
4739a: 4e5e unlk %fp
4739c: 4e75 rts
_CORE_mutex_Pop_priority( the_mutex, holder );
if ( pop_status != CORE_MUTEX_STATUS_SUCCESSFUL )
return pop_status;
holder->resource_count--;
4739e: 2028 001c movel %a0@(28),%d0
473a2: 5380 subql #1,%d0
473a4: 2140 001c movel %d0,%a0@(28)
/*
* Whether or not someone is waiting for the mutex, an
* inherited priority must be lowered if this is the last
* mutex (i.e. resource) this task has.
*/
if ( holder->resource_count == 0 &&
473a8: 66ac bnes 47356 <_CORE_mutex_Surrender+0x46>
holder->real_priority != holder->current_priority ) {
473aa: 2028 0018 movel %a0@(24),%d0
/*
* Whether or not someone is waiting for the mutex, an
* inherited priority must be lowered if this is the last
* mutex (i.e. resource) this task has.
*/
if ( holder->resource_count == 0 &&
473ae: b0a8 0014 cmpl %a0@(20),%d0
473b2: 67a2 beqs 47356 <_CORE_mutex_Surrender+0x46>
holder->real_priority != holder->current_priority ) {
_Thread_Change_priority( holder, holder->real_priority, true );
473b4: 4878 0001 pea 1 <ADD>
473b8: 2f00 movel %d0,%sp@-
473ba: 2f08 movel %a0,%sp@-
473bc: 4eb9 0004 82fc jsr 482fc <_Thread_Change_priority>
473c2: 4fef 000c lea %sp@(12),%sp
473c6: 608e bras 47356 <_CORE_mutex_Surrender+0x46>
the_thread->resource_count++;
break;
case CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING:
_CORE_mutex_Push_priority( the_mutex, the_thread );
the_thread->resource_count++;
if (the_mutex->Attributes.priority_ceiling <
473c8: 202a 004a movel %a2@(74),%d0
_CORE_mutex_Push_priority( the_mutex, the_thread );
the_thread->resource_count++;
break;
case CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING:
_CORE_mutex_Push_priority( the_mutex, the_thread );
the_thread->resource_count++;
473cc: 52a8 001c addql #1,%a0@(28)
if (the_mutex->Attributes.priority_ceiling <
473d0: b0a8 0014 cmpl %a0@(20),%d0
473d4: 64be bccs 47394 <_CORE_mutex_Surrender+0x84> <== NEVER TAKEN
the_thread->current_priority){
_Thread_Change_priority(
473d6: 42a7 clrl %sp@-
473d8: 2f00 movel %d0,%sp@-
473da: 2f08 movel %a0,%sp@-
473dc: 4eb9 0004 82fc jsr 482fc <_Thread_Change_priority>
}
} else
the_mutex->lock = CORE_MUTEX_UNLOCKED;
return CORE_MUTEX_STATUS_SUCCESSFUL;
}
473e2: 246e fffc moveal %fp@(-4),%a2
case CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING:
_CORE_mutex_Push_priority( the_mutex, the_thread );
the_thread->resource_count++;
if (the_mutex->Attributes.priority_ceiling <
the_thread->current_priority){
_Thread_Change_priority(
473e6: 4fef 000c lea %sp@(12),%sp
}
}
} else
the_mutex->lock = CORE_MUTEX_UNLOCKED;
return CORE_MUTEX_STATUS_SUCCESSFUL;
473ea: 4280 clrl %d0
}
473ec: 4e5e unlk %fp
473ee: 4e75 rts
473f0: 246e fffc moveal %fp@(-4),%a2
}
}
} else
the_mutex->lock = CORE_MUTEX_UNLOCKED;
return CORE_MUTEX_STATUS_SUCCESSFUL;
473f4: 4280 clrl %d0
case CORE_MUTEX_DISCIPLINES_FIFO:
case CORE_MUTEX_DISCIPLINES_PRIORITY:
break;
case CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT:
_CORE_mutex_Push_priority( the_mutex, the_thread );
the_thread->resource_count++;
473f6: 52a8 001c addql #1,%a0@(28)
}
} else
the_mutex->lock = CORE_MUTEX_UNLOCKED;
return CORE_MUTEX_STATUS_SUCCESSFUL;
}
473fa: 4e5e unlk %fp
473fc: 4e75 rts
}
break;
}
}
} else
the_mutex->lock = CORE_MUTEX_UNLOCKED;
473fe: 7001 moveq #1,%d0
47400: 2540 004e movel %d0,%a2@(78)
return CORE_MUTEX_STATUS_SUCCESSFUL;
}
47404: 246e fffc moveal %fp@(-4),%a2
}
}
} else
the_mutex->lock = CORE_MUTEX_UNLOCKED;
return CORE_MUTEX_STATUS_SUCCESSFUL;
47408: 4200 clrb %d0
}
4740a: 4e5e unlk %fp
...
00047464 <_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
)
{
47464: 4e56 0000 linkw %fp,#0
47468: 2f0a movel %a2,%sp@-
4746a: 246e 0008 moveal %fp@(8),%a2
ISR_Level level;
CORE_semaphore_Status status;
status = CORE_SEMAPHORE_STATUS_SUCCESSFUL;
if ( (the_thread = _Thread_queue_Dequeue(&the_semaphore->Wait_queue)) ) {
4746e: 2f0a movel %a2,%sp@-
47470: 4eb9 0004 8b8c jsr 48b8c <_Thread_queue_Dequeue>
47476: 588f addql #4,%sp
47478: 4a80 tstl %d0
4747a: 670a beqs 47486 <_CORE_semaphore_Surrender+0x22>
status = CORE_SEMAPHORE_MAXIMUM_COUNT_EXCEEDED;
_ISR_Enable( level );
}
return status;
}
4747c: 246e fffc moveal %fp@(-4),%a2
{
Thread_Control *the_thread;
ISR_Level level;
CORE_semaphore_Status status;
status = CORE_SEMAPHORE_STATUS_SUCCESSFUL;
47480: 4280 clrl %d0
status = CORE_SEMAPHORE_MAXIMUM_COUNT_EXCEEDED;
_ISR_Enable( level );
}
return status;
}
47482: 4e5e unlk %fp
47484: 4e75 rts
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
(*api_semaphore_mp_support) ( the_thread, id );
#endif
} else {
_ISR_Disable( level );
47486: 303c 0700 movew #1792,%d0
4748a: 40c1 movew %sr,%d1
4748c: 8081 orl %d1,%d0
4748e: 46c0 movew %d0,%sr
if ( the_semaphore->count < the_semaphore->Attributes.maximum_count )
47490: 202a 0048 movel %a2@(72),%d0
47494: b0aa 0040 cmpl %a2@(64),%d0
47498: 6412 bccs 474ac <_CORE_semaphore_Surrender+0x48> <== NEVER TAKEN
the_semaphore->count += 1;
4749a: 5280 addql #1,%d0
4749c: 2540 0048 movel %d0,%a2@(72)
{
Thread_Control *the_thread;
ISR_Level level;
CORE_semaphore_Status status;
status = CORE_SEMAPHORE_STATUS_SUCCESSFUL;
474a0: 4280 clrl %d0
_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 );
474a2: 46c1 movew %d1,%sr
}
return status;
}
474a4: 246e fffc moveal %fp@(-4),%a2
474a8: 4e5e unlk %fp
474aa: 4e75 rts
} else {
_ISR_Disable( level );
if ( the_semaphore->count < the_semaphore->Attributes.maximum_count )
the_semaphore->count += 1;
else
status = CORE_SEMAPHORE_MAXIMUM_COUNT_EXCEEDED;
474ac: 7004 moveq #4,%d0 <== NOT EXECUTED
_ISR_Enable( level );
474ae: 46c1 movew %d1,%sr <== NOT EXECUTED
474b0: 60f2 bras 474a4 <_CORE_semaphore_Surrender+0x40> <== NOT EXECUTED
...
0004ba64 <_Chain_Initialize>:
Chain_Control *the_chain,
void *starting_address,
size_t number_nodes,
size_t node_size
)
{
4ba64: 4e56 fff0 linkw %fp,#-16
4ba68: 48d7 041c moveml %d2-%d4/%a2,%sp@
4ba6c: 246e 0008 moveal %fp@(8),%a2
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Head(
Chain_Control *the_chain
)
{
return (Chain_Node *) the_chain;
4ba70: 224a moveal %a2,%a1
4ba72: 282e 000c movel %fp@(12),%d4
4ba76: 262e 0010 movel %fp@(16),%d3
4ba7a: 242e 0014 movel %fp@(20),%d2
Chain_Node *current;
Chain_Node *next;
count = number_nodes;
current = _Chain_Head( the_chain );
the_chain->permanent_null = NULL;
4ba7e: 42aa 0004 clrl %a2@(4)
next = starting_address;
while ( count-- ) {
4ba82: 4a83 tstl %d3
4ba84: 6732 beqs 4bab8 <_Chain_Initialize+0x54> <== NEVER TAKEN
Chain_Node *next;
count = number_nodes;
current = _Chain_Head( the_chain );
the_chain->permanent_null = NULL;
next = starting_address;
4ba86: 2044 moveal %d4,%a0
4ba88: 2003 movel %d3,%d0
* node_size - size of node in bytes
*
* Output parameters: NONE
*/
void _Chain_Initialize(
4ba8a: 2208 movel %a0,%d1
4ba8c: d282 addl %d2,%d1
4ba8e: 5380 subql #1,%d0
count = number_nodes;
current = _Chain_Head( the_chain );
the_chain->permanent_null = NULL;
next = starting_address;
while ( count-- ) {
current->next = next;
4ba90: 2288 movel %a0,%a1@
next->previous = current;
4ba92: 2149 0004 movel %a1,%a0@(4)
count = number_nodes;
current = _Chain_Head( the_chain );
the_chain->permanent_null = NULL;
next = starting_address;
while ( count-- ) {
4ba96: 4a80 tstl %d0
4ba98: 6714 beqs 4baae <_Chain_Initialize+0x4a>
4ba9a: 2248 moveal %a0,%a1
current->next = next;
next->previous = current;
current = next;
next = (Chain_Node *)
4ba9c: 2041 moveal %d1,%a0
* node_size - size of node in bytes
*
* Output parameters: NONE
*/
void _Chain_Initialize(
4ba9e: 2208 movel %a0,%d1
4baa0: d282 addl %d2,%d1
4baa2: 5380 subql #1,%d0
count = number_nodes;
current = _Chain_Head( the_chain );
the_chain->permanent_null = NULL;
next = starting_address;
while ( count-- ) {
current->next = next;
4baa4: 2288 movel %a0,%a1@
next->previous = current;
4baa6: 2149 0004 movel %a1,%a0@(4)
count = number_nodes;
current = _Chain_Head( the_chain );
the_chain->permanent_null = NULL;
next = starting_address;
while ( count-- ) {
4baaa: 4a80 tstl %d0
4baac: 66ec bnes 4ba9a <_Chain_Initialize+0x36>
* node_size - size of node in bytes
*
* Output parameters: NONE
*/
void _Chain_Initialize(
4baae: 5383 subql #1,%d3
4bab0: 4c02 3800 mulsl %d2,%d3
count = number_nodes;
current = _Chain_Head( the_chain );
the_chain->permanent_null = NULL;
next = starting_address;
while ( count-- ) {
4bab4: 2244 moveal %d4,%a1
4bab6: d3c3 addal %d3,%a1
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
4bab8: 200a movel %a2,%d0
4baba: 5880 addql #4,%d0
4babc: 2280 movel %d0,%a1@
current = next;
next = (Chain_Node *)
_Addresses_Add_offset( (void *) next, node_size );
}
current->next = _Chain_Tail( the_chain );
the_chain->last = current;
4babe: 2549 0008 movel %a1,%a2@(8)
}
4bac2: 4cd7 041c moveml %sp@,%d2-%d4/%a2
4bac6: 4e5e unlk %fp
...
00045ff4 <_Event_Seize>:
executing = _Thread_Executing;
executing->Wait.return_code = RTEMS_SUCCESSFUL;
api = executing->API_Extensions[ THREAD_API_RTEMS ];
_ISR_Disable( level );
45ff4: 203c 0000 0700 movel #1792,%d0
rtems_event_set event_in,
rtems_option option_set,
rtems_interval ticks,
rtems_event_set *event_out
)
{
45ffa: 4e56 ffec linkw %fp,#-20
45ffe: 222e 0008 movel %fp@(8),%d1
46002: 48d7 043c moveml %d2-%d5/%a2,%sp@
rtems_event_set pending_events;
ISR_Level level;
RTEMS_API_Control *api;
Thread_blocking_operation_States sync_state;
executing = _Thread_Executing;
46006: 2479 0005 e5e0 moveal 5e5e0 <_Per_CPU_Information+0xc>,%a2
rtems_event_set event_in,
rtems_option option_set,
rtems_interval ticks,
rtems_event_set *event_out
)
{
4600c: 242e 000c movel %fp@(12),%d2
46010: 2a2e 0010 movel %fp@(16),%d5
46014: 226e 0014 moveal %fp@(20),%a1
ISR_Level level;
RTEMS_API_Control *api;
Thread_blocking_operation_States sync_state;
executing = _Thread_Executing;
executing->Wait.return_code = RTEMS_SUCCESSFUL;
46018: 42aa 0034 clrl %a2@(52)
api = executing->API_Extensions[ THREAD_API_RTEMS ];
4601c: 206a 0108 moveal %a2@(264),%a0
_ISR_Disable( level );
46020: 40c4 movew %sr,%d4
46022: 8084 orl %d4,%d0
46024: 46c0 movew %d0,%sr
pending_events = api->pending_events;
46026: 2610 movel %a0@,%d3
RTEMS_INLINE_ROUTINE rtems_event_set _Event_sets_Get(
rtems_event_set the_event_set,
rtems_event_set the_event_condition
)
{
return ( the_event_set & the_event_condition );
46028: 2001 movel %d1,%d0
4602a: c083 andl %d3,%d0
seized_events = _Event_sets_Get( pending_events, event_in );
if ( !_Event_sets_Is_empty( seized_events ) &&
4602c: 670c beqs 4603a <_Event_Seize+0x46>
4602e: b081 cmpl %d1,%d0
46030: 6700 0084 beqw 460b6 <_Event_Seize+0xc2>
(seized_events == event_in || _Options_Is_any( option_set )) ) {
46034: 0802 0001 btst #1,%d2
46038: 667c bnes 460b6 <_Event_Seize+0xc2> <== ALWAYS TAKEN
_ISR_Enable( level );
*event_out = seized_events;
return;
}
if ( _Options_Is_no_wait( option_set ) ) {
4603a: 0802 0000 btst #0,%d2
4603e: 6662 bnes 460a2 <_Event_Seize+0xae>
* set properly when we are marked as in the event critical section.
*
* NOTE: Since interrupts are disabled, this isn't that much of an
* issue but better safe than sorry.
*/
executing->Wait.option = (uint32_t) option_set;
46040: 2542 0030 movel %d2,%a2@(48)
executing->Wait.count = (uint32_t) event_in;
executing->Wait.return_argument = event_out;
_Event_Sync_state = THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
46044: 7401 moveq #1,%d2
*
* NOTE: Since interrupts are disabled, this isn't that much of an
* issue but better safe than sorry.
*/
executing->Wait.option = (uint32_t) option_set;
executing->Wait.count = (uint32_t) event_in;
46046: 2541 0024 movel %d1,%a2@(36)
executing->Wait.return_argument = event_out;
4604a: 2549 0028 movel %a1,%a2@(40)
_Event_Sync_state = THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
4604e: 23c2 0005 e5ee movel %d2,5e5ee <_Event_Sync_state>
_ISR_Enable( level );
46054: 46c4 movew %d4,%sr
if ( ticks ) {
46056: 4a85 tstl %d5
46058: 6672 bnes 460cc <_Event_Seize+0xd8>
NULL
);
_Watchdog_Insert_ticks( &executing->Timer, ticks );
}
_Thread_Set_state( executing, STATES_WAITING_FOR_EVENT );
4605a: 4878 0100 pea 100 <DBL_MANT_DIG+0xcb>
4605e: 2f0a movel %a2,%sp@-
46060: 4eb9 0004 916c jsr 4916c <_Thread_Set_state>
_ISR_Disable( level );
46066: 203c 0000 0700 movel #1792,%d0
4606c: 40c1 movew %sr,%d1
4606e: 8081 orl %d1,%d0
46070: 46c0 movew %d0,%sr
sync_state = _Event_Sync_state;
_Event_Sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
if ( sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED ) {
46072: 7401 moveq #1,%d2
46074: 508f addql #8,%sp
_Thread_Set_state( executing, STATES_WAITING_FOR_EVENT );
_ISR_Disable( level );
sync_state = _Event_Sync_state;
46076: 2039 0005 e5ee movel 5e5ee <_Event_Sync_state>,%d0
_Event_Sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
4607c: 42b9 0005 e5ee clrl 5e5ee <_Event_Sync_state>
if ( sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED ) {
46082: b480 cmpl %d0,%d2
46084: 6700 00a4 beqw 4612a <_Event_Seize+0x136>
* An interrupt completed the thread's blocking request.
* The blocking thread was satisfied by an ISR or timed out.
*
* WARNING! Returning with interrupts disabled!
*/
_Thread_blocking_operation_Cancel( sync_state, executing, level );
46088: 2d4a 000c movel %a2,%fp@(12)
4608c: 2d41 0010 movel %d1,%fp@(16)
}
46090: 4cee 043c ffec moveml %fp@(-20),%d2-%d5/%a2
* An interrupt completed the thread's blocking request.
* The blocking thread was satisfied by an ISR or timed out.
*
* WARNING! Returning with interrupts disabled!
*/
_Thread_blocking_operation_Cancel( sync_state, executing, level );
46096: 2d40 0008 movel %d0,%fp@(8)
}
4609a: 4e5e unlk %fp
* An interrupt completed the thread's blocking request.
* The blocking thread was satisfied by an ISR or timed out.
*
* WARNING! Returning with interrupts disabled!
*/
_Thread_blocking_operation_Cancel( sync_state, executing, level );
4609c: 4ef9 0004 8294 jmp 48294 <_Thread_blocking_operation_Cancel>
*event_out = seized_events;
return;
}
if ( _Options_Is_no_wait( option_set ) ) {
_ISR_Enable( level );
460a2: 46c4 movew %d4,%sr
executing->Wait.return_code = RTEMS_UNSATISFIED;
460a4: 720d moveq #13,%d1
460a6: 2541 0034 movel %d1,%a2@(52)
* The blocking thread was satisfied by an ISR or timed out.
*
* WARNING! Returning with interrupts disabled!
*/
_Thread_blocking_operation_Cancel( sync_state, executing, level );
}
460aa: 4cee 043c ffec moveml %fp@(-20),%d2-%d5/%a2
}
if ( _Options_Is_no_wait( option_set ) ) {
_ISR_Enable( level );
executing->Wait.return_code = RTEMS_UNSATISFIED;
*event_out = seized_events;
460b0: 2280 movel %d0,%a1@
* The blocking thread was satisfied by an ISR or timed out.
*
* WARNING! Returning with interrupts disabled!
*/
_Thread_blocking_operation_Cancel( sync_state, executing, level );
}
460b2: 4e5e unlk %fp
460b4: 4e75 rts
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) );
460b6: 2200 movel %d0,%d1
460b8: 4681 notl %d1
460ba: c283 andl %d3,%d1
460bc: 2081 movel %d1,%a0@
if ( !_Event_sets_Is_empty( seized_events ) &&
(seized_events == event_in || _Options_Is_any( option_set )) ) {
api->pending_events =
_Event_sets_Clear( pending_events, seized_events );
_ISR_Enable( level );
460be: 46c4 movew %d4,%sr
*event_out = seized_events;
460c0: 2280 movel %d0,%a1@
* The blocking thread was satisfied by an ISR or timed out.
*
* WARNING! Returning with interrupts disabled!
*/
_Thread_blocking_operation_Cancel( sync_state, executing, level );
}
460c2: 4cee 043c ffec moveml %fp@(-20),%d2-%d5/%a2
460c8: 4e5e unlk %fp
460ca: 4e75 rts
_Event_Sync_state = THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
_ISR_Enable( level );
if ( ticks ) {
_Watchdog_Initialize(
460cc: 202a 0008 movel %a2@(8),%d0
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
the_watchdog->routine = routine;
460d0: 223c 0004 62bc movel #287420,%d1
the_watchdog->id = id;
460d6: 2540 0068 movel %d0,%a2@(104)
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
the_watchdog->routine = routine;
460da: 2541 0064 movel %d1,%a2@(100)
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
460de: 42aa 0050 clrl %a2@(80)
the_watchdog->routine = routine;
the_watchdog->id = id;
the_watchdog->user_data = user_data;
460e2: 42aa 006c clrl %a2@(108)
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
460e6: 2545 0054 movel %d5,%a2@(84)
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
460ea: 486a 0048 pea %a2@(72)
460ee: 4879 0005 e4de pea 5e4de <_Watchdog_Ticks_chain>
460f4: 4eb9 0004 9978 jsr 49978 <_Watchdog_Insert>
460fa: 508f addql #8,%sp
NULL
);
_Watchdog_Insert_ticks( &executing->Timer, ticks );
}
_Thread_Set_state( executing, STATES_WAITING_FOR_EVENT );
460fc: 4878 0100 pea 100 <DBL_MANT_DIG+0xcb>
46100: 2f0a movel %a2,%sp@-
46102: 4eb9 0004 916c jsr 4916c <_Thread_Set_state>
_ISR_Disable( level );
46108: 203c 0000 0700 movel #1792,%d0
4610e: 40c1 movew %sr,%d1
46110: 8081 orl %d1,%d0
46112: 46c0 movew %d0,%sr
sync_state = _Event_Sync_state;
_Event_Sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
if ( sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED ) {
46114: 7401 moveq #1,%d2
46116: 508f addql #8,%sp
_Thread_Set_state( executing, STATES_WAITING_FOR_EVENT );
_ISR_Disable( level );
sync_state = _Event_Sync_state;
46118: 2039 0005 e5ee movel 5e5ee <_Event_Sync_state>,%d0
_Event_Sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
4611e: 42b9 0005 e5ee clrl 5e5ee <_Event_Sync_state>
if ( sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED ) {
46124: b480 cmpl %d0,%d2
46126: 6600 ff60 bnew 46088 <_Event_Seize+0x94>
_ISR_Enable( level );
4612a: 46c1 movew %d1,%sr
* The blocking thread was satisfied by an ISR or timed out.
*
* WARNING! Returning with interrupts disabled!
*/
_Thread_blocking_operation_Cancel( sync_state, executing, level );
}
4612c: 4cee 043c ffec moveml %fp@(-20),%d2-%d5/%a2
46132: 4e5e unlk %fp
...
00046194 <_Event_Surrender>:
api = the_thread->API_Extensions[ THREAD_API_RTEMS ];
option_set = (rtems_option) the_thread->Wait.option;
_ISR_Disable( level );
46194: 203c 0000 0700 movel #1792,%d0
*/
void _Event_Surrender(
Thread_Control *the_thread
)
{
4619a: 4e56 ffec linkw %fp,#-20
4619e: 48d7 043c moveml %d2-%d5/%a2,%sp@
461a2: 246e 0008 moveal %fp@(8),%a2
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 ];
461a6: 206a 0108 moveal %a2@(264),%a0
option_set = (rtems_option) the_thread->Wait.option;
461aa: 282a 0030 movel %a2@(48),%d4
_ISR_Disable( level );
461ae: 40c3 movew %sr,%d3
461b0: 8083 orl %d3,%d0
461b2: 46c0 movew %d0,%sr
pending_events = api->pending_events;
event_condition = (rtems_event_set) the_thread->Wait.count;
461b4: 222a 0024 movel %a2@(36),%d1
RTEMS_INLINE_ROUTINE rtems_event_set _Event_sets_Get(
rtems_event_set the_event_set,
rtems_event_set the_event_condition
)
{
return ( the_event_set & the_event_condition );
461b8: 2001 movel %d1,%d0
api = the_thread->API_Extensions[ THREAD_API_RTEMS ];
option_set = (rtems_option) the_thread->Wait.option;
_ISR_Disable( level );
pending_events = api->pending_events;
461ba: 2410 movel %a0@,%d2
461bc: c082 andl %d2,%d0
seized_events = _Event_sets_Get( pending_events, event_condition );
/*
* No events were seized in this operation
*/
if ( _Event_sets_Is_empty( seized_events ) ) {
461be: 6776 beqs 46236 <_Event_Surrender+0xa2>
/*
* 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() &&
461c0: 4ab9 0005 e5dc tstl 5e5dc <_Per_CPU_Information+0x8>
461c6: 670a beqs 461d2 <_Event_Surrender+0x3e>
461c8: b5f9 0005 e5e0 cmpal 5e5e0 <_Per_CPU_Information+0xc>,%a2
461ce: 6700 00a0 beqw 46270 <_Event_Surrender+0xdc>
*/
RTEMS_INLINE_ROUTINE bool _States_Is_waiting_for_event (
States_Control the_states
)
{
return (the_states & STATES_WAITING_FOR_EVENT);
461d2: 2a2a 0010 movel %a2@(16),%d5
461d6: 0285 0000 0100 andil #256,%d5
}
/*
* Otherwise, this is a normal send to another thread
*/
if ( _States_Is_waiting_for_event( the_thread->current_state ) ) {
461dc: 674c beqs 4622a <_Event_Surrender+0x96>
if ( seized_events == event_condition || _Options_Is_any( option_set ) ) {
461de: b081 cmpl %d1,%d0
461e0: 6706 beqs 461e8 <_Event_Surrender+0x54>
461e2: 0804 0001 btst #1,%d4
461e6: 6742 beqs 4622a <_Event_Surrender+0x96> <== 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) );
461e8: 2200 movel %d0,%d1
461ea: 4681 notl %d1
461ec: c282 andl %d2,%d1
461ee: 2081 movel %d1,%a0@
api->pending_events = _Event_sets_Clear( pending_events, seized_events );
the_thread->Wait.count = 0;
*(rtems_event_set *)the_thread->Wait.return_argument = seized_events;
461f0: 206a 0028 moveal %a2@(40),%a0
* Otherwise, this is a normal send to another thread
*/
if ( _States_Is_waiting_for_event( the_thread->current_state ) ) {
if ( seized_events == event_condition || _Options_Is_any( option_set ) ) {
api->pending_events = _Event_sets_Clear( pending_events, seized_events );
the_thread->Wait.count = 0;
461f4: 42aa 0024 clrl %a2@(36)
*(rtems_event_set *)the_thread->Wait.return_argument = seized_events;
461f8: 2080 movel %d0,%a0@
_ISR_Flash( level );
461fa: 203c 0000 0700 movel #1792,%d0
46200: 46c3 movew %d3,%sr
46202: 8083 orl %d3,%d0
46204: 46c0 movew %d0,%sr
if ( !_Watchdog_Is_active( &the_thread->Timer ) ) {
46206: 7a02 moveq #2,%d5
46208: baaa 0050 cmpl %a2@(80),%d5
4620c: 6734 beqs 46242 <_Event_Surrender+0xae>
_ISR_Enable( level );
4620e: 46c3 movew %d3,%sr
RTEMS_INLINE_ROUTINE void _Thread_Unblock (
Thread_Control *the_thread
)
{
_Thread_Clear_state( the_thread, STATES_BLOCKED );
46210: 2f3c 1003 fff8 movel #268697592,%sp@-
46216: 2f0a movel %a2,%sp@-
46218: 4eb9 0004 8448 jsr 48448 <_Thread_Clear_state>
4621e: 508f addql #8,%sp
}
return;
}
}
_ISR_Enable( level );
}
46220: 4cee 043c ffec moveml %fp@(-20),%d2-%d5/%a2
46226: 4e5e unlk %fp
46228: 4e75 rts
_Thread_Unblock( the_thread );
}
return;
}
}
_ISR_Enable( level );
4622a: 46c3 movew %d3,%sr
}
4622c: 4cee 043c ffec moveml %fp@(-20),%d2-%d5/%a2
46232: 4e5e unlk %fp
46234: 4e75 rts
/*
* No events were seized in this operation
*/
if ( _Event_sets_Is_empty( seized_events ) ) {
_ISR_Enable( level );
46236: 46c3 movew %d3,%sr
}
return;
}
}
_ISR_Enable( level );
}
46238: 4cee 043c ffec moveml %fp@(-20),%d2-%d5/%a2
4623e: 4e5e unlk %fp
46240: 4e75 rts
RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate(
Watchdog_Control *the_watchdog
)
{
the_watchdog->state = WATCHDOG_REMOVE_IT;
46242: 7003 moveq #3,%d0
46244: 2540 0050 movel %d0,%a2@(80)
if ( !_Watchdog_Is_active( &the_thread->Timer ) ) {
_ISR_Enable( level );
_Thread_Unblock( the_thread );
} else {
_Watchdog_Deactivate( &the_thread->Timer );
_ISR_Enable( level );
46248: 46c3 movew %d3,%sr
(void) _Watchdog_Remove( &the_thread->Timer );
4624a: 486a 0048 pea %a2@(72)
4624e: 4eb9 0004 9ac0 jsr 49ac0 <_Watchdog_Remove>
46254: 2f3c 1003 fff8 movel #268697592,%sp@-
4625a: 2f0a movel %a2,%sp@-
4625c: 4eb9 0004 8448 jsr 48448 <_Thread_Clear_state>
46262: 4fef 000c lea %sp@(12),%sp
}
return;
}
}
_ISR_Enable( level );
}
46266: 4cee 043c ffec moveml %fp@(-20),%d2-%d5/%a2
4626c: 4e5e unlk %fp
4626e: 4e75 rts
* 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) ||
46270: 2279 0005 e5ee moveal 5e5ee <_Event_Sync_state>,%a1
/*
* 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 ) &&
46276: 7a02 moveq #2,%d5
46278: ba89 cmpl %a1,%d5
4627a: 6710 beqs 4628c <_Event_Surrender+0xf8> <== NEVER TAKEN
((_Event_Sync_state == THREAD_BLOCKING_OPERATION_TIMEOUT) ||
(_Event_Sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED)) ) {
4627c: 2279 0005 e5ee moveal 5e5ee <_Event_Sync_state>,%a1
* 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) ||
46282: 1a3c 0001 moveb #1,%d5
46286: ba89 cmpl %a1,%d5
46288: 6600 ff48 bnew 461d2 <_Event_Surrender+0x3e>
(_Event_Sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED)) ) {
if ( seized_events == event_condition || _Options_Is_any(option_set) ) {
4628c: b081 cmpl %d1,%d0
4628e: 6706 beqs 46296 <_Event_Surrender+0x102>
46290: 0804 0001 btst #1,%d4
46294: 671a beqs 462b0 <_Event_Surrender+0x11c> <== NEVER TAKEN
46296: 2200 movel %d0,%d1
46298: 4681 notl %d1
4629a: c282 andl %d2,%d1
4629c: 2081 movel %d1,%a0@
api->pending_events = _Event_sets_Clear( pending_events,seized_events );
the_thread->Wait.count = 0;
*(rtems_event_set *)the_thread->Wait.return_argument = seized_events;
4629e: 206a 0028 moveal %a2@(40),%a0
_Thread_Is_executing( the_thread ) &&
((_Event_Sync_state == THREAD_BLOCKING_OPERATION_TIMEOUT) ||
(_Event_Sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED)) ) {
if ( seized_events == event_condition || _Options_Is_any(option_set) ) {
api->pending_events = _Event_sets_Clear( pending_events,seized_events );
the_thread->Wait.count = 0;
462a2: 42aa 0024 clrl %a2@(36)
*(rtems_event_set *)the_thread->Wait.return_argument = seized_events;
462a6: 2080 movel %d0,%a0@
_Event_Sync_state = THREAD_BLOCKING_OPERATION_SATISFIED;
462a8: 7003 moveq #3,%d0
462aa: 23c0 0005 e5ee movel %d0,5e5ee <_Event_Sync_state>
}
_ISR_Enable( level );
462b0: 46c3 movew %d3,%sr
}
return;
}
}
_ISR_Enable( level );
}
462b2: 4cee 043c ffec moveml %fp@(-20),%d2-%d5/%a2
462b8: 4e5e unlk %fp <== NOT EXECUTED
000462bc <_Event_Timeout>:
void _Event_Timeout(
Objects_Id id,
void *ignored
)
{
462bc: 4e56 fffc linkw %fp,#-4
462c0: 2f03 movel %d3,%sp@-
462c2: 2f02 movel %d2,%sp@-
Thread_Control *the_thread;
Objects_Locations location;
ISR_Level level;
the_thread = _Thread_Get( id, &location );
462c4: 486e fffc pea %fp@(-4)
462c8: 2f2e 0008 movel %fp@(8),%sp@-
462cc: 4eb9 0004 8854 jsr 48854 <_Thread_Get>
switch ( location ) {
462d2: 508f addql #8,%sp
462d4: 4aae fffc tstl %fp@(-4)
462d8: 6642 bnes 4631c <_Event_Timeout+0x60> <== 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 );
462da: 223c 0000 0700 movel #1792,%d1
462e0: 40c2 movew %sr,%d2
462e2: 8282 orl %d2,%d1
462e4: 46c1 movew %d1,%sr
_ISR_Enable( level );
return;
}
#endif
the_thread->Wait.count = 0;
462e6: 2040 moveal %d0,%a0
462e8: 42a8 0024 clrl %a0@(36)
if ( _Thread_Is_executing( the_thread ) ) {
462ec: b0b9 0005 e5e0 cmpl 5e5e0 <_Per_CPU_Information+0xc>,%d0
462f2: 6734 beqs 46328 <_Event_Timeout+0x6c>
if ( _Event_Sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )
_Event_Sync_state = THREAD_BLOCKING_OPERATION_TIMEOUT;
}
the_thread->Wait.return_code = RTEMS_TIMEOUT;
462f4: 7606 moveq #6,%d3
462f6: 2040 moveal %d0,%a0
462f8: 2143 0034 movel %d3,%a0@(52)
_ISR_Enable( level );
462fc: 46c2 movew %d2,%sr
462fe: 2f3c 1003 fff8 movel #268697592,%sp@-
46304: 2f00 movel %d0,%sp@-
46306: 4eb9 0004 8448 jsr 48448 <_Thread_Clear_state>
_Thread_Unblock( the_thread );
_Thread_Unnest_dispatch();
break;
4630c: 508f addql #8,%sp
*/
RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void )
{
RTEMS_COMPILER_MEMORY_BARRIER();
_Thread_Dispatch_disable_level -= 1;
4630e: 2039 0005 e41c movel 5e41c <_Thread_Dispatch_disable_level>,%d0
46314: 5380 subql #1,%d0
46316: 23c0 0005 e41c movel %d0,5e41c <_Thread_Dispatch_disable_level>
case OBJECTS_REMOTE: /* impossible */
#endif
case OBJECTS_ERROR:
break;
}
}
4631c: 242e fff4 movel %fp@(-12),%d2
46320: 262e fff8 movel %fp@(-8),%d3
46324: 4e5e unlk %fp
46326: 4e75 rts
}
#endif
the_thread->Wait.count = 0;
if ( _Thread_Is_executing( the_thread ) ) {
if ( _Event_Sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )
46328: 2239 0005 e5ee movel 5e5ee <_Event_Sync_state>,%d1
4632e: 7601 moveq #1,%d3
46330: b681 cmpl %d1,%d3
46332: 66c0 bnes 462f4 <_Event_Timeout+0x38>
_Event_Sync_state = THREAD_BLOCKING_OPERATION_TIMEOUT;
}
the_thread->Wait.return_code = RTEMS_TIMEOUT;
46334: 7606 moveq #6,%d3
46336: 2040 moveal %d0,%a0
#endif
the_thread->Wait.count = 0;
if ( _Thread_Is_executing( the_thread ) ) {
if ( _Event_Sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )
_Event_Sync_state = THREAD_BLOCKING_OPERATION_TIMEOUT;
46338: 7202 moveq #2,%d1
}
the_thread->Wait.return_code = RTEMS_TIMEOUT;
4633a: 2143 0034 movel %d3,%a0@(52)
#endif
the_thread->Wait.count = 0;
if ( _Thread_Is_executing( the_thread ) ) {
if ( _Event_Sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )
_Event_Sync_state = THREAD_BLOCKING_OPERATION_TIMEOUT;
4633e: 23c1 0005 e5ee movel %d1,5e5ee <_Event_Sync_state>
}
the_thread->Wait.return_code = RTEMS_TIMEOUT;
_ISR_Enable( level );
46344: 46c2 movew %d2,%sr
RTEMS_INLINE_ROUTINE void _Thread_Unblock (
Thread_Control *the_thread
)
{
_Thread_Clear_state( the_thread, STATES_BLOCKED );
46346: 2f3c 1003 fff8 movel #268697592,%sp@-
4634c: 2f00 movel %d0,%sp@-
4634e: 4eb9 0004 8448 jsr 48448 <_Thread_Clear_state>
_Thread_Unblock( the_thread );
_Thread_Unnest_dispatch();
break;
46354: 508f addql #8,%sp
*/
RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void )
{
RTEMS_COMPILER_MEMORY_BARRIER();
_Thread_Dispatch_disable_level -= 1;
46356: 2039 0005 e41c movel 5e41c <_Thread_Dispatch_disable_level>,%d0
4635c: 5380 subql #1,%d0
4635e: 23c0 0005 e41c movel %d0,5e41c <_Thread_Dispatch_disable_level>
46364: 60b6 bras 4631c <_Event_Timeout+0x60>
...
0004bcac <_Heap_Allocate_aligned_with_boundary>:
Heap_Control *heap,
uintptr_t alloc_size,
uintptr_t alignment,
uintptr_t boundary
)
{
4bcac: 4e56 ffcc linkw %fp,#-52
4bcb0: 226e 000c moveal %fp@(12),%a1
4bcb4: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
4bcb8: 246e 0008 moveal %fp@(8),%a2
Heap_Statistics *const stats = &heap->stats;
Heap_Block *const free_list_tail = _Heap_Free_list_tail( heap );
Heap_Block *block = _Heap_Free_list_first( heap );
uintptr_t const block_size_floor = alloc_size + HEAP_BLOCK_HEADER_SIZE
4bcbc: 2e09 movel %a1,%d7
4bcbe: 5887 addql #4,%d7
- HEAP_BLOCK_SIZE_OFFSET;
uintptr_t const page_size = heap->page_size;
4bcc0: 202a 0010 movel %a2@(16),%d0
Heap_Control *heap,
uintptr_t alloc_size,
uintptr_t alignment,
uintptr_t boundary
)
{
4bcc4: 222e 0010 movel %fp@(16),%d1
4bcc8: 282e 0014 movel %fp@(20),%d4
if ( stats->max_search < search_count ) {
stats->max_search = search_count;
}
return (void *) alloc_begin;
}
4bccc: 206a 0008 moveal %a2@(8),%a0
Heap_Statistics *const stats = &heap->stats;
Heap_Block *const free_list_tail = _Heap_Free_list_tail( heap );
Heap_Block *block = _Heap_Free_list_first( heap );
uintptr_t const block_size_floor = alloc_size + HEAP_BLOCK_HEADER_SIZE
- HEAP_BLOCK_SIZE_OFFSET;
uintptr_t const page_size = heap->page_size;
4bcd0: 2d40 fffc movel %d0,%fp@(-4)
uintptr_t alloc_begin = 0;
uint32_t search_count = 0;
if ( block_size_floor < alloc_size ) {
4bcd4: be89 cmpl %a1,%d7
4bcd6: 6500 0144 bcsw 4be1c <_Heap_Allocate_aligned_with_boundary+0x170>
/* Integer overflow occured */
return NULL;
}
if ( boundary != 0 ) {
4bcda: 4a84 tstl %d4
4bcdc: 6600 013a bnew 4be18 <_Heap_Allocate_aligned_with_boundary+0x16c>
if ( alignment == 0 ) {
alignment = page_size;
}
}
while ( block != free_list_tail ) {
4bce0: b1ca cmpal %a2,%a0
4bce2: 6700 0138 beqw 4be1c <_Heap_Allocate_aligned_with_boundary+0x170>
uintptr_t const block_begin = (uintptr_t) block;
uintptr_t const block_size = _Heap_Block_size( block );
uintptr_t const block_end = block_begin + block_size;
uintptr_t const alloc_begin_floor = _Heap_Alloc_area_of_block( block );
uintptr_t const alloc_begin_ceiling = block_end - min_block_size
4bce6: 242e fffc movel %fp@(-4),%d2
+ HEAP_BLOCK_HEADER_SIZE + page_size - 1;
uintptr_t alloc_end = block_end + HEAP_BLOCK_SIZE_OFFSET;
4bcea: 7c04 moveq #4,%d6
uintptr_t const block_begin = (uintptr_t) block;
uintptr_t const block_size = _Heap_Block_size( block );
uintptr_t const block_end = block_begin + block_size;
uintptr_t const alloc_begin_floor = _Heap_Alloc_area_of_block( block );
uintptr_t const alloc_begin_ceiling = block_end - min_block_size
4bcec: 5e82 addql #7,%d2
+ HEAP_BLOCK_HEADER_SIZE + page_size - 1;
uintptr_t alloc_end = block_end + HEAP_BLOCK_SIZE_OFFSET;
4bcee: 9c89 subl %a1,%d6
if ( alignment == 0 ) {
alignment = page_size;
}
}
while ( block != free_list_tail ) {
4bcf0: 4283 clrl %d3
uintptr_t const alloc_begin_floor = _Heap_Alloc_area_of_block( block );
uintptr_t const alloc_begin_ceiling = block_end - min_block_size
+ HEAP_BLOCK_HEADER_SIZE + page_size - 1;
uintptr_t alloc_end = block_end + HEAP_BLOCK_SIZE_OFFSET;
4bcf2: 2647 moveal %d7,%a3
uintptr_t const block_begin = (uintptr_t) block;
uintptr_t const block_size = _Heap_Block_size( block );
uintptr_t const block_end = block_begin + block_size;
uintptr_t const alloc_begin_floor = _Heap_Alloc_area_of_block( block );
uintptr_t const alloc_begin_ceiling = block_end - min_block_size
4bcf4: 2d42 fff8 movel %d2,%fp@(-8)
+ HEAP_BLOCK_HEADER_SIZE + page_size - 1;
uintptr_t alloc_end = block_end + HEAP_BLOCK_SIZE_OFFSET;
4bcf8: 2d46 fff4 movel %d6,%fp@(-12)
/*
* The HEAP_PREV_BLOCK_USED flag is always set in the block size_and_flag
* field. Thus the value is about one unit larger than the real block
* size. The greater than operator takes this into account.
*/
if ( block->size_and_flag > block_size_floor ) {
4bcfc: 2028 0004 movel %a0@(4),%d0
while ( block != free_list_tail ) {
_HAssert( _Heap_Is_prev_used( block ) );
/* Statistics */
++search_count;
4bd00: 5283 addql #1,%d3
/*
* The HEAP_PREV_BLOCK_USED flag is always set in the block size_and_flag
* field. Thus the value is about one unit larger than the real block
* size. The greater than operator takes this into account.
*/
if ( block->size_and_flag > block_size_floor ) {
4bd02: b08b cmpl %a3,%d0
4bd04: 630e blss 4bd14 <_Heap_Allocate_aligned_with_boundary+0x68>
if ( alignment == 0 ) {
4bd06: 4a81 tstl %d1
4bd08: 6628 bnes 4bd32 <_Heap_Allocate_aligned_with_boundary+0x86>
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Alloc_area_of_block(
const Heap_Block *block
)
{
return (uintptr_t) block + HEAP_BLOCK_HEADER_SIZE;
4bd0a: 2408 movel %a0,%d2
4bd0c: 5082 addql #8,%d2
boundary
);
}
}
if ( alloc_begin != 0 ) {
4bd0e: 4a82 tstl %d2
4bd10: 6600 00ea bnew 4bdfc <_Heap_Allocate_aligned_with_boundary+0x150>
break;
}
block = block->next;
4bd14: 2068 0008 moveal %a0@(8),%a0
if ( alignment == 0 ) {
alignment = page_size;
}
}
while ( block != free_list_tail ) {
4bd18: b1ca cmpal %a2,%a0
4bd1a: 66e0 bnes 4bcfc <_Heap_Allocate_aligned_with_boundary+0x50>
4bd1c: 4280 clrl %d0
boundary
);
}
/* Statistics */
if ( stats->max_search < search_count ) {
4bd1e: b6aa 0044 cmpl %a2@(68),%d3
4bd22: 6304 blss 4bd28 <_Heap_Allocate_aligned_with_boundary+0x7c>
stats->max_search = search_count;
4bd24: 2543 0044 movel %d3,%a2@(68)
}
return (void *) alloc_begin;
}
4bd28: 4cee 3cfc ffcc moveml %fp@(-52),%d2-%d7/%a2-%a5
4bd2e: 4e5e unlk %fp
4bd30: 4e75 rts
- 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;
4bd32: 7efe moveq #-2,%d7
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Alloc_area_of_block(
const Heap_Block *block
)
{
return (uintptr_t) block + HEAP_BLOCK_HEADER_SIZE;
4bd34: 4be8 0008 lea %a0@(8),%a5
- 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;
4bd38: c087 andl %d7,%d0
4bd3a: 286a 0014 moveal %a2@(20),%a4
uintptr_t const page_size = heap->page_size;
uintptr_t const min_block_size = heap->min_block_size;
uintptr_t const block_begin = (uintptr_t) block;
uintptr_t const block_size = _Heap_Block_size( block );
uintptr_t const block_end = block_begin + block_size;
4bd3e: d088 addl %a0,%d0
uintptr_t const alloc_begin_floor = _Heap_Alloc_area_of_block( block );
uintptr_t const alloc_begin_ceiling = block_end - min_block_size
+ HEAP_BLOCK_HEADER_SIZE + page_size - 1;
4bd40: 2a2e fff8 movel %fp@(-8),%d5
4bd44: 9a8c subl %a4,%d5
uintptr_t alloc_end = block_end + HEAP_BLOCK_SIZE_OFFSET;
uintptr_t alloc_begin = alloc_end - alloc_size;
4bd46: 242e fff4 movel %fp@(-12),%d2
4bd4a: d480 addl %d0,%d2
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(
uintptr_t value,
uintptr_t alignment
)
{
return value - (value % alignment);
4bd4c: 2c02 movel %d2,%d6
uintptr_t const block_begin = (uintptr_t) block;
uintptr_t const block_size = _Heap_Block_size( block );
uintptr_t const block_end = block_begin + block_size;
uintptr_t const alloc_begin_floor = _Heap_Alloc_area_of_block( block );
uintptr_t const alloc_begin_ceiling = block_end - min_block_size
4bd4e: d085 addl %d5,%d0
4bd50: 4c41 6005 remul %d1,%d5,%d6
4bd54: 9485 subl %d5,%d2
uintptr_t alloc_begin = alloc_end - alloc_size;
alloc_begin = _Heap_Align_down( alloc_begin, alignment );
/* Ensure that the we have a valid new block at the end */
if ( alloc_begin > alloc_begin_ceiling ) {
4bd56: b480 cmpl %d0,%d2
4bd58: 630a blss 4bd64 <_Heap_Allocate_aligned_with_boundary+0xb8>
4bd5a: 2a00 movel %d0,%d5
4bd5c: 4c41 5002 remul %d1,%d2,%d5
4bd60: 9082 subl %d2,%d0
4bd62: 2400 movel %d0,%d2
}
alloc_end = alloc_begin + alloc_size;
/* Ensure boundary constaint */
if ( boundary != 0 ) {
4bd64: 4a84 tstl %d4
4bd66: 676a beqs 4bdd2 <_Heap_Allocate_aligned_with_boundary+0x126>
/* Ensure that the we have a valid new block at the end */
if ( alloc_begin > alloc_begin_ceiling ) {
alloc_begin = _Heap_Align_down( alloc_begin_ceiling, alignment );
}
alloc_end = alloc_begin + alloc_size;
4bd68: 2002 movel %d2,%d0
4bd6a: d089 addl %a1,%d0
4bd6c: 2c00 movel %d0,%d6
4bd6e: 4c44 6005 remul %d4,%d5,%d6
4bd72: 2c00 movel %d0,%d6
4bd74: 9c85 subl %d5,%d6
4bd76: 2a06 movel %d6,%d5
/* Ensure boundary constaint */
if ( boundary != 0 ) {
uintptr_t const boundary_floor = alloc_begin_floor + alloc_size;
uintptr_t boundary_line = _Heap_Align_down( alloc_end, boundary );
while ( alloc_begin < boundary_line && boundary_line < alloc_end ) {
4bd78: bc82 cmpl %d2,%d6
4bd7a: 6356 blss 4bdd2 <_Heap_Allocate_aligned_with_boundary+0x126>
4bd7c: bc80 cmpl %d0,%d6
4bd7e: 6452 bccs 4bdd2 <_Heap_Allocate_aligned_with_boundary+0x126>
alloc_end = alloc_begin + alloc_size;
/* Ensure boundary constaint */
if ( boundary != 0 ) {
uintptr_t const boundary_floor = alloc_begin_floor + alloc_size;
4bd80: 2c0d movel %a5,%d6
4bd82: dc89 addl %a1,%d6
uintptr_t boundary_line = _Heap_Align_down( alloc_end, boundary );
while ( alloc_begin < boundary_line && boundary_line < alloc_end ) {
if ( boundary_line < boundary_floor ) {
4bd84: ba86 cmpl %d6,%d5
4bd86: 658c bcss 4bd14 <_Heap_Allocate_aligned_with_boundary+0x68>
return 0;
}
alloc_begin = boundary_line - alloc_size;
4bd88: 2405 movel %d5,%d2
4bd8a: 9489 subl %a1,%d2
4bd8c: 2a02 movel %d2,%d5
4bd8e: 4c41 5000 remul %d1,%d0,%d5
4bd92: 9480 subl %d0,%d2
alloc_begin = _Heap_Align_down( alloc_begin, alignment );
alloc_end = alloc_begin + alloc_size;
4bd94: 2002 movel %d2,%d0
4bd96: d089 addl %a1,%d0
4bd98: 2e00 movel %d0,%d7
4bd9a: 4c44 7005 remul %d4,%d5,%d7
4bd9e: 2e00 movel %d0,%d7
4bda0: 9e85 subl %d5,%d7
4bda2: 2a07 movel %d7,%d5
/* Ensure boundary constaint */
if ( boundary != 0 ) {
uintptr_t const boundary_floor = alloc_begin_floor + alloc_size;
uintptr_t boundary_line = _Heap_Align_down( alloc_end, boundary );
while ( alloc_begin < boundary_line && boundary_line < alloc_end ) {
4bda4: be82 cmpl %d2,%d7
4bda6: 632a blss 4bdd2 <_Heap_Allocate_aligned_with_boundary+0x126>
4bda8: be80 cmpl %d0,%d7
4bdaa: 6426 bccs 4bdd2 <_Heap_Allocate_aligned_with_boundary+0x126>
if ( boundary_line < boundary_floor ) {
4bdac: ba86 cmpl %d6,%d5
4bdae: 6500 ff64 bcsw 4bd14 <_Heap_Allocate_aligned_with_boundary+0x68>
return 0;
}
alloc_begin = boundary_line - alloc_size;
4bdb2: 2405 movel %d5,%d2
4bdb4: 9489 subl %a1,%d2
4bdb6: 2a02 movel %d2,%d5
4bdb8: 4c41 5000 remul %d1,%d0,%d5
4bdbc: 9480 subl %d0,%d2
alloc_begin = _Heap_Align_down( alloc_begin, alignment );
alloc_end = alloc_begin + alloc_size;
4bdbe: 2002 movel %d2,%d0
4bdc0: d089 addl %a1,%d0
4bdc2: 2e00 movel %d0,%d7
4bdc4: 4c44 7005 remul %d4,%d5,%d7
4bdc8: 2e00 movel %d0,%d7
4bdca: 9e85 subl %d5,%d7
4bdcc: 2a07 movel %d7,%d5
/* Ensure boundary constaint */
if ( boundary != 0 ) {
uintptr_t const boundary_floor = alloc_begin_floor + alloc_size;
uintptr_t boundary_line = _Heap_Align_down( alloc_end, boundary );
while ( alloc_begin < boundary_line && boundary_line < alloc_end ) {
4bdce: be82 cmpl %d2,%d7
4bdd0: 62d6 bhis 4bda8 <_Heap_Allocate_aligned_with_boundary+0xfc><== ALWAYS TAKEN
boundary_line = _Heap_Align_down( alloc_end, boundary );
}
}
/* Ensure that the we have a valid new block at the beginning */
if ( alloc_begin >= alloc_begin_floor ) {
4bdd2: b48d cmpl %a5,%d2
4bdd4: 6500 ff3e bcsw 4bd14 <_Heap_Allocate_aligned_with_boundary+0x68>
4bdd8: 2e2e fffc movel %fp@(-4),%d7
4bddc: 2c02 movel %d2,%d6
4bdde: 70f8 moveq #-8,%d0
4bde0: 9088 subl %a0,%d0
uintptr_t alloc_begin,
uintptr_t page_size
)
{
return (Heap_Block *) (_Heap_Align_down( alloc_begin, page_size )
- HEAP_BLOCK_HEADER_SIZE);
4bde2: d082 addl %d2,%d0
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(
uintptr_t value,
uintptr_t alignment
)
{
return value - (value % alignment);
4bde4: 4c47 6005 remul %d7,%d5,%d6
uintptr_t const alloc_block_begin =
(uintptr_t) _Heap_Block_of_alloc_area( alloc_begin, page_size );
uintptr_t const free_size = alloc_block_begin - block_begin;
4bde8: 9085 subl %d5,%d0
if ( free_size >= min_block_size || free_size == 0 ) {
4bdea: b08c cmpl %a4,%d0
4bdec: 6400 ff20 bccw 4bd0e <_Heap_Allocate_aligned_with_boundary+0x62>
4bdf0: 4a80 tstl %d0
4bdf2: 6600 ff20 bnew 4bd14 <_Heap_Allocate_aligned_with_boundary+0x68>
boundary
);
}
}
if ( alloc_begin != 0 ) {
4bdf6: 4a82 tstl %d2
4bdf8: 6700 ff1a beqw 4bd14 <_Heap_Allocate_aligned_with_boundary+0x68>
if ( alloc_begin != 0 ) {
/* Statistics */
stats->searches += search_count;
block = _Heap_Block_allocate( heap, block, alloc_begin, alloc_size );
4bdfc: 2f09 movel %a1,%sp@-
block = block->next;
}
if ( alloc_begin != 0 ) {
/* Statistics */
stats->searches += search_count;
4bdfe: d7aa 004c addl %d3,%a2@(76)
block = _Heap_Block_allocate( heap, block, alloc_begin, alloc_size );
4be02: 2f02 movel %d2,%sp@-
4be04: 2f08 movel %a0,%sp@-
4be06: 2f0a movel %a2,%sp@-
4be08: 4eb9 0004 78ac jsr 478ac <_Heap_Block_allocate>
4be0e: 4fef 0010 lea %sp@(16),%sp
4be12: 2002 movel %d2,%d0
4be14: 6000 ff08 braw 4bd1e <_Heap_Allocate_aligned_with_boundary+0x72>
/* Integer overflow occured */
return NULL;
}
if ( boundary != 0 ) {
if ( boundary < alloc_size ) {
4be18: b889 cmpl %a1,%d4
4be1a: 640c bccs 4be28 <_Heap_Allocate_aligned_with_boundary+0x17c>
if ( alignment == 0 ) {
alignment = page_size;
}
}
while ( block != free_list_tail ) {
4be1c: 4280 clrl %d0
if ( stats->max_search < search_count ) {
stats->max_search = search_count;
}
return (void *) alloc_begin;
}
4be1e: 4cee 3cfc ffcc moveml %fp@(-52),%d2-%d7/%a2-%a5
4be24: 4e5e unlk %fp
4be26: 4e75 rts
if ( boundary != 0 ) {
if ( boundary < alloc_size ) {
return NULL;
}
if ( alignment == 0 ) {
4be28: 4a81 tstl %d1
4be2a: 6600 feb4 bnew 4bce0 <_Heap_Allocate_aligned_with_boundary+0x34>
alignment = page_size;
4be2e: 2200 movel %d0,%d1
4be30: 6000 feae braw 4bce0 <_Heap_Allocate_aligned_with_boundary+0x34>
000478ac <_Heap_Block_allocate>:
- 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;
478ac: 70fe moveq #-2,%d0
Heap_Control *heap,
Heap_Block *block,
uintptr_t alloc_begin,
uintptr_t alloc_size
)
{
478ae: 4e56 ffe0 linkw %fp,#-32
478b2: 206e 000c moveal %fp@(12),%a0
478b6: 48d7 3c3c moveml %d2-%d5/%a2-%a5,%sp@
if ( stats->min_free_size > stats->free_size ) {
stats->min_free_size = stats->free_size;
}
return block;
}
478ba: 2428 0004 movel %a0@(4),%d2
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;
478be: 7801 moveq #1,%d4
- 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;
478c0: c082 andl %d2,%d0
Heap_Control *heap,
Heap_Block *block,
uintptr_t alloc_begin,
uintptr_t alloc_size
)
{
478c2: 222e 0010 movel %fp@(16),%d1
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
478c6: 49f0 0800 lea %a0@(00000000,%d0:l),%a4
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Alloc_area_of_block(
const Heap_Block *block
)
{
return (uintptr_t) block + HEAP_BLOCK_HEADER_SIZE;
478ca: 2641 moveal %d1,%a3
478cc: 518b subql #8,%a3
Heap_Statistics *const stats = &heap->stats;
uintptr_t const alloc_area_begin = _Heap_Alloc_area_of_block( block );
uintptr_t const alloc_area_offset = alloc_begin - alloc_area_begin;
478ce: 2a0b movel %a3,%d5
478d0: 9a88 subl %a0,%d5
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;
478d2: c8ac 0004 andl %a4@(4),%d4
Heap_Control *heap,
Heap_Block *block,
uintptr_t alloc_begin,
uintptr_t alloc_size
)
{
478d6: 246e 0008 moveal %fp@(8),%a2
478da: 262e 0014 movel %fp@(20),%d3
Heap_Block *free_list_anchor = NULL;
_HAssert( alloc_area_begin <= alloc_begin );
if ( _Heap_Is_free( block ) ) {
478de: 4a84 tstl %d4
478e0: 6600 0092 bnew 47974 <_Heap_Block_allocate+0xc8>
if ( stats->min_free_size > stats->free_size ) {
stats->min_free_size = stats->free_size;
}
return block;
}
478e4: 2828 0008 movel %a0@(8),%d4
{
Heap_Block *next = block->next;
Heap_Block *prev = block->prev;
prev->next = next;
next->prev = prev;
478e8: 2a44 moveal %d4,%a5
Heap_Block *free_list_anchor = NULL;
_HAssert( alloc_area_begin <= alloc_begin );
if ( _Heap_Is_free( block ) ) {
free_list_anchor = block->prev;
478ea: 2268 000c moveal %a0@(12),%a1
RTEMS_INLINE_ROUTINE void _Heap_Free_list_remove( Heap_Block *block )
{
Heap_Block *next = block->next;
Heap_Block *prev = block->prev;
prev->next = next;
478ee: 2344 0008 movel %d4,%a1@(8)
next->prev = prev;
478f2: 2b49 000c movel %a1,%a5@(12)
_Heap_Free_list_remove( block );
/* Statistics */
--stats->free_blocks;
++stats->used_blocks;
stats->free_size -= _Heap_Block_size( block );
478f6: 91aa 0030 subl %d0,%a2@(48)
free_list_anchor = block->prev;
_Heap_Free_list_remove( block );
/* Statistics */
--stats->free_blocks;
478fa: 53aa 0038 subql #1,%a2@(56)
++stats->used_blocks;
478fe: 52aa 0040 addql #1,%a2@(64)
stats->free_size -= _Heap_Block_size( block );
} else {
free_list_anchor = _Heap_Free_list_head( heap );
}
if ( alloc_area_offset < heap->page_size ) {
47902: 202a 0010 movel %a2@(16),%d0
47906: b085 cmpl %d5,%d0
47908: 6274 bhis 4797e <_Heap_Block_allocate+0xd2>
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(
uintptr_t value,
uintptr_t alignment
)
{
return value - (value % alignment);
4790a: 4c40 1004 remul %d0,%d4,%d1
uintptr_t alloc_begin,
uintptr_t page_size
)
{
return (Heap_Block *) (_Heap_Align_down( alloc_begin, page_size )
- HEAP_BLOCK_HEADER_SIZE);
4790e: 97c4 subal %d4,%a3
_Heap_Block_of_alloc_area( alloc_begin, heap->page_size );
uintptr_t const new_block_begin = (uintptr_t) new_block;
uintptr_t const new_block_size = block_end - new_block_begin;
block_end = new_block_begin;
block_size = block_end - block_begin;
47910: 200b movel %a3,%d0
47912: 9088 subl %a0,%d0
_HAssert( block_size >= heap->min_block_size );
_HAssert( new_block_size >= heap->min_block_size );
/* Statistics */
stats->free_size += block_size;
47914: d1aa 0030 addl %d0,%a2@(48)
uintptr_t block_end = block_begin + block_size;
Heap_Block *const new_block =
_Heap_Block_of_alloc_area( alloc_begin, heap->page_size );
uintptr_t const new_block_begin = (uintptr_t) new_block;
uintptr_t const new_block_size = block_end - new_block_begin;
47918: 99cb subal %a3,%a4
_HAssert( new_block_size >= heap->min_block_size );
/* Statistics */
stats->free_size += block_size;
if ( _Heap_Is_prev_used( block ) ) {
4791a: 0802 0000 btst #0,%d2
4791e: 6778 beqs 47998 <_Heap_Block_allocate+0xec>
RTEMS_INLINE_ROUTINE void _Heap_Free_list_insert_after(
Heap_Block *block_before,
Heap_Block *new_block
)
{
Heap_Block *next = block_before->next;
47920: 2a69 0008 moveal %a1@(8),%a5
block = prev_block;
block_begin = (uintptr_t) block;
block_size += prev_block_size;
}
block->size_and_flag = block_size | HEAP_PREV_BLOCK_USED;
47924: 7401 moveq #1,%d2
_Heap_Free_list_insert_after( free_list_anchor, block );
free_list_anchor = block;
/* Statistics */
++stats->free_blocks;
47926: 2208 movel %a0,%d1
new_block->next = next;
47928: 214d 0008 movel %a5,%a0@(8)
block = prev_block;
block_begin = (uintptr_t) block;
block_size += prev_block_size;
}
block->size_and_flag = block_size | HEAP_PREV_BLOCK_USED;
4792c: 8480 orl %d0,%d2
new_block->prev = block_before;
4792e: 2149 000c movel %a1,%a0@(12)
block_before->next = new_block;
47932: 2348 0008 movel %a0,%a1@(8)
next->prev = new_block;
47936: 2b48 000c movel %a0,%a5@(12)
_Heap_Free_list_insert_after( free_list_anchor, block );
free_list_anchor = block;
/* Statistics */
++stats->free_blocks;
4793a: 52aa 0038 addql #1,%a2@(56)
block = prev_block;
block_begin = (uintptr_t) block;
block_size += prev_block_size;
}
block->size_and_flag = block_size | HEAP_PREV_BLOCK_USED;
4793e: 2142 0004 movel %d2,%a0@(4)
new_block->prev_size = block_size;
47942: 2680 movel %d0,%a3@
new_block->size_and_flag = new_block_size;
47944: 274c 0004 movel %a4,%a3@(4)
_Heap_Block_split( heap, new_block, free_list_anchor, alloc_size );
47948: 2f03 movel %d3,%sp@-
4794a: 2f01 movel %d1,%sp@-
4794c: 2f0b movel %a3,%sp@-
4794e: 2f0a movel %a2,%sp@-
47950: 4eb9 0004 77b8 jsr 477b8 <_Heap_Block_split>
47956: 4fef 0010 lea %sp@(16),%sp
alloc_size
);
}
/* Statistics */
if ( stats->min_free_size > stats->free_size ) {
4795a: 202a 0030 movel %a2@(48),%d0
4795e: b0aa 0034 cmpl %a2@(52),%d0
47962: 6404 bccs 47968 <_Heap_Block_allocate+0xbc>
stats->min_free_size = stats->free_size;
47964: 2540 0034 movel %d0,%a2@(52)
}
return block;
}
47968: 200b movel %a3,%d0
4796a: 4cee 3c3c ffe0 moveml %fp@(-32),%d2-%d5/%a2-%a5
47970: 4e5e unlk %fp
47972: 4e75 rts
stats->free_size -= _Heap_Block_size( block );
} else {
free_list_anchor = _Heap_Free_list_head( heap );
}
if ( alloc_area_offset < heap->page_size ) {
47974: 202a 0010 movel %a2@(16),%d0
/* Statistics */
--stats->free_blocks;
++stats->used_blocks;
stats->free_size -= _Heap_Block_size( block );
} else {
free_list_anchor = _Heap_Free_list_head( heap );
47978: 224a moveal %a2,%a1
}
if ( alloc_area_offset < heap->page_size ) {
4797a: b085 cmpl %d5,%d0
4797c: 638c blss 4790a <_Heap_Block_allocate+0x5e>
Heap_Block *block,
Heap_Block *free_list_anchor,
uintptr_t alloc_size
)
{
_Heap_Block_split( heap, block, free_list_anchor, alloc_size );
4797e: 2645 moveal %d5,%a3
47980: 4873 3800 pea %a3@(00000000,%d3:l)
47984: 2648 moveal %a0,%a3
47986: 2f09 movel %a1,%sp@-
47988: 2f08 movel %a0,%sp@-
4798a: 2f0a movel %a2,%sp@-
4798c: 4eb9 0004 77b8 jsr 477b8 <_Heap_Block_split>
47992: 4fef 0010 lea %sp@(16),%sp
47996: 60c2 bras 4795a <_Heap_Block_allocate+0xae>
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Prev_block(
const Heap_Block *block
)
{
return (Heap_Block *) ((uintptr_t) block - block->prev_size);
47998: 91d0 subal %a0@,%a0
- 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;
4799a: 74fe moveq #-2,%d2
Heap_Block *const prev_block = _Heap_Prev_block( block );
uintptr_t const prev_block_size = _Heap_Block_size( prev_block );
block = prev_block;
block_begin = (uintptr_t) block;
block_size += prev_block_size;
4799c: 2209 movel %a1,%d1
4799e: c4a8 0004 andl %a0@(4),%d2
479a2: d082 addl %d2,%d0
}
block->size_and_flag = block_size | HEAP_PREV_BLOCK_USED;
479a4: 7401 moveq #1,%d2
479a6: 8480 orl %d0,%d2
new_block->prev_size = block_size;
479a8: 2680 movel %d0,%a3@
block = prev_block;
block_begin = (uintptr_t) block;
block_size += prev_block_size;
}
block->size_and_flag = block_size | HEAP_PREV_BLOCK_USED;
479aa: 2142 0004 movel %d2,%a0@(4)
new_block->prev_size = block_size;
new_block->size_and_flag = new_block_size;
479ae: 274c 0004 movel %a4,%a3@(4)
_Heap_Block_split( heap, new_block, free_list_anchor, alloc_size );
479b2: 2f03 movel %d3,%sp@-
479b4: 2f01 movel %d1,%sp@-
479b6: 2f0b movel %a3,%sp@-
479b8: 2f0a movel %a2,%sp@-
479ba: 4eb9 0004 77b8 jsr 477b8 <_Heap_Block_split>
479c0: 4fef 0010 lea %sp@(16),%sp
479c4: 6094 bras 4795a <_Heap_Block_allocate+0xae>
...
000477b8 <_Heap_Block_split>:
Heap_Control *heap,
Heap_Block *block,
Heap_Block *free_list_anchor,
uintptr_t alloc_size
)
{
477b8: 4e56 ffe4 linkw %fp,#-28
477bc: 226e 0008 moveal %fp@(8),%a1
477c0: 48d7 1c3c moveml %d2-%d5/%a2-%a4,%sp@
477c4: 246e 000c moveal %fp@(12),%a2
- 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;
477c8: 76fe moveq #-2,%d3
if ( stats->min_free_size > stats->free_size ) {
stats->min_free_size = stats->free_size;
}
return block;
}
477ca: 282a 0004 movel %a2@(4),%d4
)
{
Heap_Statistics *const stats = &heap->stats;
uintptr_t const page_size = heap->page_size;
uintptr_t const min_block_size = heap->min_block_size;
477ce: 2669 0014 moveal %a1@(20),%a3
uintptr_t const min_alloc_size = min_block_size - HEAP_BLOCK_HEADER_SIZE;
477d2: 220b movel %a3,%d1
477d4: 5181 subql #8,%d1
Heap_Control *heap,
Heap_Block *block,
Heap_Block *free_list_anchor,
uintptr_t alloc_size
)
{
477d6: 286e 0010 moveal %fp@(16),%a4
Heap_Statistics *const stats = &heap->stats;
uintptr_t const page_size = heap->page_size;
477da: 2429 0010 movel %a1@(16),%d2
return heap->stats.size;
}
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Max( uintptr_t a, uintptr_t b )
{
return a > b ? a : b;
477de: 202e 0014 movel %fp@(20),%d0
- 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;
477e2: c684 andl %d4,%d3
return heap->stats.size;
}
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Max( uintptr_t a, uintptr_t b )
{
return a > b ? a : b;
477e4: b280 cmpl %d0,%d1
477e6: 6302 blss 477ea <_Heap_Block_split+0x32>
477e8: 2001 movel %d1,%d0
uintptr_t const min_block_size = heap->min_block_size;
uintptr_t const min_alloc_size = min_block_size - HEAP_BLOCK_HEADER_SIZE;
uintptr_t const block_size = _Heap_Block_size( block );
uintptr_t const used_size =
477ea: 5080 addql #8,%d0
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_up(
uintptr_t value,
uintptr_t alignment
)
{
uintptr_t remainder = value % alignment;
477ec: 2a00 movel %d0,%d5
477ee: 4c42 5001 remul %d2,%d1,%d5
if ( remainder != 0 ) {
477f2: 4a81 tstl %d1
477f4: 6766 beqs 4785c <_Heap_Block_split+0xa4>
return value - remainder + alignment;
477f6: d480 addl %d0,%d2
477f8: 9481 subl %d1,%d2
_Heap_Max( alloc_size, min_alloc_size ) + HEAP_BLOCK_HEADER_SIZE;
uintptr_t const used_block_size = _Heap_Align_up( used_size, page_size );
uintptr_t const free_size = block_size + HEAP_BLOCK_SIZE_OFFSET - used_size;
477fa: 2203 movel %d3,%d1
477fc: 5881 addql #4,%d1
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
477fe: 41f2 3800 lea %a2@(00000000,%d3:l),%a0
47802: 9280 subl %d0,%d1
uintptr_t const free_size_limit = min_block_size + HEAP_BLOCK_SIZE_OFFSET;
47804: 588b addql #4,%a3
Heap_Block *next_block = _Heap_Block_at( block, block_size );
_HAssert( used_size <= block_size + HEAP_BLOCK_SIZE_OFFSET );
_HAssert( used_size + free_size == block_size + HEAP_BLOCK_SIZE_OFFSET );
if ( free_size >= free_size_limit ) {
47806: b7c1 cmpal %d1,%a3
47808: 6264 bhis 4786e <_Heap_Block_split+0xb6>
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;
4780a: 7001 moveq #1,%d0
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
4780c: 47f2 2800 lea %a2@(00000000,%d2:l),%a3
Heap_Block *const free_block = _Heap_Block_at( block, used_block_size );
uintptr_t free_block_size = block_size - used_block_size;
47810: 9682 subl %d2,%d3
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;
47812: 7201 moveq #1,%d1
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;
47814: c880 andl %d0,%d4
- 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;
47816: 70fe moveq #-2,%d0
uintptr_t size
)
{
uintptr_t flag = block->size_and_flag & HEAP_PREV_BLOCK_USED;
block->size_and_flag = size | flag;
47818: 8484 orl %d4,%d2
4781a: 2542 0004 movel %d2,%a2@(4)
_HAssert( used_block_size + free_block_size == block_size );
_Heap_Block_set_size( block, used_block_size );
/* Statistics */
stats->free_size += free_block_size;
4781e: d7a9 0030 addl %d3,%a1@(48)
- 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;
47822: c0a8 0004 andl %a0@(4),%d0
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;
47826: c2b0 0804 andl %a0@(00000004,%d0:l),%d1
if ( _Heap_Is_used( next_block ) ) {
4782a: 6750 beqs 4787c <_Heap_Block_split+0xc4> <== NEVER TAKEN
RTEMS_INLINE_ROUTINE void _Heap_Free_list_insert_after(
Heap_Block *block_before,
Heap_Block *new_block
)
{
Heap_Block *next = block_before->next;
4782c: 246c 0008 moveal %a4@(8),%a2
free_block_size += next_block_size;
next_block = _Heap_Block_at( free_block, free_block_size );
}
free_block->size_and_flag = free_block_size | HEAP_PREV_BLOCK_USED;
47830: 7001 moveq #1,%d0
new_block->next = next;
new_block->prev = block_before;
47832: 274c 000c movel %a4,%a3@(12)
47836: 8083 orl %d3,%d0
Heap_Block *new_block
)
{
Heap_Block *next = block_before->next;
new_block->next = next;
47838: 274a 0008 movel %a2,%a3@(8)
new_block->prev = block_before;
block_before->next = new_block;
next->prev = new_block;
4783c: 254b 000c movel %a3,%a2@(12)
{
Heap_Block *next = block_before->next;
new_block->next = next;
new_block->prev = block_before;
block_before->next = new_block;
47840: 294b 0008 movel %a3,%a4@(8)
if ( _Heap_Is_used( next_block ) ) {
_Heap_Free_list_insert_after( free_list_anchor, free_block );
/* Statistics */
++stats->free_blocks;
47844: 52a9 0038 addql #1,%a1@(56)
free_block_size += next_block_size;
next_block = _Heap_Block_at( free_block, free_block_size );
}
free_block->size_and_flag = free_block_size | HEAP_PREV_BLOCK_USED;
47848: 2740 0004 movel %d0,%a3@(4)
next_block->prev_size = free_block_size;
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
4784c: 70fe moveq #-2,%d0
4784e: c1a8 0004 andl %d0,%a0@(4)
next_block = _Heap_Block_at( free_block, free_block_size );
}
free_block->size_and_flag = free_block_size | HEAP_PREV_BLOCK_USED;
next_block->prev_size = free_block_size;
47852: 2083 movel %d3,%a0@
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
} else {
next_block->size_and_flag |= HEAP_PREV_BLOCK_USED;
}
}
47854: 4cd7 1c3c moveml %sp@,%d2-%d5/%a2-%a4
47858: 4e5e unlk %fp
4785a: 4e75 rts
uintptr_t const used_size =
_Heap_Max( alloc_size, min_alloc_size ) + HEAP_BLOCK_HEADER_SIZE;
uintptr_t const used_block_size = _Heap_Align_up( used_size, page_size );
uintptr_t const free_size = block_size + HEAP_BLOCK_SIZE_OFFSET - used_size;
4785c: 2203 movel %d3,%d1
4785e: 5881 addql #4,%d1
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
47860: 41f2 3800 lea %a2@(00000000,%d3:l),%a0
uintptr_t remainder = value % alignment;
if ( remainder != 0 ) {
return value - remainder + alignment;
} else {
return value;
47864: 2400 movel %d0,%d2
47866: 9280 subl %d0,%d1
uintptr_t const free_size_limit = min_block_size + HEAP_BLOCK_SIZE_OFFSET;
47868: 588b addql #4,%a3
Heap_Block *next_block = _Heap_Block_at( block, block_size );
_HAssert( used_size <= block_size + HEAP_BLOCK_SIZE_OFFSET );
_HAssert( used_size + free_size == block_size + HEAP_BLOCK_SIZE_OFFSET );
if ( free_size >= free_size_limit ) {
4786a: b7c1 cmpal %d1,%a3
4786c: 639c blss 4780a <_Heap_Block_split+0x52>
free_block->size_and_flag = free_block_size | HEAP_PREV_BLOCK_USED;
next_block->prev_size = free_block_size;
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
} else {
next_block->size_and_flag |= HEAP_PREV_BLOCK_USED;
4786e: 7001 moveq #1,%d0
}
}
47870: 4cd7 1c3c moveml %sp@,%d2-%d5/%a2-%a4
free_block->size_and_flag = free_block_size | HEAP_PREV_BLOCK_USED;
next_block->prev_size = free_block_size;
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
} else {
next_block->size_and_flag |= HEAP_PREV_BLOCK_USED;
47874: 81a8 0004 orl %d0,%a0@(4)
}
}
47878: 4e5e unlk %fp
4787a: 4e75 rts
} else {
uintptr_t const next_block_size = _Heap_Block_size( next_block );
_Heap_Free_list_replace( next_block, free_block );
free_block_size += next_block_size;
4787c: d680 addl %d0,%d3
next_block = _Heap_Block_at( free_block, free_block_size );
}
free_block->size_and_flag = free_block_size | HEAP_PREV_BLOCK_USED;
4787e: 7001 moveq #1,%d0
if ( stats->min_free_size > stats->free_size ) {
stats->min_free_size = stats->free_size;
}
return block;
}
47880: 2268 0008 moveal %a0@(8),%a1
47884: 2468 000c moveal %a0@(12),%a2
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
47888: 41f3 3800 lea %a3@(00000000,%d3:l),%a0
free_block_size += next_block_size;
next_block = _Heap_Block_at( free_block, free_block_size );
}
free_block->size_and_flag = free_block_size | HEAP_PREV_BLOCK_USED;
4788c: 8083 orl %d3,%d0
)
{
Heap_Block *next = old_block->next;
Heap_Block *prev = old_block->prev;
new_block->next = next;
4788e: 2749 0008 movel %a1,%a3@(8)
new_block->prev = prev;
47892: 274a 000c movel %a2,%a3@(12)
47896: 2740 0004 movel %d0,%a3@(4)
next_block->prev_size = free_block_size;
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
4789a: 70fe moveq #-2,%d0
next->prev = new_block;
prev->next = new_block;
4789c: 254b 0008 movel %a3,%a2@(8)
478a0: c1a8 0004 andl %d0,%a0@(4)
Heap_Block *prev = old_block->prev;
new_block->next = next;
new_block->prev = prev;
next->prev = new_block;
478a4: 234b 000c movel %a3,%a1@(12)
next_block = _Heap_Block_at( free_block, free_block_size );
}
free_block->size_and_flag = free_block_size | HEAP_PREV_BLOCK_USED;
next_block->prev_size = free_block_size;
478a8: 2083 movel %d3,%a0@
478aa: 60a8 bras 47854 <_Heap_Block_split+0x9c>
0004c140 <_Heap_Extend>:
Heap_Control *heap,
void *extend_area_begin_ptr,
uintptr_t extend_area_size,
uintptr_t *extended_size_ptr
)
{
4c140: 4e56 ffcc linkw %fp,#-52
4c144: 202e 0010 movel %fp@(16),%d0
4c148: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
4c14c: 246e 0008 moveal %fp@(8),%a2
4c150: 242e 000c movel %fp@(12),%d2
Heap_Block *extend_first_block = NULL;
Heap_Block *extend_last_block = NULL;
uintptr_t const page_size = heap->page_size;
uintptr_t const min_block_size = heap->min_block_size;
uintptr_t const extend_area_begin = (uintptr_t) extend_area_begin_ptr;
uintptr_t const extend_area_end = extend_area_begin + extend_area_size;
4c154: 2602 movel %d2,%d3
4c156: d680 addl %d0,%d3
uintptr_t extend_area_size,
uintptr_t *extended_size_ptr
)
{
Heap_Statistics *const stats = &heap->stats;
Heap_Block *const first_block = heap->first_block;
4c158: 2a2a 0020 movel %a2@(32),%d5
Heap_Block *merge_above_block = NULL;
Heap_Block *link_below_block = NULL;
Heap_Block *link_above_block = NULL;
Heap_Block *extend_first_block = NULL;
Heap_Block *extend_last_block = NULL;
uintptr_t const page_size = heap->page_size;
4c15c: 282a 0010 movel %a2@(16),%d4
uintptr_t const min_block_size = heap->min_block_size;
4c160: 222a 0014 movel %a2@(20),%d1
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;
4c164: 2c2a 0030 movel %a2@(48),%d6
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;
4c168: 42ae fffc clrl %fp@(-4)
Heap_Block *extend_last_block = NULL;
4c16c: 42ae fff8 clrl %fp@(-8)
uintptr_t const free_size = stats->free_size;
uintptr_t extend_first_block_size = 0;
uintptr_t extended_size = 0;
bool extend_area_ok = false;
if ( extend_area_end < extend_area_begin ) {
4c170: b682 cmpl %d2,%d3
4c172: 640c bccs 4c180 <_Heap_Extend+0x40>
if ( extended_size_ptr != NULL )
*extended_size_ptr = extended_size;
return true;
}
4c174: 4cee 3cfc ffcc moveml %fp@(-52),%d2-%d7/%a2-%a5
_Heap_Block_of_alloc_area( sub_area_end, page_size );
if (
sub_area_end > extend_area_begin && extend_area_end > sub_area_begin
) {
return false;
4c17a: 4200 clrb %d0
if ( extended_size_ptr != NULL )
*extended_size_ptr = extended_size;
return true;
}
4c17c: 4e5e unlk %fp
4c17e: 4e75 rts
if ( extend_area_end < extend_area_begin ) {
return false;
}
extend_area_ok = _Heap_Get_first_and_last_block(
4c180: 486e fff8 pea %fp@(-8)
4c184: 486e fffc pea %fp@(-4)
4c188: 2f01 movel %d1,%sp@-
4c18a: 2f04 movel %d4,%sp@-
4c18c: 2f00 movel %d0,%sp@-
4c18e: 2f02 movel %d2,%sp@-
4c190: 4eb9 0004 7924 jsr 47924 <_Heap_Get_first_and_last_block>
page_size,
min_block_size,
&extend_first_block,
&extend_last_block
);
if (!extend_area_ok ) {
4c196: 4fef 0018 lea %sp@(24),%sp
4c19a: 4a00 tstb %d0
4c19c: 67d6 beqs 4c174 <_Heap_Extend+0x34>
4c19e: 2045 moveal %d5,%a0
4c1a0: 9bcd subal %a5,%a5
4c1a2: 97cb subal %a3,%a3
4c1a4: 99cc subal %a4,%a4
4c1a6: 42ae fff4 clrl %fp@(-12)
return false;
}
do {
uintptr_t const sub_area_begin = (start_block != first_block) ?
(uintptr_t) start_block : heap->area_begin;
4c1aa: ba88 cmpl %a0,%d5
4c1ac: 6700 014a beqw 4c2f8 <_Heap_Extend+0x1b8>
4c1b0: 2208 movel %a0,%d1
uintptr_t const sub_area_end = start_block->prev_size;
4c1b2: 2010 movel %a0@,%d0
Heap_Block *const end_block =
_Heap_Block_of_alloc_area( sub_area_end, page_size );
if (
4c1b4: b082 cmpl %d2,%d0
4c1b6: 6304 blss 4c1bc <_Heap_Extend+0x7c>
sub_area_end > extend_area_begin && extend_area_end > sub_area_begin
4c1b8: b681 cmpl %d1,%d3
4c1ba: 62b8 bhis 4c174 <_Heap_Extend+0x34> <== NEVER TAKEN
) {
return false;
}
if ( extend_area_end == sub_area_begin ) {
4c1bc: b681 cmpl %d1,%d3
4c1be: 6700 0132 beqw 4c2f2 <_Heap_Extend+0x1b2>
merge_below_block = start_block;
} else if ( extend_area_end < sub_area_end ) {
4c1c2: b083 cmpl %d3,%d0
4c1c4: 6304 blss 4c1ca <_Heap_Extend+0x8a>
4c1c6: 2d48 fff4 movel %a0,%fp@(-12)
4c1ca: 2e00 movel %d0,%d7
4c1cc: 2240 moveal %d0,%a1
4c1ce: 5189 subql #8,%a1
4c1d0: 4c44 7001 remul %d4,%d1,%d7
uintptr_t alloc_begin,
uintptr_t page_size
)
{
return (Heap_Block *) (_Heap_Align_down( alloc_begin, page_size )
- HEAP_BLOCK_HEADER_SIZE);
4c1d4: 93c1 subal %d1,%a1
link_below_block = start_block;
}
if ( sub_area_end == extend_area_begin ) {
4c1d6: b480 cmpl %d0,%d2
4c1d8: 6700 0100 beqw 4c2da <_Heap_Extend+0x19a>
start_block->prev_size = extend_area_end;
merge_above_block = end_block;
} else if ( sub_area_end < extend_area_begin ) {
4c1dc: b082 cmpl %d2,%d0
4c1de: 6402 bccs 4c1e2 <_Heap_Extend+0xa2>
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 )
4c1e0: 2a49 moveal %a1,%a5
- 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;
4c1e2: 70fe moveq #-2,%d0
4c1e4: c0a9 0004 andl %a1@(4),%d0
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
4c1e8: 41f1 0800 lea %a1@(00000000,%d0:l),%a0
link_above_block = end_block;
}
start_block = _Heap_Block_at( end_block, _Heap_Block_size( end_block ) );
} while ( start_block != first_block );
4c1ec: b1c5 cmpal %d5,%a0
4c1ee: 66ba bnes 4c1aa <_Heap_Extend+0x6a>
if ( extend_area_begin < heap->area_begin ) {
4c1f0: b4aa 0018 cmpl %a2@(24),%d2
4c1f4: 6500 010a bcsw 4c300 <_Heap_Extend+0x1c0>
heap->area_begin = extend_area_begin;
} else if ( heap->area_end < extend_area_end ) {
4c1f8: b6aa 001c cmpl %a2@(28),%d3
4c1fc: 6304 blss 4c202 <_Heap_Extend+0xc2>
heap->area_end = extend_area_end;
4c1fe: 2543 001c movel %d3,%a2@(28)
}
extend_first_block_size =
(uintptr_t) extend_last_block - (uintptr_t) extend_first_block;
4c202: 226e fff8 moveal %fp@(-8),%a1
heap->area_begin = extend_area_begin;
} else if ( heap->area_end < extend_area_end ) {
heap->area_end = extend_area_end;
}
extend_first_block_size =
4c206: 2009 movel %a1,%d0
(uintptr_t) extend_last_block - (uintptr_t) extend_first_block;
extend_first_block->prev_size = extend_area_end;
extend_first_block->size_and_flag =
extend_first_block_size | HEAP_PREV_BLOCK_USED;
4c208: 7201 moveq #1,%d1
} else if ( heap->area_end < extend_area_end ) {
heap->area_end = extend_area_end;
}
extend_first_block_size =
(uintptr_t) extend_last_block - (uintptr_t) extend_first_block;
4c20a: 206e fffc moveal %fp@(-4),%a0
heap->area_begin = extend_area_begin;
} else if ( heap->area_end < extend_area_end ) {
heap->area_end = extend_area_end;
}
extend_first_block_size =
4c20e: 9088 subl %a0,%d0
(uintptr_t) extend_last_block - (uintptr_t) extend_first_block;
extend_first_block->prev_size = extend_area_end;
extend_first_block->size_and_flag =
extend_first_block_size | HEAP_PREV_BLOCK_USED;
4c210: 8280 orl %d0,%d1
}
extend_first_block_size =
(uintptr_t) extend_last_block - (uintptr_t) extend_first_block;
extend_first_block->prev_size = extend_area_end;
4c212: 2083 movel %d3,%a0@
extend_first_block->size_and_flag =
extend_first_block_size | HEAP_PREV_BLOCK_USED;
4c214: 2141 0004 movel %d1,%a0@(4)
extend_last_block->prev_size = extend_first_block_size;
4c218: 2280 movel %d0,%a1@
extend_last_block->size_and_flag = 0;
4c21a: 42a9 0004 clrl %a1@(4)
if ( (uintptr_t) extend_first_block < (uintptr_t) heap->first_block ) {
4c21e: b1ea 0020 cmpal %a2@(32),%a0
4c222: 6400 0104 bccw 4c328 <_Heap_Extend+0x1e8>
heap->first_block = extend_first_block;
4c226: 2548 0020 movel %a0,%a2@(32)
} else if ( (uintptr_t) extend_last_block > (uintptr_t) heap->last_block ) {
heap->last_block = extend_last_block;
}
if ( merge_below_block != NULL ) {
4c22a: 4a8c tstl %a4
4c22c: 6700 0148 beqw 4c376 <_Heap_Extend+0x236>
Heap_Control *heap,
uintptr_t extend_area_begin,
Heap_Block *first_block
)
{
uintptr_t const page_size = heap->page_size;
4c230: 202a 0010 movel %a2@(16),%d0
uintptr_t const new_first_block_alloc_begin =
_Heap_Align_up( extend_area_begin + HEAP_BLOCK_HEADER_SIZE, page_size );
4c234: 5082 addql #8,%d2
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_up(
uintptr_t value,
uintptr_t alignment
)
{
uintptr_t remainder = value % alignment;
4c236: 2802 movel %d2,%d4
4c238: 4c40 4001 remul %d0,%d1,%d4
if ( remainder != 0 ) {
4c23c: 4a81 tstl %d1
4c23e: 6704 beqs 4c244 <_Heap_Extend+0x104> <== ALWAYS TAKEN
return value - remainder + alignment;
4c240: d480 addl %d0,%d2 <== NOT EXECUTED
4c242: 9481 subl %d1,%d2 <== NOT EXECUTED
uintptr_t const new_first_block_begin =
4c244: 2042 moveal %d2,%a0
4c246: 5188 subql #8,%a0
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 =
4c248: 200c movel %a4,%d0
4c24a: 9088 subl %a0,%d0
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;
4c24c: 7201 moveq #1,%d1
4c24e: 8280 orl %d0,%d1
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;
4c250: 2094 movel %a4@,%a0@
new_first_block->size_and_flag = new_first_block_size | HEAP_PREV_BLOCK_USED;
4c252: 2141 0004 movel %d1,%a0@(4)
_Heap_Free_block( heap, new_first_block );
4c256: 2f08 movel %a0,%sp@-
4c258: 2f0a movel %a2,%sp@-
4c25a: 4eba fec8 jsr %pc@(4c124 <_Heap_Free_block>)
4c25e: 508f addql #8,%sp
link_below_block,
extend_last_block
);
}
if ( merge_above_block != NULL ) {
4c260: 4a8b tstl %a3
4c262: 6700 00d4 beqw 4c338 <_Heap_Extend+0x1f8>
)
{
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,
4c266: 5183 subql #8,%d3
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(
4c268: 968b subl %a3,%d3
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(
uintptr_t value,
uintptr_t alignment
)
{
return value - (value % alignment);
4c26a: 2203 movel %d3,%d1
4c26c: 4c6a 1000 0010 remul %a2@(16),%d0,%d1
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)
| HEAP_PREV_BLOCK_USED;
4c272: 7201 moveq #1,%d1
4c274: 9680 subl %d0,%d3
);
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)
4c276: 202b 0004 movel %a3@(4),%d0
4c27a: 9083 subl %d3,%d0
| HEAP_PREV_BLOCK_USED;
4c27c: 8280 orl %d0,%d1
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;
4c27e: 7001 moveq #1,%d0
4c280: 2781 3804 movel %d1,%a3@(00000004,%d3:l)
4c284: c0ab 0004 andl %a3@(4),%d0
block->size_and_flag = size | flag;
4c288: 8680 orl %d0,%d3
4c28a: 2743 0004 movel %d3,%a3@(4)
_Heap_Block_set_size( last_block, last_block_new_size );
_Heap_Free_block( heap, last_block );
4c28e: 2f0b movel %a3,%sp@-
4c290: 2f0a movel %a2,%sp@-
4c292: 4eba fe90 jsr %pc@(4c124 <_Heap_Free_block>)
4c296: 508f addql #8,%sp
extend_first_block,
extend_last_block
);
}
if ( merge_below_block == NULL && merge_above_block == NULL ) {
4c298: 4a8c tstl %a4
4c29a: 6700 00c4 beqw 4c360 <_Heap_Extend+0x220>
_Heap_Free_block( heap, extend_first_block );
}
_Heap_Set_last_block_size( heap );
extended_size = stats->free_size - free_size;
4c29e: 202a 0030 movel %a2@(48),%d0
4c2a2: 9086 subl %d6,%d0
4c2a4: 2c00 movel %d0,%d6
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;
4c2a6: 7001 moveq #1,%d0
if ( extended_size_ptr != NULL )
*extended_size_ptr = extended_size;
return true;
}
4c2a8: 206a 0024 moveal %a2@(36),%a0
* 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(
4c2ac: 222a 0020 movel %a2@(32),%d1
4c2b0: 9288 subl %a0,%d1
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;
4c2b2: c0a8 0004 andl %a0@(4),%d0
block->size_and_flag = size | flag;
4c2b6: 8280 orl %d0,%d1
4c2b8: 2141 0004 movel %d1,%a0@(4)
_Heap_Set_last_block_size( heap );
extended_size = stats->free_size - free_size;
/* Statistics */
stats->size += extended_size;
4c2bc: ddaa 002c addl %d6,%a2@(44)
if ( extended_size_ptr != NULL )
4c2c0: 4aae 0014 tstl %fp@(20)
4c2c4: 6700 00ca beqw 4c390 <_Heap_Extend+0x250>
*extended_size_ptr = extended_size;
4c2c8: 206e 0014 moveal %fp@(20),%a0
4c2cc: 2086 movel %d6,%a0@
return true;
}
4c2ce: 4cee 3cfc ffcc moveml %fp@(-52),%d2-%d7/%a2-%a5
stats->size += extended_size;
if ( extended_size_ptr != NULL )
*extended_size_ptr = extended_size;
return true;
4c2d4: 7001 moveq #1,%d0
}
4c2d6: 4e5e unlk %fp
4c2d8: 4e75 rts
- 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;
4c2da: 70fe moveq #-2,%d0
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 )
4c2dc: 2649 moveal %a1,%a3
- 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;
4c2de: c0a9 0004 andl %a1@(4),%d0
} else if ( extend_area_end < sub_area_end ) {
link_below_block = start_block;
}
if ( sub_area_end == extend_area_begin ) {
start_block->prev_size = extend_area_end;
4c2e2: 2083 movel %d3,%a0@
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
4c2e4: 41f1 0800 lea %a1@(00000000,%d0:l),%a0
} else if ( sub_area_end < extend_area_begin ) {
link_above_block = end_block;
}
start_block = _Heap_Block_at( end_block, _Heap_Block_size( end_block ) );
} while ( start_block != first_block );
4c2e8: b1c5 cmpal %d5,%a0
4c2ea: 6600 febe bnew 4c1aa <_Heap_Extend+0x6a>
4c2ee: 6000 ff00 braw 4c1f0 <_Heap_Extend+0xb0>
sub_area_end > extend_area_begin && extend_area_end > sub_area_begin
) {
return false;
}
if ( extend_area_end == sub_area_begin ) {
4c2f2: 2848 moveal %a0,%a4
4c2f4: 6000 fed4 braw 4c1ca <_Heap_Extend+0x8a>
return false;
}
do {
uintptr_t const sub_area_begin = (start_block != first_block) ?
(uintptr_t) start_block : heap->area_begin;
4c2f8: 222a 0018 movel %a2@(24),%d1
4c2fc: 6000 feb4 braw 4c1b2 <_Heap_Extend+0x72>
} else if ( heap->area_end < extend_area_end ) {
heap->area_end = extend_area_end;
}
extend_first_block_size =
(uintptr_t) extend_last_block - (uintptr_t) extend_first_block;
4c300: 226e fff8 moveal %fp@(-8),%a1
heap->area_begin = extend_area_begin;
} else if ( heap->area_end < extend_area_end ) {
heap->area_end = extend_area_end;
}
extend_first_block_size =
4c304: 2009 movel %a1,%d0
(uintptr_t) extend_last_block - (uintptr_t) extend_first_block;
extend_first_block->prev_size = extend_area_end;
extend_first_block->size_and_flag =
extend_first_block_size | HEAP_PREV_BLOCK_USED;
4c306: 7201 moveq #1,%d1
} else if ( heap->area_end < extend_area_end ) {
heap->area_end = extend_area_end;
}
extend_first_block_size =
(uintptr_t) extend_last_block - (uintptr_t) extend_first_block;
4c308: 206e fffc moveal %fp@(-4),%a0
heap->area_begin = extend_area_begin;
} else if ( heap->area_end < extend_area_end ) {
heap->area_end = extend_area_end;
}
extend_first_block_size =
4c30c: 9088 subl %a0,%d0
start_block = _Heap_Block_at( end_block, _Heap_Block_size( end_block ) );
} while ( start_block != first_block );
if ( extend_area_begin < heap->area_begin ) {
heap->area_begin = extend_area_begin;
4c30e: 2542 0018 movel %d2,%a2@(24)
extend_first_block_size =
(uintptr_t) extend_last_block - (uintptr_t) extend_first_block;
extend_first_block->prev_size = extend_area_end;
extend_first_block->size_and_flag =
extend_first_block_size | HEAP_PREV_BLOCK_USED;
4c312: 8280 orl %d0,%d1
}
extend_first_block_size =
(uintptr_t) extend_last_block - (uintptr_t) extend_first_block;
extend_first_block->prev_size = extend_area_end;
4c314: 2083 movel %d3,%a0@
extend_first_block->size_and_flag =
extend_first_block_size | HEAP_PREV_BLOCK_USED;
4c316: 2141 0004 movel %d1,%a0@(4)
extend_last_block->prev_size = extend_first_block_size;
4c31a: 2280 movel %d0,%a1@
extend_last_block->size_and_flag = 0;
4c31c: 42a9 0004 clrl %a1@(4)
if ( (uintptr_t) extend_first_block < (uintptr_t) heap->first_block ) {
4c320: b1ea 0020 cmpal %a2@(32),%a0
4c324: 6500 ff00 bcsw 4c226 <_Heap_Extend+0xe6>
heap->first_block = extend_first_block;
} else if ( (uintptr_t) extend_last_block > (uintptr_t) heap->last_block ) {
4c328: b3ea 0024 cmpal %a2@(36),%a1
4c32c: 6300 fefc blsw 4c22a <_Heap_Extend+0xea>
heap->last_block = extend_last_block;
4c330: 2549 0024 movel %a1,%a2@(36)
4c334: 6000 fef4 braw 4c22a <_Heap_Extend+0xea>
);
}
if ( merge_above_block != NULL ) {
_Heap_Merge_above( heap, merge_above_block, extend_area_end );
} else if ( link_above_block != NULL ) {
4c338: 4a8d tstl %a5
4c33a: 6700 ff5c beqw 4c298 <_Heap_Extend+0x158>
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;
4c33e: 7001 moveq #1,%d0
)
{
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 );
4c340: 222e fffc movel %fp@(-4),%d1
4c344: 928d subl %a5,%d1
4c346: c0ad 0004 andl %a5@(4),%d0
}
if ( merge_above_block != NULL ) {
_Heap_Merge_above( heap, merge_above_block, extend_area_end );
} else if ( link_above_block != NULL ) {
_Heap_Link_above(
4c34a: 206e fff8 moveal %fp@(-8),%a0
block->size_and_flag = size | flag;
4c34e: 8280 orl %d0,%d1
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 );
last_block->size_and_flag |= HEAP_PREV_BLOCK_USED;
4c350: 7001 moveq #1,%d0
4c352: 2b41 0004 movel %d1,%a5@(4)
4c356: 81a8 0004 orl %d0,%a0@(4)
extend_first_block,
extend_last_block
);
}
if ( merge_below_block == NULL && merge_above_block == NULL ) {
4c35a: 4a8c tstl %a4
4c35c: 6600 ff40 bnew 4c29e <_Heap_Extend+0x15e>
4c360: 4a8b tstl %a3
4c362: 6600 ff3a bnew 4c29e <_Heap_Extend+0x15e>
_Heap_Free_block( heap, extend_first_block );
4c366: 2f2e fffc movel %fp@(-4),%sp@-
4c36a: 2f0a movel %a2,%sp@-
4c36c: 4eba fdb6 jsr %pc@(4c124 <_Heap_Free_block>)
4c370: 508f addql #8,%sp
4c372: 6000 ff2a braw 4c29e <_Heap_Extend+0x15e>
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 ) {
4c376: 4aae fff4 tstl %fp@(-12)
4c37a: 6700 fee4 beqw 4c260 <_Heap_Extend+0x120>
{
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;
4c37e: 202e fff4 movel %fp@(-12),%d0
4c382: 7201 moveq #1,%d1
4c384: 9089 subl %a1,%d0
4c386: 8280 orl %d0,%d1
4c388: 2341 0004 movel %d1,%a1@(4)
4c38c: 6000 fed2 braw 4c260 <_Heap_Extend+0x120>
if ( extended_size_ptr != NULL )
*extended_size_ptr = extended_size;
return true;
}
4c390: 4cee 3cfc ffcc moveml %fp@(-52),%d2-%d7/%a2-%a5 <== NOT EXECUTED
stats->size += extended_size;
if ( extended_size_ptr != NULL )
*extended_size_ptr = extended_size;
return true;
4c396: 7001 moveq #1,%d0 <== NOT EXECUTED
}
4c398: 4e5e unlk %fp <== NOT EXECUTED
0004be34 <_Heap_Free>:
#include <rtems/system.h>
#include <rtems/score/sysstate.h>
#include <rtems/score/heap.h>
bool _Heap_Free( Heap_Control *heap, void *alloc_begin_ptr )
{
4be34: 4e56 ffe8 linkw %fp,#-24
4be38: 202e 000c movel %fp@(12),%d0
4be3c: 2040 moveal %d0,%a0
4be3e: 5188 subql #8,%a0
4be40: 226e 0008 moveal %fp@(8),%a1
4be44: 4c69 0001 0010 remul %a1@(16),%d1,%d0
4be4a: 48d7 0c3c moveml %d2-%d5/%a2-%a3,%sp@
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
4be4e: 2029 0020 movel %a1@(32),%d0
uintptr_t alloc_begin,
uintptr_t page_size
)
{
return (Heap_Block *) (_Heap_Align_down( alloc_begin, page_size )
- HEAP_BLOCK_HEADER_SIZE);
4be52: 91c1 subal %d1,%a0
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;
4be54: b088 cmpl %a0,%d0
4be56: 6200 0098 bhiw 4bef0 <_Heap_Free+0xbc>
4be5a: 2229 0024 movel %a1@(36),%d1
4be5e: b288 cmpl %a0,%d1
4be60: 6500 008e bcsw 4bef0 <_Heap_Free+0xbc>
--stats->used_blocks;
++stats->frees;
stats->free_size += block_size;
return( true );
}
4be64: 2628 0004 movel %a0@(4),%d3
- 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;
4be68: 74fe moveq #-2,%d2
4be6a: c483 andl %d3,%d2
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
4be6c: 45f0 2800 lea %a0@(00000000,%d2:l),%a2
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;
4be70: b5c0 cmpal %d0,%a2
4be72: 657c bcss 4bef0 <_Heap_Free+0xbc> <== NEVER TAKEN
4be74: b5c1 cmpal %d1,%a2
4be76: 6278 bhis 4bef0 <_Heap_Free+0xbc> <== NEVER TAKEN
4be78: 282a 0004 movel %a2@(4),%d4
if ( !_Heap_Is_block_in_heap( heap, next_block ) ) {
_HAssert( false );
return false;
}
if ( !_Heap_Is_prev_used( next_block ) ) {
4be7c: 0804 0000 btst #0,%d4
4be80: 676e beqs 4bef0 <_Heap_Free+0xbc> <== 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;
4be82: 7afe moveq #-2,%d5
4be84: c885 andl %d5,%d4
return false;
}
next_block_size = _Heap_Block_size( next_block );
next_is_free = next_block != heap->last_block
&& !_Heap_Is_prev_used( _Heap_Block_at( next_block, next_block_size ));
4be86: b5c1 cmpal %d1,%a2
4be88: 6700 00f6 beqw 4bf80 <_Heap_Free+0x14c>
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;
4be8c: 7a01 moveq #1,%d5
4be8e: cab2 4804 andl %a2@(00000004,%d4:l),%d5
#include <rtems/system.h>
#include <rtems/score/sysstate.h>
#include <rtems/score/heap.h>
bool _Heap_Free( Heap_Control *heap, void *alloc_begin_ptr )
4be92: 57c5 seq %d5
4be94: 4485 negl %d5
next_block_size = _Heap_Block_size( next_block );
next_is_free = next_block != heap->last_block
&& !_Heap_Is_prev_used( _Heap_Block_at( next_block, next_block_size ));
if ( !_Heap_Is_prev_used( block ) ) {
4be96: 0803 0000 btst #0,%d3
4be9a: 665e bnes 4befa <_Heap_Free+0xc6>
uintptr_t const prev_size = block->prev_size;
4be9c: 2610 movel %a0@,%d3
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
4be9e: 91c3 subal %d3,%a0
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;
4bea0: b1c0 cmpal %d0,%a0
4bea2: 654c bcss 4bef0 <_Heap_Free+0xbc> <== NEVER TAKEN
4bea4: b1c1 cmpal %d1,%a0
4bea6: 6248 bhis 4bef0 <_Heap_Free+0xbc> <== NEVER TAKEN
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;
4bea8: 7001 moveq #1,%d0
4beaa: c0a8 0004 andl %a0@(4),%d0
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) ) {
4beae: 6740 beqs 4bef0 <_Heap_Free+0xbc> <== NEVER TAKEN
_HAssert( false );
return( false );
}
if ( next_is_free ) { /* coalesce both */
4beb0: 4a05 tstb %d5
4beb2: 6700 00d2 beqw 4bf86 <_Heap_Free+0x152>
--stats->used_blocks;
++stats->frees;
stats->free_size += block_size;
return( true );
}
4beb6: 266a 0008 moveal %a2@(8),%a3
_HAssert( false );
return( false );
}
if ( next_is_free ) { /* coalesce both */
uintptr_t const size = block_size + prev_size + next_block_size;
4beba: d882 addl %d2,%d4
4bebc: d684 addl %d4,%d3
_Heap_Free_list_remove( next_block );
stats->free_blocks -= 1;
prev_block->size_and_flag = size | HEAP_PREV_BLOCK_USED;
4bebe: 7001 moveq #1,%d0
--stats->used_blocks;
++stats->frees;
stats->free_size += block_size;
return( true );
}
4bec0: 246a 000c moveal %a2@(12),%a2
RTEMS_INLINE_ROUTINE void _Heap_Free_list_remove( Heap_Block *block )
{
Heap_Block *next = block->next;
Heap_Block *prev = block->prev;
prev->next = next;
4bec4: 254b 0008 movel %a3,%a2@(8)
if ( next_is_free ) { /* coalesce both */
uintptr_t const size = block_size + prev_size + next_block_size;
_Heap_Free_list_remove( next_block );
stats->free_blocks -= 1;
prev_block->size_and_flag = size | HEAP_PREV_BLOCK_USED;
4bec8: 8083 orl %d3,%d0
next->prev = prev;
4beca: 274a 000c movel %a2,%a3@(12)
}
if ( next_is_free ) { /* coalesce both */
uintptr_t const size = block_size + prev_size + next_block_size;
_Heap_Free_list_remove( next_block );
stats->free_blocks -= 1;
4bece: 53a9 0038 subql #1,%a1@(56)
prev_block->size_and_flag = size | HEAP_PREV_BLOCK_USED;
next_block = _Heap_Block_at( prev_block, size );
_HAssert(!_Heap_Is_prev_used( next_block));
next_block->prev_size = size;
4bed2: 2183 3800 movel %d3,%a0@(00000000,%d3:l)
if ( next_is_free ) { /* coalesce both */
uintptr_t const size = block_size + prev_size + next_block_size;
_Heap_Free_list_remove( next_block );
stats->free_blocks -= 1;
prev_block->size_and_flag = size | HEAP_PREV_BLOCK_USED;
4bed6: 2140 0004 movel %d0,%a0@(4)
stats->max_free_blocks = stats->free_blocks;
}
}
/* Statistics */
--stats->used_blocks;
4beda: 53a9 0040 subql #1,%a1@(64)
++stats->frees;
4bede: 52a9 0050 addql #1,%a1@(80)
stats->free_size += block_size;
4bee2: d5a9 0030 addl %d2,%a1@(48)
return( true );
4bee6: 7001 moveq #1,%d0
}
4bee8: 4cd7 0c3c moveml %sp@,%d2-%d5/%a2-%a3
4beec: 4e5e unlk %fp
4beee: 4e75 rts
4bef0: 4cd7 0c3c moveml %sp@,%d2-%d5/%a2-%a3
/* As we always coalesce free blocks, the block that preceedes prev_block
must have been used. */
if ( !_Heap_Is_prev_used ( prev_block) ) {
_HAssert( false );
return( false );
4bef4: 4200 clrb %d0
--stats->used_blocks;
++stats->frees;
stats->free_size += block_size;
return( true );
}
4bef6: 4e5e unlk %fp
4bef8: 4e75 rts
uintptr_t const size = block_size + prev_size;
prev_block->size_and_flag = size | HEAP_PREV_BLOCK_USED;
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
next_block->prev_size = size;
}
} else if ( next_is_free ) { /* coalesce next */
4befa: 4a05 tstb %d5
4befc: 6736 beqs 4bf34 <_Heap_Free+0x100>
--stats->used_blocks;
++stats->frees;
stats->free_size += block_size;
return( true );
}
4befe: 266a 0008 moveal %a2@(8),%a3
prev_block->size_and_flag = size | HEAP_PREV_BLOCK_USED;
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
next_block->prev_size = size;
}
} else if ( next_is_free ) { /* coalesce next */
uintptr_t const size = block_size + next_block_size;
4bf02: d882 addl %d2,%d4
_Heap_Free_list_replace( next_block, block );
block->size_and_flag = size | HEAP_PREV_BLOCK_USED;
4bf04: 7001 moveq #1,%d0
--stats->used_blocks;
++stats->frees;
stats->free_size += block_size;
return( true );
}
4bf06: 246a 000c moveal %a2@(12),%a2
)
{
Heap_Block *next = old_block->next;
Heap_Block *prev = old_block->prev;
new_block->next = next;
4bf0a: 214b 0008 movel %a3,%a0@(8)
next_block->prev_size = size;
}
} else if ( next_is_free ) { /* coalesce next */
uintptr_t const size = block_size + next_block_size;
_Heap_Free_list_replace( next_block, block );
block->size_and_flag = size | HEAP_PREV_BLOCK_USED;
4bf0e: 8084 orl %d4,%d0
new_block->prev = prev;
4bf10: 214a 000c movel %a2,%a0@(12)
next_block = _Heap_Block_at( block, size );
next_block->prev_size = size;
4bf14: 2184 4800 movel %d4,%a0@(00000000,%d4:l)
next_block->prev_size = size;
}
} else if ( next_is_free ) { /* coalesce next */
uintptr_t const size = block_size + next_block_size;
_Heap_Free_list_replace( next_block, block );
block->size_and_flag = size | HEAP_PREV_BLOCK_USED;
4bf18: 2140 0004 movel %d0,%a0@(4)
/* Statistics */
--stats->used_blocks;
++stats->frees;
stats->free_size += block_size;
return( true );
4bf1c: 7001 moveq #1,%d0
next->prev = new_block;
prev->next = new_block;
4bf1e: 2548 0008 movel %a0,%a2@(8)
Heap_Block *prev = old_block->prev;
new_block->next = next;
new_block->prev = prev;
next->prev = new_block;
4bf22: 2748 000c movel %a0,%a3@(12)
stats->max_free_blocks = stats->free_blocks;
}
}
/* Statistics */
--stats->used_blocks;
4bf26: 53a9 0040 subql #1,%a1@(64)
++stats->frees;
4bf2a: 52a9 0050 addql #1,%a1@(80)
stats->free_size += block_size;
4bf2e: d5a9 0030 addl %d2,%a1@(48)
4bf32: 60b4 bras 4bee8 <_Heap_Free+0xb4>
block->size_and_flag = block_size | HEAP_PREV_BLOCK_USED;
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
next_block->prev_size = block_size;
/* Statistics */
++stats->free_blocks;
4bf34: 2029 0038 movel %a1@(56),%d0
next_block->prev_size = size;
} 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;
4bf38: 7201 moveq #1,%d1
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
4bf3a: 7afe moveq #-2,%d5
next_block->prev_size = block_size;
/* Statistics */
++stats->free_blocks;
4bf3c: 5280 addql #1,%d0
RTEMS_INLINE_ROUTINE void _Heap_Free_list_insert_after(
Heap_Block *block_before,
Heap_Block *new_block
)
{
Heap_Block *next = block_before->next;
4bf3e: 2669 0008 moveal %a1@(8),%a3
new_block->next = next;
new_block->prev = block_before;
4bf42: 2149 000c movel %a1,%a0@(12)
next_block->prev_size = size;
} 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;
4bf46: 8282 orl %d2,%d1
Heap_Block *new_block
)
{
Heap_Block *next = block_before->next;
new_block->next = next;
4bf48: 214b 0008 movel %a3,%a0@(8)
4bf4c: 2141 0004 movel %d1,%a0@(4)
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
4bf50: cbaa 0004 andl %d5,%a2@(4)
new_block->prev = block_before;
block_before->next = new_block;
next->prev = new_block;
4bf54: 2748 000c movel %a0,%a3@(12)
next_block->prev_size = block_size;
4bf58: 2482 movel %d2,%a2@
{
Heap_Block *next = block_before->next;
new_block->next = next;
new_block->prev = block_before;
block_before->next = new_block;
4bf5a: 2348 0008 movel %a0,%a1@(8)
/* Statistics */
++stats->free_blocks;
4bf5e: 2340 0038 movel %d0,%a1@(56)
if ( stats->max_free_blocks < stats->free_blocks ) {
4bf62: b0a9 003c cmpl %a1@(60),%d0
4bf66: 6300 ff72 blsw 4beda <_Heap_Free+0xa6>
stats->max_free_blocks = stats->free_blocks;
}
}
/* Statistics */
--stats->used_blocks;
4bf6a: 53a9 0040 subql #1,%a1@(64)
++stats->frees;
4bf6e: 52a9 0050 addql #1,%a1@(80)
stats->free_size += block_size;
4bf72: d5a9 0030 addl %d2,%a1@(48)
next_block->prev_size = block_size;
/* Statistics */
++stats->free_blocks;
if ( stats->max_free_blocks < stats->free_blocks ) {
stats->max_free_blocks = stats->free_blocks;
4bf76: 2340 003c movel %d0,%a1@(60)
/* Statistics */
--stats->used_blocks;
++stats->frees;
stats->free_size += block_size;
return( true );
4bf7a: 7001 moveq #1,%d0
4bf7c: 6000 ff6a braw 4bee8 <_Heap_Free+0xb4>
return false;
}
next_block_size = _Heap_Block_size( next_block );
next_is_free = next_block != heap->last_block
&& !_Heap_Is_prev_used( _Heap_Block_at( next_block, next_block_size ));
4bf80: 4205 clrb %d5
4bf82: 6000 ff12 braw 4be96 <_Heap_Free+0x62>
prev_block->size_and_flag = size | HEAP_PREV_BLOCK_USED;
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;
4bf86: d682 addl %d2,%d3
prev_block->size_and_flag = size | HEAP_PREV_BLOCK_USED;
4bf88: 7201 moveq #1,%d1
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
4bf8a: 7afe moveq #-2,%d5
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;
4bf8c: 8283 orl %d3,%d1
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
next_block->prev_size = size;
4bf8e: 2483 movel %d3,%a2@
/* Statistics */
--stats->used_blocks;
++stats->frees;
stats->free_size += block_size;
return( true );
4bf90: 7001 moveq #1,%d0
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;
4bf92: 2141 0004 movel %d1,%a0@(4)
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
4bf96: cbaa 0004 andl %d5,%a2@(4)
stats->max_free_blocks = stats->free_blocks;
}
}
/* Statistics */
--stats->used_blocks;
4bf9a: 53a9 0040 subql #1,%a1@(64)
++stats->frees;
4bf9e: 52a9 0050 addql #1,%a1@(80)
stats->free_size += block_size;
4bfa2: d5a9 0030 addl %d2,%a1@(48)
4bfa6: 6000 ff40 braw 4bee8 <_Heap_Free+0xb4>
...
00050f88 <_Heap_Get_information>:
void _Heap_Get_information(
Heap_Control *the_heap,
Heap_Information_block *the_info
)
{
50f88: 4e56 fff0 linkw %fp,#-16
50f8c: 226e 0008 moveal %fp@(8),%a1
50f90: 48d7 041c moveml %d2-%d4/%a2,%sp@
50f94: 282e 000c movel %fp@(12),%d4
Heap_Block *the_block = the_heap->first_block;
Heap_Block *const end = the_heap->last_block;
memset(the_info, 0, sizeof(*the_info));
50f98: 2044 moveal %d4,%a0
void _Heap_Get_information(
Heap_Control *the_heap,
Heap_Information_block *the_info
)
{
Heap_Block *the_block = the_heap->first_block;
50f9a: 2469 0020 moveal %a1@(32),%a2
Heap_Block *const end = the_heap->last_block;
50f9e: 2429 0024 movel %a1@(36),%d2
memset(the_info, 0, sizeof(*the_info));
50fa2: 4298 clrl %a0@+
50fa4: 4298 clrl %a0@+
50fa6: 4298 clrl %a0@+
50fa8: 4298 clrl %a0@+
50faa: 4298 clrl %a0@+
50fac: 4290 clrl %a0@
while ( the_block != end ) {
50fae: b48a cmpl %a2,%d2
50fb0: 6738 beqs 50fea <_Heap_Get_information+0x62> <== NEVER TAKEN
uintptr_t const the_size = _Heap_Block_size(the_block);
Heap_Block *const next_block = _Heap_Block_at(the_block, the_size);
Heap_Information *info;
if ( _Heap_Is_prev_used(next_block) )
info = &the_info->Used;
50fb2: 2604 movel %d4,%d3
50fb4: 0683 0000 000c addil #12,%d3
Heap_Block *the_block = the_heap->first_block;
Heap_Block *const end = the_heap->last_block;
memset(the_info, 0, sizeof(*the_info));
while ( the_block != end ) {
50fba: 222a 0004 movel %a2@(4),%d1
50fbe: 70fe moveq #-2,%d0
uintptr_t const the_size = _Heap_Block_size(the_block);
Heap_Block *const next_block = _Heap_Block_at(the_block, the_size);
Heap_Information *info;
if ( _Heap_Is_prev_used(next_block) )
info = &the_info->Used;
50fc0: 2043 moveal %d3,%a0
50fc2: c081 andl %d1,%d0
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
50fc4: 43f2 0800 lea %a2@(00000000,%d0:l),%a1
if ( info->largest < the_size )
info->largest = the_size;
the_block = next_block;
}
}
50fc8: 2229 0004 movel %a1@(4),%d1
while ( the_block != end ) {
uintptr_t const the_size = _Heap_Block_size(the_block);
Heap_Block *const next_block = _Heap_Block_at(the_block, the_size);
Heap_Information *info;
if ( _Heap_Is_prev_used(next_block) )
50fcc: 0801 0000 btst #0,%d1
50fd0: 6602 bnes 50fd4 <_Heap_Get_information+0x4c>
info = &the_info->Used;
else
info = &the_info->Free;
50fd2: 2044 moveal %d4,%a0
info->number++;
50fd4: 5290 addql #1,%a0@
Heap_Block *the_block = the_heap->first_block;
Heap_Block *const end = the_heap->last_block;
memset(the_info, 0, sizeof(*the_info));
while ( the_block != end ) {
50fd6: 2449 moveal %a1,%a2
info = &the_info->Used;
else
info = &the_info->Free;
info->number++;
info->total += the_size;
50fd8: d1a8 0008 addl %d0,%a0@(8)
if ( info->largest < the_size )
50fdc: b0a8 0004 cmpl %a0@(4),%d0
50fe0: 6304 blss 50fe6 <_Heap_Get_information+0x5e>
info->largest = the_size;
50fe2: 2140 0004 movel %d0,%a0@(4)
Heap_Block *the_block = the_heap->first_block;
Heap_Block *const end = the_heap->last_block;
memset(the_info, 0, sizeof(*the_info));
while ( the_block != end ) {
50fe6: b3c2 cmpal %d2,%a1
50fe8: 66d4 bnes 50fbe <_Heap_Get_information+0x36>
if ( info->largest < the_size )
info->largest = the_size;
the_block = next_block;
}
}
50fea: 4cd7 041c moveml %sp@,%d2-%d4/%a2
50fee: 4e5e unlk %fp
...
0005b2e0 <_Heap_Size_of_alloc_area>:
bool _Heap_Size_of_alloc_area(
Heap_Control *heap,
void *alloc_begin_ptr,
uintptr_t *alloc_size
)
{
5b2e0: 4e56 0000 linkw %fp,#0
5b2e4: 202e 000c movel %fp@(12),%d0
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(
uintptr_t value,
uintptr_t alignment
)
{
return value - (value % alignment);
5b2e8: 2040 moveal %d0,%a0
5b2ea: 5188 subql #8,%a0
5b2ec: 226e 0008 moveal %fp@(8),%a1
5b2f0: 2f02 movel %d2,%sp@-
5b2f2: 2400 movel %d0,%d2
5b2f4: 4c69 2001 0010 remul %a1@(16),%d1,%d2
uintptr_t alloc_begin,
uintptr_t page_size
)
{
return (Heap_Block *) (_Heap_Align_down( alloc_begin, page_size )
- HEAP_BLOCK_HEADER_SIZE);
5b2fa: 91c1 subal %d1,%a0
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
5b2fc: 2229 0020 movel %a1@(32),%d1
&& (uintptr_t) block <= (uintptr_t) heap->last_block;
5b300: b288 cmpl %a0,%d1
5b302: 6236 bhis 5b33a <_Heap_Size_of_alloc_area+0x5a>
5b304: 2269 0024 moveal %a1@(36),%a1
5b308: b3c8 cmpal %a0,%a1
5b30a: 652e bcss 5b33a <_Heap_Size_of_alloc_area+0x5a> <== 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;
5b30c: 74fe moveq #-2,%d2
5b30e: c4a8 0004 andl %a0@(4),%d2
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
5b312: d1c2 addal %d2,%a0
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;
5b314: b1c1 cmpal %d1,%a0
5b316: 6522 bcss 5b33a <_Heap_Size_of_alloc_area+0x5a> <== NEVER TAKEN
5b318: b1c9 cmpal %a1,%a0
5b31a: 621e bhis 5b33a <_Heap_Size_of_alloc_area+0x5a> <== NEVER TAKEN
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;
5b31c: 7201 moveq #1,%d1
5b31e: c2a8 0004 andl %a0@(4),%d1
block_size = _Heap_Block_size( block );
next_block = _Heap_Block_at( block, block_size );
if (
!_Heap_Is_block_in_heap( heap, next_block )
|| !_Heap_Is_prev_used( next_block )
5b322: 6716 beqs 5b33a <_Heap_Size_of_alloc_area+0x5a> <== NEVER TAKEN
) {
return false;
}
*alloc_size = (uintptr_t) next_block + HEAP_BLOCK_SIZE_OFFSET - alloc_begin;
5b324: 7204 moveq #4,%d1
5b326: 9280 subl %d0,%d1
5b328: 2001 movel %d1,%d0
5b32a: d088 addl %a0,%d0
5b32c: 226e 0010 moveal %fp@(16),%a1
return true;
}
5b330: 241f movel %sp@+,%d2
5b332: 4e5e unlk %fp
|| !_Heap_Is_prev_used( next_block )
) {
return false;
}
*alloc_size = (uintptr_t) next_block + HEAP_BLOCK_SIZE_OFFSET - alloc_begin;
5b334: 2280 movel %d0,%a1@
return true;
5b336: 7001 moveq #1,%d0
}
5b338: 4e75 rts
5b33a: 241f movel %sp@+,%d2
5b33c: 4e5e unlk %fp
if (
!_Heap_Is_block_in_heap( heap, next_block )
|| !_Heap_Is_prev_used( next_block )
) {
return false;
5b33e: 4200 clrb %d0
}
*alloc_size = (uintptr_t) next_block + HEAP_BLOCK_SIZE_OFFSET - alloc_begin;
return true;
}
...
000483d6 <_Heap_Walk>:
bool _Heap_Walk(
Heap_Control *heap,
int source,
bool dump
)
{
483d6: 4e56 ffc4 linkw %fp,#-60
483da: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
483de: 246e 0008 moveal %fp@(8),%a2
uintptr_t const min_block_size = heap->min_block_size;
Heap_Block *const first_block = heap->first_block;
Heap_Block *const last_block = heap->last_block;
Heap_Block *block = first_block;
Heap_Walk_printer printer = dump ?
_Heap_Walk_print : _Heap_Walk_print_nothing;
483e2: 4bfa ff94 lea %pc@(48378 <_Heap_Walk_print_nothing>),%a5
bool _Heap_Walk(
Heap_Control *heap,
int source,
bool dump
)
{
483e6: 2a2e 000c movel %fp@(12),%d5
uintptr_t const page_size = heap->page_size;
483ea: 262a 0010 movel %a2@(16),%d3
uintptr_t const min_block_size = heap->min_block_size;
483ee: 2c2a 0014 movel %a2@(20),%d6
Heap_Block *const first_block = heap->first_block;
483f2: 282a 0020 movel %a2@(32),%d4
Heap_Block *const last_block = heap->last_block;
483f6: 2e2a 0024 movel %a2@(36),%d7
Heap_Block *block = first_block;
Heap_Walk_printer printer = dump ?
_Heap_Walk_print : _Heap_Walk_print_nothing;
483fa: 4a2e 0013 tstb %fp@(19)
483fe: 6704 beqs 48404 <_Heap_Walk+0x2e>
48400: 4bfa ff7e lea %pc@(48380 <_Heap_Walk_print>),%a5
if ( !_System_state_Is_up( _System_state_Get() ) ) {
48404: 7003 moveq #3,%d0
48406: b0b9 0006 0a40 cmpl 60a40 <_System_state_Current>,%d0
4840c: 670c beqs 4841a <_Heap_Walk+0x44>
block = next_block;
} while ( block != first_block );
return true;
}
4840e: 4cee 3cfc ffc4 moveml %fp@(-60),%d2-%d7/%a2-%a5
}
block = next_block;
} while ( block != first_block );
return true;
48414: 7001 moveq #1,%d0
}
48416: 4e5e unlk %fp
48418: 4e75 rts
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)(
4841a: 2f2a 000c movel %a2@(12),%sp@-
4841e: 2f2a 0008 movel %a2@(8),%sp@-
48422: 2f07 movel %d7,%sp@-
48424: 2f04 movel %d4,%sp@-
48426: 2f2a 001c movel %a2@(28),%sp@-
4842a: 2f2a 0018 movel %a2@(24),%sp@-
4842e: 2f06 movel %d6,%sp@-
48430: 2f03 movel %d3,%sp@-
48432: 4879 0005 d01f pea 5d01f <_Status_Object_name_errors_to_status+0x5d>
48438: 42a7 clrl %sp@-
4843a: 2f05 movel %d5,%sp@-
4843c: 4e95 jsr %a5@
heap->area_begin, heap->area_end,
first_block, last_block,
first_free_block, last_free_block
);
if ( page_size == 0 ) {
4843e: 4fef 002c lea %sp@(44),%sp
48442: 4a83 tstl %d3
48444: 6700 0082 beqw 484c8 <_Heap_Walk+0xf2>
)
{
#if (CPU_ALIGNMENT == 0)
return true;
#else
return (((uintptr_t)address % CPU_ALIGNMENT) == 0);
48448: 7003 moveq #3,%d0
4844a: c083 andl %d3,%d0
(*printer)( source, true, "page size is zero\n" );
return false;
}
if ( !_Addresses_Is_aligned( (void *) page_size ) ) {
4844c: 6600 0090 bnew 484de <_Heap_Walk+0x108>
RTEMS_INLINE_ROUTINE bool _Heap_Is_aligned(
uintptr_t value,
uintptr_t alignment
)
{
return (value % alignment) == 0;
48450: 2206 movel %d6,%d1
48452: 4c43 1000 remul %d3,%d0,%d1
);
return false;
}
if ( !_Heap_Is_aligned( min_block_size, page_size ) ) {
48456: 4a80 tstl %d0
48458: 6600 00a4 bnew 484fe <_Heap_Walk+0x128>
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Alloc_area_of_block(
const Heap_Block *block
)
{
return (uintptr_t) block + HEAP_BLOCK_HEADER_SIZE;
4845c: 2004 movel %d4,%d0
4845e: 5080 addql #8,%d0
RTEMS_INLINE_ROUTINE bool _Heap_Is_aligned(
uintptr_t value,
uintptr_t alignment
)
{
return (value % alignment) == 0;
48460: 4c43 0001 remul %d3,%d1,%d0
);
return false;
}
if (
48464: 4a81 tstl %d1
48466: 6600 00ae bnew 48516 <_Heap_Walk+0x140>
block = next_block;
} while ( block != first_block );
return true;
}
4846a: 2044 moveal %d4,%a0
4846c: 2228 0004 movel %a0@(4),%d1
48470: 2d41 fff0 movel %d1,%fp@(-16)
);
return false;
}
if ( !_Heap_Is_prev_used( first_block ) ) {
48474: 0801 0000 btst #0,%d1
48478: 6700 017e beqw 485f8 <_Heap_Walk+0x222>
- 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;
4847c: 2047 moveal %d7,%a0
4847e: 72fe moveq #-2,%d1
48480: c2a8 0004 andl %a0@(4),%d1
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
48484: d1c1 addal %d1,%a0
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;
48486: 7201 moveq #1,%d1
48488: c2a8 0004 andl %a0@(4),%d1
);
return false;
}
if ( _Heap_Is_free( last_block ) ) {
4848c: 6724 beqs 484b2 <_Heap_Walk+0xdc>
);
return false;
}
if (
4848e: b1c4 cmpal %d4,%a0
48490: 6700 009c beqw 4852e <_Heap_Walk+0x158>
_Heap_Block_at( last_block, _Heap_Block_size( last_block ) ) != first_block
) {
(*printer)(
48494: 4879 0005 d179 pea 5d179 <_Status_Object_name_errors_to_status+0x1b7><== NOT EXECUTED
4849a: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
4849e: 2f05 movel %d5,%sp@- <== NOT EXECUTED
484a0: 4e95 jsr %a5@ <== NOT EXECUTED
484a2: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
if ( !_System_state_Is_up( _System_state_Get() ) ) {
return true;
}
if ( !_Heap_Walk_check_control( source, printer, heap ) ) {
return false;
484a6: 4200 clrb %d0 <== NOT EXECUTED
block = next_block;
} while ( block != first_block );
return true;
}
484a8: 4cee 3cfc ffc4 moveml %fp@(-60),%d2-%d7/%a2-%a5
484ae: 4e5e unlk %fp
484b0: 4e75 rts
return false;
}
if ( _Heap_Is_free( last_block ) ) {
(*printer)(
484b2: 4879 0005 d164 pea 5d164 <_Status_Object_name_errors_to_status+0x1a2>
}
if (
_Heap_Block_at( last_block, _Heap_Block_size( last_block ) ) != first_block
) {
(*printer)(
484b8: 4878 0001 pea 1 <ADD>
484bc: 2f05 movel %d5,%sp@-
484be: 4e95 jsr %a5@
484c0: 4fef 000c lea %sp@(12),%sp
if ( !_System_state_Is_up( _System_state_Get() ) ) {
return true;
}
if ( !_Heap_Walk_check_control( source, printer, heap ) ) {
return false;
484c4: 4200 clrb %d0
484c6: 60e0 bras 484a8 <_Heap_Walk+0xd2>
first_block, last_block,
first_free_block, last_free_block
);
if ( page_size == 0 ) {
(*printer)( source, true, "page size is zero\n" );
484c8: 4879 0005 d0b0 pea 5d0b0 <_Status_Object_name_errors_to_status+0xee>
}
if (
_Heap_Block_at( last_block, _Heap_Block_size( last_block ) ) != first_block
) {
(*printer)(
484ce: 4878 0001 pea 1 <ADD>
484d2: 2f05 movel %d5,%sp@-
484d4: 4e95 jsr %a5@
484d6: 4fef 000c lea %sp@(12),%sp
if ( !_System_state_Is_up( _System_state_Get() ) ) {
return true;
}
if ( !_Heap_Walk_check_control( source, printer, heap ) ) {
return false;
484da: 4200 clrb %d0
484dc: 60ca bras 484a8 <_Heap_Walk+0xd2>
return false;
}
if ( !_Addresses_Is_aligned( (void *) page_size ) ) {
(*printer)(
484de: 2f03 movel %d3,%sp@-
484e0: 4879 0005 d0c3 pea 5d0c3 <_Status_Object_name_errors_to_status+0x101>
return false;
}
if ( !_Heap_Walk_is_in_free_list( heap, block ) ) {
(*printer)(
484e6: 4878 0001 pea 1 <ADD>
484ea: 2f05 movel %d5,%sp@-
484ec: 4e95 jsr %a5@
484ee: 4fef 0010 lea %sp@(16),%sp
return false;
}
if ( !_Heap_Is_prev_used( next_block ) ) {
if ( !_Heap_Walk_check_free_block( source, printer, heap, block ) ) {
return false;
484f2: 4200 clrb %d0
block = next_block;
} while ( block != first_block );
return true;
}
484f4: 4cee 3cfc ffc4 moveml %fp@(-60),%d2-%d7/%a2-%a5
484fa: 4e5e unlk %fp
484fc: 4e75 rts
return false;
}
if ( !_Heap_Is_aligned( min_block_size, page_size ) ) {
(*printer)(
484fe: 2f06 movel %d6,%sp@-
48500: 4879 0005 d0e1 pea 5d0e1 <_Status_Object_name_errors_to_status+0x11f>
return false;
}
if ( !_Heap_Walk_is_in_free_list( heap, block ) ) {
(*printer)(
48506: 4878 0001 pea 1 <ADD>
4850a: 2f05 movel %d5,%sp@-
4850c: 4e95 jsr %a5@
4850e: 4fef 0010 lea %sp@(16),%sp
return false;
}
if ( !_Heap_Is_prev_used( next_block ) ) {
if ( !_Heap_Walk_check_free_block( source, printer, heap, block ) ) {
return false;
48512: 4200 clrb %d0
48514: 60de bras 484f4 <_Heap_Walk+0x11e>
}
if (
!_Heap_Is_aligned( _Heap_Alloc_area_of_block( first_block ), page_size )
) {
(*printer)(
48516: 2f04 movel %d4,%sp@-
48518: 4879 0005 d105 pea 5d105 <_Status_Object_name_errors_to_status+0x143>
return false;
}
if ( !_Heap_Walk_is_in_free_list( heap, block ) ) {
(*printer)(
4851e: 4878 0001 pea 1 <ADD>
48522: 2f05 movel %d5,%sp@-
48524: 4e95 jsr %a5@
48526: 4fef 0010 lea %sp@(16),%sp
return false;
}
if ( !_Heap_Is_prev_used( next_block ) ) {
if ( !_Heap_Walk_check_free_block( source, printer, heap, block ) ) {
return false;
4852a: 4200 clrb %d0
4852c: 60c6 bras 484f4 <_Heap_Walk+0x11e>
int source,
Heap_Walk_printer printer,
Heap_Control *heap
)
{
uintptr_t const page_size = heap->page_size;
4852e: 202a 0010 movel %a2@(16),%d0
block = next_block;
} while ( block != first_block );
return true;
}
48532: 206a 0008 moveal %a2@(8),%a0
int source,
Heap_Walk_printer printer,
Heap_Control *heap
)
{
uintptr_t const page_size = heap->page_size;
48536: 2d40 fffc movel %d0,%fp@(-4)
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 ) {
4853a: b1ca cmpal %a2,%a0
4853c: 6700 032c beqw 4886a <_Heap_Walk+0x494>
block = next_block;
} while ( block != first_block );
return true;
}
48540: 242a 0020 movel %a2@(32),%d2
48544: 2d42 fff4 movel %d2,%fp@(-12)
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;
48548: b1c2 cmpal %d2,%a0
4854a: 6500 0092 bcsw 485de <_Heap_Walk+0x208>
4854e: 286a 0024 moveal %a2@(36),%a4
48552: b1cc cmpal %a4,%a0
48554: 6200 0088 bhiw 485de <_Heap_Walk+0x208>
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Alloc_area_of_block(
const Heap_Block *block
)
{
return (uintptr_t) block + HEAP_BLOCK_HEADER_SIZE;
48558: 47e8 0008 lea %a0@(8),%a3
RTEMS_INLINE_ROUTINE bool _Heap_Is_aligned(
uintptr_t value,
uintptr_t alignment
)
{
return (value % alignment) == 0;
4855c: 200b movel %a3,%d0
4855e: 222e fffc movel %fp@(-4),%d1
48562: 4c41 0002 remul %d1,%d2,%d0
);
return false;
}
if (
48566: 4a82 tstl %d2
48568: 6600 00a6 bnew 48610 <_Heap_Walk+0x23a>
- 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;
4856c: 74fe moveq #-2,%d2
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;
4856e: 7001 moveq #1,%d0
- 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;
48570: c4a8 0004 andl %a0@(4),%d2
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;
48574: c0b0 2804 andl %a0@(00000004,%d2:l),%d0
);
return false;
}
if ( _Heap_Is_used( free_block ) ) {
48578: 664a bnes 485c4 <_Heap_Walk+0x1ee> <== NEVER TAKEN
4857a: 222e fff4 movel %fp@(-12),%d1
4857e: 224a moveal %a2,%a1
48580: 2648 moveal %a0,%a3
48582: 2d43 fff8 movel %d3,%fp@(-8)
);
return false;
}
if ( free_block->prev != prev_block ) {
48586: 2428 000c movel %a0@(12),%d2
4858a: b3c2 cmpal %d2,%a1
4858c: 6600 02c0 bnew 4884e <_Heap_Walk+0x478>
return false;
}
prev_block = free_block;
free_block = free_block->next;
48590: 2068 0008 moveal %a0@(8),%a0
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 ) {
48594: b1ca cmpal %a2,%a0
48596: 6700 0092 beqw 4862a <_Heap_Walk+0x254>
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;
4859a: b1c1 cmpal %d1,%a0
4859c: 6540 bcss 485de <_Heap_Walk+0x208>
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Alloc_area_of_block(
const Heap_Block *block
)
{
return (uintptr_t) block + HEAP_BLOCK_HEADER_SIZE;
4859e: 2408 movel %a0,%d2
485a0: 5082 addql #8,%d2
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;
485a2: b9c8 cmpal %a0,%a4
485a4: 6538 bcss 485de <_Heap_Walk+0x208> <== NEVER TAKEN
RTEMS_INLINE_ROUTINE bool _Heap_Is_aligned(
uintptr_t value,
uintptr_t alignment
)
{
return (value % alignment) == 0;
485a6: 202e fffc movel %fp@(-4),%d0
);
return false;
}
if ( _Heap_Is_used( free_block ) ) {
485aa: 224b moveal %a3,%a1
485ac: 2648 moveal %a0,%a3
485ae: 4c40 2003 remul %d0,%d3,%d2
);
return false;
}
if (
485b2: 4a83 tstl %d3
485b4: 665a bnes 48610 <_Heap_Walk+0x23a>
- 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;
485b6: 74fe moveq #-2,%d2
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;
485b8: 7001 moveq #1,%d0
- 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;
485ba: c4a8 0004 andl %a0@(4),%d2
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;
485be: c0b0 2804 andl %a0@(00000004,%d2:l),%d0
);
return false;
}
if ( _Heap_Is_used( free_block ) ) {
485c2: 67c2 beqs 48586 <_Heap_Walk+0x1b0>
(*printer)(
485c4: 2f08 movel %a0,%sp@-
485c6: 4879 0005 d1f8 pea 5d1f8 <_Status_Object_name_errors_to_status+0x236>
return false;
}
if ( !_Heap_Walk_is_in_free_list( heap, block ) ) {
(*printer)(
485cc: 4878 0001 pea 1 <ADD>
485d0: 2f05 movel %d5,%sp@-
485d2: 4e95 jsr %a5@
485d4: 4fef 0010 lea %sp@(16),%sp
return false;
}
if ( !_Heap_Is_prev_used( next_block ) ) {
if ( !_Heap_Walk_check_free_block( source, printer, heap, block ) ) {
return false;
485d8: 4200 clrb %d0
485da: 6000 ff18 braw 484f4 <_Heap_Walk+0x11e>
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 ) ) {
(*printer)(
485de: 2f08 movel %a0,%sp@-
485e0: 4879 0005 d1a8 pea 5d1a8 <_Status_Object_name_errors_to_status+0x1e6>
return false;
}
if ( !_Heap_Walk_is_in_free_list( heap, block ) ) {
(*printer)(
485e6: 4878 0001 pea 1 <ADD>
485ea: 2f05 movel %d5,%sp@-
485ec: 4e95 jsr %a5@
485ee: 4fef 0010 lea %sp@(16),%sp
return false;
}
if ( !_Heap_Is_prev_used( next_block ) ) {
if ( !_Heap_Walk_check_free_block( source, printer, heap, block ) ) {
return false;
485f2: 4200 clrb %d0
485f4: 6000 fefe braw 484f4 <_Heap_Walk+0x11e>
return false;
}
if ( !_Heap_Is_prev_used( first_block ) ) {
(*printer)(
485f8: 4879 0005 d136 pea 5d136 <_Status_Object_name_errors_to_status+0x174>
}
if (
_Heap_Block_at( last_block, _Heap_Block_size( last_block ) ) != first_block
) {
(*printer)(
485fe: 4878 0001 pea 1 <ADD>
48602: 2f05 movel %d5,%sp@-
48604: 4e95 jsr %a5@
48606: 4fef 000c lea %sp@(12),%sp
if ( !_System_state_Is_up( _System_state_Get() ) ) {
return true;
}
if ( !_Heap_Walk_check_control( source, printer, heap ) ) {
return false;
4860a: 4200 clrb %d0
4860c: 6000 fe9a braw 484a8 <_Heap_Walk+0xd2>
}
if (
!_Heap_Is_aligned( _Heap_Alloc_area_of_block( free_block ), page_size )
) {
(*printer)(
48610: 2f08 movel %a0,%sp@-
48612: 4879 0005 d1c8 pea 5d1c8 <_Status_Object_name_errors_to_status+0x206>
return false;
}
if ( !_Heap_Walk_is_in_free_list( heap, block ) ) {
(*printer)(
48618: 4878 0001 pea 1 <ADD>
4861c: 2f05 movel %d5,%sp@-
4861e: 4e95 jsr %a5@
48620: 4fef 0010 lea %sp@(16),%sp
return false;
}
if ( !_Heap_Is_prev_used( next_block ) ) {
if ( !_Heap_Walk_check_free_block( source, printer, heap, block ) ) {
return false;
48624: 4200 clrb %d0
48626: 6000 fecc braw 484f4 <_Heap_Walk+0x11e>
4862a: 262e fff8 movel %fp@(-8),%d3
);
return false;
}
if ( _Heap_Is_used( free_block ) ) {
4862e: 2844 moveal %d4,%a4
48630: 2d41 fff4 movel %d1,%fp@(-12)
48634: 222e fff4 movel %fp@(-12),%d1
48638: 2d43 fffc movel %d3,%fp@(-4)
4863c: 262e fff0 movel %fp@(-16),%d3
48640: 2d47 ffec movel %d7,%fp@(-20)
- 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;
48644: 74fe moveq #-2,%d2
48646: c483 andl %d3,%d2
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
48648: 47f4 2800 lea %a4@(00000000,%d2:l),%a3
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;
4864c: b7c1 cmpal %d1,%a3
4864e: 657e bcss 486ce <_Heap_Walk+0x2f8> <== NEVER TAKEN
48650: b7ea 0024 cmpal %a2@(36),%a3
48654: 6278 bhis 486ce <_Heap_Walk+0x2f8>
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;
48656: b9ee ffec cmpal %fp@(-20),%a4
4865a: 56c1 sne %d1
RTEMS_INLINE_ROUTINE bool _Heap_Is_aligned(
uintptr_t value,
uintptr_t alignment
)
{
return (value % alignment) == 0;
4865c: 202e fffc movel %fp@(-4),%d0
48660: 2e02 movel %d2,%d7
48662: 3241 moveaw %d1,%a1
48664: 4c40 7001 remul %d0,%d1,%d7
48668: 2009 movel %a1,%d0
4866a: 4480 negl %d0
);
return false;
}
if ( !_Heap_Is_aligned( block_size, page_size ) && is_not_last_block ) {
4866c: 4a81 tstl %d1
4866e: 6704 beqs 48674 <_Heap_Walk+0x29e>
48670: 4a00 tstb %d0
48672: 667c bnes 486f0 <_Heap_Walk+0x31a>
);
return false;
}
if ( block_size < min_block_size && is_not_last_block ) {
48674: b486 cmpl %d6,%d2
48676: 6406 bccs 4867e <_Heap_Walk+0x2a8>
48678: 4a00 tstb %d0
4867a: 6600 008e bnew 4870a <_Heap_Walk+0x334>
);
return false;
}
if ( next_block_begin <= block_begin && is_not_last_block ) {
4867e: b7cc cmpal %a4,%a3
48680: 6206 bhis 48688 <_Heap_Walk+0x2b2>
48682: 4a00 tstb %d0
48684: 6600 00a8 bnew 4872e <_Heap_Walk+0x358>
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;
48688: 7001 moveq #1,%d0
4868a: 7e01 moveq #1,%d7
4868c: c0ab 0004 andl %a3@(4),%d0
48690: c687 andl %d7,%d3
);
return false;
}
if ( !_Heap_Is_prev_used( next_block ) ) {
48692: 4a80 tstl %d0
48694: 6700 00cc beqw 48762 <_Heap_Walk+0x38c>
if ( !_Heap_Walk_check_free_block( source, printer, heap, block ) ) {
return false;
}
} else if (prev_used) {
48698: 4a83 tstl %d3
4869a: 6700 00ac beqw 48748 <_Heap_Walk+0x372>
(*printer)(
4869e: 2f02 movel %d2,%sp@-
486a0: 2f0c movel %a4,%sp@-
486a2: 4879 0005 d39d pea 5d39d <_Status_Object_name_errors_to_status+0x3db>
486a8: 42a7 clrl %sp@-
486aa: 2f05 movel %d5,%sp@-
486ac: 4e95 jsr %a5@
486ae: 4fef 0014 lea %sp@(20),%sp
block->prev_size
);
}
block = next_block;
} while ( block != first_block );
486b2: b7c4 cmpal %d4,%a3
486b4: 6700 fd58 beqw 4840e <_Heap_Walk+0x38>
486b8: 262b 0004 movel %a3@(4),%d3
- 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;
486bc: 74fe moveq #-2,%d2
486be: 284b moveal %a3,%a4
486c0: c483 andl %d3,%d2
486c2: 222a 0020 movel %a2@(32),%d1
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
486c6: 47f4 2800 lea %a4@(00000000,%d2:l),%a3
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;
486ca: b7c1 cmpal %d1,%a3
486cc: 6482 bccs 48650 <_Heap_Walk+0x27a> <== ALWAYS TAKEN
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;
if ( !_Heap_Is_block_in_heap( heap, next_block ) ) {
(*printer)(
486ce: 2f0b movel %a3,%sp@-
486d0: 2f0c movel %a4,%sp@-
486d2: 4879 0005 d246 pea 5d246 <_Status_Object_name_errors_to_status+0x284>
return false;
}
if ( next_block_begin <= block_begin && is_not_last_block ) {
(*printer)(
486d8: 4878 0001 pea 1 <ADD>
486dc: 2f05 movel %d5,%sp@-
486de: 4e95 jsr %a5@
"block 0x%08x: next block 0x%08x is not a successor\n",
block,
next_block
);
return false;
486e0: 4fef 0014 lea %sp@(20),%sp
486e4: 4200 clrb %d0
block = next_block;
} while ( block != first_block );
return true;
}
486e6: 4cee 3cfc ffc4 moveml %fp@(-60),%d2-%d7/%a2-%a5
486ec: 4e5e unlk %fp
486ee: 4e75 rts
return false;
}
if ( !_Heap_Is_aligned( block_size, page_size ) && is_not_last_block ) {
(*printer)(
486f0: 2f02 movel %d2,%sp@-
486f2: 2f0c movel %a4,%sp@-
486f4: 4879 0005 d273 pea 5d273 <_Status_Object_name_errors_to_status+0x2b1>
return false;
}
if ( next_block_begin <= block_begin && is_not_last_block ) {
(*printer)(
486fa: 4878 0001 pea 1 <ADD>
486fe: 2f05 movel %d5,%sp@-
48700: 4e95 jsr %a5@
"block 0x%08x: next block 0x%08x is not a successor\n",
block,
next_block
);
return false;
48702: 4fef 0014 lea %sp@(20),%sp
48706: 4200 clrb %d0
48708: 60dc bras 486e6 <_Heap_Walk+0x310>
return false;
}
if ( block_size < min_block_size && is_not_last_block ) {
(*printer)(
4870a: 2f06 movel %d6,%sp@-
4870c: 2f02 movel %d2,%sp@-
4870e: 2f0c movel %a4,%sp@-
48710: 4879 0005 d2a1 pea 5d2a1 <_Status_Object_name_errors_to_status+0x2df>
48716: 4878 0001 pea 1 <ADD>
4871a: 2f05 movel %d5,%sp@-
4871c: 4e95 jsr %a5@
block,
block_size,
min_block_size
);
return false;
4871e: 4fef 0018 lea %sp@(24),%sp
block = next_block;
} while ( block != first_block );
return true;
}
48722: 4cee 3cfc ffc4 moveml %fp@(-60),%d2-%d7/%a2-%a5
block,
block_size,
min_block_size
);
return false;
48728: 4200 clrb %d0
block = next_block;
} while ( block != first_block );
return true;
}
4872a: 4e5e unlk %fp
4872c: 4e75 rts
return false;
}
if ( next_block_begin <= block_begin && is_not_last_block ) {
(*printer)(
4872e: 2f0b movel %a3,%sp@-
48730: 2f0c movel %a4,%sp@-
48732: 4879 0005 d2cc pea 5d2cc <_Status_Object_name_errors_to_status+0x30a>
48738: 4878 0001 pea 1 <ADD>
4873c: 2f05 movel %d5,%sp@-
4873e: 4e95 jsr %a5@
"block 0x%08x: next block 0x%08x is not a successor\n",
block,
next_block
);
return false;
48740: 4fef 0014 lea %sp@(20),%sp
48744: 4200 clrb %d0
48746: 609e bras 486e6 <_Heap_Walk+0x310>
"block 0x%08x: size %u\n",
block,
block_size
);
} else {
(*printer)(
48748: 2f14 movel %a4@,%sp@-
4874a: 2f02 movel %d2,%sp@-
4874c: 2f0c movel %a4,%sp@-
4874e: 4879 0005 d3b4 pea 5d3b4 <_Status_Object_name_errors_to_status+0x3f2>
48754: 42a7 clrl %sp@-
48756: 2f05 movel %d5,%sp@-
48758: 4e95 jsr %a5@
4875a: 4fef 0018 lea %sp@(24),%sp
4875e: 6000 ff52 braw 486b2 <_Heap_Walk+0x2dc>
block = next_block;
} while ( block != first_block );
return true;
}
48762: 2e2a 0008 movel %a2@(8),%d7
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)(
48766: 43f9 0005 cfec lea 5cfec <_Status_Object_name_errors_to_status+0x2a>,%a1
block->prev,
block->prev == first_free_block ?
" (= first free)"
: (block->prev == free_list_head ? " (= head)" : ""),
block->next,
block->next == last_free_block ?
4876c: 222c 0008 movel %a4@(8),%d1
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)(
48770: b2aa 000c cmpl %a2@(12),%d1
48774: 670a beqs 48780 <_Heap_Walk+0x3aa>
" (= first free)"
: (block->prev == free_list_head ? " (= head)" : ""),
block->next,
block->next == last_free_block ?
" (= last free)"
: (block->next == free_list_tail ? " (= tail)" : "")
48776: 43f9 0005 cf34 lea 5cf34 <rtems_filesystem_default_pathconf+0x40>,%a1
4877c: b28a cmpl %a2,%d1
4877e: 6764 beqs 487e4 <_Heap_Walk+0x40e>
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 ?
48780: 202c 000c movel %a4@(12),%d0
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)(
48784: 41f9 0005 d005 lea 5d005 <_Status_Object_name_errors_to_status+0x43>,%a0
4878a: b087 cmpl %d7,%d0
4878c: 670a beqs 48798 <_Heap_Walk+0x3c2>
block,
block_size,
block->prev,
block->prev == first_free_block ?
" (= first free)"
: (block->prev == free_list_head ? " (= head)" : ""),
4878e: 41f9 0005 cf34 lea 5cf34 <rtems_filesystem_default_pathconf+0x40>,%a0
48794: b08a cmpl %a2,%d0
48796: 6754 beqs 487ec <_Heap_Walk+0x416>
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)(
48798: 2f09 movel %a1,%sp@-
4879a: 2f01 movel %d1,%sp@-
4879c: 2f08 movel %a0,%sp@-
4879e: 2f00 movel %d0,%sp@-
487a0: 2f02 movel %d2,%sp@-
487a2: 2f0c movel %a4,%sp@-
487a4: 4879 0005 d300 pea 5d300 <_Status_Object_name_errors_to_status+0x33e>
487aa: 42a7 clrl %sp@-
487ac: 2f05 movel %d5,%sp@-
487ae: 4e95 jsr %a5@
block->next == last_free_block ?
" (= last free)"
: (block->next == free_list_tail ? " (= tail)" : "")
);
if ( block_size != next_block->prev_size ) {
487b0: 2213 movel %a3@,%d1
487b2: 4fef 0024 lea %sp@(36),%sp
487b6: b282 cmpl %d2,%d1
487b8: 663a bnes 487f4 <_Heap_Walk+0x41e>
);
return false;
}
if ( !prev_used ) {
487ba: 4a83 tstl %d3
487bc: 6776 beqs 48834 <_Heap_Walk+0x45e> <== NEVER TAKEN
block = next_block;
} while ( block != first_block );
return true;
}
487be: 206a 0008 moveal %a2@(8),%a0
)
{
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 ) {
487c2: b1ca cmpal %a2,%a0
487c4: 6754 beqs 4881a <_Heap_Walk+0x444> <== NEVER TAKEN
if ( free_block == block ) {
487c6: b1cc cmpal %a4,%a0
487c8: 6700 fee8 beqw 486b2 <_Heap_Walk+0x2dc>
487cc: 2e2e ffec movel %fp@(-20),%d7
return true;
}
free_block = free_block->next;
487d0: 2068 0008 moveal %a0@(8),%a0
)
{
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 ) {
487d4: b1ca cmpal %a2,%a0
487d6: 6742 beqs 4881a <_Heap_Walk+0x444> <== NEVER TAKEN
if ( free_block == block ) {
487d8: b1cc cmpal %a4,%a0
487da: 66f4 bnes 487d0 <_Heap_Walk+0x3fa>
487dc: 2d47 ffec movel %d7,%fp@(-20)
487e0: 6000 fed0 braw 486b2 <_Heap_Walk+0x2dc>
" (= first free)"
: (block->prev == free_list_head ? " (= head)" : ""),
block->next,
block->next == last_free_block ?
" (= last free)"
: (block->next == free_list_tail ? " (= tail)" : "")
487e4: 43f9 0005 cffb lea 5cffb <_Status_Object_name_errors_to_status+0x39>,%a1
487ea: 6094 bras 48780 <_Heap_Walk+0x3aa>
block,
block_size,
block->prev,
block->prev == first_free_block ?
" (= first free)"
: (block->prev == free_list_head ? " (= head)" : ""),
487ec: 41f9 0005 d015 lea 5d015 <_Status_Object_name_errors_to_status+0x53>,%a0
487f2: 60a4 bras 48798 <_Heap_Walk+0x3c2>
" (= last free)"
: (block->next == free_list_tail ? " (= tail)" : "")
);
if ( block_size != next_block->prev_size ) {
(*printer)(
487f4: 2f0b movel %a3,%sp@-
487f6: 2f01 movel %d1,%sp@-
487f8: 2f02 movel %d2,%sp@-
487fa: 2f0c movel %a4,%sp@-
487fc: 4879 0005 d335 pea 5d335 <_Status_Object_name_errors_to_status+0x373>
48802: 4878 0001 pea 1 <ADD>
48806: 2f05 movel %d5,%sp@-
48808: 4e95 jsr %a5@
4880a: 4fef 001c lea %sp@(28),%sp
block = next_block;
} while ( block != first_block );
return true;
}
4880e: 4cee 3cfc ffc4 moveml %fp@(-60),%d2-%d7/%a2-%a5
return false;
}
if ( !_Heap_Is_prev_used( next_block ) ) {
if ( !_Heap_Walk_check_free_block( source, printer, heap, block ) ) {
return false;
48814: 4200 clrb %d0
block = next_block;
} while ( block != first_block );
return true;
}
48816: 4e5e unlk %fp
48818: 4e75 rts
return false;
}
if ( !_Heap_Walk_is_in_free_list( heap, block ) ) {
(*printer)(
4881a: 2f0c movel %a4,%sp@-
4881c: 4879 0005 d3d9 pea 5d3d9 <_Status_Object_name_errors_to_status+0x417>
48822: 4878 0001 pea 1 <ADD>
48826: 2f05 movel %d5,%sp@-
48828: 4e95 jsr %a5@
4882a: 4fef 0010 lea %sp@(16),%sp
return false;
}
if ( !_Heap_Is_prev_used( next_block ) ) {
if ( !_Heap_Walk_check_free_block( source, printer, heap, block ) ) {
return false;
4882e: 4200 clrb %d0
48830: 6000 fcc2 braw 484f4 <_Heap_Walk+0x11e>
return false;
}
if ( !prev_used ) {
(*printer)(
48834: 2f0c movel %a4,%sp@-
48836: 4879 0005 d36e pea 5d36e <_Status_Object_name_errors_to_status+0x3ac>
return false;
}
if ( !_Heap_Walk_is_in_free_list( heap, block ) ) {
(*printer)(
4883c: 4878 0001 pea 1 <ADD>
48840: 2f05 movel %d5,%sp@-
48842: 4e95 jsr %a5@
48844: 4fef 0010 lea %sp@(16),%sp
return false;
}
if ( !_Heap_Is_prev_used( next_block ) ) {
if ( !_Heap_Walk_check_free_block( source, printer, heap, block ) ) {
return false;
48848: 4200 clrb %d0
4884a: 6000 fca8 braw 484f4 <_Heap_Walk+0x11e>
return false;
}
if ( free_block->prev != prev_block ) {
(*printer)(
4884e: 2f02 movel %d2,%sp@-
48850: 2f08 movel %a0,%sp@-
48852: 4879 0005 d214 pea 5d214 <_Status_Object_name_errors_to_status+0x252>
return false;
}
if ( next_block_begin <= block_begin && is_not_last_block ) {
(*printer)(
48858: 4878 0001 pea 1 <ADD>
4885c: 2f05 movel %d5,%sp@-
4885e: 4e95 jsr %a5@
"block 0x%08x: next block 0x%08x is not a successor\n",
block,
next_block
);
return false;
48860: 4fef 0014 lea %sp@(20),%sp
48864: 4200 clrb %d0
48866: 6000 fe7e braw 486e6 <_Heap_Walk+0x310>
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 ) {
4886a: 222a 0020 movel %a2@(32),%d1
);
return false;
}
if ( _Heap_Is_used( free_block ) ) {
4886e: 2844 moveal %d4,%a4
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 ) {
48870: 2d41 fff4 movel %d1,%fp@(-12)
);
return false;
}
if ( _Heap_Is_used( free_block ) ) {
48874: 222e fff4 movel %fp@(-12),%d1
48878: 2d43 fffc movel %d3,%fp@(-4)
4887c: 262e fff0 movel %fp@(-16),%d3
48880: 2d47 ffec movel %d7,%fp@(-20)
48884: 6000 fdbe braw 48644 <_Heap_Walk+0x26e>
00046e1a <_IO_Initialize_all_drivers>:
*
* Output Parameters: NONE
*/
void _IO_Initialize_all_drivers( void )
{
46e1a: 4e56 0000 linkw %fp,#0
46e1e: 2f0a movel %a2,%sp@-
46e20: 2f02 movel %d2,%sp@-
rtems_device_major_number major;
for ( major=0 ; major < _IO_Number_of_drivers ; major ++ )
46e22: 4ab9 0005 e62a tstl 5e62a <_IO_Number_of_drivers>
46e28: 671e beqs 46e48 <_IO_Initialize_all_drivers+0x2e><== NEVER TAKEN
46e2a: 4282 clrl %d2
46e2c: 45f9 0004 ba1c lea 4ba1c <rtems_io_initialize>,%a2
(void) rtems_io_initialize( major, 0, NULL );
46e32: 42a7 clrl %sp@-
46e34: 42a7 clrl %sp@-
46e36: 2f02 movel %d2,%sp@-
void _IO_Initialize_all_drivers( void )
{
rtems_device_major_number major;
for ( major=0 ; major < _IO_Number_of_drivers ; major ++ )
46e38: 5282 addql #1,%d2
(void) rtems_io_initialize( major, 0, NULL );
46e3a: 4e92 jsr %a2@
void _IO_Initialize_all_drivers( void )
{
rtems_device_major_number major;
for ( major=0 ; major < _IO_Number_of_drivers ; major ++ )
46e3c: 4fef 000c lea %sp@(12),%sp
46e40: b4b9 0005 e62a cmpl 5e62a <_IO_Number_of_drivers>,%d2
46e46: 65ea bcss 46e32 <_IO_Initialize_all_drivers+0x18>
(void) rtems_io_initialize( major, 0, NULL );
}
46e48: 242e fff8 movel %fp@(-8),%d2
46e4c: 246e fffc moveal %fp@(-4),%a2
46e50: 4e5e unlk %fp <== NOT EXECUTED
00046d80 <_IO_Manager_initialization>:
* workspace.
*
*/
void _IO_Manager_initialization(void)
{
46d80: 4e56 fff0 linkw %fp,#-16
46d84: 48d7 003c moveml %d2-%d5,%sp@
uint32_t index;
rtems_driver_address_table *driver_table;
uint32_t drivers_in_table;
uint32_t number_of_drivers;
driver_table = Configuration.Device_driver_table;
46d88: 2639 0005 cd26 movel 5cd26 <Configuration+0x32>,%d3
drivers_in_table = Configuration.number_of_device_drivers;
46d8e: 2439 0005 cd22 movel 5cd22 <Configuration+0x2e>,%d2
number_of_drivers = Configuration.maximum_drivers;
46d94: 2839 0005 cd1e movel 5cd1e <Configuration+0x2a>,%d4
/*
* If the user claims there are less drivers than are actually in
* the table, then let's just go with the table's count.
*/
if ( number_of_drivers <= drivers_in_table )
46d9a: b882 cmpl %d2,%d4
46d9c: 6366 blss 46e04 <_IO_Manager_initialization+0x84>
* The application requested extra slots in the driver table, so we
* have to allocate a new driver table and copy theirs to it.
*/
_IO_Driver_address_table = (rtems_driver_address_table *)
_Workspace_Allocate_or_fatal_error(
46d9e: 2004 movel %d4,%d0
46da0: 2a04 movel %d4,%d5
46da2: e788 lsll #3,%d0
46da4: eb8d lsll #5,%d5
46da6: 9a80 subl %d0,%d5
46da8: 2f05 movel %d5,%sp@-
46daa: 4eb9 0004 9c76 jsr 49c76 <_Workspace_Allocate_or_fatal_error>
sizeof( rtems_driver_address_table ) * ( number_of_drivers )
);
_IO_Number_of_drivers = number_of_drivers;
memset(
46db0: 2f05 movel %d5,%sp@-
46db2: 42a7 clrl %sp@-
/*
* The application requested extra slots in the driver table, so we
* have to allocate a new driver table and copy theirs to it.
*/
_IO_Driver_address_table = (rtems_driver_address_table *)
46db4: 23c0 0005 e62e movel %d0,5e62e <_IO_Driver_address_table>
_Workspace_Allocate_or_fatal_error(
sizeof( rtems_driver_address_table ) * ( number_of_drivers )
);
_IO_Number_of_drivers = number_of_drivers;
memset(
46dba: 2f00 movel %d0,%sp@-
_IO_Driver_address_table = (rtems_driver_address_table *)
_Workspace_Allocate_or_fatal_error(
sizeof( rtems_driver_address_table ) * ( number_of_drivers )
);
_IO_Number_of_drivers = number_of_drivers;
46dbc: 23c4 0005 e62a movel %d4,5e62a <_IO_Number_of_drivers>
memset(
46dc2: 4eb9 0004 e388 jsr 4e388 <memset>
_IO_Driver_address_table, 0,
sizeof( rtems_driver_address_table ) * ( number_of_drivers )
);
for ( index = 0 ; index < drivers_in_table ; index++ )
46dc8: 4fef 0010 lea %sp@(16),%sp
46dcc: 4a82 tstl %d2
46dce: 672a beqs 46dfa <_IO_Manager_initialization+0x7a><== NEVER TAKEN
46dd0: 2839 0005 e62e movel 5e62e <_IO_Driver_address_table>,%d4
46dd6: 4280 clrl %d0
46dd8: 4281 clrl %d1
_IO_Driver_address_table[index] = driver_table[index];
46dda: 2243 moveal %d3,%a1
46ddc: 2044 moveal %d4,%a0
46dde: d3c0 addal %d0,%a1
46de0: d1c0 addal %d0,%a0
memset(
_IO_Driver_address_table, 0,
sizeof( rtems_driver_address_table ) * ( number_of_drivers )
);
for ( index = 0 ; index < drivers_in_table ; index++ )
46de2: 5281 addql #1,%d1
46de4: 0680 0000 0018 addil #24,%d0
_IO_Driver_address_table[index] = driver_table[index];
46dea: 20d9 movel %a1@+,%a0@+
46dec: 20d9 movel %a1@+,%a0@+
46dee: 20d9 movel %a1@+,%a0@+
46df0: 20d9 movel %a1@+,%a0@+
46df2: 20d9 movel %a1@+,%a0@+
46df4: 2091 movel %a1@,%a0@
memset(
_IO_Driver_address_table, 0,
sizeof( rtems_driver_address_table ) * ( number_of_drivers )
);
for ( index = 0 ; index < drivers_in_table ; index++ )
46df6: b282 cmpl %d2,%d1
46df8: 65e0 bcss 46dda <_IO_Manager_initialization+0x5a>
_IO_Driver_address_table[index] = driver_table[index];
number_of_drivers = drivers_in_table;
}
46dfa: 4cee 003c fff0 moveml %fp@(-16),%d2-%d5
46e00: 4e5e unlk %fp
46e02: 4e75 rts
* If the maximum number of driver is the same as the number in the
* table, then we do not have to copy the driver table. They can't
* register any dynamically.
*/
if ( number_of_drivers == drivers_in_table ) {
_IO_Driver_address_table = driver_table;
46e04: 23c3 0005 e62e movel %d3,5e62e <_IO_Driver_address_table>
_IO_Number_of_drivers = number_of_drivers;
46e0a: 23c2 0005 e62a movel %d2,5e62a <_IO_Number_of_drivers>
);
for ( index = 0 ; index < drivers_in_table ; index++ )
_IO_Driver_address_table[index] = driver_table[index];
number_of_drivers = drivers_in_table;
}
46e10: 4cee 003c fff0 moveml %fp@(-16),%d2-%d5
46e16: 4e5e unlk %fp <== NOT EXECUTED
000479c8 <_Internal_error_Occurred>:
void _Internal_error_Occurred(
Internal_errors_Source the_source,
bool is_internal,
Internal_errors_t the_error
)
{
479c8: 4e56 fffc linkw %fp,#-4
479cc: 206e 0010 moveal %fp@(16),%a0
479d0: 2f02 movel %d2,%sp@-
479d2: 222e 000c movel %fp@(12),%d1
_Internal_errors_What_happened.the_source = the_source;
_Internal_errors_What_happened.is_internal = is_internal;
_Internal_errors_What_happened.the_error = the_error;
_User_extensions_Fatal( the_source, is_internal, the_error );
479d6: 4282 clrl %d2
479d8: 1401 moveb %d1,%d2
479da: 2242 moveal %d2,%a1
479dc: 2f08 movel %a0,%sp@-
void _Internal_error_Occurred(
Internal_errors_Source the_source,
bool is_internal,
Internal_errors_t the_error
)
{
479de: 202e 0008 movel %fp@(8),%d0
_Internal_errors_What_happened.the_source = the_source;
_Internal_errors_What_happened.is_internal = is_internal;
_Internal_errors_What_happened.the_error = the_error;
_User_extensions_Fatal( the_source, is_internal, the_error );
479e2: 2f09 movel %a1,%sp@-
Internal_errors_t the_error
)
{
_Internal_errors_What_happened.the_source = the_source;
_Internal_errors_What_happened.is_internal = is_internal;
479e4: 13c1 0005 e4b6 moveb %d1,5e4b6 <_Internal_errors_What_happened+0x4>
_Internal_errors_What_happened.the_error = the_error;
_User_extensions_Fatal( the_source, is_internal, the_error );
479ea: 2d48 fffc movel %a0,%fp@(-4)
bool is_internal,
Internal_errors_t the_error
)
{
_Internal_errors_What_happened.the_source = the_source;
479ee: 23c0 0005 e4b2 movel %d0,5e4b2 <_Internal_errors_What_happened>
_Internal_errors_What_happened.is_internal = is_internal;
_Internal_errors_What_happened.the_error = the_error;
479f4: 23c8 0005 e4b8 movel %a0,5e4b8 <_Internal_errors_What_happened+0x6>
_User_extensions_Fatal( the_source, is_internal, the_error );
479fa: 2f00 movel %d0,%sp@-
479fc: 4eb9 0004 9802 jsr 49802 <_User_extensions_Fatal>
_System_state_Set( SYSTEM_STATE_FAILED );
_CPU_Fatal_halt( the_error );
47a02: 206e fffc moveal %fp@(-4),%a0 <== NOT EXECUTED
47a06: 327c 0700 moveaw #1792,%a1 <== NOT EXECUTED
47a0a: 2409 movel %a1,%d2 <== NOT EXECUTED
47a0c: 40c0 movew %sr,%d0 <== NOT EXECUTED
47a0e: 8082 orl %d2,%d0 <== NOT EXECUTED
47a10: 46c0 movew %d0,%sr <== NOT EXECUTED
47a12: 2008 movel %a0,%d0 <== NOT EXECUTED
47a14: 223c dead beef movel #-559038737,%d1 <== NOT EXECUTED
47a1a: 4ac8 halt <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _System_state_Set (
System_state_Codes state
)
{
_System_state_Current = state;
47a1c: 7005 moveq #5,%d0 <== NOT EXECUTED
47a1e: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
47a22: 23c0 0005 e588 movel %d0,5e588 <_System_state_Current> <== NOT EXECUTED
47a28: 60fe bras 47a28 <_Internal_error_Occurred+0x60> <== NOT EXECUTED
...
00047a8c <_Objects_Allocate>:
*/
Objects_Control *_Objects_Allocate(
Objects_Information *information
)
{
47a8c: 4e56 fff0 linkw %fp,#-16
47a90: 48d7 0c0c moveml %d2-%d3/%a2-%a3,%sp@
47a94: 246e 0008 moveal %fp@(8),%a2
* 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 )
47a98: 4aaa 0014 tstl %a2@(20)
47a9c: 660c bnes 47aaa <_Objects_Allocate+0x1e> <== ALWAYS TAKEN
return NULL;
47a9e: 4280 clrl %d0 <== NOT EXECUTED
);
}
#endif
return the_object;
}
47aa0: 4cee 0c0c fff0 moveml %fp@(-16),%d2-%d3/%a2-%a3
47aa6: 4e5e unlk %fp
47aa8: 4e75 rts
/*
* 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 );
47aaa: 240a movel %a2,%d2
47aac: 0682 0000 001c addil #28,%d2
47ab2: 47f9 0004 709c lea 4709c <_Chain_Get>,%a3
47ab8: 2f02 movel %d2,%sp@-
47aba: 4e93 jsr %a3@
if ( information->auto_extend ) {
47abc: 588f addql #4,%sp
47abe: 4a2a 0010 tstb %a2@(16)
47ac2: 67dc beqs 47aa0 <_Objects_Allocate+0x14>
/*
* If the list is empty then we are out of objects and need to
* extend information base.
*/
if ( !the_object ) {
47ac4: 4a80 tstl %d0
47ac6: 6738 beqs 47b00 <_Objects_Allocate+0x74>
}
if ( the_object ) {
uint32_t block;
block = (uint32_t) _Objects_Get_index( the_object->id ) -
47ac8: 2040 moveal %d0,%a0
47aca: 4281 clrl %d1
47acc: 4283 clrl %d3
_Objects_Get_index( information->minimum_id );
block /= information->allocation_size;
47ace: 4282 clrl %d2
}
if ( the_object ) {
uint32_t block;
block = (uint32_t) _Objects_Get_index( the_object->id ) -
47ad0: 362a 0008 movew %a2@(8),%d3
47ad4: 3228 000a movew %a0@(10),%d1
_Objects_Get_index( information->minimum_id );
block /= information->allocation_size;
47ad8: 342a 0012 movew %a2@(18),%d2
information->inactive_per_block[ block ]--;
47adc: 206a 002a moveal %a2@(42),%a0
}
if ( the_object ) {
uint32_t block;
block = (uint32_t) _Objects_Get_index( the_object->id ) -
47ae0: 9283 subl %d3,%d1
_Objects_Get_index( information->minimum_id );
block /= information->allocation_size;
47ae2: 4c42 1001 remul %d2,%d1,%d1
information->inactive_per_block[ block ]--;
information->inactive--;
47ae6: 326a 0028 moveaw %a2@(40),%a1
block = (uint32_t) _Objects_Get_index( the_object->id ) -
_Objects_Get_index( information->minimum_id );
block /= information->allocation_size;
information->inactive_per_block[ block ]--;
47aea: e589 lsll #2,%d1
information->inactive--;
47aec: 5389 subql #1,%a1
block = (uint32_t) _Objects_Get_index( the_object->id ) -
_Objects_Get_index( information->minimum_id );
block /= information->allocation_size;
information->inactive_per_block[ block ]--;
47aee: d1c1 addal %d1,%a0
47af0: 5390 subql #1,%a0@
information->inactive--;
47af2: 3549 0028 movew %a1,%a2@(40)
);
}
#endif
return the_object;
}
47af6: 4cee 0c0c fff0 moveml %fp@(-16),%d2-%d3/%a2-%a3
47afc: 4e5e unlk %fp
47afe: 4e75 rts
* If the list is empty then we are out of objects and need to
* extend information base.
*/
if ( !the_object ) {
_Objects_Extend_information( information );
47b00: 2f0a movel %a2,%sp@-
47b02: 4eb9 0004 7b48 jsr 47b48 <_Objects_Extend_information>
the_object = (Objects_Control *) _Chain_Get( &information->Inactive );
47b08: 2f02 movel %d2,%sp@-
47b0a: 4e93 jsr %a3@
}
if ( the_object ) {
47b0c: 508f addql #8,%sp
47b0e: 4a80 tstl %d0
47b10: 66b6 bnes 47ac8 <_Objects_Allocate+0x3c>
);
}
#endif
return the_object;
}
47b12: 4cee 0c0c fff0 moveml %fp@(-16),%d2-%d3/%a2-%a3
47b18: 4e5e unlk %fp <== NOT EXECUTED
00047b1c <_Objects_Close>:
RTEMS_INLINE_ROUTINE void _Objects_Invalidate_Id(
Objects_Information *information,
Objects_Control *the_object
)
{
_Objects_Set_local_object(
47b1c: 4280 clrl %d0
void _Objects_Close(
Objects_Information *information,
Objects_Control *the_object
)
{
47b1e: 4e56 0000 linkw %fp,#0
47b22: 226e 000c moveal %fp@(12),%a1
47b26: 206e 0008 moveal %fp@(8),%a0
47b2a: 2f0a movel %a2,%sp@-
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
47b2c: 2468 0018 moveal %a0@(24),%a2
RTEMS_INLINE_ROUTINE void _Objects_Invalidate_Id(
Objects_Information *information,
Objects_Control *the_object
)
{
_Objects_Set_local_object(
47b30: 3029 000a movew %a1@(10),%d0
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
47b34: 42b2 0c00 clrl %a2@(00000000,%d0:l:4)
_Objects_Invalidate_Id( information, the_object );
_Objects_Namespace_remove( information, the_object );
}
47b38: 245f moveal %sp@+,%a2
Objects_Control *the_object
)
{
_Objects_Invalidate_Id( information, the_object );
_Objects_Namespace_remove( information, the_object );
47b3a: 2d49 000c movel %a1,%fp@(12)
}
47b3e: 4e5e unlk %fp
Objects_Control *the_object
)
{
_Objects_Invalidate_Id( information, the_object );
_Objects_Namespace_remove( information, the_object );
47b40: 4ef9 0004 80c0 jmp 480c0 <_Objects_Namespace_remove>
...
00047b48 <_Objects_Extend_information>:
*/
void _Objects_Extend_information(
Objects_Information *information
)
{
47b48: 4e56 ffcc linkw %fp,#-52
47b4c: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
47b50: 246e 0008 moveal %fp@(8),%a2
/*
* 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 );
47b54: 4285 clrl %d5
index_base = minimum_index;
block = 0;
/* if ( information->maximum < minimum_index ) */
if ( information->object_blocks == NULL )
47b56: 206a 002e moveal %a2@(46),%a0
/*
* 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 );
47b5a: 3a2a 0008 movew %a2@(8),%d5
index_base = minimum_index;
block = 0;
/* if ( information->maximum < minimum_index ) */
if ( information->object_blocks == NULL )
47b5e: 4a88 tstl %a0
47b60: 6700 0232 beqw 47d94 <_Objects_Extend_information+0x24c>
block_count = 0;
else {
block_count = information->maximum / information->allocation_size;
47b64: 322a 000e movew %a2@(14),%d1
47b68: 302a 0012 movew %a2@(18),%d0
47b6c: 3801 movew %d1,%d4
47b6e: 0284 0000 ffff andil #65535,%d4
47b74: 88c0 divuw %d0,%d4
47b76: 0284 0000 ffff andil #65535,%d4
for ( ; block < block_count; block++ ) {
47b7c: 6700 022c beqw 47daa <_Objects_Extend_information+0x262>
if ( information->object_blocks[ block ] == NULL ) {
47b80: 4a90 tstl %a0@
47b82: 6700 0236 beqw 47dba <_Objects_Extend_information+0x272>
* information - object information table
*
* Output parameters: NONE
*/
void _Objects_Extend_information(
47b86: 5888 addql #4,%a0
/*
* 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 );
47b88: 2605 movel %d5,%d3
index_base = minimum_index;
block = 0;
47b8a: 4282 clrl %d2
block_count = 0;
else {
block_count = information->maximum / information->allocation_size;
for ( ; block < block_count; block++ ) {
if ( information->object_blocks[ block ] == NULL ) {
47b8c: 0280 0000 ffff andil #65535,%d0
do_extend = false;
break;
} else
index_base += information->allocation_size;
47b92: d680 addl %d0,%d3
if ( information->object_blocks == NULL )
block_count = 0;
else {
block_count = information->maximum / information->allocation_size;
for ( ; block < block_count; block++ ) {
47b94: 5282 addql #1,%d2
47b96: b484 cmpl %d4,%d2
47b98: 6400 01a6 bccw 47d40 <_Objects_Extend_information+0x1f8>
if ( information->object_blocks[ block ] == NULL ) {
47b9c: 4a98 tstl %a0@+
47b9e: 66f2 bnes 47b92 <_Objects_Extend_information+0x4a>
do_extend = false;
47ba0: 4207 clrb %d7
} else
index_base += information->allocation_size;
}
}
maximum = (uint32_t) information->maximum + information->allocation_size;
47ba2: 0281 0000 ffff andil #65535,%d1
47ba8: 2641 moveal %d1,%a3
47baa: d7c0 addal %d0,%a3
/*
* 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 ) {
47bac: b7fc 0000 ffff cmpal #65535,%a3
47bb2: 6200 0182 bhiw 47d36 <_Objects_Extend_information+0x1ee>
/*
* 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;
47bb6: 41ea 0014 lea %a2@(20),%a0
47bba: 4c10 0800 mulsl %a0@,%d0
if ( information->auto_extend ) {
47bbe: 4a2a 0010 tstb %a2@(16)
47bc2: 6700 0182 beqw 47d46 <_Objects_Extend_information+0x1fe>
new_object_block = _Workspace_Allocate( block_size );
47bc6: 2f00 movel %d0,%sp@-
47bc8: 4eb9 0004 9c42 jsr 49c42 <_Workspace_Allocate>
if ( !new_object_block )
47bce: 588f addql #4,%sp
* 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;
if ( information->auto_extend ) {
new_object_block = _Workspace_Allocate( block_size );
47bd0: 2c00 movel %d0,%d6
if ( !new_object_block )
47bd2: 6700 0162 beqw 47d36 <_Objects_Extend_information+0x1ee>
}
/*
* Do we need to grow the tables?
*/
if ( do_extend ) {
47bd6: 4a07 tstb %d7
47bd8: 6700 00c4 beqw 47c9e <_Objects_Extend_information+0x156>
*/
/*
* Up the block count and maximum
*/
block_count++;
47bdc: 2a44 moveal %d4,%a5
47bde: 528d addql #1,%a5
/*
* 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 *));
47be0: 200b movel %a3,%d0
/*
* Allocate the tables and break it up.
*/
block_size = block_count *
(sizeof(void *) + sizeof(uint32_t) + sizeof(Objects_Name *)) +
47be2: 41f5 da00 lea %a5@(00000000,%a5:l:2),%a0
((maximum + minimum_index) * sizeof(Objects_Control *));
47be6: d088 addl %a0,%d0
/*
* Allocate the tables and break it up.
*/
block_size = block_count *
(sizeof(void *) + sizeof(uint32_t) + sizeof(Objects_Name *)) +
47be8: d085 addl %d5,%d0
block_count++;
/*
* Allocate the tables and break it up.
*/
block_size = block_count *
47bea: e588 lsll #2,%d0
(sizeof(void *) + sizeof(uint32_t) + sizeof(Objects_Name *)) +
((maximum + minimum_index) * sizeof(Objects_Control *));
object_blocks = (void**) _Workspace_Allocate( block_size );
47bec: 2f00 movel %d0,%sp@-
47bee: 4eb9 0004 9c42 jsr 49c42 <_Workspace_Allocate>
if ( !object_blocks ) {
47bf4: 588f addql #4,%sp
* 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 );
47bf6: 2840 moveal %d0,%a4
if ( !object_blocks ) {
47bf8: 4a80 tstl %d0
47bfa: 6700 01ce beqw 47dca <_Objects_Extend_information+0x282>
}
/*
* Break the block into the various sections.
*/
inactive_per_block = (uint32_t *) _Addresses_Add_offset(
47bfe: 2e0d movel %a5,%d7
* Take the block count down. Saves all the (block_count - 1)
* in the copies.
*/
block_count--;
if ( information->maximum > minimum_index ) {
47c00: 4280 clrl %d0
}
/*
* Break the block into the various sections.
*/
inactive_per_block = (uint32_t *) _Addresses_Add_offset(
47c02: e58f lsll #2,%d7
* Take the block count down. Saves all the (block_count - 1)
* in the copies.
*/
block_count--;
if ( information->maximum > minimum_index ) {
47c04: 302a 000e movew %a2@(14),%d0
47c08: 4bf4 7800 lea %a4@(00000000,%d7:l),%a5
47c0c: de8d addl %a5,%d7
47c0e: b085 cmpl %d5,%d0
47c10: 6200 0144 bhiw 47d56 <_Objects_Extend_information+0x20e>
} else {
/*
* Deal with the special case of the 0 to minimum_index
*/
for ( index = 0; index < minimum_index; index++ ) {
47c14: 4a85 tstl %d5
47c16: 670c beqs 47c24 <_Objects_Extend_information+0xdc><== NEVER TAKEN
47c18: 2047 moveal %d7,%a0
47c1a: 4280 clrl %d0
local_table[ index ] = NULL;
47c1c: 4298 clrl %a0@+
} else {
/*
* Deal with the special case of the 0 to minimum_index
*/
for ( index = 0; index < minimum_index; index++ ) {
47c1e: 5280 addql #1,%d0
47c20: b085 cmpl %d5,%d0
47c22: 65f8 bcss 47c1c <_Objects_Extend_information+0xd4><== NEVER TAKEN
47c24: e58c lsll #2,%d4
*/
object_blocks[block_count] = NULL;
inactive_per_block[block_count] = 0;
for ( index=index_base ;
index < ( information->allocation_size + index_base );
47c26: 4281 clrl %d1
}
/*
* Initialise the new entries in the table.
*/
object_blocks[block_count] = NULL;
47c28: 42b4 4800 clrl %a4@(00000000,%d4:l)
inactive_per_block[block_count] = 0;
for ( index=index_base ;
index < ( information->allocation_size + index_base );
47c2c: 322a 0012 movew %a2@(18),%d1
/*
* Initialise the new entries in the table.
*/
object_blocks[block_count] = NULL;
inactive_per_block[block_count] = 0;
47c30: 42b5 4800 clrl %a5@(00000000,%d4:l)
for ( index=index_base ;
index < ( information->allocation_size + index_base );
47c34: d283 addl %d3,%d1
* Initialise the new entries in the table.
*/
object_blocks[block_count] = NULL;
inactive_per_block[block_count] = 0;
for ( index=index_base ;
47c36: b283 cmpl %d3,%d1
47c38: 6310 blss 47c4a <_Objects_Extend_information+0x102><== NEVER TAKEN
47c3a: 2247 moveal %d7,%a1
* information - object information table
*
* Output parameters: NONE
*/
void _Objects_Extend_information(
47c3c: 2003 movel %d3,%d0
* Initialise the new entries in the table.
*/
object_blocks[block_count] = NULL;
inactive_per_block[block_count] = 0;
for ( index=index_base ;
47c3e: 41f1 3c00 lea %a1@(00000000,%d3:l:4),%a0
index < ( information->allocation_size + index_base );
index++ ) {
local_table[ index ] = NULL;
47c42: 4298 clrl %a0@+
object_blocks[block_count] = NULL;
inactive_per_block[block_count] = 0;
for ( index=index_base ;
index < ( information->allocation_size + index_base );
index++ ) {
47c44: 5280 addql #1,%d0
* Initialise the new entries in the table.
*/
object_blocks[block_count] = NULL;
inactive_per_block[block_count] = 0;
for ( index=index_base ;
47c46: b280 cmpl %d0,%d1
47c48: 62f8 bhis 47c42 <_Objects_Extend_information+0xfa>
index < ( information->allocation_size + index_base );
index++ ) {
local_table[ index ] = NULL;
}
_ISR_Disable( level );
47c4a: 203c 0000 0700 movel #1792,%d0
47c50: 40c4 movew %sr,%d4
47c52: 8084 orl %d4,%d0
47c54: 46c0 movew %d0,%sr
uint32_t the_class,
uint32_t node,
uint32_t index
)
{
return (( (Objects_Id) the_api ) << OBJECTS_API_START_BIT) |
47c56: 2012 movel %a2@,%d0
47c58: 7a18 moveq #24,%d5
information->object_blocks = object_blocks;
information->inactive_per_block = inactive_per_block;
information->local_table = local_table;
information->maximum = (Objects_Maximum) maximum;
information->maximum_id = _Objects_Build_id(
47c5a: 4281 clrl %d1
47c5c: eba8 lsll %d5,%d0
47c5e: 4285 clrl %d5
47c60: 3a0b movew %a3,%d5
47c62: 322a 0004 movew %a2@(4),%d1
47c66: 08c0 0010 bset #16,%d0
47c6a: 2245 moveal %d5,%a1
(( (Objects_Id) the_class ) << OBJECTS_CLASS_START_BIT) |
47c6c: 7a1b moveq #27,%d5
47c6e: eba9 lsll %d5,%d1
local_table[ index ] = NULL;
}
_ISR_Disable( level );
old_tables = information->object_blocks;
47c70: 206a 002e moveal %a2@(46),%a0
47c74: 8081 orl %d1,%d0
uint32_t the_class,
uint32_t node,
uint32_t index
)
{
return (( (Objects_Id) the_api ) << OBJECTS_API_START_BIT) |
47c76: 2209 movel %a1,%d1
47c78: 8280 orl %d0,%d1
information->object_blocks = object_blocks;
information->inactive_per_block = inactive_per_block;
information->local_table = local_table;
information->maximum = (Objects_Maximum) maximum;
47c7a: 354b 000e movew %a3,%a2@(14)
_ISR_Disable( level );
old_tables = information->object_blocks;
information->object_blocks = object_blocks;
47c7e: 254c 002e movel %a4,%a2@(46)
information->inactive_per_block = inactive_per_block;
47c82: 254d 002a movel %a5,%a2@(42)
47c86: 2541 000a movel %d1,%a2@(10)
information->local_table = local_table;
47c8a: 2547 0018 movel %d7,%a2@(24)
information->the_class,
_Objects_Local_node,
information->maximum
);
_ISR_Enable( level );
47c8e: 46c4 movew %d4,%sr
if ( old_tables )
47c90: 4a88 tstl %a0
47c92: 670a beqs 47c9e <_Objects_Extend_information+0x156>
_Workspace_Free( old_tables );
47c94: 2f08 movel %a0,%sp@-
47c96: 4eb9 0004 9c5e jsr 49c5e <_Workspace_Free>
47c9c: 588f addql #4,%sp
}
/*
* Assign the new object block to the object block table.
*/
information->object_blocks[ block ] = new_object_block;
47c9e: 206a 002e moveal %a2@(46),%a0
/*
* Initialize objects .. add to a local chain first.
*/
_Chain_Initialize(
47ca2: 4280 clrl %d0
47ca4: 280e movel %fp,%d4
47ca6: 0684 ffff fff4 addil #-12,%d4
47cac: 47f9 0004 709c lea 4709c <_Chain_Get>,%a3
information->the_class,
_Objects_Local_node,
index
);
_Chain_Append( &information->Inactive, &the_object->Node );
47cb2: 2a0a movel %a2,%d5
47cb4: 0685 0000 001c addil #28,%d5
47cba: 49f9 0004 703c lea 4703c <_Chain_Append>,%a4
}
/*
* Assign the new object block to the object block table.
*/
information->object_blocks[ block ] = new_object_block;
47cc0: e58a lsll #2,%d2
/*
* Initialize objects .. add to a local chain first.
*/
_Chain_Initialize(
47cc2: 302a 0012 movew %a2@(18),%d0
}
/*
* Assign the new object block to the object block table.
*/
information->object_blocks[ block ] = new_object_block;
47cc6: 2186 2800 movel %d6,%a0@(00000000,%d2:l)
/*
* Initialize objects .. add to a local chain first.
*/
_Chain_Initialize(
47cca: 2f2a 0014 movel %a2@(20),%sp@-
47cce: 2f00 movel %d0,%sp@-
47cd0: 2f06 movel %d6,%sp@-
47cd2: 2f04 movel %d4,%sp@-
47cd4: 4eb9 0004 ba64 jsr 4ba64 <_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 ) {
47cda: 4fef 0010 lea %sp@(16),%sp
47cde: 2f04 movel %d4,%sp@-
47ce0: 4e93 jsr %a3@
47ce2: 588f addql #4,%sp
47ce4: 4a80 tstl %d0
47ce6: 6734 beqs 47d1c <_Objects_Extend_information+0x1d4><== NEVER TAKEN
47ce8: 2212 movel %a2@,%d1
47cea: 7e18 moveq #24,%d7
the_object->id = _Objects_Build_id(
47cec: 4286 clrl %d6
47cee: 2040 moveal %d0,%a0
47cf0: 3c2a 0004 movew %a2@(4),%d6
47cf4: efa9 lsll %d7,%d1
(( (Objects_Id) the_class ) << OBJECTS_CLASS_START_BIT) |
47cf6: 1e3c 001b moveb #27,%d7
uint32_t the_class,
uint32_t node,
uint32_t index
)
{
return (( (Objects_Id) the_api ) << OBJECTS_API_START_BIT) |
47cfa: 08c1 0010 bset #16,%d1
(( (Objects_Id) the_class ) << OBJECTS_CLASS_START_BIT) |
47cfe: efae lsll %d7,%d6
47d00: 8286 orl %d6,%d1
uint32_t the_class,
uint32_t node,
uint32_t index
)
{
return (( (Objects_Id) the_api ) << OBJECTS_API_START_BIT) |
47d02: 8283 orl %d3,%d1
index
);
_Chain_Append( &information->Inactive, &the_object->Node );
index++;
47d04: 5283 addql #1,%d3
47d06: 2141 0008 movel %d1,%a0@(8)
information->the_class,
_Objects_Local_node,
index
);
_Chain_Append( &information->Inactive, &the_object->Node );
47d0a: 2f00 movel %d0,%sp@-
47d0c: 2f05 movel %d5,%sp@-
47d0e: 4e94 jsr %a4@
index++;
47d10: 508f addql #8,%sp
/*
* Move from the local chain, initialise, then append to the inactive chain
*/
index = index_base;
while ((the_object = (Objects_Control *) _Chain_Get( &Inactive )) != NULL ) {
47d12: 2f04 movel %d4,%sp@-
47d14: 4e93 jsr %a3@
47d16: 588f addql #4,%sp
47d18: 4a80 tstl %d0
47d1a: 66cc bnes 47ce8 <_Objects_Extend_information+0x1a0>
_Chain_Append( &information->Inactive, &the_object->Node );
index++;
}
information->inactive_per_block[ block ] = information->allocation_size;
47d1c: 4281 clrl %d1
47d1e: 302a 0012 movew %a2@(18),%d0
information->inactive =
(Objects_Maximum)(information->inactive + information->allocation_size);
47d22: 326a 0028 moveaw %a2@(40),%a1
_Chain_Append( &information->Inactive, &the_object->Node );
index++;
}
information->inactive_per_block[ block ] = information->allocation_size;
47d26: 206a 002a moveal %a2@(42),%a0
47d2a: 3200 movew %d0,%d1
information->inactive =
(Objects_Maximum)(information->inactive + information->allocation_size);
47d2c: d089 addl %a1,%d0
_Chain_Append( &information->Inactive, &the_object->Node );
index++;
}
information->inactive_per_block[ block ] = information->allocation_size;
47d2e: 2181 2800 movel %d1,%a0@(00000000,%d2:l)
information->inactive =
47d32: 3540 0028 movew %d0,%a2@(40)
(Objects_Maximum)(information->inactive + information->allocation_size);
}
47d36: 4cee 3cfc ffcc moveml %fp@(-52),%d2-%d7/%a2-%a5
47d3c: 4e5e unlk %fp
47d3e: 4e75 rts
/*
* 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;
47d40: 7e01 moveq #1,%d7
47d42: 6000 fe5e braw 47ba2 <_Objects_Extend_information+0x5a>
if ( information->auto_extend ) {
new_object_block = _Workspace_Allocate( block_size );
if ( !new_object_block )
return;
} else {
new_object_block = _Workspace_Allocate_or_fatal_error( block_size );
47d46: 2f00 movel %d0,%sp@-
47d48: 4eb9 0004 9c76 jsr 49c76 <_Workspace_Allocate_or_fatal_error>
47d4e: 588f addql #4,%sp
47d50: 2c00 movel %d0,%d6
47d52: 6000 fe82 braw 47bd6 <_Objects_Extend_information+0x8e>
/*
* 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,
47d56: e58c lsll #2,%d4
47d58: 2f04 movel %d4,%sp@-
47d5a: 2f2a 002e movel %a2@(46),%sp@-
47d5e: 2f0c movel %a4,%sp@-
47d60: 4eb9 0004 e318 jsr 4e318 <memcpy>
information->object_blocks,
block_count * sizeof(void*) );
memcpy( inactive_per_block,
47d66: 2f04 movel %d4,%sp@-
47d68: 2f2a 002a movel %a2@(42),%sp@-
47d6c: 2f0d movel %a5,%sp@-
47d6e: 4eb9 0004 e318 jsr 4e318 <memcpy>
information->inactive_per_block,
block_count * sizeof(uint32_t) );
memcpy( local_table,
information->local_table,
(information->maximum + minimum_index) * sizeof(Objects_Control *) );
47d74: 4280 clrl %d0
47d76: 302a 000e movew %a2@(14),%d0
47d7a: da80 addl %d0,%d5
information->object_blocks,
block_count * sizeof(void*) );
memcpy( inactive_per_block,
information->inactive_per_block,
block_count * sizeof(uint32_t) );
memcpy( local_table,
47d7c: e58d lsll #2,%d5
47d7e: 2f05 movel %d5,%sp@-
47d80: 2f2a 0018 movel %a2@(24),%sp@-
47d84: 2f07 movel %d7,%sp@-
47d86: 4eb9 0004 e318 jsr 4e318 <memcpy>
47d8c: 4fef 0024 lea %sp@(36),%sp
47d90: 6000 fe94 braw 47c26 <_Objects_Extend_information+0xde>
minimum_index = _Objects_Get_index( information->minimum_id );
index_base = minimum_index;
block = 0;
/* if ( information->maximum < minimum_index ) */
if ( information->object_blocks == NULL )
47d94: 4280 clrl %d0
/*
* 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 );
47d96: 2605 movel %d5,%d3
index_base = minimum_index;
block = 0;
47d98: 4282 clrl %d2
/* if ( information->maximum < minimum_index ) */
if ( information->object_blocks == NULL )
block_count = 0;
47d9a: 4284 clrl %d4
minimum_index = _Objects_Get_index( information->minimum_id );
index_base = minimum_index;
block = 0;
/* if ( information->maximum < minimum_index ) */
if ( information->object_blocks == NULL )
47d9c: 322a 000e movew %a2@(14),%d1
47da0: 302a 0012 movew %a2@(18),%d0
/*
* 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;
47da4: 7e01 moveq #1,%d7
47da6: 6000 fdfa braw 47ba2 <_Objects_Extend_information+0x5a>
minimum_index = _Objects_Get_index( information->minimum_id );
47daa: 2605 movel %d5,%d3 <== NOT EXECUTED
index_base = minimum_index;
block = 0;
47dac: 4282 clrl %d2 <== NOT EXECUTED
if ( information->object_blocks == NULL )
block_count = 0;
else {
block_count = information->maximum / information->allocation_size;
for ( ; block < block_count; block++ ) {
47dae: 0280 0000 ffff andil #65535,%d0 <== NOT EXECUTED
/*
* 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;
47db4: 7e01 moveq #1,%d7 <== NOT EXECUTED
47db6: 6000 fdea braw 47ba2 <_Objects_Extend_information+0x5a><== NOT EXECUTED
minimum_index = _Objects_Get_index( information->minimum_id );
47dba: 2605 movel %d5,%d3 <== NOT EXECUTED
index_base = minimum_index;
block = 0;
47dbc: 4282 clrl %d2 <== NOT EXECUTED
block_count = 0;
else {
block_count = information->maximum / information->allocation_size;
for ( ; block < block_count; block++ ) {
if ( information->object_blocks[ block ] == NULL ) {
47dbe: 0280 0000 ffff andil #65535,%d0 <== NOT EXECUTED
do_extend = false;
47dc4: 4207 clrb %d7 <== NOT EXECUTED
47dc6: 6000 fdda braw 47ba2 <_Objects_Extend_information+0x5a><== NOT EXECUTED
(sizeof(void *) + sizeof(uint32_t) + sizeof(Objects_Name *)) +
((maximum + minimum_index) * sizeof(Objects_Control *));
object_blocks = (void**) _Workspace_Allocate( block_size );
if ( !object_blocks ) {
_Workspace_Free( new_object_block );
47dca: 2f06 movel %d6,%sp@-
47dcc: 4eb9 0004 9c5e jsr 49c5e <_Workspace_Free>
return;
47dd2: 588f addql #4,%sp
}
information->inactive_per_block[ block ] = information->allocation_size;
information->inactive =
(Objects_Maximum)(information->inactive + information->allocation_size);
}
47dd4: 4cee 3cfc ffcc moveml %fp@(-52),%d2-%d7/%a2-%a5
47dda: 4e5e unlk %fp
...
00047e90 <_Objects_Get_information>:
Objects_Information *_Objects_Get_information(
Objects_APIs the_api,
uint32_t the_class
)
{
47e90: 4e56 0000 linkw %fp,#0
47e94: 2f02 movel %d2,%sp@-
47e96: 242e 000c movel %fp@(12),%d2
Objects_Information *info;
int the_class_api_maximum;
if ( !the_class )
47e9a: 660a bnes 47ea6 <_Objects_Get_information+0x16>
if ( the_class > (uint32_t) the_class_api_maximum )
return NULL;
if ( !_Objects_Information_table[ the_api ] )
return NULL;
47e9c: 4280 clrl %d0
if ( info->maximum == 0 )
return NULL;
#endif
return info;
}
47e9e: 242e fffc movel %fp@(-4),%d2
47ea2: 4e5e unlk %fp
47ea4: 4e75 rts
/*
* 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 );
47ea6: 2f2e 0008 movel %fp@(8),%sp@-
47eaa: 4eb9 0004 bfac jsr 4bfac <_Objects_API_maximum_class>
if ( the_class_api_maximum == 0 )
47eb0: 588f addql #4,%sp
47eb2: 4a80 tstl %d0
47eb4: 67e6 beqs 47e9c <_Objects_Get_information+0xc>
return NULL;
if ( the_class > (uint32_t) the_class_api_maximum )
47eb6: b082 cmpl %d2,%d0
47eb8: 65e2 bcss 47e9c <_Objects_Get_information+0xc>
return NULL;
if ( !_Objects_Information_table[ the_api ] )
47eba: 202e 0008 movel %fp@(8),%d0
47ebe: 41f9 0005 e3d8 lea 5e3d8 <_Objects_Information_table>,%a0
47ec4: 2070 0c00 moveal %a0@(00000000,%d0:l:4),%a0
47ec8: 4a88 tstl %a0
47eca: 67d0 beqs 47e9c <_Objects_Get_information+0xc> <== NEVER TAKEN
return NULL;
info = _Objects_Information_table[ the_api ][ the_class ];
47ecc: 2030 2c00 movel %a0@(00000000,%d2:l:4),%d0
if ( !info )
47ed0: 67cc beqs 47e9e <_Objects_Get_information+0xe> <== NEVER TAKEN
* Thus we may have 0 local instances and still have a valid object
* pointer.
*/
#if !defined(RTEMS_MULTIPROCESSING)
if ( info->maximum == 0 )
return NULL;
47ed2: 2040 moveal %d0,%a0
47ed4: 4a68 000e tstw %a0@(14)
47ed8: 56c1 sne %d1
#endif
return info;
}
47eda: 242e fffc movel %fp@(-4),%d2
* Thus we may have 0 local instances and still have a valid object
* pointer.
*/
#if !defined(RTEMS_MULTIPROCESSING)
if ( info->maximum == 0 )
return NULL;
47ede: 49c1 extbl %d1
#endif
return info;
}
47ee0: 4e5e unlk %fp
* Thus we may have 0 local instances and still have a valid object
* pointer.
*/
#if !defined(RTEMS_MULTIPROCESSING)
if ( info->maximum == 0 )
return NULL;
47ee2: c081 andl %d1,%d0
#endif
return info;
}
...
00049988 <_Objects_Get_name_as_string>:
char *_Objects_Get_name_as_string(
Objects_Id id,
size_t length,
char *name
)
{
49988: 4e56 ffdc linkw %fp,#-36
4998c: 48d7 0c3c moveml %d2-%d5/%a2-%a3,%sp@
49990: 262e 000c movel %fp@(12),%d3
49994: 242e 0010 movel %fp@(16),%d2
char lname[5];
Objects_Control *the_object;
Objects_Locations location;
Objects_Id tmpId;
if ( length == 0 )
49998: 4a83 tstl %d3
4999a: 660e bnes 499aa <_Objects_Get_name_as_string+0x22>
#if defined(RTEMS_MULTIPROCESSING)
case OBJECTS_REMOTE:
/* not supported */
#endif
case OBJECTS_ERROR:
return NULL;
4999c: 4282 clrl %d2
_Thread_Enable_dispatch();
return name;
}
return NULL; /* unreachable path */
}
4999e: 2002 movel %d2,%d0
499a0: 4cee 0c3c ffdc moveml %fp@(-36),%d2-%d5/%a2-%a3
499a6: 4e5e unlk %fp
499a8: 4e75 rts
Objects_Id tmpId;
if ( length == 0 )
return NULL;
if ( name == NULL )
499aa: 4a82 tstl %d2
499ac: 67f0 beqs 4999e <_Objects_Get_name_as_string+0x16>
return NULL;
tmpId = (id == OBJECTS_ID_OF_SELF) ? _Thread_Executing->Object.id : id;
499ae: 4aae 0008 tstl %fp@(8)
499b2: 6600 00b4 bnew 49a68 <_Objects_Get_name_as_string+0xe0>
499b6: 2079 0006 8c28 moveal 68c28 <_Per_CPU_Information+0xc>,%a0
499bc: 2828 0008 movel %a0@(8),%d4
information = _Objects_Get_information_id( tmpId );
499c0: 2f04 movel %d4,%sp@-
499c2: 4eb9 0004 98a4 jsr 498a4 <_Objects_Get_information_id>
if ( !information )
499c8: 588f addql #4,%sp
499ca: 4a80 tstl %d0
499cc: 67ce beqs 4999c <_Objects_Get_name_as_string+0x14>
return NULL;
the_object = _Objects_Get( information, tmpId, &location );
499ce: 486e fffc pea %fp@(-4)
499d2: 2f04 movel %d4,%sp@-
499d4: 2f00 movel %d0,%sp@-
499d6: 4eb9 0004 9a7c jsr 49a7c <_Objects_Get>
switch ( location ) {
499dc: 4fef 000c lea %sp@(12),%sp
499e0: 4aae fffc tstl %fp@(-4)
499e4: 66b6 bnes 4999c <_Objects_Get_name_as_string+0x14>
if ( information->is_string ) {
s = the_object->name.name_p;
} else
#endif
{
uint32_t u32_name = (uint32_t) the_object->name.name_u32;
499e6: 2040 moveal %d0,%a0
lname[ 0 ] = (u32_name >> 24) & 0xff;
499e8: 7818 moveq #24,%d4
s = lname;
}
d = name;
if ( s ) {
for ( i=0 ; i<(length-1) && *s ; i++, s++, d++ ) {
499ea: 5383 subql #1,%d3
if ( information->is_string ) {
s = the_object->name.name_p;
} else
#endif
{
uint32_t u32_name = (uint32_t) the_object->name.name_u32;
499ec: 2228 000c movel %a0@(12),%d1
lname[ 0 ] = (u32_name >> 24) & 0xff;
499f0: 2001 movel %d1,%d0
499f2: e8a8 lsrl %d4,%d0
lname[ 1 ] = (u32_name >> 16) & 0xff;
lname[ 2 ] = (u32_name >> 8) & 0xff;
499f4: 2801 movel %d1,%d4
#endif
{
uint32_t u32_name = (uint32_t) the_object->name.name_u32;
lname[ 0 ] = (u32_name >> 24) & 0xff;
lname[ 1 ] = (u32_name >> 16) & 0xff;
499f6: 2a01 movel %d1,%d5
lname[ 2 ] = (u32_name >> 8) & 0xff;
499f8: e08c lsrl #8,%d4
lname[ 3 ] = (u32_name >> 0) & 0xff;
499fa: 1d41 fffa moveb %d1,%fp@(-6)
#endif
{
uint32_t u32_name = (uint32_t) the_object->name.name_u32;
lname[ 0 ] = (u32_name >> 24) & 0xff;
lname[ 1 ] = (u32_name >> 16) & 0xff;
499fe: 4245 clrw %d5
49a00: 4845 swap %d5
lname[ 2 ] = (u32_name >> 8) & 0xff;
lname[ 3 ] = (u32_name >> 0) & 0xff;
lname[ 4 ] = '\0';
49a02: 4201 clrb %d1
} else
#endif
{
uint32_t u32_name = (uint32_t) the_object->name.name_u32;
lname[ 0 ] = (u32_name >> 24) & 0xff;
49a04: 1d40 fff7 moveb %d0,%fp@(-9)
lname[ 1 ] = (u32_name >> 16) & 0xff;
49a08: 1d45 fff8 moveb %d5,%fp@(-8)
lname[ 2 ] = (u32_name >> 8) & 0xff;
49a0c: 1d44 fff9 moveb %d4,%fp@(-7)
lname[ 3 ] = (u32_name >> 0) & 0xff;
lname[ 4 ] = '\0';
49a10: 1d41 fffb moveb %d1,%fp@(-5)
s = lname;
}
d = name;
if ( s ) {
for ( i=0 ; i<(length-1) && *s ; i++, s++, d++ ) {
49a14: 4a83 tstl %d3
49a16: 6758 beqs 49a70 <_Objects_Get_name_as_string+0xe8><== NEVER TAKEN
49a18: 4a00 tstb %d0
49a1a: 6754 beqs 49a70 <_Objects_Get_name_as_string+0xe8>
49a1c: 280e movel %fp,%d4
49a1e: 43ee fff8 lea %fp@(-8),%a1
49a22: 2042 moveal %d2,%a0
49a24: 0684 ffff fff7 addil #-9,%d4
*d = (isprint((unsigned char)*s)) ? *s : '*';
49a2a: 4281 clrl %d1
49a2c: 1200 moveb %d0,%d1
s = lname;
}
d = name;
if ( s ) {
for ( i=0 ; i<(length-1) && *s ; i++, s++, d++ ) {
49a2e: 2449 moveal %a1,%a2
49a30: 95c4 subal %d4,%a2
*d = (isprint((unsigned char)*s)) ? *s : '*';
49a32: 2679 0005 f63c moveal 5f63c <__ctype_ptr__>,%a3
49a38: 1233 1801 moveb %a3@(00000001,%d1:l),%d1
49a3c: 49c1 extbl %d1
49a3e: 0281 0000 0097 andil #151,%d1
49a44: 6602 bnes 49a48 <_Objects_Get_name_as_string+0xc0>
49a46: 702a moveq #42,%d0
49a48: 10c0 moveb %d0,%a0@+
49a4a: 2648 moveal %a0,%a3
s = lname;
}
d = name;
if ( s ) {
for ( i=0 ; i<(length-1) && *s ; i++, s++, d++ ) {
49a4c: b5c3 cmpal %d3,%a2
49a4e: 6404 bccs 49a54 <_Objects_Get_name_as_string+0xcc>
49a50: 1019 moveb %a1@+,%d0
49a52: 66d6 bnes 49a2a <_Objects_Get_name_as_string+0xa2>
*d = (isprint((unsigned char)*s)) ? *s : '*';
}
}
*d = '\0';
49a54: 4213 clrb %a3@
_Thread_Enable_dispatch();
49a56: 4eb9 0004 a2e2 jsr 4a2e2 <_Thread_Enable_dispatch>
return name;
}
return NULL; /* unreachable path */
}
49a5c: 2002 movel %d2,%d0
49a5e: 4cee 0c3c ffdc moveml %fp@(-36),%d2-%d5/%a2-%a3
49a64: 4e5e unlk %fp
49a66: 4e75 rts
return NULL;
if ( name == NULL )
return NULL;
tmpId = (id == OBJECTS_ID_OF_SELF) ? _Thread_Executing->Object.id : id;
49a68: 282e 0008 movel %fp@(8),%d4
49a6c: 6000 ff52 braw 499c0 <_Objects_Get_name_as_string+0x38>
s = lname;
}
d = name;
if ( s ) {
for ( i=0 ; i<(length-1) && *s ; i++, s++, d++ ) {
49a70: 2642 moveal %d2,%a3
*d = (isprint((unsigned char)*s)) ? *s : '*';
}
}
*d = '\0';
49a72: 4213 clrb %a3@
_Thread_Enable_dispatch();
49a74: 4eb9 0004 a2e2 jsr 4a2e2 <_Thread_Enable_dispatch>
49a7a: 60e0 bras 49a5c <_Objects_Get_name_as_string+0xd4>
0005bad0 <_Objects_Get_no_protection>:
/*
* 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;
5bad0: 7001 moveq #1,%d0
if ( information->maximum >= index ) {
5bad2: 4281 clrl %d1
Objects_Control *_Objects_Get_no_protection(
Objects_Information *information,
Objects_Id id,
Objects_Locations *location
)
{
5bad4: 4e56 0000 linkw %fp,#0
5bad8: 206e 0008 moveal %fp@(8),%a0
/*
* 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;
5badc: 90a8 0006 subl %a0@(6),%d0
5bae0: d0ae 000c addl %fp@(12),%d0
if ( information->maximum >= index ) {
5bae4: 3228 000e movew %a0@(14),%d1
Objects_Control *_Objects_Get_no_protection(
Objects_Information *information,
Objects_Id id,
Objects_Locations *location
)
{
5bae8: 226e 0010 moveal %fp@(16),%a1
* 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;
if ( information->maximum >= index ) {
5baec: b280 cmpl %d0,%d1
5baee: 6510 bcss 5bb00 <_Objects_Get_no_protection+0x30>
if ( (the_object = information->local_table[ index ]) != NULL ) {
5baf0: 2068 0018 moveal %a0@(24),%a0
5baf4: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0
5baf8: 6706 beqs 5bb00 <_Objects_Get_no_protection+0x30><== NEVER TAKEN
*location = OBJECTS_LOCAL;
5bafa: 4291 clrl %a1@
* This isn't supported or required yet for Global objects so
* if it isn't local, we don't find it.
*/
*location = OBJECTS_ERROR;
return NULL;
}
5bafc: 4e5e unlk %fp
5bafe: 4e75 rts
/*
* This isn't supported or required yet for Global objects so
* if it isn't local, we don't find it.
*/
*location = OBJECTS_ERROR;
5bb00: 7001 moveq #1,%d0
return NULL;
}
5bb02: 4e5e unlk %fp
/*
* This isn't supported or required yet for Global objects so
* if it isn't local, we don't find it.
*/
*location = OBJECTS_ERROR;
5bb04: 2280 movel %d0,%a1@
return NULL;
5bb06: 4280 clrl %d0
}
...
000496a4 <_Objects_Id_to_name>:
*/
Objects_Name_or_id_lookup_errors _Objects_Id_to_name (
Objects_Id id,
Objects_Name *name
)
{
496a4: 4e56 fffc linkw %fp,#-4
496a8: 222e 0008 movel %fp@(8),%d1
496ac: 2f02 movel %d2,%sp@-
/*
* Caller is trusted for name != NULL.
*/
tmpId = (id == OBJECTS_ID_OF_SELF) ? _Thread_Executing->Object.id : id;
496ae: 4a81 tstl %d1
496b0: 660a bnes 496bc <_Objects_Id_to_name+0x18>
496b2: 2079 0006 02b8 moveal 602b8 <_Per_CPU_Information+0xc>,%a0
496b8: 2228 0008 movel %a0@(8),%d1
496bc: 7418 moveq #24,%d2
496be: 2001 movel %d1,%d0
496c0: e4a8 lsrl %d2,%d0
496c2: 143c 0007 moveb #7,%d2
496c6: c082 andl %d2,%d0
*/
RTEMS_INLINE_ROUTINE bool _Objects_Is_api_valid(
uint32_t the_api
)
{
if ( !the_api || the_api > OBJECTS_APIS_LAST )
496c8: 143c 0002 moveb #2,%d2
496cc: 2040 moveal %d0,%a0
496ce: 5388 subql #1,%a0
496d0: b488 cmpl %a0,%d2
496d2: 654a bcss 4971e <_Objects_Id_to_name+0x7a> <== NEVER TAKEN
the_api = _Objects_Get_API( tmpId );
if ( !_Objects_Is_api_valid( the_api ) )
return OBJECTS_INVALID_ID;
if ( !_Objects_Information_table[ the_api ] )
496d4: 41f9 0006 00b0 lea 600b0 <_Objects_Information_table>,%a0
496da: 2070 0c00 moveal %a0@(00000000,%d0:l:4),%a0
496de: 4a88 tstl %a0
496e0: 673c beqs 4971e <_Objects_Id_to_name+0x7a> <== NEVER TAKEN
*/
RTEMS_INLINE_ROUTINE uint32_t _Objects_Get_class(
Objects_Id id
)
{
return (uint32_t)
496e2: 2001 movel %d1,%d0
496e4: 741b moveq #27,%d2
496e6: e4a8 lsrl %d2,%d0
return OBJECTS_INVALID_ID;
the_class = _Objects_Get_class( tmpId );
information = _Objects_Information_table[ the_api ][ the_class ];
496e8: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0
if ( !information )
496ec: 6730 beqs 4971e <_Objects_Id_to_name+0x7a> <== NEVER TAKEN
#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
if ( information->is_string )
return OBJECTS_INVALID_ID;
#endif
the_object = _Objects_Get( information, tmpId, &ignored_location );
496ee: 486e fffc pea %fp@(-4)
496f2: 2f01 movel %d1,%sp@-
496f4: 2f00 movel %d0,%sp@-
496f6: 4eb9 0004 9638 jsr 49638 <_Objects_Get>
if ( !the_object )
496fc: 4fef 000c lea %sp@(12),%sp
49700: 4a80 tstl %d0
49702: 671a beqs 4971e <_Objects_Id_to_name+0x7a> <== NEVER TAKEN
return OBJECTS_INVALID_ID;
*name = the_object->name;
49704: 206e 000c moveal %fp@(12),%a0
49708: 2240 moveal %d0,%a1
4970a: 20a9 000c movel %a1@(12),%a0@
_Thread_Enable_dispatch();
4970e: 4eb9 0004 9fa2 jsr 49fa2 <_Thread_Enable_dispatch>
return OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL;
}
49714: 242e fff8 movel %fp@(-8),%d2
if ( !the_object )
return OBJECTS_INVALID_ID;
*name = the_object->name;
_Thread_Enable_dispatch();
return OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL;
49718: 4280 clrl %d0
}
4971a: 4e5e unlk %fp
4971c: 4e75 rts
4971e: 242e fff8 movel %fp@(-8),%d2
the_api = _Objects_Get_API( tmpId );
if ( !_Objects_Is_api_valid( the_api ) )
return OBJECTS_INVALID_ID;
if ( !_Objects_Information_table[ the_api ] )
return OBJECTS_INVALID_ID;
49722: 7003 moveq #3,%d0
return OBJECTS_INVALID_ID;
*name = the_object->name;
_Thread_Enable_dispatch();
return OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL;
}
49724: 4e5e unlk %fp <== NOT EXECUTED
00047fb4 <_Objects_Initialize_information>:
information->maximum = 0;
/*
* Register this Object Class in the Object Information Table.
*/
_Objects_Information_table[ the_api ][ the_class ] = information;
47fb4: 43f9 0005 e3d8 lea 5e3d8 <_Objects_Information_table>,%a1
,
bool supports_global,
Objects_Thread_queue_Extract_callout extract
#endif
)
{
47fba: 4e56 fff0 linkw %fp,#-16
47fbe: 202e 000c movel %fp@(12),%d0
47fc2: 48d7 003c moveml %d2-%d5,%sp@
47fc6: 4283 clrl %d3
information->maximum = 0;
/*
* Register this Object Class in the Object Information Table.
*/
_Objects_Information_table[ the_api ][ the_class ] = information;
47fc8: 2271 0c00 moveal %a1@(00000000,%d0:l:4),%a1
,
bool supports_global,
Objects_Thread_queue_Extract_callout extract
#endif
)
{
47fcc: 206e 0008 moveal %fp@(8),%a0
47fd0: 362e 001a movew %fp@(26),%d3
47fd4: 222e 0014 movel %fp@(20),%d1
uint32_t index;
#endif
information->the_api = the_api;
information->the_class = the_class;
information->size = size;
47fd8: 2143 0014 movel %d3,%a0@(20)
,
bool supports_global,
Objects_Thread_queue_Extract_callout extract
#endif
)
{
47fdc: 242e 0010 movel %fp@(16),%d2
information->the_class = the_class;
information->size = size;
information->local_table = 0;
information->inactive_per_block = 0;
information->object_blocks = 0;
information->inactive = 0;
47fe0: 4243 clrw %d3
,
bool supports_global,
Objects_Thread_queue_Extract_callout extract
#endif
)
{
47fe2: 282e 0020 movel %fp@(32),%d4
information->the_class = the_class;
information->size = size;
information->local_table = 0;
information->inactive_per_block = 0;
information->object_blocks = 0;
information->inactive = 0;
47fe6: 3143 0028 movew %d3,%a0@(40)
/*
* Set the maximum value to 0. It will be updated when objects are
* added to the inactive set from _Objects_Extend_information()
*/
information->maximum = 0;
47fea: 3143 000e movew %d3,%a0@(14)
/*
* Are we operating in limited or unlimited (e.g. auto-extend) mode.
*/
information->auto_extend =
(maximum & OBJECTS_UNLIMITED_OBJECTS) ? true : false;
47fee: 2601 movel %d1,%d3
uint32_t maximum_per_allocation;
#if defined(RTEMS_MULTIPROCESSING)
uint32_t index;
#endif
information->the_api = the_api;
47ff0: 2080 movel %d0,%a0@
information->the_class = the_class;
47ff2: 3142 0004 movew %d2,%a0@(4)
information->size = size;
information->local_table = 0;
47ff6: 42a8 0018 clrl %a0@(24)
/*
* Are we operating in limited or unlimited (e.g. auto-extend) mode.
*/
information->auto_extend =
(maximum & OBJECTS_UNLIMITED_OBJECTS) ? true : false;
47ffa: d683 addl %d3,%d3
47ffc: 9783 subxl %d3,%d3
47ffe: 4483 negl %d3
information->the_api = the_api;
information->the_class = the_class;
information->size = size;
information->local_table = 0;
information->inactive_per_block = 0;
48000: 42a8 002a clrl %a0@(42)
/*
* Are we operating in limited or unlimited (e.g. auto-extend) mode.
*/
information->auto_extend =
(maximum & OBJECTS_UNLIMITED_OBJECTS) ? true : false;
maximum_per_allocation = maximum & ~OBJECTS_UNLIMITED_OBJECTS;
48004: 0881 001f bclr #31,%d1
information->the_api = the_api;
information->the_class = the_class;
information->size = size;
information->local_table = 0;
information->inactive_per_block = 0;
information->object_blocks = 0;
48008: 42a8 002e clrl %a0@(46)
information->maximum = 0;
/*
* Register this Object Class in the Object Information Table.
*/
_Objects_Information_table[ the_api ][ the_class ] = information;
4800c: 2388 2c00 movel %a0,%a1@(00000000,%d2:l:4)
/*
* Are we operating in limited or unlimited (e.g. auto-extend) mode.
*/
information->auto_extend =
48010: 1143 0010 moveb %d3,%a0@(16)
maximum_per_allocation = maximum & ~OBJECTS_UNLIMITED_OBJECTS;
/*
* Unlimited and maximum of zero is illogical.
*/
if ( information->auto_extend && maximum_per_allocation == 0) {
48014: 4a83 tstl %d3
48016: 6706 beqs 4801e <_Objects_Initialize_information+0x6a>
48018: 4a81 tstl %d1
4801a: 6700 0092 beqw 480ae <_Objects_Initialize_information+0xfa>
uint32_t the_class,
uint32_t node,
uint32_t index
)
{
return (( (Objects_Id) the_api ) << OBJECTS_API_START_BIT) |
4801e: 7a18 moveq #24,%d5
information->local_table = &null_local_table;
/*
* Calculate minimum and maximum Id's
*/
minimum_index = (maximum_per_allocation == 0) ? 0 : 1;
48020: 4a81 tstl %d1
48022: 56c3 sne %d3
48024: eba8 lsll %d5,%d0
(( (Objects_Id) the_class ) << OBJECTS_CLASS_START_BIT) |
48026: 1a3c 001b moveb #27,%d5
4802a: 49c3 extbl %d3
4802c: 4483 negl %d3
information->allocation_size = maximum_per_allocation;
/*
* Provide a null local table entry for the case of any empty table.
*/
information->local_table = &null_local_table;
4802e: 43f9 0005 dbd4 lea 5dbd4 <null_local_table.3094>,%a1
48034: ebaa lsll %d5,%d2
uint32_t the_class,
uint32_t node,
uint32_t index
)
{
return (( (Objects_Id) the_api ) << OBJECTS_API_START_BIT) |
48036: 08c0 0010 bset #16,%d0
/*
* Calculate the maximum name length
*/
name_length = maximum_name_length;
if ( name_length & (OBJECTS_NAME_ALIGNMENT-1) )
4803a: 1a3c 0003 moveb #3,%d5
(( (Objects_Id) the_class ) << OBJECTS_CLASS_START_BIT) |
4803e: 8082 orl %d2,%d0
48040: ca84 andl %d4,%d5
}
/*
* The allocation unit is the maximum value
*/
information->allocation_size = maximum_per_allocation;
48042: 3141 0012 movew %d1,%a0@(18)
uint32_t the_class,
uint32_t node,
uint32_t index
)
{
return (( (Objects_Id) the_api ) << OBJECTS_API_START_BIT) |
48046: 8083 orl %d3,%d0
/*
* Provide a null local table entry for the case of any empty table.
*/
information->local_table = &null_local_table;
48048: 2149 0018 movel %a1,%a0@(24)
4804c: 2140 0006 movel %d0,%a0@(6)
/*
* Calculate the maximum name length
*/
name_length = maximum_name_length;
if ( name_length & (OBJECTS_NAME_ALIGNMENT-1) )
48050: 4a85 tstl %d5
48052: 6626 bnes 4807a <_Objects_Initialize_information+0xc6><== NEVER TAKEN
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
48054: 43e8 0020 lea %a0@(32),%a1
48058: 2149 001c movel %a1,%a0@(28)
name_length = (name_length + OBJECTS_NAME_ALIGNMENT) &
~(OBJECTS_NAME_ALIGNMENT-1);
information->name_length = name_length;
_Chain_Initialize_empty( &information->Inactive );
4805c: 43e8 001c lea %a0@(28),%a1
if ( name_length & (OBJECTS_NAME_ALIGNMENT-1) )
name_length = (name_length + OBJECTS_NAME_ALIGNMENT) &
~(OBJECTS_NAME_ALIGNMENT-1);
information->name_length = name_length;
48060: 3144 0032 movew %d4,%a0@(50)
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
48064: 42a8 0020 clrl %a0@(32)
_Chain_Initialize_empty( &information->Inactive );
48068: 2149 0024 movel %a1,%a0@(36)
/*
* Initialize objects .. if there are any
*/
if ( maximum_per_allocation ) {
4806c: 4a81 tstl %d1
4806e: 662c bnes 4809c <_Objects_Initialize_information+0xe8>
_Chain_Initialize_empty( &information->global_table[ index ] );
}
else
information->global_table = NULL;
#endif
}
48070: 4cee 003c fff0 moveml %fp@(-16),%d2-%d5
48076: 4e5e unlk %fp
48078: 4e75 rts
* Calculate the maximum name length
*/
name_length = maximum_name_length;
if ( name_length & (OBJECTS_NAME_ALIGNMENT-1) )
name_length = (name_length + OBJECTS_NAME_ALIGNMENT) &
4807a: 5884 addql #4,%d4 <== NOT EXECUTED
4807c: 70fc moveq #-4,%d0 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
4807e: 43e8 0020 lea %a0@(32),%a1 <== NOT EXECUTED
48082: c880 andl %d0,%d4 <== NOT EXECUTED
48084: 2149 001c movel %a1,%a0@(28) <== NOT EXECUTED
~(OBJECTS_NAME_ALIGNMENT-1);
information->name_length = name_length;
_Chain_Initialize_empty( &information->Inactive );
48088: 43e8 001c lea %a0@(28),%a1 <== NOT EXECUTED
if ( name_length & (OBJECTS_NAME_ALIGNMENT-1) )
name_length = (name_length + OBJECTS_NAME_ALIGNMENT) &
~(OBJECTS_NAME_ALIGNMENT-1);
information->name_length = name_length;
4808c: 3144 0032 movew %d4,%a0@(50) <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
48090: 42a8 0020 clrl %a0@(32) <== NOT EXECUTED
_Chain_Initialize_empty( &information->Inactive );
48094: 2149 0024 movel %a1,%a0@(36) <== NOT EXECUTED
/*
* Initialize objects .. if there are any
*/
if ( maximum_per_allocation ) {
48098: 4a81 tstl %d1 <== NOT EXECUTED
4809a: 67d4 beqs 48070 <_Objects_Initialize_information+0xbc><== NOT EXECUTED
/*
* Always have the maximum size available so the current performance
* figures are create are met. If the user moves past the maximum
* number then a performance hit is taken.
*/
_Objects_Extend_information( information );
4809c: 2d48 0008 movel %a0,%fp@(8)
_Chain_Initialize_empty( &information->global_table[ index ] );
}
else
information->global_table = NULL;
#endif
}
480a0: 4cee 003c fff0 moveml %fp@(-16),%d2-%d5
480a6: 4e5e unlk %fp
/*
* Always have the maximum size available so the current performance
* figures are create are met. If the user moves past the maximum
* number then a performance hit is taken.
*/
_Objects_Extend_information( information );
480a8: 4ef9 0004 7b48 jmp 47b48 <_Objects_Extend_information>
/*
* Unlimited and maximum of zero is illogical.
*/
if ( information->auto_extend && maximum_per_allocation == 0) {
_Internal_error_Occurred(
480ae: 4878 0013 pea 13 <INVALID_OPERATION+0x3>
480b2: 4878 0001 pea 1 <ADD>
480b6: 42a7 clrl %sp@-
480b8: 4eb9 0004 79c8 jsr 479c8 <_Internal_error_Occurred>
...
00048150 <_Objects_Shrink_information>:
/*
* Search the list to find block or chunk with all objects inactive.
*/
index_base = _Objects_Get_index( information->minimum_id );
block_count = (information->maximum - index_base) /
48150: 4281 clrl %d1
*/
void _Objects_Shrink_information(
Objects_Information *information
)
{
48152: 4e56 ffec linkw %fp,#-20
48156: 48d7 0c1c moveml %d2-%d4/%a2-%a3,%sp@
4815a: 246e 0008 moveal %fp@(8),%a2
/*
* Search the list to find block or chunk with all objects inactive.
*/
index_base = _Objects_Get_index( information->minimum_id );
4815e: 4283 clrl %d3
block_count = (information->maximum - index_base) /
48160: 4284 clrl %d4
/*
* Search the list to find block or chunk with all objects inactive.
*/
index_base = _Objects_Get_index( information->minimum_id );
48162: 362a 0008 movew %a2@(8),%d3
block_count = (information->maximum - index_base) /
48166: 382a 000e movew %a2@(14),%d4
4816a: 322a 0012 movew %a2@(18),%d1
4816e: 9883 subl %d3,%d4
48170: 4c41 4004 remul %d1,%d4,%d4
information->allocation_size;
for ( block = 0; block < block_count; block++ ) {
48174: 6774 beqs 481ea <_Objects_Shrink_information+0x9a><== NEVER TAKEN
if ( information->inactive_per_block[ block ] ==
48176: 206a 002a moveal %a2@(42),%a0
4817a: b290 cmpl %a0@,%d1
4817c: 677e beqs 481fc <_Objects_Shrink_information+0xac><== NEVER TAKEN
* the_block - the block to remove
*
* Output parameters: NONE
*/
void _Objects_Shrink_information(
4817e: 5888 addql #4,%a0
index_base = _Objects_Get_index( information->minimum_id );
block_count = (information->maximum - index_base) /
information->allocation_size;
for ( block = 0; block < block_count; block++ ) {
48180: 4280 clrl %d0
48182: 5280 addql #1,%d0
information->inactive -= information->allocation_size;
return;
}
index_base += information->allocation_size;
48184: d681 addl %d1,%d3
index_base = _Objects_Get_index( information->minimum_id );
block_count = (information->maximum - index_base) /
information->allocation_size;
for ( block = 0; block < block_count; block++ ) {
48186: b084 cmpl %d4,%d0
48188: 6460 bccs 481ea <_Objects_Shrink_information+0x9a>
information->inactive -= information->allocation_size;
return;
}
index_base += information->allocation_size;
4818a: 2400 movel %d0,%d2
4818c: e58a lsll #2,%d2
index_base = _Objects_Get_index( information->minimum_id );
block_count = (information->maximum - index_base) /
information->allocation_size;
for ( block = 0; block < block_count; block++ ) {
if ( information->inactive_per_block[ block ] ==
4818e: b298 cmpl %a0@+,%d1
48190: 66f0 bnes 48182 <_Objects_Shrink_information+0x32>
information->allocation_size ) {
/*
* Assume the Inactive chain is never empty at this point
*/
the_object = (Objects_Control *) information->Inactive.first;
48192: 206a 001c moveal %a2@(28),%a0
*/
extract_me = the_object;
the_object = (Objects_Control *) the_object->Node.next;
if ((index >= index_base) &&
(index < (index_base + information->allocation_size))) {
_Chain_Extract( &extract_me->Node );
48196: 47f9 0004 7074 lea 47074 <_Chain_Extract>,%a3
* Assume the Inactive chain is never empty at this point
*/
the_object = (Objects_Control *) information->Inactive.first;
do {
index = _Objects_Get_index( the_object->id );
4819c: 4280 clrl %d0
4819e: 3028 000a movew %a0@(10),%d0
/*
* Get the next node before the node is extracted
*/
extract_me = the_object;
the_object = (Objects_Control *) the_object->Node.next;
481a2: 2810 movel %a0@,%d4
if ((index >= index_base) &&
481a4: b680 cmpl %d0,%d3
481a6: 620c bhis 481b4 <_Objects_Shrink_information+0x64>
(index < (index_base + information->allocation_size))) {
481a8: 4281 clrl %d1
481aa: 322a 0012 movew %a2@(18),%d1
481ae: d283 addl %d3,%d1
/*
* Get the next node before the node is extracted
*/
extract_me = the_object;
the_object = (Objects_Control *) the_object->Node.next;
if ((index >= index_base) &&
481b0: b280 cmpl %d0,%d1
481b2: 6240 bhis 481f4 <_Objects_Shrink_information+0xa4>
(index < (index_base + information->allocation_size))) {
_Chain_Extract( &extract_me->Node );
}
}
while ( the_object );
481b4: 4a84 tstl %d4
481b6: 6704 beqs 481bc <_Objects_Shrink_information+0x6c>
index = _Objects_Get_index( the_object->id );
/*
* Get the next node before the node is extracted
*/
extract_me = the_object;
the_object = (Objects_Control *) the_object->Node.next;
481b8: 2044 moveal %d4,%a0
481ba: 60e0 bras 4819c <_Objects_Shrink_information+0x4c>
while ( the_object );
/*
* Free the memory and reset the structures in the object' information
*/
_Workspace_Free( information->object_blocks[ block ] );
481bc: 206a 002e moveal %a2@(46),%a0
481c0: 2f30 2800 movel %a0@(00000000,%d2:l),%sp@-
481c4: 4eb9 0004 9c5e jsr 49c5e <_Workspace_Free>
information->object_blocks[ block ] = NULL;
481ca: 206a 002e moveal %a2@(46),%a0
information->inactive_per_block[ block ] = 0;
information->inactive -= information->allocation_size;
return;
481ce: 588f addql #4,%sp
/*
* Free the memory and reset the structures in the object' information
*/
_Workspace_Free( information->object_blocks[ block ] );
information->object_blocks[ block ] = NULL;
481d0: 42b0 2800 clrl %a0@(00000000,%d2:l)
information->inactive_per_block[ block ] = 0;
481d4: 206a 002a moveal %a2@(42),%a0
information->inactive -= information->allocation_size;
481d8: 302a 0028 movew %a2@(40),%d0
481dc: 322a 0012 movew %a2@(18),%d1
* Free the memory and reset the structures in the object' information
*/
_Workspace_Free( information->object_blocks[ block ] );
information->object_blocks[ block ] = NULL;
information->inactive_per_block[ block ] = 0;
481e0: 42b0 2800 clrl %a0@(00000000,%d2:l)
information->inactive -= information->allocation_size;
481e4: 9081 subl %d1,%d0
481e6: 3540 0028 movew %d0,%a2@(40)
return;
}
index_base += information->allocation_size;
}
}
481ea: 4cee 0c1c ffec moveml %fp@(-20),%d2-%d4/%a2-%a3
481f0: 4e5e unlk %fp
481f2: 4e75 rts
*/
extract_me = the_object;
the_object = (Objects_Control *) the_object->Node.next;
if ((index >= index_base) &&
(index < (index_base + information->allocation_size))) {
_Chain_Extract( &extract_me->Node );
481f4: 2f08 movel %a0,%sp@-
481f6: 4e93 jsr %a3@
481f8: 588f addql #4,%sp
481fa: 60b8 bras 481b4 <_Objects_Shrink_information+0x64>
information->allocation_size ) {
/*
* Assume the Inactive chain is never empty at this point
*/
the_object = (Objects_Control *) information->Inactive.first;
481fc: 206a 001c moveal %a2@(28),%a0 <== NOT EXECUTED
index_base = _Objects_Get_index( information->minimum_id );
block_count = (information->maximum - index_base) /
information->allocation_size;
for ( block = 0; block < block_count; block++ ) {
if ( information->inactive_per_block[ block ] ==
48200: 4282 clrl %d2 <== NOT EXECUTED
*/
extract_me = the_object;
the_object = (Objects_Control *) the_object->Node.next;
if ((index >= index_base) &&
(index < (index_base + information->allocation_size))) {
_Chain_Extract( &extract_me->Node );
48202: 47f9 0004 7074 lea 47074 <_Chain_Extract>,%a3 <== NOT EXECUTED
48208: 6092 bras 4819c <_Objects_Shrink_information+0x4c><== NOT EXECUTED
...
0004b8ba <_RTEMS_tasks_Create_extension>:
bool _RTEMS_tasks_Create_extension(
Thread_Control *executing,
Thread_Control *created
)
{
4b8ba: 4e56 0000 linkw %fp,#0
4b8be: 2f0a movel %a2,%sp@-
4b8c0: 246e 000c moveal %fp@(12),%a2
/*
* Notepads must be the last entry in the structure and they
* can be left off if disabled in the configuration.
*/
to_allocate = sizeof( RTEMS_API_Control );
if ( !rtems_configuration_get_notepads_enabled() )
4b8c4: 4a39 0005 ccc4 tstb 5ccc4 <Configuration_RTEMS_API+0x4>
4b8ca: 6758 beqs 4b924 <_RTEMS_tasks_Create_extension+0x6a>
/*
* Notepads must be the last entry in the structure and they
* can be left off if disabled in the configuration.
*/
to_allocate = sizeof( RTEMS_API_Control );
4b8cc: 705e moveq #94,%d0
if ( !rtems_configuration_get_notepads_enabled() )
to_allocate -= (RTEMS_NUMBER_NOTEPADS * sizeof(uint32_t));
api = _Workspace_Allocate( to_allocate );
4b8ce: 2f00 movel %d0,%sp@-
4b8d0: 4eb9 0004 9c42 jsr 49c42 <_Workspace_Allocate>
if ( !api )
4b8d6: 588f addql #4,%sp
*/
to_allocate = sizeof( RTEMS_API_Control );
if ( !rtems_configuration_get_notepads_enabled() )
to_allocate -= (RTEMS_NUMBER_NOTEPADS * sizeof(uint32_t));
api = _Workspace_Allocate( to_allocate );
4b8d8: 2040 moveal %d0,%a0
if ( !api )
4b8da: 4a80 tstl %d0
4b8dc: 6758 beqs 4b936 <_RTEMS_tasks_Create_extension+0x7c>
return false;
created->API_Extensions[ THREAD_API_RTEMS ] = api;
4b8de: 2540 0108 movel %d0,%a2@(264)
*/
RTEMS_INLINE_ROUTINE void _ASR_Initialize (
ASR_Information *information
)
{
information->is_enabled = false;
4b8e2: 4200 clrb %d0
api->pending_events = EVENT_SETS_NONE_PENDING;
4b8e4: 4290 clrl %a0@
4b8e6: 1140 0008 moveb %d0,%a0@(8)
api->event_condition = 0;
4b8ea: 42a8 0004 clrl %a0@(4)
information->handler = NULL;
4b8ee: 42a8 000a clrl %a0@(10)
information->mode_set = RTEMS_DEFAULT_MODES;
4b8f2: 42a8 000e clrl %a0@(14)
information->signals_posted = 0;
4b8f6: 42a8 0012 clrl %a0@(18)
information->signals_pending = 0;
4b8fa: 42a8 0016 clrl %a0@(22)
information->nest_level = 0;
4b8fe: 42a8 001a clrl %a0@(26)
_ASR_Initialize( &api->Signal );
created->task_variables = NULL;
4b902: 42aa 0114 clrl %a2@(276)
if ( rtems_configuration_get_notepads_enabled() ) {
4b906: 4a39 0005 ccc4 tstb 5ccc4 <Configuration_RTEMS_API+0x4>
4b90c: 670c beqs 4b91a <_RTEMS_tasks_Create_extension+0x60>
* task is created via another API, then this routine is invoked
* and this API given the opportunity to initialize its extension
* area.
*/
bool _RTEMS_tasks_Create_extension(
4b90e: 41e8 001e lea %a0@(30),%a0
4b912: 7010 moveq #16,%d0
_ASR_Initialize( &api->Signal );
created->task_variables = NULL;
if ( rtems_configuration_get_notepads_enabled() ) {
for (i=0; i < RTEMS_NUMBER_NOTEPADS; i++)
api->Notepads[i] = 0;
4b914: 4298 clrl %a0@+
4b916: 5380 subql #1,%d0
api->event_condition = 0;
_ASR_Initialize( &api->Signal );
created->task_variables = NULL;
if ( rtems_configuration_get_notepads_enabled() ) {
for (i=0; i < RTEMS_NUMBER_NOTEPADS; i++)
4b918: 66fa bnes 4b914 <_RTEMS_tasks_Create_extension+0x5a>
api->Notepads[i] = 0;
}
return true;
}
4b91a: 246e fffc moveal %fp@(-4),%a2
4b91e: 4e5e unlk %fp
if ( rtems_configuration_get_notepads_enabled() ) {
for (i=0; i < RTEMS_NUMBER_NOTEPADS; i++)
api->Notepads[i] = 0;
}
return true;
4b920: 7001 moveq #1,%d0
}
4b922: 4e75 rts
* Notepads must be the last entry in the structure and they
* can be left off if disabled in the configuration.
*/
to_allocate = sizeof( RTEMS_API_Control );
if ( !rtems_configuration_get_notepads_enabled() )
to_allocate -= (RTEMS_NUMBER_NOTEPADS * sizeof(uint32_t));
4b924: 701e moveq #30,%d0
api = _Workspace_Allocate( to_allocate );
4b926: 2f00 movel %d0,%sp@-
4b928: 4eb9 0004 9c42 jsr 49c42 <_Workspace_Allocate>
if ( !api )
4b92e: 588f addql #4,%sp
*/
to_allocate = sizeof( RTEMS_API_Control );
if ( !rtems_configuration_get_notepads_enabled() )
to_allocate -= (RTEMS_NUMBER_NOTEPADS * sizeof(uint32_t));
api = _Workspace_Allocate( to_allocate );
4b930: 2040 moveal %d0,%a0
if ( !api )
4b932: 4a80 tstl %d0
4b934: 66a8 bnes 4b8de <_RTEMS_tasks_Create_extension+0x24><== ALWAYS TAKEN
for (i=0; i < RTEMS_NUMBER_NOTEPADS; i++)
api->Notepads[i] = 0;
}
return true;
}
4b936: 246e fffc moveal %fp@(-4),%a2
4b93a: 4e5e unlk %fp
to_allocate -= (RTEMS_NUMBER_NOTEPADS * sizeof(uint32_t));
api = _Workspace_Allocate( to_allocate );
if ( !api )
return false;
4b93c: 4200 clrb %d0 <== NOT EXECUTED
for (i=0; i < RTEMS_NUMBER_NOTEPADS; i++)
api->Notepads[i] = 0;
}
return true;
}
0004b864 <_RTEMS_tasks_Delete_extension>:
void _RTEMS_tasks_Delete_extension(
Thread_Control *executing,
Thread_Control *deleted
)
{
4b864: 4e56 fff4 linkw %fp,#-12
4b868: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
4b86c: 246e 000c moveal %fp@(12),%a2
4b870: 47f9 0004 b98c lea 4b98c <_RTEMS_Tasks_Invoke_task_variable_dtor>,%a3
/*
* Free per task variable memory
*/
tvp = deleted->task_variables;
4b876: 206a 0114 moveal %a2@(276),%a0
deleted->task_variables = NULL;
4b87a: 42aa 0114 clrl %a2@(276)
while (tvp) {
4b87e: 4a88 tstl %a0
4b880: 671e beqs 4b8a0 <_RTEMS_tasks_Delete_extension+0x3c>
next = (rtems_task_variable_t *)tvp->next;
4b882: 2410 movel %a0@,%d2
_RTEMS_Tasks_Invoke_task_variable_dtor( deleted, tvp );
4b884: 2f08 movel %a0,%sp@-
4b886: 2f0a movel %a2,%sp@-
4b888: 4e93 jsr %a3@
* Free per task variable memory
*/
tvp = deleted->task_variables;
deleted->task_variables = NULL;
while (tvp) {
4b88a: 508f addql #8,%sp
4b88c: 4a82 tstl %d2
4b88e: 6710 beqs 4b8a0 <_RTEMS_tasks_Delete_extension+0x3c><== NEVER TAKEN
next = (rtems_task_variable_t *)tvp->next;
_RTEMS_Tasks_Invoke_task_variable_dtor( deleted, tvp );
tvp = next;
4b890: 2042 moveal %d2,%a0
*/
tvp = deleted->task_variables;
deleted->task_variables = NULL;
while (tvp) {
next = (rtems_task_variable_t *)tvp->next;
4b892: 2410 movel %a0@,%d2
_RTEMS_Tasks_Invoke_task_variable_dtor( deleted, tvp );
4b894: 2f08 movel %a0,%sp@-
4b896: 2f0a movel %a2,%sp@-
4b898: 4e93 jsr %a3@
* Free per task variable memory
*/
tvp = deleted->task_variables;
deleted->task_variables = NULL;
while (tvp) {
4b89a: 508f addql #8,%sp
4b89c: 4a82 tstl %d2
4b89e: 66f0 bnes 4b890 <_RTEMS_tasks_Delete_extension+0x2c>
/*
* Free API specific memory
*/
(void) _Workspace_Free( deleted->API_Extensions[ THREAD_API_RTEMS ] );
4b8a0: 2f2a 0108 movel %a2@(264),%sp@-
4b8a4: 4eb9 0004 9c5e jsr 49c5e <_Workspace_Free>
deleted->API_Extensions[ THREAD_API_RTEMS ] = NULL;
4b8aa: 588f addql #4,%sp
4b8ac: 42aa 0108 clrl %a2@(264)
}
4b8b0: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3
4b8b6: 4e5e unlk %fp <== NOT EXECUTED
00046a6c <_RTEMS_tasks_Initialize_user_tasks_body>:
*
* Output parameters: NONE
*/
void _RTEMS_tasks_Initialize_user_tasks_body( void )
{
46a6c: 4e56 ffe4 linkw %fp,#-28
46a70: 48d7 1c1c moveml %d2-%d4/%a2-%a4,%sp@
rtems_initialization_tasks_table *user_tasks;
/*
* Move information into local variables
*/
user_tasks = Configuration_RTEMS_API.User_initialization_tasks_table;
46a74: 2479 0005 ccea moveal 5ccea <Configuration_RTEMS_API+0x2a>,%a2
maximum = Configuration_RTEMS_API.number_of_initialization_tasks;
46a7a: 2639 0005 cce6 movel 5cce6 <Configuration_RTEMS_API+0x26>,%d3
/*
* Verify that we have a set of user tasks to iterate
*/
if ( !user_tasks )
46a80: 4a8a tstl %a2
46a82: 6754 beqs 46ad8 <_RTEMS_tasks_Initialize_user_tasks_body+0x6c>
return;
/*
* Now iterate over the initialization tasks and create/start them.
*/
for ( index=0 ; index < maximum ; index++ ) {
46a84: 4a83 tstl %d3
46a86: 6750 beqs 46ad8 <_RTEMS_tasks_Initialize_user_tasks_body+0x6c><== NEVER TAKEN
46a88: 280e movel %fp,%d4
46a8a: 4282 clrl %d2
46a8c: 5984 subql #4,%d4
46a8e: 47f9 0004 6844 lea 46844 <rtems_task_create>,%a3
&id
);
if ( !rtems_is_status_successful( return_value ) )
_Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, true, return_value );
return_value = rtems_task_start(
46a94: 49f9 0004 6af4 lea 46af4 <rtems_task_start>,%a4
/*
* Now iterate over the initialization tasks and create/start them.
*/
for ( index=0 ; index < maximum ; index++ ) {
return_value = rtems_task_create(
46a9a: 2f04 movel %d4,%sp@-
46a9c: 2f2a 000c movel %a2@(12),%sp@-
46aa0: 2f2a 0014 movel %a2@(20),%sp@-
46aa4: 2f2a 0004 movel %a2@(4),%sp@-
46aa8: 2f2a 0008 movel %a2@(8),%sp@-
46aac: 2f12 movel %a2@,%sp@-
46aae: 4e93 jsr %a3@
user_tasks[ index ].stack_size,
user_tasks[ index ].mode_set,
user_tasks[ index ].attribute_set,
&id
);
if ( !rtems_is_status_successful( return_value ) )
46ab0: 4fef 0018 lea %sp@(24),%sp
46ab4: 4a80 tstl %d0
46ab6: 662a bnes 46ae2 <_RTEMS_tasks_Initialize_user_tasks_body+0x76>
_Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, true, return_value );
return_value = rtems_task_start(
46ab8: 2f2a 0018 movel %a2@(24),%sp@-
46abc: 2f2a 0010 movel %a2@(16),%sp@-
46ac0: 2f2e fffc movel %fp@(-4),%sp@-
46ac4: 4e94 jsr %a4@
id,
user_tasks[ index ].entry_point,
user_tasks[ index ].argument
);
if ( !rtems_is_status_successful( return_value ) )
46ac6: 4fef 000c lea %sp@(12),%sp
46aca: 4a80 tstl %d0
46acc: 6614 bnes 46ae2 <_RTEMS_tasks_Initialize_user_tasks_body+0x76>
return;
/*
* Now iterate over the initialization tasks and create/start them.
*/
for ( index=0 ; index < maximum ; index++ ) {
46ace: 5282 addql #1,%d2
46ad0: 45ea 001c lea %a2@(28),%a2
46ad4: b483 cmpl %d3,%d2
46ad6: 65c2 bcss 46a9a <_RTEMS_tasks_Initialize_user_tasks_body+0x2e><== NEVER TAKEN
user_tasks[ index ].argument
);
if ( !rtems_is_status_successful( return_value ) )
_Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, true, return_value );
}
}
46ad8: 4cee 1c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a4
46ade: 4e5e unlk %fp
46ae0: 4e75 rts
id,
user_tasks[ index ].entry_point,
user_tasks[ index ].argument
);
if ( !rtems_is_status_successful( return_value ) )
_Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, true, return_value );
46ae2: 2f00 movel %d0,%sp@-
46ae4: 4878 0001 pea 1 <ADD>
46ae8: 4878 0001 pea 1 <ADD>
46aec: 4eb9 0004 79c8 jsr 479c8 <_Internal_error_Occurred>
...
0004b7e8 <_RTEMS_tasks_Post_switch_extension>:
*/
void _RTEMS_tasks_Post_switch_extension(
Thread_Control *executing
)
{
4b7e8: 4e56 ffec linkw %fp,#-20
4b7ec: 206e 0008 moveal %fp@(8),%a0
4b7f0: 48d7 0c0c moveml %d2-%d3/%a2-%a3,%sp@
RTEMS_API_Control *api;
ASR_Information *asr;
rtems_signal_set signal_set;
Modes_Control prev_mode;
api = executing->API_Extensions[ THREAD_API_RTEMS ];
4b7f4: 2468 0108 moveal %a0@(264),%a2
if ( !api )
4b7f8: 4a8a tstl %a2
4b7fa: 671a beqs 4b816 <_RTEMS_tasks_Post_switch_extension+0x2e><== NEVER TAKEN
* Signal Processing
*/
asr = &api->Signal;
_ISR_Disable( level );
4b7fc: 203c 0000 0700 movel #1792,%d0
4b802: 40c1 movew %sr,%d1
4b804: 8081 orl %d1,%d0
4b806: 46c0 movew %d0,%sr
signal_set = asr->signals_posted;
4b808: 242a 0012 movel %a2@(18),%d2
asr->signals_posted = 0;
4b80c: 42aa 0012 clrl %a2@(18)
_ISR_Enable( level );
4b810: 46c1 movew %d1,%sr
if ( !signal_set ) /* similar to _ASR_Are_signals_pending( asr ) */
4b812: 4a82 tstl %d2
4b814: 660a bnes 4b820 <_RTEMS_tasks_Post_switch_extension+0x38>
(*asr->handler)( signal_set );
asr->nest_level -= 1;
rtems_task_mode( prev_mode, RTEMS_ALL_MODE_MASKS, &prev_mode );
}
4b816: 4cee 0c0c ffec moveml %fp@(-20),%d2-%d3/%a2-%a3
4b81c: 4e5e unlk %fp
4b81e: 4e75 rts
if ( !signal_set ) /* similar to _ASR_Are_signals_pending( asr ) */
return;
asr->nest_level += 1;
4b820: 52aa 001a addql #1,%a2@(26)
rtems_task_mode( asr->mode_set, RTEMS_ALL_MODE_MASKS, &prev_mode );
4b824: 260e movel %fp,%d3
4b826: 5983 subql #4,%d3
4b828: 47f9 0004 d5ac lea 4d5ac <rtems_task_mode>,%a3
4b82e: 2f03 movel %d3,%sp@-
4b830: 2f3c 0000 ffff movel #65535,%sp@-
4b836: 2f2a 000e movel %a2@(14),%sp@-
4b83a: 4e93 jsr %a3@
(*asr->handler)( signal_set );
4b83c: 2f02 movel %d2,%sp@-
4b83e: 206a 000a moveal %a2@(10),%a0
4b842: 4e90 jsr %a0@
asr->nest_level -= 1;
4b844: 53aa 001a subql #1,%a2@(26)
rtems_task_mode( prev_mode, RTEMS_ALL_MODE_MASKS, &prev_mode );
4b848: 2f03 movel %d3,%sp@-
4b84a: 2f3c 0000 ffff movel #65535,%sp@-
4b850: 2f2e fffc movel %fp@(-4),%sp@-
4b854: 4e93 jsr %a3@
4b856: 4fef 001c lea %sp@(28),%sp
}
4b85a: 4cee 0c0c ffec moveml %fp@(-20),%d2-%d3/%a2-%a3
4b860: 4e5e unlk %fp <== NOT EXECUTED
0004b78e <_RTEMS_tasks_Switch_extension>:
void _RTEMS_tasks_Switch_extension(
Thread_Control *executing,
Thread_Control *heir
)
{
4b78e: 4e56 0000 linkw %fp,#0
4b792: 206e 0008 moveal %fp@(8),%a0
/*
* Per Task Variables
*/
tvp = executing->task_variables;
4b796: 2068 0114 moveal %a0@(276),%a0
while (tvp) {
4b79a: 4a88 tstl %a0
4b79c: 6712 beqs 4b7b0 <_RTEMS_tasks_Switch_extension+0x22>
tvp->tval = *tvp->ptr;
4b79e: 2268 0004 moveal %a0@(4),%a1
4b7a2: 2151 000c movel %a1@,%a0@(12)
*tvp->ptr = tvp->gval;
4b7a6: 22a8 0008 movel %a0@(8),%a1@
tvp = (rtems_task_variable_t *)tvp->next;
4b7aa: 2050 moveal %a0@,%a0
/*
* Per Task Variables
*/
tvp = executing->task_variables;
while (tvp) {
4b7ac: 4a88 tstl %a0
4b7ae: 66ee bnes 4b79e <_RTEMS_tasks_Switch_extension+0x10><== NEVER TAKEN
tvp->tval = *tvp->ptr;
*tvp->ptr = tvp->gval;
tvp = (rtems_task_variable_t *)tvp->next;
}
tvp = heir->task_variables;
4b7b0: 206e 000c moveal %fp@(12),%a0
4b7b4: 2068 0114 moveal %a0@(276),%a0
while (tvp) {
4b7b8: 4a88 tstl %a0
4b7ba: 6712 beqs 4b7ce <_RTEMS_tasks_Switch_extension+0x40>
tvp->gval = *tvp->ptr;
4b7bc: 2268 0004 moveal %a0@(4),%a1
4b7c0: 2151 0008 movel %a1@,%a0@(8)
*tvp->ptr = tvp->tval;
4b7c4: 22a8 000c movel %a0@(12),%a1@
tvp = (rtems_task_variable_t *)tvp->next;
4b7c8: 2050 moveal %a0@,%a0
*tvp->ptr = tvp->gval;
tvp = (rtems_task_variable_t *)tvp->next;
}
tvp = heir->task_variables;
while (tvp) {
4b7ca: 4a88 tstl %a0
4b7cc: 66ee bnes 4b7bc <_RTEMS_tasks_Switch_extension+0x2e><== NEVER TAKEN
tvp->gval = *tvp->ptr;
*tvp->ptr = tvp->tval;
tvp = (rtems_task_variable_t *)tvp->next;
}
}
4b7ce: 4e5e unlk %fp <== NOT EXECUTED
00047b44 <_Rate_monotonic_Timeout>:
void _Rate_monotonic_Timeout(
Objects_Id id,
void *ignored
)
{
47b44: 4e56 fffc linkw %fp,#-4
47b48: 2f0a movel %a2,%sp@-
47b4a: 486e fffc pea %fp@(-4)
47b4e: 2f2e 0008 movel %fp@(8),%sp@-
47b52: 4879 0006 0460 pea 60460 <_Rate_monotonic_Information>
47b58: 4eb9 0004 9a9c jsr 49a9c <_Objects_Get>
/*
* 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 );
switch ( location ) {
47b5e: 4fef 000c lea %sp@(12),%sp
47b62: 2440 moveal %d0,%a2
47b64: 4aae fffc tstl %fp@(-4)
47b68: 6636 bnes 47ba0 <_Rate_monotonic_Timeout+0x5c> <== NEVER TAKEN
case OBJECTS_LOCAL:
the_thread = the_period->owner;
47b6a: 206a 0040 moveal %a2@(64),%a0
*/
RTEMS_INLINE_ROUTINE bool _States_Is_waiting_for_period (
States_Control the_states
)
{
return (the_states & STATES_WAITING_FOR_PERIOD);
47b6e: 2028 0010 movel %a0@(16),%d0
47b72: 0280 0000 4000 andil #16384,%d0
if ( _States_Is_waiting_for_period( the_thread->current_state ) &&
47b78: 670a beqs 47b84 <_Rate_monotonic_Timeout+0x40>
47b7a: 202a 0008 movel %a2@(8),%d0
47b7e: b0a8 0020 cmpl %a0@(32),%d0
47b82: 675e beqs 47be2 <_Rate_monotonic_Timeout+0x9e>
_Thread_Unblock( the_thread );
_Rate_monotonic_Initiate_statistics( the_period );
_Watchdog_Insert_ticks( &the_period->Timer, the_period->next_length );
} else if ( the_period->state == RATE_MONOTONIC_OWNER_IS_BLOCKING ) {
47b84: 7001 moveq #1,%d0
47b86: b0aa 0038 cmpl %a2@(56),%d0
47b8a: 671c beqs 47ba8 <_Rate_monotonic_Timeout+0x64>
_Rate_monotonic_Initiate_statistics( the_period );
_Watchdog_Insert_ticks( &the_period->Timer, the_period->next_length );
} else
the_period->state = RATE_MONOTONIC_EXPIRED;
47b8c: 7004 moveq #4,%d0
47b8e: 2540 0038 movel %d0,%a2@(56)
*/
RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void )
{
RTEMS_COMPILER_MEMORY_BARRIER();
_Thread_Dispatch_disable_level -= 1;
47b92: 2039 0006 0554 movel 60554 <_Thread_Dispatch_disable_level>,%d0
47b98: 5380 subql #1,%d0
47b9a: 23c0 0006 0554 movel %d0,60554 <_Thread_Dispatch_disable_level>
case OBJECTS_REMOTE: /* impossible */
#endif
case OBJECTS_ERROR:
break;
}
}
47ba0: 246e fff8 moveal %fp@(-8),%a2
47ba4: 4e5e unlk %fp
47ba6: 4e75 rts
_Rate_monotonic_Initiate_statistics( the_period );
_Watchdog_Insert_ticks( &the_period->Timer, the_period->next_length );
} else if ( the_period->state == RATE_MONOTONIC_OWNER_IS_BLOCKING ) {
the_period->state = RATE_MONOTONIC_EXPIRED_WHILE_BLOCKING;
47ba8: 103c 0003 moveb #3,%d0
47bac: 2540 0038 movel %d0,%a2@(56)
_Rate_monotonic_Initiate_statistics( the_period );
47bb0: 2f0a movel %a2,%sp@-
47bb2: 4eb9 0004 7548 jsr 47548 <_Rate_monotonic_Initiate_statistics>
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
47bb8: 256a 003c 001c movel %a2@(60),%a2@(28)
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
47bbe: 486a 0010 pea %a2@(16)
47bc2: 4879 0006 0616 pea 60616 <_Watchdog_Ticks_chain>
47bc8: 4eb9 0004 b5c4 jsr 4b5c4 <_Watchdog_Insert>
47bce: 4fef 000c lea %sp@(12),%sp
47bd2: 2039 0006 0554 movel 60554 <_Thread_Dispatch_disable_level>,%d0
47bd8: 5380 subql #1,%d0
47bda: 23c0 0006 0554 movel %d0,60554 <_Thread_Dispatch_disable_level>
47be0: 60be bras 47ba0 <_Rate_monotonic_Timeout+0x5c>
RTEMS_INLINE_ROUTINE void _Thread_Unblock (
Thread_Control *the_thread
)
{
_Thread_Clear_state( the_thread, STATES_BLOCKED );
47be2: 2f3c 1003 fff8 movel #268697592,%sp@-
47be8: 2f08 movel %a0,%sp@-
47bea: 4eb9 0004 9f9c jsr 49f9c <_Thread_Clear_state>
the_thread = the_period->owner;
if ( _States_Is_waiting_for_period( the_thread->current_state ) &&
the_thread->Wait.id == the_period->Object.id ) {
_Thread_Unblock( the_thread );
_Rate_monotonic_Initiate_statistics( the_period );
47bf0: 2f0a movel %a2,%sp@-
47bf2: 4eb9 0004 7548 jsr 47548 <_Rate_monotonic_Initiate_statistics>
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
47bf8: 256a 003c 001c movel %a2@(60),%a2@(28)
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
47bfe: 486a 0010 pea %a2@(16)
47c02: 4879 0006 0616 pea 60616 <_Watchdog_Ticks_chain>
47c08: 4eb9 0004 b5c4 jsr 4b5c4 <_Watchdog_Insert>
_Watchdog_Insert_ticks( &the_period->Timer, the_period->next_length );
47c0e: 4fef 0014 lea %sp@(20),%sp
*/
RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void )
{
RTEMS_COMPILER_MEMORY_BARRIER();
_Thread_Dispatch_disable_level -= 1;
47c12: 2039 0006 0554 movel 60554 <_Thread_Dispatch_disable_level>,%d0
47c18: 5380 subql #1,%d0
47c1a: 23c0 0006 0554 movel %d0,60554 <_Thread_Dispatch_disable_level>
47c20: 6000 ff7e braw 47ba0 <_Rate_monotonic_Timeout+0x5c>
00048ecc <_TOD_Set>:
*/
void _TOD_Set(
const struct timespec *time
)
{
48ecc: 4e56 0000 linkw %fp,#0
48ed0: 2039 0006 8a2c movel 68a2c <_Thread_Dispatch_disable_level>,%d0
48ed6: 5280 addql #1,%d0
48ed8: 2f0a movel %a2,%sp@-
48eda: 246e 0008 moveal %fp@(8),%a2
48ede: 23c0 0006 8a2c movel %d0,68a2c <_Thread_Dispatch_disable_level>
long seconds;
_Thread_Disable_dispatch();
_TOD_Deactivate();
seconds = _TOD_Seconds_since_epoch();
48ee4: 2039 0006 8ab6 movel 68ab6 <_TOD_Now>,%d0
if ( time->tv_sec < seconds )
48eea: 2212 movel %a2@,%d1
48eec: b280 cmpl %d0,%d1
48eee: 6d38 blts 48f28 <_TOD_Set+0x5c>
Watchdog_Adjust_directions direction,
Watchdog_Interval units
)
{
_Watchdog_Adjust( &_Watchdog_Seconds_chain, direction, units );
48ef0: 9280 subl %d0,%d1
48ef2: 2f01 movel %d1,%sp@-
48ef4: 42a7 clrl %sp@-
48ef6: 4879 0006 8ae2 pea 68ae2 <_Watchdog_Seconds_chain>
48efc: 4eb9 0004 b604 jsr 4b604 <_Watchdog_Adjust>
_Watchdog_Adjust_seconds( WATCHDOG_BACKWARD, seconds - time->tv_sec );
else
_Watchdog_Adjust_seconds( WATCHDOG_FORWARD, time->tv_sec - seconds );
/* POSIX format TOD (timespec) */
_Timestamp_Set( &_TOD_Now, time->tv_sec, time->tv_nsec );
48f02: 23d2 0006 8ab6 movel %a2@,68ab6 <_TOD_Now>
48f08: 588a addql #4,%a2
48f0a: 4fef 000c lea %sp@(12),%sp
48f0e: 23d2 0006 8aba movel %a2@,68aba <_TOD_Now+0x4>
_TOD_Is_set = true;
_TOD_Activate();
_Thread_Enable_dispatch();
}
48f14: 246e fffc moveal %fp@(-4),%a2
48f18: 4e5e unlk %fp
else
_Watchdog_Adjust_seconds( WATCHDOG_FORWARD, time->tv_sec - seconds );
/* POSIX format TOD (timespec) */
_Timestamp_Set( &_TOD_Now, time->tv_sec, time->tv_nsec );
_TOD_Is_set = true;
48f1a: 7001 moveq #1,%d0
48f1c: 13c0 0006 8a3c moveb %d0,68a3c <_TOD_Is_set>
_TOD_Activate();
_Thread_Enable_dispatch();
48f22: 4ef9 0004 a2e2 jmp 4a2e2 <_Thread_Enable_dispatch>
48f28: 9081 subl %d1,%d0
48f2a: 2f00 movel %d0,%sp@-
48f2c: 4878 0001 pea 1 <ADD>
48f30: 4879 0006 8ae2 pea 68ae2 <_Watchdog_Seconds_chain>
48f36: 4eb9 0004 b604 jsr 4b604 <_Watchdog_Adjust>
_Watchdog_Adjust_seconds( WATCHDOG_BACKWARD, seconds - time->tv_sec );
else
_Watchdog_Adjust_seconds( WATCHDOG_FORWARD, time->tv_sec - seconds );
/* POSIX format TOD (timespec) */
_Timestamp_Set( &_TOD_Now, time->tv_sec, time->tv_nsec );
48f3c: 23d2 0006 8ab6 movel %a2@,68ab6 <_TOD_Now>
48f42: 588a addql #4,%a2
48f44: 4fef 000c lea %sp@(12),%sp
48f48: 23d2 0006 8aba movel %a2@,68aba <_TOD_Now+0x4>
_TOD_Is_set = true;
_TOD_Activate();
_Thread_Enable_dispatch();
}
48f4e: 246e fffc moveal %fp@(-4),%a2
48f52: 4e5e unlk %fp
else
_Watchdog_Adjust_seconds( WATCHDOG_FORWARD, time->tv_sec - seconds );
/* POSIX format TOD (timespec) */
_Timestamp_Set( &_TOD_Now, time->tv_sec, time->tv_nsec );
_TOD_Is_set = true;
48f54: 7001 moveq #1,%d0
48f56: 13c0 0006 8a3c moveb %d0,68a3c <_TOD_Is_set>
_TOD_Activate();
_Thread_Enable_dispatch();
48f5c: 4ef9 0004 a2e2 jmp 4a2e2 <_Thread_Enable_dispatch>
...
00047580 <_TOD_Tickle_ticks>:
*
* Output parameters: NONE
*/
void _TOD_Tickle_ticks( void )
{
47580: 4e56 ffec linkw %fp,#-20
Timestamp_Control tick;
uint32_t seconds;
/* Convert the tick quantum to a timestamp */
_Timestamp_Set( &tick, 0, rtems_configuration_get_nanoseconds_per_tick() );
47584: 2239 0005 cd00 movel 5cd00 <Configuration+0xc>,%d1
*
* Output parameters: NONE
*/
void _TOD_Tickle_ticks( void )
{
4758a: 48d7 040c moveml %d2-%d3/%a2,%sp@
/* Update the counter of ticks since boot */
_Watchdog_Ticks_since_boot += 1;
/* Update the timespec format uptime */
_Timestamp_Add_to( &_TOD_Uptime, &tick );
4758e: 240e movel %fp,%d2
47590: 5182 subql #8,%d2
{
Timestamp_Control tick;
uint32_t seconds;
/* Convert the tick quantum to a timestamp */
_Timestamp_Set( &tick, 0, rtems_configuration_get_nanoseconds_per_tick() );
47592: 263c 0000 03e8 movel #1000,%d3
47598: 4c03 1800 mulsl %d3,%d1
/* Update the counter of ticks since boot */
_Watchdog_Ticks_since_boot += 1;
/* Update the timespec format uptime */
_Timestamp_Add_to( &_TOD_Uptime, &tick );
4759c: 45f9 0004 9628 lea 49628 <_Timespec_Add_to>,%a2
/* Convert the tick quantum to a timestamp */
_Timestamp_Set( &tick, 0, rtems_configuration_get_nanoseconds_per_tick() );
/* Update the counter of ticks since boot */
_Watchdog_Ticks_since_boot += 1;
475a2: 2039 0005 e548 movel 5e548 <_Watchdog_Ticks_since_boot>,%d0
475a8: 5280 addql #1,%d0
/* Update the timespec format uptime */
_Timestamp_Add_to( &_TOD_Uptime, &tick );
475aa: 2f02 movel %d2,%sp@-
475ac: 4879 0005 e496 pea 5e496 <_TOD_Uptime>
{
Timestamp_Control tick;
uint32_t seconds;
/* Convert the tick quantum to a timestamp */
_Timestamp_Set( &tick, 0, rtems_configuration_get_nanoseconds_per_tick() );
475b2: 2d41 fffc movel %d1,%fp@(-4)
475b6: 42ae fff8 clrl %fp@(-8)
/* Update the counter of ticks since boot */
_Watchdog_Ticks_since_boot += 1;
475ba: 23c0 0005 e548 movel %d0,5e548 <_Watchdog_Ticks_since_boot>
/* Update the timespec format uptime */
_Timestamp_Add_to( &_TOD_Uptime, &tick );
475c0: 4e92 jsr %a2@
/* we do not care how much the uptime changed */
/* Update the timespec format TOD */
seconds = _Timestamp_Add_to_at_tick( &_TOD_Now, &tick );
475c2: 2f02 movel %d2,%sp@-
475c4: 4879 0005 e4a6 pea 5e4a6 <_TOD_Now>
475ca: 4e92 jsr %a2@
while ( seconds ) {
475cc: 4fef 0010 lea %sp@(16),%sp
/* Update the timespec format uptime */
_Timestamp_Add_to( &_TOD_Uptime, &tick );
/* we do not care how much the uptime changed */
/* Update the timespec format TOD */
seconds = _Timestamp_Add_to_at_tick( &_TOD_Now, &tick );
475d0: 2400 movel %d0,%d2
while ( seconds ) {
475d2: 6716 beqs 475ea <_TOD_Tickle_ticks+0x6a>
475d4: 45f9 0004 9b60 lea 49b60 <_Watchdog_Tickle>,%a2
*/
RTEMS_INLINE_ROUTINE void _Watchdog_Tickle_seconds( void )
{
_Watchdog_Tickle( &_Watchdog_Seconds_chain );
475da: 4879 0005 e4d2 pea 5e4d2 <_Watchdog_Seconds_chain>
_Watchdog_Tickle_seconds();
seconds--;
475e0: 5382 subql #1,%d2
475e2: 4e92 jsr %a2@
_Timestamp_Add_to( &_TOD_Uptime, &tick );
/* we do not care how much the uptime changed */
/* Update the timespec format TOD */
seconds = _Timestamp_Add_to_at_tick( &_TOD_Now, &tick );
while ( seconds ) {
475e4: 588f addql #4,%sp
475e6: 4a82 tstl %d2
475e8: 66f0 bnes 475da <_TOD_Tickle_ticks+0x5a> <== NEVER TAKEN
_Watchdog_Tickle_seconds();
seconds--;
}
}
475ea: 4cee 040c ffec moveml %fp@(-20),%d2-%d3/%a2
475f0: 4e5e unlk %fp <== NOT EXECUTED
00047554 <_TOD_Validate>:
*/
bool _TOD_Validate(
const rtems_time_of_day *the_tod
)
{
47554: 4e56 0000 linkw %fp,#0
47558: 206e 0008 moveal %fp@(8),%a0
uint32_t days_in_month;
uint32_t ticks_per_second;
ticks_per_second = TOD_MICROSECONDS_PER_SECOND /
rtems_configuration_get_microseconds_per_tick();
4755c: 2039 0005 f540 movel 5f540 <Configuration+0xc>,%d0
*/
bool _TOD_Validate(
const rtems_time_of_day *the_tod
)
{
47562: 2f02 movel %d2,%sp@-
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) ||
47564: 4a88 tstl %a0
47566: 6762 beqs 475ca <_TOD_Validate+0x76> <== NEVER TAKEN
)
{
uint32_t days_in_month;
uint32_t ticks_per_second;
ticks_per_second = TOD_MICROSECONDS_PER_SECOND /
47568: 243c 000f 4240 movel #1000000,%d2
4756e: 4c40 2002 remul %d0,%d2,%d2
rtems_configuration_get_microseconds_per_tick();
if ((!the_tod) ||
47572: b4a8 0018 cmpl %a0@(24),%d2
47576: 6352 blss 475ca <_TOD_Validate+0x76>
(the_tod->ticks >= ticks_per_second) ||
47578: 703b moveq #59,%d0
4757a: b0a8 0014 cmpl %a0@(20),%d0
4757e: 654a bcss 475ca <_TOD_Validate+0x76>
(the_tod->second >= TOD_SECONDS_PER_MINUTE) ||
47580: b0a8 0010 cmpl %a0@(16),%d0
47584: 6544 bcss 475ca <_TOD_Validate+0x76>
(the_tod->minute >= TOD_MINUTES_PER_HOUR) ||
47586: 7217 moveq #23,%d1
47588: b2a8 000c cmpl %a0@(12),%d1
4758c: 653c bcss 475ca <_TOD_Validate+0x76>
(the_tod->hour >= TOD_HOURS_PER_DAY) ||
(the_tod->month == 0) ||
4758e: 2028 0004 movel %a0@(4),%d0
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) ||
47592: 6736 beqs 475ca <_TOD_Validate+0x76> <== NEVER TAKEN
(the_tod->month == 0) ||
47594: 740c moveq #12,%d2
47596: b480 cmpl %d0,%d2
47598: 6530 bcss 475ca <_TOD_Validate+0x76>
(the_tod->month > TOD_MONTHS_PER_YEAR) ||
(the_tod->year < TOD_BASE_YEAR) ||
4759a: 2210 movel %a0@,%d1
(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) ||
4759c: 0c81 0000 07c3 cmpil #1987,%d1
475a2: 6326 blss 475ca <_TOD_Validate+0x76>
(the_tod->year < TOD_BASE_YEAR) ||
(the_tod->day == 0) )
475a4: 2068 0008 moveal %a0@(8),%a0
(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) ||
475a8: 4a88 tstl %a0
475aa: 671e beqs 475ca <_TOD_Validate+0x76> <== NEVER TAKEN
(the_tod->day == 0) )
return false;
if ( (the_tod->year % 4) == 0 )
475ac: 143c 0003 moveb #3,%d2
475b0: c282 andl %d2,%d1
475b2: 661e bnes 475d2 <_TOD_Validate+0x7e>
days_in_month = _TOD_Days_per_month[ 1 ][ the_tod->month ];
475b4: 43f9 0005 e6ba lea 5e6ba <_TOD_Days_per_month>,%a1
475ba: 2031 0c34 movel %a1@(00000034,%d0:l:4),%d0
* false - if the the_tod is invalid
*
* NOTE: This routine only works for leap-years through 2099.
*/
bool _TOD_Validate(
475be: b1c0 cmpal %d0,%a0
475c0: 53c0 sls %d0
475c2: 4480 negl %d0
if ( the_tod->day > days_in_month )
return false;
return true;
}
475c4: 241f movel %sp@+,%d2
475c6: 4e5e unlk %fp
475c8: 4e75 rts
475ca: 241f movel %sp@+,%d2
475cc: 4e5e unlk %fp
(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;
475ce: 4200 clrb %d0
if ( the_tod->day > days_in_month )
return false;
return true;
}
475d0: 4e75 rts
return false;
if ( (the_tod->year % 4) == 0 )
days_in_month = _TOD_Days_per_month[ 1 ][ the_tod->month ];
else
days_in_month = _TOD_Days_per_month[ 0 ][ the_tod->month ];
475d2: 43f9 0005 e6ba lea 5e6ba <_TOD_Days_per_month>,%a1
475d8: 2031 0c00 movel %a1@(00000000,%d0:l:4),%d0
* false - if the the_tod is invalid
*
* NOTE: This routine only works for leap-years through 2099.
*/
bool _TOD_Validate(
475dc: b1c0 cmpal %d0,%a0
475de: 53c0 sls %d0
475e0: 4480 negl %d0
475e2: 60e0 bras 475c4 <_TOD_Validate+0x70>
000482fc <_Thread_Change_priority>:
void _Thread_Change_priority(
Thread_Control *the_thread,
Priority_Control new_priority,
bool prepend_it
)
{
482fc: 4e56 fff0 linkw %fp,#-16
48300: 48d7 041c moveml %d2-%d4/%a2,%sp@
48304: 246e 0008 moveal %fp@(8),%a2
*/
/*
* Save original state
*/
original_state = the_thread->current_state;
48308: 262a 0010 movel %a2@(16),%d3
void _Thread_Change_priority(
Thread_Control *the_thread,
Priority_Control new_priority,
bool prepend_it
)
{
4830c: 242e 000c movel %fp@(12),%d2
/*
* 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 );
48310: 2f0a movel %a2,%sp@-
void _Thread_Change_priority(
Thread_Control *the_thread,
Priority_Control new_priority,
bool prepend_it
)
{
48312: 182e 0013 moveb %fp@(19),%d4
/*
* 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 );
48316: 4eb9 0004 9280 jsr 49280 <_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 )
4831c: 588f addql #4,%sp
4831e: b4aa 0014 cmpl %a2@(20),%d2
48322: 670c beqs 48330 <_Thread_Change_priority+0x34>
_Thread_Set_priority( the_thread, new_priority );
48324: 2f02 movel %d2,%sp@-
48326: 2f0a movel %a2,%sp@-
48328: 4eb9 0004 90fc jsr 490fc <_Thread_Set_priority>
4832e: 508f addql #8,%sp
_ISR_Disable( level );
48330: 203c 0000 0700 movel #1792,%d0
48336: 40c1 movew %sr,%d1
48338: 8081 orl %d1,%d0
4833a: 46c0 movew %d0,%sr
/*
* 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;
4833c: 202a 0010 movel %a2@(16),%d0
if ( state != STATES_TRANSIENT ) {
48340: 7404 moveq #4,%d2
48342: b480 cmpl %d0,%d2
48344: 6738 beqs 4837e <_Thread_Change_priority+0x82>
/* Only clear the transient state if it wasn't set already */
if ( ! _States_Is_transient( original_state ) )
48346: 44c3 movew %d3,%ccr
48348: 6708 beqs 48352 <_Thread_Change_priority+0x56> <== NEVER TAKEN
RTEMS_INLINE_ROUTINE States_Control _States_Clear (
States_Control states_to_clear,
States_Control current_state
)
{
return (current_state & ~states_to_clear);
4834a: 74fb moveq #-5,%d2
4834c: c480 andl %d0,%d2
4834e: 2542 0010 movel %d2,%a2@(16)
the_thread->current_state = _States_Clear( STATES_TRANSIENT, state );
_ISR_Enable( level );
48352: 46c1 movew %d1,%sr
*/
RTEMS_INLINE_ROUTINE bool _States_Is_waiting_on_thread_queue (
States_Control the_states
)
{
return (the_states & STATES_WAITING_ON_THREAD_QUEUE);
48354: 0280 0003 bee0 andil #245472,%d0
if ( _States_Is_waiting_on_thread_queue( state ) ) {
4835a: 660a bnes 48366 <_Thread_Change_priority+0x6a>
if ( !_Thread_Is_executing_also_the_heir() &&
_Thread_Executing->is_preemptible )
_Context_Switch_necessary = true;
_ISR_Enable( level );
}
4835c: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2
48362: 4e5e unlk %fp
48364: 4e75 rts
/* 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 );
48366: 2d4a 000c movel %a2,%fp@(12)
4836a: 2d6a 0044 0008 movel %a2@(68),%fp@(8)
if ( !_Thread_Is_executing_also_the_heir() &&
_Thread_Executing->is_preemptible )
_Context_Switch_necessary = true;
_ISR_Enable( level );
}
48370: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2
48376: 4e5e unlk %fp
/* 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 );
48378: 4ef9 0004 9050 jmp 49050 <_Thread_queue_Requeue>
}
return;
}
/* Only clear the transient state if it wasn't set already */
if ( ! _States_Is_transient( original_state ) ) {
4837e: 44c3 movew %d3,%ccr
48380: 673c beqs 483be <_Thread_Change_priority+0xc2> <== NEVER TAKEN
RTEMS_INLINE_ROUTINE void _Priority_Add_to_bit_map (
Priority_Information *the_priority_map
)
{
*the_priority_map->minor |= the_priority_map->ready_minor;
48382: 206a 008e moveal %a2@(142),%a0
48386: 302a 0094 movew %a2@(148),%d0
4838a: 3410 movew %a0@,%d2
* 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 );
4838c: 42aa 0010 clrl %a2@(16)
48390: 8082 orl %d2,%d0
48392: 3080 movew %d0,%a0@
_Priority_Major_bit_map |= the_priority_map->ready_major;
48394: 3439 0005 e4bc movew 5e4bc <_Priority_Major_bit_map>,%d2
4839a: 302a 0092 movew %a2@(146),%d0
4839e: 8082 orl %d2,%d0
483a0: 33c0 0005 e4bc movew %d0,5e4bc <_Priority_Major_bit_map>
_Priority_Add_to_bit_map( &the_thread->Priority_map );
if ( prepend_it )
483a6: 4a04 tstb %d4
483a8: 6700 0082 beqw 4842c <_Thread_Change_priority+0x130>
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Head(
Chain_Control *the_chain
)
{
return (Chain_Node *) the_chain;
483ac: 206a 008a moveal %a2@(138),%a0
)
{
Chain_Node *before_node;
the_node->previous = after_node;
before_node = after_node->next;
483b0: 2250 moveal %a0@,%a1
Chain_Node *the_node
)
{
Chain_Node *before_node;
the_node->previous = after_node;
483b2: 2548 0004 movel %a0,%a2@(4)
before_node = after_node->next;
after_node->next = the_node;
483b6: 208a movel %a2,%a0@
the_node->next = before_node;
before_node->previous = the_node;
483b8: 234a 0004 movel %a2,%a1@(4)
Chain_Node *before_node;
the_node->previous = after_node;
before_node = after_node->next;
after_node->next = the_node;
the_node->next = before_node;
483bc: 2489 movel %a1,%a2@
_Chain_Prepend_unprotected( the_thread->ready, &the_thread->Object.Node );
else
_Chain_Append_unprotected( the_thread->ready, &the_thread->Object.Node );
}
_ISR_Flash( level );
483be: 203c 0000 0700 movel #1792,%d0
483c4: 46c1 movew %d1,%sr
483c6: 8081 orl %d1,%d0
483c8: 46c0 movew %d0,%sr
RTEMS_INLINE_ROUTINE Priority_Control _Priority_Get_highest( void )
{
Priority_Bit_map_control minor;
Priority_Bit_map_control major;
_Bitfield_Find_first_bit( _Priority_Major_bit_map, major );
483ca: 3039 0005 e4bc movew 5e4bc <_Priority_Major_bit_map>,%d0
483d0: 4840 swap %d0
483d2: 04c0 ff1 %d0
_Bitfield_Find_first_bit( _Priority_Bit_map[major], minor );
483d4: 4282 clrl %d2
483d6: 41f9 0005 e524 lea 5e524 <_Priority_Bit_map>,%a0
483dc: 3400 movew %d0,%d2
483de: 3030 2a00 movew %a0@(00000000,%d2:l:2),%d0
483e2: 4840 swap %d0
483e4: 04c0 ff1 %d0
return (_Priority_Bits_index( major ) << 4) +
483e6: 4283 clrl %d3
483e8: e98a lsll #4,%d2
483ea: 3600 movew %d0,%d3
*/
RTEMS_INLINE_ROUTINE void _Thread_Calculate_heir( void )
{
_Thread_Heir = (Thread_Control *)
_Thread_Ready_chain[ _Priority_Get_highest() ].first;
483ec: 2279 0005 e3d0 moveal 5e3d0 <_Thread_Ready_chain>,%a1
483f2: 2002 movel %d2,%d0
483f4: d083 addl %d3,%d0
483f6: 2400 movel %d0,%d2
483f8: e58a lsll #2,%d2
483fa: e988 lsll #4,%d0
* is also the heir thread, and false otherwise.
*/
RTEMS_INLINE_ROUTINE bool _Thread_Is_executing_also_the_heir( void )
{
return ( _Thread_Executing == _Thread_Heir );
483fc: 2079 0005 e5e0 moveal 5e5e0 <_Per_CPU_Information+0xc>,%a0
*/
RTEMS_INLINE_ROUTINE void _Thread_Calculate_heir( void )
{
_Thread_Heir = (Thread_Control *)
_Thread_Ready_chain[ _Priority_Get_highest() ].first;
48402: 93c2 subal %d2,%a1
* ready thread.
*/
RTEMS_INLINE_ROUTINE void _Thread_Calculate_heir( void )
{
_Thread_Heir = (Thread_Control *)
48404: 2031 0800 movel %a1@(00000000,%d0:l),%d0
48408: 23c0 0005 e5e4 movel %d0,5e5e4 <_Per_CPU_Information+0x10>
* We altered the set of thread priorities. So let's figure out
* who is the heir and if we need to switch to them.
*/
_Thread_Calculate_heir();
if ( !_Thread_Is_executing_also_the_heir() &&
4840e: b1c0 cmpal %d0,%a0
48410: 670e beqs 48420 <_Thread_Change_priority+0x124>
48412: 4a28 0074 tstb %a0@(116)
48416: 6708 beqs 48420 <_Thread_Change_priority+0x124>
_Thread_Executing->is_preemptible )
_Context_Switch_necessary = true;
48418: 7401 moveq #1,%d2
4841a: 13c2 0005 e5ec moveb %d2,5e5ec <_Per_CPU_Information+0x18>
_ISR_Enable( level );
48420: 46c1 movew %d1,%sr
}
48422: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2
48428: 4e5e unlk %fp
4842a: 4e75 rts
_Priority_Add_to_bit_map( &the_thread->Priority_map );
if ( prepend_it )
_Chain_Prepend_unprotected( the_thread->ready, &the_thread->Object.Node );
else
_Chain_Append_unprotected( the_thread->ready, &the_thread->Object.Node );
4842c: 206a 008a moveal %a2@(138),%a0
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
48430: 2008 movel %a0,%d0
48432: 5880 addql #4,%d0
)
{
Chain_Node *old_last_node;
the_node->next = _Chain_Tail(the_chain);
old_last_node = the_chain->last;
48434: 2268 0008 moveal %a0@(8),%a1
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
48438: 2480 movel %d0,%a2@
{
Chain_Node *old_last_node;
the_node->next = _Chain_Tail(the_chain);
old_last_node = the_chain->last;
the_chain->last = the_node;
4843a: 214a 0008 movel %a2,%a0@(8)
old_last_node->next = the_node;
4843e: 228a movel %a2,%a1@
the_node->previous = old_last_node;
48440: 2549 0004 movel %a1,%a2@(4)
48444: 6000 ff78 braw 483be <_Thread_Change_priority+0xc2>
00048448 <_Thread_Clear_state>:
)
{
ISR_Level level;
States_Control current_state;
_ISR_Disable( level );
48448: 327c 0700 moveaw #1792,%a1
4844c: 2009 movel %a1,%d0
void _Thread_Clear_state(
Thread_Control *the_thread,
States_Control state
)
{
4844e: 4e56 ffec linkw %fp,#-20
48452: 206e 0008 moveal %fp@(8),%a0
48456: 48d7 1c0c moveml %d2-%d3/%a2-%a4,%sp@
4845a: 242e 000c movel %fp@(12),%d2
ISR_Level level;
States_Control current_state;
_ISR_Disable( level );
4845e: 40c3 movew %sr,%d3
48460: 8083 orl %d3,%d0
48462: 46c0 movew %d0,%sr
current_state = the_thread->current_state;
48464: 2228 0010 movel %a0@(16),%d1
if ( current_state & state ) {
48468: 2002 movel %d2,%d0
4846a: c081 andl %d1,%d0
4846c: 6776 beqs 484e4 <_Thread_Clear_state+0x9c>
RTEMS_INLINE_ROUTINE States_Control _States_Clear (
States_Control states_to_clear,
States_Control current_state
)
{
return (current_state & ~states_to_clear);
4846e: 2002 movel %d2,%d0
48470: 4680 notl %d0
48472: c081 andl %d1,%d0
current_state =
the_thread->current_state = _States_Clear( state, current_state );
48474: 2140 0010 movel %d0,%a0@(16)
if ( _States_Is_ready( current_state ) ) {
48478: 666a bnes 484e4 <_Thread_Clear_state+0x9c>
RTEMS_INLINE_ROUTINE void _Priority_Add_to_bit_map (
Priority_Information *the_priority_map
)
{
*the_priority_map->minor |= the_priority_map->ready_minor;
4847a: 2868 008e moveal %a0@(142),%a4
_Priority_Add_to_bit_map( &the_thread->Priority_map );
_Chain_Append_unprotected(the_thread->ready, &the_thread->Object.Node);
4847e: 2468 008a moveal %a0@(138),%a2
48482: 3214 movew %a4@,%d1
48484: 3028 0094 movew %a0@(148),%d0
)
{
Chain_Node *old_last_node;
the_node->next = _Chain_Tail(the_chain);
old_last_node = the_chain->last;
48488: 266a 0008 moveal %a2@(8),%a3
4848c: 8081 orl %d1,%d0
4848e: 3880 movew %d0,%a4@
_Priority_Major_bit_map |= the_priority_map->ready_major;
48490: 3239 0005 e4bc movew 5e4bc <_Priority_Major_bit_map>,%d1
48496: 3028 0092 movew %a0@(146),%d0
4849a: 8081 orl %d1,%d0
4849c: 33c0 0005 e4bc movew %d0,5e4bc <_Priority_Major_bit_map>
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
484a2: 200a movel %a2,%d0
484a4: 5880 addql #4,%d0
484a6: 2080 movel %d0,%a0@
{
Chain_Node *old_last_node;
the_node->next = _Chain_Tail(the_chain);
old_last_node = the_chain->last;
the_chain->last = the_node;
484a8: 2548 0008 movel %a0,%a2@(8)
old_last_node->next = the_node;
484ac: 2688 movel %a0,%a3@
the_node->previous = old_last_node;
484ae: 214b 0004 movel %a3,%a0@(4)
_ISR_Flash( level );
484b2: 2009 movel %a1,%d0
484b4: 46c3 movew %d3,%sr
484b6: 8083 orl %d3,%d0
484b8: 46c0 movew %d0,%sr
* 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 ( the_thread->current_priority < _Thread_Heir->current_priority ) {
484ba: 2028 0014 movel %a0@(20),%d0
484be: 2279 0005 e5e4 moveal 5e5e4 <_Per_CPU_Information+0x10>,%a1
484c4: b0a9 0014 cmpl %a1@(20),%d0
484c8: 641a bccs 484e4 <_Thread_Clear_state+0x9c>
_Thread_Heir = the_thread;
484ca: 23c8 0005 e5e4 movel %a0,5e5e4 <_Per_CPU_Information+0x10>
if ( _Thread_Executing->is_preemptible ||
484d0: 2079 0005 e5e0 moveal 5e5e0 <_Per_CPU_Information+0xc>,%a0
484d6: 4a28 0074 tstb %a0@(116)
484da: 6712 beqs 484ee <_Thread_Clear_state+0xa6>
the_thread->current_priority == 0 )
_Context_Switch_necessary = true;
484dc: 7001 moveq #1,%d0
484de: 13c0 0005 e5ec moveb %d0,5e5ec <_Per_CPU_Information+0x18>
}
}
}
_ISR_Enable( level );
484e4: 46c3 movew %d3,%sr
}
484e6: 4cd7 1c0c moveml %sp@,%d2-%d3/%a2-%a4
484ea: 4e5e unlk %fp
484ec: 4e75 rts
* 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 ( the_thread->current_priority < _Thread_Heir->current_priority ) {
_Thread_Heir = the_thread;
if ( _Thread_Executing->is_preemptible ||
484ee: 4a80 tstl %d0
484f0: 66f2 bnes 484e4 <_Thread_Clear_state+0x9c> <== ALWAYS TAKEN
the_thread->current_priority == 0 )
_Context_Switch_necessary = true;
484f2: 7001 moveq #1,%d0 <== NOT EXECUTED
484f4: 13c0 0005 e5ec moveb %d0,5e5ec <_Per_CPU_Information+0x18> <== NOT EXECUTED
484fa: 60e8 bras 484e4 <_Thread_Clear_state+0x9c> <== NOT EXECUTED
000484fc <_Thread_Close>:
RTEMS_INLINE_ROUTINE void _Objects_Invalidate_Id(
Objects_Information *information,
Objects_Control *the_object
)
{
_Objects_Set_local_object(
484fc: 4280 clrl %d0
void _Thread_Close(
Objects_Information *information,
Thread_Control *the_thread
)
{
484fe: 4e56 0000 linkw %fp,#0
48502: 2f0b movel %a3,%sp@-
48504: 266e 0008 moveal %fp@(8),%a3
48508: 2f0a movel %a2,%sp@-
4850a: 246e 000c moveal %fp@(12),%a2
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
4850e: 206b 0018 moveal %a3@(24),%a0
RTEMS_INLINE_ROUTINE void _Objects_Invalidate_Id(
Objects_Information *information,
Objects_Control *the_object
)
{
_Objects_Set_local_object(
48512: 302a 000a movew %a2@(10),%d0
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
48516: 42b0 0c00 clrl %a0@(00000000,%d0:l:4)
*/
RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void )
{
RTEMS_COMPILER_MEMORY_BARRIER();
_Thread_Dispatch_disable_level -= 1;
4851a: 2039 0005 e41c movel 5e41c <_Thread_Dispatch_disable_level>,%d0
48520: 5380 subql #1,%d0
* disappear and set a transient state on it. So we temporarily
* unnest dispatching.
*/
_Thread_Unnest_dispatch();
_User_extensions_Thread_delete( the_thread );
48522: 2f0a movel %a2,%sp@-
48524: 23c0 0005 e41c movel %d0,5e41c <_Thread_Dispatch_disable_level>
4852a: 4eb9 0004 98ac jsr 498ac <_User_extensions_Thread_delete>
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
48530: 2039 0005 e41c movel 5e41c <_Thread_Dispatch_disable_level>,%d0
48536: 5280 addql #1,%d0
48538: 23c0 0005 e41c movel %d0,5e41c <_Thread_Dispatch_disable_level>
/*
* Now we are in a dispatching critical section again and we
* can take the thread OUT of the published set. It is invalid
* to use this thread's Id OR name after this call.
*/
_Objects_Close( information, &the_thread->Object );
4853e: 2f0a movel %a2,%sp@-
48540: 2f0b movel %a3,%sp@-
48542: 4eb9 0004 7b1c jsr 47b1c <_Objects_Close>
/*
* By setting the dormant state, the thread will not be considered
* for scheduling when we remove any blocking states.
*/
_Thread_Set_state( the_thread, STATES_DORMANT );
48548: 4878 0001 pea 1 <ADD>
4854c: 2f0a movel %a2,%sp@-
4854e: 4eb9 0004 916c jsr 4916c <_Thread_Set_state>
if ( !_Thread_queue_Extract_with_proxy( the_thread ) ) {
48554: 2f0a movel %a2,%sp@-
48556: 4eb9 0004 8f4c jsr 48f4c <_Thread_queue_Extract_with_proxy>
4855c: 4fef 0018 lea %sp@(24),%sp
48560: 4a00 tstb %d0
48562: 6608 bnes 4856c <_Thread_Close+0x70>
if ( _Watchdog_Is_active( &the_thread->Timer ) )
48564: 7002 moveq #2,%d0
48566: b0aa 0050 cmpl %a2@(80),%d0
4856a: 6756 beqs 485c2 <_Thread_Close+0xc6>
/*
* The thread might have been FP. So deal with that.
*/
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
#if ( CPU_USE_DEFERRED_FP_SWITCH == TRUE )
if ( _Thread_Is_allocated_fp( the_thread ) )
4856c: b5f9 0005 e49e cmpal 5e49e <_Thread_Allocated_fp>,%a2
48572: 6746 beqs 485ba <_Thread_Close+0xbe>
_Thread_Deallocate_fp();
#endif
the_thread->fp_context = NULL;
if ( the_thread->Start.fp_context )
48574: 202a 00c4 movel %a2@(196),%d0
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
#if ( CPU_USE_DEFERRED_FP_SWITCH == TRUE )
if ( _Thread_Is_allocated_fp( the_thread ) )
_Thread_Deallocate_fp();
#endif
the_thread->fp_context = NULL;
48578: 42aa 0100 clrl %a2@(256)
if ( the_thread->Start.fp_context )
4857c: 4a80 tstl %d0
4857e: 670a beqs 4858a <_Thread_Close+0x8e>
(void) _Workspace_Free( the_thread->Start.fp_context );
48580: 2f00 movel %d0,%sp@-
48582: 4eb9 0004 9c5e jsr 49c5e <_Workspace_Free>
48588: 588f addql #4,%sp
/*
* Free the rest of the memory associated with this task
* and set the associated pointers to NULL for safety.
*/
_Thread_Stack_Free( the_thread );
4858a: 2f0a movel %a2,%sp@-
4858c: 4eb9 0004 9368 jsr 49368 <_Thread_Stack_Free>
the_thread->Start.stack = NULL;
if ( the_thread->extensions )
48592: 202a 0110 movel %a2@(272),%d0
48596: 588f addql #4,%sp
/*
* Free the rest of the memory associated with this task
* and set the associated pointers to NULL for safety.
*/
_Thread_Stack_Free( the_thread );
the_thread->Start.stack = NULL;
48598: 42aa 00c8 clrl %a2@(200)
if ( the_thread->extensions )
4859c: 4a80 tstl %d0
4859e: 670a beqs 485aa <_Thread_Close+0xae>
(void) _Workspace_Free( the_thread->extensions );
485a0: 2f00 movel %d0,%sp@-
485a2: 4eb9 0004 9c5e jsr 49c5e <_Workspace_Free>
485a8: 588f addql #4,%sp
the_thread->extensions = NULL;
485aa: 42aa 0110 clrl %a2@(272)
}
485ae: 246e fff8 moveal %fp@(-8),%a2
485b2: 266e fffc moveal %fp@(-4),%a3
485b6: 4e5e unlk %fp
485b8: 4e75 rts
*/
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
RTEMS_INLINE_ROUTINE void _Thread_Deallocate_fp( void )
{
_Thread_Allocated_fp = NULL;
485ba: 42b9 0005 e49e clrl 5e49e <_Thread_Allocated_fp>
485c0: 60b2 bras 48574 <_Thread_Close+0x78>
*/
_Thread_Set_state( the_thread, STATES_DORMANT );
if ( !_Thread_queue_Extract_with_proxy( the_thread ) ) {
if ( _Watchdog_Is_active( &the_thread->Timer ) )
(void) _Watchdog_Remove( &the_thread->Timer );
485c2: 486a 0048 pea %a2@(72)
485c6: 4eb9 0004 9ac0 jsr 49ac0 <_Watchdog_Remove>
485cc: 588f addql #4,%sp
/*
* The thread might have been FP. So deal with that.
*/
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
#if ( CPU_USE_DEFERRED_FP_SWITCH == TRUE )
if ( _Thread_Is_allocated_fp( the_thread ) )
485ce: b5f9 0005 e49e cmpal 5e49e <_Thread_Allocated_fp>,%a2
485d4: 669e bnes 48574 <_Thread_Close+0x78> <== ALWAYS TAKEN
485d6: 60e2 bras 485ba <_Thread_Close+0xbe> <== NOT EXECUTED
00048688 <_Thread_Delay_ended>:
void _Thread_Delay_ended(
Objects_Id id,
void *ignored __attribute__((unused))
)
{
48688: 4e56 fffc linkw %fp,#-4
Thread_Control *the_thread;
Objects_Locations location;
the_thread = _Thread_Get( id, &location );
4868c: 486e fffc pea %fp@(-4)
48690: 2f2e 0008 movel %fp@(8),%sp@-
48694: 4eb9 0004 8854 jsr 48854 <_Thread_Get>
switch ( location ) {
4869a: 508f addql #8,%sp
4869c: 4aae fffc tstl %fp@(-4)
486a0: 661e bnes 486c0 <_Thread_Delay_ended+0x38> <== NEVER TAKEN
#if defined(RTEMS_MULTIPROCESSING)
case OBJECTS_REMOTE: /* impossible */
#endif
break;
case OBJECTS_LOCAL:
_Thread_Clear_state(
486a2: 2f3c 1000 0018 movel #268435480,%sp@-
486a8: 2f00 movel %d0,%sp@-
486aa: 4eb9 0004 8448 jsr 48448 <_Thread_Clear_state>
486b0: 508f addql #8,%sp
486b2: 2039 0005 e41c movel 5e41c <_Thread_Dispatch_disable_level>,%d0
486b8: 5380 subql #1,%d0
486ba: 23c0 0005 e41c movel %d0,5e41c <_Thread_Dispatch_disable_level>
| STATES_INTERRUPTIBLE_BY_SIGNAL
);
_Thread_Unnest_dispatch();
break;
}
}
486c0: 4e5e unlk %fp <== NOT EXECUTED
000486c4 <_Thread_Dispatch>:
* dispatch thread
* no dispatch thread
*/
void _Thread_Dispatch( void )
{
486c4: 4e56 ffc8 linkw %fp,#-56
486c8: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
Thread_Control *executing;
Thread_Control *heir;
ISR_Level level;
executing = _Thread_Executing;
_ISR_Disable( level );
486cc: 283c 0000 0700 movel #1792,%d4
486d2: 2004 movel %d4,%d0
{
Thread_Control *executing;
Thread_Control *heir;
ISR_Level level;
executing = _Thread_Executing;
486d4: 2479 0005 e5e0 moveal 5e5e0 <_Per_CPU_Information+0xc>,%a2
_ISR_Disable( level );
486da: 40c1 movew %sr,%d1
486dc: 8081 orl %d1,%d0
486de: 46c0 movew %d0,%sr
while ( _Context_Switch_necessary == true ) {
486e0: 1039 0005 e5ec moveb 5e5ec <_Per_CPU_Information+0x18>,%d0
486e6: 6700 0120 beqw 48808 <_Thread_Dispatch+0x144>
heir = _Thread_Heir;
_Thread_Dispatch_disable_level = 1;
486ea: 7001 moveq #1,%d0
486ec: 23c0 0005 e41c movel %d0,5e41c <_Thread_Dispatch_disable_level>
ISR_Level level;
executing = _Thread_Executing;
_ISR_Disable( level );
while ( _Context_Switch_necessary == true ) {
heir = _Thread_Heir;
486f2: 2679 0005 e5e4 moveal 5e5e4 <_Per_CPU_Information+0x10>,%a3
_Thread_Dispatch_disable_level = 1;
_Context_Switch_necessary = false;
486f8: 4200 clrb %d0
_Thread_Executing = heir;
486fa: 23cb 0005 e5e0 movel %a3,5e5e0 <_Per_CPU_Information+0xc>
executing = _Thread_Executing;
_ISR_Disable( level );
while ( _Context_Switch_necessary == true ) {
heir = _Thread_Heir;
_Thread_Dispatch_disable_level = 1;
_Context_Switch_necessary = false;
48700: 13c0 0005 e5ec moveb %d0,5e5ec <_Per_CPU_Information+0x18>
/*
* 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 )
48706: b7ca cmpal %a2,%a3
48708: 6700 00fe beqw 48808 <_Thread_Dispatch+0x144>
4870c: 260e movel %fp,%d3
4870e: 240e movel %fp,%d2
48710: 5183 subql #8,%d3
48712: 2e3c 0004 bc10 movel #310288,%d7
48718: 0682 ffff fff0 addil #-16,%d2
4871e: 2c3c 0004 9670 movel #300656,%d6
48724: 2a3c 0004 9628 movel #300584,%d5
4872a: 4bf9 0004 9938 lea 49938 <_User_extensions_Thread_switch>,%a5
48730: 49f9 0004 9cac lea 49cac <_CPU_Context_switch>,%a4
*/
#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 )
48736: 7001 moveq #1,%d0
48738: b0ab 007a cmpl %a3@(122),%d0
4873c: 6700 00e2 beqw 48820 <_Thread_Dispatch+0x15c>
heir->cpu_time_budget = _Thread_Ticks_per_timeslice;
_ISR_Enable( level );
48740: 46c1 movew %d1,%sr
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
{
Timestamp_Control uptime, ran;
_TOD_Get_uptime( &uptime );
48742: 2f03 movel %d3,%sp@-
48744: 2047 moveal %d7,%a0
48746: 4e90 jsr %a0@
_Timestamp_Subtract(
48748: 2046 moveal %d6,%a0
4874a: 2f02 movel %d2,%sp@-
4874c: 2f03 movel %d3,%sp@-
4874e: 4879 0005 e4ca pea 5e4ca <_Thread_Time_of_last_context_switch>
48754: 4e90 jsr %a0@
&_Thread_Time_of_last_context_switch,
&uptime,
&ran
);
_Timestamp_Add_to( &executing->cpu_time_used, &ran );
48756: 2045 moveal %d5,%a0
48758: 2f02 movel %d2,%sp@-
4875a: 486a 0082 pea %a2@(130)
4875e: 4e90 jsr %a0@
#endif
/*
* Switch libc's task specific data.
*/
if ( _Thread_libc_reent ) {
48760: 2079 0005 e4a2 moveal 5e4a2 <_Thread_libc_reent>,%a0
48766: 4fef 0018 lea %sp@(24),%sp
&_Thread_Time_of_last_context_switch,
&uptime,
&ran
);
_Timestamp_Add_to( &executing->cpu_time_used, &ran );
_Thread_Time_of_last_context_switch = uptime;
4876a: 202e fff8 movel %fp@(-8),%d0
4876e: 222e fffc movel %fp@(-4),%d1
48772: 23c0 0005 e4ca movel %d0,5e4ca <_Thread_Time_of_last_context_switch>
48778: 23c1 0005 e4ce movel %d1,5e4ce <_Thread_Time_of_last_context_switch+0x4>
#endif
/*
* Switch libc's task specific data.
*/
if ( _Thread_libc_reent ) {
4877e: 4a88 tstl %a0
48780: 6708 beqs 4878a <_Thread_Dispatch+0xc6> <== NEVER TAKEN
executing->libc_reent = *_Thread_libc_reent;
48782: 2550 0104 movel %a0@,%a2@(260)
*_Thread_libc_reent = heir->libc_reent;
48786: 20ab 0104 movel %a3@(260),%a0@
}
_User_extensions_Thread_switch( executing, heir );
4878a: 2f0b movel %a3,%sp@-
4878c: 2f0a movel %a2,%sp@-
4878e: 4e95 jsr %a5@
if ( executing->fp_context != NULL )
_Context_Save_fp( &executing->fp_context );
#endif
#endif
_Context_Switch( &executing->Registers, &heir->Registers );
48790: 486b 00cc pea %a3@(204)
48794: 486a 00cc pea %a2@(204)
48798: 4e94 jsr %a4@
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
#if ( CPU_USE_DEFERRED_FP_SWITCH == TRUE )
if ( (executing->fp_context != NULL) &&
4879a: 4fef 0010 lea %sp@(16),%sp
4879e: 4aaa 0100 tstl %a2@(256)
487a2: 672c beqs 487d0 <_Thread_Dispatch+0x10c>
#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 );
487a4: 2079 0005 e49e moveal 5e49e <_Thread_Allocated_fp>,%a0
487aa: b1ca cmpal %a2,%a0
487ac: 6722 beqs 487d0 <_Thread_Dispatch+0x10c>
!_Thread_Is_allocated_fp( executing ) ) {
if ( _Thread_Allocated_fp != NULL )
487ae: 4a88 tstl %a0
487b0: 670c beqs 487be <_Thread_Dispatch+0xfa>
_Context_Save_fp( &_Thread_Allocated_fp->fp_context );
487b2: 4868 0100 pea %a0@(256)
487b6: 4eb9 0004 9dd2 jsr 49dd2 <_CPU_Context_save_fp>
487bc: 588f addql #4,%sp
_Context_Restore_fp( &executing->fp_context );
487be: 486a 0100 pea %a2@(256)
487c2: 4eb9 0004 9e0a jsr 49e0a <_CPU_Context_restore_fp>
_Thread_Allocated_fp = executing;
487c8: 588f addql #4,%sp
487ca: 23ca 0005 e49e movel %a2,5e49e <_Thread_Allocated_fp>
if ( executing->fp_context != NULL )
_Context_Restore_fp( &executing->fp_context );
#endif
#endif
executing = _Thread_Executing;
487d0: 2479 0005 e5e0 moveal 5e5e0 <_Per_CPU_Information+0xc>,%a2
_ISR_Disable( level );
487d6: 2004 movel %d4,%d0
487d8: 40c1 movew %sr,%d1
487da: 8081 orl %d1,%d0
487dc: 46c0 movew %d0,%sr
Thread_Control *heir;
ISR_Level level;
executing = _Thread_Executing;
_ISR_Disable( level );
while ( _Context_Switch_necessary == true ) {
487de: 1039 0005 e5ec moveb 5e5ec <_Per_CPU_Information+0x18>,%d0
487e4: 6722 beqs 48808 <_Thread_Dispatch+0x144>
heir = _Thread_Heir;
_Thread_Dispatch_disable_level = 1;
487e6: 7001 moveq #1,%d0
487e8: 23c0 0005 e41c movel %d0,5e41c <_Thread_Dispatch_disable_level>
ISR_Level level;
executing = _Thread_Executing;
_ISR_Disable( level );
while ( _Context_Switch_necessary == true ) {
heir = _Thread_Heir;
487ee: 2679 0005 e5e4 moveal 5e5e4 <_Per_CPU_Information+0x10>,%a3
_Thread_Dispatch_disable_level = 1;
_Context_Switch_necessary = false;
487f4: 4200 clrb %d0
_Thread_Executing = heir;
487f6: 23cb 0005 e5e0 movel %a3,5e5e0 <_Per_CPU_Information+0xc>
executing = _Thread_Executing;
_ISR_Disable( level );
while ( _Context_Switch_necessary == true ) {
heir = _Thread_Heir;
_Thread_Dispatch_disable_level = 1;
_Context_Switch_necessary = false;
487fc: 13c0 0005 e5ec moveb %d0,5e5ec <_Per_CPU_Information+0x18>
/*
* 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 )
48802: b5cb cmpal %a3,%a2
48804: 6600 ff30 bnew 48736 <_Thread_Dispatch+0x72>
_ISR_Disable( level );
}
post_switch:
_Thread_Dispatch_disable_level = 0;
48808: 42b9 0005 e41c clrl 5e41c <_Thread_Dispatch_disable_level>
_ISR_Enable( level );
4880e: 46c1 movew %d1,%sr
_API_extensions_Run_postswitch();
48810: 4eb9 0004 6f0e jsr 46f0e <_API_extensions_Run_postswitch>
}
48816: 4cee 3cfc ffc8 moveml %fp@(-56),%d2-%d7/%a2-%a5
4881c: 4e5e unlk %fp
4881e: 4e75 rts
#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 )
heir->cpu_time_budget = _Thread_Ticks_per_timeslice;
48820: 41f9 0005 e3d4 lea 5e3d4 <_Thread_Ticks_per_timeslice>,%a0
48826: 2750 0076 movel %a0@,%a3@(118)
4882a: 6000 ff14 braw 48740 <_Thread_Dispatch+0x7c>
00048854 <_Thread_Get>:
Thread_Control *_Thread_Get (
Objects_Id id,
Objects_Locations *location
)
{
48854: 4e56 0000 linkw %fp,#0
48858: 202e 0008 movel %fp@(8),%d0
4885c: 2f03 movel %d3,%sp@-
4885e: 206e 000c moveal %fp@(12),%a0
48862: 2f02 movel %d2,%sp@-
uint32_t the_class;
Objects_Information **api_information;
Objects_Information *information;
Thread_Control *tp = (Thread_Control *) 0;
if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) {
48864: 4a80 tstl %d0
48866: 6766 beqs 488ce <_Thread_Get+0x7a>
*/
RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API(
Objects_Id id
)
{
return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS);
48868: 7418 moveq #24,%d2
4886a: 2200 movel %d0,%d1
4886c: e4a9 lsrl %d2,%d1
4886e: 7607 moveq #7,%d3
*/
RTEMS_INLINE_ROUTINE bool _Objects_Is_api_valid(
uint32_t the_api
)
{
if ( !the_api || the_api > OBJECTS_APIS_LAST )
48870: 143c 0002 moveb #2,%d2
*/
RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API(
Objects_Id id
)
{
return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS);
48874: c283 andl %d3,%d1
*/
RTEMS_INLINE_ROUTINE bool _Objects_Is_api_valid(
uint32_t the_api
)
{
if ( !the_api || the_api > OBJECTS_APIS_LAST )
48876: 2241 moveal %d1,%a1
48878: 5389 subql #1,%a1
4887a: b489 cmpl %a1,%d2
4887c: 653e bcss 488bc <_Thread_Get+0x68>
*/
RTEMS_INLINE_ROUTINE uint32_t _Objects_Get_class(
Objects_Id id
)
{
return (uint32_t)
4887e: 761b moveq #27,%d3
48880: 2400 movel %d0,%d2
48882: e6aa lsrl %d3,%d2
*location = OBJECTS_ERROR;
goto done;
}
the_class = _Objects_Get_class( id );
if ( the_class != 1 ) { /* threads are always first class :) */
48884: 163c 0001 moveb #1,%d3
48888: b682 cmpl %d2,%d3
4888a: 6630 bnes 488bc <_Thread_Get+0x68>
*location = OBJECTS_ERROR;
goto done;
}
api_information = _Objects_Information_table[ the_api ];
4888c: 43f9 0005 e3d8 lea 5e3d8 <_Objects_Information_table>,%a1
48892: 2271 1c00 moveal %a1@(00000000,%d1:l:4),%a1
if ( !api_information ) {
48896: 4a89 tstl %a1
48898: 6722 beqs 488bc <_Thread_Get+0x68> <== NEVER TAKEN
*location = OBJECTS_ERROR;
goto done;
}
information = api_information[ the_class ];
4889a: 2229 0004 movel %a1@(4),%d1
if ( !information ) {
4889e: 671c beqs 488bc <_Thread_Get+0x68>
*location = OBJECTS_ERROR;
goto done;
}
tp = (Thread_Control *) _Objects_Get( information, id, location );
488a0: 2f08 movel %a0,%sp@-
488a2: 2f00 movel %d0,%sp@-
488a4: 2f01 movel %d1,%sp@-
488a6: 4eb9 0004 7f48 jsr 47f48 <_Objects_Get>
done:
return tp;
}
488ac: 242e fff8 movel %fp@(-8),%d2
if ( !information ) {
*location = OBJECTS_ERROR;
goto done;
}
tp = (Thread_Control *) _Objects_Get( information, id, location );
488b0: 4fef 000c lea %sp@(12),%sp
done:
return tp;
}
488b4: 262e fffc movel %fp@(-4),%d3
488b8: 4e5e unlk %fp
488ba: 4e75 rts
goto done;
}
information = api_information[ the_class ];
if ( !information ) {
*location = OBJECTS_ERROR;
488bc: 7001 moveq #1,%d0
tp = (Thread_Control *) _Objects_Get( information, id, location );
done:
return tp;
}
488be: 242e fff8 movel %fp@(-8),%d2
488c2: 262e fffc movel %fp@(-4),%d3
488c6: 4e5e unlk %fp
goto done;
}
information = api_information[ the_class ];
if ( !information ) {
*location = OBJECTS_ERROR;
488c8: 2080 movel %d0,%a0@
{
uint32_t the_api;
uint32_t the_class;
Objects_Information **api_information;
Objects_Information *information;
Thread_Control *tp = (Thread_Control *) 0;
488ca: 4280 clrl %d0
tp = (Thread_Control *) _Objects_Get( information, id, location );
done:
return tp;
}
488cc: 4e75 rts
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
488ce: 2039 0005 e41c movel 5e41c <_Thread_Dispatch_disable_level>,%d0
488d4: 5280 addql #1,%d0
488d6: 23c0 0005 e41c movel %d0,5e41c <_Thread_Dispatch_disable_level>
488dc: 242e fff8 movel %fp@(-8),%d2
488e0: 262e fffc movel %fp@(-4),%d3
488e4: 4e5e unlk %fp
Thread_Control *tp = (Thread_Control *) 0;
if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) {
_Thread_Disable_dispatch();
*location = OBJECTS_LOCAL;
tp = _Thread_Executing;
488e6: 2039 0005 e5e0 movel 5e5e0 <_Per_CPU_Information+0xc>,%d0
Objects_Information *information;
Thread_Control *tp = (Thread_Control *) 0;
if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) {
_Thread_Disable_dispatch();
*location = OBJECTS_LOCAL;
488ec: 4290 clrl %a0@ <== NOT EXECUTED
tp = (Thread_Control *) _Objects_Get( information, id, location );
done:
return tp;
}
0004d8a4 <_Thread_Handler>:
*
* Output parameters: NONE
*/
void _Thread_Handler( void )
{
4d8a4: 4e56 0000 linkw %fp,#0
4d8a8: 2f0a movel %a2,%sp@-
#if defined(EXECUTE_GLOBAL_CONSTRUCTORS)
static char doneConstructors;
char doneCons;
#endif
executing = _Thread_Executing;
4d8aa: 2479 0005 e5e0 moveal 5e5e0 <_Per_CPU_Information+0xc>,%a2
*
* Output parameters: NONE
*/
void _Thread_Handler( void )
{
4d8b0: 2f02 movel %d2,%sp@-
/*
* have to put level into a register for those cpu's that use
* inline asm here
*/
level = executing->Start.isr_level;
4d8b2: 222a 00b4 movel %a2@(180),%d1
_ISR_Set_level(level);
4d8b6: 40c0 movew %sr,%d0
4d8b8: e189 lsll #8,%d1
4d8ba: 0280 0000 f8ff andil #63743,%d0
4d8c0: 8081 orl %d1,%d0
4d8c2: 46c0 movew %d0,%sr
#if defined(EXECUTE_GLOBAL_CONSTRUCTORS)
doneCons = doneConstructors;
doneConstructors = 1;
4d8c4: 7001 moveq #1,%d0
level = executing->Start.isr_level;
_ISR_Set_level(level);
#if defined(EXECUTE_GLOBAL_CONSTRUCTORS)
doneCons = doneConstructors;
4d8c6: 1439 0005 dbdc moveb 5dbdc <doneConstructors.3245>,%d2
doneConstructors = 1;
4d8cc: 13c0 0005 dbdc moveb %d0,5dbdc <doneConstructors.3245>
#endif
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
#if ( CPU_USE_DEFERRED_FP_SWITCH == TRUE )
if ( (executing->fp_context != NULL) &&
4d8d2: 4aaa 0100 tstl %a2@(256)
4d8d6: 6720 beqs 4d8f8 <_Thread_Handler+0x54>
#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 );
4d8d8: 2079 0005 e49e moveal 5e49e <_Thread_Allocated_fp>,%a0
4d8de: b1ca cmpal %a2,%a0
4d8e0: 6716 beqs 4d8f8 <_Thread_Handler+0x54>
!_Thread_Is_allocated_fp( executing ) ) {
if ( _Thread_Allocated_fp != NULL )
4d8e2: 4a88 tstl %a0
4d8e4: 670c beqs 4d8f2 <_Thread_Handler+0x4e>
_Context_Save_fp( &_Thread_Allocated_fp->fp_context );
4d8e6: 4868 0100 pea %a0@(256)
4d8ea: 4eb9 0004 9dd2 jsr 49dd2 <_CPU_Context_save_fp>
4d8f0: 588f addql #4,%sp
_Thread_Allocated_fp = executing;
4d8f2: 23ca 0005 e49e movel %a2,5e49e <_Thread_Allocated_fp>
/*
* 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 );
4d8f8: 2f0a movel %a2,%sp@-
4d8fa: 4eb9 0004 9784 jsr 49784 <_User_extensions_Thread_begin>
/*
* At this point, the dispatch disable level BETTER be 1.
*/
_Thread_Enable_dispatch();
4d900: 4eb9 0004 882e jsr 4882e <_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 (!doneCons) /* && (volatile void *)_init) */ {
4d906: 588f addql #4,%sp
4d908: 4a02 tstb %d2
4d90a: 6746 beqs 4d952 <_Thread_Handler+0xae>
INIT_NAME ();
}
#endif
if ( executing->Start.prototype == THREAD_START_NUMERIC ) {
4d90c: 4aaa 009e tstl %a2@(158)
4d910: 6718 beqs 4d92a <_Thread_Handler+0x86> <== ALWAYS TAKEN
* 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 );
4d912: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4d914: 4eb9 0004 97c2 jsr 497c2 <_User_extensions_Thread_exitted> <== NOT EXECUTED
_Internal_error_Occurred(
4d91a: 4878 0005 pea 5 <COMPARE> <== NOT EXECUTED
4d91e: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
4d922: 42a7 clrl %sp@- <== NOT EXECUTED
4d924: 4eb9 0004 79c8 jsr 479c8 <_Internal_error_Occurred> <== NOT EXECUTED
}
#endif
if ( executing->Start.prototype == THREAD_START_NUMERIC ) {
executing->Wait.return_argument =
(*(Thread_Entry_numeric) executing->Start.entry_point)(
4d92a: 2f2a 00a6 movel %a2@(166),%sp@-
4d92e: 206a 009a moveal %a2@(154),%a0
4d932: 4e90 jsr %a0@
INIT_NAME ();
}
#endif
if ( executing->Start.prototype == THREAD_START_NUMERIC ) {
executing->Wait.return_argument =
4d934: 588f addql #4,%sp
4d936: 2540 0028 movel %d0,%a2@(40)
* 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 );
4d93a: 2f0a movel %a2,%sp@-
4d93c: 4eb9 0004 97c2 jsr 497c2 <_User_extensions_Thread_exitted>
_Internal_error_Occurred(
4d942: 4878 0005 pea 5 <COMPARE>
4d946: 4878 0001 pea 1 <ADD>
4d94a: 42a7 clrl %sp@-
4d94c: 4eb9 0004 79c8 jsr 479c8 <_Internal_error_Occurred>
* _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 (!doneCons) /* && (volatile void *)_init) */ {
INIT_NAME ();
4d952: 4eb9 0005 b3d8 jsr 5b3d8 <_init>
}
#endif
if ( executing->Start.prototype == THREAD_START_NUMERIC ) {
4d958: 4aaa 009e tstl %a2@(158)
4d95c: 66b4 bnes 4d912 <_Thread_Handler+0x6e> <== NEVER TAKEN
4d95e: 60ca bras 4d92a <_Thread_Handler+0x86>
000488f0 <_Thread_Initialize>:
Thread_CPU_budget_algorithms budget_algorithm,
Thread_CPU_budget_algorithm_callout budget_callout,
uint32_t isr_level,
Objects_Name name
)
{
488f0: 4e56 ffec linkw %fp,#-20
488f4: 48d7 0c1c moveml %d2-%d4/%a2-%a3,%sp@
488f8: 266e 0014 moveal %fp@(20),%a3
488fc: 246e 000c moveal %fp@(12),%a2
/*
* Allocate and Initialize the stack for this thread.
*/
#if !defined(RTEMS_SCORE_THREAD_ENABLE_USER_PROVIDED_STACK_VIA_API)
actual_stack_size = _Thread_Stack_Allocate( the_thread, stack_size );
48900: 2f0b movel %a3,%sp@-
Thread_CPU_budget_algorithms budget_algorithm,
Thread_CPU_budget_algorithm_callout budget_callout,
uint32_t isr_level,
Objects_Name name
)
{
48902: 242e 001c movel %fp@(28),%d2
/*
* Zero out all the allocated memory fields
*/
for ( i=0 ; i <= THREAD_API_LAST ; i++ )
the_thread->API_Extensions[i] = NULL;
48906: 42aa 0108 clrl %a2@(264)
Thread_CPU_budget_algorithms budget_algorithm,
Thread_CPU_budget_algorithm_callout budget_callout,
uint32_t isr_level,
Objects_Name name
)
{
4890a: 162e 001b moveb %fp@(27),%d3
/*
* Zero out all the allocated memory fields
*/
for ( i=0 ; i <= THREAD_API_LAST ; i++ )
the_thread->API_Extensions[i] = NULL;
4890e: 42aa 010c clrl %a2@(268)
Thread_CPU_budget_algorithms budget_algorithm,
Thread_CPU_budget_algorithm_callout budget_callout,
uint32_t isr_level,
Objects_Name name
)
{
48912: 182e 0023 moveb %fp@(35),%d4
*/
for ( i=0 ; i <= THREAD_API_LAST ; i++ )
the_thread->API_Extensions[i] = NULL;
extensions_area = NULL;
the_thread->libc_reent = NULL;
48916: 42aa 0104 clrl %a2@(260)
/*
* Allocate and Initialize the stack for this thread.
*/
#if !defined(RTEMS_SCORE_THREAD_ENABLE_USER_PROVIDED_STACK_VIA_API)
actual_stack_size = _Thread_Stack_Allocate( the_thread, stack_size );
4891a: 2f0a movel %a2,%sp@-
4891c: 4eb9 0004 9304 jsr 49304 <_Thread_Stack_Allocate>
if ( !actual_stack_size || actual_stack_size < stack_size )
48922: 508f addql #8,%sp
48924: 4a80 tstl %d0
48926: 6700 010e beqw 48a36 <_Thread_Initialize+0x146>
4892a: b08b cmpl %a3,%d0
4892c: 6500 0108 bcsw 48a36 <_Thread_Initialize+0x146>
void *starting_address,
size_t size
)
{
the_stack->area = starting_address;
the_stack->size = size;
48930: 2540 00bc movel %d0,%a2@(188)
Stack_Control *the_stack,
void *starting_address,
size_t size
)
{
the_stack->area = starting_address;
48934: 256a 00c8 00c0 movel %a2@(200),%a2@(192)
/*
* Allocate the floating point area for this thread
*/
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
if ( is_fp ) {
4893a: 4a03 tstb %d3
4893c: 6600 0110 bnew 48a4e <_Thread_Initialize+0x15e>
48940: 4280 clrl %d0
extensions_area = NULL;
the_thread->libc_reent = NULL;
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
fp_area = NULL;
48942: 4283 clrl %d3
#endif
/*
* Allocate the extensions area for this thread
*/
if ( _Thread_Maximum_extensions ) {
48944: 2239 0005 e4ae movel 5e4ae <_Thread_Maximum_extensions>,%d1
fp_area = _Workspace_Allocate( CONTEXT_FP_SIZE );
if ( !fp_area )
goto failed;
fp_area = _Context_Fp_start( fp_area, 0 );
}
the_thread->fp_context = fp_area;
4894a: 2540 0100 movel %d0,%a2@(256)
the_thread->Start.fp_context = fp_area;
4894e: 2540 00c4 movel %d0,%a2@(196)
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
48952: 42aa 0050 clrl %a2@(80)
the_watchdog->routine = routine;
48956: 42aa 0064 clrl %a2@(100)
the_watchdog->id = id;
4895a: 42aa 0068 clrl %a2@(104)
the_watchdog->user_data = user_data;
4895e: 42aa 006c clrl %a2@(108)
#endif
/*
* Allocate the extensions area for this thread
*/
if ( _Thread_Maximum_extensions ) {
48962: 4a81 tstl %d1
48964: 6600 0108 bnew 48a6e <_Thread_Initialize+0x17e>
(_Thread_Maximum_extensions + 1) * sizeof( void * )
);
if ( !extensions_area )
goto failed;
}
the_thread->extensions = (void **) extensions_area;
48968: 42aa 0110 clrl %a2@(272)
* Zero out all the allocated memory fields
*/
for ( i=0 ; i <= THREAD_API_LAST ; i++ )
the_thread->API_Extensions[i] = NULL;
extensions_area = NULL;
4896c: 97cb subal %a3,%a3
the_thread->current_state = STATES_DORMANT;
the_thread->Wait.queue = NULL;
the_thread->resource_count = 0;
the_thread->real_priority = priority;
the_thread->Start.initial_priority = priority;
_Thread_Set_priority( the_thread, priority );
4896e: 2f02 movel %d2,%sp@-
#endif
}
the_thread->Start.isr_level = isr_level;
the_thread->current_state = STATES_DORMANT;
48970: 7001 moveq #1,%d0
/*
* General initialization
*/
the_thread->Start.is_preemptible = is_preemptible;
48972: 1544 00aa moveb %d4,%a2@(170)
the_thread->current_state = STATES_DORMANT;
the_thread->Wait.queue = NULL;
the_thread->resource_count = 0;
the_thread->real_priority = priority;
the_thread->Start.initial_priority = priority;
_Thread_Set_priority( the_thread, priority );
48976: 2f0a movel %a2,%sp@-
/*
* General initialization
*/
the_thread->Start.is_preemptible = is_preemptible;
the_thread->Start.budget_algorithm = budget_algorithm;
48978: 256e 0024 00ac movel %fp@(36),%a2@(172)
the_thread->Start.budget_callout = budget_callout;
4897e: 256e 0028 00b0 movel %fp@(40),%a2@(176)
case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT:
break;
#endif
}
the_thread->Start.isr_level = isr_level;
48984: 256e 002c 00b4 movel %fp@(44),%a2@(180)
the_thread->current_state = STATES_DORMANT;
4898a: 2540 0010 movel %d0,%a2@(16)
the_thread->Wait.queue = NULL;
4898e: 42aa 0044 clrl %a2@(68)
the_thread->resource_count = 0;
48992: 42aa 001c clrl %a2@(28)
the_thread->real_priority = priority;
48996: 2542 0018 movel %d2,%a2@(24)
the_thread->Start.initial_priority = priority;
4899a: 2542 00b8 movel %d2,%a2@(184)
_Thread_Set_priority( the_thread, priority );
4899e: 4eb9 0004 90fc jsr 490fc <_Thread_Set_priority>
_Thread_Stack_Free( the_thread );
return false;
}
489a4: 206e 0008 moveal %fp@(8),%a0
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
489a8: 4280 clrl %d0
489aa: 2068 0018 moveal %a0@(24),%a0
489ae: 302a 000a movew %a2@(10),%d0
/*
* Initialize the CPU usage statistics
*/
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
_Timestamp_Set_to_zero( &the_thread->cpu_time_used );
489b2: 42aa 0082 clrl %a2@(130)
489b6: 42aa 0086 clrl %a2@(134)
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
489ba: 218a 0c00 movel %a2,%a0@(00000000,%d0:l:4)
information,
_Objects_Get_index( the_object->id ),
the_object
);
the_object->name = name;
489be: 256e 0030 000c movel %fp@(48),%a2@(12)
* 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 );
489c4: 2f0a movel %a2,%sp@-
489c6: 4eb9 0004 9854 jsr 49854 <_User_extensions_Thread_create>
if ( extension_status )
489cc: 4fef 000c lea %sp@(12),%sp
489d0: 4a00 tstb %d0
489d2: 666e bnes 48a42 <_Thread_Initialize+0x152>
return true;
failed:
if ( the_thread->libc_reent )
489d4: 202a 0104 movel %a2@(260),%d0
489d8: 670a beqs 489e4 <_Thread_Initialize+0xf4>
_Workspace_Free( the_thread->libc_reent );
489da: 2f00 movel %d0,%sp@-
489dc: 4eb9 0004 9c5e jsr 49c5e <_Workspace_Free>
489e2: 588f addql #4,%sp
for ( i=0 ; i <= THREAD_API_LAST ; i++ )
if ( the_thread->API_Extensions[i] )
489e4: 202a 0108 movel %a2@(264),%d0
489e8: 670a beqs 489f4 <_Thread_Initialize+0x104>
_Workspace_Free( the_thread->API_Extensions[i] );
489ea: 2f00 movel %d0,%sp@-
489ec: 4eb9 0004 9c5e jsr 49c5e <_Workspace_Free>
489f2: 588f addql #4,%sp
failed:
if ( the_thread->libc_reent )
_Workspace_Free( the_thread->libc_reent );
for ( i=0 ; i <= THREAD_API_LAST ; i++ )
if ( the_thread->API_Extensions[i] )
489f4: 202a 010c movel %a2@(268),%d0
489f8: 670a beqs 48a04 <_Thread_Initialize+0x114> <== ALWAYS TAKEN
_Workspace_Free( the_thread->API_Extensions[i] );
489fa: 2f00 movel %d0,%sp@- <== NOT EXECUTED
489fc: 4eb9 0004 9c5e jsr 49c5e <_Workspace_Free> <== NOT EXECUTED
48a02: 588f addql #4,%sp <== NOT EXECUTED
if ( extensions_area )
48a04: 4a8b tstl %a3
48a06: 670a beqs 48a12 <_Thread_Initialize+0x122>
(void) _Workspace_Free( extensions_area );
48a08: 2f0b movel %a3,%sp@-
48a0a: 4eb9 0004 9c5e jsr 49c5e <_Workspace_Free>
48a10: 588f addql #4,%sp
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
if ( fp_area )
48a12: 4a83 tstl %d3
48a14: 670a beqs 48a20 <_Thread_Initialize+0x130>
(void) _Workspace_Free( fp_area );
48a16: 2f03 movel %d3,%sp@-
48a18: 4eb9 0004 9c5e jsr 49c5e <_Workspace_Free>
48a1e: 588f addql #4,%sp
#endif
_Thread_Stack_Free( the_thread );
48a20: 2f0a movel %a2,%sp@-
48a22: 4eb9 0004 9368 jsr 49368 <_Thread_Stack_Free>
return false;
48a28: 588f addql #4,%sp
}
48a2a: 4cee 0c1c ffec moveml %fp@(-20),%d2-%d4/%a2-%a3
if ( fp_area )
(void) _Workspace_Free( fp_area );
#endif
_Thread_Stack_Free( the_thread );
return false;
48a30: 4200 clrb %d0
}
48a32: 4e5e unlk %fp
48a34: 4e75 rts
48a36: 4cee 0c1c ffec moveml %fp@(-20),%d2-%d4/%a2-%a3
* Allocate and Initialize the stack for this thread.
*/
#if !defined(RTEMS_SCORE_THREAD_ENABLE_USER_PROVIDED_STACK_VIA_API)
actual_stack_size = _Thread_Stack_Allocate( the_thread, stack_size );
if ( !actual_stack_size || actual_stack_size < stack_size )
return false; /* stack allocation failed */
48a3c: 4200 clrb %d0
_Thread_Stack_Free( the_thread );
return false;
}
48a3e: 4e5e unlk %fp
48a40: 4e75 rts
48a42: 4cee 0c1c ffec moveml %fp@(-20),%d2-%d4/%a2-%a3
* Mutex provides sufficient protection to let the user extensions
* run safely.
*/
extension_status = _User_extensions_Thread_create( the_thread );
if ( extension_status )
return true;
48a48: 7001 moveq #1,%d0
_Thread_Stack_Free( the_thread );
return false;
}
48a4a: 4e5e unlk %fp
48a4c: 4e75 rts
/*
* Allocate the floating point area for this thread
*/
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
if ( is_fp ) {
fp_area = _Workspace_Allocate( CONTEXT_FP_SIZE );
48a4e: 4878 001c pea 1c <OPER2+0x8>
48a52: 4eb9 0004 9c42 jsr 49c42 <_Workspace_Allocate>
if ( !fp_area )
48a58: 588f addql #4,%sp
/*
* Allocate the floating point area for this thread
*/
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
if ( is_fp ) {
fp_area = _Workspace_Allocate( CONTEXT_FP_SIZE );
48a5a: 2600 movel %d0,%d3
if ( !fp_area )
48a5c: 6600 fee6 bnew 48944 <_Thread_Initialize+0x54>
extension_status = _User_extensions_Thread_create( the_thread );
if ( extension_status )
return true;
failed:
if ( the_thread->libc_reent )
48a60: 202a 0104 movel %a2@(260),%d0
* Zero out all the allocated memory fields
*/
for ( i=0 ; i <= THREAD_API_LAST ; i++ )
the_thread->API_Extensions[i] = NULL;
extensions_area = NULL;
48a64: 97cb subal %a3,%a3
extension_status = _User_extensions_Thread_create( the_thread );
if ( extension_status )
return true;
failed:
if ( the_thread->libc_reent )
48a66: 6600 ff72 bnew 489da <_Thread_Initialize+0xea>
48a6a: 6000 ff78 braw 489e4 <_Thread_Initialize+0xf4>
/*
* Allocate the extensions area for this thread
*/
if ( _Thread_Maximum_extensions ) {
extensions_area = _Workspace_Allocate(
48a6e: e589 lsll #2,%d1
48a70: 2041 moveal %d1,%a0
48a72: 4868 0004 pea %a0@(4)
48a76: 4eb9 0004 9c42 jsr 49c42 <_Workspace_Allocate>
(_Thread_Maximum_extensions + 1) * sizeof( void * )
);
if ( !extensions_area )
48a7c: 588f addql #4,%sp
/*
* Allocate the extensions area for this thread
*/
if ( _Thread_Maximum_extensions ) {
extensions_area = _Workspace_Allocate(
48a7e: 2640 moveal %d0,%a3
(_Thread_Maximum_extensions + 1) * sizeof( void * )
);
if ( !extensions_area )
48a80: 4a80 tstl %d0
48a82: 6700 ff50 beqw 489d4 <_Thread_Initialize+0xe4>
goto failed;
}
the_thread->extensions = (void **) extensions_area;
48a86: 2079 0005 e4ae moveal 5e4ae <_Thread_Maximum_extensions>,%a0
* 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++ )
48a8c: 4281 clrl %d1
(_Thread_Maximum_extensions + 1) * sizeof( void * )
);
if ( !extensions_area )
goto failed;
}
the_thread->extensions = (void **) extensions_area;
48a8e: 4280 clrl %d0
48a90: 254b 0110 movel %a3,%a2@(272)
* so they cannot rely on the thread create user extension
* call.
*/
if ( the_thread->extensions ) {
for ( i = 0; i <= _Thread_Maximum_extensions ; i++ )
the_thread->extensions[i] = NULL;
48a94: 42b3 1c00 clrl %a3@(00000000,%d1:l: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++ )
48a98: 5280 addql #1,%d0
48a9a: 2200 movel %d0,%d1
48a9c: b088 cmpl %a0,%d0
48a9e: 6200 fece bhiw 4896e <_Thread_Initialize+0x7e>
the_thread->extensions[i] = NULL;
48aa2: 42b3 1c00 clrl %a3@(00000000,%d1:l: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++ )
48aa6: 5280 addql #1,%d0
48aa8: 2200 movel %d0,%d1
48aaa: b088 cmpl %a0,%d0
48aac: 63e6 blss 48a94 <_Thread_Initialize+0x1a4>
48aae: 6000 febe braw 4896e <_Thread_Initialize+0x7e>
...
0004d054 <_Thread_Reset>:
void _Thread_Reset(
Thread_Control *the_thread,
void *pointer_argument,
Thread_Entry_numeric_type numeric_argument
)
{
4d054: 4e56 0000 linkw %fp,#0
4d058: 2f0a movel %a2,%sp@-
4d05a: 246e 0008 moveal %fp@(8),%a2
the_thread->resource_count = 0;
the_thread->is_preemptible = the_thread->Start.is_preemptible;
the_thread->budget_algorithm = the_thread->Start.budget_algorithm;
4d05e: 256a 00ac 007a movel %a2@(172),%a2@(122)
the_thread->budget_callout = the_thread->Start.budget_callout;
4d064: 256a 00b0 007e movel %a2@(176),%a2@(126)
the_thread->Start.pointer_argument = pointer_argument;
4d06a: 256e 000c 00a2 movel %fp@(12),%a2@(162)
the_thread->Start.numeric_argument = numeric_argument;
4d070: 256e 0010 00a6 movel %fp@(16),%a2@(166)
void *pointer_argument,
Thread_Entry_numeric_type numeric_argument
)
{
the_thread->resource_count = 0;
the_thread->is_preemptible = the_thread->Start.is_preemptible;
4d076: 156a 00aa 0074 moveb %a2@(170),%a2@(116)
Thread_Control *the_thread,
void *pointer_argument,
Thread_Entry_numeric_type numeric_argument
)
{
the_thread->resource_count = 0;
4d07c: 42aa 001c clrl %a2@(28)
the_thread->budget_callout = the_thread->Start.budget_callout;
the_thread->Start.pointer_argument = pointer_argument;
the_thread->Start.numeric_argument = numeric_argument;
if ( !_Thread_queue_Extract_with_proxy( the_thread ) ) {
4d080: 2f0a movel %a2,%sp@-
4d082: 4eb9 0004 9b60 jsr 49b60 <_Thread_queue_Extract_with_proxy>
4d088: 588f addql #4,%sp
4d08a: 4a00 tstb %d0
4d08c: 6608 bnes 4d096 <_Thread_Reset+0x42>
if ( _Watchdog_Is_active( &the_thread->Timer ) )
4d08e: 7002 moveq #2,%d0
4d090: b0aa 0050 cmpl %a2@(80),%d0
4d094: 672a beqs 4d0c0 <_Thread_Reset+0x6c>
(void) _Watchdog_Remove( &the_thread->Timer );
}
if ( the_thread->current_priority != the_thread->Start.initial_priority ) {
4d096: 202a 00b8 movel %a2@(184),%d0
4d09a: b0aa 0014 cmpl %a2@(20),%d0
4d09e: 6718 beqs 4d0b8 <_Thread_Reset+0x64>
the_thread->real_priority = the_thread->Start.initial_priority;
4d0a0: 2540 0018 movel %d0,%a2@(24)
_Thread_Set_priority( the_thread, the_thread->Start.initial_priority );
4d0a4: 2d4a 0008 movel %a2,%fp@(8)
}
}
4d0a8: 246e fffc moveal %fp@(-4),%a2
(void) _Watchdog_Remove( &the_thread->Timer );
}
if ( the_thread->current_priority != the_thread->Start.initial_priority ) {
the_thread->real_priority = the_thread->Start.initial_priority;
_Thread_Set_priority( the_thread, the_thread->Start.initial_priority );
4d0ac: 2d40 000c movel %d0,%fp@(12)
}
}
4d0b0: 4e5e unlk %fp
(void) _Watchdog_Remove( &the_thread->Timer );
}
if ( the_thread->current_priority != the_thread->Start.initial_priority ) {
the_thread->real_priority = the_thread->Start.initial_priority;
_Thread_Set_priority( the_thread, the_thread->Start.initial_priority );
4d0b2: 4ef9 0004 9da0 jmp 49da0 <_Thread_Set_priority>
}
}
4d0b8: 246e fffc moveal %fp@(-4),%a2
4d0bc: 4e5e unlk %fp
4d0be: 4e75 rts
the_thread->Start.numeric_argument = numeric_argument;
if ( !_Thread_queue_Extract_with_proxy( the_thread ) ) {
if ( _Watchdog_Is_active( &the_thread->Timer ) )
(void) _Watchdog_Remove( &the_thread->Timer );
4d0c0: 486a 0048 pea %a2@(72)
4d0c4: 4eb9 0004 a7a8 jsr 4a7a8 <_Watchdog_Remove>
4d0ca: 588f addql #4,%sp
4d0cc: 60c8 bras 4d096 <_Thread_Reset+0x42>
...
00049d10 <_Thread_Restart>:
*/
RTEMS_INLINE_ROUTINE bool _States_Is_dormant (
States_Control the_states
)
{
return (the_states & STATES_DORMANT);
49d10: 7001 moveq #1,%d0
bool _Thread_Restart(
Thread_Control *the_thread,
void *pointer_argument,
Thread_Entry_numeric_type numeric_argument
)
{
49d12: 4e56 0000 linkw %fp,#0
49d16: 2f0a movel %a2,%sp@-
49d18: 246e 0008 moveal %fp@(8),%a2
49d1c: c0aa 0010 andl %a2@(16),%d0
if ( !_States_Is_dormant( the_thread->current_state ) ) {
49d20: 670a beqs 49d2c <_Thread_Restart+0x1c>
return true;
}
return false;
}
49d22: 246e fffc moveal %fp@(-4),%a2
49d26: 4e5e unlk %fp
_Thread_Restart_self();
return true;
}
return false;
49d28: 4200 clrb %d0
}
49d2a: 4e75 rts
Thread_Entry_numeric_type numeric_argument
)
{
if ( !_States_Is_dormant( the_thread->current_state ) ) {
_Thread_Set_transient( the_thread );
49d2c: 2f0a movel %a2,%sp@-
49d2e: 4eb9 0004 9f24 jsr 49f24 <_Thread_Set_transient>
_Thread_Reset( the_thread, pointer_argument, numeric_argument );
49d34: 2f2e 0010 movel %fp@(16),%sp@-
49d38: 2f2e 000c movel %fp@(12),%sp@-
49d3c: 2f0a movel %a2,%sp@-
49d3e: 4eb9 0004 d054 jsr 4d054 <_Thread_Reset>
_Thread_Load_environment( the_thread );
49d44: 2f0a movel %a2,%sp@-
49d46: 4eb9 0004 ccb8 jsr 4ccb8 <_Thread_Load_environment>
_Thread_Ready( the_thread );
49d4c: 2f0a movel %a2,%sp@-
49d4e: 4eb9 0004 cf94 jsr 4cf94 <_Thread_Ready>
_User_extensions_Thread_restart( the_thread );
49d54: 2f0a movel %a2,%sp@-
49d56: 4eb9 0004 a598 jsr 4a598 <_User_extensions_Thread_restart>
if ( _Thread_Is_executing ( the_thread ) )
49d5c: 4fef 001c lea %sp@(28),%sp
49d60: b5f9 0005 f578 cmpal 5f578 <_Per_CPU_Information+0xc>,%a2
49d66: 670a beqs 49d72 <_Thread_Restart+0x62>
return true;
}
return false;
}
49d68: 246e fffc moveal %fp@(-4),%a2
49d6c: 4e5e unlk %fp
_User_extensions_Thread_restart( the_thread );
if ( _Thread_Is_executing ( the_thread ) )
_Thread_Restart_self();
return true;
49d6e: 7001 moveq #1,%d0
}
return false;
}
49d70: 4e75 rts
*/
RTEMS_INLINE_ROUTINE void _Thread_Restart_self( void )
{
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
if ( _Thread_Executing->fp_context != NULL )
49d72: 4aaa 0100 tstl %a2@(256)
49d76: 6712 beqs 49d8a <_Thread_Restart+0x7a>
_Context_Restore_fp( &_Thread_Executing->fp_context );
49d78: 486a 0100 pea %a2@(256)
49d7c: 4eb9 0004 aaf2 jsr 4aaf2 <_CPU_Context_restore_fp>
49d82: 2479 0005 f578 moveal 5f578 <_Per_CPU_Information+0xc>,%a2
49d88: 588f addql #4,%sp
#endif
_CPU_Context_Restart_self( &_Thread_Executing->Registers );
49d8a: 486a 00cc pea %a2@(204)
49d8e: 4eb9 0004 a9aa jsr 4a9aa <_CPU_Context_Restart_self>
49d94: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
49d98: 588f addql #4,%sp <== NOT EXECUTED
49d9a: 4e5e unlk %fp <== NOT EXECUTED
_User_extensions_Thread_restart( the_thread );
if ( _Thread_Is_executing ( the_thread ) )
_Thread_Restart_self();
return true;
49d9c: 7001 moveq #1,%d0 <== NOT EXECUTED
}
return false;
}
0004c7c8 <_Thread_Resume>:
{
ISR_Level level;
States_Control current_state;
_ISR_Disable( level );
4c7c8: 327c 0700 moveaw #1792,%a1
4c7cc: 2009 movel %a1,%d0
void _Thread_Resume(
Thread_Control *the_thread,
bool force
)
{
4c7ce: 4e56 fff0 linkw %fp,#-16
4c7d2: 206e 0008 moveal %fp@(8),%a0
4c7d6: 48d7 1c04 moveml %d2/%a2-%a4,%sp@
ISR_Level level;
States_Control current_state;
_ISR_Disable( level );
4c7da: 40c1 movew %sr,%d1
4c7dc: 8081 orl %d1,%d0
4c7de: 46c0 movew %d0,%sr
current_state = the_thread->current_state;
4c7e0: 2028 0010 movel %a0@(16),%d0
if ( current_state & STATES_SUSPENDED ) {
4c7e4: 0800 0001 btst #1,%d0
4c7e8: 6774 beqs 4c85e <_Thread_Resume+0x96> <== NEVER TAKEN
RTEMS_INLINE_ROUTINE States_Control _States_Clear (
States_Control states_to_clear,
States_Control current_state
)
{
return (current_state & ~states_to_clear);
4c7ea: 74fd moveq #-3,%d2
4c7ec: c082 andl %d2,%d0
current_state =
the_thread->current_state = _States_Clear(STATES_SUSPENDED, current_state);
4c7ee: 2140 0010 movel %d0,%a0@(16)
if ( _States_Is_ready( current_state ) ) {
4c7f2: 666a bnes 4c85e <_Thread_Resume+0x96>
RTEMS_INLINE_ROUTINE void _Priority_Add_to_bit_map (
Priority_Information *the_priority_map
)
{
*the_priority_map->minor |= the_priority_map->ready_minor;
4c7f4: 2868 008e moveal %a0@(142),%a4
_Priority_Add_to_bit_map( &the_thread->Priority_map );
_Chain_Append_unprotected(the_thread->ready, &the_thread->Object.Node);
4c7f8: 2468 008a moveal %a0@(138),%a2
4c7fc: 3414 movew %a4@,%d2
4c7fe: 3028 0094 movew %a0@(148),%d0
)
{
Chain_Node *old_last_node;
the_node->next = _Chain_Tail(the_chain);
old_last_node = the_chain->last;
4c802: 266a 0008 moveal %a2@(8),%a3
4c806: 8082 orl %d2,%d0
4c808: 3880 movew %d0,%a4@
_Priority_Major_bit_map |= the_priority_map->ready_major;
4c80a: 3439 0006 2274 movew 62274 <_Priority_Major_bit_map>,%d2
4c810: 3028 0092 movew %a0@(146),%d0
4c814: 8082 orl %d2,%d0
4c816: 33c0 0006 2274 movew %d0,62274 <_Priority_Major_bit_map>
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
4c81c: 200a movel %a2,%d0
4c81e: 5880 addql #4,%d0
4c820: 2080 movel %d0,%a0@
{
Chain_Node *old_last_node;
the_node->next = _Chain_Tail(the_chain);
old_last_node = the_chain->last;
the_chain->last = the_node;
4c822: 2548 0008 movel %a0,%a2@(8)
old_last_node->next = the_node;
4c826: 2688 movel %a0,%a3@
the_node->previous = old_last_node;
4c828: 214b 0004 movel %a3,%a0@(4)
_ISR_Flash( level );
4c82c: 2009 movel %a1,%d0
4c82e: 46c1 movew %d1,%sr
4c830: 8081 orl %d1,%d0
4c832: 46c0 movew %d0,%sr
if ( the_thread->current_priority < _Thread_Heir->current_priority ) {
4c834: 2028 0014 movel %a0@(20),%d0
4c838: 2279 0006 239c moveal 6239c <_Per_CPU_Information+0x10>,%a1
4c83e: b0a9 0014 cmpl %a1@(20),%d0
4c842: 641a bccs 4c85e <_Thread_Resume+0x96>
_Thread_Heir = the_thread;
4c844: 23c8 0006 239c movel %a0,6239c <_Per_CPU_Information+0x10>
if ( _Thread_Executing->is_preemptible ||
4c84a: 2079 0006 2398 moveal 62398 <_Per_CPU_Information+0xc>,%a0
4c850: 4a28 0074 tstb %a0@(116)
4c854: 6712 beqs 4c868 <_Thread_Resume+0xa0>
the_thread->current_priority == 0 )
_Context_Switch_necessary = true;
4c856: 7401 moveq #1,%d2
4c858: 13c2 0006 23a4 moveb %d2,623a4 <_Per_CPU_Information+0x18>
}
}
}
_ISR_Enable( level );
4c85e: 46c1 movew %d1,%sr
}
4c860: 4cd7 1c04 moveml %sp@,%d2/%a2-%a4
4c864: 4e5e unlk %fp
4c866: 4e75 rts
_ISR_Flash( level );
if ( the_thread->current_priority < _Thread_Heir->current_priority ) {
_Thread_Heir = the_thread;
if ( _Thread_Executing->is_preemptible ||
4c868: 4a80 tstl %d0
4c86a: 66f2 bnes 4c85e <_Thread_Resume+0x96> <== ALWAYS TAKEN
the_thread->current_priority == 0 )
_Context_Switch_necessary = true;
4c86c: 7401 moveq #1,%d2 <== NOT EXECUTED
4c86e: 13c2 0006 23a4 moveb %d2,623a4 <_Per_CPU_Information+0x18> <== NOT EXECUTED
4c874: 60e8 bras 4c85e <_Thread_Resume+0x96> <== NOT EXECUTED
...
00049368 <_Thread_Stack_Free>:
*/
void _Thread_Stack_Free(
Thread_Control *the_thread
)
{
49368: 4e56 0000 linkw %fp,#0
4936c: 206e 0008 moveal %fp@(8),%a0
* 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.
*/
if ( Configuration.stack_free_hook )
49370: 2279 0005 cd18 moveal 5cd18 <Configuration+0x24>,%a1
49376: 4a89 tstl %a1
49378: 670a beqs 49384 <_Thread_Stack_Free+0x1c>
(*Configuration.stack_free_hook)( the_thread->Start.Initial_stack.area );
4937a: 2d68 00c0 0008 movel %a0@(192),%fp@(8)
else
_Workspace_Free( the_thread->Start.Initial_stack.area );
}
49380: 4e5e unlk %fp
* the RTEMS workspace free. This is so the free
* routine properly matches the allocation of the stack.
*/
if ( Configuration.stack_free_hook )
(*Configuration.stack_free_hook)( the_thread->Start.Initial_stack.area );
49382: 4ed1 jmp %a1@
else
_Workspace_Free( the_thread->Start.Initial_stack.area );
49384: 2d68 00c0 0008 movel %a0@(192),%fp@(8)
}
4938a: 4e5e unlk %fp
*/
if ( Configuration.stack_free_hook )
(*Configuration.stack_free_hook)( the_thread->Start.Initial_stack.area );
else
_Workspace_Free( the_thread->Start.Initial_stack.area );
4938c: 4ef9 0004 9c5e jmp 49c5e <_Workspace_Free>
...
00049440 <_Thread_Suspend>:
{
ISR_Level level;
Chain_Control *ready;
ready = the_thread->ready;
_ISR_Disable( level );
49440: 203c 0000 0700 movel #1792,%d0
*/
void _Thread_Suspend(
Thread_Control *the_thread
)
{
49446: 4e56 fff4 linkw %fp,#-12
4944a: 206e 0008 moveal %fp@(8),%a0
4944e: 48d7 040c moveml %d2-%d3/%a2,%sp@
ISR_Level level;
Chain_Control *ready;
ready = the_thread->ready;
49452: 2268 008a moveal %a0@(138),%a1
_ISR_Disable( level );
49456: 40c1 movew %sr,%d1
49458: 8081 orl %d1,%d0
4945a: 46c0 movew %d0,%sr
if ( !_States_Is_ready( the_thread->current_state ) ) {
4945c: 2028 0010 movel %a0@(16),%d0
49460: 6642 bnes 494a4 <_Thread_Suspend+0x64>
_States_Set( STATES_SUSPENDED, the_thread->current_state );
_ISR_Enable( level );
return;
}
the_thread->current_state = STATES_SUSPENDED;
49462: 7002 moveq #2,%d0
if ( _Chain_Has_only_one_node( ready ) ) {
49464: 2429 0008 movel %a1@(8),%d2
_States_Set( STATES_SUSPENDED, the_thread->current_state );
_ISR_Enable( level );
return;
}
the_thread->current_state = STATES_SUSPENDED;
49468: 2140 0010 movel %d0,%a0@(16)
if ( _Chain_Has_only_one_node( ready ) ) {
4946c: b491 cmpl %a1@,%d2
4946e: 6700 0098 beqw 49508 <_Thread_Suspend+0xc8>
)
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
49472: 2450 moveal %a0@,%a2
previous = the_node->previous;
49474: 2268 0004 moveal %a0@(4),%a1
next->previous = previous;
49478: 2549 0004 movel %a1,%a2@(4)
previous->next = next;
4947c: 228a movel %a2,%a1@
_Priority_Remove_from_bit_map( &the_thread->Priority_map );
} else
_Chain_Extract_unprotected( &the_thread->Object.Node );
_ISR_Flash( level );
4947e: 203c 0000 0700 movel #1792,%d0
49484: 46c1 movew %d1,%sr
49486: 8081 orl %d1,%d0
49488: 46c0 movew %d0,%sr
if ( _Thread_Is_heir( the_thread ) )
4948a: b1f9 0005 e5e4 cmpal 5e5e4 <_Per_CPU_Information+0x10>,%a0
49490: 6730 beqs 494c2 <_Thread_Suspend+0x82>
_Thread_Calculate_heir();
if ( _Thread_Is_executing( the_thread ) )
49492: b1f9 0005 e5e0 cmpal 5e5e0 <_Per_CPU_Information+0xc>,%a0
49498: 671c beqs 494b6 <_Thread_Suspend+0x76> <== NEVER TAKEN
_Context_Switch_necessary = true;
_ISR_Enable( level );
4949a: 46c1 movew %d1,%sr
}
4949c: 4cd7 040c moveml %sp@,%d2-%d3/%a2
494a0: 4e5e unlk %fp
494a2: 4e75 rts
RTEMS_INLINE_ROUTINE States_Control _States_Set (
States_Control states_to_set,
States_Control current_state
)
{
return (current_state | states_to_set);
494a4: 7402 moveq #2,%d2
494a6: 8480 orl %d0,%d2
494a8: 2142 0010 movel %d2,%a0@(16)
ready = the_thread->ready;
_ISR_Disable( level );
if ( !_States_Is_ready( the_thread->current_state ) ) {
the_thread->current_state =
_States_Set( STATES_SUSPENDED, the_thread->current_state );
_ISR_Enable( level );
494ac: 46c1 movew %d1,%sr
if ( _Thread_Is_executing( the_thread ) )
_Context_Switch_necessary = true;
_ISR_Enable( level );
}
494ae: 4cd7 040c moveml %sp@,%d2-%d3/%a2
494b2: 4e5e unlk %fp
494b4: 4e75 rts
if ( _Thread_Is_heir( the_thread ) )
_Thread_Calculate_heir();
if ( _Thread_Is_executing( the_thread ) )
_Context_Switch_necessary = true;
494b6: 7401 moveq #1,%d2
494b8: 13c2 0005 e5ec moveb %d2,5e5ec <_Per_CPU_Information+0x18>
_ISR_Enable( level );
494be: 46c1 movew %d1,%sr
494c0: 60da bras 4949c <_Thread_Suspend+0x5c>
RTEMS_INLINE_ROUTINE Priority_Control _Priority_Get_highest( void )
{
Priority_Bit_map_control minor;
Priority_Bit_map_control major;
_Bitfield_Find_first_bit( _Priority_Major_bit_map, major );
494c2: 3039 0005 e4bc movew 5e4bc <_Priority_Major_bit_map>,%d0
494c8: 4840 swap %d0
494ca: 04c0 ff1 %d0
_Bitfield_Find_first_bit( _Priority_Bit_map[major], minor );
494cc: 4282 clrl %d2
494ce: 43f9 0005 e524 lea 5e524 <_Priority_Bit_map>,%a1
494d4: 3400 movew %d0,%d2
494d6: 3031 2a00 movew %a1@(00000000,%d2:l:2),%d0
494da: 4840 swap %d0
494dc: 04c0 ff1 %d0
return (_Priority_Bits_index( major ) << 4) +
494de: 4283 clrl %d3
494e0: e98a lsll #4,%d2
494e2: 3600 movew %d0,%d3
_Thread_Ready_chain[ _Priority_Get_highest() ].first;
494e4: 2279 0005 e3d0 moveal 5e3d0 <_Thread_Ready_chain>,%a1
494ea: 2002 movel %d2,%d0
494ec: d083 addl %d3,%d0
494ee: 2400 movel %d0,%d2
494f0: e58a lsll #2,%d2
494f2: e988 lsll #4,%d0
494f4: 93c2 subal %d2,%a1
* ready thread.
*/
RTEMS_INLINE_ROUTINE void _Thread_Calculate_heir( void )
{
_Thread_Heir = (Thread_Control *)
494f6: d3c0 addal %d0,%a1
494f8: 23d1 0005 e5e4 movel %a1@,5e5e4 <_Per_CPU_Information+0x10>
_ISR_Flash( level );
if ( _Thread_Is_heir( the_thread ) )
_Thread_Calculate_heir();
if ( _Thread_Is_executing( the_thread ) )
494fe: b1f9 0005 e5e0 cmpal 5e5e0 <_Per_CPU_Information+0xc>,%a0
49504: 6694 bnes 4949a <_Thread_Suspend+0x5a> <== NEVER TAKEN
49506: 60ae bras 494b6 <_Thread_Suspend+0x76>
RTEMS_INLINE_ROUTINE void _Priority_Remove_from_bit_map (
Priority_Information *the_priority_map
)
{
*the_priority_map->minor &= the_priority_map->block_minor;
49508: 2468 008e moveal %a0@(142),%a2
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
4950c: 2009 movel %a1,%d0
4950e: 5880 addql #4,%d0
49510: 2280 movel %d0,%a1@
49512: 3412 movew %a2@,%d2
49514: 3028 0098 movew %a0@(152),%d0
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
49518: 42a9 0004 clrl %a1@(4)
4951c: c082 andl %d2,%d0
the_chain->last = _Chain_Head(the_chain);
4951e: 2349 0008 movel %a1,%a1@(8)
49522: 3480 movew %d0,%a2@
if ( *the_priority_map->minor == 0 )
49524: 6600 ff58 bnew 4947e <_Thread_Suspend+0x3e>
_Priority_Major_bit_map &= the_priority_map->block_major;
49528: 3439 0005 e4bc movew 5e4bc <_Priority_Major_bit_map>,%d2
4952e: 3028 0096 movew %a0@(150),%d0
49532: c082 andl %d2,%d0
49534: 33c0 0005 e4bc movew %d0,5e4bc <_Priority_Major_bit_map>
_Priority_Remove_from_bit_map( &the_thread->Priority_map );
} else
_Chain_Extract_unprotected( &the_thread->Object.Node );
_ISR_Flash( level );
4953a: 203c 0000 0700 movel #1792,%d0
49540: 46c1 movew %d1,%sr
49542: 8081 orl %d1,%d0
49544: 46c0 movew %d0,%sr
if ( _Thread_Is_heir( the_thread ) )
49546: b1f9 0005 e5e4 cmpal 5e5e4 <_Per_CPU_Information+0x10>,%a0
4954c: 6600 ff44 bnew 49492 <_Thread_Suspend+0x52>
49550: 6000 ff70 braw 494c2 <_Thread_Suspend+0x82>
000495a0 <_Thread_Yield_processor>:
* ready chain
* select heir
*/
void _Thread_Yield_processor( void )
{
495a0: 4e56 fff0 linkw %fp,#-16
ISR_Level level;
Thread_Control *executing;
Chain_Control *ready;
executing = _Thread_Executing;
495a4: 2079 0005 e5e0 moveal 5e5e0 <_Per_CPU_Information+0xc>,%a0
* ready chain
* select heir
*/
void _Thread_Yield_processor( void )
{
495aa: 48d7 1c04 moveml %d2/%a2-%a4,%sp@
Thread_Control *executing;
Chain_Control *ready;
executing = _Thread_Executing;
ready = executing->ready;
_ISR_Disable( level );
495ae: 243c 0000 0700 movel #1792,%d2
495b4: 2002 movel %d2,%d0
ISR_Level level;
Thread_Control *executing;
Chain_Control *ready;
executing = _Thread_Executing;
ready = executing->ready;
495b6: 2268 008a moveal %a0@(138),%a1
_ISR_Disable( level );
495ba: 40c1 movew %sr,%d1
495bc: 8081 orl %d1,%d0
495be: 46c0 movew %d0,%sr
}
else if ( !_Thread_Is_heir( executing ) )
_Context_Switch_necessary = true;
_ISR_Enable( level );
}
495c0: 2469 0008 moveal %a1@(8),%a2
Chain_Control *ready;
executing = _Thread_Executing;
ready = executing->ready;
_ISR_Disable( level );
if ( !_Chain_Has_only_one_node( ready ) ) {
495c4: b5d1 cmpal %a1@,%a2
495c6: 674c beqs 49614 <_Thread_Yield_processor+0x74>
)
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
495c8: 2650 moveal %a0@,%a3
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
495ca: 2009 movel %a1,%d0
495cc: 5880 addql #4,%d0
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
previous = the_node->previous;
495ce: 2868 0004 moveal %a0@(4),%a4
next->previous = previous;
previous->next = next;
495d2: 288b movel %a3,%a4@
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
previous = the_node->previous;
next->previous = previous;
495d4: 274c 0004 movel %a4,%a3@(4)
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
495d8: 2080 movel %d0,%a0@
{
Chain_Node *old_last_node;
the_node->next = _Chain_Tail(the_chain);
old_last_node = the_chain->last;
the_chain->last = the_node;
495da: 2348 0008 movel %a0,%a1@(8)
old_last_node->next = the_node;
495de: 2488 movel %a0,%a2@
the_node->previous = old_last_node;
495e0: 214a 0004 movel %a2,%a0@(4)
_Chain_Extract_unprotected( &executing->Object.Node );
_Chain_Append_unprotected( ready, &executing->Object.Node );
_ISR_Flash( level );
495e4: 46c1 movew %d1,%sr
495e6: 8481 orl %d1,%d2
495e8: 46c2 movew %d2,%sr
if ( _Thread_Is_heir( executing ) )
495ea: b1f9 0005 e5e4 cmpal 5e5e4 <_Per_CPU_Information+0x10>,%a0
495f0: 6712 beqs 49604 <_Thread_Yield_processor+0x64> <== ALWAYS TAKEN
_Thread_Heir = (Thread_Control *) ready->first;
_Context_Switch_necessary = true;
}
else if ( !_Thread_Is_heir( executing ) )
_Context_Switch_necessary = true;
495f2: 7001 moveq #1,%d0 <== NOT EXECUTED
495f4: 13c0 0005 e5ec moveb %d0,5e5ec <_Per_CPU_Information+0x18> <== NOT EXECUTED
_ISR_Enable( level );
495fa: 46c1 movew %d1,%sr
}
495fc: 4cd7 1c04 moveml %sp@,%d2/%a2-%a4
49600: 4e5e unlk %fp
49602: 4e75 rts
_Chain_Append_unprotected( ready, &executing->Object.Node );
_ISR_Flash( level );
if ( _Thread_Is_heir( executing ) )
_Thread_Heir = (Thread_Control *) ready->first;
49604: 23d1 0005 e5e4 movel %a1@,5e5e4 <_Per_CPU_Information+0x10>
_Context_Switch_necessary = true;
}
else if ( !_Thread_Is_heir( executing ) )
_Context_Switch_necessary = true;
4960a: 7001 moveq #1,%d0
4960c: 13c0 0005 e5ec moveb %d0,5e5ec <_Per_CPU_Information+0x18>
49612: 60e6 bras 495fa <_Thread_Yield_processor+0x5a>
if ( _Thread_Is_heir( executing ) )
_Thread_Heir = (Thread_Control *) ready->first;
_Context_Switch_necessary = true;
}
else if ( !_Thread_Is_heir( executing ) )
49614: b1f9 0005 e5e4 cmpal 5e5e4 <_Per_CPU_Information+0x10>,%a0
4961a: 67de beqs 495fa <_Thread_Yield_processor+0x5a> <== ALWAYS TAKEN
_Context_Switch_necessary = true;
4961c: 7001 moveq #1,%d0 <== NOT EXECUTED
4961e: 13c0 0005 e5ec moveb %d0,5e5ec <_Per_CPU_Information+0x18> <== NOT EXECUTED
49624: 60d4 bras 495fa <_Thread_Yield_processor+0x5a> <== NOT EXECUTED
...
00048294 <_Thread_blocking_operation_Cancel>:
/*
* If the sync state is timed out, this is very likely not needed.
* But better safe than sorry when it comes to critical sections.
*/
if ( _Watchdog_Is_active( &the_thread->Timer ) ) {
48294: 7202 moveq #2,%d1
Thread_blocking_operation_States sync_state __attribute__((unused)),
#endif
Thread_Control *the_thread,
ISR_Level level
)
{
48296: 4e56 0000 linkw %fp,#0
4829a: 202e 0010 movel %fp@(16),%d0
4829e: 2f0a movel %a2,%sp@-
482a0: 246e 000c moveal %fp@(12),%a2
#endif
/*
* The thread is not waiting on anything after this completes.
*/
the_thread->Wait.queue = NULL;
482a4: 42aa 0044 clrl %a2@(68)
/*
* If the sync state is timed out, this is very likely not needed.
* But better safe than sorry when it comes to critical sections.
*/
if ( _Watchdog_Is_active( &the_thread->Timer ) ) {
482a8: b2aa 0050 cmpl %a2@(80),%d1
482ac: 671c beqs 482ca <_Thread_blocking_operation_Cancel+0x36>
_Watchdog_Deactivate( &the_thread->Timer );
_ISR_Enable( level );
(void) _Watchdog_Remove( &the_thread->Timer );
} else
_ISR_Enable( level );
482ae: 46c0 movew %d0,%sr
RTEMS_INLINE_ROUTINE void _Thread_Unblock (
Thread_Control *the_thread
)
{
_Thread_Clear_state( the_thread, STATES_BLOCKED );
482b0: 2d4a 0008 movel %a2,%fp@(8)
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
_Thread_MP_Free_proxy( the_thread );
#endif
}
482b4: 246e fffc moveal %fp@(-4),%a2
482b8: 203c 1003 fff8 movel #268697592,%d0
482be: 2d40 000c movel %d0,%fp@(12)
482c2: 4e5e unlk %fp
482c4: 4ef9 0004 8448 jmp 48448 <_Thread_Clear_state>
RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate(
Watchdog_Control *the_watchdog
)
{
the_watchdog->state = WATCHDOG_REMOVE_IT;
482ca: 123c 0003 moveb #3,%d1
482ce: 2541 0050 movel %d1,%a2@(80)
* If the sync state is timed out, this is very likely not needed.
* But better safe than sorry when it comes to critical sections.
*/
if ( _Watchdog_Is_active( &the_thread->Timer ) ) {
_Watchdog_Deactivate( &the_thread->Timer );
_ISR_Enable( level );
482d2: 46c0 movew %d0,%sr
(void) _Watchdog_Remove( &the_thread->Timer );
482d4: 486a 0048 pea %a2@(72)
482d8: 4eb9 0004 9ac0 jsr 49ac0 <_Watchdog_Remove>
482de: 588f addql #4,%sp
482e0: 203c 1003 fff8 movel #268697592,%d0
482e6: 2d4a 0008 movel %a2,%fp@(8)
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
_Thread_MP_Free_proxy( the_thread );
#endif
}
482ea: 246e fffc moveal %fp@(-4),%a2
482ee: 2d40 000c movel %d0,%fp@(12)
482f2: 4e5e unlk %fp
482f4: 4ef9 0004 8448 jmp 48448 <_Thread_Clear_state>
...
00048da4 <_Thread_queue_Enqueue_priority>:
Thread_blocking_operation_States _Thread_queue_Enqueue_priority (
Thread_queue_Control *the_thread_queue,
Thread_Control *the_thread,
ISR_Level *level_p
)
{
48da4: 4e56 ffe0 linkw %fp,#-32
48da8: 48d7 1c7c moveml %d2-%d6/%a2-%a4,%sp@
48dac: 246e 000c moveal %fp@(12),%a2
48db0: 41ea 003c lea %a2@(60),%a0
48db4: 266e 0008 moveal %fp@(8),%a3
Priority_Control priority;
States_Control block_state;
_Chain_Initialize_empty( &the_thread->Wait.Block2n );
priority = the_thread->current_priority;
48db8: 222a 0014 movel %a2@(20),%d1
RTEMS_INLINE_ROUTINE uint32_t _Thread_queue_Header_number (
Priority_Control the_priority
)
{
return (the_priority / TASK_QUEUE_DATA_PRIORITIES_PER_HEADER);
48dbc: 2a01 movel %d1,%d5
48dbe: ec8d lsrl #6,%d5
48dc0: 2548 0038 movel %a0,%a2@(56)
header_index = _Thread_queue_Header_number( priority );
header = &the_thread_queue->Queues.Priority[ header_index ];
block_state = the_thread_queue->state;
48dc4: 242b 0038 movel %a3@(56),%d2
Chain_Node *previous_node;
Chain_Node *search_node;
Priority_Control priority;
States_Control block_state;
_Chain_Initialize_empty( &the_thread->Wait.Block2n );
48dc8: 41ea 0038 lea %a2@(56),%a0
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
48dcc: 42aa 003c clrl %a2@(60)
48dd0: 2548 0040 movel %a0,%a2@(64)
priority = the_thread->current_priority;
header_index = _Thread_queue_Header_number( priority );
header = &the_thread_queue->Queues.Priority[ header_index ];
block_state = the_thread_queue->state;
if ( _Thread_queue_Is_reverse_search( priority ) )
48dd4: 0801 0005 btst #5,%d1
48dd8: 665e bnes 48e38 <_Thread_queue_Enqueue_priority+0x94>
48dda: 700c moveq #12,%d0
48ddc: 4c00 5800 mulsl %d0,%d5
goto restart_reverse_search;
restart_forward_search:
search_priority = PRIORITY_MINIMUM - 1;
_ISR_Disable( level );
48de0: 2c3c 0000 0700 movel #1792,%d6
48de6: 2006 movel %d6,%d0
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
48de8: 49f3 5804 lea %a3@(00000004,%d5:l),%a4
48dec: 40c3 movew %sr,%d3
48dee: 8083 orl %d3,%d0
48df0: 46c0 movew %d0,%sr
48df2: 2803 movel %d3,%d4
search_thread = (Thread_Control *) header->first;
48df4: 2073 5800 moveal %a3@(00000000,%d5:l),%a0
while ( !_Chain_Is_tail( header, (Chain_Node *)search_thread ) ) {
48df8: b9c8 cmpal %a0,%a4
48dfa: 6700 013c beqw 48f38 <_Thread_queue_Enqueue_priority+0x194>
search_priority = search_thread->current_priority;
48dfe: 2268 0014 moveal %a0@(20),%a1
if ( priority <= search_priority )
48e02: b3c1 cmpal %d1,%a1
48e04: 6418 bccs 48e1e <_Thread_queue_Enqueue_priority+0x7a>
break;
search_priority = search_thread->current_priority;
if ( priority <= search_priority )
break;
#endif
_ISR_Flash( level );
48e06: 2006 movel %d6,%d0
48e08: 46c3 movew %d3,%sr
48e0a: 8083 orl %d3,%d0
48e0c: 46c0 movew %d0,%sr
RTEMS_INLINE_ROUTINE bool _States_Are_set (
States_Control the_states,
States_Control mask
)
{
return ( (the_states & mask) != STATES_READY);
48e0e: 2002 movel %d2,%d0
48e10: c0a8 0010 andl %a0@(16),%d0
if ( !_States_Are_set( search_thread->current_state, block_state) ) {
48e14: 6700 00c0 beqw 48ed6 <_Thread_queue_Enqueue_priority+0x132>
_ISR_Enable( level );
goto restart_forward_search;
}
search_thread =
(Thread_Control *)search_thread->Object.Node.next;
48e18: 2050 moveal %a0@,%a0
restart_forward_search:
search_priority = PRIORITY_MINIMUM - 1;
_ISR_Disable( level );
search_thread = (Thread_Control *) header->first;
while ( !_Chain_Is_tail( header, (Chain_Node *)search_thread ) ) {
48e1a: b9c8 cmpal %a0,%a4
48e1c: 66e0 bnes 48dfe <_Thread_queue_Enqueue_priority+0x5a>
}
search_thread =
(Thread_Control *)search_thread->Object.Node.next;
}
if ( the_thread_queue->sync_state !=
48e1e: 202b 0030 movel %a3@(48),%d0
48e22: 7401 moveq #1,%d2
48e24: b480 cmpl %d0,%d2
48e26: 6700 00c6 beqw 48eee <_Thread_queue_Enqueue_priority+0x14a>
* For example, the blocking thread could have been given
* the mutex by an ISR or timed out.
*
* WARNING! Returning with interrupts disabled!
*/
*level_p = level;
48e2a: 206e 0010 moveal %fp@(16),%a0
48e2e: 2084 movel %d4,%a0@
return the_thread_queue->sync_state;
}
48e30: 4cd7 1c7c moveml %sp@,%d2-%d6/%a2-%a4
48e34: 4e5e unlk %fp
48e36: 4e75 rts
_Chain_Initialize_empty( &the_thread->Wait.Block2n );
priority = the_thread->current_priority;
header_index = _Thread_queue_Header_number( priority );
header = &the_thread_queue->Queues.Priority[ header_index ];
48e38: 2005 movel %d5,%d0
the_thread->Wait.queue = the_thread_queue;
_ISR_Enable( level );
return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
restart_reverse_search:
search_priority = PRIORITY_MAXIMUM + 1;
48e3a: 4283 clrl %d3
48e3c: 1639 0005 ccf2 moveb 5ccf2 <rtems_maximum_priority>,%d3
_ISR_Disable( level );
48e42: 2c3c 0000 0700 movel #1792,%d6
the_thread->Wait.queue = the_thread_queue;
_ISR_Enable( level );
return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
restart_reverse_search:
search_priority = PRIORITY_MAXIMUM + 1;
48e48: 2243 moveal %d3,%a1
48e4a: 5289 addql #1,%a1
_Chain_Initialize_empty( &the_thread->Wait.Block2n );
priority = the_thread->current_priority;
header_index = _Thread_queue_Header_number( priority );
header = &the_thread_queue->Queues.Priority[ header_index ];
48e4c: e588 lsll #2,%d0
48e4e: e98d lsll #4,%d5
48e50: 9a80 subl %d0,%d5
48e52: da8b addl %a3,%d5
restart_reverse_search:
search_priority = PRIORITY_MAXIMUM + 1;
_ISR_Disable( level );
search_thread = (Thread_Control *) header->last;
48e54: 2845 moveal %d5,%a4
48e56: 508c addql #8,%a4
return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
restart_reverse_search:
search_priority = PRIORITY_MAXIMUM + 1;
_ISR_Disable( level );
48e58: 2006 movel %d6,%d0
48e5a: 40c3 movew %sr,%d3
48e5c: 8083 orl %d3,%d0
48e5e: 46c0 movew %d0,%sr
48e60: 2803 movel %d3,%d4
search_thread = (Thread_Control *) header->last;
48e62: 2054 moveal %a4@,%a0
while ( !_Chain_Is_head( header, (Chain_Node *)search_thread ) ) {
48e64: ba88 cmpl %a0,%d5
48e66: 6720 beqs 48e88 <_Thread_queue_Enqueue_priority+0xe4>
search_priority = search_thread->current_priority;
48e68: 2268 0014 moveal %a0@(20),%a1
if ( priority >= search_priority )
48e6c: b3c1 cmpal %d1,%a1
48e6e: 6318 blss 48e88 <_Thread_queue_Enqueue_priority+0xe4>
break;
search_priority = search_thread->current_priority;
if ( priority >= search_priority )
break;
#endif
_ISR_Flash( level );
48e70: 2006 movel %d6,%d0
48e72: 46c3 movew %d3,%sr
48e74: 8083 orl %d3,%d0
48e76: 46c0 movew %d0,%sr
48e78: 2002 movel %d2,%d0
48e7a: c0a8 0010 andl %a0@(16),%d0
if ( !_States_Are_set( search_thread->current_state, block_state) ) {
48e7e: 6736 beqs 48eb6 <_Thread_queue_Enqueue_priority+0x112>
_ISR_Enable( level );
goto restart_reverse_search;
}
search_thread = (Thread_Control *)
search_thread->Object.Node.previous;
48e80: 2068 0004 moveal %a0@(4),%a0
restart_reverse_search:
search_priority = PRIORITY_MAXIMUM + 1;
_ISR_Disable( level );
search_thread = (Thread_Control *) header->last;
while ( !_Chain_Is_head( header, (Chain_Node *)search_thread ) ) {
48e84: ba88 cmpl %a0,%d5
48e86: 66e0 bnes 48e68 <_Thread_queue_Enqueue_priority+0xc4>
}
search_thread = (Thread_Control *)
search_thread->Object.Node.previous;
}
if ( the_thread_queue->sync_state !=
48e88: 202b 0030 movel %a3@(48),%d0
48e8c: 7401 moveq #1,%d2
48e8e: b480 cmpl %d0,%d2
48e90: 6698 bnes 48e2a <_Thread_queue_Enqueue_priority+0x86>
THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )
goto synchronize;
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
48e92: 42ab 0030 clrl %a3@(48)
if ( priority == search_priority )
48e96: b3c1 cmpal %d1,%a1
48e98: 677a beqs 48f14 <_Thread_queue_Enqueue_priority+0x170>
goto equal_priority;
search_node = (Chain_Node *) search_thread;
next_node = search_node->next;
48e9a: 2250 moveal %a0@,%a1
the_node = (Chain_Node *) the_thread;
the_node->next = next_node;
the_node->previous = search_node;
48e9c: 2548 0004 movel %a0,%a2@(4)
search_node = (Chain_Node *) search_thread;
next_node = search_node->next;
the_node = (Chain_Node *) the_thread;
the_node->next = next_node;
48ea0: 2489 movel %a1,%a2@
the_node->previous = search_node;
search_node->next = the_node;
next_node->previous = the_node;
48ea2: 234a 0004 movel %a2,%a1@(4)
next_node = search_node->next;
the_node = (Chain_Node *) the_thread;
the_node->next = next_node;
the_node->previous = search_node;
search_node->next = the_node;
48ea6: 208a movel %a2,%a0@
next_node->previous = the_node;
the_thread->Wait.queue = the_thread_queue;
48ea8: 254b 0044 movel %a3,%a2@(68)
_ISR_Enable( level );
48eac: 46c3 movew %d3,%sr
*
* WARNING! Returning with interrupts disabled!
*/
*level_p = level;
return the_thread_queue->sync_state;
}
48eae: 4cd7 1c7c moveml %sp@,%d2-%d6/%a2-%a4
48eb2: 4e5e unlk %fp
48eb4: 4e75 rts
if ( priority >= search_priority )
break;
#endif
_ISR_Flash( level );
if ( !_States_Are_set( search_thread->current_state, block_state) ) {
_ISR_Enable( level );
48eb6: 46c3 movew %d3,%sr
the_thread->Wait.queue = the_thread_queue;
_ISR_Enable( level );
return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
restart_reverse_search:
search_priority = PRIORITY_MAXIMUM + 1;
48eb8: 4283 clrl %d3
48eba: 1639 0005 ccf2 moveb 5ccf2 <rtems_maximum_priority>,%d3
_ISR_Disable( level );
48ec0: 2006 movel %d6,%d0
the_thread->Wait.queue = the_thread_queue;
_ISR_Enable( level );
return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
restart_reverse_search:
search_priority = PRIORITY_MAXIMUM + 1;
48ec2: 2243 moveal %d3,%a1
48ec4: 5289 addql #1,%a1
_ISR_Disable( level );
48ec6: 40c3 movew %sr,%d3
48ec8: 8083 orl %d3,%d0
48eca: 46c0 movew %d0,%sr
48ecc: 2803 movel %d3,%d4
search_thread = (Thread_Control *) header->last;
48ece: 2054 moveal %a4@,%a0
while ( !_Chain_Is_head( header, (Chain_Node *)search_thread ) ) {
48ed0: ba88 cmpl %a0,%d5
48ed2: 6694 bnes 48e68 <_Thread_queue_Enqueue_priority+0xc4><== NEVER TAKEN
48ed4: 60b2 bras 48e88 <_Thread_queue_Enqueue_priority+0xe4>
if ( priority <= search_priority )
break;
#endif
_ISR_Flash( level );
if ( !_States_Are_set( search_thread->current_state, block_state) ) {
_ISR_Enable( level );
48ed6: 46c3 movew %d3,%sr
if ( _Thread_queue_Is_reverse_search( priority ) )
goto restart_reverse_search;
restart_forward_search:
search_priority = PRIORITY_MINIMUM - 1;
_ISR_Disable( level );
48ed8: 2006 movel %d6,%d0
48eda: 40c3 movew %sr,%d3
48edc: 8083 orl %d3,%d0
48ede: 46c0 movew %d0,%sr
48ee0: 2803 movel %d3,%d4
search_thread = (Thread_Control *) header->first;
48ee2: 2073 5800 moveal %a3@(00000000,%d5:l),%a0
while ( !_Chain_Is_tail( header, (Chain_Node *)search_thread ) ) {
48ee6: b9c8 cmpal %a0,%a4
48ee8: 6600 ff14 bnew 48dfe <_Thread_queue_Enqueue_priority+0x5a>
48eec: 604a bras 48f38 <_Thread_queue_Enqueue_priority+0x194>
if ( the_thread_queue->sync_state !=
THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )
goto synchronize;
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
48eee: 42ab 0030 clrl %a3@(48)
if ( priority == search_priority )
48ef2: b3c1 cmpal %d1,%a1
48ef4: 671e beqs 48f14 <_Thread_queue_Enqueue_priority+0x170>
goto equal_priority;
search_node = (Chain_Node *) search_thread;
previous_node = search_node->previous;
48ef6: 2268 0004 moveal %a0@(4),%a1
the_node = (Chain_Node *) the_thread;
the_node->next = search_node;
48efa: 2488 movel %a0,%a2@
the_node->previous = previous_node;
48efc: 2549 0004 movel %a1,%a2@(4)
previous_node->next = the_node;
48f00: 228a movel %a2,%a1@
search_node->previous = the_node;
48f02: 214a 0004 movel %a2,%a0@(4)
the_thread->Wait.queue = the_thread_queue;
48f06: 254b 0044 movel %a3,%a2@(68)
_ISR_Enable( level );
48f0a: 46c3 movew %d3,%sr
*
* WARNING! Returning with interrupts disabled!
*/
*level_p = level;
return the_thread_queue->sync_state;
}
48f0c: 4cd7 1c7c moveml %sp@,%d2-%d6/%a2-%a4
48f10: 4e5e unlk %fp
48f12: 4e75 rts
48f14: 41e8 003c lea %a0@(60),%a0
_ISR_Enable( level );
return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
equal_priority: /* add at end of priority group */
search_node = _Chain_Tail( &search_thread->Wait.Block2n );
previous_node = search_node->previous;
48f18: 2268 0004 moveal %a0@(4),%a1
the_node = (Chain_Node *) the_thread;
the_node->next = search_node;
48f1c: 2488 movel %a0,%a2@
the_node->previous = previous_node;
48f1e: 2549 0004 movel %a1,%a2@(4)
previous_node->next = the_node;
48f22: 228a movel %a2,%a1@
search_node->previous = the_node;
48f24: 214a 0004 movel %a2,%a0@(4)
the_thread->Wait.queue = the_thread_queue;
48f28: 254b 0044 movel %a3,%a2@(68)
_ISR_Enable( level );
48f2c: 46c4 movew %d4,%sr
return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
48f2e: 7001 moveq #1,%d0
*
* WARNING! Returning with interrupts disabled!
*/
*level_p = level;
return the_thread_queue->sync_state;
}
48f30: 4cd7 1c7c moveml %sp@,%d2-%d6/%a2-%a4
48f34: 4e5e unlk %fp
48f36: 4e75 rts
}
search_thread =
(Thread_Control *)search_thread->Object.Node.next;
}
if ( the_thread_queue->sync_state !=
48f38: 202b 0030 movel %a3@(48),%d0
if ( _Thread_queue_Is_reverse_search( priority ) )
goto restart_reverse_search;
restart_forward_search:
search_priority = PRIORITY_MINIMUM - 1;
48f3c: 327c ffff moveaw #-1,%a1
}
search_thread =
(Thread_Control *)search_thread->Object.Node.next;
}
if ( the_thread_queue->sync_state !=
48f40: 7401 moveq #1,%d2
48f42: b480 cmpl %d0,%d2
48f44: 6600 fee4 bnew 48e2a <_Thread_queue_Enqueue_priority+0x86>
48f48: 60a4 bras 48eee <_Thread_queue_Enqueue_priority+0x14a>
...
0004d960 <_Thread_queue_Extract_fifo>:
Thread_Control *the_thread
)
{
ISR_Level level;
_ISR_Disable( level );
4d960: 203c 0000 0700 movel #1792,%d0
void _Thread_queue_Extract_fifo(
Thread_queue_Control *the_thread_queue __attribute__((unused)),
Thread_Control *the_thread
)
{
4d966: 4e56 0000 linkw %fp,#0
4d96a: 2f0a movel %a2,%sp@-
4d96c: 246e 000c moveal %fp@(12),%a2
ISR_Level level;
_ISR_Disable( level );
4d970: 40c1 movew %sr,%d1
4d972: 8081 orl %d1,%d0
4d974: 46c0 movew %d0,%sr
4d976: 202a 0010 movel %a2@(16),%d0
4d97a: 0280 0003 bee0 andil #245472,%d0
if ( !_States_Is_waiting_on_thread_queue( the_thread->current_state ) ) {
4d980: 6734 beqs 4d9b6 <_Thread_queue_Extract_fifo+0x56>
)
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
4d982: 2252 moveal %a2@,%a1
_Chain_Extract_unprotected( &the_thread->Object.Node );
the_thread->Wait.queue = NULL;
if ( !_Watchdog_Is_active( &the_thread->Timer ) ) {
4d984: 7002 moveq #2,%d0
previous = the_node->previous;
4d986: 206a 0004 moveal %a2@(4),%a0
next->previous = previous;
4d98a: 2348 0004 movel %a0,%a1@(4)
previous->next = next;
4d98e: 2089 movel %a1,%a0@
return;
}
_Chain_Extract_unprotected( &the_thread->Object.Node );
the_thread->Wait.queue = NULL;
4d990: 42aa 0044 clrl %a2@(68)
if ( !_Watchdog_Is_active( &the_thread->Timer ) ) {
4d994: b0aa 0050 cmpl %a2@(80),%d0
4d998: 6726 beqs 4d9c0 <_Thread_queue_Extract_fifo+0x60>
_ISR_Enable( level );
4d99a: 46c1 movew %d1,%sr
RTEMS_INLINE_ROUTINE void _Thread_Unblock (
Thread_Control *the_thread
)
{
_Thread_Clear_state( the_thread, STATES_BLOCKED );
4d99c: 2d4a 0008 movel %a2,%fp@(8)
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
_Thread_MP_Free_proxy( the_thread );
#endif
}
4d9a0: 246e fffc moveal %fp@(-4),%a2
4d9a4: 203c 1003 fff8 movel #268697592,%d0
4d9aa: 2d40 000c movel %d0,%fp@(12)
4d9ae: 4e5e unlk %fp
4d9b0: 4ef9 0004 8448 jmp 48448 <_Thread_Clear_state>
ISR_Level level;
_ISR_Disable( level );
if ( !_States_Is_waiting_on_thread_queue( the_thread->current_state ) ) {
_ISR_Enable( level );
4d9b6: 46c1 movew %d1,%sr
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
_Thread_MP_Free_proxy( the_thread );
#endif
}
4d9b8: 246e fffc moveal %fp@(-4),%a2
4d9bc: 4e5e unlk %fp
4d9be: 4e75 rts
4d9c0: 7003 moveq #3,%d0
4d9c2: 2540 0050 movel %d0,%a2@(80)
if ( !_Watchdog_Is_active( &the_thread->Timer ) ) {
_ISR_Enable( level );
} else {
_Watchdog_Deactivate( &the_thread->Timer );
_ISR_Enable( level );
4d9c6: 46c1 movew %d1,%sr
(void) _Watchdog_Remove( &the_thread->Timer );
4d9c8: 486a 0048 pea %a2@(72)
4d9cc: 4eb9 0004 9ac0 jsr 49ac0 <_Watchdog_Remove>
4d9d2: 588f addql #4,%sp
4d9d4: 203c 1003 fff8 movel #268697592,%d0
4d9da: 2d4a 0008 movel %a2,%fp@(8)
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
_Thread_MP_Free_proxy( the_thread );
#endif
}
4d9de: 246e fffc moveal %fp@(-4),%a2
4d9e2: 2d40 000c movel %d0,%fp@(12)
4d9e6: 4e5e unlk %fp
4d9e8: 4ef9 0004 8448 jmp 48448 <_Thread_Clear_state>
...
0004c17c <_Thread_queue_Extract_priority_helper>:
Chain_Node *new_first_node;
Chain_Node *new_second_node;
Chain_Node *last_node;
the_node = (Chain_Node *) the_thread;
_ISR_Disable( level );
4c17c: 203c 0000 0700 movel #1792,%d0
void _Thread_queue_Extract_priority_helper(
Thread_queue_Control *the_thread_queue __attribute__((unused)),
Thread_Control *the_thread,
bool requeuing
)
{
4c182: 4e56 ffec linkw %fp,#-20
4c186: 48d7 3c04 moveml %d2/%a2-%a5,%sp@
4c18a: 246e 000c moveal %fp@(12),%a2
4c18e: 142e 0013 moveb %fp@(19),%d2
Chain_Node *new_first_node;
Chain_Node *new_second_node;
Chain_Node *last_node;
the_node = (Chain_Node *) the_thread;
_ISR_Disable( level );
4c192: 40c1 movew %sr,%d1
4c194: 8081 orl %d1,%d0
4c196: 46c0 movew %d0,%sr
*/
RTEMS_INLINE_ROUTINE bool _States_Is_waiting_on_thread_queue (
States_Control the_states
)
{
return (the_states & STATES_WAITING_ON_THREAD_QUEUE);
4c198: 202a 0010 movel %a2@(16),%d0
4c19c: 0280 0003 bee0 andil #245472,%d0
if ( !_States_Is_waiting_on_thread_queue( the_thread->current_state ) ) {
4c1a2: 6778 beqs 4c21c <_Thread_queue_Extract_priority_helper+0xa0>
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
4c1a4: 200a movel %a2,%d0
4c1a6: 0680 0000 003c addil #60,%d0
/*
* The thread was actually waiting on a thread queue so let's remove it.
*/
next_node = the_node->next;
4c1ac: 2652 moveal %a2@,%a3
previous_node = the_node->previous;
4c1ae: 286a 0004 moveal %a2@(4),%a4
*/
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
Chain_Control *the_chain
)
{
return (the_chain->first == _Chain_Tail(the_chain));
4c1b2: 206a 0038 moveal %a2@(56),%a0
if ( !_Chain_Is_empty( &the_thread->Wait.Block2n ) ) {
4c1b6: b088 cmpl %a0,%d0
4c1b8: 676e beqs 4c228 <_Thread_queue_Extract_priority_helper+0xac>
new_first_node = the_thread->Wait.Block2n.first;
new_first_thread = (Thread_Control *) new_first_node;
last_node = the_thread->Wait.Block2n.last;
4c1ba: 226a 0040 moveal %a2@(64),%a1
new_second_node = new_first_node->next;
4c1be: 2a50 moveal %a0@,%a5
previous_node->next = new_first_node;
next_node->previous = new_first_node;
4c1c0: 2748 0004 movel %a0,%a3@(4)
new_first_node = the_thread->Wait.Block2n.first;
new_first_thread = (Thread_Control *) new_first_node;
last_node = the_thread->Wait.Block2n.last;
new_second_node = new_first_node->next;
previous_node->next = new_first_node;
4c1c4: 2888 movel %a0,%a4@
next_node->previous = new_first_node;
new_first_node->next = next_node;
new_first_node->previous = previous_node;
4c1c6: 214c 0004 movel %a4,%a0@(4)
last_node = the_thread->Wait.Block2n.last;
new_second_node = new_first_node->next;
previous_node->next = new_first_node;
next_node->previous = new_first_node;
new_first_node->next = next_node;
4c1ca: 208b movel %a3,%a0@
new_first_node->previous = previous_node;
if ( !_Chain_Has_only_one_node( &the_thread->Wait.Block2n ) ) {
4c1cc: b1c9 cmpal %a1,%a0
4c1ce: 6716 beqs 4c1e6 <_Thread_queue_Extract_priority_helper+0x6a>
/* > two threads on 2-n */
new_second_node->previous =
_Chain_Head( &new_first_thread->Wait.Block2n );
4c1d0: 47e8 0038 lea %a0@(56),%a3
4c1d4: 2b4b 0004 movel %a3,%a5@(4)
new_first_thread->Wait.Block2n.first = new_second_node;
4c1d8: 214d 0038 movel %a5,%a0@(56)
new_first_thread->Wait.Block2n.last = last_node;
4c1dc: 2149 0040 movel %a1,%a0@(64)
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
4c1e0: 41e8 003c lea %a0@(60),%a0
4c1e4: 2288 movel %a0,%a1@
/*
* If we are not supposed to touch timers or the thread's state, return.
*/
if ( requeuing ) {
4c1e6: 4a02 tstb %d2
4c1e8: 6626 bnes 4c210 <_Thread_queue_Extract_priority_helper+0x94>
_ISR_Enable( level );
return;
}
if ( !_Watchdog_Is_active( &the_thread->Timer ) ) {
4c1ea: 7002 moveq #2,%d0
4c1ec: b0aa 0050 cmpl %a2@(80),%d0
4c1f0: 6742 beqs 4c234 <_Thread_queue_Extract_priority_helper+0xb8><== NEVER TAKEN
_ISR_Enable( level );
4c1f2: 46c1 movew %d1,%sr
4c1f4: 2d4a 0008 movel %a2,%fp@(8)
4c1f8: 267c 1003 fff8 moveal #268697592,%a3
4c1fe: 2d4b 000c movel %a3,%fp@(12)
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
_Thread_MP_Free_proxy( the_thread );
#endif
}
4c202: 4cee 3c04 ffec moveml %fp@(-20),%d2/%a2-%a5
4c208: 4e5e unlk %fp
4c20a: 4ef9 0004 8448 jmp 48448 <_Thread_Clear_state>
/*
* If we are not supposed to touch timers or the thread's state, return.
*/
if ( requeuing ) {
_ISR_Enable( level );
4c210: 46c1 movew %d1,%sr
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
_Thread_MP_Free_proxy( the_thread );
#endif
}
4c212: 4cee 3c04 ffec moveml %fp@(-20),%d2/%a2-%a5
4c218: 4e5e unlk %fp
4c21a: 4e75 rts
Chain_Node *last_node;
the_node = (Chain_Node *) the_thread;
_ISR_Disable( level );
if ( !_States_Is_waiting_on_thread_queue( the_thread->current_state ) ) {
_ISR_Enable( level );
4c21c: 46c1 movew %d1,%sr
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
_Thread_MP_Free_proxy( the_thread );
#endif
}
4c21e: 4cee 3c04 ffec moveml %fp@(-20),%d2/%a2-%a5
4c224: 4e5e unlk %fp
4c226: 4e75 rts
new_first_thread->Wait.Block2n.last = last_node;
last_node->next = _Chain_Tail( &new_first_thread->Wait.Block2n );
}
} else {
previous_node->next = next_node;
4c228: 288b movel %a3,%a4@
next_node->previous = previous_node;
4c22a: 274c 0004 movel %a4,%a3@(4)
/*
* If we are not supposed to touch timers or the thread's state, return.
*/
if ( requeuing ) {
4c22e: 4a02 tstb %d2
4c230: 67b8 beqs 4c1ea <_Thread_queue_Extract_priority_helper+0x6e>
4c232: 60dc bras 4c210 <_Thread_queue_Extract_priority_helper+0x94>
4c234: 7003 moveq #3,%d0 <== NOT EXECUTED
4c236: 2540 0050 movel %d0,%a2@(80) <== NOT EXECUTED
if ( !_Watchdog_Is_active( &the_thread->Timer ) ) {
_ISR_Enable( level );
} else {
_Watchdog_Deactivate( &the_thread->Timer );
_ISR_Enable( level );
4c23a: 46c1 movew %d1,%sr <== NOT EXECUTED
(void) _Watchdog_Remove( &the_thread->Timer );
4c23c: 486a 0048 pea %a2@(72) <== NOT EXECUTED
4c240: 267c 1003 fff8 moveal #268697592,%a3 <== NOT EXECUTED
4c246: 4eb9 0004 9ac0 jsr 49ac0 <_Watchdog_Remove> <== NOT EXECUTED
4c24c: 588f addql #4,%sp <== NOT EXECUTED
4c24e: 2d4a 0008 movel %a2,%fp@(8) <== NOT EXECUTED
4c252: 2d4b 000c movel %a3,%fp@(12) <== NOT EXECUTED
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
_Thread_MP_Free_proxy( the_thread );
#endif
}
4c256: 4cee 3c04 ffec moveml %fp@(-20),%d2/%a2-%a5 <== NOT EXECUTED
4c25c: 4e5e unlk %fp <== NOT EXECUTED
4c25e: 4ef9 0004 8448 jmp 48448 <_Thread_Clear_state> <== NOT EXECUTED
00048fb8 <_Thread_queue_Initialize>:
the_thread_queue->state = state;
the_thread_queue->discipline = the_discipline;
the_thread_queue->timeout_status = timeout_status;
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
if ( the_discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY ) {
48fb8: 7201 moveq #1,%d1
Thread_queue_Control *the_thread_queue,
Thread_queue_Disciplines the_discipline,
States_Control state,
uint32_t timeout_status
)
{
48fba: 4e56 0000 linkw %fp,#0
48fbe: 206e 0008 moveal %fp@(8),%a0
48fc2: 2f0a movel %a2,%sp@-
48fc4: 202e 000c movel %fp@(12),%d0
48fc8: 2f02 movel %d2,%sp@-
the_thread_queue->state = state;
48fca: 216e 0010 0038 movel %fp@(16),%a0@(56)
the_thread_queue->discipline = the_discipline;
the_thread_queue->timeout_status = timeout_status;
48fd0: 216e 0014 003c movel %fp@(20),%a0@(60)
States_Control state,
uint32_t timeout_status
)
{
the_thread_queue->state = state;
the_thread_queue->discipline = the_discipline;
48fd6: 2140 0034 movel %d0,%a0@(52)
the_thread_queue->timeout_status = timeout_status;
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
48fda: 42a8 0030 clrl %a0@(48)
if ( the_discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY ) {
48fde: b280 cmpl %d0,%d1
48fe0: 6716 beqs 48ff8 <_Thread_queue_Initialize+0x40>
48fe2: 2448 moveal %a0,%a2
48fe4: 588a addql #4,%a2
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
48fe6: 42a8 0004 clrl %a0@(4)
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
48fea: 208a movel %a2,%a0@
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
48fec: 2148 0008 movel %a0,%a0@(8)
_Chain_Initialize_empty( &the_thread_queue->Queues.Priority[index] );
} else { /* must be THREAD_QUEUE_DISCIPLINE_FIFO */
_Chain_Initialize_empty( &the_thread_queue->Queues.Fifo );
}
}
48ff0: 241f movel %sp@+,%d2
48ff2: 245f moveal %sp@+,%a2
48ff4: 4e5e unlk %fp
48ff6: 4e75 rts
the_thread_queue->state = state;
the_thread_queue->discipline = the_discipline;
the_thread_queue->timeout_status = timeout_status;
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
if ( the_discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY ) {
48ff8: 2248 moveal %a0,%a1
48ffa: 4280 clrl %d0
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
48ffc: 2400 movel %d0,%d2
48ffe: 2200 movel %d0,%d1
uint32_t index;
for( index=0 ;
index < TASK_QUEUE_DATA_NUMBER_OF_PRIORITY_HEADERS ;
index++)
49000: 5280 addql #1,%d0
49002: e58a lsll #2,%d2
49004: e989 lsll #4,%d1
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
49006: 42a9 0004 clrl %a1@(4)
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
4900a: 9282 subl %d2,%d1
_Chain_Initialize_empty( &the_thread_queue->Queues.Priority[index] );
4900c: 45f0 1800 lea %a0@(00000000,%d1:l),%a2
49010: 234a 0008 movel %a2,%a1@(8)
49014: 45f0 1804 lea %a0@(00000004,%d1:l),%a2
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
if ( the_discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY ) {
uint32_t index;
for( index=0 ;
49018: 7204 moveq #4,%d1
4901a: 228a movel %a2,%a1@
index < TASK_QUEUE_DATA_NUMBER_OF_PRIORITY_HEADERS ;
index++)
4901c: 43e9 000c lea %a1@(12),%a1
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
if ( the_discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY ) {
uint32_t index;
for( index=0 ;
49020: b280 cmpl %d0,%d1
49022: 67cc beqs 48ff0 <_Thread_queue_Initialize+0x38> <== NEVER TAKEN
49024: 2400 movel %d0,%d2
49026: 2200 movel %d0,%d1
index < TASK_QUEUE_DATA_NUMBER_OF_PRIORITY_HEADERS ;
index++)
49028: 5280 addql #1,%d0
4902a: e58a lsll #2,%d2
4902c: e989 lsll #4,%d1
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
4902e: 42a9 0004 clrl %a1@(4)
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
49032: 9282 subl %d2,%d1
_Chain_Initialize_empty( &the_thread_queue->Queues.Priority[index] );
49034: 45f0 1800 lea %a0@(00000000,%d1:l),%a2
49038: 234a 0008 movel %a2,%a1@(8)
4903c: 45f0 1804 lea %a0@(00000004,%d1:l),%a2
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
if ( the_discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY ) {
uint32_t index;
for( index=0 ;
49040: 7204 moveq #4,%d1
49042: 228a movel %a2,%a1@
index < TASK_QUEUE_DATA_NUMBER_OF_PRIORITY_HEADERS ;
index++)
49044: 43e9 000c lea %a1@(12),%a1
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
if ( the_discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY ) {
uint32_t index;
for( index=0 ;
49048: b280 cmpl %d0,%d1
4904a: 66b0 bnes 48ffc <_Thread_queue_Initialize+0x44>
4904c: 60a2 bras 48ff0 <_Thread_queue_Initialize+0x38>
...
0004c264 <_Thread_queue_Process_timeout>:
#include <rtems/score/tqdata.h>
void _Thread_queue_Process_timeout(
Thread_Control *the_thread
)
{
4c264: 4e56 0000 linkw %fp,#0
4c268: 206e 0008 moveal %fp@(8),%a0
Thread_queue_Control *the_thread_queue = the_thread->Wait.queue;
4c26c: 2268 0044 moveal %a0@(68),%a1
* 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.
*/
if ( the_thread_queue->sync_state != THREAD_BLOCKING_OPERATION_SYNCHRONIZED &&
4c270: 2029 0030 movel %a1@(48),%d0
4c274: 6708 beqs 4c27e <_Thread_queue_Process_timeout+0x1a>
4c276: b1f9 0005 e5e0 cmpal 5e5e0 <_Per_CPU_Information+0xc>,%a0
4c27c: 6716 beqs 4c294 <_Thread_queue_Process_timeout+0x30><== ALWAYS TAKEN
if ( the_thread_queue->sync_state != THREAD_BLOCKING_OPERATION_SATISFIED ) {
the_thread->Wait.return_code = the_thread->Wait.queue->timeout_status;
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_TIMEOUT;
}
} else {
the_thread->Wait.return_code = the_thread->Wait.queue->timeout_status;
4c27e: 2169 003c 0034 movel %a1@(60),%a0@(52)
_Thread_queue_Extract( the_thread->Wait.queue, the_thread );
4c284: 2f08 movel %a0,%sp@-
4c286: 2f09 movel %a1,%sp@-
4c288: 4eb9 0004 c144 jsr 4c144 <_Thread_queue_Extract>
4c28e: 508f addql #8,%sp
}
}
4c290: 4e5e unlk %fp
4c292: 4e75 rts
* a timeout is not allowed to occur.
*/
if ( the_thread_queue->sync_state != THREAD_BLOCKING_OPERATION_SYNCHRONIZED &&
_Thread_Is_executing( the_thread ) ) {
if ( the_thread_queue->sync_state != THREAD_BLOCKING_OPERATION_SATISFIED ) {
4c294: 7203 moveq #3,%d1
4c296: b280 cmpl %d0,%d1
4c298: 67f6 beqs 4c290 <_Thread_queue_Process_timeout+0x2c>
the_thread->Wait.return_code = the_thread->Wait.queue->timeout_status;
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_TIMEOUT;
4c29a: 7002 moveq #2,%d0
}
} else {
the_thread->Wait.return_code = the_thread->Wait.queue->timeout_status;
_Thread_queue_Extract( the_thread->Wait.queue, the_thread );
}
}
4c29c: 4e5e unlk %fp
*/
if ( the_thread_queue->sync_state != THREAD_BLOCKING_OPERATION_SYNCHRONIZED &&
_Thread_Is_executing( the_thread ) ) {
if ( the_thread_queue->sync_state != THREAD_BLOCKING_OPERATION_SATISFIED ) {
the_thread->Wait.return_code = the_thread->Wait.queue->timeout_status;
4c29e: 2169 003c 0034 movel %a1@(60),%a0@(52)
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_TIMEOUT;
4c2a4: 2340 0030 movel %d0,%a1@(48)
}
} else {
the_thread->Wait.return_code = the_thread->Wait.queue->timeout_status;
_Thread_queue_Extract( the_thread->Wait.queue, the_thread );
}
}
...
00049050 <_Thread_queue_Requeue>:
void _Thread_queue_Requeue(
Thread_queue_Control *the_thread_queue,
Thread_Control *the_thread
)
{
49050: 4e56 fff0 linkw %fp,#-16
49054: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
49058: 246e 0008 moveal %fp@(8),%a2
4905c: 266e 000c moveal %fp@(12),%a3
/*
* Just in case the thread really wasn't blocked on a thread queue
* when we get here.
*/
if ( !the_thread_queue )
49060: 4a8a tstl %a2
49062: 6708 beqs 4906c <_Thread_queue_Requeue+0x1c> <== 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 ) {
49064: 7001 moveq #1,%d0
49066: b0aa 0034 cmpl %a2@(52),%d0
4906a: 670a beqs 49076 <_Thread_queue_Requeue+0x26> <== ALWAYS TAKEN
_Thread_queue_Extract_priority_helper( tq, the_thread, true );
(void) _Thread_queue_Enqueue_priority( tq, the_thread, &level_ignored );
}
_ISR_Enable( level );
}
}
4906c: 4cee 0c04 fff0 moveml %fp@(-16),%d2/%a2-%a3 <== NOT EXECUTED
49072: 4e5e unlk %fp <== NOT EXECUTED
49074: 4e75 rts <== NOT EXECUTED
if ( the_thread_queue->discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY ) {
Thread_queue_Control *tq = the_thread_queue;
ISR_Level level;
ISR_Level level_ignored;
_ISR_Disable( level );
49076: 303c 0700 movew #1792,%d0
4907a: 40c2 movew %sr,%d2
4907c: 8082 orl %d2,%d0
4907e: 46c0 movew %d0,%sr
49080: 202b 0010 movel %a3@(16),%d0
49084: 0280 0003 bee0 andil #245472,%d0
if ( _States_Is_waiting_on_thread_queue( the_thread->current_state ) ) {
4908a: 660c bnes 49098 <_Thread_queue_Requeue+0x48> <== ALWAYS TAKEN
_Thread_queue_Enter_critical_section( tq );
_Thread_queue_Extract_priority_helper( tq, the_thread, true );
(void) _Thread_queue_Enqueue_priority( tq, the_thread, &level_ignored );
}
_ISR_Enable( level );
4908c: 46c2 movew %d2,%sr <== NOT EXECUTED
}
}
4908e: 4cee 0c04 fff0 moveml %fp@(-16),%d2/%a2-%a3
49094: 4e5e unlk %fp
49096: 4e75 rts
ISR_Level level_ignored;
_ISR_Disable( level );
if ( _States_Is_waiting_on_thread_queue( the_thread->current_state ) ) {
_Thread_queue_Enter_critical_section( tq );
_Thread_queue_Extract_priority_helper( tq, the_thread, true );
49098: 4878 0001 pea 1 <ADD>
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;
4909c: 7001 moveq #1,%d0
4909e: 2f0b movel %a3,%sp@-
490a0: 2540 0030 movel %d0,%a2@(48)
490a4: 2f0a movel %a2,%sp@-
490a6: 4eb9 0004 c17c jsr 4c17c <_Thread_queue_Extract_priority_helper>
(void) _Thread_queue_Enqueue_priority( tq, the_thread, &level_ignored );
490ac: 486e fffc pea %fp@(-4)
490b0: 2f0b movel %a3,%sp@-
490b2: 2f0a movel %a2,%sp@-
490b4: 4eb9 0004 8da4 jsr 48da4 <_Thread_queue_Enqueue_priority>
490ba: 4fef 0018 lea %sp@(24),%sp
}
_ISR_Enable( level );
490be: 46c2 movew %d2,%sr
490c0: 60cc bras 4908e <_Thread_queue_Requeue+0x3e>
...
000490c4 <_Thread_queue_Timeout>:
void _Thread_queue_Timeout(
Objects_Id id,
void *ignored __attribute__((unused))
)
{
490c4: 4e56 fffc linkw %fp,#-4
Thread_Control *the_thread;
Objects_Locations location;
the_thread = _Thread_Get( id, &location );
490c8: 486e fffc pea %fp@(-4)
490cc: 2f2e 0008 movel %fp@(8),%sp@-
490d0: 4eb9 0004 8854 jsr 48854 <_Thread_Get>
switch ( location ) {
490d6: 508f addql #8,%sp
490d8: 4aae fffc tstl %fp@(-4)
490dc: 6618 bnes 490f6 <_Thread_queue_Timeout+0x32> <== NEVER TAKEN
#if defined(RTEMS_MULTIPROCESSING)
case OBJECTS_REMOTE: /* impossible */
#endif
break;
case OBJECTS_LOCAL:
_Thread_queue_Process_timeout( the_thread );
490de: 2f00 movel %d0,%sp@-
490e0: 4eb9 0004 c264 jsr 4c264 <_Thread_queue_Process_timeout>
*/
RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void )
{
RTEMS_COMPILER_MEMORY_BARRIER();
_Thread_Dispatch_disable_level -= 1;
490e6: 588f addql #4,%sp
490e8: 2039 0005 e41c movel 5e41c <_Thread_Dispatch_disable_level>,%d0
490ee: 5380 subql #1,%d0
490f0: 23c0 0005 e41c movel %d0,5e41c <_Thread_Dispatch_disable_level>
_Thread_Unnest_dispatch();
break;
}
}
490f6: 4e5e unlk %fp
...
00059360 <_Timer_server_Body>:
* @a arg points to the corresponding timer server control block.
*/
static rtems_task _Timer_server_Body(
rtems_task_argument arg
)
{
59360: 4e56 ffb0 linkw %fp,#-80
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
59364: 41ee ffec lea %fp@(-20),%a0
59368: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
5936c: 246e 0008 moveal %fp@(8),%a2
59370: 2c0e movel %fp,%d6
59372: 260e movel %fp,%d3
59374: 5186 subql #8,%d6
59376: 0683 ffff ffe8 addil #-24,%d3
5937c: 240a movel %a2,%d2
5937e: 2a0a movel %a2,%d5
59380: 4bf9 0005 d7bc lea 5d7bc <_Watchdog_Adjust_to_chain>,%a5
59386: 0682 0000 0030 addil #48,%d2
5938c: 0685 0000 0068 addil #104,%d5
59392: 47f9 0005 9f14 lea 59f14 <_Chain_Get>,%a3
59398: 49f9 0005 d844 lea 5d844 <_Watchdog_Insert>,%a4
* of zero it will be processed in the next iteration of the timer server
* body loop.
*/
_Timer_server_Process_insertions( ts );
_ISR_Disable( level );
5939e: 283c 0000 0700 movel #1792,%d4
593a4: 2d48 ffd8 movel %a0,%fp@(-40)
593a8: 41ea 0008 lea %a2@(8),%a0
593ac: 2d48 ffe4 movel %a0,%fp@(-28)
593b0: 41ea 0040 lea %a2@(64),%a0
593b4: 2d48 ffe0 movel %a0,%fp@(-32)
{
Timer_server_Control *ts = (Timer_server_Control *) arg;
Chain_Control insert_chain;
Chain_Control fire_chain;
_Chain_Initialize_empty( &insert_chain );
593b8: 41ee fff4 lea %fp@(-12),%a0
593bc: 2d48 fffc movel %a0,%fp@(-4)
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
593c0: 41ee ffec lea %fp@(-20),%a0
593c4: 2d46 fff4 movel %d6,%fp@(-12)
the_chain->permanent_null = NULL;
593c8: 42ae fff8 clrl %fp@(-8)
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
593cc: 2d48 ffe8 movel %a0,%fp@(-24)
the_chain->permanent_null = NULL;
593d0: 42ae ffec clrl %fp@(-20)
the_chain->last = _Chain_Head(the_chain);
593d4: 2d43 fff0 movel %d3,%fp@(-16)
{
/*
* 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;
593d8: 41ee fff4 lea %fp@(-12),%a0
593dc: 2548 0078 movel %a0,%a2@(120)
static void _Timer_server_Process_interval_watchdogs(
Timer_server_Watchdogs *watchdogs,
Chain_Control *fire_chain
)
{
Watchdog_Interval snapshot = _Watchdog_Ticks_since_boot;
593e0: 2039 0007 d3f4 movel 7d3f4 <_Watchdog_Ticks_since_boot>,%d0
/*
* We assume adequate unsigned arithmetic here.
*/
Watchdog_Interval delta = snapshot - watchdogs->last_snapshot;
593e6: 222a 003c movel %a2@(60),%d1
watchdogs->last_snapshot = snapshot;
593ea: 2540 003c movel %d0,%a2@(60)
_Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );
593ee: 9081 subl %d1,%d0
593f0: 2f03 movel %d3,%sp@-
593f2: 2f00 movel %d0,%sp@-
593f4: 2f02 movel %d2,%sp@-
593f6: 4e95 jsr %a5@
static void _Timer_server_Process_tod_watchdogs(
Timer_server_Watchdogs *watchdogs,
Chain_Control *fire_chain
)
{
Watchdog_Interval snapshot = (Watchdog_Interval) _TOD_Seconds_since_epoch();
593f8: 2039 0007 d352 movel 7d352 <_TOD_Now>,%d0
/*
* 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 ) {
593fe: 4fef 000c lea %sp@(12),%sp
Timer_server_Watchdogs *watchdogs,
Chain_Control *fire_chain
)
{
Watchdog_Interval snapshot = (Watchdog_Interval) _TOD_Seconds_since_epoch();
Watchdog_Interval last_snapshot = watchdogs->last_snapshot;
59402: 222a 0074 movel %a2@(116),%d1
/*
* 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 ) {
59406: b280 cmpl %d0,%d1
59408: 6500 0086 bcsw 59490 <_Timer_server_Body+0x130>
* TOD has been set forward.
*/
delta = snapshot - last_snapshot;
_Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );
} else if ( snapshot < last_snapshot ) {
5940c: b280 cmpl %d0,%d1
5940e: 6200 00a4 bhiw 594b4 <_Timer_server_Body+0x154>
*/
delta = last_snapshot - snapshot;
_Watchdog_Adjust( &watchdogs->Chain, WATCHDOG_BACKWARD, delta );
}
watchdogs->last_snapshot = snapshot;
59412: 2540 0074 movel %d0,%a2@(116)
}
static void _Timer_server_Process_insertions( Timer_server_Control *ts )
{
while ( true ) {
Timer_Control *timer = (Timer_Control *) _Chain_Get( ts->insert_chain );
59416: 202a 0078 movel %a2@(120),%d0
5941a: 2f00 movel %d0,%sp@-
5941c: 4e93 jsr %a3@
if ( timer == NULL ) {
5941e: 588f addql #4,%sp
59420: 4a80 tstl %d0
59422: 672e beqs 59452 <_Timer_server_Body+0xf2> <== ALWAYS TAKEN
static void _Timer_server_Insert_timer(
Timer_server_Control *ts,
Timer_Control *timer
)
{
if ( timer->the_class == TIMER_INTERVAL_ON_TASK ) {
59424: 2040 moveal %d0,%a0 <== NOT EXECUTED
59426: 7e01 moveq #1,%d7 <== NOT EXECUTED
59428: 2228 0038 movel %a0@(56),%d1 <== NOT EXECUTED
5942c: be81 cmpl %d1,%d7 <== NOT EXECUTED
5942e: 6700 00a8 beqw 594d8 <_Timer_server_Body+0x178> <== NOT EXECUTED
_Watchdog_Insert( &ts->Interval_watchdogs.Chain, &timer->Ticker );
} else if ( timer->the_class == TIMER_TIME_OF_DAY_ON_TASK ) {
59432: 7e03 moveq #3,%d7 <== NOT EXECUTED
59434: be81 cmpl %d1,%d7 <== NOT EXECUTED
59436: 66de bnes 59416 <_Timer_server_Body+0xb6> <== NOT EXECUTED
_Watchdog_Insert( &ts->TOD_watchdogs.Chain, &timer->Ticker );
59438: 2040 moveal %d0,%a0 <== NOT EXECUTED
5943a: 4868 0010 pea %a0@(16) <== NOT EXECUTED
5943e: 2f05 movel %d5,%sp@- <== NOT EXECUTED
59440: 4e94 jsr %a4@ <== NOT EXECUTED
}
static void _Timer_server_Process_insertions( Timer_server_Control *ts )
{
while ( true ) {
Timer_Control *timer = (Timer_Control *) _Chain_Get( ts->insert_chain );
59442: 202a 0078 movel %a2@(120),%d0 <== NOT EXECUTED
)
{
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 );
59446: 508f addql #8,%sp <== NOT EXECUTED
}
static void _Timer_server_Process_insertions( Timer_server_Control *ts )
{
while ( true ) {
Timer_Control *timer = (Timer_Control *) _Chain_Get( ts->insert_chain );
59448: 2f00 movel %d0,%sp@- <== NOT EXECUTED
5944a: 4e93 jsr %a3@ <== NOT EXECUTED
if ( timer == NULL ) {
5944c: 588f addql #4,%sp <== NOT EXECUTED
5944e: 4a80 tstl %d0 <== NOT EXECUTED
59450: 66d2 bnes 59424 <_Timer_server_Body+0xc4> <== 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 );
59452: 2004 movel %d4,%d0
59454: 40c1 movew %sr,%d1
59456: 8081 orl %d1,%d0
59458: 46c0 movew %d0,%sr
if ( _Chain_Is_empty( insert_chain ) ) {
5945a: bcae fff4 cmpl %fp@(-12),%d6
5945e: 6700 0086 beqw 594e6 <_Timer_server_Body+0x186>
ts->insert_chain = NULL;
_ISR_Enable( level );
break;
} else {
_ISR_Enable( level );
59462: 46c1 movew %d1,%sr <== NOT EXECUTED
static void _Timer_server_Process_interval_watchdogs(
Timer_server_Watchdogs *watchdogs,
Chain_Control *fire_chain
)
{
Watchdog_Interval snapshot = _Watchdog_Ticks_since_boot;
59464: 2039 0007 d3f4 movel 7d3f4 <_Watchdog_Ticks_since_boot>,%d0<== NOT EXECUTED
/*
* We assume adequate unsigned arithmetic here.
*/
Watchdog_Interval delta = snapshot - watchdogs->last_snapshot;
5946a: 222a 003c movel %a2@(60),%d1 <== NOT EXECUTED
watchdogs->last_snapshot = snapshot;
5946e: 2540 003c movel %d0,%a2@(60) <== NOT EXECUTED
_Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );
59472: 9081 subl %d1,%d0 <== NOT EXECUTED
59474: 2f03 movel %d3,%sp@- <== NOT EXECUTED
59476: 2f00 movel %d0,%sp@- <== NOT EXECUTED
59478: 2f02 movel %d2,%sp@- <== NOT EXECUTED
5947a: 4e95 jsr %a5@ <== NOT EXECUTED
static void _Timer_server_Process_tod_watchdogs(
Timer_server_Watchdogs *watchdogs,
Chain_Control *fire_chain
)
{
Watchdog_Interval snapshot = (Watchdog_Interval) _TOD_Seconds_since_epoch();
5947c: 2039 0007 d352 movel 7d352 <_TOD_Now>,%d0 <== NOT EXECUTED
/*
* 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 ) {
59482: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
Timer_server_Watchdogs *watchdogs,
Chain_Control *fire_chain
)
{
Watchdog_Interval snapshot = (Watchdog_Interval) _TOD_Seconds_since_epoch();
Watchdog_Interval last_snapshot = watchdogs->last_snapshot;
59486: 222a 0074 movel %a2@(116),%d1 <== NOT EXECUTED
/*
* 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 ) {
5948a: b280 cmpl %d0,%d1 <== NOT EXECUTED
5948c: 6400 ff7e bccw 5940c <_Timer_server_Body+0xac> <== NOT EXECUTED
/*
* 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 );
59490: 2f03 movel %d3,%sp@-
59492: 2e00 movel %d0,%d7
59494: 9e81 subl %d1,%d7
59496: 2f07 movel %d7,%sp@-
59498: 2d40 ffdc movel %d0,%fp@(-36)
5949c: 2f05 movel %d5,%sp@-
5949e: 4eb9 0005 d7bc jsr 5d7bc <_Watchdog_Adjust_to_chain>
594a4: 202e ffdc movel %fp@(-36),%d0
594a8: 4fef 000c lea %sp@(12),%sp
*/
delta = last_snapshot - snapshot;
_Watchdog_Adjust( &watchdogs->Chain, WATCHDOG_BACKWARD, delta );
}
watchdogs->last_snapshot = snapshot;
594ac: 2540 0074 movel %d0,%a2@(116)
594b0: 6000 ff64 braw 59416 <_Timer_server_Body+0xb6>
/*
* 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 );
594b4: 9280 subl %d0,%d1
594b6: 2f01 movel %d1,%sp@-
594b8: 4878 0001 pea 1 <ADD>
594bc: 2d40 ffdc movel %d0,%fp@(-36)
594c0: 2f05 movel %d5,%sp@-
594c2: 4eb9 0005 d728 jsr 5d728 <_Watchdog_Adjust>
594c8: 202e ffdc movel %fp@(-36),%d0
594cc: 4fef 000c lea %sp@(12),%sp
}
watchdogs->last_snapshot = snapshot;
594d0: 2540 0074 movel %d0,%a2@(116)
594d4: 6000 ff40 braw 59416 <_Timer_server_Body+0xb6>
Timer_server_Control *ts,
Timer_Control *timer
)
{
if ( timer->the_class == TIMER_INTERVAL_ON_TASK ) {
_Watchdog_Insert( &ts->Interval_watchdogs.Chain, &timer->Ticker );
594d8: 4868 0010 pea %a0@(16) <== NOT EXECUTED
594dc: 2f02 movel %d2,%sp@- <== NOT EXECUTED
594de: 4e94 jsr %a4@ <== NOT EXECUTED
594e0: 508f addql #8,%sp <== NOT EXECUTED
594e2: 6000 ff32 braw 59416 <_Timer_server_Body+0xb6> <== NOT EXECUTED
*/
_Timer_server_Process_insertions( ts );
_ISR_Disable( level );
if ( _Chain_Is_empty( insert_chain ) ) {
ts->insert_chain = NULL;
594e6: 42aa 0078 clrl %a2@(120)
_ISR_Enable( level );
594ea: 46c1 movew %d1,%sr
_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 ) ) {
594ec: 202e ffd8 movel %fp@(-40),%d0
594f0: b0ae ffe8 cmpl %fp@(-24),%d0
594f4: 6752 beqs 59548 <_Timer_server_Body+0x1e8>
/*
* It is essential that interrupts are disable here since an interrupt
* service routine may remove a watchdog from the chain.
*/
_ISR_Disable( level );
594f6: 2204 movel %d4,%d1
594f8: 40c0 movew %sr,%d0
594fa: 8280 orl %d0,%d1
594fc: 46c1 movew %d1,%sr
*/
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
Chain_Control *the_chain
)
{
return (the_chain->first == _Chain_Tail(the_chain));
594fe: 206e ffe8 moveal %fp@(-24),%a0
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Get_unprotected(
Chain_Control *the_chain
)
{
if ( !_Chain_Is_empty(the_chain))
59502: b1ee ffd8 cmpal %fp@(-40),%a0
59506: 6732 beqs 5953a <_Timer_server_Body+0x1da> <== NEVER TAKEN
{
Chain_Node *return_node;
Chain_Node *new_first;
return_node = the_chain->first;
new_first = return_node->next;
59508: 2250 moveal %a0@,%a1
the_chain->first = new_first;
new_first->previous = _Chain_Head(the_chain);
5950a: 2343 0004 movel %d3,%a1@(4)
watchdog = (Watchdog_Control *) _Chain_Get_unprotected( &fire_chain );
if ( watchdog != NULL ) {
watchdog->state = WATCHDOG_INACTIVE;
5950e: 42a8 0008 clrl %a0@(8)
Chain_Node *return_node;
Chain_Node *new_first;
return_node = the_chain->first;
new_first = return_node->next;
the_chain->first = new_first;
59512: 2d49 ffe8 movel %a1,%fp@(-24)
_ISR_Enable( level );
59516: 46c0 movew %d0,%sr
/*
* 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 );
59518: 2f28 0024 movel %a0@(36),%sp@-
5951c: 2f28 0020 movel %a0@(32),%sp@-
59520: 2068 001c moveal %a0@(28),%a0
59524: 4e90 jsr %a0@
}
59526: 508f addql #8,%sp
/*
* It is essential that interrupts are disable here since an interrupt
* service routine may remove a watchdog from the chain.
*/
_ISR_Disable( level );
59528: 2204 movel %d4,%d1
5952a: 40c0 movew %sr,%d0
5952c: 8280 orl %d0,%d1
5952e: 46c1 movew %d1,%sr
*/
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
Chain_Control *the_chain
)
{
return (the_chain->first == _Chain_Tail(the_chain));
59530: 206e ffe8 moveal %fp@(-24),%a0
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Get_unprotected(
Chain_Control *the_chain
)
{
if ( !_Chain_Is_empty(the_chain))
59534: b1ee ffd8 cmpal %fp@(-40),%a0
59538: 66ce bnes 59508 <_Timer_server_Body+0x1a8>
watchdog = (Watchdog_Control *) _Chain_Get_unprotected( &fire_chain );
if ( watchdog != NULL ) {
watchdog->state = WATCHDOG_INACTIVE;
_ISR_Enable( level );
} else {
_ISR_Enable( level );
5953a: 46c0 movew %d0,%sr
{
/*
* 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;
5953c: 41ee fff4 lea %fp@(-12),%a0
59540: 2548 0078 movel %a0,%a2@(120)
59544: 6000 fe9a braw 593e0 <_Timer_server_Body+0x80>
* the active flag of the timer server is true.
*/
(*watchdog->routine)( watchdog->id, watchdog->user_data );
}
} else {
ts->active = false;
59548: 4207 clrb %d7
5954a: 1547 007c moveb %d7,%a2@(124)
5954e: 2039 0007 d2c8 movel 7d2c8 <_Thread_Dispatch_disable_level>,%d0
59554: 5280 addql #1,%d0
59556: 23c0 0007 d2c8 movel %d0,7d2c8 <_Thread_Dispatch_disable_level>
/*
* Block until there is something to do.
*/
_Thread_Disable_dispatch();
_Thread_Set_state( ts->thread, STATES_DELAYING );
5955c: 4878 0008 pea 8 <DIVIDE_BY_ZERO>
59560: 2f12 movel %a2@,%sp@-
59562: 4eb9 0005 ce70 jsr 5ce70 <_Thread_Set_state>
_Timer_server_Reset_interval_system_watchdog( ts );
59568: 2f0a movel %a2,%sp@-
5956a: 4eba fd1c jsr %pc@(59288 <_Timer_server_Reset_interval_system_watchdog>)
_Timer_server_Reset_tod_system_watchdog( ts );
5956e: 2f0a movel %a2,%sp@-
59570: 4eba fd80 jsr %pc@(592f2 <_Timer_server_Reset_tod_system_watchdog>)
_Thread_Enable_dispatch();
59574: 4eb9 0005 c3f2 jsr 5c3f2 <_Thread_Enable_dispatch>
ts->active = true;
5957a: 7001 moveq #1,%d0
5957c: 1540 007c moveb %d0,%a2@(124)
static void _Timer_server_Stop_interval_system_watchdog(
Timer_server_Control *ts
)
{
_Watchdog_Remove( &ts->Interval_watchdogs.System_watchdog );
59580: 2f2e ffe4 movel %fp@(-28),%sp@-
59584: 4eb9 0005 d98c jsr 5d98c <_Watchdog_Remove>
static void _Timer_server_Stop_tod_system_watchdog(
Timer_server_Control *ts
)
{
_Watchdog_Remove( &ts->TOD_watchdogs.System_watchdog );
5958a: 2f2e ffe0 movel %fp@(-32),%sp@-
5958e: 4eb9 0005 d98c jsr 5d98c <_Watchdog_Remove>
59594: 4fef 0018 lea %sp@(24),%sp
59598: 6000 fe3e braw 593d8 <_Timer_server_Body+0x78>
0005959c <_Timer_server_Schedule_operation_method>:
static void _Timer_server_Schedule_operation_method(
Timer_server_Control *ts,
Timer_Control *timer
)
{
5959c: 4e56 fff0 linkw %fp,#-16
595a0: 206e 000c moveal %fp@(12),%a0
595a4: 48d7 041c moveml %d2-%d4/%a2,%sp@
595a8: 246e 0008 moveal %fp@(8),%a2
if ( ts->insert_chain == NULL ) {
595ac: 202a 0078 movel %a2@(120),%d0
595b0: 671a beqs 595cc <_Timer_server_Schedule_operation_method+0x30><== ALWAYS TAKEN
* 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 );
595b2: 202a 0078 movel %a2@(120),%d0 <== NOT EXECUTED
595b6: 2d48 000c movel %a0,%fp@(12) <== NOT EXECUTED
}
}
595ba: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2 <== 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 );
595c0: 2d40 0008 movel %d0,%fp@(8) <== NOT EXECUTED
}
}
595c4: 4e5e unlk %fp <== 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 );
595c6: 4ef9 0005 9eb4 jmp 59eb4 <_Chain_Append> <== NOT EXECUTED
595cc: 2039 0007 d2c8 movel 7d2c8 <_Thread_Dispatch_disable_level>,%d0
595d2: 5280 addql #1,%d0
595d4: 23c0 0007 d2c8 movel %d0,7d2c8 <_Thread_Dispatch_disable_level>
* being inserted. This could result in an integer overflow.
*/
_Thread_Disable_dispatch();
if ( timer->the_class == TIMER_INTERVAL_ON_TASK ) {
595da: 2028 0038 movel %a0@(56),%d0
595de: 7201 moveq #1,%d1
595e0: b280 cmpl %d0,%d1
595e2: 6700 008a beqw 5966e <_Timer_server_Schedule_operation_method+0xd2>
_Watchdog_Insert( &ts->Interval_watchdogs.Chain, &timer->Ticker );
if ( !ts->active ) {
_Timer_server_Reset_interval_system_watchdog( ts );
}
} else if ( timer->the_class == TIMER_TIME_OF_DAY_ON_TASK ) {
595e6: 7803 moveq #3,%d4
595e8: b880 cmpl %d0,%d4
595ea: 670e beqs 595fa <_Timer_server_Schedule_operation_method+0x5e>
* 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 );
}
}
595ec: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2
595f2: 4e5e unlk %fp
if ( !ts->active ) {
_Timer_server_Reset_tod_system_watchdog( ts );
}
}
_Thread_Enable_dispatch();
595f4: 4ef9 0005 c3f2 jmp 5c3f2 <_Thread_Enable_dispatch>
} else if ( timer->the_class == TIMER_TIME_OF_DAY_ON_TASK ) {
/*
* We have to advance the last known seconds value of the server and update
* the watchdog chain accordingly.
*/
_ISR_Disable( level );
595fa: 203c 0000 0700 movel #1792,%d0
59600: 40c2 movew %sr,%d2
59602: 8082 orl %d2,%d0
59604: 46c0 movew %d0,%sr
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
59606: 260a movel %a2,%d3
59608: 0683 0000 006c addil #108,%d3
snapshot = (Watchdog_Interval) _TOD_Seconds_since_epoch();
5960e: 2039 0007 d352 movel 7d352 <_TOD_Now>,%d0
last_snapshot = ts->TOD_watchdogs.last_snapshot;
59614: 222a 0074 movel %a2@(116),%d1
*/
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
Chain_Control *the_chain
)
{
return (the_chain->first == _Chain_Tail(the_chain));
59618: 226a 0068 moveal %a2@(104),%a1
if ( !_Chain_Is_empty( &ts->TOD_watchdogs.Chain ) ) {
5961c: b689 cmpl %a1,%d3
5961e: 671c beqs 5963c <_Timer_server_Schedule_operation_method+0xa0>
first_watchdog = _Watchdog_First( &ts->TOD_watchdogs.Chain );
delta_interval = first_watchdog->delta_interval;
59620: 2629 0010 movel %a1@(16),%d3
if ( snapshot > last_snapshot ) {
59624: b280 cmpl %d0,%d1
59626: 6400 00ba bccw 596e2 <_Timer_server_Schedule_operation_method+0x146>
/*
* We advanced in time.
*/
delta = snapshot - last_snapshot;
5962a: 2800 movel %d0,%d4
5962c: 9881 subl %d1,%d4
if (delta_interval > delta) {
5962e: b883 cmpl %d3,%d4
59630: 6400 00bc bccw 596ee <_Timer_server_Schedule_operation_method+0x152>
delta_interval -= delta;
59634: 9684 subl %d4,%d3
59636: 2203 movel %d3,%d1
* Someone put us in the past.
*/
delta = last_snapshot - snapshot;
delta_interval += delta;
}
first_watchdog->delta_interval = delta_interval;
59638: 2341 0010 movel %d1,%a1@(16)
}
ts->TOD_watchdogs.last_snapshot = snapshot;
5963c: 2540 0074 movel %d0,%a2@(116)
_ISR_Enable( level );
59640: 46c2 movew %d2,%sr
_Watchdog_Insert( &ts->TOD_watchdogs.Chain, &timer->Ticker );
59642: 4868 0010 pea %a0@(16)
59646: 486a 0068 pea %a2@(104)
5964a: 4eb9 0005 d844 jsr 5d844 <_Watchdog_Insert>
if ( !ts->active ) {
59650: 508f addql #8,%sp
59652: 102a 007c moveb %a2@(124),%d0
59656: 6694 bnes 595ec <_Timer_server_Schedule_operation_method+0x50>
_Timer_server_Reset_tod_system_watchdog( ts );
59658: 2f0a movel %a2,%sp@-
5965a: 4eba fc96 jsr %pc@(592f2 <_Timer_server_Reset_tod_system_watchdog>)
5965e: 588f addql #4,%sp
* 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 );
}
}
59660: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2
59666: 4e5e unlk %fp
if ( !ts->active ) {
_Timer_server_Reset_tod_system_watchdog( ts );
}
}
_Thread_Enable_dispatch();
59668: 4ef9 0005 c3f2 jmp 5c3f2 <_Thread_Enable_dispatch>
if ( timer->the_class == TIMER_INTERVAL_ON_TASK ) {
/*
* We have to advance the last known ticks value of the server and update
* the watchdog chain accordingly.
*/
_ISR_Disable( level );
5966e: 203c 0000 0700 movel #1792,%d0
59674: 40c3 movew %sr,%d3
59676: 8083 orl %d3,%d0
59678: 46c0 movew %d0,%sr
snapshot = _Watchdog_Ticks_since_boot;
5967a: 2039 0007 d3f4 movel 7d3f4 <_Watchdog_Ticks_since_boot>,%d0
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
59680: 220a movel %a2,%d1
59682: 0681 0000 0034 addil #52,%d1
last_snapshot = ts->Interval_watchdogs.last_snapshot;
59688: 282a 003c movel %a2@(60),%d4
*/
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
Chain_Control *the_chain
)
{
return (the_chain->first == _Chain_Tail(the_chain));
5968c: 226a 0030 moveal %a2@(48),%a1
if ( !_Chain_Is_empty( &ts->Interval_watchdogs.Chain ) ) {
59690: b289 cmpl %a1,%d1
59692: 6712 beqs 596a6 <_Timer_server_Schedule_operation_method+0x10a>
first_watchdog = _Watchdog_First( &ts->Interval_watchdogs.Chain );
/*
* We assume adequate unsigned arithmetic here.
*/
delta = snapshot - last_snapshot;
59694: 2200 movel %d0,%d1
59696: 9284 subl %d4,%d1
delta_interval = first_watchdog->delta_interval;
59698: 2429 0010 movel %a1@(16),%d2
if (delta_interval > delta) {
5969c: b481 cmpl %d1,%d2
5969e: 633a blss 596da <_Timer_server_Schedule_operation_method+0x13e>
delta_interval -= delta;
596a0: 9481 subl %d1,%d2
} else {
delta_interval = 0;
}
first_watchdog->delta_interval = delta_interval;
596a2: 2342 0010 movel %d2,%a1@(16)
}
ts->Interval_watchdogs.last_snapshot = snapshot;
596a6: 2540 003c movel %d0,%a2@(60)
_ISR_Enable( level );
596aa: 46c3 movew %d3,%sr
_Watchdog_Insert( &ts->Interval_watchdogs.Chain, &timer->Ticker );
596ac: 4868 0010 pea %a0@(16)
596b0: 486a 0030 pea %a2@(48)
596b4: 4eb9 0005 d844 jsr 5d844 <_Watchdog_Insert>
if ( !ts->active ) {
596ba: 508f addql #8,%sp
596bc: 102a 007c moveb %a2@(124),%d0
596c0: 6600 ff2a bnew 595ec <_Timer_server_Schedule_operation_method+0x50>
_Timer_server_Reset_interval_system_watchdog( ts );
596c4: 2f0a movel %a2,%sp@-
596c6: 4eba fbc0 jsr %pc@(59288 <_Timer_server_Reset_interval_system_watchdog>)
596ca: 588f addql #4,%sp
* 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 );
}
}
596cc: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2
596d2: 4e5e unlk %fp
if ( !ts->active ) {
_Timer_server_Reset_tod_system_watchdog( ts );
}
}
_Thread_Enable_dispatch();
596d4: 4ef9 0005 c3f2 jmp 5c3f2 <_Thread_Enable_dispatch>
delta_interval = first_watchdog->delta_interval;
if (delta_interval > delta) {
delta_interval -= delta;
} else {
delta_interval = 0;
596da: 4282 clrl %d2
}
first_watchdog->delta_interval = delta_interval;
596dc: 2342 0010 movel %d2,%a1@(16)
596e0: 60c4 bras 596a6 <_Timer_server_Schedule_operation_method+0x10a>
}
} else {
/*
* Someone put us in the past.
*/
delta = last_snapshot - snapshot;
596e2: d283 addl %d3,%d1
delta_interval += delta;
596e4: 9280 subl %d0,%d1
}
first_watchdog->delta_interval = delta_interval;
596e6: 2341 0010 movel %d1,%a1@(16)
596ea: 6000 ff50 braw 5963c <_Timer_server_Schedule_operation_method+0xa0>
*/
delta = snapshot - last_snapshot;
if (delta_interval > delta) {
delta_interval -= delta;
} else {
delta_interval = 0;
596ee: 4281 clrl %d1 <== NOT EXECUTED
* Someone put us in the past.
*/
delta = last_snapshot - snapshot;
delta_interval += delta;
}
first_watchdog->delta_interval = delta_interval;
596f0: 2341 0010 movel %d1,%a1@(16) <== NOT EXECUTED
596f4: 6000 ff46 braw 5963c <_Timer_server_Schedule_operation_method+0xa0><== NOT EXECUTED
00049628 <_Timespec_Add_to>:
uint32_t _Timespec_Add_to(
struct timespec *time,
const struct timespec *add
)
{
49628: 4e56 0000 linkw %fp,#0
4962c: 226e 0008 moveal %fp@(8),%a1
49630: 2f0a movel %a2,%sp@-
49632: 246e 000c moveal %fp@(12),%a2
uint32_t seconds = add->tv_sec;
/* Add the basics */
time->tv_sec += add->tv_sec;
time->tv_nsec += add->tv_nsec;
49636: 206a 0004 moveal %a2@(4),%a0
4963a: d1e9 0004 addal %a1@(4),%a0
/* Now adjust it so nanoseconds is in range */
while ( time->tv_nsec >= TOD_NANOSECONDS_PER_SECOND ) {
4963e: 2208 movel %a0,%d1
uint32_t _Timespec_Add_to(
struct timespec *time,
const struct timespec *add
)
{
uint32_t seconds = add->tv_sec;
49640: 2012 movel %a2@,%d0
/* Add the basics */
time->tv_sec += add->tv_sec;
49642: d191 addl %d0,%a1@
time->tv_nsec += add->tv_nsec;
49644: 2348 0004 movel %a0,%a1@(4)
/* Now adjust it so nanoseconds is in range */
while ( time->tv_nsec >= TOD_NANOSECONDS_PER_SECOND ) {
49648: b1fc 3b9a c9ff cmpal #999999999,%a0
4964e: 631a blss 4966a <_Timespec_Add_to+0x42>
49650: 2051 moveal %a1@,%a0
*
* This routines adds two timespecs. The second argument is added
* to the first.
*/
uint32_t _Timespec_Add_to(
49652: 5288 addql #1,%a0
time->tv_sec += add->tv_sec;
time->tv_nsec += add->tv_nsec;
/* Now adjust it so nanoseconds is in range */
while ( time->tv_nsec >= TOD_NANOSECONDS_PER_SECOND ) {
time->tv_nsec -= TOD_NANOSECONDS_PER_SECOND;
49654: 0681 c465 3600 addil #-1000000000,%d1
time->tv_sec++;
seconds++;
4965a: 5280 addql #1,%d0
/* Add the basics */
time->tv_sec += add->tv_sec;
time->tv_nsec += add->tv_nsec;
/* Now adjust it so nanoseconds is in range */
while ( time->tv_nsec >= TOD_NANOSECONDS_PER_SECOND ) {
4965c: 0c81 3b9a c9ff cmpil #999999999,%d1
49662: 62ee bhis 49652 <_Timespec_Add_to+0x2a> <== NEVER TAKEN
49664: 2341 0004 movel %d1,%a1@(4)
49668: 2288 movel %a0,%a1@
time->tv_sec++;
seconds++;
}
return seconds;
}
4966a: 245f moveal %sp@+,%a2
4966c: 4e5e unlk %fp <== NOT EXECUTED
0004b254 <_Timespec_Greater_than>:
bool _Timespec_Greater_than(
const struct timespec *lhs,
const struct timespec *rhs
)
{
4b254: 4e56 0000 linkw %fp,#0
4b258: 226e 0008 moveal %fp@(8),%a1
4b25c: 206e 000c moveal %fp@(12),%a0
if ( lhs->tv_sec > rhs->tv_sec )
4b260: 2211 movel %a1@,%d1
4b262: 2010 movel %a0@,%d0
4b264: b081 cmpl %d1,%d0
4b266: 6d18 blts 4b280 <_Timespec_Greater_than+0x2c>
return true;
if ( lhs->tv_sec < rhs->tv_sec )
4b268: 6e10 bgts 4b27a <_Timespec_Greater_than+0x26> <== NEVER TAKEN
#include <rtems/system.h>
#include <rtems/score/timespec.h>
#include <rtems/score/tod.h>
bool _Timespec_Greater_than(
4b26a: 2068 0004 moveal %a0@(4),%a0
4b26e: b1e9 0004 cmpal %a1@(4),%a0
4b272: 5dc0 slt %d0
/* ASSERT: lhs->tv_sec == rhs->tv_sec */
if ( lhs->tv_nsec > rhs->tv_nsec )
return true;
return false;
}
4b274: 4e5e unlk %fp
#include <rtems/system.h>
#include <rtems/score/timespec.h>
#include <rtems/score/tod.h>
bool _Timespec_Greater_than(
4b276: 4480 negl %d0
/* ASSERT: lhs->tv_sec == rhs->tv_sec */
if ( lhs->tv_nsec > rhs->tv_nsec )
return true;
return false;
}
4b278: 4e75 rts
4b27a: 4e5e unlk %fp <== NOT EXECUTED
{
if ( lhs->tv_sec > rhs->tv_sec )
return true;
if ( lhs->tv_sec < rhs->tv_sec )
return false;
4b27c: 4200 clrb %d0 <== NOT EXECUTED
/* ASSERT: lhs->tv_sec == rhs->tv_sec */
if ( lhs->tv_nsec > rhs->tv_nsec )
return true;
return false;
}
4b27e: 4e75 rts <== NOT EXECUTED
4b280: 4e5e unlk %fp
const struct timespec *lhs,
const struct timespec *rhs
)
{
if ( lhs->tv_sec > rhs->tv_sec )
return true;
4b282: 7001 moveq #1,%d0
/* ASSERT: lhs->tv_sec == rhs->tv_sec */
if ( lhs->tv_nsec > rhs->tv_nsec )
return true;
return false;
}
...
00049802 <_User_extensions_Fatal>:
void _User_extensions_Fatal (
Internal_errors_Source the_source,
bool is_internal,
Internal_errors_t the_error
)
{
49802: 4e56 fff0 linkw %fp,#-16
49806: 48d7 041c moveml %d2-%d4/%a2,%sp@
4980a: 242e 0008 movel %fp@(8),%d2
4980e: 262e 0010 movel %fp@(16),%d3
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.last ;
49812: 2479 0005 e598 moveal 5e598 <_User_extensions_List+0x8>,%a2
void _User_extensions_Fatal (
Internal_errors_Source the_source,
bool is_internal,
Internal_errors_t the_error
)
{
49818: 182e 000f moveb %fp@(15),%d4
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.last ;
4981c: b5fc 0005 e590 cmpal #386448,%a2
49822: 6726 beqs 4984a <_User_extensions_Fatal+0x48> <== NEVER TAKEN
the_node = the_node->previous ) {
the_extension = (User_extensions_Control *) the_node;
if ( the_extension->Callouts.fatal != NULL )
(*the_extension->Callouts.fatal)( the_source, is_internal, the_error );
49824: 0284 0000 00ff andil #255,%d4
!_Chain_Is_head( &_User_extensions_List, the_node ) ;
the_node = the_node->previous ) {
the_extension = (User_extensions_Control *) the_node;
if ( the_extension->Callouts.fatal != NULL )
4982a: 206a 0030 moveal %a2@(48),%a0
4982e: 4a88 tstl %a0
49830: 670c beqs 4983e <_User_extensions_Fatal+0x3c>
(*the_extension->Callouts.fatal)( the_source, is_internal, the_error );
49832: 2f03 movel %d3,%sp@-
49834: 2f04 movel %d4,%sp@-
49836: 2f02 movel %d2,%sp@-
49838: 4e90 jsr %a0@
4983a: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.last ;
!_Chain_Is_head( &_User_extensions_List, the_node ) ;
the_node = the_node->previous ) {
4983e: 246a 0004 moveal %a2@(4),%a2
)
{
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.last ;
49842: b5fc 0005 e590 cmpal #386448,%a2
49848: 66e0 bnes 4982a <_User_extensions_Fatal+0x28> <== ALWAYS TAKEN
the_extension = (User_extensions_Control *) the_node;
if ( the_extension->Callouts.fatal != NULL )
(*the_extension->Callouts.fatal)( the_source, is_internal, the_error );
}
}
4984a: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2 <== NOT EXECUTED
49850: 4e5e unlk %fp <== NOT EXECUTED
000496c0 <_User_extensions_Handler_initialization>:
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <string.h>
void _User_extensions_Handler_initialization(void)
{
496c0: 4e56 ffec linkw %fp,#-20
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
496c4: 203c 0005 e594 movel #386452,%d0
496ca: 23c0 0005 e590 movel %d0,5e590 <_User_extensions_List>
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
496d0: 203c 0005 e590 movel #386448,%d0
496d6: 23c0 0005 e598 movel %d0,5e598 <_User_extensions_List+0x8>
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
496dc: 203c 0005 e424 movel #386084,%d0
496e2: 23c0 0005 e420 movel %d0,5e420 <_User_extensions_Switches_list>
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
496e8: 203c 0005 e420 movel #386080,%d0
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
496ee: 42b9 0005 e594 clrl 5e594 <_User_extensions_List+0x4>
496f4: 48d7 0c1c moveml %d2-%d4/%a2-%a3,%sp@
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;
496f8: 2439 0005 cd2a movel 5cd2a <Configuration+0x36>,%d2
initial_extensions = Configuration.User_extension_table;
496fe: 2639 0005 cd2e movel 5cd2e <Configuration+0x3a>,%d3
49704: 42b9 0005 e424 clrl 5e424 <_User_extensions_Switches_list+0x4>
the_chain->last = _Chain_Head(the_chain);
4970a: 23c0 0005 e428 movel %d0,5e428 <_User_extensions_Switches_list+0x8>
_Chain_Initialize_empty( &_User_extensions_List );
_Chain_Initialize_empty( &_User_extensions_Switches_list );
if ( initial_extensions ) {
49710: 4a83 tstl %d3
49712: 6764 beqs 49778 <_User_extensions_Handler_initialization+0xb8><== NEVER TAKEN
extension = (User_extensions_Control *)
_Workspace_Allocate_or_fatal_error(
49714: 7834 moveq #52,%d4
49716: 4c02 4800 mulsl %d2,%d4
4971a: 2f04 movel %d4,%sp@-
4971c: 4eb9 0004 9c76 jsr 49c76 <_Workspace_Allocate_or_fatal_error>
49722: 2440 moveal %d0,%a2
number_of_extensions * sizeof( User_extensions_Control )
);
memset (
49724: 2f04 movel %d4,%sp@-
49726: 42a7 clrl %sp@-
49728: 2f00 movel %d0,%sp@-
4972a: 4eb9 0004 e388 jsr 4e388 <memset>
extension,
0,
number_of_extensions * sizeof( User_extensions_Control )
);
for ( i = 0 ; i < number_of_extensions ; i++ ) {
49730: 4fef 0010 lea %sp@(16),%sp
49734: 4a82 tstl %d2
49736: 6740 beqs 49778 <_User_extensions_Handler_initialization+0xb8><== NEVER TAKEN
49738: 4284 clrl %d4
4973a: 47f9 0004 c36c lea 4c36c <_User_extensions_Add_set>,%a3
RTEMS_INLINE_ROUTINE void _User_extensions_Add_set_with_table(
User_extensions_Control *extension,
const User_extensions_Table *extension_table
)
{
extension->Callouts = *extension_table;
49740: 2043 moveal %d3,%a0
49742: 5284 addql #1,%d4
49744: 0683 0000 0020 addil #32,%d3
4974a: 2558 0014 movel %a0@+,%a2@(20)
4974e: 2558 0018 movel %a0@+,%a2@(24)
49752: 2558 001c movel %a0@+,%a2@(28)
49756: 2558 0020 movel %a0@+,%a2@(32)
4975a: 2558 0024 movel %a0@+,%a2@(36)
4975e: 2558 0028 movel %a0@+,%a2@(40)
49762: 2558 002c movel %a0@+,%a2@(44)
49766: 2550 0030 movel %a0@,%a2@(48)
_User_extensions_Add_set( extension );
4976a: 2f0a movel %a2,%sp@-
_User_extensions_Add_set_with_table (extension, &initial_extensions[i]);
extension++;
4976c: 45ea 0034 lea %a2@(52),%a2
49770: 4e93 jsr %a3@
extension,
0,
number_of_extensions * sizeof( User_extensions_Control )
);
for ( i = 0 ; i < number_of_extensions ; i++ ) {
49772: 588f addql #4,%sp
49774: b882 cmpl %d2,%d4
49776: 65c8 bcss 49740 <_User_extensions_Handler_initialization+0x80>
_User_extensions_Add_set_with_table (extension, &initial_extensions[i]);
extension++;
}
}
}
49778: 4cee 0c1c ffec moveml %fp@(-20),%d2-%d4/%a2-%a3
4977e: 4e5e unlk %fp
...
00049784 <_User_extensions_Thread_begin>:
#include <rtems/score/userext.h>
void _User_extensions_Thread_begin (
Thread_Control *executing
)
{
49784: 4e56 0000 linkw %fp,#0
49788: 2f0a movel %a2,%sp@-
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.first ;
4978a: 2479 0005 e590 moveal 5e590 <_User_extensions_List>,%a2
#include <rtems/score/userext.h>
void _User_extensions_Thread_begin (
Thread_Control *executing
)
{
49790: 2f02 movel %d2,%sp@-
49792: 242e 0008 movel %fp@(8),%d2
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.first ;
49796: b5fc 0005 e594 cmpal #386452,%a2
4979c: 6718 beqs 497b6 <_User_extensions_Thread_begin+0x32><== NEVER TAKEN
!_Chain_Is_tail( &_User_extensions_List, the_node ) ;
the_node = the_node->next ) {
the_extension = (User_extensions_Control *) the_node;
if ( the_extension->Callouts.thread_begin != NULL )
4979e: 206a 0028 moveal %a2@(40),%a0
497a2: 4a88 tstl %a0
497a4: 6706 beqs 497ac <_User_extensions_Thread_begin+0x28>
(*the_extension->Callouts.thread_begin)( executing );
497a6: 2f02 movel %d2,%sp@-
497a8: 4e90 jsr %a0@
497aa: 588f addql #4,%sp
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.first ;
!_Chain_Is_tail( &_User_extensions_List, the_node ) ;
the_node = the_node->next ) {
497ac: 2452 moveal %a2@,%a2
)
{
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.first ;
497ae: b5fc 0005 e594 cmpal #386452,%a2
497b4: 66e8 bnes 4979e <_User_extensions_Thread_begin+0x1a>
the_extension = (User_extensions_Control *) the_node;
if ( the_extension->Callouts.thread_begin != NULL )
(*the_extension->Callouts.thread_begin)( executing );
}
}
497b6: 242e fff8 movel %fp@(-8),%d2
497ba: 246e fffc moveal %fp@(-4),%a2
497be: 4e5e unlk %fp <== NOT EXECUTED
00049854 <_User_extensions_Thread_create>:
#include <rtems/score/userext.h>
bool _User_extensions_Thread_create (
Thread_Control *the_thread
)
{
49854: 4e56 0000 linkw %fp,#0
49858: 2f0a movel %a2,%sp@-
Chain_Node *the_node;
User_extensions_Control *the_extension;
bool status;
for ( the_node = _User_extensions_List.first ;
4985a: 2479 0005 e590 moveal 5e590 <_User_extensions_List>,%a2
#include <rtems/score/userext.h>
bool _User_extensions_Thread_create (
Thread_Control *the_thread
)
{
49860: 2f02 movel %d2,%sp@-
49862: 242e 0008 movel %fp@(8),%d2
Chain_Node *the_node;
User_extensions_Control *the_extension;
bool status;
for ( the_node = _User_extensions_List.first ;
49866: b5fc 0005 e594 cmpal #386452,%a2
4986c: 6722 beqs 49890 <_User_extensions_Thread_create+0x3c><== NEVER TAKEN
!_Chain_Is_tail( &_User_extensions_List, the_node ) ;
the_node = the_node->next ) {
the_extension = (User_extensions_Control *) the_node;
if ( the_extension->Callouts.thread_create != NULL ) {
4986e: 206a 0014 moveal %a2@(20),%a0
49872: 4a88 tstl %a0
49874: 6710 beqs 49886 <_User_extensions_Thread_create+0x32>
status = (*the_extension->Callouts.thread_create)(
49876: 2f02 movel %d2,%sp@-
49878: 2f39 0005 e5e0 movel 5e5e0 <_Per_CPU_Information+0xc>,%sp@-
4987e: 4e90 jsr %a0@
_Thread_Executing,
the_thread
);
if ( !status )
49880: 508f addql #8,%sp
49882: 4a00 tstb %d0
49884: 6718 beqs 4989e <_User_extensions_Thread_create+0x4a>
User_extensions_Control *the_extension;
bool status;
for ( the_node = _User_extensions_List.first ;
!_Chain_Is_tail( &_User_extensions_List, the_node ) ;
the_node = the_node->next ) {
49886: 2452 moveal %a2@,%a2
{
Chain_Node *the_node;
User_extensions_Control *the_extension;
bool status;
for ( the_node = _User_extensions_List.first ;
49888: b5fc 0005 e594 cmpal #386452,%a2
4988e: 66de bnes 4986e <_User_extensions_Thread_create+0x1a>
return false;
}
}
return true;
}
49890: 242e fff8 movel %fp@(-8),%d2
49894: 246e fffc moveal %fp@(-4),%a2
49898: 4e5e unlk %fp
if ( !status )
return false;
}
}
return true;
4989a: 7001 moveq #1,%d0
}
4989c: 4e75 rts
4989e: 242e fff8 movel %fp@(-8),%d2
498a2: 246e fffc moveal %fp@(-4),%a2
498a6: 4e5e unlk %fp
status = (*the_extension->Callouts.thread_create)(
_Thread_Executing,
the_thread
);
if ( !status )
return false;
498a8: 4200 clrb %d0 <== NOT EXECUTED
}
}
return true;
}
000498ac <_User_extensions_Thread_delete>:
#include <rtems/score/userext.h>
void _User_extensions_Thread_delete (
Thread_Control *the_thread
)
{
498ac: 4e56 0000 linkw %fp,#0
498b0: 2f0a movel %a2,%sp@-
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.last ;
498b2: 2479 0005 e598 moveal 5e598 <_User_extensions_List+0x8>,%a2
#include <rtems/score/userext.h>
void _User_extensions_Thread_delete (
Thread_Control *the_thread
)
{
498b8: 2f02 movel %d2,%sp@-
498ba: 242e 0008 movel %fp@(8),%d2
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.last ;
498be: b5fc 0005 e590 cmpal #386448,%a2
498c4: 6720 beqs 498e6 <_User_extensions_Thread_delete+0x3a><== NEVER TAKEN
!_Chain_Is_head( &_User_extensions_List, the_node ) ;
the_node = the_node->previous ) {
the_extension = (User_extensions_Control *) the_node;
if ( the_extension->Callouts.thread_delete != NULL )
498c6: 206a 0020 moveal %a2@(32),%a0
498ca: 4a88 tstl %a0
498cc: 670c beqs 498da <_User_extensions_Thread_delete+0x2e>
(*the_extension->Callouts.thread_delete)(
498ce: 2f02 movel %d2,%sp@-
498d0: 2f39 0005 e5e0 movel 5e5e0 <_Per_CPU_Information+0xc>,%sp@-
498d6: 4e90 jsr %a0@
498d8: 508f addql #8,%sp
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.last ;
!_Chain_Is_head( &_User_extensions_List, the_node ) ;
the_node = the_node->previous ) {
498da: 246a 0004 moveal %a2@(4),%a2
)
{
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.last ;
498de: b5fc 0005 e590 cmpal #386448,%a2
498e4: 66e0 bnes 498c6 <_User_extensions_Thread_delete+0x1a>
(*the_extension->Callouts.thread_delete)(
_Thread_Executing,
the_thread
);
}
}
498e6: 242e fff8 movel %fp@(-8),%d2
498ea: 246e fffc moveal %fp@(-4),%a2
498ee: 4e5e unlk %fp
...
000497c2 <_User_extensions_Thread_exitted>:
void _User_extensions_Thread_exitted (
Thread_Control *executing
)
{
497c2: 4e56 0000 linkw %fp,#0
497c6: 2f0a movel %a2,%sp@-
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.last ;
497c8: 2479 0005 e598 moveal 5e598 <_User_extensions_List+0x8>,%a2
}
void _User_extensions_Thread_exitted (
Thread_Control *executing
)
{
497ce: 2f02 movel %d2,%sp@-
497d0: 242e 0008 movel %fp@(8),%d2
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.last ;
497d4: b5fc 0005 e590 cmpal #386448,%a2
497da: 671a beqs 497f6 <_User_extensions_Thread_exitted+0x34><== NEVER TAKEN
!_Chain_Is_head( &_User_extensions_List, the_node ) ;
the_node = the_node->previous ) {
the_extension = (User_extensions_Control *) the_node;
if ( the_extension->Callouts.thread_exitted != NULL )
497dc: 206a 002c moveal %a2@(44),%a0
497e0: 4a88 tstl %a0
497e2: 6706 beqs 497ea <_User_extensions_Thread_exitted+0x28>
(*the_extension->Callouts.thread_exitted)( executing );
497e4: 2f02 movel %d2,%sp@-
497e6: 4e90 jsr %a0@
497e8: 588f addql #4,%sp <== NOT EXECUTED
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.last ;
!_Chain_Is_head( &_User_extensions_List, the_node ) ;
the_node = the_node->previous ) {
497ea: 246a 0004 moveal %a2@(4),%a2
)
{
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.last ;
497ee: b5fc 0005 e590 cmpal #386448,%a2
497f4: 66e6 bnes 497dc <_User_extensions_Thread_exitted+0x1a>
the_extension = (User_extensions_Control *) the_node;
if ( the_extension->Callouts.thread_exitted != NULL )
(*the_extension->Callouts.thread_exitted)( executing );
}
}
497f6: 242e fff8 movel %fp@(-8),%d2
497fa: 246e fffc moveal %fp@(-4),%a2
497fe: 4e5e unlk %fp <== NOT EXECUTED
0004a598 <_User_extensions_Thread_restart>:
#include <rtems/score/userext.h>
void _User_extensions_Thread_restart (
Thread_Control *the_thread
)
{
4a598: 4e56 0000 linkw %fp,#0
4a59c: 2f0a movel %a2,%sp@-
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.first ;
4a59e: 2479 0005 f528 moveal 5f528 <_User_extensions_List>,%a2
#include <rtems/score/userext.h>
void _User_extensions_Thread_restart (
Thread_Control *the_thread
)
{
4a5a4: 2f02 movel %d2,%sp@-
4a5a6: 242e 0008 movel %fp@(8),%d2
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.first ;
4a5aa: b5fc 0005 f52c cmpal #390444,%a2
4a5b0: 671e beqs 4a5d0 <_User_extensions_Thread_restart+0x38><== NEVER TAKEN
!_Chain_Is_tail( &_User_extensions_List, the_node ) ;
the_node = the_node->next ) {
the_extension = (User_extensions_Control *) the_node;
if ( the_extension->Callouts.thread_restart != NULL )
4a5b2: 206a 001c moveal %a2@(28),%a0
4a5b6: 4a88 tstl %a0
4a5b8: 670c beqs 4a5c6 <_User_extensions_Thread_restart+0x2e>
(*the_extension->Callouts.thread_restart)(
4a5ba: 2f02 movel %d2,%sp@-
4a5bc: 2f39 0005 f578 movel 5f578 <_Per_CPU_Information+0xc>,%sp@-
4a5c2: 4e90 jsr %a0@
4a5c4: 508f addql #8,%sp
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.first ;
!_Chain_Is_tail( &_User_extensions_List, the_node ) ;
the_node = the_node->next ) {
4a5c6: 2452 moveal %a2@,%a2
)
{
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.first ;
4a5c8: b5fc 0005 f52c cmpal #390444,%a2
4a5ce: 66e2 bnes 4a5b2 <_User_extensions_Thread_restart+0x1a>
(*the_extension->Callouts.thread_restart)(
_Thread_Executing,
the_thread
);
}
}
4a5d0: 242e fff8 movel %fp@(-8),%d2
4a5d4: 246e fffc moveal %fp@(-4),%a2
4a5d8: 4e5e unlk %fp <== NOT EXECUTED
000498f4 <_User_extensions_Thread_start>:
#include <rtems/score/userext.h>
void _User_extensions_Thread_start (
Thread_Control *the_thread
)
{
498f4: 4e56 0000 linkw %fp,#0
498f8: 2f0a movel %a2,%sp@-
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.first ;
498fa: 2479 0005 e590 moveal 5e590 <_User_extensions_List>,%a2
#include <rtems/score/userext.h>
void _User_extensions_Thread_start (
Thread_Control *the_thread
)
{
49900: 2f02 movel %d2,%sp@-
49902: 242e 0008 movel %fp@(8),%d2
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.first ;
49906: b5fc 0005 e594 cmpal #386452,%a2
4990c: 671e beqs 4992c <_User_extensions_Thread_start+0x38><== NEVER TAKEN
!_Chain_Is_tail( &_User_extensions_List, the_node ) ;
the_node = the_node->next ) {
the_extension = (User_extensions_Control *) the_node;
if ( the_extension->Callouts.thread_start != NULL )
4990e: 206a 0018 moveal %a2@(24),%a0
49912: 4a88 tstl %a0
49914: 670c beqs 49922 <_User_extensions_Thread_start+0x2e>
(*the_extension->Callouts.thread_start)(
49916: 2f02 movel %d2,%sp@-
49918: 2f39 0005 e5e0 movel 5e5e0 <_Per_CPU_Information+0xc>,%sp@-
4991e: 4e90 jsr %a0@
49920: 508f addql #8,%sp
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.first ;
!_Chain_Is_tail( &_User_extensions_List, the_node ) ;
the_node = the_node->next ) {
49922: 2452 moveal %a2@,%a2
)
{
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _User_extensions_List.first ;
49924: b5fc 0005 e594 cmpal #386452,%a2
4992a: 66e2 bnes 4990e <_User_extensions_Thread_start+0x1a>
(*the_extension->Callouts.thread_start)(
_Thread_Executing,
the_thread
);
}
}
4992c: 242e fff8 movel %fp@(-8),%d2
49930: 246e fffc moveal %fp@(-4),%a2
49934: 4e5e unlk %fp <== NOT EXECUTED
00049938 <_User_extensions_Thread_switch>:
void _User_extensions_Thread_switch (
Thread_Control *executing,
Thread_Control *heir
)
{
49938: 4e56 fff4 linkw %fp,#-12
4993c: 48d7 040c moveml %d2-%d3/%a2,%sp@
49940: 262e 0008 movel %fp@(8),%d3
49944: 242e 000c movel %fp@(12),%d2
Chain_Node *the_node;
User_extensions_Switch_control *the_extension_switch;
for ( the_node = _User_extensions_Switches_list.first ;
49948: 2479 0005 e420 moveal 5e420 <_User_extensions_Switches_list>,%a2
4994e: b5fc 0005 e424 cmpal #386084,%a2
49954: 6716 beqs 4996c <_User_extensions_Thread_switch+0x34><== NEVER TAKEN
!_Chain_Is_tail( &_User_extensions_Switches_list, the_node ) ;
the_node = the_node->next ) {
the_extension_switch = (User_extensions_Switch_control *) the_node;
(*the_extension_switch->thread_switch)( executing, heir );
49956: 2f02 movel %d2,%sp@-
49958: 2f03 movel %d3,%sp@-
4995a: 206a 0008 moveal %a2@(8),%a0
4995e: 4e90 jsr %a0@
Chain_Node *the_node;
User_extensions_Switch_control *the_extension_switch;
for ( the_node = _User_extensions_Switches_list.first ;
!_Chain_Is_tail( &_User_extensions_Switches_list, the_node ) ;
the_node = the_node->next ) {
49960: 2452 moveal %a2@,%a2
)
{
Chain_Node *the_node;
User_extensions_Switch_control *the_extension_switch;
for ( the_node = _User_extensions_Switches_list.first ;
49962: 508f addql #8,%sp
49964: b5fc 0005 e424 cmpal #386084,%a2
4996a: 66ea bnes 49956 <_User_extensions_Thread_switch+0x1e>
the_extension_switch = (User_extensions_Switch_control *) the_node;
(*the_extension_switch->thread_switch)( executing, heir );
}
}
4996c: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
49972: 4e5e unlk %fp
...
0004b604 <_Watchdog_Adjust>:
void _Watchdog_Adjust(
Chain_Control *header,
Watchdog_Adjust_directions direction,
Watchdog_Interval units
)
{
4b604: 4e56 ffe8 linkw %fp,#-24
4b608: 226e 000c moveal %fp@(12),%a1
4b60c: 48d7 1c1c moveml %d2-%d4/%a2-%a4,%sp@
ISR_Level level;
_ISR_Disable( level );
4b610: 283c 0000 0700 movel #1792,%d4
4b616: 2004 movel %d4,%d0
void _Watchdog_Adjust(
Chain_Control *header,
Watchdog_Adjust_directions direction,
Watchdog_Interval units
)
{
4b618: 266e 0008 moveal %fp@(8),%a3
4b61c: 242e 0010 movel %fp@(16),%d2
ISR_Level level;
_ISR_Disable( level );
4b620: 40c1 movew %sr,%d1
4b622: 8081 orl %d1,%d0
4b624: 46c0 movew %d0,%sr
*/
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
Chain_Control *the_chain
)
{
return (the_chain->first == _Chain_Tail(the_chain));
4b626: 244b moveal %a3,%a2
4b628: 205a moveal %a2@+,%a0
* hence the compiler must not assume *header to remain
* unmodified across that call.
*
* Till Straumann, 7/2003
*/
if ( !_Chain_Is_empty( header ) ) {
4b62a: b5c8 cmpal %a0,%a2
4b62c: 6748 beqs 4b676 <_Watchdog_Adjust+0x72>
switch ( direction ) {
4b62e: 4a89 tstl %a1
4b630: 6650 bnes 4b682 <_Watchdog_Adjust+0x7e>
case WATCHDOG_BACKWARD:
_Watchdog_First( header )->delta_interval += units;
break;
case WATCHDOG_FORWARD:
while ( units ) {
4b632: 4a82 tstl %d2
4b634: 6740 beqs 4b676 <_Watchdog_Adjust+0x72> <== NEVER TAKEN
if ( units < _Watchdog_First( header )->delta_interval ) {
4b636: 2628 0010 movel %a0@(16),%d3
4b63a: 49f9 0004 b880 lea 4b880 <_Watchdog_Tickle>,%a4
4b640: b682 cmpl %d2,%d3
4b642: 622c bhis 4b670 <_Watchdog_Adjust+0x6c> <== NEVER TAKEN
_Watchdog_First( header )->delta_interval -= units;
break;
} else {
units -= _Watchdog_First( header )->delta_interval;
_Watchdog_First( header )->delta_interval = 1;
4b644: 7001 moveq #1,%d0
4b646: 2140 0010 movel %d0,%a0@(16)
_ISR_Enable( level );
4b64a: 46c1 movew %d1,%sr
_Watchdog_Tickle( header );
4b64c: 2f0b movel %a3,%sp@-
4b64e: 4e94 jsr %a4@
_ISR_Disable( level );
4b650: 2004 movel %d4,%d0
4b652: 40c1 movew %sr,%d1
4b654: 8081 orl %d1,%d0
4b656: 46c0 movew %d0,%sr
if ( _Chain_Is_empty( header ) )
4b658: 588f addql #4,%sp
while ( units ) {
if ( units < _Watchdog_First( header )->delta_interval ) {
_Watchdog_First( header )->delta_interval -= units;
break;
} else {
units -= _Watchdog_First( header )->delta_interval;
4b65a: 9483 subl %d3,%d2
4b65c: 2013 movel %a3@,%d0
RTEMS_INLINE_ROUTINE Watchdog_Control *_Watchdog_First(
Chain_Control *header
)
{
return ( (Watchdog_Control *) header->first );
4b65e: 2040 moveal %d0,%a0
_Watchdog_Tickle( header );
_ISR_Disable( level );
if ( _Chain_Is_empty( header ) )
4b660: b08a cmpl %a2,%d0
4b662: 6712 beqs 4b676 <_Watchdog_Adjust+0x72>
switch ( direction ) {
case WATCHDOG_BACKWARD:
_Watchdog_First( header )->delta_interval += units;
break;
case WATCHDOG_FORWARD:
while ( units ) {
4b664: 4a82 tstl %d2
4b666: 670e beqs 4b676 <_Watchdog_Adjust+0x72> <== NEVER TAKEN
if ( units < _Watchdog_First( header )->delta_interval ) {
4b668: 2628 0010 movel %a0@(16),%d3
4b66c: b483 cmpl %d3,%d2
4b66e: 64d4 bccs 4b644 <_Watchdog_Adjust+0x40>
_Watchdog_First( header )->delta_interval -= units;
4b670: 9682 subl %d2,%d3
4b672: 2143 0010 movel %d3,%a0@(16)
}
break;
}
}
_ISR_Enable( level );
4b676: 46c1 movew %d1,%sr
}
4b678: 4cee 1c1c ffe8 moveml %fp@(-24),%d2-%d4/%a2-%a4
4b67e: 4e5e unlk %fp
4b680: 4e75 rts
* unmodified across that call.
*
* Till Straumann, 7/2003
*/
if ( !_Chain_Is_empty( header ) ) {
switch ( direction ) {
4b682: 7001 moveq #1,%d0
4b684: b089 cmpl %a1,%d0
4b686: 66ee bnes 4b676 <_Watchdog_Adjust+0x72> <== NEVER TAKEN
case WATCHDOG_BACKWARD:
_Watchdog_First( header )->delta_interval += units;
4b688: d5a8 0010 addl %d2,%a0@(16)
}
break;
}
}
_ISR_Enable( level );
4b68c: 46c1 movew %d1,%sr
}
4b68e: 4cee 1c1c ffe8 moveml %fp@(-24),%d2-%d4/%a2-%a4
4b694: 4e5e unlk %fp <== NOT EXECUTED
00049978 <_Watchdog_Insert>:
void _Watchdog_Insert(
Chain_Control *header,
Watchdog_Control *the_watchdog
)
{
49978: 4e56 ffec linkw %fp,#-20
4997c: 226e 000c moveal %fp@(12),%a1
49980: 48d7 043c moveml %d2-%d5/%a2,%sp@
49984: 246e 0008 moveal %fp@(8),%a2
Watchdog_Interval delta_interval;
insert_isr_nest_level = _ISR_Nest_level;
_ISR_Disable( level );
49988: 2a3c 0000 0700 movel #1792,%d5
4998e: 2005 movel %d5,%d0
Watchdog_Control *after;
uint32_t insert_isr_nest_level;
Watchdog_Interval delta_interval;
insert_isr_nest_level = _ISR_Nest_level;
49990: 2839 0005 e5dc movel 5e5dc <_Per_CPU_Information+0x8>,%d4
_ISR_Disable( level );
49996: 40c3 movew %sr,%d3
49998: 8083 orl %d3,%d0
4999a: 46c0 movew %d0,%sr
/*
* Check to see if the watchdog has just been inserted by a
* higher priority interrupt. If so, abandon this insert.
*/
if ( the_watchdog->state != WATCHDOG_INACTIVE ) {
4999c: 4aa9 0008 tstl %a1@(8)
499a0: 6600 00c6 bnew 49a68 <_Watchdog_Insert+0xf0>
_ISR_Enable( level );
return;
}
the_watchdog->state = WATCHDOG_BEING_INSERTED;
_Watchdog_Sync_count++;
499a4: 2039 0005 e544 movel 5e544 <_Watchdog_Sync_count>,%d0
if ( the_watchdog->state != WATCHDOG_INACTIVE ) {
_ISR_Enable( level );
return;
}
the_watchdog->state = WATCHDOG_BEING_INSERTED;
499aa: 7201 moveq #1,%d1
_Watchdog_Sync_count++;
499ac: 5280 addql #1,%d0
if ( the_watchdog->state != WATCHDOG_INACTIVE ) {
_ISR_Enable( level );
return;
}
the_watchdog->state = WATCHDOG_BEING_INSERTED;
499ae: 2341 0008 movel %d1,%a1@(8)
_Watchdog_Sync_count++;
499b2: 23c0 0005 e544 movel %d0,5e544 <_Watchdog_Sync_count>
restart:
delta_interval = the_watchdog->initial;
499b8: 2029 000c movel %a1@(12),%d0
* cache *header!!
*
* Till Straumann, 7/2003 (gcc-3.2.2 -O4 on powerpc)
*
*/
for ( after = (Watchdog_Control *) ((volatile Chain_Control *)header)->first ;
499bc: 2052 moveal %a2@,%a0
;
after = _Watchdog_Next( after ) ) {
if ( delta_interval == 0 || !_Watchdog_Next( after ) )
499be: 6764 beqs 49a24 <_Watchdog_Insert+0xac>
499c0: 4a90 tstl %a0@
499c2: 6760 beqs 49a24 <_Watchdog_Insert+0xac>
break;
if ( delta_interval < after->delta_interval ) {
499c4: 2228 0010 movel %a0@(16),%d1
499c8: b280 cmpl %d0,%d1
499ca: 6252 bhis 49a1e <_Watchdog_Insert+0xa6>
* used around this flash point allowed interrupts to execute
* which violated the design assumptions. The critical section
* mechanism used here WAS redesigned to address this.
*/
_ISR_Flash( level );
499cc: 2405 movel %d5,%d2
499ce: 46c3 movew %d3,%sr
499d0: 8483 orl %d3,%d2
499d2: 46c2 movew %d2,%sr
if ( the_watchdog->state != WATCHDOG_BEING_INSERTED ) {
499d4: 7401 moveq #1,%d2
499d6: b4a9 0008 cmpl %a1@(8),%d2
499da: 666e bnes 49a4a <_Watchdog_Insert+0xd2>
goto exit_insert;
}
if ( _Watchdog_Sync_level > insert_isr_nest_level ) {
499dc: 2439 0005 e4c2 movel 5e4c2 <_Watchdog_Sync_level>,%d2
499e2: b484 cmpl %d4,%d2
499e4: 6230 bhis 49a16 <_Watchdog_Insert+0x9e>
if ( delta_interval < after->delta_interval ) {
after->delta_interval -= delta_interval;
break;
}
delta_interval -= after->delta_interval;
499e6: 9081 subl %d1,%d0
exit_insert:
_Watchdog_Sync_level = insert_isr_nest_level;
_Watchdog_Sync_count--;
_ISR_Enable( level );
}
499e8: 2050 moveal %a0@,%a0
*/
for ( after = (Watchdog_Control *) ((volatile Chain_Control *)header)->first ;
;
after = _Watchdog_Next( after ) ) {
if ( delta_interval == 0 || !_Watchdog_Next( after ) )
499ea: 4a80 tstl %d0
499ec: 6736 beqs 49a24 <_Watchdog_Insert+0xac>
499ee: 4a90 tstl %a0@
499f0: 6732 beqs 49a24 <_Watchdog_Insert+0xac>
break;
if ( delta_interval < after->delta_interval ) {
499f2: 2228 0010 movel %a0@(16),%d1
499f6: b081 cmpl %d1,%d0
499f8: 6524 bcss 49a1e <_Watchdog_Insert+0xa6>
* used around this flash point allowed interrupts to execute
* which violated the design assumptions. The critical section
* mechanism used here WAS redesigned to address this.
*/
_ISR_Flash( level );
499fa: 2405 movel %d5,%d2
499fc: 46c3 movew %d3,%sr
499fe: 8483 orl %d3,%d2
49a00: 46c2 movew %d2,%sr
if ( delta_interval < after->delta_interval ) {
after->delta_interval -= delta_interval;
break;
}
delta_interval -= after->delta_interval;
49a02: 9081 subl %d1,%d0
* mechanism used here WAS redesigned to address this.
*/
_ISR_Flash( level );
if ( the_watchdog->state != WATCHDOG_BEING_INSERTED ) {
49a04: 7201 moveq #1,%d1
49a06: b2a9 0008 cmpl %a1@(8),%d1
49a0a: 663e bnes 49a4a <_Watchdog_Insert+0xd2> <== NEVER TAKEN
goto exit_insert;
}
if ( _Watchdog_Sync_level > insert_isr_nest_level ) {
49a0c: 2239 0005 e4c2 movel 5e4c2 <_Watchdog_Sync_level>,%d1
49a12: b284 cmpl %d4,%d1
49a14: 63d2 blss 499e8 <_Watchdog_Insert+0x70> <== ALWAYS TAKEN
_Watchdog_Sync_level = insert_isr_nest_level;
49a16: 23c4 0005 e4c2 movel %d4,5e4c2 <_Watchdog_Sync_level>
goto restart;
49a1c: 609a bras 499b8 <_Watchdog_Insert+0x40>
if ( delta_interval == 0 || !_Watchdog_Next( after ) )
break;
if ( delta_interval < after->delta_interval ) {
after->delta_interval -= delta_interval;
49a1e: 9280 subl %d0,%d1
49a20: 2141 0010 movel %d1,%a0@(16)
_Watchdog_Activate( the_watchdog );
the_watchdog->delta_interval = delta_interval;
_Chain_Insert_unprotected( after->Node.previous, &the_watchdog->Node );
49a24: 2068 0004 moveal %a0@(4),%a0
RTEMS_INLINE_ROUTINE void _Watchdog_Activate(
Watchdog_Control *the_watchdog
)
{
the_watchdog->state = WATCHDOG_ACTIVE;
49a28: 7402 moveq #2,%d2
)
{
Chain_Node *before_node;
the_node->previous = after_node;
before_node = after_node->next;
49a2a: 2450 moveal %a0@,%a2
}
}
_Watchdog_Activate( the_watchdog );
the_watchdog->delta_interval = delta_interval;
49a2c: 2340 0010 movel %d0,%a1@(16)
_Chain_Insert_unprotected( after->Node.previous, &the_watchdog->Node );
the_watchdog->start_time = _Watchdog_Ticks_since_boot;
49a30: 2039 0005 e548 movel 5e548 <_Watchdog_Ticks_since_boot>,%d0
49a36: 2342 0008 movel %d2,%a1@(8)
Chain_Node *the_node
)
{
Chain_Node *before_node;
the_node->previous = after_node;
49a3a: 2348 0004 movel %a0,%a1@(4)
before_node = after_node->next;
after_node->next = the_node;
49a3e: 2089 movel %a1,%a0@
the_node->next = before_node;
before_node->previous = the_node;
49a40: 2549 0004 movel %a1,%a2@(4)
Chain_Node *before_node;
the_node->previous = after_node;
before_node = after_node->next;
after_node->next = the_node;
the_node->next = before_node;
49a44: 228a movel %a2,%a1@
49a46: 2340 0014 movel %d0,%a1@(20)
exit_insert:
_Watchdog_Sync_level = insert_isr_nest_level;
49a4a: 23c4 0005 e4c2 movel %d4,5e4c2 <_Watchdog_Sync_level>
_Watchdog_Sync_count--;
49a50: 2039 0005 e544 movel 5e544 <_Watchdog_Sync_count>,%d0
49a56: 5380 subql #1,%d0
49a58: 23c0 0005 e544 movel %d0,5e544 <_Watchdog_Sync_count>
_ISR_Enable( level );
49a5e: 46c3 movew %d3,%sr
}
49a60: 4cd7 043c moveml %sp@,%d2-%d5/%a2
49a64: 4e5e unlk %fp
49a66: 4e75 rts
* Check to see if the watchdog has just been inserted by a
* higher priority interrupt. If so, abandon this insert.
*/
if ( the_watchdog->state != WATCHDOG_INACTIVE ) {
_ISR_Enable( level );
49a68: 46c3 movew %d3,%sr
exit_insert:
_Watchdog_Sync_level = insert_isr_nest_level;
_Watchdog_Sync_count--;
_ISR_Enable( level );
}
49a6a: 4cd7 043c moveml %sp@,%d2-%d5/%a2
49a6e: 4e5e unlk %fp
...
00049ac0 <_Watchdog_Remove>:
{
ISR_Level level;
Watchdog_States previous_state;
Watchdog_Control *next_watchdog;
_ISR_Disable( level );
49ac0: 203c 0000 0700 movel #1792,%d0
*/
Watchdog_States _Watchdog_Remove(
Watchdog_Control *the_watchdog
)
{
49ac6: 4e56 0000 linkw %fp,#0
49aca: 206e 0008 moveal %fp@(8),%a0
49ace: 2f0a movel %a2,%sp@-
49ad0: 2f02 movel %d2,%sp@-
ISR_Level level;
Watchdog_States previous_state;
Watchdog_Control *next_watchdog;
_ISR_Disable( level );
49ad2: 40c1 movew %sr,%d1
49ad4: 8081 orl %d1,%d0
49ad6: 46c0 movew %d0,%sr
previous_state = the_watchdog->state;
49ad8: 2028 0008 movel %a0@(8),%d0
switch ( previous_state ) {
49adc: 7401 moveq #1,%d2
49ade: b480 cmpl %d0,%d2
49ae0: 6764 beqs 49b46 <_Watchdog_Remove+0x86> <== NEVER TAKEN
49ae2: 6314 blss 49af8 <_Watchdog_Remove+0x38>
_Watchdog_Sync_level = _ISR_Nest_level;
_Chain_Extract_unprotected( &the_watchdog->Node );
break;
}
the_watchdog->stop_time = _Watchdog_Ticks_since_boot;
49ae4: 2279 0005 e548 moveal 5e548 <_Watchdog_Ticks_since_boot>,%a1
49aea: 2149 0018 movel %a1,%a0@(24)
_ISR_Enable( level );
49aee: 46c1 movew %d1,%sr
return( previous_state );
}
49af0: 241f movel %sp@+,%d2
49af2: 245f moveal %sp@+,%a2
49af4: 4e5e unlk %fp
49af6: 4e75 rts
Watchdog_States previous_state;
Watchdog_Control *next_watchdog;
_ISR_Disable( level );
previous_state = the_watchdog->state;
switch ( previous_state ) {
49af8: 143c 0003 moveb #3,%d2
49afc: b480 cmpl %d0,%d2
49afe: 65e4 bcss 49ae4 <_Watchdog_Remove+0x24> <== NEVER TAKEN
}
the_watchdog->stop_time = _Watchdog_Ticks_since_boot;
_ISR_Enable( level );
return( previous_state );
}
49b00: 2250 moveal %a0@,%a1
break;
case WATCHDOG_ACTIVE:
case WATCHDOG_REMOVE_IT:
the_watchdog->state = WATCHDOG_INACTIVE;
49b02: 42a8 0008 clrl %a0@(8)
next_watchdog = _Watchdog_Next( the_watchdog );
if ( _Watchdog_Next(next_watchdog) )
49b06: 4a91 tstl %a1@
49b08: 6708 beqs 49b12 <_Watchdog_Remove+0x52>
next_watchdog->delta_interval += the_watchdog->delta_interval;
49b0a: 2428 0010 movel %a0@(16),%d2
49b0e: d5a9 0010 addl %d2,%a1@(16)
if ( _Watchdog_Sync_count )
49b12: 2479 0005 e544 moveal 5e544 <_Watchdog_Sync_count>,%a2
49b18: 4a8a tstl %a2
49b1a: 670c beqs 49b28 <_Watchdog_Remove+0x68>
_Watchdog_Sync_level = _ISR_Nest_level;
49b1c: 45f9 0005 e5dc lea 5e5dc <_Per_CPU_Information+0x8>,%a2
49b22: 23d2 0005 e4c2 movel %a2@,5e4c2 <_Watchdog_Sync_level>
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
previous = the_node->previous;
49b28: 2468 0004 moveal %a0@(4),%a2
next->previous = previous;
49b2c: 234a 0004 movel %a2,%a1@(4)
previous->next = next;
49b30: 2489 movel %a1,%a2@
_Chain_Extract_unprotected( &the_watchdog->Node );
break;
}
the_watchdog->stop_time = _Watchdog_Ticks_since_boot;
49b32: 2279 0005 e548 moveal 5e548 <_Watchdog_Ticks_since_boot>,%a1
49b38: 2149 0018 movel %a1,%a0@(24)
_ISR_Enable( level );
49b3c: 46c1 movew %d1,%sr
return( previous_state );
}
49b3e: 241f movel %sp@+,%d2
49b40: 245f moveal %sp@+,%a2
49b42: 4e5e unlk %fp
49b44: 4e75 rts
_Watchdog_Sync_level = _ISR_Nest_level;
_Chain_Extract_unprotected( &the_watchdog->Node );
break;
}
the_watchdog->stop_time = _Watchdog_Ticks_since_boot;
49b46: 2279 0005 e548 moveal 5e548 <_Watchdog_Ticks_since_boot>,%a1
/*
* 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;
49b4c: 42a8 0008 clrl %a0@(8)
_Watchdog_Sync_level = _ISR_Nest_level;
_Chain_Extract_unprotected( &the_watchdog->Node );
break;
}
the_watchdog->stop_time = _Watchdog_Ticks_since_boot;
49b50: 2149 0018 movel %a1,%a0@(24)
_ISR_Enable( level );
49b54: 46c1 movew %d1,%sr
return( previous_state );
}
49b56: 241f movel %sp@+,%d2
49b58: 245f moveal %sp@+,%a2
49b5a: 4e5e unlk %fp
...
0004afbc <_Watchdog_Report_chain>:
)
{
ISR_Level level;
Chain_Node *node;
_ISR_Disable( level );
4afbc: 203c 0000 0700 movel #1792,%d0
void _Watchdog_Report_chain(
const char *name,
Chain_Control *header
)
{
4afc2: 4e56 ffe8 linkw %fp,#-24
4afc6: 48d7 3c0c moveml %d2-%d3/%a2-%a5,%sp@
4afca: 242e 0008 movel %fp@(8),%d2
4afce: 266e 000c moveal %fp@(12),%a3
ISR_Level level;
Chain_Node *node;
_ISR_Disable( level );
4afd2: 40c3 movew %sr,%d3
4afd4: 8083 orl %d3,%d0
4afd6: 46c0 movew %d0,%sr
printk( "Watchdog Chain: %s %p\n", name, header );
4afd8: 2f0b movel %a3,%sp@-
4afda: 4bf9 0004 4928 lea 44928 <printk>,%a5
4afe0: 2f02 movel %d2,%sp@-
4afe2: 4879 0005 e05c pea 5e05c <_Status_Object_name_errors_to_status+0x14>
4afe8: 4e95 jsr %a5@
*/
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
Chain_Control *the_chain
)
{
return (the_chain->first == _Chain_Tail(the_chain));
4afea: 245b moveal %a3@+,%a2
if ( !_Chain_Is_empty( header ) ) {
4afec: 4fef 000c lea %sp@(12),%sp
4aff0: b7ca cmpal %a2,%a3
4aff2: 672c beqs 4b020 <_Watchdog_Report_chain+0x64> <== NEVER TAKEN
4aff4: 49f9 0004 b038 lea 4b038 <_Watchdog_Report>,%a4
node != _Chain_Tail(header) ;
node = node->next )
{
Watchdog_Control *watch = (Watchdog_Control *) node;
_Watchdog_Report( NULL, watch );
4affa: 2f0a movel %a2,%sp@-
4affc: 42a7 clrl %sp@-
4affe: 4e94 jsr %a4@
_ISR_Disable( level );
printk( "Watchdog Chain: %s %p\n", name, header );
if ( !_Chain_Is_empty( header ) ) {
for ( node = header->first ;
node != _Chain_Tail(header) ;
node = node->next )
4b000: 2452 moveal %a2@,%a2
Chain_Node *node;
_ISR_Disable( level );
printk( "Watchdog Chain: %s %p\n", name, header );
if ( !_Chain_Is_empty( header ) ) {
for ( node = header->first ;
4b002: 508f addql #8,%sp
4b004: b7ca cmpal %a2,%a3
4b006: 66f2 bnes 4affa <_Watchdog_Report_chain+0x3e> <== NEVER TAKEN
{
Watchdog_Control *watch = (Watchdog_Control *) node;
_Watchdog_Report( NULL, watch );
}
printk( "== end of %s \n", name );
4b008: 2f02 movel %d2,%sp@-
4b00a: 4879 0005 e073 pea 5e073 <_Status_Object_name_errors_to_status+0x2b>
4b010: 4e95 jsr %a5@
4b012: 508f addql #8,%sp
} else {
printk( "Chain is empty\n" );
}
_ISR_Enable( level );
4b014: 46c3 movew %d3,%sr
}
4b016: 4cee 3c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a5
4b01c: 4e5e unlk %fp
4b01e: 4e75 rts
_Watchdog_Report( NULL, watch );
}
printk( "== end of %s \n", name );
} else {
printk( "Chain is empty\n" );
4b020: 4879 0005 e082 pea 5e082 <_Status_Object_name_errors_to_status+0x3a>
4b026: 4e95 jsr %a5@
4b028: 588f addql #4,%sp
}
_ISR_Enable( level );
4b02a: 46c3 movew %d3,%sr
}
4b02c: 4cee 3c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a5
4b032: 4e5e unlk %fp
...
00049b60 <_Watchdog_Tickle>:
* See the comment in watchdoginsert.c and watchdogadjust.c
* about why it's safe not to declare header a pointer to
* volatile data - till, 2003/7
*/
_ISR_Disable( level );
49b60: 203c 0000 0700 movel #1792,%d0
*/
void _Watchdog_Tickle(
Chain_Control *header
)
{
49b66: 4e56 ffe8 linkw %fp,#-24
49b6a: 48d7 3c0c moveml %d2-%d3/%a2-%a5,%sp@
49b6e: 286e 0008 moveal %fp@(8),%a4
* See the comment in watchdoginsert.c and watchdogadjust.c
* about why it's safe not to declare header a pointer to
* volatile data - till, 2003/7
*/
_ISR_Disable( level );
49b72: 40c2 movew %sr,%d2
49b74: 8082 orl %d2,%d0
49b76: 46c0 movew %d0,%sr
*/
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
Chain_Control *the_chain
)
{
return (the_chain->first == _Chain_Tail(the_chain));
49b78: 264c moveal %a4,%a3
49b7a: 245b moveal %a3@+,%a2
if ( _Chain_Is_empty( header ) )
49b7c: b7ca cmpal %a2,%a3
49b7e: 673e beqs 49bbe <_Watchdog_Tickle+0x5e>
* to be inserted has already had its delta_interval adjusted to 0, and
* so is added to the head of the chain with a delta_interval of 0.
*
* Steven Johnson - 12/2005 (gcc-3.2.3 -O3 on powerpc)
*/
if (the_watchdog->delta_interval != 0) {
49b80: 202a 0010 movel %a2@(16),%d0
49b84: 4bf9 0004 9ac0 lea 49ac0 <_Watchdog_Remove>,%a5
49b8a: 6708 beqs 49b94 <_Watchdog_Tickle+0x34>
the_watchdog->delta_interval--;
49b8c: 5380 subql #1,%d0
49b8e: 2540 0010 movel %d0,%a2@(16)
if ( the_watchdog->delta_interval != 0 )
49b92: 662a bnes 49bbe <_Watchdog_Tickle+0x5e>
case WATCHDOG_REMOVE_IT:
break;
}
_ISR_Disable( level );
49b94: 263c 0000 0700 movel #1792,%d3
if ( the_watchdog->delta_interval != 0 )
goto leave;
}
do {
watchdog_state = _Watchdog_Remove( the_watchdog );
49b9a: 2f0a movel %a2,%sp@-
49b9c: 4e95 jsr %a5@
_ISR_Enable( level );
49b9e: 46c2 movew %d2,%sr
switch( watchdog_state ) {
49ba0: 7202 moveq #2,%d1
49ba2: 588f addql #4,%sp
49ba4: b280 cmpl %d0,%d1
49ba6: 6722 beqs 49bca <_Watchdog_Tickle+0x6a> <== ALWAYS TAKEN
case WATCHDOG_REMOVE_IT:
break;
}
_ISR_Disable( level );
49ba8: 2003 movel %d3,%d0
49baa: 40c2 movew %sr,%d2
49bac: 8082 orl %d2,%d0
49bae: 46c0 movew %d0,%sr
} while ( !_Chain_Is_empty( header ) &&
(the_watchdog->delta_interval == 0) );
leave:
_ISR_Enable(level);
}
49bb0: 2014 movel %a4@,%d0
RTEMS_INLINE_ROUTINE Watchdog_Control *_Watchdog_First(
Chain_Control *header
)
{
return ( (Watchdog_Control *) header->first );
49bb2: 2440 moveal %d0,%a2
_ISR_Disable( level );
the_watchdog = _Watchdog_First( header );
} while ( !_Chain_Is_empty( header ) &&
(the_watchdog->delta_interval == 0) );
49bb4: b7c0 cmpal %d0,%a3
49bb6: 6706 beqs 49bbe <_Watchdog_Tickle+0x5e>
}
_ISR_Disable( level );
the_watchdog = _Watchdog_First( header );
} while ( !_Chain_Is_empty( header ) &&
49bb8: 4aaa 0010 tstl %a2@(16)
49bbc: 67dc beqs 49b9a <_Watchdog_Tickle+0x3a>
(the_watchdog->delta_interval == 0) );
leave:
_ISR_Enable(level);
49bbe: 46c2 movew %d2,%sr
}
49bc0: 4cee 3c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a5
49bc6: 4e5e unlk %fp
49bc8: 4e75 rts
_ISR_Enable( level );
switch( watchdog_state ) {
case WATCHDOG_ACTIVE:
(*the_watchdog->routine)(
49bca: 2f2a 0024 movel %a2@(36),%sp@-
49bce: 2f2a 0020 movel %a2@(32),%sp@-
49bd2: 206a 001c moveal %a2@(28),%a0
49bd6: 4e90 jsr %a0@
the_watchdog->id,
the_watchdog->user_data
);
break;
49bd8: 508f addql #8,%sp
49bda: 60cc bras 49ba8 <_Watchdog_Tickle+0x48>
00049c76 <_Workspace_Allocate_or_fatal_error>:
* _Workspace_Allocate_or_fatal_error
*/
void *_Workspace_Allocate_or_fatal_error(
size_t size
)
{
49c76: 4e56 0000 linkw %fp,#0
49c7a: 42a7 clrl %sp@-
49c7c: 42a7 clrl %sp@-
49c7e: 2f2e 0008 movel %fp@(8),%sp@-
49c82: 4879 0005 e43a pea 5e43a <_Workspace_Area>
49c88: 4eb9 0004 bcac jsr 4bcac <_Heap_Allocate_aligned_with_boundary>
__builtin_return_address( 1 ),
memory
);
#endif
if ( memory == NULL )
49c8e: 4fef 0010 lea %sp@(16),%sp
49c92: 4a80 tstl %d0
49c94: 6704 beqs 49c9a <_Workspace_Allocate_or_fatal_error+0x24>
true,
INTERNAL_ERROR_WORKSPACE_ALLOCATION
);
return memory;
}
49c96: 4e5e unlk %fp
49c98: 4e75 rts
memory
);
#endif
if ( memory == NULL )
_Internal_error_Occurred(
49c9a: 4878 0003 pea 3 <DIVIDE>
49c9e: 4878 0001 pea 1 <ADD>
49ca2: 42a7 clrl %sp@-
49ca4: 4eb9 0004 79c8 jsr 479c8 <_Internal_error_Occurred>
...
0005acdc <__kill>:
#endif
int __kill( pid_t pid, int sig )
{
return 0;
}
5acdc: 4280 clrl %d0 <== NOT EXECUTED
return 0;
}
#endif
int __kill( pid_t pid, int sig )
{
5acde: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return 0;
}
5ace2: 4e5e unlk %fp <== NOT EXECUTED
...
0005abb8 <_calloc_r>:
void *_calloc_r(
struct _reent *ignored __attribute__((unused)),
size_t elements,
size_t size
)
{
5abb8: 4e56 0000 linkw %fp,#0
5abbc: 202e 000c movel %fp@(12),%d0
return calloc( elements, size );
5abc0: 2d6e 0010 000c movel %fp@(16),%fp@(12)
5abc6: 2d40 0008 movel %d0,%fp@(8)
}
5abca: 4e5e unlk %fp
struct _reent *ignored __attribute__((unused)),
size_t elements,
size_t size
)
{
return calloc( elements, size );
5abcc: 4ef9 0004 292c jmp 4292c <calloc>
...
000436ae <_exit>:
extern void FINI_SYMBOL( void );
#endif
void EXIT_SYMBOL(int status)
{
436ae: 4e56 0000 linkw %fp,#0
/*
* If the toolset uses init/fini sections, then we need to
* run the global destructors now.
*/
#if defined(__USE_INIT_FINI__)
FINI_SYMBOL();
436b2: 4eb9 0005 b3ec jsr 5b3ec <_fini>
* We need to do the exit processing on the global reentrancy structure.
* This has already been done on the per task reentrancy structure
* associated with this task.
*/
libc_wrapup();
436b8: 4eb9 0004 3648 jsr 43648 <libc_wrapup>
rtems_shutdown_executive(status);
436be: 2f2e 0008 movel %fp@(8),%sp@-
436c2: 4eb9 0004 6d10 jsr 46d10 <rtems_shutdown_executive>
436c8: 588f addql #4,%sp <== NOT EXECUTED
436ca: 60fe bras 436ca <_exit+0x1c> <== NOT EXECUTED
0005abd4 <_free_r>:
void _free_r(
struct _reent *ignored __attribute__((unused)),
void *ptr
)
{
5abd4: 4e56 0000 linkw %fp,#0
free( ptr );
5abd8: 2d6e 000c 0008 movel %fp@(12),%fp@(8)
}
5abde: 4e5e unlk %fp
void _free_r(
struct _reent *ignored __attribute__((unused)),
void *ptr
)
{
free( ptr );
5abe0: 4ef9 0004 2db8 jmp 42db8 <free>
...
0005ac84 <_fstat_r>:
int _fstat_r(
struct _reent *ptr __attribute__((unused)),
int fd,
struct stat *buf
)
{
5ac84: 4e56 0000 linkw %fp,#0
5ac88: 202e 000c movel %fp@(12),%d0
return fstat( fd, buf );
5ac8c: 2d6e 0010 000c movel %fp@(16),%fp@(12)
5ac92: 2d40 0008 movel %d0,%fp@(8)
}
5ac96: 4e5e unlk %fp
struct _reent *ptr __attribute__((unused)),
int fd,
struct stat *buf
)
{
return fstat( fd, buf );
5ac98: 4ef9 0005 abe8 jmp 5abe8 <fstat>
...
00042ec6 <_gettimeofday>:
int _gettimeofday(
struct timeval *tp,
struct timezone *tzp
)
{
42ec6: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return gettimeofday( tp, tzp );
}
42eca: 4e5e unlk %fp <== NOT EXECUTED
int _gettimeofday(
struct timeval *tp,
struct timezone *tzp
)
{
return gettimeofday( tp, tzp );
42ecc: 4ef9 0004 2e48 jmp 42e48 <gettimeofday> <== NOT EXECUTED
...
0005acb4 <_isatty_r>:
int _isatty_r(
struct _reent *ptr __attribute__((unused)),
int fd
)
{
5acb4: 4e56 0000 linkw %fp,#0
return isatty( fd );
5acb8: 2d6e 000c 0008 movel %fp@(12),%fp@(8)
}
5acbe: 4e5e unlk %fp
int _isatty_r(
struct _reent *ptr __attribute__((unused)),
int fd
)
{
return isatty( fd );
5acc0: 4ef9 0005 b344 jmp 5b344 <isatty>
...
0005ae44 <_lseek_r>:
struct _reent *ptr __attribute__((unused)),
int fd,
off_t offset,
int whence
)
{
5ae44: 4e56 0000 linkw %fp,#0
5ae48: 206e 000c moveal %fp@(12),%a0
5ae4c: 202e 0010 movel %fp@(16),%d0
5ae50: 222e 0014 movel %fp@(20),%d1
return lseek( fd, offset, whence );
5ae54: 2d6e 0018 0014 movel %fp@(24),%fp@(20)
5ae5a: 2d40 000c movel %d0,%fp@(12)
5ae5e: 2d41 0010 movel %d1,%fp@(16)
5ae62: 2d48 0008 movel %a0,%fp@(8)
}
5ae66: 4e5e unlk %fp
int fd,
off_t offset,
int whence
)
{
return lseek( fd, offset, whence );
5ae68: 4ef9 0005 ace8 jmp 5ace8 <lseek>
...
000458ac <_lstat_r>:
int _STAT_R_NAME(
struct _reent *ptr __attribute__((unused)),
const char *path,
struct stat *buf
)
{
458ac: 4e56 0000 linkw %fp,#0
458b0: 202e 000c movel %fp@(12),%d0
return _STAT_NAME( path, buf );
458b4: 2d6e 0010 000c movel %fp@(16),%fp@(12)
458ba: 2d40 0008 movel %d0,%fp@(8)
}
458be: 4e5e unlk %fp
struct _reent *ptr __attribute__((unused)),
const char *path,
struct stat *buf
)
{
return _STAT_NAME( path, buf );
458c0: 4ef9 0004 5814 jmp 45814 <lstat>
...
0005ae70 <_malloc_r>:
void *_malloc_r(
struct _reent *ignored __attribute__((unused)),
size_t size
)
{
5ae70: 4e56 0000 linkw %fp,#0
return malloc( size );
5ae74: 2d6e 000c 0008 movel %fp@(12),%fp@(8)
}
5ae7a: 4e5e unlk %fp
void *_malloc_r(
struct _reent *ignored __attribute__((unused)),
size_t size
)
{
return malloc( size );
5ae7c: 4ef9 0004 30e8 jmp 430e8 <malloc>
...
0005af5c <_realloc_r>:
void *_realloc_r(
struct _reent *ignored __attribute__((unused)),
void *ptr,
size_t size
)
{
5af5c: 4e56 0000 linkw %fp,#0
5af60: 202e 000c movel %fp@(12),%d0
return realloc( ptr, size );
5af64: 2d6e 0010 000c movel %fp@(16),%fp@(12)
5af6a: 2d40 0008 movel %d0,%fp@(8)
}
5af6e: 4e5e unlk %fp
struct _reent *ignored __attribute__((unused)),
void *ptr,
size_t size
)
{
return realloc( ptr, size );
5af70: 4ef9 0005 af9c jmp 5af9c <realloc>
...
000466ec <_rename_r>:
int _rename_r(
struct _reent *ptr __attribute__((unused)),
const char *old,
const char *new
)
{
466ec: 4e56 ffa4 linkw %fp,#-92 <== NOT EXECUTED
466f0: 48d7 0c3c moveml %d2-%d5/%a2-%a3,%sp@ <== NOT EXECUTED
466f4: 262e 000c movel %fp@(12),%d3 <== NOT EXECUTED
466f8: 282e 0010 movel %fp@(16),%d4 <== NOT EXECUTED
/*
* Get the parent node of the old path to be renamed. Find the parent path.
*/
old_parent_pathlen = rtems_filesystem_dirname ( old );
466fc: 2f03 movel %d3,%sp@- <== NOT EXECUTED
466fe: 4eb9 0004 5122 jsr 45122 <rtems_filesystem_dirname> <== NOT EXECUTED
if ( old_parent_pathlen == 0 )
46704: 588f addql #4,%sp <== NOT EXECUTED
46706: 4a80 tstl %d0 <== NOT EXECUTED
46708: 6600 017c bnew 46886 <_rename_r+0x19a> <== NOT EXECUTED
rtems_filesystem_get_start_loc( old, &i, &old_parent_loc );
4670c: 45ee ffd0 lea %fp@(-48),%a2 <== NOT EXECUTED
46710: 4282 clrl %d2 <== NOT EXECUTED
46712: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46714: 486e fffc pea %fp@(-4) <== NOT EXECUTED
rtems_filesystem_location_info_t old_parent_loc;
rtems_filesystem_location_info_t new_parent_loc;
int i;
int result;
const char *name;
bool free_old_parentloc = false;
46718: 4205 clrb %d5 <== NOT EXECUTED
*/
old_parent_pathlen = rtems_filesystem_dirname ( old );
if ( old_parent_pathlen == 0 )
rtems_filesystem_get_start_loc( old, &i, &old_parent_loc );
4671a: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4671c: 4eb9 0004 6b08 jsr 46b08 <rtems_filesystem_get_start_loc> <== NOT EXECUTED
46722: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
/*
* Start from the parent to find the node that should be under it.
*/
old_loc = old_parent_loc;
46726: 2d52 ffe4 movel %a2@,%fp@(-28) <== NOT EXECUTED
name = old + old_parent_pathlen;
4672a: d483 addl %d3,%d2 <== NOT EXECUTED
name += rtems_filesystem_prefix_separators( name, strlen( name ) );
4672c: 47f9 0005 3bc8 lea 53bc8 <strlen>,%a3 <== NOT EXECUTED
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
46732: 260e movel %fp,%d3 <== NOT EXECUTED
46734: 0683 ffff ffe4 addil #-28,%d3 <== NOT EXECUTED
/*
* Start from the parent to find the node that should be under it.
*/
old_loc = old_parent_loc;
4673a: 2d6e ffd4 ffe8 movel %fp@(-44),%fp@(-24) <== NOT EXECUTED
46740: 2d6e ffd8 ffec movel %fp@(-40),%fp@(-20) <== NOT EXECUTED
46746: 2d6e ffdc fff0 movel %fp@(-36),%fp@(-16) <== NOT EXECUTED
4674c: 2d6e ffe0 fff4 movel %fp@(-32),%fp@(-12) <== NOT EXECUTED
name = old + old_parent_pathlen;
name += rtems_filesystem_prefix_separators( name, strlen( name ) );
46752: 2f02 movel %d2,%sp@- <== NOT EXECUTED
/*
* Start from the parent to find the node that should be under it.
*/
old_loc = old_parent_loc;
name = old + old_parent_pathlen;
46754: 2d42 fff8 movel %d2,%fp@(-8) <== NOT EXECUTED
name += rtems_filesystem_prefix_separators( name, strlen( name ) );
46758: 4e93 jsr %a3@ <== NOT EXECUTED
4675a: 2e80 movel %d0,%sp@ <== NOT EXECUTED
4675c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4675e: 4eb9 0004 5164 jsr 45164 <rtems_filesystem_prefix_separators><== NOT EXECUTED
46764: d480 addl %d0,%d2 <== NOT EXECUTED
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
46766: 2f02 movel %d2,%sp@- <== NOT EXECUTED
* Start from the parent to find the node that should be under it.
*/
old_loc = old_parent_loc;
name = old + old_parent_pathlen;
name += rtems_filesystem_prefix_separators( name, strlen( name ) );
46768: 2d42 fff8 movel %d2,%fp@(-8) <== NOT EXECUTED
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
4676c: 4e93 jsr %a3@ <== NOT EXECUTED
4676e: 4297 clrl %sp@ <== NOT EXECUTED
46770: 2f03 movel %d3,%sp@- <== NOT EXECUTED
46772: 42a7 clrl %sp@- <== NOT EXECUTED
46774: 2f00 movel %d0,%sp@- <== NOT EXECUTED
46776: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46778: 4eb9 0004 4fe4 jsr 44fe4 <rtems_filesystem_evaluate_relative_path><== NOT EXECUTED
0, &old_loc, false );
if ( result != 0 ) {
4677e: 4fef 001c lea %sp@(28),%sp <== NOT EXECUTED
46782: 4a80 tstl %d0 <== NOT EXECUTED
46784: 6600 00d6 bnew 4685c <_rename_r+0x170> <== NOT EXECUTED
/*
* Get the parent of the new node we are renaming to.
*/
rtems_filesystem_get_start_loc( new, &i, &new_parent_loc );
46788: 240e movel %fp,%d2 <== NOT EXECUTED
4678a: 0682 ffff ffbc addil #-68,%d2 <== NOT EXECUTED
46790: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46792: 486e fffc pea %fp@(-4) <== NOT EXECUTED
46796: 2f04 movel %d4,%sp@- <== NOT EXECUTED
46798: 4eb9 0004 6b08 jsr 46b08 <rtems_filesystem_get_start_loc> <== NOT EXECUTED
result = (*new_parent_loc.ops->evalformake_h)( &new[i], &new_parent_loc, &name );
4679e: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
467a2: d8ae fffc addl %fp@(-4),%d4 <== NOT EXECUTED
467a6: 2f02 movel %d2,%sp@- <== NOT EXECUTED
467a8: 206e ffc8 moveal %fp@(-56),%a0 <== NOT EXECUTED
467ac: 2f04 movel %d4,%sp@- <== NOT EXECUTED
467ae: 2068 0004 moveal %a0@(4),%a0 <== NOT EXECUTED
467b2: 4e90 jsr %a0@ <== NOT EXECUTED
if ( result != 0 ) {
467b4: 4fef 0018 lea %sp@(24),%sp <== NOT EXECUTED
467b8: 4a80 tstl %d0 <== NOT EXECUTED
467ba: 6600 00f0 bnew 468ac <_rename_r+0x1c0> <== NOT EXECUTED
/*
* Check to see if the caller is trying to rename across file system
* boundaries.
*/
if ( old_parent_loc.mt_entry != new_parent_loc.mt_entry ) {
467be: 202e ffcc movel %fp@(-52),%d0 <== NOT EXECUTED
467c2: b0ae ffe0 cmpl %fp@(-32),%d0 <== NOT EXECUTED
467c6: 6648 bnes 46810 <_rename_r+0x124> <== NOT EXECUTED
rtems_filesystem_freenode( &old_parent_loc );
rtems_filesystem_freenode( &old_loc );
rtems_set_errno_and_return_minus_one( EXDEV );
}
result = (*new_parent_loc.ops->rename_h)( &old_parent_loc, &old_loc, &new_parent_loc, name );
467c8: 2f2e fff8 movel %fp@(-8),%sp@- <== NOT EXECUTED
rtems_filesystem_freenode( &new_parent_loc );
467cc: 47f9 0004 51b8 lea 451b8 <rtems_filesystem_freenode>,%a3 <== NOT EXECUTED
rtems_filesystem_freenode( &old_parent_loc );
rtems_filesystem_freenode( &old_loc );
rtems_set_errno_and_return_minus_one( EXDEV );
}
result = (*new_parent_loc.ops->rename_h)( &old_parent_loc, &old_loc, &new_parent_loc, name );
467d2: 206e ffc8 moveal %fp@(-56),%a0 <== NOT EXECUTED
467d6: 2f02 movel %d2,%sp@- <== NOT EXECUTED
467d8: 2f03 movel %d3,%sp@- <== NOT EXECUTED
467da: 2f0a movel %a2,%sp@- <== NOT EXECUTED
467dc: 2068 0040 moveal %a0@(64),%a0 <== NOT EXECUTED
467e0: 4e90 jsr %a0@ <== NOT EXECUTED
467e2: 2800 movel %d0,%d4 <== NOT EXECUTED
rtems_filesystem_freenode( &new_parent_loc );
467e4: 2f02 movel %d2,%sp@- <== NOT EXECUTED
467e6: 4e93 jsr %a3@ <== NOT EXECUTED
if ( free_old_parentloc )
467e8: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
467ec: 4a05 tstb %d5 <== NOT EXECUTED
467ee: 6612 bnes 46802 <_rename_r+0x116> <== NOT EXECUTED
rtems_filesystem_freenode( &old_parent_loc );
rtems_filesystem_freenode( &old_loc );
467f0: 2f03 movel %d3,%sp@- <== NOT EXECUTED
467f2: 4e93 jsr %a3@ <== NOT EXECUTED
return result;
467f4: 588f addql #4,%sp <== NOT EXECUTED
}
467f6: 2004 movel %d4,%d0 <== NOT EXECUTED
467f8: 4cee 0c3c ffa4 moveml %fp@(-92),%d2-%d5/%a2-%a3 <== NOT EXECUTED
467fe: 4e5e unlk %fp <== NOT EXECUTED
46800: 4e75 rts <== NOT EXECUTED
result = (*new_parent_loc.ops->rename_h)( &old_parent_loc, &old_loc, &new_parent_loc, name );
rtems_filesystem_freenode( &new_parent_loc );
if ( free_old_parentloc )
rtems_filesystem_freenode( &old_parent_loc );
46802: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46804: 4e93 jsr %a3@ <== NOT EXECUTED
46806: 588f addql #4,%sp <== NOT EXECUTED
rtems_filesystem_freenode( &old_loc );
46808: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4680a: 4e93 jsr %a3@ <== NOT EXECUTED
return result;
4680c: 588f addql #4,%sp <== NOT EXECUTED
4680e: 60e6 bras 467f6 <_rename_r+0x10a> <== NOT EXECUTED
* Check to see if the caller is trying to rename across file system
* boundaries.
*/
if ( old_parent_loc.mt_entry != new_parent_loc.mt_entry ) {
rtems_filesystem_freenode( &new_parent_loc );
46810: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46812: 47f9 0004 51b8 lea 451b8 <rtems_filesystem_freenode>,%a3 <== NOT EXECUTED
46818: 4e93 jsr %a3@ <== NOT EXECUTED
if ( free_old_parentloc )
4681a: 588f addql #4,%sp <== NOT EXECUTED
4681c: 4a05 tstb %d5 <== NOT EXECUTED
4681e: 6620 bnes 46840 <_rename_r+0x154> <== NOT EXECUTED
rtems_filesystem_freenode( &old_parent_loc );
rtems_filesystem_freenode( &old_loc );
46820: 2f03 movel %d3,%sp@- <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EXDEV );
46822: 78ff moveq #-1,%d4 <== NOT EXECUTED
if ( old_parent_loc.mt_entry != new_parent_loc.mt_entry ) {
rtems_filesystem_freenode( &new_parent_loc );
if ( free_old_parentloc )
rtems_filesystem_freenode( &old_parent_loc );
rtems_filesystem_freenode( &old_loc );
46824: 4e93 jsr %a3@ <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EXDEV );
46826: 4eb9 0005 0b54 jsr 50b54 <__errno> <== NOT EXECUTED
4682c: 588f addql #4,%sp <== NOT EXECUTED
4682e: 2040 moveal %d0,%a0 <== NOT EXECUTED
46830: 7012 moveq #18,%d0 <== NOT EXECUTED
46832: 2080 movel %d0,%a0@ <== NOT EXECUTED
if ( free_old_parentloc )
rtems_filesystem_freenode( &old_parent_loc );
rtems_filesystem_freenode( &old_loc );
return result;
}
46834: 2004 movel %d4,%d0 <== NOT EXECUTED
46836: 4cee 0c3c ffa4 moveml %fp@(-92),%d2-%d5/%a2-%a3 <== NOT EXECUTED
4683c: 4e5e unlk %fp <== NOT EXECUTED
4683e: 4e75 rts <== NOT EXECUTED
*/
if ( old_parent_loc.mt_entry != new_parent_loc.mt_entry ) {
rtems_filesystem_freenode( &new_parent_loc );
if ( free_old_parentloc )
rtems_filesystem_freenode( &old_parent_loc );
46840: 2f0a movel %a2,%sp@- <== NOT EXECUTED
rtems_filesystem_freenode( &old_loc );
rtems_set_errno_and_return_minus_one( EXDEV );
46842: 78ff moveq #-1,%d4 <== NOT EXECUTED
*/
if ( old_parent_loc.mt_entry != new_parent_loc.mt_entry ) {
rtems_filesystem_freenode( &new_parent_loc );
if ( free_old_parentloc )
rtems_filesystem_freenode( &old_parent_loc );
46844: 4e93 jsr %a3@ <== NOT EXECUTED
46846: 588f addql #4,%sp <== NOT EXECUTED
rtems_filesystem_freenode( &old_loc );
46848: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4684a: 4e93 jsr %a3@ <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EXDEV );
4684c: 4eb9 0005 0b54 jsr 50b54 <__errno> <== NOT EXECUTED
46852: 588f addql #4,%sp <== NOT EXECUTED
46854: 2040 moveal %d0,%a0 <== NOT EXECUTED
46856: 7012 moveq #18,%d0 <== NOT EXECUTED
46858: 2080 movel %d0,%a0@ <== NOT EXECUTED
4685a: 60d8 bras 46834 <_rename_r+0x148> <== NOT EXECUTED
name += rtems_filesystem_prefix_separators( name, strlen( name ) );
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
0, &old_loc, false );
if ( result != 0 ) {
if ( free_old_parentloc )
4685c: 4a05 tstb %d5 <== NOT EXECUTED
4685e: 660e bnes 4686e <_rename_r+0x182> <== NOT EXECUTED
rtems_filesystem_freenode( &old_parent_loc );
return -1;
46860: 78ff moveq #-1,%d4 <== NOT EXECUTED
if ( free_old_parentloc )
rtems_filesystem_freenode( &old_parent_loc );
rtems_filesystem_freenode( &old_loc );
return result;
}
46862: 2004 movel %d4,%d0 <== NOT EXECUTED
46864: 4cee 0c3c ffa4 moveml %fp@(-92),%d2-%d5/%a2-%a3 <== NOT EXECUTED
4686a: 4e5e unlk %fp <== NOT EXECUTED
4686c: 4e75 rts <== NOT EXECUTED
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
0, &old_loc, false );
if ( result != 0 ) {
if ( free_old_parentloc )
rtems_filesystem_freenode( &old_parent_loc );
4686e: 2f0a movel %a2,%sp@- <== NOT EXECUTED
return -1;
46870: 78ff moveq #-1,%d4 <== NOT EXECUTED
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
0, &old_loc, false );
if ( result != 0 ) {
if ( free_old_parentloc )
rtems_filesystem_freenode( &old_parent_loc );
46872: 4eb9 0004 51b8 jsr 451b8 <rtems_filesystem_freenode> <== NOT EXECUTED
46878: 588f addql #4,%sp <== NOT EXECUTED
if ( free_old_parentloc )
rtems_filesystem_freenode( &old_parent_loc );
rtems_filesystem_freenode( &old_loc );
return result;
}
4687a: 2004 movel %d4,%d0 <== NOT EXECUTED
4687c: 4cee 0c3c ffa4 moveml %fp@(-92),%d2-%d5/%a2-%a3 <== NOT EXECUTED
46882: 4e5e unlk %fp <== NOT EXECUTED
46884: 4e75 rts <== NOT EXECUTED
old_parent_pathlen = rtems_filesystem_dirname ( old );
if ( old_parent_pathlen == 0 )
rtems_filesystem_get_start_loc( old, &i, &old_parent_loc );
else {
result = rtems_filesystem_evaluate_path( old, old_parent_pathlen,
46886: 42a7 clrl %sp@- <== NOT EXECUTED
46888: 45ee ffd0 lea %fp@(-48),%a2 <== NOT EXECUTED
4688c: 2400 movel %d0,%d2 <== NOT EXECUTED
4688e: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46890: 4878 0002 pea 2 <DOUBLE_FLOAT> <== NOT EXECUTED
46894: 2f00 movel %d0,%sp@- <== NOT EXECUTED
46896: 2f03 movel %d3,%sp@- <== NOT EXECUTED
46898: 4eb9 0004 5094 jsr 45094 <rtems_filesystem_evaluate_path> <== NOT EXECUTED
RTEMS_LIBIO_PERMS_WRITE,
&old_parent_loc,
false );
if ( result != 0 )
4689e: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
468a2: 4a80 tstl %d0 <== NOT EXECUTED
468a4: 66ba bnes 46860 <_rename_r+0x174> <== NOT EXECUTED
return -1;
free_old_parentloc = true;
468a6: 7a01 moveq #1,%d5 <== NOT EXECUTED
468a8: 6000 fe7c braw 46726 <_rename_r+0x3a> <== NOT EXECUTED
rtems_filesystem_get_start_loc( new, &i, &new_parent_loc );
result = (*new_parent_loc.ops->evalformake_h)( &new[i], &new_parent_loc, &name );
if ( result != 0 ) {
rtems_filesystem_freenode( &new_parent_loc );
468ac: 2f02 movel %d2,%sp@- <== NOT EXECUTED
468ae: 47f9 0004 51b8 lea 451b8 <rtems_filesystem_freenode>,%a3 <== NOT EXECUTED
468b4: 4e93 jsr %a3@ <== NOT EXECUTED
if ( free_old_parentloc )
468b6: 588f addql #4,%sp <== NOT EXECUTED
468b8: 4a05 tstb %d5 <== NOT EXECUTED
468ba: 6614 bnes 468d0 <_rename_r+0x1e4> <== NOT EXECUTED
rtems_filesystem_freenode( &old_parent_loc );
rtems_filesystem_freenode( &old_loc );
468bc: 2f03 movel %d3,%sp@- <== NOT EXECUTED
return -1;
468be: 78ff moveq #-1,%d4 <== NOT EXECUTED
result = (*new_parent_loc.ops->evalformake_h)( &new[i], &new_parent_loc, &name );
if ( result != 0 ) {
rtems_filesystem_freenode( &new_parent_loc );
if ( free_old_parentloc )
rtems_filesystem_freenode( &old_parent_loc );
rtems_filesystem_freenode( &old_loc );
468c0: 4e93 jsr %a3@ <== NOT EXECUTED
return -1;
468c2: 588f addql #4,%sp <== NOT EXECUTED
if ( free_old_parentloc )
rtems_filesystem_freenode( &old_parent_loc );
rtems_filesystem_freenode( &old_loc );
return result;
}
468c4: 2004 movel %d4,%d0 <== NOT EXECUTED
468c6: 4cee 0c3c ffa4 moveml %fp@(-92),%d2-%d5/%a2-%a3 <== NOT EXECUTED
468cc: 4e5e unlk %fp <== NOT EXECUTED
468ce: 4e75 rts <== NOT EXECUTED
result = (*new_parent_loc.ops->evalformake_h)( &new[i], &new_parent_loc, &name );
if ( result != 0 ) {
rtems_filesystem_freenode( &new_parent_loc );
if ( free_old_parentloc )
rtems_filesystem_freenode( &old_parent_loc );
468d0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
rtems_filesystem_freenode( &old_loc );
return -1;
468d2: 78ff moveq #-1,%d4 <== NOT EXECUTED
result = (*new_parent_loc.ops->evalformake_h)( &new[i], &new_parent_loc, &name );
if ( result != 0 ) {
rtems_filesystem_freenode( &new_parent_loc );
if ( free_old_parentloc )
rtems_filesystem_freenode( &old_parent_loc );
468d4: 4e93 jsr %a3@ <== NOT EXECUTED
468d6: 588f addql #4,%sp <== NOT EXECUTED
rtems_filesystem_freenode( &old_loc );
468d8: 2f03 movel %d3,%sp@- <== NOT EXECUTED
468da: 4e93 jsr %a3@ <== NOT EXECUTED
return -1;
468dc: 588f addql #4,%sp <== NOT EXECUTED
468de: 60e4 bras 468c4 <_rename_r+0x1d8> <== NOT EXECUTED
00046f9c <_unlink_r>:
int _unlink_r(
struct _reent *ptr __attribute__((unused)),
const char *path
)
{
46f9c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return unlink( path );
46fa0: 2d6e 000c 0008 movel %fp@(12),%fp@(8) <== NOT EXECUTED
}
46fa6: 4e5e unlk %fp <== NOT EXECUTED
int _unlink_r(
struct _reent *ptr __attribute__((unused)),
const char *path
)
{
return unlink( path );
46fa8: 4ef9 0004 6e28 jmp 46e28 <unlink> <== NOT EXECUTED
...
0005af78 <_write_r>:
struct _reent *ptr __attribute__((unused)),
int fd,
const void *buf,
size_t nbytes
)
{
5af78: 4e56 0000 linkw %fp,#0
5af7c: 222e 0010 movel %fp@(16),%d1
5af80: 202e 000c movel %fp@(12),%d0
return write( fd, buf, nbytes );
5af84: 2d6e 0014 0010 movel %fp@(20),%fp@(16)
5af8a: 2d41 000c movel %d1,%fp@(12)
5af8e: 2d40 0008 movel %d0,%fp@(8)
}
5af92: 4e5e unlk %fp
int fd,
const void *buf,
size_t nbytes
)
{
return write( fd, buf, nbytes );
5af94: 4ef9 0005 b0b8 jmp 5b0b8 <write>
...
00044c44 <access>:
int access(
const char *path,
int amode
)
{
44c44: 4e56 ffb8 linkw %fp,#-72
44c48: 2f02 movel %d2,%sp@-
struct stat statbuf;
if ( stat(path, &statbuf) )
44c4a: 486e ffba pea %fp@(-70)
44c4e: 2f2e 0008 movel %fp@(8),%sp@-
int access(
const char *path,
int amode
)
{
44c52: 242e 000c movel %fp@(12),%d2
struct stat statbuf;
if ( stat(path, &statbuf) )
44c56: 4eb9 0004 67f0 jsr 467f0 <stat>
44c5c: 508f addql #8,%sp
44c5e: 4a80 tstl %d0
44c60: 6626 bnes 44c88 <access+0x44>
return -1;
if ( amode & R_OK ) {
44c62: 44c2 movew %d2,%ccr
44c64: 672c beqs 44c92 <access+0x4e>
if (!( statbuf.st_mode & S_IREAD ))
return -1;
}
if ( amode & W_OK ) {
44c66: 0802 0001 btst #1,%d2
44c6a: 6610 bnes 44c7c <access+0x38>
if ( !( statbuf.st_mode & S_IWRITE ) )
return -1;
}
if ( amode & X_OK ) {
44c6c: 0802 0000 btst #0,%d2
44c70: 6634 bnes 44ca6 <access+0x62>
if ( !( statbuf.st_mode & S_IEXEC ) )
return -1;
}
return 0;
}
44c72: 242e ffb4 movel %fp@(-76),%d2
if ( amode & X_OK ) {
if ( !( statbuf.st_mode & S_IEXEC ) )
return -1;
}
return 0;
44c76: 4280 clrl %d0
}
44c78: 4e5e unlk %fp
44c7a: 4e75 rts
if (!( statbuf.st_mode & S_IREAD ))
return -1;
}
if ( amode & W_OK ) {
if ( !( statbuf.st_mode & S_IWRITE ) )
44c7c: 202e ffc6 movel %fp@(-58),%d0
44c80: 0280 0000 0080 andil #128,%d0
44c86: 66e4 bnes 44c6c <access+0x28>
if ( !( statbuf.st_mode & S_IEXEC ) )
return -1;
}
return 0;
}
44c88: 242e ffb4 movel %fp@(-76),%d2
return -1;
}
if ( amode & W_OK ) {
if ( !( statbuf.st_mode & S_IWRITE ) )
return -1;
44c8c: 70ff moveq #-1,%d0
if ( !( statbuf.st_mode & S_IEXEC ) )
return -1;
}
return 0;
}
44c8e: 4e5e unlk %fp
44c90: 4e75 rts
if ( stat(path, &statbuf) )
return -1;
if ( amode & R_OK ) {
if (!( statbuf.st_mode & S_IREAD ))
44c92: 202e ffc6 movel %fp@(-58),%d0
44c96: 0280 0000 0100 andil #256,%d0
44c9c: 67ea beqs 44c88 <access+0x44>
return -1;
}
if ( amode & W_OK ) {
44c9e: 0802 0001 btst #1,%d2
44ca2: 67c8 beqs 44c6c <access+0x28> <== NEVER TAKEN
44ca4: 60d6 bras 44c7c <access+0x38>
if ( !( statbuf.st_mode & S_IWRITE ) )
return -1;
}
if ( amode & X_OK ) {
if ( !( statbuf.st_mode & S_IEXEC ) )
44ca6: 7040 moveq #64,%d0
44ca8: c0ae ffc6 andl %fp@(-58),%d0
return -1;
}
return 0;
}
44cac: 242e ffb4 movel %fp@(-76),%d2
if ( amode & X_OK ) {
if ( !( statbuf.st_mode & S_IEXEC ) )
return -1;
}
return 0;
44cb0: 4a80 tstl %d0
44cb2: 57c0 seq %d0
}
44cb4: 4e5e unlk %fp
if ( amode & X_OK ) {
if ( !( statbuf.st_mode & S_IEXEC ) )
return -1;
}
return 0;
44cb6: 49c0 extbl %d0
}
...
00043d20 <cfgetispeed>:
speed_t cfgetispeed(
const struct termios *tp
)
{
return (tp->c_cflag / (CIBAUD / CBAUD)) & CBAUD;
43d20: 4280 clrl %d0 <== NOT EXECUTED
#include <termios.h>
speed_t cfgetispeed(
const struct termios *tp
)
{
43d22: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
43d26: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
return (tp->c_cflag / (CIBAUD / CBAUD)) & CBAUD;
}
43d2a: 4e5e unlk %fp <== NOT EXECUTED
speed_t cfgetispeed(
const struct termios *tp
)
{
return (tp->c_cflag / (CIBAUD / CBAUD)) & CBAUD;
43d2c: 3028 0008 movew %a0@(8),%d0 <== NOT EXECUTED
}
43d30: 0280 0000 100f andil #4111,%d0 <== NOT EXECUTED
00043d38 <cfgetospeed>:
#include <termios.h>
speed_t cfgetospeed(
const struct termios *tp
)
{
43d38: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
43d3c: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
return tp->c_cflag & CBAUD;
}
43d40: 4e5e unlk %fp <== NOT EXECUTED
43d42: 2028 0008 movel %a0@(8),%d0 <== NOT EXECUTED
43d46: 0280 0000 100f andil #4111,%d0 <== NOT EXECUTED
...
00043d50 <cfsetispeed>:
int cfsetispeed(
struct termios *tp,
speed_t speed
)
{
43d50: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
43d54: 222e 000c movel %fp@(12),%d1 <== NOT EXECUTED
if ( speed & ~CBAUD )
43d58: 2001 movel %d1,%d0 <== NOT EXECUTED
43d5a: 0280 ffff eff0 andil #-4112,%d0 <== NOT EXECUTED
int cfsetispeed(
struct termios *tp,
speed_t speed
)
{
43d60: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
43d64: 2f02 movel %d2,%sp@- <== NOT EXECUTED
if ( speed & ~CBAUD )
43d66: 4a80 tstl %d0 <== NOT EXECUTED
43d68: 661e bnes 43d88 <cfsetispeed+0x38> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
tp->c_cflag = (tp->c_cflag & ~CIBAUD) | (speed * (CIBAUD / CBAUD));
43d6a: 2428 0008 movel %a0@(8),%d2 <== NOT EXECUTED
return 0;
43d6e: 4280 clrl %d0 <== NOT EXECUTED
)
{
if ( speed & ~CBAUD )
rtems_set_errno_and_return_minus_one( EINVAL );
tp->c_cflag = (tp->c_cflag & ~CIBAUD) | (speed * (CIBAUD / CBAUD));
43d70: 0282 eff0 ffff andil #-269418497,%d2 <== NOT EXECUTED
43d76: 4841 swap %d1 <== NOT EXECUTED
43d78: 4241 clrw %d1 <== NOT EXECUTED
43d7a: 8282 orl %d2,%d1 <== NOT EXECUTED
return 0;
}
43d7c: 242e fffc movel %fp@(-4),%d2 <== NOT EXECUTED
43d80: 4e5e unlk %fp <== NOT EXECUTED
)
{
if ( speed & ~CBAUD )
rtems_set_errno_and_return_minus_one( EINVAL );
tp->c_cflag = (tp->c_cflag & ~CIBAUD) | (speed * (CIBAUD / CBAUD));
43d82: 2141 0008 movel %d1,%a0@(8) <== NOT EXECUTED
return 0;
}
43d86: 4e75 rts <== NOT EXECUTED
struct termios *tp,
speed_t speed
)
{
if ( speed & ~CBAUD )
rtems_set_errno_and_return_minus_one( EINVAL );
43d88: 4eb9 0004 f328 jsr 4f328 <__errno> <== NOT EXECUTED
tp->c_cflag = (tp->c_cflag & ~CIBAUD) | (speed * (CIBAUD / CBAUD));
return 0;
}
43d8e: 242e fffc movel %fp@(-4),%d2 <== NOT EXECUTED
struct termios *tp,
speed_t speed
)
{
if ( speed & ~CBAUD )
rtems_set_errno_and_return_minus_one( EINVAL );
43d92: 2040 moveal %d0,%a0 <== NOT EXECUTED
43d94: 7216 moveq #22,%d1 <== NOT EXECUTED
43d96: 70ff moveq #-1,%d0 <== NOT EXECUTED
tp->c_cflag = (tp->c_cflag & ~CIBAUD) | (speed * (CIBAUD / CBAUD));
return 0;
}
43d98: 4e5e unlk %fp <== NOT EXECUTED
struct termios *tp,
speed_t speed
)
{
if ( speed & ~CBAUD )
rtems_set_errno_and_return_minus_one( EINVAL );
43d9a: 2081 movel %d1,%a0@ <== NOT EXECUTED
tp->c_cflag = (tp->c_cflag & ~CIBAUD) | (speed * (CIBAUD / CBAUD));
return 0;
}
...
00043da0 <cfsetospeed>:
int cfsetospeed(
struct termios *tp,
speed_t speed
)
{
43da0: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
43da4: 222e 000c movel %fp@(12),%d1 <== NOT EXECUTED
if ( speed & ~CBAUD )
43da8: 2001 movel %d1,%d0 <== NOT EXECUTED
43daa: 0280 ffff eff0 andil #-4112,%d0 <== NOT EXECUTED
int cfsetospeed(
struct termios *tp,
speed_t speed
)
{
43db0: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
43db4: 2f02 movel %d2,%sp@- <== NOT EXECUTED
if ( speed & ~CBAUD )
43db6: 4a80 tstl %d0 <== NOT EXECUTED
43db8: 661a bnes 43dd4 <cfsetospeed+0x34> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
tp->c_cflag = (tp->c_cflag & ~CBAUD) | speed;
43dba: 2428 0008 movel %a0@(8),%d2 <== NOT EXECUTED
return 0;
43dbe: 4280 clrl %d0 <== NOT EXECUTED
)
{
if ( speed & ~CBAUD )
rtems_set_errno_and_return_minus_one( EINVAL );
tp->c_cflag = (tp->c_cflag & ~CBAUD) | speed;
43dc0: 0282 ffff eff0 andil #-4112,%d2 <== NOT EXECUTED
43dc6: 8282 orl %d2,%d1 <== NOT EXECUTED
return 0;
}
43dc8: 242e fffc movel %fp@(-4),%d2 <== NOT EXECUTED
43dcc: 4e5e unlk %fp <== NOT EXECUTED
)
{
if ( speed & ~CBAUD )
rtems_set_errno_and_return_minus_one( EINVAL );
tp->c_cflag = (tp->c_cflag & ~CBAUD) | speed;
43dce: 2141 0008 movel %d1,%a0@(8) <== NOT EXECUTED
return 0;
}
43dd2: 4e75 rts <== NOT EXECUTED
struct termios *tp,
speed_t speed
)
{
if ( speed & ~CBAUD )
rtems_set_errno_and_return_minus_one( EINVAL );
43dd4: 4eb9 0004 f328 jsr 4f328 <__errno> <== NOT EXECUTED
tp->c_cflag = (tp->c_cflag & ~CBAUD) | speed;
return 0;
}
43dda: 242e fffc movel %fp@(-4),%d2 <== NOT EXECUTED
struct termios *tp,
speed_t speed
)
{
if ( speed & ~CBAUD )
rtems_set_errno_and_return_minus_one( EINVAL );
43dde: 2040 moveal %d0,%a0 <== NOT EXECUTED
43de0: 7216 moveq #22,%d1 <== NOT EXECUTED
43de2: 70ff moveq #-1,%d0 <== NOT EXECUTED
tp->c_cflag = (tp->c_cflag & ~CBAUD) | speed;
return 0;
}
43de4: 4e5e unlk %fp <== NOT EXECUTED
struct termios *tp,
speed_t speed
)
{
if ( speed & ~CBAUD )
rtems_set_errno_and_return_minus_one( EINVAL );
43de6: 2081 movel %d1,%a0@ <== NOT EXECUTED
tp->c_cflag = (tp->c_cflag & ~CBAUD) | speed;
return 0;
}
...
00042be0 <chroot>:
#include <rtems/seterr.h>
int chroot(
const char *pathname
)
{
42be0: 4e56 ffec linkw %fp,#-20
int result;
rtems_filesystem_location_info_t loc;
/* an automatic call to new private env the first time */
if (rtems_current_user_env == &rtems_global_user_env) {
42be4: 203c 0005 ec08 movel #388104,%d0
#include <rtems/seterr.h>
int chroot(
const char *pathname
)
{
42bea: 2f0b movel %a3,%sp@-
42bec: 2f0a movel %a2,%sp@-
int result;
rtems_filesystem_location_info_t loc;
/* an automatic call to new private env the first time */
if (rtems_current_user_env == &rtems_global_user_env) {
42bee: b0b9 0005 d648 cmpl 5d648 <rtems_current_user_env>,%d0
42bf4: 6778 beqs 42c6e <chroot+0x8e>
rtems_libio_set_private_env(); /* try to set a new private env*/
if (rtems_current_user_env == &rtems_global_user_env) /* not ok */
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = chdir(pathname);
42bf6: 2f2e 0008 movel %fp@(8),%sp@-
42bfa: 4eb9 0004 bbac jsr 4bbac <chdir>
if (result) {
42c00: 588f addql #4,%sp
42c02: 4a80 tstl %d0
42c04: 6600 009a bnew 42ca0 <chroot+0xc0>
rtems_set_errno_and_return_minus_one( errno );
}
/* clone the new root location */
if (rtems_filesystem_evaluate_path(".", 1, 0, &loc, 0)) {
42c08: 42a7 clrl %sp@-
42c0a: 45ee ffec lea %fp@(-20),%a2
42c0e: 2f0a movel %a2,%sp@-
42c10: 42a7 clrl %sp@-
42c12: 4878 0001 pea 1 <ADD>
42c16: 4879 0005 cace pea 5cace <dotdotname+0x4>
42c1c: 4eb9 0004 3050 jsr 43050 <rtems_filesystem_evaluate_path>
42c22: 4fef 0014 lea %sp@(20),%sp
42c26: 4a80 tstl %d0
42c28: 6676 bnes 42ca0 <chroot+0xc0> <== NEVER TAKEN
/* our cwd has changed, though - but there is no easy way of return :-( */
rtems_set_errno_and_return_minus_one( errno );
}
rtems_filesystem_freenode(&rtems_filesystem_root);
42c2a: 2079 0005 d648 moveal 5d648 <rtems_current_user_env>,%a0
42c30: 41e8 0018 lea %a0@(24),%a0
42c34: 2f08 movel %a0,%sp@-
42c36: 4eb9 0004 3174 jsr 43174 <rtems_filesystem_freenode>
rtems_filesystem_root = loc;
42c3c: 2079 0005 d648 moveal 5d648 <rtems_current_user_env>,%a0
return 0;
42c42: 588f addql #4,%sp
42c44: 4280 clrl %d0
if (rtems_filesystem_evaluate_path(".", 1, 0, &loc, 0)) {
/* our cwd has changed, though - but there is no easy way of return :-( */
rtems_set_errno_and_return_minus_one( errno );
}
rtems_filesystem_freenode(&rtems_filesystem_root);
rtems_filesystem_root = loc;
42c46: 2152 0018 movel %a2@,%a0@(24)
42c4a: 216e fff0 001c movel %fp@(-16),%a0@(28)
42c50: 216e fff4 0020 movel %fp@(-12),%a0@(32)
42c56: 216e fff8 0024 movel %fp@(-8),%a0@(36)
42c5c: 216e fffc 0028 movel %fp@(-4),%a0@(40)
return 0;
}
42c62: 246e ffe4 moveal %fp@(-28),%a2
42c66: 266e ffe8 moveal %fp@(-24),%a3
42c6a: 4e5e unlk %fp
42c6c: 4e75 rts
int result;
rtems_filesystem_location_info_t loc;
/* an automatic call to new private env the first time */
if (rtems_current_user_env == &rtems_global_user_env) {
rtems_libio_set_private_env(); /* try to set a new private env*/
42c6e: 4eb9 0004 435c jsr 4435c <rtems_libio_set_private_env>
if (rtems_current_user_env == &rtems_global_user_env) /* not ok */
42c74: 41f9 0005 ec08 lea 5ec08 <rtems_global_user_env>,%a0
42c7a: b1f9 0005 d648 cmpal 5d648 <rtems_current_user_env>,%a0
42c80: 6600 ff74 bnew 42bf6 <chroot+0x16>
rtems_set_errno_and_return_minus_one( ENOTSUP );
42c84: 4eb9 0004 e3c4 jsr 4e3c4 <__errno> <== NOT EXECUTED
}
rtems_filesystem_freenode(&rtems_filesystem_root);
rtems_filesystem_root = loc;
return 0;
}
42c8a: 246e ffe4 moveal %fp@(-28),%a2 <== NOT EXECUTED
/* an automatic call to new private env the first time */
if (rtems_current_user_env == &rtems_global_user_env) {
rtems_libio_set_private_env(); /* try to set a new private env*/
if (rtems_current_user_env == &rtems_global_user_env) /* not ok */
rtems_set_errno_and_return_minus_one( ENOTSUP );
42c8e: 2040 moveal %d0,%a0 <== NOT EXECUTED
42c90: 70ff moveq #-1,%d0 <== NOT EXECUTED
}
rtems_filesystem_freenode(&rtems_filesystem_root);
rtems_filesystem_root = loc;
return 0;
}
42c92: 266e ffe8 moveal %fp@(-24),%a3 <== NOT EXECUTED
42c96: 4e5e unlk %fp <== NOT EXECUTED
/* an automatic call to new private env the first time */
if (rtems_current_user_env == &rtems_global_user_env) {
rtems_libio_set_private_env(); /* try to set a new private env*/
if (rtems_current_user_env == &rtems_global_user_env) /* not ok */
rtems_set_errno_and_return_minus_one( ENOTSUP );
42c98: 20bc 0000 0086 movel #134,%a0@ <== NOT EXECUTED
}
rtems_filesystem_freenode(&rtems_filesystem_root);
rtems_filesystem_root = loc;
return 0;
}
42c9e: 4e75 rts <== NOT EXECUTED
}
/* clone the new root location */
if (rtems_filesystem_evaluate_path(".", 1, 0, &loc, 0)) {
/* our cwd has changed, though - but there is no easy way of return :-( */
rtems_set_errno_and_return_minus_one( errno );
42ca0: 45f9 0004 e3c4 lea 4e3c4 <__errno>,%a2 <== NOT EXECUTED
42ca6: 4e92 jsr %a2@ <== NOT EXECUTED
42ca8: 2640 moveal %d0,%a3 <== NOT EXECUTED
42caa: 4e92 jsr %a2@ <== NOT EXECUTED
}
rtems_filesystem_freenode(&rtems_filesystem_root);
rtems_filesystem_root = loc;
return 0;
}
42cac: 246e ffe4 moveal %fp@(-28),%a2 <== NOT EXECUTED
}
/* clone the new root location */
if (rtems_filesystem_evaluate_path(".", 1, 0, &loc, 0)) {
/* our cwd has changed, though - but there is no easy way of return :-( */
rtems_set_errno_and_return_minus_one( errno );
42cb0: 2040 moveal %d0,%a0 <== NOT EXECUTED
42cb2: 70ff moveq #-1,%d0 <== NOT EXECUTED
42cb4: 2690 movel %a0@,%a3@ <== NOT EXECUTED
}
rtems_filesystem_freenode(&rtems_filesystem_root);
rtems_filesystem_root = loc;
return 0;
}
42cb6: 266e ffe8 moveal %fp@(-24),%a3 <== NOT EXECUTED
42cba: 4e5e unlk %fp <== NOT EXECUTED
...
000423e8 <devFS_Show>:
#include <rtems/seterr.h>
#include "devfs.h"
int devFS_Show(void)
{
423e8: 4e56 fff4 linkw %fp,#-12
int i;
rtems_filesystem_location_info_t *temp_loc;
rtems_device_name_t *device_name_table;
temp_loc = &rtems_filesystem_root;
423ec: 2079 0005 a170 moveal 5a170 <rtems_current_user_env>,%a0
#include <rtems/seterr.h>
#include "devfs.h"
int devFS_Show(void)
{
423f2: 48d7 040c moveml %d2-%d3/%a2,%sp@
int i;
rtems_filesystem_location_info_t *temp_loc;
rtems_device_name_t *device_name_table;
temp_loc = &rtems_filesystem_root;
device_name_table = (rtems_device_name_t *)temp_loc->node_access;
423f6: 2628 0018 movel %a0@(24),%d3
if (!device_name_table)
423fa: 6752 beqs 4244e <devFS_Show+0x66> <== NEVER TAKEN
rtems_set_errno_and_return_minus_one( EFAULT );
for (i = 0; i < rtems_device_table_size; i++){
423fc: 4ab9 0005 9fd8 tstl 59fd8 <rtems_device_table_size>
42402: 673e beqs 42442 <devFS_Show+0x5a>
42404: 4280 clrl %d0
42406: 4282 clrl %d2
if (device_name_table[i].device_name){
printk("/%s %d %d\n", device_name_table[i].device_name,
42408: 45f9 0004 3824 lea 43824 <printk>,%a2
device_name_table = (rtems_device_name_t *)temp_loc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
for (i = 0; i < rtems_device_table_size; i++){
if (device_name_table[i].device_name){
4240e: 2200 movel %d0,%d1
temp_loc = &rtems_filesystem_root;
device_name_table = (rtems_device_name_t *)temp_loc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
for (i = 0; i < rtems_device_table_size; i++){
42410: 5282 addql #1,%d2
if (device_name_table[i].device_name){
42412: e989 lsll #4,%d1
42414: 2241 moveal %d1,%a1
42416: 41f1 0c00 lea %a1@(00000000,%d0:l:4),%a0
4241a: 41f0 3800 lea %a0@(00000000,%d3:l),%a0
4241e: 2010 movel %a0@,%d0
42420: 6716 beqs 42438 <devFS_Show+0x50>
printk("/%s %d %d\n", device_name_table[i].device_name,
42422: 2f28 000c movel %a0@(12),%sp@-
42426: 2f28 0008 movel %a0@(8),%sp@-
4242a: 2f00 movel %d0,%sp@-
4242c: 4879 0005 8f1e pea 58f1e <IntUartPollCallbacks.6194+0x20>
42432: 4e92 jsr %a2@
42434: 4fef 0010 lea %sp@(16),%sp
temp_loc = &rtems_filesystem_root;
device_name_table = (rtems_device_name_t *)temp_loc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
for (i = 0; i < rtems_device_table_size; i++){
42438: 2002 movel %d2,%d0
4243a: b4b9 0005 9fd8 cmpl 59fd8 <rtems_device_table_size>,%d2
42440: 65cc bcss 4240e <devFS_Show+0x26>
if (device_name_table[i].device_name){
printk("/%s %d %d\n", device_name_table[i].device_name,
device_name_table[i].major, device_name_table[i].minor);
}
}
return 0;
42442: 4280 clrl %d0
}
42444: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
4244a: 4e5e unlk %fp
4244c: 4e75 rts
rtems_device_name_t *device_name_table;
temp_loc = &rtems_filesystem_root;
device_name_table = (rtems_device_name_t *)temp_loc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
4244e: 4eb9 0004 b8c0 jsr 4b8c0 <__errno>
42454: 720e moveq #14,%d1
42456: 2040 moveal %d0,%a0
42458: 70ff moveq #-1,%d0
printk("/%s %d %d\n", device_name_table[i].device_name,
device_name_table[i].major, device_name_table[i].minor);
}
}
return 0;
}
4245a: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
rtems_device_name_t *device_name_table;
temp_loc = &rtems_filesystem_root;
device_name_table = (rtems_device_name_t *)temp_loc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
42460: 2081 movel %d1,%a0@
printk("/%s %d %d\n", device_name_table[i].device_name,
device_name_table[i].major, device_name_table[i].minor);
}
}
return 0;
}
42462: 4e5e unlk %fp
...
00049af4 <devFS_evaluate_path>:
const char *pathname,
size_t pathnamelen,
int flags,
rtems_filesystem_location_info_t *pathloc
)
{
49af4: 4e56 ffdc linkw %fp,#-36
49af8: 48d7 3c7c moveml %d2-%d6/%a2-%a5,%sp@
49afc: 286e 0014 moveal %fp@(20),%a4
49b00: 2c2e 0008 movel %fp@(8),%d6
49b04: 262e 000c movel %fp@(12),%d3
assert( 0 );
rtems_set_errno_and_return_minus_one( EIO );
}
/* get the device name table */
device_name_table = (rtems_device_name_t *)pathloc->node_access;
49b08: 2814 movel %a4@,%d4
if (!device_name_table)
49b0a: 6700 008a beqw 49b96 <devFS_evaluate_path+0xa2>
rtems_set_errno_and_return_minus_one( EFAULT );
for (i = 0; i < rtems_device_table_size; i++) {
49b0e: 2a39 0005 9fd8 movel 59fd8 <rtems_device_table_size>,%d5
49b14: 673c beqs 49b52 <devFS_evaluate_path+0x5e> <== NEVER TAKEN
49b16: 4280 clrl %d0
49b18: 4282 clrl %d2
if (!device_name_table[i].device_name)
continue;
if (strncmp(pathname, device_name_table[i].device_name, pathnamelen) != 0)
49b1a: 4bf9 0004 cc1c lea 4cc1c <strncmp>,%a5
device_name_table = (rtems_device_name_t *)pathloc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
for (i = 0; i < rtems_device_table_size; i++) {
if (!device_name_table[i].device_name)
49b20: 2200 movel %d0,%d1
/* get the device name table */
device_name_table = (rtems_device_name_t *)pathloc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
for (i = 0; i < rtems_device_table_size; i++) {
49b22: 5282 addql #1,%d2
if (!device_name_table[i].device_name)
49b24: e989 lsll #4,%d1
49b26: 2041 moveal %d1,%a0
49b28: 47f0 0c00 lea %a0@(00000000,%d0:l:4),%a3
49b2c: 47f3 4800 lea %a3@(00000000,%d4:l),%a3
49b30: 2453 moveal %a3@,%a2
49b32: 4a8a tstl %a2
49b34: 6716 beqs 49b4c <devFS_evaluate_path+0x58>
continue;
if (strncmp(pathname, device_name_table[i].device_name, pathnamelen) != 0)
49b36: 2f03 movel %d3,%sp@-
49b38: 2f0a movel %a2,%sp@-
49b3a: 2f06 movel %d6,%sp@-
49b3c: 4e95 jsr %a5@
49b3e: 4fef 000c lea %sp@(12),%sp
49b42: 4a80 tstl %d0
49b44: 6606 bnes 49b4c <devFS_evaluate_path+0x58>
continue;
if (device_name_table[i].device_name[pathnamelen] != '\0')
49b46: 4a32 3800 tstb %a2@(00000000,%d3:l)
49b4a: 671e beqs 49b6a <devFS_evaluate_path+0x76> <== ALWAYS TAKEN
/* get the device name table */
device_name_table = (rtems_device_name_t *)pathloc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
for (i = 0; i < rtems_device_table_size; i++) {
49b4c: 2002 movel %d2,%d0
49b4e: b485 cmpl %d5,%d2
49b50: 65ce bcss 49b20 <devFS_evaluate_path+0x2c>
pathloc->mt_entry = rtems_filesystem_root.mt_entry;
return 0;
}
/* no such file or directory */
rtems_set_errno_and_return_minus_one( ENOENT );
49b52: 4eb9 0004 b8c0 jsr 4b8c0 <__errno>
49b58: 7202 moveq #2,%d1
49b5a: 2040 moveal %d0,%a0
49b5c: 70ff moveq #-1,%d0
}
49b5e: 4cee 3c7c ffdc moveml %fp@(-36),%d2-%d6/%a2-%a5
pathloc->mt_entry = rtems_filesystem_root.mt_entry;
return 0;
}
/* no such file or directory */
rtems_set_errno_and_return_minus_one( ENOENT );
49b64: 2081 movel %d1,%a0@
}
49b66: 4e5e unlk %fp
49b68: 4e75 rts
/* find the device, set proper values */
pathloc->node_access = (void *)&device_name_table[i];
pathloc->handlers = &devFS_file_handlers;
pathloc->ops = &devFS_ops;
pathloc->mt_entry = rtems_filesystem_root.mt_entry;
49b6a: 2079 0005 a170 moveal 5a170 <rtems_current_user_env>,%a0
49b70: 2968 0028 0010 movel %a0@(40),%a4@(16)
if (device_name_table[i].device_name[pathnamelen] != '\0')
continue;
/* find the device, set proper values */
pathloc->node_access = (void *)&device_name_table[i];
pathloc->handlers = &devFS_file_handlers;
49b76: 223c 0005 a118 movel #368920,%d1
pathloc->ops = &devFS_ops;
49b7c: 41f9 0005 a0d0 lea 5a0d0 <devFS_ops>,%a0
if (device_name_table[i].device_name[pathnamelen] != '\0')
continue;
/* find the device, set proper values */
pathloc->node_access = (void *)&device_name_table[i];
pathloc->handlers = &devFS_file_handlers;
49b82: 2941 0008 movel %d1,%a4@(8)
pathloc->ops = &devFS_ops;
49b86: 2948 000c movel %a0,%a4@(12)
if (device_name_table[i].device_name[pathnamelen] != '\0')
continue;
/* find the device, set proper values */
pathloc->node_access = (void *)&device_name_table[i];
49b8a: 288b movel %a3,%a4@
return 0;
}
/* no such file or directory */
rtems_set_errno_and_return_minus_one( ENOENT );
}
49b8c: 4cee 3c7c ffdc moveml %fp@(-36),%d2-%d6/%a2-%a5
49b92: 4e5e unlk %fp
49b94: 4e75 rts
}
/* get the device name table */
device_name_table = (rtems_device_name_t *)pathloc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
49b96: 4eb9 0004 b8c0 jsr 4b8c0 <__errno> <== NOT EXECUTED
49b9c: 740e moveq #14,%d2 <== NOT EXECUTED
49b9e: 2040 moveal %d0,%a0 <== NOT EXECUTED
49ba0: 70ff moveq #-1,%d0 <== NOT EXECUTED
49ba2: 2082 movel %d2,%a0@ <== NOT EXECUTED
return 0;
}
/* no such file or directory */
rtems_set_errno_and_return_minus_one( ENOENT );
}
49ba4: 4cee 3c7c ffdc moveml %fp@(-36),%d2-%d6/%a2-%a5 <== NOT EXECUTED
49baa: 4e5e unlk %fp <== NOT EXECUTED
000421e4 <devFS_initialize>:
int devFS_initialize(
rtems_filesystem_mount_table_entry_t *temp_mt_entry,
const void *data
)
{
421e4: 4e56 0000 linkw %fp,#0
rtems_device_name_t *device_name_table;
/* allocate device only filesystem name table */
device_name_table = (rtems_device_name_t *)_Workspace_Allocate(
421e8: 2039 0005 9fd8 movel 59fd8 <rtems_device_table_size>,%d0
421ee: 2200 movel %d0,%d1
int devFS_initialize(
rtems_filesystem_mount_table_entry_t *temp_mt_entry,
const void *data
)
{
421f0: 2f0a movel %a2,%sp@-
421f2: 246e 0008 moveal %fp@(8),%a2
rtems_device_name_t *device_name_table;
/* allocate device only filesystem name table */
device_name_table = (rtems_device_name_t *)_Workspace_Allocate(
421f6: e989 lsll #4,%d1
int devFS_initialize(
rtems_filesystem_mount_table_entry_t *temp_mt_entry,
const void *data
)
{
421f8: 2f02 movel %d2,%sp@-
rtems_device_name_t *device_name_table;
/* allocate device only filesystem name table */
device_name_table = (rtems_device_name_t *)_Workspace_Allocate(
421fa: 2041 moveal %d1,%a0
421fc: 4870 0c00 pea %a0@(00000000,%d0:l:4)
42200: 4eb9 0004 96ee jsr 496ee <_Workspace_Allocate>
sizeof( rtems_device_name_t ) * ( rtems_device_table_size )
);
/* no memory for device filesystem */
if (!device_name_table)
42206: 588f addql #4,%sp
)
{
rtems_device_name_t *device_name_table;
/* allocate device only filesystem name table */
device_name_table = (rtems_device_name_t *)_Workspace_Allocate(
42208: 2400 movel %d0,%d2
sizeof( rtems_device_name_t ) * ( rtems_device_table_size )
);
/* no memory for device filesystem */
if (!device_name_table)
4220a: 6744 beqs 42250 <devFS_initialize+0x6c> <== NEVER TAKEN
rtems_set_errno_and_return_minus_one( ENOMEM );
memset(
4220c: 2039 0005 9fd8 movel 59fd8 <rtems_device_table_size>,%d0
42212: 2200 movel %d0,%d1
42214: e989 lsll #4,%d1
42216: 2041 moveal %d1,%a0
42218: 4870 0c00 pea %a0@(00000000,%d0:l:4)
4221c: 42a7 clrl %sp@-
4221e: 2f02 movel %d2,%sp@-
42220: 4eb9 0004 c1dc jsr 4c1dc <memset>
temp_mt_entry->mt_fs_root.ops = &devFS_ops;
/* Set the node_access to device name table */
temp_mt_entry->mt_fs_root.node_access = (void *)device_name_table;
return 0;
42226: 4fef 000c lea %sp@(12),%sp
device_name_table, 0,
sizeof( rtems_device_name_t ) * ( rtems_device_table_size )
);
/* set file handlers */
temp_mt_entry->mt_fs_root.handlers = &devFS_file_handlers;
4222a: 203c 0005 a118 movel #368920,%d0
temp_mt_entry->mt_fs_root.ops = &devFS_ops;
42230: 41f9 0005 a0d0 lea 5a0d0 <devFS_ops>,%a0
device_name_table, 0,
sizeof( rtems_device_name_t ) * ( rtems_device_table_size )
);
/* set file handlers */
temp_mt_entry->mt_fs_root.handlers = &devFS_file_handlers;
42236: 2540 0024 movel %d0,%a2@(36)
temp_mt_entry->mt_fs_root.ops = &devFS_ops;
/* Set the node_access to device name table */
temp_mt_entry->mt_fs_root.node_access = (void *)device_name_table;
return 0;
4223a: 4280 clrl %d0
/* set file handlers */
temp_mt_entry->mt_fs_root.handlers = &devFS_file_handlers;
temp_mt_entry->mt_fs_root.ops = &devFS_ops;
/* Set the node_access to device name table */
temp_mt_entry->mt_fs_root.node_access = (void *)device_name_table;
4223c: 2542 001c movel %d2,%a2@(28)
return 0;
}
42240: 242e fff8 movel %fp@(-8),%d2
sizeof( rtems_device_name_t ) * ( rtems_device_table_size )
);
/* set file handlers */
temp_mt_entry->mt_fs_root.handlers = &devFS_file_handlers;
temp_mt_entry->mt_fs_root.ops = &devFS_ops;
42244: 2548 0028 movel %a0,%a2@(40)
/* Set the node_access to device name table */
temp_mt_entry->mt_fs_root.node_access = (void *)device_name_table;
return 0;
}
42248: 246e fffc moveal %fp@(-4),%a2
4224c: 4e5e unlk %fp
4224e: 4e75 rts
sizeof( rtems_device_name_t ) * ( rtems_device_table_size )
);
/* no memory for device filesystem */
if (!device_name_table)
rtems_set_errno_and_return_minus_one( ENOMEM );
42250: 4eb9 0004 b8c0 jsr 4b8c0 <__errno> <== NOT EXECUTED
/* Set the node_access to device name table */
temp_mt_entry->mt_fs_root.node_access = (void *)device_name_table;
return 0;
}
42256: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
sizeof( rtems_device_name_t ) * ( rtems_device_table_size )
);
/* no memory for device filesystem */
if (!device_name_table)
rtems_set_errno_and_return_minus_one( ENOMEM );
4225a: 2040 moveal %d0,%a0 <== NOT EXECUTED
4225c: 720c moveq #12,%d1 <== NOT EXECUTED
4225e: 70ff moveq #-1,%d0 <== NOT EXECUTED
/* Set the node_access to device name table */
temp_mt_entry->mt_fs_root.node_access = (void *)device_name_table;
return 0;
}
42260: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
42264: 4e5e unlk %fp <== NOT EXECUTED
sizeof( rtems_device_name_t ) * ( rtems_device_table_size )
);
/* no memory for device filesystem */
if (!device_name_table)
rtems_set_errno_and_return_minus_one( ENOMEM );
42266: 2081 movel %d1,%a0@ <== NOT EXECUTED
/* Set the node_access to device name table */
temp_mt_entry->mt_fs_root.node_access = (void *)device_name_table;
return 0;
}
...
00042468 <devFS_ioctl>:
int devFS_ioctl(
rtems_libio_t *iop,
uint32_t command,
void *buffer
)
{
42468: 4e56 fff0 linkw %fp,#-16
4246c: 206e 0008 moveal %fp@(8),%a0
args.iop = iop;
args.command = command;
args.buffer = buffer;
status = rtems_io_control(
42470: 486e fff0 pea %fp@(-16)
{
rtems_libio_ioctl_args_t args;
rtems_status_code status;
rtems_device_name_t *np;
np = (rtems_device_name_t *)iop->pathinfo.node_access;
42474: 2268 0018 moveal %a0@(24),%a1
args.iop = iop;
args.command = command;
args.buffer = buffer;
status = rtems_io_control(
42478: 2f29 000c movel %a1@(12),%sp@-
rtems_device_name_t *np;
np = (rtems_device_name_t *)iop->pathinfo.node_access;
args.iop = iop;
args.command = command;
4247c: 2d6e 000c fff4 movel %fp@(12),%fp@(-12)
args.buffer = buffer;
status = rtems_io_control(
42482: 2f29 0008 movel %a1@(8),%sp@-
np = (rtems_device_name_t *)iop->pathinfo.node_access;
args.iop = iop;
args.command = command;
args.buffer = buffer;
42486: 2d6e 0010 fff8 movel %fp@(16),%fp@(-8)
rtems_status_code status;
rtems_device_name_t *np;
np = (rtems_device_name_t *)iop->pathinfo.node_access;
args.iop = iop;
4248c: 2d48 fff0 movel %a0,%fp@(-16)
args.command = command;
args.buffer = buffer;
status = rtems_io_control(
42490: 4eb9 0004 6904 jsr 46904 <rtems_io_control>
np->major,
np->minor,
(void *) &args
);
if ( status )
42496: 4fef 000c lea %sp@(12),%sp
4249a: 4a80 tstl %d0
4249c: 6608 bnes 424a6 <devFS_ioctl+0x3e> <== NEVER TAKEN
return rtems_deviceio_errno(status);
return args.ioctl_return;
4249e: 202e fffc movel %fp@(-4),%d0
}
424a2: 4e5e unlk %fp
424a4: 4e75 rts
np->minor,
(void *) &args
);
if ( status )
return rtems_deviceio_errno(status);
424a6: 2f00 movel %d0,%sp@- <== NOT EXECUTED
424a8: 4eb9 0004 9bc0 jsr 49bc0 <rtems_deviceio_errno> <== NOT EXECUTED
424ae: 588f addql #4,%sp <== NOT EXECUTED
return args.ioctl_return;
}
424b0: 4e5e unlk %fp <== NOT EXECUTED
0004226c <devFS_mknod>:
* condition and do not create the '/dev' and the 'path'
* actually passed in is 'dev', not '/dev'. Just return 0 to
* indicate we are OK.
*/
if ((path[0] == 'd') && (path[1] == 'e') &&
4226c: 7264 moveq #100,%d1
const char *path,
mode_t mode,
dev_t dev,
rtems_filesystem_location_info_t *pathloc
)
{
4226e: 4e56 ffdc linkw %fp,#-36
42272: 48d7 1cfc moveml %d2-%d7/%a2-%a4,%sp@
42276: 266e 0008 moveal %fp@(8),%a3
* condition and do not create the '/dev' and the 'path'
* actually passed in is 'dev', not '/dev'. Just return 0 to
* indicate we are OK.
*/
if ((path[0] == 'd') && (path[1] == 'e') &&
4227a: 1013 moveb %a3@,%d0
const char *path,
mode_t mode,
dev_t dev,
rtems_filesystem_location_info_t *pathloc
)
{
4227c: 2a2e 000c movel %fp@(12),%d5
* condition and do not create the '/dev' and the 'path'
* actually passed in is 'dev', not '/dev'. Just return 0 to
* indicate we are OK.
*/
if ((path[0] == 'd') && (path[1] == 'e') &&
42280: 49c0 extbl %d0
const char *path,
mode_t mode,
dev_t dev,
rtems_filesystem_location_info_t *pathloc
)
{
42282: 2e2e 0010 movel %fp@(16),%d7
42286: 2c2e 0014 movel %fp@(20),%d6
* condition and do not create the '/dev' and the 'path'
* actually passed in is 'dev', not '/dev'. Just return 0 to
* indicate we are OK.
*/
if ((path[0] == 'd') && (path[1] == 'e') &&
4228a: b280 cmpl %d0,%d1
4228c: 6700 00d0 beqw 4235e <devFS_mknod+0xf2>
(path[2] == 'v') && (path[3] == '\0'))
return 0;
/* must be a character device or a block device */
if (!S_ISBLK(mode) && !S_ISCHR(mode))
42290: 2005 movel %d5,%d0
42292: 0280 0000 f000 andil #61440,%d0
42298: 0c80 0000 6000 cmpil #24576,%d0
4229e: 670a beqs 422aa <devFS_mknod+0x3e> <== NEVER TAKEN
422a0: 0c80 0000 2000 cmpil #8192,%d0
422a6: 6600 00ea bnew 42392 <devFS_mknod+0x126>
rtems_set_errno_and_return_minus_one( EINVAL );
else
rtems_filesystem_split_dev_t(dev, major, minor);
/* Find an empty slot in device name table */
device_name_table = (rtems_device_name_t *)pathloc->node_access;
422aa: 206e 0018 moveal %fp@(24),%a0
422ae: 2450 moveal %a0@,%a2
if (!device_name_table)
422b0: 4a8a tstl %a2
422b2: 6700 010e beqw 423c2 <devFS_mknod+0x156>
rtems_set_errno_and_return_minus_one( EFAULT );
for (slot = -1, i = 0; i < rtems_device_table_size; i++){
422b6: 2639 0005 9fd8 movel 59fd8 <rtems_device_table_size>,%d3
422bc: 6700 00ec beqw 423aa <devFS_mknod+0x13e>
422c0: 4280 clrl %d0
422c2: 78ff moveq #-1,%d4
422c4: 4282 clrl %d2
if (device_name_table[i].device_name == NULL)
slot = i;
else
if (strcmp(path, device_name_table[i].device_name) == 0)
422c6: 49f9 0004 c70c lea 4c70c <strcmp>,%a4
device_name_table = (rtems_device_name_t *)pathloc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
for (slot = -1, i = 0; i < rtems_device_table_size; i++){
if (device_name_table[i].device_name == NULL)
422cc: 2200 movel %d0,%d1
422ce: e989 lsll #4,%d1
422d0: 2241 moveal %d1,%a1
422d2: 41f1 0c00 lea %a1@(00000000,%d0:l:4),%a0
422d6: 2030 a800 movel %a0@(00000000,%a2:l),%d0
422da: 675e beqs 4233a <devFS_mknod+0xce>
slot = i;
else
if (strcmp(path, device_name_table[i].device_name) == 0)
422dc: 2f00 movel %d0,%sp@-
422de: 2f0b movel %a3,%sp@-
422e0: 4e94 jsr %a4@
422e2: 508f addql #8,%sp
422e4: 4a80 tstl %d0
422e6: 675e beqs 42346 <devFS_mknod+0xda> <== NEVER TAKEN
/* Find an empty slot in device name table */
device_name_table = (rtems_device_name_t *)pathloc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
for (slot = -1, i = 0; i < rtems_device_table_size; i++){
422e8: 5282 addql #1,%d2
422ea: 2002 movel %d2,%d0
422ec: b682 cmpl %d2,%d3
422ee: 62dc bhis 422cc <devFS_mknod+0x60>
else
if (strcmp(path, device_name_table[i].device_name) == 0)
rtems_set_errno_and_return_minus_one( EEXIST );
}
if (slot == -1)
422f0: 70ff moveq #-1,%d0
422f2: b084 cmpl %d4,%d0
422f4: 6700 00b4 beqw 423aa <devFS_mknod+0x13e>
rtems_set_errno_and_return_minus_one( ENOMEM );
_ISR_Disable(level);
422f8: 203c 0000 0700 movel #1792,%d0
422fe: 40c2 movew %sr,%d2
42300: 8082 orl %d2,%d0
42302: 46c0 movew %d0,%sr
device_name_table[slot].device_name = (char *)path;
42304: 2004 movel %d4,%d0
42306: e988 lsll #4,%d0
42308: 2240 moveal %d0,%a1
4230a: 41f1 4c00 lea %a1@(00000000,%d4:l:4),%a0
4230e: d5c8 addal %a0,%a2
42310: 248b movel %a3,%a2@
device_name_table[slot].device_name_length = strlen(path);
42312: 2f0b movel %a3,%sp@-
42314: 4eb9 0004 cc04 jsr 4cc04 <strlen>
4231a: 588f addql #4,%sp
4231c: 2540 0004 movel %d0,%a2@(4)
device_name_table[slot].major = major;
42320: 2547 0008 movel %d7,%a2@(8)
device_name_table[slot].minor = minor;
42324: 2546 000c movel %d6,%a2@(12)
device_name_table[slot].mode = mode;
42328: 2545 0010 movel %d5,%a2@(16)
_ISR_Enable(level);
4232c: 46c2 movew %d2,%sr
return 0;
4232e: 4280 clrl %d0
}
42330: 4cee 1cfc ffdc moveml %fp@(-36),%d2-%d7/%a2-%a4
42336: 4e5e unlk %fp
42338: 4e75 rts
device_name_table = (rtems_device_name_t *)pathloc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
for (slot = -1, i = 0; i < rtems_device_table_size; i++){
if (device_name_table[i].device_name == NULL)
4233a: 2802 movel %d2,%d4
/* Find an empty slot in device name table */
device_name_table = (rtems_device_name_t *)pathloc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
for (slot = -1, i = 0; i < rtems_device_table_size; i++){
4233c: 5282 addql #1,%d2
4233e: 2002 movel %d2,%d0
42340: b682 cmpl %d2,%d3
42342: 6288 bhis 422cc <devFS_mknod+0x60>
42344: 60aa bras 422f0 <devFS_mknod+0x84>
if (device_name_table[i].device_name == NULL)
slot = i;
else
if (strcmp(path, device_name_table[i].device_name) == 0)
rtems_set_errno_and_return_minus_one( EEXIST );
42346: 4eb9 0004 b8c0 jsr 4b8c0 <__errno> <== NOT EXECUTED
4234c: 7411 moveq #17,%d2 <== NOT EXECUTED
4234e: 2040 moveal %d0,%a0 <== NOT EXECUTED
42350: 70ff moveq #-1,%d0 <== NOT EXECUTED
42352: 2082 movel %d2,%a0@ <== NOT EXECUTED
device_name_table[slot].minor = minor;
device_name_table[slot].mode = mode;
_ISR_Enable(level);
return 0;
}
42354: 4cee 1cfc ffdc moveml %fp@(-36),%d2-%d7/%a2-%a4 <== NOT EXECUTED
4235a: 4e5e unlk %fp <== NOT EXECUTED
4235c: 4e75 rts <== NOT EXECUTED
* condition and do not create the '/dev' and the 'path'
* actually passed in is 'dev', not '/dev'. Just return 0 to
* indicate we are OK.
*/
if ((path[0] == 'd') && (path[1] == 'e') &&
4235e: 123c 0065 moveb #101,%d1
42362: 102b 0001 moveb %a3@(1),%d0
42366: 49c0 extbl %d0
42368: b280 cmpl %d0,%d1
4236a: 6600 ff24 bnew 42290 <devFS_mknod+0x24>
4236e: 123c 0076 moveb #118,%d1
42372: 102b 0002 moveb %a3@(2),%d0
42376: 49c0 extbl %d0
42378: b280 cmpl %d0,%d1
4237a: 6600 ff14 bnew 42290 <devFS_mknod+0x24>
(path[2] == 'v') && (path[3] == '\0'))
4237e: 4a2b 0003 tstb %a3@(3)
42382: 6600 ff0c bnew 42290 <devFS_mknod+0x24>
return 0;
42386: 4280 clrl %d0
device_name_table[slot].minor = minor;
device_name_table[slot].mode = mode;
_ISR_Enable(level);
return 0;
}
42388: 4cee 1cfc ffdc moveml %fp@(-36),%d2-%d7/%a2-%a4
4238e: 4e5e unlk %fp
42390: 4e75 rts
(path[2] == 'v') && (path[3] == '\0'))
return 0;
/* must be a character device or a block device */
if (!S_ISBLK(mode) && !S_ISCHR(mode))
rtems_set_errno_and_return_minus_one( EINVAL );
42392: 4eb9 0004 b8c0 jsr 4b8c0 <__errno> <== NOT EXECUTED
42398: 7816 moveq #22,%d4 <== NOT EXECUTED
4239a: 2040 moveal %d0,%a0 <== NOT EXECUTED
4239c: 70ff moveq #-1,%d0 <== NOT EXECUTED
4239e: 2084 movel %d4,%a0@ <== NOT EXECUTED
device_name_table[slot].minor = minor;
device_name_table[slot].mode = mode;
_ISR_Enable(level);
return 0;
}
423a0: 4cee 1cfc ffdc moveml %fp@(-36),%d2-%d7/%a2-%a4 <== NOT EXECUTED
423a6: 4e5e unlk %fp <== NOT EXECUTED
423a8: 4e75 rts <== NOT EXECUTED
if (strcmp(path, device_name_table[i].device_name) == 0)
rtems_set_errno_and_return_minus_one( EEXIST );
}
if (slot == -1)
rtems_set_errno_and_return_minus_one( ENOMEM );
423aa: 4eb9 0004 b8c0 jsr 4b8c0 <__errno> <== NOT EXECUTED
423b0: 720c moveq #12,%d1 <== NOT EXECUTED
423b2: 2040 moveal %d0,%a0 <== NOT EXECUTED
423b4: 70ff moveq #-1,%d0 <== NOT EXECUTED
device_name_table[slot].minor = minor;
device_name_table[slot].mode = mode;
_ISR_Enable(level);
return 0;
}
423b6: 4cee 1cfc ffdc moveml %fp@(-36),%d2-%d7/%a2-%a4 <== NOT EXECUTED
if (strcmp(path, device_name_table[i].device_name) == 0)
rtems_set_errno_and_return_minus_one( EEXIST );
}
if (slot == -1)
rtems_set_errno_and_return_minus_one( ENOMEM );
423bc: 2081 movel %d1,%a0@ <== NOT EXECUTED
device_name_table[slot].minor = minor;
device_name_table[slot].mode = mode;
_ISR_Enable(level);
return 0;
}
423be: 4e5e unlk %fp <== NOT EXECUTED
423c0: 4e75 rts <== NOT EXECUTED
rtems_filesystem_split_dev_t(dev, major, minor);
/* Find an empty slot in device name table */
device_name_table = (rtems_device_name_t *)pathloc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
423c2: 4eb9 0004 b8c0 jsr 4b8c0 <__errno> <== NOT EXECUTED
423c8: 760e moveq #14,%d3 <== NOT EXECUTED
423ca: 2040 moveal %d0,%a0 <== NOT EXECUTED
423cc: 70ff moveq #-1,%d0 <== NOT EXECUTED
423ce: 2083 movel %d3,%a0@ <== NOT EXECUTED
device_name_table[slot].minor = minor;
device_name_table[slot].mode = mode;
_ISR_Enable(level);
return 0;
}
423d0: 4cee 1cfc ffdc moveml %fp@(-36),%d2-%d7/%a2-%a4 <== NOT EXECUTED
423d6: 4e5e unlk %fp <== NOT EXECUTED
...
000424f0 <devFS_read>:
ssize_t devFS_read(
rtems_libio_t *iop,
void *buffer,
size_t count
)
{
424f0: 4e56 ffe4 linkw %fp,#-28 <== NOT EXECUTED
424f4: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
args.buffer = buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_read(
424f8: 486e ffe4 pea %fp@(-28) <== NOT EXECUTED
{
rtems_libio_rw_args_t args;
rtems_status_code status;
rtems_device_name_t *np;
np = (rtems_device_name_t *)iop->pathinfo.node_access;
424fc: 2268 0018 moveal %a0@(24),%a1 <== NOT EXECUTED
args.buffer = buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_read(
42500: 2f29 000c movel %a1@(12),%sp@- <== NOT EXECUTED
args.iop = iop;
args.offset = iop->offset;
args.buffer = buffer;
args.count = count;
args.flags = iop->flags;
42504: 2d68 0014 fff8 movel %a0@(20),%fp@(-8) <== NOT EXECUTED
args.bytes_moved = 0;
status = rtems_io_read(
4250a: 2f29 0008 movel %a1@(8),%sp@- <== NOT EXECUTED
np = (rtems_device_name_t *)iop->pathinfo.node_access;
args.iop = iop;
args.offset = iop->offset;
args.buffer = buffer;
4250e: 2d6e 000c fff0 movel %fp@(12),%fp@(-16) <== NOT EXECUTED
args.count = count;
42514: 2d6e 0010 fff4 movel %fp@(16),%fp@(-12) <== NOT EXECUTED
rtems_device_name_t *np;
np = (rtems_device_name_t *)iop->pathinfo.node_access;
args.iop = iop;
args.offset = iop->offset;
4251a: 2028 000c movel %a0@(12),%d0 <== NOT EXECUTED
4251e: 2228 0010 movel %a0@(16),%d1 <== NOT EXECUTED
rtems_status_code status;
rtems_device_name_t *np;
np = (rtems_device_name_t *)iop->pathinfo.node_access;
args.iop = iop;
42522: 2d48 ffe4 movel %a0,%fp@(-28) <== NOT EXECUTED
args.offset = iop->offset;
args.buffer = buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
42526: 42ae fffc clrl %fp@(-4) <== NOT EXECUTED
rtems_device_name_t *np;
np = (rtems_device_name_t *)iop->pathinfo.node_access;
args.iop = iop;
args.offset = iop->offset;
4252a: 2d40 ffe8 movel %d0,%fp@(-24) <== NOT EXECUTED
4252e: 2d41 ffec movel %d1,%fp@(-20) <== NOT EXECUTED
args.buffer = buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_read(
42532: 4eb9 0004 6a68 jsr 46a68 <rtems_io_read> <== NOT EXECUTED
np->major,
np->minor,
(void *) &args
);
if ( status )
42538: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4253c: 4a80 tstl %d0 <== NOT EXECUTED
4253e: 6608 bnes 42548 <devFS_read+0x58> <== NOT EXECUTED
return rtems_deviceio_errno(status);
return (ssize_t) args.bytes_moved;
42540: 202e fffc movel %fp@(-4),%d0 <== NOT EXECUTED
}
42544: 4e5e unlk %fp <== NOT EXECUTED
42546: 4e75 rts <== NOT EXECUTED
np->minor,
(void *) &args
);
if ( status )
return rtems_deviceio_errno(status);
42548: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4254a: 4eb9 0004 9bc0 jsr 49bc0 <rtems_deviceio_errno> <== NOT EXECUTED
42550: 588f addql #4,%sp <== NOT EXECUTED
return (ssize_t) args.bytes_moved;
}
42552: 4e5e unlk %fp <== NOT EXECUTED
...
00042558 <devFS_stat>:
int devFS_stat(
rtems_filesystem_location_info_t *loc,
struct stat *buf
)
{
42558: 4e56 0000 linkw %fp,#0
rtems_device_name_t *the_dev;
the_dev = (rtems_device_name_t *)loc->node_access;
4255c: 206e 0008 moveal %fp@(8),%a0
int devFS_stat(
rtems_filesystem_location_info_t *loc,
struct stat *buf
)
{
42560: 226e 000c moveal %fp@(12),%a1
rtems_device_name_t *the_dev;
the_dev = (rtems_device_name_t *)loc->node_access;
42564: 2050 moveal %a0@,%a0
if (!the_dev)
42566: 4a88 tstl %a0
42568: 671a beqs 42584 <devFS_stat+0x2c> <== NEVER TAKEN
rtems_set_errno_and_return_minus_one( EFAULT );
buf->st_rdev = rtems_filesystem_make_dev_t( the_dev->major, the_dev->minor );
4256a: 2228 000c movel %a0@(12),%d1
buf->st_mode = the_dev->mode;
return 0;
4256e: 4280 clrl %d0
}
42570: 4e5e unlk %fp
the_dev = (rtems_device_name_t *)loc->node_access;
if (!the_dev)
rtems_set_errno_and_return_minus_one( EFAULT );
buf->st_rdev = rtems_filesystem_make_dev_t( the_dev->major, the_dev->minor );
42572: 2368 0008 0016 movel %a0@(8),%a1@(22)
buf->st_mode = the_dev->mode;
42578: 2368 0010 000c movel %a0@(16),%a1@(12)
the_dev = (rtems_device_name_t *)loc->node_access;
if (!the_dev)
rtems_set_errno_and_return_minus_one( EFAULT );
buf->st_rdev = rtems_filesystem_make_dev_t( the_dev->major, the_dev->minor );
4257e: 2341 001a movel %d1,%a1@(26)
buf->st_mode = the_dev->mode;
return 0;
}
42582: 4e75 rts
{
rtems_device_name_t *the_dev;
the_dev = (rtems_device_name_t *)loc->node_access;
if (!the_dev)
rtems_set_errno_and_return_minus_one( EFAULT );
42584: 4eb9 0004 b8c0 jsr 4b8c0 <__errno> <== NOT EXECUTED
4258a: 720e moveq #14,%d1 <== NOT EXECUTED
4258c: 2040 moveal %d0,%a0 <== NOT EXECUTED
4258e: 70ff moveq #-1,%d0 <== NOT EXECUTED
buf->st_rdev = rtems_filesystem_make_dev_t( the_dev->major, the_dev->minor );
buf->st_mode = the_dev->mode;
return 0;
}
42590: 4e5e unlk %fp <== NOT EXECUTED
{
rtems_device_name_t *the_dev;
the_dev = (rtems_device_name_t *)loc->node_access;
if (!the_dev)
rtems_set_errno_and_return_minus_one( EFAULT );
42592: 2081 movel %d1,%a0@ <== NOT EXECUTED
buf->st_rdev = rtems_filesystem_make_dev_t( the_dev->major, the_dev->minor );
buf->st_mode = the_dev->mode;
return 0;
}
...
00042598 <devFS_write>:
ssize_t devFS_write(
rtems_libio_t *iop,
const void *buffer,
size_t count
)
{
42598: 4e56 ffe4 linkw %fp,#-28
4259c: 206e 0008 moveal %fp@(8),%a0
args.buffer = (void *) buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_write(
425a0: 486e ffe4 pea %fp@(-28)
{
rtems_libio_rw_args_t args;
rtems_status_code status;
rtems_device_name_t *np;
np = (rtems_device_name_t *)iop->pathinfo.node_access;
425a4: 2268 0018 moveal %a0@(24),%a1
args.buffer = (void *) buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_write(
425a8: 2f29 000c movel %a1@(12),%sp@-
args.iop = iop;
args.offset = iop->offset;
args.buffer = (void *) buffer;
args.count = count;
args.flags = iop->flags;
425ac: 2d68 0014 fff8 movel %a0@(20),%fp@(-8)
args.bytes_moved = 0;
status = rtems_io_write(
425b2: 2f29 0008 movel %a1@(8),%sp@-
np = (rtems_device_name_t *)iop->pathinfo.node_access;
args.iop = iop;
args.offset = iop->offset;
args.buffer = (void *) buffer;
425b6: 2d6e 000c fff0 movel %fp@(12),%fp@(-16)
args.count = count;
425bc: 2d6e 0010 fff4 movel %fp@(16),%fp@(-12)
rtems_device_name_t *np;
np = (rtems_device_name_t *)iop->pathinfo.node_access;
args.iop = iop;
args.offset = iop->offset;
425c2: 2028 000c movel %a0@(12),%d0
425c6: 2228 0010 movel %a0@(16),%d1
rtems_status_code status;
rtems_device_name_t *np;
np = (rtems_device_name_t *)iop->pathinfo.node_access;
args.iop = iop;
425ca: 2d48 ffe4 movel %a0,%fp@(-28)
args.offset = iop->offset;
args.buffer = (void *) buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
425ce: 42ae fffc clrl %fp@(-4)
rtems_device_name_t *np;
np = (rtems_device_name_t *)iop->pathinfo.node_access;
args.iop = iop;
args.offset = iop->offset;
425d2: 2d40 ffe8 movel %d0,%fp@(-24)
425d6: 2d41 ffec movel %d1,%fp@(-20)
args.buffer = (void *) buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_write(
425da: 4eb9 0004 6ab0 jsr 46ab0 <rtems_io_write>
np->major,
np->minor,
(void *) &args
);
if ( status )
425e0: 4fef 000c lea %sp@(12),%sp
425e4: 4a80 tstl %d0
425e6: 6608 bnes 425f0 <devFS_write+0x58> <== NEVER TAKEN
return rtems_deviceio_errno(status);
return (ssize_t) args.bytes_moved;
425e8: 202e fffc movel %fp@(-4),%d0
}
425ec: 4e5e unlk %fp
425ee: 4e75 rts
np->minor,
(void *) &args
);
if ( status )
return rtems_deviceio_errno(status);
425f0: 2f00 movel %d0,%sp@- <== NOT EXECUTED
425f2: 4eb9 0004 9bc0 jsr 49bc0 <rtems_deviceio_errno> <== NOT EXECUTED
425f8: 588f addql #4,%sp <== NOT EXECUTED
return (ssize_t) args.bytes_moved;
}
425fa: 4e5e unlk %fp <== NOT EXECUTED
...
0004d186 <device_ftruncate>:
rtems_libio_t *iop,
rtems_off64_t length
)
{
return 0;
}
4d186: 4280 clrl %d0 <== NOT EXECUTED
int device_ftruncate(
rtems_libio_t *iop,
rtems_off64_t length
)
{
4d188: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return 0;
}
4d18c: 4e5e unlk %fp <== NOT EXECUTED
0004d12a <device_ioctl>:
int device_ioctl(
rtems_libio_t *iop,
uint32_t command,
void *buffer
)
{
4d12a: 4e56 fff0 linkw %fp,#-16
4d12e: 206e 0008 moveal %fp@(8),%a0
args.command = command;
args.buffer = buffer;
the_jnode = iop->pathinfo.node_access;
status = rtems_io_control(
4d132: 486e fff0 pea %fp@(-16)
args.iop = iop;
args.command = command;
args.buffer = buffer;
the_jnode = iop->pathinfo.node_access;
4d136: 2268 0018 moveal %a0@(24),%a1
status = rtems_io_control(
4d13a: 2f29 0050 movel %a1@(80),%sp@-
rtems_libio_ioctl_args_t args;
rtems_status_code status;
IMFS_jnode_t *the_jnode;
args.iop = iop;
args.command = command;
4d13e: 2d6e 000c fff4 movel %fp@(12),%fp@(-12)
args.buffer = buffer;
the_jnode = iop->pathinfo.node_access;
status = rtems_io_control(
4d144: 2f29 004c movel %a1@(76),%sp@-
rtems_status_code status;
IMFS_jnode_t *the_jnode;
args.iop = iop;
args.command = command;
args.buffer = buffer;
4d148: 2d6e 0010 fff8 movel %fp@(16),%fp@(-8)
{
rtems_libio_ioctl_args_t args;
rtems_status_code status;
IMFS_jnode_t *the_jnode;
args.iop = iop;
4d14e: 2d48 fff0 movel %a0,%fp@(-16)
args.command = command;
args.buffer = buffer;
the_jnode = iop->pathinfo.node_access;
status = rtems_io_control(
4d152: 4eb9 0004 d784 jsr 4d784 <rtems_io_control>
the_jnode->info.device.major,
the_jnode->info.device.minor,
(void *) &args
);
if ( status )
4d158: 4fef 000c lea %sp@(12),%sp
4d15c: 4a80 tstl %d0
4d15e: 6608 bnes 4d168 <device_ioctl+0x3e> <== NEVER TAKEN
return rtems_deviceio_errno(status);
return args.ioctl_return;
4d160: 202e fffc movel %fp@(-4),%d0
}
4d164: 4e5e unlk %fp
4d166: 4e75 rts
the_jnode->info.device.minor,
(void *) &args
);
if ( status )
return rtems_deviceio_errno(status);
4d168: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4d16a: 4eb9 0004 d9f0 jsr 4d9f0 <rtems_deviceio_errno> <== NOT EXECUTED
4d170: 588f addql #4,%sp <== NOT EXECUTED
return args.ioctl_return;
}
4d172: 4e5e unlk %fp <== NOT EXECUTED
0004d05e <device_read>:
ssize_t device_read(
rtems_libio_t *iop,
void *buffer,
size_t count
)
{
4d05e: 4e56 ffe4 linkw %fp,#-28
4d062: 206e 0008 moveal %fp@(8),%a0
args.buffer = buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_read(
4d066: 486e ffe4 pea %fp@(-28)
{
rtems_libio_rw_args_t args;
rtems_status_code status;
IMFS_jnode_t *the_jnode;
the_jnode = iop->pathinfo.node_access;
4d06a: 2268 0018 moveal %a0@(24),%a1
args.buffer = buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_read(
4d06e: 2f29 0050 movel %a1@(80),%sp@-
args.iop = iop;
args.offset = iop->offset;
args.buffer = buffer;
args.count = count;
args.flags = iop->flags;
4d072: 2d68 0014 fff8 movel %a0@(20),%fp@(-8)
args.bytes_moved = 0;
status = rtems_io_read(
4d078: 2f29 004c movel %a1@(76),%sp@-
the_jnode = iop->pathinfo.node_access;
args.iop = iop;
args.offset = iop->offset;
args.buffer = buffer;
4d07c: 2d6e 000c fff0 movel %fp@(12),%fp@(-16)
args.count = count;
4d082: 2d6e 0010 fff4 movel %fp@(16),%fp@(-12)
IMFS_jnode_t *the_jnode;
the_jnode = iop->pathinfo.node_access;
args.iop = iop;
args.offset = iop->offset;
4d088: 2028 000c movel %a0@(12),%d0
4d08c: 2228 0010 movel %a0@(16),%d1
rtems_status_code status;
IMFS_jnode_t *the_jnode;
the_jnode = iop->pathinfo.node_access;
args.iop = iop;
4d090: 2d48 ffe4 movel %a0,%fp@(-28)
args.offset = iop->offset;
args.buffer = buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
4d094: 42ae fffc clrl %fp@(-4)
IMFS_jnode_t *the_jnode;
the_jnode = iop->pathinfo.node_access;
args.iop = iop;
args.offset = iop->offset;
4d098: 2d40 ffe8 movel %d0,%fp@(-24)
4d09c: 2d41 ffec movel %d1,%fp@(-20)
args.buffer = buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_read(
4d0a0: 4eb9 0004 d814 jsr 4d814 <rtems_io_read>
the_jnode->info.device.major,
the_jnode->info.device.minor,
(void *) &args
);
if ( status )
4d0a6: 4fef 000c lea %sp@(12),%sp
4d0aa: 4a80 tstl %d0
4d0ac: 6608 bnes 4d0b6 <device_read+0x58> <== NEVER TAKEN
return rtems_deviceio_errno(status);
return (ssize_t) args.bytes_moved;
4d0ae: 202e fffc movel %fp@(-4),%d0
}
4d0b2: 4e5e unlk %fp
4d0b4: 4e75 rts
the_jnode->info.device.minor,
(void *) &args
);
if ( status )
return rtems_deviceio_errno(status);
4d0b6: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4d0b8: 4eb9 0004 d9f0 jsr 4d9f0 <rtems_deviceio_errno> <== NOT EXECUTED
4d0be: 588f addql #4,%sp <== NOT EXECUTED
return (ssize_t) args.bytes_moved;
}
4d0c0: 4e5e unlk %fp <== NOT EXECUTED
0004d0c4 <device_write>:
ssize_t device_write(
rtems_libio_t *iop,
const void *buffer,
size_t count
)
{
4d0c4: 4e56 ffe4 linkw %fp,#-28
4d0c8: 206e 0008 moveal %fp@(8),%a0
args.buffer = (void *) buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_write(
4d0cc: 486e ffe4 pea %fp@(-28)
{
rtems_libio_rw_args_t args;
rtems_status_code status;
IMFS_jnode_t *the_jnode;
the_jnode = iop->pathinfo.node_access;
4d0d0: 2268 0018 moveal %a0@(24),%a1
args.buffer = (void *) buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_write(
4d0d4: 2f29 0050 movel %a1@(80),%sp@-
args.iop = iop;
args.offset = iop->offset;
args.buffer = (void *) buffer;
args.count = count;
args.flags = iop->flags;
4d0d8: 2d68 0014 fff8 movel %a0@(20),%fp@(-8)
args.bytes_moved = 0;
status = rtems_io_write(
4d0de: 2f29 004c movel %a1@(76),%sp@-
the_jnode = iop->pathinfo.node_access;
args.iop = iop;
args.offset = iop->offset;
args.buffer = (void *) buffer;
4d0e2: 2d6e 000c fff0 movel %fp@(12),%fp@(-16)
args.count = count;
4d0e8: 2d6e 0010 fff4 movel %fp@(16),%fp@(-12)
IMFS_jnode_t *the_jnode;
the_jnode = iop->pathinfo.node_access;
args.iop = iop;
args.offset = iop->offset;
4d0ee: 2028 000c movel %a0@(12),%d0
4d0f2: 2228 0010 movel %a0@(16),%d1
rtems_status_code status;
IMFS_jnode_t *the_jnode;
the_jnode = iop->pathinfo.node_access;
args.iop = iop;
4d0f6: 2d48 ffe4 movel %a0,%fp@(-28)
args.offset = iop->offset;
args.buffer = (void *) buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
4d0fa: 42ae fffc clrl %fp@(-4)
IMFS_jnode_t *the_jnode;
the_jnode = iop->pathinfo.node_access;
args.iop = iop;
args.offset = iop->offset;
4d0fe: 2d40 ffe8 movel %d0,%fp@(-24)
4d102: 2d41 ffec movel %d1,%fp@(-20)
args.buffer = (void *) buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_write(
4d106: 4eb9 0004 d85c jsr 4d85c <rtems_io_write>
the_jnode->info.device.major,
the_jnode->info.device.minor,
(void *) &args
);
if ( status )
4d10c: 4fef 000c lea %sp@(12),%sp
4d110: 4a80 tstl %d0
4d112: 6608 bnes 4d11c <device_write+0x58> <== NEVER TAKEN
return rtems_deviceio_errno(status);
return (ssize_t) args.bytes_moved;
4d114: 202e fffc movel %fp@(-4),%d0
}
4d118: 4e5e unlk %fp
4d11a: 4e75 rts
the_jnode->info.device.minor,
(void *) &args
);
if ( status )
return rtems_deviceio_errno(status);
4d11c: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4d11e: 4eb9 0004 d9f0 jsr 4d9f0 <rtems_deviceio_errno> <== NOT EXECUTED
4d124: 588f addql #4,%sp <== NOT EXECUTED
return (ssize_t) args.bytes_moved;
}
4d126: 4e5e unlk %fp <== NOT EXECUTED
00043e84 <drainOutput>:
/*
* Drain output queue
*/
static void
drainOutput (struct rtems_termios_tty *tty)
{
43e84: 4e56 fff4 linkw %fp,#-12
43e88: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
43e8c: 246e 0008 moveal %fp@(8),%a2
rtems_interrupt_level level;
rtems_status_code sc;
if (tty->device.outputUsesInterrupts != TERMIOS_POLLED) {
43e90: 4aaa 00b4 tstl %a2@(180)
43e94: 6750 beqs 43ee6 <drainOutput+0x62>
rtems_interrupt_disable (level);
43e96: 243c 0000 0700 movel #1792,%d2
43e9c: 2002 movel %d2,%d0
43e9e: 40c1 movew %sr,%d1
43ea0: 8081 orl %d1,%d0
43ea2: 46c0 movew %d0,%sr
while (tty->rawOutBuf.Tail != tty->rawOutBuf.Head) {
43ea4: 206a 0084 moveal %a2@(132),%a0
43ea8: 202a 0080 movel %a2@(128),%d0
43eac: b088 cmpl %a0,%d0
43eae: 6734 beqs 43ee4 <drainOutput+0x60>
43eb0: 47f9 0004 6648 lea 46648 <rtems_semaphore_obtain>,%a3
tty->rawOutBufState = rob_wait;
43eb6: 7002 moveq #2,%d0
43eb8: 2540 0094 movel %d0,%a2@(148)
rtems_interrupt_enable (level);
43ebc: 46c1 movew %d1,%sr
sc = rtems_semaphore_obtain(
43ebe: 42a7 clrl %sp@-
43ec0: 42a7 clrl %sp@-
43ec2: 2f2a 008c movel %a2@(140),%sp@-
43ec6: 4e93 jsr %a3@
tty->rawOutBuf.Semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
43ec8: 4fef 000c lea %sp@(12),%sp
43ecc: 4a80 tstl %d0
43ece: 6620 bnes 43ef0 <drainOutput+0x6c> <== NEVER TAKEN
rtems_fatal_error_occurred (sc);
rtems_interrupt_disable (level);
43ed0: 2002 movel %d2,%d0
43ed2: 40c1 movew %sr,%d1
43ed4: 8081 orl %d1,%d0
43ed6: 46c0 movew %d0,%sr
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) {
43ed8: 206a 0084 moveal %a2@(132),%a0
43edc: 202a 0080 movel %a2@(128),%d0
43ee0: b088 cmpl %a0,%d0
43ee2: 66d2 bnes 43eb6 <drainOutput+0x32>
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);
43ee4: 46c1 movew %d1,%sr
}
}
43ee6: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3
43eec: 4e5e unlk %fp
43eee: 4e75 rts
tty->rawOutBufState = rob_wait;
rtems_interrupt_enable (level);
sc = rtems_semaphore_obtain(
tty->rawOutBuf.Semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
43ef0: 2f00 movel %d0,%sp@- <== NOT EXECUTED
43ef2: 4eb9 0004 6d6c jsr 46d6c <rtems_fatal_error_occurred> <== NOT EXECUTED
00043330 <dup2>:
int dup2(
int fildes,
int fildes2
)
{
43330: 4e56 ffac linkw %fp,#-84
43334: 48d7 040c moveml %d2-%d3/%a2,%sp@
/*
* If fildes is not valid, then fildes2 should not be closed.
*/
status = fstat( fildes, &buf );
43338: 240e movel %fp,%d2
4333a: 0682 ffff ffba addil #-70,%d2
43340: 45f9 0004 3c30 lea 43c30 <fstat>,%a2
43346: 2f02 movel %d2,%sp@-
int dup2(
int fildes,
int fildes2
)
{
43348: 262e 0008 movel %fp@(8),%d3
/*
* If fildes is not valid, then fildes2 should not be closed.
*/
status = fstat( fildes, &buf );
4334c: 2f03 movel %d3,%sp@-
4334e: 4e92 jsr %a2@
if ( status == -1 )
43350: 508f addql #8,%sp
43352: 72ff moveq #-1,%d1
43354: b280 cmpl %d0,%d1
43356: 660c bnes 43364 <dup2+0x34> <== ALWAYS TAKEN
* If fildes2 is not valid, then we should not do anything either.
*/
status = fstat( fildes2, &buf );
if ( status == -1 )
return -1;
43358: 70ff moveq #-1,%d0
/*
* This fcntl handles everything else.
*/
return fcntl( fildes, F_DUPFD, fildes2 );
}
4335a: 4cee 040c ffac moveml %fp@(-84),%d2-%d3/%a2
43360: 4e5e unlk %fp
43362: 4e75 rts
/*
* If fildes2 is not valid, then we should not do anything either.
*/
status = fstat( fildes2, &buf );
43364: 2f02 movel %d2,%sp@-
43366: 2f2e 000c movel %fp@(12),%sp@-
4336a: 4e92 jsr %a2@
if ( status == -1 )
4336c: 508f addql #8,%sp
4336e: 72ff moveq #-1,%d1
43370: b280 cmpl %d0,%d1
43372: 67e4 beqs 43358 <dup2+0x28> <== ALWAYS TAKEN
/*
* This fcntl handles everything else.
*/
return fcntl( fildes, F_DUPFD, fildes2 );
43374: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
43378: 42a7 clrl %sp@- <== NOT EXECUTED
4337a: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4337c: 4eb9 0004 37d4 jsr 437d4 <fcntl> <== NOT EXECUTED
43382: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
}
43386: 4cee 040c ffac moveml %fp@(-84),%d2-%d3/%a2 <== NOT EXECUTED
4338c: 4e5e unlk %fp <== NOT EXECUTED
00044bc4 <echo>:
/*
* Echo a typed character
*/
static void
echo (unsigned char c, struct rtems_termios_tty *tty)
{
44bc4: 4e56 fffc linkw %fp,#-4
44bc8: 222e 0008 movel %fp@(8),%d1
44bcc: 2f0a movel %a2,%sp@-
44bce: 246e 000c moveal %fp@(12),%a2
44bd2: 2f02 movel %d2,%sp@-
if ((tty->termios.c_lflag & ECHOCTL) &&
44bd4: 242a 003c movel %a2@(60),%d2
44bd8: 0282 0000 0200 andil #512,%d2
/*
* Echo a typed character
*/
static void
echo (unsigned char c, struct rtems_termios_tty *tty)
{
44bde: 1001 moveb %d1,%d0
if ((tty->termios.c_lflag & ECHOCTL) &&
44be0: 4a82 tstl %d2
44be2: 673e beqs 44c22 <echo+0x5e> <== NEVER TAKEN
iscntrl(c) && (c != '\t') && (c != '\n')) {
44be4: 1001 moveb %d1,%d0
44be6: 2079 0005 cddc moveal 5cddc <__ctype_ptr__>,%a0
44bec: 0280 0000 00ff andil #255,%d0
44bf2: 1430 0801 moveb %a0@(00000001,%d0:l),%d2
44bf6: 49c2 extbl %d2
* Echo a typed character
*/
static void
echo (unsigned char c, struct rtems_termios_tty *tty)
{
if ((tty->termios.c_lflag & ECHOCTL) &&
44bf8: 0802 0005 btst #5,%d2
44bfc: 670e beqs 44c0c <echo+0x48>
iscntrl(c) && (c != '\t') && (c != '\n')) {
44bfe: 7409 moveq #9,%d2
44c00: b480 cmpl %d0,%d2
44c02: 6708 beqs 44c0c <echo+0x48>
44c04: 143c 000a moveb #10,%d2
44c08: b480 cmpl %d0,%d2
44c0a: 662a bnes 44c36 <echo+0x72>
echobuf[0] = '^';
echobuf[1] = c ^ 0x40;
rtems_termios_puts (echobuf, 2, tty);
tty->column += 2;
} else {
oproc (c, tty);
44c0c: 2f0a movel %a2,%sp@-
44c0e: 2f00 movel %d0,%sp@-
44c10: 4eba fdd4 jsr %pc@(449e6 <oproc>)
44c14: 508f addql #8,%sp
}
}
44c16: 242e fff4 movel %fp@(-12),%d2
44c1a: 246e fff8 moveal %fp@(-8),%a2
44c1e: 4e5e unlk %fp
44c20: 4e75 rts
44c22: 1001 moveb %d1,%d0 <== NOT EXECUTED
echobuf[0] = '^';
echobuf[1] = c ^ 0x40;
rtems_termios_puts (echobuf, 2, tty);
tty->column += 2;
} else {
oproc (c, tty);
44c24: 2f0a movel %a2,%sp@- <== NOT EXECUTED
44c26: 0280 0000 00ff andil #255,%d0 <== NOT EXECUTED
44c2c: 2f00 movel %d0,%sp@- <== NOT EXECUTED
44c2e: 4eba fdb6 jsr %pc@(449e6 <oproc>) <== NOT EXECUTED
44c32: 508f addql #8,%sp <== NOT EXECUTED
44c34: 60e0 bras 44c16 <echo+0x52> <== NOT EXECUTED
iscntrl(c) && (c != '\t') && (c != '\n')) {
char echobuf[2];
echobuf[0] = '^';
echobuf[1] = c ^ 0x40;
rtems_termios_puts (echobuf, 2, tty);
44c36: 2f0a movel %a2,%sp@-
44c38: 4878 0002 pea 2 <DOUBLE_FLOAT>
if ((tty->termios.c_lflag & ECHOCTL) &&
iscntrl(c) && (c != '\t') && (c != '\n')) {
char echobuf[2];
echobuf[0] = '^';
echobuf[1] = c ^ 0x40;
44c3c: 7040 moveq #64,%d0
rtems_termios_puts (echobuf, 2, tty);
44c3e: 486e fffe pea %fp@(-2)
if ((tty->termios.c_lflag & ECHOCTL) &&
iscntrl(c) && (c != '\t') && (c != '\n')) {
char echobuf[2];
echobuf[0] = '^';
echobuf[1] = c ^ 0x40;
44c42: b181 eorl %d0,%d1
{
if ((tty->termios.c_lflag & ECHOCTL) &&
iscntrl(c) && (c != '\t') && (c != '\n')) {
char echobuf[2];
echobuf[0] = '^';
44c44: 745e moveq #94,%d2
echobuf[1] = c ^ 0x40;
44c46: 1d41 ffff moveb %d1,%fp@(-1)
{
if ((tty->termios.c_lflag & ECHOCTL) &&
iscntrl(c) && (c != '\t') && (c != '\n')) {
char echobuf[2];
echobuf[0] = '^';
44c4a: 1d42 fffe moveb %d2,%fp@(-2)
echobuf[1] = c ^ 0x40;
rtems_termios_puts (echobuf, 2, tty);
44c4e: 4eb9 0004 48e2 jsr 448e2 <rtems_termios_puts>
tty->column += 2;
} else {
oproc (c, tty);
}
}
44c54: 242e fff4 movel %fp@(-12),%d2
char echobuf[2];
echobuf[0] = '^';
echobuf[1] = c ^ 0x40;
rtems_termios_puts (echobuf, 2, tty);
tty->column += 2;
44c58: 54aa 0028 addql #2,%a2@(40)
*/
static void
echo (unsigned char c, struct rtems_termios_tty *tty)
{
if ((tty->termios.c_lflag & ECHOCTL) &&
iscntrl(c) && (c != '\t') && (c != '\n')) {
44c5c: 4fef 000c lea %sp@(12),%sp
rtems_termios_puts (echobuf, 2, tty);
tty->column += 2;
} else {
oproc (c, tty);
}
}
44c60: 246e fff8 moveal %fp@(-8),%a2
44c64: 4e5e unlk %fp <== NOT EXECUTED
00043dae <endgrent>:
void endgrent(void)
{
43dae: 4e56 0000 linkw %fp,#0
if (group_fp != NULL)
43db2: 2039 0005 f5b4 movel 5f5b4 <group_fp>,%d0
43db8: 670a beqs 43dc4 <endgrent+0x16> <== NEVER TAKEN
fclose(group_fp);
43dba: 2f00 movel %d0,%sp@-
43dbc: 4eb9 0004 eace jsr 4eace <fclose>
43dc2: 588f addql #4,%sp
}
43dc4: 4e5e unlk %fp <== NOT EXECUTED
00043c62 <endpwent>:
void endpwent(void)
{
43c62: 4e56 0000 linkw %fp,#0
if (passwd_fp != NULL)
43c66: 2039 0005 f68e movel 5f68e <passwd_fp>,%d0
43c6c: 670a beqs 43c78 <endpwent+0x16> <== NEVER TAKEN
fclose(passwd_fp);
43c6e: 2f00 movel %d0,%sp@-
43c70: 4eb9 0004 eace jsr 4eace <fclose>
43c76: 588f addql #4,%sp
}
43c78: 4e5e unlk %fp <== NOT EXECUTED
00044c68 <erase>:
* 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)
{
44c68: 4e56 ffe4 linkw %fp,#-28
44c6c: 48d7 0c7c moveml %d2-%d6/%a2-%a3,%sp@
44c70: 246e 0008 moveal %fp@(8),%a2
44c74: 282e 000c movel %fp@(12),%d4
if (tty->ccount == 0)
44c78: 202a 0020 movel %a2@(32),%d0
44c7c: 6734 beqs 44cb2 <erase+0x4a>
return;
if (lineFlag) {
44c7e: 4a84 tstl %d4
44c80: 673a beqs 44cbc <erase+0x54>
if (!(tty->termios.c_lflag & ECHO)) {
44c82: 262a 003c movel %a2@(60),%d3
44c86: 7208 moveq #8,%d1
44c88: c283 andl %d3,%d1
44c8a: 6700 01b0 beqw 44e3c <erase+0x1d4>
tty->ccount = 0;
return;
}
if (!(tty->termios.c_lflag & ECHOE)) {
44c8e: 0803 0004 btst #4,%d3
44c92: 6630 bnes 44cc4 <erase+0x5c> <== ALWAYS TAKEN
tty->ccount = 0;
echo (tty->termios.c_cc[VKILL], tty);
44c94: 2f0a movel %a2,%sp@- <== NOT EXECUTED
44c96: 4280 clrl %d0 <== NOT EXECUTED
44c98: 102a 0044 moveb %a2@(68),%d0 <== NOT EXECUTED
if (!(tty->termios.c_lflag & ECHO)) {
tty->ccount = 0;
return;
}
if (!(tty->termios.c_lflag & ECHOE)) {
tty->ccount = 0;
44c9c: 42aa 0020 clrl %a2@(32) <== NOT EXECUTED
echo (tty->termios.c_cc[VKILL], tty);
44ca0: 2f00 movel %d0,%sp@- <== NOT EXECUTED
44ca2: 4eba ff20 jsr %pc@(44bc4 <echo>) <== NOT EXECUTED
if (tty->termios.c_lflag & ECHOK)
44ca6: 508f addql #8,%sp <== NOT EXECUTED
44ca8: 7020 moveq #32,%d0 <== NOT EXECUTED
44caa: c0aa 003c andl %a2@(60),%d0 <== NOT EXECUTED
44cae: 6600 019a bnew 44e4a <erase+0x1e2> <== NOT EXECUTED
}
}
if (!lineFlag)
break;
}
}
44cb2: 4cee 0c7c ffe4 moveml %fp@(-28),%d2-%d6/%a2-%a3
44cb8: 4e5e unlk %fp
44cba: 4e75 rts
echo ('\n', tty);
return;
}
}
while (tty->ccount) {
44cbc: 262a 003c movel %a2@(60),%d3
44cc0: 7208 moveq #8,%d1
44cc2: c283 andl %d3,%d1
44cc4: 47f9 0004 48e2 lea 448e2 <rtems_termios_puts>,%a3
unsigned char c = tty->cbuf[--tty->ccount];
44cca: 5380 subql #1,%d0
44ccc: 206a 001c moveal %a2@(28),%a0
44cd0: 2540 0020 movel %d0,%a2@(32)
44cd4: 1430 0800 moveb %a0@(00000000,%d0:l),%d2
if (tty->termios.c_lflag & ECHO) {
44cd8: 4a81 tstl %d1
44cda: 6734 beqs 44d10 <erase+0xa8> <== NEVER TAKEN
if (!lineFlag && !(tty->termios.c_lflag & ECHOE)) {
44cdc: 4a84 tstl %d4
44cde: 6608 bnes 44ce8 <erase+0x80>
44ce0: 0803 0004 btst #4,%d3
44ce4: 6700 013c beqw 44e22 <erase+0x1ba>
echo (tty->termios.c_cc[VERASE], tty);
} else if (c == '\t') {
44ce8: 7209 moveq #9,%d1
44cea: 0282 0000 00ff andil #255,%d2
44cf0: b282 cmpl %d2,%d1
44cf2: 6700 0090 beqw 44d84 <erase+0x11c>
rtems_termios_puts ("\b", 1, tty);
tty->column--;
}
}
else {
if (iscntrl (c) && (tty->termios.c_lflag & ECHOCTL)) {
44cf6: 2079 0005 cddc moveal 5cddc <__ctype_ptr__>,%a0
44cfc: 5282 addql #1,%d2
44cfe: 1030 2800 moveb %a0@(00000000,%d2:l),%d0
44d02: 49c0 extbl %d0
44d04: 0800 0005 btst #5,%d0
44d08: 6756 beqs 44d60 <erase+0xf8> <== ALWAYS TAKEN
44d0a: 0803 0009 btst #9,%d3 <== NOT EXECUTED
44d0e: 6614 bnes 44d24 <erase+0xbc> <== NOT EXECUTED
if (tty->column)
tty->column--;
}
}
}
if (!lineFlag)
44d10: 4a84 tstl %d4
44d12: 679e beqs 44cb2 <erase+0x4a>
echo ('\n', tty);
return;
}
}
while (tty->ccount) {
44d14: 202a 0020 movel %a2@(32),%d0
44d18: 6798 beqs 44cb2 <erase+0x4a>
}
if (!(tty->termios.c_lflag & ECHOE)) {
tty->ccount = 0;
echo (tty->termios.c_cc[VKILL], tty);
if (tty->termios.c_lflag & ECHOK)
echo ('\n', tty);
44d1a: 262a 003c movel %a2@(60),%d3
44d1e: 7208 moveq #8,%d1
44d20: c283 andl %d3,%d1
44d22: 60a6 bras 44cca <erase+0x62>
tty->column--;
}
}
else {
if (iscntrl (c) && (tty->termios.c_lflag & ECHOCTL)) {
rtems_termios_puts ("\b \b", 3, tty);
44d24: 2f0a movel %a2,%sp@- <== NOT EXECUTED
44d26: 4878 0003 pea 3 <DIVIDE> <== NOT EXECUTED
44d2a: 4879 0005 bf31 pea 5bf31 <rtems_filesystem_default_pathconf+0x3d><== NOT EXECUTED
44d30: 4e93 jsr %a3@ <== NOT EXECUTED
if (tty->column)
44d32: 202a 0028 movel %a2@(40),%d0 <== NOT EXECUTED
44d36: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
44d3a: 6706 beqs 44d42 <erase+0xda> <== NOT EXECUTED
tty->column--;
44d3c: 5380 subql #1,%d0 <== NOT EXECUTED
44d3e: 2540 0028 movel %d0,%a2@(40) <== NOT EXECUTED
}
if (!iscntrl (c) || (tty->termios.c_lflag & ECHOCTL)) {
44d42: 2079 0005 cddc moveal 5cddc <__ctype_ptr__>,%a0 <== NOT EXECUTED
44d48: 1030 2800 moveb %a0@(00000000,%d2:l),%d0 <== NOT EXECUTED
44d4c: 49c0 extbl %d0 <== NOT EXECUTED
44d4e: 0800 0005 btst #5,%d0 <== NOT EXECUTED
44d52: 670c beqs 44d60 <erase+0xf8> <== NOT EXECUTED
44d54: 202a 003c movel %a2@(60),%d0 <== NOT EXECUTED
44d58: 0280 0000 0200 andil #512,%d0 <== NOT EXECUTED
44d5e: 67b0 beqs 44d10 <erase+0xa8> <== NOT EXECUTED
rtems_termios_puts ("\b \b", 3, tty);
44d60: 2f0a movel %a2,%sp@-
44d62: 4878 0003 pea 3 <DIVIDE>
44d66: 4879 0005 bf31 pea 5bf31 <rtems_filesystem_default_pathconf+0x3d>
44d6c: 4eb9 0004 48e2 jsr 448e2 <rtems_termios_puts>
if (tty->column)
44d72: 202a 0028 movel %a2@(40),%d0
44d76: 4fef 000c lea %sp@(12),%sp
44d7a: 6794 beqs 44d10 <erase+0xa8> <== NEVER TAKEN
tty->column--;
44d7c: 5380 subql #1,%d0
44d7e: 2540 0028 movel %d0,%a2@(40)
44d82: 608c bras 44d10 <erase+0xa8>
if (tty->termios.c_lflag & ECHO) {
if (!lineFlag && !(tty->termios.c_lflag & ECHOE)) {
echo (tty->termios.c_cc[VERASE], tty);
} else if (c == '\t') {
int col = tty->read_start_column;
44d84: 242a 002c movel %a2@(44),%d2
int i = 0;
/*
* Find the character before the tab
*/
while (i != tty->ccount) {
44d88: 4a80 tstl %d0
44d8a: 6732 beqs 44dbe <erase+0x156>
c = tty->cbuf[i++];
if (c == '\t') {
col = (col | 7) + 1;
} else if (iscntrl (c)) {
if (tty->termios.c_lflag & ECHOCTL)
44d8c: 2c03 movel %d3,%d6
if (tty->termios.c_lflag & ECHO) {
if (!lineFlag && !(tty->termios.c_lflag & ECHOE)) {
echo (tty->termios.c_cc[VERASE], tty);
} else if (c == '\t') {
int col = tty->read_start_column;
int i = 0;
44d8e: 4201 clrb %d1
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)
44d90: 0286 0000 0200 andil #512,%d6
*/
while (i != tty->ccount) {
c = tty->cbuf[i++];
if (c == '\t') {
col = (col | 7) + 1;
} else if (iscntrl (c)) {
44d96: 2279 0005 cddc moveal 5cddc <__ctype_ptr__>,%a1
/*
* Find the character before the tab
*/
while (i != tty->ccount) {
c = tty->cbuf[i++];
if (c == '\t') {
44d9c: 4283 clrl %d3
44d9e: 1618 moveb %a0@+,%d3
/*
* Find the character before the tab
*/
while (i != tty->ccount) {
c = tty->cbuf[i++];
44da0: 5281 addql #1,%d1
if (c == '\t') {
44da2: 7a09 moveq #9,%d5
44da4: ba83 cmpl %d3,%d5
44da6: 676c beqs 44e14 <erase+0x1ac>
col = (col | 7) + 1;
} else if (iscntrl (c)) {
44da8: 1a31 3801 moveb %a1@(00000001,%d3:l),%d5
44dac: 49c5 extbl %d5
44dae: 0805 0005 btst #5,%d5
44db2: 6758 beqs 44e0c <erase+0x1a4> <== ALWAYS TAKEN
if (tty->termios.c_lflag & ECHOCTL)
44db4: 4a86 tstl %d6 <== NOT EXECUTED
44db6: 6702 beqs 44dba <erase+0x152> <== NOT EXECUTED
col += 2;
44db8: 5482 addql #2,%d2 <== NOT EXECUTED
int i = 0;
/*
* Find the character before the tab
*/
while (i != tty->ccount) {
44dba: b280 cmpl %d0,%d1 <== NOT EXECUTED
44dbc: 66de bnes 44d9c <erase+0x134> <== NOT EXECUTED
}
/*
* Back up over the tab
*/
while (tty->column > col) {
44dbe: b4aa 0028 cmpl %a2@(40),%d2
44dc2: 6c00 ff4c bgew 44d10 <erase+0xa8>
rtems_termios_puts ("\b", 1, tty);
44dc6: 2f0a movel %a2,%sp@-
44dc8: 4878 0001 pea 1 <ADD>
44dcc: 4879 0005 bf33 pea 5bf33 <rtems_filesystem_default_pathconf+0x3f>
44dd2: 4e93 jsr %a3@
tty->column--;
44dd4: 202a 0028 movel %a2@(40),%d0
44dd8: 5380 subql #1,%d0
}
/*
* Back up over the tab
*/
while (tty->column > col) {
44dda: 4fef 000c lea %sp@(12),%sp
rtems_termios_puts ("\b", 1, tty);
tty->column--;
44dde: 2540 0028 movel %d0,%a2@(40)
}
/*
* Back up over the tab
*/
while (tty->column > col) {
44de2: b480 cmpl %d0,%d2
44de4: 6c00 ff2a bgew 44d10 <erase+0xa8>
rtems_termios_puts ("\b", 1, tty);
44de8: 2f0a movel %a2,%sp@-
44dea: 4878 0001 pea 1 <ADD>
44dee: 4879 0005 bf33 pea 5bf33 <rtems_filesystem_default_pathconf+0x3f>
44df4: 4e93 jsr %a3@
tty->column--;
44df6: 202a 0028 movel %a2@(40),%d0
44dfa: 5380 subql #1,%d0
}
/*
* Back up over the tab
*/
while (tty->column > col) {
44dfc: 4fef 000c lea %sp@(12),%sp
rtems_termios_puts ("\b", 1, tty);
tty->column--;
44e00: 2540 0028 movel %d0,%a2@(40)
}
/*
* Back up over the tab
*/
while (tty->column > col) {
44e04: b480 cmpl %d0,%d2
44e06: 6dbe blts 44dc6 <erase+0x15e>
44e08: 6000 ff06 braw 44d10 <erase+0xa8>
col = (col | 7) + 1;
} else if (iscntrl (c)) {
if (tty->termios.c_lflag & ECHOCTL)
col += 2;
} else {
col++;
44e0c: 5282 addql #1,%d2
int i = 0;
/*
* Find the character before the tab
*/
while (i != tty->ccount) {
44e0e: b280 cmpl %d0,%d1
44e10: 668a bnes 44d9c <erase+0x134>
44e12: 60aa bras 44dbe <erase+0x156>
c = tty->cbuf[i++];
if (c == '\t') {
col = (col | 7) + 1;
44e14: 7607 moveq #7,%d3
44e16: 8483 orl %d3,%d2
44e18: 5282 addql #1,%d2
int i = 0;
/*
* Find the character before the tab
*/
while (i != tty->ccount) {
44e1a: b280 cmpl %d0,%d1
44e1c: 6600 ff7e bnew 44d9c <erase+0x134>
44e20: 609c bras 44dbe <erase+0x156> <== 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);
44e22: 2d4a 000c movel %a2,%fp@(12) <== NOT EXECUTED
44e26: 4280 clrl %d0 <== NOT EXECUTED
44e28: 102a 0043 moveb %a2@(67),%d0 <== NOT EXECUTED
}
}
if (!lineFlag)
break;
}
}
44e2c: 4cee 0c7c ffe4 moveml %fp@(-28),%d2-%d6/%a2-%a3 <== 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);
44e32: 2d40 0008 movel %d0,%fp@(8) <== NOT EXECUTED
}
}
if (!lineFlag)
break;
}
}
44e36: 4e5e unlk %fp <== 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);
44e38: 6000 fd8a braw 44bc4 <echo> <== NOT EXECUTED
{
if (tty->ccount == 0)
return;
if (lineFlag) {
if (!(tty->termios.c_lflag & ECHO)) {
tty->ccount = 0;
44e3c: 42aa 0020 clrl %a2@(32) <== NOT EXECUTED
}
}
if (!lineFlag)
break;
}
}
44e40: 4cee 0c7c ffe4 moveml %fp@(-28),%d2-%d6/%a2-%a3 <== NOT EXECUTED
44e46: 4e5e unlk %fp <== NOT EXECUTED
44e48: 4e75 rts <== NOT EXECUTED
}
if (!(tty->termios.c_lflag & ECHOE)) {
tty->ccount = 0;
echo (tty->termios.c_cc[VKILL], tty);
if (tty->termios.c_lflag & ECHOK)
echo ('\n', tty);
44e4a: 700a moveq #10,%d0 <== NOT EXECUTED
44e4c: 2d4a 000c movel %a2,%fp@(12) <== NOT EXECUTED
}
}
if (!lineFlag)
break;
}
}
44e50: 4cee 0c7c ffe4 moveml %fp@(-28),%d2-%d6/%a2-%a3 <== NOT EXECUTED
}
if (!(tty->termios.c_lflag & ECHOE)) {
tty->ccount = 0;
echo (tty->termios.c_cc[VKILL], tty);
if (tty->termios.c_lflag & ECHOK)
echo ('\n', tty);
44e56: 2d40 0008 movel %d0,%fp@(8) <== NOT EXECUTED
}
}
if (!lineFlag)
break;
}
}
44e5a: 4e5e unlk %fp <== NOT EXECUTED
}
if (!(tty->termios.c_lflag & ECHOE)) {
tty->ccount = 0;
echo (tty->termios.c_cc[VKILL], tty);
if (tty->termios.c_lflag & ECHOK)
echo ('\n', tty);
44e5c: 6000 fd66 braw 44bc4 <echo> <== NOT EXECUTED
00043b8c <fchown>:
int fchown(
int fd,
uid_t owner,
gid_t group
)
{
43b8c: 4e56 0000 linkw %fp,#0
43b90: 302e 000e movew %fp@(14),%d0
43b94: 2f03 movel %d3,%sp@-
43b96: 322e 0012 movew %fp@(18),%d1
43b9a: 2f02 movel %d2,%sp@-
43b9c: 242e 0008 movel %fp@(8),%d2
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
43ba0: b4b9 0005 e1c4 cmpl 5e1c4 <rtems_libio_number_iops>,%d2
43ba6: 644e bccs 43bf6 <fchown+0x6a>
iop = rtems_libio_iop( fd );
43ba8: 2602 movel %d2,%d3
43baa: ed8a lsll #6,%d2
43bac: e78b lsll #3,%d3
43bae: 2079 0005 f848 moveal 5f848 <rtems_libio_iops>,%a0
43bb4: 9483 subl %d3,%d2
43bb6: d1c2 addal %d2,%a0
rtems_libio_check_is_open(iop);
43bb8: 2428 0014 movel %a0@(20),%d2
43bbc: 0802 0008 btst #8,%d2
43bc0: 6734 beqs 43bf6 <fchown+0x6a>
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
43bc2: 44c2 movew %d2,%ccr
43bc4: 664a bnes 43c10 <fchown+0x84> <== NEVER TAKEN
return (*iop->pathinfo.ops->chown_h)( &iop->pathinfo, owner, group );
43bc6: 2268 0024 moveal %a0@(36),%a1
43bca: 41e8 0018 lea %a0@(24),%a0
43bce: 2269 0018 moveal %a1@(24),%a1
43bd2: 0281 0000 ffff andil #65535,%d1
43bd8: 0280 0000 ffff andil #65535,%d0
}
43bde: 242e fff8 movel %fp@(-8),%d2
43be2: 262e fffc movel %fp@(-4),%d3
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
return (*iop->pathinfo.ops->chown_h)( &iop->pathinfo, owner, group );
43be6: 2d48 0008 movel %a0,%fp@(8)
43bea: 2d41 0010 movel %d1,%fp@(16)
43bee: 2d40 000c movel %d0,%fp@(12)
}
43bf2: 4e5e unlk %fp
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
return (*iop->pathinfo.ops->chown_h)( &iop->pathinfo, owner, group );
43bf4: 4ed1 jmp %a1@
{
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
43bf6: 4eb9 0004 ea98 jsr 4ea98 <__errno>
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
return (*iop->pathinfo.ops->chown_h)( &iop->pathinfo, owner, group );
}
43bfc: 242e fff8 movel %fp@(-8),%d2
{
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
43c00: 2040 moveal %d0,%a0
43c02: 7209 moveq #9,%d1
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
return (*iop->pathinfo.ops->chown_h)( &iop->pathinfo, owner, group );
}
43c04: 70ff moveq #-1,%d0
43c06: 262e fffc movel %fp@(-4),%d3
43c0a: 4e5e unlk %fp
{
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
43c0c: 2081 movel %d1,%a0@
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
return (*iop->pathinfo.ops->chown_h)( &iop->pathinfo, owner, group );
}
43c0e: 4e75 rts
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
43c10: 4eb9 0004 ea98 jsr 4ea98 <__errno>
return (*iop->pathinfo.ops->chown_h)( &iop->pathinfo, owner, group );
}
43c16: 242e fff8 movel %fp@(-8),%d2
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
43c1a: 2040 moveal %d0,%a0
43c1c: 7016 moveq #22,%d0
return (*iop->pathinfo.ops->chown_h)( &iop->pathinfo, owner, group );
}
43c1e: 262e fffc movel %fp@(-4),%d3
43c22: 4e5e unlk %fp
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
43c24: 2080 movel %d0,%a0@
return (*iop->pathinfo.ops->chown_h)( &iop->pathinfo, owner, group );
}
43c26: 70ff moveq #-1,%d0
...
000437d4 <fcntl>:
int fcntl(
int fd,
int cmd,
...
)
{
437d4: 4e56 fff0 linkw %fp,#-16
437d8: 202e 0008 movel %fp@(8),%d0
int ret;
va_list ap;
va_start( ap, cmd );
437dc: 41ee 0010 lea %fp@(16),%a0
int fcntl(
int fd,
int cmd,
...
)
{
437e0: 48d7 041c moveml %d2-%d4/%a2,%sp@
437e4: 242e 000c movel %fp@(12),%d2
int fd2;
int flags;
int mask;
int ret = 0;
rtems_libio_check_fd( fd );
437e8: 2239 0005 e8e4 movel 5e8e4 <rtems_libio_number_iops>,%d1
437ee: b280 cmpl %d0,%d1
437f0: 6300 0188 blsw 4397a <fcntl+0x1a6>
iop = rtems_libio_iop( fd );
437f4: 2600 movel %d0,%d3
437f6: ed88 lsll #6,%d0
437f8: e78b lsll #3,%d3
437fa: 2279 0005 ff68 moveal 5ff68 <rtems_libio_iops>,%a1
43800: 9083 subl %d3,%d0
43802: 45f1 0800 lea %a1@(00000000,%d0:l),%a2
rtems_libio_check_is_open(iop);
43806: 282a 0014 movel %a2@(20),%d4
4380a: 0804 0008 btst #8,%d4
4380e: 6700 016a beqw 4397a <fcntl+0x1a6>
/*
* This switch should contain all the cases from POSIX.
*/
switch ( cmd ) {
43812: 7009 moveq #9,%d0
43814: b082 cmpl %d2,%d0
43816: 641a bccs 43832 <fcntl+0x5e>
errno = ENOTSUP;
ret = -1;
break;
default:
errno = EINVAL;
43818: 4eb9 0004 eca0 jsr 4eca0 <__errno>
4381e: 2040 moveal %d0,%a0
43820: 7016 moveq #22,%d0
43822: 2080 movel %d0,%a0@
int mask;
int ret = 0;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
43824: 76ff moveq #-1,%d3
va_list ap;
va_start( ap, cmd );
ret = vfcntl(fd,cmd,ap);
va_end(ap);
return ret;
}
43826: 2003 movel %d3,%d0
43828: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2
4382e: 4e5e unlk %fp
43830: 4e75 rts
/*
* This switch should contain all the cases from POSIX.
*/
switch ( cmd ) {
43832: 303b 2a08 movew %pc@(4383c <fcntl+0x68>,%d2:l:2),%d0
43836: 48c0 extl %d0
43838: 4efb 0802 jmp %pc@(4383c <fcntl+0x68>,%d0:l)
4383c: 00aa 009e 008e oril #10354830,%d2 <== NOT EXECUTED
43842: 0074 0164 <== NOT EXECUTED
43844: 0026 046 <== NOT EXECUTED
43846: 0014 024 <== NOT EXECUTED
43848: 0014 024 <== NOT EXECUTED
4384a: 0014 024 <== NOT EXECUTED
4384c: 0014 024 <== NOT EXECUTED
4384e: 0014 024 <== NOT EXECUTED
errno = ENOTSUP;
ret = -1;
break;
case F_GETOWN: /* for sockets. */
errno = ENOTSUP;
43850: 4eb9 0004 eca0 jsr 4eca0 <__errno>
int mask;
int ret = 0;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
43856: 76ff moveq #-1,%d3
errno = ENOTSUP;
ret = -1;
break;
case F_GETOWN: /* for sockets. */
errno = ENOTSUP;
43858: 2040 moveal %d0,%a0
4385a: 20bc 0000 0086 movel #134,%a0@
43860: 60c4 bras 43826 <fcntl+0x52>
case F_GETFL: /* more flags (cloexec) */
ret = rtems_libio_to_fcntl_flags( iop->flags );
break;
case F_SETFL:
flags = rtems_libio_fcntl_flags( va_arg( ap, int ) );
43862: 2f10 movel %a0@,%sp@-
rtems_libio_t *iop;
rtems_libio_t *diop;
int fd2;
int flags;
int mask;
int ret = 0;
43864: 4283 clrl %d3
case F_GETFL: /* more flags (cloexec) */
ret = rtems_libio_to_fcntl_flags( iop->flags );
break;
case F_SETFL:
flags = rtems_libio_fcntl_flags( va_arg( ap, int ) );
43866: 4eb9 0004 3e80 jsr 43e80 <rtems_libio_fcntl_flags>
/*
* XXX If we are turning on append, should we seek to the end?
*/
iop->flags = (iop->flags & ~mask) | (flags & mask);
4386c: 222a 0014 movel %a2@(20),%d1
43870: 588f addql #4,%sp
43872: 0280 0000 0201 andil #513,%d0
43878: 0281 ffff fdfe andil #-514,%d1
4387e: 8081 orl %d1,%d0
43880: 2540 0014 movel %d0,%a2@(20)
* If we got this far successfully, then we give the optional
* filesystem specific handler a chance to process this.
*/
if (ret >= 0) {
int err = (*iop->pathinfo.handlers->fcntl_h)( cmd, iop );
43884: 206a 0020 moveal %a2@(32),%a0
43888: 2f0a movel %a2,%sp@-
4388a: 2f02 movel %d2,%sp@-
4388c: 2068 0030 moveal %a0@(48),%a0
43890: 4e90 jsr %a0@
if (err) {
43892: 508f addql #8,%sp
* If we got this far successfully, then we give the optional
* filesystem specific handler a chance to process this.
*/
if (ret >= 0) {
int err = (*iop->pathinfo.handlers->fcntl_h)( cmd, iop );
43894: 2400 movel %d0,%d2
if (err) {
43896: 678e beqs 43826 <fcntl+0x52> <== ALWAYS TAKEN
errno = err;
43898: 4eb9 0004 eca0 jsr 4eca0 <__errno> <== NOT EXECUTED
ret = -1;
4389e: 76ff moveq #-1,%d3 <== NOT EXECUTED
*/
if (ret >= 0) {
int err = (*iop->pathinfo.handlers->fcntl_h)( cmd, iop );
if (err) {
errno = err;
438a0: 2040 moveal %d0,%a0 <== NOT EXECUTED
va_list ap;
va_start( ap, cmd );
ret = vfcntl(fd,cmd,ap);
va_end(ap);
return ret;
}
438a2: 2003 movel %d3,%d0 <== NOT EXECUTED
*/
if (ret >= 0) {
int err = (*iop->pathinfo.handlers->fcntl_h)( cmd, iop );
if (err) {
errno = err;
438a4: 2082 movel %d2,%a0@ <== NOT EXECUTED
va_list ap;
va_start( ap, cmd );
ret = vfcntl(fd,cmd,ap);
va_end(ap);
return ret;
}
438a6: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2 <== NOT EXECUTED
438ac: 4e5e unlk %fp <== NOT EXECUTED
438ae: 4e75 rts <== NOT EXECUTED
else
iop->flags &= ~LIBIO_FLAGS_CLOSE_ON_EXEC;
break;
case F_GETFL: /* more flags (cloexec) */
ret = rtems_libio_to_fcntl_flags( iop->flags );
438b0: 2f04 movel %d4,%sp@-
438b2: 4eb9 0004 3ec0 jsr 43ec0 <rtems_libio_to_fcntl_flags>
438b8: 588f addql #4,%sp
438ba: 2600 movel %d0,%d3
/*
* If we got this far successfully, then we give the optional
* filesystem specific handler a chance to process this.
*/
if (ret >= 0) {
438bc: 6cc6 bges 43884 <fcntl+0xb0> <== ALWAYS TAKEN
va_list ap;
va_start( ap, cmd );
ret = vfcntl(fd,cmd,ap);
va_end(ap);
return ret;
}
438be: 2003 movel %d3,%d0 <== NOT EXECUTED
438c0: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2 <== NOT EXECUTED
438c6: 4e5e unlk %fp <== NOT EXECUTED
438c8: 4e75 rts <== NOT EXECUTED
* 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 ) )
438ca: 4a90 tstl %a0@
438cc: 6768 beqs 43936 <fcntl+0x162> <== NEVER TAKEN
rtems_libio_t *iop;
rtems_libio_t *diop;
int fd2;
int flags;
int mask;
int ret = 0;
438ce: 4283 clrl %d3
* processes, then we can ignore this one except to make
* F_GETFD work.
*/
if ( va_arg( ap, int ) )
iop->flags |= LIBIO_FLAGS_CLOSE_ON_EXEC;
438d0: 08c4 000b bset #11,%d4
438d4: 2544 0014 movel %d4,%a2@(20)
438d8: 60aa bras 43884 <fcntl+0xb0>
diop->pathinfo = iop->pathinfo;
ret = (int) (diop - rtems_libio_iops);
break;
case F_GETFD: /* get f_flags */
ret = ((iop->flags & LIBIO_FLAGS_CLOSE_ON_EXEC) != 0);
438da: 0804 000b btst #11,%d4
438de: 56c3 sne %d3
438e0: 49c3 extbl %d3
438e2: 4483 negl %d3
438e4: 609e bras 43884 <fcntl+0xb0>
* This switch should contain all the cases from POSIX.
*/
switch ( cmd ) {
case F_DUPFD: /* dup */
fd2 = va_arg( ap, int );
438e6: 2010 movel %a0@,%d0
if ( fd2 )
438e8: 6700 00aa beqw 43994 <fcntl+0x1c0>
diop = rtems_libio_iop( fd2 );
438ec: b081 cmpl %d1,%d0 <== NOT EXECUTED
438ee: 6454 bccs 43944 <fcntl+0x170> <== NOT EXECUTED
438f0: 2200 movel %d0,%d1 <== NOT EXECUTED
438f2: ed88 lsll #6,%d0 <== NOT EXECUTED
438f4: e789 lsll #3,%d1 <== NOT EXECUTED
438f6: 9081 subl %d1,%d0 <== NOT EXECUTED
438f8: 41f1 0800 lea %a1@(00000000,%d0:l),%a0 <== NOT EXECUTED
438fc: 2608 movel %a0,%d3 <== NOT EXECUTED
}
}
diop->flags = iop->flags;
diop->pathinfo = iop->pathinfo;
ret = (int) (diop - rtems_libio_iops);
438fe: 9689 subl %a1,%d3 <== NOT EXECUTED
43900: e683 asrl #3,%d3 <== NOT EXECUTED
43902: 203c b6db 6db7 movel #-1227133513,%d0 <== NOT EXECUTED
43908: 4c00 3800 mulsl %d0,%d3 <== NOT EXECUTED
break;
}
}
diop->flags = iop->flags;
diop->pathinfo = iop->pathinfo;
4390c: 216a 0018 0018 movel %a2@(24),%a0@(24) <== NOT EXECUTED
43912: 216a 001c 001c movel %a2@(28),%a0@(28) <== NOT EXECUTED
43918: 216a 0020 0020 movel %a2@(32),%a0@(32) <== NOT EXECUTED
4391e: 216a 0024 0024 movel %a2@(36),%a0@(36) <== NOT EXECUTED
43924: 216a 0028 0028 movel %a2@(40),%a0@(40) <== NOT EXECUTED
ret = -1;
break;
}
}
diop->flags = iop->flags;
4392a: 2144 0014 movel %d4,%a0@(20) <== NOT EXECUTED
/*
* If we got this far successfully, then we give the optional
* filesystem specific handler a chance to process this.
*/
if (ret >= 0) {
4392e: 4a83 tstl %d3
43930: 6c00 ff52 bgew 43884 <fcntl+0xb0>
43934: 6088 bras 438be <fcntl+0xea> <== NOT EXECUTED
rtems_libio_t *iop;
rtems_libio_t *diop;
int fd2;
int flags;
int mask;
int ret = 0;
43936: 4283 clrl %d3 <== NOT EXECUTED
*/
if ( va_arg( ap, int ) )
iop->flags |= LIBIO_FLAGS_CLOSE_ON_EXEC;
else
iop->flags &= ~LIBIO_FLAGS_CLOSE_ON_EXEC;
43938: 0884 000b bclr #11,%d4 <== NOT EXECUTED
4393c: 2544 0014 movel %d4,%a2@(20) <== NOT EXECUTED
43940: 6000 ff42 braw 43884 <fcntl+0xb0> <== NOT EXECUTED
switch ( cmd ) {
case F_DUPFD: /* dup */
fd2 = va_arg( ap, int );
if ( fd2 )
diop = rtems_libio_iop( fd2 );
43944: 91c8 subal %a0,%a0 <== NOT EXECUTED
43946: 4283 clrl %d3 <== NOT EXECUTED
}
}
diop->flags = iop->flags;
diop->pathinfo = iop->pathinfo;
ret = (int) (diop - rtems_libio_iops);
43948: 9689 subl %a1,%d3 <== NOT EXECUTED
4394a: e683 asrl #3,%d3 <== NOT EXECUTED
4394c: 203c b6db 6db7 movel #-1227133513,%d0 <== NOT EXECUTED
43952: 4c00 3800 mulsl %d0,%d3 <== NOT EXECUTED
break;
}
}
diop->flags = iop->flags;
diop->pathinfo = iop->pathinfo;
43956: 216a 0018 0018 movel %a2@(24),%a0@(24) <== NOT EXECUTED
4395c: 216a 001c 001c movel %a2@(28),%a0@(28) <== NOT EXECUTED
43962: 216a 0020 0020 movel %a2@(32),%a0@(32) <== NOT EXECUTED
43968: 216a 0024 0024 movel %a2@(36),%a0@(36) <== NOT EXECUTED
4396e: 216a 0028 0028 movel %a2@(40),%a0@(40) <== NOT EXECUTED
ret = -1;
break;
}
}
diop->flags = iop->flags;
43974: 2144 0014 movel %d4,%a0@(20) <== NOT EXECUTED
43978: 60b4 bras 4392e <fcntl+0x15a> <== NOT EXECUTED
int mask;
int ret = 0;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
4397a: 4eb9 0004 eca0 jsr 4eca0 <__errno>
43980: 76ff moveq #-1,%d3
43982: 7209 moveq #9,%d1
43984: 2040 moveal %d0,%a0
va_list ap;
va_start( ap, cmd );
ret = vfcntl(fd,cmd,ap);
va_end(ap);
return ret;
}
43986: 2003 movel %d3,%d0
43988: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2
int mask;
int ret = 0;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
4398e: 2081 movel %d1,%a0@
va_list ap;
va_start( ap, cmd );
ret = vfcntl(fd,cmd,ap);
va_end(ap);
return ret;
}
43990: 4e5e unlk %fp
43992: 4e75 rts
fd2 = va_arg( ap, int );
if ( fd2 )
diop = rtems_libio_iop( fd2 );
else {
/* allocate a file control block */
diop = rtems_libio_allocate();
43994: 4eb9 0004 3f0e jsr 43f0e <rtems_libio_allocate>
4399a: 2040 moveal %d0,%a0
if ( diop == 0 ) {
4399c: 4a80 tstl %d0
4399e: 6700 fe84 beqw 43824 <fcntl+0x50>
439a2: 282a 0014 movel %a2@(20),%d4
439a6: 2600 movel %d0,%d3
}
}
diop->flags = iop->flags;
diop->pathinfo = iop->pathinfo;
ret = (int) (diop - rtems_libio_iops);
439a8: 203c b6db 6db7 movel #-1227133513,%d0
break;
}
}
diop->flags = iop->flags;
diop->pathinfo = iop->pathinfo;
439ae: 216a 0018 0018 movel %a2@(24),%a0@(24)
439b4: 216a 001c 001c movel %a2@(28),%a0@(28)
439ba: 216a 0020 0020 movel %a2@(32),%a0@(32)
439c0: 216a 0024 0024 movel %a2@(36),%a0@(36)
if ( fd2 )
diop = rtems_libio_iop( fd2 );
else {
/* allocate a file control block */
diop = rtems_libio_allocate();
if ( diop == 0 ) {
439c6: 2279 0005 ff68 moveal 5ff68 <rtems_libio_iops>,%a1
}
}
diop->flags = iop->flags;
diop->pathinfo = iop->pathinfo;
ret = (int) (diop - rtems_libio_iops);
439cc: 9689 subl %a1,%d3
439ce: e683 asrl #3,%d3
439d0: 4c00 3800 mulsl %d0,%d3
break;
}
}
diop->flags = iop->flags;
diop->pathinfo = iop->pathinfo;
439d4: 216a 0028 0028 movel %a2@(40),%a0@(40)
ret = -1;
break;
}
}
diop->flags = iop->flags;
439da: 2144 0014 movel %d4,%a0@(20)
439de: 6000 ff4e braw 4392e <fcntl+0x15a>
0004c83a <fifo_open>:
*/
int fifo_open(
pipe_control_t **pipep,
rtems_libio_t *iop
)
{
4c83a: 4e56 ffdc linkw %fp,#-36
4c83e: 48d7 3c3c moveml %d2-%d5/%a2-%a5,%sp@
4c842: 266e 0008 moveal %fp@(8),%a3
4c846: 2a6e 000c moveal %fp@(12),%a5
)
{
pipe_control_t *pipe;
int err = 0;
err = pipe_lock();
4c84a: 4eba fe18 jsr %pc@(4c664 <pipe_lock>)
4c84e: 2400 movel %d0,%d2
if (err)
4c850: 6664 bnes 4c8b6 <fifo_open+0x7c>
return err;
pipe = *pipep;
4c852: 2453 moveal %a3@,%a2
if (pipe == NULL) {
4c854: 4a8a tstl %a2
4c856: 6700 00e6 beqw 4c93e <fifo_open+0x104>
err = pipe_alloc(&pipe);
if (err)
goto out;
}
if (! PIPE_LOCK(pipe))
4c85a: 42a7 clrl %sp@-
4c85c: 263c 0004 7f20 movel #294688,%d3
4c862: 42a7 clrl %sp@-
4c864: 2f2a 0028 movel %a2@(40),%sp@-
4c868: 2043 moveal %d3,%a0
4c86a: 4e90 jsr %a0@
4c86c: 4fef 000c lea %sp@(12),%sp
4c870: 4a80 tstl %d0
4c872: 664e bnes 4c8c2 <fifo_open+0x88> <== NEVER TAKEN
4c874: 99cc subal %a4,%a4
err = -EINTR;
if (*pipep == NULL) {
4c876: 4a93 tstl %a3@
4c878: 6700 0276 beqw 4caf0 <fifo_open+0x2b6>
else
*pipep = pipe;
}
out:
pipe_unlock();
4c87c: 4eba fe94 jsr %pc@(4c712 <pipe_unlock>)
pipe_control_t *pipe;
unsigned int prevCounter;
int err;
err = pipe_new(pipep);
if (err)
4c880: 4a8c tstl %a4
4c882: 6600 037c bnew 4cc00 <fifo_open+0x3c6>
return err;
pipe = *pipep;
switch (LIBIO_ACCMODE(iop)) {
4c886: 7006 moveq #6,%d0
4c888: 7204 moveq #4,%d1
4c88a: c0ad 0014 andl %a5@(20),%d0
int err;
err = pipe_new(pipep);
if (err)
return err;
pipe = *pipep;
4c88e: 2453 moveal %a3@,%a2
switch (LIBIO_ACCMODE(iop)) {
4c890: b280 cmpl %d0,%d1
4c892: 6700 01e4 beqw 4ca78 <fifo_open+0x23e>
4c896: 123c 0006 moveb #6,%d1
4c89a: b280 cmpl %d0,%d1
4c89c: 6700 018c beqw 4ca2a <fifo_open+0x1f0>
4c8a0: 123c 0002 moveb #2,%d1
4c8a4: b280 cmpl %d0,%d1
4c8a6: 6720 beqs 4c8c8 <fifo_open+0x8e> <== ALWAYS TAKEN
4c8a8: 49f9 0004 8060 lea 48060 <rtems_semaphore_release>,%a4
if (pipe->Writers ++ == 0)
PIPE_WAKEUPREADERS(pipe);
break;
}
PIPE_UNLOCK(pipe);
4c8ae: 2f2a 0028 movel %a2@(40),%sp@-
4c8b2: 4e94 jsr %a4@
return 0;
4c8b4: 588f addql #4,%sp
out_error:
pipe_release(pipep, iop);
return err;
}
4c8b6: 2002 movel %d2,%d0
4c8b8: 4cee 3c3c ffdc moveml %fp@(-36),%d2-%d5/%a2-%a5
4c8be: 4e5e unlk %fp
4c8c0: 4e75 rts
if (err)
goto out;
}
if (! PIPE_LOCK(pipe))
err = -EINTR;
4c8c2: 387c fffc moveaw #-4,%a4 <== NOT EXECUTED
4c8c6: 60ae bras 4c876 <fifo_open+0x3c> <== NOT EXECUTED
pipe = *pipep;
switch (LIBIO_ACCMODE(iop)) {
case LIBIO_FLAGS_READ:
pipe->readerCounter ++;
if (pipe->Readers ++ == 0)
4c8c8: 202a 0010 movel %a2@(16),%d0
4c8cc: 2040 moveal %d0,%a0
4c8ce: 5288 addql #1,%a0
return err;
pipe = *pipep;
switch (LIBIO_ACCMODE(iop)) {
case LIBIO_FLAGS_READ:
pipe->readerCounter ++;
4c8d0: 52aa 0020 addql #1,%a2@(32)
if (pipe->Readers ++ == 0)
4c8d4: 2548 0010 movel %a0,%a2@(16)
4c8d8: 4a80 tstl %d0
4c8da: 6700 024a beqw 4cb26 <fifo_open+0x2ec>
PIPE_WAKEUPWRITERS(pipe);
if (pipe->Writers == 0) {
4c8de: 4aaa 0014 tstl %a2@(20)
4c8e2: 66c4 bnes 4c8a8 <fifo_open+0x6e>
/* Not an error */
if (LIBIO_NODELAY(iop))
4c8e4: 7001 moveq #1,%d0
4c8e6: c0ad 0014 andl %a5@(20),%d0
4c8ea: 66bc bnes 4c8a8 <fifo_open+0x6e>
break;
prevCounter = pipe->writerCounter;
4c8ec: 2a2a 0024 movel %a2@(36),%d5
4c8f0: 49f9 0004 8060 lea 48060 <rtems_semaphore_release>,%a4
4c8f6: 283c 0004 df94 movel #319380,%d4
err = -EINTR;
/* Wait until a writer opens the pipe */
do {
PIPE_UNLOCK(pipe);
4c8fc: 2f2a 0028 movel %a2@(40),%sp@-
4c900: 4e94 jsr %a4@
if (! PIPE_READWAIT(pipe))
4c902: 2044 moveal %d4,%a0
4c904: 42a7 clrl %sp@-
4c906: 2f2a 002c movel %a2@(44),%sp@-
4c90a: 4e90 jsr %a0@
4c90c: 4fef 000c lea %sp@(12),%sp
4c910: 4a80 tstl %d0
4c912: 6600 0266 bnew 4cb7a <fifo_open+0x340>
goto out_error;
if (! PIPE_LOCK(pipe))
4c916: 42a7 clrl %sp@-
4c918: 2043 moveal %d3,%a0
4c91a: 42a7 clrl %sp@-
4c91c: 2f2a 0028 movel %a2@(40),%sp@-
4c920: 4e90 jsr %a0@
4c922: 4fef 000c lea %sp@(12),%sp
4c926: 4a80 tstl %d0
4c928: 6600 0250 bnew 4cb7a <fifo_open+0x340>
goto out_error;
} while (prevCounter == pipe->writerCounter);
4c92c: baaa 0024 cmpl %a2@(36),%d5
4c930: 67ca beqs 4c8fc <fifo_open+0xc2> <== NEVER TAKEN
if (pipe->Writers ++ == 0)
PIPE_WAKEUPREADERS(pipe);
break;
}
PIPE_UNLOCK(pipe);
4c932: 2f2a 0028 movel %a2@(40),%sp@-
4c936: 4e94 jsr %a4@
return 0;
4c938: 588f addql #4,%sp
4c93a: 6000 ff7a braw 4c8b6 <fifo_open+0x7c>
{
static char c = 'a';
pipe_control_t *pipe;
int err = -ENOMEM;
pipe = malloc(sizeof(pipe_control_t));
4c93e: 4878 0034 pea 34 <OPER2+0x20>
4c942: 49f9 0004 47bc lea 447bc <malloc>,%a4
4c948: 4e94 jsr %a4@
if (pipe == NULL)
4c94a: 588f addql #4,%sp
{
static char c = 'a';
pipe_control_t *pipe;
int err = -ENOMEM;
pipe = malloc(sizeof(pipe_control_t));
4c94c: 2440 moveal %d0,%a2
4c94e: 2600 movel %d0,%d3
if (pipe == NULL)
4c950: 6700 0286 beqw 4cbd8 <fifo_open+0x39e>
return err;
memset(pipe, 0, sizeof(pipe_control_t));
4c954: 2040 moveal %d0,%a0
pipe->Size = PIPE_BUF;
4c956: 203c 0000 0200 movel #512,%d0
int err = -ENOMEM;
pipe = malloc(sizeof(pipe_control_t));
if (pipe == NULL)
return err;
memset(pipe, 0, sizeof(pipe_control_t));
4c95c: 4298 clrl %a0@+
4c95e: 5888 addql #4,%a0
4c960: 4298 clrl %a0@+
4c962: 4298 clrl %a0@+
4c964: 4298 clrl %a0@+
4c966: 4298 clrl %a0@+
4c968: 4298 clrl %a0@+
4c96a: 4298 clrl %a0@+
4c96c: 4298 clrl %a0@+
4c96e: 4298 clrl %a0@+
4c970: 4298 clrl %a0@+
4c972: 4298 clrl %a0@+
4c974: 4290 clrl %a0@
pipe->Size = PIPE_BUF;
4c976: 2540 0004 movel %d0,%a2@(4)
pipe->Buffer = malloc(pipe->Size);
4c97a: 4878 0200 pea 200 <DBL_MANT_DIG+0x1cb>
4c97e: 4e94 jsr %a4@
if (! pipe->Buffer)
4c980: 588f addql #4,%sp
if (pipe == NULL)
return err;
memset(pipe, 0, sizeof(pipe_control_t));
pipe->Size = PIPE_BUF;
pipe->Buffer = malloc(pipe->Size);
4c982: 2480 movel %d0,%a2@
if (! pipe->Buffer)
4c984: 6700 026c beqw 4cbf2 <fifo_open+0x3b8>
goto err_buf;
err = -ENOMEM;
if (rtems_barrier_create(
4c988: 486a 002c pea %a2@(44)
4c98c: 49f9 0004 dd84 lea 4dd84 <rtems_barrier_create>,%a4
rtems_build_name ('P', 'I', 'r', c),
4c992: 1039 0005 e7d4 moveb 5e7d4 <c.5476>,%d0
if (! pipe->Buffer)
goto err_buf;
err = -ENOMEM;
if (rtems_barrier_create(
4c998: 42a7 clrl %sp@-
rtems_build_name ('P', 'I', 'r', c),
4c99a: 49c0 extbl %d0
if (! pipe->Buffer)
goto err_buf;
err = -ENOMEM;
if (rtems_barrier_create(
4c99c: 42a7 clrl %sp@-
4c99e: 0080 5049 7200 oril #1346990592,%d0
4c9a4: 2f00 movel %d0,%sp@-
4c9a6: 4e94 jsr %a4@
4c9a8: 4fef 0010 lea %sp@(16),%sp
4c9ac: 4a80 tstl %d0
4c9ae: 6600 0214 bnew 4cbc4 <fifo_open+0x38a>
rtems_build_name ('P', 'I', 'r', c),
RTEMS_BARRIER_MANUAL_RELEASE, 0,
&pipe->readBarrier) != RTEMS_SUCCESSFUL)
goto err_rbar;
if (rtems_barrier_create(
4c9b2: 486a 0030 pea %a2@(48)
rtems_build_name ('P', 'I', 'w', c),
4c9b6: 1039 0005 e7d4 moveb 5e7d4 <c.5476>,%d0
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(
4c9bc: 42a7 clrl %sp@-
rtems_build_name ('P', 'I', 'w', c),
4c9be: 49c0 extbl %d0
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(
4c9c0: 42a7 clrl %sp@-
4c9c2: 0080 5049 7700 oril #1346991872,%d0
4c9c8: 2f00 movel %d0,%sp@-
4c9ca: 4e94 jsr %a4@
4c9cc: 4fef 0010 lea %sp@(16),%sp
4c9d0: 4a80 tstl %d0
4c9d2: 6600 020c bnew 4cbe0 <fifo_open+0x3a6>
rtems_build_name ('P', 'I', 'w', c),
RTEMS_BARRIER_MANUAL_RELEASE, 0,
&pipe->writeBarrier) != RTEMS_SUCCESSFUL)
goto err_wbar;
if (rtems_semaphore_create(
4c9d6: 486a 0028 pea %a2@(40)
rtems_build_name ('P', 'I', 's', c), 1,
4c9da: 1039 0005 e7d4 moveb 5e7d4 <c.5476>,%d0
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(
4c9e0: 42a7 clrl %sp@-
4c9e2: 4878 0010 pea 10 <INVALID_OPERATION>
rtems_build_name ('P', 'I', 's', c), 1,
4c9e6: 49c0 extbl %d0
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(
4c9e8: 4878 0001 pea 1 <ADD>
4c9ec: 0080 5049 7300 oril #1346990848,%d0
4c9f2: 2f00 movel %d0,%sp@-
4c9f4: 4eb9 0004 7c84 jsr 47c84 <rtems_semaphore_create>
4c9fa: 4fef 0014 lea %sp@(20),%sp
4c9fe: 4a80 tstl %d0
4ca00: 6600 01aa bnew 4cbac <fifo_open+0x372>
#ifdef RTEMS_POSIX_API
pipe_interruptible(pipe);
#endif
*pipep = pipe;
if (c ++ == 'z')
4ca04: 1039 0005 e7d4 moveb 5e7d4 <c.5476>,%d0
4ca0a: 49c0 extbl %d0
4ca0c: 2200 movel %d0,%d1
4ca0e: 5281 addql #1,%d1
4ca10: 13c1 0005 e7d4 moveb %d1,5e7d4 <c.5476>
4ca16: 727a moveq #122,%d1
4ca18: b280 cmpl %d0,%d1
4ca1a: 6600 fe3e bnew 4c85a <fifo_open+0x20>
c = 'a';
4ca1e: 7061 moveq #97,%d0
4ca20: 13c0 0005 e7d4 moveb %d0,5e7d4 <c.5476>
4ca26: 6000 fe32 braw 4c85a <fifo_open+0x20>
}
break;
case LIBIO_FLAGS_READ_WRITE:
pipe->readerCounter ++;
if (pipe->Readers ++ == 0)
4ca2a: 202a 0010 movel %a2@(16),%d0
4ca2e: 2200 movel %d0,%d1
4ca30: 5281 addql #1,%d1
} while (prevCounter == pipe->readerCounter);
}
break;
case LIBIO_FLAGS_READ_WRITE:
pipe->readerCounter ++;
4ca32: 52aa 0020 addql #1,%a2@(32)
if (pipe->Readers ++ == 0)
4ca36: 2541 0010 movel %d1,%a2@(16)
4ca3a: 4a80 tstl %d0
4ca3c: 6700 00d4 beqw 4cb12 <fifo_open+0x2d8>
PIPE_WAKEUPWRITERS(pipe);
pipe->writerCounter ++;
if (pipe->Writers ++ == 0)
4ca40: 202a 0014 movel %a2@(20),%d0
4ca44: 2040 moveal %d0,%a0
4ca46: 5288 addql #1,%a0
case LIBIO_FLAGS_READ_WRITE:
pipe->readerCounter ++;
if (pipe->Readers ++ == 0)
PIPE_WAKEUPWRITERS(pipe);
pipe->writerCounter ++;
4ca48: 52aa 0024 addql #1,%a2@(36)
4ca4c: 49f9 0004 8060 lea 48060 <rtems_semaphore_release>,%a4
if (pipe->Writers ++ == 0)
4ca52: 2548 0014 movel %a0,%a2@(20)
4ca56: 4a80 tstl %d0
4ca58: 6600 fe54 bnew 4c8ae <fifo_open+0x74>
PIPE_WAKEUPREADERS(pipe);
4ca5c: 486e fffc pea %fp@(-4)
4ca60: 2f2a 002c movel %a2@(44),%sp@-
4ca64: 4eb9 0004 df1c jsr 4df1c <rtems_barrier_release>
4ca6a: 508f addql #8,%sp
break;
}
PIPE_UNLOCK(pipe);
4ca6c: 2f2a 0028 movel %a2@(40),%sp@-
4ca70: 4e94 jsr %a4@
return 0;
4ca72: 588f addql #4,%sp
4ca74: 6000 fe40 braw 4c8b6 <fifo_open+0x7c>
break;
case LIBIO_FLAGS_WRITE:
pipe->writerCounter ++;
if (pipe->Writers ++ == 0)
4ca78: 202a 0014 movel %a2@(20),%d0
4ca7c: 2200 movel %d0,%d1
4ca7e: 5281 addql #1,%d1
} while (prevCounter == pipe->writerCounter);
}
break;
case LIBIO_FLAGS_WRITE:
pipe->writerCounter ++;
4ca80: 52aa 0024 addql #1,%a2@(36)
if (pipe->Writers ++ == 0)
4ca84: 2541 0014 movel %d1,%a2@(20)
4ca88: 4a80 tstl %d0
4ca8a: 6772 beqs 4cafe <fifo_open+0x2c4> <== ALWAYS TAKEN
4ca8c: 49f9 0004 8060 lea 48060 <rtems_semaphore_release>,%a4
PIPE_WAKEUPREADERS(pipe);
if (pipe->Readers == 0 && LIBIO_NODELAY(iop)) {
4ca92: 4aaa 0010 tstl %a2@(16)
4ca96: 6600 fe16 bnew 4c8ae <fifo_open+0x74>
4ca9a: 7001 moveq #1,%d0
4ca9c: c0ad 0014 andl %a5@(20),%d0
4caa0: 6600 00f2 bnew 4cb94 <fifo_open+0x35a>
err = -ENXIO;
goto out_error;
}
if (pipe->Readers == 0) {
prevCounter = pipe->readerCounter;
4caa4: 2a2a 0020 movel %a2@(32),%d5
4caa8: 283c 0004 df94 movel #319380,%d4
err = -EINTR;
do {
PIPE_UNLOCK(pipe);
4caae: 2f2a 0028 movel %a2@(40),%sp@-
4cab2: 4e94 jsr %a4@
if (! PIPE_WRITEWAIT(pipe))
4cab4: 2044 moveal %d4,%a0
4cab6: 42a7 clrl %sp@-
4cab8: 2f2a 0030 movel %a2@(48),%sp@-
4cabc: 4e90 jsr %a0@
4cabe: 4fef 000c lea %sp@(12),%sp
4cac2: 4a80 tstl %d0
4cac4: 6600 00b4 bnew 4cb7a <fifo_open+0x340>
goto out_error;
if (! PIPE_LOCK(pipe))
4cac8: 42a7 clrl %sp@-
4caca: 2043 moveal %d3,%a0
4cacc: 42a7 clrl %sp@-
4cace: 2f2a 0028 movel %a2@(40),%sp@-
4cad2: 4e90 jsr %a0@
4cad4: 4fef 000c lea %sp@(12),%sp
4cad8: 4a80 tstl %d0
4cada: 6600 009e bnew 4cb7a <fifo_open+0x340>
goto out_error;
} while (prevCounter == pipe->readerCounter);
4cade: baaa 0020 cmpl %a2@(32),%d5
4cae2: 67ca beqs 4caae <fifo_open+0x274> <== NEVER TAKEN
if (pipe->Writers ++ == 0)
PIPE_WAKEUPREADERS(pipe);
break;
}
PIPE_UNLOCK(pipe);
4cae4: 2f2a 0028 movel %a2@(40),%sp@-
4cae8: 4e94 jsr %a4@
return 0;
4caea: 588f addql #4,%sp
4caec: 6000 fdc8 braw 4c8b6 <fifo_open+0x7c>
if (! PIPE_LOCK(pipe))
err = -EINTR;
if (*pipep == NULL) {
if (err)
4caf0: 4a8c tstl %a4
4caf2: 6646 bnes 4cb3a <fifo_open+0x300> <== NEVER TAKEN
pipe_free(pipe);
else
*pipep = pipe;
4caf4: 268a movel %a2,%a3@
}
out:
pipe_unlock();
4caf6: 4eba fc1a jsr %pc@(4c712 <pipe_unlock>)
4cafa: 6000 fd8a braw 4c886 <fifo_open+0x4c>
case LIBIO_FLAGS_WRITE:
pipe->writerCounter ++;
if (pipe->Writers ++ == 0)
PIPE_WAKEUPREADERS(pipe);
4cafe: 486e fffc pea %fp@(-4)
4cb02: 2f2a 002c movel %a2@(44),%sp@-
4cb06: 4eb9 0004 df1c jsr 4df1c <rtems_barrier_release>
4cb0c: 508f addql #8,%sp
4cb0e: 6000 ff7c braw 4ca8c <fifo_open+0x252>
break;
case LIBIO_FLAGS_READ_WRITE:
pipe->readerCounter ++;
if (pipe->Readers ++ == 0)
PIPE_WAKEUPWRITERS(pipe);
4cb12: 486e fffc pea %fp@(-4)
4cb16: 2f2a 0030 movel %a2@(48),%sp@-
4cb1a: 4eb9 0004 df1c jsr 4df1c <rtems_barrier_release>
4cb20: 508f addql #8,%sp
4cb22: 6000 ff1c braw 4ca40 <fifo_open+0x206>
switch (LIBIO_ACCMODE(iop)) {
case LIBIO_FLAGS_READ:
pipe->readerCounter ++;
if (pipe->Readers ++ == 0)
PIPE_WAKEUPWRITERS(pipe);
4cb26: 486e fffc pea %fp@(-4)
4cb2a: 2f2a 0030 movel %a2@(48),%sp@-
4cb2e: 4eb9 0004 df1c jsr 4df1c <rtems_barrier_release>
4cb34: 508f addql #8,%sp
4cb36: 6000 fda6 braw 4c8de <fifo_open+0xa4>
/* Called with pipe_semaphore held. */
static inline void pipe_free(
pipe_control_t *pipe
)
{
rtems_barrier_delete(pipe->readBarrier);
4cb3a: 2f2a 002c movel %a2@(44),%sp@- <== NOT EXECUTED
4cb3e: 4bf9 0004 de7c lea 4de7c <rtems_barrier_delete>,%a5 <== NOT EXECUTED
rtems_barrier_delete(pipe->writeBarrier);
rtems_semaphore_delete(pipe->Semaphore);
free(pipe->Buffer);
4cb44: 47f9 0004 41b0 lea 441b0 <free>,%a3 <== NOT EXECUTED
/* Called with pipe_semaphore held. */
static inline void pipe_free(
pipe_control_t *pipe
)
{
rtems_barrier_delete(pipe->readBarrier);
4cb4a: 4e95 jsr %a5@ <== NOT EXECUTED
rtems_barrier_delete(pipe->writeBarrier);
4cb4c: 2f2a 0030 movel %a2@(48),%sp@- <== NOT EXECUTED
rtems_semaphore_delete(pipe->Semaphore);
free(pipe->Buffer);
free(pipe);
4cb50: 240c movel %a4,%d2 <== NOT EXECUTED
static inline void pipe_free(
pipe_control_t *pipe
)
{
rtems_barrier_delete(pipe->readBarrier);
rtems_barrier_delete(pipe->writeBarrier);
4cb52: 4e95 jsr %a5@ <== NOT EXECUTED
rtems_semaphore_delete(pipe->Semaphore);
4cb54: 2f2a 0028 movel %a2@(40),%sp@- <== NOT EXECUTED
4cb58: 4eb9 0004 7e48 jsr 47e48 <rtems_semaphore_delete> <== NOT EXECUTED
free(pipe->Buffer);
4cb5e: 2f12 movel %a2@,%sp@- <== NOT EXECUTED
4cb60: 4e93 jsr %a3@ <== NOT EXECUTED
free(pipe);
4cb62: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4cb64: 4e93 jsr %a3@ <== NOT EXECUTED
4cb66: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
else
*pipep = pipe;
}
out:
pipe_unlock();
4cb6a: 4eba fba6 jsr %pc@(4c712 <pipe_unlock>) <== NOT EXECUTED
return 0;
out_error:
pipe_release(pipep, iop);
return err;
}
4cb6e: 2002 movel %d2,%d0
4cb70: 4cee 3c3c ffdc moveml %fp@(-36),%d2-%d5/%a2-%a5
4cb76: 4e5e unlk %fp
4cb78: 4e75 rts
PIPE_UNLOCK(pipe);
return 0;
out_error:
pipe_release(pipep, iop);
4cb7a: 2f0d movel %a5,%sp@- <== NOT EXECUTED
goto out_error;
}
if (pipe->Readers == 0) {
prevCounter = pipe->readerCounter;
err = -EINTR;
4cb7c: 74fc moveq #-4,%d2 <== NOT EXECUTED
PIPE_UNLOCK(pipe);
return 0;
out_error:
pipe_release(pipep, iop);
4cb7e: 2f0b movel %a3,%sp@- <== NOT EXECUTED
4cb80: 4eb9 0004 c738 jsr 4c738 <pipe_release> <== NOT EXECUTED
return err;
4cb86: 508f addql #8,%sp <== NOT EXECUTED
}
4cb88: 2002 movel %d2,%d0
4cb8a: 4cee 3c3c ffdc moveml %fp@(-36),%d2-%d5/%a2-%a5
4cb90: 4e5e unlk %fp
4cb92: 4e75 rts
if (pipe->Writers ++ == 0)
PIPE_WAKEUPREADERS(pipe);
if (pipe->Readers == 0 && LIBIO_NODELAY(iop)) {
PIPE_UNLOCK(pipe);
4cb94: 2f2a 0028 movel %a2@(40),%sp@-
err = -ENXIO;
4cb98: 74fa moveq #-6,%d2
if (pipe->Writers ++ == 0)
PIPE_WAKEUPREADERS(pipe);
if (pipe->Readers == 0 && LIBIO_NODELAY(iop)) {
PIPE_UNLOCK(pipe);
4cb9a: 4e94 jsr %a4@
err = -ENXIO;
goto out_error;
4cb9c: 588f addql #4,%sp
PIPE_UNLOCK(pipe);
return 0;
out_error:
pipe_release(pipep, iop);
4cb9e: 2f0d movel %a5,%sp@-
4cba0: 2f0b movel %a3,%sp@-
4cba2: 4eb9 0004 c738 jsr 4c738 <pipe_release>
return err;
4cba8: 508f addql #8,%sp
4cbaa: 60dc bras 4cb88 <fifo_open+0x34e>
if (c ++ == 'z')
c = 'a';
return 0;
err_sem:
rtems_barrier_delete(pipe->writeBarrier);
4cbac: 2f2a 0030 movel %a2@(48),%sp@-
4cbb0: 45f9 0004 de7c lea 4de7c <rtems_barrier_delete>,%a2
4cbb6: 4e92 jsr %a2@
4cbb8: 588f addql #4,%sp
err_wbar:
rtems_barrier_delete(pipe->readBarrier);
4cbba: 2043 moveal %d3,%a0
4cbbc: 2f28 002c movel %a0@(44),%sp@-
4cbc0: 4e92 jsr %a2@
4cbc2: 588f addql #4,%sp
err_rbar:
free(pipe->Buffer);
4cbc4: 2043 moveal %d3,%a0
4cbc6: 45f9 0004 41b0 lea 441b0 <free>,%a2
4cbcc: 2f10 movel %a0@,%sp@-
4cbce: 4e92 jsr %a2@
4cbd0: 588f addql #4,%sp
err_buf:
free(pipe);
4cbd2: 2f03 movel %d3,%sp@-
4cbd4: 4e92 jsr %a2@
4cbd6: 588f addql #4,%sp
{
rtems_barrier_delete(pipe->readBarrier);
rtems_barrier_delete(pipe->writeBarrier);
rtems_semaphore_delete(pipe->Semaphore);
free(pipe->Buffer);
free(pipe);
4cbd8: 74f4 moveq #-12,%d2
else
*pipep = pipe;
}
out:
pipe_unlock();
4cbda: 4eba fb36 jsr %pc@(4c712 <pipe_unlock>)
4cbde: 608e bras 4cb6e <fifo_open+0x334>
return 0;
err_sem:
rtems_barrier_delete(pipe->writeBarrier);
err_wbar:
rtems_barrier_delete(pipe->readBarrier);
4cbe0: 2043 moveal %d3,%a0
4cbe2: 45f9 0004 de7c lea 4de7c <rtems_barrier_delete>,%a2
4cbe8: 2f28 002c movel %a0@(44),%sp@-
4cbec: 4e92 jsr %a2@
4cbee: 588f addql #4,%sp
4cbf0: 60d2 bras 4cbc4 <fifo_open+0x38a>
err_rbar:
free(pipe->Buffer);
err_buf:
free(pipe);
4cbf2: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4cbf4: 45f9 0004 41b0 lea 441b0 <free>,%a2 <== NOT EXECUTED
4cbfa: 4e92 jsr %a2@ <== NOT EXECUTED
4cbfc: 588f addql #4,%sp <== NOT EXECUTED
4cbfe: 60d8 bras 4cbd8 <fifo_open+0x39e> <== NOT EXECUTED
pipe_control_t *pipe;
unsigned int prevCounter;
int err;
err = pipe_new(pipep);
if (err)
4cc00: 240c movel %a4,%d2 <== NOT EXECUTED
return 0;
out_error:
pipe_release(pipep, iop);
return err;
}
4cc02: 2002 movel %d2,%d0 <== NOT EXECUTED
4cc04: 4cee 3c3c ffdc moveml %fp@(-36),%d2-%d5/%a2-%a5 <== NOT EXECUTED
4cc0a: 4e5e unlk %fp <== NOT EXECUTED
00043a68 <fpathconf>:
long fpathconf(
int fd,
int name
)
{
43a68: 4e56 0000 linkw %fp,#0
43a6c: 202e 0008 movel %fp@(8),%d0
43a70: 222e 000c movel %fp@(12),%d1
43a74: 2f02 movel %d2,%sp@-
long return_value;
rtems_libio_t *iop;
rtems_filesystem_limits_and_options_t *the_limits;
rtems_libio_check_fd(fd);
43a76: b0b9 0005 e8e4 cmpl 5e8e4 <rtems_libio_number_iops>,%d0
43a7c: 6400 00f6 bccw 43b74 <fpathconf+0x10c>
iop = rtems_libio_iop(fd);
43a80: 2400 movel %d0,%d2
43a82: ed88 lsll #6,%d0
43a84: e78a lsll #3,%d2
43a86: 2079 0005 ff68 moveal 5ff68 <rtems_libio_iops>,%a0
43a8c: 9082 subl %d2,%d0
43a8e: d1c0 addal %d0,%a0
rtems_libio_check_is_open(iop);
43a90: 2428 0014 movel %a0@(20),%d2
43a94: 0802 0008 btst #8,%d2
43a98: 6700 00da beqw 43b74 <fpathconf+0x10c>
rtems_libio_check_permissions(iop, LIBIO_FLAGS_READ);
43a9c: 0802 0001 btst #1,%d2
43aa0: 670a beqs 43aac <fpathconf+0x44> <== NEVER TAKEN
/*
* Now process the information request.
*/
the_limits = &iop->pathinfo.mt_entry->pathconf_limits_and_options;
43aa2: 2068 0028 moveal %a0@(40),%a0
switch ( name ) {
43aa6: 700b moveq #11,%d0
43aa8: b081 cmpl %d1,%d0
43aaa: 6416 bccs 43ac2 <fpathconf+0x5a>
break;
case _PC_SYNC_IO:
return_value = the_limits->posix_sync_io;
break;
default:
rtems_set_errno_and_return_minus_one( EINVAL );
43aac: 4eb9 0004 eca0 jsr 4eca0 <__errno>
break;
}
return return_value;
}
43ab2: 242e fffc movel %fp@(-4),%d2
break;
case _PC_SYNC_IO:
return_value = the_limits->posix_sync_io;
break;
default:
rtems_set_errno_and_return_minus_one( EINVAL );
43ab6: 2040 moveal %d0,%a0
43ab8: 7216 moveq #22,%d1
43aba: 70ff moveq #-1,%d0
break;
}
return return_value;
}
43abc: 4e5e unlk %fp
break;
case _PC_SYNC_IO:
return_value = the_limits->posix_sync_io;
break;
default:
rtems_set_errno_and_return_minus_one( EINVAL );
43abe: 2081 movel %d1,%a0@
break;
}
return return_value;
}
43ac0: 4e75 rts
* Now process the information request.
*/
the_limits = &iop->pathinfo.mt_entry->pathconf_limits_and_options;
switch ( name ) {
43ac2: 303b 1a08 movew %pc@(43acc <fpathconf+0x64>,%d1:l:2),%d0
43ac6: 48c0 extl %d0
43ac8: 4efb 0802 jmp %pc@(43acc <fpathconf+0x64>,%d0:l)
43acc: 0090 0084 0078 oril #8650872,%d0 <== NOT EXECUTED
43ad2: 006c 0154 <== NOT EXECUTED
43ad4: 0060 0140 <== NOT EXECUTED
43ad6: 0054 0124 <== NOT EXECUTED
43ad8: 0048 0110 <== NOT EXECUTED
43ada: 003c 074 <== NOT EXECUTED
43adc: 0030 060 <== NOT EXECUTED
43ade: 0024 044 <== NOT EXECUTED
43ae0: 0018 030 <== NOT EXECUTED
43ae2: 009c 242e fffc oril #607059964,%d4 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
break;
}
return return_value;
}
43ae8: 4e5e unlk %fp
break;
case _PC_ASYNC_IO:
return_value = the_limits->posix_async_io;
break;
case _PC_PRIO_IO:
return_value = the_limits->posix_prio_io;
43aea: 2028 005c movel %a0@(92),%d0
rtems_set_errno_and_return_minus_one( EINVAL );
break;
}
return return_value;
}
43aee: 4e75 rts
43af0: 242e fffc movel %fp@(-4),%d2
43af4: 4e5e unlk %fp
break;
case _PC_VDISABLE:
return_value = the_limits->posix_vdisable;
break;
case _PC_ASYNC_IO:
return_value = the_limits->posix_async_io;
43af6: 2028 0050 movel %a0@(80),%d0
rtems_set_errno_and_return_minus_one( EINVAL );
break;
}
return return_value;
}
43afa: 4e75 rts
43afc: 242e fffc movel %fp@(-4),%d2
43b00: 4e5e unlk %fp
break;
case _PC_NO_TRUNC:
return_value = the_limits->posix_no_trunc;
break;
case _PC_VDISABLE:
return_value = the_limits->posix_vdisable;
43b02: 2028 0064 movel %a0@(100),%d0
rtems_set_errno_and_return_minus_one( EINVAL );
break;
}
return return_value;
}
43b06: 4e75 rts
43b08: 242e fffc movel %fp@(-4),%d2
43b0c: 4e5e unlk %fp
break;
case _PC_CHOWN_RESTRICTED:
return_value = the_limits->posix_chown_restrictions;
break;
case _PC_NO_TRUNC:
return_value = the_limits->posix_no_trunc;
43b0e: 2028 0058 movel %a0@(88),%d0
rtems_set_errno_and_return_minus_one( EINVAL );
break;
}
return return_value;
}
43b12: 4e75 rts
43b14: 242e fffc movel %fp@(-4),%d2
43b18: 4e5e unlk %fp
break;
case _PC_PIPE_BUF:
return_value = the_limits->pipe_buf;
break;
case _PC_CHOWN_RESTRICTED:
return_value = the_limits->posix_chown_restrictions;
43b1a: 2028 0054 movel %a0@(84),%d0
rtems_set_errno_and_return_minus_one( EINVAL );
break;
}
return return_value;
}
43b1e: 4e75 rts
43b20: 242e fffc movel %fp@(-4),%d2
43b24: 4e5e unlk %fp
break;
case _PC_PATH_MAX:
return_value = the_limits->path_max;
break;
case _PC_PIPE_BUF:
return_value = the_limits->pipe_buf;
43b26: 2028 004c movel %a0@(76),%d0
rtems_set_errno_and_return_minus_one( EINVAL );
break;
}
return return_value;
}
43b2a: 4e75 rts
43b2c: 242e fffc movel %fp@(-4),%d2
43b30: 4e5e unlk %fp
break;
case _PC_NAME_MAX:
return_value = the_limits->name_max;
break;
case _PC_PATH_MAX:
return_value = the_limits->path_max;
43b32: 2028 0048 movel %a0@(72),%d0
rtems_set_errno_and_return_minus_one( EINVAL );
break;
}
return return_value;
}
43b36: 4e75 rts
43b38: 242e fffc movel %fp@(-4),%d2
43b3c: 4e5e unlk %fp
break;
case _PC_MAX_INPUT:
return_value = the_limits->max_input;
break;
case _PC_NAME_MAX:
return_value = the_limits->name_max;
43b3e: 2028 0044 movel %a0@(68),%d0
rtems_set_errno_and_return_minus_one( EINVAL );
break;
}
return return_value;
}
43b42: 4e75 rts
43b44: 242e fffc movel %fp@(-4),%d2
43b48: 4e5e unlk %fp
break;
case _PC_MAX_CANON:
return_value = the_limits->max_canon;
break;
case _PC_MAX_INPUT:
return_value = the_limits->max_input;
43b4a: 2028 0040 movel %a0@(64),%d0
rtems_set_errno_and_return_minus_one( EINVAL );
break;
}
return return_value;
}
43b4e: 4e75 rts
43b50: 242e fffc movel %fp@(-4),%d2
43b54: 4e5e unlk %fp
switch ( name ) {
case _PC_LINK_MAX:
return_value = the_limits->link_max;
break;
case _PC_MAX_CANON:
return_value = the_limits->max_canon;
43b56: 2028 003c movel %a0@(60),%d0
rtems_set_errno_and_return_minus_one( EINVAL );
break;
}
return return_value;
}
43b5a: 4e75 rts
43b5c: 242e fffc movel %fp@(-4),%d2
43b60: 4e5e unlk %fp
the_limits = &iop->pathinfo.mt_entry->pathconf_limits_and_options;
switch ( name ) {
case _PC_LINK_MAX:
return_value = the_limits->link_max;
43b62: 2028 0038 movel %a0@(56),%d0
rtems_set_errno_and_return_minus_one( EINVAL );
break;
}
return return_value;
}
43b66: 4e75 rts
43b68: 242e fffc movel %fp@(-4),%d2
43b6c: 4e5e unlk %fp
break;
case _PC_PRIO_IO:
return_value = the_limits->posix_prio_io;
break;
case _PC_SYNC_IO:
return_value = the_limits->posix_sync_io;
43b6e: 2028 0060 movel %a0@(96),%d0
rtems_set_errno_and_return_minus_one( EINVAL );
break;
}
return return_value;
}
43b72: 4e75 rts
rtems_libio_t *iop;
rtems_filesystem_limits_and_options_t *the_limits;
rtems_libio_check_fd(fd);
iop = rtems_libio_iop(fd);
rtems_libio_check_is_open(iop);
43b74: 4eb9 0004 eca0 jsr 4eca0 <__errno>
43b7a: 7409 moveq #9,%d2
43b7c: 2040 moveal %d0,%a0
43b7e: 70ff moveq #-1,%d0
43b80: 2082 movel %d2,%a0@
rtems_set_errno_and_return_minus_one( EINVAL );
break;
}
return return_value;
}
43b82: 242e fffc movel %fp@(-4),%d2
43b86: 4e5e unlk %fp
...
00042db8 <free>:
#include <stdlib.h>
void free(
void *ptr
)
{
42db8: 4e56 0000 linkw %fp,#0
MSBUMP(free_calls, 1);
42dbc: 52b9 0005 e2ec addql #1,5e2ec <rtems_malloc_statistics+0xc>
#include <stdlib.h>
void free(
void *ptr
)
{
42dc2: 2f02 movel %d2,%sp@-
42dc4: 242e 0008 movel %fp@(8),%d2
MSBUMP(free_calls, 1);
if ( !ptr )
42dc8: 6732 beqs 42dfc <free+0x44>
#endif
/*
* Do not attempt to free memory if in a critical section or ISR.
*/
if ( _System_state_Is_up(_System_state_Get()) &&
42dca: 7003 moveq #3,%d0
42dcc: b0b9 0005 e588 cmpl 5e588 <_System_state_Current>,%d0
42dd2: 6758 beqs 42e2c <free+0x74> <== ALWAYS TAKEN
}
/*
* If configured, update the statistics
*/
if ( rtems_malloc_statistics_helpers )
42dd4: 2079 0005 d296 moveal 5d296 <rtems_malloc_statistics_helpers>,%a0
42dda: 4a88 tstl %a0
42ddc: 670a beqs 42de8 <free+0x30>
(*rtems_malloc_statistics_helpers->at_free)(ptr);
42dde: 2f02 movel %d2,%sp@-
42de0: 2068 0008 moveal %a0@(8),%a0
42de4: 4e90 jsr %a0@
42de6: 588f addql #4,%sp
if ( !_Protected_heap_Free( RTEMS_Malloc_Heap, ptr ) ) {
42de8: 2f02 movel %d2,%sp@-
42dea: 2f39 0005 cc50 movel 5cc50 <RTEMS_Malloc_Heap>,%sp@-
42df0: 4eb9 0004 824c jsr 4824c <_Protected_heap_Free>
42df6: 508f addql #8,%sp
42df8: 4a00 tstb %d0
42dfa: 6708 beqs 42e04 <free+0x4c>
RTEMS_Malloc_Heap->area_begin,
RTEMS_Malloc_Heap->area_end
);
}
}
42dfc: 242e fffc movel %fp@(-4),%d2
42e00: 4e5e unlk %fp
42e02: 4e75 rts
if ( !_Protected_heap_Free( RTEMS_Malloc_Heap, ptr ) ) {
printk( "Program heap: free of bad pointer %p -- range %p - %p \n",
ptr,
RTEMS_Malloc_Heap->area_begin,
RTEMS_Malloc_Heap->area_end
42e04: 2079 0005 cc50 moveal 5cc50 <RTEMS_Malloc_Heap>,%a0
*/
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",
42e0a: 2f28 001c movel %a0@(28),%sp@-
42e0e: 2f28 0018 movel %a0@(24),%sp@-
42e12: 2f02 movel %d2,%sp@-
42e14: 4879 0005 bebc pea 5bebc <rtems_status_assoc+0x168>
42e1a: 4eb9 0004 3c50 jsr 43c50 <printk>
RTEMS_Malloc_Heap->area_begin,
RTEMS_Malloc_Heap->area_end
);
}
}
42e20: 242e fffc movel %fp@(-4),%d2
*/
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",
42e24: 4fef 0010 lea %sp@(16),%sp
RTEMS_Malloc_Heap->area_begin,
RTEMS_Malloc_Heap->area_end
);
}
}
42e28: 4e5e unlk %fp
42e2a: 4e75 rts
/*
* 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() ) {
42e2c: 4eb9 0004 2f7c jsr 42f7c <malloc_is_system_state_OK>
#endif
/*
* Do not attempt to free memory if in a critical section or ISR.
*/
if ( _System_state_Is_up(_System_state_Get()) &&
42e32: 4a00 tstb %d0
42e34: 669e bnes 42dd4 <free+0x1c>
!malloc_is_system_state_OK() ) {
malloc_deferred_free(ptr);
42e36: 2d42 0008 movel %d2,%fp@(8)
RTEMS_Malloc_Heap->area_begin,
RTEMS_Malloc_Heap->area_end
);
}
}
42e3a: 242e fffc movel %fp@(-4),%d2
42e3e: 4e5e unlk %fp
/*
* 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);
42e40: 4ef9 0004 2ffe jmp 42ffe <malloc_deferred_free>
...
00044314 <free_user_env>:
* NOTE: this must be called with
* thread dispatching disabled!
*/
static void
free_user_env(void *venv)
{
44314: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
44318: 2f0b movel %a3,%sp@- <== NOT EXECUTED
4431a: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4431c: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
rtems_user_env_t *env = (rtems_user_env_t*) venv ;
if (env != &rtems_global_user_env
44320: b5fc 0005 ec08 cmpal #388104,%a2 <== NOT EXECUTED
44326: 6728 beqs 44350 <free_user_env+0x3c> <== NOT EXECUTED
#ifdef HAVE_USERENV_REFCNT
&& --env->refcnt <= 0
#endif
) {
rtems_filesystem_freenode( &env->current_directory);
44328: 486a 0004 pea %a2@(4) <== NOT EXECUTED
4432c: 47f9 0004 3174 lea 43174 <rtems_filesystem_freenode>,%a3 <== NOT EXECUTED
44332: 4e93 jsr %a3@ <== NOT EXECUTED
rtems_filesystem_freenode( &env->root_directory);
44334: 486a 0018 pea %a2@(24) <== NOT EXECUTED
44338: 4e93 jsr %a3@ <== NOT EXECUTED
free(env);
}
}
4433a: 266e fffc moveal %fp@(-4),%a3 <== NOT EXECUTED
&& --env->refcnt <= 0
#endif
) {
rtems_filesystem_freenode( &env->current_directory);
rtems_filesystem_freenode( &env->root_directory);
free(env);
4433e: 508f addql #8,%sp <== NOT EXECUTED
44340: 2d4a 0008 movel %a2,%fp@(8) <== NOT EXECUTED
}
}
44344: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
44348: 4e5e unlk %fp <== NOT EXECUTED
&& --env->refcnt <= 0
#endif
) {
rtems_filesystem_freenode( &env->current_directory);
rtems_filesystem_freenode( &env->root_directory);
free(env);
4434a: 4ef9 0004 3188 jmp 43188 <free> <== NOT EXECUTED
}
}
44350: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
44354: 266e fffc moveal %fp@(-4),%a3 <== NOT EXECUTED
44358: 4e5e unlk %fp <== NOT EXECUTED
0004af30 <ftruncate>:
int ftruncate(
int fd,
off_t length
)
{
4af30: 4e56 ffec linkw %fp,#-20
4af34: 202e 0008 movel %fp@(8),%d0
4af38: 2f0a movel %a2,%sp@-
rtems_libio_t *iop;
rtems_filesystem_location_info_t loc;
rtems_libio_check_fd( fd );
4af3a: b0b9 0005 cc44 cmpl 5cc44 <rtems_libio_number_iops>,%d0
4af40: 6478 bccs 4afba <ftruncate+0x8a>
iop = rtems_libio_iop( fd );
4af42: 2200 movel %d0,%d1
4af44: ed88 lsll #6,%d0
4af46: e789 lsll #3,%d1
4af48: 2479 0005 e2c8 moveal 5e2c8 <rtems_libio_iops>,%a2
4af4e: 9081 subl %d1,%d0
4af50: d5c0 addal %d0,%a2
rtems_libio_check_is_open(iop);
4af52: 202a 0014 movel %a2@(20),%d0
4af56: 0280 0000 0100 andil #256,%d0
4af5c: 675c beqs 4afba <ftruncate+0x8a>
/*
* Make sure we are not working on a directory
*/
loc = iop->pathinfo;
4af5e: 2d6a 0018 ffec movel %a2@(24),%fp@(-20)
4af64: 2d6a 001c fff0 movel %a2@(28),%fp@(-16)
4af6a: 2d6a 0020 fff4 movel %a2@(32),%fp@(-12)
4af70: 2d6a 0024 fff8 movel %a2@(36),%fp@(-8)
if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY )
4af76: 206e fff8 moveal %fp@(-8),%a0
/*
* Make sure we are not working on a directory
*/
loc = iop->pathinfo;
4af7a: 2d6a 0028 fffc movel %a2@(40),%fp@(-4)
if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY )
4af80: 486e ffec pea %fp@(-20)
4af84: 2068 0010 moveal %a0@(16),%a0
4af88: 4e90 jsr %a0@
4af8a: 588f addql #4,%sp
4af8c: 7201 moveq #1,%d1
4af8e: b280 cmpl %d0,%d1
4af90: 6754 beqs 4afe6 <ftruncate+0xb6> <== NEVER TAKEN
rtems_set_errno_and_return_minus_one( EISDIR );
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
4af92: 7004 moveq #4,%d0
4af94: c0aa 0014 andl %a2@(20),%d0
4af98: 6736 beqs 4afd0 <ftruncate+0xa0>
return (*iop->pathinfo.handlers->ftruncate_h)( iop, length );
4af9a: 206a 0020 moveal %a2@(32),%a0
4af9e: 2f2e 0010 movel %fp@(16),%sp@-
4afa2: 2f2e 000c movel %fp@(12),%sp@-
4afa6: 2f0a movel %a2,%sp@-
4afa8: 2068 0020 moveal %a0@(32),%a0
4afac: 4e90 jsr %a0@
}
4afae: 246e ffe8 moveal %fp@(-24),%a2
if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY )
rtems_set_errno_and_return_minus_one( EISDIR );
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
return (*iop->pathinfo.handlers->ftruncate_h)( iop, length );
4afb2: 4fef 000c lea %sp@(12),%sp
}
4afb6: 4e5e unlk %fp
4afb8: 4e75 rts
rtems_libio_t *iop;
rtems_filesystem_location_info_t loc;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
4afba: 4eb9 0004 da6c jsr 4da6c <__errno>
rtems_set_errno_and_return_minus_one( EISDIR );
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
return (*iop->pathinfo.handlers->ftruncate_h)( iop, length );
}
4afc0: 246e ffe8 moveal %fp@(-24),%a2
rtems_libio_t *iop;
rtems_filesystem_location_info_t loc;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
4afc4: 2040 moveal %d0,%a0
4afc6: 7209 moveq #9,%d1
4afc8: 70ff moveq #-1,%d0
rtems_set_errno_and_return_minus_one( EISDIR );
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
return (*iop->pathinfo.handlers->ftruncate_h)( iop, length );
}
4afca: 4e5e unlk %fp
rtems_libio_t *iop;
rtems_filesystem_location_info_t loc;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
4afcc: 2081 movel %d1,%a0@
rtems_set_errno_and_return_minus_one( EISDIR );
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
return (*iop->pathinfo.handlers->ftruncate_h)( iop, length );
}
4afce: 4e75 rts
loc = iop->pathinfo;
if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY )
rtems_set_errno_and_return_minus_one( EISDIR );
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
4afd0: 4eb9 0004 da6c jsr 4da6c <__errno>
return (*iop->pathinfo.handlers->ftruncate_h)( iop, length );
}
4afd6: 246e ffe8 moveal %fp@(-24),%a2
loc = iop->pathinfo;
if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY )
rtems_set_errno_and_return_minus_one( EISDIR );
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
4afda: 2040 moveal %d0,%a0
4afdc: 7216 moveq #22,%d1
4afde: 70ff moveq #-1,%d0
return (*iop->pathinfo.handlers->ftruncate_h)( iop, length );
}
4afe0: 4e5e unlk %fp
loc = iop->pathinfo;
if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY )
rtems_set_errno_and_return_minus_one( EISDIR );
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
4afe2: 2081 movel %d1,%a0@
return (*iop->pathinfo.handlers->ftruncate_h)( iop, length );
}
4afe4: 4e75 rts
* Make sure we are not working on a directory
*/
loc = iop->pathinfo;
if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY )
rtems_set_errno_and_return_minus_one( EISDIR );
4afe6: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
return (*iop->pathinfo.handlers->ftruncate_h)( iop, length );
}
4afec: 246e ffe8 moveal %fp@(-24),%a2 <== NOT EXECUTED
* Make sure we are not working on a directory
*/
loc = iop->pathinfo;
if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY )
rtems_set_errno_and_return_minus_one( EISDIR );
4aff0: 2040 moveal %d0,%a0 <== NOT EXECUTED
4aff2: 7215 moveq #21,%d1 <== NOT EXECUTED
4aff4: 70ff moveq #-1,%d0 <== NOT EXECUTED
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
return (*iop->pathinfo.handlers->ftruncate_h)( iop, length );
}
4aff6: 4e5e unlk %fp <== NOT EXECUTED
* Make sure we are not working on a directory
*/
loc = iop->pathinfo;
if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY )
rtems_set_errno_and_return_minus_one( EISDIR );
4aff8: 2081 movel %d1,%a0@ <== NOT EXECUTED
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
return (*iop->pathinfo.handlers->ftruncate_h)( iop, length );
}
0004300c <getchark>:
#include <rtems.h>
#include <rtems/bspIo.h>
int getchark(void)
{
4300c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
if ( BSP_poll_char )
43010: 2279 0005 ddbc moveal 5ddbc <BSP_poll_char>,%a1 <== NOT EXECUTED
43016: 4a89 tstl %a1 <== NOT EXECUTED
43018: 6704 beqs 4301e <getchark+0x12> <== NOT EXECUTED
return (*BSP_poll_char)();
return -1;
}
4301a: 4e5e unlk %fp <== NOT EXECUTED
#include <rtems/bspIo.h>
int getchark(void)
{
if ( BSP_poll_char )
return (*BSP_poll_char)();
4301c: 4ed1 jmp %a1@ <== NOT EXECUTED
return -1;
}
4301e: 70ff moveq #-1,%d0 <== NOT EXECUTED
43020: 4e5e unlk %fp <== NOT EXECUTED
0005c820 <getdents>:
int getdents(
int dd_fd,
char *dd_buf,
int dd_len
)
{
5c820: 4e56 ffec linkw %fp,#-20
5c824: 202e 0008 movel %fp@(8),%d0
5c828: 2f0a movel %a2,%sp@-
rtems_filesystem_location_info_t loc;
/*
* Get the file control block structure associated with the file descriptor
*/
iop = rtems_libio_iop( dd_fd );
5c82a: b0b9 0005 f0f4 cmpl 5f0f4 <rtems_libio_number_iops>,%d0
5c830: 6464 bccs 5c896 <getdents+0x76> <== NEVER TAKEN
5c832: 2200 movel %d0,%d1
5c834: ed88 lsll #6,%d0
5c836: e789 lsll #3,%d1
5c838: 2479 0006 0898 moveal 60898 <rtems_libio_iops>,%a2
5c83e: 9081 subl %d1,%d0
5c840: d5c0 addal %d0,%a2
/*
* Make sure we are working on a directory
*/
loc = iop->pathinfo;
5c842: 2d6a 0018 ffec movel %a2@(24),%fp@(-20)
5c848: 2d6a 001c fff0 movel %a2@(28),%fp@(-16)
5c84e: 2d6a 0020 fff4 movel %a2@(32),%fp@(-12)
5c854: 2d6a 0024 fff8 movel %a2@(36),%fp@(-8)
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY )
5c85a: 206e fff8 moveal %fp@(-8),%a0
iop = rtems_libio_iop( dd_fd );
/*
* Make sure we are working on a directory
*/
loc = iop->pathinfo;
5c85e: 2d6a 0028 fffc movel %a2@(40),%fp@(-4)
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY )
5c864: 486e ffec pea %fp@(-20)
5c868: 2068 0010 moveal %a0@(16),%a0
5c86c: 4e90 jsr %a0@
5c86e: 588f addql #4,%sp
5c870: 7201 moveq #1,%d1
5c872: b280 cmpl %d0,%d1
5c874: 6624 bnes 5c89a <getdents+0x7a>
/*
* 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 );
5c876: 206a 0020 moveal %a2@(32),%a0
5c87a: 2f2e 0010 movel %fp@(16),%sp@-
5c87e: 2f2e 000c movel %fp@(12),%sp@-
5c882: 2f0a movel %a2,%sp@-
5c884: 2068 0008 moveal %a0@(8),%a0
5c888: 4e90 jsr %a0@
}
5c88a: 246e ffe8 moveal %fp@(-24),%a2
/*
* 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 );
5c88e: 4fef 000c lea %sp@(12),%sp
}
5c892: 4e5e unlk %fp
5c894: 4e75 rts
rtems_filesystem_location_info_t loc;
/*
* Get the file control block structure associated with the file descriptor
*/
iop = rtems_libio_iop( dd_fd );
5c896: 95ca subal %a2,%a2 <== NOT EXECUTED
5c898: 60a8 bras 5c842 <getdents+0x22> <== NOT EXECUTED
/*
* Make sure we are working on a directory
*/
loc = iop->pathinfo;
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY )
rtems_set_errno_and_return_minus_one( ENOTDIR );
5c89a: 4eb9 0004 ee18 jsr 4ee18 <__errno>
/*
* 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 );
}
5c8a0: 246e ffe8 moveal %fp@(-24),%a2
/*
* Make sure we are working on a directory
*/
loc = iop->pathinfo;
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY )
rtems_set_errno_and_return_minus_one( ENOTDIR );
5c8a4: 2040 moveal %d0,%a0
5c8a6: 7214 moveq #20,%d1
5c8a8: 70ff moveq #-1,%d0
/*
* 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 );
}
5c8aa: 4e5e unlk %fp
/*
* Make sure we are working on a directory
*/
loc = iop->pathinfo;
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY )
rtems_set_errno_and_return_minus_one( ENOTDIR );
5c8ac: 2081 movel %d1,%a0@ <== NOT EXECUTED
/*
* 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 );
}
00042e48 <gettimeofday>:
*/
int gettimeofday(
struct timeval *tp,
void * __tz __attribute__((unused))
)
{
42e48: 4e56 ffec linkw %fp,#-20
42e4c: 48d7 040c moveml %d2-%d3/%a2,%sp@
42e50: 246e 0008 moveal %fp@(8),%a2
/* struct timezone* tzp = (struct timezone*) __tz; */
if ( !tp )
42e54: 4a8a tstl %a2
42e56: 673c beqs 42e94 <gettimeofday+0x4c> <== NEVER TAKEN
{
ISR_Level level;
struct timespec now;
suseconds_t useconds;
_ISR_Disable(level);
42e58: 203c 0000 0700 movel #1792,%d0
42e5e: 40c2 movew %sr,%d2
42e60: 8082 orl %d2,%d0
42e62: 46c0 movew %d0,%sr
_TOD_Get( &now );
42e64: 486e fff8 pea %fp@(-8)
42e68: 4eb9 0004 74b4 jsr 474b4 <_TOD_Get>
_ISR_Enable(level);
42e6e: 46c2 movew %d2,%sr
useconds = (suseconds_t)now.tv_nsec;
useconds /= (suseconds_t)TOD_NANOSECONDS_PER_MICROSECOND;
time->tv_sec = now.tv_sec;
time->tv_usec = useconds;
42e70: 263c 0000 03e8 movel #1000,%d3
* Timezone information ignored by the OS proper. Per email
* with Eric Norum, this is how GNU/Linux, Solaris, and MacOS X
* do it. This puts us in good company.
*/
return 0;
42e76: 588f addql #4,%sp
42e78: 4280 clrl %d0
_ISR_Disable(level);
_TOD_Get( &now );
_ISR_Enable(level);
useconds = (suseconds_t)now.tv_nsec;
42e7a: 222e fffc movel %fp@(-4),%d1
useconds /= (suseconds_t)TOD_NANOSECONDS_PER_MICROSECOND;
time->tv_sec = now.tv_sec;
time->tv_usec = useconds;
42e7e: 4c43 1801 remsl %d3,%d1,%d1
_ISR_Enable(level);
useconds = (suseconds_t)now.tv_nsec;
useconds /= (suseconds_t)TOD_NANOSECONDS_PER_MICROSECOND;
time->tv_sec = now.tv_sec;
42e82: 24ae fff8 movel %fp@(-8),%a2@
time->tv_usec = useconds;
42e86: 2541 0004 movel %d1,%a2@(4)
}
42e8a: 4cee 040c ffec moveml %fp@(-20),%d2-%d3/%a2
42e90: 4e5e unlk %fp
42e92: 4e75 rts
void * __tz __attribute__((unused))
)
{
/* struct timezone* tzp = (struct timezone*) __tz; */
if ( !tp )
rtems_set_errno_and_return_minus_one( EFAULT );
42e94: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
42e9a: 720e moveq #14,%d1 <== NOT EXECUTED
42e9c: 2040 moveal %d0,%a0 <== NOT EXECUTED
42e9e: 70ff moveq #-1,%d0 <== NOT EXECUTED
* with Eric Norum, this is how GNU/Linux, Solaris, and MacOS X
* do it. This puts us in good company.
*/
return 0;
}
42ea0: 4cee 040c ffec moveml %fp@(-20),%d2-%d3/%a2 <== NOT EXECUTED
void * __tz __attribute__((unused))
)
{
/* struct timezone* tzp = (struct timezone*) __tz; */
if ( !tp )
rtems_set_errno_and_return_minus_one( EFAULT );
42ea6: 2081 movel %d1,%a0@ <== NOT EXECUTED
* with Eric Norum, this is how GNU/Linux, Solaris, and MacOS X
* do it. This puts us in good company.
*/
return 0;
}
42ea8: 4e5e unlk %fp <== NOT EXECUTED
0004d190 <imfs_dir_open>:
IMFS_jnode_t *the_jnode;
/* Is the node a directory ? */
the_jnode = (IMFS_jnode_t *) iop->pathinfo.node_access;
if ( the_jnode->type != IMFS_DIRECTORY )
4d190: 7001 moveq #1,%d0
rtems_libio_t *iop,
const char *pathname,
uint32_t flag,
uint32_t mode
)
{
4d192: 4e56 0000 linkw %fp,#0
4d196: 206e 0008 moveal %fp@(8),%a0
IMFS_jnode_t *the_jnode;
/* Is the node a directory ? */
the_jnode = (IMFS_jnode_t *) iop->pathinfo.node_access;
if ( the_jnode->type != IMFS_DIRECTORY )
4d19a: 2268 0018 moveal %a0@(24),%a1
rtems_libio_t *iop,
const char *pathname,
uint32_t flag,
uint32_t mode
)
{
4d19e: 2f02 movel %d2,%sp@-
IMFS_jnode_t *the_jnode;
/* Is the node a directory ? */
the_jnode = (IMFS_jnode_t *) iop->pathinfo.node_access;
if ( the_jnode->type != IMFS_DIRECTORY )
4d1a0: b0a9 0048 cmpl %a1@(72),%d0
4d1a4: 6708 beqs 4d1ae <imfs_dir_open+0x1e> <== ALWAYS TAKEN
return -1; /* It wasn't a directory --> return error */
iop->offset = 0;
return 0;
}
4d1a6: 241f movel %sp@+,%d2 <== NOT EXECUTED
/* Is the node a directory ? */
the_jnode = (IMFS_jnode_t *) iop->pathinfo.node_access;
if ( the_jnode->type != IMFS_DIRECTORY )
return -1; /* It wasn't a directory --> return error */
4d1a8: 70ff moveq #-1,%d0 <== NOT EXECUTED
iop->offset = 0;
return 0;
}
4d1aa: 4e5e unlk %fp <== NOT EXECUTED
4d1ac: 4e75 rts <== NOT EXECUTED
if ( the_jnode->type != IMFS_DIRECTORY )
return -1; /* It wasn't a directory --> return error */
iop->offset = 0;
return 0;
4d1ae: 4200 clrb %d0
the_jnode = (IMFS_jnode_t *) iop->pathinfo.node_access;
if ( the_jnode->type != IMFS_DIRECTORY )
return -1; /* It wasn't a directory --> return error */
iop->offset = 0;
4d1b0: 4281 clrl %d1
4d1b2: 4282 clrl %d2
4d1b4: 2141 000c movel %d1,%a0@(12)
4d1b8: 2142 0010 movel %d2,%a0@(16)
return 0;
}
4d1bc: 241f movel %sp@+,%d2
4d1be: 4e5e unlk %fp <== NOT EXECUTED
0004d3f4 <imfs_dir_rmnod>:
int imfs_dir_rmnod(
rtems_filesystem_location_info_t *parent_pathloc, /* IN */
rtems_filesystem_location_info_t *pathloc /* IN */
)
{
4d3f4: 4e56 0000 linkw %fp,#0
4d3f8: 206e 000c moveal %fp@(12),%a0
4d3fc: 2f0a movel %a2,%sp@-
IMFS_jnode_t *the_jnode;
the_jnode = (IMFS_jnode_t *) pathloc->node_access;
4d3fe: 2450 moveal %a0@,%a2
4d400: 200a movel %a2,%d0
4d402: 0680 0000 0050 addil #80,%d0
/*
* You cannot remove a node that still has children
*/
if ( ! rtems_chain_is_empty( &the_jnode->info.directory.Entries ) )
4d408: b0aa 004c cmpl %a2@(76),%d0
4d40c: 6642 bnes 4d450 <imfs_dir_rmnod+0x5c>
/*
* You cannot remove the file system root node.
*/
if ( pathloc->mt_entry->mt_fs_root.node_access == pathloc->node_access )
4d40e: 2068 0010 moveal %a0@(16),%a0
4d412: b5e8 001c cmpal %a0@(28),%a2
4d416: 6722 beqs 4d43a <imfs_dir_rmnod+0x46>
/*
* You cannot remove a mountpoint.
*/
if ( the_jnode->info.directory.mt_fs != NULL )
4d418: 4aaa 0058 tstl %a2@(88)
4d41c: 661c bnes 4d43a <imfs_dir_rmnod+0x46> <== NEVER TAKEN
rtems_set_errno_and_return_minus_one( EBUSY );
IMFS_create_orphan( the_jnode );
4d41e: 2f0a movel %a2,%sp@-
4d420: 4eb9 0004 aba8 jsr 4aba8 <IMFS_create_orphan>
IMFS_check_node_remove( the_jnode );
4d426: 2f0a movel %a2,%sp@-
4d428: 4eb9 0004 abec jsr 4abec <IMFS_check_node_remove>
return 0;
}
4d42e: 246e fffc moveal %fp@(-4),%a2
rtems_set_errno_and_return_minus_one( EBUSY );
IMFS_create_orphan( the_jnode );
IMFS_check_node_remove( the_jnode );
return 0;
4d432: 508f addql #8,%sp
4d434: 4280 clrl %d0
}
4d436: 4e5e unlk %fp
4d438: 4e75 rts
/*
* You cannot remove a mountpoint.
*/
if ( the_jnode->info.directory.mt_fs != NULL )
rtems_set_errno_and_return_minus_one( EBUSY );
4d43a: 4eb9 0004 da6c jsr 4da6c <__errno>
IMFS_create_orphan( the_jnode );
IMFS_check_node_remove( the_jnode );
return 0;
}
4d440: 246e fffc moveal %fp@(-4),%a2
/*
* You cannot remove a mountpoint.
*/
if ( the_jnode->info.directory.mt_fs != NULL )
rtems_set_errno_and_return_minus_one( EBUSY );
4d444: 2040 moveal %d0,%a0
4d446: 7210 moveq #16,%d1
4d448: 70ff moveq #-1,%d0
IMFS_create_orphan( the_jnode );
IMFS_check_node_remove( the_jnode );
return 0;
}
4d44a: 4e5e unlk %fp
/*
* You cannot remove a mountpoint.
*/
if ( the_jnode->info.directory.mt_fs != NULL )
rtems_set_errno_and_return_minus_one( EBUSY );
4d44c: 2081 movel %d1,%a0@
IMFS_create_orphan( the_jnode );
IMFS_check_node_remove( the_jnode );
return 0;
}
4d44e: 4e75 rts
/*
* You cannot remove a node that still has children
*/
if ( ! rtems_chain_is_empty( &the_jnode->info.directory.Entries ) )
rtems_set_errno_and_return_minus_one( ENOTEMPTY );
4d450: 4eb9 0004 da6c jsr 4da6c <__errno>
IMFS_create_orphan( the_jnode );
IMFS_check_node_remove( the_jnode );
return 0;
}
4d456: 246e fffc moveal %fp@(-4),%a2
/*
* You cannot remove a node that still has children
*/
if ( ! rtems_chain_is_empty( &the_jnode->info.directory.Entries ) )
rtems_set_errno_and_return_minus_one( ENOTEMPTY );
4d45a: 2040 moveal %d0,%a0
4d45c: 725a moveq #90,%d1
4d45e: 70ff moveq #-1,%d0
IMFS_create_orphan( the_jnode );
IMFS_check_node_remove( the_jnode );
return 0;
}
4d460: 4e5e unlk %fp
/*
* You cannot remove a node that still has children
*/
if ( ! rtems_chain_is_empty( &the_jnode->info.directory.Entries ) )
rtems_set_errno_and_return_minus_one( ENOTEMPTY );
4d462: 2081 movel %d1,%a0@
IMFS_create_orphan( the_jnode );
IMFS_check_node_remove( the_jnode );
return 0;
}
...
00044e60 <iproc>:
/*
* Process a single input character
*/
static int
iproc (unsigned char c, struct rtems_termios_tty *tty)
{
44e60: 4e56 fff4 linkw %fp,#-12
44e64: 222e 0008 movel %fp@(8),%d1
44e68: 48d7 040c moveml %d2-%d3/%a2,%sp@
44e6c: 246e 000c moveal %fp@(12),%a2
if (tty->termios.c_iflag & ISTRIP)
44e70: 202a 0030 movel %a2@(48),%d0
/*
* Process a single input character
*/
static int
iproc (unsigned char c, struct rtems_termios_tty *tty)
{
44e74: 1401 moveb %d1,%d2
if (tty->termios.c_iflag & ISTRIP)
44e76: 0800 0005 btst #5,%d0
44e7a: 6704 beqs 44e80 <iproc+0x20> <== ALWAYS TAKEN
c &= 0x7f;
44e7c: 747f moveq #127,%d2 <== NOT EXECUTED
44e7e: c481 andl %d1,%d2 <== NOT EXECUTED
if (tty->termios.c_iflag & IUCLC)
44e80: 0800 0009 btst #9,%d0
44e84: 6720 beqs 44ea6 <iproc+0x46>
c = tolower (c);
44e86: 2079 0005 cddc moveal 5cddc <__ctype_ptr__>,%a0
44e8c: 7603 moveq #3,%d3
44e8e: 0282 0000 00ff andil #255,%d2
44e94: 1230 2801 moveb %a0@(00000001,%d2:l),%d1
44e98: 49c1 extbl %d1
44e9a: c283 andl %d3,%d1
44e9c: 163c 0001 moveb #1,%d3
44ea0: b681 cmpl %d1,%d3
44ea2: 6700 00e0 beqw 44f84 <iproc+0x124>
if (c == '\r') {
44ea6: 4281 clrl %d1
44ea8: 1202 moveb %d2,%d1
44eaa: 760d moveq #13,%d3
44eac: b681 cmpl %d1,%d3
44eae: 6740 beqs 44ef0 <iproc+0x90>
if (tty->termios.c_iflag & IGNCR)
return 0;
if (tty->termios.c_iflag & ICRNL)
c = '\n';
} else if ((c == '\n') && (tty->termios.c_iflag & INLCR)) {
44eb0: 760a moveq #10,%d3
44eb2: b681 cmpl %d1,%d3
44eb4: 6700 00c4 beqw 44f7a <iproc+0x11a>
c = '\r';
}
if ((c != '\0') && (tty->termios.c_lflag & ICANON)) {
44eb8: 4a02 tstb %d2
44eba: 664c bnes 44f08 <iproc+0xa8> <== ALWAYS TAKEN
}
/*
* FIXME: Should do IMAXBEL handling somehow
*/
if (tty->ccount < (CBUFSIZE-1)) {
44ebc: 2039 0005 cd50 movel 5cd50 <rtems_termios_cbufsize>,%d0
44ec2: 5380 subql #1,%d0
44ec4: 222a 0020 movel %a2@(32),%d1
44ec8: b081 cmpl %d1,%d0
44eca: 6f28 bles 44ef4 <iproc+0x94> <== NEVER TAKEN
if (tty->termios.c_lflag & ECHO)
44ecc: 7008 moveq #8,%d0
44ece: c0aa 003c andl %a2@(60),%d0
44ed2: 6600 00ba bnew 44f8e <iproc+0x12e>
echo (c, tty);
tty->cbuf[tty->ccount++] = c;
44ed6: 206a 001c moveal %a2@(28),%a0 <== NOT EXECUTED
}
return 0;
44eda: 4280 clrl %d0 <== NOT EXECUTED
* FIXME: Should do IMAXBEL handling somehow
*/
if (tty->ccount < (CBUFSIZE-1)) {
if (tty->termios.c_lflag & ECHO)
echo (c, tty);
tty->cbuf[tty->ccount++] = c;
44edc: 1182 1800 moveb %d2,%a0@(00000000,%d1:l) <== NOT EXECUTED
44ee0: 5281 addql #1,%d1 <== NOT EXECUTED
44ee2: 2541 0020 movel %d1,%a2@(32) <== NOT EXECUTED
}
return 0;
}
44ee6: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
44eec: 4e5e unlk %fp
44eee: 4e75 rts
if (tty->termios.c_iflag & IUCLC)
c = tolower (c);
if (c == '\r') {
if (tty->termios.c_iflag & IGNCR)
44ef0: 4a00 tstb %d0
44ef2: 6c0c bges 44f00 <iproc+0xa0> <== ALWAYS TAKEN
if (tty->ccount < (CBUFSIZE-1)) {
if (tty->termios.c_lflag & ECHO)
echo (c, tty);
tty->cbuf[tty->ccount++] = c;
}
return 0;
44ef4: 4280 clrl %d0 <== NOT EXECUTED
}
44ef6: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2 <== NOT EXECUTED
44efc: 4e5e unlk %fp <== NOT EXECUTED
44efe: 4e75 rts <== NOT EXECUTED
c = tolower (c);
if (c == '\r') {
if (tty->termios.c_iflag & IGNCR)
return 0;
if (tty->termios.c_iflag & ICRNL)
44f00: 0800 0008 btst #8,%d0
44f04: 6702 beqs 44f08 <iproc+0xa8> <== NEVER TAKEN
c = '\n';
44f06: 740a moveq #10,%d2
} else if ((c == '\n') && (tty->termios.c_iflag & INLCR)) {
c = '\r';
}
if ((c != '\0') && (tty->termios.c_lflag & ICANON)) {
44f08: 222a 003c movel %a2@(60),%d1
44f0c: 0801 0001 btst #1,%d1
44f10: 67aa beqs 44ebc <iproc+0x5c> <== NEVER TAKEN
if (c == tty->termios.c_cc[VERASE]) {
44f12: 4283 clrl %d3
44f14: 162a 0043 moveb %a2@(67),%d3
44f18: 4280 clrl %d0
44f1a: 1002 moveb %d2,%d0
44f1c: b083 cmpl %d3,%d0
44f1e: 6700 0122 beqw 45042 <iproc+0x1e2>
erase (tty, 0);
return 0;
}
else if (c == tty->termios.c_cc[VKILL]) {
44f22: 4283 clrl %d3
44f24: 162a 0044 moveb %a2@(68),%d3
44f28: b083 cmpl %d3,%d0
44f2a: 6700 00a8 beqw 44fd4 <iproc+0x174>
erase (tty, 1);
return 0;
}
else if (c == tty->termios.c_cc[VEOF]) {
44f2e: 4283 clrl %d3
44f30: 162a 0045 moveb %a2@(69),%d3
44f34: b083 cmpl %d3,%d0
44f36: 6700 00fe beqw 45036 <iproc+0x1d6>
return 1;
} else if (c == '\n') {
44f3a: 760a moveq #10,%d3
44f3c: b680 cmpl %d0,%d3
44f3e: 6700 00ac beqw 44fec <iproc+0x18c>
if (tty->termios.c_lflag & (ECHO | ECHONL))
echo (c, tty);
tty->cbuf[tty->ccount++] = c;
return 1;
} else if ((c == tty->termios.c_cc[VEOL]) ||
44f42: 4283 clrl %d3
44f44: 162a 004c moveb %a2@(76),%d3
44f48: b083 cmpl %d3,%d0
44f4a: 670c beqs 44f58 <iproc+0xf8> <== NEVER TAKEN
44f4c: 4283 clrl %d3
44f4e: 162a 0051 moveb %a2@(81),%d3
44f52: b083 cmpl %d3,%d0
44f54: 6600 ff66 bnew 44ebc <iproc+0x5c>
(c == tty->termios.c_cc[VEOL2])) {
if (tty->termios.c_lflag & ECHO)
44f58: 44c1 movew %d1,%ccr <== NOT EXECUTED
44f5a: 6b58 bmis 44fb4 <iproc+0x154> <== NOT EXECUTED
echo (c, tty);
tty->cbuf[tty->ccount++] = c;
44f5c: 222a 0020 movel %a2@(32),%d1 <== NOT EXECUTED
return 1;
44f60: 7001 moveq #1,%d0 <== NOT EXECUTED
return 1;
} else if ((c == tty->termios.c_cc[VEOL]) ||
(c == tty->termios.c_cc[VEOL2])) {
if (tty->termios.c_lflag & ECHO)
echo (c, tty);
tty->cbuf[tty->ccount++] = c;
44f62: 206a 001c moveal %a2@(28),%a0 <== NOT EXECUTED
44f66: 1182 1800 moveb %d2,%a0@(00000000,%d1:l) <== NOT EXECUTED
44f6a: 5281 addql #1,%d1 <== NOT EXECUTED
44f6c: 2541 0020 movel %d1,%a2@(32) <== NOT EXECUTED
if (tty->termios.c_lflag & ECHO)
echo (c, tty);
tty->cbuf[tty->ccount++] = c;
}
return 0;
}
44f70: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2 <== NOT EXECUTED
44f76: 4e5e unlk %fp <== NOT EXECUTED
44f78: 4e75 rts <== NOT EXECUTED
if (c == '\r') {
if (tty->termios.c_iflag & IGNCR)
return 0;
if (tty->termios.c_iflag & ICRNL)
c = '\n';
} else if ((c == '\n') && (tty->termios.c_iflag & INLCR)) {
44f7a: 0800 0006 btst #6,%d0
44f7e: 6788 beqs 44f08 <iproc+0xa8> <== ALWAYS TAKEN
c = '\r';
44f80: 740d moveq #13,%d2 <== NOT EXECUTED
44f82: 6084 bras 44f08 <iproc+0xa8> <== NOT EXECUTED
{
if (tty->termios.c_iflag & ISTRIP)
c &= 0x7f;
if (tty->termios.c_iflag & IUCLC)
c = tolower (c);
44f84: 0682 0000 0020 addil #32,%d2
44f8a: 6000 ff1a braw 44ea6 <iproc+0x46>
/*
* FIXME: Should do IMAXBEL handling somehow
*/
if (tty->ccount < (CBUFSIZE-1)) {
if (tty->termios.c_lflag & ECHO)
echo (c, tty);
44f8e: 2f0a movel %a2,%sp@-
44f90: 4280 clrl %d0
44f92: 1002 moveb %d2,%d0
44f94: 2f00 movel %d0,%sp@-
44f96: 4eba fc2c jsr %pc@(44bc4 <echo>)
44f9a: 222a 0020 movel %a2@(32),%d1
44f9e: 508f addql #8,%sp
tty->cbuf[tty->ccount++] = c;
}
return 0;
44fa0: 4280 clrl %d0
* FIXME: Should do IMAXBEL handling somehow
*/
if (tty->ccount < (CBUFSIZE-1)) {
if (tty->termios.c_lflag & ECHO)
echo (c, tty);
tty->cbuf[tty->ccount++] = c;
44fa2: 206a 001c moveal %a2@(28),%a0
44fa6: 1182 1800 moveb %d2,%a0@(00000000,%d1:l)
44faa: 5281 addql #1,%d1
44fac: 2541 0020 movel %d1,%a2@(32)
44fb0: 6000 ff34 braw 44ee6 <iproc+0x86>
tty->cbuf[tty->ccount++] = c;
return 1;
} else if ((c == tty->termios.c_cc[VEOL]) ||
(c == tty->termios.c_cc[VEOL2])) {
if (tty->termios.c_lflag & ECHO)
echo (c, tty);
44fb4: 2f0a movel %a2,%sp@- <== NOT EXECUTED
44fb6: 2f00 movel %d0,%sp@- <== NOT EXECUTED
44fb8: 4eba fc0a jsr %pc@(44bc4 <echo>) <== NOT EXECUTED
tty->cbuf[tty->ccount++] = c;
44fbc: 222a 0020 movel %a2@(32),%d1 <== NOT EXECUTED
tty->cbuf[tty->ccount++] = c;
return 1;
} else if ((c == tty->termios.c_cc[VEOL]) ||
(c == tty->termios.c_cc[VEOL2])) {
if (tty->termios.c_lflag & ECHO)
echo (c, tty);
44fc0: 508f addql #8,%sp <== NOT EXECUTED
tty->cbuf[tty->ccount++] = c;
return 1;
44fc2: 7001 moveq #1,%d0 <== NOT EXECUTED
return 1;
} else if ((c == tty->termios.c_cc[VEOL]) ||
(c == tty->termios.c_cc[VEOL2])) {
if (tty->termios.c_lflag & ECHO)
echo (c, tty);
tty->cbuf[tty->ccount++] = c;
44fc4: 206a 001c moveal %a2@(28),%a0 <== NOT EXECUTED
44fc8: 1182 1800 moveb %d2,%a0@(00000000,%d1:l) <== NOT EXECUTED
44fcc: 5281 addql #1,%d1 <== NOT EXECUTED
44fce: 2541 0020 movel %d1,%a2@(32) <== NOT EXECUTED
44fd2: 609c bras 44f70 <iproc+0x110> <== NOT EXECUTED
if (c == tty->termios.c_cc[VERASE]) {
erase (tty, 0);
return 0;
}
else if (c == tty->termios.c_cc[VKILL]) {
erase (tty, 1);
44fd4: 4878 0001 pea 1 <ADD>
44fd8: 2f0a movel %a2,%sp@-
44fda: 4eba fc8c jsr %pc@(44c68 <erase>)
return 0;
44fde: 508f addql #8,%sp
44fe0: 4280 clrl %d0
if (tty->termios.c_lflag & ECHO)
echo (c, tty);
tty->cbuf[tty->ccount++] = c;
}
return 0;
}
44fe2: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
44fe8: 4e5e unlk %fp
44fea: 4e75 rts
return 0;
}
else if (c == tty->termios.c_cc[VEOF]) {
return 1;
} else if (c == '\n') {
if (tty->termios.c_lflag & (ECHO | ECHONL))
44fec: 7048 moveq #72,%d0
44fee: c280 andl %d0,%d1
44ff0: 6620 bnes 45012 <iproc+0x1b2> <== ALWAYS TAKEN
echo (c, tty);
tty->cbuf[tty->ccount++] = c;
44ff2: 222a 0020 movel %a2@(32),%d1 <== NOT EXECUTED
return 1;
44ff6: 7001 moveq #1,%d0 <== NOT EXECUTED
else if (c == tty->termios.c_cc[VEOF]) {
return 1;
} else if (c == '\n') {
if (tty->termios.c_lflag & (ECHO | ECHONL))
echo (c, tty);
tty->cbuf[tty->ccount++] = c;
44ff8: 206a 001c moveal %a2@(28),%a0 <== NOT EXECUTED
44ffc: 740a moveq #10,%d2 <== NOT EXECUTED
44ffe: 1182 1800 moveb %d2,%a0@(00000000,%d1:l) <== NOT EXECUTED
45002: 5281 addql #1,%d1 <== NOT EXECUTED
45004: 2541 0020 movel %d1,%a2@(32) <== NOT EXECUTED
if (tty->termios.c_lflag & ECHO)
echo (c, tty);
tty->cbuf[tty->ccount++] = c;
}
return 0;
}
45008: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
4500e: 4e5e unlk %fp
45010: 4e75 rts
}
else if (c == tty->termios.c_cc[VEOF]) {
return 1;
} else if (c == '\n') {
if (tty->termios.c_lflag & (ECHO | ECHONL))
echo (c, tty);
45012: 2f0a movel %a2,%sp@-
45014: 4878 000a pea a <LASTO>
tty->cbuf[tty->ccount++] = c;
45018: 740a moveq #10,%d2
}
else if (c == tty->termios.c_cc[VEOF]) {
return 1;
} else if (c == '\n') {
if (tty->termios.c_lflag & (ECHO | ECHONL))
echo (c, tty);
4501a: 4eba fba8 jsr %pc@(44bc4 <echo>)
tty->cbuf[tty->ccount++] = c;
4501e: 222a 0020 movel %a2@(32),%d1
}
else if (c == tty->termios.c_cc[VEOF]) {
return 1;
} else if (c == '\n') {
if (tty->termios.c_lflag & (ECHO | ECHONL))
echo (c, tty);
45022: 508f addql #8,%sp
tty->cbuf[tty->ccount++] = c;
return 1;
45024: 7001 moveq #1,%d0
else if (c == tty->termios.c_cc[VEOF]) {
return 1;
} else if (c == '\n') {
if (tty->termios.c_lflag & (ECHO | ECHONL))
echo (c, tty);
tty->cbuf[tty->ccount++] = c;
45026: 206a 001c moveal %a2@(28),%a0
4502a: 1182 1800 moveb %d2,%a0@(00000000,%d1:l)
4502e: 5281 addql #1,%d1
45030: 2541 0020 movel %d1,%a2@(32)
45034: 60d2 bras 45008 <iproc+0x1a8>
else if (c == tty->termios.c_cc[VKILL]) {
erase (tty, 1);
return 0;
}
else if (c == tty->termios.c_cc[VEOF]) {
return 1;
45036: 7001 moveq #1,%d0 <== NOT EXECUTED
if (tty->termios.c_lflag & ECHO)
echo (c, tty);
tty->cbuf[tty->ccount++] = c;
}
return 0;
}
45038: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2 <== NOT EXECUTED
4503e: 4e5e unlk %fp <== NOT EXECUTED
45040: 4e75 rts <== NOT EXECUTED
c = '\r';
}
if ((c != '\0') && (tty->termios.c_lflag & ICANON)) {
if (c == tty->termios.c_cc[VERASE]) {
erase (tty, 0);
45042: 42a7 clrl %sp@-
45044: 2f0a movel %a2,%sp@-
45046: 4eba fc20 jsr %pc@(44c68 <erase>)
return 0;
4504a: 508f addql #8,%sp
4504c: 4280 clrl %d0
if (tty->termios.c_lflag & ECHO)
echo (c, tty);
tty->cbuf[tty->ccount++] = c;
}
return 0;
}
4504e: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
45054: 4e5e unlk %fp <== NOT EXECUTED
0005acc8 <kill>:
#if !defined(RTEMS_POSIX_API)
int kill( pid_t pid, int sig )
{
return 0;
}
5acc8: 4280 clrl %d0 <== NOT EXECUTED
* These are directly supported (and completely correct) in the posix api.
*/
#if !defined(RTEMS_POSIX_API)
int kill( pid_t pid, int sig )
{
5acca: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return 0;
}
5acce: 4e5e unlk %fp <== NOT EXECUTED
00043648 <libc_wrapup>:
/*
* In case RTEMS is already down, don't do this. It could be
* dangerous.
*/
if (!_System_state_Is_up(_System_state_Get()))
43648: 7003 moveq #3,%d0
extern void _wrapup_reent(struct _reent *);
extern void _reclaim_reent(struct _reent *);
void libc_wrapup(void)
{
4364a: 4e56 0000 linkw %fp,#0
4364e: 2f0a movel %a2,%sp@-
/*
* In case RTEMS is already down, don't do this. It could be
* dangerous.
*/
if (!_System_state_Is_up(_System_state_Get()))
43650: b0b9 0005 e588 cmpl 5e588 <_System_state_Current>,%d0
43656: 6708 beqs 43660 <libc_wrapup+0x18> <== ALWAYS TAKEN
*/
fclose (stdin);
fclose (stdout);
fclose (stderr);
}
43658: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
4365c: 4e5e unlk %fp <== NOT EXECUTED
4365e: 4e75 rts <== NOT EXECUTED
/*
* This was already done if the user called exit() directly .
_wrapup_reent(0);
*/
if (_REENT != _global_impure_ptr) {
43660: 2479 0005 c43a moveal 5c43a <_global_impure_ptr>,%a2
43666: b5f9 0005 cde0 cmpal 5cde0 <_impure_ptr>,%a2
4366c: 6710 beqs 4367e <libc_wrapup+0x36>
_wrapup_reent(_global_impure_ptr);
4366e: 2f0a movel %a2,%sp@-
43670: 4eb9 0004 e616 jsr 4e616 <_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;
43676: 588f addql #4,%sp
43678: 23ca 0005 cde0 movel %a2,5cde0 <_impure_ptr>
*
* Should this be changed to do *all* file streams?
* _fwalk (_REENT, fclose);
*/
fclose (stdin);
4367e: 2f2a 0004 movel %a2@(4),%sp@-
43682: 45f9 0004 dbba lea 4dbba <fclose>,%a2
43688: 4e92 jsr %a2@
fclose (stdout);
4368a: 2079 0005 cde0 moveal 5cde0 <_impure_ptr>,%a0
43690: 2f28 0008 movel %a0@(8),%sp@-
43694: 4e92 jsr %a2@
fclose (stderr);
43696: 2079 0005 cde0 moveal 5cde0 <_impure_ptr>,%a0
4369c: 2f28 000c movel %a0@(12),%sp@-
436a0: 4e92 jsr %a2@
}
436a2: 246e fffc moveal %fp@(-4),%a2
* _fwalk (_REENT, fclose);
*/
fclose (stdin);
fclose (stdout);
fclose (stderr);
436a6: 4fef 000c lea %sp@(12),%sp
}
436aa: 4e5e unlk %fp <== NOT EXECUTED
0004566c <link>:
int link(
const char *existing,
const char *new
)
{
4566c: 4e56 ffbc linkw %fp,#-68
45670: 48d7 043c moveml %d2-%d5/%a2,%sp@
45674: 242e 0008 movel %fp@(8),%d2
/*
* Get the node we are linking to.
*/
result = rtems_filesystem_evaluate_path( existing, strlen( existing ),
45678: 260e movel %fp,%d3
4567a: 0683 ffff ffe4 addil #-28,%d3
45680: 2f02 movel %d2,%sp@-
int link(
const char *existing,
const char *new
)
{
45682: 2a2e 000c movel %fp@(12),%d5
/*
* Get the node we are linking to.
*/
result = rtems_filesystem_evaluate_path( existing, strlen( existing ),
45686: 4eb9 0005 3bc8 jsr 53bc8 <strlen>
4568c: 7201 moveq #1,%d1
4568e: 2e81 movel %d1,%sp@
45690: 2f03 movel %d3,%sp@-
45692: 42a7 clrl %sp@-
45694: 2f00 movel %d0,%sp@-
45696: 2f02 movel %d2,%sp@-
45698: 4eb9 0004 5094 jsr 45094 <rtems_filesystem_evaluate_path>
0, &existing_loc, true );
if ( result != 0 )
4569e: 4fef 0014 lea %sp@(20),%sp
456a2: 4a80 tstl %d0
456a4: 670e beqs 456b4 <link+0x48>
return -1;
456a6: 74ff moveq #-1,%d2
rtems_filesystem_freenode( &existing_loc );
rtems_filesystem_freenode( &parent_loc );
return result;
}
456a8: 2002 movel %d2,%d0
456aa: 4cee 043c ffbc moveml %fp@(-68),%d2-%d5/%a2
456b0: 4e5e unlk %fp
456b2: 4e75 rts
/*
* Get the parent of the node we are creating.
*/
rtems_filesystem_get_start_loc( new, &i, &parent_loc );
456b4: 280e movel %fp,%d4
456b6: 0684 ffff ffd0 addil #-48,%d4
456bc: 2f04 movel %d4,%sp@-
456be: 486e fffc pea %fp@(-4)
456c2: 2f05 movel %d5,%sp@-
456c4: 4eb9 0004 6b08 jsr 46b08 <rtems_filesystem_get_start_loc>
result = (*parent_loc.ops->evalformake_h)( &new[i], &parent_loc, &name_start );
456ca: 486e fff8 pea %fp@(-8)
456ce: daae fffc addl %fp@(-4),%d5
456d2: 2f04 movel %d4,%sp@-
456d4: 206e ffdc moveal %fp@(-36),%a0
456d8: 2f05 movel %d5,%sp@-
456da: 2068 0004 moveal %a0@(4),%a0
456de: 4e90 jsr %a0@
if ( result != 0 ) {
456e0: 4fef 0018 lea %sp@(24),%sp
456e4: 4a80 tstl %d0
456e6: 6666 bnes 4574e <link+0xe2>
/*
* Check to see if the caller is trying to link across file system
* boundaries.
*/
if ( parent_loc.mt_entry != existing_loc.mt_entry ) {
456e8: 202e fff4 movel %fp@(-12),%d0
456ec: b0ae ffe0 cmpl %fp@(-32),%d0
456f0: 6632 bnes 45724 <link+0xb8> <== NEVER TAKEN
rtems_filesystem_freenode( &existing_loc );
rtems_filesystem_freenode( &parent_loc );
rtems_set_errno_and_return_minus_one( EXDEV );
}
result = (*parent_loc.ops->link_h)( &existing_loc, &parent_loc, name_start );
456f2: 2f2e fff8 movel %fp@(-8),%sp@-
rtems_filesystem_freenode( &existing_loc );
456f6: 45f9 0004 51b8 lea 451b8 <rtems_filesystem_freenode>,%a2
rtems_filesystem_freenode( &existing_loc );
rtems_filesystem_freenode( &parent_loc );
rtems_set_errno_and_return_minus_one( EXDEV );
}
result = (*parent_loc.ops->link_h)( &existing_loc, &parent_loc, name_start );
456fc: 206e ffdc moveal %fp@(-36),%a0
45700: 2f04 movel %d4,%sp@-
45702: 2f03 movel %d3,%sp@-
45704: 2068 0008 moveal %a0@(8),%a0
45708: 4e90 jsr %a0@
4570a: 2400 movel %d0,%d2
rtems_filesystem_freenode( &existing_loc );
4570c: 2f03 movel %d3,%sp@-
4570e: 4e92 jsr %a2@
rtems_filesystem_freenode( &parent_loc );
45710: 2f04 movel %d4,%sp@-
45712: 4e92 jsr %a2@
return result;
45714: 4fef 0014 lea %sp@(20),%sp
}
45718: 2002 movel %d2,%d0
4571a: 4cee 043c ffbc moveml %fp@(-68),%d2-%d5/%a2
45720: 4e5e unlk %fp
45722: 4e75 rts
* Check to see if the caller is trying to link across file system
* boundaries.
*/
if ( parent_loc.mt_entry != existing_loc.mt_entry ) {
rtems_filesystem_freenode( &existing_loc );
45724: 2f03 movel %d3,%sp@-
45726: 45f9 0004 51b8 lea 451b8 <rtems_filesystem_freenode>,%a2
rtems_filesystem_freenode( &parent_loc );
rtems_set_errno_and_return_minus_one( EXDEV );
4572c: 74ff moveq #-1,%d2
* Check to see if the caller is trying to link across file system
* boundaries.
*/
if ( parent_loc.mt_entry != existing_loc.mt_entry ) {
rtems_filesystem_freenode( &existing_loc );
4572e: 4e92 jsr %a2@
rtems_filesystem_freenode( &parent_loc );
45730: 2f04 movel %d4,%sp@-
45732: 4e92 jsr %a2@
rtems_set_errno_and_return_minus_one( EXDEV );
45734: 4eb9 0005 0b54 jsr 50b54 <__errno>
4573a: 508f addql #8,%sp
4573c: 2040 moveal %d0,%a0
4573e: 7012 moveq #18,%d0
45740: 2080 movel %d0,%a0@
rtems_filesystem_freenode( &existing_loc );
rtems_filesystem_freenode( &parent_loc );
return result;
}
45742: 2002 movel %d2,%d0
45744: 4cee 043c ffbc moveml %fp@(-68),%d2-%d5/%a2
4574a: 4e5e unlk %fp
4574c: 4e75 rts
rtems_filesystem_get_start_loc( new, &i, &parent_loc );
result = (*parent_loc.ops->evalformake_h)( &new[i], &parent_loc, &name_start );
if ( result != 0 ) {
rtems_filesystem_freenode( &existing_loc );
4574e: 2f03 movel %d3,%sp@-
return -1;
45750: 74ff moveq #-1,%d2
rtems_filesystem_get_start_loc( new, &i, &parent_loc );
result = (*parent_loc.ops->evalformake_h)( &new[i], &parent_loc, &name_start );
if ( result != 0 ) {
rtems_filesystem_freenode( &existing_loc );
45752: 4eb9 0004 51b8 jsr 451b8 <rtems_filesystem_freenode>
return -1;
45758: 588f addql #4,%sp
rtems_filesystem_freenode( &existing_loc );
rtems_filesystem_freenode( &parent_loc );
return result;
}
4575a: 2002 movel %d2,%d0
4575c: 4cee 043c ffbc moveml %fp@(-68),%d2-%d5/%a2
45762: 4e5e unlk %fp <== NOT EXECUTED
0005ace8 <lseek>:
off_t lseek(
int fd,
off_t offset,
int whence
)
{
5ace8: 4e56 ffec linkw %fp,#-20
5acec: 206e 0014 moveal %fp@(20),%a0
5acf0: 48d7 043c moveml %d2-%d5/%a2,%sp@
5acf4: 242e 0008 movel %fp@(8),%d2
5acf8: 202e 000c movel %fp@(12),%d0
5acfc: 222e 0010 movel %fp@(16),%d1
rtems_libio_t *iop;
off_t old_offset;
off_t status;
rtems_libio_check_fd( fd );
5ad00: b4b9 0005 cc44 cmpl 5cc44 <rtems_libio_number_iops>,%d2
5ad06: 6400 011e bccw 5ae26 <lseek+0x13e>
iop = rtems_libio_iop( fd );
5ad0a: 2802 movel %d2,%d4
5ad0c: ed8a lsll #6,%d2
5ad0e: e78c lsll #3,%d4
5ad10: 2479 0005 e2c8 moveal 5e2c8 <rtems_libio_iops>,%a2
5ad16: 9484 subl %d4,%d2
5ad18: d5c2 addal %d2,%a2
rtems_libio_check_is_open(iop);
5ad1a: 242a 0014 movel %a2@(20),%d2
5ad1e: 0282 0000 0100 andil #256,%d2
5ad24: 6700 0100 beqw 5ae26 <lseek+0x13e>
/*
* Now process the lseek().
*/
old_offset = iop->offset;
switch ( whence ) {
5ad28: 7801 moveq #1,%d4
/*
* Now process the lseek().
*/
old_offset = iop->offset;
5ad2a: 242a 000c movel %a2@(12),%d2
5ad2e: 262a 0010 movel %a2@(16),%d3
switch ( whence ) {
5ad32: b888 cmpl %a0,%d4
5ad34: 6700 00b6 beqw 5adec <lseek+0x104>
5ad38: 7a02 moveq #2,%d5
5ad3a: ba88 cmpl %a0,%d5
5ad3c: 6756 beqs 5ad94 <lseek+0xac>
5ad3e: 4a88 tstl %a0
5ad40: 6600 008c bnew 5adce <lseek+0xe6>
/*
* At this time, handlers assume iop->offset has the desired
* new offset.
*/
status = (*iop->pathinfo.handlers->lseek_h)( iop, offset, whence );
5ad44: 226a 0020 moveal %a2@(32),%a1
*/
old_offset = iop->offset;
switch ( whence ) {
case SEEK_SET:
iop->offset = offset;
5ad48: 2540 000c movel %d0,%a2@(12)
5ad4c: 2541 0010 movel %d1,%a2@(16)
/*
* At this time, handlers assume iop->offset has the desired
* new offset.
*/
status = (*iop->pathinfo.handlers->lseek_h)( iop, offset, whence );
5ad50: 2f08 movel %a0,%sp@-
5ad52: 2f01 movel %d1,%sp@-
5ad54: 2f00 movel %d0,%sp@-
5ad56: 2f0a movel %a2,%sp@-
5ad58: 2069 0014 moveal %a1@(20),%a0
5ad5c: 4e90 jsr %a0@
if ( status == (off_t) -1 )
5ad5e: 4fef 0010 lea %sp@(16),%sp
/*
* At this time, handlers assume iop->offset has the desired
* new offset.
*/
status = (*iop->pathinfo.handlers->lseek_h)( iop, offset, whence );
5ad62: 2800 movel %d0,%d4
5ad64: 2a01 movel %d1,%d5
if ( status == (off_t) -1 )
5ad66: 70ff moveq #-1,%d0
5ad68: 72ff moveq #-1,%d1
5ad6a: 9285 subl %d5,%d1
5ad6c: 9184 subxl %d4,%d0
5ad6e: 670e beqs 5ad7e <lseek+0x96> <== NEVER TAKEN
/*
* So if the operation failed, we have to restore iop->offset.
*/
return status;
}
5ad70: 2004 movel %d4,%d0
5ad72: 2205 movel %d5,%d1
5ad74: 4cee 043c ffec moveml %fp@(-20),%d2-%d5/%a2
5ad7a: 4e5e unlk %fp
5ad7c: 4e75 rts
5ad7e: 2004 movel %d4,%d0
5ad80: 2205 movel %d5,%d1
* new offset.
*/
status = (*iop->pathinfo.handlers->lseek_h)( iop, offset, whence );
if ( status == (off_t) -1 )
iop->offset = old_offset;
5ad82: 2542 000c movel %d2,%a2@(12)
5ad86: 2543 0010 movel %d3,%a2@(16)
/*
* So if the operation failed, we have to restore iop->offset.
*/
return status;
}
5ad8a: 4cee 043c ffec moveml %fp@(-20),%d2-%d5/%a2
5ad90: 4e5e unlk %fp
5ad92: 4e75 rts
/*
* At this time, handlers assume iop->offset has the desired
* new offset.
*/
status = (*iop->pathinfo.handlers->lseek_h)( iop, offset, whence );
5ad94: 226a 0020 moveal %a2@(32),%a1
case SEEK_CUR:
iop->offset += offset;
break;
case SEEK_END:
iop->offset = iop->size + offset;
5ad98: 282a 0004 movel %a2@(4),%d4
5ad9c: 2a2a 0008 movel %a2@(8),%d5
5ada0: da81 addl %d1,%d5
5ada2: d980 addxl %d0,%d4
5ada4: 2544 000c movel %d4,%a2@(12)
5ada8: 2545 0010 movel %d5,%a2@(16)
/*
* At this time, handlers assume iop->offset has the desired
* new offset.
*/
status = (*iop->pathinfo.handlers->lseek_h)( iop, offset, whence );
5adac: 2f08 movel %a0,%sp@-
5adae: 2f01 movel %d1,%sp@-
5adb0: 2f00 movel %d0,%sp@-
5adb2: 2f0a movel %a2,%sp@-
5adb4: 2069 0014 moveal %a1@(20),%a0
5adb8: 4e90 jsr %a0@
if ( status == (off_t) -1 )
5adba: 4fef 0010 lea %sp@(16),%sp
/*
* At this time, handlers assume iop->offset has the desired
* new offset.
*/
status = (*iop->pathinfo.handlers->lseek_h)( iop, offset, whence );
5adbe: 2800 movel %d0,%d4
5adc0: 2a01 movel %d1,%d5
if ( status == (off_t) -1 )
5adc2: 70ff moveq #-1,%d0
5adc4: 72ff moveq #-1,%d1
5adc6: 9285 subl %d5,%d1
5adc8: 9184 subxl %d4,%d0
5adca: 66a4 bnes 5ad70 <lseek+0x88>
5adcc: 60b0 bras 5ad7e <lseek+0x96>
case SEEK_END:
iop->offset = iop->size + offset;
break;
default:
rtems_set_errno_and_return_minus_one( EINVAL );
5adce: 4eb9 0004 da6c jsr 4da6c <__errno>
5add4: 2040 moveal %d0,%a0
5add6: 7016 moveq #22,%d0
5add8: 78ff moveq #-1,%d4
5adda: 7aff moveq #-1,%d5
5addc: 2080 movel %d0,%a0@
/*
* So if the operation failed, we have to restore iop->offset.
*/
return status;
}
5adde: 2004 movel %d4,%d0
5ade0: 2205 movel %d5,%d1
5ade2: 4cee 043c ffec moveml %fp@(-20),%d2-%d5/%a2
5ade8: 4e5e unlk %fp
5adea: 4e75 rts
/*
* At this time, handlers assume iop->offset has the desired
* new offset.
*/
status = (*iop->pathinfo.handlers->lseek_h)( iop, offset, whence );
5adec: 226a 0020 moveal %a2@(32),%a1
case SEEK_SET:
iop->offset = offset;
break;
case SEEK_CUR:
iop->offset += offset;
5adf0: 2800 movel %d0,%d4
5adf2: 2a01 movel %d1,%d5
5adf4: da83 addl %d3,%d5
5adf6: d982 addxl %d2,%d4
5adf8: 2544 000c movel %d4,%a2@(12)
5adfc: 2545 0010 movel %d5,%a2@(16)
/*
* At this time, handlers assume iop->offset has the desired
* new offset.
*/
status = (*iop->pathinfo.handlers->lseek_h)( iop, offset, whence );
5ae00: 2f08 movel %a0,%sp@-
5ae02: 2f01 movel %d1,%sp@-
5ae04: 2f00 movel %d0,%sp@-
5ae06: 2f0a movel %a2,%sp@-
5ae08: 2069 0014 moveal %a1@(20),%a0
5ae0c: 4e90 jsr %a0@
if ( status == (off_t) -1 )
5ae0e: 4fef 0010 lea %sp@(16),%sp
/*
* At this time, handlers assume iop->offset has the desired
* new offset.
*/
status = (*iop->pathinfo.handlers->lseek_h)( iop, offset, whence );
5ae12: 2800 movel %d0,%d4
5ae14: 2a01 movel %d1,%d5
if ( status == (off_t) -1 )
5ae16: 70ff moveq #-1,%d0
5ae18: 72ff moveq #-1,%d1
5ae1a: 9285 subl %d5,%d1
5ae1c: 9184 subxl %d4,%d0
5ae1e: 6600 ff50 bnew 5ad70 <lseek+0x88>
5ae22: 6000 ff5a braw 5ad7e <lseek+0x96>
off_t old_offset;
off_t status;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
5ae26: 4eb9 0004 da6c jsr 4da6c <__errno>
5ae2c: 7209 moveq #9,%d1
5ae2e: 2040 moveal %d0,%a0
5ae30: 78ff moveq #-1,%d4
5ae32: 7aff moveq #-1,%d5
5ae34: 2081 movel %d1,%a0@
/*
* So if the operation failed, we have to restore iop->offset.
*/
return status;
}
5ae36: 2004 movel %d4,%d0
5ae38: 2205 movel %d5,%d1
5ae3a: 4cee 043c ffec moveml %fp@(-20),%d2-%d5/%a2
5ae40: 4e5e unlk %fp <== NOT EXECUTED
000430e8 <malloc>:
#include "malloc_p.h"
void *malloc(
size_t size
)
{
430e8: 4e56 0000 linkw %fp,#0
void *return_this;
MSBUMP(malloc_calls, 1);
430ec: 52b9 0005 e2e4 addql #1,5e2e4 <rtems_malloc_statistics+0x4>
#include "malloc_p.h"
void *malloc(
size_t size
)
{
430f2: 2f03 movel %d3,%sp@-
430f4: 262e 0008 movel %fp@(8),%d3
430f8: 2f02 movel %d2,%sp@-
MSBUMP(malloc_calls, 1);
/*
* If some free's have been deferred, then do them now.
*/
malloc_deferred_frees_process();
430fa: 4eb9 0004 2fbc jsr 42fbc <malloc_deferred_frees_process>
/*
* Validate the parameters
*/
if ( !size )
43100: 4a83 tstl %d3
43102: 6762 beqs 43166 <malloc+0x7e>
return (void *) 0;
/*
* Do not attempt to allocate memory if not in correct system state.
*/
if ( _System_state_Is_up(_System_state_Get()) &&
43104: 7003 moveq #3,%d0
43106: b0b9 0005 e588 cmpl 5e588 <_System_state_Current>,%d0
4310c: 674e beqs 4315c <malloc+0x74>
RTEMS_INLINE_ROUTINE void *_Protected_heap_Allocate(
Heap_Control *heap,
uintptr_t size
)
{
return _Protected_heap_Allocate_aligned_with_boundary( heap, size, 0, 0 );
4310e: 42a7 clrl %sp@-
43110: 42a7 clrl %sp@-
43112: 2f03 movel %d3,%sp@-
43114: 2f39 0005 cc50 movel 5cc50 <RTEMS_Malloc_Heap>,%sp@-
4311a: 4eb9 0004 820c jsr 4820c <_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 ) {
43120: 4fef 0010 lea %sp@(16),%sp
43124: 2400 movel %d0,%d2
43126: 674e beqs 43176 <malloc+0x8e>
}
/*
* If the user wants us to dirty the allocated memory, then do it.
*/
if ( rtems_malloc_dirty_helper )
43128: 2079 0005 d29e moveal 5d29e <rtems_malloc_dirty_helper>,%a0
4312e: 4a88 tstl %a0
43130: 6708 beqs 4313a <malloc+0x52>
(*rtems_malloc_dirty_helper)( return_this, size );
43132: 2f03 movel %d3,%sp@-
43134: 2f02 movel %d2,%sp@-
43136: 4e90 jsr %a0@
43138: 508f addql #8,%sp
/*
* If configured, update the statistics
*/
if ( rtems_malloc_statistics_helpers )
4313a: 2079 0005 d296 moveal 5d296 <rtems_malloc_statistics_helpers>,%a0
43140: 4a88 tstl %a0
43142: 670a beqs 4314e <malloc+0x66>
(*rtems_malloc_statistics_helpers->at_malloc)(return_this);
43144: 2f02 movel %d2,%sp@-
43146: 2068 0004 moveal %a0@(4),%a0
4314a: 4e90 jsr %a0@
4314c: 588f addql #4,%sp
return return_this;
}
4314e: 2002 movel %d2,%d0
43150: 242e fff8 movel %fp@(-8),%d2
43154: 262e fffc movel %fp@(-4),%d3
43158: 4e5e unlk %fp
4315a: 4e75 rts
/*
* 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() )
4315c: 4eb9 0004 2f7c jsr 42f7c <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()) &&
43162: 4a00 tstb %d0
43164: 66a8 bnes 4310e <malloc+0x26> <== ALWAYS TAKEN
!malloc_is_system_state_OK() )
return NULL;
43166: 4282 clrl %d2
*/
if ( rtems_malloc_statistics_helpers )
(*rtems_malloc_statistics_helpers->at_malloc)(return_this);
return return_this;
}
43168: 2002 movel %d2,%d0
4316a: 242e fff8 movel %fp@(-8),%d2
4316e: 262e fffc movel %fp@(-4),%d3
43172: 4e5e unlk %fp
43174: 4e75 rts
*/
return_this = _Protected_heap_Allocate( RTEMS_Malloc_Heap, size );
if ( !return_this ) {
if (rtems_malloc_sbrk_helpers)
43176: 2079 0005 d29a moveal 5d29a <rtems_malloc_sbrk_helpers>,%a0
4317c: 4a88 tstl %a0
4317e: 671c beqs 4319c <malloc+0xb4>
return_this = (*rtems_malloc_sbrk_helpers->extend)( size );
43180: 2f03 movel %d3,%sp@-
43182: 2068 0004 moveal %a0@(4),%a0
43186: 4e90 jsr %a0@
if ( !return_this ) {
43188: 588f addql #4,%sp
4318a: 4a80 tstl %d0
4318c: 670e beqs 4319c <malloc+0xb4>
}
/*
* If the user wants us to dirty the allocated memory, then do it.
*/
if ( rtems_malloc_dirty_helper )
4318e: 2079 0005 d29e moveal 5d29e <rtems_malloc_dirty_helper>,%a0
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 );
if ( !return_this ) {
43194: 2400 movel %d0,%d2
}
/*
* If the user wants us to dirty the allocated memory, then do it.
*/
if ( rtems_malloc_dirty_helper )
43196: 4a88 tstl %a0
43198: 6698 bnes 43132 <malloc+0x4a> <== NEVER TAKEN
4319a: 609e bras 4313a <malloc+0x52>
if ( !return_this ) {
if (rtems_malloc_sbrk_helpers)
return_this = (*rtems_malloc_sbrk_helpers->extend)( size );
if ( !return_this ) {
errno = ENOMEM;
4319c: 4eb9 0004 da6c jsr 4da6c <__errno>
*/
if ( rtems_malloc_statistics_helpers )
(*rtems_malloc_statistics_helpers->at_malloc)(return_this);
return return_this;
}
431a2: 262e fffc movel %fp@(-4),%d3
if ( !return_this ) {
if (rtems_malloc_sbrk_helpers)
return_this = (*rtems_malloc_sbrk_helpers->extend)( size );
if ( !return_this ) {
errno = ENOMEM;
431a6: 2040 moveal %d0,%a0
431a8: 700c moveq #12,%d0
431aa: 2080 movel %d0,%a0@
*/
if ( rtems_malloc_statistics_helpers )
(*rtems_malloc_statistics_helpers->at_malloc)(return_this);
return return_this;
}
431ac: 2002 movel %d2,%d0
431ae: 242e fff8 movel %fp@(-8),%d2
431b2: 4e5e unlk %fp
...
00042fbc <malloc_deferred_frees_process>:
void malloc_deferred_frees_process(void)
{
42fbc: 4e56 0000 linkw %fp,#0
42fc0: 2f0b movel %a3,%sp@-
/*
* If some free's have been deferred, then do them now.
*/
while ((to_be_freed = rtems_chain_get(&RTEMS_Malloc_GC_list)) != NULL)
free(to_be_freed);
42fc2: 47f9 0004 2db8 lea 42db8 <free>,%a3
{
rtems_chain_initialize_empty(&RTEMS_Malloc_GC_list);
}
void malloc_deferred_frees_process(void)
{
42fc8: 2f0a movel %a2,%sp@-
*/
RTEMS_INLINE_ROUTINE rtems_chain_node *rtems_chain_get(
rtems_chain_control *the_chain
)
{
return _Chain_Get( the_chain );
42fca: 4879 0005 e2d4 pea 5e2d4 <RTEMS_Malloc_GC_list>
42fd0: 45f9 0004 709c lea 4709c <_Chain_Get>,%a2
42fd6: 4e92 jsr %a2@
rtems_chain_node *to_be_freed;
/*
* If some free's have been deferred, then do them now.
*/
while ((to_be_freed = rtems_chain_get(&RTEMS_Malloc_GC_list)) != NULL)
42fd8: 588f addql #4,%sp
42fda: 4a80 tstl %d0
42fdc: 6714 beqs 42ff2 <malloc_deferred_frees_process+0x36>
free(to_be_freed);
42fde: 2f00 movel %d0,%sp@-
42fe0: 4e93 jsr %a3@
42fe2: 588f addql #4,%sp
42fe4: 4879 0005 e2d4 pea 5e2d4 <RTEMS_Malloc_GC_list>
42fea: 4e92 jsr %a2@
rtems_chain_node *to_be_freed;
/*
* If some free's have been deferred, then do them now.
*/
while ((to_be_freed = rtems_chain_get(&RTEMS_Malloc_GC_list)) != NULL)
42fec: 588f addql #4,%sp
42fee: 4a80 tstl %d0
42ff0: 66ec bnes 42fde <malloc_deferred_frees_process+0x22><== NEVER TAKEN
free(to_be_freed);
}
42ff2: 246e fff8 moveal %fp@(-8),%a2
42ff6: 266e fffc moveal %fp@(-4),%a3
42ffa: 4e5e unlk %fp <== NOT EXECUTED
00043450 <malloc_sbrk_extend_and_allocate>:
}
void *malloc_sbrk_extend_and_allocate(
size_t size
)
{
43450: 4e56 0000 linkw %fp,#0
* 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;
43454: 2039 0005 e96c movel 5e96c <RTEMS_Malloc_Sbrk_amount>,%d0
}
void *malloc_sbrk_extend_and_allocate(
size_t size
)
{
4345a: 2f0a movel %a2,%sp@-
4345c: 2f02 movel %d2,%sp@-
* in "page" amounts.
*/
sbrk_amount = RTEMS_Malloc_Sbrk_amount;
if ( sbrk_amount == 0 )
4345e: 4a80 tstl %d0
43460: 660e bnes 43470 <malloc_sbrk_extend_and_allocate+0x20><== ALWAYS TAKEN
MSBUMP(space_available, the_size);
return_this = _Protected_heap_Allocate( RTEMS_Malloc_Heap, size );
return return_this;
}
43462: 242e fff8 movel %fp@(-8),%d2
the_size = ((size + sbrk_amount) / sbrk_amount * sbrk_amount);
starting_address = (void *) sbrk(the_size);
if ( starting_address == (void*) -1 )
return (void *) 0;
43466: 4280 clrl %d0
MSBUMP(space_available, the_size);
return_this = _Protected_heap_Allocate( RTEMS_Malloc_Heap, size );
return return_this;
}
43468: 246e fffc moveal %fp@(-4),%a2
4346c: 4e5e unlk %fp
4346e: 4e75 rts
sbrk_amount = RTEMS_Malloc_Sbrk_amount;
if ( sbrk_amount == 0 )
return (void *) 0;
the_size = ((size + sbrk_amount) / sbrk_amount * sbrk_amount);
43470: 242e 0008 movel %fp@(8),%d2
43474: d480 addl %d0,%d2
starting_address = (void *) sbrk(the_size);
43476: 45f9 0004 081a lea 4081a <sbrk>,%a2
sbrk_amount = RTEMS_Malloc_Sbrk_amount;
if ( sbrk_amount == 0 )
return (void *) 0;
the_size = ((size + sbrk_amount) / sbrk_amount * sbrk_amount);
4347c: 4c40 2002 remul %d0,%d2,%d2
43480: 4c00 2800 mulsl %d0,%d2
starting_address = (void *) sbrk(the_size);
43484: 2f02 movel %d2,%sp@-
43486: 4e92 jsr %a2@
if ( starting_address == (void*) -1 )
43488: 588f addql #4,%sp
4348a: 72ff moveq #-1,%d1
4348c: b280 cmpl %d0,%d1
4348e: 67d2 beqs 43462 <malloc_sbrk_extend_and_allocate+0x12>
return (void *) 0;
if ( !_Protected_heap_Extend(
43490: 2f02 movel %d2,%sp@-
43492: 2f00 movel %d0,%sp@-
43494: 2f39 0005 d1c0 movel 5d1c0 <RTEMS_Malloc_Heap>,%sp@-
4349a: 4eb9 0004 84fc jsr 484fc <_Protected_heap_Extend>
434a0: 4fef 000c lea %sp@(12),%sp
434a4: 4a00 tstb %d0
434a6: 672a beqs 434d2 <malloc_sbrk_extend_and_allocate+0x82>
434a8: 42a7 clrl %sp@-
sbrk(-the_size);
errno = ENOMEM;
return (void *) 0;
}
MSBUMP(space_available, the_size);
434aa: d5b9 0005 e940 addl %d2,5e940 <rtems_malloc_statistics>
434b0: 42a7 clrl %sp@-
434b2: 2f2e 0008 movel %fp@(8),%sp@-
434b6: 2f39 0005 d1c0 movel 5d1c0 <RTEMS_Malloc_Heap>,%sp@-
434bc: 4eb9 0004 84bc jsr 484bc <_Protected_heap_Allocate_aligned_with_boundary>
return_this = _Protected_heap_Allocate( RTEMS_Malloc_Heap, size );
return return_this;
}
434c2: 242e fff8 movel %fp@(-8),%d2
}
MSBUMP(space_available, the_size);
return_this = _Protected_heap_Allocate( RTEMS_Malloc_Heap, size );
return return_this;
434c6: 4fef 0010 lea %sp@(16),%sp
}
434ca: 246e fffc moveal %fp@(-4),%a2
434ce: 4e5e unlk %fp
434d0: 4e75 rts
if ( starting_address == (void*) -1 )
return (void *) 0;
if ( !_Protected_heap_Extend(
RTEMS_Malloc_Heap, starting_address, the_size) ) {
sbrk(-the_size);
434d2: 4482 negl %d2
434d4: 2f02 movel %d2,%sp@-
434d6: 4e92 jsr %a2@
errno = ENOMEM;
434d8: 4eb9 0004 dfd4 jsr 4dfd4 <__errno>
MSBUMP(space_available, the_size);
return_this = _Protected_heap_Allocate( RTEMS_Malloc_Heap, size );
return return_this;
}
434de: 242e fff8 movel %fp@(-8),%d2
return (void *) 0;
if ( !_Protected_heap_Extend(
RTEMS_Malloc_Heap, starting_address, the_size) ) {
sbrk(-the_size);
errno = ENOMEM;
434e2: 2040 moveal %d0,%a0
434e4: 720c moveq #12,%d1
return (void *) 0;
434e6: 588f addql #4,%sp
434e8: 4280 clrl %d0
MSBUMP(space_available, the_size);
return_this = _Protected_heap_Allocate( RTEMS_Malloc_Heap, size );
return return_this;
}
434ea: 246e fffc moveal %fp@(-4),%a2
434ee: 4e5e unlk %fp
return (void *) 0;
if ( !_Protected_heap_Extend(
RTEMS_Malloc_Heap, starting_address, the_size) ) {
sbrk(-the_size);
errno = ENOMEM;
434f0: 2081 movel %d1,%a0@ <== NOT EXECUTED
MSBUMP(space_available, the_size);
return_this = _Protected_heap_Allocate( RTEMS_Malloc_Heap, size );
return return_this;
}
0004c3f0 <memfile_alloc_block>:
*/
int memfile_blocks_allocated = 0;
void *memfile_alloc_block(void)
{
4c3f0: 4e56 0000 linkw %fp,#0
void *memory;
memory = (void *)calloc(1, IMFS_MEMFILE_BYTES_PER_BLOCK);
4c3f4: 2f39 0005 dac8 movel 5dac8 <imfs_memfile_bytes_per_block>,%sp@-
4c3fa: 4878 0001 pea 1 <ADD>
4c3fe: 4eb9 0004 292c jsr 4292c <calloc>
if ( memory )
4c404: 508f addql #8,%sp
4c406: 4a80 tstl %d0
4c408: 6706 beqs 4c410 <memfile_alloc_block+0x20> <== NEVER TAKEN
memfile_blocks_allocated++;
4c40a: 52b9 0005 dbd8 addql #1,5dbd8 <memfile_blocks_allocated>
return memory;
}
4c410: 4e5e unlk %fp <== NOT EXECUTED
0004c894 <memfile_free_blocks_in_table>:
void memfile_free_blocks_in_table(
block_p **block_table,
int entries
)
{
4c894: 4e56 ffec linkw %fp,#-20
4c898: 48d7 1c0c moveml %d2-%d3/%a2-%a4,%sp@
4c89c: 286e 0008 moveal %fp@(8),%a4
4c8a0: 262e 000c movel %fp@(12),%d3
*/
#if defined(RTEMS_DEBUG)
assert( block_table );
#endif
if ( !block_table )
4c8a4: 4a8c tstl %a4
4c8a6: 672e beqs 4c8d6 <memfile_free_blocks_in_table+0x42><== NEVER TAKEN
/*
* Now go through all the slots in the table and free the memory.
*/
b = *block_table;
4c8a8: 2454 moveal %a4@,%a2
4c8aa: 47f9 0004 c87a lea 4c87a <memfile_free_block>,%a3
for ( i=0 ; i<entries ; i++ ) {
4c8b0: 4a83 tstl %d3
4c8b2: 6f1a bles 4c8ce <memfile_free_blocks_in_table+0x3a><== NEVER TAKEN
4c8b4: 4282 clrl %d2
if ( b[i] ) {
4c8b6: 201a movel %a2@+,%d0
* Now go through all the slots in the table and free the memory.
*/
b = *block_table;
for ( i=0 ; i<entries ; i++ ) {
4c8b8: 5282 addql #1,%d2
if ( b[i] ) {
4c8ba: 4a80 tstl %d0
4c8bc: 670a beqs 4c8c8 <memfile_free_blocks_in_table+0x34>
memfile_free_block( b[i] );
4c8be: 2f00 movel %d0,%sp@-
4c8c0: 4e93 jsr %a3@
b[i] = 0;
4c8c2: 588f addql #4,%sp
4c8c4: 42aa fffc clrl %a2@(-4)
* Now go through all the slots in the table and free the memory.
*/
b = *block_table;
for ( i=0 ; i<entries ; i++ ) {
4c8c8: b483 cmpl %d3,%d2
4c8ca: 6dea blts 4c8b6 <memfile_free_blocks_in_table+0x22>
4c8cc: 2454 moveal %a4@,%a2
/*
* Now that all the blocks in the block table are free, we can
* free the block table itself.
*/
memfile_free_block( *block_table );
4c8ce: 2f0a movel %a2,%sp@-
4c8d0: 4e93 jsr %a3@
*block_table = 0;
4c8d2: 588f addql #4,%sp
4c8d4: 4294 clrl %a4@
}
4c8d6: 4cee 1c0c ffec moveml %fp@(-20),%d2-%d3/%a2-%a4
4c8dc: 4e5e unlk %fp <== NOT EXECUTED
0004cdfe <memfile_ftruncate>:
int memfile_ftruncate(
rtems_libio_t *iop,
rtems_off64_t length
)
{
4cdfe: 4e56 ffec linkw %fp,#-20
4ce02: 206e 0008 moveal %fp@(8),%a0
4ce06: 48d7 040c moveml %d2-%d3/%a2,%sp@
IMFS_jnode_t *the_jnode;
the_jnode = iop->pathinfo.node_access;
4ce0a: 2468 0018 moveal %a0@(24),%a2
int memfile_ftruncate(
rtems_libio_t *iop,
rtems_off64_t length
)
{
4ce0e: 202e 000c movel %fp@(12),%d0
4ce12: 222e 0010 movel %fp@(16),%d1
* 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 )
4ce16: 242a 004c movel %a2@(76),%d2
4ce1a: 262a 0050 movel %a2@(80),%d3
4ce1e: 9681 subl %d1,%d3
4ce20: 9580 subxl %d0,%d2
4ce22: 6d30 blts 4ce54 <memfile_ftruncate+0x56> <== NEVER TAKEN
* 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;
4ce24: 2540 004c movel %d0,%a2@(76)
4ce28: 2541 0050 movel %d1,%a2@(80)
iop->size = the_jnode->info.file.size;
4ce2c: 2140 0004 movel %d0,%a0@(4)
4ce30: 2141 0008 movel %d1,%a0@(8)
IMFS_update_atime( the_jnode );
4ce34: 42a7 clrl %sp@-
4ce36: 486e fff8 pea %fp@(-8)
4ce3a: 4eb9 0004 2e48 jsr 42e48 <gettimeofday>
4ce40: 256e fff8 003c movel %fp@(-8),%a2@(60)
return 0;
4ce46: 508f addql #8,%sp
4ce48: 4280 clrl %d0
}
4ce4a: 4cee 040c ffec moveml %fp@(-20),%d2-%d3/%a2
4ce50: 4e5e unlk %fp
4ce52: 4e75 rts
* and the new length is greater than the current size. We treat this
* as an extend operation.
*/
if ( length > the_jnode->info.file.size )
return IMFS_memfile_extend( the_jnode, length );
4ce54: 2f01 movel %d1,%sp@- <== NOT EXECUTED
4ce56: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4ce58: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4ce5a: 4eb9 0004 ca2c jsr 4ca2c <IMFS_memfile_extend> <== NOT EXECUTED
4ce60: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
iop->size = the_jnode->info.file.size;
IMFS_update_atime( the_jnode );
return 0;
}
4ce64: 4cee 040c ffec moveml %fp@(-20),%d2-%d3/%a2 <== NOT EXECUTED
4ce6a: 4e5e unlk %fp <== NOT EXECUTED
0004ce6e <memfile_lseek>:
{
IMFS_jnode_t *the_jnode;
the_jnode = iop->pathinfo.node_access;
if (the_jnode->type == IMFS_LINEAR_FILE) {
4ce6e: 7006 moveq #6,%d0
rtems_off64_t memfile_lseek(
rtems_libio_t *iop,
rtems_off64_t offset,
int whence
)
{
4ce70: 4e56 ffe4 linkw %fp,#-28
4ce74: 48d7 0c7c moveml %d2-%d6/%a2-%a3,%sp@
4ce78: 246e 0008 moveal %fp@(8),%a2
IMFS_jnode_t *the_jnode;
the_jnode = iop->pathinfo.node_access;
4ce7c: 266a 0018 moveal %a2@(24),%a3
if (the_jnode->type == IMFS_LINEAR_FILE) {
4ce80: b0ab 0048 cmpl %a3@(72),%d0
4ce84: 673e beqs 4cec4 <memfile_lseek+0x56>
if (iop->offset > the_jnode->info.linearfile.size)
iop->offset = the_jnode->info.linearfile.size;
}
else { /* Must be a block file (IMFS_MEMORY_FILE). */
if (IMFS_memfile_extend( the_jnode, iop->offset ))
4ce86: 2f2a 0010 movel %a2@(16),%sp@-
4ce8a: 2f2a 000c movel %a2@(12),%sp@-
4ce8e: 2f0b movel %a3,%sp@-
4ce90: 4eb9 0004 ca2c jsr 4ca2c <IMFS_memfile_extend>
4ce96: 4fef 000c lea %sp@(12),%sp
4ce9a: 4a80 tstl %d0
4ce9c: 665a bnes 4cef8 <memfile_lseek+0x8a> <== NEVER TAKEN
rtems_set_errno_and_return_minus_one( ENOSPC );
iop->size = the_jnode->info.file.size;
4ce9e: 202b 004c movel %a3@(76),%d0
4cea2: 222b 0050 movel %a3@(80),%d1
4cea6: 2540 0004 movel %d0,%a2@(4)
4ceaa: 2541 0008 movel %d1,%a2@(8)
4ceae: 222a 000c movel %a2@(12),%d1
4ceb2: 242a 0010 movel %a2@(16),%d2
}
return iop->offset;
}
4ceb6: 2001 movel %d1,%d0
4ceb8: 2202 movel %d2,%d1
4ceba: 4cee 0c7c ffe4 moveml %fp@(-28),%d2-%d6/%a2-%a3
4cec0: 4e5e unlk %fp
4cec2: 4e75 rts
IMFS_jnode_t *the_jnode;
the_jnode = iop->pathinfo.node_access;
if (the_jnode->type == IMFS_LINEAR_FILE) {
if (iop->offset > the_jnode->info.linearfile.size)
4cec4: 222a 000c movel %a2@(12),%d1
4cec8: 242a 0010 movel %a2@(16),%d2
4cecc: 262b 004c movel %a3@(76),%d3
4ced0: 282b 0050 movel %a3@(80),%d4
4ced4: 2a01 movel %d1,%d5
4ced6: 2c02 movel %d2,%d6
4ced8: 9c84 subl %d4,%d6
4ceda: 9b83 subxl %d3,%d5
4cedc: 6fd8 bles 4ceb6 <memfile_lseek+0x48> <== ALWAYS TAKEN
iop->offset = the_jnode->info.linearfile.size;
4cede: 2203 movel %d3,%d1 <== NOT EXECUTED
4cee0: 2404 movel %d4,%d2 <== NOT EXECUTED
4cee2: 2543 000c movel %d3,%a2@(12) <== NOT EXECUTED
4cee6: 2544 0010 movel %d4,%a2@(16) <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSPC );
iop->size = the_jnode->info.file.size;
}
return iop->offset;
}
4ceea: 2001 movel %d1,%d0 <== NOT EXECUTED
4ceec: 2202 movel %d2,%d1 <== NOT EXECUTED
4ceee: 4cee 0c7c ffe4 moveml %fp@(-28),%d2-%d6/%a2-%a3 <== NOT EXECUTED
4cef4: 4e5e unlk %fp <== NOT EXECUTED
4cef6: 4e75 rts <== NOT EXECUTED
if (iop->offset > the_jnode->info.linearfile.size)
iop->offset = the_jnode->info.linearfile.size;
}
else { /* Must be a block file (IMFS_MEMORY_FILE). */
if (IMFS_memfile_extend( the_jnode, iop->offset ))
rtems_set_errno_and_return_minus_one( ENOSPC );
4cef8: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
4cefe: 7c1c moveq #28,%d6 <== NOT EXECUTED
4cf00: 2040 moveal %d0,%a0 <== NOT EXECUTED
4cf02: 72ff moveq #-1,%d1 <== NOT EXECUTED
4cf04: 74ff moveq #-1,%d2 <== NOT EXECUTED
4cf06: 2086 movel %d6,%a0@ <== NOT EXECUTED
iop->size = the_jnode->info.file.size;
}
return iop->offset;
}
4cf08: 2001 movel %d1,%d0 <== NOT EXECUTED
4cf0a: 2202 movel %d2,%d1 <== NOT EXECUTED
4cf0c: 4cee 0c7c ffe4 moveml %fp@(-28),%d2-%d6/%a2-%a3 <== NOT EXECUTED
4cf12: 4e5e unlk %fp <== NOT EXECUTED
...
0004cd4a <memfile_open>:
rtems_libio_t *iop,
const char *pathname,
uint32_t flag,
uint32_t mode
)
{
4cd4a: 4e56 fff0 linkw %fp,#-16
4cd4e: 48d7 0c0c moveml %d2-%d3/%a2-%a3,%sp@
4cd52: 246e 0008 moveal %fp@(8),%a2
the_jnode = iop->pathinfo.node_access;
/*
* Perform 'copy on write' for linear files
*/
if ((iop->flags & (LIBIO_FLAGS_WRITE | LIBIO_FLAGS_APPEND))
4cd56: 202a 0014 movel %a2@(20),%d0
4cd5a: 2200 movel %d0,%d1
4cd5c: 0281 0000 0204 andil #516,%d1
uint32_t mode
)
{
IMFS_jnode_t *the_jnode;
the_jnode = iop->pathinfo.node_access;
4cd62: 266a 0018 moveal %a2@(24),%a3
/*
* Perform 'copy on write' for linear files
*/
if ((iop->flags & (LIBIO_FLAGS_WRITE | LIBIO_FLAGS_APPEND))
4cd66: 6708 beqs 4cd70 <memfile_open+0x26>
&& (the_jnode->type == IMFS_LINEAR_FILE)) {
4cd68: 7206 moveq #6,%d1
4cd6a: b2ab 0048 cmpl %a3@(72),%d1
4cd6e: 6732 beqs 4cda2 <memfile_open+0x58> <== NEVER TAKEN
the_jnode->info.file.triply_indirect = 0;
if ((count != 0)
&& (IMFS_memfile_write(the_jnode, 0, buffer, count) == -1))
return -1;
}
if (iop->flags & LIBIO_FLAGS_APPEND)
4cd70: 0800 0009 btst #9,%d0
4cd74: 6710 beqs 4cd86 <memfile_open+0x3c>
iop->offset = the_jnode->info.file.size;
4cd76: 242b 004c movel %a3@(76),%d2
4cd7a: 262b 0050 movel %a3@(80),%d3
4cd7e: 2542 000c movel %d2,%a2@(12)
4cd82: 2543 0010 movel %d3,%a2@(16)
iop->size = the_jnode->info.file.size;
return 0;
4cd86: 4280 clrl %d0
return -1;
}
if (iop->flags & LIBIO_FLAGS_APPEND)
iop->offset = the_jnode->info.file.size;
iop->size = the_jnode->info.file.size;
4cd88: 222b 004c movel %a3@(76),%d1
4cd8c: 242b 0050 movel %a3@(80),%d2
4cd90: 2541 0004 movel %d1,%a2@(4)
4cd94: 2542 0008 movel %d2,%a2@(8)
return 0;
}
4cd98: 4cee 0c0c fff0 moveml %fp@(-16),%d2-%d3/%a2-%a3
4cd9e: 4e5e unlk %fp
4cda0: 4e75 rts
/*
* Perform 'copy on write' for linear files
*/
if ((iop->flags & (LIBIO_FLAGS_WRITE | LIBIO_FLAGS_APPEND))
&& (the_jnode->type == IMFS_LINEAR_FILE)) {
uint32_t count = the_jnode->info.linearfile.size;
4cda2: 222b 0050 movel %a3@(80),%d1 <== NOT EXECUTED
const unsigned char *buffer = the_jnode->info.linearfile.direct;
the_jnode->type = IMFS_MEMORY_FILE;
the_jnode->info.file.size = 0;
4cda6: 4282 clrl %d2 <== NOT EXECUTED
4cda8: 4283 clrl %d3 <== NOT EXECUTED
* Perform 'copy on write' for linear files
*/
if ((iop->flags & (LIBIO_FLAGS_WRITE | LIBIO_FLAGS_APPEND))
&& (the_jnode->type == IMFS_LINEAR_FILE)) {
uint32_t count = the_jnode->info.linearfile.size;
const unsigned char *buffer = the_jnode->info.linearfile.direct;
4cdaa: 206b 0054 moveal %a3@(84),%a0 <== NOT EXECUTED
the_jnode->type = IMFS_MEMORY_FILE;
the_jnode->info.file.size = 0;
4cdae: 2742 004c movel %d2,%a3@(76) <== NOT EXECUTED
4cdb2: 2743 0050 movel %d3,%a3@(80) <== NOT EXECUTED
if ((iop->flags & (LIBIO_FLAGS_WRITE | LIBIO_FLAGS_APPEND))
&& (the_jnode->type == IMFS_LINEAR_FILE)) {
uint32_t count = the_jnode->info.linearfile.size;
const unsigned char *buffer = the_jnode->info.linearfile.direct;
the_jnode->type = IMFS_MEMORY_FILE;
4cdb6: 7605 moveq #5,%d3 <== NOT EXECUTED
the_jnode->info.file.size = 0;
the_jnode->info.file.indirect = 0;
4cdb8: 42ab 0054 clrl %a3@(84) <== NOT EXECUTED
if ((iop->flags & (LIBIO_FLAGS_WRITE | LIBIO_FLAGS_APPEND))
&& (the_jnode->type == IMFS_LINEAR_FILE)) {
uint32_t count = the_jnode->info.linearfile.size;
const unsigned char *buffer = the_jnode->info.linearfile.direct;
the_jnode->type = IMFS_MEMORY_FILE;
4cdbc: 2743 0048 movel %d3,%a3@(72) <== NOT EXECUTED
the_jnode->info.file.size = 0;
the_jnode->info.file.indirect = 0;
the_jnode->info.file.doubly_indirect = 0;
4cdc0: 42ab 0058 clrl %a3@(88) <== NOT EXECUTED
the_jnode->info.file.triply_indirect = 0;
4cdc4: 42ab 005c clrl %a3@(92) <== NOT EXECUTED
if ((count != 0)
4cdc8: 4a81 tstl %d1 <== NOT EXECUTED
4cdca: 67a4 beqs 4cd70 <memfile_open+0x26> <== NOT EXECUTED
&& (IMFS_memfile_write(the_jnode, 0, buffer, count) == -1))
4cdcc: 2f01 movel %d1,%sp@- <== NOT EXECUTED
4cdce: 2f08 movel %a0,%sp@- <== NOT EXECUTED
4cdd0: 42a7 clrl %sp@- <== NOT EXECUTED
4cdd2: 42a7 clrl %sp@- <== NOT EXECUTED
4cdd4: 2f0b movel %a3,%sp@- <== NOT EXECUTED
4cdd6: 4eb9 0004 cb32 jsr 4cb32 <IMFS_memfile_write> <== NOT EXECUTED
4cddc: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
4cde0: 72ff moveq #-1,%d1 <== NOT EXECUTED
4cde2: b280 cmpl %d0,%d1 <== NOT EXECUTED
4cde4: 670c beqs 4cdf2 <memfile_open+0xa8> <== NOT EXECUTED
4cde6: 202a 0014 movel %a2@(20),%d0 <== NOT EXECUTED
return -1;
}
if (iop->flags & LIBIO_FLAGS_APPEND)
4cdea: 0800 0009 btst #9,%d0 <== NOT EXECUTED
4cdee: 6796 beqs 4cd86 <memfile_open+0x3c> <== NOT EXECUTED
4cdf0: 6084 bras 4cd76 <memfile_open+0x2c> <== NOT EXECUTED
the_jnode->info.file.indirect = 0;
the_jnode->info.file.doubly_indirect = 0;
the_jnode->info.file.triply_indirect = 0;
if ((count != 0)
&& (IMFS_memfile_write(the_jnode, 0, buffer, count) == -1))
return -1;
4cdf2: 70ff moveq #-1,%d0 <== NOT EXECUTED
if (iop->flags & LIBIO_FLAGS_APPEND)
iop->offset = the_jnode->info.file.size;
iop->size = the_jnode->info.file.size;
return 0;
}
4cdf4: 4cee 0c0c fff0 moveml %fp@(-16),%d2-%d3/%a2-%a3 <== NOT EXECUTED
4cdfa: 4e5e unlk %fp <== NOT EXECUTED
000431d8 <mknod>:
int mknod(
const char *pathname,
mode_t mode,
dev_t dev
)
{
431d8: 4e56 ffd4 linkw %fp,#-44
431dc: 48d7 001c moveml %d2-%d4,%sp@
431e0: 242e 000c movel %fp@(12),%d2
rtems_filesystem_location_info_t temp_loc;
int i;
const char *name_start;
int result;
if ( !(mode & (S_IFREG|S_IFCHR|S_IFBLK|S_IFIFO) ) )
431e4: 2002 movel %d2,%d0
431e6: 0280 0000 f000 andil #61440,%d0
int mknod(
const char *pathname,
mode_t mode,
dev_t dev
)
{
431ec: 282e 0008 movel %fp@(8),%d4
rtems_filesystem_location_info_t temp_loc;
int i;
const char *name_start;
int result;
if ( !(mode & (S_IFREG|S_IFCHR|S_IFBLK|S_IFIFO) ) )
431f0: 4a80 tstl %d0
431f2: 6618 bnes 4320c <mknod+0x34> <== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one( EINVAL );
431f4: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
431fa: 7216 moveq #22,%d1 <== NOT EXECUTED
431fc: 2040 moveal %d0,%a0 <== NOT EXECUTED
431fe: 70ff moveq #-1,%d0 <== NOT EXECUTED
result = (*temp_loc.ops->mknod_h)( name_start, mode, dev, &temp_loc );
rtems_filesystem_freenode( &temp_loc );
return result;
}
43200: 4cee 001c ffd4 moveml %fp@(-44),%d2-%d4 <== NOT EXECUTED
int i;
const char *name_start;
int result;
if ( !(mode & (S_IFREG|S_IFCHR|S_IFBLK|S_IFIFO) ) )
rtems_set_errno_and_return_minus_one( EINVAL );
43206: 2081 movel %d1,%a0@ <== NOT EXECUTED
result = (*temp_loc.ops->mknod_h)( name_start, mode, dev, &temp_loc );
rtems_filesystem_freenode( &temp_loc );
return result;
}
43208: 4e5e unlk %fp <== NOT EXECUTED
4320a: 4e75 rts <== NOT EXECUTED
int result;
if ( !(mode & (S_IFREG|S_IFCHR|S_IFBLK|S_IFIFO) ) )
rtems_set_errno_and_return_minus_one( EINVAL );
rtems_filesystem_get_start_loc( pathname, &i, &temp_loc );
4320c: 260e movel %fp,%d3
4320e: 0683 ffff ffe4 addil #-28,%d3
43214: 2f03 movel %d3,%sp@-
43216: 486e fffc pea %fp@(-4)
4321a: 2f04 movel %d4,%sp@-
4321c: 4eb9 0004 3c68 jsr 43c68 <rtems_filesystem_get_start_loc>
result = (*temp_loc.ops->evalformake_h)(
43222: 486e fff8 pea %fp@(-8)
43226: d8ae fffc addl %fp@(-4),%d4
4322a: 2f03 movel %d3,%sp@-
4322c: 206e fff0 moveal %fp@(-16),%a0
43230: 2f04 movel %d4,%sp@-
43232: 2068 0004 moveal %a0@(4),%a0
43236: 4e90 jsr %a0@
&pathname[i],
&temp_loc,
&name_start
);
if ( result != 0 )
43238: 4fef 0018 lea %sp@(24),%sp
4323c: 4a80 tstl %d0
4323e: 670c beqs 4324c <mknod+0x74>
return -1;
43240: 70ff moveq #-1,%d0
result = (*temp_loc.ops->mknod_h)( name_start, mode, dev, &temp_loc );
rtems_filesystem_freenode( &temp_loc );
return result;
}
43242: 4cee 001c ffd4 moveml %fp@(-44),%d2-%d4
43248: 4e5e unlk %fp
4324a: 4e75 rts
&name_start
);
if ( result != 0 )
return -1;
result = (*temp_loc.ops->mknod_h)( name_start, mode, dev, &temp_loc );
4324c: 2f03 movel %d3,%sp@-
4324e: 2f2e 0014 movel %fp@(20),%sp@-
43252: 2f2e 0010 movel %fp@(16),%sp@-
43256: 206e fff0 moveal %fp@(-16),%a0
4325a: 2f02 movel %d2,%sp@-
4325c: 2f2e fff8 movel %fp@(-8),%sp@-
43260: 2068 0014 moveal %a0@(20),%a0
43264: 4e90 jsr %a0@
rtems_filesystem_freenode( &temp_loc );
43266: 2f03 movel %d3,%sp@-
43268: 2d40 ffe0 movel %d0,%fp@(-32)
4326c: 4eb9 0004 2da4 jsr 42da4 <rtems_filesystem_freenode>
return result;
43272: 202e ffe0 movel %fp@(-32),%d0
43276: 4fef 0018 lea %sp@(24),%sp
}
4327a: 4cee 001c ffd4 moveml %fp@(-44),%d2-%d4
43280: 4e5e unlk %fp <== NOT EXECUTED
00043318 <mount>:
/*
* Are the file system options valid?
*/
if ( options != RTEMS_FILESYSTEM_READ_ONLY &&
43318: 7001 moveq #1,%d0
const char *target,
const char *filesystemtype,
rtems_filesystem_options_t options,
const void *data
)
{
4331a: 4e56 ffbc linkw %fp,#-68
4331e: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
43322: 242e 0008 movel %fp@(8),%d2
43326: 262e 000c movel %fp@(12),%d3
4332a: 2e2e 0010 movel %fp@(16),%d7
4332e: 2c2e 0014 movel %fp@(20),%d6
/*
* Are the file system options valid?
*/
if ( options != RTEMS_FILESYSTEM_READ_ONLY &&
43332: b086 cmpl %d6,%d0
43334: 6500 027c bcsw 435b2 <mount+0x29a>
rtems_set_errno_and_return_minus_one( EINVAL );
/*
* Get mount handler
*/
mount_h = rtems_filesystem_get_mount_handler( filesystemtype );
43338: 2f07 movel %d7,%sp@-
4333a: 4eb9 0004 b3c4 jsr 4b3c4 <rtems_filesystem_get_mount_handler>
if ( !mount_h )
43340: 588f addql #4,%sp
rtems_set_errno_and_return_minus_one( EINVAL );
/*
* Get mount handler
*/
mount_h = rtems_filesystem_get_mount_handler( filesystemtype );
43342: 2640 moveal %d0,%a3
if ( !mount_h )
43344: 4a80 tstl %d0
43346: 6700 026a beqw 435b2 <mount+0x29a>
{
rtems_filesystem_fsmount_me_t mount_h = NULL;
rtems_filesystem_location_info_t loc;
rtems_filesystem_mount_table_entry_t *mt_entry = NULL;
rtems_filesystem_location_info_t *loc_to_free = NULL;
bool has_target = target != NULL;
4334a: 4a83 tstl %d3
4334c: 56c5 sne %d5
4334e: 4485 negl %d5
const char *target_or_null,
const char *filesystemtype,
size_t *target_length_ptr
)
{
const char *target = target_or_null != NULL ? target_or_null : "/";
43350: 4a05 tstb %d5
43352: 6700 0230 beqw 43584 <mount+0x26c>
* 4) The mount point exists with the proper permissions to allow mounting
* 5) The selected mount point already has a file system mounted to it
*
*/
int mount(
43356: 2f03 movel %d3,%sp@-
43358: 45f9 0004 eec4 lea 4eec4 <strlen>,%a2
4335e: 2d43 ffe4 movel %d3,%fp@(-28)
43362: 4e92 jsr %a2@
43364: 588f addql #4,%sp
43366: 2d40 ffe8 movel %d0,%fp@(-24)
const char *filesystemtype,
size_t *target_length_ptr
)
{
const char *target = target_or_null != NULL ? target_or_null : "/";
size_t filesystemtype_size = strlen( filesystemtype ) + 1;
4336a: 2f07 movel %d7,%sp@-
4336c: 4e92 jsr %a2@
4336e: 588f addql #4,%sp
43370: 2800 movel %d0,%d4
43372: 5284 addql #1,%d4
size_t source_size = source_or_null != NULL ?
strlen( source_or_null ) + 1 : 0;
43374: 4a82 tstl %d2
43376: 6700 0234 beqw 435ac <mount+0x294>
4337a: 2f02 movel %d2,%sp@-
4337c: 4eb9 0004 eec4 jsr 4eec4 <strlen>
43382: 588f addql #4,%sp
43384: 2a40 moveal %d0,%a5
43386: 528d addql #1,%a5
size_t target_length = strlen( target );
size_t size = sizeof( rtems_filesystem_mount_table_entry_t )
+ filesystemtype_size + source_size + target_length + 1;
43388: 226e ffe8 moveal %fp@(-24),%a1
4338c: 41f1 4875 lea %a1@(00000075,%d4:l),%a0
rtems_filesystem_mount_table_entry_t *mt_entry = calloc( 1, size );
43390: 4870 d800 pea %a0@(00000000,%a5:l)
43394: 4878 0001 pea 1 <ADD>
43398: 4eb9 0004 292c jsr 4292c <calloc>
if ( mt_entry != NULL ) {
4339e: 508f addql #8,%sp
size_t source_size = source_or_null != NULL ?
strlen( source_or_null ) + 1 : 0;
size_t target_length = strlen( target );
size_t size = sizeof( rtems_filesystem_mount_table_entry_t )
+ filesystemtype_size + source_size + target_length + 1;
rtems_filesystem_mount_table_entry_t *mt_entry = calloc( 1, size );
433a0: 2440 moveal %d0,%a2
if ( mt_entry != NULL ) {
433a2: 4a80 tstl %d0
433a4: 6700 01c6 beqw 4356c <mount+0x254>
char *str = (char *) mt_entry + sizeof( *mt_entry );
strcpy( str, filesystemtype );
433a8: 2f07 movel %d7,%sp@-
size_t size = sizeof( rtems_filesystem_mount_table_entry_t )
+ filesystemtype_size + source_size + target_length + 1;
rtems_filesystem_mount_table_entry_t *mt_entry = calloc( 1, size );
if ( mt_entry != NULL ) {
char *str = (char *) mt_entry + sizeof( *mt_entry );
433aa: 2e00 movel %d0,%d7
433ac: 0687 0000 0074 addil #116,%d7
strcpy( str, filesystemtype );
433b2: 49f9 0004 ea18 lea 4ea18 <strcpy>,%a4
mt_entry->type = str;
str += filesystemtype_size;
433b8: d887 addl %d7,%d4
rtems_filesystem_mount_table_entry_t *mt_entry = calloc( 1, size );
if ( mt_entry != NULL ) {
char *str = (char *) mt_entry + sizeof( *mt_entry );
strcpy( str, filesystemtype );
433ba: 2f07 movel %d7,%sp@-
433bc: 4e94 jsr %a4@
mt_entry->type = str;
str += filesystemtype_size;
if ( source_or_null != NULL ) {
433be: 508f addql #8,%sp
if ( mt_entry != NULL ) {
char *str = (char *) mt_entry + sizeof( *mt_entry );
strcpy( str, filesystemtype );
mt_entry->type = str;
433c0: 2547 006c movel %d7,%a2@(108)
str += filesystemtype_size;
if ( source_or_null != NULL ) {
433c4: 4a82 tstl %d2
433c6: 670e beqs 433d6 <mount+0xbe>
strcpy( str, source_or_null );
433c8: 2f02 movel %d2,%sp@-
433ca: 2f04 movel %d4,%sp@-
433cc: 4e94 jsr %a4@
mt_entry->dev = str;
str += source_size;
433ce: 508f addql #8,%sp
mt_entry->type = str;
str += filesystemtype_size;
if ( source_or_null != NULL ) {
strcpy( str, source_or_null );
mt_entry->dev = str;
433d0: 2544 0070 movel %d4,%a2@(112)
str += source_size;
433d4: d88d addl %a5,%d4
}
strcpy( str, target );
433d6: 2f2e ffe4 movel %fp@(-28),%sp@-
433da: 2f04 movel %d4,%sp@-
433dc: 4e94 jsr %a4@
/*
* The mount_point should be a directory with read/write/execute
* permissions in the existing tree.
*/
if ( has_target ) {
433de: 508f addql #8,%sp
if ( !mt_entry )
rtems_set_errno_and_return_minus_one( ENOMEM );
mt_entry->mt_fs_root.mt_entry = mt_entry;
mt_entry->options = options;
mt_entry->pathconf_limits_and_options = rtems_filesystem_default_pathconf;
433e0: 7005 moveq #5,%d0
433e2: 223c 0000 0080 movel #128,%d1
433e8: 307c 0400 moveaw #1024,%a0
433ec: 2540 0038 movel %d0,%a2@(56)
433f0: 103c 0007 moveb #7,%d0
433f4: 2541 003c movel %d1,%a2@(60)
433f8: 0681 0000 007f addil #127,%d1
433fe: 2540 0040 movel %d0,%a2@(64)
43402: 103c 0001 moveb #1,%d0
mt_entry->dev = str;
str += source_size;
}
strcpy( str, target );
mt_entry->target = str;
43406: 2544 0068 movel %d4,%a2@(104)
&target_length
);
if ( !mt_entry )
rtems_set_errno_and_return_minus_one( ENOMEM );
mt_entry->mt_fs_root.mt_entry = mt_entry;
4340a: 254a 002c movel %a2,%a2@(44)
mt_entry->options = options;
4340e: 2546 0030 movel %d6,%a2@(48)
mt_entry->pathconf_limits_and_options = rtems_filesystem_default_pathconf;
43412: 2541 0044 movel %d1,%a2@(68)
43416: 2541 0048 movel %d1,%a2@(72)
4341a: 2548 004c movel %a0,%a2@(76)
4341e: 42aa 0050 clrl %a2@(80)
43422: 42aa 0054 clrl %a2@(84)
43426: 2540 0058 movel %d0,%a2@(88)
4342a: 42aa 005c clrl %a2@(92)
4342e: 42aa 0060 clrl %a2@(96)
43432: 42aa 0064 clrl %a2@(100)
/*
* The mount_point should be a directory with read/write/execute
* permissions in the existing tree.
*/
if ( has_target ) {
43436: 4a05 tstb %d5
43438: 6600 0092 bnew 434cc <mount+0x1b4>
}
} else {
/*
* Do we already have a base file system ?
*/
if ( !rtems_chain_is_empty( &mount_chain ) ) {
4343c: 203c 0005 cd44 movel #380228,%d0
43442: b0b9 0005 cd40 cmpl 5cd40 <mount_chain>,%d0
43448: 6600 0180 bnew 435ca <mount+0x2b2>
)
{
rtems_filesystem_fsmount_me_t mount_h = NULL;
rtems_filesystem_location_info_t loc;
rtems_filesystem_mount_table_entry_t *mt_entry = NULL;
rtems_filesystem_location_info_t *loc_to_free = NULL;
4344c: 4282 clrl %d2
* mt_point_node.node_access will be left to null to indicate that this
* is the root of the entire file system.
*/
}
if ( (*mount_h)( mt_entry, data ) ) {
4344e: 2f2e 0018 movel %fp@(24),%sp@-
43452: 2f0a movel %a2,%sp@-
43454: 4e93 jsr %a3@
43456: 508f addql #8,%sp
43458: 4a80 tstl %d0
4345a: 6600 0190 bnew 435ec <mount+0x2d4>
rtems_status_code rtems_libio_set_private_env(void);
rtems_status_code rtems_libio_share_private_env(rtems_id task_id) ;
static inline void rtems_libio_lock( void )
{
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
4345e: 42a7 clrl %sp@-
43460: 42a7 clrl %sp@-
43462: 2f39 0005 e2d0 movel 5e2d0 <rtems_libio_semaphore>,%sp@-
43468: 4eb9 0004 6648 jsr 46648 <rtems_semaphore_obtain>
4346e: 2f0a movel %a2,%sp@-
43470: 4879 0005 cd40 pea 5cd40 <mount_chain>
43476: 4eb9 0004 703c jsr 4703c <_Chain_Append>
}
static inline void rtems_libio_unlock( void )
{
rtems_semaphore_release( rtems_libio_semaphore );
4347c: 2f39 0005 e2d0 movel 5e2d0 <rtems_libio_semaphore>,%sp@-
43482: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
*/
rtems_libio_lock();
rtems_chain_append( &mount_chain, &mt_entry->Node );
rtems_libio_unlock();
if ( !has_target )
43488: 4fef 0018 lea %sp@(24),%sp
4348c: 4a05 tstb %d5
4348e: 6630 bnes 434c0 <mount+0x1a8>
rtems_filesystem_root = mt_entry->mt_fs_root;
43490: 2079 0005 cd60 moveal 5cd60 <rtems_current_user_env>,%a0
return 0;
43496: 4280 clrl %d0
rtems_libio_lock();
rtems_chain_append( &mount_chain, &mt_entry->Node );
rtems_libio_unlock();
if ( !has_target )
rtems_filesystem_root = mt_entry->mt_fs_root;
43498: 216a 001c 0018 movel %a2@(28),%a0@(24)
4349e: 216a 0020 001c movel %a2@(32),%a0@(28)
434a4: 216a 0024 0020 movel %a2@(36),%a0@(32)
434aa: 216a 0028 0024 movel %a2@(40),%a0@(36)
434b0: 216a 002c 0028 movel %a2@(44),%a0@(40)
if ( loc_to_free )
rtems_filesystem_freenode( loc_to_free );
return -1;
}
434b6: 4cee 3cfc ffbc moveml %fp@(-68),%d2-%d7/%a2-%a5
434bc: 4e5e unlk %fp
434be: 4e75 rts
rtems_libio_unlock();
if ( !has_target )
rtems_filesystem_root = mt_entry->mt_fs_root;
return 0;
434c0: 4280 clrl %d0
if ( loc_to_free )
rtems_filesystem_freenode( loc_to_free );
return -1;
}
434c2: 4cee 3cfc ffbc moveml %fp@(-68),%d2-%d7/%a2-%a5
434c8: 4e5e unlk %fp
434ca: 4e75 rts
* The mount_point should be a directory with read/write/execute
* permissions in the existing tree.
*/
if ( has_target ) {
if ( rtems_filesystem_evaluate_path(
434cc: 4878 0001 pea 1 <ADD>
434d0: 240e movel %fp,%d2
434d2: 0682 ffff ffec addil #-20,%d2
434d8: 2f02 movel %d2,%sp@-
434da: 4878 0007 pea 7 <TRUNCDFSF>
434de: 2f2e ffe8 movel %fp@(-24),%sp@-
434e2: 2f03 movel %d3,%sp@-
434e4: 4eb9 0004 2c80 jsr 42c80 <rtems_filesystem_evaluate_path>
434ea: 4fef 0014 lea %sp@(20),%sp
434ee: 72ff moveq #-1,%d1
434f0: b280 cmpl %d0,%d1
434f2: 6700 00e2 beqw 435d6 <mount+0x2be>
/*
* Test to see if it is a directory
*/
if ( loc.ops->node_type_h( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) {
434f6: 206e fff8 moveal %fp@(-8),%a0
434fa: 2f02 movel %d2,%sp@-
434fc: 2068 0010 moveal %a0@(16),%a0
43500: 4e90 jsr %a0@
43502: 588f addql #4,%sp
43504: 7201 moveq #1,%d1
43506: b280 cmpl %d0,%d1
43508: 6600 010a bnew 43614 <mount+0x2fc>
/*
* You can only mount one file system onto a single mount point.
*/
if ( rtems_filesystem_mount_iterate( is_node_fs_root, loc.node_access ) ) {
4350c: 2f2e ffec movel %fp@(-20),%sp@-
43510: 487a fd72 pea %pc@(43284 <is_node_fs_root>)
43514: 4eb9 0004 329c jsr 4329c <rtems_filesystem_mount_iterate>
4351a: 508f addql #8,%sp
4351c: 4a00 tstb %d0
4351e: 6600 010e bnew 4362e <mount+0x316>
* traverse the tree.
*/
mt_entry->mt_point_node.node_access = loc.node_access;
mt_entry->mt_point_node.handlers = loc.handlers;
mt_entry->mt_point_node.ops = loc.ops;
43522: 206e fff8 moveal %fp@(-8),%a0
* may have been allocated in loc should not be sent to freenode
* until the system is unmounted. It may be needed to correctly
* traverse the tree.
*/
mt_entry->mt_point_node.node_access = loc.node_access;
43526: 256e ffec 0008 movel %fp@(-20),%a2@(8)
mt_entry->mt_point_node.handlers = loc.handlers;
4352c: 256e fff4 0010 movel %fp@(-12),%a2@(16)
mt_entry->mt_point_node.ops = loc.ops;
mt_entry->mt_point_node.mt_entry = loc.mt_entry;
43532: 256e fffc 0018 movel %fp@(-4),%a2@(24)
/*
* This link to the parent is only done when we are dealing with system
* below the base file system
*/
if ( loc.ops->mount_h( mt_entry ) ) {
43538: 2f0a movel %a2,%sp@-
4353a: 2268 0020 moveal %a0@(32),%a1
* traverse the tree.
*/
mt_entry->mt_point_node.node_access = loc.node_access;
mt_entry->mt_point_node.handlers = loc.handlers;
mt_entry->mt_point_node.ops = loc.ops;
4353e: 2548 0014 movel %a0,%a2@(20)
/*
* This link to the parent is only done when we are dealing with system
* below the base file system
*/
if ( loc.ops->mount_h( mt_entry ) ) {
43542: 4e91 jsr %a1@
43544: 588f addql #4,%sp
43546: 4a80 tstl %d0
43548: 6700 ff04 beqw 4344e <mount+0x136>
return 0;
cleanup_and_bail:
free( mt_entry );
4354c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4354e: 4eb9 0004 2db8 jsr 42db8 <free> <== NOT EXECUTED
43554: 588f addql #4,%sp <== NOT EXECUTED
if ( loc_to_free )
rtems_filesystem_freenode( loc_to_free );
43556: 2f02 movel %d2,%sp@-
43558: 4eb9 0004 2da4 jsr 42da4 <rtems_filesystem_freenode>
4355e: 588f addql #4,%sp
return -1;
43560: 70ff moveq #-1,%d0
}
43562: 4cee 3cfc ffbc moveml %fp@(-68),%d2-%d7/%a2-%a5
43568: 4e5e unlk %fp
4356a: 4e75 rts
target,
filesystemtype,
&target_length
);
if ( !mt_entry )
rtems_set_errno_and_return_minus_one( ENOMEM );
4356c: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
43572: 780c moveq #12,%d4 <== NOT EXECUTED
43574: 2040 moveal %d0,%a0 <== NOT EXECUTED
43576: 70ff moveq #-1,%d0 <== NOT EXECUTED
43578: 2084 movel %d4,%a0@ <== NOT EXECUTED
if ( loc_to_free )
rtems_filesystem_freenode( loc_to_free );
return -1;
}
4357a: 4cee 3cfc ffbc moveml %fp@(-68),%d2-%d7/%a2-%a5 <== NOT EXECUTED
43580: 4e5e unlk %fp <== NOT EXECUTED
43582: 4e75 rts <== NOT EXECUTED
const char *target_or_null,
const char *filesystemtype,
size_t *target_length_ptr
)
{
const char *target = target_or_null != NULL ? target_or_null : "/";
43584: 307c 0001 moveaw #1,%a0
43588: 43f9 0005 ba40 lea 5ba40 <IMFS_ops+0x48>,%a1
4358e: 45f9 0004 eec4 lea 4eec4 <strlen>,%a2
size_t filesystemtype_size = strlen( filesystemtype ) + 1;
43594: 2f07 movel %d7,%sp@-
const char *target_or_null,
const char *filesystemtype,
size_t *target_length_ptr
)
{
const char *target = target_or_null != NULL ? target_or_null : "/";
43596: 2d48 ffe8 movel %a0,%fp@(-24)
4359a: 2d49 ffe4 movel %a1,%fp@(-28)
size_t filesystemtype_size = strlen( filesystemtype ) + 1;
4359e: 4e92 jsr %a2@
435a0: 588f addql #4,%sp
435a2: 2800 movel %d0,%d4
435a4: 5284 addql #1,%d4
size_t source_size = source_or_null != NULL ?
strlen( source_or_null ) + 1 : 0;
435a6: 4a82 tstl %d2
435a8: 6600 fdd0 bnew 4337a <mount+0x62>
435ac: 9bcd subal %a5,%a5
435ae: 6000 fdd8 braw 43388 <mount+0x70>
/*
* Get mount handler
*/
mount_h = rtems_filesystem_get_mount_handler( filesystemtype );
if ( !mount_h )
rtems_set_errno_and_return_minus_one( EINVAL );
435b2: 4eb9 0004 da6c jsr 4da6c <__errno>
435b8: 7a16 moveq #22,%d5
435ba: 2040 moveal %d0,%a0
435bc: 70ff moveq #-1,%d0
435be: 2085 movel %d5,%a0@
if ( loc_to_free )
rtems_filesystem_freenode( loc_to_free );
return -1;
}
435c0: 4cee 3cfc ffbc moveml %fp@(-68),%d2-%d7/%a2-%a5
435c6: 4e5e unlk %fp
435c8: 4e75 rts
} else {
/*
* Do we already have a base file system ?
*/
if ( !rtems_chain_is_empty( &mount_chain ) ) {
errno = EINVAL;
435ca: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
435d0: 2040 moveal %d0,%a0 <== NOT EXECUTED
435d2: 7016 moveq #22,%d0 <== NOT EXECUTED
435d4: 2080 movel %d0,%a0@ <== NOT EXECUTED
return 0;
cleanup_and_bail:
free( mt_entry );
435d6: 2f0a movel %a2,%sp@- <== NOT EXECUTED
435d8: 4eb9 0004 2db8 jsr 42db8 <free> <== NOT EXECUTED
435de: 588f addql #4,%sp <== NOT EXECUTED
if ( loc_to_free )
rtems_filesystem_freenode( loc_to_free );
return -1;
435e0: 70ff moveq #-1,%d0 <== NOT EXECUTED
}
435e2: 4cee 3cfc ffbc moveml %fp@(-68),%d2-%d7/%a2-%a5 <== NOT EXECUTED
435e8: 4e5e unlk %fp <== NOT EXECUTED
435ea: 4e75 rts <== NOT EXECUTED
if ( (*mount_h)( mt_entry, data ) ) {
/*
* Try to undo the mount operation
*/
loc.ops->unmount_h( mt_entry );
435ec: 206e fff8 moveal %fp@(-8),%a0 <== NOT EXECUTED
435f0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
435f2: 2068 0028 moveal %a0@(40),%a0 <== NOT EXECUTED
435f6: 4e90 jsr %a0@ <== NOT EXECUTED
return 0;
cleanup_and_bail:
free( mt_entry );
435f8: 2e8a movel %a2,%sp@ <== NOT EXECUTED
435fa: 4eb9 0004 2db8 jsr 42db8 <free> <== NOT EXECUTED
if ( loc_to_free )
43600: 588f addql #4,%sp <== NOT EXECUTED
43602: 4a82 tstl %d2 <== NOT EXECUTED
43604: 6600 ff50 bnew 43556 <mount+0x23e> <== NOT EXECUTED
rtems_filesystem_freenode( loc_to_free );
return -1;
43608: 70ff moveq #-1,%d0 <== NOT EXECUTED
}
4360a: 4cee 3cfc ffbc moveml %fp@(-68),%d2-%d7/%a2-%a5 <== NOT EXECUTED
43610: 4e5e unlk %fp <== NOT EXECUTED
43612: 4e75 rts <== NOT EXECUTED
/*
* Test to see if it is a directory
*/
if ( loc.ops->node_type_h( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) {
errno = ENOTDIR;
43614: 4eb9 0004 da6c jsr 4da6c <__errno>
4361a: 7614 moveq #20,%d3
4361c: 2040 moveal %d0,%a0
4361e: 2083 movel %d3,%a0@
return 0;
cleanup_and_bail:
free( mt_entry );
43620: 2f0a movel %a2,%sp@-
43622: 4eb9 0004 2db8 jsr 42db8 <free>
43628: 588f addql #4,%sp
4362a: 6000 ff2a braw 43556 <mount+0x23e>
/*
* You can only mount one file system onto a single mount point.
*/
if ( rtems_filesystem_mount_iterate( is_node_fs_root, loc.node_access ) ) {
errno = EBUSY;
4362e: 4eb9 0004 da6c jsr 4da6c <__errno>
43634: 7210 moveq #16,%d1
43636: 2240 moveal %d0,%a1
43638: 2281 movel %d1,%a1@
return 0;
cleanup_and_bail:
free( mt_entry );
4363a: 2f0a movel %a2,%sp@-
4363c: 4eb9 0004 2db8 jsr 42db8 <free>
43642: 588f addql #4,%sp
43644: 6000 ff10 braw 43556 <mount+0x23e>
00043a5c <mount_and_make_target_path>:
const char *target,
const char *filesystemtype,
rtems_filesystem_options_t options,
const void *data
)
{
43a5c: 4e56 ffec linkw %fp,#-20
43a60: 48d7 007c moveml %d2-%d6,%sp@
43a64: 262e 0008 movel %fp@(8),%d3
43a68: 242e 000c movel %fp@(12),%d2
43a6c: 282e 0010 movel %fp@(16),%d4
43a70: 2a2e 0014 movel %fp@(20),%d5
43a74: 2c2e 0018 movel %fp@(24),%d6
int rv = -1;
if (target != NULL) {
43a78: 4a82 tstl %d2
43a7a: 673e beqs 43aba <mount_and_make_target_path+0x5e>
rv = rtems_mkdir(target, S_IRWXU | S_IRWXG | S_IRWXO);
43a7c: 4878 01ff pea 1ff <DBL_MANT_DIG+0x1ca>
43a80: 2f02 movel %d2,%sp@-
43a82: 4eb9 0004 44b8 jsr 444b8 <rtems_mkdir>
if (rv == 0) {
43a88: 508f addql #8,%sp
43a8a: 4a80 tstl %d0
43a8c: 670a beqs 43a98 <mount_and_make_target_path+0x3c><== ALWAYS TAKEN
} else {
errno = EINVAL;
}
return rv;
}
43a8e: 4cee 007c ffec moveml %fp@(-20),%d2-%d6 <== NOT EXECUTED
43a94: 4e5e unlk %fp <== NOT EXECUTED
43a96: 4e75 rts <== NOT EXECUTED
int rv = -1;
if (target != NULL) {
rv = rtems_mkdir(target, S_IRWXU | S_IRWXG | S_IRWXO);
if (rv == 0) {
rv = mount(
43a98: 2d46 0018 movel %d6,%fp@(24)
43a9c: 2d45 0014 movel %d5,%fp@(20)
43aa0: 2d44 0010 movel %d4,%fp@(16)
43aa4: 2d42 000c movel %d2,%fp@(12)
43aa8: 2d43 0008 movel %d3,%fp@(8)
} else {
errno = EINVAL;
}
return rv;
}
43aac: 4cee 007c ffec moveml %fp@(-20),%d2-%d6
43ab2: 4e5e unlk %fp
int rv = -1;
if (target != NULL) {
rv = rtems_mkdir(target, S_IRWXU | S_IRWXG | S_IRWXO);
if (rv == 0) {
rv = mount(
43ab4: 4ef9 0004 3b68 jmp 43b68 <mount>
options,
data
);
}
} else {
errno = EINVAL;
43aba: 4eb9 0004 e224 jsr 4e224 <__errno>
43ac0: 7216 moveq #22,%d1
43ac2: 2040 moveal %d0,%a0
const char *filesystemtype,
rtems_filesystem_options_t options,
const void *data
)
{
int rv = -1;
43ac4: 70ff moveq #-1,%d0
} else {
errno = EINVAL;
}
return rv;
}
43ac6: 4cee 007c ffec moveml %fp@(-20),%d2-%d6
options,
data
);
}
} else {
errno = EINVAL;
43acc: 2081 movel %d1,%a0@
}
return rv;
}
43ace: 4e5e unlk %fp
...
000438ec <newlib_delete_hook>:
void newlib_delete_hook(
rtems_tcb *current_task,
rtems_tcb *deleted_task
)
{
438ec: 4e56 fff4 linkw %fp,#-12
438f0: 48d7 040c moveml %d2-%d3/%a2,%sp@
438f4: 262e 0008 movel %fp@(8),%d3
438f8: 246e 000c moveal %fp@(12),%a2
/*
* The reentrancy structure was allocated by newlib using malloc()
*/
if (current_task == deleted_task) {
438fc: b5c3 cmpal %d3,%a2
438fe: 674c beqs 4394c <newlib_delete_hook+0x60>
ptr = _REENT;
} else {
ptr = deleted_task->libc_reent;
43900: 242a 0104 movel %a2@(260),%d2
}
if (ptr && ptr != _global_impure_ptr) {
43904: 4a82 tstl %d2
43906: 6722 beqs 4392a <newlib_delete_hook+0x3e> <== NEVER TAKEN
43908: b4b9 0005 c43a cmpl 5c43a <_global_impure_ptr>,%d2
4390e: 671a beqs 4392a <newlib_delete_hook+0x3e>
_reclaim_reent(ptr);
*/
/*
* Just in case there are some buffers lying around.
*/
_fwalk(ptr, newlib_free_buffers);
43910: 4879 0004 36d4 pea 436d4 <newlib_free_buffers>
43916: 2f02 movel %d2,%sp@-
43918: 4eb9 0004 e220 jsr 4e220 <_fwalk>
#if REENT_MALLOCED
free(ptr);
#else
_Workspace_Free(ptr);
4391e: 2f02 movel %d2,%sp@-
43920: 4eb9 0004 9c5e jsr 49c5e <_Workspace_Free>
43926: 4fef 000c lea %sp@(12),%sp
#endif
}
deleted_task->libc_reent = NULL;
4392a: 42aa 0104 clrl %a2@(260)
/*
* Require the switch back to another task to install its own
*/
if ( current_task == deleted_task ) {
4392e: b5c3 cmpal %d3,%a2
43930: 670a beqs 4393c <newlib_delete_hook+0x50>
_REENT = 0;
}
}
43932: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
43938: 4e5e unlk %fp
4393a: 4e75 rts
/*
* Require the switch back to another task to install its own
*/
if ( current_task == deleted_task ) {
_REENT = 0;
4393c: 42b9 0005 cde0 clrl 5cde0 <_impure_ptr>
}
}
43942: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
43948: 4e5e unlk %fp
4394a: 4e75 rts
/*
* The reentrancy structure was allocated by newlib using malloc()
*/
if (current_task == deleted_task) {
ptr = _REENT;
4394c: 2439 0005 cde0 movel 5cde0 <_impure_ptr>,%d2
43952: 60b0 bras 43904 <newlib_delete_hook+0x18>
000436d4 <newlib_free_buffers>:
*/
int newlib_free_buffers(
FILE *fp
)
{
436d4: 4e56 0000 linkw %fp,#0
436d8: 2f0a movel %a2,%sp@-
436da: 246e 0008 moveal %fp@(8),%a2
switch ( fileno(fp) ) {
436de: 2f0a movel %a2,%sp@-
436e0: 4eb9 0004 de0c jsr 4de0c <fileno>
436e6: 588f addql #4,%sp
436e8: 7202 moveq #2,%d1
436ea: b280 cmpl %d0,%d1
436ec: 6414 bccs 43702 <newlib_free_buffers+0x2e> <== ALWAYS TAKEN
fp->_flags &= ~__SMBF;
fp->_bf._base = fp->_p = (unsigned char *) NULL;
}
break;
default:
fclose(fp);
436ee: 2f0a movel %a2,%sp@- <== NOT EXECUTED
436f0: 4eb9 0004 dbba jsr 4dbba <fclose> <== NOT EXECUTED
436f6: 588f addql #4,%sp <== NOT EXECUTED
}
return 0;
}
436f8: 246e fffc moveal %fp@(-4),%a2
436fc: 4280 clrl %d0
436fe: 4e5e unlk %fp
43700: 4e75 rts
{
switch ( fileno(fp) ) {
case 0:
case 1:
case 2:
if (fp->_flags & __SMBF) {
43702: 302a 000c movew %a2@(12),%d0
43706: 48c0 extl %d0
43708: 4a00 tstb %d0
4370a: 6cec bges 436f8 <newlib_free_buffers+0x24> <== ALWAYS TAKEN
free( fp->_bf._base );
4370c: 2f2a 0010 movel %a2@(16),%sp@- <== NOT EXECUTED
43710: 4eb9 0004 2db8 jsr 42db8 <free> <== NOT EXECUTED
fp->_flags &= ~__SMBF;
fp->_bf._base = fp->_p = (unsigned char *) NULL;
43716: 588f addql #4,%sp <== NOT EXECUTED
case 0:
case 1:
case 2:
if (fp->_flags & __SMBF) {
free( fp->_bf._base );
fp->_flags &= ~__SMBF;
43718: 302a 000c movew %a2@(12),%d0 <== NOT EXECUTED
fp->_bf._base = fp->_p = (unsigned char *) NULL;
4371c: 4292 clrl %a2@ <== NOT EXECUTED
case 0:
case 1:
case 2:
if (fp->_flags & __SMBF) {
free( fp->_bf._base );
fp->_flags &= ~__SMBF;
4371e: 0880 0007 bclr #7,%d0 <== NOT EXECUTED
fp->_bf._base = fp->_p = (unsigned char *) NULL;
43722: 42aa 0010 clrl %a2@(16) <== NOT EXECUTED
case 0:
case 1:
case 2:
if (fp->_flags & __SMBF) {
free( fp->_bf._base );
fp->_flags &= ~__SMBF;
43726: 3540 000c movew %d0,%a2@(12) <== NOT EXECUTED
break;
default:
fclose(fp);
}
return 0;
}
4372a: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
4372e: 4280 clrl %d0 <== NOT EXECUTED
43730: 4e5e unlk %fp <== NOT EXECUTED
000433f8 <null_initialize>:
rtems_device_driver null_initialize(
rtems_device_major_number major,
rtems_device_minor_number minor __attribute__((unused)),
void *pargp __attribute__((unused))
)
{
433f8: 4e56 0000 linkw %fp,#0
433fc: 2f02 movel %d2,%sp@-
433fe: 242e 0008 movel %fp@(8),%d2
rtems_device_driver status;
if ( !initialized ) {
43402: 4a39 0005 f5d0 tstb 5f5d0 <initialized>
43408: 670a beqs 43414 <null_initialize+0x1c>
NULL_major = major;
}
return RTEMS_SUCCESSFUL;
}
4340a: 242e fffc movel %fp@(-4),%d2
4340e: 4280 clrl %d0
43410: 4e5e unlk %fp
43412: 4e75 rts
rtems_device_driver status;
if ( !initialized ) {
initialized = 1;
status = rtems_io_register_name(
43414: 42a7 clrl %sp@-
)
{
rtems_device_driver status;
if ( !initialized ) {
initialized = 1;
43416: 7001 moveq #1,%d0
status = rtems_io_register_name(
43418: 2f02 movel %d2,%sp@-
4341a: 4879 0005 d160 pea 5d160 <_rodata_start+0x780>
)
{
rtems_device_driver status;
if ( !initialized ) {
initialized = 1;
43420: 13c0 0005 f5d0 moveb %d0,5f5d0 <initialized>
status = rtems_io_register_name(
43426: 4eb9 0004 3ad8 jsr 43ad8 <rtems_io_register_name>
"/dev/null",
major,
(rtems_device_minor_number) 0
);
if (status != RTEMS_SUCCESSFUL)
4342c: 4fef 000c lea %sp@(12),%sp
43430: 4a80 tstl %d0
43432: 6610 bnes 43444 <null_initialize+0x4c> <== NEVER TAKEN
rtems_fatal_error_occurred(status);
NULL_major = major;
43434: 23c2 0005 fdd0 movel %d2,5fdd0 <NULL_major>
}
return RTEMS_SUCCESSFUL;
}
4343a: 242e fffc movel %fp@(-4),%d2
4343e: 4280 clrl %d0
43440: 4e5e unlk %fp
43442: 4e75 rts
major,
(rtems_device_minor_number) 0
);
if (status != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred(status);
43444: 2f00 movel %d0,%sp@- <== NOT EXECUTED
43446: 4eb9 0004 809c jsr 4809c <rtems_fatal_error_occurred> <== NOT EXECUTED
0004346a <null_write>:
rtems_device_driver null_write(
rtems_device_major_number major __attribute__((unused)),
rtems_device_minor_number minor __attribute__((unused)),
void *pargp
)
{
4346a: 4e56 0000 linkw %fp,#0
4346e: 206e 0010 moveal %fp@(16),%a0
rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *) pargp;
if ( rw_args )
43472: 4a88 tstl %a0
43474: 6706 beqs 4347c <null_write+0x12> <== ALWAYS TAKEN
rw_args->bytes_moved = rw_args->count;
43476: 2168 0010 0018 movel %a0@(16),%a0@(24) <== NOT EXECUTED
return NULL_SUCCESSFUL;
}
4347c: 4280 clrl %d0
4347e: 4e5e unlk %fp <== NOT EXECUTED
000439c8 <open>:
int open(
const char *pathname,
int flags,
...
)
{
439c8: 4e56 ffcc linkw %fp,#-52
439cc: 48d7 3c3c moveml %d2-%d5/%a2-%a5,%sp@
439d0: 242e 000c movel %fp@(12),%d2
/*
* Set the Evaluation flags
*/
eval_flags = 0;
status = flags + 1;
439d4: 2002 movel %d2,%d0
439d6: 5280 addql #1,%d0
int open(
const char *pathname,
int flags,
...
)
{
439d8: 262e 0008 movel %fp@(8),%d3
/*
* Set the Evaluation flags
*/
eval_flags = 0;
status = flags + 1;
if ( ( status & _FREAD ) == _FREAD )
439dc: 0800 0000 btst #0,%d0
439e0: 6700 00cc beqw 43aae <open+0xe6>
eval_flags |= RTEMS_LIBIO_PERMS_READ;
439e4: 7804 moveq #4,%d4
if ( ( status & _FWRITE ) == _FWRITE )
439e6: 0800 0001 btst #1,%d0
439ea: 6704 beqs 439f0 <open+0x28>
eval_flags |= RTEMS_LIBIO_PERMS_WRITE;
439ec: 7002 moveq #2,%d0
439ee: 8880 orl %d0,%d4
va_start(ap, flags);
mode = va_arg( ap, int );
439f0: 2a2e 0010 movel %fp@(16),%d5
* code does not require changes here since network file
* descriptors are obtained using socket(), not open().
*/
/* allocate a file control block */
iop = rtems_libio_allocate();
439f4: 4eb9 0004 b08a jsr 4b08a <rtems_libio_allocate>
439fa: 2440 moveal %d0,%a2
if ( iop == 0 ) {
439fc: 4a80 tstl %d0
439fe: 6700 00b4 beqw 43ab4 <open+0xec>
}
/*
* See if the file exists.
*/
status = rtems_filesystem_evaluate_path(
43a02: 2f03 movel %d3,%sp@-
43a04: 4bf9 0004 eec4 lea 4eec4 <strlen>,%a5
43a0a: 4e95 jsr %a5@
43a0c: 47ee ffec lea %fp@(-20),%a3
43a10: 7201 moveq #1,%d1
43a12: 49f9 0004 2c80 lea 42c80 <rtems_filesystem_evaluate_path>,%a4
43a18: 2e81 movel %d1,%sp@
43a1a: 2f0b movel %a3,%sp@-
43a1c: 2f04 movel %d4,%sp@-
43a1e: 2f00 movel %d0,%sp@-
43a20: 2f03 movel %d3,%sp@-
43a22: 4e94 jsr %a4@
pathname, strlen( pathname ), eval_flags, &loc, true );
if ( status == -1 ) {
43a24: 4fef 0014 lea %sp@(20),%sp
43a28: 72ff moveq #-1,%d1
43a2a: b280 cmpl %d0,%d1
43a2c: 6700 0162 beqw 43b90 <open+0x1c8>
if ( status != 0 ) { /* The file did not exist */
rc = EACCES;
goto done;
}
} else if ((flags & (O_EXCL|O_CREAT)) == (O_EXCL|O_CREAT)) {
43a30: 2002 movel %d2,%d0
43a32: 0280 0000 0a00 andil #2560,%d0
43a38: 0c80 0000 0a00 cmpil #2560,%d0
43a3e: 6700 0090 beqw 43ad0 <open+0x108>
/*
* Fill in the file control block based on the loc structure
* returned by successful path evaluation.
*/
iop->flags |= rtems_libio_fcntl_flags( flags );
43a42: 282a 0014 movel %a2@(20),%d4
43a46: 2f02 movel %d2,%sp@-
43a48: 4eb9 0004 affc jsr 4affc <rtems_libio_fcntl_flags>
iop->pathinfo = loc;
43a4e: 256e fff4 0020 movel %fp@(-12),%a2@(32)
43a54: 256e fff0 001c movel %fp@(-16),%a2@(28)
43a5a: 256e fff8 0024 movel %fp@(-8),%a2@(36)
43a60: 256e fffc 0028 movel %fp@(-4),%a2@(40)
43a66: 2553 0018 movel %a3@,%a2@(24)
rc = (*iop->pathinfo.handlers->open_h)( iop, pathname, flags, mode );
43a6a: 206a 0020 moveal %a2@(32),%a0
/*
* Fill in the file control block based on the loc structure
* returned by successful path evaluation.
*/
iop->flags |= rtems_libio_fcntl_flags( flags );
43a6e: 8084 orl %d4,%d0
43a70: 2540 0014 movel %d0,%a2@(20)
iop->pathinfo = loc;
rc = (*iop->pathinfo.handlers->open_h)( iop, pathname, flags, mode );
43a74: 2f05 movel %d5,%sp@-
43a76: 2f02 movel %d2,%sp@-
43a78: 2f03 movel %d3,%sp@-
43a7a: 2f0a movel %a2,%sp@-
43a7c: 2050 moveal %a0@,%a0
43a7e: 4e90 jsr %a0@
if ( rc ) {
43a80: 4fef 0014 lea %sp@(20),%sp
43a84: 4a80 tstl %d0
43a86: 6600 00f4 bnew 43b7c <open+0x1b4>
}
/*
* Optionally truncate the file.
*/
if ( (flags & O_TRUNC) == O_TRUNC ) {
43a8a: 0802 000a btst #10,%d2
43a8e: 6670 bnes 43b00 <open+0x138>
if ( loc_to_free )
rtems_filesystem_freenode( loc_to_free );
rtems_set_errno_and_return_minus_one( rc );
}
return iop - rtems_libio_iops;
43a90: 200a movel %a2,%d0
43a92: 90b9 0005 e2c8 subl 5e2c8 <rtems_libio_iops>,%d0
43a98: 223c b6db 6db7 movel #-1227133513,%d1
43a9e: e680 asrl #3,%d0
43aa0: 4c01 0800 mulsl %d1,%d0
}
43aa4: 4cee 3c3c ffcc moveml %fp@(-52),%d2-%d5/%a2-%a5
43aaa: 4e5e unlk %fp
43aac: 4e75 rts
int eval_flags;
/*
* Set the Evaluation flags
*/
eval_flags = 0;
43aae: 4284 clrl %d4
43ab0: 6000 ff34 braw 439e6 <open+0x1e>
*/
/* allocate a file control block */
iop = rtems_libio_allocate();
if ( iop == 0 ) {
rc = ENFILE;
43ab4: 7417 moveq #23,%d2
43ab6: 283c 0004 da6c movel #318060,%d4
if ( rc ) {
if ( iop )
rtems_libio_free( iop );
if ( loc_to_free )
rtems_filesystem_freenode( loc_to_free );
rtems_set_errno_and_return_minus_one( rc );
43abc: 2044 moveal %d4,%a0
43abe: 4e90 jsr %a0@
43ac0: 2040 moveal %d0,%a0
43ac2: 70ff moveq #-1,%d0
43ac4: 2082 movel %d2,%a0@
}
return iop - rtems_libio_iops;
}
43ac6: 4cee 3c3c ffcc moveml %fp@(-52),%d2-%d5/%a2-%a5
43acc: 4e5e unlk %fp
43ace: 4e75 rts
goto done;
}
} else if ((flags & (O_EXCL|O_CREAT)) == (O_EXCL|O_CREAT)) {
/* We were trying to create a file that already exists */
rc = EEXIST;
43ad0: 7411 moveq #17,%d2
43ad2: 283c 0004 da6c movel #318060,%d4
*/
done:
va_end(ap);
if ( rc ) {
if ( iop )
43ad8: 4a8a tstl %a2
43ada: 670a beqs 43ae6 <open+0x11e>
rtems_libio_free( iop );
43adc: 2f0a movel %a2,%sp@-
43ade: 4eb9 0004 b14e jsr 4b14e <rtems_libio_free>
43ae4: 588f addql #4,%sp
if ( loc_to_free )
43ae6: 4a8b tstl %a3
43ae8: 67d2 beqs 43abc <open+0xf4>
rtems_filesystem_freenode( loc_to_free );
43aea: 2f0b movel %a3,%sp@-
43aec: 4eb9 0004 2da4 jsr 42da4 <rtems_filesystem_freenode>
43af2: 588f addql #4,%sp
rtems_set_errno_and_return_minus_one( rc );
43af4: 2044 moveal %d4,%a0
43af6: 4e90 jsr %a0@
43af8: 2040 moveal %d0,%a0
43afa: 70ff moveq #-1,%d0
43afc: 2082 movel %d2,%a0@
43afe: 60c6 bras 43ac6 <open+0xfe>
/*
* Optionally truncate the file.
*/
if ( (flags & O_TRUNC) == O_TRUNC ) {
rc = ftruncate( iop - rtems_libio_iops, 0 );
43b00: 200a movel %a2,%d0
43b02: 90b9 0005 e2c8 subl 5e2c8 <rtems_libio_iops>,%d0
43b08: 223c b6db 6db7 movel #-1227133513,%d1
43b0e: e680 asrl #3,%d0
43b10: 4c00 1800 mulsl %d0,%d1
43b14: 42a7 clrl %sp@-
43b16: 42a7 clrl %sp@-
43b18: 2f01 movel %d1,%sp@-
43b1a: 4eb9 0004 af30 jsr 4af30 <ftruncate>
if ( rc ) {
43b20: 4fef 000c lea %sp@(12),%sp
/*
* Optionally truncate the file.
*/
if ( (flags & O_TRUNC) == O_TRUNC ) {
rc = ftruncate( iop - rtems_libio_iops, 0 );
43b24: 2400 movel %d0,%d2
if ( rc ) {
43b26: 6700 ff68 beqw 43a90 <open+0xc8>
if(errno) rc = errno;
43b2a: 283c 0004 da6c movel #318060,%d4
43b30: 2044 moveal %d4,%a0
43b32: 4e90 jsr %a0@
43b34: 2040 moveal %d0,%a0
43b36: 4a90 tstl %a0@
43b38: 6600 0086 bnew 43bc0 <open+0x1f8>
close( iop - rtems_libio_iops );
43b3c: 200a movel %a2,%d0 <== NOT EXECUTED
43b3e: 90b9 0005 e2c8 subl 5e2c8 <rtems_libio_iops>,%d0 <== NOT EXECUTED
43b44: 223c b6db 6db7 movel #-1227133513,%d1 <== NOT EXECUTED
43b4a: e680 asrl #3,%d0 <== NOT EXECUTED
43b4c: 4c00 1800 mulsl %d0,%d1 <== NOT EXECUTED
/* those are released by close(): */
iop = 0;
loc_to_free = NULL;
43b50: 97cb subal %a3,%a3 <== NOT EXECUTED
rc = ftruncate( iop - rtems_libio_iops, 0 );
if ( rc ) {
if(errno) rc = errno;
close( iop - rtems_libio_iops );
/* those are released by close(): */
iop = 0;
43b52: 95ca subal %a2,%a2 <== NOT EXECUTED
*/
if ( (flags & O_TRUNC) == O_TRUNC ) {
rc = ftruncate( iop - rtems_libio_iops, 0 );
if ( rc ) {
if(errno) rc = errno;
close( iop - rtems_libio_iops );
43b54: 2f01 movel %d1,%sp@- <== NOT EXECUTED
43b56: 4eb9 0004 aea8 jsr 4aea8 <close> <== NOT EXECUTED
43b5c: 588f addql #4,%sp <== NOT EXECUTED
* Single exit and clean up path.
*/
done:
va_end(ap);
if ( rc ) {
43b5e: 4a82 tstl %d2
43b60: 6600 ff76 bnew 43ad8 <open+0x110>
if ( loc_to_free )
rtems_filesystem_freenode( loc_to_free );
rtems_set_errno_and_return_minus_one( rc );
}
return iop - rtems_libio_iops;
43b64: 200a movel %a2,%d0 <== NOT EXECUTED
43b66: 90b9 0005 e2c8 subl 5e2c8 <rtems_libio_iops>,%d0 <== NOT EXECUTED
43b6c: 223c b6db 6db7 movel #-1227133513,%d1 <== NOT EXECUTED
43b72: e680 asrl #3,%d0 <== NOT EXECUTED
43b74: 4c01 0800 mulsl %d1,%d0 <== NOT EXECUTED
43b78: 6000 ff2a braw 43aa4 <open+0xdc> <== NOT EXECUTED
iop->flags |= rtems_libio_fcntl_flags( flags );
iop->pathinfo = loc;
rc = (*iop->pathinfo.handlers->open_h)( iop, pathname, flags, mode );
if ( rc ) {
rc = errno;
43b7c: 283c 0004 da6c movel #318060,%d4
43b82: 2044 moveal %d4,%a0
43b84: 4e90 jsr %a0@
43b86: 2040 moveal %d0,%a0
43b88: 2410 movel %a0@,%d2
* Single exit and clean up path.
*/
done:
va_end(ap);
if ( rc ) {
43b8a: 67d8 beqs 43b64 <open+0x19c> <== NEVER TAKEN
43b8c: 6000 ff4a braw 43ad8 <open+0x110>
*/
status = rtems_filesystem_evaluate_path(
pathname, strlen( pathname ), eval_flags, &loc, true );
if ( status == -1 ) {
if ( errno != ENOENT ) {
43b90: 283c 0004 da6c movel #318060,%d4
43b96: 2044 moveal %d4,%a0
43b98: 4e90 jsr %a0@
43b9a: 7202 moveq #2,%d1
43b9c: 2040 moveal %d0,%a0
43b9e: b290 cmpl %a0@,%d1
43ba0: 6710 beqs 43bb2 <open+0x1ea>
}
/* Create the node for the new regular file */
rc = mknod( pathname, S_IFREG | mode, 0LL );
if ( rc ) {
rc = errno;
43ba2: 2044 moveal %d4,%a0
int mode;
int rc;
rtems_libio_t *iop = 0;
int status;
rtems_filesystem_location_info_t loc;
rtems_filesystem_location_info_t *loc_to_free = NULL;
43ba4: 97cb subal %a3,%a3
}
/* Create the node for the new regular file */
rc = mknod( pathname, S_IFREG | mode, 0LL );
if ( rc ) {
rc = errno;
43ba6: 4e90 jsr %a0@
43ba8: 2040 moveal %d0,%a0
43baa: 2410 movel %a0@,%d2
* Single exit and clean up path.
*/
done:
va_end(ap);
if ( rc ) {
43bac: 67b6 beqs 43b64 <open+0x19c> <== NEVER TAKEN
43bae: 6000 ff28 braw 43ad8 <open+0x110>
rc = errno;
goto done;
}
/* If the file does not exist and we are not trying to create it--> error */
if ( !(flags & O_CREAT) ) {
43bb2: 0802 0009 btst #9,%d2
43bb6: 6636 bnes 43bee <open+0x226>
int mode;
int rc;
rtems_libio_t *iop = 0;
int status;
rtems_filesystem_location_info_t loc;
rtems_filesystem_location_info_t *loc_to_free = NULL;
43bb8: 97cb subal %a3,%a3
goto done;
}
/* If the file does not exist and we are not trying to create it--> error */
if ( !(flags & O_CREAT) ) {
rc = ENOENT;
43bba: 7402 moveq #2,%d2
43bbc: 6000 ff1a braw 43ad8 <open+0x110>
* Optionally truncate the file.
*/
if ( (flags & O_TRUNC) == O_TRUNC ) {
rc = ftruncate( iop - rtems_libio_iops, 0 );
if ( rc ) {
if(errno) rc = errno;
43bc0: 2044 moveal %d4,%a0
close( iop - rtems_libio_iops );
/* those are released by close(): */
iop = 0;
loc_to_free = NULL;
43bc2: 97cb subal %a3,%a3
* Optionally truncate the file.
*/
if ( (flags & O_TRUNC) == O_TRUNC ) {
rc = ftruncate( iop - rtems_libio_iops, 0 );
if ( rc ) {
if(errno) rc = errno;
43bc4: 4e90 jsr %a0@
close( iop - rtems_libio_iops );
43bc6: 223c b6db 6db7 movel #-1227133513,%d1
* Optionally truncate the file.
*/
if ( (flags & O_TRUNC) == O_TRUNC ) {
rc = ftruncate( iop - rtems_libio_iops, 0 );
if ( rc ) {
if(errno) rc = errno;
43bcc: 2040 moveal %d0,%a0
close( iop - rtems_libio_iops );
43bce: 200a movel %a2,%d0
43bd0: 90b9 0005 e2c8 subl 5e2c8 <rtems_libio_iops>,%d0
/* those are released by close(): */
iop = 0;
43bd6: 95ca subal %a2,%a2
*/
if ( (flags & O_TRUNC) == O_TRUNC ) {
rc = ftruncate( iop - rtems_libio_iops, 0 );
if ( rc ) {
if(errno) rc = errno;
close( iop - rtems_libio_iops );
43bd8: e680 asrl #3,%d0
43bda: 4c00 1800 mulsl %d0,%d1
* Optionally truncate the file.
*/
if ( (flags & O_TRUNC) == O_TRUNC ) {
rc = ftruncate( iop - rtems_libio_iops, 0 );
if ( rc ) {
if(errno) rc = errno;
43bde: 2410 movel %a0@,%d2
close( iop - rtems_libio_iops );
43be0: 2f01 movel %d1,%sp@-
43be2: 4eb9 0004 aea8 jsr 4aea8 <close>
43be8: 588f addql #4,%sp
43bea: 6000 ff72 braw 43b5e <open+0x196>
rc = ENOENT;
goto done;
}
/* Create the node for the new regular file */
rc = mknod( pathname, S_IFREG | mode, 0LL );
43bee: 42a7 clrl %sp@-
43bf0: 2005 movel %d5,%d0
43bf2: 42a7 clrl %sp@-
43bf4: 08c0 000f bset #15,%d0
43bf8: 2f00 movel %d0,%sp@-
43bfa: 2f03 movel %d3,%sp@-
43bfc: 4eb9 0004 31d8 jsr 431d8 <mknod>
if ( rc ) {
43c02: 4fef 0010 lea %sp@(16),%sp
43c06: 4a80 tstl %d0
43c08: 6698 bnes 43ba2 <open+0x1da> <== NEVER TAKEN
/*
* After we do the mknod(), we have to evaluate the path to get the
* "loc" structure needed to actually have the file itself open.
* So we created it, and then we need to have "look it up."
*/
status = rtems_filesystem_evaluate_path(
43c0a: 2f03 movel %d3,%sp@-
43c0c: 4e95 jsr %a5@
43c0e: 7201 moveq #1,%d1
43c10: 2e81 movel %d1,%sp@
43c12: 2f0b movel %a3,%sp@-
43c14: 42a7 clrl %sp@-
43c16: 2f00 movel %d0,%sp@-
43c18: 2f03 movel %d3,%sp@-
43c1a: 4e94 jsr %a4@
pathname, strlen( pathname ), 0x0, &loc, true );
if ( status != 0 ) { /* The file did not exist */
43c1c: 4fef 0014 lea %sp@(20),%sp
43c20: 4a80 tstl %d0
43c22: 6700 fe1e beqw 43a42 <open+0x7a>
int mode;
int rc;
rtems_libio_t *iop = 0;
int status;
rtems_filesystem_location_info_t loc;
rtems_filesystem_location_info_t *loc_to_free = NULL;
43c26: 97cb subal %a3,%a3 <== NOT EXECUTED
* So we created it, and then we need to have "look it up."
*/
status = rtems_filesystem_evaluate_path(
pathname, strlen( pathname ), 0x0, &loc, true );
if ( status != 0 ) { /* The file did not exist */
rc = EACCES;
43c28: 740d moveq #13,%d2 <== NOT EXECUTED
43c2a: 6000 feac braw 43ad8 <open+0x110> <== NOT EXECUTED
00043954 <open_dev_console>:
/*
* This is a replaceable stub which opens the console, if present.
*/
void open_dev_console(void)
{
43954: 4e56 0000 linkw %fp,#0
43958: 2f0a movel %a2,%sp@-
int stderr_fd;
/*
* Attempt to open /dev/console.
*/
if ((stdin_fd = open("/dev/console", O_RDONLY, 0)) == -1) {
4395a: 45f9 0004 39c8 lea 439c8 <open>,%a2
43960: 42a7 clrl %sp@-
43962: 42a7 clrl %sp@-
43964: 4879 0005 b962 pea 5b962 <CSWTCH.55+0x100>
4396a: 4e92 jsr %a2@
4396c: 4fef 000c lea %sp@(12),%sp
43970: 72ff moveq #-1,%d1
43972: b280 cmpl %d0,%d1
43974: 6730 beqs 439a6 <open_dev_console+0x52>
/*
* But if we find /dev/console once, we better find it twice more
* or something is REALLY wrong.
*/
if ((stdout_fd = open("/dev/console", O_WRONLY, 0)) == -1)
43976: 42a7 clrl %sp@-
43978: 4878 0001 pea 1 <ADD>
4397c: 4879 0005 b962 pea 5b962 <CSWTCH.55+0x100>
43982: 4e92 jsr %a2@
43984: 4fef 000c lea %sp@(12),%sp
43988: 72ff moveq #-1,%d1
4398a: b280 cmpl %d0,%d1
4398c: 672c beqs 439ba <open_dev_console+0x66>
rtems_fatal_error_occurred( 0x55544431 ); /* error STD1 */
if ((stderr_fd = open("/dev/console", O_WRONLY, 0)) == -1)
4398e: 42a7 clrl %sp@-
43990: 4878 0001 pea 1 <ADD>
43994: 4879 0005 b962 pea 5b962 <CSWTCH.55+0x100>
4399a: 4e92 jsr %a2@
4399c: 4fef 000c lea %sp@(12),%sp
439a0: 72ff moveq #-1,%d1
439a2: b280 cmpl %d0,%d1
439a4: 6708 beqs 439ae <open_dev_console+0x5a>
rtems_fatal_error_occurred( 0x55544432 ); /* error STD2 */
}
439a6: 246e fffc moveal %fp@(-4),%a2
439aa: 4e5e unlk %fp
439ac: 4e75 rts
*/
if ((stdout_fd = open("/dev/console", O_WRONLY, 0)) == -1)
rtems_fatal_error_occurred( 0x55544431 ); /* error STD1 */
if ((stderr_fd = open("/dev/console", O_WRONLY, 0)) == -1)
rtems_fatal_error_occurred( 0x55544432 ); /* error STD2 */
439ae: 2f3c 5554 4432 movel #1431585842,%sp@-
439b4: 4eb9 0004 6d6c jsr 46d6c <rtems_fatal_error_occurred>
/*
* But if we find /dev/console once, we better find it twice more
* or something is REALLY wrong.
*/
if ((stdout_fd = open("/dev/console", O_WRONLY, 0)) == -1)
rtems_fatal_error_occurred( 0x55544431 ); /* error STD1 */
439ba: 2f3c 5554 4431 movel #1431585841,%sp@-
439c0: 4eb9 0004 6d6c jsr 46d6c <rtems_fatal_error_occurred>
...
000449e6 <oproc>:
/*
* Handle output processing
*/
static void
oproc (unsigned char c, struct rtems_termios_tty *tty)
{
449e6: 4e56 fff0 linkw %fp,#-16
449ea: 202e 0008 movel %fp@(8),%d0
449ee: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
449f2: 246e 000c moveal %fp@(12),%a2
int i;
if (tty->termios.c_oflag & OPOST) {
449f6: 222a 0034 movel %a2@(52),%d1
/*
* Handle output processing
*/
static void
oproc (unsigned char c, struct rtems_termios_tty *tty)
{
449fa: 1d40 fffe moveb %d0,%fp@(-2)
int i;
if (tty->termios.c_oflag & OPOST) {
449fe: 0801 0000 btst #0,%d1
44a02: 6700 0092 beqw 44a96 <oproc+0xb0>
switch (c) {
44a06: 7409 moveq #9,%d2
44a08: 0280 0000 00ff andil #255,%d0
44a0e: b480 cmpl %d0,%d2
44a10: 6700 0118 beqw 44b2a <oproc+0x144>
44a14: 6450 bccs 44a66 <oproc+0x80> <== NEVER TAKEN
44a16: 740a moveq #10,%d2
44a18: b480 cmpl %d0,%d2
44a1a: 6700 0092 beqw 44aae <oproc+0xc8>
44a1e: 143c 000d moveb #13,%d2
44a22: b480 cmpl %d0,%d2
44a24: 6700 00c6 beqw 44aec <oproc+0x106>
if (tty->column > 0)
tty->column--;
break;
default:
if (tty->termios.c_oflag & OLCUC)
44a28: 0801 0001 btst #1,%d1
44a2c: 6600 0138 bnew 44b66 <oproc+0x180>
44a30: 2079 0005 cddc moveal 5cddc <__ctype_ptr__>,%a0
44a36: 47f9 0004 48e2 lea 448e2 <rtems_termios_puts>,%a3
c = toupper(c);
if (!iscntrl(c))
44a3c: 1030 0801 moveb %a0@(00000001,%d0:l),%d0
44a40: 49c0 extbl %d0
44a42: 0800 0005 btst #5,%d0
44a46: 6604 bnes 44a4c <oproc+0x66> <== NEVER TAKEN
tty->column++;
44a48: 52aa 0028 addql #1,%a2@(40)
break;
}
}
rtems_termios_puts (&c, 1, tty);
44a4c: 2f0a movel %a2,%sp@-
44a4e: 4878 0001 pea 1 <ADD>
44a52: 486e fffe pea %fp@(-2)
44a56: 4e93 jsr %a3@
44a58: 4fef 000c lea %sp@(12),%sp
}
44a5c: 4cee 0c04 fff0 moveml %fp@(-16),%d2/%a2-%a3
44a62: 4e5e unlk %fp
44a64: 4e75 rts
oproc (unsigned char c, struct rtems_termios_tty *tty)
{
int i;
if (tty->termios.c_oflag & OPOST) {
switch (c) {
44a66: 143c 0008 moveb #8,%d2 <== NOT EXECUTED
44a6a: b480 cmpl %d0,%d2 <== NOT EXECUTED
44a6c: 66ba bnes 44a28 <oproc+0x42> <== NOT EXECUTED
}
tty->column += i;
break;
case '\b':
if (tty->column > 0)
44a6e: 202a 0028 movel %a2@(40),%d0 <== NOT EXECUTED
44a72: 47f9 0004 48e2 lea 448e2 <rtems_termios_puts>,%a3 <== NOT EXECUTED
44a78: 6fd2 bles 44a4c <oproc+0x66> <== NOT EXECUTED
tty->column--;
44a7a: 5380 subql #1,%d0 <== NOT EXECUTED
44a7c: 2540 0028 movel %d0,%a2@(40) <== NOT EXECUTED
if (!iscntrl(c))
tty->column++;
break;
}
}
rtems_termios_puts (&c, 1, tty);
44a80: 2f0a movel %a2,%sp@- <== NOT EXECUTED
44a82: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
44a86: 486e fffe pea %fp@(-2) <== NOT EXECUTED
44a8a: 4e93 jsr %a3@ <== NOT EXECUTED
44a8c: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
44a90: 60ca bras 44a5c <oproc+0x76> <== NOT EXECUTED
c = '\n';
if (tty->termios.c_oflag & ONLRET)
tty->column = 0;
break;
}
tty->column = 0;
44a92: 42aa 0028 clrl %a2@(40) <== NOT EXECUTED
if (!iscntrl(c))
tty->column++;
break;
}
}
rtems_termios_puts (&c, 1, tty);
44a96: 2f0a movel %a2,%sp@- <== NOT EXECUTED
44a98: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
44a9c: 47f9 0004 48e2 lea 448e2 <rtems_termios_puts>,%a3 <== NOT EXECUTED
44aa2: 486e fffe pea %fp@(-2) <== NOT EXECUTED
44aa6: 4e93 jsr %a3@ <== NOT EXECUTED
44aa8: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
44aac: 60ae bras 44a5c <oproc+0x76> <== NOT EXECUTED
int i;
if (tty->termios.c_oflag & OPOST) {
switch (c) {
case '\n':
if (tty->termios.c_oflag & ONLRET)
44aae: 0801 0005 btst #5,%d1
44ab2: 6704 beqs 44ab8 <oproc+0xd2> <== ALWAYS TAKEN
tty->column = 0;
44ab4: 42aa 0028 clrl %a2@(40) <== NOT EXECUTED
44ab8: 47f9 0004 48e2 lea 448e2 <rtems_termios_puts>,%a3
if (tty->termios.c_oflag & ONLCR) {
44abe: 44c1 movew %d1,%ccr
44ac0: 668a bnes 44a4c <oproc+0x66> <== NEVER TAKEN
rtems_termios_puts ("\r", 1, tty);
44ac2: 2f0a movel %a2,%sp@-
44ac4: 4878 0001 pea 1 <ADD>
44ac8: 4879 0005 bf26 pea 5bf26 <rtems_filesystem_default_pathconf+0x32>
44ace: 4e93 jsr %a3@
tty->column = 0;
44ad0: 4fef 000c lea %sp@(12),%sp
44ad4: 42aa 0028 clrl %a2@(40)
if (!iscntrl(c))
tty->column++;
break;
}
}
rtems_termios_puts (&c, 1, tty);
44ad8: 2f0a movel %a2,%sp@-
44ada: 4878 0001 pea 1 <ADD>
44ade: 486e fffe pea %fp@(-2)
44ae2: 4e93 jsr %a3@
44ae4: 4fef 000c lea %sp@(12),%sp
44ae8: 6000 ff72 braw 44a5c <oproc+0x76>
tty->column = 0;
}
break;
case '\r':
if ((tty->termios.c_oflag & ONOCR) && (tty->column == 0))
44aec: 0801 0004 btst #4,%d1 <== NOT EXECUTED
44af0: 6708 beqs 44afa <oproc+0x114> <== NOT EXECUTED
44af2: 4aaa 0028 tstl %a2@(40) <== NOT EXECUTED
44af6: 6700 ff64 beqw 44a5c <oproc+0x76> <== NOT EXECUTED
return;
if (tty->termios.c_oflag & OCRNL) {
44afa: 44c1 movew %d1,%ccr <== NOT EXECUTED
44afc: 6a94 bpls 44a92 <oproc+0xac> <== NOT EXECUTED
44afe: 47f9 0004 48e2 lea 448e2 <rtems_termios_puts>,%a3 <== NOT EXECUTED
c = '\n';
44b04: 700a moveq #10,%d0 <== NOT EXECUTED
44b06: 1d40 fffe moveb %d0,%fp@(-2) <== NOT EXECUTED
if (tty->termios.c_oflag & ONLRET)
44b0a: 0801 0005 btst #5,%d1 <== NOT EXECUTED
44b0e: 6700 ff3c beqw 44a4c <oproc+0x66> <== NOT EXECUTED
tty->column = 0;
44b12: 42aa 0028 clrl %a2@(40) <== NOT EXECUTED
if (!iscntrl(c))
tty->column++;
break;
}
}
rtems_termios_puts (&c, 1, tty);
44b16: 2f0a movel %a2,%sp@- <== NOT EXECUTED
44b18: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
44b1c: 486e fffe pea %fp@(-2) <== NOT EXECUTED
44b20: 4e93 jsr %a3@ <== NOT EXECUTED
44b22: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
44b26: 6000 ff34 braw 44a5c <oproc+0x76> <== NOT EXECUTED
}
tty->column = 0;
break;
case '\t':
i = 8 - (tty->column & 7);
44b2a: 202a 0028 movel %a2@(40),%d0
44b2e: 7407 moveq #7,%d2
44b30: 307c 0008 moveaw #8,%a0
44b34: c480 andl %d0,%d2
if ((tty->termios.c_oflag & TABDLY) == XTABS) {
44b36: 0281 0000 1800 andil #6144,%d1
}
tty->column = 0;
break;
case '\t':
i = 8 - (tty->column & 7);
44b3c: 91c2 subal %d2,%a0
if ((tty->termios.c_oflag & TABDLY) == XTABS) {
44b3e: 0c81 0000 1800 cmpil #6144,%d1
44b44: 675a beqs 44ba0 <oproc+0x1ba> <== ALWAYS TAKEN
tty->column += i;
rtems_termios_puts ( " ", i, tty);
return;
}
tty->column += i;
44b46: d1c0 addal %d0,%a0 <== NOT EXECUTED
44b48: 47f9 0004 48e2 lea 448e2 <rtems_termios_puts>,%a3 <== NOT EXECUTED
44b4e: 2548 0028 movel %a0,%a2@(40) <== NOT EXECUTED
if (!iscntrl(c))
tty->column++;
break;
}
}
rtems_termios_puts (&c, 1, tty);
44b52: 2f0a movel %a2,%sp@- <== NOT EXECUTED
44b54: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
44b58: 486e fffe pea %fp@(-2) <== NOT EXECUTED
44b5c: 4e93 jsr %a3@ <== NOT EXECUTED
44b5e: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
44b62: 6000 fef8 braw 44a5c <oproc+0x76> <== NOT EXECUTED
tty->column--;
break;
default:
if (tty->termios.c_oflag & OLCUC)
c = toupper(c);
44b66: 2079 0005 cddc moveal 5cddc <__ctype_ptr__>,%a0 <== NOT EXECUTED
44b6c: 7403 moveq #3,%d2 <== NOT EXECUTED
44b6e: 1230 0801 moveb %a0@(00000001,%d0:l),%d1 <== NOT EXECUTED
44b72: 49c1 extbl %d1 <== NOT EXECUTED
44b74: c282 andl %d2,%d1 <== NOT EXECUTED
44b76: 143c 0002 moveb #2,%d2 <== NOT EXECUTED
44b7a: b481 cmpl %d1,%d2 <== NOT EXECUTED
44b7c: 670e beqs 44b8c <oproc+0x1a6> <== NOT EXECUTED
44b7e: 1d40 fffe moveb %d0,%fp@(-2) <== NOT EXECUTED
44b82: 0280 0000 00ff andil #255,%d0 <== NOT EXECUTED
44b88: 6000 feac braw 44a36 <oproc+0x50> <== NOT EXECUTED
44b8c: 0680 ffff ffe0 addil #-32,%d0 <== NOT EXECUTED
44b92: 1d40 fffe moveb %d0,%fp@(-2) <== NOT EXECUTED
44b96: 0280 0000 00ff andil #255,%d0 <== NOT EXECUTED
44b9c: 6000 fe98 braw 44a36 <oproc+0x50> <== NOT EXECUTED
case '\t':
i = 8 - (tty->column & 7);
if ((tty->termios.c_oflag & TABDLY) == XTABS) {
tty->column += i;
rtems_termios_puts ( " ", i, tty);
44ba0: 2f0a movel %a2,%sp@-
break;
case '\t':
i = 8 - (tty->column & 7);
if ((tty->termios.c_oflag & TABDLY) == XTABS) {
tty->column += i;
44ba2: d088 addl %a0,%d0
44ba4: 2540 0028 movel %d0,%a2@(40)
rtems_termios_puts ( " ", i, tty);
44ba8: 2f08 movel %a0,%sp@-
44baa: 4879 0005 bf28 pea 5bf28 <rtems_filesystem_default_pathconf+0x34>
44bb0: 4eb9 0004 48e2 jsr 448e2 <rtems_termios_puts>
return;
44bb6: 4fef 000c lea %sp@(12),%sp
tty->column++;
break;
}
}
rtems_termios_puts (&c, 1, tty);
}
44bba: 4cee 0c04 fff0 moveml %fp@(-16),%d2/%a2-%a3
44bc0: 4e5e unlk %fp <== NOT EXECUTED
0004c220 <pipe_create>:
* Called by pipe() to create an anonymous pipe.
*/
int pipe_create(
int filsdes[2]
)
{
4c220: 4e56 ffe4 linkw %fp,#-28
4c224: 48d7 1c00 moveml %a2-%a4,%sp@
rtems_libio_t *iop;
int err = 0;
if (rtems_mkdir("/tmp", S_IRWXU | S_IRWXG | S_IRWXO) != 0)
4c228: 4878 01ff pea 1ff <DBL_MANT_DIG+0x1ca>
4c22c: 4879 0005 dcac pea 5dcac <_CPU_m68k_BFFFO_table+0x100>
* Called by pipe() to create an anonymous pipe.
*/
int pipe_create(
int filsdes[2]
)
{
4c232: 266e 0008 moveal %fp@(8),%a3
rtems_libio_t *iop;
int err = 0;
if (rtems_mkdir("/tmp", S_IRWXU | S_IRWXG | S_IRWXO) != 0)
4c236: 4eb9 0004 db08 jsr 4db08 <rtems_mkdir>
4c23c: 508f addql #8,%sp
4c23e: 4a80 tstl %d0
4c240: 670c beqs 4c24e <pipe_create+0x2e> <== ALWAYS TAKEN
return -1;
4c242: 70ff moveq #-1,%d0 <== NOT EXECUTED
unlink(fifopath);
}
if(err != 0)
rtems_set_errno_and_return_minus_one(err);
return 0;
}
4c244: 4cee 1c00 ffe4 moveml %fp@(-28),%a2-%a4 <== NOT EXECUTED
4c24a: 4e5e unlk %fp <== NOT EXECUTED
4c24c: 4e75 rts <== NOT EXECUTED
if (rtems_mkdir("/tmp", S_IRWXU | S_IRWXG | S_IRWXO) != 0)
return -1;
/* /tmp/.fifoXXXX */
char fifopath[15];
memcpy(fifopath, "/tmp/.fifo", 10);
4c24e: 45ee fff1 lea %fp@(-15),%a2
sprintf(fifopath + 10, "%04x", rtems_pipe_no ++);
4c252: 3039 0005 f66c movew 5f66c <rtems_pipe_no>,%d0
if (rtems_mkdir("/tmp", S_IRWXU | S_IRWXG | S_IRWXO) != 0)
return -1;
/* /tmp/.fifoXXXX */
char fifopath[15];
memcpy(fifopath, "/tmp/.fifo", 10);
4c258: 24bc 2f74 6d70 movel #796159344,%a2@
sprintf(fifopath + 10, "%04x", rtems_pipe_no ++);
4c25e: 2200 movel %d0,%d1
4c260: 5281 addql #1,%d1
4c262: 3f00 movew %d0,%sp@-
if (rtems_mkdir("/tmp", S_IRWXU | S_IRWXG | S_IRWXO) != 0)
return -1;
/* /tmp/.fifoXXXX */
char fifopath[15];
memcpy(fifopath, "/tmp/.fifo", 10);
4c264: 203c 2f2e 6669 movel #791570025,%d0
sprintf(fifopath + 10, "%04x", rtems_pipe_no ++);
4c26a: 4267 clrw %sp@-
if (rtems_mkdir("/tmp", S_IRWXU | S_IRWXG | S_IRWXO) != 0)
return -1;
/* /tmp/.fifoXXXX */
char fifopath[15];
memcpy(fifopath, "/tmp/.fifo", 10);
4c26c: 307c 666f moveaw #26223,%a0
4c270: 2d40 fff5 movel %d0,%fp@(-11)
sprintf(fifopath + 10, "%04x", rtems_pipe_no ++);
4c274: 4879 0005 dcb1 pea 5dcb1 <_CPU_m68k_BFFFO_table+0x105>
4c27a: 486e fffb pea %fp@(-5)
if (rtems_mkdir("/tmp", S_IRWXU | S_IRWXG | S_IRWXO) != 0)
return -1;
/* /tmp/.fifoXXXX */
char fifopath[15];
memcpy(fifopath, "/tmp/.fifo", 10);
4c27e: 3d48 fff9 movew %a0,%fp@(-7)
sprintf(fifopath + 10, "%04x", rtems_pipe_no ++);
4c282: 33c1 0005 f66c movew %d1,5f66c <rtems_pipe_no>
4c288: 4eb9 0005 00ec jsr 500ec <sprintf>
/* Try creating FIFO file until find an available file name */
while (mkfifo(fifopath, S_IRUSR|S_IWUSR) != 0) {
4c28e: 4878 0180 pea 180 <DBL_MANT_DIG+0x14b>
4c292: 2f0a movel %a2,%sp@-
4c294: 4eb9 0004 d838 jsr 4d838 <mkfifo>
4c29a: 4fef 0014 lea %sp@(20),%sp
4c29e: 4a80 tstl %d0
4c2a0: 6600 009a bnew 4c33c <pipe_create+0x11c>
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);
4c2a4: 4878 4000 pea 4000 <D_MAX_EXP+0x3801>
4c2a8: 49f9 0004 509c lea 4509c <open>,%a4
4c2ae: 2f0a movel %a2,%sp@-
4c2b0: 4e94 jsr %a4@
if (filsdes[0] < 0) {
4c2b2: 508f addql #8,%sp
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);
4c2b4: 2680 movel %d0,%a3@
if (filsdes[0] < 0) {
4c2b6: 6d4e blts 4c306 <pipe_create+0xe6>
the file node will be deleted after it is closed by all. */
unlink(fifopath);
}
else {
/* Reset open file to blocking mode */
iop = rtems_libio_iop(filsdes[0]);
4c2b8: b0b9 0005 e6b4 cmpl 5e6b4 <rtems_libio_number_iops>,%d0
4c2be: 6442 bccs 4c302 <pipe_create+0xe2> <== NEVER TAKEN
4c2c0: 2200 movel %d0,%d1
4c2c2: ed88 lsll #6,%d0
4c2c4: e789 lsll #3,%d1
4c2c6: 2079 0005 fd60 moveal 5fd60 <rtems_libio_iops>,%a0
4c2cc: 9081 subl %d1,%d0
4c2ce: d1c0 addal %d0,%a0
iop->flags &= ~LIBIO_FLAGS_NO_DELAY;
4c2d0: 70fe moveq #-2,%d0
4c2d2: c1a8 0014 andl %d0,%a0@(20)
filsdes[1] = open(fifopath, O_WRONLY);
4c2d6: 4878 0001 pea 1 <ADD>
4c2da: 2f0a movel %a2,%sp@-
4c2dc: 4e94 jsr %a4@
if (filsdes[1] < 0) {
4c2de: 508f addql #8,%sp
else {
/* Reset open file to blocking mode */
iop = rtems_libio_iop(filsdes[0]);
iop->flags &= ~LIBIO_FLAGS_NO_DELAY;
filsdes[1] = open(fifopath, O_WRONLY);
4c2e0: 2740 0004 movel %d0,%a3@(4)
if (filsdes[1] < 0) {
4c2e4: 6d36 blts 4c31c <pipe_create+0xfc>
err = errno;
close(filsdes[0]);
}
unlink(fifopath);
4c2e6: 2f0a movel %a2,%sp@-
int pipe_create(
int filsdes[2]
)
{
rtems_libio_t *iop;
int err = 0;
4c2e8: 99cc subal %a4,%a4
if (filsdes[1] < 0) {
err = errno;
close(filsdes[0]);
}
unlink(fifopath);
4c2ea: 4eb9 0004 72c4 jsr 472c4 <unlink>
4c2f0: 588f addql #4,%sp
}
if(err != 0)
4c2f2: 4a8c tstl %a4
4c2f4: 6658 bnes 4c34e <pipe_create+0x12e>
rtems_set_errno_and_return_minus_one(err);
return 0;
4c2f6: 4280 clrl %d0
}
4c2f8: 4cee 1c00 ffe4 moveml %fp@(-28),%a2-%a4
4c2fe: 4e5e unlk %fp
4c300: 4e75 rts
the file node will be deleted after it is closed by all. */
unlink(fifopath);
}
else {
/* Reset open file to blocking mode */
iop = rtems_libio_iop(filsdes[0]);
4c302: 91c8 subal %a0,%a0 <== NOT EXECUTED
4c304: 60ca bras 4c2d0 <pipe_create+0xb0> <== NOT EXECUTED
}
/* Non-blocking open to avoid waiting for writers */
filsdes[0] = open(fifopath, O_RDONLY | O_NONBLOCK);
if (filsdes[0] < 0) {
err = errno;
4c306: 4eb9 0004 f3c8 jsr 4f3c8 <__errno>
4c30c: 2040 moveal %d0,%a0
4c30e: 2850 moveal %a0@,%a4
/* 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);
4c310: 2f0a movel %a2,%sp@-
4c312: 4eb9 0004 72c4 jsr 472c4 <unlink>
4c318: 588f addql #4,%sp
4c31a: 60d6 bras 4c2f2 <pipe_create+0xd2>
iop->flags &= ~LIBIO_FLAGS_NO_DELAY;
filsdes[1] = open(fifopath, O_WRONLY);
if (filsdes[1] < 0) {
err = errno;
4c31c: 4eb9 0004 f3c8 jsr 4f3c8 <__errno>
4c322: 2040 moveal %d0,%a0
4c324: 2850 moveal %a0@,%a4
close(filsdes[0]);
4c326: 2f13 movel %a3@,%sp@-
4c328: 4eb9 0004 3ce8 jsr 43ce8 <close>
4c32e: 588f addql #4,%sp
}
unlink(fifopath);
4c330: 2f0a movel %a2,%sp@-
4c332: 4eb9 0004 72c4 jsr 472c4 <unlink>
4c338: 588f addql #4,%sp
4c33a: 60b6 bras 4c2f2 <pipe_create+0xd2>
memcpy(fifopath, "/tmp/.fifo", 10);
sprintf(fifopath + 10, "%04x", rtems_pipe_no ++);
/* Try creating FIFO file until find an available file name */
while (mkfifo(fifopath, S_IRUSR|S_IWUSR) != 0) {
if (errno != EEXIST){
4c33c: 4eb9 0004 f3c8 jsr 4f3c8 <__errno>
return -1;
4c342: 70ff moveq #-1,%d0
unlink(fifopath);
}
if(err != 0)
rtems_set_errno_and_return_minus_one(err);
return 0;
}
4c344: 4cee 1c00 ffe4 moveml %fp@(-28),%a2-%a4
4c34a: 4e5e unlk %fp
4c34c: 4e75 rts
close(filsdes[0]);
}
unlink(fifopath);
}
if(err != 0)
rtems_set_errno_and_return_minus_one(err);
4c34e: 4eb9 0004 f3c8 jsr 4f3c8 <__errno>
4c354: 2040 moveal %d0,%a0
4c356: 70ff moveq #-1,%d0
4c358: 208c movel %a4,%a0@
return 0;
}
4c35a: 4cee 1c00 ffe4 moveml %fp@(-28),%a2-%a4
4c360: 4e5e unlk %fp <== NOT EXECUTED
0004cff0 <pipe_ioctl>:
pipe_control_t *pipe,
uint32_t cmd,
void *buffer,
rtems_libio_t *iop
)
{
4cff0: 4e56 0000 linkw %fp,#0
if (cmd == FIONREAD) {
4cff4: 203c 4004 667f movel #1074030207,%d0
4cffa: b0ae 000c cmpl %fp@(12),%d0
4cffe: 6706 beqs 4d006 <pipe_ioctl+0x16>
*(unsigned int *)buffer = pipe->Length;
PIPE_UNLOCK(pipe);
return 0;
}
return -EINVAL;
4d000: 70ea moveq #-22,%d0
}
4d002: 4e5e unlk %fp
4d004: 4e75 rts
void *buffer,
rtems_libio_t *iop
)
{
if (cmd == FIONREAD) {
if (buffer == NULL)
4d006: 4aae 0010 tstl %fp@(16)
4d00a: 6606 bnes 4d012 <pipe_ioctl+0x22>
return -EFAULT;
4d00c: 70f2 moveq #-14,%d0
PIPE_UNLOCK(pipe);
return 0;
}
return -EINVAL;
}
4d00e: 4e5e unlk %fp
4d010: 4e75 rts
{
if (cmd == FIONREAD) {
if (buffer == NULL)
return -EFAULT;
if (! PIPE_LOCK(pipe))
4d012: 42a7 clrl %sp@-
4d014: 206e 0008 moveal %fp@(8),%a0
4d018: 42a7 clrl %sp@-
4d01a: 2f28 0028 movel %a0@(40),%sp@-
4d01e: 4eb9 0004 7f20 jsr 47f20 <rtems_semaphore_obtain>
4d024: 4fef 000c lea %sp@(12),%sp
4d028: 4a80 tstl %d0
4d02a: 6706 beqs 4d032 <pipe_ioctl+0x42> <== ALWAYS TAKEN
return -EINTR;
4d02c: 70fc moveq #-4,%d0 <== NOT EXECUTED
PIPE_UNLOCK(pipe);
return 0;
}
return -EINVAL;
}
4d02e: 4e5e unlk %fp <== NOT EXECUTED
4d030: 4e75 rts <== NOT EXECUTED
if (! PIPE_LOCK(pipe))
return -EINTR;
/* Return length of pipe */
*(unsigned int *)buffer = pipe->Length;
4d032: 206e 0008 moveal %fp@(8),%a0
4d036: 226e 0010 moveal %fp@(16),%a1
4d03a: 22a8 000c movel %a0@(12),%a1@
PIPE_UNLOCK(pipe);
4d03e: 2f28 0028 movel %a0@(40),%sp@-
4d042: 4eb9 0004 8060 jsr 48060 <rtems_semaphore_release>
return 0;
4d048: 588f addql #4,%sp
4d04a: 4280 clrl %d0
}
return -EINVAL;
}
4d04c: 4e5e unlk %fp <== NOT EXECUTED
0004c664 <pipe_lock>:
free(pipe->Buffer);
free(pipe);
}
static rtems_status_code pipe_lock(void)
{
4c664: 4e56 0000 linkw %fp,#0
rtems_status_code sc = RTEMS_SUCCESSFUL;
if (pipe_semaphore == RTEMS_ID_NONE) {
4c668: 2039 0005 f670 movel 5f670 <pipe_semaphore>,%d0
free(pipe->Buffer);
free(pipe);
}
static rtems_status_code pipe_lock(void)
{
4c66e: 2f0a movel %a2,%sp@-
4c670: 45f9 0004 7f20 lea 47f20 <rtems_semaphore_obtain>,%a2
4c676: 2f02 movel %d2,%sp@-
rtems_status_code sc = RTEMS_SUCCESSFUL;
if (pipe_semaphore == RTEMS_ID_NONE) {
4c678: 4a80 tstl %d0
4c67a: 671e beqs 4c69a <pipe_lock+0x36>
rtems_libio_unlock();
}
if (sc == RTEMS_SUCCESSFUL) {
sc = rtems_semaphore_obtain(pipe_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
4c67c: 42a7 clrl %sp@-
4c67e: 42a7 clrl %sp@-
4c680: 2f00 movel %d0,%sp@-
4c682: 4e92 jsr %a2@
}
if (sc == RTEMS_SUCCESSFUL) {
4c684: 4fef 000c lea %sp@(12),%sp
4c688: 4a80 tstl %d0
4c68a: 666e bnes 4c6fa <pipe_lock+0x96> <== NEVER TAKEN
return 0;
} else {
return -ENOMEM;
}
}
4c68c: 242e fff8 movel %fp@(-8),%d2
if (sc == RTEMS_SUCCESSFUL) {
sc = rtems_semaphore_obtain(pipe_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
}
if (sc == RTEMS_SUCCESSFUL) {
return 0;
4c690: 4280 clrl %d0
} else {
return -ENOMEM;
}
}
4c692: 246e fffc moveal %fp@(-4),%a2
4c696: 4e5e unlk %fp
4c698: 4e75 rts
rtems_status_code rtems_libio_set_private_env(void);
rtems_status_code rtems_libio_share_private_env(rtems_id task_id) ;
static inline void rtems_libio_lock( void )
{
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
4c69a: 42a7 clrl %sp@-
4c69c: 42a7 clrl %sp@-
4c69e: 2f39 0005 fd68 movel 5fd68 <rtems_libio_semaphore>,%sp@-
4c6a4: 4e92 jsr %a2@
rtems_status_code sc = RTEMS_SUCCESSFUL;
if (pipe_semaphore == RTEMS_ID_NONE) {
rtems_libio_lock();
if (pipe_semaphore == RTEMS_ID_NONE) {
4c6a6: 4fef 000c lea %sp@(12),%sp
4c6aa: 4ab9 0005 f670 tstl 5f670 <pipe_semaphore>
4c6b0: 6716 beqs 4c6c8 <pipe_lock+0x64> <== ALWAYS TAKEN
}
static inline void rtems_libio_unlock( void )
{
rtems_semaphore_release( rtems_libio_semaphore );
4c6b2: 2f39 0005 fd68 movel 5fd68 <rtems_libio_semaphore>,%sp@- <== NOT EXECUTED
4c6b8: 4eb9 0004 8060 jsr 48060 <rtems_semaphore_release> <== NOT EXECUTED
4c6be: 2039 0005 f670 movel 5f670 <pipe_semaphore>,%d0 <== NOT EXECUTED
4c6c4: 588f addql #4,%sp <== NOT EXECUTED
4c6c6: 60b4 bras 4c67c <pipe_lock+0x18> <== NOT EXECUTED
sc = rtems_semaphore_create(
4c6c8: 4879 0005 f670 pea 5f670 <pipe_semaphore>
4c6ce: 42a7 clrl %sp@-
4c6d0: 4878 0054 pea 54 <DBL_MANT_DIG+0x1f>
4c6d4: 4878 0001 pea 1 <ADD>
4c6d8: 2f3c 5049 5045 movel #1346981957,%sp@-
4c6de: 4eb9 0004 7c84 jsr 47c84 <rtems_semaphore_create>
4c6e4: 2f39 0005 fd68 movel 5fd68 <rtems_libio_semaphore>,%sp@-
4c6ea: 2400 movel %d0,%d2
4c6ec: 4eb9 0004 8060 jsr 48060 <rtems_semaphore_release>
}
rtems_libio_unlock();
}
if (sc == RTEMS_SUCCESSFUL) {
4c6f2: 4fef 0018 lea %sp@(24),%sp
4c6f6: 4a82 tstl %d2
4c6f8: 670e beqs 4c708 <pipe_lock+0xa4>
if (sc == RTEMS_SUCCESSFUL) {
return 0;
} else {
return -ENOMEM;
}
}
4c6fa: 242e fff8 movel %fp@(-8),%d2
}
if (sc == RTEMS_SUCCESSFUL) {
return 0;
} else {
return -ENOMEM;
4c6fe: 70f4 moveq #-12,%d0
}
}
4c700: 246e fffc moveal %fp@(-4),%a2
4c704: 4e5e unlk %fp
4c706: 4e75 rts
}
rtems_libio_unlock();
}
if (sc == RTEMS_SUCCESSFUL) {
4c708: 2039 0005 f670 movel 5f670 <pipe_semaphore>,%d0
4c70e: 6000 ff6c braw 4c67c <pipe_lock+0x18>
0004cc0e <pipe_read>:
pipe_control_t *pipe,
void *buffer,
size_t count,
rtems_libio_t *iop
)
{
4cc0e: 4e56 ffc8 linkw %fp,#-56
4cc12: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
int chunk, chunk1, read = 0, ret = 0;
if (! PIPE_LOCK(pipe))
4cc16: 42a7 clrl %sp@-
pipe_control_t *pipe,
void *buffer,
size_t count,
rtems_libio_t *iop
)
{
4cc18: 246e 0008 moveal %fp@(8),%a2
int chunk, chunk1, read = 0, ret = 0;
if (! PIPE_LOCK(pipe))
4cc1c: 47f9 0004 7f20 lea 47f20 <rtems_semaphore_obtain>,%a3
4cc22: 42a7 clrl %sp@-
4cc24: 2f2a 0028 movel %a2@(40),%sp@-
pipe_control_t *pipe,
void *buffer,
size_t count,
rtems_libio_t *iop
)
{
4cc28: 282e 0010 movel %fp@(16),%d4
4cc2c: 2a6e 0014 moveal %fp@(20),%a5
int chunk, chunk1, read = 0, ret = 0;
if (! PIPE_LOCK(pipe))
4cc30: 4e93 jsr %a3@
4cc32: 4fef 000c lea %sp@(12),%sp
4cc36: 4a80 tstl %d0
4cc38: 6600 00ac bnew 4cce6 <pipe_read+0xd8>
return -EINTR;
while (read < count) {
4cc3c: 4a84 tstl %d4
4cc3e: 6700 01ac beqw 4cdec <pipe_read+0x1de>
4cc42: 4285 clrl %d5
4cc44: 4283 clrl %d3
4cc46: 49f9 0004 8060 lea 48060 <rtems_semaphore_release>,%a4
}
/* Wait until pipe is no more empty or no writer exists */
pipe->waitingReaders ++;
PIPE_UNLOCK(pipe);
if (! PIPE_READWAIT(pipe))
4cc4c: 243c 0004 df94 movel #319380,%d2
/* For buffering optimization */
if (PIPE_EMPTY(pipe))
pipe->Start = 0;
if (pipe->waitingWriters > 0)
PIPE_WAKEUPWRITERS(pipe);
4cc52: 2e3c 0004 df1c movel #319260,%d7
if (chunk > chunk1) {
memcpy(buffer + read, pipe->Buffer + pipe->Start, chunk1);
memcpy(buffer + read + chunk1, pipe->Buffer, chunk - chunk1);
}
else
memcpy(buffer + read, pipe->Buffer + pipe->Start, chunk);
4cc58: 2c3c 0004 fc74 movel #326772,%d6
if (! PIPE_LOCK(pipe))
return -EINTR;
while (read < count) {
while (PIPE_EMPTY(pipe)) {
4cc5e: 222a 000c movel %a2@(12),%d1
4cc62: 6600 0090 bnew 4ccf4 <pipe_read+0xe6>
/* Not an error */
if (pipe->Writers == 0)
4cc66: 4aaa 0014 tstl %a2@(20)
4cc6a: 6700 010a beqw 4cd76 <pipe_read+0x168>
goto out_locked;
if (LIBIO_NODELAY(iop)) {
4cc6e: 7001 moveq #1,%d0
4cc70: c0ad 0014 andl %a5@(20),%d0
4cc74: 6600 0110 bnew 4cd86 <pipe_read+0x178>
goto out_locked;
}
/* Wait until pipe is no more empty or no writer exists */
pipe->waitingReaders ++;
PIPE_UNLOCK(pipe);
4cc78: 2f2a 0028 movel %a2@(40),%sp@-
ret = -EAGAIN;
goto out_locked;
}
/* Wait until pipe is no more empty or no writer exists */
pipe->waitingReaders ++;
4cc7c: 52aa 0018 addql #1,%a2@(24)
PIPE_UNLOCK(pipe);
4cc80: 4e94 jsr %a4@
if (! PIPE_READWAIT(pipe))
4cc82: 2042 moveal %d2,%a0
4cc84: 42a7 clrl %sp@-
4cc86: 2f2a 002c movel %a2@(44),%sp@-
4cc8a: 4e90 jsr %a0@
4cc8c: 4fef 000c lea %sp@(12),%sp
4cc90: 4a80 tstl %d0
4cc92: 663a bnes 4ccce <pipe_read+0xc0> <== NEVER TAKEN
4cc94: 42ae fff8 clrl %fp@(-8)
ret = -EINTR;
if (! PIPE_LOCK(pipe)) {
4cc98: 42a7 clrl %sp@-
4cc9a: 42a7 clrl %sp@-
4cc9c: 2f2a 0028 movel %a2@(40),%sp@-
4cca0: 4e93 jsr %a3@
4cca2: 4fef 000c lea %sp@(12),%sp
4cca6: 4a80 tstl %d0
4cca8: 6600 00ee bnew 4cd98 <pipe_read+0x18a>
/* WARN waitingReaders not restored! */
ret = -EINTR;
goto out_nolock;
}
pipe->waitingReaders --;
4ccac: 53aa 0018 subql #1,%a2@(24)
if (ret != 0)
4ccb0: 4aae fff8 tstl %fp@(-8)
4ccb4: 67a8 beqs 4cc5e <pipe_read+0x50> <== ALWAYS TAKEN
PIPE_WAKEUPWRITERS(pipe);
read += chunk;
}
out_locked:
PIPE_UNLOCK(pipe);
4ccb6: 2f2a 0028 movel %a2@(40),%sp@- <== NOT EXECUTED
4ccba: 4e94 jsr %a4@ <== NOT EXECUTED
4ccbc: 588f addql #4,%sp <== NOT EXECUTED
out_nolock:
if (read > 0)
4ccbe: 4a83 tstl %d3
4ccc0: 6f14 bles 4ccd6 <pipe_read+0xc8>
return read;
return ret;
}
4ccc2: 2003 movel %d3,%d0
4ccc4: 4cee 3cfc ffc8 moveml %fp@(-56),%d2-%d7/%a2-%a5
4ccca: 4e5e unlk %fp
4cccc: 4e75 rts
/* Wait until pipe is no more empty or no writer exists */
pipe->waitingReaders ++;
PIPE_UNLOCK(pipe);
if (! PIPE_READWAIT(pipe))
ret = -EINTR;
4ccce: 70fc moveq #-4,%d0 <== NOT EXECUTED
4ccd0: 2d40 fff8 movel %d0,%fp@(-8) <== NOT EXECUTED
4ccd4: 60c2 bras 4cc98 <pipe_read+0x8a> <== NOT EXECUTED
PIPE_UNLOCK(pipe);
out_nolock:
if (read > 0)
return read;
return ret;
4ccd6: 262e fff8 movel %fp@(-8),%d3
}
4ccda: 2003 movel %d3,%d0
4ccdc: 4cee 3cfc ffc8 moveml %fp@(-56),%d2-%d7/%a2-%a5
4cce2: 4e5e unlk %fp
4cce4: 4e75 rts
)
{
int chunk, chunk1, read = 0, ret = 0;
if (! PIPE_LOCK(pipe))
return -EINTR;
4cce6: 76fc moveq #-4,%d3 <== NOT EXECUTED
out_nolock:
if (read > 0)
return read;
return ret;
}
4cce8: 2003 movel %d3,%d0 <== NOT EXECUTED
4ccea: 4cee 3cfc ffc8 moveml %fp@(-56),%d2-%d7/%a2-%a5 <== NOT EXECUTED
4ccf0: 4e5e unlk %fp <== NOT EXECUTED
4ccf2: 4e75 rts <== NOT EXECUTED
if (ret != 0)
goto out_locked;
}
/* Read chunk bytes */
chunk = MIN(count - read, pipe->Length);
4ccf4: 2004 movel %d4,%d0
4ccf6: 9085 subl %d5,%d0
4ccf8: b081 cmpl %d1,%d0
4ccfa: 6402 bccs 4ccfe <pipe_read+0xf0>
4ccfc: 2200 movel %d0,%d1
chunk1 = pipe->Size - pipe->Start;
4ccfe: 202a 0008 movel %a2@(8),%d0
4cd02: 206a 0004 moveal %a2@(4),%a0
4cd06: 91c0 subal %d0,%a0
if (chunk > chunk1) {
4cd08: b1c1 cmpal %d1,%a0
4cd0a: 6d00 009c bltw 4cda8 <pipe_read+0x19a>
memcpy(buffer + read, pipe->Buffer + pipe->Start, chunk1);
memcpy(buffer + read + chunk1, pipe->Buffer, chunk - chunk1);
}
else
memcpy(buffer + read, pipe->Buffer + pipe->Start, chunk);
4cd0e: 2f01 movel %d1,%sp@-
4cd10: d092 addl %a2@,%d0
4cd12: 2246 moveal %d6,%a1
4cd14: 206e 000c moveal %fp@(12),%a0
4cd18: 2f00 movel %d0,%sp@-
4cd1a: 4870 5800 pea %a0@(00000000,%d5:l)
4cd1e: 2d41 fff4 movel %d1,%fp@(-12)
4cd22: 4e91 jsr %a1@
4cd24: 222e fff4 movel %fp@(-12),%d1
4cd28: 4fef 000c lea %sp@(12),%sp
pipe->Start += chunk;
4cd2c: 2041 moveal %d1,%a0
4cd2e: d1ea 0008 addal %a2@(8),%a0
pipe->Start %= pipe->Size;
4cd32: 2008 movel %a0,%d0
pipe->Length -= chunk;
4cd34: 226a 000c moveal %a2@(12),%a1
4cd38: 93c1 subal %d1,%a1
}
else
memcpy(buffer + read, pipe->Buffer + pipe->Start, chunk);
pipe->Start += chunk;
pipe->Start %= pipe->Size;
4cd3a: 4c6a 0005 0004 remul %a2@(4),%d5,%d0
pipe->Length -= chunk;
4cd40: 2549 000c movel %a1,%a2@(12)
}
else
memcpy(buffer + read, pipe->Buffer + pipe->Start, chunk);
pipe->Start += chunk;
pipe->Start %= pipe->Size;
4cd44: 2545 0008 movel %d5,%a2@(8)
pipe->Length -= chunk;
/* For buffering optimization */
if (PIPE_EMPTY(pipe))
4cd48: 4a89 tstl %a1
4cd4a: 6604 bnes 4cd50 <pipe_read+0x142>
pipe->Start = 0;
4cd4c: 42aa 0008 clrl %a2@(8)
if (pipe->waitingWriters > 0)
4cd50: 4aaa 001c tstl %a2@(28)
4cd54: 6716 beqs 4cd6c <pipe_read+0x15e>
PIPE_WAKEUPWRITERS(pipe);
4cd56: 486e fffc pea %fp@(-4)
4cd5a: 2047 moveal %d7,%a0
4cd5c: 2f2a 0030 movel %a2@(48),%sp@-
4cd60: 2d41 fff4 movel %d1,%fp@(-12)
4cd64: 4e90 jsr %a0@
4cd66: 222e fff4 movel %fp@(-12),%d1
4cd6a: 508f addql #8,%sp
read += chunk;
4cd6c: d681 addl %d1,%d3
int chunk, chunk1, read = 0, ret = 0;
if (! PIPE_LOCK(pipe))
return -EINTR;
while (read < count) {
4cd6e: 2a03 movel %d3,%d5
4cd70: b883 cmpl %d3,%d4
4cd72: 6200 feea bhiw 4cc5e <pipe_read+0x50>
PIPE_WAKEUPWRITERS(pipe);
read += chunk;
}
out_locked:
PIPE_UNLOCK(pipe);
4cd76: 2f2a 0028 movel %a2@(40),%sp@-
return -EINTR;
while (read < count) {
while (PIPE_EMPTY(pipe)) {
/* Not an error */
if (pipe->Writers == 0)
4cd7a: 42ae fff8 clrl %fp@(-8)
PIPE_WAKEUPWRITERS(pipe);
read += chunk;
}
out_locked:
PIPE_UNLOCK(pipe);
4cd7e: 4e94 jsr %a4@
4cd80: 588f addql #4,%sp
4cd82: 6000 ff3a braw 4ccbe <pipe_read+0xb0>
/* Not an error */
if (pipe->Writers == 0)
goto out_locked;
if (LIBIO_NODELAY(iop)) {
ret = -EAGAIN;
4cd86: 70f5 moveq #-11,%d0
PIPE_WAKEUPWRITERS(pipe);
read += chunk;
}
out_locked:
PIPE_UNLOCK(pipe);
4cd88: 2f2a 0028 movel %a2@(40),%sp@-
/* Not an error */
if (pipe->Writers == 0)
goto out_locked;
if (LIBIO_NODELAY(iop)) {
ret = -EAGAIN;
4cd8c: 2d40 fff8 movel %d0,%fp@(-8)
PIPE_WAKEUPWRITERS(pipe);
read += chunk;
}
out_locked:
PIPE_UNLOCK(pipe);
4cd90: 4e94 jsr %a4@
4cd92: 588f addql #4,%sp
4cd94: 6000 ff28 braw 4ccbe <pipe_read+0xb0>
PIPE_UNLOCK(pipe);
if (! PIPE_READWAIT(pipe))
ret = -EINTR;
if (! PIPE_LOCK(pipe)) {
/* WARN waitingReaders not restored! */
ret = -EINTR;
4cd98: 7afc moveq #-4,%d5 <== NOT EXECUTED
4cd9a: 2d45 fff8 movel %d5,%fp@(-8) <== NOT EXECUTED
out_locked:
PIPE_UNLOCK(pipe);
out_nolock:
if (read > 0)
4cd9e: 4a83 tstl %d3 <== NOT EXECUTED
4cda0: 6e00 ff20 bgtw 4ccc2 <pipe_read+0xb4> <== NOT EXECUTED
4cda4: 6000 ff30 braw 4ccd6 <pipe_read+0xc8> <== NOT EXECUTED
/* Read chunk bytes */
chunk = MIN(count - read, pipe->Length);
chunk1 = pipe->Size - pipe->Start;
if (chunk > chunk1) {
memcpy(buffer + read, pipe->Buffer + pipe->Start, chunk1);
4cda8: 2f08 movel %a0,%sp@-
4cdaa: d092 addl %a2@,%d0
4cdac: 226e 000c moveal %fp@(12),%a1
4cdb0: 2f00 movel %d0,%sp@-
4cdb2: 4871 5800 pea %a1@(00000000,%d5:l)
4cdb6: 2246 moveal %d6,%a1
4cdb8: 2d41 fff4 movel %d1,%fp@(-12)
4cdbc: 2d48 fff0 movel %a0,%fp@(-16)
4cdc0: 4e91 jsr %a1@
memcpy(buffer + read + chunk1, pipe->Buffer, chunk - chunk1);
4cdc2: 222e fff4 movel %fp@(-12),%d1
4cdc6: 2001 movel %d1,%d0
4cdc8: 2246 moveal %d6,%a1
4cdca: 206e fff0 moveal %fp@(-16),%a0
4cdce: 9088 subl %a0,%d0
4cdd0: da88 addl %a0,%d5
4cdd2: 2f00 movel %d0,%sp@-
4cdd4: 2f12 movel %a2@,%sp@-
4cdd6: 206e 000c moveal %fp@(12),%a0
4cdda: 4870 5800 pea %a0@(00000000,%d5:l)
4cdde: 4e91 jsr %a1@
4cde0: 222e fff4 movel %fp@(-12),%d1
4cde4: 4fef 0018 lea %sp@(24),%sp
4cde8: 6000 ff42 braw 4cd2c <pipe_read+0x11e>
PIPE_WAKEUPWRITERS(pipe);
read += chunk;
}
out_locked:
PIPE_UNLOCK(pipe);
4cdec: 2f2a 0028 movel %a2@(40),%sp@- <== NOT EXECUTED
4cdf0: 49f9 0004 8060 lea 48060 <rtems_semaphore_release>,%a4 <== NOT EXECUTED
int chunk, chunk1, read = 0, ret = 0;
if (! PIPE_LOCK(pipe))
return -EINTR;
while (read < count) {
4cdf6: 4283 clrl %d3 <== NOT EXECUTED
4cdf8: 42ae fff8 clrl %fp@(-8) <== NOT EXECUTED
PIPE_WAKEUPWRITERS(pipe);
read += chunk;
}
out_locked:
PIPE_UNLOCK(pipe);
4cdfc: 4e94 jsr %a4@ <== NOT EXECUTED
4cdfe: 588f addql #4,%sp <== NOT EXECUTED
4ce00: 6000 febc braw 4ccbe <pipe_read+0xb0> <== NOT EXECUTED
0004c738 <pipe_release>:
*/
int pipe_release(
pipe_control_t **pipep,
rtems_libio_t *iop
)
{
4c738: 4e56 ffe8 linkw %fp,#-24
4c73c: 48d7 3c04 moveml %d2/%a2-%a5,%sp@
4c740: 266e 0008 moveal %fp@(8),%a3
pipe_control_t *pipe = *pipep;
4c744: 2453 moveal %a3@,%a2
uint32_t mode;
if (pipe_lock())
4c746: 4eba ff1c jsr %pc@(4c664 <pipe_lock>)
4c74a: 4a80 tstl %d0
4c74c: 6600 00e0 bnew 4c82e <pipe_release+0xf6>
/* WARN pipe not freed and pipep not set to NULL! */
/* FIXME */
rtems_fatal_error_occurred(0xdeadbeef);
if (!PIPE_LOCK(pipe))
4c750: 42a7 clrl %sp@-
4c752: 42a7 clrl %sp@-
4c754: 2f2a 0028 movel %a2@(40),%sp@-
4c758: 4eb9 0004 7f20 jsr 47f20 <rtems_semaphore_obtain>
4c75e: 4fef 000c lea %sp@(12),%sp
4c762: 4a80 tstl %d0
4c764: 6600 00c8 bnew 4c82e <pipe_release+0xf6>
/* WARN pipe not released! */
/* FIXME */
rtems_fatal_error_occurred(0xdeadbeef);
mode = LIBIO_ACCMODE(iop);
4c768: 206e 000c moveal %fp@(12),%a0
4c76c: 7406 moveq #6,%d2
4c76e: c4a8 0014 andl %a0@(20),%d2
if (mode & LIBIO_FLAGS_READ)
4c772: 0802 0001 btst #1,%d2
4c776: 6704 beqs 4c77c <pipe_release+0x44>
pipe->Readers --;
4c778: 53aa 0010 subql #1,%a2@(16)
if (mode & LIBIO_FLAGS_WRITE)
4c77c: 44c2 movew %d2,%ccr
4c77e: 6604 bnes 4c784 <pipe_release+0x4c>
pipe->Writers --;
4c780: 53aa 0014 subql #1,%a2@(20)
PIPE_UNLOCK(pipe);
4c784: 2f2a 0028 movel %a2@(40),%sp@-
4c788: 4eb9 0004 8060 jsr 48060 <rtems_semaphore_release>
if (pipe->Readers == 0 && pipe->Writers == 0) {
4c78e: 588f addql #4,%sp
4c790: 4aaa 0010 tstl %a2@(16)
4c794: 672c beqs 4c7c2 <pipe_release+0x8a>
*pipep = NULL;
}
else if (pipe->Readers == 0 && mode != LIBIO_FLAGS_WRITE)
/* Notify waiting Writers that all their partners left */
PIPE_WAKEUPWRITERS(pipe);
else if (pipe->Writers == 0 && mode != LIBIO_FLAGS_READ)
4c796: 4aaa 0014 tstl %a2@(20)
4c79a: 6616 bnes 4c7b2 <pipe_release+0x7a> <== NEVER TAKEN
4c79c: 7002 moveq #2,%d0
4c79e: b082 cmpl %d2,%d0
4c7a0: 6710 beqs 4c7b2 <pipe_release+0x7a> <== NEVER TAKEN
PIPE_WAKEUPREADERS(pipe);
4c7a2: 486e fffc pea %fp@(-4)
4c7a6: 2f2a 002c movel %a2@(44),%sp@-
4c7aa: 4eb9 0004 df1c jsr 4df1c <rtems_barrier_release>
4c7b0: 508f addql #8,%sp
pipe_unlock();
4c7b2: 4eba ff5e jsr %pc@(4c712 <pipe_unlock>)
if(iop->pathinfo.ops->unlink_h(&iop->pathinfo))
return -errno;
#endif
return 0;
}
4c7b6: 4280 clrl %d0
4c7b8: 4cee 3c04 ffe8 moveml %fp@(-24),%d2/%a2-%a5
4c7be: 4e5e unlk %fp
4c7c0: 4e75 rts
if (mode & LIBIO_FLAGS_WRITE)
pipe->Writers --;
PIPE_UNLOCK(pipe);
if (pipe->Readers == 0 && pipe->Writers == 0) {
4c7c2: 4aaa 0014 tstl %a2@(20)
4c7c6: 6726 beqs 4c7ee <pipe_release+0xb6>
delfile = TRUE;
#endif
pipe_free(pipe);
*pipep = NULL;
}
else if (pipe->Readers == 0 && mode != LIBIO_FLAGS_WRITE)
4c7c8: 7004 moveq #4,%d0
4c7ca: b082 cmpl %d2,%d0
4c7cc: 67e4 beqs 4c7b2 <pipe_release+0x7a> <== NEVER TAKEN
/* Notify waiting Writers that all their partners left */
PIPE_WAKEUPWRITERS(pipe);
4c7ce: 486e fffc pea %fp@(-4)
4c7d2: 2f2a 0030 movel %a2@(48),%sp@-
4c7d6: 4eb9 0004 df1c jsr 4df1c <rtems_barrier_release>
4c7dc: 508f addql #8,%sp
else if (pipe->Writers == 0 && mode != LIBIO_FLAGS_READ)
PIPE_WAKEUPREADERS(pipe);
pipe_unlock();
4c7de: 4eba ff32 jsr %pc@(4c712 <pipe_unlock>)
if(iop->pathinfo.ops->unlink_h(&iop->pathinfo))
return -errno;
#endif
return 0;
}
4c7e2: 4cee 3c04 ffe8 moveml %fp@(-24),%d2/%a2-%a5
4c7e8: 4280 clrl %d0
4c7ea: 4e5e unlk %fp
4c7ec: 4e75 rts
/* Called with pipe_semaphore held. */
static inline void pipe_free(
pipe_control_t *pipe
)
{
rtems_barrier_delete(pipe->readBarrier);
4c7ee: 2f2a 002c movel %a2@(44),%sp@-
4c7f2: 4bf9 0004 de7c lea 4de7c <rtems_barrier_delete>,%a5
rtems_barrier_delete(pipe->writeBarrier);
rtems_semaphore_delete(pipe->Semaphore);
free(pipe->Buffer);
4c7f8: 49f9 0004 41b0 lea 441b0 <free>,%a4
/* Called with pipe_semaphore held. */
static inline void pipe_free(
pipe_control_t *pipe
)
{
rtems_barrier_delete(pipe->readBarrier);
4c7fe: 4e95 jsr %a5@
rtems_barrier_delete(pipe->writeBarrier);
4c800: 2f2a 0030 movel %a2@(48),%sp@-
4c804: 4e95 jsr %a5@
rtems_semaphore_delete(pipe->Semaphore);
4c806: 2f2a 0028 movel %a2@(40),%sp@-
4c80a: 4eb9 0004 7e48 jsr 47e48 <rtems_semaphore_delete>
free(pipe->Buffer);
4c810: 2f12 movel %a2@,%sp@-
4c812: 4e94 jsr %a4@
free(pipe);
4c814: 2f0a movel %a2,%sp@-
4c816: 4e94 jsr %a4@
/* To delete an anonymous pipe file when all users closed it */
if (pipe->Anonymous)
delfile = TRUE;
#endif
pipe_free(pipe);
*pipep = NULL;
4c818: 4fef 0014 lea %sp@(20),%sp
4c81c: 4293 clrl %a3@
/* Notify waiting Writers that all their partners left */
PIPE_WAKEUPWRITERS(pipe);
else if (pipe->Writers == 0 && mode != LIBIO_FLAGS_READ)
PIPE_WAKEUPREADERS(pipe);
pipe_unlock();
4c81e: 4eba fef2 jsr %pc@(4c712 <pipe_unlock>)
if(iop->pathinfo.ops->unlink_h(&iop->pathinfo))
return -errno;
#endif
return 0;
}
4c822: 4cee 3c04 ffe8 moveml %fp@(-24),%d2/%a2-%a5
4c828: 4280 clrl %d0
4c82a: 4e5e unlk %fp
4c82c: 4e75 rts
rtems_fatal_error_occurred(0xdeadbeef);
if (!PIPE_LOCK(pipe))
/* WARN pipe not released! */
/* FIXME */
rtems_fatal_error_occurred(0xdeadbeef);
4c82e: 2f3c dead beef movel #-559038737,%sp@- <== NOT EXECUTED
4c834: 4eb9 0004 85f4 jsr 485f4 <rtems_fatal_error_occurred> <== NOT EXECUTED
0004c712 <pipe_unlock>:
return -ENOMEM;
}
}
static void pipe_unlock(void)
{
4c712: 4e56 0000 linkw %fp,#0
rtems_status_code sc = RTEMS_SUCCESSFUL;
sc = rtems_semaphore_release(pipe_semaphore);
4c716: 2f39 0005 f670 movel 5f670 <pipe_semaphore>,%sp@-
4c71c: 4eb9 0004 8060 jsr 48060 <rtems_semaphore_release>
if (sc != RTEMS_SUCCESSFUL) {
4c722: 588f addql #4,%sp
4c724: 4a80 tstl %d0
4c726: 6604 bnes 4c72c <pipe_unlock+0x1a> <== NEVER TAKEN
/* FIXME */
rtems_fatal_error_occurred(0xdeadbeef);
}
}
4c728: 4e5e unlk %fp
4c72a: 4e75 rts
rtems_status_code sc = RTEMS_SUCCESSFUL;
sc = rtems_semaphore_release(pipe_semaphore);
if (sc != RTEMS_SUCCESSFUL) {
/* FIXME */
rtems_fatal_error_occurred(0xdeadbeef);
4c72c: 2f3c dead beef movel #-559038737,%sp@- <== NOT EXECUTED
4c732: 4eb9 0004 85f4 jsr 485f4 <rtems_fatal_error_occurred> <== NOT EXECUTED
0004ce04 <pipe_write>:
pipe_control_t *pipe,
const void *buffer,
size_t count,
rtems_libio_t *iop
)
{
4ce04: 4e56 ffcc linkw %fp,#-52
4ce08: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
4ce0c: 246e 0008 moveal %fp@(8),%a2
4ce10: 262e 0010 movel %fp@(16),%d3
int chunk, chunk1, written = 0, ret = 0;
/* Write nothing */
if (count == 0)
4ce14: 660e bnes 4ce24 <pipe_write+0x20> <== ALWAYS TAKEN
return 0;
4ce16: 4282 clrl %d2 <== NOT EXECUTED
#endif
if (written > 0)
return written;
return ret;
}
4ce18: 2002 movel %d2,%d0
4ce1a: 4cee 3cfc ffcc moveml %fp@(-52),%d2-%d7/%a2-%a5
4ce20: 4e5e unlk %fp
4ce22: 4e75 rts
/* Write nothing */
if (count == 0)
return 0;
if (! PIPE_LOCK(pipe))
4ce24: 42a7 clrl %sp@-
4ce26: 47f9 0004 7f20 lea 47f20 <rtems_semaphore_obtain>,%a3
4ce2c: 42a7 clrl %sp@-
4ce2e: 2f2a 0028 movel %a2@(40),%sp@-
4ce32: 4e93 jsr %a3@
4ce34: 4fef 000c lea %sp@(12),%sp
4ce38: 4a80 tstl %d0
4ce3a: 6600 00ae bnew 4ceea <pipe_write+0xe6>
return -EINTR;
if (pipe->Readers == 0) {
4ce3e: 4aaa 0010 tstl %a2@(16)
4ce42: 6700 00dc beqw 4cf20 <pipe_write+0x11c>
ret = -EPIPE;
goto out_locked;
}
/* Write of PIPE_BUF bytes or less shall not be interleaved */
chunk = count <= pipe->Size ? count : 1;
4ce46: 202a 0004 movel %a2@(4),%d0
4ce4a: b083 cmpl %d3,%d0
4ce4c: 6500 00b6 bcsw 4cf04 <pipe_write+0x100>
4ce50: 2803 movel %d3,%d4
4ce52: 4285 clrl %d5
4ce54: 4282 clrl %d2
4ce56: 49f9 0004 8060 lea 48060 <rtems_semaphore_release>,%a4
}
/* Wait until there is chunk bytes space or no reader exists */
pipe->waitingWriters ++;
PIPE_UNLOCK(pipe);
if (! PIPE_WRITEWAIT(pipe))
4ce5c: 4bf9 0004 df94 lea 4df94 <rtems_barrier_wait>,%a5
if (chunk > chunk1) {
memcpy(pipe->Buffer + PIPE_WSTART(pipe), buffer + written, chunk1);
memcpy(pipe->Buffer, buffer + written + chunk1, chunk - chunk1);
}
else
memcpy(pipe->Buffer + PIPE_WSTART(pipe), buffer + written, chunk);
4ce62: 2c3c 0004 fc74 movel #326772,%d6
/* 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) {
4ce68: 222a 000c movel %a2@(12),%d1
4ce6c: 2040 moveal %d0,%a0
4ce6e: 91c1 subal %d1,%a0
4ce70: b888 cmpl %a0,%d4
4ce72: 6300 00c0 blsw 4cf34 <pipe_write+0x130>
if (LIBIO_NODELAY(iop)) {
4ce76: 206e 0014 moveal %fp@(20),%a0
4ce7a: 7001 moveq #1,%d0
4ce7c: c0a8 0014 andl %a0@(20),%d0
4ce80: 6600 013e bnew 4cfc0 <pipe_write+0x1bc>
goto out_locked;
}
/* Wait until there is chunk bytes space or no reader exists */
pipe->waitingWriters ++;
PIPE_UNLOCK(pipe);
4ce84: 2f2a 0028 movel %a2@(40),%sp@-
ret = -EAGAIN;
goto out_locked;
}
/* Wait until there is chunk bytes space or no reader exists */
pipe->waitingWriters ++;
4ce88: 52aa 001c addql #1,%a2@(28)
PIPE_UNLOCK(pipe);
4ce8c: 4e94 jsr %a4@
if (! PIPE_WRITEWAIT(pipe))
4ce8e: 42a7 clrl %sp@-
4ce90: 2f2a 0030 movel %a2@(48),%sp@-
4ce94: 4e95 jsr %a5@
4ce96: 4fef 000c lea %sp@(12),%sp
4ce9a: 4a80 tstl %d0
4ce9c: 662a bnes 4cec8 <pipe_write+0xc4> <== NEVER TAKEN
4ce9e: 4287 clrl %d7
ret = -EINTR;
if (! PIPE_LOCK(pipe)) {
4cea0: 42a7 clrl %sp@-
4cea2: 42a7 clrl %sp@-
4cea4: 2f2a 0028 movel %a2@(40),%sp@-
4cea8: 4e93 jsr %a3@
4ceaa: 4fef 000c lea %sp@(12),%sp
4ceae: 4a80 tstl %d0
4ceb0: 6600 0108 bnew 4cfba <pipe_write+0x1b6>
/* WARN waitingWriters not restored! */
ret = -EINTR;
goto out_nolock;
}
pipe->waitingWriters --;
4ceb4: 53aa 001c subql #1,%a2@(28)
if (ret != 0)
4ceb8: 4a87 tstl %d7
4ceba: 6612 bnes 4cece <pipe_write+0xca> <== NEVER TAKEN
goto out_locked;
if (pipe->Readers == 0) {
4cebc: 4aaa 0010 tstl %a2@(16)
4cec0: 6736 beqs 4cef8 <pipe_write+0xf4> <== NEVER TAKEN
4cec2: 202a 0004 movel %a2@(4),%d0
4cec6: 60a0 bras 4ce68 <pipe_write+0x64>
/* Wait until there is chunk bytes space or no reader exists */
pipe->waitingWriters ++;
PIPE_UNLOCK(pipe);
if (! PIPE_WRITEWAIT(pipe))
ret = -EINTR;
4cec8: 7efc moveq #-4,%d7 <== NOT EXECUTED
4ceca: 60d4 bras 4cea0 <pipe_write+0x9c> <== NOT EXECUTED
}
/* Write of PIPE_BUF bytes or less shall not be interleaved */
chunk = count <= pipe->Size ? count : 1;
while (written < count) {
4cecc: 4287 clrl %d7
/* Write of more than PIPE_BUF bytes can be interleaved */
chunk = 1;
}
out_locked:
PIPE_UNLOCK(pipe);
4cece: 2f2a 0028 movel %a2@(40),%sp@-
4ced2: 4e94 jsr %a4@
4ced4: 588f addql #4,%sp
/* Signal SIGPIPE */
if (ret == -EPIPE)
kill(getpid(), SIGPIPE);
#endif
if (written > 0)
4ced6: 4a82 tstl %d2
4ced8: 6e00 ff3e bgtw 4ce18 <pipe_write+0x14>
return written;
return ret;
4cedc: 2407 movel %d7,%d2
}
4cede: 2002 movel %d2,%d0
4cee0: 4cee 3cfc ffcc moveml %fp@(-52),%d2-%d7/%a2-%a5
4cee6: 4e5e unlk %fp
4cee8: 4e75 rts
/* Write nothing */
if (count == 0)
return 0;
if (! PIPE_LOCK(pipe))
return -EINTR;
4ceea: 74fc moveq #-4,%d2 <== NOT EXECUTED
#endif
if (written > 0)
return written;
return ret;
}
4ceec: 2002 movel %d2,%d0 <== NOT EXECUTED
4ceee: 4cee 3cfc ffcc moveml %fp@(-52),%d2-%d7/%a2-%a5 <== NOT EXECUTED
4cef4: 4e5e unlk %fp <== NOT EXECUTED
4cef6: 4e75 rts <== NOT EXECUTED
/* Write of more than PIPE_BUF bytes can be interleaved */
chunk = 1;
}
out_locked:
PIPE_UNLOCK(pipe);
4cef8: 2f2a 0028 movel %a2@(40),%sp@- <== NOT EXECUTED
pipe->waitingWriters --;
if (ret != 0)
goto out_locked;
if (pipe->Readers == 0) {
ret = -EPIPE;
4cefc: 7ee0 moveq #-32,%d7 <== NOT EXECUTED
/* Write of more than PIPE_BUF bytes can be interleaved */
chunk = 1;
}
out_locked:
PIPE_UNLOCK(pipe);
4cefe: 4e94 jsr %a4@ <== NOT EXECUTED
4cf00: 588f addql #4,%sp <== NOT EXECUTED
4cf02: 60d2 bras 4ced6 <pipe_write+0xd2> <== NOT EXECUTED
ret = -EPIPE;
goto out_locked;
}
/* Write of PIPE_BUF bytes or less shall not be interleaved */
chunk = count <= pipe->Size ? count : 1;
4cf04: 7801 moveq #1,%d4 <== NOT EXECUTED
4cf06: 4285 clrl %d5 <== NOT EXECUTED
4cf08: 4282 clrl %d2 <== NOT EXECUTED
4cf0a: 49f9 0004 8060 lea 48060 <rtems_semaphore_release>,%a4 <== NOT EXECUTED
}
/* Wait until there is chunk bytes space or no reader exists */
pipe->waitingWriters ++;
PIPE_UNLOCK(pipe);
if (! PIPE_WRITEWAIT(pipe))
4cf10: 4bf9 0004 df94 lea 4df94 <rtems_barrier_wait>,%a5 <== NOT EXECUTED
if (chunk > chunk1) {
memcpy(pipe->Buffer + PIPE_WSTART(pipe), buffer + written, chunk1);
memcpy(pipe->Buffer, buffer + written + chunk1, chunk - chunk1);
}
else
memcpy(pipe->Buffer + PIPE_WSTART(pipe), buffer + written, chunk);
4cf16: 2c3c 0004 fc74 movel #326772,%d6 <== NOT EXECUTED
4cf1c: 6000 ff4a braw 4ce68 <pipe_write+0x64> <== NOT EXECUTED
/* Write of more than PIPE_BUF bytes can be interleaved */
chunk = 1;
}
out_locked:
PIPE_UNLOCK(pipe);
4cf20: 2f2a 0028 movel %a2@(40),%sp@-
4cf24: 49f9 0004 8060 lea 48060 <rtems_semaphore_release>,%a4
if (! PIPE_LOCK(pipe))
return -EINTR;
if (pipe->Readers == 0) {
ret = -EPIPE;
4cf2a: 7ee0 moveq #-32,%d7
const void *buffer,
size_t count,
rtems_libio_t *iop
)
{
int chunk, chunk1, written = 0, ret = 0;
4cf2c: 4282 clrl %d2
/* Write of more than PIPE_BUF bytes can be interleaved */
chunk = 1;
}
out_locked:
PIPE_UNLOCK(pipe);
4cf2e: 4e94 jsr %a4@
4cf30: 588f addql #4,%sp
4cf32: 60a2 bras 4ced6 <pipe_write+0xd2>
ret = -EPIPE;
goto out_locked;
}
}
chunk = MIN(count - written, PIPE_SPACE(pipe));
4cf34: 2243 moveal %d3,%a1
4cf36: 93c5 subal %d5,%a1
4cf38: 2808 movel %a0,%d4
4cf3a: b3c8 cmpal %a0,%a1
4cf3c: 6402 bccs 4cf40 <pipe_write+0x13c>
4cf3e: 2809 movel %a1,%d4
chunk1 = pipe->Size - PIPE_WSTART(pipe);
4cf40: 2241 moveal %d1,%a1
4cf42: d3ea 0008 addal %a2@(8),%a1
4cf46: 2209 movel %a1,%d1
4cf48: 4c40 1007 remul %d0,%d7,%d1
4cf4c: 2200 movel %d0,%d1
4cf4e: 2047 moveal %d7,%a0
4cf50: 9287 subl %d7,%d1
if (chunk > chunk1) {
4cf52: b284 cmpl %d4,%d1
4cf54: 6c78 bges 4cfce <pipe_write+0x1ca>
memcpy(pipe->Buffer + PIPE_WSTART(pipe), buffer + written, chunk1);
4cf56: 226e 000c moveal %fp@(12),%a1
4cf5a: 2f01 movel %d1,%sp@-
4cf5c: 4871 5800 pea %a1@(00000000,%d5:l)
4cf60: d1d2 addal %a2@,%a0
4cf62: 2d41 fff4 movel %d1,%fp@(-12)
4cf66: 2f08 movel %a0,%sp@-
4cf68: 2046 moveal %d6,%a0
4cf6a: 4e90 jsr %a0@
memcpy(pipe->Buffer, buffer + written + chunk1, chunk - chunk1);
4cf6c: 222e fff4 movel %fp@(-12),%d1
4cf70: 2004 movel %d4,%d0
4cf72: 9081 subl %d1,%d0
4cf74: da81 addl %d1,%d5
4cf76: 2246 moveal %d6,%a1
4cf78: 206e 000c moveal %fp@(12),%a0
4cf7c: 2f00 movel %d0,%sp@-
4cf7e: 4870 5800 pea %a0@(00000000,%d5:l)
4cf82: 2f12 movel %a2@,%sp@-
4cf84: 4e91 jsr %a1@
4cf86: 4fef 0018 lea %sp@(24),%sp
}
else
memcpy(pipe->Buffer + PIPE_WSTART(pipe), buffer + written, chunk);
pipe->Length += chunk;
4cf8a: d9aa 000c addl %d4,%a2@(12)
if (pipe->waitingReaders > 0)
4cf8e: 4aaa 0018 tstl %a2@(24)
4cf92: 6614 bnes 4cfa8 <pipe_write+0x1a4> <== NEVER TAKEN
PIPE_WAKEUPREADERS(pipe);
written += chunk;
4cf94: d484 addl %d4,%d2
}
/* Write of PIPE_BUF bytes or less shall not be interleaved */
chunk = count <= pipe->Size ? count : 1;
while (written < count) {
4cf96: 2a02 movel %d2,%d5
4cf98: b483 cmpl %d3,%d2
4cf9a: 6400 ff30 bccw 4cecc <pipe_write+0xc8>
4cf9e: 202a 0004 movel %a2@(4),%d0 <== NOT EXECUTED
pipe->Length += chunk;
if (pipe->waitingReaders > 0)
PIPE_WAKEUPREADERS(pipe);
written += chunk;
/* Write of more than PIPE_BUF bytes can be interleaved */
chunk = 1;
4cfa2: 7801 moveq #1,%d4 <== NOT EXECUTED
4cfa4: 6000 fec2 braw 4ce68 <pipe_write+0x64> <== NOT EXECUTED
else
memcpy(pipe->Buffer + PIPE_WSTART(pipe), buffer + written, chunk);
pipe->Length += chunk;
if (pipe->waitingReaders > 0)
PIPE_WAKEUPREADERS(pipe);
4cfa8: 486e fffc pea %fp@(-4)
4cfac: 2f2a 002c movel %a2@(44),%sp@-
4cfb0: 4eb9 0004 df1c jsr 4df1c <rtems_barrier_release>
4cfb6: 508f addql #8,%sp
4cfb8: 60da bras 4cf94 <pipe_write+0x190>
PIPE_UNLOCK(pipe);
if (! PIPE_WRITEWAIT(pipe))
ret = -EINTR;
if (! PIPE_LOCK(pipe)) {
/* WARN waitingWriters not restored! */
ret = -EINTR;
4cfba: 7efc moveq #-4,%d7 <== NOT EXECUTED
4cfbc: 6000 ff18 braw 4ced6 <pipe_write+0xd2> <== NOT EXECUTED
/* Write of more than PIPE_BUF bytes can be interleaved */
chunk = 1;
}
out_locked:
PIPE_UNLOCK(pipe);
4cfc0: 2f2a 0028 movel %a2@(40),%sp@-
chunk = count <= pipe->Size ? count : 1;
while (written < count) {
while (PIPE_SPACE(pipe) < chunk) {
if (LIBIO_NODELAY(iop)) {
ret = -EAGAIN;
4cfc4: 7ef5 moveq #-11,%d7
/* Write of more than PIPE_BUF bytes can be interleaved */
chunk = 1;
}
out_locked:
PIPE_UNLOCK(pipe);
4cfc6: 4e94 jsr %a4@
4cfc8: 588f addql #4,%sp
4cfca: 6000 ff0a braw 4ced6 <pipe_write+0xd2>
if (chunk > chunk1) {
memcpy(pipe->Buffer + PIPE_WSTART(pipe), buffer + written, chunk1);
memcpy(pipe->Buffer, buffer + written + chunk1, chunk - chunk1);
}
else
memcpy(pipe->Buffer + PIPE_WSTART(pipe), buffer + written, chunk);
4cfce: 226e 000c moveal %fp@(12),%a1
4cfd2: 2f04 movel %d4,%sp@-
4cfd4: 4871 5800 pea %a1@(00000000,%d5:l)
4cfd8: d1d2 addal %a2@,%a0
4cfda: 2f08 movel %a0,%sp@-
4cfdc: 2046 moveal %d6,%a0
4cfde: 4e90 jsr %a0@
4cfe0: 4fef 000c lea %sp@(12),%sp
pipe->Length += chunk;
4cfe4: d9aa 000c addl %d4,%a2@(12)
if (pipe->waitingReaders > 0)
4cfe8: 4aaa 0018 tstl %a2@(24)
4cfec: 67a6 beqs 4cf94 <pipe_write+0x190>
4cfee: 60b8 bras 4cfa8 <pipe_write+0x1a4>
00047b28 <posix_memalign>:
int posix_memalign(
void **pointer,
size_t alignment,
size_t size
)
{
47b28: 4e56 0000 linkw %fp,#0
47b2c: 222e 000c movel %fp@(12),%d1
/*
* Update call statistics
*/
MSBUMP(memalign_calls, 1);
if (((alignment - 1) & alignment) != 0 || (alignment < sizeof(void *)))
47b30: 2001 movel %d1,%d0
47b32: 5380 subql #1,%d0
)
{
/*
* Update call statistics
*/
MSBUMP(memalign_calls, 1);
47b34: 52b9 0006 4714 addql #1,64714 <rtems_malloc_statistics+0x8>
if (((alignment - 1) & alignment) != 0 || (alignment < sizeof(void *)))
47b3a: c081 andl %d1,%d0
47b3c: 6608 bnes 47b46 <posix_memalign+0x1e> <== NEVER TAKEN
47b3e: 103c 0003 moveb #3,%d0
47b42: b081 cmpl %d1,%d0
47b44: 6506 bcss 47b4c <posix_memalign+0x24>
/*
* rtems_memalign does all of the error checking work EXCEPT
* for adding restrictionso on the alignment.
*/
return rtems_memalign( pointer, alignment, size );
}
47b46: 7016 moveq #22,%d0
47b48: 4e5e unlk %fp
47b4a: 4e75 rts
47b4c: 4e5e unlk %fp
/*
* rtems_memalign does all of the error checking work EXCEPT
* for adding restrictionso on the alignment.
*/
return rtems_memalign( pointer, alignment, size );
47b4e: 4ef9 0004 7d00 jmp 47d00 <rtems_memalign>
00043e44 <putk>:
* putk
*
* Kernel putk (e.g. puts) function requiring minimal infrastrure.
*/
void putk(const char *s)
{
43e44: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
43e48: 2f0a movel %a2,%sp@- <== NOT EXECUTED
43e4a: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
const char *p = s;
for (p=s ; *p ; p++ )
43e4e: 1012 moveb %a2@,%d0 <== NOT EXECUTED
43e50: 6714 beqs 43e66 <putk+0x22> <== NOT EXECUTED
/*
* putk
*
* Kernel putk (e.g. puts) function requiring minimal infrastrure.
*/
void putk(const char *s)
43e52: 528a addql #1,%a2 <== NOT EXECUTED
{
const char *p = s;
for (p=s ; *p ; p++ )
BSP_output_char(*p);
43e54: 49c0 extbl %d0 <== NOT EXECUTED
43e56: 2079 0005 d01c moveal 5d01c <BSP_output_char>,%a0 <== NOT EXECUTED
43e5c: 2f00 movel %d0,%sp@- <== NOT EXECUTED
43e5e: 4e90 jsr %a0@ <== NOT EXECUTED
*/
void putk(const char *s)
{
const char *p = s;
for (p=s ; *p ; p++ )
43e60: 588f addql #4,%sp <== NOT EXECUTED
43e62: 101a moveb %a2@+,%d0 <== NOT EXECUTED
43e64: 66ee bnes 43e54 <putk+0x10> <== NOT EXECUTED
BSP_output_char(*p);
BSP_output_char('\n');
43e66: 700a moveq #10,%d0 <== NOT EXECUTED
}
43e68: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
{
const char *p = s;
for (p=s ; *p ; p++ )
BSP_output_char(*p);
BSP_output_char('\n');
43e6c: 2d40 0008 movel %d0,%fp@(8) <== NOT EXECUTED
}
43e70: 4e5e unlk %fp <== NOT EXECUTED
{
const char *p = s;
for (p=s ; *p ; p++ )
BSP_output_char(*p);
BSP_output_char('\n');
43e72: 2279 0005 d01c moveal 5d01c <BSP_output_char>,%a1 <== NOT EXECUTED
43e78: 4ed1 jmp %a1@ <== NOT EXECUTED
...
0005ae84 <read>:
ssize_t read(
int fd,
void *buffer,
size_t count
)
{
5ae84: 4e56 fff4 linkw %fp,#-12
5ae88: 202e 0008 movel %fp@(8),%d0
5ae8c: 222e 000c movel %fp@(12),%d1
5ae90: 206e 0010 moveal %fp@(16),%a0
5ae94: 48d7 040c moveml %d2-%d3/%a2,%sp@
ssize_t rc;
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
5ae98: b0b9 0005 cc44 cmpl 5cc44 <rtems_libio_number_iops>,%d0
5ae9e: 646a bccs 5af0a <read+0x86> <== NEVER TAKEN
iop = rtems_libio_iop( fd );
5aea0: 2400 movel %d0,%d2
5aea2: ed88 lsll #6,%d0
5aea4: e78a lsll #3,%d2
5aea6: 2479 0005 e2c8 moveal 5e2c8 <rtems_libio_iops>,%a2
5aeac: 9082 subl %d2,%d0
5aeae: d5c0 addal %d0,%a2
rtems_libio_check_is_open( iop );
5aeb0: 202a 0014 movel %a2@(20),%d0
5aeb4: 0800 0008 btst #8,%d0
5aeb8: 6750 beqs 5af0a <read+0x86>
rtems_libio_check_buffer( buffer );
5aeba: 4a81 tstl %d1
5aebc: 6764 beqs 5af22 <read+0x9e> <== NEVER TAKEN
rtems_libio_check_count( count );
5aebe: 4a88 tstl %a0
5aec0: 673c beqs 5aefe <read+0x7a> <== NEVER TAKEN
rtems_libio_check_permissions( iop, LIBIO_FLAGS_READ );
5aec2: 0800 0001 btst #1,%d0
5aec6: 675a beqs 5af22 <read+0x9e> <== NEVER TAKEN
return 0;
/*
* Now process the read().
*/
rc = (*iop->pathinfo.handlers->read_h)( iop, buffer, count );
5aec8: 226a 0020 moveal %a2@(32),%a1
5aecc: 2f08 movel %a0,%sp@-
5aece: 2f01 movel %d1,%sp@-
5aed0: 2f0a movel %a2,%sp@-
5aed2: 2069 0008 moveal %a1@(8),%a0
5aed6: 4e90 jsr %a0@
if ( rc > 0 )
5aed8: 4fef 000c lea %sp@(12),%sp
5aedc: 4a80 tstl %d0
5aede: 6f14 bles 5aef4 <read+0x70>
iop->offset += rc;
5aee0: 2400 movel %d0,%d2
5aee2: 5bc1 smi %d1
5aee4: 49c1 extbl %d1
5aee6: d5aa 0010 addl %d2,%a2@(16)
5aeea: 262a 000c movel %a2@(12),%d3
5aeee: d781 addxl %d1,%d3
5aef0: 2543 000c movel %d3,%a2@(12)
return rc;
}
5aef4: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
5aefa: 4e5e unlk %fp
5aefc: 4e75 rts
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 );
5aefe: 4280 clrl %d0 <== NOT EXECUTED
if ( rc > 0 )
iop->offset += rc;
return rc;
}
5af00: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2 <== NOT EXECUTED
5af06: 4e5e unlk %fp <== NOT EXECUTED
5af08: 4e75 rts <== NOT EXECUTED
ssize_t rc;
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open( iop );
5af0a: 4eb9 0004 da6c jsr 4da6c <__errno>
5af10: 7409 moveq #9,%d2
5af12: 2040 moveal %d0,%a0
5af14: 70ff moveq #-1,%d0
5af16: 2082 movel %d2,%a0@
if ( rc > 0 )
iop->offset += rc;
return rc;
}
5af18: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
5af1e: 4e5e unlk %fp
5af20: 4e75 rts
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 );
rtems_libio_check_permissions( iop, LIBIO_FLAGS_READ );
5af22: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
5af28: 7216 moveq #22,%d1 <== NOT EXECUTED
5af2a: 2040 moveal %d0,%a0 <== NOT EXECUTED
5af2c: 70ff moveq #-1,%d0 <== NOT EXECUTED
if ( rc > 0 )
iop->offset += rc;
return rc;
}
5af2e: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2 <== NOT EXECUTED
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 );
rtems_libio_check_permissions( iop, LIBIO_FLAGS_READ );
5af34: 2081 movel %d1,%a0@ <== NOT EXECUTED
if ( rc > 0 )
iop->offset += rc;
return rc;
}
5af36: 4e5e unlk %fp <== NOT EXECUTED
000465b4 <readlink>:
ssize_t readlink(
const char *pathname,
char *buf,
size_t bufsize
)
{
465b4: 4e56 ffe0 linkw %fp,#-32
465b8: 48d7 001c moveml %d2-%d4,%sp@
465bc: 242e 0008 movel %fp@(8),%d2
465c0: 282e 000c movel %fp@(12),%d4
rtems_filesystem_location_info_t loc;
int result;
if (!buf)
465c4: 6776 beqs 4663c <readlink+0x88> <== NEVER TAKEN
rtems_set_errno_and_return_minus_one( EFAULT );
result = rtems_filesystem_evaluate_path( pathname, strlen( pathname ),
465c6: 2f02 movel %d2,%sp@-
465c8: 260e movel %fp,%d3
465ca: 0683 ffff ffec addil #-20,%d3
465d0: 4eb9 0005 2904 jsr 52904 <strlen>
465d6: 4297 clrl %sp@
465d8: 2f03 movel %d3,%sp@-
465da: 42a7 clrl %sp@-
465dc: 2f00 movel %d0,%sp@-
465de: 2f02 movel %d2,%sp@-
465e0: 4eb9 0004 5300 jsr 45300 <rtems_filesystem_evaluate_path>
0, &loc, false );
if ( result != 0 )
465e6: 4fef 0014 lea %sp@(20),%sp
465ea: 4a80 tstl %d0
465ec: 670e beqs 465fc <readlink+0x48> <== ALWAYS TAKEN
return -1;
465ee: 74ff moveq #-1,%d2 <== NOT EXECUTED
result = (*loc.ops->readlink_h)( &loc, buf, bufsize );
rtems_filesystem_freenode( &loc );
return result;
}
465f0: 2002 movel %d2,%d0 <== NOT EXECUTED
465f2: 4cee 001c ffe0 moveml %fp@(-32),%d2-%d4 <== NOT EXECUTED
465f8: 4e5e unlk %fp <== NOT EXECUTED
465fa: 4e75 rts <== NOT EXECUTED
result = rtems_filesystem_evaluate_path( pathname, strlen( pathname ),
0, &loc, false );
if ( result != 0 )
return -1;
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_SYM_LINK ){
465fc: 206e fff8 moveal %fp@(-8),%a0
46600: 2f03 movel %d3,%sp@-
46602: 2068 0010 moveal %a0@(16),%a0
46606: 4e90 jsr %a0@
46608: 588f addql #4,%sp
4660a: 7204 moveq #4,%d1
4660c: b280 cmpl %d0,%d1
4660e: 6646 bnes 46656 <readlink+0xa2>
rtems_filesystem_freenode( &loc );
rtems_set_errno_and_return_minus_one( EINVAL );
}
result = (*loc.ops->readlink_h)( &loc, buf, bufsize );
46610: 2f2e 0010 movel %fp@(16),%sp@-
46614: 206e fff8 moveal %fp@(-8),%a0
46618: 2f04 movel %d4,%sp@-
4661a: 2f03 movel %d3,%sp@-
4661c: 2068 003c moveal %a0@(60),%a0
46620: 4e90 jsr %a0@
46622: 2400 movel %d0,%d2
rtems_filesystem_freenode( &loc );
46624: 2f03 movel %d3,%sp@-
46626: 4eb9 0004 5424 jsr 45424 <rtems_filesystem_freenode>
return result;
4662c: 4fef 0010 lea %sp@(16),%sp
}
46630: 2002 movel %d2,%d0
46632: 4cee 001c ffe0 moveml %fp@(-32),%d2-%d4
46638: 4e5e unlk %fp
4663a: 4e75 rts
{
rtems_filesystem_location_info_t loc;
int result;
if (!buf)
rtems_set_errno_and_return_minus_one( EFAULT );
4663c: 4eb9 0005 0e18 jsr 50e18 <__errno> <== NOT EXECUTED
46642: 74ff moveq #-1,%d2 <== NOT EXECUTED
46644: 720e moveq #14,%d1 <== NOT EXECUTED
46646: 2040 moveal %d0,%a0 <== NOT EXECUTED
result = (*loc.ops->readlink_h)( &loc, buf, bufsize );
rtems_filesystem_freenode( &loc );
return result;
}
46648: 2002 movel %d2,%d0 <== NOT EXECUTED
4664a: 4cee 001c ffe0 moveml %fp@(-32),%d2-%d4 <== NOT EXECUTED
{
rtems_filesystem_location_info_t loc;
int result;
if (!buf)
rtems_set_errno_and_return_minus_one( EFAULT );
46650: 2081 movel %d1,%a0@ <== NOT EXECUTED
result = (*loc.ops->readlink_h)( &loc, buf, bufsize );
rtems_filesystem_freenode( &loc );
return result;
}
46652: 4e5e unlk %fp <== NOT EXECUTED
46654: 4e75 rts <== NOT EXECUTED
0, &loc, false );
if ( result != 0 )
return -1;
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_SYM_LINK ){
rtems_filesystem_freenode( &loc );
46656: 2f03 movel %d3,%sp@-
rtems_set_errno_and_return_minus_one( EINVAL );
46658: 74ff moveq #-1,%d2
0, &loc, false );
if ( result != 0 )
return -1;
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_SYM_LINK ){
rtems_filesystem_freenode( &loc );
4665a: 4eb9 0004 5424 jsr 45424 <rtems_filesystem_freenode>
rtems_set_errno_and_return_minus_one( EINVAL );
46660: 4eb9 0005 0e18 jsr 50e18 <__errno>
46666: 588f addql #4,%sp
46668: 2040 moveal %d0,%a0
4666a: 7016 moveq #22,%d0
4666c: 2080 movel %d0,%a0@
result = (*loc.ops->readlink_h)( &loc, buf, bufsize );
rtems_filesystem_freenode( &loc );
return result;
}
4666e: 2002 movel %d2,%d0
46670: 4cee 001c ffe0 moveml %fp@(-32),%d2-%d4
46676: 4e5e unlk %fp
...
00044ef0 <readv>:
ssize_t readv(
int fd,
const struct iovec *iov,
int iovcnt
)
{
44ef0: 4e56 ffe4 linkw %fp,#-28
44ef4: 202e 0008 movel %fp@(8),%d0
44ef8: 48d7 0c7c moveml %d2-%d6/%a2-%a3,%sp@
44efc: 246e 000c moveal %fp@(12),%a2
44f00: 242e 0010 movel %fp@(16),%d2
int v;
int bytes;
rtems_libio_t *iop;
bool all_zeros;
rtems_libio_check_fd( fd );
44f04: b0b9 0005 da04 cmpl 5da04 <rtems_libio_number_iops>,%d0
44f0a: 6400 00ec bccw 44ff8 <readv+0x108>
iop = rtems_libio_iop( fd );
44f0e: 2200 movel %d0,%d1
44f10: ed88 lsll #6,%d0
44f12: e789 lsll #3,%d1
44f14: 2679 0005 f088 moveal 5f088 <rtems_libio_iops>,%a3
44f1a: 9081 subl %d1,%d0
44f1c: d7c0 addal %d0,%a3
rtems_libio_check_is_open( iop );
44f1e: 202b 0014 movel %a3@(20),%d0
44f22: 0800 0008 btst #8,%d0
44f26: 6700 00d0 beqw 44ff8 <readv+0x108>
rtems_libio_check_permissions( iop, LIBIO_FLAGS_READ );
44f2a: 0800 0001 btst #1,%d0
44f2e: 6700 0092 beqw 44fc2 <readv+0xd2>
/*
* Argument validation on IO vector
*/
if ( !iov )
44f32: 4a8a tstl %a2
44f34: 6700 008c beqw 44fc2 <readv+0xd2>
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iovcnt <= 0 )
44f38: 4a82 tstl %d2
44f3a: 6f00 0086 blew 44fc2 <readv+0xd2>
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iovcnt > IOV_MAX )
44f3e: 0c82 0000 0400 cmpil #1024,%d2
44f44: 6e7c bgts 44fc2 <readv+0xd2> <== NEVER TAKEN
rtems_set_errno_and_return_minus_one( EINVAL );
44f46: 204a moveal %a2,%a0
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iovcnt <= 0 )
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iovcnt > IOV_MAX )
44f48: 4281 clrl %d1
44f4a: 4280 clrl %d0
44f4c: 7801 moveq #1,%d4
all_zeros = true;
for ( total=0, v=0 ; v < iovcnt ; v++ ) {
ssize_t old;
if ( !iov[v].iov_base )
44f4e: 4a90 tstl %a0@
44f50: 6770 beqs 44fc2 <readv+0xd2>
if ( iov[v].iov_len < 0 )
rtems_set_errno_and_return_minus_one( EINVAL );
/* check for wrap */
old = total;
total += iov[v].iov_len;
44f52: 2628 0004 movel %a0@(4),%d3
44f56: 2240 moveal %d0,%a1
44f58: d3c3 addal %d3,%a1
* 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++ ) {
44f5a: 5281 addql #1,%d1
44f5c: 5088 addql #8,%a0
rtems_set_errno_and_return_minus_one( EINVAL );
/* check for wrap */
old = total;
total += iov[v].iov_len;
if ( total < old )
44f5e: b3c0 cmpal %d0,%a1
44f60: 6d60 blts 44fc2 <readv+0xd2>
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iov[v].iov_len )
all_zeros = false;
44f62: 4a83 tstl %d3
44f64: 57c3 seq %d3
if ( iov[v].iov_len < 0 )
rtems_set_errno_and_return_minus_one( EINVAL );
/* check for wrap */
old = total;
total += iov[v].iov_len;
44f66: 2009 movel %a1,%d0
if ( total < old )
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iov[v].iov_len )
all_zeros = false;
44f68: c883 andl %d3,%d4
* 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++ ) {
44f6a: b282 cmpl %d2,%d1
44f6c: 6de0 blts 44f4e <readv+0x5e>
/*
* 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 ) {
44f6e: 4a04 tstb %d4
44f70: 666a bnes 44fdc <readv+0xec>
#include <sys/uio.h>
#include <rtems/libio_.h>
#include <rtems/seterr.h>
ssize_t readv(
44f72: 588a addql #4,%a2
44f74: 4283 clrl %d3
44f76: 4284 clrl %d4
/*
* Now process the readv().
*/
for ( total=0, v=0 ; v < iovcnt ; v++ ) {
bytes = (*iop->pathinfo.handlers->read_h)(
44f78: 206b 0020 moveal %a3@(32),%a0
}
/*
* Now process the readv().
*/
for ( total=0, v=0 ; v < iovcnt ; v++ ) {
44f7c: 5283 addql #1,%d3
bytes = (*iop->pathinfo.handlers->read_h)(
44f7e: 2f12 movel %a2@,%sp@-
44f80: 2f2a fffc movel %a2@(-4),%sp@-
44f84: 2f0b movel %a3,%sp@-
44f86: 2068 0008 moveal %a0@(8),%a0
44f8a: 4e90 jsr %a0@
iop,
iov[v].iov_base,
iov[v].iov_len
);
if ( bytes < 0 )
44f8c: 4fef 000c lea %sp@(12),%sp
44f90: 4a80 tstl %d0
44f92: 6d56 blts 44fea <readv+0xfa> <== NEVER TAKEN
return -1;
if ( bytes > 0 ) {
44f94: 6716 beqs 44fac <readv+0xbc> <== NEVER TAKEN
iop->offset += bytes;
total += bytes;
44f96: d880 addl %d0,%d4
if ( bytes < 0 )
return -1;
if ( bytes > 0 ) {
iop->offset += bytes;
44f98: 2c00 movel %d0,%d6
44f9a: 5bc5 smi %d5
44f9c: 49c5 extbl %d5
44f9e: ddab 0010 addl %d6,%a3@(16)
44fa2: 222b 000c movel %a3@(12),%d1
44fa6: d385 addxl %d5,%d1
44fa8: 2741 000c movel %d1,%a3@(12)
total += bytes;
}
if (bytes != iov[ v ].iov_len)
44fac: b092 cmpl %a2@,%d0
44fae: 6606 bnes 44fb6 <readv+0xc6> <== NEVER TAKEN
}
/*
* Now process the readv().
*/
for ( total=0, v=0 ; v < iovcnt ; v++ ) {
44fb0: 508a addql #8,%a2
44fb2: b682 cmpl %d2,%d3
44fb4: 6dc2 blts 44f78 <readv+0x88>
if (bytes != iov[ v ].iov_len)
break;
}
return total;
}
44fb6: 2004 movel %d4,%d0
44fb8: 4cee 0c7c ffe4 moveml %fp@(-28),%d2-%d6/%a2-%a3
44fbe: 4e5e unlk %fp
44fc0: 4e75 rts
/* check for wrap */
old = total;
total += iov[v].iov_len;
if ( total < old )
rtems_set_errno_and_return_minus_one( EINVAL );
44fc2: 4eb9 0004 eaf8 jsr 4eaf8 <__errno>
44fc8: 78ff moveq #-1,%d4
44fca: 2040 moveal %d0,%a0
44fcc: 7016 moveq #22,%d0
44fce: 2080 movel %d0,%a0@
if (bytes != iov[ v ].iov_len)
break;
}
return total;
}
44fd0: 2004 movel %d4,%d0
44fd2: 4cee 0c7c ffe4 moveml %fp@(-28),%d2-%d6/%a2-%a3
44fd8: 4e5e unlk %fp
44fda: 4e75 rts
* 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;
44fdc: 4284 clrl %d4
if (bytes != iov[ v ].iov_len)
break;
}
return total;
}
44fde: 2004 movel %d4,%d0
44fe0: 4cee 0c7c ffe4 moveml %fp@(-28),%d2-%d6/%a2-%a3
44fe6: 4e5e unlk %fp
44fe8: 4e75 rts
iov[v].iov_base,
iov[v].iov_len
);
if ( bytes < 0 )
return -1;
44fea: 78ff moveq #-1,%d4 <== NOT EXECUTED
if (bytes != iov[ v ].iov_len)
break;
}
return total;
}
44fec: 2004 movel %d4,%d0 <== NOT EXECUTED
44fee: 4cee 0c7c ffe4 moveml %fp@(-28),%d2-%d6/%a2-%a3 <== NOT EXECUTED
44ff4: 4e5e unlk %fp <== NOT EXECUTED
44ff6: 4e75 rts <== NOT EXECUTED
rtems_libio_t *iop;
bool all_zeros;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open( iop );
44ff8: 4eb9 0004 eaf8 jsr 4eaf8 <__errno>
44ffe: 78ff moveq #-1,%d4
45000: 7209 moveq #9,%d1
45002: 2040 moveal %d0,%a0
if (bytes != iov[ v ].iov_len)
break;
}
return total;
}
45004: 2004 movel %d4,%d0
45006: 4cee 0c7c ffe4 moveml %fp@(-28),%d2-%d6/%a2-%a3
rtems_libio_t *iop;
bool all_zeros;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open( iop );
4500c: 2081 movel %d1,%a0@
if (bytes != iov[ v ].iov_len)
break;
}
return total;
}
4500e: 4e5e unlk %fp
...
0005af9c <realloc>:
/*
* Do not attempt to allocate memory if in a critical section or ISR.
*/
if (_System_state_Is_up(_System_state_Get())) {
5af9c: 7003 moveq #3,%d0
void *realloc(
void *ptr,
size_t size
)
{
5af9e: 4e56 fff0 linkw %fp,#-16
uintptr_t old_size;
char *new_area;
MSBUMP(realloc_calls, 1);
5afa2: 52b9 0005 e2f0 addql #1,5e2f0 <rtems_malloc_statistics+0x10>
void *realloc(
void *ptr,
size_t size
)
{
5afa8: 48d7 001c moveml %d2-%d4,%sp@
5afac: 242e 0008 movel %fp@(8),%d2
5afb0: 262e 000c movel %fp@(12),%d3
/*
* Do not attempt to allocate memory if in a critical section or ISR.
*/
if (_System_state_Is_up(_System_state_Get())) {
5afb4: b0b9 0005 e588 cmpl 5e588 <_System_state_Current>,%d0
5afba: 677a beqs 5b036 <realloc+0x9a> <== ALWAYS TAKEN
}
/*
* Continue with realloc().
*/
if ( !ptr )
5afbc: 4a82 tstl %d2
5afbe: 6700 00de beqw 5b09e <realloc+0x102>
return malloc( size );
if ( !size ) {
5afc2: 4a83 tstl %d3
5afc4: 673e beqs 5b004 <realloc+0x68> <== NEVER TAKEN
free( ptr );
return (void *) 0;
}
if ( !_Protected_heap_Get_block_size(RTEMS_Malloc_Heap, ptr, &old_size) ) {
5afc6: 486e fffc pea %fp@(-4)
5afca: 2f02 movel %d2,%sp@-
5afcc: 2f39 0005 cc50 movel 5cc50 <RTEMS_Malloc_Heap>,%sp@-
5afd2: 4eb9 0005 b16c jsr 5b16c <_Protected_heap_Get_block_size>
5afd8: 4fef 000c lea %sp@(12),%sp
5afdc: 4a00 tstb %d0
5afde: 673c beqs 5b01c <realloc+0x80> <== NEVER TAKEN
}
/*
* Now resize it.
*/
if ( _Protected_heap_Resize_block( RTEMS_Malloc_Heap, ptr, size ) ) {
5afe0: 2f03 movel %d3,%sp@-
5afe2: 2f02 movel %d2,%sp@-
5afe4: 2f39 0005 cc50 movel 5cc50 <RTEMS_Malloc_Heap>,%sp@-
5afea: 4eb9 0005 b1a8 jsr 5b1a8 <_Protected_heap_Resize_block>
5aff0: 4fef 000c lea %sp@(12),%sp
5aff4: 4a00 tstb %d0
5aff6: 6754 beqs 5b04c <realloc+0xb0>
memcpy( new_area, ptr, (size < old_size) ? size : old_size );
free( ptr );
return new_area;
}
5aff8: 2002 movel %d2,%d0
5affa: 4cee 001c fff0 moveml %fp@(-16),%d2-%d4
5b000: 4e5e unlk %fp
5b002: 4e75 rts
*/
if ( !ptr )
return malloc( size );
if ( !size ) {
free( ptr );
5b004: 2f02 movel %d2,%sp@- <== NOT EXECUTED
return (void *) 0;
5b006: 4282 clrl %d2 <== NOT EXECUTED
*/
if ( !ptr )
return malloc( size );
if ( !size ) {
free( ptr );
5b008: 4eb9 0004 2db8 jsr 42db8 <free> <== NOT EXECUTED
return (void *) 0;
5b00e: 588f addql #4,%sp <== NOT EXECUTED
memcpy( new_area, ptr, (size < old_size) ? size : old_size );
free( ptr );
return new_area;
}
5b010: 2002 movel %d2,%d0 <== NOT EXECUTED
5b012: 4cee 001c fff0 moveml %fp@(-16),%d2-%d4 <== NOT EXECUTED
5b018: 4e5e unlk %fp <== NOT EXECUTED
5b01a: 4e75 rts <== NOT EXECUTED
free( ptr );
return (void *) 0;
}
if ( !_Protected_heap_Get_block_size(RTEMS_Malloc_Heap, ptr, &old_size) ) {
errno = EINVAL;
5b01c: 4eb9 0004 da6c jsr 4da6c <__errno>
return (void *) 0;
5b022: 4282 clrl %d2
free( ptr );
return (void *) 0;
}
if ( !_Protected_heap_Get_block_size(RTEMS_Malloc_Heap, ptr, &old_size) ) {
errno = EINVAL;
5b024: 2040 moveal %d0,%a0
5b026: 7016 moveq #22,%d0
5b028: 2080 movel %d0,%a0@
memcpy( new_area, ptr, (size < old_size) ? size : old_size );
free( ptr );
return new_area;
}
5b02a: 2002 movel %d2,%d0
5b02c: 4cee 001c fff0 moveml %fp@(-16),%d2-%d4
5b032: 4e5e unlk %fp
5b034: 4e75 rts
/*
* Do not attempt to allocate memory if in a critical section or ISR.
*/
if (_System_state_Is_up(_System_state_Get())) {
if (_Thread_Dispatch_disable_level > 0)
5b036: 2039 0005 e41c movel 5e41c <_Thread_Dispatch_disable_level>,%d0
5b03c: 6752 beqs 5b090 <realloc+0xf4> <== ALWAYS TAKEN
new_area = malloc( size );
MSBUMP(malloc_calls, (uint32_t) -1); /* subtract off the malloc */
if ( !new_area ) {
return (void *) 0;
5b03e: 4282 clrl %d2
memcpy( new_area, ptr, (size < old_size) ? size : old_size );
free( ptr );
return new_area;
}
5b040: 2002 movel %d2,%d0
5b042: 4cee 001c fff0 moveml %fp@(-16),%d2-%d4
5b048: 4e5e unlk %fp
5b04a: 4e75 rts
* 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 );
5b04c: 2f03 movel %d3,%sp@-
5b04e: 4eb9 0004 30e8 jsr 430e8 <malloc>
MSBUMP(malloc_calls, (uint32_t) -1); /* subtract off the malloc */
if ( !new_area ) {
5b054: 588f addql #4,%sp
* and the C Standard.
*/
new_area = malloc( size );
MSBUMP(malloc_calls, (uint32_t) -1); /* subtract off the malloc */
5b056: 53b9 0005 e2e4 subql #1,5e2e4 <rtems_malloc_statistics+0x4>
* 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 );
5b05c: 2800 movel %d0,%d4
MSBUMP(malloc_calls, (uint32_t) -1); /* subtract off the malloc */
if ( !new_area ) {
5b05e: 67de beqs 5b03e <realloc+0xa2>
return (void *) 0;
}
memcpy( new_area, ptr, (size < old_size) ? size : old_size );
5b060: 202e fffc movel %fp@(-4),%d0
5b064: b083 cmpl %d3,%d0
5b066: 6402 bccs 5b06a <realloc+0xce> <== NEVER TAKEN
5b068: 2600 movel %d0,%d3
5b06a: 2f03 movel %d3,%sp@-
5b06c: 2f02 movel %d2,%sp@-
5b06e: 2f04 movel %d4,%sp@-
5b070: 4eb9 0004 e318 jsr 4e318 <memcpy>
free( ptr );
5b076: 2f02 movel %d2,%sp@-
return new_area;
5b078: 2404 movel %d4,%d2
if ( !new_area ) {
return (void *) 0;
}
memcpy( new_area, ptr, (size < old_size) ? size : old_size );
free( ptr );
5b07a: 4eb9 0004 2db8 jsr 42db8 <free>
return new_area;
5b080: 4fef 0010 lea %sp@(16),%sp
}
5b084: 2002 movel %d2,%d0
5b086: 4cee 001c fff0 moveml %fp@(-16),%d2-%d4
5b08c: 4e5e unlk %fp
5b08e: 4e75 rts
if (_System_state_Is_up(_System_state_Get())) {
if (_Thread_Dispatch_disable_level > 0)
return (void *) 0;
if (_ISR_Nest_level > 0)
5b090: 4ab9 0005 e5dc tstl 5e5dc <_Per_CPU_Information+0x8>
5b096: 6700 ff24 beqw 5afbc <realloc+0x20>
new_area = malloc( size );
MSBUMP(malloc_calls, (uint32_t) -1); /* subtract off the malloc */
if ( !new_area ) {
return (void *) 0;
5b09a: 4282 clrl %d2 <== NOT EXECUTED
5b09c: 60a2 bras 5b040 <realloc+0xa4> <== NOT EXECUTED
/*
* Continue with realloc().
*/
if ( !ptr )
return malloc( size );
5b09e: 2f03 movel %d3,%sp@-
5b0a0: 4eb9 0004 30e8 jsr 430e8 <malloc>
5b0a6: 588f addql #4,%sp
5b0a8: 2400 movel %d0,%d2
memcpy( new_area, ptr, (size < old_size) ? size : old_size );
free( ptr );
return new_area;
}
5b0aa: 2002 movel %d2,%d0
5b0ac: 4cee 001c fff0 moveml %fp@(-16),%d2-%d4
5b0b2: 4e5e unlk %fp
...
00044dcc <rmdir>:
#include <rtems/seterr.h>
int rmdir(
const char *pathname
)
{
44dcc: 4e56 ffc0 linkw %fp,#-64
44dd0: 48d7 0c1c moveml %d2-%d4/%a2-%a3,%sp@
44dd4: 242e 0008 movel %fp@(8),%d2
/*
* Get the parent node of the node we wish to remove. Find the parent path.
*/
parentpathlen = rtems_filesystem_dirname ( pathname );
44dd8: 2f02 movel %d2,%sp@-
44dda: 4eb9 0004 390a jsr 4390a <rtems_filesystem_dirname>
if ( parentpathlen == 0 )
44de0: 588f addql #4,%sp
44de2: 4a80 tstl %d0
44de4: 6600 0132 bnew 44f18 <rmdir+0x14c>
rtems_filesystem_get_start_loc( pathname, &i, &parentloc );
44de8: 45ee ffe8 lea %fp@(-24),%a2
44dec: 4283 clrl %d3
44dee: 2f0a movel %a2,%sp@-
44df0: 486e fffc pea %fp@(-4)
const char *name;
rtems_filesystem_location_info_t parentloc;
rtems_filesystem_location_info_t loc;
int i;
int result;
bool free_parentloc = false;
44df4: 4204 clrb %d4
*/
parentpathlen = rtems_filesystem_dirname ( pathname );
if ( parentpathlen == 0 )
rtems_filesystem_get_start_loc( pathname, &i, &parentloc );
44df6: 2f02 movel %d2,%sp@-
44df8: 4eb9 0004 4f40 jsr 44f40 <rtems_filesystem_get_start_loc>
44dfe: 4fef 000c lea %sp@(12),%sp
/*
* Start from the parent to find the node that should be under it.
*/
loc = parentloc;
44e02: 2d52 ffd4 movel %a2@,%fp@(-44)
name = pathname + parentpathlen;
44e06: d682 addl %d2,%d3
name += rtems_filesystem_prefix_separators( name, strlen( name ) );
44e08: 47f9 0004 fe3c lea 4fe3c <strlen>,%a3
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
44e0e: 240e movel %fp,%d2
44e10: 0682 ffff ffd4 addil #-44,%d2
/*
* Start from the parent to find the node that should be under it.
*/
loc = parentloc;
44e16: 2d6e ffec ffd8 movel %fp@(-20),%fp@(-40)
44e1c: 2d6e fff0 ffdc movel %fp@(-16),%fp@(-36)
44e22: 2d6e fff4 ffe0 movel %fp@(-12),%fp@(-32)
44e28: 2d6e fff8 ffe4 movel %fp@(-8),%fp@(-28)
name = pathname + parentpathlen;
name += rtems_filesystem_prefix_separators( name, strlen( name ) );
44e2e: 2f03 movel %d3,%sp@-
44e30: 4e93 jsr %a3@
44e32: 2e80 movel %d0,%sp@
44e34: 2f03 movel %d3,%sp@-
44e36: 4eb9 0004 394c jsr 4394c <rtems_filesystem_prefix_separators>
44e3c: d680 addl %d0,%d3
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
44e3e: 2f03 movel %d3,%sp@-
44e40: 4e93 jsr %a3@
44e42: 4297 clrl %sp@
44e44: 2f02 movel %d2,%sp@-
44e46: 42a7 clrl %sp@-
44e48: 2f00 movel %d0,%sp@-
44e4a: 2f03 movel %d3,%sp@-
44e4c: 4eb9 0004 37cc jsr 437cc <rtems_filesystem_evaluate_relative_path>
0, &loc, false );
if ( result != 0 ) {
44e52: 4fef 001c lea %sp@(28),%sp
44e56: 4a80 tstl %d0
44e58: 6654 bnes 44eae <rmdir+0xe2>
}
/*
* Verify you can remove this node as a directory.
*/
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ){
44e5a: 206e ffe0 moveal %fp@(-32),%a0
44e5e: 2f02 movel %d2,%sp@-
44e60: 2068 0010 moveal %a0@(16),%a0
44e64: 4e90 jsr %a0@
44e66: 588f addql #4,%sp
44e68: 7201 moveq #1,%d1
44e6a: b280 cmpl %d0,%d1
44e6c: 6652 bnes 44ec0 <rmdir+0xf4>
/*
* Use the filesystems rmnod to remove the node.
*/
result = (*loc.handlers->rmnod_h)( &parentloc, &loc );
44e6e: 2f02 movel %d2,%sp@-
44e70: 206e ffdc moveal %fp@(-36),%a0
44e74: 2f0a movel %a2,%sp@-
44e76: 2068 0034 moveal %a0@(52),%a0
rtems_filesystem_freenode( &loc );
44e7a: 47f9 0004 3c2c lea 43c2c <rtems_filesystem_freenode>,%a3
/*
* Use the filesystems rmnod to remove the node.
*/
result = (*loc.handlers->rmnod_h)( &parentloc, &loc );
44e80: 4e90 jsr %a0@
44e82: 2600 movel %d0,%d3
rtems_filesystem_freenode( &loc );
44e84: 2f02 movel %d2,%sp@-
44e86: 4e93 jsr %a3@
if ( free_parentloc )
44e88: 4fef 000c lea %sp@(12),%sp
44e8c: 4a04 tstb %d4
44e8e: 660c bnes 44e9c <rmdir+0xd0>
rtems_filesystem_freenode( &parentloc );
return result;
}
44e90: 2003 movel %d3,%d0
44e92: 4cee 0c1c ffc0 moveml %fp@(-64),%d2-%d4/%a2-%a3
44e98: 4e5e unlk %fp
44e9a: 4e75 rts
result = (*loc.handlers->rmnod_h)( &parentloc, &loc );
rtems_filesystem_freenode( &loc );
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
44e9c: 2f0a movel %a2,%sp@-
44e9e: 4e93 jsr %a3@
44ea0: 588f addql #4,%sp
return result;
}
44ea2: 2003 movel %d3,%d0
44ea4: 4cee 0c1c ffc0 moveml %fp@(-64),%d2-%d4/%a2-%a3
44eaa: 4e5e unlk %fp
44eac: 4e75 rts
name += rtems_filesystem_prefix_separators( name, strlen( name ) );
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
0, &loc, false );
if ( result != 0 ) {
if ( free_parentloc )
44eae: 4a04 tstb %d4
44eb0: 664e bnes 44f00 <rmdir+0x134> <== NEVER TAKEN
rtems_filesystem_freenode( &parentloc );
return -1;
44eb2: 76ff moveq #-1,%d3
rtems_filesystem_freenode( &loc );
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
return result;
}
44eb4: 2003 movel %d3,%d0
44eb6: 4cee 0c1c ffc0 moveml %fp@(-64),%d2-%d4/%a2-%a3
44ebc: 4e5e unlk %fp
44ebe: 4e75 rts
/*
* Verify you can remove this node as a directory.
*/
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ){
rtems_filesystem_freenode( &loc );
44ec0: 2f02 movel %d2,%sp@-
44ec2: 47f9 0004 3c2c lea 43c2c <rtems_filesystem_freenode>,%a3
44ec8: 4e93 jsr %a3@
if ( free_parentloc )
44eca: 588f addql #4,%sp
44ecc: 4a04 tstb %d4
44ece: 661a bnes 44eea <rmdir+0x11e> <== ALWAYS TAKEN
rtems_filesystem_freenode( &parentloc );
rtems_set_errno_and_return_minus_one( ENOTDIR );
44ed0: 4eb9 0004 ea98 jsr 4ea98 <__errno> <== NOT EXECUTED
44ed6: 76ff moveq #-1,%d3 <== NOT EXECUTED
44ed8: 2040 moveal %d0,%a0 <== NOT EXECUTED
44eda: 7014 moveq #20,%d0 <== NOT EXECUTED
44edc: 2080 movel %d0,%a0@ <== NOT EXECUTED
rtems_filesystem_freenode( &loc );
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
return result;
}
44ede: 2003 movel %d3,%d0
44ee0: 4cee 0c1c ffc0 moveml %fp@(-64),%d2-%d4/%a2-%a3
44ee6: 4e5e unlk %fp
44ee8: 4e75 rts
* Verify you can remove this node as a directory.
*/
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ){
rtems_filesystem_freenode( &loc );
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
44eea: 2f0a movel %a2,%sp@-
rtems_set_errno_and_return_minus_one( ENOTDIR );
44eec: 76ff moveq #-1,%d3
* Verify you can remove this node as a directory.
*/
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ){
rtems_filesystem_freenode( &loc );
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
44eee: 4e93 jsr %a3@
44ef0: 588f addql #4,%sp
rtems_set_errno_and_return_minus_one( ENOTDIR );
44ef2: 4eb9 0004 ea98 jsr 4ea98 <__errno>
44ef8: 2040 moveal %d0,%a0
44efa: 7014 moveq #20,%d0
44efc: 2080 movel %d0,%a0@
44efe: 60de bras 44ede <rmdir+0x112>
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
0, &loc, false );
if ( result != 0 ) {
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
44f00: 2f0a movel %a2,%sp@- <== NOT EXECUTED
return -1;
44f02: 76ff moveq #-1,%d3 <== NOT EXECUTED
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
0, &loc, false );
if ( result != 0 ) {
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
44f04: 4eb9 0004 3c2c jsr 43c2c <rtems_filesystem_freenode> <== NOT EXECUTED
44f0a: 588f addql #4,%sp <== NOT EXECUTED
rtems_filesystem_freenode( &loc );
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
return result;
}
44f0c: 2003 movel %d3,%d0 <== NOT EXECUTED
44f0e: 4cee 0c1c ffc0 moveml %fp@(-64),%d2-%d4/%a2-%a3 <== NOT EXECUTED
44f14: 4e5e unlk %fp <== NOT EXECUTED
44f16: 4e75 rts <== NOT EXECUTED
parentpathlen = rtems_filesystem_dirname ( pathname );
if ( parentpathlen == 0 )
rtems_filesystem_get_start_loc( pathname, &i, &parentloc );
else {
result = rtems_filesystem_evaluate_path(pathname, parentpathlen,
44f18: 42a7 clrl %sp@-
44f1a: 45ee ffe8 lea %fp@(-24),%a2
44f1e: 2600 movel %d0,%d3
44f20: 2f0a movel %a2,%sp@-
44f22: 4878 0002 pea 2 <DOUBLE_FLOAT>
44f26: 2f00 movel %d0,%sp@-
44f28: 2f02 movel %d2,%sp@-
44f2a: 4eb9 0004 387c jsr 4387c <rtems_filesystem_evaluate_path>
RTEMS_LIBIO_PERMS_WRITE,
&parentloc,
false );
if ( result != 0 )
44f30: 4fef 0014 lea %sp@(20),%sp
44f34: 4a80 tstl %d0
44f36: 6600 ff7a bnew 44eb2 <rmdir+0xe6>
return -1;
free_parentloc = true;
44f3a: 7801 moveq #1,%d4
44f3c: 6000 fec4 braw 44e02 <rmdir+0x36>
0004d4c4 <rtems_assoc_local_by_remote_bitfield>:
uint32_t rtems_assoc_local_by_remote_bitfield(
const rtems_assoc_t *ap,
uint32_t remote_value
)
{
4d4c4: 4e56 ffe8 linkw %fp,#-24
4d4c8: 48d7 047c moveml %d2-%d6/%a2,%sp@
4d4cc: 2c2e 0008 movel %fp@(8),%d6
4d4d0: 7620 moveq #32,%d3
uint32_t b;
uint32_t local_value = 0;
4d4d2: 4285 clrl %d5
for (b = 1; b; b <<= 1) {
4d4d4: 7401 moveq #1,%d2
if (b & remote_value)
local_value |= rtems_assoc_local_by_remote(ap, b);
4d4d6: 45f9 0004 d50c lea 4d50c <rtems_assoc_local_by_remote>,%a2
uint32_t rtems_assoc_local_by_remote_bitfield(
const rtems_assoc_t *ap,
uint32_t remote_value
)
{
4d4dc: 282e 000c movel %fp@(12),%d4
uint32_t b;
uint32_t local_value = 0;
for (b = 1; b; b <<= 1) {
if (b & remote_value)
4d4e0: 2002 movel %d2,%d0
)
{
uint32_t b;
uint32_t local_value = 0;
for (b = 1; b; b <<= 1) {
4d4e2: 5383 subql #1,%d3
if (b & remote_value)
4d4e4: c084 andl %d4,%d0
4d4e6: 6612 bnes 4d4fa <rtems_assoc_local_by_remote_bitfield+0x36>
)
{
uint32_t b;
uint32_t local_value = 0;
for (b = 1; b; b <<= 1) {
4d4e8: d482 addl %d2,%d2
4d4ea: 4a83 tstl %d3
4d4ec: 66f2 bnes 4d4e0 <rtems_assoc_local_by_remote_bitfield+0x1c>
if (b & remote_value)
local_value |= rtems_assoc_local_by_remote(ap, b);
}
return local_value;
}
4d4ee: 2005 movel %d5,%d0
4d4f0: 4cee 047c ffe8 moveml %fp@(-24),%d2-%d6/%a2
4d4f6: 4e5e unlk %fp
4d4f8: 4e75 rts
uint32_t b;
uint32_t local_value = 0;
for (b = 1; b; b <<= 1) {
if (b & remote_value)
local_value |= rtems_assoc_local_by_remote(ap, b);
4d4fa: 2f02 movel %d2,%sp@-
)
{
uint32_t b;
uint32_t local_value = 0;
for (b = 1; b; b <<= 1) {
4d4fc: d482 addl %d2,%d2
if (b & remote_value)
local_value |= rtems_assoc_local_by_remote(ap, b);
4d4fe: 2f06 movel %d6,%sp@-
4d500: 4e92 jsr %a2@
4d502: 508f addql #8,%sp
4d504: 8a80 orl %d0,%d5
)
{
uint32_t b;
uint32_t local_value = 0;
for (b = 1; b; b <<= 1) {
4d506: 4a83 tstl %d3
4d508: 66d6 bnes 4d4e0 <rtems_assoc_local_by_remote_bitfield+0x1c><== ALWAYS TAKEN
4d50a: 60e2 bras 4d4ee <rtems_assoc_local_by_remote_bitfield+0x2a><== NOT EXECUTED
00043580 <rtems_assoc_name_by_local_bitfield>:
char *rtems_assoc_name_by_local_bitfield(
const rtems_assoc_t *ap,
uint32_t value,
char *buffer
)
{
43580: 4e56 ffe0 linkw %fp,#-32
43584: 48d7 3c3c moveml %d2-%d5/%a2-%a5,%sp@
43588: 246e 0010 moveal %fp@(16),%a2
uint32_t b;
*buffer = 0;
4358c: 7620 moveq #32,%d3
for (b = 1; b; b <<= 1) {
4358e: 7401 moveq #1,%d2
if (b & value) {
if (*buffer)
strcat(buffer, " ");
strcat(buffer, rtems_assoc_name_by_local(ap, b));
43590: 49f9 0004 35fc lea 435fc <rtems_assoc_name_by_local>,%a4
43596: 47f9 0004 f704 lea 4f704 <strcat>,%a3
*buffer = 0;
for (b = 1; b; b <<= 1) {
if (b & value) {
if (*buffer)
strcat(buffer, " ");
4359c: 4bf9 0004 fcc8 lea 4fcc8 <strlen>,%a5
char *buffer
)
{
uint32_t b;
*buffer = 0;
435a2: 4212 clrb %a2@
char *rtems_assoc_name_by_local_bitfield(
const rtems_assoc_t *ap,
uint32_t value,
char *buffer
)
{
435a4: 2a2e 0008 movel %fp@(8),%d5
435a8: 282e 000c movel %fp@(12),%d4
uint32_t b;
*buffer = 0;
for (b = 1; b; b <<= 1) {
if (b & value) {
435ac: 2002 movel %d2,%d0
{
uint32_t b;
*buffer = 0;
for (b = 1; b; b <<= 1) {
435ae: 5383 subql #1,%d3
if (b & value) {
435b0: c084 andl %d4,%d0
435b2: 6714 beqs 435c8 <rtems_assoc_name_by_local_bitfield+0x48>
if (*buffer)
435b4: 4a12 tstb %a2@
435b6: 6622 bnes 435da <rtems_assoc_name_by_local_bitfield+0x5a>
strcat(buffer, " ");
strcat(buffer, rtems_assoc_name_by_local(ap, b));
435b8: 2f02 movel %d2,%sp@-
435ba: 2f05 movel %d5,%sp@-
435bc: 4e94 jsr %a4@
435be: 2f00 movel %d0,%sp@-
435c0: 2f0a movel %a2,%sp@-
435c2: 4e93 jsr %a3@
435c4: 4fef 0010 lea %sp@(16),%sp
{
uint32_t b;
*buffer = 0;
for (b = 1; b; b <<= 1) {
435c8: d482 addl %d2,%d2
435ca: 4a83 tstl %d3
435cc: 66de bnes 435ac <rtems_assoc_name_by_local_bitfield+0x2c>
strcat(buffer, rtems_assoc_name_by_local(ap, b));
}
}
return buffer;
}
435ce: 200a movel %a2,%d0
435d0: 4cee 3c3c ffe0 moveml %fp@(-32),%d2-%d5/%a2-%a5
435d6: 4e5e unlk %fp
435d8: 4e75 rts
*buffer = 0;
for (b = 1; b; b <<= 1) {
if (b & value) {
if (*buffer)
strcat(buffer, " ");
435da: 2f0a movel %a2,%sp@-
435dc: 4e95 jsr %a5@
435de: 588f addql #4,%sp
435e0: 323c 2000 movew #8192,%d1
435e4: 3581 0800 movew %d1,%a2@(00000000,%d0:l)
strcat(buffer, rtems_assoc_name_by_local(ap, b));
435e8: 2f02 movel %d2,%sp@-
435ea: 2f05 movel %d5,%sp@-
435ec: 4e94 jsr %a4@
435ee: 2f00 movel %d0,%sp@-
435f0: 2f0a movel %a2,%sp@-
435f2: 4e93 jsr %a3@
435f4: 4fef 0010 lea %sp@(16),%sp
435f8: 60ce bras 435c8 <rtems_assoc_name_by_local_bitfield+0x48>
...
00043634 <rtems_assoc_name_by_remote_bitfield>:
char *rtems_assoc_name_by_remote_bitfield(
const rtems_assoc_t *ap,
uint32_t value,
char *buffer
)
{
43634: 4e56 ffe0 linkw %fp,#-32
43638: 48d7 3c3c moveml %d2-%d5/%a2-%a5,%sp@
4363c: 246e 0010 moveal %fp@(16),%a2
uint32_t b;
*buffer = 0;
43640: 7620 moveq #32,%d3
for (b = 1; b; b <<= 1) {
43642: 7401 moveq #1,%d2
if (b & value) {
if (*buffer)
strcat(buffer, " ");
strcat(buffer, rtems_assoc_name_by_remote(ap, b));
43644: 49f9 0004 36b0 lea 436b0 <rtems_assoc_name_by_remote>,%a4
4364a: 47f9 0004 f704 lea 4f704 <strcat>,%a3
*buffer = 0;
for (b = 1; b; b <<= 1) {
if (b & value) {
if (*buffer)
strcat(buffer, " ");
43650: 4bf9 0004 fcc8 lea 4fcc8 <strlen>,%a5
char *buffer
)
{
uint32_t b;
*buffer = 0;
43656: 4212 clrb %a2@
char *rtems_assoc_name_by_remote_bitfield(
const rtems_assoc_t *ap,
uint32_t value,
char *buffer
)
{
43658: 2a2e 0008 movel %fp@(8),%d5
4365c: 282e 000c movel %fp@(12),%d4
uint32_t b;
*buffer = 0;
for (b = 1; b; b <<= 1) {
if (b & value) {
43660: 2002 movel %d2,%d0
{
uint32_t b;
*buffer = 0;
for (b = 1; b; b <<= 1) {
43662: 5383 subql #1,%d3
if (b & value) {
43664: c084 andl %d4,%d0
43666: 6714 beqs 4367c <rtems_assoc_name_by_remote_bitfield+0x48>
if (*buffer)
43668: 4a12 tstb %a2@
4366a: 6622 bnes 4368e <rtems_assoc_name_by_remote_bitfield+0x5a>
strcat(buffer, " ");
strcat(buffer, rtems_assoc_name_by_remote(ap, b));
4366c: 2f02 movel %d2,%sp@-
4366e: 2f05 movel %d5,%sp@-
43670: 4e94 jsr %a4@
43672: 2f00 movel %d0,%sp@-
43674: 2f0a movel %a2,%sp@-
43676: 4e93 jsr %a3@
43678: 4fef 0010 lea %sp@(16),%sp
{
uint32_t b;
*buffer = 0;
for (b = 1; b; b <<= 1) {
4367c: d482 addl %d2,%d2
4367e: 4a83 tstl %d3
43680: 66de bnes 43660 <rtems_assoc_name_by_remote_bitfield+0x2c>
strcat(buffer, rtems_assoc_name_by_remote(ap, b));
}
}
return buffer;
}
43682: 200a movel %a2,%d0
43684: 4cee 3c3c ffe0 moveml %fp@(-32),%d2-%d5/%a2-%a5
4368a: 4e5e unlk %fp
4368c: 4e75 rts
*buffer = 0;
for (b = 1; b; b <<= 1) {
if (b & value) {
if (*buffer)
strcat(buffer, " ");
4368e: 2f0a movel %a2,%sp@-
43690: 4e95 jsr %a5@
43692: 588f addql #4,%sp
43694: 323c 2000 movew #8192,%d1
43698: 3581 0800 movew %d1,%a2@(00000000,%d0:l)
strcat(buffer, rtems_assoc_name_by_remote(ap, b));
4369c: 2f02 movel %d2,%sp@-
4369e: 2f05 movel %d5,%sp@-
436a0: 4e94 jsr %a4@
436a2: 2f00 movel %d0,%sp@-
436a4: 2f0a movel %a2,%sp@-
436a6: 4e93 jsr %a3@
436a8: 4fef 0010 lea %sp@(16),%sp
436ac: 60ce bras 4367c <rtems_assoc_name_by_remote_bitfield+0x48>
...
0004ae40 <rtems_assoc_ptr_by_local>:
const rtems_assoc_t *rtems_assoc_ptr_by_local(
const rtems_assoc_t *ap,
uint32_t local_value
)
{
4ae40: 4e56 0000 linkw %fp,#0
4ae44: 2f0a movel %a2,%sp@-
4ae46: 246e 0008 moveal %fp@(8),%a2
4ae4a: 2f02 movel %d2,%sp@-
4ae4c: 242e 000c movel %fp@(12),%d2
const rtems_assoc_t *default_ap = 0;
if (rtems_assoc_is_default(ap))
4ae50: 2012 movel %a2@,%d0
4ae52: 6742 beqs 4ae96 <rtems_assoc_ptr_by_local+0x56>
4ae54: 4879 0005 c226 pea 5c226 <IMFS_memfile_handlers+0x38>
4ae5a: 2f00 movel %d0,%sp@-
4ae5c: 4eb9 0004 e96c jsr 4e96c <strcmp>
4ae62: 508f addql #8,%sp
4ae64: 4a80 tstl %d0
4ae66: 662a bnes 4ae92 <rtems_assoc_ptr_by_local+0x52>
default_ap = ap++;
4ae68: 41ea 000c lea %a2@(12),%a0
for ( ; ap->name; ap++)
4ae6c: 4a90 tstl %a0@
4ae6e: 6714 beqs 4ae84 <rtems_assoc_ptr_by_local+0x44> <== NEVER TAKEN
4ae70: 200a movel %a2,%d0
4ae72: 2448 moveal %a0,%a2
if (ap->local_value == local_value)
4ae74: b4aa 0004 cmpl %a2@(4),%d2
4ae78: 670a beqs 4ae84 <rtems_assoc_ptr_by_local+0x44>
const rtems_assoc_t *default_ap = 0;
if (rtems_assoc_is_default(ap))
default_ap = ap++;
for ( ; ap->name; ap++)
4ae7a: 45ea 000c lea %a2@(12),%a2
4ae7e: 4a92 tstl %a2@
4ae80: 66f2 bnes 4ae74 <rtems_assoc_ptr_by_local+0x34>
4ae82: 2440 moveal %d0,%a2
if (ap->local_value == local_value)
return ap;
return default_ap;
}
4ae84: 200a movel %a2,%d0
4ae86: 242e fff8 movel %fp@(-8),%d2
4ae8a: 246e fffc moveal %fp@(-4),%a2
4ae8e: 4e5e unlk %fp
4ae90: 4e75 rts
const rtems_assoc_t *rtems_assoc_ptr_by_local(
const rtems_assoc_t *ap,
uint32_t local_value
)
{
const rtems_assoc_t *default_ap = 0;
4ae92: 4280 clrl %d0
4ae94: 60de bras 4ae74 <rtems_assoc_ptr_by_local+0x34>
4ae96: 95ca subal %a2,%a2
for ( ; ap->name; ap++)
if (ap->local_value == local_value)
return ap;
return default_ap;
}
4ae98: 200a movel %a2,%d0
4ae9a: 242e fff8 movel %fp@(-8),%d2
4ae9e: 246e fffc moveal %fp@(-4),%a2
4aea2: 4e5e unlk %fp
...
00043750 <rtems_assoc_ptr_by_name>:
const rtems_assoc_t *rtems_assoc_ptr_by_name(
const rtems_assoc_t *ap,
const char *name
)
{
43750: 4e56 ffec linkw %fp,#-20
43754: 48d7 0c1c moveml %d2-%d4/%a2-%a3,%sp@
43758: 246e 0008 moveal %fp@(8),%a2
4375c: 262e 000c movel %fp@(12),%d3
const rtems_assoc_t *default_ap = 0;
if (rtems_assoc_is_default(ap))
43760: 2412 movel %a2@,%d2
43762: 6748 beqs 437ac <rtems_assoc_ptr_by_name+0x5c>
43764: 4879 0005 ca13 pea 5ca13 <_rodata_start+0x603>
4376a: 47f9 0004 f770 lea 4f770 <strcmp>,%a3
43770: 2f02 movel %d2,%sp@-
43772: 4e93 jsr %a3@
43774: 508f addql #8,%sp
43776: 4a80 tstl %d0
43778: 662e bnes 437a8 <rtems_assoc_ptr_by_name+0x58>
default_ap = ap++;
4377a: 41ea 000c lea %a2@(12),%a0
for ( ; ap->name; ap++)
4377e: 2410 movel %a0@,%d2
43780: 671a beqs 4379c <rtems_assoc_ptr_by_name+0x4c> <== NEVER TAKEN
43782: 280a movel %a2,%d4
43784: 2448 moveal %a0,%a2
if (strcmp(ap->name, name) == 0)
43786: 2f03 movel %d3,%sp@-
43788: 2f02 movel %d2,%sp@-
4378a: 4e93 jsr %a3@
4378c: 508f addql #8,%sp
4378e: 4a80 tstl %d0
43790: 670a beqs 4379c <rtems_assoc_ptr_by_name+0x4c>
const rtems_assoc_t *default_ap = 0;
if (rtems_assoc_is_default(ap))
default_ap = ap++;
for ( ; ap->name; ap++)
43792: 45ea 000c lea %a2@(12),%a2
43796: 2412 movel %a2@,%d2
43798: 66ec bnes 43786 <rtems_assoc_ptr_by_name+0x36>
4379a: 2444 moveal %d4,%a2
if (strcmp(ap->name, name) == 0)
return ap;
return default_ap;
}
4379c: 200a movel %a2,%d0
4379e: 4cee 0c1c ffec moveml %fp@(-20),%d2-%d4/%a2-%a3
437a4: 4e5e unlk %fp
437a6: 4e75 rts
const rtems_assoc_t *rtems_assoc_ptr_by_name(
const rtems_assoc_t *ap,
const char *name
)
{
const rtems_assoc_t *default_ap = 0;
437a8: 4284 clrl %d4
437aa: 60da bras 43786 <rtems_assoc_ptr_by_name+0x36>
437ac: 95ca subal %a2,%a2
for ( ; ap->name; ap++)
if (strcmp(ap->name, name) == 0)
return ap;
return default_ap;
}
437ae: 200a movel %a2,%d0
437b0: 4cee 0c1c ffec moveml %fp@(-20),%d2-%d4/%a2-%a3
437b6: 4e5e unlk %fp
...
0004d544 <rtems_assoc_ptr_by_remote>:
const rtems_assoc_t *rtems_assoc_ptr_by_remote(
const rtems_assoc_t *ap,
uint32_t remote_value
)
{
4d544: 4e56 0000 linkw %fp,#0
4d548: 2f0a movel %a2,%sp@-
4d54a: 246e 0008 moveal %fp@(8),%a2
4d54e: 2f02 movel %d2,%sp@-
4d550: 242e 000c movel %fp@(12),%d2
const rtems_assoc_t *default_ap = 0;
if (rtems_assoc_is_default(ap))
4d554: 2012 movel %a2@,%d0
4d556: 6742 beqs 4d59a <rtems_assoc_ptr_by_remote+0x56> <== NEVER TAKEN
4d558: 4879 0005 c226 pea 5c226 <IMFS_memfile_handlers+0x38>
4d55e: 2f00 movel %d0,%sp@-
4d560: 4eb9 0004 e96c jsr 4e96c <strcmp>
4d566: 508f addql #8,%sp
4d568: 4a80 tstl %d0
4d56a: 662a bnes 4d596 <rtems_assoc_ptr_by_remote+0x52>
default_ap = ap++;
4d56c: 41ea 000c lea %a2@(12),%a0
for ( ; ap->name; ap++)
4d570: 4a90 tstl %a0@
4d572: 6714 beqs 4d588 <rtems_assoc_ptr_by_remote+0x44> <== NEVER TAKEN
4d574: 200a movel %a2,%d0
4d576: 2448 moveal %a0,%a2
if (ap->remote_value == remote_value)
4d578: b4aa 0008 cmpl %a2@(8),%d2
4d57c: 670a beqs 4d588 <rtems_assoc_ptr_by_remote+0x44>
const rtems_assoc_t *default_ap = 0;
if (rtems_assoc_is_default(ap))
default_ap = ap++;
for ( ; ap->name; ap++)
4d57e: 45ea 000c lea %a2@(12),%a2
4d582: 4a92 tstl %a2@
4d584: 66f2 bnes 4d578 <rtems_assoc_ptr_by_remote+0x34>
4d586: 2440 moveal %d0,%a2
if (ap->remote_value == remote_value)
return ap;
return default_ap;
}
4d588: 200a movel %a2,%d0
4d58a: 242e fff8 movel %fp@(-8),%d2
4d58e: 246e fffc moveal %fp@(-4),%a2
4d592: 4e5e unlk %fp
4d594: 4e75 rts
const rtems_assoc_t *rtems_assoc_ptr_by_remote(
const rtems_assoc_t *ap,
uint32_t remote_value
)
{
const rtems_assoc_t *default_ap = 0;
4d596: 4280 clrl %d0
4d598: 60de bras 4d578 <rtems_assoc_ptr_by_remote+0x34>
4d59a: 95ca subal %a2,%a2
for ( ; ap->name; ap++)
if (ap->remote_value == remote_value)
return ap;
return default_ap;
}
4d59c: 200a movel %a2,%d0
4d59e: 242e fff8 movel %fp@(-8),%d2
4d5a2: 246e fffc moveal %fp@(-4),%a2
4d5a6: 4e5e unlk %fp
...
00043824 <rtems_assoc_remote_by_local_bitfield>:
uint32_t rtems_assoc_remote_by_local_bitfield(
const rtems_assoc_t *ap,
uint32_t local_value
)
{
43824: 4e56 ffe8 linkw %fp,#-24
43828: 48d7 047c moveml %d2-%d6/%a2,%sp@
4382c: 2c2e 0008 movel %fp@(8),%d6
43830: 7620 moveq #32,%d3
uint32_t b;
uint32_t remote_value = 0;
43832: 4285 clrl %d5
for (b = 1; b; b <<= 1)
43834: 7401 moveq #1,%d2
if (b & local_value)
remote_value |= rtems_assoc_remote_by_local(ap, b);
43836: 45f9 0004 386c lea 4386c <rtems_assoc_remote_by_local>,%a2
uint32_t rtems_assoc_remote_by_local_bitfield(
const rtems_assoc_t *ap,
uint32_t local_value
)
{
4383c: 282e 000c movel %fp@(12),%d4
uint32_t b;
uint32_t remote_value = 0;
for (b = 1; b; b <<= 1)
if (b & local_value)
43840: 2002 movel %d2,%d0
)
{
uint32_t b;
uint32_t remote_value = 0;
for (b = 1; b; b <<= 1)
43842: 5383 subql #1,%d3
if (b & local_value)
43844: c084 andl %d4,%d0
43846: 6612 bnes 4385a <rtems_assoc_remote_by_local_bitfield+0x36>
)
{
uint32_t b;
uint32_t remote_value = 0;
for (b = 1; b; b <<= 1)
43848: d482 addl %d2,%d2
4384a: 4a83 tstl %d3
4384c: 66f2 bnes 43840 <rtems_assoc_remote_by_local_bitfield+0x1c>
if (b & local_value)
remote_value |= rtems_assoc_remote_by_local(ap, b);
return remote_value;
}
4384e: 2005 movel %d5,%d0
43850: 4cee 047c ffe8 moveml %fp@(-24),%d2-%d6/%a2
43856: 4e5e unlk %fp
43858: 4e75 rts
uint32_t b;
uint32_t remote_value = 0;
for (b = 1; b; b <<= 1)
if (b & local_value)
remote_value |= rtems_assoc_remote_by_local(ap, b);
4385a: 2f02 movel %d2,%sp@-
)
{
uint32_t b;
uint32_t remote_value = 0;
for (b = 1; b; b <<= 1)
4385c: d482 addl %d2,%d2
if (b & local_value)
remote_value |= rtems_assoc_remote_by_local(ap, b);
4385e: 2f06 movel %d6,%sp@-
43860: 4e92 jsr %a2@
43862: 508f addql #8,%sp
43864: 8a80 orl %d0,%d5
)
{
uint32_t b;
uint32_t remote_value = 0;
for (b = 1; b; b <<= 1)
43866: 4a83 tstl %d3
43868: 66d6 bnes 43840 <rtems_assoc_remote_by_local_bitfield+0x1c><== ALWAYS TAKEN
4386a: 60e2 bras 4384e <rtems_assoc_remote_by_local_bitfield+0x2a><== NOT EXECUTED
0004dd84 <rtems_barrier_create>:
rtems_name name,
rtems_attribute attribute_set,
uint32_t maximum_waiters,
rtems_id *id
)
{
4dd84: 4e56 ffe8 linkw %fp,#-24
4dd88: 202e 0010 movel %fp@(16),%d0
4dd8c: 48d7 0c0c moveml %d2-%d3/%a2-%a3,%sp@
4dd90: 242e 0008 movel %fp@(8),%d2
4dd94: 262e 000c movel %fp@(12),%d3
4dd98: 246e 0014 moveal %fp@(20),%a2
Barrier_Control *the_barrier;
CORE_barrier_Attributes the_attributes;
if ( !rtems_is_name_valid( name ) )
4dd9c: 4a82 tstl %d2
4dd9e: 677a beqs 4de1a <rtems_barrier_create+0x96> <== NEVER TAKEN
return RTEMS_INVALID_NAME;
if ( !id )
4dda0: 4a8a tstl %a2
4dda2: 6700 00cc beqw 4de70 <rtems_barrier_create+0xec>
return RTEMS_INVALID_ADDRESS;
/* Initialize core barrier attributes */
if ( _Attributes_Is_barrier_automatic( attribute_set ) ) {
4dda6: 0803 0004 btst #4,%d3
4ddaa: 677a beqs 4de26 <rtems_barrier_create+0xa2>
the_attributes.discipline = CORE_BARRIER_AUTOMATIC_RELEASE;
4ddac: 42ae fff8 clrl %fp@(-8)
if ( maximum_waiters == 0 )
4ddb0: 4a80 tstl %d0
4ddb2: 6700 00b0 beqw 4de64 <rtems_barrier_create+0xe0>
4ddb6: 2239 0005 feb4 movel 5feb4 <_Thread_Dispatch_disable_level>,%d1
4ddbc: 5281 addql #1,%d1
return RTEMS_INVALID_NUMBER;
} else
the_attributes.discipline = CORE_BARRIER_MANUAL_RELEASE;
the_attributes.maximum_count = maximum_waiters;
4ddbe: 2d40 fffc movel %d0,%fp@(-4)
4ddc2: 23c1 0005 feb4 movel %d1,5feb4 <_Thread_Dispatch_disable_level>
* This function allocates a barrier control block from
* the inactive chain of free barrier control blocks.
*/
RTEMS_INLINE_ROUTINE Barrier_Control *_Barrier_Allocate( void )
{
return (Barrier_Control *) _Objects_Allocate( &_Barrier_Information );
4ddc8: 4879 0006 0086 pea 60086 <_Barrier_Information>
4ddce: 4eb9 0004 9380 jsr 49380 <_Objects_Allocate>
_Thread_Disable_dispatch(); /* prevents deletion */
the_barrier = _Barrier_Allocate();
if ( !the_barrier ) {
4ddd4: 588f addql #4,%sp
4ddd6: 2640 moveal %d0,%a3
4ddd8: 4a80 tstl %d0
4ddda: 6776 beqs 4de52 <rtems_barrier_create+0xce> <== NEVER TAKEN
_Thread_Enable_dispatch();
return RTEMS_TOO_MANY;
}
the_barrier->attribute_set = attribute_set;
4dddc: 2743 0010 movel %d3,%a3@(16)
_CORE_barrier_Initialize( &the_barrier->Barrier, &the_attributes );
4dde0: 486e fff8 pea %fp@(-8)
4dde4: 486b 0014 pea %a3@(20)
4dde8: 4eb9 0004 e628 jsr 4e628 <_CORE_barrier_Initialize>
Objects_Name name
)
{
_Objects_Set_local_object(
information,
_Objects_Get_index( the_object->id ),
4ddee: 202b 0008 movel %a3@(8),%d0
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
4ddf2: 4281 clrl %d1
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
4ddf4: 2079 0006 009e moveal 6009e <_Barrier_Information+0x18>,%a0
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
4ddfa: 3200 movew %d0,%d1
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
4ddfc: 218b 1c00 movel %a3,%a0@(00000000,%d1:l:4)
information,
_Objects_Get_index( the_object->id ),
the_object
);
the_object->name = name;
4de00: 2742 000c movel %d2,%a3@(12)
&_Barrier_Information,
&the_barrier->Object,
(Objects_Name) name
);
*id = the_barrier->Object.id;
4de04: 2480 movel %d0,%a2@
_Thread_Enable_dispatch();
4de06: 4eb9 0004 a0a2 jsr 4a0a2 <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
4de0c: 508f addql #8,%sp
4de0e: 4280 clrl %d0
}
4de10: 4cee 0c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a3
4de16: 4e5e unlk %fp
4de18: 4e75 rts
{
Barrier_Control *the_barrier;
CORE_barrier_Attributes the_attributes;
if ( !rtems_is_name_valid( name ) )
return RTEMS_INVALID_NAME;
4de1a: 7003 moveq #3,%d0
*id = the_barrier->Object.id;
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
4de1c: 4cee 0c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a3
4de22: 4e5e unlk %fp
4de24: 4e75 rts
if ( _Attributes_Is_barrier_automatic( attribute_set ) ) {
the_attributes.discipline = CORE_BARRIER_AUTOMATIC_RELEASE;
if ( maximum_waiters == 0 )
return RTEMS_INVALID_NUMBER;
} else
the_attributes.discipline = CORE_BARRIER_MANUAL_RELEASE;
4de26: 7201 moveq #1,%d1
4de28: 2d41 fff8 movel %d1,%fp@(-8)
4de2c: 2239 0005 feb4 movel 5feb4 <_Thread_Dispatch_disable_level>,%d1
4de32: 5281 addql #1,%d1
the_attributes.maximum_count = maximum_waiters;
4de34: 2d40 fffc movel %d0,%fp@(-4)
4de38: 23c1 0005 feb4 movel %d1,5feb4 <_Thread_Dispatch_disable_level>
4de3e: 4879 0006 0086 pea 60086 <_Barrier_Information>
4de44: 4eb9 0004 9380 jsr 49380 <_Objects_Allocate>
_Thread_Disable_dispatch(); /* prevents deletion */
the_barrier = _Barrier_Allocate();
if ( !the_barrier ) {
4de4a: 588f addql #4,%sp
4de4c: 2640 moveal %d0,%a3
4de4e: 4a80 tstl %d0
4de50: 668a bnes 4dddc <rtems_barrier_create+0x58>
_Thread_Enable_dispatch();
4de52: 4eb9 0004 a0a2 jsr 4a0a2 <_Thread_Enable_dispatch>
return RTEMS_TOO_MANY;
4de58: 7005 moveq #5,%d0
*id = the_barrier->Object.id;
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
4de5a: 4cee 0c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a3
4de60: 4e5e unlk %fp
4de62: 4e75 rts
/* Initialize core barrier attributes */
if ( _Attributes_Is_barrier_automatic( attribute_set ) ) {
the_attributes.discipline = CORE_BARRIER_AUTOMATIC_RELEASE;
if ( maximum_waiters == 0 )
return RTEMS_INVALID_NUMBER;
4de64: 700a moveq #10,%d0
*id = the_barrier->Object.id;
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
4de66: 4cee 0c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a3
4de6c: 4e5e unlk %fp
4de6e: 4e75 rts
if ( !rtems_is_name_valid( name ) )
return RTEMS_INVALID_NAME;
if ( !id )
return RTEMS_INVALID_ADDRESS;
4de70: 7009 moveq #9,%d0
*id = the_barrier->Object.id;
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
4de72: 4cee 0c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a3
4de78: 4e5e unlk %fp <== NOT EXECUTED
00042760 <rtems_bsp_cmdline_get_param>:
const char *rtems_bsp_cmdline_get_param(
const char *name,
char *value,
size_t length
)
{
42760: 4e56 ffe8 linkw %fp,#-24
42764: 202e 0008 movel %fp@(8),%d0
42768: 48d7 0c3c moveml %d2-%d5/%a2-%a3,%sp@
4276c: 246e 000c moveal %fp@(12),%a2
const char *p;
if ( !name )
42770: 4a80 tstl %d0
42772: 660e bnes 42782 <rtems_bsp_cmdline_get_param+0x22>
value[0] = '\0';
p = rtems_bsp_cmdline_get_param_raw( name );
if ( !p )
return NULL;
42774: 95ca subal %a2,%a2
copy_string( p, value, length );
return value;
}
42776: 200a movel %a2,%d0
42778: 4cee 0c3c ffe8 moveml %fp@(-24),%d2-%d5/%a2-%a3
4277e: 4e5e unlk %fp
42780: 4e75 rts
const char *p;
if ( !name )
return NULL;
if ( !value )
42782: 4a8a tstl %a2
42784: 67f0 beqs 42776 <rtems_bsp_cmdline_get_param+0x16>
return NULL;
if ( !length )
42786: 4aae 0010 tstl %fp@(16)
4278a: 67e8 beqs 42774 <rtems_bsp_cmdline_get_param+0x14>
return NULL;
value[0] = '\0';
4278c: 4212 clrb %a2@
p = rtems_bsp_cmdline_get_param_raw( name );
4278e: 2f00 movel %d0,%sp@-
42790: 4eb9 0004 27f0 jsr 427f0 <rtems_bsp_cmdline_get_param_raw>
if ( !p )
42796: 588f addql #4,%sp
42798: 4a80 tstl %d0
4279a: 67d8 beqs 42774 <rtems_bsp_cmdline_get_param+0x14>
int i;
int quotes;
const char *p = start;
quotes=0;
for (i=0 ; *p && i<length-1; ) {
4279c: 2040 moveal %d0,%a0
4279e: 1210 moveb %a0@,%d1
427a0: 67d4 beqs 42776 <rtems_bsp_cmdline_get_param+0x16><== NEVER TAKEN
427a2: 282e 0010 movel %fp@(16),%d4
427a6: 5384 subql #1,%d4
427a8: 67cc beqs 42776 <rtems_bsp_cmdline_get_param+0x16><== NEVER TAKEN
value[i] = '\0';
}
}
const char *rtems_bsp_cmdline_get_param(
427aa: 2240 moveal %d0,%a1
427ac: 47ea 0001 lea %a2@(1),%a3
427b0: 5289 addql #1,%a1
int i;
int quotes;
const char *p = start;
quotes=0;
for (i=0 ; *p && i<length-1; ) {
427b2: 91c8 subal %a0,%a0
value[i] = '\0';
}
}
const char *rtems_bsp_cmdline_get_param(
427b4: 4280 clrl %d0
427b6: 4283 clrl %d3
int quotes;
const char *p = start;
quotes=0;
for (i=0 ; *p && i<length-1; ) {
if ( *p == '\"' ) {
427b8: 7a22 moveq #34,%d5
427ba: 1401 moveb %d1,%d2
427bc: 49c2 extbl %d2
427be: ba82 cmpl %d2,%d5
427c0: 672a beqs 427ec <rtems_bsp_cmdline_get_param+0x8c>
quotes++;
} else if ( ((quotes % 2) == 0) && *p == ' ' )
427c2: 0803 0000 btst #0,%d3
427c6: 6606 bnes 427ce <rtems_bsp_cmdline_get_param+0x6e>
427c8: 7a20 moveq #32,%d5
427ca: ba82 cmpl %d2,%d5
427cc: 67a8 beqs 42776 <rtems_bsp_cmdline_get_param+0x16>
break;
value[i++] = *p++;
427ce: 5280 addql #1,%d0
427d0: 1581 8800 moveb %d1,%a2@(00000000,%a0:l)
value[i] = '\0';
427d4: 421b clrb %a3@+
for (i=0 ; *p && i<length-1; ) {
if ( *p == '\"' ) {
quotes++;
} else if ( ((quotes % 2) == 0) && *p == ' ' )
break;
value[i++] = *p++;
427d6: 2040 moveal %d0,%a0
int i;
int quotes;
const char *p = start;
quotes=0;
for (i=0 ; *p && i<length-1; ) {
427d8: 1219 moveb %a1@+,%d1
427da: 679a beqs 42776 <rtems_bsp_cmdline_get_param+0x16>
427dc: b880 cmpl %d0,%d4
427de: 62d8 bhis 427b8 <rtems_bsp_cmdline_get_param+0x58><== ALWAYS TAKEN
return NULL;
copy_string( p, value, length );
return value;
}
427e0: 200a movel %a2,%d0 <== NOT EXECUTED
427e2: 4cee 0c3c ffe8 moveml %fp@(-24),%d2-%d5/%a2-%a3 <== NOT EXECUTED
427e8: 4e5e unlk %fp <== NOT EXECUTED
427ea: 4e75 rts <== NOT EXECUTED
const char *p = start;
quotes=0;
for (i=0 ; *p && i<length-1; ) {
if ( *p == '\"' ) {
quotes++;
427ec: 5283 addql #1,%d3
427ee: 60de bras 427ce <rtems_bsp_cmdline_get_param+0x6e>
000427f0 <rtems_bsp_cmdline_get_param_raw>:
extern const char *bsp_boot_cmdline;
const char *rtems_bsp_cmdline_get_param_raw(
const char *name
)
{
427f0: 4e56 0000 linkw %fp,#0
427f4: 202e 0008 movel %fp@(8),%d0
const char *p;
if ( !name )
427f8: 6606 bnes 42800 <rtems_bsp_cmdline_get_param_raw+0x10><== NEVER TAKEN
return NULL;
if ( !bsp_boot_cmdline )
return NULL;
427fa: 4280 clrl %d0
p = strstr(bsp_boot_cmdline, name);
/* printf( "raw: %p (%s)\n", p, p ); */
return p;
}
427fc: 4e5e unlk %fp
427fe: 4e75 rts
const char *p;
if ( !name )
return NULL;
if ( !bsp_boot_cmdline )
42800: 2239 0005 efd4 movel 5efd4 <bsp_boot_cmdline>,%d1
42806: 67f2 beqs 427fa <rtems_bsp_cmdline_get_param_raw+0xa><== NEVER TAKEN
return NULL;
p = strstr(bsp_boot_cmdline, name);
42808: 2f00 movel %d0,%sp@-
4280a: 2f01 movel %d1,%sp@-
4280c: 4eb9 0004 f974 jsr 4f974 <strstr>
42812: 508f addql #8,%sp
/* printf( "raw: %p (%s)\n", p, p ); */
return p;
}
42814: 4e5e unlk %fp <== NOT EXECUTED
00042818 <rtems_bsp_cmdline_get_param_rhs>:
const char *rtems_bsp_cmdline_get_param_rhs(
const char *name,
char *value,
size_t length
)
{
42818: 4e56 fff0 linkw %fp,#-16
4281c: 48d7 041c moveml %d2-%d4/%a2,%sp@
const char *p;
const char *rhs;
char *d;
p = rtems_bsp_cmdline_get_param( name, value, length );
42820: 2f2e 0010 movel %fp@(16),%sp@-
const char *rtems_bsp_cmdline_get_param_rhs(
const char *name,
char *value,
size_t length
)
{
42824: 242e 000c movel %fp@(12),%d2
42828: 282e 0008 movel %fp@(8),%d4
const char *p;
const char *rhs;
char *d;
p = rtems_bsp_cmdline_get_param( name, value, length );
4282c: 2f02 movel %d2,%sp@-
4282e: 2f04 movel %d4,%sp@-
42830: 4eb9 0004 2760 jsr 42760 <rtems_bsp_cmdline_get_param>
if ( !p )
42836: 4fef 000c lea %sp@(12),%sp
{
const char *p;
const char *rhs;
char *d;
p = rtems_bsp_cmdline_get_param( name, value, length );
4283a: 2600 movel %d0,%d3
if ( !p )
4283c: 660e bnes 4284c <rtems_bsp_cmdline_get_param_rhs+0x34>
return NULL;
rhs = &p[strlen(name)];
if ( *rhs != '=' )
return NULL;
4283e: 4282 clrl %d2
if ( *(d-1) == '\"' )
d--;
*d = '\0';
return value;
}
42840: 2002 movel %d2,%d0
42842: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2
42848: 4e5e unlk %fp
4284a: 4e75 rts
p = rtems_bsp_cmdline_get_param( name, value, length );
if ( !p )
return NULL;
rhs = &p[strlen(name)];
4284c: 2f04 movel %d4,%sp@-
4284e: 4eb9 0004 f4ec jsr 4f4ec <strlen>
42854: 588f addql #4,%sp
42856: 2243 moveal %d3,%a1
42858: d3c0 addal %d0,%a1
if ( *rhs != '=' )
4285a: 723d moveq #61,%d1
4285c: 1011 moveb %a1@,%d0
4285e: 49c0 extbl %d0
42860: b280 cmpl %d0,%d1
42862: 66da bnes 4283e <rtems_bsp_cmdline_get_param_rhs+0x26><== NEVER TAKEN
return NULL;
rhs++;
42864: 5289 addql #1,%a1
if ( *rhs == '\"' )
42866: 7622 moveq #34,%d3
42868: 1011 moveb %a1@,%d0
4286a: 1200 moveb %d0,%d1
4286c: 49c1 extbl %d1
4286e: b681 cmpl %d1,%d3
42870: 6730 beqs 428a2 <rtems_bsp_cmdline_get_param_rhs+0x8a>
rhs++;
for ( d=value ; *rhs ; )
42872: 4a00 tstb %d0
42874: 6732 beqs 428a8 <rtems_bsp_cmdline_get_param_rhs+0x90>
42876: 2042 moveal %d2,%a0
#include <string.h>
#include <rtems/bspcmdline.h>
const char *rtems_bsp_cmdline_get_param_rhs(
42878: 5289 addql #1,%a1
rhs++;
if ( *rhs == '\"' )
rhs++;
for ( d=value ; *rhs ; )
*d++ = *rhs++;
4287a: 10c0 moveb %d0,%a0@+
return NULL;
rhs++;
if ( *rhs == '\"' )
rhs++;
for ( d=value ; *rhs ; )
4287c: 1019 moveb %a1@+,%d0
*d++ = *rhs++;
4287e: 2448 moveal %a0,%a2
return NULL;
rhs++;
if ( *rhs == '\"' )
rhs++;
for ( d=value ; *rhs ; )
42880: 66f8 bnes 4287a <rtems_bsp_cmdline_get_param_rhs+0x62>
*d++ = *rhs++;
if ( *(d-1) == '\"' )
42882: 204a moveal %a2,%a0
42884: 7222 moveq #34,%d1
42886: 1020 moveb %a0@-,%d0
42888: 49c0 extbl %d0
4288a: b280 cmpl %d0,%d1
4288c: 670e beqs 4289c <rtems_bsp_cmdline_get_param_rhs+0x84>
d--;
*d = '\0';
4288e: 4212 clrb %a2@
return value;
}
42890: 2002 movel %d2,%d0
42892: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2
42898: 4e5e unlk %fp
4289a: 4e75 rts
rhs++;
if ( *rhs == '\"' )
rhs++;
for ( d=value ; *rhs ; )
*d++ = *rhs++;
if ( *(d-1) == '\"' )
4289c: 2448 moveal %a0,%a2
d--;
*d = '\0';
4289e: 4212 clrb %a2@
428a0: 60ee bras 42890 <rtems_bsp_cmdline_get_param_rhs+0x78>
if ( *rhs != '=' )
return NULL;
rhs++;
if ( *rhs == '\"' )
rhs++;
428a2: 5289 addql #1,%a1
428a4: 1011 moveb %a1@,%d0
428a6: 60ca bras 42872 <rtems_bsp_cmdline_get_param_rhs+0x5a>
for ( d=value ; *rhs ; )
428a8: 2442 moveal %d2,%a2
*d++ = *rhs++;
if ( *(d-1) == '\"' )
428aa: 204a moveal %a2,%a0
428ac: 7222 moveq #34,%d1
428ae: 1020 moveb %a0@-,%d0
428b0: 49c0 extbl %d0
428b2: b280 cmpl %d0,%d1
428b4: 66d8 bnes 4288e <rtems_bsp_cmdline_get_param_rhs+0x76><== ALWAYS TAKEN
428b6: 60e4 bras 4289c <rtems_bsp_cmdline_get_param_rhs+0x84><== NOT EXECUTED
00043210 <rtems_cpu_usage_report_with_plugin>:
void rtems_cpu_usage_report_with_plugin(
void *context,
rtems_printk_plugin_t print
)
{
43210: 4e56 ff9c linkw %fp,#-100
43214: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
43218: 262e 0008 movel %fp@(8),%d3
4321c: 286e 000c moveal %fp@(12),%a4
Timestamp_Control uptime, total, ran;
#else
uint32_t total_units = 0;
#endif
if ( !print )
43220: 4a8c tstl %a4
43222: 6700 013e beqw 43362 <rtems_cpu_usage_report_with_plugin+0x152>
* When not using nanosecond CPU usage resolution, we have to count
* 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__
_TOD_Get_uptime( &uptime );
43226: 486e fff0 pea %fp@(-16)
}
}
}
#endif
(*print)(
4322a: 41f9 0006 89ec lea 689ec <_Objects_Information_table+0x4>,%a0
* 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__
_TOD_Get_uptime( &uptime );
_Timestamp_Subtract( &CPU_usage_Uptime_at_last_reset, &uptime, &total );
43230: 2c0e movel %fp,%d6
43232: 0686 ffff ffe8 addil #-24,%d6
the_thread = (Thread_Control *)information->local_table[ i ];
if ( !the_thread )
continue;
rtems_object_get_name( the_thread->Object.id, sizeof(name), name );
43238: 280e movel %fp,%d4
if ( _Thread_Executing->Object.id == the_thread->Object.id ) {
Timestamp_Control used;
_Timestamp_Subtract(
&_Thread_Time_of_last_context_switch, &uptime, &used
);
_Timestamp_Add_to( &ran, &used );
4323a: 2a0e movel %fp,%d5
the_thread = (Thread_Control *)information->local_table[ i ];
if ( !the_thread )
continue;
rtems_object_get_name( the_thread->Object.id, sizeof(name), name );
4323c: 0684 ffff ffcb addil #-53,%d4
_Timestamp_Subtract(
&_Thread_Time_of_last_context_switch, &uptime, &used
);
_Timestamp_Add_to( &ran, &used );
};
_Timestamp_Divide( &ran, &total, &ival, &fval );
43242: 4bf9 0004 b1d4 lea 4b1d4 <_Timespec_Divide>,%a5
if ( _Thread_Executing->Object.id == the_thread->Object.id ) {
Timestamp_Control used;
_Timestamp_Subtract(
&_Thread_Time_of_last_context_switch, &uptime, &used
);
_Timestamp_Add_to( &ran, &used );
43248: 0685 ffff ffe0 addil #-32,%d5
}
}
}
#endif
(*print)(
4324e: 2d48 ffc4 movel %a0,%fp@(-60)
* When not using nanosecond CPU usage resolution, we have to count
* 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__
_TOD_Get_uptime( &uptime );
43252: 4eb9 0004 8e00 jsr 48e00 <_TOD_Get_uptime>
_Timestamp_Subtract( &CPU_usage_Uptime_at_last_reset, &uptime, &total );
43258: 2f06 movel %d6,%sp@-
4325a: 486e fff0 pea %fp@(-16)
4325e: 4879 0006 8c36 pea 68c36 <CPU_usage_Uptime_at_last_reset>
43264: 4eb9 0004 b2b8 jsr 4b2b8 <_Timespec_Subtract>
}
}
}
#endif
(*print)(
4326a: 4879 0005 dea6 pea 5dea6 <IntUartPollCallbacks.6194+0x20>
43270: 2f03 movel %d3,%sp@-
43272: 4e94 jsr %a4@
/*PAGE
*
* rtems_cpu_usage_report
*/
void rtems_cpu_usage_report_with_plugin(
43274: 4fef 0018 lea %sp@(24),%sp
);
for ( api_index = 1 ;
api_index <= OBJECTS_APIS_LAST ;
api_index++ ) {
if ( !_Objects_Information_table[ api_index ] )
43278: 226e ffc4 moveal %fp@(-60),%a1
4327c: 58ae ffc4 addql #4,%fp@(-60)
43280: 2059 moveal %a1@+,%a0
43282: 4a88 tstl %a0
43284: 6700 00ac beqw 43332 <rtems_cpu_usage_report_with_plugin+0x122>
continue;
information = _Objects_Information_table[ api_index ][ 1 ];
43288: 2668 0004 moveal %a0@(4),%a3
if ( information ) {
4328c: 4a8b tstl %a3
4328e: 6700 00a2 beqw 43332 <rtems_cpu_usage_report_with_plugin+0x122>
for ( i=1 ; i <= information->maximum ; i++ ) {
43292: 4a6b 000e tstw %a3@(14)
43296: 6700 009a beqw 43332 <rtems_cpu_usage_report_with_plugin+0x122>
4329a: 7401 moveq #1,%d2
the_thread = (Thread_Control *)information->local_table[ i ];
4329c: 206b 0018 moveal %a3@(24),%a0
432a0: 2470 2c00 moveal %a0@(00000000,%d2:l:4),%a2
api_index++ ) {
if ( !_Objects_Information_table[ api_index ] )
continue;
information = _Objects_Information_table[ api_index ][ 1 ];
if ( information ) {
for ( i=1 ; i <= information->maximum ; i++ ) {
432a4: 5282 addql #1,%d2
the_thread = (Thread_Control *)information->local_table[ i ];
if ( !the_thread )
432a6: 4a8a tstl %a2
432a8: 677c beqs 43326 <rtems_cpu_usage_report_with_plugin+0x116><== NEVER TAKEN
continue;
rtems_object_get_name( the_thread->Object.id, sizeof(name), name );
432aa: 2f04 movel %d4,%sp@-
432ac: 4878 000d pea d <OPER1+0x1>
432b0: 2f2a 0008 movel %a2@(8),%sp@-
432b4: 4eb9 0004 7a00 jsr 47a00 <rtems_object_get_name>
(*print)(
432ba: 2f04 movel %d4,%sp@-
432bc: 2f2a 0008 movel %a2@(8),%sp@-
432c0: 4879 0005 e018 pea 5e018 <IntUartPollCallbacks.6194+0x192>
432c6: 2f03 movel %d3,%sp@-
432c8: 4e94 jsr %a4@
/*
* If this is the currently executing thread, account for time
* since the last context switch.
*/
ran = the_thread->cpu_time_used;
if ( _Thread_Executing->Object.id == the_thread->Object.id ) {
432ca: 2079 0006 8c28 moveal 68c28 <_Per_CPU_Information+0xc>,%a0
432d0: 4fef 001c lea %sp@(28),%sp
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
/*
* If this is the currently executing thread, account for time
* since the last context switch.
*/
ran = the_thread->cpu_time_used;
432d4: 202a 0082 movel %a2@(130),%d0
432d8: 222a 0086 movel %a2@(134),%d1
if ( _Thread_Executing->Object.id == the_thread->Object.id ) {
432dc: 246a 0008 moveal %a2@(8),%a2
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
/*
* If this is the currently executing thread, account for time
* since the last context switch.
*/
ran = the_thread->cpu_time_used;
432e0: 2d40 ffe0 movel %d0,%fp@(-32)
432e4: 2d41 ffe4 movel %d1,%fp@(-28)
if ( _Thread_Executing->Object.id == the_thread->Object.id ) {
432e8: b5e8 0008 cmpal %a0@(8),%a2
432ec: 677e beqs 4336c <rtems_cpu_usage_report_with_plugin+0x15c>
_Timestamp_Subtract(
&_Thread_Time_of_last_context_switch, &uptime, &used
);
_Timestamp_Add_to( &ran, &used );
};
_Timestamp_Divide( &ran, &total, &ival, &fval );
432ee: 486e fff8 pea %fp@(-8)
/*
* Print the information
*/
(*print)( context,
432f2: 2e3c 0000 03e8 movel #1000,%d7
_Timestamp_Subtract(
&_Thread_Time_of_last_context_switch, &uptime, &used
);
_Timestamp_Add_to( &ran, &used );
};
_Timestamp_Divide( &ran, &total, &ival, &fval );
432f8: 486e fffc pea %fp@(-4)
432fc: 2f06 movel %d6,%sp@-
432fe: 2f05 movel %d5,%sp@-
43300: 4e95 jsr %a5@
/*
* Print the information
*/
(*print)( context,
43302: 2f2e fff8 movel %fp@(-8),%sp@-
43306: 202e ffe4 movel %fp@(-28),%d0
4330a: 2f2e fffc movel %fp@(-4),%sp@-
4330e: 4c47 0000 remul %d7,%d0,%d0
43312: 2f00 movel %d0,%sp@-
43314: 2f2e ffe0 movel %fp@(-32),%sp@-
43318: 4879 0005 e02b pea 5e02b <IntUartPollCallbacks.6194+0x1a5>
4331e: 2f03 movel %d3,%sp@-
43320: 4e94 jsr %a4@
43322: 4fef 0028 lea %sp@(40),%sp
api_index++ ) {
if ( !_Objects_Information_table[ api_index ] )
continue;
information = _Objects_Information_table[ api_index ][ 1 ];
if ( information ) {
for ( i=1 ; i <= information->maximum ; i++ ) {
43326: 4280 clrl %d0
43328: 302b 000e movew %a3@(14),%d0
4332c: b480 cmpl %d0,%d2
4332e: 6300 ff6c blsw 4329c <rtems_cpu_usage_report_with_plugin+0x8c>
" ID | NAME | TICKS | PERCENT\n"
#endif
"------------+----------------------------------------+---------------+---------\n"
);
for ( api_index = 1 ;
43332: 206e ffc4 moveal %fp@(-60),%a0
43336: b1fc 0006 89f8 cmpal #428536,%a0
4333c: 6600 ff3a bnew 43278 <rtems_cpu_usage_report_with_plugin+0x68>
}
}
}
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
(*print)(
43340: 202e ffec movel %fp@(-20),%d0
43344: 243c 0000 03e8 movel #1000,%d2
4334a: 4c42 0000 remul %d2,%d0,%d0
4334e: 2f00 movel %d0,%sp@-
43350: 2f2e ffe8 movel %fp@(-24),%sp@-
43354: 4879 0005 e043 pea 5e043 <IntUartPollCallbacks.6194+0x1bd>
4335a: 2f03 movel %d3,%sp@-
4335c: 4e94 jsr %a4@
4335e: 4fef 0010 lea %sp@(16),%sp
"-------------------------------------------------------------------------------\n",
_Watchdog_Ticks_since_boot - CPU_usage_Ticks_at_last_reset,
total_units
);
#endif
}
43362: 4cee 3cfc ff9c moveml %fp@(-100),%d2-%d7/%a2-%a5
43368: 4e5e unlk %fp
4336a: 4e75 rts
* since the last context switch.
*/
ran = the_thread->cpu_time_used;
if ( _Thread_Executing->Object.id == the_thread->Object.id ) {
Timestamp_Control used;
_Timestamp_Subtract(
4336c: 486e ffd8 pea %fp@(-40)
/*
* Print the information
*/
(*print)( context,
43370: 2e3c 0000 03e8 movel #1000,%d7
* since the last context switch.
*/
ran = the_thread->cpu_time_used;
if ( _Thread_Executing->Object.id == the_thread->Object.id ) {
Timestamp_Control used;
_Timestamp_Subtract(
43376: 486e fff0 pea %fp@(-16)
4337a: 4879 0006 8ada pea 68ada <_Thread_Time_of_last_context_switch>
43380: 4eb9 0004 b2b8 jsr 4b2b8 <_Timespec_Subtract>
&_Thread_Time_of_last_context_switch, &uptime, &used
);
_Timestamp_Add_to( &ran, &used );
43386: 486e ffd8 pea %fp@(-40)
4338a: 2f05 movel %d5,%sp@-
4338c: 4eb9 0004 b18c jsr 4b18c <_Timespec_Add_to>
43392: 4fef 0014 lea %sp@(20),%sp
};
_Timestamp_Divide( &ran, &total, &ival, &fval );
43396: 486e fff8 pea %fp@(-8)
4339a: 486e fffc pea %fp@(-4)
4339e: 2f06 movel %d6,%sp@-
433a0: 2f05 movel %d5,%sp@-
433a2: 4e95 jsr %a5@
/*
* Print the information
*/
(*print)( context,
433a4: 2f2e fff8 movel %fp@(-8),%sp@-
433a8: 202e ffe4 movel %fp@(-28),%d0
433ac: 2f2e fffc movel %fp@(-4),%sp@-
433b0: 4c47 0000 remul %d7,%d0,%d0
433b4: 2f00 movel %d0,%sp@-
433b6: 2f2e ffe0 movel %fp@(-32),%sp@-
433ba: 4879 0005 e02b pea 5e02b <IntUartPollCallbacks.6194+0x1a5>
433c0: 2f03 movel %d3,%sp@-
433c2: 4e94 jsr %a4@
433c4: 4fef 0028 lea %sp@(40),%sp
433c8: 6000 ff5c braw 43326 <rtems_cpu_usage_report_with_plugin+0x116>
0004d9f0 <rtems_deviceio_errno>:
[RTEMS_IO_ERROR] = EIO,
[RTEMS_PROXY_BLOCKING] = EIO
};
int rtems_deviceio_errno(rtems_status_code sc)
{
4d9f0: 4e56 0000 linkw %fp,#0
4d9f4: 202e 0008 movel %fp@(8),%d0
4d9f8: 2f02 movel %d2,%sp@-
if (sc == RTEMS_SUCCESSFUL) {
4d9fa: 4a80 tstl %d0
4d9fc: 660a bnes 4da08 <rtems_deviceio_errno+0x18> <== NEVER TAKEN
errno = eno;
return -1;
}
}
4d9fe: 242e fffc movel %fp@(-4),%d2
};
int rtems_deviceio_errno(rtems_status_code sc)
{
if (sc == RTEMS_SUCCESSFUL) {
return 0;
4da02: 4280 clrl %d0
errno = eno;
return -1;
}
}
4da04: 4e5e unlk %fp
4da06: 4e75 rts
if (sc == RTEMS_SUCCESSFUL) {
return 0;
} else {
int eno = EINVAL;
if ((unsigned) sc <= RTEMS_STATUS_CODES_LAST) {
4da08: 721c moveq #28,%d1 <== NOT EXECUTED
4da0a: b280 cmpl %d0,%d1 <== NOT EXECUTED
4da0c: 651e bcss 4da2c <rtems_deviceio_errno+0x3c> <== NOT EXECUTED
eno = status_code_to_errno [sc];
4da0e: 41f9 0005 c2c4 lea 5c2c4 <status_code_to_errno>,%a0 <== NOT EXECUTED
4da14: 2430 0c00 movel %a0@(00000000,%d0:l:4),%d2 <== NOT EXECUTED
}
errno = eno;
4da18: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
4da1e: 2040 moveal %d0,%a0 <== NOT EXECUTED
return -1;
4da20: 70ff moveq #-1,%d0 <== NOT EXECUTED
if ((unsigned) sc <= RTEMS_STATUS_CODES_LAST) {
eno = status_code_to_errno [sc];
}
errno = eno;
4da22: 2082 movel %d2,%a0@ <== NOT EXECUTED
return -1;
}
}
4da24: 242e fffc movel %fp@(-4),%d2 <== NOT EXECUTED
4da28: 4e5e unlk %fp <== NOT EXECUTED
4da2a: 4e75 rts <== NOT EXECUTED
if ((unsigned) sc <= RTEMS_STATUS_CODES_LAST) {
eno = status_code_to_errno [sc];
}
errno = eno;
4da2c: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
int rtems_deviceio_errno(rtems_status_code sc)
{
if (sc == RTEMS_SUCCESSFUL) {
return 0;
} else {
int eno = EINVAL;
4da32: 7416 moveq #22,%d2 <== NOT EXECUTED
if ((unsigned) sc <= RTEMS_STATUS_CODES_LAST) {
eno = status_code_to_errno [sc];
}
errno = eno;
4da34: 2040 moveal %d0,%a0 <== NOT EXECUTED
return -1;
4da36: 70ff moveq #-1,%d0 <== NOT EXECUTED
if ((unsigned) sc <= RTEMS_STATUS_CODES_LAST) {
eno = status_code_to_errno [sc];
}
errno = eno;
4da38: 2082 movel %d2,%a0@ <== NOT EXECUTED
4da3a: 60e8 bras 4da24 <rtems_deviceio_errno+0x34> <== NOT EXECUTED
0004852c <rtems_extension_create>:
rtems_status_code rtems_extension_create(
rtems_name name,
const rtems_extensions_table *extension_table,
rtems_id *id
)
{
4852c: 4e56 fff4 linkw %fp,#-12
48530: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
48534: 242e 0008 movel %fp@(8),%d2
48538: 246e 0010 moveal %fp@(16),%a2
Extension_Control *the_extension;
if ( !id )
4853c: 4a8a tstl %a2
4853e: 6700 00a0 beqw 485e0 <rtems_extension_create+0xb4>
return RTEMS_INVALID_ADDRESS;
if ( !rtems_is_name_valid( name ) )
48542: 4a82 tstl %d2
48544: 660c bnes 48552 <rtems_extension_create+0x26>
return RTEMS_INVALID_NAME;
48546: 7003 moveq #3,%d0
);
*id = the_extension->Object.id;
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
48548: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3
4854e: 4e5e unlk %fp
48550: 4e75 rts
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
48552: 2039 0006 8a2c movel 68a2c <_Thread_Dispatch_disable_level>,%d0
48558: 5280 addql #1,%d0
4855a: 23c0 0006 8a2c movel %d0,68a2c <_Thread_Dispatch_disable_level>
#ifndef __EXTENSION_MANAGER_inl
#define __EXTENSION_MANAGER_inl
RTEMS_INLINE_ROUTINE Extension_Control *_Extension_Allocate( void )
{
return (Extension_Control *) _Objects_Allocate( &_Extension_Information );
48560: 4879 0006 8bb8 pea 68bb8 <_Extension_Information>
48566: 4eb9 0004 94cc jsr 494cc <_Objects_Allocate>
_Thread_Disable_dispatch(); /* to prevent deletion */
the_extension = _Extension_Allocate();
if ( !the_extension ) {
4856c: 588f addql #4,%sp
4856e: 2640 moveal %d0,%a3
48570: 4a80 tstl %d0
48572: 675a beqs 485ce <rtems_extension_create+0xa2> <== NEVER TAKEN
RTEMS_INLINE_ROUTINE void _User_extensions_Add_set_with_table(
User_extensions_Control *extension,
const User_extensions_Table *extension_table
)
{
extension->Callouts = *extension_table;
48574: 206e 000c moveal %fp@(12),%a0
48578: 2758 0024 movel %a0@+,%a3@(36)
4857c: 2758 0028 movel %a0@+,%a3@(40)
48580: 2758 002c movel %a0@+,%a3@(44)
48584: 2758 0030 movel %a0@+,%a3@(48)
48588: 2758 0034 movel %a0@+,%a3@(52)
4858c: 2758 0038 movel %a0@+,%a3@(56)
48590: 2758 003c movel %a0@+,%a3@(60)
48594: 2750 0040 movel %a0@,%a3@(64)
_User_extensions_Add_set( extension );
48598: 486b 0010 pea %a3@(16)
4859c: 4eb9 0004 b308 jsr 4b308 <_User_extensions_Add_set>
Objects_Name name
)
{
_Objects_Set_local_object(
information,
_Objects_Get_index( the_object->id ),
485a2: 202b 0008 movel %a3@(8),%d0
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
485a6: 4281 clrl %d1
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
485a8: 2079 0006 8bd0 moveal 68bd0 <_Extension_Information+0x18>,%a0
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
485ae: 3200 movew %d0,%d1
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
485b0: 218b 1c00 movel %a3,%a0@(00000000,%d1:l:4)
information,
_Objects_Get_index( the_object->id ),
the_object
);
the_object->name = name;
485b4: 2742 000c movel %d2,%a3@(12)
&_Extension_Information,
&the_extension->Object,
(Objects_Name) name
);
*id = the_extension->Object.id;
485b8: 2480 movel %d0,%a2@
_Thread_Enable_dispatch();
485ba: 4eb9 0004 a2e2 jsr 4a2e2 <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
485c0: 588f addql #4,%sp
485c2: 4280 clrl %d0
}
485c4: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3
485ca: 4e5e unlk %fp
485cc: 4e75 rts
_Thread_Disable_dispatch(); /* to prevent deletion */
the_extension = _Extension_Allocate();
if ( !the_extension ) {
_Thread_Enable_dispatch();
485ce: 4eb9 0004 a2e2 jsr 4a2e2 <_Thread_Enable_dispatch>
return RTEMS_TOO_MANY;
485d4: 7005 moveq #5,%d0
);
*id = the_extension->Object.id;
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
485d6: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3
485dc: 4e5e unlk %fp
485de: 4e75 rts
)
{
Extension_Control *the_extension;
if ( !id )
return RTEMS_INVALID_ADDRESS;
485e0: 7009 moveq #9,%d0
);
*id = the_extension->Object.id;
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
485e2: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3
485e8: 4e5e unlk %fp <== NOT EXECUTED
00042d0e <rtems_filesystem_dirname>:
int rtems_filesystem_dirname(
const char *pathname
)
{
42d0e: 4e56 fff4 linkw %fp,#-12
42d12: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
42d16: 246e 0008 moveal %fp@(8),%a2
int len = strlen( pathname );
42d1a: 2f0a movel %a2,%sp@-
42d1c: 4eb9 0004 eec4 jsr 4eec4 <strlen>
42d22: 588f addql #4,%sp
42d24: 2400 movel %d0,%d2
while ( len ) {
42d26: 671c beqs 42d44 <rtems_filesystem_dirname+0x36> <== NEVER TAKEN
flags,
pathloc,
follow_link );
}
int rtems_filesystem_dirname(
42d28: d5c0 addal %d0,%a2
42d2a: 47f9 0004 3cdc lea 43cdc <rtems_filesystem_is_separator>,%a3
)
{
int len = strlen( pathname );
while ( len ) {
len--;
42d30: 5382 subql #1,%d2
if ( rtems_filesystem_is_separator( pathname[len] ) )
42d32: 1022 moveb %a2@-,%d0
42d34: 49c0 extbl %d0
42d36: 2f00 movel %d0,%sp@-
42d38: 4e93 jsr %a3@
42d3a: 588f addql #4,%sp
42d3c: 4a80 tstl %d0
42d3e: 6604 bnes 42d44 <rtems_filesystem_dirname+0x36>
const char *pathname
)
{
int len = strlen( pathname );
while ( len ) {
42d40: 4a82 tstl %d2
42d42: 66ec bnes 42d30 <rtems_filesystem_dirname+0x22>
if ( rtems_filesystem_is_separator( pathname[len] ) )
break;
}
return len;
}
42d44: 2002 movel %d2,%d0
42d46: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3
42d4c: 4e5e unlk %fp <== NOT EXECUTED
00042c80 <rtems_filesystem_evaluate_path>:
size_t pathnamelen,
int flags,
rtems_filesystem_location_info_t *pathloc,
int follow_link
)
{
42c80: 4e56 fffc linkw %fp,#-4
42c84: 2f0a movel %a2,%sp@-
42c86: 246e 0008 moveal %fp@(8),%a2
42c8a: 2f02 movel %d2,%sp@-
42c8c: 242e 0014 movel %fp@(20),%d2
int i = 0;
42c90: 42ae fffc clrl %fp@(-4)
/*
* Verify Input parameters.
*/
if ( !pathname )
42c94: 4a8a tstl %a2
42c96: 675c beqs 42cf4 <rtems_filesystem_evaluate_path+0x74><== NEVER TAKEN
rtems_set_errno_and_return_minus_one( EFAULT );
if ( !pathloc )
42c98: 4a82 tstl %d2
42c9a: 673e beqs 42cda <rtems_filesystem_evaluate_path+0x5a><== NEVER TAKEN
/*
* Evaluate the path using the optable evalpath.
*/
rtems_filesystem_get_start_loc( pathname, &i, pathloc );
42c9c: 2f02 movel %d2,%sp@-
42c9e: 486e fffc pea %fp@(-4)
42ca2: 2f0a movel %a2,%sp@-
42ca4: 4eb9 0004 3c68 jsr 43c68 <rtems_filesystem_get_start_loc>
/*
* We evaluation the path relative to the start location we get got.
*/
return rtems_filesystem_evaluate_relative_path( &pathname[i],
42caa: 2f2e 0018 movel %fp@(24),%sp@-
42cae: 2f02 movel %d2,%sp@-
42cb0: 2f2e 0010 movel %fp@(16),%sp@-
42cb4: 202e fffc movel %fp@(-4),%d0
42cb8: 222e 000c movel %fp@(12),%d1
42cbc: 9280 subl %d0,%d1
42cbe: 2f01 movel %d1,%sp@-
42cc0: 4872 0800 pea %a2@(00000000,%d0:l)
42cc4: 4eb9 0004 2bd0 jsr 42bd0 <rtems_filesystem_evaluate_relative_path>
pathnamelen - i,
flags,
pathloc,
follow_link );
}
42cca: 242e fff4 movel %fp@(-12),%d2
rtems_filesystem_get_start_loc( pathname, &i, pathloc );
/*
* We evaluation the path relative to the start location we get got.
*/
return rtems_filesystem_evaluate_relative_path( &pathname[i],
42cce: 4fef 0020 lea %sp@(32),%sp
pathnamelen - i,
flags,
pathloc,
follow_link );
}
42cd2: 246e fff8 moveal %fp@(-8),%a2
42cd6: 4e5e unlk %fp
42cd8: 4e75 rts
if ( !pathname )
rtems_set_errno_and_return_minus_one( EFAULT );
if ( !pathloc )
rtems_set_errno_and_return_minus_one( EIO ); /* should never happen */
42cda: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
42ce0: 7405 moveq #5,%d2 <== NOT EXECUTED
42ce2: 2040 moveal %d0,%a0 <== NOT EXECUTED
42ce4: 70ff moveq #-1,%d0 <== NOT EXECUTED
42ce6: 2082 movel %d2,%a0@ <== NOT EXECUTED
return rtems_filesystem_evaluate_relative_path( &pathname[i],
pathnamelen - i,
flags,
pathloc,
follow_link );
}
42ce8: 242e fff4 movel %fp@(-12),%d2 <== NOT EXECUTED
42cec: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
42cf0: 4e5e unlk %fp <== NOT EXECUTED
42cf2: 4e75 rts <== NOT EXECUTED
/*
* Verify Input parameters.
*/
if ( !pathname )
rtems_set_errno_and_return_minus_one( EFAULT );
42cf4: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
return rtems_filesystem_evaluate_relative_path( &pathname[i],
pathnamelen - i,
flags,
pathloc,
follow_link );
}
42cfa: 242e fff4 movel %fp@(-12),%d2 <== NOT EXECUTED
/*
* Verify Input parameters.
*/
if ( !pathname )
rtems_set_errno_and_return_minus_one( EFAULT );
42cfe: 2040 moveal %d0,%a0 <== NOT EXECUTED
42d00: 720e moveq #14,%d1 <== NOT EXECUTED
42d02: 70ff moveq #-1,%d0 <== NOT EXECUTED
return rtems_filesystem_evaluate_relative_path( &pathname[i],
pathnamelen - i,
flags,
pathloc,
follow_link );
}
42d04: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
42d08: 4e5e unlk %fp <== NOT EXECUTED
/*
* Verify Input parameters.
*/
if ( !pathname )
rtems_set_errno_and_return_minus_one( EFAULT );
42d0a: 2081 movel %d1,%a0@ <== NOT EXECUTED
return rtems_filesystem_evaluate_relative_path( &pathname[i],
pathnamelen - i,
flags,
pathloc,
follow_link );
}
00042bd0 <rtems_filesystem_evaluate_relative_path>:
size_t pathnamelen,
int flags,
rtems_filesystem_location_info_t *pathloc,
int follow_link
)
{
42bd0: 4e56 fff0 linkw %fp,#-16
42bd4: 202e 0008 movel %fp@(8),%d0
42bd8: 48d7 041c moveml %d2-%d4/%a2,%sp@
42bdc: 222e 000c movel %fp@(12),%d1
42be0: 262e 0010 movel %fp@(16),%d3
42be4: 246e 0014 moveal %fp@(20),%a2
42be8: 282e 0018 movel %fp@(24),%d4
/*
* Verify Input parameters.
*/
if ( !pathname )
42bec: 4a80 tstl %d0
42bee: 6776 beqs 42c66 <rtems_filesystem_evaluate_relative_path+0x96><== NEVER TAKEN
rtems_set_errno_and_return_minus_one( EFAULT );
if ( !pathloc )
42bf0: 4a8a tstl %a2
42bf2: 6758 beqs 42c4c <rtems_filesystem_evaluate_relative_path+0x7c><== NEVER TAKEN
rtems_set_errno_and_return_minus_one( EIO ); /* should never happen */
result = (*pathloc->ops->evalpath_h)( pathname, pathnamelen, flags, pathloc );
42bf4: 2f0a movel %a2,%sp@-
42bf6: 206a 000c moveal %a2@(12),%a0
42bfa: 2f03 movel %d3,%sp@-
42bfc: 2f01 movel %d1,%sp@-
42bfe: 2f00 movel %d0,%sp@-
42c00: 2050 moveal %a0@,%a0
42c02: 4e90 jsr %a0@
/*
* Get the Node type and determine if you need to follow the link or
* not.
*/
if ( (result == 0) && follow_link ) {
42c04: 4fef 0010 lea %sp@(16),%sp
rtems_set_errno_and_return_minus_one( EFAULT );
if ( !pathloc )
rtems_set_errno_and_return_minus_one( EIO ); /* should never happen */
result = (*pathloc->ops->evalpath_h)( pathname, pathnamelen, flags, pathloc );
42c08: 2400 movel %d0,%d2
/*
* Get the Node type and determine if you need to follow the link or
* not.
*/
if ( (result == 0) && follow_link ) {
42c0a: 6604 bnes 42c10 <rtems_filesystem_evaluate_relative_path+0x40>
42c0c: 4a84 tstl %d4
42c0e: 660c bnes 42c1c <rtems_filesystem_evaluate_relative_path+0x4c>
result = (*pathloc->ops->eval_link_h)( pathloc, flags );
}
}
return result;
}
42c10: 2002 movel %d2,%d0
42c12: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2
42c18: 4e5e unlk %fp
42c1a: 4e75 rts
* not.
*/
if ( (result == 0) && follow_link ) {
type = (*pathloc->ops->node_type_h)( pathloc );
42c1c: 206a 000c moveal %a2@(12),%a0
42c20: 2f0a movel %a2,%sp@-
42c22: 2068 0010 moveal %a0@(16),%a0
42c26: 4e90 jsr %a0@
if ( ( type == RTEMS_FILESYSTEM_HARD_LINK ) ||
42c28: 588f addql #4,%sp
42c2a: 7201 moveq #1,%d1
42c2c: 5780 subql #3,%d0
42c2e: b280 cmpl %d0,%d1
42c30: 65de bcss 42c10 <rtems_filesystem_evaluate_relative_path+0x40>
* pathloc will be passed up (and eventually released).
* Hence, the (valid) originial node that we submit to
* eval_link_h() should be released by the handler.
*/
result = (*pathloc->ops->eval_link_h)( pathloc, flags );
42c32: 206a 000c moveal %a2@(12),%a0
42c36: 2d43 000c movel %d3,%fp@(12)
42c3a: 2d4a 0008 movel %a2,%fp@(8)
42c3e: 2268 0034 moveal %a0@(52),%a1
}
}
return result;
}
42c42: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2
42c48: 4e5e unlk %fp
* pathloc will be passed up (and eventually released).
* Hence, the (valid) originial node that we submit to
* eval_link_h() should be released by the handler.
*/
result = (*pathloc->ops->eval_link_h)( pathloc, flags );
42c4a: 4ed1 jmp %a1@
if ( !pathname )
rtems_set_errno_and_return_minus_one( EFAULT );
if ( !pathloc )
rtems_set_errno_and_return_minus_one( EIO ); /* should never happen */
42c4c: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
42c52: 74ff moveq #-1,%d2 <== NOT EXECUTED
42c54: 2040 moveal %d0,%a0 <== NOT EXECUTED
42c56: 7005 moveq #5,%d0 <== NOT EXECUTED
42c58: 2080 movel %d0,%a0@ <== NOT EXECUTED
result = (*pathloc->ops->eval_link_h)( pathloc, flags );
}
}
return result;
}
42c5a: 2002 movel %d2,%d0 <== NOT EXECUTED
42c5c: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2 <== NOT EXECUTED
42c62: 4e5e unlk %fp <== NOT EXECUTED
42c64: 4e75 rts <== NOT EXECUTED
/*
* Verify Input parameters.
*/
if ( !pathname )
rtems_set_errno_and_return_minus_one( EFAULT );
42c66: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
42c6c: 74ff moveq #-1,%d2 <== NOT EXECUTED
42c6e: 720e moveq #14,%d1 <== NOT EXECUTED
42c70: 2040 moveal %d0,%a0 <== NOT EXECUTED
result = (*pathloc->ops->eval_link_h)( pathloc, flags );
}
}
return result;
}
42c72: 2002 movel %d2,%d0 <== NOT EXECUTED
42c74: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2 <== NOT EXECUTED
/*
* Verify Input parameters.
*/
if ( !pathname )
rtems_set_errno_and_return_minus_one( EFAULT );
42c7a: 2081 movel %d1,%a0@ <== NOT EXECUTED
result = (*pathloc->ops->eval_link_h)( pathloc, flags );
}
}
return result;
}
42c7c: 4e5e unlk %fp <== NOT EXECUTED
0004b3c4 <rtems_filesystem_get_mount_handler>:
rtems_filesystem_fsmount_me_t
rtems_filesystem_get_mount_handler(
const char *type
)
{
4b3c4: 4e56 fff8 linkw %fp,#-8
4b3c8: 202e 0008 movel %fp@(8),%d0
find_arg fa = {
4b3cc: 42ae fffc clrl %fp@(-4)
4b3d0: 2d40 fff8 movel %d0,%fp@(-8)
.type = type,
.mount_h = NULL
};
if ( type != NULL ) {
4b3d4: 6718 beqs 4b3ee <rtems_filesystem_get_mount_handler+0x2a><== NEVER TAKEN
rtems_filesystem_iterate( find_handler, &fa );
4b3d6: 486e fff8 pea %fp@(-8)
4b3da: 487a fefc pea %pc@(4b2d8 <find_handler>)
4b3de: 4eb9 0004 b31a jsr 4b31a <rtems_filesystem_iterate>
4b3e4: 202e fffc movel %fp@(-4),%d0
4b3e8: 508f addql #8,%sp
}
return fa.mount_h;
}
4b3ea: 4e5e unlk %fp
4b3ec: 4e75 rts
find_arg fa = {
.type = type,
.mount_h = NULL
};
if ( type != NULL ) {
4b3ee: 4280 clrl %d0 <== NOT EXECUTED
rtems_filesystem_iterate( find_handler, &fa );
}
return fa.mount_h;
}
4b3f0: 4e5e unlk %fp <== NOT EXECUTED
00042828 <rtems_filesystem_initialize>:
/*
* Set the default umask to "022".
*/
rtems_filesystem_umask = 022;
42828: 7012 moveq #18,%d0
* configuration is a single instantiation of the IMFS or miniIMFS with
* a single "/dev" directory in it.
*/
void rtems_filesystem_initialize( void )
{
4282a: 4e56 ffe0 linkw %fp,#-32
/*
* Set the default umask to "022".
*/
rtems_filesystem_umask = 022;
4282e: 2079 0005 cd60 moveal 5cd60 <rtems_current_user_env>,%a0
* configuration is a single instantiation of the IMFS or miniIMFS with
* a single "/dev" directory in it.
*/
void rtems_filesystem_initialize( void )
{
42834: 48d7 1c00 moveml %a2-%a4,%sp@
/*
* Set the default umask to "022".
*/
rtems_filesystem_umask = 022;
42838: 2140 002c movel %d0,%a0@(44)
/*
* mount the first filesystem.
*/
if ( rtems_filesystem_mount_table_size == 0 )
4283c: 4ab9 0005 b68e tstl 5b68e <rtems_filesystem_mount_table_size>
42842: 6700 00c2 beqw 42906 <rtems_filesystem_initialize+0xde>
rtems_fatal_error_occurred( 0xABCD0001 );
mt = &rtems_filesystem_mount_table[0];
42846: 2079 0005 cc4c moveal 5cc4c <rtems_filesystem_mount_table>,%a0
status = mount( mt->device, mt->mount_point, mt->type, mt->fsoptions, NULL );
4284c: 42a7 clrl %sp@-
4284e: 2f28 0004 movel %a0@(4),%sp@-
42852: 2f10 movel %a0@,%sp@-
42854: 2f28 000c movel %a0@(12),%sp@-
42858: 2f28 0008 movel %a0@(8),%sp@-
4285c: 4eb9 0004 3318 jsr 43318 <mount>
if ( status == -1 )
42862: 4fef 0014 lea %sp@(20),%sp
42866: 72ff moveq #-1,%d1
42868: b280 cmpl %d0,%d1
4286a: 6700 00b2 beqw 4291e <rtems_filesystem_initialize+0xf6>
rtems_fatal_error_occurred( 0xABCD0002 );
rtems_filesystem_link_counts = 0;
4286e: 2079 0005 cd60 moveal 5cd60 <rtems_current_user_env>,%a0
* gonna hit performance.
*
* Till Straumann, 10/25/2002
*/
/* Clone the root pathloc */
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
42874: 45ee ffec lea %fp@(-20),%a2
42878: 49f9 0004 2c80 lea 42c80 <rtems_filesystem_evaluate_path>,%a4
rtems_filesystem_root = loc;
4287e: 264e moveal %fp,%a3
status = mount( mt->device, mt->mount_point, mt->type, mt->fsoptions, NULL );
if ( status == -1 )
rtems_fatal_error_occurred( 0xABCD0002 );
rtems_filesystem_link_counts = 0;
42880: 4240 clrw %d0
42882: 3140 0030 movew %d0,%a0@(48)
* gonna hit performance.
*
* Till Straumann, 10/25/2002
*/
/* Clone the root pathloc */
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
42886: 42a7 clrl %sp@-
42888: 2f0a movel %a2,%sp@-
4288a: 42a7 clrl %sp@-
4288c: 4878 0001 pea 1 <ADD>
42890: 4879 0005 ba40 pea 5ba40 <IMFS_ops+0x48>
42896: 4e94 jsr %a4@
rtems_filesystem_root = loc;
42898: 2079 0005 cd60 moveal 5cd60 <rtems_current_user_env>,%a0
4289e: 2163 0028 movel %a3@-,%a0@(40)
428a2: 216e fff8 0024 movel %fp@(-8),%a0@(36)
428a8: 2152 0018 movel %a2@,%a0@(24)
428ac: 216e fff0 001c movel %fp@(-16),%a0@(28)
428b2: 216e fff4 0020 movel %fp@(-12),%a0@(32)
/* One more clone for the current node */
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
428b8: 42a7 clrl %sp@-
428ba: 2f0a movel %a2,%sp@-
428bc: 42a7 clrl %sp@-
428be: 4878 0001 pea 1 <ADD>
428c2: 4879 0005 ba40 pea 5ba40 <IMFS_ops+0x48>
428c8: 4e94 jsr %a4@
rtems_filesystem_current = loc;
428ca: 2079 0005 cd60 moveal 5cd60 <rtems_current_user_env>,%a0
428d0: 5888 addql #4,%a0
*
* NOTE: UNIX root is 755 and owned by root/root (0/0). It is actually
* created that way by the IMFS.
*/
status = mkdir( "/dev", 0777);
428d2: 4fef 0028 lea %sp@(40),%sp
/* Clone the root pathloc */
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
rtems_filesystem_root = loc;
/* One more clone for the current node */
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
rtems_filesystem_current = loc;
428d6: 20d2 movel %a2@,%a0@+
428d8: 20ee fff0 movel %fp@(-16),%a0@+
428dc: 20ee fff4 movel %fp@(-12),%a0@+
428e0: 20ee fff8 movel %fp@(-8),%a0@+
428e4: 2093 movel %a3@,%a0@
*
* NOTE: UNIX root is 755 and owned by root/root (0/0). It is actually
* created that way by the IMFS.
*/
status = mkdir( "/dev", 0777);
428e6: 4878 01ff pea 1ff <DBL_MANT_DIG+0x1ca>
428ea: 4879 0005 ba42 pea 5ba42 <IMFS_ops+0x4a>
428f0: 4eb9 0004 31b8 jsr 431b8 <mkdir>
if ( status != 0 )
428f6: 508f addql #8,%sp
428f8: 4a80 tstl %d0
428fa: 6616 bnes 42912 <rtems_filesystem_initialize+0xea><== NEVER TAKEN
* it will be mounted onto is created. Moreover, if it is going to
* use a device, then it is REALLY unfair to attempt this
* before device drivers are initialized. So we return via a base
* filesystem image and nothing auto-mounted at this point.
*/
}
428fc: 4cee 1c00 ffe0 moveml %fp@(-32),%a2-%a4
42902: 4e5e unlk %fp
42904: 4e75 rts
/*
* mount the first filesystem.
*/
if ( rtems_filesystem_mount_table_size == 0 )
rtems_fatal_error_occurred( 0xABCD0001 );
42906: 2f3c abcd 0001 movel #-1412628479,%sp@- <== NOT EXECUTED
4290c: 4eb9 0004 6d6c jsr 46d6c <rtems_fatal_error_occurred> <== NOT EXECUTED
* created that way by the IMFS.
*/
status = mkdir( "/dev", 0777);
if ( status != 0 )
rtems_fatal_error_occurred( 0xABCD0003 );
42912: 2f3c abcd 0003 movel #-1412628477,%sp@- <== NOT EXECUTED
42918: 4eb9 0004 6d6c jsr 46d6c <rtems_fatal_error_occurred> <== NOT EXECUTED
mt = &rtems_filesystem_mount_table[0];
status = mount( mt->device, mt->mount_point, mt->type, mt->fsoptions, NULL );
if ( status == -1 )
rtems_fatal_error_occurred( 0xABCD0002 );
4291e: 2f3c abcd 0002 movel #-1412628478,%sp@- <== NOT EXECUTED
42924: 4eb9 0004 6d6c jsr 46d6c <rtems_fatal_error_occurred> <== NOT EXECUTED
...
0004b31a <rtems_filesystem_iterate>:
bool rtems_filesystem_iterate(
rtems_per_filesystem_routine routine,
void *routine_arg
)
{
4b31a: 4e56 fff0 linkw %fp,#-16
4b31e: 48d7 0c0c moveml %d2-%d3/%a2-%a3,%sp@
4b322: 266e 0008 moveal %fp@(8),%a3
4b326: 262e 000c movel %fp@(12),%d3
const rtems_filesystem_table_t *table_entry = &rtems_filesystem_table [0];
rtems_chain_node *node = NULL;
bool stop = false;
while ( table_entry->type && !stop ) {
4b32a: 4ab9 0005 b66e tstl 5b66e <rtems_filesystem_table>
4b330: 672a beqs 4b35c <rtems_filesystem_iterate+0x42> <== NEVER TAKEN
4b332: 45f9 0005 b66e lea 5b66e <rtems_filesystem_table>,%a2
stop = (*routine)( table_entry, routine_arg );
4b338: 2f03 movel %d3,%sp@-
4b33a: 2f0a movel %a2,%sp@-
++table_entry;
4b33c: 508a addql #8,%a2
const rtems_filesystem_table_t *table_entry = &rtems_filesystem_table [0];
rtems_chain_node *node = NULL;
bool stop = false;
while ( table_entry->type && !stop ) {
stop = (*routine)( table_entry, routine_arg );
4b33e: 4e93 jsr %a3@
{
const rtems_filesystem_table_t *table_entry = &rtems_filesystem_table [0];
rtems_chain_node *node = NULL;
bool stop = false;
while ( table_entry->type && !stop ) {
4b340: 508f addql #8,%sp
stop = (*routine)( table_entry, routine_arg );
4b342: 1400 moveb %d0,%d2
{
const rtems_filesystem_table_t *table_entry = &rtems_filesystem_table [0];
rtems_chain_node *node = NULL;
bool stop = false;
while ( table_entry->type && !stop ) {
4b344: 4a92 tstl %a2@
4b346: 6710 beqs 4b358 <rtems_filesystem_iterate+0x3e> <== ALWAYS TAKEN
4b348: 4a00 tstb %d0 <== NOT EXECUTED
4b34a: 67ec beqs 4b338 <rtems_filesystem_iterate+0x1e> <== NOT EXECUTED
}
rtems_libio_unlock();
}
return stop;
}
4b34c: 1002 moveb %d2,%d0
4b34e: 4cee 0c0c fff0 moveml %fp@(-16),%d2-%d3/%a2-%a3
4b354: 4e5e unlk %fp
4b356: 4e75 rts
while ( table_entry->type && !stop ) {
stop = (*routine)( table_entry, routine_arg );
++table_entry;
}
if ( !stop ) {
4b358: 4a00 tstb %d0
4b35a: 66f0 bnes 4b34c <rtems_filesystem_iterate+0x32>
rtems_status_code rtems_libio_set_private_env(void);
rtems_status_code rtems_libio_share_private_env(rtems_id task_id) ;
static inline void rtems_libio_lock( void )
{
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
4b35c: 42a7 clrl %sp@-
4b35e: 42a7 clrl %sp@-
4b360: 2f39 0005 e2d0 movel 5e2d0 <rtems_libio_semaphore>,%sp@-
4b366: 4eb9 0004 6648 jsr 46648 <rtems_semaphore_obtain>
}
}
rtems_libio_unlock();
rtems_set_errno_and_return_minus_one( ENOENT );
}
4b36c: 2479 0005 cd64 moveal 5cd64 <filesystem_chain>,%a2
++table_entry;
}
if ( !stop ) {
rtems_libio_lock();
for (
4b372: 4fef 000c lea %sp@(12),%sp
4b376: b5fc 0005 cd68 cmpal #380264,%a2
4b37c: 6734 beqs 4b3b2 <rtems_filesystem_iterate+0x98>
!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 );
4b37e: 2f03 movel %d3,%sp@-
4b380: 486a 0008 pea %a2@(8)
4b384: 4e93 jsr %a3@
}
}
rtems_libio_unlock();
rtems_set_errno_and_return_minus_one( ENOENT );
}
4b386: 2452 moveal %a2@,%a2
++table_entry;
}
if ( !stop ) {
rtems_libio_lock();
for (
4b388: 508f addql #8,%sp
!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 );
4b38a: 1400 moveb %d0,%d2
++table_entry;
}
if ( !stop ) {
rtems_libio_lock();
for (
4b38c: b5fc 0005 cd68 cmpal #380264,%a2
4b392: 6704 beqs 4b398 <rtems_filesystem_iterate+0x7e>
node = rtems_chain_first( &filesystem_chain );
!rtems_chain_is_tail( &filesystem_chain, node ) && !stop;
4b394: 4a00 tstb %d0
4b396: 67e6 beqs 4b37e <rtems_filesystem_iterate+0x64> <== ALWAYS TAKEN
}
static inline void rtems_libio_unlock( void )
{
rtems_semaphore_release( rtems_libio_semaphore );
4b398: 2f39 0005 e2d0 movel 5e2d0 <rtems_libio_semaphore>,%sp@-
4b39e: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
4b3a4: 588f addql #4,%sp
}
rtems_libio_unlock();
}
return stop;
}
4b3a6: 1002 moveb %d2,%d0
4b3a8: 4cee 0c0c fff0 moveml %fp@(-16),%d2-%d3/%a2-%a3
4b3ae: 4e5e unlk %fp
4b3b0: 4e75 rts
4b3b2: 2f39 0005 e2d0 movel 5e2d0 <rtems_libio_semaphore>,%sp@-
++table_entry;
}
if ( !stop ) {
rtems_libio_lock();
for (
4b3b8: 4202 clrb %d2
4b3ba: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
4b3c0: 588f addql #4,%sp
4b3c2: 60e2 bras 4b3a6 <rtems_filesystem_iterate+0x8c>
0004329c <rtems_filesystem_mount_iterate>:
bool rtems_filesystem_mount_iterate(
rtems_per_filesystem_mount_routine routine,
void *routine_arg
)
{
4329c: 4e56 fff0 linkw %fp,#-16
432a0: 48d7 0c0c moveml %d2-%d3/%a2-%a3,%sp@
rtems_status_code rtems_libio_set_private_env(void);
rtems_status_code rtems_libio_share_private_env(rtems_id task_id) ;
static inline void rtems_libio_lock( void )
{
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
432a4: 42a7 clrl %sp@-
432a6: 266e 0008 moveal %fp@(8),%a3
432aa: 42a7 clrl %sp@-
432ac: 2f39 0005 e2d0 movel 5e2d0 <rtems_libio_semaphore>,%sp@-
432b2: 262e 000c movel %fp@(12),%d3
432b6: 4eb9 0004 6648 jsr 46648 <rtems_semaphore_obtain>
stop = (*routine)( mt_entry, routine_arg );
}
rtems_libio_unlock();
return stop;
}
432bc: 2479 0005 cd40 moveal 5cd40 <mount_chain>,%a2
{
rtems_chain_node *node = NULL;
bool stop = false;
rtems_libio_lock();
for (
432c2: 4fef 000c lea %sp@(12),%sp
432c6: b5fc 0005 cd44 cmpal #380228,%a2
432cc: 6730 beqs 432fe <rtems_filesystem_mount_iterate+0x62><== NEVER TAKEN
node = rtems_chain_next( node )
) {
const rtems_filesystem_mount_table_entry_t *mt_entry =
(rtems_filesystem_mount_table_entry_t *) node;
stop = (*routine)( mt_entry, routine_arg );
432ce: 2f03 movel %d3,%sp@-
432d0: 2f0a movel %a2,%sp@-
432d2: 4e93 jsr %a3@
}
rtems_libio_unlock();
return stop;
}
432d4: 2452 moveal %a2@,%a2
{
rtems_chain_node *node = NULL;
bool stop = false;
rtems_libio_lock();
for (
432d6: 508f addql #8,%sp
node = rtems_chain_next( node )
) {
const rtems_filesystem_mount_table_entry_t *mt_entry =
(rtems_filesystem_mount_table_entry_t *) node;
stop = (*routine)( mt_entry, routine_arg );
432d8: 1400 moveb %d0,%d2
{
rtems_chain_node *node = NULL;
bool stop = false;
rtems_libio_lock();
for (
432da: b5fc 0005 cd44 cmpal #380228,%a2
432e0: 6704 beqs 432e6 <rtems_filesystem_mount_iterate+0x4a>
node = rtems_chain_first( &mount_chain );
!rtems_chain_is_tail( &mount_chain, node ) && !stop;
432e2: 4a00 tstb %d0
432e4: 67e8 beqs 432ce <rtems_filesystem_mount_iterate+0x32><== ALWAYS TAKEN
}
static inline void rtems_libio_unlock( void )
{
rtems_semaphore_release( rtems_libio_semaphore );
432e6: 2f39 0005 e2d0 movel 5e2d0 <rtems_libio_semaphore>,%sp@-
432ec: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
stop = (*routine)( mt_entry, routine_arg );
}
rtems_libio_unlock();
return stop;
}
432f2: 1002 moveb %d2,%d0
432f4: 4cee 0c0c fff0 moveml %fp@(-16),%d2-%d3/%a2-%a3
432fa: 4e5e unlk %fp
432fc: 4e75 rts
432fe: 2f39 0005 e2d0 movel 5e2d0 <rtems_libio_semaphore>,%sp@- <== NOT EXECUTED
rtems_per_filesystem_mount_routine routine,
void *routine_arg
)
{
rtems_chain_node *node = NULL;
bool stop = false;
43304: 4202 clrb %d2 <== NOT EXECUTED
43306: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release> <== NOT EXECUTED
stop = (*routine)( mt_entry, routine_arg );
}
rtems_libio_unlock();
return stop;
}
4330c: 1002 moveb %d2,%d0 <== NOT EXECUTED
4330e: 4cee 0c0c fff0 moveml %fp@(-16),%d2-%d3/%a2-%a3 <== NOT EXECUTED
43314: 4e5e unlk %fp <== NOT EXECUTED
00042d50 <rtems_filesystem_prefix_separators>:
int rtems_filesystem_prefix_separators(
const char *pathname,
int pathnamelen
)
{
42d50: 4e56 fff0 linkw %fp,#-16
42d54: 48d7 0c0c moveml %d2-%d3/%a2-%a3,%sp@
42d58: 246e 0008 moveal %fp@(8),%a2
/*
* Eat any separators at start of the path.
*/
int stripped = 0;
while ( *pathname && pathnamelen && rtems_filesystem_is_separator( *pathname ) )
42d5c: 1012 moveb %a2@,%d0
int rtems_filesystem_prefix_separators(
const char *pathname,
int pathnamelen
)
{
42d5e: 262e 000c movel %fp@(12),%d3
/*
* Eat any separators at start of the path.
*/
int stripped = 0;
while ( *pathname && pathnamelen && rtems_filesystem_is_separator( *pathname ) )
42d62: 4a00 tstb %d0
42d64: 6730 beqs 42d96 <rtems_filesystem_prefix_separators+0x46><== NEVER TAKEN
42d66: 4a83 tstl %d3
42d68: 672c beqs 42d96 <rtems_filesystem_prefix_separators+0x46><== NEVER TAKEN
}
return len;
}
int rtems_filesystem_prefix_separators(
42d6a: 528a addql #1,%a2
)
{
/*
* Eat any separators at start of the path.
*/
int stripped = 0;
42d6c: 4282 clrl %d2
42d6e: 47f9 0004 3cdc lea 43cdc <rtems_filesystem_is_separator>,%a3
while ( *pathname && pathnamelen && rtems_filesystem_is_separator( *pathname ) )
42d74: 49c0 extbl %d0
42d76: 2f00 movel %d0,%sp@-
42d78: 4e93 jsr %a3@
42d7a: 588f addql #4,%sp
42d7c: 4a80 tstl %d0
42d7e: 670a beqs 42d8a <rtems_filesystem_prefix_separators+0x3a>
{
pathname++;
pathnamelen--;
stripped++;
42d80: 5282 addql #1,%d2
{
/*
* Eat any separators at start of the path.
*/
int stripped = 0;
while ( *pathname && pathnamelen && rtems_filesystem_is_separator( *pathname ) )
42d82: 101a moveb %a2@+,%d0
42d84: 6704 beqs 42d8a <rtems_filesystem_prefix_separators+0x3a><== NEVER TAKEN
42d86: b483 cmpl %d3,%d2
42d88: 66ea bnes 42d74 <rtems_filesystem_prefix_separators+0x24><== ALWAYS TAKEN
pathname++;
pathnamelen--;
stripped++;
}
return stripped;
}
42d8a: 2002 movel %d2,%d0
42d8c: 4cee 0c0c fff0 moveml %fp@(-16),%d2-%d3/%a2-%a3
42d92: 4e5e unlk %fp
42d94: 4e75 rts
)
{
/*
* Eat any separators at start of the path.
*/
int stripped = 0;
42d96: 4282 clrl %d2 <== NOT EXECUTED
pathname++;
pathnamelen--;
stripped++;
}
return stripped;
}
42d98: 2002 movel %d2,%d0 <== NOT EXECUTED
42d9a: 4cee 0c0c fff0 moveml %fp@(-16),%d2-%d3/%a2-%a3 <== NOT EXECUTED
42da0: 4e5e unlk %fp <== NOT EXECUTED
0004b4cc <rtems_filesystem_unregister>:
int
rtems_filesystem_unregister(
const char *type
)
{
4b4cc: 4e56 fff4 linkw %fp,#-12
4b4d0: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
4b4d4: 242e 0008 movel %fp@(8),%d2
rtems_chain_node *node = NULL;
if ( type == NULL ) {
4b4d8: 6700 0094 beqw 4b56e <rtems_filesystem_unregister+0xa2>
rtems_status_code rtems_libio_set_private_env(void);
rtems_status_code rtems_libio_share_private_env(rtems_id task_id) ;
static inline void rtems_libio_lock( void )
{
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
4b4dc: 42a7 clrl %sp@-
4b4de: 42a7 clrl %sp@-
4b4e0: 2f39 0005 e2d0 movel 5e2d0 <rtems_libio_semaphore>,%sp@-
4b4e6: 4eb9 0004 6648 jsr 46648 <rtems_semaphore_obtain>
}
}
rtems_libio_unlock();
rtems_set_errno_and_return_minus_one( ENOENT );
}
4b4ec: 2479 0005 cd64 moveal 5cd64 <filesystem_chain>,%a2
if ( type == NULL ) {
rtems_set_errno_and_return_minus_one( EINVAL );
}
rtems_libio_lock();
for (
4b4f2: 4fef 000c lea %sp@(12),%sp
4b4f6: b5fc 0005 cd68 cmpal #380264,%a2
4b4fc: 671e beqs 4b51c <rtems_filesystem_unregister+0x50>
4b4fe: 47f9 0004 e96c lea 4e96c <strcmp>,%a3
!rtems_chain_is_tail( &filesystem_chain, node );
node = rtems_chain_next( node )
) {
filesystem_node *fsn = (filesystem_node *) node;
if ( strcmp( fsn->entry.type, type ) == 0 ) {
4b504: 2f02 movel %d2,%sp@-
4b506: 2f2a 0008 movel %a2@(8),%sp@-
4b50a: 4e93 jsr %a3@
4b50c: 508f addql #8,%sp
4b50e: 4a80 tstl %d0
4b510: 6730 beqs 4b542 <rtems_filesystem_unregister+0x76>
}
}
rtems_libio_unlock();
rtems_set_errno_and_return_minus_one( ENOENT );
}
4b512: 2452 moveal %a2@,%a2
if ( type == NULL ) {
rtems_set_errno_and_return_minus_one( EINVAL );
}
rtems_libio_lock();
for (
4b514: b5fc 0005 cd68 cmpal #380264,%a2
4b51a: 66e8 bnes 4b504 <rtems_filesystem_unregister+0x38><== NEVER TAKEN
}
static inline void rtems_libio_unlock( void )
{
rtems_semaphore_release( rtems_libio_semaphore );
4b51c: 2f39 0005 e2d0 movel 5e2d0 <rtems_libio_semaphore>,%sp@-
4b522: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
return 0;
}
}
rtems_libio_unlock();
rtems_set_errno_and_return_minus_one( ENOENT );
4b528: 4eb9 0004 da6c jsr 4da6c <__errno>
4b52e: 588f addql #4,%sp
4b530: 7202 moveq #2,%d1
4b532: 2040 moveal %d0,%a0
4b534: 70ff moveq #-1,%d0
}
4b536: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3
return 0;
}
}
rtems_libio_unlock();
rtems_set_errno_and_return_minus_one( ENOENT );
4b53c: 2081 movel %d1,%a0@
}
4b53e: 4e5e unlk %fp
4b540: 4e75 rts
*/
RTEMS_INLINE_ROUTINE void rtems_chain_extract(
rtems_chain_node *the_node
)
{
_Chain_Extract( the_node );
4b542: 2f0a movel %a2,%sp@-
4b544: 4eb9 0004 7074 jsr 47074 <_Chain_Extract>
) {
filesystem_node *fsn = (filesystem_node *) node;
if ( strcmp( fsn->entry.type, type ) == 0 ) {
rtems_chain_extract( node );
free( fsn );
4b54a: 2f0a movel %a2,%sp@-
4b54c: 4eb9 0004 2db8 jsr 42db8 <free>
4b552: 2f39 0005 e2d0 movel 5e2d0 <rtems_libio_semaphore>,%sp@-
4b558: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
4b55e: 4fef 000c lea %sp@(12),%sp
rtems_libio_unlock();
return 0;
4b562: 4280 clrl %d0
}
}
rtems_libio_unlock();
rtems_set_errno_and_return_minus_one( ENOENT );
}
4b564: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3
4b56a: 4e5e unlk %fp
4b56c: 4e75 rts
)
{
rtems_chain_node *node = NULL;
if ( type == NULL ) {
rtems_set_errno_and_return_minus_one( EINVAL );
4b56e: 4eb9 0004 da6c jsr 4da6c <__errno>
4b574: 7416 moveq #22,%d2
4b576: 2040 moveal %d0,%a0
4b578: 70ff moveq #-1,%d0
4b57a: 2082 movel %d2,%a0@
}
}
rtems_libio_unlock();
rtems_set_errno_and_return_minus_one( ENOENT );
}
4b57c: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3
4b582: 4e5e unlk %fp
...
0004373a <rtems_gxx_getspecific>:
void *rtems_gxx_getspecific(__gthread_key_t key)
{
4373a: 4e56 fffc linkw %fp,#-4
rtems_status_code status;
void *p= 0;
4373e: 204e moveal %fp,%a0
}
return 0;
}
void *rtems_gxx_getspecific(__gthread_key_t key)
{
43740: 2f0a movel %a2,%sp@-
43742: 246e 0008 moveal %fp@(8),%a2
rtems_status_code status;
void *p= 0;
43746: 42a0 clrl %a0@-
/* register with RTEMS the buffer that will hold the key values */
status = rtems_task_variable_get( RTEMS_SELF, (void **)key, &p );
43748: 2f08 movel %a0,%sp@-
4374a: 2f0a movel %a2,%sp@-
4374c: 42a7 clrl %sp@-
4374e: 4eb9 0004 7830 jsr 47830 <rtems_task_variable_get>
if ( status == RTEMS_SUCCESSFUL ) {
43754: 4fef 000c lea %sp@(12),%sp
43758: 4a80 tstl %d0
4375a: 660a bnes 43766 <rtems_gxx_getspecific+0x2c> <== NEVER TAKEN
/* We do not have to do this, but what the heck ! */
p= key->val;
4375c: 2012 movel %a2@,%d0
p,
rtems_task_self()
);
#endif
return p;
}
4375e: 246e fff8 moveal %fp@(-8),%a2
43762: 4e5e unlk %fp
43764: 4e75 rts
p= key->val;
} else {
/* fisrt time, always set to zero, it is unknown the value that the others
* threads are using at the moment of this call
*/
status = rtems_task_variable_add( RTEMS_SELF, (void **)key, key->dtor );
43766: 2f2a 0004 movel %a2@(4),%sp@- <== NOT EXECUTED
4376a: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4376c: 42a7 clrl %sp@- <== NOT EXECUTED
4376e: 4eb9 0004 76cc jsr 476cc <rtems_task_variable_add> <== NOT EXECUTED
if ( status != RTEMS_SUCCESSFUL ) {
43774: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
43778: 4a80 tstl %d0 <== NOT EXECUTED
4377a: 660e bnes 4378a <rtems_gxx_getspecific+0x50> <== NOT EXECUTED
rtems_panic ("rtems_gxx_getspecific");
}
key->val = (void *)0;
4377c: 4292 clrl %a2@ <== NOT EXECUTED
4377e: 202e fffc movel %fp@(-4),%d0 <== NOT EXECUTED
p,
rtems_task_self()
);
#endif
return p;
}
43782: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
43786: 4e5e unlk %fp <== NOT EXECUTED
43788: 4e75 rts <== NOT EXECUTED
/* fisrt time, always set to zero, it is unknown the value that the others
* threads are using at the moment of this call
*/
status = rtems_task_variable_add( RTEMS_SELF, (void **)key, key->dtor );
if ( status != RTEMS_SUCCESSFUL ) {
rtems_panic ("rtems_gxx_getspecific");
4378a: 4879 0005 cb98 pea 5cb98 <rtems_status_assoc+0x1a0> <== NOT EXECUTED
43790: 4eb9 0004 3304 jsr 43304 <rtems_panic> <== NOT EXECUTED
00043708 <rtems_gxx_key_delete>:
int rtems_gxx_key_delete (__gthread_key_t key)
{
43708: 4e56 0000 linkw %fp,#0
4370c: 2f02 movel %d2,%sp@-
4370e: 242e 0008 movel %fp@(8),%d2
#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 );
43712: 2f02 movel %d2,%sp@-
43714: 42a7 clrl %sp@-
43716: 4eb9 0004 7788 jsr 47788 <rtems_task_variable_delete>
if ( status == RTEMS_SUCCESSFUL ) {
4371c: 508f addql #8,%sp
4371e: 4a80 tstl %d0
43720: 660e bnes 43730 <rtems_gxx_key_delete+0x28> <== NEVER TAKEN
/* Hmm - hopefully all tasks using this key have gone away... */
if ( key ) free( (void *)key );
43722: 4a82 tstl %d2
43724: 670a beqs 43730 <rtems_gxx_key_delete+0x28> <== NEVER TAKEN
43726: 2f02 movel %d2,%sp@-
43728: 4eb9 0004 3520 jsr 43520 <free>
4372e: 588f addql #4,%sp
return 0;
}
return 0;
}
43730: 242e fffc movel %fp@(-4),%d2
43734: 4280 clrl %d0
43736: 4e5e unlk %fp <== NOT EXECUTED
000436f8 <rtems_gxx_key_dtor>:
printk( "gxx_wrappers: dtor key=%x, ptr=%x\n", key, ptr );
#endif
key->val = 0;
return 0;
}
436f8: 4280 clrl %d0 <== NOT EXECUTED
return 0;
return -1;
}
int rtems_gxx_key_dtor (__gthread_key_t key, void *ptr)
{
436fa: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
#ifdef DEBUG_GXX_WRAPPERS
printk( "gxx_wrappers: dtor key=%x, ptr=%x\n", key, ptr );
#endif
key->val = 0;
436fe: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
return 0;
}
43702: 4e5e unlk %fp <== NOT EXECUTED
{
#ifdef DEBUG_GXX_WRAPPERS
printk( "gxx_wrappers: dtor key=%x, ptr=%x\n", key, ptr );
#endif
key->val = 0;
43704: 4290 clrl %a0@ <== NOT EXECUTED
return 0;
}
00043824 <rtems_gxx_mutex_destroy>:
int rtems_gxx_mutex_destroy (__gthread_mutex_t *mutex)
{
43824: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
43828: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
#ifdef DEBUG_GXX_WRAPPERS
printk( "gxx_wrappers: destroy mutex=%X\n", *mutex );
#endif
status = rtems_semaphore_delete(*(rtems_id *)mutex);
4382c: 2f10 movel %a0@,%sp@- <== NOT EXECUTED
4382e: 4eb9 0004 6f4c jsr 46f4c <rtems_semaphore_delete> <== NOT EXECUTED
if ( status == RTEMS_SUCCESSFUL )
43834: 588f addql #4,%sp <== NOT EXECUTED
return 0;
return -1;
}
43836: 4e5e unlk %fp <== NOT EXECUTED
printk( "gxx_wrappers: destroy mutex=%X\n", *mutex );
#endif
status = rtems_semaphore_delete(*(rtems_id *)mutex);
if ( status == RTEMS_SUCCESSFUL )
return 0;
43838: 4a80 tstl %d0 <== NOT EXECUTED
4383a: 56c0 sne %d0 <== NOT EXECUTED
4383c: 49c0 extbl %d0 <== NOT EXECUTED
return -1;
}
000437cc <rtems_gxx_mutex_init>:
/*
* MUTEX support
*/
void rtems_gxx_mutex_init (__gthread_mutex_t *mutex)
{
437cc: 4e56 0000 linkw %fp,#0
#ifdef DEBUG_GXX_WRAPPERS
printk( "gxx_wrappers: mutex init =%X\n", *mutex );
#endif
status = rtems_semaphore_create(
437d0: 2f2e 0008 movel %fp@(8),%sp@-
437d4: 42a7 clrl %sp@-
437d6: 4878 0054 pea 54 <DBL_MANT_DIG+0x1f>
437da: 4878 0001 pea 1 <ADD>
437de: 2f3c 4743 4332 movel #1195590450,%sp@-
437e4: 4eb9 0004 6d88 jsr 46d88 <rtems_semaphore_create>
RTEMS_PRIORITY|RTEMS_BINARY_SEMAPHORE|
RTEMS_INHERIT_PRIORITY|RTEMS_NO_PRIORITY_CEILING|RTEMS_LOCAL,
0,
(rtems_id *)mutex
);
if ( status != RTEMS_SUCCESSFUL ) {
437ea: 4fef 0014 lea %sp@(20),%sp
437ee: 4a80 tstl %d0
437f0: 6604 bnes 437f6 <rtems_gxx_mutex_init+0x2a> <== NEVER TAKEN
rtems_panic ("rtems_gxx_mutex_init");
}
#ifdef DEBUG_GXX_WRAPPERS
printk( "gxx_wrappers: mutex init complete =%X\n", *mutex );
#endif
}
437f2: 4e5e unlk %fp
437f4: 4e75 rts
"gxx_wrappers: mutex init failed %s (%d)\n",
rtems_status_text(status),
status
);
#endif
rtems_panic ("rtems_gxx_mutex_init");
437f6: 4879 0005 cbae pea 5cbae <rtems_status_assoc+0x1b6> <== NOT EXECUTED
437fc: 4eb9 0004 3304 jsr 43304 <rtems_panic> <== NOT EXECUTED
0004363c <rtems_gxx_once>:
typedef int __gthread_once_t;
typedef void *__gthread_mutex_t;
typedef void *__gthread_recursive_mutex_t;
int rtems_gxx_once(__gthread_once_t *once, void (*func) (void))
{
4363c: 4e56 fff0 linkw %fp,#-16
43640: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
43644: 246e 0008 moveal %fp@(8),%a2
#ifdef DEBUG_GXX_WRAPPERS
printk( "gxx_wrappers: once=%x, func=%x\n", *once, func );
#endif
if ( *(volatile __gthread_once_t *)once == 0 ) {
43648: 2012 movel %a2@,%d0
4364a: 670c beqs 43658 <rtems_gxx_once+0x1c>
rtems_task_mode(saveMode, RTEMS_PREEMPT_MASK, &saveMode);
if ( o == 0 )
(*func)();
}
return 0;
}
4364c: 4280 clrl %d0
4364e: 4cee 0c04 fff0 moveml %fp@(-16),%d2/%a2-%a3
43654: 4e5e unlk %fp
43656: 4e75 rts
if ( *(volatile __gthread_once_t *)once == 0 ) {
rtems_mode saveMode;
__gthread_once_t o;
rtems_task_mode(RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &saveMode);
43658: 240e movel %fp,%d2
4365a: 5982 subql #4,%d2
4365c: 47f9 0004 7480 lea 47480 <rtems_task_mode>,%a3
43662: 2f02 movel %d2,%sp@-
43664: 4878 0100 pea 100 <DBL_MANT_DIG+0xcb>
43668: 4878 0100 pea 100 <DBL_MANT_DIG+0xcb>
4366c: 4e93 jsr %a3@
if ( (o = *(volatile __gthread_once_t *)once) == 0 ) {
4366e: 2012 movel %a2@,%d0
43670: 4fef 000c lea %sp@(12),%sp
43674: 6626 bnes 4369c <rtems_gxx_once+0x60> <== NEVER TAKEN
*(volatile __gthread_once_t *)once = 1;
}
rtems_task_mode(saveMode, RTEMS_PREEMPT_MASK, &saveMode);
43676: 2f02 movel %d2,%sp@-
43678: 4878 0100 pea 100 <DBL_MANT_DIG+0xcb>
rtems_mode saveMode;
__gthread_once_t o;
rtems_task_mode(RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &saveMode);
if ( (o = *(volatile __gthread_once_t *)once) == 0 ) {
*(volatile __gthread_once_t *)once = 1;
4367c: 7001 moveq #1,%d0
}
rtems_task_mode(saveMode, RTEMS_PREEMPT_MASK, &saveMode);
4367e: 2f2e fffc movel %fp@(-4),%sp@-
rtems_mode saveMode;
__gthread_once_t o;
rtems_task_mode(RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &saveMode);
if ( (o = *(volatile __gthread_once_t *)once) == 0 ) {
*(volatile __gthread_once_t *)once = 1;
43682: 2480 movel %d0,%a2@
}
rtems_task_mode(saveMode, RTEMS_PREEMPT_MASK, &saveMode);
43684: 4e93 jsr %a3@
if ( o == 0 )
(*func)();
43686: 206e 000c moveal %fp@(12),%a0
4368a: 4e90 jsr %a0@
4368c: 4fef 000c lea %sp@(12),%sp
}
return 0;
}
43690: 4280 clrl %d0
43692: 4cee 0c04 fff0 moveml %fp@(-16),%d2/%a2-%a3
43698: 4e5e unlk %fp
4369a: 4e75 rts
rtems_task_mode(RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &saveMode);
if ( (o = *(volatile __gthread_once_t *)once) == 0 ) {
*(volatile __gthread_once_t *)once = 1;
}
rtems_task_mode(saveMode, RTEMS_PREEMPT_MASK, &saveMode);
4369c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4369e: 4878 0100 pea 100 <DBL_MANT_DIG+0xcb> <== NOT EXECUTED
436a2: 2f2e fffc movel %fp@(-4),%sp@- <== NOT EXECUTED
436a6: 4e93 jsr %a3@ <== NOT EXECUTED
436a8: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
if ( o == 0 )
(*func)();
}
return 0;
}
436ac: 4280 clrl %d0 <== NOT EXECUTED
436ae: 4cee 0c04 fff0 moveml %fp@(-16),%d2/%a2-%a3 <== NOT EXECUTED
436b4: 4e5e unlk %fp <== NOT EXECUTED
00043796 <rtems_gxx_setspecific>:
#endif
return p;
}
int rtems_gxx_setspecific(__gthread_key_t key, const void *ptr)
{
43796: 4e56 0000 linkw %fp,#0
4379a: 2f0a movel %a2,%sp@-
4379c: 246e 0008 moveal %fp@(8),%a2
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 );
437a0: 2f2a 0004 movel %a2@(4),%sp@-
437a4: 2f0a movel %a2,%sp@-
437a6: 42a7 clrl %sp@-
437a8: 4eb9 0004 76cc jsr 476cc <rtems_task_variable_add>
if ( status == RTEMS_SUCCESSFUL ) {
437ae: 4fef 000c lea %sp@(12),%sp
437b2: 4a80 tstl %d0
437b4: 660c bnes 437c2 <rtems_gxx_setspecific+0x2c> <== NEVER TAKEN
/* now let's set the proper value */
key->val = (void *)ptr;
437b6: 24ae 000c movel %fp@(12),%a2@
return 0;
}
return -1;
}
437ba: 246e fffc moveal %fp@(-4),%a2
437be: 4e5e unlk %fp
437c0: 4e75 rts
437c2: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
if ( status == RTEMS_SUCCESSFUL ) {
/* now let's set the proper value */
key->val = (void *)ptr;
return 0;
}
return -1;
437c6: 70ff moveq #-1,%d0 <== NOT EXECUTED
}
437c8: 4e5e unlk %fp <== NOT EXECUTED
00047cbc <rtems_heap_allocate_aligned_with_boundary>:
size_t size,
uintptr_t alignment,
uintptr_t boundary
)
{
if (
47cbc: 7003 moveq #3,%d0
void *rtems_heap_allocate_aligned_with_boundary(
size_t size,
uintptr_t alignment,
uintptr_t boundary
)
{
47cbe: 4e56 0000 linkw %fp,#0
if (
47cc2: b0b9 0006 49b4 cmpl 649b4 <_System_state_Current>,%d0
47cc8: 6726 beqs 47cf0 <rtems_heap_allocate_aligned_with_boundary+0x34><== ALWAYS TAKEN
&& !malloc_is_system_state_OK()
) {
return NULL;
}
malloc_deferred_frees_process();
47cca: 4eb9 0004 6c08 jsr 46c08 <malloc_deferred_frees_process>
/* FIXME: Statistics, boundary checks */
return _Protected_heap_Allocate_aligned_with_boundary(
47cd0: 2f2e 0010 movel %fp@(16),%sp@-
47cd4: 2f2e 000c movel %fp@(12),%sp@-
47cd8: 2f2e 0008 movel %fp@(8),%sp@-
47cdc: 2f39 0006 2790 movel 62790 <RTEMS_Malloc_Heap>,%sp@-
47ce2: 4eb9 0004 cfb0 jsr 4cfb0 <_Protected_heap_Allocate_aligned_with_boundary>
47ce8: 4fef 0010 lea %sp@(16),%sp
RTEMS_Malloc_Heap,
size,
alignment,
boundary
);
}
47cec: 4e5e unlk %fp
47cee: 4e75 rts
uintptr_t boundary
)
{
if (
_System_state_Is_up( _System_state_Get() )
&& !malloc_is_system_state_OK()
47cf0: 4eb9 0004 6bc8 jsr 46bc8 <malloc_is_system_state_OK>
47cf6: 4a00 tstb %d0
47cf8: 66d0 bnes 47cca <rtems_heap_allocate_aligned_with_boundary+0xe>
) {
return NULL;
47cfa: 4280 clrl %d0
RTEMS_Malloc_Heap,
size,
alignment,
boundary
);
}
47cfc: 4e5e unlk %fp <== NOT EXECUTED
0004278a <rtems_io_lookup_name>:
rtems_status_code rtems_io_lookup_name(
const char *name,
rtems_driver_name_t *device_info
)
{
4278a: 4e56 ffd8 linkw %fp,#-40
4278e: 48d7 0c1c moveml %d2-%d4/%a2-%a3,%sp@
42792: 262e 0008 movel %fp@(8),%d3
IMFS_jnode_t *the_jnode;
rtems_filesystem_location_info_t loc;
int result;
rtems_filesystem_node_types_t node_type;
result = rtems_filesystem_evaluate_path(
42796: 45f9 0004 eec4 lea 4eec4 <strlen>,%a2
4279c: 240e movel %fp,%d2
4279e: 0682 ffff ffec addil #-20,%d2
427a4: 2f03 movel %d3,%sp@-
427a6: 4e92 jsr %a2@
427a8: 7201 moveq #1,%d1
427aa: 2e81 movel %d1,%sp@
427ac: 2f02 movel %d2,%sp@-
427ae: 42a7 clrl %sp@-
427b0: 2f00 movel %d0,%sp@-
427b2: 2f03 movel %d3,%sp@-
427b4: 4eb9 0004 2c80 jsr 42c80 <rtems_filesystem_evaluate_path>
name, strlen( name ), 0x00, &loc, true );
the_jnode = loc.node_access;
node_type = (*loc.ops->node_type_h)( &loc );
427ba: 206e fff8 moveal %fp@(-8),%a0
IMFS_jnode_t *the_jnode;
rtems_filesystem_location_info_t loc;
int result;
rtems_filesystem_node_types_t node_type;
result = rtems_filesystem_evaluate_path(
427be: 2800 movel %d0,%d4
name, strlen( name ), 0x00, &loc, true );
the_jnode = loc.node_access;
node_type = (*loc.ops->node_type_h)( &loc );
427c0: 2f02 movel %d2,%sp@-
int result;
rtems_filesystem_node_types_t node_type;
result = rtems_filesystem_evaluate_path(
name, strlen( name ), 0x00, &loc, true );
the_jnode = loc.node_access;
427c2: 266e ffec moveal %fp@(-20),%a3
node_type = (*loc.ops->node_type_h)( &loc );
427c6: 2068 0010 moveal %a0@(16),%a0
427ca: 4e90 jsr %a0@
if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) {
427cc: 4fef 0018 lea %sp@(24),%sp
427d0: 4a84 tstl %d4
427d2: 6606 bnes 427da <rtems_io_lookup_name+0x50> <== NEVER TAKEN
427d4: 7202 moveq #2,%d1
427d6: b280 cmpl %d0,%d1
427d8: 6716 beqs 427f0 <rtems_io_lookup_name+0x66>
rtems_filesystem_freenode( &loc );
427da: 2f02 movel %d2,%sp@-
427dc: 4eb9 0004 2da4 jsr 42da4 <rtems_filesystem_freenode>
return RTEMS_UNSATISFIED;
427e2: 588f addql #4,%sp
427e4: 700d moveq #13,%d0
device_info->minor = the_jnode->info.device.minor;
rtems_filesystem_freenode( &loc );
return RTEMS_SUCCESSFUL;
}
427e6: 4cee 0c1c ffd8 moveml %fp@(-40),%d2-%d4/%a2-%a3
427ec: 4e5e unlk %fp
427ee: 4e75 rts
if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) {
rtems_filesystem_freenode( &loc );
return RTEMS_UNSATISFIED;
}
device_info->device_name = (char *) name;
427f0: 206e 000c moveal %fp@(12),%a0
427f4: 2083 movel %d3,%a0@
device_info->device_name_length = strlen( name );
427f6: 2f03 movel %d3,%sp@-
427f8: 4e92 jsr %a2@
device_info->major = the_jnode->info.device.major;
427fa: 226e 000c moveal %fp@(12),%a1
427fe: 41eb 004c lea %a3@(76),%a0
device_info->minor = the_jnode->info.device.minor;
42802: 47eb 0050 lea %a3@(80),%a3
return RTEMS_UNSATISFIED;
}
device_info->device_name = (char *) name;
device_info->device_name_length = strlen( name );
device_info->major = the_jnode->info.device.major;
42806: 2350 0008 movel %a0@,%a1@(8)
device_info->minor = the_jnode->info.device.minor;
4280a: 2353 000c movel %a3@,%a1@(12)
rtems_filesystem_freenode( &loc );
return RTEMS_UNSATISFIED;
}
device_info->device_name = (char *) name;
device_info->device_name_length = strlen( name );
4280e: 2340 0004 movel %d0,%a1@(4)
device_info->major = the_jnode->info.device.major;
device_info->minor = the_jnode->info.device.minor;
rtems_filesystem_freenode( &loc );
42812: 2e82 movel %d2,%sp@
42814: 4eb9 0004 2da4 jsr 42da4 <rtems_filesystem_freenode>
return RTEMS_SUCCESSFUL;
4281a: 588f addql #4,%sp
4281c: 4280 clrl %d0
}
4281e: 4cee 0c1c ffd8 moveml %fp@(-40),%d2-%d4/%a2-%a3
42824: 4e5e unlk %fp <== NOT EXECUTED
00048240 <rtems_io_register_driver>:
rtems_status_code rtems_io_register_driver(
rtems_device_major_number major,
const rtems_driver_address_table *driver_table,
rtems_device_major_number *registered_major
)
{
48240: 4e56 fff4 linkw %fp,#-12
48244: 226e 000c moveal %fp@(12),%a1
48248: 48d7 040c moveml %d2-%d3/%a2,%sp@
4824c: 242e 0008 movel %fp@(8),%d2
48250: 246e 0010 moveal %fp@(16),%a2
rtems_device_major_number major_limit = _IO_Number_of_drivers;
48254: 2039 0006 2872 movel 62872 <_IO_Number_of_drivers>,%d0
if ( rtems_interrupt_is_in_progress() )
4825a: 4ab9 0006 2824 tstl 62824 <_Per_CPU_Information+0x8>
48260: 6600 009c bnew 482fe <rtems_io_register_driver+0xbe>
return RTEMS_CALLED_FROM_ISR;
if ( registered_major == NULL )
48264: 4a8a tstl %a2
48266: 6700 00ea beqw 48352 <rtems_io_register_driver+0x112>
return RTEMS_INVALID_ADDRESS;
/* Set it to an invalid value */
*registered_major = major_limit;
4826a: 2480 movel %d0,%a2@
if ( driver_table == NULL )
4826c: 4a89 tstl %a1
4826e: 6700 00e2 beqw 48352 <rtems_io_register_driver+0x112>
static inline bool rtems_io_is_empty_table(
const rtems_driver_address_table *table
)
{
return table->initialization_entry == NULL && table->open_entry == NULL;
48272: 4a91 tstl %a1@
48274: 6700 00d4 beqw 4834a <rtems_io_register_driver+0x10a>
return RTEMS_INVALID_ADDRESS;
if ( rtems_io_is_empty_table( driver_table ) )
return RTEMS_INVALID_ADDRESS;
if ( major >= major_limit )
48278: b480 cmpl %d0,%d2
4827a: 6476 bccs 482f2 <rtems_io_register_driver+0xb2>
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
4827c: 2039 0006 2664 movel 62664 <_Thread_Dispatch_disable_level>,%d0
48282: 5280 addql #1,%d0
48284: 23c0 0006 2664 movel %d0,62664 <_Thread_Dispatch_disable_level>
return RTEMS_INVALID_NUMBER;
_Thread_Disable_dispatch();
if ( major == 0 ) {
4828a: 4a82 tstl %d2
4828c: 667c bnes 4830a <rtems_io_register_driver+0xca>
static rtems_status_code rtems_io_obtain_major_number(
rtems_device_major_number *major
)
{
rtems_device_major_number n = _IO_Number_of_drivers;
4828e: 2039 0006 2872 movel 62872 <_IO_Number_of_drivers>,%d0
rtems_device_major_number m = 0;
/* major is error checked by caller */
for ( m = 0; m < n; ++m ) {
48294: 6700 0106 beqw 4839c <rtems_io_register_driver+0x15c>
48298: 2239 0006 2876 movel 62876 <_IO_Driver_address_table>,%d1
4829e: 2041 moveal %d1,%a0
static inline bool rtems_io_is_empty_table(
const rtems_driver_address_table *table
)
{
return table->initialization_entry == NULL && table->open_entry == NULL;
482a0: 4a90 tstl %a0@
482a2: 6700 008e beqw 48332 <rtems_io_register_driver+0xf2>
rtems_device_major_number n = _IO_Number_of_drivers;
rtems_device_major_number m = 0;
/* major is error checked by caller */
for ( m = 0; m < n; ++m ) {
482a6: 5282 addql #1,%d2
482a8: 41e8 0018 lea %a0@(24),%a0
482ac: b480 cmpl %d0,%d2
482ae: 65f0 bcss 482a0 <rtems_io_register_driver+0x60>
if ( rtems_io_is_empty_table( table ) )
break;
}
/* Assigns invalid value in case of failure */
*major = m;
482b0: 2482 movel %d2,%a2@
if ( m != n )
482b2: b480 cmpl %d0,%d2
482b4: 6700 00e8 beqw 4839e <rtems_io_register_driver+0x15e>
482b8: 2602 movel %d2,%d3
482ba: 2002 movel %d2,%d0
}
*registered_major = major;
}
_IO_Driver_address_table [major] = *driver_table;
482bc: 2041 moveal %d1,%a0
}
/* Assigns invalid value in case of failure */
*major = m;
if ( m != n )
482be: e78b lsll #3,%d3
482c0: eb88 lsll #5,%d0
482c2: 9083 subl %d3,%d0
}
*registered_major = major;
}
_IO_Driver_address_table [major] = *driver_table;
482c4: d1c0 addal %d0,%a0
482c6: 20d9 movel %a1@+,%a0@+
482c8: 20d9 movel %a1@+,%a0@+
482ca: 20d9 movel %a1@+,%a0@+
482cc: 20d9 movel %a1@+,%a0@+
482ce: 20d9 movel %a1@+,%a0@+
482d0: 2091 movel %a1@,%a0@
_Thread_Enable_dispatch();
482d2: 4eb9 0004 9dee jsr 49dee <_Thread_Enable_dispatch>
return rtems_io_initialize( major, 0, NULL );
482d8: 2d42 0008 movel %d2,%fp@(8)
}
482dc: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
_IO_Driver_address_table [major] = *driver_table;
_Thread_Enable_dispatch();
return rtems_io_initialize( major, 0, NULL );
482e2: 42ae 0010 clrl %fp@(16)
482e6: 42ae 000c clrl %fp@(12)
}
482ea: 4e5e unlk %fp
_IO_Driver_address_table [major] = *driver_table;
_Thread_Enable_dispatch();
return rtems_io_initialize( major, 0, NULL );
482ec: 4ef9 0004 fde0 jmp 4fde0 <rtems_io_initialize>
if ( rtems_io_is_empty_table( driver_table ) )
return RTEMS_INVALID_ADDRESS;
if ( major >= major_limit )
return RTEMS_INVALID_NUMBER;
482f2: 700a moveq #10,%d0
_IO_Driver_address_table [major] = *driver_table;
_Thread_Enable_dispatch();
return rtems_io_initialize( major, 0, NULL );
}
482f4: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
482fa: 4e5e unlk %fp
482fc: 4e75 rts
)
{
rtems_device_major_number major_limit = _IO_Number_of_drivers;
if ( rtems_interrupt_is_in_progress() )
return RTEMS_CALLED_FROM_ISR;
482fe: 7012 moveq #18,%d0
_IO_Driver_address_table [major] = *driver_table;
_Thread_Enable_dispatch();
return rtems_io_initialize( major, 0, NULL );
}
48300: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
48306: 4e5e unlk %fp
48308: 4e75 rts
_Thread_Enable_dispatch();
return sc;
}
major = *registered_major;
} else {
rtems_driver_address_table *const table = _IO_Driver_address_table + major;
4830a: 2202 movel %d2,%d1
4830c: 2002 movel %d2,%d0
4830e: e789 lsll #3,%d1
48310: eb88 lsll #5,%d0
48312: 2079 0006 2876 moveal 62876 <_IO_Driver_address_table>,%a0
48318: 9081 subl %d1,%d0
4831a: d1c0 addal %d0,%a0
static inline bool rtems_io_is_empty_table(
const rtems_driver_address_table *table
)
{
return table->initialization_entry == NULL && table->open_entry == NULL;
4831c: 4a90 tstl %a0@
4831e: 673e beqs 4835e <rtems_io_register_driver+0x11e>
major = *registered_major;
} else {
rtems_driver_address_table *const table = _IO_Driver_address_table + major;
if ( !rtems_io_is_empty_table( table ) ) {
_Thread_Enable_dispatch();
48320: 4eb9 0004 9dee jsr 49dee <_Thread_Enable_dispatch>
return RTEMS_RESOURCE_IN_USE;
48326: 700c moveq #12,%d0
_IO_Driver_address_table [major] = *driver_table;
_Thread_Enable_dispatch();
return rtems_io_initialize( major, 0, NULL );
}
48328: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
4832e: 4e5e unlk %fp
48330: 4e75 rts
static inline bool rtems_io_is_empty_table(
const rtems_driver_address_table *table
)
{
return table->initialization_entry == NULL && table->open_entry == NULL;
48332: 4aa8 0004 tstl %a0@(4)
48336: 6700 ff78 beqw 482b0 <rtems_io_register_driver+0x70>
rtems_device_major_number n = _IO_Number_of_drivers;
rtems_device_major_number m = 0;
/* major is error checked by caller */
for ( m = 0; m < n; ++m ) {
4833a: 5282 addql #1,%d2
4833c: 41e8 0018 lea %a0@(24),%a0
48340: b480 cmpl %d0,%d2
48342: 6500 ff5c bcsw 482a0 <rtems_io_register_driver+0x60>
48346: 6000 ff68 braw 482b0 <rtems_io_register_driver+0x70>
static inline bool rtems_io_is_empty_table(
const rtems_driver_address_table *table
)
{
return table->initialization_entry == NULL && table->open_entry == NULL;
4834a: 4aa9 0004 tstl %a1@(4)
4834e: 6600 ff28 bnew 48278 <rtems_io_register_driver+0x38>
if ( driver_table == NULL )
return RTEMS_INVALID_ADDRESS;
if ( rtems_io_is_empty_table( driver_table ) )
return RTEMS_INVALID_ADDRESS;
48352: 7009 moveq #9,%d0
_IO_Driver_address_table [major] = *driver_table;
_Thread_Enable_dispatch();
return rtems_io_initialize( major, 0, NULL );
}
48354: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
4835a: 4e5e unlk %fp
4835c: 4e75 rts
static inline bool rtems_io_is_empty_table(
const rtems_driver_address_table *table
)
{
return table->initialization_entry == NULL && table->open_entry == NULL;
4835e: 4aa8 0004 tstl %a0@(4)
48362: 66bc bnes 48320 <rtems_io_register_driver+0xe0>
48364: 2239 0006 2876 movel 62876 <_IO_Driver_address_table>,%d1
}
*registered_major = major;
}
_IO_Driver_address_table [major] = *driver_table;
4836a: 2041 moveal %d1,%a0
4836c: d1c0 addal %d0,%a0
if ( !rtems_io_is_empty_table( table ) ) {
_Thread_Enable_dispatch();
return RTEMS_RESOURCE_IN_USE;
}
*registered_major = major;
4836e: 2482 movel %d2,%a2@
}
_IO_Driver_address_table [major] = *driver_table;
48370: 20d9 movel %a1@+,%a0@+
48372: 20d9 movel %a1@+,%a0@+
48374: 20d9 movel %a1@+,%a0@+
48376: 20d9 movel %a1@+,%a0@+
48378: 20d9 movel %a1@+,%a0@+
4837a: 2091 movel %a1@,%a0@
_Thread_Enable_dispatch();
4837c: 4eb9 0004 9dee jsr 49dee <_Thread_Enable_dispatch>
return rtems_io_initialize( major, 0, NULL );
48382: 2d42 0008 movel %d2,%fp@(8)
}
48386: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
_IO_Driver_address_table [major] = *driver_table;
_Thread_Enable_dispatch();
return rtems_io_initialize( major, 0, NULL );
4838c: 42ae 0010 clrl %fp@(16)
48390: 42ae 000c clrl %fp@(12)
}
48394: 4e5e unlk %fp
_IO_Driver_address_table [major] = *driver_table;
_Thread_Enable_dispatch();
return rtems_io_initialize( major, 0, NULL );
48396: 4ef9 0004 fde0 jmp 4fde0 <rtems_io_initialize>
if ( rtems_io_is_empty_table( table ) )
break;
}
/* Assigns invalid value in case of failure */
*major = m;
4839c: 4292 clrl %a2@ <== NOT EXECUTED
if ( major == 0 ) {
rtems_status_code sc = rtems_io_obtain_major_number( registered_major );
if ( sc != RTEMS_SUCCESSFUL ) {
_Thread_Enable_dispatch();
4839e: 4eb9 0004 9dee jsr 49dee <_Thread_Enable_dispatch>
*major = m;
if ( m != n )
return RTEMS_SUCCESSFUL;
return RTEMS_TOO_MANY;
483a4: 7005 moveq #5,%d0
_IO_Driver_address_table [major] = *driver_table;
_Thread_Enable_dispatch();
return rtems_io_initialize( major, 0, NULL );
}
483a6: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
483ac: 4e5e unlk %fp <== NOT EXECUTED
00042758 <rtems_io_register_name>:
rtems_status_code rtems_io_register_name(
const char *device_name,
rtems_device_major_number major,
rtems_device_minor_number minor
)
{
42758: 4e56 0000 linkw %fp,#0
)
{
union __rtems_dev_t temp;
temp.__overlay.major = _major;
temp.__overlay.minor = _minor;
4275c: 222e 0010 movel %fp@(16),%d1
rtems_device_minor_number _minor
)
{
union __rtems_dev_t temp;
temp.__overlay.major = _major;
42760: 202e 000c movel %fp@(12),%d0
int status;
dev_t dev;
dev = rtems_filesystem_make_dev_t( major, minor );
status = mknod( device_name, 0777 | S_IFCHR, dev );
42764: 2f01 movel %d1,%sp@-
42766: 2f00 movel %d0,%sp@-
42768: 4878 21ff pea 21ff <D_MAX_EXP+0x1a00>
4276c: 2f2e 0008 movel %fp@(8),%sp@-
42770: 4eb9 0004 31d8 jsr 431d8 <mknod>
/* this is the only error returned by the old version */
if ( status )
42776: 4fef 0010 lea %sp@(16),%sp
4277a: 4a80 tstl %d0
4277c: 6606 bnes 42784 <rtems_io_register_name+0x2c> <== NEVER TAKEN
return RTEMS_TOO_MANY;
return RTEMS_SUCCESSFUL;
4277e: 4280 clrl %d0
}
42780: 4e5e unlk %fp
42782: 4e75 rts
dev = rtems_filesystem_make_dev_t( major, minor );
status = mknod( device_name, 0777 | S_IFCHR, dev );
/* this is the only error returned by the old version */
if ( status )
return RTEMS_TOO_MANY;
42784: 7005 moveq #5,%d0 <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
}
42786: 4e5e unlk %fp <== NOT EXECUTED
00049470 <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)
{
49470: 4e56 fff0 linkw %fp,#-16
49474: 48d7 1c04 moveml %d2/%a2-%a4,%sp@
49478: 266e 0008 moveal %fp@(8),%a3
uint32_t i;
uint32_t api_index;
Thread_Control *the_thread;
Objects_Information *information;
if ( !routine )
4947c: 4a8b tstl %a3
4947e: 6742 beqs 494c2 <rtems_iterate_over_all_threads+0x52><== NEVER TAKEN
49480: 49f9 0006 89ec lea 689ec <_Objects_Information_table+0x4>,%a4
return;
for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; api_index++ ) {
if ( !_Objects_Information_table[ api_index ] )
49486: 205c moveal %a4@+,%a0
49488: 4a88 tstl %a0
4948a: 672e beqs 494ba <rtems_iterate_over_all_threads+0x4a>
continue;
information = _Objects_Information_table[ api_index ][ 1 ];
4948c: 2468 0004 moveal %a0@(4),%a2
if ( !information )
49490: 4a8a tstl %a2
49492: 6726 beqs 494ba <rtems_iterate_over_all_threads+0x4a>
continue;
for ( i=1 ; i <= information->maximum ; i++ ) {
49494: 4a6a 000e tstw %a2@(14)
49498: 6720 beqs 494ba <rtems_iterate_over_all_threads+0x4a><== NEVER TAKEN
4949a: 7401 moveq #1,%d2
the_thread = (Thread_Control *)information->local_table[ i ];
4949c: 206a 0018 moveal %a2@(24),%a0
494a0: 2030 2c00 movel %a0@(00000000,%d2:l:4),%d0
information = _Objects_Information_table[ api_index ][ 1 ];
if ( !information )
continue;
for ( i=1 ; i <= information->maximum ; i++ ) {
494a4: 5282 addql #1,%d2
the_thread = (Thread_Control *)information->local_table[ i ];
if ( !the_thread )
494a6: 4a80 tstl %d0
494a8: 6706 beqs 494b0 <rtems_iterate_over_all_threads+0x40><== NEVER TAKEN
continue;
(*routine)(the_thread);
494aa: 2f00 movel %d0,%sp@-
494ac: 4e93 jsr %a3@
494ae: 588f addql #4,%sp
information = _Objects_Information_table[ api_index ][ 1 ];
if ( !information )
continue;
for ( i=1 ; i <= information->maximum ; i++ ) {
494b0: 4280 clrl %d0
494b2: 302a 000e movew %a2@(14),%d0
494b6: b480 cmpl %d0,%d2
494b8: 63e2 blss 4949c <rtems_iterate_over_all_threads+0x2c>
Objects_Information *information;
if ( !routine )
return;
for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; api_index++ ) {
494ba: b9fc 0006 89f8 cmpal #428536,%a4
494c0: 66c4 bnes 49486 <rtems_iterate_over_all_threads+0x16>
(*routine)(the_thread);
}
}
}
494c2: 4cee 1c04 fff0 moveml %fp@(-16),%d2/%a2-%a4
494c8: 4e5e unlk %fp <== NOT EXECUTED
0004b14e <rtems_libio_free>:
*/
void rtems_libio_free(
rtems_libio_t *iop
)
{
4b14e: 4e56 0000 linkw %fp,#0
4b152: 2f0a movel %a2,%sp@-
4b154: 246e 0008 moveal %fp@(8),%a2
rtems_status_code rtems_libio_set_private_env(void);
rtems_status_code rtems_libio_share_private_env(rtems_id task_id) ;
static inline void rtems_libio_lock( void )
{
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
4b158: 42a7 clrl %sp@-
4b15a: 42a7 clrl %sp@-
4b15c: 2f39 0005 e2d0 movel 5e2d0 <rtems_libio_semaphore>,%sp@-
4b162: 4eb9 0004 6648 jsr 46648 <rtems_semaphore_obtain>
rtems_libio_lock();
if (iop->sem)
4b168: 202a 002c movel %a2@(44),%d0
4b16c: 4fef 000c lea %sp@(12),%sp
4b170: 6630 bnes 4b1a2 <rtems_libio_free+0x54> <== ALWAYS TAKEN
rtems_semaphore_delete(iop->sem);
iop->flags &= ~LIBIO_FLAGS_OPEN;
iop->data1 = rtems_libio_iop_freelist;
4b172: 41f9 0005 e2cc lea 5e2cc <rtems_libio_iop_freelist>,%a0 <== NOT EXECUTED
rtems_libio_lock();
if (iop->sem)
rtems_semaphore_delete(iop->sem);
iop->flags &= ~LIBIO_FLAGS_OPEN;
4b178: 203c ffff feff movel #-257,%d0 <== NOT EXECUTED
iop->data1 = rtems_libio_iop_freelist;
4b17e: 2550 0034 movel %a0@,%a2@(52) <== NOT EXECUTED
}
static inline void rtems_libio_unlock( void )
{
rtems_semaphore_release( rtems_libio_semaphore );
4b182: 41f9 0005 e2d0 lea 5e2d0 <rtems_libio_semaphore>,%a0 <== NOT EXECUTED
4b188: 2d50 0008 movel %a0@,%fp@(8) <== NOT EXECUTED
rtems_libio_lock();
if (iop->sem)
rtems_semaphore_delete(iop->sem);
iop->flags &= ~LIBIO_FLAGS_OPEN;
4b18c: c1aa 0014 andl %d0,%a2@(20) <== NOT EXECUTED
iop->data1 = rtems_libio_iop_freelist;
rtems_libio_iop_freelist = iop;
4b190: 23ca 0005 e2cc movel %a2,5e2cc <rtems_libio_iop_freelist> <== NOT EXECUTED
rtems_libio_unlock();
}
4b196: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
4b19a: 4e5e unlk %fp <== NOT EXECUTED
4b19c: 4ef9 0004 6788 jmp 46788 <rtems_semaphore_release> <== NOT EXECUTED
)
{
rtems_libio_lock();
if (iop->sem)
rtems_semaphore_delete(iop->sem);
4b1a2: 2f00 movel %d0,%sp@-
4b1a4: 4eb9 0004 6570 jsr 46570 <rtems_semaphore_delete>
4b1aa: 588f addql #4,%sp
iop->flags &= ~LIBIO_FLAGS_OPEN;
iop->data1 = rtems_libio_iop_freelist;
4b1ac: 41f9 0005 e2cc lea 5e2cc <rtems_libio_iop_freelist>,%a0
rtems_libio_lock();
if (iop->sem)
rtems_semaphore_delete(iop->sem);
iop->flags &= ~LIBIO_FLAGS_OPEN;
4b1b2: 203c ffff feff movel #-257,%d0
iop->data1 = rtems_libio_iop_freelist;
4b1b8: 2550 0034 movel %a0@,%a2@(52)
4b1bc: 41f9 0005 e2d0 lea 5e2d0 <rtems_libio_semaphore>,%a0
4b1c2: 2d50 0008 movel %a0@,%fp@(8)
rtems_libio_lock();
if (iop->sem)
rtems_semaphore_delete(iop->sem);
iop->flags &= ~LIBIO_FLAGS_OPEN;
4b1c6: c1aa 0014 andl %d0,%a2@(20)
iop->data1 = rtems_libio_iop_freelist;
rtems_libio_iop_freelist = iop;
4b1ca: 23ca 0005 e2cc movel %a2,5e2cc <rtems_libio_iop_freelist>
rtems_libio_unlock();
}
4b1d0: 246e fffc moveal %fp@(-4),%a2
4b1d4: 4e5e unlk %fp
4b1d6: 4ef9 0004 6788 jmp 46788 <rtems_semaphore_release>
00042ed4 <rtems_libio_init>:
*
* Called by BSP startup code to initialize the libio subsystem.
*/
void rtems_libio_init( void )
{
42ed4: 4e56 0000 linkw %fp,#0
42ed8: 2f02 movel %d2,%sp@-
rtems_status_code rc;
uint32_t i;
rtems_libio_t *iop;
if (rtems_libio_number_iops > 0)
42eda: 2439 0005 cc44 movel 5cc44 <rtems_libio_number_iops>,%d2
42ee0: 674a beqs 42f2c <rtems_libio_init+0x58> <== NEVER TAKEN
{
rtems_libio_iops = (rtems_libio_t *) calloc(rtems_libio_number_iops,
42ee2: 4878 0038 pea 38 <DBL_MANT_DIG+0x3>
42ee6: 2f02 movel %d2,%sp@-
42ee8: 4eb9 0004 292c jsr 4292c <calloc>
sizeof(rtems_libio_t));
if (rtems_libio_iops == NULL)
42eee: 508f addql #8,%sp
uint32_t i;
rtems_libio_t *iop;
if (rtems_libio_number_iops > 0)
{
rtems_libio_iops = (rtems_libio_t *) calloc(rtems_libio_number_iops,
42ef0: 2040 moveal %d0,%a0
42ef2: 23c0 0005 e2c8 movel %d0,5e2c8 <rtems_libio_iops>
sizeof(rtems_libio_t));
if (rtems_libio_iops == NULL)
42ef8: 6778 beqs 42f72 <rtems_libio_init+0x9e>
rtems_fatal_error_occurred(RTEMS_NO_MEMORY);
iop = rtems_libio_iop_freelist = rtems_libio_iops;
42efa: 23c0 0005 e2cc movel %d0,5e2cc <rtems_libio_iop_freelist>
for (i = 0 ; (i + 1) < rtems_libio_number_iops ; i++, iop++)
42f00: 7201 moveq #1,%d1
42f02: b282 cmpl %d2,%d1
42f04: 6422 bccs 42f28 <rtems_libio_init+0x54> <== NEVER TAKEN
* rtems_libio_init
*
* Called by BSP startup code to initialize the libio subsystem.
*/
void rtems_libio_init( void )
42f06: 2040 moveal %d0,%a0
42f08: 41e8 0038 lea %a0@(56),%a0
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++)
iop->data1 = iop + 1;
42f0c: 2148 fffc movel %a0,%a0@(-4)
42f10: 5281 addql #1,%d1
42f12: 41e8 0038 lea %a0@(56),%a0
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++)
42f16: b481 cmpl %d1,%d2
42f18: 66f2 bnes 42f0c <rtems_libio_init+0x38>
* rtems_libio_init
*
* Called by BSP startup code to initialize the libio subsystem.
*/
void rtems_libio_init( void )
42f1a: 5381 subql #1,%d1
42f1c: 2401 movel %d1,%d2
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++)
42f1e: 2040 moveal %d0,%a0
* rtems_libio_init
*
* Called by BSP startup code to initialize the libio subsystem.
*/
void rtems_libio_init( void )
42f20: e78a lsll #3,%d2
42f22: ed89 lsll #6,%d1
42f24: 9282 subl %d2,%d1
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++)
42f26: d1c1 addal %d1,%a0
iop->data1 = iop + 1;
iop->data1 = NULL;
42f28: 42a8 0034 clrl %a0@(52)
/*
* Create the binary semaphore used to provide mutual exclusion
* on the IOP Table.
*/
rc = rtems_semaphore_create(
42f2c: 4879 0005 e2d0 pea 5e2d0 <rtems_libio_semaphore>
42f32: 42a7 clrl %sp@-
42f34: 4878 0054 pea 54 <DBL_MANT_DIG+0x1f>
42f38: 4878 0001 pea 1 <ADD>
42f3c: 2f3c 4c42 494f movel #1279412559,%sp@-
42f42: 4eb9 0004 63ac jsr 463ac <rtems_semaphore_create>
1,
RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY,
RTEMS_NO_PRIORITY,
&rtems_libio_semaphore
);
if ( rc != RTEMS_SUCCESSFUL )
42f48: 4fef 0014 lea %sp@(20),%sp
42f4c: 4a80 tstl %d0
42f4e: 661a bnes 42f6a <rtems_libio_init+0x96> <== NEVER TAKEN
/*
* Initialize the base file system infrastructure.
*/
if (rtems_fs_init_helper)
42f50: 2279 0005 cc40 moveal 5cc40 <rtems_fs_init_helper>,%a1
42f56: 4a89 tstl %a1
42f58: 6708 beqs 42f62 <rtems_libio_init+0x8e> <== NEVER TAKEN
(* rtems_fs_init_helper)();
}
42f5a: 242e fffc movel %fp@(-4),%d2
42f5e: 4e5e unlk %fp
/*
* Initialize the base file system infrastructure.
*/
if (rtems_fs_init_helper)
(* rtems_fs_init_helper)();
42f60: 4ed1 jmp %a1@
}
42f62: 242e fffc movel %fp@(-4),%d2 <== NOT EXECUTED
42f66: 4e5e unlk %fp <== NOT EXECUTED
42f68: 4e75 rts <== NOT EXECUTED
RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY,
RTEMS_NO_PRIORITY,
&rtems_libio_semaphore
);
if ( rc != RTEMS_SUCCESSFUL )
rtems_fatal_error_occurred( rc );
42f6a: 2f00 movel %d0,%sp@- <== NOT EXECUTED
42f6c: 4eb9 0004 6d6c jsr 46d6c <rtems_fatal_error_occurred> <== NOT EXECUTED
if (rtems_libio_number_iops > 0)
{
rtems_libio_iops = (rtems_libio_t *) calloc(rtems_libio_number_iops,
sizeof(rtems_libio_t));
if (rtems_libio_iops == NULL)
rtems_fatal_error_occurred(RTEMS_NO_MEMORY);
42f72: 4878 001a pea 1a <OPER2+0x6>
42f76: 4eb9 0004 6d6c jsr 46d6c <rtems_fatal_error_occurred>
0004b25a <rtems_libio_is_file_open>:
*/
int rtems_libio_is_file_open(
void *node_access
)
{
4b25a: 4e56 0000 linkw %fp,#0
4b25e: 2f02 movel %d2,%sp@-
4b260: 242e 0008 movel %fp@(8),%d2
rtems_status_code rtems_libio_set_private_env(void);
rtems_status_code rtems_libio_share_private_env(rtems_id task_id) ;
static inline void rtems_libio_lock( void )
{
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
4b264: 42a7 clrl %sp@-
4b266: 42a7 clrl %sp@-
4b268: 2f39 0005 e2d0 movel 5e2d0 <rtems_libio_semaphore>,%sp@-
4b26e: 4eb9 0004 6648 jsr 46648 <rtems_semaphore_obtain>
/*
* Look for any active file descriptor entry.
*/
for (iop=rtems_libio_iops,i=0; i < rtems_libio_number_iops; iop++, i++){
4b274: 2079 0005 e2c8 moveal 5e2c8 <rtems_libio_iops>,%a0
4b27a: 4fef 000c lea %sp@(12),%sp
4b27e: 2279 0005 cc44 moveal 5cc44 <rtems_libio_number_iops>,%a1
4b284: 4a89 tstl %a1
4b286: 6720 beqs 4b2a8 <rtems_libio_is_file_open+0x4e> <== NEVER TAKEN
* given file refers to an active file descriptor.
*
* If the given file is open a 1 is returned, otherwise a 0 is returned.
*/
int rtems_libio_is_file_open(
4b288: 41e8 0014 lea %a0@(20),%a0
/*
* Look for any active file descriptor entry.
*/
for (iop=rtems_libio_iops,i=0; i < rtems_libio_number_iops; iop++, i++){
4b28c: 4280 clrl %d0
if ((iop->flags & LIBIO_FLAGS_OPEN) != 0) {
4b28e: 2210 movel %a0@,%d1
/*
* Look for any active file descriptor entry.
*/
for (iop=rtems_libio_iops,i=0; i < rtems_libio_number_iops; iop++, i++){
4b290: 5280 addql #1,%d0
if ((iop->flags & LIBIO_FLAGS_OPEN) != 0) {
4b292: 0281 0000 0100 andil #256,%d1
4b298: 6706 beqs 4b2a0 <rtems_libio_is_file_open+0x46>
/*
* Check if this node is under the file system that we
* are trying to dismount.
*/
if ( iop->pathinfo.node_access == node_access ) {
4b29a: b4a8 0004 cmpl %a0@(4),%d2
4b29e: 6720 beqs 4b2c0 <rtems_libio_is_file_open+0x66>
/*
* Look for any active file descriptor entry.
*/
for (iop=rtems_libio_iops,i=0; i < rtems_libio_number_iops; iop++, i++){
4b2a0: 41e8 0038 lea %a0@(56),%a0
4b2a4: b3c0 cmpal %d0,%a1
4b2a6: 62e6 bhis 4b28e <rtems_libio_is_file_open+0x34>
}
static inline void rtems_libio_unlock( void )
{
rtems_semaphore_release( rtems_libio_semaphore );
4b2a8: 2f39 0005 e2d0 movel 5e2d0 <rtems_libio_semaphore>,%sp@-
int rtems_libio_is_file_open(
void *node_access
)
{
rtems_libio_t *iop;
int result=0;
4b2ae: 4282 clrl %d2
4b2b0: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
}
rtems_libio_unlock();
return result;
}
4b2b6: 2002 movel %d2,%d0
4b2b8: 242e fffc movel %fp@(-4),%d2
4b2bc: 4e5e unlk %fp
4b2be: 4e75 rts
4b2c0: 2f39 0005 e2d0 movel 5e2d0 <rtems_libio_semaphore>,%sp@-
* Check if this node is under the file system that we
* are trying to dismount.
*/
if ( iop->pathinfo.node_access == node_access ) {
result = 1;
4b2c6: 7401 moveq #1,%d2
4b2c8: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
}
rtems_libio_unlock();
return result;
}
4b2ce: 2002 movel %d2,%d0
4b2d0: 242e fffc movel %fp@(-4),%d2
4b2d4: 4e5e unlk %fp <== NOT EXECUTED
0004b1dc <rtems_libio_is_open_files_in_fs>:
*/
int rtems_libio_is_open_files_in_fs(
rtems_filesystem_mount_table_entry_t * fs_mt_entry
)
{
4b1dc: 4e56 0000 linkw %fp,#0
4b1e0: 2f02 movel %d2,%sp@-
4b1e2: 242e 0008 movel %fp@(8),%d2
rtems_status_code rtems_libio_set_private_env(void);
rtems_status_code rtems_libio_share_private_env(rtems_id task_id) ;
static inline void rtems_libio_lock( void )
{
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
4b1e6: 42a7 clrl %sp@-
4b1e8: 42a7 clrl %sp@-
4b1ea: 2f39 0005 e2d0 movel 5e2d0 <rtems_libio_semaphore>,%sp@-
4b1f0: 4eb9 0004 6648 jsr 46648 <rtems_semaphore_obtain>
/*
* Look for any active file descriptor entry.
*/
for (iop=rtems_libio_iops,i=0; i < rtems_libio_number_iops; iop++, i++){
4b1f6: 2079 0005 e2c8 moveal 5e2c8 <rtems_libio_iops>,%a0
4b1fc: 4fef 000c lea %sp@(12),%sp
4b200: 2279 0005 cc44 moveal 5cc44 <rtems_libio_number_iops>,%a1
4b206: 4a89 tstl %a1
4b208: 6720 beqs 4b22a <rtems_libio_is_open_files_in_fs+0x4e><== NEVER TAKEN
*
* If there is at least one node in the file system referenced by the mount
* table entry a 1 is returned, otherwise a 0 is returned.
*/
int rtems_libio_is_open_files_in_fs(
4b20a: 41e8 0014 lea %a0@(20),%a0
/*
* Look for any active file descriptor entry.
*/
for (iop=rtems_libio_iops,i=0; i < rtems_libio_number_iops; iop++, i++){
4b20e: 4280 clrl %d0
if ((iop->flags & LIBIO_FLAGS_OPEN) != 0) {
4b210: 2210 movel %a0@,%d1
/*
* Look for any active file descriptor entry.
*/
for (iop=rtems_libio_iops,i=0; i < rtems_libio_number_iops; iop++, i++){
4b212: 5280 addql #1,%d0
if ((iop->flags & LIBIO_FLAGS_OPEN) != 0) {
4b214: 0281 0000 0100 andil #256,%d1
4b21a: 6706 beqs 4b222 <rtems_libio_is_open_files_in_fs+0x46>
/*
* Check if this node is under the file system that we
* are trying to dismount.
*/
if ( iop->pathinfo.mt_entry == fs_mt_entry ) {
4b21c: b4a8 0014 cmpl %a0@(20),%d2
4b220: 6720 beqs 4b242 <rtems_libio_is_open_files_in_fs+0x66>
/*
* Look for any active file descriptor entry.
*/
for (iop=rtems_libio_iops,i=0; i < rtems_libio_number_iops; iop++, i++){
4b222: 41e8 0038 lea %a0@(56),%a0
4b226: b3c0 cmpal %d0,%a1
4b228: 62e6 bhis 4b210 <rtems_libio_is_open_files_in_fs+0x34>
}
static inline void rtems_libio_unlock( void )
{
rtems_semaphore_release( rtems_libio_semaphore );
4b22a: 2f39 0005 e2d0 movel 5e2d0 <rtems_libio_semaphore>,%sp@-
int rtems_libio_is_open_files_in_fs(
rtems_filesystem_mount_table_entry_t * fs_mt_entry
)
{
rtems_libio_t *iop;
int result = 0;
4b230: 4282 clrl %d2
4b232: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
}
rtems_libio_unlock();
return result;
}
4b238: 2002 movel %d2,%d0
4b23a: 242e fffc movel %fp@(-4),%d2
4b23e: 4e5e unlk %fp
4b240: 4e75 rts
4b242: 2f39 0005 e2d0 movel 5e2d0 <rtems_libio_semaphore>,%sp@-
* Check if this node is under the file system that we
* are trying to dismount.
*/
if ( iop->pathinfo.mt_entry == fs_mt_entry ) {
result = 1;
4b248: 7401 moveq #1,%d2
4b24a: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
}
rtems_libio_unlock();
return result;
}
4b250: 2002 movel %d2,%d0
4b252: 242e fffc movel %fp@(-4),%d2
4b256: 4e5e unlk %fp <== NOT EXECUTED
0004435c <rtems_libio_set_private_env>:
rtems_status_code rtems_libio_set_private_env(void)
{
4435c: 4e56 ffd4 linkw %fp,#-44
44360: 48d7 3c04 moveml %d2/%a2-%a5,%sp@
rtems_status_code sc;
rtems_id task_id;
rtems_filesystem_location_info_t loc;
sc=rtems_task_ident(RTEMS_SELF,0,&task_id);
44364: 486e fffc pea %fp@(-4)
44368: 42a7 clrl %sp@-
4436a: 42a7 clrl %sp@-
4436c: 4eb9 0004 7414 jsr 47414 <rtems_task_ident>
if (sc != RTEMS_SUCCESSFUL) return sc;
44372: 4fef 000c lea %sp@(12),%sp
{
rtems_status_code sc;
rtems_id task_id;
rtems_filesystem_location_info_t loc;
sc=rtems_task_ident(RTEMS_SELF,0,&task_id);
44376: 2400 movel %d0,%d2
if (sc != RTEMS_SUCCESSFUL) return sc;
44378: 6600 009a bnew 44414 <rtems_libio_set_private_env+0xb8>
/* Only for the first time a malloc is necesary */
if (rtems_current_user_env==&rtems_global_user_env) {
4437c: 2479 0005 d648 moveal 5d648 <rtems_current_user_env>,%a2
44382: b5fc 0005 ec08 cmpal #388104,%a2
44388: 6700 0096 beqw 44420 <rtems_libio_set_private_env+0xc4>
return sc;
}
rtems_current_user_env = tmp;
}
*rtems_current_user_env = rtems_global_user_env; /* get the global values*/
4438c: 4878 0048 pea 48 <DBL_MANT_DIG+0x13>
* what we are trying to do here is forking off
* clones. The reason is a pathloc can be allocated by the
* file system and needs to be freed when deleting the environment.
*/
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
44390: 47ee ffe8 lea %fp@(-24),%a3
return sc;
}
rtems_current_user_env = tmp;
}
*rtems_current_user_env = rtems_global_user_env; /* get the global values*/
44394: 4879 0005 ec08 pea 5ec08 <rtems_global_user_env>
* what we are trying to do here is forking off
* clones. The reason is a pathloc can be allocated by the
* file system and needs to be freed when deleting the environment.
*/
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
4439a: 4bf9 0004 3050 lea 43050 <rtems_filesystem_evaluate_path>,%a5
rtems_filesystem_root = loc;
443a0: 49ee fff8 lea %fp@(-8),%a4
return sc;
}
rtems_current_user_env = tmp;
}
*rtems_current_user_env = rtems_global_user_env; /* get the global values*/
443a4: 2f0a movel %a2,%sp@-
443a6: 4eb9 0004 ec70 jsr 4ec70 <memcpy>
rtems_current_user_env->task_id=task_id; /* mark the local values*/
443ac: 24ae fffc movel %fp@(-4),%a2@
* what we are trying to do here is forking off
* clones. The reason is a pathloc can be allocated by the
* file system and needs to be freed when deleting the environment.
*/
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
443b0: 42a7 clrl %sp@-
443b2: 2f0b movel %a3,%sp@-
443b4: 42a7 clrl %sp@-
443b6: 4878 0001 pea 1 <ADD>
443ba: 4879 0005 c342 pea 5c342 <IMFS_ops+0x48>
443c0: 4e95 jsr %a5@
rtems_filesystem_root = loc;
443c2: 2079 0005 d648 moveal 5d648 <rtems_current_user_env>,%a0
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
443c8: 4fef 0020 lea %sp@(32),%sp
* clones. The reason is a pathloc can be allocated by the
* file system and needs to be freed when deleting the environment.
*/
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
rtems_filesystem_root = loc;
443cc: 2153 0018 movel %a3@,%a0@(24)
443d0: 216e ffec 001c movel %fp@(-20),%a0@(28)
443d6: 216e fff0 0020 movel %fp@(-16),%a0@(32)
443dc: 216e fff4 0024 movel %fp@(-12),%a0@(36)
443e2: 2154 0028 movel %a4@,%a0@(40)
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
443e6: 42a7 clrl %sp@-
443e8: 2f0b movel %a3,%sp@-
443ea: 42a7 clrl %sp@-
443ec: 4878 0001 pea 1 <ADD>
443f0: 4879 0005 c342 pea 5c342 <IMFS_ops+0x48>
443f6: 4e95 jsr %a5@
rtems_filesystem_current = loc;
443f8: 2079 0005 d648 moveal 5d648 <rtems_current_user_env>,%a0
443fe: 5888 addql #4,%a0
return RTEMS_SUCCESSFUL;
44400: 4fef 0014 lea %sp@(20),%sp
*/
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
rtems_filesystem_root = loc;
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
rtems_filesystem_current = loc;
44404: 20d3 movel %a3@,%a0@+
44406: 20ee ffec movel %fp@(-20),%a0@+
4440a: 20ee fff0 movel %fp@(-16),%a0@+
4440e: 20ee fff4 movel %fp@(-12),%a0@+
44412: 2094 movel %a4@,%a0@
return RTEMS_SUCCESSFUL;
}
44414: 2002 movel %d2,%d0
44416: 4cee 3c04 ffd4 moveml %fp@(-44),%d2/%a2-%a5
4441c: 4e5e unlk %fp
4441e: 4e75 rts
sc=rtems_task_ident(RTEMS_SELF,0,&task_id);
if (sc != RTEMS_SUCCESSFUL) return sc;
/* Only for the first time a malloc is necesary */
if (rtems_current_user_env==&rtems_global_user_env) {
rtems_user_env_t *tmp = malloc(sizeof(rtems_user_env_t));
44420: 4878 0048 pea 48 <DBL_MANT_DIG+0x13>
44424: 4eb9 0004 3794 jsr 43794 <malloc>
if (!tmp)
4442a: 588f addql #4,%sp
sc=rtems_task_ident(RTEMS_SELF,0,&task_id);
if (sc != RTEMS_SUCCESSFUL) return sc;
/* Only for the first time a malloc is necesary */
if (rtems_current_user_env==&rtems_global_user_env) {
rtems_user_env_t *tmp = malloc(sizeof(rtems_user_env_t));
4442c: 2440 moveal %d0,%a2
if (!tmp)
4442e: 4a80 tstl %d0
44430: 6700 00b0 beqw 444e2 <rtems_libio_set_private_env+0x186>
#ifdef HAVE_USERENV_REFCNT
tmp->refcnt = 1;
#endif
sc = rtems_task_variable_add(
44434: 487a fede pea %pc@(44314 <free_user_env>)
44438: 4879 0005 d648 pea 5d648 <rtems_current_user_env>
4443e: 42a7 clrl %sp@-
44440: 4eb9 0004 75a8 jsr 475a8 <rtems_task_variable_add>
RTEMS_SELF,
(void*)&rtems_current_user_env,
(void(*)(void *))free_user_env
);
if (sc != RTEMS_SUCCESSFUL) {
44446: 4fef 000c lea %sp@(12),%sp
4444a: 4a80 tstl %d0
4444c: 6600 00a2 bnew 444f0 <rtems_libio_set_private_env+0x194>
return sc;
}
rtems_current_user_env = tmp;
}
*rtems_current_user_env = rtems_global_user_env; /* get the global values*/
44450: 4878 0048 pea 48 <DBL_MANT_DIG+0x13>
* what we are trying to do here is forking off
* clones. The reason is a pathloc can be allocated by the
* file system and needs to be freed when deleting the environment.
*/
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
44454: 47ee ffe8 lea %fp@(-24),%a3
return sc;
}
rtems_current_user_env = tmp;
}
*rtems_current_user_env = rtems_global_user_env; /* get the global values*/
44458: 4879 0005 ec08 pea 5ec08 <rtems_global_user_env>
* what we are trying to do here is forking off
* clones. The reason is a pathloc can be allocated by the
* file system and needs to be freed when deleting the environment.
*/
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
4445e: 4bf9 0004 3050 lea 43050 <rtems_filesystem_evaluate_path>,%a5
rtems_filesystem_root = loc;
44464: 49ee fff8 lea %fp@(-8),%a4
return sc;
}
rtems_current_user_env = tmp;
}
*rtems_current_user_env = rtems_global_user_env; /* get the global values*/
44468: 2f0a movel %a2,%sp@-
* not initialized yet
*/
free(tmp);
return sc;
}
rtems_current_user_env = tmp;
4446a: 23ca 0005 d648 movel %a2,5d648 <rtems_current_user_env>
}
*rtems_current_user_env = rtems_global_user_env; /* get the global values*/
44470: 4eb9 0004 ec70 jsr 4ec70 <memcpy>
rtems_current_user_env->task_id=task_id; /* mark the local values*/
44476: 24ae fffc movel %fp@(-4),%a2@
* what we are trying to do here is forking off
* clones. The reason is a pathloc can be allocated by the
* file system and needs to be freed when deleting the environment.
*/
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
4447a: 42a7 clrl %sp@-
4447c: 2f0b movel %a3,%sp@-
4447e: 42a7 clrl %sp@-
44480: 4878 0001 pea 1 <ADD>
44484: 4879 0005 c342 pea 5c342 <IMFS_ops+0x48>
4448a: 4e95 jsr %a5@
rtems_filesystem_root = loc;
4448c: 2079 0005 d648 moveal 5d648 <rtems_current_user_env>,%a0
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
44492: 4fef 0020 lea %sp@(32),%sp
* clones. The reason is a pathloc can be allocated by the
* file system and needs to be freed when deleting the environment.
*/
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
rtems_filesystem_root = loc;
44496: 2153 0018 movel %a3@,%a0@(24)
4449a: 216e ffec 001c movel %fp@(-20),%a0@(28)
444a0: 216e fff0 0020 movel %fp@(-16),%a0@(32)
444a6: 216e fff4 0024 movel %fp@(-12),%a0@(36)
444ac: 2154 0028 movel %a4@,%a0@(40)
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
444b0: 42a7 clrl %sp@-
444b2: 2f0b movel %a3,%sp@-
444b4: 42a7 clrl %sp@-
444b6: 4878 0001 pea 1 <ADD>
444ba: 4879 0005 c342 pea 5c342 <IMFS_ops+0x48>
444c0: 4e95 jsr %a5@
rtems_filesystem_current = loc;
444c2: 2079 0005 d648 moveal 5d648 <rtems_current_user_env>,%a0
444c8: 5888 addql #4,%a0
return RTEMS_SUCCESSFUL;
444ca: 4fef 0014 lea %sp@(20),%sp
*/
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
rtems_filesystem_root = loc;
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
rtems_filesystem_current = loc;
444ce: 20d3 movel %a3@,%a0@+
444d0: 20ee ffec movel %fp@(-20),%a0@+
444d4: 20ee fff0 movel %fp@(-16),%a0@+
444d8: 20ee fff4 movel %fp@(-12),%a0@+
444dc: 2094 movel %a4@,%a0@
444de: 6000 ff34 braw 44414 <rtems_libio_set_private_env+0xb8>
/* Only for the first time a malloc is necesary */
if (rtems_current_user_env==&rtems_global_user_env) {
rtems_user_env_t *tmp = malloc(sizeof(rtems_user_env_t));
if (!tmp)
return RTEMS_NO_MEMORY;
444e2: 741a moveq #26,%d2 <== NOT EXECUTED
rtems_filesystem_root = loc;
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
rtems_filesystem_current = loc;
return RTEMS_SUCCESSFUL;
}
444e4: 2002 movel %d2,%d0 <== NOT EXECUTED
444e6: 4cee 3c04 ffd4 moveml %fp@(-44),%d2/%a2-%a5 <== NOT EXECUTED
444ec: 4e5e unlk %fp <== NOT EXECUTED
444ee: 4e75 rts <== NOT EXECUTED
);
if (sc != RTEMS_SUCCESSFUL) {
/* don't use free_user_env because the pathlocs are
* not initialized yet
*/
free(tmp);
444f0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
return sc;
444f2: 2400 movel %d0,%d2 <== NOT EXECUTED
);
if (sc != RTEMS_SUCCESSFUL) {
/* don't use free_user_env because the pathlocs are
* not initialized yet
*/
free(tmp);
444f4: 4eb9 0004 3188 jsr 43188 <free> <== NOT EXECUTED
return sc;
444fa: 588f addql #4,%sp <== NOT EXECUTED
rtems_filesystem_root = loc;
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
rtems_filesystem_current = loc;
return RTEMS_SUCCESSFUL;
}
444fc: 2002 movel %d2,%d0 <== NOT EXECUTED
444fe: 4cee 3c04 ffd4 moveml %fp@(-44),%d2/%a2-%a5 <== NOT EXECUTED
44504: 4e5e unlk %fp <== NOT EXECUTED
00044508 <rtems_libio_share_private_env>:
* while changing any of those (chdir(), chroot()).
*/
#ifndef HAVE_USERENV_REFCNT
rtems_status_code rtems_libio_share_private_env(rtems_id task_id)
{
44508: 4e56 fff8 linkw %fp,#-8 <== NOT EXECUTED
4450c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
rtems_status_code sc;
rtems_user_env_t * shared_user_env;
rtems_id current_task_id;
sc=rtems_task_ident(RTEMS_SELF,0,¤t_task_id);
4450e: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
44512: 42a7 clrl %sp@- <== NOT EXECUTED
44514: 42a7 clrl %sp@- <== NOT EXECUTED
44516: 4eb9 0004 7414 jsr 47414 <rtems_task_ident> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) return sc;
4451c: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
44520: 4a80 tstl %d0 <== NOT EXECUTED
44522: 6636 bnes 4455a <rtems_libio_share_private_env+0x52><== NOT EXECUTED
if (rtems_current_user_env->task_id==current_task_id) {
44524: 2479 0005 d648 moveal 5d648 <rtems_current_user_env>,%a2 <== NOT EXECUTED
4452a: 202e fff8 movel %fp@(-8),%d0 <== NOT EXECUTED
4452e: b092 cmpl %a2@,%d0 <== NOT EXECUTED
44530: 6730 beqs 44562 <rtems_libio_share_private_env+0x5a><== NOT EXECUTED
rtems_user_env_t *tmp = rtems_current_user_env;
sc = rtems_task_variable_delete(RTEMS_SELF,(void*)&rtems_current_user_env);
if (sc != RTEMS_SUCCESSFUL) return sc;
free_user_env(tmp);
} else {
sc = rtems_task_variable_get(
44532: 486e fffc pea %fp@(-4) <== NOT EXECUTED
44536: 4879 0005 d648 pea 5d648 <rtems_current_user_env> <== NOT EXECUTED
4453c: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
44540: 4eb9 0004 770c jsr 4770c <rtems_task_variable_get> <== NOT EXECUTED
task_id,(void*)&rtems_current_user_env, (void*)&shared_user_env );
if (sc != RTEMS_SUCCESSFUL)
44546: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4454a: 4a80 tstl %d0 <== NOT EXECUTED
4454c: 6730 beqs 4457e <rtems_libio_share_private_env+0x76><== NOT EXECUTED
return RTEMS_SUCCESSFUL;
bailout:
/* fallback to the global env */
rtems_current_user_env = &rtems_global_user_env;
4454e: 223c 0005 ec08 movel #388104,%d1 <== NOT EXECUTED
44554: 23c1 0005 d648 movel %d1,5d648 <rtems_current_user_env> <== NOT EXECUTED
return sc;
}
4455a: 246e fff4 moveal %fp@(-12),%a2 <== NOT EXECUTED
4455e: 4e5e unlk %fp <== NOT EXECUTED
44560: 4e75 rts <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) return sc;
if (rtems_current_user_env->task_id==current_task_id) {
/* kill the current user env & task_var*/
rtems_user_env_t *tmp = rtems_current_user_env;
sc = rtems_task_variable_delete(RTEMS_SELF,(void*)&rtems_current_user_env);
44562: 4879 0005 d648 pea 5d648 <rtems_current_user_env> <== NOT EXECUTED
44568: 42a7 clrl %sp@- <== NOT EXECUTED
4456a: 4eb9 0004 7664 jsr 47664 <rtems_task_variable_delete> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) return sc;
44570: 508f addql #8,%sp <== NOT EXECUTED
44572: 4a80 tstl %d0 <== NOT EXECUTED
44574: 66e4 bnes 4455a <rtems_libio_share_private_env+0x52><== NOT EXECUTED
free_user_env(tmp);
44576: 2f0a movel %a2,%sp@- <== NOT EXECUTED
44578: 4eba fd9a jsr %pc@(44314 <free_user_env>) <== NOT EXECUTED
4457c: 588f addql #4,%sp <== NOT EXECUTED
goto bailout;
}
/* AT THIS POINT, rtems_current_user_env is DANGLING */
sc = rtems_task_variable_add(
4457e: 487a fd94 pea %pc@(44314 <free_user_env>) <== NOT EXECUTED
44582: 4879 0005 d648 pea 5d648 <rtems_current_user_env> <== NOT EXECUTED
44588: 42a7 clrl %sp@- <== NOT EXECUTED
4458a: 4eb9 0004 75a8 jsr 475a8 <rtems_task_variable_add> <== NOT EXECUTED
RTEMS_SELF,(void*)&rtems_current_user_env,free_user_env);
if (sc != RTEMS_SUCCESSFUL)
44590: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
44594: 4a80 tstl %d0 <== NOT EXECUTED
44596: 66b6 bnes 4454e <rtems_libio_share_private_env+0x46><== NOT EXECUTED
goto bailout;
/* the current_user_env is the same pointer that remote env */
rtems_current_user_env = shared_user_env;
44598: 41ee fffc lea %fp@(-4),%a0 <== NOT EXECUTED
bailout:
/* fallback to the global env */
rtems_current_user_env = &rtems_global_user_env;
return sc;
}
4459c: 246e fff4 moveal %fp@(-12),%a2 <== NOT EXECUTED
445a0: 4e5e unlk %fp <== NOT EXECUTED
RTEMS_SELF,(void*)&rtems_current_user_env,free_user_env);
if (sc != RTEMS_SUCCESSFUL)
goto bailout;
/* the current_user_env is the same pointer that remote env */
rtems_current_user_env = shared_user_env;
445a2: 23d0 0005 d648 movel %a0@,5d648 <rtems_current_user_env> <== NOT EXECUTED
bailout:
/* fallback to the global env */
rtems_current_user_env = &rtems_global_user_env;
return sc;
}
...
0004b03c <rtems_libio_to_fcntl_flags>:
uint32_t flags
)
{
uint32_t fcntl_flags = 0;
if ( (flags & LIBIO_FLAGS_READ_WRITE) == LIBIO_FLAGS_READ_WRITE ) {
4b03c: 7006 moveq #6,%d0
*/
uint32_t rtems_libio_to_fcntl_flags(
uint32_t flags
)
{
4b03e: 4e56 0000 linkw %fp,#0
4b042: 222e 0008 movel %fp@(8),%d1
uint32_t fcntl_flags = 0;
if ( (flags & LIBIO_FLAGS_READ_WRITE) == LIBIO_FLAGS_READ_WRITE ) {
4b046: c081 andl %d1,%d0
*/
uint32_t rtems_libio_to_fcntl_flags(
uint32_t flags
)
{
4b048: 2f02 movel %d2,%sp@-
uint32_t fcntl_flags = 0;
if ( (flags & LIBIO_FLAGS_READ_WRITE) == LIBIO_FLAGS_READ_WRITE ) {
4b04a: 7406 moveq #6,%d2
4b04c: b480 cmpl %d0,%d2
4b04e: 6736 beqs 4b086 <rtems_libio_to_fcntl_flags+0x4a><== NEVER TAKEN
fcntl_flags |= O_RDWR;
} else if ( (flags & LIBIO_FLAGS_READ) == LIBIO_FLAGS_READ) {
4b050: 0801 0001 btst #1,%d1
4b054: 6726 beqs 4b07c <rtems_libio_to_fcntl_flags+0x40><== NEVER TAKEN
fcntl_flags |= O_RDONLY;
4b056: 4280 clrl %d0
} else if ( (flags & LIBIO_FLAGS_WRITE) == LIBIO_FLAGS_WRITE) {
fcntl_flags |= O_WRONLY;
}
if ( (flags & LIBIO_FLAGS_NO_DELAY) == LIBIO_FLAGS_NO_DELAY ) {
4b058: 0801 0000 btst #0,%d1
4b05c: 6704 beqs 4b062 <rtems_libio_to_fcntl_flags+0x26>
fcntl_flags |= O_NONBLOCK;
4b05e: 08c0 000e bset #14,%d0
}
if ( (flags & LIBIO_FLAGS_APPEND) == LIBIO_FLAGS_APPEND ) {
4b062: 0801 0009 btst #9,%d1
4b066: 6704 beqs 4b06c <rtems_libio_to_fcntl_flags+0x30>
fcntl_flags |= O_APPEND;
4b068: 7408 moveq #8,%d2
4b06a: 8082 orl %d2,%d0
}
if ( (flags & LIBIO_FLAGS_CREATE) == LIBIO_FLAGS_CREATE ) {
4b06c: 0801 000a btst #10,%d1
4b070: 6704 beqs 4b076 <rtems_libio_to_fcntl_flags+0x3a>
fcntl_flags |= O_CREAT;
4b072: 08c0 0009 bset #9,%d0
}
return fcntl_flags;
}
4b076: 241f movel %sp@+,%d2
4b078: 4e5e unlk %fp
4b07a: 4e75 rts
)
{
uint32_t fcntl_flags = 0;
if ( (flags & LIBIO_FLAGS_READ_WRITE) == LIBIO_FLAGS_READ_WRITE ) {
fcntl_flags |= O_RDWR;
4b07c: 44c1 movew %d1,%ccr <== NOT EXECUTED
4b07e: 57c0 seq %d0 <== NOT EXECUTED
4b080: 49c0 extbl %d0 <== NOT EXECUTED
4b082: 4480 negl %d0 <== NOT EXECUTED
4b084: 60d2 bras 4b058 <rtems_libio_to_fcntl_flags+0x1c><== NOT EXECUTED
4b086: 7002 moveq #2,%d0 <== NOT EXECUTED
4b088: 60ce bras 4b058 <rtems_libio_to_fcntl_flags+0x1c><== NOT EXECUTED
00046f68 <rtems_malloc_statistics_at_free>:
* size and thus we skip updating the statistics.
*/
static void rtems_malloc_statistics_at_free(
void *pointer
)
{
46f68: 4e56 fffc linkw %fp,#-4
46f6c: 2f03 movel %d3,%sp@-
46f6e: 2f02 movel %d2,%sp@-
uintptr_t size;
if (_Protected_heap_Get_block_size(RTEMS_Malloc_Heap, pointer, &size) ) {
46f70: 486e fffc pea %fp@(-4)
46f74: 2f2e 0008 movel %fp@(8),%sp@-
46f78: 2f39 0006 2790 movel 62790 <RTEMS_Malloc_Heap>,%sp@-
46f7e: 4eb9 0004 d068 jsr 4d068 <_Protected_heap_Get_block_size>
46f84: 4fef 000c lea %sp@(12),%sp
46f88: 4a00 tstb %d0
46f8a: 671a beqs 46fa6 <rtems_malloc_statistics_at_free+0x3e><== NEVER TAKEN
MSBUMP(lifetime_freed, size);
46f8c: 262e fffc movel %fp@(-4),%d3
46f90: 4282 clrl %d2
46f92: d7b9 0006 4734 addl %d3,64734 <rtems_malloc_statistics+0x28>
46f98: 2039 0006 4730 movel 64730 <rtems_malloc_statistics+0x24>,%d0
46f9e: d182 addxl %d2,%d0
46fa0: 23c0 0006 4730 movel %d0,64730 <rtems_malloc_statistics+0x24>
}
}
46fa6: 242e fff4 movel %fp@(-12),%d2
46faa: 262e fff8 movel %fp@(-8),%d3
46fae: 4e5e unlk %fp <== NOT EXECUTED
00046fb2 <rtems_malloc_statistics_at_malloc>:
}
static void rtems_malloc_statistics_at_malloc(
void *pointer
)
{
46fb2: 4e56 fffc linkw %fp,#-4
46fb6: 202e 0008 movel %fp@(8),%d0
46fba: 2f03 movel %d3,%sp@-
uintptr_t actual_size = 0;
46fbc: 42ae fffc clrl %fp@(-4)
}
static void rtems_malloc_statistics_at_malloc(
void *pointer
)
{
46fc0: 2f02 movel %d2,%sp@-
uintptr_t actual_size = 0;
uint32_t current_depth;
rtems_malloc_statistics_t *s = &rtems_malloc_statistics;
if ( !pointer )
46fc2: 4a80 tstl %d0
46fc4: 674c beqs 47012 <rtems_malloc_statistics_at_malloc+0x60><== NEVER TAKEN
return;
_Protected_heap_Get_block_size(RTEMS_Malloc_Heap, pointer, &actual_size);
46fc6: 486e fffc pea %fp@(-4)
MSBUMP(lifetime_allocated, actual_size);
46fca: 4282 clrl %d2
rtems_malloc_statistics_t *s = &rtems_malloc_statistics;
if ( !pointer )
return;
_Protected_heap_Get_block_size(RTEMS_Malloc_Heap, pointer, &actual_size);
46fcc: 2f00 movel %d0,%sp@-
46fce: 2f39 0006 2790 movel 62790 <RTEMS_Malloc_Heap>,%sp@-
46fd4: 4eb9 0004 d068 jsr 4d068 <_Protected_heap_Get_block_size>
MSBUMP(lifetime_allocated, actual_size);
46fda: 262e fffc movel %fp@(-4),%d3
current_depth = (uint32_t) (s->lifetime_allocated - s->lifetime_freed);
if (current_depth > s->max_depth)
46fde: 4fef 000c lea %sp@(12),%sp
if ( !pointer )
return;
_Protected_heap_Get_block_size(RTEMS_Malloc_Heap, pointer, &actual_size);
MSBUMP(lifetime_allocated, actual_size);
46fe2: 2039 0006 4728 movel 64728 <rtems_malloc_statistics+0x1c>,%d0
46fe8: d6b9 0006 472c addl 6472c <rtems_malloc_statistics+0x20>,%d3
46fee: d580 addxl %d0,%d2
current_depth = (uint32_t) (s->lifetime_allocated - s->lifetime_freed);
46ff0: 2003 movel %d3,%d0
46ff2: 90b9 0006 4734 subl 64734 <rtems_malloc_statistics+0x28>,%d0
if ( !pointer )
return;
_Protected_heap_Get_block_size(RTEMS_Malloc_Heap, pointer, &actual_size);
MSBUMP(lifetime_allocated, actual_size);
46ff8: 23c2 0006 4728 movel %d2,64728 <rtems_malloc_statistics+0x1c>
46ffe: 23c3 0006 472c movel %d3,6472c <rtems_malloc_statistics+0x20>
current_depth = (uint32_t) (s->lifetime_allocated - s->lifetime_freed);
if (current_depth > s->max_depth)
47004: b0b9 0006 4724 cmpl 64724 <rtems_malloc_statistics+0x18>,%d0
4700a: 6306 blss 47012 <rtems_malloc_statistics_at_malloc+0x60>
s->max_depth = current_depth;
4700c: 23c0 0006 4724 movel %d0,64724 <rtems_malloc_statistics+0x18>
}
47012: 242e fff4 movel %fp@(-12),%d2
47016: 262e fff8 movel %fp@(-8),%d3
4701a: 4e5e unlk %fp <== NOT EXECUTED
0004f6a8 <rtems_memalign>:
int rtems_memalign(
void **pointer,
size_t alignment,
size_t size
)
{
4f6a8: 4e56 0000 linkw %fp,#0
4f6ac: 2f0a movel %a2,%sp@-
4f6ae: 246e 0008 moveal %fp@(8),%a2
4f6b2: 2f02 movel %d2,%sp@-
void *return_this;
/*
* Parameter error checks
*/
if ( !pointer )
4f6b4: 4a8a tstl %a2
4f6b6: 675e beqs 4f716 <rtems_memalign+0x6e>
return EINVAL;
*pointer = NULL;
4f6b8: 4292 clrl %a2@
/*
* Do not attempt to allocate memory if not in correct system state.
*/
if ( _System_state_Is_up(_System_state_Get()) &&
4f6ba: 7003 moveq #3,%d0
4f6bc: b0b9 0006 27d0 cmpl 627d0 <_System_state_Current>,%d0
4f6c2: 6748 beqs 4f70c <rtems_memalign+0x64> <== ALWAYS TAKEN
return EINVAL;
/*
* If some free's have been deferred, then do them now.
*/
malloc_deferred_frees_process();
4f6c4: 4eb9 0004 4154 jsr 44154 <malloc_deferred_frees_process>
Heap_Control *heap,
uintptr_t size,
uintptr_t alignment
)
{
return
4f6ca: 42a7 clrl %sp@-
4f6cc: 2f2e 000c movel %fp@(12),%sp@-
4f6d0: 2f2e 0010 movel %fp@(16),%sp@-
4f6d4: 2f39 0006 0de0 movel 60de0 <RTEMS_Malloc_Heap>,%sp@-
4f6da: 4eb9 0004 9744 jsr 49744 <_Protected_heap_Allocate_aligned_with_boundary>
return_this = _Protected_heap_Allocate_aligned(
RTEMS_Malloc_Heap,
size,
alignment
);
if ( !return_this )
4f6e0: 4fef 0010 lea %sp@(16),%sp
4f6e4: 2400 movel %d0,%d2
4f6e6: 673c beqs 4f724 <rtems_memalign+0x7c>
return ENOMEM;
/*
* If configured, update the more involved statistics
*/
if ( rtems_malloc_statistics_helpers )
4f6e8: 2079 0006 1446 moveal 61446 <rtems_malloc_statistics_helpers>,%a0
4f6ee: 4a88 tstl %a0
4f6f0: 670a beqs 4f6fc <rtems_memalign+0x54>
(*rtems_malloc_statistics_helpers->at_malloc)(pointer);
4f6f2: 2f0a movel %a2,%sp@-
4f6f4: 2068 0004 moveal %a0@(4),%a0
4f6f8: 4e90 jsr %a0@
4f6fa: 588f addql #4,%sp
*pointer = return_this;
4f6fc: 2482 movel %d2,%a2@
return 0;
}
4f6fe: 242e fff8 movel %fp@(-8),%d2
*/
if ( rtems_malloc_statistics_helpers )
(*rtems_malloc_statistics_helpers->at_malloc)(pointer);
*pointer = return_this;
return 0;
4f702: 4280 clrl %d0
}
4f704: 246e fffc moveal %fp@(-4),%a2
4f708: 4e5e unlk %fp
4f70a: 4e75 rts
/*
* 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() )
4f70c: 4eb9 0004 4114 jsr 44114 <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()) &&
4f712: 4a00 tstb %d0
4f714: 66ae bnes 4f6c4 <rtems_memalign+0x1c> <== ALWAYS TAKEN
if ( rtems_malloc_statistics_helpers )
(*rtems_malloc_statistics_helpers->at_malloc)(pointer);
*pointer = return_this;
return 0;
}
4f716: 242e fff8 movel %fp@(-8),%d2
/*
* 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() )
return EINVAL;
4f71a: 7016 moveq #22,%d0
if ( rtems_malloc_statistics_helpers )
(*rtems_malloc_statistics_helpers->at_malloc)(pointer);
*pointer = return_this;
return 0;
}
4f71c: 246e fffc moveal %fp@(-4),%a2
4f720: 4e5e unlk %fp
4f722: 4e75 rts
4f724: 242e fff8 movel %fp@(-8),%d2
RTEMS_Malloc_Heap,
size,
alignment
);
if ( !return_this )
return ENOMEM;
4f728: 700c moveq #12,%d0
if ( rtems_malloc_statistics_helpers )
(*rtems_malloc_statistics_helpers->at_malloc)(pointer);
*pointer = return_this;
return 0;
}
4f72a: 246e fffc moveal %fp@(-4),%a2
4f72e: 4e5e unlk %fp
...
0004db08 <rtems_mkdir>:
return (retval);
}
int
rtems_mkdir(const char *path, mode_t mode)
{
4db08: 4e56 ff90 linkw %fp,#-112
4db0c: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
int success = 0;
char *dup_path = strdup(path);
4db10: 2f2e 0008 movel %fp@(8),%sp@-
return (retval);
}
int
rtems_mkdir(const char *path, mode_t mode)
{
4db14: 2a2e 000c movel %fp@(12),%d5
int success = 0;
char *dup_path = strdup(path);
4db18: 4eb9 0005 0378 jsr 50378 <strdup>
if (dup_path != NULL) {
4db1e: 588f addql #4,%sp
int
rtems_mkdir(const char *path, mode_t mode)
{
int success = 0;
char *dup_path = strdup(path);
4db20: 2640 moveal %d0,%a3
if (dup_path != NULL) {
4db22: 4a80 tstl %d0
4db24: 6700 0138 beqw 4dc5e <rtems_mkdir+0x156>
char *p;
p = path;
oumask = 0;
retval = 1;
if (p[0] == '/') /* Skip leading '/'. */
4db28: 742f moveq #47,%d2
4db2a: 1013 moveb %a3@,%d0
4db2c: 1200 moveb %d0,%d1
4db2e: 49c1 extbl %d1
4db30: b481 cmpl %d1,%d2
4db32: 6700 014a beqw 4dc7e <rtems_mkdir+0x176>
4db36: 244b moveal %a3,%a2
(void)umask(oumask);
return (retval);
}
int
rtems_mkdir(const char *path, mode_t mode)
4db38: 49ea 0001 lea %a2@(1),%a4
4db3c: 4283 clrl %d3
4db3e: 7201 moveq #1,%d1
4db40: 4bf9 0004 488c lea 4488c <mkdir>,%a5
first = 0;
}
if (last)
(void)umask(oumask);
if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
if (errno == EEXIST || errno == EISDIR) {
4db46: 2e3c 0004 f3c8 movel #324552,%d7
numask = oumask & ~(S_IWUSR | S_IXUSR);
(void)umask(numask);
first = 0;
}
if (last)
(void)umask(oumask);
4db4c: 283c 0004 dd6c movel #318828,%d4
oumask = 0;
retval = 1;
if (p[0] == '/') /* Skip leading '/'. */
++p;
for (first = 1, last = 0; !last ; ++p) {
if (p[0] == '\0')
4db52: 4a00 tstb %d0
4db54: 6710 beqs 4db66 <rtems_mkdir+0x5e> <== NEVER TAKEN
last = 1;
else if (p[0] != '/')
4db56: 49c0 extbl %d0
4db58: 742f moveq #47,%d2
4db5a: b480 cmpl %d0,%d2
4db5c: 6738 beqs 4db96 <rtems_mkdir+0x8e>
p = path;
oumask = 0;
retval = 1;
if (p[0] == '/') /* Skip leading '/'. */
++p;
for (first = 1, last = 0; !last ; ++p) {
4db5e: 528a addql #1,%a2
4db60: 101c moveb %a4@+,%d0
if (p[0] == '\0')
4db62: 4a00 tstb %d0
4db64: 66f0 bnes 4db56 <rtems_mkdir+0x4e>
last = 1;
else if (p[0] != '/')
continue;
*p = '\0';
4db66: 7401 moveq #1,%d2
4db68: 4212 clrb %a2@
if (!last && p[1] == '\0')
last = 1;
if (first) {
4db6a: 4a81 tstl %d1
4db6c: 6650 bnes 4dbbe <rtems_mkdir+0xb6>
(void)umask(numask);
first = 0;
}
if (last)
(void)umask(oumask);
if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
4db6e: 203c 0000 01ff movel #511,%d0
oumask = umask(0);
numask = oumask & ~(S_IWUSR | S_IXUSR);
(void)umask(numask);
first = 0;
}
if (last)
4db74: 4a82 tstl %d2
4db76: 662e bnes 4dba6 <rtems_mkdir+0x9e>
(void)umask(oumask);
if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
4db78: 2f00 movel %d0,%sp@-
4db7a: 2f0b movel %a3,%sp@-
4db7c: 4e95 jsr %a5@
4db7e: 508f addql #8,%sp
4db80: 4a80 tstl %d0
4db82: 6d5c blts 4dbe0 <rtems_mkdir+0xd8>
} else {
retval = 0;
break;
}
}
if (!last)
4db84: 4a82 tstl %d2
4db86: 6600 00c0 bnew 4dc48 <rtems_mkdir+0x140>
*p = '/';
4db8a: 4281 clrl %d1
4db8c: 14bc 002f moveb #47,%a2@
p = path;
oumask = 0;
retval = 1;
if (p[0] == '/') /* Skip leading '/'. */
++p;
for (first = 1, last = 0; !last ; ++p) {
4db90: 528a addql #1,%a2
4db92: 101c moveb %a4@+,%d0
4db94: 60cc bras 4db62 <rtems_mkdir+0x5a>
if (p[0] == '\0')
last = 1;
else if (p[0] != '/')
continue;
*p = '\0';
4db96: 4212 clrb %a2@
if (!last && p[1] == '\0')
4db98: 4a14 tstb %a4@
4db9a: 57c2 seq %d2
4db9c: 49c2 extbl %d2
4db9e: 4482 negl %d2
last = 1;
if (first) {
4dba0: 4a81 tstl %d1
4dba2: 67ca beqs 4db6e <rtems_mkdir+0x66>
4dba4: 6018 bras 4dbbe <rtems_mkdir+0xb6>
numask = oumask & ~(S_IWUSR | S_IXUSR);
(void)umask(numask);
first = 0;
}
if (last)
(void)umask(oumask);
4dba6: 2f03 movel %d3,%sp@-
4dba8: 2044 moveal %d4,%a0
4dbaa: 4e90 jsr %a0@
4dbac: 588f addql #4,%sp
if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
4dbae: 2005 movel %d5,%d0
4dbb0: 2f00 movel %d0,%sp@-
4dbb2: 2f0b movel %a3,%sp@-
4dbb4: 4e95 jsr %a5@
4dbb6: 508f addql #8,%sp
4dbb8: 4a80 tstl %d0
4dbba: 6cc8 bges 4db84 <rtems_mkdir+0x7c>
4dbbc: 6022 bras 4dbe0 <rtems_mkdir+0xd8>
* mkdir [-m mode] dir
*
* We change the user's umask and then restore it,
* instead of doing chmod's.
*/
oumask = umask(0);
4dbbe: 42a7 clrl %sp@-
4dbc0: 2044 moveal %d4,%a0
4dbc2: 4e90 jsr %a0@
numask = oumask & ~(S_IWUSR | S_IXUSR);
(void)umask(numask);
4dbc4: 2044 moveal %d4,%a0
* mkdir [-m mode] dir
*
* We change the user's umask and then restore it,
* instead of doing chmod's.
*/
oumask = umask(0);
4dbc6: 2600 movel %d0,%d3
numask = oumask & ~(S_IWUSR | S_IXUSR);
(void)umask(numask);
4dbc8: 0280 ffff ff3f andil #-193,%d0
4dbce: 2f00 movel %d0,%sp@-
4dbd0: 4e90 jsr %a0@
4dbd2: 508f addql #8,%sp
first = 0;
}
if (last)
(void)umask(oumask);
if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
4dbd4: 203c 0000 01ff movel #511,%d0
oumask = umask(0);
numask = oumask & ~(S_IWUSR | S_IXUSR);
(void)umask(numask);
first = 0;
}
if (last)
4dbda: 4a82 tstl %d2
4dbdc: 679a beqs 4db78 <rtems_mkdir+0x70>
4dbde: 60c6 bras 4dba6 <rtems_mkdir+0x9e>
(void)umask(oumask);
if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
if (errno == EEXIST || errno == EISDIR) {
4dbe0: 2047 moveal %d7,%a0
4dbe2: 2c3c 0004 f3c8 movel #324552,%d6
4dbe8: 4e90 jsr %a0@
4dbea: 7211 moveq #17,%d1
4dbec: 2040 moveal %d0,%a0
4dbee: b290 cmpl %a0@,%d1
4dbf0: 670c beqs 4dbfe <rtems_mkdir+0xf6> <== ALWAYS TAKEN
4dbf2: 2046 moveal %d6,%a0 <== NOT EXECUTED
4dbf4: 4e90 jsr %a0@ <== NOT EXECUTED
4dbf6: 7215 moveq #21,%d1 <== NOT EXECUTED
4dbf8: 2040 moveal %d0,%a0 <== NOT EXECUTED
4dbfa: b290 cmpl %a0@,%d1 <== NOT EXECUTED
4dbfc: 6664 bnes 4dc62 <rtems_mkdir+0x15a> <== NOT EXECUTED
if (stat(path, &sb) < 0) {
4dbfe: 486e ffba pea %fp@(-70)
4dc02: 2f0b movel %a3,%sp@-
4dc04: 4eb9 0004 dcb8 jsr 4dcb8 <stat>
4dc0a: 508f addql #8,%sp
4dc0c: 4a80 tstl %d0
4dc0e: 6d52 blts 4dc62 <rtems_mkdir+0x15a> <== NEVER TAKEN
retval = 0;
break;
} else if (!S_ISDIR(sb.st_mode)) {
4dc10: 202e ffc6 movel %fp@(-58),%d0
4dc14: 0280 0000 f000 andil #61440,%d0
4dc1a: 0c80 0000 4000 cmpil #16384,%d0
4dc20: 6700 ff62 beqw 4db84 <rtems_mkdir+0x7c>
if (last)
4dc24: 4a82 tstl %d2
4dc26: 677a beqs 4dca2 <rtems_mkdir+0x19a> <== NEVER TAKEN
errno = EEXIST;
4dc28: 2046 moveal %d6,%a0
4dc2a: 4e90 jsr %a0@
4dc2c: 7211 moveq #17,%d1
4dc2e: 2040 moveal %d0,%a0
4dc30: 2081 movel %d1,%a0@
int success = 0;
char *dup_path = strdup(path);
if (dup_path != NULL) {
success = build(dup_path, mode);
free(dup_path);
4dc32: 2f0b movel %a3,%sp@-
4dc34: 4eb9 0004 41b0 jsr 441b0 <free>
4dc3a: 588f addql #4,%sp
}
return success != 0 ? 0 : -1;
4dc3c: 70ff moveq #-1,%d0
}
4dc3e: 4cee 3cfc ff90 moveml %fp@(-112),%d2-%d7/%a2-%a5
4dc44: 4e5e unlk %fp
4dc46: 4e75 rts
int success = 0;
char *dup_path = strdup(path);
if (dup_path != NULL) {
success = build(dup_path, mode);
free(dup_path);
4dc48: 2f0b movel %a3,%sp@-
4dc4a: 4eb9 0004 41b0 jsr 441b0 <free>
4dc50: 588f addql #4,%sp
}
return success != 0 ? 0 : -1;
4dc52: 4280 clrl %d0
}
4dc54: 4cee 3cfc ff90 moveml %fp@(-112),%d2-%d7/%a2-%a5
4dc5a: 4e5e unlk %fp
4dc5c: 4e75 rts
if (dup_path != NULL) {
success = build(dup_path, mode);
free(dup_path);
}
return success != 0 ? 0 : -1;
4dc5e: 70ff moveq #-1,%d0 <== NOT EXECUTED
4dc60: 60dc bras 4dc3e <rtems_mkdir+0x136> <== NOT EXECUTED
}
}
if (!last)
*p = '/';
}
if (!first && !last)
4dc62: 4a82 tstl %d2 <== NOT EXECUTED
4dc64: 66cc bnes 4dc32 <rtems_mkdir+0x12a> <== NOT EXECUTED
(void)umask(oumask);
4dc66: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4dc68: 4eb9 0004 dd6c jsr 4dd6c <umask> <== NOT EXECUTED
4dc6e: 588f addql #4,%sp <== NOT EXECUTED
int success = 0;
char *dup_path = strdup(path);
if (dup_path != NULL) {
success = build(dup_path, mode);
free(dup_path);
4dc70: 2f0b movel %a3,%sp@- <== NOT EXECUTED
4dc72: 4eb9 0004 41b0 jsr 441b0 <free> <== NOT EXECUTED
4dc78: 588f addql #4,%sp <== NOT EXECUTED
}
return success != 0 ? 0 : -1;
4dc7a: 70ff moveq #-1,%d0 <== NOT EXECUTED
4dc7c: 60c0 bras 4dc3e <rtems_mkdir+0x136> <== NOT EXECUTED
p = path;
oumask = 0;
retval = 1;
if (p[0] == '/') /* Skip leading '/'. */
++p;
4dc7e: 45eb 0001 lea %a3@(1),%a2
(void)umask(oumask);
return (retval);
}
int
rtems_mkdir(const char *path, mode_t mode)
4dc82: 49ea 0001 lea %a2@(1),%a4
4dc86: 4283 clrl %d3
4dc88: 7201 moveq #1,%d1
4dc8a: 4bf9 0004 488c lea 4488c <mkdir>,%a5
first = 0;
}
if (last)
(void)umask(oumask);
if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
if (errno == EEXIST || errno == EISDIR) {
4dc90: 2e3c 0004 f3c8 movel #324552,%d7
numask = oumask & ~(S_IWUSR | S_IXUSR);
(void)umask(numask);
first = 0;
}
if (last)
(void)umask(oumask);
4dc96: 283c 0004 dd6c movel #318828,%d4
p = path;
oumask = 0;
retval = 1;
if (p[0] == '/') /* Skip leading '/'. */
++p;
4dc9c: 1012 moveb %a2@,%d0
4dc9e: 6000 feb2 braw 4db52 <rtems_mkdir+0x4a>
break;
} else if (!S_ISDIR(sb.st_mode)) {
if (last)
errno = EEXIST;
else
errno = ENOTDIR;
4dca2: 2046 moveal %d6,%a0 <== NOT EXECUTED
4dca4: 4e90 jsr %a0@ <== NOT EXECUTED
4dca6: 2040 moveal %d0,%a0 <== NOT EXECUTED
4dca8: 7014 moveq #20,%d0 <== NOT EXECUTED
4dcaa: 2080 movel %d0,%a0@ <== NOT EXECUTED
}
if (!last)
*p = '/';
}
if (!first && !last)
(void)umask(oumask);
4dcac: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4dcae: 4eb9 0004 dd6c jsr 4dd6c <umask> <== NOT EXECUTED
4dcb4: 588f addql #4,%sp <== NOT EXECUTED
4dcb6: 60b8 bras 4dc70 <rtems_mkdir+0x168> <== NOT EXECUTED
00047fbc <rtems_object_get_api_class_name>:
)
{
const rtems_assoc_t *api_assoc;
const rtems_assoc_t *class_assoc;
if ( the_api == OBJECTS_INTERNAL_API )
47fbc: 7001 moveq #1,%d0
const char *rtems_object_get_api_class_name(
int the_api,
int the_class
)
{
47fbe: 4e56 0000 linkw %fp,#0
47fc2: 222e 0008 movel %fp@(8),%d1
47fc6: 2f02 movel %d2,%sp@-
const rtems_assoc_t *api_assoc;
const rtems_assoc_t *class_assoc;
if ( the_api == OBJECTS_INTERNAL_API )
47fc8: b081 cmpl %d1,%d0
47fca: 673e beqs 4800a <rtems_object_get_api_class_name+0x4e><== NEVER TAKEN
api_assoc = rtems_object_api_internal_assoc;
else if ( the_api == OBJECTS_CLASSIC_API )
47fcc: 7402 moveq #2,%d2
#ifdef RTEMS_POSIX_API
else if ( the_api == OBJECTS_POSIX_API )
api_assoc = rtems_object_api_posix_assoc;
#endif
else
return "BAD API";
47fce: 203c 0005 ed44 movel #388420,%d0
const rtems_assoc_t *api_assoc;
const rtems_assoc_t *class_assoc;
if ( the_api == OBJECTS_INTERNAL_API )
api_assoc = rtems_object_api_internal_assoc;
else if ( the_api == OBJECTS_CLASSIC_API )
47fd4: b481 cmpl %d1,%d2
47fd6: 6708 beqs 47fe0 <rtems_object_get_api_class_name+0x24>
return "BAD API";
class_assoc = rtems_assoc_ptr_by_local( api_assoc, the_class );
if ( class_assoc )
return class_assoc->name;
return "BAD CLASS";
}
47fd8: 242e fffc movel %fp@(-4),%d2
47fdc: 4e5e unlk %fp
47fde: 4e75 rts
const rtems_assoc_t *class_assoc;
if ( the_api == OBJECTS_INTERNAL_API )
api_assoc = rtems_object_api_internal_assoc;
else if ( the_api == OBJECTS_CLASSIC_API )
api_assoc = rtems_object_api_classic_assoc;
47fe0: 203c 0005 fc2c movel #392236,%d0
else if ( the_api == OBJECTS_POSIX_API )
api_assoc = rtems_object_api_posix_assoc;
#endif
else
return "BAD API";
class_assoc = rtems_assoc_ptr_by_local( api_assoc, the_class );
47fe6: 2f2e 000c movel %fp@(12),%sp@-
47fea: 2f00 movel %d0,%sp@-
47fec: 4eb9 0004 ced8 jsr 4ced8 <rtems_assoc_ptr_by_local>
if ( class_assoc )
47ff2: 508f addql #8,%sp
else if ( the_api == OBJECTS_POSIX_API )
api_assoc = rtems_object_api_posix_assoc;
#endif
else
return "BAD API";
class_assoc = rtems_assoc_ptr_by_local( api_assoc, the_class );
47ff4: 2040 moveal %d0,%a0
if ( class_assoc )
return class_assoc->name;
return "BAD CLASS";
47ff6: 203c 0005 ed4c movel #388428,%d0
api_assoc = rtems_object_api_posix_assoc;
#endif
else
return "BAD API";
class_assoc = rtems_assoc_ptr_by_local( api_assoc, the_class );
if ( class_assoc )
47ffc: 4a88 tstl %a0
47ffe: 67d8 beqs 47fd8 <rtems_object_get_api_class_name+0x1c>
return class_assoc->name;
return "BAD CLASS";
}
48000: 242e fffc movel %fp@(-4),%d2
48004: 4e5e unlk %fp
#endif
else
return "BAD API";
class_assoc = rtems_assoc_ptr_by_local( api_assoc, the_class );
if ( class_assoc )
return class_assoc->name;
48006: 2010 movel %a0@,%d0
return "BAD CLASS";
}
48008: 4e75 rts
{
const rtems_assoc_t *api_assoc;
const rtems_assoc_t *class_assoc;
if ( the_api == OBJECTS_INTERNAL_API )
api_assoc = rtems_object_api_internal_assoc;
4800a: 203c 0005 fc14 movel #392212,%d0
48010: 60d4 bras 47fe6 <rtems_object_get_api_class_name+0x2a>
...
0004807c <rtems_object_get_class_information>:
rtems_status_code rtems_object_get_class_information(
int the_api,
int the_class,
rtems_object_api_class_information *info
)
{
4807c: 4e56 0000 linkw %fp,#0
48080: 2f0a movel %a2,%sp@-
48082: 246e 0010 moveal %fp@(16),%a2
48086: 2f02 movel %d2,%sp@-
int i;
/*
* Validate parameters and look up information structure.
*/
if ( !info )
48088: 4a8a tstl %a2
4808a: 6766 beqs 480f2 <rtems_object_get_class_information+0x76>
return RTEMS_INVALID_ADDRESS;
obj_info = _Objects_Get_information( the_api, the_class );
4808c: 2f2e 000c movel %fp@(12),%sp@-
48090: 2f2e 0008 movel %fp@(8),%sp@-
48094: 4eb9 0004 9d80 jsr 49d80 <_Objects_Get_information>
if ( !obj_info )
4809a: 508f addql #8,%sp
* Validate parameters and look up information structure.
*/
if ( !info )
return RTEMS_INVALID_ADDRESS;
obj_info = _Objects_Get_information( the_api, the_class );
4809c: 2040 moveal %d0,%a0
if ( !obj_info )
4809e: 4a80 tstl %d0
480a0: 675e beqs 48100 <rtems_object_get_class_information+0x84>
return RTEMS_INVALID_NUMBER;
/*
* Return information about this object class to the user.
*/
info->minimum_id = obj_info->minimum_id;
480a2: 24a8 0006 movel %a0@(6),%a2@
info->maximum_id = obj_info->maximum_id;
info->auto_extend = obj_info->auto_extend;
info->maximum = obj_info->maximum;
480a6: 4282 clrl %d2
/*
* Return information about this object class to the user.
*/
info->minimum_id = obj_info->minimum_id;
info->maximum_id = obj_info->maximum_id;
480a8: 2568 000a 0004 movel %a0@(10),%a2@(4)
info->auto_extend = obj_info->auto_extend;
info->maximum = obj_info->maximum;
480ae: 3428 000e movew %a0@(14),%d2
/*
* Return information about this object class to the user.
*/
info->minimum_id = obj_info->minimum_id;
info->maximum_id = obj_info->maximum_id;
info->auto_extend = obj_info->auto_extend;
480b2: 1568 0010 000c moveb %a0@(16),%a2@(12)
info->maximum = obj_info->maximum;
480b8: 2542 0008 movel %d2,%a2@(8)
for ( unallocated=0, i=1 ; i <= info->maximum ; i++ )
480bc: 6750 beqs 4810e <rtems_object_get_class_information+0x92><== NEVER TAKEN
480be: 2068 0018 moveal %a0@(24),%a0
480c2: 7201 moveq #1,%d1
480c4: 7001 moveq #1,%d0
480c6: 93c9 subal %a1,%a1
480c8: 5280 addql #1,%d0
if ( !obj_info->local_table[i] )
480ca: 4ab0 1c00 tstl %a0@(00000000,%d1:l:4)
480ce: 6718 beqs 480e8 <rtems_object_get_class_information+0x6c>
info->minimum_id = obj_info->minimum_id;
info->maximum_id = obj_info->maximum_id;
info->auto_extend = obj_info->auto_extend;
info->maximum = obj_info->maximum;
for ( unallocated=0, i=1 ; i <= info->maximum ; i++ )
480d0: 2200 movel %d0,%d1
480d2: b082 cmpl %d2,%d0
480d4: 63f2 blss 480c8 <rtems_object_get_class_information+0x4c><== ALWAYS TAKEN
if ( !obj_info->local_table[i] )
unallocated++;
info->unallocated = unallocated;
480d6: 2549 000e movel %a1,%a2@(14)
return RTEMS_SUCCESSFUL;
480da: 4280 clrl %d0
}
480dc: 242e fff8 movel %fp@(-8),%d2
480e0: 246e fffc moveal %fp@(-4),%a2
480e4: 4e5e unlk %fp
480e6: 4e75 rts
info->auto_extend = obj_info->auto_extend;
info->maximum = obj_info->maximum;
for ( unallocated=0, i=1 ; i <= info->maximum ; i++ )
if ( !obj_info->local_table[i] )
unallocated++;
480e8: 5289 addql #1,%a1
info->minimum_id = obj_info->minimum_id;
info->maximum_id = obj_info->maximum_id;
info->auto_extend = obj_info->auto_extend;
info->maximum = obj_info->maximum;
for ( unallocated=0, i=1 ; i <= info->maximum ; i++ )
480ea: 2200 movel %d0,%d1
480ec: b082 cmpl %d2,%d0
480ee: 63d8 blss 480c8 <rtems_object_get_class_information+0x4c><== NEVER TAKEN
480f0: 60e4 bras 480d6 <rtems_object_get_class_information+0x5a>
unallocated++;
info->unallocated = unallocated;
return RTEMS_SUCCESSFUL;
}
480f2: 242e fff8 movel %fp@(-8),%d2
/*
* Validate parameters and look up information structure.
*/
if ( !info )
return RTEMS_INVALID_ADDRESS;
480f6: 7009 moveq #9,%d0
unallocated++;
info->unallocated = unallocated;
return RTEMS_SUCCESSFUL;
}
480f8: 246e fffc moveal %fp@(-4),%a2
480fc: 4e5e unlk %fp
480fe: 4e75 rts
48100: 242e fff8 movel %fp@(-8),%d2
if ( !info )
return RTEMS_INVALID_ADDRESS;
obj_info = _Objects_Get_information( the_api, the_class );
if ( !obj_info )
return RTEMS_INVALID_NUMBER;
48104: 700a moveq #10,%d0
unallocated++;
info->unallocated = unallocated;
return RTEMS_SUCCESSFUL;
}
48106: 246e fffc moveal %fp@(-4),%a2
4810a: 4e5e unlk %fp
4810c: 4e75 rts
info->minimum_id = obj_info->minimum_id;
info->maximum_id = obj_info->maximum_id;
info->auto_extend = obj_info->auto_extend;
info->maximum = obj_info->maximum;
for ( unallocated=0, i=1 ; i <= info->maximum ; i++ )
4810e: 93c9 subal %a1,%a1 <== NOT EXECUTED
if ( !obj_info->local_table[i] )
unallocated++;
info->unallocated = unallocated;
return RTEMS_SUCCESSFUL;
48110: 4280 clrl %d0 <== NOT EXECUTED
for ( unallocated=0, i=1 ; i <= info->maximum ; i++ )
if ( !obj_info->local_table[i] )
unallocated++;
info->unallocated = unallocated;
48112: 2549 000e movel %a1,%a2@(14) <== NOT EXECUTED
48116: 60c4 bras 480dc <rtems_object_get_class_information+0x60><== NOT EXECUTED
00056a40 <rtems_partition_create>:
uint32_t length,
uint32_t buffer_size,
rtems_attribute attribute_set,
rtems_id *id
)
{
56a40: 4e56 ffe8 linkw %fp,#-24
56a44: 48d7 0c3c moveml %d2-%d5/%a2-%a3,%sp@
56a48: 242e 0008 movel %fp@(8),%d2
56a4c: 2a2e 000c movel %fp@(12),%d5
56a50: 282e 0010 movel %fp@(16),%d4
56a54: 262e 0014 movel %fp@(20),%d3
56a58: 246e 001c moveal %fp@(28),%a2
register Partition_Control *the_partition;
if ( !rtems_is_name_valid( name ) )
56a5c: 4a82 tstl %d2
56a5e: 673a beqs 56a9a <rtems_partition_create+0x5a>
return RTEMS_INVALID_NAME;
if ( !starting_address )
56a60: 4a85 tstl %d5
56a62: 671e beqs 56a82 <rtems_partition_create+0x42>
return RTEMS_INVALID_ADDRESS;
if ( !id )
56a64: 4a8a tstl %a2
56a66: 671a beqs 56a82 <rtems_partition_create+0x42> <== NEVER TAKEN
return RTEMS_INVALID_ADDRESS;
if ( length == 0 || buffer_size == 0 || length < buffer_size ||
56a68: 4a84 tstl %d4
56a6a: 6722 beqs 56a8e <rtems_partition_create+0x4e>
56a6c: 4a83 tstl %d3
56a6e: 671e beqs 56a8e <rtems_partition_create+0x4e>
56a70: b684 cmpl %d4,%d3
56a72: 621a bhis 56a8e <rtems_partition_create+0x4e>
*/
RTEMS_INLINE_ROUTINE bool _Partition_Is_buffer_size_aligned (
uint32_t buffer_size
)
{
return ((buffer_size % CPU_PARTITION_ALIGNMENT) == 0);
56a74: 7003 moveq #3,%d0
56a76: c083 andl %d3,%d0
56a78: 6614 bnes 56a8e <rtems_partition_create+0x4e>
)
{
#if (CPU_ALIGNMENT == 0)
return true;
#else
return (((uintptr_t)address % CPU_ALIGNMENT) == 0);
56a7a: 103c 0003 moveb #3,%d0
56a7e: c085 andl %d5,%d0
!_Partition_Is_buffer_size_aligned( buffer_size ) )
return RTEMS_INVALID_SIZE;
if ( !_Addresses_Is_aligned( starting_address ) )
56a80: 6724 beqs 56aa6 <rtems_partition_create+0x66>
return RTEMS_INVALID_ADDRESS;
56a82: 7009 moveq #9,%d0
);
#endif
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
56a84: 4cee 0c3c ffe8 moveml %fp@(-24),%d2-%d5/%a2-%a3
56a8a: 4e5e unlk %fp
56a8c: 4e75 rts
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;
56a8e: 7008 moveq #8,%d0
);
#endif
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
56a90: 4cee 0c3c ffe8 moveml %fp@(-24),%d2-%d5/%a2-%a3
56a96: 4e5e unlk %fp
56a98: 4e75 rts
)
{
register Partition_Control *the_partition;
if ( !rtems_is_name_valid( name ) )
return RTEMS_INVALID_NAME;
56a9a: 7003 moveq #3,%d0
);
#endif
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
56a9c: 4cee 0c3c ffe8 moveml %fp@(-24),%d2-%d5/%a2-%a3
56aa2: 4e5e unlk %fp
56aa4: 4e75 rts
56aa6: 2039 0007 d2c8 movel 7d2c8 <_Thread_Dispatch_disable_level>,%d0
56aac: 5280 addql #1,%d0
56aae: 23c0 0007 d2c8 movel %d0,7d2c8 <_Thread_Dispatch_disable_level>
* 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 );
56ab4: 4879 0007 d164 pea 7d164 <_Partition_Information>
56aba: 4eb9 0005 b614 jsr 5b614 <_Objects_Allocate>
_Thread_Disable_dispatch(); /* prevents deletion */
the_partition = _Partition_Allocate();
if ( !the_partition ) {
56ac0: 588f addql #4,%sp
56ac2: 2640 moveal %d0,%a3
56ac4: 4a80 tstl %d0
56ac6: 6758 beqs 56b20 <rtems_partition_create+0xe0>
return RTEMS_TOO_MANY;
}
#endif
the_partition->starting_address = starting_address;
the_partition->length = length;
56ac8: 2744 0014 movel %d4,%a3@(20)
the_partition->buffer_size = buffer_size;
the_partition->attribute_set = attribute_set;
56acc: 276e 0018 001c movel %fp@(24),%a3@(28)
the_partition->number_of_used_blocks = 0;
_Chain_Initialize( &the_partition->Memory, starting_address,
56ad2: 4c43 4004 remul %d3,%d4,%d4
_Thread_Enable_dispatch();
return RTEMS_TOO_MANY;
}
#endif
the_partition->starting_address = starting_address;
56ad6: 2745 0010 movel %d5,%a3@(16)
the_partition->length = length;
the_partition->buffer_size = buffer_size;
56ada: 2743 0018 movel %d3,%a3@(24)
the_partition->attribute_set = attribute_set;
the_partition->number_of_used_blocks = 0;
56ade: 42ab 0020 clrl %a3@(32)
_Chain_Initialize( &the_partition->Memory, starting_address,
56ae2: 2f03 movel %d3,%sp@-
56ae4: 2f04 movel %d4,%sp@-
56ae6: 2f05 movel %d5,%sp@-
56ae8: 486b 0024 pea %a3@(36)
56aec: 4eb9 0005 9f50 jsr 59f50 <_Chain_Initialize>
Objects_Name name
)
{
_Objects_Set_local_object(
information,
_Objects_Get_index( the_object->id ),
56af2: 202b 0008 movel %a3@(8),%d0
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
56af6: 4281 clrl %d1
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
56af8: 2079 0007 d17c moveal 7d17c <_Partition_Information+0x18>,%a0
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
56afe: 3200 movew %d0,%d1
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
56b00: 218b 1c00 movel %a3,%a0@(00000000,%d1:l:4)
information,
_Objects_Get_index( the_object->id ),
the_object
);
the_object->name = name;
56b04: 2742 000c movel %d2,%a3@(12)
&_Partition_Information,
&the_partition->Object,
(Objects_Name) name
);
*id = the_partition->Object.id;
56b08: 2480 movel %d0,%a2@
name,
0 /* Not used */
);
#endif
_Thread_Enable_dispatch();
56b0a: 4eb9 0005 c3f2 jsr 5c3f2 <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
56b10: 4fef 0010 lea %sp@(16),%sp
56b14: 4280 clrl %d0
}
56b16: 4cee 0c3c ffe8 moveml %fp@(-24),%d2-%d5/%a2-%a3
56b1c: 4e5e unlk %fp
56b1e: 4e75 rts
_Thread_Disable_dispatch(); /* prevents deletion */
the_partition = _Partition_Allocate();
if ( !the_partition ) {
_Thread_Enable_dispatch();
56b20: 4eb9 0005 c3f2 jsr 5c3f2 <_Thread_Enable_dispatch>
return RTEMS_TOO_MANY;
56b26: 7005 moveq #5,%d0
);
#endif
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
56b28: 4cee 0c3c ffe8 moveml %fp@(-24),%d2-%d5/%a2-%a3
56b2e: 4e5e unlk %fp
...
00056ba4 <rtems_partition_get_buffer>:
rtems_status_code rtems_partition_get_buffer(
rtems_id id,
void **buffer
)
{
56ba4: 4e56 fff0 linkw %fp,#-16
56ba8: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
56bac: 246e 000c moveal %fp@(12),%a2
register Partition_Control *the_partition;
Objects_Locations location;
void *the_buffer;
if ( !buffer )
56bb0: 4a8a tstl %a2
56bb2: 6754 beqs 56c08 <rtems_partition_get_buffer+0x64><== NEVER TAKEN
Objects_Id id,
Objects_Locations *location
)
{
return (Partition_Control *)
_Objects_Get( &_Partition_Information, id, location );
56bb4: 486e fffc pea %fp@(-4)
56bb8: 2f2e 0008 movel %fp@(8),%sp@-
56bbc: 4879 0007 d164 pea 7d164 <_Partition_Information>
56bc2: 4eb9 0005 bb0c jsr 5bb0c <_Objects_Get>
return RTEMS_INVALID_ADDRESS;
the_partition = _Partition_Get( id, &location );
switch ( location ) {
56bc8: 4fef 000c lea %sp@(12),%sp
56bcc: 2640 moveal %d0,%a3
56bce: 4aae fffc tstl %fp@(-4)
56bd2: 6628 bnes 56bfc <rtems_partition_get_buffer+0x58>
*/
RTEMS_INLINE_ROUTINE void *_Partition_Allocate_buffer (
Partition_Control *the_partition
)
{
return _Chain_Get( &the_partition->Memory );
56bd4: 486b 0024 pea %a3@(36)
56bd8: 4eb9 0005 9f14 jsr 59f14 <_Chain_Get>
case OBJECTS_LOCAL:
the_buffer = _Partition_Allocate_buffer( the_partition );
if ( the_buffer ) {
56bde: 588f addql #4,%sp
56be0: 2400 movel %d0,%d2
56be2: 6730 beqs 56c14 <rtems_partition_get_buffer+0x70>
the_partition->number_of_used_blocks += 1;
56be4: 52ab 0020 addql #1,%a3@(32)
_Thread_Enable_dispatch();
56be8: 4eb9 0005 c3f2 jsr 5c3f2 <_Thread_Enable_dispatch>
*buffer = the_buffer;
return RTEMS_SUCCESSFUL;
56bee: 4280 clrl %d0
case OBJECTS_LOCAL:
the_buffer = _Partition_Allocate_buffer( the_partition );
if ( the_buffer ) {
the_partition->number_of_used_blocks += 1;
_Thread_Enable_dispatch();
*buffer = the_buffer;
56bf0: 2482 movel %d2,%a2@
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
56bf2: 4cee 0c04 fff0 moveml %fp@(-16),%d2/%a2-%a3
56bf8: 4e5e unlk %fp
56bfa: 4e75 rts
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
56bfc: 7004 moveq #4,%d0
}
56bfe: 4cee 0c04 fff0 moveml %fp@(-16),%d2/%a2-%a3
56c04: 4e5e unlk %fp
56c06: 4e75 rts
register Partition_Control *the_partition;
Objects_Locations location;
void *the_buffer;
if ( !buffer )
return RTEMS_INVALID_ADDRESS;
56c08: 7009 moveq #9,%d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
56c0a: 4cee 0c04 fff0 moveml %fp@(-16),%d2/%a2-%a3
56c10: 4e5e unlk %fp
56c12: 4e75 rts
the_partition->number_of_used_blocks += 1;
_Thread_Enable_dispatch();
*buffer = the_buffer;
return RTEMS_SUCCESSFUL;
}
_Thread_Enable_dispatch();
56c14: 4eb9 0005 c3f2 jsr 5c3f2 <_Thread_Enable_dispatch>
return RTEMS_UNSATISFIED;
56c1a: 700d moveq #13,%d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
56c1c: 4cee 0c04 fff0 moveml %fp@(-16),%d2/%a2-%a3
56c22: 4e5e unlk %fp
...
00056c54 <rtems_partition_return_buffer>:
rtems_status_code rtems_partition_return_buffer(
rtems_id id,
void *buffer
)
{
56c54: 4e56 fffc linkw %fp,#-4
56c58: 2f0a movel %a2,%sp@-
56c5a: 2f02 movel %d2,%sp@-
Objects_Id id,
Objects_Locations *location
)
{
return (Partition_Control *)
_Objects_Get( &_Partition_Information, id, location );
56c5c: 486e fffc pea %fp@(-4)
56c60: 2f2e 0008 movel %fp@(8),%sp@-
56c64: 4879 0007 d164 pea 7d164 <_Partition_Information>
56c6a: 242e 000c movel %fp@(12),%d2
56c6e: 4eb9 0005 bb0c jsr 5bb0c <_Objects_Get>
register Partition_Control *the_partition;
Objects_Locations location;
the_partition = _Partition_Get( id, &location );
switch ( location ) {
56c74: 4fef 000c lea %sp@(12),%sp
56c78: 2440 moveal %d0,%a2
56c7a: 4aae fffc tstl %fp@(-4)
56c7e: 670e beqs 56c8e <rtems_partition_return_buffer+0x3a>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
56c80: 242e fff4 movel %fp@(-12),%d2
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
56c84: 7004 moveq #4,%d0
}
56c86: 246e fff8 moveal %fp@(-8),%a2
56c8a: 4e5e unlk %fp
56c8c: 4e75 rts
)
{
void *starting;
void *ending;
starting = the_partition->starting_address;
56c8e: 202a 0010 movel %a2@(16),%d0
ending = _Addresses_Add_offset( starting, the_partition->length );
56c92: 222a 0014 movel %a2@(20),%d1
const void *address,
const void *base,
const void *limit
)
{
return (address >= base && address <= limit);
56c96: b082 cmpl %d2,%d0
56c98: 623c bhis 56cd6 <rtems_partition_return_buffer+0x82>
RTEMS_INLINE_ROUTINE void *_Addresses_Add_offset (
const void *base,
uintptr_t offset
)
{
return (void *)((uintptr_t)base + offset);
56c9a: d280 addl %d0,%d1
const void *address,
const void *base,
const void *limit
)
{
return (address >= base && address <= limit);
56c9c: b282 cmpl %d2,%d1
56c9e: 6536 bcss 56cd6 <rtems_partition_return_buffer+0x82><== NEVER TAKEN
RTEMS_INLINE_ROUTINE int32_t _Addresses_Subtract (
const void *left,
const void *right
)
{
return (int32_t) ((const char *) left - (const char *) right);
56ca0: 2202 movel %d2,%d1
56ca2: 9280 subl %d0,%d1
56ca4: 2001 movel %d1,%d0
offset = (uint32_t) _Addresses_Subtract(
the_buffer,
the_partition->starting_address
);
return ((offset % the_partition->buffer_size) == 0);
56ca6: 4c6a 0001 0018 remul %a2@(24),%d1,%d0
starting = the_partition->starting_address;
ending = _Addresses_Add_offset( starting, the_partition->length );
return (
_Addresses_Is_in_range( the_buffer, starting, ending ) &&
56cac: 4a81 tstl %d1
56cae: 6626 bnes 56cd6 <rtems_partition_return_buffer+0x82>
RTEMS_INLINE_ROUTINE void _Partition_Free_buffer (
Partition_Control *the_partition,
Chain_Node *the_buffer
)
{
_Chain_Append( &the_partition->Memory, the_buffer );
56cb0: 2f02 movel %d2,%sp@-
56cb2: 486a 0024 pea %a2@(36)
56cb6: 4eb9 0005 9eb4 jsr 59eb4 <_Chain_Append>
switch ( location ) {
case OBJECTS_LOCAL:
if ( _Partition_Is_buffer_valid( buffer, the_partition ) ) {
_Partition_Free_buffer( the_partition, buffer );
the_partition->number_of_used_blocks -= 1;
56cbc: 53aa 0020 subql #1,%a2@(32)
_Thread_Enable_dispatch();
56cc0: 4eb9 0005 c3f2 jsr 5c3f2 <_Thread_Enable_dispatch>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
56cc6: 242e fff4 movel %fp@(-12),%d2
case OBJECTS_LOCAL:
if ( _Partition_Is_buffer_valid( buffer, the_partition ) ) {
_Partition_Free_buffer( the_partition, buffer );
the_partition->number_of_used_blocks -= 1;
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
56cca: 508f addql #8,%sp
56ccc: 4280 clrl %d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
56cce: 246e fff8 moveal %fp@(-8),%a2
56cd2: 4e5e unlk %fp
56cd4: 4e75 rts
_Partition_Free_buffer( the_partition, buffer );
the_partition->number_of_used_blocks -= 1;
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
_Thread_Enable_dispatch();
56cd6: 4eb9 0005 c3f2 jsr 5c3f2 <_Thread_Enable_dispatch>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
56cdc: 242e fff4 movel %fp@(-12),%d2
the_partition->number_of_used_blocks -= 1;
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
_Thread_Enable_dispatch();
return RTEMS_INVALID_ADDRESS;
56ce0: 7009 moveq #9,%d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
56ce2: 246e fff8 moveal %fp@(-8),%a2
56ce6: 4e5e unlk %fp
...
0004266c <rtems_print_buffer>:
void rtems_print_buffer(
const unsigned char *buffer,
int length
)
{
4266c: 4e56 ff60 linkw %fp,#-160
42670: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
42674: 2e2e 000c movel %fp@(12),%d7
int i, mod, max;
if ( !length ) return;
42678: 6700 00d2 beqw 4274c <rtems_print_buffer+0xe0>
mod = length % 16;
4267c: 2a07 movel %d7,%d5
4267e: 0285 8000 000f andil #-2147483633,%d5
42684: 6d00 01ca bltw 42850 <rtems_print_buffer+0x1e4>
42688: 2c05 movel %d5,%d6
max = length - mod;
4268a: 9e85 subl %d5,%d7
for ( i=0 ; i<max ; i+=16 )
4268c: 4a87 tstl %d7
4268e: 6f00 00b8 blew 42748 <rtems_print_buffer+0xdc>
42692: 262e 0008 movel %fp@(8),%d3
42696: 4284 clrl %d4
42698: 45ee ff88 lea %fp@(-120),%a2
4269c: 49f9 0004 f0e4 lea 4f0e4 <sprintf>,%a4
426a2: 4bf9 0004 f800 lea 4f800 <strlen>,%a5
{
int i;
char line_buffer[120];
line_buffer[0] = '\0';
426a8: 2643 moveal %d3,%a3
for( i=0 ; i<length ; i++ )
426aa: 4282 clrl %d2
{
int i;
char line_buffer[120];
line_buffer[0] = '\0';
426ac: 4201 clrb %d1
426ae: 1d41 ff88 moveb %d1,%fp@(-120)
for( i=0 ; i<length ; i++ )
sprintf( line_buffer, "%s%02x ", line_buffer, buffer[ i ] );
426b2: 4280 clrl %d0
426b4: 101b moveb %a3@+,%d0
int i;
char line_buffer[120];
line_buffer[0] = '\0';
for( i=0 ; i<length ; i++ )
426b6: 5282 addql #1,%d2
sprintf( line_buffer, "%s%02x ", line_buffer, buffer[ i ] );
426b8: 2f00 movel %d0,%sp@-
426ba: 2f0a movel %a2,%sp@-
426bc: 4879 0005 c394 pea 5c394 <IntUartPollCallbacks.6194+0x20>
426c2: 2f0a movel %a2,%sp@-
426c4: 4e94 jsr %a4@
int i;
char line_buffer[120];
line_buffer[0] = '\0';
for( i=0 ; i<length ; i++ )
426c6: 4fef 0010 lea %sp@(16),%sp
426ca: 7010 moveq #16,%d0
426cc: b082 cmpl %d2,%d0
426ce: 66e2 bnes 426b2 <rtems_print_buffer+0x46>
sprintf( line_buffer, "%s%02x ", line_buffer, buffer[ i ] );
for( ; i<16 ; i++ )
strcat( line_buffer, " " );
strcat( line_buffer, "|" );
426d0: 2f0a movel %a2,%sp@-
426d2: 2643 moveal %d3,%a3
for( i=0 ; i<length ; i++ )
426d4: 4282 clrl %d2
sprintf( line_buffer, "%s%02x ", line_buffer, buffer[ i ] );
for( ; i<16 ; i++ )
strcat( line_buffer, " " );
strcat( line_buffer, "|" );
426d6: 4e95 jsr %a5@
426d8: 588f addql #4,%sp
426da: 323c 7c00 movew #31744,%d1
426de: 3581 0800 movew %d1,%a2@(00000000,%d0:l)
for( i=0 ; i<length ; i++ )
sprintf( line_buffer, "%s%c", line_buffer,
isprint( buffer[ i ] ) ? buffer[ i ] : '.' );
426e2: 4280 clrl %d0
426e4: 101b moveb %a3@+,%d0
for( ; i<16 ; i++ )
strcat( line_buffer, " " );
strcat( line_buffer, "|" );
for( i=0 ; i<length ; i++ )
sprintf( line_buffer, "%s%c", line_buffer,
426e6: 722e moveq #46,%d1
isprint( buffer[ i ] ) ? buffer[ i ] : '.' );
426e8: 2040 moveal %d0,%a0
426ea: 2279 0005 d798 moveal 5d798 <__ctype_ptr__>,%a1
426f0: 1031 8801 moveb %a1@(00000001,%a0:l),%d0
426f4: 49c0 extbl %d0
426f6: 0280 0000 0097 andil #151,%d0
for( ; i<16 ; i++ )
strcat( line_buffer, " " );
strcat( line_buffer, "|" );
for( i=0 ; i<length ; i++ )
sprintf( line_buffer, "%s%c", line_buffer,
426fc: 6702 beqs 42700 <rtems_print_buffer+0x94>
426fe: 2208 movel %a0,%d1
42700: 2f01 movel %d1,%sp@-
for( ; i<16 ; i++ )
strcat( line_buffer, " " );
strcat( line_buffer, "|" );
for( i=0 ; i<length ; i++ )
42702: 5282 addql #1,%d2
sprintf( line_buffer, "%s%c", line_buffer,
42704: 2f0a movel %a2,%sp@-
42706: 4879 0005 c39c pea 5c39c <IntUartPollCallbacks.6194+0x28>
4270c: 2f0a movel %a2,%sp@-
4270e: 4e94 jsr %a4@
for( ; i<16 ; i++ )
strcat( line_buffer, " " );
strcat( line_buffer, "|" );
for( i=0 ; i<length ; i++ )
42710: 4fef 0010 lea %sp@(16),%sp
42714: 7210 moveq #16,%d1
42716: b282 cmpl %d2,%d1
42718: 66c8 bnes 426e2 <rtems_print_buffer+0x76>
isprint( buffer[ i ] ) ? buffer[ i ] : '.' );
for( ; i<16 ; i++ )
strcat( line_buffer, " " );
strcat( line_buffer, "|\n" );
4271a: 2f0a movel %a2,%sp@-
mod = length % 16;
max = length - mod;
for ( i=0 ; i<max ; i+=16 )
4271c: 0684 0000 0010 addil #16,%d4
isprint( buffer[ i ] ) ? buffer[ i ] : '.' );
for( ; i<16 ; i++ )
strcat( line_buffer, " " );
strcat( line_buffer, "|\n" );
42722: 4e95 jsr %a5@
mod = length % 16;
max = length - mod;
for ( i=0 ; i<max ; i+=16 )
42724: 0683 0000 0010 addil #16,%d3
isprint( buffer[ i ] ) ? buffer[ i ] : '.' );
for( ; i<16 ; i++ )
strcat( line_buffer, " " );
strcat( line_buffer, "|\n" );
4272a: 41f2 0800 lea %a2@(00000000,%d0:l),%a0
4272e: 4200 clrb %d0
42730: 30bc 7c0a movew #31754,%a0@
42734: 1140 0002 moveb %d0,%a0@(2)
printk( line_buffer );
42738: 2e8a movel %a2,%sp@
4273a: 4eb9 0004 4764 jsr 44764 <printk>
mod = length % 16;
max = length - mod;
for ( i=0 ; i<max ; i+=16 )
42740: 588f addql #4,%sp
42742: b887 cmpl %d7,%d4
42744: 6d00 ff62 bltw 426a8 <rtems_print_buffer+0x3c>
Dump_Line( &buffer[ i ], 16 );
if ( mod )
42748: 4a85 tstl %d5
4274a: 660a bnes 42756 <rtems_print_buffer+0xea>
Dump_Line( &buffer[ max ], mod );
}
4274c: 4cee 3cfc ff60 moveml %fp@(-160),%d2-%d7/%a2-%a5
42752: 4e5e unlk %fp
42754: 4e75 rts
for ( i=0 ; i<max ; i+=16 )
Dump_Line( &buffer[ i ], 16 );
if ( mod )
Dump_Line( &buffer[ max ], mod );
42756: 266e 0008 moveal %fp@(8),%a3
4275a: d7c7 addal %d7,%a3
{
int i;
char line_buffer[120];
line_buffer[0] = '\0';
4275c: 4200 clrb %d0
4275e: 1d40 ff88 moveb %d0,%fp@(-120)
for( i=0 ; i<length ; i++ )
42762: 4a85 tstl %d5
42764: 6f00 0110 blew 42876 <rtems_print_buffer+0x20a>
42768: 2a4b moveal %a3,%a5
4276a: 4282 clrl %d2
4276c: 45ee ff88 lea %fp@(-120),%a2
42770: 49f9 0004 f0e4 lea 4f0e4 <sprintf>,%a4
sprintf( line_buffer, "%s%02x ", line_buffer, buffer[ i ] );
42776: 4280 clrl %d0
42778: 101d moveb %a5@+,%d0
int i;
char line_buffer[120];
line_buffer[0] = '\0';
for( i=0 ; i<length ; i++ )
4277a: 5282 addql #1,%d2
sprintf( line_buffer, "%s%02x ", line_buffer, buffer[ i ] );
4277c: 2f00 movel %d0,%sp@-
4277e: 2f0a movel %a2,%sp@-
42780: 4879 0005 c394 pea 5c394 <IntUartPollCallbacks.6194+0x20>
42786: 2f0a movel %a2,%sp@-
42788: 4e94 jsr %a4@
int i;
char line_buffer[120];
line_buffer[0] = '\0';
for( i=0 ; i<length ; i++ )
4278a: 4fef 0010 lea %sp@(16),%sp
4278e: b485 cmpl %d5,%d2
42790: 6de4 blts 42776 <rtems_print_buffer+0x10a>
sprintf( line_buffer, "%s%02x ", line_buffer, buffer[ i ] );
for( ; i<16 ; i++ )
42792: 720f moveq #15,%d1
42794: b285 cmpl %d5,%d1
42796: 6d00 0108 bltw 428a0 <rtems_print_buffer+0x234>
4279a: 2405 movel %d5,%d2
4279c: 4bf9 0004 f800 lea 4f800 <strlen>,%a5
strcat( line_buffer, " " );
427a2: 2f0a movel %a2,%sp@-
line_buffer[0] = '\0';
for( i=0 ; i<length ; i++ )
sprintf( line_buffer, "%s%02x ", line_buffer, buffer[ i ] );
for( ; i<16 ; i++ )
427a4: 5282 addql #1,%d2
strcat( line_buffer, " " );
427a6: 4e95 jsr %a5@
427a8: 588f addql #4,%sp
427aa: 223c 2020 2000 movel #538976256,%d1
427b0: 2581 0800 movel %d1,%a2@(00000000,%d0:l)
line_buffer[0] = '\0';
for( i=0 ; i<length ; i++ )
sprintf( line_buffer, "%s%02x ", line_buffer, buffer[ i ] );
for( ; i<16 ; i++ )
427b4: 700f moveq #15,%d0
427b6: b082 cmpl %d2,%d0
427b8: 6ce8 bges 427a2 <rtems_print_buffer+0x136>
strcat( line_buffer, " " );
strcat( line_buffer, "|" );
427ba: 2f0a movel %a2,%sp@-
427bc: 49f9 0004 f0e4 lea 4f0e4 <sprintf>,%a4
427c2: 4eb9 0004 f800 jsr 4f800 <strlen>
427c8: 588f addql #4,%sp
427ca: 323c 7c00 movew #31744,%d1
427ce: 3581 0800 movew %d1,%a2@(00000000,%d0:l)
for( i=0 ; i<length ; i++ )
427d2: 4a85 tstl %d5
427d4: 6f00 0086 blew 4285c <rtems_print_buffer+0x1f0>
427d8: 4282 clrl %d2
sprintf( line_buffer, "%s%c", line_buffer,
isprint( buffer[ i ] ) ? buffer[ i ] : '.' );
427da: 4283 clrl %d3
427dc: 161b moveb %a3@+,%d3
for( ; i<16 ; i++ )
strcat( line_buffer, " " );
strcat( line_buffer, "|" );
for( i=0 ; i<length ; i++ )
sprintf( line_buffer, "%s%c", line_buffer,
427de: 722e moveq #46,%d1
isprint( buffer[ i ] ) ? buffer[ i ] : '.' );
427e0: 2079 0005 d798 moveal 5d798 <__ctype_ptr__>,%a0
427e6: 1030 3801 moveb %a0@(00000001,%d3:l),%d0
427ea: 49c0 extbl %d0
427ec: 0280 0000 0097 andil #151,%d0
for( ; i<16 ; i++ )
strcat( line_buffer, " " );
strcat( line_buffer, "|" );
for( i=0 ; i<length ; i++ )
sprintf( line_buffer, "%s%c", line_buffer,
427f2: 6702 beqs 427f6 <rtems_print_buffer+0x18a>
427f4: 2203 movel %d3,%d1
427f6: 2f01 movel %d1,%sp@-
for( ; i<16 ; i++ )
strcat( line_buffer, " " );
strcat( line_buffer, "|" );
for( i=0 ; i<length ; i++ )
427f8: 5282 addql #1,%d2
sprintf( line_buffer, "%s%c", line_buffer,
427fa: 2f0a movel %a2,%sp@-
427fc: 4879 0005 c39c pea 5c39c <IntUartPollCallbacks.6194+0x28>
42802: 2f0a movel %a2,%sp@-
42804: 4e94 jsr %a4@
for( ; i<16 ; i++ )
strcat( line_buffer, " " );
strcat( line_buffer, "|" );
for( i=0 ; i<length ; i++ )
42806: 4fef 0010 lea %sp@(16),%sp
4280a: b485 cmpl %d5,%d2
4280c: 6dcc blts 427da <rtems_print_buffer+0x16e>
sprintf( line_buffer, "%s%c", line_buffer,
isprint( buffer[ i ] ) ? buffer[ i ] : '.' );
for( ; i<16 ; i++ )
4280e: 700f moveq #15,%d0
42810: b085 cmpl %d5,%d0
42812: 6d16 blts 4282a <rtems_print_buffer+0x1be> <== NEVER TAKEN
strcat( line_buffer, " " );
42814: 2f0a movel %a2,%sp@-
strcat( line_buffer, "|" );
for( i=0 ; i<length ; i++ )
sprintf( line_buffer, "%s%c", line_buffer,
isprint( buffer[ i ] ) ? buffer[ i ] : '.' );
for( ; i<16 ; i++ )
42816: 5286 addql #1,%d6
strcat( line_buffer, " " );
42818: 4e95 jsr %a5@
4281a: 588f addql #4,%sp
4281c: 323c 2000 movew #8192,%d1
42820: 3581 0800 movew %d1,%a2@(00000000,%d0:l)
strcat( line_buffer, "|" );
for( i=0 ; i<length ; i++ )
sprintf( line_buffer, "%s%c", line_buffer,
isprint( buffer[ i ] ) ? buffer[ i ] : '.' );
for( ; i<16 ; i++ )
42824: 700f moveq #15,%d0
42826: b086 cmpl %d6,%d0
42828: 6cea bges 42814 <rtems_print_buffer+0x1a8>
strcat( line_buffer, " " );
strcat( line_buffer, "|\n" );
4282a: 2f0a movel %a2,%sp@-
4282c: 4e95 jsr %a5@
4282e: 4201 clrb %d1
42830: 41f2 0800 lea %a2@(00000000,%d0:l),%a0
42834: 30bc 7c0a movew #31754,%a0@
42838: 1141 0002 moveb %d1,%a0@(2)
printk( line_buffer );
4283c: 2e8a movel %a2,%sp@
4283e: 4eb9 0004 4764 jsr 44764 <printk>
42844: 588f addql #4,%sp
for ( i=0 ; i<max ; i+=16 )
Dump_Line( &buffer[ i ], 16 );
if ( mod )
Dump_Line( &buffer[ max ], mod );
}
42846: 4cee 3cfc ff60 moveml %fp@(-160),%d2-%d7/%a2-%a5
4284c: 4e5e unlk %fp
4284e: 4e75 rts
int i, mod, max;
if ( !length ) return;
mod = length % 16;
42850: 5385 subql #1,%d5 <== NOT EXECUTED
42852: 70f0 moveq #-16,%d0 <== NOT EXECUTED
42854: 8a80 orl %d0,%d5 <== NOT EXECUTED
42856: 5285 addql #1,%d5 <== NOT EXECUTED
42858: 6000 fe2e braw 42688 <rtems_print_buffer+0x1c> <== NOT EXECUTED
for( i=0 ; i<length ; i++ )
sprintf( line_buffer, "%s%c", line_buffer,
isprint( buffer[ i ] ) ? buffer[ i ] : '.' );
for( ; i<16 ; i++ )
strcat( line_buffer, " " );
4285c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
for( ; i<16 ; i++ )
strcat( line_buffer, " " );
strcat( line_buffer, "|" );
for( i=0 ; i<length ; i++ )
4285e: 4286 clrl %d6 <== NOT EXECUTED
sprintf( line_buffer, "%s%c", line_buffer,
isprint( buffer[ i ] ) ? buffer[ i ] : '.' );
for( ; i<16 ; i++ )
42860: 5286 addql #1,%d6 <== NOT EXECUTED
strcat( line_buffer, " " );
42862: 4e95 jsr %a5@ <== NOT EXECUTED
42864: 588f addql #4,%sp <== NOT EXECUTED
42866: 323c 2000 movew #8192,%d1 <== NOT EXECUTED
4286a: 3581 0800 movew %d1,%a2@(00000000,%d0:l) <== NOT EXECUTED
strcat( line_buffer, "|" );
for( i=0 ; i<length ; i++ )
sprintf( line_buffer, "%s%c", line_buffer,
isprint( buffer[ i ] ) ? buffer[ i ] : '.' );
for( ; i<16 ; i++ )
4286e: 700f moveq #15,%d0 <== NOT EXECUTED
42870: b086 cmpl %d6,%d0 <== NOT EXECUTED
42872: 6ca0 bges 42814 <rtems_print_buffer+0x1a8> <== NOT EXECUTED
42874: 60b4 bras 4282a <rtems_print_buffer+0x1be> <== NOT EXECUTED
42876: 45ee ff88 lea %fp@(-120),%a2 <== NOT EXECUTED
4287a: 4bf9 0004 f800 lea 4f800 <strlen>,%a5 <== NOT EXECUTED
int i;
char line_buffer[120];
line_buffer[0] = '\0';
for( i=0 ; i<length ; i++ )
42880: 4282 clrl %d2 <== NOT EXECUTED
sprintf( line_buffer, "%s%02x ", line_buffer, buffer[ i ] );
for( ; i<16 ; i++ )
42882: 5282 addql #1,%d2 <== NOT EXECUTED
strcat( line_buffer, " " );
42884: 2f0a movel %a2,%sp@- <== NOT EXECUTED
42886: 4e95 jsr %a5@ <== NOT EXECUTED
42888: 588f addql #4,%sp <== NOT EXECUTED
4288a: 223c 2020 2000 movel #538976256,%d1 <== NOT EXECUTED
42890: 2581 0800 movel %d1,%a2@(00000000,%d0:l) <== NOT EXECUTED
line_buffer[0] = '\0';
for( i=0 ; i<length ; i++ )
sprintf( line_buffer, "%s%02x ", line_buffer, buffer[ i ] );
for( ; i<16 ; i++ )
42894: 700f moveq #15,%d0 <== NOT EXECUTED
42896: b082 cmpl %d2,%d0 <== NOT EXECUTED
42898: 6c00 ff08 bgew 427a2 <rtems_print_buffer+0x136> <== NOT EXECUTED
4289c: 6000 ff1c braw 427ba <rtems_print_buffer+0x14e> <== NOT EXECUTED
strcat( line_buffer, " " );
strcat( line_buffer, "|" );
428a0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
428a2: 4bf9 0004 f800 lea 4f800 <strlen>,%a5 <== NOT EXECUTED
for( i=0 ; i<length ; i++ )
428a8: 4282 clrl %d2 <== NOT EXECUTED
sprintf( line_buffer, "%s%02x ", line_buffer, buffer[ i ] );
for( ; i<16 ; i++ )
strcat( line_buffer, " " );
strcat( line_buffer, "|" );
428aa: 4e95 jsr %a5@ <== NOT EXECUTED
428ac: 588f addql #4,%sp <== NOT EXECUTED
428ae: 323c 7c00 movew #31744,%d1 <== NOT EXECUTED
428b2: 3581 0800 movew %d1,%a2@(00000000,%d0:l) <== NOT EXECUTED
428b6: 6000 ff22 braw 427da <rtems_print_buffer+0x16e> <== NOT EXECUTED
...
000476e0 <rtems_rate_monotonic_period>:
rtems_status_code rtems_rate_monotonic_period(
rtems_id id,
rtems_interval length
)
{
476e0: 4e56 ffec linkw %fp,#-20
476e4: 48d7 040c moveml %d2-%d3/%a2,%sp@
Objects_Id id,
Objects_Locations *location
)
{
return (Rate_monotonic_Control *)
_Objects_Get( &_Rate_monotonic_Information, id, location );
476e8: 486e fffc pea %fp@(-4)
476ec: 242e 0008 movel %fp@(8),%d2
476f0: 2f02 movel %d2,%sp@-
476f2: 4879 0006 0460 pea 60460 <_Rate_monotonic_Information>
476f8: 4eb9 0004 9a9c jsr 49a9c <_Objects_Get>
rtems_rate_monotonic_period_states local_state;
ISR_Level level;
the_period = _Rate_monotonic_Get( id, &location );
switch ( location ) {
476fe: 4fef 000c lea %sp@(12),%sp
47702: 2440 moveal %d0,%a2
47704: 4aae fffc tstl %fp@(-4)
47708: 661e bnes 47728 <rtems_rate_monotonic_period+0x48>
case OBJECTS_LOCAL:
if ( !_Thread_Is_executing( the_period->owner ) ) {
4770a: 2039 0006 0718 movel 60718 <_Per_CPU_Information+0xc>,%d0
47710: b0aa 0040 cmpl %a2@(64),%d0
47714: 671e beqs 47734 <rtems_rate_monotonic_period+0x54>
_Thread_Enable_dispatch();
47716: 4eb9 0004 a382 jsr 4a382 <_Thread_Enable_dispatch>
return RTEMS_NOT_OWNER_OF_RESOURCE;
4771c: 7017 moveq #23,%d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
4771e: 4cee 040c ffec moveml %fp@(-20),%d2-%d3/%a2
47724: 4e5e unlk %fp
47726: 4e75 rts
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
47728: 7004 moveq #4,%d0
}
4772a: 4cee 040c ffec moveml %fp@(-20),%d2-%d3/%a2
47730: 4e5e unlk %fp
47732: 4e75 rts
if ( !_Thread_Is_executing( the_period->owner ) ) {
_Thread_Enable_dispatch();
return RTEMS_NOT_OWNER_OF_RESOURCE;
}
if ( length == RTEMS_PERIOD_STATUS ) {
47734: 4aae 000c tstl %fp@(12)
47738: 6700 00ce beqw 47808 <rtems_rate_monotonic_period+0x128>
}
_Thread_Enable_dispatch();
return( return_value );
}
_ISR_Disable( level );
4773c: 203c 0000 0700 movel #1792,%d0
47742: 40c3 movew %sr,%d3
47744: 8083 orl %d3,%d0
47746: 46c0 movew %d0,%sr
switch ( the_period->state ) {
47748: 202a 0038 movel %a2@(56),%d0
4774c: 7202 moveq #2,%d1
4774e: b280 cmpl %d0,%d1
47750: 6700 00e4 beqw 47836 <rtems_rate_monotonic_period+0x156>
47754: 123c 0004 moveb #4,%d1
47758: b280 cmpl %d0,%d1
4775a: 6762 beqs 477be <rtems_rate_monotonic_period+0xde>
4775c: 4a80 tstl %d0
4775e: 66c8 bnes 47728 <rtems_rate_monotonic_period+0x48><== NEVER TAKEN
case RATE_MONOTONIC_INACTIVE: {
_ISR_Enable( level );
47760: 46c3 movew %d3,%sr
/*
* Baseline statistics information for the beginning of a period.
*/
_Rate_monotonic_Initiate_statistics( the_period );
47762: 2f0a movel %a2,%sp@-
47764: 2d40 fff8 movel %d0,%fp@(-8)
47768: 4eb9 0004 7548 jsr 47548 <_Rate_monotonic_Initiate_statistics>
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
the_watchdog->routine = routine;
4776e: 223c 0004 7b44 movel #293700,%d1
the_watchdog->id = id;
47774: 2542 0030 movel %d2,%a2@(48)
_Rate_monotonic_Timeout,
id,
NULL
);
the_period->next_length = length;
47778: 242e 000c movel %fp@(12),%d2
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
the_watchdog->routine = routine;
4777c: 2541 002c movel %d1,%a2@(44)
/*
* Baseline statistics information for the beginning of a period.
*/
_Rate_monotonic_Initiate_statistics( the_period );
the_period->state = RATE_MONOTONIC_ACTIVE;
47780: 7202 moveq #2,%d1
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
47782: 42aa 0018 clrl %a2@(24)
47786: 2541 0038 movel %d1,%a2@(56)
the_watchdog->routine = routine;
the_watchdog->id = id;
the_watchdog->user_data = user_data;
4778a: 42aa 0034 clrl %a2@(52)
_Rate_monotonic_Timeout,
id,
NULL
);
the_period->next_length = length;
4778e: 2542 003c movel %d2,%a2@(60)
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
47792: 2542 001c movel %d2,%a2@(28)
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
47796: 486a 0010 pea %a2@(16)
4779a: 4879 0006 0616 pea 60616 <_Watchdog_Ticks_chain>
477a0: 4eb9 0004 b5c4 jsr 4b5c4 <_Watchdog_Insert>
_Watchdog_Insert_ticks( &the_period->Timer, length );
_Thread_Enable_dispatch();
477a6: 4eb9 0004 a382 jsr 4a382 <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
477ac: 202e fff8 movel %fp@(-8),%d0
477b0: 4fef 000c lea %sp@(12),%sp
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
477b4: 4cee 040c ffec moveml %fp@(-20),%d2-%d3/%a2
477ba: 4e5e unlk %fp
477bc: 4e75 rts
case RATE_MONOTONIC_EXPIRED:
/*
* Update statistics from the concluding period
*/
_Rate_monotonic_Update_statistics( the_period );
477be: 2f0a movel %a2,%sp@-
477c0: 4eb9 0004 75c6 jsr 475c6 <_Rate_monotonic_Update_statistics>
_ISR_Enable( level );
477c6: 46c3 movew %d3,%sr
the_period->state = RATE_MONOTONIC_ACTIVE;
477c8: 7402 moveq #2,%d2
the_period->next_length = length;
_Watchdog_Insert_ticks( &the_period->Timer, length );
_Thread_Enable_dispatch();
return RTEMS_TIMEOUT;
477ca: 7006 moveq #6,%d0
_Rate_monotonic_Update_statistics( the_period );
_ISR_Enable( level );
the_period->state = RATE_MONOTONIC_ACTIVE;
the_period->next_length = length;
477cc: 222e 000c movel %fp@(12),%d1
*/
_Rate_monotonic_Update_statistics( the_period );
_ISR_Enable( level );
the_period->state = RATE_MONOTONIC_ACTIVE;
477d0: 2542 0038 movel %d2,%a2@(56)
the_period->next_length = length;
477d4: 2541 003c movel %d1,%a2@(60)
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
477d8: 2541 001c movel %d1,%a2@(28)
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
477dc: 486a 0010 pea %a2@(16)
477e0: 4879 0006 0616 pea 60616 <_Watchdog_Ticks_chain>
477e6: 2d40 fff8 movel %d0,%fp@(-8)
477ea: 4eb9 0004 b5c4 jsr 4b5c4 <_Watchdog_Insert>
_Watchdog_Insert_ticks( &the_period->Timer, length );
_Thread_Enable_dispatch();
477f0: 4eb9 0004 a382 jsr 4a382 <_Thread_Enable_dispatch>
return RTEMS_TIMEOUT;
477f6: 202e fff8 movel %fp@(-8),%d0
477fa: 4fef 000c lea %sp@(12),%sp
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
477fe: 4cee 040c ffec moveml %fp@(-20),%d2-%d3/%a2
47804: 4e5e unlk %fp
47806: 4e75 rts
_Thread_Enable_dispatch();
return RTEMS_NOT_OWNER_OF_RESOURCE;
}
if ( length == RTEMS_PERIOD_STATUS ) {
switch ( the_period->state ) {
47808: 202a 0038 movel %a2@(56),%d0
4780c: 7204 moveq #4,%d1
4780e: b280 cmpl %d0,%d1
47810: 6500 00a4 bcsw 478b6 <rtems_rate_monotonic_period+0x1d6>
47814: 41f9 0005 de3a lea 5de3a <CSWTCH.2>,%a0
4781a: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0
case RATE_MONOTONIC_ACTIVE:
default: /* unreached -- only to remove warnings */
return_value = RTEMS_SUCCESSFUL;
break;
}
_Thread_Enable_dispatch();
4781e: 2d40 fff8 movel %d0,%fp@(-8)
47822: 4eb9 0004 a382 jsr 4a382 <_Thread_Enable_dispatch>
return( return_value );
47828: 202e fff8 movel %fp@(-8),%d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
4782c: 4cee 040c ffec moveml %fp@(-20),%d2-%d3/%a2
47832: 4e5e unlk %fp
47834: 4e75 rts
case RATE_MONOTONIC_ACTIVE:
/*
* Update statistics from the concluding period.
*/
_Rate_monotonic_Update_statistics( the_period );
47836: 2f0a movel %a2,%sp@-
47838: 4eb9 0004 75c6 jsr 475c6 <_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;
the_period->next_length = length;
4783e: 222e 000c movel %fp@(12),%d1
/*
* 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;
47842: 7001 moveq #1,%d0
the_period->next_length = length;
47844: 2541 003c movel %d1,%a2@(60)
/*
* 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;
47848: 2540 0038 movel %d0,%a2@(56)
the_period->next_length = length;
_ISR_Enable( level );
4784c: 46c3 movew %d3,%sr
_Thread_Executing->Wait.id = the_period->Object.id;
4784e: 2079 0006 0718 moveal 60718 <_Per_CPU_Information+0xc>,%a0
47854: 216a 0008 0020 movel %a2@(8),%a0@(32)
_Thread_Set_state( _Thread_Executing, STATES_WAITING_FOR_PERIOD );
4785a: 4878 4000 pea 4000 <D_MAX_EXP+0x3801>
4785e: 2f08 movel %a0,%sp@-
47860: 4eb9 0004 acc0 jsr 4acc0 <_Thread_Set_state>
/*
* Did the watchdog timer expire while we were actually blocking
* on it?
*/
_ISR_Disable( level );
47866: 203c 0000 0700 movel #1792,%d0
4786c: 40c1 movew %sr,%d1
4786e: 8081 orl %d1,%d0
47870: 46c0 movew %d0,%sr
local_state = the_period->state;
the_period->state = RATE_MONOTONIC_ACTIVE;
47872: 7402 moveq #2,%d2
/*
* Did the watchdog timer expire while we were actually blocking
* on it?
*/
_ISR_Disable( level );
local_state = the_period->state;
47874: 202a 0038 movel %a2@(56),%d0
the_period->state = RATE_MONOTONIC_ACTIVE;
47878: 2542 0038 movel %d2,%a2@(56)
_ISR_Enable( level );
4787c: 46c1 movew %d1,%sr
/*
* 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 )
4787e: 7203 moveq #3,%d1
47880: 4fef 000c lea %sp@(12),%sp
47884: b280 cmpl %d0,%d1
47886: 6712 beqs 4789a <rtems_rate_monotonic_period+0x1ba>
_Thread_Clear_state( _Thread_Executing, STATES_WAITING_FOR_PERIOD );
_Thread_Enable_dispatch();
47888: 4eb9 0004 a382 jsr 4a382 <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
4788e: 4280 clrl %d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
47890: 4cee 040c ffec moveml %fp@(-20),%d2-%d3/%a2
47896: 4e5e unlk %fp
47898: 4e75 rts
/*
* 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 )
_Thread_Clear_state( _Thread_Executing, STATES_WAITING_FOR_PERIOD );
4789a: 4878 4000 pea 4000 <D_MAX_EXP+0x3801>
4789e: 2f39 0006 0718 movel 60718 <_Per_CPU_Information+0xc>,%sp@-
478a4: 4eb9 0004 9f9c jsr 49f9c <_Thread_Clear_state>
478aa: 508f addql #8,%sp
_Thread_Enable_dispatch();
478ac: 4eb9 0004 a382 jsr 4a382 <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
478b2: 4280 clrl %d0
478b4: 60da bras 47890 <rtems_rate_monotonic_period+0x1b0>
_Thread_Enable_dispatch();
return RTEMS_NOT_OWNER_OF_RESOURCE;
}
if ( length == RTEMS_PERIOD_STATUS ) {
switch ( the_period->state ) {
478b6: 4280 clrl %d0 <== NOT EXECUTED
case RATE_MONOTONIC_ACTIVE:
default: /* unreached -- only to remove warnings */
return_value = RTEMS_SUCCESSFUL;
break;
}
_Thread_Enable_dispatch();
478b8: 2d40 fff8 movel %d0,%fp@(-8) <== NOT EXECUTED
478bc: 4eb9 0004 a382 jsr 4a382 <_Thread_Enable_dispatch> <== NOT EXECUTED
return( return_value );
478c2: 202e fff8 movel %fp@(-8),%d0 <== NOT EXECUTED
478c6: 6000 ff64 braw 4782c <rtems_rate_monotonic_period+0x14c><== NOT EXECUTED
...
000478cc <rtems_rate_monotonic_report_statistics_with_plugin>:
*/
void rtems_rate_monotonic_report_statistics_with_plugin(
void *context,
rtems_printk_plugin_t print
)
{
478cc: 4e56 ff78 linkw %fp,#-136
478d0: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
478d4: 262e 0008 movel %fp@(8),%d3
478d8: 246e 000c moveal %fp@(12),%a2
rtems_id id;
rtems_rate_monotonic_period_statistics the_stats;
rtems_rate_monotonic_period_status the_status;
char name[5];
if ( !print )
478dc: 4a8a tstl %a2
478de: 6700 0082 beqw 47962 <rtems_rate_monotonic_report_statistics_with_plugin+0x96>
return;
(*print)( context, "Period information by period\n" );
478e2: 4879 0005 de4e pea 5de4e <CSWTCH.2+0x14>
478e8: 2f03 movel %d3,%sp@-
478ea: 4e92 jsr %a2@
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
(*print)( context, "--- CPU times are in seconds ---\n" );
478ec: 4879 0005 de6c pea 5de6c <CSWTCH.2+0x32>
478f2: 2f03 movel %d3,%sp@-
478f4: 4e92 jsr %a2@
(*print)( context, "--- Wall times are in seconds ---\n" );
478f6: 4879 0005 de8e pea 5de8e <CSWTCH.2+0x54>
478fc: 2f03 movel %d3,%sp@-
478fe: 4e92 jsr %a2@
Be sure to test the various cases.
(*print)( context,"\
1234567890123456789012345678901234567890123456789012345678901234567890123456789\
\n");
*/
(*print)( context, " ID OWNER COUNT MISSED "
47900: 4879 0005 deb1 pea 5deb1 <CSWTCH.2+0x77>
47906: 2f03 movel %d3,%sp@-
47908: 4e92 jsr %a2@
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
" "
#endif
" WALL TIME\n"
);
(*print)( context, " "
4790a: 4fef 001c lea %sp@(28),%sp
4790e: 2ebc 0005 defc movel #384764,%sp@
47914: 2f03 movel %d3,%sp@-
47916: 4e92 jsr %a2@
/*
* 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 ;
47918: 2439 0006 0466 movel 60466 <_Rate_monotonic_Information+0x6>,%d2
4791e: 508f addql #8,%sp
47920: b4b9 0006 046a cmpl 6046a <_Rate_monotonic_Information+0xa>,%d2
47926: 623a bhis 47962 <rtems_rate_monotonic_report_statistics_with_plugin+0x96><== NEVER TAKEN
47928: 280e movel %fp,%d4
#if defined(RTEMS_DEBUG)
if ( status != RTEMS_SUCCESSFUL )
continue;
#endif
rtems_object_get_name( the_status.owner, sizeof(name), name );
4792a: 2a0e movel %fp,%d5
4792c: 0684 ffff ffa2 addil #-94,%d4
47932: 47f9 0004 d310 lea 4d310 <rtems_rate_monotonic_get_statistics>,%a3
status = rtems_rate_monotonic_get_statistics( id, &the_stats );
if ( status != RTEMS_SUCCESSFUL )
continue;
/* If the above passed, so should this but check it anyway */
status = rtems_rate_monotonic_get_status( id, &the_status );
47938: 4bf9 0004 d3d0 lea 4d3d0 <rtems_rate_monotonic_get_status>,%a5
#if defined(RTEMS_DEBUG)
if ( status != RTEMS_SUCCESSFUL )
continue;
#endif
rtems_object_get_name( the_status.owner, sizeof(name), name );
4793e: 5b85 subql #5,%d5
47940: 49f9 0004 7c24 lea 47c24 <rtems_object_get_name>,%a4
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 );
47946: 2e3c 0004 b1c4 movel #307652,%d7
* 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++ ) {
status = rtems_rate_monotonic_get_statistics( id, &the_stats );
4794c: 2f04 movel %d4,%sp@-
4794e: 2f02 movel %d2,%sp@-
47950: 4e93 jsr %a3@
if ( status != RTEMS_SUCCESSFUL )
47952: 508f addql #8,%sp
47954: 4a80 tstl %d0
47956: 6714 beqs 4796c <rtems_rate_monotonic_report_statistics_with_plugin+0xa0>
* 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++ ) {
47958: 5282 addql #1,%d2
/*
* 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 ;
4795a: b4b9 0006 046a cmpl 6046a <_Rate_monotonic_Information+0xa>,%d2
47960: 63ea blss 4794c <rtems_rate_monotonic_report_statistics_with_plugin+0x80>
the_stats.min_wall_time, the_stats.max_wall_time, ival_wall, fval_wall
);
#endif
}
}
}
47962: 4cee 3cfc ff78 moveml %fp@(-136),%d2-%d7/%a2-%a5
47968: 4e5e unlk %fp
4796a: 4e75 rts
status = rtems_rate_monotonic_get_statistics( id, &the_stats );
if ( status != RTEMS_SUCCESSFUL )
continue;
/* If the above passed, so should this but check it anyway */
status = rtems_rate_monotonic_get_status( id, &the_status );
4796c: 486e ffda pea %fp@(-38)
47970: 2f02 movel %d2,%sp@-
47972: 4e95 jsr %a5@
#if defined(RTEMS_DEBUG)
if ( status != RTEMS_SUCCESSFUL )
continue;
#endif
rtems_object_get_name( the_status.owner, sizeof(name), name );
47974: 2f05 movel %d5,%sp@-
47976: 4878 0005 pea 5 <COMPARE>
4797a: 2f2e ffda movel %fp@(-38),%sp@-
4797e: 4e94 jsr %a4@
/*
* Print part of report line that is not dependent on granularity
*/
(*print)( context,
47980: 2f2e ffa6 movel %fp@(-90),%sp@-
47984: 2f2e ffa2 movel %fp@(-94),%sp@-
47988: 2f05 movel %d5,%sp@-
4798a: 2f02 movel %d2,%sp@-
4798c: 4879 0005 df48 pea 5df48 <CSWTCH.2+0x10e>
47992: 2f03 movel %d3,%sp@-
47994: 4e92 jsr %a2@
);
/*
* If the count is zero, don't print statistics
*/
if (the_stats.count == 0) {
47996: 202e ffa2 movel %fp@(-94),%d0
4799a: 4fef 002c lea %sp@(44),%sp
4799e: 6618 bnes 479b8 <rtems_rate_monotonic_report_statistics_with_plugin+0xec>
(*print)( context, "\n" );
479a0: 4879 0005 dde6 pea 5dde6 <rtems_status_assoc+0x19e>
* 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++ ) {
479a6: 5282 addql #1,%d2
/*
* If the count is zero, don't print statistics
*/
if (the_stats.count == 0) {
(*print)( context, "\n" );
479a8: 2f03 movel %d3,%sp@-
479aa: 4e92 jsr %a2@
continue;
479ac: 508f addql #8,%sp
/*
* 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 ;
479ae: b4b9 0006 046a cmpl 6046a <_Rate_monotonic_Information+0xa>,%d2
479b4: 6396 blss 4794c <rtems_rate_monotonic_report_statistics_with_plugin+0x80><== ALWAYS TAKEN
479b6: 60aa bras 47962 <rtems_rate_monotonic_report_statistics_with_plugin+0x96><== NOT EXECUTED
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 );
479b8: 486e fff2 pea %fp@(-14)
479bc: 2047 moveal %d7,%a0
* 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++ ) {
479be: 5282 addql #1,%d2
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 );
479c0: 2f00 movel %d0,%sp@-
479c2: 486e ffba pea %fp@(-70)
479c6: 4e90 jsr %a0@
(*print)( context,
479c8: 202e fff6 movel %fp@(-10),%d0
479cc: 223c 0000 03e8 movel #1000,%d1
479d2: 4c41 0800 remsl %d1,%d0,%d0
479d6: 2c2e ffb6 movel %fp@(-74),%d6
479da: 2f00 movel %d0,%sp@-
479dc: 2001 movel %d1,%d0
479de: 2f2e fff2 movel %fp@(-14),%sp@-
479e2: 4c40 6806 remsl %d0,%d6,%d6
479e6: 202e ffae movel %fp@(-82),%d0
479ea: 2246 moveal %d6,%a1
479ec: 223c 0000 03e8 movel #1000,%d1
479f2: 2f09 movel %a1,%sp@-
479f4: 2f2e ffb2 movel %fp@(-78),%sp@-
479f8: 4c41 0800 remsl %d1,%d0,%d0
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);
(*print)( context,
479fc: 2c3c 0000 03e8 movel #1000,%d6
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 );
(*print)( context,
47a02: 2f00 movel %d0,%sp@-
47a04: 2f2e ffaa movel %fp@(-86),%sp@-
47a08: 4879 0005 df5f pea 5df5f <CSWTCH.2+0x125>
47a0e: 2f03 movel %d3,%sp@-
47a10: 4e92 jsr %a2@
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);
47a12: 4fef 002c lea %sp@(44),%sp
47a16: 2047 moveal %d7,%a0
47a18: 486e fff2 pea %fp@(-14)
47a1c: 2f2e ffa2 movel %fp@(-94),%sp@-
47a20: 486e ffd2 pea %fp@(-46)
47a24: 4e90 jsr %a0@
(*print)( context,
47a26: 202e fff6 movel %fp@(-10),%d0
47a2a: 4c46 0800 remsl %d6,%d0,%d0
47a2e: 222e ffce movel %fp@(-50),%d1
47a32: 2f00 movel %d0,%sp@-
47a34: 2f2e fff2 movel %fp@(-14),%sp@-
47a38: 4c46 1801 remsl %d6,%d1,%d1
47a3c: 202e ffc6 movel %fp@(-58),%d0
47a40: 2241 moveal %d1,%a1
47a42: 2f09 movel %a1,%sp@-
47a44: 2f2e ffca movel %fp@(-54),%sp@-
47a48: 4c46 0800 remsl %d6,%d0,%d0
47a4c: 2f00 movel %d0,%sp@-
47a4e: 2f2e ffc2 movel %fp@(-62),%sp@-
47a52: 4879 0005 df7e pea 5df7e <CSWTCH.2+0x144>
47a58: 2f03 movel %d3,%sp@-
47a5a: 4e92 jsr %a2@
47a5c: 4fef 002c lea %sp@(44),%sp
/*
* 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 ;
47a60: b4b9 0006 046a cmpl 6046a <_Rate_monotonic_Information+0xa>,%d2
47a66: 6300 fee4 blsw 4794c <rtems_rate_monotonic_report_statistics_with_plugin+0x80>
47a6a: 6000 fef6 braw 47962 <rtems_rate_monotonic_report_statistics_with_plugin+0x96><== NOT EXECUTED
00047a88 <rtems_rate_monotonic_reset_all_statistics>:
/*
* rtems_rate_monotonic_reset_all_statistics
*/
void rtems_rate_monotonic_reset_all_statistics( void )
{
47a88: 4e56 0000 linkw %fp,#0
47a8c: 2039 0006 0554 movel 60554 <_Thread_Dispatch_disable_level>,%d0
47a92: 5280 addql #1,%d0
47a94: 2f0a movel %a2,%sp@-
47a96: 23c0 0006 0554 movel %d0,60554 <_Thread_Dispatch_disable_level>
47a9c: 2f02 movel %d2,%sp@-
/*
* Cycle through all possible ids and try to reset 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 ;
47a9e: 2439 0006 0466 movel 60466 <_Rate_monotonic_Information+0x6>,%d2
47aa4: b4b9 0006 046a cmpl 6046a <_Rate_monotonic_Information+0xa>,%d2
47aaa: 6216 bhis 47ac2 <rtems_rate_monotonic_reset_all_statistics+0x3a><== NEVER TAKEN
47aac: 45f9 0004 7ad4 lea 47ad4 <rtems_rate_monotonic_reset_statistics>,%a2
id <= _Rate_monotonic_Information.maximum_id ;
id++ ) {
status = rtems_rate_monotonic_reset_statistics( id );
47ab2: 2f02 movel %d2,%sp@-
* Cycle through all possible ids and try to reset 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++ ) {
47ab4: 5282 addql #1,%d2
status = rtems_rate_monotonic_reset_statistics( id );
47ab6: 4e92 jsr %a2@
/*
* Cycle through all possible ids and try to reset 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 ;
47ab8: 588f addql #4,%sp
47aba: b4b9 0006 046a cmpl 6046a <_Rate_monotonic_Information+0xa>,%d2
47ac0: 63f0 blss 47ab2 <rtems_rate_monotonic_reset_all_statistics+0x2a>
/*
* Done so exit thread dispatching disabled critical section.
*/
_Thread_Enable_dispatch();
}
47ac2: 242e fff8 movel %fp@(-8),%d2
47ac6: 246e fffc moveal %fp@(-4),%a2
47aca: 4e5e unlk %fp
}
/*
* Done so exit thread dispatching disabled critical section.
*/
_Thread_Enable_dispatch();
47acc: 4ef9 0004 a382 jmp 4a382 <_Thread_Enable_dispatch>
...
00057788 <rtems_region_extend>:
rtems_status_code rtems_region_extend(
rtems_id id,
void *starting_address,
uintptr_t length
)
{
57788: 4e56 fff8 linkw %fp,#-8
5778c: 2f0a movel %a2,%sp@-
5778e: 2f02 movel %d2,%sp@-
57790: 242e 000c movel %fp@(12),%d2
bool extend_ok;
Objects_Locations location;
rtems_status_code return_status;
Region_Control *the_region;
if ( !starting_address )
57794: 6700 0086 beqw 5781c <rtems_region_extend+0x94>
return RTEMS_INVALID_ADDRESS;
_RTEMS_Lock_allocator(); /* to prevent deletion */
57798: 2f39 0007 d36a movel 7d36a <_RTEMS_Allocator_Mutex>,%sp@-
5779e: 4eb9 0005 9e20 jsr 59e20 <_API_Mutex_Lock>
Objects_Id id,
Objects_Locations *location
)
{
return (Region_Control *)
_Objects_Get_no_protection( &_Region_Information, id, location );
577a4: 486e fff8 pea %fp@(-8)
577a8: 2f2e 0008 movel %fp@(8),%sp@-
577ac: 4879 0007 d1d4 pea 7d1d4 <_Region_Information>
577b2: 4eb9 0005 bad0 jsr 5bad0 <_Objects_Get_no_protection>
the_region = _Region_Get( id, &location );
switch ( location ) {
577b8: 4fef 0010 lea %sp@(16),%sp
577bc: 2440 moveal %d0,%a2
577be: 4aae fff8 tstl %fp@(-8)
577c2: 6646 bnes 5780a <rtems_region_extend+0x82> <== NEVER TAKEN
case OBJECTS_LOCAL:
extend_ok = _Heap_Extend(
577c4: 486e fffc pea %fp@(-4)
577c8: 2f2e 0010 movel %fp@(16),%sp@-
577cc: 2f02 movel %d2,%sp@-
577ce: 486a 0068 pea %a2@(104)
577d2: 4eb9 0005 ab90 jsr 5ab90 <_Heap_Extend>
starting_address,
length,
&amount_extended
);
if ( extend_ok ) {
577d8: 4fef 0010 lea %sp@(16),%sp
577dc: 4a00 tstb %d0
577de: 674c beqs 5782c <rtems_region_extend+0xa4>
the_region->length += amount_extended;
577e0: 202e fffc movel %fp@(-4),%d0
577e4: d1aa 0054 addl %d0,%a2@(84)
the_region->maximum_segment_size += amount_extended;
return_status = RTEMS_SUCCESSFUL;
577e8: 4282 clrl %d2
&amount_extended
);
if ( extend_ok ) {
the_region->length += amount_extended;
the_region->maximum_segment_size += amount_extended;
577ea: d1aa 005c addl %d0,%a2@(92)
default:
return_status = RTEMS_INVALID_ID;
break;
}
_RTEMS_Unlock_allocator();
577ee: 2f39 0007 d36a movel 7d36a <_RTEMS_Allocator_Mutex>,%sp@-
577f4: 4eb9 0005 9e80 jsr 59e80 <_API_Mutex_Unlock>
return return_status;
577fa: 588f addql #4,%sp
}
577fc: 2002 movel %d2,%d0
577fe: 242e fff0 movel %fp@(-16),%d2
57802: 246e fff4 moveal %fp@(-12),%a2
57806: 4e5e unlk %fp
57808: 4e75 rts
default:
return_status = RTEMS_INVALID_ID;
break;
}
_RTEMS_Unlock_allocator();
5780a: 2f39 0007 d36a movel 7d36a <_RTEMS_Allocator_Mutex>,%sp@-
break;
#endif
case OBJECTS_ERROR:
default:
return_status = RTEMS_INVALID_ID;
57810: 7404 moveq #4,%d2
break;
}
_RTEMS_Unlock_allocator();
57812: 4eb9 0005 9e80 jsr 59e80 <_API_Mutex_Unlock>
return return_status;
57818: 588f addql #4,%sp
5781a: 60e0 bras 577fc <rtems_region_extend+0x74>
Objects_Locations location;
rtems_status_code return_status;
Region_Control *the_region;
if ( !starting_address )
return RTEMS_INVALID_ADDRESS;
5781c: 7409 moveq #9,%d2
break;
}
_RTEMS_Unlock_allocator();
return return_status;
}
5781e: 2002 movel %d2,%d0
57820: 242e fff0 movel %fp@(-16),%d2
57824: 246e fff4 moveal %fp@(-12),%a2
57828: 4e5e unlk %fp
5782a: 4e75 rts
default:
return_status = RTEMS_INVALID_ID;
break;
}
_RTEMS_Unlock_allocator();
5782c: 2f39 0007 d36a movel 7d36a <_RTEMS_Allocator_Mutex>,%sp@-
if ( extend_ok ) {
the_region->length += amount_extended;
the_region->maximum_segment_size += amount_extended;
return_status = RTEMS_SUCCESSFUL;
} else {
return_status = RTEMS_INVALID_ADDRESS;
57832: 7409 moveq #9,%d2
default:
return_status = RTEMS_INVALID_ID;
break;
}
_RTEMS_Unlock_allocator();
57834: 4eb9 0005 9e80 jsr 59e80 <_API_Mutex_Unlock>
return return_status;
5783a: 588f addql #4,%sp
5783c: 60be bras 577fc <rtems_region_extend+0x74>
...
00057ac4 <rtems_region_get_segment_size>:
rtems_status_code rtems_region_get_segment_size(
rtems_id id,
void *segment,
uintptr_t *size
)
{
57ac4: 4e56 fffc linkw %fp,#-4
57ac8: 2f03 movel %d3,%sp@-
57aca: 262e 0010 movel %fp@(16),%d3
57ace: 2f02 movel %d2,%sp@-
57ad0: 242e 000c movel %fp@(12),%d2
Objects_Locations location;
rtems_status_code return_status = RTEMS_SUCCESSFUL;
register Region_Control *the_region;
if ( !segment )
57ad4: 6700 0092 beqw 57b68 <rtems_region_get_segment_size+0xa4>
return RTEMS_INVALID_ADDRESS;
if ( !size )
57ad8: 4a83 tstl %d3
57ada: 6700 008c beqw 57b68 <rtems_region_get_segment_size+0xa4>
return RTEMS_INVALID_ADDRESS;
_RTEMS_Lock_allocator();
57ade: 2f39 0007 d36a movel 7d36a <_RTEMS_Allocator_Mutex>,%sp@-
57ae4: 4eb9 0005 9e20 jsr 59e20 <_API_Mutex_Lock>
57aea: 486e fffc pea %fp@(-4)
57aee: 2f2e 0008 movel %fp@(8),%sp@-
57af2: 4879 0007 d1d4 pea 7d1d4 <_Region_Information>
57af8: 4eb9 0005 bad0 jsr 5bad0 <_Objects_Get_no_protection>
the_region = _Region_Get( id, &location );
switch ( location ) {
57afe: 222e fffc movel %fp@(-4),%d1
57b02: 4fef 0010 lea %sp@(16),%sp
57b06: 6636 bnes 57b3e <rtems_region_get_segment_size+0x7a>
case OBJECTS_LOCAL:
if ( !_Heap_Size_of_alloc_area( &the_region->Memory, segment, size ) )
57b08: 2f03 movel %d3,%sp@-
57b0a: 2040 moveal %d0,%a0
57b0c: 2f02 movel %d2,%sp@-
57b0e: 4868 0068 pea %a0@(104)
57b12: 4eb9 0005 b4ec jsr 5b4ec <_Heap_Size_of_alloc_area>
57b18: 4fef 000c lea %sp@(12),%sp
57b1c: 4a00 tstb %d0
57b1e: 6624 bnes 57b44 <rtems_region_get_segment_size+0x80><== ALWAYS TAKEN
case OBJECTS_ERROR:
return_status = RTEMS_INVALID_ID;
break;
}
_RTEMS_Unlock_allocator();
57b20: 2f39 0007 d36a movel 7d36a <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
the_region = _Region_Get( id, &location );
switch ( location ) {
case OBJECTS_LOCAL:
if ( !_Heap_Size_of_alloc_area( &the_region->Memory, segment, size ) )
return_status = RTEMS_INVALID_ADDRESS;
57b26: 7409 moveq #9,%d2 <== NOT EXECUTED
case OBJECTS_ERROR:
return_status = RTEMS_INVALID_ID;
break;
}
_RTEMS_Unlock_allocator();
57b28: 4eb9 0005 9e80 jsr 59e80 <_API_Mutex_Unlock> <== NOT EXECUTED
return return_status;
57b2e: 588f addql #4,%sp <== NOT EXECUTED
}
57b30: 2002 movel %d2,%d0
57b32: 242e fff4 movel %fp@(-12),%d2
57b36: 262e fff8 movel %fp@(-8),%d3
57b3a: 4e5e unlk %fp
57b3c: 4e75 rts
return RTEMS_INVALID_ADDRESS;
_RTEMS_Lock_allocator();
the_region = _Region_Get( id, &location );
switch ( location ) {
57b3e: 7001 moveq #1,%d0
57b40: b081 cmpl %d1,%d0
57b42: 6712 beqs 57b56 <rtems_region_get_segment_size+0x92><== ALWAYS TAKEN
case OBJECTS_ERROR:
return_status = RTEMS_INVALID_ID;
break;
}
_RTEMS_Unlock_allocator();
57b44: 2f39 0007 d36a movel 7d36a <_RTEMS_Allocator_Mutex>,%sp@-
void *segment,
uintptr_t *size
)
{
Objects_Locations location;
rtems_status_code return_status = RTEMS_SUCCESSFUL;
57b4a: 4282 clrl %d2
case OBJECTS_ERROR:
return_status = RTEMS_INVALID_ID;
break;
}
_RTEMS_Unlock_allocator();
57b4c: 4eb9 0005 9e80 jsr 59e80 <_API_Mutex_Unlock>
return return_status;
57b52: 588f addql #4,%sp
57b54: 60da bras 57b30 <rtems_region_get_segment_size+0x6c>
case OBJECTS_ERROR:
return_status = RTEMS_INVALID_ID;
break;
}
_RTEMS_Unlock_allocator();
57b56: 2f39 0007 d36a movel 7d36a <_RTEMS_Allocator_Mutex>,%sp@-
case OBJECTS_REMOTE: /* this error cannot be returned */
break;
#endif
case OBJECTS_ERROR:
return_status = RTEMS_INVALID_ID;
57b5c: 7404 moveq #4,%d2
break;
}
_RTEMS_Unlock_allocator();
57b5e: 4eb9 0005 9e80 jsr 59e80 <_API_Mutex_Unlock>
return return_status;
57b64: 588f addql #4,%sp
57b66: 60c8 bras 57b30 <rtems_region_get_segment_size+0x6c>
if ( !segment )
return RTEMS_INVALID_ADDRESS;
if ( !size )
return RTEMS_INVALID_ADDRESS;
57b68: 7409 moveq #9,%d2
break;
}
_RTEMS_Unlock_allocator();
return return_status;
}
57b6a: 2002 movel %d2,%d0
57b6c: 242e fff4 movel %fp@(-12),%d2
57b70: 262e fff8 movel %fp@(-8),%d3
57b74: 4e5e unlk %fp <== NOT EXECUTED
00057ba4 <rtems_region_resize_segment>:
rtems_id id,
void *segment,
uintptr_t size,
uintptr_t *old_size
)
{
57ba4: 4e56 fff0 linkw %fp,#-16
57ba8: 2f0b movel %a3,%sp@-
57baa: 2f0a movel %a2,%sp@-
57bac: 246e 0014 moveal %fp@(20),%a2
uintptr_t osize;
rtems_status_code return_status;
Heap_Resize_status status;
register Region_Control *the_region;
if ( !old_size )
57bb0: 4a8a tstl %a2
57bb2: 6700 00a4 beqw 57c58 <rtems_region_resize_segment+0xb4>
return RTEMS_INVALID_ADDRESS;
_RTEMS_Lock_allocator();
57bb6: 2f39 0007 d36a movel 7d36a <_RTEMS_Allocator_Mutex>,%sp@-
57bbc: 4eb9 0005 9e20 jsr 59e20 <_API_Mutex_Lock>
57bc2: 486e fff8 pea %fp@(-8)
57bc6: 2f2e 0008 movel %fp@(8),%sp@-
57bca: 4879 0007 d1d4 pea 7d1d4 <_Region_Information>
57bd0: 4eb9 0005 bad0 jsr 5bad0 <_Objects_Get_no_protection>
the_region = _Region_Get( id, &location );
switch ( location ) {
57bd6: 4fef 0010 lea %sp@(16),%sp
57bda: 2640 moveal %d0,%a3
57bdc: 4aae fff8 tstl %fp@(-8)
57be0: 663e bnes 57c20 <rtems_region_resize_segment+0x7c><== NEVER TAKEN
case OBJECTS_LOCAL:
_Region_Debug_Walk( the_region, 7 );
status = _Heap_Resize_block(
57be2: 486e fffc pea %fp@(-4)
57be6: 486e fff4 pea %fp@(-12)
57bea: 2f2e 0010 movel %fp@(16),%sp@-
57bee: 2f2e 000c movel %fp@(12),%sp@-
57bf2: 486b 0068 pea %a3@(104)
57bf6: 4eb9 0005 b400 jsr 5b400 <_Heap_Resize_block>
segment,
(uint32_t) size,
&osize,
&avail_size
);
*old_size = (uint32_t) osize;
57bfc: 24ae fff4 movel %fp@(-12),%a2@
_Region_Debug_Walk( the_region, 8 );
if ( status == HEAP_RESIZE_SUCCESSFUL )
57c00: 4fef 0014 lea %sp@(20),%sp
57c04: 4a80 tstl %d0
57c06: 6634 bnes 57c3c <rtems_region_resize_segment+0x98>
_Region_Process_queue( the_region ); /* unlocks allocator */
57c08: 2f0b movel %a3,%sp@-
57c0a: 4eb9 0005 f5ec jsr 5f5ec <_Region_Process_queue>
break;
}
_RTEMS_Unlock_allocator();
return return_status;
}
57c10: 246e ffe8 moveal %fp@(-24),%a2
*old_size = (uint32_t) osize;
_Region_Debug_Walk( the_region, 8 );
if ( status == HEAP_RESIZE_SUCCESSFUL )
_Region_Process_queue( the_region ); /* unlocks allocator */
57c14: 588f addql #4,%sp
else
_RTEMS_Unlock_allocator();
if (status == HEAP_RESIZE_SUCCESSFUL)
return RTEMS_SUCCESSFUL;
57c16: 4280 clrl %d0
break;
}
_RTEMS_Unlock_allocator();
return return_status;
}
57c18: 266e ffec moveal %fp@(-20),%a3
57c1c: 4e5e unlk %fp
57c1e: 4e75 rts
default:
return_status = RTEMS_INVALID_ID;
break;
}
_RTEMS_Unlock_allocator();
57c20: 2f39 0007 d36a movel 7d36a <_RTEMS_Allocator_Mutex>,%sp@-
57c26: 4eb9 0005 9e80 jsr 59e80 <_API_Mutex_Unlock>
return return_status;
}
57c2c: 246e ffe8 moveal %fp@(-24),%a2
return_status = RTEMS_INVALID_ID;
break;
}
_RTEMS_Unlock_allocator();
return return_status;
57c30: 588f addql #4,%sp
57c32: 7004 moveq #4,%d0
}
57c34: 266e ffec moveal %fp@(-20),%a3
57c38: 4e5e unlk %fp
57c3a: 4e75 rts
_Region_Debug_Walk( the_region, 8 );
if ( status == HEAP_RESIZE_SUCCESSFUL )
_Region_Process_queue( the_region ); /* unlocks allocator */
else
_RTEMS_Unlock_allocator();
57c3c: 2f39 0007 d36a movel 7d36a <_RTEMS_Allocator_Mutex>,%sp@-
57c42: 2d40 fff0 movel %d0,%fp@(-16)
57c46: 4eb9 0005 9e80 jsr 59e80 <_API_Mutex_Unlock>
if (status == HEAP_RESIZE_SUCCESSFUL)
return RTEMS_SUCCESSFUL;
if (status == HEAP_RESIZE_UNSATISFIED)
57c4c: 202e fff0 movel %fp@(-16),%d0
57c50: 588f addql #4,%sp
57c52: 7201 moveq #1,%d1
57c54: b280 cmpl %d0,%d1
57c56: 670e beqs 57c66 <rtems_region_resize_segment+0xc2>
break;
}
_RTEMS_Unlock_allocator();
return return_status;
}
57c58: 246e ffe8 moveal %fp@(-24),%a2
if (status == HEAP_RESIZE_SUCCESSFUL)
return RTEMS_SUCCESSFUL;
if (status == HEAP_RESIZE_UNSATISFIED)
return RTEMS_UNSATISFIED;
return RTEMS_INVALID_ADDRESS;
57c5c: 7009 moveq #9,%d0
break;
}
_RTEMS_Unlock_allocator();
return return_status;
}
57c5e: 266e ffec moveal %fp@(-20),%a3
57c62: 4e5e unlk %fp
57c64: 4e75 rts
57c66: 246e ffe8 moveal %fp@(-24),%a2
if (status == HEAP_RESIZE_SUCCESSFUL)
return RTEMS_SUCCESSFUL;
if (status == HEAP_RESIZE_UNSATISFIED)
return RTEMS_UNSATISFIED;
57c6a: 700d moveq #13,%d0
break;
}
_RTEMS_Unlock_allocator();
return return_status;
}
57c6c: 266e ffec moveal %fp@(-20),%a3
57c70: 4e5e unlk %fp <== NOT EXECUTED
00046570 <rtems_semaphore_delete>:
#endif
rtems_status_code rtems_semaphore_delete(
rtems_id id
)
{
46570: 4e56 fffc linkw %fp,#-4
46574: 2f0a movel %a2,%sp@-
Objects_Id id,
Objects_Locations *location
)
{
return (Semaphore_Control *)
_Objects_Get( &_Semaphore_Information, id, location );
46576: 486e fffc pea %fp@(-4)
4657a: 2f2e 0008 movel %fp@(8),%sp@-
4657e: 4879 0005 e360 pea 5e360 <_Semaphore_Information>
46584: 4eb9 0004 7f48 jsr 47f48 <_Objects_Get>
register Semaphore_Control *the_semaphore;
Objects_Locations location;
the_semaphore = _Semaphore_Get( id, &location );
switch ( location ) {
4658a: 4fef 000c lea %sp@(12),%sp
4658e: 2440 moveal %d0,%a2
46590: 4aae fffc tstl %fp@(-4)
46594: 670a beqs 465a0 <rtems_semaphore_delete+0x30>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
46596: 246e fff8 moveal %fp@(-8),%a2
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4659a: 7004 moveq #4,%d0
}
4659c: 4e5e unlk %fp
4659e: 4e75 rts
465a0: 7030 moveq #48,%d0
465a2: c0aa 0010 andl %a2@(16),%d0
the_semaphore = _Semaphore_Get( id, &location );
switch ( location ) {
case OBJECTS_LOCAL:
if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) {
465a6: 6760 beqs 46608 <rtems_semaphore_delete+0x98>
if ( _CORE_mutex_Is_locked( &the_semaphore->Core_control.mutex ) &&
465a8: 4aaa 0062 tstl %a2@(98)
465ac: 6616 bnes 465c4 <rtems_semaphore_delete+0x54>
465ae: 7220 moveq #32,%d1
465b0: b280 cmpl %d0,%d1
465b2: 6710 beqs 465c4 <rtems_semaphore_delete+0x54>
!_Attributes_Is_simple_binary_semaphore(
the_semaphore->attribute_set ) ) {
_Thread_Enable_dispatch();
465b4: 4eb9 0004 882e jsr 4882e <_Thread_Enable_dispatch>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
465ba: 246e fff8 moveal %fp@(-8),%a2
if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) {
if ( _CORE_mutex_Is_locked( &the_semaphore->Core_control.mutex ) &&
!_Attributes_Is_simple_binary_semaphore(
the_semaphore->attribute_set ) ) {
_Thread_Enable_dispatch();
return RTEMS_RESOURCE_IN_USE;
465be: 700c moveq #12,%d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
465c0: 4e5e unlk %fp
465c2: 4e75 rts
!_Attributes_Is_simple_binary_semaphore(
the_semaphore->attribute_set ) ) {
_Thread_Enable_dispatch();
return RTEMS_RESOURCE_IN_USE;
}
_CORE_mutex_Flush(
465c4: 4878 0004 pea 4 <CONTEXT_ARG>
465c8: 42a7 clrl %sp@-
465ca: 486a 0014 pea %a2@(20)
465ce: 4eb9 0004 70d8 jsr 470d8 <_CORE_mutex_Flush>
465d4: 4fef 000c lea %sp@(12),%sp
SEMAPHORE_MP_OBJECT_WAS_DELETED,
CORE_SEMAPHORE_WAS_DELETED
);
}
_Objects_Close( &_Semaphore_Information, &the_semaphore->Object );
465d8: 2f0a movel %a2,%sp@-
465da: 4879 0005 e360 pea 5e360 <_Semaphore_Information>
465e0: 4eb9 0004 7b1c jsr 47b1c <_Objects_Close>
*/
RTEMS_INLINE_ROUTINE void _Semaphore_Free (
Semaphore_Control *the_semaphore
)
{
_Objects_Free( &_Semaphore_Information, &the_semaphore->Object );
465e6: 2f0a movel %a2,%sp@-
465e8: 4879 0005 e360 pea 5e360 <_Semaphore_Information>
465ee: 4eb9 0004 7de0 jsr 47de0 <_Objects_Free>
0, /* Not used */
0 /* Not used */
);
}
#endif
_Thread_Enable_dispatch();
465f4: 4eb9 0004 882e jsr 4882e <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
465fa: 4fef 0010 lea %sp@(16),%sp
465fe: 4280 clrl %d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
46600: 246e fff8 moveal %fp@(-8),%a2
46604: 4e5e unlk %fp
46606: 4e75 rts
&the_semaphore->Core_control.mutex,
SEMAPHORE_MP_OBJECT_WAS_DELETED,
CORE_MUTEX_WAS_DELETED
);
} else {
_CORE_semaphore_Flush(
46608: 4878 0002 pea 2 <DOUBLE_FLOAT>
4660c: 42a7 clrl %sp@-
4660e: 486a 0014 pea %a2@(20)
46612: 4eb9 0004 7410 jsr 47410 <_CORE_semaphore_Flush>
46618: 4fef 000c lea %sp@(12),%sp
SEMAPHORE_MP_OBJECT_WAS_DELETED,
CORE_SEMAPHORE_WAS_DELETED
);
}
_Objects_Close( &_Semaphore_Information, &the_semaphore->Object );
4661c: 2f0a movel %a2,%sp@-
4661e: 4879 0005 e360 pea 5e360 <_Semaphore_Information>
46624: 4eb9 0004 7b1c jsr 47b1c <_Objects_Close>
4662a: 2f0a movel %a2,%sp@-
4662c: 4879 0005 e360 pea 5e360 <_Semaphore_Information>
46632: 4eb9 0004 7de0 jsr 47de0 <_Objects_Free>
0, /* Not used */
0 /* Not used */
);
}
#endif
_Thread_Enable_dispatch();
46638: 4eb9 0004 882e jsr 4882e <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
4663e: 4fef 0010 lea %sp@(16),%sp
46642: 4280 clrl %d0
46644: 60ba bras 46600 <rtems_semaphore_delete+0x90>
...
0004f8f0 <rtems_semaphore_flush>:
#endif
rtems_status_code rtems_semaphore_flush(
rtems_id id
)
{
4f8f0: 4e56 fffc linkw %fp,#-4
4f8f4: 486e fffc pea %fp@(-4)
4f8f8: 2f2e 0008 movel %fp@(8),%sp@-
4f8fc: 4879 0006 25a8 pea 625a8 <_Semaphore_Information>
4f902: 4eb9 0004 9500 jsr 49500 <_Objects_Get>
register Semaphore_Control *the_semaphore;
Objects_Locations location;
the_semaphore = _Semaphore_Get( id, &location );
switch ( location ) {
4f908: 4fef 000c lea %sp@(12),%sp
4f90c: 4aae fffc tstl %fp@(-4)
4f910: 6706 beqs 4f918 <rtems_semaphore_flush+0x28>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4f912: 7004 moveq #4,%d0
}
4f914: 4e5e unlk %fp
4f916: 4e75 rts
4f918: 7230 moveq #48,%d1
4f91a: 2040 moveal %d0,%a0
4f91c: c2a8 0010 andl %a0@(16),%d1
the_semaphore = _Semaphore_Get( id, &location );
switch ( location ) {
case OBJECTS_LOCAL:
if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) {
4f920: 6720 beqs 4f942 <rtems_semaphore_flush+0x52>
_CORE_mutex_Flush(
4f922: 4878 0001 pea 1 <ADD>
4f926: 42a7 clrl %sp@-
4f928: 4868 0014 pea %a0@(20)
4f92c: 4eb9 0004 8690 jsr 48690 <_CORE_mutex_Flush>
4f932: 4fef 000c lea %sp@(12),%sp
&the_semaphore->Core_control.semaphore,
SEND_OBJECT_WAS_DELETED,
CORE_SEMAPHORE_STATUS_UNSATISFIED_NOWAIT
);
}
_Thread_Enable_dispatch();
4f936: 4eb9 0004 9dee jsr 49dee <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
4f93c: 4280 clrl %d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
4f93e: 4e5e unlk %fp
4f940: 4e75 rts
&the_semaphore->Core_control.mutex,
SEND_OBJECT_WAS_DELETED,
CORE_MUTEX_STATUS_UNSATISFIED_NOWAIT
);
} else {
_CORE_semaphore_Flush(
4f942: 4878 0001 pea 1 <ADD>
4f946: 2040 moveal %d0,%a0
4f948: 42a7 clrl %sp@-
4f94a: 4868 0014 pea %a0@(20)
4f94e: 4eb9 0004 89c8 jsr 489c8 <_CORE_semaphore_Flush>
4f954: 4fef 000c lea %sp@(12),%sp
&the_semaphore->Core_control.semaphore,
SEND_OBJECT_WAS_DELETED,
CORE_SEMAPHORE_STATUS_UNSATISFIED_NOWAIT
);
}
_Thread_Enable_dispatch();
4f958: 4eb9 0004 9dee jsr 49dee <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
4f95e: 4280 clrl %d0
4f960: 60dc bras 4f93e <rtems_semaphore_flush+0x4e>
...
00046648 <rtems_semaphore_obtain>:
rtems_status_code rtems_semaphore_obtain(
rtems_id id,
rtems_option option_set,
rtems_interval timeout
)
{
46648: 4e56 ffec linkw %fp,#-20
4664c: 48d7 001c moveml %d2-%d4,%sp@
Objects_Locations *location,
ISR_Level *level
)
{
return (Semaphore_Control *)
_Objects_Get_isr_disable( &_Semaphore_Information, id, location, level );
46650: 486e fff8 pea %fp@(-8)
46654: 486e fffc pea %fp@(-4)
46658: 242e 0008 movel %fp@(8),%d2
4665c: 2f02 movel %d2,%sp@-
4665e: 4879 0005 e360 pea 5e360 <_Semaphore_Information>
46664: 262e 000c movel %fp@(12),%d3
46668: 282e 0010 movel %fp@(16),%d4
4666c: 4eb9 0004 7ee8 jsr 47ee8 <_Objects_Get_isr_disable>
register Semaphore_Control *the_semaphore;
Objects_Locations location;
ISR_Level level;
the_semaphore = _Semaphore_Get_interrupt_disable( id, &location, &level );
switch ( location ) {
46672: 4fef 0010 lea %sp@(16),%sp
46676: 4aae fffc tstl %fp@(-4)
4667a: 670c beqs 46688 <rtems_semaphore_obtain+0x40>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4667c: 7004 moveq #4,%d0
}
4667e: 4cee 001c ffec moveml %fp@(-20),%d2-%d4
46684: 4e5e unlk %fp
46686: 4e75 rts
46688: 7230 moveq #48,%d1
4668a: 2040 moveal %d0,%a0
4668c: c2a8 0010 andl %a0@(16),%d1
the_semaphore = _Semaphore_Get_interrupt_disable( id, &location, &level );
switch ( location ) {
case OBJECTS_LOCAL:
if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) {
46690: 6738 beqs 466ca <rtems_semaphore_obtain+0x82>
_CORE_mutex_Seize(
46692: 2f2e fff8 movel %fp@(-8),%sp@-
*/
RTEMS_INLINE_ROUTINE bool _Options_Is_no_wait (
rtems_option option_set
)
{
return (option_set & RTEMS_NO_WAIT) ? true : false;
46696: 7201 moveq #1,%d1
46698: c681 andl %d1,%d3
4669a: 2f04 movel %d4,%sp@-
4669c: b781 eorl %d3,%d1
4669e: 2f01 movel %d1,%sp@-
466a0: 2f02 movel %d2,%sp@-
466a2: 4868 0014 pea %a0@(20)
466a6: 4eb9 0004 7260 jsr 47260 <_CORE_mutex_Seize>
((_Options_Is_no_wait( option_set )) ? false : true),
timeout,
level
);
return _Semaphore_Translate_core_mutex_return_code(
_Thread_Executing->Wait.return_code );
466ac: 2079 0005 e5e0 moveal 5e5e0 <_Per_CPU_Information+0xc>,%a0
id,
((_Options_Is_no_wait( option_set )) ? false : true),
timeout,
level
);
return _Semaphore_Translate_core_mutex_return_code(
466b2: 2f28 0034 movel %a0@(52),%sp@-
466b6: 4eb9 0004 6818 jsr 46818 <_Semaphore_Translate_core_mutex_return_code>
466bc: 4fef 0018 lea %sp@(24),%sp
break;
}
return RTEMS_INVALID_ID;
}
466c0: 4cee 001c ffec moveml %fp@(-20),%d2-%d4
466c6: 4e5e unlk %fp
466c8: 4e75 rts
/* disabled when you get here */
executing = _Thread_Executing;
executing->Wait.return_code = CORE_SEMAPHORE_STATUS_SUCCESSFUL;
if ( the_semaphore->count != 0 ) {
466ca: 2240 moveal %d0,%a1
{
Thread_Control *executing;
/* disabled when you get here */
executing = _Thread_Executing;
466cc: 2079 0005 e5e0 moveal 5e5e0 <_Per_CPU_Information+0xc>,%a0
executing->Wait.return_code = CORE_SEMAPHORE_STATUS_SUCCESSFUL;
if ( the_semaphore->count != 0 ) {
466d2: 2229 005c movel %a1@(92),%d1
Thread_Control *executing;
/* disabled when you get here */
executing = _Thread_Executing;
executing->Wait.return_code = CORE_SEMAPHORE_STATUS_SUCCESSFUL;
466d6: 42a8 0034 clrl %a0@(52)
if ( the_semaphore->count != 0 ) {
466da: 4a81 tstl %d1
466dc: 662e bnes 4670c <rtems_semaphore_obtain+0xc4>
the_semaphore->count -= 1;
_ISR_Enable( *level_p );
return;
}
if ( !wait ) {
466de: 0803 0000 btst #0,%d3
466e2: 6748 beqs 4672c <rtems_semaphore_obtain+0xe4>
_ISR_Enable( *level_p );
466e4: 202e fff8 movel %fp@(-8),%d0
466e8: 46c0 movew %d0,%sr
executing->Wait.return_code = CORE_SEMAPHORE_STATUS_UNSATISFIED_NOWAIT;
466ea: 7001 moveq #1,%d0
466ec: 2140 0034 movel %d0,%a0@(52)
((_Options_Is_no_wait( option_set )) ? false : true),
timeout,
&level
);
return _Semaphore_Translate_core_semaphore_return_code(
_Thread_Executing->Wait.return_code );
466f0: 2079 0005 e5e0 moveal 5e5e0 <_Per_CPU_Information+0xc>,%a0
id,
((_Options_Is_no_wait( option_set )) ? false : true),
timeout,
&level
);
return _Semaphore_Translate_core_semaphore_return_code(
466f6: 2f28 0034 movel %a0@(52),%sp@-
466fa: 4eb9 0004 682e jsr 4682e <_Semaphore_Translate_core_semaphore_return_code>
46700: 588f addql #4,%sp
break;
}
return RTEMS_INVALID_ID;
}
46702: 4cee 001c ffec moveml %fp@(-20),%d2-%d4
46708: 4e5e unlk %fp
4670a: 4e75 rts
/* disabled when you get here */
executing = _Thread_Executing;
executing->Wait.return_code = CORE_SEMAPHORE_STATUS_SUCCESSFUL;
if ( the_semaphore->count != 0 ) {
the_semaphore->count -= 1;
4670c: 5381 subql #1,%d1
4670e: 2341 005c movel %d1,%a1@(92)
_ISR_Enable( *level_p );
46712: 202e fff8 movel %fp@(-8),%d0
46716: 46c0 movew %d0,%sr
((_Options_Is_no_wait( option_set )) ? false : true),
timeout,
&level
);
return _Semaphore_Translate_core_semaphore_return_code(
_Thread_Executing->Wait.return_code );
46718: 2079 0005 e5e0 moveal 5e5e0 <_Per_CPU_Information+0xc>,%a0
id,
((_Options_Is_no_wait( option_set )) ? false : true),
timeout,
&level
);
return _Semaphore_Translate_core_semaphore_return_code(
4671e: 2f28 0034 movel %a0@(52),%sp@-
46722: 4eb9 0004 682e jsr 4682e <_Semaphore_Translate_core_semaphore_return_code>
46728: 588f addql #4,%sp
4672a: 60d6 bras 46702 <rtems_semaphore_obtain+0xba>
4672c: 2239 0005 e41c movel 5e41c <_Thread_Dispatch_disable_level>,%d1
46732: 5281 addql #1,%d1
46734: 23c1 0005 e41c movel %d1,5e41c <_Thread_Dispatch_disable_level>
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;
4673a: 7201 moveq #1,%d1
4673c: 2240 moveal %d0,%a1
return;
}
_Thread_Disable_dispatch();
_Thread_queue_Enter_critical_section( &the_semaphore->Wait_queue );
executing->Wait.queue = &the_semaphore->Wait_queue;
4673e: 0680 0000 0014 addil #20,%d0
46744: 2341 0044 movel %d1,%a1@(68)
executing->Wait.id = id;
46748: 2142 0020 movel %d2,%a0@(32)
return;
}
_Thread_Disable_dispatch();
_Thread_queue_Enter_critical_section( &the_semaphore->Wait_queue );
executing->Wait.queue = &the_semaphore->Wait_queue;
4674c: 2140 0044 movel %d0,%a0@(68)
executing->Wait.id = id;
_ISR_Enable( *level_p );
46750: 222e fff8 movel %fp@(-8),%d1
46754: 46c1 movew %d1,%sr
_Thread_queue_Enqueue( &the_semaphore->Wait_queue, timeout );
46756: 4879 0004 90c4 pea 490c4 <_Thread_queue_Timeout>
4675c: 2f04 movel %d4,%sp@-
4675e: 2f00 movel %d0,%sp@-
46760: 4eb9 0004 8cfc jsr 48cfc <_Thread_queue_Enqueue_with_handler>
_Thread_Enable_dispatch();
46766: 4eb9 0004 882e jsr 4882e <_Thread_Enable_dispatch>
_Thread_Executing->Wait.return_code );
4676c: 2079 0005 e5e0 moveal 5e5e0 <_Per_CPU_Information+0xc>,%a0
46772: 4fef 000c lea %sp@(12),%sp
id,
((_Options_Is_no_wait( option_set )) ? false : true),
timeout,
&level
);
return _Semaphore_Translate_core_semaphore_return_code(
46776: 2f28 0034 movel %a0@(52),%sp@-
4677a: 4eb9 0004 682e jsr 4682e <_Semaphore_Translate_core_semaphore_return_code>
46780: 588f addql #4,%sp
46782: 6000 ff7e braw 46702 <rtems_semaphore_obtain+0xba>
...
00058244 <rtems_signal_send>:
rtems_status_code rtems_signal_send(
rtems_id id,
rtems_signal_set signal_set
)
{
58244: 4e56 fffc linkw %fp,#-4
58248: 2f03 movel %d3,%sp@-
5824a: 2f02 movel %d2,%sp@-
5824c: 242e 000c movel %fp@(12),%d2
register Thread_Control *the_thread;
Objects_Locations location;
RTEMS_API_Control *api;
ASR_Information *asr;
if ( !signal_set )
58250: 660e bnes 58260 <rtems_signal_send+0x1c>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
58252: 242e fff4 movel %fp@(-12),%d2
Objects_Locations location;
RTEMS_API_Control *api;
ASR_Information *asr;
if ( !signal_set )
return RTEMS_INVALID_NUMBER;
58256: 700a moveq #10,%d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
58258: 262e fff8 movel %fp@(-8),%d3
5825c: 4e5e unlk %fp
5825e: 4e75 rts
ASR_Information *asr;
if ( !signal_set )
return RTEMS_INVALID_NUMBER;
the_thread = _Thread_Get( id, &location );
58260: 486e fffc pea %fp@(-4)
58264: 2f2e 0008 movel %fp@(8),%sp@-
58268: 4eb9 0005 c418 jsr 5c418 <_Thread_Get>
switch ( location ) {
5826e: 508f addql #8,%sp
58270: 4aae fffc tstl %fp@(-4)
58274: 670e beqs 58284 <rtems_signal_send+0x40>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
58276: 242e fff4 movel %fp@(-12),%d2
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
5827a: 7004 moveq #4,%d0
}
5827c: 262e fff8 movel %fp@(-8),%d3
58280: 4e5e unlk %fp
58282: 4e75 rts
the_thread = _Thread_Get( id, &location );
switch ( location ) {
case OBJECTS_LOCAL:
api = the_thread->API_Extensions[ THREAD_API_RTEMS ];
58284: 2240 moveal %d0,%a1
58286: 2069 0108 moveal %a1@(264),%a0
asr = &api->Signal;
if ( ! _ASR_Is_null_handler( asr->handler ) ) {
5828a: 4aa8 000a tstl %a0@(10)
5828e: 676a beqs 582fa <rtems_signal_send+0xb6>
if ( asr->is_enabled ) {
58290: 4a28 0008 tstb %a0@(8)
58294: 6736 beqs 582cc <rtems_signal_send+0x88>
rtems_signal_set *signal_set
)
{
ISR_Level _level;
_ISR_Disable( _level );
58296: 223c 0000 0700 movel #1792,%d1
5829c: 40c3 movew %sr,%d3
5829e: 8283 orl %d3,%d1
582a0: 46c1 movew %d1,%sr
*signal_set |= signals;
582a2: 85a8 0012 orl %d2,%a0@(18)
_ISR_Enable( _level );
582a6: 46c3 movew %d3,%sr
_ASR_Post_signals( signal_set, &asr->signals_posted );
if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) )
582a8: 4ab9 0007 d490 tstl 7d490 <_Per_CPU_Information+0x8>
582ae: 6708 beqs 582b8 <rtems_signal_send+0x74>
582b0: b0b9 0007 d494 cmpl 7d494 <_Per_CPU_Information+0xc>,%d0
582b6: 6730 beqs 582e8 <rtems_signal_send+0xa4> <== ALWAYS TAKEN
_Context_Switch_necessary = true;
} else {
_ASR_Post_signals( signal_set, &asr->signals_pending );
}
_Thread_Enable_dispatch();
582b8: 4eb9 0005 c3f2 jsr 5c3f2 <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
582be: 4280 clrl %d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
582c0: 242e fff4 movel %fp@(-12),%d2
582c4: 262e fff8 movel %fp@(-8),%d3
582c8: 4e5e unlk %fp
582ca: 4e75 rts
rtems_signal_set *signal_set
)
{
ISR_Level _level;
_ISR_Disable( _level );
582cc: 203c 0000 0700 movel #1792,%d0
582d2: 40c1 movew %sr,%d1
582d4: 8081 orl %d1,%d0
582d6: 46c0 movew %d0,%sr
*signal_set |= signals;
582d8: 85a8 0016 orl %d2,%a0@(22)
_ISR_Enable( _level );
582dc: 46c1 movew %d1,%sr
if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) )
_Context_Switch_necessary = true;
} else {
_ASR_Post_signals( signal_set, &asr->signals_pending );
}
_Thread_Enable_dispatch();
582de: 4eb9 0005 c3f2 jsr 5c3f2 <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
582e4: 4280 clrl %d0
582e6: 60d8 bras 582c0 <rtems_signal_send+0x7c>
if ( ! _ASR_Is_null_handler( asr->handler ) ) {
if ( asr->is_enabled ) {
_ASR_Post_signals( signal_set, &asr->signals_posted );
if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) )
_Context_Switch_necessary = true;
582e8: 7001 moveq #1,%d0
582ea: 13c0 0007 d4a0 moveb %d0,7d4a0 <_Per_CPU_Information+0x18>
} else {
_ASR_Post_signals( signal_set, &asr->signals_pending );
}
_Thread_Enable_dispatch();
582f0: 4eb9 0005 c3f2 jsr 5c3f2 <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
582f6: 4280 clrl %d0
582f8: 60c6 bras 582c0 <rtems_signal_send+0x7c>
}
_Thread_Enable_dispatch();
582fa: 4eb9 0005 c3f2 jsr 5c3f2 <_Thread_Enable_dispatch>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
58300: 242e fff4 movel %fp@(-12),%d2
}
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
_Thread_Enable_dispatch();
return RTEMS_NOT_DEFINED;
58304: 700b moveq #11,%d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
58306: 262e fff8 movel %fp@(-8),%d3
5830a: 4e5e unlk %fp
...
00042232 <rtems_stack_checker_begin_extension>:
* rtems_stack_checker_Begin_extension
*/
void rtems_stack_checker_begin_extension(
Thread_Control *the_thread
)
{
42232: 4e56 0000 linkw %fp,#0
42236: 206e 0008 moveal %fp@(8),%a0
Stack_check_Control *the_pattern;
if ( the_thread->Object.id == 0 ) /* skip system tasks */
4223a: 4aa8 0008 tstl %a0@(8)
4223e: 672c beqs 4226c <rtems_stack_checker_begin_extension+0x3a><== NEVER TAKEN
return;
the_pattern = Stack_check_Get_pattern_area(&the_thread->Start.Initial_stack);
*the_pattern = Stack_check_Pattern;
42240: 2068 00c0 moveal %a0@(192),%a0
42244: 43f9 0005 e7fc lea 5e7fc <Stack_check_Pattern>,%a1
4224a: 2151 0008 movel %a1@,%a0@(8)
4224e: 43f9 0005 e800 lea 5e800 <Stack_check_Pattern+0x4>,%a1
42254: 2151 000c movel %a1@,%a0@(12)
42258: 43f9 0005 e804 lea 5e804 <Stack_check_Pattern+0x8>,%a1
4225e: 2151 0010 movel %a1@,%a0@(16)
42262: 43f9 0005 e808 lea 5e808 <Stack_check_Pattern+0xc>,%a1
42268: 2151 0014 movel %a1@,%a0@(20)
}
4226c: 4e5e unlk %fp <== NOT EXECUTED
0004220a <rtems_stack_checker_create_extension>:
*/
bool rtems_stack_checker_create_extension(
Thread_Control *running __attribute__((unused)),
Thread_Control *the_thread
)
{
4220a: 4e56 0000 linkw %fp,#0
4220e: 206e 000c moveal %fp@(12),%a0
Stack_check_Initialize();
if (the_thread)
42212: 4a88 tstl %a0
42214: 6716 beqs 4222c <rtems_stack_checker_create_extension+0x22><== NEVER TAKEN
Stack_check_Dope_stack(&the_thread->Start.Initial_stack);
42216: 2f28 00bc movel %a0@(188),%sp@-
4221a: 4878 00a5 pea a5 <DBL_MANT_DIG+0x70>
4221e: 2f28 00c0 movel %a0@(192),%sp@-
42222: 4eb9 0004 e7f0 jsr 4e7f0 <memset>
42228: 4fef 000c lea %sp@(12),%sp
return true;
}
4222c: 4e5e unlk %fp
4222e: 7001 moveq #1,%d0 <== NOT EXECUTED
000423a0 <rtems_stack_checker_is_blown>:
/*
* Check if blown
*/
bool rtems_stack_checker_is_blown( void )
{
423a0: 4e56 0000 linkw %fp,#0
Stack_Control *the_stack = &_Thread_Executing->Start.Initial_stack;
423a4: 2079 0005 eb30 moveal 5eb30 <_Per_CPU_Information+0xc>,%a0
)
{
#if defined(__GNUC__)
void *sp = __builtin_frame_address(0);
if ( sp < the_stack->area ) {
423aa: 2028 00c0 movel %a0@(192),%d0
423ae: b08e cmpl %fp,%d0
423b0: 6208 bhis 423ba <rtems_stack_checker_is_blown+0x1a><== NEVER TAKEN
return false;
}
if ( sp > (the_stack->area + the_stack->size) ) {
423b2: d0a8 00bc addl %a0@(188),%d0
423b6: b08e cmpl %fp,%d0
423b8: 6410 bccs 423ca <rtems_stack_checker_is_blown+0x2a><== ALWAYS TAKEN
/*
* Let's report as much as we can.
*/
if ( !sp_ok || !pattern_ok ) {
Stack_check_report_blown_task( _Thread_Executing, pattern_ok );
423ba: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
423be: 2f39 0005 eb30 movel 5eb30 <_Per_CPU_Information+0xc>,%sp@-<== NOT EXECUTED
423c4: 4eb9 0004 2270 jsr 42270 <Stack_check_report_blown_task> <== NOT EXECUTED
/*
* The Stack Pointer and the Pattern Area are OK so return false.
*/
return false;
}
423ca: 4e5e unlk %fp
423cc: 4200 clrb %d0 <== NOT EXECUTED
00042436 <rtems_stack_checker_report_usage>:
void rtems_stack_checker_report_usage( void )
{
42436: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
rtems_stack_checker_report_usage_with_plugin( NULL, printk_plugin );
4243a: 4879 0004 3fac pea 43fac <printk_plugin> <== NOT EXECUTED
42440: 42a7 clrl %sp@- <== NOT EXECUTED
42442: 4eb9 0004 23d0 jsr 423d0 <rtems_stack_checker_report_usage_with_plugin><== NOT EXECUTED
42448: 508f addql #8,%sp <== NOT EXECUTED
}
4244a: 4e5e unlk %fp <== NOT EXECUTED
...
000423d0 <rtems_stack_checker_report_usage_with_plugin>:
void rtems_stack_checker_report_usage_with_plugin(
void *context,
rtems_printk_plugin_t print
)
{
423d0: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
423d4: 2f0a movel %a2,%sp@- <== NOT EXECUTED
423d6: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
423da: 2f02 movel %d2,%sp@- <== NOT EXECUTED
423dc: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
if ( !print )
423e0: 4a8a tstl %a2 <== NOT EXECUTED
423e2: 6746 beqs 4242a <rtems_stack_checker_report_usage_with_plugin+0x5a><== NOT EXECUTED
return;
print_context = context;
print_handler = print;
(*print)( context, "Stack usage by thread\n");
423e4: 4879 0005 beb2 pea 5beb2 <IntUartPollCallbacks.6194+0x136> <== NOT EXECUTED
)
{
if ( !print )
return;
print_context = context;
423ea: 23c2 0005 dff8 movel %d2,5dff8 <print_context> <== NOT EXECUTED
print_handler = print;
(*print)( context, "Stack usage by thread\n");
423f0: 2f02 movel %d2,%sp@- <== NOT EXECUTED
{
if ( !print )
return;
print_context = context;
print_handler = print;
423f2: 23ca 0005 dffc movel %a2,5dffc <print_handler> <== NOT EXECUTED
(*print)( context, "Stack usage by thread\n");
423f8: 4e92 jsr %a2@ <== NOT EXECUTED
(*print)( context,
423fa: 4879 0005 bec9 pea 5bec9 <IntUartPollCallbacks.6194+0x14d> <== NOT EXECUTED
42400: 2f02 movel %d2,%sp@- <== NOT EXECUTED
42402: 4e92 jsr %a2@ <== 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 );
42404: 4879 0004 20e8 pea 420e8 <Stack_check_Dump_threads_usage> <== NOT EXECUTED
4240a: 4eb9 0004 7da4 jsr 47da4 <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);
42410: 4878 ffff pea ffffffff <LESS> <== NOT EXECUTED
42414: 4eb9 0004 20e8 jsr 420e8 <Stack_check_Dump_threads_usage> <== NOT EXECUTED
#endif
print_context = NULL;
print_handler = NULL;
4241a: 4fef 0018 lea %sp@(24),%sp <== NOT EXECUTED
#if (CPU_ALLOCATE_INTERRUPT_STACK == TRUE)
/* dump interrupt stack info if any */
Stack_check_Dump_threads_usage((Thread_Control *) -1);
#endif
print_context = NULL;
4241e: 42b9 0005 dff8 clrl 5dff8 <print_context> <== NOT EXECUTED
print_handler = NULL;
42424: 42b9 0005 dffc clrl 5dffc <print_handler> <== NOT EXECUTED
}
4242a: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
4242e: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
42432: 4e5e unlk %fp <== NOT EXECUTED
00042320 <rtems_stack_checker_switch_extension>:
*/
void rtems_stack_checker_switch_extension(
Thread_Control *running __attribute__((unused)),
Thread_Control *heir __attribute__((unused))
)
{
42320: 4e56 0000 linkw %fp,#0
42324: 2f0a movel %a2,%sp@-
42326: 246e 0008 moveal %fp@(8),%a2
Stack_Control *the_stack = &running->Start.Initial_stack;
void *pattern;
bool sp_ok;
bool pattern_ok = true;
pattern = (void *) Stack_check_Get_pattern_area(the_stack)->pattern;
4232a: 222a 00c0 movel %a2@(192),%d1
4232e: 5081 addql #8,%d1
)
{
#if defined(__GNUC__)
void *sp = __builtin_frame_address(0);
if ( sp < the_stack->area ) {
42330: 202a 00c0 movel %a2@(192),%d0
42334: b08e cmpl %fp,%d0
42336: 622a bhis 42362 <rtems_stack_checker_switch_extension+0x42><== NEVER TAKEN
return false;
}
if ( sp > (the_stack->area + the_stack->size) ) {
42338: d0aa 00bc addl %a2@(188),%d0
4233c: b08e cmpl %fp,%d0
4233e: 6522 bcss 42362 <rtems_stack_checker_switch_extension+0x42><== NEVER TAKEN
/*
* 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,
42340: 4878 0010 pea 10 <INVALID_OPERATION>
42344: 4879 0005 e7fc pea 5e7fc <Stack_check_Pattern>
4234a: 2f01 movel %d1,%sp@-
4234c: 4eb9 0004 e700 jsr 4e700 <memcmp>
42352: 4fef 000c lea %sp@(12),%sp
(void *) Stack_check_Pattern.pattern, PATTERN_SIZE_BYTES));
if ( !sp_ok || !pattern_ok ) {
42356: 4a80 tstl %d0
42358: 6634 bnes 4238e <rtems_stack_checker_switch_extension+0x6e><== NEVER TAKEN
Stack_check_report_blown_task( running, pattern_ok );
}
}
4235a: 246e fffc moveal %fp@(-4),%a2
4235e: 4e5e unlk %fp
42360: 4e75 rts
/*
* 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,
42362: 4878 0010 pea 10 <INVALID_OPERATION> <== NOT EXECUTED
42366: 4879 0005 e7fc pea 5e7fc <Stack_check_Pattern> <== NOT EXECUTED
4236c: 2f01 movel %d1,%sp@- <== NOT EXECUTED
4236e: 4eb9 0004 e700 jsr 4e700 <memcmp> <== NOT EXECUTED
42374: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
42378: 4a80 tstl %d0 <== NOT EXECUTED
4237a: 57c0 seq %d0 <== NOT EXECUTED
4237c: 4480 negl %d0 <== NOT EXECUTED
(void *) Stack_check_Pattern.pattern, PATTERN_SIZE_BYTES));
if ( !sp_ok || !pattern_ok ) {
Stack_check_report_blown_task( running, pattern_ok );
4237e: 0280 0000 00ff andil #255,%d0 <== NOT EXECUTED
42384: 2f00 movel %d0,%sp@- <== NOT EXECUTED
42386: 2f0a movel %a2,%sp@- <== NOT EXECUTED
42388: 4eb9 0004 2270 jsr 42270 <Stack_check_report_blown_task> <== NOT EXECUTED
sp_ok = Stack_check_Frame_pointer_in_range( the_stack );
pattern_ok = (!memcmp( pattern,
(void *) Stack_check_Pattern.pattern, PATTERN_SIZE_BYTES));
if ( !sp_ok || !pattern_ok ) {
4238e: 4200 clrb %d0 <== NOT EXECUTED
Stack_check_report_blown_task( running, pattern_ok );
42390: 0280 0000 00ff andil #255,%d0 <== NOT EXECUTED
42396: 2f00 movel %d0,%sp@- <== NOT EXECUTED
42398: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4239a: 4eb9 0004 2270 jsr 42270 <Stack_check_report_blown_task> <== NOT EXECUTED
0004d458 <rtems_string_to_double>:
#if defined(STRING_TO_INTEGER) && !defined(STRING_TO_POINTER)
,
int base
#endif
)
{
4d458: 4e56 ffe4 linkw %fp,#-28 <== NOT EXECUTED
4d45c: 48d7 1c1c moveml %d2-%d4/%a2-%a4,%sp@ <== NOT EXECUTED
4d460: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
4d464: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
4d468: 266e 0010 moveal %fp@(16),%a3 <== NOT EXECUTED
STRING_TO_INPUT_TYPE result;
char *end;
if ( !n )
4d46c: 4a8a tstl %a2 <== NOT EXECUTED
4d46e: 677a beqs 4d4ea <rtems_string_to_double+0x92> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
errno = 0;
4d470: 49f9 0004 fa34 lea 4fa34 <__errno>,%a4 <== NOT EXECUTED
4d476: 4e94 jsr %a4@ <== NOT EXECUTED
*n = 0;
4d478: 4281 clrl %d1 <== NOT EXECUTED
char *end;
if ( !n )
return RTEMS_INVALID_ADDRESS;
errno = 0;
4d47a: 2040 moveal %d0,%a0 <== NOT EXECUTED
*n = 0;
4d47c: 4280 clrl %d0 <== NOT EXECUTED
char *end;
if ( !n )
return RTEMS_INVALID_ADDRESS;
errno = 0;
4d47e: 4290 clrl %a0@ <== NOT EXECUTED
*n = 0;
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
4d480: 486e fffc pea %fp@(-4) <== NOT EXECUTED
if ( !n )
return RTEMS_INVALID_ADDRESS;
errno = 0;
*n = 0;
4d484: 2480 movel %d0,%a2@ <== NOT EXECUTED
4d486: 2541 0004 movel %d1,%a2@(4) <== NOT EXECUTED
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
4d48a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4d48c: 4eb9 0005 242a jsr 5242a <strtod> <== NOT EXECUTED
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d492: 508f addql #8,%sp <== NOT EXECUTED
errno = 0;
*n = 0;
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
4d494: 2600 movel %d0,%d3 <== NOT EXECUTED
4d496: 2801 movel %d1,%d4 <== NOT EXECUTED
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d498: 4a8b tstl %a3 <== NOT EXECUTED
4d49a: 675a beqs 4d4f6 <rtems_string_to_double+0x9e> <== NOT EXECUTED
*endptr = end;
4d49c: 202e fffc movel %fp@(-4),%d0 <== NOT EXECUTED
4d4a0: 2680 movel %d0,%a3@ <== NOT EXECUTED
/* nothing was converted */
if ( end == s )
4d4a2: b082 cmpl %d2,%d0 <== NOT EXECUTED
4d4a4: 6756 beqs 4d4fc <rtems_string_to_double+0xa4> <== NOT EXECUTED
return RTEMS_INVALID_NUMBER;
#endif
#ifdef STRING_TO_MAX
/* there was an overflow */
if ( (result == STRING_TO_MAX) && (errno == ERANGE))
4d4a6: 4878 ffff pea ffffffff <LESS> <== NOT EXECUTED
4d4aa: 2f3c 7fef ffff movel #2146435071,%sp@- <== NOT EXECUTED
4d4b0: 2f04 movel %d4,%sp@- <== NOT EXECUTED
4d4b2: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4d4b4: 4eb9 0005 d438 jsr 5d438 <__gtdf2> <== NOT EXECUTED
4d4ba: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
4d4be: 4a80 tstl %d0 <== NOT EXECUTED
4d4c0: 6e12 bgts 4d4d4 <rtems_string_to_double+0x7c> <== NOT EXECUTED
#endif
#if defined(STRING_TO_POINTER)
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
4d4c2: 2483 movel %d3,%a2@ <== NOT EXECUTED
#endif
return RTEMS_SUCCESSFUL;
4d4c4: 4280 clrl %d0 <== NOT EXECUTED
#endif
#if defined(STRING_TO_POINTER)
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
4d4c6: 2544 0004 movel %d4,%a2@(4) <== NOT EXECUTED
#endif
return RTEMS_SUCCESSFUL;
}
4d4ca: 4cee 1c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a4 <== NOT EXECUTED
4d4d0: 4e5e unlk %fp <== NOT EXECUTED
4d4d2: 4e75 rts <== NOT EXECUTED
return RTEMS_INVALID_NUMBER;
#endif
#ifdef STRING_TO_MAX
/* there was an overflow */
if ( (result == STRING_TO_MAX) && (errno == ERANGE))
4d4d4: 4e94 jsr %a4@ <== NOT EXECUTED
4d4d6: 7222 moveq #34,%d1 <== NOT EXECUTED
4d4d8: 2040 moveal %d0,%a0 <== NOT EXECUTED
4d4da: b290 cmpl %a0@,%d1 <== NOT EXECUTED
4d4dc: 66e4 bnes 4d4c2 <rtems_string_to_double+0x6a> <== NOT EXECUTED
return RTEMS_INVALID_NUMBER;
4d4de: 700a moveq #10,%d0 <== NOT EXECUTED
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d4e0: 4cee 1c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a4 <== NOT EXECUTED
4d4e6: 4e5e unlk %fp <== NOT EXECUTED
4d4e8: 4e75 rts <== NOT EXECUTED
{
STRING_TO_INPUT_TYPE result;
char *end;
if ( !n )
return RTEMS_INVALID_ADDRESS;
4d4ea: 7009 moveq #9,%d0 <== NOT EXECUTED
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d4ec: 4cee 1c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a4 <== NOT EXECUTED
4d4f2: 4e5e unlk %fp <== NOT EXECUTED
4d4f4: 4e75 rts <== NOT EXECUTED
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d4f6: 202e fffc movel %fp@(-4),%d0 <== NOT EXECUTED
4d4fa: 60a6 bras 4d4a2 <rtems_string_to_double+0x4a> <== NOT EXECUTED
*endptr = end;
/* nothing was converted */
if ( end == s )
return RTEMS_NOT_DEFINED;
4d4fc: 700b moveq #11,%d0 <== NOT EXECUTED
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d4fe: 4cee 1c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a4 <== NOT EXECUTED
4d504: 4e5e unlk %fp <== NOT EXECUTED
0004d508 <rtems_string_to_float>:
#if defined(STRING_TO_INTEGER) && !defined(STRING_TO_POINTER)
,
int base
#endif
)
{
4d508: 4e56 ffe8 linkw %fp,#-24
4d50c: 48d7 1c0c moveml %d2-%d3/%a2-%a4,%sp@
4d510: 242e 0008 movel %fp@(8),%d2
4d514: 246e 000c moveal %fp@(12),%a2
4d518: 266e 0010 moveal %fp@(16),%a3
STRING_TO_INPUT_TYPE result;
char *end;
if ( !n )
4d51c: 4a8a tstl %a2
4d51e: 6768 beqs 4d588 <rtems_string_to_float+0x80>
return RTEMS_INVALID_ADDRESS;
errno = 0;
4d520: 49f9 0004 fa34 lea 4fa34 <__errno>,%a4
4d526: 4e94 jsr %a4@
4d528: 2040 moveal %d0,%a0
4d52a: 4290 clrl %a0@
*n = 0;
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
4d52c: 486e fffc pea %fp@(-4)
if ( !n )
return RTEMS_INVALID_ADDRESS;
errno = 0;
*n = 0;
4d530: 24bc 0000 0000 movel #0,%a2@
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
4d536: 2f02 movel %d2,%sp@-
4d538: 4eb9 0005 244a jsr 5244a <strtof>
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d53e: 508f addql #8,%sp
errno = 0;
*n = 0;
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
4d540: 2600 movel %d0,%d3
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d542: 4a8b tstl %a3
4d544: 674e beqs 4d594 <rtems_string_to_float+0x8c>
*endptr = end;
4d546: 202e fffc movel %fp@(-4),%d0
4d54a: 2680 movel %d0,%a3@
/* nothing was converted */
if ( end == s )
4d54c: b082 cmpl %d2,%d0
4d54e: 674a beqs 4d59a <rtems_string_to_float+0x92>
return RTEMS_INVALID_NUMBER;
#endif
#ifdef STRING_TO_MAX
/* there was an overflow */
if ( (result == STRING_TO_MAX) && (errno == ERANGE))
4d550: 2f3c 7f7f ffff movel #2139095039,%sp@-
4d556: 2f03 movel %d3,%sp@-
4d558: 4eb9 0005 d4c8 jsr 5d4c8 <__gtsf2>
4d55e: 508f addql #8,%sp
4d560: 4a80 tstl %d0
4d562: 6e0e bgts 4d572 <rtems_string_to_float+0x6a> <== NEVER TAKEN
#endif
#if defined(STRING_TO_POINTER)
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
4d564: 2483 movel %d3,%a2@
#endif
return RTEMS_SUCCESSFUL;
4d566: 4280 clrl %d0
}
4d568: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4
4d56e: 4e5e unlk %fp
4d570: 4e75 rts
return RTEMS_INVALID_NUMBER;
#endif
#ifdef STRING_TO_MAX
/* there was an overflow */
if ( (result == STRING_TO_MAX) && (errno == ERANGE))
4d572: 4e94 jsr %a4@ <== NOT EXECUTED
4d574: 7222 moveq #34,%d1 <== NOT EXECUTED
4d576: 2040 moveal %d0,%a0 <== NOT EXECUTED
4d578: b290 cmpl %a0@,%d1 <== NOT EXECUTED
4d57a: 66e8 bnes 4d564 <rtems_string_to_float+0x5c> <== NOT EXECUTED
return RTEMS_INVALID_NUMBER;
4d57c: 700a moveq #10,%d0 <== NOT EXECUTED
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d57e: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4 <== NOT EXECUTED
4d584: 4e5e unlk %fp <== NOT EXECUTED
4d586: 4e75 rts <== NOT EXECUTED
{
STRING_TO_INPUT_TYPE result;
char *end;
if ( !n )
return RTEMS_INVALID_ADDRESS;
4d588: 7009 moveq #9,%d0
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d58a: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4
4d590: 4e5e unlk %fp
4d592: 4e75 rts
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d594: 202e fffc movel %fp@(-4),%d0
4d598: 60b2 bras 4d54c <rtems_string_to_float+0x44>
*endptr = end;
/* nothing was converted */
if ( end == s )
return RTEMS_NOT_DEFINED;
4d59a: 700b moveq #11,%d0
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d59c: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4
4d5a2: 4e5e unlk %fp
...
0004d5a8 <rtems_string_to_int>:
#if defined(STRING_TO_INTEGER) && !defined(STRING_TO_POINTER)
,
int base
#endif
)
{
4d5a8: 4e56 ffe8 linkw %fp,#-24
4d5ac: 48d7 1c0c moveml %d2-%d3/%a2-%a4,%sp@
4d5b0: 242e 0008 movel %fp@(8),%d2
4d5b4: 246e 000c moveal %fp@(12),%a2
4d5b8: 266e 0010 moveal %fp@(16),%a3
STRING_TO_INPUT_TYPE result;
char *end;
if ( !n )
4d5bc: 4a8a tstl %a2
4d5be: 675e beqs 4d61e <rtems_string_to_int+0x76>
return RTEMS_INVALID_ADDRESS;
errno = 0;
4d5c0: 49f9 0004 fa34 lea 4fa34 <__errno>,%a4
4d5c6: 4e94 jsr %a4@
4d5c8: 2040 moveal %d0,%a0
4d5ca: 4290 clrl %a0@
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
#elif defined(STRING_TO_POINTER)
result = STRING_TO_METHOD( s, &end, 16 );
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
4d5cc: 2f2e 0014 movel %fp@(20),%sp@-
4d5d0: 486e fffc pea %fp@(-4)
if ( !n )
return RTEMS_INVALID_ADDRESS;
errno = 0;
*n = 0;
4d5d4: 4292 clrl %a2@
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
#elif defined(STRING_TO_POINTER)
result = STRING_TO_METHOD( s, &end, 16 );
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
4d5d6: 2f02 movel %d2,%sp@-
4d5d8: 4eb9 0005 2600 jsr 52600 <strtol>
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d5de: 4fef 000c lea %sp@(12),%sp
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
#elif defined(STRING_TO_POINTER)
result = STRING_TO_METHOD( s, &end, 16 );
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
4d5e2: 2600 movel %d0,%d3
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d5e4: 4a8b tstl %a3
4d5e6: 6742 beqs 4d62a <rtems_string_to_int+0x82>
*endptr = end;
4d5e8: 202e fffc movel %fp@(-4),%d0
4d5ec: 2680 movel %d0,%a3@
/* nothing was converted */
if ( end == s )
4d5ee: b082 cmpl %d2,%d0
4d5f0: 673e beqs 4d630 <rtems_string_to_int+0x88>
return RTEMS_INVALID_NUMBER;
#endif
#ifdef STRING_TO_MAX
/* there was an overflow */
if ( (result == STRING_TO_MAX) && (errno == ERANGE))
4d5f2: 0c83 7fff ffff cmpil #2147483647,%d3
4d5f8: 670e beqs 4d608 <rtems_string_to_int+0x60>
#endif
#if defined(STRING_TO_POINTER)
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
4d5fa: 2483 movel %d3,%a2@
#endif
return RTEMS_SUCCESSFUL;
4d5fc: 4280 clrl %d0
}
4d5fe: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4
4d604: 4e5e unlk %fp
4d606: 4e75 rts
return RTEMS_INVALID_NUMBER;
#endif
#ifdef STRING_TO_MAX
/* there was an overflow */
if ( (result == STRING_TO_MAX) && (errno == ERANGE))
4d608: 4e94 jsr %a4@
4d60a: 7222 moveq #34,%d1
4d60c: 2040 moveal %d0,%a0
4d60e: b290 cmpl %a0@,%d1
4d610: 66e8 bnes 4d5fa <rtems_string_to_int+0x52> <== NEVER TAKEN
return RTEMS_INVALID_NUMBER;
4d612: 700a moveq #10,%d0
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d614: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4
4d61a: 4e5e unlk %fp
4d61c: 4e75 rts
{
STRING_TO_INPUT_TYPE result;
char *end;
if ( !n )
return RTEMS_INVALID_ADDRESS;
4d61e: 7009 moveq #9,%d0
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d620: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4
4d626: 4e5e unlk %fp
4d628: 4e75 rts
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d62a: 202e fffc movel %fp@(-4),%d0
4d62e: 60be bras 4d5ee <rtems_string_to_int+0x46>
*endptr = end;
/* nothing was converted */
if ( end == s )
return RTEMS_NOT_DEFINED;
4d630: 700b moveq #11,%d0
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d632: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4
4d638: 4e5e unlk %fp <== NOT EXECUTED
0004d6f4 <rtems_string_to_long>:
#if defined(STRING_TO_INTEGER) && !defined(STRING_TO_POINTER)
,
int base
#endif
)
{
4d6f4: 4e56 ffe8 linkw %fp,#-24
4d6f8: 48d7 1c0c moveml %d2-%d3/%a2-%a4,%sp@
4d6fc: 262e 0008 movel %fp@(8),%d3
4d700: 246e 000c moveal %fp@(12),%a2
4d704: 266e 0010 moveal %fp@(16),%a3
STRING_TO_INPUT_TYPE result;
char *end;
if ( !n )
4d708: 4a8a tstl %a2
4d70a: 6766 beqs 4d772 <rtems_string_to_long+0x7e>
return RTEMS_INVALID_ADDRESS;
errno = 0;
4d70c: 49f9 0004 fa34 lea 4fa34 <__errno>,%a4
4d712: 4e94 jsr %a4@
4d714: 2040 moveal %d0,%a0
4d716: 4290 clrl %a0@
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
#elif defined(STRING_TO_POINTER)
result = STRING_TO_METHOD( s, &end, 16 );
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
4d718: 2f2e 0014 movel %fp@(20),%sp@-
4d71c: 486e fffc pea %fp@(-4)
if ( !n )
return RTEMS_INVALID_ADDRESS;
errno = 0;
*n = 0;
4d720: 4292 clrl %a2@
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
#elif defined(STRING_TO_POINTER)
result = STRING_TO_METHOD( s, &end, 16 );
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
4d722: 2f03 movel %d3,%sp@-
4d724: 4eb9 0005 2600 jsr 52600 <strtol>
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d72a: 4fef 000c lea %sp@(12),%sp
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
#elif defined(STRING_TO_POINTER)
result = STRING_TO_METHOD( s, &end, 16 );
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
4d72e: 2400 movel %d0,%d2
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d730: 4a8b tstl %a3
4d732: 674a beqs 4d77e <rtems_string_to_long+0x8a>
*endptr = end;
4d734: 202e fffc movel %fp@(-4),%d0
4d738: 2680 movel %d0,%a3@
/* nothing was converted */
if ( end == s )
4d73a: b083 cmpl %d3,%d0
4d73c: 6746 beqs 4d784 <rtems_string_to_long+0x90>
return RTEMS_INVALID_NUMBER;
#endif
#ifdef STRING_TO_MAX
/* there was an overflow */
if ( (result == STRING_TO_MAX) && (errno == ERANGE))
4d73e: 0c82 7fff ffff cmpil #2147483647,%d2
4d744: 6716 beqs 4d75c <rtems_string_to_long+0x68>
return RTEMS_INVALID_NUMBER;
#endif
#ifdef STRING_TO_MIN
/* there was an underflow */
if ( (result == STRING_TO_MIN) && (errno == ERANGE))
4d746: 0c82 8000 0000 cmpil #-2147483648,%d2
4d74c: 670e beqs 4d75c <rtems_string_to_long+0x68>
#endif
#if defined(STRING_TO_POINTER)
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
4d74e: 2482 movel %d2,%a2@
#endif
return RTEMS_SUCCESSFUL;
4d750: 4280 clrl %d0
}
4d752: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4
4d758: 4e5e unlk %fp
4d75a: 4e75 rts
return RTEMS_INVALID_NUMBER;
#endif
#ifdef STRING_TO_MIN
/* there was an underflow */
if ( (result == STRING_TO_MIN) && (errno == ERANGE))
4d75c: 4e94 jsr %a4@
4d75e: 7222 moveq #34,%d1
4d760: 2040 moveal %d0,%a0
4d762: b290 cmpl %a0@,%d1
4d764: 66e8 bnes 4d74e <rtems_string_to_long+0x5a> <== NEVER TAKEN
return RTEMS_INVALID_NUMBER;
4d766: 700a moveq #10,%d0
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d768: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4
4d76e: 4e5e unlk %fp
4d770: 4e75 rts
{
STRING_TO_INPUT_TYPE result;
char *end;
if ( !n )
return RTEMS_INVALID_ADDRESS;
4d772: 7009 moveq #9,%d0
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d774: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4
4d77a: 4e5e unlk %fp
4d77c: 4e75 rts
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d77e: 202e fffc movel %fp@(-4),%d0
4d782: 60b6 bras 4d73a <rtems_string_to_long+0x46>
*endptr = end;
/* nothing was converted */
if ( end == s )
return RTEMS_NOT_DEFINED;
4d784: 700b moveq #11,%d0
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d786: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4
4d78c: 4e5e unlk %fp <== NOT EXECUTED
0004d63c <rtems_string_to_long_long>:
#if defined(STRING_TO_INTEGER) && !defined(STRING_TO_POINTER)
,
int base
#endif
)
{
4d63c: 4e56 ffe4 linkw %fp,#-28
4d640: 48d7 1c1c moveml %d2-%d4/%a2-%a4,%sp@
4d644: 282e 0008 movel %fp@(8),%d4
4d648: 246e 000c moveal %fp@(12),%a2
4d64c: 266e 0010 moveal %fp@(16),%a3
STRING_TO_INPUT_TYPE result;
char *end;
if ( !n )
4d650: 4a8a tstl %a2
4d652: 6700 0082 beqw 4d6d6 <rtems_string_to_long_long+0x9a>
return RTEMS_INVALID_ADDRESS;
errno = 0;
4d656: 49f9 0004 fa34 lea 4fa34 <__errno>,%a4
4d65c: 4e94 jsr %a4@
4d65e: 2040 moveal %d0,%a0
*n = 0;
4d660: 4280 clrl %d0
4d662: 4281 clrl %d1
char *end;
if ( !n )
return RTEMS_INVALID_ADDRESS;
errno = 0;
4d664: 4290 clrl %a0@
*n = 0;
4d666: 2480 movel %d0,%a2@
4d668: 2541 0004 movel %d1,%a2@(4)
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
#elif defined(STRING_TO_POINTER)
result = STRING_TO_METHOD( s, &end, 16 );
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
4d66c: 2f2e 0014 movel %fp@(20),%sp@-
4d670: 486e fffc pea %fp@(-4)
4d674: 2f04 movel %d4,%sp@-
4d676: 4eb9 0005 2620 jsr 52620 <strtoll>
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d67c: 4fef 000c lea %sp@(12),%sp
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
#elif defined(STRING_TO_POINTER)
result = STRING_TO_METHOD( s, &end, 16 );
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
4d680: 2400 movel %d0,%d2
4d682: 2601 movel %d1,%d3
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d684: 4a8b tstl %a3
4d686: 675a beqs 4d6e2 <rtems_string_to_long_long+0xa6>
*endptr = end;
4d688: 202e fffc movel %fp@(-4),%d0
4d68c: 2680 movel %d0,%a3@
/* nothing was converted */
if ( end == s )
4d68e: b084 cmpl %d4,%d0
4d690: 6756 beqs 4d6e8 <rtems_string_to_long_long+0xac>
return RTEMS_INVALID_NUMBER;
#endif
#ifdef STRING_TO_MAX
/* there was an overflow */
if ( (result == STRING_TO_MAX) && (errno == ERANGE))
4d692: 203c 7fff ffff movel #2147483647,%d0
4d698: 72ff moveq #-1,%d1
4d69a: 9283 subl %d3,%d1
4d69c: 9182 subxl %d2,%d0
4d69e: 6720 beqs 4d6c0 <rtems_string_to_long_long+0x84>
return RTEMS_INVALID_NUMBER;
#endif
#ifdef STRING_TO_MIN
/* there was an underflow */
if ( (result == STRING_TO_MIN) && (errno == ERANGE))
4d6a0: 203c 8000 0000 movel #-2147483648,%d0
4d6a6: 4281 clrl %d1
4d6a8: 9283 subl %d3,%d1
4d6aa: 9182 subxl %d2,%d0
4d6ac: 6712 beqs 4d6c0 <rtems_string_to_long_long+0x84>
#if defined(STRING_TO_POINTER)
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
4d6ae: 4280 clrl %d0
#endif
#if defined(STRING_TO_POINTER)
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
4d6b0: 2482 movel %d2,%a2@
4d6b2: 2543 0004 movel %d3,%a2@(4)
#endif
return RTEMS_SUCCESSFUL;
}
4d6b6: 4cee 1c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a4
4d6bc: 4e5e unlk %fp
4d6be: 4e75 rts
return RTEMS_INVALID_NUMBER;
#endif
#ifdef STRING_TO_MIN
/* there was an underflow */
if ( (result == STRING_TO_MIN) && (errno == ERANGE))
4d6c0: 4e94 jsr %a4@
4d6c2: 7222 moveq #34,%d1
4d6c4: 2040 moveal %d0,%a0
4d6c6: b290 cmpl %a0@,%d1
4d6c8: 66e4 bnes 4d6ae <rtems_string_to_long_long+0x72> <== NEVER TAKEN
return RTEMS_INVALID_NUMBER;
4d6ca: 700a moveq #10,%d0
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d6cc: 4cee 1c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a4
4d6d2: 4e5e unlk %fp
4d6d4: 4e75 rts
{
STRING_TO_INPUT_TYPE result;
char *end;
if ( !n )
return RTEMS_INVALID_ADDRESS;
4d6d6: 7009 moveq #9,%d0
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d6d8: 4cee 1c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a4
4d6de: 4e5e unlk %fp
4d6e0: 4e75 rts
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d6e2: 202e fffc movel %fp@(-4),%d0
4d6e6: 60a6 bras 4d68e <rtems_string_to_long_long+0x52>
*endptr = end;
/* nothing was converted */
if ( end == s )
return RTEMS_NOT_DEFINED;
4d6e8: 700b moveq #11,%d0
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d6ea: 4cee 1c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a4
4d6f0: 4e5e unlk %fp <== NOT EXECUTED
0004d790 <rtems_string_to_pointer>:
#if defined(STRING_TO_INTEGER) && !defined(STRING_TO_POINTER)
,
int base
#endif
)
{
4d790: 4e56 ffe8 linkw %fp,#-24
4d794: 48d7 1c0c moveml %d2-%d3/%a2-%a4,%sp@
4d798: 242e 0008 movel %fp@(8),%d2
4d79c: 246e 000c moveal %fp@(12),%a2
4d7a0: 266e 0010 moveal %fp@(16),%a3
STRING_TO_INPUT_TYPE result;
char *end;
if ( !n )
4d7a4: 4a8a tstl %a2
4d7a6: 675c beqs 4d804 <rtems_string_to_pointer+0x74> <== NEVER TAKEN
return RTEMS_INVALID_ADDRESS;
errno = 0;
4d7a8: 49f9 0004 fa34 lea 4fa34 <__errno>,%a4
4d7ae: 4e94 jsr %a4@
4d7b0: 2040 moveal %d0,%a0
4d7b2: 4290 clrl %a0@
*n = 0;
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
#elif defined(STRING_TO_POINTER)
result = STRING_TO_METHOD( s, &end, 16 );
4d7b4: 4878 0010 pea 10 <INVALID_OPERATION>
4d7b8: 486e fffc pea %fp@(-4)
if ( !n )
return RTEMS_INVALID_ADDRESS;
errno = 0;
*n = 0;
4d7bc: 4292 clrl %a2@
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
#elif defined(STRING_TO_POINTER)
result = STRING_TO_METHOD( s, &end, 16 );
4d7be: 2f02 movel %d2,%sp@-
4d7c0: 4eb9 0005 2a34 jsr 52a34 <strtoul>
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d7c6: 4fef 000c lea %sp@(12),%sp
*n = 0;
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
#elif defined(STRING_TO_POINTER)
result = STRING_TO_METHOD( s, &end, 16 );
4d7ca: 2600 movel %d0,%d3
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d7cc: 4a8b tstl %a3
4d7ce: 6740 beqs 4d810 <rtems_string_to_pointer+0x80> <== NEVER TAKEN
*endptr = end;
4d7d0: 202e fffc movel %fp@(-4),%d0
4d7d4: 2680 movel %d0,%a3@
/* nothing was converted */
if ( end == s )
4d7d6: b082 cmpl %d2,%d0
4d7d8: 673c beqs 4d816 <rtems_string_to_pointer+0x86> <== NEVER TAKEN
return RTEMS_INVALID_NUMBER;
#endif
#ifdef STRING_TO_MAX
/* there was an overflow */
if ( (result == STRING_TO_MAX) && (errno == ERANGE))
4d7da: 70ff moveq #-1,%d0
4d7dc: b083 cmpl %d3,%d0
4d7de: 670e beqs 4d7ee <rtems_string_to_pointer+0x5e> <== NEVER TAKEN
if ( (result == STRING_TO_MIN) && (errno == ERANGE))
return RTEMS_INVALID_NUMBER;
#endif
#if defined(STRING_TO_POINTER)
*n = (STRING_TO_TYPE) (uintptr_t)result;
4d7e0: 2483 movel %d3,%a2@
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
4d7e2: 4280 clrl %d0
}
4d7e4: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4
4d7ea: 4e5e unlk %fp
4d7ec: 4e75 rts
return RTEMS_INVALID_NUMBER;
#endif
#ifdef STRING_TO_MAX
/* there was an overflow */
if ( (result == STRING_TO_MAX) && (errno == ERANGE))
4d7ee: 4e94 jsr %a4@ <== NOT EXECUTED
4d7f0: 7222 moveq #34,%d1 <== NOT EXECUTED
4d7f2: 2040 moveal %d0,%a0 <== NOT EXECUTED
4d7f4: b290 cmpl %a0@,%d1 <== NOT EXECUTED
4d7f6: 66e8 bnes 4d7e0 <rtems_string_to_pointer+0x50> <== NOT EXECUTED
return RTEMS_INVALID_NUMBER;
4d7f8: 700a moveq #10,%d0 <== NOT EXECUTED
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d7fa: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4 <== NOT EXECUTED
4d800: 4e5e unlk %fp <== NOT EXECUTED
4d802: 4e75 rts <== NOT EXECUTED
{
STRING_TO_INPUT_TYPE result;
char *end;
if ( !n )
return RTEMS_INVALID_ADDRESS;
4d804: 7009 moveq #9,%d0
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d806: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4
4d80c: 4e5e unlk %fp
4d80e: 4e75 rts
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d810: 202e fffc movel %fp@(-4),%d0
4d814: 60c0 bras 4d7d6 <rtems_string_to_pointer+0x46>
*endptr = end;
/* nothing was converted */
if ( end == s )
return RTEMS_NOT_DEFINED;
4d816: 700b moveq #11,%d0
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d818: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4
4d81e: 4e5e unlk %fp
...
0004d898 <rtems_string_to_unsigned_int>:
#if defined(STRING_TO_INTEGER) && !defined(STRING_TO_POINTER)
,
int base
#endif
)
{
4d898: 4e56 ffe8 linkw %fp,#-24
4d89c: 48d7 1c0c moveml %d2-%d3/%a2-%a4,%sp@
4d8a0: 242e 0008 movel %fp@(8),%d2
4d8a4: 246e 000c moveal %fp@(12),%a2
4d8a8: 266e 0010 moveal %fp@(16),%a3
STRING_TO_INPUT_TYPE result;
char *end;
if ( !n )
4d8ac: 4a8a tstl %a2
4d8ae: 675c beqs 4d90c <rtems_string_to_unsigned_int+0x74>
return RTEMS_INVALID_ADDRESS;
errno = 0;
4d8b0: 49f9 0004 fa34 lea 4fa34 <__errno>,%a4
4d8b6: 4e94 jsr %a4@
4d8b8: 2040 moveal %d0,%a0
4d8ba: 4290 clrl %a0@
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
#elif defined(STRING_TO_POINTER)
result = STRING_TO_METHOD( s, &end, 16 );
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
4d8bc: 2f2e 0014 movel %fp@(20),%sp@-
4d8c0: 486e fffc pea %fp@(-4)
if ( !n )
return RTEMS_INVALID_ADDRESS;
errno = 0;
*n = 0;
4d8c4: 4292 clrl %a2@
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
#elif defined(STRING_TO_POINTER)
result = STRING_TO_METHOD( s, &end, 16 );
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
4d8c6: 2f02 movel %d2,%sp@-
4d8c8: 4eb9 0005 2a34 jsr 52a34 <strtoul>
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d8ce: 4fef 000c lea %sp@(12),%sp
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
#elif defined(STRING_TO_POINTER)
result = STRING_TO_METHOD( s, &end, 16 );
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
4d8d2: 2600 movel %d0,%d3
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d8d4: 4a8b tstl %a3
4d8d6: 6740 beqs 4d918 <rtems_string_to_unsigned_int+0x80>
*endptr = end;
4d8d8: 202e fffc movel %fp@(-4),%d0
4d8dc: 2680 movel %d0,%a3@
/* nothing was converted */
if ( end == s )
4d8de: b082 cmpl %d2,%d0
4d8e0: 673c beqs 4d91e <rtems_string_to_unsigned_int+0x86>
return RTEMS_INVALID_NUMBER;
#endif
#ifdef STRING_TO_MAX
/* there was an overflow */
if ( (result == STRING_TO_MAX) && (errno == ERANGE))
4d8e2: 70ff moveq #-1,%d0
4d8e4: b083 cmpl %d3,%d0
4d8e6: 670e beqs 4d8f6 <rtems_string_to_unsigned_int+0x5e>
#endif
#if defined(STRING_TO_POINTER)
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
4d8e8: 2483 movel %d3,%a2@
#endif
return RTEMS_SUCCESSFUL;
4d8ea: 4280 clrl %d0
}
4d8ec: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4
4d8f2: 4e5e unlk %fp
4d8f4: 4e75 rts
return RTEMS_INVALID_NUMBER;
#endif
#ifdef STRING_TO_MAX
/* there was an overflow */
if ( (result == STRING_TO_MAX) && (errno == ERANGE))
4d8f6: 4e94 jsr %a4@
4d8f8: 7222 moveq #34,%d1
4d8fa: 2040 moveal %d0,%a0
4d8fc: b290 cmpl %a0@,%d1
4d8fe: 66e8 bnes 4d8e8 <rtems_string_to_unsigned_int+0x50><== NEVER TAKEN
return RTEMS_INVALID_NUMBER;
4d900: 700a moveq #10,%d0
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d902: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4
4d908: 4e5e unlk %fp
4d90a: 4e75 rts
{
STRING_TO_INPUT_TYPE result;
char *end;
if ( !n )
return RTEMS_INVALID_ADDRESS;
4d90c: 7009 moveq #9,%d0
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d90e: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4
4d914: 4e5e unlk %fp
4d916: 4e75 rts
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d918: 202e fffc movel %fp@(-4),%d0
4d91c: 60c0 bras 4d8de <rtems_string_to_unsigned_int+0x46>
*endptr = end;
/* nothing was converted */
if ( end == s )
return RTEMS_NOT_DEFINED;
4d91e: 700b moveq #11,%d0
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d920: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4
4d926: 4e5e unlk %fp
...
0004d9d0 <rtems_string_to_unsigned_long>:
#if defined(STRING_TO_INTEGER) && !defined(STRING_TO_POINTER)
,
int base
#endif
)
{
4d9d0: 4e56 ffe8 linkw %fp,#-24
4d9d4: 48d7 1c0c moveml %d2-%d3/%a2-%a4,%sp@
4d9d8: 242e 0008 movel %fp@(8),%d2
4d9dc: 246e 000c moveal %fp@(12),%a2
4d9e0: 266e 0010 moveal %fp@(16),%a3
STRING_TO_INPUT_TYPE result;
char *end;
if ( !n )
4d9e4: 4a8a tstl %a2
4d9e6: 675c beqs 4da44 <rtems_string_to_unsigned_long+0x74>
return RTEMS_INVALID_ADDRESS;
errno = 0;
4d9e8: 49f9 0004 fa34 lea 4fa34 <__errno>,%a4
4d9ee: 4e94 jsr %a4@
4d9f0: 2040 moveal %d0,%a0
4d9f2: 4290 clrl %a0@
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
#elif defined(STRING_TO_POINTER)
result = STRING_TO_METHOD( s, &end, 16 );
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
4d9f4: 2f2e 0014 movel %fp@(20),%sp@-
4d9f8: 486e fffc pea %fp@(-4)
if ( !n )
return RTEMS_INVALID_ADDRESS;
errno = 0;
*n = 0;
4d9fc: 4292 clrl %a2@
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
#elif defined(STRING_TO_POINTER)
result = STRING_TO_METHOD( s, &end, 16 );
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
4d9fe: 2f02 movel %d2,%sp@-
4da00: 4eb9 0005 2a34 jsr 52a34 <strtoul>
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4da06: 4fef 000c lea %sp@(12),%sp
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
#elif defined(STRING_TO_POINTER)
result = STRING_TO_METHOD( s, &end, 16 );
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
4da0a: 2600 movel %d0,%d3
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4da0c: 4a8b tstl %a3
4da0e: 6740 beqs 4da50 <rtems_string_to_unsigned_long+0x80>
*endptr = end;
4da10: 202e fffc movel %fp@(-4),%d0
4da14: 2680 movel %d0,%a3@
/* nothing was converted */
if ( end == s )
4da16: b082 cmpl %d2,%d0
4da18: 673c beqs 4da56 <rtems_string_to_unsigned_long+0x86>
return RTEMS_INVALID_NUMBER;
#endif
#ifdef STRING_TO_MAX
/* there was an overflow */
if ( (result == STRING_TO_MAX) && (errno == ERANGE))
4da1a: 70ff moveq #-1,%d0
4da1c: b083 cmpl %d3,%d0
4da1e: 670e beqs 4da2e <rtems_string_to_unsigned_long+0x5e>
#endif
#if defined(STRING_TO_POINTER)
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
4da20: 2483 movel %d3,%a2@
#endif
return RTEMS_SUCCESSFUL;
4da22: 4280 clrl %d0
}
4da24: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4
4da2a: 4e5e unlk %fp
4da2c: 4e75 rts
return RTEMS_INVALID_NUMBER;
#endif
#ifdef STRING_TO_MAX
/* there was an overflow */
if ( (result == STRING_TO_MAX) && (errno == ERANGE))
4da2e: 4e94 jsr %a4@
4da30: 7222 moveq #34,%d1
4da32: 2040 moveal %d0,%a0
4da34: b290 cmpl %a0@,%d1
4da36: 66e8 bnes 4da20 <rtems_string_to_unsigned_long+0x50><== NEVER TAKEN
return RTEMS_INVALID_NUMBER;
4da38: 700a moveq #10,%d0
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4da3a: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4
4da40: 4e5e unlk %fp
4da42: 4e75 rts
{
STRING_TO_INPUT_TYPE result;
char *end;
if ( !n )
return RTEMS_INVALID_ADDRESS;
4da44: 7009 moveq #9,%d0
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4da46: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4
4da4c: 4e5e unlk %fp
4da4e: 4e75 rts
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4da50: 202e fffc movel %fp@(-4),%d0
4da54: 60c0 bras 4da16 <rtems_string_to_unsigned_long+0x46>
*endptr = end;
/* nothing was converted */
if ( end == s )
return RTEMS_NOT_DEFINED;
4da56: 700b moveq #11,%d0
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4da58: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4
4da5e: 4e5e unlk %fp
...
0004d92c <rtems_string_to_unsigned_long_long>:
#if defined(STRING_TO_INTEGER) && !defined(STRING_TO_POINTER)
,
int base
#endif
)
{
4d92c: 4e56 ffe4 linkw %fp,#-28
4d930: 48d7 1c1c moveml %d2-%d4/%a2-%a4,%sp@
4d934: 242e 0008 movel %fp@(8),%d2
4d938: 246e 000c moveal %fp@(12),%a2
4d93c: 266e 0010 moveal %fp@(16),%a3
STRING_TO_INPUT_TYPE result;
char *end;
if ( !n )
4d940: 4a8a tstl %a2
4d942: 676e beqs 4d9b2 <rtems_string_to_unsigned_long_long+0x86>
return RTEMS_INVALID_ADDRESS;
errno = 0;
4d944: 49f9 0004 fa34 lea 4fa34 <__errno>,%a4
4d94a: 4e94 jsr %a4@
4d94c: 2040 moveal %d0,%a0
*n = 0;
4d94e: 4280 clrl %d0
4d950: 4281 clrl %d1
char *end;
if ( !n )
return RTEMS_INVALID_ADDRESS;
errno = 0;
4d952: 4290 clrl %a0@
*n = 0;
4d954: 2480 movel %d0,%a2@
4d956: 2541 0004 movel %d1,%a2@(4)
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
#elif defined(STRING_TO_POINTER)
result = STRING_TO_METHOD( s, &end, 16 );
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
4d95a: 2f2e 0014 movel %fp@(20),%sp@-
4d95e: 486e fffc pea %fp@(-4)
4d962: 2f02 movel %d2,%sp@-
4d964: 4eb9 0005 2a54 jsr 52a54 <strtoull>
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d96a: 4fef 000c lea %sp@(12),%sp
#ifdef STRING_TO_FLOAT
result = STRING_TO_METHOD( s, &end );
#elif defined(STRING_TO_POINTER)
result = STRING_TO_METHOD( s, &end, 16 );
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
4d96e: 2600 movel %d0,%d3
4d970: 2801 movel %d1,%d4
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d972: 4a8b tstl %a3
4d974: 6748 beqs 4d9be <rtems_string_to_unsigned_long_long+0x92>
*endptr = end;
4d976: 202e fffc movel %fp@(-4),%d0
4d97a: 2680 movel %d0,%a3@
/* nothing was converted */
if ( end == s )
4d97c: b082 cmpl %d2,%d0
4d97e: 6744 beqs 4d9c4 <rtems_string_to_unsigned_long_long+0x98>
return RTEMS_INVALID_NUMBER;
#endif
#ifdef STRING_TO_MAX
/* there was an overflow */
if ( (result == STRING_TO_MAX) && (errno == ERANGE))
4d980: 70ff moveq #-1,%d0
4d982: 72ff moveq #-1,%d1
4d984: 9284 subl %d4,%d1
4d986: 9183 subxl %d3,%d0
4d988: 6712 beqs 4d99c <rtems_string_to_unsigned_long_long+0x70>
#if defined(STRING_TO_POINTER)
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
4d98a: 4280 clrl %d0
#endif
#if defined(STRING_TO_POINTER)
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
4d98c: 2483 movel %d3,%a2@
4d98e: 2544 0004 movel %d4,%a2@(4)
#endif
return RTEMS_SUCCESSFUL;
}
4d992: 4cee 1c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a4
4d998: 4e5e unlk %fp
4d99a: 4e75 rts
return RTEMS_INVALID_NUMBER;
#endif
#ifdef STRING_TO_MAX
/* there was an overflow */
if ( (result == STRING_TO_MAX) && (errno == ERANGE))
4d99c: 4e94 jsr %a4@
4d99e: 7222 moveq #34,%d1
4d9a0: 2040 moveal %d0,%a0
4d9a2: b290 cmpl %a0@,%d1
4d9a4: 66e4 bnes 4d98a <rtems_string_to_unsigned_long_long+0x5e><== NEVER TAKEN
return RTEMS_INVALID_NUMBER;
4d9a6: 700a moveq #10,%d0
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d9a8: 4cee 1c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a4
4d9ae: 4e5e unlk %fp
4d9b0: 4e75 rts
{
STRING_TO_INPUT_TYPE result;
char *end;
if ( !n )
return RTEMS_INVALID_ADDRESS;
4d9b2: 7009 moveq #9,%d0
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d9b4: 4cee 1c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a4
4d9ba: 4e5e unlk %fp
4d9bc: 4e75 rts
#elif defined(STRING_TO_INTEGER)
result = STRING_TO_METHOD( s, &end, base );
#endif
/* If the user wants the end pointer back, then return it. */
if ( endptr )
4d9be: 202e fffc movel %fp@(-4),%d0
4d9c2: 60b8 bras 4d97c <rtems_string_to_unsigned_long_long+0x50>
*endptr = end;
/* nothing was converted */
if ( end == s )
return RTEMS_NOT_DEFINED;
4d9c4: 700b moveq #11,%d0
*n = (STRING_TO_TYPE) (uintptr_t)result;
#else
*n = (STRING_TO_TYPE) result;
#endif
return RTEMS_SUCCESSFUL;
}
4d9c6: 4cee 1c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a4
4d9cc: 4e5e unlk %fp <== NOT EXECUTED
000425d4 <rtems_tarfs_load>:
int rtems_tarfs_load(
char *mountpoint,
uint8_t *tar_image,
size_t tar_size
)
{
425d4: 4e56 fe44 linkw %fp,#-444
425d8: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
int offset;
unsigned long nblocks;
IMFS_jnode_t *node;
int status;
status = rtems_filesystem_evaluate_path(
425dc: 2f2e 0008 movel %fp@(8),%sp@-
int rtems_tarfs_load(
char *mountpoint,
uint8_t *tar_image,
size_t tar_size
)
{
425e0: 2a2e 000c movel %fp@(12),%d5
int offset;
unsigned long nblocks;
IMFS_jnode_t *node;
int status;
status = rtems_filesystem_evaluate_path(
425e4: 4eb9 0005 1614 jsr 51614 <strlen>
int rtems_tarfs_load(
char *mountpoint,
uint8_t *tar_image,
size_t tar_size
)
{
425ea: 2c2e 0010 movel %fp@(16),%d6
int offset;
unsigned long nblocks;
IMFS_jnode_t *node;
int status;
status = rtems_filesystem_evaluate_path(
425ee: 4297 clrl %sp@
425f0: 486e ffe8 pea %fp@(-24)
425f4: 42a7 clrl %sp@-
425f6: 2f00 movel %d0,%sp@-
425f8: 2f2e 0008 movel %fp@(8),%sp@-
425fc: 4eb9 0004 31b4 jsr 431b4 <rtems_filesystem_evaluate_path>
strlen(mountpoint),
0,
&root_loc,
0
);
if (status != 0)
42602: 4fef 0014 lea %sp@(20),%sp
int offset;
unsigned long nblocks;
IMFS_jnode_t *node;
int status;
status = rtems_filesystem_evaluate_path(
42606: 2d40 fe6c movel %d0,%fp@(-404)
strlen(mountpoint),
0,
&root_loc,
0
);
if (status != 0)
4260a: 6600 0168 bnew 42774 <rtems_tarfs_load+0x1a0>
return -1;
if (root_loc.ops != &IMFS_ops
4260e: 202e fff4 movel %fp@(-12),%d0
42612: 0c80 0006 071a cmpil #395034,%d0
42618: 6600 01b8 bnew 427d2 <rtems_tarfs_load+0x1fe>
4261c: 95ca subal %a2,%a2
hdr_ptr = (char *) &tar_image[offset];
offset += 512;
if (strncmp(&hdr_ptr[257], "ustar ", 7))
break;
strncpy(filename, hdr_ptr, MAX_NAME_FIELD_SIZE);
4261e: 280e movel %fp,%d4
/*
* Create an IMFS node structure pointing to tar image memory.
*/
offset = 0;
while (1) {
if (offset + 512 > tar_size)
42620: 240a movel %a2,%d2
hdr_ptr = (char *) &tar_image[offset];
offset += 512;
if (strncmp(&hdr_ptr[257], "ustar ", 7))
break;
strncpy(filename, hdr_ptr, MAX_NAME_FIELD_SIZE);
42622: 0684 ffff ff70 addil #-144,%d4
* - 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) {
strcpy(full_filename, mountpoint);
42628: 4bee fe70 lea %fp@(-400),%a5
/*
* Create an IMFS node structure pointing to tar image memory.
*/
offset = 0;
while (1) {
if (offset + 512 > tar_size)
4262c: 0682 0000 0200 addil #512,%d2
42632: bc82 cmpl %d2,%d6
42634: 6500 0098 bcsw 426ce <rtems_tarfs_load+0xfa>
/*
* Read a header.
*/
hdr_ptr = (char *) &tar_image[offset];
offset += 512;
if (strncmp(&hdr_ptr[257], "ustar ", 7))
42638: 4878 0007 pea 7 <TRUNCDFSF>
break;
/*
* Read a header.
*/
hdr_ptr = (char *) &tar_image[offset];
4263c: 45f2 5800 lea %a2@(00000000,%d5:l),%a2
offset += 512;
if (strncmp(&hdr_ptr[257], "ustar ", 7))
42640: 4879 0006 0762 pea 60762 <IMFS_ops+0x48>
42646: 486a 0101 pea %a2@(257)
4264a: 4eb9 0005 162c jsr 5162c <strncmp>
42650: 4fef 000c lea %sp@(12),%sp
42654: 4a80 tstl %d0
42656: 6676 bnes 426ce <rtems_tarfs_load+0xfa>
break;
strncpy(filename, hdr_ptr, MAX_NAME_FIELD_SIZE);
42658: 4878 0063 pea 63 <DBL_MANT_DIG+0x2e>
filename[MAX_NAME_FIELD_SIZE] = '\0';
linkflag = hdr_ptr[156];
file_mode = _rtems_octal2ulong(&hdr_ptr[100], 8);
4265c: 47f9 0004 a7e4 lea 4a7e4 <_rtems_octal2ulong>,%a3
hdr_ptr = (char *) &tar_image[offset];
offset += 512;
if (strncmp(&hdr_ptr[257], "ustar ", 7))
break;
strncpy(filename, hdr_ptr, MAX_NAME_FIELD_SIZE);
42662: 2f0a movel %a2,%sp@-
42664: 2f04 movel %d4,%sp@-
42666: 4eb9 0005 171c jsr 5171c <strncpy>
filename[MAX_NAME_FIELD_SIZE] = '\0';
linkflag = hdr_ptr[156];
file_mode = _rtems_octal2ulong(&hdr_ptr[100], 8);
4266c: 4878 0008 pea 8 <DIVIDE_BY_ZERO>
42670: 486a 0064 pea %a2@(100)
offset += 512;
if (strncmp(&hdr_ptr[257], "ustar ", 7))
break;
strncpy(filename, hdr_ptr, MAX_NAME_FIELD_SIZE);
filename[MAX_NAME_FIELD_SIZE] = '\0';
42674: 4200 clrb %d0
42676: 1d40 ffd3 moveb %d0,%fp@(-45)
linkflag = hdr_ptr[156];
4267a: 162a 009c moveb %a2@(156),%d3
file_mode = _rtems_octal2ulong(&hdr_ptr[100], 8);
4267e: 4e93 jsr %a3@
file_size = _rtems_octal2ulong(&hdr_ptr[124], 12);
42680: 4878 000c pea c <OPER1>
strncpy(filename, hdr_ptr, MAX_NAME_FIELD_SIZE);
filename[MAX_NAME_FIELD_SIZE] = '\0';
linkflag = hdr_ptr[156];
file_mode = _rtems_octal2ulong(&hdr_ptr[100], 8);
42684: 2840 moveal %d0,%a4
file_size = _rtems_octal2ulong(&hdr_ptr[124], 12);
42686: 486a 007c pea %a2@(124)
4268a: 4e93 jsr %a3@
hdr_chksum = _rtems_octal2ulong(&hdr_ptr[148], 8);
4268c: 4878 0008 pea 8 <DIVIDE_BY_ZERO>
strncpy(filename, hdr_ptr, MAX_NAME_FIELD_SIZE);
filename[MAX_NAME_FIELD_SIZE] = '\0';
linkflag = hdr_ptr[156];
file_mode = _rtems_octal2ulong(&hdr_ptr[100], 8);
file_size = _rtems_octal2ulong(&hdr_ptr[124], 12);
42690: 2e00 movel %d0,%d7
hdr_chksum = _rtems_octal2ulong(&hdr_ptr[148], 8);
42692: 486a 0094 pea %a2@(148)
42696: 4e93 jsr %a3@
if (_rtems_tar_header_checksum(hdr_ptr) != hdr_chksum)
42698: 4fef 0020 lea %sp@(32),%sp
filename[MAX_NAME_FIELD_SIZE] = '\0';
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);
4269c: 2640 moveal %d0,%a3
if (_rtems_tar_header_checksum(hdr_ptr) != hdr_chksum)
4269e: 2e8a movel %a2,%sp@
426a0: 4eb9 0004 ac8e jsr 4ac8e <_rtems_tar_header_checksum>
426a6: 588f addql #4,%sp
426a8: b7c0 cmpal %d0,%a3
426aa: 6622 bnes 426ce <rtems_tarfs_load+0xfa> <== 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) {
426ac: 7235 moveq #53,%d1
426ae: 0283 0000 00ff andil #255,%d3
426b4: b283 cmpl %d3,%d1
426b6: 676c beqs 42724 <rtems_tarfs_load+0x150>
* IMFS_create_node was ONLY passed a NULL when we created the
* root node. We added a new IMFS_create_root_node() so this
* path no longer existed. The result was simpler code which
* should not have this path.
*/
else if (linkflag == REGTYPE) {
426b8: 7030 moveq #48,%d0
426ba: b083 cmpl %d3,%d0
426bc: 671e beqs 426dc <rtems_tarfs_load+0x108>
);
if (status != 0)
return -1;
if (root_loc.ops != &IMFS_ops
&& root_loc.ops != &fifoIMFS_ops)
426be: 2442 moveal %d2,%a2
/*
* Create an IMFS node structure pointing to tar image memory.
*/
offset = 0;
while (1) {
if (offset + 512 > tar_size)
426c0: 240a movel %a2,%d2
426c2: 0682 0000 0200 addil #512,%d2
426c8: bc82 cmpl %d2,%d6
426ca: 6400 ff6c bccw 42638 <rtems_tarfs_load+0x64>
nblocks = (((file_size) + 511) & ~511) / 512;
offset += 512 * nblocks;
}
}
return status;
}
426ce: 202e fe6c movel %fp@(-404),%d0
426d2: 4cee 3cfc fe44 moveml %fp@(-444),%d2-%d7/%a2-%a5
426d8: 4e5e unlk %fp
426da: 4e75 rts
*/
else if (linkflag == REGTYPE) {
const char *name;
loc = root_loc;
if (IMFS_evaluate_for_make(filename, &loc, &name) == 0) {
426dc: 486e fffc pea %fp@(-4)
426e0: 486e ffd4 pea %fp@(-44)
* should not have this path.
*/
else if (linkflag == REGTYPE) {
const char *name;
loc = root_loc;
426e4: 2d6e ffe8 ffd4 movel %fp@(-24),%fp@(-44)
426ea: 2d6e ffec ffd8 movel %fp@(-20),%fp@(-40)
426f0: 2d6e fff0 ffdc movel %fp@(-16),%fp@(-36)
426f6: 2d6e fff4 ffe0 movel %fp@(-12),%fp@(-32)
426fc: 2d6e fff8 ffe4 movel %fp@(-8),%fp@(-28)
if (IMFS_evaluate_for_make(filename, &loc, &name) == 0) {
42702: 2f04 movel %d4,%sp@-
42704: 4eb9 0004 b5c8 jsr 4b5c8 <IMFS_evaluate_for_make>
4270a: 4fef 000c lea %sp@(12),%sp
4270e: 4a80 tstl %d0
42710: 6776 beqs 42788 <rtems_tarfs_load+0x1b4> <== ALWAYS TAKEN
);
node->info.linearfile.size = file_size;
node->info.linearfile.direct = &tar_image[offset];
}
nblocks = (((file_size) + 511) & ~511) / 512;
42712: 0687 0000 01ff addil #511,%d7 <== NOT EXECUTED
offset += 512 * nblocks;
42718: 0287 ffff fe00 andil #-512,%d7 <== NOT EXECUTED
4271e: d487 addl %d7,%d2 <== NOT EXECUTED
);
if (status != 0)
return -1;
if (root_loc.ops != &IMFS_ops
&& root_loc.ops != &fifoIMFS_ops)
42720: 2442 moveal %d2,%a2
42722: 609c bras 426c0 <rtems_tarfs_load+0xec>
* - 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) {
strcpy(full_filename, mountpoint);
42724: 2f2e 0008 movel %fp@(8),%sp@-
if (full_filename[strlen(full_filename)-1] != '/')
42728: 762f moveq #47,%d3
* - 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) {
strcpy(full_filename, mountpoint);
4272a: 2f0d movel %a5,%sp@-
4272c: 4eb9 0005 1168 jsr 51168 <strcpy>
if (full_filename[strlen(full_filename)-1] != '/')
42732: 2f0d movel %a5,%sp@-
42734: 4eb9 0005 1614 jsr 51614 <strlen>
4273a: 4fef 000c lea %sp@(12),%sp
4273e: 41f6 0800 lea %fp@(00000000,%d0:l),%a0
42742: 1228 fe6f moveb %a0@(-401),%d1
42746: 49c1 extbl %d1
42748: b681 cmpl %d1,%d3
4274a: 6708 beqs 42754 <rtems_tarfs_load+0x180> <== ALWAYS TAKEN
strcat(full_filename, "/");
4274c: 323c 2f00 movew #12032,%d1 <== NOT EXECUTED
42750: 3b81 0800 movew %d1,%a5@(00000000,%d0:l) <== NOT EXECUTED
strcat(full_filename, filename);
42754: 2f04 movel %d4,%sp@-
);
if (status != 0)
return -1;
if (root_loc.ops != &IMFS_ops
&& root_loc.ops != &fifoIMFS_ops)
42756: 2442 moveal %d2,%a2
*/
if (linkflag == DIRTYPE) {
strcpy(full_filename, mountpoint);
if (full_filename[strlen(full_filename)-1] != '/')
strcat(full_filename, "/");
strcat(full_filename, filename);
42758: 2f0d movel %a5,%sp@-
4275a: 4eb9 0005 1050 jsr 51050 <strcat>
mkdir(full_filename, S_IRWXU | S_IRWXG | S_IRWXO);
42760: 4878 01ff pea 1ff <DBL_MANT_DIG+0x1ca>
42764: 2f0d movel %a5,%sp@-
42766: 4eb9 0004 3b50 jsr 43b50 <mkdir>
4276c: 4fef 0010 lea %sp@(16),%sp
42770: 6000 ff4e braw 426c0 <rtems_tarfs_load+0xec>
0,
&root_loc,
0
);
if (status != 0)
return -1;
42774: 76ff moveq #-1,%d3 <== NOT EXECUTED
42776: 2d43 fe6c movel %d3,%fp@(-404) <== NOT EXECUTED
nblocks = (((file_size) + 511) & ~511) / 512;
offset += 512 * nblocks;
}
}
return status;
}
4277a: 202e fe6c movel %fp@(-404),%d0 <== NOT EXECUTED
4277e: 4cee 3cfc fe44 moveml %fp@(-444),%d2-%d7/%a2-%a5 <== NOT EXECUTED
42784: 4e5e unlk %fp <== NOT EXECUTED
42786: 4e75 rts <== NOT EXECUTED
loc = root_loc;
if (IMFS_evaluate_for_make(filename, &loc, &name) == 0) {
node = IMFS_create_node(
&loc,
IMFS_LINEAR_FILE, (char *)name,
(file_mode & (S_IRWXU | S_IRWXG | S_IRWXO)) | S_IFREG,
42788: 200c movel %a4,%d0
4278a: 0280 0000 01ff andil #511,%d0
else if (linkflag == REGTYPE) {
const char *name;
loc = root_loc;
if (IMFS_evaluate_for_make(filename, &loc, &name) == 0) {
node = IMFS_create_node(
42790: 42a7 clrl %sp@-
42792: 08c0 000f bset #15,%d0
42796: 2f00 movel %d0,%sp@-
42798: 2f2e fffc movel %fp@(-4),%sp@-
4279c: 4878 0006 pea 6 <EXTENDSFDF>
427a0: 486e ffd4 pea %fp@(-44)
427a4: 4eb9 0004 ae60 jsr 4ae60 <IMFS_create_node>
IMFS_LINEAR_FILE, (char *)name,
(file_mode & (S_IRWXU | S_IRWXG | S_IRWXO)) | S_IFREG,
NULL
);
node->info.linearfile.size = file_size;
node->info.linearfile.direct = &tar_image[offset];
427aa: 4fef 0014 lea %sp@(20),%sp
427ae: 2205 movel %d5,%d1
else if (linkflag == REGTYPE) {
const char *name;
loc = root_loc;
if (IMFS_evaluate_for_make(filename, &loc, &name) == 0) {
node = IMFS_create_node(
427b0: 2040 moveal %d0,%a0
IMFS_LINEAR_FILE, (char *)name,
(file_mode & (S_IRWXU | S_IRWXG | S_IRWXO)) | S_IFREG,
NULL
);
node->info.linearfile.size = file_size;
node->info.linearfile.direct = &tar_image[offset];
427b2: d282 addl %d2,%d1
&loc,
IMFS_LINEAR_FILE, (char *)name,
(file_mode & (S_IRWXU | S_IRWXG | S_IRWXO)) | S_IFREG,
NULL
);
node->info.linearfile.size = file_size;
427b4: 2147 0050 movel %d7,%a0@(80)
node->info.linearfile.direct = &tar_image[offset];
}
nblocks = (((file_size) + 511) & ~511) / 512;
427b8: 0687 0000 01ff addil #511,%d7
offset += 512 * nblocks;
427be: 0287 ffff fe00 andil #-512,%d7
IMFS_LINEAR_FILE, (char *)name,
(file_mode & (S_IRWXU | S_IRWXG | S_IRWXO)) | S_IFREG,
NULL
);
node->info.linearfile.size = file_size;
node->info.linearfile.direct = &tar_image[offset];
427c4: 2141 0054 movel %d1,%a0@(84)
}
nblocks = (((file_size) + 511) & ~511) / 512;
offset += 512 * nblocks;
427c8: d487 addl %d7,%d2
&loc,
IMFS_LINEAR_FILE, (char *)name,
(file_mode & (S_IRWXU | S_IRWXG | S_IRWXO)) | S_IFREG,
NULL
);
node->info.linearfile.size = file_size;
427ca: 42a8 004c clrl %a0@(76)
427ce: 6000 ff50 braw 42720 <rtems_tarfs_load+0x14c>
);
if (status != 0)
return -1;
if (root_loc.ops != &IMFS_ops
&& root_loc.ops != &fifoIMFS_ops)
427d2: 0c80 0006 0efc cmpil #397052,%d0 <== NOT EXECUTED
427d8: 6700 fe42 beqw 4261c <rtems_tarfs_load+0x48> <== NOT EXECUTED
return -1;
427dc: 70ff moveq #-1,%d0 <== NOT EXECUTED
427de: 2d40 fe6c movel %d0,%fp@(-404) <== NOT EXECUTED
nblocks = (((file_size) + 511) & ~511) / 512;
offset += 512 * nblocks;
}
}
return status;
}
427e2: 202e fe6c movel %fp@(-404),%d0 <== NOT EXECUTED
427e6: 4cee 3cfc fe44 moveml %fp@(-444),%d2-%d7/%a2-%a5 <== NOT EXECUTED
427ec: 4e5e unlk %fp <== NOT EXECUTED
0004d5ac <rtems_task_mode>:
rtems_status_code rtems_task_mode(
rtems_mode mode_set,
rtems_mode mask,
rtems_mode *previous_mode_set
)
{
4d5ac: 4e56 ffe4 linkw %fp,#-28
4d5b0: 48d7 1c3c moveml %d2-%d5/%a2-%a4,%sp@
4d5b4: 2a2e 0008 movel %fp@(8),%d5
4d5b8: 242e 000c movel %fp@(12),%d2
4d5bc: 286e 0010 moveal %fp@(16),%a4
ASR_Information *asr;
bool is_asr_enabled = false;
bool needs_asr_dispatching = false;
rtems_mode old_mode;
if ( !previous_mode_set )
4d5c0: 4a8c tstl %a4
4d5c2: 6700 015c beqw 4d720 <rtems_task_mode+0x174>
return RTEMS_INVALID_ADDRESS;
executing = _Thread_Executing;
4d5c6: 2479 0005 e5e0 moveal 5e5e0 <_Per_CPU_Information+0xc>,%a2
api = executing->API_Extensions[ THREAD_API_RTEMS ];
asr = &api->Signal;
old_mode = (executing->is_preemptible) ? RTEMS_PREEMPT : RTEMS_NO_PREEMPT;
4d5cc: 4a2a 0074 tstb %a2@(116)
4d5d0: 57c3 seq %d3
if ( !previous_mode_set )
return RTEMS_INVALID_ADDRESS;
executing = _Thread_Executing;
api = executing->API_Extensions[ THREAD_API_RTEMS ];
4d5d2: 266a 0108 moveal %a2@(264),%a3
asr = &api->Signal;
old_mode = (executing->is_preemptible) ? RTEMS_PREEMPT : RTEMS_NO_PREEMPT;
4d5d6: 49c3 extbl %d3
4d5d8: 0283 0000 0100 andil #256,%d3
if ( executing->budget_algorithm == THREAD_CPU_BUDGET_ALGORITHM_NONE )
4d5de: 4aaa 007a tstl %a2@(122)
4d5e2: 6600 00cc bnew 4d6b0 <rtems_task_mode+0x104>
old_mode |= RTEMS_NO_TIMESLICE;
else
old_mode |= RTEMS_TIMESLICE;
old_mode |= (asr->is_enabled) ? RTEMS_ASR : RTEMS_NO_ASR;
4d5e6: 4a2b 0008 tstb %a3@(8)
4d5ea: 57c4 seq %d4
old_mode |= _ISR_Get_level();
4d5ec: 4eb9 0004 9d68 jsr 49d68 <_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;
4d5f2: 49c4 extbl %d4
4d5f4: 0284 0000 0400 andil #1024,%d4
4d5fa: 8084 orl %d4,%d0
old_mode |= _ISR_Get_level();
4d5fc: 8083 orl %d3,%d0
4d5fe: 2880 movel %d0,%a4@
/*
* These are generic thread scheduling characteristics.
*/
if ( mask & RTEMS_PREEMPT_MASK )
4d600: 0802 0008 btst #8,%d2
4d604: 670c beqs 4d612 <rtems_task_mode+0x66>
executing->is_preemptible = _Modes_Is_preempt(mode_set) ? true : false;
4d606: 0805 0008 btst #8,%d5
4d60a: 57c0 seq %d0
4d60c: 4480 negl %d0
4d60e: 1540 0074 moveb %d0,%a2@(116)
if ( mask & RTEMS_TIMESLICE_MASK ) {
4d612: 0802 0009 btst #9,%d2
4d616: 6718 beqs 4d630 <rtems_task_mode+0x84>
if ( _Modes_Is_timeslice(mode_set) ) {
4d618: 0805 0009 btst #9,%d5
4d61c: 6700 00f0 beqw 4d70e <rtems_task_mode+0x162>
executing->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE;
4d620: 7001 moveq #1,%d0
executing->cpu_time_budget = _Thread_Ticks_per_timeslice;
4d622: 41f9 0005 e3d4 lea 5e3d4 <_Thread_Ticks_per_timeslice>,%a0
if ( mask & RTEMS_PREEMPT_MASK )
executing->is_preemptible = _Modes_Is_preempt(mode_set) ? true : false;
if ( mask & RTEMS_TIMESLICE_MASK ) {
if ( _Modes_Is_timeslice(mode_set) ) {
executing->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE;
4d628: 2540 007a movel %d0,%a2@(122)
executing->cpu_time_budget = _Thread_Ticks_per_timeslice;
4d62c: 2550 0076 movel %a0@,%a2@(118)
/*
* Set the new interrupt level
*/
if ( mask & RTEMS_INTERRUPT_MASK )
4d630: 7007 moveq #7,%d0
4d632: c082 andl %d2,%d0
4d634: 6712 beqs 4d648 <rtems_task_mode+0x9c>
*/
RTEMS_INLINE_ROUTINE void _Modes_Set_interrupt_level (
Modes_Control mode_set
)
{
_ISR_Set_level( _Modes_Get_interrupt_level( mode_set ) );
4d636: 40c0 movew %sr,%d0
*/
RTEMS_INLINE_ROUTINE ISR_Level _Modes_Get_interrupt_level (
Modes_Control mode_set
)
{
return ( mode_set & RTEMS_INTERRUPT_MASK );
4d638: 7207 moveq #7,%d1
4d63a: c285 andl %d5,%d1
*/
RTEMS_INLINE_ROUTINE void _Modes_Set_interrupt_level (
Modes_Control mode_set
)
{
_ISR_Set_level( _Modes_Get_interrupt_level( mode_set ) );
4d63c: 0280 0000 f8ff andil #63743,%d0
4d642: e189 lsll #8,%d1
4d644: 8081 orl %d1,%d0
4d646: 46c0 movew %d0,%sr
*/
is_asr_enabled = false;
needs_asr_dispatching = false;
if ( mask & RTEMS_ASR_MASK ) {
4d648: 0802 000a btst #10,%d2
4d64c: 6754 beqs 4d6a2 <rtems_task_mode+0xf6>
is_asr_enabled = _Modes_Is_asr_disabled( mode_set ) ? false : true;
if ( is_asr_enabled != asr->is_enabled ) {
4d64e: 4282 clrl %d2
4d650: 142b 0008 moveb %a3@(8),%d2
4d654: 4280 clrl %d0
* Output:
* *previous_mode_set - previous mode set
* always return RTEMS_SUCCESSFUL;
*/
rtems_status_code rtems_task_mode(
4d656: 0805 000a btst #10,%d5
4d65a: 57c1 seq %d1
4d65c: 4481 negl %d1
is_asr_enabled = false;
needs_asr_dispatching = false;
if ( mask & RTEMS_ASR_MASK ) {
is_asr_enabled = _Modes_Is_asr_disabled( mode_set ) ? false : true;
if ( is_asr_enabled != asr->is_enabled ) {
4d65e: 1001 moveb %d1,%d0
4d660: b082 cmpl %d2,%d0
4d662: 673e beqs 4d6a2 <rtems_task_mode+0xf6>
)
{
rtems_signal_set _signals;
ISR_Level _level;
_ISR_Disable( _level );
4d664: 203c 0000 0700 movel #1792,%d0
asr->is_enabled = is_asr_enabled;
4d66a: 1741 0008 moveb %d1,%a3@(8)
4d66e: 40c1 movew %sr,%d1
4d670: 8081 orl %d1,%d0
4d672: 46c0 movew %d0,%sr
_signals = information->signals_pending;
4d674: 202b 0016 movel %a3@(22),%d0
information->signals_pending = information->signals_posted;
4d678: 276b 0012 0016 movel %a3@(18),%a3@(22)
information->signals_posted = _signals;
4d67e: 2740 0012 movel %d0,%a3@(18)
_ISR_Enable( _level );
4d682: 46c1 movew %d1,%sr
/*
* This is specific to the RTEMS API
*/
is_asr_enabled = false;
needs_asr_dispatching = false;
4d684: 4aab 0012 tstl %a3@(18)
4d688: 56c0 sne %d0
needs_asr_dispatching = true;
}
}
}
if ( _System_state_Is_up( _System_state_Get() ) )
4d68a: 7203 moveq #3,%d1
/*
* This is specific to the RTEMS API
*/
is_asr_enabled = false;
needs_asr_dispatching = false;
4d68c: 4480 negl %d0
needs_asr_dispatching = true;
}
}
}
if ( _System_state_Is_up( _System_state_Get() ) )
4d68e: b2b9 0005 e588 cmpl 5e588 <_System_state_Current>,%d1
4d694: 6744 beqs 4d6da <rtems_task_mode+0x12e> <== ALWAYS TAKEN
if ( _Thread_Evaluate_mode() || needs_asr_dispatching )
_Thread_Dispatch();
return RTEMS_SUCCESSFUL;
4d696: 4280 clrl %d0
}
4d698: 4cee 1c3c ffe4 moveml %fp@(-28),%d2-%d5/%a2-%a4
4d69e: 4e5e unlk %fp
4d6a0: 4e75 rts
needs_asr_dispatching = true;
}
}
}
if ( _System_state_Is_up( _System_state_Get() ) )
4d6a2: 7203 moveq #3,%d1
/*
* This is specific to the RTEMS API
*/
is_asr_enabled = false;
needs_asr_dispatching = false;
4d6a4: 4200 clrb %d0
needs_asr_dispatching = true;
}
}
}
if ( _System_state_Is_up( _System_state_Get() ) )
4d6a6: b2b9 0005 e588 cmpl 5e588 <_System_state_Current>,%d1
4d6ac: 66e8 bnes 4d696 <rtems_task_mode+0xea> <== NEVER TAKEN
4d6ae: 602a bras 4d6da <rtems_task_mode+0x12e>
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;
4d6b0: 4a2b 0008 tstb %a3@(8)
4d6b4: 57c4 seq %d4
old_mode |= _ISR_Get_level();
4d6b6: 4eb9 0004 9d68 jsr 49d68 <_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;
4d6bc: 49c4 extbl %d4
4d6be: 0284 0000 0400 andil #1024,%d4
old_mode = (executing->is_preemptible) ? RTEMS_PREEMPT : RTEMS_NO_PREEMPT;
if ( executing->budget_algorithm == THREAD_CPU_BUDGET_ALGORITHM_NONE )
old_mode |= RTEMS_NO_TIMESLICE;
else
old_mode |= RTEMS_TIMESLICE;
4d6c4: 08c3 0009 bset #9,%d3
old_mode |= (asr->is_enabled) ? RTEMS_ASR : RTEMS_NO_ASR;
4d6c8: 8084 orl %d4,%d0
old_mode |= _ISR_Get_level();
4d6ca: 8083 orl %d3,%d0
4d6cc: 2880 movel %d0,%a4@
/*
* These are generic thread scheduling characteristics.
*/
if ( mask & RTEMS_PREEMPT_MASK )
4d6ce: 0802 0008 btst #8,%d2
4d6d2: 6700 ff3e beqw 4d612 <rtems_task_mode+0x66>
4d6d6: 6000 ff2e braw 4d606 <rtems_task_mode+0x5a>
*/
RTEMS_INLINE_ROUTINE bool _Thread_Evaluate_mode( void )
{
Thread_Control *executing;
executing = _Thread_Executing;
4d6da: 2079 0005 e5e0 moveal 5e5e0 <_Per_CPU_Information+0xc>,%a0
if ( !_States_Is_ready( executing->current_state ) ||
4d6e0: 4aa8 0010 tstl %a0@(16)
4d6e4: 660e bnes 4d6f4 <rtems_task_mode+0x148> <== NEVER TAKEN
4d6e6: b1f9 0005 e5e4 cmpal 5e5e4 <_Per_CPU_Information+0x10>,%a0
4d6ec: 673e beqs 4d72c <rtems_task_mode+0x180>
( !_Thread_Is_heir( executing ) && executing->is_preemptible ) ) {
4d6ee: 4a28 0074 tstb %a0@(116)
4d6f2: 6738 beqs 4d72c <rtems_task_mode+0x180> <== NEVER TAKEN
_Context_Switch_necessary = true;
4d6f4: 7001 moveq #1,%d0
4d6f6: 13c0 0005 e5ec moveb %d0,5e5ec <_Per_CPU_Information+0x18>
}
}
if ( _System_state_Is_up( _System_state_Get() ) )
if ( _Thread_Evaluate_mode() || needs_asr_dispatching )
_Thread_Dispatch();
4d6fc: 4eb9 0004 86c4 jsr 486c4 <_Thread_Dispatch>
return RTEMS_SUCCESSFUL;
4d702: 4280 clrl %d0
}
4d704: 4cee 1c3c ffe4 moveml %fp@(-28),%d2-%d5/%a2-%a4
4d70a: 4e5e unlk %fp
4d70c: 4e75 rts
/*
* Set the new interrupt level
*/
if ( mask & RTEMS_INTERRUPT_MASK )
4d70e: 7007 moveq #7,%d0
4d710: c082 andl %d2,%d0
if ( mask & RTEMS_TIMESLICE_MASK ) {
if ( _Modes_Is_timeslice(mode_set) ) {
executing->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE;
executing->cpu_time_budget = _Thread_Ticks_per_timeslice;
} else
executing->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_NONE;
4d712: 42aa 007a clrl %a2@(122)
/*
* Set the new interrupt level
*/
if ( mask & RTEMS_INTERRUPT_MASK )
4d716: 4a80 tstl %d0
4d718: 6700 ff2e beqw 4d648 <rtems_task_mode+0x9c>
4d71c: 6000 ff18 braw 4d636 <rtems_task_mode+0x8a>
bool is_asr_enabled = false;
bool needs_asr_dispatching = false;
rtems_mode old_mode;
if ( !previous_mode_set )
return RTEMS_INVALID_ADDRESS;
4d720: 7009 moveq #9,%d0
if ( _System_state_Is_up( _System_state_Get() ) )
if ( _Thread_Evaluate_mode() || needs_asr_dispatching )
_Thread_Dispatch();
return RTEMS_SUCCESSFUL;
}
4d722: 4cee 1c3c ffe4 moveml %fp@(-28),%d2-%d5/%a2-%a4
4d728: 4e5e unlk %fp
4d72a: 4e75 rts
}
}
}
if ( _System_state_Is_up( _System_state_Get() ) )
if ( _Thread_Evaluate_mode() || needs_asr_dispatching )
4d72c: 4a00 tstb %d0
4d72e: 6700 ff66 beqw 4d696 <rtems_task_mode+0xea>
_Thread_Dispatch();
4d732: 4eb9 0004 86c4 jsr 486c4 <_Thread_Dispatch>
return RTEMS_SUCCESSFUL;
4d738: 4280 clrl %d0
4d73a: 60c8 bras 4d704 <rtems_task_mode+0x158>
0004af0c <rtems_task_set_priority>:
rtems_status_code rtems_task_set_priority(
rtems_id id,
rtems_task_priority new_priority,
rtems_task_priority *old_priority
)
{
4af0c: 4e56 fffc linkw %fp,#-4
4af10: 2f0a movel %a2,%sp@-
4af12: 246e 0010 moveal %fp@(16),%a2
4af16: 2f02 movel %d2,%sp@-
4af18: 242e 000c movel %fp@(12),%d2
register Thread_Control *the_thread;
Objects_Locations location;
if ( new_priority != RTEMS_CURRENT_PRIORITY &&
4af1c: 670c beqs 4af2a <rtems_task_set_priority+0x1e>
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 ) );
4af1e: 4280 clrl %d0
4af20: 1039 0006 11b2 moveb 611b2 <rtems_maximum_priority>,%d0
*/
RTEMS_INLINE_ROUTINE bool _RTEMS_tasks_Priority_is_valid (
rtems_task_priority the_priority
)
{
return ( ( the_priority >= RTEMS_MINIMUM_PRIORITY ) &&
4af26: b082 cmpl %d2,%d0
4af28: 6566 bcss 4af90 <rtems_task_set_priority+0x84>
!_RTEMS_tasks_Priority_is_valid( new_priority ) )
return RTEMS_INVALID_PRIORITY;
if ( !old_priority )
4af2a: 4a8a tstl %a2
4af2c: 6770 beqs 4af9e <rtems_task_set_priority+0x92>
return RTEMS_INVALID_ADDRESS;
the_thread = _Thread_Get( id, &location );
4af2e: 486e fffc pea %fp@(-4)
4af32: 2f2e 0008 movel %fp@(8),%sp@-
4af36: 4eb9 0004 ceb4 jsr 4ceb4 <_Thread_Get>
switch ( location ) {
4af3c: 508f addql #8,%sp
4af3e: 4aae fffc tstl %fp@(-4)
4af42: 663e bnes 4af82 <rtems_task_set_priority+0x76>
case OBJECTS_LOCAL:
/* XXX need helper to "convert" from core priority */
*old_priority = the_thread->current_priority;
4af44: 2040 moveal %d0,%a0
4af46: 24a8 0014 movel %a0@(20),%a2@
if ( new_priority != RTEMS_CURRENT_PRIORITY ) {
4af4a: 4a82 tstl %d2
4af4c: 6720 beqs 4af6e <rtems_task_set_priority+0x62>
the_thread->real_priority = new_priority;
4af4e: 2142 0018 movel %d2,%a0@(24)
if ( the_thread->resource_count == 0 ||
4af52: 4aa8 001c tstl %a0@(28)
4af56: 6706 beqs 4af5e <rtems_task_set_priority+0x52>
4af58: b4a8 0014 cmpl %a0@(20),%d2
4af5c: 6410 bccs 4af6e <rtems_task_set_priority+0x62> <== ALWAYS TAKEN
the_thread->current_priority > new_priority )
_Thread_Change_priority( the_thread, new_priority, false );
4af5e: 42a7 clrl %sp@-
4af60: 2f02 movel %d2,%sp@-
4af62: 2f00 movel %d0,%sp@-
4af64: 4eb9 0004 c95c jsr 4c95c <_Thread_Change_priority>
4af6a: 4fef 000c lea %sp@(12),%sp
}
_Thread_Enable_dispatch();
4af6e: 4eb9 0004 ce8e jsr 4ce8e <_Thread_Enable_dispatch>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
4af74: 242e fff4 movel %fp@(-12),%d2
if ( the_thread->resource_count == 0 ||
the_thread->current_priority > new_priority )
_Thread_Change_priority( the_thread, new_priority, false );
}
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
4af78: 4280 clrl %d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
4af7a: 246e fff8 moveal %fp@(-8),%a2
4af7e: 4e5e unlk %fp
4af80: 4e75 rts
4af82: 242e fff4 movel %fp@(-12),%d2
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4af86: 7004 moveq #4,%d0
}
4af88: 246e fff8 moveal %fp@(-8),%a2
4af8c: 4e5e unlk %fp
4af8e: 4e75 rts
4af90: 242e fff4 movel %fp@(-12),%d2
register Thread_Control *the_thread;
Objects_Locations location;
if ( new_priority != RTEMS_CURRENT_PRIORITY &&
!_RTEMS_tasks_Priority_is_valid( new_priority ) )
return RTEMS_INVALID_PRIORITY;
4af94: 7013 moveq #19,%d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
4af96: 246e fff8 moveal %fp@(-8),%a2
4af9a: 4e5e unlk %fp
4af9c: 4e75 rts
4af9e: 242e fff4 movel %fp@(-12),%d2
if ( new_priority != RTEMS_CURRENT_PRIORITY &&
!_RTEMS_tasks_Priority_is_valid( new_priority ) )
return RTEMS_INVALID_PRIORITY;
if ( !old_priority )
return RTEMS_INVALID_ADDRESS;
4afa2: 7009 moveq #9,%d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
4afa4: 246e fff8 moveal %fp@(-8),%a2
4afa8: 4e5e unlk %fp <== NOT EXECUTED
00046af4 <rtems_task_start>:
rtems_status_code rtems_task_start(
rtems_id id,
rtems_task_entry entry_point,
rtems_task_argument argument
)
{
46af4: 4e56 fffc linkw %fp,#-4
46af8: 2f02 movel %d2,%sp@-
46afa: 242e 000c movel %fp@(12),%d2
register Thread_Control *the_thread;
Objects_Locations location;
if ( entry_point == NULL )
46afe: 674a beqs 46b4a <rtems_task_start+0x56> <== NEVER TAKEN
return RTEMS_INVALID_ADDRESS;
the_thread = _Thread_Get( id, &location );
46b00: 486e fffc pea %fp@(-4)
46b04: 2f2e 0008 movel %fp@(8),%sp@-
46b08: 4eb9 0004 8854 jsr 48854 <_Thread_Get>
switch ( location ) {
46b0e: 508f addql #8,%sp
46b10: 4aae fffc tstl %fp@(-4)
46b14: 662a bnes 46b40 <rtems_task_start+0x4c>
case OBJECTS_LOCAL:
if ( _Thread_Start(
46b16: 2f2e 0010 movel %fp@(16),%sp@-
46b1a: 42a7 clrl %sp@-
46b1c: 2f02 movel %d2,%sp@-
46b1e: 42a7 clrl %sp@-
46b20: 2f00 movel %d0,%sp@-
46b22: 4eb9 0004 93e4 jsr 493e4 <_Thread_Start>
46b28: 4fef 0014 lea %sp@(20),%sp
46b2c: 4a00 tstb %d0
46b2e: 6624 bnes 46b54 <rtems_task_start+0x60>
the_thread, THREAD_START_NUMERIC, entry_point, NULL, argument ) ) {
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
_Thread_Enable_dispatch();
46b30: 4eb9 0004 882e jsr 4882e <_Thread_Enable_dispatch>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
46b36: 242e fff8 movel %fp@(-8),%d2
the_thread, THREAD_START_NUMERIC, entry_point, NULL, argument ) ) {
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
_Thread_Enable_dispatch();
return RTEMS_INCORRECT_STATE;
46b3a: 700e moveq #14,%d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
46b3c: 4e5e unlk %fp
46b3e: 4e75 rts
46b40: 242e fff8 movel %fp@(-8),%d2
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
46b44: 7004 moveq #4,%d0
}
46b46: 4e5e unlk %fp
46b48: 4e75 rts
46b4a: 242e fff8 movel %fp@(-8),%d2
{
register Thread_Control *the_thread;
Objects_Locations location;
if ( entry_point == NULL )
return RTEMS_INVALID_ADDRESS;
46b4e: 7009 moveq #9,%d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
46b50: 4e5e unlk %fp
46b52: 4e75 rts
switch ( location ) {
case OBJECTS_LOCAL:
if ( _Thread_Start(
the_thread, THREAD_START_NUMERIC, entry_point, NULL, argument ) ) {
_Thread_Enable_dispatch();
46b54: 4eb9 0004 882e jsr 4882e <_Thread_Enable_dispatch>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
46b5a: 242e fff8 movel %fp@(-8),%d2
case OBJECTS_LOCAL:
if ( _Thread_Start(
the_thread, THREAD_START_NUMERIC, entry_point, NULL, argument ) ) {
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
46b5e: 4280 clrl %d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
46b60: 4e5e unlk %fp <== NOT EXECUTED
00047788 <rtems_task_variable_delete>:
rtems_status_code rtems_task_variable_delete(
rtems_id tid,
void **ptr
)
{
47788: 4e56 fffc linkw %fp,#-4
4778c: 2f02 movel %d2,%sp@-
4778e: 242e 000c movel %fp@(12),%d2
Thread_Control *the_thread;
Objects_Locations location;
rtems_task_variable_t *tvp, *prev;
if ( !ptr )
47792: 6772 beqs 47806 <rtems_task_variable_delete+0x7e>
return RTEMS_INVALID_ADDRESS;
prev = NULL;
the_thread = _Thread_Get (tid, &location);
47794: 486e fffc pea %fp@(-4)
47798: 2f2e 0008 movel %fp@(8),%sp@-
4779c: 4eb9 0004 9524 jsr 49524 <_Thread_Get>
switch (location) {
477a2: 508f addql #8,%sp
477a4: 4aae fffc tstl %fp@(-4)
477a8: 6634 bnes 477de <rtems_task_variable_delete+0x56>
case OBJECTS_LOCAL:
tvp = the_thread->task_variables;
477aa: 2040 moveal %d0,%a0
477ac: 2268 0114 moveal %a0@(276),%a1
while (tvp) {
477b0: 4a89 tstl %a1
477b2: 671a beqs 477ce <rtems_task_variable_delete+0x46>
if (tvp->ptr == ptr) {
477b4: b4a9 0004 cmpl %a1@(4),%d2
477b8: 6756 beqs 47810 <rtems_task_variable_delete+0x88><== NEVER TAKEN
_RTEMS_Tasks_Invoke_task_variable_dtor( the_thread, tvp );
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
prev = tvp;
tvp = (rtems_task_variable_t *)tvp->next;
477ba: 2051 moveal %a1@,%a0
the_thread = _Thread_Get (tid, &location);
switch (location) {
case OBJECTS_LOCAL:
tvp = the_thread->task_variables;
while (tvp) {
477bc: 4a88 tstl %a0
477be: 670e beqs 477ce <rtems_task_variable_delete+0x46><== NEVER TAKEN
if (tvp->ptr == ptr) {
477c0: b4a8 0004 cmpl %a0@(4),%d2
477c4: 6722 beqs 477e8 <rtems_task_variable_delete+0x60>
477c6: 2248 moveal %a0,%a1
_RTEMS_Tasks_Invoke_task_variable_dtor( the_thread, tvp );
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
prev = tvp;
tvp = (rtems_task_variable_t *)tvp->next;
477c8: 2051 moveal %a1@,%a0
the_thread = _Thread_Get (tid, &location);
switch (location) {
case OBJECTS_LOCAL:
tvp = the_thread->task_variables;
while (tvp) {
477ca: 4a88 tstl %a0
477cc: 66f2 bnes 477c0 <rtems_task_variable_delete+0x38><== ALWAYS TAKEN
return RTEMS_SUCCESSFUL;
}
prev = tvp;
tvp = (rtems_task_variable_t *)tvp->next;
}
_Thread_Enable_dispatch();
477ce: 4eb9 0004 94fe jsr 494fe <_Thread_Enable_dispatch>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
477d4: 242e fff8 movel %fp@(-8),%d2
}
prev = tvp;
tvp = (rtems_task_variable_t *)tvp->next;
}
_Thread_Enable_dispatch();
return RTEMS_INVALID_ADDRESS;
477d8: 7009 moveq #9,%d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
477da: 4e5e unlk %fp
477dc: 4e75 rts
477de: 242e fff8 movel %fp@(-8),%d2
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
477e2: 7004 moveq #4,%d0
}
477e4: 4e5e unlk %fp
477e6: 4e75 rts
case OBJECTS_LOCAL:
tvp = the_thread->task_variables;
while (tvp) {
if (tvp->ptr == ptr) {
if (prev)
prev->next = tvp->next;
477e8: 2290 movel %a0@,%a1@
else
the_thread->task_variables = (rtems_task_variable_t *)tvp->next;
_RTEMS_Tasks_Invoke_task_variable_dtor( the_thread, tvp );
477ea: 2f08 movel %a0,%sp@-
477ec: 2f00 movel %d0,%sp@-
477ee: 4eb9 0004 78bc jsr 478bc <_RTEMS_Tasks_Invoke_task_variable_dtor>
_Thread_Enable_dispatch();
477f4: 4eb9 0004 94fe jsr 494fe <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
477fa: 508f addql #8,%sp
477fc: 4280 clrl %d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
477fe: 242e fff8 movel %fp@(-8),%d2
47802: 4e5e unlk %fp
47804: 4e75 rts
47806: 242e fff8 movel %fp@(-8),%d2
Thread_Control *the_thread;
Objects_Locations location;
rtems_task_variable_t *tvp, *prev;
if ( !ptr )
return RTEMS_INVALID_ADDRESS;
4780a: 7009 moveq #9,%d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
4780c: 4e5e unlk %fp
4780e: 4e75 rts
while (tvp) {
if (tvp->ptr == ptr) {
if (prev)
prev->next = tvp->next;
else
the_thread->task_variables = (rtems_task_variable_t *)tvp->next;
47810: 2040 moveal %d0,%a0
47812: 2151 0114 movel %a1@,%a0@(276)
47816: 2049 moveal %a1,%a0
_RTEMS_Tasks_Invoke_task_variable_dtor( the_thread, tvp );
47818: 2f08 movel %a0,%sp@-
4781a: 2f00 movel %d0,%sp@-
4781c: 4eb9 0004 78bc jsr 478bc <_RTEMS_Tasks_Invoke_task_variable_dtor>
_Thread_Enable_dispatch();
47822: 4eb9 0004 94fe jsr 494fe <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
47828: 508f addql #8,%sp
4782a: 4280 clrl %d0
4782c: 60d0 bras 477fe <rtems_task_variable_delete+0x76>
...
00047830 <rtems_task_variable_get>:
rtems_status_code rtems_task_variable_get(
rtems_id tid,
void **ptr,
void **result
)
{
47830: 4e56 fffc linkw %fp,#-4
47834: 2f0a movel %a2,%sp@-
47836: 246e 0010 moveal %fp@(16),%a2
4783a: 2f02 movel %d2,%sp@-
4783c: 242e 000c movel %fp@(12),%d2
Thread_Control *the_thread;
Objects_Locations location;
rtems_task_variable_t *tvp;
if ( !ptr )
47840: 6752 beqs 47894 <rtems_task_variable_get+0x64>
return RTEMS_INVALID_ADDRESS;
if ( !result )
47842: 4a8a tstl %a2
47844: 674e beqs 47894 <rtems_task_variable_get+0x64>
return RTEMS_INVALID_ADDRESS;
the_thread = _Thread_Get (tid, &location);
47846: 486e fffc pea %fp@(-4)
4784a: 2f2e 0008 movel %fp@(8),%sp@-
4784e: 4eb9 0004 9524 jsr 49524 <_Thread_Get>
switch (location) {
47854: 508f addql #8,%sp
47856: 4aae fffc tstl %fp@(-4)
4785a: 662a bnes 47886 <rtems_task_variable_get+0x56>
case OBJECTS_LOCAL:
/*
* Figure out if the variable is in this task's list.
*/
tvp = the_thread->task_variables;
4785c: 2240 moveal %d0,%a1
4785e: 2069 0114 moveal %a1@(276),%a0
while (tvp) {
47862: 4a88 tstl %a0
47864: 670c beqs 47872 <rtems_task_variable_get+0x42>
if (tvp->ptr == ptr) {
47866: b4a8 0004 cmpl %a0@(4),%d2
4786a: 6736 beqs 478a2 <rtems_task_variable_get+0x72>
*/
*result = tvp->tval;
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
tvp = (rtems_task_variable_t *)tvp->next;
4786c: 2050 moveal %a0@,%a0
case OBJECTS_LOCAL:
/*
* Figure out if the variable is in this task's list.
*/
tvp = the_thread->task_variables;
while (tvp) {
4786e: 4a88 tstl %a0
47870: 66f4 bnes 47866 <rtems_task_variable_get+0x36> <== ALWAYS TAKEN
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
tvp = (rtems_task_variable_t *)tvp->next;
}
_Thread_Enable_dispatch();
47872: 4eb9 0004 94fe jsr 494fe <_Thread_Enable_dispatch>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
47878: 242e fff4 movel %fp@(-12),%d2
return RTEMS_SUCCESSFUL;
}
tvp = (rtems_task_variable_t *)tvp->next;
}
_Thread_Enable_dispatch();
return RTEMS_INVALID_ADDRESS;
4787c: 7009 moveq #9,%d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
4787e: 246e fff8 moveal %fp@(-8),%a2
47882: 4e5e unlk %fp
47884: 4e75 rts
47886: 242e fff4 movel %fp@(-12),%d2
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4788a: 7004 moveq #4,%d0
}
4788c: 246e fff8 moveal %fp@(-8),%a2
47890: 4e5e unlk %fp
47892: 4e75 rts
47894: 242e fff4 movel %fp@(-12),%d2
if ( !ptr )
return RTEMS_INVALID_ADDRESS;
if ( !result )
return RTEMS_INVALID_ADDRESS;
47898: 7009 moveq #9,%d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
4789a: 246e fff8 moveal %fp@(-8),%a2
4789e: 4e5e unlk %fp
478a0: 4e75 rts
if (tvp->ptr == ptr) {
/*
* Should this return the current (i.e not the
* saved) value if `tid' is the current task?
*/
*result = tvp->tval;
478a2: 24a8 000c movel %a0@(12),%a2@
_Thread_Enable_dispatch();
478a6: 4eb9 0004 94fe jsr 494fe <_Thread_Enable_dispatch>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
478ac: 242e fff4 movel %fp@(-12),%d2
* Should this return the current (i.e not the
* saved) value if `tid' is the current task?
*/
*result = tvp->tval;
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
478b0: 4280 clrl %d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
478b2: 246e fff8 moveal %fp@(-8),%a2
478b6: 4e5e unlk %fp
...
00045574 <rtems_termios_baud_to_index>:
rtems_termios_baud_t termios_baud
)
{
int baud_index;
switch (termios_baud) {
45574: 7209 moveq #9,%d1
#include <rtems/termiostypes.h>
int rtems_termios_baud_to_index(
rtems_termios_baud_t termios_baud
)
{
45576: 4e56 0000 linkw %fp,#0
4557a: 202e 0008 movel %fp@(8),%d0
int baud_index;
switch (termios_baud) {
4557e: b280 cmpl %d0,%d1
45580: 6700 010a beqw 4568c <rtems_termios_baud_to_index+0x118>
45584: 6c32 bges 455b8 <rtems_termios_baud_to_index+0x44>
45586: 720e moveq #14,%d1
45588: b280 cmpl %d0,%d1
4558a: 6700 00d6 beqw 45662 <rtems_termios_baud_to_index+0xee>
4558e: 6c56 bges 455e6 <rtems_termios_baud_to_index+0x72>
45590: 0c80 0000 1002 cmpil #4098,%d0
45596: 6700 00e2 beqw 4567a <rtems_termios_baud_to_index+0x106>
4559a: 6f00 0098 blew 45634 <rtems_termios_baud_to_index+0xc0>
4559e: 0c80 0000 1003 cmpil #4099,%d0
455a4: 6700 00b6 beqw 4565c <rtems_termios_baud_to_index+0xe8>
455a8: 0c80 0000 1004 cmpil #4100,%d0
455ae: 6700 009a beqw 4564a <rtems_termios_baud_to_index+0xd6>
case B38400: baud_index = 15; break;
case B57600: baud_index = 16; break;
case B115200: baud_index = 17; break;
case B230400: baud_index = 18; break;
case B460800: baud_index = 19; break;
default: baud_index = -1; break;
455b2: 70ff moveq #-1,%d0
}
return baud_index;
}
455b4: 4e5e unlk %fp
455b6: 4e75 rts
rtems_termios_baud_t termios_baud
)
{
int baud_index;
switch (termios_baud) {
455b8: 123c 0004 moveb #4,%d1
455bc: b280 cmpl %d0,%d1
455be: 6700 00d2 beqw 45692 <rtems_termios_baud_to_index+0x11e>
455c2: 6d46 blts 4560a <rtems_termios_baud_to_index+0x96>
455c4: 123c 0001 moveb #1,%d1
455c8: b280 cmpl %d0,%d1
455ca: 6700 00a2 beqw 4566e <rtems_termios_baud_to_index+0xfa>
455ce: 6c00 00c8 bgew 45698 <rtems_termios_baud_to_index+0x124>
455d2: 7202 moveq #2,%d1
455d4: b280 cmpl %d0,%d1
455d6: 677e beqs 45656 <rtems_termios_baud_to_index+0xe2>
455d8: 123c 0003 moveb #3,%d1
455dc: b280 cmpl %d0,%d1
455de: 66d2 bnes 455b2 <rtems_termios_baud_to_index+0x3e><== NEVER TAKEN
case B0: baud_index = 0; break;
case B50: baud_index = 1; break;
case B75: baud_index = 2; break;
case B110: baud_index = 3; break;
455e0: 7003 moveq #3,%d0
case B460800: baud_index = 19; break;
default: baud_index = -1; break;
}
return baud_index;
}
455e2: 4e5e unlk %fp
455e4: 4e75 rts
rtems_termios_baud_t termios_baud
)
{
int baud_index;
switch (termios_baud) {
455e6: 123c 000b moveb #11,%d1
455ea: b280 cmpl %d0,%d1
455ec: 6700 0086 beqw 45674 <rtems_termios_baud_to_index+0x100>
455f0: 6e3c bgts 4562e <rtems_termios_baud_to_index+0xba>
455f2: 123c 000c moveb #12,%d1
455f6: b280 cmpl %d0,%d1
455f8: 6700 008c beqw 45686 <rtems_termios_baud_to_index+0x112>
455fc: 123c 000d moveb #13,%d1
45600: b280 cmpl %d0,%d1
45602: 66ae bnes 455b2 <rtems_termios_baud_to_index+0x3e><== NEVER TAKEN
case B600: baud_index = 8; break;
case B1200: baud_index = 9; break;
case B1800: baud_index = 10; break;
case B2400: baud_index = 11; break;
case B4800: baud_index = 12; break;
case B9600: baud_index = 13; break;
45604: 700d moveq #13,%d0
case B460800: baud_index = 19; break;
default: baud_index = -1; break;
}
return baud_index;
}
45606: 4e5e unlk %fp
45608: 4e75 rts
rtems_termios_baud_t termios_baud
)
{
int baud_index;
switch (termios_baud) {
4560a: 7206 moveq #6,%d1
4560c: b280 cmpl %d0,%d1
4560e: 6758 beqs 45668 <rtems_termios_baud_to_index+0xf4>
45610: 6e16 bgts 45628 <rtems_termios_baud_to_index+0xb4>
45612: 123c 0007 moveb #7,%d1
45616: b280 cmpl %d0,%d1
45618: 6766 beqs 45680 <rtems_termios_baud_to_index+0x10c>
4561a: 123c 0008 moveb #8,%d1
4561e: b280 cmpl %d0,%d1
45620: 6690 bnes 455b2 <rtems_termios_baud_to_index+0x3e><== NEVER TAKEN
case B110: baud_index = 3; break;
case B134: baud_index = 4; break;
case B150: baud_index = 5; break;
case B200: baud_index = 6; break;
case B300: baud_index = 7; break;
case B600: baud_index = 8; break;
45622: 7008 moveq #8,%d0
case B460800: baud_index = 19; break;
default: baud_index = -1; break;
}
return baud_index;
}
45624: 4e5e unlk %fp
45626: 4e75 rts
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;
45628: 7005 moveq #5,%d0
case B460800: baud_index = 19; break;
default: baud_index = -1; break;
}
return baud_index;
}
4562a: 4e5e unlk %fp
4562c: 4e75 rts
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;
4562e: 700a moveq #10,%d0
case B460800: baud_index = 19; break;
default: baud_index = -1; break;
}
return baud_index;
}
45630: 4e5e unlk %fp
45632: 4e75 rts
rtems_termios_baud_t termios_baud
)
{
int baud_index;
switch (termios_baud) {
45634: 720f moveq #15,%d1
45636: b280 cmpl %d0,%d1
45638: 6716 beqs 45650 <rtems_termios_baud_to_index+0xdc>
4563a: 0c80 0000 1001 cmpil #4097,%d0
45640: 6600 ff70 bnew 455b2 <rtems_termios_baud_to_index+0x3e>
case B2400: baud_index = 11; break;
case B4800: baud_index = 12; break;
case B9600: baud_index = 13; break;
case B19200: baud_index = 14; break;
case B38400: baud_index = 15; break;
case B57600: baud_index = 16; break;
45644: 7010 moveq #16,%d0
case B460800: baud_index = 19; break;
default: baud_index = -1; break;
}
return baud_index;
}
45646: 4e5e unlk %fp
45648: 4e75 rts
case B19200: baud_index = 14; break;
case B38400: baud_index = 15; break;
case B57600: baud_index = 16; break;
case B115200: baud_index = 17; break;
case B230400: baud_index = 18; break;
case B460800: baud_index = 19; break;
4564a: 7013 moveq #19,%d0
default: baud_index = -1; break;
}
return baud_index;
}
4564c: 4e5e unlk %fp
4564e: 4e75 rts
case B1800: baud_index = 10; break;
case B2400: baud_index = 11; break;
case B4800: baud_index = 12; break;
case B9600: baud_index = 13; break;
case B19200: baud_index = 14; break;
case B38400: baud_index = 15; break;
45650: 700f moveq #15,%d0
case B460800: baud_index = 19; break;
default: baud_index = -1; break;
}
return baud_index;
}
45652: 4e5e unlk %fp
45654: 4e75 rts
int baud_index;
switch (termios_baud) {
case B0: baud_index = 0; break;
case B50: baud_index = 1; break;
case B75: baud_index = 2; break;
45656: 7002 moveq #2,%d0
case B460800: baud_index = 19; break;
default: baud_index = -1; break;
}
return baud_index;
}
45658: 4e5e unlk %fp
4565a: 4e75 rts
case B9600: baud_index = 13; break;
case B19200: baud_index = 14; break;
case B38400: baud_index = 15; break;
case B57600: baud_index = 16; break;
case B115200: baud_index = 17; break;
case B230400: baud_index = 18; break;
4565c: 7012 moveq #18,%d0
case B460800: baud_index = 19; break;
default: baud_index = -1; break;
}
return baud_index;
}
4565e: 4e5e unlk %fp
45660: 4e75 rts
case B1200: baud_index = 9; break;
case B1800: baud_index = 10; break;
case B2400: baud_index = 11; break;
case B4800: baud_index = 12; break;
case B9600: baud_index = 13; break;
case B19200: baud_index = 14; break;
45662: 700e moveq #14,%d0
case B460800: baud_index = 19; break;
default: baud_index = -1; break;
}
return baud_index;
}
45664: 4e5e unlk %fp
45666: 4e75 rts
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;
case B200: baud_index = 6; break;
45668: 7006 moveq #6,%d0
case B460800: baud_index = 19; break;
default: baud_index = -1; break;
}
return baud_index;
}
4566a: 4e5e unlk %fp
4566c: 4e75 rts
{
int baud_index;
switch (termios_baud) {
case B0: baud_index = 0; break;
case B50: baud_index = 1; break;
4566e: 7001 moveq #1,%d0
case B460800: baud_index = 19; break;
default: baud_index = -1; break;
}
return baud_index;
}
45670: 4e5e unlk %fp
45672: 4e75 rts
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;
case B2400: baud_index = 11; break;
45674: 700b moveq #11,%d0
case B460800: baud_index = 19; break;
default: baud_index = -1; break;
}
return baud_index;
}
45676: 4e5e unlk %fp
45678: 4e75 rts
case B4800: baud_index = 12; break;
case B9600: baud_index = 13; break;
case B19200: baud_index = 14; break;
case B38400: baud_index = 15; break;
case B57600: baud_index = 16; break;
case B115200: baud_index = 17; break;
4567a: 7011 moveq #17,%d0
case B460800: baud_index = 19; break;
default: baud_index = -1; break;
}
return baud_index;
}
4567c: 4e5e unlk %fp
4567e: 4e75 rts
case B75: baud_index = 2; break;
case B110: baud_index = 3; break;
case B134: baud_index = 4; break;
case B150: baud_index = 5; break;
case B200: baud_index = 6; break;
case B300: baud_index = 7; break;
45680: 7007 moveq #7,%d0
case B460800: baud_index = 19; break;
default: baud_index = -1; break;
}
return baud_index;
}
45682: 4e5e unlk %fp
45684: 4e75 rts
case B300: baud_index = 7; break;
case B600: baud_index = 8; break;
case B1200: baud_index = 9; break;
case B1800: baud_index = 10; break;
case B2400: baud_index = 11; break;
case B4800: baud_index = 12; break;
45686: 700c moveq #12,%d0
case B460800: baud_index = 19; break;
default: baud_index = -1; break;
}
return baud_index;
}
45688: 4e5e unlk %fp
4568a: 4e75 rts
case B134: baud_index = 4; break;
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;
4568c: 7009 moveq #9,%d0
case B460800: baud_index = 19; break;
default: baud_index = -1; break;
}
return baud_index;
}
4568e: 4e5e unlk %fp
45690: 4e75 rts
switch (termios_baud) {
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;
45692: 7004 moveq #4,%d0
case B460800: baud_index = 19; break;
default: baud_index = -1; break;
}
return baud_index;
}
45694: 4e5e unlk %fp
45696: 4e75 rts
rtems_termios_baud_t termios_baud
)
{
int baud_index;
switch (termios_baud) {
45698: 4a80 tstl %d0
4569a: 6600 ff16 bnew 455b2 <rtems_termios_baud_to_index+0x3e>
case B0: baud_index = 0; break;
4569e: 4280 clrl %d0
case B460800: baud_index = 19; break;
default: baud_index = -1; break;
}
return baud_index;
}
456a0: 4e5e unlk %fp <== NOT EXECUTED
00043d10 <rtems_termios_baud_to_number>:
case B134: baud = 134; break;
case B150: baud = 150; break;
case B200: baud = 200; break;
case B300: baud = 300; break;
case B600: baud = 600; break;
case B1200: baud = 1200; break;
43d10: 203c 0000 04b0 movel #1200,%d0
#include <rtems/termiostypes.h>
int32_t rtems_termios_baud_to_number(
int termios_baud
)
{
43d16: 4e56 0000 linkw %fp,#0
43d1a: 222e 0008 movel %fp@(8),%d1
43d1e: 2f02 movel %d2,%sp@-
int32_t baud;
switch (termios_baud) {
43d20: 7409 moveq #9,%d2
43d22: b481 cmpl %d1,%d2
43d24: 6740 beqs 43d66 <rtems_termios_baud_to_number+0x56>
43d26: 6c44 bges 43d6c <rtems_termios_baud_to_number+0x5c>
case B1200: baud = 1200; break;
case B1800: baud = 1800; break;
case B2400: baud = 2400; break;
case B4800: baud = 4800; break;
case B9600: baud = 9600; break;
case B19200: baud = 19200; break;
43d28: 203c 0000 4b00 movel #19200,%d0
int termios_baud
)
{
int32_t baud;
switch (termios_baud) {
43d2e: 740e moveq #14,%d2
43d30: b481 cmpl %d1,%d2
43d32: 6732 beqs 43d66 <rtems_termios_baud_to_number+0x56>
43d34: 6c68 bges 43d9e <rtems_termios_baud_to_number+0x8e>
case B4800: baud = 4800; break;
case B9600: baud = 9600; break;
case B19200: baud = 19200; break;
case B38400: baud = 38400; break;
case B57600: baud = 57600; break;
case B115200: baud = 115200; break;
43d36: 203c 0001 c200 movel #115200,%d0
int termios_baud
)
{
int32_t baud;
switch (termios_baud) {
43d3c: 0c81 0000 1002 cmpil #4098,%d1
43d42: 6722 beqs 43d66 <rtems_termios_baud_to_number+0x56>
43d44: 6f00 00c0 blew 43e06 <rtems_termios_baud_to_number+0xf6>
case B9600: baud = 9600; break;
case B19200: baud = 19200; break;
case B38400: baud = 38400; break;
case B57600: baud = 57600; break;
case B115200: baud = 115200; break;
case B230400: baud = 230400; break;
43d48: 203c 0003 8400 movel #230400,%d0
int termios_baud
)
{
int32_t baud;
switch (termios_baud) {
43d4e: 0c81 0000 1003 cmpil #4099,%d1
43d54: 6710 beqs 43d66 <rtems_termios_baud_to_number+0x56>
case B19200: baud = 19200; break;
case B38400: baud = 38400; break;
case B57600: baud = 57600; break;
case B115200: baud = 115200; break;
case B230400: baud = 230400; break;
case B460800: baud = 460800; break;
43d56: 203c 0007 0800 movel #460800,%d0
int termios_baud
)
{
int32_t baud;
switch (termios_baud) {
43d5c: 0c81 0000 1004 cmpil #4100,%d1
43d62: 6702 beqs 43d66 <rtems_termios_baud_to_number+0x56><== ALWAYS TAKEN
case B38400: baud = 38400; break;
case B57600: baud = 57600; break;
case B115200: baud = 115200; break;
case B230400: baud = 230400; break;
case B460800: baud = 460800; break;
default: baud = -1; break;
43d64: 70ff moveq #-1,%d0
}
return baud;
}
43d66: 241f movel %sp@+,%d2
43d68: 4e5e unlk %fp
43d6a: 4e75 rts
int termios_baud
)
{
int32_t baud;
switch (termios_baud) {
43d6c: 143c 0004 moveb #4,%d2
case B0: baud = 0; break;
case B50: baud = 50; break;
case B75: baud = 75; break;
case B110: baud = 110; break;
case B134: baud = 134; break;
43d70: 303c 0086 movew #134,%d0
int termios_baud
)
{
int32_t baud;
switch (termios_baud) {
43d74: b481 cmpl %d1,%d2
43d76: 67ee beqs 43d66 <rtems_termios_baud_to_number+0x56>
43d78: 6d54 blts 43dce <rtems_termios_baud_to_number+0xbe>
43d7a: 103c 0001 moveb #1,%d0
43d7e: b081 cmpl %d1,%d0
43d80: 6700 00a6 beqw 43e28 <rtems_termios_baud_to_number+0x118>
43d84: 6c00 00b2 bgew 43e38 <rtems_termios_baud_to_number+0x128>
43d88: 7402 moveq #2,%d2
43d8a: b481 cmpl %d1,%d2
43d8c: 6700 00a2 beqw 43e30 <rtems_termios_baud_to_number+0x120>
43d90: 7003 moveq #3,%d0
43d92: b081 cmpl %d1,%d0
43d94: 66ce bnes 43d64 <rtems_termios_baud_to_number+0x54><== NEVER TAKEN
case B460800: baud = 460800; break;
default: baud = -1; break;
}
return baud;
}
43d96: 241f movel %sp@+,%d2
switch (termios_baud) {
case B0: baud = 0; break;
case B50: baud = 50; break;
case B75: baud = 75; break;
case B110: baud = 110; break;
43d98: 706e moveq #110,%d0
case B460800: baud = 460800; break;
default: baud = -1; break;
}
return baud;
}
43d9a: 4e5e unlk %fp
43d9c: 4e75 rts
int termios_baud
)
{
int32_t baud;
switch (termios_baud) {
43d9e: 143c 000b moveb #11,%d2
case B200: baud = 200; break;
case B300: baud = 300; break;
case B600: baud = 600; break;
case B1200: baud = 1200; break;
case B1800: baud = 1800; break;
case B2400: baud = 2400; break;
43da2: 303c 0960 movew #2400,%d0
int termios_baud
)
{
int32_t baud;
switch (termios_baud) {
43da6: b481 cmpl %d1,%d2
43da8: 67bc beqs 43d66 <rtems_termios_baud_to_number+0x56>
case B150: baud = 150; break;
case B200: baud = 200; break;
case B300: baud = 300; break;
case B600: baud = 600; break;
case B1200: baud = 1200; break;
case B1800: baud = 1800; break;
43daa: 303c 0708 movew #1800,%d0
int termios_baud
)
{
int32_t baud;
switch (termios_baud) {
43dae: b481 cmpl %d1,%d2
43db0: 6eb4 bgts 43d66 <rtems_termios_baud_to_number+0x56>
43db2: 143c 000c moveb #12,%d2
case B300: baud = 300; break;
case B600: baud = 600; break;
case B1200: baud = 1200; break;
case B1800: baud = 1800; break;
case B2400: baud = 2400; break;
case B4800: baud = 4800; break;
43db6: 303c 12c0 movew #4800,%d0
int termios_baud
)
{
int32_t baud;
switch (termios_baud) {
43dba: b481 cmpl %d1,%d2
43dbc: 67a8 beqs 43d66 <rtems_termios_baud_to_number+0x56>
43dbe: 143c 000d moveb #13,%d2
case B600: baud = 600; break;
case B1200: baud = 1200; break;
case B1800: baud = 1800; break;
case B2400: baud = 2400; break;
case B4800: baud = 4800; break;
case B9600: baud = 9600; break;
43dc2: 303c 2580 movew #9600,%d0
int termios_baud
)
{
int32_t baud;
switch (termios_baud) {
43dc6: b481 cmpl %d1,%d2
43dc8: 679c beqs 43d66 <rtems_termios_baud_to_number+0x56><== ALWAYS TAKEN
case B38400: baud = 38400; break;
case B57600: baud = 57600; break;
case B115200: baud = 115200; break;
case B230400: baud = 230400; break;
case B460800: baud = 460800; break;
default: baud = -1; break;
43dca: 70ff moveq #-1,%d0 <== NOT EXECUTED
43dcc: 6098 bras 43d66 <rtems_termios_baud_to_number+0x56><== NOT EXECUTED
case B50: baud = 50; break;
case B75: baud = 75; break;
case B110: baud = 110; break;
case B134: baud = 134; break;
case B150: baud = 150; break;
case B200: baud = 200; break;
43dce: 203c 0000 00c8 movel #200,%d0
int termios_baud
)
{
int32_t baud;
switch (termios_baud) {
43dd4: 7406 moveq #6,%d2
43dd6: b481 cmpl %d1,%d2
43dd8: 678c beqs 43d66 <rtems_termios_baud_to_number+0x56>
case B0: baud = 0; break;
case B50: baud = 50; break;
case B75: baud = 75; break;
case B110: baud = 110; break;
case B134: baud = 134; break;
case B150: baud = 150; break;
43dda: 0680 ffff ffce addil #-50,%d0
int termios_baud
)
{
int32_t baud;
switch (termios_baud) {
43de0: b481 cmpl %d1,%d2
43de2: 6e82 bgts 43d66 <rtems_termios_baud_to_number+0x56>
43de4: 143c 0007 moveb #7,%d2
case B75: baud = 75; break;
case B110: baud = 110; break;
case B134: baud = 134; break;
case B150: baud = 150; break;
case B200: baud = 200; break;
case B300: baud = 300; break;
43de8: 303c 012c movew #300,%d0
int termios_baud
)
{
int32_t baud;
switch (termios_baud) {
43dec: b481 cmpl %d1,%d2
43dee: 6700 ff76 beqw 43d66 <rtems_termios_baud_to_number+0x56>
43df2: 143c 0008 moveb #8,%d2
case B110: baud = 110; break;
case B134: baud = 134; break;
case B150: baud = 150; break;
case B200: baud = 200; break;
case B300: baud = 300; break;
case B600: baud = 600; break;
43df6: 303c 0258 movew #600,%d0
int termios_baud
)
{
int32_t baud;
switch (termios_baud) {
43dfa: b481 cmpl %d1,%d2
43dfc: 6700 ff68 beqw 43d66 <rtems_termios_baud_to_number+0x56>
case B38400: baud = 38400; break;
case B57600: baud = 57600; break;
case B115200: baud = 115200; break;
case B230400: baud = 230400; break;
case B460800: baud = 460800; break;
default: baud = -1; break;
43e00: 70ff moveq #-1,%d0 <== NOT EXECUTED
43e02: 6000 ff62 braw 43d66 <rtems_termios_baud_to_number+0x56><== NOT EXECUTED
int termios_baud
)
{
int32_t baud;
switch (termios_baud) {
43e06: 740f moveq #15,%d2
case B1800: baud = 1800; break;
case B2400: baud = 2400; break;
case B4800: baud = 4800; break;
case B9600: baud = 9600; break;
case B19200: baud = 19200; break;
case B38400: baud = 38400; break;
43e08: 203c 0000 9600 movel #38400,%d0
int termios_baud
)
{
int32_t baud;
switch (termios_baud) {
43e0e: b481 cmpl %d1,%d2
43e10: 6700 ff54 beqw 43d66 <rtems_termios_baud_to_number+0x56>
case B2400: baud = 2400; break;
case B4800: baud = 4800; break;
case B9600: baud = 9600; break;
case B19200: baud = 19200; break;
case B38400: baud = 38400; break;
case B57600: baud = 57600; break;
43e14: 303c e100 movew #-7936,%d0
int termios_baud
)
{
int32_t baud;
switch (termios_baud) {
43e18: 0c81 0000 1001 cmpil #4097,%d1
43e1e: 6700 ff46 beqw 43d66 <rtems_termios_baud_to_number+0x56>
case B38400: baud = 38400; break;
case B57600: baud = 57600; break;
case B115200: baud = 115200; break;
case B230400: baud = 230400; break;
case B460800: baud = 460800; break;
default: baud = -1; break;
43e22: 70ff moveq #-1,%d0 <== NOT EXECUTED
43e24: 6000 ff40 braw 43d66 <rtems_termios_baud_to_number+0x56><== NOT EXECUTED
}
return baud;
}
43e28: 241f movel %sp@+,%d2
{
int32_t baud;
switch (termios_baud) {
case B0: baud = 0; break;
case B50: baud = 50; break;
43e2a: 7032 moveq #50,%d0
case B460800: baud = 460800; break;
default: baud = -1; break;
}
return baud;
}
43e2c: 4e5e unlk %fp
43e2e: 4e75 rts
43e30: 241f movel %sp@+,%d2
int32_t baud;
switch (termios_baud) {
case B0: baud = 0; break;
case B50: baud = 50; break;
case B75: baud = 75; break;
43e32: 704b moveq #75,%d0
case B460800: baud = 460800; break;
default: baud = -1; break;
}
return baud;
}
43e34: 4e5e unlk %fp
43e36: 4e75 rts
int termios_baud
)
{
int32_t baud;
switch (termios_baud) {
43e38: 4a81 tstl %d1
43e3a: 6600 ff28 bnew 43d64 <rtems_termios_baud_to_number+0x54>
case B460800: baud = 460800; break;
default: baud = -1; break;
}
return baud;
}
43e3e: 241f movel %sp@+,%d2
)
{
int32_t baud;
switch (termios_baud) {
case B0: baud = 0; break;
43e40: 4280 clrl %d0
case B460800: baud = 460800; break;
default: baud = -1; break;
}
return baud;
}
43e42: 4e5e unlk %fp
...
000444d8 <rtems_termios_bufsize>:
{
rtems_termios_cbufsize = cbufsize;
rtems_termios_raw_input_size = raw_input;
rtems_termios_raw_output_size = raw_output;
return RTEMS_SUCCESSFUL;
}
444d8: 4280 clrl %d0 <== NOT EXECUTED
rtems_status_code rtems_termios_bufsize (
int cbufsize,
int raw_input,
int raw_output
)
{
444da: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
rtems_termios_cbufsize = cbufsize;
444de: 41ee 0008 lea %fp@(8),%a0 <== NOT EXECUTED
444e2: 23d0 0005 cd50 movel %a0@,5cd50 <rtems_termios_cbufsize> <== NOT EXECUTED
rtems_termios_raw_input_size = raw_input;
444e8: 41ee 000c lea %fp@(12),%a0 <== NOT EXECUTED
444ec: 23d0 0005 cd54 movel %a0@,5cd54 <rtems_termios_raw_input_size><== NOT EXECUTED
rtems_termios_raw_output_size = raw_output;
444f2: 41ee 0010 lea %fp@(16),%a0 <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
}
444f6: 4e5e unlk %fp <== NOT EXECUTED
int raw_output
)
{
rtems_termios_cbufsize = cbufsize;
rtems_termios_raw_input_size = raw_input;
rtems_termios_raw_output_size = raw_output;
444f8: 23d0 0005 cd58 movel %a0@,5cd58 <rtems_termios_raw_output_size><== NOT EXECUTED
return RTEMS_SUCCESSFUL;
}
0004433a <rtems_termios_close>:
}
}
rtems_status_code
rtems_termios_close (void *arg)
{
4433a: 4e56 fff4 linkw %fp,#-12
4433e: 48d7 1c00 moveml %a2-%a4,%sp@
44342: 266e 0008 moveal %fp@(8),%a3
rtems_libio_open_close_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
rtems_status_code sc;
sc = rtems_semaphore_obtain(
44346: 49f9 0004 6648 lea 46648 <rtems_semaphore_obtain>,%a4
rtems_status_code
rtems_termios_close (void *arg)
{
rtems_libio_open_close_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
4434c: 2053 moveal %a3@,%a0
4434e: 2468 0034 moveal %a0@(52),%a2
rtems_status_code sc;
sc = rtems_semaphore_obtain(
44352: 42a7 clrl %sp@-
44354: 42a7 clrl %sp@-
44356: 2f39 0005 e30c movel 5e30c <rtems_termios_ttyMutex>,%sp@-
4435c: 4e94 jsr %a4@
rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
4435e: 4fef 000c lea %sp@(12),%sp
44362: 4a80 tstl %d0
44364: 6600 011c bnew 44482 <rtems_termios_close+0x148>
rtems_fatal_error_occurred (sc);
if (--tty->refcount == 0) {
44368: 202a 0008 movel %a2@(8),%d0
4436c: 5380 subql #1,%d0
4436e: 2540 0008 movel %d0,%a2@(8)
44372: 6600 00a4 bnew 44418 <rtems_termios_close+0xde>
if (rtems_termios_linesw[tty->t_line].l_close != NULL) {
44376: 202a 00cc movel %a2@(204),%d0
4437a: eb88 lsll #5,%d0
4437c: 0680 0005 dad4 addil #383700,%d0
44382: 2240 moveal %d0,%a1
44384: 2051 moveal %a1@,%a0
44386: 4a88 tstl %a0
44388: 6700 0128 beqw 444b2 <rtems_termios_close+0x178>
/*
* call discipline-specific close
*/
sc = rtems_termios_linesw[tty->t_line].l_close(tty);
4438c: 2f0a movel %a2,%sp@-
4438e: 4e90 jsr %a0@
44390: 588f addql #4,%sp
rtems_fatal_error_occurred (sc);
}
drainOutput (tty);
}
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
44392: 7002 moveq #2,%d0
44394: b0aa 00b4 cmpl %a2@(180),%d0
44398: 6700 00c0 beqw 4445a <rtems_termios_close+0x120>
rtems_fatal_error_occurred (sc);
sc = rtems_event_send( tty->txTaskId, TERMIOS_TX_TERMINATE_EVENT );
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
}
if (tty->device.lastClose)
4439c: 206a 009c moveal %a2@(156),%a0
443a0: 4a88 tstl %a0
443a2: 6710 beqs 443b4 <rtems_termios_close+0x7a>
(*tty->device.lastClose)(tty->major, tty->minor, arg);
443a4: 2f0b movel %a3,%sp@-
443a6: 2f2a 0010 movel %a2@(16),%sp@-
443aa: 2f2a 000c movel %a2@(12),%sp@-
443ae: 4e90 jsr %a0@
443b0: 4fef 000c lea %sp@(12),%sp
if (tty->forw == NULL) {
443b4: 2052 moveal %a2@,%a0
443b6: 4a88 tstl %a0
443b8: 6700 00e2 beqw 4449c <rtems_termios_close+0x162>
rtems_termios_ttyTail = tty->back;
if ( rtems_termios_ttyTail != NULL ) {
rtems_termios_ttyTail->forw = NULL;
}
} else {
tty->forw->back = tty->back;
443bc: 216a 0004 0004 movel %a2@(4),%a0@(4)
443c2: 226a 0004 moveal %a2@(4),%a1
}
if (tty->back == NULL) {
443c6: 4a89 tstl %a1
443c8: 6700 00c0 beqw 4448a <rtems_termios_close+0x150>
rtems_termios_ttyHead = tty->forw;
if ( rtems_termios_ttyHead != NULL ) {
rtems_termios_ttyHead->back = NULL;
}
} else {
tty->back->forw = tty->forw;
443cc: 2288 movel %a0,%a1@ <== NOT EXECUTED
}
rtems_semaphore_delete (tty->isem);
443ce: 2f2a 0014 movel %a2@(20),%sp@-
443d2: 47f9 0004 6570 lea 46570 <rtems_semaphore_delete>,%a3
443d8: 4e93 jsr %a3@
rtems_semaphore_delete (tty->osem);
443da: 2f2a 0018 movel %a2@(24),%sp@-
443de: 4e93 jsr %a3@
rtems_semaphore_delete (tty->rawOutBuf.Semaphore);
443e0: 2f2a 008c movel %a2@(140),%sp@-
443e4: 4e93 jsr %a3@
if ((tty->device.pollRead == NULL) ||
443e6: 4fef 000c lea %sp@(12),%sp
443ea: 4aaa 00a0 tstl %a2@(160)
443ee: 6740 beqs 44430 <rtems_termios_close+0xf6>
443f0: 7002 moveq #2,%d0
443f2: b0aa 00b4 cmpl %a2@(180),%d0
443f6: 6738 beqs 44430 <rtems_termios_close+0xf6>
(tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN))
rtems_semaphore_delete (tty->rawInBuf.Semaphore);
free (tty->rawInBuf.theBuf);
443f8: 2f2a 0058 movel %a2@(88),%sp@-
443fc: 47f9 0004 2db8 lea 42db8 <free>,%a3
44402: 4e93 jsr %a3@
free (tty->rawOutBuf.theBuf);
44404: 2f2a 007c movel %a2@(124),%sp@-
44408: 4e93 jsr %a3@
free (tty->cbuf);
4440a: 2f2a 001c movel %a2@(28),%sp@-
4440e: 4e93 jsr %a3@
free (tty);
44410: 2f0a movel %a2,%sp@-
44412: 4e93 jsr %a3@
44414: 4fef 0010 lea %sp@(16),%sp
}
rtems_semaphore_release (rtems_termios_ttyMutex);
44418: 2f39 0005 e30c movel 5e30c <rtems_termios_ttyMutex>,%sp@-
4441e: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
return RTEMS_SUCCESSFUL;
}
44424: 4cee 1c00 fff4 moveml %fp@(-12),%a2-%a4
4442a: 4280 clrl %d0
4442c: 4e5e unlk %fp
4442e: 4e75 rts
rtems_semaphore_delete (tty->isem);
rtems_semaphore_delete (tty->osem);
rtems_semaphore_delete (tty->rawOutBuf.Semaphore);
if ((tty->device.pollRead == NULL) ||
(tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN))
rtems_semaphore_delete (tty->rawInBuf.Semaphore);
44430: 2f2a 0068 movel %a2@(104),%sp@-
44434: 4e93 jsr %a3@
44436: 588f addql #4,%sp
free (tty->rawInBuf.theBuf);
44438: 47f9 0004 2db8 lea 42db8 <free>,%a3
4443e: 2f2a 0058 movel %a2@(88),%sp@-
44442: 4e93 jsr %a3@
free (tty->rawOutBuf.theBuf);
44444: 2f2a 007c movel %a2@(124),%sp@-
44448: 4e93 jsr %a3@
free (tty->cbuf);
4444a: 2f2a 001c movel %a2@(28),%sp@-
4444e: 4e93 jsr %a3@
free (tty);
44450: 2f0a movel %a2,%sp@-
44452: 4e93 jsr %a3@
44454: 4fef 0010 lea %sp@(16),%sp
44458: 60be bras 44418 <rtems_termios_close+0xde>
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
/*
* send "terminate" to I/O tasks
*/
sc = rtems_event_send( tty->rxTaskId, TERMIOS_RX_TERMINATE_EVENT );
4445a: 4878 0001 pea 1 <ADD>
4445e: 49f9 0004 6138 lea 46138 <rtems_event_send>,%a4
44464: 2f2a 00c4 movel %a2@(196),%sp@-
44468: 4e94 jsr %a4@
if (sc != RTEMS_SUCCESSFUL)
4446a: 508f addql #8,%sp
4446c: 4a80 tstl %d0
4446e: 6612 bnes 44482 <rtems_termios_close+0x148> <== NEVER TAKEN
rtems_fatal_error_occurred (sc);
sc = rtems_event_send( tty->txTaskId, TERMIOS_TX_TERMINATE_EVENT );
44470: 4878 0001 pea 1 <ADD>
44474: 2f2a 00c8 movel %a2@(200),%sp@-
44478: 4e94 jsr %a4@
if (sc != RTEMS_SUCCESSFUL)
4447a: 508f addql #8,%sp
4447c: 4a80 tstl %d0
4447e: 6700 ff1c beqw 4439c <rtems_termios_close+0x62>
rtems_fatal_error_occurred (sc);
44482: 2f00 movel %d0,%sp@- <== NOT EXECUTED
44484: 4eb9 0004 6d6c jsr 46d6c <rtems_fatal_error_occurred> <== NOT EXECUTED
} else {
tty->forw->back = tty->back;
}
if (tty->back == NULL) {
rtems_termios_ttyHead = tty->forw;
4448a: 23c8 0005 e314 movel %a0,5e314 <rtems_termios_ttyHead>
if ( rtems_termios_ttyHead != NULL ) {
44490: 6700 ff3c beqw 443ce <rtems_termios_close+0x94>
rtems_termios_ttyHead->back = NULL;
44494: 42a8 0004 clrl %a0@(4)
44498: 6000 ff34 braw 443ce <rtems_termios_close+0x94>
rtems_fatal_error_occurred (sc);
}
if (tty->device.lastClose)
(*tty->device.lastClose)(tty->major, tty->minor, arg);
if (tty->forw == NULL) {
rtems_termios_ttyTail = tty->back;
4449c: 226a 0004 moveal %a2@(4),%a1
444a0: 23c9 0005 e310 movel %a1,5e310 <rtems_termios_ttyTail>
if ( rtems_termios_ttyTail != NULL ) {
444a6: 67e2 beqs 4448a <rtems_termios_close+0x150> <== ALWAYS TAKEN
rtems_termios_ttyTail->forw = NULL;
444a8: 4291 clrl %a1@ <== NOT EXECUTED
444aa: 2052 moveal %a2@,%a0 <== NOT EXECUTED
rtems_termios_ttyHead = tty->forw;
if ( rtems_termios_ttyHead != NULL ) {
rtems_termios_ttyHead->back = NULL;
}
} else {
tty->back->forw = tty->forw;
444ac: 2288 movel %a0,%a1@ <== NOT EXECUTED
444ae: 6000 ff1e braw 443ce <rtems_termios_close+0x94> <== NOT EXECUTED
sc = rtems_termios_linesw[tty->t_line].l_close(tty);
} else {
/*
* default: just flush output buffer
*/
sc = rtems_semaphore_obtain(tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
444b2: 42a7 clrl %sp@-
444b4: 42a7 clrl %sp@-
444b6: 2f2a 0018 movel %a2@(24),%sp@-
444ba: 4e94 jsr %a4@
if (sc != RTEMS_SUCCESSFUL) {
444bc: 4fef 000c lea %sp@(12),%sp
444c0: 4a80 tstl %d0
444c2: 66be bnes 44482 <rtems_termios_close+0x148> <== NEVER TAKEN
rtems_fatal_error_occurred (sc);
}
drainOutput (tty);
444c4: 2f0a movel %a2,%sp@-
444c6: 4eba f9bc jsr %pc@(43e84 <drainOutput>)
444ca: 588f addql #4,%sp
}
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
444cc: 7002 moveq #2,%d0
444ce: b0aa 00b4 cmpl %a2@(180),%d0
444d2: 6600 fec8 bnew 4439c <rtems_termios_close+0x62>
444d6: 6082 bras 4445a <rtems_termios_close+0x120>
00045b16 <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)
{
45b16: 4e56 0000 linkw %fp,#0
rtems_status_code sc;
/*
* sum up character count already sent
*/
tty->t_dqlen += len;
45b1a: 202e 000c movel %fp@(12),%d0
* for each transmitted character.
* It returns number of characters left to transmit
*/
int
rtems_termios_dequeue_characters (void *ttyp, int len)
{
45b1e: 206e 0008 moveal %fp@(8),%a0
rtems_status_code sc;
/*
* sum up character count already sent
*/
tty->t_dqlen += len;
45b22: d1a8 0090 addl %d0,%a0@(144)
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
45b26: 7002 moveq #2,%d0
45b28: b0a8 00b4 cmpl %a0@(180),%d0
45b2c: 672a beqs 45b58 <rtems_termios_dequeue_characters+0x42>
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
return 0; /* nothing to output in IRQ... */
}
if (tty->t_line == PPPDISC ) {
45b2e: 7005 moveq #5,%d0
45b30: b0a8 00cc cmpl %a0@(204),%d0
45b34: 670c beqs 45b42 <rtems_termios_dequeue_characters+0x2c>
rtems_termios_linesw[tty->t_line].l_start(tty);
}
return 0; /* nothing to output in IRQ... */
}
return rtems_termios_refill_transmitter(tty);
45b36: 2d48 0008 movel %a0,%fp@(8)
}
45b3a: 4e5e unlk %fp
rtems_termios_linesw[tty->t_line].l_start(tty);
}
return 0; /* nothing to output in IRQ... */
}
return rtems_termios_refill_transmitter(tty);
45b3c: 4ef9 0004 5862 jmp 45862 <rtems_termios_refill_transmitter>
if (tty->t_line == PPPDISC ) {
/*
* call any line discipline start function
*/
if (rtems_termios_linesw[tty->t_line].l_start != NULL) {
45b42: 2279 0005 db84 moveal 5db84 <rtems_termios_linesw+0xb4>,%a1
45b48: 4a89 tstl %a1
45b4a: 6706 beqs 45b52 <rtems_termios_dequeue_characters+0x3c><== NEVER TAKEN
rtems_termios_linesw[tty->t_line].l_start(tty);
45b4c: 2f08 movel %a0,%sp@-
45b4e: 4e91 jsr %a1@
45b50: 588f addql #4,%sp
}
return 0; /* nothing to output in IRQ... */
}
return rtems_termios_refill_transmitter(tty);
}
45b52: 4280 clrl %d0
45b54: 4e5e unlk %fp
45b56: 4e75 rts
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
/*
* send wake up to transmitter task
*/
sc = rtems_event_send(tty->txTaskId, TERMIOS_TX_START_EVENT);
45b58: 4878 0002 pea 2 <DOUBLE_FLOAT>
45b5c: 2f28 00c8 movel %a0@(200),%sp@-
45b60: 4eb9 0004 6138 jsr 46138 <rtems_event_send>
if (sc != RTEMS_SUCCESSFUL)
45b66: 508f addql #8,%sp
45b68: 4a80 tstl %d0
45b6a: 67e6 beqs 45b52 <rtems_termios_dequeue_characters+0x3c><== ALWAYS TAKEN
rtems_fatal_error_occurred (sc);
45b6c: 2f00 movel %d0,%sp@- <== NOT EXECUTED
45b6e: 4eb9 0004 6d6c jsr 46d6c <rtems_fatal_error_occurred> <== NOT EXECUTED
00045514 <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, char *buf, int len)
{
45514: 4e56 ffcc linkw %fp,#-52
45518: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
4551c: 246e 0008 moveal %fp@(8),%a2
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) {
45520: 202a 00cc movel %a2@(204),%d0
45524: eb88 lsll #5,%d0
* device receive interrupt handler.
* Returns the number of characters dropped because of overflow.
*/
int
rtems_termios_enqueue_raw_characters (void *ttyp, char *buf, int len)
{
45526: 266e 000c moveal %fp@(12),%a3
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) {
4552a: 0680 0005 dae0 addil #383712,%d0
45530: 2240 moveal %d0,%a1
* device receive interrupt handler.
* Returns the number of characters dropped because of overflow.
*/
int
rtems_termios_enqueue_raw_characters (void *ttyp, char *buf, int len)
{
45532: 242e 0010 movel %fp@(16),%d2
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) {
45536: 2051 moveal %a1@,%a0
45538: 4a88 tstl %a0
4553a: 6774 beqs 455b0 <rtems_termios_enqueue_raw_characters+0x9c>
while (len--) {
4553c: 4a82 tstl %d2
4553e: 6734 beqs 45574 <rtems_termios_enqueue_raw_characters+0x60><== NEVER TAKEN
c = *buf++;
rtems_termios_linesw[tty->t_line].l_rint(c,tty);
45540: 2f0a movel %a2,%sp@-
45542: 5382 subql #1,%d2
45544: 121b moveb %a3@+,%d1
45546: 49c1 extbl %d1
45548: 2f01 movel %d1,%sp@-
4554a: 4e90 jsr %a0@
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--) {
4554c: 508f addql #8,%sp
4554e: 4a82 tstl %d2
45550: 6722 beqs 45574 <rtems_termios_enqueue_raw_characters+0x60><== NEVER TAKEN
45552: 202a 00cc movel %a2@(204),%d0
c = *buf++;
rtems_termios_linesw[tty->t_line].l_rint(c,tty);
45556: 5382 subql #1,%d2
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--) {
45558: eb88 lsll #5,%d0
4555a: 0680 0005 dae0 addil #383712,%d0
45560: 2240 moveal %d0,%a1
45562: 2051 moveal %a1@,%a0
c = *buf++;
rtems_termios_linesw[tty->t_line].l_rint(c,tty);
45564: 2f0a movel %a2,%sp@-
45566: 121b moveb %a3@+,%d1
45568: 49c1 extbl %d1
4556a: 2f01 movel %d1,%sp@-
4556c: 4e90 jsr %a0@
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--) {
4556e: 508f addql #8,%sp
45570: 4a82 tstl %d2
45572: 66de bnes 45552 <rtems_termios_enqueue_raw_characters+0x3e>
}
/*
* check to see if rcv wakeup callback was set
*/
if (( !tty->tty_rcvwakeup ) && ( tty->tty_rcv.sw_pfn != NULL )) {
45574: 4aaa 00e4 tstl %a2@(228)
45578: 6628 bnes 455a2 <rtems_termios_enqueue_raw_characters+0x8e><== NEVER TAKEN
4557a: 206a 00dc moveal %a2@(220),%a0
4557e: 4a88 tstl %a0
45580: 6720 beqs 455a2 <rtems_termios_enqueue_raw_characters+0x8e><== ALWAYS TAKEN
(*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg);
45582: 2f2a 00e0 movel %a2@(224),%sp@- <== NOT EXECUTED
tty->tty_rcvwakeup = 1;
}
return 0;
45586: 4285 clrl %d5 <== NOT EXECUTED
/*
* 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);
45588: 486a 0030 pea %a2@(48) <== NOT EXECUTED
4558c: 4e90 jsr %a0@ <== NOT EXECUTED
tty->tty_rcvwakeup = 1;
4558e: 508f addql #8,%sp <== NOT EXECUTED
45590: 7001 moveq #1,%d0 <== NOT EXECUTED
45592: 2540 00e4 movel %d0,%a2@(228) <== NOT EXECUTED
}
tty->rawInBufDropped += dropped;
rtems_semaphore_release (tty->rawInBuf.Semaphore);
return dropped;
}
45596: 2005 movel %d5,%d0 <== NOT EXECUTED
45598: 4cee 3cfc ffcc moveml %fp@(-52),%d2-%d7/%a2-%a5 <== NOT EXECUTED
4559e: 4e5e unlk %fp <== NOT EXECUTED
455a0: 4e75 rts <== NOT EXECUTED
*/
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;
455a2: 4285 clrl %d5
}
tty->rawInBufDropped += dropped;
rtems_semaphore_release (tty->rawInBuf.Semaphore);
return dropped;
}
455a4: 2005 movel %d5,%d0
455a6: 4cee 3cfc ffcc moveml %fp@(-52),%d2-%d7/%a2-%a5
455ac: 4e5e unlk %fp
455ae: 4e75 rts
if ((tty->flow_ctrl & FL_OSTOP) ||
(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,
455b0: 41ea 004a lea %a2@(74),%a0
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) {
455b4: 4285 clrl %d5
}
if (flow_rcv) {
/* restart output according to FL_ORCVXOF flag */
if ((tty->flow_ctrl & (FL_ORCVXOF | FL_OSTOP)) == FL_OSTOP) {
/* disable interrupts */
rtems_interrupt_disable(level);
455b6: 387c 0700 moveaw #1792,%a4
/*
* 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);
455ba: 4bea 0030 lea %a2@(48),%a5
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) {
455be: 4200 clrb %d0
if ((tty->flow_ctrl & FL_OSTOP) ||
(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,
455c0: 2d48 fffc movel %a0,%fp@(-4)
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) {
455c4: 1d40 fff7 moveb %d0,%fp@(-9)
tty->tty_rcvwakeup = 1;
}
return 0;
}
while (len--) {
455c8: 4a82 tstl %d2
455ca: 6700 00e6 beqw 456b2 <rtems_termios_enqueue_raw_characters+0x19e>
c = *buf++;
/* FIXME: implement IXANY: any character restarts output */
/* if incoming XON/XOFF controls outgoing stream: */
if (tty->flow_ctrl & FL_MDXON) {
455ce: 202a 00b8 movel %a2@(184),%d0
}
return 0;
}
while (len--) {
c = *buf++;
455d2: 181b moveb %a3@+,%d4
/* FIXME: implement IXANY: any character restarts output */
/* if incoming XON/XOFF controls outgoing stream: */
if (tty->flow_ctrl & FL_MDXON) {
455d4: 0800 0009 btst #9,%d0
455d8: 671c beqs 455f6 <rtems_termios_enqueue_raw_characters+0xe2>
/* if received char is V_STOP and V_START (both are equal value) */
if (c == tty->termios.c_cc[VSTOP]) {
455da: 4281 clrl %d1
455dc: 122a 004a moveb %a2@(74),%d1
455e0: 1004 moveb %d4,%d0
455e2: 49c0 extbl %d0
455e4: b280 cmpl %d0,%d1
455e6: 6700 0146 beqw 4572e <rtems_termios_enqueue_raw_characters+0x21a>
/* stop output */
tty->flow_ctrl |= FL_ORCVXOF;
}
flow_rcv = true;
}
else if (c == tty->termios.c_cc[VSTART]) {
455ea: 4281 clrl %d1
455ec: 122a 0049 moveb %a2@(73),%d1
455f0: b280 cmpl %d0,%d1
455f2: 6700 00da beqw 456ce <rtems_termios_enqueue_raw_characters+0x1ba>
/* restart output */
tty->flow_ctrl &= ~FL_ORCVXOF;
flow_rcv = true;
}
}
if (flow_rcv) {
455f6: 4a2e fff7 tstb %fp@(-9)
455fa: 6600 00e4 bnew 456e0 <rtems_termios_enqueue_raw_characters+0x1cc>
}
/* reenable interrupts */
rtems_interrupt_enable(level);
}
} else {
newTail = (tty->rawInBuf.Tail + 1) % tty->rawInBuf.Size;
455fe: 2e2a 0060 movel %a2@(96),%d7
45602: 5287 addql #1,%d7
/* if chars_in_buffer > highwater */
rtems_interrupt_disable(level);
45604: 200c movel %a4,%d0
}
/* reenable interrupts */
rtems_interrupt_enable(level);
}
} else {
newTail = (tty->rawInBuf.Tail + 1) % tty->rawInBuf.Size;
45606: 222a 0064 movel %a2@(100),%d1
4560a: 4c41 7003 remul %d1,%d3,%d7
/* if chars_in_buffer > highwater */
rtems_interrupt_disable(level);
4560e: 40c7 movew %sr,%d7
45610: 8087 orl %d7,%d0
45612: 46c0 movew %d0,%sr
if ((((newTail - tty->rawInBuf.Head + tty->rawInBuf.Size)
45614: 222a 005c movel %a2@(92),%d1
45618: 202a 0064 movel %a2@(100),%d0
4561c: 9081 subl %d1,%d0
4561e: 2240 moveal %d0,%a1
45620: d3c3 addal %d3,%a1
% tty->rawInBuf.Size) > tty->highwater) &&
45622: 2209 movel %a1,%d1
45624: 202a 0064 movel %a2@(100),%d0
45628: 4c40 1006 remul %d0,%d6,%d1
4562c: 2d40 fff8 movel %d0,%fp@(-8)
}
} 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)
45630: bcaa 00c0 cmpl %a2@(192),%d6
45634: 633e blss 45674 <rtems_termios_enqueue_raw_characters+0x160><== ALWAYS TAKEN
% tty->rawInBuf.Size) > tty->highwater) &&
!(tty->flow_ctrl & FL_IREQXOF)) {
45636: 202a 00b8 movel %a2@(184),%d0 <== 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) &&
4563a: 0800 0000 btst #0,%d0 <== NOT EXECUTED
4563e: 6634 bnes 45674 <rtems_termios_enqueue_raw_characters+0x160><== NOT EXECUTED
!(tty->flow_ctrl & FL_IREQXOF)) {
/* incoming data stream should be stopped */
tty->flow_ctrl |= FL_IREQXOF;
45640: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
45644: 7201 moveq #1,%d1 <== NOT EXECUTED
45646: 8081 orl %d1,%d0 <== NOT EXECUTED
45648: 2540 00b8 movel %d0,%a2@(184) <== NOT EXECUTED
if ((tty->flow_ctrl & (FL_MDXOF | FL_ISNTXOF))
4564c: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
45650: 0280 0000 0402 andil #1026,%d0 <== NOT EXECUTED
45656: 0c80 0000 0400 cmpil #1024,%d0 <== NOT EXECUTED
4565c: 6700 010c beqw 4576a <rtems_termios_enqueue_raw_characters+0x256><== NOT EXECUTED
/* call write function here */
tty->flow_ctrl |= FL_ISNTXOF;
(*tty->device.write)(tty->minor,
(void *)&(tty->termios.c_cc[VSTOP]), 1);
}
} else if ((tty->flow_ctrl & (FL_MDRTS | FL_IRTSOFF)) == (FL_MDRTS) ) {
45660: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
45664: 0280 0000 0104 andil #260,%d0 <== NOT EXECUTED
4566a: 0c80 0000 0100 cmpil #256,%d0 <== NOT EXECUTED
45670: 6700 0130 beqw 457a2 <rtems_termios_enqueue_raw_characters+0x28e><== NOT EXECUTED
}
}
}
/* reenable interrupts */
rtems_interrupt_enable(level);
45674: 46c7 movew %d7,%sr
if (newTail == tty->rawInBuf.Head) {
45676: 202a 005c movel %a2@(92),%d0
4567a: b680 cmpl %d0,%d3
4567c: 6700 00ce beqw 4574c <rtems_termios_enqueue_raw_characters+0x238>
dropped++;
} else {
tty->rawInBuf.theBuf[newTail] = c;
45680: 206a 0058 moveal %a2@(88),%a0
45684: 1184 3800 moveb %d4,%a0@(00000000,%d3:l)
tty->rawInBuf.Tail = newTail;
45688: 2543 0060 movel %d3,%a2@(96)
/*
* check to see if rcv wakeup callback was set
*/
if (( !tty->tty_rcvwakeup ) && ( tty->tty_rcv.sw_pfn != NULL )) {
4568c: 4aaa 00e4 tstl %a2@(228)
45690: 6618 bnes 456aa <rtems_termios_enqueue_raw_characters+0x196><== NEVER TAKEN
45692: 206a 00dc moveal %a2@(220),%a0
45696: 4a88 tstl %a0
45698: 6710 beqs 456aa <rtems_termios_enqueue_raw_characters+0x196><== ALWAYS TAKEN
(*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg);
4569a: 2f2a 00e0 movel %a2@(224),%sp@- <== NOT EXECUTED
4569e: 2f0d movel %a5,%sp@- <== NOT EXECUTED
456a0: 4e90 jsr %a0@ <== NOT EXECUTED
tty->tty_rcvwakeup = 1;
456a2: 508f addql #8,%sp <== NOT EXECUTED
456a4: 7201 moveq #1,%d1 <== NOT EXECUTED
456a6: 2541 00e4 movel %d1,%a2@(228) <== NOT EXECUTED
456aa: 5382 subql #1,%d2
tty->tty_rcvwakeup = 1;
}
return 0;
}
while (len--) {
456ac: 4a82 tstl %d2
456ae: 6600 ff1e bnew 455ce <rtems_termios_enqueue_raw_characters+0xba>
}
}
}
tty->rawInBufDropped += dropped;
rtems_semaphore_release (tty->rawInBuf.Semaphore);
456b2: 2f2a 0068 movel %a2@(104),%sp@-
}
}
}
}
tty->rawInBufDropped += dropped;
456b6: dbaa 0078 addl %d5,%a2@(120)
rtems_semaphore_release (tty->rawInBuf.Semaphore);
456ba: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
return dropped;
456c0: 588f addql #4,%sp
}
456c2: 2005 movel %d5,%d0
456c4: 4cee 3cfc ffcc moveml %fp@(-52),%d2-%d7/%a2-%a5
456ca: 4e5e unlk %fp
456cc: 4e75 rts
flow_rcv = true;
}
else if (c == tty->termios.c_cc[VSTART]) {
/* VSTART received */
/* restart output */
tty->flow_ctrl &= ~FL_ORCVXOF;
456ce: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
456d2: 72ef moveq #-17,%d1 <== NOT EXECUTED
456d4: c081 andl %d1,%d0 <== NOT EXECUTED
* device receive interrupt handler.
* Returns the number of characters dropped because of overflow.
*/
int
rtems_termios_enqueue_raw_characters (void *ttyp, char *buf, int len)
{
456d6: 7c01 moveq #1,%d6 <== NOT EXECUTED
flow_rcv = true;
}
else if (c == tty->termios.c_cc[VSTART]) {
/* VSTART received */
/* restart output */
tty->flow_ctrl &= ~FL_ORCVXOF;
456d8: 2540 00b8 movel %d0,%a2@(184) <== NOT EXECUTED
* device receive interrupt handler.
* Returns the number of characters dropped because of overflow.
*/
int
rtems_termios_enqueue_raw_characters (void *ttyp, char *buf, int len)
{
456dc: 1d46 fff7 moveb %d6,%fp@(-9) <== NOT EXECUTED
flow_rcv = true;
}
}
if (flow_rcv) {
/* restart output according to FL_ORCVXOF flag */
if ((tty->flow_ctrl & (FL_ORCVXOF | FL_OSTOP)) == FL_OSTOP) {
456e0: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
456e4: 7c30 moveq #48,%d6 <== NOT EXECUTED
456e6: 7220 moveq #32,%d1 <== NOT EXECUTED
456e8: c086 andl %d6,%d0 <== NOT EXECUTED
456ea: b280 cmpl %d0,%d1 <== NOT EXECUTED
456ec: 66bc bnes 456aa <rtems_termios_enqueue_raw_characters+0x196><== NOT EXECUTED
/* disable interrupts */
rtems_interrupt_disable(level);
456ee: 200c movel %a4,%d0 <== NOT EXECUTED
456f0: 40c3 movew %sr,%d3 <== NOT EXECUTED
456f2: 8083 orl %d3,%d0 <== NOT EXECUTED
456f4: 46c0 movew %d0,%sr <== NOT EXECUTED
tty->flow_ctrl &= ~FL_OSTOP;
456f6: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
456fa: 7cdf moveq #-33,%d6 <== NOT EXECUTED
456fc: c086 andl %d6,%d0 <== NOT EXECUTED
456fe: 2540 00b8 movel %d0,%a2@(184) <== NOT EXECUTED
/* check for chars in output buffer (or rob_state?) */
if (tty->rawOutBufState != rob_idle) {
45702: 4aaa 0094 tstl %a2@(148) <== NOT EXECUTED
45706: 6606 bnes 4570e <rtems_termios_enqueue_raw_characters+0x1fa><== NOT EXECUTED
/* if chars available, call write function... */
(*tty->device.write)(
tty->minor, &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail], 1);
}
/* reenable interrupts */
rtems_interrupt_enable(level);
45708: 46c3 movew %d3,%sr <== NOT EXECUTED
/*
* 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);
tty->tty_rcvwakeup = 1;
4570a: 5382 subql #1,%d2 <== NOT EXECUTED
4570c: 609e bras 456ac <rtems_termios_enqueue_raw_characters+0x198><== 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)(
4570e: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
tty->minor, &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail], 1);
45712: 202a 0084 movel %a2@(132),%d0 <== 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)(
45716: d0aa 007c addl %a2@(124),%d0 <== NOT EXECUTED
4571a: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4571c: 2f2a 0010 movel %a2@(16),%sp@- <== NOT EXECUTED
45720: 206a 00a4 moveal %a2@(164),%a0 <== NOT EXECUTED
45724: 4e90 jsr %a0@ <== NOT EXECUTED
45726: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
tty->minor, &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail], 1);
}
/* reenable interrupts */
rtems_interrupt_enable(level);
4572a: 46c3 movew %d3,%sr <== NOT EXECUTED
4572c: 60dc bras 4570a <rtems_termios_enqueue_raw_characters+0x1f6><== NOT EXECUTED
/* 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]) {
4572e: 4281 clrl %d1 <== NOT EXECUTED
45730: 122a 0049 moveb %a2@(73),%d1 <== NOT EXECUTED
45734: b280 cmpl %d0,%d1 <== NOT EXECUTED
45736: 671c beqs 45754 <rtems_termios_enqueue_raw_characters+0x240><== NOT EXECUTED
tty->flow_ctrl = tty->flow_ctrl ^ FL_ORCVXOF;
}
else {
/* VSTOP received (other code than VSTART) */
/* stop output */
tty->flow_ctrl |= FL_ORCVXOF;
45738: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
4573c: 7c10 moveq #16,%d6 <== NOT EXECUTED
4573e: 8086 orl %d6,%d0 <== NOT EXECUTED
* device receive interrupt handler.
* Returns the number of characters dropped because of overflow.
*/
int
rtems_termios_enqueue_raw_characters (void *ttyp, char *buf, int len)
{
45740: 7c01 moveq #1,%d6 <== NOT EXECUTED
tty->flow_ctrl = tty->flow_ctrl ^ FL_ORCVXOF;
}
else {
/* VSTOP received (other code than VSTART) */
/* stop output */
tty->flow_ctrl |= FL_ORCVXOF;
45742: 2540 00b8 movel %d0,%a2@(184) <== NOT EXECUTED
* device receive interrupt handler.
* Returns the number of characters dropped because of overflow.
*/
int
rtems_termios_enqueue_raw_characters (void *ttyp, char *buf, int len)
{
45746: 1d46 fff7 moveb %d6,%fp@(-9) <== NOT EXECUTED
4574a: 6094 bras 456e0 <rtems_termios_enqueue_raw_characters+0x1cc><== NOT EXECUTED
/* reenable interrupts */
rtems_interrupt_enable(level);
if (newTail == tty->rawInBuf.Head) {
dropped++;
4574c: 5285 addql #1,%d5 <== NOT EXECUTED
/*
* 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);
tty->tty_rcvwakeup = 1;
4574e: 5382 subql #1,%d2 <== NOT EXECUTED
45750: 6000 ff5a braw 456ac <rtems_termios_enqueue_raw_characters+0x198><== NOT EXECUTED
/* 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]) {
/* received VSTOP and VSTART==VSTOP? */
/* then toggle "stop output" status */
tty->flow_ctrl = tty->flow_ctrl ^ FL_ORCVXOF;
45754: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
45758: 7210 moveq #16,%d1 <== NOT EXECUTED
4575a: b380 eorl %d1,%d0 <== NOT EXECUTED
* device receive interrupt handler.
* Returns the number of characters dropped because of overflow.
*/
int
rtems_termios_enqueue_raw_characters (void *ttyp, char *buf, int len)
{
4575c: 7c01 moveq #1,%d6 <== NOT EXECUTED
/* 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]) {
/* received VSTOP and VSTART==VSTOP? */
/* then toggle "stop output" status */
tty->flow_ctrl = tty->flow_ctrl ^ FL_ORCVXOF;
4575e: 2540 00b8 movel %d0,%a2@(184) <== NOT EXECUTED
* device receive interrupt handler.
* Returns the number of characters dropped because of overflow.
*/
int
rtems_termios_enqueue_raw_characters (void *ttyp, char *buf, int len)
{
45762: 1d46 fff7 moveb %d6,%fp@(-9) <== NOT EXECUTED
45766: 6000 ff78 braw 456e0 <rtems_termios_enqueue_raw_characters+0x1cc><== NOT EXECUTED
!(tty->flow_ctrl & FL_IREQXOF)) {
/* incoming data stream should be stopped */
tty->flow_ctrl |= FL_IREQXOF;
if ((tty->flow_ctrl & (FL_MDXOF | FL_ISNTXOF))
== (FL_MDXOF ) ) {
if ((tty->flow_ctrl & FL_OSTOP) ||
4576a: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
4576e: 0800 0005 btst #5,%d0 <== NOT EXECUTED
45772: 6608 bnes 4577c <rtems_termios_enqueue_raw_characters+0x268><== NOT EXECUTED
45774: 4aaa 0094 tstl %a2@(148) <== NOT EXECUTED
45778: 6600 fefa bnew 45674 <rtems_termios_enqueue_raw_characters+0x160><== 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;
(*tty->device.write)(tty->minor,
4577c: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
== (FL_MDXOF ) ) {
if ((tty->flow_ctrl & FL_OSTOP) ||
(tty->rawOutBufState == rob_idle)) {
/* if tx is stopped due to XOFF or out of data */
/* call write function here */
tty->flow_ctrl |= FL_ISNTXOF;
45780: 7c02 moveq #2,%d6 <== NOT EXECUTED
45782: 222a 00b8 movel %a2@(184),%d1 <== NOT EXECUTED
(*tty->device.write)(tty->minor,
45786: 2f2e fffc movel %fp@(-4),%sp@- <== NOT EXECUTED
4578a: 2f2a 0010 movel %a2@(16),%sp@- <== NOT EXECUTED
4578e: 206a 00a4 moveal %a2@(164),%a0 <== NOT EXECUTED
== (FL_MDXOF ) ) {
if ((tty->flow_ctrl & FL_OSTOP) ||
(tty->rawOutBufState == rob_idle)) {
/* if tx is stopped due to XOFF or out of data */
/* call write function here */
tty->flow_ctrl |= FL_ISNTXOF;
45792: 8286 orl %d6,%d1 <== NOT EXECUTED
45794: 2541 00b8 movel %d1,%a2@(184) <== NOT EXECUTED
(*tty->device.write)(tty->minor,
45798: 4e90 jsr %a0@ <== NOT EXECUTED
4579a: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4579e: 6000 fed4 braw 45674 <rtems_termios_enqueue_raw_characters+0x160><== NOT EXECUTED
(void *)&(tty->termios.c_cc[VSTOP]), 1);
}
} else if ((tty->flow_ctrl & (FL_MDRTS | FL_IRTSOFF)) == (FL_MDRTS) ) {
tty->flow_ctrl |= FL_IRTSOFF;
457a2: 222a 00b8 movel %a2@(184),%d1 <== NOT EXECUTED
457a6: 303c 0004 movew #4,%d0 <== NOT EXECUTED
/* deactivate RTS line */
if (tty->device.stopRemoteTx != NULL) {
457aa: 206a 00ac moveal %a2@(172),%a0 <== NOT EXECUTED
tty->flow_ctrl |= FL_ISNTXOF;
(*tty->device.write)(tty->minor,
(void *)&(tty->termios.c_cc[VSTOP]), 1);
}
} else if ((tty->flow_ctrl & (FL_MDRTS | FL_IRTSOFF)) == (FL_MDRTS) ) {
tty->flow_ctrl |= FL_IRTSOFF;
457ae: 8280 orl %d0,%d1 <== NOT EXECUTED
457b0: 2541 00b8 movel %d1,%a2@(184) <== NOT EXECUTED
/* deactivate RTS line */
if (tty->device.stopRemoteTx != NULL) {
457b4: 4a88 tstl %a0 <== NOT EXECUTED
457b6: 6700 febc beqw 45674 <rtems_termios_enqueue_raw_characters+0x160><== NOT EXECUTED
tty->device.stopRemoteTx(tty->minor);
457ba: 2f2a 0010 movel %a2@(16),%sp@- <== NOT EXECUTED
457be: 4e90 jsr %a0@ <== NOT EXECUTED
457c0: 588f addql #4,%sp <== NOT EXECUTED
457c2: 6000 feb0 braw 45674 <rtems_termios_enqueue_raw_characters+0x160><== NOT EXECUTED
00044500 <rtems_termios_ioctl>:
}
}
rtems_status_code
rtems_termios_ioctl (void *arg)
{
44500: 4e56 ffec linkw %fp,#-20
44504: 48d7 1c0c moveml %d2-%d3/%a2-%a4,%sp@
44508: 266e 0008 moveal %fp@(8),%a3
rtems_libio_ioctl_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
4450c: 2053 moveal %a3@,%a0
4450e: 2468 0034 moveal %a0@(52),%a2
struct ttywakeup *wakeup = (struct ttywakeup *)args->buffer;
rtems_status_code sc;
args->ioctl_return = 0;
sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
44512: 42a7 clrl %sp@-
rtems_status_code
rtems_termios_ioctl (void *arg)
{
rtems_libio_ioctl_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
struct ttywakeup *wakeup = (struct ttywakeup *)args->buffer;
44514: 286b 0008 moveal %a3@(8),%a4
rtems_status_code sc;
args->ioctl_return = 0;
sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
44518: 42a7 clrl %sp@-
4451a: 2f2a 0018 movel %a2@(24),%sp@-
rtems_libio_ioctl_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
struct ttywakeup *wakeup = (struct ttywakeup *)args->buffer;
rtems_status_code sc;
args->ioctl_return = 0;
4451e: 42ab 000c clrl %a3@(12)
sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
44522: 4eb9 0004 6648 jsr 46648 <rtems_semaphore_obtain>
if (sc != RTEMS_SUCCESSFUL) {
44528: 4fef 000c lea %sp@(12),%sp
struct rtems_termios_tty *tty = args->iop->data1;
struct ttywakeup *wakeup = (struct ttywakeup *)args->buffer;
rtems_status_code sc;
args->ioctl_return = 0;
sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
4452c: 2400 movel %d0,%d2
if (sc != RTEMS_SUCCESSFUL) {
4452e: 662c bnes 4455c <rtems_termios_ioctl+0x5c> <== NEVER TAKEN
args->ioctl_return = sc;
return sc;
}
switch (args->command) {
44530: 202b 0004 movel %a3@(4),%d0
44534: 7204 moveq #4,%d1
44536: b280 cmpl %d0,%d1
44538: 6774 beqs 445ae <rtems_termios_ioctl+0xae> <== NEVER TAKEN
4453a: 6530 bcss 4456c <rtems_termios_ioctl+0x6c>
4453c: 7602 moveq #2,%d3
4453e: b680 cmpl %d0,%d3
44540: 6700 00b6 beqw 445f8 <rtems_termios_ioctl+0xf8>
44544: 6400 0228 bccw 4476e <rtems_termios_ioctl+0x26e>
if (tty->device.setAttributes)
(*tty->device.setAttributes)(tty->minor, &tty->termios);
break;
case RTEMS_IO_TCDRAIN:
drainOutput (tty);
44548: 2f0a movel %a2,%sp@-
4454a: 4eba f938 jsr %pc@(43e84 <drainOutput>)
break;
4454e: 588f addql #4,%sp
*(int *)args->buffer = tty->ccount - tty->cindex + rawnc;
}
break;
}
rtems_semaphore_release (tty->osem);
44550: 2f2a 0018 movel %a2@(24),%sp@-
44554: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
args->ioctl_return = sc;
return sc;
4455a: 588f addql #4,%sp
}
4455c: 2002 movel %d2,%d0
}
break;
}
rtems_semaphore_release (tty->osem);
args->ioctl_return = sc;
4455e: 2742 000c movel %d2,%a3@(12)
return sc;
}
44562: 4cee 1c0c ffec moveml %fp@(-20),%d2-%d3/%a2-%a4
44568: 4e5e unlk %fp
4456a: 4e75 rts
sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL) {
args->ioctl_return = sc;
return sc;
}
switch (args->command) {
4456c: 0c80 4004 667f cmpil #1074030207,%d0
44572: 6756 beqs 445ca <rtems_termios_ioctl+0xca> <== NEVER TAKEN
44574: 6200 023a bhiw 447b0 <rtems_termios_ioctl+0x2b0>
44578: 7605 moveq #5,%d3
4457a: b680 cmpl %d0,%d3
4457c: 6700 01d2 beqw 44750 <rtems_termios_ioctl+0x250>
default:
if (rtems_termios_linesw[tty->t_line].l_ioctl != NULL) {
44580: 202a 00cc movel %a2@(204),%d0
44584: eb88 lsll #5,%d0
44586: 0680 0005 dae8 addil #383720,%d0
4458c: 2240 moveal %d0,%a1
4458e: 2051 moveal %a1@,%a0
44590: 4a88 tstl %a0
44592: 6700 02a6 beqw 4483a <rtems_termios_ioctl+0x33a>
sc = rtems_termios_linesw[tty->t_line].l_ioctl(tty,args);
44596: 2f0b movel %a3,%sp@-
44598: 2f0a movel %a2,%sp@-
4459a: 4e90 jsr %a0@
4459c: 508f addql #8,%sp
4459e: 2400 movel %d0,%d2
*(int *)args->buffer = tty->ccount - tty->cindex + rawnc;
}
break;
}
rtems_semaphore_release (tty->osem);
445a0: 2f2a 0018 movel %a2@(24),%sp@-
445a4: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
args->ioctl_return = sc;
return sc;
445aa: 588f addql #4,%sp
445ac: 60ae bras 4455c <rtems_termios_ioctl+0x5c>
case RTEMS_IO_SNDWAKEUP:
tty->tty_snd = *wakeup;
break;
case RTEMS_IO_RCVWAKEUP:
tty->tty_rcv = *wakeup;
445ae: 2014 movel %a4@,%d0 <== NOT EXECUTED
445b0: 222c 0004 movel %a4@(4),%d1 <== NOT EXECUTED
445b4: 2540 00dc movel %d0,%a2@(220) <== NOT EXECUTED
445b8: 2541 00e0 movel %d1,%a2@(224) <== NOT EXECUTED
*(int *)args->buffer = tty->ccount - tty->cindex + rawnc;
}
break;
}
rtems_semaphore_release (tty->osem);
445bc: 2f2a 0018 movel %a2@(24),%sp@- <== NOT EXECUTED
445c0: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release> <== NOT EXECUTED
args->ioctl_return = sc;
return sc;
445c6: 588f addql #4,%sp <== NOT EXECUTED
445c8: 6092 bras 4455c <rtems_termios_ioctl+0x5c> <== NOT EXECUTED
case TIOCGETD:
*(int*)(args->buffer)=tty->t_line;
break;
#endif
case FIONREAD: {
int rawnc = tty->rawInBuf.Tail - tty->rawInBuf.Head;
445ca: 202a 0060 movel %a2@(96),%d0 <== NOT EXECUTED
445ce: 222a 005c movel %a2@(92),%d1 <== NOT EXECUTED
445d2: 9081 subl %d1,%d0 <== NOT EXECUTED
if ( rawnc < 0 )
445d4: 6b00 02ae bmiw 44884 <rtems_termios_ioctl+0x384> <== NOT EXECUTED
rawnc += tty->rawInBuf.Size;
/* Half guess that this is the right operation */
*(int *)args->buffer = tty->ccount - tty->cindex + rawnc;
445d8: 222a 0020 movel %a2@(32),%d1 <== NOT EXECUTED
445dc: 92aa 0024 subl %a2@(36),%d1 <== NOT EXECUTED
445e0: d280 addl %d0,%d1 <== NOT EXECUTED
445e2: 206b 0008 moveal %a3@(8),%a0 <== NOT EXECUTED
445e6: 2081 movel %d1,%a0@ <== NOT EXECUTED
}
break;
}
rtems_semaphore_release (tty->osem);
445e8: 2f2a 0018 movel %a2@(24),%sp@- <== NOT EXECUTED
445ec: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release> <== NOT EXECUTED
args->ioctl_return = sc;
return sc;
445f2: 588f addql #4,%sp <== NOT EXECUTED
445f4: 6000 ff66 braw 4455c <rtems_termios_ioctl+0x5c> <== NOT EXECUTED
case RTEMS_IO_GET_ATTRIBUTES:
*(struct termios *)args->buffer = tty->termios;
break;
case RTEMS_IO_SET_ATTRIBUTES:
tty->termios = *(struct termios *)args->buffer;
445f8: 206b 0008 moveal %a3@(8),%a0
445fc: 49ea 0030 lea %a2@(48),%a4
44600: 2898 movel %a0@+,%a4@
44602: 2558 0034 movel %a0@+,%a2@(52)
44606: 2558 0038 movel %a0@+,%a2@(56)
4460a: 2558 003c movel %a0@+,%a2@(60)
4460e: 2558 0040 movel %a0@+,%a2@(64)
44612: 2558 0044 movel %a0@+,%a2@(68)
44616: 2558 0048 movel %a0@+,%a2@(72)
4461a: 2558 004c movel %a0@+,%a2@(76)
/*
* check for flow control options to be switched off
*/
/* check for outgoing XON/XOFF flow control switched off */
if (( tty->flow_ctrl & FL_MDXON) &&
4461e: 202a 00b8 movel %a2@(184),%d0
case RTEMS_IO_GET_ATTRIBUTES:
*(struct termios *)args->buffer = tty->termios;
break;
case RTEMS_IO_SET_ATTRIBUTES:
tty->termios = *(struct termios *)args->buffer;
44622: 2550 0050 movel %a0@,%a2@(80)
/*
* check for flow control options to be switched off
*/
/* check for outgoing XON/XOFF flow control switched off */
if (( tty->flow_ctrl & FL_MDXON) &&
44626: 0800 0009 btst #9,%d0
4462a: 6746 beqs 44672 <rtems_termios_ioctl+0x172>
!(tty->termios.c_iflag & IXON)) {
4462c: 202a 0030 movel %a2@(48),%d0
44630: 0280 0000 0400 andil #1024,%d0
/*
* check for flow control options to be switched off
*/
/* check for outgoing XON/XOFF flow control switched off */
if (( tty->flow_ctrl & FL_MDXON) &&
44636: 663a bnes 44672 <rtems_termios_ioctl+0x172> <== ALWAYS TAKEN
!(tty->termios.c_iflag & IXON)) {
/* clear related flags in flow_ctrl */
tty->flow_ctrl &= ~(FL_MDXON | FL_ORCVXOF);
44638: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
4463c: 0280 ffff fdef andil #-529,%d0 <== NOT EXECUTED
44642: 2540 00b8 movel %d0,%a2@(184) <== NOT EXECUTED
/* has output been stopped due to received XOFF? */
if (tty->flow_ctrl & FL_OSTOP) {
44646: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
4464a: 0800 0005 btst #5,%d0 <== NOT EXECUTED
4464e: 6722 beqs 44672 <rtems_termios_ioctl+0x172> <== NOT EXECUTED
/* disable interrupts */
rtems_interrupt_disable(level);
44650: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
44656: 40c3 movew %sr,%d3 <== NOT EXECUTED
44658: 8083 orl %d3,%d0 <== NOT EXECUTED
4465a: 46c0 movew %d0,%sr <== NOT EXECUTED
tty->flow_ctrl &= ~FL_OSTOP;
4465c: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
44660: 72df moveq #-33,%d1 <== NOT EXECUTED
44662: c081 andl %d1,%d0 <== NOT EXECUTED
44664: 2540 00b8 movel %d0,%a2@(184) <== NOT EXECUTED
/* check for chars in output buffer (or rob_state?) */
if (tty->rawOutBufState != rob_idle) {
44668: 4aaa 0094 tstl %a2@(148) <== NOT EXECUTED
4466c: 6600 0240 bnew 448ae <rtems_termios_ioctl+0x3ae> <== NOT EXECUTED
/* if chars available, call write function... */
(*tty->device.write)(
tty->minor, &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail],1);
}
/* reenable interrupts */
rtems_interrupt_enable(level);
44670: 46c3 movew %d3,%sr <== NOT EXECUTED
}
}
/* check for incoming XON/XOFF flow control switched off */
if (( tty->flow_ctrl & FL_MDXOF) && !(tty->termios.c_iflag & IXOFF)) {
44672: 202a 00b8 movel %a2@(184),%d0
44676: 0800 000a btst #10,%d0
4467a: 6724 beqs 446a0 <rtems_termios_ioctl+0x1a0> <== ALWAYS TAKEN
4467c: 202a 0030 movel %a2@(48),%d0 <== NOT EXECUTED
44680: 0280 0000 1000 andil #4096,%d0 <== NOT EXECUTED
44686: 6618 bnes 446a0 <rtems_termios_ioctl+0x1a0> <== NOT EXECUTED
/* clear related flags in flow_ctrl */
tty->flow_ctrl &= ~(FL_MDXOF);
44688: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
/* FIXME: what happens, if we had sent XOFF but not yet XON? */
tty->flow_ctrl &= ~(FL_ISNTXOF);
4468c: 76fd moveq #-3,%d3 <== NOT EXECUTED
}
}
/* check for incoming XON/XOFF flow control switched off */
if (( tty->flow_ctrl & FL_MDXOF) && !(tty->termios.c_iflag & IXOFF)) {
/* clear related flags in flow_ctrl */
tty->flow_ctrl &= ~(FL_MDXOF);
4468e: 0880 000a bclr #10,%d0 <== NOT EXECUTED
44692: 2540 00b8 movel %d0,%a2@(184) <== NOT EXECUTED
/* FIXME: what happens, if we had sent XOFF but not yet XON? */
tty->flow_ctrl &= ~(FL_ISNTXOF);
44696: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
4469a: c083 andl %d3,%d0 <== NOT EXECUTED
4469c: 2540 00b8 movel %d0,%a2@(184) <== NOT EXECUTED
}
/* check for incoming RTS/CTS flow control switched off */
if (( tty->flow_ctrl & FL_MDRTS) && !(tty->termios.c_cflag & CRTSCTS)) {
446a0: 202a 00b8 movel %a2@(184),%d0
446a4: 0800 0008 btst #8,%d0
446a8: 6700 0186 beqw 44830 <rtems_termios_ioctl+0x330>
446ac: 222a 0038 movel %a2@(56),%d1 <== NOT EXECUTED
446b0: 6d00 01ec bltw 4489e <rtems_termios_ioctl+0x39e> <== NOT EXECUTED
/* clear related flags in flow_ctrl */
tty->flow_ctrl &= ~(FL_MDRTS);
446b4: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
446b8: 0880 0008 bclr #8,%d0 <== NOT EXECUTED
446bc: 2540 00b8 movel %d0,%a2@(184) <== NOT EXECUTED
/* restart remote Tx, if it was stopped */
if ((tty->flow_ctrl & FL_IRTSOFF) && (tty->device.startRemoteTx != NULL)) {
446c0: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
446c4: 44c0 movew %d0,%ccr <== NOT EXECUTED
446c6: 6614 bnes 446dc <rtems_termios_ioctl+0x1dc> <== NOT EXECUTED
446c8: 206a 00b0 moveal %a2@(176),%a0 <== NOT EXECUTED
446cc: 4a88 tstl %a0 <== NOT EXECUTED
446ce: 670c beqs 446dc <rtems_termios_ioctl+0x1dc> <== NOT EXECUTED
tty->device.startRemoteTx(tty->minor);
446d0: 2f2a 0010 movel %a2@(16),%sp@- <== NOT EXECUTED
446d4: 4e90 jsr %a0@ <== NOT EXECUTED
446d6: 222a 0038 movel %a2@(56),%d1 <== NOT EXECUTED
446da: 588f addql #4,%sp <== NOT EXECUTED
}
tty->flow_ctrl &= ~(FL_IRTSOFF);
446dc: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
446e0: 76fb moveq #-5,%d3 <== NOT EXECUTED
446e2: c083 andl %d3,%d0 <== NOT EXECUTED
446e4: 2540 00b8 movel %d0,%a2@(184) <== 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) {
446e8: 4a81 tstl %d1 <== NOT EXECUTED
446ea: 6d00 01b2 bltw 4489e <rtems_termios_ioctl+0x39e> <== NOT EXECUTED
tty->flow_ctrl |= FL_MDRTS;
}
/* check for incoming XON/XOF flow control switched on */
if (tty->termios.c_iflag & IXOFF) {
446ee: 202a 0030 movel %a2@(48),%d0
446f2: 0800 000c btst #12,%d0
446f6: 670c beqs 44704 <rtems_termios_ioctl+0x204> <== ALWAYS TAKEN
tty->flow_ctrl |= FL_MDXOF;
446f8: 222a 00b8 movel %a2@(184),%d1 <== NOT EXECUTED
446fc: 08c1 000a bset #10,%d1 <== NOT EXECUTED
44700: 2541 00b8 movel %d1,%a2@(184) <== NOT EXECUTED
}
/* check for outgoing XON/XOF flow control switched on */
if (tty->termios.c_iflag & IXON) {
44704: 0800 000a btst #10,%d0
44708: 670c beqs 44716 <rtems_termios_ioctl+0x216>
tty->flow_ctrl |= FL_MDXON;
4470a: 202a 00b8 movel %a2@(184),%d0
4470e: 08c0 0009 bset #9,%d0
44712: 2540 00b8 movel %d0,%a2@(184)
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) {
44716: 7002 moveq #2,%d0
44718: c0aa 003c andl %a2@(60),%d0
4471c: 6700 012e beqw 4484c <rtems_termios_ioctl+0x34c>
tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT;
else
tty->rawInBufSemaphoreFirstTimeout = tty->vtimeTicks;
} else {
if (tty->termios.c_cc[VMIN]) {
tty->rawInBufSemaphoreOptions = RTEMS_WAIT;
44720: 42aa 006c clrl %a2@(108)
tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT;
44724: 42aa 0070 clrl %a2@(112)
tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT;
44728: 42aa 0074 clrl %a2@(116)
} else {
tty->rawInBufSemaphoreOptions = RTEMS_NO_WAIT;
}
}
}
if (tty->device.setAttributes)
4472c: 206a 00a8 moveal %a2@(168),%a0
44730: 4a88 tstl %a0
44732: 6700 fe1c beqw 44550 <rtems_termios_ioctl+0x50>
(*tty->device.setAttributes)(tty->minor, &tty->termios);
44736: 2f0c movel %a4,%sp@-
44738: 2f2a 0010 movel %a2@(16),%sp@-
4473c: 4e90 jsr %a0@
4473e: 508f addql #8,%sp
*(int *)args->buffer = tty->ccount - tty->cindex + rawnc;
}
break;
}
rtems_semaphore_release (tty->osem);
44740: 2f2a 0018 movel %a2@(24),%sp@-
44744: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
args->ioctl_return = sc;
return sc;
4474a: 588f addql #4,%sp
4474c: 6000 fe0e braw 4455c <rtems_termios_ioctl+0x5c>
case RTEMS_IO_TCDRAIN:
drainOutput (tty);
break;
case RTEMS_IO_SNDWAKEUP:
tty->tty_snd = *wakeup;
44750: 2014 movel %a4@,%d0 <== NOT EXECUTED
44752: 222c 0004 movel %a4@(4),%d1 <== NOT EXECUTED
44756: 2540 00d4 movel %d0,%a2@(212) <== NOT EXECUTED
4475a: 2541 00d8 movel %d1,%a2@(216) <== NOT EXECUTED
*(int *)args->buffer = tty->ccount - tty->cindex + rawnc;
}
break;
}
rtems_semaphore_release (tty->osem);
4475e: 2f2a 0018 movel %a2@(24),%sp@- <== NOT EXECUTED
44762: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release> <== NOT EXECUTED
args->ioctl_return = sc;
return sc;
44768: 588f addql #4,%sp <== NOT EXECUTED
4476a: 6000 fdf0 braw 4455c <rtems_termios_ioctl+0x5c> <== NOT EXECUTED
sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL) {
args->ioctl_return = sc;
return sc;
}
switch (args->command) {
4476e: 123c 0001 moveb #1,%d1
44772: b280 cmpl %d0,%d1
44774: 6600 fe0a bnew 44580 <rtems_termios_ioctl+0x80>
sc = RTEMS_INVALID_NUMBER;
}
break;
case RTEMS_IO_GET_ATTRIBUTES:
*(struct termios *)args->buffer = tty->termios;
44778: 206b 0008 moveal %a3@(8),%a0
4477c: 20ea 0030 movel %a2@(48),%a0@+
44780: 20ea 0034 movel %a2@(52),%a0@+
44784: 20ea 0038 movel %a2@(56),%a0@+
44788: 20ea 003c movel %a2@(60),%a0@+
4478c: 20ea 0040 movel %a2@(64),%a0@+
44790: 20ea 0044 movel %a2@(68),%a0@+
44794: 20ea 0048 movel %a2@(72),%a0@+
44798: 20ea 004c movel %a2@(76),%a0@+
4479c: 20aa 0050 movel %a2@(80),%a0@
*(int *)args->buffer = tty->ccount - tty->cindex + rawnc;
}
break;
}
rtems_semaphore_release (tty->osem);
447a0: 2f2a 0018 movel %a2@(24),%sp@-
447a4: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
args->ioctl_return = sc;
return sc;
447aa: 588f addql #4,%sp
447ac: 6000 fdae braw 4455c <rtems_termios_ioctl+0x5c>
sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL) {
args->ioctl_return = sc;
return sc;
}
switch (args->command) {
447b0: 0c80 4004 741a cmpil #1074033690,%d0
447b6: 6760 beqs 44818 <rtems_termios_ioctl+0x318>
447b8: 0c80 8004 741b cmpil #-2147191781,%d0
447be: 6600 fdc0 bnew 44580 <rtems_termios_ioctl+0x80>
#if 1 /* FIXME */
case TIOCSETD:
/*
* close old line discipline
*/
if (rtems_termios_linesw[tty->t_line].l_close != NULL) {
447c2: 202a 00cc movel %a2@(204),%d0
447c6: eb88 lsll #5,%d0
447c8: 0680 0005 dad4 addil #383700,%d0
447ce: 2240 moveal %d0,%a1
447d0: 2051 moveal %a1@,%a0
447d2: 4a88 tstl %a0
447d4: 6708 beqs 447de <rtems_termios_ioctl+0x2de>
sc = rtems_termios_linesw[tty->t_line].l_close(tty);
447d6: 2f0a movel %a2,%sp@-
447d8: 4e90 jsr %a0@
447da: 588f addql #4,%sp
447dc: 2400 movel %d0,%d2
}
tty->t_line=*(int*)(args->buffer);
447de: 206b 0008 moveal %a3@(8),%a0
447e2: 2010 movel %a0@,%d0
tty->t_sc = NULL; /* ensure that no more valid data */
/*
* open new line discipline
*/
if (rtems_termios_linesw[tty->t_line].l_open != NULL) {
447e4: 2200 movel %d0,%d1
447e6: 41f9 0005 dad0 lea 5dad0 <rtems_termios_linesw>,%a0
447ec: eb89 lsll #5,%d1
* close old line discipline
*/
if (rtems_termios_linesw[tty->t_line].l_close != NULL) {
sc = rtems_termios_linesw[tty->t_line].l_close(tty);
}
tty->t_line=*(int*)(args->buffer);
447ee: 2540 00cc movel %d0,%a2@(204)
tty->t_sc = NULL; /* ensure that no more valid data */
/*
* open new line discipline
*/
if (rtems_termios_linesw[tty->t_line].l_open != NULL) {
447f2: 2070 1800 moveal %a0@(00000000,%d1:l),%a0
*/
if (rtems_termios_linesw[tty->t_line].l_close != NULL) {
sc = rtems_termios_linesw[tty->t_line].l_close(tty);
}
tty->t_line=*(int*)(args->buffer);
tty->t_sc = NULL; /* ensure that no more valid data */
447f6: 42aa 00d0 clrl %a2@(208)
/*
* open new line discipline
*/
if (rtems_termios_linesw[tty->t_line].l_open != NULL) {
447fa: 4a88 tstl %a0
447fc: 6700 fd52 beqw 44550 <rtems_termios_ioctl+0x50>
sc = rtems_termios_linesw[tty->t_line].l_open(tty);
44800: 2f0a movel %a2,%sp@-
44802: 4e90 jsr %a0@
44804: 588f addql #4,%sp
44806: 2400 movel %d0,%d2
*(int *)args->buffer = tty->ccount - tty->cindex + rawnc;
}
break;
}
rtems_semaphore_release (tty->osem);
44808: 2f2a 0018 movel %a2@(24),%sp@-
4480c: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
args->ioctl_return = sc;
return sc;
44812: 588f addql #4,%sp
44814: 6000 fd46 braw 4455c <rtems_termios_ioctl+0x5c>
if (rtems_termios_linesw[tty->t_line].l_open != NULL) {
sc = rtems_termios_linesw[tty->t_line].l_open(tty);
}
break;
case TIOCGETD:
*(int*)(args->buffer)=tty->t_line;
44818: 206b 0008 moveal %a3@(8),%a0
4481c: 20aa 00cc movel %a2@(204),%a0@
*(int *)args->buffer = tty->ccount - tty->cindex + rawnc;
}
break;
}
rtems_semaphore_release (tty->osem);
44820: 2f2a 0018 movel %a2@(24),%sp@-
44824: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
args->ioctl_return = sc;
return sc;
4482a: 588f addql #4,%sp
4482c: 6000 fd2e braw 4455c <rtems_termios_ioctl+0x5c>
/* FIXME: what happens, if we had sent XOFF but not yet XON? */
tty->flow_ctrl &= ~(FL_ISNTXOF);
}
/* check for incoming RTS/CTS flow control switched off */
if (( tty->flow_ctrl & FL_MDRTS) && !(tty->termios.c_cflag & CRTSCTS)) {
44830: 222a 0038 movel %a2@(56),%d1
/*
* check for flow control options to be switched on
*/
/* check for incoming RTS/CTS flow control switched on */
if (tty->termios.c_cflag & CRTSCTS) {
44834: 6c00 feb8 bgew 446ee <rtems_termios_ioctl+0x1ee>
44838: 6064 bras 4489e <rtems_termios_ioctl+0x39e> <== NOT EXECUTED
*(int *)args->buffer = tty->ccount - tty->cindex + rawnc;
}
break;
}
rtems_semaphore_release (tty->osem);
4483a: 2f2a 0018 movel %a2@(24),%sp@- <== 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;
4483e: 740a moveq #10,%d2 <== NOT EXECUTED
*(int *)args->buffer = tty->ccount - tty->cindex + rawnc;
}
break;
}
rtems_semaphore_release (tty->osem);
44840: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release> <== NOT EXECUTED
args->ioctl_return = sc;
return sc;
44846: 588f addql #4,%sp <== NOT EXECUTED
44848: 6000 fd12 braw 4455c <rtems_termios_ioctl+0x5c> <== NOT EXECUTED
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] *
4484c: 4283 clrl %d3
4484e: 162a 0046 moveb %a2@(70),%d3
rtems_clock_get_ticks_per_second() / 10;
44852: 4eb9 0004 5f0c jsr 45f0c <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] *
44858: 4c03 0800 mulsl %d3,%d0
rtems_clock_get_ticks_per_second() / 10;
4485c: 760a moveq #10,%d3
4485e: 4c43 0000 remul %d3,%d0,%d0
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] *
44862: 2540 0054 movel %d0,%a2@(84)
rtems_clock_get_ticks_per_second() / 10;
if (tty->termios.c_cc[VTIME]) {
44866: 4a2a 0046 tstb %a2@(70)
4486a: 6764 beqs 448d0 <rtems_termios_ioctl+0x3d0> <== ALWAYS TAKEN
tty->rawInBufSemaphoreOptions = RTEMS_WAIT;
4486c: 42aa 006c clrl %a2@(108) <== NOT EXECUTED
tty->rawInBufSemaphoreTimeout = tty->vtimeTicks;
44870: 2540 0070 movel %d0,%a2@(112) <== NOT EXECUTED
if (tty->termios.c_cc[VMIN])
44874: 4a2a 0047 tstb %a2@(71) <== NOT EXECUTED
44878: 6600 feae bnew 44728 <rtems_termios_ioctl+0x228> <== NOT EXECUTED
tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT;
else
tty->rawInBufSemaphoreFirstTimeout = tty->vtimeTicks;
4487c: 2540 0074 movel %d0,%a2@(116) <== NOT EXECUTED
44880: 6000 feaa braw 4472c <rtems_termios_ioctl+0x22c> <== NOT EXECUTED
break;
#endif
case FIONREAD: {
int rawnc = tty->rawInBuf.Tail - tty->rawInBuf.Head;
if ( rawnc < 0 )
rawnc += tty->rawInBuf.Size;
44884: 222a 0064 movel %a2@(100),%d1 <== NOT EXECUTED
44888: d081 addl %d1,%d0 <== NOT EXECUTED
/* Half guess that this is the right operation */
*(int *)args->buffer = tty->ccount - tty->cindex + rawnc;
4488a: 222a 0020 movel %a2@(32),%d1 <== NOT EXECUTED
4488e: 92aa 0024 subl %a2@(36),%d1 <== NOT EXECUTED
44892: d280 addl %d0,%d1 <== NOT EXECUTED
44894: 206b 0008 moveal %a3@(8),%a0 <== NOT EXECUTED
44898: 2081 movel %d1,%a0@ <== NOT EXECUTED
4489a: 6000 fd4c braw 445e8 <rtems_termios_ioctl+0xe8> <== 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) {
tty->flow_ctrl |= FL_MDRTS;
4489e: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
448a2: 08c0 0008 bset #8,%d0 <== NOT EXECUTED
448a6: 2540 00b8 movel %d0,%a2@(184) <== NOT EXECUTED
448aa: 6000 fe42 braw 446ee <rtems_termios_ioctl+0x1ee> <== NOT EXECUTED
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)(
tty->minor, &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail],1);
448ae: 202a 0084 movel %a2@(132),%d0 <== 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)(
448b2: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
448b6: d0aa 007c addl %a2@(124),%d0 <== NOT EXECUTED
448ba: 2f00 movel %d0,%sp@- <== NOT EXECUTED
448bc: 2f2a 0010 movel %a2@(16),%sp@- <== NOT EXECUTED
448c0: 206a 00a4 moveal %a2@(164),%a0 <== NOT EXECUTED
448c4: 4e90 jsr %a0@ <== NOT EXECUTED
448c6: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
tty->minor, &tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail],1);
}
/* reenable interrupts */
rtems_interrupt_enable(level);
448ca: 46c3 movew %d3,%sr <== NOT EXECUTED
448cc: 6000 fda4 braw 44672 <rtems_termios_ioctl+0x172> <== NOT EXECUTED
if (tty->termios.c_cc[VMIN])
tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT;
else
tty->rawInBufSemaphoreFirstTimeout = tty->vtimeTicks;
} else {
if (tty->termios.c_cc[VMIN]) {
448d0: 4a2a 0047 tstb %a2@(71)
448d4: 6600 fe4a bnew 44720 <rtems_termios_ioctl+0x220>
tty->rawInBufSemaphoreOptions = RTEMS_WAIT;
tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT;
tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT;
} else {
tty->rawInBufSemaphoreOptions = RTEMS_NO_WAIT;
448d8: 7001 moveq #1,%d0
448da: 2540 006c movel %d0,%a2@(108)
448de: 6000 fe4c braw 4472c <rtems_termios_ioctl+0x22c>
00045818 <rtems_termios_number_to_baud>:
#include <rtems/termiostypes.h>
int rtems_termios_number_to_baud(
int32_t baud
)
{
45818: 4e56 0000 linkw %fp,#0
4581c: 222e 0008 movel %fp@(8),%d1
int termios_baud;
switch (baud) {
45820: 0c81 0000 04b0 cmpil #1200,%d1
45826: 6700 011c beqw 45944 <rtems_termios_number_to_baud+0x12c>
4582a: 6f3c bles 45868 <rtems_termios_number_to_baud+0x50>
4582c: 0c81 0000 4b00 cmpil #19200,%d1
45832: 6700 011c beqw 45950 <rtems_termios_number_to_baud+0x138>
45836: 6f60 bles 45898 <rtems_termios_number_to_baud+0x80>
case 4800: termios_baud = B4800; break;
case 9600: termios_baud = B9600; break;
case 19200: termios_baud = B19200; break;
case 38400: termios_baud = B38400; break;
case 57600: termios_baud = B57600; break;
case 115200: termios_baud = B115200; break;
45838: 203c 0000 1002 movel #4098,%d0
int32_t baud
)
{
int termios_baud;
switch (baud) {
4583e: 0c81 0001 c200 cmpil #115200,%d1
45844: 671e beqs 45864 <rtems_termios_number_to_baud+0x4c>
45846: 6f00 00a8 blew 458f0 <rtems_termios_number_to_baud+0xd8>
case 9600: termios_baud = B9600; break;
case 19200: termios_baud = B19200; break;
case 38400: termios_baud = B38400; break;
case 57600: termios_baud = B57600; break;
case 115200: termios_baud = B115200; break;
case 230400: termios_baud = B230400; break;
4584a: 203c 0000 1003 movel #4099,%d0
int32_t baud
)
{
int termios_baud;
switch (baud) {
45850: 0c81 0003 8400 cmpil #230400,%d1
45856: 670c beqs 45864 <rtems_termios_number_to_baud+0x4c>
case 19200: termios_baud = B19200; break;
case 38400: termios_baud = B38400; break;
case 57600: termios_baud = B57600; break;
case 115200: termios_baud = B115200; break;
case 230400: termios_baud = B230400; break;
case 460800: termios_baud = B460800; break;
45858: 5280 addql #1,%d0
int32_t baud
)
{
int termios_baud;
switch (baud) {
4585a: 0c81 0007 0800 cmpil #460800,%d1
45860: 6702 beqs 45864 <rtems_termios_number_to_baud+0x4c><== ALWAYS TAKEN
case 38400: termios_baud = B38400; break;
case 57600: termios_baud = B57600; break;
case 115200: termios_baud = B115200; break;
case 230400: termios_baud = B230400; break;
case 460800: termios_baud = B460800; break;
default: termios_baud = -1; break;
45862: 70ff moveq #-1,%d0
}
return termios_baud;
}
45864: 4e5e unlk %fp
45866: 4e75 rts
int32_t baud
)
{
int termios_baud;
switch (baud) {
45868: 0c81 0000 0086 cmpil #134,%d1
4586e: 6700 00da beqw 4594a <rtems_termios_number_to_baud+0x132>
45872: 6f46 bles 458ba <rtems_termios_number_to_baud+0xa2>
45874: 0c81 0000 00c8 cmpil #200,%d1
4587a: 6700 00b6 beqw 45932 <rtems_termios_number_to_baud+0x11a>
4587e: 6f56 bles 458d6 <rtems_termios_number_to_baud+0xbe>
45880: 0c81 0000 012c cmpil #300,%d1
45886: 6700 00a4 beqw 4592c <rtems_termios_number_to_baud+0x114>
4588a: 0c81 0000 0258 cmpil #600,%d1
45890: 66d0 bnes 45862 <rtems_termios_number_to_baud+0x4a><== NEVER TAKEN
case 110: termios_baud = B110; break;
case 134: termios_baud = B134; break;
case 150: termios_baud = B150; break;
case 200: termios_baud = B200; break;
case 300: termios_baud = B300; break;
case 600: termios_baud = B600; break;
45892: 7008 moveq #8,%d0
case 460800: termios_baud = B460800; break;
default: termios_baud = -1; break;
}
return termios_baud;
}
45894: 4e5e unlk %fp
45896: 4e75 rts
int32_t baud
)
{
int termios_baud;
switch (baud) {
45898: 0c81 0000 0960 cmpil #2400,%d1
4589e: 6700 009e beqw 4593e <rtems_termios_number_to_baud+0x126>
458a2: 6f66 bles 4590a <rtems_termios_number_to_baud+0xf2>
458a4: 0c81 0000 12c0 cmpil #4800,%d1
458aa: 676e beqs 4591a <rtems_termios_number_to_baud+0x102>
458ac: 0c81 0000 2580 cmpil #9600,%d1
458b2: 66ae bnes 45862 <rtems_termios_number_to_baud+0x4a><== NEVER TAKEN
case 600: termios_baud = B600; break;
case 1200: termios_baud = B1200; break;
case 1800: termios_baud = B1800; break;
case 2400: termios_baud = B2400; break;
case 4800: termios_baud = B4800; break;
case 9600: termios_baud = B9600; break;
458b4: 700d moveq #13,%d0
case 460800: termios_baud = B460800; break;
default: termios_baud = -1; break;
}
return termios_baud;
}
458b6: 4e5e unlk %fp
458b8: 4e75 rts
int32_t baud
)
{
int termios_baud;
switch (baud) {
458ba: 7032 moveq #50,%d0
458bc: b081 cmpl %d1,%d0
458be: 6778 beqs 45938 <rtems_termios_number_to_baud+0x120>
458c0: 6c22 bges 458e4 <rtems_termios_number_to_baud+0xcc>
458c2: 704b moveq #75,%d0
458c4: b081 cmpl %d1,%d0
458c6: 6758 beqs 45920 <rtems_termios_number_to_baud+0x108>
458c8: 103c 006e moveb #110,%d0
458cc: b081 cmpl %d1,%d0
458ce: 6692 bnes 45862 <rtems_termios_number_to_baud+0x4a><== NEVER TAKEN
case 0: termios_baud = B0; break;
case 50: termios_baud = B50; break;
case 75: termios_baud = B75; break;
case 110: termios_baud = B110; break;
458d0: 7003 moveq #3,%d0
case 460800: termios_baud = B460800; break;
default: termios_baud = -1; break;
}
return termios_baud;
}
458d2: 4e5e unlk %fp
458d4: 4e75 rts
int32_t baud
)
{
int termios_baud;
switch (baud) {
458d6: 0c81 0000 0096 cmpil #150,%d1
458dc: 6684 bnes 45862 <rtems_termios_number_to_baud+0x4a><== NEVER TAKEN
case 0: termios_baud = B0; break;
case 50: termios_baud = B50; break;
case 75: termios_baud = B75; break;
case 110: termios_baud = B110; break;
case 134: termios_baud = B134; break;
case 150: termios_baud = B150; break;
458de: 7005 moveq #5,%d0
case 460800: termios_baud = B460800; break;
default: termios_baud = -1; break;
}
return termios_baud;
}
458e0: 4e5e unlk %fp
458e2: 4e75 rts
int32_t baud
)
{
int termios_baud;
switch (baud) {
458e4: 4a81 tstl %d1
458e6: 6600 ff7a bnew 45862 <rtems_termios_number_to_baud+0x4a>
case 0: termios_baud = B0; break;
458ea: 4280 clrl %d0
case 460800: termios_baud = B460800; break;
default: termios_baud = -1; break;
}
return termios_baud;
}
458ec: 4e5e unlk %fp
458ee: 4e75 rts
int32_t baud
)
{
int termios_baud;
switch (baud) {
458f0: 0c81 0000 9600 cmpil #38400,%d1
458f6: 672e beqs 45926 <rtems_termios_number_to_baud+0x10e>
case 2400: termios_baud = B2400; break;
case 4800: termios_baud = B4800; break;
case 9600: termios_baud = B9600; break;
case 19200: termios_baud = B19200; break;
case 38400: termios_baud = B38400; break;
case 57600: termios_baud = B57600; break;
458f8: 5380 subql #1,%d0
int32_t baud
)
{
int termios_baud;
switch (baud) {
458fa: 0c81 0000 e100 cmpil #57600,%d1
45900: 6700 ff62 beqw 45864 <rtems_termios_number_to_baud+0x4c>
case 38400: termios_baud = B38400; break;
case 57600: termios_baud = B57600; break;
case 115200: termios_baud = B115200; break;
case 230400: termios_baud = B230400; break;
case 460800: termios_baud = B460800; break;
default: termios_baud = -1; break;
45904: 70ff moveq #-1,%d0 <== NOT EXECUTED
45906: 6000 ff5c braw 45864 <rtems_termios_number_to_baud+0x4c><== NOT EXECUTED
int32_t baud
)
{
int termios_baud;
switch (baud) {
4590a: 0c81 0000 0708 cmpil #1800,%d1
45910: 6600 ff50 bnew 45862 <rtems_termios_number_to_baud+0x4a>
case 150: termios_baud = B150; break;
case 200: termios_baud = B200; break;
case 300: termios_baud = B300; break;
case 600: termios_baud = B600; break;
case 1200: termios_baud = B1200; break;
case 1800: termios_baud = B1800; break;
45914: 700a moveq #10,%d0
case 460800: termios_baud = B460800; break;
default: termios_baud = -1; break;
}
return termios_baud;
}
45916: 4e5e unlk %fp
45918: 4e75 rts
case 300: termios_baud = B300; break;
case 600: termios_baud = B600; break;
case 1200: termios_baud = B1200; break;
case 1800: termios_baud = B1800; break;
case 2400: termios_baud = B2400; break;
case 4800: termios_baud = B4800; break;
4591a: 700c moveq #12,%d0
case 460800: termios_baud = B460800; break;
default: termios_baud = -1; break;
}
return termios_baud;
}
4591c: 4e5e unlk %fp
4591e: 4e75 rts
int termios_baud;
switch (baud) {
case 0: termios_baud = B0; break;
case 50: termios_baud = B50; break;
case 75: termios_baud = B75; break;
45920: 7002 moveq #2,%d0
case 460800: termios_baud = B460800; break;
default: termios_baud = -1; break;
}
return termios_baud;
}
45922: 4e5e unlk %fp
45924: 4e75 rts
case 1800: termios_baud = B1800; break;
case 2400: termios_baud = B2400; break;
case 4800: termios_baud = B4800; break;
case 9600: termios_baud = B9600; break;
case 19200: termios_baud = B19200; break;
case 38400: termios_baud = B38400; break;
45926: 700f moveq #15,%d0
case 460800: termios_baud = B460800; break;
default: termios_baud = -1; break;
}
return termios_baud;
}
45928: 4e5e unlk %fp
4592a: 4e75 rts
case 75: termios_baud = B75; break;
case 110: termios_baud = B110; break;
case 134: termios_baud = B134; break;
case 150: termios_baud = B150; break;
case 200: termios_baud = B200; break;
case 300: termios_baud = B300; break;
4592c: 7007 moveq #7,%d0
case 460800: termios_baud = B460800; break;
default: termios_baud = -1; break;
}
return termios_baud;
}
4592e: 4e5e unlk %fp
45930: 4e75 rts
case 50: termios_baud = B50; break;
case 75: termios_baud = B75; break;
case 110: termios_baud = B110; break;
case 134: termios_baud = B134; break;
case 150: termios_baud = B150; break;
case 200: termios_baud = B200; break;
45932: 7006 moveq #6,%d0
case 460800: termios_baud = B460800; break;
default: termios_baud = -1; break;
}
return termios_baud;
}
45934: 4e5e unlk %fp
45936: 4e75 rts
{
int termios_baud;
switch (baud) {
case 0: termios_baud = B0; break;
case 50: termios_baud = B50; break;
45938: 7001 moveq #1,%d0
case 460800: termios_baud = B460800; break;
default: termios_baud = -1; break;
}
return termios_baud;
}
4593a: 4e5e unlk %fp
4593c: 4e75 rts
case 200: termios_baud = B200; break;
case 300: termios_baud = B300; break;
case 600: termios_baud = B600; break;
case 1200: termios_baud = B1200; break;
case 1800: termios_baud = B1800; break;
case 2400: termios_baud = B2400; break;
4593e: 700b moveq #11,%d0
case 460800: termios_baud = B460800; break;
default: termios_baud = -1; break;
}
return termios_baud;
}
45940: 4e5e unlk %fp
45942: 4e75 rts
case 134: termios_baud = B134; break;
case 150: termios_baud = B150; break;
case 200: termios_baud = B200; break;
case 300: termios_baud = B300; break;
case 600: termios_baud = B600; break;
case 1200: termios_baud = B1200; break;
45944: 7009 moveq #9,%d0
case 460800: termios_baud = B460800; break;
default: termios_baud = -1; break;
}
return termios_baud;
}
45946: 4e5e unlk %fp
45948: 4e75 rts
switch (baud) {
case 0: termios_baud = B0; break;
case 50: termios_baud = B50; break;
case 75: termios_baud = B75; break;
case 110: termios_baud = B110; break;
case 134: termios_baud = B134; break;
4594a: 7004 moveq #4,%d0
case 460800: termios_baud = B460800; break;
default: termios_baud = -1; break;
}
return termios_baud;
}
4594c: 4e5e unlk %fp
4594e: 4e75 rts
case 1200: termios_baud = B1200; break;
case 1800: termios_baud = B1800; break;
case 2400: termios_baud = B2400; break;
case 4800: termios_baud = B4800; break;
case 9600: termios_baud = B9600; break;
case 19200: termios_baud = B19200; break;
45950: 700e moveq #14,%d0
case 460800: termios_baud = B460800; break;
default: termios_baud = -1; break;
}
return termios_baud;
}
45952: 4e5e unlk %fp
...
00043ef8 <rtems_termios_open>:
rtems_device_major_number major,
rtems_device_minor_number minor,
void *arg,
const rtems_termios_callbacks *callbacks
)
{
43ef8: 4e56 ffd8 linkw %fp,#-40
43efc: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
struct rtems_termios_tty *tty;
/*
* See if the device has already been opened
*/
sc = rtems_semaphore_obtain(
43f00: 42a7 clrl %sp@-
rtems_device_major_number major,
rtems_device_minor_number minor,
void *arg,
const rtems_termios_callbacks *callbacks
)
{
43f02: 242e 0008 movel %fp@(8),%d2
struct rtems_termios_tty *tty;
/*
* See if the device has already been opened
*/
sc = rtems_semaphore_obtain(
43f06: 42a7 clrl %sp@-
43f08: 2f39 0005 e30c movel 5e30c <rtems_termios_ttyMutex>,%sp@-
rtems_device_major_number major,
rtems_device_minor_number minor,
void *arg,
const rtems_termios_callbacks *callbacks
)
{
43f0e: 262e 000c movel %fp@(12),%d3
43f12: 266e 0010 moveal %fp@(16),%a3
struct rtems_termios_tty *tty;
/*
* See if the device has already been opened
*/
sc = rtems_semaphore_obtain(
43f16: 4eb9 0004 6648 jsr 46648 <rtems_semaphore_obtain>
rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
43f1c: 4fef 000c lea %sp@(12),%sp
struct rtems_termios_tty *tty;
/*
* See if the device has already been opened
*/
sc = rtems_semaphore_obtain(
43f20: 2800 movel %d0,%d4
rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
43f22: 6600 027e bnew 441a2 <rtems_termios_open+0x2aa>
return sc;
for (tty = rtems_termios_ttyHead ; tty != NULL ; tty = tty->forw) {
43f26: 2879 0005 e314 moveal 5e314 <rtems_termios_ttyHead>,%a4
43f2c: 4a8c tstl %a4
43f2e: 6710 beqs 43f40 <rtems_termios_open+0x48>
43f30: 244c moveal %a4,%a2
if ((tty->major == major) && (tty->minor == minor))
43f32: b4aa 000c cmpl %a2@(12),%d2
43f36: 6700 0276 beqw 441ae <rtems_termios_open+0x2b6>
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) {
43f3a: 2452 moveal %a2@,%a2
43f3c: 4a8a tstl %a2
43f3e: 66f2 bnes 43f32 <rtems_termios_open+0x3a> <== NEVER TAKEN
static char c = 'a';
/*
* Create a new device
*/
tty = calloc (1, sizeof (struct rtems_termios_tty));
43f40: 4878 00e8 pea e8 <DBL_MANT_DIG+0xb3>
43f44: 4878 0001 pea 1 <ADD>
43f48: 4eb9 0004 292c jsr 4292c <calloc>
if (tty == NULL) {
43f4e: 508f addql #8,%sp
static char c = 'a';
/*
* Create a new device
*/
tty = calloc (1, sizeof (struct rtems_termios_tty));
43f50: 2a40 moveal %d0,%a5
43f52: 2440 moveal %d0,%a2
if (tty == NULL) {
43f54: 4a80 tstl %d0
43f56: 6700 0346 beqw 4429e <rtems_termios_open+0x3a6>
return RTEMS_NO_MEMORY;
}
/*
* allocate raw input buffer
*/
tty->rawInBuf.Size = RAW_INPUT_BUFFER_SIZE;
43f5a: 41f9 0005 cd54 lea 5cd54 <rtems_termios_raw_input_size>,%a0
43f60: 2b50 0064 movel %a0@,%a5@(100)
tty->rawInBuf.theBuf = malloc (tty->rawInBuf.Size);
43f64: 2e3c 0004 30e8 movel #274664,%d7
43f6a: 2047 moveal %d7,%a0
43f6c: 202d 0064 movel %a5@(100),%d0
43f70: 2f00 movel %d0,%sp@-
43f72: 4e90 jsr %a0@
if (tty->rawInBuf.theBuf == NULL) {
43f74: 588f addql #4,%sp
}
/*
* allocate raw input buffer
*/
tty->rawInBuf.Size = RAW_INPUT_BUFFER_SIZE;
tty->rawInBuf.theBuf = malloc (tty->rawInBuf.Size);
43f76: 2a00 movel %d0,%d5
43f78: 2b40 0058 movel %d0,%a5@(88)
if (tty->rawInBuf.theBuf == NULL) {
43f7c: 6700 033c beqw 442ba <rtems_termios_open+0x3c2>
return RTEMS_NO_MEMORY;
}
/*
* allocate raw output buffer
*/
tty->rawOutBuf.Size = RAW_OUTPUT_BUFFER_SIZE;
43f80: 41f9 0005 cd58 lea 5cd58 <rtems_termios_raw_output_size>,%a0
43f86: 2b50 0088 movel %a0@,%a5@(136)
tty->rawOutBuf.theBuf = malloc (tty->rawOutBuf.Size);
43f8a: 2047 moveal %d7,%a0
43f8c: 202d 0088 movel %a5@(136),%d0
43f90: 2f00 movel %d0,%sp@-
43f92: 4e90 jsr %a0@
if (tty->rawOutBuf.theBuf == NULL) {
43f94: 588f addql #4,%sp
}
/*
* allocate raw output buffer
*/
tty->rawOutBuf.Size = RAW_OUTPUT_BUFFER_SIZE;
tty->rawOutBuf.theBuf = malloc (tty->rawOutBuf.Size);
43f96: 2c00 movel %d0,%d6
43f98: 2b40 007c movel %d0,%a5@(124)
if (tty->rawOutBuf.theBuf == NULL) {
43f9c: 6700 0340 beqw 442de <rtems_termios_open+0x3e6>
return RTEMS_NO_MEMORY;
}
/*
* allocate cooked buffer
*/
tty->cbuf = malloc (CBUFSIZE);
43fa0: 2f39 0005 cd50 movel 5cd50 <rtems_termios_cbufsize>,%sp@-
43fa6: 2047 moveal %d7,%a0
43fa8: 4e90 jsr %a0@
if (tty->cbuf == NULL) {
43faa: 588f addql #4,%sp
return RTEMS_NO_MEMORY;
}
/*
* allocate cooked buffer
*/
tty->cbuf = malloc (CBUFSIZE);
43fac: 2b40 001c movel %d0,%a5@(28)
if (tty->cbuf == NULL) {
43fb0: 6700 0358 beqw 4430a <rtems_termios_open+0x412>
return RTEMS_NO_MEMORY;
}
/*
* Initialize wakeup callbacks
*/
tty->tty_snd.sw_pfn = NULL;
43fb4: 42ad 00d4 clrl %a5@(212)
tty->tty_snd.sw_arg = NULL;
43fb8: 42ad 00d8 clrl %a5@(216)
tty->tty_rcv.sw_pfn = NULL;
43fbc: 42ad 00dc clrl %a5@(220)
tty->tty_rcv.sw_arg = NULL;
43fc0: 42ad 00e0 clrl %a5@(224)
tty->tty_rcvwakeup = 0;
43fc4: 42ad 00e4 clrl %a5@(228)
/*
* link tty
*/
tty->forw = rtems_termios_ttyHead;
43fc8: 2a8c movel %a4,%a5@
tty->back = NULL;
43fca: 42ad 0004 clrl %a5@(4)
if (rtems_termios_ttyHead != NULL)
43fce: 4a8c tstl %a4
43fd0: 6704 beqs 43fd6 <rtems_termios_open+0xde>
rtems_termios_ttyHead->back = tty;
43fd2: 294d 0004 movel %a5,%a4@(4)
rtems_termios_ttyHead = tty;
43fd6: 23cd 0005 e314 movel %a5,5e314 <rtems_termios_ttyHead>
if (rtems_termios_ttyTail == NULL)
43fdc: 4ab9 0005 e310 tstl 5e310 <rtems_termios_ttyTail>
43fe2: 6700 02b0 beqw 44294 <rtems_termios_open+0x39c>
tty->major = major;
/*
* Set up mutex semaphores
*/
sc = rtems_semaphore_create (
43fe6: 486d 0014 pea %a5@(20)
43fea: 49f9 0004 63ac lea 463ac <rtems_semaphore_create>,%a4
rtems_build_name ('T', 'R', 'i', c),
43ff0: 1039 0005 cd5c moveb 5cd5c <c.6180>,%d0
tty->major = major;
/*
* Set up mutex semaphores
*/
sc = rtems_semaphore_create (
43ff6: 42a7 clrl %sp@-
43ff8: 4878 0054 pea 54 <DBL_MANT_DIG+0x1f>
rtems_build_name ('T', 'R', 'i', c),
43ffc: 49c0 extbl %d0
tty->major = major;
/*
* Set up mutex semaphores
*/
sc = rtems_semaphore_create (
43ffe: 4878 0001 pea 1 <ADD>
44002: 0080 5452 6900 oril #1414686976,%d0
rtems_termios_ttyHead->back = tty;
rtems_termios_ttyHead = tty;
if (rtems_termios_ttyTail == NULL)
rtems_termios_ttyTail = tty;
tty->minor = minor;
44008: 2b43 0010 movel %d3,%a5@(16)
tty->major = major;
/*
* Set up mutex semaphores
*/
sc = rtems_semaphore_create (
4400c: 2f00 movel %d0,%sp@-
rtems_termios_ttyHead = tty;
if (rtems_termios_ttyTail == NULL)
rtems_termios_ttyTail = tty;
tty->minor = minor;
tty->major = major;
4400e: 2b42 000c movel %d2,%a5@(12)
/*
* Set up mutex semaphores
*/
sc = rtems_semaphore_create (
44012: 4e94 jsr %a4@
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)
44014: 4fef 0014 lea %sp@(20),%sp
44018: 4a80 tstl %d0
4401a: 6600 020a bnew 44226 <rtems_termios_open+0x32e>
rtems_fatal_error_occurred (sc);
sc = rtems_semaphore_create (
4401e: 486d 0018 pea %a5@(24)
rtems_build_name ('T', 'R', 'o', c),
44022: 1039 0005 cd5c moveb 5cd5c <c.6180>,%d0
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 (
44028: 42a7 clrl %sp@-
4402a: 4878 0054 pea 54 <DBL_MANT_DIG+0x1f>
rtems_build_name ('T', 'R', 'o', c),
4402e: 49c0 extbl %d0
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 (
44030: 4878 0001 pea 1 <ADD>
44034: 0080 5452 6f00 oril #1414688512,%d0
4403a: 2f00 movel %d0,%sp@-
4403c: 4e94 jsr %a4@
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)
4403e: 4fef 0014 lea %sp@(20),%sp
44042: 4a80 tstl %d0
44044: 6600 01e0 bnew 44226 <rtems_termios_open+0x32e>
rtems_fatal_error_occurred (sc);
sc = rtems_semaphore_create (
44048: 486d 008c pea %a5@(140)
rtems_build_name ('T', 'R', 'x', c),
4404c: 1039 0005 cd5c moveb 5cd5c <c.6180>,%d0
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 (
44052: 42a7 clrl %sp@-
44054: 4878 0020 pea 20 <OPER2+0xc>
rtems_build_name ('T', 'R', 'x', c),
44058: 49c0 extbl %d0
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 (
4405a: 0080 5452 7800 oril #1414690816,%d0
44060: 42a7 clrl %sp@-
44062: 2f00 movel %d0,%sp@-
44064: 4e94 jsr %a4@
rtems_build_name ('T', 'R', 'x', c),
0,
RTEMS_SIMPLE_BINARY_SEMAPHORE | RTEMS_FIFO,
RTEMS_NO_PRIORITY,
&tty->rawOutBuf.Semaphore);
if (sc != RTEMS_SUCCESSFUL)
44066: 4fef 0014 lea %sp@(20),%sp
4406a: 4a80 tstl %d0
4406c: 6600 01b8 bnew 44226 <rtems_termios_open+0x32e>
tty->rawOutBufState = rob_idle;
/*
* Set callbacks
*/
tty->device = *callbacks;
44070: 226e 0014 moveal %fp@(20),%a1
44074: 41ed 0098 lea %a5@(152),%a0
/*
* Create I/O tasks
*/
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
44078: 7002 moveq #2,%d0
tty->rawOutBufState = rob_idle;
/*
* Set callbacks
*/
tty->device = *callbacks;
4407a: 20d9 movel %a1@+,%a0@+
4407c: 20d9 movel %a1@+,%a0@+
4407e: 20d9 movel %a1@+,%a0@+
44080: 20d9 movel %a1@+,%a0@+
44082: 20d9 movel %a1@+,%a0@+
44084: 20d9 movel %a1@+,%a0@+
44086: 20d9 movel %a1@+,%a0@+
44088: 2091 movel %a1@,%a0@
RTEMS_SIMPLE_BINARY_SEMAPHORE | RTEMS_FIFO,
RTEMS_NO_PRIORITY,
&tty->rawOutBuf.Semaphore);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
tty->rawOutBufState = rob_idle;
4408a: 42ad 0094 clrl %a5@(148)
tty->device = *callbacks;
/*
* Create I/O tasks
*/
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
4408e: b0ad 00b4 cmpl %a5@(180),%d0
44092: 6700 019a beqw 4422e <rtems_termios_open+0x336>
&tty->rxTaskId);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
}
if ((tty->device.pollRead == NULL) ||
44096: 4aad 00a0 tstl %a5@(160)
4409a: 6700 0162 beqw 441fe <rtems_termios_open+0x306>
4409e: 7002 moveq #2,%d0
440a0: b0ad 00b4 cmpl %a5@(180),%d0
440a4: 6700 0158 beqw 441fe <rtems_termios_open+0x306>
tty->termios.c_cc[VDISCARD] = '\017';
tty->termios.c_cc[VWERASE] = '\027';
tty->termios.c_cc[VLNEXT] = '\026';
/* start with no flow control, clear flow control flags */
tty->flow_ctrl = 0;
440a8: 42ad 00b8 clrl %a5@(184)
/*
* set low/highwater mark for XON/XOFF support
*/
tty->lowwater = tty->rawInBuf.Size * 1/2;
440ac: 222d 0064 movel %a5@(100),%d1
tty->highwater = tty->rawInBuf.Size * 3/4;
440b0: 206d 0064 moveal %a5@(100),%a0
/* start with no flow control, clear flow control flags */
tty->flow_ctrl = 0;
/*
* set low/highwater mark for XON/XOFF support
*/
tty->lowwater = tty->rawInBuf.Size * 1/2;
440b4: e289 lsrl #1,%d1
tty->termios.c_oflag = OPOST | ONLCR | XTABS;
tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL;
tty->termios.c_lflag =
ISIG | ICANON | IEXTEN | ECHO | ECHOK | ECHOE | ECHOCTL;
tty->termios.c_cc[VINTR] = '\003';
440b6: 7c03 moveq #3,%d6
tty->lowwater = tty->rawInBuf.Size * 1/2;
tty->highwater = tty->rawInBuf.Size * 3/4;
/*
* Bump name characer
*/
if (c++ == 'z')
440b8: 1039 0005 cd5c moveb 5cd5c <c.6180>,%d0
/* start with no flow control, clear flow control flags */
tty->flow_ctrl = 0;
/*
* set low/highwater mark for XON/XOFF support
*/
tty->lowwater = tty->rawInBuf.Size * 1/2;
440be: 2b41 00bc movel %d1,%a5@(188)
tty->highwater = tty->rawInBuf.Size * 3/4;
/*
* Bump name characer
*/
if (c++ == 'z')
440c2: 49c0 extbl %d0
440c4: 2a00 movel %d0,%d5
440c6: 2240 moveal %d0,%a1
440c8: 5285 addql #1,%d5
tty->termios.c_oflag = OPOST | ONLCR | XTABS;
tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL;
tty->termios.c_lflag =
ISIG | ICANON | IEXTEN | ECHO | ECHOK | ECHOE | ECHOCTL;
tty->termios.c_cc[VINTR] = '\003';
440ca: 1b46 0041 moveb %d6,%a5@(65)
tty->termios.c_cc[VQUIT] = '\034';
440ce: 7c1c moveq #28,%d6
tty->flow_ctrl = 0;
/*
* set low/highwater mark for XON/XOFF support
*/
tty->lowwater = tty->rawInBuf.Size * 1/2;
tty->highwater = tty->rawInBuf.Size * 3/4;
440d0: 41f0 8a00 lea %a0@(00000000,%a0:l:2),%a0
tty->termios.c_cc[VINTR] = '\003';
tty->termios.c_cc[VQUIT] = '\034';
tty->termios.c_cc[VERASE] = '\177';
tty->termios.c_cc[VKILL] = '\025';
tty->termios.c_cc[VEOF] = '\004';
tty->termios.c_cc[VEOL] = '\000';
440d4: 4201 clrb %d1
tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL;
tty->termios.c_lflag =
ISIG | ICANON | IEXTEN | ECHO | ECHOK | ECHOE | ECHOCTL;
tty->termios.c_cc[VINTR] = '\003';
tty->termios.c_cc[VQUIT] = '\034';
440d6: 1b46 0042 moveb %d6,%a5@(66)
tty->termios.c_cc[VERASE] = '\177';
440da: 7c7f moveq #127,%d6
tty->flow_ctrl = 0;
/*
* set low/highwater mark for XON/XOFF support
*/
tty->lowwater = tty->rawInBuf.Size * 1/2;
tty->highwater = tty->rawInBuf.Size * 3/4;
440dc: 2008 movel %a0,%d0
440de: e488 lsrl #2,%d0
}
/*
* Set default parameters
*/
tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL;
440e0: 307c 2502 moveaw #9474,%a0
tty->termios.c_lflag =
ISIG | ICANON | IEXTEN | ECHO | ECHOK | ECHOE | ECHOCTL;
tty->termios.c_cc[VINTR] = '\003';
tty->termios.c_cc[VQUIT] = '\034';
tty->termios.c_cc[VERASE] = '\177';
440e4: 1b46 0043 moveb %d6,%a5@(67)
tty->termios.c_cc[VKILL] = '\025';
440e8: 7c15 moveq #21,%d6
tty->flow_ctrl = 0;
/*
* set low/highwater mark for XON/XOFF support
*/
tty->lowwater = tty->rawInBuf.Size * 1/2;
tty->highwater = tty->rawInBuf.Size * 3/4;
440ea: 2b40 00c0 movel %d0,%a5@(192)
ISIG | ICANON | IEXTEN | ECHO | ECHOK | ECHOE | ECHOCTL;
tty->termios.c_cc[VINTR] = '\003';
tty->termios.c_cc[VQUIT] = '\034';
tty->termios.c_cc[VERASE] = '\177';
tty->termios.c_cc[VKILL] = '\025';
440ee: 1b46 0044 moveb %d6,%a5@(68)
}
/*
* Set default parameters
*/
tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL;
440f2: 2b48 0030 movel %a0,%a5@(48)
tty->termios.c_cc[VINTR] = '\003';
tty->termios.c_cc[VQUIT] = '\034';
tty->termios.c_cc[VERASE] = '\177';
tty->termios.c_cc[VKILL] = '\025';
tty->termios.c_cc[VEOF] = '\004';
440f6: 7c04 moveq #4,%d6
tty->termios.c_cc[VEOL] = '\000';
tty->termios.c_cc[VEOL2] = '\000';
tty->termios.c_cc[VSTART] = '\021';
tty->termios.c_cc[VSTOP] = '\023';
440f8: 7013 moveq #19,%d0
tty->termios.c_cc[VINTR] = '\003';
tty->termios.c_cc[VQUIT] = '\034';
tty->termios.c_cc[VERASE] = '\177';
tty->termios.c_cc[VKILL] = '\025';
tty->termios.c_cc[VEOF] = '\004';
440fa: 1b46 0045 moveb %d6,%a5@(69)
tty->termios.c_cc[VEOL] = '\000';
tty->termios.c_cc[VEOL2] = '\000';
tty->termios.c_cc[VSTART] = '\021';
440fe: 7c11 moveq #17,%d6
tty->termios.c_cc[VINTR] = '\003';
tty->termios.c_cc[VQUIT] = '\034';
tty->termios.c_cc[VERASE] = '\177';
tty->termios.c_cc[VKILL] = '\025';
tty->termios.c_cc[VEOF] = '\004';
tty->termios.c_cc[VEOL] = '\000';
44100: 1b41 004c moveb %d1,%a5@(76)
tty->termios.c_cc[VEOL2] = '\000';
44104: 1b41 0051 moveb %d1,%a5@(81)
tty->termios.c_cc[VSTART] = '\021';
44108: 1b46 0049 moveb %d6,%a5@(73)
tty->termios.c_cc[VSTOP] = '\023';
tty->termios.c_cc[VSUSP] = '\032';
4410c: 721a moveq #26,%d1
tty->termios.c_cc[VREPRINT] = '\022';
4410e: 7c12 moveq #18,%d6
tty->termios.c_cc[VKILL] = '\025';
tty->termios.c_cc[VEOF] = '\004';
tty->termios.c_cc[VEOL] = '\000';
tty->termios.c_cc[VEOL2] = '\000';
tty->termios.c_cc[VSTART] = '\021';
tty->termios.c_cc[VSTOP] = '\023';
44110: 1b40 004a moveb %d0,%a5@(74)
tty->termios.c_cc[VSUSP] = '\032';
tty->termios.c_cc[VREPRINT] = '\022';
tty->termios.c_cc[VDISCARD] = '\017';
44114: 700f moveq #15,%d0
tty->termios.c_cc[VEOF] = '\004';
tty->termios.c_cc[VEOL] = '\000';
tty->termios.c_cc[VEOL2] = '\000';
tty->termios.c_cc[VSTART] = '\021';
tty->termios.c_cc[VSTOP] = '\023';
tty->termios.c_cc[VSUSP] = '\032';
44116: 1b41 004b moveb %d1,%a5@(75)
tty->termios.c_cc[VREPRINT] = '\022';
4411a: 1b46 004d moveb %d6,%a5@(77)
tty->termios.c_cc[VDISCARD] = '\017';
tty->termios.c_cc[VWERASE] = '\027';
4411e: 7217 moveq #23,%d1
tty->termios.c_cc[VLNEXT] = '\026';
44120: 7c16 moveq #22,%d6
tty->termios.c_cc[VEOL2] = '\000';
tty->termios.c_cc[VSTART] = '\021';
tty->termios.c_cc[VSTOP] = '\023';
tty->termios.c_cc[VSUSP] = '\032';
tty->termios.c_cc[VREPRINT] = '\022';
tty->termios.c_cc[VDISCARD] = '\017';
44122: 1b40 004e moveb %d0,%a5@(78)
/*
* Set default parameters
*/
tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL;
tty->termios.c_oflag = OPOST | ONLCR | XTABS;
44126: 203c 0000 1805 movel #6149,%d0
tty->termios.c_cc[VSTART] = '\021';
tty->termios.c_cc[VSTOP] = '\023';
tty->termios.c_cc[VSUSP] = '\032';
tty->termios.c_cc[VREPRINT] = '\022';
tty->termios.c_cc[VDISCARD] = '\017';
tty->termios.c_cc[VWERASE] = '\027';
4412c: 1b41 004f moveb %d1,%a5@(79)
tty->termios.c_cc[VLNEXT] = '\026';
44130: 1b46 0050 moveb %d6,%a5@(80)
/*
* Set default parameters
*/
tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL;
tty->termios.c_oflag = OPOST | ONLCR | XTABS;
44134: 2b40 0034 movel %d0,%a5@(52)
tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL;
44138: 223c 0000 08bd movel #2237,%d1
4413e: 2b41 0038 movel %d1,%a5@(56)
tty->termios.c_lflag =
44142: 2c3c 0000 823b movel #33339,%d6
tty->lowwater = tty->rawInBuf.Size * 1/2;
tty->highwater = tty->rawInBuf.Size * 3/4;
/*
* Bump name characer
*/
if (c++ == 'z')
44148: 303c 007a movew #122,%d0
4414c: 13c5 0005 cd5c moveb %d5,5cd5c <c.6180>
* Set default parameters
*/
tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL;
tty->termios.c_oflag = OPOST | ONLCR | XTABS;
tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL;
tty->termios.c_lflag =
44152: 2b46 003c movel %d6,%a5@(60)
tty->lowwater = tty->rawInBuf.Size * 1/2;
tty->highwater = tty->rawInBuf.Size * 3/4;
/*
* Bump name characer
*/
if (c++ == 'z')
44156: b089 cmpl %a1,%d0
44158: 6608 bnes 44162 <rtems_termios_open+0x26a> <== ALWAYS TAKEN
c = 'a';
4415a: 7261 moveq #97,%d1 <== NOT EXECUTED
4415c: 13c1 0005 cd5c moveb %d1,5cd5c <c.6180> <== NOT EXECUTED
}
args->iop->data1 = tty;
if (!tty->refcount++) {
44162: 202a 0008 movel %a2@(8),%d0
44166: 2c00 movel %d0,%d6
44168: 5286 addql #1,%d6
*/
if (c++ == 'z')
c = 'a';
}
args->iop->data1 = tty;
4416a: 2053 moveal %a3@,%a0
4416c: 214a 0034 movel %a2,%a0@(52)
if (!tty->refcount++) {
44170: 2546 0008 movel %d6,%a2@(8)
44174: 4a80 tstl %d0
44176: 661c bnes 44194 <rtems_termios_open+0x29c>
if (tty->device.firstOpen)
44178: 206a 0098 moveal %a2@(152),%a0
4417c: 4a88 tstl %a0
4417e: 670c beqs 4418c <rtems_termios_open+0x294>
(*tty->device.firstOpen)(major, minor, arg);
44180: 2f0b movel %a3,%sp@-
44182: 2f03 movel %d3,%sp@-
44184: 2f02 movel %d2,%sp@-
44186: 4e90 jsr %a0@
44188: 4fef 000c lea %sp@(12),%sp
/*
* start I/O tasks, if needed
*/
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
4418c: 7002 moveq #2,%d0
4418e: b0aa 00b4 cmpl %a2@(180),%d0
44192: 672c beqs 441c0 <rtems_termios_open+0x2c8>
tty->txTaskId, rtems_termios_txdaemon, (rtems_task_argument)tty);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
}
}
rtems_semaphore_release (rtems_termios_ttyMutex);
44194: 2f39 0005 e30c movel 5e30c <rtems_termios_ttyMutex>,%sp@-
4419a: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
return RTEMS_SUCCESSFUL;
441a0: 588f addql #4,%sp
}
441a2: 2004 movel %d4,%d0
441a4: 4cee 3cfc ffd8 moveml %fp@(-40),%d2-%d7/%a2-%a5
441aa: 4e5e unlk %fp
441ac: 4e75 rts
rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
return sc;
for (tty = rtems_termios_ttyHead ; tty != NULL ; tty = tty->forw) {
if ((tty->major == major) && (tty->minor == minor))
441ae: b6aa 0010 cmpl %a2@(16),%d3
441b2: 67ae beqs 44162 <rtems_termios_open+0x26a> <== ALWAYS TAKEN
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) {
441b4: 2452 moveal %a2@,%a2 <== NOT EXECUTED
441b6: 4a8a tstl %a2 <== NOT EXECUTED
441b8: 6600 fd78 bnew 43f32 <rtems_termios_open+0x3a> <== NOT EXECUTED
441bc: 6000 fd82 braw 43f40 <rtems_termios_open+0x48> <== NOT EXECUTED
/*
* start I/O tasks, if needed
*/
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
sc = rtems_task_start(
441c0: 2f0a movel %a2,%sp@-
441c2: 487a 1602 pea %pc@(457c6 <rtems_termios_rxdaemon>)
441c6: 47f9 0004 6af4 lea 46af4 <rtems_task_start>,%a3
441cc: 2f2a 00c4 movel %a2@(196),%sp@-
441d0: 4e93 jsr %a3@
tty->rxTaskId, rtems_termios_rxdaemon, (rtems_task_argument)tty);
if (sc != RTEMS_SUCCESSFUL)
441d2: 4fef 000c lea %sp@(12),%sp
441d6: 4a80 tstl %d0
441d8: 664c bnes 44226 <rtems_termios_open+0x32e> <== NEVER TAKEN
rtems_fatal_error_occurred (sc);
sc = rtems_task_start(
441da: 2f0a movel %a2,%sp@-
441dc: 487a 18b6 pea %pc@(45a94 <rtems_termios_txdaemon>)
441e0: 2f2a 00c8 movel %a2@(200),%sp@-
441e4: 4e93 jsr %a3@
tty->txTaskId, rtems_termios_txdaemon, (rtems_task_argument)tty);
if (sc != RTEMS_SUCCESSFUL)
441e6: 4fef 000c lea %sp@(12),%sp
441ea: 4a80 tstl %d0
441ec: 6638 bnes 44226 <rtems_termios_open+0x32e> <== NEVER TAKEN
rtems_fatal_error_occurred (sc);
}
}
rtems_semaphore_release (rtems_termios_ttyMutex);
441ee: 2f39 0005 e30c movel 5e30c <rtems_termios_ttyMutex>,%sp@-
441f4: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
return RTEMS_SUCCESSFUL;
441fa: 588f addql #4,%sp
441fc: 60a4 bras 441a2 <rtems_termios_open+0x2aa>
rtems_fatal_error_occurred (sc);
}
if ((tty->device.pollRead == NULL) ||
(tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN)){
sc = rtems_semaphore_create (
441fe: 486d 0068 pea %a5@(104)
rtems_build_name ('T', 'R', 'r', c),
44202: 1039 0005 cd5c moveb 5cd5c <c.6180>,%d0
rtems_fatal_error_occurred (sc);
}
if ((tty->device.pollRead == NULL) ||
(tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN)){
sc = rtems_semaphore_create (
44208: 42a7 clrl %sp@-
4420a: 4878 0024 pea 24 <OPER2+0x10>
rtems_build_name ('T', 'R', 'r', c),
4420e: 49c0 extbl %d0
rtems_fatal_error_occurred (sc);
}
if ((tty->device.pollRead == NULL) ||
(tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN)){
sc = rtems_semaphore_create (
44210: 0080 5452 7200 oril #1414689280,%d0
44216: 42a7 clrl %sp@-
44218: 2f00 movel %d0,%sp@-
4421a: 4e94 jsr %a4@
rtems_build_name ('T', 'R', 'r', c),
0,
RTEMS_SIMPLE_BINARY_SEMAPHORE | RTEMS_PRIORITY,
RTEMS_NO_PRIORITY,
&tty->rawInBuf.Semaphore);
if (sc != RTEMS_SUCCESSFUL)
4421c: 4fef 0014 lea %sp@(20),%sp
44220: 4a80 tstl %d0
44222: 6700 fe84 beqw 440a8 <rtems_termios_open+0x1b0>
rtems_fatal_error_occurred (sc);
sc = rtems_task_start(
tty->txTaskId, rtems_termios_txdaemon, (rtems_task_argument)tty);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
44226: 2f00 movel %d0,%sp@-
44228: 4eb9 0004 6d6c jsr 46d6c <rtems_fatal_error_occurred>
/*
* Create I/O tasks
*/
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
sc = rtems_task_create (
4422e: 486d 00c8 pea %a5@(200)
44232: 2a3c 0004 6844 movel #288836,%d5
44238: 2045 moveal %d5,%a0
4423a: 42a7 clrl %sp@-
4423c: 4878 0500 pea 500 <DBL_MAX_EXP+0xff>
44240: 4878 0400 pea 400 <D_BIAS+0x2>
44244: 4878 000a pea a <LASTO>
rtems_build_name ('T', 'x', 'T', c),
44248: 1039 0005 cd5c moveb 5cd5c <c.6180>,%d0
4424e: 49c0 extbl %d0
/*
* Create I/O tasks
*/
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
sc = rtems_task_create (
44250: 0080 5478 5400 oril #1417171968,%d0
44256: 2f00 movel %d0,%sp@-
44258: 4e90 jsr %a0@
TERMIOS_TXTASK_STACKSIZE,
RTEMS_NO_PREEMPT | RTEMS_NO_TIMESLICE |
RTEMS_NO_ASR,
RTEMS_NO_FLOATING_POINT | RTEMS_LOCAL,
&tty->txTaskId);
if (sc != RTEMS_SUCCESSFUL)
4425a: 4fef 0018 lea %sp@(24),%sp
4425e: 4a80 tstl %d0
44260: 66c4 bnes 44226 <rtems_termios_open+0x32e> <== NEVER TAKEN
rtems_fatal_error_occurred (sc);
sc = rtems_task_create (
44262: 486d 00c4 pea %a5@(196)
44266: 2045 moveal %d5,%a0
rtems_build_name ('R', 'x', 'T', c),
44268: 1039 0005 cd5c moveb 5cd5c <c.6180>,%d0
RTEMS_NO_ASR,
RTEMS_NO_FLOATING_POINT | RTEMS_LOCAL,
&tty->txTaskId);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
sc = rtems_task_create (
4426e: 42a7 clrl %sp@-
44270: 4878 0500 pea 500 <DBL_MAX_EXP+0xff>
rtems_build_name ('R', 'x', 'T', c),
44274: 49c0 extbl %d0
RTEMS_NO_ASR,
RTEMS_NO_FLOATING_POINT | RTEMS_LOCAL,
&tty->txTaskId);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
sc = rtems_task_create (
44276: 4878 0400 pea 400 <D_BIAS+0x2>
4427a: 4878 0009 pea 9 <DIVIDE_BY_ZERO+0x1>
4427e: 0080 5278 5400 oril #1383617536,%d0
44284: 2f00 movel %d0,%sp@-
44286: 4e90 jsr %a0@
TERMIOS_RXTASK_STACKSIZE,
RTEMS_NO_PREEMPT | RTEMS_NO_TIMESLICE |
RTEMS_NO_ASR,
RTEMS_NO_FLOATING_POINT | RTEMS_LOCAL,
&tty->rxTaskId);
if (sc != RTEMS_SUCCESSFUL)
44288: 4fef 0018 lea %sp@(24),%sp
4428c: 4a80 tstl %d0
4428e: 6700 fe06 beqw 44096 <rtems_termios_open+0x19e>
44292: 6092 bras 44226 <rtems_termios_open+0x32e> <== NOT EXECUTED
tty->back = NULL;
if (rtems_termios_ttyHead != NULL)
rtems_termios_ttyHead->back = tty;
rtems_termios_ttyHead = tty;
if (rtems_termios_ttyTail == NULL)
rtems_termios_ttyTail = tty;
44294: 23cd 0005 e310 movel %a5,5e310 <rtems_termios_ttyTail>
4429a: 6000 fd4a braw 43fe6 <rtems_termios_open+0xee>
/*
* Create a new device
*/
tty = calloc (1, sizeof (struct rtems_termios_tty));
if (tty == NULL) {
rtems_semaphore_release (rtems_termios_ttyMutex);
4429e: 2f39 0005 e30c movel 5e30c <rtems_termios_ttyMutex>,%sp@- <== NOT EXECUTED
return RTEMS_NO_MEMORY;
442a4: 781a moveq #26,%d4 <== NOT EXECUTED
/*
* Create a new device
*/
tty = calloc (1, sizeof (struct rtems_termios_tty));
if (tty == NULL) {
rtems_semaphore_release (rtems_termios_ttyMutex);
442a6: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release> <== NOT EXECUTED
return RTEMS_NO_MEMORY;
442ac: 588f addql #4,%sp <== NOT EXECUTED
rtems_fatal_error_occurred (sc);
}
}
rtems_semaphore_release (rtems_termios_ttyMutex);
return RTEMS_SUCCESSFUL;
}
442ae: 2004 movel %d4,%d0 <== NOT EXECUTED
442b0: 4cee 3cfc ffd8 moveml %fp@(-40),%d2-%d7/%a2-%a5 <== NOT EXECUTED
442b6: 4e5e unlk %fp <== NOT EXECUTED
442b8: 4e75 rts <== NOT EXECUTED
* allocate raw input buffer
*/
tty->rawInBuf.Size = RAW_INPUT_BUFFER_SIZE;
tty->rawInBuf.theBuf = malloc (tty->rawInBuf.Size);
if (tty->rawInBuf.theBuf == NULL) {
free(tty);
442ba: 2f0d movel %a5,%sp@- <== NOT EXECUTED
rtems_semaphore_release (rtems_termios_ttyMutex);
return RTEMS_NO_MEMORY;
442bc: 781a moveq #26,%d4 <== NOT EXECUTED
* allocate raw input buffer
*/
tty->rawInBuf.Size = RAW_INPUT_BUFFER_SIZE;
tty->rawInBuf.theBuf = malloc (tty->rawInBuf.Size);
if (tty->rawInBuf.theBuf == NULL) {
free(tty);
442be: 4eb9 0004 2db8 jsr 42db8 <free> <== NOT EXECUTED
rtems_semaphore_release (rtems_termios_ttyMutex);
442c4: 2f39 0005 e30c movel 5e30c <rtems_termios_ttyMutex>,%sp@- <== NOT EXECUTED
442ca: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release> <== NOT EXECUTED
return RTEMS_NO_MEMORY;
442d0: 508f addql #8,%sp <== NOT EXECUTED
rtems_fatal_error_occurred (sc);
}
}
rtems_semaphore_release (rtems_termios_ttyMutex);
return RTEMS_SUCCESSFUL;
}
442d2: 2004 movel %d4,%d0 <== NOT EXECUTED
442d4: 4cee 3cfc ffd8 moveml %fp@(-40),%d2-%d7/%a2-%a5 <== NOT EXECUTED
442da: 4e5e unlk %fp <== NOT EXECUTED
442dc: 4e75 rts <== NOT EXECUTED
* allocate raw output buffer
*/
tty->rawOutBuf.Size = RAW_OUTPUT_BUFFER_SIZE;
tty->rawOutBuf.theBuf = malloc (tty->rawOutBuf.Size);
if (tty->rawOutBuf.theBuf == NULL) {
free((void *)(tty->rawInBuf.theBuf));
442de: 2f05 movel %d5,%sp@- <== NOT EXECUTED
442e0: 45f9 0004 2db8 lea 42db8 <free>,%a2 <== NOT EXECUTED
free(tty);
rtems_semaphore_release (rtems_termios_ttyMutex);
return RTEMS_NO_MEMORY;
442e6: 781a moveq #26,%d4 <== NOT EXECUTED
* allocate raw output buffer
*/
tty->rawOutBuf.Size = RAW_OUTPUT_BUFFER_SIZE;
tty->rawOutBuf.theBuf = malloc (tty->rawOutBuf.Size);
if (tty->rawOutBuf.theBuf == NULL) {
free((void *)(tty->rawInBuf.theBuf));
442e8: 4e92 jsr %a2@ <== NOT EXECUTED
free(tty);
442ea: 2f0d movel %a5,%sp@- <== NOT EXECUTED
442ec: 4e92 jsr %a2@ <== NOT EXECUTED
rtems_semaphore_release (rtems_termios_ttyMutex);
442ee: 2f39 0005 e30c movel 5e30c <rtems_termios_ttyMutex>,%sp@- <== NOT EXECUTED
442f4: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release> <== NOT EXECUTED
return RTEMS_NO_MEMORY;
442fa: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
rtems_fatal_error_occurred (sc);
}
}
rtems_semaphore_release (rtems_termios_ttyMutex);
return RTEMS_SUCCESSFUL;
}
442fe: 2004 movel %d4,%d0 <== NOT EXECUTED
44300: 4cee 3cfc ffd8 moveml %fp@(-40),%d2-%d7/%a2-%a5 <== NOT EXECUTED
44306: 4e5e unlk %fp <== NOT EXECUTED
44308: 4e75 rts <== NOT EXECUTED
/*
* allocate cooked buffer
*/
tty->cbuf = malloc (CBUFSIZE);
if (tty->cbuf == NULL) {
free((void *)(tty->rawOutBuf.theBuf));
4430a: 2f06 movel %d6,%sp@- <== NOT EXECUTED
4430c: 45f9 0004 2db8 lea 42db8 <free>,%a2 <== NOT EXECUTED
free((void *)(tty->rawInBuf.theBuf));
free(tty);
rtems_semaphore_release (rtems_termios_ttyMutex);
return RTEMS_NO_MEMORY;
44312: 781a moveq #26,%d4 <== NOT EXECUTED
/*
* allocate cooked buffer
*/
tty->cbuf = malloc (CBUFSIZE);
if (tty->cbuf == NULL) {
free((void *)(tty->rawOutBuf.theBuf));
44314: 4e92 jsr %a2@ <== NOT EXECUTED
free((void *)(tty->rawInBuf.theBuf));
44316: 2f05 movel %d5,%sp@- <== NOT EXECUTED
44318: 4e92 jsr %a2@ <== NOT EXECUTED
free(tty);
4431a: 2f0d movel %a5,%sp@- <== NOT EXECUTED
4431c: 4e92 jsr %a2@ <== NOT EXECUTED
rtems_semaphore_release (rtems_termios_ttyMutex);
4431e: 2f39 0005 e30c movel 5e30c <rtems_termios_ttyMutex>,%sp@- <== NOT EXECUTED
44324: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release> <== NOT EXECUTED
return RTEMS_NO_MEMORY;
4432a: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
rtems_fatal_error_occurred (sc);
}
}
rtems_semaphore_release (rtems_termios_ttyMutex);
return RTEMS_SUCCESSFUL;
}
4432e: 2004 movel %d4,%d0 <== NOT EXECUTED
44330: 4cee 3cfc ffd8 moveml %fp@(-40),%d2-%d7/%a2-%a5 <== NOT EXECUTED
44336: 4e5e unlk %fp <== NOT EXECUTED
000448e2 <rtems_termios_puts>:
* Send characters to device-specific code
*/
void
rtems_termios_puts (
const void *_buf, int len, struct rtems_termios_tty *tty)
{
448e2: 4e56 ffdc linkw %fp,#-36
448e6: 48d7 1cfc moveml %d2-%d7/%a2-%a4,%sp@
448ea: 286e 0008 moveal %fp@(8),%a4
448ee: 242e 000c movel %fp@(12),%d2
448f2: 246e 0010 moveal %fp@(16),%a2
const unsigned char *buf = _buf;
unsigned int newHead;
rtems_interrupt_level level;
rtems_status_code sc;
if (tty->device.outputUsesInterrupts == TERMIOS_POLLED) {
448f6: 4aaa 00b4 tstl %a2@(180)
448fa: 6700 00c6 beqw 449c2 <rtems_termios_puts+0xe0>
(*tty->device.write)(tty->minor, (void *)buf, len);
return;
}
newHead = tty->rawOutBuf.Head;
448fe: 2c2a 0080 movel %a2@(128),%d6
while (len) {
44902: 4a82 tstl %d2
44904: 6700 008e beqw 44994 <rtems_termios_puts+0xb2>
*
* To minimize latency, the memcpy should be done
* with interrupts enabled.
*/
newHead = (newHead + 1) % tty->rawOutBuf.Size;
rtems_interrupt_disable (level);
44908: 2a3c 0000 0700 movel #1792,%d5
4490e: 47f9 0004 6648 lea 46648 <rtems_semaphore_obtain>,%a3
* len -= ncopy
*
* To minimize latency, the memcpy should be done
* with interrupts enabled.
*/
newHead = (newHead + 1) % tty->rawOutBuf.Size;
44914: 222a 0088 movel %a2@(136),%d1
44918: 5286 addql #1,%d6
rtems_interrupt_disable (level);
4491a: 2005 movel %d5,%d0
* len -= ncopy
*
* To minimize latency, the memcpy should be done
* with interrupts enabled.
*/
newHead = (newHead + 1) % tty->rawOutBuf.Size;
4491c: 4c41 6007 remul %d1,%d7,%d6
44920: 2c07 movel %d7,%d6
rtems_interrupt_disable (level);
44922: 40c3 movew %sr,%d3
44924: 8083 orl %d3,%d0
44926: 46c0 movew %d0,%sr
while (newHead == tty->rawOutBuf.Tail) {
44928: 282a 0084 movel %a2@(132),%d4
4492c: be84 cmpl %d4,%d7
4492e: 662c bnes 4495c <rtems_termios_puts+0x7a>
tty->rawOutBufState = rob_wait;
44930: 7002 moveq #2,%d0
44932: 2540 0094 movel %d0,%a2@(148)
rtems_interrupt_enable (level);
44936: 46c3 movew %d3,%sr
sc = rtems_semaphore_obtain(
44938: 42a7 clrl %sp@-
4493a: 42a7 clrl %sp@-
4493c: 2f2a 008c movel %a2@(140),%sp@-
44940: 4e93 jsr %a3@
tty->rawOutBuf.Semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
44942: 4fef 000c lea %sp@(12),%sp
44946: 4a80 tstl %d0
44948: 6600 0094 bnew 449de <rtems_termios_puts+0xfc>
rtems_fatal_error_occurred (sc);
rtems_interrupt_disable (level);
4494c: 2005 movel %d5,%d0
4494e: 40c3 movew %sr,%d3
44950: 8083 orl %d3,%d0
44952: 46c0 movew %d0,%sr
* 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) {
44954: 202a 0084 movel %a2@(132),%d0
44958: b880 cmpl %d0,%d4
4495a: 67d4 beqs 44930 <rtems_termios_puts+0x4e> <== NEVER TAKEN
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++;
4495c: 202a 0080 movel %a2@(128),%d0
44960: 206a 007c moveal %a2@(124),%a0
44964: 119c 0800 moveb %a4@+,%a0@(00000000,%d0:l)
tty->rawOutBuf.Head = newHead;
44968: 2547 0080 movel %d7,%a2@(128)
if (tty->rawOutBufState == rob_idle) {
4496c: 4aaa 0094 tstl %a2@(148)
44970: 661c bnes 4498e <rtems_termios_puts+0xac>
/* check, whether XOFF has been received */
if (!(tty->flow_ctrl & FL_ORCVXOF)) {
44972: 202a 00b8 movel %a2@(184),%d0
44976: 0800 0004 btst #4,%d0
4497a: 6722 beqs 4499e <rtems_termios_puts+0xbc> <== ALWAYS TAKEN
(*tty->device.write)(tty->minor,
(char *)&tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail],1);
} else {
/* remember that output has been stopped due to flow ctrl*/
tty->flow_ctrl |= FL_OSTOP;
4497c: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
44980: 7220 moveq #32,%d1 <== NOT EXECUTED
44982: 8081 orl %d1,%d0 <== NOT EXECUTED
44984: 2540 00b8 movel %d0,%a2@(184) <== NOT EXECUTED
}
tty->rawOutBufState = rob_busy;
44988: 7001 moveq #1,%d0 <== NOT EXECUTED
4498a: 2540 0094 movel %d0,%a2@(148) <== NOT EXECUTED
}
rtems_interrupt_enable (level);
4498e: 46c3 movew %d3,%sr
len--;
44990: 5382 subql #1,%d2
if (tty->device.outputUsesInterrupts == TERMIOS_POLLED) {
(*tty->device.write)(tty->minor, (void *)buf, len);
return;
}
newHead = tty->rawOutBuf.Head;
while (len) {
44992: 6680 bnes 44914 <rtems_termios_puts+0x32>
tty->rawOutBufState = rob_busy;
}
rtems_interrupt_enable (level);
len--;
}
}
44994: 4cee 1cfc ffdc moveml %fp@(-36),%d2-%d7/%a2-%a4
4499a: 4e5e unlk %fp
4499c: 4e75 rts
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)(tty->minor,
4499e: 4878 0001 pea 1 <ADD>
(char *)&tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail],1);
449a2: 202a 0084 movel %a2@(132),%d0
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)(tty->minor,
449a6: d0aa 007c addl %a2@(124),%d0
449aa: 2f00 movel %d0,%sp@-
449ac: 2f2a 0010 movel %a2@(16),%sp@-
449b0: 206a 00a4 moveal %a2@(164),%a0
449b4: 4e90 jsr %a0@
449b6: 4fef 000c lea %sp@(12),%sp
(char *)&tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail],1);
} else {
/* remember that output has been stopped due to flow ctrl*/
tty->flow_ctrl |= FL_OSTOP;
}
tty->rawOutBufState = rob_busy;
449ba: 7001 moveq #1,%d0
449bc: 2540 0094 movel %d0,%a2@(148)
449c0: 60cc bras 4498e <rtems_termios_puts+0xac>
unsigned int newHead;
rtems_interrupt_level level;
rtems_status_code sc;
if (tty->device.outputUsesInterrupts == TERMIOS_POLLED) {
(*tty->device.write)(tty->minor, (void *)buf, len);
449c2: 226a 00a4 moveal %a2@(164),%a1
449c6: 2d6a 0010 0008 movel %a2@(16),%fp@(8)
449cc: 2d42 0010 movel %d2,%fp@(16)
449d0: 2d4c 000c movel %a4,%fp@(12)
tty->rawOutBufState = rob_busy;
}
rtems_interrupt_enable (level);
len--;
}
}
449d4: 4cee 1cfc ffdc moveml %fp@(-36),%d2-%d7/%a2-%a4
449da: 4e5e unlk %fp
unsigned int newHead;
rtems_interrupt_level level;
rtems_status_code sc;
if (tty->device.outputUsesInterrupts == TERMIOS_POLLED) {
(*tty->device.write)(tty->minor, (void *)buf, len);
449dc: 4ed1 jmp %a1@
tty->rawOutBufState = rob_wait;
rtems_interrupt_enable (level);
sc = rtems_semaphore_obtain(
tty->rawOutBuf.Semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
449de: 2f00 movel %d0,%sp@- <== NOT EXECUTED
449e0: 4eb9 0004 6d6c jsr 46d6c <rtems_fatal_error_occurred> <== NOT EXECUTED
000451a2 <rtems_termios_read>:
return RTEMS_SUCCESSFUL;
}
rtems_status_code
rtems_termios_read (void *arg)
{
451a2: 4e56 ffd4 linkw %fp,#-44
451a6: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
451aa: 2a6e 0008 moveal %fp@(8),%a5
struct rtems_termios_tty *tty = args->iop->data1;
uint32_t count = args->count;
char *buffer = args->buffer;
rtems_status_code sc;
sc = rtems_semaphore_obtain (tty->isem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
451ae: 2c3c 0004 6648 movel #288328,%d6
rtems_status_code
rtems_termios_read (void *arg)
{
rtems_libio_rw_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
451b4: 2055 moveal %a5@,%a0
451b6: 2468 0034 moveal %a0@(52),%a2
uint32_t count = args->count;
char *buffer = args->buffer;
rtems_status_code sc;
sc = rtems_semaphore_obtain (tty->isem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
451ba: 2046 moveal %d6,%a0
451bc: 42a7 clrl %sp@-
rtems_status_code
rtems_termios_read (void *arg)
{
rtems_libio_rw_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
uint32_t count = args->count;
451be: 282d 0010 movel %a5@(16),%d4
char *buffer = args->buffer;
rtems_status_code sc;
sc = rtems_semaphore_obtain (tty->isem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
451c2: 42a7 clrl %sp@-
451c4: 2f2a 0014 movel %a2@(20),%sp@-
rtems_termios_read (void *arg)
{
rtems_libio_rw_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
uint32_t count = args->count;
char *buffer = args->buffer;
451c8: 286d 000c moveal %a5@(12),%a4
rtems_status_code sc;
sc = rtems_semaphore_obtain (tty->isem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
451cc: 4e90 jsr %a0@
if (sc != RTEMS_SUCCESSFUL)
451ce: 4fef 000c lea %sp@(12),%sp
struct rtems_termios_tty *tty = args->iop->data1;
uint32_t count = args->count;
char *buffer = args->buffer;
rtems_status_code sc;
sc = rtems_semaphore_obtain (tty->isem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
451d2: 2a00 movel %d0,%d5
if (sc != RTEMS_SUCCESSFUL)
451d4: 662e bnes 45204 <rtems_termios_read+0x62> <== NEVER TAKEN
return sc;
if (rtems_termios_linesw[tty->t_line].l_read != NULL) {
451d6: 202a 00cc movel %a2@(204),%d0
451da: eb88 lsll #5,%d0
451dc: 0680 0005 dad8 addil #383704,%d0
451e2: 2240 moveal %d0,%a1
451e4: 2051 moveal %a1@,%a0
451e6: 4a88 tstl %a0
451e8: 6726 beqs 45210 <rtems_termios_read+0x6e>
sc = rtems_termios_linesw[tty->t_line].l_read(tty,args);
451ea: 2f0d movel %a5,%sp@-
451ec: 2f0a movel %a2,%sp@-
451ee: 4e90 jsr %a0@
451f0: 2a00 movel %d0,%d5
tty->tty_rcvwakeup = 0;
451f2: 42aa 00e4 clrl %a2@(228)
rtems_semaphore_release (tty->isem);
451f6: 2f2a 0014 movel %a2@(20),%sp@-
451fa: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
return sc;
45200: 4fef 000c lea %sp@(12),%sp
}
args->bytes_moved = args->count - count;
tty->tty_rcvwakeup = 0;
rtems_semaphore_release (tty->isem);
return sc;
}
45204: 2005 movel %d5,%d0
45206: 4cee 3cfc ffd4 moveml %fp@(-44),%d2-%d7/%a2-%a5
4520c: 4e5e unlk %fp
4520e: 4e75 rts
tty->tty_rcvwakeup = 0;
rtems_semaphore_release (tty->isem);
return sc;
}
if (tty->cindex == tty->ccount) {
45210: 202a 0020 movel %a2@(32),%d0
45214: b0aa 0024 cmpl %a2@(36),%d0
45218: 674e beqs 45268 <rtems_termios_read+0xc6> <== ALWAYS TAKEN
sc = fillBufferQueue (tty);
if (sc != RTEMS_SUCCESSFUL)
tty->cindex = tty->ccount = 0;
}
while (count && (tty->cindex < tty->ccount)) {
4521a: 4a84 tstl %d4
4521c: 6724 beqs 45242 <rtems_termios_read+0xa0> <== NEVER TAKEN
4521e: 202a 0024 movel %a2@(36),%d0
45222: b0aa 0020 cmpl %a2@(32),%d0
45226: 6c1a bges 45242 <rtems_termios_read+0xa0> <== NEVER TAKEN
*buffer++ = tty->cbuf[tty->cindex++];
45228: 206a 001c moveal %a2@(28),%a0
count--;
4522c: 5384 subql #1,%d4
if (sc != RTEMS_SUCCESSFUL)
tty->cindex = tty->ccount = 0;
}
while (count && (tty->cindex < tty->ccount)) {
*buffer++ = tty->cbuf[tty->cindex++];
4522e: 18f0 0800 moveb %a0@(00000000,%d0:l),%a4@+
45232: 5280 addql #1,%d0
45234: 2540 0024 movel %d0,%a2@(36)
sc = fillBufferQueue (tty);
if (sc != RTEMS_SUCCESSFUL)
tty->cindex = tty->ccount = 0;
}
while (count && (tty->cindex < tty->ccount)) {
45238: 4a84 tstl %d4
4523a: 6706 beqs 45242 <rtems_termios_read+0xa0> <== NEVER TAKEN
4523c: b0aa 0020 cmpl %a2@(32),%d0
45240: 6de6 blts 45228 <rtems_termios_read+0x86>
*buffer++ = tty->cbuf[tty->cindex++];
count--;
}
args->bytes_moved = args->count - count;
45242: 202d 0010 movel %a5@(16),%d0
45246: 9084 subl %d4,%d0
45248: 2b40 0018 movel %d0,%a5@(24)
tty->tty_rcvwakeup = 0;
4524c: 42aa 00e4 clrl %a2@(228)
rtems_semaphore_release (tty->isem);
45250: 2f2a 0014 movel %a2@(20),%sp@-
45254: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
return sc;
4525a: 588f addql #4,%sp
}
4525c: 2005 movel %d5,%d0
4525e: 4cee 3cfc ffd4 moveml %fp@(-44),%d2-%d7/%a2-%a5
45264: 4e5e unlk %fp
45266: 4e75 rts
}
if (tty->cindex == tty->ccount) {
tty->cindex = tty->ccount = 0;
tty->read_start_column = tty->column;
if (tty->device.pollRead != NULL &&
45268: 206a 00a0 moveal %a2@(160),%a0
return sc;
}
if (tty->cindex == tty->ccount) {
tty->cindex = tty->ccount = 0;
tty->read_start_column = tty->column;
4526c: 256a 0028 002c movel %a2@(40),%a2@(44)
rtems_semaphore_release (tty->isem);
return sc;
}
if (tty->cindex == tty->ccount) {
tty->cindex = tty->ccount = 0;
45272: 42aa 0020 clrl %a2@(32)
45276: 42aa 0024 clrl %a2@(36)
tty->read_start_column = tty->column;
if (tty->device.pollRead != NULL &&
4527a: 4a88 tstl %a0
4527c: 6708 beqs 45286 <rtems_termios_read+0xe4>
4527e: 4aaa 00b4 tstl %a2@(180)
45282: 6700 0172 beqw 453f6 <rtems_termios_read+0x254>
while ( wait ) {
/*
* Process characters read from raw queue
*/
while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) &&
45286: 222a 005c movel %a2@(92),%d1
if (((tty->flow_ctrl & (FL_MDXON | FL_ISNTXOF))
== (FL_MDXON | FL_ISNTXOF))
&& ((tty->rawOutBufState == rob_idle)
|| (tty->flow_ctrl & FL_OSTOP))) {
/* XON should be sent now... */
(*tty->device.write)(
4528a: 41ea 0049 lea %a2@(73),%a0
static rtems_status_code
fillBufferQueue (struct rtems_termios_tty *tty)
{
rtems_interval timeout = tty->rawInBufSemaphoreFirstTimeout;
rtems_status_code sc;
int wait = (int)1;
4528e: 7401 moveq #1,%d2
45290: 47fa fdc6 lea %pc@(45058 <siproc>),%a3
* Fill the input buffer from the raw input queue
*/
static rtems_status_code
fillBufferQueue (struct rtems_termios_tty *tty)
{
rtems_interval timeout = tty->rawInBufSemaphoreFirstTimeout;
45294: 262a 0074 movel %a2@(116),%d3
while ( wait ) {
/*
* Process characters read from raw queue
*/
while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) &&
45298: 202a 0060 movel %a2@(96),%d0
if (((tty->flow_ctrl & (FL_MDXON | FL_ISNTXOF))
== (FL_MDXON | FL_ISNTXOF))
&& ((tty->rawOutBufState == rob_idle)
|| (tty->flow_ctrl & FL_OSTOP))) {
/* XON should be sent now... */
(*tty->device.write)(
4529c: 2d48 fffc movel %a0,%fp@(-4)
while ( wait ) {
/*
* Process characters read from raw queue
*/
while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) &&
452a0: b081 cmpl %d1,%d0
452a2: 6700 00be beqw 45362 <rtems_termios_read+0x1c0>
(tty->ccount < (CBUFSIZE-1))) {
452a6: 2039 0005 cd50 movel 5cd50 <rtems_termios_cbufsize>,%d0
452ac: 5380 subql #1,%d0
while ( wait ) {
/*
* Process characters read from raw queue
*/
while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) &&
452ae: b0aa 0020 cmpl %a2@(32),%d0
452b2: 6f00 00ae blew 45362 <rtems_termios_read+0x1c0>
(tty->ccount < (CBUFSIZE-1))) {
unsigned char c;
unsigned int newHead;
newHead = (tty->rawInBuf.Head + 1) % tty->rawInBuf.Size;
452b6: 262a 005c movel %a2@(92),%d3
452ba: 5283 addql #1,%d3
452bc: 202a 0064 movel %a2@(100),%d0
c = tty->rawInBuf.theBuf[newHead];
452c0: 206a 0058 moveal %a2@(88),%a0
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;
452c4: 4c40 3001 remul %d0,%d1,%d3
c = tty->rawInBuf.theBuf[newHead];
452c8: 1630 1800 moveb %a0@(00000000,%d1:l),%d3
tty->rawInBuf.Head = newHead;
452cc: 2541 005c movel %d1,%a2@(92)
if(((tty->rawInBuf.Tail-newHead+tty->rawInBuf.Size)
452d0: 202a 0060 movel %a2@(96),%d0
452d4: 206a 0064 moveal %a2@(100),%a0
452d8: d088 addl %a0,%d0
452da: 9081 subl %d1,%d0
% tty->rawInBuf.Size)
452dc: 222a 0064 movel %a2@(100),%d1
452e0: 4c41 0007 remul %d1,%d7,%d0
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)
452e4: beaa 00bc cmpl %a2@(188),%d7
452e8: 6446 bccs 45330 <rtems_termios_read+0x18e> <== NEVER TAKEN
% tty->rawInBuf.Size)
< tty->lowwater) {
tty->flow_ctrl &= ~FL_IREQXOF;
452ea: 202a 00b8 movel %a2@(184),%d0
452ee: 72fe moveq #-2,%d1
452f0: c081 andl %d1,%d0
452f2: 2540 00b8 movel %d0,%a2@(184)
/* if tx stopped and XON should be sent... */
if (((tty->flow_ctrl & (FL_MDXON | FL_ISNTXOF))
452f6: 202a 00b8 movel %a2@(184),%d0
452fa: 0280 0000 0202 andil #514,%d0
45300: 0c80 0000 0202 cmpil #514,%d0
45306: 6700 0088 beqw 45390 <rtems_termios_read+0x1ee>
&& ((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);
} else if (tty->flow_ctrl & FL_MDRTS) {
4530a: 202a 00b8 movel %a2@(184),%d0
4530e: 0800 0008 btst #8,%d0
45312: 671c beqs 45330 <rtems_termios_read+0x18e> <== ALWAYS TAKEN
tty->flow_ctrl &= ~FL_IRTSOFF;
45314: 222a 00b8 movel %a2@(184),%d1 <== NOT EXECUTED
45318: 7efb moveq #-5,%d7 <== NOT EXECUTED
4531a: c287 andl %d7,%d1 <== NOT EXECUTED
/* activate RTS line */
if (tty->device.startRemoteTx != NULL) {
4531c: 206a 00b0 moveal %a2@(176),%a0 <== NOT EXECUTED
|| (tty->flow_ctrl & FL_OSTOP))) {
/* XON should be sent now... */
(*tty->device.write)(
tty->minor, (void *)&(tty->termios.c_cc[VSTART]), 1);
} else if (tty->flow_ctrl & FL_MDRTS) {
tty->flow_ctrl &= ~FL_IRTSOFF;
45320: 2541 00b8 movel %d1,%a2@(184) <== NOT EXECUTED
/* activate RTS line */
if (tty->device.startRemoteTx != NULL) {
45324: 4a88 tstl %a0 <== NOT EXECUTED
45326: 6708 beqs 45330 <rtems_termios_read+0x18e> <== NOT EXECUTED
tty->device.startRemoteTx(tty->minor);
45328: 2f2a 0010 movel %a2@(16),%sp@- <== NOT EXECUTED
4532c: 4e90 jsr %a0@ <== NOT EXECUTED
4532e: 588f addql #4,%sp <== NOT EXECUTED
}
}
}
/* continue processing new character */
if (tty->termios.c_lflag & ICANON) {
45330: 7002 moveq #2,%d0
45332: c0aa 003c andl %a2@(60),%d0
45336: 6700 008a beqw 453c2 <rtems_termios_read+0x220>
if (siproc (c, tty))
4533a: 2f0a movel %a2,%sp@-
4533c: 0283 0000 00ff andil #255,%d3
45342: 2f03 movel %d3,%sp@-
45344: 4e93 jsr %a3@
while ( wait ) {
/*
* Process characters read from raw queue
*/
while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) &&
45346: 222a 005c movel %a2@(92),%d1
}
/* continue processing new character */
if (tty->termios.c_lflag & ICANON) {
if (siproc (c, tty))
wait = 0;
4534a: 4a80 tstl %d0
4534c: 57c0 seq %d0
} else {
siproc (c, tty);
if (tty->ccount >= tty->termios.c_cc[VMIN])
wait = 0;
}
timeout = tty->rawInBufSemaphoreTimeout;
4534e: 262a 0070 movel %a2@(112),%d3
}
/* continue processing new character */
if (tty->termios.c_lflag & ICANON) {
if (siproc (c, tty))
wait = 0;
45352: 49c0 extbl %d0
}
}
/* continue processing new character */
if (tty->termios.c_lflag & ICANON) {
if (siproc (c, tty))
45354: 508f addql #8,%sp
wait = 0;
45356: c480 andl %d0,%d2
while ( wait ) {
/*
* Process characters read from raw queue
*/
while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) &&
45358: 202a 0060 movel %a2@(96),%d0
4535c: b081 cmpl %d1,%d0
4535e: 6600 ff46 bnew 452a6 <rtems_termios_read+0x104>
}
/*
* Wait for characters
*/
if ( wait ) {
45362: 4a82 tstl %d2
45364: 6700 feb4 beqw 4521a <rtems_termios_read+0x78>
sc = rtems_semaphore_obtain(
45368: 2f03 movel %d3,%sp@-
4536a: 2f2a 006c movel %a2@(108),%sp@-
4536e: 2046 moveal %d6,%a0
45370: 2f2a 0068 movel %a2@(104),%sp@-
45374: 4e90 jsr %a0@
tty->rawInBuf.Semaphore, tty->rawInBufSemaphoreOptions, timeout);
if (sc != RTEMS_SUCCESSFUL)
45376: 4fef 000c lea %sp@(12),%sp
4537a: 4a80 tstl %d0
4537c: 6600 fe9c bnew 4521a <rtems_termios_read+0x78>
while ( wait ) {
/*
* Process characters read from raw queue
*/
while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) &&
45380: 222a 005c movel %a2@(92),%d1
45384: 202a 0060 movel %a2@(96),%d0
45388: b081 cmpl %d1,%d0
4538a: 6600 ff1a bnew 452a6 <rtems_termios_read+0x104>
4538e: 60d2 bras 45362 <rtems_termios_read+0x1c0>
< tty->lowwater) {
tty->flow_ctrl &= ~FL_IREQXOF;
/* if tx stopped and XON should be sent... */
if (((tty->flow_ctrl & (FL_MDXON | FL_ISNTXOF))
== (FL_MDXON | FL_ISNTXOF))
&& ((tty->rawOutBufState == rob_idle)
45390: 4aaa 0094 tstl %a2@(148) <== NOT EXECUTED
45394: 670c beqs 453a2 <rtems_termios_read+0x200> <== NOT EXECUTED
|| (tty->flow_ctrl & FL_OSTOP))) {
45396: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
4539a: 0800 0005 btst #5,%d0 <== NOT EXECUTED
4539e: 6700 ff6a beqw 4530a <rtems_termios_read+0x168> <== NOT EXECUTED
/* XON should be sent now... */
(*tty->device.write)(
453a2: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
453a6: 2f2e fffc movel %fp@(-4),%sp@- <== NOT EXECUTED
453aa: 2f2a 0010 movel %a2@(16),%sp@- <== NOT EXECUTED
453ae: 206a 00a4 moveal %a2@(164),%a0 <== NOT EXECUTED
453b2: 4e90 jsr %a0@ <== NOT EXECUTED
453b4: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
}
}
}
/* continue processing new character */
if (tty->termios.c_lflag & ICANON) {
453b8: 7002 moveq #2,%d0 <== NOT EXECUTED
453ba: c0aa 003c andl %a2@(60),%d0 <== NOT EXECUTED
453be: 6600 ff7a bnew 4533a <rtems_termios_read+0x198> <== NOT EXECUTED
if (siproc (c, tty))
wait = 0;
} else {
siproc (c, tty);
453c2: 2f0a movel %a2,%sp@- <== NOT EXECUTED
453c4: 0283 0000 00ff andil #255,%d3 <== NOT EXECUTED
453ca: 2f03 movel %d3,%sp@- <== NOT EXECUTED
453cc: 4e93 jsr %a3@ <== NOT EXECUTED
while ( wait ) {
/*
* Process characters read from raw queue
*/
while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) &&
453ce: 222a 005c movel %a2@(92),%d1 <== NOT EXECUTED
if (tty->termios.c_lflag & ICANON) {
if (siproc (c, tty))
wait = 0;
} else {
siproc (c, tty);
if (tty->ccount >= tty->termios.c_cc[VMIN])
453d2: 4280 clrl %d0 <== NOT EXECUTED
453d4: 102a 0047 moveb %a2@(71),%d0 <== NOT EXECUTED
453d8: 508f addql #8,%sp <== NOT EXECUTED
wait = 0;
453da: b0aa 0020 cmpl %a2@(32),%d0 <== NOT EXECUTED
453de: 5ec0 sgt %d0 <== NOT EXECUTED
}
timeout = tty->rawInBufSemaphoreTimeout;
453e0: 262a 0070 movel %a2@(112),%d3 <== NOT EXECUTED
if (siproc (c, tty))
wait = 0;
} else {
siproc (c, tty);
if (tty->ccount >= tty->termios.c_cc[VMIN])
wait = 0;
453e4: 49c0 extbl %d0 <== NOT EXECUTED
453e6: c480 andl %d0,%d2 <== NOT EXECUTED
while ( wait ) {
/*
* Process characters read from raw queue
*/
while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) &&
453e8: 202a 0060 movel %a2@(96),%d0 <== NOT EXECUTED
453ec: b081 cmpl %d1,%d0 <== NOT EXECUTED
453ee: 6600 feb6 bnew 452a6 <rtems_termios_read+0x104> <== NOT EXECUTED
453f2: 6000 ff6e braw 45362 <rtems_termios_read+0x1c0> <== NOT EXECUTED
static rtems_status_code
fillBufferPoll (struct rtems_termios_tty *tty)
{
int n;
if (tty->termios.c_lflag & ICANON) {
453f6: 7002 moveq #2,%d0
453f8: c0aa 003c andl %a2@(60),%d0
453fc: 6740 beqs 4543e <rtems_termios_read+0x29c> <== NEVER TAKEN
453fe: 47fa fc58 lea %pc@(45058 <siproc>),%a3
for (;;) {
n = (*tty->device.pollRead)(tty->minor);
if (n < 0) {
rtems_task_wake_after (1);
45402: 243c 0004 6bb0 movel #289712,%d2
{
int n;
if (tty->termios.c_lflag & ICANON) {
for (;;) {
n = (*tty->device.pollRead)(tty->minor);
45408: 2f2a 0010 movel %a2@(16),%sp@-
4540c: 4e90 jsr %a0@
if (n < 0) {
4540e: 588f addql #4,%sp
45410: 4a80 tstl %d0
45412: 6d1a blts 4542e <rtems_termios_read+0x28c>
rtems_task_wake_after (1);
} else {
if (siproc (n, tty))
45414: 2f0a movel %a2,%sp@-
45416: 0280 0000 00ff andil #255,%d0
4541c: 2f00 movel %d0,%sp@-
4541e: 4e93 jsr %a3@
45420: 508f addql #8,%sp
45422: 4a80 tstl %d0
45424: 6600 fdf4 bnew 4521a <rtems_termios_read+0x78>
static rtems_status_code
fillBufferPoll (struct rtems_termios_tty *tty)
{
int n;
if (tty->termios.c_lflag & ICANON) {
45428: 206a 00a0 moveal %a2@(160),%a0
4542c: 60da bras 45408 <rtems_termios_read+0x266>
for (;;) {
n = (*tty->device.pollRead)(tty->minor);
if (n < 0) {
rtems_task_wake_after (1);
4542e: 4878 0001 pea 1 <ADD>
45432: 2042 moveal %d2,%a0
45434: 4e90 jsr %a0@
static rtems_status_code
fillBufferPoll (struct rtems_termios_tty *tty)
{
int n;
if (tty->termios.c_lflag & ICANON) {
45436: 206a 00a0 moveal %a2@(160),%a0
for (;;) {
n = (*tty->device.pollRead)(tty->minor);
if (n < 0) {
rtems_task_wake_after (1);
4543a: 588f addql #4,%sp
4543c: 60ca bras 45408 <rtems_termios_read+0x266>
break;
}
}
rtems_task_wake_after (1);
} else {
siproc (n, tty);
4543e: 47fa fc18 lea %pc@(45058 <siproc>),%a3 <== NOT EXECUTED
}
}
} else {
rtems_interval then, now;
then = rtems_clock_get_ticks_since_boot();
45442: 263c 0004 5f24 movel #286500,%d3 <== NOT EXECUTED
now = rtems_clock_get_ticks_since_boot();
if ((now - then) > tty->vtimeTicks) {
break;
}
}
rtems_task_wake_after (1);
45448: 243c 0004 6bb0 movel #289712,%d2 <== NOT EXECUTED
}
}
} else {
rtems_interval then, now;
then = rtems_clock_get_ticks_since_boot();
4544e: 2243 moveal %d3,%a1 <== NOT EXECUTED
45450: 4e91 jsr %a1@ <== NOT EXECUTED
45452: 2c00 movel %d0,%d6 <== NOT EXECUTED
for (;;) {
n = (*tty->device.pollRead)(tty->minor);
45454: 2f2a 0010 movel %a2@(16),%sp@- <== NOT EXECUTED
45458: 206a 00a0 moveal %a2@(160),%a0 <== NOT EXECUTED
4545c: 4e90 jsr %a0@ <== NOT EXECUTED
if (n < 0) {
4545e: 588f addql #4,%sp <== NOT EXECUTED
45460: 4a80 tstl %d0 <== NOT EXECUTED
45462: 6d38 blts 4549c <rtems_termios_read+0x2fa> <== NOT EXECUTED
break;
}
}
rtems_task_wake_after (1);
} else {
siproc (n, tty);
45464: 2f0a movel %a2,%sp@- <== NOT EXECUTED
45466: 0280 0000 00ff andil #255,%d0 <== NOT EXECUTED
4546c: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4546e: 4e93 jsr %a3@ <== NOT EXECUTED
if (tty->ccount >= tty->termios.c_cc[VMIN])
45470: 508f addql #8,%sp <== NOT EXECUTED
45472: 4281 clrl %d1 <== NOT EXECUTED
45474: 102a 0047 moveb %a2@(71),%d0 <== NOT EXECUTED
45478: 1200 moveb %d0,%d1 <== NOT EXECUTED
4547a: b2aa 0020 cmpl %a2@(32),%d1 <== NOT EXECUTED
4547e: 6f00 fd9a blew 4521a <rtems_termios_read+0x78> <== NOT EXECUTED
break;
if (tty->termios.c_cc[VMIN] && tty->termios.c_cc[VTIME])
45482: 4a00 tstb %d0 <== NOT EXECUTED
45484: 67ce beqs 45454 <rtems_termios_read+0x2b2> <== NOT EXECUTED
45486: 4a2a 0046 tstb %a2@(70) <== NOT EXECUTED
4548a: 66c2 bnes 4544e <rtems_termios_read+0x2ac> <== NOT EXECUTED
} else {
rtems_interval then, now;
then = rtems_clock_get_ticks_since_boot();
for (;;) {
n = (*tty->device.pollRead)(tty->minor);
4548c: 2f2a 0010 movel %a2@(16),%sp@- <== NOT EXECUTED
45490: 206a 00a0 moveal %a2@(160),%a0 <== NOT EXECUTED
45494: 4e90 jsr %a0@ <== NOT EXECUTED
if (n < 0) {
45496: 588f addql #4,%sp <== NOT EXECUTED
45498: 4a80 tstl %d0 <== NOT EXECUTED
4549a: 6cc8 bges 45464 <rtems_termios_read+0x2c2> <== NOT EXECUTED
if (tty->termios.c_cc[VMIN]) {
4549c: 4a2a 0047 tstb %a2@(71) <== NOT EXECUTED
454a0: 6732 beqs 454d4 <rtems_termios_read+0x332> <== NOT EXECUTED
if (tty->termios.c_cc[VTIME] && tty->ccount) {
454a2: 4a2a 0046 tstb %a2@(70) <== NOT EXECUTED
454a6: 6706 beqs 454ae <rtems_termios_read+0x30c> <== NOT EXECUTED
454a8: 4aaa 0020 tstl %a2@(32) <== NOT EXECUTED
454ac: 660c bnes 454ba <rtems_termios_read+0x318> <== NOT EXECUTED
now = rtems_clock_get_ticks_since_boot();
if ((now - then) > tty->vtimeTicks) {
break;
}
}
rtems_task_wake_after (1);
454ae: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
454b2: 2042 moveal %d2,%a0 <== NOT EXECUTED
454b4: 4e90 jsr %a0@ <== NOT EXECUTED
454b6: 588f addql #4,%sp <== NOT EXECUTED
454b8: 609a bras 45454 <rtems_termios_read+0x2b2> <== NOT EXECUTED
for (;;) {
n = (*tty->device.pollRead)(tty->minor);
if (n < 0) {
if (tty->termios.c_cc[VMIN]) {
if (tty->termios.c_cc[VTIME] && tty->ccount) {
now = rtems_clock_get_ticks_since_boot();
454ba: 2043 moveal %d3,%a0 <== NOT EXECUTED
454bc: 4e90 jsr %a0@ <== NOT EXECUTED
if ((now - then) > tty->vtimeTicks) {
454be: 9086 subl %d6,%d0 <== NOT EXECUTED
454c0: b0aa 0054 cmpl %a2@(84),%d0 <== NOT EXECUTED
454c4: 6200 fd54 bhiw 4521a <rtems_termios_read+0x78> <== NOT EXECUTED
now = rtems_clock_get_ticks_since_boot();
if ((now - then) > tty->vtimeTicks) {
break;
}
}
rtems_task_wake_after (1);
454c8: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
454cc: 2042 moveal %d2,%a0 <== NOT EXECUTED
454ce: 4e90 jsr %a0@ <== NOT EXECUTED
454d0: 588f addql #4,%sp <== NOT EXECUTED
454d2: 6080 bras 45454 <rtems_termios_read+0x2b2> <== NOT EXECUTED
if ((now - then) > tty->vtimeTicks) {
break;
}
}
} else {
if (!tty->termios.c_cc[VTIME])
454d4: 4a2a 0046 tstb %a2@(70) <== NOT EXECUTED
454d8: 6700 fd40 beqw 4521a <rtems_termios_read+0x78> <== NOT EXECUTED
break;
now = rtems_clock_get_ticks_since_boot();
454dc: 2243 moveal %d3,%a1 <== NOT EXECUTED
454de: 4e91 jsr %a1@ <== NOT EXECUTED
if ((now - then) > tty->vtimeTicks) {
454e0: 9086 subl %d6,%d0 <== NOT EXECUTED
454e2: b0aa 0054 cmpl %a2@(84),%d0 <== NOT EXECUTED
454e6: 6200 fd32 bhiw 4521a <rtems_termios_read+0x78> <== NOT EXECUTED
break;
}
}
rtems_task_wake_after (1);
454ea: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
454ee: 2042 moveal %d2,%a0 <== NOT EXECUTED
454f0: 4e90 jsr %a0@ <== NOT EXECUTED
454f2: 588f addql #4,%sp <== NOT EXECUTED
454f4: 6000 ff5e braw 45454 <rtems_termios_read+0x2b2> <== NOT EXECUTED
00045862 <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
*/
int
rtems_termios_refill_transmitter (struct rtems_termios_tty *tty)
{
45862: 4e56 fff4 linkw %fp,#-12
45866: 48d7 040c moveml %d2-%d3/%a2,%sp@
4586a: 246e 0008 moveal %fp@(8),%a2
int nToSend;
rtems_interrupt_level level;
int len;
/* check for XOF/XON to send */
if ((tty->flow_ctrl & (FL_MDXOF | FL_IREQXOF | FL_ISNTXOF))
4586e: 202a 00b8 movel %a2@(184),%d0
45872: 0280 0000 0403 andil #1027,%d0
45878: 0c80 0000 0401 cmpil #1025,%d0
4587e: 6700 0140 beqw 459c0 <rtems_termios_refill_transmitter+0x15e>
tty->flow_ctrl |= FL_ISNTXOF;
rtems_interrupt_enable(level);
nToSend = 1;
} else if ((tty->flow_ctrl & (FL_IREQXOF | FL_ISNTXOF)) == FL_ISNTXOF) {
45882: 202a 00b8 movel %a2@(184),%d0
45886: 7603 moveq #3,%d3
45888: 7202 moveq #2,%d1
4588a: c083 andl %d3,%d0
4588c: b280 cmpl %d0,%d1
4588e: 6700 0172 beqw 45a02 <rtems_termios_refill_transmitter+0x1a0>
tty->flow_ctrl &= ~FL_ISNTXOF;
rtems_interrupt_enable(level);
nToSend = 1;
} else {
if ( tty->rawOutBuf.Head == tty->rawOutBuf.Tail ) {
45892: 222a 0080 movel %a2@(128),%d1
45896: 202a 0084 movel %a2@(132),%d0
4589a: b081 cmpl %d1,%d0
4589c: 6700 009a beqw 45938 <rtems_termios_refill_transmitter+0xd6>
rtems_semaphore_release (tty->rawOutBuf.Semaphore);
}
return 0;
}
rtems_interrupt_disable(level);
458a0: 203c 0000 0700 movel #1792,%d0
458a6: 40c2 movew %sr,%d2
458a8: 8082 orl %d2,%d0
458aa: 46c0 movew %d0,%sr
len = tty->t_dqlen;
458ac: 222a 0090 movel %a2@(144),%d1
tty->t_dqlen = 0;
458b0: 42aa 0090 clrl %a2@(144)
rtems_interrupt_enable(level);
458b4: 46c2 movew %d2,%sr
newTail = (tty->rawOutBuf.Tail + len) % tty->rawOutBuf.Size;
458b6: 202a 0084 movel %a2@(132),%d0
458ba: d280 addl %d0,%d1
458bc: 202a 0088 movel %a2@(136),%d0
458c0: 4c40 1002 remul %d0,%d2,%d1
tty->rawOutBuf.Tail = newTail;
if (tty->rawOutBufState == rob_wait) {
458c4: 7002 moveq #2,%d0
len = tty->t_dqlen;
tty->t_dqlen = 0;
rtems_interrupt_enable(level);
newTail = (tty->rawOutBuf.Tail + len) % tty->rawOutBuf.Size;
tty->rawOutBuf.Tail = newTail;
458c6: 2542 0084 movel %d2,%a2@(132)
if (tty->rawOutBufState == rob_wait) {
458ca: b0aa 0094 cmpl %a2@(148),%d0
458ce: 6700 00d8 beqw 459a8 <rtems_termios_refill_transmitter+0x146>
* wake up any pending writer task
*/
rtems_semaphore_release (tty->rawOutBuf.Semaphore);
}
if (newTail == tty->rawOutBuf.Head) {
458d2: 202a 0080 movel %a2@(128),%d0
458d6: b480 cmpl %d0,%d2
458d8: 6776 beqs 45950 <rtems_termios_refill_transmitter+0xee>
if ( tty->tty_snd.sw_pfn != NULL) {
(*tty->tty_snd.sw_pfn)(&tty->termios, tty->tty_snd.sw_arg);
}
}
/* check, whether output should stop due to received XOFF */
else if ((tty->flow_ctrl & (FL_MDXON | FL_ORCVXOF))
458da: 202a 00b8 movel %a2@(184),%d0
458de: 0280 0000 0210 andil #528,%d0
458e4: 0c80 0000 0210 cmpil #528,%d0
458ea: 6700 015a beqw 45a46 <rtems_termios_refill_transmitter+0x1e4>
nToSend = 0;
} else {
/*
* Buffer not empty, start tranmitter
*/
if (newTail > tty->rawOutBuf.Head)
458ee: 202a 0080 movel %a2@(128),%d0
458f2: b082 cmpl %d2,%d0
458f4: 647c bccs 45972 <rtems_termios_refill_transmitter+0x110>
nToSend = tty->rawOutBuf.Size - newTail;
458f6: 262a 0088 movel %a2@(136),%d3
458fa: 9682 subl %d2,%d3
else
nToSend = tty->rawOutBuf.Head - newTail;
/* 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)) {
458fc: 202a 00b8 movel %a2@(184),%d0
45900: 0280 0000 0600 andil #1536,%d0
45906: 667c bnes 45984 <rtems_termios_refill_transmitter+0x122><== NEVER TAKEN
45908: 2003 movel %d3,%d0
nToSend = 1;
}
tty->rawOutBufState = rob_busy; /*apm*/
4590a: 7201 moveq #1,%d1
(*tty->device.write)(
4590c: 2f00 movel %d0,%sp@-
4590e: 202a 007c movel %a2@(124),%d0
45912: d082 addl %d2,%d0
45914: 2f00 movel %d0,%sp@-
45916: 2f2a 0010 movel %a2@(16),%sp@-
4591a: 206a 00a4 moveal %a2@(164),%a0
/* to allow fast reaction on incoming flow ctrl and low latency*/
/* for outgoing flow control */
if (tty->flow_ctrl & (FL_MDXON | FL_MDXOF)) {
nToSend = 1;
}
tty->rawOutBufState = rob_busy; /*apm*/
4591e: 2541 0094 movel %d1,%a2@(148)
(*tty->device.write)(
45922: 4e90 jsr %a0@
45924: 4fef 000c lea %sp@(12),%sp
tty->minor, &tty->rawOutBuf.theBuf[newTail], nToSend);
}
tty->rawOutBuf.Tail = newTail; /*apm*/
45928: 2542 0084 movel %d2,%a2@(132)
}
return nToSend;
}
4592c: 2003 movel %d3,%d0
4592e: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
45934: 4e5e unlk %fp
45936: 4e75 rts
} else {
if ( tty->rawOutBuf.Head == tty->rawOutBuf.Tail ) {
/*
* buffer was empty
*/
if (tty->rawOutBufState == rob_wait) {
45938: 7602 moveq #2,%d3
4593a: b6aa 0094 cmpl %a2@(148),%d3
4593e: 6700 0130 beqw 45a70 <rtems_termios_refill_transmitter+0x20e>
/*
* this should never happen...
*/
rtems_semaphore_release (tty->rawOutBuf.Semaphore);
}
return 0;
45942: 4283 clrl %d3
tty->minor, &tty->rawOutBuf.theBuf[newTail], nToSend);
}
tty->rawOutBuf.Tail = newTail; /*apm*/
}
return nToSend;
}
45944: 2003 movel %d3,%d0
45946: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
4594c: 4e5e unlk %fp
4594e: 4e75 rts
nToSend = 0;
/*
* check to see if snd wakeup callback was set
*/
if ( tty->tty_snd.sw_pfn != NULL) {
45950: 206a 00d4 moveal %a2@(212),%a0
if (newTail == tty->rawOutBuf.Head) {
/*
* Buffer has become empty
*/
tty->rawOutBufState = rob_idle;
45954: 42aa 0094 clrl %a2@(148)
nToSend = 0;
/*
* check to see if snd wakeup callback was set
*/
if ( tty->tty_snd.sw_pfn != NULL) {
45958: 4a88 tstl %a0
4595a: 6700 012e beqw 45a8a <rtems_termios_refill_transmitter+0x228>
(*tty->tty_snd.sw_pfn)(&tty->termios, tty->tty_snd.sw_arg);
4595e: 2f2a 00d8 movel %a2@(216),%sp@- <== NOT EXECUTED
if (newTail == tty->rawOutBuf.Head) {
/*
* Buffer has become empty
*/
tty->rawOutBufState = rob_idle;
nToSend = 0;
45962: 4283 clrl %d3 <== NOT EXECUTED
/*
* check to see if snd wakeup callback was set
*/
if ( tty->tty_snd.sw_pfn != NULL) {
(*tty->tty_snd.sw_pfn)(&tty->termios, tty->tty_snd.sw_arg);
45964: 486a 0030 pea %a2@(48) <== NOT EXECUTED
45968: 4e90 jsr %a0@ <== NOT EXECUTED
4596a: 508f addql #8,%sp <== NOT EXECUTED
}
tty->rawOutBufState = rob_busy; /*apm*/
(*tty->device.write)(
tty->minor, &tty->rawOutBuf.theBuf[newTail], nToSend);
}
tty->rawOutBuf.Tail = newTail; /*apm*/
4596c: 2542 0084 movel %d2,%a2@(132) <== NOT EXECUTED
45970: 60ba bras 4592c <rtems_termios_refill_transmitter+0xca><== NOT EXECUTED
* Buffer not empty, start tranmitter
*/
if (newTail > tty->rawOutBuf.Head)
nToSend = tty->rawOutBuf.Size - newTail;
else
nToSend = tty->rawOutBuf.Head - newTail;
45972: 262a 0080 movel %a2@(128),%d3
45976: 9682 subl %d2,%d3
/* 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)) {
45978: 202a 00b8 movel %a2@(184),%d0
4597c: 0280 0000 0600 andil #1536,%d0
45982: 6784 beqs 45908 <rtems_termios_refill_transmitter+0xa6>
45984: 7001 moveq #1,%d0
nToSend = 1;
}
tty->rawOutBufState = rob_busy; /*apm*/
45986: 7201 moveq #1,%d1
nToSend = tty->rawOutBuf.Head - newTail;
/* 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)) {
nToSend = 1;
45988: 7601 moveq #1,%d3
}
tty->rawOutBufState = rob_busy; /*apm*/
(*tty->device.write)(
4598a: 2f00 movel %d0,%sp@-
4598c: 202a 007c movel %a2@(124),%d0
45990: d082 addl %d2,%d0
45992: 2f00 movel %d0,%sp@-
45994: 2f2a 0010 movel %a2@(16),%sp@-
45998: 206a 00a4 moveal %a2@(164),%a0
/* to allow fast reaction on incoming flow ctrl and low latency*/
/* for outgoing flow control */
if (tty->flow_ctrl & (FL_MDXON | FL_MDXOF)) {
nToSend = 1;
}
tty->rawOutBufState = rob_busy; /*apm*/
4599c: 2541 0094 movel %d1,%a2@(148)
(*tty->device.write)(
459a0: 4e90 jsr %a0@
459a2: 4fef 000c lea %sp@(12),%sp
459a6: 6080 bras 45928 <rtems_termios_refill_transmitter+0xc6>
tty->rawOutBuf.Tail = newTail;
if (tty->rawOutBufState == rob_wait) {
/*
* wake up any pending writer task
*/
rtems_semaphore_release (tty->rawOutBuf.Semaphore);
459a8: 2f2a 008c movel %a2@(140),%sp@-
459ac: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
}
if (newTail == tty->rawOutBuf.Head) {
459b2: 202a 0080 movel %a2@(128),%d0
tty->rawOutBuf.Tail = newTail;
if (tty->rawOutBufState == rob_wait) {
/*
* wake up any pending writer task
*/
rtems_semaphore_release (tty->rawOutBuf.Semaphore);
459b6: 588f addql #4,%sp
}
if (newTail == tty->rawOutBuf.Head) {
459b8: b480 cmpl %d0,%d2
459ba: 6600 ff1e bnew 458da <rtems_termios_refill_transmitter+0x78>
459be: 6090 bras 45950 <rtems_termios_refill_transmitter+0xee>
/* check for XOF/XON to send */
if ((tty->flow_ctrl & (FL_MDXOF | FL_IREQXOF | FL_ISNTXOF))
== (FL_MDXOF | FL_IREQXOF)) {
/* XOFF should be sent now... */
(*tty->device.write)(tty->minor, (void *)&(tty->termios.c_cc[VSTOP]), 1);
459c0: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
459c4: 486a 004a pea %a2@(74) <== NOT EXECUTED
459c8: 2f2a 0010 movel %a2@(16),%sp@- <== NOT EXECUTED
459cc: 206a 00a4 moveal %a2@(164),%a0 <== NOT EXECUTED
459d0: 4e90 jsr %a0@ <== NOT EXECUTED
rtems_interrupt_disable(level);
459d2: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
459d8: 40c1 movew %sr,%d1 <== NOT EXECUTED
459da: 8081 orl %d1,%d0 <== NOT EXECUTED
459dc: 46c0 movew %d0,%sr <== NOT EXECUTED
tty->t_dqlen--;
tty->flow_ctrl |= FL_ISNTXOF;
459de: 7402 moveq #2,%d2 <== NOT EXECUTED
== (FL_MDXOF | FL_IREQXOF)) {
/* XOFF should be sent now... */
(*tty->device.write)(tty->minor, (void *)&(tty->termios.c_cc[VSTOP]), 1);
rtems_interrupt_disable(level);
tty->t_dqlen--;
459e0: 53aa 0090 subql #1,%a2@(144) <== NOT EXECUTED
tty->flow_ctrl |= FL_ISNTXOF;
459e4: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
459e8: 8082 orl %d2,%d0 <== NOT EXECUTED
459ea: 2540 00b8 movel %d0,%a2@(184) <== NOT EXECUTED
rtems_interrupt_enable(level);
459ee: 46c1 movew %d1,%sr <== NOT EXECUTED
nToSend = 1;
459f0: 7601 moveq #1,%d3 <== NOT EXECUTED
tty->minor, &tty->rawOutBuf.theBuf[newTail], nToSend);
}
tty->rawOutBuf.Tail = newTail; /*apm*/
}
return nToSend;
}
459f2: 2003 movel %d3,%d0 <== NOT EXECUTED
(*tty->device.write)(tty->minor, (void *)&(tty->termios.c_cc[VSTOP]), 1);
rtems_interrupt_disable(level);
tty->t_dqlen--;
tty->flow_ctrl |= FL_ISNTXOF;
rtems_interrupt_enable(level);
459f4: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
tty->minor, &tty->rawOutBuf.theBuf[newTail], nToSend);
}
tty->rawOutBuf.Tail = newTail; /*apm*/
}
return nToSend;
}
459f8: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2 <== NOT EXECUTED
459fe: 4e5e unlk %fp <== NOT EXECUTED
45a00: 4e75 rts <== NOT EXECUTED
* 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);
45a02: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
45a06: 486a 0049 pea %a2@(73) <== NOT EXECUTED
45a0a: 2f2a 0010 movel %a2@(16),%sp@- <== NOT EXECUTED
45a0e: 206a 00a4 moveal %a2@(164),%a0 <== NOT EXECUTED
45a12: 4e90 jsr %a0@ <== NOT EXECUTED
rtems_interrupt_disable(level);
45a14: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
45a1a: 40c1 movew %sr,%d1 <== NOT EXECUTED
45a1c: 8081 orl %d1,%d0 <== NOT EXECUTED
45a1e: 46c0 movew %d0,%sr <== NOT EXECUTED
tty->t_dqlen--;
tty->flow_ctrl &= ~FL_ISNTXOF;
45a20: 74fd moveq #-3,%d2 <== NOT EXECUTED
* Therefore the dequeue "length" should be reduced by 1
*/
(*tty->device.write)(tty->minor, (void *)&(tty->termios.c_cc[VSTART]), 1);
rtems_interrupt_disable(level);
tty->t_dqlen--;
45a22: 53aa 0090 subql #1,%a2@(144) <== NOT EXECUTED
tty->flow_ctrl &= ~FL_ISNTXOF;
45a26: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
45a2a: c082 andl %d2,%d0 <== NOT EXECUTED
45a2c: 2540 00b8 movel %d0,%a2@(184) <== NOT EXECUTED
rtems_interrupt_enable(level);
45a30: 46c1 movew %d1,%sr <== NOT EXECUTED
nToSend = 1;
45a32: 163c 0001 moveb #1,%d3 <== NOT EXECUTED
tty->minor, &tty->rawOutBuf.theBuf[newTail], nToSend);
}
tty->rawOutBuf.Tail = newTail; /*apm*/
}
return nToSend;
}
45a36: 2003 movel %d3,%d0 <== NOT EXECUTED
(*tty->device.write)(tty->minor, (void *)&(tty->termios.c_cc[VSTART]), 1);
rtems_interrupt_disable(level);
tty->t_dqlen--;
tty->flow_ctrl &= ~FL_ISNTXOF;
rtems_interrupt_enable(level);
45a38: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
tty->minor, &tty->rawOutBuf.theBuf[newTail], nToSend);
}
tty->rawOutBuf.Tail = newTail; /*apm*/
}
return nToSend;
}
45a3c: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2 <== NOT EXECUTED
45a42: 4e5e unlk %fp <== NOT EXECUTED
45a44: 4e75 rts <== NOT EXECUTED
/* check, whether output should stop due to received XOFF */
else if ((tty->flow_ctrl & (FL_MDXON | FL_ORCVXOF))
== (FL_MDXON | FL_ORCVXOF)) {
/* Buffer not empty, but output stops due to XOFF */
/* set flag, that output has been stopped */
rtems_interrupt_disable(level);
45a46: 303c 0700 movew #1792,%d0 <== NOT EXECUTED
45a4a: 40c1 movew %sr,%d1 <== NOT EXECUTED
45a4c: 8081 orl %d1,%d0 <== NOT EXECUTED
45a4e: 46c0 movew %d0,%sr <== NOT EXECUTED
tty->flow_ctrl |= FL_OSTOP;
45a50: 202a 00b8 movel %a2@(184),%d0 <== NOT EXECUTED
45a54: 7620 moveq #32,%d3 <== NOT EXECUTED
45a56: 8083 orl %d3,%d0 <== NOT EXECUTED
tty->rawOutBufState = rob_busy; /*apm*/
45a58: 163c 0001 moveb #1,%d3 <== NOT EXECUTED
else if ((tty->flow_ctrl & (FL_MDXON | FL_ORCVXOF))
== (FL_MDXON | FL_ORCVXOF)) {
/* Buffer not empty, but output stops due to XOFF */
/* set flag, that output has been stopped */
rtems_interrupt_disable(level);
tty->flow_ctrl |= FL_OSTOP;
45a5c: 2540 00b8 movel %d0,%a2@(184) <== NOT EXECUTED
tty->rawOutBufState = rob_busy; /*apm*/
45a60: 2543 0094 movel %d3,%a2@(148) <== NOT EXECUTED
rtems_interrupt_enable(level);
45a64: 46c1 movew %d1,%sr <== NOT EXECUTED
}
tty->rawOutBufState = rob_busy; /*apm*/
(*tty->device.write)(
tty->minor, &tty->rawOutBuf.theBuf[newTail], nToSend);
}
tty->rawOutBuf.Tail = newTail; /*apm*/
45a66: 2542 0084 movel %d2,%a2@(132) <== NOT EXECUTED
/* set flag, that output has been stopped */
rtems_interrupt_disable(level);
tty->flow_ctrl |= FL_OSTOP;
tty->rawOutBufState = rob_busy; /*apm*/
rtems_interrupt_enable(level);
nToSend = 0;
45a6a: 4203 clrb %d3 <== NOT EXECUTED
45a6c: 6000 febe braw 4592c <rtems_termios_refill_transmitter+0xca><== NOT EXECUTED
*/
if (tty->rawOutBufState == rob_wait) {
/*
* this should never happen...
*/
rtems_semaphore_release (tty->rawOutBuf.Semaphore);
45a70: 2f2a 008c movel %a2@(140),%sp@- <== NOT EXECUTED
}
return 0;
45a74: 4203 clrb %d3 <== NOT EXECUTED
*/
if (tty->rawOutBufState == rob_wait) {
/*
* this should never happen...
*/
rtems_semaphore_release (tty->rawOutBuf.Semaphore);
45a76: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release> <== NOT EXECUTED
45a7c: 588f addql #4,%sp <== NOT EXECUTED
tty->minor, &tty->rawOutBuf.theBuf[newTail], nToSend);
}
tty->rawOutBuf.Tail = newTail; /*apm*/
}
return nToSend;
}
45a7e: 2003 movel %d3,%d0 <== NOT EXECUTED
45a80: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2 <== NOT EXECUTED
45a86: 4e5e unlk %fp <== NOT EXECUTED
45a88: 4e75 rts <== NOT EXECUTED
}
tty->rawOutBufState = rob_busy; /*apm*/
(*tty->device.write)(
tty->minor, &tty->rawOutBuf.theBuf[newTail], nToSend);
}
tty->rawOutBuf.Tail = newTail; /*apm*/
45a8a: 2542 0084 movel %d2,%a2@(132)
if (newTail == tty->rawOutBuf.Head) {
/*
* Buffer has become empty
*/
tty->rawOutBufState = rob_idle;
nToSend = 0;
45a8e: 4283 clrl %d3
45a90: 6000 fe9a braw 4592c <rtems_termios_refill_transmitter+0xca>
000457c6 <rtems_termios_rxdaemon>:
/*
* this task actually processes any receive events
*/
static rtems_task rtems_termios_rxdaemon(rtems_task_argument argument)
{
457c6: 4e56 ffe0 linkw %fp,#-32
457ca: 48d7 3c0c moveml %d2-%d3/%a2-%a5,%sp@
457ce: 240e movel %fp,%d2
457d0: 260e movel %fp,%d3
457d2: 5d82 subql #6,%d2
457d4: 47f9 0004 5f90 lea 45f90 <rtems_event_receive>,%a3
457da: 49f9 0004 6988 lea 46988 <rtems_task_delete>,%a4
457e0: 5383 subql #1,%d3
457e2: 4bf9 0004 5514 lea 45514 <rtems_termios_enqueue_raw_characters>,%a5
457e8: 246e 0008 moveal %fp@(8),%a2
while (1) {
/*
* wait for rtems event
*/
rtems_event_receive(
457ec: 2f02 movel %d2,%sp@-
457ee: 42a7 clrl %sp@-
457f0: 4878 0002 pea 2 <DOUBLE_FLOAT>
457f4: 4878 0003 pea 3 <DIVIDE>
457f8: 4e93 jsr %a3@
(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) {
457fa: 4fef 0010 lea %sp@(16),%sp
457fe: 7001 moveq #1,%d0
45800: c0ae fffa andl %fp@(-6),%d0
45804: 663e bnes 45844 <rtems_termios_rxdaemon+0x7e> <== NEVER TAKEN
}
/*
* do something
*/
c = tty->device.pollRead(tty->minor);
45806: 2f2a 0010 movel %a2@(16),%sp@-
4580a: 206a 00a0 moveal %a2@(160),%a0
4580e: 4e90 jsr %a0@
if (c != EOF) {
45810: 588f addql #4,%sp
45812: 72ff moveq #-1,%d1
45814: b280 cmpl %d0,%d1
45816: 67d4 beqs 457ec <rtems_termios_rxdaemon+0x26>
/*
* pollRead did call enqueue on its own
*/
c_buf = c;
rtems_termios_enqueue_raw_characters ( tty,&c_buf,1);
45818: 4878 0001 pea 1 <ADD>
c = tty->device.pollRead(tty->minor);
if (c != EOF) {
/*
* pollRead did call enqueue on its own
*/
c_buf = c;
4581c: 1d40 ffff moveb %d0,%fp@(-1)
rtems_termios_enqueue_raw_characters ( tty,&c_buf,1);
45820: 2f03 movel %d3,%sp@-
45822: 2f0a movel %a2,%sp@-
45824: 4e95 jsr %a5@
45826: 4fef 000c lea %sp@(12),%sp
while (1) {
/*
* wait for rtems event
*/
rtems_event_receive(
4582a: 2f02 movel %d2,%sp@-
4582c: 42a7 clrl %sp@-
4582e: 4878 0002 pea 2 <DOUBLE_FLOAT>
45832: 4878 0003 pea 3 <DIVIDE>
45836: 4e93 jsr %a3@
(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) {
45838: 4fef 0010 lea %sp@(16),%sp
4583c: 7001 moveq #1,%d0
4583e: c0ae fffa andl %fp@(-6),%d0
45842: 67c2 beqs 45806 <rtems_termios_rxdaemon+0x40> <== ALWAYS TAKEN
tty->rxTaskId = 0;
45844: 42aa 00c4 clrl %a2@(196) <== NOT EXECUTED
rtems_task_delete(RTEMS_SELF);
45848: 42a7 clrl %sp@- <== NOT EXECUTED
4584a: 4e94 jsr %a4@ <== NOT EXECUTED
4584c: 588f addql #4,%sp <== NOT EXECUTED
}
/*
* do something
*/
c = tty->device.pollRead(tty->minor);
4584e: 2f2a 0010 movel %a2@(16),%sp@- <== NOT EXECUTED
45852: 206a 00a0 moveal %a2@(160),%a0 <== NOT EXECUTED
45856: 4e90 jsr %a0@ <== NOT EXECUTED
if (c != EOF) {
45858: 588f addql #4,%sp <== NOT EXECUTED
4585a: 72ff moveq #-1,%d1 <== NOT EXECUTED
4585c: b280 cmpl %d0,%d1 <== NOT EXECUTED
4585e: 678c beqs 457ec <rtems_termios_rxdaemon+0x26> <== NOT EXECUTED
45860: 60b6 bras 45818 <rtems_termios_rxdaemon+0x52> <== NOT EXECUTED
00047648 <rtems_termios_set_initial_baud>:
int rtems_termios_set_initial_baud(
struct rtems_termios_tty *ttyp,
int32_t baud
)
{
47648: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4764c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4764e: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
47652: 2f02 movel %d2,%sp@- <== NOT EXECUTED
int cflags_baud;
cflags_baud = rtems_termios_number_to_baud(baud);
47654: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
47658: 4eb9 0004 5818 jsr 45818 <rtems_termios_number_to_baud> <== NOT EXECUTED
if ( cflags_baud == -1 )
4765e: 588f addql #4,%sp <== NOT EXECUTED
47660: 72ff moveq #-1,%d1 <== NOT EXECUTED
47662: b280 cmpl %d0,%d1 <== NOT EXECUTED
47664: 6720 beqs 47686 <rtems_termios_set_initial_baud+0x3e><== NOT EXECUTED
return -1;
ttyp->termios.c_cflag = (ttyp->termios.c_cflag & ~CBAUD) | cflags_baud;
47666: 242a 0038 movel %a2@(56),%d2 <== NOT EXECUTED
return 0;
4766a: 4281 clrl %d1 <== NOT EXECUTED
cflags_baud = rtems_termios_number_to_baud(baud);
if ( cflags_baud == -1 )
return -1;
ttyp->termios.c_cflag = (ttyp->termios.c_cflag & ~CBAUD) | cflags_baud;
4766c: 0282 ffff eff0 andil #-4112,%d2 <== NOT EXECUTED
47672: 8082 orl %d2,%d0 <== NOT EXECUTED
return 0;
}
47674: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
cflags_baud = rtems_termios_number_to_baud(baud);
if ( cflags_baud == -1 )
return -1;
ttyp->termios.c_cflag = (ttyp->termios.c_cflag & ~CBAUD) | cflags_baud;
47678: 2540 0038 movel %d0,%a2@(56) <== NOT EXECUTED
return 0;
}
4767c: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
47680: 2001 movel %d1,%d0 <== NOT EXECUTED
47682: 4e5e unlk %fp <== NOT EXECUTED
47684: 4e75 rts <== NOT EXECUTED
47686: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
{
int cflags_baud;
cflags_baud = rtems_termios_number_to_baud(baud);
if ( cflags_baud == -1 )
return -1;
4768a: 72ff moveq #-1,%d1 <== NOT EXECUTED
ttyp->termios.c_cflag = (ttyp->termios.c_cflag & ~CBAUD) | cflags_baud;
return 0;
}
4768c: 2001 movel %d1,%d0 <== NOT EXECUTED
4768e: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
47692: 4e5e unlk %fp <== NOT EXECUTED
...
00045a94 <rtems_termios_txdaemon>:
/*
* this task actually processes any transmit events
*/
static rtems_task rtems_termios_txdaemon(rtems_task_argument argument)
{
45a94: 4e56 ffe8 linkw %fp,#-24
45a98: 48d7 3c04 moveml %d2/%a2-%a5,%sp@
45a9c: 240e movel %fp,%d2
45a9e: 5982 subql #4,%d2
45aa0: 49f9 0004 5f90 lea 45f90 <rtems_event_receive>,%a4
45aa6: 4bf9 0004 6988 lea 46988 <rtems_task_delete>,%a5
45aac: 47f9 0004 5862 lea 45862 <rtems_termios_refill_transmitter>,%a3
while (1) {
/*
* wait for rtems event
*/
rtems_event_receive(
45ab2: 2f02 movel %d2,%sp@-
/*
* this task actually processes any transmit events
*/
static rtems_task rtems_termios_txdaemon(rtems_task_argument argument)
{
45ab4: 246e 0008 moveal %fp@(8),%a2
while (1) {
/*
* wait for rtems event
*/
rtems_event_receive(
45ab8: 42a7 clrl %sp@-
45aba: 4878 0002 pea 2 <DOUBLE_FLOAT>
45abe: 4878 0003 pea 3 <DIVIDE>
45ac2: 4e94 jsr %a4@
(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) {
45ac4: 4fef 0010 lea %sp@(16),%sp
45ac8: 7001 moveq #1,%d0
45aca: c0ae fffc andl %fp@(-4),%d0
45ace: 663a bnes 45b0a <rtems_termios_txdaemon+0x76> <== NEVER TAKEN
}
/*
* call any line discipline start function
*/
if (rtems_termios_linesw[tty->t_line].l_start != NULL) {
45ad0: 202a 00cc movel %a2@(204),%d0
45ad4: eb88 lsll #5,%d0
45ad6: 0680 0005 dae4 addil #383716,%d0
45adc: 2240 moveal %d0,%a1
45ade: 2051 moveal %a1@,%a0
45ae0: 4a88 tstl %a0
45ae2: 6706 beqs 45aea <rtems_termios_txdaemon+0x56> <== ALWAYS TAKEN
rtems_termios_linesw[tty->t_line].l_start(tty);
45ae4: 2f0a movel %a2,%sp@- <== NOT EXECUTED
45ae6: 4e90 jsr %a0@ <== NOT EXECUTED
45ae8: 588f addql #4,%sp <== NOT EXECUTED
}
/*
* try to push further characters to device
*/
rtems_termios_refill_transmitter(tty);
45aea: 2f0a movel %a2,%sp@-
45aec: 4e93 jsr %a3@
}
45aee: 588f addql #4,%sp
while (1) {
/*
* wait for rtems event
*/
rtems_event_receive(
45af0: 2f02 movel %d2,%sp@-
45af2: 42a7 clrl %sp@-
45af4: 4878 0002 pea 2 <DOUBLE_FLOAT>
45af8: 4878 0003 pea 3 <DIVIDE>
45afc: 4e94 jsr %a4@
(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) {
45afe: 4fef 0010 lea %sp@(16),%sp
45b02: 7001 moveq #1,%d0
45b04: c0ae fffc andl %fp@(-4),%d0
45b08: 67c6 beqs 45ad0 <rtems_termios_txdaemon+0x3c> <== ALWAYS TAKEN
tty->txTaskId = 0;
45b0a: 42aa 00c8 clrl %a2@(200) <== NOT EXECUTED
rtems_task_delete(RTEMS_SELF);
45b0e: 42a7 clrl %sp@- <== NOT EXECUTED
45b10: 4e95 jsr %a5@ <== NOT EXECUTED
45b12: 588f addql #4,%sp <== NOT EXECUTED
45b14: 60ba bras 45ad0 <rtems_termios_txdaemon+0x3c> <== NOT EXECUTED
000450cc <rtems_termios_write>:
rtems_termios_puts (&c, 1, tty);
}
rtems_status_code
rtems_termios_write (void *arg)
{
450cc: 4e56 ffe8 linkw %fp,#-24
450d0: 48d7 3c0c moveml %d2-%d3/%a2-%a5,%sp@
450d4: 266e 0008 moveal %fp@(8),%a3
rtems_libio_rw_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
450d8: 2053 moveal %a3@,%a0
450da: 2468 0034 moveal %a0@(52),%a2
rtems_status_code sc;
sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
450de: 42a7 clrl %sp@-
450e0: 42a7 clrl %sp@-
450e2: 2f2a 0018 movel %a2@(24),%sp@-
450e6: 4eb9 0004 6648 jsr 46648 <rtems_semaphore_obtain>
if (sc != RTEMS_SUCCESSFUL)
450ec: 4fef 000c lea %sp@(12),%sp
{
rtems_libio_rw_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
rtems_status_code sc;
sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
450f0: 2400 movel %d0,%d2
if (sc != RTEMS_SUCCESSFUL)
450f2: 662a bnes 4511e <rtems_termios_write+0x52> <== NEVER TAKEN
return sc;
if (rtems_termios_linesw[tty->t_line].l_write != NULL) {
450f4: 202a 00cc movel %a2@(204),%d0
450f8: eb88 lsll #5,%d0
450fa: 0680 0005 dadc addil #383708,%d0
45100: 2240 moveal %d0,%a1
45102: 2051 moveal %a1@,%a0
45104: 4a88 tstl %a0
45106: 6722 beqs 4512a <rtems_termios_write+0x5e>
sc = rtems_termios_linesw[tty->t_line].l_write(tty,args);
45108: 2f0b movel %a3,%sp@-
4510a: 2f0a movel %a2,%sp@-
4510c: 4e90 jsr %a0@
rtems_semaphore_release (tty->osem);
4510e: 2f2a 0018 movel %a2@(24),%sp@-
sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
return sc;
if (rtems_termios_linesw[tty->t_line].l_write != NULL) {
sc = rtems_termios_linesw[tty->t_line].l_write(tty,args);
45112: 2400 movel %d0,%d2
rtems_semaphore_release (tty->osem);
45114: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
return sc;
4511a: 4fef 000c lea %sp@(12),%sp
rtems_termios_puts (args->buffer, args->count, tty);
args->bytes_moved = args->count;
}
rtems_semaphore_release (tty->osem);
return sc;
}
4511e: 2002 movel %d2,%d0
45120: 4cee 3c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a5
45126: 4e5e unlk %fp
45128: 4e75 rts
if (rtems_termios_linesw[tty->t_line].l_write != NULL) {
sc = rtems_termios_linesw[tty->t_line].l_write(tty,args);
rtems_semaphore_release (tty->osem);
return sc;
}
if (tty->termios.c_oflag & OPOST) {
4512a: 7001 moveq #1,%d0
4512c: c0aa 0034 andl %a2@(52),%d0
45130: 6740 beqs 45172 <rtems_termios_write+0xa6> <== NEVER TAKEN
uint32_t count = args->count;
45132: 262b 0010 movel %a3@(16),%d3
char *buffer = args->buffer;
45136: 286b 000c moveal %a3@(12),%a4
while (count--)
4513a: 675e beqs 4519a <rtems_termios_write+0xce> <== NEVER TAKEN
4513c: 4bfa f8a8 lea %pc@(449e6 <oproc>),%a5
oproc (*buffer++, tty);
45140: 4280 clrl %d0
45142: 101c moveb %a4@+,%d0
45144: 5383 subql #1,%d3
45146: 2f0a movel %a2,%sp@-
45148: 2f00 movel %d0,%sp@-
4514a: 4e95 jsr %a5@
return sc;
}
if (tty->termios.c_oflag & OPOST) {
uint32_t count = args->count;
char *buffer = args->buffer;
while (count--)
4514c: 508f addql #8,%sp
4514e: 4a83 tstl %d3
45150: 66ee bnes 45140 <rtems_termios_write+0x74>
45152: 202b 0010 movel %a3@(16),%d0
oproc (*buffer++, tty);
args->bytes_moved = args->count;
45156: 2740 0018 movel %d0,%a3@(24)
} else {
rtems_termios_puts (args->buffer, args->count, tty);
args->bytes_moved = args->count;
}
rtems_semaphore_release (tty->osem);
4515a: 2f2a 0018 movel %a2@(24),%sp@-
4515e: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
return sc;
45164: 588f addql #4,%sp
}
45166: 2002 movel %d2,%d0
45168: 4cee 3c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a5
4516e: 4e5e unlk %fp
45170: 4e75 rts
char *buffer = args->buffer;
while (count--)
oproc (*buffer++, tty);
args->bytes_moved = args->count;
} else {
rtems_termios_puts (args->buffer, args->count, tty);
45172: 2f0a movel %a2,%sp@- <== NOT EXECUTED
45174: 2f2b 0010 movel %a3@(16),%sp@- <== NOT EXECUTED
45178: 2f2b 000c movel %a3@(12),%sp@- <== NOT EXECUTED
4517c: 4eb9 0004 48e2 jsr 448e2 <rtems_termios_puts> <== NOT EXECUTED
args->bytes_moved = args->count;
45182: 276b 0010 0018 movel %a3@(16),%a3@(24) <== NOT EXECUTED
45188: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
}
rtems_semaphore_release (tty->osem);
4518c: 2f2a 0018 movel %a2@(24),%sp@- <== NOT EXECUTED
45190: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release> <== NOT EXECUTED
return sc;
45196: 588f addql #4,%sp <== NOT EXECUTED
45198: 60cc bras 45166 <rtems_termios_write+0x9a> <== NOT EXECUTED
return sc;
}
if (tty->termios.c_oflag & OPOST) {
uint32_t count = args->count;
char *buffer = args->buffer;
while (count--)
4519a: 4280 clrl %d0 <== NOT EXECUTED
oproc (*buffer++, tty);
args->bytes_moved = args->count;
4519c: 2740 0018 movel %d0,%a3@(24) <== NOT EXECUTED
451a0: 60b8 bras 4515a <rtems_termios_write+0x8e> <== NOT EXECUTED
00058c44 <rtems_timer_cancel>:
*/
rtems_status_code rtems_timer_cancel(
rtems_id id
)
{
58c44: 4e56 fffc linkw %fp,#-4
Objects_Id id,
Objects_Locations *location
)
{
return (Timer_Control *)
_Objects_Get( &_Timer_Information, id, location );
58c48: 486e fffc pea %fp@(-4)
58c4c: 2f2e 0008 movel %fp@(8),%sp@-
58c50: 4879 0007 d4de pea 7d4de <_Timer_Information>
58c56: 4eb9 0005 bb0c jsr 5bb0c <_Objects_Get>
Timer_Control *the_timer;
Objects_Locations location;
the_timer = _Timer_Get( id, &location );
switch ( location ) {
58c5c: 4fef 000c lea %sp@(12),%sp
58c60: 4aae fffc tstl %fp@(-4)
58c64: 6706 beqs 58c6c <rtems_timer_cancel+0x28>
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
58c66: 7004 moveq #4,%d0
}
58c68: 4e5e unlk %fp
58c6a: 4e75 rts
the_timer = _Timer_Get( id, &location );
switch ( location ) {
case OBJECTS_LOCAL:
if ( !_Timer_Is_dormant_class( the_timer->the_class ) )
58c6c: 7204 moveq #4,%d1
58c6e: 2040 moveal %d0,%a0
58c70: b2a8 0038 cmpl %a0@(56),%d1
58c74: 670c beqs 58c82 <rtems_timer_cancel+0x3e> <== NEVER TAKEN
(void) _Watchdog_Remove( &the_timer->Ticker );
58c76: 4868 0010 pea %a0@(16)
58c7a: 4eb9 0005 d98c jsr 5d98c <_Watchdog_Remove>
58c80: 588f addql #4,%sp
_Thread_Enable_dispatch();
58c82: 4eb9 0005 c3f2 jsr 5c3f2 <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
58c88: 4280 clrl %d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
58c8a: 4e5e unlk %fp
...
000596f8 <rtems_timer_initiate_server>:
rtems_status_code rtems_timer_initiate_server(
uint32_t priority,
uint32_t stack_size,
rtems_attribute attribute_set
)
{
596f8: 4e56 fffc linkw %fp,#-4
596fc: 202e 0008 movel %fp@(8),%d0
59700: 2f03 movel %d3,%sp@-
59702: 2f02 movel %d2,%sp@-
59704: 4a80 tstl %d0
59706: 6748 beqs 59750 <rtems_timer_initiate_server+0x58>
( the_priority <= RTEMS_MAXIMUM_PRIORITY ) );
59708: 4281 clrl %d1
5970a: 1239 0007 77f2 moveb 777f2 <rtems_maximum_priority>,%d1
*/
RTEMS_INLINE_ROUTINE bool _RTEMS_tasks_Priority_is_valid (
rtems_task_priority the_priority
)
{
return ( ( the_priority >= RTEMS_MINIMUM_PRIORITY ) &&
59710: b280 cmpl %d0,%d1
59712: 644a bccs 5975e <rtems_timer_initiate_server+0x66>
* 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 )
59714: 72ff moveq #-1,%d1
59716: b280 cmpl %d0,%d1
59718: 6636 bnes 59750 <rtems_timer_initiate_server+0x58>
5971a: 2239 0007 d2c8 movel 7d2c8 <_Thread_Dispatch_disable_level>,%d1
59720: 5281 addql #1,%d1
return RTEMS_INVALID_PRIORITY;
_priority = 0;
59722: 4283 clrl %d3
59724: 23c1 0007 d2c8 movel %d1,7d2c8 <_Thread_Dispatch_disable_level>
/*
* Just to make sure this is only called once.
*/
_Thread_Disable_dispatch();
tmpInitialized = initialized;
initialized = true;
5972a: 7001 moveq #1,%d0
/*
* Just to make sure this is only called once.
*/
_Thread_Disable_dispatch();
tmpInitialized = initialized;
5972c: 1439 0007 87ae moveb 787ae <initialized.3554>,%d2
initialized = true;
59732: 13c0 0007 87ae moveb %d0,787ae <initialized.3554>
_Thread_Enable_dispatch();
59738: 4eb9 0005 c3f2 jsr 5c3f2 <_Thread_Enable_dispatch>
if ( tmpInitialized )
5973e: 4a02 tstb %d2
59740: 6744 beqs 59786 <rtems_timer_initiate_server+0x8e>
initialized = false;
}
#endif
return status;
}
59742: 242e fff4 movel %fp@(-12),%d2
tmpInitialized = initialized;
initialized = true;
_Thread_Enable_dispatch();
if ( tmpInitialized )
return RTEMS_INCORRECT_STATE;
59746: 700e moveq #14,%d0
initialized = false;
}
#endif
return status;
}
59748: 262e fff8 movel %fp@(-8),%d3
5974c: 4e5e unlk %fp
5974e: 4e75 rts
59750: 242e fff4 movel %fp@(-12),%d2
* a specific invalid value as the default.
*/
_priority = priority;
if ( !_RTEMS_tasks_Priority_is_valid( priority ) ) {
if ( priority != RTEMS_TIMER_SERVER_DEFAULT_PRIORITY )
return RTEMS_INVALID_PRIORITY;
59754: 7013 moveq #19,%d0
initialized = false;
}
#endif
return status;
}
59756: 262e fff8 movel %fp@(-8),%d3
5975a: 4e5e unlk %fp
5975c: 4e75 rts
5975e: 2239 0007 d2c8 movel 7d2c8 <_Thread_Dispatch_disable_level>,%d1
59764: 5281 addql #1,%d1
59766: 2600 movel %d0,%d3
59768: 23c1 0007 d2c8 movel %d1,7d2c8 <_Thread_Dispatch_disable_level>
/*
* Just to make sure this is only called once.
*/
_Thread_Disable_dispatch();
tmpInitialized = initialized;
initialized = true;
5976e: 7001 moveq #1,%d0
/*
* Just to make sure this is only called once.
*/
_Thread_Disable_dispatch();
tmpInitialized = initialized;
59770: 1439 0007 87ae moveb 787ae <initialized.3554>,%d2
initialized = true;
59776: 13c0 0007 87ae moveb %d0,787ae <initialized.3554>
_Thread_Enable_dispatch();
5977c: 4eb9 0005 c3f2 jsr 5c3f2 <_Thread_Enable_dispatch>
if ( tmpInitialized )
59782: 4a02 tstb %d2
59784: 66bc bnes 59742 <rtems_timer_initiate_server+0x4a><== 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(
59786: 222e 0010 movel %fp@(16),%d1
5978a: 486e fffc pea %fp@(-4)
5978e: 08c1 000f bset #15,%d1
59792: 2f01 movel %d1,%sp@-
59794: 4878 0100 pea 100 <DBL_MANT_DIG+0xcb>
59798: 2f2e 000c movel %fp@(12),%sp@-
5979c: 2f03 movel %d3,%sp@-
5979e: 2f3c 5449 4d45 movel #1414090053,%sp@-
597a4: 4eb9 0005 8310 jsr 58310 <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) {
597aa: 4fef 0018 lea %sp@(24),%sp
597ae: 4a80 tstl %d0
597b0: 6714 beqs 597c6 <rtems_timer_initiate_server+0xce>
initialized = false;
}
#endif
return status;
}
597b2: 242e fff4 movel %fp@(-12),%d2
/* system task specified for 0 priority */
attribute_set | RTEMS_SYSTEM_TASK,
&id /* get the id back */
);
if (status) {
initialized = false;
597b6: 4201 clrb %d1
initialized = false;
}
#endif
return status;
}
597b8: 262e fff8 movel %fp@(-8),%d3
597bc: 4e5e unlk %fp
/* system task specified for 0 priority */
attribute_set | RTEMS_SYSTEM_TASK,
&id /* get the id back */
);
if (status) {
initialized = false;
597be: 13c1 0007 87ae moveb %d1,787ae <initialized.3554>
initialized = false;
}
#endif
return status;
}
597c4: 4e75 rts
* 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)
597c6: 202e fffc movel %fp@(-4),%d0
*/
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return NULL;
#endif
return information->local_table[ index ];
597ca: 4282 clrl %d2
/*
* 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(
597cc: 2079 0007 d25c moveal 7d25c <_RTEMS_tasks_Information+0x18>,%a0
597d2: 3400 movew %d0,%d2
* 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;
ts->Interval_watchdogs.last_snapshot = _Watchdog_Ticks_since_boot;
597d4: 2239 0007 d3f4 movel 7d3f4 <_Watchdog_Ticks_since_boot>,%d1
/*
* 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(
597da: 41f0 2c00 lea %a0@(00000000,%d2:l:4),%a0
597de: 23d0 0007 8730 movel %a0@,78730 <_Timer_server_Default>
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
597e4: 41f9 0007 8764 lea 78764 <_Timer_server_Default+0x34>,%a0
_Timer_server = ts;
/*
* Start the timer server
*/
status = rtems_task_start(
597ea: 4879 0007 8730 pea 78730 <_Timer_server_Default>
597f0: 487a fb6e pea %pc@(59360 <_Timer_server_Body>)
597f4: 23c8 0007 8760 movel %a0,78760 <_Timer_server_Default+0x30>
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
597fa: 41f9 0007 8760 lea 78760 <_Timer_server_Default+0x30>,%a0
59800: 23c8 0007 8768 movel %a0,78768 <_Timer_server_Default+0x38>
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
59806: 41f9 0007 879c lea 7879c <_Timer_server_Default+0x6c>,%a0
* 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;
ts->Interval_watchdogs.last_snapshot = _Watchdog_Ticks_since_boot;
5980c: 23c1 0007 876c movel %d1,7876c <_Timer_server_Default+0x3c>
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
59812: 223c 0007 8798 movel #493464,%d1
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
59818: 23c8 0007 8798 movel %a0,78798 <_Timer_server_Default+0x68>
ts->TOD_watchdogs.last_snapshot = (Watchdog_Interval) _TOD_Seconds_since_epoch();
5981e: 41f9 0007 d352 lea 7d352 <_TOD_Now>,%a0
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
59824: 23c1 0007 87a0 movel %d1,787a0 <_Timer_server_Default+0x70>
5982a: 23d0 0007 87a4 movel %a0@,787a4 <_Timer_server_Default+0x74>
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
the_watchdog->routine = routine;
59830: 223c 0005 c24c movel #377420,%d1
59836: 41f9 0005 c24c lea 5c24c <_Thread_Delay_ended>,%a0
5983c: 23c1 0007 8754 movel %d1,78754 <_Timer_server_Default+0x24>
ts->insert_chain = NULL;
ts->active = false;
59842: 4201 clrb %d1
ts->schedule_operation = _Timer_server_Schedule_operation_method;
ts->Interval_watchdogs.last_snapshot = _Watchdog_Ticks_since_boot;
ts->TOD_watchdogs.last_snapshot = (Watchdog_Interval) _TOD_Seconds_since_epoch();
ts->insert_chain = NULL;
59844: 42b9 0007 87a8 clrl 787a8 <_Timer_server_Default+0x78>
ts->active = false;
5984a: 13c1 0007 87ac moveb %d1,787ac <_Timer_server_Default+0x7c>
59850: 23c8 0007 878c movel %a0,7878c <_Timer_server_Default+0x5c>
/*
* The default timer server is now available.
*/
_Timer_server = ts;
59856: 41f9 0007 8730 lea 78730 <_Timer_server_Default>,%a0
/*
* Start the timer server
*/
status = rtems_task_start(
5985c: 2f00 movel %d0,%sp@-
/*
* 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;
5985e: 223c 0005 959c movel #365980,%d1
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
59864: 42b9 0007 8764 clrl 78764 <_Timer_server_Default+0x34>
5986a: 42b9 0007 879c clrl 7879c <_Timer_server_Default+0x6c>
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
59870: 42b9 0007 8740 clrl 78740 <_Timer_server_Default+0x10>
59876: 23c1 0007 8734 movel %d1,78734 <_Timer_server_Default+0x4>
the_watchdog->routine = routine;
the_watchdog->id = id;
5987c: 23c0 0007 8758 movel %d0,78758 <_Timer_server_Default+0x28>
ts->active = false;
/*
* The default timer server is now available.
*/
_Timer_server = ts;
59882: 23c8 0007 d516 movel %a0,7d516 <_Timer_server>
the_watchdog->user_data = user_data;
59888: 42b9 0007 875c clrl 7875c <_Timer_server_Default+0x2c>
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
5988e: 42b9 0007 8778 clrl 78778 <_Timer_server_Default+0x48>
the_watchdog->routine = routine;
the_watchdog->id = id;
59894: 23c0 0007 8790 movel %d0,78790 <_Timer_server_Default+0x60>
the_watchdog->user_data = user_data;
5989a: 42b9 0007 8794 clrl 78794 <_Timer_server_Default+0x64>
/*
* Start the timer server
*/
status = rtems_task_start(
598a0: 4eb9 0005 8a2c jsr 58a2c <rtems_task_start>
initialized = false;
}
#endif
return status;
}
598a6: 242e fff4 movel %fp@(-12),%d2
if (status) {
initialized = false;
}
#endif
return status;
598aa: 4fef 000c lea %sp@(12),%sp
}
598ae: 262e fff8 movel %fp@(-8),%d3
598b2: 4e5e unlk %fp
...
00058ffc <rtems_timer_reset>:
*/
rtems_status_code rtems_timer_reset(
rtems_id id
)
{
58ffc: 4e56 fff0 linkw %fp,#-16
59000: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
59004: 486e fffc pea %fp@(-4)
59008: 2f2e 0008 movel %fp@(8),%sp@-
5900c: 4879 0007 d4de pea 7d4de <_Timer_Information>
59012: 4eb9 0005 bb0c jsr 5bb0c <_Objects_Get>
Timer_Control *the_timer;
Objects_Locations location;
rtems_status_code status = RTEMS_SUCCESSFUL;
the_timer = _Timer_Get( id, &location );
switch ( location ) {
59018: 4fef 000c lea %sp@(12),%sp
5901c: 2440 moveal %d0,%a2
5901e: 4aae fffc tstl %fp@(-4)
59022: 670e beqs 59032 <rtems_timer_reset+0x36>
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
59024: 7404 moveq #4,%d2
}
59026: 2002 movel %d2,%d0
59028: 4cee 0c04 fff0 moveml %fp@(-16),%d2/%a2-%a3
5902e: 4e5e unlk %fp
59030: 4e75 rts
the_timer = _Timer_Get( id, &location );
switch ( location ) {
case OBJECTS_LOCAL:
if ( the_timer->the_class == TIMER_INTERVAL ) {
59032: 202a 0038 movel %a2@(56),%d0
59036: 671a beqs 59052 <rtems_timer_reset+0x56>
_Watchdog_Remove( &the_timer->Ticker );
_Watchdog_Insert( &_Watchdog_Ticks_chain, &the_timer->Ticker );
} else if ( the_timer->the_class == TIMER_INTERVAL_ON_TASK ) {
59038: 7201 moveq #1,%d1
5903a: b280 cmpl %d0,%d1
5903c: 673c beqs 5907a <rtems_timer_reset+0x7e>
/*
* Must be dormant or time of day timer (e.g. TIMER_DORMANT,
* TIMER_TIME_OF_DAY, or TIMER_TIME_OF_DAY_ON_TASK). We
* can only reset active interval timers.
*/
status = RTEMS_NOT_DEFINED;
5903e: 740b moveq #11,%d2
}
_Thread_Enable_dispatch();
59040: 4eb9 0005 c3f2 jsr 5c3f2 <_Thread_Enable_dispatch>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
59046: 2002 movel %d2,%d0
59048: 4cee 0c04 fff0 moveml %fp@(-16),%d2/%a2-%a3
5904e: 4e5e unlk %fp
59050: 4e75 rts
the_timer = _Timer_Get( id, &location );
switch ( location ) {
case OBJECTS_LOCAL:
if ( the_timer->the_class == TIMER_INTERVAL ) {
_Watchdog_Remove( &the_timer->Ticker );
59052: 45ea 0010 lea %a2@(16),%a2
rtems_id id
)
{
Timer_Control *the_timer;
Objects_Locations location;
rtems_status_code status = RTEMS_SUCCESSFUL;
59056: 4282 clrl %d2
the_timer = _Timer_Get( id, &location );
switch ( location ) {
case OBJECTS_LOCAL:
if ( the_timer->the_class == TIMER_INTERVAL ) {
_Watchdog_Remove( &the_timer->Ticker );
59058: 2f0a movel %a2,%sp@-
5905a: 4eb9 0005 d98c jsr 5d98c <_Watchdog_Remove>
_Watchdog_Insert( &_Watchdog_Ticks_chain, &the_timer->Ticker );
59060: 2f0a movel %a2,%sp@-
59062: 4879 0007 d38a pea 7d38a <_Watchdog_Ticks_chain>
59068: 4eb9 0005 d844 jsr 5d844 <_Watchdog_Insert>
5906e: 4fef 000c lea %sp@(12),%sp
* TIMER_TIME_OF_DAY, or TIMER_TIME_OF_DAY_ON_TASK). We
* can only reset active interval timers.
*/
status = RTEMS_NOT_DEFINED;
}
_Thread_Enable_dispatch();
59072: 4eb9 0005 c3f2 jsr 5c3f2 <_Thread_Enable_dispatch>
59078: 60cc bras 59046 <rtems_timer_reset+0x4a>
if ( !timer_server ) {
_Thread_Enable_dispatch();
return RTEMS_INCORRECT_STATE;
}
#endif
_Watchdog_Remove( &the_timer->Ticker );
5907a: 486a 0010 pea %a2@(16)
rtems_id id
)
{
Timer_Control *the_timer;
Objects_Locations location;
rtems_status_code status = RTEMS_SUCCESSFUL;
5907e: 4282 clrl %d2
case OBJECTS_LOCAL:
if ( the_timer->the_class == TIMER_INTERVAL ) {
_Watchdog_Remove( &the_timer->Ticker );
_Watchdog_Insert( &_Watchdog_Ticks_chain, &the_timer->Ticker );
} else if ( the_timer->the_class == TIMER_INTERVAL_ON_TASK ) {
Timer_server_Control *timer_server = _Timer_server;
59080: 2679 0007 d516 moveal 7d516 <_Timer_server>,%a3
if ( !timer_server ) {
_Thread_Enable_dispatch();
return RTEMS_INCORRECT_STATE;
}
#endif
_Watchdog_Remove( &the_timer->Ticker );
59086: 4eb9 0005 d98c jsr 5d98c <_Watchdog_Remove>
(*timer_server->schedule_operation)( timer_server, the_timer );
5908c: 2f0a movel %a2,%sp@-
5908e: 2f0b movel %a3,%sp@-
59090: 206b 0004 moveal %a3@(4),%a0
59094: 4e90 jsr %a0@
59096: 4fef 000c lea %sp@(12),%sp
* TIMER_TIME_OF_DAY, or TIMER_TIME_OF_DAY_ON_TASK). We
* can only reset active interval timers.
*/
status = RTEMS_NOT_DEFINED;
}
_Thread_Enable_dispatch();
5909a: 4eb9 0005 c3f2 jsr 5c3f2 <_Thread_Enable_dispatch>
590a0: 60a4 bras 59046 <rtems_timer_reset+0x4a>
...
0005918c <rtems_timer_server_fire_when>:
rtems_id id,
rtems_time_of_day *wall_time,
rtems_timer_service_routine_entry routine,
void *user_data
)
{
5918c: 4e56 ffec linkw %fp,#-20
59190: 48d7 0c0c moveml %d2-%d3/%a2-%a3,%sp@
59194: 242e 000c movel %fp@(12),%d2
59198: 262e 0010 movel %fp@(16),%d3
Timer_Control *the_timer;
Objects_Locations location;
rtems_interval seconds;
Timer_server_Control *timer_server = _Timer_server;
5919c: 2479 0007 d516 moveal 7d516 <_Timer_server>,%a2
if ( !timer_server )
591a2: 4a8a tstl %a2
591a4: 6700 00c8 beqw 5926e <rtems_timer_server_fire_when+0xe2>
return RTEMS_INCORRECT_STATE;
if ( !_TOD_Is_set )
591a8: 4a39 0007 d2d8 tstb 7d2d8 <_TOD_Is_set>
591ae: 6700 00a6 beqw 59256 <rtems_timer_server_fire_when+0xca>
return RTEMS_NOT_DEFINED;
if ( !routine )
591b2: 4a83 tstl %d3
591b4: 6700 00ac beqw 59262 <rtems_timer_server_fire_when+0xd6>
return RTEMS_INVALID_ADDRESS;
if ( !_TOD_Validate( wall_time ) )
591b8: 2f02 movel %d2,%sp@-
591ba: 4eb9 0005 5eac jsr 55eac <_TOD_Validate>
591c0: 588f addql #4,%sp
591c2: 4a00 tstb %d0
591c4: 660c bnes 591d2 <rtems_timer_server_fire_when+0x46>
return RTEMS_INVALID_CLOCK;
seconds = _TOD_To_seconds( wall_time );
if ( seconds <= _TOD_Seconds_since_epoch() )
return RTEMS_INVALID_CLOCK;
591c6: 7014 moveq #20,%d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
591c8: 4cee 0c0c ffec moveml %fp@(-20),%d2-%d3/%a2-%a3
591ce: 4e5e unlk %fp
591d0: 4e75 rts
return RTEMS_INVALID_ADDRESS;
if ( !_TOD_Validate( wall_time ) )
return RTEMS_INVALID_CLOCK;
seconds = _TOD_To_seconds( wall_time );
591d2: 2f02 movel %d2,%sp@-
591d4: 4eb9 0005 5da4 jsr 55da4 <_TOD_To_seconds>
if ( seconds <= _TOD_Seconds_since_epoch() )
591da: 588f addql #4,%sp
return RTEMS_INVALID_ADDRESS;
if ( !_TOD_Validate( wall_time ) )
return RTEMS_INVALID_CLOCK;
seconds = _TOD_To_seconds( wall_time );
591dc: 2400 movel %d0,%d2
if ( seconds <= _TOD_Seconds_since_epoch() )
591de: b0b9 0007 d352 cmpl 7d352 <_TOD_Now>,%d0
591e4: 63e0 blss 591c6 <rtems_timer_server_fire_when+0x3a>
591e6: 486e fffc pea %fp@(-4)
591ea: 2f2e 0008 movel %fp@(8),%sp@-
591ee: 4879 0007 d4de pea 7d4de <_Timer_Information>
591f4: 4eb9 0005 bb0c jsr 5bb0c <_Objects_Get>
return RTEMS_INVALID_CLOCK;
the_timer = _Timer_Get( id, &location );
switch ( location ) {
591fa: 4fef 000c lea %sp@(12),%sp
591fe: 2640 moveal %d0,%a3
59200: 4aae fffc tstl %fp@(-4)
59204: 6674 bnes 5927a <rtems_timer_server_fire_when+0xee>
case OBJECTS_LOCAL:
(void) _Watchdog_Remove( &the_timer->Ticker );
59206: 486b 0010 pea %a3@(16)
5920a: 4eb9 0005 d98c jsr 5d98c <_Watchdog_Remove>
the_watchdog->user_data = user_data;
59210: 276e 0014 0034 movel %fp@(20),%a3@(52)
the_timer->the_class = TIMER_TIME_OF_DAY_ON_TASK;
59216: 7003 moveq #3,%d0
_Watchdog_Initialize( &the_timer->Ticker, routine, id, user_data );
the_timer->Ticker.initial = seconds - _TOD_Seconds_since_epoch();
59218: 94b9 0007 d352 subl 7d352 <_TOD_Now>,%d2
the_timer = _Timer_Get( id, &location );
switch ( location ) {
case OBJECTS_LOCAL:
(void) _Watchdog_Remove( &the_timer->Ticker );
the_timer->the_class = TIMER_TIME_OF_DAY_ON_TASK;
5921e: 2740 0038 movel %d0,%a3@(56)
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
the_watchdog->routine = routine;
the_watchdog->id = id;
59222: 202e 0008 movel %fp@(8),%d0
_Watchdog_Initialize( &the_timer->Ticker, routine, id, user_data );
the_timer->Ticker.initial = seconds - _TOD_Seconds_since_epoch();
59226: 2742 001c movel %d2,%a3@(28)
5922a: 2740 0030 movel %d0,%a3@(48)
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
5922e: 42ab 0018 clrl %a3@(24)
the_watchdog->routine = routine;
59232: 2743 002c movel %d3,%a3@(44)
(*timer_server->schedule_operation)( timer_server, the_timer );
59236: 2f0b movel %a3,%sp@-
59238: 2f0a movel %a2,%sp@-
5923a: 206a 0004 moveal %a2@(4),%a0
5923e: 4e90 jsr %a0@
_Thread_Enable_dispatch();
59240: 4eb9 0005 c3f2 jsr 5c3f2 <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
59246: 4fef 000c lea %sp@(12),%sp
5924a: 4280 clrl %d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
5924c: 4cee 0c0c ffec moveml %fp@(-20),%d2-%d3/%a2-%a3
59252: 4e5e unlk %fp
59254: 4e75 rts
if ( !timer_server )
return RTEMS_INCORRECT_STATE;
if ( !_TOD_Is_set )
return RTEMS_NOT_DEFINED;
59256: 700b moveq #11,%d0 <== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
59258: 4cee 0c0c ffec moveml %fp@(-20),%d2-%d3/%a2-%a3 <== NOT EXECUTED
5925e: 4e5e unlk %fp <== NOT EXECUTED
59260: 4e75 rts <== NOT EXECUTED
if ( !_TOD_Is_set )
return RTEMS_NOT_DEFINED;
if ( !routine )
return RTEMS_INVALID_ADDRESS;
59262: 7009 moveq #9,%d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
59264: 4cee 0c0c ffec moveml %fp@(-20),%d2-%d3/%a2-%a3
5926a: 4e5e unlk %fp
5926c: 4e75 rts
Objects_Locations location;
rtems_interval seconds;
Timer_server_Control *timer_server = _Timer_server;
if ( !timer_server )
return RTEMS_INCORRECT_STATE;
5926e: 700e moveq #14,%d0
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
}
59270: 4cee 0c0c ffec moveml %fp@(-20),%d2-%d3/%a2-%a3
59276: 4e5e unlk %fp
59278: 4e75 rts
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
5927a: 7004 moveq #4,%d0
}
5927c: 4cee 0c0c ffec moveml %fp@(-20),%d2-%d3/%a2-%a3
59282: 4e5e unlk %fp
...
00042990 <rtems_verror>:
static int rtems_verror(
rtems_error_code_t error_flag,
const char *printf_format,
va_list arglist
)
{
42990: 4e56 ffe8 linkw %fp,#-24
42994: 48d7 1c1c moveml %d2-%d4/%a2-%a4,%sp@
42998: 242e 0008 movel %fp@(8),%d2
int local_errno = 0;
int chars_written = 0;
rtems_status_code status;
if (error_flag & RTEMS_ERROR_PANIC) {
4299c: 0802 001d btst #29,%d2
429a0: 6730 beqs 429d2 <rtems_verror+0x42>
if (rtems_panic_in_progress++)
429a2: 2239 0005 e2c4 movel 5e2c4 <rtems_panic_in_progress>,%d1
429a8: 2001 movel %d1,%d0
429aa: 5280 addql #1,%d0
429ac: 23c0 0005 e2c4 movel %d0,5e2c4 <rtems_panic_in_progress>
429b2: 4a81 tstl %d1
429b4: 6714 beqs 429ca <rtems_verror+0x3a> <== ALWAYS TAKEN
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
429b6: 2039 0005 e41c movel 5e41c <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
429bc: 5280 addql #1,%d0 <== NOT EXECUTED
429be: 23c0 0005 e41c movel %d0,5e41c <_Thread_Dispatch_disable_level><== NOT EXECUTED
RTEMS_COMPILER_MEMORY_BARRIER();
429c4: 2039 0005 e2c4 movel 5e2c4 <rtems_panic_in_progress>,%d0 <== NOT EXECUTED
_Thread_Disable_dispatch(); /* disable task switches */
/* don't aggravate things */
if (rtems_panic_in_progress > 2)
429ca: 7202 moveq #2,%d1
429cc: b280 cmpl %d0,%d1
429ce: 6d00 00b6 bltw 42a86 <rtems_verror+0xf6>
return 0;
}
(void) fflush(stdout); /* in case stdout/stderr same */
429d2: 2079 0005 cde0 moveal 5cde0 <_impure_ptr>,%a0
429d8: 45f9 0004 ddd6 lea 4ddd6 <fflush>,%a2
status = error_flag & ~RTEMS_ERROR_MASK;
429de: 2802 movel %d2,%d4
/* don't aggravate things */
if (rtems_panic_in_progress > 2)
return 0;
}
(void) fflush(stdout); /* in case stdout/stderr same */
429e0: 2f28 0008 movel %a0@(8),%sp@-
status = error_flag & ~RTEMS_ERROR_MASK;
429e4: 0284 8fff ffff andil #-1879048193,%d4
/* don't aggravate things */
if (rtems_panic_in_progress > 2)
return 0;
}
(void) fflush(stdout); /* in case stdout/stderr same */
429ea: 4e92 jsr %a2@
status = error_flag & ~RTEMS_ERROR_MASK;
if (error_flag & RTEMS_ERROR_ERRNO) /* include errno? */
429ec: 588f addql #4,%sp
429ee: 0802 001e btst #30,%d2
429f2: 6600 00ca bnew 42abe <rtems_verror+0x12e>
#if defined(RTEMS_MULTIPROCESSING)
if (_System_state_Is_multiprocessing)
fprintf(stderr, "[%" PRIu32 "] ", _Configuration_MP_table->node);
#endif
chars_written += vfprintf(stderr, printf_format, arglist);
429f6: 2f2e 0010 movel %fp@(16),%sp@-
rtems_error_code_t error_flag,
const char *printf_format,
va_list arglist
)
{
int local_errno = 0;
429fa: 4283 clrl %d3
429fc: 47f9 0004 e1fe lea 4e1fe <fprintf>,%a3
#if defined(RTEMS_MULTIPROCESSING)
if (_System_state_Is_multiprocessing)
fprintf(stderr, "[%" PRIu32 "] ", _Configuration_MP_table->node);
#endif
chars_written += vfprintf(stderr, printf_format, arglist);
42a02: 2f2e 000c movel %fp@(12),%sp@-
42a06: 2079 0005 cde0 moveal 5cde0 <_impure_ptr>,%a0
42a0c: 2f28 000c movel %a0@(12),%sp@-
42a10: 4eb9 0005 4642 jsr 54642 <vfprintf>
if (status)
42a16: 4fef 000c lea %sp@(12),%sp
#if defined(RTEMS_MULTIPROCESSING)
if (_System_state_Is_multiprocessing)
fprintf(stderr, "[%" PRIu32 "] ", _Configuration_MP_table->node);
#endif
chars_written += vfprintf(stderr, printf_format, arglist);
42a1a: 2400 movel %d0,%d2
if (status)
42a1c: 4a84 tstl %d4
42a1e: 6674 bnes 42a94 <rtems_verror+0x104>
chars_written +=
fprintf(stderr, " (status: %s)", rtems_status_text(status));
if (local_errno) {
42a20: 4a83 tstl %d3
42a22: 6732 beqs 42a56 <rtems_verror+0xc6>
if ((local_errno > 0) && *strerror(local_errno))
42a24: 4a83 tstl %d3
42a26: 6f14 bles 42a3c <rtems_verror+0xac>
42a28: 2f03 movel %d3,%sp@-
42a2a: 49f9 0004 ea94 lea 4ea94 <strerror>,%a4
42a30: 4e94 jsr %a4@
42a32: 588f addql #4,%sp
42a34: 2040 moveal %d0,%a0
42a36: 4a10 tstb %a0@
42a38: 6600 00ba bnew 42af4 <rtems_verror+0x164>
chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno));
else
chars_written += fprintf(stderr, " (unknown errno=%d)", local_errno);
42a3c: 2f03 movel %d3,%sp@-
42a3e: 4879 0005 ba62 pea 5ba62 <IMFS_ops+0x6a>
42a44: 2079 0005 cde0 moveal 5cde0 <_impure_ptr>,%a0
42a4a: 2f28 000c movel %a0@(12),%sp@-
42a4e: 4e93 jsr %a3@
42a50: 4fef 000c lea %sp@(12),%sp
42a54: d480 addl %d0,%d2
}
chars_written += fprintf(stderr, "\n");
42a56: 4879 0005 bef2 pea 5bef2 <rtems_status_assoc+0x19e>
42a5c: 2079 0005 cde0 moveal 5cde0 <_impure_ptr>,%a0
42a62: 2f28 000c movel %a0@(12),%sp@-
42a66: 4e93 jsr %a3@
(void) fflush(stderr);
42a68: 2079 0005 cde0 moveal 5cde0 <_impure_ptr>,%a0
chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno));
else
chars_written += fprintf(stderr, " (unknown errno=%d)", local_errno);
}
chars_written += fprintf(stderr, "\n");
42a6e: d480 addl %d0,%d2
(void) fflush(stderr);
42a70: 2f28 000c movel %a0@(12),%sp@-
42a74: 4e92 jsr %a2@
return chars_written;
42a76: 4fef 000c lea %sp@(12),%sp
}
42a7a: 2002 movel %d2,%d0
42a7c: 4cee 1c1c ffe8 moveml %fp@(-24),%d2-%d4/%a2-%a4
42a82: 4e5e unlk %fp
42a84: 4e75 rts
if (rtems_panic_in_progress++)
_Thread_Disable_dispatch(); /* disable task switches */
/* don't aggravate things */
if (rtems_panic_in_progress > 2)
return 0;
42a86: 4282 clrl %d2 <== NOT EXECUTED
chars_written += fprintf(stderr, "\n");
(void) fflush(stderr);
return chars_written;
}
42a88: 2002 movel %d2,%d0 <== NOT EXECUTED
42a8a: 4cee 1c1c ffe8 moveml %fp@(-24),%d2-%d4/%a2-%a4 <== NOT EXECUTED
42a90: 4e5e unlk %fp <== NOT EXECUTED
42a92: 4e75 rts <== NOT EXECUTED
chars_written += vfprintf(stderr, printf_format, arglist);
if (status)
chars_written +=
fprintf(stderr, " (status: %s)", rtems_status_text(status));
42a94: 2f04 movel %d4,%sp@-
42a96: 4eb9 0004 2978 jsr 42978 <rtems_status_text>
42a9c: 2079 0005 cde0 moveal 5cde0 <_impure_ptr>,%a0
42aa2: 2f00 movel %d0,%sp@-
42aa4: 4879 0005 ba47 pea 5ba47 <IMFS_ops+0x4f>
42aaa: 2f28 000c movel %a0@(12),%sp@-
42aae: 4e93 jsr %a3@
#endif
chars_written += vfprintf(stderr, printf_format, arglist);
if (status)
chars_written +=
42ab0: 4fef 0010 lea %sp@(16),%sp
42ab4: d480 addl %d0,%d2
fprintf(stderr, " (status: %s)", rtems_status_text(status));
if (local_errno) {
42ab6: 4a83 tstl %d3
42ab8: 679c beqs 42a56 <rtems_verror+0xc6>
42aba: 6000 ff68 braw 42a24 <rtems_verror+0x94>
(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;
42abe: 4eb9 0004 da6c jsr 4da6c <__errno>
42ac4: 47f9 0004 e1fe lea 4e1fe <fprintf>,%a3
42aca: 2040 moveal %d0,%a0
42acc: 2610 movel %a0@,%d3
#if defined(RTEMS_MULTIPROCESSING)
if (_System_state_Is_multiprocessing)
fprintf(stderr, "[%" PRIu32 "] ", _Configuration_MP_table->node);
#endif
chars_written += vfprintf(stderr, printf_format, arglist);
42ace: 2f2e 0010 movel %fp@(16),%sp@-
42ad2: 2079 0005 cde0 moveal 5cde0 <_impure_ptr>,%a0
42ad8: 2f2e 000c movel %fp@(12),%sp@-
42adc: 2f28 000c movel %a0@(12),%sp@-
42ae0: 4eb9 0005 4642 jsr 54642 <vfprintf>
if (status)
42ae6: 4fef 000c lea %sp@(12),%sp
#if defined(RTEMS_MULTIPROCESSING)
if (_System_state_Is_multiprocessing)
fprintf(stderr, "[%" PRIu32 "] ", _Configuration_MP_table->node);
#endif
chars_written += vfprintf(stderr, printf_format, arglist);
42aea: 2400 movel %d0,%d2
if (status)
42aec: 4a84 tstl %d4
42aee: 6700 ff30 beqw 42a20 <rtems_verror+0x90>
42af2: 60a0 bras 42a94 <rtems_verror+0x104>
chars_written +=
fprintf(stderr, " (status: %s)", rtems_status_text(status));
if (local_errno) {
if ((local_errno > 0) && *strerror(local_errno))
chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno));
42af4: 2f03 movel %d3,%sp@-
42af6: 4e94 jsr %a4@
42af8: 2079 0005 cde0 moveal 5cde0 <_impure_ptr>,%a0
42afe: 2f00 movel %d0,%sp@-
42b00: 4879 0005 ba55 pea 5ba55 <IMFS_ops+0x5d>
42b06: 2f28 000c movel %a0@(12),%sp@-
42b0a: 4e93 jsr %a3@
42b0c: 4fef 0010 lea %sp@(16),%sp
42b10: d480 addl %d0,%d2
else
chars_written += fprintf(stderr, " (unknown errno=%d)", local_errno);
}
chars_written += fprintf(stderr, "\n");
42b12: 4879 0005 bef2 pea 5bef2 <rtems_status_assoc+0x19e>
42b18: 2079 0005 cde0 moveal 5cde0 <_impure_ptr>,%a0
42b1e: 2f28 000c movel %a0@(12),%sp@-
42b22: 4e93 jsr %a3@
(void) fflush(stderr);
42b24: 2079 0005 cde0 moveal 5cde0 <_impure_ptr>,%a0
chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno));
else
chars_written += fprintf(stderr, " (unknown errno=%d)", local_errno);
}
chars_written += fprintf(stderr, "\n");
42b2a: d480 addl %d0,%d2
(void) fflush(stderr);
42b2c: 2f28 000c movel %a0@(12),%sp@-
42b30: 4e92 jsr %a2@
return chars_written;
42b32: 4fef 000c lea %sp@(12),%sp
42b36: 6000 ff42 braw 42a7a <rtems_verror+0xea>
00043508 <scanInt>:
/*
* Extract an integer value from the database
*/
static int
scanInt(FILE *fp, int *val)
{
43508: 4e56 ffe4 linkw %fp,#-28
4350c: 48d7 0c7c moveml %d2-%d6/%a2-%a3,%sp@
43510: 246e 0008 moveal %fp@(8),%a2
int c;
unsigned int i = 0;
unsigned int limit = INT_MAX;
int sign = 0;
43514: 4284 clrl %d4
static int
scanInt(FILE *fp, int *val)
{
int c;
unsigned int i = 0;
unsigned int limit = INT_MAX;
43516: 263c 7fff ffff movel #2147483647,%d3
*/
static int
scanInt(FILE *fp, int *val)
{
int c;
unsigned int i = 0;
4351c: 4282 clrl %d2
unsigned int limit = INT_MAX;
int sign = 0;
int d;
for (;;) {
c = getc(fp);
4351e: 47f9 0004 ffd8 lea 4ffd8 <__srget_r>,%a3
43524: 202a 0004 movel %a2@(4),%d0
43528: 5380 subql #1,%d0
4352a: 2540 0004 movel %d0,%a2@(4)
4352e: 6d62 blts 43592 <scanInt+0x8a> <== NEVER TAKEN
43530: 2052 moveal %a2@,%a0
43532: 4280 clrl %d0
43534: 1010 moveb %a0@,%d0
43536: 5288 addql #1,%a0
if (c == ':')
43538: 723a moveq #58,%d1
unsigned int limit = INT_MAX;
int sign = 0;
int d;
for (;;) {
c = getc(fp);
4353a: 2488 movel %a0,%a2@
if (c == ':')
4353c: b280 cmpl %d0,%d1
4353e: 6764 beqs 435a4 <scanInt+0x9c>
break;
if (sign == 0) {
43540: 4a84 tstl %d4
43542: 660a bnes 4354e <scanInt+0x46>
if (c == '-') {
43544: 7c2d moveq #45,%d6
43546: bc80 cmpl %d0,%d6
43548: 6700 0084 beqw 435ce <scanInt+0xc6>
sign = -1;
limit++;
continue;
}
sign = 1;
4354c: 7801 moveq #1,%d4
}
if (!isdigit(c))
4354e: 2079 0005 e8bc moveal 5e8bc <__ctype_ptr__>,%a0
43554: 1230 0801 moveb %a0@(00000001,%d0:l),%d1
43558: 49c1 extbl %d1
4355a: 44c1 movew %d1,%ccr
4355c: 6664 bnes 435c2 <scanInt+0xba>
return 0;
d = c - '0';
if ((i > (limit / 10))
4355e: 2203 movel %d3,%d1
43560: 7c0a moveq #10,%d6
43562: 4c46 1005 remul %d6,%d5,%d1
43566: 4c46 1001 remul %d6,%d1,%d1
4356a: b282 cmpl %d2,%d1
4356c: 6554 bcss 435c2 <scanInt+0xba> <== NEVER TAKEN
}
sign = 1;
}
if (!isdigit(c))
return 0;
d = c - '0';
4356e: 0680 ffff ffd0 addil #-48,%d0
if ((i > (limit / 10))
|| ((i == (limit / 10)) && (d > (limit % 10))))
43574: b282 cmpl %d2,%d1
43576: 6746 beqs 435be <scanInt+0xb6> <== NEVER TAKEN
return 0;
i = i * 10 + d;
43578: 2202 movel %d2,%d1
4357a: e789 lsll #3,%d1
4357c: 2241 moveal %d1,%a1
4357e: 41f1 2a00 lea %a1@(00000000,%d2:l:2),%a0
43582: 2400 movel %d0,%d2
unsigned int limit = INT_MAX;
int sign = 0;
int d;
for (;;) {
c = getc(fp);
43584: 202a 0004 movel %a2@(4),%d0
43588: 5380 subql #1,%d0
return 0;
d = c - '0';
if ((i > (limit / 10))
|| ((i == (limit / 10)) && (d > (limit % 10))))
return 0;
i = i * 10 + d;
4358a: d488 addl %a0,%d2
unsigned int limit = INT_MAX;
int sign = 0;
int d;
for (;;) {
c = getc(fp);
4358c: 2540 0004 movel %d0,%a2@(4)
43590: 6c9e bges 43530 <scanInt+0x28> <== ALWAYS TAKEN
43592: 2f0a movel %a2,%sp@- <== NOT EXECUTED
43594: 2f39 0005 e8c0 movel 5e8c0 <_impure_ptr>,%sp@- <== NOT EXECUTED
4359a: 4e93 jsr %a3@ <== NOT EXECUTED
4359c: 508f addql #8,%sp <== NOT EXECUTED
if (c == ':')
4359e: 723a moveq #58,%d1 <== NOT EXECUTED
435a0: b280 cmpl %d0,%d1 <== NOT EXECUTED
435a2: 669c bnes 43540 <scanInt+0x38> <== NOT EXECUTED
if ((i > (limit / 10))
|| ((i == (limit / 10)) && (d > (limit % 10))))
return 0;
i = i * 10 + d;
}
if (sign == 0)
435a4: 4a84 tstl %d4
435a6: 671a beqs 435c2 <scanInt+0xba> <== NEVER TAKEN
return 0;
*val = i * sign;
435a8: 4c02 4800 mulsl %d2,%d4
return 1;
435ac: 7001 moveq #1,%d0
return 0;
i = i * 10 + d;
}
if (sign == 0)
return 0;
*val = i * sign;
435ae: 206e 000c moveal %fp@(12),%a0
435b2: 2084 movel %d4,%a0@
return 1;
}
435b4: 4cee 0c7c ffe4 moveml %fp@(-28),%d2-%d6/%a2-%a3
435ba: 4e5e unlk %fp
435bc: 4e75 rts
}
if (!isdigit(c))
return 0;
d = c - '0';
if ((i > (limit / 10))
|| ((i == (limit / 10)) && (d > (limit % 10))))
435be: ba80 cmpl %d0,%d5 <== NOT EXECUTED
435c0: 64b6 bccs 43578 <scanInt+0x70> <== NOT EXECUTED
return 0;
i = i * 10 + d;
}
if (sign == 0)
return 0;
435c2: 4280 clrl %d0
*val = i * sign;
return 1;
}
435c4: 4cee 0c7c ffe4 moveml %fp@(-28),%d2-%d6/%a2-%a3
435ca: 4e5e unlk %fp
435cc: 4e75 rts
if (c == ':')
break;
if (sign == 0) {
if (c == '-') {
sign = -1;
limit++;
435ce: 5283 addql #1,%d3
c = getc(fp);
if (c == ':')
break;
if (sign == 0) {
if (c == '-') {
sign = -1;
435d0: 78ff moveq #-1,%d4
limit++;
continue;
435d2: 6000 ff50 braw 43524 <scanInt+0x1c>
000435d6 <scanString>:
/*
* Extract a string value from the database
*/
static int
scanString(FILE *fp, char **name, char **bufp, size_t *nleft, int nlFlag)
{
435d6: 4e56 ffec linkw %fp,#-20
int c;
*name = *bufp;
435da: 206e 000c moveal %fp@(12),%a0
/*
* Extract a string value from the database
*/
static int
scanString(FILE *fp, char **name, char **bufp, size_t *nleft, int nlFlag)
{
435de: 48d7 3c04 moveml %d2/%a2-%a5,%sp@
435e2: 246e 0008 moveal %fp@(8),%a2
int c;
*name = *bufp;
for (;;) {
c = getc(fp);
435e6: 4bf9 0004 ffd8 lea 4ffd8 <__srget_r>,%a5
/*
* Extract a string value from the database
*/
static int
scanString(FILE *fp, char **name, char **bufp, size_t *nleft, int nlFlag)
{
435ec: 266e 0010 moveal %fp@(16),%a3
435f0: 286e 0014 moveal %fp@(20),%a4
435f4: 242e 0018 movel %fp@(24),%d2
int c;
*name = *bufp;
435f8: 2093 movel %a3@,%a0@
for (;;) {
c = getc(fp);
435fa: 202a 0004 movel %a2@(4),%d0
435fe: 5380 subql #1,%d0
43600: 2540 0004 movel %d0,%a2@(4)
43604: 6d36 blts 4363c <scanString+0x66>
43606: 2052 moveal %a2@,%a0
43608: 4280 clrl %d0
4360a: 1010 moveb %a0@,%d0
4360c: 5288 addql #1,%a0
if (c == ':') {
4360e: 723a moveq #58,%d1
{
int c;
*name = *bufp;
for (;;) {
c = getc(fp);
43610: 2488 movel %a0,%a2@
if (c == ':') {
43612: b280 cmpl %d0,%d1
43614: 6738 beqs 4364e <scanString+0x78>
if (nlFlag)
return 0;
break;
}
if (c == '\n') {
43616: 720a moveq #10,%d1
43618: b280 cmpl %d0,%d1
4361a: 674a beqs 43666 <scanString+0x90>
if (!nlFlag)
return 0;
break;
}
if (c == EOF)
4361c: 72ff moveq #-1,%d1
4361e: b280 cmpl %d0,%d1
43620: 6748 beqs 4366a <scanString+0x94>
return 0;
if (*nleft < 2)
43622: 7201 moveq #1,%d1
43624: b294 cmpl %a4@,%d1
43626: 6442 bccs 4366a <scanString+0x94> <== NEVER TAKEN
return 0;
**bufp = c;
43628: 2053 moveal %a3@,%a0
4362a: 1080 moveb %d0,%a0@
++(*bufp);
4362c: 5293 addql #1,%a3@
--(*nleft);
4362e: 5394 subql #1,%a4@
{
int c;
*name = *bufp;
for (;;) {
c = getc(fp);
43630: 202a 0004 movel %a2@(4),%d0
43634: 5380 subql #1,%d0
43636: 2540 0004 movel %d0,%a2@(4)
4363a: 6cca bges 43606 <scanString+0x30> <== ALWAYS TAKEN
4363c: 2f0a movel %a2,%sp@-
4363e: 2f39 0005 e8c0 movel 5e8c0 <_impure_ptr>,%sp@-
43644: 4e95 jsr %a5@
43646: 508f addql #8,%sp
if (c == ':') {
43648: 723a moveq #58,%d1
4364a: b280 cmpl %d0,%d1
4364c: 66c8 bnes 43616 <scanString+0x40> <== ALWAYS TAKEN
if (nlFlag)
4364e: 4a82 tstl %d2
43650: 6618 bnes 4366a <scanString+0x94>
return 0;
**bufp = c;
++(*bufp);
--(*nleft);
}
**bufp = '\0';
43652: 2053 moveal %a3@,%a0
++(*bufp);
--(*nleft);
return 1;
43654: 7001 moveq #1,%d0
return 0;
**bufp = c;
++(*bufp);
--(*nleft);
}
**bufp = '\0';
43656: 4210 clrb %a0@
++(*bufp);
43658: 5293 addql #1,%a3@
--(*nleft);
4365a: 5394 subql #1,%a4@
return 1;
}
4365c: 4cee 3c04 ffec moveml %fp@(-20),%d2/%a2-%a5
43662: 4e5e unlk %fp
43664: 4e75 rts
if (nlFlag)
return 0;
break;
}
if (c == '\n') {
if (!nlFlag)
43666: 4a82 tstl %d2
43668: 66e8 bnes 43652 <scanString+0x7c>
break;
}
if (c == EOF)
return 0;
if (*nleft < 2)
return 0;
4366a: 4280 clrl %d0
}
**bufp = '\0';
++(*bufp);
--(*nleft);
return 1;
}
4366c: 4cee 3c04 ffec moveml %fp@(-20),%d2/%a2-%a5
43672: 4e5e unlk %fp <== NOT EXECUTED
00043676 <scangr>:
FILE *fp,
struct group *grp,
char *buffer,
size_t bufsize
)
{
43676: 4e56 ffe4 linkw %fp,#-28
4367a: 48d7 0c1c moveml %d2-%d4/%a2-%a3,%sp@
int grgid;
char *grmem, *cp;
int memcount;
if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0)
4367e: 42a7 clrl %sp@-
43680: 280e movel %fp,%d4
43682: 0684 0000 0014 addil #20,%d4
43688: 260e movel %fp,%d3
4368a: 0683 0000 0010 addil #16,%d3
43690: 47fa ff44 lea %pc@(435d6 <scanString>),%a3
43694: 2f04 movel %d4,%sp@-
FILE *fp,
struct group *grp,
char *buffer,
size_t bufsize
)
{
43696: 246e 000c moveal %fp@(12),%a2
int grgid;
char *grmem, *cp;
int memcount;
if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0)
4369a: 2f03 movel %d3,%sp@-
FILE *fp,
struct group *grp,
char *buffer,
size_t bufsize
)
{
4369c: 242e 0008 movel %fp@(8),%d2
int grgid;
char *grmem, *cp;
int memcount;
if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0)
436a0: 2f0a movel %a2,%sp@-
436a2: 2f02 movel %d2,%sp@-
436a4: 4e93 jsr %a3@
436a6: 4fef 0014 lea %sp@(20),%sp
436aa: 4a80 tstl %d0
436ac: 660c bnes 436ba <scangr+0x44>
/*
* Hack to produce (hopefully) a suitably-aligned array of pointers
*/
if (bufsize < (((memcount+1)*sizeof(char *)) + 15))
return 0;
436ae: 4280 clrl %d0
grp->gr_mem[memcount++] = cp + 1;
}
}
grp->gr_mem[memcount] = NULL;
return 1;
}
436b0: 4cee 0c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a3
436b6: 4e5e unlk %fp
436b8: 4e75 rts
int grgid;
char *grmem, *cp;
int memcount;
if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0)
|| !scanString(fp, &grp->gr_passwd, &buffer, &bufsize, 0)
436ba: 42a7 clrl %sp@-
436bc: 2f04 movel %d4,%sp@-
436be: 2f03 movel %d3,%sp@-
436c0: 486a 0004 pea %a2@(4)
436c4: 2f02 movel %d2,%sp@-
436c6: 4e93 jsr %a3@
436c8: 4fef 0014 lea %sp@(20),%sp
436cc: 4a80 tstl %d0
436ce: 67de beqs 436ae <scangr+0x38> <== NEVER TAKEN
|| !scanInt(fp, &grgid)
436d0: 486e fffc pea %fp@(-4)
436d4: 2f02 movel %d2,%sp@-
436d6: 4eba fe30 jsr %pc@(43508 <scanInt>)
436da: 508f addql #8,%sp
436dc: 4a80 tstl %d0
436de: 67ce beqs 436ae <scangr+0x38> <== NEVER TAKEN
|| !scanString(fp, &grmem, &buffer, &bufsize, 1))
436e0: 4878 0001 pea 1 <ADD>
436e4: 2f04 movel %d4,%sp@-
436e6: 2f03 movel %d3,%sp@-
436e8: 486e fff8 pea %fp@(-8)
436ec: 2f02 movel %d2,%sp@-
436ee: 4e93 jsr %a3@
436f0: 4fef 0014 lea %sp@(20),%sp
436f4: 4a80 tstl %d0
436f6: 67b6 beqs 436ae <scangr+0x38> <== NEVER TAKEN
grp->gr_gid = grgid;
/*
* Determine number of members
*/
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
436f8: 266e fff8 moveal %fp@(-8),%a3
if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0)
|| !scanString(fp, &grp->gr_passwd, &buffer, &bufsize, 0)
|| !scanInt(fp, &grgid)
|| !scanString(fp, &grmem, &buffer, &bufsize, 1))
return 0;
grp->gr_gid = grgid;
436fc: 356e fffe 0008 movew %fp@(-2),%a2@(8)
/*
* Determine number of members
*/
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
43702: 1013 moveb %a3@,%d0
43704: 677a beqs 43780 <scangr+0x10a> <== NEVER TAKEN
}
/*
* Extract a single group record from the database
*/
static int scangr(
43706: 41eb 0001 lea %a3@(1),%a0
grp->gr_gid = grgid;
/*
* Determine number of members
*/
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
4370a: 7201 moveq #1,%d1
if(*cp == ',')
4370c: 49c0 extbl %d0
4370e: 742c moveq #44,%d2
43710: b480 cmpl %d0,%d2
43712: 6756 beqs 4376a <scangr+0xf4> <== NEVER TAKEN
grp->gr_gid = grgid;
/*
* Determine number of members
*/
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
43714: 1018 moveb %a0@+,%d0
43716: 66f4 bnes 4370c <scangr+0x96>
43718: e589 lsll #2,%d1
4371a: 0681 0000 0013 addil #19,%d1
}
/*
* Hack to produce (hopefully) a suitably-aligned array of pointers
*/
if (bufsize < (((memcount+1)*sizeof(char *)) + 15))
43720: b2ae 0014 cmpl %fp@(20),%d1
43724: 6288 bhis 436ae <scangr+0x38> <== NEVER TAKEN
return 0;
grp->gr_mem = (char **)(((uintptr_t)buffer + 15) & ~15);
43726: 226e 0010 moveal %fp@(16),%a1
4372a: 43e9 000f lea %a1@(15),%a1
4372e: 2009 movel %a1,%d0
43730: 72f0 moveq #-16,%d1
43732: c081 andl %d1,%d0
43734: 2540 000a movel %d0,%a2@(10)
43738: 2240 moveal %d0,%a1
/*
* Fill in pointer array
*/
grp->gr_mem[0] = grmem;
4373a: 228b movel %a3,%a1@
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
4373c: 206e fff8 moveal %fp@(-8),%a0
43740: 1010 moveb %a0@,%d0
43742: 6740 beqs 43784 <scangr+0x10e> <== NEVER TAKEN
}
/*
* Extract a single group record from the database
*/
static int scangr(
43744: 5288 addql #1,%a0
/*
* Fill in pointer array
*/
grp->gr_mem[0] = grmem;
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
43746: 7201 moveq #1,%d1
if(*cp == ',') {
43748: 49c0 extbl %d0
4374a: 742c moveq #44,%d2
4374c: b480 cmpl %d0,%d2
4374e: 671e beqs 4376e <scangr+0xf8> <== NEVER TAKEN
/*
* Fill in pointer array
*/
grp->gr_mem[0] = grmem;
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
43750: 1018 moveb %a0@+,%d0
43752: 66f4 bnes 43748 <scangr+0xd2>
43754: 226a 000a moveal %a2@(10),%a1
*cp = '\0';
grp->gr_mem[memcount++] = cp + 1;
}
}
grp->gr_mem[memcount] = NULL;
return 1;
43758: 7001 moveq #1,%d0
/*
* Fill in pointer array
*/
grp->gr_mem[0] = grmem;
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
4375a: e589 lsll #2,%d1
if(*cp == ',') {
*cp = '\0';
grp->gr_mem[memcount++] = cp + 1;
}
}
grp->gr_mem[memcount] = NULL;
4375c: 42b1 1800 clrl %a1@(00000000,%d1:l)
return 1;
}
43760: 4cee 0c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a3
43766: 4e5e unlk %fp
43768: 4e75 rts
/*
* Determine number of members
*/
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
if(*cp == ',')
memcount++;
4376a: 5281 addql #1,%d1
4376c: 60a6 bras 43714 <scangr+0x9e>
* Fill in pointer array
*/
grp->gr_mem[0] = grmem;
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
if(*cp == ',') {
*cp = '\0';
4376e: 4200 clrb %d0
43770: 1140 ffff moveb %d0,%a0@(-1)
grp->gr_mem[memcount++] = cp + 1;
43774: 226a 000a moveal %a2@(10),%a1
43778: 2388 1c00 movel %a0,%a1@(00000000,%d1:l:4)
4377c: 5281 addql #1,%d1
4377e: 60d0 bras 43750 <scangr+0xda>
grp->gr_gid = grgid;
/*
* Determine number of members
*/
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
43780: 7217 moveq #23,%d1 <== NOT EXECUTED
43782: 609c bras 43720 <scangr+0xaa> <== NOT EXECUTED
/*
* Fill in pointer array
*/
grp->gr_mem[0] = grmem;
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
43784: 7204 moveq #4,%d1 <== NOT EXECUTED
*cp = '\0';
grp->gr_mem[memcount++] = cp + 1;
}
}
grp->gr_mem[memcount] = NULL;
return 1;
43786: 7001 moveq #1,%d0 <== NOT EXECUTED
if(*cp == ',') {
*cp = '\0';
grp->gr_mem[memcount++] = cp + 1;
}
}
grp->gr_mem[memcount] = NULL;
43788: 42b1 1800 clrl %a1@(00000000,%d1:l) <== NOT EXECUTED
4378c: 60d2 bras 43760 <scangr+0xea> <== NOT EXECUTED
0004378e <scanpw>:
FILE *fp,
struct passwd *pwd,
char *buffer,
size_t bufsize
)
{
4378e: 4e56 ffe0 linkw %fp,#-32
43792: 48d7 1c1c moveml %d2-%d4/%a2-%a4,%sp@
int pwuid, pwgid;
if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0)
43796: 42a7 clrl %sp@-
43798: 280e movel %fp,%d4
4379a: 0684 0000 0014 addil #20,%d4
437a0: 260e movel %fp,%d3
437a2: 0683 0000 0010 addil #16,%d3
437a8: 47fa fe2c lea %pc@(435d6 <scanString>),%a3
437ac: 2f04 movel %d4,%sp@-
FILE *fp,
struct passwd *pwd,
char *buffer,
size_t bufsize
)
{
437ae: 246e 000c moveal %fp@(12),%a2
int pwuid, pwgid;
if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0)
437b2: 2f03 movel %d3,%sp@-
FILE *fp,
struct passwd *pwd,
char *buffer,
size_t bufsize
)
{
437b4: 242e 0008 movel %fp@(8),%d2
int pwuid, pwgid;
if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0)
437b8: 2f0a movel %a2,%sp@-
437ba: 2f02 movel %d2,%sp@-
437bc: 4e93 jsr %a3@
437be: 4fef 0014 lea %sp@(20),%sp
437c2: 4a80 tstl %d0
437c4: 660c bnes 437d2 <scanpw+0x44>
|| !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;
437c6: 4280 clrl %d0
pwd->pw_uid = pwuid;
pwd->pw_gid = pwgid;
return 1;
}
437c8: 4cee 1c1c ffe0 moveml %fp@(-32),%d2-%d4/%a2-%a4
437ce: 4e5e unlk %fp
437d0: 4e75 rts
)
{
int pwuid, pwgid;
if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0)
|| !scanString(fp, &pwd->pw_passwd, &buffer, &bufsize, 0)
437d2: 42a7 clrl %sp@-
437d4: 2f04 movel %d4,%sp@-
437d6: 2f03 movel %d3,%sp@-
437d8: 486a 0004 pea %a2@(4)
437dc: 2f02 movel %d2,%sp@-
437de: 4e93 jsr %a3@
437e0: 4fef 0014 lea %sp@(20),%sp
437e4: 4a80 tstl %d0
437e6: 67de beqs 437c6 <scanpw+0x38> <== NEVER TAKEN
|| !scanInt(fp, &pwuid)
437e8: 486e fffc pea %fp@(-4)
437ec: 49fa fd1a lea %pc@(43508 <scanInt>),%a4
437f0: 2f02 movel %d2,%sp@-
437f2: 4e94 jsr %a4@
437f4: 508f addql #8,%sp
437f6: 4a80 tstl %d0
437f8: 67cc beqs 437c6 <scanpw+0x38> <== NEVER TAKEN
|| !scanInt(fp, &pwgid)
437fa: 486e fff8 pea %fp@(-8)
437fe: 2f02 movel %d2,%sp@-
43800: 4e94 jsr %a4@
43802: 508f addql #8,%sp
43804: 4a80 tstl %d0
43806: 67be beqs 437c6 <scanpw+0x38>
|| !scanString(fp, &pwd->pw_comment, &buffer, &bufsize, 0)
43808: 42a7 clrl %sp@-
4380a: 2f04 movel %d4,%sp@-
4380c: 2f03 movel %d3,%sp@-
4380e: 486a 000c pea %a2@(12)
43812: 2f02 movel %d2,%sp@-
43814: 4e93 jsr %a3@
43816: 4fef 0014 lea %sp@(20),%sp
4381a: 4a80 tstl %d0
4381c: 67a8 beqs 437c6 <scanpw+0x38> <== NEVER TAKEN
|| !scanString(fp, &pwd->pw_gecos, &buffer, &bufsize, 0)
4381e: 42a7 clrl %sp@-
43820: 2f04 movel %d4,%sp@-
43822: 2f03 movel %d3,%sp@-
43824: 486a 0010 pea %a2@(16)
43828: 2f02 movel %d2,%sp@-
4382a: 4e93 jsr %a3@
4382c: 4fef 0014 lea %sp@(20),%sp
43830: 4a80 tstl %d0
43832: 6792 beqs 437c6 <scanpw+0x38> <== NEVER TAKEN
|| !scanString(fp, &pwd->pw_dir, &buffer, &bufsize, 0)
43834: 42a7 clrl %sp@-
43836: 2f04 movel %d4,%sp@-
43838: 2f03 movel %d3,%sp@-
4383a: 486a 0014 pea %a2@(20)
4383e: 2f02 movel %d2,%sp@-
43840: 4e93 jsr %a3@
43842: 4fef 0014 lea %sp@(20),%sp
43846: 4a80 tstl %d0
43848: 6700 ff7c beqw 437c6 <scanpw+0x38>
|| !scanString(fp, &pwd->pw_shell, &buffer, &bufsize, 1))
4384c: 4878 0001 pea 1 <ADD>
43850: 2f04 movel %d4,%sp@-
43852: 2f03 movel %d3,%sp@-
43854: 486a 0018 pea %a2@(24)
43858: 2f02 movel %d2,%sp@-
4385a: 4e93 jsr %a3@
4385c: 4fef 0014 lea %sp@(20),%sp
43860: 4a80 tstl %d0
43862: 6700 ff62 beqw 437c6 <scanpw+0x38>
return 0;
pwd->pw_uid = pwuid;
pwd->pw_gid = pwgid;
return 1;
43866: 7001 moveq #1,%d0
|| !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;
pwd->pw_uid = pwuid;
43868: 356e fffe 0008 movew %fp@(-2),%a2@(8)
pwd->pw_gid = pwgid;
4386e: 356e fffa 000a movew %fp@(-6),%a2@(10)
return 1;
}
43874: 4cee 1c1c ffe0 moveml %fp@(-32),%d2-%d4/%a2-%a4
4387a: 4e5e unlk %fp <== NOT EXECUTED
00045058 <siproc>:
/*
* Process input character, with semaphore.
*/
static int
siproc (unsigned char c, struct rtems_termios_tty *tty)
{
45058: 4e56 0000 linkw %fp,#0
4505c: 2f0a movel %a2,%sp@-
4505e: 246e 000c moveal %fp@(12),%a2
int i;
/*
* Obtain output semaphore if character will be echoed
*/
if (tty->termios.c_lflag & (ECHO|ECHOE|ECHOK|ECHONL|ECHOPRT|ECHOCTL|ECHOKE)) {
45062: 202a 003c movel %a2@(60),%d0
45066: 0280 0000 0e78 andil #3704,%d0
/*
* Process input character, with semaphore.
*/
static int
siproc (unsigned char c, struct rtems_termios_tty *tty)
{
4506c: 2f02 movel %d2,%sp@-
4506e: 142e 000b moveb %fp@(11),%d2
int i;
/*
* Obtain output semaphore if character will be echoed
*/
if (tty->termios.c_lflag & (ECHO|ECHOE|ECHOK|ECHONL|ECHOPRT|ECHOCTL|ECHOKE)) {
45072: 4a80 tstl %d0
45074: 661c bnes 45092 <siproc+0x3a> <== 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);
45076: 2d4a 000c movel %a2,%fp@(12) <== NOT EXECUTED
}
return i;
}
4507a: 246e fffc moveal %fp@(-4),%a2 <== 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);
4507e: 0282 0000 00ff andil #255,%d2 <== NOT EXECUTED
45084: 2d42 0008 movel %d2,%fp@(8) <== NOT EXECUTED
}
return i;
}
45088: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
4508c: 4e5e unlk %fp <== 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);
4508e: 6000 fdd0 braw 44e60 <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);
45092: 42a7 clrl %sp@-
i = iproc (c, tty);
45094: 0282 0000 00ff andil #255,%d2
/*
* 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);
4509a: 42a7 clrl %sp@-
4509c: 2f2a 0018 movel %a2@(24),%sp@-
450a0: 4eb9 0004 6648 jsr 46648 <rtems_semaphore_obtain>
i = iproc (c, tty);
450a6: 2f0a movel %a2,%sp@-
450a8: 2f02 movel %d2,%sp@-
450aa: 4eba fdb4 jsr %pc@(44e60 <iproc>)
rtems_semaphore_release (tty->osem);
450ae: 2f2a 0018 movel %a2@(24),%sp@-
/*
* 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);
i = iproc (c, tty);
450b2: 2400 movel %d0,%d2
rtems_semaphore_release (tty->osem);
450b4: 4eb9 0004 6788 jsr 46788 <rtems_semaphore_release>
}
else {
i = iproc (c, tty);
}
return i;
}
450ba: 246e fffc moveal %fp@(-4),%a2
450be: 2002 movel %d2,%d0
* 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);
i = iproc (c, tty);
rtems_semaphore_release (tty->osem);
450c0: 4fef 0018 lea %sp@(24),%sp
}
else {
i = iproc (c, tty);
}
return i;
}
450c4: 242e fff8 movel %fp@(-8),%d2
450c8: 4e5e unlk %fp <== NOT EXECUTED
000468a4 <statvfs>:
#include <sys/statvfs.h>
int
statvfs (const char *path, struct statvfs *sb)
{
468a4: 4e56 ffdc linkw %fp,#-36
468a8: 48d7 001c moveml %d2-%d4,%sp@
468ac: 242e 0008 movel %fp@(8),%d2
* The root node of the mounted filesytem.
* The node for the directory that the fileystem is mounted on.
* The mount entry that is being refered to.
*/
if ( rtems_filesystem_evaluate_path( path, strlen( path ), 0x0, &loc, true ) )
468b0: 260e movel %fp,%d3
468b2: 0683 ffff ffec addil #-20,%d3
468b8: 2f02 movel %d2,%sp@-
#include <sys/statvfs.h>
int
statvfs (const char *path, struct statvfs *sb)
{
468ba: 282e 000c movel %fp@(12),%d4
* The root node of the mounted filesytem.
* The node for the directory that the fileystem is mounted on.
* The mount entry that is being refered to.
*/
if ( rtems_filesystem_evaluate_path( path, strlen( path ), 0x0, &loc, true ) )
468be: 4eb9 0005 2904 jsr 52904 <strlen>
468c4: 7201 moveq #1,%d1
468c6: 2e81 movel %d1,%sp@
468c8: 2f03 movel %d3,%sp@-
468ca: 42a7 clrl %sp@-
468cc: 2f00 movel %d0,%sp@-
468ce: 2f02 movel %d2,%sp@-
468d0: 4eb9 0004 5300 jsr 45300 <rtems_filesystem_evaluate_path>
468d6: 4fef 0014 lea %sp@(20),%sp
468da: 4a80 tstl %d0
468dc: 670c beqs 468ea <statvfs+0x46> <== ALWAYS TAKEN
return -1;
468de: 70ff moveq #-1,%d0 <== NOT EXECUTED
result = ( fs_mount_root->ops->statvfs_h )( fs_mount_root, sb );
rtems_filesystem_freenode( &loc );
return result;
}
468e0: 4cee 001c ffdc moveml %fp@(-36),%d2-%d4 <== NOT EXECUTED
468e6: 4e5e unlk %fp <== NOT EXECUTED
468e8: 4e75 rts <== NOT EXECUTED
return -1;
mt_entry = loc.mt_entry;
fs_mount_root = &mt_entry->mt_fs_root;
memset (sb, 0, sizeof (struct statvfs));
468ea: 2044 moveal %d4,%a0
468ec: 4298 clrl %a0@+
*/
if ( rtems_filesystem_evaluate_path( path, strlen( path ), 0x0, &loc, true ) )
return -1;
mt_entry = loc.mt_entry;
468ee: 226e fffc moveal %fp@(-4),%a1
fs_mount_root = &mt_entry->mt_fs_root;
memset (sb, 0, sizeof (struct statvfs));
468f2: 4298 clrl %a0@+
468f4: 4298 clrl %a0@+
468f6: 4298 clrl %a0@+
468f8: 4298 clrl %a0@+
468fa: 4298 clrl %a0@+
468fc: 4298 clrl %a0@+
468fe: 4298 clrl %a0@+
46900: 4298 clrl %a0@+
46902: 4298 clrl %a0@+
46904: 4298 clrl %a0@+
46906: 4298 clrl %a0@+
46908: 4298 clrl %a0@+
4690a: 4290 clrl %a0@
result = ( fs_mount_root->ops->statvfs_h )( fs_mount_root, sb );
4690c: 2069 0028 moveal %a1@(40),%a0
46910: 2f04 movel %d4,%sp@-
46912: 4869 001c pea %a1@(28)
46916: 2068 0044 moveal %a0@(68),%a0
4691a: 4e90 jsr %a0@
rtems_filesystem_freenode( &loc );
4691c: 2f03 movel %d3,%sp@-
4691e: 2d40 ffe8 movel %d0,%fp@(-24)
46922: 4eb9 0004 5424 jsr 45424 <rtems_filesystem_freenode>
return result;
46928: 202e ffe8 movel %fp@(-24),%d0
4692c: 4fef 000c lea %sp@(12),%sp
}
46930: 4cee 001c ffdc moveml %fp@(-36),%d2-%d4
46936: 4e5e unlk %fp
...
00045184 <sync_per_thread>:
fdatasync(fn);
}
/* iterate over all FILE *'s for this thread */
static void sync_per_thread(Thread_Control *t)
{
45184: 4e56 0000 linkw %fp,#0
45188: 206e 0008 moveal %fp@(8),%a0
/*
* The sync_wrapper() function will operate on the current thread's
* reent structure so we will temporarily use that.
*/
this_reent = t->libc_reent;
4518c: 2028 0104 movel %a0@(260),%d0
fdatasync(fn);
}
/* iterate over all FILE *'s for this thread */
static void sync_per_thread(Thread_Control *t)
{
45190: 2f02 movel %d2,%sp@-
/*
* The sync_wrapper() function will operate on the current thread's
* reent structure so we will temporarily use that.
*/
this_reent = t->libc_reent;
if ( this_reent ) {
45192: 4a80 tstl %d0
45194: 6728 beqs 451be <sync_per_thread+0x3a> <== NEVER TAKEN
current_reent = _Thread_Executing->libc_reent;
45196: 2279 0006 0280 moveal 60280 <_Per_CPU_Information+0xc>,%a1
4519c: 2429 0104 movel %a1@(260),%d2
_Thread_Executing->libc_reent = this_reent;
451a0: 2340 0104 movel %d0,%a1@(260)
_fwalk (t->libc_reent, sync_wrapper);
451a4: 487a 0020 pea %pc@(451c6 <sync_wrapper>)
451a8: 2f28 0104 movel %a0@(260),%sp@-
451ac: 4eb9 0004 fbb8 jsr 4fbb8 <_fwalk>
_Thread_Executing->libc_reent = current_reent;
451b2: 2079 0006 0280 moveal 60280 <_Per_CPU_Information+0xc>,%a0
451b8: 508f addql #8,%sp
451ba: 2142 0104 movel %d2,%a0@(260)
}
}
451be: 242e fffc movel %fp@(-4),%d2
451c2: 4e5e unlk %fp <== NOT EXECUTED
00045504 <tcsetattr>:
int tcsetattr(
int fd,
int opt,
struct termios *tp
)
{
45504: 4e56 0000 linkw %fp,#0
45508: 202e 000c movel %fp@(12),%d0
4550c: 2f03 movel %d3,%sp@-
4550e: 262e 0010 movel %fp@(16),%d3
45512: 2f02 movel %d2,%sp@-
45514: 242e 0008 movel %fp@(8),%d2
switch (opt) {
45518: 4a80 tstl %d0
4551a: 6738 beqs 45554 <tcsetattr+0x50>
4551c: 7201 moveq #1,%d1
4551e: b280 cmpl %d0,%d1
45520: 671c beqs 4553e <tcsetattr+0x3a>
default:
rtems_set_errno_and_return_minus_one( ENOTSUP );
45522: 4eb9 0004 f328 jsr 4f328 <__errno>
45528: 2040 moveal %d0,%a0
4552a: 20bc 0000 0086 movel #134,%a0@
* Fall through to....
*/
case TCSANOW:
return ioctl( fd, RTEMS_IO_SET_ATTRIBUTES, tp );
}
}
45530: 242e fff8 movel %fp@(-8),%d2
45534: 70ff moveq #-1,%d0
45536: 262e fffc movel %fp@(-4),%d3
4553a: 4e5e unlk %fp
4553c: 4e75 rts
switch (opt) {
default:
rtems_set_errno_and_return_minus_one( ENOTSUP );
case TCSADRAIN:
if (ioctl( fd, RTEMS_IO_TCDRAIN, NULL ) < 0)
4553e: 42a7 clrl %sp@-
45540: 4878 0003 pea 3 <DIVIDE>
45544: 2f02 movel %d2,%sp@-
45546: 4eb9 0004 cc10 jsr 4cc10 <ioctl>
4554c: 4fef 000c lea %sp@(12),%sp
45550: 4a80 tstl %d0
45552: 6ddc blts 45530 <tcsetattr+0x2c> <== NEVER TAKEN
return -1;
/*
* Fall through to....
*/
case TCSANOW:
return ioctl( fd, RTEMS_IO_SET_ATTRIBUTES, tp );
45554: 2d43 0010 movel %d3,%fp@(16)
45558: 7002 moveq #2,%d0
4555a: 2d42 0008 movel %d2,%fp@(8)
}
}
4555e: 242e fff8 movel %fp@(-8),%d2
45562: 262e fffc movel %fp@(-4),%d3
return -1;
/*
* Fall through to....
*/
case TCSANOW:
return ioctl( fd, RTEMS_IO_SET_ATTRIBUTES, tp );
45566: 2d40 000c movel %d0,%fp@(12)
}
}
4556a: 4e5e unlk %fp
return -1;
/*
* Fall through to....
*/
case TCSANOW:
return ioctl( fd, RTEMS_IO_SET_ATTRIBUTES, tp );
4556c: 4ef9 0004 cc10 jmp 4cc10 <ioctl>
...
00048a2c <truncate>:
int truncate(
const char *path,
off_t length
)
{
48a2c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
48a30: 2f03 movel %d3,%sp@- <== NOT EXECUTED
48a32: 2f02 movel %d2,%sp@- <== NOT EXECUTED
int status;
int fd;
fd = open( path, O_WRONLY );
48a34: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
48a38: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
48a3c: 4eb9 0004 6374 jsr 46374 <open> <== NOT EXECUTED
if ( fd == -1 )
48a42: 508f addql #8,%sp <== NOT EXECUTED
)
{
int status;
int fd;
fd = open( path, O_WRONLY );
48a44: 2400 movel %d0,%d2 <== NOT EXECUTED
if ( fd == -1 )
48a46: 70ff moveq #-1,%d0 <== NOT EXECUTED
48a48: b082 cmpl %d2,%d0 <== NOT EXECUTED
48a4a: 672c beqs 48a78 <truncate+0x4c> <== NOT EXECUTED
return -1;
status = ftruncate( fd, length );
48a4c: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
48a50: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
48a54: 2f02 movel %d2,%sp@- <== NOT EXECUTED
48a56: 4eb9 0004 e354 jsr 4e354 <ftruncate> <== NOT EXECUTED
48a5c: 2600 movel %d0,%d3 <== NOT EXECUTED
(void) close( fd );
48a5e: 2f02 movel %d2,%sp@- <== NOT EXECUTED
48a60: 4eb9 0004 4d04 jsr 44d04 <close> <== NOT EXECUTED
return status;
}
48a66: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
48a6a: 2003 movel %d3,%d0 <== NOT EXECUTED
status = ftruncate( fd, length );
(void) close( fd );
return status;
48a6c: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
}
48a70: 262e fffc movel %fp@(-4),%d3 <== NOT EXECUTED
48a74: 4e5e unlk %fp <== NOT EXECUTED
48a76: 4e75 rts <== NOT EXECUTED
int status;
int fd;
fd = open( path, O_WRONLY );
if ( fd == -1 )
return -1;
48a78: 76ff moveq #-1,%d3 <== NOT EXECUTED
status = ftruncate( fd, length );
(void) close( fd );
return status;
}
48a7a: 2003 movel %d3,%d0 <== NOT EXECUTED
48a7c: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
48a80: 262e fffc movel %fp@(-4),%d3 <== NOT EXECUTED
48a84: 4e5e unlk %fp <== NOT EXECUTED
00046e28 <unlink>:
#include <rtems/seterr.h>
int unlink(
const char *path
)
{
46e28: 4e56 ffc0 linkw %fp,#-64
46e2c: 48d7 0c1c moveml %d2-%d4/%a2-%a3,%sp@
46e30: 242e 0008 movel %fp@(8),%d2
/*
* Get the node to be unlinked. Find the parent path first.
*/
parentpathlen = rtems_filesystem_dirname ( path );
46e34: 2f02 movel %d2,%sp@-
46e36: 4eb9 0004 3ea6 jsr 43ea6 <rtems_filesystem_dirname>
if ( parentpathlen == 0 )
46e3c: 588f addql #4,%sp
46e3e: 4a80 tstl %d0
46e40: 6600 00f4 bnew 46f36 <unlink+0x10e>
rtems_filesystem_get_start_loc( path, &i, &parentloc );
46e44: 45ee ffe8 lea %fp@(-24),%a2
46e48: 4283 clrl %d3
46e4a: 2f0a movel %a2,%sp@-
46e4c: 486e fffc pea %fp@(-4)
const char *name;
rtems_filesystem_location_info_t parentloc;
rtems_filesystem_location_info_t loc;
int i;
int result;
bool free_parentloc = false;
46e50: 4204 clrb %d4
*/
parentpathlen = rtems_filesystem_dirname ( path );
if ( parentpathlen == 0 )
rtems_filesystem_get_start_loc( path, &i, &parentloc );
46e52: 2f02 movel %d2,%sp@-
46e54: 4eb9 0004 4f1c jsr 44f1c <rtems_filesystem_get_start_loc>
46e5a: 4fef 000c lea %sp@(12),%sp
/*
* Start from the parent to find the node that should be under it.
*/
loc = parentloc;
46e5e: 2d52 ffd4 movel %a2@,%fp@(-44)
name = path + parentpathlen;
46e62: d682 addl %d2,%d3
name += rtems_filesystem_prefix_separators( name, strlen( name ) );
46e64: 47f9 0005 31c4 lea 531c4 <strlen>,%a3
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
46e6a: 240e movel %fp,%d2
46e6c: 0682 ffff ffd4 addil #-44,%d2
/*
* Start from the parent to find the node that should be under it.
*/
loc = parentloc;
46e72: 2d6e ffec ffd8 movel %fp@(-20),%fp@(-40)
46e78: 2d6e fff0 ffdc movel %fp@(-16),%fp@(-36)
46e7e: 2d6e fff4 ffe0 movel %fp@(-12),%fp@(-32)
46e84: 2d6e fff8 ffe4 movel %fp@(-8),%fp@(-28)
name = path + parentpathlen;
name += rtems_filesystem_prefix_separators( name, strlen( name ) );
46e8a: 2f03 movel %d3,%sp@-
46e8c: 4e93 jsr %a3@
46e8e: 2e80 movel %d0,%sp@
46e90: 2f03 movel %d3,%sp@-
46e92: 4eb9 0004 3ee8 jsr 43ee8 <rtems_filesystem_prefix_separators>
46e98: d680 addl %d0,%d3
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
46e9a: 2f03 movel %d3,%sp@-
46e9c: 4e93 jsr %a3@
46e9e: 4297 clrl %sp@
46ea0: 2f02 movel %d2,%sp@-
46ea2: 42a7 clrl %sp@-
46ea4: 2f00 movel %d0,%sp@-
46ea6: 2f03 movel %d3,%sp@-
46ea8: 4eb9 0004 3d68 jsr 43d68 <rtems_filesystem_evaluate_relative_path>
0, &loc, false );
if ( result != 0 ) {
46eae: 4fef 001c lea %sp@(28),%sp
46eb2: 4a80 tstl %d0
46eb4: 6656 bnes 46f0c <unlink+0xe4> <== NEVER TAKEN
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
return -1;
}
if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) {
46eb6: 206e ffe0 moveal %fp@(-32),%a0
46eba: 2f02 movel %d2,%sp@-
46ebc: 2068 0010 moveal %a0@(16),%a0
46ec0: 4e90 jsr %a0@
46ec2: 588f addql #4,%sp
46ec4: 7201 moveq #1,%d1
46ec6: b280 cmpl %d0,%d1
46ec8: 6700 0092 beqw 46f5c <unlink+0x134>
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
rtems_set_errno_and_return_minus_one( EISDIR );
}
result = (*loc.ops->unlink_h)( &parentloc, &loc );
46ecc: 2f02 movel %d2,%sp@-
46ece: 206e ffe0 moveal %fp@(-32),%a0
46ed2: 2f0a movel %a2,%sp@-
46ed4: 2068 000c moveal %a0@(12),%a0
rtems_filesystem_freenode( &loc );
46ed8: 47f9 0004 3f3c lea 43f3c <rtems_filesystem_freenode>,%a3
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
rtems_set_errno_and_return_minus_one( EISDIR );
}
result = (*loc.ops->unlink_h)( &parentloc, &loc );
46ede: 4e90 jsr %a0@
46ee0: 2600 movel %d0,%d3
rtems_filesystem_freenode( &loc );
46ee2: 2f02 movel %d2,%sp@-
46ee4: 4e93 jsr %a3@
if ( free_parentloc )
46ee6: 4fef 000c lea %sp@(12),%sp
46eea: 4a04 tstb %d4
46eec: 660c bnes 46efa <unlink+0xd2>
rtems_filesystem_freenode( &parentloc );
return result;
}
46eee: 2003 movel %d3,%d0
46ef0: 4cee 0c1c ffc0 moveml %fp@(-64),%d2-%d4/%a2-%a3
46ef6: 4e5e unlk %fp
46ef8: 4e75 rts
result = (*loc.ops->unlink_h)( &parentloc, &loc );
rtems_filesystem_freenode( &loc );
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
46efa: 2f0a movel %a2,%sp@-
46efc: 4e93 jsr %a3@
46efe: 588f addql #4,%sp
return result;
}
46f00: 2003 movel %d3,%d0
46f02: 4cee 0c1c ffc0 moveml %fp@(-64),%d2-%d4/%a2-%a3
46f08: 4e5e unlk %fp
46f0a: 4e75 rts
name += rtems_filesystem_prefix_separators( name, strlen( name ) );
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
0, &loc, false );
if ( result != 0 ) {
if ( free_parentloc )
46f0c: 4a04 tstb %d4 <== NOT EXECUTED
46f0e: 660e bnes 46f1e <unlink+0xf6> <== NOT EXECUTED
rtems_filesystem_freenode( &parentloc );
return -1;
46f10: 76ff moveq #-1,%d3 <== NOT EXECUTED
rtems_filesystem_freenode( &loc );
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
return result;
}
46f12: 2003 movel %d3,%d0 <== NOT EXECUTED
46f14: 4cee 0c1c ffc0 moveml %fp@(-64),%d2-%d4/%a2-%a3 <== NOT EXECUTED
46f1a: 4e5e unlk %fp <== NOT EXECUTED
46f1c: 4e75 rts <== NOT EXECUTED
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
0, &loc, false );
if ( result != 0 ) {
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
46f1e: 2f0a movel %a2,%sp@- <== NOT EXECUTED
return -1;
46f20: 76ff moveq #-1,%d3 <== NOT EXECUTED
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
0, &loc, false );
if ( result != 0 ) {
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
46f22: 4eb9 0004 3f3c jsr 43f3c <rtems_filesystem_freenode> <== NOT EXECUTED
46f28: 588f addql #4,%sp <== NOT EXECUTED
rtems_filesystem_freenode( &loc );
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
return result;
}
46f2a: 2003 movel %d3,%d0 <== NOT EXECUTED
46f2c: 4cee 0c1c ffc0 moveml %fp@(-64),%d2-%d4/%a2-%a3 <== NOT EXECUTED
46f32: 4e5e unlk %fp <== NOT EXECUTED
46f34: 4e75 rts <== NOT EXECUTED
parentpathlen = rtems_filesystem_dirname ( path );
if ( parentpathlen == 0 )
rtems_filesystem_get_start_loc( path, &i, &parentloc );
else {
result = rtems_filesystem_evaluate_path( path, parentpathlen,
46f36: 42a7 clrl %sp@-
46f38: 45ee ffe8 lea %fp@(-24),%a2
46f3c: 2600 movel %d0,%d3
46f3e: 2f0a movel %a2,%sp@-
46f40: 4878 0002 pea 2 <DOUBLE_FLOAT>
46f44: 2f00 movel %d0,%sp@-
46f46: 2f02 movel %d2,%sp@-
46f48: 4eb9 0004 3e18 jsr 43e18 <rtems_filesystem_evaluate_path>
RTEMS_LIBIO_PERMS_WRITE,
&parentloc,
false );
if ( result != 0 )
46f4e: 4fef 0014 lea %sp@(20),%sp
46f52: 4a80 tstl %d0
46f54: 66ba bnes 46f10 <unlink+0xe8> <== NEVER TAKEN
return -1;
free_parentloc = true;
46f56: 7801 moveq #1,%d4
46f58: 6000 ff04 braw 46e5e <unlink+0x36>
rtems_filesystem_freenode( &parentloc );
return -1;
}
if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) {
rtems_filesystem_freenode( &loc );
46f5c: 2f02 movel %d2,%sp@-
46f5e: 47f9 0004 3f3c lea 43f3c <rtems_filesystem_freenode>,%a3
46f64: 4e93 jsr %a3@
if ( free_parentloc )
46f66: 588f addql #4,%sp
46f68: 4a04 tstb %d4
46f6a: 661a bnes 46f86 <unlink+0x15e> <== NEVER TAKEN
rtems_filesystem_freenode( &parentloc );
rtems_set_errno_and_return_minus_one( EISDIR );
46f6c: 4eb9 0005 1e20 jsr 51e20 <__errno>
46f72: 76ff moveq #-1,%d3
46f74: 2040 moveal %d0,%a0
46f76: 7015 moveq #21,%d0
46f78: 2080 movel %d0,%a0@
rtems_filesystem_freenode( &loc );
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
return result;
}
46f7a: 2003 movel %d3,%d0
46f7c: 4cee 0c1c ffc0 moveml %fp@(-64),%d2-%d4/%a2-%a3
46f82: 4e5e unlk %fp
46f84: 4e75 rts
}
if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) {
rtems_filesystem_freenode( &loc );
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
46f86: 2f0a movel %a2,%sp@- <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EISDIR );
46f88: 76ff moveq #-1,%d3 <== NOT EXECUTED
}
if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) {
rtems_filesystem_freenode( &loc );
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
46f8a: 4e93 jsr %a3@ <== NOT EXECUTED
46f8c: 588f addql #4,%sp <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EISDIR );
46f8e: 4eb9 0005 1e20 jsr 51e20 <__errno> <== NOT EXECUTED
46f94: 2040 moveal %d0,%a0 <== NOT EXECUTED
46f96: 7015 moveq #21,%d0 <== NOT EXECUTED
46f98: 2080 movel %d0,%a0@ <== NOT EXECUTED
46f9a: 60de bras 46f7a <unlink+0x152> <== NOT EXECUTED
000471a8 <unmount>:
*/
int unmount(
const char *path
)
{
471a8: 4e56 ffe0 linkw %fp,#-32
471ac: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
471b0: 246e 0008 moveal %fp@(8),%a2
* The root node of the mounted filesytem.
* The node for the directory that the fileystem is mounted on.
* The mount entry that is being refered to.
*/
if ( rtems_filesystem_evaluate_path( path, strlen( path ), 0x0, &loc, true ) )
471b4: 240e movel %fp,%d2
471b6: 0682 ffff ffec addil #-20,%d2
471bc: 2f0a movel %a2,%sp@-
471be: 4eb9 0005 02ec jsr 502ec <strlen>
471c4: 7201 moveq #1,%d1
471c6: 2e81 movel %d1,%sp@
471c8: 2f02 movel %d2,%sp@-
471ca: 42a7 clrl %sp@-
471cc: 2f00 movel %d0,%sp@-
471ce: 2f0a movel %a2,%sp@-
471d0: 4eb9 0004 3d74 jsr 43d74 <rtems_filesystem_evaluate_path>
471d6: 4fef 0014 lea %sp@(20),%sp
471da: 4a80 tstl %d0
471dc: 6664 bnes 47242 <unmount+0x9a>
return -1;
mt_entry = loc.mt_entry;
471de: 246e fffc moveal %fp@(-4),%a2
/*
* Verify this is the root node for the file system to be unmounted.
*/
if ( fs_root_loc->node_access != loc.node_access ){
471e2: 202e ffec movel %fp@(-20),%d0
471e6: b0aa 001c cmpl %a2@(28),%d0
471ea: 6600 00b6 bnew 472a2 <unmount+0xfa>
/*
* Free the loc node and just use the nodes from the mt_entry .
*/
rtems_filesystem_freenode( &loc );
471ee: 2f02 movel %d2,%sp@-
471f0: 47f9 0004 3e98 lea 43e98 <rtems_filesystem_freenode>,%a3
471f6: 4e93 jsr %a3@
* that made the current node thread based instead
* of system based? I thought it was but it doesn't
* look like it in this version.
*/
if ( rtems_filesystem_current.mt_entry == mt_entry )
471f8: 2079 0005 f294 moveal 5f294 <rtems_current_user_env>,%a0
471fe: 588f addql #4,%sp
47200: b5e8 0014 cmpal %a0@(20),%a2
47204: 6700 00be beqw 472c4 <unmount+0x11c>
/*
* Verify there are no file systems below the path specified
*/
if ( rtems_filesystem_mount_iterate( is_fs_below_mount_point,
47208: 2f2a 002c movel %a2@(44),%sp@-
4720c: 487a ff82 pea %pc@(47190 <is_fs_below_mount_point>)
47210: 4eb9 0004 4780 jsr 44780 <rtems_filesystem_mount_iterate>
47216: 508f addql #8,%sp
47218: 4a00 tstb %d0
4721a: 6600 00a8 bnew 472c4 <unmount+0x11c>
* Run the file descriptor table to determine if there are any file
* descriptors that are currently active and reference nodes in the
* file system that we are trying to unmount
*/
if ( rtems_libio_is_open_files_in_fs( mt_entry ) == 1 )
4721e: 2f0a movel %a2,%sp@-
47220: 4eb9 0004 4250 jsr 44250 <rtems_libio_is_open_files_in_fs>
47226: 588f addql #4,%sp
47228: 7201 moveq #1,%d1
4722a: b280 cmpl %d0,%d1
4722c: 6700 0096 beqw 472c4 <unmount+0x11c>
* Allow the file system being unmounted on to do its cleanup.
* If it fails it will set the errno to the approprate value
* and the fileystem will not be modified.
*/
if (( fs_mount_loc->ops->unmount_h )( mt_entry ) != 0 )
47230: 206a 0014 moveal %a2@(20),%a0
47234: 2f0a movel %a2,%sp@-
47236: 2068 0028 moveal %a0@(40),%a0
4723a: 4e90 jsr %a0@
4723c: 588f addql #4,%sp
4723e: 4a80 tstl %d0
47240: 670c beqs 4724e <unmount+0xa6> <== ALWAYS TAKEN
*/
if ((fs_root_loc->ops->fsunmount_me_h )( mt_entry ) != 0){
if (( fs_mount_loc->ops->mount_h )( mt_entry ) != 0 )
rtems_fatal_error_occurred( 0 );
return -1;
47242: 70ff moveq #-1,%d0
rtems_filesystem_freenode( fs_mount_loc );
free( mt_entry );
return 0;
}
47244: 4cee 0c04 ffe0 moveml %fp@(-32),%d2/%a2-%a3
4724a: 4e5e unlk %fp
4724c: 4e75 rts
* NOTE: Fatal error is called in a case which should never happen
* This was response was questionable but the best we could
* come up with.
*/
if ((fs_root_loc->ops->fsunmount_me_h )( mt_entry ) != 0){
4724e: 206a 0028 moveal %a2@(40),%a0
47252: 2f0a movel %a2,%sp@-
47254: 2068 002c moveal %a0@(44),%a0
47258: 4e90 jsr %a0@
4725a: 588f addql #4,%sp
4725c: 4a80 tstl %d0
4725e: 667c bnes 472dc <unmount+0x134> <== NEVER TAKEN
rtems_status_code rtems_libio_set_private_env(void);
rtems_status_code rtems_libio_share_private_env(rtems_id task_id) ;
static inline void rtems_libio_lock( void )
{
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
47260: 42a7 clrl %sp@-
47262: 42a7 clrl %sp@-
47264: 2f39 0006 08a0 movel 608a0 <rtems_libio_semaphore>,%sp@-
4726a: 4eb9 0004 7dcc jsr 47dcc <rtems_semaphore_obtain>
*/
RTEMS_INLINE_ROUTINE void rtems_chain_extract(
rtems_chain_node *the_node
)
{
_Chain_Extract( the_node );
47270: 2f0a movel %a2,%sp@-
47272: 4eb9 0004 87a8 jsr 487a8 <_Chain_Extract>
}
static inline void rtems_libio_unlock( void )
{
rtems_semaphore_release( rtems_libio_semaphore );
47278: 2f39 0006 08a0 movel 608a0 <rtems_libio_semaphore>,%sp@-
4727e: 4eb9 0004 7f0c jsr 47f0c <rtems_semaphore_release>
/*
* Free the memory node that was allocated in mount
* Free the memory associated with the extracted mount table entry.
*/
rtems_filesystem_freenode( fs_mount_loc );
47284: 486a 0008 pea %a2@(8)
47288: 4e93 jsr %a3@
free( mt_entry );
4728a: 2f0a movel %a2,%sp@-
4728c: 4eb9 0004 3eac jsr 43eac <free>
return 0;
47292: 4fef 001c lea %sp@(28),%sp
47296: 4280 clrl %d0
}
47298: 4cee 0c04 ffe0 moveml %fp@(-32),%d2/%a2-%a3
4729e: 4e5e unlk %fp
472a0: 4e75 rts
/*
* Verify this is the root node for the file system to be unmounted.
*/
if ( fs_root_loc->node_access != loc.node_access ){
rtems_filesystem_freenode( &loc );
472a2: 2f02 movel %d2,%sp@-
rtems_set_errno_and_return_minus_one( EACCES );
472a4: 740d moveq #13,%d2
/*
* Verify this is the root node for the file system to be unmounted.
*/
if ( fs_root_loc->node_access != loc.node_access ){
rtems_filesystem_freenode( &loc );
472a6: 4eb9 0004 3e98 jsr 43e98 <rtems_filesystem_freenode>
rtems_set_errno_and_return_minus_one( EACCES );
472ac: 4eb9 0004 ee18 jsr 4ee18 <__errno>
472b2: 588f addql #4,%sp
472b4: 2040 moveal %d0,%a0
472b6: 70ff moveq #-1,%d0
472b8: 2082 movel %d2,%a0@
rtems_filesystem_freenode( fs_mount_loc );
free( mt_entry );
return 0;
}
472ba: 4cee 0c04 ffe0 moveml %fp@(-32),%d2/%a2-%a3
472c0: 4e5e unlk %fp
472c2: 4e75 rts
* descriptors that are currently active and reference nodes in the
* file system that we are trying to unmount
*/
if ( rtems_libio_is_open_files_in_fs( mt_entry ) == 1 )
rtems_set_errno_and_return_minus_one( EBUSY );
472c4: 4eb9 0004 ee18 jsr 4ee18 <__errno>
472ca: 7210 moveq #16,%d1
472cc: 2040 moveal %d0,%a0
472ce: 70ff moveq #-1,%d0
rtems_filesystem_freenode( fs_mount_loc );
free( mt_entry );
return 0;
}
472d0: 4cee 0c04 ffe0 moveml %fp@(-32),%d2/%a2-%a3
* descriptors that are currently active and reference nodes in the
* file system that we are trying to unmount
*/
if ( rtems_libio_is_open_files_in_fs( mt_entry ) == 1 )
rtems_set_errno_and_return_minus_one( EBUSY );
472d6: 2081 movel %d1,%a0@
rtems_filesystem_freenode( fs_mount_loc );
free( mt_entry );
return 0;
}
472d8: 4e5e unlk %fp
472da: 4e75 rts
* This was response was questionable but the best we could
* come up with.
*/
if ((fs_root_loc->ops->fsunmount_me_h )( mt_entry ) != 0){
if (( fs_mount_loc->ops->mount_h )( mt_entry ) != 0 )
472dc: 206a 0014 moveal %a2@(20),%a0 <== NOT EXECUTED
472e0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
472e2: 2068 0020 moveal %a0@(32),%a0 <== NOT EXECUTED
472e6: 4e90 jsr %a0@ <== NOT EXECUTED
472e8: 588f addql #4,%sp <== NOT EXECUTED
472ea: 4a80 tstl %d0 <== NOT EXECUTED
472ec: 6700 ff54 beqw 47242 <unmount+0x9a> <== NOT EXECUTED
rtems_fatal_error_occurred( 0 );
472f0: 42a7 clrl %sp@- <== NOT EXECUTED
472f2: 4eb9 0004 84a0 jsr 484a0 <rtems_fatal_error_occurred> <== NOT EXECUTED
00047094 <utime>:
int utime(
const char *path,
const struct utimbuf *times
)
{
47094: 4e56 ffdc linkw %fp,#-36
47098: 48d7 040c moveml %d2-%d3/%a2,%sp@
4709c: 262e 0008 movel %fp@(8),%d3
rtems_filesystem_location_info_t temp_loc;
int result;
struct utimbuf now;
if ( rtems_filesystem_evaluate_path( path, strlen( path ), 0x00, &temp_loc, true ) )
470a0: 240e movel %fp,%d2
470a2: 0682 ffff ffec addil #-20,%d2
470a8: 2f03 movel %d3,%sp@-
int utime(
const char *path,
const struct utimbuf *times
)
{
470aa: 246e 000c moveal %fp@(12),%a2
rtems_filesystem_location_info_t temp_loc;
int result;
struct utimbuf now;
if ( rtems_filesystem_evaluate_path( path, strlen( path ), 0x00, &temp_loc, true ) )
470ae: 4eb9 0005 0d40 jsr 50d40 <strlen>
470b4: 7201 moveq #1,%d1
470b6: 2e81 movel %d1,%sp@
470b8: 2f02 movel %d2,%sp@-
470ba: 42a7 clrl %sp@-
470bc: 2f00 movel %d0,%sp@-
470be: 2f03 movel %d3,%sp@-
470c0: 4eb9 0004 36b0 jsr 436b0 <rtems_filesystem_evaluate_path>
470c6: 4fef 0014 lea %sp@(20),%sp
470ca: 4a80 tstl %d0
470cc: 6638 bnes 47106 <utime+0x72>
return -1;
if ( times == NULL ) {
470ce: 4a8a tstl %a2
470d0: 6740 beqs 47112 <utime+0x7e> <== NEVER TAKEN
470d2: 2212 movel %a2@,%d1
470d4: 202a 0004 movel %a2@(4),%d0
now.actime = now.modtime = time( NULL );
times = &now;
}
result = (*temp_loc.ops->utime_h)( &temp_loc, times->actime, times->modtime );
470d8: 2f00 movel %d0,%sp@-
470da: 206e fff8 moveal %fp@(-8),%a0
470de: 2f01 movel %d1,%sp@-
470e0: 2f02 movel %d2,%sp@-
470e2: 2068 0030 moveal %a0@(48),%a0
470e6: 4e90 jsr %a0@
rtems_filesystem_freenode( &temp_loc );
470e8: 2f02 movel %d2,%sp@-
470ea: 2d40 ffe8 movel %d0,%fp@(-24)
470ee: 4eb9 0004 3b8c jsr 43b8c <rtems_filesystem_freenode>
return result;
470f4: 202e ffe8 movel %fp@(-24),%d0
470f8: 4fef 0010 lea %sp@(16),%sp
}
470fc: 4cee 040c ffdc moveml %fp@(-36),%d2-%d3/%a2
47102: 4e5e unlk %fp
47104: 4e75 rts
rtems_filesystem_location_info_t temp_loc;
int result;
struct utimbuf now;
if ( rtems_filesystem_evaluate_path( path, strlen( path ), 0x00, &temp_loc, true ) )
return -1;
47106: 70ff moveq #-1,%d0
result = (*temp_loc.ops->utime_h)( &temp_loc, times->actime, times->modtime );
rtems_filesystem_freenode( &temp_loc );
return result;
}
47108: 4cee 040c ffdc moveml %fp@(-36),%d2-%d3/%a2
4710e: 4e5e unlk %fp
47110: 4e75 rts
if ( rtems_filesystem_evaluate_path( path, strlen( path ), 0x00, &temp_loc, true ) )
return -1;
if ( times == NULL ) {
now.actime = now.modtime = time( NULL );
47112: 42a7 clrl %sp@- <== NOT EXECUTED
47114: 4eb9 0005 3020 jsr 53020 <time> <== NOT EXECUTED
4711a: 588f addql #4,%sp <== NOT EXECUTED
4711c: 2200 movel %d0,%d1 <== NOT EXECUTED
times = &now;
}
result = (*temp_loc.ops->utime_h)( &temp_loc, times->actime, times->modtime );
4711e: 2f00 movel %d0,%sp@- <== NOT EXECUTED
47120: 206e fff8 moveal %fp@(-8),%a0 <== NOT EXECUTED
47124: 2f01 movel %d1,%sp@- <== NOT EXECUTED
47126: 2f02 movel %d2,%sp@- <== NOT EXECUTED
47128: 2068 0030 moveal %a0@(48),%a0 <== NOT EXECUTED
4712c: 4e90 jsr %a0@ <== NOT EXECUTED
rtems_filesystem_freenode( &temp_loc );
4712e: 2f02 movel %d2,%sp@- <== NOT EXECUTED
47130: 2d40 ffe8 movel %d0,%fp@(-24) <== NOT EXECUTED
47134: 4eb9 0004 3b8c jsr 43b8c <rtems_filesystem_freenode> <== NOT EXECUTED
return result;
4713a: 202e ffe8 movel %fp@(-24),%d0 <== NOT EXECUTED
4713e: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
47142: 60b8 bras 470fc <utime+0x68> <== NOT EXECUTED
00045b74 <vprintk>:
*/
void vprintk(
const char *fmt,
va_list ap
)
{
45b74: 4e56 ffc0 linkw %fp,#-64
45b78: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
45b7c: 246e 0008 moveal %fp@(8),%a2
for (; *fmt != '\0'; fmt++) {
45b80: 1012 moveb %a2@,%d0
*/
void vprintk(
const char *fmt,
va_list ap
)
{
45b82: 2a6e 000c moveal %fp@(12),%a5
for (; *fmt != '\0'; fmt++) {
45b86: 6728 beqs 45bb0 <vprintk+0x3c> <== NEVER TAKEN
* console is not yet initialized or in ISR's.
*
* Arguments:
* as in printf: fmt - format string, ... - unnamed arguments.
*/
void vprintk(
45b88: 2a0e movel %fp,%d5
45b8a: 0685 ffff ffec addil #-20,%d5
45b90: 49f9 0005 bf35 lea 5bf35 <rtems_filesystem_default_pathconf+0x41>,%a4
bool minus = false;
bool sign = false;
char lead = ' ';
char c;
if (*fmt != '%') {
45b96: 49c0 extbl %d0
45b98: 7225 moveq #37,%d1
45b9a: b280 cmpl %d0,%d1
45b9c: 671c beqs 45bba <vprintk+0x46>
BSP_output_char(*fmt);
45b9e: 2f00 movel %d0,%sp@-
45ba0: 2079 0005 cd3c moveal 5cd3c <BSP_output_char>,%a0
45ba6: 4e90 jsr %a0@
continue;
45ba8: 588f addql #4,%sp
void vprintk(
const char *fmt,
va_list ap
)
{
for (; *fmt != '\0'; fmt++) {
45baa: 528a addql #1,%a2
45bac: 1012 moveb %a2@,%d0
45bae: 66e6 bnes 45b96 <vprintk+0x22>
sign,
width,
lead
);
}
}
45bb0: 4cee 3cfc ffc0 moveml %fp@(-64),%d2-%d7/%a2-%a5
45bb6: 4e5e unlk %fp
45bb8: 4e75 rts
if (*fmt != '%') {
BSP_output_char(*fmt);
continue;
}
fmt++;
45bba: 528a addql #1,%a2
if (*fmt == '0' ) {
45bbc: 7430 moveq #48,%d2
45bbe: 1012 moveb %a2@,%d0
45bc0: 1200 moveb %d0,%d1
45bc2: 49c1 extbl %d1
45bc4: b481 cmpl %d1,%d2
45bc6: 6700 021a beqw 45de2 <vprintk+0x26e>
unsigned base = 0;
unsigned width = 0;
bool lflag = false;
bool minus = false;
bool sign = false;
char lead = ' ';
45bca: 7e20 moveq #32,%d7
fmt++;
if (*fmt == '0' ) {
lead = '0';
fmt++;
}
if (*fmt == '-' ) {
45bcc: 762d moveq #45,%d3
45bce: b681 cmpl %d1,%d3
45bd0: 6700 01e4 beqw 45db6 <vprintk+0x242>
minus = true;
fmt++;
}
while (*fmt >= '0' && *fmt <= '9' ) {
45bd4: 0680 ffff ffd0 addil #-48,%d0
45bda: 7c09 moveq #9,%d6
45bdc: 0280 0000 00ff andil #255,%d0
{
for (; *fmt != '\0'; fmt++) {
unsigned base = 0;
unsigned width = 0;
bool lflag = false;
bool minus = false;
45be2: 4204 clrb %d4
}
if (*fmt == '-' ) {
minus = true;
fmt++;
}
while (*fmt >= '0' && *fmt <= '9' ) {
45be4: bc80 cmpl %d0,%d6
45be6: 6500 01ec bcsw 45dd4 <vprintk+0x260>
* console is not yet initialized or in ISR's.
*
* Arguments:
* as in printf: fmt - format string, ... - unnamed arguments.
*/
void vprintk(
45bea: 41ea 0001 lea %a2@(1),%a0
45bee: 4282 clrl %d2
if (*fmt == '-' ) {
minus = true;
fmt++;
}
while (*fmt >= '0' && *fmt <= '9' ) {
width *= 10;
45bf0: 2602 movel %d2,%d3
width += ((unsigned) *fmt - '0');
45bf2: 2448 moveal %a0,%a2
}
if (*fmt == '-' ) {
minus = true;
fmt++;
}
while (*fmt >= '0' && *fmt <= '9' ) {
45bf4: 5288 addql #1,%a0
45bf6: 7c09 moveq #9,%d6
width *= 10;
45bf8: e78b lsll #3,%d3
}
if (*fmt == '-' ) {
minus = true;
fmt++;
}
while (*fmt >= '0' && *fmt <= '9' ) {
45bfa: 1012 moveb %a2@,%d0
width *= 10;
45bfc: 2243 moveal %d3,%a1
}
if (*fmt == '-' ) {
minus = true;
fmt++;
}
while (*fmt >= '0' && *fmt <= '9' ) {
45bfe: 2600 movel %d0,%d3
45c00: 0683 ffff ffd0 addil #-48,%d3
width *= 10;
45c06: 43f1 2a00 lea %a1@(00000000,%d2:l:2),%a1
}
if (*fmt == '-' ) {
minus = true;
fmt++;
}
while (*fmt >= '0' && *fmt <= '9' ) {
45c0a: 0283 0000 00ff andil #255,%d3
width *= 10;
width += ((unsigned) *fmt - '0');
45c10: 43f1 18d0 lea %a1@(ffffffd0,%d1:l),%a1
45c14: 1200 moveb %d0,%d1
45c16: 2409 movel %a1,%d2
45c18: 49c1 extbl %d1
}
if (*fmt == '-' ) {
minus = true;
fmt++;
}
while (*fmt >= '0' && *fmt <= '9' ) {
45c1a: bc83 cmpl %d3,%d6
45c1c: 64d2 bccs 45bf0 <vprintk+0x7c>
45c1e: 1200 moveb %d0,%d1
width *= 10;
width += ((unsigned) *fmt - '0');
fmt++;
}
if ((c = *fmt) == 'l') {
45c20: 706c moveq #108,%d0
45c22: 49c1 extbl %d1
45c24: b081 cmpl %d1,%d0
45c26: 6700 008e beqw 45cb6 <vprintk+0x142>
lflag = true;
c = *++fmt;
}
if ( c == 'c' ) {
45c2a: 7663 moveq #99,%d3
45c2c: b681 cmpl %d1,%d3
45c2e: 6700 0094 beqw 45cc4 <vprintk+0x150>
/* need a cast here since va_arg() only takes fully promoted types */
char chr = (char) va_arg(ap, int);
BSP_output_char(chr);
continue;
}
if ( c == 's' ) {
45c32: 7c73 moveq #115,%d6
45c34: bc81 cmpl %d1,%d6
45c36: 6700 01b8 beqw 45df0 <vprintk+0x27c>
continue;
}
/* must be a numeric format or something unsupported */
if ( c == 'o' || c == 'O' ) {
45c3a: 766f moveq #111,%d3
45c3c: b681 cmpl %d1,%d3
45c3e: 6700 0168 beqw 45da8 <vprintk+0x234>
45c42: 7c4f moveq #79,%d6
45c44: bc81 cmpl %d1,%d6
45c46: 6700 0160 beqw 45da8 <vprintk+0x234>
base = 8; sign = false;
} else if ( c == 'i' || c == 'I' ||
45c4a: 163c 0069 moveb #105,%d3
45c4e: b681 cmpl %d1,%d3
45c50: 6700 0090 beqw 45ce2 <vprintk+0x16e>
45c54: 1c3c 0049 moveb #73,%d6
45c58: bc81 cmpl %d1,%d6
45c5a: 6700 0086 beqw 45ce2 <vprintk+0x16e>
45c5e: 163c 0064 moveb #100,%d3
45c62: b681 cmpl %d1,%d3
45c64: 677c beqs 45ce2 <vprintk+0x16e>
c == 'd' || c == 'D' ) {
45c66: 1c3c 0044 moveb #68,%d6
45c6a: bc81 cmpl %d1,%d6
45c6c: 6774 beqs 45ce2 <vprintk+0x16e> <== NEVER TAKEN
base = 10; sign = true;
} else if ( c == 'u' || c == 'U' ) {
45c6e: 163c 0075 moveb #117,%d3
45c72: b681 cmpl %d1,%d3
45c74: 6700 0258 beqw 45ece <vprintk+0x35a>
45c78: 1c3c 0055 moveb #85,%d6
45c7c: bc81 cmpl %d1,%d6
45c7e: 6700 024e beqw 45ece <vprintk+0x35a>
base = 10; sign = false;
} else if ( c == 'x' || c == 'X' ) {
45c82: 163c 0078 moveb #120,%d3
45c86: b681 cmpl %d1,%d3
45c88: 6700 0264 beqw 45eee <vprintk+0x37a>
45c8c: 1c3c 0058 moveb #88,%d6
45c90: bc81 cmpl %d1,%d6
45c92: 6700 025a beqw 45eee <vprintk+0x37a>
base = 16; sign = false;
} else if ( c == 'p' ) {
45c96: 7070 moveq #112,%d0
45c98: b081 cmpl %d1,%d0
45c9a: 6700 0260 beqw 45efc <vprintk+0x388>
base = 16; sign = false; lflag = true;
} else {
BSP_output_char(c);
45c9e: 2f01 movel %d1,%sp@-
45ca0: 2079 0005 cd3c moveal 5cd3c <BSP_output_char>,%a0
void vprintk(
const char *fmt,
va_list ap
)
{
for (; *fmt != '\0'; fmt++) {
45ca6: 528a addql #1,%a2
} else if ( c == 'x' || c == 'X' ) {
base = 16; sign = false;
} else if ( c == 'p' ) {
base = 16; sign = false; lflag = true;
} else {
BSP_output_char(c);
45ca8: 4e90 jsr %a0@
continue;
45caa: 588f addql #4,%sp
void vprintk(
const char *fmt,
va_list ap
)
{
for (; *fmt != '\0'; fmt++) {
45cac: 1012 moveb %a2@,%d0
45cae: 6600 fee6 bnew 45b96 <vprintk+0x22>
45cb2: 6000 fefc braw 45bb0 <vprintk+0x3c> <== NOT EXECUTED
fmt++;
}
if ((c = *fmt) == 'l') {
lflag = true;
c = *++fmt;
45cb6: 528a addql #1,%a2
}
if ( c == 'c' ) {
45cb8: 7663 moveq #99,%d3
45cba: 1212 moveb %a2@,%d1
45cbc: 49c1 extbl %d1
45cbe: b681 cmpl %d1,%d3
45cc0: 6600 ff70 bnew 45c32 <vprintk+0xbe>
/* need a cast here since va_arg() only takes fully promoted types */
char chr = (char) va_arg(ap, int);
45cc4: 2015 movel %a5@,%d0
BSP_output_char(chr);
45cc6: 49c0 extbl %d0
void vprintk(
const char *fmt,
va_list ap
)
{
for (; *fmt != '\0'; fmt++) {
45cc8: 528a addql #1,%a2
lflag = true;
c = *++fmt;
}
if ( c == 'c' ) {
/* need a cast here since va_arg() only takes fully promoted types */
char chr = (char) va_arg(ap, int);
45cca: 588d addql #4,%a5
BSP_output_char(chr);
45ccc: 2f00 movel %d0,%sp@-
45cce: 2079 0005 cd3c moveal 5cd3c <BSP_output_char>,%a0
45cd4: 4e90 jsr %a0@
continue;
45cd6: 588f addql #4,%sp
void vprintk(
const char *fmt,
va_list ap
)
{
for (; *fmt != '\0'; fmt++) {
45cd8: 1012 moveb %a2@,%d0
45cda: 6600 feba bnew 45b96 <vprintk+0x22>
45cde: 6000 fed0 braw 45bb0 <vprintk+0x3c> <== NOT EXECUTED
} else {
BSP_output_char(c);
continue;
}
printNum(
45ce2: 49c7 extbl %d7
/* must be a numeric format or something unsupported */
if ( c == 'o' || c == 'O' ) {
base = 8; sign = false;
} else if ( c == 'i' || c == 'I' ||
c == 'd' || c == 'D' ) {
base = 10; sign = true;
45ce4: 760a moveq #10,%d3
45ce6: 7201 moveq #1,%d1
} else {
BSP_output_char(c);
continue;
}
printNum(
45ce8: 2d47 ffe8 movel %d7,%fp@(-24)
45cec: 2815 movel %a5@,%d4
lflag ? va_arg(ap, long) : (long) va_arg(ap, int),
45cee: 588d addql #4,%a5
unsigned long unsigned_num;
unsigned long n;
unsigned count;
char toPrint[20];
if ( sign && (num < 0) ) {
45cf0: 4a01 tstb %d1
45cf2: 6706 beqs 45cfa <vprintk+0x186>
45cf4: 4a84 tstl %d4
45cf6: 6d00 01a0 bltw 45e98 <vprintk+0x324>
} else {
unsigned_num = (unsigned long) num;
}
count = 0;
while ((n = unsigned_num / base) > 0) {
45cfa: 2004 movel %d4,%d0
45cfc: 4c43 0000 remul %d3,%d0,%d0
45d00: 6700 01b8 beqw 45eba <vprintk+0x346>
45d04: 2045 moveal %d5,%a0
45d06: 2200 movel %d0,%d1
45d08: 3243 moveaw %d3,%a1
45d0a: 4c43 1001 remul %d3,%d1,%d1
toPrint[count++] = (char) (unsigned_num - (n * base));
45d0e: 3c09 movew %a1,%d6
45d10: cdc0 mulsw %d0,%d6
45d12: 9886 subl %d6,%d4
45d14: 2c04 movel %d4,%d6
} else {
unsigned_num = (unsigned long) num;
}
count = 0;
while ((n = unsigned_num / base) > 0) {
45d16: 2800 movel %d0,%d4
toPrint[count++] = (char) (unsigned_num - (n * base));
45d18: 10c6 moveb %d6,%a0@+
45d1a: 2648 moveal %a0,%a3
45d1c: 97c5 subal %d5,%a3
} else {
unsigned_num = (unsigned long) num;
}
count = 0;
while ((n = unsigned_num / base) > 0) {
45d1e: 4a81 tstl %d1
45d20: 671c beqs 45d3e <vprintk+0x1ca>
45d22: 2001 movel %d1,%d0
45d24: 2200 movel %d0,%d1
toPrint[count++] = (char) (unsigned_num - (n * base));
45d26: 3c09 movew %a1,%d6
} else {
unsigned_num = (unsigned long) num;
}
count = 0;
while ((n = unsigned_num / base) > 0) {
45d28: 4c43 1001 remul %d3,%d1,%d1
toPrint[count++] = (char) (unsigned_num - (n * base));
45d2c: cdc0 mulsw %d0,%d6
45d2e: 9886 subl %d6,%d4
45d30: 2c04 movel %d4,%d6
} else {
unsigned_num = (unsigned long) num;
}
count = 0;
while ((n = unsigned_num / base) > 0) {
45d32: 2800 movel %d0,%d4
toPrint[count++] = (char) (unsigned_num - (n * base));
45d34: 10c6 moveb %d6,%a0@+
45d36: 2648 moveal %a0,%a3
45d38: 97c5 subal %d5,%a3
} else {
unsigned_num = (unsigned long) num;
}
count = 0;
while ((n = unsigned_num / base) > 0) {
45d3a: 4a81 tstl %d1
45d3c: 66e4 bnes 45d22 <vprintk+0x1ae>
45d3e: 260b movel %a3,%d3
45d40: 5283 addql #1,%d3
toPrint[count++] = (char) (unsigned_num - (n * base));
unsigned_num = n;
}
toPrint[count++] = (char) unsigned_num;
45d42: 1d80 b8ec moveb %d0,%fp@(ffffffec,%a3:l)
for (n=maxwidth ; n > count; n-- )
45d46: b682 cmpl %d2,%d3
45d48: 6414 bccs 45d5e <vprintk+0x1ea>
BSP_output_char(lead);
45d4a: 2f2e ffe8 movel %fp@(-24),%sp@-
toPrint[count++] = (char) (unsigned_num - (n * base));
unsigned_num = n;
}
toPrint[count++] = (char) unsigned_num;
for (n=maxwidth ; n > count; n-- )
45d4e: 5382 subql #1,%d2
BSP_output_char(lead);
45d50: 2079 0005 cd3c moveal 5cd3c <BSP_output_char>,%a0
45d56: 4e90 jsr %a0@
toPrint[count++] = (char) (unsigned_num - (n * base));
unsigned_num = n;
}
toPrint[count++] = (char) unsigned_num;
for (n=maxwidth ; n > count; n-- )
45d58: 588f addql #4,%sp
45d5a: b682 cmpl %d2,%d3
45d5c: 65ec bcss 45d4a <vprintk+0x1d6>
BSP_output_char(lead);
for (n = 0; n < count; n++) {
45d5e: 4a83 tstl %d3
45d60: 6700 fe48 beqw 45baa <vprintk+0x36>
* console is not yet initialized or in ISR's.
*
* Arguments:
* as in printf: fmt - format string, ... - unnamed arguments.
*/
void vprintk(
45d64: 2645 moveal %d5,%a3
45d66: d7c3 addal %d3,%a3
45d68: 4282 clrl %d2
for (n=maxwidth ; n > count; n-- )
BSP_output_char(lead);
for (n = 0; n < count; n++) {
BSP_output_char("0123456789ABCDEF"[(int)(toPrint[count-(n+1)])]);
45d6a: 2079 0005 cd3c moveal 5cd3c <BSP_output_char>,%a0
toPrint[count++] = (char) unsigned_num;
for (n=maxwidth ; n > count; n-- )
BSP_output_char(lead);
for (n = 0; n < count; n++) {
45d70: 5282 addql #1,%d2
BSP_output_char("0123456789ABCDEF"[(int)(toPrint[count-(n+1)])]);
45d72: 1023 moveb %a3@-,%d0
45d74: 49c0 extbl %d0
45d76: 1034 0800 moveb %a4@(00000000,%d0:l),%d0
45d7a: 49c0 extbl %d0
45d7c: 2f00 movel %d0,%sp@-
45d7e: 4e90 jsr %a0@
toPrint[count++] = (char) unsigned_num;
for (n=maxwidth ; n > count; n-- )
BSP_output_char(lead);
for (n = 0; n < count; n++) {
45d80: 588f addql #4,%sp
45d82: b682 cmpl %d2,%d3
45d84: 6300 fe24 blsw 45baa <vprintk+0x36>
BSP_output_char("0123456789ABCDEF"[(int)(toPrint[count-(n+1)])]);
45d88: 2079 0005 cd3c moveal 5cd3c <BSP_output_char>,%a0
toPrint[count++] = (char) unsigned_num;
for (n=maxwidth ; n > count; n-- )
BSP_output_char(lead);
for (n = 0; n < count; n++) {
45d8e: 5282 addql #1,%d2
BSP_output_char("0123456789ABCDEF"[(int)(toPrint[count-(n+1)])]);
45d90: 1023 moveb %a3@-,%d0
45d92: 49c0 extbl %d0
45d94: 1034 0800 moveb %a4@(00000000,%d0:l),%d0
45d98: 49c0 extbl %d0
45d9a: 2f00 movel %d0,%sp@-
45d9c: 4e90 jsr %a0@
toPrint[count++] = (char) unsigned_num;
for (n=maxwidth ; n > count; n-- )
BSP_output_char(lead);
for (n = 0; n < count; n++) {
45d9e: 588f addql #4,%sp
45da0: b682 cmpl %d2,%d3
45da2: 62c6 bhis 45d6a <vprintk+0x1f6>
45da4: 6000 fe04 braw 45baa <vprintk+0x36>
} else {
BSP_output_char(c);
continue;
}
printNum(
45da8: 49c7 extbl %d7 <== NOT EXECUTED
continue;
}
/* must be a numeric format or something unsupported */
if ( c == 'o' || c == 'O' ) {
base = 8; sign = false;
45daa: 7608 moveq #8,%d3 <== NOT EXECUTED
} else {
BSP_output_char(c);
continue;
}
printNum(
45dac: 2d47 ffe8 movel %d7,%fp@(-24) <== NOT EXECUTED
continue;
}
/* must be a numeric format or something unsupported */
if ( c == 'o' || c == 'O' ) {
base = 8; sign = false;
45db0: 4201 clrb %d1 <== NOT EXECUTED
45db2: 6000 ff38 braw 45cec <vprintk+0x178> <== NOT EXECUTED
lead = '0';
fmt++;
}
if (*fmt == '-' ) {
minus = true;
fmt++;
45db6: 528a addql #1,%a2
}
while (*fmt >= '0' && *fmt <= '9' ) {
45db8: 7c09 moveq #9,%d6
lead = '0';
fmt++;
}
if (*fmt == '-' ) {
minus = true;
fmt++;
45dba: 1012 moveb %a2@,%d0
if (*fmt == '0' ) {
lead = '0';
fmt++;
}
if (*fmt == '-' ) {
minus = true;
45dbc: 7801 moveq #1,%d4
45dbe: 1200 moveb %d0,%d1
fmt++;
}
while (*fmt >= '0' && *fmt <= '9' ) {
45dc0: 0680 ffff ffd0 addil #-48,%d0
45dc6: 0280 0000 00ff andil #255,%d0
45dcc: 49c1 extbl %d1
45dce: bc80 cmpl %d0,%d6
45dd0: 6400 fe18 bccw 45bea <vprintk+0x76>
45dd4: 4282 clrl %d2
width *= 10;
width += ((unsigned) *fmt - '0');
fmt++;
}
if ((c = *fmt) == 'l') {
45dd6: 706c moveq #108,%d0
45dd8: b081 cmpl %d1,%d0
45dda: 6600 fe4e bnew 45c2a <vprintk+0xb6>
45dde: 6000 fed6 braw 45cb6 <vprintk+0x142>
continue;
}
fmt++;
if (*fmt == '0' ) {
lead = '0';
fmt++;
45de2: 528a addql #1,%a2
45de4: 1012 moveb %a2@,%d0
BSP_output_char(*fmt);
continue;
}
fmt++;
if (*fmt == '0' ) {
lead = '0';
45de6: 7e30 moveq #48,%d7
45de8: 1200 moveb %d0,%d1
45dea: 49c1 extbl %d1
45dec: 6000 fdde braw 45bcc <vprintk+0x58>
}
if ( c == 's' ) {
unsigned i, len;
char *s, *str;
str = va_arg(ap, char *);
45df0: 2655 moveal %a5@,%a3
45df2: 588d addql #4,%a5
if ( str == NULL ) {
45df4: 4a8b tstl %a3
45df6: 6700 00e4 beqw 45edc <vprintk+0x368>
str = "";
}
/* calculate length of string */
for ( len=0, s=str ; *s ; len++, s++ )
45dfa: 4a13 tstb %a3@
45dfc: 6700 00ea beqw 45ee8 <vprintk+0x374>
* console is not yet initialized or in ISR's.
*
* Arguments:
* as in printf: fmt - format string, ... - unnamed arguments.
*/
void vprintk(
45e00: 41eb 0001 lea %a3@(1),%a0
if ( str == NULL ) {
str = "";
}
/* calculate length of string */
for ( len=0, s=str ; *s ; len++, s++ )
45e04: 4283 clrl %d3
45e06: 5283 addql #1,%d3
45e08: 4a18 tstb %a0@+
45e0a: 66fa bnes 45e06 <vprintk+0x292>
;
/* leading spaces */
if ( !minus )
45e0c: 4a04 tstb %d4
45e0e: 661a bnes 45e2a <vprintk+0x2b6>
for ( i=len ; i<width ; i++ )
45e10: b483 cmpl %d3,%d2
45e12: 6316 blss 45e2a <vprintk+0x2b6> <== ALWAYS TAKEN
45e14: 2c03 movel %d3,%d6 <== NOT EXECUTED
BSP_output_char(' ');
45e16: 4878 0020 pea 20 <OPER2+0xc> <== NOT EXECUTED
for ( len=0, s=str ; *s ; len++, s++ )
;
/* leading spaces */
if ( !minus )
for ( i=len ; i<width ; i++ )
45e1a: 5286 addql #1,%d6 <== NOT EXECUTED
BSP_output_char(' ');
45e1c: 2079 0005 cd3c moveal 5cd3c <BSP_output_char>,%a0 <== NOT EXECUTED
45e22: 4e90 jsr %a0@ <== NOT EXECUTED
for ( len=0, s=str ; *s ; len++, s++ )
;
/* leading spaces */
if ( !minus )
for ( i=len ; i<width ; i++ )
45e24: 588f addql #4,%sp <== NOT EXECUTED
45e26: b486 cmpl %d6,%d2 <== NOT EXECUTED
45e28: 62ec bhis 45e16 <vprintk+0x2a2> <== NOT EXECUTED
BSP_output_char(' ');
/* no width option */
if (width == 0) {
45e2a: 4a82 tstl %d2
45e2c: 6606 bnes 45e34 <vprintk+0x2c0>
width = len;
}
/* output the string */
for ( i=0 ; i<width && *str ; str++ )
45e2e: 4a83 tstl %d3
45e30: 672c beqs 45e5e <vprintk+0x2ea>
45e32: 2403 movel %d3,%d2
45e34: 1013 moveb %a3@,%d0
45e36: 6726 beqs 45e5e <vprintk+0x2ea> <== NEVER TAKEN
BSP_output_char(*str);
45e38: 49c0 extbl %d0
* console is not yet initialized or in ISR's.
*
* Arguments:
* as in printf: fmt - format string, ... - unnamed arguments.
*/
void vprintk(
45e3a: 528b addql #1,%a3
width = len;
}
/* output the string */
for ( i=0 ; i<width && *str ; str++ )
BSP_output_char(*str);
45e3c: 2f00 movel %d0,%sp@-
45e3e: 2079 0005 cd3c moveal 5cd3c <BSP_output_char>,%a0
45e44: 4e90 jsr %a0@
45e46: 588f addql #4,%sp
if (width == 0) {
width = len;
}
/* output the string */
for ( i=0 ; i<width && *str ; str++ )
45e48: 101b moveb %a3@+,%d0
45e4a: 6712 beqs 45e5e <vprintk+0x2ea>
BSP_output_char(*str);
45e4c: 49c0 extbl %d0
45e4e: 2079 0005 cd3c moveal 5cd3c <BSP_output_char>,%a0
45e54: 2f00 movel %d0,%sp@-
45e56: 4e90 jsr %a0@
45e58: 588f addql #4,%sp
if (width == 0) {
width = len;
}
/* output the string */
for ( i=0 ; i<width && *str ; str++ )
45e5a: 101b moveb %a3@+,%d0
45e5c: 66ee bnes 45e4c <vprintk+0x2d8>
BSP_output_char(*str);
/* trailing spaces */
if ( minus )
45e5e: 4a04 tstb %d4
45e60: 6700 fd48 beqw 45baa <vprintk+0x36>
for ( i=len ; i<width ; i++ )
45e64: b483 cmpl %d3,%d2
45e66: 6300 fd42 blsw 45baa <vprintk+0x36>
BSP_output_char(' ');
45e6a: 4878 0020 pea 20 <OPER2+0xc>
for ( i=0 ; i<width && *str ; str++ )
BSP_output_char(*str);
/* trailing spaces */
if ( minus )
for ( i=len ; i<width ; i++ )
45e6e: 5283 addql #1,%d3
BSP_output_char(' ');
45e70: 2079 0005 cd3c moveal 5cd3c <BSP_output_char>,%a0
45e76: 4e90 jsr %a0@
for ( i=0 ; i<width && *str ; str++ )
BSP_output_char(*str);
/* trailing spaces */
if ( minus )
for ( i=len ; i<width ; i++ )
45e78: 588f addql #4,%sp
45e7a: b483 cmpl %d3,%d2
45e7c: 6300 fd2c blsw 45baa <vprintk+0x36>
BSP_output_char(' ');
45e80: 4878 0020 pea 20 <OPER2+0xc>
for ( i=0 ; i<width && *str ; str++ )
BSP_output_char(*str);
/* trailing spaces */
if ( minus )
for ( i=len ; i<width ; i++ )
45e84: 5283 addql #1,%d3
BSP_output_char(' ');
45e86: 2079 0005 cd3c moveal 5cd3c <BSP_output_char>,%a0
45e8c: 4e90 jsr %a0@
for ( i=0 ; i<width && *str ; str++ )
BSP_output_char(*str);
/* trailing spaces */
if ( minus )
for ( i=len ; i<width ; i++ )
45e8e: 588f addql #4,%sp
45e90: b483 cmpl %d3,%d2
45e92: 62d6 bhis 45e6a <vprintk+0x2f6>
45e94: 6000 fd14 braw 45baa <vprintk+0x36>
unsigned long n;
unsigned count;
char toPrint[20];
if ( sign && (num < 0) ) {
BSP_output_char('-');
45e98: 4878 002d pea 2d <OPER2+0x19> <== NOT EXECUTED
unsigned_num = (unsigned long) -num;
45e9c: 4484 negl %d4 <== NOT EXECUTED
unsigned long n;
unsigned count;
char toPrint[20];
if ( sign && (num < 0) ) {
BSP_output_char('-');
45e9e: 2079 0005 cd3c moveal 5cd3c <BSP_output_char>,%a0 <== NOT EXECUTED
45ea4: 4e90 jsr %a0@ <== NOT EXECUTED
unsigned_num = (unsigned long) -num;
if (maxwidth) maxwidth--;
45ea6: 588f addql #4,%sp <== NOT EXECUTED
45ea8: 4a82 tstl %d2 <== NOT EXECUTED
45eaa: 6700 fe4e beqw 45cfa <vprintk+0x186> <== NOT EXECUTED
} else {
unsigned_num = (unsigned long) num;
}
count = 0;
while ((n = unsigned_num / base) > 0) {
45eae: 2004 movel %d4,%d0 <== NOT EXECUTED
char toPrint[20];
if ( sign && (num < 0) ) {
BSP_output_char('-');
unsigned_num = (unsigned long) -num;
if (maxwidth) maxwidth--;
45eb0: 5382 subql #1,%d2 <== NOT EXECUTED
} else {
unsigned_num = (unsigned long) num;
}
count = 0;
while ((n = unsigned_num / base) > 0) {
45eb2: 4c43 0000 remul %d3,%d0,%d0 <== NOT EXECUTED
45eb6: 6600 fe4c bnew 45d04 <vprintk+0x190> <== NOT EXECUTED
45eba: 2004 movel %d4,%d0
if (maxwidth) maxwidth--;
} else {
unsigned_num = (unsigned long) num;
}
count = 0;
45ebc: 97cb subal %a3,%a3
while ((n = unsigned_num / base) > 0) {
45ebe: 7601 moveq #1,%d3
toPrint[count++] = (char) (unsigned_num - (n * base));
unsigned_num = n;
}
toPrint[count++] = (char) unsigned_num;
45ec0: 1d80 b8ec moveb %d0,%fp@(ffffffec,%a3:l)
for (n=maxwidth ; n > count; n-- )
45ec4: b682 cmpl %d2,%d3
45ec6: 6500 fe82 bcsw 45d4a <vprintk+0x1d6>
45eca: 6000 fe92 braw 45d5e <vprintk+0x1ea>
} else {
BSP_output_char(c);
continue;
}
printNum(
45ece: 49c7 extbl %d7
base = 8; sign = false;
} else if ( c == 'i' || c == 'I' ||
c == 'd' || c == 'D' ) {
base = 10; sign = true;
} else if ( c == 'u' || c == 'U' ) {
base = 10; sign = false;
45ed0: 760a moveq #10,%d3
} else {
BSP_output_char(c);
continue;
}
printNum(
45ed2: 2d47 ffe8 movel %d7,%fp@(-24)
base = 8; sign = false;
} else if ( c == 'i' || c == 'I' ||
c == 'd' || c == 'D' ) {
base = 10; sign = true;
} else if ( c == 'u' || c == 'U' ) {
base = 10; sign = false;
45ed6: 4201 clrb %d1
45ed8: 6000 fe12 braw 45cec <vprintk+0x178>
char *s, *str;
str = va_arg(ap, char *);
if ( str == NULL ) {
str = "";
45edc: 47f9 0005 bf34 lea 5bf34 <rtems_filesystem_default_pathconf+0x40>,%a3
}
/* calculate length of string */
for ( len=0, s=str ; *s ; len++, s++ )
45ee2: 4a13 tstb %a3@
45ee4: 6600 ff1a bnew 45e00 <vprintk+0x28c>
45ee8: 4283 clrl %d3
45eea: 6000 ff20 braw 45e0c <vprintk+0x298>
} else {
BSP_output_char(c);
continue;
}
printNum(
45eee: 49c7 extbl %d7
c == 'd' || c == 'D' ) {
base = 10; sign = true;
} else if ( c == 'u' || c == 'U' ) {
base = 10; sign = false;
} else if ( c == 'x' || c == 'X' ) {
base = 16; sign = false;
45ef0: 7610 moveq #16,%d3
} else {
BSP_output_char(c);
continue;
}
printNum(
45ef2: 2d47 ffe8 movel %d7,%fp@(-24)
c == 'd' || c == 'D' ) {
base = 10; sign = true;
} else if ( c == 'u' || c == 'U' ) {
base = 10; sign = false;
} else if ( c == 'x' || c == 'X' ) {
base = 16; sign = false;
45ef6: 4201 clrb %d1
45ef8: 6000 fdf2 braw 45cec <vprintk+0x178>
} else {
BSP_output_char(c);
continue;
}
printNum(
45efc: 49c7 extbl %d7
} else if ( c == 'u' || c == 'U' ) {
base = 10; sign = false;
} else if ( c == 'x' || c == 'X' ) {
base = 16; sign = false;
} else if ( c == 'p' ) {
base = 16; sign = false; lflag = true;
45efe: 7610 moveq #16,%d3
} else {
BSP_output_char(c);
continue;
}
printNum(
45f00: 2d47 ffe8 movel %d7,%fp@(-24)
} else if ( c == 'u' || c == 'U' ) {
base = 10; sign = false;
} else if ( c == 'x' || c == 'X' ) {
base = 16; sign = false;
} else if ( c == 'p' ) {
base = 16; sign = false; lflag = true;
45f04: 4201 clrb %d1
45f06: 6000 fde4 braw 45cec <vprintk+0x178>
...
0005b0b8 <write>:
ssize_t write(
int fd,
const void *buffer,
size_t count
)
{
5b0b8: 4e56 fff4 linkw %fp,#-12
5b0bc: 202e 0008 movel %fp@(8),%d0
5b0c0: 222e 000c movel %fp@(12),%d1
5b0c4: 206e 0010 moveal %fp@(16),%a0
5b0c8: 48d7 040c moveml %d2-%d3/%a2,%sp@
ssize_t rc;
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
5b0cc: b0b9 0005 cc44 cmpl 5cc44 <rtems_libio_number_iops>,%d0
5b0d2: 6468 bccs 5b13c <write+0x84>
iop = rtems_libio_iop( fd );
5b0d4: 2400 movel %d0,%d2
5b0d6: ed88 lsll #6,%d0
5b0d8: e78a lsll #3,%d2
5b0da: 2479 0005 e2c8 moveal 5e2c8 <rtems_libio_iops>,%a2
5b0e0: 9082 subl %d2,%d0
5b0e2: d5c0 addal %d0,%a2
rtems_libio_check_is_open( iop );
5b0e4: 202a 0014 movel %a2@(20),%d0
5b0e8: 0800 0008 btst #8,%d0
5b0ec: 674e beqs 5b13c <write+0x84>
rtems_libio_check_buffer( buffer );
5b0ee: 4a81 tstl %d1
5b0f0: 6762 beqs 5b154 <write+0x9c> <== NEVER TAKEN
rtems_libio_check_count( count );
5b0f2: 4a88 tstl %a0
5b0f4: 673a beqs 5b130 <write+0x78>
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
5b0f6: 44c0 movew %d0,%ccr
5b0f8: 665a bnes 5b154 <write+0x9c> <== NEVER TAKEN
return 0;
/*
* Now process the write() request.
*/
rc = (*iop->pathinfo.handlers->write_h)( iop, buffer, count );
5b0fa: 226a 0020 moveal %a2@(32),%a1
5b0fe: 2f08 movel %a0,%sp@-
5b100: 2f01 movel %d1,%sp@-
5b102: 2f0a movel %a2,%sp@-
5b104: 2069 000c moveal %a1@(12),%a0
5b108: 4e90 jsr %a0@
if ( rc > 0 )
5b10a: 4fef 000c lea %sp@(12),%sp
5b10e: 4a80 tstl %d0
5b110: 6f14 bles 5b126 <write+0x6e>
iop->offset += rc;
5b112: 2400 movel %d0,%d2
5b114: 5bc1 smi %d1
5b116: 49c1 extbl %d1
5b118: d5aa 0010 addl %d2,%a2@(16)
5b11c: 262a 000c movel %a2@(12),%d3
5b120: d781 addxl %d1,%d3
5b122: 2543 000c movel %d3,%a2@(12)
return rc;
}
5b126: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
5b12c: 4e5e unlk %fp
5b12e: 4e75 rts
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 );
5b130: 4280 clrl %d0
if ( rc > 0 )
iop->offset += rc;
return rc;
}
5b132: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
5b138: 4e5e unlk %fp
5b13a: 4e75 rts
ssize_t rc;
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open( iop );
5b13c: 4eb9 0004 da6c jsr 4da6c <__errno>
5b142: 7409 moveq #9,%d2
5b144: 2040 moveal %d0,%a0
5b146: 70ff moveq #-1,%d0
5b148: 2082 movel %d2,%a0@
if ( rc > 0 )
iop->offset += rc;
return rc;
}
5b14a: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
5b150: 4e5e unlk %fp
5b152: 4e75 rts
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 );
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
5b154: 4eb9 0004 da6c jsr 4da6c <__errno> <== NOT EXECUTED
5b15a: 7216 moveq #22,%d1 <== NOT EXECUTED
5b15c: 2040 moveal %d0,%a0 <== NOT EXECUTED
5b15e: 70ff moveq #-1,%d0 <== NOT EXECUTED
if ( rc > 0 )
iop->offset += rc;
return rc;
}
5b160: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2 <== NOT EXECUTED
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 );
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
5b166: 2081 movel %d1,%a0@ <== NOT EXECUTED
if ( rc > 0 )
iop->offset += rc;
return rc;
}
5b168: 4e5e unlk %fp <== NOT EXECUTED
0004736c <writev>:
ssize_t writev(
int fd,
const struct iovec *iov,
int iovcnt
)
{
4736c: 4e56 ffe4 linkw %fp,#-28
47370: 202e 0008 movel %fp@(8),%d0
47374: 48d7 0c7c moveml %d2-%d6/%a2-%a3,%sp@
47378: 246e 000c moveal %fp@(12),%a2
4737c: 242e 0010 movel %fp@(16),%d2
int bytes;
rtems_libio_t *iop;
ssize_t old;
bool all_zeros;
rtems_libio_check_fd( fd );
47380: b0b9 0005 da04 cmpl 5da04 <rtems_libio_number_iops>,%d0
47386: 6400 00e8 bccw 47470 <writev+0x104>
iop = rtems_libio_iop( fd );
4738a: 2200 movel %d0,%d1
4738c: ed88 lsll #6,%d0
4738e: e789 lsll #3,%d1
47390: 2679 0005 f088 moveal 5f088 <rtems_libio_iops>,%a3
47396: 9081 subl %d1,%d0
47398: d7c0 addal %d0,%a3
rtems_libio_check_is_open( iop );
4739a: 202b 0014 movel %a3@(20),%d0
4739e: 0800 0008 btst #8,%d0
473a2: 6700 00cc beqw 47470 <writev+0x104>
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
473a6: 44c0 movew %d0,%ccr
473a8: 6640 bnes 473ea <writev+0x7e> <== NEVER TAKEN
/*
* Argument validation on IO vector
*/
if ( !iov )
473aa: 4a8a tstl %a2
473ac: 673c beqs 473ea <writev+0x7e>
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iovcnt <= 0 )
473ae: 4a82 tstl %d2
473b0: 6f38 bles 473ea <writev+0x7e>
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iovcnt > IOV_MAX )
473b2: 0c82 0000 0400 cmpil #1024,%d2
473b8: 6e30 bgts 473ea <writev+0x7e> <== NEVER TAKEN
rtems_set_errno_and_return_minus_one( EINVAL );
473ba: 204a moveal %a2,%a0
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iovcnt <= 0 )
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iovcnt > IOV_MAX )
473bc: 4281 clrl %d1
473be: 93c9 subal %a1,%a1
473c0: 7601 moveq #1,%d3
* entering the write loop.
*/
all_zeros = true;
for ( old=0, total=0, v=0 ; v < iovcnt ; v++ ) {
if ( !iov[v].iov_base )
473c2: 4a90 tstl %a0@
473c4: 6724 beqs 473ea <writev+0x7e> <== NEVER TAKEN
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iov[v].iov_len < 0 )
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iov[v].iov_len )
473c6: 2028 0004 movel %a0@(4),%d0
all_zeros = false;
473ca: 57c4 seq %d4
/* check for wrap */
old = total;
total += iov[v].iov_len;
473cc: d089 addl %a1,%d0
* 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++ ) {
473ce: 5281 addql #1,%d1
473d0: 5088 addql #8,%a0
if ( iov[v].iov_len < 0 )
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iov[v].iov_len )
all_zeros = false;
473d2: c684 andl %d4,%d3
/* check for wrap */
old = total;
total += iov[v].iov_len;
if ( total < old || total > SSIZE_MAX )
473d4: b3c0 cmpal %d0,%a1
473d6: 6e12 bgts 473ea <writev+0x7e>
473d8: 0c80 0000 7fff cmpil #32767,%d0
473de: 6e0a bgts 473ea <writev+0x7e> <== NEVER TAKEN
* 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++ ) {
473e0: b282 cmpl %d2,%d1
473e2: 6c20 bges 47404 <writev+0x98>
473e4: 2240 moveal %d0,%a1
if ( !iov[v].iov_base )
473e6: 4a90 tstl %a0@
473e8: 66dc bnes 473c6 <writev+0x5a>
/* check for wrap */
old = total;
total += iov[v].iov_len;
if ( total < old || total > SSIZE_MAX )
rtems_set_errno_and_return_minus_one( EINVAL );
473ea: 4eb9 0004 eaf8 jsr 4eaf8 <__errno>
473f0: 78ff moveq #-1,%d4
473f2: 2040 moveal %d0,%a0
473f4: 7016 moveq #22,%d0
473f6: 2080 movel %d0,%a0@
if (bytes != iov[ v ].iov_len)
break;
}
return total;
}
473f8: 2004 movel %d4,%d0
473fa: 4cee 0c7c ffe4 moveml %fp@(-28),%d2-%d6/%a2-%a3
47400: 4e5e unlk %fp
47402: 4e75 rts
}
/*
* A writev with all zeros is supposed to have no effect per OpenGroup.
*/
if ( all_zeros == true ) {
47404: 4a03 tstb %d3
47406: 661c bnes 47424 <writev+0xb8>
#include <sys/uio.h>
#include <rtems/libio_.h>
#include <rtems/seterr.h>
ssize_t writev(
47408: 588a addql #4,%a2
4740a: 4283 clrl %d3
4740c: 4284 clrl %d4
}
/*
* Now process the writev().
*/
for ( total=0, v=0 ; v < iovcnt ; v++ ) {
4740e: 5283 addql #1,%d3
/* all zero lengths has no effect */
if ( iov[v].iov_len == 0 )
47410: 2012 movel %a2@,%d0
47412: 661e bnes 47432 <writev+0xc6> <== ALWAYS TAKEN
}
/*
* Now process the writev().
*/
for ( total=0, v=0 ; v < iovcnt ; v++ ) {
47414: 508a addql #8,%a2 <== NOT EXECUTED
47416: b682 cmpl %d2,%d3 <== NOT EXECUTED
47418: 6cde bges 473f8 <writev+0x8c> <== NOT EXECUTED
/* all zero lengths has no effect */
if ( iov[v].iov_len == 0 )
4741a: 2012 movel %a2@,%d0
}
/*
* Now process the writev().
*/
for ( total=0, v=0 ; v < iovcnt ; v++ ) {
4741c: 5283 addql #1,%d3
/* all zero lengths has no effect */
if ( iov[v].iov_len == 0 )
4741e: 4a80 tstl %d0
47420: 67f2 beqs 47414 <writev+0xa8> <== NEVER TAKEN
47422: 600e bras 47432 <writev+0xc6>
/*
* A writev with all zeros is supposed to have no effect per OpenGroup.
*/
if ( all_zeros == true ) {
return 0;
47424: 4284 clrl %d4
if (bytes != iov[ v ].iov_len)
break;
}
return total;
}
47426: 2004 movel %d4,%d0
47428: 4cee 0c7c ffe4 moveml %fp@(-28),%d2-%d6/%a2-%a3
4742e: 4e5e unlk %fp
47430: 4e75 rts
for ( total=0, v=0 ; v < iovcnt ; v++ ) {
/* all zero lengths has no effect */
if ( iov[v].iov_len == 0 )
continue;
bytes = (*iop->pathinfo.handlers->write_h)(
47432: 206b 0020 moveal %a3@(32),%a0
47436: 2f00 movel %d0,%sp@-
47438: 2f2a fffc movel %a2@(-4),%sp@-
4743c: 2f0b movel %a3,%sp@-
4743e: 2068 000c moveal %a0@(12),%a0
47442: 4e90 jsr %a0@
iop,
iov[v].iov_base,
iov[v].iov_len
);
if ( bytes < 0 )
47444: 4fef 000c lea %sp@(12),%sp
47448: 4a80 tstl %d0
4744a: 6d3e blts 4748a <writev+0x11e> <== NEVER TAKEN
return -1;
if ( bytes > 0 ) {
4744c: 6716 beqs 47464 <writev+0xf8> <== NEVER TAKEN
iop->offset += bytes;
total += bytes;
4744e: d880 addl %d0,%d4
if ( bytes < 0 )
return -1;
if ( bytes > 0 ) {
iop->offset += bytes;
47450: 2c00 movel %d0,%d6
47452: 5bc5 smi %d5
47454: 49c5 extbl %d5
47456: ddab 0010 addl %d6,%a3@(16)
4745a: 222b 000c movel %a3@(12),%d1
4745e: d385 addxl %d5,%d1
47460: 2741 000c movel %d1,%a3@(12)
total += bytes;
}
if (bytes != iov[ v ].iov_len)
47464: b092 cmpl %a2@,%d0
47466: 6690 bnes 473f8 <writev+0x8c> <== NEVER TAKEN
}
/*
* Now process the writev().
*/
for ( total=0, v=0 ; v < iovcnt ; v++ ) {
47468: 508a addql #8,%a2
4746a: b682 cmpl %d2,%d3
4746c: 6dac blts 4741a <writev+0xae>
4746e: 6088 bras 473f8 <writev+0x8c>
ssize_t old;
bool all_zeros;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open( iop );
47470: 4eb9 0004 eaf8 jsr 4eaf8 <__errno>
47476: 78ff moveq #-1,%d4
47478: 7209 moveq #9,%d1
4747a: 2040 moveal %d0,%a0
if (bytes != iov[ v ].iov_len)
break;
}
return total;
}
4747c: 2004 movel %d4,%d0
4747e: 4cee 0c7c ffe4 moveml %fp@(-28),%d2-%d6/%a2-%a3
ssize_t old;
bool all_zeros;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open( iop );
47484: 2081 movel %d1,%a0@
if (bytes != iov[ v ].iov_len)
break;
}
return total;
}
47486: 4e5e unlk %fp
47488: 4e75 rts
iov[v].iov_base,
iov[v].iov_len
);
if ( bytes < 0 )
return -1;
4748a: 78ff moveq #-1,%d4 <== NOT EXECUTED
if (bytes != iov[ v ].iov_len)
break;
}
return total;
}
4748c: 2004 movel %d4,%d0 <== NOT EXECUTED
4748e: 4cee 0c7c ffe4 moveml %fp@(-28),%d2-%d6/%a2-%a3 <== NOT EXECUTED
47494: 4e5e unlk %fp <== NOT EXECUTED