RTEMS 4.11
Annotated Report
Sat Nov 27 13:44:39 2010

00014b0c <_CORE_message_queue_Broadcast>:                             
{                                                                     
  Thread_Control          *the_thread;                                
  uint32_t                 number_broadcasted;                        
  Thread_Wait_information *waitp;                                     
                                                                      
  if ( size > the_message_queue->maximum_message_size ) {             
   14b0c:	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                    
)                                                                     
{                                                                     
   14b10:	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 ) {             
   14b14:	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                    
)                                                                     
{                                                                     
   14b18:	e1a06000 	mov	r6, r0                                        
   14b1c:	e1a0a001 	mov	sl, r1                                        
   14b20:	e1a07002 	mov	r7, r2                                        
   14b24:	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 ) {             
   14b28:	8a000013 	bhi	14b7c <_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 ) {         
   14b2c:	e5905048 	ldr	r5, [r0, #72]	; 0x48                          
   14b30:	e3550000 	cmp	r5, #0                                        
    *count = 0;                                                       
   14b34:	13a00000 	movne	r0, #0                                      
   14b38:	15880000 	strne	r0, [r8]                                    
   *  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 ) {         
   14b3c:	0a000007 	beq	14b60 <_CORE_message_queue_Broadcast+0x54>    
   14b40:	e8bd85f0 	pop	{r4, r5, r6, r7, r8, sl, pc}                  
  const void *source,                                                 
  void       *destination,                                            
  size_t      size                                                    
)                                                                     
{                                                                     
  memcpy(destination, source, size);                                  
   14b44:	e594002c 	ldr	r0, [r4, #44]	; 0x2c                          
   14b48:	e1a0100a 	mov	r1, sl                                        
   14b4c:	e1a02007 	mov	r2, r7                                        
   14b50:	eb001e40 	bl	1c458 <memcpy>                                 
      buffer,                                                         
      waitp->return_argument_second.mutable_object,                   
      size                                                            
    );                                                                
                                                                      
    *(size_t *) the_thread->Wait.return_argument = size;              
   14b54:	e5943028 	ldr	r3, [r4, #40]	; 0x28                          
   14b58:	e5837000 	str	r7, [r3]                                      
   */                                                                 
  number_broadcasted = 0;                                             
  while ((the_thread =                                                
          _Thread_queue_Dequeue(&the_message_queue->Wait_queue))) {   
    waitp = &the_thread->Wait;                                        
    number_broadcasted += 1;                                          
   14b5c:	e2855001 	add	r5, r5, #1                                    
  /*                                                                  
   *  There must be no pending messages if there is a thread waiting to
   *  receive a message.                                              
   */                                                                 
  number_broadcasted = 0;                                             
  while ((the_thread =                                                
   14b60:	e1a00006 	mov	r0, r6                                        
   14b64:	eb000a41 	bl	17470 <_Thread_queue_Dequeue>                  
   14b68:	e2504000 	subs	r4, r0, #0                                   
   14b6c:	1afffff4 	bne	14b44 <_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;                                        
   14b70:	e5885000 	str	r5, [r8]                                      
  return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;                        
   14b74:	e1a00004 	mov	r0, r4                                        
   14b78:	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;                    
   14b7c:	e3a00001 	mov	r0, #1                                        <== NOT EXECUTED
    #endif                                                            
                                                                      
  }                                                                   
  *count = number_broadcasted;                                        
  return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;                        
}                                                                     
   14b80:	e8bd85f0 	pop	{r4, r5, r6, r7, r8, sl, pc}                  <== NOT EXECUTED
                                                                      

00009e78 <_CORE_mutex_Seize_interrupt_trylock>: #if defined(__RTEMS_DO_NOT_INLINE_CORE_MUTEX_SEIZE__) int _CORE_mutex_Seize_interrupt_trylock( CORE_mutex_Control *the_mutex, ISR_Level *level_p ) {
    9e78:	e1a03000 	mov	r3, r0                                        
{                                                                     
  Thread_Control   *executing;                                        
                                                                      
  /* disabled when you get here */                                    
                                                                      
  executing = _Thread_Executing;                                      
    9e7c:	e59f2124 	ldr	r2, [pc, #292]	; 9fa8 <_CORE_mutex_Seize_interrupt_trylock+0x130>
  executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL;         
  if ( !_CORE_mutex_Is_locked( the_mutex ) ) {                        
    9e80:	e593c050 	ldr	ip, [r3, #80]	; 0x50                          
  Thread_Control   *executing;                                        
                                                                      
  /* disabled when you get here */                                    
                                                                      
  executing = _Thread_Executing;                                      
  executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL;         
    9e84:	e3a00000 	mov	r0, #0                                        
{                                                                     
  Thread_Control   *executing;                                        
                                                                      
  /* disabled when you get here */                                    
                                                                      
  executing = _Thread_Executing;                                      
    9e88:	e5922004 	ldr	r2, [r2, #4]                                  
  executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL;         
  if ( !_CORE_mutex_Is_locked( the_mutex ) ) {                        
    9e8c:	e15c0000 	cmp	ip, r0                                        
    9e90:	e92d4010 	push	{r4, lr}                                     
  Thread_Control   *executing;                                        
                                                                      
  /* disabled when you get here */                                    
                                                                      
  executing = _Thread_Executing;                                      
  executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL;         
    9e94:	e5820034 	str	r0, [r2, #52]	; 0x34                          
  if ( !_CORE_mutex_Is_locked( the_mutex ) ) {                        
    9e98:	0a00002c 	beq	9f50 <_CORE_mutex_Seize_interrupt_trylock+0xd8>
    the_mutex->lock       = CORE_MUTEX_LOCKED;                        
    9e9c:	e5830050 	str	r0, [r3, #80]	; 0x50                          
    the_mutex->holder     = executing;                                
    the_mutex->holder_id  = executing->Object.id;                     
    9ea0:	e5920008 	ldr	r0, [r2, #8]                                  
    9ea4:	e5830060 	str	r0, [r3, #96]	; 0x60                          
    the_mutex->nest_count = 1;                                        
    9ea8:	e3a00001 	mov	r0, #1                                        
    9eac:	e5830054 	str	r0, [r3, #84]	; 0x54                          
  return _CORE_mutex_Seize_interrupt_trylock_body( the_mutex, level_p );
}                                                                     
    9eb0:	e5930048 	ldr	r0, [r3, #72]	; 0x48                          
    if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 
    9eb4:	e3500002 	cmp	r0, #2                                        
                                                                      
  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;                                
    9eb8:	e583205c 	str	r2, [r3, #92]	; 0x5c                          
    the_mutex->holder_id  = executing->Object.id;                     
    the_mutex->nest_count = 1;                                        
    if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) || 
    9ebc:	0a000001 	beq	9ec8 <_CORE_mutex_Seize_interrupt_trylock+0x50>
    9ec0:	e3500003 	cmp	r0, #3                                        
    9ec4:	1a000004 	bne	9edc <_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++;                                    
    9ec8:	e592c01c 	ldr	ip, [r2, #28]                                 
    }                                                                 
                                                                      
    if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) {
    9ecc:	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++;                                    
    9ed0:	e28c4001 	add	r4, ip, #1                                    
    9ed4:	e582401c 	str	r4, [r2, #28]                                 
    }                                                                 
                                                                      
    if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) {
    9ed8:	0a000000 	beq	9ee0 <_CORE_mutex_Seize_interrupt_trylock+0x68>
      _ISR_Enable( *level_p );                                        
    9edc:	ea00002b 	b	9f90 <_CORE_mutex_Seize_interrupt_trylock+0x118>
       */                                                             
    {                                                                 
      Priority_Control  ceiling;                                      
      Priority_Control  current;                                      
                                                                      
      ceiling = the_mutex->Attributes.priority_ceiling;               
    9ee0:	e593004c 	ldr	r0, [r3, #76]	; 0x4c                          
      current = executing->current_priority;                          
    9ee4:	e5924014 	ldr	r4, [r2, #20]                                 
      if ( current == ceiling ) {                                     
    9ee8:	e1540000 	cmp	r4, r0                                        
    9eec:	1a000000 	bne	9ef4 <_CORE_mutex_Seize_interrupt_trylock+0x7c>
        _ISR_Enable( *level_p );                                      
    9ef0:	ea000026 	b	9f90 <_CORE_mutex_Seize_interrupt_trylock+0x118>
        return 0;                                                     
      }                                                               
                                                                      
      if ( current > ceiling ) {                                      
    9ef4:	9a00000b 	bls	9f28 <_CORE_mutex_Seize_interrupt_trylock+0xb0>
	rtems_fatal_error_occurred( 99 );                                    
      }                                                               
    }                                                                 
  #endif                                                              
                                                                      
  _Thread_Dispatch_disable_level += 1;                                
    9ef8:	e59f20ac 	ldr	r2, [pc, #172]	; 9fac <_CORE_mutex_Seize_interrupt_trylock+0x134>
    9efc:	e5920000 	ldr	r0, [r2]                                      
    9f00:	e2800001 	add	r0, r0, #1                                    
    9f04:	e5820000 	str	r0, [r2]                                      
    9f08:	e5912000 	ldr	r2, [r1]                                      
    9f0c:	e129f002 	msr	CPSR_fc, r2                                   
        _Thread_Disable_dispatch();                                   
        _ISR_Enable( *level_p );                                      
        _Thread_Change_priority(                                      
    9f10:	e3a02000 	mov	r2, #0                                        
    9f14:	e593005c 	ldr	r0, [r3, #92]	; 0x5c                          
    9f18:	e593104c 	ldr	r1, [r3, #76]	; 0x4c                          
    9f1c:	ebfff333 	bl	6bf0 <_Thread_Change_priority>                 
          the_mutex->holder,                                          
          the_mutex->Attributes.priority_ceiling,                     
         false                                                        
        );                                                            
        _Thread_Enable_dispatch();                                    
    9f20:	ebfff457 	bl	7084 <_Thread_Enable_dispatch>                 
    9f24:	ea00001b 	b	9f98 <_CORE_mutex_Seize_interrupt_trylock+0x120>
        return 0;                                                     
      }                                                               
      /* if ( current < ceiling ) */ {                                
        executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED;
    9f28:	e3a00006 	mov	r0, #6                                        
    9f2c:	e5820034 	str	r0, [r2, #52]	; 0x34                          
        the_mutex->lock       = CORE_MUTEX_UNLOCKED;                  
    9f30:	e3a00001 	mov	r0, #1                                        
    9f34:	e5830050 	str	r0, [r3, #80]	; 0x50                          
        the_mutex->nest_count = 0;     /* undo locking above */       
    9f38:	e3a00000 	mov	r0, #0                                        
    9f3c:	e5830054 	str	r0, [r3, #84]	; 0x54                          
        executing->resource_count--;   /* undo locking above */       
    9f40:	e582c01c 	str	ip, [r2, #28]                                 
    9f44:	e5913000 	ldr	r3, [r1]                                      
    9f48:	e129f003 	msr	CPSR_fc, r3                                   
    9f4c:	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 ) ) {                  
    9f50:	e593005c 	ldr	r0, [r3, #92]	; 0x5c                          
    9f54:	e1500002 	cmp	r0, r2                                        
                                                                      
  /*                                                                  
   *  The mutex is not available and the caller must deal with the possibility
   *  of blocking.                                                    
   */                                                                 
  return 1;                                                           
    9f58:	13a00001 	movne	r0, #1                                      
  /*                                                                  
   *  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 ) ) {                  
    9f5c:	18bd8010 	popne	{r4, pc}                                    
    switch ( the_mutex->Attributes.lock_nesting_behavior ) {          
    9f60:	e5932040 	ldr	r2, [r3, #64]	; 0x40                          
    9f64:	e3520000 	cmp	r2, #0                                        
    9f68:	0a000002 	beq	9f78 <_CORE_mutex_Seize_interrupt_trylock+0x100>
    9f6c:	e3520001 	cmp	r2, #1                                        
    9f70:	1a00000a 	bne	9fa0 <_CORE_mutex_Seize_interrupt_trylock+0x128>
    9f74:	ea000003 	b	9f88 <_CORE_mutex_Seize_interrupt_trylock+0x110><== NOT EXECUTED
      case CORE_MUTEX_NESTING_ACQUIRES:                               
        the_mutex->nest_count++;                                      
    9f78:	e5932054 	ldr	r2, [r3, #84]	; 0x54                          
    9f7c:	e2822001 	add	r2, r2, #1                                    
    9f80:	e5832054 	str	r2, [r3, #84]	; 0x54                          
        _ISR_Enable( *level_p );                                      
    9f84:	ea000001 	b	9f90 <_CORE_mutex_Seize_interrupt_trylock+0x118>
        return 0;                                                     
      case CORE_MUTEX_NESTING_IS_ERROR:                               
        executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED;
    9f88:	e3a03002 	mov	r3, #2                                        <== NOT EXECUTED
    9f8c:	e5803034 	str	r3, [r0, #52]	; 0x34                          <== NOT EXECUTED
    9f90:	e5913000 	ldr	r3, [r1]                                      
    9f94:	e129f003 	msr	CPSR_fc, r3                                   
        _ISR_Enable( *level_p );                                      
        return 0;                                                     
    9f98:	e3a00000 	mov	r0, #0                                        
    9f9c:	e8bd8010 	pop	{r4, pc}                                      
                                                                      
  /*                                                                  
   *  The mutex is not available and the caller must deal with the possibility
   *  of blocking.                                                    
   */                                                                 
  return 1;                                                           
    9fa0:	e3a00001 	mov	r0, #1                                        
    9fa4:	e8bd8010 	pop	{r4, pc}                                      
                                                                      

0000a530 <_Heap_Extend>: Heap_Control *heap, void *extend_area_begin_ptr, uintptr_t extend_area_size, uintptr_t *extended_size_ptr ) {
    a530:	e92d4ff0 	push	{r4, r5, r6, r7, r8, r9, sl, fp, lr}         
    a534:	e1a05001 	mov	r5, r1                                        
  Heap_Statistics *const stats = &heap->stats;                        
  Heap_Block *const first_block = heap->first_block;                  
    a538:	e5901020 	ldr	r1, [r0, #32]                                 
  Heap_Control *heap,                                                 
  void *extend_area_begin_ptr,                                        
  uintptr_t extend_area_size,                                         
  uintptr_t *extended_size_ptr                                        
)                                                                     
{                                                                     
    a53c:	e24dd028 	sub	sp, sp, #40	; 0x28                            
    a540:	e58d3018 	str	r3, [sp, #24]                                 
  Heap_Statistics *const stats = &heap->stats;                        
  Heap_Block *const first_block = heap->first_block;                  
    a544:	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;                        
    a548:	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;                       
    a54c:	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;                              
    a550:	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 ) {                        
    a554:	e0956002 	adds	r6, r5, r2                                   
  Heap_Control *heap,                                                 
  void *extend_area_begin_ptr,                                        
  uintptr_t extend_area_size,                                         
  uintptr_t *extended_size_ptr                                        
)                                                                     
{                                                                     
    a558:	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;                        
    a55c:	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;                              
    a560:	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;              
    a564:	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;                               
    a568:	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;                       
    a56c:	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;                                                     
    a570:	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 ) {                        
    a574:	2a00009d 	bcs	a7f0 <_Heap_Extend+0x2c0>                     
    return false;                                                     
  }                                                                   
                                                                      
  extend_area_ok = _Heap_Get_first_and_last_block(                    
    a578:	e28d1024 	add	r1, sp, #36	; 0x24                            
    a57c:	e58d1000 	str	r1, [sp]                                      
    a580:	e28d1020 	add	r1, sp, #32                                   
    a584:	e58d1004 	str	r1, [sp, #4]                                  
    a588:	e1a00005 	mov	r0, r5                                        
    a58c:	e1a01002 	mov	r1, r2                                        
    a590:	e59d2014 	ldr	r2, [sp, #20]                                 
    a594:	ebffeeda 	bl	6104 <_Heap_Get_first_and_last_block>          
    page_size,                                                        
    min_block_size,                                                   
    &extend_first_block,                                              
    &extend_last_block                                                
  );                                                                  
  if (!extend_area_ok ) {                                             
    a598:	e3500000 	cmp	r0, #0                                        
    a59c:	0a000093 	beq	a7f0 <_Heap_Extend+0x2c0>                     
    a5a0:	e59da010 	ldr	sl, [sp, #16]                                 
    a5a4:	e1a07008 	mov	r7, r8                                        
    a5a8:	e1a09008 	mov	r9, r8                                        
    return false;                                                     
  }                                                                   
                                                                      
  do {                                                                
    uintptr_t const sub_area_begin = (start_block != first_block) ?   
      (uintptr_t) start_block : heap->area_begin;                     
    a5ac:	e5941018 	ldr	r1, [r4, #24]                                 
    a5b0:	e1a03008 	mov	r3, r8                                        
    a5b4:	e1a0c004 	mov	ip, r4                                        
    a5b8:	ea000000 	b	a5c0 <_Heap_Extend+0x90>                        
    a5bc:	e1a0100a 	mov	r1, sl                                        
    uintptr_t const sub_area_end = start_block->prev_size;            
    a5c0:	e59a4000 	ldr	r4, [sl]                                      
    Heap_Block *const end_block =                                     
      _Heap_Block_of_alloc_area( sub_area_end, page_size );           
                                                                      
    if (                                                              
    a5c4:	e1560001 	cmp	r6, r1                                        
    a5c8:	93a00000 	movls	r0, #0                                      
    a5cc:	83a00001 	movhi	r0, #1                                      
    a5d0:	e1550004 	cmp	r5, r4                                        
    a5d4:	23a00000 	movcs	r0, #0                                      
    a5d8:	e3500000 	cmp	r0, #0                                        
    a5dc:	1a000082 	bne	a7ec <_Heap_Extend+0x2bc>                     
      sub_area_end > extend_area_begin && extend_area_end > sub_area_begin
    ) {                                                               
      return false;                                                   
    }                                                                 
                                                                      
    if ( extend_area_end == sub_area_begin ) {                        
    a5e0:	e1560001 	cmp	r6, r1                                        
    a5e4:	01a0300a 	moveq	r3, sl                                      
    a5e8:	0a000001 	beq	a5f4 <_Heap_Extend+0xc4>                      
      merge_below_block = start_block;                                
    } else if ( extend_area_end < sub_area_end ) {                    
    a5ec:	e1560004 	cmp	r6, r4                                        
    a5f0:	31a0900a 	movcc	r9, sl                                      
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(                      
  uintptr_t value,                                                    
  uintptr_t alignment                                                 
)                                                                     
{                                                                     
  return value - (value % alignment);                                 
    a5f4:	e1a00004 	mov	r0, r4                                        
    a5f8:	e59d1014 	ldr	r1, [sp, #20]                                 
    a5fc:	e58d300c 	str	r3, [sp, #12]                                 
    a600:	e58dc008 	str	ip, [sp, #8]                                  
    a604:	eb001531 	bl	fad0 <__umodsi3>                               
    a608:	e244b008 	sub	fp, r4, #8                                    
      link_below_block = start_block;                                 
    }                                                                 
                                                                      
    if ( sub_area_end == extend_area_begin ) {                        
    a60c:	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);                                        
    a610:	e060000b 	rsb	r0, r0, fp                                    
    a614:	e59d300c 	ldr	r3, [sp, #12]                                 
    a618:	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 )   
    a61c:	01a07000 	moveq	r7, r0                                      
      start_block->prev_size = extend_area_end;                       
    a620:	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 ) {                        
    a624:	0a000000 	beq	a62c <_Heap_Extend+0xfc>                      
    a628:	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;                
    a62c:	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 );                             
    a630:	e59d2010 	ldr	r2, [sp, #16]                                 
    a634:	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);                 
    a638:	e080a00a 	add	sl, r0, sl                                    
    a63c:	e15a0002 	cmp	sl, r2                                        
    a640:	1affffdd 	bne	a5bc <_Heap_Extend+0x8c>                      
    a644:	e1a02009 	mov	r2, r9                                        
    a648:	e1a09003 	mov	r9, r3                                        
                                                                      
  if ( extend_area_begin < heap->area_begin ) {                       
    a64c:	e59c3018 	ldr	r3, [ip, #24]                                 
    a650:	e1550003 	cmp	r5, r3                                        
    a654:	e1a0400c 	mov	r4, ip                                        
    heap->area_begin = extend_area_begin;                             
    a658:	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 ) {                       
    a65c:	3a000002 	bcc	a66c <_Heap_Extend+0x13c>                     
    heap->area_begin = extend_area_begin;                             
  } else if ( heap->area_end < extend_area_end ) {                    
    a660:	e59c301c 	ldr	r3, [ip, #28]                                 
    a664:	e1530006 	cmp	r3, r6                                        
    heap->area_end = extend_area_end;                                 
    a668:	358c601c 	strcc	r6, [ip, #28]                               
  }                                                                   
                                                                      
  extend_first_block_size =                                           
    (uintptr_t) extend_last_block - (uintptr_t) extend_first_block;   
    a66c:	e59d1024 	ldr	r1, [sp, #36]	; 0x24                          
    a670:	e59d3020 	ldr	r3, [sp, #32]                                 
    heap->area_begin = extend_area_begin;                             
  } else if ( heap->area_end < extend_area_end ) {                    
    heap->area_end = extend_area_end;                                 
  }                                                                   
                                                                      
  extend_first_block_size =                                           
    a674:	e0610003 	rsb	r0, r1, r3                                    
    (uintptr_t) extend_last_block - (uintptr_t) extend_first_block;   
                                                                      
  extend_first_block->prev_size = extend_area_end;                    
    a678:	e5816000 	str	r6, [r1]                                      
  extend_first_block->size_and_flag =                                 
    extend_first_block_size | HEAP_PREV_BLOCK_USED;                   
    a67c:	e380c001 	orr	ip, r0, #1                                    
  _Heap_Protection_block_initialize( heap, extend_first_block );      
                                                                      
  extend_last_block->prev_size = extend_first_block_size;             
    a680:	e5830000 	str	r0, [r3]                                      
  extend_last_block->size_and_flag = 0;                               
    a684:	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 =                                 
    a688:	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;                               
    a68c:	e5830004 	str	r0, [r3, #4]                                  
  _Heap_Protection_block_initialize( heap, extend_last_block );       
                                                                      
  if ( (uintptr_t) extend_first_block < (uintptr_t) heap->first_block ) {
    a690:	e5940020 	ldr	r0, [r4, #32]                                 
    a694:	e1500001 	cmp	r0, r1                                        
    heap->first_block = extend_first_block;                           
    a698:	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 ) {
    a69c:	8a000002 	bhi	a6ac <_Heap_Extend+0x17c>                     
    heap->first_block = extend_first_block;                           
  } else if ( (uintptr_t) extend_last_block > (uintptr_t) heap->last_block ) {
    a6a0:	e5941024 	ldr	r1, [r4, #36]	; 0x24                          
    a6a4:	e1510003 	cmp	r1, r3                                        
    heap->last_block = extend_last_block;                             
    a6a8:	35843024 	strcc	r3, [r4, #36]	; 0x24                        
  }                                                                   
                                                                      
  if ( merge_below_block != NULL ) {                                  
    a6ac:	e3590000 	cmp	r9, #0                                        
    a6b0:	0a000010 	beq	a6f8 <_Heap_Extend+0x1c8>                     
  Heap_Control *heap,                                                 
  uintptr_t extend_area_begin,                                        
  Heap_Block *first_block                                             
)                                                                     
{                                                                     
  uintptr_t const page_size = heap->page_size;                        
    a6b4:	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 );
    a6b8:	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;                            
    a6bc:	e1a00005 	mov	r0, r5                                        <== NOT EXECUTED
    a6c0:	e1a0100a 	mov	r1, sl                                        <== NOT EXECUTED
    a6c4:	eb001501 	bl	fad0 <__umodsi3>                               <== NOT EXECUTED
                                                                      
  if ( remainder != 0 ) {                                             
    a6c8:	e3500000 	cmp	r0, #0                                        <== NOT EXECUTED
    return value - remainder + alignment;                             
    a6cc:	1085500a 	addne	r5, r5, sl                                  <== NOT EXECUTED
    a6d0:	10605005 	rsbne	r5, r0, r5                                  <== 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;                
    a6d4:	e5993000 	ldr	r3, [r9]                                      <== 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 =                             
    a6d8:	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;                
    a6dc:	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 =                              
    a6e0:	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;
    a6e4:	e3833001 	orr	r3, r3, #1                                    <== NOT EXECUTED
    a6e8:	e5053004 	str	r3, [r5, #-4]                                 <== NOT EXECUTED
                                                                      
  _Heap_Free_block( heap, new_first_block );                          
    a6ec:	e1a00004 	mov	r0, r4                                        <== NOT EXECUTED
    a6f0:	ebffff86 	bl	a510 <_Heap_Free_block>                        <== NOT EXECUTED
    a6f4:	ea000004 	b	a70c <_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 ) {                            
    a6f8:	e3520000 	cmp	r2, #0                                        
    _Heap_Link_below(                                                 
    a6fc:	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;           
    a700:	10632002 	rsbne	r2, r3, r2                                  
    a704:	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 =                                         
    a708:	15832004 	strne	r2, [r3, #4]                                
      link_below_block,                                               
      extend_last_block                                               
    );                                                                
  }                                                                   
                                                                      
  if ( merge_above_block != NULL ) {                                  
    a70c:	e3570000 	cmp	r7, #0                                        
    a710:	0a000012 	beq	a760 <_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,      
    a714:	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(             
    a718:	e0676006 	rsb	r6, r7, r6                                    
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(                      
  uintptr_t value,                                                    
  uintptr_t alignment                                                 
)                                                                     
{                                                                     
  return value - (value % alignment);                                 
    a71c:	e5941010 	ldr	r1, [r4, #16]                                 
    a720:	e1a00006 	mov	r0, r6                                        
    a724:	eb0014e9 	bl	fad0 <__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)                 
    a728:	e5972004 	ldr	r2, [r7, #4]                                  
    a72c:	e0606006 	rsb	r6, r0, r6                                    
    a730:	e0662002 	rsb	r2, r6, r2                                    
    page_size                                                         
  );                                                                  
  Heap_Block *const new_last_block =                                  
    _Heap_Block_at( last_block, last_block_new_size );                
                                                                      
  new_last_block->size_and_flag =                                     
    a734:	e0863007 	add	r3, r6, r7                                    
    (last_block->size_and_flag - last_block_new_size)                 
      | HEAP_PREV_BLOCK_USED;                                         
    a738:	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 =                                     
    a73c:	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;       
    a740:	e5973004 	ldr	r3, [r7, #4]                                  
    a744:	e2033001 	and	r3, r3, #1                                    
                                                                      
  block->size_and_flag = size | flag;                                 
    a748:	e1866003 	orr	r6, r6, r3                                    
    a74c:	e5876004 	str	r6, [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 );                               
    a750:	e1a00004 	mov	r0, r4                                        
    a754:	e1a01007 	mov	r1, r7                                        
    a758:	ebffff6c 	bl	a510 <_Heap_Free_block>                        
    a75c:	ea00000b 	b	a790 <_Heap_Extend+0x260>                       
    );                                                                
  }                                                                   
                                                                      
  if ( merge_above_block != NULL ) {                                  
    _Heap_Merge_above( heap, merge_above_block, extend_area_end );    
  } else if ( link_above_block != NULL ) {                            
    a760:	e3580000 	cmp	r8, #0                                        
    a764:	0a000009 	beq	a790 <_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;       
    a768:	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 );       
    a76c:	e59d1024 	ldr	r1, [sp, #36]	; 0x24                          
    a770:	e2022001 	and	r2, r2, #1                                    
    a774:	e0681001 	rsb	r1, r8, r1                                    
                                                                      
  block->size_and_flag = size | flag;                                 
    a778:	e1812002 	orr	r2, r1, r2                                    
  }                                                                   
                                                                      
  if ( merge_above_block != NULL ) {                                  
    _Heap_Merge_above( heap, merge_above_block, extend_area_end );    
  } else if ( link_above_block != NULL ) {                            
    _Heap_Link_above(                                                 
    a77c:	e59d3020 	ldr	r3, [sp, #32]                                 
    a780:	e5882004 	str	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 );       
                                                                      
  last_block->size_and_flag |= HEAP_PREV_BLOCK_USED;                  
    a784:	e5932004 	ldr	r2, [r3, #4]                                  
    a788:	e3822001 	orr	r2, r2, #1                                    
    a78c:	e5832004 	str	r2, [r3, #4]                                  
      extend_first_block,                                             
      extend_last_block                                               
    );                                                                
  }                                                                   
                                                                      
  if ( merge_below_block == NULL && merge_above_block == NULL ) {     
    a790:	e3570000 	cmp	r7, #0                                        
    a794:	03590000 	cmpeq	r9, #0                                      
    _Heap_Free_block( heap, extend_first_block );                     
    a798:	01a00004 	moveq	r0, r4                                      
    a79c:	059d1024 	ldreq	r1, [sp, #36]	; 0x24                        
    a7a0:	0bffff5a 	bleq	a510 <_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      
    a7a4:	e2841020 	add	r1, r4, #32                                   
    a7a8:	e891000a 	ldm	r1, {r1, r3}                                  
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;       
    a7ac:	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(                                               
    a7b0:	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;       
    a7b4:	e2022001 	and	r2, r2, #1                                    
                                                                      
  block->size_and_flag = size | flag;                                 
    a7b8:	e1812002 	orr	r2, r1, r2                                    
    a7bc:	e5832004 	str	r2, [r3, #4]                                  
  }                                                                   
                                                                      
  _Heap_Set_last_block_size( heap );                                  
                                                                      
  extended_size = stats->free_size - free_size;                       
    a7c0:	e59d101c 	ldr	r1, [sp, #28]                                 
    a7c4:	e284202c 	add	r2, r4, #44	; 0x2c                            
    a7c8:	e892000c 	ldm	r2, {r2, r3}                                  
    a7cc:	e0613003 	rsb	r3, r1, r3                                    
                                                                      
  /* Statistics */                                                    
  stats->size += extended_size;                                       
    a7d0:	e0822003 	add	r2, r2, r3                                    
    a7d4:	e584202c 	str	r2, [r4, #44]	; 0x2c                          
                                                                      
  if ( extended_size_ptr != NULL )                                    
    a7d8:	e59d2018 	ldr	r2, [sp, #24]                                 
    a7dc:	e3520000 	cmp	r2, #0                                        
    *extended_size_ptr = extended_size;                               
    a7e0:	15823000 	strne	r3, [r2]                                    
                                                                      
  return true;                                                        
    a7e4:	e3a00001 	mov	r0, #1                                        
    a7e8:	ea000000 	b	a7f0 <_Heap_Extend+0x2c0>                       
      _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;                                                   
    a7ec:	e3a00000 	mov	r0, #0                                        
                                                                      
  if ( extended_size_ptr != NULL )                                    
    *extended_size_ptr = extended_size;                               
                                                                      
  return true;                                                        
}                                                                     
    a7f0:	e28dd028 	add	sp, sp, #40	; 0x28                            
    a7f4:	e8bd8ff0 	pop	{r4, r5, r6, r7, r8, r9, sl, fp, pc}          
                                                                      

00006c64 <_Heap_Walk>: bool _Heap_Walk( Heap_Control *heap, int source, bool dump ) {
    6c64:	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;              
    6c68:	e5903014 	ldr	r3, [r0, #20]                                 
bool _Heap_Walk(                                                      
  Heap_Control *heap,                                                 
  int source,                                                         
  bool dump                                                           
)                                                                     
{                                                                     
    6c6c:	e24dd030 	sub	sp, sp, #48	; 0x30                            
  uintptr_t const page_size = heap->page_size;                        
  uintptr_t const min_block_size = heap->min_block_size;              
    6c70:	e58d3024 	str	r3, [sp, #36]	; 0x24                          
  Heap_Block *const first_block = heap->first_block;                  
  Heap_Block *const last_block = heap->last_block;                    
    6c74:	e5903024 	ldr	r3, [r0, #36]	; 0x24                          
  Heap_Block *block = first_block;                                    
  Heap_Walk_printer printer = dump ?                                  
    _Heap_Walk_print : _Heap_Walk_print_nothing;                      
    6c78:	e59f4500 	ldr	r4, [pc, #1280]	; 7180 <_Heap_Walk+0x51c>     
)                                                                     
{                                                                     
  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;                  
  Heap_Block *const last_block = heap->last_block;                    
    6c7c:	e58d3028 	str	r3, [sp, #40]	; 0x28                          
  Heap_Block *block = first_block;                                    
  Heap_Walk_printer printer = dump ?                                  
    _Heap_Walk_print : _Heap_Walk_print_nothing;                      
    6c80:	e59f34fc 	ldr	r3, [pc, #1276]	; 7184 <_Heap_Walk+0x520>     
    6c84:	e31200ff 	tst	r2, #255	; 0xff                               
    6c88:	11a04003 	movne	r4, r3                                      
                                                                      
  if ( !_System_state_Is_up( _System_state_Get() ) ) {                
    6c8c:	e59f34f4 	ldr	r3, [pc, #1268]	; 7188 <_Heap_Walk+0x524>     
    6c90:	e5933000 	ldr	r3, [r3]                                      
  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;                  
    6c94:	e590c020 	ldr	ip, [r0, #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() ) ) {                
    6c98:	e3530003 	cmp	r3, #3                                        
bool _Heap_Walk(                                                      
  Heap_Control *heap,                                                 
  int source,                                                         
  bool dump                                                           
)                                                                     
{                                                                     
    6c9c:	e1a06000 	mov	r6, r0                                        
    6ca0:	e1a05001 	mov	r5, r1                                        
  uintptr_t const page_size = heap->page_size;                        
    6ca4:	e5909010 	ldr	r9, [r0, #16]                                 
  uintptr_t const min_block_size = heap->min_block_size;              
  Heap_Block *const first_block = heap->first_block;                  
    6ca8:	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() ) ) {                
    6cac:	1a000127 	bne	7150 <_Heap_Walk+0x4ec>                       
  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)(                                                         
    6cb0:	e59dc024 	ldr	ip, [sp, #36]	; 0x24                          
    6cb4:	e58dc000 	str	ip, [sp]                                      
    6cb8:	e5903018 	ldr	r3, [r0, #24]                                 
    6cbc:	e58d3004 	str	r3, [sp, #4]                                  
    6cc0:	e590301c 	ldr	r3, [r0, #28]                                 
    6cc4:	e59d2020 	ldr	r2, [sp, #32]                                 
    6cc8:	e58d3008 	str	r3, [sp, #8]                                  
    6ccc:	e59d3028 	ldr	r3, [sp, #40]	; 0x28                          
    6cd0:	e58d200c 	str	r2, [sp, #12]                                 
    6cd4:	e58d3010 	str	r3, [sp, #16]                                 
    6cd8:	e5903008 	ldr	r3, [r0, #8]                                  
    6cdc:	e58d3014 	str	r3, [sp, #20]                                 
    6ce0:	e590300c 	ldr	r3, [r0, #12]                                 
    6ce4:	e59f24a0 	ldr	r2, [pc, #1184]	; 718c <_Heap_Walk+0x528>     
    6ce8:	e58d3018 	str	r3, [sp, #24]                                 
    6cec:	e1a00001 	mov	r0, r1                                        
    6cf0:	e1a03009 	mov	r3, r9                                        
    6cf4:	e3a01000 	mov	r1, #0                                        
    6cf8:	e1a0e00f 	mov	lr, pc                                        
    6cfc:	e12fff14 	bx	r4                                             
    heap->area_begin, heap->area_end,                                 
    first_block, last_block,                                          
    first_free_block, last_free_block                                 
  );                                                                  
                                                                      
  if ( page_size == 0 ) {                                             
    6d00:	e3590000 	cmp	r9, #0                                        
    6d04:	1a000006 	bne	6d24 <_Heap_Walk+0xc0>                        
    (*printer)( source, true, "page size is zero\n" );                
    6d08:	e1a00005 	mov	r0, r5                                        
    6d0c:	e3a01001 	mov	r1, #1                                        
    6d10:	e59f2478 	ldr	r2, [pc, #1144]	; 7190 <_Heap_Walk+0x52c>     
    6d14:	e1a0e00f 	mov	lr, pc                                        
    6d18:	e12fff14 	bx	r4                                             
  if ( !_System_state_Is_up( _System_state_Get() ) ) {                
    return true;                                                      
  }                                                                   
                                                                      
  if ( !_Heap_Walk_check_control( source, printer, heap ) ) {         
    return false;                                                     
    6d1c:	e1a08009 	mov	r8, r9                                        
    6d20:	ea00010b 	b	7154 <_Heap_Walk+0x4f0>                         
    (*printer)( source, true, "page size is zero\n" );                
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if ( !_Addresses_Is_aligned( (void *) page_size ) ) {               
    6d24:	e2198007 	ands	r8, r9, #7                                   
    (*printer)(                                                       
    6d28:	11a00005 	movne	r0, r5                                      
    6d2c:	13a01001 	movne	r1, #1                                      
    6d30:	159f245c 	ldrne	r2, [pc, #1116]	; 7194 <_Heap_Walk+0x530>   
    6d34:	11a03009 	movne	r3, r9                                      
    6d38:	1a00010c 	bne	7170 <_Heap_Walk+0x50c>                       
RTEMS_INLINE_ROUTINE bool _Heap_Is_aligned(                           
  uintptr_t value,                                                    
  uintptr_t alignment                                                 
)                                                                     
{                                                                     
  return (value % alignment) == 0;                                    
    6d3c:	e59d0024 	ldr	r0, [sp, #36]	; 0x24                          
    6d40:	e1a01009 	mov	r1, r9                                        
    6d44:	ebffe796 	bl	ba4 <__umodsi3>                                
    );                                                                
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if ( !_Heap_Is_aligned( min_block_size, page_size ) ) {             
    6d48:	e250b000 	subs	fp, r0, #0                                   
    6d4c:	0a000006 	beq	6d6c <_Heap_Walk+0x108>                       
    (*printer)(                                                       
    6d50:	e1a00005 	mov	r0, r5                                        
    6d54:	e3a01001 	mov	r1, #1                                        
    6d58:	e59f2438 	ldr	r2, [pc, #1080]	; 7198 <_Heap_Walk+0x534>     
    6d5c:	e59d3024 	ldr	r3, [sp, #36]	; 0x24                          
    6d60:	e1a0e00f 	mov	lr, pc                                        
    6d64:	e12fff14 	bx	r4                                             
    6d68:	ea0000f9 	b	7154 <_Heap_Walk+0x4f0>                         
    6d6c:	e59dc020 	ldr	ip, [sp, #32]                                 
    6d70:	e1a01009 	mov	r1, r9                                        
    6d74:	e28c0008 	add	r0, ip, #8                                    
    6d78:	ebffe789 	bl	ba4 <__umodsi3>                                
    );                                                                
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if (                                                                
    6d7c:	e250a000 	subs	sl, r0, #0                                   
    !_Heap_Is_aligned( _Heap_Alloc_area_of_block( first_block ), page_size )
  ) {                                                                 
    (*printer)(                                                       
    6d80:	11a00005 	movne	r0, r5                                      
    6d84:	13a01001 	movne	r1, #1                                      
    6d88:	159f240c 	ldrne	r2, [pc, #1036]	; 719c <_Heap_Walk+0x538>   
    6d8c:	159d3020 	ldrne	r3, [sp, #32]                               
    6d90:	1a0000cc 	bne	70c8 <_Heap_Walk+0x464>                       
  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;                 
    6d94:	e59d2020 	ldr	r2, [sp, #32]                                 
    6d98:	e5928004 	ldr	r8, [r2, #4]                                  
    );                                                                
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if ( !_Heap_Is_prev_used( first_block ) ) {                         
    6d9c:	e2188001 	ands	r8, r8, #1                                   
    (*printer)(                                                       
    6da0:	01a00005 	moveq	r0, r5                                      
    6da4:	03a01001 	moveq	r1, #1                                      
    6da8:	059f23f0 	ldreq	r2, [pc, #1008]	; 71a0 <_Heap_Walk+0x53c>   
    6dac:	0a000009 	beq	6dd8 <_Heap_Walk+0x174>                       
    - 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;                
    6db0:	e59d3028 	ldr	r3, [sp, #40]	; 0x28                          
    6db4:	e5937004 	ldr	r7, [r3, #4]                                  
    6db8:	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);                 
    6dbc:	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;                 
    6dc0:	e5978004 	ldr	r8, [r7, #4]                                  
    );                                                                
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if ( _Heap_Is_free( last_block ) ) {                                
    6dc4:	e2188001 	ands	r8, r8, #1                                   
    6dc8:	1a000005 	bne	6de4 <_Heap_Walk+0x180>                       
    (*printer)(                                                       
    6dcc:	e59f23d0 	ldr	r2, [pc, #976]	; 71a4 <_Heap_Walk+0x540>      
    6dd0:	e1a00005 	mov	r0, r5                                        
    6dd4:	e3a01001 	mov	r1, #1                                        
    6dd8:	e1a0e00f 	mov	lr, pc                                        
    6ddc:	e12fff14 	bx	r4                                             
    6de0:	ea0000db 	b	7154 <_Heap_Walk+0x4f0>                         
    );                                                                
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if (                                                                
    6de4:	e59dc020 	ldr	ip, [sp, #32]                                 
    6de8:	e157000c 	cmp	r7, ip                                        
    6dec:	0a000006 	beq	6e0c <_Heap_Walk+0x1a8>                       
    _Heap_Block_at( last_block, _Heap_Block_size( last_block ) ) != first_block
  ) {                                                                 
    (*printer)(                                                       
    6df0:	e1a00005 	mov	r0, r5                                        <== NOT EXECUTED
    6df4:	e3a01001 	mov	r1, #1                                        <== NOT EXECUTED
    6df8:	e59f23a8 	ldr	r2, [pc, #936]	; 71a8 <_Heap_Walk+0x544>      <== NOT EXECUTED
    6dfc:	e1a0e00f 	mov	lr, pc                                        <== NOT EXECUTED
    6e00:	e12fff14 	bx	r4                                             <== NOT EXECUTED
  if ( !_System_state_Is_up( _System_state_Get() ) ) {                
    return true;                                                      
  }                                                                   
                                                                      
  if ( !_Heap_Walk_check_control( source, printer, heap ) ) {         
    return false;                                                     
    6e04:	e1a0800a 	mov	r8, sl                                        <== NOT EXECUTED
    6e08:	ea0000d1 	b	7154 <_Heap_Walk+0x4f0>                         <== NOT EXECUTED
  int source,                                                         
  Heap_Walk_printer printer,                                          
  Heap_Control *heap                                                  
)                                                                     
{                                                                     
  uintptr_t const page_size = heap->page_size;                        
    6e0c:	e596b010 	ldr	fp, [r6, #16]                                 
                                                                      
    block = next_block;                                               
  } while ( block != first_block );                                   
                                                                      
  return true;                                                        
}                                                                     
    6e10:	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 );
    6e14:	e1a0a006 	mov	sl, r6                                        
    6e18:	ea000034 	b	6ef0 <_Heap_Walk+0x28c>                         
  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;             
    6e1c:	e5963020 	ldr	r3, [r6, #32]                                 
    6e20:	e1530008 	cmp	r3, r8                                        
    6e24:	83a0c000 	movhi	ip, #0                                      
    6e28:	8a000003 	bhi	6e3c <_Heap_Walk+0x1d8>                       
    6e2c:	e596c024 	ldr	ip, [r6, #36]	; 0x24                          
    6e30:	e15c0008 	cmp	ip, r8                                        
    6e34:	33a0c000 	movcc	ip, #0                                      
    6e38:	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 ) ) {              
    6e3c:	e21cc0ff 	ands	ip, ip, #255	; 0xff                          
      (*printer)(                                                     
    6e40:	01a00005 	moveq	r0, r5                                      
    6e44:	03a01001 	moveq	r1, #1                                      
    6e48:	059f235c 	ldreq	r2, [pc, #860]	; 71ac <_Heap_Walk+0x548>    
    6e4c:	0a000012 	beq	6e9c <_Heap_Walk+0x238>                       
RTEMS_INLINE_ROUTINE bool _Heap_Is_aligned(                           
  uintptr_t value,                                                    
  uintptr_t alignment                                                 
)                                                                     
{                                                                     
  return (value % alignment) == 0;                                    
    6e50:	e2880008 	add	r0, r8, #8                                    
    6e54:	e1a0100b 	mov	r1, fp                                        
    6e58:	ebffe751 	bl	ba4 <__umodsi3>                                
      );                                                              
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    if (                                                              
    6e5c:	e250c000 	subs	ip, r0, #0                                   
      !_Heap_Is_aligned( _Heap_Alloc_area_of_block( free_block ), page_size )
    ) {                                                               
      (*printer)(                                                     
    6e60:	11a00005 	movne	r0, r5                                      
    6e64:	13a01001 	movne	r1, #1                                      
    6e68:	159f2340 	ldrne	r2, [pc, #832]	; 71b0 <_Heap_Walk+0x54c>    
    6e6c:	11a03008 	movne	r3, r8                                      
    6e70:	1a0000be 	bne	7170 <_Heap_Walk+0x50c>                       
    - 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;                
    6e74:	e5983004 	ldr	r3, [r8, #4]                                  
    6e78:	e3c33001 	bic	r3, r3, #1                                    
                                                                      
    block = next_block;                                               
  } while ( block != first_block );                                   
                                                                      
  return true;                                                        
}                                                                     
    6e7c:	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;                 
    6e80:	e5933004 	ldr	r3, [r3, #4]                                  
      );                                                              
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    if ( _Heap_Is_used( free_block ) ) {                              
    6e84:	e2133001 	ands	r3, r3, #1                                   
    6e88:	e58d302c 	str	r3, [sp, #44]	; 0x2c                          
    6e8c:	0a000009 	beq	6eb8 <_Heap_Walk+0x254>                       
      (*printer)(                                                     
    6e90:	e59f231c 	ldr	r2, [pc, #796]	; 71b4 <_Heap_Walk+0x550>      
    6e94:	e1a00005 	mov	r0, r5                                        
    6e98:	e3a01001 	mov	r1, #1                                        
    6e9c:	e1a03008 	mov	r3, r8                                        
    6ea0:	e58dc01c 	str	ip, [sp, #28]                                 
    6ea4:	e1a0e00f 	mov	lr, pc                                        
    6ea8:	e12fff14 	bx	r4                                             
  if ( !_System_state_Is_up( _System_state_Get() ) ) {                
    return true;                                                      
  }                                                                   
                                                                      
  if ( !_Heap_Walk_check_control( source, printer, heap ) ) {         
    return false;                                                     
    6eac:	e59dc01c 	ldr	ip, [sp, #28]                                 
    6eb0:	e1a0800c 	mov	r8, ip                                        
    6eb4:	ea0000a6 	b	7154 <_Heap_Walk+0x4f0>                         
      );                                                              
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    if ( free_block->prev != prev_block ) {                           
    6eb8:	e598300c 	ldr	r3, [r8, #12]                                 
    6ebc:	e153000a 	cmp	r3, sl                                        
    6ec0:	0a000008 	beq	6ee8 <_Heap_Walk+0x284>                       
      (*printer)(                                                     
    6ec4:	e58d3000 	str	r3, [sp]                                      
    6ec8:	e1a00005 	mov	r0, r5                                        
    6ecc:	e1a03008 	mov	r3, r8                                        
    6ed0:	e3a01001 	mov	r1, #1                                        
    6ed4:	e59f22dc 	ldr	r2, [pc, #732]	; 71b8 <_Heap_Walk+0x554>      
    6ed8:	e1a0e00f 	mov	lr, pc                                        
    6edc:	e12fff14 	bx	r4                                             
  if ( !_System_state_Is_up( _System_state_Get() ) ) {                
    return true;                                                      
  }                                                                   
                                                                      
  if ( !_Heap_Walk_check_control( source, printer, heap ) ) {         
    return false;                                                     
    6ee0:	e59d802c 	ldr	r8, [sp, #44]	; 0x2c                          
    6ee4:	ea00009a 	b	7154 <_Heap_Walk+0x4f0>                         
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    prev_block = free_block;                                          
    free_block = free_block->next;                                    
    6ee8:	e1a0a008 	mov	sl, r8                                        
    6eec:	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 ) {                            
    6ef0:	e1580006 	cmp	r8, r6                                        
    6ef4:	1affffc8 	bne	6e1c <_Heap_Walk+0x1b8>                       
    6ef8:	ea000000 	b	6f00 <_Heap_Walk+0x29c>                         
        block->prev_size                                              
      );                                                              
    }                                                                 
                                                                      
    block = next_block;                                               
  } while ( block != first_block );                                   
    6efc:	e1a07008 	mov	r7, r8                                        
                                                                      
  return true;                                                        
}                                                                     
    6f00:	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;             
    6f04:	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;                
    6f08:	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);                 
    6f0c:	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;             
    6f10:	e1520008 	cmp	r2, r8                                        
    6f14:	83a0b000 	movhi	fp, #0                                      
    6f18:	8a000003 	bhi	6f2c <_Heap_Walk+0x2c8>                       
    6f1c:	e596b024 	ldr	fp, [r6, #36]	; 0x24                          
    6f20:	e15b0008 	cmp	fp, r8                                        
    6f24:	33a0b000 	movcc	fp, #0                                      
    6f28:	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 ) ) {              
    6f2c:	e21bb0ff 	ands	fp, fp, #255	; 0xff                          
    6f30:	1a000007 	bne	6f54 <_Heap_Walk+0x2f0>                       
      (*printer)(                                                     
    6f34:	e58d8000 	str	r8, [sp]                                      
    6f38:	e1a00005 	mov	r0, r5                                        
    6f3c:	e3a01001 	mov	r1, #1                                        
    6f40:	e59f2274 	ldr	r2, [pc, #628]	; 71bc <_Heap_Walk+0x558>      
    6f44:	e1a03007 	mov	r3, r7                                        
    6f48:	e1a0e00f 	mov	lr, pc                                        
    6f4c:	e12fff14 	bx	r4                                             
    6f50:	ea00005e 	b	70d0 <_Heap_Walk+0x46c>                         
    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;               
    6f54:	e59d2028 	ldr	r2, [sp, #40]	; 0x28                          
RTEMS_INLINE_ROUTINE bool _Heap_Is_aligned(                           
  uintptr_t value,                                                    
  uintptr_t alignment                                                 
)                                                                     
{                                                                     
  return (value % alignment) == 0;                                    
    6f58:	e1a0000a 	mov	r0, sl                                        
    6f5c:	e1a01009 	mov	r1, r9                                        
    6f60:	e057b002 	subs	fp, r7, r2                                   
    6f64:	13a0b001 	movne	fp, #1                                      
    6f68:	e58d301c 	str	r3, [sp, #28]                                 
    6f6c:	ebffe70c 	bl	ba4 <__umodsi3>                                
      );                                                              
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    if ( !_Heap_Is_aligned( block_size, page_size ) && is_not_last_block ) {
    6f70:	e3500000 	cmp	r0, #0                                        
    6f74:	e59d301c 	ldr	r3, [sp, #28]                                 
    6f78:	0a000005 	beq	6f94 <_Heap_Walk+0x330>                       
    6f7c:	e35b0000 	cmp	fp, #0                                        
      (*printer)(                                                     
    6f80:	158da000 	strne	sl, [sp]                                    
    6f84:	11a00005 	movne	r0, r5                                      
    6f88:	13a01001 	movne	r1, #1                                      
    6f8c:	159f222c 	ldrne	r2, [pc, #556]	; 71c0 <_Heap_Walk+0x55c>    
    6f90:	1a000014 	bne	6fe8 <_Heap_Walk+0x384>                       
      );                                                              
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    if ( block_size < min_block_size && is_not_last_block ) {         
    6f94:	e59dc024 	ldr	ip, [sp, #36]	; 0x24                          
    6f98:	e15a000c 	cmp	sl, ip                                        
    6f9c:	2a000009 	bcs	6fc8 <_Heap_Walk+0x364>                       
    6fa0:	e35b0000 	cmp	fp, #0                                        
    6fa4:	0a000007 	beq	6fc8 <_Heap_Walk+0x364>                       
      (*printer)(                                                     
    6fa8:	e88d1400 	stm	sp, {sl, ip}                                  
    6fac:	e1a00005 	mov	r0, r5                                        
    6fb0:	e3a01001 	mov	r1, #1                                        
    6fb4:	e59f2208 	ldr	r2, [pc, #520]	; 71c4 <_Heap_Walk+0x560>      
    6fb8:	e1a03007 	mov	r3, r7                                        
    6fbc:	e1a0e00f 	mov	lr, pc                                        
    6fc0:	e12fff14 	bx	r4                                             
    6fc4:	ea00006b 	b	7178 <_Heap_Walk+0x514>                         
      );                                                              
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    if ( next_block_begin <= block_begin && is_not_last_block ) {     
    6fc8:	e1580007 	cmp	r8, r7                                        
    6fcc:	8a000009 	bhi	6ff8 <_Heap_Walk+0x394>                       
    6fd0:	e35b0000 	cmp	fp, #0                                        
    6fd4:	0a000007 	beq	6ff8 <_Heap_Walk+0x394>                       
      (*printer)(                                                     
    6fd8:	e58d8000 	str	r8, [sp]                                      
    6fdc:	e59f21e4 	ldr	r2, [pc, #484]	; 71c8 <_Heap_Walk+0x564>      
    6fe0:	e1a00005 	mov	r0, r5                                        
    6fe4:	e3a01001 	mov	r1, #1                                        
    6fe8:	e1a03007 	mov	r3, r7                                        
    6fec:	e1a0e00f 	mov	lr, pc                                        
    6ff0:	e12fff14 	bx	r4                                             
    6ff4:	ea00005f 	b	7178 <_Heap_Walk+0x514>                         
  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;                 
    6ff8:	e203b001 	and	fp, r3, #1                                    
    6ffc:	e5983004 	ldr	r3, [r8, #4]                                  
      );                                                              
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    if ( !_Heap_Is_prev_used( next_block ) ) {                        
    7000:	e3130001 	tst	r3, #1                                        
    7004:	1a00003b 	bne	70f8 <_Heap_Walk+0x494>                       
    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 ?                                 
    7008:	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)(                                                         
    700c:	e5963008 	ldr	r3, [r6, #8]                                  
    7010:	e1520003 	cmp	r2, r3                                        
                                                                      
    block = next_block;                                               
  } while ( block != first_block );                                   
                                                                      
  return true;                                                        
}                                                                     
    7014:	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)(                                                         
    7018:	059f01ac 	ldreq	r0, [pc, #428]	; 71cc <_Heap_Walk+0x568>    
    701c:	0a000003 	beq	7030 <_Heap_Walk+0x3cc>                       
    block,                                                            
    block_size,                                                       
    block->prev,                                                      
    block->prev == first_free_block ?                                 
      " (= first free)"                                               
        : (block->prev == free_list_head ? " (= head)" : ""),         
    7020:	e59f31a8 	ldr	r3, [pc, #424]	; 71d0 <_Heap_Walk+0x56c>      
    7024:	e1520006 	cmp	r2, r6                                        
    7028:	e59f01a4 	ldr	r0, [pc, #420]	; 71d4 <_Heap_Walk+0x570>      
    702c:	01a00003 	moveq	r0, r3                                      
    block->next,                                                      
    block->next == last_free_block ?                                  
    7030:	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)(                                                         
    7034:	e1530001 	cmp	r3, r1                                        
    7038:	059f1198 	ldreq	r1, [pc, #408]	; 71d8 <_Heap_Walk+0x574>    
    703c:	0a000003 	beq	7050 <_Heap_Walk+0x3ec>                       
      " (= first free)"                                               
        : (block->prev == free_list_head ? " (= head)" : ""),         
    block->next,                                                      
    block->next == last_free_block ?                                  
      " (= last free)"                                                
        : (block->next == free_list_tail ? " (= tail)" : "")          
    7040:	e59fc194 	ldr	ip, [pc, #404]	; 71dc <_Heap_Walk+0x578>      
    7044:	e1530006 	cmp	r3, r6                                        
    7048:	e59f1184 	ldr	r1, [pc, #388]	; 71d4 <_Heap_Walk+0x570>      
    704c:	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)(                                                         
    7050:	e58d2004 	str	r2, [sp, #4]                                  
    7054:	e58d0008 	str	r0, [sp, #8]                                  
    7058:	e58d300c 	str	r3, [sp, #12]                                 
    705c:	e58d1010 	str	r1, [sp, #16]                                 
    7060:	e1a03007 	mov	r3, r7                                        
    7064:	e58da000 	str	sl, [sp]                                      
    7068:	e1a00005 	mov	r0, r5                                        
    706c:	e3a01000 	mov	r1, #0                                        
    7070:	e59f2168 	ldr	r2, [pc, #360]	; 71e0 <_Heap_Walk+0x57c>      
    7074:	e1a0e00f 	mov	lr, pc                                        
    7078:	e12fff14 	bx	r4                                             
    block->next == last_free_block ?                                  
      " (= last free)"                                                
        : (block->next == free_list_tail ? " (= tail)" : "")          
  );                                                                  
                                                                      
  if ( block_size != next_block->prev_size ) {                        
    707c:	e5983000 	ldr	r3, [r8]                                      
    7080:	e15a0003 	cmp	sl, r3                                        
    7084:	0a000009 	beq	70b0 <_Heap_Walk+0x44c>                       
    (*printer)(                                                       
    7088:	e58d3004 	str	r3, [sp, #4]                                  
    708c:	e58da000 	str	sl, [sp]                                      
    7090:	e58d8008 	str	r8, [sp, #8]                                  
    7094:	e1a00005 	mov	r0, r5                                        
    7098:	e3a01001 	mov	r1, #1                                        
    709c:	e59f2140 	ldr	r2, [pc, #320]	; 71e4 <_Heap_Walk+0x580>      
    70a0:	e1a03007 	mov	r3, r7                                        
    70a4:	e1a0e00f 	mov	lr, pc                                        
    70a8:	e12fff14 	bx	r4                                             
    70ac:	ea000031 	b	7178 <_Heap_Walk+0x514>                         
    );                                                                
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if ( !prev_used ) {                                                 
    70b0:	e35b0000 	cmp	fp, #0                                        
    70b4:	1a000007 	bne	70d8 <_Heap_Walk+0x474>                       
    (*printer)(                                                       
    70b8:	e59f2128 	ldr	r2, [pc, #296]	; 71e8 <_Heap_Walk+0x584>      
    70bc:	e1a00005 	mov	r0, r5                                        
    70c0:	e3a01001 	mov	r1, #1                                        
    70c4:	e1a03007 	mov	r3, r7                                        
    70c8:	e1a0e00f 	mov	lr, pc                                        
    70cc:	e12fff14 	bx	r4                                             
      return false;                                                   
    }                                                                 
                                                                      
    if ( !_Heap_Is_prev_used( next_block ) ) {                        
      if ( !_Heap_Walk_check_free_block( source, printer, heap, block ) ) {
        return false;                                                 
    70d0:	e1a0800b 	mov	r8, fp                                        
    70d4:	ea00001e 	b	7154 <_Heap_Walk+0x4f0>                         
                                                                      
    block = next_block;                                               
  } while ( block != first_block );                                   
                                                                      
  return true;                                                        
}                                                                     
    70d8:	e5963008 	ldr	r3, [r6, #8]                                  
    70dc:	ea000002 	b	70ec <_Heap_Walk+0x488>                         
{                                                                     
  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 ) {                                      
    70e0:	e1530007 	cmp	r3, r7                                        
    70e4:	0a000016 	beq	7144 <_Heap_Walk+0x4e0>                       
      return true;                                                    
    }                                                                 
    free_block = free_block->next;                                    
    70e8:	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 ) {                            
    70ec:	e1530006 	cmp	r3, r6                                        
    70f0:	1afffffa 	bne	70e0 <_Heap_Walk+0x47c>                       
    70f4:	ea000019 	b	7160 <_Heap_Walk+0x4fc>                         
                                                                      
    if ( !_Heap_Is_prev_used( next_block ) ) {                        
      if ( !_Heap_Walk_check_free_block( source, printer, heap, block ) ) {
        return false;                                                 
      }                                                               
    } else if (prev_used) {                                           
    70f8:	e35b0000 	cmp	fp, #0                                        
    70fc:	0a000007 	beq	7120 <_Heap_Walk+0x4bc>                       
      (*printer)(                                                     
    7100:	e58da000 	str	sl, [sp]                                      
    7104:	e1a00005 	mov	r0, r5                                        
    7108:	e3a01000 	mov	r1, #0                                        
    710c:	e59f20d8 	ldr	r2, [pc, #216]	; 71ec <_Heap_Walk+0x588>      
    7110:	e1a03007 	mov	r3, r7                                        
    7114:	e1a0e00f 	mov	lr, pc                                        
    7118:	e12fff14 	bx	r4                                             
    711c:	ea000008 	b	7144 <_Heap_Walk+0x4e0>                         
        "block 0x%08x: size %u\n",                                    
        block,                                                        
        block_size                                                    
      );                                                              
    } else {                                                          
      (*printer)(                                                     
    7120:	e58da000 	str	sl, [sp]                                      
    7124:	e5973000 	ldr	r3, [r7]                                      
    7128:	e1a00005 	mov	r0, r5                                        
    712c:	e58d3004 	str	r3, [sp, #4]                                  
    7130:	e1a0100b 	mov	r1, fp                                        
    7134:	e59f20b4 	ldr	r2, [pc, #180]	; 71f0 <_Heap_Walk+0x58c>      
    7138:	e1a03007 	mov	r3, r7                                        
    713c:	e1a0e00f 	mov	lr, pc                                        
    7140:	e12fff14 	bx	r4                                             
        block->prev_size                                              
      );                                                              
    }                                                                 
                                                                      
    block = next_block;                                               
  } while ( block != first_block );                                   
    7144:	e59d2020 	ldr	r2, [sp, #32]                                 
    7148:	e1580002 	cmp	r8, r2                                        
    714c:	1affff6a 	bne	6efc <_Heap_Walk+0x298>                       
  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;                                                      
    7150:	e3a08001 	mov	r8, #1                                        
                                                                      
    block = next_block;                                               
  } while ( block != first_block );                                   
                                                                      
  return true;                                                        
}                                                                     
    7154:	e1a00008 	mov	r0, r8                                        
    7158:	e28dd030 	add	sp, sp, #48	; 0x30                            
    715c:	e8bd8ff0 	pop	{r4, r5, r6, r7, r8, r9, sl, fp, pc}          
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if ( !_Heap_Walk_is_in_free_list( heap, block ) ) {                 
    (*printer)(                                                       
    7160:	e59f208c 	ldr	r2, [pc, #140]	; 71f4 <_Heap_Walk+0x590>      
    7164:	e1a00005 	mov	r0, r5                                        
    7168:	e3a01001 	mov	r1, #1                                        
    716c:	e1a03007 	mov	r3, r7                                        
    7170:	e1a0e00f 	mov	lr, pc                                        
    7174:	e12fff14 	bx	r4                                             
      return false;                                                   
    }                                                                 
                                                                      
    if ( !_Heap_Is_prev_used( next_block ) ) {                        
      if ( !_Heap_Walk_check_free_block( source, printer, heap, block ) ) {
        return false;                                                 
    7178:	e3a08000 	mov	r8, #0                                        
    717c:	eafffff4 	b	7154 <_Heap_Walk+0x4f0>                         
                                                                      

000075a0 <_Thread_queue_Enqueue_priority>: 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 );
    75a0:	e281303c 	add	r3, r1, #60	; 0x3c                            
  Priority_Control     priority;                                      
  States_Control       block_state;                                   
                                                                      
  _Chain_Initialize_empty( &the_thread->Wait.Block2n );               
                                                                      
  priority     = the_thread->current_priority;                        
    75a4:	e591c014 	ldr	ip, [r1, #20]                                 
                                                                      
  head->next = tail;                                                  
    75a8:	e5813038 	str	r3, [r1, #56]	; 0x38                          
  head->previous = NULL;                                              
    75ac:	e3a03000 	mov	r3, #0                                        
    75b0:	e581303c 	str	r3, [r1, #60]	; 0x3c                          
  header_index = _Thread_queue_Header_number( priority );             
  header       = &the_thread_queue->Queues.Priority[ header_index ];  
  block_state  = the_thread_queue->state;                             
                                                                      
  if ( _Thread_queue_Is_reverse_search( priority ) )                  
    75b4:	e31c0020 	tst	ip, #32                                       
 */                                                                   
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(                    
  Chain_Control *the_chain                                            
)                                                                     
{                                                                     
  Chain_Node *head = _Chain_Head( the_chain );                        
    75b8:	e2813038 	add	r3, r1, #56	; 0x38                            
Thread_blocking_operation_States _Thread_queue_Enqueue_priority (     
  Thread_queue_Control *the_thread_queue,                             
  Thread_Control       *the_thread,                                   
  ISR_Level            *level_p                                       
)                                                                     
{                                                                     
    75bc:	e92d47f0 	push	{r4, r5, r6, r7, r8, r9, sl, lr}             
  Chain_Node *tail = _Chain_Tail( the_chain );                        
                                                                      
  head->next = tail;                                                  
  head->previous = NULL;                                              
  tail->previous = head;                                              
    75c0:	e5813040 	str	r3, [r1, #64]	; 0x40                          
  _Chain_Initialize_empty( &the_thread->Wait.Block2n );               
                                                                      
  priority     = the_thread->current_priority;                        
  header_index = _Thread_queue_Header_number( priority );             
  header       = &the_thread_queue->Queues.Priority[ header_index ];  
  block_state  = the_thread_queue->state;                             
    75c4:	e5908038 	ldr	r8, [r0, #56]	; 0x38                          
                                                                      
RTEMS_INLINE_ROUTINE uint32_t   _Thread_queue_Header_number (         
  Priority_Control the_priority                                       
)                                                                     
{                                                                     
  return (the_priority / TASK_QUEUE_DATA_PRIORITIES_PER_HEADER);      
    75c8:	e1a0332c 	lsr	r3, ip, #6                                    
                                                                      
  if ( _Thread_queue_Is_reverse_search( priority ) )                  
    75cc:	1a000027 	bne	7670 <_Thread_queue_Enqueue_priority+0xd0>    
   *                                                                  
   *  WARNING! Returning with interrupts disabled!                    
   */                                                                 
  *level_p = level;                                                   
  return the_thread_queue->sync_state;                                
}                                                                     
    75d0:	e3a0700c 	mov	r7, #12                                       
    75d4:	e0030397 	mul	r3, r7, r3                                    
    75d8:	e080a003 	add	sl, r0, r3                                    
RTEMS_INLINE_ROUTINE bool _Chain_Is_tail(                             
  Chain_Control *the_chain,                                           
  const Chain_Node    *the_node                                       
)                                                                     
{                                                                     
  return (the_node == _Chain_Tail(the_chain));                        
    75dc:	e2833004 	add	r3, r3, #4                                    
    75e0:	e0807003 	add	r7, r0, r3                                    
static inline uint32_t arm_interrupt_disable( void )                  
{                                                                     
  uint32_t arm_switch_reg;                                            
  uint32_t level;                                                     
                                                                      
  asm volatile (                                                      
    75e4:	e10f4000 	mrs	r4, CPSR                                      
    75e8:	e3843080 	orr	r3, r4, #128	; 0x80                           
    75ec:	e129f003 	msr	CPSR_fc, r3                                   
    75f0:	e1a05004 	mov	r5, r4                                        
                                                                      
  if ( _Thread_queue_Is_reverse_search( priority ) )                  
    goto restart_reverse_search;                                      
                                                                      
restart_forward_search:                                               
  search_priority = PRIORITY_MINIMUM - 1;                             
    75f4:	e3e06000 	mvn	r6, #0                                        
  _ISR_Disable( level );                                              
  search_thread = (Thread_Control *) _Chain_First( header );          
    75f8:	e59a3000 	ldr	r3, [sl]                                      
  while ( !_Chain_Is_tail( header, (Chain_Node *)search_thread ) ) {  
    75fc:	ea00000b 	b	7630 <_Thread_queue_Enqueue_priority+0x90>      
    search_priority = search_thread->current_priority;                
    7600:	e5936014 	ldr	r6, [r3, #20]                                 
    if ( priority <= search_priority )                                
    7604:	e15c0006 	cmp	ip, r6                                        
    7608:	9a00000a 	bls	7638 <_Thread_queue_Enqueue_priority+0x98>    
                                                                      
static inline void arm_interrupt_flash( uint32_t level )              
{                                                                     
  uint32_t arm_switch_reg;                                            
                                                                      
  asm volatile (                                                      
    760c:	e10f9000 	mrs	r9, CPSR                                      
    7610:	e129f004 	msr	CPSR_fc, r4                                   
    7614:	e129f009 	msr	CPSR_fc, r9                                   
RTEMS_INLINE_ROUTINE bool _States_Are_set (                           
  States_Control the_states,                                          
  States_Control mask                                                 
)                                                                     
{                                                                     
   return ( (the_states & mask) != STATES_READY);                     
    7618:	e5939010 	ldr	r9, [r3, #16]                                 
    search_priority = search_thread->current_priority;                
    if ( priority <= search_priority )                                
      break;                                                          
#endif                                                                
    _ISR_Flash( level );                                              
    if ( !_States_Are_set( search_thread->current_state, block_state) ) {
    761c:	e1180009 	tst	r8, r9                                        
    7620:	1a000001 	bne	762c <_Thread_queue_Enqueue_priority+0x8c>    
                                                                      
static inline void arm_interrupt_enable( uint32_t level )             
{                                                                     
  ARM_SWITCH_REGISTERS;                                               
                                                                      
  asm volatile (                                                      
    7624:	e129f004 	msr	CPSR_fc, r4                                   
    7628:	eaffffed 	b	75e4 <_Thread_queue_Enqueue_priority+0x44>      
      _ISR_Enable( level );                                           
      goto restart_forward_search;                                    
    }                                                                 
    search_thread =                                                   
       (Thread_Control *)search_thread->Object.Node.next;             
    762c:	e5933000 	ldr	r3, [r3]                                      
                                                                      
restart_forward_search:                                               
  search_priority = PRIORITY_MINIMUM - 1;                             
  _ISR_Disable( level );                                              
  search_thread = (Thread_Control *) _Chain_First( header );          
  while ( !_Chain_Is_tail( header, (Chain_Node *)search_thread ) ) {  
    7630:	e1530007 	cmp	r3, r7                                        
    7634:	1afffff1 	bne	7600 <_Thread_queue_Enqueue_priority+0x60>    
    }                                                                 
    search_thread =                                                   
       (Thread_Control *)search_thread->Object.Node.next;             
  }                                                                   
                                                                      
  if ( the_thread_queue->sync_state !=                                
    7638:	e5907030 	ldr	r7, [r0, #48]	; 0x30                          
    763c:	e3570001 	cmp	r7, #1                                        
    7640:	1a00003b 	bne	7734 <_Thread_queue_Enqueue_priority+0x194>   
       THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )                   
    goto synchronize;                                                 
                                                                      
  the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
    7644:	e3a02000 	mov	r2, #0                                        
                                                                      
  if ( priority == search_priority )                                  
    7648:	e15c0006 	cmp	ip, r6                                        
                                                                      
  if ( the_thread_queue->sync_state !=                                
       THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )                   
    goto synchronize;                                                 
                                                                      
  the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
    764c:	e5802030 	str	r2, [r0, #48]	; 0x30                          
                                                                      
  if ( priority == search_priority )                                  
    7650:	0a00002d 	beq	770c <_Thread_queue_Enqueue_priority+0x16c>   
    goto equal_priority;                                              
                                                                      
  search_node   = (Chain_Node *) search_thread;                       
  previous_node = search_node->previous;                              
    7654:	e5932004 	ldr	r2, [r3, #4]                                  
  the_node      = (Chain_Node *) the_thread;                          
                                                                      
  the_node->next         = search_node;                               
    7658:	e5813000 	str	r3, [r1]                                      
  the_node->previous     = previous_node;                             
    765c:	e5812004 	str	r2, [r1, #4]                                  
  previous_node->next    = the_node;                                  
    7660:	e5821000 	str	r1, [r2]                                      
  search_node->previous  = the_node;                                  
    7664:	e5831004 	str	r1, [r3, #4]                                  
  the_thread->Wait.queue = the_thread_queue;                          
    7668:	e5810044 	str	r0, [r1, #68]	; 0x44                          
  _ISR_Enable( level );                                               
    766c:	ea000024 	b	7704 <_Thread_queue_Enqueue_priority+0x164>     
   *                                                                  
   *  WARNING! Returning with interrupts disabled!                    
   */                                                                 
  *level_p = level;                                                   
  return the_thread_queue->sync_state;                                
}                                                                     
    7670:	e3a0700c 	mov	r7, #12                                       
    7674:	e0270793 	mla	r7, r3, r7, r0                                
  the_thread->Wait.queue = the_thread_queue;                          
  _ISR_Enable( level );                                               
  return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;                  
                                                                      
restart_reverse_search:                                               
  search_priority     = PRIORITY_MAXIMUM + 1;                         
    7678:	e59fa0c0 	ldr	sl, [pc, #192]	; 7740 <_Thread_queue_Enqueue_priority+0x1a0>
    767c:	e5da6000 	ldrb	r6, [sl]                                     
    7680:	e2866001 	add	r6, r6, #1                                    
static inline uint32_t arm_interrupt_disable( void )                  
{                                                                     
  uint32_t arm_switch_reg;                                            
  uint32_t level;                                                     
                                                                      
  asm volatile (                                                      
    7684:	e10f4000 	mrs	r4, CPSR                                      
    7688:	e3843080 	orr	r3, r4, #128	; 0x80                           
    768c:	e129f003 	msr	CPSR_fc, r3                                   
    7690:	e1a05004 	mov	r5, r4                                        
                                                                      
  _ISR_Disable( level );                                              
  search_thread = (Thread_Control *) _Chain_Last( header );           
    7694:	e5973008 	ldr	r3, [r7, #8]                                  
  while ( !_Chain_Is_head( header, (Chain_Node *)search_thread ) ) {  
    7698:	ea00000b 	b	76cc <_Thread_queue_Enqueue_priority+0x12c>     
    search_priority = search_thread->current_priority;                
    769c:	e5936014 	ldr	r6, [r3, #20]                                 
    if ( priority >= search_priority )                                
    76a0:	e15c0006 	cmp	ip, r6                                        
    76a4:	2a00000a 	bcs	76d4 <_Thread_queue_Enqueue_priority+0x134>   
                                                                      
static inline void arm_interrupt_flash( uint32_t level )              
{                                                                     
  uint32_t arm_switch_reg;                                            
                                                                      
  asm volatile (                                                      
    76a8:	e10f9000 	mrs	r9, CPSR                                      
    76ac:	e129f004 	msr	CPSR_fc, r4                                   
    76b0:	e129f009 	msr	CPSR_fc, r9                                   
    76b4:	e5939010 	ldr	r9, [r3, #16]                                 
    search_priority = search_thread->current_priority;                
    if ( priority >= search_priority )                                
      break;                                                          
#endif                                                                
    _ISR_Flash( level );                                              
    if ( !_States_Are_set( search_thread->current_state, block_state) ) {
    76b8:	e1180009 	tst	r8, r9                                        
    76bc:	1a000001 	bne	76c8 <_Thread_queue_Enqueue_priority+0x128>   
                                                                      
static inline void arm_interrupt_enable( uint32_t level )             
{                                                                     
  ARM_SWITCH_REGISTERS;                                               
                                                                      
  asm volatile (                                                      
    76c0:	e129f004 	msr	CPSR_fc, r4                                   <== NOT EXECUTED
    76c4:	eaffffec 	b	767c <_Thread_queue_Enqueue_priority+0xdc>      <== NOT EXECUTED
      _ISR_Enable( level );                                           
      goto restart_reverse_search;                                    
    }                                                                 
    search_thread = (Thread_Control *)                                
                         search_thread->Object.Node.previous;         
    76c8:	e5933004 	ldr	r3, [r3, #4]                                  
restart_reverse_search:                                               
  search_priority     = PRIORITY_MAXIMUM + 1;                         
                                                                      
  _ISR_Disable( level );                                              
  search_thread = (Thread_Control *) _Chain_Last( header );           
  while ( !_Chain_Is_head( header, (Chain_Node *)search_thread ) ) {  
    76cc:	e1530007 	cmp	r3, r7                                        
    76d0:	1afffff1 	bne	769c <_Thread_queue_Enqueue_priority+0xfc>    
    }                                                                 
    search_thread = (Thread_Control *)                                
                         search_thread->Object.Node.previous;         
  }                                                                   
                                                                      
  if ( the_thread_queue->sync_state !=                                
    76d4:	e5907030 	ldr	r7, [r0, #48]	; 0x30                          
    76d8:	e3570001 	cmp	r7, #1                                        
    76dc:	1a000014 	bne	7734 <_Thread_queue_Enqueue_priority+0x194>   
       THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )                   
    goto synchronize;                                                 
                                                                      
  the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
    76e0:	e3a02000 	mov	r2, #0                                        
                                                                      
  if ( priority == search_priority )                                  
    76e4:	e15c0006 	cmp	ip, r6                                        
                                                                      
  if ( the_thread_queue->sync_state !=                                
       THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )                   
    goto synchronize;                                                 
                                                                      
  the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
    76e8:	e5802030 	str	r2, [r0, #48]	; 0x30                          
                                                                      
  if ( priority == search_priority )                                  
    76ec:	0a000006 	beq	770c <_Thread_queue_Enqueue_priority+0x16c>   
    goto equal_priority;                                              
                                                                      
  search_node = (Chain_Node *) search_thread;                         
  next_node   = search_node->next;                                    
    76f0:	e5932000 	ldr	r2, [r3]                                      
  the_node    = (Chain_Node *) the_thread;                            
                                                                      
  the_node->next          = next_node;                                
  the_node->previous      = search_node;                              
    76f4:	e881000c 	stm	r1, {r2, r3}                                  
  search_node->next       = the_node;                                 
  next_node->previous    = the_node;                                  
    76f8:	e5821004 	str	r1, [r2, #4]                                  
  next_node   = search_node->next;                                    
  the_node    = (Chain_Node *) the_thread;                            
                                                                      
  the_node->next          = next_node;                                
  the_node->previous      = search_node;                              
  search_node->next       = the_node;                                 
    76fc:	e5831000 	str	r1, [r3]                                      
  next_node->previous    = the_node;                                  
  the_thread->Wait.queue = the_thread_queue;                          
    7700:	e5810044 	str	r0, [r1, #68]	; 0x44                          
    7704:	e129f004 	msr	CPSR_fc, r4                                   
    7708:	ea000007 	b	772c <_Thread_queue_Enqueue_priority+0x18c>     
  _ISR_Enable( level );                                               
  return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;                  
                                                                      
equal_priority:               /* add at end of priority group */      
  search_node   = _Chain_Tail( &search_thread->Wait.Block2n );        
  previous_node = search_node->previous;                              
    770c:	e5932040 	ldr	r2, [r3, #64]	; 0x40                          
  the_thread->Wait.queue = the_thread_queue;                          
  _ISR_Enable( level );                                               
  return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;                  
                                                                      
equal_priority:               /* add at end of priority group */      
  search_node   = _Chain_Tail( &search_thread->Wait.Block2n );        
    7710:	e283c03c 	add	ip, r3, #60	; 0x3c                            
  previous_node = search_node->previous;                              
  the_node      = (Chain_Node *) the_thread;                          
                                                                      
  the_node->next         = search_node;                               
    7714:	e581c000 	str	ip, [r1]                                      
  the_node->previous     = previous_node;                             
    7718:	e5812004 	str	r2, [r1, #4]                                  
  previous_node->next    = the_node;                                  
    771c:	e5821000 	str	r1, [r2]                                      
  search_node->previous  = the_node;                                  
    7720:	e5831040 	str	r1, [r3, #64]	; 0x40                          
  the_thread->Wait.queue = the_thread_queue;                          
    7724:	e5810044 	str	r0, [r1, #68]	; 0x44                          
    7728:	e129f005 	msr	CPSR_fc, r5                                   
  _ISR_Enable( level );                                               
  return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;                  
    772c:	e3a00001 	mov	r0, #1                                        
    7730:	e8bd87f0 	pop	{r4, r5, r6, r7, r8, r9, sl, pc}              
   *  For example, the blocking thread could have been given          
   *  the mutex by an ISR or timed out.                               
   *                                                                  
   *  WARNING! Returning with interrupts disabled!                    
   */                                                                 
  *level_p = level;                                                   
    7734:	e5825000 	str	r5, [r2]                                      
  return the_thread_queue->sync_state;                                
    7738:	e5900030 	ldr	r0, [r0, #48]	; 0x30                          
}                                                                     
    773c:	e8bd87f0 	pop	{r4, r5, r6, r7, r8, r9, sl, pc}              
                                                                      

00009708 <_Timespec_Greater_than>: bool _Timespec_Greater_than( const struct timespec *lhs, const struct timespec *rhs ) { if ( lhs->tv_sec > rhs->tv_sec )
    9708:	e5902000 	ldr	r2, [r0]                                      
    970c:	e5913000 	ldr	r3, [r1]                                      
    9710:	e1520003 	cmp	r2, r3                                        
    return true;                                                      
    9714:	c3a00001 	movgt	r0, #1                                      
bool _Timespec_Greater_than(                                          
  const struct timespec *lhs,                                         
  const struct timespec *rhs                                          
)                                                                     
{                                                                     
  if ( lhs->tv_sec > rhs->tv_sec )                                    
    9718:	c12fff1e 	bxgt	lr                                           
    return true;                                                      
                                                                      
  if ( lhs->tv_sec < rhs->tv_sec )                                    
    971c:	ba000005 	blt	9738 <_Timespec_Greater_than+0x30>            
                                                                      
#include <rtems/system.h>                                             
#include <rtems/score/timespec.h>                                     
#include <rtems/score/tod.h>                                          
                                                                      
bool _Timespec_Greater_than(                                          
    9720:	e5900004 	ldr	r0, [r0, #4]                                  
    9724:	e5913004 	ldr	r3, [r1, #4]                                  
    9728:	e1500003 	cmp	r0, r3                                        
    972c:	d3a00000 	movle	r0, #0                                      
    9730:	c3a00001 	movgt	r0, #1                                      
    9734:	e12fff1e 	bx	lr                                             
{                                                                     
  if ( lhs->tv_sec > rhs->tv_sec )                                    
    return true;                                                      
                                                                      
  if ( lhs->tv_sec < rhs->tv_sec )                                    
    return false;                                                     
    9738:	e3a00000 	mov	r0, #0                                        
  /* ASSERT: lhs->tv_sec == rhs->tv_sec */                            
  if ( lhs->tv_nsec > rhs->tv_nsec )                                  
    return true;                                                      
                                                                      
  return false;                                                       
}                                                                     
    973c:	e12fff1e 	bx	lr                                             
                                                                      

0000b858 <rtems_task_mode>: rtems_status_code rtems_task_mode( rtems_mode mode_set, rtems_mode mask, rtems_mode *previous_mode_set ) {
    b858:	e92d47f0 	push	{r4, r5, r6, r7, r8, r9, sl, lr}             
  ASR_Information    *asr;                                            
  bool                is_asr_enabled = false;                         
  bool                needs_asr_dispatching = false;                  
  rtems_mode          old_mode;                                       
                                                                      
  if ( !previous_mode_set )                                           
    b85c:	e252a000 	subs	sl, r2, #0                                   
rtems_status_code rtems_task_mode(                                    
  rtems_mode  mode_set,                                               
  rtems_mode  mask,                                                   
  rtems_mode *previous_mode_set                                       
)                                                                     
{                                                                     
    b860:	e1a04000 	mov	r4, r0                                        
    b864:	e1a05001 	mov	r5, r1                                        
  bool                is_asr_enabled = false;                         
  bool                needs_asr_dispatching = false;                  
  rtems_mode          old_mode;                                       
                                                                      
  if ( !previous_mode_set )                                           
    return RTEMS_INVALID_ADDRESS;                                     
    b868:	03a00009 	moveq	r0, #9                                      
  ASR_Information    *asr;                                            
  bool                is_asr_enabled = false;                         
  bool                needs_asr_dispatching = false;                  
  rtems_mode          old_mode;                                       
                                                                      
  if ( !previous_mode_set )                                           
    b86c:	08bd87f0 	popeq	{r4, r5, r6, r7, r8, r9, sl, pc}            
    return RTEMS_INVALID_ADDRESS;                                     
                                                                      
  executing     = _Thread_Executing;                                  
    b870:	e59f313c 	ldr	r3, [pc, #316]	; b9b4 <rtems_task_mode+0x15c> 
    b874:	e5937004 	ldr	r7, [r3, #4]                                  
  api = executing->API_Extensions[ THREAD_API_RTEMS ];                
  asr = &api->Signal;                                                 
                                                                      
  old_mode  = (executing->is_preemptible) ? RTEMS_PREEMPT : RTEMS_NO_PREEMPT;
    b878:	e5d78074 	ldrb	r8, [r7, #116]	; 0x74                        
                                                                      
  if ( !previous_mode_set )                                           
    return RTEMS_INVALID_ADDRESS;                                     
                                                                      
  executing     = _Thread_Executing;                                  
  api = executing->API_Extensions[ THREAD_API_RTEMS ];                
    b87c:	e59760f4 	ldr	r6, [r7, #244]	; 0xf4                         
  asr = &api->Signal;                                                 
                                                                      
  old_mode  = (executing->is_preemptible) ? RTEMS_PREEMPT : RTEMS_NO_PREEMPT;
                                                                      
  if ( executing->budget_algorithm == THREAD_CPU_BUDGET_ALGORITHM_NONE )
    b880:	e597307c 	ldr	r3, [r7, #124]	; 0x7c                         
                                                                      
  executing     = _Thread_Executing;                                  
  api = executing->API_Extensions[ THREAD_API_RTEMS ];                
  asr = &api->Signal;                                                 
                                                                      
  old_mode  = (executing->is_preemptible) ? RTEMS_PREEMPT : RTEMS_NO_PREEMPT;
    b884:	e3580000 	cmp	r8, #0                                        
  if ( executing->budget_algorithm == THREAD_CPU_BUDGET_ALGORITHM_NONE )
    old_mode |= RTEMS_NO_TIMESLICE;                                   
  else                                                                
    old_mode |= RTEMS_TIMESLICE;                                      
                                                                      
  old_mode |= (asr->is_enabled) ? RTEMS_ASR : RTEMS_NO_ASR;           
    b888:	e5d69008 	ldrb	r9, [r6, #8]                                 
                                                                      
  executing     = _Thread_Executing;                                  
  api = executing->API_Extensions[ THREAD_API_RTEMS ];                
  asr = &api->Signal;                                                 
                                                                      
  old_mode  = (executing->is_preemptible) ? RTEMS_PREEMPT : RTEMS_NO_PREEMPT;
    b88c:	03a08c01 	moveq	r8, #256	; 0x100                            
    b890:	13a08000 	movne	r8, #0                                      
                                                                      
  if ( executing->budget_algorithm == THREAD_CPU_BUDGET_ALGORITHM_NONE )
    b894:	e3530000 	cmp	r3, #0                                        
    old_mode |= RTEMS_NO_TIMESLICE;                                   
  else                                                                
    old_mode |= RTEMS_TIMESLICE;                                      
    b898:	13888c02 	orrne	r8, r8, #512	; 0x200                        
                                                                      
  old_mode |= (asr->is_enabled) ? RTEMS_ASR : RTEMS_NO_ASR;           
    b89c:	e3590000 	cmp	r9, #0                                        
    b8a0:	03a09b01 	moveq	r9, #1024	; 0x400                           
    b8a4:	13a09000 	movne	r9, #0                                      
  old_mode |= _ISR_Get_level();                                       
    b8a8:	ebfff31d 	bl	8524 <_CPU_ISR_Get_level>                      
  if ( executing->budget_algorithm == THREAD_CPU_BUDGET_ALGORITHM_NONE )
    old_mode |= RTEMS_NO_TIMESLICE;                                   
  else                                                                
    old_mode |= RTEMS_TIMESLICE;                                      
                                                                      
  old_mode |= (asr->is_enabled) ? RTEMS_ASR : RTEMS_NO_ASR;           
    b8ac:	e1899000 	orr	r9, r9, r0                                    
  old_mode |= _ISR_Get_level();                                       
    b8b0:	e1898008 	orr	r8, r9, r8                                    
  *previous_mode_set = old_mode;                                      
                                                                      
  /*                                                                  
   *  These are generic thread scheduling characteristics.            
   */                                                                 
  if ( mask & RTEMS_PREEMPT_MASK )                                    
    b8b4:	e3150c01 	tst	r5, #256	; 0x100                              
    old_mode |= RTEMS_TIMESLICE;                                      
                                                                      
  old_mode |= (asr->is_enabled) ? RTEMS_ASR : RTEMS_NO_ASR;           
  old_mode |= _ISR_Get_level();                                       
                                                                      
  *previous_mode_set = old_mode;                                      
    b8b8:	e58a8000 	str	r8, [sl]                                      
                                                                      
  /*                                                                  
   *  These are generic thread scheduling characteristics.            
   */                                                                 
  if ( mask & RTEMS_PREEMPT_MASK )                                    
    b8bc:	0a000003 	beq	b8d0 <rtems_task_mode+0x78>                   
    executing->is_preemptible = _Modes_Is_preempt(mode_set) ? true : false;
    b8c0:	e3140c01 	tst	r4, #256	; 0x100                              
    b8c4:	13a03000 	movne	r3, #0                                      
    b8c8:	03a03001 	moveq	r3, #1                                      
    b8cc:	e5c73074 	strb	r3, [r7, #116]	; 0x74                        
                                                                      
  if ( mask & RTEMS_TIMESLICE_MASK ) {                                
    b8d0:	e3150c02 	tst	r5, #512	; 0x200                              
    b8d4:	0a000006 	beq	b8f4 <rtems_task_mode+0x9c>                   
    if ( _Modes_Is_timeslice(mode_set) ) {                            
    b8d8:	e2143c02 	ands	r3, r4, #512	; 0x200                         
      executing->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE;
    b8dc:	13a03001 	movne	r3, #1                                      
    b8e0:	1587307c 	strne	r3, [r7, #124]	; 0x7c                       
      executing->cpu_time_budget  = _Thread_Ticks_per_timeslice;      
    b8e4:	159f30cc 	ldrne	r3, [pc, #204]	; b9b8 <rtems_task_mode+0x160>
    b8e8:	15933000 	ldrne	r3, [r3]                                    
    } else                                                            
      executing->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_NONE; 
    b8ec:	0587307c 	streq	r3, [r7, #124]	; 0x7c                       
    executing->is_preemptible = _Modes_Is_preempt(mode_set) ? true : false;
                                                                      
  if ( mask & RTEMS_TIMESLICE_MASK ) {                                
    if ( _Modes_Is_timeslice(mode_set) ) {                            
      executing->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE;
      executing->cpu_time_budget  = _Thread_Ticks_per_timeslice;      
    b8f0:	15873078 	strne	r3, [r7, #120]	; 0x78                       
  }                                                                   
                                                                      
  /*                                                                  
   *  Set the new interrupt level                                     
   */                                                                 
  if ( mask & RTEMS_INTERRUPT_MASK )                                  
    b8f4:	e3150080 	tst	r5, #128	; 0x80                               
    b8f8:	0a000001 	beq	b904 <rtems_task_mode+0xac>                   
 */                                                                   
RTEMS_INLINE_ROUTINE void _Modes_Set_interrupt_level (                
  Modes_Control mode_set                                              
)                                                                     
{                                                                     
  _ISR_Set_level( _Modes_Get_interrupt_level( mode_set ) );           
    b8fc:	e2040080 	and	r0, r4, #128	; 0x80                           
    b900:	ebfff302 	bl	8510 <_CPU_ISR_Set_level>                      
   *  This is specific to the RTEMS API                               
   */                                                                 
  is_asr_enabled = false;                                             
  needs_asr_dispatching = false;                                      
                                                                      
  if ( mask & RTEMS_ASR_MASK ) {                                      
    b904:	e2150b01 	ands	r0, r5, #1024	; 0x400                        
    b908:	0a000013 	beq	b95c <rtems_task_mode+0x104>                  
 *  Output:                                                           
 *    *previous_mode_set - previous mode set                          
 *     always return RTEMS_SUCCESSFUL;                                
 */                                                                   
                                                                      
rtems_status_code rtems_task_mode(                                    
    b90c:	e3140b01 	tst	r4, #1024	; 0x400                             
  is_asr_enabled = false;                                             
  needs_asr_dispatching = false;                                      
                                                                      
  if ( mask & RTEMS_ASR_MASK ) {                                      
    is_asr_enabled = _Modes_Is_asr_disabled( mode_set ) ? false : true;
    if ( is_asr_enabled != asr->is_enabled ) {                        
    b910:	e5d62008 	ldrb	r2, [r6, #8]                                 
 *  Output:                                                           
 *    *previous_mode_set - previous mode set                          
 *     always return RTEMS_SUCCESSFUL;                                
 */                                                                   
                                                                      
rtems_status_code rtems_task_mode(                                    
    b914:	13a03000 	movne	r3, #0                                      
    b918:	03a03001 	moveq	r3, #1                                      
  is_asr_enabled = false;                                             
  needs_asr_dispatching = false;                                      
                                                                      
  if ( mask & RTEMS_ASR_MASK ) {                                      
    is_asr_enabled = _Modes_Is_asr_disabled( mode_set ) ? false : true;
    if ( is_asr_enabled != asr->is_enabled ) {                        
    b91c:	e1520003 	cmp	r2, r3                                        
                                                                      
  /*                                                                  
   *  This is specific to the RTEMS API                               
   */                                                                 
  is_asr_enabled = false;                                             
  needs_asr_dispatching = false;                                      
    b920:	03a00000 	moveq	r0, #0                                      
                                                                      
  if ( mask & RTEMS_ASR_MASK ) {                                      
    is_asr_enabled = _Modes_Is_asr_disabled( mode_set ) ? false : true;
    if ( is_asr_enabled != asr->is_enabled ) {                        
    b924:	0a00000c 	beq	b95c <rtems_task_mode+0x104>                  
      asr->is_enabled = is_asr_enabled;                               
    b928:	e5c63008 	strb	r3, [r6, #8]                                 
static inline uint32_t arm_interrupt_disable( void )                  
{                                                                     
  uint32_t arm_switch_reg;                                            
  uint32_t level;                                                     
                                                                      
  asm volatile (                                                      
    b92c:	e10f3000 	mrs	r3, CPSR                                      
    b930:	e3832080 	orr	r2, r3, #128	; 0x80                           
    b934:	e129f002 	msr	CPSR_fc, r2                                   
{                                                                     
  rtems_signal_set _signals;                                          
  ISR_Level        _level;                                            
                                                                      
  _ISR_Disable( _level );                                             
    _signals                     = information->signals_pending;      
    b938:	e2861014 	add	r1, r6, #20                                   
    b93c:	e8910006 	ldm	r1, {r1, r2}                                  
    information->signals_pending = information->signals_posted;       
    information->signals_posted  = _signals;                          
    b940:	e5862014 	str	r2, [r6, #20]                                 
  rtems_signal_set _signals;                                          
  ISR_Level        _level;                                            
                                                                      
  _ISR_Disable( _level );                                             
    _signals                     = information->signals_pending;      
    information->signals_pending = information->signals_posted;       
    b944:	e5861018 	str	r1, [r6, #24]                                 
                                                                      
static inline void arm_interrupt_enable( uint32_t level )             
{                                                                     
  ARM_SWITCH_REGISTERS;                                               
                                                                      
  asm volatile (                                                      
    b948:	e129f003 	msr	CPSR_fc, r3                                   
      _ASR_Swap_signals( asr );                                       
      if ( _ASR_Are_signals_pending( asr ) ) {                        
    b94c:	e5960014 	ldr	r0, [r6, #20]                                 
                                                                      
  /*                                                                  
   *  This is specific to the RTEMS API                               
   */                                                                 
  is_asr_enabled = false;                                             
  needs_asr_dispatching = false;                                      
    b950:	e3500000 	cmp	r0, #0                                        
    b954:	13a00001 	movne	r0, #1                                      
    b958:	03a00000 	moveq	r0, #0                                      
        needs_asr_dispatching = true;                                 
      }                                                               
    }                                                                 
  }                                                                   
                                                                      
  if ( _System_state_Is_up( _System_state_Get() ) ) {                 
    b95c:	e59f3058 	ldr	r3, [pc, #88]	; b9bc <rtems_task_mode+0x164>  
    b960:	e5933000 	ldr	r3, [r3]                                      
    b964:	e3530003 	cmp	r3, #3                                        
    b968:	1a00000f 	bne	b9ac <rtems_task_mode+0x154>                  
  bool are_signals_pending                                            
)                                                                     
{                                                                     
  Thread_Control     *executing;                                      
                                                                      
  executing = _Thread_Executing;                                      
    b96c:	e59f2040 	ldr	r2, [pc, #64]	; b9b4 <rtems_task_mode+0x15c>  
                                                                      
  if ( are_signals_pending ||                                         
    b970:	e3500000 	cmp	r0, #0                                        
  bool are_signals_pending                                            
)                                                                     
{                                                                     
  Thread_Control     *executing;                                      
                                                                      
  executing = _Thread_Executing;                                      
    b974:	e5923004 	ldr	r3, [r2, #4]                                  
                                                                      
  if ( are_signals_pending ||                                         
    b978:	1a000005 	bne	b994 <rtems_task_mode+0x13c>                  
    b97c:	e5922008 	ldr	r2, [r2, #8]                                  
    b980:	e1530002 	cmp	r3, r2                                        
    b984:	08bd87f0 	popeq	{r4, r5, r6, r7, r8, r9, sl, pc}            
       (!_Thread_Is_heir( executing ) && executing->is_preemptible) ) {
    b988:	e5d33074 	ldrb	r3, [r3, #116]	; 0x74                        
    b98c:	e3530000 	cmp	r3, #0                                        
    b990:	08bd87f0 	popeq	{r4, r5, r6, r7, r8, r9, sl, pc}            
    _Thread_Dispatch_necessary = true;                                
    b994:	e59f3018 	ldr	r3, [pc, #24]	; b9b4 <rtems_task_mode+0x15c>  
    b998:	e3a02001 	mov	r2, #1                                        
    b99c:	e5c32010 	strb	r2, [r3, #16]                                
     if (_Thread_Evaluate_is_dispatch_needed( needs_asr_dispatching ) )
      _Thread_Dispatch();                                             
    b9a0:	ebffed73 	bl	6f74 <_Thread_Dispatch>                        
  }                                                                   
                                                                      
  return RTEMS_SUCCESSFUL;                                            
    b9a4:	e3a00000 	mov	r0, #0                                        
    b9a8:	e8bd87f0 	pop	{r4, r5, r6, r7, r8, r9, sl, pc}              
    b9ac:	e3a00000 	mov	r0, #0                                        <== NOT EXECUTED
}                                                                     
    b9b0:	e8bd87f0 	pop	{r4, r5, r6, r7, r8, r9, sl, pc}              <== NOT EXECUTED