RTEMS 4.11
Annotated Report
Fri Oct 8 12:21:43 2010

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

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

00020824 <_POSIX_signals_Unblock_thread>: bool _POSIX_signals_Unblock_thread( Thread_Control *the_thread, int signo, siginfo_t *info ) {
   20824:	e92d41f0 	push	{r4, r5, r6, r7, r8, lr}                     
                                                                      
  /*                                                                  
   *  Is the thread is specifically waiting for a signal?             
   */                                                                 
                                                                      
  if ( _States_Is_interruptible_signal( the_thread->current_state ) ) {
   20828:	e5903010 	ldr	r3, [r0, #16]                                 
   2082c:	e59f50f8 	ldr	r5, [pc, #248]	; 2092c <_POSIX_signals_Unblock_thread+0x108>
   20830:	e59f80f4 	ldr	r8, [pc, #244]	; 2092c <_POSIX_signals_Unblock_thread+0x108>
   20834:	e0035005 	and	r5, r3, r5                                    
   20838:	e241c001 	sub	ip, r1, #1                                    
   2083c:	e3a06001 	mov	r6, #1                                        
   20840:	e1550008 	cmp	r5, r8                                        
bool _POSIX_signals_Unblock_thread(                                   
  Thread_Control  *the_thread,                                        
  int              signo,                                             
  siginfo_t       *info                                               
)                                                                     
{                                                                     
   20844:	e1a04000 	mov	r4, r0                                        
  POSIX_API_Control  *api;                                            
  sigset_t            mask;                                           
  siginfo_t          *the_info = NULL;                                
                                                                      
  api = the_thread->API_Extensions[ THREAD_API_POSIX ];               
   20848:	e5907108 	ldr	r7, [r0, #264]	; 0x108                        
   2084c:	e1a0cc16 	lsl	ip, r6, ip                                    
                                                                      
  /*                                                                  
   *  Is the thread is specifically waiting for a signal?             
   */                                                                 
                                                                      
  if ( _States_Is_interruptible_signal( the_thread->current_state ) ) {
   20850:	1a000013 	bne	208a4 <_POSIX_signals_Unblock_thread+0x80>    
                                                                      
    if ( (the_thread->Wait.option & mask) || (~api->signals_blocked & mask) ) {
   20854:	e5903030 	ldr	r3, [r0, #48]	; 0x30                          
   20858:	e11c0003 	tst	ip, r3                                        
   2085c:	1a000002 	bne	2086c <_POSIX_signals_Unblock_thread+0x48>    
   20860:	e59750d0 	ldr	r5, [r7, #208]	; 0xd0                         
   20864:	e1dc5005 	bics	r5, ip, r5                                   
   20868:	0a00002d 	beq	20924 <_POSIX_signals_Unblock_thread+0x100>   
      the_thread->Wait.return_code = EINTR;                           
   2086c:	e3a03004 	mov	r3, #4                                        
                                                                      
      the_info = (siginfo_t *) the_thread->Wait.return_argument;      
                                                                      
      if ( !info ) {                                                  
   20870:	e3520000 	cmp	r2, #0                                        
   */                                                                 
                                                                      
  if ( _States_Is_interruptible_signal( the_thread->current_state ) ) {
                                                                      
    if ( (the_thread->Wait.option & mask) || (~api->signals_blocked & mask) ) {
      the_thread->Wait.return_code = EINTR;                           
   20874:	e5843034 	str	r3, [r4, #52]	; 0x34                          
                                                                      
      the_info = (siginfo_t *) the_thread->Wait.return_argument;      
   20878:	e5943028 	ldr	r3, [r4, #40]	; 0x28                          
      if ( !info ) {                                                  
        the_info->si_signo = signo;                                   
        the_info->si_code = SI_USER;                                  
        the_info->si_value.sival_int = 0;                             
      } else {                                                        
        *the_info = *info;                                            
   2087c:	18920007 	ldmne	r2, {r0, r1, r2}                            
      the_thread->Wait.return_code = EINTR;                           
                                                                      
      the_info = (siginfo_t *) the_thread->Wait.return_argument;      
                                                                      
      if ( !info ) {                                                  
        the_info->si_signo = signo;                                   
   20880:	05831000 	streq	r1, [r3]                                    
        the_info->si_code = SI_USER;                                  
   20884:	03a01001 	moveq	r1, #1                                      
        the_info->si_value.sival_int = 0;                             
      } else {                                                        
        *the_info = *info;                                            
   20888:	18830007 	stmne	r3, {r0, r1, r2}                            
                                                                      
      the_info = (siginfo_t *) the_thread->Wait.return_argument;      
                                                                      
      if ( !info ) {                                                  
        the_info->si_signo = signo;                                   
        the_info->si_code = SI_USER;                                  
   2088c:	05831004 	streq	r1, [r3, #4]                                
        the_info->si_value.sival_int = 0;                             
   20890:	05832008 	streq	r2, [r3, #8]                                
      } else {                                                        
        *the_info = *info;                                            
      }                                                               
                                                                      
      _Thread_queue_Extract_with_proxy( the_thread );                 
   20894:	e1a00004 	mov	r0, r4                                        
   20898:	ebffaf1c 	bl	c510 <_Thread_queue_Extract_with_proxy>        
      return true;                                                    
   2089c:	e3a05001 	mov	r5, #1                                        
   208a0:	ea00001f 	b	20924 <_POSIX_signals_Unblock_thread+0x100>     
  }                                                                   
                                                                      
  /*                                                                  
   *  Thread is not waiting due to a sigwait.                         
   */                                                                 
  if ( ~api->signals_blocked & mask ) {                               
   208a4:	e59750d0 	ldr	r5, [r7, #208]	; 0xd0                         
   208a8:	e1dc5005 	bics	r5, ip, r5                                   
   208ac:	0a00001c 	beq	20924 <_POSIX_signals_Unblock_thread+0x100>   
     *      it is not blocked, THEN                                   
     *        we need to dispatch at the end of this ISR.             
     *    + Any other combination, do nothing.                        
     */                                                               
                                                                      
    if ( _States_Is_interruptible_by_signal( the_thread->current_state ) ) {
   208b0:	e2135201 	ands	r5, r3, #268435456	; 0x10000000              
   208b4:	0a000010 	beq	208fc <_POSIX_signals_Unblock_thread+0xd8>    
 */                                                                   
RTEMS_INLINE_ROUTINE bool _States_Is_waiting_on_thread_queue (        
  States_Control the_states                                           
)                                                                     
{                                                                     
   return (the_states & STATES_WAITING_ON_THREAD_QUEUE);              
   208b8:	e59f5070 	ldr	r5, [pc, #112]	; 20930 <_POSIX_signals_Unblock_thread+0x10c>
   208bc:	e0035005 	and	r5, r3, r5                                    
      the_thread->Wait.return_code = EINTR;                           
   208c0:	e3a02004 	mov	r2, #4                                        
      /*                                                              
       *  In pthread_cond_wait, a thread will be blocking on a thread 
       *  queue, but is also interruptible by a POSIX signal.         
       */                                                             
	if ( _States_Is_waiting_on_thread_queue(the_thread->current_state) ) 
   208c4:	e3550000 	cmp	r5, #0                                        
     *        we need to dispatch at the end of this ISR.             
     *    + Any other combination, do nothing.                        
     */                                                               
                                                                      
    if ( _States_Is_interruptible_by_signal( the_thread->current_state ) ) {
      the_thread->Wait.return_code = EINTR;                           
   208c8:	e5802034 	str	r2, [r0, #52]	; 0x34                          
      /*                                                              
       *  In pthread_cond_wait, a thread will be blocking on a thread 
       *  queue, but is also interruptible by a POSIX signal.         
       */                                                             
	if ( _States_Is_waiting_on_thread_queue(the_thread->current_state) ) 
   208cc:	0a000002 	beq	208dc <_POSIX_signals_Unblock_thread+0xb8>    
	  _Thread_queue_Extract_with_proxy( the_thread );                    
   208d0:	ebffaf0e 	bl	c510 <_Thread_queue_Extract_with_proxy>        <== NOT EXECUTED
    } else if ( the_thread->current_state == STATES_READY ) {         
      if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) )
	_Thread_Dispatch_necessary = true;                                   
    }                                                                 
  }                                                                   
  return false;                                                       
   208d4:	e3a05000 	mov	r5, #0                                        <== NOT EXECUTED
   208d8:	ea000011 	b	20924 <_POSIX_signals_Unblock_thread+0x100>     <== NOT EXECUTED
       *  In pthread_cond_wait, a thread will be blocking on a thread 
       *  queue, but is also interruptible by a POSIX signal.         
       */                                                             
	if ( _States_Is_waiting_on_thread_queue(the_thread->current_state) ) 
	  _Thread_queue_Extract_with_proxy( the_thread );                    
	else if ( _States_Is_delaying(the_thread->current_state) ) {         
   208dc:	e2133008 	ands	r3, r3, #8                                   
   208e0:	0a00000e 	beq	20920 <_POSIX_signals_Unblock_thread+0xfc>    
	    (void) _Watchdog_Remove( &the_thread->Timer );                   
   208e4:	e2800048 	add	r0, r0, #72	; 0x48                            
   208e8:	ebffb1a3 	bl	cf7c <_Watchdog_Remove>                        
                                                                      
RTEMS_INLINE_ROUTINE void _Thread_Unblock (                           
  Thread_Control *the_thread                                          
)                                                                     
{                                                                     
  _Thread_Clear_state( the_thread, STATES_BLOCKED );                  
   208ec:	e1a00004 	mov	r0, r4                                        
   208f0:	e59f103c 	ldr	r1, [pc, #60]	; 20934 <_POSIX_signals_Unblock_thread+0x110>
   208f4:	ebffac64 	bl	ba8c <_Thread_Clear_state>                     
   208f8:	ea000009 	b	20924 <_POSIX_signals_Unblock_thread+0x100>     
	    _Thread_Unblock( the_thread );                                   
	  }                                                                  
                                                                      
    } else if ( the_thread->current_state == STATES_READY ) {         
   208fc:	e3530000 	cmp	r3, #0                                        
   20900:	1a000007 	bne	20924 <_POSIX_signals_Unblock_thread+0x100>   
      if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) )
   20904:	e59f202c 	ldr	r2, [pc, #44]	; 20938 <_POSIX_signals_Unblock_thread+0x114>
   20908:	e5925000 	ldr	r5, [r2]                                      
   2090c:	e3550000 	cmp	r5, #0                                        
   20910:	0a000003 	beq	20924 <_POSIX_signals_Unblock_thread+0x100>   
   20914:	e5921004 	ldr	r1, [r2, #4]                                  
   20918:	e1500001 	cmp	r0, r1                                        
	_Thread_Dispatch_necessary = true;                                   
   2091c:	05c26010 	strbeq	r6, [r2, #16]                              
    }                                                                 
  }                                                                   
  return false;                                                       
   20920:	e1a05003 	mov	r5, r3                                        
}                                                                     
   20924:	e1a00005 	mov	r0, r5                                        
   20928:	e8bd81f0 	pop	{r4, r5, r6, r7, r8, pc}                      
                                                                      

00007384 <_Thread_queue_Enqueue_priority>:
    7384:	e281303c 	add	r3, r1, #60	; 0x3c                            
  Priority_Control     priority;                                      
  States_Control       block_state;                                   
                                                                      
  _Chain_Initialize_empty( &the_thread->Wait.Block2n );               
                                                                      
  priority     = the_thread->current_priority;                        
    7388:	e591c014 	ldr	ip, [r1, #20]                                 
 */                                                                   
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(                    
  Chain_Control *the_chain                                            
)                                                                     
{                                                                     
  the_chain->first          = _Chain_Tail(the_chain);                 
    738c:	e5813038 	str	r3, [r1, #56]	; 0x38                          
  the_chain->permanent_null = NULL;                                   
    7390:	e3a03000 	mov	r3, #0                                        
    7394:	e581303c 	str	r3, [r1, #60]	; 0x3c                          
  Chain_Node          *previous_node;                                 
  Chain_Node          *search_node;                                   
  Priority_Control     priority;                                      
  States_Control       block_state;                                   
                                                                      
  _Chain_Initialize_empty( &the_thread->Wait.Block2n );               
    7398:	e2813038 	add	r3, r1, #56	; 0x38                            
Thread_blocking_operation_States _Thread_queue_Enqueue_priority (     
  Thread_queue_Control *the_thread_queue,                             
  Thread_Control       *the_thread,                                   
  ISR_Level            *level_p                                       
)                                                                     
{                                                                     
    739c:	e92d4ff0 	push	{r4, r5, r6, r7, r8, r9, sl, fp, lr}         
  the_chain->last           = _Chain_Head(the_chain);                 
    73a0:	e5813040 	str	r3, [r1, #64]	; 0x40                          
                                                                      
  _Chain_Initialize_empty( &the_thread->Wait.Block2n );               
                                                                      
  priority     = the_thread->current_priority;                        
  header_index = _Thread_queue_Header_number( priority );             
  header       = &the_thread_queue->Queues.Priority[ header_index ];  
    73a4:	e3a0400c 	mov	r4, #12                                       
                                                                      
RTEMS_INLINE_ROUTINE uint32_t   _Thread_queue_Header_number (         
  Priority_Control the_priority                                       
)                                                                     
{                                                                     
  return (the_priority / TASK_QUEUE_DATA_PRIORITIES_PER_HEADER);      
    73a8:	e1a0332c 	lsr	r3, ip, #6                                    
    73ac:	e0030394 	mul	r3, r4, r3                                    
  block_state  = the_thread_queue->state;                             
                                                                      
  if ( _Thread_queue_Is_reverse_search( priority ) )                  
    73b0:	e31c0020 	tst	ip, #32                                       
                                                                      
  _Chain_Initialize_empty( &the_thread->Wait.Block2n );               
                                                                      
  priority     = the_thread->current_priority;                        
  header_index = _Thread_queue_Header_number( priority );             
  header       = &the_thread_queue->Queues.Priority[ header_index ];  
    73b4:	e0807003 	add	r7, r0, r3                                    
  block_state  = the_thread_queue->state;                             
    73b8:	e5908038 	ldr	r8, [r0, #56]	; 0x38                          
  the_thread->Wait.queue = the_thread_queue;                          
  _ISR_Enable( level );                                               
  return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;                  
                                                                      
restart_reverse_search:                                               
  search_priority     = PRIORITY_MAXIMUM + 1;                         
    73bc:	159fa15c 	ldrne	sl, [pc, #348]	; 7520 <_Thread_queue_Enqueue_priority+0x19c>
                                                                      
  _ISR_Disable( level );                                              
  search_thread = (Thread_Control *) header->last;                    
    73c0:	11a0b007 	movne	fp, r7                                      
  priority     = the_thread->current_priority;                        
  header_index = _Thread_queue_Header_number( priority );             
  header       = &the_thread_queue->Queues.Priority[ header_index ];  
  block_state  = the_thread_queue->state;                             
                                                                      
  if ( _Thread_queue_Is_reverse_search( priority ) )                  
    73c4:	1a000024 	bne	745c <_Thread_queue_Enqueue_priority+0xd8>    
 */                                                                   
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(                         
  Chain_Control *the_chain                                            
)                                                                     
{                                                                     
   return (Chain_Node *) &the_chain->permanent_null;                  
    73c8:	e2833004 	add	r3, r3, #4                                    
    73cc:	e080a003 	add	sl, r0, r3                                    
static inline uint32_t arm_interrupt_disable( void )                  
{                                                                     
  uint32_t arm_switch_reg;                                            
  uint32_t level;                                                     
                                                                      
  asm volatile (                                                      
    73d0:	e10f4000 	mrs	r4, CPSR                                      
    73d4:	e3843080 	orr	r3, r4, #128	; 0x80                           
    73d8:	e129f003 	msr	CPSR_fc, r3                                   
    73dc:	e1a05004 	mov	r5, r4                                        
    goto restart_reverse_search;                                      
                                                                      
restart_forward_search:                                               
  search_priority = PRIORITY_MINIMUM - 1;                             
    73e0:	e3e06000 	mvn	r6, #0                                        
  _ISR_Disable( level );                                              
  search_thread = (Thread_Control *) header->first;                   
    73e4:	e5973000 	ldr	r3, [r7]                                      
  while ( !_Chain_Is_tail( header, (Chain_Node *)search_thread ) ) {  
    73e8:	ea00000b 	b	741c <_Thread_queue_Enqueue_priority+0x98>      
    search_priority = search_thread->current_priority;                
    73ec:	e5936014 	ldr	r6, [r3, #20]                                 
    if ( priority <= search_priority )                                
    73f0:	e15c0006 	cmp	ip, r6                                        
    73f4:	9a00000a 	bls	7424 <_Thread_queue_Enqueue_priority+0xa0>    
                                                                      
static inline void arm_interrupt_flash( uint32_t level )              
{                                                                     
  uint32_t arm_switch_reg;                                            
                                                                      
  asm volatile (                                                      
    73f8:	e10f9000 	mrs	r9, CPSR                                      
    73fc:	e129f004 	msr	CPSR_fc, r4                                   
    7400:	e129f009 	msr	CPSR_fc, r9                                   
RTEMS_INLINE_ROUTINE bool _States_Are_set (                           
  States_Control the_states,                                          
  States_Control mask                                                 
)                                                                     
{                                                                     
   return ( (the_states & mask) != STATES_READY);                     
    7404:	e5939010 	ldr	r9, [r3, #16]                                 
    search_priority = search_thread->current_priority;                
    if ( priority <= search_priority )                                
      break;                                                          
#endif                                                                
    _ISR_Flash( level );                                              
    if ( !_States_Are_set( search_thread->current_state, block_state) ) {
    7408:	e1180009 	tst	r8, r9                                        
    740c:	1a000001 	bne	7418 <_Thread_queue_Enqueue_priority+0x94>    
                                                                      
static inline void arm_interrupt_enable( uint32_t level )             
{                                                                     
  ARM_SWITCH_REGISTERS;                                               
                                                                      
  asm volatile (                                                      
    7410:	e129f004 	msr	CPSR_fc, r4                                   <== NOT EXECUTED
    7414:	eaffffed 	b	73d0 <_Thread_queue_Enqueue_priority+0x4c>      <== NOT EXECUTED
      _ISR_Enable( level );                                           
      goto restart_forward_search;                                    
    }                                                                 
    search_thread =                                                   
       (Thread_Control *)search_thread->Object.Node.next;             
    7418:	e5933000 	ldr	r3, [r3]                                      
                                                                      
restart_forward_search:                                               
  search_priority = PRIORITY_MINIMUM - 1;                             
  _ISR_Disable( level );                                              
  search_thread = (Thread_Control *) header->first;                   
  while ( !_Chain_Is_tail( header, (Chain_Node *)search_thread ) ) {  
    741c:	e153000a 	cmp	r3, sl                                        
    7420:	1afffff1 	bne	73ec <_Thread_queue_Enqueue_priority+0x68>    
    }                                                                 
    search_thread =                                                   
       (Thread_Control *)search_thread->Object.Node.next;             
  }                                                                   
                                                                      
  if ( the_thread_queue->sync_state !=                                
    7424:	e5907030 	ldr	r7, [r0, #48]	; 0x30                          
    7428:	e3570001 	cmp	r7, #1                                        
    742c:	1a000038 	bne	7514 <_Thread_queue_Enqueue_priority+0x190>   
       THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )                   
    goto synchronize;                                                 
                                                                      
  the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
    7430:	e3a02000 	mov	r2, #0                                        
                                                                      
  if ( priority == search_priority )                                  
    7434:	e15c0006 	cmp	ip, r6                                        
                                                                      
  if ( the_thread_queue->sync_state !=                                
       THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )                   
    goto synchronize;                                                 
                                                                      
  the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
    7438:	e5802030 	str	r2, [r0, #48]	; 0x30                          
                                                                      
  if ( priority == search_priority )                                  
    743c:	0a00002a 	beq	74ec <_Thread_queue_Enqueue_priority+0x168>   
    goto equal_priority;                                              
                                                                      
  search_node   = (Chain_Node *) search_thread;                       
  previous_node = search_node->previous;                              
    7440:	e5932004 	ldr	r2, [r3, #4]                                  
  the_node      = (Chain_Node *) the_thread;                          
                                                                      
  the_node->next         = search_node;                               
    7444:	e5813000 	str	r3, [r1]                                      
  the_node->previous     = previous_node;                             
    7448:	e5812004 	str	r2, [r1, #4]                                  
  previous_node->next    = the_node;                                  
    744c:	e5821000 	str	r1, [r2]                                      
  search_node->previous  = the_node;                                  
    7450:	e5831004 	str	r1, [r3, #4]                                  
  the_thread->Wait.queue = the_thread_queue;                          
    7454:	e5810044 	str	r0, [r1, #68]	; 0x44                          
  _ISR_Enable( level );                                               
    7458:	ea000021 	b	74e4 <_Thread_queue_Enqueue_priority+0x160>     
  return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;                  
                                                                      
restart_reverse_search:                                               
  search_priority     = PRIORITY_MAXIMUM + 1;                         
    745c:	e5da6000 	ldrb	r6, [sl]                                     
    7460:	e2866001 	add	r6, r6, #1                                    
static inline uint32_t arm_interrupt_disable( void )                  
{                                                                     
  uint32_t arm_switch_reg;                                            
  uint32_t level;                                                     
                                                                      
  asm volatile (                                                      
    7464:	e10f4000 	mrs	r4, CPSR                                      
    7468:	e3843080 	orr	r3, r4, #128	; 0x80                           
    746c:	e129f003 	msr	CPSR_fc, r3                                   
    7470:	e1a05004 	mov	r5, r4                                        
                                                                      
  _ISR_Disable( level );                                              
  search_thread = (Thread_Control *) header->last;                    
    7474:	e59b3008 	ldr	r3, [fp, #8]                                  
  while ( !_Chain_Is_head( header, (Chain_Node *)search_thread ) ) {  
    7478:	ea00000b 	b	74ac <_Thread_queue_Enqueue_priority+0x128>     
    search_priority = search_thread->current_priority;                
    747c:	e5936014 	ldr	r6, [r3, #20]                                 
    if ( priority >= search_priority )                                
    7480:	e15c0006 	cmp	ip, r6                                        
    7484:	2a00000a 	bcs	74b4 <_Thread_queue_Enqueue_priority+0x130>   
                                                                      
static inline void arm_interrupt_flash( uint32_t level )              
{                                                                     
  uint32_t arm_switch_reg;                                            
                                                                      
  asm volatile (                                                      
    7488:	e10f9000 	mrs	r9, CPSR                                      
    748c:	e129f004 	msr	CPSR_fc, r4                                   
    7490:	e129f009 	msr	CPSR_fc, r9                                   
    7494:	e5939010 	ldr	r9, [r3, #16]                                 
    search_priority = search_thread->current_priority;                
    if ( priority >= search_priority )                                
      break;                                                          
#endif                                                                
    _ISR_Flash( level );                                              
    if ( !_States_Are_set( search_thread->current_state, block_state) ) {
    7498:	e1180009 	tst	r8, r9                                        
    749c:	1a000001 	bne	74a8 <_Thread_queue_Enqueue_priority+0x124>   
                                                                      
static inline void arm_interrupt_enable( uint32_t level )             
{                                                                     
  ARM_SWITCH_REGISTERS;                                               
                                                                      
  asm volatile (                                                      
    74a0:	e129f004 	msr	CPSR_fc, r4                                   
    74a4:	eaffffec 	b	745c <_Thread_queue_Enqueue_priority+0xd8>      
      _ISR_Enable( level );                                           
      goto restart_reverse_search;                                    
    }                                                                 
    search_thread = (Thread_Control *)                                
                         search_thread->Object.Node.previous;         
    74a8:	e5933004 	ldr	r3, [r3, #4]                                  
restart_reverse_search:                                               
  search_priority     = PRIORITY_MAXIMUM + 1;                         
                                                                      
  _ISR_Disable( level );                                              
  search_thread = (Thread_Control *) header->last;                    
  while ( !_Chain_Is_head( header, (Chain_Node *)search_thread ) ) {  
    74ac:	e1530007 	cmp	r3, r7                                        
    74b0:	1afffff1 	bne	747c <_Thread_queue_Enqueue_priority+0xf8>    
    }                                                                 
    search_thread = (Thread_Control *)                                
                         search_thread->Object.Node.previous;         
  }                                                                   
                                                                      
  if ( the_thread_queue->sync_state !=                                
    74b4:	e5907030 	ldr	r7, [r0, #48]	; 0x30                          
    74b8:	e3570001 	cmp	r7, #1                                        
    74bc:	1a000014 	bne	7514 <_Thread_queue_Enqueue_priority+0x190>   
       THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )                   
    goto synchronize;                                                 
                                                                      
  the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
    74c0:	e3a02000 	mov	r2, #0                                        
                                                                      
  if ( priority == search_priority )                                  
    74c4:	e15c0006 	cmp	ip, r6                                        
                                                                      
  if ( the_thread_queue->sync_state !=                                
       THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )                   
    goto synchronize;                                                 
                                                                      
  the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
    74c8:	e5802030 	str	r2, [r0, #48]	; 0x30                          
                                                                      
  if ( priority == search_priority )                                  
    74cc:	0a000006 	beq	74ec <_Thread_queue_Enqueue_priority+0x168>   
    goto equal_priority;                                              
                                                                      
  search_node = (Chain_Node *) search_thread;                         
  next_node   = search_node->next;                                    
    74d0:	e5932000 	ldr	r2, [r3]                                      
  the_node    = (Chain_Node *) the_thread;                            
                                                                      
  the_node->next          = next_node;                                
  the_node->previous      = search_node;                              
    74d4:	e881000c 	stm	r1, {r2, r3}                                  
  search_node->next       = the_node;                                 
  next_node->previous    = the_node;                                  
    74d8:	e5821004 	str	r1, [r2, #4]                                  
  next_node   = search_node->next;                                    
  the_node    = (Chain_Node *) the_thread;                            
                                                                      
  the_node->next          = next_node;                                
  the_node->previous      = search_node;                              
  search_node->next       = the_node;                                 
    74dc:	e5831000 	str	r1, [r3]                                      
  next_node->previous    = the_node;                                  
  the_thread->Wait.queue = the_thread_queue;                          
    74e0:	e5810044 	str	r0, [r1, #68]	; 0x44                          
    74e4:	e129f004 	msr	CPSR_fc, r4                                   
    74e8:	ea000007 	b	750c <_Thread_queue_Enqueue_priority+0x188>     
    74ec:	e283303c 	add	r3, r3, #60	; 0x3c                            
  _ISR_Enable( level );                                               
  return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;                  
                                                                      
equal_priority:               /* add at end of priority group */      
  search_node   = _Chain_Tail( &search_thread->Wait.Block2n );        
  previous_node = search_node->previous;                              
    74f0:	e5932004 	ldr	r2, [r3, #4]                                  
  the_node      = (Chain_Node *) the_thread;                          
                                                                      
  the_node->next         = search_node;                               
    74f4:	e5813000 	str	r3, [r1]                                      
  the_node->previous     = previous_node;                             
    74f8:	e5812004 	str	r2, [r1, #4]                                  
  previous_node->next    = the_node;                                  
    74fc:	e5821000 	str	r1, [r2]                                      
  search_node->previous  = the_node;                                  
    7500:	e5831004 	str	r1, [r3, #4]                                  
  the_thread->Wait.queue = the_thread_queue;                          
    7504:	e5810044 	str	r0, [r1, #68]	; 0x44                          
    7508:	e129f005 	msr	CPSR_fc, r5                                   
  _ISR_Enable( level );                                               
  return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;                  
    750c:	e3a00001 	mov	r0, #1                                        
    7510:	e8bd8ff0 	pop	{r4, r5, r6, r7, r8, r9, sl, fp, pc}          
   *  For example, the blocking thread could have been given          
   *  the mutex by an ISR or timed out.                               
   *                                                                  
   *  WARNING! Returning with interrupts disabled!                    
   */                                                                 
  *level_p = level;                                                   
    7514:	e5825000 	str	r5, [r2]                                      
  return the_thread_queue->sync_state;                                
    7518:	e5900030 	ldr	r0, [r0, #48]	; 0x30                          
}                                                                     
    751c:	e8bd8ff0 	pop	{r4, r5, r6, r7, r8, r9, sl, fp, pc}          
                                                                      

00013fc0 <_Timer_server_Body>: * @a arg points to the corresponding timer server control block. */ static rtems_task _Timer_server_Body( rtems_task_argument arg ) {
   13fc0:	e92d4ff0 	push	{r4, r5, r6, r7, r8, r9, sl, fp, lr}         
   13fc4:	e24dd018 	sub	sp, sp, #24                                   
   13fc8:	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;                                   
   13fcc:	e3a03000 	mov	r3, #0                                        
 */                                                                   
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(                         
  Chain_Control *the_chain                                            
)                                                                     
{                                                                     
   return (Chain_Node *) &the_chain->permanent_null;                  
   13fd0:	e28ba004 	add	sl, fp, #4                                    
   13fd4:	e28d7004 	add	r7, sp, #4                                    
 */                                                                   
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(                    
  Chain_Control *the_chain                                            
)                                                                     
{                                                                     
  the_chain->first          = _Chain_Tail(the_chain);                 
   13fd8:	e58da00c 	str	sl, [sp, #12]                                 
  the_chain->permanent_null = NULL;                                   
   13fdc:	e58d3010 	str	r3, [sp, #16]                                 
  the_chain->last           = _Chain_Head(the_chain);                 
   13fe0:	e58db014 	str	fp, [sp, #20]                                 
 */                                                                   
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(                    
  Chain_Control *the_chain                                            
)                                                                     
{                                                                     
  the_chain->first          = _Chain_Tail(the_chain);                 
   13fe4:	e58d7000 	str	r7, [sp]                                      
  the_chain->permanent_null = NULL;                                   
   13fe8:	e98d2008 	stmib	sp, {r3, sp}                                
   13fec:	e1a04000 	mov	r4, r0                                        
 */                                                                   
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(                         
  Chain_Control *the_chain                                            
)                                                                     
{                                                                     
   return (Chain_Node *) &the_chain->permanent_null;                  
   13ff0:	e1a0500d 	mov	r5, sp                                        
   */                                                                 
  Watchdog_Interval delta = snapshot - watchdogs->last_snapshot;      
                                                                      
  watchdogs->last_snapshot = snapshot;                                
                                                                      
  _Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );  
   13ff4:	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;                                    
   13ff8:	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 ); 
   13ffc:	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;            
   14000:	e59f2150 	ldr	r2, [pc, #336]	; 14158 <_Timer_server_Body+0x198>
   14004:	e5923000 	ldr	r3, [r2]                                      
                                                                      
  /*                                                                  
   *  We assume adequate unsigned arithmetic here.                    
   */                                                                 
  Watchdog_Interval delta = snapshot - watchdogs->last_snapshot;      
   14008:	e594103c 	ldr	r1, [r4, #60]	; 0x3c                          
                                                                      
  watchdogs->last_snapshot = snapshot;                                
                                                                      
  _Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );  
   1400c:	e1a02005 	mov	r2, r5                                        
  /*                                                                  
   *  We assume adequate unsigned arithmetic here.                    
   */                                                                 
  Watchdog_Interval delta = snapshot - watchdogs->last_snapshot;      
                                                                      
  watchdogs->last_snapshot = snapshot;                                
   14010:	e584303c 	str	r3, [r4, #60]	; 0x3c                          
                                                                      
  _Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );  
   14014:	e0611003 	rsb	r1, r1, r3                                    
   14018:	e1a00009 	mov	r0, r9                                        
   1401c:	eb0010dd 	bl	18398 <_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();
   14020:	e59f3134 	ldr	r3, [pc, #308]	; 1415c <_Timer_server_Body+0x19c>
  Watchdog_Interval last_snapshot = watchdogs->last_snapshot;         
   14024:	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();
   14028:	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 ) {                                   
   1402c:	e1560002 	cmp	r6, r2                                        
   14030:	9a000004 	bls	14048 <_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 );
   14034:	e0621006 	rsb	r1, r2, r6                                    
   14038:	e1a00008 	mov	r0, r8                                        
   1403c:	e1a02005 	mov	r2, r5                                        
   14040:	eb0010d4 	bl	18398 <_Watchdog_Adjust_to_chain>              
   14044:	ea000003 	b	14058 <_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 ); 
   14048:	31a00008 	movcc	r0, r8                                      
   1404c:	33a01001 	movcc	r1, #1                                      
   14050:	30662002 	rsbcc	r2, r6, r2                                  
   14054:	3b0010a7 	blcc	182f8 <_Watchdog_Adjust>                     
  }                                                                   
                                                                      
  watchdogs->last_snapshot = snapshot;                                
   14058:	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 );
   1405c:	e5940078 	ldr	r0, [r4, #120]	; 0x78                         
   14060:	eb000298 	bl	14ac8 <_Chain_Get>                             
                                                                      
    if ( timer == NULL ) {                                            
   14064:	e2506000 	subs	r6, r0, #0                                   
   14068:	0a000009 	beq	14094 <_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 ) {                 
   1406c:	e5963038 	ldr	r3, [r6, #56]	; 0x38                          
   14070:	e3530001 	cmp	r3, #1                                        
    _Watchdog_Insert( &ts->Interval_watchdogs.Chain, &timer->Ticker );
   14074:	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 ) {                 
   14078:	0a000002 	beq	14088 <_Timer_server_Body+0xc8>               
    _Watchdog_Insert( &ts->Interval_watchdogs.Chain, &timer->Ticker );
  } else if ( timer->the_class == TIMER_TIME_OF_DAY_ON_TASK ) {       
   1407c:	e3530003 	cmp	r3, #3                                        
   14080:	1afffff5 	bne	1405c <_Timer_server_Body+0x9c>               
    _Watchdog_Insert( &ts->TOD_watchdogs.Chain, &timer->Ticker );     
   14084:	e1a00008 	mov	r0, r8                                        
   14088:	e2861010 	add	r1, r6, #16                                   
   1408c:	eb0010ec 	bl	18444 <_Watchdog_Insert>                       
   14090:	eafffff1 	b	1405c <_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 );                                            
   14094:	ebffff97 	bl	13ef8 <arm_interrupt_disable>                  
    if ( _Chain_Is_empty( insert_chain ) ) {                          
   14098:	e59d300c 	ldr	r3, [sp, #12]                                 
   1409c:	e153000a 	cmp	r3, sl                                        
   140a0:	1a000006 	bne	140c0 <_Timer_server_Body+0x100>              
      ts->insert_chain = NULL;                                        
   140a4:	e5846078 	str	r6, [r4, #120]	; 0x78                         
   140a8:	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 ) ) {                          
   140ac:	e59d3000 	ldr	r3, [sp]                                      
   140b0:	e1530007 	cmp	r3, r7                                        
)                                                                     
{                                                                     
  if ( !_Chain_Is_empty(the_chain))                                   
    return _Chain_Get_first_unprotected(the_chain);                   
  else                                                                
    return NULL;                                                      
   140b4:	13a06000 	movne	r6, #0                                      
   140b8:	1a000002 	bne	140c8 <_Timer_server_Body+0x108>              
   140bc:	ea000013 	b	14110 <_Timer_server_Body+0x150>                
   140c0:	e129f000 	msr	CPSR_fc, r0                                   <== NOT EXECUTED
   140c4:	eaffffcd 	b	14000 <_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 );                                        
   140c8:	ebffff8a 	bl	13ef8 <arm_interrupt_disable>                  
 */                                                                   
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(                            
  Chain_Control *the_chain                                            
)                                                                     
{                                                                     
  return (the_chain->first == _Chain_Tail(the_chain));                
   140cc:	e59d3000 	ldr	r3, [sp]                                      
 */                                                                   
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Get_unprotected(              
  Chain_Control *the_chain                                            
)                                                                     
{                                                                     
  if ( !_Chain_Is_empty(the_chain))                                   
   140d0:	e1530007 	cmp	r3, r7                                        
   140d4:	0a00000b 	beq	14108 <_Timer_server_Body+0x148>              
{                                                                     
  Chain_Node  *return_node;                                           
  Chain_Node  *new_first;                                             
                                                                      
  return_node         = the_chain->first;                             
  new_first           = return_node->next;                            
   140d8:	e5932000 	ldr	r2, [r3]                                      
        watchdog = (Watchdog_Control *) _Chain_Get_unprotected( &fire_chain );
        if ( watchdog != NULL ) {                                     
   140dc:	e3530000 	cmp	r3, #0                                        
  the_chain->first    = new_first;                                    
   140e0:	e58d2000 	str	r2, [sp]                                      
  new_first->previous = _Chain_Head(the_chain);                       
   140e4:	e5825004 	str	r5, [r2, #4]                                  
   140e8:	0a000006 	beq	14108 <_Timer_server_Body+0x148>              
          watchdog->state = WATCHDOG_INACTIVE;                        
   140ec:	e5836008 	str	r6, [r3, #8]                                  
   140f0:	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 );    
   140f4:	e2830020 	add	r0, r3, #32                                   
   140f8:	e8900003 	ldm	r0, {r0, r1}                                  
   140fc:	e1a0e00f 	mov	lr, pc                                        
   14100:	e593f01c 	ldr	pc, [r3, #28]                                 
      }                                                               
   14104:	eaffffef 	b	140c8 <_Timer_server_Body+0x108>                
   14108:	e129f000 	msr	CPSR_fc, r0                                   
   1410c:	eaffffb9 	b	13ff8 <_Timer_server_Body+0x38>                 
    } else {                                                          
      ts->active = false;                                             
   14110:	e3a03000 	mov	r3, #0                                        
   14114:	e5c4307c 	strb	r3, [r4, #124]	; 0x7c                        
                                                                      
      /*                                                              
       *  Block until there is something to do.                       
       */                                                             
      _Thread_Disable_dispatch();                                     
   14118:	ebffff7a 	bl	13f08 <_Thread_Disable_dispatch>               
        _Thread_Set_state( ts->thread, STATES_DELAYING );             
   1411c:	e3a01008 	mov	r1, #8                                        
   14120:	e5940000 	ldr	r0, [r4]                                      
   14124:	eb000e22 	bl	179b4 <_Thread_Set_state>                      
        _Timer_server_Reset_interval_system_watchdog( ts );           
   14128:	e1a00004 	mov	r0, r4                                        
   1412c:	ebffff7b 	bl	13f20 <_Timer_server_Reset_interval_system_watchdog>
        _Timer_server_Reset_tod_system_watchdog( ts );                
   14130:	e1a00004 	mov	r0, r4                                        
   14134:	ebffff8d 	bl	13f70 <_Timer_server_Reset_tod_system_watchdog>
      _Thread_Enable_dispatch();                                      
   14138:	eb000ba1 	bl	16fc4 <_Thread_Enable_dispatch>                
                                                                      
      ts->active = true;                                              
   1413c:	e3a03001 	mov	r3, #1                                        
   14140:	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 );        
   14144:	e2840008 	add	r0, r4, #8                                    
   14148:	eb001113 	bl	1859c <_Watchdog_Remove>                       
                                                                      
static void _Timer_server_Stop_tod_system_watchdog(                   
  Timer_server_Control *ts                                            
)                                                                     
{                                                                     
  _Watchdog_Remove( &ts->TOD_watchdogs.System_watchdog );             
   1414c:	e2840040 	add	r0, r4, #64	; 0x40                            
   14150:	eb001111 	bl	1859c <_Watchdog_Remove>                       
   14154:	eaffffa7 	b	13ff8 <_Timer_server_Body+0x38>                 
                                                                      

0000a1fc <pthread_attr_setschedpolicy>: int pthread_attr_setschedpolicy( pthread_attr_t *attr, int policy ) { if ( !attr || !attr->is_initialized )
    a1fc:	e3500000 	cmp	r0, #0                                        
    a200:	0a00000b 	beq	a234 <pthread_attr_setschedpolicy+0x38>       
    a204:	e5903000 	ldr	r3, [r0]                                      
    a208:	e3530000 	cmp	r3, #0                                        
    a20c:	0a000008 	beq	a234 <pthread_attr_setschedpolicy+0x38>       
    return EINVAL;                                                    
                                                                      
  switch ( policy ) {                                                 
    a210:	e3510004 	cmp	r1, #4                                        
    a214:	8a000008 	bhi	a23c <pthread_attr_setschedpolicy+0x40>       
    a218:	e3a03001 	mov	r3, #1                                        
    a21c:	e1a03113 	lsl	r3, r3, r1                                    
    a220:	e3130017 	tst	r3, #23                                       
    case SCHED_OTHER:                                                 
    case SCHED_FIFO:                                                  
    case SCHED_RR:                                                    
    case SCHED_SPORADIC:                                              
      attr->schedpolicy = policy;                                     
    a224:	15801014 	strne	r1, [r0, #20]                               
      return 0;                                                       
    a228:	13a00000 	movne	r0, #0                                      
)                                                                     
{                                                                     
  if ( !attr || !attr->is_initialized )                               
    return EINVAL;                                                    
                                                                      
  switch ( policy ) {                                                 
    a22c:	112fff1e 	bxne	lr                                           
    a230:	ea000001 	b	a23c <pthread_attr_setschedpolicy+0x40>         <== NOT EXECUTED
  pthread_attr_t  *attr,                                              
  int              policy                                             
)                                                                     
{                                                                     
  if ( !attr || !attr->is_initialized )                               
    return EINVAL;                                                    
    a234:	e3a00016 	mov	r0, #22                                       
    a238:	e12fff1e 	bx	lr                                             
    case SCHED_SPORADIC:                                              
      attr->schedpolicy = policy;                                     
      return 0;                                                       
                                                                      
    default:                                                          
      return ENOTSUP;                                                 
    a23c:	e3a00086 	mov	r0, #134	; 0x86                               
  }                                                                   
}                                                                     
    a240:	e12fff1e 	bx	lr                                             
                                                                      

00007040 <pthread_mutexattr_setpshared>: int pthread_mutexattr_setpshared( pthread_mutexattr_t *attr, int pshared ) { if ( !attr || !attr->is_initialized )
    7040:	e3500000 	cmp	r0, #0                                        
    7044:	0a000007 	beq	7068 <pthread_mutexattr_setpshared+0x28>      
    7048:	e5903000 	ldr	r3, [r0]                                      
    704c:	e3530000 	cmp	r3, #0                                        
    7050:	0a000004 	beq	7068 <pthread_mutexattr_setpshared+0x28>      
    return EINVAL;                                                    
                                                                      
  switch ( pshared ) {                                                
    7054:	e3510001 	cmp	r1, #1                                        
    case PTHREAD_PROCESS_SHARED:                                      
    case PTHREAD_PROCESS_PRIVATE:                                     
      attr->process_shared = pshared;                                 
    7058:	95801004 	strls	r1, [r0, #4]                                
      return 0;                                                       
    705c:	93a00000 	movls	r0, #0                                      
)                                                                     
{                                                                     
  if ( !attr || !attr->is_initialized )                               
    return EINVAL;                                                    
                                                                      
  switch ( pshared ) {                                                
    7060:	912fff1e 	bxls	lr                                           
    7064:	ea000001 	b	7070 <pthread_mutexattr_setpshared+0x30>        <== NOT EXECUTED
  pthread_mutexattr_t *attr,                                          
  int                  pshared                                        
)                                                                     
{                                                                     
  if ( !attr || !attr->is_initialized )                               
    return EINVAL;                                                    
    7068:	e3a00016 	mov	r0, #22                                       
    706c:	e12fff1e 	bx	lr                                             
    case PTHREAD_PROCESS_PRIVATE:                                     
      attr->process_shared = pshared;                                 
      return 0;                                                       
                                                                      
    default:                                                          
      return EINVAL;                                                  
    7070:	e3a00016 	mov	r0, #22                                       <== NOT EXECUTED
  }                                                                   
}                                                                     
    7074:	e12fff1e 	bx	lr                                             <== NOT EXECUTED
                                                                      

00006aac <pthread_rwlockattr_setpshared>: int pthread_rwlockattr_setpshared( pthread_rwlockattr_t *attr, int pshared ) { if ( !attr )
    6aac:	e3500000 	cmp	r0, #0                                        
    6ab0:	0a000007 	beq	6ad4 <pthread_rwlockattr_setpshared+0x28>     
    return EINVAL;                                                    
                                                                      
  if ( !attr->is_initialized )                                        
    6ab4:	e5903000 	ldr	r3, [r0]                                      
    6ab8:	e3530000 	cmp	r3, #0                                        
    6abc:	0a000004 	beq	6ad4 <pthread_rwlockattr_setpshared+0x28>     
    return EINVAL;                                                    
                                                                      
  switch ( pshared ) {                                                
    6ac0:	e3510001 	cmp	r1, #1                                        
    case PTHREAD_PROCESS_SHARED:                                      
    case PTHREAD_PROCESS_PRIVATE:                                     
      attr->process_shared = pshared;                                 
    6ac4:	95801004 	strls	r1, [r0, #4]                                
      return 0;                                                       
    6ac8:	93a00000 	movls	r0, #0                                      
    return EINVAL;                                                    
                                                                      
  if ( !attr->is_initialized )                                        
    return EINVAL;                                                    
                                                                      
  switch ( pshared ) {                                                
    6acc:	912fff1e 	bxls	lr                                           
    6ad0:	ea000001 	b	6adc <pthread_rwlockattr_setpshared+0x30>       <== NOT EXECUTED
{                                                                     
  if ( !attr )                                                        
    return EINVAL;                                                    
                                                                      
  if ( !attr->is_initialized )                                        
    return EINVAL;                                                    
    6ad4:	e3a00016 	mov	r0, #22                                       
    6ad8:	e12fff1e 	bx	lr                                             
    case PTHREAD_PROCESS_PRIVATE:                                     
      attr->process_shared = pshared;                                 
      return 0;                                                       
                                                                      
    default:                                                          
      return EINVAL;                                                  
    6adc:	e3a00016 	mov	r0, #22                                       <== NOT EXECUTED
  }                                                                   
}                                                                     
    6ae0:	e12fff1e 	bx	lr                                             <== NOT EXECUTED
                                                                      

0000c4c4 <rtems_task_mode>: rtems_status_code rtems_task_mode( rtems_mode mode_set, rtems_mode mask, rtems_mode *previous_mode_set ) {
    c4c4:	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 )                                           
    c4c8:	e252a000 	subs	sl, r2, #0                                   
rtems_status_code rtems_task_mode(                                    
  rtems_mode  mode_set,                                               
  rtems_mode  mask,                                                   
  rtems_mode *previous_mode_set                                       
)                                                                     
{                                                                     
    c4cc:	e1a04000 	mov	r4, r0                                        
    c4d0:	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;                                     
    c4d4:	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 )                                           
    c4d8:	08bd87f0 	popeq	{r4, r5, r6, r7, r8, r9, sl, pc}            
    return RTEMS_INVALID_ADDRESS;                                     
                                                                      
  executing     = _Thread_Executing;                                  
    c4dc:	e59f313c 	ldr	r3, [pc, #316]	; c620 <rtems_task_mode+0x15c> 
    c4e0:	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;
    c4e4:	e5d78074 	ldrb	r8, [r7, #116]	; 0x74                        
                                                                      
  if ( !previous_mode_set )                                           
    return RTEMS_INVALID_ADDRESS;                                     
                                                                      
  executing     = _Thread_Executing;                                  
  api = executing->API_Extensions[ THREAD_API_RTEMS ];                
    c4e8:	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 )
    c4ec:	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;
    c4f0:	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;           
    c4f4:	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;
    c4f8:	03a08c01 	moveq	r8, #256	; 0x100                            
    c4fc:	13a08000 	movne	r8, #0                                      
                                                                      
  if ( executing->budget_algorithm == THREAD_CPU_BUDGET_ALGORITHM_NONE )
    c500:	e3530000 	cmp	r3, #0                                        
    old_mode |= RTEMS_NO_TIMESLICE;                                   
  else                                                                
    old_mode |= RTEMS_TIMESLICE;                                      
    c504:	13888c02 	orrne	r8, r8, #512	; 0x200                        
                                                                      
  old_mode |= (asr->is_enabled) ? RTEMS_ASR : RTEMS_NO_ASR;           
    c508:	e3590000 	cmp	r9, #0                                        
    c50c:	03a09b01 	moveq	r9, #1024	; 0x400                           
    c510:	13a09000 	movne	r9, #0                                      
  old_mode |= _ISR_Get_level();                                       
    c514:	ebffeff9 	bl	8500 <_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;           
    c518:	e1899000 	orr	r9, r9, r0                                    
  old_mode |= _ISR_Get_level();                                       
    c51c:	e1898008 	orr	r8, r9, r8                                    
  *previous_mode_set = old_mode;                                      
                                                                      
  /*                                                                  
   *  These are generic thread scheduling characteristics.            
   */                                                                 
  if ( mask & RTEMS_PREEMPT_MASK )                                    
    c520:	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;                                      
    c524:	e58a8000 	str	r8, [sl]                                      
                                                                      
  /*                                                                  
   *  These are generic thread scheduling characteristics.            
   */                                                                 
  if ( mask & RTEMS_PREEMPT_MASK )                                    
    c528:	0a000003 	beq	c53c <rtems_task_mode+0x78>                   
    executing->is_preemptible = _Modes_Is_preempt(mode_set) ? true : false;
    c52c:	e3140c01 	tst	r4, #256	; 0x100                              
    c530:	13a03000 	movne	r3, #0                                      
    c534:	03a03001 	moveq	r3, #1                                      
    c538:	e5c73074 	strb	r3, [r7, #116]	; 0x74                        
                                                                      
  if ( mask & RTEMS_TIMESLICE_MASK ) {                                
    c53c:	e3150c02 	tst	r5, #512	; 0x200                              
    c540:	0a000006 	beq	c560 <rtems_task_mode+0x9c>                   
    if ( _Modes_Is_timeslice(mode_set) ) {                            
    c544:	e2143c02 	ands	r3, r4, #512	; 0x200                         
      executing->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE;
    c548:	13a03001 	movne	r3, #1                                      
    c54c:	1587307c 	strne	r3, [r7, #124]	; 0x7c                       
      executing->cpu_time_budget  = _Thread_Ticks_per_timeslice;      
    c550:	159f30cc 	ldrne	r3, [pc, #204]	; c624 <rtems_task_mode+0x160>
    c554:	15933000 	ldrne	r3, [r3]                                    
    } else                                                            
      executing->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_NONE; 
    c558:	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;      
    c55c:	15873078 	strne	r3, [r7, #120]	; 0x78                       
  }                                                                   
                                                                      
  /*                                                                  
   *  Set the new interrupt level                                     
   */                                                                 
  if ( mask & RTEMS_INTERRUPT_MASK )                                  
    c560:	e3150080 	tst	r5, #128	; 0x80                               
    c564:	0a000001 	beq	c570 <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 ) );           
    c568:	e2040080 	and	r0, r4, #128	; 0x80                           
    c56c:	ebffefde 	bl	84ec <_CPU_ISR_Set_level>                      
   *  This is specific to the RTEMS API                               
   */                                                                 
  is_asr_enabled = false;                                             
  needs_asr_dispatching = false;                                      
                                                                      
  if ( mask & RTEMS_ASR_MASK ) {                                      
    c570:	e2150b01 	ands	r0, r5, #1024	; 0x400                        
    c574:	0a000013 	beq	c5c8 <rtems_task_mode+0x104>                  
 *  Output:                                                           
 *    *previous_mode_set - previous mode set                          
 *     always return RTEMS_SUCCESSFUL;                                
 */                                                                   
                                                                      
rtems_status_code rtems_task_mode(                                    
    c578:	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 ) {                        
    c57c:	e5d62008 	ldrb	r2, [r6, #8]                                 
 *  Output:                                                           
 *    *previous_mode_set - previous mode set                          
 *     always return RTEMS_SUCCESSFUL;                                
 */                                                                   
                                                                      
rtems_status_code rtems_task_mode(                                    
    c580:	13a03000 	movne	r3, #0                                      
    c584:	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 ) {                        
    c588:	e1520003 	cmp	r2, r3                                        
                                                                      
  /*                                                                  
   *  This is specific to the RTEMS API                               
   */                                                                 
  is_asr_enabled = false;                                             
  needs_asr_dispatching = false;                                      
    c58c:	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 ) {                        
    c590:	0a00000c 	beq	c5c8 <rtems_task_mode+0x104>                  
      asr->is_enabled = is_asr_enabled;                               
    c594:	e5c63008 	strb	r3, [r6, #8]                                 
static inline uint32_t arm_interrupt_disable( void )                  
{                                                                     
  uint32_t arm_switch_reg;                                            
  uint32_t level;                                                     
                                                                      
  asm volatile (                                                      
    c598:	e10f3000 	mrs	r3, CPSR                                      
    c59c:	e3832080 	orr	r2, r3, #128	; 0x80                           
    c5a0:	e129f002 	msr	CPSR_fc, r2                                   
{                                                                     
  rtems_signal_set _signals;                                          
  ISR_Level        _level;                                            
                                                                      
  _ISR_Disable( _level );                                             
    _signals                     = information->signals_pending;      
    c5a4:	e2861014 	add	r1, r6, #20                                   
    c5a8:	e8910006 	ldm	r1, {r1, r2}                                  
    information->signals_pending = information->signals_posted;       
    information->signals_posted  = _signals;                          
    c5ac:	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;       
    c5b0:	e5861018 	str	r1, [r6, #24]                                 
                                                                      
static inline void arm_interrupt_enable( uint32_t level )             
{                                                                     
  ARM_SWITCH_REGISTERS;                                               
                                                                      
  asm volatile (                                                      
    c5b4:	e129f003 	msr	CPSR_fc, r3                                   
      _ASR_Swap_signals( asr );                                       
      if ( _ASR_Are_signals_pending( asr ) ) {                        
    c5b8:	e5960014 	ldr	r0, [r6, #20]                                 
                                                                      
  /*                                                                  
   *  This is specific to the RTEMS API                               
   */                                                                 
  is_asr_enabled = false;                                             
  needs_asr_dispatching = false;                                      
    c5bc:	e3500000 	cmp	r0, #0                                        
    c5c0:	13a00001 	movne	r0, #1                                      
    c5c4:	03a00000 	moveq	r0, #0                                      
        needs_asr_dispatching = true;                                 
      }                                                               
    }                                                                 
  }                                                                   
                                                                      
  if ( _System_state_Is_up( _System_state_Get() ) ) {                 
    c5c8:	e59f3058 	ldr	r3, [pc, #88]	; c628 <rtems_task_mode+0x164>  
    c5cc:	e5933000 	ldr	r3, [r3]                                      
    c5d0:	e3530003 	cmp	r3, #3                                        
    c5d4:	1a00000f 	bne	c618 <rtems_task_mode+0x154>                  
  bool are_signals_pending                                            
)                                                                     
{                                                                     
  Thread_Control     *executing;                                      
                                                                      
  executing = _Thread_Executing;                                      
    c5d8:	e59f2040 	ldr	r2, [pc, #64]	; c620 <rtems_task_mode+0x15c>  
                                                                      
  if ( are_signals_pending ||                                         
    c5dc:	e3500000 	cmp	r0, #0                                        
  bool are_signals_pending                                            
)                                                                     
{                                                                     
  Thread_Control     *executing;                                      
                                                                      
  executing = _Thread_Executing;                                      
    c5e0:	e5923004 	ldr	r3, [r2, #4]                                  
                                                                      
  if ( are_signals_pending ||                                         
    c5e4:	1a000005 	bne	c600 <rtems_task_mode+0x13c>                  
    c5e8:	e5922008 	ldr	r2, [r2, #8]                                  
    c5ec:	e1530002 	cmp	r3, r2                                        
    c5f0:	08bd87f0 	popeq	{r4, r5, r6, r7, r8, r9, sl, pc}            
       (!_Thread_Is_heir( executing ) && executing->is_preemptible) ) {
    c5f4:	e5d33074 	ldrb	r3, [r3, #116]	; 0x74                        
    c5f8:	e3530000 	cmp	r3, #0                                        
    c5fc:	08bd87f0 	popeq	{r4, r5, r6, r7, r8, r9, sl, pc}            
    _Thread_Dispatch_necessary = true;                                
    c600:	e59f3018 	ldr	r3, [pc, #24]	; c620 <rtems_task_mode+0x15c>  
    c604:	e3a02001 	mov	r2, #1                                        
    c608:	e5c32010 	strb	r2, [r3, #16]                                
     if (_Thread_Evaluate_is_dispatch_needed( needs_asr_dispatching ) )
      _Thread_Dispatch();                                             
    c60c:	ebffe9c2 	bl	6d1c <_Thread_Dispatch>                        
  }                                                                   
                                                                      
  return RTEMS_SUCCESSFUL;                                            
    c610:	e3a00000 	mov	r0, #0                                        
    c614:	e8bd87f0 	pop	{r4, r5, r6, r7, r8, r9, sl, pc}              
    c618:	e3a00000 	mov	r0, #0                                        <== NOT EXECUTED
}                                                                     
    c61c:	e8bd87f0 	pop	{r4, r5, r6, r7, r8, r9, sl, pc}              <== NOT EXECUTED
                                                                      

00005734 <sigaction>: struct sigaction *oact ) { ISR_Level level; if ( oact )
    5734:	e2523000 	subs	r3, r2, #0                                   
    *oact = _POSIX_signals_Vectors[ sig ];                            
    5738:	159f20b8 	ldrne	r2, [pc, #184]	; 57f8 <sigaction+0xc4>      
int sigaction(                                                        
  int                     sig,                                        
  const struct sigaction *act,                                        
  struct sigaction       *oact                                        
)                                                                     
{                                                                     
    573c:	e92d40f0 	push	{r4, r5, r6, r7, lr}                         
    5740:	e1a05001 	mov	r5, r1                                        
  ISR_Level     level;                                                
                                                                      
  if ( oact )                                                         
    *oact = _POSIX_signals_Vectors[ sig ];                            
    5744:	13a0100c 	movne	r1, #12                                     
    5748:	10222091 	mlane	r2, r1, r0, r2                              
int sigaction(                                                        
  int                     sig,                                        
  const struct sigaction *act,                                        
  struct sigaction       *oact                                        
)                                                                     
{                                                                     
    574c:	e1a04000 	mov	r4, r0                                        
  ISR_Level     level;                                                
                                                                      
  if ( oact )                                                         
    *oact = _POSIX_signals_Vectors[ sig ];                            
    5750:	18920007 	ldmne	r2, {r0, r1, r2}                            
    5754:	18830007 	stmne	r3, {r0, r1, r2}                            
                                                                      
  if ( !sig )                                                         
    5758:	e3540000 	cmp	r4, #0                                        
    575c:	0a000004 	beq	5774 <sigaction+0x40>                         
                                                                      
static inline bool is_valid_signo(                                    
  int signo                                                           
)                                                                     
{                                                                     
  return ((signo) >= 1 && (signo) <= 32 );                            
    5760:	e2443001 	sub	r3, r4, #1                                    
    rtems_set_errno_and_return_minus_one( EINVAL );                   
                                                                      
  if ( !is_valid_signo(sig) )                                         
    5764:	e353001f 	cmp	r3, #31                                       
    5768:	8a000001 	bhi	5774 <sigaction+0x40>                         
   *                                                                  
   *  NOTE: Solaris documentation claims to "silently enforce" this which
   *        contradicts the POSIX specification.                      
   */                                                                 
                                                                      
  if ( sig == SIGKILL )                                               
    576c:	e3540009 	cmp	r4, #9                                        
    5770:	1a000004 	bne	5788 <sigaction+0x54>                         
    rtems_set_errno_and_return_minus_one( EINVAL );                   
    5774:	eb002104 	bl	db8c <__errno>                                 
    5778:	e3a03016 	mov	r3, #22                                       
    577c:	e5803000 	str	r3, [r0]                                      
    5780:	e3e00000 	mvn	r0, #0                                        
    5784:	e8bd80f0 	pop	{r4, r5, r6, r7, pc}                          
  /*                                                                  
   *  Evaluate the new action structure and set the global signal vector
   *  appropriately.                                                  
   */                                                                 
                                                                      
  if ( act ) {                                                        
    5788:	e3550000 	cmp	r5, #0                                        
    578c:	0a000017 	beq	57f0 <sigaction+0xbc>                         
static inline uint32_t arm_interrupt_disable( void )                  
{                                                                     
  uint32_t arm_switch_reg;                                            
  uint32_t level;                                                     
                                                                      
  asm volatile (                                                      
    5790:	e10f6000 	mrs	r6, CPSR                                      
    5794:	e3863080 	orr	r3, r6, #128	; 0x80                           
    5798:	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 ) {                             
    579c:	e5953008 	ldr	r3, [r5, #8]                                  
    57a0:	e3530000 	cmp	r3, #0                                        
    57a4:	e59f704c 	ldr	r7, [pc, #76]	; 57f8 <sigaction+0xc4>         
    57a8:	1a000007 	bne	57cc <sigaction+0x98>                         
        _POSIX_signals_Vectors[ sig ] = _POSIX_signals_Default_vectors[ sig ];
    57ac:	e283300c 	add	r3, r3, #12                                   
    57b0:	e0040493 	mul	r4, r3, r4                                    
    57b4:	e59f2040 	ldr	r2, [pc, #64]	; 57fc <sigaction+0xc8>         
    57b8:	e0873004 	add	r3, r7, r4                                    
    57bc:	e0824004 	add	r4, r2, r4                                    
    57c0:	e8940007 	ldm	r4, {r0, r1, r2}                              
    57c4:	e8830007 	stm	r3, {r0, r1, r2}                              
    57c8:	ea000005 	b	57e4 <sigaction+0xb0>                           
      } else {                                                        
         _POSIX_signals_Clear_process_signals( sig );                 
    57cc:	e1a00004 	mov	r0, r4                                        
    57d0:	eb001575 	bl	adac <_POSIX_signals_Clear_process_signals>    
         _POSIX_signals_Vectors[ sig ] = *act;                        
    57d4:	e3a0300c 	mov	r3, #12                                       
    57d8:	e0247493 	mla	r4, r3, r4, r7                                
    57dc:	e8950007 	ldm	r5, {r0, r1, r2}                              
    57e0:	e8840007 	stm	r4, {r0, r1, r2}                              
                                                                      
static inline void arm_interrupt_enable( uint32_t level )             
{                                                                     
  ARM_SWITCH_REGISTERS;                                               
                                                                      
  asm volatile (                                                      
    57e4:	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;                                                           
    57e8:	e3a00000 	mov	r0, #0                                        
    57ec:	e8bd80f0 	pop	{r4, r5, r6, r7, pc}                          
    57f0:	e1a00005 	mov	r0, r5                                        <== NOT EXECUTED
}                                                                     
    57f4:	e8bd80f0 	pop	{r4, r5, r6, r7, pc}                          <== NOT EXECUTED
                                                                      

00007dac <sigwait>: int sigwait( const sigset_t *set, int *sig ) {
    7dac:	e92d4010 	push	{r4, lr}                                     
    7db0:	e1a04001 	mov	r4, r1                                        
  int status;                                                         
                                                                      
  status = sigtimedwait( set, NULL, NULL );                           
    7db4:	e3a01000 	mov	r1, #0                                        
    7db8:	e1a02001 	mov	r2, r1                                        
    7dbc:	ebffff84 	bl	7bd4 <sigtimedwait>                            
                                                                      
  if ( status != -1 ) {                                               
    7dc0:	e3700001 	cmn	r0, #1                                        
    7dc4:	0a000004 	beq	7ddc <sigwait+0x30>                           
    if ( sig )                                                        
    7dc8:	e3540000 	cmp	r4, #0                                        
      *sig = status;                                                  
    7dcc:	15840000 	strne	r0, [r4]                                    
    return 0;                                                         
    7dd0:	13a00000 	movne	r0, #0                                      
  int status;                                                         
                                                                      
  status = sigtimedwait( set, NULL, NULL );                           
                                                                      
  if ( status != -1 ) {                                               
    if ( sig )                                                        
    7dd4:	18bd8010 	popne	{r4, pc}                                    
    7dd8:	ea000002 	b	7de8 <sigwait+0x3c>                             <== NOT EXECUTED
      *sig = status;                                                  
    return 0;                                                         
  }                                                                   
                                                                      
  return errno;                                                       
    7ddc:	eb002032 	bl	feac <__errno>                                 
    7de0:	e5900000 	ldr	r0, [r0]                                      
    7de4:	e8bd8010 	pop	{r4, pc}                                      
  status = sigtimedwait( set, NULL, NULL );                           
                                                                      
  if ( status != -1 ) {                                               
    if ( sig )                                                        
      *sig = status;                                                  
    return 0;                                                         
    7de8:	e1a00004 	mov	r0, r4                                        <== NOT EXECUTED
  }                                                                   
                                                                      
  return errno;                                                       
}                                                                     
    7dec:	e8bd8010 	pop	{r4, pc}                                      <== NOT EXECUTED