RTEMS 4.11
Annotated Report
Fri Jul 16 17:30:40 2010

30014dac <_CORE_message_queue_Broadcast>:                             
{                                                                     
  Thread_Control          *the_thread;                                
  uint32_t                 number_broadcasted;                        
  Thread_Wait_information *waitp;                                     
                                                                      
  if ( size > the_message_queue->maximum_message_size ) {             
30014dac:	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                    
)                                                                     
{                                                                     
30014db0:	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 ) {             
30014db4:	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                    
)                                                                     
{                                                                     
30014db8:	e1a06000 	mov	r6, r0                                        
30014dbc:	e1a0a001 	mov	sl, r1                                        
30014dc0:	e1a07002 	mov	r7, r2                                        
30014dc4:	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 ) {             
30014dc8:	8a000013 	bhi	30014e1c <_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 ) {         
30014dcc:	e5905048 	ldr	r5, [r0, #72]	; 0x48                          
30014dd0:	e3550000 	cmp	r5, #0                                        
    *count = 0;                                                       
30014dd4:	13a00000 	movne	r0, #0                                      
30014dd8:	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 ) {         
30014ddc:	0a000007 	beq	30014e00 <_CORE_message_queue_Broadcast+0x54> 
30014de0:	e8bd85f0 	pop	{r4, r5, r6, r7, r8, sl, pc}                  
  const void *source,                                                 
  void       *destination,                                            
  size_t      size                                                    
)                                                                     
{                                                                     
  memcpy(destination, source, size);                                  
30014de4:	e594002c 	ldr	r0, [r4, #44]	; 0x2c                          
30014de8:	e1a0100a 	mov	r1, sl                                        
30014dec:	e1a02007 	mov	r2, r7                                        
30014df0:	eb002227 	bl	3001d694 <memcpy>                              
      buffer,                                                         
      waitp->return_argument_second.mutable_object,                   
      size                                                            
    );                                                                
                                                                      
    *(size_t *) the_thread->Wait.return_argument = size;              
30014df4:	e5943028 	ldr	r3, [r4, #40]	; 0x28                          
   */                                                                 
  number_broadcasted = 0;                                             
  while ((the_thread =                                                
          _Thread_queue_Dequeue(&the_message_queue->Wait_queue))) {   
    waitp = &the_thread->Wait;                                        
    number_broadcasted += 1;                                          
30014df8:	e2855001 	add	r5, r5, #1                                    
      buffer,                                                         
      waitp->return_argument_second.mutable_object,                   
      size                                                            
    );                                                                
                                                                      
    *(size_t *) the_thread->Wait.return_argument = size;              
30014dfc:	e5837000 	str	r7, [r3]                                      
  /*                                                                  
   *  There must be no pending messages if there is a thread waiting to
   *  receive a message.                                              
   */                                                                 
  number_broadcasted = 0;                                             
  while ((the_thread =                                                
30014e00:	e1a00006 	mov	r0, r6                                        
30014e04:	eb0009db 	bl	30017578 <_Thread_queue_Dequeue>               
30014e08:	e2504000 	subs	r4, r0, #0                                   
30014e0c:	1afffff4 	bne	30014de4 <_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;                                        
30014e10:	e5885000 	str	r5, [r8]                                      
  return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;                        
30014e14:	e1a00004 	mov	r0, r4                                        
30014e18:	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;                    
30014e1c:	e3a00001 	mov	r0, #1                                        <== NOT EXECUTED
    #endif                                                            
                                                                      
  }                                                                   
  *count = number_broadcasted;                                        
  return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;                        
}                                                                     
30014e20:	e8bd85f0 	pop	{r4, r5, r6, r7, r8, sl, pc}                  <== NOT EXECUTED
                                                                      

30006e58 <_Heap_Walk>: bool _Heap_Walk( Heap_Control *heap, int source, bool dump ) {
30006e58:	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;              
30006e5c:	e5903014 	ldr	r3, [r0, #20]                                 
bool _Heap_Walk(                                                      
  Heap_Control *heap,                                                 
  int source,                                                         
  bool dump                                                           
)                                                                     
{                                                                     
30006e60:	e24dd030 	sub	sp, sp, #48	; 0x30                            
  uintptr_t const page_size = heap->page_size;                        
  uintptr_t const min_block_size = heap->min_block_size;              
30006e64:	e58d3024 	str	r3, [sp, #36]	; 0x24                          
  Heap_Block *const first_block = heap->first_block;                  
  Heap_Block *const last_block = heap->last_block;                    
30006e68:	e5903024 	ldr	r3, [r0, #36]	; 0x24                          
  Heap_Block *block = first_block;                                    
  Heap_Walk_printer printer = dump ?                                  
    _Heap_Walk_print : _Heap_Walk_print_nothing;                      
30006e6c:	e59f4500 	ldr	r4, [pc, #1280]	; 30007374 <_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;                    
30006e70:	e58d3028 	str	r3, [sp, #40]	; 0x28                          
  Heap_Block *block = first_block;                                    
  Heap_Walk_printer printer = dump ?                                  
    _Heap_Walk_print : _Heap_Walk_print_nothing;                      
30006e74:	e59f34fc 	ldr	r3, [pc, #1276]	; 30007378 <_Heap_Walk+0x520> 
30006e78:	e31200ff 	tst	r2, #255	; 0xff                               
30006e7c:	11a04003 	movne	r4, r3                                      
                                                                      
  if ( !_System_state_Is_up( _System_state_Get() ) ) {                
30006e80:	e59f34f4 	ldr	r3, [pc, #1268]	; 3000737c <_Heap_Walk+0x524> 
  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;                  
30006e84:	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() ) ) {                
30006e88:	e5933000 	ldr	r3, [r3]                                      
bool _Heap_Walk(                                                      
  Heap_Control *heap,                                                 
  int source,                                                         
  bool dump                                                           
)                                                                     
{                                                                     
30006e8c:	e1a06000 	mov	r6, r0                                        
  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() ) ) {                
30006e90:	e3530003 	cmp	r3, #3                                        
bool _Heap_Walk(                                                      
  Heap_Control *heap,                                                 
  int source,                                                         
  bool dump                                                           
)                                                                     
{                                                                     
30006e94:	e1a05001 	mov	r5, r1                                        
  uintptr_t const page_size = heap->page_size;                        
30006e98:	e5909010 	ldr	r9, [r0, #16]                                 
  uintptr_t const min_block_size = heap->min_block_size;              
  Heap_Block *const first_block = heap->first_block;                  
30006e9c:	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() ) ) {                
30006ea0:	1a000127 	bne	30007344 <_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)(                                                         
30006ea4:	e59dc024 	ldr	ip, [sp, #36]	; 0x24                          
30006ea8:	e59d2020 	ldr	r2, [sp, #32]                                 
30006eac:	e58dc000 	str	ip, [sp]                                      
30006eb0:	e5903018 	ldr	r3, [r0, #24]                                 
30006eb4:	e58d3004 	str	r3, [sp, #4]                                  
30006eb8:	e590301c 	ldr	r3, [r0, #28]                                 
30006ebc:	e58d200c 	str	r2, [sp, #12]                                 
30006ec0:	e58d3008 	str	r3, [sp, #8]                                  
30006ec4:	e59d3028 	ldr	r3, [sp, #40]	; 0x28                          
30006ec8:	e59f24b0 	ldr	r2, [pc, #1200]	; 30007380 <_Heap_Walk+0x528> 
30006ecc:	e58d3010 	str	r3, [sp, #16]                                 
30006ed0:	e5903008 	ldr	r3, [r0, #8]                                  
30006ed4:	e58d3014 	str	r3, [sp, #20]                                 
30006ed8:	e590300c 	ldr	r3, [r0, #12]                                 
30006edc:	e1a00001 	mov	r0, r1                                        
30006ee0:	e58d3018 	str	r3, [sp, #24]                                 
30006ee4:	e3a01000 	mov	r1, #0                                        
30006ee8:	e1a03009 	mov	r3, r9                                        
30006eec:	e1a0e00f 	mov	lr, pc                                        
30006ef0:	e12fff14 	bx	r4                                             
    heap->area_begin, heap->area_end,                                 
    first_block, last_block,                                          
    first_free_block, last_free_block                                 
  );                                                                  
                                                                      
  if ( page_size == 0 ) {                                             
30006ef4:	e3590000 	cmp	r9, #0                                        
30006ef8:	1a000006 	bne	30006f18 <_Heap_Walk+0xc0>                    
    (*printer)( source, true, "page size is zero\n" );                
30006efc:	e1a00005 	mov	r0, r5                                        
30006f00:	e3a01001 	mov	r1, #1                                        
30006f04:	e59f2478 	ldr	r2, [pc, #1144]	; 30007384 <_Heap_Walk+0x52c> 
30006f08:	e1a0e00f 	mov	lr, pc                                        
30006f0c:	e12fff14 	bx	r4                                             
  if ( !_System_state_Is_up( _System_state_Get() ) ) {                
    return true;                                                      
  }                                                                   
                                                                      
  if ( !_Heap_Walk_check_control( source, printer, heap ) ) {         
    return false;                                                     
30006f10:	e1a08009 	mov	r8, r9                                        
30006f14:	ea00010b 	b	30007348 <_Heap_Walk+0x4f0>                     
    (*printer)( source, true, "page size is zero\n" );                
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if ( !_Addresses_Is_aligned( (void *) page_size ) ) {               
30006f18:	e2198003 	ands	r8, r9, #3                                   
    (*printer)(                                                       
30006f1c:	11a00005 	movne	r0, r5                                      
30006f20:	13a01001 	movne	r1, #1                                      
30006f24:	159f245c 	ldrne	r2, [pc, #1116]	; 30007388 <_Heap_Walk+0x530>
30006f28:	11a03009 	movne	r3, r9                                      
30006f2c:	1a00010c 	bne	30007364 <_Heap_Walk+0x50c>                   
RTEMS_INLINE_ROUTINE bool _Heap_Is_aligned(                           
  uintptr_t value,                                                    
  uintptr_t alignment                                                 
)                                                                     
{                                                                     
  return (value % alignment) == 0;                                    
30006f30:	e59d0024 	ldr	r0, [sp, #36]	; 0x24                          
30006f34:	e1a01009 	mov	r1, r9                                        
30006f38:	ebffe717 	bl	30000b9c <__umodsi3>                           
    );                                                                
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if ( !_Heap_Is_aligned( min_block_size, page_size ) ) {             
30006f3c:	e250b000 	subs	fp, r0, #0                                   
30006f40:	0a000006 	beq	30006f60 <_Heap_Walk+0x108>                   
    (*printer)(                                                       
30006f44:	e1a00005 	mov	r0, r5                                        
30006f48:	e3a01001 	mov	r1, #1                                        
30006f4c:	e59f2438 	ldr	r2, [pc, #1080]	; 3000738c <_Heap_Walk+0x534> 
30006f50:	e59d3024 	ldr	r3, [sp, #36]	; 0x24                          
30006f54:	e1a0e00f 	mov	lr, pc                                        
30006f58:	e12fff14 	bx	r4                                             
30006f5c:	ea0000f9 	b	30007348 <_Heap_Walk+0x4f0>                     
30006f60:	e59dc020 	ldr	ip, [sp, #32]                                 
30006f64:	e1a01009 	mov	r1, r9                                        
30006f68:	e28c0008 	add	r0, ip, #8                                    
30006f6c:	ebffe70a 	bl	30000b9c <__umodsi3>                           
    );                                                                
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if (                                                                
30006f70:	e250a000 	subs	sl, r0, #0                                   
    !_Heap_Is_aligned( _Heap_Alloc_area_of_block( first_block ), page_size )
  ) {                                                                 
    (*printer)(                                                       
30006f74:	11a00005 	movne	r0, r5                                      
30006f78:	13a01001 	movne	r1, #1                                      
30006f7c:	159f240c 	ldrne	r2, [pc, #1036]	; 30007390 <_Heap_Walk+0x538>
30006f80:	159d3020 	ldrne	r3, [sp, #32]                               
30006f84:	1a0000cc 	bne	300072bc <_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;                 
30006f88:	e59d2020 	ldr	r2, [sp, #32]                                 
30006f8c:	e5928004 	ldr	r8, [r2, #4]                                  
    );                                                                
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if ( !_Heap_Is_prev_used( first_block ) ) {                         
30006f90:	e2188001 	ands	r8, r8, #1                                   
    (*printer)(                                                       
30006f94:	01a00005 	moveq	r0, r5                                      
30006f98:	03a01001 	moveq	r1, #1                                      
30006f9c:	059f23f0 	ldreq	r2, [pc, #1008]	; 30007394 <_Heap_Walk+0x53c>
30006fa0:	0a000009 	beq	30006fcc <_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;                
30006fa4:	e59d3028 	ldr	r3, [sp, #40]	; 0x28                          
30006fa8:	e5937004 	ldr	r7, [r3, #4]                                  
30006fac:	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);                 
30006fb0:	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;                 
30006fb4:	e5978004 	ldr	r8, [r7, #4]                                  
    );                                                                
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if ( _Heap_Is_free( last_block ) ) {                                
30006fb8:	e2188001 	ands	r8, r8, #1                                   
30006fbc:	1a000005 	bne	30006fd8 <_Heap_Walk+0x180>                   
    (*printer)(                                                       
30006fc0:	e59f23d0 	ldr	r2, [pc, #976]	; 30007398 <_Heap_Walk+0x540>  
30006fc4:	e1a00005 	mov	r0, r5                                        
30006fc8:	e3a01001 	mov	r1, #1                                        
30006fcc:	e1a0e00f 	mov	lr, pc                                        
30006fd0:	e12fff14 	bx	r4                                             
30006fd4:	ea0000db 	b	30007348 <_Heap_Walk+0x4f0>                     
    );                                                                
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if (                                                                
30006fd8:	e59dc020 	ldr	ip, [sp, #32]                                 
30006fdc:	e157000c 	cmp	r7, ip                                        
30006fe0:	0a000006 	beq	30007000 <_Heap_Walk+0x1a8>                   
    _Heap_Block_at( last_block, _Heap_Block_size( last_block ) ) != first_block
  ) {                                                                 
    (*printer)(                                                       
30006fe4:	e1a00005 	mov	r0, r5                                        <== NOT EXECUTED
30006fe8:	e3a01001 	mov	r1, #1                                        <== NOT EXECUTED
30006fec:	e59f23a8 	ldr	r2, [pc, #936]	; 3000739c <_Heap_Walk+0x544>  <== NOT EXECUTED
30006ff0:	e1a0e00f 	mov	lr, pc                                        <== NOT EXECUTED
30006ff4:	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;                                                     
30006ff8:	e1a0800a 	mov	r8, sl                                        <== NOT EXECUTED
30006ffc:	ea0000d1 	b	30007348 <_Heap_Walk+0x4f0>                     <== NOT EXECUTED
  int source,                                                         
  Heap_Walk_printer printer,                                          
  Heap_Control *heap                                                  
)                                                                     
{                                                                     
  uintptr_t const page_size = heap->page_size;                        
30007000:	e596b010 	ldr	fp, [r6, #16]                                 
                                                                      
    block = next_block;                                               
  } while ( block != first_block );                                   
                                                                      
  return true;                                                        
}                                                                     
30007004:	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 );
30007008:	e1a0a006 	mov	sl, r6                                        
3000700c:	ea000034 	b	300070e4 <_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;             
30007010:	e5963020 	ldr	r3, [r6, #32]                                 
30007014:	e1530008 	cmp	r3, r8                                        
30007018:	83a0c000 	movhi	ip, #0                                      
3000701c:	8a000003 	bhi	30007030 <_Heap_Walk+0x1d8>                   
30007020:	e596c024 	ldr	ip, [r6, #36]	; 0x24                          
30007024:	e15c0008 	cmp	ip, r8                                        
30007028:	33a0c000 	movcc	ip, #0                                      
3000702c:	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 ) ) {              
30007030:	e21cc0ff 	ands	ip, ip, #255	; 0xff                          
      (*printer)(                                                     
30007034:	01a00005 	moveq	r0, r5                                      
30007038:	03a01001 	moveq	r1, #1                                      
3000703c:	059f235c 	ldreq	r2, [pc, #860]	; 300073a0 <_Heap_Walk+0x548>
30007040:	0a000012 	beq	30007090 <_Heap_Walk+0x238>                   
RTEMS_INLINE_ROUTINE bool _Heap_Is_aligned(                           
  uintptr_t value,                                                    
  uintptr_t alignment                                                 
)                                                                     
{                                                                     
  return (value % alignment) == 0;                                    
30007044:	e2880008 	add	r0, r8, #8                                    
30007048:	e1a0100b 	mov	r1, fp                                        
3000704c:	ebffe6d2 	bl	30000b9c <__umodsi3>                           
      );                                                              
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    if (                                                              
30007050:	e250c000 	subs	ip, r0, #0                                   
      !_Heap_Is_aligned( _Heap_Alloc_area_of_block( free_block ), page_size )
    ) {                                                               
      (*printer)(                                                     
30007054:	11a00005 	movne	r0, r5                                      
30007058:	13a01001 	movne	r1, #1                                      
3000705c:	159f2340 	ldrne	r2, [pc, #832]	; 300073a4 <_Heap_Walk+0x54c>
30007060:	11a03008 	movne	r3, r8                                      
30007064:	1a0000be 	bne	30007364 <_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;                
30007068:	e5983004 	ldr	r3, [r8, #4]                                  
3000706c:	e3c33001 	bic	r3, r3, #1                                    
                                                                      
    block = next_block;                                               
  } while ( block != first_block );                                   
                                                                      
  return true;                                                        
}                                                                     
30007070:	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;                 
30007074:	e5933004 	ldr	r3, [r3, #4]                                  
      );                                                              
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    if ( _Heap_Is_used( free_block ) ) {                              
30007078:	e2133001 	ands	r3, r3, #1                                   
3000707c:	e58d302c 	str	r3, [sp, #44]	; 0x2c                          
30007080:	0a000009 	beq	300070ac <_Heap_Walk+0x254>                   
      (*printer)(                                                     
30007084:	e59f231c 	ldr	r2, [pc, #796]	; 300073a8 <_Heap_Walk+0x550>  
30007088:	e1a00005 	mov	r0, r5                                        
3000708c:	e3a01001 	mov	r1, #1                                        
30007090:	e1a03008 	mov	r3, r8                                        
30007094:	e58dc01c 	str	ip, [sp, #28]                                 
30007098:	e1a0e00f 	mov	lr, pc                                        
3000709c:	e12fff14 	bx	r4                                             
  if ( !_System_state_Is_up( _System_state_Get() ) ) {                
    return true;                                                      
  }                                                                   
                                                                      
  if ( !_Heap_Walk_check_control( source, printer, heap ) ) {         
    return false;                                                     
300070a0:	e59dc01c 	ldr	ip, [sp, #28]                                 
300070a4:	e1a0800c 	mov	r8, ip                                        
300070a8:	ea0000a6 	b	30007348 <_Heap_Walk+0x4f0>                     
      );                                                              
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    if ( free_block->prev != prev_block ) {                           
300070ac:	e598300c 	ldr	r3, [r8, #12]                                 
300070b0:	e153000a 	cmp	r3, sl                                        
300070b4:	0a000008 	beq	300070dc <_Heap_Walk+0x284>                   
      (*printer)(                                                     
300070b8:	e58d3000 	str	r3, [sp]                                      
300070bc:	e1a00005 	mov	r0, r5                                        
300070c0:	e1a03008 	mov	r3, r8                                        
300070c4:	e3a01001 	mov	r1, #1                                        
300070c8:	e59f22dc 	ldr	r2, [pc, #732]	; 300073ac <_Heap_Walk+0x554>  
300070cc:	e1a0e00f 	mov	lr, pc                                        
300070d0:	e12fff14 	bx	r4                                             
  if ( !_System_state_Is_up( _System_state_Get() ) ) {                
    return true;                                                      
  }                                                                   
                                                                      
  if ( !_Heap_Walk_check_control( source, printer, heap ) ) {         
    return false;                                                     
300070d4:	e59d802c 	ldr	r8, [sp, #44]	; 0x2c                          
300070d8:	ea00009a 	b	30007348 <_Heap_Walk+0x4f0>                     
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    prev_block = free_block;                                          
    free_block = free_block->next;                                    
300070dc:	e1a0a008 	mov	sl, r8                                        
300070e0:	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 ) {                            
300070e4:	e1580006 	cmp	r8, r6                                        
300070e8:	1affffc8 	bne	30007010 <_Heap_Walk+0x1b8>                   
300070ec:	ea000000 	b	300070f4 <_Heap_Walk+0x29c>                     
        block->prev_size                                              
      );                                                              
    }                                                                 
                                                                      
    block = next_block;                                               
  } while ( block != first_block );                                   
300070f0:	e1a07008 	mov	r7, r8                                        
                                                                      
  return true;                                                        
}                                                                     
300070f4:	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;             
300070f8:	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;                
300070fc:	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);                 
30007100:	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;             
30007104:	e1520008 	cmp	r2, r8                                        
30007108:	83a0b000 	movhi	fp, #0                                      
3000710c:	8a000003 	bhi	30007120 <_Heap_Walk+0x2c8>                   
30007110:	e596b024 	ldr	fp, [r6, #36]	; 0x24                          
30007114:	e15b0008 	cmp	fp, r8                                        
30007118:	33a0b000 	movcc	fp, #0                                      
3000711c:	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 ) ) {              
30007120:	e21bb0ff 	ands	fp, fp, #255	; 0xff                          
30007124:	1a000007 	bne	30007148 <_Heap_Walk+0x2f0>                   
      (*printer)(                                                     
30007128:	e58d8000 	str	r8, [sp]                                      
3000712c:	e1a00005 	mov	r0, r5                                        
30007130:	e3a01001 	mov	r1, #1                                        
30007134:	e59f2274 	ldr	r2, [pc, #628]	; 300073b0 <_Heap_Walk+0x558>  
30007138:	e1a03007 	mov	r3, r7                                        
3000713c:	e1a0e00f 	mov	lr, pc                                        
30007140:	e12fff14 	bx	r4                                             
30007144:	ea00005e 	b	300072c4 <_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;               
30007148:	e59d2028 	ldr	r2, [sp, #40]	; 0x28                          
RTEMS_INLINE_ROUTINE bool _Heap_Is_aligned(                           
  uintptr_t value,                                                    
  uintptr_t alignment                                                 
)                                                                     
{                                                                     
  return (value % alignment) == 0;                                    
3000714c:	e1a0000a 	mov	r0, sl                                        
30007150:	e1a01009 	mov	r1, r9                                        
30007154:	e057b002 	subs	fp, r7, r2                                   
30007158:	13a0b001 	movne	fp, #1                                      
3000715c:	e58d301c 	str	r3, [sp, #28]                                 
30007160:	ebffe68d 	bl	30000b9c <__umodsi3>                           
      );                                                              
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    if ( !_Heap_Is_aligned( block_size, page_size ) && is_not_last_block ) {
30007164:	e3500000 	cmp	r0, #0                                        
30007168:	e59d301c 	ldr	r3, [sp, #28]                                 
3000716c:	0a000005 	beq	30007188 <_Heap_Walk+0x330>                   
30007170:	e35b0000 	cmp	fp, #0                                        
      (*printer)(                                                     
30007174:	158da000 	strne	sl, [sp]                                    
30007178:	11a00005 	movne	r0, r5                                      
3000717c:	13a01001 	movne	r1, #1                                      
30007180:	159f222c 	ldrne	r2, [pc, #556]	; 300073b4 <_Heap_Walk+0x55c>
30007184:	1a000014 	bne	300071dc <_Heap_Walk+0x384>                   
      );                                                              
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    if ( block_size < min_block_size && is_not_last_block ) {         
30007188:	e59dc024 	ldr	ip, [sp, #36]	; 0x24                          
3000718c:	e15a000c 	cmp	sl, ip                                        
30007190:	2a000009 	bcs	300071bc <_Heap_Walk+0x364>                   
30007194:	e35b0000 	cmp	fp, #0                                        
30007198:	0a000007 	beq	300071bc <_Heap_Walk+0x364>                   
      (*printer)(                                                     
3000719c:	e88d1400 	stm	sp, {sl, ip}                                  
300071a0:	e1a00005 	mov	r0, r5                                        
300071a4:	e3a01001 	mov	r1, #1                                        
300071a8:	e59f2208 	ldr	r2, [pc, #520]	; 300073b8 <_Heap_Walk+0x560>  
300071ac:	e1a03007 	mov	r3, r7                                        
300071b0:	e1a0e00f 	mov	lr, pc                                        
300071b4:	e12fff14 	bx	r4                                             
300071b8:	ea00006b 	b	3000736c <_Heap_Walk+0x514>                     
      );                                                              
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    if ( next_block_begin <= block_begin && is_not_last_block ) {     
300071bc:	e1580007 	cmp	r8, r7                                        
300071c0:	8a000009 	bhi	300071ec <_Heap_Walk+0x394>                   
300071c4:	e35b0000 	cmp	fp, #0                                        
300071c8:	0a000007 	beq	300071ec <_Heap_Walk+0x394>                   
      (*printer)(                                                     
300071cc:	e59f21e8 	ldr	r2, [pc, #488]	; 300073bc <_Heap_Walk+0x564>  
300071d0:	e58d8000 	str	r8, [sp]                                      
300071d4:	e1a00005 	mov	r0, r5                                        
300071d8:	e3a01001 	mov	r1, #1                                        
300071dc:	e1a03007 	mov	r3, r7                                        
300071e0:	e1a0e00f 	mov	lr, pc                                        
300071e4:	e12fff14 	bx	r4                                             
300071e8:	ea00005f 	b	3000736c <_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;                 
300071ec:	e203b001 	and	fp, r3, #1                                    
300071f0:	e5983004 	ldr	r3, [r8, #4]                                  
      );                                                              
                                                                      
      return false;                                                   
    }                                                                 
                                                                      
    if ( !_Heap_Is_prev_used( next_block ) ) {                        
300071f4:	e3130001 	tst	r3, #1                                        
300071f8:	1a00003b 	bne	300072ec <_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 ?                                 
300071fc:	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)(                                                         
30007200:	e5963008 	ldr	r3, [r6, #8]                                  
                                                                      
    block = next_block;                                               
  } while ( block != first_block );                                   
                                                                      
  return true;                                                        
}                                                                     
30007204:	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)(                                                         
30007208:	e1520003 	cmp	r2, r3                                        
3000720c:	059f01ac 	ldreq	r0, [pc, #428]	; 300073c0 <_Heap_Walk+0x568>
30007210:	0a000003 	beq	30007224 <_Heap_Walk+0x3cc>                   
    block,                                                            
    block_size,                                                       
    block->prev,                                                      
    block->prev == first_free_block ?                                 
      " (= first free)"                                               
        : (block->prev == free_list_head ? " (= head)" : ""),         
30007214:	e59f31a8 	ldr	r3, [pc, #424]	; 300073c4 <_Heap_Walk+0x56c>  
30007218:	e1520006 	cmp	r2, r6                                        
3000721c:	e59f01a4 	ldr	r0, [pc, #420]	; 300073c8 <_Heap_Walk+0x570>  
30007220:	01a00003 	moveq	r0, r3                                      
    block->next,                                                      
    block->next == last_free_block ?                                  
30007224:	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)(                                                         
30007228:	e1530001 	cmp	r3, r1                                        
3000722c:	059f1198 	ldreq	r1, [pc, #408]	; 300073cc <_Heap_Walk+0x574>
30007230:	0a000003 	beq	30007244 <_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)" : "")          
30007234:	e59fc194 	ldr	ip, [pc, #404]	; 300073d0 <_Heap_Walk+0x578>  
30007238:	e1530006 	cmp	r3, r6                                        
3000723c:	e59f1184 	ldr	r1, [pc, #388]	; 300073c8 <_Heap_Walk+0x570>  
30007240:	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)(                                                         
30007244:	e58d2004 	str	r2, [sp, #4]                                  
30007248:	e58d0008 	str	r0, [sp, #8]                                  
3000724c:	e58d300c 	str	r3, [sp, #12]                                 
30007250:	e58d1010 	str	r1, [sp, #16]                                 
30007254:	e1a03007 	mov	r3, r7                                        
30007258:	e58da000 	str	sl, [sp]                                      
3000725c:	e1a00005 	mov	r0, r5                                        
30007260:	e3a01000 	mov	r1, #0                                        
30007264:	e59f2168 	ldr	r2, [pc, #360]	; 300073d4 <_Heap_Walk+0x57c>  
30007268:	e1a0e00f 	mov	lr, pc                                        
3000726c:	e12fff14 	bx	r4                                             
    block->next == last_free_block ?                                  
      " (= last free)"                                                
        : (block->next == free_list_tail ? " (= tail)" : "")          
  );                                                                  
                                                                      
  if ( block_size != next_block->prev_size ) {                        
30007270:	e5983000 	ldr	r3, [r8]                                      
30007274:	e15a0003 	cmp	sl, r3                                        
30007278:	0a000009 	beq	300072a4 <_Heap_Walk+0x44c>                   
    (*printer)(                                                       
3000727c:	e58d3004 	str	r3, [sp, #4]                                  
30007280:	e58da000 	str	sl, [sp]                                      
30007284:	e58d8008 	str	r8, [sp, #8]                                  
30007288:	e1a00005 	mov	r0, r5                                        
3000728c:	e3a01001 	mov	r1, #1                                        
30007290:	e59f2140 	ldr	r2, [pc, #320]	; 300073d8 <_Heap_Walk+0x580>  
30007294:	e1a03007 	mov	r3, r7                                        
30007298:	e1a0e00f 	mov	lr, pc                                        
3000729c:	e12fff14 	bx	r4                                             
300072a0:	ea000031 	b	3000736c <_Heap_Walk+0x514>                     
    );                                                                
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if ( !prev_used ) {                                                 
300072a4:	e35b0000 	cmp	fp, #0                                        
300072a8:	1a000007 	bne	300072cc <_Heap_Walk+0x474>                   
    (*printer)(                                                       
300072ac:	e59f2128 	ldr	r2, [pc, #296]	; 300073dc <_Heap_Walk+0x584>  
300072b0:	e1a00005 	mov	r0, r5                                        
300072b4:	e3a01001 	mov	r1, #1                                        
300072b8:	e1a03007 	mov	r3, r7                                        
300072bc:	e1a0e00f 	mov	lr, pc                                        
300072c0:	e12fff14 	bx	r4                                             
      return false;                                                   
    }                                                                 
                                                                      
    if ( !_Heap_Is_prev_used( next_block ) ) {                        
      if ( !_Heap_Walk_check_free_block( source, printer, heap, block ) ) {
        return false;                                                 
300072c4:	e1a0800b 	mov	r8, fp                                        
300072c8:	ea00001e 	b	30007348 <_Heap_Walk+0x4f0>                     
                                                                      
    block = next_block;                                               
  } while ( block != first_block );                                   
                                                                      
  return true;                                                        
}                                                                     
300072cc:	e5963008 	ldr	r3, [r6, #8]                                  
300072d0:	ea000002 	b	300072e0 <_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 ) {                                      
300072d4:	e1530007 	cmp	r3, r7                                        
300072d8:	0a000016 	beq	30007338 <_Heap_Walk+0x4e0>                   
      return true;                                                    
    }                                                                 
    free_block = free_block->next;                                    
300072dc:	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 ) {                            
300072e0:	e1530006 	cmp	r3, r6                                        
300072e4:	1afffffa 	bne	300072d4 <_Heap_Walk+0x47c>                   
300072e8:	ea000019 	b	30007354 <_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) {                                           
300072ec:	e35b0000 	cmp	fp, #0                                        
300072f0:	0a000007 	beq	30007314 <_Heap_Walk+0x4bc>                   
      (*printer)(                                                     
300072f4:	e58da000 	str	sl, [sp]                                      
300072f8:	e1a00005 	mov	r0, r5                                        
300072fc:	e3a01000 	mov	r1, #0                                        
30007300:	e59f20d8 	ldr	r2, [pc, #216]	; 300073e0 <_Heap_Walk+0x588>  
30007304:	e1a03007 	mov	r3, r7                                        
30007308:	e1a0e00f 	mov	lr, pc                                        
3000730c:	e12fff14 	bx	r4                                             
30007310:	ea000008 	b	30007338 <_Heap_Walk+0x4e0>                     
        "block 0x%08x: size %u\n",                                    
        block,                                                        
        block_size                                                    
      );                                                              
    } else {                                                          
      (*printer)(                                                     
30007314:	e58da000 	str	sl, [sp]                                      
30007318:	e5973000 	ldr	r3, [r7]                                      
3000731c:	e1a00005 	mov	r0, r5                                        
30007320:	e58d3004 	str	r3, [sp, #4]                                  
30007324:	e1a0100b 	mov	r1, fp                                        
30007328:	e59f20b4 	ldr	r2, [pc, #180]	; 300073e4 <_Heap_Walk+0x58c>  
3000732c:	e1a03007 	mov	r3, r7                                        
30007330:	e1a0e00f 	mov	lr, pc                                        
30007334:	e12fff14 	bx	r4                                             
        block->prev_size                                              
      );                                                              
    }                                                                 
                                                                      
    block = next_block;                                               
  } while ( block != first_block );                                   
30007338:	e59d2020 	ldr	r2, [sp, #32]                                 
3000733c:	e1580002 	cmp	r8, r2                                        
30007340:	1affff6a 	bne	300070f0 <_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;                                                      
30007344:	e3a08001 	mov	r8, #1                                        
                                                                      
    block = next_block;                                               
  } while ( block != first_block );                                   
                                                                      
  return true;                                                        
}                                                                     
30007348:	e1a00008 	mov	r0, r8                                        
3000734c:	e28dd030 	add	sp, sp, #48	; 0x30                            
30007350:	e8bd8ff0 	pop	{r4, r5, r6, r7, r8, r9, sl, fp, pc}          
                                                                      
    return false;                                                     
  }                                                                   
                                                                      
  if ( !_Heap_Walk_is_in_free_list( heap, block ) ) {                 
    (*printer)(                                                       
30007354:	e59f208c 	ldr	r2, [pc, #140]	; 300073e8 <_Heap_Walk+0x590>  
30007358:	e1a00005 	mov	r0, r5                                        
3000735c:	e3a01001 	mov	r1, #1                                        
30007360:	e1a03007 	mov	r3, r7                                        
30007364:	e1a0e00f 	mov	lr, pc                                        
30007368:	e12fff14 	bx	r4                                             
      return false;                                                   
    }                                                                 
                                                                      
    if ( !_Heap_Is_prev_used( next_block ) ) {                        
      if ( !_Heap_Walk_check_free_block( source, printer, heap, block ) ) {
        return false;                                                 
3000736c:	e3a08000 	mov	r8, #0                                        
30007370:	eafffff4 	b	30007348 <_Heap_Walk+0x4f0>                     
                                                                      

30006294 <_Internal_error_Occurred>: bool is_internal, Internal_errors_t the_error ) { _Internal_errors_What_happened.the_source = the_source;
30006294:	e59f3038 	ldr	r3, [pc, #56]	; 300062d4 <_Internal_error_Occurred+0x40>
void _Internal_error_Occurred(                                        
  Internal_errors_Source  the_source,                                 
  bool                    is_internal,                                
  Internal_errors_t       the_error                                   
)                                                                     
{                                                                     
30006298:	e20110ff 	and	r1, r1, #255	; 0xff                           
3000629c:	e52de004 	push	{lr}		; (str lr, [sp, #-4]!)                 
                                                                      
  _Internal_errors_What_happened.the_source  = the_source;            
300062a0:	e5830000 	str	r0, [r3]                                      
  _Internal_errors_What_happened.is_internal = is_internal;           
300062a4:	e5c31004 	strb	r1, [r3, #4]                                 
  _Internal_errors_What_happened.the_error   = the_error;             
300062a8:	e5832008 	str	r2, [r3, #8]                                  
void _Internal_error_Occurred(                                        
  Internal_errors_Source  the_source,                                 
  bool                    is_internal,                                
  Internal_errors_t       the_error                                   
)                                                                     
{                                                                     
300062ac:	e1a04002 	mov	r4, r2                                        
                                                                      
  _Internal_errors_What_happened.the_source  = the_source;            
  _Internal_errors_What_happened.is_internal = is_internal;           
  _Internal_errors_What_happened.the_error   = the_error;             
                                                                      
  _User_extensions_Fatal( the_source, is_internal, the_error );       
300062b0:	eb0006fa 	bl	30007ea0 <_User_extensions_Fatal>              
                                                                      
RTEMS_INLINE_ROUTINE void _System_state_Set (                         
  System_state_Codes state                                            
)                                                                     
{                                                                     
  _System_state_Current = state;                                      
300062b4:	e59f301c 	ldr	r3, [pc, #28]	; 300062d8 <_Internal_error_Occurred+0x44><== NOT EXECUTED
300062b8:	e3a02005 	mov	r2, #5                                        <== NOT EXECUTED
300062bc:	e5832000 	str	r2, [r3]                                      <== NOT EXECUTED
static inline uint32_t arm_interrupt_disable( void )                  
{                                                                     
  uint32_t arm_switch_reg;                                            
  uint32_t level;                                                     
                                                                      
  asm volatile (                                                      
300062c0:	e10f2000 	mrs	r2, CPSR                                      <== NOT EXECUTED
300062c4:	e3823080 	orr	r3, r2, #128	; 0x80                           <== NOT EXECUTED
300062c8:	e129f003 	msr	CPSR_fc, r3                                   <== NOT EXECUTED
                                                                      
  _System_state_Set( SYSTEM_STATE_FAILED );                           
                                                                      
  _CPU_Fatal_halt( the_error );                                       
300062cc:	e1a00004 	mov	r0, r4                                        <== NOT EXECUTED
300062d0:	eafffffe 	b	300062d0 <_Internal_error_Occurred+0x3c>        <== NOT EXECUTED
                                                                      

30007cb4 <_Objects_Id_to_name>: */ Objects_Name_or_id_lookup_errors _Objects_Id_to_name ( Objects_Id id, Objects_Name *name ) {
30007cb4:	e92d4031 	push	{r0, r4, r5, lr}                             
30007cb8:	e1a05001 	mov	r5, r1                                        
                                                                      
  /*                                                                  
   *  Caller is trusted for name != NULL.                             
   */                                                                 
                                                                      
  tmpId = (id == OBJECTS_ID_OF_SELF) ? _Thread_Executing->Object.id : id;
30007cbc:	e2501000 	subs	r1, r0, #0                                   
30007cc0:	059f3078 	ldreq	r3, [pc, #120]	; 30007d40 <_Objects_Id_to_name+0x8c>
30007cc4:	05933004 	ldreq	r3, [r3, #4]                                
30007cc8:	05931008 	ldreq	r1, [r3, #8]                                
30007ccc:	e1a03c21 	lsr	r3, r1, #24                                   
30007cd0:	e2033007 	and	r3, r3, #7                                    
 */                                                                   
RTEMS_INLINE_ROUTINE bool _Objects_Is_api_valid(                      
  uint32_t   the_api                                                  
)                                                                     
{                                                                     
  if ( !the_api || the_api > OBJECTS_APIS_LAST )                      
30007cd4:	e2432001 	sub	r2, r3, #1                                    
30007cd8:	e3520002 	cmp	r2, #2                                        
30007cdc:	8a000010 	bhi	30007d24 <_Objects_Id_to_name+0x70>           
30007ce0:	ea000011 	b	30007d2c <_Objects_Id_to_name+0x78>             
 */                                                                   
RTEMS_INLINE_ROUTINE uint32_t _Objects_Get_class(                     
  Objects_Id id                                                       
)                                                                     
{                                                                     
  return (uint32_t)                                                   
30007ce4:	e1a02da1 	lsr	r2, r1, #27                                   
  if ( !_Objects_Information_table[ the_api ] )                       
    return OBJECTS_INVALID_ID;                                        
                                                                      
  the_class = _Objects_Get_class( tmpId );                            
                                                                      
  information = _Objects_Information_table[ the_api ][ the_class ];   
30007ce8:	e7930102 	ldr	r0, [r3, r2, lsl #2]                          
  if ( !information )                                                 
30007cec:	e3500000 	cmp	r0, #0                                        
30007cf0:	0a00000b 	beq	30007d24 <_Objects_Id_to_name+0x70>           
    return OBJECTS_INVALID_ID;                                        
                                                                      
  #if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)                 
    if ( information->is_string )                                     
30007cf4:	e5d04038 	ldrb	r4, [r0, #56]	; 0x38                         
30007cf8:	e3540000 	cmp	r4, #0                                        
30007cfc:	1a000008 	bne	30007d24 <_Objects_Id_to_name+0x70>           
      return OBJECTS_INVALID_ID;                                      
  #endif                                                              
                                                                      
  the_object = _Objects_Get( information, tmpId, &ignored_location ); 
30007d00:	e1a0200d 	mov	r2, sp                                        
30007d04:	ebffffd0 	bl	30007c4c <_Objects_Get>                        
  if ( !the_object )                                                  
30007d08:	e3500000 	cmp	r0, #0                                        
30007d0c:	0a000004 	beq	30007d24 <_Objects_Id_to_name+0x70>           
    return OBJECTS_INVALID_ID;                                        
                                                                      
  *name = the_object->name;                                           
30007d10:	e590300c 	ldr	r3, [r0, #12]                                 
30007d14:	e5853000 	str	r3, [r5]                                      
  _Thread_Enable_dispatch();                                          
30007d18:	eb000216 	bl	30008578 <_Thread_Enable_dispatch>             
  return OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL;                        
30007d1c:	e1a00004 	mov	r0, r4                                        
30007d20:	ea000000 	b	30007d28 <_Objects_Id_to_name+0x74>             
  the_api = _Objects_Get_API( tmpId );                                
  if ( !_Objects_Is_api_valid( the_api ) )                            
    return OBJECTS_INVALID_ID;                                        
                                                                      
  if ( !_Objects_Information_table[ the_api ] )                       
    return OBJECTS_INVALID_ID;                                        
30007d24:	e3a00003 	mov	r0, #3                                        
    return OBJECTS_INVALID_ID;                                        
                                                                      
  *name = the_object->name;                                           
  _Thread_Enable_dispatch();                                          
  return OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL;                        
}                                                                     
30007d28:	e8bd8038 	pop	{r3, r4, r5, pc}                              
                                                                      
  the_api = _Objects_Get_API( tmpId );                                
  if ( !_Objects_Is_api_valid( the_api ) )                            
    return OBJECTS_INVALID_ID;                                        
                                                                      
  if ( !_Objects_Information_table[ the_api ] )                       
30007d2c:	e59f2010 	ldr	r2, [pc, #16]	; 30007d44 <_Objects_Id_to_name+0x90>
30007d30:	e7923103 	ldr	r3, [r2, r3, lsl #2]                          
30007d34:	e3530000 	cmp	r3, #0                                        
30007d38:	1affffe9 	bne	30007ce4 <_Objects_Id_to_name+0x30>           
30007d3c:	eafffff8 	b	30007d24 <_Objects_Id_to_name+0x70>             <== NOT EXECUTED
                                                                      

30006fa0 <_Objects_Set_name>: bool _Objects_Set_name( Objects_Information *information, Objects_Control *the_object, const char *name ) {
30006fa0:	e92d40f0 	push	{r4, r5, r6, r7, lr}                         
30006fa4:	e1a05000 	mov	r5, r0                                        
30006fa8:	e1a06001 	mov	r6, r1                                        
  size_t                 length;                                      
  const char            *s;                                           
                                                                      
  s      = name;                                                      
  length = strnlen( name, information->name_length );                 
30006fac:	e1a00002 	mov	r0, r2                                        
30006fb0:	e1d513ba 	ldrh	r1, [r5, #58]	; 0x3a                         
bool _Objects_Set_name(                                               
  Objects_Information *information,                                   
  Objects_Control     *the_object,                                    
  const char          *name                                           
)                                                                     
{                                                                     
30006fb4:	e1a07002 	mov	r7, r2                                        
  size_t                 length;                                      
  const char            *s;                                           
                                                                      
  s      = name;                                                      
  length = strnlen( name, information->name_length );                 
30006fb8:	eb002003 	bl	3000efcc <strnlen>                             
                                                                      
#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)                   
  if ( information->is_string ) {                                     
30006fbc:	e5d53038 	ldrb	r3, [r5, #56]	; 0x38                         
{                                                                     
  size_t                 length;                                      
  const char            *s;                                           
                                                                      
  s      = name;                                                      
  length = strnlen( name, information->name_length );                 
30006fc0:	e1a04000 	mov	r4, r0                                        
                                                                      
#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)                   
  if ( information->is_string ) {                                     
30006fc4:	e3530000 	cmp	r3, #0                                        
30006fc8:	0a000011 	beq	30007014 <_Objects_Set_name+0x74>             
    char *d;                                                          
                                                                      
    d = _Workspace_Allocate( length + 1 );                            
30006fcc:	e2800001 	add	r0, r0, #1                                    
30006fd0:	eb00068b 	bl	30008a04 <_Workspace_Allocate>                 
    if ( !d )                                                         
30006fd4:	e2505000 	subs	r5, r0, #0                                   
30006fd8:	0a000020 	beq	30007060 <_Objects_Set_name+0xc0>             
      return false;                                                   
                                                                      
    if ( the_object->name.name_p ) {                                  
30006fdc:	e596000c 	ldr	r0, [r6, #12]                                 
30006fe0:	e3500000 	cmp	r0, #0                                        
30006fe4:	0a000002 	beq	30006ff4 <_Objects_Set_name+0x54>             
      _Workspace_Free( (void *)the_object->name.name_p );             
30006fe8:	eb00068b 	bl	30008a1c <_Workspace_Free>                     
      the_object->name.name_p = NULL;                                 
30006fec:	e3a03000 	mov	r3, #0                                        
30006ff0:	e586300c 	str	r3, [r6, #12]                                 
    }                                                                 
                                                                      
    strncpy( d, name, length );                                       
30006ff4:	e1a00005 	mov	r0, r5                                        
30006ff8:	e1a01007 	mov	r1, r7                                        
30006ffc:	e1a02004 	mov	r2, r4                                        
30007000:	eb001fb6 	bl	3000eee0 <strncpy>                             
    d[length] = '\0';                                                 
30007004:	e3a03000 	mov	r3, #0                                        
30007008:	e7c53004 	strb	r3, [r5, r4]                                 
    the_object->name.name_p = d;                                      
3000700c:	e586500c 	str	r5, [r6, #12]                                 
30007010:	ea000010 	b	30007058 <_Objects_Set_name+0xb8>               
  } else                                                              
#endif                                                                
  {                                                                   
    the_object->name.name_u32 =  _Objects_Build_name(                 
30007014:	e3500001 	cmp	r0, #1                                        
30007018:	85d73001 	ldrbhi	r3, [r7, #1]                               
3000701c:	e5d72000 	ldrb	r2, [r7]                                     
30007020:	81a03803 	lslhi	r3, r3, #16                                 
30007024:	93a03602 	movls	r3, #2097152	; 0x200000                     
30007028:	e1a02c02 	lsl	r2, r2, #24                                   
3000702c:	e3500002 	cmp	r0, #2                                        
30007030:	e1832002 	orr	r2, r3, r2                                    
30007034:	85d73002 	ldrbhi	r3, [r7, #2]                               
30007038:	93a03a02 	movls	r3, #8192	; 0x2000                          
3000703c:	81a03403 	lslhi	r3, r3, #8                                  
30007040:	e3500003 	cmp	r0, #3                                        
30007044:	e1822003 	orr	r2, r2, r3                                    
30007048:	85d73003 	ldrbhi	r3, [r7, #3]                               
3000704c:	93a03020 	movls	r3, #32                                     
30007050:	e1823003 	orr	r3, r2, r3                                    
30007054:	e586300c 	str	r3, [r6, #12]                                 
      ((3 <  length) ? s[ 3 ] : ' ')                                  
    );                                                                
                                                                      
  }                                                                   
                                                                      
  return true;                                                        
30007058:	e3a00001 	mov	r0, #1                                        
3000705c:	e8bd80f0 	pop	{r4, r5, r6, r7, pc}                          
  if ( information->is_string ) {                                     
    char *d;                                                          
                                                                      
    d = _Workspace_Allocate( length + 1 );                            
    if ( !d )                                                         
      return false;                                                   
30007060:	e1a00005 	mov	r0, r5                                        <== NOT EXECUTED
    );                                                                
                                                                      
  }                                                                   
                                                                      
  return true;                                                        
}                                                                     
30007064:	e8bd80f0 	pop	{r4, r5, r6, r7, pc}                          <== NOT EXECUTED
                                                                      

30006080 <_POSIX_Condition_variables_Wait_support>: pthread_cond_t *cond, pthread_mutex_t *mutex, Watchdog_Interval timeout, bool already_timedout ) {
30006080:	e92d45f1 	push	{r0, r4, r5, r6, r7, r8, sl, lr}             
30006084:	e1a05000 	mov	r5, r0                                        
30006088:	e1a04001 	mov	r4, r1                                        
  register POSIX_Condition_variables_Control *the_cond;               
  Objects_Locations                           location;               
  int                                         status;                 
  int                                         mutex_status;           
                                                                      
  if ( !_POSIX_Mutex_Get( mutex, &location ) ) {                      
3000608c:	e1a00001 	mov	r0, r1                                        
30006090:	e1a0100d 	mov	r1, sp                                        
  pthread_cond_t            *cond,                                    
  pthread_mutex_t           *mutex,                                   
  Watchdog_Interval          timeout,                                 
  bool                       already_timedout                         
)                                                                     
{                                                                     
30006094:	e1a07002 	mov	r7, r2                                        
30006098:	e20380ff 	and	r8, r3, #255	; 0xff                           
  register POSIX_Condition_variables_Control *the_cond;               
  Objects_Locations                           location;               
  int                                         status;                 
  int                                         mutex_status;           
                                                                      
  if ( !_POSIX_Mutex_Get( mutex, &location ) ) {                      
3000609c:	eb000057 	bl	30006200 <_POSIX_Mutex_Get>                    
300060a0:	e3500000 	cmp	r0, #0                                        
300060a4:	e1a0600d 	mov	r6, sp                                        
300060a8:	0a000032 	beq	30006178 <_POSIX_Condition_variables_Wait_support+0xf8>
 */                                                                   
                                                                      
RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void )             
{                                                                     
  RTEMS_COMPILER_MEMORY_BARRIER();                                    
  _Thread_Dispatch_disable_level -= 1;                                
300060ac:	e59f30d0 	ldr	r3, [pc, #208]	; 30006184 <_POSIX_Condition_variables_Wait_support+0x104>
     return EINVAL;                                                   
  }                                                                   
                                                                      
  _Thread_Unnest_dispatch();                                          
                                                                      
  the_cond = _POSIX_Condition_variables_Get( cond, &location );       
300060b0:	e1a00005 	mov	r0, r5                                        
300060b4:	e5932000 	ldr	r2, [r3]                                      
300060b8:	e1a0100d 	mov	r1, sp                                        
300060bc:	e2422001 	sub	r2, r2, #1                                    
300060c0:	e5832000 	str	r2, [r3]                                      
300060c4:	ebffff7c 	bl	30005ebc <_POSIX_Condition_variables_Get>      
  switch ( location ) {                                               
300060c8:	e59d3000 	ldr	r3, [sp]                                      
     return EINVAL;                                                   
  }                                                                   
                                                                      
  _Thread_Unnest_dispatch();                                          
                                                                      
  the_cond = _POSIX_Condition_variables_Get( cond, &location );       
300060cc:	e1a0a000 	mov	sl, r0                                        
  switch ( location ) {                                               
300060d0:	e3530000 	cmp	r3, #0                                        
300060d4:	1a000027 	bne	30006178 <_POSIX_Condition_variables_Wait_support+0xf8>
                                                                      
    case OBJECTS_LOCAL:                                               
                                                                      
      if ( the_cond->Mutex && ( the_cond->Mutex != *mutex ) ) {       
300060d8:	e5903014 	ldr	r3, [r0, #20]                                 
300060dc:	e3530000 	cmp	r3, #0                                        
300060e0:	0a000004 	beq	300060f8 <_POSIX_Condition_variables_Wait_support+0x78>
300060e4:	e5942000 	ldr	r2, [r4]                                      
300060e8:	e1530002 	cmp	r3, r2                                        
300060ec:	0a000001 	beq	300060f8 <_POSIX_Condition_variables_Wait_support+0x78>
        _Thread_Enable_dispatch();                                    
300060f0:	eb000bd6 	bl	30009050 <_Thread_Enable_dispatch>             
300060f4:	ea00001f 	b	30006178 <_POSIX_Condition_variables_Wait_support+0xf8>
        return EINVAL;                                                
      }                                                               
                                                                      
      (void) pthread_mutex_unlock( mutex );                           
300060f8:	e1a00004 	mov	r0, r4                                        
300060fc:	eb0000e0 	bl	30006484 <pthread_mutex_unlock>                
        _Thread_Enable_dispatch();                                    
        return EINVAL;                                                
      }                                                               
*/                                                                    
                                                                      
      if ( !already_timedout ) {                                      
30006100:	e3580000 	cmp	r8, #0                                        
30006104:	1a000014 	bne	3000615c <_POSIX_Condition_variables_Wait_support+0xdc>
        the_cond->Mutex = *mutex;                                     
30006108:	e5943000 	ldr	r3, [r4]                                      
                                                                      
        _Thread_queue_Enter_critical_section( &the_cond->Wait_queue );
        _Thread_Executing->Wait.return_code = 0;                      
3000610c:	e59f6074 	ldr	r6, [pc, #116]	; 30006188 <_POSIX_Condition_variables_Wait_support+0x108>
        return EINVAL;                                                
      }                                                               
*/                                                                    
                                                                      
      if ( !already_timedout ) {                                      
        the_cond->Mutex = *mutex;                                     
30006110:	e58a3014 	str	r3, [sl, #20]                                 
                                                                      
RTEMS_INLINE_ROUTINE void _Thread_queue_Enter_critical_section (      
  Thread_queue_Control *the_thread_queue                              
)                                                                     
{                                                                     
  the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
30006114:	e3a03001 	mov	r3, #1                                        
30006118:	e58a3048 	str	r3, [sl, #72]	; 0x48                          
                                                                      
        _Thread_queue_Enter_critical_section( &the_cond->Wait_queue );
        _Thread_Executing->Wait.return_code = 0;                      
3000611c:	e5963004 	ldr	r3, [r6, #4]                                  
        _Thread_Executing->Wait.queue       = &the_cond->Wait_queue;  
30006120:	e28a0018 	add	r0, sl, #24                                   
                                                                      
      if ( !already_timedout ) {                                      
        the_cond->Mutex = *mutex;                                     
                                                                      
        _Thread_queue_Enter_critical_section( &the_cond->Wait_queue );
        _Thread_Executing->Wait.return_code = 0;                      
30006124:	e5838034 	str	r8, [r3, #52]	; 0x34                          
        _Thread_Executing->Wait.queue       = &the_cond->Wait_queue;  
        _Thread_Executing->Wait.id          = *cond;                  
30006128:	e5952000 	ldr	r2, [r5]                                      
      if ( !already_timedout ) {                                      
        the_cond->Mutex = *mutex;                                     
                                                                      
        _Thread_queue_Enter_critical_section( &the_cond->Wait_queue );
        _Thread_Executing->Wait.return_code = 0;                      
        _Thread_Executing->Wait.queue       = &the_cond->Wait_queue;  
3000612c:	e5830044 	str	r0, [r3, #68]	; 0x44                          
        _Thread_Executing->Wait.id          = *cond;                  
30006130:	e5832020 	str	r2, [r3, #32]                                 
                                                                      
        _Thread_queue_Enqueue( &the_cond->Wait_queue, timeout );      
30006134:	e1a01007 	mov	r1, r7                                        
30006138:	e59f204c 	ldr	r2, [pc, #76]	; 3000618c <_POSIX_Condition_variables_Wait_support+0x10c>
3000613c:	eb000cf4 	bl	30009514 <_Thread_queue_Enqueue_with_handler>  
                                                                      
        _Thread_Enable_dispatch();                                    
30006140:	eb000bc2 	bl	30009050 <_Thread_Enable_dispatch>             
        /*                                                            
         *  Switch ourself out because we blocked as a result of the  
         *  _Thread_queue_Enqueue.                                    
         */                                                           
                                                                      
        status = _Thread_Executing->Wait.return_code;                 
30006144:	e5963004 	ldr	r3, [r6, #4]                                  
30006148:	e5935034 	ldr	r5, [r3, #52]	; 0x34                          
        if ( status && status != ETIMEDOUT )                          
3000614c:	e3550074 	cmp	r5, #116	; 0x74                               
30006150:	13550000 	cmpne	r5, #0                                      
30006154:	0a000002 	beq	30006164 <_POSIX_Condition_variables_Wait_support+0xe4>
30006158:	ea000007 	b	3000617c <_POSIX_Condition_variables_Wait_support+0xfc><== NOT EXECUTED
          return status;                                              
                                                                      
      } else {                                                        
        _Thread_Enable_dispatch();                                    
3000615c:	eb000bbb 	bl	30009050 <_Thread_Enable_dispatch>             
        status = ETIMEDOUT;                                           
30006160:	e3a05074 	mov	r5, #116	; 0x74                               
                                                                      
      /*                                                              
       *  When we get here the dispatch disable level is 0.           
       */                                                             
                                                                      
      mutex_status = pthread_mutex_lock( mutex );                     
30006164:	e1a00004 	mov	r0, r4                                        
30006168:	eb0000a6 	bl	30006408 <pthread_mutex_lock>                  
      if ( mutex_status )                                             
        return EINVAL;                                                
3000616c:	e3500000 	cmp	r0, #0                                        
30006170:	13a05016 	movne	r5, #22                                     
30006174:	ea000000 	b	3000617c <_POSIX_Condition_variables_Wait_support+0xfc>
#endif                                                                
    case OBJECTS_ERROR:                                               
      break;                                                          
  }                                                                   
                                                                      
  return EINVAL;                                                      
30006178:	e3a05016 	mov	r5, #22                                       
}                                                                     
3000617c:	e1a00005 	mov	r0, r5                                        
30006180:	e8bd85f8 	pop	{r3, r4, r5, r6, r7, r8, sl, pc}              
                                                                      

3000afc0 <_Thread_queue_Extract_priority_helper>: void _Thread_queue_Extract_priority_helper( Thread_queue_Control *the_thread_queue __attribute__((unused)), Thread_Control *the_thread, bool requeuing ) {
3000afc0:	e92d4070 	push	{r4, r5, r6, lr}                             
3000afc4:	e20220ff 	and	r2, r2, #255	; 0xff                           
3000afc8:	e1a04001 	mov	r4, r1                                        
static inline uint32_t arm_interrupt_disable( void )                  
{                                                                     
  uint32_t arm_switch_reg;                                            
  uint32_t level;                                                     
                                                                      
  asm volatile (                                                      
3000afcc:	e10f1000 	mrs	r1, CPSR                                      
3000afd0:	e3813080 	orr	r3, r1, #128	; 0x80                           
3000afd4:	e129f003 	msr	CPSR_fc, r3                                   
 */                                                                   
RTEMS_INLINE_ROUTINE bool _States_Is_waiting_on_thread_queue (        
  States_Control the_states                                           
)                                                                     
{                                                                     
   return (the_states & STATES_WAITING_ON_THREAD_QUEUE);              
3000afd8:	e59f30a8 	ldr	r3, [pc, #168]	; 3000b088 <_Thread_queue_Extract_priority_helper+0xc8>
3000afdc:	e5940010 	ldr	r0, [r4, #16]                                 
3000afe0:	e0003003 	and	r3, r0, r3                                    
  Chain_Node     *new_second_node;                                    
  Chain_Node     *last_node;                                          
                                                                      
  the_node = (Chain_Node *) the_thread;                               
  _ISR_Disable( level );                                              
  if ( !_States_Is_waiting_on_thread_queue( the_thread->current_state ) ) {
3000afe4:	e3530000 	cmp	r3, #0                                        
3000afe8:	1a000000 	bne	3000aff0 <_Thread_queue_Extract_priority_helper+0x30>
    _ISR_Enable( level );                                             
3000afec:	ea000015 	b	3000b048 <_Thread_queue_Extract_priority_helper+0x88>
 */                                                                   
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(                            
  Chain_Control *the_chain                                            
)                                                                     
{                                                                     
  return (the_chain->first == _Chain_Tail(the_chain));                
3000aff0:	e5943038 	ldr	r3, [r4, #56]	; 0x38                          
                                                                      
  /*                                                                  
   *  The thread was actually waiting on a thread queue so let's remove it.
   */                                                                 
                                                                      
  next_node     = the_node->next;                                     
3000aff4:	e8941001 	ldm	r4, {r0, ip}                                  
 */                                                                   
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(                         
  Chain_Control *the_chain                                            
)                                                                     
{                                                                     
   return (Chain_Node *) &the_chain->permanent_null;                  
3000aff8:	e284503c 	add	r5, r4, #60	; 0x3c                            
  previous_node = the_node->previous;                                 
                                                                      
  if ( !_Chain_Is_empty( &the_thread->Wait.Block2n ) ) {              
3000affc:	e1530005 	cmp	r3, r5                                        
                                                                      
      new_first_thread->Wait.Block2n.last = last_node;                
      last_node->next = _Chain_Tail( &new_first_thread->Wait.Block2n );
    }                                                                 
  } else {                                                            
    previous_node->next = next_node;                                  
3000b000:	058c0000 	streq	r0, [ip]                                    
    next_node->previous = previous_node;                              
3000b004:	0580c004 	streq	ip, [r0, #4]                                
   */                                                                 
                                                                      
  next_node     = the_node->next;                                     
  previous_node = the_node->previous;                                 
                                                                      
  if ( !_Chain_Is_empty( &the_thread->Wait.Block2n ) ) {              
3000b008:	0a00000c 	beq	3000b040 <_Thread_queue_Extract_priority_helper+0x80>
    new_first_node   = the_thread->Wait.Block2n.first;                
    new_first_thread = (Thread_Control *) new_first_node;             
    last_node        = the_thread->Wait.Block2n.last;                 
3000b00c:	e5945040 	ldr	r5, [r4, #64]	; 0x40                          
    new_second_node  = new_first_node->next;                          
3000b010:	e5936000 	ldr	r6, [r3]                                      
    previous_node->next      = new_first_node;                        
    next_node->previous      = new_first_node;                        
    new_first_node->next     = next_node;                             
    new_first_node->previous = previous_node;                         
                                                                      
    if ( !_Chain_Has_only_one_node( &the_thread->Wait.Block2n ) ) {   
3000b014:	e1530005 	cmp	r3, r5                                        
    new_first_node   = the_thread->Wait.Block2n.first;                
    new_first_thread = (Thread_Control *) new_first_node;             
    last_node        = the_thread->Wait.Block2n.last;                 
    new_second_node  = new_first_node->next;                          
                                                                      
    previous_node->next      = new_first_node;                        
3000b018:	e58c3000 	str	r3, [ip]                                      
    next_node->previous      = new_first_node;                        
3000b01c:	e5803004 	str	r3, [r0, #4]                                  
    new_first_node->next     = next_node;                             
3000b020:	e8831001 	stm	r3, {r0, ip}                                  
    new_first_node->previous = previous_node;                         
                                                                      
    if ( !_Chain_Has_only_one_node( &the_thread->Wait.Block2n ) ) {   
3000b024:	0a000005 	beq	3000b040 <_Thread_queue_Extract_priority_helper+0x80>
                                        /* > two threads on 2-n */    
      new_second_node->previous =                                     
                _Chain_Head( &new_first_thread->Wait.Block2n );       
3000b028:	e2830038 	add	r0, r3, #56	; 0x38                            
    new_first_node->next     = next_node;                             
    new_first_node->previous = previous_node;                         
                                                                      
    if ( !_Chain_Has_only_one_node( &the_thread->Wait.Block2n ) ) {   
                                        /* > two threads on 2-n */    
      new_second_node->previous =                                     
3000b02c:	e5860004 	str	r0, [r6, #4]                                  
                _Chain_Head( &new_first_thread->Wait.Block2n );       
      new_first_thread->Wait.Block2n.first = new_second_node;         
3000b030:	e5836038 	str	r6, [r3, #56]	; 0x38                          
                                                                      
      new_first_thread->Wait.Block2n.last = last_node;                
3000b034:	e5835040 	str	r5, [r3, #64]	; 0x40                          
3000b038:	e283303c 	add	r3, r3, #60	; 0x3c                            
      last_node->next = _Chain_Tail( &new_first_thread->Wait.Block2n );
3000b03c:	e5853000 	str	r3, [r5]                                      
                                                                      
  /*                                                                  
   *  If we are not supposed to touch timers or the thread's state, return.
   */                                                                 
                                                                      
  if ( requeuing ) {                                                  
3000b040:	e3520000 	cmp	r2, #0                                        
3000b044:	0a000001 	beq	3000b050 <_Thread_queue_Extract_priority_helper+0x90>
                                                                      
static inline void arm_interrupt_enable( uint32_t level )             
{                                                                     
  ARM_SWITCH_REGISTERS;                                               
                                                                      
  asm volatile (                                                      
3000b048:	e129f001 	msr	CPSR_fc, r1                                   
3000b04c:	e8bd8070 	pop	{r4, r5, r6, pc}                              
    _ISR_Enable( level );                                             
    return;                                                           
  }                                                                   
                                                                      
  if ( !_Watchdog_Is_active( &the_thread->Timer ) ) {                 
3000b050:	e5943050 	ldr	r3, [r4, #80]	; 0x50                          
3000b054:	e3530002 	cmp	r3, #2                                        
3000b058:	0a000001 	beq	3000b064 <_Thread_queue_Extract_priority_helper+0xa4>
3000b05c:	e129f001 	msr	CPSR_fc, r1                                   
3000b060:	ea000004 	b	3000b078 <_Thread_queue_Extract_priority_helper+0xb8>
3000b064:	e3a03003 	mov	r3, #3                                        <== NOT EXECUTED
3000b068:	e5843050 	str	r3, [r4, #80]	; 0x50                          <== NOT EXECUTED
3000b06c:	e129f001 	msr	CPSR_fc, r1                                   <== NOT EXECUTED
    _ISR_Enable( level );                                             
  } else {                                                            
    _Watchdog_Deactivate( &the_thread->Timer );                       
    _ISR_Enable( level );                                             
    (void) _Watchdog_Remove( &the_thread->Timer );                    
3000b070:	e2840048 	add	r0, r4, #72	; 0x48                            <== NOT EXECUTED
3000b074:	ebfff43b 	bl	30008168 <_Watchdog_Remove>                    <== NOT EXECUTED
3000b078:	e59f100c 	ldr	r1, [pc, #12]	; 3000b08c <_Thread_queue_Extract_priority_helper+0xcc>
3000b07c:	e1a00004 	mov	r0, r4                                        
                                                                      
#if defined(RTEMS_MULTIPROCESSING)                                    
  if ( !_Objects_Is_local_id( the_thread->Object.id ) )               
    _Thread_MP_Free_proxy( the_thread );                              
#endif                                                                
}                                                                     
3000b080:	e8bd4070 	pop	{r4, r5, r6, lr}                              
3000b084:	eaffeef8 	b	30006c6c <_Thread_Clear_state>                  
                                                                      

3001423c <_Timer_server_Body>: * @a arg points to the corresponding timer server control block. */ static rtems_task _Timer_server_Body( rtems_task_argument arg ) {
3001423c:	e92d4ff0 	push	{r4, r5, r6, r7, r8, r9, sl, fp, lr}         
30014240:	e24dd018 	sub	sp, sp, #24                                   
30014244:	e28db00c 	add	fp, sp, #12                                   
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(                    
  Chain_Control *the_chain                                            
)                                                                     
{                                                                     
  the_chain->first          = _Chain_Tail(the_chain);                 
  the_chain->permanent_null = NULL;                                   
30014248:	e3a03000 	mov	r3, #0                                        
 */                                                                   
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(                         
  Chain_Control *the_chain                                            
)                                                                     
{                                                                     
   return (Chain_Node *) &the_chain->permanent_null;                  
3001424c:	e28ba004 	add	sl, fp, #4                                    
30014250:	e28d7004 	add	r7, sp, #4                                    
30014254:	e1a04000 	mov	r4, r0                                        
 */                                                                   
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(                    
  Chain_Control *the_chain                                            
)                                                                     
{                                                                     
  the_chain->first          = _Chain_Tail(the_chain);                 
30014258:	e58da00c 	str	sl, [sp, #12]                                 
  the_chain->permanent_null = NULL;                                   
3001425c:	e58d3010 	str	r3, [sp, #16]                                 
  the_chain->last           = _Chain_Head(the_chain);                 
30014260:	e58db014 	str	fp, [sp, #20]                                 
 */                                                                   
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(                         
  Chain_Control *the_chain                                            
)                                                                     
{                                                                     
   return (Chain_Node *) &the_chain->permanent_null;                  
30014264:	e1a0500d 	mov	r5, sp                                        
 */                                                                   
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(                    
  Chain_Control *the_chain                                            
)                                                                     
{                                                                     
  the_chain->first          = _Chain_Tail(the_chain);                 
30014268:	e58d7000 	str	r7, [sp]                                      
  the_chain->permanent_null = NULL;                                   
3001426c:	e98d2008 	stmib	sp, {r3, sp}                                
   */                                                                 
  Watchdog_Interval delta = snapshot - watchdogs->last_snapshot;      
                                                                      
  watchdogs->last_snapshot = snapshot;                                
                                                                      
  _Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );  
30014270:	e2809030 	add	r9, r0, #48	; 0x30                            
{                                                                     
  /*                                                                  
   *  Afterwards all timer inserts are directed to this chain and the interval
   *  and TOD chains will be no more modified by other parties.       
   */                                                                 
  ts->insert_chain = insert_chain;                                    
30014274:	e584b078 	str	fp, [r4, #120]	; 0x78                         
     /*                                                               
      *  The current TOD is before the last TOD which indicates that  
      *  TOD has been set backwards.                                  
      */                                                              
     delta = last_snapshot - snapshot;                                
     _Watchdog_Adjust( &watchdogs->Chain, WATCHDOG_BACKWARD, delta ); 
30014278:	e2848068 	add	r8, r4, #104	; 0x68                           
static void _Timer_server_Process_interval_watchdogs(                 
  Timer_server_Watchdogs *watchdogs,                                  
  Chain_Control *fire_chain                                           
)                                                                     
{                                                                     
  Watchdog_Interval snapshot = _Watchdog_Ticks_since_boot;            
3001427c:	e59f2150 	ldr	r2, [pc, #336]	; 300143d4 <_Timer_server_Body+0x198>
   */                                                                 
  Watchdog_Interval delta = snapshot - watchdogs->last_snapshot;      
                                                                      
  watchdogs->last_snapshot = snapshot;                                
                                                                      
  _Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );  
30014280:	e1a00009 	mov	r0, r9                                        
static void _Timer_server_Process_interval_watchdogs(                 
  Timer_server_Watchdogs *watchdogs,                                  
  Chain_Control *fire_chain                                           
)                                                                     
{                                                                     
  Watchdog_Interval snapshot = _Watchdog_Ticks_since_boot;            
30014284:	e5923000 	ldr	r3, [r2]                                      
                                                                      
  /*                                                                  
   *  We assume adequate unsigned arithmetic here.                    
   */                                                                 
  Watchdog_Interval delta = snapshot - watchdogs->last_snapshot;      
30014288:	e594103c 	ldr	r1, [r4, #60]	; 0x3c                          
                                                                      
  watchdogs->last_snapshot = snapshot;                                
                                                                      
  _Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );  
3001428c:	e1a02005 	mov	r2, r5                                        
  /*                                                                  
   *  We assume adequate unsigned arithmetic here.                    
   */                                                                 
  Watchdog_Interval delta = snapshot - watchdogs->last_snapshot;      
                                                                      
  watchdogs->last_snapshot = snapshot;                                
30014290:	e584303c 	str	r3, [r4, #60]	; 0x3c                          
                                                                      
  _Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );  
30014294:	e0611003 	rsb	r1, r1, r3                                    
30014298:	eb0010d6 	bl	300185f8 <_Watchdog_Adjust_to_chain>           
static void _Timer_server_Process_tod_watchdogs(                      
  Timer_server_Watchdogs *watchdogs,                                  
  Chain_Control *fire_chain                                           
)                                                                     
{                                                                     
  Watchdog_Interval snapshot = (Watchdog_Interval) _TOD_Seconds_since_epoch();
3001429c:	e59f3134 	ldr	r3, [pc, #308]	; 300143d8 <_Timer_server_Body+0x19c>
  Watchdog_Interval last_snapshot = watchdogs->last_snapshot;         
300142a0:	e5942074 	ldr	r2, [r4, #116]	; 0x74                         
static void _Timer_server_Process_tod_watchdogs(                      
  Timer_server_Watchdogs *watchdogs,                                  
  Chain_Control *fire_chain                                           
)                                                                     
{                                                                     
  Watchdog_Interval snapshot = (Watchdog_Interval) _TOD_Seconds_since_epoch();
300142a4:	e5936000 	ldr	r6, [r3]                                      
  /*                                                                  
   *  Process the seconds chain.  Start by checking that the Time     
   *  of Day (TOD) has not been set backwards.  If it has then        
   *  we want to adjust the watchdogs->Chain to indicate this.        
   */                                                                 
  if ( snapshot > last_snapshot ) {                                   
300142a8:	e1560002 	cmp	r6, r2                                        
300142ac:	9a000004 	bls	300142c4 <_Timer_server_Body+0x88>            
    /*                                                                
     *  This path is for normal forward movement and cases where the  
     *  TOD has been set forward.                                     
     */                                                               
    delta = snapshot - last_snapshot;                                 
    _Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );
300142b0:	e0621006 	rsb	r1, r2, r6                                    
300142b4:	e1a00008 	mov	r0, r8                                        
300142b8:	e1a02005 	mov	r2, r5                                        
300142bc:	eb0010cd 	bl	300185f8 <_Watchdog_Adjust_to_chain>           
300142c0:	ea000003 	b	300142d4 <_Timer_server_Body+0x98>              
     /*                                                               
      *  The current TOD is before the last TOD which indicates that  
      *  TOD has been set backwards.                                  
      */                                                              
     delta = last_snapshot - snapshot;                                
     _Watchdog_Adjust( &watchdogs->Chain, WATCHDOG_BACKWARD, delta ); 
300142c4:	31a00008 	movcc	r0, r8                                      
300142c8:	33a01001 	movcc	r1, #1                                      
300142cc:	30662002 	rsbcc	r2, r6, r2                                  
300142d0:	3b0010a0 	blcc	30018558 <_Watchdog_Adjust>                  
  }                                                                   
                                                                      
  watchdogs->last_snapshot = snapshot;                                
300142d4:	e5846074 	str	r6, [r4, #116]	; 0x74                         
}                                                                     
                                                                      
static void _Timer_server_Process_insertions( Timer_server_Control *ts )
{                                                                     
  while ( true ) {                                                    
    Timer_Control *timer = (Timer_Control *) _Chain_Get( ts->insert_chain );
300142d8:	e5940078 	ldr	r0, [r4, #120]	; 0x78                         
300142dc:	eb000295 	bl	30014d38 <_Chain_Get>                          
                                                                      
    if ( timer == NULL ) {                                            
300142e0:	e2506000 	subs	r6, r0, #0                                   
300142e4:	0a000009 	beq	30014310 <_Timer_server_Body+0xd4>            
static void _Timer_server_Insert_timer(                               
  Timer_server_Control *ts,                                           
  Timer_Control *timer                                                
)                                                                     
{                                                                     
  if ( timer->the_class == TIMER_INTERVAL_ON_TASK ) {                 
300142e8:	e5963038 	ldr	r3, [r6, #56]	; 0x38                          
300142ec:	e3530001 	cmp	r3, #1                                        
    _Watchdog_Insert( &ts->Interval_watchdogs.Chain, &timer->Ticker );
300142f0:	01a00009 	moveq	r0, r9                                      
static void _Timer_server_Insert_timer(                               
  Timer_server_Control *ts,                                           
  Timer_Control *timer                                                
)                                                                     
{                                                                     
  if ( timer->the_class == TIMER_INTERVAL_ON_TASK ) {                 
300142f4:	0a000002 	beq	30014304 <_Timer_server_Body+0xc8>            
    _Watchdog_Insert( &ts->Interval_watchdogs.Chain, &timer->Ticker );
  } else if ( timer->the_class == TIMER_TIME_OF_DAY_ON_TASK ) {       
300142f8:	e3530003 	cmp	r3, #3                                        
300142fc:	1afffff5 	bne	300142d8 <_Timer_server_Body+0x9c>            
    _Watchdog_Insert( &ts->TOD_watchdogs.Chain, &timer->Ticker );     
30014300:	e1a00008 	mov	r0, r8                                        
30014304:	e2861010 	add	r1, r6, #16                                   
30014308:	eb0010e5 	bl	300186a4 <_Watchdog_Insert>                    
3001430c:	eafffff1 	b	300142d8 <_Timer_server_Body+0x9c>              
     *  of zero it will be processed in the next iteration of the timer server
     *  body loop.                                                    
     */                                                               
    _Timer_server_Process_insertions( ts );                           
                                                                      
    _ISR_Disable( level );                                            
30014310:	ebffff97 	bl	30014174 <arm_interrupt_disable>               
    if ( _Chain_Is_empty( insert_chain ) ) {                          
30014314:	e59d300c 	ldr	r3, [sp, #12]                                 
30014318:	e153000a 	cmp	r3, sl                                        
3001431c:	1a000006 	bne	3001433c <_Timer_server_Body+0x100>           
      ts->insert_chain = NULL;                                        
30014320:	e5846078 	str	r6, [r4, #120]	; 0x78                         
30014324:	e129f000 	msr	CPSR_fc, r0                                   
  _Chain_Initialize_empty( &fire_chain );                             
                                                                      
  while ( true ) {                                                    
    _Timer_server_Get_watchdogs_that_fire_now( ts, &insert_chain, &fire_chain );
                                                                      
    if ( !_Chain_Is_empty( &fire_chain ) ) {                          
30014328:	e59d3000 	ldr	r3, [sp]                                      
3001432c:	e1530007 	cmp	r3, r7                                        
)                                                                     
{                                                                     
  if ( !_Chain_Is_empty(the_chain))                                   
    return _Chain_Get_first_unprotected(the_chain);                   
  else                                                                
    return NULL;                                                      
30014330:	13a06000 	movne	r6, #0                                      
30014334:	1a000002 	bne	30014344 <_Timer_server_Body+0x108>           
30014338:	ea000013 	b	3001438c <_Timer_server_Body+0x150>             
3001433c:	e129f000 	msr	CPSR_fc, r0                                   <== NOT EXECUTED
30014340:	eaffffcd 	b	3001427c <_Timer_server_Body+0x40>              <== NOT EXECUTED
                                                                      
        /*                                                            
         *  It is essential that interrupts are disable here since an interrupt
         *  service routine may remove a watchdog from the chain.     
         */                                                           
        _ISR_Disable( level );                                        
30014344:	ebffff8a 	bl	30014174 <arm_interrupt_disable>               
 */                                                                   
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(                            
  Chain_Control *the_chain                                            
)                                                                     
{                                                                     
  return (the_chain->first == _Chain_Tail(the_chain));                
30014348:	e59d3000 	ldr	r3, [sp]                                      
 */                                                                   
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Get_unprotected(              
  Chain_Control *the_chain                                            
)                                                                     
{                                                                     
  if ( !_Chain_Is_empty(the_chain))                                   
3001434c:	e1530007 	cmp	r3, r7                                        
30014350:	0a00000b 	beq	30014384 <_Timer_server_Body+0x148>           
{                                                                     
  Chain_Node  *return_node;                                           
  Chain_Node  *new_first;                                             
                                                                      
  return_node         = the_chain->first;                             
  new_first           = return_node->next;                            
30014354:	e5932000 	ldr	r2, [r3]                                      
        watchdog = (Watchdog_Control *) _Chain_Get_unprotected( &fire_chain );
        if ( watchdog != NULL ) {                                     
30014358:	e3530000 	cmp	r3, #0                                        
  the_chain->first    = new_first;                                    
3001435c:	e58d2000 	str	r2, [sp]                                      
  new_first->previous = _Chain_Head(the_chain);                       
30014360:	e5825004 	str	r5, [r2, #4]                                  
30014364:	0a000006 	beq	30014384 <_Timer_server_Body+0x148>           
          watchdog->state = WATCHDOG_INACTIVE;                        
30014368:	e5836008 	str	r6, [r3, #8]                                  
3001436c:	e129f000 	msr	CPSR_fc, r0                                   
        /*                                                            
         *  The timer server may block here and wait for resources or time.
         *  The system watchdogs are inactive and will remain inactive since
         *  the active flag of the timer server is true.              
         */                                                           
        (*watchdog->routine)( watchdog->id, watchdog->user_data );    
30014370:	e5930020 	ldr	r0, [r3, #32]                                 
30014374:	e5931024 	ldr	r1, [r3, #36]	; 0x24                          
30014378:	e1a0e00f 	mov	lr, pc                                        
3001437c:	e593f01c 	ldr	pc, [r3, #28]                                 
      }                                                               
30014380:	eaffffef 	b	30014344 <_Timer_server_Body+0x108>             
30014384:	e129f000 	msr	CPSR_fc, r0                                   
30014388:	eaffffb9 	b	30014274 <_Timer_server_Body+0x38>              
    } else {                                                          
      ts->active = false;                                             
3001438c:	e3a03000 	mov	r3, #0                                        
30014390:	e5c4307c 	strb	r3, [r4, #124]	; 0x7c                        
                                                                      
      /*                                                              
       *  Block until there is something to do.                       
       */                                                             
      _Thread_Disable_dispatch();                                     
30014394:	ebffff7a 	bl	30014184 <_Thread_Disable_dispatch>            
        _Thread_Set_state( ts->thread, STATES_DELAYING );             
30014398:	e3a01008 	mov	r1, #8                                        
3001439c:	e5940000 	ldr	r0, [r4]                                      
300143a0:	eb000e1b 	bl	30017c14 <_Thread_Set_state>                   
        _Timer_server_Reset_interval_system_watchdog( ts );           
300143a4:	e1a00004 	mov	r0, r4                                        
300143a8:	ebffff7b 	bl	3001419c <_Timer_server_Reset_interval_system_watchdog>
        _Timer_server_Reset_tod_system_watchdog( ts );                
300143ac:	e1a00004 	mov	r0, r4                                        
300143b0:	ebffff8d 	bl	300141ec <_Timer_server_Reset_tod_system_watchdog>
      _Thread_Enable_dispatch();                                      
300143b4:	eb000b97 	bl	30017218 <_Thread_Enable_dispatch>             
                                                                      
      ts->active = true;                                              
300143b8:	e3a03001 	mov	r3, #1                                        
300143bc:	e5c4307c 	strb	r3, [r4, #124]	; 0x7c                        
                                                                      
static void _Timer_server_Stop_interval_system_watchdog(              
  Timer_server_Control *ts                                            
)                                                                     
{                                                                     
  _Watchdog_Remove( &ts->Interval_watchdogs.System_watchdog );        
300143c0:	e2840008 	add	r0, r4, #8                                    
300143c4:	eb00110c 	bl	300187fc <_Watchdog_Remove>                    
                                                                      
static void _Timer_server_Stop_tod_system_watchdog(                   
  Timer_server_Control *ts                                            
)                                                                     
{                                                                     
  _Watchdog_Remove( &ts->TOD_watchdogs.System_watchdog );             
300143c8:	e2840040 	add	r0, r4, #64	; 0x40                            
300143cc:	eb00110a 	bl	300187fc <_Watchdog_Remove>                    
300143d0:	eaffffa7 	b	30014274 <_Timer_server_Body+0x38>              
                                                                      

30007ea0 <_User_extensions_Fatal>: void _User_extensions_Fatal ( Internal_errors_Source the_source, bool is_internal, Internal_errors_t the_error ) {
30007ea0:	e92d41f0 	push	{r4, r5, r6, r7, r8, lr}                     
  Chain_Node              *the_node;                                  
  User_extensions_Control *the_extension;                             
                                                                      
  for ( the_node = _User_extensions_List.last ;                       
30007ea4:	e59f503c 	ldr	r5, [pc, #60]	; 30007ee8 <_User_extensions_Fatal+0x48>
void _User_extensions_Fatal (                                         
  Internal_errors_Source  the_source,                                 
  bool                    is_internal,                                
  Internal_errors_t       the_error                                   
)                                                                     
{                                                                     
30007ea8:	e1a08000 	mov	r8, r0                                        
30007eac:	e1a07002 	mov	r7, r2                                        
30007eb0:	e20160ff 	and	r6, r1, #255	; 0xff                           
  Chain_Node              *the_node;                                  
  User_extensions_Control *the_extension;                             
                                                                      
  for ( the_node = _User_extensions_List.last ;                       
30007eb4:	e5954008 	ldr	r4, [r5, #8]                                  
30007eb8:	ea000007 	b	30007edc <_User_extensions_Fatal+0x3c>          
        !_Chain_Is_head( &_User_extensions_List, the_node ) ;         
        the_node = the_node->previous ) {                             
                                                                      
    the_extension = (User_extensions_Control *) the_node;             
                                                                      
    if ( the_extension->Callouts.fatal != NULL )                      
30007ebc:	e5943030 	ldr	r3, [r4, #48]	; 0x30                          
30007ec0:	e3530000 	cmp	r3, #0                                        
      (*the_extension->Callouts.fatal)( the_source, is_internal, the_error );
30007ec4:	11a00008 	movne	r0, r8                                      
30007ec8:	11a01006 	movne	r1, r6                                      
30007ecc:	11a02007 	movne	r2, r7                                      
30007ed0:	11a0e00f 	movne	lr, pc                                      
30007ed4:	112fff13 	bxne	r3                                           
  Chain_Node              *the_node;                                  
  User_extensions_Control *the_extension;                             
                                                                      
  for ( the_node = _User_extensions_List.last ;                       
        !_Chain_Is_head( &_User_extensions_List, the_node ) ;         
        the_node = the_node->previous ) {                             
30007ed8:	e5944004 	ldr	r4, [r4, #4]                                  
)                                                                     
{                                                                     
  Chain_Node              *the_node;                                  
  User_extensions_Control *the_extension;                             
                                                                      
  for ( the_node = _User_extensions_List.last ;                       
30007edc:	e1540005 	cmp	r4, r5                                        
30007ee0:	1afffff5 	bne	30007ebc <_User_extensions_Fatal+0x1c>        
    the_extension = (User_extensions_Control *) the_node;             
                                                                      
    if ( the_extension->Callouts.fatal != NULL )                      
      (*the_extension->Callouts.fatal)( the_source, is_internal, the_error );
  }                                                                   
}                                                                     
30007ee4:	e8bd81f0 	pop	{r4, r5, r6, r7, r8, pc}                      <== NOT EXECUTED
                                                                      

30009888 <pthread_attr_setschedpolicy>: int pthread_attr_setschedpolicy( pthread_attr_t *attr, int policy ) { if ( !attr || !attr->is_initialized )
30009888:	e3500000 	cmp	r0, #0                                        
3000988c:	0a00000b 	beq	300098c0 <pthread_attr_setschedpolicy+0x38>   
30009890:	e5903000 	ldr	r3, [r0]                                      
30009894:	e3530000 	cmp	r3, #0                                        
30009898:	0a000008 	beq	300098c0 <pthread_attr_setschedpolicy+0x38>   
    return EINVAL;                                                    
                                                                      
  switch ( policy ) {                                                 
3000989c:	e3510004 	cmp	r1, #4                                        
300098a0:	8a000008 	bhi	300098c8 <pthread_attr_setschedpolicy+0x40>   
300098a4:	e3a03001 	mov	r3, #1                                        
300098a8:	e1a03113 	lsl	r3, r3, r1                                    
300098ac:	e3130017 	tst	r3, #23                                       
    case SCHED_OTHER:                                                 
    case SCHED_FIFO:                                                  
    case SCHED_RR:                                                    
    case SCHED_SPORADIC:                                              
      attr->schedpolicy = policy;                                     
300098b0:	15801014 	strne	r1, [r0, #20]                               
      return 0;                                                       
300098b4:	13a00000 	movne	r0, #0                                      
)                                                                     
{                                                                     
  if ( !attr || !attr->is_initialized )                               
    return EINVAL;                                                    
                                                                      
  switch ( policy ) {                                                 
300098b8:	112fff1e 	bxne	lr                                           
300098bc:	ea000001 	b	300098c8 <pthread_attr_setschedpolicy+0x40>     <== NOT EXECUTED
  pthread_attr_t  *attr,                                              
  int              policy                                             
)                                                                     
{                                                                     
  if ( !attr || !attr->is_initialized )                               
    return EINVAL;                                                    
300098c0:	e3a00016 	mov	r0, #22                                       
300098c4:	e12fff1e 	bx	lr                                             
    case SCHED_SPORADIC:                                              
      attr->schedpolicy = policy;                                     
      return 0;                                                       
                                                                      
    default:                                                          
      return ENOTSUP;                                                 
300098c8:	e3a00086 	mov	r0, #134	; 0x86                               
  }                                                                   
}                                                                     
300098cc:	e12fff1e 	bx	lr                                             
                                                                      

300050d4 <pthread_key_create>:
300050d4:	e59f30f4 	ldr	r3, [pc, #244]	; 300051d0 <pthread_key_create+0xfc>
                                                                      
int pthread_key_create(                                               
  pthread_key_t  *key,                                                
  void          (*destructor)( void * )                               
)                                                                     
{                                                                     
300050d8:	e92d45f0 	push	{r4, r5, r6, r7, r8, sl, lr}                 
300050dc:	e5932000 	ldr	r2, [r3]                                      
300050e0:	e1a08000 	mov	r8, r0                                        
300050e4:	e2822001 	add	r2, r2, #1                                    
300050e8:	e5832000 	str	r2, [r3]                                      
300050ec:	e1a05001 	mov	r5, r1                                        
 *  the inactive chain of free keys control blocks.                   
 */                                                                   
                                                                      
RTEMS_INLINE_ROUTINE POSIX_Keys_Control *_POSIX_Keys_Allocate( void ) 
{                                                                     
  return (POSIX_Keys_Control *) _Objects_Allocate( &_POSIX_Keys_Information );
300050f0:	e59f00dc 	ldr	r0, [pc, #220]	; 300051d4 <pthread_key_create+0x100>
300050f4:	eb000835 	bl	300071d0 <_Objects_Allocate>                   
                                                                      
  _Thread_Disable_dispatch();                                         
                                                                      
  the_key = _POSIX_Keys_Allocate();                                   
                                                                      
  if ( !the_key ) {                                                   
300050f8:	e2504000 	subs	r4, r0, #0                                   
300050fc:	1a000002 	bne	3000510c <pthread_key_create+0x38>            
    _Thread_Enable_dispatch();                                        
30005100:	eb000b52 	bl	30007e50 <_Thread_Enable_dispatch>             
    return EAGAIN;                                                    
30005104:	e3a0000b 	mov	r0, #11                                       
30005108:	e8bd85f0 	pop	{r4, r5, r6, r7, r8, sl, pc}                  
  }                                                                   
                                                                      
  the_key->destructor = destructor;                                   
3000510c:	e59f70c4 	ldr	r7, [pc, #196]	; 300051d8 <pthread_key_create+0x104>
30005110:	e5845010 	str	r5, [r4, #16]                                 
30005114:	e1a06004 	mov	r6, r4                                        
   *  APIs are optional.                                              
   *                                                                  
   *  NOTE: Currently RTEMS Classic API tasks are always enabled.     
   */                                                                 
                                                                      
  for ( the_api = 1;                                                  
30005118:	e3a05001 	mov	r5, #1                                        
        the_api <= OBJECTS_APIS_LAST;                                 
        the_api++ ) {                                                 
                                                                      
    if ( _Objects_Information_table[ the_api ] ) {                    
3000511c:	e5b73004 	ldr	r3, [r7, #4]!                                 
30005120:	e3530000 	cmp	r3, #0                                        
30005124:	0a000019 	beq	30005190 <pthread_key_create+0xbc>            
            true,                                                     
            INTERNAL_ERROR_IMPLEMENTATION_KEY_CREATE_INCONSISTENCY    
          );                                                          
      #endif                                                          
      bytes_to_allocate = sizeof( void * ) *                          
        (_Objects_Information_table[ the_api ][ 1 ]->maximum + 1);    
30005128:	e5933004 	ldr	r3, [r3, #4]                                  
3000512c:	e1d3a1b0 	ldrh	sl, [r3, #16]                                
30005130:	e28aa001 	add	sl, sl, #1                                    
            INTERNAL_ERROR_CORE,                                      
            true,                                                     
            INTERNAL_ERROR_IMPLEMENTATION_KEY_CREATE_INCONSISTENCY    
          );                                                          
      #endif                                                          
      bytes_to_allocate = sizeof( void * ) *                          
30005134:	e1a0a10a 	lsl	sl, sl, #2                                    
        (_Objects_Information_table[ the_api ][ 1 ]->maximum + 1);    
      table = _Workspace_Allocate( bytes_to_allocate );               
30005138:	e1a0000a 	mov	r0, sl                                        
3000513c:	eb00104a 	bl	3000926c <_Workspace_Allocate>                 
      if ( !table ) {                                                 
30005140:	e2503000 	subs	r3, r0, #0                                   
30005144:	1a00000c 	bne	3000517c <pthread_key_create+0xa8>            
int	_EXFUN(pthread_once,                                              
	(pthread_once_t *__once_control, void (*__init_routine)(void)));     
                                                                      
/* Thread-Specific Data Key Create, P1003.1c/Draft 10, p. 163 */      
                                                                      
int	_EXFUN(pthread_key_create,                                        
30005148:	e2856005 	add	r6, r5, #5                                    
3000514c:	e0846106 	add	r6, r4, r6, lsl #2                            
        for ( --the_api;                                              
30005150:	ea000001 	b	3000515c <pthread_key_create+0x88>              
              the_api >= 1;                                           
              the_api-- )                                             
          _Workspace_Free( the_key->Values[ the_api ] );              
30005154:	e5360004 	ldr	r0, [r6, #-4]!                                
30005158:	eb001049 	bl	30009284 <_Workspace_Free>                     
      #endif                                                          
      bytes_to_allocate = sizeof( void * ) *                          
        (_Objects_Information_table[ the_api ][ 1 ]->maximum + 1);    
      table = _Workspace_Allocate( bytes_to_allocate );               
      if ( !table ) {                                                 
        for ( --the_api;                                              
3000515c:	e2555001 	subs	r5, r5, #1                                   
30005160:	1afffffb 	bne	30005154 <pthread_key_create+0x80>            
 */                                                                   
RTEMS_INLINE_ROUTINE void _POSIX_Keys_Free (                          
  POSIX_Keys_Control *the_key                                         
)                                                                     
{                                                                     
  _Objects_Free( &_POSIX_Keys_Information, &the_key->Object );        
30005164:	e59f0068 	ldr	r0, [pc, #104]	; 300051d4 <pthread_key_create+0x100>
30005168:	e1a01004 	mov	r1, r4                                        
3000516c:	eb0008df 	bl	300074f0 <_Objects_Free>                       
              the_api >= 1;                                           
              the_api-- )                                             
          _Workspace_Free( the_key->Values[ the_api ] );              
                                                                      
        _POSIX_Keys_Free( the_key );                                  
        _Thread_Enable_dispatch();                                    
30005170:	eb000b36 	bl	30007e50 <_Thread_Enable_dispatch>             
        return ENOMEM;                                                
30005174:	e3a0000c 	mov	r0, #12                                       
30005178:	e8bd85f0 	pop	{r4, r5, r6, r7, r8, sl, pc}                  
      }                                                               
                                                                      
      the_key->Values[ the_api ] = table;                             
3000517c:	e5863018 	str	r3, [r6, #24]                                 
      memset( table, '\0', bytes_to_allocate );                       
30005180:	e3a01000 	mov	r1, #0                                        
30005184:	e1a0200a 	mov	r2, sl                                        
30005188:	eb002450 	bl	3000e2d0 <memset>                              
3000518c:	ea000000 	b	30005194 <pthread_key_create+0xc0>              
    } else {                                                          
      the_key->Values[ the_api ] = NULL;                              
30005190:	e5863018 	str	r3, [r6, #24]                                 <== NOT EXECUTED
   *  NOTE: Currently RTEMS Classic API tasks are always enabled.     
   */                                                                 
                                                                      
  for ( the_api = 1;                                                  
        the_api <= OBJECTS_APIS_LAST;                                 
        the_api++ ) {                                                 
30005194:	e2855001 	add	r5, r5, #1                                    
   *  APIs are optional.                                              
   *                                                                  
   *  NOTE: Currently RTEMS Classic API tasks are always enabled.     
   */                                                                 
                                                                      
  for ( the_api = 1;                                                  
30005198:	e3550004 	cmp	r5, #4                                        
        the_api <= OBJECTS_APIS_LAST;                                 
        the_api++ ) {                                                 
3000519c:	e2866004 	add	r6, r6, #4                                    
   *  APIs are optional.                                              
   *                                                                  
   *  NOTE: Currently RTEMS Classic API tasks are always enabled.     
   */                                                                 
                                                                      
  for ( the_api = 1;                                                  
300051a0:	1affffdd 	bne	3000511c <pthread_key_create+0x48>            
  #if defined(RTEMS_DEBUG)                                            
    if ( index > information->maximum )                               
      return;                                                         
  #endif                                                              
                                                                      
  information->local_table[ index ] = the_object;                     
300051a4:	e59f2028 	ldr	r2, [pc, #40]	; 300051d4 <pthread_key_create+0x100>
  Objects_Information *information,                                   
  Objects_Control     *the_object,                                    
  uint32_t             name                                           
)                                                                     
{                                                                     
  _Objects_Set_local_object(                                          
300051a8:	e5943008 	ldr	r3, [r4, #8]                                  
  #if defined(RTEMS_DEBUG)                                            
    if ( index > information->maximum )                               
      return;                                                         
  #endif                                                              
                                                                      
  information->local_table[ index ] = the_object;                     
300051ac:	e592201c 	ldr	r2, [r2, #28]                                 
  Objects_Information *information,                                   
  Objects_Control     *the_object,                                    
  uint32_t             name                                           
)                                                                     
{                                                                     
  _Objects_Set_local_object(                                          
300051b0:	e1d410b8 	ldrh	r1, [r4, #8]                                 
    _Objects_Get_index( the_object->id ),                             
    the_object                                                        
  );                                                                  
                                                                      
  /* ASSERT: information->is_string == false */                       
  the_object->name.name_u32 = name;                                   
300051b4:	e3a05000 	mov	r5, #0                                        
  #if defined(RTEMS_DEBUG)                                            
    if ( index > information->maximum )                               
      return;                                                         
  #endif                                                              
                                                                      
  information->local_table[ index ] = the_object;                     
300051b8:	e7824101 	str	r4, [r2, r1, lsl #2]                          
    _Objects_Get_index( the_object->id ),                             
    the_object                                                        
  );                                                                  
                                                                      
  /* ASSERT: information->is_string == false */                       
  the_object->name.name_u32 = name;                                   
300051bc:	e584500c 	str	r5, [r4, #12]                                 
                                                                      
  }                                                                   
                                                                      
  _Objects_Open_u32( &_POSIX_Keys_Information, &the_key->Object, 0 ); 
                                                                      
  *key = the_key->Object.id;                                          
300051c0:	e5883000 	str	r3, [r8]                                      
                                                                      
  _Thread_Enable_dispatch();                                          
300051c4:	eb000b21 	bl	30007e50 <_Thread_Enable_dispatch>             
                                                                      
  return 0;                                                           
300051c8:	e1a00005 	mov	r0, r5                                        
}                                                                     
300051cc:	e8bd85f0 	pop	{r4, r5, r6, r7, r8, sl, pc}                  
                                                                      

30007210 <pthread_mutexattr_setpshared>: int pthread_mutexattr_setpshared( pthread_mutexattr_t *attr, int pshared ) { if ( !attr || !attr->is_initialized )
30007210:	e3500000 	cmp	r0, #0                                        
30007214:	0a000007 	beq	30007238 <pthread_mutexattr_setpshared+0x28>  
30007218:	e5903000 	ldr	r3, [r0]                                      
3000721c:	e3530000 	cmp	r3, #0                                        
30007220:	0a000004 	beq	30007238 <pthread_mutexattr_setpshared+0x28>  
    return EINVAL;                                                    
                                                                      
  switch ( pshared ) {                                                
30007224:	e3510001 	cmp	r1, #1                                        
    case PTHREAD_PROCESS_SHARED:                                      
    case PTHREAD_PROCESS_PRIVATE:                                     
      attr->process_shared = pshared;                                 
30007228:	95801004 	strls	r1, [r0, #4]                                
      return 0;                                                       
3000722c:	93a00000 	movls	r0, #0                                      
)                                                                     
{                                                                     
  if ( !attr || !attr->is_initialized )                               
    return EINVAL;                                                    
                                                                      
  switch ( pshared ) {                                                
30007230:	912fff1e 	bxls	lr                                           
30007234:	ea000001 	b	30007240 <pthread_mutexattr_setpshared+0x30>    <== NOT EXECUTED
  pthread_mutexattr_t *attr,                                          
  int                  pshared                                        
)                                                                     
{                                                                     
  if ( !attr || !attr->is_initialized )                               
    return EINVAL;                                                    
30007238:	e3a00016 	mov	r0, #22                                       
3000723c:	e12fff1e 	bx	lr                                             
    case PTHREAD_PROCESS_PRIVATE:                                     
      attr->process_shared = pshared;                                 
      return 0;                                                       
                                                                      
    default:                                                          
      return EINVAL;                                                  
30007240:	e3a00016 	mov	r0, #22                                       <== NOT EXECUTED
  }                                                                   
}                                                                     
30007244:	e12fff1e 	bx	lr                                             <== NOT EXECUTED
                                                                      

30006c78 <pthread_rwlockattr_setpshared>: int pthread_rwlockattr_setpshared( pthread_rwlockattr_t *attr, int pshared ) { if ( !attr )
30006c78:	e3500000 	cmp	r0, #0                                        
30006c7c:	0a000007 	beq	30006ca0 <pthread_rwlockattr_setpshared+0x28> 
    return EINVAL;                                                    
                                                                      
  if ( !attr->is_initialized )                                        
30006c80:	e5903000 	ldr	r3, [r0]                                      
30006c84:	e3530000 	cmp	r3, #0                                        
30006c88:	0a000004 	beq	30006ca0 <pthread_rwlockattr_setpshared+0x28> 
    return EINVAL;                                                    
                                                                      
  switch ( pshared ) {                                                
30006c8c:	e3510001 	cmp	r1, #1                                        
    case PTHREAD_PROCESS_SHARED:                                      
    case PTHREAD_PROCESS_PRIVATE:                                     
      attr->process_shared = pshared;                                 
30006c90:	95801004 	strls	r1, [r0, #4]                                
      return 0;                                                       
30006c94:	93a00000 	movls	r0, #0                                      
    return EINVAL;                                                    
                                                                      
  if ( !attr->is_initialized )                                        
    return EINVAL;                                                    
                                                                      
  switch ( pshared ) {                                                
30006c98:	912fff1e 	bxls	lr                                           
30006c9c:	ea000001 	b	30006ca8 <pthread_rwlockattr_setpshared+0x30>   <== NOT EXECUTED
{                                                                     
  if ( !attr )                                                        
    return EINVAL;                                                    
                                                                      
  if ( !attr->is_initialized )                                        
    return EINVAL;                                                    
30006ca0:	e3a00016 	mov	r0, #22                                       
30006ca4:	e12fff1e 	bx	lr                                             
    case PTHREAD_PROCESS_PRIVATE:                                     
      attr->process_shared = pshared;                                 
      return 0;                                                       
                                                                      
    default:                                                          
      return EINVAL;                                                  
30006ca8:	e3a00016 	mov	r0, #22                                       <== NOT EXECUTED
  }                                                                   
}                                                                     
30006cac:	e12fff1e 	bx	lr                                             <== NOT EXECUTED
                                                                      

3000c6a0 <rtems_task_mode>: rtems_status_code rtems_task_mode( rtems_mode mode_set, rtems_mode mask, rtems_mode *previous_mode_set ) {
3000c6a0:	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 )                                           
3000c6a4:	e252a000 	subs	sl, r2, #0                                   
rtems_status_code rtems_task_mode(                                    
  rtems_mode  mode_set,                                               
  rtems_mode  mask,                                                   
  rtems_mode *previous_mode_set                                       
)                                                                     
{                                                                     
3000c6a8:	e1a04000 	mov	r4, r0                                        
3000c6ac:	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;                                     
3000c6b0:	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 )                                           
3000c6b4:	08bd87f0 	popeq	{r4, r5, r6, r7, r8, r9, sl, pc}            
    return RTEMS_INVALID_ADDRESS;                                     
                                                                      
  executing     = _Thread_Executing;                                  
3000c6b8:	e59f314c 	ldr	r3, [pc, #332]	; 3000c80c <rtems_task_mode+0x16c>
3000c6bc:	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;
3000c6c0:	e5d78074 	ldrb	r8, [r7, #116]	; 0x74                        
                                                                      
  if ( !previous_mode_set )                                           
    return RTEMS_INVALID_ADDRESS;                                     
                                                                      
  executing     = _Thread_Executing;                                  
  api = executing->API_Extensions[ THREAD_API_RTEMS ];                
3000c6c4:	e5976104 	ldr	r6, [r7, #260]	; 0x104                        
  asr = &api->Signal;                                                 
                                                                      
  old_mode  = (executing->is_preemptible) ? RTEMS_PREEMPT : RTEMS_NO_PREEMPT;
                                                                      
  if ( executing->budget_algorithm == THREAD_CPU_BUDGET_ALGORITHM_NONE )
3000c6c8:	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;
3000c6cc:	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;           
3000c6d0:	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;
3000c6d4:	03a08c01 	moveq	r8, #256	; 0x100                            
3000c6d8:	13a08000 	movne	r8, #0                                      
                                                                      
  if ( executing->budget_algorithm == THREAD_CPU_BUDGET_ALGORITHM_NONE )
3000c6dc:	e3530000 	cmp	r3, #0                                        
    old_mode |= RTEMS_NO_TIMESLICE;                                   
  else                                                                
    old_mode |= RTEMS_TIMESLICE;                                      
3000c6e0:	13888c02 	orrne	r8, r8, #512	; 0x200                        
                                                                      
  old_mode |= (asr->is_enabled) ? RTEMS_ASR : RTEMS_NO_ASR;           
3000c6e4:	e3590000 	cmp	r9, #0                                        
3000c6e8:	03a09b01 	moveq	r9, #1024	; 0x400                           
3000c6ec:	13a09000 	movne	r9, #0                                      
  old_mode |= _ISR_Get_level();                                       
3000c6f0:	ebffeff8 	bl	300086d8 <_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;           
3000c6f4:	e1899000 	orr	r9, r9, r0                                    
  old_mode |= _ISR_Get_level();                                       
3000c6f8:	e1898008 	orr	r8, r9, r8                                    
                                                                      
  /*                                                                  
   *  These are generic thread scheduling characteristics.            
   */                                                                 
                                                                      
  if ( mask & RTEMS_PREEMPT_MASK )                                    
3000c6fc:	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;                                      
3000c700:	e58a8000 	str	r8, [sl]                                      
                                                                      
  /*                                                                  
   *  These are generic thread scheduling characteristics.            
   */                                                                 
                                                                      
  if ( mask & RTEMS_PREEMPT_MASK )                                    
3000c704:	0a000003 	beq	3000c718 <rtems_task_mode+0x78>               
    executing->is_preemptible = _Modes_Is_preempt(mode_set) ? true : false;
3000c708:	e3140c01 	tst	r4, #256	; 0x100                              
3000c70c:	13a03000 	movne	r3, #0                                      
3000c710:	03a03001 	moveq	r3, #1                                      
3000c714:	e5c73074 	strb	r3, [r7, #116]	; 0x74                        
                                                                      
  if ( mask & RTEMS_TIMESLICE_MASK ) {                                
3000c718:	e3150c02 	tst	r5, #512	; 0x200                              
3000c71c:	0a000006 	beq	3000c73c <rtems_task_mode+0x9c>               
    if ( _Modes_Is_timeslice(mode_set) ) {                            
3000c720:	e2143c02 	ands	r3, r4, #512	; 0x200                         
      executing->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE;
3000c724:	13a03001 	movne	r3, #1                                      
3000c728:	1587307c 	strne	r3, [r7, #124]	; 0x7c                       
      executing->cpu_time_budget  = _Thread_Ticks_per_timeslice;      
3000c72c:	159f30dc 	ldrne	r3, [pc, #220]	; 3000c810 <rtems_task_mode+0x170>
    } else                                                            
      executing->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_NONE; 
3000c730:	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;      
3000c734:	15933000 	ldrne	r3, [r3]                                    
3000c738:	15873078 	strne	r3, [r7, #120]	; 0x78                       
                                                                      
  /*                                                                  
   *  Set the new interrupt level                                     
   */                                                                 
                                                                      
  if ( mask & RTEMS_INTERRUPT_MASK )                                  
3000c73c:	e3150080 	tst	r5, #128	; 0x80                               
3000c740:	0a000001 	beq	3000c74c <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 ) );           
3000c744:	e2040080 	and	r0, r4, #128	; 0x80                           
3000c748:	ebffefdd 	bl	300086c4 <_CPU_ISR_Set_level>                  
   */                                                                 
                                                                      
  is_asr_enabled = false;                                             
  needs_asr_dispatching = false;                                      
                                                                      
  if ( mask & RTEMS_ASR_MASK ) {                                      
3000c74c:	e2150b01 	ands	r0, r5, #1024	; 0x400                        
3000c750:	0a000013 	beq	3000c7a4 <rtems_task_mode+0x104>              
 *  Output:                                                           
 *    *previous_mode_set - previous mode set                          
 *     always return RTEMS_SUCCESSFUL;                                
 */                                                                   
                                                                      
rtems_status_code rtems_task_mode(                                    
3000c754:	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 ) {                        
3000c758:	e5d62008 	ldrb	r2, [r6, #8]                                 
 *  Output:                                                           
 *    *previous_mode_set - previous mode set                          
 *     always return RTEMS_SUCCESSFUL;                                
 */                                                                   
                                                                      
rtems_status_code rtems_task_mode(                                    
3000c75c:	13a03000 	movne	r3, #0                                      
3000c760:	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 ) {                        
3000c764:	e1520003 	cmp	r2, r3                                        
  /*                                                                  
   *  This is specific to the RTEMS API                               
   */                                                                 
                                                                      
  is_asr_enabled = false;                                             
  needs_asr_dispatching = false;                                      
3000c768:	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 ) {                        
3000c76c:	0a00000c 	beq	3000c7a4 <rtems_task_mode+0x104>              
      asr->is_enabled = is_asr_enabled;                               
3000c770:	e5c63008 	strb	r3, [r6, #8]                                 
static inline uint32_t arm_interrupt_disable( void )                  
{                                                                     
  uint32_t arm_switch_reg;                                            
  uint32_t level;                                                     
                                                                      
  asm volatile (                                                      
3000c774:	e10f3000 	mrs	r3, CPSR                                      
3000c778:	e3832080 	orr	r2, r3, #128	; 0x80                           
3000c77c:	e129f002 	msr	CPSR_fc, r2                                   
{                                                                     
  rtems_signal_set _signals;                                          
  ISR_Level        _level;                                            
                                                                      
  _ISR_Disable( _level );                                             
    _signals                     = information->signals_pending;      
3000c780:	e5962018 	ldr	r2, [r6, #24]                                 
    information->signals_pending = information->signals_posted;       
3000c784:	e5961014 	ldr	r1, [r6, #20]                                 
    information->signals_posted  = _signals;                          
3000c788:	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;       
3000c78c:	e5861018 	str	r1, [r6, #24]                                 
                                                                      
static inline void arm_interrupt_enable( uint32_t level )             
{                                                                     
  ARM_SWITCH_REGISTERS;                                               
                                                                      
  asm volatile (                                                      
3000c790:	e129f003 	msr	CPSR_fc, r3                                   
      _ASR_Swap_signals( asr );                                       
      if ( _ASR_Are_signals_pending( asr ) ) {                        
3000c794:	e5960014 	ldr	r0, [r6, #20]                                 
  /*                                                                  
   *  This is specific to the RTEMS API                               
   */                                                                 
                                                                      
  is_asr_enabled = false;                                             
  needs_asr_dispatching = false;                                      
3000c798:	e3500000 	cmp	r0, #0                                        
3000c79c:	13a00001 	movne	r0, #1                                      
3000c7a0:	03a00000 	moveq	r0, #0                                      
        needs_asr_dispatching = true;                                 
      }                                                               
    }                                                                 
  }                                                                   
                                                                      
  if ( _System_state_Is_up( _System_state_Get() ) )                   
3000c7a4:	e59f3068 	ldr	r3, [pc, #104]	; 3000c814 <rtems_task_mode+0x174>
3000c7a8:	e5933000 	ldr	r3, [r3]                                      
3000c7ac:	e3530003 	cmp	r3, #3                                        
3000c7b0:	1a000013 	bne	3000c804 <rtems_task_mode+0x164>              
 */                                                                   
RTEMS_INLINE_ROUTINE bool _Thread_Evaluate_mode( void )               
{                                                                     
  Thread_Control     *executing;                                      
                                                                      
  executing = _Thread_Executing;                                      
3000c7b4:	e59f2050 	ldr	r2, [pc, #80]	; 3000c80c <rtems_task_mode+0x16c>
3000c7b8:	e5923004 	ldr	r3, [r2, #4]                                  
                                                                      
  if ( !_States_Is_ready( executing->current_state ) ||               
3000c7bc:	e5931010 	ldr	r1, [r3, #16]                                 
3000c7c0:	e3510000 	cmp	r1, #0                                        
3000c7c4:	1a000005 	bne	3000c7e0 <rtems_task_mode+0x140>              
3000c7c8:	e5922008 	ldr	r2, [r2, #8]                                  
3000c7cc:	e1530002 	cmp	r3, r2                                        
3000c7d0:	0a000006 	beq	3000c7f0 <rtems_task_mode+0x150>              
       ( !_Thread_Is_heir( executing ) && executing->is_preemptible ) ) {
3000c7d4:	e5d33074 	ldrb	r3, [r3, #116]	; 0x74                        
3000c7d8:	e3530000 	cmp	r3, #0                                        
3000c7dc:	0a000003 	beq	3000c7f0 <rtems_task_mode+0x150>              
    _Context_Switch_necessary = true;                                 
3000c7e0:	e59f3024 	ldr	r3, [pc, #36]	; 3000c80c <rtems_task_mode+0x16c>
3000c7e4:	e3a02001 	mov	r2, #1                                        
3000c7e8:	e5c32010 	strb	r2, [r3, #16]                                
3000c7ec:	ea000001 	b	3000c7f8 <rtems_task_mode+0x158>                
    if ( _Thread_Evaluate_mode() || needs_asr_dispatching )           
3000c7f0:	e3500000 	cmp	r0, #0                                        
3000c7f4:	08bd87f0 	popeq	{r4, r5, r6, r7, r8, r9, sl, pc}            
      _Thread_Dispatch();                                             
3000c7f8:	ebffe9ba 	bl	30006ee8 <_Thread_Dispatch>                    
                                                                      
  return RTEMS_SUCCESSFUL;                                            
3000c7fc:	e3a00000 	mov	r0, #0                                        
3000c800:	e8bd87f0 	pop	{r4, r5, r6, r7, r8, r9, sl, pc}              
3000c804:	e3a00000 	mov	r0, #0                                        <== NOT EXECUTED
}                                                                     
3000c808:	e8bd87f0 	pop	{r4, r5, r6, r7, r8, r9, sl, pc}              <== NOT EXECUTED
                                                                      

30005904 <sigaction>: struct sigaction *oact ) { ISR_Level level; if ( oact )
30005904:	e2523000 	subs	r3, r2, #0                                   
    *oact = _POSIX_signals_Vectors[ sig ];                            
30005908:	159f20b8 	ldrne	r2, [pc, #184]	; 300059c8 <sigaction+0xc4>  
int sigaction(                                                        
  int                     sig,                                        
  const struct sigaction *act,                                        
  struct sigaction       *oact                                        
)                                                                     
{                                                                     
3000590c:	e92d40f0 	push	{r4, r5, r6, r7, lr}                         
30005910:	e1a05001 	mov	r5, r1                                        
  ISR_Level     level;                                                
                                                                      
  if ( oact )                                                         
    *oact = _POSIX_signals_Vectors[ sig ];                            
30005914:	13a0100c 	movne	r1, #12                                     
30005918:	10222091 	mlane	r2, r1, r0, r2                              
int sigaction(                                                        
  int                     sig,                                        
  const struct sigaction *act,                                        
  struct sigaction       *oact                                        
)                                                                     
{                                                                     
3000591c:	e1a04000 	mov	r4, r0                                        
  ISR_Level     level;                                                
                                                                      
  if ( oact )                                                         
    *oact = _POSIX_signals_Vectors[ sig ];                            
30005920:	18920007 	ldmne	r2, {r0, r1, r2}                            
30005924:	18830007 	stmne	r3, {r0, r1, r2}                            
                                                                      
  if ( !sig )                                                         
30005928:	e3540000 	cmp	r4, #0                                        
3000592c:	0a000004 	beq	30005944 <sigaction+0x40>                     
                                                                      
static inline bool is_valid_signo(                                    
  int signo                                                           
)                                                                     
{                                                                     
  return ((signo) >= 1 && (signo) <= 32 );                            
30005930:	e2443001 	sub	r3, r4, #1                                    
    rtems_set_errno_and_return_minus_one( EINVAL );                   
                                                                      
  if ( !is_valid_signo(sig) )                                         
30005934:	e353001f 	cmp	r3, #31                                       
30005938:	8a000001 	bhi	30005944 <sigaction+0x40>                     
   *                                                                  
   *  NOTE: Solaris documentation claims to "silently enforce" this which
   *        contradicts the POSIX specification.                      
   */                                                                 
                                                                      
  if ( sig == SIGKILL )                                               
3000593c:	e3540009 	cmp	r4, #9                                        
30005940:	1a000004 	bne	30005958 <sigaction+0x54>                     
    rtems_set_errno_and_return_minus_one( EINVAL );                   
30005944:	eb002106 	bl	3000dd64 <__errno>                             
30005948:	e3a03016 	mov	r3, #22                                       
3000594c:	e5803000 	str	r3, [r0]                                      
30005950:	e3e00000 	mvn	r0, #0                                        
30005954:	e8bd80f0 	pop	{r4, r5, r6, r7, pc}                          
  /*                                                                  
   *  Evaluate the new action structure and set the global signal vector
   *  appropriately.                                                  
   */                                                                 
                                                                      
  if ( act ) {                                                        
30005958:	e3550000 	cmp	r5, #0                                        
3000595c:	0a000017 	beq	300059c0 <sigaction+0xbc>                     
static inline uint32_t arm_interrupt_disable( void )                  
{                                                                     
  uint32_t arm_switch_reg;                                            
  uint32_t level;                                                     
                                                                      
  asm volatile (                                                      
30005960:	e10f6000 	mrs	r6, CPSR                                      
30005964:	e3863080 	orr	r3, r6, #128	; 0x80                           
30005968:	e129f003 	msr	CPSR_fc, r3                                   
     *  Unless the user is installing the default signal actions, then
     *  we can just copy the provided sigaction structure into the vectors.
     */                                                               
                                                                      
    _ISR_Disable( level );                                            
      if ( act->sa_handler == SIG_DFL ) {                             
3000596c:	e5953008 	ldr	r3, [r5, #8]                                  
30005970:	e59f7050 	ldr	r7, [pc, #80]	; 300059c8 <sigaction+0xc4>     
30005974:	e3530000 	cmp	r3, #0                                        
30005978:	1a000007 	bne	3000599c <sigaction+0x98>                     
        _POSIX_signals_Vectors[ sig ] = _POSIX_signals_Default_vectors[ sig ];
3000597c:	e283300c 	add	r3, r3, #12                                   
30005980:	e0040493 	mul	r4, r3, r4                                    
30005984:	e59f2040 	ldr	r2, [pc, #64]	; 300059cc <sigaction+0xc8>     
30005988:	e0873004 	add	r3, r7, r4                                    
3000598c:	e0824004 	add	r4, r2, r4                                    
30005990:	e8940007 	ldm	r4, {r0, r1, r2}                              
30005994:	e8830007 	stm	r3, {r0, r1, r2}                              
30005998:	ea000005 	b	300059b4 <sigaction+0xb0>                       
      } else {                                                        
         _POSIX_signals_Clear_process_signals( sig );                 
3000599c:	e1a00004 	mov	r0, r4                                        
300059a0:	eb001580 	bl	3000afa8 <_POSIX_signals_Clear_process_signals>
         _POSIX_signals_Vectors[ sig ] = *act;                        
300059a4:	e8950007 	ldm	r5, {r0, r1, r2}                              
300059a8:	e3a0300c 	mov	r3, #12                                       
300059ac:	e0247493 	mla	r4, r3, r4, r7                                
300059b0:	e8840007 	stm	r4, {r0, r1, r2}                              
                                                                      
static inline void arm_interrupt_enable( uint32_t level )             
{                                                                     
  ARM_SWITCH_REGISTERS;                                               
                                                                      
  asm volatile (                                                      
300059b4:	e129f006 	msr	CPSR_fc, r6                                   
   *      now (signals not posted when SIG_IGN).                      
   *    + If we are now ignoring a signal that was previously pending,
   *      we clear the pending signal indicator.                      
   */                                                                 
                                                                      
  return 0;                                                           
300059b8:	e3a00000 	mov	r0, #0                                        
300059bc:	e8bd80f0 	pop	{r4, r5, r6, r7, pc}                          
300059c0:	e1a00005 	mov	r0, r5                                        <== NOT EXECUTED
}                                                                     
300059c4:	e8bd80f0 	pop	{r4, r5, r6, r7, pc}                          <== NOT EXECUTED
                                                                      

30007f34 <sigwait>: int sigwait( const sigset_t *set, int *sig ) {
30007f34:	e92d4010 	push	{r4, lr}                                     
30007f38:	e1a04001 	mov	r4, r1                                        
  int status;                                                         
                                                                      
  status = sigtimedwait( set, NULL, NULL );                           
30007f3c:	e3a01000 	mov	r1, #0                                        
30007f40:	e1a02001 	mov	r2, r1                                        
30007f44:	ebffff8e 	bl	30007d84 <sigtimedwait>                        
                                                                      
  if ( status != -1 ) {                                               
30007f48:	e3700001 	cmn	r0, #1                                        
30007f4c:	0a000004 	beq	30007f64 <sigwait+0x30>                       
    if ( sig )                                                        
30007f50:	e3540000 	cmp	r4, #0                                        
      *sig = status;                                                  
30007f54:	15840000 	strne	r0, [r4]                                    
    return 0;                                                         
30007f58:	13a00000 	movne	r0, #0                                      
  int status;                                                         
                                                                      
  status = sigtimedwait( set, NULL, NULL );                           
                                                                      
  if ( status != -1 ) {                                               
    if ( sig )                                                        
30007f5c:	18bd8010 	popne	{r4, pc}                                    
30007f60:	ea000002 	b	30007f70 <sigwait+0x3c>                         <== NOT EXECUTED
      *sig = status;                                                  
    return 0;                                                         
  }                                                                   
                                                                      
  return errno;                                                       
30007f64:	eb002034 	bl	3001003c <__errno>                             
30007f68:	e5900000 	ldr	r0, [r0]                                      
30007f6c:	e8bd8010 	pop	{r4, pc}                                      
  status = sigtimedwait( set, NULL, NULL );                           
                                                                      
  if ( status != -1 ) {                                               
    if ( sig )                                                        
      *sig = status;                                                  
    return 0;                                                         
30007f70:	e1a00004 	mov	r0, r4                                        <== NOT EXECUTED
  }                                                                   
                                                                      
  return errno;                                                       
}                                                                     
30007f74:	e8bd8010 	pop	{r4, pc}                                      <== NOT EXECUTED