RTEMS 4.11
Annotated Report
Sat Nov 27 22:31:18 2010

a0014b20 <_CORE_message_queue_Broadcast>:                             
{                                                                     
  Thread_Control          *the_thread;                                
  uint32_t                 number_broadcasted;                        
  Thread_Wait_information *waitp;                                     
                                                                      
  if ( size > the_message_queue->maximum_message_size ) {             
a0014b20:	e590304c 	ldr	r3, [r0, #76]	; 0x4c                          
    Objects_Id                                 id __attribute__((unused)),
    CORE_message_queue_API_mp_support_callout  api_message_queue_mp_support __attribute__((unused)),
  #endif                                                              
  uint32_t                                  *count                    
)                                                                     
{                                                                     
a0014b24:	e92d45f0 	push	{r4, r5, r6, r7, r8, sl, lr}                 
  Thread_Control          *the_thread;                                
  uint32_t                 number_broadcasted;                        
  Thread_Wait_information *waitp;                                     
                                                                      
  if ( size > the_message_queue->maximum_message_size ) {             
a0014b28:	e1520003 	cmp	r2, r3                                        
    Objects_Id                                 id __attribute__((unused)),
    CORE_message_queue_API_mp_support_callout  api_message_queue_mp_support __attribute__((unused)),
  #endif                                                              
  uint32_t                                  *count                    
)                                                                     
{                                                                     
a0014b2c:	e1a06000 	mov	r6, r0                                        
a0014b30:	e1a0a001 	mov	sl, r1                                        
a0014b34:	e1a07002 	mov	r7, r2                                        
a0014b38:	e59d8020 	ldr	r8, [sp, #32]                                 
  Thread_Control          *the_thread;                                
  uint32_t                 number_broadcasted;                        
  Thread_Wait_information *waitp;                                     
                                                                      
  if ( size > the_message_queue->maximum_message_size ) {             
a0014b3c:	8a000013 	bhi	a0014b90 <_CORE_message_queue_Broadcast+0x70> 
   *  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 ) {         
a0014b40:	e5905048 	ldr	r5, [r0, #72]	; 0x48                          
a0014b44:	e3550000 	cmp	r5, #0                                        
a0014b48:	0a000009 	beq	a0014b74 <_CORE_message_queue_Broadcast+0x54> 
    *count = 0;                                                       
a0014b4c:	e3a00000 	mov	r0, #0                                        
a0014b50:	e5880000 	str	r0, [r8]                                      
    return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;                      
a0014b54:	e8bd85f0 	pop	{r4, r5, r6, r7, r8, sl, pc}                  
  const void *source,                                                 
  void       *destination,                                            
  size_t      size                                                    
)                                                                     
{                                                                     
  memcpy(destination, source, size);                                  
a0014b58:	e594002c 	ldr	r0, [r4, #44]	; 0x2c                          
a0014b5c:	e1a0100a 	mov	r1, sl                                        
a0014b60:	e1a02007 	mov	r2, r7                                        
a0014b64:	eb001e66 	bl	a001c504 <memcpy>                              
      buffer,                                                         
      waitp->return_argument_second.mutable_object,                   
      size                                                            
    );                                                                
                                                                      
    *(size_t *) the_thread->Wait.return_argument = size;              
a0014b68:	e5943028 	ldr	r3, [r4, #40]	; 0x28                          
   */                                                                 
  number_broadcasted = 0;                                             
  while ((the_thread =                                                
          _Thread_queue_Dequeue(&the_message_queue->Wait_queue))) {   
    waitp = &the_thread->Wait;                                        
    number_broadcasted += 1;                                          
a0014b6c:	e2855001 	add	r5, r5, #1                                    
      buffer,                                                         
      waitp->return_argument_second.mutable_object,                   
      size                                                            
    );                                                                
                                                                      
    *(size_t *) the_thread->Wait.return_argument = size;              
a0014b70:	e5837000 	str	r7, [r3]                                      
  /*                                                                  
   *  There must be no pending messages if there is a thread waiting to
   *  receive a message.                                              
   */                                                                 
  number_broadcasted = 0;                                             
  while ((the_thread =                                                
a0014b74:	e1a00006 	mov	r0, r6                                        
a0014b78:	eb000a5c 	bl	a00174f0 <_Thread_queue_Dequeue>               
a0014b7c:	e2504000 	subs	r4, r0, #0                                   
a0014b80:	1afffff4 	bne	a0014b58 <_CORE_message_queue_Broadcast+0x38> 
      if ( !_Objects_Is_local_id( the_thread->Object.id ) )           
        (*api_message_queue_mp_support) ( the_thread, id );           
    #endif                                                            
                                                                      
  }                                                                   
  *count = number_broadcasted;                                        
a0014b84:	e5885000 	str	r5, [r8]                                      
  return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;                        
a0014b88:	e1a00004 	mov	r0, r4                                        
a0014b8c:	e8bd85f0 	pop	{r4, r5, r6, r7, r8, sl, pc}                  
  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;                    
a0014b90:	e3a00001 	mov	r0, #1                                        <== NOT EXECUTED
    #endif                                                            
                                                                      
  }                                                                   
  *count = number_broadcasted;                                        
  return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;                        
}                                                                     
a0014b94:	e8bd85f0 	pop	{r4, r5, r6, r7, r8, sl, pc}                  <== NOT EXECUTED
                                                                      

a000dbec <_CORE_message_queue_Initialize>: 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 ) {
a000dbec:	e92d40f0 	push	{r4, r5, r6, r7, lr}                         
  /*                                                                  
   *  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)) {              
a000dbf0:	e3130003 	tst	r3, #3                                        
  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                 
)                                                                     
{                                                                     
a000dbf4:	e1a04000 	mov	r4, r0                                        
  size_t message_buffering_required;                                  
  size_t allocated_message_size;                                      
                                                                      
  the_message_queue->maximum_pending_messages   = maximum_pending_messages;
  the_message_queue->number_of_pending_messages = 0;                  
a000dbf8:	e3a00000 	mov	r0, #0                                        
  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                 
)                                                                     
{                                                                     
a000dbfc:	e1a06002 	mov	r6, r2                                        
  size_t message_buffering_required;                                  
  size_t allocated_message_size;                                      
                                                                      
  the_message_queue->maximum_pending_messages   = maximum_pending_messages;
a000dc00:	e5842044 	str	r2, [r4, #68]	; 0x44                          
  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                 
)                                                                     
{                                                                     
a000dc04:	e1a05001 	mov	r5, r1                                        
  size_t message_buffering_required;                                  
  size_t allocated_message_size;                                      
                                                                      
  the_message_queue->maximum_pending_messages   = maximum_pending_messages;
  the_message_queue->number_of_pending_messages = 0;                  
a000dc08:	e5840048 	str	r0, [r4, #72]	; 0x48                          
  the_message_queue->maximum_message_size       = maximum_message_size;
a000dc0c:	e584304c 	str	r3, [r4, #76]	; 0x4c                          
  /*                                                                  
   *  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)) {              
a000dc10:	01a02003 	moveq	r2, r3                                      
a000dc14:	0a000003 	beq	a000dc28 <_CORE_message_queue_Initialize+0x3c>
    allocated_message_size += sizeof(uint32_t);                       
a000dc18:	e2832004 	add	r2, r3, #4                                    
    allocated_message_size &= ~(sizeof(uint32_t) - 1);                
a000dc1c:	e3c22003 	bic	r2, r2, #3                                    
  }                                                                   
                                                                      
  if (allocated_message_size < maximum_message_size)                  
a000dc20:	e1520003 	cmp	r2, r3                                        
a000dc24:	3a00001e 	bcc	a000dca4 <_CORE_message_queue_Initialize+0xb8>
  /*                                                                  
   *  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));
a000dc28:	e2827010 	add	r7, r2, #16                                   
                                                                      
  /*                                                                  
   *  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 *    
a000dc2c:	e0000796 	mul	r0, r6, r7                                    
       (allocated_message_size + sizeof(CORE_message_queue_Buffer_control));
                                                                      
  if (message_buffering_required < allocated_message_size)            
a000dc30:	e1500002 	cmp	r0, r2                                        
a000dc34:	3a000018 	bcc	a000dc9c <_CORE_message_queue_Initialize+0xb0>
                                                                      
  /*                                                                  
   *  Attempt to allocate the message memory                          
   */                                                                 
  the_message_queue->message_buffers = (CORE_message_queue_Buffer *)  
     _Workspace_Allocate( message_buffering_required );               
a000dc38:	eb000b02 	bl	a0010848 <_Workspace_Allocate>                 
                                                                      
  if (the_message_queue->message_buffers == 0)                        
a000dc3c:	e3500000 	cmp	r0, #0                                        
                                                                      
  /*                                                                  
   *  Attempt to allocate the message memory                          
   */                                                                 
  the_message_queue->message_buffers = (CORE_message_queue_Buffer *)  
     _Workspace_Allocate( message_buffering_required );               
a000dc40:	e1a01000 	mov	r1, r0                                        
    return false;                                                     
                                                                      
  /*                                                                  
   *  Attempt to allocate the message memory                          
   */                                                                 
  the_message_queue->message_buffers = (CORE_message_queue_Buffer *)  
a000dc44:	e584005c 	str	r0, [r4, #92]	; 0x5c                          
     _Workspace_Allocate( message_buffering_required );               
                                                                      
  if (the_message_queue->message_buffers == 0)                        
a000dc48:	0a000015 	beq	a000dca4 <_CORE_message_queue_Initialize+0xb8>
                                                                      
  /*                                                                  
   *  Initialize the pool of inactive messages, pending messages,     
   *  and set of waiting threads.                                     
   */                                                                 
  _Chain_Initialize (                                                 
a000dc4c:	e2840060 	add	r0, r4, #96	; 0x60                            
a000dc50:	e1a02006 	mov	r2, r6                                        
a000dc54:	e1a03007 	mov	r3, r7                                        
a000dc58:	eb00123f 	bl	a001255c <_Chain_Initialize>                   
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(                    
  Chain_Control *the_chain                                            
)                                                                     
{                                                                     
  Chain_Node *head = _Chain_Head( the_chain );                        
  Chain_Node *tail = _Chain_Tail( the_chain );                        
a000dc5c:	e2843054 	add	r3, r4, #84	; 0x54                            
                                                                      
  head->next = tail;                                                  
a000dc60:	e5843050 	str	r3, [r4, #80]	; 0x50                          
  head->previous = NULL;                                              
a000dc64:	e3a03000 	mov	r3, #0                                        
a000dc68:	e5843054 	str	r3, [r4, #84]	; 0x54                          
 */                                                                   
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(                    
  Chain_Control *the_chain                                            
)                                                                     
{                                                                     
  Chain_Node *head = _Chain_Head( the_chain );                        
a000dc6c:	e2843050 	add	r3, r4, #80	; 0x50                            
  Chain_Node *tail = _Chain_Tail( the_chain );                        
                                                                      
  head->next = tail;                                                  
  head->previous = NULL;                                              
  tail->previous = head;                                              
a000dc70:	e5843058 	str	r3, [r4, #88]	; 0x58                          
    allocated_message_size + sizeof( CORE_message_queue_Buffer_control )
  );                                                                  
                                                                      
  _Chain_Initialize_empty( &the_message_queue->Pending_messages );    
                                                                      
  _Thread_queue_Initialize(                                           
a000dc74:	e5951000 	ldr	r1, [r5]                                      
a000dc78:	e1a00004 	mov	r0, r4                                        
a000dc7c:	e3a02080 	mov	r2, #128	; 0x80                               
a000dc80:	e3510001 	cmp	r1, #1                                        
a000dc84:	13a01000 	movne	r1, #0                                      
a000dc88:	03a01001 	moveq	r1, #1                                      
a000dc8c:	e3a03006 	mov	r3, #6                                        
a000dc90:	eb000889 	bl	a000febc <_Thread_queue_Initialize>            
       THREAD_QUEUE_DISCIPLINE_PRIORITY : THREAD_QUEUE_DISCIPLINE_FIFO,
    STATES_WAITING_FOR_MESSAGE,                                       
    CORE_MESSAGE_QUEUE_STATUS_TIMEOUT                                 
  );                                                                  
                                                                      
  return true;                                                        
a000dc94:	e3a00001 	mov	r0, #1                                        
a000dc98:	e8bd80f0 	pop	{r4, r5, r6, r7, pc}                          
   */                                                                 
  message_buffering_required = (size_t) maximum_pending_messages *    
       (allocated_message_size + sizeof(CORE_message_queue_Buffer_control));
                                                                      
  if (message_buffering_required < allocated_message_size)            
    return false;                                                     
a000dc9c:	e3a00000 	mov	r0, #0                                        <== NOT EXECUTED
a000dca0:	e8bd80f0 	pop	{r4, r5, r6, r7, pc}                          <== NOT EXECUTED
    STATES_WAITING_FOR_MESSAGE,                                       
    CORE_MESSAGE_QUEUE_STATUS_TIMEOUT                                 
  );                                                                  
                                                                      
  return true;                                                        
}                                                                     
a000dca4:	e8bd80f0 	pop	{r4, r5, r6, r7, pc}                          
                                                                      

a0009e88 <_CORE_mutex_Seize_interrupt_trylock>: { Thread_Control *executing; /* disabled when you get here */ executing = _Thread_Executing;
a0009e88:	e59f212c 	ldr	r2, [pc, #300]	; a0009fbc <_CORE_mutex_Seize_interrupt_trylock+0x134>
#if defined(__RTEMS_DO_NOT_INLINE_CORE_MUTEX_SEIZE__)                 
int _CORE_mutex_Seize_interrupt_trylock(                              
  CORE_mutex_Control  *the_mutex,                                     
  ISR_Level           *level_p                                        
)                                                                     
{                                                                     
a0009e8c:	e1a03000 	mov	r3, r0                                        
  executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL;         
  if ( !_CORE_mutex_Is_locked( the_mutex ) ) {                        
a0009e90:	e593c050 	ldr	ip, [r3, #80]	; 0x50                          
{                                                                     
  Thread_Control   *executing;                                        
                                                                      
  /* disabled when you get here */                                    
                                                                      
  executing = _Thread_Executing;                                      
a0009e94:	e5922004 	ldr	r2, [r2, #4]                                  
  executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL;         
a0009e98:	e3a00000 	mov	r0, #0                                        
  if ( !_CORE_mutex_Is_locked( the_mutex ) ) {                        
a0009e9c:	e15c0000 	cmp	ip, r0                                        
a0009ea0:	e92d4010 	push	{r4, lr}                                     
  Thread_Control   *executing;                                        
                                                                      
  /* disabled when you get here */                                    
                                                                      
  executing = _Thread_Executing;                                      
  executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL;         
a0009ea4:	e5820034 	str	r0, [r2, #52]	; 0x34                          
  if ( !_CORE_mutex_Is_locked( the_mutex ) ) {                        
a0009ea8:	0a00002c 	beq	a0009f60 <_CORE_mutex_Seize_interrupt_trylock+0xd8>
    the_mutex->lock       = CORE_MUTEX_LOCKED;                        
a0009eac:	e5830050 	str	r0, [r3, #80]	; 0x50                          
    the_mutex->holder     = executing;                                
    the_mutex->holder_id  = executing->Object.id;                     
a0009eb0:	e5920008 	ldr	r0, [r2, #8]                                  
                                                                      
  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;                                
a0009eb4:	e583205c 	str	r2, [r3, #92]	; 0x5c                          
    the_mutex->holder_id  = executing->Object.id;                     
a0009eb8:	e5830060 	str	r0, [r3, #96]	; 0x60                          
    the_mutex->nest_count = 1;                                        
a0009ebc:	e3a00001 	mov	r0, #1                                        
a0009ec0:	e5830054 	str	r0, [r3, #84]	; 0x54                          
  return _CORE_mutex_Seize_interrupt_trylock_body( the_mutex, level_p );
}                                                                     
a0009ec4:	e5930048 	ldr	r0, [r3, #72]	; 0x48                          
    if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 
a0009ec8:	e3500002 	cmp	r0, #2                                        
a0009ecc:	0a000001 	beq	a0009ed8 <_CORE_mutex_Seize_interrupt_trylock+0x50>
a0009ed0:	e3500003 	cmp	r0, #3                                        
a0009ed4:	1a000004 	bne	a0009eec <_CORE_mutex_Seize_interrupt_trylock+0x64>
       _Chain_Prepend_unprotected( &executing->lock_mutex,            
                                   &the_mutex->queue.lock_queue );    
       the_mutex->queue.priority_before = executing->current_priority;
#endif                                                                
                                                                      
      executing->resource_count++;                                    
a0009ed8:	e592c01c 	ldr	ip, [r2, #28]                                 
    }                                                                 
                                                                      
    if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) {
a0009edc:	e3500003 	cmp	r0, #3                                        
       _Chain_Prepend_unprotected( &executing->lock_mutex,            
                                   &the_mutex->queue.lock_queue );    
       the_mutex->queue.priority_before = executing->current_priority;
#endif                                                                
                                                                      
      executing->resource_count++;                                    
a0009ee0:	e28c4001 	add	r4, ip, #1                                    
a0009ee4:	e582401c 	str	r4, [r2, #28]                                 
    }                                                                 
                                                                      
    if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) {
a0009ee8:	0a000000 	beq	a0009ef0 <_CORE_mutex_Seize_interrupt_trylock+0x68>
      _ISR_Enable( *level_p );                                        
a0009eec:	ea00002a 	b	a0009f9c <_CORE_mutex_Seize_interrupt_trylock+0x114>
       */                                                             
    {                                                                 
      Priority_Control  ceiling;                                      
      Priority_Control  current;                                      
                                                                      
      ceiling = the_mutex->Attributes.priority_ceiling;               
a0009ef0:	e593004c 	ldr	r0, [r3, #76]	; 0x4c                          
      current = executing->current_priority;                          
a0009ef4:	e5924014 	ldr	r4, [r2, #20]                                 
      if ( current == ceiling ) {                                     
a0009ef8:	e1540000 	cmp	r4, r0                                        
a0009efc:	1a000000 	bne	a0009f04 <_CORE_mutex_Seize_interrupt_trylock+0x7c>
        _ISR_Enable( *level_p );                                      
a0009f00:	ea000025 	b	a0009f9c <_CORE_mutex_Seize_interrupt_trylock+0x114>
        return 0;                                                     
      }                                                               
                                                                      
      if ( current > ceiling ) {                                      
a0009f04:	9a00000b 	bls	a0009f38 <_CORE_mutex_Seize_interrupt_trylock+0xb0>
	rtems_fatal_error_occurred( 99 );                                    
      }                                                               
    }                                                                 
  #endif                                                              
                                                                      
  _Thread_Dispatch_disable_level += 1;                                
a0009f08:	e59f20b0 	ldr	r2, [pc, #176]	; a0009fc0 <_CORE_mutex_Seize_interrupt_trylock+0x138>
a0009f0c:	e5920000 	ldr	r0, [r2]                                      
a0009f10:	e2800001 	add	r0, r0, #1                                    
a0009f14:	e5820000 	str	r0, [r2]                                      
a0009f18:	e5912000 	ldr	r2, [r1]                                      
a0009f1c:	e129f002 	msr	CPSR_fc, r2                                   
        _Thread_Disable_dispatch();                                   
        _ISR_Enable( *level_p );                                      
        _Thread_Change_priority(                                      
a0009f20:	e3a02000 	mov	r2, #0                                        
a0009f24:	e593005c 	ldr	r0, [r3, #92]	; 0x5c                          
a0009f28:	e593104c 	ldr	r1, [r3, #76]	; 0x4c                          
a0009f2c:	ebfff32f 	bl	a0006bf0 <_Thread_Change_priority>             
          the_mutex->holder,                                          
          the_mutex->Attributes.priority_ceiling,                     
         false                                                        
        );                                                            
        _Thread_Enable_dispatch();                                    
a0009f30:	ebfff454 	bl	a0007088 <_Thread_Enable_dispatch>             
a0009f34:	ea00001a 	b	a0009fa4 <_CORE_mutex_Seize_interrupt_trylock+0x11c>
        return 0;                                                     
      }                                                               
      /* if ( current < ceiling ) */ {                                
        executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED;
a0009f38:	e3a00006 	mov	r0, #6                                        
a0009f3c:	e5820034 	str	r0, [r2, #52]	; 0x34                          
        the_mutex->lock       = CORE_MUTEX_UNLOCKED;                  
a0009f40:	e3a00001 	mov	r0, #1                                        
a0009f44:	e5830050 	str	r0, [r3, #80]	; 0x50                          
        the_mutex->nest_count = 0;     /* undo locking above */       
a0009f48:	e3a00000 	mov	r0, #0                                        
a0009f4c:	e5830054 	str	r0, [r3, #84]	; 0x54                          
        executing->resource_count--;   /* undo locking above */       
a0009f50:	e582c01c 	str	ip, [r2, #28]                                 
a0009f54:	e5913000 	ldr	r3, [r1]                                      
a0009f58:	e129f003 	msr	CPSR_fc, r3                                   
a0009f5c:	e8bd8010 	pop	{r4, pc}                                      
  /*                                                                  
   *  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 ) ) {                  
a0009f60:	e593005c 	ldr	r0, [r3, #92]	; 0x5c                          
a0009f64:	e1500002 	cmp	r0, r2                                        
a0009f68:	1a00000f 	bne	a0009fac <_CORE_mutex_Seize_interrupt_trylock+0x124>
    switch ( the_mutex->Attributes.lock_nesting_behavior ) {          
a0009f6c:	e5932040 	ldr	r2, [r3, #64]	; 0x40                          
a0009f70:	e3520000 	cmp	r2, #0                                        
a0009f74:	0a000002 	beq	a0009f84 <_CORE_mutex_Seize_interrupt_trylock+0xfc>
a0009f78:	e3520001 	cmp	r2, #1                                        
a0009f7c:	1a00000c 	bne	a0009fb4 <_CORE_mutex_Seize_interrupt_trylock+0x12c>
a0009f80:	ea000003 	b	a0009f94 <_CORE_mutex_Seize_interrupt_trylock+0x10c><== NOT EXECUTED
      case CORE_MUTEX_NESTING_ACQUIRES:                               
        the_mutex->nest_count++;                                      
a0009f84:	e5932054 	ldr	r2, [r3, #84]	; 0x54                          
a0009f88:	e2822001 	add	r2, r2, #1                                    
a0009f8c:	e5832054 	str	r2, [r3, #84]	; 0x54                          
        _ISR_Enable( *level_p );                                      
a0009f90:	ea000001 	b	a0009f9c <_CORE_mutex_Seize_interrupt_trylock+0x114>
        return 0;                                                     
      case CORE_MUTEX_NESTING_IS_ERROR:                               
        executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED;
a0009f94:	e3a03002 	mov	r3, #2                                        <== NOT EXECUTED
a0009f98:	e5803034 	str	r3, [r0, #52]	; 0x34                          <== NOT EXECUTED
a0009f9c:	e5913000 	ldr	r3, [r1]                                      
a0009fa0:	e129f003 	msr	CPSR_fc, r3                                   
        _ISR_Enable( *level_p );                                      
        return 0;                                                     
a0009fa4:	e3a00000 	mov	r0, #0                                        
a0009fa8:	e8bd8010 	pop	{r4, pc}                                      
                                                                      
  /*                                                                  
   *  The mutex is not available and the caller must deal with the possibility
   *  of blocking.                                                    
   */                                                                 
  return 1;                                                           
a0009fac:	e3a00001 	mov	r0, #1                                        
a0009fb0:	e8bd8010 	pop	{r4, pc}                                      
a0009fb4:	e3a00001 	mov	r0, #1                                        
a0009fb8:	e8bd8010 	pop	{r4, pc}                                      
                                                                      

a000a544 <_Heap_Extend>: Heap_Control *heap, void *extend_area_begin_ptr, uintptr_t extend_area_size, uintptr_t *extended_size_ptr ) {
a000a544:	e92d4ff0 	push	{r4, r5, r6, r7, r8, r9, sl, fp, lr}         
a000a548:	e1a05001 	mov	r5, r1                                        
  Heap_Statistics *const stats = &heap->stats;                        
  Heap_Block *const first_block = heap->first_block;                  
a000a54c:	e5901020 	ldr	r1, [r0, #32]                                 
  Heap_Control *heap,                                                 
  void *extend_area_begin_ptr,                                        
  uintptr_t extend_area_size,                                         
  uintptr_t *extended_size_ptr                                        
)                                                                     
{                                                                     
a000a550:	e24dd028 	sub	sp, sp, #40	; 0x28                            
a000a554:	e58d3018 	str	r3, [sp, #24]                                 
  Heap_Statistics *const stats = &heap->stats;                        
  Heap_Block *const first_block = heap->first_block;                  
a000a558:	e58d1010 	str	r1, [sp, #16]                                 
  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;                        
a000a55c:	e5903010 	ldr	r3, [r0, #16]                                 
  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;
  uintptr_t const free_size = stats->free_size;                       
a000a560:	e5901030 	ldr	r1, [r0, #48]	; 0x30                          
  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;                              
a000a564:	e3a08000 	mov	r8, #0                                        
  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 ) {                        
a000a568:	e0956002 	adds	r6, r5, r2                                   
  Heap_Control *heap,                                                 
  void *extend_area_begin_ptr,                                        
  uintptr_t extend_area_size,                                         
  uintptr_t *extended_size_ptr                                        
)                                                                     
{                                                                     
a000a56c:	e1a04000 	mov	r4, r0                                        
  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;                        
a000a570:	e58d3014 	str	r3, [sp, #20]                                 
  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;                              
a000a574:	e58d8024 	str	r8, [sp, #36]	; 0x24                          
  Heap_Block *extend_last_block = NULL;                               
  uintptr_t const page_size = heap->page_size;                        
  uintptr_t const min_block_size = heap->min_block_size;              
a000a578:	e5903014 	ldr	r3, [r0, #20]                                 
  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;                              
  Heap_Block *extend_last_block = NULL;                               
a000a57c:	e58d8020 	str	r8, [sp, #32]                                 
  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;
  uintptr_t const free_size = stats->free_size;                       
a000a580:	e58d101c 	str	r1, [sp, #28]                                 
  uintptr_t extend_first_block_size = 0;                              
  uintptr_t extended_size = 0;                                        
  bool extend_area_ok = false;                                        
                                                                      
  if ( extend_area_end < extend_area_begin ) {                        
    return false;                                                     
a000a584:	21a00008 	movcs	r0, r8                                      
  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 ) {                        
a000a588:	2a00009e 	bcs	a000a808 <_Heap_Extend+0x2c4>                 
    return false;                                                     
  }                                                                   
                                                                      
  extend_area_ok = _Heap_Get_first_and_last_block(                    
a000a58c:	e28d1024 	add	r1, sp, #36	; 0x24                            
a000a590:	e58d1000 	str	r1, [sp]                                      
a000a594:	e28d1020 	add	r1, sp, #32                                   
a000a598:	e58d1004 	str	r1, [sp, #4]                                  
a000a59c:	e1a00005 	mov	r0, r5                                        
a000a5a0:	e1a01002 	mov	r1, r2                                        
a000a5a4:	e59d2014 	ldr	r2, [sp, #20]                                 
a000a5a8:	ebffeecc 	bl	a00060e0 <_Heap_Get_first_and_last_block>      
    page_size,                                                        
    min_block_size,                                                   
    &extend_first_block,                                              
    &extend_last_block                                                
  );                                                                  
  if (!extend_area_ok ) {                                             
a000a5ac:	e3500000 	cmp	r0, #0                                        
a000a5b0:	0a000094 	beq	a000a808 <_Heap_Extend+0x2c4>                 
a000a5b4:	e59da010 	ldr	sl, [sp, #16]                                 
a000a5b8:	e1a07008 	mov	r7, r8                                        
a000a5bc:	e1a09008 	mov	r9, r8                                        
    return false;                                                     
  }                                                                   
                                                                      
  do {                                                                
    uintptr_t const sub_area_begin = (start_block != first_block) ?   
      (uintptr_t) start_block : heap->area_begin;                     
a000a5c0:	e5941018 	ldr	r1, [r4, #24]                                 
a000a5c4:	e1a03008 	mov	r3, r8                                        
a000a5c8:	e1a0c004 	mov	ip, r4                                        
a000a5cc:	ea000000 	b	a000a5d4 <_Heap_Extend+0x90>                    
a000a5d0:	e1a0100a 	mov	r1, sl                                        
    uintptr_t const sub_area_end = start_block->prev_size;            
a000a5d4:	e59a4000 	ldr	r4, [sl]                                      
    Heap_Block *const end_block =                                     
      _Heap_Block_of_alloc_area( sub_area_end, page_size );           
                                                                      
    if (                                                              
a000a5d8:	e1560001 	cmp	r6, r1                                        
a000a5dc:	93a00000 	movls	r0, #0                                      
a000a5e0:	83a00001 	movhi	r0, #1                                      
a000a5e4:	e1550004 	cmp	r5, r4                                        
a000a5e8:	23a00000 	movcs	r0, #0                                      
a000a5ec:	e3500000 	cmp	r0, #0                                        
a000a5f0:	1a000083 	bne	a000a804 <_Heap_Extend+0x2c0>                 
      sub_area_end > extend_area_begin && extend_area_end > sub_area_begin
    ) {                                                               
      return false;                                                   
    }                                                                 
                                                                      
    if ( extend_area_end == sub_area_begin ) {                        
a000a5f4:	e1560001 	cmp	r6, r1                                        
a000a5f8:	01a0300a 	moveq	r3, sl                                      
a000a5fc:	0a000001 	beq	a000a608 <_Heap_Extend+0xc4>                  
      merge_below_block = start_block;                                
    } else if ( extend_area_end < sub_area_end ) {                    
a000a600:	e1560004 	cmp	r6, r4                                        
a000a604:	31a0900a 	movcc	r9, sl                                      
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(                      
  uintptr_t value,                                                    
  uintptr_t alignment                                                 
)                                                                     
{                                                                     
  return value - (value % alignment);                                 
a000a608:	e1a00004 	mov	r0, r4                                        
a000a60c:	e59d1014 	ldr	r1, [sp, #20]                                 
a000a610:	e58d300c 	str	r3, [sp, #12]                                 
a000a614:	e58dc008 	str	ip, [sp, #8]                                  
a000a618:	eb00153e 	bl	a000fb18 <__umodsi3>                           
a000a61c:	e244b008 	sub	fp, r4, #8                                    
      link_below_block = start_block;                                 
    }                                                                 
                                                                      
    if ( sub_area_end == extend_area_begin ) {                        
a000a620:	e1540005 	cmp	r4, r5                                        
  uintptr_t alloc_begin,                                              
  uintptr_t page_size                                                 
)                                                                     
{                                                                     
  return (Heap_Block *) (_Heap_Align_down( alloc_begin, page_size )   
    - HEAP_BLOCK_HEADER_SIZE);                                        
a000a624:	e060000b 	rsb	r0, r0, fp                                    
a000a628:	e59d300c 	ldr	r3, [sp, #12]                                 
a000a62c:	e59dc008 	ldr	ip, [sp, #8]                                  
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 )   
a000a630:	01a07000 	moveq	r7, r0                                      
      start_block->prev_size = extend_area_end;                       
a000a634:	058a6000 	streq	r6, [sl]                                    
      merge_below_block = start_block;                                
    } else if ( extend_area_end < sub_area_end ) {                    
      link_below_block = start_block;                                 
    }                                                                 
                                                                      
    if ( sub_area_end == extend_area_begin ) {                        
a000a638:	0a000000 	beq	a000a640 <_Heap_Extend+0xfc>                  
a000a63c:	31a08000 	movcc	r8, r0                                      
    - 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;                
a000a640:	e590a004 	ldr	sl, [r0, #4]                                  
    } 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 );                             
a000a644:	e59d2010 	ldr	r2, [sp, #16]                                 
a000a648:	e3caa001 	bic	sl, sl, #1                                    
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(                      
  const Heap_Block *block,                                            
  uintptr_t offset                                                    
)                                                                     
{                                                                     
  return (Heap_Block *) ((uintptr_t) block + offset);                 
a000a64c:	e080a00a 	add	sl, r0, sl                                    
a000a650:	e15a0002 	cmp	sl, r2                                        
a000a654:	1affffdd 	bne	a000a5d0 <_Heap_Extend+0x8c>                  
a000a658:	e1a02009 	mov	r2, r9                                        
a000a65c:	e1a09003 	mov	r9, r3                                        
                                                                      
  if ( extend_area_begin < heap->area_begin ) {                       
a000a660:	e59c3018 	ldr	r3, [ip, #24]                                 
a000a664:	e1a0400c 	mov	r4, ip                                        
a000a668:	e1550003 	cmp	r5, r3                                        
    heap->area_begin = extend_area_begin;                             
a000a66c:	358c5018 	strcc	r5, [ip, #24]                               
    }                                                                 
                                                                      
    start_block = _Heap_Block_at( end_block, _Heap_Block_size( end_block ) );
  } while ( start_block != first_block );                             
                                                                      
  if ( extend_area_begin < heap->area_begin ) {                       
a000a670:	3a000002 	bcc	a000a680 <_Heap_Extend+0x13c>                 
    heap->area_begin = extend_area_begin;                             
  } else if ( heap->area_end < extend_area_end ) {                    
a000a674:	e59c301c 	ldr	r3, [ip, #28]                                 
a000a678:	e1530006 	cmp	r3, r6                                        
    heap->area_end = extend_area_end;                                 
a000a67c:	358c601c 	strcc	r6, [ip, #28]                               
  }                                                                   
                                                                      
  extend_first_block_size =                                           
    (uintptr_t) extend_last_block - (uintptr_t) extend_first_block;   
a000a680:	e59d1024 	ldr	r1, [sp, #36]	; 0x24                          
a000a684:	e59d3020 	ldr	r3, [sp, #32]                                 
                                                                      
  extend_first_block->prev_size = extend_area_end;                    
a000a688:	e5816000 	str	r6, [r1]                                      
    heap->area_begin = extend_area_begin;                             
  } else if ( heap->area_end < extend_area_end ) {                    
    heap->area_end = extend_area_end;                                 
  }                                                                   
                                                                      
  extend_first_block_size =                                           
a000a68c:	e0610003 	rsb	r0, r1, r3                                    
    (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;                   
a000a690:	e380c001 	orr	ip, r0, #1                                    
  _Heap_Protection_block_initialize( heap, extend_first_block );      
                                                                      
  extend_last_block->prev_size = extend_first_block_size;             
a000a694:	e5830000 	str	r0, [r3]                                      
  extend_last_block->size_and_flag = 0;                               
a000a698:	e3a00000 	mov	r0, #0                                        
                                                                      
  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 =                                 
a000a69c:	e581c004 	str	ip, [r1, #4]                                  
    extend_first_block_size | HEAP_PREV_BLOCK_USED;                   
  _Heap_Protection_block_initialize( heap, extend_first_block );      
                                                                      
  extend_last_block->prev_size = extend_first_block_size;             
  extend_last_block->size_and_flag = 0;                               
a000a6a0:	e5830004 	str	r0, [r3, #4]                                  
  _Heap_Protection_block_initialize( heap, extend_last_block );       
                                                                      
  if ( (uintptr_t) extend_first_block < (uintptr_t) heap->first_block ) {
a000a6a4:	e5940020 	ldr	r0, [r4, #32]                                 
a000a6a8:	e1500001 	cmp	r0, r1                                        
    heap->first_block = extend_first_block;                           
a000a6ac:	85841020 	strhi	r1, [r4, #32]                               
                                                                      
  extend_last_block->prev_size = extend_first_block_size;             
  extend_last_block->size_and_flag = 0;                               
  _Heap_Protection_block_initialize( heap, extend_last_block );       
                                                                      
  if ( (uintptr_t) extend_first_block < (uintptr_t) heap->first_block ) {
a000a6b0:	8a000002 	bhi	a000a6c0 <_Heap_Extend+0x17c>                 
    heap->first_block = extend_first_block;                           
  } else if ( (uintptr_t) extend_last_block > (uintptr_t) heap->last_block ) {
a000a6b4:	e5941024 	ldr	r1, [r4, #36]	; 0x24                          
a000a6b8:	e1510003 	cmp	r1, r3                                        
    heap->last_block = extend_last_block;                             
a000a6bc:	35843024 	strcc	r3, [r4, #36]	; 0x24                        
  }                                                                   
                                                                      
  if ( merge_below_block != NULL ) {                                  
a000a6c0:	e3590000 	cmp	r9, #0                                        
a000a6c4:	0a000010 	beq	a000a70c <_Heap_Extend+0x1c8>                 
  Heap_Control *heap,                                                 
  uintptr_t extend_area_begin,                                        
  Heap_Block *first_block                                             
)                                                                     
{                                                                     
  uintptr_t const page_size = heap->page_size;                        
a000a6c8:	e594a010 	ldr	sl, [r4, #16]                                 <== NOT EXECUTED
  uintptr_t const new_first_block_alloc_begin =                       
    _Heap_Align_up( extend_area_begin + HEAP_BLOCK_HEADER_SIZE, page_size );
a000a6cc:	e2855008 	add	r5, r5, #8                                    <== NOT EXECUTED
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_up(                        
  uintptr_t value,                                                    
  uintptr_t alignment                                                 
)                                                                     
{                                                                     
  uintptr_t remainder = value % alignment;                            
a000a6d0:	e1a00005 	mov	r0, r5                                        <== NOT EXECUTED
a000a6d4:	e1a0100a 	mov	r1, sl                                        <== NOT EXECUTED
a000a6d8:	eb00150e 	bl	a000fb18 <__umodsi3>                           <== NOT EXECUTED
                                                                      
  if ( remainder != 0 ) {                                             
a000a6dc:	e3500000 	cmp	r0, #0                                        <== NOT EXECUTED
    return value - remainder + alignment;                             
a000a6e0:	1085500a 	addne	r5, r5, sl                                  <== NOT EXECUTED
  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;                
a000a6e4:	e5993000 	ldr	r3, [r9]                                      <== NOT EXECUTED
a000a6e8:	10605005 	rsbne	r5, r0, r5                                  <== NOT EXECUTED
)                                                                     
{                                                                     
  uintptr_t const page_size = heap->page_size;                        
  uintptr_t const new_first_block_alloc_begin =                       
    _Heap_Align_up( extend_area_begin + HEAP_BLOCK_HEADER_SIZE, page_size );
  uintptr_t const new_first_block_begin =                             
a000a6ec:	e2451008 	sub	r1, r5, #8                                    <== NOT EXECUTED
  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;                
a000a6f0:	e5053008 	str	r3, [r5, #-8]                                 <== NOT EXECUTED
  uintptr_t const new_first_block_alloc_begin =                       
    _Heap_Align_up( extend_area_begin + HEAP_BLOCK_HEADER_SIZE, page_size );
  uintptr_t const new_first_block_begin =                             
    new_first_block_alloc_begin - HEAP_BLOCK_HEADER_SIZE;             
  uintptr_t const first_block_begin = (uintptr_t) first_block;        
  uintptr_t const new_first_block_size =                              
a000a6f4:	e0613009 	rsb	r3, r1, r9                                    <== NOT EXECUTED
    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;
a000a6f8:	e3833001 	orr	r3, r3, #1                                    <== NOT EXECUTED
a000a6fc:	e5053004 	str	r3, [r5, #-4]                                 <== NOT EXECUTED
                                                                      
  _Heap_Free_block( heap, new_first_block );                          
a000a700:	e1a00004 	mov	r0, r4                                        <== NOT EXECUTED
a000a704:	ebffff86 	bl	a000a524 <_Heap_Free_block>                    <== NOT EXECUTED
a000a708:	ea000004 	b	a000a720 <_Heap_Extend+0x1dc>                   <== NOT EXECUTED
    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 ) {                            
a000a70c:	e3520000 	cmp	r2, #0                                        
    _Heap_Link_below(                                                 
a000a710:	159d3020 	ldrne	r3, [sp, #32]                               
{                                                                     
  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;           
a000a714:	10632002 	rsbne	r2, r3, r2                                  
a000a718:	13822001 	orrne	r2, r2, #1                                  
)                                                                     
{                                                                     
  uintptr_t const last_block_begin = (uintptr_t) last_block;          
  uintptr_t const link_begin = (uintptr_t) link;                      
                                                                      
  last_block->size_and_flag =                                         
a000a71c:	15832004 	strne	r2, [r3, #4]                                
      link_below_block,                                               
      extend_last_block                                               
    );                                                                
  }                                                                   
                                                                      
  if ( merge_above_block != NULL ) {                                  
a000a720:	e3570000 	cmp	r7, #0                                        
a000a724:	0a000012 	beq	a000a774 <_Heap_Extend+0x230>                 
)                                                                     
{                                                                     
  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,      
a000a728:	e2466008 	sub	r6, r6, #8                                    
  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(             
a000a72c:	e0676006 	rsb	r6, r7, r6                                    
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(                      
  uintptr_t value,                                                    
  uintptr_t alignment                                                 
)                                                                     
{                                                                     
  return value - (value % alignment);                                 
a000a730:	e5941010 	ldr	r1, [r4, #16]                                 
a000a734:	e1a00006 	mov	r0, r6                                        
a000a738:	eb0014f6 	bl	a000fb18 <__umodsi3>                           
  );                                                                  
  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)                 
a000a73c:	e5972004 	ldr	r2, [r7, #4]                                  
a000a740:	e0606006 	rsb	r6, r0, r6                                    
    page_size                                                         
  );                                                                  
  Heap_Block *const new_last_block =                                  
    _Heap_Block_at( last_block, last_block_new_size );                
                                                                      
  new_last_block->size_and_flag =                                     
a000a744:	e0863007 	add	r3, r6, r7                                    
    (last_block->size_and_flag - last_block_new_size)                 
a000a748:	e0662002 	rsb	r2, r6, r2                                    
      | HEAP_PREV_BLOCK_USED;                                         
a000a74c:	e3822001 	orr	r2, r2, #1                                    
    page_size                                                         
  );                                                                  
  Heap_Block *const new_last_block =                                  
    _Heap_Block_at( last_block, last_block_new_size );                
                                                                      
  new_last_block->size_and_flag =                                     
a000a750:	e5832004 	str	r2, [r3, #4]                                  
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;       
a000a754:	e5973004 	ldr	r3, [r7, #4]                                  
    (last_block->size_and_flag - last_block_new_size)                 
      | HEAP_PREV_BLOCK_USED;                                         
                                                                      
  _Heap_Block_set_size( last_block, last_block_new_size );            
                                                                      
  _Heap_Free_block( heap, last_block );                               
a000a758:	e1a00004 	mov	r0, r4                                        
a000a75c:	e1a01007 	mov	r1, r7                                        
a000a760:	e2033001 	and	r3, r3, #1                                    
                                                                      
  block->size_and_flag = size | flag;                                 
a000a764:	e1866003 	orr	r6, r6, r3                                    
a000a768:	e5876004 	str	r6, [r7, #4]                                  
a000a76c:	ebffff6c 	bl	a000a524 <_Heap_Free_block>                    
a000a770:	ea00000b 	b	a000a7a4 <_Heap_Extend+0x260>                   
    );                                                                
  }                                                                   
                                                                      
  if ( merge_above_block != NULL ) {                                  
    _Heap_Merge_above( heap, merge_above_block, extend_area_end );    
  } else if ( link_above_block != NULL ) {                            
a000a774:	e3580000 	cmp	r8, #0                                        
a000a778:	0a000009 	beq	a000a7a4 <_Heap_Extend+0x260>                 
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;       
a000a77c:	e5982004 	ldr	r2, [r8, #4]                                  
)                                                                     
{                                                                     
  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 );       
a000a780:	e59d1024 	ldr	r1, [sp, #36]	; 0x24                          
  }                                                                   
                                                                      
  if ( merge_above_block != NULL ) {                                  
    _Heap_Merge_above( heap, merge_above_block, extend_area_end );    
  } else if ( link_above_block != NULL ) {                            
    _Heap_Link_above(                                                 
a000a784:	e59d3020 	ldr	r3, [sp, #32]                                 
a000a788:	e2022001 	and	r2, r2, #1                                    
)                                                                     
{                                                                     
  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 );       
a000a78c:	e0681001 	rsb	r1, r8, r1                                    
                                                                      
  block->size_and_flag = size | flag;                                 
a000a790:	e1812002 	orr	r2, r1, r2                                    
a000a794:	e5882004 	str	r2, [r8, #4]                                  
                                                                      
  last_block->size_and_flag |= HEAP_PREV_BLOCK_USED;                  
a000a798:	e5932004 	ldr	r2, [r3, #4]                                  
a000a79c:	e3822001 	orr	r2, r2, #1                                    
a000a7a0:	e5832004 	str	r2, [r3, #4]                                  
      extend_first_block,                                             
      extend_last_block                                               
    );                                                                
  }                                                                   
                                                                      
  if ( merge_below_block == NULL && merge_above_block == NULL ) {     
a000a7a4:	e3570000 	cmp	r7, #0                                        
a000a7a8:	03590000 	cmpeq	r9, #0                                      
a000a7ac:	1a000002 	bne	a000a7bc <_Heap_Extend+0x278>                 
    _Heap_Free_block( heap, extend_first_block );                     
a000a7b0:	e1a00004 	mov	r0, r4                                        
a000a7b4:	e59d1024 	ldr	r1, [sp, #36]	; 0x24                          
a000a7b8:	ebffff59 	bl	a000a524 <_Heap_Free_block>                    
 */                                                                   
RTEMS_INLINE_ROUTINE void _Heap_Set_last_block_size( Heap_Control *heap )
{                                                                     
  _Heap_Block_set_size(                                               
    heap->last_block,                                                 
    (uintptr_t) heap->first_block - (uintptr_t) heap->last_block      
a000a7bc:	e5943024 	ldr	r3, [r4, #36]	; 0x24                          
 * 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(                                               
a000a7c0:	e5941020 	ldr	r1, [r4, #32]                                 
  stats->size += extended_size;                                       
                                                                      
  if ( extended_size_ptr != NULL )                                    
    *extended_size_ptr = extended_size;                               
                                                                      
  return true;                                                        
a000a7c4:	e3a00001 	mov	r0, #1                                        
RTEMS_INLINE_ROUTINE void _Heap_Block_set_size(                       
  Heap_Block *block,                                                  
  uintptr_t size                                                      
)                                                                     
{                                                                     
  uintptr_t flag = block->size_and_flag & HEAP_PREV_BLOCK_USED;       
a000a7c8:	e5932004 	ldr	r2, [r3, #4]                                  
 * 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(                                               
a000a7cc:	e0631001 	rsb	r1, r3, r1                                    
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;       
a000a7d0:	e2022001 	and	r2, r2, #1                                    
                                                                      
  block->size_and_flag = size | flag;                                 
a000a7d4:	e1812002 	orr	r2, r1, r2                                    
a000a7d8:	e5832004 	str	r2, [r3, #4]                                  
    _Heap_Free_block( heap, extend_first_block );                     
  }                                                                   
                                                                      
  _Heap_Set_last_block_size( heap );                                  
                                                                      
  extended_size = stats->free_size - free_size;                       
a000a7dc:	e59d101c 	ldr	r1, [sp, #28]                                 
a000a7e0:	e5943030 	ldr	r3, [r4, #48]	; 0x30                          
                                                                      
  /* Statistics */                                                    
  stats->size += extended_size;                                       
a000a7e4:	e594202c 	ldr	r2, [r4, #44]	; 0x2c                          
    _Heap_Free_block( heap, extend_first_block );                     
  }                                                                   
                                                                      
  _Heap_Set_last_block_size( heap );                                  
                                                                      
  extended_size = stats->free_size - free_size;                       
a000a7e8:	e0613003 	rsb	r3, r1, r3                                    
                                                                      
  /* Statistics */                                                    
  stats->size += extended_size;                                       
a000a7ec:	e0822003 	add	r2, r2, r3                                    
a000a7f0:	e584202c 	str	r2, [r4, #44]	; 0x2c                          
                                                                      
  if ( extended_size_ptr != NULL )                                    
a000a7f4:	e59d2018 	ldr	r2, [sp, #24]                                 
a000a7f8:	e3520000 	cmp	r2, #0                                        
    *extended_size_ptr = extended_size;                               
a000a7fc:	15823000 	strne	r3, [r2]                                    
a000a800:	ea000000 	b	a000a808 <_Heap_Extend+0x2c4>                   
      _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;                                                   
a000a804:	e3a00000 	mov	r0, #0                                        
                                                                      
  if ( extended_size_ptr != NULL )                                    
    *extended_size_ptr = extended_size;                               
                                                                      
  return true;                                                        
}                                                                     
a000a808:	e28dd028 	add	sp, sp, #40	; 0x28                            
a000a80c:	e8bd8ff0 	pop	{r4, r5, r6, r7, r8, r9, sl, fp, pc}          
                                                                      

a0006c44 <_Heap_Walk>: bool _Heap_Walk( Heap_Control *heap, int source, bool dump ) {
a0006c44:	e92d4ff0 	push	{r4, r5, r6, r7, r8, r9, sl, fp, lr}         
  uintptr_t const page_size = heap->page_size;                        
  uintptr_t const min_block_size = heap->min_block_size;              
a0006c48:	e5903014 	ldr	r3, [r0, #20]                                 
bool _Heap_Walk(                                                      
  Heap_Control *heap,                                                 
  int source,                                                         
  bool dump                                                           
)                                                                     
{                                                                     
a0006c4c:	e24dd030 	sub	sp, sp, #48	; 0x30                            
  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;                      
a0006c50:	e59f44c8 	ldr	r4, [pc, #1224]	; a0007120 <_Heap_Walk+0x4dc> 
  int source,                                                         
  bool dump                                                           
)                                                                     
{                                                                     
  uintptr_t const page_size = heap->page_size;                        
  uintptr_t const min_block_size = heap->min_block_size;              
a0006c54:	e58d3024 	str	r3, [sp, #36]	; 0x24                          
  Heap_Block *const first_block = heap->first_block;                  
  Heap_Block *const last_block = heap->last_block;                    
a0006c58:	e5903024 	ldr	r3, [r0, #36]	; 0x24                          
  Heap_Block *block = first_block;                                    
  Heap_Walk_printer printer = dump ?                                  
    _Heap_Walk_print : _Heap_Walk_print_nothing;                      
a0006c5c:	e31200ff 	tst	r2, #255	; 0xff                               
  bool dump                                                           
)                                                                     
{                                                                     
  uintptr_t const page_size = heap->page_size;                        
  uintptr_t const min_block_size = heap->min_block_size;              
  Heap_Block *const first_block = heap->first_block;                  
a0006c60:	e590c020 	ldr	ip, [r0, #32]                                 
  Heap_Block *const last_block = heap->last_block;                    
a0006c64:	e58d3028 	str	r3, [sp, #40]	; 0x28                          
  Heap_Block *block = first_block;                                    
  Heap_Walk_printer printer = dump ?                                  
    _Heap_Walk_print : _Heap_Walk_print_nothing;                      
a0006c68:	e59f34b4 	ldr	r3, [pc, #1204]	; a0007124 <_Heap_Walk+0x4e0> 
bool _Heap_Walk(                                                      
  Heap_Control *heap,                                                 
  int source,                                                         
  bool dump                                                           
)                                                                     
{                                                                     
a0006c6c:	e1a06000 	mov	r6, r0                                        
a0006c70:	e1a05001 	mov	r5, r1                                        
  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;                      
a0006c74:	11a04003 	movne	r4, r3                                      
                                                                      
  if ( !_System_state_Is_up( _System_state_Get() ) ) {                
a0006c78:	e59f34a8 	ldr	r3, [pc, #1192]	; a0007128 <_Heap_Walk+0x4e4> 
  Heap_Control *heap,                                                 
  int source,                                                         
  bool dump                                                           
)                                                                     
{                                                                     
  uintptr_t const page_size = heap->page_size;                        
a0006c7c:	e5909010 	ldr	r9, [r0, #16]                                 
  uintptr_t const min_block_size = heap->min_block_size;              
  Heap_Block *const first_block = heap->first_block;                  
a0006c80:	e58dc020 	str	ip, [sp, #32]                                 
  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;                      
                                                                      
  if ( !_System_state_Is_up( _System_state_Get() ) ) {                
a0006c84:	e5933000 	ldr	r3, [r3]                                      
a0006c88:	e3530003 	cmp	r3, #3                                        
a0006c8c:	1a000118 	bne	a00070f4 <_Heap_Walk+0x4b0>                   
  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)(                                                         
a0006c90:	e59dc024 	ldr	ip, [sp, #36]	; 0x24                          
a0006c94:	e59d2020 	ldr	r2, [sp, #32]                                 
a0006c98:	e58dc000 	str	ip, [sp]                                      
a0006c9c:	e5903018 	ldr	r3, [r0, #24]                                 
a0006ca0:	e58d3004 	str	r3, [sp, #4]                                  
a0006ca4:	e590301c 	ldr	r3, [r0, #28]                                 
a0006ca8:	e58d200c 	str	r2, [sp, #12]                                 
a0006cac:	e59f2478 	ldr	r2, [pc, #1144]	; a000712c <_Heap_Walk+0x4e8> 
a0006cb0:	e58d3008 	str	r3, [sp, #8]                                  
a0006cb4:	e59d3028 	ldr	r3, [sp, #40]	; 0x28                          
a0006cb8:	e58d3010 	str	r3, [sp, #16]                                 
a0006cbc:	e5903008 	ldr	r3, [r0, #8]                                  
a0006cc0:	e58d3014 	str	r3, [sp, #20]                                 
a0006cc4:	e590300c 	ldr	r3, [r0, #12]                                 
a0006cc8:	e1a00001 	mov	r0, r1                                        
a0006ccc:	e3a01000 	mov	r1, #0                                        
a0006cd0:	e58d3018 	str	r3, [sp, #24]                                 
a0006cd4:	e1a03009 	mov	r3, r9                                        
a0006cd8:	e12fff34 	blx	r4                                            
    heap->area_begin, heap->area_end,                                 
    first_block, last_block,                                          
    first_free_block, last_free_block                                 
  );                                                                  
                                                                      
  if ( page_size == 0 ) {                                             
a0006cdc:	e3590000 	cmp	r9, #0                                        
a0006ce0:	1a000005 	bne	a0006cfc <_Heap_Walk+0xb8>                    
    (*printer)( source, true, "page size is zero\n" );                
a0006ce4:	e1a00005 	mov	r0, r5                                        
a0006ce8:	e3a01001 	mov	r1, #1                                        
a0006cec:	e59f243c 	ldr	r2, [pc, #1084]	; a0007130 <_Heap_Walk+0x4ec> 
a0006cf0:	e12fff34 	blx	r4                                            
  if ( !_System_state_Is_up( _System_state_Get() ) ) {                
    return true;                                                      
  }                                                                   
                                                                      
  if ( !_Heap_Walk_check_control( source, printer, heap ) ) {         
    return false;                                                     
a0006cf4:	e1a08009 	mov	r8, r9                                        
a0006cf8:	ea0000fe 	b	a00070f8 <_Heap_Walk+0x4b4>                     
    (*printer)( source, true, "page size is zero\n" );                
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if ( !_Addresses_Is_aligned( (void *) page_size ) ) {               
a0006cfc:	e2198007 	ands	r8, r9, #7                                   
    (*printer)(                                                       
a0006d00:	11a00005 	movne	r0, r5                                      
a0006d04:	13a01001 	movne	r1, #1                                      
a0006d08:	159f2424 	ldrne	r2, [pc, #1060]	; a0007134 <_Heap_Walk+0x4f0>
a0006d0c:	11a03009 	movne	r3, r9                                      
a0006d10:	1a0000ff 	bne	a0007114 <_Heap_Walk+0x4d0>                   
RTEMS_INLINE_ROUTINE bool _Heap_Is_aligned(                           
  uintptr_t value,                                                    
  uintptr_t alignment                                                 
)                                                                     
{                                                                     
  return (value % alignment) == 0;                                    
a0006d14:	e59d0024 	ldr	r0, [sp, #36]	; 0x24                          
a0006d18:	e1a01009 	mov	r1, r9                                        
a0006d1c:	ebffe754 	bl	a0000a74 <__umodsi3>                           
    );                                                                
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if ( !_Heap_Is_aligned( min_block_size, page_size ) ) {             
a0006d20:	e250b000 	subs	fp, r0, #0                                   
a0006d24:	0a000005 	beq	a0006d40 <_Heap_Walk+0xfc>                    
    (*printer)(                                                       
a0006d28:	e1a00005 	mov	r0, r5                                        
a0006d2c:	e3a01001 	mov	r1, #1                                        
a0006d30:	e59f2400 	ldr	r2, [pc, #1024]	; a0007138 <_Heap_Walk+0x4f4> 
a0006d34:	e59d3024 	ldr	r3, [sp, #36]	; 0x24                          
a0006d38:	e12fff34 	blx	r4                                            
a0006d3c:	ea0000ed 	b	a00070f8 <_Heap_Walk+0x4b4>                     
a0006d40:	e59dc020 	ldr	ip, [sp, #32]                                 
a0006d44:	e1a01009 	mov	r1, r9                                        
a0006d48:	e28c0008 	add	r0, ip, #8                                    
a0006d4c:	ebffe748 	bl	a0000a74 <__umodsi3>                           
    );                                                                
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if (                                                                
a0006d50:	e250a000 	subs	sl, r0, #0                                   
    !_Heap_Is_aligned( _Heap_Alloc_area_of_block( first_block ), page_size )
  ) {                                                                 
    (*printer)(                                                       
a0006d54:	11a00005 	movne	r0, r5                                      
a0006d58:	13a01001 	movne	r1, #1                                      
a0006d5c:	159f23d8 	ldrne	r2, [pc, #984]	; a000713c <_Heap_Walk+0x4f8>
a0006d60:	159d3020 	ldrne	r3, [sp, #32]                               
a0006d64:	1a0000c3 	bne	a0007078 <_Heap_Walk+0x434>                   
  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;                 
a0006d68:	e59d2020 	ldr	r2, [sp, #32]                                 
a0006d6c:	e5928004 	ldr	r8, [r2, #4]                                  
    );                                                                
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if ( !_Heap_Is_prev_used( first_block ) ) {                         
a0006d70:	e2188001 	ands	r8, r8, #1                                   
    (*printer)(                                                       
a0006d74:	01a00005 	moveq	r0, r5                                      
a0006d78:	03a01001 	moveq	r1, #1                                      
a0006d7c:	059f23bc 	ldreq	r2, [pc, #956]	; a0007140 <_Heap_Walk+0x4fc>
a0006d80:	0a000009 	beq	a0006dac <_Heap_Walk+0x168>                   
    - 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;                
a0006d84:	e59d3028 	ldr	r3, [sp, #40]	; 0x28                          
a0006d88:	e5937004 	ldr	r7, [r3, #4]                                  
a0006d8c:	e3c77001 	bic	r7, r7, #1                                    
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(                      
  const Heap_Block *block,                                            
  uintptr_t offset                                                    
)                                                                     
{                                                                     
  return (Heap_Block *) ((uintptr_t) block + offset);                 
a0006d90:	e0837007 	add	r7, r3, r7                                    
  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;                 
a0006d94:	e5978004 	ldr	r8, [r7, #4]                                  
    );                                                                
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if ( _Heap_Is_free( last_block ) ) {                                
a0006d98:	e2188001 	ands	r8, r8, #1                                   
a0006d9c:	1a000004 	bne	a0006db4 <_Heap_Walk+0x170>                   
    (*printer)(                                                       
a0006da0:	e59f239c 	ldr	r2, [pc, #924]	; a0007144 <_Heap_Walk+0x500>  
a0006da4:	e1a00005 	mov	r0, r5                                        
a0006da8:	e3a01001 	mov	r1, #1                                        
a0006dac:	e12fff34 	blx	r4                                            
a0006db0:	ea0000d0 	b	a00070f8 <_Heap_Walk+0x4b4>                     
    );                                                                
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if (                                                                
a0006db4:	e59dc020 	ldr	ip, [sp, #32]                                 
a0006db8:	e157000c 	cmp	r7, ip                                        
a0006dbc:	0a000005 	beq	a0006dd8 <_Heap_Walk+0x194>                   
    _Heap_Block_at( last_block, _Heap_Block_size( last_block ) ) != first_block
  ) {                                                                 
    (*printer)(                                                       
a0006dc0:	e1a00005 	mov	r0, r5                                        <== NOT EXECUTED
a0006dc4:	e3a01001 	mov	r1, #1                                        <== NOT EXECUTED
a0006dc8:	e59f2378 	ldr	r2, [pc, #888]	; a0007148 <_Heap_Walk+0x504>  <== NOT EXECUTED
a0006dcc:	e12fff34 	blx	r4                                            <== NOT EXECUTED
  if ( !_System_state_Is_up( _System_state_Get() ) ) {                
    return true;                                                      
  }                                                                   
                                                                      
  if ( !_Heap_Walk_check_control( source, printer, heap ) ) {         
    return false;                                                     
a0006dd0:	e1a0800a 	mov	r8, sl                                        <== NOT EXECUTED
a0006dd4:	ea0000c7 	b	a00070f8 <_Heap_Walk+0x4b4>                     <== NOT EXECUTED
  int source,                                                         
  Heap_Walk_printer printer,                                          
  Heap_Control *heap                                                  
)                                                                     
{                                                                     
  uintptr_t const page_size = heap->page_size;                        
a0006dd8:	e596b010 	ldr	fp, [r6, #16]                                 
                                                                      
    block = next_block;                                               
  } while ( block != first_block );                                   
                                                                      
  return true;                                                        
}                                                                     
a0006ddc:	e5968008 	ldr	r8, [r6, #8]                                  
  Heap_Walk_printer printer,                                          
  Heap_Control *heap                                                  
)                                                                     
{                                                                     
  uintptr_t const page_size = heap->page_size;                        
  const Heap_Block *const free_list_tail = _Heap_Free_list_tail( heap );
a0006de0:	e1a0a006 	mov	sl, r6                                        
a0006de4:	ea000032 	b	a0006eb4 <_Heap_Walk+0x270>                     
  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;             
a0006de8:	e5963020 	ldr	r3, [r6, #32]                                 
a0006dec:	e1530008 	cmp	r3, r8                                        
a0006df0:	83a0c000 	movhi	ip, #0                                      
a0006df4:	8a000003 	bhi	a0006e08 <_Heap_Walk+0x1c4>                   
a0006df8:	e596c024 	ldr	ip, [r6, #36]	; 0x24                          
a0006dfc:	e15c0008 	cmp	ip, r8                                        
a0006e00:	33a0c000 	movcc	ip, #0                                      
a0006e04:	23a0c001 	movcs	ip, #1                                      
  const Heap_Block *const first_free_block = _Heap_Free_list_first( heap );
  const Heap_Block *prev_block = free_list_tail;                      
  const Heap_Block *free_block = first_free_block;                    
                                                                      
  while ( free_block != free_list_tail ) {                            
    if ( !_Heap_Is_block_in_heap( heap, free_block ) ) {              
a0006e08:	e21cc0ff 	ands	ip, ip, #255	; 0xff                          
      (*printer)(                                                     
a0006e0c:	01a00005 	moveq	r0, r5                                      
a0006e10:	03a01001 	moveq	r1, #1                                      
a0006e14:	059f2330 	ldreq	r2, [pc, #816]	; a000714c <_Heap_Walk+0x508>
a0006e18:	0a000012 	beq	a0006e68 <_Heap_Walk+0x224>                   
RTEMS_INLINE_ROUTINE bool _Heap_Is_aligned(                           
  uintptr_t value,                                                    
  uintptr_t alignment                                                 
)                                                                     
{                                                                     
  return (value % alignment) == 0;                                    
a0006e1c:	e2880008 	add	r0, r8, #8                                    
a0006e20:	e1a0100b 	mov	r1, fp                                        
a0006e24:	ebffe712 	bl	a0000a74 <__umodsi3>                           
      );                                                              
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    if (                                                              
a0006e28:	e250c000 	subs	ip, r0, #0                                   
      !_Heap_Is_aligned( _Heap_Alloc_area_of_block( free_block ), page_size )
    ) {                                                               
      (*printer)(                                                     
a0006e2c:	11a00005 	movne	r0, r5                                      
a0006e30:	13a01001 	movne	r1, #1                                      
a0006e34:	159f2314 	ldrne	r2, [pc, #788]	; a0007150 <_Heap_Walk+0x50c>
a0006e38:	11a03008 	movne	r3, r8                                      
a0006e3c:	1a0000b4 	bne	a0007114 <_Heap_Walk+0x4d0>                   
    - 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;                
a0006e40:	e5983004 	ldr	r3, [r8, #4]                                  
a0006e44:	e3c33001 	bic	r3, r3, #1                                    
                                                                      
    block = next_block;                                               
  } while ( block != first_block );                                   
                                                                      
  return true;                                                        
}                                                                     
a0006e48:	e0883003 	add	r3, r8, r3                                    
  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;                 
a0006e4c:	e5933004 	ldr	r3, [r3, #4]                                  
      );                                                              
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    if ( _Heap_Is_used( free_block ) ) {                              
a0006e50:	e2133001 	ands	r3, r3, #1                                   
a0006e54:	e58d302c 	str	r3, [sp, #44]	; 0x2c                          
a0006e58:	0a000008 	beq	a0006e80 <_Heap_Walk+0x23c>                   
      (*printer)(                                                     
a0006e5c:	e59f22f0 	ldr	r2, [pc, #752]	; a0007154 <_Heap_Walk+0x510>  
a0006e60:	e1a00005 	mov	r0, r5                                        
a0006e64:	e3a01001 	mov	r1, #1                                        
a0006e68:	e1a03008 	mov	r3, r8                                        
a0006e6c:	e58dc01c 	str	ip, [sp, #28]                                 
a0006e70:	e12fff34 	blx	r4                                            
  if ( !_System_state_Is_up( _System_state_Get() ) ) {                
    return true;                                                      
  }                                                                   
                                                                      
  if ( !_Heap_Walk_check_control( source, printer, heap ) ) {         
    return false;                                                     
a0006e74:	e59dc01c 	ldr	ip, [sp, #28]                                 
a0006e78:	e1a0800c 	mov	r8, ip                                        
a0006e7c:	ea00009d 	b	a00070f8 <_Heap_Walk+0x4b4>                     
      );                                                              
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    if ( free_block->prev != prev_block ) {                           
a0006e80:	e598300c 	ldr	r3, [r8, #12]                                 
a0006e84:	e153000a 	cmp	r3, sl                                        
a0006e88:	0a000007 	beq	a0006eac <_Heap_Walk+0x268>                   
      (*printer)(                                                     
a0006e8c:	e58d3000 	str	r3, [sp]                                      
a0006e90:	e1a00005 	mov	r0, r5                                        
a0006e94:	e1a03008 	mov	r3, r8                                        
a0006e98:	e3a01001 	mov	r1, #1                                        
a0006e9c:	e59f22b4 	ldr	r2, [pc, #692]	; a0007158 <_Heap_Walk+0x514>  
a0006ea0:	e12fff34 	blx	r4                                            
  if ( !_System_state_Is_up( _System_state_Get() ) ) {                
    return true;                                                      
  }                                                                   
                                                                      
  if ( !_Heap_Walk_check_control( source, printer, heap ) ) {         
    return false;                                                     
a0006ea4:	e59d802c 	ldr	r8, [sp, #44]	; 0x2c                          
a0006ea8:	ea000092 	b	a00070f8 <_Heap_Walk+0x4b4>                     
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    prev_block = free_block;                                          
    free_block = free_block->next;                                    
a0006eac:	e1a0a008 	mov	sl, r8                                        
a0006eb0:	e5988008 	ldr	r8, [r8, #8]                                  
  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 ) {                            
a0006eb4:	e1580006 	cmp	r8, r6                                        
a0006eb8:	1affffca 	bne	a0006de8 <_Heap_Walk+0x1a4>                   
a0006ebc:	ea000000 	b	a0006ec4 <_Heap_Walk+0x280>                     
        block->prev_size                                              
      );                                                              
    }                                                                 
                                                                      
    block = next_block;                                               
  } while ( block != first_block );                                   
a0006ec0:	e1a07008 	mov	r7, r8                                        
                                                                      
  return true;                                                        
}                                                                     
a0006ec4:	e5973004 	ldr	r3, [r7, #4]                                  
  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;             
a0006ec8:	e5962020 	ldr	r2, [r6, #32]                                 
    - 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;                
a0006ecc:	e3c3a001 	bic	sl, r3, #1                                    
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(                      
  const Heap_Block *block,                                            
  uintptr_t offset                                                    
)                                                                     
{                                                                     
  return (Heap_Block *) ((uintptr_t) block + offset);                 
a0006ed0:	e087800a 	add	r8, r7, sl                                    
  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;             
a0006ed4:	e1520008 	cmp	r2, r8                                        
a0006ed8:	83a0b000 	movhi	fp, #0                                      
a0006edc:	8a000003 	bhi	a0006ef0 <_Heap_Walk+0x2ac>                   
a0006ee0:	e596b024 	ldr	fp, [r6, #36]	; 0x24                          
a0006ee4:	e15b0008 	cmp	fp, r8                                        
a0006ee8:	33a0b000 	movcc	fp, #0                                      
a0006eec:	23a0b001 	movcs	fp, #1                                      
    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;               
                                                                      
    if ( !_Heap_Is_block_in_heap( heap, next_block ) ) {              
a0006ef0:	e21bb0ff 	ands	fp, fp, #255	; 0xff                          
a0006ef4:	1a000006 	bne	a0006f14 <_Heap_Walk+0x2d0>                   
      (*printer)(                                                     
a0006ef8:	e58d8000 	str	r8, [sp]                                      
a0006efc:	e1a00005 	mov	r0, r5                                        
a0006f00:	e3a01001 	mov	r1, #1                                        
a0006f04:	e59f2250 	ldr	r2, [pc, #592]	; a000715c <_Heap_Walk+0x518>  
a0006f08:	e1a03007 	mov	r3, r7                                        
a0006f0c:	e12fff34 	blx	r4                                            
a0006f10:	ea000059 	b	a000707c <_Heap_Walk+0x438>                     
    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;               
a0006f14:	e59d2028 	ldr	r2, [sp, #40]	; 0x28                          
RTEMS_INLINE_ROUTINE bool _Heap_Is_aligned(                           
  uintptr_t value,                                                    
  uintptr_t alignment                                                 
)                                                                     
{                                                                     
  return (value % alignment) == 0;                                    
a0006f18:	e1a0000a 	mov	r0, sl                                        
a0006f1c:	e1a01009 	mov	r1, r9                                        
a0006f20:	e057b002 	subs	fp, r7, r2                                   
a0006f24:	13a0b001 	movne	fp, #1                                      
a0006f28:	e58d301c 	str	r3, [sp, #28]                                 
a0006f2c:	ebffe6d0 	bl	a0000a74 <__umodsi3>                           
      );                                                              
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    if ( !_Heap_Is_aligned( block_size, page_size ) && is_not_last_block ) {
a0006f30:	e3500000 	cmp	r0, #0                                        
a0006f34:	e59d301c 	ldr	r3, [sp, #28]                                 
a0006f38:	0a000005 	beq	a0006f54 <_Heap_Walk+0x310>                   
a0006f3c:	e35b0000 	cmp	fp, #0                                        
      (*printer)(                                                     
a0006f40:	158da000 	strne	sl, [sp]                                    
a0006f44:	11a00005 	movne	r0, r5                                      
a0006f48:	13a01001 	movne	r1, #1                                      
a0006f4c:	159f220c 	ldrne	r2, [pc, #524]	; a0007160 <_Heap_Walk+0x51c>
a0006f50:	1a000013 	bne	a0006fa4 <_Heap_Walk+0x360>                   
      );                                                              
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    if ( block_size < min_block_size && is_not_last_block ) {         
a0006f54:	e59dc024 	ldr	ip, [sp, #36]	; 0x24                          
a0006f58:	e15a000c 	cmp	sl, ip                                        
a0006f5c:	2a000008 	bcs	a0006f84 <_Heap_Walk+0x340>                   
a0006f60:	e35b0000 	cmp	fp, #0                                        
a0006f64:	0a000006 	beq	a0006f84 <_Heap_Walk+0x340>                   
      (*printer)(                                                     
a0006f68:	e88d1400 	stm	sp, {sl, ip}                                  
a0006f6c:	e1a00005 	mov	r0, r5                                        
a0006f70:	e3a01001 	mov	r1, #1                                        
a0006f74:	e59f21e8 	ldr	r2, [pc, #488]	; a0007164 <_Heap_Walk+0x520>  
a0006f78:	e1a03007 	mov	r3, r7                                        
a0006f7c:	e12fff34 	blx	r4                                            
a0006f80:	ea000064 	b	a0007118 <_Heap_Walk+0x4d4>                     
      );                                                              
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    if ( next_block_begin <= block_begin && is_not_last_block ) {     
a0006f84:	e1580007 	cmp	r8, r7                                        
a0006f88:	8a000008 	bhi	a0006fb0 <_Heap_Walk+0x36c>                   
a0006f8c:	e35b0000 	cmp	fp, #0                                        
a0006f90:	0a000006 	beq	a0006fb0 <_Heap_Walk+0x36c>                   
      (*printer)(                                                     
a0006f94:	e59f21cc 	ldr	r2, [pc, #460]	; a0007168 <_Heap_Walk+0x524>  
a0006f98:	e58d8000 	str	r8, [sp]                                      
a0006f9c:	e1a00005 	mov	r0, r5                                        
a0006fa0:	e3a01001 	mov	r1, #1                                        
a0006fa4:	e1a03007 	mov	r3, r7                                        
a0006fa8:	e12fff34 	blx	r4                                            
a0006fac:	ea000059 	b	a0007118 <_Heap_Walk+0x4d4>                     
  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;                 
a0006fb0:	e203b001 	and	fp, r3, #1                                    
a0006fb4:	e5983004 	ldr	r3, [r8, #4]                                  
      );                                                              
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    if ( !_Heap_Is_prev_used( next_block ) ) {                        
a0006fb8:	e3130001 	tst	r3, #1                                        
a0006fbc:	1a000038 	bne	a00070a4 <_Heap_Walk+0x460>                   
    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 ?                                 
a0006fc0:	e597200c 	ldr	r2, [r7, #12]                                 
  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)(                                                         
a0006fc4:	e5963008 	ldr	r3, [r6, #8]                                  
                                                                      
    block = next_block;                                               
  } while ( block != first_block );                                   
                                                                      
  return true;                                                        
}                                                                     
a0006fc8:	e596100c 	ldr	r1, [r6, #12]                                 
  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)(                                                         
a0006fcc:	e1520003 	cmp	r2, r3                                        
a0006fd0:	059f0194 	ldreq	r0, [pc, #404]	; a000716c <_Heap_Walk+0x528>
a0006fd4:	0a000003 	beq	a0006fe8 <_Heap_Walk+0x3a4>                   
    block,                                                            
    block_size,                                                       
    block->prev,                                                      
    block->prev == first_free_block ?                                 
      " (= first free)"                                               
        : (block->prev == free_list_head ? " (= head)" : ""),         
a0006fd8:	e59f3190 	ldr	r3, [pc, #400]	; a0007170 <_Heap_Walk+0x52c>  
a0006fdc:	e1520006 	cmp	r2, r6                                        
a0006fe0:	e59f018c 	ldr	r0, [pc, #396]	; a0007174 <_Heap_Walk+0x530>  
a0006fe4:	01a00003 	moveq	r0, r3                                      
    block->next,                                                      
    block->next == last_free_block ?                                  
a0006fe8:	e5973008 	ldr	r3, [r7, #8]                                  
  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)(                                                         
a0006fec:	e1530001 	cmp	r3, r1                                        
a0006ff0:	059f1180 	ldreq	r1, [pc, #384]	; a0007178 <_Heap_Walk+0x534>
a0006ff4:	0a000003 	beq	a0007008 <_Heap_Walk+0x3c4>                   
      " (= first free)"                                               
        : (block->prev == free_list_head ? " (= head)" : ""),         
    block->next,                                                      
    block->next == last_free_block ?                                  
      " (= last free)"                                                
        : (block->next == free_list_tail ? " (= tail)" : "")          
a0006ff8:	e59fc17c 	ldr	ip, [pc, #380]	; a000717c <_Heap_Walk+0x538>  
a0006ffc:	e1530006 	cmp	r3, r6                                        
a0007000:	e59f116c 	ldr	r1, [pc, #364]	; a0007174 <_Heap_Walk+0x530>  
a0007004:	01a0100c 	moveq	r1, ip                                      
  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)(                                                         
a0007008:	e58d2004 	str	r2, [sp, #4]                                  
a000700c:	e58d0008 	str	r0, [sp, #8]                                  
a0007010:	e58d300c 	str	r3, [sp, #12]                                 
a0007014:	e58d1010 	str	r1, [sp, #16]                                 
a0007018:	e1a03007 	mov	r3, r7                                        
a000701c:	e58da000 	str	sl, [sp]                                      
a0007020:	e1a00005 	mov	r0, r5                                        
a0007024:	e3a01000 	mov	r1, #0                                        
a0007028:	e59f2150 	ldr	r2, [pc, #336]	; a0007180 <_Heap_Walk+0x53c>  
a000702c:	e12fff34 	blx	r4                                            
    block->next == last_free_block ?                                  
      " (= last free)"                                                
        : (block->next == free_list_tail ? " (= tail)" : "")          
  );                                                                  
                                                                      
  if ( block_size != next_block->prev_size ) {                        
a0007030:	e5983000 	ldr	r3, [r8]                                      
a0007034:	e15a0003 	cmp	sl, r3                                        
a0007038:	0a000008 	beq	a0007060 <_Heap_Walk+0x41c>                   
    (*printer)(                                                       
a000703c:	e58d3004 	str	r3, [sp, #4]                                  
a0007040:	e58da000 	str	sl, [sp]                                      
a0007044:	e58d8008 	str	r8, [sp, #8]                                  
a0007048:	e1a00005 	mov	r0, r5                                        
a000704c:	e3a01001 	mov	r1, #1                                        
a0007050:	e59f212c 	ldr	r2, [pc, #300]	; a0007184 <_Heap_Walk+0x540>  
a0007054:	e1a03007 	mov	r3, r7                                        
a0007058:	e12fff34 	blx	r4                                            
a000705c:	ea00002d 	b	a0007118 <_Heap_Walk+0x4d4>                     
    );                                                                
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if ( !prev_used ) {                                                 
a0007060:	e35b0000 	cmp	fp, #0                                        
a0007064:	1a000006 	bne	a0007084 <_Heap_Walk+0x440>                   
    (*printer)(                                                       
a0007068:	e59f2118 	ldr	r2, [pc, #280]	; a0007188 <_Heap_Walk+0x544>  
a000706c:	e1a00005 	mov	r0, r5                                        
a0007070:	e3a01001 	mov	r1, #1                                        
a0007074:	e1a03007 	mov	r3, r7                                        
a0007078:	e12fff34 	blx	r4                                            
      return false;                                                   
    }                                                                 
                                                                      
    if ( !_Heap_Is_prev_used( next_block ) ) {                        
      if ( !_Heap_Walk_check_free_block( source, printer, heap, block ) ) {
        return false;                                                 
a000707c:	e1a0800b 	mov	r8, fp                                        
a0007080:	ea00001c 	b	a00070f8 <_Heap_Walk+0x4b4>                     
                                                                      
    block = next_block;                                               
  } while ( block != first_block );                                   
                                                                      
  return true;                                                        
}                                                                     
a0007084:	e5963008 	ldr	r3, [r6, #8]                                  
a0007088:	ea000002 	b	a0007098 <_Heap_Walk+0x454>                     
{                                                                     
  const Heap_Block *const free_list_tail = _Heap_Free_list_tail( heap );
  const Heap_Block *free_block = _Heap_Free_list_first( heap );       
                                                                      
  while ( free_block != free_list_tail ) {                            
    if ( free_block == block ) {                                      
a000708c:	e1530007 	cmp	r3, r7                                        
a0007090:	0a000014 	beq	a00070e8 <_Heap_Walk+0x4a4>                   
      return true;                                                    
    }                                                                 
    free_block = free_block->next;                                    
a0007094:	e5933008 	ldr	r3, [r3, #8]                                  
)                                                                     
{                                                                     
  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 ) {                            
a0007098:	e1530006 	cmp	r3, r6                                        
a000709c:	1afffffa 	bne	a000708c <_Heap_Walk+0x448>                   
a00070a0:	ea000017 	b	a0007104 <_Heap_Walk+0x4c0>                     
                                                                      
    if ( !_Heap_Is_prev_used( next_block ) ) {                        
      if ( !_Heap_Walk_check_free_block( source, printer, heap, block ) ) {
        return false;                                                 
      }                                                               
    } else if (prev_used) {                                           
a00070a4:	e35b0000 	cmp	fp, #0                                        
a00070a8:	0a000006 	beq	a00070c8 <_Heap_Walk+0x484>                   
      (*printer)(                                                     
a00070ac:	e58da000 	str	sl, [sp]                                      
a00070b0:	e1a00005 	mov	r0, r5                                        
a00070b4:	e3a01000 	mov	r1, #0                                        
a00070b8:	e59f20cc 	ldr	r2, [pc, #204]	; a000718c <_Heap_Walk+0x548>  
a00070bc:	e1a03007 	mov	r3, r7                                        
a00070c0:	e12fff34 	blx	r4                                            
a00070c4:	ea000007 	b	a00070e8 <_Heap_Walk+0x4a4>                     
        "block 0x%08x: size %u\n",                                    
        block,                                                        
        block_size                                                    
      );                                                              
    } else {                                                          
      (*printer)(                                                     
a00070c8:	e58da000 	str	sl, [sp]                                      
a00070cc:	e5973000 	ldr	r3, [r7]                                      
a00070d0:	e1a00005 	mov	r0, r5                                        
a00070d4:	e1a0100b 	mov	r1, fp                                        
a00070d8:	e58d3004 	str	r3, [sp, #4]                                  
a00070dc:	e59f20ac 	ldr	r2, [pc, #172]	; a0007190 <_Heap_Walk+0x54c>  
a00070e0:	e1a03007 	mov	r3, r7                                        
a00070e4:	e12fff34 	blx	r4                                            
        block->prev_size                                              
      );                                                              
    }                                                                 
                                                                      
    block = next_block;                                               
  } while ( block != first_block );                                   
a00070e8:	e59d2020 	ldr	r2, [sp, #32]                                 
a00070ec:	e1580002 	cmp	r8, r2                                        
a00070f0:	1affff72 	bne	a0006ec0 <_Heap_Walk+0x27c>                   
  Heap_Block *block = first_block;                                    
  Heap_Walk_printer printer = dump ?                                  
    _Heap_Walk_print : _Heap_Walk_print_nothing;                      
                                                                      
  if ( !_System_state_Is_up( _System_state_Get() ) ) {                
    return true;                                                      
a00070f4:	e3a08001 	mov	r8, #1                                        
                                                                      
    block = next_block;                                               
  } while ( block != first_block );                                   
                                                                      
  return true;                                                        
}                                                                     
a00070f8:	e1a00008 	mov	r0, r8                                        
a00070fc:	e28dd030 	add	sp, sp, #48	; 0x30                            
a0007100:	e8bd8ff0 	pop	{r4, r5, r6, r7, r8, r9, sl, fp, pc}          
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if ( !_Heap_Walk_is_in_free_list( heap, block ) ) {                 
    (*printer)(                                                       
a0007104:	e59f2088 	ldr	r2, [pc, #136]	; a0007194 <_Heap_Walk+0x550>  
a0007108:	e1a00005 	mov	r0, r5                                        
a000710c:	e3a01001 	mov	r1, #1                                        
a0007110:	e1a03007 	mov	r3, r7                                        
a0007114:	e12fff34 	blx	r4                                            
      return false;                                                   
    }                                                                 
                                                                      
    if ( !_Heap_Is_prev_used( next_block ) ) {                        
      if ( !_Heap_Walk_check_free_block( source, printer, heap, block ) ) {
        return false;                                                 
a0007118:	e3a08000 	mov	r8, #0                                        
a000711c:	eafffff5 	b	a00070f8 <_Heap_Walk+0x4b4>                     
                                                                      

a0005e20 <_TOD_Validate>: { uint32_t days_in_month; uint32_t ticks_per_second; ticks_per_second = TOD_MICROSECONDS_PER_SECOND / rtems_configuration_get_microseconds_per_tick();
a0005e20:	e59f30b4 	ldr	r3, [pc, #180]	; a0005edc <_TOD_Validate+0xbc>
 */                                                                   
                                                                      
bool _TOD_Validate(                                                   
  const rtems_time_of_day *the_tod                                    
)                                                                     
{                                                                     
a0005e24:	e92d4010 	push	{r4, lr}                                     
  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)                                  ||                  
a0005e28:	e2504000 	subs	r4, r0, #0                                   
{                                                                     
  uint32_t   days_in_month;                                           
  uint32_t   ticks_per_second;                                        
                                                                      
  ticks_per_second = TOD_MICROSECONDS_PER_SECOND /                    
	    rtems_configuration_get_microseconds_per_tick();                 
a0005e2c:	e593100c 	ldr	r1, [r3, #12]                                 
  if ((!the_tod)                                  ||                  
a0005e30:	0a000021 	beq	a0005ebc <_TOD_Validate+0x9c>                 
)                                                                     
{                                                                     
  uint32_t   days_in_month;                                           
  uint32_t   ticks_per_second;                                        
                                                                      
  ticks_per_second = TOD_MICROSECONDS_PER_SECOND /                    
a0005e34:	e59f00a4 	ldr	r0, [pc, #164]	; a0005ee0 <_TOD_Validate+0xc0>
a0005e38:	eb0042d5 	bl	a0016994 <__aeabi_uidiv>                       
	    rtems_configuration_get_microseconds_per_tick();                 
  if ((!the_tod)                                  ||                  
a0005e3c:	e5943018 	ldr	r3, [r4, #24]                                 
a0005e40:	e1530000 	cmp	r3, r0                                        
a0005e44:	2a000020 	bcs	a0005ecc <_TOD_Validate+0xac>                 
      (the_tod->ticks  >= ticks_per_second)       ||                  
a0005e48:	e5943014 	ldr	r3, [r4, #20]                                 
a0005e4c:	e353003b 	cmp	r3, #59	; 0x3b                                
a0005e50:	8a00001d 	bhi	a0005ecc <_TOD_Validate+0xac>                 
      (the_tod->second >= TOD_SECONDS_PER_MINUTE) ||                  
a0005e54:	e5943010 	ldr	r3, [r4, #16]                                 
a0005e58:	e353003b 	cmp	r3, #59	; 0x3b                                
a0005e5c:	8a00001a 	bhi	a0005ecc <_TOD_Validate+0xac>                 
      (the_tod->minute >= TOD_MINUTES_PER_HOUR)   ||                  
a0005e60:	e594300c 	ldr	r3, [r4, #12]                                 
a0005e64:	e3530017 	cmp	r3, #23                                       
a0005e68:	8a000017 	bhi	a0005ecc <_TOD_Validate+0xac>                 
      (the_tod->hour   >= TOD_HOURS_PER_DAY)      ||                  
      (the_tod->month  == 0)                      ||                  
a0005e6c:	e5943004 	ldr	r3, [r4, #4]                                  
	    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)      ||                  
a0005e70:	e3530000 	cmp	r3, #0                                        
a0005e74:	0a000012 	beq	a0005ec4 <_TOD_Validate+0xa4>                 
      (the_tod->month  == 0)                      ||                  
a0005e78:	e353000c 	cmp	r3, #12                                       
a0005e7c:	8a000012 	bhi	a0005ecc <_TOD_Validate+0xac>                 
      (the_tod->month  >  TOD_MONTHS_PER_YEAR)    ||                  
      (the_tod->year   <  TOD_BASE_YEAR)          ||                  
a0005e80:	e5942000 	ldr	r2, [r4]                                      
      (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)    ||                  
a0005e84:	e59f1058 	ldr	r1, [pc, #88]	; a0005ee4 <_TOD_Validate+0xc4> 
a0005e88:	e1520001 	cmp	r2, r1                                        
a0005e8c:	9a000010 	bls	a0005ed4 <_TOD_Validate+0xb4>                 
      (the_tod->year   <  TOD_BASE_YEAR)          ||                  
      (the_tod->day    == 0) )                                        
a0005e90:	e5940008 	ldr	r0, [r4, #8]                                  
      (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)          ||                  
a0005e94:	e3500000 	cmp	r0, #0                                        
a0005e98:	0a00000e 	beq	a0005ed8 <_TOD_Validate+0xb8>                 
      (the_tod->day    == 0) )                                        
     return false;                                                    
                                                                      
  if ( (the_tod->year % 4) == 0 )                                     
a0005e9c:	e3120003 	tst	r2, #3                                        
a0005ea0:	e59f2040 	ldr	r2, [pc, #64]	; a0005ee8 <_TOD_Validate+0xc8> 
    days_in_month = _TOD_Days_per_month[ 1 ][ the_tod->month ];       
a0005ea4:	0283300d 	addeq	r3, r3, #13                                 
  else                                                                
    days_in_month = _TOD_Days_per_month[ 0 ][ the_tod->month ];       
a0005ea8:	e7924103 	ldr	r4, [r2, r3, lsl #2]                          
 *    false - if the the_tod is invalid                               
 *                                                                    
 *  NOTE: This routine only works for leap-years through 2099.        
 */                                                                   
                                                                      
bool _TOD_Validate(                                                   
a0005eac:	e1500004 	cmp	r0, r4                                        
a0005eb0:	83a00000 	movhi	r0, #0                                      
a0005eb4:	93a00001 	movls	r0, #1                                      
a0005eb8:	e8bd8010 	pop	{r4, pc}                                      
      (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;                                                    
a0005ebc:	e1a00004 	mov	r0, r4                                        <== NOT EXECUTED
a0005ec0:	e8bd8010 	pop	{r4, pc}                                      <== NOT EXECUTED
a0005ec4:	e1a00003 	mov	r0, r3                                        <== NOT EXECUTED
a0005ec8:	e8bd8010 	pop	{r4, pc}                                      <== NOT EXECUTED
a0005ecc:	e3a00000 	mov	r0, #0                                        
a0005ed0:	e8bd8010 	pop	{r4, pc}                                      
a0005ed4:	e3a00000 	mov	r0, #0                                        
                                                                      
  if ( the_tod->day > days_in_month )                                 
    return false;                                                     
                                                                      
  return true;                                                        
}                                                                     
a0005ed8:	e8bd8010 	pop	{r4, pc}                                      
                                                                      

a0007140 <_Thread_Initialize>: Thread_CPU_budget_algorithms budget_algorithm, Thread_CPU_budget_algorithm_callout budget_callout, uint32_t isr_level, Objects_Name name ) {
a0007140:	e92d47f0 	push	{r4, r5, r6, r7, r8, r9, sl, lr}             
                                                                      
  /*                                                                  
   *  Zero out all the allocated memory fields                        
   */                                                                 
  for ( i=0 ; i <= THREAD_API_LAST ; i++ )                            
    the_thread->API_Extensions[i] = NULL;                             
a0007144:	e3a06000 	mov	r6, #0                                        
a0007148:	e58160f4 	str	r6, [r1, #244]	; 0xf4                         
a000714c:	e58160f8 	str	r6, [r1, #248]	; 0xf8                         
                                                                      
  extensions_area = NULL;                                             
  the_thread->libc_reent = NULL;                                      
a0007150:	e58160f0 	str	r6, [r1, #240]	; 0xf0                         
  Thread_CPU_budget_algorithms          budget_algorithm,             
  Thread_CPU_budget_algorithm_callout   budget_callout,               
  uint32_t                              isr_level,                    
  Objects_Name                          name                          
)                                                                     
{                                                                     
a0007154:	e1a05000 	mov	r5, r0                                        
a0007158:	e1a04001 	mov	r4, r1                                        
                                                                      
  /*                                                                  
   *  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 );
a000715c:	e1a00001 	mov	r0, r1                                        
a0007160:	e1a01003 	mov	r1, r3                                        
  Thread_CPU_budget_algorithms          budget_algorithm,             
  Thread_CPU_budget_algorithm_callout   budget_callout,               
  uint32_t                              isr_level,                    
  Objects_Name                          name                          
)                                                                     
{                                                                     
a0007164:	e1a07003 	mov	r7, r3                                        
a0007168:	e59da024 	ldr	sl, [sp, #36]	; 0x24                          
a000716c:	e5dd8028 	ldrb	r8, [sp, #40]	; 0x28                         
                                                                      
  /*                                                                  
   *  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 );
a0007170:	eb00020e 	bl	a00079b0 <_Thread_Stack_Allocate>              
    if ( !actual_stack_size || actual_stack_size < stack_size )       
a0007174:	e1500006 	cmp	r0, r6                                        
a0007178:	13a03000 	movne	r3, #0                                      
a000717c:	03a03001 	moveq	r3, #1                                      
a0007180:	e1500007 	cmp	r0, r7                                        
a0007184:	21a07003 	movcs	r7, r3                                      
a0007188:	33837001 	orrcc	r7, r3, #1                                  
a000718c:	e1570006 	cmp	r7, r6                                        
a0007190:	1a000058 	bne	a00072f8 <_Thread_Initialize+0x1b8>           
  Stack_Control *the_stack,                                           
  void          *starting_address,                                    
  size_t         size                                                 
)                                                                     
{                                                                     
  the_stack->area = starting_address;                                 
a0007194:	e59430bc 	ldr	r3, [r4, #188]	; 0xbc                         
  the_stack->size = size;                                             
a0007198:	e58400b4 	str	r0, [r4, #180]	; 0xb4                         
  Watchdog_Service_routine_entry  routine,                            
  Objects_Id                      id,                                 
  void                           *user_data                           
)                                                                     
{                                                                     
  the_watchdog->state     = WATCHDOG_INACTIVE;                        
a000719c:	e5847050 	str	r7, [r4, #80]	; 0x50                          
  Stack_Control *the_stack,                                           
  void          *starting_address,                                    
  size_t         size                                                 
)                                                                     
{                                                                     
  the_stack->area = starting_address;                                 
a00071a0:	e58430b8 	str	r3, [r4, #184]	; 0xb8                         
  #endif                                                              
                                                                      
  /*                                                                  
   *  Allocate the extensions area for this thread                    
   */                                                                 
  if ( _Thread_Maximum_extensions ) {                                 
a00071a4:	e59f315c 	ldr	r3, [pc, #348]	; a0007308 <_Thread_Initialize+0x1c8>
  the_watchdog->routine   = routine;                                  
a00071a8:	e5847064 	str	r7, [r4, #100]	; 0x64                         
  the_watchdog->id        = id;                                       
a00071ac:	e5847068 	str	r7, [r4, #104]	; 0x68                         
a00071b0:	e5936000 	ldr	r6, [r3]                                      
  the_watchdog->user_data = user_data;                                
a00071b4:	e584706c 	str	r7, [r4, #108]	; 0x6c                         
a00071b8:	e3560000 	cmp	r6, #0                                        
a00071bc:	0a000004 	beq	a00071d4 <_Thread_Initialize+0x94>            
    extensions_area = _Workspace_Allocate(                            
a00071c0:	e2866001 	add	r6, r6, #1                                    
a00071c4:	e1a00106 	lsl	r0, r6, #2                                    
a00071c8:	eb0003dc 	bl	a0008140 <_Workspace_Allocate>                 
      (_Thread_Maximum_extensions + 1) * sizeof( void * )             
    );                                                                
    if ( !extensions_area )                                           
a00071cc:	e2506000 	subs	r6, r0, #0                                   
a00071d0:	0a00002f 	beq	a0007294 <_Thread_Initialize+0x154>           
   * if they are linked to the thread. An extension user may          
   * create the extension long after tasks have been created          
   * so they cannot rely on the thread create user extension          
   * call.                                                            
   */                                                                 
  if ( the_thread->extensions ) {                                     
a00071d4:	e3560000 	cmp	r6, #0                                        
      (_Thread_Maximum_extensions + 1) * sizeof( void * )             
    );                                                                
    if ( !extensions_area )                                           
      goto failed;                                                    
  }                                                                   
  the_thread->extensions = (void **) extensions_area;                 
a00071d8:	e58460fc 	str	r6, [r4, #252]	; 0xfc                         
   * if they are linked to the thread. An extension user may          
   * create the extension long after tasks have been created          
   * so they cannot rely on the thread create user extension          
   * call.                                                            
   */                                                                 
  if ( the_thread->extensions ) {                                     
a00071dc:	0a000009 	beq	a0007208 <_Thread_Initialize+0xc8>            
    for ( i = 0; i <= _Thread_Maximum_extensions ; i++ )              
a00071e0:	e59f3120 	ldr	r3, [pc, #288]	; a0007308 <_Thread_Initialize+0x1c8>
a00071e4:	e1a02006 	mov	r2, r6                                        
a00071e8:	e5930000 	ldr	r0, [r3]                                      
a00071ec:	e3a03000 	mov	r3, #0                                        
      the_thread->extensions[i] = NULL;                               
a00071f0:	e1a01003 	mov	r1, r3                                        
a00071f4:	ea000001 	b	a0007200 <_Thread_Initialize+0xc0>              
a00071f8:	e4821004 	str	r1, [r2], #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++ )              
a00071fc:	e2833001 	add	r3, r3, #1                                    
a0007200:	e1530000 	cmp	r3, r0                                        
a0007204:	9afffffb 	bls	a00071f8 <_Thread_Initialize+0xb8>            
  /*                                                                  
   *  General initialization                                          
   */                                                                 
                                                                      
  the_thread->Start.is_preemptible   = is_preemptible;                
  the_thread->Start.budget_algorithm = budget_algorithm;              
a0007208:	e59d302c 	ldr	r3, [sp, #44]	; 0x2c                          
  Scheduler_Control *the_scheduler,                                   
  Thread_Control    *the_thread                                       
)                                                                     
{                                                                     
  return                                                              
    the_scheduler->Operations.scheduler_allocate( the_scheduler, the_thread );
a000720c:	e59f00f8 	ldr	r0, [pc, #248]	; a000730c <_Thread_Initialize+0x1cc>
  }                                                                   
                                                                      
  the_thread->Start.isr_level         = isr_level;                    
                                                                      
  the_thread->current_state           = STATES_DORMANT;               
  the_thread->Wait.queue              = NULL;                         
a0007210:	e3a07000 	mov	r7, #0                                        
  /*                                                                  
   *  General initialization                                          
   */                                                                 
                                                                      
  the_thread->Start.is_preemptible   = is_preemptible;                
  the_thread->Start.budget_algorithm = budget_algorithm;              
a0007214:	e58430a4 	str	r3, [r4, #164]	; 0xa4                         
  the_thread->Start.budget_callout   = budget_callout;                
a0007218:	e59d3030 	ldr	r3, [sp, #48]	; 0x30                          
    #endif                                                            
  }                                                                   
                                                                      
  the_thread->Start.isr_level         = isr_level;                    
                                                                      
  the_thread->current_state           = STATES_DORMANT;               
a000721c:	e3a09001 	mov	r9, #1                                        
                                                                      
  /*                                                                  
   *  General initialization                                          
   */                                                                 
                                                                      
  the_thread->Start.is_preemptible   = is_preemptible;                
a0007220:	e5c480a0 	strb	r8, [r4, #160]	; 0xa0                        
  the_thread->Start.budget_algorithm = budget_algorithm;              
  the_thread->Start.budget_callout   = budget_callout;                
a0007224:	e58430a8 	str	r3, [r4, #168]	; 0xa8                         
      case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT:                       
	break;                                                               
    #endif                                                            
  }                                                                   
                                                                      
  the_thread->Start.isr_level         = isr_level;                    
a0007228:	e59d3034 	ldr	r3, [sp, #52]	; 0x34                          
                                                                      
  the_thread->current_state           = STATES_DORMANT;               
a000722c:	e5849010 	str	r9, [r4, #16]                                 
  the_thread->Wait.queue              = NULL;                         
a0007230:	e5847044 	str	r7, [r4, #68]	; 0x44                          
      case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT:                       
	break;                                                               
    #endif                                                            
  }                                                                   
                                                                      
  the_thread->Start.isr_level         = isr_level;                    
a0007234:	e58430ac 	str	r3, [r4, #172]	; 0xac                         
                                                                      
  the_thread->current_state           = STATES_DORMANT;               
  the_thread->Wait.queue              = NULL;                         
  the_thread->resource_count          = 0;                            
a0007238:	e584701c 	str	r7, [r4, #28]                                 
  the_thread->real_priority           = priority;                     
a000723c:	e584a018 	str	sl, [r4, #24]                                 
  the_thread->Start.initial_priority  = priority;                     
a0007240:	e584a0b0 	str	sl, [r4, #176]	; 0xb0                         
RTEMS_INLINE_ROUTINE void* _Scheduler_Thread_scheduler_allocate(      
  Scheduler_Control *the_scheduler,                                   
  Thread_Control    *the_thread                                       
)                                                                     
{                                                                     
  return                                                              
a0007244:	e5903014 	ldr	r3, [r0, #20]                                 
a0007248:	e1a01004 	mov	r1, r4                                        
a000724c:	e12fff33 	blx	r3                                            
  sched =_Scheduler_Thread_scheduler_allocate( &_Scheduler, the_thread );
  if ( !sched )                                                       
a0007250:	e2508000 	subs	r8, r0, #0                                   
a0007254:	0a00000f 	beq	a0007298 <_Thread_Initialize+0x158>           
    goto failed;                                                      
  _Thread_Set_priority( the_thread, priority );                       
a0007258:	e1a00004 	mov	r0, r4                                        
a000725c:	e1a0100a 	mov	r1, sl                                        
a0007260:	eb000192 	bl	a00078b0 <_Thread_Set_priority>                
                                                                      
   _Thread_Stack_Free( the_thread );                                  
  return false;                                                       
                                                                      
                                                                      
}                                                                     
a0007264:	e595301c 	ldr	r3, [r5, #28]                                 
  Objects_Information *information,                                   
  Objects_Control     *the_object,                                    
  Objects_Name         name                                           
)                                                                     
{                                                                     
  _Objects_Set_local_object(                                          
a0007268:	e1d420b8 	ldrh	r2, [r4, #8]                                 
                                                                      
  /*                                                                  
   *  Initialize the CPU usage statistics                             
   */                                                                 
  #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__                          
    _Timestamp_Set_to_zero( &the_thread->cpu_time_used );             
a000726c:	e5847084 	str	r7, [r4, #132]	; 0x84                         
a0007270:	e5847088 	str	r7, [r4, #136]	; 0x88                         
  #if defined(RTEMS_DEBUG)                                            
    if ( index > information->maximum )                               
      return;                                                         
  #endif                                                              
                                                                      
  information->local_table[ index ] = the_object;                     
a0007274:	e7834102 	str	r4, [r3, r2, lsl #2]                          
    information,                                                      
    _Objects_Get_index( the_object->id ),                             
    the_object                                                        
  );                                                                  
                                                                      
  the_object->name = name;                                            
a0007278:	e59d3038 	ldr	r3, [sp, #56]	; 0x38                          
   *  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 );    
a000727c:	e1a00004 	mov	r0, r4                                        
a0007280:	e584300c 	str	r3, [r4, #12]                                 
a0007284:	eb0002ac 	bl	a0007d3c <_User_extensions_Thread_create>      
  if ( extension_status )                                             
a0007288:	e1500007 	cmp	r0, r7                                        
a000728c:	0a000001 	beq	a0007298 <_Thread_Initialize+0x158>           
a0007290:	ea00001a 	b	a0007300 <_Thread_Initialize+0x1c0>             
  size_t               actual_stack_size = 0;                         
  void                *stack = NULL;                                  
  #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )      
    void              *fp_area;                                       
  #endif                                                              
  void                *sched = NULL;                                  
a0007294:	e1a08006 	mov	r8, r6                                        
  extension_status = _User_extensions_Thread_create( the_thread );    
  if ( extension_status )                                             
    return true;                                                      
                                                                      
failed:                                                               
  if ( the_thread->libc_reent )                                       
a0007298:	e59400f0 	ldr	r0, [r4, #240]	; 0xf0                         
a000729c:	e3500000 	cmp	r0, #0                                        
a00072a0:	0a000000 	beq	a00072a8 <_Thread_Initialize+0x168>           
    _Workspace_Free( the_thread->libc_reent );                        
a00072a4:	eb0003ab 	bl	a0008158 <_Workspace_Free>                     
                                                                      
  for ( i=0 ; i <= THREAD_API_LAST ; i++ )                            
    if ( the_thread->API_Extensions[i] )                              
a00072a8:	e59400f4 	ldr	r0, [r4, #244]	; 0xf4                         
a00072ac:	e3500000 	cmp	r0, #0                                        
a00072b0:	0a000000 	beq	a00072b8 <_Thread_Initialize+0x178>           
      _Workspace_Free( the_thread->API_Extensions[i] );               
a00072b4:	eb0003a7 	bl	a0008158 <_Workspace_Free>                     
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] )                              
a00072b8:	e59400f8 	ldr	r0, [r4, #248]	; 0xf8                         
a00072bc:	e3500000 	cmp	r0, #0                                        
a00072c0:	0a000000 	beq	a00072c8 <_Thread_Initialize+0x188>           
      _Workspace_Free( the_thread->API_Extensions[i] );               
a00072c4:	eb0003a3 	bl	a0008158 <_Workspace_Free>                     <== NOT EXECUTED
                                                                      
  if ( extensions_area )                                              
a00072c8:	e3560000 	cmp	r6, #0                                        
a00072cc:	0a000001 	beq	a00072d8 <_Thread_Initialize+0x198>           
    (void) _Workspace_Free( extensions_area );                        
a00072d0:	e1a00006 	mov	r0, r6                                        
a00072d4:	eb00039f 	bl	a0008158 <_Workspace_Free>                     
  #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )      
    if ( fp_area )                                                    
      (void) _Workspace_Free( fp_area );                              
  #endif                                                              
                                                                      
  if ( sched )                                                        
a00072d8:	e3580000 	cmp	r8, #0                                        
a00072dc:	0a000001 	beq	a00072e8 <_Thread_Initialize+0x1a8>           
    (void) _Workspace_Free( sched );                                  
a00072e0:	e1a00008 	mov	r0, r8                                        
a00072e4:	eb00039b 	bl	a0008158 <_Workspace_Free>                     
                                                                      
   _Thread_Stack_Free( the_thread );                                  
a00072e8:	e1a00004 	mov	r0, r4                                        
a00072ec:	eb0001c6 	bl	a0007a0c <_Thread_Stack_Free>                  
  return false;                                                       
a00072f0:	e3a00000 	mov	r0, #0                                        
a00072f4:	e8bd87f0 	pop	{r4, r5, r6, r7, r8, r9, sl, pc}              
   *  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 */ 
a00072f8:	e1a00006 	mov	r0, r6                                        
a00072fc:	e8bd87f0 	pop	{r4, r5, r6, r7, r8, r9, sl, pc}              
   *  Mutex provides sufficient protection to let the user extensions 
   *  run safely.                                                     
   */                                                                 
  extension_status = _User_extensions_Thread_create( the_thread );    
  if ( extension_status )                                             
    return true;                                                      
a0007300:	e1a00009 	mov	r0, r9                                        
                                                                      
   _Thread_Stack_Free( the_thread );                                  
  return false;                                                       
                                                                      
                                                                      
}                                                                     
a0007304:	e8bd87f0 	pop	{r4, r5, r6, r7, r8, r9, sl, pc}              
                                                                      

a00096f8 <_Timespec_Greater_than>: bool _Timespec_Greater_than( const struct timespec *lhs, const struct timespec *rhs ) { if ( lhs->tv_sec > rhs->tv_sec )
a00096f8:	e5902000 	ldr	r2, [r0]                                      
a00096fc:	e5913000 	ldr	r3, [r1]                                      
a0009700:	e1520003 	cmp	r2, r3                                        
    return true;                                                      
a0009704:	c3a00001 	movgt	r0, #1                                      
bool _Timespec_Greater_than(                                          
  const struct timespec *lhs,                                         
  const struct timespec *rhs                                          
)                                                                     
{                                                                     
  if ( lhs->tv_sec > rhs->tv_sec )                                    
a0009708:	c12fff1e 	bxgt	lr                                           
    return true;                                                      
                                                                      
  if ( lhs->tv_sec < rhs->tv_sec )                                    
a000970c:	ba000005 	blt	a0009728 <_Timespec_Greater_than+0x30>        
                                                                      
#include <rtems/system.h>                                             
#include <rtems/score/timespec.h>                                     
#include <rtems/score/tod.h>                                          
                                                                      
bool _Timespec_Greater_than(                                          
a0009710:	e5900004 	ldr	r0, [r0, #4]                                  
a0009714:	e5913004 	ldr	r3, [r1, #4]                                  
a0009718:	e1500003 	cmp	r0, r3                                        
a000971c:	d3a00000 	movle	r0, #0                                      
a0009720:	c3a00001 	movgt	r0, #1                                      
a0009724:	e12fff1e 	bx	lr                                             
{                                                                     
  if ( lhs->tv_sec > rhs->tv_sec )                                    
    return true;                                                      
                                                                      
  if ( lhs->tv_sec < rhs->tv_sec )                                    
    return false;                                                     
a0009728:	e3a00000 	mov	r0, #0                                        <== NOT EXECUTED
  /* ASSERT: lhs->tv_sec == rhs->tv_sec */                            
  if ( lhs->tv_nsec > rhs->tv_nsec )                                  
    return true;                                                      
                                                                      
  return false;                                                       
}                                                                     
a000972c:	e12fff1e 	bx	lr                                             <== NOT EXECUTED
                                                                      

a0005b10 <rtems_chain_append_with_notification>: rtems_chain_control *chain, rtems_chain_node *node, rtems_id task, rtems_event_set events ) {
a0005b10:	e92d4030 	push	{r4, r5, lr}                                 
a0005b14:	e1a04002 	mov	r4, r2                                        
a0005b18:	e1a05003 	mov	r5, r3                                        
RTEMS_INLINE_ROUTINE bool rtems_chain_append_with_empty_check(        
  rtems_chain_control *chain,                                         
  rtems_chain_node *node                                              
)                                                                     
{                                                                     
  return _Chain_Append_with_empty_check( chain, node );               
a0005b1c:	eb000127 	bl	a0005fc0 <_Chain_Append_with_empty_check>      
  rtems_status_code sc = RTEMS_SUCCESSFUL;                            
  bool was_empty = rtems_chain_append_with_empty_check( chain, node );
                                                                      
  if ( was_empty ) {                                                  
a0005b20:	e3500000 	cmp	r0, #0                                        
a0005b24:	0a000003 	beq	a0005b38 <rtems_chain_append_with_notification+0x28>
    sc = rtems_event_send( task, events );                            
a0005b28:	e1a00004 	mov	r0, r4                                        
a0005b2c:	e1a01005 	mov	r1, r5                                        
  }                                                                   
                                                                      
  return sc;                                                          
}                                                                     
a0005b30:	e8bd4030 	pop	{r4, r5, lr}                                  
{                                                                     
  rtems_status_code sc = RTEMS_SUCCESSFUL;                            
  bool was_empty = rtems_chain_append_with_empty_check( chain, node );
                                                                      
  if ( was_empty ) {                                                  
    sc = rtems_event_send( task, events );                            
a0005b34:	eafffda5 	b	a00051d0 <rtems_event_send>                     
  }                                                                   
                                                                      
  return sc;                                                          
}                                                                     
a0005b38:	e8bd8030 	pop	{r4, r5, pc}                                  
                                                                      

a0005bc0 <rtems_chain_prepend_with_notification>: rtems_chain_control *chain, rtems_chain_node *node, rtems_id task, rtems_event_set events ) {
a0005bc0:	e92d4030 	push	{r4, r5, lr}                                 
a0005bc4:	e1a04002 	mov	r4, r2                                        
a0005bc8:	e1a05003 	mov	r5, r3                                        
RTEMS_INLINE_ROUTINE bool rtems_chain_prepend_with_empty_check(       
  rtems_chain_control *chain,                                         
  rtems_chain_node *node                                              
)                                                                     
{                                                                     
  return _Chain_Prepend_with_empty_check( chain, node );              
a0005bcc:	eb00014a 	bl	a00060fc <_Chain_Prepend_with_empty_check>     
  rtems_status_code sc = RTEMS_SUCCESSFUL;                            
  bool was_empty = rtems_chain_prepend_with_empty_check( chain, node );
                                                                      
  if (was_empty) {                                                    
a0005bd0:	e3500000 	cmp	r0, #0                                        
a0005bd4:	0a000003 	beq	a0005be8 <rtems_chain_prepend_with_notification+0x28>
    sc = rtems_event_send( task, events );                            
a0005bd8:	e1a00004 	mov	r0, r4                                        
a0005bdc:	e1a01005 	mov	r1, r5                                        
  }                                                                   
                                                                      
  return sc;                                                          
}                                                                     
a0005be0:	e8bd4030 	pop	{r4, r5, lr}                                  
{                                                                     
  rtems_status_code sc = RTEMS_SUCCESSFUL;                            
  bool was_empty = rtems_chain_prepend_with_empty_check( chain, node );
                                                                      
  if (was_empty) {                                                    
    sc = rtems_event_send( task, events );                            
a0005be4:	eafffd79 	b	a00051d0 <rtems_event_send>                     
  }                                                                   
                                                                      
  return sc;                                                          
}                                                                     
a0005be8:	e8bd8030 	pop	{r4, r5, pc}