RTEMS 4.11Annotated Report
Sat Nov 27 23:32:45 2010
0004acfc <TOD_MICROSECONDS_TO_TICKS>:
uint32_t TOD_MICROSECONDS_TO_TICKS(
uint32_t microseconds
)
{
return (microseconds / rtems_configuration_get_microseconds_per_tick());
}
4acfc: 41f9 0006 1100 lea 61100 <Configuration+0xc>,%a0 <== NOT EXECUTED
#include <rtems/score/tod.h>
uint32_t TOD_MICROSECONDS_TO_TICKS(
uint32_t microseconds
)
{
4ad02: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return (microseconds / rtems_configuration_get_microseconds_per_tick());
}
4ad06: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
4ad0a: 4e5e unlk %fp <== NOT EXECUTED
4ad0c: 4c50 0000 remul %a0@,%d0,%d0 <== NOT EXECUTED
...
00046c28 <TOD_MILLISECONDS_TO_TICKS>:
#include <rtems/score/tod.h>
uint32_t TOD_MILLISECONDS_TO_TICKS(
uint32_t milliseconds
)
{
46c28: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return (milliseconds / rtems_configuration_get_milliseconds_per_tick());
46c2c: 2039 0005 d410 movel 5d410 <Configuration+0xc>,%d0 <== NOT EXECUTED
#include <rtems/score/tod.h>
uint32_t TOD_MILLISECONDS_TO_TICKS(
uint32_t milliseconds
)
{
46c32: 2f02 movel %d2,%sp@- <== NOT EXECUTED
return (milliseconds / rtems_configuration_get_milliseconds_per_tick());
46c34: 243c 0000 03e8 movel #1000,%d2 <== NOT EXECUTED
46c3a: 4c42 0000 remul %d2,%d0,%d0 <== NOT EXECUTED
}
46c3e: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
46c42: 4c40 2002 remul %d0,%d2,%d2 <== NOT EXECUTED
46c46: 2002 movel %d2,%d0 <== NOT EXECUTED
46c48: 241f movel %sp@+,%d2 <== NOT EXECUTED
46c4a: 4e5e unlk %fp <== NOT EXECUTED
...
0004c754 <TOD_TICKS_PER_SECOND_method>:
uint32_t TOD_TICKS_PER_SECOND_method(void)
{
return (TOD_MICROSECONDS_PER_SECOND /
rtems_configuration_get_microseconds_per_tick());
}
4c754: 41f9 0005 c260 lea 5c260 <Configuration+0xc>,%a0 <== NOT EXECUTED
#include <rtems/system.h>
#include <rtems/config.h>
#include <rtems/score/tod.h>
uint32_t TOD_TICKS_PER_SECOND_method(void)
{
4c75a: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return (TOD_MICROSECONDS_PER_SECOND /
rtems_configuration_get_microseconds_per_tick());
}
4c75e: 203c 000f 4240 movel #1000000,%d0 <== NOT EXECUTED
4c764: 4e5e unlk %fp <== NOT EXECUTED
4c766: 4c50 0000 remul %a0@,%d0,%d0 <== NOT EXECUTED
00045f84 <_API_Mutex_Unlock>:
#include <rtems/score/apimutex.h>
void _API_Mutex_Unlock(
API_Mutex_Control *the_mutex
)
{
45f84: 4e56 0000 linkw %fp,#0
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
45f88: 2039 0005 db08 movel 5db08 <_Thread_Dispatch_disable_level>,%d0
45f8e: 5280 addql #1,%d0
45f90: 206e 0008 moveal %fp@(8),%a0
45f94: 23c0 0005 db08 movel %d0,5db08 <_Thread_Dispatch_disable_level>
_Thread_Disable_dispatch();
_CORE_mutex_Surrender(
45f9a: 42a7 clrl %sp@-
45f9c: 2f28 0008 movel %a0@(8),%sp@-
45fa0: 4868 0010 pea %a0@(16)
45fa4: 4eb9 0004 6208 jsr 46208 <_CORE_mutex_Surrender>
&the_mutex->Mutex,
the_mutex->Object.id,
NULL
);
_Thread_Enable_dispatch();
45faa: 4fef 000c lea %sp@(12),%sp
}
45fae: 4e5e unlk %fp
_CORE_mutex_Surrender(
&the_mutex->Mutex,
the_mutex->Object.id,
NULL
);
_Thread_Enable_dispatch();
45fb0: 4ef9 0004 77a6 jmp 477a6 <_Thread_Enable_dispatch>
...
0004e5b4 <_Barrier_Translate_core_barrier_return_code>:
#if defined(RTEMS_DEBUG)
if ( the_barrier_status > CORE_BARRIER_STATUS_LAST )
return RTEMS_INTERNAL_ERROR;
#endif
return _Barrier_Translate_core_barrier_return_code_[the_barrier_status];
}
4e5b4: 41f9 0005 e814 lea 5e814 <_Barrier_Translate_core_barrier_return_code_>,%a0<== NOT EXECUTED
};
rtems_status_code _Barrier_Translate_core_barrier_return_code (
CORE_barrier_Status the_barrier_status
)
{
4e5ba: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( the_barrier_status > CORE_BARRIER_STATUS_LAST )
return RTEMS_INTERNAL_ERROR;
#endif
return _Barrier_Translate_core_barrier_return_code_[the_barrier_status];
}
4e5be: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
4e5c2: 4e5e unlk %fp <== NOT EXECUTED
4e5c4: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0 <== NOT EXECUTED
...
0004812c <_CORE_RWLock_Initialize>:
void _CORE_RWLock_Initialize(
CORE_RWLock_Control *the_rwlock,
CORE_RWLock_Attributes *the_rwlock_attributes
)
{
4812c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
48130: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
the_rwlock->Attributes = *the_rwlock_attributes;
48134: 226e 000c moveal %fp@(12),%a1 <== NOT EXECUTED
48138: 2151 0040 movel %a1@,%a0@(64) <== NOT EXECUTED
/*
the_rwlock->number_of_waiting_threads = 0;
*/
the_rwlock->number_of_readers = 0;
4813c: 42a8 0048 clrl %a0@(72) <== NOT EXECUTED
the_rwlock->current_state = CORE_RWLOCK_UNLOCKED;
48140: 42a8 0044 clrl %a0@(68) <== NOT EXECUTED
_Thread_queue_Initialize(
48144: 4878 0003 pea 3 <DIVIDE> <== NOT EXECUTED
48148: 2f3c 0002 0000 movel #131072,%sp@- <== NOT EXECUTED
4814e: 42a7 clrl %sp@- <== NOT EXECUTED
48150: 2f08 movel %a0,%sp@- <== NOT EXECUTED
48152: 4eb9 0004 a000 jsr 4a000 <_Thread_queue_Initialize> <== NOT EXECUTED
48158: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
&the_rwlock->Wait_queue,
THREAD_QUEUE_DISCIPLINE_FIFO,
STATES_WAITING_FOR_RWLOCK,
CORE_RWLOCK_TIMEOUT
);
}
4815c: 4e5e unlk %fp <== NOT EXECUTED
00048160 <_CORE_RWLock_Obtain_for_reading>:
* If unlocked, then OK to read.
* If locked for reading and no waiters, then OK to read.
* If any thread is waiting, then we wait.
*/
_ISR_Disable( level );
48160: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
Objects_Id id,
bool wait,
Watchdog_Interval timeout,
CORE_RWLock_API_mp_support_callout api_rwlock_mp_support
)
{
48166: 4e56 ffe8 linkw %fp,#-24 <== NOT EXECUTED
4816a: 48d7 0c3c moveml %d2-%d5/%a2-%a3,%sp@ <== NOT EXECUTED
4816e: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
48172: 282e 000c movel %fp@(12),%d4 <== NOT EXECUTED
48176: 262e 0014 movel %fp@(20),%d3 <== NOT EXECUTED
4817a: 1a2e 0013 moveb %fp@(19),%d5 <== NOT EXECUTED
ISR_Level level;
Thread_Control *executing = _Thread_Executing;
4817e: 2679 0006 0bfa moveal 60bfa <_Per_CPU_Information+0xc>,%a3 <== NOT EXECUTED
* If unlocked, then OK to read.
* If locked for reading and no waiters, then OK to read.
* If any thread is waiting, then we wait.
*/
_ISR_Disable( level );
48184: 40c2 movew %sr,%d2 <== NOT EXECUTED
48186: 8082 orl %d2,%d0 <== NOT EXECUTED
48188: 46c0 movew %d0,%sr <== NOT EXECUTED
switch ( the_rwlock->current_state ) {
4818a: 202a 0044 movel %a2@(68),%d0 <== NOT EXECUTED
4818e: 6708 beqs 48198 <_CORE_RWLock_Obtain_for_reading+0x38><== NOT EXECUTED
48190: 7201 moveq #1,%d1 <== NOT EXECUTED
48192: b280 cmpl %d0,%d1 <== NOT EXECUTED
48194: 662a bnes 481c0 <_CORE_RWLock_Obtain_for_reading+0x60><== NOT EXECUTED
48196: 600e bras 481a6 <_CORE_RWLock_Obtain_for_reading+0x46><== NOT EXECUTED
case CORE_RWLOCK_UNLOCKED:
the_rwlock->current_state = CORE_RWLOCK_LOCKED_FOR_READING;
48198: 7001 moveq #1,%d0 <== NOT EXECUTED
the_rwlock->number_of_readers += 1;
4819a: 52aa 0048 addql #1,%a2@(72) <== NOT EXECUTED
*/
_ISR_Disable( level );
switch ( the_rwlock->current_state ) {
case CORE_RWLOCK_UNLOCKED:
the_rwlock->current_state = CORE_RWLOCK_LOCKED_FOR_READING;
4819e: 2540 0044 movel %d0,%a2@(68) <== NOT EXECUTED
the_rwlock->number_of_readers += 1;
_ISR_Enable( level );
481a2: 46c2 movew %d2,%sr <== NOT EXECUTED
481a4: 6014 bras 481ba <_CORE_RWLock_Obtain_for_reading+0x5a><== NOT EXECUTED
executing->Wait.return_code = CORE_RWLOCK_SUCCESSFUL;
return;
case CORE_RWLOCK_LOCKED_FOR_READING: {
Thread_Control *waiter;
waiter = _Thread_queue_First( &the_rwlock->Wait_queue );
481a6: 2f0a movel %a2,%sp@- <== NOT EXECUTED
481a8: 4eb9 0004 9f6c jsr 49f6c <_Thread_queue_First> <== NOT EXECUTED
if ( !waiter ) {
481ae: 588f addql #4,%sp <== NOT EXECUTED
481b0: 4a80 tstl %d0 <== NOT EXECUTED
481b2: 660c bnes 481c0 <_CORE_RWLock_Obtain_for_reading+0x60><== NOT EXECUTED
the_rwlock->number_of_readers += 1;
481b4: 52aa 0048 addql #1,%a2@(72) <== NOT EXECUTED
_ISR_Enable( level );
481b8: 46c2 movew %d2,%sr <== NOT EXECUTED
executing->Wait.return_code = CORE_RWLOCK_SUCCESSFUL;
481ba: 42ab 0034 clrl %a3@(52) <== NOT EXECUTED
return;
481be: 6046 bras 48206 <_CORE_RWLock_Obtain_for_reading+0xa6><== NOT EXECUTED
/*
* If the thread is not willing to wait, then return immediately.
*/
if ( !wait ) {
481c0: 4a05 tstb %d5 <== NOT EXECUTED
481c2: 660a bnes 481ce <_CORE_RWLock_Obtain_for_reading+0x6e><== NOT EXECUTED
_ISR_Enable( level );
481c4: 46c2 movew %d2,%sr <== NOT EXECUTED
executing->Wait.return_code = CORE_RWLOCK_UNAVAILABLE;
481c6: 7202 moveq #2,%d1 <== NOT EXECUTED
481c8: 2741 0034 movel %d1,%a3@(52) <== NOT EXECUTED
481cc: 6038 bras 48206 <_CORE_RWLock_Obtain_for_reading+0xa6><== NOT EXECUTED
481ce: 7001 moveq #1,%d0 <== NOT EXECUTED
481d0: 2540 0030 movel %d0,%a2@(48) <== NOT EXECUTED
/*
* We need to wait to enter this critical section
*/
_Thread_queue_Enter_critical_section( &the_rwlock->Wait_queue );
executing->Wait.queue = &the_rwlock->Wait_queue;
481d4: 274a 0044 movel %a2,%a3@(68) <== NOT EXECUTED
executing->Wait.id = id;
481d8: 2744 0020 movel %d4,%a3@(32) <== NOT EXECUTED
executing->Wait.option = CORE_RWLOCK_THREAD_WAITING_FOR_READ;
481dc: 42ab 0030 clrl %a3@(48) <== NOT EXECUTED
executing->Wait.return_code = CORE_RWLOCK_SUCCESSFUL;
481e0: 42ab 0034 clrl %a3@(52) <== NOT EXECUTED
_ISR_Enable( level );
481e4: 46c2 movew %d2,%sr <== NOT EXECUTED
_Thread_queue_Enqueue_with_handler(
481e6: 2d43 000c movel %d3,%fp@(12) <== NOT EXECUTED
481ea: 223c 0004 8350 movel #295760,%d1 <== NOT EXECUTED
481f0: 2d4a 0008 movel %a2,%fp@(8) <== NOT EXECUTED
timeout,
_CORE_RWLock_Timeout
);
/* return to API level so it can dispatch and we block */
}
481f4: 4cee 0c3c ffe8 moveml %fp@(-24),%d2-%d5/%a2-%a3 <== NOT EXECUTED
executing->Wait.id = id;
executing->Wait.option = CORE_RWLOCK_THREAD_WAITING_FOR_READ;
executing->Wait.return_code = CORE_RWLOCK_SUCCESSFUL;
_ISR_Enable( level );
_Thread_queue_Enqueue_with_handler(
481fa: 2d41 0010 movel %d1,%fp@(16) <== NOT EXECUTED
timeout,
_CORE_RWLock_Timeout
);
/* return to API level so it can dispatch and we block */
}
481fe: 4e5e unlk %fp <== NOT EXECUTED
executing->Wait.id = id;
executing->Wait.option = CORE_RWLOCK_THREAD_WAITING_FOR_READ;
executing->Wait.return_code = CORE_RWLOCK_SUCCESSFUL;
_ISR_Enable( level );
_Thread_queue_Enqueue_with_handler(
48200: 4ef9 0004 9c58 jmp 49c58 <_Thread_queue_Enqueue_with_handler><== NOT EXECUTED
timeout,
_CORE_RWLock_Timeout
);
/* return to API level so it can dispatch and we block */
}
48206: 4cee 0c3c ffe8 moveml %fp@(-24),%d2-%d5/%a2-%a3 <== NOT EXECUTED
4820c: 4e5e unlk %fp <== NOT EXECUTED
00048210 <_CORE_RWLock_Obtain_for_writing>:
* Otherwise, we have to block.
* If locked for reading and no waiters, then OK to read.
* If any thread is waiting, then we wait.
*/
_ISR_Disable( level );
48210: 223c 0000 0700 movel #1792,%d1 <== NOT EXECUTED
Objects_Id id,
bool wait,
Watchdog_Interval timeout,
CORE_RWLock_API_mp_support_callout api_rwlock_mp_support
)
{
48216: 4e56 fff4 linkw %fp,#-12 <== NOT EXECUTED
4821a: 226e 0008 moveal %fp@(8),%a1 <== NOT EXECUTED
4821e: 48d7 001c moveml %d2-%d4,%sp@ <== NOT EXECUTED
48222: 262e 000c movel %fp@(12),%d3 <== NOT EXECUTED
48226: 242e 0014 movel %fp@(20),%d2 <== NOT EXECUTED
ISR_Level level;
Thread_Control *executing = _Thread_Executing;
4822a: 2079 0006 0bfa moveal 60bfa <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
Objects_Id id,
bool wait,
Watchdog_Interval timeout,
CORE_RWLock_API_mp_support_callout api_rwlock_mp_support
)
{
48230: 182e 0013 moveb %fp@(19),%d4 <== NOT EXECUTED
* Otherwise, we have to block.
* If locked for reading and no waiters, then OK to read.
* If any thread is waiting, then we wait.
*/
_ISR_Disable( level );
48234: 40c0 movew %sr,%d0 <== NOT EXECUTED
48236: 8280 orl %d0,%d1 <== NOT EXECUTED
48238: 46c1 movew %d1,%sr <== NOT EXECUTED
switch ( the_rwlock->current_state ) {
4823a: 4aa9 0044 tstl %a1@(68) <== NOT EXECUTED
4823e: 660e bnes 4824e <_CORE_RWLock_Obtain_for_writing+0x3e><== NOT EXECUTED
case CORE_RWLOCK_UNLOCKED:
the_rwlock->current_state = CORE_RWLOCK_LOCKED_FOR_WRITING;
48240: 7202 moveq #2,%d1 <== NOT EXECUTED
48242: 2341 0044 movel %d1,%a1@(68) <== NOT EXECUTED
_ISR_Enable( level );
48246: 46c0 movew %d0,%sr <== NOT EXECUTED
executing->Wait.return_code = CORE_RWLOCK_SUCCESSFUL;
48248: 42a8 0034 clrl %a0@(52) <== NOT EXECUTED
return;
4824c: 6044 bras 48292 <_CORE_RWLock_Obtain_for_writing+0x82><== NOT EXECUTED
/*
* If the thread is not willing to wait, then return immediately.
*/
if ( !wait ) {
4824e: 4a04 tstb %d4 <== NOT EXECUTED
48250: 660a bnes 4825c <_CORE_RWLock_Obtain_for_writing+0x4c><== NOT EXECUTED
_ISR_Enable( level );
48252: 46c0 movew %d0,%sr <== NOT EXECUTED
executing->Wait.return_code = CORE_RWLOCK_UNAVAILABLE;
48254: 7002 moveq #2,%d0 <== NOT EXECUTED
48256: 2140 0034 movel %d0,%a0@(52) <== NOT EXECUTED
4825a: 6036 bras 48292 <_CORE_RWLock_Obtain_for_writing+0x82><== NOT EXECUTED
4825c: 7201 moveq #1,%d1 <== NOT EXECUTED
4825e: 2341 0030 movel %d1,%a1@(48) <== NOT EXECUTED
/*
* We need to wait to enter this critical section
*/
_Thread_queue_Enter_critical_section( &the_rwlock->Wait_queue );
executing->Wait.queue = &the_rwlock->Wait_queue;
48262: 2149 0044 movel %a1,%a0@(68) <== NOT EXECUTED
executing->Wait.id = id;
48266: 2143 0020 movel %d3,%a0@(32) <== NOT EXECUTED
executing->Wait.option = CORE_RWLOCK_THREAD_WAITING_FOR_WRITE;
4826a: 2141 0030 movel %d1,%a0@(48) <== NOT EXECUTED
executing->Wait.return_code = CORE_RWLOCK_SUCCESSFUL;
4826e: 42a8 0034 clrl %a0@(52) <== NOT EXECUTED
_ISR_Enable( level );
48272: 46c0 movew %d0,%sr <== NOT EXECUTED
_Thread_queue_Enqueue_with_handler(
48274: 2d42 000c movel %d2,%fp@(12) <== NOT EXECUTED
48278: 203c 0004 8350 movel #295760,%d0 <== NOT EXECUTED
4827e: 2d49 0008 movel %a1,%fp@(8) <== NOT EXECUTED
_CORE_RWLock_Timeout
);
/* return to API level so it can dispatch and we block */
}
48282: 4cd7 001c moveml %sp@,%d2-%d4 <== NOT EXECUTED
executing->Wait.id = id;
executing->Wait.option = CORE_RWLOCK_THREAD_WAITING_FOR_WRITE;
executing->Wait.return_code = CORE_RWLOCK_SUCCESSFUL;
_ISR_Enable( level );
_Thread_queue_Enqueue_with_handler(
48286: 2d40 0010 movel %d0,%fp@(16) <== NOT EXECUTED
_CORE_RWLock_Timeout
);
/* return to API level so it can dispatch and we block */
}
4828a: 4e5e unlk %fp <== NOT EXECUTED
executing->Wait.id = id;
executing->Wait.option = CORE_RWLOCK_THREAD_WAITING_FOR_WRITE;
executing->Wait.return_code = CORE_RWLOCK_SUCCESSFUL;
_ISR_Enable( level );
_Thread_queue_Enqueue_with_handler(
4828c: 4ef9 0004 9c58 jmp 49c58 <_Thread_queue_Enqueue_with_handler><== NOT EXECUTED
_CORE_RWLock_Timeout
);
/* return to API level so it can dispatch and we block */
}
48292: 4cd7 001c moveml %sp@,%d2-%d4 <== NOT EXECUTED
48296: 4e5e unlk %fp <== NOT EXECUTED
...
0004829c <_CORE_RWLock_Release>:
* Otherwise, we have to block.
* If locked for reading and no waiters, then OK to read.
* If any thread is waiting, then we wait.
*/
_ISR_Disable( level );
4829c: 223c 0000 0700 movel #1792,%d1 <== NOT EXECUTED
*/
CORE_RWLock_Status _CORE_RWLock_Release(
CORE_RWLock_Control *the_rwlock
)
{
482a2: 4e56 fff0 linkw %fp,#-16 <== NOT EXECUTED
ISR_Level level;
Thread_Control *executing = _Thread_Executing;
482a6: 2079 0006 0bfa moveal 60bfa <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
*/
CORE_RWLock_Status _CORE_RWLock_Release(
CORE_RWLock_Control *the_rwlock
)
{
482ac: 48d7 1c04 moveml %d2/%a2-%a4,%sp@ <== NOT EXECUTED
482b0: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
* Otherwise, we have to block.
* If locked for reading and no waiters, then OK to read.
* If any thread is waiting, then we wait.
*/
_ISR_Disable( level );
482b4: 40c0 movew %sr,%d0 <== NOT EXECUTED
482b6: 8280 orl %d0,%d1 <== NOT EXECUTED
482b8: 46c1 movew %d1,%sr <== NOT EXECUTED
if ( the_rwlock->current_state == CORE_RWLOCK_UNLOCKED){
482ba: 222a 0044 movel %a2@(68),%d1 <== NOT EXECUTED
482be: 660a bnes 482ca <_CORE_RWLock_Release+0x2e> <== NOT EXECUTED
_ISR_Enable( level );
482c0: 46c0 movew %d0,%sr <== NOT EXECUTED
executing->Wait.return_code = CORE_RWLOCK_UNAVAILABLE;
482c2: 7002 moveq #2,%d0 <== NOT EXECUTED
482c4: 2140 0034 movel %d0,%a0@(52) <== NOT EXECUTED
return CORE_RWLOCK_SUCCESSFUL;
482c8: 6078 bras 48342 <_CORE_RWLock_Release+0xa6> <== NOT EXECUTED
}
if ( the_rwlock->current_state == CORE_RWLOCK_LOCKED_FOR_READING ) {
482ca: 7401 moveq #1,%d2 <== NOT EXECUTED
482cc: b481 cmpl %d1,%d2 <== NOT EXECUTED
482ce: 6610 bnes 482e0 <_CORE_RWLock_Release+0x44> <== NOT EXECUTED
the_rwlock->number_of_readers -= 1;
482d0: 222a 0048 movel %a2@(72),%d1 <== NOT EXECUTED
482d4: 5381 subql #1,%d1 <== NOT EXECUTED
482d6: 2541 0048 movel %d1,%a2@(72) <== NOT EXECUTED
if ( the_rwlock->number_of_readers != 0 ) {
482da: 6704 beqs 482e0 <_CORE_RWLock_Release+0x44> <== NOT EXECUTED
/* must be unlocked again */
_ISR_Enable( level );
482dc: 46c0 movew %d0,%sr <== NOT EXECUTED
return CORE_RWLOCK_SUCCESSFUL;
482de: 6062 bras 48342 <_CORE_RWLock_Release+0xa6> <== NOT EXECUTED
}
}
/* CORE_RWLOCK_LOCKED_FOR_WRITING or READING with readers */
executing->Wait.return_code = CORE_RWLOCK_SUCCESSFUL;
482e0: 42a8 0034 clrl %a0@(52) <== NOT EXECUTED
/*
* Implicitly transition to "unlocked" and find another thread interested
* in obtaining this rwlock.
*/
the_rwlock->current_state = CORE_RWLOCK_UNLOCKED;
482e4: 42aa 0044 clrl %a2@(68) <== NOT EXECUTED
_ISR_Enable( level );
482e8: 46c0 movew %d0,%sr <== NOT EXECUTED
next = _Thread_queue_Dequeue( &the_rwlock->Wait_queue );
482ea: 2f0a movel %a2,%sp@- <== NOT EXECUTED
482ec: 4eb9 0004 9b18 jsr 49b18 <_Thread_queue_Dequeue> <== NOT EXECUTED
if ( next ) {
482f2: 588f addql #4,%sp <== NOT EXECUTED
482f4: 4a80 tstl %d0 <== NOT EXECUTED
482f6: 674a beqs 48342 <_CORE_RWLock_Release+0xa6> <== NOT EXECUTED
if ( next->Wait.option == CORE_RWLOCK_THREAD_WAITING_FOR_WRITE ) {
482f8: 7201 moveq #1,%d1 <== NOT EXECUTED
482fa: 2040 moveal %d0,%a0 <== NOT EXECUTED
482fc: b2a8 0030 cmpl %a0@(48),%d1 <== NOT EXECUTED
48300: 6608 bnes 4830a <_CORE_RWLock_Release+0x6e> <== NOT EXECUTED
the_rwlock->current_state = CORE_RWLOCK_LOCKED_FOR_WRITING;
48302: 7002 moveq #2,%d0 <== NOT EXECUTED
48304: 2540 0044 movel %d0,%a2@(68) <== NOT EXECUTED
return CORE_RWLOCK_SUCCESSFUL;
48308: 6038 bras 48342 <_CORE_RWLock_Release+0xa6> <== NOT EXECUTED
/*
* Must be CORE_RWLOCK_THREAD_WAITING_FOR_READING
*/
the_rwlock->number_of_readers += 1;
the_rwlock->current_state = CORE_RWLOCK_LOCKED_FOR_READING;
4830a: 7201 moveq #1,%d1 <== NOT EXECUTED
}
/*
* Must be CORE_RWLOCK_THREAD_WAITING_FOR_READING
*/
the_rwlock->number_of_readers += 1;
4830c: 52aa 0048 addql #1,%a2@(72) <== NOT EXECUTED
/*
* Now see if more readers can be let go.
*/
while ( 1 ) {
next = _Thread_queue_First( &the_rwlock->Wait_queue );
48310: 49f9 0004 9f6c lea 49f6c <_Thread_queue_First>,%a4 <== NOT EXECUTED
if ( !next ||
next->Wait.option == CORE_RWLOCK_THREAD_WAITING_FOR_WRITE )
return CORE_RWLOCK_SUCCESSFUL;
the_rwlock->number_of_readers += 1;
_Thread_queue_Extract( &the_rwlock->Wait_queue, next );
48316: 47f9 0004 9e3c lea 49e3c <_Thread_queue_Extract>,%a3 <== NOT EXECUTED
/*
* Must be CORE_RWLOCK_THREAD_WAITING_FOR_READING
*/
the_rwlock->number_of_readers += 1;
the_rwlock->current_state = CORE_RWLOCK_LOCKED_FOR_READING;
4831c: 2541 0044 movel %d1,%a2@(68) <== NOT EXECUTED
/*
* Now see if more readers can be let go.
*/
while ( 1 ) {
next = _Thread_queue_First( &the_rwlock->Wait_queue );
48320: 2f0a movel %a2,%sp@- <== NOT EXECUTED
48322: 4e94 jsr %a4@ <== NOT EXECUTED
if ( !next ||
48324: 588f addql #4,%sp <== NOT EXECUTED
48326: 4a80 tstl %d0 <== NOT EXECUTED
48328: 6718 beqs 48342 <_CORE_RWLock_Release+0xa6> <== NOT EXECUTED
4832a: 7401 moveq #1,%d2 <== NOT EXECUTED
4832c: 2040 moveal %d0,%a0 <== NOT EXECUTED
4832e: b4a8 0030 cmpl %a0@(48),%d2 <== NOT EXECUTED
48332: 670e beqs 48342 <_CORE_RWLock_Release+0xa6> <== NOT EXECUTED
next->Wait.option == CORE_RWLOCK_THREAD_WAITING_FOR_WRITE )
return CORE_RWLOCK_SUCCESSFUL;
the_rwlock->number_of_readers += 1;
48334: 52aa 0048 addql #1,%a2@(72) <== NOT EXECUTED
_Thread_queue_Extract( &the_rwlock->Wait_queue, next );
48338: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4833a: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4833c: 4e93 jsr %a3@ <== NOT EXECUTED
}
4833e: 508f addql #8,%sp <== NOT EXECUTED
48340: 60de bras 48320 <_CORE_RWLock_Release+0x84> <== NOT EXECUTED
}
/* indentation is to match _ISR_Disable at top */
return CORE_RWLOCK_SUCCESSFUL;
}
48342: 4280 clrl %d0 <== NOT EXECUTED
48344: 4cee 1c04 fff0 moveml %fp@(-16),%d2/%a2-%a4 <== NOT EXECUTED
4834a: 4e5e unlk %fp <== NOT EXECUTED
...
00048350 <_CORE_RWLock_Timeout>:
void _CORE_RWLock_Timeout(
Objects_Id id,
void *ignored
)
{
48350: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
Thread_Control *the_thread;
Objects_Locations location;
the_thread = _Thread_Get( id, &location );
48354: 486e fffc pea %fp@(-4) <== NOT EXECUTED
48358: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4835c: 4eb9 0004 981c jsr 4981c <_Thread_Get> <== NOT EXECUTED
switch ( location ) {
48362: 508f addql #8,%sp <== NOT EXECUTED
48364: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
48368: 6618 bnes 48382 <_CORE_RWLock_Timeout+0x32> <== NOT EXECUTED
#if defined(RTEMS_MULTIPROCESSING)
case OBJECTS_REMOTE: /* impossible */
#endif
break;
case OBJECTS_LOCAL:
_Thread_queue_Process_timeout( the_thread );
4836a: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4836c: 4eb9 0004 a06c jsr 4a06c <_Thread_queue_Process_timeout> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void )
{
RTEMS_COMPILER_MEMORY_BARRIER();
_Thread_Dispatch_disable_level -= 1;
48372: 588f addql #4,%sp <== NOT EXECUTED
48374: 2039 0006 076c movel 6076c <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
4837a: 5380 subql #1,%d0 <== NOT EXECUTED
4837c: 23c0 0006 076c movel %d0,6076c <_Thread_Dispatch_disable_level><== NOT EXECUTED
_Thread_Unnest_dispatch();
break;
}
}
48382: 4e5e unlk %fp <== NOT EXECUTED
...
0004ba10 <_CORE_barrier_Release>:
#else
Objects_Id id __attribute__((unused)),
CORE_barrier_API_mp_support_callout api_barrier_mp_support __attribute__((unused))
#endif
)
{
4ba10: 4e56 fff4 linkw %fp,#-12 <== NOT EXECUTED
4ba14: 48d7 0c04 moveml %d2/%a2-%a3,%sp@ <== NOT EXECUTED
4ba18: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
Thread_Control *the_thread;
uint32_t count;
count = 0;
4ba1c: 4282 clrl %d2 <== NOT EXECUTED
while ( (the_thread = _Thread_queue_Dequeue(&the_barrier->Wait_queue)) ) {
4ba1e: 47f9 0004 8ab8 lea 48ab8 <_Thread_queue_Dequeue>,%a3 <== NOT EXECUTED
4ba24: 6002 bras 4ba28 <_CORE_barrier_Release+0x18> <== NOT EXECUTED
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
(*api_barrier_mp_support) ( the_thread, id );
#endif
count++;
4ba26: 5282 addql #1,%d2 <== NOT EXECUTED
{
Thread_Control *the_thread;
uint32_t count;
count = 0;
while ( (the_thread = _Thread_queue_Dequeue(&the_barrier->Wait_queue)) ) {
4ba28: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4ba2a: 4e93 jsr %a3@ <== NOT EXECUTED
4ba2c: 588f addql #4,%sp <== NOT EXECUTED
4ba2e: 4a80 tstl %d0 <== NOT EXECUTED
4ba30: 66f4 bnes 4ba26 <_CORE_barrier_Release+0x16> <== NOT EXECUTED
#endif
count++;
}
the_barrier->number_of_waiting_threads = 0;
return count;
}
4ba32: 2002 movel %d2,%d0 <== NOT EXECUTED
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
(*api_barrier_mp_support) ( the_thread, id );
#endif
count++;
}
the_barrier->number_of_waiting_threads = 0;
4ba34: 42aa 0048 clrl %a2@(72) <== NOT EXECUTED
return count;
}
4ba38: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3 <== NOT EXECUTED
4ba3e: 4e5e unlk %fp <== NOT EXECUTED
...
0004701c <_CORE_barrier_Wait>:
Thread_Control *executing;
ISR_Level level;
executing = _Thread_Executing;
executing->Wait.return_code = CORE_BARRIER_STATUS_SUCCESSFUL;
_ISR_Disable( level );
4701c: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
Objects_Id id,
bool wait,
Watchdog_Interval timeout,
CORE_barrier_API_mp_support_callout api_barrier_mp_support
)
{
47022: 4e56 fff4 linkw %fp,#-12 <== NOT EXECUTED
Thread_Control *executing;
ISR_Level level;
executing = _Thread_Executing;
47026: 2279 0005 f58a moveal 5f58a <_Per_CPU_Information+0xc>,%a1 <== NOT EXECUTED
Objects_Id id,
bool wait,
Watchdog_Interval timeout,
CORE_barrier_API_mp_support_callout api_barrier_mp_support
)
{
4702c: 48d7 001c moveml %d2-%d4,%sp@ <== NOT EXECUTED
47030: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
Thread_Control *executing;
ISR_Level level;
executing = _Thread_Executing;
executing->Wait.return_code = CORE_BARRIER_STATUS_SUCCESSFUL;
47034: 42a9 0034 clrl %a1@(52) <== NOT EXECUTED
Objects_Id id,
bool wait,
Watchdog_Interval timeout,
CORE_barrier_API_mp_support_callout api_barrier_mp_support
)
{
47038: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
4703c: 262e 0014 movel %fp@(20),%d3 <== NOT EXECUTED
47040: 282e 0018 movel %fp@(24),%d4 <== NOT EXECUTED
Thread_Control *executing;
ISR_Level level;
executing = _Thread_Executing;
executing->Wait.return_code = CORE_BARRIER_STATUS_SUCCESSFUL;
_ISR_Disable( level );
47044: 40c1 movew %sr,%d1 <== NOT EXECUTED
47046: 8081 orl %d1,%d0 <== NOT EXECUTED
47048: 46c0 movew %d0,%sr <== NOT EXECUTED
the_barrier->number_of_waiting_threads++;
4704a: 2028 0048 movel %a0@(72),%d0 <== NOT EXECUTED
4704e: 5280 addql #1,%d0 <== NOT EXECUTED
47050: 2140 0048 movel %d0,%a0@(72) <== NOT EXECUTED
if ( _CORE_barrier_Is_automatic( &the_barrier->Attributes ) ) {
47054: 4aa8 0040 tstl %a0@(64) <== NOT EXECUTED
47058: 6626 bnes 47080 <_CORE_barrier_Wait+0x64> <== NOT EXECUTED
if ( the_barrier->number_of_waiting_threads ==
4705a: b0a8 0044 cmpl %a0@(68),%d0 <== NOT EXECUTED
4705e: 6620 bnes 47080 <_CORE_barrier_Wait+0x64> <== NOT EXECUTED
the_barrier->Attributes.maximum_count) {
executing->Wait.return_code = CORE_BARRIER_STATUS_AUTOMATICALLY_RELEASED;
47060: 7001 moveq #1,%d0 <== NOT EXECUTED
47062: 2340 0034 movel %d0,%a1@(52) <== NOT EXECUTED
_ISR_Enable( level );
47066: 46c1 movew %d1,%sr <== NOT EXECUTED
_CORE_barrier_Release( the_barrier, id, api_barrier_mp_support );
47068: 2d44 0010 movel %d4,%fp@(16) <== NOT EXECUTED
4706c: 2d42 000c movel %d2,%fp@(12) <== NOT EXECUTED
executing->Wait.queue = &the_barrier->Wait_queue;
executing->Wait.id = id;
_ISR_Enable( level );
_Thread_queue_Enqueue( &the_barrier->Wait_queue, timeout );
}
47070: 4cd7 001c moveml %sp@,%d2-%d4 <== NOT EXECUTED
if ( _CORE_barrier_Is_automatic( &the_barrier->Attributes ) ) {
if ( the_barrier->number_of_waiting_threads ==
the_barrier->Attributes.maximum_count) {
executing->Wait.return_code = CORE_BARRIER_STATUS_AUTOMATICALLY_RELEASED;
_ISR_Enable( level );
_CORE_barrier_Release( the_barrier, id, api_barrier_mp_support );
47074: 2d48 0008 movel %a0,%fp@(8) <== NOT EXECUTED
executing->Wait.queue = &the_barrier->Wait_queue;
executing->Wait.id = id;
_ISR_Enable( level );
_Thread_queue_Enqueue( &the_barrier->Wait_queue, timeout );
}
47078: 4e5e unlk %fp <== NOT EXECUTED
if ( _CORE_barrier_Is_automatic( &the_barrier->Attributes ) ) {
if ( the_barrier->number_of_waiting_threads ==
the_barrier->Attributes.maximum_count) {
executing->Wait.return_code = CORE_BARRIER_STATUS_AUTOMATICALLY_RELEASED;
_ISR_Enable( level );
_CORE_barrier_Release( the_barrier, id, api_barrier_mp_support );
4707a: 4ef9 0004 ba10 jmp 4ba10 <_CORE_barrier_Release> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Thread_queue_Enter_critical_section (
Thread_queue_Control *the_thread_queue
)
{
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
47080: 7001 moveq #1,%d0 <== NOT EXECUTED
47082: 2140 0030 movel %d0,%a0@(48) <== NOT EXECUTED
return;
}
}
_Thread_queue_Enter_critical_section( &the_barrier->Wait_queue );
executing->Wait.queue = &the_barrier->Wait_queue;
47086: 2348 0044 movel %a0,%a1@(68) <== NOT EXECUTED
executing->Wait.id = id;
4708a: 2342 0020 movel %d2,%a1@(32) <== NOT EXECUTED
_ISR_Enable( level );
4708e: 46c1 movew %d1,%sr <== NOT EXECUTED
_Thread_queue_Enqueue( &the_barrier->Wait_queue, timeout );
47090: 2d43 000c movel %d3,%fp@(12) <== NOT EXECUTED
47094: 203c 0004 8f0c movel #298764,%d0 <== NOT EXECUTED
4709a: 2d48 0008 movel %a0,%fp@(8) <== NOT EXECUTED
}
4709e: 4cd7 001c moveml %sp@,%d2-%d4 <== NOT EXECUTED
_Thread_queue_Enter_critical_section( &the_barrier->Wait_queue );
executing->Wait.queue = &the_barrier->Wait_queue;
executing->Wait.id = id;
_ISR_Enable( level );
_Thread_queue_Enqueue( &the_barrier->Wait_queue, timeout );
470a2: 2d40 0010 movel %d0,%fp@(16) <== NOT EXECUTED
}
470a6: 4e5e unlk %fp <== NOT EXECUTED
_Thread_queue_Enter_critical_section( &the_barrier->Wait_queue );
executing->Wait.queue = &the_barrier->Wait_queue;
executing->Wait.id = id;
_ISR_Enable( level );
_Thread_queue_Enqueue( &the_barrier->Wait_queue, timeout );
470a8: 4ef9 0004 8bf8 jmp 48bf8 <_Thread_queue_Enqueue_with_handler><== NOT EXECUTED
...
00052b20 <_CORE_message_queue_Broadcast>:
Objects_Id id __attribute__((unused)),
CORE_message_queue_API_mp_support_callout api_message_queue_mp_support __attribute__((unused)),
#endif
uint32_t *count
)
{
52b20: 4e56 ffe0 linkw %fp,#-32 <== NOT EXECUTED
52b24: 48d7 3c3c moveml %d2-%d5/%a2-%a5,%sp@ <== NOT EXECUTED
52b28: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
52b2c: 2a2e 000c movel %fp@(12),%d5 <== NOT EXECUTED
52b30: 262e 0010 movel %fp@(16),%d3 <== NOT EXECUTED
52b34: 286e 001c moveal %fp@(28),%a4 <== NOT EXECUTED
Thread_Control *the_thread;
uint32_t number_broadcasted;
Thread_Wait_information *waitp;
if ( size > the_message_queue->maximum_message_size ) {
52b38: b6aa 004c cmpl %a2@(76),%d3 <== NOT EXECUTED
52b3c: 6244 bhis 52b82 <_CORE_message_queue_Broadcast+0x62><== NOT EXECUTED
* 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 ) {
52b3e: 4aaa 0048 tstl %a2@(72) <== NOT EXECUTED
52b42: 6610 bnes 52b54 <_CORE_message_queue_Broadcast+0x34><== NOT EXECUTED
52b44: 4282 clrl %d2 <== NOT EXECUTED
/*
* There must be no pending messages if there is a thread waiting to
* receive a message.
*/
number_broadcasted = 0;
while ((the_thread =
52b46: 283c 0005 51ec movel #348652,%d4 <== NOT EXECUTED
const void *source,
void *destination,
size_t size
)
{
memcpy(destination, source, size);
52b4c: 4bf9 0005 a7f0 lea 5a7f0 <memcpy>,%a5 <== NOT EXECUTED
52b52: 601a bras 52b6e <_CORE_message_queue_Broadcast+0x4e><== NOT EXECUTED
* send and receive and this ensures that we are broadcasting
* the message to threads waiting to receive -- not to send.
*/
if ( the_message_queue->number_of_pending_messages != 0 ) {
*count = 0;
52b54: 4294 clrl %a4@ <== NOT EXECUTED
52b56: 6026 bras 52b7e <_CORE_message_queue_Broadcast+0x5e><== NOT EXECUTED
52b58: 2f03 movel %d3,%sp@- <== NOT EXECUTED
*/
number_broadcasted = 0;
while ((the_thread =
_Thread_queue_Dequeue(&the_message_queue->Wait_queue))) {
waitp = &the_thread->Wait;
number_broadcasted += 1;
52b5a: 5282 addql #1,%d2 <== NOT EXECUTED
52b5c: 2f05 movel %d5,%sp@- <== NOT EXECUTED
52b5e: 2f2b 002c movel %a3@(44),%sp@- <== NOT EXECUTED
52b62: 4e95 jsr %a5@ <== NOT EXECUTED
buffer,
waitp->return_argument_second.mutable_object,
size
);
*(size_t *) the_thread->Wait.return_argument = size;
52b64: 206b 0028 moveal %a3@(40),%a0 <== NOT EXECUTED
52b68: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
52b6c: 2083 movel %d3,%a0@ <== NOT EXECUTED
/*
* There must be no pending messages if there is a thread waiting to
* receive a message.
*/
number_broadcasted = 0;
while ((the_thread =
52b6e: 2f0a movel %a2,%sp@- <== NOT EXECUTED
52b70: 2044 moveal %d4,%a0 <== NOT EXECUTED
52b72: 4e90 jsr %a0@ <== NOT EXECUTED
52b74: 588f addql #4,%sp <== NOT EXECUTED
52b76: 2640 moveal %d0,%a3 <== NOT EXECUTED
52b78: 4a80 tstl %d0 <== NOT EXECUTED
52b7a: 66dc bnes 52b58 <_CORE_message_queue_Broadcast+0x38><== NOT EXECUTED
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
(*api_message_queue_mp_support) ( the_thread, id );
#endif
}
*count = number_broadcasted;
52b7c: 2882 movel %d2,%a4@ <== NOT EXECUTED
return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;
52b7e: 4280 clrl %d0 <== NOT EXECUTED
52b80: 6002 bras 52b84 <_CORE_message_queue_Broadcast+0x64><== NOT EXECUTED
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;
52b82: 7001 moveq #1,%d0 <== NOT EXECUTED
#endif
}
*count = number_broadcasted;
return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;
}
52b84: 4cee 3c3c ffe0 moveml %fp@(-32),%d2-%d5/%a2-%a5 <== NOT EXECUTED
52b8a: 4e5e unlk %fp <== NOT EXECUTED
...
0004baac <_CORE_message_queue_Close>:
void _CORE_message_queue_Close(
CORE_message_queue_Control *the_message_queue,
Thread_queue_Flush_callout remote_extract_callout,
uint32_t status
)
{
4baac: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4bab0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
/*
* This will flush blocked threads whether they were blocked on
* a send or receive.
*/
_Thread_queue_Flush(
4bab2: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
4bab6: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
void _CORE_message_queue_Close(
CORE_message_queue_Control *the_message_queue,
Thread_queue_Flush_callout remote_extract_callout,
uint32_t status
)
{
4baba: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
/*
* This will flush blocked threads whether they were blocked on
* a send or receive.
*/
_Thread_queue_Flush(
4babe: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4bac0: 4eb9 0004 db88 jsr 4db88 <_Thread_queue_Flush> <== NOT EXECUTED
* This removes all messages from the pending message queue. Since
* we just flushed all waiting threads, we don't have to worry about
* the flush satisfying any blocked senders as a side-effect.
*/
if ( the_message_queue->number_of_pending_messages != 0 )
4bac6: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4baca: 4aaa 0048 tstl %a2@(72) <== NOT EXECUTED
4bace: 670a beqs 4bada <_CORE_message_queue_Close+0x2e> <== NOT EXECUTED
(void) _CORE_message_queue_Flush_support( the_message_queue );
4bad0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4bad2: 4eb9 0004 baec jsr 4baec <_CORE_message_queue_Flush_support><== NOT EXECUTED
4bad8: 588f addql #4,%sp <== NOT EXECUTED
(void) _Workspace_Free( the_message_queue->message_buffers );
4bada: 2d6a 005c 0008 movel %a2@(92),%fp@(8) <== NOT EXECUTED
}
4bae0: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
4bae4: 4e5e unlk %fp <== NOT EXECUTED
*/
if ( the_message_queue->number_of_pending_messages != 0 )
(void) _CORE_message_queue_Flush_support( the_message_queue );
(void) _Workspace_Free( the_message_queue->message_buffers );
4bae6: 4ef9 0004 e60c jmp 4e60c <_Workspace_Free> <== NOT EXECUTED
00052bd0 <_CORE_message_queue_Flush>:
*/
uint32_t _CORE_message_queue_Flush(
CORE_message_queue_Control *the_message_queue
)
{
52bd0: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
52bd4: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
if ( the_message_queue->number_of_pending_messages != 0 )
52bd8: 4aa8 0048 tstl %a0@(72) <== NOT EXECUTED
52bdc: 6708 beqs 52be6 <_CORE_message_queue_Flush+0x16> <== NOT EXECUTED
return _CORE_message_queue_Flush_support( the_message_queue );
else
return 0;
}
52bde: 4e5e unlk %fp <== NOT EXECUTED
uint32_t _CORE_message_queue_Flush(
CORE_message_queue_Control *the_message_queue
)
{
if ( the_message_queue->number_of_pending_messages != 0 )
return _CORE_message_queue_Flush_support( the_message_queue );
52be0: 4ef9 0005 2bec jmp 52bec <_CORE_message_queue_Flush_support><== NOT EXECUTED
else
return 0;
}
52be6: 4280 clrl %d0 <== NOT EXECUTED
52be8: 4e5e unlk %fp <== NOT EXECUTED
0004baec <_CORE_message_queue_Flush_support>:
*
* For now, though, we are very happy to have a small routine with
* fixed execution time that only deals with pending messages.
*/
_ISR_Disable( level );
4baec: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
*/
uint32_t _CORE_message_queue_Flush_support(
CORE_message_queue_Control *the_message_queue
)
{
4baf2: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4baf6: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4bafa: 2f0b movel %a3,%sp@- <== NOT EXECUTED
4bafc: 2f0a movel %a2,%sp@- <== NOT EXECUTED
*
* For now, though, we are very happy to have a small routine with
* fixed execution time that only deals with pending messages.
*/
_ISR_Disable( level );
4bafe: 40c1 movew %sr,%d1 <== NOT EXECUTED
4bb00: 8081 orl %d1,%d0 <== NOT EXECUTED
4bb02: 46c0 movew %d0,%sr <== NOT EXECUTED
count = the_message_queue->number_of_pending_messages;
the_message_queue->number_of_pending_messages = 0;
_ISR_Enable( level );
return count;
}
4bb04: 2268 0050 moveal %a0@(80),%a1 <== NOT EXECUTED
* fixed execution time that only deals with pending messages.
*/
_ISR_Disable( level );
inactive_head = _Chain_Head( &the_message_queue->Inactive_messages );
inactive_first = inactive_head->next;;
4bb08: 2468 0068 moveal %a0@(104),%a2 <== NOT EXECUTED
count = the_message_queue->number_of_pending_messages;
the_message_queue->number_of_pending_messages = 0;
_ISR_Enable( level );
return count;
}
4bb0c: 2668 0058 moveal %a0@(88),%a3 <== NOT EXECUTED
inactive_head = _Chain_Head( &the_message_queue->Inactive_messages );
inactive_first = inactive_head->next;;
message_queue_first = _Chain_First( &the_message_queue->Pending_messages );
message_queue_last = _Chain_Last( &the_message_queue->Pending_messages );
inactive_head->next = message_queue_first;
4bb10: 2149 0068 movel %a1,%a0@(104) <== NOT EXECUTED
inactive_first->previous = message_queue_last;
message_queue_first->previous = inactive_head;
_Chain_Initialize_empty( &the_message_queue->Pending_messages );
count = the_message_queue->number_of_pending_messages;
4bb14: 2028 0048 movel %a0@(72),%d0 <== NOT EXECUTED
message_queue_first = _Chain_First( &the_message_queue->Pending_messages );
message_queue_last = _Chain_Last( &the_message_queue->Pending_messages );
inactive_head->next = message_queue_first;
message_queue_last->next = inactive_first;
inactive_first->previous = message_queue_last;
4bb18: 254b 0004 movel %a3,%a2@(4) <== NOT EXECUTED
inactive_first = inactive_head->next;;
message_queue_first = _Chain_First( &the_message_queue->Pending_messages );
message_queue_last = _Chain_Last( &the_message_queue->Pending_messages );
inactive_head->next = message_queue_first;
message_queue_last->next = inactive_first;
4bb1c: 268a movel %a2,%a3@ <== NOT EXECUTED
* For now, though, we are very happy to have a small routine with
* fixed execution time that only deals with pending messages.
*/
_ISR_Disable( level );
inactive_head = _Chain_Head( &the_message_queue->Inactive_messages );
4bb1e: 45e8 0068 lea %a0@(104),%a2 <== NOT EXECUTED
4bb22: 234a 0004 movel %a2,%a1@(4) <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
4bb26: 43e8 0054 lea %a0@(84),%a1 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
4bb2a: 45e8 0050 lea %a0@(80),%a2 <== NOT EXECUTED
Chain_Node *tail = _Chain_Tail( the_chain );
4bb2e: 2149 0050 movel %a1,%a0@(80) <== NOT EXECUTED
head->next = tail;
head->previous = NULL;
4bb32: 42a8 0054 clrl %a0@(84) <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
4bb36: 214a 0058 movel %a2,%a0@(88) <== NOT EXECUTED
message_queue_first->previous = inactive_head;
_Chain_Initialize_empty( &the_message_queue->Pending_messages );
count = the_message_queue->number_of_pending_messages;
the_message_queue->number_of_pending_messages = 0;
4bb3a: 42a8 0048 clrl %a0@(72) <== NOT EXECUTED
_ISR_Enable( level );
4bb3e: 46c1 movew %d1,%sr <== NOT EXECUTED
return count;
}
4bb40: 245f moveal %sp@+,%a2 <== NOT EXECUTED
4bb42: 265f moveal %sp@+,%a3 <== NOT EXECUTED
4bb44: 4e5e unlk %fp <== NOT EXECUTED
0004de34 <_CORE_message_queue_Initialize>:
/*
* Round size up to multiple of a pointer for chain init and
* check for overflow on adding overhead to each message.
*/
allocated_message_size = maximum_message_size;
if (allocated_message_size & (sizeof(uint32_t) - 1)) {
4de34: 7003 moveq #3,%d0 <== NOT EXECUTED
CORE_message_queue_Control *the_message_queue,
CORE_message_queue_Attributes *the_message_queue_attributes,
uint32_t maximum_pending_messages,
size_t maximum_message_size
)
{
4de36: 4e56 fff4 linkw %fp,#-12 <== NOT EXECUTED
4de3a: 222e 0014 movel %fp@(20),%d1 <== NOT EXECUTED
4de3e: 48d7 040c moveml %d2-%d3/%a2,%sp@ <== NOT EXECUTED
4de42: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
4de46: 242e 0010 movel %fp@(16),%d2 <== NOT EXECUTED
/*
* Round size up to multiple of a pointer for chain init and
* check for overflow on adding overhead to each message.
*/
allocated_message_size = maximum_message_size;
if (allocated_message_size & (sizeof(uint32_t) - 1)) {
4de4a: c081 andl %d1,%d0 <== NOT EXECUTED
)
{
size_t message_buffering_required;
size_t allocated_message_size;
the_message_queue->maximum_pending_messages = maximum_pending_messages;
4de4c: 2542 0044 movel %d2,%a2@(68) <== NOT EXECUTED
the_message_queue->number_of_pending_messages = 0;
4de50: 42aa 0048 clrl %a2@(72) <== NOT EXECUTED
the_message_queue->maximum_message_size = maximum_message_size;
4de54: 2541 004c movel %d1,%a2@(76) <== NOT EXECUTED
CORE_message_queue_Control *the_message_queue,
CORE_message_queue_Notify_Handler the_handler,
void *the_argument
)
{
the_message_queue->notify_handler = the_handler;
4de58: 42aa 0060 clrl %a2@(96) <== NOT EXECUTED
the_message_queue->notify_argument = the_argument;
4de5c: 42aa 0064 clrl %a2@(100) <== NOT EXECUTED
/*
* Round size up to multiple of a pointer for chain init and
* check for overflow on adding overhead to each message.
*/
allocated_message_size = maximum_message_size;
if (allocated_message_size & (sizeof(uint32_t) - 1)) {
4de60: 4a80 tstl %d0 <== NOT EXECUTED
4de62: 670e beqs 4de72 <_CORE_message_queue_Initialize+0x3e><== NOT EXECUTED
allocated_message_size += sizeof(uint32_t);
4de64: 2001 movel %d1,%d0 <== NOT EXECUTED
4de66: 5880 addql #4,%d0 <== NOT EXECUTED
allocated_message_size &= ~(sizeof(uint32_t) - 1);
4de68: 76fc moveq #-4,%d3 <== NOT EXECUTED
4de6a: c083 andl %d3,%d0 <== NOT EXECUTED
}
if (allocated_message_size < maximum_message_size)
4de6c: b280 cmpl %d0,%d1 <== NOT EXECUTED
4de6e: 6272 bhis 4dee2 <_CORE_message_queue_Initialize+0xae><== NOT EXECUTED
4de70: 6002 bras 4de74 <_CORE_message_queue_Initialize+0x40><== NOT EXECUTED
/*
* Round size up to multiple of a pointer for chain init and
* check for overflow on adding overhead to each message.
*/
allocated_message_size = maximum_message_size;
if (allocated_message_size & (sizeof(uint32_t) - 1)) {
4de72: 2001 movel %d1,%d0 <== NOT EXECUTED
/*
* Calculate how much total memory is required for message buffering and
* check for overflow on the multiplication.
*/
message_buffering_required = (size_t) maximum_pending_messages *
(allocated_message_size + sizeof(CORE_message_queue_Buffer_control));
4de74: 2600 movel %d0,%d3 <== NOT EXECUTED
4de76: 0683 0000 0014 addil #20,%d3 <== NOT EXECUTED
/*
* Calculate how much total memory is required for message buffering and
* check for overflow on the multiplication.
*/
message_buffering_required = (size_t) maximum_pending_messages *
4de7c: 2203 movel %d3,%d1 <== NOT EXECUTED
4de7e: 4c02 1800 mulsl %d2,%d1 <== NOT EXECUTED
(allocated_message_size + sizeof(CORE_message_queue_Buffer_control));
if (message_buffering_required < allocated_message_size)
4de82: b081 cmpl %d1,%d0 <== NOT EXECUTED
4de84: 625c bhis 4dee2 <_CORE_message_queue_Initialize+0xae><== NOT EXECUTED
/*
* Attempt to allocate the message memory
*/
the_message_queue->message_buffers = (CORE_message_queue_Buffer *)
_Workspace_Allocate( message_buffering_required );
4de86: 2f01 movel %d1,%sp@- <== NOT EXECUTED
4de88: 4eb9 0005 0900 jsr 50900 <_Workspace_Allocate> <== NOT EXECUTED
if (the_message_queue->message_buffers == 0)
4de8e: 588f addql #4,%sp <== NOT EXECUTED
return false;
/*
* Attempt to allocate the message memory
*/
the_message_queue->message_buffers = (CORE_message_queue_Buffer *)
4de90: 2540 005c movel %d0,%a2@(92) <== NOT EXECUTED
_Workspace_Allocate( message_buffering_required );
if (the_message_queue->message_buffers == 0)
4de94: 674c beqs 4dee2 <_CORE_message_queue_Initialize+0xae><== NOT EXECUTED
/*
* Initialize the pool of inactive messages, pending messages,
* and set of waiting threads.
*/
_Chain_Initialize (
4de96: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4de98: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4de9a: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4de9c: 486a 0068 pea %a2@(104) <== NOT EXECUTED
4dea0: 4eb9 0005 2b44 jsr 52b44 <_Chain_Initialize> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
4dea6: 41ea 0054 lea %a2@(84),%a0 <== NOT EXECUTED
allocated_message_size + sizeof( CORE_message_queue_Buffer_control )
);
_Chain_Initialize_empty( &the_message_queue->Pending_messages );
_Thread_queue_Initialize(
4deaa: 7001 moveq #1,%d0 <== NOT EXECUTED
4deac: 2548 0050 movel %a0,%a2@(80) <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
4deb0: 41ea 0050 lea %a2@(80),%a0 <== NOT EXECUTED
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
head->previous = NULL;
4deb4: 42aa 0054 clrl %a2@(84) <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
4deb8: 2548 0058 movel %a0,%a2@(88) <== NOT EXECUTED
4debc: 4878 0006 pea 6 <EXTENDSFDF> <== NOT EXECUTED
4dec0: 206e 000c moveal %fp@(12),%a0 <== NOT EXECUTED
4dec4: 4878 0080 pea 80 <DBL_MANT_DIG+0x4b> <== NOT EXECUTED
4dec8: b090 cmpl %a0@,%d0 <== NOT EXECUTED
4deca: 57c0 seq %d0 <== NOT EXECUTED
4decc: 49c0 extbl %d0 <== NOT EXECUTED
4dece: 4480 negl %d0 <== NOT EXECUTED
4ded0: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4ded2: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4ded4: 4eb9 0004 ffb8 jsr 4ffb8 <_Thread_queue_Initialize> <== NOT EXECUTED
THREAD_QUEUE_DISCIPLINE_PRIORITY : THREAD_QUEUE_DISCIPLINE_FIFO,
STATES_WAITING_FOR_MESSAGE,
CORE_MESSAGE_QUEUE_STATUS_TIMEOUT
);
return true;
4deda: 4fef 0020 lea %sp@(32),%sp <== NOT EXECUTED
4dede: 7001 moveq #1,%d0 <== NOT EXECUTED
4dee0: 6002 bras 4dee4 <_CORE_message_queue_Initialize+0xb0><== NOT EXECUTED
*/
the_message_queue->message_buffers = (CORE_message_queue_Buffer *)
_Workspace_Allocate( message_buffering_required );
if (the_message_queue->message_buffers == 0)
return false;
4dee2: 4200 clrb %d0 <== NOT EXECUTED
STATES_WAITING_FOR_MESSAGE,
CORE_MESSAGE_QUEUE_STATUS_TIMEOUT
);
return true;
}
4dee4: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2 <== NOT EXECUTED
4deea: 4e5e unlk %fp <== NOT EXECUTED
...
00052b88 <_CORE_message_queue_Insert_message>:
void _CORE_message_queue_Insert_message(
CORE_message_queue_Control *the_message_queue,
CORE_message_queue_Buffer_control *the_message,
CORE_message_queue_Submit_types submit_type
)
{
52b88: 4e56 fff4 linkw %fp,#-12 <== NOT EXECUTED
52b8c: 226e 000c moveal %fp@(12),%a1 <== NOT EXECUTED
52b90: 202e 0010 movel %fp@(16),%d0 <== NOT EXECUTED
52b94: 48d7 0c04 moveml %d2/%a2-%a3,%sp@ <== NOT EXECUTED
52b98: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
52b9c: 2340 0008 movel %d0,%a1@(8) <== NOT EXECUTED
_CORE_message_queue_Append_unprotected(the_message_queue, the_message);
else
_CORE_message_queue_Prepend_unprotected(the_message_queue, the_message);
_ISR_Enable( level );
#else
if ( submit_type == CORE_MESSAGE_QUEUE_SEND_REQUEST ) {
52ba0: 0c80 7fff ffff cmpil #2147483647,%d0 <== NOT EXECUTED
52ba6: 6634 bnes 52bdc <_CORE_message_queue_Insert_message+0x54><== NOT EXECUTED
_ISR_Disable( level );
52ba8: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
52bae: 40c2 movew %sr,%d2 <== NOT EXECUTED
52bb0: 8082 orl %d2,%d0 <== NOT EXECUTED
52bb2: 46c0 movew %d0,%sr <== NOT EXECUTED
SET_NOTIFY();
52bb4: 2228 0048 movel %a0@(72),%d1 <== NOT EXECUTED
*
* INTERRUPT LATENCY:
* insert
*/
void _CORE_message_queue_Insert_message(
52bb8: 57c0 seq %d0 <== NOT EXECUTED
_ISR_Enable( level );
#else
if ( submit_type == CORE_MESSAGE_QUEUE_SEND_REQUEST ) {
_ISR_Disable( level );
SET_NOTIFY();
the_message_queue->number_of_pending_messages++;
52bba: 5281 addql #1,%d1 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Append_unprotected(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
52bbc: 47e8 0054 lea %a0@(84),%a3 <== NOT EXECUTED
*
* INTERRUPT LATENCY:
* insert
*/
void _CORE_message_queue_Insert_message(
52bc0: 4480 negl %d0 <== NOT EXECUTED
_ISR_Enable( level );
#else
if ( submit_type == CORE_MESSAGE_QUEUE_SEND_REQUEST ) {
_ISR_Disable( level );
SET_NOTIFY();
the_message_queue->number_of_pending_messages++;
52bc2: 2141 0048 movel %d1,%a0@(72) <== NOT EXECUTED
Chain_Node *old_last = tail->previous;
52bc6: 2468 0058 moveal %a0@(88),%a2 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Append_unprotected(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
52bca: 228b movel %a3,%a1@ <== NOT EXECUTED
Chain_Node *old_last = tail->previous;
the_node->next = tail;
tail->previous = the_node;
52bcc: 2149 0058 movel %a1,%a0@(88) <== NOT EXECUTED
old_last->next = the_node;
52bd0: 2489 movel %a1,%a2@ <== NOT EXECUTED
the_node->previous = old_last;
52bd2: 234a 0004 movel %a2,%a1@(4) <== NOT EXECUTED
_CORE_message_queue_Append_unprotected(the_message_queue, the_message);
_ISR_Enable( level );
52bd6: 46c2 movew %d2,%sr <== NOT EXECUTED
52bd8: 6000 0086 braw 52c60 <_CORE_message_queue_Insert_message+0xd8><== NOT EXECUTED
} else if ( submit_type == CORE_MESSAGE_QUEUE_URGENT_REQUEST ) {
52bdc: 0c80 8000 0000 cmpil #-2147483648,%d0 <== NOT EXECUTED
52be2: 6634 bnes 52c18 <_CORE_message_queue_Insert_message+0x90><== NOT EXECUTED
_ISR_Disable( level );
52be4: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
52bea: 40c2 movew %sr,%d2 <== NOT EXECUTED
52bec: 8082 orl %d2,%d0 <== NOT EXECUTED
52bee: 46c0 movew %d0,%sr <== NOT EXECUTED
SET_NOTIFY();
52bf0: 2228 0048 movel %a0@(72),%d1 <== NOT EXECUTED
*
* INTERRUPT LATENCY:
* insert
*/
void _CORE_message_queue_Insert_message(
52bf4: 57c0 seq %d0 <== NOT EXECUTED
_CORE_message_queue_Append_unprotected(the_message_queue, the_message);
_ISR_Enable( level );
} else if ( submit_type == CORE_MESSAGE_QUEUE_URGENT_REQUEST ) {
_ISR_Disable( level );
SET_NOTIFY();
the_message_queue->number_of_pending_messages++;
52bf6: 5281 addql #1,%d1 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Prepend_unprotected(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
_Chain_Insert_unprotected(_Chain_Head(the_chain), the_node);
52bf8: 45e8 0050 lea %a0@(80),%a2 <== NOT EXECUTED
*
* INTERRUPT LATENCY:
* insert
*/
void _CORE_message_queue_Insert_message(
52bfc: 4480 negl %d0 <== NOT EXECUTED
_CORE_message_queue_Append_unprotected(the_message_queue, the_message);
_ISR_Enable( level );
} else if ( submit_type == CORE_MESSAGE_QUEUE_URGENT_REQUEST ) {
_ISR_Disable( level );
SET_NOTIFY();
the_message_queue->number_of_pending_messages++;
52bfe: 2141 0048 movel %d1,%a0@(72) <== NOT EXECUTED
52c02: 234a 0004 movel %a2,%a1@(4) <== NOT EXECUTED
)
{
Chain_Node *before_node;
the_node->previous = after_node;
before_node = after_node->next;
52c06: 2468 0050 moveal %a0@(80),%a2 <== NOT EXECUTED
after_node->next = the_node;
52c0a: 2149 0050 movel %a1,%a0@(80) <== NOT EXECUTED
the_node->next = before_node;
before_node->previous = the_node;
52c0e: 2549 0004 movel %a1,%a2@(4) <== NOT EXECUTED
Chain_Node *before_node;
the_node->previous = after_node;
before_node = after_node->next;
after_node->next = the_node;
the_node->next = before_node;
52c12: 228a movel %a2,%a1@ <== NOT EXECUTED
_CORE_message_queue_Prepend_unprotected(the_message_queue, the_message);
_ISR_Enable( level );
52c14: 46c2 movew %d2,%sr <== NOT EXECUTED
52c16: 6048 bras 52c60 <_CORE_message_queue_Insert_message+0xd8><== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _Chain_Is_tail(
Chain_Control *the_chain,
const Chain_Node *the_node
)
{
return (the_node == _Chain_Tail(the_chain));
52c18: 2208 movel %a0,%d1 <== NOT EXECUTED
52c1a: 0681 0000 0054 addil #84,%d1 <== NOT EXECUTED
* the message is actually in the queue at this point.
*/
if ( notify && the_message_queue->notify_handler )
(*the_message_queue->notify_handler)(the_message_queue->notify_argument);
#endif
}
52c20: 2468 0050 moveal %a0@(80),%a2 <== NOT EXECUTED
int the_priority;
the_priority = _CORE_message_queue_Get_message_priority(the_message);
the_header = &the_message_queue->Pending_messages;
the_node = _Chain_First( the_header );
while ( !_Chain_Is_tail( the_header, the_node ) ) {
52c24: 6008 bras 52c2e <_CORE_message_queue_Insert_message+0xa6><== NOT EXECUTED
this_message = (CORE_message_queue_Buffer_control *) the_node;
this_priority = _CORE_message_queue_Get_message_priority(this_message);
if ( this_priority <= the_priority ) {
52c26: b0aa 0008 cmpl %a2@(8),%d0 <== NOT EXECUTED
52c2a: 6d06 blts 52c32 <_CORE_message_queue_Insert_message+0xaa><== NOT EXECUTED
the_node = the_node->next;
52c2c: 2452 moveal %a2@,%a2 <== NOT EXECUTED
int the_priority;
the_priority = _CORE_message_queue_Get_message_priority(the_message);
the_header = &the_message_queue->Pending_messages;
the_node = _Chain_First( the_header );
while ( !_Chain_Is_tail( the_header, the_node ) ) {
52c2e: b28a cmpl %a2,%d1 <== NOT EXECUTED
52c30: 66f4 bnes 52c26 <_CORE_message_queue_Insert_message+0x9e><== NOT EXECUTED
the_node = the_node->next;
continue;
}
break;
}
_ISR_Disable( level );
52c32: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
52c38: 40c2 movew %sr,%d2 <== NOT EXECUTED
52c3a: 8082 orl %d2,%d0 <== NOT EXECUTED
52c3c: 46c0 movew %d0,%sr <== NOT EXECUTED
SET_NOTIFY();
52c3e: 2228 0048 movel %a0@(72),%d1 <== NOT EXECUTED
*
* INTERRUPT LATENCY:
* insert
*/
void _CORE_message_queue_Insert_message(
52c42: 57c0 seq %d0 <== NOT EXECUTED
break;
}
_ISR_Disable( level );
SET_NOTIFY();
the_message_queue->number_of_pending_messages++;
_Chain_Insert_unprotected( the_node->previous, &the_message->Node );
52c44: 246a 0004 moveal %a2@(4),%a2 <== NOT EXECUTED
}
break;
}
_ISR_Disable( level );
SET_NOTIFY();
the_message_queue->number_of_pending_messages++;
52c48: 5281 addql #1,%d1 <== NOT EXECUTED
*
* INTERRUPT LATENCY:
* insert
*/
void _CORE_message_queue_Insert_message(
52c4a: 4480 negl %d0 <== NOT EXECUTED
}
break;
}
_ISR_Disable( level );
SET_NOTIFY();
the_message_queue->number_of_pending_messages++;
52c4c: 2141 0048 movel %d1,%a0@(72) <== NOT EXECUTED
)
{
Chain_Node *before_node;
the_node->previous = after_node;
before_node = after_node->next;
52c50: 2652 moveal %a2@,%a3 <== NOT EXECUTED
Chain_Node *the_node
)
{
Chain_Node *before_node;
the_node->previous = after_node;
52c52: 234a 0004 movel %a2,%a1@(4) <== NOT EXECUTED
before_node = after_node->next;
after_node->next = the_node;
52c56: 2489 movel %a1,%a2@ <== NOT EXECUTED
the_node->next = before_node;
before_node->previous = the_node;
52c58: 2749 0004 movel %a1,%a3@(4) <== NOT EXECUTED
Chain_Node *before_node;
the_node->previous = after_node;
before_node = after_node->next;
after_node->next = the_node;
the_node->next = before_node;
52c5c: 228b movel %a3,%a1@ <== NOT EXECUTED
_Chain_Insert_unprotected( the_node->previous, &the_message->Node );
_ISR_Enable( level );
52c5e: 46c2 movew %d2,%sr <== NOT EXECUTED
/*
* According to POSIX, does this happen before or after the message
* is actually enqueued. It is logical to think afterwards, because
* the message is actually in the queue at this point.
*/
if ( notify && the_message_queue->notify_handler )
52c60: 4a00 tstb %d0 <== NOT EXECUTED
52c62: 6716 beqs 52c7a <_CORE_message_queue_Insert_message+0xf2><== NOT EXECUTED
52c64: 2268 0060 moveal %a0@(96),%a1 <== NOT EXECUTED
52c68: 4a89 tstl %a1 <== NOT EXECUTED
52c6a: 670e beqs 52c7a <_CORE_message_queue_Insert_message+0xf2><== NOT EXECUTED
(*the_message_queue->notify_handler)(the_message_queue->notify_argument);
52c6c: 2d68 0064 0008 movel %a0@(100),%fp@(8) <== NOT EXECUTED
#endif
}
52c72: 4cd7 0c04 moveml %sp@,%d2/%a2-%a3 <== NOT EXECUTED
52c76: 4e5e unlk %fp <== NOT EXECUTED
* According to POSIX, does this happen before or after the message
* is actually enqueued. It is logical to think afterwards, because
* the message is actually in the queue at this point.
*/
if ( notify && the_message_queue->notify_handler )
(*the_message_queue->notify_handler)(the_message_queue->notify_argument);
52c78: 4ed1 jmp %a1@ <== NOT EXECUTED
#endif
}
52c7a: 4cd7 0c04 moveml %sp@,%d2/%a2-%a3 <== NOT EXECUTED
52c7e: 4e5e unlk %fp <== NOT EXECUTED
...
0004def0 <_CORE_message_queue_Seize>:
CORE_message_queue_Buffer_control *the_message;
Thread_Control *executing;
executing = _Thread_Executing;
executing->Wait.return_code = CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;
_ISR_Disable( level );
4def0: 223c 0000 0700 movel #1792,%d1 <== NOT EXECUTED
void *buffer,
size_t *size_p,
bool wait,
Watchdog_Interval timeout
)
{
4def6: 4e56 ffe0 linkw %fp,#-32 <== NOT EXECUTED
ISR_Level level;
CORE_message_queue_Buffer_control *the_message;
Thread_Control *executing;
executing = _Thread_Executing;
4defa: 2079 0006 6bfe moveal 66bfe <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
void *buffer,
size_t *size_p,
bool wait,
Watchdog_Interval timeout
)
{
4df00: 48d7 3c3c moveml %d2-%d5/%a2-%a5,%sp@ <== NOT EXECUTED
4df04: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
4df08: 262e 000c movel %fp@(12),%d3 <== NOT EXECUTED
4df0c: 2a2e 0010 movel %fp@(16),%d5 <== NOT EXECUTED
4df10: 226e 0014 moveal %fp@(20),%a1 <== NOT EXECUTED
4df14: 242e 001c movel %fp@(28),%d2 <== NOT EXECUTED
4df18: 182e 001b moveb %fp@(27),%d4 <== NOT EXECUTED
ISR_Level level;
CORE_message_queue_Buffer_control *the_message;
Thread_Control *executing;
executing = _Thread_Executing;
executing->Wait.return_code = CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;
4df1c: 42a8 0034 clrl %a0@(52) <== NOT EXECUTED
_ISR_Disable( level );
4df20: 40c0 movew %sr,%d0 <== NOT EXECUTED
4df22: 8280 orl %d0,%d1 <== NOT EXECUTED
4df24: 46c1 movew %d1,%sr <== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
4df26: 220a movel %a2,%d1 <== NOT EXECUTED
4df28: 0681 0000 0054 addil #84,%d1 <== NOT EXECUTED
executing->Wait.return_argument = size_p;
/* Wait.count will be filled in with the message priority */
_ISR_Enable( level );
_Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout );
}
4df2e: 266a 0050 moveal %a2@(80),%a3 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Get_unprotected(
Chain_Control *the_chain
)
{
if ( !_Chain_Is_empty(the_chain))
4df32: b28b cmpl %a3,%d1 <== NOT EXECUTED
4df34: 6700 00a6 beqw 4dfdc <_CORE_message_queue_Seize+0xec> <== NOT EXECUTED
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *old_first = head->next;
Chain_Node *new_first = old_first->next;
4df38: 2a53 moveal %a3@,%a5 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Get_first_unprotected(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
4df3a: 49ea 0050 lea %a2@(80),%a4 <== NOT EXECUTED
Chain_Node *old_first = head->next;
Chain_Node *new_first = old_first->next;
head->next = new_first;
4df3e: 254d 0050 movel %a5,%a2@(80) <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Get_first_unprotected(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
4df42: 2b4c 0004 movel %a4,%a5@(4) <== NOT EXECUTED
executing = _Thread_Executing;
executing->Wait.return_code = CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;
_ISR_Disable( level );
the_message = _CORE_message_queue_Get_pending_message( the_message_queue );
if ( the_message != NULL ) {
4df46: 4a8b tstl %a3 <== NOT EXECUTED
4df48: 6700 0092 beqw 4dfdc <_CORE_message_queue_Seize+0xec> <== NOT EXECUTED
the_message_queue->number_of_pending_messages -= 1;
4df4c: 53aa 0048 subql #1,%a2@(72) <== NOT EXECUTED
_ISR_Enable( level );
4df50: 46c0 movew %d0,%sr <== NOT EXECUTED
*size_p = the_message->Contents.size;
_Thread_Executing->Wait.count =
4df52: 2079 0006 6bfe moveal 66bfe <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
the_message = _CORE_message_queue_Get_pending_message( the_message_queue );
if ( the_message != NULL ) {
the_message_queue->number_of_pending_messages -= 1;
_ISR_Enable( level );
*size_p = the_message->Contents.size;
4df58: 22ab 000c movel %a3@(12),%a1@ <== NOT EXECUTED
_Thread_Executing->Wait.count =
_CORE_message_queue_Get_message_priority( the_message );
_CORE_message_queue_Copy_buffer(
the_message->Contents.buffer,
4df5c: 240b movel %a3,%d2 <== NOT EXECUTED
4df5e: 0682 0000 0010 addil #16,%d2 <== NOT EXECUTED
if ( the_message != NULL ) {
the_message_queue->number_of_pending_messages -= 1;
_ISR_Enable( level );
*size_p = the_message->Contents.size;
_Thread_Executing->Wait.count =
4df64: 216b 0008 0024 movel %a3@(8),%a0@(36) <== NOT EXECUTED
const void *source,
void *destination,
size_t size
)
{
memcpy(destination, source, size);
4df6a: 49f9 0005 5460 lea 55460 <memcpy>,%a4 <== NOT EXECUTED
4df70: 2f11 movel %a1@,%sp@- <== NOT EXECUTED
4df72: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4df74: 2f05 movel %d5,%sp@- <== NOT EXECUTED
4df76: 4e94 jsr %a4@ <== NOT EXECUTED
* is not, then we can go ahead and free the buffer.
*
* NOTE: If we note that the queue was not full before this receive,
* then we can avoid this dequeue.
*/
the_thread = _Thread_queue_Dequeue( &the_message_queue->Wait_queue );
4df78: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4df7a: 4eb9 0004 fc34 jsr 4fc34 <_Thread_queue_Dequeue> <== NOT EXECUTED
if ( !the_thread ) {
4df80: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
* is not, then we can go ahead and free the buffer.
*
* NOTE: If we note that the queue was not full before this receive,
* then we can avoid this dequeue.
*/
the_thread = _Thread_queue_Dequeue( &the_message_queue->Wait_queue );
4df84: 2040 moveal %d0,%a0 <== NOT EXECUTED
if ( !the_thread ) {
4df86: 4a80 tstl %d0 <== NOT EXECUTED
4df88: 661a bnes 4dfa4 <_CORE_message_queue_Seize+0xb4> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _CORE_message_queue_Free_message_buffer (
CORE_message_queue_Control *the_message_queue,
CORE_message_queue_Buffer_control *the_message
)
{
_Chain_Append( &the_message_queue->Inactive_messages, &the_message->Node );
4df8a: 45ea 0068 lea %a2@(104),%a2 <== NOT EXECUTED
4df8e: 2d4b 000c movel %a3,%fp@(12) <== NOT EXECUTED
4df92: 2d4a 0008 movel %a2,%fp@(8) <== NOT EXECUTED
executing->Wait.return_argument = size_p;
/* Wait.count will be filled in with the message priority */
_ISR_Enable( level );
_Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout );
}
4df96: 4cee 3c3c ffe0 moveml %fp@(-32),%d2-%d5/%a2-%a5 <== NOT EXECUTED
4df9c: 4e5e unlk %fp <== NOT EXECUTED
4df9e: 4ef9 0004 dd70 jmp 4dd70 <_Chain_Append> <== NOT EXECUTED
*/
_CORE_message_queue_Set_message_priority(
the_message,
the_thread->Wait.count
);
the_message->Contents.size = (size_t) the_thread->Wait.option;
4dfa4: 2028 0030 movel %a0@(48),%d0 <== NOT EXECUTED
CORE_message_queue_Buffer_control *the_message,
int priority
)
{
#if defined(RTEMS_SCORE_COREMSG_ENABLE_MESSAGE_PRIORITY)
the_message->priority = priority;
4dfa8: 2768 0024 0008 movel %a0@(36),%a3@(8) <== NOT EXECUTED
4dfae: 2740 000c movel %d0,%a3@(12) <== NOT EXECUTED
const void *source,
void *destination,
size_t size
)
{
memcpy(destination, source, size);
4dfb2: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4dfb4: 2f28 002c movel %a0@(44),%sp@- <== NOT EXECUTED
4dfb8: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4dfba: 4e94 jsr %a4@ <== NOT EXECUTED
the_thread->Wait.return_argument_second.immutable_object,
the_message->Contents.buffer,
the_message->Contents.size
);
_CORE_message_queue_Insert_message(
4dfbc: 2d6b 0008 0010 movel %a3@(8),%fp@(16) <== NOT EXECUTED
4dfc2: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4dfc6: 2d4b 000c movel %a3,%fp@(12) <== NOT EXECUTED
4dfca: 2d4a 0008 movel %a2,%fp@(8) <== NOT EXECUTED
executing->Wait.return_argument = size_p;
/* Wait.count will be filled in with the message priority */
_ISR_Enable( level );
_Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout );
}
4dfce: 4cee 3c3c ffe0 moveml %fp@(-32),%d2-%d5/%a2-%a5 <== NOT EXECUTED
4dfd4: 4e5e unlk %fp <== NOT EXECUTED
the_thread->Wait.return_argument_second.immutable_object,
the_message->Contents.buffer,
the_message->Contents.size
);
_CORE_message_queue_Insert_message(
4dfd6: 4ef9 0005 2b88 jmp 52b88 <_CORE_message_queue_Insert_message><== NOT EXECUTED
return;
}
#endif
}
if ( !wait ) {
4dfdc: 4a04 tstb %d4 <== NOT EXECUTED
4dfde: 6612 bnes 4dff2 <_CORE_message_queue_Seize+0x102><== NOT EXECUTED
_ISR_Enable( level );
4dfe0: 46c0 movew %d0,%sr <== NOT EXECUTED
executing->Wait.return_code = CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_NOWAIT;
4dfe2: 7004 moveq #4,%d0 <== NOT EXECUTED
executing->Wait.return_argument = size_p;
/* Wait.count will be filled in with the message priority */
_ISR_Enable( level );
_Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout );
}
4dfe4: 4cee 3c3c ffe0 moveml %fp@(-32),%d2-%d5/%a2-%a5 <== NOT EXECUTED
#endif
}
if ( !wait ) {
_ISR_Enable( level );
executing->Wait.return_code = CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_NOWAIT;
4dfea: 2140 0034 movel %d0,%a0@(52) <== NOT EXECUTED
executing->Wait.return_argument = size_p;
/* Wait.count will be filled in with the message priority */
_ISR_Enable( level );
_Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout );
}
4dfee: 4e5e unlk %fp <== NOT EXECUTED
4dff0: 4e75 rts <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Thread_queue_Enter_critical_section (
Thread_queue_Control *the_thread_queue
)
{
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
4dff2: 7201 moveq #1,%d1 <== NOT EXECUTED
4dff4: 2541 0030 movel %d1,%a2@(48) <== NOT EXECUTED
}
_Thread_queue_Enter_critical_section( &the_message_queue->Wait_queue );
executing->Wait.queue = &the_message_queue->Wait_queue;
executing->Wait.id = id;
executing->Wait.return_argument_second.mutable_object = buffer;
4dff8: 2145 002c movel %d5,%a0@(44) <== NOT EXECUTED
executing->Wait.return_code = CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_NOWAIT;
return;
}
_Thread_queue_Enter_critical_section( &the_message_queue->Wait_queue );
executing->Wait.queue = &the_message_queue->Wait_queue;
4dffc: 214a 0044 movel %a2,%a0@(68) <== NOT EXECUTED
executing->Wait.id = id;
4e000: 2143 0020 movel %d3,%a0@(32) <== NOT EXECUTED
executing->Wait.return_argument_second.mutable_object = buffer;
executing->Wait.return_argument = size_p;
4e004: 2149 0028 movel %a1,%a0@(40) <== NOT EXECUTED
/* Wait.count will be filled in with the message priority */
_ISR_Enable( level );
4e008: 46c0 movew %d0,%sr <== NOT EXECUTED
_Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout );
4e00a: 49f9 0005 0088 lea 50088 <_Thread_queue_Timeout>,%a4 <== NOT EXECUTED
4e010: 2d42 000c movel %d2,%fp@(12) <== NOT EXECUTED
4e014: 2d4c 0010 movel %a4,%fp@(16) <== NOT EXECUTED
4e018: 2d4a 0008 movel %a2,%fp@(8) <== NOT EXECUTED
}
4e01c: 4cee 3c3c ffe0 moveml %fp@(-32),%d2-%d5/%a2-%a5 <== NOT EXECUTED
4e022: 4e5e unlk %fp <== NOT EXECUTED
executing->Wait.return_argument_second.mutable_object = buffer;
executing->Wait.return_argument = size_p;
/* Wait.count will be filled in with the message priority */
_ISR_Enable( level );
_Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout );
4e024: 4ef9 0004 fd74 jmp 4fd74 <_Thread_queue_Enqueue_with_handler><== NOT EXECUTED
...
0004e02c <_CORE_message_queue_Submit>:
#endif
CORE_message_queue_Submit_types submit_type,
bool wait,
Watchdog_Interval timeout
)
{
4e02c: 4e56 ffe8 linkw %fp,#-24 <== NOT EXECUTED
4e030: 48d7 0c3c moveml %d2-%d5/%a2-%a3,%sp@ <== NOT EXECUTED
4e034: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
4e038: 282e 000c movel %fp@(12),%d4 <== NOT EXECUTED
4e03c: 242e 0010 movel %fp@(16),%d2 <== NOT EXECUTED
4e040: 262e 001c movel %fp@(28),%d3 <== NOT EXECUTED
4e044: 1a2e 0023 moveb %fp@(35),%d5 <== NOT EXECUTED
CORE_message_queue_Buffer_control *the_message;
Thread_Control *the_thread;
if ( size > the_message_queue->maximum_message_size ) {
4e048: b4aa 004c cmpl %a2@(76),%d2 <== NOT EXECUTED
4e04c: 6200 00cc bhiw 4e11a <_CORE_message_queue_Submit+0xee><== NOT EXECUTED
}
/*
* Is there a thread currently waiting on this message queue?
*/
if ( the_message_queue->number_of_pending_messages == 0 ) {
4e050: 4aaa 0048 tstl %a2@(72) <== NOT EXECUTED
4e054: 662e bnes 4e084 <_CORE_message_queue_Submit+0x58><== NOT EXECUTED
the_thread = _Thread_queue_Dequeue( &the_message_queue->Wait_queue );
4e056: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4e058: 4eb9 0004 fc34 jsr 4fc34 <_Thread_queue_Dequeue> <== NOT EXECUTED
if ( the_thread ) {
4e05e: 588f addql #4,%sp <== NOT EXECUTED
/*
* Is there a thread currently waiting on this message queue?
*/
if ( the_message_queue->number_of_pending_messages == 0 ) {
the_thread = _Thread_queue_Dequeue( &the_message_queue->Wait_queue );
4e060: 2640 moveal %d0,%a3 <== NOT EXECUTED
if ( the_thread ) {
4e062: 4a80 tstl %d0 <== NOT EXECUTED
4e064: 671e beqs 4e084 <_CORE_message_queue_Submit+0x58><== NOT EXECUTED
4e066: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4e068: 2f04 movel %d4,%sp@- <== NOT EXECUTED
4e06a: 2f2b 002c movel %a3@(44),%sp@- <== NOT EXECUTED
4e06e: 4eb9 0005 5460 jsr 55460 <memcpy> <== NOT EXECUTED
_CORE_message_queue_Copy_buffer(
buffer,
the_thread->Wait.return_argument_second.mutable_object,
size
);
*(size_t *) the_thread->Wait.return_argument = size;
4e074: 206b 0028 moveal %a3@(40),%a0 <== NOT EXECUTED
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
(*api_message_queue_mp_support) ( the_thread, id );
#endif
return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;
4e078: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
_CORE_message_queue_Copy_buffer(
buffer,
the_thread->Wait.return_argument_second.mutable_object,
size
);
*(size_t *) the_thread->Wait.return_argument = size;
4e07c: 2082 movel %d2,%a0@ <== NOT EXECUTED
the_thread->Wait.count = (uint32_t) submit_type;
4e07e: 2743 0024 movel %d3,%a3@(36) <== NOT EXECUTED
4e082: 603c bras 4e0c0 <_CORE_message_queue_Submit+0x94><== NOT EXECUTED
/*
* No one waiting on the message queue at this time, so attempt to
* queue the message up for a future receive.
*/
if ( the_message_queue->number_of_pending_messages <
4e084: 202a 0044 movel %a2@(68),%d0 <== NOT EXECUTED
4e088: b0aa 0048 cmpl %a2@(72),%d0 <== NOT EXECUTED
4e08c: 6336 blss 4e0c4 <_CORE_message_queue_Submit+0x98><== NOT EXECUTED
_CORE_message_queue_Allocate_message_buffer (
CORE_message_queue_Control *the_message_queue
)
{
return (CORE_message_queue_Buffer_control *)
_Chain_Get( &the_message_queue->Inactive_messages );
4e08e: 486a 0068 pea %a2@(104) <== NOT EXECUTED
4e092: 4eb9 0004 ddd0 jsr 4ddd0 <_Chain_Get> <== NOT EXECUTED
4e098: 2640 moveal %d0,%a3 <== NOT EXECUTED
const void *source,
void *destination,
size_t size
)
{
memcpy(destination, source, size);
4e09a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4e09c: 2f04 movel %d4,%sp@- <== NOT EXECUTED
4e09e: 486b 0010 pea %a3@(16) <== NOT EXECUTED
4e0a2: 4eb9 0005 5460 jsr 55460 <memcpy> <== NOT EXECUTED
_CORE_message_queue_Copy_buffer(
buffer,
the_message->Contents.buffer,
size
);
the_message->Contents.size = size;
4e0a8: 2742 000c movel %d2,%a3@(12) <== NOT EXECUTED
CORE_message_queue_Buffer_control *the_message,
int priority
)
{
#if defined(RTEMS_SCORE_COREMSG_ENABLE_MESSAGE_PRIORITY)
the_message->priority = priority;
4e0ac: 2743 0008 movel %d3,%a3@(8) <== NOT EXECUTED
_CORE_message_queue_Set_message_priority( the_message, submit_type );
_CORE_message_queue_Insert_message(
4e0b0: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4e0b2: 2f0b movel %a3,%sp@- <== NOT EXECUTED
4e0b4: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4e0b6: 4eb9 0005 2b88 jsr 52b88 <_CORE_message_queue_Insert_message><== NOT EXECUTED
the_message_queue,
the_message,
submit_type
);
return CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL;
4e0bc: 4fef 001c lea %sp@(28),%sp <== NOT EXECUTED
4e0c0: 4280 clrl %d0 <== NOT EXECUTED
4e0c2: 6060 bras 4e124 <_CORE_message_queue_Submit+0xf8><== NOT EXECUTED
/*
* No message buffers were available so we may need to return an
* overflow error or block the sender until the message is placed
* on the queue.
*/
if ( !wait ) {
4e0c4: 4a05 tstb %d5 <== NOT EXECUTED
4e0c6: 6756 beqs 4e11e <_CORE_message_queue_Submit+0xf2><== NOT EXECUTED
/*
* Do NOT block on a send if the caller is in an ISR. It is
* deadly to block in an ISR.
*/
if ( _ISR_Is_in_progress() ) {
4e0c8: 4ab9 0006 6bfa tstl 66bfa <_Per_CPU_Information+0x8> <== NOT EXECUTED
4e0ce: 6652 bnes 4e122 <_CORE_message_queue_Submit+0xf6><== NOT EXECUTED
* Thus the unusual choice to open a new scope and declare
* it as a variable. Doing this emphasizes how dangerous it
* would be to use this variable prior to here.
*/
{
Thread_Control *executing = _Thread_Executing;
4e0d0: 2079 0006 6bfe moveal 66bfe <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
ISR_Level level;
_ISR_Disable( level );
4e0d6: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
4e0dc: 40c1 movew %sr,%d1 <== NOT EXECUTED
4e0de: 8081 orl %d1,%d0 <== NOT EXECUTED
4e0e0: 46c0 movew %d0,%sr <== NOT EXECUTED
4e0e2: 7001 moveq #1,%d0 <== NOT EXECUTED
4e0e4: 2540 0030 movel %d0,%a2@(48) <== NOT EXECUTED
_Thread_queue_Enter_critical_section( &the_message_queue->Wait_queue );
executing->Wait.queue = &the_message_queue->Wait_queue;
executing->Wait.id = id;
4e0e8: 216e 0014 0020 movel %fp@(20),%a0@(32) <== NOT EXECUTED
Thread_Control *executing = _Thread_Executing;
ISR_Level level;
_ISR_Disable( level );
_Thread_queue_Enter_critical_section( &the_message_queue->Wait_queue );
executing->Wait.queue = &the_message_queue->Wait_queue;
4e0ee: 214a 0044 movel %a2,%a0@(68) <== NOT EXECUTED
executing->Wait.id = id;
executing->Wait.return_argument_second.immutable_object = buffer;
4e0f2: 2144 002c movel %d4,%a0@(44) <== NOT EXECUTED
executing->Wait.option = (uint32_t) size;
4e0f6: 2142 0030 movel %d2,%a0@(48) <== NOT EXECUTED
executing->Wait.count = submit_type;
4e0fa: 2143 0024 movel %d3,%a0@(36) <== NOT EXECUTED
_ISR_Enable( level );
4e0fe: 46c1 movew %d1,%sr <== NOT EXECUTED
_Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout );
4e100: 4879 0005 0088 pea 50088 <_Thread_queue_Timeout> <== NOT EXECUTED
4e106: 2f2e 0024 movel %fp@(36),%sp@- <== NOT EXECUTED
4e10a: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4e10c: 4eb9 0004 fd74 jsr 4fd74 <_Thread_queue_Enqueue_with_handler><== NOT EXECUTED
}
return CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_WAIT;
4e112: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4e116: 7007 moveq #7,%d0 <== NOT EXECUTED
4e118: 600a bras 4e124 <_CORE_message_queue_Submit+0xf8><== NOT EXECUTED
{
CORE_message_queue_Buffer_control *the_message;
Thread_Control *the_thread;
if ( size > the_message_queue->maximum_message_size ) {
return CORE_MESSAGE_QUEUE_STATUS_INVALID_SIZE;
4e11a: 7001 moveq #1,%d0 <== NOT EXECUTED
4e11c: 6006 bras 4e124 <_CORE_message_queue_Submit+0xf8><== NOT EXECUTED
* No message buffers were available so we may need to return an
* overflow error or block the sender until the message is placed
* on the queue.
*/
if ( !wait ) {
return CORE_MESSAGE_QUEUE_STATUS_TOO_MANY;
4e11e: 7002 moveq #2,%d0 <== NOT EXECUTED
4e120: 6002 bras 4e124 <_CORE_message_queue_Submit+0xf8><== NOT EXECUTED
/*
* Do NOT block on a send if the caller is in an ISR. It is
* deadly to block in an ISR.
*/
if ( _ISR_Is_in_progress() ) {
return CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED;
4e122: 7003 moveq #3,%d0 <== NOT EXECUTED
_Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout );
}
return CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_WAIT;
#endif
}
4e124: 4cee 0c3c ffe8 moveml %fp@(-24),%d2-%d5/%a2-%a3 <== NOT EXECUTED
4e12a: 4e5e unlk %fp <== NOT EXECUTED
...
00046058 <_CORE_mutex_Initialize>:
CORE_mutex_Status _CORE_mutex_Initialize(
CORE_mutex_Control *the_mutex,
CORE_mutex_Attributes *the_mutex_attributes,
uint32_t initial_lock
)
{
46058: 4e56 fff4 linkw %fp,#-12
4605c: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
/* Add this to the RTEMS environment later ?????????
rtems_assert( initial_lock == CORE_MUTEX_LOCKED ||
initial_lock == CORE_MUTEX_UNLOCKED );
*/
the_mutex->Attributes = *the_mutex_attributes;
46060: 4878 000e pea e <OPER1+0x2>
CORE_mutex_Status _CORE_mutex_Initialize(
CORE_mutex_Control *the_mutex,
CORE_mutex_Attributes *the_mutex_attributes,
uint32_t initial_lock
)
{
46064: 266e 000c moveal %fp@(12),%a3
46068: 246e 0008 moveal %fp@(8),%a2
/* Add this to the RTEMS environment later ?????????
rtems_assert( initial_lock == CORE_MUTEX_LOCKED ||
initial_lock == CORE_MUTEX_UNLOCKED );
*/
the_mutex->Attributes = *the_mutex_attributes;
4606c: 2f0b movel %a3,%sp@-
4606e: 486a 0040 pea %a2@(64)
CORE_mutex_Status _CORE_mutex_Initialize(
CORE_mutex_Control *the_mutex,
CORE_mutex_Attributes *the_mutex_attributes,
uint32_t initial_lock
)
{
46072: 242e 0010 movel %fp@(16),%d2
/* Add this to the RTEMS environment later ?????????
rtems_assert( initial_lock == CORE_MUTEX_LOCKED ||
initial_lock == CORE_MUTEX_UNLOCKED );
*/
the_mutex->Attributes = *the_mutex_attributes;
46076: 4eb9 0004 d200 jsr 4d200 <memcpy>
the_mutex->lock = initial_lock;
the_mutex->blocked_count = 0;
if ( initial_lock == CORE_MUTEX_LOCKED ) {
4607c: 4fef 000c lea %sp@(12),%sp
rtems_assert( initial_lock == CORE_MUTEX_LOCKED ||
initial_lock == CORE_MUTEX_UNLOCKED );
*/
the_mutex->Attributes = *the_mutex_attributes;
the_mutex->lock = initial_lock;
46080: 2542 004e movel %d2,%a2@(78)
the_mutex->blocked_count = 0;
46084: 42aa 0056 clrl %a2@(86)
if ( initial_lock == CORE_MUTEX_LOCKED ) {
46088: 4a82 tstl %d2
4608a: 6638 bnes 460c4 <_CORE_mutex_Initialize+0x6c>
the_mutex->nest_count = 1;
4608c: 7001 moveq #1,%d0
the_mutex->holder = _Thread_Executing;
the_mutex->holder_id = _Thread_Executing->Object.id;
if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ||
4608e: 7202 moveq #2,%d1
the_mutex->lock = initial_lock;
the_mutex->blocked_count = 0;
if ( initial_lock == CORE_MUTEX_LOCKED ) {
the_mutex->nest_count = 1;
the_mutex->holder = _Thread_Executing;
46090: 2079 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a0
the_mutex->Attributes = *the_mutex_attributes;
the_mutex->lock = initial_lock;
the_mutex->blocked_count = 0;
if ( initial_lock == CORE_MUTEX_LOCKED ) {
the_mutex->nest_count = 1;
46096: 2540 0052 movel %d0,%a2@(82)
the_mutex->holder = _Thread_Executing;
the_mutex->holder_id = _Thread_Executing->Object.id;
4609a: 2568 0008 005e movel %a0@(8),%a2@(94)
STATES_WAITING_FOR_MUTEX,
CORE_MUTEX_TIMEOUT
);
return CORE_MUTEX_STATUS_SUCCESSFUL;
}
460a0: 202a 0046 movel %a2@(70),%d0
the_mutex->lock = initial_lock;
the_mutex->blocked_count = 0;
if ( initial_lock == CORE_MUTEX_LOCKED ) {
the_mutex->nest_count = 1;
the_mutex->holder = _Thread_Executing;
460a4: 2548 005a movel %a0,%a2@(90)
the_mutex->holder_id = _Thread_Executing->Object.id;
if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ||
460a8: b280 cmpl %d0,%d1
460aa: 6708 beqs 460b4 <_CORE_mutex_Initialize+0x5c> <== NEVER TAKEN
460ac: 123c 0003 moveb #3,%d1
460b0: b280 cmpl %d0,%d1
460b2: 661c bnes 460d0 <_CORE_mutex_Initialize+0x78> <== ALWAYS TAKEN
_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) {
if ( _Thread_Executing->current_priority <
460b4: 202a 004a movel %a2@(74),%d0 <== NOT EXECUTED
460b8: b0a8 0014 cmpl %a0@(20),%d0 <== NOT EXECUTED
460bc: 6236 bhis 460f4 <_CORE_mutex_Initialize+0x9c> <== NOT EXECUTED
_Chain_Prepend_unprotected( &_Thread_Executing->lock_mutex,
&the_mutex->queue.lock_queue );
the_mutex->queue.priority_before = _Thread_Executing->current_priority;
#endif
_Thread_Executing->resource_count++;
460be: 52a8 001c addql #1,%a0@(28) <== NOT EXECUTED
460c2: 600c bras 460d0 <_CORE_mutex_Initialize+0x78> <== NOT EXECUTED
}
} else {
the_mutex->nest_count = 0;
460c4: 42aa 0052 clrl %a2@(82)
the_mutex->holder = NULL;
460c8: 42aa 005a clrl %a2@(90)
the_mutex->holder_id = 0;
460cc: 42aa 005e clrl %a2@(94)
}
_Thread_queue_Initialize(
460d0: 4878 0005 pea 5 <COMPARE>
460d4: 4878 0400 pea 400 <D_BIAS+0x2>
460d8: 4aab 0006 tstl %a3@(6)
460dc: 56c0 sne %d0
460de: 49c0 extbl %d0
460e0: 4480 negl %d0
460e2: 2f00 movel %d0,%sp@-
460e4: 2f0a movel %a2,%sp@-
460e6: 4eb9 0004 7e4c jsr 47e4c <_Thread_queue_Initialize>
THREAD_QUEUE_DISCIPLINE_FIFO : THREAD_QUEUE_DISCIPLINE_PRIORITY,
STATES_WAITING_FOR_MUTEX,
CORE_MUTEX_TIMEOUT
);
return CORE_MUTEX_STATUS_SUCCESSFUL;
460ec: 4fef 0010 lea %sp@(16),%sp
460f0: 4280 clrl %d0
460f2: 6002 bras 460f6 <_CORE_mutex_Initialize+0x9e>
if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ||
_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) {
if ( _Thread_Executing->current_priority <
the_mutex->Attributes.priority_ceiling )
return CORE_MUTEX_STATUS_CEILING_VIOLATED;
460f4: 7006 moveq #6,%d0 <== NOT EXECUTED
STATES_WAITING_FOR_MUTEX,
CORE_MUTEX_TIMEOUT
);
return CORE_MUTEX_STATUS_SUCCESSFUL;
}
460f6: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3
460fc: 4e5e unlk %fp <== NOT EXECUTED
00046164 <_CORE_mutex_Seize>:
Objects_Id _id,
bool _wait,
Watchdog_Interval _timeout,
ISR_Level _level
)
{
46164: 4e56 0000 linkw %fp,#0
_CORE_mutex_Seize_body( _the_mutex, _id, _wait, _timeout, _level );
46168: 2039 0005 db08 movel 5db08 <_Thread_Dispatch_disable_level>,%d0
Objects_Id _id,
bool _wait,
Watchdog_Interval _timeout,
ISR_Level _level
)
{
4616e: 2f0a movel %a2,%sp@-
46170: 246e 0008 moveal %fp@(8),%a2
46174: 2f02 movel %d2,%sp@-
46176: 142e 0013 moveb %fp@(19),%d2
_CORE_mutex_Seize_body( _the_mutex, _id, _wait, _timeout, _level );
4617a: 4a80 tstl %d0
4617c: 671c beqs 4619a <_CORE_mutex_Seize+0x36>
4617e: 4a02 tstb %d2
46180: 6718 beqs 4619a <_CORE_mutex_Seize+0x36> <== NEVER TAKEN
46182: 7001 moveq #1,%d0
46184: b0b9 0005 dc74 cmpl 5dc74 <_System_state_Current>,%d0
4618a: 640e bccs 4619a <_CORE_mutex_Seize+0x36>
4618c: 4878 0012 pea 12 <INVALID_OPERATION+0x2>
46190: 42a7 clrl %sp@-
46192: 42a7 clrl %sp@-
46194: 4eb9 0004 67c0 jsr 467c0 <_Internal_error_Occurred>
4619a: 486e 0018 pea %fp@(24)
4619e: 2f0a movel %a2,%sp@-
461a0: 4eb9 0004 aa08 jsr 4aa08 <_CORE_mutex_Seize_interrupt_trylock>
461a6: 508f addql #8,%sp
461a8: 4a80 tstl %d0
461aa: 6750 beqs 461fc <_CORE_mutex_Seize+0x98>
461ac: 4a02 tstb %d2
461ae: 6614 bnes 461c4 <_CORE_mutex_Seize+0x60> <== ALWAYS TAKEN
461b0: 202e 0018 movel %fp@(24),%d0 <== NOT EXECUTED
461b4: 46c0 movew %d0,%sr <== NOT EXECUTED
461b6: 2079 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
461bc: 7001 moveq #1,%d0 <== NOT EXECUTED
461be: 2140 0034 movel %d0,%a0@(52) <== NOT EXECUTED
461c2: 6038 bras 461fc <_CORE_mutex_Seize+0x98> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Thread_queue_Enter_critical_section (
Thread_queue_Control *the_thread_queue
)
{
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
461c4: 7001 moveq #1,%d0
461c6: 2079 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a0
461cc: 2540 0030 movel %d0,%a2@(48)
461d0: 2039 0005 db08 movel 5db08 <_Thread_Dispatch_disable_level>,%d0
461d6: 5280 addql #1,%d0
461d8: 216e 000c 0020 movel %fp@(12),%a0@(32)
461de: 214a 0044 movel %a2,%a0@(68)
461e2: 23c0 0005 db08 movel %d0,5db08 <_Thread_Dispatch_disable_level>
461e8: 202e 0018 movel %fp@(24),%d0
461ec: 46c0 movew %d0,%sr
461ee: 2f2e 0014 movel %fp@(20),%sp@-
461f2: 2f0a movel %a2,%sp@-
461f4: 4eb9 0004 6100 jsr 46100 <_CORE_mutex_Seize_interrupt_blocking>
461fa: 508f addql #8,%sp
}
461fc: 242e fff8 movel %fp@(-8),%d2
46200: 246e fffc moveal %fp@(-4),%a2
46204: 4e5e unlk %fp <== NOT EXECUTED
00046100 <_CORE_mutex_Seize_interrupt_blocking>:
)
{
Thread_Control *executing;
executing = _Thread_Executing;
if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ) {
46100: 7002 moveq #2,%d0
void _CORE_mutex_Seize_interrupt_blocking(
CORE_mutex_Control *the_mutex,
Watchdog_Interval timeout
)
{
46102: 4e56 0000 linkw %fp,#0
Thread_Control *executing;
executing = _Thread_Executing;
46106: 2279 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a1
void _CORE_mutex_Seize_interrupt_blocking(
CORE_mutex_Control *the_mutex,
Watchdog_Interval timeout
)
{
4610c: 2f0a movel %a2,%sp@-
4610e: 246e 0008 moveal %fp@(8),%a2
46112: 2f02 movel %d2,%sp@-
46114: 242e 000c movel %fp@(12),%d2
Thread_Control *executing;
executing = _Thread_Executing;
if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ) {
46118: b0aa 0046 cmpl %a2@(70),%d0
4611c: 661e bnes 4613c <_CORE_mutex_Seize_interrupt_blocking+0x3c>
if ( the_mutex->holder->current_priority > executing->current_priority ) {
4611e: 206a 005a moveal %a2@(90),%a0
46122: 2029 0014 movel %a1@(20),%d0
46126: b0a8 0014 cmpl %a0@(20),%d0
4612a: 6410 bccs 4613c <_CORE_mutex_Seize_interrupt_blocking+0x3c><== NEVER TAKEN
_Thread_Change_priority(
4612c: 42a7 clrl %sp@-
4612e: 2f00 movel %d0,%sp@-
46130: 2f08 movel %a0,%sp@-
46132: 4eb9 0004 730c jsr 4730c <_Thread_Change_priority>
46138: 4fef 000c lea %sp@(12),%sp
false
);
}
}
the_mutex->blocked_count++;
4613c: 52aa 0056 addql #1,%a2@(86)
_Thread_queue_Enqueue( &the_mutex->Wait_queue, timeout );
46140: 4879 0004 7f1c pea 47f1c <_Thread_queue_Timeout>
46146: 2f02 movel %d2,%sp@-
46148: 2f0a movel %a2,%sp@-
4614a: 4eb9 0004 7c08 jsr 47c08 <_Thread_queue_Enqueue_with_handler>
_Thread_Enable_dispatch();
}
46150: 242e fff8 movel %fp@(-8),%d2
}
the_mutex->blocked_count++;
_Thread_queue_Enqueue( &the_mutex->Wait_queue, timeout );
_Thread_Enable_dispatch();
46154: 4fef 000c lea %sp@(12),%sp
}
46158: 246e fffc moveal %fp@(-4),%a2
4615c: 4e5e unlk %fp
}
the_mutex->blocked_count++;
_Thread_queue_Enqueue( &the_mutex->Wait_queue, timeout );
_Thread_Enable_dispatch();
4615e: 4ef9 0004 77a6 jmp 477a6 <_Thread_Enable_dispatch>
0004aa08 <_CORE_mutex_Seize_interrupt_trylock>:
#if defined(__RTEMS_DO_NOT_INLINE_CORE_MUTEX_SEIZE__)
int _CORE_mutex_Seize_interrupt_trylock(
CORE_mutex_Control *the_mutex,
ISR_Level *level_p
)
{
4aa08: 4e56 fff4 linkw %fp,#-12
{
Thread_Control *executing;
/* disabled when you get here */
executing = _Thread_Executing;
4aa0c: 2279 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a1
4aa12: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
4aa16: 206e 0008 moveal %fp@(8),%a0
4aa1a: 246e 000c moveal %fp@(12),%a2
executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL;
4aa1e: 42a9 0034 clrl %a1@(52)
if ( !_CORE_mutex_Is_locked( the_mutex ) ) {
4aa22: 4aa8 004e tstl %a0@(78)
4aa26: 6700 009e beqw 4aac6 <_CORE_mutex_Seize_interrupt_trylock+0xbe>
the_mutex->lock = CORE_MUTEX_LOCKED;
the_mutex->holder = executing;
the_mutex->holder_id = executing->Object.id;
the_mutex->nest_count = 1;
4aa2a: 7001 moveq #1,%d0
if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ||
4aa2c: 7202 moveq #2,%d1
executing = _Thread_Executing;
executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL;
if ( !_CORE_mutex_Is_locked( the_mutex ) ) {
the_mutex->lock = CORE_MUTEX_LOCKED;
the_mutex->holder = executing;
the_mutex->holder_id = executing->Object.id;
4aa2e: 2169 0008 005e movel %a1@(8),%a0@(94)
the_mutex->nest_count = 1;
4aa34: 2140 0052 movel %d0,%a0@(82)
return _CORE_mutex_Seize_interrupt_trylock_body( the_mutex, level_p );
}
4aa38: 2028 0046 movel %a0@(70),%d0
/* disabled when you get here */
executing = _Thread_Executing;
executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL;
if ( !_CORE_mutex_Is_locked( the_mutex ) ) {
the_mutex->lock = CORE_MUTEX_LOCKED;
4aa3c: 42a8 004e clrl %a0@(78)
the_mutex->holder = executing;
4aa40: 2149 005a movel %a1,%a0@(90)
the_mutex->holder_id = executing->Object.id;
the_mutex->nest_count = 1;
if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ||
4aa44: b280 cmpl %d0,%d1
4aa46: 6706 beqs 4aa4e <_CORE_mutex_Seize_interrupt_trylock+0x46>
4aa48: 7403 moveq #3,%d2
4aa4a: b480 cmpl %d0,%d2
4aa4c: 6612 bnes 4aa60 <_CORE_mutex_Seize_interrupt_trylock+0x58><== ALWAYS TAKEN
_Chain_Prepend_unprotected( &executing->lock_mutex,
&the_mutex->queue.lock_queue );
the_mutex->queue.priority_before = executing->current_priority;
#endif
executing->resource_count++;
4aa4e: 2229 001c movel %a1@(28),%d1
4aa52: 2401 movel %d1,%d2
4aa54: 5282 addql #1,%d2
4aa56: 2342 001c movel %d2,%a1@(28)
}
if ( !_CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) {
4aa5a: 7403 moveq #3,%d2
4aa5c: b480 cmpl %d0,%d2
4aa5e: 6708 beqs 4aa68 <_CORE_mutex_Seize_interrupt_trylock+0x60><== NEVER TAKEN
_ISR_Enable( *level_p );
4aa60: 2012 movel %a2@,%d0
4aa62: 46c0 movew %d0,%sr
4aa64: 6000 008a braw 4aaf0 <_CORE_mutex_Seize_interrupt_trylock+0xe8>
*/
{
Priority_Control ceiling;
Priority_Control current;
ceiling = the_mutex->Attributes.priority_ceiling;
4aa68: 2028 004a movel %a0@(74),%d0 <== NOT EXECUTED
current = executing->current_priority;
4aa6c: 2669 0014 moveal %a1@(20),%a3 <== NOT EXECUTED
if ( current == ceiling ) {
4aa70: b08b cmpl %a3,%d0 <== NOT EXECUTED
4aa72: 6606 bnes 4aa7a <_CORE_mutex_Seize_interrupt_trylock+0x72><== NOT EXECUTED
_ISR_Enable( *level_p );
4aa74: 2012 movel %a2@,%d0 <== NOT EXECUTED
4aa76: 46c0 movew %d0,%sr <== NOT EXECUTED
4aa78: 6076 bras 4aaf0 <_CORE_mutex_Seize_interrupt_trylock+0xe8><== NOT EXECUTED
return 0;
}
if ( current > ceiling ) {
4aa7a: b08b cmpl %a3,%d0 <== NOT EXECUTED
4aa7c: 642e bccs 4aaac <_CORE_mutex_Seize_interrupt_trylock+0xa4><== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
4aa7e: 2039 0005 db08 movel 5db08 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
4aa84: 5280 addql #1,%d0 <== NOT EXECUTED
4aa86: 23c0 0005 db08 movel %d0,5db08 <_Thread_Dispatch_disable_level><== NOT EXECUTED
_Thread_Disable_dispatch();
_ISR_Enable( *level_p );
4aa8c: 2012 movel %a2@,%d0 <== NOT EXECUTED
4aa8e: 46c0 movew %d0,%sr <== NOT EXECUTED
_Thread_Change_priority(
4aa90: 42a7 clrl %sp@- <== NOT EXECUTED
4aa92: 2f28 004a movel %a0@(74),%sp@- <== NOT EXECUTED
4aa96: 2f28 005a movel %a0@(90),%sp@- <== NOT EXECUTED
4aa9a: 4eb9 0004 730c jsr 4730c <_Thread_Change_priority> <== NOT EXECUTED
the_mutex->holder,
the_mutex->Attributes.priority_ceiling,
false
);
_Thread_Enable_dispatch();
4aaa0: 4eb9 0004 77a6 jsr 477a6 <_Thread_Enable_dispatch> <== NOT EXECUTED
4aaa6: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4aaaa: 6044 bras 4aaf0 <_CORE_mutex_Seize_interrupt_trylock+0xe8><== NOT EXECUTED
return 0;
}
/* if ( current < ceiling ) */ {
executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED;
4aaac: 7006 moveq #6,%d0 <== NOT EXECUTED
the_mutex->lock = CORE_MUTEX_UNLOCKED;
4aaae: 7401 moveq #1,%d2 <== NOT EXECUTED
);
_Thread_Enable_dispatch();
return 0;
}
/* if ( current < ceiling ) */ {
executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED;
4aab0: 2340 0034 movel %d0,%a1@(52) <== NOT EXECUTED
the_mutex->lock = CORE_MUTEX_UNLOCKED;
4aab4: 2142 004e movel %d2,%a0@(78) <== NOT EXECUTED
the_mutex->nest_count = 0; /* undo locking above */
4aab8: 42a8 0052 clrl %a0@(82) <== NOT EXECUTED
executing->resource_count--; /* undo locking above */
4aabc: 2341 001c movel %d1,%a1@(28) <== NOT EXECUTED
_ISR_Enable( *level_p );
4aac0: 2012 movel %a2@,%d0 <== NOT EXECUTED
4aac2: 46c0 movew %d0,%sr <== NOT EXECUTED
4aac4: 602a bras 4aaf0 <_CORE_mutex_Seize_interrupt_trylock+0xe8><== NOT EXECUTED
/*
* At this point, we know the mutex was not available. If this thread
* is the thread that has locked the mutex, let's see if we are allowed
* to nest access.
*/
if ( _Thread_Is_executing( the_mutex->holder ) ) {
4aac6: 2668 005a moveal %a0@(90),%a3
4aaca: b3cb cmpal %a3,%a1
4aacc: 6626 bnes 4aaf4 <_CORE_mutex_Seize_interrupt_trylock+0xec>
switch ( the_mutex->Attributes.lock_nesting_behavior ) {
4aace: 2028 0040 movel %a0@(64),%d0
4aad2: 6708 beqs 4aadc <_CORE_mutex_Seize_interrupt_trylock+0xd4><== NEVER TAKEN
4aad4: 7201 moveq #1,%d1
4aad6: b280 cmpl %d0,%d1
4aad8: 661a bnes 4aaf4 <_CORE_mutex_Seize_interrupt_trylock+0xec><== ALWAYS TAKEN
4aada: 600a bras 4aae6 <_CORE_mutex_Seize_interrupt_trylock+0xde><== NOT EXECUTED
case CORE_MUTEX_NESTING_ACQUIRES:
the_mutex->nest_count++;
4aadc: 52a8 0052 addql #1,%a0@(82) <== NOT EXECUTED
_ISR_Enable( *level_p );
4aae0: 2012 movel %a2@,%d0 <== NOT EXECUTED
4aae2: 46c0 movew %d0,%sr <== NOT EXECUTED
4aae4: 600a bras 4aaf0 <_CORE_mutex_Seize_interrupt_trylock+0xe8><== NOT EXECUTED
return 0;
case CORE_MUTEX_NESTING_IS_ERROR:
executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED;
4aae6: 7402 moveq #2,%d2 <== NOT EXECUTED
4aae8: 2742 0034 movel %d2,%a3@(52) <== NOT EXECUTED
_ISR_Enable( *level_p );
4aaec: 2012 movel %a2@,%d0 <== NOT EXECUTED
4aaee: 46c0 movew %d0,%sr <== NOT EXECUTED
return 0;
4aaf0: 4280 clrl %d0
4aaf2: 6002 bras 4aaf6 <_CORE_mutex_Seize_interrupt_trylock+0xee>
/*
* The mutex is not available and the caller must deal with the possibility
* of blocking.
*/
return 1;
4aaf4: 7001 moveq #1,%d0
4aaf6: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3
4aafc: 4e5e unlk %fp <== NOT EXECUTED
00046208 <_CORE_mutex_Surrender>:
#else
Objects_Id id __attribute__((unused)),
CORE_mutex_API_mp_support_callout api_mutex_mp_support __attribute__((unused))
#endif
)
{
46208: 4e56 0000 linkw %fp,#0
4620c: 2f0a movel %a2,%sp@-
4620e: 246e 0008 moveal %fp@(8),%a2
Thread_Control *the_thread;
Thread_Control *holder;
holder = the_mutex->holder;
46212: 206a 005a moveal %a2@(90),%a0
* allowed when the mutex in quetion is FIFO or simple Priority
* discipline. But Priority Ceiling or Priority Inheritance mutexes
* must be released by the thread which acquired them.
*/
if ( the_mutex->Attributes.only_owner_release ) {
46216: 4a2a 0044 tstb %a2@(68)
4621a: 670a beqs 46226 <_CORE_mutex_Surrender+0x1e>
if ( !_Thread_Is_executing( holder ) )
4621c: b1f9 0005 df96 cmpal 5df96 <_Per_CPU_Information+0xc>,%a0
46222: 6600 00ba bnew 462de <_CORE_mutex_Surrender+0xd6>
return CORE_MUTEX_STATUS_NOT_OWNER_OF_RESOURCE;
}
/* XXX already unlocked -- not right status */
if ( !the_mutex->nest_count )
46226: 202a 0052 movel %a2@(82),%d0
4622a: 6700 00b6 beqw 462e2 <_CORE_mutex_Surrender+0xda>
return CORE_MUTEX_STATUS_SUCCESSFUL;
the_mutex->nest_count--;
4622e: 5380 subql #1,%d0
46230: 2540 0052 movel %d0,%a2@(82)
if ( the_mutex->nest_count != 0 ) {
46234: 6600 00ac bnew 462e2 <_CORE_mutex_Surrender+0xda>
}
} else
the_mutex->lock = CORE_MUTEX_UNLOCKED;
return CORE_MUTEX_STATUS_SUCCESSFUL;
}
46238: 202a 0046 movel %a2@(70),%d0
/*
* Formally release the mutex before possibly transferring it to a
* blocked thread.
*/
if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ||
4623c: 7202 moveq #2,%d1
4623e: b280 cmpl %d0,%d1
46240: 6708 beqs 4624a <_CORE_mutex_Surrender+0x42>
46242: 123c 0003 moveb #3,%d1
46246: b280 cmpl %d0,%d1
46248: 6628 bnes 46272 <_CORE_mutex_Surrender+0x6a> <== ALWAYS TAKEN
_CORE_mutex_Pop_priority( the_mutex, holder );
if ( pop_status != CORE_MUTEX_STATUS_SUCCESSFUL )
return pop_status;
holder->resource_count--;
4624a: 2028 001c movel %a0@(28),%d0
4624e: 5380 subql #1,%d0
46250: 2140 001c movel %d0,%a0@(28)
/*
* Whether or not someone is waiting for the mutex, an
* inherited priority must be lowered if this is the last
* mutex (i.e. resource) this task has.
*/
if ( holder->resource_count == 0 &&
46254: 661c bnes 46272 <_CORE_mutex_Surrender+0x6a>
holder->real_priority != holder->current_priority ) {
46256: 2028 0018 movel %a0@(24),%d0
/*
* Whether or not someone is waiting for the mutex, an
* inherited priority must be lowered if this is the last
* mutex (i.e. resource) this task has.
*/
if ( holder->resource_count == 0 &&
4625a: b0a8 0014 cmpl %a0@(20),%d0
4625e: 6712 beqs 46272 <_CORE_mutex_Surrender+0x6a>
holder->real_priority != holder->current_priority ) {
_Thread_Change_priority( holder, holder->real_priority, true );
46260: 4878 0001 pea 1 <ADD>
46264: 2f00 movel %d0,%sp@-
46266: 2f08 movel %a0,%sp@-
46268: 4eb9 0004 730c jsr 4730c <_Thread_Change_priority>
4626e: 4fef 000c lea %sp@(12),%sp
}
}
the_mutex->holder = NULL;
46272: 42aa 005a clrl %a2@(90)
the_mutex->holder_id = 0;
46276: 42aa 005e clrl %a2@(94)
/*
* Now we check if another thread was waiting for this mutex. If so,
* transfer the mutex to that thread.
*/
if ( ( the_thread = _Thread_queue_Dequeue( &the_mutex->Wait_queue ) ) ) {
4627a: 2f0a movel %a2,%sp@-
4627c: 4eb9 0004 7ac8 jsr 47ac8 <_Thread_queue_Dequeue>
46282: 588f addql #4,%sp
46284: 2040 moveal %d0,%a0
46286: 4a80 tstl %d0
46288: 674a beqs 462d4 <_CORE_mutex_Surrender+0xcc>
} else
#endif
{
the_mutex->holder = the_thread;
4628a: 2540 005a movel %d0,%a2@(90)
the_mutex->holder_id = the_thread->Object.id;
the_mutex->nest_count = 1;
4628e: 7001 moveq #1,%d0
switch ( the_mutex->Attributes.discipline ) {
46290: 7202 moveq #2,%d1
} else
#endif
{
the_mutex->holder = the_thread;
the_mutex->holder_id = the_thread->Object.id;
46292: 2568 0008 005e movel %a0@(8),%a2@(94)
the_mutex->nest_count = 1;
46298: 2540 0052 movel %d0,%a2@(82)
switch ( the_mutex->Attributes.discipline ) {
4629c: 202a 0046 movel %a2@(70),%d0
462a0: b280 cmpl %d0,%d1
462a2: 670a beqs 462ae <_CORE_mutex_Surrender+0xa6> <== ALWAYS TAKEN
462a4: 123c 0003 moveb #3,%d1 <== NOT EXECUTED
462a8: b280 cmpl %d0,%d1 <== NOT EXECUTED
462aa: 6636 bnes 462e2 <_CORE_mutex_Surrender+0xda> <== NOT EXECUTED
462ac: 6006 bras 462b4 <_CORE_mutex_Surrender+0xac> <== NOT EXECUTED
case CORE_MUTEX_DISCIPLINES_FIFO:
case CORE_MUTEX_DISCIPLINES_PRIORITY:
break;
case CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT:
_CORE_mutex_Push_priority( the_mutex, the_thread );
the_thread->resource_count++;
462ae: 52a8 001c addql #1,%a0@(28)
462b2: 602e bras 462e2 <_CORE_mutex_Surrender+0xda>
break;
case CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING:
_CORE_mutex_Push_priority( the_mutex, the_thread );
the_thread->resource_count++;
if (the_mutex->Attributes.priority_ceiling <
462b4: 202a 004a movel %a2@(74),%d0 <== NOT EXECUTED
_CORE_mutex_Push_priority( the_mutex, the_thread );
the_thread->resource_count++;
break;
case CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING:
_CORE_mutex_Push_priority( the_mutex, the_thread );
the_thread->resource_count++;
462b8: 52a8 001c addql #1,%a0@(28) <== NOT EXECUTED
if (the_mutex->Attributes.priority_ceiling <
462bc: b0a8 0014 cmpl %a0@(20),%d0 <== NOT EXECUTED
462c0: 6420 bccs 462e2 <_CORE_mutex_Surrender+0xda> <== NOT EXECUTED
the_thread->current_priority){
_Thread_Change_priority(
462c2: 42a7 clrl %sp@- <== NOT EXECUTED
462c4: 2f00 movel %d0,%sp@- <== NOT EXECUTED
462c6: 2f08 movel %a0,%sp@- <== NOT EXECUTED
462c8: 4eb9 0004 730c jsr 4730c <_Thread_Change_priority> <== NOT EXECUTED
462ce: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
462d2: 600e bras 462e2 <_CORE_mutex_Surrender+0xda> <== NOT EXECUTED
}
break;
}
}
} else
the_mutex->lock = CORE_MUTEX_UNLOCKED;
462d4: 7001 moveq #1,%d0
462d6: 2540 004e movel %d0,%a2@(78)
return CORE_MUTEX_STATUS_SUCCESSFUL;
462da: 4200 clrb %d0
462dc: 6006 bras 462e4 <_CORE_mutex_Surrender+0xdc>
* must be released by the thread which acquired them.
*/
if ( the_mutex->Attributes.only_owner_release ) {
if ( !_Thread_Is_executing( holder ) )
return CORE_MUTEX_STATUS_NOT_OWNER_OF_RESOURCE;
462de: 7003 moveq #3,%d0 <== NOT EXECUTED
462e0: 6002 bras 462e4 <_CORE_mutex_Surrender+0xdc> <== NOT EXECUTED
}
}
} else
the_mutex->lock = CORE_MUTEX_UNLOCKED;
return CORE_MUTEX_STATUS_SUCCESSFUL;
462e2: 4280 clrl %d0
}
462e4: 246e fffc moveal %fp@(-4),%a2
462e8: 4e5e unlk %fp <== NOT EXECUTED
0004e684 <_CORE_semaphore_Seize>:
Thread_Control *executing;
ISR_Level level;
executing = _Thread_Executing;
executing->Wait.return_code = CORE_SEMAPHORE_STATUS_SUCCESSFUL;
_ISR_Disable( level );
4e684: 223c 0000 0700 movel #1792,%d1 <== NOT EXECUTED
CORE_semaphore_Control *the_semaphore,
Objects_Id id,
bool wait,
Watchdog_Interval timeout
)
{
4e68a: 4e56 fff4 linkw %fp,#-12 <== NOT EXECUTED
Thread_Control *executing;
ISR_Level level;
executing = _Thread_Executing;
4e68e: 2279 0006 2f02 moveal 62f02 <_Per_CPU_Information+0xc>,%a1 <== NOT EXECUTED
CORE_semaphore_Control *the_semaphore,
Objects_Id id,
bool wait,
Watchdog_Interval timeout
)
{
4e694: 48d7 001c moveml %d2-%d4,%sp@ <== NOT EXECUTED
4e698: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4e69c: 262e 000c movel %fp@(12),%d3 <== NOT EXECUTED
4e6a0: 242e 0014 movel %fp@(20),%d2 <== NOT EXECUTED
4e6a4: 182e 0013 moveb %fp@(19),%d4 <== NOT EXECUTED
Thread_Control *executing;
ISR_Level level;
executing = _Thread_Executing;
executing->Wait.return_code = CORE_SEMAPHORE_STATUS_SUCCESSFUL;
4e6a8: 42a9 0034 clrl %a1@(52) <== NOT EXECUTED
_ISR_Disable( level );
4e6ac: 40c0 movew %sr,%d0 <== NOT EXECUTED
4e6ae: 8280 orl %d0,%d1 <== NOT EXECUTED
4e6b0: 46c1 movew %d1,%sr <== NOT EXECUTED
if ( the_semaphore->count != 0 ) {
4e6b2: 2228 0048 movel %a0@(72),%d1 <== NOT EXECUTED
4e6b6: 670a beqs 4e6c2 <_CORE_semaphore_Seize+0x3e> <== NOT EXECUTED
the_semaphore->count -= 1;
4e6b8: 5381 subql #1,%d1 <== NOT EXECUTED
4e6ba: 2141 0048 movel %d1,%a0@(72) <== NOT EXECUTED
_ISR_Enable( level );
4e6be: 46c0 movew %d0,%sr <== NOT EXECUTED
return;
4e6c0: 603c bras 4e6fe <_CORE_semaphore_Seize+0x7a> <== NOT EXECUTED
/*
* If the semaphore was not available and the caller was not willing
* to block, then return immediately with a status indicating that
* the semaphore was not available and the caller never blocked.
*/
if ( !wait ) {
4e6c2: 4a04 tstb %d4 <== NOT EXECUTED
4e6c4: 660a bnes 4e6d0 <_CORE_semaphore_Seize+0x4c> <== NOT EXECUTED
_ISR_Enable( level );
4e6c6: 46c0 movew %d0,%sr <== NOT EXECUTED
executing->Wait.return_code = CORE_SEMAPHORE_STATUS_UNSATISFIED_NOWAIT;
4e6c8: 7001 moveq #1,%d0 <== NOT EXECUTED
4e6ca: 2340 0034 movel %d0,%a1@(52) <== NOT EXECUTED
4e6ce: 602e bras 4e6fe <_CORE_semaphore_Seize+0x7a> <== NOT EXECUTED
4e6d0: 7201 moveq #1,%d1 <== NOT EXECUTED
4e6d2: 2141 0030 movel %d1,%a0@(48) <== NOT EXECUTED
/*
* If the semaphore is not available and the caller is willing to
* block, then we now block the caller with optional timeout.
*/
_Thread_queue_Enter_critical_section( &the_semaphore->Wait_queue );
executing->Wait.queue = &the_semaphore->Wait_queue;
4e6d6: 2348 0044 movel %a0,%a1@(68) <== NOT EXECUTED
executing->Wait.id = id;
4e6da: 2343 0020 movel %d3,%a1@(32) <== NOT EXECUTED
_ISR_Enable( level );
4e6de: 46c0 movew %d0,%sr <== NOT EXECUTED
_Thread_queue_Enqueue( &the_semaphore->Wait_queue, timeout );
4e6e0: 2d42 000c movel %d2,%fp@(12) <== NOT EXECUTED
4e6e4: 203c 0004 b564 movel #308580,%d0 <== NOT EXECUTED
4e6ea: 2d48 0008 movel %a0,%fp@(8) <== NOT EXECUTED
}
4e6ee: 4cd7 001c moveml %sp@,%d2-%d4 <== NOT EXECUTED
*/
_Thread_queue_Enter_critical_section( &the_semaphore->Wait_queue );
executing->Wait.queue = &the_semaphore->Wait_queue;
executing->Wait.id = id;
_ISR_Enable( level );
_Thread_queue_Enqueue( &the_semaphore->Wait_queue, timeout );
4e6f2: 2d40 0010 movel %d0,%fp@(16) <== NOT EXECUTED
}
4e6f6: 4e5e unlk %fp <== NOT EXECUTED
*/
_Thread_queue_Enter_critical_section( &the_semaphore->Wait_queue );
executing->Wait.queue = &the_semaphore->Wait_queue;
executing->Wait.id = id;
_ISR_Enable( level );
_Thread_queue_Enqueue( &the_semaphore->Wait_queue, timeout );
4e6f8: 4ef9 0004 b250 jmp 4b250 <_Thread_queue_Enqueue_with_handler><== NOT EXECUTED
}
4e6fe: 4cd7 001c moveml %sp@,%d2-%d4 <== NOT EXECUTED
4e702: 4e5e unlk %fp <== NOT EXECUTED
...
00046340 <_CORE_semaphore_Surrender>:
CORE_semaphore_Status _CORE_semaphore_Surrender(
CORE_semaphore_Control *the_semaphore,
Objects_Id id,
CORE_semaphore_API_mp_support_callout api_semaphore_mp_support
)
{
46340: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
46344: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46346: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
ISR_Level level;
CORE_semaphore_Status status;
status = CORE_SEMAPHORE_STATUS_SUCCESSFUL;
if ( (the_thread = _Thread_queue_Dequeue(&the_semaphore->Wait_queue)) ) {
4634a: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4634c: 4eb9 0004 7ac8 jsr 47ac8 <_Thread_queue_Dequeue> <== NOT EXECUTED
46352: 588f addql #4,%sp <== NOT EXECUTED
46354: 4a80 tstl %d0 <== NOT EXECUTED
46356: 6624 bnes 4637c <_CORE_semaphore_Surrender+0x3c> <== NOT EXECUTED
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
(*api_semaphore_mp_support) ( the_thread, id );
#endif
} else {
_ISR_Disable( level );
46358: 303c 0700 movew #1792,%d0 <== NOT EXECUTED
4635c: 40c1 movew %sr,%d1 <== NOT EXECUTED
4635e: 8081 orl %d1,%d0 <== NOT EXECUTED
46360: 46c0 movew %d0,%sr <== NOT EXECUTED
if ( the_semaphore->count < the_semaphore->Attributes.maximum_count )
46362: 202a 0048 movel %a2@(72),%d0 <== NOT EXECUTED
46366: b0aa 0040 cmpl %a2@(64),%d0 <== NOT EXECUTED
4636a: 640a bccs 46376 <_CORE_semaphore_Surrender+0x36> <== NOT EXECUTED
the_semaphore->count += 1;
4636c: 5280 addql #1,%d0 <== NOT EXECUTED
4636e: 2540 0048 movel %d0,%a2@(72) <== NOT EXECUTED
{
Thread_Control *the_thread;
ISR_Level level;
CORE_semaphore_Status status;
status = CORE_SEMAPHORE_STATUS_SUCCESSFUL;
46372: 4280 clrl %d0 <== NOT EXECUTED
46374: 6002 bras 46378 <_CORE_semaphore_Surrender+0x38> <== NOT EXECUTED
} else {
_ISR_Disable( level );
if ( the_semaphore->count < the_semaphore->Attributes.maximum_count )
the_semaphore->count += 1;
else
status = CORE_SEMAPHORE_MAXIMUM_COUNT_EXCEEDED;
46376: 7004 moveq #4,%d0 <== NOT EXECUTED
_ISR_Enable( level );
46378: 46c1 movew %d1,%sr <== NOT EXECUTED
4637a: 6002 bras 4637e <_CORE_semaphore_Surrender+0x3e> <== NOT EXECUTED
{
Thread_Control *the_thread;
ISR_Level level;
CORE_semaphore_Status status;
status = CORE_SEMAPHORE_STATUS_SUCCESSFUL;
4637c: 4280 clrl %d0 <== NOT EXECUTED
status = CORE_SEMAPHORE_MAXIMUM_COUNT_EXCEEDED;
_ISR_Enable( level );
}
return status;
}
4637e: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
46382: 4e5e unlk %fp <== NOT EXECUTED
...
00046c84 <_CORE_spinlock_Initialize>:
void _CORE_spinlock_Initialize(
CORE_spinlock_Control *the_spinlock,
CORE_spinlock_Attributes *the_spinlock_attributes
)
{
46c84: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
46c88: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
the_spinlock->Attributes = *the_spinlock_attributes;
46c8c: 226e 000c moveal %fp@(12),%a1 <== NOT EXECUTED
the_spinlock->lock = 0;
the_spinlock->users = 0;
the_spinlock->holder = 0;
}
46c90: 4e5e unlk %fp <== NOT EXECUTED
CORE_spinlock_Control *the_spinlock,
CORE_spinlock_Attributes *the_spinlock_attributes
)
{
the_spinlock->Attributes = *the_spinlock_attributes;
46c92: 2091 movel %a1@,%a0@ <== NOT EXECUTED
the_spinlock->lock = 0;
46c94: 42a8 0004 clrl %a0@(4) <== NOT EXECUTED
the_spinlock->users = 0;
46c98: 42a8 0008 clrl %a0@(8) <== NOT EXECUTED
the_spinlock->holder = 0;
46c9c: 42a8 000c clrl %a0@(12) <== NOT EXECUTED
}
...
00046ca4 <_CORE_spinlock_Release>:
CORE_spinlock_Control *the_spinlock
)
{
ISR_Level level;
_ISR_Disable( level );
46ca4: 223c 0000 0700 movel #1792,%d1 <== NOT EXECUTED
*/
CORE_spinlock_Status _CORE_spinlock_Release(
CORE_spinlock_Control *the_spinlock
)
{
46caa: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
46cae: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
ISR_Level level;
_ISR_Disable( level );
46cb2: 40c0 movew %sr,%d0 <== NOT EXECUTED
46cb4: 8280 orl %d0,%d1 <== NOT EXECUTED
46cb6: 46c1 movew %d1,%sr <== NOT EXECUTED
/*
* It must locked before it can be unlocked.
*/
if ( the_spinlock->lock == CORE_SPINLOCK_UNLOCKED ) {
46cb8: 2228 0004 movel %a0@(4),%d1 <== NOT EXECUTED
46cbc: 6606 bnes 46cc4 <_CORE_spinlock_Release+0x20> <== NOT EXECUTED
_ISR_Enable( level );
46cbe: 46c0 movew %d0,%sr <== NOT EXECUTED
return CORE_SPINLOCK_NOT_LOCKED;
46cc0: 7006 moveq #6,%d0 <== NOT EXECUTED
46cc2: 602c bras 46cf0 <_CORE_spinlock_Release+0x4c> <== NOT EXECUTED
}
/*
* It must locked by the current thread before it can be unlocked.
*/
if ( the_spinlock->holder != _Thread_Executing->Object.id ) {
46cc4: 2228 000c movel %a0@(12),%d1 <== NOT EXECUTED
46cc8: 2279 0005 ef76 moveal 5ef76 <_Per_CPU_Information+0xc>,%a1 <== NOT EXECUTED
46cce: b2a9 0008 cmpl %a1@(8),%d1 <== NOT EXECUTED
46cd2: 6706 beqs 46cda <_CORE_spinlock_Release+0x36> <== NOT EXECUTED
_ISR_Enable( level );
46cd4: 46c0 movew %d0,%sr <== NOT EXECUTED
return CORE_SPINLOCK_NOT_HOLDER;
46cd6: 7002 moveq #2,%d0 <== NOT EXECUTED
46cd8: 6016 bras 46cf0 <_CORE_spinlock_Release+0x4c> <== NOT EXECUTED
}
/*
* Let it be unlocked.
*/
the_spinlock->users -= 1;
46cda: 2228 0008 movel %a0@(8),%d1 <== NOT EXECUTED
46cde: 5381 subql #1,%d1 <== NOT EXECUTED
46ce0: 2141 0008 movel %d1,%a0@(8) <== NOT EXECUTED
the_spinlock->lock = CORE_SPINLOCK_UNLOCKED;
46ce4: 42a8 0004 clrl %a0@(4) <== NOT EXECUTED
the_spinlock->holder = 0;
46ce8: 42a8 000c clrl %a0@(12) <== NOT EXECUTED
_ISR_Enable( level );
46cec: 46c0 movew %d0,%sr <== NOT EXECUTED
return CORE_SPINLOCK_SUCCESSFUL;
46cee: 4280 clrl %d0 <== NOT EXECUTED
}
46cf0: 4e5e unlk %fp <== NOT EXECUTED
00046cf4 <_CORE_spinlock_Wait>:
ISR_Level level;
#if defined(FUNCTIONALITY_NOT_CURRENTLY_USED_BY_ANY_API)
Watchdog_Interval limit = _Watchdog_Ticks_since_boot + timeout;
#endif
_ISR_Disable( level );
46cf4: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
CORE_spinlock_Status _CORE_spinlock_Wait(
CORE_spinlock_Control *the_spinlock,
bool wait,
Watchdog_Interval timeout
)
{
46cfa: 4e56 fff0 linkw %fp,#-16 <== NOT EXECUTED
46cfe: 48d7 0c0c moveml %d2-%d3/%a2-%a3,%sp@ <== NOT EXECUTED
46d02: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
46d06: 162e 000f moveb %fp@(15),%d3 <== NOT EXECUTED
ISR_Level level;
#if defined(FUNCTIONALITY_NOT_CURRENTLY_USED_BY_ANY_API)
Watchdog_Interval limit = _Watchdog_Ticks_since_boot + timeout;
#endif
_ISR_Disable( level );
46d0a: 40c1 movew %sr,%d1 <== NOT EXECUTED
46d0c: 8081 orl %d1,%d0 <== NOT EXECUTED
46d0e: 46c0 movew %d0,%sr <== NOT EXECUTED
46d10: 2001 movel %d1,%d0 <== NOT EXECUTED
if ( (the_spinlock->lock == CORE_SPINLOCK_LOCKED) &&
46d12: 206a 0004 moveal %a2@(4),%a0 <== NOT EXECUTED
46d16: 7401 moveq #1,%d2 <== NOT EXECUTED
46d18: b488 cmpl %a0,%d2 <== NOT EXECUTED
46d1a: 6616 bnes 46d32 <_CORE_spinlock_Wait+0x3e> <== NOT EXECUTED
(the_spinlock->holder == _Thread_Executing->Object.id) ) {
46d1c: 226a 000c moveal %a2@(12),%a1 <== NOT EXECUTED
46d20: 2079 0005 ef76 moveal 5ef76 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
#if defined(FUNCTIONALITY_NOT_CURRENTLY_USED_BY_ANY_API)
Watchdog_Interval limit = _Watchdog_Ticks_since_boot + timeout;
#endif
_ISR_Disable( level );
if ( (the_spinlock->lock == CORE_SPINLOCK_LOCKED) &&
46d26: b3e8 0008 cmpal %a0@(8),%a1 <== NOT EXECUTED
46d2a: 6606 bnes 46d32 <_CORE_spinlock_Wait+0x3e> <== NOT EXECUTED
(the_spinlock->holder == _Thread_Executing->Object.id) ) {
_ISR_Enable( level );
46d2c: 46c1 movew %d1,%sr <== NOT EXECUTED
return CORE_SPINLOCK_HOLDER_RELOCKING;
46d2e: 7001 moveq #1,%d0 <== NOT EXECUTED
46d30: 6068 bras 46d9a <_CORE_spinlock_Wait+0xa6> <== NOT EXECUTED
}
the_spinlock->users += 1;
46d32: 222a 0008 movel %a2@(8),%d1 <== NOT EXECUTED
46d36: 5281 addql #1,%d1 <== NOT EXECUTED
*/
_ISR_Enable( level );
/* An ISR could occur here */
_Thread_Enable_dispatch();
46d38: 47f9 0004 814e lea 4814e <_Thread_Enable_dispatch>,%a3 <== NOT EXECUTED
/* Another thread could get dispatched here */
/* Reenter the critical sections so we can attempt the lock again. */
_Thread_Disable_dispatch();
_ISR_Disable( level );
46d3e: 243c 0000 0700 movel #1792,%d2 <== NOT EXECUTED
if ( (the_spinlock->lock == CORE_SPINLOCK_LOCKED) &&
(the_spinlock->holder == _Thread_Executing->Object.id) ) {
_ISR_Enable( level );
return CORE_SPINLOCK_HOLDER_RELOCKING;
}
the_spinlock->users += 1;
46d44: 2541 0008 movel %d1,%a2@(8) <== NOT EXECUTED
for ( ;; ) {
if ( the_spinlock->lock == CORE_SPINLOCK_UNLOCKED ) {
46d48: 222a 0004 movel %a2@(4),%d1 <== NOT EXECUTED
46d4c: 661c bnes 46d6a <_CORE_spinlock_Wait+0x76> <== NOT EXECUTED
the_spinlock->lock = CORE_SPINLOCK_LOCKED;
the_spinlock->holder = _Thread_Executing->Object.id;
46d4e: 2079 0005 ef76 moveal 5ef76 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
return CORE_SPINLOCK_HOLDER_RELOCKING;
}
the_spinlock->users += 1;
for ( ;; ) {
if ( the_spinlock->lock == CORE_SPINLOCK_UNLOCKED ) {
the_spinlock->lock = CORE_SPINLOCK_LOCKED;
46d54: 123c 0001 moveb #1,%d1 <== NOT EXECUTED
46d58: 2541 0004 movel %d1,%a2@(4) <== NOT EXECUTED
the_spinlock->holder = _Thread_Executing->Object.id;
46d5c: 2228 0008 movel %a0@(8),%d1 <== NOT EXECUTED
46d60: 2541 000c movel %d1,%a2@(12) <== NOT EXECUTED
_ISR_Enable( level );
46d64: 46c0 movew %d0,%sr <== NOT EXECUTED
return CORE_SPINLOCK_SUCCESSFUL;
46d66: 4280 clrl %d0 <== NOT EXECUTED
46d68: 6030 bras 46d9a <_CORE_spinlock_Wait+0xa6> <== NOT EXECUTED
}
/*
* Spinlock is unavailable. If not willing to wait, return.
*/
if ( !wait ) {
46d6a: 4a03 tstb %d3 <== NOT EXECUTED
46d6c: 6610 bnes 46d7e <_CORE_spinlock_Wait+0x8a> <== NOT EXECUTED
the_spinlock->users -= 1;
46d6e: 222a 0008 movel %a2@(8),%d1 <== NOT EXECUTED
46d72: 5381 subql #1,%d1 <== NOT EXECUTED
46d74: 2541 0008 movel %d1,%a2@(8) <== NOT EXECUTED
_ISR_Enable( level );
46d78: 46c0 movew %d0,%sr <== NOT EXECUTED
return CORE_SPINLOCK_UNAVAILABLE;
46d7a: 7005 moveq #5,%d0 <== NOT EXECUTED
46d7c: 601c bras 46d9a <_CORE_spinlock_Wait+0xa6> <== NOT EXECUTED
*
* A spinlock cannot be deleted while it is being used so we are
* safe from deletion.
*/
_ISR_Enable( level );
46d7e: 46c0 movew %d0,%sr <== NOT EXECUTED
/* An ISR could occur here */
_Thread_Enable_dispatch();
46d80: 4e93 jsr %a3@ <== NOT EXECUTED
46d82: 2039 0005 eae8 movel 5eae8 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
46d88: 5280 addql #1,%d0 <== NOT EXECUTED
46d8a: 23c0 0005 eae8 movel %d0,5eae8 <_Thread_Dispatch_disable_level><== NOT EXECUTED
/* Another thread could get dispatched here */
/* Reenter the critical sections so we can attempt the lock again. */
_Thread_Disable_dispatch();
_ISR_Disable( level );
46d90: 2202 movel %d2,%d1 <== NOT EXECUTED
46d92: 40c0 movew %sr,%d0 <== NOT EXECUTED
46d94: 8280 orl %d0,%d1 <== NOT EXECUTED
46d96: 46c1 movew %d1,%sr <== NOT EXECUTED
}
46d98: 60ae bras 46d48 <_CORE_spinlock_Wait+0x54> <== NOT EXECUTED
}
46d9a: 4cee 0c0c fff0 moveml %fp@(-16),%d2-%d3/%a2-%a3 <== NOT EXECUTED
46da0: 4e5e unlk %fp <== NOT EXECUTED
00046674 <_Chain_Append_with_empty_check>:
)
{
ISR_Level level;
bool was_empty;
_ISR_Disable( level );
46674: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
bool _Chain_Append_with_empty_check(
Chain_Control *chain,
Chain_Node *node
)
{
4667a: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4667e: 226e 0008 moveal %fp@(8),%a1 <== NOT EXECUTED
46682: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46684: 206e 000c moveal %fp@(12),%a0 <== NOT EXECUTED
46688: 2f02 movel %d2,%sp@- <== NOT EXECUTED
ISR_Level level;
bool was_empty;
_ISR_Disable( level );
4668a: 40c2 movew %sr,%d2 <== NOT EXECUTED
4668c: 8082 orl %d2,%d0 <== NOT EXECUTED
4668e: 46c0 movew %d0,%sr <== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
46690: 2209 movel %a1,%d1 <== NOT EXECUTED
46692: 5881 addql #4,%d1 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
46694: b291 cmpl %a1@,%d1 <== NOT EXECUTED
46696: 57c0 seq %d0 <== NOT EXECUTED
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
Chain_Node *old_last = tail->previous;
46698: 2469 0008 moveal %a1@(8),%a2 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
4669c: 4480 negl %d0 <== NOT EXECUTED
{
Chain_Node *tail = _Chain_Tail( the_chain );
Chain_Node *old_last = tail->previous;
the_node->next = tail;
tail->previous = the_node;
4669e: 2348 0008 movel %a0,%a1@(8) <== NOT EXECUTED
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
Chain_Node *old_last = tail->previous;
the_node->next = tail;
466a2: 2081 movel %d1,%a0@ <== NOT EXECUTED
tail->previous = the_node;
old_last->next = the_node;
the_node->previous = old_last;
466a4: 214a 0004 movel %a2,%a0@(4) <== NOT EXECUTED
Chain_Node *tail = _Chain_Tail( the_chain );
Chain_Node *old_last = tail->previous;
the_node->next = tail;
tail->previous = the_node;
old_last->next = the_node;
466a8: 2488 movel %a0,%a2@ <== NOT EXECUTED
was_empty = _Chain_Append_with_empty_check_unprotected( chain, node );
_ISR_Enable( level );
466aa: 46c2 movew %d2,%sr <== NOT EXECUTED
return was_empty;
}
466ac: 241f movel %sp@+,%d2 <== NOT EXECUTED
466ae: 245f moveal %sp@+,%a2 <== NOT EXECUTED
466b0: 4e5e unlk %fp <== NOT EXECUTED
00046714 <_Chain_Get_with_empty_check>:
)
{
ISR_Level level;
bool is_empty_now;
_ISR_Disable( level );
46714: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
bool _Chain_Get_with_empty_check(
Chain_Control *chain,
Chain_Node **node
)
{
4671a: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4671e: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
46722: 2f0b movel %a3,%sp@- <== NOT EXECUTED
46724: 266e 000c moveal %fp@(12),%a3 <== NOT EXECUTED
46728: 2f0a movel %a2,%sp@- <== NOT EXECUTED
ISR_Level level;
bool is_empty_now;
_ISR_Disable( level );
4672a: 40c1 movew %sr,%d1 <== NOT EXECUTED
4672c: 8081 orl %d1,%d0 <== NOT EXECUTED
4672e: 46c0 movew %d0,%sr <== NOT EXECUTED
Chain_Node **the_node
)
{
bool is_empty_now = true;
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
46730: 2008 movel %a0,%d0 <== NOT EXECUTED
46732: 5880 addql #4,%d0 <== NOT EXECUTED
Chain_Node *old_first = head->next;
46734: 2450 moveal %a0@,%a2 <== NOT EXECUTED
if ( old_first != tail ) {
46736: b08a cmpl %a2,%d0 <== NOT EXECUTED
46738: 6712 beqs 4674c <_Chain_Get_with_empty_check+0x38><== NOT EXECUTED
Chain_Node *new_first = old_first->next;
4673a: 2252 moveal %a2@,%a1 <== NOT EXECUTED
head->next = new_first;
new_first->previous = head;
*the_node = old_first;
is_empty_now = new_first == tail;
4673c: b089 cmpl %a1,%d0 <== NOT EXECUTED
4673e: 57c0 seq %d0 <== NOT EXECUTED
Chain_Node *old_first = head->next;
if ( old_first != tail ) {
Chain_Node *new_first = old_first->next;
head->next = new_first;
46740: 2089 movel %a1,%a0@ <== NOT EXECUTED
new_first->previous = head;
*the_node = old_first;
is_empty_now = new_first == tail;
46742: 4480 negl %d0 <== NOT EXECUTED
if ( old_first != tail ) {
Chain_Node *new_first = old_first->next;
head->next = new_first;
new_first->previous = head;
46744: 2348 0004 movel %a0,%a1@(4) <== NOT EXECUTED
*the_node = old_first;
46748: 268a movel %a2,%a3@ <== NOT EXECUTED
4674a: 6004 bras 46750 <_Chain_Get_with_empty_check+0x3c><== NOT EXECUTED
is_empty_now = new_first == tail;
} else
*the_node = NULL;
4674c: 4293 clrl %a3@ <== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _Chain_Get_with_empty_check_unprotected(
Chain_Control *the_chain,
Chain_Node **the_node
)
{
bool is_empty_now = true;
4674e: 7001 moveq #1,%d0 <== NOT EXECUTED
is_empty_now = _Chain_Get_with_empty_check_unprotected( chain, node );
_ISR_Enable( level );
46750: 46c1 movew %d1,%sr <== NOT EXECUTED
return is_empty_now;
}
46752: 245f moveal %sp@+,%a2 <== NOT EXECUTED
46754: 265f moveal %sp@+,%a3 <== NOT EXECUTED
46756: 4e5e unlk %fp <== NOT EXECUTED
...
000467c0 <_Chain_Prepend_with_empty_check>:
)
{
ISR_Level level;
bool was_empty;
_ISR_Disable( level );
467c0: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
bool _Chain_Prepend_with_empty_check(
Chain_Control *chain,
Chain_Node *node
)
{
467c6: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
467ca: 226e 0008 moveal %fp@(8),%a1 <== NOT EXECUTED
467ce: 2f0a movel %a2,%sp@- <== NOT EXECUTED
467d0: 206e 000c moveal %fp@(12),%a0 <== NOT EXECUTED
ISR_Level level;
bool was_empty;
_ISR_Disable( level );
467d4: 40c1 movew %sr,%d1 <== NOT EXECUTED
467d6: 8081 orl %d1,%d0 <== NOT EXECUTED
467d8: 46c0 movew %d0,%sr <== NOT EXECUTED
was_empty = _Chain_Prepend_with_empty_check_unprotected( chain, node );
_ISR_Enable( level );
return was_empty;
}
467da: 2451 moveal %a1@,%a2 <== NOT EXECUTED
Chain_Node *the_node
)
{
Chain_Node *before_node;
the_node->previous = after_node;
467dc: 2149 0004 movel %a1,%a0@(4) <== NOT EXECUTED
before_node = after_node->next;
after_node->next = the_node;
467e0: 22c8 movel %a0,%a1@+ <== NOT EXECUTED
the_node->next = before_node;
before_node->previous = the_node;
467e2: 2548 0004 movel %a0,%a2@(4) <== NOT EXECUTED
Chain_Node *before_node;
the_node->previous = after_node;
before_node = after_node->next;
after_node->next = the_node;
the_node->next = before_node;
467e6: 208a movel %a2,%a0@ <== NOT EXECUTED
ISR_Level level;
bool was_empty;
_ISR_Disable( level );
was_empty = _Chain_Prepend_with_empty_check_unprotected( chain, node );
_ISR_Enable( level );
467e8: 46c1 movew %d1,%sr <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
467ea: b3ca cmpal %a2,%a1 <== NOT EXECUTED
467ec: 57c0 seq %d0 <== NOT EXECUTED
return was_empty;
}
467ee: 245f moveal %sp@+,%a2 <== NOT EXECUTED
467f0: 4480 negl %d0 <== NOT EXECUTED
467f2: 4e5e unlk %fp <== NOT EXECUTED
...
000450a4 <_Event_Seize>:
executing = _Thread_Executing;
executing->Wait.return_code = RTEMS_SUCCESSFUL;
api = executing->API_Extensions[ THREAD_API_RTEMS ];
_ISR_Disable( level );
450a4: 203c 0000 0700 movel #1792,%d0
rtems_event_set event_in,
rtems_option option_set,
rtems_interval ticks,
rtems_event_set *event_out
)
{
450aa: 4e56 ffec linkw %fp,#-20
450ae: 226e 0010 moveal %fp@(16),%a1
450b2: 48d7 0c1c moveml %d2-%d4/%a2-%a3,%sp@
rtems_event_set pending_events;
ISR_Level level;
RTEMS_API_Control *api;
Thread_blocking_operation_States sync_state;
executing = _Thread_Executing;
450b6: 2479 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a2
rtems_event_set event_in,
rtems_option option_set,
rtems_interval ticks,
rtems_event_set *event_out
)
{
450bc: 242e 0008 movel %fp@(8),%d2
450c0: 262e 000c movel %fp@(12),%d3
450c4: 206e 0014 moveal %fp@(20),%a0
ISR_Level level;
RTEMS_API_Control *api;
Thread_blocking_operation_States sync_state;
executing = _Thread_Executing;
executing->Wait.return_code = RTEMS_SUCCESSFUL;
450c8: 42aa 0034 clrl %a2@(52)
api = executing->API_Extensions[ THREAD_API_RTEMS ];
450cc: 266a 00fe moveal %a2@(254),%a3
_ISR_Disable( level );
450d0: 40c1 movew %sr,%d1
450d2: 8081 orl %d1,%d0
450d4: 46c0 movew %d0,%sr
pending_events = api->pending_events;
450d6: 2813 movel %a3@,%d4
RTEMS_INLINE_ROUTINE rtems_event_set _Event_sets_Get(
rtems_event_set the_event_set,
rtems_event_set the_event_condition
)
{
return ( the_event_set & the_event_condition );
450d8: 2002 movel %d2,%d0
450da: c084 andl %d4,%d0
seized_events = _Event_sets_Get( pending_events, event_in );
if ( !_Event_sets_Is_empty( seized_events ) &&
450dc: 6716 beqs 450f4 <_Event_Seize+0x50>
450de: b480 cmpl %d0,%d2
450e0: 6706 beqs 450e8 <_Event_Seize+0x44> <== ALWAYS TAKEN
(seized_events == event_in || _Options_Is_any( option_set )) ) {
450e2: 0803 0001 btst #1,%d3 <== NOT EXECUTED
450e6: 670c beqs 450f4 <_Event_Seize+0x50> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE rtems_event_set _Event_sets_Clear(
rtems_event_set the_event_set,
rtems_event_set the_mask
)
{
return ( the_event_set & ~(the_mask) );
450e8: 2400 movel %d0,%d2
450ea: 4682 notl %d2
450ec: c484 andl %d4,%d2
450ee: 2682 movel %d2,%a3@
api->pending_events =
_Event_sets_Clear( pending_events, seized_events );
_ISR_Enable( level );
450f0: 46c1 movew %d1,%sr
450f2: 600e bras 45102 <_Event_Seize+0x5e>
*event_out = seized_events;
return;
}
if ( _Options_Is_no_wait( option_set ) ) {
450f4: 0803 0000 btst #0,%d3
450f8: 670e beqs 45108 <_Event_Seize+0x64> <== ALWAYS TAKEN
_ISR_Enable( level );
450fa: 46c1 movew %d1,%sr <== NOT EXECUTED
executing->Wait.return_code = RTEMS_UNSATISFIED;
450fc: 720d moveq #13,%d1 <== NOT EXECUTED
450fe: 2541 0034 movel %d1,%a2@(52) <== NOT EXECUTED
*event_out = seized_events;
45102: 2080 movel %d0,%a0@
return;
45104: 6000 0096 braw 4519c <_Event_Seize+0xf8>
*
* NOTE: Since interrupts are disabled, this isn't that much of an
* issue but better safe than sorry.
*/
executing->Wait.option = (uint32_t) option_set;
executing->Wait.count = (uint32_t) event_in;
45108: 2542 0024 movel %d2,%a2@(36)
executing->Wait.return_argument = event_out;
_Event_Sync_state = THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
4510c: 7401 moveq #1,%d2
* set properly when we are marked as in the event critical section.
*
* NOTE: Since interrupts are disabled, this isn't that much of an
* issue but better safe than sorry.
*/
executing->Wait.option = (uint32_t) option_set;
4510e: 2543 0030 movel %d3,%a2@(48)
executing->Wait.count = (uint32_t) event_in;
executing->Wait.return_argument = event_out;
45112: 2548 0028 movel %a0,%a2@(40)
_Event_Sync_state = THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
45116: 23c2 0005 e368 movel %d2,5e368 <_Event_Sync_state>
_ISR_Enable( level );
4511c: 46c1 movew %d1,%sr
if ( ticks ) {
4511e: 4a89 tstl %a1
45120: 6730 beqs 45152 <_Event_Seize+0xae>
_Watchdog_Initialize(
45122: 202a 0008 movel %a2@(8),%d0
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
the_watchdog->routine = routine;
45126: 223c 0004 5300 movel #283392,%d1
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
4512c: 42aa 0050 clrl %a2@(80)
the_watchdog->routine = routine;
45130: 2541 0064 movel %d1,%a2@(100)
the_watchdog->id = id;
45134: 2540 0068 movel %d0,%a2@(104)
the_watchdog->user_data = user_data;
45138: 42aa 006c clrl %a2@(108)
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
4513c: 2549 0054 movel %a1,%a2@(84)
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
45140: 486a 0048 pea %a2@(72)
45144: 4879 0005 dbe8 pea 5dbe8 <_Watchdog_Ticks_chain>
4514a: 4eb9 0004 8520 jsr 48520 <_Watchdog_Insert>
45150: 508f addql #8,%sp
NULL
);
_Watchdog_Insert_ticks( &executing->Timer, ticks );
}
_Thread_Set_state( executing, STATES_WAITING_FOR_EVENT );
45152: 4878 0100 pea 100 <DBL_MANT_DIG+0xcb>
45156: 2f0a movel %a2,%sp@-
45158: 4eb9 0004 7f7c jsr 47f7c <_Thread_Set_state>
_ISR_Disable( level );
4515e: 203c 0000 0700 movel #1792,%d0
45164: 40c1 movew %sr,%d1
45166: 8081 orl %d1,%d0
45168: 46c0 movew %d0,%sr
sync_state = _Event_Sync_state;
_Event_Sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
if ( sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED ) {
4516a: 7401 moveq #1,%d2
4516c: 508f addql #8,%sp
_Thread_Set_state( executing, STATES_WAITING_FOR_EVENT );
_ISR_Disable( level );
sync_state = _Event_Sync_state;
4516e: 2039 0005 e368 movel 5e368 <_Event_Sync_state>,%d0
_Event_Sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
45174: 42b9 0005 e368 clrl 5e368 <_Event_Sync_state>
if ( sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED ) {
4517a: b480 cmpl %d0,%d2
4517c: 6604 bnes 45182 <_Event_Seize+0xde> <== NEVER TAKEN
_ISR_Enable( level );
4517e: 46c1 movew %d1,%sr
45180: 601a bras 4519c <_Event_Seize+0xf8>
* An interrupt completed the thread's blocking request.
* The blocking thread was satisfied by an ISR or timed out.
*
* WARNING! Returning with interrupts disabled!
*/
_Thread_blocking_operation_Cancel( sync_state, executing, level );
45182: 2d4a 000c movel %a2,%fp@(12) <== NOT EXECUTED
45186: 2d41 0010 movel %d1,%fp@(16) <== NOT EXECUTED
}
4518a: 4cee 0c1c ffec moveml %fp@(-20),%d2-%d4/%a2-%a3 <== NOT EXECUTED
* An interrupt completed the thread's blocking request.
* The blocking thread was satisfied by an ISR or timed out.
*
* WARNING! Returning with interrupts disabled!
*/
_Thread_blocking_operation_Cancel( sync_state, executing, level );
45190: 2d40 0008 movel %d0,%fp@(8) <== NOT EXECUTED
}
45194: 4e5e unlk %fp <== NOT EXECUTED
* An interrupt completed the thread's blocking request.
* The blocking thread was satisfied by an ISR or timed out.
*
* WARNING! Returning with interrupts disabled!
*/
_Thread_blocking_operation_Cancel( sync_state, executing, level );
45196: 4ef9 0004 72bc jmp 472bc <_Thread_blocking_operation_Cancel><== NOT EXECUTED
}
4519c: 4cee 0c1c ffec moveml %fp@(-20),%d2-%d4/%a2-%a3
451a2: 4e5e unlk %fp
...
000451fc <_Event_Surrender>:
api = the_thread->API_Extensions[ THREAD_API_RTEMS ];
option_set = (rtems_option) the_thread->Wait.option;
_ISR_Disable( level );
451fc: 203c 0000 0700 movel #1792,%d0
*/
void _Event_Surrender(
Thread_Control *the_thread
)
{
45202: 4e56 ffe8 linkw %fp,#-24
45206: 48d7 0c3c moveml %d2-%d5/%a2-%a3,%sp@
4520a: 246e 0008 moveal %fp@(8),%a2
rtems_event_set event_condition;
rtems_event_set seized_events;
rtems_option option_set;
RTEMS_API_Control *api;
api = the_thread->API_Extensions[ THREAD_API_RTEMS ];
4520e: 206a 00fe moveal %a2@(254),%a0
option_set = (rtems_option) the_thread->Wait.option;
45212: 282a 0030 movel %a2@(48),%d4
_ISR_Disable( level );
45216: 40c1 movew %sr,%d1
45218: 8081 orl %d1,%d0
4521a: 46c0 movew %d0,%sr
pending_events = api->pending_events;
event_condition = (rtems_event_set) the_thread->Wait.count;
4521c: 262a 0024 movel %a2@(36),%d3
RTEMS_INLINE_ROUTINE rtems_event_set _Event_sets_Get(
rtems_event_set the_event_set,
rtems_event_set the_event_condition
)
{
return ( the_event_set & the_event_condition );
45220: 2003 movel %d3,%d0
api = the_thread->API_Extensions[ THREAD_API_RTEMS ];
option_set = (rtems_option) the_thread->Wait.option;
_ISR_Disable( level );
pending_events = api->pending_events;
45222: 2410 movel %a0@,%d2
45224: c082 andl %d2,%d0
seized_events = _Event_sets_Get( pending_events, event_condition );
/*
* No events were seized in this operation
*/
if ( _Event_sets_Is_empty( seized_events ) ) {
45226: 6606 bnes 4522e <_Event_Surrender+0x32>
_ISR_Enable( level );
45228: 46c1 movew %d1,%sr
return;
4522a: 6000 00ca braw 452f6 <_Event_Surrender+0xfa>
/*
* If we are in an ISR and sending to the current thread, then
* we have a critical section issue to deal with.
*/
if ( _ISR_Is_in_progress() &&
4522e: 4ab9 0005 df92 tstl 5df92 <_Per_CPU_Information+0x8>
45234: 674a beqs 45280 <_Event_Surrender+0x84> <== ALWAYS TAKEN
45236: b5f9 0005 df96 cmpal 5df96 <_Per_CPU_Information+0xc>,%a2 <== NOT EXECUTED
4523c: 6642 bnes 45280 <_Event_Surrender+0x84> <== NOT EXECUTED
_Thread_Is_executing( the_thread ) &&
((_Event_Sync_state == THREAD_BLOCKING_OPERATION_TIMEOUT) ||
4523e: 2279 0005 e368 moveal 5e368 <_Event_Sync_state>,%a1 <== NOT EXECUTED
/*
* If we are in an ISR and sending to the current thread, then
* we have a critical section issue to deal with.
*/
if ( _ISR_Is_in_progress() &&
_Thread_Is_executing( the_thread ) &&
45244: 7a02 moveq #2,%d5 <== NOT EXECUTED
45246: ba89 cmpl %a1,%d5 <== NOT EXECUTED
45248: 670e beqs 45258 <_Event_Surrender+0x5c> <== NOT EXECUTED
((_Event_Sync_state == THREAD_BLOCKING_OPERATION_TIMEOUT) ||
(_Event_Sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED)) ) {
4524a: 2279 0005 e368 moveal 5e368 <_Event_Sync_state>,%a1 <== NOT EXECUTED
* If we are in an ISR and sending to the current thread, then
* we have a critical section issue to deal with.
*/
if ( _ISR_Is_in_progress() &&
_Thread_Is_executing( the_thread ) &&
((_Event_Sync_state == THREAD_BLOCKING_OPERATION_TIMEOUT) ||
45250: 1a3c 0001 moveb #1,%d5 <== NOT EXECUTED
45254: ba89 cmpl %a1,%d5 <== NOT EXECUTED
45256: 6628 bnes 45280 <_Event_Surrender+0x84> <== NOT EXECUTED
(_Event_Sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED)) ) {
if ( seized_events == event_condition || _Options_Is_any(option_set) ) {
45258: b680 cmpl %d0,%d3 <== NOT EXECUTED
4525a: 6706 beqs 45262 <_Event_Surrender+0x66> <== NOT EXECUTED
4525c: 0804 0001 btst #1,%d4 <== NOT EXECUTED
45260: 671a beqs 4527c <_Event_Surrender+0x80> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE rtems_event_set _Event_sets_Clear(
rtems_event_set the_event_set,
rtems_event_set the_mask
)
{
return ( the_event_set & ~(the_mask) );
45262: 2600 movel %d0,%d3 <== NOT EXECUTED
45264: 4683 notl %d3 <== NOT EXECUTED
45266: c682 andl %d2,%d3 <== NOT EXECUTED
45268: 2083 movel %d3,%a0@ <== NOT EXECUTED
api->pending_events = _Event_sets_Clear( pending_events,seized_events );
the_thread->Wait.count = 0;
*(rtems_event_set *)the_thread->Wait.return_argument = seized_events;
4526a: 206a 0028 moveal %a2@(40),%a0 <== NOT EXECUTED
_Thread_Is_executing( the_thread ) &&
((_Event_Sync_state == THREAD_BLOCKING_OPERATION_TIMEOUT) ||
(_Event_Sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED)) ) {
if ( seized_events == event_condition || _Options_Is_any(option_set) ) {
api->pending_events = _Event_sets_Clear( pending_events,seized_events );
the_thread->Wait.count = 0;
4526e: 42aa 0024 clrl %a2@(36) <== NOT EXECUTED
*(rtems_event_set *)the_thread->Wait.return_argument = seized_events;
45272: 2080 movel %d0,%a0@ <== NOT EXECUTED
_Event_Sync_state = THREAD_BLOCKING_OPERATION_SATISFIED;
45274: 7003 moveq #3,%d0 <== NOT EXECUTED
45276: 23c0 0005 e368 movel %d0,5e368 <_Event_Sync_state> <== NOT EXECUTED
}
_ISR_Enable( level );
4527c: 46c1 movew %d1,%sr <== NOT EXECUTED
return;
4527e: 6076 bras 452f6 <_Event_Surrender+0xfa> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE bool _States_Is_waiting_for_event (
States_Control the_states
)
{
return (the_states & STATES_WAITING_FOR_EVENT);
45280: 2a2a 0010 movel %a2@(16),%d5
45284: 0285 0000 0100 andil #256,%d5
}
/*
* Otherwise, this is a normal send to another thread
*/
if ( _States_Is_waiting_for_event( the_thread->current_state ) ) {
4528a: 6768 beqs 452f4 <_Event_Surrender+0xf8> <== NEVER TAKEN
if ( seized_events == event_condition || _Options_Is_any( option_set ) ) {
4528c: b680 cmpl %d0,%d3
4528e: 6706 beqs 45296 <_Event_Surrender+0x9a> <== ALWAYS TAKEN
45290: 0804 0001 btst #1,%d4 <== NOT EXECUTED
45294: 675e beqs 452f4 <_Event_Surrender+0xf8> <== NOT EXECUTED
45296: 2600 movel %d0,%d3
45298: 4683 notl %d3
4529a: c682 andl %d2,%d3
4529c: 2083 movel %d3,%a0@
api->pending_events = _Event_sets_Clear( pending_events, seized_events );
the_thread->Wait.count = 0;
*(rtems_event_set *)the_thread->Wait.return_argument = seized_events;
4529e: 206a 0028 moveal %a2@(40),%a0
* Otherwise, this is a normal send to another thread
*/
if ( _States_Is_waiting_for_event( the_thread->current_state ) ) {
if ( seized_events == event_condition || _Options_Is_any( option_set ) ) {
api->pending_events = _Event_sets_Clear( pending_events, seized_events );
the_thread->Wait.count = 0;
452a2: 42aa 0024 clrl %a2@(36)
*(rtems_event_set *)the_thread->Wait.return_argument = seized_events;
452a6: 2080 movel %d0,%a0@
_ISR_Flash( level );
452a8: 203c 0000 0700 movel #1792,%d0
452ae: 46c1 movew %d1,%sr
452b0: 8081 orl %d1,%d0
452b2: 46c0 movew %d0,%sr
452b4: 47f9 0004 7448 lea 47448 <_Thread_Clear_state>,%a3
if ( !_Watchdog_Is_active( &the_thread->Timer ) ) {
452ba: 7a02 moveq #2,%d5
452bc: baaa 0050 cmpl %a2@(80),%d5
452c0: 6710 beqs 452d2 <_Event_Surrender+0xd6>
_ISR_Enable( level );
452c2: 46c1 movew %d1,%sr
RTEMS_INLINE_ROUTINE void _Thread_Unblock (
Thread_Control *the_thread
)
{
_Thread_Clear_state( the_thread, STATES_BLOCKED );
452c4: 2f3c 1003 fff8 movel #268697592,%sp@-
452ca: 2f0a movel %a2,%sp@-
452cc: 4e93 jsr %a3@
452ce: 508f addql #8,%sp
452d0: 6024 bras 452f6 <_Event_Surrender+0xfa>
RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate(
Watchdog_Control *the_watchdog
)
{
the_watchdog->state = WATCHDOG_REMOVE_IT;
452d2: 7003 moveq #3,%d0
452d4: 2540 0050 movel %d0,%a2@(80)
_Thread_Unblock( the_thread );
} else {
_Watchdog_Deactivate( &the_thread->Timer );
_ISR_Enable( level );
452d8: 46c1 movew %d1,%sr
(void) _Watchdog_Remove( &the_thread->Timer );
452da: 486a 0048 pea %a2@(72)
452de: 4eb9 0004 863c jsr 4863c <_Watchdog_Remove>
452e4: 2f3c 1003 fff8 movel #268697592,%sp@-
452ea: 2f0a movel %a2,%sp@-
452ec: 4e93 jsr %a3@
452ee: 4fef 000c lea %sp@(12),%sp
452f2: 6002 bras 452f6 <_Event_Surrender+0xfa>
_Thread_Unblock( the_thread );
}
return;
}
}
_ISR_Enable( level );
452f4: 46c1 movew %d1,%sr <== NOT EXECUTED
}
452f6: 4cee 0c3c ffe8 moveml %fp@(-24),%d2-%d5/%a2-%a3
452fc: 4e5e unlk %fp <== NOT EXECUTED
00045300 <_Event_Timeout>:
void _Event_Timeout(
Objects_Id id,
void *ignored
)
{
45300: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
45304: 2f03 movel %d3,%sp@- <== NOT EXECUTED
45306: 2f02 movel %d2,%sp@- <== NOT EXECUTED
Thread_Control *the_thread;
Objects_Locations location;
ISR_Level level;
the_thread = _Thread_Get( id, &location );
45308: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4530c: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
45310: 4eb9 0004 77cc jsr 477cc <_Thread_Get> <== NOT EXECUTED
switch ( location ) {
45316: 508f addql #8,%sp <== NOT EXECUTED
45318: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4531c: 6656 bnes 45374 <_Event_Timeout+0x74> <== NOT EXECUTED
*
* If it is not satisfied, then it is "nothing happened" and
* this is the "timeout" transition. After a request is satisfied,
* a timeout is not allowed to occur.
*/
_ISR_Disable( level );
4531e: 223c 0000 0700 movel #1792,%d1 <== NOT EXECUTED
45324: 40c2 movew %sr,%d2 <== NOT EXECUTED
45326: 8282 orl %d2,%d1 <== NOT EXECUTED
45328: 46c1 movew %d1,%sr <== NOT EXECUTED
_ISR_Enable( level );
return;
}
#endif
the_thread->Wait.count = 0;
4532a: 2040 moveal %d0,%a0 <== NOT EXECUTED
4532c: 42a8 0024 clrl %a0@(36) <== NOT EXECUTED
if ( _Thread_Is_executing( the_thread ) ) {
45330: b0b9 0005 df96 cmpl 5df96 <_Per_CPU_Information+0xc>,%d0 <== NOT EXECUTED
45336: 6614 bnes 4534c <_Event_Timeout+0x4c> <== NOT EXECUTED
if ( _Event_Sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )
45338: 2239 0005 e368 movel 5e368 <_Event_Sync_state>,%d1 <== NOT EXECUTED
4533e: 7601 moveq #1,%d3 <== NOT EXECUTED
45340: b681 cmpl %d1,%d3 <== NOT EXECUTED
45342: 6608 bnes 4534c <_Event_Timeout+0x4c> <== NOT EXECUTED
_Event_Sync_state = THREAD_BLOCKING_OPERATION_TIMEOUT;
45344: 7202 moveq #2,%d1 <== NOT EXECUTED
45346: 23c1 0005 e368 movel %d1,5e368 <_Event_Sync_state> <== NOT EXECUTED
}
the_thread->Wait.return_code = RTEMS_TIMEOUT;
4534c: 7606 moveq #6,%d3 <== NOT EXECUTED
4534e: 2040 moveal %d0,%a0 <== NOT EXECUTED
45350: 2143 0034 movel %d3,%a0@(52) <== NOT EXECUTED
_ISR_Enable( level );
45354: 46c2 movew %d2,%sr <== NOT EXECUTED
45356: 2f3c 1003 fff8 movel #268697592,%sp@- <== NOT EXECUTED
4535c: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4535e: 4eb9 0004 7448 jsr 47448 <_Thread_Clear_state> <== NOT EXECUTED
_Thread_Unblock( the_thread );
_Thread_Unnest_dispatch();
break;
45364: 508f addql #8,%sp <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void )
{
RTEMS_COMPILER_MEMORY_BARRIER();
_Thread_Dispatch_disable_level -= 1;
45366: 2039 0005 db08 movel 5db08 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
4536c: 5380 subql #1,%d0 <== NOT EXECUTED
4536e: 23c0 0005 db08 movel %d0,5db08 <_Thread_Dispatch_disable_level><== NOT EXECUTED
case OBJECTS_REMOTE: /* impossible */
#endif
case OBJECTS_ERROR:
break;
}
}
45374: 242e fff4 movel %fp@(-12),%d2 <== NOT EXECUTED
45378: 262e fff8 movel %fp@(-8),%d3 <== NOT EXECUTED
4537c: 4e5e unlk %fp <== NOT EXECUTED
0004ab6c <_Heap_Allocate_aligned_with_boundary>:
Heap_Control *heap,
uintptr_t alloc_size,
uintptr_t alignment,
uintptr_t boundary
)
{
4ab6c: 4e56 ffbc linkw %fp,#-68
4ab70: 202e 000c movel %fp@(12),%d0
4ab74: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
4ab78: 246e 0008 moveal %fp@(8),%a2
Heap_Statistics *const stats = &heap->stats;
uintptr_t const block_size_floor = alloc_size + HEAP_BLOCK_HEADER_SIZE
4ab7c: 2e00 movel %d0,%d7
4ab7e: 5887 addql #4,%d7
Heap_Control *heap,
uintptr_t alloc_size,
uintptr_t alignment,
uintptr_t boundary
)
{
4ab80: 222e 0010 movel %fp@(16),%d1
4ab84: 2a2e 0014 movel %fp@(20),%d5
Heap_Statistics *const stats = &heap->stats;
uintptr_t const block_size_floor = alloc_size + HEAP_BLOCK_HEADER_SIZE
- HEAP_ALLOC_BONUS;
uintptr_t const page_size = heap->page_size;
4ab88: 2c2a 0010 movel %a2@(16),%d6
Heap_Block *block = NULL;
uintptr_t alloc_begin = 0;
uint32_t search_count = 0;
bool search_again = false;
if ( block_size_floor < alloc_size ) {
4ab8c: b087 cmpl %d7,%d0
4ab8e: 6200 014e bhiw 4acde <_Heap_Allocate_aligned_with_boundary+0x172>
/* Integer overflow occured */
return NULL;
}
if ( boundary != 0 ) {
4ab92: 4a85 tstl %d5
4ab94: 670c beqs 4aba2 <_Heap_Allocate_aligned_with_boundary+0x36><== ALWAYS TAKEN
if ( boundary < alloc_size ) {
4ab96: b085 cmpl %d5,%d0 <== NOT EXECUTED
4ab98: 6200 0144 bhiw 4acde <_Heap_Allocate_aligned_with_boundary+0x172><== NOT EXECUTED
return NULL;
}
if ( alignment == 0 ) {
4ab9c: 4a81 tstl %d1 <== NOT EXECUTED
4ab9e: 6602 bnes 4aba2 <_Heap_Allocate_aligned_with_boundary+0x36><== NOT EXECUTED
alignment = page_size;
4aba0: 2206 movel %d6,%d1 <== NOT EXECUTED
uintptr_t const block_begin = (uintptr_t) block;
uintptr_t const block_size = _Heap_Block_size( block );
uintptr_t const block_end = block_begin + block_size;
uintptr_t const alloc_begin_floor = _Heap_Alloc_area_of_block( block );
uintptr_t const alloc_begin_ceiling = block_end - min_block_size
4aba2: 2406 movel %d6,%d2
+ HEAP_BLOCK_HEADER_SIZE + page_size - 1;
uintptr_t alloc_end = block_end + HEAP_ALLOC_BONUS;
4aba4: 7804 moveq #4,%d4
uintptr_t const block_begin = (uintptr_t) block;
uintptr_t const block_size = _Heap_Block_size( block );
uintptr_t const block_end = block_begin + block_size;
uintptr_t const alloc_begin_floor = _Heap_Alloc_area_of_block( block );
uintptr_t const alloc_begin_ceiling = block_end - min_block_size
4aba6: 5e82 addql #7,%d2
+ HEAP_BLOCK_HEADER_SIZE + page_size - 1;
uintptr_t alloc_end = block_end + HEAP_ALLOC_BONUS;
4aba8: 9880 subl %d0,%d4
do {
Heap_Block *const free_list_tail = _Heap_Free_list_tail( heap );
block = _Heap_Free_list_first( heap );
while ( block != free_list_tail ) {
4abaa: 4283 clrl %d3
if ( stats->max_search < search_count ) {
stats->max_search = search_count;
}
return (void *) alloc_begin;
}
4abac: 206a 0008 moveal %a2@(8),%a0
uintptr_t const block_begin = (uintptr_t) block;
uintptr_t const block_size = _Heap_Block_size( block );
uintptr_t const block_end = block_begin + block_size;
uintptr_t const alloc_begin_floor = _Heap_Alloc_area_of_block( block );
uintptr_t const alloc_begin_ceiling = block_end - min_block_size
4abb0: 2d42 fff8 movel %d2,%fp@(-8)
+ HEAP_BLOCK_HEADER_SIZE + page_size - 1;
uintptr_t alloc_end = block_end + HEAP_ALLOC_BONUS;
4abb4: 2d44 fff4 movel %d4,%fp@(-12)
4abb8: 2d47 ffe4 movel %d7,%fp@(-28)
4abbc: 2d46 ffec movel %d6,%fp@(-20)
do {
Heap_Block *const free_list_tail = _Heap_Free_list_tail( heap );
block = _Heap_Free_list_first( heap );
while ( block != free_list_tail ) {
4abc0: 6000 00ea braw 4acac <_Heap_Allocate_aligned_with_boundary+0x140>
/*
* The HEAP_PREV_BLOCK_USED flag is always set in the block size_and_flag
* field. Thus the value is about one unit larger than the real block
* size. The greater than operator takes this into account.
*/
if ( block->size_and_flag > block_size_floor ) {
4abc4: 2428 0004 movel %a0@(4),%d2
4abc8: b4ae ffe4 cmpl %fp@(-28),%d2
4abcc: 6300 00d2 blsw 4aca0 <_Heap_Allocate_aligned_with_boundary+0x134>
4abd0: 43e8 0008 lea %a0@(8),%a1
if ( alignment == 0 ) {
4abd4: 4a81 tstl %d1
4abd6: 6606 bnes 4abde <_Heap_Allocate_aligned_with_boundary+0x72>
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Alloc_area_of_block(
const Heap_Block *block
)
{
return (uintptr_t) block + HEAP_BLOCK_HEADER_SIZE;
4abd8: 2409 movel %a1,%d2
4abda: 6000 00c6 braw 4aca2 <_Heap_Allocate_aligned_with_boundary+0x136>
- 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;
4abde: 7cfe moveq #-2,%d6
uintptr_t alignment,
uintptr_t boundary
)
{
uintptr_t const page_size = heap->page_size;
uintptr_t const min_block_size = heap->min_block_size;
4abe0: 266a 0014 moveal %a2@(20),%a3
4abe4: c486 andl %d6,%d2
uintptr_t const block_size = _Heap_Block_size( block );
uintptr_t const block_end = block_begin + block_size;
uintptr_t const alloc_begin_floor = _Heap_Alloc_area_of_block( block );
uintptr_t const alloc_begin_ceiling = block_end - min_block_size
+ HEAP_BLOCK_HEADER_SIZE + page_size - 1;
4abe6: 282e fff8 movel %fp@(-8),%d4
4abea: 988b subl %a3,%d4
uintptr_t const page_size = heap->page_size;
uintptr_t const min_block_size = heap->min_block_size;
uintptr_t const block_begin = (uintptr_t) block;
uintptr_t const block_size = _Heap_Block_size( block );
uintptr_t const block_end = block_begin + block_size;
4abec: d488 addl %a0,%d2
uintptr_t const alloc_begin_floor = _Heap_Alloc_area_of_block( block );
uintptr_t const alloc_begin_ceiling = block_end - min_block_size
4abee: 2c04 movel %d4,%d6
4abf0: dc82 addl %d2,%d6
+ HEAP_BLOCK_HEADER_SIZE + page_size - 1;
uintptr_t alloc_end = block_end + HEAP_ALLOC_BONUS;
uintptr_t alloc_begin = alloc_end - alloc_size;
4abf2: d4ae fff4 addl %fp@(-12),%d2
4abf6: 2d42 fffc movel %d2,%fp@(-4)
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(
uintptr_t value,
uintptr_t alignment
)
{
return value - (value % alignment);
4abfa: 4c41 2007 remul %d1,%d7,%d2
4abfe: 242e fffc movel %fp@(-4),%d2
4ac02: 9487 subl %d7,%d2
alloc_begin = _Heap_Align_down( alloc_begin, alignment );
/* Ensure that the we have a valid new block at the end */
if ( alloc_begin > alloc_begin_ceiling ) {
4ac04: bc82 cmpl %d2,%d6
4ac06: 640a bccs 4ac12 <_Heap_Allocate_aligned_with_boundary+0xa6><== ALWAYS TAKEN
4ac08: 2806 movel %d6,%d4 <== NOT EXECUTED
4ac0a: 4c41 4002 remul %d1,%d2,%d4 <== NOT EXECUTED
4ac0e: 9c82 subl %d2,%d6 <== NOT EXECUTED
4ac10: 2406 movel %d6,%d2 <== NOT EXECUTED
}
alloc_end = alloc_begin + alloc_size;
/* Ensure boundary constaint */
if ( boundary != 0 ) {
4ac12: 4a85 tstl %d5
4ac14: 675c beqs 4ac72 <_Heap_Allocate_aligned_with_boundary+0x106><== ALWAYS TAKEN
/* Ensure that the we have a valid new block at the end */
if ( alloc_begin > alloc_begin_ceiling ) {
alloc_begin = _Heap_Align_down( alloc_begin_ceiling, alignment );
}
alloc_end = alloc_begin + alloc_size;
4ac16: 2c02 movel %d2,%d6 <== NOT EXECUTED
4ac18: dc80 addl %d0,%d6 <== NOT EXECUTED
/* Ensure boundary constaint */
if ( boundary != 0 ) {
uintptr_t const boundary_floor = alloc_begin_floor + alloc_size;
4ac1a: 49f1 0800 lea %a1@(00000000,%d0:l),%a4 <== NOT EXECUTED
/* Ensure that the we have a valid new block at the end */
if ( alloc_begin > alloc_begin_ceiling ) {
alloc_begin = _Heap_Align_down( alloc_begin_ceiling, alignment );
}
alloc_end = alloc_begin + alloc_size;
4ac1e: 2d46 fff0 movel %d6,%fp@(-16) <== NOT EXECUTED
4ac22: 2a6e fff0 moveal %fp@(-16),%a5 <== NOT EXECUTED
4ac26: 4c45 6004 remul %d5,%d4,%d6 <== NOT EXECUTED
/* Ensure boundary constaint */
if ( boundary != 0 ) {
uintptr_t const boundary_floor = alloc_begin_floor + alloc_size;
4ac2a: 2d4c fffc movel %a4,%fp@(-4) <== NOT EXECUTED
4ac2e: 2e2e ffe4 movel %fp@(-28),%d7 <== NOT EXECUTED
4ac32: 9bc4 subal %d4,%a5 <== NOT EXECUTED
4ac34: 284d moveal %a5,%a4 <== NOT EXECUTED
4ac36: 2d43 ffe8 movel %d3,%fp@(-24) <== NOT EXECUTED
4ac3a: 282e fff0 movel %fp@(-16),%d4 <== NOT EXECUTED
4ac3e: 6022 bras 4ac62 <_Heap_Allocate_aligned_with_boundary+0xf6><== NOT EXECUTED
uintptr_t boundary_line = _Heap_Align_down( alloc_end, boundary );
while ( alloc_begin < boundary_line && boundary_line < alloc_end ) {
if ( boundary_line < boundary_floor ) {
4ac40: b9ee fffc cmpal %fp@(-4),%a4 <== NOT EXECUTED
4ac44: 6552 bcss 4ac98 <_Heap_Allocate_aligned_with_boundary+0x12c><== NOT EXECUTED
return 0;
}
alloc_begin = boundary_line - alloc_size;
4ac46: 240c movel %a4,%d2 <== NOT EXECUTED
4ac48: 9480 subl %d0,%d2 <== NOT EXECUTED
4ac4a: 2802 movel %d2,%d4 <== NOT EXECUTED
4ac4c: 4c41 4003 remul %d1,%d3,%d4 <== NOT EXECUTED
4ac50: 9483 subl %d3,%d2 <== NOT EXECUTED
alloc_begin = _Heap_Align_down( alloc_begin, alignment );
alloc_end = alloc_begin + alloc_size;
4ac52: 2802 movel %d2,%d4 <== NOT EXECUTED
4ac54: d880 addl %d0,%d4 <== NOT EXECUTED
4ac56: 2c04 movel %d4,%d6 <== NOT EXECUTED
4ac58: 2a44 moveal %d4,%a5 <== NOT EXECUTED
4ac5a: 4c45 6003 remul %d5,%d3,%d6 <== NOT EXECUTED
4ac5e: 9bc3 subal %d3,%a5 <== NOT EXECUTED
4ac60: 284d moveal %a5,%a4 <== NOT EXECUTED
/* Ensure boundary constaint */
if ( boundary != 0 ) {
uintptr_t const boundary_floor = alloc_begin_floor + alloc_size;
uintptr_t boundary_line = _Heap_Align_down( alloc_end, boundary );
while ( alloc_begin < boundary_line && boundary_line < alloc_end ) {
4ac62: b9c2 cmpal %d2,%a4 <== NOT EXECUTED
4ac64: 6304 blss 4ac6a <_Heap_Allocate_aligned_with_boundary+0xfe><== NOT EXECUTED
4ac66: b88c cmpl %a4,%d4 <== NOT EXECUTED
4ac68: 62d6 bhis 4ac40 <_Heap_Allocate_aligned_with_boundary+0xd4><== NOT EXECUTED
4ac6a: 262e ffe8 movel %fp@(-24),%d3 <== NOT EXECUTED
4ac6e: 2d47 ffe4 movel %d7,%fp@(-28) <== NOT EXECUTED
boundary_line = _Heap_Align_down( alloc_end, boundary );
}
}
/* Ensure that the we have a valid new block at the beginning */
if ( alloc_begin >= alloc_begin_floor ) {
4ac72: b3c2 cmpal %d2,%a1
4ac74: 622a bhis 4aca0 <_Heap_Allocate_aligned_with_boundary+0x134><== NEVER TAKEN
4ac76: 2c2e ffec movel %fp@(-20),%d6
4ac7a: 2802 movel %d2,%d4
4ac7c: 327c fff8 moveaw #-8,%a1
4ac80: 93c8 subal %a0,%a1
uintptr_t alloc_begin,
uintptr_t page_size
)
{
return (Heap_Block *) (_Heap_Align_down( alloc_begin, page_size )
- HEAP_BLOCK_HEADER_SIZE);
4ac82: d3c2 addal %d2,%a1
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(
uintptr_t value,
uintptr_t alignment
)
{
return value - (value % alignment);
4ac84: 4c46 4007 remul %d6,%d7,%d4
uintptr_t const alloc_block_begin =
(uintptr_t) _Heap_Block_of_alloc_area( alloc_begin, page_size );
uintptr_t const free_size = alloc_block_begin - block_begin;
4ac88: 93c7 subal %d7,%a1
if ( free_size >= min_block_size || free_size == 0 ) {
4ac8a: b7c9 cmpal %a1,%a3
4ac8c: 6314 blss 4aca2 <_Heap_Allocate_aligned_with_boundary+0x136><== ALWAYS TAKEN
return alloc_begin;
}
}
return 0;
4ac8e: 4a89 tstl %a1 <== NOT EXECUTED
4ac90: 57c4 seq %d4 <== NOT EXECUTED
4ac92: 49c4 extbl %d4 <== NOT EXECUTED
4ac94: c484 andl %d4,%d2 <== NOT EXECUTED
4ac96: 600a bras 4aca2 <_Heap_Allocate_aligned_with_boundary+0x136><== NOT EXECUTED
4ac98: 262e ffe8 movel %fp@(-24),%d3 <== NOT EXECUTED
4ac9c: 2d47 ffe4 movel %d7,%fp@(-28) <== NOT EXECUTED
4aca0: 4282 clrl %d2
);
}
}
/* Statistics */
++search_count;
4aca2: 5283 addql #1,%d3
if ( alloc_begin != 0 ) {
4aca4: 4a82 tstl %d2
4aca6: 660e bnes 4acb6 <_Heap_Allocate_aligned_with_boundary+0x14a>
break;
}
block = block->next;
4aca8: 2068 0008 moveal %a0@(8),%a0
do {
Heap_Block *const free_list_tail = _Heap_Free_list_tail( heap );
block = _Heap_Free_list_first( heap );
while ( block != free_list_tail ) {
4acac: b5c8 cmpal %a0,%a2
4acae: 6600 ff14 bnew 4abc4 <_Heap_Allocate_aligned_with_boundary+0x58>
4acb2: 4282 clrl %d2
4acb4: 601a bras 4acd0 <_Heap_Allocate_aligned_with_boundary+0x164>
search_again = _Heap_Protection_free_delayed_blocks( heap, alloc_begin );
} while ( search_again );
if ( alloc_begin != 0 ) {
/* Statistics */
++stats->allocs;
4acb6: 52aa 0048 addql #1,%a2@(72)
stats->searches += search_count;
4acba: d7aa 004c addl %d3,%a2@(76)
block = _Heap_Block_allocate( heap, block, alloc_begin, alloc_size );
4acbe: 2f00 movel %d0,%sp@-
4acc0: 2f02 movel %d2,%sp@-
4acc2: 2f08 movel %a0,%sp@-
4acc4: 2f0a movel %a2,%sp@-
4acc6: 4eb9 0004 66d2 jsr 466d2 <_Heap_Block_allocate>
4accc: 4fef 0010 lea %sp@(16),%sp
boundary
);
}
/* Statistics */
if ( stats->max_search < search_count ) {
4acd0: b6aa 0044 cmpl %a2@(68),%d3
4acd4: 6304 blss 4acda <_Heap_Allocate_aligned_with_boundary+0x16e>
stats->max_search = search_count;
4acd6: 2543 0044 movel %d3,%a2@(68)
}
return (void *) alloc_begin;
4acda: 2002 movel %d2,%d0
4acdc: 6002 bras 4ace0 <_Heap_Allocate_aligned_with_boundary+0x174>
return NULL;
}
if ( boundary != 0 ) {
if ( boundary < alloc_size ) {
return NULL;
4acde: 4280 clrl %d0 <== NOT EXECUTED
if ( stats->max_search < search_count ) {
stats->max_search = search_count;
}
return (void *) alloc_begin;
}
4ace0: 4cee 3cfc ffbc moveml %fp@(-68),%d2-%d7/%a2-%a5
4ace6: 4e5e unlk %fp
...
000466d2 <_Heap_Block_allocate>:
- HEAP_BLOCK_HEADER_SIZE);
}
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Block_size( const Heap_Block *block )
{
return block->size_and_flag & ~HEAP_PREV_BLOCK_USED;
466d2: 70fe moveq #-2,%d0
Heap_Control *heap,
Heap_Block *block,
uintptr_t alloc_begin,
uintptr_t alloc_size
)
{
466d4: 4e56 ffe0 linkw %fp,#-32
466d8: 222e 0010 movel %fp@(16),%d1
466dc: 48d7 3c3c moveml %d2-%d5/%a2-%a5,%sp@
466e0: 246e 000c moveal %fp@(12),%a2
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;
466e4: 7801 moveq #1,%d4
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Alloc_area_of_block(
const Heap_Block *block
)
{
return (uintptr_t) block + HEAP_BLOCK_HEADER_SIZE;
466e6: 2841 moveal %d1,%a4
466e8: 518c subql #8,%a4
Heap_Statistics *const stats = &heap->stats;
uintptr_t const alloc_area_begin = _Heap_Alloc_area_of_block( block );
uintptr_t const alloc_area_offset = alloc_begin - alloc_area_begin;
466ea: 260c movel %a4,%d3
466ec: 968a subl %a2,%d3
}
_Heap_Protection_block_initialize( heap, block );
return block;
}
466ee: 242a 0004 movel %a2@(4),%d2
- 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;
466f2: c082 andl %d2,%d0
Heap_Control *heap,
Heap_Block *block,
uintptr_t alloc_begin,
uintptr_t alloc_size
)
{
466f4: 266e 0008 moveal %fp@(8),%a3
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
466f8: 4bf2 0800 lea %a2@(00000000,%d0:l),%a5
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;
466fc: c8ad 0004 andl %a5@(4),%d4
46700: 2a2e 0014 movel %fp@(20),%d5
Heap_Block *free_list_anchor = NULL;
_HAssert( alloc_area_begin <= alloc_begin );
if ( _Heap_Is_free( block ) ) {
46704: 4a84 tstl %d4
46706: 6620 bnes 46728 <_Heap_Block_allocate+0x56> <== NEVER TAKEN
return _Heap_Free_list_tail(heap)->prev;
}
RTEMS_INLINE_ROUTINE void _Heap_Free_list_remove( Heap_Block *block )
{
Heap_Block *next = block->next;
46708: 282a 0008 movel %a2@(8),%d4
Heap_Block *prev = block->prev;
prev->next = next;
next->prev = prev;
4670c: 2244 moveal %d4,%a1
free_list_anchor = block->prev;
4670e: 206a 000c moveal %a2@(12),%a0
RTEMS_INLINE_ROUTINE void _Heap_Free_list_remove( Heap_Block *block )
{
Heap_Block *next = block->next;
Heap_Block *prev = block->prev;
prev->next = next;
46712: 2144 0008 movel %d4,%a0@(8)
next->prev = prev;
46716: 2348 000c movel %a0,%a1@(12)
_Heap_Free_list_remove( block );
/* Statistics */
--stats->free_blocks;
4671a: 53ab 0038 subql #1,%a3@(56)
++stats->used_blocks;
4671e: 52ab 0040 addql #1,%a3@(64)
stats->free_size -= _Heap_Block_size( block );
46722: 91ab 0030 subl %d0,%a3@(48)
46726: 6002 bras 4672a <_Heap_Block_allocate+0x58>
} else {
free_list_anchor = _Heap_Free_list_head( heap );
46728: 204b moveal %a3,%a0 <== NOT EXECUTED
}
if ( alloc_area_offset < heap->page_size ) {
4672a: 202b 0010 movel %a3@(16),%d0
4672e: b083 cmpl %d3,%d0
46730: 6316 blss 46748 <_Heap_Block_allocate+0x76>
Heap_Block *block,
Heap_Block *free_list_anchor,
uintptr_t alloc_size
)
{
_Heap_Block_split( heap, block, free_list_anchor, alloc_size );
46732: 2243 moveal %d3,%a1
46734: 4871 5800 pea %a1@(00000000,%d5:l)
46738: 2f08 movel %a0,%sp@-
4673a: 2f0a movel %a2,%sp@-
4673c: 2f0b movel %a3,%sp@-
4673e: 4eba fd5c jsr %pc@(4649c <_Heap_Block_split>)
46742: 4fef 0010 lea %sp@(16),%sp
46746: 605e bras 467a6 <_Heap_Block_allocate+0xd4>
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(
uintptr_t value,
uintptr_t alignment
)
{
return value - (value % alignment);
46748: 4c40 1003 remul %d0,%d3,%d1
uintptr_t block_end = block_begin + block_size;
Heap_Block *const new_block =
_Heap_Block_of_alloc_area( alloc_begin, heap->page_size );
uintptr_t const new_block_begin = (uintptr_t) new_block;
uintptr_t const new_block_size = block_end - new_block_begin;
4674c: 220d movel %a5,%d1
uintptr_t alloc_begin,
uintptr_t page_size
)
{
return (Heap_Block *) (_Heap_Align_down( alloc_begin, page_size )
- HEAP_BLOCK_HEADER_SIZE);
4674e: 99c3 subal %d3,%a4
block_end = new_block_begin;
block_size = block_end - block_begin;
46750: 200c movel %a4,%d0
46752: 908a subl %a2,%d0
_HAssert( block_size >= heap->min_block_size );
_HAssert( new_block_size >= heap->min_block_size );
/* Statistics */
stats->free_size += block_size;
46754: d1ab 0030 addl %d0,%a3@(48)
uintptr_t block_end = block_begin + block_size;
Heap_Block *const new_block =
_Heap_Block_of_alloc_area( alloc_begin, heap->page_size );
uintptr_t const new_block_begin = (uintptr_t) new_block;
uintptr_t const new_block_size = block_end - new_block_begin;
46758: 928c subl %a4,%d1
_HAssert( new_block_size >= heap->min_block_size );
/* Statistics */
stats->free_size += block_size;
if ( _Heap_Is_prev_used( block ) ) {
4675a: 0802 0000 btst #0,%d2
4675e: 671c beqs 4677c <_Heap_Block_allocate+0xaa> <== NEVER TAKEN
RTEMS_INLINE_ROUTINE void _Heap_Free_list_insert_after(
Heap_Block *block_before,
Heap_Block *new_block
)
{
Heap_Block *next = block_before->next;
46760: 2a68 0008 moveal %a0@(8),%a5
new_block->next = next;
new_block->prev = block_before;
46764: 2548 000c movel %a0,%a2@(12)
Heap_Block *new_block
)
{
Heap_Block *next = block_before->next;
new_block->next = next;
46768: 254d 0008 movel %a5,%a2@(8)
new_block->prev = block_before;
block_before->next = new_block;
next->prev = new_block;
4676c: 2b4a 000c movel %a2,%a5@(12)
{
Heap_Block *next = block_before->next;
new_block->next = next;
new_block->prev = block_before;
block_before->next = new_block;
46770: 214a 0008 movel %a2,%a0@(8)
_Heap_Free_list_insert_after( free_list_anchor, block );
free_list_anchor = block;
/* Statistics */
++stats->free_blocks;
46774: 52ab 0038 addql #1,%a3@(56)
46778: 204a moveal %a2,%a0
4677a: 600a bras 46786 <_Heap_Block_allocate+0xb4>
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Prev_block(
const Heap_Block *block
)
{
return (Heap_Block *) ((uintptr_t) block - block->prev_size);
4677c: 95d2 subal %a2@,%a2 <== NOT EXECUTED
- 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;
4677e: 74fe moveq #-2,%d2 <== NOT EXECUTED
46780: c4aa 0004 andl %a2@(4),%d2 <== NOT EXECUTED
} else {
Heap_Block *const prev_block = _Heap_Prev_block( block );
uintptr_t const prev_block_size = _Heap_Block_size( prev_block );
block = prev_block;
block_size += prev_block_size;
46784: d082 addl %d2,%d0 <== NOT EXECUTED
}
block->size_and_flag = block_size | HEAP_PREV_BLOCK_USED;
46786: 7401 moveq #1,%d2
46788: 8480 orl %d0,%d2
new_block->prev_size = block_size;
4678a: 2880 movel %d0,%a4@
block = prev_block;
block_size += prev_block_size;
}
block->size_and_flag = block_size | HEAP_PREV_BLOCK_USED;
4678c: 2542 0004 movel %d2,%a2@(4)
new_block->prev_size = block_size;
new_block->size_and_flag = new_block_size;
_Heap_Block_split( heap, new_block, free_list_anchor, alloc_size );
46790: 244c moveal %a4,%a2
}
block->size_and_flag = block_size | HEAP_PREV_BLOCK_USED;
new_block->prev_size = block_size;
new_block->size_and_flag = new_block_size;
46792: 2941 0004 movel %d1,%a4@(4)
_Heap_Block_split( heap, new_block, free_list_anchor, alloc_size );
46796: 2f05 movel %d5,%sp@-
46798: 2f08 movel %a0,%sp@-
4679a: 2f0c movel %a4,%sp@-
4679c: 2f0b movel %a3,%sp@-
4679e: 4eba fcfc jsr %pc@(4649c <_Heap_Block_split>)
467a2: 4fef 0010 lea %sp@(16),%sp
alloc_size
);
}
/* Statistics */
if ( stats->min_free_size > stats->free_size ) {
467a6: 202b 0030 movel %a3@(48),%d0
467aa: b0ab 0034 cmpl %a3@(52),%d0
467ae: 6404 bccs 467b4 <_Heap_Block_allocate+0xe2> <== NEVER TAKEN
stats->min_free_size = stats->free_size;
467b0: 2740 0034 movel %d0,%a3@(52)
}
_Heap_Protection_block_initialize( heap, block );
return block;
}
467b4: 200a movel %a2,%d0
467b6: 4cee 3c3c ffe0 moveml %fp@(-32),%d2-%d5/%a2-%a5
467bc: 4e5e unlk %fp <== NOT EXECUTED
0004649c <_Heap_Block_split>:
- 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;
4649c: 70fe moveq #-2,%d0
Heap_Control *heap,
Heap_Block *block,
Heap_Block *free_list_anchor,
uintptr_t alloc_size
)
{
4649e: 4e56 ffe0 linkw %fp,#-32
464a2: 48d7 1c7c moveml %d2-%d6/%a2-%a4,%sp@
464a6: 246e 0008 moveal %fp@(8),%a2
464aa: 266e 000c moveal %fp@(12),%a3
Heap_Statistics *const stats = &heap->stats;
uintptr_t const page_size = heap->page_size;
uintptr_t const min_block_size = heap->min_block_size;
464ae: 282a 0014 movel %a2@(20),%d4
uintptr_t const min_alloc_size = min_block_size - HEAP_BLOCK_HEADER_SIZE;
464b2: 2044 moveal %d4,%a0
464b4: 5188 subql #8,%a0
}
_Heap_Protection_block_initialize( heap, block );
return block;
}
464b6: 262b 0004 movel %a3@(4),%d3
Heap_Control *heap,
Heap_Block *block,
Heap_Block *free_list_anchor,
uintptr_t alloc_size
)
{
464ba: 286e 0010 moveal %fp@(16),%a4
Heap_Statistics *const stats = &heap->stats;
uintptr_t const page_size = heap->page_size;
464be: 222a 0010 movel %a2@(16),%d1
return heap->stats.size;
}
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Max( uintptr_t a, uintptr_t b )
{
return a > b ? a : b;
464c2: 242e 0014 movel %fp@(20),%d2
- 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;
464c6: c083 andl %d3,%d0
return heap->stats.size;
}
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Max( uintptr_t a, uintptr_t b )
{
return a > b ? a : b;
464c8: b1c2 cmpal %d2,%a0
464ca: 6302 blss 464ce <_Heap_Block_split+0x32>
464cc: 2408 movel %a0,%d2
uintptr_t const min_block_size = heap->min_block_size;
uintptr_t const min_alloc_size = min_block_size - HEAP_BLOCK_HEADER_SIZE;
uintptr_t const block_size = _Heap_Block_size( block );
uintptr_t const used_size =
464ce: 5082 addql #8,%d2
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_up(
uintptr_t value,
uintptr_t alignment
)
{
uintptr_t remainder = value % alignment;
464d0: 2c02 movel %d2,%d6
464d2: 4c41 6005 remul %d1,%d5,%d6
if ( remainder != 0 ) {
464d6: 4a85 tstl %d5
464d8: 6706 beqs 464e0 <_Heap_Block_split+0x44>
return value - remainder + alignment;
464da: d282 addl %d2,%d1
464dc: 9285 subl %d5,%d1
464de: 6002 bras 464e2 <_Heap_Block_split+0x46>
} else {
return value;
464e0: 2202 movel %d2,%d1
_Heap_Max( alloc_size, min_alloc_size ) + HEAP_BLOCK_HEADER_SIZE;
uintptr_t const used_block_size = _Heap_Align_up( used_size, page_size );
uintptr_t const free_size = block_size + HEAP_ALLOC_BONUS - used_size;
464e2: 2240 moveal %d0,%a1
464e4: 5889 addql #4,%a1
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
464e6: 41f3 0800 lea %a3@(00000000,%d0:l),%a0
464ea: 93c2 subal %d2,%a1
uintptr_t const free_size_limit = min_block_size + HEAP_ALLOC_BONUS;
464ec: 5884 addql #4,%d4
Heap_Block *next_block = _Heap_Block_at( block, block_size );
_HAssert( used_size <= block_size + HEAP_ALLOC_BONUS );
_HAssert( used_size + free_size == block_size + HEAP_ALLOC_BONUS );
if ( free_size >= free_size_limit ) {
464ee: b889 cmpl %a1,%d4
464f0: 626a bhis 4655c <_Heap_Block_split+0xc0> <== NEVER TAKEN
RTEMS_INLINE_ROUTINE void _Heap_Block_set_size(
Heap_Block *block,
uintptr_t size
)
{
uintptr_t flag = block->size_and_flag & HEAP_PREV_BLOCK_USED;
464f2: 7401 moveq #1,%d2
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
464f4: 43f3 1800 lea %a3@(00000000,%d1:l),%a1
Heap_Block *const free_block = _Heap_Block_at( block, used_block_size );
uintptr_t free_block_size = block_size - used_block_size;
464f8: 9081 subl %d1,%d0
RTEMS_INLINE_ROUTINE void _Heap_Block_set_size(
Heap_Block *block,
uintptr_t size
)
{
uintptr_t flag = block->size_and_flag & HEAP_PREV_BLOCK_USED;
464fa: c682 andl %d2,%d3
block->size_and_flag = size | flag;
464fc: 8283 orl %d3,%d1
464fe: 2741 0004 movel %d1,%a3@(4)
- 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;
46502: 72fe moveq #-2,%d1
_HAssert( used_block_size + free_block_size == block_size );
_Heap_Block_set_size( block, used_block_size );
/* Statistics */
stats->free_size += free_block_size;
46504: d1aa 0030 addl %d0,%a2@(48)
46508: c2a8 0004 andl %a0@(4),%d1
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;
4650c: c4b0 1804 andl %a0@(00000004,%d1:l),%d2
if ( _Heap_Is_used( next_block ) ) {
46510: 671a beqs 4652c <_Heap_Block_split+0x90> <== NEVER TAKEN
RTEMS_INLINE_ROUTINE void _Heap_Free_list_insert_after(
Heap_Block *block_before,
Heap_Block *new_block
)
{
Heap_Block *next = block_before->next;
46512: 266c 0008 moveal %a4@(8),%a3
new_block->next = next;
new_block->prev = block_before;
46516: 234c 000c movel %a4,%a1@(12)
Heap_Block *new_block
)
{
Heap_Block *next = block_before->next;
new_block->next = next;
4651a: 234b 0008 movel %a3,%a1@(8)
new_block->prev = block_before;
block_before->next = new_block;
next->prev = new_block;
4651e: 2749 000c movel %a1,%a3@(12)
{
Heap_Block *next = block_before->next;
new_block->next = next;
new_block->prev = block_before;
block_before->next = new_block;
46522: 2949 0008 movel %a1,%a4@(8)
_Heap_Free_list_insert_after( free_list_anchor, free_block );
/* Statistics */
++stats->free_blocks;
46526: 52aa 0038 addql #1,%a2@(56)
4652a: 601e bras 4654a <_Heap_Block_split+0xae>
RTEMS_INLINE_ROUTINE void _Heap_Free_list_replace(
Heap_Block *old_block,
Heap_Block *new_block
)
{
Heap_Block *next = old_block->next;
4652c: 2468 0008 moveal %a0@(8),%a2 <== NOT EXECUTED
} else {
uintptr_t const next_block_size = _Heap_Block_size( next_block );
_Heap_Free_list_replace( next_block, free_block );
free_block_size += next_block_size;
46530: d081 addl %d1,%d0 <== NOT EXECUTED
Heap_Block *prev = old_block->prev;
46532: 2068 000c moveal %a0@(12),%a0 <== NOT EXECUTED
new_block->next = next;
46536: 234a 0008 movel %a2,%a1@(8) <== NOT EXECUTED
new_block->prev = prev;
4653a: 2348 000c movel %a0,%a1@(12) <== NOT EXECUTED
next->prev = new_block;
prev->next = new_block;
4653e: 2149 0008 movel %a1,%a0@(8) <== NOT EXECUTED
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
46542: 41f1 0800 lea %a1@(00000000,%d0:l),%a0 <== NOT EXECUTED
Heap_Block *prev = old_block->prev;
new_block->next = next;
new_block->prev = prev;
next->prev = new_block;
46546: 2549 000c movel %a1,%a2@(12) <== NOT EXECUTED
next_block = _Heap_Block_at( free_block, free_block_size );
}
free_block->size_and_flag = free_block_size | HEAP_PREV_BLOCK_USED;
4654a: 7201 moveq #1,%d1
next_block->prev_size = free_block_size;
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
4654c: 74fe moveq #-2,%d2
free_block_size += next_block_size;
next_block = _Heap_Block_at( free_block, free_block_size );
}
free_block->size_and_flag = free_block_size | HEAP_PREV_BLOCK_USED;
4654e: 8280 orl %d0,%d1
next_block->prev_size = free_block_size;
46550: 2080 movel %d0,%a0@
free_block_size += next_block_size;
next_block = _Heap_Block_at( free_block, free_block_size );
}
free_block->size_and_flag = free_block_size | HEAP_PREV_BLOCK_USED;
46552: 2341 0004 movel %d1,%a1@(4)
next_block->prev_size = free_block_size;
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
46556: c5a8 0004 andl %d2,%a0@(4)
4655a: 6006 bras 46562 <_Heap_Block_split+0xc6>
_Heap_Protection_block_initialize( heap, free_block );
} else {
next_block->size_and_flag |= HEAP_PREV_BLOCK_USED;
4655c: 7001 moveq #1,%d0
4655e: 81a8 0004 orl %d0,%a0@(4)
}
}
46562: 4cd7 1c7c moveml %sp@,%d2-%d6/%a2-%a4
46566: 4e5e unlk %fp <== NOT EXECUTED
0004afe8 <_Heap_Extend>:
Heap_Control *heap,
void *extend_area_begin_ptr,
uintptr_t extend_area_size,
uintptr_t *extended_size_ptr
)
{
4afe8: 4e56 ffcc linkw %fp,#-52 <== NOT EXECUTED
4afec: 202e 0010 movel %fp@(16),%d0 <== NOT EXECUTED
4aff0: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@ <== NOT EXECUTED
4aff4: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
4aff8: 262e 000c movel %fp@(12),%d3 <== NOT EXECUTED
Heap_Block *extend_first_block = NULL;
Heap_Block *extend_last_block = NULL;
uintptr_t const page_size = heap->page_size;
uintptr_t const min_block_size = heap->min_block_size;
uintptr_t const extend_area_begin = (uintptr_t) extend_area_begin_ptr;
uintptr_t const extend_area_end = extend_area_begin + extend_area_size;
4affc: 2403 movel %d3,%d2 <== NOT EXECUTED
4affe: d480 addl %d0,%d2 <== NOT EXECUTED
uintptr_t const free_size = stats->free_size;
4b000: 206a 0030 moveal %a2@(48),%a0 <== NOT EXECUTED
uintptr_t extend_area_size,
uintptr_t *extended_size_ptr
)
{
Heap_Statistics *const stats = &heap->stats;
Heap_Block *const first_block = heap->first_block;
4b004: 282a 0020 movel %a2@(32),%d4 <== NOT EXECUTED
Heap_Block *merge_above_block = NULL;
Heap_Block *link_below_block = NULL;
Heap_Block *link_above_block = NULL;
Heap_Block *extend_first_block = NULL;
Heap_Block *extend_last_block = NULL;
uintptr_t const page_size = heap->page_size;
4b008: 2a2a 0010 movel %a2@(16),%d5 <== NOT EXECUTED
uintptr_t const min_block_size = heap->min_block_size;
4b00c: 222a 0014 movel %a2@(20),%d1 <== NOT EXECUTED
Heap_Block *start_block = first_block;
Heap_Block *merge_below_block = NULL;
Heap_Block *merge_above_block = NULL;
Heap_Block *link_below_block = NULL;
Heap_Block *link_above_block = NULL;
Heap_Block *extend_first_block = NULL;
4b010: 42ae fffc clrl %fp@(-4) <== NOT EXECUTED
Heap_Block *extend_last_block = NULL;
4b014: 42ae fff8 clrl %fp@(-8) <== NOT EXECUTED
uintptr_t const page_size = heap->page_size;
uintptr_t const min_block_size = heap->min_block_size;
uintptr_t const extend_area_begin = (uintptr_t) extend_area_begin_ptr;
uintptr_t const extend_area_end = extend_area_begin + extend_area_size;
uintptr_t const free_size = stats->free_size;
4b018: 2d48 fff4 movel %a0,%fp@(-12) <== NOT EXECUTED
uintptr_t extend_first_block_size = 0;
uintptr_t extended_size = 0;
bool extend_area_ok = false;
if ( extend_area_end < extend_area_begin ) {
4b01c: b682 cmpl %d2,%d3 <== NOT EXECUTED
4b01e: 6200 01aa bhiw 4b1ca <_Heap_Extend+0x1e2> <== NOT EXECUTED
return false;
}
extend_area_ok = _Heap_Get_first_and_last_block(
4b022: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
4b026: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4b02a: 2f01 movel %d1,%sp@- <== NOT EXECUTED
4b02c: 2f05 movel %d5,%sp@- <== NOT EXECUTED
4b02e: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4b030: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4b032: 4eb9 0004 687e jsr 4687e <_Heap_Get_first_and_last_block> <== NOT EXECUTED
page_size,
min_block_size,
&extend_first_block,
&extend_last_block
);
if (!extend_area_ok ) {
4b038: 4fef 0018 lea %sp@(24),%sp <== NOT EXECUTED
4b03c: 4a00 tstb %d0 <== NOT EXECUTED
4b03e: 6700 018a beqw 4b1ca <_Heap_Extend+0x1e2> <== NOT EXECUTED
4b042: 2044 moveal %d4,%a0 <== NOT EXECUTED
4b044: 9bcd subal %a5,%a5 <== NOT EXECUTED
4b046: 4281 clrl %d1 <== NOT EXECUTED
4b048: 97cb subal %a3,%a3 <== NOT EXECUTED
4b04a: 99cc subal %a4,%a4 <== NOT EXECUTED
return false;
}
do {
uintptr_t const sub_area_begin = (start_block != first_block) ?
(uintptr_t) start_block : heap->area_begin;
4b04c: b888 cmpl %a0,%d4 <== NOT EXECUTED
4b04e: 6704 beqs 4b054 <_Heap_Extend+0x6c> <== NOT EXECUTED
4b050: 2248 moveal %a0,%a1 <== NOT EXECUTED
4b052: 6004 bras 4b058 <_Heap_Extend+0x70> <== NOT EXECUTED
4b054: 226a 0018 moveal %a2@(24),%a1 <== NOT EXECUTED
uintptr_t const sub_area_end = start_block->prev_size;
4b058: 2010 movel %a0@,%d0 <== NOT EXECUTED
Heap_Block *const end_block =
_Heap_Block_of_alloc_area( sub_area_end, page_size );
if (
4b05a: b680 cmpl %d0,%d3 <== NOT EXECUTED
4b05c: 6406 bccs 4b064 <_Heap_Extend+0x7c> <== NOT EXECUTED
sub_area_end > extend_area_begin && extend_area_end > sub_area_begin
4b05e: b3c2 cmpal %d2,%a1 <== NOT EXECUTED
4b060: 6500 0168 bcsw 4b1ca <_Heap_Extend+0x1e2> <== NOT EXECUTED
) {
return false;
}
if ( extend_area_end == sub_area_begin ) {
4b064: b3c2 cmpal %d2,%a1 <== NOT EXECUTED
4b066: 6706 beqs 4b06e <_Heap_Extend+0x86> <== NOT EXECUTED
merge_below_block = start_block;
} else if ( extend_area_end < sub_area_end ) {
4b068: b082 cmpl %d2,%d0 <== NOT EXECUTED
4b06a: 6206 bhis 4b072 <_Heap_Extend+0x8a> <== NOT EXECUTED
4b06c: 6006 bras 4b074 <_Heap_Extend+0x8c> <== NOT EXECUTED
sub_area_end > extend_area_begin && extend_area_end > sub_area_begin
) {
return false;
}
if ( extend_area_end == sub_area_begin ) {
4b06e: 2848 moveal %a0,%a4 <== NOT EXECUTED
4b070: 6002 bras 4b074 <_Heap_Extend+0x8c> <== NOT EXECUTED
merge_below_block = start_block;
} else if ( extend_area_end < sub_area_end ) {
4b072: 2208 movel %a0,%d1 <== NOT EXECUTED
4b074: 2e00 movel %d0,%d7 <== NOT EXECUTED
4b076: 2240 moveal %d0,%a1 <== NOT EXECUTED
4b078: 5189 subql #8,%a1 <== NOT EXECUTED
4b07a: 4c45 7006 remul %d5,%d6,%d7 <== NOT EXECUTED
uintptr_t alloc_begin,
uintptr_t page_size
)
{
return (Heap_Block *) (_Heap_Align_down( alloc_begin, page_size )
- HEAP_BLOCK_HEADER_SIZE);
4b07e: 93c6 subal %d6,%a1 <== NOT EXECUTED
link_below_block = start_block;
}
if ( sub_area_end == extend_area_begin ) {
4b080: b680 cmpl %d0,%d3 <== NOT EXECUTED
4b082: 6606 bnes 4b08a <_Heap_Extend+0xa2> <== NOT EXECUTED
start_block->prev_size = extend_area_end;
4b084: 2082 movel %d2,%a0@ <== NOT EXECUTED
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_of_alloc_area(
uintptr_t alloc_begin,
uintptr_t page_size
)
{
return (Heap_Block *) (_Heap_Align_down( alloc_begin, page_size )
4b086: 2649 moveal %a1,%a3 <== NOT EXECUTED
4b088: 6006 bras 4b090 <_Heap_Extend+0xa8> <== NOT EXECUTED
merge_above_block = end_block;
} else if ( sub_area_end < extend_area_begin ) {
4b08a: b680 cmpl %d0,%d3 <== NOT EXECUTED
4b08c: 6302 blss 4b090 <_Heap_Extend+0xa8> <== NOT EXECUTED
4b08e: 2a49 moveal %a1,%a5 <== NOT EXECUTED
- 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;
4b090: 70fe moveq #-2,%d0 <== NOT EXECUTED
4b092: c0a9 0004 andl %a1@(4),%d0 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
4b096: 41f1 0800 lea %a1@(00000000,%d0:l),%a0 <== NOT EXECUTED
link_above_block = end_block;
}
start_block = _Heap_Block_at( end_block, _Heap_Block_size( end_block ) );
} while ( start_block != first_block );
4b09a: b888 cmpl %a0,%d4 <== NOT EXECUTED
4b09c: 66ae bnes 4b04c <_Heap_Extend+0x64> <== NOT EXECUTED
if ( extend_area_begin < heap->area_begin ) {
4b09e: b6aa 0018 cmpl %a2@(24),%d3 <== NOT EXECUTED
4b0a2: 6406 bccs 4b0aa <_Heap_Extend+0xc2> <== NOT EXECUTED
heap->area_begin = extend_area_begin;
4b0a4: 2543 0018 movel %d3,%a2@(24) <== NOT EXECUTED
4b0a8: 600a bras 4b0b4 <_Heap_Extend+0xcc> <== NOT EXECUTED
} else if ( heap->area_end < extend_area_end ) {
4b0aa: b4aa 001c cmpl %a2@(28),%d2 <== NOT EXECUTED
4b0ae: 6304 blss 4b0b4 <_Heap_Extend+0xcc> <== NOT EXECUTED
heap->area_end = extend_area_end;
4b0b0: 2542 001c movel %d2,%a2@(28) <== NOT EXECUTED
}
extend_first_block_size =
(uintptr_t) extend_last_block - (uintptr_t) extend_first_block;
4b0b4: 206e fff8 moveal %fp@(-8),%a0 <== NOT EXECUTED
heap->area_begin = extend_area_begin;
} else if ( heap->area_end < extend_area_end ) {
heap->area_end = extend_area_end;
}
extend_first_block_size =
4b0b8: 2008 movel %a0,%d0 <== NOT EXECUTED
(uintptr_t) extend_last_block - (uintptr_t) extend_first_block;
extend_first_block->prev_size = extend_area_end;
extend_first_block->size_and_flag =
extend_first_block_size | HEAP_PREV_BLOCK_USED;
4b0ba: 7801 moveq #1,%d4 <== NOT EXECUTED
} else if ( heap->area_end < extend_area_end ) {
heap->area_end = extend_area_end;
}
extend_first_block_size =
(uintptr_t) extend_last_block - (uintptr_t) extend_first_block;
4b0bc: 226e fffc moveal %fp@(-4),%a1 <== NOT EXECUTED
heap->area_begin = extend_area_begin;
} else if ( heap->area_end < extend_area_end ) {
heap->area_end = extend_area_end;
}
extend_first_block_size =
4b0c0: 9089 subl %a1,%d0 <== NOT EXECUTED
(uintptr_t) extend_last_block - (uintptr_t) extend_first_block;
extend_first_block->prev_size = extend_area_end;
extend_first_block->size_and_flag =
extend_first_block_size | HEAP_PREV_BLOCK_USED;
4b0c2: 8880 orl %d0,%d4 <== NOT EXECUTED
}
extend_first_block_size =
(uintptr_t) extend_last_block - (uintptr_t) extend_first_block;
extend_first_block->prev_size = extend_area_end;
4b0c4: 2282 movel %d2,%a1@ <== NOT EXECUTED
extend_first_block->size_and_flag =
extend_first_block_size | HEAP_PREV_BLOCK_USED;
4b0c6: 2344 0004 movel %d4,%a1@(4) <== NOT EXECUTED
_Heap_Protection_block_initialize( heap, extend_first_block );
extend_last_block->prev_size = extend_first_block_size;
4b0ca: 2080 movel %d0,%a0@ <== NOT EXECUTED
extend_last_block->size_and_flag = 0;
4b0cc: 42a8 0004 clrl %a0@(4) <== NOT EXECUTED
_Heap_Protection_block_initialize( heap, extend_last_block );
if ( (uintptr_t) extend_first_block < (uintptr_t) heap->first_block ) {
4b0d0: b3ea 0020 cmpal %a2@(32),%a1 <== NOT EXECUTED
4b0d4: 6406 bccs 4b0dc <_Heap_Extend+0xf4> <== NOT EXECUTED
heap->first_block = extend_first_block;
4b0d6: 2549 0020 movel %a1,%a2@(32) <== NOT EXECUTED
4b0da: 600a bras 4b0e6 <_Heap_Extend+0xfe> <== NOT EXECUTED
} else if ( (uintptr_t) extend_last_block > (uintptr_t) heap->last_block ) {
4b0dc: b1ea 0024 cmpal %a2@(36),%a0 <== NOT EXECUTED
4b0e0: 6304 blss 4b0e6 <_Heap_Extend+0xfe> <== NOT EXECUTED
heap->last_block = extend_last_block;
4b0e2: 2548 0024 movel %a0,%a2@(36) <== NOT EXECUTED
}
if ( merge_below_block != NULL ) {
4b0e6: 4a8c tstl %a4 <== NOT EXECUTED
4b0e8: 6732 beqs 4b11c <_Heap_Extend+0x134> <== NOT EXECUTED
Heap_Control *heap,
uintptr_t extend_area_begin,
Heap_Block *first_block
)
{
uintptr_t const page_size = heap->page_size;
4b0ea: 202a 0010 movel %a2@(16),%d0 <== NOT EXECUTED
uintptr_t const new_first_block_alloc_begin =
_Heap_Align_up( extend_area_begin + HEAP_BLOCK_HEADER_SIZE, page_size );
4b0ee: 5083 addql #8,%d3 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_up(
uintptr_t value,
uintptr_t alignment
)
{
uintptr_t remainder = value % alignment;
4b0f0: 2803 movel %d3,%d4 <== NOT EXECUTED
4b0f2: 4c40 4001 remul %d0,%d1,%d4 <== NOT EXECUTED
if ( remainder != 0 ) {
4b0f6: 4a81 tstl %d1 <== NOT EXECUTED
4b0f8: 6704 beqs 4b0fe <_Heap_Extend+0x116> <== NOT EXECUTED
return value - remainder + alignment;
4b0fa: d680 addl %d0,%d3 <== NOT EXECUTED
4b0fc: 9681 subl %d1,%d3 <== NOT EXECUTED
uintptr_t const new_first_block_begin =
4b0fe: 2043 moveal %d3,%a0 <== NOT EXECUTED
4b100: 5188 subql #8,%a0 <== NOT EXECUTED
new_first_block_alloc_begin - HEAP_BLOCK_HEADER_SIZE;
uintptr_t const first_block_begin = (uintptr_t) first_block;
uintptr_t const new_first_block_size =
4b102: 200c movel %a4,%d0 <== NOT EXECUTED
4b104: 9088 subl %a0,%d0 <== NOT EXECUTED
first_block_begin - new_first_block_begin;
Heap_Block *const new_first_block = (Heap_Block *) new_first_block_begin;
new_first_block->prev_size = first_block->prev_size;
new_first_block->size_and_flag = new_first_block_size | HEAP_PREV_BLOCK_USED;
4b106: 7201 moveq #1,%d1 <== NOT EXECUTED
4b108: 8280 orl %d0,%d1 <== NOT EXECUTED
uintptr_t const first_block_begin = (uintptr_t) first_block;
uintptr_t const new_first_block_size =
first_block_begin - new_first_block_begin;
Heap_Block *const new_first_block = (Heap_Block *) new_first_block_begin;
new_first_block->prev_size = first_block->prev_size;
4b10a: 2094 movel %a4@,%a0@ <== NOT EXECUTED
new_first_block->size_and_flag = new_first_block_size | HEAP_PREV_BLOCK_USED;
4b10c: 2141 0004 movel %d1,%a0@(4) <== NOT EXECUTED
_Heap_Free_block( heap, new_first_block );
4b110: 2f08 movel %a0,%sp@- <== NOT EXECUTED
4b112: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4b114: 4eba feb6 jsr %pc@(4afcc <_Heap_Free_block>) <== NOT EXECUTED
4b118: 508f addql #8,%sp <== NOT EXECUTED
4b11a: 6012 bras 4b12e <_Heap_Extend+0x146> <== NOT EXECUTED
heap->last_block = extend_last_block;
}
if ( merge_below_block != NULL ) {
_Heap_Merge_below( heap, extend_area_begin, merge_below_block );
} else if ( link_below_block != NULL ) {
4b11c: 4a81 tstl %d1 <== NOT EXECUTED
4b11e: 670e beqs 4b12e <_Heap_Extend+0x146> <== NOT EXECUTED
_Heap_Link_below(
4b120: 206e fff8 moveal %fp@(-8),%a0 <== NOT EXECUTED
{
uintptr_t const last_block_begin = (uintptr_t) last_block;
uintptr_t const link_begin = (uintptr_t) link;
last_block->size_and_flag =
(link_begin - last_block_begin) | HEAP_PREV_BLOCK_USED;
4b124: 7801 moveq #1,%d4 <== NOT EXECUTED
4b126: 9288 subl %a0,%d1 <== NOT EXECUTED
4b128: 8881 orl %d1,%d4 <== NOT EXECUTED
4b12a: 2144 0004 movel %d4,%a0@(4) <== NOT EXECUTED
link_below_block,
extend_last_block
);
}
if ( merge_above_block != NULL ) {
4b12e: 4a8b tstl %a3 <== NOT EXECUTED
4b130: 6734 beqs 4b166 <_Heap_Extend+0x17e> <== NOT EXECUTED
)
{
uintptr_t const page_size = heap->page_size;
uintptr_t const last_block_begin = (uintptr_t) last_block;
uintptr_t const last_block_new_size = _Heap_Align_down(
extend_area_end - last_block_begin - HEAP_BLOCK_HEADER_SIZE,
4b132: 5182 subql #8,%d2 <== NOT EXECUTED
uintptr_t extend_area_end
)
{
uintptr_t const page_size = heap->page_size;
uintptr_t const last_block_begin = (uintptr_t) last_block;
uintptr_t const last_block_new_size = _Heap_Align_down(
4b134: 948b subl %a3,%d2 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(
uintptr_t value,
uintptr_t alignment
)
{
return value - (value % alignment);
4b136: 2202 movel %d2,%d1 <== NOT EXECUTED
4b138: 4c6a 1000 0010 remul %a2@(16),%d0,%d1 <== NOT EXECUTED
Heap_Block *const new_last_block =
_Heap_Block_at( last_block, last_block_new_size );
new_last_block->size_and_flag =
(last_block->size_and_flag - last_block_new_size)
| HEAP_PREV_BLOCK_USED;
4b13e: 7201 moveq #1,%d1 <== NOT EXECUTED
4b140: 9480 subl %d0,%d2 <== NOT EXECUTED
);
Heap_Block *const new_last_block =
_Heap_Block_at( last_block, last_block_new_size );
new_last_block->size_and_flag =
(last_block->size_and_flag - last_block_new_size)
4b142: 202b 0004 movel %a3@(4),%d0 <== NOT EXECUTED
4b146: 9082 subl %d2,%d0 <== NOT EXECUTED
| HEAP_PREV_BLOCK_USED;
4b148: 8280 orl %d0,%d1 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Heap_Block_set_size(
Heap_Block *block,
uintptr_t size
)
{
uintptr_t flag = block->size_and_flag & HEAP_PREV_BLOCK_USED;
4b14a: 7001 moveq #1,%d0 <== NOT EXECUTED
4b14c: 2781 2804 movel %d1,%a3@(00000004,%d2:l) <== NOT EXECUTED
4b150: c0ab 0004 andl %a3@(4),%d0 <== NOT EXECUTED
block->size_and_flag = size | flag;
4b154: 8480 orl %d0,%d2 <== NOT EXECUTED
4b156: 2742 0004 movel %d2,%a3@(4) <== NOT EXECUTED
_Heap_Block_set_size( last_block, last_block_new_size );
_Heap_Free_block( heap, last_block );
4b15a: 2f0b movel %a3,%sp@- <== NOT EXECUTED
4b15c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4b15e: 4eba fe6c jsr %pc@(4afcc <_Heap_Free_block>) <== NOT EXECUTED
4b162: 508f addql #8,%sp <== NOT EXECUTED
4b164: 6020 bras 4b186 <_Heap_Extend+0x19e> <== NOT EXECUTED
);
}
if ( merge_above_block != NULL ) {
_Heap_Merge_above( heap, merge_above_block, extend_area_end );
} else if ( link_above_block != NULL ) {
4b166: 4a8d tstl %a5 <== NOT EXECUTED
4b168: 671c beqs 4b186 <_Heap_Extend+0x19e> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Heap_Block_set_size(
Heap_Block *block,
uintptr_t size
)
{
uintptr_t flag = block->size_and_flag & HEAP_PREV_BLOCK_USED;
4b16a: 7001 moveq #1,%d0 <== NOT EXECUTED
uintptr_t const link_begin = (uintptr_t) link;
uintptr_t const first_block_begin = (uintptr_t) first_block;
_Heap_Block_set_size( link, first_block_begin - link_begin );
last_block->size_and_flag |= HEAP_PREV_BLOCK_USED;
4b16c: 7801 moveq #1,%d4 <== NOT EXECUTED
)
{
uintptr_t const link_begin = (uintptr_t) link;
uintptr_t const first_block_begin = (uintptr_t) first_block;
_Heap_Block_set_size( link, first_block_begin - link_begin );
4b16e: 222e fffc movel %fp@(-4),%d1 <== NOT EXECUTED
4b172: 928d subl %a5,%d1 <== NOT EXECUTED
4b174: c0ad 0004 andl %a5@(4),%d0 <== NOT EXECUTED
}
if ( merge_above_block != NULL ) {
_Heap_Merge_above( heap, merge_above_block, extend_area_end );
} else if ( link_above_block != NULL ) {
_Heap_Link_above(
4b178: 206e fff8 moveal %fp@(-8),%a0 <== NOT EXECUTED
block->size_and_flag = size | flag;
4b17c: 8280 orl %d0,%d1 <== NOT EXECUTED
4b17e: 2b41 0004 movel %d1,%a5@(4) <== NOT EXECUTED
uintptr_t const link_begin = (uintptr_t) link;
uintptr_t const first_block_begin = (uintptr_t) first_block;
_Heap_Block_set_size( link, first_block_begin - link_begin );
last_block->size_and_flag |= HEAP_PREV_BLOCK_USED;
4b182: 89a8 0004 orl %d4,%a0@(4) <== NOT EXECUTED
extend_first_block,
extend_last_block
);
}
if ( merge_below_block == NULL && merge_above_block == NULL ) {
4b186: 4a8c tstl %a4 <== NOT EXECUTED
4b188: 6610 bnes 4b19a <_Heap_Extend+0x1b2> <== NOT EXECUTED
4b18a: 4a8b tstl %a3 <== NOT EXECUTED
4b18c: 660c bnes 4b19a <_Heap_Extend+0x1b2> <== NOT EXECUTED
_Heap_Free_block( heap, extend_first_block );
4b18e: 2f2e fffc movel %fp@(-4),%sp@- <== NOT EXECUTED
4b192: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4b194: 4eba fe36 jsr %pc@(4afcc <_Heap_Free_block>) <== NOT EXECUTED
4b198: 508f addql #8,%sp <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Heap_Set_last_block_size( Heap_Control *heap )
{
_Heap_Block_set_size(
heap->last_block,
(uintptr_t) heap->first_block - (uintptr_t) heap->last_block
4b19a: 206a 0024 moveal %a2@(36),%a0 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Heap_Block_set_size(
Heap_Block *block,
uintptr_t size
)
{
uintptr_t flag = block->size_and_flag & HEAP_PREV_BLOCK_USED;
4b19e: 7001 moveq #1,%d0 <== NOT EXECUTED
* This feature will be used to terminate the scattered heap area list. See
* also _Heap_Extend().
*/
RTEMS_INLINE_ROUTINE void _Heap_Set_last_block_size( Heap_Control *heap )
{
_Heap_Block_set_size(
4b1a0: 222a 0020 movel %a2@(32),%d1 <== NOT EXECUTED
4b1a4: 9288 subl %a0,%d1 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Heap_Block_set_size(
Heap_Block *block,
uintptr_t size
)
{
uintptr_t flag = block->size_and_flag & HEAP_PREV_BLOCK_USED;
4b1a6: c0a8 0004 andl %a0@(4),%d0 <== NOT EXECUTED
block->size_and_flag = size | flag;
4b1aa: 8280 orl %d0,%d1 <== NOT EXECUTED
}
_Heap_Set_last_block_size( heap );
extended_size = stats->free_size - free_size;
4b1ac: 202a 0030 movel %a2@(48),%d0 <== NOT EXECUTED
4b1b0: 90ae fff4 subl %fp@(-12),%d0 <== NOT EXECUTED
4b1b4: 2141 0004 movel %d1,%a0@(4) <== NOT EXECUTED
/* Statistics */
stats->size += extended_size;
4b1b8: d1aa 002c addl %d0,%a2@(44) <== NOT EXECUTED
if ( extended_size_ptr != NULL )
4b1bc: 4aae 0014 tstl %fp@(20) <== NOT EXECUTED
4b1c0: 670c beqs 4b1ce <_Heap_Extend+0x1e6> <== NOT EXECUTED
*extended_size_ptr = extended_size;
4b1c2: 206e 0014 moveal %fp@(20),%a0 <== NOT EXECUTED
4b1c6: 2080 movel %d0,%a0@ <== NOT EXECUTED
4b1c8: 6004 bras 4b1ce <_Heap_Extend+0x1e6> <== NOT EXECUTED
_Heap_Block_of_alloc_area( sub_area_end, page_size );
if (
sub_area_end > extend_area_begin && extend_area_end > sub_area_begin
) {
return false;
4b1ca: 4200 clrb %d0 <== NOT EXECUTED
4b1cc: 6002 bras 4b1d0 <_Heap_Extend+0x1e8> <== NOT EXECUTED
stats->size += extended_size;
if ( extended_size_ptr != NULL )
*extended_size_ptr = extended_size;
return true;
4b1ce: 7001 moveq #1,%d0 <== NOT EXECUTED
}
4b1d0: 4cee 3cfc ffcc moveml %fp@(-52),%d2-%d7/%a2-%a5 <== NOT EXECUTED
4b1d6: 4e5e unlk %fp <== NOT EXECUTED
...
0004acec <_Heap_Free>:
return do_free;
}
#endif
bool _Heap_Free( Heap_Control *heap, void *alloc_begin_ptr )
{
4acec: 4e56 ffe8 linkw %fp,#-24
4acf0: 202e 000c movel %fp@(12),%d0
4acf4: 2240 moveal %d0,%a1
4acf6: 5189 subql #8,%a1
4acf8: 206e 0008 moveal %fp@(8),%a0
4acfc: 4c68 0001 0010 remul %a0@(16),%d1,%d0
4ad02: 48d7 0c3c moveml %d2-%d5/%a2-%a3,%sp@
RTEMS_INLINE_ROUTINE bool _Heap_Is_block_in_heap(
const Heap_Control *heap,
const Heap_Block *block
)
{
return (uintptr_t) block >= (uintptr_t) heap->first_block
4ad06: 2828 0020 movel %a0@(32),%d4
uintptr_t alloc_begin,
uintptr_t page_size
)
{
return (Heap_Block *) (_Heap_Align_down( alloc_begin, page_size )
- HEAP_BLOCK_HEADER_SIZE);
4ad0a: 93c1 subal %d1,%a1
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;
4ad0c: b889 cmpl %a1,%d4
4ad0e: 620c bhis 4ad1c <_Heap_Free+0x30> <== NEVER TAKEN
4ad10: b3e8 0024 cmpal %a0@(36),%a1
4ad14: 53c0 sls %d0
4ad16: 49c0 extbl %d0
4ad18: 4480 negl %d0
4ad1a: 6002 bras 4ad1e <_Heap_Free+0x32>
4ad1c: 4280 clrl %d0 <== NOT EXECUTED
uintptr_t next_block_size = 0;
bool next_is_free = false;
_Heap_Protection_block_check( heap, block );
if ( !_Heap_Is_block_in_heap( heap, block ) ) {
4ad1e: 4a00 tstb %d0
4ad20: 6700 012c beqw 4ae4e <_Heap_Free+0x162>
--stats->used_blocks;
++stats->frees;
stats->free_size += block_size;
return( true );
}
4ad24: 2629 0004 movel %a1@(4),%d3
- HEAP_BLOCK_HEADER_SIZE);
}
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Block_size( const Heap_Block *block )
{
return block->size_and_flag & ~HEAP_PREV_BLOCK_USED;
4ad28: 70fe moveq #-2,%d0
4ad2a: c083 andl %d3,%d0
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
4ad2c: 45f1 0800 lea %a1@(00000000,%d0:l),%a2
const Heap_Control *heap,
const Heap_Block *block
)
{
return (uintptr_t) block >= (uintptr_t) heap->first_block
&& (uintptr_t) block <= (uintptr_t) heap->last_block;
4ad30: b88a cmpl %a2,%d4
4ad32: 620c bhis 4ad40 <_Heap_Free+0x54> <== NEVER TAKEN
4ad34: b5e8 0024 cmpal %a0@(36),%a2
4ad38: 53c1 sls %d1
4ad3a: 49c1 extbl %d1
4ad3c: 4481 negl %d1
4ad3e: 6002 bras 4ad42 <_Heap_Free+0x56>
4ad40: 4281 clrl %d1 <== NOT EXECUTED
block_size = _Heap_Block_size( block );
next_block = _Heap_Block_at( block, block_size );
_Heap_Protection_block_check( heap, next_block );
if ( !_Heap_Is_block_in_heap( heap, next_block ) ) {
4ad42: 4a01 tstb %d1
4ad44: 6700 0108 beqw 4ae4e <_Heap_Free+0x162>
--stats->used_blocks;
++stats->frees;
stats->free_size += block_size;
return( true );
}
4ad48: 242a 0004 movel %a2@(4),%d2
if ( !_Heap_Is_block_in_heap( heap, next_block ) ) {
_HAssert( false );
return false;
}
if ( !_Heap_Is_prev_used( next_block ) ) {
4ad4c: 0802 0000 btst #0,%d2
4ad50: 6700 00fc beqw 4ae4e <_Heap_Free+0x162>
- 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;
4ad54: 72fe moveq #-2,%d1
if ( !_Heap_Protection_determine_block_free( heap, block ) ) {
return true;
}
next_block_size = _Heap_Block_size( next_block );
next_is_free = next_block != heap->last_block
4ad56: 2668 0024 moveal %a0@(36),%a3
4ad5a: c481 andl %d1,%d2
&& !_Heap_Is_prev_used( _Heap_Block_at( next_block, next_block_size ));
4ad5c: b7ca cmpal %a2,%a3
4ad5e: 670c beqs 4ad6c <_Heap_Free+0x80> <== NEVER TAKEN
block->size_and_flag = size | flag;
}
RTEMS_INLINE_ROUTINE bool _Heap_Is_prev_used( const Heap_Block *block )
{
return block->size_and_flag & HEAP_PREV_BLOCK_USED;
4ad60: 7201 moveq #1,%d1
4ad62: c2b2 2804 andl %a2@(00000004,%d2:l),%d1
return do_free;
}
#endif
bool _Heap_Free( Heap_Control *heap, void *alloc_begin_ptr )
4ad66: 5381 subql #1,%d1
4ad68: 4481 negl %d1
4ad6a: 6002 bras 4ad6e <_Heap_Free+0x82>
return true;
}
next_block_size = _Heap_Block_size( next_block );
next_is_free = next_block != heap->last_block
&& !_Heap_Is_prev_used( _Heap_Block_at( next_block, next_block_size ));
4ad6c: 4281 clrl %d1 <== NOT EXECUTED
if ( !_Heap_Protection_determine_block_free( heap, block ) ) {
return true;
}
next_block_size = _Heap_Block_size( next_block );
next_is_free = next_block != heap->last_block
4ad6e: 1a01 moveb %d1,%d5
&& !_Heap_Is_prev_used( _Heap_Block_at( next_block, next_block_size ));
if ( !_Heap_Is_prev_used( block ) ) {
4ad70: 0803 0000 btst #0,%d3
4ad74: 6662 bnes 4add8 <_Heap_Free+0xec>
uintptr_t const prev_size = block->prev_size;
4ad76: 2611 movel %a1@,%d3
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
4ad78: 93c3 subal %d3,%a1
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;
4ad7a: b889 cmpl %a1,%d4
4ad7c: 620a bhis 4ad88 <_Heap_Free+0x9c> <== NEVER TAKEN
4ad7e: b3cb cmpal %a3,%a1
4ad80: 53c1 sls %d1
4ad82: 49c1 extbl %d1
4ad84: 4481 negl %d1
4ad86: 6002 bras 4ad8a <_Heap_Free+0x9e>
4ad88: 4281 clrl %d1 <== NOT EXECUTED
Heap_Block * const prev_block = _Heap_Block_at( block, -prev_size );
if ( !_Heap_Is_block_in_heap( heap, prev_block ) ) {
4ad8a: 4a01 tstb %d1
4ad8c: 6700 00c0 beqw 4ae4e <_Heap_Free+0x162>
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;
4ad90: 7201 moveq #1,%d1
4ad92: c2a9 0004 andl %a1@(4),%d1
return( false );
}
/* As we always coalesce free blocks, the block that preceedes prev_block
must have been used. */
if ( !_Heap_Is_prev_used ( prev_block) ) {
4ad96: 6700 00b6 beqw 4ae4e <_Heap_Free+0x162>
_HAssert( false );
return( false );
}
if ( next_is_free ) { /* coalesce both */
4ad9a: 4a05 tstb %d5
4ad9c: 6726 beqs 4adc4 <_Heap_Free+0xd8> <== ALWAYS TAKEN
return _Heap_Free_list_tail(heap)->prev;
}
RTEMS_INLINE_ROUTINE void _Heap_Free_list_remove( Heap_Block *block )
{
Heap_Block *next = block->next;
4ad9e: 266a 0008 moveal %a2@(8),%a3 <== NOT EXECUTED
uintptr_t const size = block_size + prev_size + next_block_size;
4ada2: d480 addl %d0,%d2 <== NOT EXECUTED
4ada4: d682 addl %d2,%d3 <== NOT EXECUTED
_Heap_Free_list_remove( next_block );
stats->free_blocks -= 1;
prev_block->size_and_flag = size | HEAP_PREV_BLOCK_USED;
4ada6: 7401 moveq #1,%d2 <== NOT EXECUTED
Heap_Block *prev = block->prev;
4ada8: 246a 000c moveal %a2@(12),%a2 <== NOT EXECUTED
prev->next = next;
4adac: 254b 0008 movel %a3,%a2@(8) <== NOT EXECUTED
4adb0: 8483 orl %d3,%d2 <== NOT EXECUTED
next->prev = prev;
4adb2: 274a 000c movel %a2,%a3@(12) <== NOT EXECUTED
}
if ( next_is_free ) { /* coalesce both */
uintptr_t const size = block_size + prev_size + next_block_size;
_Heap_Free_list_remove( next_block );
stats->free_blocks -= 1;
4adb6: 53a8 0038 subql #1,%a0@(56) <== NOT EXECUTED
prev_block->size_and_flag = size | HEAP_PREV_BLOCK_USED;
next_block = _Heap_Block_at( prev_block, size );
_HAssert(!_Heap_Is_prev_used( next_block));
next_block->prev_size = size;
4adba: 2383 3800 movel %d3,%a1@(00000000,%d3:l) <== NOT EXECUTED
if ( next_is_free ) { /* coalesce both */
uintptr_t const size = block_size + prev_size + next_block_size;
_Heap_Free_list_remove( next_block );
stats->free_blocks -= 1;
prev_block->size_and_flag = size | HEAP_PREV_BLOCK_USED;
4adbe: 2342 0004 movel %d2,%a1@(4) <== NOT EXECUTED
4adc2: 607a bras 4ae3e <_Heap_Free+0x152> <== NOT EXECUTED
next_block = _Heap_Block_at( prev_block, size );
_HAssert(!_Heap_Is_prev_used( next_block));
next_block->prev_size = size;
} else { /* coalesce prev */
uintptr_t const size = block_size + prev_size;
4adc4: d680 addl %d0,%d3
prev_block->size_and_flag = size | HEAP_PREV_BLOCK_USED;
4adc6: 7201 moveq #1,%d1
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
4adc8: 74fe moveq #-2,%d2
next_block = _Heap_Block_at( prev_block, size );
_HAssert(!_Heap_Is_prev_used( next_block));
next_block->prev_size = size;
} else { /* coalesce prev */
uintptr_t const size = block_size + prev_size;
prev_block->size_and_flag = size | HEAP_PREV_BLOCK_USED;
4adca: 8283 orl %d3,%d1
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
next_block->prev_size = size;
4adcc: 2483 movel %d3,%a2@
next_block = _Heap_Block_at( prev_block, size );
_HAssert(!_Heap_Is_prev_used( next_block));
next_block->prev_size = size;
} else { /* coalesce prev */
uintptr_t const size = block_size + prev_size;
prev_block->size_and_flag = size | HEAP_PREV_BLOCK_USED;
4adce: 2341 0004 movel %d1,%a1@(4)
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
4add2: c5aa 0004 andl %d2,%a2@(4)
4add6: 6066 bras 4ae3e <_Heap_Free+0x152>
next_block->prev_size = size;
}
} else if ( next_is_free ) { /* coalesce next */
4add8: 4a01 tstb %d1
4adda: 672a beqs 4ae06 <_Heap_Free+0x11a>
RTEMS_INLINE_ROUTINE void _Heap_Free_list_replace(
Heap_Block *old_block,
Heap_Block *new_block
)
{
Heap_Block *next = old_block->next;
4addc: 266a 0008 moveal %a2@(8),%a3
uintptr_t const size = block_size + next_block_size;
4ade0: 2202 movel %d2,%d1
4ade2: d280 addl %d0,%d1
_Heap_Free_list_replace( next_block, block );
block->size_and_flag = size | HEAP_PREV_BLOCK_USED;
4ade4: 7401 moveq #1,%d2
Heap_Block *prev = old_block->prev;
4ade6: 246a 000c moveal %a2@(12),%a2
new_block->next = next;
4adea: 234b 0008 movel %a3,%a1@(8)
4adee: 8481 orl %d1,%d2
new_block->prev = prev;
4adf0: 234a 000c movel %a2,%a1@(12)
next_block = _Heap_Block_at( block, size );
next_block->prev_size = size;
4adf4: 2381 1800 movel %d1,%a1@(00000000,%d1:l)
next->prev = new_block;
4adf8: 2749 000c movel %a1,%a3@(12)
prev->next = new_block;
4adfc: 2549 0008 movel %a1,%a2@(8)
next_block->prev_size = size;
}
} else if ( next_is_free ) { /* coalesce next */
uintptr_t const size = block_size + next_block_size;
_Heap_Free_list_replace( next_block, block );
block->size_and_flag = size | HEAP_PREV_BLOCK_USED;
4ae00: 2342 0004 movel %d2,%a1@(4)
4ae04: 6038 bras 4ae3e <_Heap_Free+0x152>
next_block->prev_size = size;
} else { /* no coalesce */
/* Add 'block' to the head of the free blocks list as it tends to
produce less fragmentation than adding to the tail. */
_Heap_Free_list_insert_after( _Heap_Free_list_head( heap), block );
block->size_and_flag = block_size | HEAP_PREV_BLOCK_USED;
4ae06: 7201 moveq #1,%d1
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
4ae08: 74fe moveq #-2,%d2
next_block->prev_size = size;
} else { /* no coalesce */
/* Add 'block' to the head of the free blocks list as it tends to
produce less fragmentation than adding to the tail. */
_Heap_Free_list_insert_after( _Heap_Free_list_head( heap), block );
block->size_and_flag = block_size | HEAP_PREV_BLOCK_USED;
4ae0a: 8280 orl %d0,%d1
RTEMS_INLINE_ROUTINE void _Heap_Free_list_insert_after(
Heap_Block *block_before,
Heap_Block *new_block
)
{
Heap_Block *next = block_before->next;
4ae0c: 2668 0008 moveal %a0@(8),%a3
new_block->next = next;
new_block->prev = block_before;
4ae10: 2348 000c movel %a0,%a1@(12)
4ae14: 2341 0004 movel %d1,%a1@(4)
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
next_block->prev_size = block_size;
/* Statistics */
++stats->free_blocks;
4ae18: 2228 0038 movel %a0@(56),%d1
4ae1c: 5281 addql #1,%d1
Heap_Block *new_block
)
{
Heap_Block *next = block_before->next;
new_block->next = next;
4ae1e: 234b 0008 movel %a3,%a1@(8)
} else { /* no coalesce */
/* Add 'block' to the head of the free blocks list as it tends to
produce less fragmentation than adding to the tail. */
_Heap_Free_list_insert_after( _Heap_Free_list_head( heap), block );
block->size_and_flag = block_size | HEAP_PREV_BLOCK_USED;
next_block->size_and_flag &= ~HEAP_PREV_BLOCK_USED;
4ae22: c5aa 0004 andl %d2,%a2@(4)
new_block->prev = block_before;
block_before->next = new_block;
next->prev = new_block;
4ae26: 2749 000c movel %a1,%a3@(12)
next_block->prev_size = block_size;
4ae2a: 2480 movel %d0,%a2@
{
Heap_Block *next = block_before->next;
new_block->next = next;
new_block->prev = block_before;
block_before->next = new_block;
4ae2c: 2149 0008 movel %a1,%a0@(8)
/* Statistics */
++stats->free_blocks;
4ae30: 2141 0038 movel %d1,%a0@(56)
if ( stats->max_free_blocks < stats->free_blocks ) {
4ae34: b2a8 003c cmpl %a0@(60),%d1
4ae38: 6304 blss 4ae3e <_Heap_Free+0x152> <== NEVER TAKEN
stats->max_free_blocks = stats->free_blocks;
4ae3a: 2141 003c movel %d1,%a0@(60)
}
/* Statistics */
--stats->used_blocks;
++stats->frees;
stats->free_size += block_size;
4ae3e: d1a8 0030 addl %d0,%a0@(48)
stats->max_free_blocks = stats->free_blocks;
}
}
/* Statistics */
--stats->used_blocks;
4ae42: 53a8 0040 subql #1,%a0@(64)
++stats->frees;
4ae46: 52a8 0050 addql #1,%a0@(80)
stats->free_size += block_size;
return( true );
4ae4a: 7001 moveq #1,%d0
4ae4c: 6002 bras 4ae50 <_Heap_Free+0x164>
/* As we always coalesce free blocks, the block that preceedes prev_block
must have been used. */
if ( !_Heap_Is_prev_used ( prev_block) ) {
_HAssert( false );
return( false );
4ae4e: 4200 clrb %d0 <== NOT EXECUTED
--stats->used_blocks;
++stats->frees;
stats->free_size += block_size;
return( true );
}
4ae50: 4cd7 0c3c moveml %sp@,%d2-%d5/%a2-%a3
4ae54: 4e5e unlk %fp <== NOT EXECUTED
0004afcc <_Heap_Free_block>:
#include <rtems/system.h>
#include <rtems/score/sysstate.h>
#include <rtems/score/heap.h>
static void _Heap_Free_block( Heap_Control *heap, Heap_Block *block )
{
4afcc: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4afd0: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
Heap_Statistics *const stats = &heap->stats;
/* Statistics */
++stats->used_blocks;
4afd4: 52a8 0040 addql #1,%a0@(64) <== NOT EXECUTED
--stats->frees;
4afd8: 53a8 0050 subql #1,%a0@(80) <== NOT EXECUTED
_Heap_Free( heap, (void *) _Heap_Alloc_area_of_block( block ));
4afdc: 50ae 000c addql #8,%fp@(12) <== NOT EXECUTED
}
4afe0: 4e5e unlk %fp <== NOT EXECUTED
/* Statistics */
++stats->used_blocks;
--stats->frees;
_Heap_Free( heap, (void *) _Heap_Alloc_area_of_block( block ));
4afe2: 4ef9 0004 b1dc jmp 4b1dc <_Heap_Free> <== NOT EXECUTED
0004656a <_Heap_Get_first_and_last_block>:
uintptr_t page_size,
uintptr_t min_block_size,
Heap_Block **first_block_ptr,
Heap_Block **last_block_ptr
)
{
4656a: 4e56 fff4 linkw %fp,#-12
4656e: 206e 0008 moveal %fp@(8),%a0
uintptr_t const heap_area_end = heap_area_begin + heap_area_size;
uintptr_t const alloc_area_begin =
_Heap_Align_up( heap_area_begin + HEAP_BLOCK_HEADER_SIZE, page_size );
46572: 2008 movel %a0,%d0
46574: 5080 addql #8,%d0
uintptr_t page_size,
uintptr_t min_block_size,
Heap_Block **first_block_ptr,
Heap_Block **last_block_ptr
)
{
46576: 48d7 001c moveml %d2-%d4,%sp@
4657a: 222e 0010 movel %fp@(16),%d1
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_up(
uintptr_t value,
uintptr_t alignment
)
{
uintptr_t remainder = value % alignment;
4657e: 2800 movel %d0,%d4
46580: 242e 000c movel %fp@(12),%d2
uintptr_t const heap_area_end = heap_area_begin + heap_area_size;
46584: 43f0 2800 lea %a0@(00000000,%d2:l),%a1
46588: 4c41 4003 remul %d1,%d3,%d4
if ( remainder != 0 ) {
4658c: 4a83 tstl %d3
4658e: 6704 beqs 46594 <_Heap_Get_first_and_last_block+0x2a><== ALWAYS TAKEN
return value - remainder + alignment;
46590: d081 addl %d1,%d0 <== NOT EXECUTED
46592: 9083 subl %d3,%d0 <== NOT EXECUTED
_Heap_Align_down( heap_area_size - overhead, page_size );
Heap_Block *const first_block = (Heap_Block *) first_block_begin;
Heap_Block *const last_block =
_Heap_Block_at( first_block, first_block_size );
if (
46594: b1c9 cmpal %a1,%a0
46596: 622e bhis 465c6 <_Heap_Get_first_and_last_block+0x5c><== NEVER TAKEN
uintptr_t const alloc_area_begin =
_Heap_Align_up( heap_area_begin + HEAP_BLOCK_HEADER_SIZE, page_size );
uintptr_t const first_block_begin =
alloc_area_begin - HEAP_BLOCK_HEADER_SIZE;
uintptr_t const overhead =
HEAP_BLOCK_HEADER_SIZE + (first_block_begin - heap_area_begin);
46598: 2240 moveal %d0,%a1
4659a: 5189 subql #8,%a1
uintptr_t const heap_area_end = heap_area_begin + heap_area_size;
uintptr_t const alloc_area_begin =
_Heap_Align_up( heap_area_begin + HEAP_BLOCK_HEADER_SIZE, page_size );
uintptr_t const first_block_begin =
alloc_area_begin - HEAP_BLOCK_HEADER_SIZE;
uintptr_t const overhead =
4659c: 9088 subl %a0,%d0
Heap_Block *const last_block =
_Heap_Block_at( first_block, first_block_size );
if (
heap_area_end < heap_area_begin
|| heap_area_size <= overhead
4659e: b082 cmpl %d2,%d0
465a0: 6424 bccs 465c6 <_Heap_Get_first_and_last_block+0x5c>
uintptr_t const first_block_begin =
alloc_area_begin - HEAP_BLOCK_HEADER_SIZE;
uintptr_t const overhead =
HEAP_BLOCK_HEADER_SIZE + (first_block_begin - heap_area_begin);
uintptr_t const first_block_size =
_Heap_Align_down( heap_area_size - overhead, page_size );
465a2: 9480 subl %d0,%d2
465a4: 2002 movel %d2,%d0
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(
uintptr_t value,
uintptr_t alignment
)
{
return value - (value % alignment);
465a6: 2602 movel %d2,%d3
465a8: 4c41 3002 remul %d1,%d2,%d3
465ac: 9082 subl %d2,%d0
_Heap_Block_at( first_block, first_block_size );
if (
heap_area_end < heap_area_begin
|| heap_area_size <= overhead
|| first_block_size < min_block_size
465ae: b0ae 0014 cmpl %fp@(20),%d0
465b2: 6512 bcss 465c6 <_Heap_Get_first_and_last_block+0x5c><== NEVER TAKEN
) {
/* Invalid area or area too small */
return false;
}
*first_block_ptr = first_block;
465b4: 206e 0018 moveal %fp@(24),%a0
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
465b8: d089 addl %a1,%d0
465ba: 2089 movel %a1,%a0@
465bc: 206e 001c moveal %fp@(28),%a0
465c0: 2080 movel %d0,%a0@
*last_block_ptr = last_block;
return true;
465c2: 7001 moveq #1,%d0
465c4: 6002 bras 465c8 <_Heap_Get_first_and_last_block+0x5e>
heap_area_end < heap_area_begin
|| heap_area_size <= overhead
|| first_block_size < min_block_size
) {
/* Invalid area or area too small */
return false;
465c6: 4200 clrb %d0
*first_block_ptr = first_block;
*last_block_ptr = last_block;
return true;
}
465c8: 4cd7 001c moveml %sp@,%d2-%d4
465cc: 4e5e unlk %fp <== NOT EXECUTED
0004f28c <_Heap_Get_free_information>:
void _Heap_Get_free_information(
Heap_Control *the_heap,
Heap_Information *info
)
{
4f28c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4f290: 206e 000c moveal %fp@(12),%a0 <== NOT EXECUTED
4f294: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4f296: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
Heap_Block *the_block;
Heap_Block *const tail = _Heap_Free_list_tail(the_heap);
info->number = 0;
4f29a: 4290 clrl %a0@ <== NOT EXECUTED
info->number++;
info->total += the_size;
if ( info->largest < the_size )
info->largest = the_size;
}
}
4f29c: 226a 0008 moveal %a2@(8),%a1 <== NOT EXECUTED
{
Heap_Block *the_block;
Heap_Block *const tail = _Heap_Free_list_tail(the_heap);
info->number = 0;
info->largest = 0;
4f2a0: 42a8 0004 clrl %a0@(4) <== NOT EXECUTED
info->total = 0;
4f2a4: 42a8 0008 clrl %a0@(8) <== NOT EXECUTED
for(the_block = _Heap_Free_list_first(the_heap);
4f2a8: 601a bras 4f2c4 <_Heap_Get_free_information+0x38><== NOT EXECUTED
- 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;
4f2aa: 70fe moveq #-2,%d0 <== NOT EXECUTED
4f2ac: c0a9 0004 andl %a1@(4),%d0 <== NOT EXECUTED
uint32_t const the_size = _Heap_Block_size(the_block);
/* As we always coalesce free blocks, prev block must have been used. */
_HAssert(_Heap_Is_prev_used(the_block));
info->number++;
4f2b0: 5290 addql #1,%a0@ <== NOT EXECUTED
info->total += the_size;
4f2b2: d1a8 0008 addl %d0,%a0@(8) <== NOT EXECUTED
if ( info->largest < the_size )
4f2b6: b0a8 0004 cmpl %a0@(4),%d0 <== NOT EXECUTED
4f2ba: 6304 blss 4f2c0 <_Heap_Get_free_information+0x34><== NOT EXECUTED
info->largest = the_size;
4f2bc: 2140 0004 movel %d0,%a0@(4) <== NOT EXECUTED
info->largest = 0;
info->total = 0;
for(the_block = _Heap_Free_list_first(the_heap);
the_block != tail;
the_block = the_block->next)
4f2c0: 2269 0008 moveal %a1@(8),%a1 <== NOT EXECUTED
info->number = 0;
info->largest = 0;
info->total = 0;
for(the_block = _Heap_Free_list_first(the_heap);
4f2c4: b5c9 cmpal %a1,%a2 <== NOT EXECUTED
4f2c6: 66e2 bnes 4f2aa <_Heap_Get_free_information+0x1e><== NOT EXECUTED
info->number++;
info->total += the_size;
if ( info->largest < the_size )
info->largest = the_size;
}
}
4f2c8: 245f moveal %sp@+,%a2 <== NOT EXECUTED
4f2ca: 4e5e unlk %fp <== NOT EXECUTED
...
000465d0 <_Heap_Initialize>:
Heap_Control *heap,
void *heap_area_begin_ptr,
uintptr_t heap_area_size,
uintptr_t page_size
)
{
465d0: 4e56 ffe4 linkw %fp,#-28
465d4: 48d7 043c moveml %d2-%d5/%a2,%sp@
465d8: 246e 0008 moveal %fp@(8),%a2
465dc: 282e 000c movel %fp@(12),%d4
465e0: 2a2e 0010 movel %fp@(16),%d5
465e4: 242e 0014 movel %fp@(20),%d2
uintptr_t first_block_begin = 0;
uintptr_t first_block_size = 0;
uintptr_t last_block_begin = 0;
uintptr_t min_block_size = 0;
bool area_ok = false;
Heap_Block *first_block = NULL;
465e8: 42ae fffc clrl %fp@(-4)
Heap_Block *last_block = NULL;
465ec: 42ae fff8 clrl %fp@(-8)
if ( page_size == 0 ) {
465f0: 4a82 tstl %d2
465f2: 6714 beqs 46608 <_Heap_Initialize+0x38> <== NEVER TAKEN
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_up(
uintptr_t value,
uintptr_t alignment
)
{
uintptr_t remainder = value % alignment;
465f4: 7003 moveq #3,%d0
465f6: c082 andl %d2,%d0
if ( remainder != 0 ) {
465f8: 6704 beqs 465fe <_Heap_Initialize+0x2e> <== ALWAYS TAKEN
return value - remainder + alignment;
465fa: 5882 addql #4,%d2 <== NOT EXECUTED
465fc: 9480 subl %d0,%d2 <== NOT EXECUTED
page_size = CPU_ALIGNMENT;
} else {
page_size = _Heap_Align_up( page_size, CPU_ALIGNMENT );
if ( page_size < CPU_ALIGNMENT ) {
465fe: 7003 moveq #3,%d0
46600: b082 cmpl %d2,%d0
46602: 6506 bcss 4660a <_Heap_Initialize+0x3a> <== ALWAYS TAKEN
46604: 6000 00c0 braw 466c6 <_Heap_Initialize+0xf6> <== NOT EXECUTED
bool area_ok = false;
Heap_Block *first_block = NULL;
Heap_Block *last_block = NULL;
if ( page_size == 0 ) {
page_size = CPU_ALIGNMENT;
46608: 7404 moveq #4,%d2 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_up(
uintptr_t value,
uintptr_t alignment
)
{
uintptr_t remainder = value % alignment;
4660a: 7210 moveq #16,%d1
4660c: 4c42 1000 remul %d2,%d0,%d1
if ( remainder != 0 ) {
46610: 4a80 tstl %d0
46612: 670c beqs 46620 <_Heap_Initialize+0x50> <== ALWAYS TAKEN
return value - remainder + alignment;
46614: 2602 movel %d2,%d3 <== NOT EXECUTED
46616: 0683 0000 0010 addil #16,%d3 <== NOT EXECUTED
4661c: 9680 subl %d0,%d3 <== NOT EXECUTED
4661e: 6002 bras 46622 <_Heap_Initialize+0x52> <== NOT EXECUTED
} else {
return value;
46620: 7610 moveq #16,%d3
return 0;
}
}
min_block_size = _Heap_Align_up( sizeof( Heap_Block ), page_size );
area_ok = _Heap_Get_first_and_last_block(
46622: 486e fff8 pea %fp@(-8)
46626: 486e fffc pea %fp@(-4)
4662a: 2f03 movel %d3,%sp@-
4662c: 2f02 movel %d2,%sp@-
4662e: 2f05 movel %d5,%sp@-
46630: 2f04 movel %d4,%sp@-
46632: 4eb9 0004 656a jsr 4656a <_Heap_Get_first_and_last_block>
page_size,
min_block_size,
&first_block,
&last_block
);
if ( !area_ok ) {
46638: 4fef 0018 lea %sp@(24),%sp
4663c: 4a00 tstb %d0
4663e: 6700 0086 beqw 466c6 <_Heap_Initialize+0xf6>
return 0;
}
memset(heap, 0, sizeof(*heap));
46642: 4878 0058 pea 58 <DBL_MANT_DIG+0x23>
uintptr_t page_size
)
{
Heap_Statistics *const stats = &heap->stats;
uintptr_t const heap_area_begin = (uintptr_t) heap_area_begin_ptr;
uintptr_t const heap_area_end = heap_area_begin + heap_area_size;
46646: da84 addl %d4,%d5
);
if ( !area_ok ) {
return 0;
}
memset(heap, 0, sizeof(*heap));
46648: 42a7 clrl %sp@-
4664a: 2f0a movel %a2,%sp@-
4664c: 4eb9 0004 d270 jsr 4d270 <memset>
heap->Protection.block_check = _Heap_Protection_block_check_default;
heap->Protection.block_error = _Heap_Protection_block_error_default;
#endif
first_block_begin = (uintptr_t) first_block;
last_block_begin = (uintptr_t) last_block;
46652: 226e fff8 moveal %fp@(-8),%a1
first_block_size = last_block_begin - first_block_begin;
46656: 2009 movel %a1,%d0
/* First block */
first_block->prev_size = heap_area_end;
first_block->size_and_flag = first_block_size | HEAP_PREV_BLOCK_USED;
46658: 7201 moveq #1,%d1
);
_HAssert(
_Heap_Is_aligned( _Heap_Alloc_area_of_block( last_block ), page_size )
);
return first_block_size;
4665a: 4fef 000c lea %sp@(12),%sp
heap->Protection.block_initialize = _Heap_Protection_block_initialize_default;
heap->Protection.block_check = _Heap_Protection_block_check_default;
heap->Protection.block_error = _Heap_Protection_block_error_default;
#endif
first_block_begin = (uintptr_t) first_block;
4665e: 206e fffc moveal %fp@(-4),%a0
last_block_begin = (uintptr_t) last_block;
first_block_size = last_block_begin - first_block_begin;
46662: 9088 subl %a0,%d0
/* First block */
first_block->prev_size = heap_area_end;
first_block->size_and_flag = first_block_size | HEAP_PREV_BLOCK_USED;
46664: 8280 orl %d0,%d1
first_block_begin = (uintptr_t) first_block;
last_block_begin = (uintptr_t) last_block;
first_block_size = last_block_begin - first_block_begin;
/* First block */
first_block->prev_size = heap_area_end;
46666: 2085 movel %d5,%a0@
first_block->size_and_flag = first_block_size | HEAP_PREV_BLOCK_USED;
46668: 2141 0004 movel %d1,%a0@(4)
/* Statistics */
stats->size = first_block_size;
stats->free_size = first_block_size;
stats->min_free_size = first_block_size;
stats->free_blocks = 1;
4666c: 7201 moveq #1,%d1
first_block_size = last_block_begin - first_block_begin;
/* First block */
first_block->prev_size = heap_area_end;
first_block->size_and_flag = first_block_size | HEAP_PREV_BLOCK_USED;
first_block->next = _Heap_Free_list_tail( heap );
4666e: 214a 0008 movel %a2,%a0@(8)
first_block->prev = _Heap_Free_list_head( heap );
46672: 214a 000c movel %a2,%a0@(12)
heap->min_block_size = min_block_size;
heap->area_begin = heap_area_begin;
heap->area_end = heap_area_end;
heap->first_block = first_block;
heap->last_block = last_block;
_Heap_Free_list_head( heap )->next = first_block;
46676: 2548 0008 movel %a0,%a2@(8)
/* Heap control */
heap->page_size = page_size;
heap->min_block_size = min_block_size;
heap->area_begin = heap_area_begin;
heap->area_end = heap_area_end;
heap->first_block = first_block;
4667a: 2548 0020 movel %a0,%a2@(32)
first_block->next = _Heap_Free_list_tail( heap );
first_block->prev = _Heap_Free_list_head( heap );
_Heap_Protection_block_initialize( heap, first_block );
/* Heap control */
heap->page_size = page_size;
4667e: 2542 0010 movel %d2,%a2@(16)
heap->min_block_size = min_block_size;
46682: 2543 0014 movel %d3,%a2@(20)
heap->area_begin = heap_area_begin;
46686: 2544 0018 movel %d4,%a2@(24)
heap->area_end = heap_area_end;
4668a: 2545 001c movel %d5,%a2@(28)
heap->first_block = first_block;
heap->last_block = last_block;
4668e: 2549 0024 movel %a1,%a2@(36)
_Heap_Free_list_head( heap )->next = first_block;
_Heap_Free_list_tail( heap )->prev = first_block;
46692: 2548 000c movel %a0,%a2@(12)
* This feature will be used to terminate the scattered heap area list. See
* also _Heap_Extend().
*/
RTEMS_INLINE_ROUTINE void _Heap_Set_last_block_size( Heap_Control *heap )
{
_Heap_Block_set_size(
46696: 91c9 subal %a1,%a0
/* Last block */
last_block->prev_size = first_block_size;
46698: 2280 movel %d0,%a1@
4669a: 2348 0004 movel %a0,%a1@(4)
/* Statistics */
stats->size = first_block_size;
stats->free_size = first_block_size;
stats->min_free_size = first_block_size;
stats->free_blocks = 1;
4669e: 2541 0038 movel %d1,%a2@(56)
stats->max_free_blocks = 1;
466a2: 2541 003c movel %d1,%a2@(60)
stats->instance = instance++;
466a6: 2239 0005 d2bc movel 5d2bc <instance>,%d1
466ac: 2541 0028 movel %d1,%a2@(40)
466b0: 5281 addql #1,%d1
last_block->size_and_flag = 0;
_Heap_Set_last_block_size( heap );
_Heap_Protection_block_initialize( heap, last_block );
/* Statistics */
stats->size = first_block_size;
466b2: 2540 002c movel %d0,%a2@(44)
stats->free_size = first_block_size;
466b6: 2540 0030 movel %d0,%a2@(48)
stats->min_free_size = first_block_size;
466ba: 2540 0034 movel %d0,%a2@(52)
stats->free_blocks = 1;
stats->max_free_blocks = 1;
stats->instance = instance++;
466be: 23c1 0005 d2bc movel %d1,5d2bc <instance>
);
_HAssert(
_Heap_Is_aligned( _Heap_Alloc_area_of_block( last_block ), page_size )
);
return first_block_size;
466c4: 6002 bras 466c8 <_Heap_Initialize+0xf8>
min_block_size,
&first_block,
&last_block
);
if ( !area_ok ) {
return 0;
466c6: 4280 clrl %d0
_HAssert(
_Heap_Is_aligned( _Heap_Alloc_area_of_block( last_block ), page_size )
);
return first_block_size;
}
466c8: 4cee 043c ffe4 moveml %fp@(-28),%d2-%d5/%a2
466ce: 4e5e unlk %fp <== NOT EXECUTED
0005a510 <_Heap_Resize_block>:
void *alloc_begin_ptr,
uintptr_t new_alloc_size,
uintptr_t *old_size,
uintptr_t *new_size
)
{
5a510: 4e56 ffe4 linkw %fp,#-28 <== NOT EXECUTED
5a514: 48d7 1c3c moveml %d2-%d5/%a2-%a4,%sp@ <== NOT EXECUTED
5a518: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(
uintptr_t value,
uintptr_t alignment
)
{
return value - (value % alignment);
5a51c: 2202 movel %d2,%d1 <== NOT EXECUTED
5a51e: 2042 moveal %d2,%a0 <== NOT EXECUTED
5a520: 5188 subql #8,%a0 <== NOT EXECUTED
5a522: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
5a526: 282e 0010 movel %fp@(16),%d4 <== NOT EXECUTED
5a52a: 286e 0014 moveal %fp@(20),%a4 <== NOT EXECUTED
5a52e: 266e 0018 moveal %fp@(24),%a3 <== NOT EXECUTED
5a532: 4c6a 1000 0010 remul %a2@(16),%d0,%d1 <== NOT EXECUTED
uintptr_t const alloc_begin = (uintptr_t) alloc_begin_ptr;
Heap_Block *const block = _Heap_Block_of_alloc_area( alloc_begin, page_size );
*old_size = 0;
5a538: 4294 clrl %a4@ <== NOT EXECUTED
uintptr_t alloc_begin,
uintptr_t page_size
)
{
return (Heap_Block *) (_Heap_Align_down( alloc_begin, page_size )
- HEAP_BLOCK_HEADER_SIZE);
5a53a: 91c0 subal %d0,%a0 <== NOT EXECUTED
*new_size = 0;
5a53c: 4293 clrl %a3@ <== NOT EXECUTED
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;
5a53e: b1ea 0020 cmpal %a2@(32),%a0 <== NOT EXECUTED
5a542: 6500 0096 bcsw 5a5da <_Heap_Resize_block+0xca> <== NOT EXECUTED
5a546: b1ea 0024 cmpal %a2@(36),%a0 <== NOT EXECUTED
5a54a: 6200 008e bhiw 5a5da <_Heap_Resize_block+0xca> <== NOT EXECUTED
- 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;
5a54e: 70fe moveq #-2,%d0 <== NOT EXECUTED
5a550: 72fe moveq #-2,%d1 <== NOT EXECUTED
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;
5a552: 7a01 moveq #1,%d5 <== NOT EXECUTED
uintptr_t const block_begin = (uintptr_t) block;
uintptr_t block_size = _Heap_Block_size( block );
uintptr_t block_end = block_begin + block_size;
uintptr_t alloc_size = block_end - alloc_begin + HEAP_ALLOC_BONUS;
5a554: 7604 moveq #4,%d3 <== NOT EXECUTED
5a556: 9682 subl %d2,%d3 <== NOT EXECUTED
- 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;
5a558: c0a8 0004 andl %a0@(4),%d0 <== NOT EXECUTED
{
Heap_Statistics *const stats = &heap->stats;
uintptr_t const block_begin = (uintptr_t) block;
uintptr_t block_size = _Heap_Block_size( block );
uintptr_t block_end = block_begin + block_size;
5a55c: 43f0 0800 lea %a0@(00000000,%d0:l),%a1 <== NOT EXECUTED
uintptr_t alloc_size = block_end - alloc_begin + HEAP_ALLOC_BONUS;
5a560: d689 addl %a1,%d3 <== NOT EXECUTED
5a562: c2a9 0004 andl %a1@(4),%d1 <== NOT EXECUTED
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;
5a566: cab1 1804 andl %a1@(00000004,%d1:l),%d5 <== NOT EXECUTED
bool next_block_is_free = _Heap_Is_free( next_block );;
_HAssert( _Heap_Is_block_in_heap( heap, next_block ) );
_HAssert( _Heap_Is_prev_used( next_block ) );
*old_size = alloc_size;
5a56a: 2883 movel %d3,%a4@ <== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _Heap_Is_free(
const Heap_Block *block
)
{
return !_Heap_Is_used( block );
5a56c: 4a85 tstl %d5 <== NOT EXECUTED
5a56e: 57c5 seq %d5 <== NOT EXECUTED
5a570: 4485 negl %d5 <== NOT EXECUTED
if ( next_block_is_free ) {
5a572: 4a05 tstb %d5 <== NOT EXECUTED
5a574: 6704 beqs 5a57a <_Heap_Resize_block+0x6a> <== NOT EXECUTED
block_size += next_block_size;
5a576: d081 addl %d1,%d0 <== NOT EXECUTED
alloc_size += next_block_size;
5a578: d681 addl %d1,%d3 <== NOT EXECUTED
}
if ( new_alloc_size > alloc_size ) {
5a57a: b684 cmpl %d4,%d3 <== NOT EXECUTED
5a57c: 6558 bcss 5a5d6 <_Heap_Resize_block+0xc6> <== NOT EXECUTED
return HEAP_RESIZE_UNSATISFIED;
}
if ( next_block_is_free ) {
5a57e: 4a05 tstb %d5 <== NOT EXECUTED
5a580: 672a beqs 5a5ac <_Heap_Resize_block+0x9c> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Heap_Block_set_size(
Heap_Block *block,
uintptr_t size
)
{
uintptr_t flag = block->size_and_flag & HEAP_PREV_BLOCK_USED;
5a582: 7601 moveq #1,%d3 <== NOT EXECUTED
5a584: c6a8 0004 andl %a0@(4),%d3 <== NOT EXECUTED
return _Heap_Free_list_tail(heap)->prev;
}
RTEMS_INLINE_ROUTINE void _Heap_Free_list_remove( Heap_Block *block )
{
Heap_Block *next = block->next;
5a588: 2869 0008 moveal %a1@(8),%a4 <== NOT EXECUTED
uintptr_t size
)
{
uintptr_t flag = block->size_and_flag & HEAP_PREV_BLOCK_USED;
block->size_and_flag = size | flag;
5a58c: 8680 orl %d0,%d3 <== NOT EXECUTED
}
RTEMS_INLINE_ROUTINE void _Heap_Free_list_remove( Heap_Block *block )
{
Heap_Block *next = block->next;
Heap_Block *prev = block->prev;
5a58e: 2269 000c moveal %a1@(12),%a1 <== NOT EXECUTED
uintptr_t size
)
{
uintptr_t flag = block->size_and_flag & HEAP_PREV_BLOCK_USED;
block->size_and_flag = size | flag;
5a592: 2143 0004 movel %d3,%a0@(4) <== NOT EXECUTED
_Heap_Block_set_size( block, block_size );
_Heap_Free_list_remove( next_block );
next_block = _Heap_Block_at( block, block_size );
next_block->size_and_flag |= HEAP_PREV_BLOCK_USED;
5a596: 7601 moveq #1,%d3 <== NOT EXECUTED
5a598: 87b0 0804 orl %d3,%a0@(00000004,%d0:l) <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Heap_Free_list_remove( Heap_Block *block )
{
Heap_Block *next = block->next;
Heap_Block *prev = block->prev;
prev->next = next;
5a59c: 234c 0008 movel %a4,%a1@(8) <== NOT EXECUTED
next->prev = prev;
5a5a0: 2949 000c movel %a1,%a4@(12) <== NOT EXECUTED
/* Statistics */
--stats->free_blocks;
5a5a4: 53aa 0038 subql #1,%a2@(56) <== NOT EXECUTED
stats->free_size -= next_block_size;
5a5a8: 93aa 0030 subl %d1,%a2@(48) <== NOT EXECUTED
}
block = _Heap_Block_allocate( heap, block, alloc_begin, new_alloc_size );
5a5ac: 2f04 movel %d4,%sp@- <== NOT EXECUTED
5a5ae: 2f02 movel %d2,%sp@- <== NOT EXECUTED
5a5b0: 2f08 movel %a0,%sp@- <== NOT EXECUTED
5a5b2: 2f0a movel %a2,%sp@- <== NOT EXECUTED
5a5b4: 4eb9 0004 66d2 jsr 466d2 <_Heap_Block_allocate> <== NOT EXECUTED
block_size = _Heap_Block_size( block );
next_block = _Heap_Block_at( block, block_size );
*new_size = (uintptr_t) next_block - alloc_begin + HEAP_ALLOC_BONUS;
/* Statistics */
++stats->resizes;
5a5ba: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
- 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;
5a5be: 72fe moveq #-2,%d1 <== NOT EXECUTED
5a5c0: 2040 moveal %d0,%a0 <== NOT EXECUTED
return HEAP_RESIZE_SUCCESSFUL;
5a5c2: 4280 clrl %d0 <== NOT EXECUTED
5a5c4: c2a8 0004 andl %a0@(4),%d1 <== NOT EXECUTED
block = _Heap_Block_allocate( heap, block, alloc_begin, new_alloc_size );
block_size = _Heap_Block_size( block );
next_block = _Heap_Block_at( block, block_size );
*new_size = (uintptr_t) next_block - alloc_begin + HEAP_ALLOC_BONUS;
5a5c8: 91c2 subal %d2,%a0 <== NOT EXECUTED
5a5ca: 41f0 1804 lea %a0@(00000004,%d1:l),%a0 <== NOT EXECUTED
5a5ce: 2688 movel %a0,%a3@ <== NOT EXECUTED
/* Statistics */
++stats->resizes;
5a5d0: 52aa 0054 addql #1,%a2@(84) <== NOT EXECUTED
5a5d4: 6006 bras 5a5dc <_Heap_Resize_block+0xcc> <== NOT EXECUTED
block_size += next_block_size;
alloc_size += next_block_size;
}
if ( new_alloc_size > alloc_size ) {
return HEAP_RESIZE_UNSATISFIED;
5a5d6: 7001 moveq #1,%d0 <== NOT EXECUTED
*new_size = 0;
_Heap_Protection_block_check( heap, block );
if ( _Heap_Is_block_in_heap( heap, block ) ) {
return _Heap_Resize_block_checked(
5a5d8: 6002 bras 5a5dc <_Heap_Resize_block+0xcc> <== NOT EXECUTED
new_alloc_size,
old_size,
new_size
);
} else {
return HEAP_RESIZE_FATAL_ERROR;
5a5da: 7002 moveq #2,%d0 <== NOT EXECUTED
}
}
5a5dc: 4cee 1c3c ffe4 moveml %fp@(-28),%d2-%d5/%a2-%a4 <== NOT EXECUTED
5a5e2: 4e5e unlk %fp <== NOT EXECUTED
...
0005a5e8 <_Heap_Size_of_alloc_area>:
bool _Heap_Size_of_alloc_area(
Heap_Control *heap,
void *alloc_begin_ptr,
uintptr_t *alloc_size
)
{
5a5e8: 4e56 0000 linkw %fp,#0
5a5ec: 202e 000c movel %fp@(12),%d0
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(
uintptr_t value,
uintptr_t alignment
)
{
return value - (value % alignment);
5a5f0: 2040 moveal %d0,%a0
5a5f2: 5188 subql #8,%a0
5a5f4: 226e 0008 moveal %fp@(8),%a1
5a5f8: 2f02 movel %d2,%sp@-
5a5fa: 2400 movel %d0,%d2
5a5fc: 4c69 2001 0010 remul %a1@(16),%d1,%d2
RTEMS_INLINE_ROUTINE bool _Heap_Is_block_in_heap(
const Heap_Control *heap,
const Heap_Block *block
)
{
return (uintptr_t) block >= (uintptr_t) heap->first_block
5a602: 2429 0020 movel %a1@(32),%d2
uintptr_t alloc_begin,
uintptr_t page_size
)
{
return (Heap_Block *) (_Heap_Align_down( alloc_begin, page_size )
- HEAP_BLOCK_HEADER_SIZE);
5a606: 91c1 subal %d1,%a0
const Heap_Control *heap,
const Heap_Block *block
)
{
return (uintptr_t) block >= (uintptr_t) heap->first_block
&& (uintptr_t) block <= (uintptr_t) heap->last_block;
5a608: b488 cmpl %a0,%d2
5a60a: 620c bhis 5a618 <_Heap_Size_of_alloc_area+0x30> <== NEVER TAKEN
5a60c: b1e9 0024 cmpal %a1@(36),%a0
5a610: 53c1 sls %d1
5a612: 49c1 extbl %d1
5a614: 4481 negl %d1
5a616: 6002 bras 5a61a <_Heap_Size_of_alloc_area+0x32>
5a618: 4281 clrl %d1 <== NOT EXECUTED
uintptr_t const alloc_begin = (uintptr_t) alloc_begin_ptr;
Heap_Block *block = _Heap_Block_of_alloc_area( alloc_begin, page_size );
Heap_Block *next_block = NULL;
uintptr_t block_size = 0;
if ( !_Heap_Is_block_in_heap( heap, block ) ) {
5a61a: 4a01 tstb %d1
5a61c: 6738 beqs 5a656 <_Heap_Size_of_alloc_area+0x6e> <== NEVER TAKEN
- HEAP_BLOCK_HEADER_SIZE);
}
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Block_size( const Heap_Block *block )
{
return block->size_and_flag & ~HEAP_PREV_BLOCK_USED;
5a61e: 72fe moveq #-2,%d1
5a620: c2a8 0004 andl %a0@(4),%d1
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
5a624: d1c1 addal %d1,%a0
const Heap_Control *heap,
const Heap_Block *block
)
{
return (uintptr_t) block >= (uintptr_t) heap->first_block
&& (uintptr_t) block <= (uintptr_t) heap->last_block;
5a626: b488 cmpl %a0,%d2
5a628: 620c bhis 5a636 <_Heap_Size_of_alloc_area+0x4e> <== NEVER TAKEN
5a62a: b1e9 0024 cmpal %a1@(36),%a0
5a62e: 53c1 sls %d1
5a630: 49c1 extbl %d1
5a632: 4481 negl %d1
5a634: 6002 bras 5a638 <_Heap_Size_of_alloc_area+0x50>
5a636: 4281 clrl %d1 <== NOT EXECUTED
}
block_size = _Heap_Block_size( block );
next_block = _Heap_Block_at( block, block_size );
if (
5a638: 4a01 tstb %d1
5a63a: 671a beqs 5a656 <_Heap_Size_of_alloc_area+0x6e> <== NEVER TAKEN
block->size_and_flag = size | flag;
}
RTEMS_INLINE_ROUTINE bool _Heap_Is_prev_used( const Heap_Block *block )
{
return block->size_and_flag & HEAP_PREV_BLOCK_USED;
5a63c: 7201 moveq #1,%d1
5a63e: c2a8 0004 andl %a0@(4),%d1
!_Heap_Is_block_in_heap( heap, next_block )
|| !_Heap_Is_prev_used( next_block )
5a642: 6712 beqs 5a656 <_Heap_Size_of_alloc_area+0x6e> <== NEVER TAKEN
) {
return false;
}
*alloc_size = (uintptr_t) next_block + HEAP_ALLOC_BONUS - alloc_begin;
5a644: 7204 moveq #4,%d1
5a646: 9280 subl %d0,%d1
5a648: 2001 movel %d1,%d0
5a64a: d088 addl %a0,%d0
5a64c: 226e 0010 moveal %fp@(16),%a1
5a650: 2280 movel %d0,%a1@
return true;
5a652: 7001 moveq #1,%d0
5a654: 6002 bras 5a658 <_Heap_Size_of_alloc_area+0x70>
if (
!_Heap_Is_block_in_heap( heap, next_block )
|| !_Heap_Is_prev_used( next_block )
) {
return false;
5a656: 4200 clrb %d0 <== NOT EXECUTED
}
*alloc_size = (uintptr_t) next_block + HEAP_ALLOC_BONUS - alloc_begin;
return true;
}
5a658: 241f movel %sp@+,%d2
5a65a: 4e5e unlk %fp
...
000471ae <_Heap_Walk>:
bool _Heap_Walk(
Heap_Control *heap,
int source,
bool dump
)
{
471ae: 4e56 ffd0 linkw %fp,#-48 <== NOT EXECUTED
471b2: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@ <== NOT EXECUTED
471b6: 266e 0008 moveal %fp@(8),%a3 <== NOT EXECUTED
uintptr_t const min_block_size = heap->min_block_size;
Heap_Block *const first_block = heap->first_block;
Heap_Block *const last_block = heap->last_block;
Heap_Block *block = first_block;
Heap_Walk_printer printer = dump ?
_Heap_Walk_print : _Heap_Walk_print_nothing;
471ba: 45fa ffac lea %pc@(47168 <_Heap_Walk_print_nothing>),%a2<== NOT EXECUTED
bool _Heap_Walk(
Heap_Control *heap,
int source,
bool dump
)
{
471be: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
uintptr_t const page_size = heap->page_size;
471c2: 282b 0010 movel %a3@(16),%d4 <== NOT EXECUTED
uintptr_t const min_block_size = heap->min_block_size;
471c6: 2a2b 0014 movel %a3@(20),%d5 <== NOT EXECUTED
Heap_Block *const first_block = heap->first_block;
471ca: 2c2b 0020 movel %a3@(32),%d6 <== NOT EXECUTED
Heap_Block *const last_block = heap->last_block;
471ce: 2e2b 0024 movel %a3@(36),%d7 <== NOT EXECUTED
Heap_Block *block = first_block;
Heap_Walk_printer printer = dump ?
_Heap_Walk_print : _Heap_Walk_print_nothing;
471d2: 4a2e 0013 tstb %fp@(19) <== NOT EXECUTED
471d6: 6704 beqs 471dc <_Heap_Walk+0x2e> <== NOT EXECUTED
471d8: 45fa ff96 lea %pc@(47170 <_Heap_Walk_print>),%a2 <== NOT EXECUTED
if ( !_System_state_Is_up( _System_state_Get() ) ) {
471dc: 7003 moveq #3,%d0 <== NOT EXECUTED
471de: b0b9 0005 ffcc cmpl 5ffcc <_System_state_Current>,%d0 <== NOT EXECUTED
471e4: 6600 02fc bnew 474e2 <_Heap_Walk+0x334> <== NOT EXECUTED
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)(
471e8: 2f2b 000c movel %a3@(12),%sp@- <== NOT EXECUTED
471ec: 2f2b 0008 movel %a3@(8),%sp@- <== NOT EXECUTED
471f0: 2f07 movel %d7,%sp@- <== NOT EXECUTED
471f2: 2f06 movel %d6,%sp@- <== NOT EXECUTED
471f4: 2f2b 001c movel %a3@(28),%sp@- <== NOT EXECUTED
471f8: 2f2b 0018 movel %a3@(24),%sp@- <== NOT EXECUTED
471fc: 2f05 movel %d5,%sp@- <== NOT EXECUTED
471fe: 2f04 movel %d4,%sp@- <== NOT EXECUTED
47200: 4879 0005 c269 pea 5c269 <C.0.4118+0x57> <== NOT EXECUTED
47206: 42a7 clrl %sp@- <== NOT EXECUTED
47208: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4720a: 4e92 jsr %a2@ <== NOT EXECUTED
heap->area_begin, heap->area_end,
first_block, last_block,
first_free_block, last_free_block
);
if ( page_size == 0 ) {
4720c: 4fef 002c lea %sp@(44),%sp <== NOT EXECUTED
47210: 4a84 tstl %d4 <== NOT EXECUTED
47212: 6608 bnes 4721c <_Heap_Walk+0x6e> <== NOT EXECUTED
(*printer)( source, true, "page size is zero\n" );
47214: 4879 0005 c2fa pea 5c2fa <C.0.4118+0xe8> <== NOT EXECUTED
4721a: 6050 bras 4726c <_Heap_Walk+0xbe> <== NOT EXECUTED
)
{
#if (CPU_ALIGNMENT == 0)
return true;
#else
return (((uintptr_t)address % CPU_ALIGNMENT) == 0);
4721c: 7003 moveq #3,%d0 <== NOT EXECUTED
4721e: c084 andl %d4,%d0 <== NOT EXECUTED
return false;
}
if ( !_Addresses_Is_aligned( (void *) page_size ) ) {
47220: 670c beqs 4722e <_Heap_Walk+0x80> <== NOT EXECUTED
(*printer)(
47222: 2f04 movel %d4,%sp@- <== NOT EXECUTED
47224: 4879 0005 c30d pea 5c30d <C.0.4118+0xfb> <== NOT EXECUTED
4722a: 6000 02ca braw 474f6 <_Heap_Walk+0x348> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _Heap_Is_aligned(
uintptr_t value,
uintptr_t alignment
)
{
return (value % alignment) == 0;
4722e: 2205 movel %d5,%d1 <== NOT EXECUTED
47230: 4c44 1000 remul %d4,%d0,%d1 <== NOT EXECUTED
);
return false;
}
if ( !_Heap_Is_aligned( min_block_size, page_size ) ) {
47234: 4a80 tstl %d0 <== NOT EXECUTED
47236: 670c beqs 47244 <_Heap_Walk+0x96> <== NOT EXECUTED
(*printer)(
47238: 2f05 movel %d5,%sp@- <== NOT EXECUTED
4723a: 4879 0005 c32b pea 5c32b <C.0.4118+0x119> <== NOT EXECUTED
47240: 6000 02b4 braw 474f6 <_Heap_Walk+0x348> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Alloc_area_of_block(
const Heap_Block *block
)
{
return (uintptr_t) block + HEAP_BLOCK_HEADER_SIZE;
47244: 2006 movel %d6,%d0 <== NOT EXECUTED
47246: 5080 addql #8,%d0 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _Heap_Is_aligned(
uintptr_t value,
uintptr_t alignment
)
{
return (value % alignment) == 0;
47248: 4c44 0001 remul %d4,%d1,%d0 <== NOT EXECUTED
);
return false;
}
if (
4724c: 4a81 tstl %d1 <== NOT EXECUTED
4724e: 670c beqs 4725c <_Heap_Walk+0xae> <== NOT EXECUTED
!_Heap_Is_aligned( _Heap_Alloc_area_of_block( first_block ), page_size )
) {
(*printer)(
47250: 2f06 movel %d6,%sp@- <== NOT EXECUTED
47252: 4879 0005 c34f pea 5c34f <C.0.4118+0x13d> <== NOT EXECUTED
47258: 6000 029c braw 474f6 <_Heap_Walk+0x348> <== NOT EXECUTED
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;
4725c: 7001 moveq #1,%d0 <== NOT EXECUTED
4725e: 2046 moveal %d6,%a0 <== NOT EXECUTED
47260: c0a8 0004 andl %a0@(4),%d0 <== NOT EXECUTED
);
return false;
}
if ( !_Heap_Is_prev_used( first_block ) ) {
47264: 6616 bnes 4727c <_Heap_Walk+0xce> <== NOT EXECUTED
(*printer)(
47266: 4879 0005 c380 pea 5c380 <C.0.4118+0x16e> <== NOT EXECUTED
4726c: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
47270: 2f02 movel %d2,%sp@- <== NOT EXECUTED
47272: 4e92 jsr %a2@ <== NOT EXECUTED
47274: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
47278: 6000 00ba braw 47334 <_Heap_Walk+0x186> <== NOT EXECUTED
- 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;
4727c: 70fe moveq #-2,%d0 <== NOT EXECUTED
4727e: 2047 moveal %d7,%a0 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
47280: 2847 moveal %d7,%a4 <== NOT EXECUTED
- 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;
47282: c0a8 0004 andl %a0@(4),%d0 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
47286: d9c0 addal %d0,%a4 <== NOT EXECUTED
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;
47288: 7001 moveq #1,%d0 <== NOT EXECUTED
4728a: c0ac 0004 andl %a4@(4),%d0 <== NOT EXECUTED
);
return false;
}
if ( _Heap_Is_free( last_block ) ) {
4728e: 6608 bnes 47298 <_Heap_Walk+0xea> <== NOT EXECUTED
(*printer)(
47290: 4879 0005 c3ae pea 5c3ae <C.0.4118+0x19c> <== NOT EXECUTED
47296: 60d4 bras 4726c <_Heap_Walk+0xbe> <== NOT EXECUTED
);
return false;
}
if (
47298: bc8c cmpl %a4,%d6 <== NOT EXECUTED
4729a: 6708 beqs 472a4 <_Heap_Walk+0xf6> <== NOT EXECUTED
_Heap_Block_at( last_block, _Heap_Block_size( last_block ) ) != first_block
) {
(*printer)(
4729c: 4879 0005 c3c3 pea 5c3c3 <C.0.4118+0x1b1> <== NOT EXECUTED
472a2: 60c8 bras 4726c <_Heap_Walk+0xbe> <== NOT EXECUTED
int source,
Heap_Walk_printer printer,
Heap_Control *heap
)
{
uintptr_t const page_size = heap->page_size;
472a4: 262b 0010 movel %a3@(16),%d3 <== NOT EXECUTED
const Heap_Block *const free_list_tail = _Heap_Free_list_tail( heap );
472a8: 220b movel %a3,%d1 <== NOT EXECUTED
block = next_block;
} while ( block != first_block );
return true;
}
472aa: 206b 0008 moveal %a3@(8),%a0 <== NOT EXECUTED
472ae: 2d44 fff8 movel %d4,%fp@(-8) <== NOT EXECUTED
472b2: 2d43 fffc movel %d3,%fp@(-4) <== NOT EXECUTED
472b6: 6000 0088 braw 47340 <_Heap_Walk+0x192> <== NOT EXECUTED
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;
472ba: b1eb 0020 cmpal %a3@(32),%a0 <== NOT EXECUTED
472be: 650c bcss 472cc <_Heap_Walk+0x11e> <== NOT EXECUTED
472c0: b1eb 0024 cmpal %a3@(36),%a0 <== NOT EXECUTED
472c4: 53c0 sls %d0 <== NOT EXECUTED
472c6: 49c0 extbl %d0 <== NOT EXECUTED
472c8: 4480 negl %d0 <== NOT EXECUTED
472ca: 6002 bras 472ce <_Heap_Walk+0x120> <== NOT EXECUTED
472cc: 4280 clrl %d0 <== NOT EXECUTED
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 ) ) {
472ce: 4a00 tstb %d0 <== NOT EXECUTED
472d0: 660c bnes 472de <_Heap_Walk+0x130> <== NOT EXECUTED
(*printer)(
472d2: 2f08 movel %a0,%sp@- <== NOT EXECUTED
472d4: 4879 0005 c3f2 pea 5c3f2 <C.0.4118+0x1e0> <== NOT EXECUTED
472da: 6000 021a braw 474f6 <_Heap_Walk+0x348> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Alloc_area_of_block(
const Heap_Block *block
)
{
return (uintptr_t) block + HEAP_BLOCK_HEADER_SIZE;
472de: 4be8 0008 lea %a0@(8),%a5 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _Heap_Is_aligned(
uintptr_t value,
uintptr_t alignment
)
{
return (value % alignment) == 0;
472e2: 200d movel %a5,%d0 <== NOT EXECUTED
472e4: 262e fffc movel %fp@(-4),%d3 <== NOT EXECUTED
472e8: 4c43 0004 remul %d3,%d4,%d0 <== NOT EXECUTED
);
return false;
}
if (
472ec: 4a84 tstl %d4 <== NOT EXECUTED
472ee: 670c beqs 472fc <_Heap_Walk+0x14e> <== NOT EXECUTED
!_Heap_Is_aligned( _Heap_Alloc_area_of_block( free_block ), page_size )
) {
(*printer)(
472f0: 2f08 movel %a0,%sp@- <== NOT EXECUTED
472f2: 4879 0005 c412 pea 5c412 <C.0.4118+0x200> <== NOT EXECUTED
472f8: 6000 01fc braw 474f6 <_Heap_Walk+0x348> <== NOT EXECUTED
- 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;
472fc: 70fe moveq #-2,%d0 <== NOT EXECUTED
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;
472fe: 7601 moveq #1,%d3 <== NOT EXECUTED
- 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;
47300: c0a8 0004 andl %a0@(4),%d0 <== NOT EXECUTED
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;
47304: c6b0 0804 andl %a0@(00000004,%d0:l),%d3 <== NOT EXECUTED
);
return false;
}
if ( _Heap_Is_used( free_block ) ) {
47308: 670c beqs 47316 <_Heap_Walk+0x168> <== NOT EXECUTED
(*printer)(
4730a: 2f08 movel %a0,%sp@- <== NOT EXECUTED
4730c: 4879 0005 c442 pea 5c442 <C.0.4118+0x230> <== NOT EXECUTED
47312: 6000 01e2 braw 474f6 <_Heap_Walk+0x348> <== NOT EXECUTED
);
return false;
}
if ( free_block->prev != prev_block ) {
47316: 2028 000c movel %a0@(12),%d0 <== NOT EXECUTED
4731a: b280 cmpl %d0,%d1 <== NOT EXECUTED
4731c: 671c beqs 4733a <_Heap_Walk+0x18c> <== NOT EXECUTED
(*printer)(
4731e: 2f00 movel %d0,%sp@- <== NOT EXECUTED
47320: 2f08 movel %a0,%sp@- <== NOT EXECUTED
47322: 4879 0005 c45e pea 5c45e <C.0.4118+0x24c> <== NOT EXECUTED
47328: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
4732c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4732e: 4e92 jsr %a2@ <== NOT EXECUTED
47330: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
if ( !_System_state_Is_up( _System_state_Get() ) ) {
return true;
}
if ( !_Heap_Walk_check_control( source, printer, heap ) ) {
return false;
47334: 4200 clrb %d0 <== NOT EXECUTED
47336: 6000 01ac braw 474e4 <_Heap_Walk+0x336> <== NOT EXECUTED
return false;
}
prev_block = free_block;
free_block = free_block->next;
4733a: 2208 movel %a0,%d1 <== NOT EXECUTED
4733c: 2068 0008 moveal %a0@(8),%a0 <== NOT EXECUTED
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 ) {
47340: b7c8 cmpal %a0,%a3 <== NOT EXECUTED
47342: 6600 ff76 bnew 472ba <_Heap_Walk+0x10c> <== NOT EXECUTED
47346: 282e fff8 movel %fp@(-8),%d4 <== NOT EXECUTED
4734a: 6002 bras 4734e <_Heap_Walk+0x1a0> <== NOT EXECUTED
block->prev_size
);
}
block = next_block;
} while ( block != first_block );
4734c: 284d moveal %a5,%a4 <== NOT EXECUTED
return true;
}
4734e: 202c 0004 movel %a4@(4),%d0 <== NOT EXECUTED
- 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;
47352: 76fe moveq #-2,%d3 <== NOT EXECUTED
47354: c680 andl %d0,%d3 <== NOT EXECUTED
47356: 2d40 fffc movel %d0,%fp@(-4) <== NOT EXECUTED
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
4735a: 4bf4 3800 lea %a4@(00000000,%d3:l),%a5 <== NOT EXECUTED
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;
4735e: bbeb 0020 cmpal %a3@(32),%a5 <== NOT EXECUTED
47362: 650c bcss 47370 <_Heap_Walk+0x1c2> <== NOT EXECUTED
47364: bbeb 0024 cmpal %a3@(36),%a5 <== NOT EXECUTED
47368: 53c0 sls %d0 <== NOT EXECUTED
4736a: 49c0 extbl %d0 <== NOT EXECUTED
4736c: 4480 negl %d0 <== NOT EXECUTED
4736e: 6002 bras 47372 <_Heap_Walk+0x1c4> <== NOT EXECUTED
47370: 4280 clrl %d0 <== NOT EXECUTED
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 ) ) {
47372: 4a00 tstb %d0 <== NOT EXECUTED
47374: 660c bnes 47382 <_Heap_Walk+0x1d4> <== NOT EXECUTED
(*printer)(
47376: 2f0d movel %a5,%sp@- <== NOT EXECUTED
47378: 2f0c movel %a4,%sp@- <== NOT EXECUTED
4737a: 4879 0005 c490 pea 5c490 <C.0.4118+0x27e> <== NOT EXECUTED
47380: 60a6 bras 47328 <_Heap_Walk+0x17a> <== NOT EXECUTED
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;
47382: be8c cmpl %a4,%d7 <== NOT EXECUTED
47384: 56c0 sne %d0 <== NOT EXECUTED
47386: 2200 movel %d0,%d1 <== NOT EXECUTED
47388: 4481 negl %d1 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _Heap_Is_aligned(
uintptr_t value,
uintptr_t alignment
)
{
return (value % alignment) == 0;
4738a: 2003 movel %d3,%d0 <== NOT EXECUTED
4738c: 1d41 fffb moveb %d1,%fp@(-5) <== NOT EXECUTED
47390: 4c44 0001 remul %d4,%d1,%d0 <== NOT EXECUTED
);
return false;
}
if ( !_Heap_Is_aligned( block_size, page_size ) && is_not_last_block ) {
47394: 4a81 tstl %d1 <== NOT EXECUTED
47396: 6714 beqs 473ac <_Heap_Walk+0x1fe> <== NOT EXECUTED
47398: 4a2e fffb tstb %fp@(-5) <== NOT EXECUTED
4739c: 670e beqs 473ac <_Heap_Walk+0x1fe> <== NOT EXECUTED
(*printer)(
4739e: 2f03 movel %d3,%sp@- <== NOT EXECUTED
473a0: 2f0c movel %a4,%sp@- <== NOT EXECUTED
473a2: 4879 0005 c4bd pea 5c4bd <C.0.4118+0x2ab> <== NOT EXECUTED
473a8: 6000 ff7e braw 47328 <_Heap_Walk+0x17a> <== NOT EXECUTED
);
return false;
}
if ( block_size < min_block_size && is_not_last_block ) {
473ac: ba83 cmpl %d3,%d5 <== NOT EXECUTED
473ae: 6322 blss 473d2 <_Heap_Walk+0x224> <== NOT EXECUTED
473b0: 4a2e fffb tstb %fp@(-5) <== NOT EXECUTED
473b4: 671c beqs 473d2 <_Heap_Walk+0x224> <== NOT EXECUTED
(*printer)(
473b6: 2f05 movel %d5,%sp@- <== NOT EXECUTED
473b8: 2f03 movel %d3,%sp@- <== NOT EXECUTED
473ba: 2f0c movel %a4,%sp@- <== NOT EXECUTED
473bc: 4879 0005 c4eb pea 5c4eb <C.0.4118+0x2d9> <== NOT EXECUTED
473c2: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
473c6: 2f02 movel %d2,%sp@- <== NOT EXECUTED
473c8: 4e92 jsr %a2@ <== NOT EXECUTED
block,
block_size,
min_block_size
);
return false;
473ca: 4fef 0018 lea %sp@(24),%sp <== NOT EXECUTED
473ce: 6000 ff64 braw 47334 <_Heap_Walk+0x186> <== NOT EXECUTED
}
if ( next_block_begin <= block_begin && is_not_last_block ) {
473d2: b9cd cmpal %a5,%a4 <== NOT EXECUTED
473d4: 6514 bcss 473ea <_Heap_Walk+0x23c> <== NOT EXECUTED
473d6: 4a2e fffb tstb %fp@(-5) <== NOT EXECUTED
473da: 670e beqs 473ea <_Heap_Walk+0x23c> <== NOT EXECUTED
(*printer)(
473dc: 2f0d movel %a5,%sp@- <== NOT EXECUTED
473de: 2f0c movel %a4,%sp@- <== NOT EXECUTED
473e0: 4879 0005 c516 pea 5c516 <C.0.4118+0x304> <== NOT EXECUTED
473e6: 6000 ff40 braw 47328 <_Heap_Walk+0x17a> <== NOT EXECUTED
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;
473ea: 7001 moveq #1,%d0 <== NOT EXECUTED
473ec: c0ae fffc andl %fp@(-4),%d0 <== NOT EXECUTED
473f0: 2d40 fffc movel %d0,%fp@(-4) <== NOT EXECUTED
473f4: 7001 moveq #1,%d0 <== NOT EXECUTED
473f6: c0ad 0004 andl %a5@(4),%d0 <== NOT EXECUTED
);
return false;
}
if ( !_Heap_Is_prev_used( next_block ) ) {
473fa: 6600 00ae bnew 474aa <_Heap_Walk+0x2fc> <== NOT EXECUTED
block = next_block;
} while ( block != first_block );
return true;
}
473fe: 222b 0008 movel %a3@(8),%d1 <== NOT EXECUTED
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)(
47402: 43f9 0005 c236 lea 5c236 <C.0.4118+0x24>,%a1 <== NOT EXECUTED
block->prev,
block->prev == first_free_block ?
" (= first free)"
: (block->prev == free_list_head ? " (= head)" : ""),
block->next,
block->next == last_free_block ?
47408: 206c 0008 moveal %a4@(8),%a0 <== NOT EXECUTED
block = next_block;
} while ( block != first_block );
return true;
}
4740c: 2d41 fff8 movel %d1,%fp@(-8) <== NOT EXECUTED
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)(
47410: b1eb 000c cmpal %a3@(12),%a0 <== NOT EXECUTED
47414: 6710 beqs 47426 <_Heap_Walk+0x278> <== NOT EXECUTED
" (= first free)"
: (block->prev == free_list_head ? " (= head)" : ""),
block->next,
block->next == last_free_block ?
" (= last free)"
: (block->next == free_list_tail ? " (= tail)" : "")
47416: 43f9 0005 c170 lea 5c170 <rtems_filesystem_default_pathconf+0xb4>,%a1<== NOT EXECUTED
4741c: b7c8 cmpal %a0,%a3 <== NOT EXECUTED
4741e: 6606 bnes 47426 <_Heap_Walk+0x278> <== NOT EXECUTED
47420: 43f9 0005 c245 lea 5c245 <C.0.4118+0x33>,%a1 <== NOT EXECUTED
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 ?
47426: 202c 000c movel %a4@(12),%d0 <== NOT EXECUTED
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)(
4742a: 223c 0005 c24f movel #377423,%d1 <== NOT EXECUTED
47430: b0ae fff8 cmpl %fp@(-8),%d0 <== NOT EXECUTED
47434: 6710 beqs 47446 <_Heap_Walk+0x298> <== NOT EXECUTED
block,
block_size,
block->prev,
block->prev == first_free_block ?
" (= first free)"
: (block->prev == free_list_head ? " (= head)" : ""),
47436: 223c 0005 c170 movel #377200,%d1 <== NOT EXECUTED
4743c: b7c0 cmpal %d0,%a3 <== NOT EXECUTED
4743e: 6606 bnes 47446 <_Heap_Walk+0x298> <== NOT EXECUTED
47440: 223c 0005 c25f movel #377439,%d1 <== NOT EXECUTED
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)(
47446: 2f09 movel %a1,%sp@- <== NOT EXECUTED
47448: 2f08 movel %a0,%sp@- <== NOT EXECUTED
4744a: 2f01 movel %d1,%sp@- <== NOT EXECUTED
4744c: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4744e: 2f03 movel %d3,%sp@- <== NOT EXECUTED
47450: 2f0c movel %a4,%sp@- <== NOT EXECUTED
47452: 4879 0005 c54a pea 5c54a <C.0.4118+0x338> <== NOT EXECUTED
47458: 42a7 clrl %sp@- <== NOT EXECUTED
4745a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4745c: 4e92 jsr %a2@ <== NOT EXECUTED
block->next == last_free_block ?
" (= last free)"
: (block->next == free_list_tail ? " (= tail)" : "")
);
if ( block_size != next_block->prev_size ) {
4745e: 2015 movel %a5@,%d0 <== NOT EXECUTED
47460: 4fef 0024 lea %sp@(36),%sp <== NOT EXECUTED
47464: b083 cmpl %d3,%d0 <== NOT EXECUTED
47466: 671e beqs 47486 <_Heap_Walk+0x2d8> <== NOT EXECUTED
(*printer)(
47468: 2f0d movel %a5,%sp@- <== NOT EXECUTED
4746a: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4746c: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4746e: 2f0c movel %a4,%sp@- <== NOT EXECUTED
47470: 4879 0005 c57f pea 5c57f <C.0.4118+0x36d> <== NOT EXECUTED
47476: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
4747a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4747c: 4e92 jsr %a2@ <== NOT EXECUTED
4747e: 4fef 001c lea %sp@(28),%sp <== NOT EXECUTED
47482: 6000 feb0 braw 47334 <_Heap_Walk+0x186> <== NOT EXECUTED
);
return false;
}
if ( !prev_used ) {
47486: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4748a: 660a bnes 47496 <_Heap_Walk+0x2e8> <== NOT EXECUTED
(*printer)(
4748c: 2f0c movel %a4,%sp@- <== NOT EXECUTED
4748e: 4879 0005 c5b8 pea 5c5b8 <C.0.4118+0x3a6> <== NOT EXECUTED
47494: 6060 bras 474f6 <_Heap_Walk+0x348> <== NOT EXECUTED
block = next_block;
} while ( block != first_block );
return true;
}
47496: 206b 0008 moveal %a3@(8),%a0 <== NOT EXECUTED
4749a: 6008 bras 474a4 <_Heap_Walk+0x2f6> <== NOT EXECUTED
{
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 ) {
4749c: b9c8 cmpal %a0,%a4 <== NOT EXECUTED
4749e: 673c beqs 474dc <_Heap_Walk+0x32e> <== NOT EXECUTED
return true;
}
free_block = free_block->next;
474a0: 2068 0008 moveal %a0@(8),%a0 <== NOT EXECUTED
)
{
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 ) {
474a4: b7c8 cmpal %a0,%a3 <== NOT EXECUTED
474a6: 66f4 bnes 4749c <_Heap_Walk+0x2ee> <== NOT EXECUTED
474a8: 6044 bras 474ee <_Heap_Walk+0x340> <== NOT EXECUTED
if ( !_Heap_Is_prev_used( next_block ) ) {
if ( !_Heap_Walk_check_free_block( source, printer, heap, block ) ) {
return false;
}
} else if (prev_used) {
474aa: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
474ae: 6716 beqs 474c6 <_Heap_Walk+0x318> <== NOT EXECUTED
(*printer)(
474b0: 2f03 movel %d3,%sp@- <== NOT EXECUTED
474b2: 2f0c movel %a4,%sp@- <== NOT EXECUTED
474b4: 4879 0005 c5e7 pea 5c5e7 <C.0.4118+0x3d5> <== NOT EXECUTED
474ba: 42a7 clrl %sp@- <== NOT EXECUTED
474bc: 2f02 movel %d2,%sp@- <== NOT EXECUTED
474be: 4e92 jsr %a2@ <== NOT EXECUTED
474c0: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
474c4: 6016 bras 474dc <_Heap_Walk+0x32e> <== NOT EXECUTED
"block 0x%08x: size %u\n",
block,
block_size
);
} else {
(*printer)(
474c6: 2f14 movel %a4@,%sp@- <== NOT EXECUTED
474c8: 2f03 movel %d3,%sp@- <== NOT EXECUTED
474ca: 2f0c movel %a4,%sp@- <== NOT EXECUTED
474cc: 4879 0005 c5fe pea 5c5fe <C.0.4118+0x3ec> <== NOT EXECUTED
474d2: 42a7 clrl %sp@- <== NOT EXECUTED
474d4: 2f02 movel %d2,%sp@- <== NOT EXECUTED
474d6: 4e92 jsr %a2@ <== NOT EXECUTED
474d8: 4fef 0018 lea %sp@(24),%sp <== NOT EXECUTED
block->prev_size
);
}
block = next_block;
} while ( block != first_block );
474dc: bc8d cmpl %a5,%d6 <== NOT EXECUTED
474de: 6600 fe6c bnew 4734c <_Heap_Walk+0x19e> <== NOT EXECUTED
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;
474e2: 7001 moveq #1,%d0 <== NOT EXECUTED
block = next_block;
} while ( block != first_block );
return true;
}
474e4: 4cee 3cfc ffd0 moveml %fp@(-48),%d2-%d7/%a2-%a5 <== NOT EXECUTED
474ea: 4e5e unlk %fp <== NOT EXECUTED
474ec: 4e75 rts <== NOT EXECUTED
return false;
}
if ( !_Heap_Walk_is_in_free_list( heap, block ) ) {
(*printer)(
474ee: 2f0c movel %a4,%sp@- <== NOT EXECUTED
474f0: 4879 0005 c623 pea 5c623 <C.0.4118+0x411> <== NOT EXECUTED
474f6: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
474fa: 2f02 movel %d2,%sp@- <== NOT EXECUTED
474fc: 4e92 jsr %a2@ <== NOT EXECUTED
474fe: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
47502: 6000 fe30 braw 47334 <_Heap_Walk+0x186> <== NOT EXECUTED
...
00047170 <_Heap_Walk_print>:
static void _Heap_Walk_print( int source, bool error, const char *fmt, ... )
{
47170: 41f9 0004 3b54 lea 43b54 <printk>,%a0 <== NOT EXECUTED
47176: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4717a: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
va_list ap;
if ( error ) {
4717e: 4a2e 000f tstb %fp@(15) <== NOT EXECUTED
47182: 670a beqs 4718e <_Heap_Walk_print+0x1e> <== NOT EXECUTED
printk( "FAIL[%d]: ", source );
47184: 2f00 movel %d0,%sp@- <== NOT EXECUTED
47186: 4879 0005 c220 pea 5c220 <C.0.4118+0xe> <== NOT EXECUTED
4718c: 6008 bras 47196 <_Heap_Walk_print+0x26> <== NOT EXECUTED
} else {
printk( "PASS[%d]: ", source );
4718e: 2f00 movel %d0,%sp@- <== NOT EXECUTED
47190: 4879 0005 c22b pea 5c22b <C.0.4118+0x19> <== NOT EXECUTED
47196: 4e90 jsr %a0@ <== NOT EXECUTED
47198: 508f addql #8,%sp <== NOT EXECUTED
}
va_start( ap, fmt );
vprintk( fmt, ap );
4719a: 486e 0014 pea %fp@(20) <== NOT EXECUTED
4719e: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
471a2: 4eb9 0004 546c jsr 4546c <vprintk> <== NOT EXECUTED
va_end( ap );
471a8: 508f addql #8,%sp <== NOT EXECUTED
}
471aa: 4e5e unlk %fp <== NOT EXECUTED
00047168 <_Heap_Walk_print_nothing>:
int source,
bool error,
const char *fmt,
...
)
{
47168: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
/* Do nothing */
}
4716c: 4e5e unlk %fp <== NOT EXECUTED
000467c0 <_Internal_error_Occurred>:
void _Internal_error_Occurred(
Internal_errors_Source the_source,
bool is_internal,
Internal_errors_t the_error
)
{
467c0: 4e56 0000 linkw %fp,#0
467c4: 222e 000c movel %fp@(12),%d1
467c8: 2f02 movel %d2,%sp@-
467ca: 242e 0010 movel %fp@(16),%d2
_Internal_errors_What_happened.the_source = the_source;
_Internal_errors_What_happened.is_internal = is_internal;
467ce: 13c1 0005 dbc2 moveb %d1,5dbc2 <_Internal_errors_What_happened+0x4>
_Internal_errors_What_happened.the_error = the_error;
_User_extensions_Fatal( the_source, is_internal, the_error );
467d4: 2f02 movel %d2,%sp@-
void _Internal_error_Occurred(
Internal_errors_Source the_source,
bool is_internal,
Internal_errors_t the_error
)
{
467d6: 202e 0008 movel %fp@(8),%d0
_Internal_errors_What_happened.the_source = the_source;
_Internal_errors_What_happened.is_internal = is_internal;
_Internal_errors_What_happened.the_error = the_error;
_User_extensions_Fatal( the_source, is_internal, the_error );
467da: 0281 0000 00ff andil #255,%d1
bool is_internal,
Internal_errors_t the_error
)
{
_Internal_errors_What_happened.the_source = the_source;
467e0: 23c0 0005 dbbe movel %d0,5dbbe <_Internal_errors_What_happened>
_Internal_errors_What_happened.is_internal = is_internal;
_Internal_errors_What_happened.the_error = the_error;
_User_extensions_Fatal( the_source, is_internal, the_error );
467e6: 2f01 movel %d1,%sp@-
)
{
_Internal_errors_What_happened.the_source = the_source;
_Internal_errors_What_happened.is_internal = is_internal;
_Internal_errors_What_happened.the_error = the_error;
467e8: 23c2 0005 dbc4 movel %d2,5dbc4 <_Internal_errors_What_happened+0x6>
_User_extensions_Fatal( the_source, is_internal, the_error );
467ee: 2f00 movel %d0,%sp@-
467f0: 4eb9 0004 83d6 jsr 483d6 <_User_extensions_Fatal>
RTEMS_INLINE_ROUTINE void _System_state_Set (
System_state_Codes state
)
{
_System_state_Current = state;
467f6: 7005 moveq #5,%d0 <== NOT EXECUTED
_System_state_Set( SYSTEM_STATE_FAILED );
_CPU_Fatal_halt( the_error );
467f8: 2042 moveal %d2,%a0 <== NOT EXECUTED
467fa: 243c 0000 0700 movel #1792,%d2 <== NOT EXECUTED
46800: 23c0 0005 dc74 movel %d0,5dc74 <_System_state_Current> <== NOT EXECUTED
46806: 40c0 movew %sr,%d0 <== NOT EXECUTED
46808: 8082 orl %d2,%d0 <== NOT EXECUTED
4680a: 46c0 movew %d0,%sr <== NOT EXECUTED
4680c: 2008 movel %a0,%d0 <== NOT EXECUTED
4680e: 223c dead beef movel #-559038737,%d1 <== NOT EXECUTED
46814: 4ac8 halt <== NOT EXECUTED
46816: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4681a: 60fe bras 4681a <_Internal_error_Occurred+0x5a> <== NOT EXECUTED
00052778 <_Message_queue_Allocate>:
* Output parameters:
* the_message_queue - set if successful, NULL otherwise
*/
Message_queue_Control *_Message_queue_Allocate(void)
{
52778: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return (Message_queue_Control *)
_Objects_Allocate(&_Message_queue_Information);
5277c: 4879 0006 6fd4 pea 66fd4 <_Message_queue_Information> <== NOT EXECUTED
52782: 4eb9 0004 e958 jsr 4e958 <_Objects_Allocate> <== NOT EXECUTED
}
52788: 4e5e unlk %fp <== NOT EXECUTED
0004ce58 <_Message_queue_Translate_core_message_queue_return_code>:
if ( status > CORE_MESSAGE_QUEUE_STATUS_TIMEOUT )
return RTEMS_INTERNAL_ERROR;
#endif
return _Message_queue_Translate_core_return_code_[status];
}
4ce58: 41f9 0006 4f2c lea 64f2c <_Message_queue_Translate_core_return_code_>,%a0<== NOT EXECUTED
};
rtems_status_code _Message_queue_Translate_core_message_queue_return_code (
uint32_t status
)
{
4ce5e: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
if ( status > CORE_MESSAGE_QUEUE_STATUS_TIMEOUT )
return RTEMS_INTERNAL_ERROR;
#endif
return _Message_queue_Translate_core_return_code_[status];
}
4ce62: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
4ce66: 4e5e unlk %fp <== NOT EXECUTED
4ce68: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0 <== NOT EXECUTED
...
0004ae58 <_Objects_API_maximum_class>:
#include <rtems/score/object.h>
unsigned int _Objects_API_maximum_class(
uint32_t api
)
{
4ae58: 7202 moveq #2,%d1
4ae5a: 4e56 0000 linkw %fp,#0
4ae5e: 202e 0008 movel %fp@(8),%d0
4ae62: 5380 subql #1,%d0
4ae64: b280 cmpl %d0,%d1
4ae66: 650c bcss 4ae74 <_Objects_API_maximum_class+0x1c><== NEVER TAKEN
4ae68: 41f9 0005 b822 lea 5b822 <CSWTCH.1>,%a0
4ae6e: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0
4ae72: 6002 bras 4ae76 <_Objects_API_maximum_class+0x1e>
4ae74: 4280 clrl %d0 <== NOT EXECUTED
case OBJECTS_NO_API:
default:
break;
}
return 0;
}
4ae76: 4e5e unlk %fp
...
00046874 <_Objects_Allocate>:
*/
Objects_Control *_Objects_Allocate(
Objects_Information *information
)
{
46874: 4e56 fff0 linkw %fp,#-16
46878: 48d7 0c0c moveml %d2-%d3/%a2-%a3,%sp@
4687c: 246e 0008 moveal %fp@(8),%a2
* If the application is using the optional manager stubs and
* still attempts to create the object, the information block
* should be all zeroed out because it is in the BSS. So let's
* check that code for this manager is even present.
*/
if ( information->size == 0 )
46880: 4aaa 0014 tstl %a2@(20)
46884: 675e beqs 468e4 <_Objects_Allocate+0x70> <== NEVER TAKEN
/*
* OK. The manager should be initialized and configured to have objects.
* With any luck, it is safe to attempt to allocate an object.
*/
the_object = (Objects_Control *) _Chain_Get( &information->Inactive );
46886: 240a movel %a2,%d2
46888: 0682 0000 001c addil #28,%d2
4688e: 47f9 0004 6018 lea 46018 <_Chain_Get>,%a3
46894: 2f02 movel %d2,%sp@-
46896: 4e93 jsr %a3@
if ( information->auto_extend ) {
46898: 588f addql #4,%sp
4689a: 4a2a 0010 tstb %a2@(16)
4689e: 6746 beqs 468e6 <_Objects_Allocate+0x72>
/*
* If the list is empty then we are out of objects and need to
* extend information base.
*/
if ( !the_object ) {
468a0: 4a80 tstl %d0
468a2: 6612 bnes 468b6 <_Objects_Allocate+0x42> <== ALWAYS TAKEN
_Objects_Extend_information( information );
468a4: 2f0a movel %a2,%sp@- <== NOT EXECUTED
468a6: 4eb9 0004 691c jsr 4691c <_Objects_Extend_information> <== NOT EXECUTED
the_object = (Objects_Control *) _Chain_Get( &information->Inactive );
468ac: 2f02 movel %d2,%sp@- <== NOT EXECUTED
468ae: 4e93 jsr %a3@ <== NOT EXECUTED
}
if ( the_object ) {
468b0: 508f addql #8,%sp <== NOT EXECUTED
468b2: 4a80 tstl %d0 <== NOT EXECUTED
468b4: 6730 beqs 468e6 <_Objects_Allocate+0x72> <== NOT EXECUTED
uint32_t block;
block = (uint32_t) _Objects_Get_index( the_object->id ) -
468b6: 2040 moveal %d0,%a0
468b8: 4281 clrl %d1
468ba: 4282 clrl %d2
468bc: 3228 000a movew %a0@(10),%d1
468c0: 342a 0008 movew %a2@(8),%d2
_Objects_Get_index( information->minimum_id );
block /= information->allocation_size;
information->inactive_per_block[ block ]--;
468c4: 206a 002a moveal %a2@(42),%a0
}
if ( the_object ) {
uint32_t block;
block = (uint32_t) _Objects_Get_index( the_object->id ) -
468c8: 9282 subl %d2,%d1
_Objects_Get_index( information->minimum_id );
block /= information->allocation_size;
468ca: 342a 0012 movew %a2@(18),%d2
468ce: 4c42 1001 remul %d2,%d1,%d1
information->inactive_per_block[ block ]--;
468d2: e589 lsll #2,%d1
468d4: d1c1 addal %d1,%a0
468d6: 5390 subql #1,%a0@
information->inactive--;
468d8: 322a 0028 movew %a2@(40),%d1
468dc: 5381 subql #1,%d1
468de: 3541 0028 movew %d1,%a2@(40)
468e2: 6002 bras 468e6 <_Objects_Allocate+0x72>
* still attempts to create the object, the information block
* should be all zeroed out because it is in the BSS. So let's
* check that code for this manager is even present.
*/
if ( information->size == 0 )
return NULL;
468e4: 4280 clrl %d0 <== NOT EXECUTED
);
}
#endif
return the_object;
}
468e6: 4cee 0c0c fff0 moveml %fp@(-16),%d2-%d3/%a2-%a3
468ec: 4e5e unlk %fp <== NOT EXECUTED
000468f0 <_Objects_Close>:
RTEMS_INLINE_ROUTINE void _Objects_Invalidate_Id(
Objects_Information *information,
Objects_Control *the_object
)
{
_Objects_Set_local_object(
468f0: 4280 clrl %d0
void _Objects_Close(
Objects_Information *information,
Objects_Control *the_object
)
{
468f2: 4e56 0000 linkw %fp,#0
468f6: 226e 000c moveal %fp@(12),%a1
468fa: 206e 0008 moveal %fp@(8),%a0
468fe: 2f0a movel %a2,%sp@-
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
46900: 2468 0018 moveal %a0@(24),%a2
RTEMS_INLINE_ROUTINE void _Objects_Invalidate_Id(
Objects_Information *information,
Objects_Control *the_object
)
{
_Objects_Set_local_object(
46904: 3029 000a movew %a1@(10),%d0
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
46908: 42b2 0c00 clrl %a2@(00000000,%d0:l:4)
_Objects_Invalidate_Id( information, the_object );
_Objects_Namespace_remove( information, the_object );
}
4690c: 245f moveal %sp@+,%a2
Objects_Control *the_object
)
{
_Objects_Invalidate_Id( information, the_object );
_Objects_Namespace_remove( information, the_object );
4690e: 2d49 000c movel %a1,%fp@(12)
}
46912: 4e5e unlk %fp
Objects_Control *the_object
)
{
_Objects_Invalidate_Id( information, the_object );
_Objects_Namespace_remove( information, the_object );
46914: 4ef9 0004 6e28 jmp 46e28 <_Objects_Namespace_remove>
...
0004691c <_Objects_Extend_information>:
*/
void _Objects_Extend_information(
Objects_Information *information
)
{
4691c: 4e56 ffc8 linkw %fp,#-56
46920: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
46924: 246e 0008 moveal %fp@(8),%a2
/*
* Search for a free block of indexes. If we do NOT need to allocate or
* extend the block table, then we will change do_extend.
*/
do_extend = true;
minimum_index = _Objects_Get_index( information->minimum_id );
46928: 4283 clrl %d3
index_base = minimum_index;
block = 0;
/* if ( information->maximum < minimum_index ) */
if ( information->object_blocks == NULL )
4692a: 206a 002e moveal %a2@(46),%a0
/*
* Search for a free block of indexes. If we do NOT need to allocate or
* extend the block table, then we will change do_extend.
*/
do_extend = true;
minimum_index = _Objects_Get_index( information->minimum_id );
4692e: 362a 0008 movew %a2@(8),%d3
index_base = minimum_index;
block = 0;
/* if ( information->maximum < minimum_index ) */
if ( information->object_blocks == NULL )
46932: 4a88 tstl %a0
46934: 6730 beqs 46966 <_Objects_Extend_information+0x4a><== ALWAYS TAKEN
block_count = 0;
else {
block_count = information->maximum / information->allocation_size;
46936: 4280 clrl %d0 <== NOT EXECUTED
/*
* Search for a free block of indexes. If we do NOT need to allocate or
* extend the block table, then we will change do_extend.
*/
do_extend = true;
minimum_index = _Objects_Get_index( information->minimum_id );
46938: 2403 movel %d3,%d2 <== NOT EXECUTED
index_base = minimum_index;
block = 0;
4693a: 4285 clrl %d5 <== NOT EXECUTED
/* if ( information->maximum < minimum_index ) */
if ( information->object_blocks == NULL )
block_count = 0;
else {
block_count = information->maximum / information->allocation_size;
4693c: 302a 0012 movew %a2@(18),%d0 <== NOT EXECUTED
46940: 3c2a 000e movew %a2@(14),%d6 <== NOT EXECUTED
46944: 0286 0000 ffff andil #65535,%d6 <== NOT EXECUTED
4694a: 8cc0 divuw %d0,%d6 <== NOT EXECUTED
4694c: 0286 0000 ffff andil #65535,%d6 <== NOT EXECUTED
for ( ; block < block_count; block++ ) {
46952: 6008 bras 4695c <_Objects_Extend_information+0x40><== NOT EXECUTED
if ( information->object_blocks[ block ] == NULL ) {
46954: 4a98 tstl %a0@+ <== NOT EXECUTED
46956: 671a beqs 46972 <_Objects_Extend_information+0x56><== NOT EXECUTED
46958: d480 addl %d0,%d2 <== NOT EXECUTED
if ( information->object_blocks == NULL )
block_count = 0;
else {
block_count = information->maximum / information->allocation_size;
for ( ; block < block_count; block++ ) {
4695a: 5285 addql #1,%d5 <== NOT EXECUTED
4695c: bc85 cmpl %d5,%d6 <== NOT EXECUTED
4695e: 62f4 bhis 46954 <_Objects_Extend_information+0x38><== NOT EXECUTED
/*
* Search for a free block of indexes. If we do NOT need to allocate or
* extend the block table, then we will change do_extend.
*/
do_extend = true;
46960: 367c 0001 moveaw #1,%a3 <== NOT EXECUTED
46964: 600e bras 46974 <_Objects_Extend_information+0x58><== NOT EXECUTED
minimum_index = _Objects_Get_index( information->minimum_id );
46966: 2403 movel %d3,%d2
index_base = minimum_index;
block = 0;
46968: 4285 clrl %d5
/* if ( information->maximum < minimum_index ) */
if ( information->object_blocks == NULL )
block_count = 0;
4696a: 4286 clrl %d6
/*
* Search for a free block of indexes. If we do NOT need to allocate or
* extend the block table, then we will change do_extend.
*/
do_extend = true;
4696c: 367c 0001 moveaw #1,%a3
46970: 6002 bras 46974 <_Objects_Extend_information+0x58>
else {
block_count = information->maximum / information->allocation_size;
for ( ; block < block_count; block++ ) {
if ( information->object_blocks[ block ] == NULL ) {
do_extend = false;
46972: 97cb subal %a3,%a3 <== NOT EXECUTED
} else
index_base += information->allocation_size;
}
}
maximum = (uint32_t) information->maximum + information->allocation_size;
46974: 4280 clrl %d0
46976: 4287 clrl %d7
46978: 302a 0012 movew %a2@(18),%d0
4697c: 3e2a 000e movew %a2@(14),%d7
46980: de80 addl %d0,%d7
/*
* We need to limit the number of objects to the maximum number
* representable in the index portion of the object Id. In the
* case of 16-bit Ids, this is only 256 object instances.
*/
if ( maximum > OBJECTS_ID_FINAL_INDEX ) {
46982: 0c87 0000 ffff cmpil #65535,%d7
46988: 6200 01d4 bhiw 46b5e <_Objects_Extend_information+0x242>
/*
* Allocate the name table, and the objects and if it fails either return or
* generate a fatal error depending on auto-extending being active.
*/
block_size = information->allocation_size * information->size;
4698c: 41ea 0014 lea %a2@(20),%a0
46990: 4c10 0800 mulsl %a0@,%d0
if ( information->auto_extend ) {
46994: 4a2a 0010 tstb %a2@(16)
46998: 6712 beqs 469ac <_Objects_Extend_information+0x90>
new_object_block = _Workspace_Allocate( block_size );
4699a: 2f00 movel %d0,%sp@-
4699c: 4eb9 0004 8794 jsr 48794 <_Workspace_Allocate>
if ( !new_object_block )
469a2: 588f addql #4,%sp
* Allocate the name table, and the objects and if it fails either return or
* generate a fatal error depending on auto-extending being active.
*/
block_size = information->allocation_size * information->size;
if ( information->auto_extend ) {
new_object_block = _Workspace_Allocate( block_size );
469a4: 2800 movel %d0,%d4
if ( !new_object_block )
469a6: 6610 bnes 469b8 <_Objects_Extend_information+0x9c><== ALWAYS TAKEN
469a8: 6000 01b4 braw 46b5e <_Objects_Extend_information+0x242><== NOT EXECUTED
return;
} else {
new_object_block = _Workspace_Allocate_or_fatal_error( block_size );
469ac: 2f00 movel %d0,%sp@-
469ae: 4eb9 0004 87c8 jsr 487c8 <_Workspace_Allocate_or_fatal_error>
469b4: 588f addql #4,%sp
469b6: 2800 movel %d0,%d4
}
/*
* Do we need to grow the tables?
*/
if ( do_extend ) {
469b8: 300b movew %a3,%d0
469ba: 4a00 tstb %d0
469bc: 6700 0110 beqw 46ace <_Objects_Extend_information+0x1b2>
*/
/*
* Up the block count and maximum
*/
block_count++;
469c0: 2846 moveal %d6,%a4
469c2: 528c addql #1,%a4
/*
* Allocate the tables and break it up.
*/
block_size = block_count *
(sizeof(void *) + sizeof(uint32_t) + sizeof(Objects_Name *)) +
((maximum + minimum_index) * sizeof(Objects_Control *));
469c4: 2007 movel %d7,%d0
469c6: d083 addl %d3,%d0
/*
* Allocate the tables and break it up.
*/
block_size = block_count *
(sizeof(void *) + sizeof(uint32_t) + sizeof(Objects_Name *)) +
469c8: 41f4 ca00 lea %a4@(00000000,%a4:l:2),%a0
469cc: d088 addl %a0,%d0
block_count++;
/*
* Allocate the tables and break it up.
*/
block_size = block_count *
469ce: e588 lsll #2,%d0
(sizeof(void *) + sizeof(uint32_t) + sizeof(Objects_Name *)) +
((maximum + minimum_index) * sizeof(Objects_Control *));
object_blocks = (void**) _Workspace_Allocate( block_size );
469d0: 2f00 movel %d0,%sp@-
469d2: 4eb9 0004 8794 jsr 48794 <_Workspace_Allocate>
if ( !object_blocks ) {
469d8: 588f addql #4,%sp
* Allocate the tables and break it up.
*/
block_size = block_count *
(sizeof(void *) + sizeof(uint32_t) + sizeof(Objects_Name *)) +
((maximum + minimum_index) * sizeof(Objects_Control *));
object_blocks = (void**) _Workspace_Allocate( block_size );
469da: 2640 moveal %d0,%a3
if ( !object_blocks ) {
469dc: 4a80 tstl %d0
469de: 660e bnes 469ee <_Objects_Extend_information+0xd2><== ALWAYS TAKEN
_Workspace_Free( new_object_block );
469e0: 2f04 movel %d4,%sp@- <== NOT EXECUTED
469e2: 4eb9 0004 87b0 jsr 487b0 <_Workspace_Free> <== NOT EXECUTED
return;
469e8: 588f addql #4,%sp <== NOT EXECUTED
469ea: 6000 0172 braw 46b5e <_Objects_Extend_information+0x242><== NOT EXECUTED
}
/*
* Break the block into the various sections.
*/
inactive_per_block = (uint32_t *) _Addresses_Add_offset(
469ee: 220c movel %a4,%d1
* Take the block count down. Saves all the (block_count - 1)
* in the copies.
*/
block_count--;
if ( information->maximum > minimum_index ) {
469f0: 4280 clrl %d0
}
/*
* Break the block into the various sections.
*/
inactive_per_block = (uint32_t *) _Addresses_Add_offset(
469f2: e589 lsll #2,%d1
* Take the block count down. Saves all the (block_count - 1)
* in the copies.
*/
block_count--;
if ( information->maximum > minimum_index ) {
469f4: 302a 000e movew %a2@(14),%d0
RTEMS_INLINE_ROUTINE void *_Addresses_Add_offset (
const void *base,
uintptr_t offset
)
{
return (void *)((uintptr_t)base + offset);
469f8: 4bf3 1800 lea %a3@(00000000,%d1:l),%a5
469fc: 49f5 1800 lea %a5@(00000000,%d1:l),%a4
46a00: b680 cmpl %d0,%d3
46a02: 6506 bcss 46a0a <_Objects_Extend_information+0xee><== NEVER TAKEN
46a04: 204c moveal %a4,%a0
46a06: 4280 clrl %d0
46a08: 604a bras 46a54 <_Objects_Extend_information+0x138>
/*
* Copy each section of the table over. This has to be performed as
* separate parts as size of each block has changed.
*/
memcpy( object_blocks,
46a0a: 2206 movel %d6,%d1 <== NOT EXECUTED
46a0c: e589 lsll #2,%d1 <== NOT EXECUTED
46a0e: 2f01 movel %d1,%sp@- <== NOT EXECUTED
46a10: 2f2a 002e movel %a2@(46),%sp@- <== NOT EXECUTED
46a14: 2d41 fff0 movel %d1,%fp@(-16) <== NOT EXECUTED
46a18: 2f0b movel %a3,%sp@- <== NOT EXECUTED
46a1a: 4eb9 0004 d200 jsr 4d200 <memcpy> <== NOT EXECUTED
information->object_blocks,
block_count * sizeof(void*) );
memcpy( inactive_per_block,
46a20: 222e fff0 movel %fp@(-16),%d1 <== NOT EXECUTED
46a24: 2f01 movel %d1,%sp@- <== NOT EXECUTED
46a26: 2f2a 002a movel %a2@(42),%sp@- <== NOT EXECUTED
46a2a: 2f0d movel %a5,%sp@- <== NOT EXECUTED
46a2c: 4eb9 0004 d200 jsr 4d200 <memcpy> <== NOT EXECUTED
information->inactive_per_block,
block_count * sizeof(uint32_t) );
memcpy( local_table,
information->local_table,
(information->maximum + minimum_index) * sizeof(Objects_Control *) );
46a32: 4280 clrl %d0 <== NOT EXECUTED
46a34: 302a 000e movew %a2@(14),%d0 <== NOT EXECUTED
46a38: d680 addl %d0,%d3 <== NOT EXECUTED
information->object_blocks,
block_count * sizeof(void*) );
memcpy( inactive_per_block,
information->inactive_per_block,
block_count * sizeof(uint32_t) );
memcpy( local_table,
46a3a: e58b lsll #2,%d3 <== NOT EXECUTED
46a3c: 2f03 movel %d3,%sp@- <== NOT EXECUTED
46a3e: 2f2a 0018 movel %a2@(24),%sp@- <== NOT EXECUTED
46a42: 2f0c movel %a4,%sp@- <== NOT EXECUTED
46a44: 4eb9 0004 d200 jsr 4d200 <memcpy> <== NOT EXECUTED
46a4a: 4fef 0024 lea %sp@(36),%sp <== NOT EXECUTED
46a4e: 6008 bras 46a58 <_Objects_Extend_information+0x13c><== NOT EXECUTED
/*
* Deal with the special case of the 0 to minimum_index
*/
for ( index = 0; index < minimum_index; index++ ) {
local_table[ index ] = NULL;
46a50: 4298 clrl %a0@+
} else {
/*
* Deal with the special case of the 0 to minimum_index
*/
for ( index = 0; index < minimum_index; index++ ) {
46a52: 5280 addql #1,%d0
46a54: b680 cmpl %d0,%d3
46a56: 62f8 bhis 46a50 <_Objects_Extend_information+0x134>
*/
object_blocks[block_count] = NULL;
inactive_per_block[block_count] = 0;
for ( index=index_base ;
index < ( information->allocation_size + index_base );
46a58: 4281 clrl %d1
* Initialise the new entries in the table.
*/
object_blocks[block_count] = NULL;
inactive_per_block[block_count] = 0;
for ( index=index_base ;
46a5a: 2002 movel %d2,%d0
}
/*
* Initialise the new entries in the table.
*/
object_blocks[block_count] = NULL;
46a5c: e58e lsll #2,%d6
inactive_per_block[block_count] = 0;
for ( index=index_base ;
index < ( information->allocation_size + index_base );
46a5e: 322a 0012 movew %a2@(18),%d1
46a62: 41f4 2c00 lea %a4@(00000000,%d2:l:4),%a0
}
/*
* Initialise the new entries in the table.
*/
object_blocks[block_count] = NULL;
46a66: 42b3 6800 clrl %a3@(00000000,%d6:l)
inactive_per_block[block_count] = 0;
for ( index=index_base ;
index < ( information->allocation_size + index_base );
46a6a: d282 addl %d2,%d1
/*
* Initialise the new entries in the table.
*/
object_blocks[block_count] = NULL;
inactive_per_block[block_count] = 0;
46a6c: 42b5 6800 clrl %a5@(00000000,%d6:l)
for ( index=index_base ;
46a70: 6004 bras 46a76 <_Objects_Extend_information+0x15a>
index < ( information->allocation_size + index_base );
index++ ) {
local_table[ index ] = NULL;
46a72: 4298 clrl %a0@+
object_blocks[block_count] = NULL;
inactive_per_block[block_count] = 0;
for ( index=index_base ;
index < ( information->allocation_size + index_base );
index++ ) {
46a74: 5280 addql #1,%d0
* Initialise the new entries in the table.
*/
object_blocks[block_count] = NULL;
inactive_per_block[block_count] = 0;
for ( index=index_base ;
46a76: b280 cmpl %d0,%d1
46a78: 62f8 bhis 46a72 <_Objects_Extend_information+0x156>
index < ( information->allocation_size + index_base );
index++ ) {
local_table[ index ] = NULL;
}
_ISR_Disable( level );
46a7a: 203c 0000 0700 movel #1792,%d0
46a80: 40c3 movew %sr,%d3
46a82: 8083 orl %d3,%d0
46a84: 46c0 movew %d0,%sr
uint32_t the_class,
uint32_t node,
uint32_t index
)
{
return (( (Objects_Id) the_api ) << OBJECTS_API_START_BIT) |
46a86: 2012 movel %a2@,%d0
46a88: 7c18 moveq #24,%d6
information->object_blocks = object_blocks;
information->inactive_per_block = inactive_per_block;
information->local_table = local_table;
information->maximum = (Objects_Maximum) maximum;
information->maximum_id = _Objects_Build_id(
46a8a: 4281 clrl %d1
46a8c: eda8 lsll %d6,%d0
46a8e: 322a 0004 movew %a2@(4),%d1
(( (Objects_Id) the_class ) << OBJECTS_CLASS_START_BIT) |
46a92: 1c3c 001b moveb #27,%d6
uint32_t the_class,
uint32_t node,
uint32_t index
)
{
return (( (Objects_Id) the_api ) << OBJECTS_API_START_BIT) |
46a96: 08c0 0010 bset #16,%d0
(( (Objects_Id) the_class ) << OBJECTS_CLASS_START_BIT) |
46a9a: eda9 lsll %d6,%d1
old_tables = information->object_blocks;
information->object_blocks = object_blocks;
information->inactive_per_block = inactive_per_block;
information->local_table = local_table;
information->maximum = (Objects_Maximum) maximum;
46a9c: 3547 000e movew %d7,%a2@(14)
information->maximum_id = _Objects_Build_id(
46aa0: 0287 0000 ffff andil #65535,%d7
local_table[ index ] = NULL;
}
_ISR_Disable( level );
old_tables = information->object_blocks;
46aa6: 206a 002e moveal %a2@(46),%a0
46aaa: 8081 orl %d1,%d0
information->object_blocks = object_blocks;
46aac: 254b 002e movel %a3,%a2@(46)
uint32_t the_class,
uint32_t node,
uint32_t index
)
{
return (( (Objects_Id) the_api ) << OBJECTS_API_START_BIT) |
46ab0: 8087 orl %d7,%d0
information->inactive_per_block = inactive_per_block;
46ab2: 254d 002a movel %a5,%a2@(42)
information->local_table = local_table;
46ab6: 254c 0018 movel %a4,%a2@(24)
46aba: 2540 000a movel %d0,%a2@(10)
information->the_class,
_Objects_Local_node,
information->maximum
);
_ISR_Enable( level );
46abe: 46c3 movew %d3,%sr
if ( old_tables )
46ac0: 4a88 tstl %a0
46ac2: 670a beqs 46ace <_Objects_Extend_information+0x1b2><== ALWAYS TAKEN
_Workspace_Free( old_tables );
46ac4: 2f08 movel %a0,%sp@- <== NOT EXECUTED
46ac6: 4eb9 0004 87b0 jsr 487b0 <_Workspace_Free> <== NOT EXECUTED
46acc: 588f addql #4,%sp <== NOT EXECUTED
}
/*
* Assign the new object block to the object block table.
*/
information->object_blocks[ block ] = new_object_block;
46ace: 206a 002e moveal %a2@(46),%a0
/*
* Initialize objects .. add to a local chain first.
*/
_Chain_Initialize(
46ad2: 4280 clrl %d0
information->the_class,
_Objects_Local_node,
index
);
_Chain_Append( &information->Inactive, &the_object->Node );
46ad4: 260a movel %a2,%d3
/*
* Move from the local chain, initialise, then append to the inactive chain
*/
index = index_base;
while ((the_object = (Objects_Control *) _Chain_Get( &Inactive )) != NULL ) {
46ad6: 49f9 0004 6018 lea 46018 <_Chain_Get>,%a4
information->the_class,
_Objects_Local_node,
index
);
_Chain_Append( &information->Inactive, &the_object->Node );
46adc: 0683 0000 001c addil #28,%d3
46ae2: 47f9 0004 5fb8 lea 45fb8 <_Chain_Append>,%a3
}
/*
* Assign the new object block to the object block table.
*/
information->object_blocks[ block ] = new_object_block;
46ae8: e58d lsll #2,%d5
46aea: 2184 5800 movel %d4,%a0@(00000000,%d5:l)
/*
* Initialize objects .. add to a local chain first.
*/
_Chain_Initialize(
46aee: 2f2a 0014 movel %a2@(20),%sp@-
46af2: 302a 0012 movew %a2@(18),%d0
46af6: 2f00 movel %d0,%sp@-
46af8: 2f04 movel %d4,%sp@-
46afa: 280e movel %fp,%d4
46afc: 0684 ffff fff4 addil #-12,%d4
46b02: 2f04 movel %d4,%sp@-
46b04: 4eb9 0004 a9c4 jsr 4a9c4 <_Chain_Initialize>
/*
* Move from the local chain, initialise, then append to the inactive chain
*/
index = index_base;
while ((the_object = (Objects_Control *) _Chain_Get( &Inactive )) != NULL ) {
46b0a: 4fef 0010 lea %sp@(16),%sp
46b0e: 602a bras 46b3a <_Objects_Extend_information+0x21e>
46b10: 2212 movel %a2@,%d1
46b12: 7e18 moveq #24,%d7
the_object->id = _Objects_Build_id(
46b14: 4286 clrl %d6
46b16: 2040 moveal %d0,%a0
46b18: 3c2a 0004 movew %a2@(4),%d6
46b1c: efa9 lsll %d7,%d1
(( (Objects_Id) the_class ) << OBJECTS_CLASS_START_BIT) |
46b1e: 1e3c 001b moveb #27,%d7
uint32_t the_class,
uint32_t node,
uint32_t index
)
{
return (( (Objects_Id) the_api ) << OBJECTS_API_START_BIT) |
46b22: 08c1 0010 bset #16,%d1
(( (Objects_Id) the_class ) << OBJECTS_CLASS_START_BIT) |
46b26: efae lsll %d7,%d6
46b28: 8286 orl %d6,%d1
uint32_t the_class,
uint32_t node,
uint32_t index
)
{
return (( (Objects_Id) the_api ) << OBJECTS_API_START_BIT) |
46b2a: 8282 orl %d2,%d1
index
);
_Chain_Append( &information->Inactive, &the_object->Node );
index++;
46b2c: 5282 addql #1,%d2
46b2e: 2141 0008 movel %d1,%a0@(8)
information->the_class,
_Objects_Local_node,
index
);
_Chain_Append( &information->Inactive, &the_object->Node );
46b32: 2f00 movel %d0,%sp@-
46b34: 2f03 movel %d3,%sp@-
46b36: 4e93 jsr %a3@
index++;
46b38: 508f addql #8,%sp
/*
* Move from the local chain, initialise, then append to the inactive chain
*/
index = index_base;
while ((the_object = (Objects_Control *) _Chain_Get( &Inactive )) != NULL ) {
46b3a: 2f04 movel %d4,%sp@-
46b3c: 4e94 jsr %a4@
46b3e: 588f addql #4,%sp
46b40: 4a80 tstl %d0
46b42: 66cc bnes 46b10 <_Objects_Extend_information+0x1f4>
_Chain_Append( &information->Inactive, &the_object->Node );
index++;
}
information->inactive_per_block[ block ] = information->allocation_size;
46b44: 4281 clrl %d1
46b46: 302a 0012 movew %a2@(18),%d0
46b4a: 206a 002a moveal %a2@(42),%a0
46b4e: 3200 movew %d0,%d1
46b50: 2181 5800 movel %d1,%a0@(00000000,%d5:l)
information->inactive =
(Objects_Maximum)(information->inactive + information->allocation_size);
46b54: 322a 0028 movew %a2@(40),%d1
46b58: d081 addl %d1,%d0
index++;
}
information->inactive_per_block[ block ] = information->allocation_size;
information->inactive =
46b5a: 3540 0028 movew %d0,%a2@(40)
(Objects_Maximum)(information->inactive + information->allocation_size);
}
46b5e: 4cee 3cfc ffc8 moveml %fp@(-56),%d2-%d7/%a2-%a5
46b64: 4e5e unlk %fp <== NOT EXECUTED
00046b68 <_Objects_Free>:
void _Objects_Free(
Objects_Information *information,
Objects_Control *the_object
)
{
46b68: 4e56 fff0 linkw %fp,#-16
46b6c: 48d7 0c0c moveml %d2-%d3/%a2-%a3,%sp@
46b70: 246e 0008 moveal %fp@(8),%a2
46b74: 266e 000c moveal %fp@(12),%a3
uint32_t allocation_size = information->allocation_size;
46b78: 342a 0012 movew %a2@(18),%d2
_Chain_Append( &information->Inactive, &the_object->Node );
46b7c: 2f0b movel %a3,%sp@-
46b7e: 486a 001c pea %a2@(28)
46b82: 4eb9 0004 5fb8 jsr 45fb8 <_Chain_Append>
if ( information->auto_extend ) {
46b88: 508f addql #8,%sp
46b8a: 4a2a 0010 tstb %a2@(16)
46b8e: 6750 beqs 46be0 <_Objects_Free+0x78> <== ALWAYS TAKEN
void _Objects_Free(
Objects_Information *information,
Objects_Control *the_object
)
{
uint32_t allocation_size = information->allocation_size;
46b90: 4281 clrl %d1 <== NOT EXECUTED
_Chain_Append( &information->Inactive, &the_object->Node );
if ( information->auto_extend ) {
uint32_t block;
block = (uint32_t) (_Objects_Get_index( the_object->id ) -
46b92: 4280 clrl %d0 <== NOT EXECUTED
void _Objects_Free(
Objects_Information *information,
Objects_Control *the_object
)
{
uint32_t allocation_size = information->allocation_size;
46b94: 3202 movew %d2,%d1 <== NOT EXECUTED
_Chain_Append( &information->Inactive, &the_object->Node );
if ( information->auto_extend ) {
uint32_t block;
block = (uint32_t) (_Objects_Get_index( the_object->id ) -
46b96: 4282 clrl %d2 <== NOT EXECUTED
46b98: 302b 000a movew %a3@(10),%d0 <== NOT EXECUTED
46b9c: 342a 0008 movew %a2@(8),%d2 <== NOT EXECUTED
_Objects_Get_index( information->minimum_id ));
block /= information->allocation_size;
information->inactive_per_block[ block ]++;
46ba0: 206a 002a moveal %a2@(42),%a0 <== NOT EXECUTED
_Chain_Append( &information->Inactive, &the_object->Node );
if ( information->auto_extend ) {
uint32_t block;
block = (uint32_t) (_Objects_Get_index( the_object->id ) -
46ba4: 9082 subl %d2,%d0 <== NOT EXECUTED
_Objects_Get_index( information->minimum_id ));
block /= information->allocation_size;
46ba6: 342a 0012 movew %a2@(18),%d2 <== NOT EXECUTED
46baa: 4c42 0000 remul %d2,%d0,%d0 <== NOT EXECUTED
/*
* Check if the threshold level has been met of
* 1.5 x allocation_size are free.
*/
if ( information->inactive > ( allocation_size + ( allocation_size >> 1 ) ) ) {
46bae: 2401 movel %d1,%d2 <== NOT EXECUTED
46bb0: e28a lsrl #1,%d2 <== NOT EXECUTED
46bb2: d282 addl %d2,%d1 <== NOT EXECUTED
block = (uint32_t) (_Objects_Get_index( the_object->id ) -
_Objects_Get_index( information->minimum_id ));
block /= information->allocation_size;
information->inactive_per_block[ block ]++;
46bb4: e588 lsll #2,%d0 <== NOT EXECUTED
46bb6: d1c0 addal %d0,%a0 <== NOT EXECUTED
46bb8: 5290 addql #1,%a0@ <== NOT EXECUTED
information->inactive++;
46bba: 302a 0028 movew %a2@(40),%d0 <== NOT EXECUTED
46bbe: 5280 addql #1,%d0 <== NOT EXECUTED
46bc0: 3540 0028 movew %d0,%a2@(40) <== NOT EXECUTED
/*
* Check if the threshold level has been met of
* 1.5 x allocation_size are free.
*/
if ( information->inactive > ( allocation_size + ( allocation_size >> 1 ) ) ) {
46bc4: 0280 0000 ffff andil #65535,%d0 <== NOT EXECUTED
46bca: b280 cmpl %d0,%d1 <== NOT EXECUTED
46bcc: 6412 bccs 46be0 <_Objects_Free+0x78> <== NOT EXECUTED
_Objects_Shrink_information( information );
46bce: 2d4a 0008 movel %a2,%fp@(8) <== NOT EXECUTED
}
}
}
46bd2: 4cee 0c0c fff0 moveml %fp@(-16),%d2-%d3/%a2-%a3 <== NOT EXECUTED
46bd8: 4e5e unlk %fp <== NOT EXECUTED
* Check if the threshold level has been met of
* 1.5 x allocation_size are free.
*/
if ( information->inactive > ( allocation_size + ( allocation_size >> 1 ) ) ) {
_Objects_Shrink_information( information );
46bda: 4ef9 0004 6ecc jmp 46ecc <_Objects_Shrink_information> <== NOT EXECUTED
}
}
}
46be0: 4cee 0c0c fff0 moveml %fp@(-16),%d2-%d3/%a2-%a3
46be6: 4e5e unlk %fp
...
00046ccc <_Objects_Get>:
* always NULL.
*
* If the Id is valid but the object has not been created yet, then
* the local_table entry will be NULL.
*/
index = id - information->minimum_id + 1;
46ccc: 7001 moveq #1,%d0
/*
* If the index is less than maximum, then it is OK to use it to
* index into the local_table array.
*/
if ( index <= information->maximum ) {
46cce: 4281 clrl %d1
Objects_Control *_Objects_Get(
Objects_Information *information,
Objects_Id id,
Objects_Locations *location
)
{
46cd0: 4e56 0000 linkw %fp,#0
46cd4: 206e 0008 moveal %fp@(8),%a0
* always NULL.
*
* If the Id is valid but the object has not been created yet, then
* the local_table entry will be NULL.
*/
index = id - information->minimum_id + 1;
46cd8: 90a8 0006 subl %a0@(6),%d0
46cdc: d0ae 000c addl %fp@(12),%d0
Objects_Control *_Objects_Get(
Objects_Information *information,
Objects_Id id,
Objects_Locations *location
)
{
46ce0: 2f0a movel %a2,%sp@-
46ce2: 246e 0010 moveal %fp@(16),%a2
/*
* If the index is less than maximum, then it is OK to use it to
* index into the local_table array.
*/
if ( index <= information->maximum ) {
46ce6: 3228 000e movew %a0@(14),%d1
Objects_Control *_Objects_Get(
Objects_Information *information,
Objects_Id id,
Objects_Locations *location
)
{
46cea: 2f02 movel %d2,%sp@-
/*
* If the index is less than maximum, then it is OK to use it to
* index into the local_table array.
*/
if ( index <= information->maximum ) {
46cec: b280 cmpl %d0,%d1
46cee: 6528 bcss 46d18 <_Objects_Get+0x4c> <== NEVER TAKEN
46cf0: 2239 0005 db08 movel 5db08 <_Thread_Dispatch_disable_level>,%d1
46cf6: 5281 addql #1,%d1
46cf8: 23c1 0005 db08 movel %d1,5db08 <_Thread_Dispatch_disable_level>
_Thread_Disable_dispatch();
if ( (the_object = information->local_table[ index ]) != NULL ) {
46cfe: 2068 0018 moveal %a0@(24),%a0
46d02: 2430 0c00 movel %a0@(00000000,%d0:l:4),%d2
46d06: 6704 beqs 46d0c <_Objects_Get+0x40> <== NEVER TAKEN
*location = OBJECTS_LOCAL;
46d08: 4292 clrl %a2@
return the_object;
46d0a: 6012 bras 46d1e <_Objects_Get+0x52>
/*
* Valid Id for this API, Class and Node but the object has not
* been allocated yet.
*/
_Thread_Enable_dispatch();
46d0c: 4eb9 0004 77a6 jsr 477a6 <_Thread_Enable_dispatch> <== NOT EXECUTED
*location = OBJECTS_ERROR;
46d12: 7201 moveq #1,%d1 <== NOT EXECUTED
46d14: 2481 movel %d1,%a2@ <== NOT EXECUTED
return NULL;
46d16: 6006 bras 46d1e <_Objects_Get+0x52> <== NOT EXECUTED
/*
* Object Id is not within this API and Class on this node. So
* it may be global in a multiprocessing system. But it is clearly
* invalid on a single processor system.
*/
*location = OBJECTS_ERROR;
46d18: 7001 moveq #1,%d0 <== NOT EXECUTED
#if defined(RTEMS_MULTIPROCESSING)
_Objects_MP_Is_remote( information, id, location, &the_object );
return the_object;
#else
return NULL;
46d1a: 4282 clrl %d2 <== NOT EXECUTED
/*
* Object Id is not within this API and Class on this node. So
* it may be global in a multiprocessing system. But it is clearly
* invalid on a single processor system.
*/
*location = OBJECTS_ERROR;
46d1c: 2480 movel %d0,%a2@ <== NOT EXECUTED
_Objects_MP_Is_remote( information, id, location, &the_object );
return the_object;
#else
return NULL;
#endif
}
46d1e: 2002 movel %d2,%d0
46d20: 242e fff8 movel %fp@(-8),%d2
46d24: 246e fffc moveal %fp@(-4),%a2
46d28: 4e5e unlk %fp <== NOT EXECUTED
00046c18 <_Objects_Get_information>:
Objects_Information *_Objects_Get_information(
Objects_APIs the_api,
uint16_t the_class
)
{
46c18: 4e56 0000 linkw %fp,#0
46c1c: 2f03 movel %d3,%sp@-
46c1e: 362e 000e movew %fp@(14),%d3
46c22: 2f02 movel %d2,%sp@-
46c24: 242e 0008 movel %fp@(8),%d2
Objects_Information *info;
int the_class_api_maximum;
if ( !the_class )
46c28: 4a43 tstw %d3
46c2a: 673a beqs 46c66 <_Objects_Get_information+0x4e> <== NEVER TAKEN
/*
* This call implicitly validates the_api so we do not call
* _Objects_Is_api_valid above here.
*/
the_class_api_maximum = _Objects_API_maximum_class( the_api );
46c2c: 2f02 movel %d2,%sp@-
46c2e: 4eb9 0004 ae58 jsr 4ae58 <_Objects_API_maximum_class>
if ( the_class_api_maximum == 0 )
46c34: 588f addql #4,%sp
46c36: 4a80 tstl %d0
46c38: 672c beqs 46c66 <_Objects_Get_information+0x4e> <== NEVER TAKEN
return NULL;
if ( the_class > (uint32_t) the_class_api_maximum )
46c3a: 0283 0000 ffff andil #65535,%d3
46c40: b083 cmpl %d3,%d0
46c42: 6522 bcss 46c66 <_Objects_Get_information+0x4e> <== NEVER TAKEN
return NULL;
if ( !_Objects_Information_table[ the_api ] )
46c44: 41f9 0005 dac4 lea 5dac4 <_Objects_Information_table>,%a0
46c4a: 2070 2c00 moveal %a0@(00000000,%d2:l:4),%a0
46c4e: 4a88 tstl %a0
46c50: 6714 beqs 46c66 <_Objects_Get_information+0x4e> <== NEVER TAKEN
return NULL;
info = _Objects_Information_table[ the_api ][ the_class ];
46c52: 2030 3c00 movel %a0@(00000000,%d3:l:4),%d0
if ( !info )
46c56: 6710 beqs 46c68 <_Objects_Get_information+0x50> <== NEVER TAKEN
* Thus we may have 0 local instances and still have a valid object
* pointer.
*/
#if !defined(RTEMS_MULTIPROCESSING)
if ( info->maximum == 0 )
return NULL;
46c58: 2040 moveal %d0,%a0
46c5a: 4a68 000e tstw %a0@(14)
46c5e: 56c1 sne %d1
46c60: 49c1 extbl %d1
46c62: c081 andl %d1,%d0
46c64: 6002 bras 46c68 <_Objects_Get_information+0x50>
if ( the_class > (uint32_t) the_class_api_maximum )
return NULL;
if ( !_Objects_Information_table[ the_api ] )
return NULL;
46c66: 4280 clrl %d0 <== NOT EXECUTED
if ( info->maximum == 0 )
return NULL;
#endif
return info;
}
46c68: 242e fff8 movel %fp@(-8),%d2
46c6c: 262e fffc movel %fp@(-4),%d3
46c70: 4e5e unlk %fp <== NOT EXECUTED
00046c74 <_Objects_Get_isr_disable>:
{
Objects_Control *the_object;
uint32_t index;
ISR_Level level;
index = id - information->minimum_id + 1;
46c74: 7001 moveq #1,%d0
Objects_Information *information,
Objects_Id id,
Objects_Locations *location,
ISR_Level *level_p
)
{
46c76: 4e56 0000 linkw %fp,#0
46c7a: 226e 0008 moveal %fp@(8),%a1
Objects_Control *the_object;
uint32_t index;
ISR_Level level;
index = id - information->minimum_id + 1;
46c7e: 90a9 0006 subl %a1@(6),%d0
46c82: d0ae 000c addl %fp@(12),%d0
Objects_Information *information,
Objects_Id id,
Objects_Locations *location,
ISR_Level *level_p
)
{
46c86: 2f02 movel %d2,%sp@-
46c88: 206e 0010 moveal %fp@(16),%a0
uint32_t index;
ISR_Level level;
index = id - information->minimum_id + 1;
_ISR_Disable( level );
46c8c: 243c 0000 0700 movel #1792,%d2
46c92: 40c1 movew %sr,%d1
46c94: 8481 orl %d1,%d2
46c96: 46c2 movew %d2,%sr
if ( information->maximum >= index ) {
46c98: 4282 clrl %d2
46c9a: 3429 000e movew %a1@(14),%d2
46c9e: b082 cmpl %d2,%d0
46ca0: 621c bhis 46cbe <_Objects_Get_isr_disable+0x4a> <== NEVER TAKEN
if ( (the_object = information->local_table[ index ]) != NULL ) {
46ca2: 2269 0018 moveal %a1@(24),%a1
46ca6: 2031 0c00 movel %a1@(00000000,%d0:l:4),%d0
46caa: 670a beqs 46cb6 <_Objects_Get_isr_disable+0x42> <== NEVER TAKEN
*location = OBJECTS_LOCAL;
46cac: 4290 clrl %a0@
*level_p = level;
46cae: 206e 0014 moveal %fp@(20),%a0
46cb2: 2081 movel %d1,%a0@
return the_object;
46cb4: 6010 bras 46cc6 <_Objects_Get_isr_disable+0x52>
}
_ISR_Enable( level );
46cb6: 46c1 movew %d1,%sr <== NOT EXECUTED
*location = OBJECTS_ERROR;
46cb8: 7201 moveq #1,%d1 <== NOT EXECUTED
46cba: 2081 movel %d1,%a0@ <== NOT EXECUTED
return NULL;
46cbc: 6008 bras 46cc6 <_Objects_Get_isr_disable+0x52> <== NOT EXECUTED
}
_ISR_Enable( level );
46cbe: 46c1 movew %d1,%sr <== NOT EXECUTED
*location = OBJECTS_ERROR;
46cc0: 7001 moveq #1,%d0 <== NOT EXECUTED
46cc2: 2080 movel %d0,%a0@ <== NOT EXECUTED
#if defined(RTEMS_MULTIPROCESSING)
_Objects_MP_Is_remote( information, id, location, &the_object );
return the_object;
#else
return NULL;
46cc4: 4280 clrl %d0 <== NOT EXECUTED
#endif
}
46cc6: 241f movel %sp@+,%d2
46cc8: 4e5e unlk %fp <== NOT EXECUTED
00048000 <_Objects_Get_name_as_string>:
char *_Objects_Get_name_as_string(
Objects_Id id,
size_t length,
char *name
)
{
48000: 4e56 ffe4 linkw %fp,#-28 <== NOT EXECUTED
48004: 48d7 041c moveml %d2-%d4/%a2,%sp@ <== NOT EXECUTED
48008: 262e 0008 movel %fp@(8),%d3 <== NOT EXECUTED
4800c: 282e 000c movel %fp@(12),%d4 <== NOT EXECUTED
48010: 242e 0010 movel %fp@(16),%d2 <== NOT EXECUTED
char lname[5];
Objects_Control *the_object;
Objects_Locations location;
Objects_Id tmpId;
if ( length == 0 )
48014: 4a84 tstl %d4 <== NOT EXECUTED
48016: 6700 00c2 beqw 480da <_Objects_Get_name_as_string+0xda><== NOT EXECUTED
return NULL;
if ( name == NULL )
4801a: 4a82 tstl %d2 <== NOT EXECUTED
4801c: 6700 00be beqw 480dc <_Objects_Get_name_as_string+0xdc><== NOT EXECUTED
return NULL;
tmpId = (id == OBJECTS_ID_OF_SELF) ? _Thread_Executing->Object.id : id;
48020: 4a83 tstl %d3 <== NOT EXECUTED
48022: 660a bnes 4802e <_Objects_Get_name_as_string+0x2e><== NOT EXECUTED
48024: 2079 0006 7ec0 moveal 67ec0 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
4802a: 2628 0008 movel %a0@(8),%d3 <== NOT EXECUTED
information = _Objects_Get_information_id( tmpId );
4802e: 2f03 movel %d3,%sp@- <== NOT EXECUTED
48030: 4eb9 0004 7f20 jsr 47f20 <_Objects_Get_information_id> <== NOT EXECUTED
if ( !information )
48036: 588f addql #4,%sp <== NOT EXECUTED
if ( name == NULL )
return NULL;
tmpId = (id == OBJECTS_ID_OF_SELF) ? _Thread_Executing->Object.id : id;
information = _Objects_Get_information_id( tmpId );
48038: 2440 moveal %d0,%a2 <== NOT EXECUTED
if ( !information )
4803a: 4a80 tstl %d0 <== NOT EXECUTED
4803c: 6700 009c beqw 480da <_Objects_Get_name_as_string+0xda><== NOT EXECUTED
return NULL;
the_object = _Objects_Get( information, tmpId, &location );
48040: 486e fffc pea %fp@(-4) <== NOT EXECUTED
48044: 2f03 movel %d3,%sp@- <== NOT EXECUTED
48046: 2f00 movel %d0,%sp@- <== NOT EXECUTED
48048: 4eb9 0004 80e8 jsr 480e8 <_Objects_Get> <== NOT EXECUTED
switch ( location ) {
4804e: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
48052: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
48056: 6600 0082 bnew 480da <_Objects_Get_name_as_string+0xda><== NOT EXECUTED
return NULL;
case OBJECTS_LOCAL:
#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
if ( information->is_string ) {
4805a: 4a2a 0032 tstb %a2@(50) <== NOT EXECUTED
4805e: 670c beqs 4806c <_Objects_Get_name_as_string+0x6c><== NOT EXECUTED
s = the_object->name.name_p;
48060: 2040 moveal %d0,%a0 <== NOT EXECUTED
48062: 2028 000c movel %a0@(12),%d0 <== NOT EXECUTED
lname[ 4 ] = '\0';
s = lname;
}
d = name;
if ( s ) {
48066: 6638 bnes 480a0 <_Objects_Get_name_as_string+0xa0><== NOT EXECUTED
48068: 2042 moveal %d2,%a0 <== NOT EXECUTED
4806a: 6064 bras 480d0 <_Objects_Get_name_as_string+0xd0><== NOT EXECUTED
if ( information->is_string ) {
s = the_object->name.name_p;
} else
#endif
{
uint32_t u32_name = (uint32_t) the_object->name.name_u32;
4806c: 2040 moveal %d0,%a0 <== NOT EXECUTED
lname[ 0 ] = (u32_name >> 24) & 0xff;
4806e: 7618 moveq #24,%d3 <== NOT EXECUTED
if ( information->is_string ) {
s = the_object->name.name_p;
} else
#endif
{
uint32_t u32_name = (uint32_t) the_object->name.name_u32;
48070: 2028 000c movel %a0@(12),%d0 <== NOT EXECUTED
lname[ 0 ] = (u32_name >> 24) & 0xff;
48074: 2200 movel %d0,%d1 <== NOT EXECUTED
48076: e6a9 lsrl %d3,%d1 <== NOT EXECUTED
48078: 1d41 fff7 moveb %d1,%fp@(-9) <== NOT EXECUTED
lname[ 1 ] = (u32_name >> 16) & 0xff;
4807c: 2200 movel %d0,%d1 <== NOT EXECUTED
4807e: 4241 clrw %d1 <== NOT EXECUTED
48080: 4841 swap %d1 <== NOT EXECUTED
lname[ 2 ] = (u32_name >> 8) & 0xff;
lname[ 3 ] = (u32_name >> 0) & 0xff;
48082: 1d40 fffa moveb %d0,%fp@(-6) <== NOT EXECUTED
#endif
{
uint32_t u32_name = (uint32_t) the_object->name.name_u32;
lname[ 0 ] = (u32_name >> 24) & 0xff;
lname[ 1 ] = (u32_name >> 16) & 0xff;
48086: 1d41 fff8 moveb %d1,%fp@(-8) <== NOT EXECUTED
lname[ 2 ] = (u32_name >> 8) & 0xff;
4808a: 2200 movel %d0,%d1 <== NOT EXECUTED
4808c: e089 lsrl #8,%d1 <== NOT EXECUTED
lname[ 3 ] = (u32_name >> 0) & 0xff;
lname[ 4 ] = '\0';
4808e: 4200 clrb %d0 <== NOT EXECUTED
{
uint32_t u32_name = (uint32_t) the_object->name.name_u32;
lname[ 0 ] = (u32_name >> 24) & 0xff;
lname[ 1 ] = (u32_name >> 16) & 0xff;
lname[ 2 ] = (u32_name >> 8) & 0xff;
48090: 1d41 fff9 moveb %d1,%fp@(-7) <== NOT EXECUTED
lname[ 3 ] = (u32_name >> 0) & 0xff;
lname[ 4 ] = '\0';
48094: 1d40 fffb moveb %d0,%fp@(-5) <== NOT EXECUTED
s = lname;
48098: 200e movel %fp,%d0 <== NOT EXECUTED
4809a: 0680 ffff fff7 addil #-9,%d0 <== NOT EXECUTED
lname[ 0 ] = (u32_name >> 24) & 0xff;
lname[ 1 ] = (u32_name >> 16) & 0xff;
lname[ 2 ] = (u32_name >> 8) & 0xff;
lname[ 3 ] = (u32_name >> 0) & 0xff;
lname[ 4 ] = '\0';
480a0: 2240 moveal %d0,%a1 <== NOT EXECUTED
}
d = name;
if ( s ) {
for ( i=0 ; i<(length-1) && *s ; i++, s++, d++ ) {
*d = (isprint((unsigned char)*s)) ? *s : '*';
480a2: 2042 moveal %d2,%a0 <== NOT EXECUTED
480a4: 4281 clrl %d1 <== NOT EXECUTED
s = lname;
}
d = name;
if ( s ) {
for ( i=0 ; i<(length-1) && *s ; i++, s++, d++ ) {
480a6: 5384 subql #1,%d4 <== NOT EXECUTED
480a8: 601e bras 480c8 <_Objects_Get_name_as_string+0xc8><== NOT EXECUTED
*d = (isprint((unsigned char)*s)) ? *s : '*';
480aa: 4283 clrl %d3 <== NOT EXECUTED
480ac: 1600 moveb %d0,%d3 <== NOT EXECUTED
480ae: 2479 0005 e5d0 moveal 5e5d0 <__ctype_ptr__>,%a2 <== NOT EXECUTED
480b4: 1632 3801 moveb %a2@(00000001,%d3:l),%d3 <== NOT EXECUTED
480b8: 49c3 extbl %d3 <== NOT EXECUTED
480ba: 0283 0000 0097 andil #151,%d3 <== NOT EXECUTED
480c0: 6602 bnes 480c4 <_Objects_Get_name_as_string+0xc4><== NOT EXECUTED
480c2: 702a moveq #42,%d0 <== NOT EXECUTED
s = lname;
}
d = name;
if ( s ) {
for ( i=0 ; i<(length-1) && *s ; i++, s++, d++ ) {
480c4: 5281 addql #1,%d1 <== NOT EXECUTED
*d = (isprint((unsigned char)*s)) ? *s : '*';
480c6: 10c0 moveb %d0,%a0@+ <== NOT EXECUTED
s = lname;
}
d = name;
if ( s ) {
for ( i=0 ; i<(length-1) && *s ; i++, s++, d++ ) {
480c8: b881 cmpl %d1,%d4 <== NOT EXECUTED
480ca: 6304 blss 480d0 <_Objects_Get_name_as_string+0xd0><== NOT EXECUTED
480cc: 1019 moveb %a1@+,%d0 <== NOT EXECUTED
480ce: 66da bnes 480aa <_Objects_Get_name_as_string+0xaa><== NOT EXECUTED
*d = (isprint((unsigned char)*s)) ? *s : '*';
}
}
*d = '\0';
480d0: 4210 clrb %a0@ <== NOT EXECUTED
_Thread_Enable_dispatch();
480d2: 4eb9 0004 8b4e jsr 48b4e <_Thread_Enable_dispatch> <== NOT EXECUTED
return name;
480d8: 6002 bras 480dc <_Objects_Get_name_as_string+0xdc><== NOT EXECUTED
#if defined(RTEMS_MULTIPROCESSING)
case OBJECTS_REMOTE:
/* not supported */
#endif
case OBJECTS_ERROR:
return NULL;
480da: 4282 clrl %d2 <== NOT EXECUTED
_Thread_Enable_dispatch();
return name;
}
return NULL; /* unreachable path */
}
480dc: 2002 movel %d2,%d0 <== NOT EXECUTED
480de: 4cee 041c ffe4 moveml %fp@(-28),%d2-%d4/%a2 <== NOT EXECUTED
480e4: 4e5e unlk %fp <== NOT EXECUTED
00046e58 <_Objects_Get_next>:
Objects_Information *information,
Objects_Id id,
Objects_Locations *location_p,
Objects_Id *next_id_p
)
{
46e58: 4e56 ffec linkw %fp,#-20 <== NOT EXECUTED
46e5c: 48d7 3c04 moveml %d2/%a2-%a5,%sp@ <== NOT EXECUTED
46e60: 266e 0008 moveal %fp@(8),%a3 <== NOT EXECUTED
46e64: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
46e68: 246e 0010 moveal %fp@(16),%a2 <== NOT EXECUTED
46e6c: 286e 0014 moveal %fp@(20),%a4 <== NOT EXECUTED
Objects_Control *object;
Objects_Id next_id;
if ( !information )
46e70: 4a8b tstl %a3 <== NOT EXECUTED
46e72: 6744 beqs 46eb8 <_Objects_Get_next+0x60> <== NOT EXECUTED
return NULL;
if ( !location_p )
46e74: 4a8a tstl %a2 <== NOT EXECUTED
46e76: 6740 beqs 46eb8 <_Objects_Get_next+0x60> <== NOT EXECUTED
return NULL;
if ( !next_id_p )
46e78: 4a8c tstl %a4 <== NOT EXECUTED
46e7a: 673c beqs 46eb8 <_Objects_Get_next+0x60> <== NOT EXECUTED
return NULL;
if (_Objects_Get_index(id) == OBJECTS_ID_INITIAL_INDEX)
46e7c: 4a42 tstw %d2 <== NOT EXECUTED
46e7e: 6604 bnes 46e84 <_Objects_Get_next+0x2c> <== NOT EXECUTED
next_id = information->minimum_id;
46e80: 242b 0006 movel %a3@(6),%d2 <== NOT EXECUTED
*location_p = OBJECTS_ERROR;
goto final;
}
/* try to grab one */
object = _Objects_Get(information, next_id, location_p);
46e84: 4bf9 0004 6ec4 lea 46ec4 <_Objects_Get>,%a5 <== NOT EXECUTED
else
next_id = id;
do {
/* walked off end of list? */
if (_Objects_Get_index(next_id) > information->maximum)
46e8a: 4281 clrl %d1 <== NOT EXECUTED
46e8c: 4280 clrl %d0 <== NOT EXECUTED
46e8e: 322b 000e movew %a3@(14),%d1 <== NOT EXECUTED
46e92: 3002 movew %d2,%d0 <== NOT EXECUTED
46e94: b081 cmpl %d1,%d0 <== NOT EXECUTED
46e96: 630a blss 46ea2 <_Objects_Get_next+0x4a> <== NOT EXECUTED
{
*location_p = OBJECTS_ERROR;
46e98: 7201 moveq #1,%d1 <== NOT EXECUTED
*next_id_p = next_id;
return object;
final:
*next_id_p = OBJECTS_ID_FINAL;
46e9a: 70ff moveq #-1,%d0 <== NOT EXECUTED
do {
/* walked off end of list? */
if (_Objects_Get_index(next_id) > information->maximum)
{
*location_p = OBJECTS_ERROR;
46e9c: 2481 movel %d1,%a2@ <== NOT EXECUTED
*next_id_p = next_id;
return object;
final:
*next_id_p = OBJECTS_ID_FINAL;
46e9e: 2880 movel %d0,%a4@ <== NOT EXECUTED
46ea0: 6016 bras 46eb8 <_Objects_Get_next+0x60> <== NOT EXECUTED
*location_p = OBJECTS_ERROR;
goto final;
}
/* try to grab one */
object = _Objects_Get(information, next_id, location_p);
46ea2: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46ea4: 2f02 movel %d2,%sp@- <== NOT EXECUTED
next_id++;
46ea6: 5282 addql #1,%d2 <== NOT EXECUTED
*location_p = OBJECTS_ERROR;
goto final;
}
/* try to grab one */
object = _Objects_Get(information, next_id, location_p);
46ea8: 2f0b movel %a3,%sp@- <== NOT EXECUTED
46eaa: 4e95 jsr %a5@ <== NOT EXECUTED
next_id++;
} while (*location_p != OBJECTS_LOCAL);
46eac: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
46eb0: 4a92 tstl %a2@ <== NOT EXECUTED
46eb2: 66d6 bnes 46e8a <_Objects_Get_next+0x32> <== NOT EXECUTED
*next_id_p = next_id;
46eb4: 2882 movel %d2,%a4@ <== NOT EXECUTED
return object;
46eb6: 6002 bras 46eba <_Objects_Get_next+0x62> <== NOT EXECUTED
if ( !location_p )
return NULL;
if ( !next_id_p )
return NULL;
46eb8: 4280 clrl %d0 <== NOT EXECUTED
return object;
final:
*next_id_p = OBJECTS_ID_FINAL;
return 0;
}
46eba: 4cee 3c04 ffec moveml %fp@(-20),%d2/%a2-%a5 <== NOT EXECUTED
46ec0: 4e5e unlk %fp <== NOT EXECUTED
000543b8 <_Objects_Get_no_protection>:
/*
* You can't just extract the index portion or you can get tricked
* by a value between 1 and maximum.
*/
index = id - information->minimum_id + 1;
543b8: 7001 moveq #1,%d0 <== NOT EXECUTED
if ( information->maximum >= index ) {
543ba: 4281 clrl %d1 <== NOT EXECUTED
Objects_Control *_Objects_Get_no_protection(
Objects_Information *information,
Objects_Id id,
Objects_Locations *location
)
{
543bc: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
543c0: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
/*
* You can't just extract the index portion or you can get tricked
* by a value between 1 and maximum.
*/
index = id - information->minimum_id + 1;
543c4: 90a8 0006 subl %a0@(6),%d0 <== NOT EXECUTED
543c8: d0ae 000c addl %fp@(12),%d0 <== NOT EXECUTED
if ( information->maximum >= index ) {
543cc: 3228 000e movew %a0@(14),%d1 <== NOT EXECUTED
Objects_Control *_Objects_Get_no_protection(
Objects_Information *information,
Objects_Id id,
Objects_Locations *location
)
{
543d0: 226e 0010 moveal %fp@(16),%a1 <== NOT EXECUTED
* You can't just extract the index portion or you can get tricked
* by a value between 1 and maximum.
*/
index = id - information->minimum_id + 1;
if ( information->maximum >= index ) {
543d4: b081 cmpl %d1,%d0 <== NOT EXECUTED
543d6: 620e bhis 543e6 <_Objects_Get_no_protection+0x2e><== NOT EXECUTED
if ( (the_object = information->local_table[ index ]) != NULL ) {
543d8: 2068 0018 moveal %a0@(24),%a0 <== NOT EXECUTED
543dc: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0 <== NOT EXECUTED
543e0: 6704 beqs 543e6 <_Objects_Get_no_protection+0x2e><== NOT EXECUTED
*location = OBJECTS_LOCAL;
543e2: 4291 clrl %a1@ <== NOT EXECUTED
return the_object;
543e4: 6006 bras 543ec <_Objects_Get_no_protection+0x34><== NOT EXECUTED
/*
* This isn't supported or required yet for Global objects so
* if it isn't local, we don't find it.
*/
*location = OBJECTS_ERROR;
543e6: 7001 moveq #1,%d0 <== NOT EXECUTED
543e8: 2280 movel %d0,%a1@ <== NOT EXECUTED
return NULL;
543ea: 4280 clrl %d0 <== NOT EXECUTED
}
543ec: 4e5e unlk %fp <== NOT EXECUTED
00047bf8 <_Objects_Id_to_name>:
*/
Objects_Name_or_id_lookup_errors _Objects_Id_to_name (
Objects_Id id,
Objects_Name *name
)
{
47bf8: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
47bfc: 222e 0008 movel %fp@(8),%d1 <== NOT EXECUTED
47c00: 2f02 movel %d2,%sp@- <== NOT EXECUTED
/*
* Caller is trusted for name != NULL.
*/
tmpId = (id == OBJECTS_ID_OF_SELF) ? _Thread_Executing->Object.id : id;
47c02: 4a81 tstl %d1 <== NOT EXECUTED
47c04: 660a bnes 47c10 <_Objects_Id_to_name+0x18> <== NOT EXECUTED
47c06: 2079 0005 f44e moveal 5f44e <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
47c0c: 2228 0008 movel %a0@(8),%d1 <== NOT EXECUTED
47c10: 7418 moveq #24,%d2 <== NOT EXECUTED
47c12: 2001 movel %d1,%d0 <== NOT EXECUTED
47c14: e4a8 lsrl %d2,%d0 <== NOT EXECUTED
47c16: 143c 0007 moveb #7,%d2 <== NOT EXECUTED
47c1a: c082 andl %d2,%d0 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE bool _Objects_Is_api_valid(
uint32_t the_api
)
{
if ( !the_api || the_api > OBJECTS_APIS_LAST )
47c1c: 143c 0002 moveb #2,%d2 <== NOT EXECUTED
47c20: 2040 moveal %d0,%a0 <== NOT EXECUTED
47c22: 5388 subql #1,%a0 <== NOT EXECUTED
47c24: b488 cmpl %a0,%d2 <== NOT EXECUTED
47c26: 6540 bcss 47c68 <_Objects_Id_to_name+0x70> <== NOT EXECUTED
47c28: 6048 bras 47c72 <_Objects_Id_to_name+0x7a> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE uint32_t _Objects_Get_class(
Objects_Id id
)
{
return (uint32_t)
47c2a: 2001 movel %d1,%d0 <== NOT EXECUTED
47c2c: 741b moveq #27,%d2 <== NOT EXECUTED
47c2e: e4a8 lsrl %d2,%d0 <== NOT EXECUTED
if ( !_Objects_Information_table[ the_api ] )
return OBJECTS_INVALID_ID;
the_class = _Objects_Get_class( tmpId );
information = _Objects_Information_table[ the_api ][ the_class ];
47c30: 2070 0c00 moveal %a0@(00000000,%d0:l:4),%a0 <== NOT EXECUTED
if ( !information )
47c34: 4a88 tstl %a0 <== NOT EXECUTED
47c36: 6730 beqs 47c68 <_Objects_Id_to_name+0x70> <== NOT EXECUTED
return OBJECTS_INVALID_ID;
#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
if ( information->is_string )
47c38: 4a28 0032 tstb %a0@(50) <== NOT EXECUTED
47c3c: 662a bnes 47c68 <_Objects_Id_to_name+0x70> <== NOT EXECUTED
return OBJECTS_INVALID_ID;
#endif
the_object = _Objects_Get( information, tmpId, &ignored_location );
47c3e: 486e fffc pea %fp@(-4) <== NOT EXECUTED
47c42: 2f01 movel %d1,%sp@- <== NOT EXECUTED
47c44: 2f08 movel %a0,%sp@- <== NOT EXECUTED
47c46: 4eb9 0004 7b98 jsr 47b98 <_Objects_Get> <== NOT EXECUTED
if ( !the_object )
47c4c: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
47c50: 4a80 tstl %d0 <== NOT EXECUTED
47c52: 6714 beqs 47c68 <_Objects_Id_to_name+0x70> <== NOT EXECUTED
return OBJECTS_INVALID_ID;
*name = the_object->name;
47c54: 206e 000c moveal %fp@(12),%a0 <== NOT EXECUTED
47c58: 2240 moveal %d0,%a1 <== NOT EXECUTED
47c5a: 20a9 000c movel %a1@(12),%a0@ <== NOT EXECUTED
_Thread_Enable_dispatch();
47c5e: 4eb9 0004 86fe jsr 486fe <_Thread_Enable_dispatch> <== NOT EXECUTED
return OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL;
47c64: 4280 clrl %d0 <== NOT EXECUTED
47c66: 6002 bras 47c6a <_Objects_Id_to_name+0x72> <== NOT EXECUTED
the_api = _Objects_Get_API( tmpId );
if ( !_Objects_Is_api_valid( the_api ) )
return OBJECTS_INVALID_ID;
if ( !_Objects_Information_table[ the_api ] )
return OBJECTS_INVALID_ID;
47c68: 7003 moveq #3,%d0 <== NOT EXECUTED
return OBJECTS_INVALID_ID;
*name = the_object->name;
_Thread_Enable_dispatch();
return OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL;
}
47c6a: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
47c6e: 4e5e unlk %fp <== NOT EXECUTED
47c70: 4e75 rts <== NOT EXECUTED
the_api = _Objects_Get_API( tmpId );
if ( !_Objects_Is_api_valid( the_api ) )
return OBJECTS_INVALID_ID;
if ( !_Objects_Information_table[ the_api ] )
47c72: 41f9 0005 ef7c lea 5ef7c <_Objects_Information_table>,%a0 <== NOT EXECUTED
47c78: 2070 0c00 moveal %a0@(00000000,%d0:l:4),%a0 <== NOT EXECUTED
47c7c: 4a88 tstl %a0 <== NOT EXECUTED
47c7e: 66aa bnes 47c2a <_Objects_Id_to_name+0x32> <== NOT EXECUTED
47c80: 60e6 bras 47c68 <_Objects_Id_to_name+0x70> <== NOT EXECUTED
...
0005117c <_Objects_Name_to_id_string>:
Objects_Name_or_id_lookup_errors _Objects_Name_to_id_string(
Objects_Information *information,
const char *name,
Objects_Id *id
)
{
5117c: 4e56 ffe4 linkw %fp,#-28 <== NOT EXECUTED
51180: 48d7 3c1c moveml %d2-%d4/%a2-%a5,%sp@ <== NOT EXECUTED
51184: 266e 0008 moveal %fp@(8),%a3 <== NOT EXECUTED
51188: 262e 000c movel %fp@(12),%d3 <== NOT EXECUTED
5118c: 286e 0010 moveal %fp@(16),%a4 <== NOT EXECUTED
Objects_Control *the_object;
uint32_t index;
/* ASSERT: information->is_string == true */
if ( !id )
51190: 4a8c tstl %a4 <== NOT EXECUTED
51192: 6750 beqs 511e4 <_Objects_Name_to_id_string+0x68><== NOT EXECUTED
return OBJECTS_INVALID_ADDRESS;
if ( !name )
51194: 4a83 tstl %d3 <== NOT EXECUTED
51196: 6750 beqs 511e8 <_Objects_Name_to_id_string+0x6c><== NOT EXECUTED
return OBJECTS_INVALID_NAME;
if ( information->maximum != 0 ) {
51198: 382b 000e movew %a3@(14),%d4 <== NOT EXECUTED
5119c: 674a beqs 511e8 <_Objects_Name_to_id_string+0x6c><== NOT EXECUTED
5119e: 7401 moveq #1,%d2 <== NOT EXECUTED
continue;
if ( !the_object->name.name_p )
continue;
if (!strncmp( name, the_object->name.name_p, information->name_length)) {
511a0: 4bf9 0005 4914 lea 54914 <strncmp>,%a5 <== NOT EXECUTED
if ( !name )
return OBJECTS_INVALID_NAME;
if ( information->maximum != 0 ) {
for ( index = 1; index <= information->maximum; index++ ) {
511a6: 0284 0000 ffff andil #65535,%d4 <== NOT EXECUTED
511ac: 6030 bras 511de <_Objects_Name_to_id_string+0x62><== NOT EXECUTED
the_object = information->local_table[ index ];
511ae: 206b 0018 moveal %a3@(24),%a0 <== NOT EXECUTED
511b2: 2470 2c00 moveal %a0@(00000000,%d2:l:4),%a2 <== NOT EXECUTED
if ( !the_object )
511b6: 4a8a tstl %a2 <== NOT EXECUTED
511b8: 6722 beqs 511dc <_Objects_Name_to_id_string+0x60><== NOT EXECUTED
continue;
if ( !the_object->name.name_p )
511ba: 202a 000c movel %a2@(12),%d0 <== NOT EXECUTED
511be: 671c beqs 511dc <_Objects_Name_to_id_string+0x60><== NOT EXECUTED
continue;
if (!strncmp( name, the_object->name.name_p, information->name_length)) {
511c0: 4281 clrl %d1 <== NOT EXECUTED
511c2: 322b 0034 movew %a3@(52),%d1 <== NOT EXECUTED
511c6: 2f01 movel %d1,%sp@- <== NOT EXECUTED
511c8: 2f00 movel %d0,%sp@- <== NOT EXECUTED
511ca: 2f03 movel %d3,%sp@- <== NOT EXECUTED
511cc: 4e95 jsr %a5@ <== NOT EXECUTED
511ce: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
511d2: 4a80 tstl %d0 <== NOT EXECUTED
511d4: 6606 bnes 511dc <_Objects_Name_to_id_string+0x60><== NOT EXECUTED
*id = the_object->id;
511d6: 28aa 0008 movel %a2@(8),%a4@ <== NOT EXECUTED
return OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL;
511da: 600e bras 511ea <_Objects_Name_to_id_string+0x6e><== NOT EXECUTED
if ( !name )
return OBJECTS_INVALID_NAME;
if ( information->maximum != 0 ) {
for ( index = 1; index <= information->maximum; index++ ) {
511dc: 5282 addql #1,%d2 <== NOT EXECUTED
511de: b882 cmpl %d2,%d4 <== NOT EXECUTED
511e0: 64cc bccs 511ae <_Objects_Name_to_id_string+0x32><== NOT EXECUTED
511e2: 6004 bras 511e8 <_Objects_Name_to_id_string+0x6c><== NOT EXECUTED
uint32_t index;
/* ASSERT: information->is_string == true */
if ( !id )
return OBJECTS_INVALID_ADDRESS;
511e4: 7002 moveq #2,%d0 <== NOT EXECUTED
511e6: 6002 bras 511ea <_Objects_Name_to_id_string+0x6e><== NOT EXECUTED
return OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL;
}
}
}
return OBJECTS_INVALID_NAME;
511e8: 7001 moveq #1,%d0 <== NOT EXECUTED
}
511ea: 4cee 3c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a5 <== NOT EXECUTED
511f0: 4e5e unlk %fp <== NOT EXECUTED
00046e58 <_Objects_Name_to_id_u32>:
Objects_Information *information,
uint32_t name,
uint32_t node,
Objects_Id *id
)
{
46e58: 4e56 fff4 linkw %fp,#-12 <== NOT EXECUTED
46e5c: 226e 0008 moveal %fp@(8),%a1 <== NOT EXECUTED
46e60: 48d7 040c moveml %d2-%d3/%a2,%sp@ <== NOT EXECUTED
46e64: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
46e68: 202e 0010 movel %fp@(16),%d0 <== NOT EXECUTED
46e6c: 246e 0014 moveal %fp@(20),%a2 <== NOT EXECUTED
Objects_Name name_for_mp;
#endif
/* ASSERT: information->is_string == false */
if ( !id )
46e70: 4a8a tstl %a2 <== NOT EXECUTED
46e72: 674a beqs 46ebe <_Objects_Name_to_id_u32+0x66> <== NOT EXECUTED
return OBJECTS_INVALID_ADDRESS;
if ( name == 0 )
46e74: 4a82 tstl %d2 <== NOT EXECUTED
46e76: 674a beqs 46ec2 <_Objects_Name_to_id_u32+0x6a> <== NOT EXECUTED
return OBJECTS_INVALID_NAME;
search_local_node = false;
if ( information->maximum != 0 &&
46e78: 3229 000e movew %a1@(14),%d1 <== NOT EXECUTED
46e7c: 6744 beqs 46ec2 <_Objects_Name_to_id_u32+0x6a> <== NOT EXECUTED
46e7e: 4a80 tstl %d0 <== NOT EXECUTED
46e80: 672e beqs 46eb0 <_Objects_Name_to_id_u32+0x58> <== NOT EXECUTED
(node == OBJECTS_SEARCH_ALL_NODES ||
46e82: 0c80 7fff ffff cmpil #2147483647,%d0 <== NOT EXECUTED
46e88: 6726 beqs 46eb0 <_Objects_Name_to_id_u32+0x58> <== NOT EXECUTED
node == OBJECTS_SEARCH_LOCAL_NODE ||
46e8a: 7601 moveq #1,%d3 <== NOT EXECUTED
46e8c: b680 cmpl %d0,%d3 <== NOT EXECUTED
46e8e: 6632 bnes 46ec2 <_Objects_Name_to_id_u32+0x6a> <== NOT EXECUTED
46e90: 601e bras 46eb0 <_Objects_Name_to_id_u32+0x58> <== NOT EXECUTED
))
search_local_node = true;
if ( search_local_node ) {
for ( index = 1; index <= information->maximum; index++ ) {
the_object = information->local_table[ index ];
46e92: 2069 0018 moveal %a1@(24),%a0 <== NOT EXECUTED
46e96: 2070 0c00 moveal %a0@(00000000,%d0:l:4),%a0 <== NOT EXECUTED
if ( !the_object )
46e9a: 4a88 tstl %a0 <== NOT EXECUTED
46e9c: 670e beqs 46eac <_Objects_Name_to_id_u32+0x54> <== NOT EXECUTED
continue;
if ( name == the_object->name.name_u32 ) {
46e9e: b4a8 000c cmpl %a0@(12),%d2 <== NOT EXECUTED
46ea2: 6608 bnes 46eac <_Objects_Name_to_id_u32+0x54> <== NOT EXECUTED
*id = the_object->id;
46ea4: 24a8 0008 movel %a0@(8),%a2@ <== NOT EXECUTED
return OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL;
46ea8: 4280 clrl %d0 <== NOT EXECUTED
46eaa: 6018 bras 46ec4 <_Objects_Name_to_id_u32+0x6c> <== NOT EXECUTED
_Objects_Is_local_node( node )
))
search_local_node = true;
if ( search_local_node ) {
for ( index = 1; index <= information->maximum; index++ ) {
46eac: 5280 addql #1,%d0 <== NOT EXECUTED
46eae: 6008 bras 46eb8 <_Objects_Name_to_id_u32+0x60> <== NOT EXECUTED
search_local_node = false;
if ( information->maximum != 0 &&
(node == OBJECTS_SEARCH_ALL_NODES ||
node == OBJECTS_SEARCH_LOCAL_NODE ||
46eb0: 7001 moveq #1,%d0 <== NOT EXECUTED
_Objects_Is_local_node( node )
))
search_local_node = true;
if ( search_local_node ) {
for ( index = 1; index <= information->maximum; index++ ) {
46eb2: 0281 0000 ffff andil #65535,%d1 <== NOT EXECUTED
46eb8: b280 cmpl %d0,%d1 <== NOT EXECUTED
46eba: 64d6 bccs 46e92 <_Objects_Name_to_id_u32+0x3a> <== NOT EXECUTED
46ebc: 6004 bras 46ec2 <_Objects_Name_to_id_u32+0x6a> <== NOT EXECUTED
#endif
/* ASSERT: information->is_string == false */
if ( !id )
return OBJECTS_INVALID_ADDRESS;
46ebe: 7002 moveq #2,%d0 <== NOT EXECUTED
46ec0: 6002 bras 46ec4 <_Objects_Name_to_id_u32+0x6c> <== NOT EXECUTED
return OBJECTS_INVALID_NAME;
name_for_mp.name_u32 = name;
return _Objects_MP_Global_name_search( information, name_for_mp, node, id );
#else
return OBJECTS_INVALID_NAME;
46ec2: 7001 moveq #1,%d0 <== NOT EXECUTED
#endif
}
46ec4: 4cd7 040c moveml %sp@,%d2-%d3/%a2 <== NOT EXECUTED
46ec8: 4e5e unlk %fp <== NOT EXECUTED
00046e28 <_Objects_Namespace_remove>:
void _Objects_Namespace_remove(
Objects_Information *information,
Objects_Control *the_object
)
{
46e28: 4e56 0000 linkw %fp,#0
#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
/*
* If this is a string format name, then free the memory.
*/
if ( information->is_string && the_object->name.name_p )
46e2c: 206e 0008 moveal %fp@(8),%a0
void _Objects_Namespace_remove(
Objects_Information *information,
Objects_Control *the_object
)
{
46e30: 2f0a movel %a2,%sp@-
46e32: 246e 000c moveal %fp@(12),%a2
#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
/*
* If this is a string format name, then free the memory.
*/
if ( information->is_string && the_object->name.name_p )
46e36: 4a28 0032 tstb %a0@(50)
46e3a: 6710 beqs 46e4c <_Objects_Namespace_remove+0x24> <== ALWAYS TAKEN
46e3c: 202a 000c movel %a2@(12),%d0 <== NOT EXECUTED
46e40: 670a beqs 46e4c <_Objects_Namespace_remove+0x24> <== NOT EXECUTED
_Workspace_Free( (void *)the_object->name.name_p );
46e42: 2f00 movel %d0,%sp@- <== NOT EXECUTED
46e44: 4eb9 0004 87b0 jsr 487b0 <_Workspace_Free> <== NOT EXECUTED
46e4a: 588f addql #4,%sp <== NOT EXECUTED
* Clear out either format.
*/
#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
the_object->name.name_p = NULL;
#endif
the_object->name.name_u32 = 0;
46e4c: 42aa 000c clrl %a2@(12)
}
46e50: 246e fffc moveal %fp@(-4),%a2
46e54: 4e5e unlk %fp <== NOT EXECUTED
00047244 <_Objects_Set_name>:
{
size_t length;
const char *s;
s = name;
length = strnlen( name, information->name_length );
47244: 4280 clrl %d0 <== NOT EXECUTED
bool _Objects_Set_name(
Objects_Information *information,
Objects_Control *the_object,
const char *name
)
{
47246: 4e56 ffec linkw %fp,#-20 <== NOT EXECUTED
4724a: 48d7 3c04 moveml %d2/%a2-%a5,%sp@ <== NOT EXECUTED
4724e: 2a6e 0008 moveal %fp@(8),%a5 <== NOT EXECUTED
size_t length;
const char *s;
s = name;
length = strnlen( name, information->name_length );
47252: 302d 0034 movew %a5@(52),%d0 <== NOT EXECUTED
bool _Objects_Set_name(
Objects_Information *information,
Objects_Control *the_object,
const char *name
)
{
47256: 246e 0010 moveal %fp@(16),%a2 <== NOT EXECUTED
size_t length;
const char *s;
s = name;
length = strnlen( name, information->name_length );
4725a: 2f00 movel %d0,%sp@- <== NOT EXECUTED
bool _Objects_Set_name(
Objects_Information *information,
Objects_Control *the_object,
const char *name
)
{
4725c: 286e 000c moveal %fp@(12),%a4 <== NOT EXECUTED
size_t length;
const char *s;
s = name;
length = strnlen( name, information->name_length );
47260: 2f0a movel %a2,%sp@- <== NOT EXECUTED
47262: 4eb9 0004 e528 jsr 4e528 <strnlen> <== NOT EXECUTED
#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
if ( information->is_string ) {
47268: 508f addql #8,%sp <== NOT EXECUTED
{
size_t length;
const char *s;
s = name;
length = strnlen( name, information->name_length );
4726a: 2640 moveal %d0,%a3 <== NOT EXECUTED
#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
if ( information->is_string ) {
4726c: 4a2d 0032 tstb %a5@(50) <== NOT EXECUTED
47270: 6744 beqs 472b6 <_Objects_Set_name+0x72> <== NOT EXECUTED
char *d;
d = _Workspace_Allocate( length + 1 );
47272: 486b 0001 pea %a3@(1) <== NOT EXECUTED
47276: 4eb9 0004 8bdc jsr 48bdc <_Workspace_Allocate> <== NOT EXECUTED
if ( !d )
4727c: 588f addql #4,%sp <== NOT EXECUTED
#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
if ( information->is_string ) {
char *d;
d = _Workspace_Allocate( length + 1 );
4727e: 2a40 moveal %d0,%a5 <== NOT EXECUTED
if ( !d )
47280: 4a80 tstl %d0 <== NOT EXECUTED
47282: 6700 0082 beqw 47306 <_Objects_Set_name+0xc2> <== NOT EXECUTED
return false;
if ( the_object->name.name_p ) {
47286: 202c 000c movel %a4@(12),%d0 <== NOT EXECUTED
4728a: 670e beqs 4729a <_Objects_Set_name+0x56> <== NOT EXECUTED
_Workspace_Free( (void *)the_object->name.name_p );
4728c: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4728e: 4eb9 0004 8bf8 jsr 48bf8 <_Workspace_Free> <== NOT EXECUTED
the_object->name.name_p = NULL;
47294: 588f addql #4,%sp <== NOT EXECUTED
47296: 42ac 000c clrl %a4@(12) <== NOT EXECUTED
}
strncpy( d, name, length );
4729a: 2f0b movel %a3,%sp@- <== NOT EXECUTED
4729c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4729e: 2f0d movel %a5,%sp@- <== NOT EXECUTED
472a0: 4eb9 0004 e4a4 jsr 4e4a4 <strncpy> <== NOT EXECUTED
d[length] = '\0';
the_object->name.name_p = d;
472a6: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
_Workspace_Free( (void *)the_object->name.name_p );
the_object->name.name_p = NULL;
}
strncpy( d, name, length );
d[length] = '\0';
472aa: 4200 clrb %d0 <== NOT EXECUTED
472ac: 1b80 b800 moveb %d0,%a5@(00000000,%a3:l) <== NOT EXECUTED
the_object->name.name_p = d;
472b0: 294d 000c movel %a5,%a4@(12) <== NOT EXECUTED
472b4: 604c bras 47302 <_Objects_Set_name+0xbe> <== NOT EXECUTED
} else
#endif
{
the_object->name.name_u32 = _Objects_Build_name(
472b6: 7418 moveq #24,%d2 <== NOT EXECUTED
472b8: 1212 moveb %a2@,%d1 <== NOT EXECUTED
472ba: 7020 moveq #32,%d0 <== NOT EXECUTED
472bc: 4840 swap %d0 <== NOT EXECUTED
472be: 49c1 extbl %d1 <== NOT EXECUTED
472c0: e5a9 lsll %d2,%d1 <== NOT EXECUTED
472c2: 143c 0001 moveb #1,%d2 <== NOT EXECUTED
472c6: b48b cmpl %a3,%d2 <== NOT EXECUTED
472c8: 640a bccs 472d4 <_Objects_Set_name+0x90> <== NOT EXECUTED
472ca: 102a 0001 moveb %a2@(1),%d0 <== NOT EXECUTED
472ce: 49c0 extbl %d0 <== NOT EXECUTED
472d0: 4840 swap %d0 <== NOT EXECUTED
472d2: 4240 clrw %d0 <== NOT EXECUTED
472d4: 7402 moveq #2,%d2 <== NOT EXECUTED
472d6: 8280 orl %d0,%d1 <== NOT EXECUTED
472d8: 203c 0000 2000 movel #8192,%d0 <== NOT EXECUTED
472de: b48b cmpl %a3,%d2 <== NOT EXECUTED
472e0: 6408 bccs 472ea <_Objects_Set_name+0xa6> <== NOT EXECUTED
472e2: 102a 0002 moveb %a2@(2),%d0 <== NOT EXECUTED
472e6: 49c0 extbl %d0 <== NOT EXECUTED
472e8: e188 lsll #8,%d0 <== NOT EXECUTED
472ea: 8081 orl %d1,%d0 <== NOT EXECUTED
472ec: 7203 moveq #3,%d1 <== NOT EXECUTED
472ee: b28b cmpl %a3,%d1 <== NOT EXECUTED
472f0: 6408 bccs 472fa <_Objects_Set_name+0xb6> <== NOT EXECUTED
472f2: 142a 0003 moveb %a2@(3),%d2 <== NOT EXECUTED
472f6: 49c2 extbl %d2 <== NOT EXECUTED
472f8: 6002 bras 472fc <_Objects_Set_name+0xb8> <== NOT EXECUTED
472fa: 7420 moveq #32,%d2 <== NOT EXECUTED
472fc: 8082 orl %d2,%d0 <== NOT EXECUTED
472fe: 2940 000c movel %d0,%a4@(12) <== NOT EXECUTED
((3 < length) ? s[ 3 ] : ' ')
);
}
return true;
47302: 7001 moveq #1,%d0 <== NOT EXECUTED
47304: 6002 bras 47308 <_Objects_Set_name+0xc4> <== NOT EXECUTED
if ( information->is_string ) {
char *d;
d = _Workspace_Allocate( length + 1 );
if ( !d )
return false;
47306: 4200 clrb %d0 <== NOT EXECUTED
);
}
return true;
}
47308: 4cee 3c04 ffec moveml %fp@(-20),%d2/%a2-%a5 <== NOT EXECUTED
4730e: 4e5e unlk %fp <== NOT EXECUTED
...
00046ecc <_Objects_Shrink_information>:
/*
* Search the list to find block or chunk with all objects inactive.
*/
index_base = _Objects_Get_index( information->minimum_id );
block_count = (information->maximum - index_base) /
46ecc: 4280 clrl %d0 <== NOT EXECUTED
*/
void _Objects_Shrink_information(
Objects_Information *information
)
{
46ece: 4e56 ffec linkw %fp,#-20 <== NOT EXECUTED
46ed2: 48d7 0c1c moveml %d2-%d4/%a2-%a3,%sp@ <== NOT EXECUTED
46ed6: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
/*
* Search the list to find block or chunk with all objects inactive.
*/
index_base = _Objects_Get_index( information->minimum_id );
46eda: 4283 clrl %d3 <== NOT EXECUTED
block_count = (information->maximum - index_base) /
46edc: 4284 clrl %d4 <== NOT EXECUTED
/*
* Search the list to find block or chunk with all objects inactive.
*/
index_base = _Objects_Get_index( information->minimum_id );
46ede: 362a 0008 movew %a2@(8),%d3 <== NOT EXECUTED
block_count = (information->maximum - index_base) /
46ee2: 302a 000e movew %a2@(14),%d0 <== NOT EXECUTED
46ee6: 382a 0012 movew %a2@(18),%d4 <== NOT EXECUTED
46eea: 9083 subl %d3,%d0 <== NOT EXECUTED
46eec: 4c44 0000 remul %d4,%d0,%d0 <== NOT EXECUTED
information->allocation_size;
for ( block = 0; block < block_count; block++ ) {
46ef0: 4281 clrl %d1 <== NOT EXECUTED
46ef2: 6072 bras 46f66 <_Objects_Shrink_information+0x9a><== NOT EXECUTED
46ef4: 2401 movel %d1,%d2 <== NOT EXECUTED
46ef6: e58a lsll #2,%d2 <== NOT EXECUTED
if ( information->inactive_per_block[ block ] ==
46ef8: 206a 002a moveal %a2@(42),%a0 <== NOT EXECUTED
46efc: b8b0 2800 cmpl %a0@(00000000,%d2:l),%d4 <== NOT EXECUTED
46f00: 6660 bnes 46f62 <_Objects_Shrink_information+0x96><== NOT EXECUTED
information->allocation_size ) {
/*
* Assume the Inactive chain is never empty at this point
*/
the_object = (Objects_Control *) _Chain_First( &information->Inactive );
46f02: 206a 001c moveal %a2@(28),%a0 <== NOT EXECUTED
*/
extract_me = the_object;
the_object = (Objects_Control *) the_object->Node.next;
if ((index >= index_base) &&
(index < (index_base + information->allocation_size))) {
_Chain_Extract( &extract_me->Node );
46f06: 47f9 0004 5ff0 lea 45ff0 <_Chain_Extract>,%a3 <== NOT EXECUTED
46f0c: 6002 bras 46f10 <_Objects_Shrink_information+0x44><== NOT EXECUTED
index = _Objects_Get_index( the_object->id );
/*
* Get the next node before the node is extracted
*/
extract_me = the_object;
the_object = (Objects_Control *) the_object->Node.next;
46f0e: 2044 moveal %d4,%a0 <== NOT EXECUTED
* Assume the Inactive chain is never empty at this point
*/
the_object = (Objects_Control *) _Chain_First( &information->Inactive );
do {
index = _Objects_Get_index( the_object->id );
46f10: 4280 clrl %d0 <== NOT EXECUTED
46f12: 3028 000a movew %a0@(10),%d0 <== NOT EXECUTED
/*
* Get the next node before the node is extracted
*/
extract_me = the_object;
the_object = (Objects_Control *) the_object->Node.next;
46f16: 2810 movel %a0@,%d4 <== NOT EXECUTED
if ((index >= index_base) &&
46f18: b680 cmpl %d0,%d3 <== NOT EXECUTED
46f1a: 6212 bhis 46f2e <_Objects_Shrink_information+0x62><== NOT EXECUTED
(index < (index_base + information->allocation_size))) {
46f1c: 4281 clrl %d1 <== NOT EXECUTED
46f1e: 322a 0012 movew %a2@(18),%d1 <== NOT EXECUTED
46f22: d283 addl %d3,%d1 <== NOT EXECUTED
/*
* Get the next node before the node is extracted
*/
extract_me = the_object;
the_object = (Objects_Control *) the_object->Node.next;
if ((index >= index_base) &&
46f24: b280 cmpl %d0,%d1 <== NOT EXECUTED
46f26: 6306 blss 46f2e <_Objects_Shrink_information+0x62><== NOT EXECUTED
(index < (index_base + information->allocation_size))) {
_Chain_Extract( &extract_me->Node );
46f28: 2f08 movel %a0,%sp@- <== NOT EXECUTED
46f2a: 4e93 jsr %a3@ <== NOT EXECUTED
46f2c: 588f addql #4,%sp <== NOT EXECUTED
}
}
while ( the_object );
46f2e: 4a84 tstl %d4 <== NOT EXECUTED
46f30: 66dc bnes 46f0e <_Objects_Shrink_information+0x42><== NOT EXECUTED
/*
* Free the memory and reset the structures in the object' information
*/
_Workspace_Free( information->object_blocks[ block ] );
46f32: 206a 002e moveal %a2@(46),%a0 <== NOT EXECUTED
46f36: 2f30 2800 movel %a0@(00000000,%d2:l),%sp@- <== NOT EXECUTED
46f3a: 4eb9 0004 87b0 jsr 487b0 <_Workspace_Free> <== NOT EXECUTED
information->object_blocks[ block ] = NULL;
46f40: 206a 002e moveal %a2@(46),%a0 <== NOT EXECUTED
information->inactive_per_block[ block ] = 0;
information->inactive -= information->allocation_size;
return;
46f44: 588f addql #4,%sp <== NOT EXECUTED
/*
* Free the memory and reset the structures in the object' information
*/
_Workspace_Free( information->object_blocks[ block ] );
information->object_blocks[ block ] = NULL;
46f46: 42b0 2800 clrl %a0@(00000000,%d2:l) <== NOT EXECUTED
information->inactive_per_block[ block ] = 0;
46f4a: 206a 002a moveal %a2@(42),%a0 <== NOT EXECUTED
information->inactive -= information->allocation_size;
46f4e: 302a 0028 movew %a2@(40),%d0 <== NOT EXECUTED
46f52: 322a 0012 movew %a2@(18),%d1 <== NOT EXECUTED
* Free the memory and reset the structures in the object' information
*/
_Workspace_Free( information->object_blocks[ block ] );
information->object_blocks[ block ] = NULL;
information->inactive_per_block[ block ] = 0;
46f56: 42b0 2800 clrl %a0@(00000000,%d2:l) <== NOT EXECUTED
information->inactive -= information->allocation_size;
46f5a: 9081 subl %d1,%d0 <== NOT EXECUTED
46f5c: 3540 0028 movew %d0,%a2@(40) <== NOT EXECUTED
return;
46f60: 6008 bras 46f6a <_Objects_Shrink_information+0x9e><== NOT EXECUTED
}
index_base += information->allocation_size;
46f62: d684 addl %d4,%d3 <== NOT EXECUTED
index_base = _Objects_Get_index( information->minimum_id );
block_count = (information->maximum - index_base) /
information->allocation_size;
for ( block = 0; block < block_count; block++ ) {
46f64: 5281 addql #1,%d1 <== NOT EXECUTED
46f66: b081 cmpl %d1,%d0 <== NOT EXECUTED
46f68: 628a bhis 46ef4 <_Objects_Shrink_information+0x28><== NOT EXECUTED
return;
}
index_base += information->allocation_size;
}
}
46f6a: 4cee 0c1c ffec moveml %fp@(-20),%d2-%d4/%a2-%a3 <== NOT EXECUTED
46f70: 4e5e unlk %fp <== NOT EXECUTED
00047450 <_POSIX_Absolute_timeout_to_ticks>:
*/
POSIX_Absolute_timeout_conversion_results_t _POSIX_Absolute_timeout_to_ticks(
const struct timespec *abstime,
Watchdog_Interval *ticks_out
)
{
47450: 4e56 ffe0 linkw %fp,#-32 <== NOT EXECUTED
47454: 48d7 041c moveml %d2-%d4/%a2,%sp@ <== NOT EXECUTED
47458: 262e 0008 movel %fp@(8),%d3 <== NOT EXECUTED
4745c: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
/*
* Make sure there is always a value returned.
*/
*ticks_out = 0;
47460: 4292 clrl %a2@ <== NOT EXECUTED
/*
* Is the absolute time even valid?
*/
if ( !_Timespec_Is_valid(abstime) )
47462: 2f03 movel %d3,%sp@- <== NOT EXECUTED
47464: 4eb9 0004 ae7c jsr 4ae7c <_Timespec_Is_valid> <== NOT EXECUTED
4746a: 588f addql #4,%sp <== NOT EXECUTED
4746c: 4a00 tstb %d0 <== NOT EXECUTED
4746e: 674c beqs 474bc <_POSIX_Absolute_timeout_to_ticks+0x6c><== NOT EXECUTED
return POSIX_ABSOLUTE_TIMEOUT_INVALID;
/*
* Is the absolute time in the past?
*/
_TOD_Get( ¤t_time );
47470: 240e movel %fp,%d2 <== NOT EXECUTED
47472: 5182 subql #8,%d2 <== NOT EXECUTED
47474: 2f02 movel %d2,%sp@- <== NOT EXECUTED
47476: 4eb9 0004 8fa4 jsr 48fa4 <_TOD_Get> <== NOT EXECUTED
if ( _Timespec_Less_than( abstime, ¤t_time ) )
4747c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4747e: 2f03 movel %d3,%sp@- <== NOT EXECUTED
47480: 4eb9 0004 aea4 jsr 4aea4 <_Timespec_Less_than> <== NOT EXECUTED
47486: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4748a: 4a00 tstb %d0 <== NOT EXECUTED
4748c: 6632 bnes 474c0 <_POSIX_Absolute_timeout_to_ticks+0x70><== NOT EXECUTED
return POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST;
/*
* How long until the requested absolute time?
*/
_Timespec_Subtract( ¤t_time, abstime, &difference );
4748e: 280e movel %fp,%d4 <== NOT EXECUTED
47490: 0684 ffff fff0 addil #-16,%d4 <== NOT EXECUTED
47496: 2f04 movel %d4,%sp@- <== NOT EXECUTED
47498: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4749a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4749c: 4eb9 0004 aed4 jsr 4aed4 <_Timespec_Subtract> <== NOT EXECUTED
/*
* Internally the SuperCore uses ticks, so convert to them.
*/
*ticks_out = _Timespec_To_ticks( &difference );
474a2: 2f04 movel %d4,%sp@- <== NOT EXECUTED
474a4: 4eb9 0004 af18 jsr 4af18 <_Timespec_To_ticks> <== NOT EXECUTED
/*
* If the difference was 0, then the future is now. It is so bright
* we better wear shades.
*/
if ( !*ticks_out )
474aa: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
return POSIX_ABSOLUTE_TIMEOUT_IS_NOW;
474ae: 7202 moveq #2,%d1 <== NOT EXECUTED
_Timespec_Subtract( ¤t_time, abstime, &difference );
/*
* Internally the SuperCore uses ticks, so convert to them.
*/
*ticks_out = _Timespec_To_ticks( &difference );
474b0: 2480 movel %d0,%a2@ <== NOT EXECUTED
/*
* If the difference was 0, then the future is now. It is so bright
* we better wear shades.
*/
if ( !*ticks_out )
return POSIX_ABSOLUTE_TIMEOUT_IS_NOW;
474b2: 56c0 sne %d0 <== NOT EXECUTED
474b4: 49c0 extbl %d0 <== NOT EXECUTED
474b6: 9280 subl %d0,%d1 <== NOT EXECUTED
474b8: 2001 movel %d1,%d0 <== NOT EXECUTED
474ba: 6006 bras 474c2 <_POSIX_Absolute_timeout_to_ticks+0x72><== NOT EXECUTED
/*
* Is the absolute time even valid?
*/
if ( !_Timespec_Is_valid(abstime) )
return POSIX_ABSOLUTE_TIMEOUT_INVALID;
474bc: 4280 clrl %d0 <== NOT EXECUTED
474be: 6002 bras 474c2 <_POSIX_Absolute_timeout_to_ticks+0x72><== NOT EXECUTED
* Is the absolute time in the past?
*/
_TOD_Get( ¤t_time );
if ( _Timespec_Less_than( abstime, ¤t_time ) )
return POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST;
474c0: 7001 moveq #1,%d0 <== NOT EXECUTED
/*
* This is the case we were expecting and it took this long to
* get here.
*/
return POSIX_ABSOLUTE_TIMEOUT_IS_IN_FUTURE;
}
474c2: 4cee 041c ffe0 moveml %fp@(-32),%d2-%d4/%a2 <== NOT EXECUTED
474c8: 4e5e unlk %fp <== NOT EXECUTED
0004afe0 <_POSIX_Barrier_Translate_core_barrier_return_code>:
#if defined(RTEMS_DEBUG)
if ( the_barrier_status > CORE_BARRIER_STATUS_LAST )
return EINVAL;
#endif
return _POSIX_Barrier_Return_codes[the_barrier_status];
}
4afe0: 41f9 0005 cc7e lea 5cc7e <_POSIX_Barrier_Return_codes>,%a0 <== NOT EXECUTED
int _POSIX_Barrier_Translate_core_barrier_return_code(
CORE_barrier_Status the_barrier_status
)
{
4afe6: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( the_barrier_status > CORE_BARRIER_STATUS_LAST )
return EINVAL;
#endif
return _POSIX_Barrier_Return_codes[the_barrier_status];
}
4afea: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
4afee: 4e5e unlk %fp <== NOT EXECUTED
4aff0: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0 <== NOT EXECUTED
...
000460a4 <_POSIX_Condition_variables_Get>:
POSIX_Condition_variables_Control *_POSIX_Condition_variables_Get (
pthread_cond_t *cond,
Objects_Locations *location
)
{
460a4: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
460a8: 2f0b movel %a3,%sp@- <== NOT EXECUTED
460aa: 266e 000c moveal %fp@(12),%a3 <== NOT EXECUTED
460ae: 2f0a movel %a2,%sp@- <== NOT EXECUTED
460b0: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
int status;
if ( !cond ) {
460b4: 4a8a tstl %a2 <== NOT EXECUTED
460b6: 6716 beqs 460ce <_POSIX_Condition_variables_Get+0x2a><== NOT EXECUTED
*location = OBJECTS_ERROR;
return (POSIX_Condition_variables_Control *) 0;
}
if ( *cond == PTHREAD_COND_INITIALIZER ) {
460b8: 70ff moveq #-1,%d0 <== NOT EXECUTED
460ba: b092 cmpl %a2@,%d0 <== NOT EXECUTED
460bc: 6618 bnes 460d6 <_POSIX_Condition_variables_Get+0x32><== NOT EXECUTED
/*
* Do an "auto-create" here.
*/
status = pthread_cond_init( cond, 0 );
460be: 42a7 clrl %sp@- <== NOT EXECUTED
460c0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
460c2: 4eb9 0004 60f8 jsr 460f8 <pthread_cond_init> <== NOT EXECUTED
if ( status ) {
460c8: 508f addql #8,%sp <== NOT EXECUTED
460ca: 4a80 tstl %d0 <== NOT EXECUTED
460cc: 6708 beqs 460d6 <_POSIX_Condition_variables_Get+0x32><== NOT EXECUTED
*location = OBJECTS_ERROR;
460ce: 7001 moveq #1,%d0 <== NOT EXECUTED
460d0: 2680 movel %d0,%a3@ <== NOT EXECUTED
return (POSIX_Condition_variables_Control *) 0;
460d2: 4280 clrl %d0 <== NOT EXECUTED
460d4: 6014 bras 460ea <_POSIX_Condition_variables_Get+0x46><== NOT EXECUTED
}
/*
* Now call Objects_Get()
*/
return (POSIX_Condition_variables_Control *)_Objects_Get(
460d6: 2f0b movel %a3,%sp@- <== NOT EXECUTED
460d8: 2f12 movel %a2@,%sp@- <== NOT EXECUTED
460da: 4879 0006 03c6 pea 603c6 <_POSIX_Condition_variables_Information><== NOT EXECUTED
460e0: 4eb9 0004 897c jsr 4897c <_Objects_Get> <== NOT EXECUTED
460e6: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
&_POSIX_Condition_variables_Information,
(Objects_Id) *cond,
location
);
}
460ea: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
460ee: 266e fffc moveal %fp@(-4),%a3 <== NOT EXECUTED
460f2: 4e5e unlk %fp <== NOT EXECUTED
...
000461b0 <_POSIX_Condition_variables_Signal_support>:
int _POSIX_Condition_variables_Signal_support(
pthread_cond_t *cond,
bool is_broadcast
)
{
461b0: 4e56 ffec linkw %fp,#-20 <== NOT EXECUTED
461b4: 48d7 0c0c moveml %d2-%d3/%a2-%a3,%sp@ <== NOT EXECUTED
register POSIX_Condition_variables_Control *the_cond;
Objects_Locations location;
Thread_Control *the_thread;
the_cond = _POSIX_Condition_variables_Get( cond, &location );
461b8: 486e fffc pea %fp@(-4) <== NOT EXECUTED
461bc: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
int _POSIX_Condition_variables_Signal_support(
pthread_cond_t *cond,
bool is_broadcast
)
{
461c0: 162e 000f moveb %fp@(15),%d3 <== NOT EXECUTED
register POSIX_Condition_variables_Control *the_cond;
Objects_Locations location;
Thread_Control *the_thread;
the_cond = _POSIX_Condition_variables_Get( cond, &location );
461c4: 4eb9 0004 60a4 jsr 460a4 <_POSIX_Condition_variables_Get> <== NOT EXECUTED
switch ( location ) {
461ca: 508f addql #8,%sp <== NOT EXECUTED
{
register POSIX_Condition_variables_Control *the_cond;
Objects_Locations location;
Thread_Control *the_thread;
the_cond = _POSIX_Condition_variables_Get( cond, &location );
461cc: 2440 moveal %d0,%a2 <== NOT EXECUTED
switch ( location ) {
461ce: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
461d2: 662e bnes 46202 <_POSIX_Condition_variables_Signal_support+0x52><== NOT EXECUTED
case OBJECTS_LOCAL:
do {
the_thread = _Thread_queue_Dequeue( &the_cond->Wait_queue );
461d4: 2400 movel %d0,%d2 <== NOT EXECUTED
461d6: 0682 0000 0018 addil #24,%d2 <== NOT EXECUTED
461dc: 47f9 0004 9704 lea 49704 <_Thread_queue_Dequeue>,%a3 <== NOT EXECUTED
461e2: 2f02 movel %d2,%sp@- <== NOT EXECUTED
461e4: 4e93 jsr %a3@ <== NOT EXECUTED
if ( !the_thread )
461e6: 588f addql #4,%sp <== NOT EXECUTED
461e8: 4a80 tstl %d0 <== NOT EXECUTED
461ea: 6604 bnes 461f0 <_POSIX_Condition_variables_Signal_support+0x40><== NOT EXECUTED
the_cond->Mutex = POSIX_CONDITION_VARIABLES_NO_MUTEX;
461ec: 42aa 0014 clrl %a2@(20) <== NOT EXECUTED
} while ( is_broadcast && the_thread );
461f0: 4a03 tstb %d3 <== NOT EXECUTED
461f2: 6704 beqs 461f8 <_POSIX_Condition_variables_Signal_support+0x48><== NOT EXECUTED
461f4: 4a80 tstl %d0 <== NOT EXECUTED
461f6: 66ea bnes 461e2 <_POSIX_Condition_variables_Signal_support+0x32><== NOT EXECUTED
_Thread_Enable_dispatch();
461f8: 4eb9 0004 93e2 jsr 493e2 <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
461fe: 4280 clrl %d0 <== NOT EXECUTED
46200: 6002 bras 46204 <_POSIX_Condition_variables_Signal_support+0x54><== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
46202: 7016 moveq #22,%d0 <== NOT EXECUTED
}
46204: 4cee 0c0c ffec moveml %fp@(-20),%d2-%d3/%a2-%a3 <== NOT EXECUTED
4620a: 4e5e unlk %fp <== NOT EXECUTED
...
00046270 <_POSIX_Condition_variables_Wait_support>:
pthread_cond_t *cond,
pthread_mutex_t *mutex,
Watchdog_Interval timeout,
bool already_timedout
)
{
46270: 4e56 ffe4 linkw %fp,#-28 <== NOT EXECUTED
46274: 48d7 3c0c moveml %d2-%d3/%a2-%a5,%sp@ <== NOT EXECUTED
register POSIX_Condition_variables_Control *the_cond;
Objects_Locations location;
int status;
int mutex_status;
if ( !_POSIX_Mutex_Get( mutex, &location ) ) {
46278: 240e movel %fp,%d2 <== NOT EXECUTED
4627a: 5982 subql #4,%d2 <== NOT EXECUTED
pthread_cond_t *cond,
pthread_mutex_t *mutex,
Watchdog_Interval timeout,
bool already_timedout
)
{
4627c: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
register POSIX_Condition_variables_Control *the_cond;
Objects_Locations location;
int status;
int mutex_status;
if ( !_POSIX_Mutex_Get( mutex, &location ) ) {
46280: 2f02 movel %d2,%sp@- <== NOT EXECUTED
pthread_cond_t *cond,
pthread_mutex_t *mutex,
Watchdog_Interval timeout,
bool already_timedout
)
{
46282: 286e 0008 moveal %fp@(8),%a4 <== NOT EXECUTED
register POSIX_Condition_variables_Control *the_cond;
Objects_Locations location;
int status;
int mutex_status;
if ( !_POSIX_Mutex_Get( mutex, &location ) ) {
46286: 2f0a movel %a2,%sp@- <== NOT EXECUTED
pthread_cond_t *cond,
pthread_mutex_t *mutex,
Watchdog_Interval timeout,
bool already_timedout
)
{
46288: 162e 0017 moveb %fp@(23),%d3 <== NOT EXECUTED
register POSIX_Condition_variables_Control *the_cond;
Objects_Locations location;
int status;
int mutex_status;
if ( !_POSIX_Mutex_Get( mutex, &location ) ) {
4628c: 4eb9 0004 63cc jsr 463cc <_POSIX_Mutex_Get> <== NOT EXECUTED
46292: 508f addql #8,%sp <== NOT EXECUTED
46294: 4a80 tstl %d0 <== NOT EXECUTED
46296: 6700 00ac beqw 46344 <_POSIX_Condition_variables_Wait_support+0xd4><== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void )
{
RTEMS_COMPILER_MEMORY_BARRIER();
_Thread_Dispatch_disable_level -= 1;
4629a: 2039 0006 0018 movel 60018 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
462a0: 5380 subql #1,%d0 <== NOT EXECUTED
return EINVAL;
}
_Thread_Unnest_dispatch();
the_cond = _POSIX_Condition_variables_Get( cond, &location );
462a2: 2f02 movel %d2,%sp@- <== NOT EXECUTED
462a4: 23c0 0006 0018 movel %d0,60018 <_Thread_Dispatch_disable_level><== NOT EXECUTED
462aa: 2f0c movel %a4,%sp@- <== NOT EXECUTED
462ac: 4eb9 0004 60a4 jsr 460a4 <_POSIX_Condition_variables_Get> <== NOT EXECUTED
switch ( location ) {
462b2: 508f addql #8,%sp <== NOT EXECUTED
return EINVAL;
}
_Thread_Unnest_dispatch();
the_cond = _POSIX_Condition_variables_Get( cond, &location );
462b4: 2640 moveal %d0,%a3 <== NOT EXECUTED
switch ( location ) {
462b6: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
462ba: 6600 0088 bnew 46344 <_POSIX_Condition_variables_Wait_support+0xd4><== NOT EXECUTED
case OBJECTS_LOCAL:
if ( the_cond->Mutex && ( the_cond->Mutex != *mutex ) ) {
462be: 202b 0014 movel %a3@(20),%d0 <== NOT EXECUTED
462c2: 670c beqs 462d0 <_POSIX_Condition_variables_Wait_support+0x60><== NOT EXECUTED
462c4: b092 cmpl %a2@,%d0 <== NOT EXECUTED
462c6: 6708 beqs 462d0 <_POSIX_Condition_variables_Wait_support+0x60><== NOT EXECUTED
_Thread_Enable_dispatch();
462c8: 4eb9 0004 93e2 jsr 493e2 <_Thread_Enable_dispatch> <== NOT EXECUTED
462ce: 6074 bras 46344 <_POSIX_Condition_variables_Wait_support+0xd4><== NOT EXECUTED
return EINVAL;
}
(void) pthread_mutex_unlock( mutex );
462d0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
462d2: 4bf9 0004 93e2 lea 493e2 <_Thread_Enable_dispatch>,%a5 <== NOT EXECUTED
462d8: 4eb9 0004 6624 jsr 46624 <pthread_mutex_unlock> <== NOT EXECUTED
_Thread_Enable_dispatch();
return EINVAL;
}
*/
if ( !already_timedout ) {
462de: 588f addql #4,%sp <== NOT EXECUTED
462e0: 4a03 tstb %d3 <== NOT EXECUTED
462e2: 664e bnes 46332 <_POSIX_Condition_variables_Wait_support+0xc2><== NOT EXECUTED
the_cond->Mutex = *mutex;
462e4: 2752 0014 movel %a2@,%a3@(20) <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Thread_queue_Enter_critical_section (
Thread_queue_Control *the_thread_queue
)
{
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
462e8: 7001 moveq #1,%d0 <== NOT EXECUTED
_Thread_queue_Enter_critical_section( &the_cond->Wait_queue );
_Thread_Executing->Wait.return_code = 0;
462ea: 2079 0006 04a6 moveal 604a6 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
462f0: 2740 0048 movel %d0,%a3@(72) <== NOT EXECUTED
_Thread_Executing->Wait.queue = &the_cond->Wait_queue;
462f4: 47eb 0018 lea %a3@(24),%a3 <== NOT EXECUTED
if ( !already_timedout ) {
the_cond->Mutex = *mutex;
_Thread_queue_Enter_critical_section( &the_cond->Wait_queue );
_Thread_Executing->Wait.return_code = 0;
462f8: 42a8 0034 clrl %a0@(52) <== NOT EXECUTED
_Thread_Executing->Wait.queue = &the_cond->Wait_queue;
_Thread_Executing->Wait.id = *cond;
462fc: 2154 0020 movel %a4@,%a0@(32) <== NOT EXECUTED
if ( !already_timedout ) {
the_cond->Mutex = *mutex;
_Thread_queue_Enter_critical_section( &the_cond->Wait_queue );
_Thread_Executing->Wait.return_code = 0;
_Thread_Executing->Wait.queue = &the_cond->Wait_queue;
46300: 214b 0044 movel %a3,%a0@(68) <== NOT EXECUTED
_Thread_Executing->Wait.id = *cond;
_Thread_queue_Enqueue( &the_cond->Wait_queue, timeout );
46304: 4879 0004 9bb8 pea 49bb8 <_Thread_queue_Timeout> <== NOT EXECUTED
4630a: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
4630e: 2f0b movel %a3,%sp@- <== NOT EXECUTED
46310: 4eb9 0004 9844 jsr 49844 <_Thread_queue_Enqueue_with_handler><== NOT EXECUTED
_Thread_Enable_dispatch();
46316: 4e95 jsr %a5@ <== NOT EXECUTED
* a POSIX signal, then pthread_cond_wait returns spuriously,
* according to the POSIX standard. It means that pthread_cond_wait
* returns a success status, except for the fact that it was not
* woken up a pthread_cond_signal or a pthread_cond_broadcast.
*/
status = _Thread_Executing->Wait.return_code;
46318: 2079 0006 04a6 moveal 604a6 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
if ( status == EINTR )
status = 0;
4631e: 7004 moveq #4,%d0 <== NOT EXECUTED
* according to the POSIX standard. It means that pthread_cond_wait
* returns a success status, except for the fact that it was not
* woken up a pthread_cond_signal or a pthread_cond_broadcast.
*/
status = _Thread_Executing->Wait.return_code;
if ( status == EINTR )
46320: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
* a POSIX signal, then pthread_cond_wait returns spuriously,
* according to the POSIX standard. It means that pthread_cond_wait
* returns a success status, except for the fact that it was not
* woken up a pthread_cond_signal or a pthread_cond_broadcast.
*/
status = _Thread_Executing->Wait.return_code;
46324: 2428 0034 movel %a0@(52),%d2 <== NOT EXECUTED
if ( status == EINTR )
status = 0;
46328: b082 cmpl %d2,%d0 <== NOT EXECUTED
4632a: 56c0 sne %d0 <== NOT EXECUTED
4632c: 49c0 extbl %d0 <== NOT EXECUTED
4632e: c480 andl %d0,%d2 <== NOT EXECUTED
46330: 6004 bras 46336 <_POSIX_Condition_variables_Wait_support+0xc6><== NOT EXECUTED
} else {
_Thread_Enable_dispatch();
46332: 4e95 jsr %a5@ <== NOT EXECUTED
status = ETIMEDOUT;
46334: 7474 moveq #116,%d2 <== NOT EXECUTED
/*
* When we get here the dispatch disable level is 0.
*/
mutex_status = pthread_mutex_lock( mutex );
46336: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46338: 4eb9 0004 658c jsr 4658c <pthread_mutex_lock> <== NOT EXECUTED
if ( mutex_status )
4633e: 588f addql #4,%sp <== NOT EXECUTED
46340: 4a80 tstl %d0 <== NOT EXECUTED
46342: 6702 beqs 46346 <_POSIX_Condition_variables_Wait_support+0xd6><== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
46344: 7416 moveq #22,%d2 <== NOT EXECUTED
}
46346: 2002 movel %d2,%d0 <== NOT EXECUTED
46348: 4cee 3c0c ffe4 moveml %fp@(-28),%d2-%d3/%a2-%a5 <== NOT EXECUTED
4634e: 4e5e unlk %fp <== NOT EXECUTED
...
000456c8 <_POSIX_Keys_Free_memory>:
#include <rtems/posix/key.h>
void _POSIX_Keys_Free_memory(
POSIX_Keys_Control *the_key
)
{
456c8: 4e56 fff4 linkw %fp,#-12 <== NOT EXECUTED
456cc: 48d7 0c04 moveml %d2/%a2-%a3,%sp@ <== NOT EXECUTED
#include <rtems/system.h>
#include <rtems/score/thread.h>
#include <rtems/score/wkspace.h>
#include <rtems/posix/key.h>
void _POSIX_Keys_Free_memory(
456d0: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
456d4: 7403 moveq #3,%d2 <== NOT EXECUTED
456d6: 45ea 0018 lea %a2@(24),%a2 <== NOT EXECUTED
{
uint32_t the_api;
for ( the_api = 1; the_api <= OBJECTS_APIS_LAST; the_api++ )
if ( the_key->Values[ the_api ] )
_Workspace_Free( the_key->Values[ the_api ] );
456da: 47f9 0004 95f0 lea 495f0 <_Workspace_Free>,%a3 <== NOT EXECUTED
)
{
uint32_t the_api;
for ( the_api = 1; the_api <= OBJECTS_APIS_LAST; the_api++ )
if ( the_key->Values[ the_api ] )
456e0: 201a movel %a2@+,%d0 <== NOT EXECUTED
456e2: 6706 beqs 456ea <_POSIX_Keys_Free_memory+0x22> <== NOT EXECUTED
_Workspace_Free( the_key->Values[ the_api ] );
456e4: 2f00 movel %d0,%sp@- <== NOT EXECUTED
456e6: 4e93 jsr %a3@ <== NOT EXECUTED
456e8: 588f addql #4,%sp <== NOT EXECUTED
456ea: 5382 subql #1,%d2 <== NOT EXECUTED
POSIX_Keys_Control *the_key
)
{
uint32_t the_api;
for ( the_api = 1; the_api <= OBJECTS_APIS_LAST; the_api++ )
456ec: 66f2 bnes 456e0 <_POSIX_Keys_Free_memory+0x18> <== NOT EXECUTED
if ( the_key->Values[ the_api ] )
_Workspace_Free( the_key->Values[ the_api ] );
}
456ee: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3 <== NOT EXECUTED
456f4: 4e5e unlk %fp <== NOT EXECUTED
0004c1fc <_POSIX_Keys_Run_destructors>:
4c1fc: 7218 moveq #24,%d1
*/
void _POSIX_Keys_Run_destructors(
Thread_Control *thread
)
{
4c1fe: 4e56 ffe8 linkw %fp,#-24
Objects_Maximum thread_index = _Objects_Get_index( thread->Object.id );
4c202: 206e 0008 moveal %fp@(8),%a0
*/
void _POSIX_Keys_Run_destructors(
Thread_Control *thread
)
{
4c206: 48d7 047c moveml %d2-%d6/%a2,%sp@
Objects_Maximum thread_index = _Objects_Get_index( thread->Object.id );
4c20a: 2428 0008 movel %a0@(8),%d2
4c20e: 2002 movel %d2,%d0
4c210: e2a8 lsrl %d1,%d0
4c212: 123c 0007 moveb #7,%d1
for ( index = 1 ; index <= max ; ++index ) {
POSIX_Keys_Control *key = (POSIX_Keys_Control *)
_POSIX_Keys_Information.local_table [ index ];
if ( key != NULL && key->destructor != NULL ) {
void *value = key->Values [ thread_api ][ thread_index ];
4c216: 0282 0000 ffff andil #65535,%d2
4c21c: c081 andl %d1,%d0
4c21e: e58a lsll #2,%d2
4c220: 2a00 movel %d0,%d5
4c222: 5a85 addql #5,%d5
Objects_Maximum index = 0;
Objects_Maximum max = _POSIX_Keys_Information.maximum;
done = true;
for ( index = 1 ; index <= max ; ++index ) {
4c224: 4286 clrl %d6
4c226: 7601 moveq #1,%d3
*/
while ( !done ) {
Objects_Maximum index = 0;
Objects_Maximum max = _POSIX_Keys_Information.maximum;
done = true;
4c228: 7201 moveq #1,%d1
for ( index = 1 ; index <= max ; ++index ) {
4c22a: 3c39 0005 de8a movew 5de8a <_POSIX_Keys_Information+0xe>,%d6
4c230: 602e bras 4c260 <_POSIX_Keys_Run_destructors+0x64>
POSIX_Keys_Control *key = (POSIX_Keys_Control *)
_POSIX_Keys_Information.local_table [ index ];
4c232: 2079 0005 de94 moveal 5de94 <_POSIX_Keys_Information+0x18>,%a0<== NOT EXECUTED
Objects_Maximum max = _POSIX_Keys_Information.maximum;
done = true;
for ( index = 1 ; index <= max ; ++index ) {
POSIX_Keys_Control *key = (POSIX_Keys_Control *)
4c238: 2070 4c00 moveal %a0@(00000000,%d4:l:4),%a0 <== NOT EXECUTED
_POSIX_Keys_Information.local_table [ index ];
if ( key != NULL && key->destructor != NULL ) {
4c23c: 4a88 tstl %a0 <== NOT EXECUTED
4c23e: 671e beqs 4c25e <_POSIX_Keys_Run_destructors+0x62><== NOT EXECUTED
4c240: 2268 0010 moveal %a0@(16),%a1 <== NOT EXECUTED
4c244: 4a89 tstl %a1 <== NOT EXECUTED
4c246: 6716 beqs 4c25e <_POSIX_Keys_Run_destructors+0x62><== NOT EXECUTED
void *value = key->Values [ thread_api ][ thread_index ];
4c248: 2470 5c00 moveal %a0@(00000000,%d5:l:4),%a2 <== NOT EXECUTED
4c24c: d5c2 addal %d2,%a2 <== NOT EXECUTED
4c24e: 2052 moveal %a2@,%a0 <== NOT EXECUTED
if ( value != NULL ) {
4c250: 4a88 tstl %a0 <== NOT EXECUTED
4c252: 670a beqs 4c25e <_POSIX_Keys_Run_destructors+0x62><== NOT EXECUTED
key->Values [ thread_api ][ thread_index ] = NULL;
4c254: 4292 clrl %a2@ <== NOT EXECUTED
(*key->destructor)( value );
4c256: 2f08 movel %a0,%sp@- <== NOT EXECUTED
4c258: 4e91 jsr %a1@ <== NOT EXECUTED
4c25a: 588f addql #4,%sp <== NOT EXECUTED
done = false;
4c25c: 4201 clrb %d1 <== NOT EXECUTED
Objects_Maximum index = 0;
Objects_Maximum max = _POSIX_Keys_Information.maximum;
done = true;
for ( index = 1 ; index <= max ; ++index ) {
4c25e: 5283 addql #1,%d3 <== NOT EXECUTED
4c260: 4284 clrl %d4
4c262: 3803 movew %d3,%d4
4c264: bc84 cmpl %d4,%d6
4c266: 64ca bccs 4c232 <_POSIX_Keys_Run_destructors+0x36><== NEVER TAKEN
* number of iterations. An infinite loop may happen if destructors set
* thread specific data. This can be considered dubious.
*
* Reference: 17.1.1.2 P1003.1c/Draft 10, p. 163, line 99.
*/
while ( !done ) {
4c268: 4a01 tstb %d1
4c26a: 67b8 beqs 4c224 <_POSIX_Keys_Run_destructors+0x28><== NEVER TAKEN
done = false;
}
}
}
}
}
4c26c: 4cee 047c ffe8 moveml %fp@(-24),%d2-%d6/%a2
4c272: 4e5e unlk %fp
...
0004fcf0 <_POSIX_Message_queue_Create_support>:
const char *name_arg,
int pshared,
struct mq_attr *attr_ptr,
POSIX_Message_queue_Control **message_queue
)
{
4fcf0: 4e56 ffe8 linkw %fp,#-24 <== NOT EXECUTED
4fcf4: 48d7 0c3c moveml %d2-%d5/%a2-%a3,%sp@ <== NOT EXECUTED
CORE_message_queue_Attributes *the_mq_attr;
struct mq_attr attr;
char *name;
size_t n;
n = strnlen( name_arg, NAME_MAX );
4fcf8: 4878 00ff pea ff <DBL_MANT_DIG+0xca> <== NOT EXECUTED
const char *name_arg,
int pshared,
struct mq_attr *attr_ptr,
POSIX_Message_queue_Control **message_queue
)
{
4fcfc: 266e 0008 moveal %fp@(8),%a3 <== NOT EXECUTED
4fd00: 246e 0010 moveal %fp@(16),%a2 <== NOT EXECUTED
CORE_message_queue_Attributes *the_mq_attr;
struct mq_attr attr;
char *name;
size_t n;
n = strnlen( name_arg, NAME_MAX );
4fd04: 2f0b movel %a3,%sp@- <== NOT EXECUTED
4fd06: 4eb9 0005 4a88 jsr 54a88 <strnlen> <== NOT EXECUTED
4fd0c: 2a00 movel %d0,%d5 <== NOT EXECUTED
4fd0e: 2039 0006 5d44 movel 65d44 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
4fd14: 5280 addql #1,%d0 <== NOT EXECUTED
4fd16: 23c0 0006 5d44 movel %d0,65d44 <_Thread_Dispatch_disable_level><== NOT EXECUTED
* There is no real basis for the default values. They will work
* but were not compared against any existing implementation for
* compatibility. See README.mqueue for an example program we
* think will print out the defaults. Report anything you find with it.
*/
if ( attr_ptr == NULL ) {
4fd1c: 508f addql #8,%sp <== NOT EXECUTED
4fd1e: 4a8a tstl %a2 <== NOT EXECUTED
4fd20: 6722 beqs 4fd44 <_POSIX_Message_queue_Create_support+0x54><== NOT EXECUTED
attr.mq_maxmsg = 10;
attr.mq_msgsize = 16;
} else {
if ( attr_ptr->mq_maxmsg <= 0 ){
4fd22: 262a 0004 movel %a2@(4),%d3 <== NOT EXECUTED
4fd26: 6f06 bles 4fd2e <_POSIX_Message_queue_Create_support+0x3e><== NOT EXECUTED
_Thread_Enable_dispatch();
rtems_set_errno_and_return_minus_one( EINVAL );
}
if ( attr_ptr->mq_msgsize <= 0 ){
4fd28: 282a 0008 movel %a2@(8),%d4 <== NOT EXECUTED
4fd2c: 6e1a bgts 4fd48 <_POSIX_Message_queue_Create_support+0x58><== NOT EXECUTED
_Thread_Enable_dispatch();
4fd2e: 4eb9 0004 d516 jsr 4d516 <_Thread_Enable_dispatch> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
4fd34: 7616 moveq #22,%d3 <== NOT EXECUTED
4fd36: 4eb9 0005 2dd8 jsr 52dd8 <__errno> <== NOT EXECUTED
4fd3c: 2040 moveal %d0,%a0 <== NOT EXECUTED
4fd3e: 2083 movel %d3,%a0@ <== NOT EXECUTED
4fd40: 6000 00d2 braw 4fe14 <_POSIX_Message_queue_Create_support+0x124><== NOT EXECUTED
* compatibility. See README.mqueue for an example program we
* think will print out the defaults. Report anything you find with it.
*/
if ( attr_ptr == NULL ) {
attr.mq_maxmsg = 10;
attr.mq_msgsize = 16;
4fd44: 7810 moveq #16,%d4 <== NOT EXECUTED
* but were not compared against any existing implementation for
* compatibility. See README.mqueue for an example program we
* think will print out the defaults. Report anything you find with it.
*/
if ( attr_ptr == NULL ) {
attr.mq_maxmsg = 10;
4fd46: 760a moveq #10,%d3 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE
POSIX_Message_queue_Control *_POSIX_Message_queue_Allocate( void )
{
return (POSIX_Message_queue_Control *)
_Objects_Allocate( &_POSIX_Message_queue_Information );
4fd48: 4879 0006 5ff2 pea 65ff2 <_POSIX_Message_queue_Information><== NOT EXECUTED
4fd4e: 4eb9 0004 c5d8 jsr 4c5d8 <_Objects_Allocate> <== NOT EXECUTED
attr = *attr_ptr;
}
the_mq = _POSIX_Message_queue_Allocate();
if ( !the_mq ) {
4fd54: 588f addql #4,%sp <== NOT EXECUTED
4fd56: 2440 moveal %d0,%a2 <== NOT EXECUTED
4fd58: 4a80 tstl %d0 <== NOT EXECUTED
4fd5a: 6616 bnes 4fd72 <_POSIX_Message_queue_Create_support+0x82><== NOT EXECUTED
_Thread_Enable_dispatch();
4fd5c: 4eb9 0004 d516 jsr 4d516 <_Thread_Enable_dispatch> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENFILE );
4fd62: 7417 moveq #23,%d2 <== NOT EXECUTED
4fd64: 4eb9 0005 2dd8 jsr 52dd8 <__errno> <== NOT EXECUTED
4fd6a: 2040 moveal %d0,%a0 <== NOT EXECUTED
4fd6c: 2082 movel %d2,%a0@ <== NOT EXECUTED
4fd6e: 6000 00a4 braw 4fe14 <_POSIX_Message_queue_Create_support+0x124><== NOT EXECUTED
/*
* Make a copy of the user's string for name just in case it was
* dynamically constructed.
*/
name = _Workspace_Allocate(n+1);
4fd72: 5285 addql #1,%d5 <== NOT EXECUTED
_Thread_Enable_dispatch();
rtems_set_errno_and_return_minus_one( ENFILE );
}
the_mq->process_shared = pshared;
the_mq->named = true;
4fd74: 7001 moveq #1,%d0 <== NOT EXECUTED
if ( !the_mq ) {
_Thread_Enable_dispatch();
rtems_set_errno_and_return_minus_one( ENFILE );
}
the_mq->process_shared = pshared;
4fd76: 256e 000c 0010 movel %fp@(12),%a2@(16) <== NOT EXECUTED
the_mq->named = true;
4fd7c: 1540 0014 moveb %d0,%a2@(20) <== NOT EXECUTED
the_mq->open_count = 1;
4fd80: 7001 moveq #1,%d0 <== NOT EXECUTED
4fd82: 2540 0016 movel %d0,%a2@(22) <== NOT EXECUTED
the_mq->linked = true;
4fd86: 1540 0015 moveb %d0,%a2@(21) <== NOT EXECUTED
/*
* Make a copy of the user's string for name just in case it was
* dynamically constructed.
*/
name = _Workspace_Allocate(n+1);
4fd8a: 2f05 movel %d5,%sp@- <== NOT EXECUTED
4fd8c: 4eb9 0004 e5f0 jsr 4e5f0 <_Workspace_Allocate> <== NOT EXECUTED
if (!name) {
4fd92: 588f addql #4,%sp <== NOT EXECUTED
/*
* Make a copy of the user's string for name just in case it was
* dynamically constructed.
*/
name = _Workspace_Allocate(n+1);
4fd94: 2400 movel %d0,%d2 <== NOT EXECUTED
if (!name) {
4fd96: 6624 bnes 4fdbc <_POSIX_Message_queue_Create_support+0xcc><== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _POSIX_Message_queue_Free (
POSIX_Message_queue_Control *the_mq
)
{
_Objects_Free( &_POSIX_Message_queue_Information, &the_mq->Object );
4fd98: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4fd9a: 4879 0006 5ff2 pea 65ff2 <_POSIX_Message_queue_Information><== NOT EXECUTED
4fda0: 4eb9 0004 c8cc jsr 4c8cc <_Objects_Free> <== NOT EXECUTED
_POSIX_Message_queue_Free( the_mq );
_Thread_Enable_dispatch();
4fda6: 4eb9 0004 d516 jsr 4d516 <_Thread_Enable_dispatch> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
4fdac: 4eb9 0005 2dd8 jsr 52dd8 <__errno> <== NOT EXECUTED
4fdb2: 508f addql #8,%sp <== NOT EXECUTED
4fdb4: 720c moveq #12,%d1 <== NOT EXECUTED
4fdb6: 2040 moveal %d0,%a0 <== NOT EXECUTED
4fdb8: 2081 movel %d1,%a0@ <== NOT EXECUTED
4fdba: 6058 bras 4fe14 <_POSIX_Message_queue_Create_support+0x124><== NOT EXECUTED
}
strncpy( name, name_arg, n+1 );
4fdbc: 2f05 movel %d5,%sp@- <== NOT EXECUTED
4fdbe: 2f0b movel %a3,%sp@- <== NOT EXECUTED
4fdc0: 47f9 0004 d516 lea 4d516 <_Thread_Enable_dispatch>,%a3 <== NOT EXECUTED
4fdc6: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4fdc8: 4eb9 0005 4a04 jsr 54a04 <strncpy> <== NOT EXECUTED
*
* Joel: Cite POSIX or OpenGroup on above statement so we can determine
* if it is a real requirement.
*/
the_mq_attr = &the_mq->Message_queue.Attributes;
the_mq_attr->discipline = CORE_MESSAGE_QUEUE_DISCIPLINES_FIFO;
4fdce: 42aa 005a clrl %a2@(90) <== NOT EXECUTED
if ( !_CORE_message_queue_Initialize(
4fdd2: 2f04 movel %d4,%sp@- <== NOT EXECUTED
4fdd4: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4fdd6: 486a 005a pea %a2@(90) <== NOT EXECUTED
4fdda: 486a 001a pea %a2@(26) <== NOT EXECUTED
4fdde: 4eb9 0005 0b88 jsr 50b88 <_CORE_message_queue_Initialize> <== NOT EXECUTED
4fde4: 4fef 001c lea %sp@(28),%sp <== NOT EXECUTED
4fde8: 4a00 tstb %d0 <== NOT EXECUTED
4fdea: 662c bnes 4fe18 <_POSIX_Message_queue_Create_support+0x128><== NOT EXECUTED
4fdec: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4fdee: 4879 0006 5ff2 pea 65ff2 <_POSIX_Message_queue_Information><== NOT EXECUTED
4fdf4: 4eb9 0004 c8cc jsr 4c8cc <_Objects_Free> <== NOT EXECUTED
attr.mq_maxmsg,
attr.mq_msgsize
) ) {
_POSIX_Message_queue_Free( the_mq );
_Workspace_Free(name);
4fdfa: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4fdfc: 4eb9 0004 e60c jsr 4e60c <_Workspace_Free> <== NOT EXECUTED
_Thread_Enable_dispatch();
4fe02: 4e93 jsr %a3@ <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSPC );
4fe04: 4eb9 0005 2dd8 jsr 52dd8 <__errno> <== NOT EXECUTED
4fe0a: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4fe0e: 2040 moveal %d0,%a0 <== NOT EXECUTED
4fe10: 701c moveq #28,%d0 <== NOT EXECUTED
4fe12: 2080 movel %d0,%a0@ <== NOT EXECUTED
4fe14: 70ff moveq #-1,%d0 <== NOT EXECUTED
4fe16: 601e bras 4fe36 <_POSIX_Message_queue_Create_support+0x146><== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
const char *name
)
{
_Objects_Set_local_object(
4fe18: 4280 clrl %d0 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
4fe1a: 2079 0006 600a moveal 6600a <_POSIX_Message_queue_Information+0x18>,%a0<== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
const char *name
)
{
_Objects_Set_local_object(
4fe20: 302a 000a movew %a2@(10),%d0 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
4fe24: 218a 0c00 movel %a2,%a0@(00000000,%d0:l:4) <== NOT EXECUTED
&_POSIX_Message_queue_Information,
&the_mq->Object,
name
);
*message_queue = the_mq;
4fe28: 206e 0014 moveal %fp@(20),%a0 <== NOT EXECUTED
the_object
);
#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
/* ASSERT: information->is_string */
the_object->name.name_p = name;
4fe2c: 2542 000c movel %d2,%a2@(12) <== NOT EXECUTED
4fe30: 208a movel %a2,%a0@ <== NOT EXECUTED
_Thread_Enable_dispatch();
4fe32: 4e93 jsr %a3@ <== NOT EXECUTED
return 0;
4fe34: 4280 clrl %d0 <== NOT EXECUTED
}
4fe36: 4cee 0c3c ffe8 moveml %fp@(-24),%d2-%d5/%a2-%a3 <== NOT EXECUTED
4fe3c: 4e5e unlk %fp <== NOT EXECUTED
00049968 <_POSIX_Message_queue_Delete>:
*/
void _POSIX_Message_queue_Delete(
POSIX_Message_queue_Control *the_mq
)
{
49968: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4996c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4996e: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
if ( !the_mq->linked && !the_mq->open_count ) {
49972: 4a2a 0015 tstb %a2@(21) <== NOT EXECUTED
49976: 6636 bnes 499ae <_POSIX_Message_queue_Delete+0x46><== NOT EXECUTED
49978: 4aaa 0016 tstl %a2@(22) <== NOT EXECUTED
4997c: 6630 bnes 499ae <_POSIX_Message_queue_Delete+0x46><== NOT EXECUTED
);
_Workspace_Free( (void *)the_object->name.name_p );
}
#endif
_Objects_Close( &_POSIX_Message_queue_Information, the_object );
4997e: 2f0a movel %a2,%sp@- <== NOT EXECUTED
49980: 4879 0006 5ff2 pea 65ff2 <_POSIX_Message_queue_Information><== NOT EXECUTED
49986: 4eb9 0004 c654 jsr 4c654 <_Objects_Close> <== NOT EXECUTED
_CORE_message_queue_Close(
4998c: 4878 0005 pea 5 <COMPARE> <== NOT EXECUTED
49990: 42a7 clrl %sp@- <== NOT EXECUTED
49992: 486a 001a pea %a2@(26) <== NOT EXECUTED
49996: 4eb9 0004 baac jsr 4baac <_CORE_message_queue_Close> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _POSIX_Message_queue_Free (
POSIX_Message_queue_Control *the_mq
)
{
_Objects_Free( &_POSIX_Message_queue_Information, &the_mq->Object );
4999c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4999e: 4879 0006 5ff2 pea 65ff2 <_POSIX_Message_queue_Information><== NOT EXECUTED
499a4: 4eb9 0004 c8cc jsr 4c8cc <_Objects_Free> <== NOT EXECUTED
499aa: 4fef 001c lea %sp@(28),%sp <== NOT EXECUTED
);
_POSIX_Message_queue_Free( the_mq );
}
}
499ae: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
499b2: 4e5e unlk %fp <== NOT EXECUTED
...
0004fe40 <_POSIX_Message_queue_Name_to_id>:
*/
int _POSIX_Message_queue_Name_to_id(
const char *name,
Objects_Id *id
)
{
4fe40: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
4fe44: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4fe46: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
Objects_Name_or_id_lookup_errors status;
Objects_Id the_id;
if ( !name )
4fe4a: 4a8a tstl %a2 <== NOT EXECUTED
4fe4c: 673e beqs 4fe8c <_POSIX_Message_queue_Name_to_id+0x4c><== NOT EXECUTED
return EINVAL;
if ( !name[0] )
4fe4e: 4a12 tstb %a2@ <== NOT EXECUTED
4fe50: 673a beqs 4fe8c <_POSIX_Message_queue_Name_to_id+0x4c><== NOT EXECUTED
return EINVAL;
if ( strnlen( name, NAME_MAX ) >= NAME_MAX )
4fe52: 4878 00ff pea ff <DBL_MANT_DIG+0xca> <== NOT EXECUTED
4fe56: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4fe58: 4eb9 0005 4a88 jsr 54a88 <strnlen> <== NOT EXECUTED
4fe5e: 508f addql #8,%sp <== NOT EXECUTED
4fe60: 0c80 0000 00fe cmpil #254,%d0 <== NOT EXECUTED
4fe66: 6228 bhis 4fe90 <_POSIX_Message_queue_Name_to_id+0x50><== NOT EXECUTED
return ENAMETOOLONG;
status = _Objects_Name_to_id_string(
4fe68: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4fe6c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4fe6e: 4879 0006 5ff2 pea 65ff2 <_POSIX_Message_queue_Information><== NOT EXECUTED
4fe74: 4eb9 0005 117c jsr 5117c <_Objects_Name_to_id_string> <== NOT EXECUTED
&_POSIX_Message_queue_Information,
name,
&the_id
);
*id = the_id;
4fe7a: 206e 000c moveal %fp@(12),%a0 <== NOT EXECUTED
if ( status == OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL )
4fe7e: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
status = _Objects_Name_to_id_string(
&_POSIX_Message_queue_Information,
name,
&the_id
);
*id = the_id;
4fe82: 20ae fffc movel %fp@(-4),%a0@ <== NOT EXECUTED
if ( status == OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL )
4fe86: 4a80 tstl %d0 <== NOT EXECUTED
4fe88: 660a bnes 4fe94 <_POSIX_Message_queue_Name_to_id+0x54><== NOT EXECUTED
4fe8a: 600a bras 4fe96 <_POSIX_Message_queue_Name_to_id+0x56><== NOT EXECUTED
if ( !name )
return EINVAL;
if ( !name[0] )
return EINVAL;
4fe8c: 7016 moveq #22,%d0 <== NOT EXECUTED
4fe8e: 6006 bras 4fe96 <_POSIX_Message_queue_Name_to_id+0x56><== NOT EXECUTED
if ( strnlen( name, NAME_MAX ) >= NAME_MAX )
return ENAMETOOLONG;
4fe90: 705b moveq #91,%d0 <== NOT EXECUTED
4fe92: 6002 bras 4fe96 <_POSIX_Message_queue_Name_to_id+0x56><== NOT EXECUTED
*id = the_id;
if ( status == OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL )
return 0;
return ENOENT;
4fe94: 7002 moveq #2,%d0 <== NOT EXECUTED
}
4fe96: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
4fe9a: 4e5e unlk %fp <== NOT EXECUTED
...
00049a30 <_POSIX_Message_queue_Notify_handler>:
*/
void _POSIX_Message_queue_Notify_handler(
void *user_data
)
{
49a30: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
49a34: 2f0a movel %a2,%sp@- <== NOT EXECUTED
49a36: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
49a3a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
POSIX_Message_queue_Control *the_mq;
the_mq = user_data;
kill( getpid(), the_mq->notification.sigev_signo );
49a3c: 242a 0092 movel %a2@(146),%d2 <== NOT EXECUTED
49a40: 4eb9 0004 f6c8 jsr 4f6c8 <getpid> <== NOT EXECUTED
49a46: 2f02 movel %d2,%sp@- <== NOT EXECUTED
49a48: 2f00 movel %d0,%sp@- <== NOT EXECUTED
49a4a: 4eb9 0004 fcd8 jsr 4fcd8 <kill> <== NOT EXECUTED
_CORE_message_queue_Set_notify( &the_mq->Message_queue, NULL, NULL );
}
49a50: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
CORE_message_queue_Notify_Handler the_handler,
void *the_argument
)
{
the_message_queue->notify_handler = the_handler;
the_message_queue->notify_argument = the_argument;
49a54: 508f addql #8,%sp <== NOT EXECUTED
CORE_message_queue_Control *the_message_queue,
CORE_message_queue_Notify_Handler the_handler,
void *the_argument
)
{
the_message_queue->notify_handler = the_handler;
49a56: 42aa 007a clrl %a2@(122) <== NOT EXECUTED
the_message_queue->notify_argument = the_argument;
49a5a: 42aa 007e clrl %a2@(126) <== NOT EXECUTED
49a5e: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
49a62: 4e5e unlk %fp <== NOT EXECUTED
00049ca4 <_POSIX_Message_queue_Receive_support>:
size_t msg_len,
unsigned int *msg_prio,
bool wait,
Watchdog_Interval timeout
)
{
49ca4: 4e56 ffe4 linkw %fp,#-28 <== NOT EXECUTED
49ca8: 48d7 043c moveml %d2-%d5/%a2,%sp@ <== NOT EXECUTED
RTEMS_INLINE_ROUTINE POSIX_Message_queue_Control_fd *_POSIX_Message_queue_Get_fd (
mqd_t id,
Objects_Locations *location
)
{
return (POSIX_Message_queue_Control_fd *) _Objects_Get(
49cac: 486e fffc pea %fp@(-4) <== NOT EXECUTED
49cb0: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
49cb4: 2f02 movel %d2,%sp@- <== NOT EXECUTED
49cb6: 4879 0006 6160 pea 66160 <_POSIX_Message_queue_Information_fds><== NOT EXECUTED
49cbc: 162e 001b moveb %fp@(27),%d3 <== NOT EXECUTED
49cc0: 4eb9 0004 ca30 jsr 4ca30 <_Objects_Get> <== NOT EXECUTED
Objects_Locations location;
size_t length_out;
bool do_wait;
the_mq_fd = _POSIX_Message_queue_Get_fd( mqdes, &location );
switch ( location ) {
49cc6: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
49cca: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
49cce: 6600 00c0 bnew 49d90 <_POSIX_Message_queue_Receive_support+0xec><== NOT EXECUTED
case OBJECTS_LOCAL:
if ( (the_mq_fd->oflag & O_ACCMODE) == O_WRONLY ) {
49cd2: 2040 moveal %d0,%a0 <== NOT EXECUTED
49cd4: 7803 moveq #3,%d4 <== NOT EXECUTED
49cd6: 7a01 moveq #1,%d5 <== NOT EXECUTED
49cd8: 2228 0014 movel %a0@(20),%d1 <== NOT EXECUTED
49cdc: c881 andl %d1,%d4 <== NOT EXECUTED
49cde: ba84 cmpl %d4,%d5 <== NOT EXECUTED
49ce0: 660a bnes 49cec <_POSIX_Message_queue_Receive_support+0x48><== NOT EXECUTED
_Thread_Enable_dispatch();
49ce2: 4eb9 0004 d516 jsr 4d516 <_Thread_Enable_dispatch> <== NOT EXECUTED
49ce8: 6000 00a6 braw 49d90 <_POSIX_Message_queue_Receive_support+0xec><== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EBADF );
}
the_mq = the_mq_fd->Queue;
49cec: 2240 moveal %d0,%a1 <== NOT EXECUTED
49cee: 2069 0010 moveal %a1@(16),%a0 <== NOT EXECUTED
if ( msg_len < the_mq->Message_queue.maximum_message_size ) {
49cf2: 2028 0066 movel %a0@(102),%d0 <== NOT EXECUTED
49cf6: b0ae 0010 cmpl %fp@(16),%d0 <== NOT EXECUTED
49cfa: 6316 blss 49d12 <_POSIX_Message_queue_Receive_support+0x6e><== NOT EXECUTED
_Thread_Enable_dispatch();
49cfc: 4eb9 0004 d516 jsr 4d516 <_Thread_Enable_dispatch> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EMSGSIZE );
49d02: 4eb9 0005 2dd8 jsr 52dd8 <__errno> <== NOT EXECUTED
49d08: 727a moveq #122,%d1 <== NOT EXECUTED
49d0a: 2040 moveal %d0,%a0 <== NOT EXECUTED
49d0c: 2081 movel %d1,%a0@ <== NOT EXECUTED
49d0e: 6000 008c braw 49d9c <_POSIX_Message_queue_Receive_support+0xf8><== NOT EXECUTED
/*
* Now if something goes wrong, we return a "length" of -1
* to indicate an error.
*/
length_out = -1;
49d12: 70ff moveq #-1,%d0 <== NOT EXECUTED
49d14: 2d40 fff8 movel %d0,%fp@(-8) <== NOT EXECUTED
/*
* A timed receive with a bad time will do a poll regardless.
*/
if ( wait )
49d18: 4a03 tstb %d3 <== NOT EXECUTED
49d1a: 670a beqs 49d26 <_POSIX_Message_queue_Receive_support+0x82><== NOT EXECUTED
do_wait = (the_mq_fd->oflag & O_NONBLOCK) ? false : true;
49d1c: 0801 000e btst #14,%d1 <== NOT EXECUTED
49d20: 57c0 seq %d0 <== NOT EXECUTED
49d22: 4480 negl %d0 <== NOT EXECUTED
49d24: 6002 bras 49d28 <_POSIX_Message_queue_Receive_support+0x84><== NOT EXECUTED
length_out = -1;
/*
* A timed receive with a bad time will do a poll regardless.
*/
if ( wait )
49d26: 4200 clrb %d0 <== NOT EXECUTED
do_wait = wait;
/*
* Now perform the actual message receive
*/
_CORE_message_queue_Seize(
49d28: 2f2e 001c movel %fp@(28),%sp@- <== NOT EXECUTED
49d2c: 0280 0000 00ff andil #255,%d0 <== NOT EXECUTED
49d32: 2f00 movel %d0,%sp@- <== NOT EXECUTED
49d34: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
49d38: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
49d3c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
49d3e: 4868 001a pea %a0@(26) <== NOT EXECUTED
49d42: 4eb9 0004 bb48 jsr 4bb48 <_CORE_message_queue_Seize> <== NOT EXECUTED
&length_out,
do_wait,
timeout
);
_Thread_Enable_dispatch();
49d48: 4eb9 0004 d516 jsr 4d516 <_Thread_Enable_dispatch> <== NOT EXECUTED
*msg_prio =
_POSIX_Message_queue_Priority_from_core(_Thread_Executing->Wait.count);
49d4e: 2079 0006 61d2 moveal 661d2 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE unsigned int _POSIX_Message_queue_Priority_from_core(
CORE_message_queue_Submit_types priority
)
{
/* absolute value without a library dependency */
return ((priority >= 0) ? priority : -priority);
49d54: 2028 0024 movel %a0@(36),%d0 <== NOT EXECUTED
49d58: 6c02 bges 49d5c <_POSIX_Message_queue_Receive_support+0xb8><== NOT EXECUTED
49d5a: 4480 negl %d0 <== NOT EXECUTED
do_wait,
timeout
);
_Thread_Enable_dispatch();
*msg_prio =
49d5c: 226e 0014 moveal %fp@(20),%a1 <== NOT EXECUTED
_POSIX_Message_queue_Priority_from_core(_Thread_Executing->Wait.count);
if ( !_Thread_Executing->Wait.return_code )
49d60: 4fef 0018 lea %sp@(24),%sp <== NOT EXECUTED
do_wait,
timeout
);
_Thread_Enable_dispatch();
*msg_prio =
49d64: 2280 movel %d0,%a1@ <== NOT EXECUTED
_POSIX_Message_queue_Priority_from_core(_Thread_Executing->Wait.count);
if ( !_Thread_Executing->Wait.return_code )
49d66: 4aa8 0034 tstl %a0@(52) <== NOT EXECUTED
49d6a: 6606 bnes 49d72 <_POSIX_Message_queue_Receive_support+0xce><== NOT EXECUTED
return length_out;
49d6c: 202e fff8 movel %fp@(-8),%d0 <== NOT EXECUTED
49d70: 602c bras 49d9e <_POSIX_Message_queue_Receive_support+0xfa><== NOT EXECUTED
rtems_set_errno_and_return_minus_one(
49d72: 4eb9 0005 2dd8 jsr 52dd8 <__errno> <== NOT EXECUTED
49d78: 2079 0006 61d2 moveal 661d2 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
49d7e: 2440 moveal %d0,%a2 <== NOT EXECUTED
49d80: 2f28 0034 movel %a0@(52),%sp@- <== NOT EXECUTED
49d84: 4eb9 0004 9fb8 jsr 49fb8 <_POSIX_Message_queue_Translate_core_message_queue_return_code><== NOT EXECUTED
49d8a: 588f addql #4,%sp <== NOT EXECUTED
49d8c: 2480 movel %d0,%a2@ <== NOT EXECUTED
49d8e: 600c bras 49d9c <_POSIX_Message_queue_Receive_support+0xf8><== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
rtems_set_errno_and_return_minus_one( EBADF );
49d90: 4eb9 0005 2dd8 jsr 52dd8 <__errno> <== NOT EXECUTED
49d96: 2040 moveal %d0,%a0 <== NOT EXECUTED
49d98: 7009 moveq #9,%d0 <== NOT EXECUTED
49d9a: 2080 movel %d0,%a0@ <== NOT EXECUTED
49d9c: 70ff moveq #-1,%d0 <== NOT EXECUTED
}
49d9e: 4cee 043c ffe4 moveml %fp@(-28),%d2-%d5/%a2 <== NOT EXECUTED
49da4: 4e5e unlk %fp <== NOT EXECUTED
00049dcc <_POSIX_Message_queue_Send_support>:
/*
* Validate the priority.
* XXX - Do not validate msg_prio is not less than 0.
*/
if ( msg_prio > MQ_PRIO_MAX )
49dcc: 7020 moveq #32,%d0 <== NOT EXECUTED
size_t msg_len,
uint32_t msg_prio,
bool wait,
Watchdog_Interval timeout
)
{
49dce: 4e56 ffe8 linkw %fp,#-24 <== NOT EXECUTED
49dd2: 48d7 043c moveml %d2-%d5/%a2,%sp@ <== NOT EXECUTED
49dd6: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
49dda: 262e 0014 movel %fp@(20),%d3 <== NOT EXECUTED
49dde: 182e 001b moveb %fp@(27),%d4 <== NOT EXECUTED
/*
* Validate the priority.
* XXX - Do not validate msg_prio is not less than 0.
*/
if ( msg_prio > MQ_PRIO_MAX )
49de2: b083 cmpl %d3,%d0 <== NOT EXECUTED
49de4: 6410 bccs 49df6 <_POSIX_Message_queue_Send_support+0x2a><== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
49de6: 4eb9 0005 2dd8 jsr 52dd8 <__errno> <== NOT EXECUTED
49dec: 7216 moveq #22,%d1 <== NOT EXECUTED
49dee: 2040 moveal %d0,%a0 <== NOT EXECUTED
49df0: 2081 movel %d1,%a0@ <== NOT EXECUTED
49df2: 6000 00b2 braw 49ea6 <_POSIX_Message_queue_Send_support+0xda><== NOT EXECUTED
RTEMS_INLINE_ROUTINE POSIX_Message_queue_Control_fd *_POSIX_Message_queue_Get_fd (
mqd_t id,
Objects_Locations *location
)
{
return (POSIX_Message_queue_Control_fd *) _Objects_Get(
49df6: 486e fffc pea %fp@(-4) <== NOT EXECUTED
49dfa: 2f02 movel %d2,%sp@- <== NOT EXECUTED
49dfc: 4879 0006 6160 pea 66160 <_POSIX_Message_queue_Information_fds><== NOT EXECUTED
49e02: 4eb9 0004 ca30 jsr 4ca30 <_Objects_Get> <== NOT EXECUTED
the_mq_fd = _POSIX_Message_queue_Get_fd( mqdes, &location );
switch ( location ) {
49e08: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
49e0c: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
49e10: 6600 0088 bnew 49e9a <_POSIX_Message_queue_Send_support+0xce><== NOT EXECUTED
case OBJECTS_LOCAL:
if ( (the_mq_fd->oflag & O_ACCMODE) == O_RDONLY ) {
49e14: 2240 moveal %d0,%a1 <== NOT EXECUTED
49e16: 7a03 moveq #3,%d5 <== NOT EXECUTED
49e18: 2229 0014 movel %a1@(20),%d1 <== NOT EXECUTED
49e1c: ca81 andl %d1,%d5 <== NOT EXECUTED
49e1e: 6608 bnes 49e28 <_POSIX_Message_queue_Send_support+0x5c><== NOT EXECUTED
_Thread_Enable_dispatch();
49e20: 4eb9 0004 d516 jsr 4d516 <_Thread_Enable_dispatch> <== NOT EXECUTED
49e26: 6072 bras 49e9a <_POSIX_Message_queue_Send_support+0xce><== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EBADF );
}
the_mq = the_mq_fd->Queue;
49e28: 2240 moveal %d0,%a1 <== NOT EXECUTED
49e2a: 2069 0010 moveal %a1@(16),%a0 <== NOT EXECUTED
/*
* A timed receive with a bad time will do a poll regardless.
*/
if ( wait )
49e2e: 4a04 tstb %d4 <== NOT EXECUTED
49e30: 670a beqs 49e3c <_POSIX_Message_queue_Send_support+0x70><== NOT EXECUTED
do_wait = (the_mq_fd->oflag & O_NONBLOCK) ? false : true;
49e32: 0801 000e btst #14,%d1 <== NOT EXECUTED
49e36: 57c0 seq %d0 <== NOT EXECUTED
49e38: 4480 negl %d0 <== NOT EXECUTED
49e3a: 6002 bras 49e3e <_POSIX_Message_queue_Send_support+0x72><== NOT EXECUTED
the_mq = the_mq_fd->Queue;
/*
* A timed receive with a bad time will do a poll regardless.
*/
if ( wait )
49e3c: 4200 clrb %d0 <== NOT EXECUTED
do_wait = wait;
/*
* Now perform the actual message receive
*/
msg_status = _CORE_message_queue_Submit(
49e3e: 2f2e 001c movel %fp@(28),%sp@- <== NOT EXECUTED
49e42: 4483 negl %d3 <== NOT EXECUTED
49e44: 0280 0000 00ff andil #255,%d0 <== NOT EXECUTED
49e4a: 2f00 movel %d0,%sp@- <== NOT EXECUTED
49e4c: 2f03 movel %d3,%sp@- <== NOT EXECUTED
49e4e: 42a7 clrl %sp@- <== NOT EXECUTED
49e50: 2f02 movel %d2,%sp@- <== NOT EXECUTED
49e52: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
49e56: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
49e5a: 4868 001a pea %a0@(26) <== NOT EXECUTED
49e5e: 4eb9 0004 bc84 jsr 4bc84 <_CORE_message_queue_Submit> <== NOT EXECUTED
_POSIX_Message_queue_Priority_to_core( msg_prio ),
do_wait,
timeout /* no timeout */
);
_Thread_Enable_dispatch();
49e64: 4fef 0020 lea %sp@(32),%sp <== NOT EXECUTED
do_wait = wait;
/*
* Now perform the actual message receive
*/
msg_status = _CORE_message_queue_Submit(
49e68: 2400 movel %d0,%d2 <== NOT EXECUTED
_POSIX_Message_queue_Priority_to_core( msg_prio ),
do_wait,
timeout /* no timeout */
);
_Thread_Enable_dispatch();
49e6a: 4eb9 0004 d516 jsr 4d516 <_Thread_Enable_dispatch> <== NOT EXECUTED
* after it wakes up. The returned status is correct for
* non-blocking operations but if we blocked, then we need
* to look at the status in our TCB.
*/
if ( msg_status == CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_WAIT )
49e70: 7007 moveq #7,%d0 <== NOT EXECUTED
49e72: b082 cmpl %d2,%d0 <== NOT EXECUTED
49e74: 660a bnes 49e80 <_POSIX_Message_queue_Send_support+0xb4><== NOT EXECUTED
msg_status = _Thread_Executing->Wait.return_code;
49e76: 2079 0006 61d2 moveal 661d2 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
49e7c: 2428 0034 movel %a0@(52),%d2 <== NOT EXECUTED
if ( !msg_status )
49e80: 4a82 tstl %d2 <== NOT EXECUTED
49e82: 6726 beqs 49eaa <_POSIX_Message_queue_Send_support+0xde><== NOT EXECUTED
return msg_status;
rtems_set_errno_and_return_minus_one(
49e84: 4eb9 0005 2dd8 jsr 52dd8 <__errno> <== NOT EXECUTED
49e8a: 2440 moveal %d0,%a2 <== NOT EXECUTED
49e8c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
49e8e: 4eb9 0004 9fb8 jsr 49fb8 <_POSIX_Message_queue_Translate_core_message_queue_return_code><== NOT EXECUTED
49e94: 588f addql #4,%sp <== NOT EXECUTED
49e96: 2480 movel %d0,%a2@ <== NOT EXECUTED
49e98: 600c bras 49ea6 <_POSIX_Message_queue_Send_support+0xda><== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
rtems_set_errno_and_return_minus_one( EBADF );
49e9a: 4eb9 0005 2dd8 jsr 52dd8 <__errno> <== NOT EXECUTED
49ea0: 2040 moveal %d0,%a0 <== NOT EXECUTED
49ea2: 7009 moveq #9,%d0 <== NOT EXECUTED
49ea4: 2080 movel %d0,%a0@ <== NOT EXECUTED
49ea6: 70ff moveq #-1,%d0 <== NOT EXECUTED
49ea8: 6002 bras 49eac <_POSIX_Message_queue_Send_support+0xe0><== NOT EXECUTED
if ( msg_status == CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_WAIT )
msg_status = _Thread_Executing->Wait.return_code;
if ( !msg_status )
return msg_status;
49eaa: 4280 clrl %d0 <== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
rtems_set_errno_and_return_minus_one( EBADF );
}
49eac: 4cee 043c ffe8 moveml %fp@(-24),%d2-%d5/%a2 <== NOT EXECUTED
49eb2: 4e5e unlk %fp <== NOT EXECUTED
...
00049fb8 <_POSIX_Message_queue_Translate_core_message_queue_return_code>:
#if defined(RTEMS_DEBUG)
if ( the_message_queue_status > CORE_MESSAGE_QUEUE_STATUS_LAST )
return EINVAL;
#endif
return _POSIX_Message_queue_Return_codes[the_message_queue_status];
}
49fb8: 41f9 0006 2ef2 lea 62ef2 <_POSIX_Message_queue_Return_codes>,%a0<== NOT EXECUTED
int _POSIX_Message_queue_Translate_core_message_queue_return_code(
uint32_t the_message_queue_status
)
{
49fbe: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( the_message_queue_status > CORE_MESSAGE_QUEUE_STATUS_LAST )
return EINVAL;
#endif
return _POSIX_Message_queue_Return_codes[the_message_queue_status];
}
49fc2: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
49fc6: 4e5e unlk %fp <== NOT EXECUTED
49fc8: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0 <== NOT EXECUTED
...
00047050 <_POSIX_Mutex_Get>:
POSIX_Mutex_Control *_POSIX_Mutex_Get (
pthread_mutex_t *mutex,
Objects_Locations *location
)
{
47050: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
47054: 2f0b movel %a3,%sp@- <== NOT EXECUTED
47056: 266e 000c moveal %fp@(12),%a3 <== NOT EXECUTED
4705a: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4705c: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
___POSIX_Mutex_Get_support_error_check( mutex, location );
47060: 4a8a tstl %a2 <== NOT EXECUTED
47062: 6716 beqs 4707a <_POSIX_Mutex_Get+0x2a> <== NOT EXECUTED
___POSIX_Mutex_Get_support_auto_initialization( mutex, location );
47064: 70ff moveq #-1,%d0 <== NOT EXECUTED
47066: b092 cmpl %a2@,%d0 <== NOT EXECUTED
47068: 6618 bnes 47082 <_POSIX_Mutex_Get+0x32> <== NOT EXECUTED
4706a: 42a7 clrl %sp@- <== NOT EXECUTED
4706c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4706e: 4eb9 0004 7140 jsr 47140 <pthread_mutex_init> <== NOT EXECUTED
47074: 508f addql #8,%sp <== NOT EXECUTED
47076: 4a80 tstl %d0 <== NOT EXECUTED
47078: 6708 beqs 47082 <_POSIX_Mutex_Get+0x32> <== NOT EXECUTED
4707a: 7001 moveq #1,%d0 <== NOT EXECUTED
4707c: 2680 movel %d0,%a3@ <== NOT EXECUTED
4707e: 4280 clrl %d0 <== NOT EXECUTED
47080: 6014 bras 47096 <_POSIX_Mutex_Get+0x46> <== NOT EXECUTED
return (POSIX_Mutex_Control *)
_Objects_Get( &_POSIX_Mutex_Information, (Objects_Id) *mutex, location );
47082: 2f0b movel %a3,%sp@- <== NOT EXECUTED
47084: 2f12 movel %a2@,%sp@- <== NOT EXECUTED
47086: 4879 0006 2960 pea 62960 <_POSIX_Mutex_Information> <== NOT EXECUTED
4708c: 4eb9 0004 9950 jsr 49950 <_Objects_Get> <== NOT EXECUTED
{
___POSIX_Mutex_Get_support_error_check( mutex, location );
___POSIX_Mutex_Get_support_auto_initialization( mutex, location );
return (POSIX_Mutex_Control *)
47092: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
_Objects_Get( &_POSIX_Mutex_Information, (Objects_Id) *mutex, location );
}
47096: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
4709a: 266e fffc moveal %fp@(-4),%a3 <== NOT EXECUTED
4709e: 4e5e unlk %fp <== NOT EXECUTED
000470a2 <_POSIX_Mutex_Get_interrupt_disable>:
POSIX_Mutex_Control *_POSIX_Mutex_Get_interrupt_disable (
pthread_mutex_t *mutex,
Objects_Locations *location,
ISR_Level *level
)
{
470a2: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
470a6: 2f0b movel %a3,%sp@- <== NOT EXECUTED
470a8: 266e 000c moveal %fp@(12),%a3 <== NOT EXECUTED
470ac: 2f0a movel %a2,%sp@- <== NOT EXECUTED
470ae: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
___POSIX_Mutex_Get_support_error_check( mutex, location );
470b2: 4a8a tstl %a2 <== NOT EXECUTED
470b4: 6716 beqs 470cc <_POSIX_Mutex_Get_interrupt_disable+0x2a><== NOT EXECUTED
___POSIX_Mutex_Get_support_auto_initialization( mutex, location );
470b6: 70ff moveq #-1,%d0 <== NOT EXECUTED
470b8: b092 cmpl %a2@,%d0 <== NOT EXECUTED
470ba: 6618 bnes 470d4 <_POSIX_Mutex_Get_interrupt_disable+0x32><== NOT EXECUTED
470bc: 42a7 clrl %sp@- <== NOT EXECUTED
470be: 2f0a movel %a2,%sp@- <== NOT EXECUTED
470c0: 4eb9 0004 7140 jsr 47140 <pthread_mutex_init> <== NOT EXECUTED
470c6: 508f addql #8,%sp <== NOT EXECUTED
470c8: 4a80 tstl %d0 <== NOT EXECUTED
470ca: 6708 beqs 470d4 <_POSIX_Mutex_Get_interrupt_disable+0x32><== NOT EXECUTED
470cc: 7201 moveq #1,%d1 <== NOT EXECUTED
470ce: 4280 clrl %d0 <== NOT EXECUTED
470d0: 2681 movel %d1,%a3@ <== NOT EXECUTED
470d2: 6018 bras 470ec <_POSIX_Mutex_Get_interrupt_disable+0x4a><== NOT EXECUTED
return (POSIX_Mutex_Control *) _Objects_Get_isr_disable(
470d4: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
470d8: 2f0b movel %a3,%sp@- <== NOT EXECUTED
470da: 2f12 movel %a2@,%sp@- <== NOT EXECUTED
470dc: 4879 0006 2960 pea 62960 <_POSIX_Mutex_Information> <== NOT EXECUTED
470e2: 4eb9 0004 98f8 jsr 498f8 <_Objects_Get_isr_disable> <== NOT EXECUTED
470e8: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
&_POSIX_Mutex_Information,
(Objects_Id) *mutex,
location,
level
);
}
470ec: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
470f0: 266e fffc moveal %fp@(-4),%a3 <== NOT EXECUTED
470f4: 4e5e unlk %fp <== NOT EXECUTED
00047270 <_POSIX_Mutex_Lock_support>:
int _POSIX_Mutex_Lock_support(
pthread_mutex_t *mutex,
bool blocking,
Watchdog_Interval timeout
)
{
47270: 4e56 fff8 linkw %fp,#-8 <== NOT EXECUTED
47274: 2f02 movel %d2,%sp@- <== NOT EXECUTED
register POSIX_Mutex_Control *the_mutex;
Objects_Locations location;
ISR_Level level;
the_mutex = _POSIX_Mutex_Get_interrupt_disable( mutex, &location, &level );
47276: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
4727a: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4727e: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
int _POSIX_Mutex_Lock_support(
pthread_mutex_t *mutex,
bool blocking,
Watchdog_Interval timeout
)
{
47282: 142e 000f moveb %fp@(15),%d2 <== NOT EXECUTED
register POSIX_Mutex_Control *the_mutex;
Objects_Locations location;
ISR_Level level;
the_mutex = _POSIX_Mutex_Get_interrupt_disable( mutex, &location, &level );
47286: 4eb9 0004 70a2 jsr 470a2 <_POSIX_Mutex_Get_interrupt_disable><== NOT EXECUTED
switch ( location ) {
4728c: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
47290: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
47294: 6636 bnes 472cc <_POSIX_Mutex_Lock_support+0x5c> <== NOT EXECUTED
case OBJECTS_LOCAL:
_CORE_mutex_Seize(
47296: 2f2e fff8 movel %fp@(-8),%sp@- <== NOT EXECUTED
4729a: 2040 moveal %d0,%a0 <== NOT EXECUTED
4729c: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
472a0: 0282 0000 00ff andil #255,%d2 <== NOT EXECUTED
472a6: 2f02 movel %d2,%sp@- <== NOT EXECUTED
472a8: 2f28 0008 movel %a0@(8),%sp@- <== NOT EXECUTED
472ac: 4868 0014 pea %a0@(20) <== NOT EXECUTED
472b0: 4eb9 0004 8d80 jsr 48d80 <_CORE_mutex_Seize> <== NOT EXECUTED
blocking,
timeout,
level
);
return _POSIX_Mutex_Translate_core_mutex_return_code(
(CORE_mutex_Status) _Thread_Executing->Wait.return_code
472b6: 2079 0006 2b06 moveal 62b06 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
the_mutex->Object.id,
blocking,
timeout,
level
);
return _POSIX_Mutex_Translate_core_mutex_return_code(
472bc: 2f28 0034 movel %a0@(52),%sp@- <== NOT EXECUTED
472c0: 4eb9 0004 73d0 jsr 473d0 <_POSIX_Mutex_Translate_core_mutex_return_code><== NOT EXECUTED
472c6: 4fef 0018 lea %sp@(24),%sp <== NOT EXECUTED
472ca: 6002 bras 472ce <_POSIX_Mutex_Lock_support+0x5e> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
472cc: 7016 moveq #22,%d0 <== NOT EXECUTED
}
472ce: 242e fff4 movel %fp@(-12),%d2 <== NOT EXECUTED
472d2: 4e5e unlk %fp <== NOT EXECUTED
...
000473d0 <_POSIX_Mutex_Translate_core_mutex_return_code>:
#if defined(RTEMS_DEBUG)
if ( the_mutex_status > CORE_MUTEX_STATUS_LAST )
return EINVAL;
#endif
return _POSIX_Mutex_Return_codes[the_mutex_status];
}
473d0: 41f9 0005 fd18 lea 5fd18 <_POSIX_Mutex_Return_codes>,%a0 <== NOT EXECUTED
int _POSIX_Mutex_Translate_core_mutex_return_code(
CORE_mutex_Status the_mutex_status
)
{
473d6: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( the_mutex_status > CORE_MUTEX_STATUS_LAST )
return EINVAL;
#endif
return _POSIX_Mutex_Return_codes[the_mutex_status];
}
473da: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
473de: 4e5e unlk %fp <== NOT EXECUTED
473e0: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0 <== NOT EXECUTED
...
0004b26c <_POSIX_Priority_Is_valid>:
#include <rtems/posix/priority.h>
bool _POSIX_Priority_Is_valid(
int priority
)
{
4b26c: 4e56 0000 linkw %fp,#0
4b270: 202e 0008 movel %fp@(8),%d0
return ((priority >= POSIX_SCHEDULER_MINIMUM_PRIORITY) &&
4b274: 6f12 bles 4b288 <_POSIX_Priority_Is_valid+0x1c> <== NEVER TAKEN
(priority <= POSIX_SCHEDULER_MAXIMUM_PRIORITY));
4b276: 4281 clrl %d1
4b278: 1239 0005 d2a6 moveb 5d2a6 <rtems_maximum_priority>,%d1
#endif
#include <rtems/system.h>
#include <rtems/posix/priority.h>
bool _POSIX_Priority_Is_valid(
4b27e: b081 cmpl %d1,%d0
4b280: 5dc0 slt %d0
4b282: 49c0 extbl %d0
4b284: 4480 negl %d0
4b286: 6002 bras 4b28a <_POSIX_Priority_Is_valid+0x1e>
int priority
)
{
return ((priority >= POSIX_SCHEDULER_MINIMUM_PRIORITY) &&
4b288: 4280 clrl %d0
(priority <= POSIX_SCHEDULER_MAXIMUM_PRIORITY));
}
4b28a: 4e5e unlk %fp
...
00046750 <_POSIX_RWLock_Translate_core_RWLock_return_code>:
#if defined(RTEMS_DEBUG)
if ( the_rwlock_status > CORE_RWLOCK_STATUS_LAST )
return EINVAL;
#endif
return _POSIX_RWLock_Return_codes[the_rwlock_status];
}
46750: 41f9 0005 df28 lea 5df28 <_POSIX_RWLock_Return_codes>,%a0 <== NOT EXECUTED
int _POSIX_RWLock_Translate_core_RWLock_return_code(
CORE_RWLock_Status the_rwlock_status
)
{
46756: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( the_rwlock_status > CORE_RWLOCK_STATUS_LAST )
return EINVAL;
#endif
return _POSIX_RWLock_Return_codes[the_rwlock_status];
}
4675a: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
4675e: 4e5e unlk %fp <== NOT EXECUTED
46760: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0 <== NOT EXECUTED
...
0004de78 <_POSIX_Semaphore_Create_support>:
const char *name,
int pshared,
unsigned int value,
POSIX_Semaphore_Control **the_sem
)
{
4de78: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4de7c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4de7e: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4de80: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
POSIX_Semaphore_Control *the_semaphore;
CORE_semaphore_Attributes *the_sem_attr;
char *name_p = (char *)name;
/* Sharing semaphores among processes is not currently supported */
if (pshared != 0)
4de84: 4aae 000c tstl %fp@(12) <== NOT EXECUTED
4de88: 670e beqs 4de98 <_POSIX_Semaphore_Create_support+0x20><== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
4de8a: 4eb9 0005 07c0 jsr 507c0 <__errno> <== NOT EXECUTED
4de90: 7458 moveq #88,%d2 <== NOT EXECUTED
4de92: 2040 moveal %d0,%a0 <== NOT EXECUTED
4de94: 2082 movel %d2,%a0@ <== NOT EXECUTED
4de96: 6026 bras 4debe <_POSIX_Semaphore_Create_support+0x46><== NOT EXECUTED
if ( name ) {
4de98: 4a82 tstl %d2 <== NOT EXECUTED
4de9a: 6728 beqs 4dec4 <_POSIX_Semaphore_Create_support+0x4c><== NOT EXECUTED
if ( strnlen( name, NAME_MAX ) >= NAME_MAX )
4de9c: 4878 00ff pea ff <DBL_MANT_DIG+0xca> <== NOT EXECUTED
4dea0: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4dea2: 4eb9 0005 1e18 jsr 51e18 <strnlen> <== NOT EXECUTED
4dea8: 508f addql #8,%sp <== NOT EXECUTED
4deaa: 0c80 0000 00fe cmpil #254,%d0 <== NOT EXECUTED
4deb0: 6312 blss 4dec4 <_POSIX_Semaphore_Create_support+0x4c><== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENAMETOOLONG );
4deb2: 4eb9 0005 07c0 jsr 507c0 <__errno> <== NOT EXECUTED
4deb8: 725b moveq #91,%d1 <== NOT EXECUTED
4deba: 2040 moveal %d0,%a0 <== NOT EXECUTED
4debc: 2081 movel %d1,%a0@ <== NOT EXECUTED
4debe: 70ff moveq #-1,%d0 <== NOT EXECUTED
4dec0: 6000 009e braw 4df60 <_POSIX_Semaphore_Create_support+0xe8><== NOT EXECUTED
4dec4: 2039 0006 2a74 movel 62a74 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
4deca: 5280 addql #1,%d0 <== NOT EXECUTED
4decc: 23c0 0006 2a74 movel %d0,62a74 <_Thread_Dispatch_disable_level><== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE POSIX_Semaphore_Control *_POSIX_Semaphore_Allocate( void )
{
return (POSIX_Semaphore_Control *)
_Objects_Allocate( &_POSIX_Semaphore_Information );
4ded2: 4879 0006 2cae pea 62cae <_POSIX_Semaphore_Information> <== NOT EXECUTED
4ded8: 4eb9 0004 9eb0 jsr 49eb0 <_Objects_Allocate> <== NOT EXECUTED
_Thread_Disable_dispatch();
the_semaphore = _POSIX_Semaphore_Allocate();
if ( !the_semaphore ) {
4dede: 588f addql #4,%sp <== NOT EXECUTED
4dee0: 2440 moveal %d0,%a2 <== NOT EXECUTED
4dee2: 4a80 tstl %d0 <== NOT EXECUTED
4dee4: 6614 bnes 4defa <_POSIX_Semaphore_Create_support+0x82><== NOT EXECUTED
_Thread_Enable_dispatch();
4dee6: 4eb9 0004 adee jsr 4adee <_Thread_Enable_dispatch> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSPC );
4deec: 4eb9 0005 07c0 jsr 507c0 <__errno> <== NOT EXECUTED
4def2: 2040 moveal %d0,%a0 <== NOT EXECUTED
4def4: 701c moveq #28,%d0 <== NOT EXECUTED
4def6: 2080 movel %d0,%a0@ <== NOT EXECUTED
4def8: 60c4 bras 4debe <_POSIX_Semaphore_Create_support+0x46><== NOT EXECUTED
}
the_semaphore->process_shared = pshared;
4defa: 42aa 0010 clrl %a2@(16) <== NOT EXECUTED
if ( name ) {
4defe: 4a82 tstl %d2 <== NOT EXECUTED
4df00: 670e beqs 4df10 <_POSIX_Semaphore_Create_support+0x98><== NOT EXECUTED
the_semaphore->named = true;
4df02: 7001 moveq #1,%d0 <== NOT EXECUTED
4df04: 1540 0014 moveb %d0,%a2@(20) <== NOT EXECUTED
the_semaphore->open_count = 1;
4df08: 7001 moveq #1,%d0 <== NOT EXECUTED
4df0a: 2540 0016 movel %d0,%a2@(22) <== NOT EXECUTED
4df0e: 600a bras 4df1a <_POSIX_Semaphore_Create_support+0xa2><== NOT EXECUTED
the_semaphore->linked = true;
} else {
the_semaphore->named = false;
the_semaphore->open_count = 0;
4df10: 42aa 0016 clrl %a2@(22) <== NOT EXECUTED
if ( name ) {
the_semaphore->named = true;
the_semaphore->open_count = 1;
the_semaphore->linked = true;
} else {
the_semaphore->named = false;
4df14: 4200 clrb %d0 <== NOT EXECUTED
4df16: 1540 0014 moveb %d0,%a2@(20) <== NOT EXECUTED
* blocking tasks on this semaphore should be. It could somehow
* be derived from the current scheduling policy. One
* thing is certain, no matter what we decide, it won't be
* the same as all other POSIX implementations. :)
*/
the_sem_attr->discipline = CORE_SEMAPHORE_DISCIPLINES_FIFO;
4df1a: 42aa 005e clrl %a2@(94) <== NOT EXECUTED
the_semaphore->open_count = 1;
the_semaphore->linked = true;
} else {
the_semaphore->named = false;
the_semaphore->open_count = 0;
the_semaphore->linked = false;
4df1e: 1540 0015 moveb %d0,%a2@(21) <== NOT EXECUTED
the_sem_attr->discipline = CORE_SEMAPHORE_DISCIPLINES_FIFO;
/*
* This effectively disables limit checking.
*/
the_sem_attr->maximum_count = 0xFFFFFFFF;
4df22: 70ff moveq #-1,%d0 <== NOT EXECUTED
4df24: 2540 005a movel %d0,%a2@(90) <== NOT EXECUTED
_CORE_semaphore_Initialize( &the_semaphore->Semaphore, the_sem_attr, value );
4df28: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
4df2c: 486a 005a pea %a2@(90) <== NOT EXECUTED
4df30: 486a 001a pea %a2@(26) <== NOT EXECUTED
4df34: 4eb9 0004 9934 jsr 49934 <_CORE_semaphore_Initialize> <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
4df3a: 2079 0006 2cc6 moveal 62cc6 <_POSIX_Semaphore_Information+0x18>,%a0<== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
const char *name
)
{
_Objects_Set_local_object(
4df40: 4280 clrl %d0 <== NOT EXECUTED
4df42: 302a 000a movew %a2@(10),%d0 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
4df46: 218a 0c00 movel %a2,%a0@(00000000,%d0:l:4) <== NOT EXECUTED
&_POSIX_Semaphore_Information,
&the_semaphore->Object,
name_p
);
*the_sem = the_semaphore;
4df4a: 206e 0014 moveal %fp@(20),%a0 <== NOT EXECUTED
the_object
);
#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
/* ASSERT: information->is_string */
the_object->name.name_p = name;
4df4e: 2542 000c movel %d2,%a2@(12) <== NOT EXECUTED
4df52: 208a movel %a2,%a0@ <== NOT EXECUTED
_Thread_Enable_dispatch();
4df54: 4eb9 0004 adee jsr 4adee <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
4df5a: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4df5e: 4280 clrl %d0 <== NOT EXECUTED
}
4df60: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
4df64: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
4df68: 4e5e unlk %fp <== NOT EXECUTED
0004df6c <_POSIX_Semaphore_Delete>:
*/
void _POSIX_Semaphore_Delete(
POSIX_Semaphore_Control *the_semaphore
)
{
4df6c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4df70: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4df72: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
if ( !the_semaphore->linked && !the_semaphore->open_count ) {
4df76: 4a2a 0015 tstb %a2@(21) <== NOT EXECUTED
4df7a: 6636 bnes 4dfb2 <_POSIX_Semaphore_Delete+0x46> <== NOT EXECUTED
4df7c: 4aaa 0016 tstl %a2@(22) <== NOT EXECUTED
4df80: 6630 bnes 4dfb2 <_POSIX_Semaphore_Delete+0x46> <== NOT EXECUTED
_Objects_Close( &_POSIX_Semaphore_Information, &the_semaphore->Object );
4df82: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4df84: 4879 0006 2cae pea 62cae <_POSIX_Semaphore_Information> <== NOT EXECUTED
4df8a: 4eb9 0004 9f2c jsr 49f2c <_Objects_Close> <== NOT EXECUTED
_CORE_semaphore_Flush(
4df90: 4878 ffff pea ffffffff <LESS> <== NOT EXECUTED
4df94: 42a7 clrl %sp@- <== NOT EXECUTED
4df96: 486a 001a pea %a2@(26) <== NOT EXECUTED
4df9a: 4eb9 0004 9928 jsr 49928 <_CORE_semaphore_Flush> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _POSIX_Semaphore_Free (
POSIX_Semaphore_Control *the_semaphore
)
{
_Objects_Free( &_POSIX_Semaphore_Information, &the_semaphore->Object );
4dfa0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4dfa2: 4879 0006 2cae pea 62cae <_POSIX_Semaphore_Information> <== NOT EXECUTED
4dfa8: 4eb9 0004 a1a4 jsr 4a1a4 <_Objects_Free> <== NOT EXECUTED
4dfae: 4fef 001c lea %sp@(28),%sp <== NOT EXECUTED
-1
);
_POSIX_Semaphore_Free( the_semaphore );
}
}
4dfb2: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
4dfb6: 4e5e unlk %fp <== NOT EXECUTED
...
0004dfbc <_POSIX_Semaphore_Name_to_id>:
int _POSIX_Semaphore_Name_to_id(
const char *name,
sem_t *id
)
{
4dfbc: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
4dfc0: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
Objects_Name_or_id_lookup_errors status;
Objects_Id the_id;
if ( !name )
4dfc4: 4a88 tstl %a0 <== NOT EXECUTED
4dfc6: 6728 beqs 4dff0 <_POSIX_Semaphore_Name_to_id+0x34><== NOT EXECUTED
return EINVAL;
if ( !name[0] )
4dfc8: 4a10 tstb %a0@ <== NOT EXECUTED
4dfca: 6724 beqs 4dff0 <_POSIX_Semaphore_Name_to_id+0x34><== NOT EXECUTED
return EINVAL;
status = _Objects_Name_to_id_string(
4dfcc: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4dfd0: 2f08 movel %a0,%sp@- <== NOT EXECUTED
4dfd2: 4879 0006 2cae pea 62cae <_POSIX_Semaphore_Information> <== NOT EXECUTED
4dfd8: 4eb9 0004 eb30 jsr 4eb30 <_Objects_Name_to_id_string> <== NOT EXECUTED
&_POSIX_Semaphore_Information,
name,
&the_id
);
*id = the_id;
4dfde: 206e 000c moveal %fp@(12),%a0 <== NOT EXECUTED
if ( status == OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL )
4dfe2: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
status = _Objects_Name_to_id_string(
&_POSIX_Semaphore_Information,
name,
&the_id
);
*id = the_id;
4dfe6: 20ae fffc movel %fp@(-4),%a0@ <== NOT EXECUTED
if ( status == OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL )
4dfea: 4a80 tstl %d0 <== NOT EXECUTED
4dfec: 6606 bnes 4dff4 <_POSIX_Semaphore_Name_to_id+0x38><== NOT EXECUTED
4dfee: 6006 bras 4dff6 <_POSIX_Semaphore_Name_to_id+0x3a><== NOT EXECUTED
if ( !name )
return EINVAL;
if ( !name[0] )
return EINVAL;
4dff0: 7016 moveq #22,%d0 <== NOT EXECUTED
4dff2: 6002 bras 4dff6 <_POSIX_Semaphore_Name_to_id+0x3a><== NOT EXECUTED
*id = the_id;
if ( status == OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL )
return 0;
return ENOENT;
4dff4: 7002 moveq #2,%d0 <== NOT EXECUTED
}
4dff6: 4e5e unlk %fp <== NOT EXECUTED
...
00050328 <_POSIX_Semaphore_Translate_core_semaphore_return_code>:
#if defined(RTEMS_DEBUG)
if ( the_semaphore_status > CORE_SEMAPHORE_STATUS_LAST )
return EINVAL;
#endif
return _POSIX_Semaphore_Return_codes[the_semaphore_status];
}
50328: 41f9 0006 059a lea 6059a <_POSIX_Semaphore_Return_codes>,%a0<== NOT EXECUTED
int _POSIX_Semaphore_Translate_core_semaphore_return_code(
CORE_semaphore_Status the_semaphore_status
)
{
5032e: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( the_semaphore_status > CORE_SEMAPHORE_STATUS_LAST )
return EINVAL;
#endif
return _POSIX_Semaphore_Return_codes[the_semaphore_status];
}
50332: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
50336: 4e5e unlk %fp <== NOT EXECUTED
50338: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0 <== NOT EXECUTED
...
0004e030 <_POSIX_Semaphore_Wait_support>:
int _POSIX_Semaphore_Wait_support(
sem_t *sem,
bool blocking,
Watchdog_Interval timeout
)
{
4e030: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
sem_t *id,
Objects_Locations *location
)
{
return (POSIX_Semaphore_Control *)
_Objects_Get( &_POSIX_Semaphore_Information, (Objects_Id)*id, location );
4e034: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4e038: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4e03a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4e03c: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4e040: 2f10 movel %a0@,%sp@- <== NOT EXECUTED
4e042: 4879 0006 2cae pea 62cae <_POSIX_Semaphore_Information> <== NOT EXECUTED
4e048: 142e 000f moveb %fp@(15),%d2 <== NOT EXECUTED
4e04c: 4eb9 0004 a308 jsr 4a308 <_Objects_Get> <== NOT EXECUTED
POSIX_Semaphore_Control *the_semaphore;
Objects_Locations location;
the_semaphore = _POSIX_Semaphore_Get( sem, &location );
switch ( location ) {
4e052: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4e056: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4e05a: 6650 bnes 4e0ac <_POSIX_Semaphore_Wait_support+0x7c><== NOT EXECUTED
case OBJECTS_LOCAL:
_CORE_semaphore_Seize(
4e05c: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
4e060: 2040 moveal %d0,%a0 <== NOT EXECUTED
4e062: 0282 0000 00ff andil #255,%d2 <== NOT EXECUTED
4e068: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4e06a: 2f28 0008 movel %a0@(8),%sp@- <== NOT EXECUTED
4e06e: 4868 001a pea %a0@(26) <== NOT EXECUTED
4e072: 4eb9 0004 e684 jsr 4e684 <_CORE_semaphore_Seize> <== NOT EXECUTED
&the_semaphore->Semaphore,
the_semaphore->Object.id,
blocking,
timeout
);
_Thread_Enable_dispatch();
4e078: 4eb9 0004 adee jsr 4adee <_Thread_Enable_dispatch> <== NOT EXECUTED
if ( !_Thread_Executing->Wait.return_code )
4e07e: 2079 0006 2f02 moveal 62f02 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
4e084: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
4e088: 4aa8 0034 tstl %a0@(52) <== NOT EXECUTED
4e08c: 672e beqs 4e0bc <_POSIX_Semaphore_Wait_support+0x8c><== NOT EXECUTED
return 0;
rtems_set_errno_and_return_minus_one(
4e08e: 4eb9 0005 07c0 jsr 507c0 <__errno> <== NOT EXECUTED
4e094: 2079 0006 2f02 moveal 62f02 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
4e09a: 2440 moveal %d0,%a2 <== NOT EXECUTED
4e09c: 2f28 0034 movel %a0@(52),%sp@- <== NOT EXECUTED
4e0a0: 4eb9 0005 0328 jsr 50328 <_POSIX_Semaphore_Translate_core_semaphore_return_code><== NOT EXECUTED
4e0a6: 588f addql #4,%sp <== NOT EXECUTED
4e0a8: 2480 movel %d0,%a2@ <== NOT EXECUTED
4e0aa: 600c bras 4e0b8 <_POSIX_Semaphore_Wait_support+0x88><== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
rtems_set_errno_and_return_minus_one( EINVAL );
4e0ac: 4eb9 0005 07c0 jsr 507c0 <__errno> <== NOT EXECUTED
4e0b2: 2040 moveal %d0,%a0 <== NOT EXECUTED
4e0b4: 7016 moveq #22,%d0 <== NOT EXECUTED
4e0b6: 2080 movel %d0,%a0@ <== NOT EXECUTED
4e0b8: 70ff moveq #-1,%d0 <== NOT EXECUTED
4e0ba: 6002 bras 4e0be <_POSIX_Semaphore_Wait_support+0x8e><== NOT EXECUTED
timeout
);
_Thread_Enable_dispatch();
if ( !_Thread_Executing->Wait.return_code )
return 0;
4e0bc: 4280 clrl %d0 <== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
rtems_set_errno_and_return_minus_one( EINVAL );
}
4e0be: 242e fff4 movel %fp@(-12),%d2 <== NOT EXECUTED
4e0c2: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
4e0c6: 4e5e unlk %fp <== NOT EXECUTED
...
00045844 <_POSIX_Spinlock_Translate_core_spinlock_return_code>:
#if defined(RTEMS_DEBUG)
if ( the_spinlock_status > CORE_SPINLOCK_STATUS_LAST )
return EINVAL;
#endif
return _POSIX_Spinlock_Return_codes[the_spinlock_status];
}
45844: 41f9 0005 c2a8 lea 5c2a8 <_POSIX_Spinlock_Return_codes>,%a0<== NOT EXECUTED
int _POSIX_Spinlock_Translate_core_spinlock_return_code(
CORE_spinlock_Status the_spinlock_status
)
{
4584a: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( the_spinlock_status > CORE_SPINLOCK_STATUS_LAST )
return EINVAL;
#endif
return _POSIX_Spinlock_Return_codes[the_spinlock_status];
}
4584e: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
45852: 4e5e unlk %fp <== NOT EXECUTED
45854: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0 <== NOT EXECUTED
...
0004a040 <_POSIX_Thread_Evaluate_cancellation_and_enable_dispatch>:
#include <rtems/posix/pthread.h>
void _POSIX_Thread_Evaluate_cancellation_and_enable_dispatch(
Thread_Control *the_thread
)
{
4a040: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4a044: 226e 0008 moveal %fp@(8),%a1 <== NOT EXECUTED
POSIX_API_Control *thread_support;
thread_support = the_thread->API_Extensions[ THREAD_API_POSIX ];
4a048: 2069 0102 moveal %a1@(258),%a0 <== NOT EXECUTED
if ( thread_support->cancelability_state == PTHREAD_CANCEL_ENABLE &&
4a04c: 4aa8 00d8 tstl %a0@(216) <== NOT EXECUTED
4a050: 662e bnes 4a080 <_POSIX_Thread_Evaluate_cancellation_and_enable_dispatch+0x40><== NOT EXECUTED
4a052: 7001 moveq #1,%d0 <== NOT EXECUTED
4a054: b0a8 00dc cmpl %a0@(220),%d0 <== NOT EXECUTED
4a058: 6626 bnes 4a080 <_POSIX_Thread_Evaluate_cancellation_and_enable_dispatch+0x40><== NOT EXECUTED
thread_support->cancelability_type == PTHREAD_CANCEL_ASYNCHRONOUS &&
4a05a: 4aa8 00e0 tstl %a0@(224) <== NOT EXECUTED
4a05e: 6720 beqs 4a080 <_POSIX_Thread_Evaluate_cancellation_and_enable_dispatch+0x40><== NOT EXECUTED
thread_support->cancelation_requested ) {
_Thread_Unnest_dispatch();
_POSIX_Thread_Exit( the_thread, PTHREAD_CANCELED );
4a060: 4878 ffff pea ffffffff <LESS> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void )
{
RTEMS_COMPILER_MEMORY_BARRIER();
_Thread_Dispatch_disable_level -= 1;
4a064: 2039 0005 e17c movel 5e17c <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
4a06a: 5380 subql #1,%d0 <== NOT EXECUTED
4a06c: 2f09 movel %a1,%sp@- <== NOT EXECUTED
4a06e: 23c0 0005 e17c movel %d0,5e17c <_Thread_Dispatch_disable_level><== NOT EXECUTED
4a074: 4eb9 0004 a818 jsr 4a818 <_POSIX_Thread_Exit> <== NOT EXECUTED
4a07a: 508f addql #8,%sp <== NOT EXECUTED
} else
_Thread_Enable_dispatch();
}
4a07c: 4e5e unlk %fp <== NOT EXECUTED
4a07e: 4e75 rts <== NOT EXECUTED
4a080: 4e5e unlk %fp <== NOT EXECUTED
thread_support->cancelability_type == PTHREAD_CANCEL_ASYNCHRONOUS &&
thread_support->cancelation_requested ) {
_Thread_Unnest_dispatch();
_POSIX_Thread_Exit( the_thread, PTHREAD_CANCELED );
} else
_Thread_Enable_dispatch();
4a082: 4ef9 0004 7aca jmp 47aca <_Thread_Enable_dispatch> <== NOT EXECUTED
0004c448 <_POSIX_Thread_Exit>:
void _POSIX_Thread_Exit(
Thread_Control *the_thread,
void *value_ptr
)
{
4c448: 4e56 fff4 linkw %fp,#-12 <== NOT EXECUTED
4c44c: 48d7 040c moveml %d2-%d3/%a2,%sp@ <== NOT EXECUTED
4c450: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
Objects_Information *the_information;
the_information = _Objects_Get_information_id( the_thread->Object.id );
4c454: 2f2a 0008 movel %a2@(8),%sp@- <== NOT EXECUTED
void _POSIX_Thread_Exit(
Thread_Control *the_thread,
void *value_ptr
)
{
4c458: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
Objects_Information *the_information;
the_information = _Objects_Get_information_id( the_thread->Object.id );
4c45c: 4eb9 0004 6bec jsr 46bec <_Objects_Get_information_id> <== NOT EXECUTED
* are ready to be switched out. Otherwise, an ISR could
* occur and preempt us out while we still hold the
* allocator mutex.
*/
_RTEMS_Lock_allocator();
4c462: 2f39 0005 dbc8 movel 5dbc8 <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
void *value_ptr
)
{
Objects_Information *the_information;
the_information = _Objects_Get_information_id( the_thread->Object.id );
4c468: 2600 movel %d0,%d3 <== NOT EXECUTED
* are ready to be switched out. Otherwise, an ISR could
* occur and preempt us out while we still hold the
* allocator mutex.
*/
_RTEMS_Lock_allocator();
4c46a: 4eb9 0004 5f24 jsr 45f24 <_API_Mutex_Lock> <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
4c470: 2039 0005 db08 movel 5db08 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
4c476: 5280 addql #1,%d0 <== NOT EXECUTED
4c478: 23c0 0005 db08 movel %d0,5db08 <_Thread_Dispatch_disable_level><== NOT EXECUTED
_Thread_Disable_dispatch();
the_thread->Wait.return_argument = value_ptr;
4c47e: 2542 0028 movel %d2,%a2@(40) <== NOT EXECUTED
_Thread_Close( the_information, the_thread );
4c482: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4c484: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4c486: 4eb9 0004 7498 jsr 47498 <_Thread_Close> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _POSIX_Threads_Free (
Thread_Control *the_pthread
)
{
_Objects_Free( &_POSIX_Threads_Information, &the_pthread->Object );
4c48c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4c48e: 4879 0005 dcce pea 5dcce <_POSIX_Threads_Information> <== NOT EXECUTED
4c494: 4eb9 0004 6b68 jsr 46b68 <_Objects_Free> <== NOT EXECUTED
_POSIX_Threads_Free( the_thread );
_RTEMS_Unlock_allocator();
4c49a: 2f39 0005 dbc8 movel 5dbc8 <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
4c4a0: 4eb9 0004 5f84 jsr 45f84 <_API_Mutex_Unlock> <== NOT EXECUTED
_Thread_Enable_dispatch();
4c4a6: 4fef 001c lea %sp@(28),%sp <== NOT EXECUTED
}
4c4aa: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2 <== NOT EXECUTED
4c4b0: 4e5e unlk %fp <== NOT EXECUTED
_Thread_Close( the_information, the_thread );
_POSIX_Threads_Free( the_thread );
_RTEMS_Unlock_allocator();
_Thread_Enable_dispatch();
4c4b2: 4ef9 0004 77a6 jmp 477a6 <_Thread_Enable_dispatch> <== NOT EXECUTED
0004b290 <_POSIX_Thread_Translate_sched_param>:
int policy,
struct sched_param *param,
Thread_CPU_budget_algorithms *budget_algorithm,
Thread_CPU_budget_algorithm_callout *budget_callout
)
{
4b290: 4e56 ffec linkw %fp,#-20
4b294: 48d7 3c04 moveml %d2/%a2-%a5,%sp@
4b298: 246e 000c moveal %fp@(12),%a2
if ( !_POSIX_Priority_Is_valid( param->sched_priority ) )
4b29c: 2f12 movel %a2@,%sp@-
int policy,
struct sched_param *param,
Thread_CPU_budget_algorithms *budget_algorithm,
Thread_CPU_budget_algorithm_callout *budget_callout
)
{
4b29e: 242e 0008 movel %fp@(8),%d2
4b2a2: 266e 0010 moveal %fp@(16),%a3
4b2a6: 286e 0014 moveal %fp@(20),%a4
if ( !_POSIX_Priority_Is_valid( param->sched_priority ) )
4b2aa: 4eb9 0004 b26c jsr 4b26c <_POSIX_Priority_Is_valid>
4b2b0: 588f addql #4,%sp
4b2b2: 4a00 tstb %d0
4b2b4: 6778 beqs 4b32e <_POSIX_Thread_Translate_sched_param+0x9e><== NEVER TAKEN
return EINVAL;
*budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_NONE;
4b2b6: 4293 clrl %a3@
*budget_callout = NULL;
4b2b8: 4294 clrl %a4@
if ( policy == SCHED_OTHER ) {
4b2ba: 4a82 tstl %d2
4b2bc: 6606 bnes 4b2c4 <_POSIX_Thread_Translate_sched_param+0x34><== ALWAYS TAKEN
*budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE;
4b2be: 7201 moveq #1,%d1 <== NOT EXECUTED
4b2c0: 2681 movel %d1,%a3@ <== NOT EXECUTED
4b2c2: 6066 bras 4b32a <_POSIX_Thread_Translate_sched_param+0x9a><== NOT EXECUTED
return 0;
}
if ( policy == SCHED_FIFO ) {
4b2c4: 7001 moveq #1,%d0
4b2c6: b082 cmpl %d2,%d0
4b2c8: 6760 beqs 4b32a <_POSIX_Thread_Translate_sched_param+0x9a><== ALWAYS TAKEN
*budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_NONE;
return 0;
}
if ( policy == SCHED_RR ) {
4b2ca: 103c 0002 moveb #2,%d0
4b2ce: b082 cmpl %d2,%d0 <== NOT EXECUTED
4b2d0: 6606 bnes 4b2d8 <_POSIX_Thread_Translate_sched_param+0x48><== NOT EXECUTED
*budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE;
4b2d2: 2680 movel %d0,%a3@ <== NOT EXECUTED
return 0;
4b2d4: 4200 clrb %d0 <== NOT EXECUTED
4b2d6: 6058 bras 4b330 <_POSIX_Thread_Translate_sched_param+0xa0><== NOT EXECUTED
}
if ( policy == SCHED_SPORADIC ) {
4b2d8: 7004 moveq #4,%d0 <== NOT EXECUTED
4b2da: b082 cmpl %d2,%d0 <== NOT EXECUTED
4b2dc: 6650 bnes 4b32e <_POSIX_Thread_Translate_sched_param+0x9e><== NOT EXECUTED
if ( (param->sched_ss_repl_period.tv_sec == 0) &&
4b2de: 4aaa 0008 tstl %a2@(8) <== NOT EXECUTED
4b2e2: 6606 bnes 4b2ea <_POSIX_Thread_Translate_sched_param+0x5a><== NOT EXECUTED
4b2e4: 4aaa 000c tstl %a2@(12) <== NOT EXECUTED
4b2e8: 6744 beqs 4b32e <_POSIX_Thread_Translate_sched_param+0x9e><== NOT EXECUTED
(param->sched_ss_repl_period.tv_nsec == 0) )
return EINVAL;
if ( (param->sched_ss_init_budget.tv_sec == 0) &&
4b2ea: 4aaa 0010 tstl %a2@(16) <== NOT EXECUTED
4b2ee: 6606 bnes 4b2f6 <_POSIX_Thread_Translate_sched_param+0x66><== NOT EXECUTED
4b2f0: 4aaa 0014 tstl %a2@(20) <== NOT EXECUTED
4b2f4: 6738 beqs 4b32e <_POSIX_Thread_Translate_sched_param+0x9e><== NOT EXECUTED
(param->sched_ss_init_budget.tv_nsec == 0) )
return EINVAL;
if ( _Timespec_To_ticks( ¶m->sched_ss_repl_period ) <
4b2f6: 486a 0008 pea %a2@(8) <== NOT EXECUTED
4b2fa: 4bf9 0004 9198 lea 49198 <_Timespec_To_ticks>,%a5 <== NOT EXECUTED
4b300: 4e95 jsr %a5@ <== NOT EXECUTED
_Timespec_To_ticks( ¶m->sched_ss_init_budget ) )
4b302: 486a 0010 pea %a2@(16) <== NOT EXECUTED
if ( (param->sched_ss_init_budget.tv_sec == 0) &&
(param->sched_ss_init_budget.tv_nsec == 0) )
return EINVAL;
if ( _Timespec_To_ticks( ¶m->sched_ss_repl_period ) <
4b306: 2400 movel %d0,%d2 <== NOT EXECUTED
_Timespec_To_ticks( ¶m->sched_ss_init_budget ) )
4b308: 4e95 jsr %a5@ <== NOT EXECUTED
if ( (param->sched_ss_init_budget.tv_sec == 0) &&
(param->sched_ss_init_budget.tv_nsec == 0) )
return EINVAL;
if ( _Timespec_To_ticks( ¶m->sched_ss_repl_period ) <
4b30a: 508f addql #8,%sp <== NOT EXECUTED
4b30c: b082 cmpl %d2,%d0 <== NOT EXECUTED
4b30e: 621e bhis 4b32e <_POSIX_Thread_Translate_sched_param+0x9e><== NOT EXECUTED
_Timespec_To_ticks( ¶m->sched_ss_init_budget ) )
return EINVAL;
if ( !_POSIX_Priority_Is_valid( param->sched_ss_low_priority ) )
4b310: 2f2a 0004 movel %a2@(4),%sp@- <== NOT EXECUTED
4b314: 4eb9 0004 b26c jsr 4b26c <_POSIX_Priority_Is_valid> <== NOT EXECUTED
4b31a: 588f addql #4,%sp <== NOT EXECUTED
4b31c: 4a00 tstb %d0 <== NOT EXECUTED
4b31e: 670e beqs 4b32e <_POSIX_Thread_Translate_sched_param+0x9e><== NOT EXECUTED
return EINVAL;
*budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_CALLOUT;
4b320: 7003 moveq #3,%d0 <== NOT EXECUTED
4b322: 2680 movel %d0,%a3@ <== NOT EXECUTED
*budget_callout = _POSIX_Threads_Sporadic_budget_callout;
4b324: 28bc 0004 5c80 movel #285824,%a4@ <== NOT EXECUTED
return 0;
}
if ( policy == SCHED_FIFO ) {
*budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_NONE;
return 0;
4b32a: 4280 clrl %d0
4b32c: 6002 bras 4b330 <_POSIX_Thread_Translate_sched_param+0xa0>
if ( _Timespec_To_ticks( ¶m->sched_ss_repl_period ) <
_Timespec_To_ticks( ¶m->sched_ss_init_budget ) )
return EINVAL;
if ( !_POSIX_Priority_Is_valid( param->sched_ss_low_priority ) )
return EINVAL;
4b32e: 7016 moveq #22,%d0
*budget_callout = _POSIX_Threads_Sporadic_budget_callout;
return 0;
}
return EINVAL;
}
4b330: 4cee 3c04 ffec moveml %fp@(-20),%d2/%a2-%a5
4b336: 4e5e unlk %fp
...
0004a2c2 <_POSIX_Threads_Create_extension>:
bool _POSIX_Threads_Create_extension(
Thread_Control *executing __attribute__((unused)),
Thread_Control *created
)
{
4a2c2: 4e56 0000 linkw %fp,#0
4a2c6: 2f0b movel %a3,%sp@-
4a2c8: 266e 000c moveal %fp@(12),%a3
4a2cc: 2f0a movel %a2,%sp@-
POSIX_API_Control *api;
POSIX_API_Control *executing_api;
api = _Workspace_Allocate( sizeof( POSIX_API_Control ) );
4a2ce: 4878 00f0 pea f0 <DBL_MANT_DIG+0xbb>
4a2d2: 4eb9 0004 8794 jsr 48794 <_Workspace_Allocate>
if ( !api )
4a2d8: 588f addql #4,%sp
)
{
POSIX_API_Control *api;
POSIX_API_Control *executing_api;
api = _Workspace_Allocate( sizeof( POSIX_API_Control ) );
4a2da: 2440 moveal %d0,%a2
if ( !api )
4a2dc: 4a80 tstl %d0
4a2de: 6700 00e2 beqw 4a3c2 <_POSIX_Threads_Create_extension+0x100>
return false;
created->API_Extensions[ THREAD_API_POSIX ] = api;
4a2e2: 2740 0102 movel %d0,%a3@(258)
/* XXX check all fields are touched */
api->Attributes = _POSIX_Threads_Default_attributes;
4a2e6: 4878 0040 pea 40 <DBL_MANT_DIG+0xb>
4a2ea: 42a7 clrl %sp@-
4a2ec: 2f00 movel %d0,%sp@-
4a2ee: 4eb9 0004 d270 jsr 4d270 <memset>
4a2f4: 7001 moveq #1,%d0
4a2f6: 7202 moveq #2,%d1
4a2f8: 2480 movel %d0,%a2@
4a2fa: 7001 moveq #1,%d0
4a2fc: 2541 0018 movel %d1,%a2@(24)
4a300: 2540 0010 movel %d0,%a2@(16)
4a304: 2540 0014 movel %d0,%a2@(20)
4a308: 2540 0038 movel %d0,%a2@(56)
4a30c: 2540 003c movel %d0,%a2@(60)
api->detachstate = _POSIX_Threads_Default_attributes.detachstate;
4a310: 2540 0040 movel %d0,%a2@(64)
api->schedpolicy = _POSIX_Threads_Default_attributes.schedpolicy;
4a314: 2540 0084 movel %d0,%a2@(132)
api->schedparam = _POSIX_Threads_Default_attributes.schedparam;
4a318: 4878 001c pea 1c <OPER2+0x8>
4a31c: 4879 0005 b7fa pea 5b7fa <_POSIX_Threads_Default_attributes+0x18>
4a322: 486a 0088 pea %a2@(136)
4a326: 4eb9 0004 d200 jsr 4d200 <memcpy>
* The check for class == 1 is debug. Should never really happen.
*/
/* XXX use signal constants */
api->signals_pending = 0;
if ( _Objects_Get_API( created->Object.id ) == OBJECTS_POSIX_API
4a32c: 4fef 0018 lea %sp@(24),%sp
RTEMS_INLINE_ROUTINE int _POSIX_Priority_From_core(
Priority_Control priority
)
{
return (POSIX_SCHEDULER_MAXIMUM_PRIORITY - priority + 1);
4a330: 4280 clrl %d0
4a332: 1039 0005 c252 moveb 5c252 <rtems_maximum_priority>,%d0
4a338: 90ab 0014 subl %a3@(20),%d0
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
4a33c: 41ea 00e8 lea %a2@(232),%a0
4a340: 7207 moveq #7,%d1
4a342: 2540 0088 movel %d0,%a2@(136)
4a346: 4280 clrl %d0
4a348: 102b 0008 moveb %a3@(8),%d0
4a34c: 2548 00e4 movel %a0,%a2@(228)
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
4a350: 41ea 00e4 lea %a2@(228),%a0
4a354: c081 andl %d1,%d0
_POSIX_Priority_From_core( created->current_priority );
/*
* POSIX 1003.1 1996, 18.2.2.2
*/
api->cancelation_requested = 0;
4a356: 42aa 00e0 clrl %a2@(224)
* The check for class == 1 is debug. Should never really happen.
*/
/* XXX use signal constants */
api->signals_pending = 0;
if ( _Objects_Get_API( created->Object.id ) == OBJECTS_POSIX_API
4a35a: 123c 0003 moveb #3,%d1
/*
* POSIX 1003.1 1996, 18.2.2.2
*/
api->cancelation_requested = 0;
api->cancelability_state = PTHREAD_CANCEL_ENABLE;
4a35e: 42aa 00d8 clrl %a2@(216)
api->cancelability_type = PTHREAD_CANCEL_DEFERRED;
4a362: 42aa 00dc clrl %a2@(220)
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
head->previous = NULL;
4a366: 42aa 00e8 clrl %a2@(232)
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
4a36a: 2548 00ec movel %a0,%a2@(236)
*
* The check for class == 1 is debug. Should never really happen.
*/
/* XXX use signal constants */
api->signals_pending = 0;
4a36e: 42aa 00d4 clrl %a2@(212)
if ( _Objects_Get_API( created->Object.id ) == OBJECTS_POSIX_API
4a372: b280 cmpl %d0,%d1
4a374: 6612 bnes 4a388 <_POSIX_Threads_Create_extension+0xc6>
#if defined(RTEMS_DEBUG)
&& _Objects_Get_class( created->Object.id ) == 1
#endif
) {
executing_api = _Thread_Executing->API_Extensions[ THREAD_API_POSIX ];
4a376: 2079 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a0
api->signals_blocked = executing_api->signals_blocked;
4a37c: 2068 0102 moveal %a0@(258),%a0
4a380: 2568 00d0 00d0 movel %a0@(208),%a2@(208)
4a386: 6006 bras 4a38e <_POSIX_Threads_Create_extension+0xcc>
} else {
api->signals_blocked = 0xffffffff;
4a388: 70ff moveq #-1,%d0
4a38a: 2540 00d0 movel %d0,%a2@(208)
}
_Thread_queue_Initialize(
4a38e: 42a7 clrl %sp@-
4a390: 4878 1000 pea 1000 <D_MAX_EXP+0x801>
4a394: 42a7 clrl %sp@-
4a396: 486a 0044 pea %a2@(68)
4a39a: 4eb9 0004 7e4c jsr 47e4c <_Thread_queue_Initialize>
THREAD_QUEUE_DISCIPLINE_FIFO,
STATES_WAITING_FOR_JOIN_AT_EXIT,
0
);
_Watchdog_Initialize(
4a3a0: 202b 0008 movel %a3@(8),%d0
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
the_watchdog->routine = routine;
4a3a4: 223c 0004 a3d0 movel #304080,%d1
_POSIX_Threads_Sporadic_budget_TSR,
created->Object.id,
created
);
return true;
4a3aa: 4fef 0010 lea %sp@(16),%sp
the_watchdog->id = id;
4a3ae: 2540 00c8 movel %d0,%a2@(200)
4a3b2: 7001 moveq #1,%d0
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
4a3b4: 42aa 00b0 clrl %a2@(176)
the_watchdog->routine = routine;
4a3b8: 2541 00c4 movel %d1,%a2@(196)
the_watchdog->id = id;
the_watchdog->user_data = user_data;
4a3bc: 254b 00cc movel %a3,%a2@(204)
4a3c0: 6002 bras 4a3c4 <_POSIX_Threads_Create_extension+0x102>
POSIX_API_Control *executing_api;
api = _Workspace_Allocate( sizeof( POSIX_API_Control ) );
if ( !api )
return false;
4a3c2: 4200 clrb %d0 <== NOT EXECUTED
created->Object.id,
created
);
return true;
}
4a3c4: 246e fff8 moveal %fp@(-8),%a2
4a3c8: 266e fffc moveal %fp@(-4),%a3
4a3cc: 4e5e unlk %fp <== NOT EXECUTED
0004a24e <_POSIX_Threads_Delete_extension>:
*/
void _POSIX_Threads_Delete_extension(
Thread_Control *executing __attribute__((unused)),
Thread_Control *deleted
)
{
4a24e: 4e56 ffec linkw %fp,#-20
4a252: 48d7 1c0c moveml %d2-%d3/%a2-%a4,%sp@
4a256: 246e 000c moveal %fp@(12),%a2
/*
* Wakeup all the tasks which joined with this one
*/
value_ptr = (void **) deleted->Wait.return_argument;
while ( (the_thread = _Thread_queue_Dequeue( &api->Join_List )) )
4a25a: 49f9 0004 7ac8 lea 47ac8 <_Thread_queue_Dequeue>,%a4
{
Thread_Control *the_thread;
POSIX_API_Control *api;
void **value_ptr;
api = deleted->API_Extensions[ THREAD_API_POSIX ];
4a260: 266a 0102 moveal %a2@(258),%a3
/*
* Wakeup all the tasks which joined with this one
*/
value_ptr = (void **) deleted->Wait.return_argument;
while ( (the_thread = _Thread_queue_Dequeue( &api->Join_List )) )
4a264: 240b movel %a3,%d2
4a266: 0682 0000 0044 addil #68,%d2
api = deleted->API_Extensions[ THREAD_API_POSIX ];
/*
* Run the POSIX cancellation handlers
*/
_POSIX_Threads_cancel_run( deleted );
4a26c: 2f0a movel %a2,%sp@-
4a26e: 4eb9 0004 c194 jsr 4c194 <_POSIX_Threads_cancel_run>
/*
* Run all the key destructors
*/
_POSIX_Keys_Run_destructors( deleted );
4a274: 2f0a movel %a2,%sp@-
4a276: 4eb9 0004 c1fc jsr 4c1fc <_POSIX_Keys_Run_destructors>
/*
* Wakeup all the tasks which joined with this one
*/
value_ptr = (void **) deleted->Wait.return_argument;
4a27c: 262a 0028 movel %a2@(40),%d3
while ( (the_thread = _Thread_queue_Dequeue( &api->Join_List )) )
4a280: 508f addql #8,%sp
4a282: 6008 bras 4a28c <_POSIX_Threads_Delete_extension+0x3e>
*(void **)the_thread->Wait.return_argument = value_ptr;
4a284: 2240 moveal %d0,%a1 <== NOT EXECUTED
4a286: 2069 0028 moveal %a1@(40),%a0 <== NOT EXECUTED
4a28a: 2083 movel %d3,%a0@ <== NOT EXECUTED
/*
* Wakeup all the tasks which joined with this one
*/
value_ptr = (void **) deleted->Wait.return_argument;
while ( (the_thread = _Thread_queue_Dequeue( &api->Join_List )) )
4a28c: 2f02 movel %d2,%sp@-
4a28e: 4e94 jsr %a4@
4a290: 588f addql #4,%sp
4a292: 4a80 tstl %d0
4a294: 66ee bnes 4a284 <_POSIX_Threads_Delete_extension+0x36><== NEVER TAKEN
*(void **)the_thread->Wait.return_argument = value_ptr;
if ( api->schedpolicy == SCHED_SPORADIC )
4a296: 103c 0004 moveb #4,%d0
4a29a: b0ab 0084 cmpl %a3@(132),%d0
4a29e: 660c bnes 4a2ac <_POSIX_Threads_Delete_extension+0x5e><== ALWAYS TAKEN
(void) _Watchdog_Remove( &api->Sporadic_timer );
4a2a0: 486b 00a8 pea %a3@(168) <== NOT EXECUTED
4a2a4: 4eb9 0004 863c jsr 4863c <_Watchdog_Remove> <== NOT EXECUTED
4a2aa: 588f addql #4,%sp <== NOT EXECUTED
deleted->API_Extensions[ THREAD_API_POSIX ] = NULL;
4a2ac: 42aa 0102 clrl %a2@(258)
(void) _Workspace_Free( api );
4a2b0: 2d4b 0008 movel %a3,%fp@(8)
}
4a2b4: 4cee 1c0c ffec moveml %fp@(-20),%d2-%d3/%a2-%a4
4a2ba: 4e5e unlk %fp
if ( api->schedpolicy == SCHED_SPORADIC )
(void) _Watchdog_Remove( &api->Sporadic_timer );
deleted->API_Extensions[ THREAD_API_POSIX ] = NULL;
(void) _Workspace_Free( api );
4a2bc: 4ef9 0004 87b0 jmp 487b0 <_Workspace_Free>
0004a222 <_POSIX_Threads_Exitted_extension>:
*/
RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API(
Objects_Id id
)
{
return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS);
4a222: 4280 clrl %d0
4a224: 7207 moveq #7,%d1
* This method is invoked each time a thread exits.
*/
void _POSIX_Threads_Exitted_extension(
Thread_Control *executing
)
{
4a226: 4e56 0000 linkw %fp,#0
4a22a: 206e 0008 moveal %fp@(8),%a0
4a22e: 1028 0008 moveb %a0@(8),%d0
4a232: c081 andl %d1,%d0
/*
* If the executing thread was not created with the POSIX API, then this
* API do not get to define its exit behavior.
*/
if ( _Objects_Get_API( executing->Object.id ) == OBJECTS_POSIX_API )
4a234: 123c 0003 moveb #3,%d1
4a238: b280 cmpl %d0,%d1
4a23a: 660e bnes 4a24a <_POSIX_Threads_Exitted_extension+0x28><== ALWAYS TAKEN
pthread_exit( executing->Wait.return_argument );
4a23c: 2d68 0028 0008 movel %a0@(40),%fp@(8) <== NOT EXECUTED
}
4a242: 4e5e unlk %fp <== NOT EXECUTED
/*
* If the executing thread was not created with the POSIX API, then this
* API do not get to define its exit behavior.
*/
if ( _Objects_Get_API( executing->Object.id ) == OBJECTS_POSIX_API )
pthread_exit( executing->Wait.return_argument );
4a244: 4ef9 0004 c4b8 jmp 4c4b8 <pthread_exit> <== NOT EXECUTED
}
4a24a: 4e5e unlk %fp <== NOT EXECUTED
000459b0 <_POSIX_Threads_Initialize_user_threads_body>:
*
* Output parameters: NONE
*/
void _POSIX_Threads_Initialize_user_threads_body(void)
{
459b0: 4e56 ff98 linkw %fp,#-104
459b4: 48d7 3c7c moveml %d2-%d6/%a2-%a5,%sp@
uint32_t maximum;
posix_initialization_threads_table *user_threads;
pthread_t thread_id;
pthread_attr_t attr;
user_threads = Configuration_POSIX_API.User_initialization_threads_table;
459b8: 2479 0005 d29e moveal 5d29e <Configuration_POSIX_API+0x34>,%a2
maximum = Configuration_POSIX_API.number_of_initialization_threads;
459be: 2839 0005 d29a movel 5d29a <Configuration_POSIX_API+0x30>,%d4
if ( !user_threads || maximum == 0 )
459c4: 4a8a tstl %a2
459c6: 676a beqs 45a32 <_POSIX_Threads_Initialize_user_threads_body+0x82><== NEVER TAKEN
459c8: 4a84 tstl %d4
459ca: 6766 beqs 45a32 <_POSIX_Threads_Initialize_user_threads_body+0x82><== NEVER TAKEN
for ( index=0 ; index < maximum ; index++ ) {
/*
* There is no way for these calls to fail in this situation.
*/
(void) pthread_attr_init( &attr );
459cc: 240e movel %fp,%d2
(void) pthread_attr_setinheritsched( &attr, PTHREAD_EXPLICIT_SCHED );
(void) pthread_attr_setstacksize(&attr, user_threads[ index ].stack_size);
status = pthread_create(
459ce: 2a0e movel %fp,%d5
pthread_attr_t attr;
user_threads = Configuration_POSIX_API.User_initialization_threads_table;
maximum = Configuration_POSIX_API.number_of_initialization_threads;
if ( !user_threads || maximum == 0 )
459d0: 4283 clrl %d3
for ( index=0 ; index < maximum ; index++ ) {
/*
* There is no way for these calls to fail in this situation.
*/
(void) pthread_attr_init( &attr );
459d2: 0682 ffff ffbc addil #-68,%d2
459d8: 2c3c 0004 b33c movel #308028,%d6
(void) pthread_attr_setinheritsched( &attr, PTHREAD_EXPLICIT_SCHED );
459de: 4bf9 0004 b368 lea 4b368 <pthread_attr_setinheritsched>,%a5
(void) pthread_attr_setstacksize(&attr, user_threads[ index ].stack_size);
459e4: 49f9 0004 b3a0 lea 4b3a0 <pthread_attr_setstacksize>,%a4
status = pthread_create(
459ea: 5985 subql #4,%d5
459ec: 47f9 0004 5704 lea 45704 <pthread_create>,%a3
for ( index=0 ; index < maximum ; index++ ) {
/*
* There is no way for these calls to fail in this situation.
*/
(void) pthread_attr_init( &attr );
459f2: 2f02 movel %d2,%sp@-
459f4: 2046 moveal %d6,%a0
459f6: 4e90 jsr %a0@
(void) pthread_attr_setinheritsched( &attr, PTHREAD_EXPLICIT_SCHED );
459f8: 4878 0002 pea 2 <DOUBLE_FLOAT>
459fc: 2f02 movel %d2,%sp@-
459fe: 4e95 jsr %a5@
(void) pthread_attr_setstacksize(&attr, user_threads[ index ].stack_size);
45a00: 2f2a 0004 movel %a2@(4),%sp@-
45a04: 2f02 movel %d2,%sp@-
45a06: 4e94 jsr %a4@
status = pthread_create(
45a08: 42a7 clrl %sp@-
45a0a: 2f12 movel %a2@,%sp@-
45a0c: 2f02 movel %d2,%sp@-
45a0e: 2f05 movel %d5,%sp@-
45a10: 4e93 jsr %a3@
&thread_id,
&attr,
user_threads[ index ].thread_entry,
NULL
);
if ( status )
45a12: 4fef 0024 lea %sp@(36),%sp
45a16: 4a80 tstl %d0
45a18: 6710 beqs 45a2a <_POSIX_Threads_Initialize_user_threads_body+0x7a>
_Internal_error_Occurred( INTERNAL_ERROR_POSIX_API, true, status );
45a1a: 2f00 movel %d0,%sp@-
45a1c: 4878 0001 pea 1 <ADD>
45a20: 4878 0002 pea 2 <DOUBLE_FLOAT>
45a24: 4eb9 0004 76e0 jsr 476e0 <_Internal_error_Occurred>
*
* Setting the attributes explicitly is critical, since we don't want
* to inherit the idle tasks attributes.
*/
for ( index=0 ; index < maximum ; index++ ) {
45a2a: 5283 addql #1,%d3
45a2c: 508a addql #8,%a2
45a2e: b883 cmpl %d3,%d4
45a30: 62c0 bhis 459f2 <_POSIX_Threads_Initialize_user_threads_body+0x42><== NEVER TAKEN
NULL
);
if ( status )
_Internal_error_Occurred( INTERNAL_ERROR_POSIX_API, true, status );
}
}
45a32: 4cee 3c7c ff98 moveml %fp@(-104),%d2-%d6/%a2-%a5
45a38: 4e5e unlk %fp <== NOT EXECUTED
0004a3d0 <_POSIX_Threads_Sporadic_budget_TSR>:
*/
void _POSIX_Threads_Sporadic_budget_TSR(
Objects_Id id __attribute__((unused)),
void *argument
)
{
4a3d0: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4a3d4: 2f0b movel %a3,%sp@- <== NOT EXECUTED
4a3d6: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4a3d8: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
Thread_Control *the_thread;
POSIX_API_Control *api;
the_thread = argument;
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
4a3dc: 266a 0102 moveal %a2@(258),%a3 <== NOT EXECUTED
/* ticks is guaranteed to be at least one */
ticks = _Timespec_To_ticks( &api->schedparam.sched_ss_init_budget );
4a3e0: 486b 0098 pea %a3@(152) <== NOT EXECUTED
4a3e4: 4eb9 0004 b20c jsr 4b20c <_Timespec_To_ticks> <== NOT EXECUTED
*/
#if 0
printk( "TSR %d %d %d\n", the_thread->resource_count,
the_thread->current_priority, new_priority );
#endif
if ( the_thread->resource_count == 0 ) {
4a3ea: 588f addql #4,%sp <== NOT EXECUTED
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
/* ticks is guaranteed to be at least one */
ticks = _Timespec_To_ticks( &api->schedparam.sched_ss_init_budget );
the_thread->cpu_time_budget = ticks;
4a3ec: 2540 0076 movel %d0,%a2@(118) <== NOT EXECUTED
RTEMS_INLINE_ROUTINE Priority_Control _POSIX_Priority_To_core(
int priority
)
{
return (Priority_Control) (POSIX_SCHEDULER_MAXIMUM_PRIORITY - priority + 1);
4a3f0: 4280 clrl %d0 <== NOT EXECUTED
4a3f2: 1039 0005 c252 moveb 5c252 <rtems_maximum_priority>,%d0 <== NOT EXECUTED
4a3f8: 90ab 0088 subl %a3@(136),%d0 <== NOT EXECUTED
new_priority = _POSIX_Priority_To_core( api->schedparam.sched_priority );
the_thread->real_priority = new_priority;
4a3fc: 2540 0018 movel %d0,%a2@(24) <== NOT EXECUTED
*/
#if 0
printk( "TSR %d %d %d\n", the_thread->resource_count,
the_thread->current_priority, new_priority );
#endif
if ( the_thread->resource_count == 0 ) {
4a400: 4aaa 001c tstl %a2@(28) <== NOT EXECUTED
4a404: 6618 bnes 4a41e <_POSIX_Threads_Sporadic_budget_TSR+0x4e><== NOT EXECUTED
/*
* If this would make them less important, then do not change it.
*/
if ( the_thread->current_priority > new_priority ) {
4a406: b0aa 0014 cmpl %a2@(20),%d0 <== NOT EXECUTED
4a40a: 6412 bccs 4a41e <_POSIX_Threads_Sporadic_budget_TSR+0x4e><== NOT EXECUTED
_Thread_Change_priority( the_thread, new_priority, true );
4a40c: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
4a410: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4a412: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4a414: 4eb9 0004 730c jsr 4730c <_Thread_Change_priority> <== NOT EXECUTED
4a41a: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
#endif
}
}
/* ticks is guaranteed to be at least one */
ticks = _Timespec_To_ticks( &api->schedparam.sched_ss_repl_period );
4a41e: 486b 0090 pea %a3@(144) <== NOT EXECUTED
4a422: 4eb9 0004 b20c jsr 4b20c <_Timespec_To_ticks> <== NOT EXECUTED
_Watchdog_Insert_ticks( &api->Sporadic_timer, ticks );
}
4a428: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
)
{
the_watchdog->initial = units;
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
4a42c: 588f addql #4,%sp <== NOT EXECUTED
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
4a42e: 2740 00b4 movel %d0,%a3@(180) <== NOT EXECUTED
}
/* ticks is guaranteed to be at least one */
ticks = _Timespec_To_ticks( &api->schedparam.sched_ss_repl_period );
_Watchdog_Insert_ticks( &api->Sporadic_timer, ticks );
4a432: 47eb 00a8 lea %a3@(168),%a3 <== NOT EXECUTED
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
4a436: 203c 0005 dbe8 movel #383976,%d0 <== NOT EXECUTED
4a43c: 2d4b 000c movel %a3,%fp@(12) <== NOT EXECUTED
}
4a440: 266e fffc moveal %fp@(-4),%a3 <== NOT EXECUTED
4a444: 2d40 0008 movel %d0,%fp@(8) <== NOT EXECUTED
4a448: 4e5e unlk %fp <== NOT EXECUTED
4a44a: 4ef9 0004 8520 jmp 48520 <_Watchdog_Insert> <== NOT EXECUTED
0004a450 <_POSIX_Threads_Sporadic_budget_callout>:
/*
* This will prevent the thread from consuming its entire "budget"
* while at low priority.
*/
the_thread->cpu_time_budget = 0xFFFFFFFF; /* XXX should be based on MAX_U32 */
4a450: 70ff moveq #-1,%d0 <== NOT EXECUTED
* _POSIX_Threads_Sporadic_budget_callout
*/
void _POSIX_Threads_Sporadic_budget_callout(
Thread_Control *the_thread
)
{
4a452: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4a456: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
/*
* This will prevent the thread from consuming its entire "budget"
* while at low priority.
*/
the_thread->cpu_time_budget = 0xFFFFFFFF; /* XXX should be based on MAX_U32 */
4a45a: 2140 0076 movel %d0,%a0@(118) <== NOT EXECUTED
4a45e: 4280 clrl %d0 <== NOT EXECUTED
4a460: 1039 0005 c252 moveb 5c252 <rtems_maximum_priority>,%d0 <== NOT EXECUTED
)
{
POSIX_API_Control *api;
uint32_t new_priority;
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
4a466: 2268 0102 moveal %a0@(258),%a1 <== NOT EXECUTED
4a46a: 90a9 008c subl %a1@(140),%d0 <== NOT EXECUTED
* while at low priority.
*/
the_thread->cpu_time_budget = 0xFFFFFFFF; /* XXX should be based on MAX_U32 */
new_priority = _POSIX_Priority_To_core(api->schedparam.sched_ss_low_priority);
the_thread->real_priority = new_priority;
4a46e: 2140 0018 movel %d0,%a0@(24) <== NOT EXECUTED
*/
#if 0
printk( "callout %d %d %d\n", the_thread->resource_count,
the_thread->current_priority, new_priority );
#endif
if ( the_thread->resource_count == 0 ) {
4a472: 4aa8 001c tstl %a0@(28) <== NOT EXECUTED
4a476: 6618 bnes 4a490 <_POSIX_Threads_Sporadic_budget_callout+0x40><== NOT EXECUTED
/*
* Make sure we are actually lowering it. If they have lowered it
* to logically lower than sched_ss_low_priority, then we do not want to
* change it.
*/
if ( the_thread->current_priority < new_priority ) {
4a478: b0a8 0014 cmpl %a0@(20),%d0 <== NOT EXECUTED
4a47c: 6312 blss 4a490 <_POSIX_Threads_Sporadic_budget_callout+0x40><== NOT EXECUTED
_Thread_Change_priority( the_thread, new_priority, true );
4a47e: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
4a482: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4a484: 2f08 movel %a0,%sp@- <== NOT EXECUTED
4a486: 4eb9 0004 730c jsr 4730c <_Thread_Change_priority> <== NOT EXECUTED
4a48c: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
#if 0
printk( "lower priority\n" );
#endif
}
}
}
4a490: 4e5e unlk %fp <== NOT EXECUTED
0004c194 <_POSIX_Threads_cancel_run>:
thread_support = the_thread->API_Extensions[ THREAD_API_POSIX ];
handler_stack = &thread_support->Cancellation_Handlers;
thread_support->cancelability_state = PTHREAD_CANCEL_DISABLE;
4c194: 7001 moveq #1,%d0
#include <rtems/posix/threadsup.h>
void _POSIX_Threads_cancel_run(
Thread_Control *the_thread
)
{
4c196: 4e56 ffec linkw %fp,#-20
POSIX_Cancel_Handler_control *handler;
Chain_Control *handler_stack;
POSIX_API_Control *thread_support;
ISR_Level level;
thread_support = the_thread->API_Extensions[ THREAD_API_POSIX ];
4c19a: 206e 0008 moveal %fp@(8),%a0
#include <rtems/posix/threadsup.h>
void _POSIX_Threads_cancel_run(
Thread_Control *the_thread
)
{
4c19e: 48d7 1c0c moveml %d2-%d3/%a2-%a4,%sp@
POSIX_Cancel_Handler_control *handler;
Chain_Control *handler_stack;
POSIX_API_Control *thread_support;
ISR_Level level;
thread_support = the_thread->API_Extensions[ THREAD_API_POSIX ];
4c1a2: 2468 0102 moveal %a0@(258),%a2
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
4c1a6: 260a movel %a2,%d3
4c1a8: 0683 0000 00e8 addil #232,%d3
handler_stack = &thread_support->Cancellation_Handlers;
thread_support->cancelability_state = PTHREAD_CANCEL_DISABLE;
while ( !_Chain_Is_empty( handler_stack ) ) {
_ISR_Disable( level );
4c1ae: 243c 0000 0700 movel #1792,%d2
_Chain_Extract_unprotected( &handler->Node );
_ISR_Enable( level );
(*handler->routine)( handler->arg );
_Workspace_Free( handler );
4c1b4: 47f9 0004 87b0 lea 487b0 <_Workspace_Free>,%a3
thread_support = the_thread->API_Extensions[ THREAD_API_POSIX ];
handler_stack = &thread_support->Cancellation_Handlers;
thread_support->cancelability_state = PTHREAD_CANCEL_DISABLE;
4c1ba: 2540 00d8 movel %d0,%a2@(216)
while ( !_Chain_Is_empty( handler_stack ) ) {
4c1be: 602a bras 4c1ea <_POSIX_Threads_cancel_run+0x56>
_ISR_Disable( level );
4c1c0: 2002 movel %d2,%d0 <== NOT EXECUTED
4c1c2: 40c1 movew %sr,%d1 <== NOT EXECUTED
4c1c4: 8081 orl %d1,%d0 <== NOT EXECUTED
4c1c6: 46c0 movew %d0,%sr <== NOT EXECUTED
handler = (POSIX_Cancel_Handler_control *)
4c1c8: 286a 00ec moveal %a2@(236),%a4 <== NOT EXECUTED
)
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
4c1cc: 2254 moveal %a4@,%a1 <== NOT EXECUTED
previous = the_node->previous;
4c1ce: 206c 0004 moveal %a4@(4),%a0 <== NOT EXECUTED
next->previous = previous;
4c1d2: 2348 0004 movel %a0,%a1@(4) <== NOT EXECUTED
previous->next = next;
4c1d6: 2089 movel %a1,%a0@ <== NOT EXECUTED
_Chain_Tail( handler_stack )->previous;
_Chain_Extract_unprotected( &handler->Node );
_ISR_Enable( level );
4c1d8: 46c1 movew %d1,%sr <== NOT EXECUTED
(*handler->routine)( handler->arg );
4c1da: 2f2c 000c movel %a4@(12),%sp@- <== NOT EXECUTED
4c1de: 206c 0008 moveal %a4@(8),%a0 <== NOT EXECUTED
4c1e2: 4e90 jsr %a0@ <== NOT EXECUTED
_Workspace_Free( handler );
4c1e4: 2f0c movel %a4,%sp@- <== NOT EXECUTED
4c1e6: 4e93 jsr %a3@ <== NOT EXECUTED
4c1e8: 508f addql #8,%sp <== NOT EXECUTED
handler_stack = &thread_support->Cancellation_Handlers;
thread_support->cancelability_state = PTHREAD_CANCEL_DISABLE;
while ( !_Chain_Is_empty( handler_stack ) ) {
4c1ea: b6aa 00e4 cmpl %a2@(228),%d3
4c1ee: 66d0 bnes 4c1c0 <_POSIX_Threads_cancel_run+0x2c> <== NEVER TAKEN
(*handler->routine)( handler->arg );
_Workspace_Free( handler );
}
}
4c1f0: 4cee 1c0c ffec moveml %fp@(-20),%d2-%d3/%a2-%a4
4c1f6: 4e5e unlk %fp
...
0004ad44 <_POSIX_Timer_Insert_helper>:
Watchdog_Interval ticks,
Objects_Id id,
Watchdog_Service_routine_entry TSR,
void *arg
)
{
4ad44: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4ad48: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4ad4a: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
4ad4e: 2f02 movel %d2,%sp@- <== NOT EXECUTED
ISR_Level level;
(void) _Watchdog_Remove( timer );
4ad50: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4ad52: 4eb9 0004 8d5c jsr 48d5c <_Watchdog_Remove> <== NOT EXECUTED
_ISR_Disable( level );
4ad58: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
4ad5e: 40c2 movew %sr,%d2 <== NOT EXECUTED
4ad60: 8082 orl %d2,%d0 <== NOT EXECUTED
4ad62: 46c0 movew %d0,%sr <== NOT EXECUTED
/*
* Check to see if the watchdog has just been inserted by a
* higher priority interrupt. If so, abandon this insert.
*/
if ( timer->state != WATCHDOG_INACTIVE ) {
4ad64: 588f addql #4,%sp <== NOT EXECUTED
4ad66: 4aaa 0008 tstl %a2@(8) <== NOT EXECUTED
4ad6a: 6706 beqs 4ad72 <_POSIX_Timer_Insert_helper+0x2e><== NOT EXECUTED
_ISR_Enable( level );
4ad6c: 46c2 movew %d2,%sr <== NOT EXECUTED
return false;
4ad6e: 4200 clrb %d0 <== NOT EXECUTED
4ad70: 6030 bras 4ada2 <_POSIX_Timer_Insert_helper+0x5e><== NOT EXECUTED
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
4ad72: 42aa 0008 clrl %a2@(8) <== NOT EXECUTED
the_watchdog->routine = routine;
4ad76: 256e 0014 001c movel %fp@(20),%a2@(28) <== NOT EXECUTED
the_watchdog->id = id;
4ad7c: 256e 0010 0020 movel %fp@(16),%a2@(32) <== NOT EXECUTED
the_watchdog->user_data = user_data;
4ad82: 256e 0018 0024 movel %fp@(24),%a2@(36) <== NOT EXECUTED
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
4ad88: 256e 000c 000c movel %fp@(12),%a2@(12) <== NOT EXECUTED
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
4ad8e: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4ad90: 4879 0005 e768 pea 5e768 <_Watchdog_Ticks_chain> <== NOT EXECUTED
4ad96: 4eb9 0004 8c40 jsr 48c40 <_Watchdog_Insert> <== NOT EXECUTED
* OK. Now we now the timer was not rescheduled by an interrupt
* so we can atomically initialize it as in use.
*/
_Watchdog_Initialize( timer, TSR, id, arg );
_Watchdog_Insert_ticks( timer, ticks );
_ISR_Enable( level );
4ad9c: 46c2 movew %d2,%sr <== NOT EXECUTED
return true;
4ad9e: 508f addql #8,%sp <== NOT EXECUTED
4ada0: 7001 moveq #1,%d0 <== NOT EXECUTED
}
4ada2: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
4ada6: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
4adaa: 4e5e unlk %fp <== NOT EXECUTED
...
00045538 <_POSIX_Timer_TSR>:
* This is the operation that is run when a timer expires
*/
void _POSIX_Timer_TSR(
Objects_Id timer __attribute__((unused)),
void *data)
{
45538: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4553c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4553e: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
bool activated;
ptimer = (POSIX_Timer_Control *)data;
/* Increment the number of expirations. */
ptimer->overrun = ptimer->overrun + 1;
45542: 52aa 0066 addql #1,%a2@(102) <== NOT EXECUTED
/* The timer must be reprogrammed */
if ( ( ptimer->timer_data.it_interval.tv_sec != 0 ) ||
45546: 4aaa 0052 tstl %a2@(82) <== NOT EXECUTED
4554a: 6606 bnes 45552 <_POSIX_Timer_TSR+0x1a> <== NOT EXECUTED
4554c: 4aaa 0056 tstl %a2@(86) <== NOT EXECUTED
45550: 6736 beqs 45588 <_POSIX_Timer_TSR+0x50> <== NOT EXECUTED
( ptimer->timer_data.it_interval.tv_nsec != 0 ) ) {
activated = _POSIX_Timer_Insert_helper(
45552: 2f0a movel %a2,%sp@- <== NOT EXECUTED
45554: 4879 0004 5538 pea 45538 <_POSIX_Timer_TSR> <== NOT EXECUTED
4555a: 2f2a 0008 movel %a2@(8),%sp@- <== NOT EXECUTED
4555e: 2f2a 0062 movel %a2@(98),%sp@- <== NOT EXECUTED
45562: 486a 0010 pea %a2@(16) <== NOT EXECUTED
45566: 4eb9 0004 ad44 jsr 4ad44 <_POSIX_Timer_Insert_helper> <== NOT EXECUTED
ptimer->ticks,
ptimer->Object.id,
_POSIX_Timer_TSR,
ptimer
);
if ( !activated )
4556c: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
45570: 4a00 tstb %d0 <== NOT EXECUTED
45572: 672e beqs 455a2 <_POSIX_Timer_TSR+0x6a> <== NOT EXECUTED
return;
/* Store the time when the timer was started again */
_TOD_Get( &ptimer->time );
45574: 486a 006a pea %a2@(106) <== NOT EXECUTED
45578: 4eb9 0004 6a74 jsr 46a74 <_TOD_Get> <== NOT EXECUTED
/* The state really did not change but just to be safe */
ptimer->state = POSIX_TIMER_STATE_CREATE_RUN;
4557e: 588f addql #4,%sp <== NOT EXECUTED
45580: 7003 moveq #3,%d0 <== NOT EXECUTED
45582: 1540 003c moveb %d0,%a2@(60) <== NOT EXECUTED
45586: 6006 bras 4558e <_POSIX_Timer_TSR+0x56> <== NOT EXECUTED
} else {
/* Indicates that the timer is stopped */
ptimer->state = POSIX_TIMER_STATE_CREATE_STOP;
45588: 7004 moveq #4,%d0 <== NOT EXECUTED
4558a: 1540 003c moveb %d0,%a2@(60) <== NOT EXECUTED
/*
* The sending of the signal to the process running the handling function
* specified for that signal is simulated
*/
if ( pthread_kill ( ptimer->thread_id, ptimer->inf.sigev_signo ) ) {
4558e: 2f2a 0042 movel %a2@(66),%sp@- <== NOT EXECUTED
45592: 2f2a 0038 movel %a2@(56),%sp@- <== NOT EXECUTED
45596: 4eb9 0004 a92c jsr 4a92c <pthread_kill> <== NOT EXECUTED
}
/* After the signal handler returns, the count of expirations of the
* timer must be set to 0.
*/
ptimer->overrun = 0;
4559c: 508f addql #8,%sp <== NOT EXECUTED
4559e: 42aa 0066 clrl %a2@(102) <== NOT EXECUTED
}
455a2: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
455a6: 4e5e unlk %fp <== NOT EXECUTED
...
00049eac <_POSIX_signals_Abnormal_termination_handler>:
sigset_t _POSIX_signals_Pending;
void _POSIX_signals_Abnormal_termination_handler(
int signo __attribute__((unused)) )
{
49eac: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
exit( 1 );
49eb0: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
49eb4: 4eb9 0004 c964 jsr 4c964 <exit> <== NOT EXECUTED
00046dac <_POSIX_signals_Alarm_TSR>:
void _POSIX_signals_Alarm_TSR(
Objects_Id id __attribute__((unused)),
void *argument __attribute__((unused))
)
{
46dac: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
int status;
status = kill( getpid(), SIGALRM );
46db0: 4eb9 0004 4610 jsr 44610 <getpid> <== NOT EXECUTED
46db6: 720e moveq #14,%d1 <== NOT EXECUTED
46db8: 2d40 0008 movel %d0,%fp@(8) <== NOT EXECUTED
46dbc: 2d41 000c movel %d1,%fp@(12) <== NOT EXECUTED
/* XXX can't print from an ISR, should this be fatal? */
}
46dc0: 4e5e unlk %fp <== NOT EXECUTED
void *argument __attribute__((unused))
)
{
int status;
status = kill( getpid(), SIGALRM );
46dc2: 4ef9 0004 6edc jmp 46edc <kill> <== NOT EXECUTED
0004c278 <_POSIX_signals_Check_signal>:
{
siginfo_t siginfo_struct;
sigset_t saved_signals_blocked;
Thread_Wait_information stored_thread_wait_information;
if ( ! _POSIX_signals_Clear_signals( api, signo, &siginfo_struct,
4c278: 4280 clrl %d0 <== NOT EXECUTED
bool _POSIX_signals_Check_signal(
POSIX_API_Control *api,
int signo,
bool is_global
)
{
4c27a: 4e56 ffb4 linkw %fp,#-76 <== NOT EXECUTED
siginfo_t siginfo_struct;
sigset_t saved_signals_blocked;
Thread_Wait_information stored_thread_wait_information;
if ( ! _POSIX_signals_Clear_signals( api, signo, &siginfo_struct,
4c27e: 102e 0013 moveb %fp@(19),%d0 <== NOT EXECUTED
bool _POSIX_signals_Check_signal(
POSIX_API_Control *api,
int signo,
bool is_global
)
{
4c282: 48d7 0c3c moveml %d2-%d5/%a2-%a3,%sp@ <== NOT EXECUTED
siginfo_t siginfo_struct;
sigset_t saved_signals_blocked;
Thread_Wait_information stored_thread_wait_information;
if ( ! _POSIX_signals_Clear_signals( api, signo, &siginfo_struct,
4c286: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
4c28a: 2a0e movel %fp,%d5 <== NOT EXECUTED
4c28c: 0685 ffff fff4 addil #-12,%d5 <== NOT EXECUTED
4c292: 2f00 movel %d0,%sp@- <== NOT EXECUTED
bool _POSIX_signals_Check_signal(
POSIX_API_Control *api,
int signo,
bool is_global
)
{
4c294: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
siginfo_t siginfo_struct;
sigset_t saved_signals_blocked;
Thread_Wait_information stored_thread_wait_information;
if ( ! _POSIX_signals_Clear_signals( api, signo, &siginfo_struct,
4c298: 2f05 movel %d5,%sp@- <== NOT EXECUTED
bool _POSIX_signals_Check_signal(
POSIX_API_Control *api,
int signo,
bool is_global
)
{
4c29a: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
siginfo_t siginfo_struct;
sigset_t saved_signals_blocked;
Thread_Wait_information stored_thread_wait_information;
if ( ! _POSIX_signals_Clear_signals( api, signo, &siginfo_struct,
4c29e: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4c2a0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4c2a2: 4eb9 0004 c350 jsr 4c350 <_POSIX_signals_Clear_signals> <== NOT EXECUTED
4c2a8: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
4c2ac: 4a00 tstb %d0 <== NOT EXECUTED
4c2ae: 6700 0092 beqw 4c342 <_POSIX_signals_Check_signal+0xca><== NOT EXECUTED
#endif
/*
* Just to prevent sending a signal which is currently being ignored.
*/
if ( _POSIX_signals_Vectors[ signo ].sa_handler == SIG_IGN )
4c2b2: 2002 movel %d2,%d0 <== NOT EXECUTED
4c2b4: 2602 movel %d2,%d3 <== NOT EXECUTED
4c2b6: e588 lsll #2,%d0 <== NOT EXECUTED
4c2b8: e98b lsll #4,%d3 <== NOT EXECUTED
4c2ba: 9680 subl %d0,%d3 <== NOT EXECUTED
4c2bc: 2043 moveal %d3,%a0 <== NOT EXECUTED
4c2be: d1fc 0005 dfc8 addal #384968,%a0 <== NOT EXECUTED
4c2c4: 7001 moveq #1,%d0 <== NOT EXECUTED
4c2c6: 2668 0008 moveal %a0@(8),%a3 <== NOT EXECUTED
4c2ca: b08b cmpl %a3,%d0 <== NOT EXECUTED
4c2cc: 6774 beqs 4c342 <_POSIX_signals_Check_signal+0xca><== NOT EXECUTED
/*
* Block the signals requested in sa_mask
*/
saved_signals_blocked = api->signals_blocked;
api->signals_blocked |= _POSIX_signals_Vectors[ signo ].sa_mask;
4c2ce: 2028 0004 movel %a0@(4),%d0 <== NOT EXECUTED
return false;
/*
* Block the signals requested in sa_mask
*/
saved_signals_blocked = api->signals_blocked;
4c2d2: 282a 00d0 movel %a2@(208),%d4 <== NOT EXECUTED
api->signals_blocked |= _POSIX_signals_Vectors[ signo ].sa_mask;
4c2d6: 8084 orl %d4,%d0 <== NOT EXECUTED
/*
* We have to save the blocking information of the current wait queue
* because the signal handler may subsequently go on and put the thread
* on a wait queue, for its own purposes.
*/
memcpy( &stored_thread_wait_information, &_Thread_Executing->Wait,
4c2d8: 2079 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
4c2de: 41e8 0020 lea %a0@(32),%a0 <== NOT EXECUTED
/*
* Block the signals requested in sa_mask
*/
saved_signals_blocked = api->signals_blocked;
api->signals_blocked |= _POSIX_signals_Vectors[ signo ].sa_mask;
4c2e2: 2540 00d0 movel %d0,%a2@(208) <== NOT EXECUTED
/*
* We have to save the blocking information of the current wait queue
* because the signal handler may subsequently go on and put the thread
* on a wait queue, for its own purposes.
*/
memcpy( &stored_thread_wait_information, &_Thread_Executing->Wait,
4c2e6: 4878 0028 pea 28 <OPER2+0x14> <== NOT EXECUTED
4c2ea: 2f08 movel %a0,%sp@- <== NOT EXECUTED
4c2ec: 486e ffcc pea %fp@(-52) <== NOT EXECUTED
4c2f0: 4eb9 0004 d200 jsr 4d200 <memcpy> <== NOT EXECUTED
sizeof( Thread_Wait_information ));
/*
* Here, the signal handler function executes
*/
switch ( _POSIX_signals_Vectors[ signo ].sa_flags ) {
4c2f6: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4c2fa: 41f9 0005 dfc8 lea 5dfc8 <_POSIX_signals_Vectors>,%a0 <== NOT EXECUTED
4c300: 7002 moveq #2,%d0 <== NOT EXECUTED
4c302: b0b0 3800 cmpl %a0@(00000000,%d3:l),%d0 <== NOT EXECUTED
4c306: 660e bnes 4c316 <_POSIX_signals_Check_signal+0x9e><== NOT EXECUTED
case SA_SIGINFO:
(*_POSIX_signals_Vectors[ signo ].sa_sigaction)(
4c308: 42a7 clrl %sp@- <== NOT EXECUTED
4c30a: 2f05 movel %d5,%sp@- <== NOT EXECUTED
4c30c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4c30e: 4e93 jsr %a3@ <== NOT EXECUTED
signo,
&siginfo_struct,
NULL /* context is undefined per 1003.1b-1993, p. 66 */
);
break;
4c310: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4c314: 6006 bras 4c31c <_POSIX_signals_Check_signal+0xa4><== NOT EXECUTED
default:
(*_POSIX_signals_Vectors[ signo ].sa_handler)( signo );
4c316: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4c318: 4e93 jsr %a3@ <== NOT EXECUTED
break;
4c31a: 588f addql #4,%sp <== NOT EXECUTED
}
/*
* Restore the blocking information
*/
memcpy( &_Thread_Executing->Wait, &stored_thread_wait_information,
4c31c: 4878 0028 pea 28 <OPER2+0x14> <== NOT EXECUTED
4c320: 486e ffcc pea %fp@(-52) <== NOT EXECUTED
4c324: 2079 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
4c32a: 41e8 0020 lea %a0@(32),%a0 <== NOT EXECUTED
4c32e: 2f08 movel %a0,%sp@- <== NOT EXECUTED
4c330: 4eb9 0004 d200 jsr 4d200 <memcpy> <== NOT EXECUTED
/*
* Restore the previous set of blocked signals
*/
api->signals_blocked = saved_signals_blocked;
return true;
4c336: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
sizeof( Thread_Wait_information ));
/*
* Restore the previous set of blocked signals
*/
api->signals_blocked = saved_signals_blocked;
4c33a: 2544 00d0 movel %d4,%a2@(208) <== NOT EXECUTED
return true;
4c33e: 7001 moveq #1,%d0 <== NOT EXECUTED
4c340: 6002 bras 4c344 <_POSIX_signals_Check_signal+0xcc><== NOT EXECUTED
/*
* Just to prevent sending a signal which is currently being ignored.
*/
if ( _POSIX_signals_Vectors[ signo ].sa_handler == SIG_IGN )
return false;
4c342: 4200 clrb %d0 <== NOT EXECUTED
* Restore the previous set of blocked signals
*/
api->signals_blocked = saved_signals_blocked;
return true;
}
4c344: 4cee 0c3c ffb4 moveml %fp@(-76),%d2-%d5/%a2-%a3 <== NOT EXECUTED
4c34a: 4e5e unlk %fp <== NOT EXECUTED
...
0004c8c8 <_POSIX_signals_Clear_process_signals>:
clear_signal = true;
mask = signo_to_mask( signo );
ISR_Level level;
_ISR_Disable( level );
4c8c8: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
*/
void _POSIX_signals_Clear_process_signals(
int signo
)
{
4c8ce: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4c8d2: 222e 0008 movel %fp@(8),%d1 <== NOT EXECUTED
4c8d6: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4c8d8: 2f02 movel %d2,%sp@- <== NOT EXECUTED
clear_signal = true;
mask = signo_to_mask( signo );
ISR_Level level;
_ISR_Disable( level );
4c8da: 40c2 movew %sr,%d2 <== NOT EXECUTED
4c8dc: 8082 orl %d2,%d0 <== NOT EXECUTED
4c8de: 46c0 movew %d0,%sr <== NOT EXECUTED
if ( _POSIX_signals_Vectors[ signo ].sa_flags == SA_SIGINFO ) {
4c8e0: 2601 movel %d1,%d3 <== NOT EXECUTED
4c8e2: 2001 movel %d1,%d0 <== NOT EXECUTED
4c8e4: 41f9 0005 dfc8 lea 5dfc8 <_POSIX_signals_Vectors>,%a0 <== NOT EXECUTED
4c8ea: e58b lsll #2,%d3 <== NOT EXECUTED
4c8ec: e988 lsll #4,%d0 <== NOT EXECUTED
4c8ee: 9083 subl %d3,%d0 <== NOT EXECUTED
4c8f0: 7602 moveq #2,%d3 <== NOT EXECUTED
4c8f2: b6b0 0800 cmpl %a0@(00000000,%d0:l),%d3 <== NOT EXECUTED
4c8f6: 6614 bnes 4c90c <_POSIX_signals_Clear_process_signals+0x44><== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
4c8f8: 2040 moveal %d0,%a0 <== NOT EXECUTED
4c8fa: d1fc 0005 e1c4 addal #385476,%a0 <== NOT EXECUTED
if ( !_Chain_Is_empty( &_POSIX_signals_Siginfo[ signo ] ) )
4c900: 43f9 0005 e1c0 lea 5e1c0 <_POSIX_signals_Siginfo>,%a1 <== NOT EXECUTED
4c906: b1f1 0800 cmpal %a1@(00000000,%d0:l),%a0 <== NOT EXECUTED
4c90a: 660e bnes 4c91a <_POSIX_signals_Clear_process_signals+0x52><== NOT EXECUTED
4c90c: 5381 subql #1,%d1 <== NOT EXECUTED
4c90e: 7001 moveq #1,%d0 <== NOT EXECUTED
4c910: e3a8 lsll %d1,%d0 <== NOT EXECUTED
clear_signal = false;
}
if ( clear_signal ) {
_POSIX_signals_Pending &= ~mask;
4c912: 4680 notl %d0 <== NOT EXECUTED
4c914: c1b9 0005 e1bc andl %d0,5e1bc <_POSIX_signals_Pending> <== NOT EXECUTED
}
_ISR_Enable( level );
4c91a: 46c2 movew %d2,%sr <== NOT EXECUTED
}
4c91c: 241f movel %sp@+,%d2 <== NOT EXECUTED
4c91e: 261f movel %sp@+,%d3 <== NOT EXECUTED
4c920: 4e5e unlk %fp <== NOT EXECUTED
0004c350 <_POSIX_signals_Clear_signals>:
static inline sigset_t signo_to_mask(
uint32_t sig
)
{
return 1u << (sig - 1);
4c350: 7001 moveq #1,%d0 <== NOT EXECUTED
int signo,
siginfo_t *info,
bool is_global,
bool check_blocked
)
{
4c352: 4e56 ffec linkw %fp,#-20 <== NOT EXECUTED
4c356: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4c35a: 48d7 043c moveml %d2-%d5/%a2,%sp@ <== NOT EXECUTED
4c35e: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
4c362: 2202 movel %d2,%d1 <== NOT EXECUTED
4c364: 5381 subql #1,%d1 <== NOT EXECUTED
4c366: 1a2e 0017 moveb %fp@(23),%d5 <== NOT EXECUTED
4c36a: e3a8 lsll %d1,%d0 <== NOT EXECUTED
/* set blocked signals based on if checking for them, SIGNAL_ALL_MASK
* insures that no signals are blocked and all are checked.
*/
if ( check_blocked )
4c36c: 4a2e 001b tstb %fp@(27) <== NOT EXECUTED
4c370: 6708 beqs 4c37a <_POSIX_signals_Clear_signals+0x2a><== NOT EXECUTED
signals_blocked = ~api->signals_blocked;
4c372: 2828 00d0 movel %a0@(208),%d4 <== NOT EXECUTED
4c376: 4684 notl %d4 <== NOT EXECUTED
4c378: 6002 bras 4c37c <_POSIX_signals_Clear_signals+0x2c><== NOT EXECUTED
else
signals_blocked = SIGNAL_ALL_MASK;
4c37a: 78ff moveq #-1,%d4 <== NOT EXECUTED
/* XXX is this right for siginfo type signals? */
/* XXX are we sure they can be cleared the same way? */
_ISR_Disable( level );
4c37c: 223c 0000 0700 movel #1792,%d1 <== NOT EXECUTED
4c382: 40c3 movew %sr,%d3 <== NOT EXECUTED
4c384: 8283 orl %d3,%d1 <== NOT EXECUTED
4c386: 46c1 movew %d1,%sr <== NOT EXECUTED
if ( is_global ) {
4c388: 4a05 tstb %d5 <== NOT EXECUTED
4c38a: 6700 0094 beqw 4c420 <_POSIX_signals_Clear_signals+0xd0><== NOT EXECUTED
if ( mask & (_POSIX_signals_Pending & signals_blocked) ) {
4c38e: c0b9 0005 e1bc andl 5e1bc <_POSIX_signals_Pending>,%d0 <== NOT EXECUTED
4c394: c084 andl %d4,%d0 <== NOT EXECUTED
4c396: 6700 00a0 beqw 4c438 <_POSIX_signals_Clear_signals+0xe8><== NOT EXECUTED
if ( _POSIX_signals_Vectors[ signo ].sa_flags == SA_SIGINFO ) {
4c39a: 2202 movel %d2,%d1 <== NOT EXECUTED
4c39c: 2002 movel %d2,%d0 <== NOT EXECUTED
4c39e: 41f9 0005 dfc8 lea 5dfc8 <_POSIX_signals_Vectors>,%a0 <== NOT EXECUTED
4c3a4: e589 lsll #2,%d1 <== NOT EXECUTED
4c3a6: e988 lsll #4,%d0 <== NOT EXECUTED
4c3a8: 9081 subl %d1,%d0 <== NOT EXECUTED
4c3aa: 7202 moveq #2,%d1 <== NOT EXECUTED
4c3ac: b2b0 0800 cmpl %a0@(00000000,%d0:l),%d1 <== NOT EXECUTED
4c3b0: 6662 bnes 4c414 <_POSIX_signals_Clear_signals+0xc4><== NOT EXECUTED
do_callout = true;
}
}
_ISR_Enable( level );
return do_callout;
}
4c3b2: 43f9 0005 e1c0 lea 5e1c0 <_POSIX_signals_Siginfo>,%a1 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
4c3b8: 2200 movel %d0,%d1 <== NOT EXECUTED
4c3ba: 0681 0005 e1c4 addil #385476,%d1 <== NOT EXECUTED
4c3c0: 2471 0800 moveal %a1@(00000000,%d0:l),%a2 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Get_unprotected(
Chain_Control *the_chain
)
{
if ( !_Chain_Is_empty(the_chain))
4c3c4: b28a cmpl %a2,%d1 <== NOT EXECUTED
4c3c6: 670e beqs 4c3d6 <_POSIX_signals_Clear_signals+0x86><== NOT EXECUTED
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *old_first = head->next;
Chain_Node *new_first = old_first->next;
4c3c8: 2052 moveal %a2@,%a0 <== NOT EXECUTED
head->next = new_first;
4c3ca: 2388 0800 movel %a0,%a1@(00000000,%d0:l) <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Get_first_unprotected(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
4c3ce: d089 addl %a1,%d0 <== NOT EXECUTED
4c3d0: 2140 0004 movel %d0,%a0@(4) <== NOT EXECUTED
4c3d4: 6002 bras 4c3d8 <_POSIX_signals_Clear_signals+0x88><== NOT EXECUTED
)
{
if ( !_Chain_Is_empty(the_chain))
return _Chain_Get_first_unprotected(the_chain);
else
return NULL;
4c3d6: 95ca subal %a2,%a2 <== NOT EXECUTED
if ( is_global ) {
if ( mask & (_POSIX_signals_Pending & signals_blocked) ) {
if ( _POSIX_signals_Vectors[ signo ].sa_flags == SA_SIGINFO ) {
psiginfo = (POSIX_signals_Siginfo_node *)
_Chain_Get_unprotected( &_POSIX_signals_Siginfo[ signo ] );
_POSIX_signals_Clear_process_signals( signo );
4c3d8: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4c3da: 4eb9 0004 c8c8 jsr 4c8c8 <_POSIX_signals_Clear_process_signals><== NOT EXECUTED
/*
* It may be impossible to get here with an empty chain
* BUT until that is proven we need to be defensive and
* protect against it.
*/
if ( psiginfo ) {
4c3e0: 588f addql #4,%sp <== NOT EXECUTED
4c3e2: 4a8a tstl %a2 <== NOT EXECUTED
4c3e4: 672e beqs 4c414 <_POSIX_signals_Clear_signals+0xc4><== NOT EXECUTED
*info = psiginfo->Info;
4c3e6: 4878 000c pea c <OPER1> <== NOT EXECUTED
4c3ea: 486a 0008 pea %a2@(8) <== NOT EXECUTED
4c3ee: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
4c3f2: 4eb9 0004 d200 jsr 4d200 <memcpy> <== NOT EXECUTED
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
Chain_Node *old_last = tail->previous;
4c3f8: 2079 0005 e150 moveal 5e150 <_POSIX_signals_Inactive_siginfo+0x8>,%a0<== NOT EXECUTED
the_node->next = tail;
tail->previous = the_node;
old_last->next = the_node;
the_node->previous = old_last;
4c3fe: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
Chain_Node *old_last = tail->previous;
the_node->next = tail;
4c402: 24bc 0005 e14c movel #385356,%a2@ <== NOT EXECUTED
tail->previous = the_node;
4c408: 23ca 0005 e150 movel %a2,5e150 <_POSIX_signals_Inactive_siginfo+0x8><== NOT EXECUTED
old_last->next = the_node;
4c40e: 208a movel %a2,%a0@ <== NOT EXECUTED
the_node->previous = old_last;
4c410: 2548 0004 movel %a0,%a2@(4) <== NOT EXECUTED
&psiginfo->Node
);
} else
do_callout = false;
}
_POSIX_signals_Clear_process_signals( signo );
4c414: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4c416: 4eb9 0004 c8c8 jsr 4c8c8 <_POSIX_signals_Clear_process_signals><== NOT EXECUTED
4c41c: 588f addql #4,%sp <== NOT EXECUTED
4c41e: 6014 bras 4c434 <_POSIX_signals_Clear_signals+0xe4><== NOT EXECUTED
do_callout = true;
}
} else {
if ( mask & (api->signals_pending & signals_blocked) ) {
4c420: 2428 00d4 movel %a0@(212),%d2 <== NOT EXECUTED
4c424: 2200 movel %d0,%d1 <== NOT EXECUTED
4c426: c282 andl %d2,%d1 <== NOT EXECUTED
4c428: c284 andl %d4,%d1 <== NOT EXECUTED
4c42a: 670c beqs 4c438 <_POSIX_signals_Clear_signals+0xe8><== NOT EXECUTED
api->signals_pending &= ~mask;
4c42c: 4680 notl %d0 <== NOT EXECUTED
4c42e: c082 andl %d2,%d0 <== NOT EXECUTED
4c430: 2140 00d4 movel %d0,%a0@(212) <== NOT EXECUTED
do_callout = true;
4c434: 7001 moveq #1,%d0 <== NOT EXECUTED
4c436: 6002 bras 4c43a <_POSIX_signals_Clear_signals+0xea><== NOT EXECUTED
bool do_callout;
POSIX_signals_Siginfo_node *psiginfo;
mask = signo_to_mask( signo );
do_callout = false;
4c438: 4200 clrb %d0 <== NOT EXECUTED
if ( mask & (api->signals_pending & signals_blocked) ) {
api->signals_pending &= ~mask;
do_callout = true;
}
}
_ISR_Enable( level );
4c43a: 46c3 movew %d3,%sr <== NOT EXECUTED
return do_callout;
}
4c43c: 4cee 043c ffec moveml %fp@(-20),%d2-%d5/%a2 <== NOT EXECUTED
4c442: 4e5e unlk %fp <== NOT EXECUTED
...
00046034 <_POSIX_signals_Get_lowest>:
sigset_t set
)
{
int signo;
for ( signo = SIGRTMIN ; signo <= SIGRTMAX ; signo++ ) {
46034: 701b moveq #27,%d0 <== NOT EXECUTED
#include <rtems/score/isr.h>
int _POSIX_signals_Get_lowest(
sigset_t set
)
{
46036: 4e56 fff4 linkw %fp,#-12 <== NOT EXECUTED
4603a: 48d7 001c moveml %d2-%d4,%sp@ <== NOT EXECUTED
4603e: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
46042: 7601 moveq #1,%d3 <== NOT EXECUTED
#include <rtems/posix/psignal.h>
#include <rtems/seterr.h>
#include <rtems/posix/time.h>
#include <rtems/score/isr.h>
int _POSIX_signals_Get_lowest(
46044: 2200 movel %d0,%d1 <== NOT EXECUTED
46046: 5381 subql #1,%d1 <== NOT EXECUTED
46048: 2803 movel %d3,%d4 <== NOT EXECUTED
4604a: e3ac lsll %d1,%d4 <== NOT EXECUTED
4604c: 2204 movel %d4,%d1 <== NOT EXECUTED
)
{
int signo;
for ( signo = SIGRTMIN ; signo <= SIGRTMAX ; signo++ ) {
if ( set & signo_to_mask( signo ) ) {
4604e: c282 andl %d2,%d1 <== NOT EXECUTED
46050: 6626 bnes 46078 <_POSIX_signals_Get_lowest+0x44> <== NOT EXECUTED
sigset_t set
)
{
int signo;
for ( signo = SIGRTMIN ; signo <= SIGRTMAX ; signo++ ) {
46052: 5280 addql #1,%d0 <== NOT EXECUTED
46054: 123c 0020 moveb #32,%d1 <== NOT EXECUTED
46058: b280 cmpl %d0,%d1 <== NOT EXECUTED
4605a: 66e8 bnes 46044 <_POSIX_signals_Get_lowest+0x10> <== NOT EXECUTED
4605c: 7001 moveq #1,%d0 <== NOT EXECUTED
4605e: 7601 moveq #1,%d3 <== NOT EXECUTED
#include <rtems/posix/psignal.h>
#include <rtems/seterr.h>
#include <rtems/posix/time.h>
#include <rtems/score/isr.h>
int _POSIX_signals_Get_lowest(
46060: 2200 movel %d0,%d1 <== NOT EXECUTED
46062: 5381 subql #1,%d1 <== NOT EXECUTED
46064: 2803 movel %d3,%d4 <== NOT EXECUTED
46066: e3ac lsll %d1,%d4 <== NOT EXECUTED
46068: 2204 movel %d4,%d1 <== NOT EXECUTED
#if (SIGHUP != 1)
#error "Assumption that SIGHUP==1 violated!!"
#endif
for ( signo = SIGHUP ; signo <= __SIGLASTNOTRT ; signo++ ) {
if ( set & signo_to_mask( signo ) ) {
4606a: c282 andl %d2,%d1 <== NOT EXECUTED
4606c: 660a bnes 46078 <_POSIX_signals_Get_lowest+0x44> <== NOT EXECUTED
*/
#if (SIGHUP != 1)
#error "Assumption that SIGHUP==1 violated!!"
#endif
for ( signo = SIGHUP ; signo <= __SIGLASTNOTRT ; signo++ ) {
4606e: 5280 addql #1,%d0 <== NOT EXECUTED
46070: 123c 001b moveb #27,%d1 <== NOT EXECUTED
46074: b280 cmpl %d0,%d1 <== NOT EXECUTED
46076: 66e8 bnes 46060 <_POSIX_signals_Get_lowest+0x2c> <== NOT EXECUTED
* a return 0. This routine will NOT be called unless a signal
* is pending in the set passed in.
*/
found_it:
return signo;
}
46078: 4cd7 001c moveml %sp@,%d2-%d4 <== NOT EXECUTED
4607c: 4e5e unlk %fp <== NOT EXECUTED
00049eba <_POSIX_signals_Post_switch_extension>:
*/
void _POSIX_signals_Post_switch_extension(
Thread_Control *the_thread
)
{
49eba: 4e56 fff0 linkw %fp,#-16
POSIX_API_Control *api;
int signo;
ISR_Level level;
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
49ebe: 206e 0008 moveal %fp@(8),%a0
*/
void _POSIX_signals_Post_switch_extension(
Thread_Control *the_thread
)
{
49ec2: 48d7 0c0c moveml %d2-%d3/%a2-%a3,%sp@
POSIX_API_Control *api;
int signo;
ISR_Level level;
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
49ec6: 2468 0102 moveal %a0@(258),%a2
/*
* api may be NULL in case of a thread close in progress
*/
if ( !api )
49eca: 4a8a tstl %a2
49ecc: 6770 beqs 49f3e <_POSIX_signals_Post_switch_extension+0x84><== NEVER TAKEN
*
* The first thing done is to check there are any signals to be
* processed at all. No point in doing this loop otherwise.
*/
while (1) {
_ISR_Disable( level );
49ece: 263c 0000 0700 movel #1792,%d3
break;
}
_ISR_Enable( level );
for ( signo = SIGRTMIN ; signo <= SIGRTMAX ; signo++ ) {
_POSIX_signals_Check_signal( api, signo, false );
49ed4: 47f9 0004 c278 lea 4c278 <_POSIX_signals_Check_signal>,%a3
*
* The first thing done is to check there are any signals to be
* processed at all. No point in doing this loop otherwise.
*/
while (1) {
_ISR_Disable( level );
49eda: 2003 movel %d3,%d0
49edc: 40c1 movew %sr,%d1
49ede: 8081 orl %d1,%d0
49ee0: 46c0 movew %d0,%sr
if ( !(~api->signals_blocked &
(api->signals_pending | _POSIX_signals_Pending)) ) {
49ee2: 2039 0005 e1bc movel 5e1bc <_POSIX_signals_Pending>,%d0
* The first thing done is to check there are any signals to be
* processed at all. No point in doing this loop otherwise.
*/
while (1) {
_ISR_Disable( level );
if ( !(~api->signals_blocked &
49ee8: 242a 00d0 movel %a2@(208),%d2
49eec: 4682 notl %d2
(api->signals_pending | _POSIX_signals_Pending)) ) {
49eee: 80aa 00d4 orl %a2@(212),%d0
* The first thing done is to check there are any signals to be
* processed at all. No point in doing this loop otherwise.
*/
while (1) {
_ISR_Disable( level );
if ( !(~api->signals_blocked &
49ef2: c082 andl %d2,%d0
49ef4: 6604 bnes 49efa <_POSIX_signals_Post_switch_extension+0x40><== NEVER TAKEN
(api->signals_pending | _POSIX_signals_Pending)) ) {
_ISR_Enable( level );
49ef6: 46c1 movew %d1,%sr
49ef8: 6044 bras 49f3e <_POSIX_signals_Post_switch_extension+0x84>
break;
}
_ISR_Enable( level );
49efa: 46c1 movew %d1,%sr <== NOT EXECUTED
for ( signo = SIGRTMIN ; signo <= SIGRTMAX ; signo++ ) {
49efc: 741b moveq #27,%d2 <== NOT EXECUTED
_POSIX_signals_Check_signal( api, signo, false );
49efe: 42a7 clrl %sp@- <== NOT EXECUTED
49f00: 2f02 movel %d2,%sp@- <== NOT EXECUTED
49f02: 2f0a movel %a2,%sp@- <== NOT EXECUTED
49f04: 4e93 jsr %a3@ <== NOT EXECUTED
_POSIX_signals_Check_signal( api, signo, true );
49f06: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
49f0a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
_ISR_Enable( level );
break;
}
_ISR_Enable( level );
for ( signo = SIGRTMIN ; signo <= SIGRTMAX ; signo++ ) {
49f0c: 5282 addql #1,%d2 <== NOT EXECUTED
_POSIX_signals_Check_signal( api, signo, false );
_POSIX_signals_Check_signal( api, signo, true );
49f0e: 2f0a movel %a2,%sp@- <== NOT EXECUTED
49f10: 4e93 jsr %a3@ <== NOT EXECUTED
_ISR_Enable( level );
break;
}
_ISR_Enable( level );
for ( signo = SIGRTMIN ; signo <= SIGRTMAX ; signo++ ) {
49f12: 4fef 0018 lea %sp@(24),%sp <== NOT EXECUTED
49f16: 7020 moveq #32,%d0 <== NOT EXECUTED
49f18: b082 cmpl %d2,%d0 <== NOT EXECUTED
49f1a: 66e2 bnes 49efe <_POSIX_signals_Post_switch_extension+0x44><== NOT EXECUTED
49f1c: 7401 moveq #1,%d2 <== NOT EXECUTED
_POSIX_signals_Check_signal( api, signo, true );
}
/* Unfortunately - nothing like __SIGFIRSTNOTRT in newlib signal .h */
for ( signo = SIGHUP ; signo <= __SIGLASTNOTRT ; signo++ ) {
_POSIX_signals_Check_signal( api, signo, false );
49f1e: 42a7 clrl %sp@- <== NOT EXECUTED
49f20: 2f02 movel %d2,%sp@- <== NOT EXECUTED
49f22: 2f0a movel %a2,%sp@- <== NOT EXECUTED
49f24: 4e93 jsr %a3@ <== NOT EXECUTED
_POSIX_signals_Check_signal( api, signo, true );
49f26: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
49f2a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
_POSIX_signals_Check_signal( api, signo, false );
_POSIX_signals_Check_signal( api, signo, true );
}
/* Unfortunately - nothing like __SIGFIRSTNOTRT in newlib signal .h */
for ( signo = SIGHUP ; signo <= __SIGLASTNOTRT ; signo++ ) {
49f2c: 5282 addql #1,%d2 <== NOT EXECUTED
_POSIX_signals_Check_signal( api, signo, false );
_POSIX_signals_Check_signal( api, signo, true );
49f2e: 2f0a movel %a2,%sp@- <== NOT EXECUTED
49f30: 4e93 jsr %a3@ <== NOT EXECUTED
_POSIX_signals_Check_signal( api, signo, false );
_POSIX_signals_Check_signal( api, signo, true );
}
/* Unfortunately - nothing like __SIGFIRSTNOTRT in newlib signal .h */
for ( signo = SIGHUP ; signo <= __SIGLASTNOTRT ; signo++ ) {
49f32: 4fef 0018 lea %sp@(24),%sp <== NOT EXECUTED
49f36: 701b moveq #27,%d0 <== NOT EXECUTED
49f38: b082 cmpl %d2,%d0 <== NOT EXECUTED
49f3a: 66e2 bnes 49f1e <_POSIX_signals_Post_switch_extension+0x64><== NOT EXECUTED
49f3c: 609c bras 49eda <_POSIX_signals_Post_switch_extension+0x20><== NOT EXECUTED
_POSIX_signals_Check_signal( api, signo, false );
_POSIX_signals_Check_signal( api, signo, true );
}
}
}
49f3e: 4cee 0c0c fff0 moveml %fp@(-16),%d2-%d3/%a2-%a3
49f44: 4e5e unlk %fp <== NOT EXECUTED
0005a2a0 <_POSIX_signals_Set_process_signals>:
sigset_t mask
)
{
ISR_Level level;
_ISR_Disable( level );
5a2a0: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
*/
void _POSIX_signals_Set_process_signals(
sigset_t mask
)
{
5a2a6: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
ISR_Level level;
_ISR_Disable( level );
5a2aa: 40c1 movew %sr,%d1 <== NOT EXECUTED
5a2ac: 8081 orl %d1,%d0 <== NOT EXECUTED
5a2ae: 46c0 movew %d0,%sr <== NOT EXECUTED
_POSIX_signals_Pending |= mask;
5a2b0: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
5a2b4: 81b9 0005 e1bc orl %d0,5e1bc <_POSIX_signals_Pending> <== NOT EXECUTED
_ISR_Enable( level );
5a2ba: 46c1 movew %d1,%sr <== NOT EXECUTED
}
5a2bc: 4e5e unlk %fp <== NOT EXECUTED
0004541c <_POSIX_signals_Ualarm_TSR>:
void _POSIX_signals_Ualarm_TSR(
Objects_Id id __attribute__((unused)),
void *argument __attribute__((unused))
)
{
4541c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
/*
* Send a SIGALRM but if there is a problem, ignore it.
* It's OK, there isn't a way this should fail.
*/
(void) kill( getpid(), SIGALRM );
45420: 4eb9 0004 2a1c jsr 42a1c <getpid> <== NOT EXECUTED
45426: 4878 000e pea e <OPER1+0x2> <== NOT EXECUTED
4542a: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4542c: 4eb9 0004 5234 jsr 45234 <kill> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Watchdog_Reset(
Watchdog_Control *the_watchdog
)
{
(void) _Watchdog_Remove( the_watchdog );
45432: 4879 0005 fb20 pea 5fb20 <_POSIX_signals_Ualarm_timer> <== NOT EXECUTED
45438: 4eb9 0004 8bf0 jsr 48bf0 <_Watchdog_Remove> <== NOT EXECUTED
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
4543e: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
45442: 203c 0005 fb20 movel #391968,%d0 <== NOT EXECUTED
45448: 2d40 000c movel %d0,%fp@(12) <== NOT EXECUTED
4544c: 203c 0005 f3c8 movel #390088,%d0 <== NOT EXECUTED
45452: 2d40 0008 movel %d0,%fp@(8) <== NOT EXECUTED
/*
* If the reset interval is non-zero, reschedule ourselves.
*/
_Watchdog_Reset( &_POSIX_signals_Ualarm_timer );
}
45456: 4e5e unlk %fp <== NOT EXECUTED
45458: 4ef9 0004 8ad4 jmp 48ad4 <_Watchdog_Insert> <== NOT EXECUTED
0005a2c0 <_POSIX_signals_Unblock_thread>:
5a2c0: 7201 moveq #1,%d1 <== NOT EXECUTED
bool _POSIX_signals_Unblock_thread(
Thread_Control *the_thread,
int signo,
siginfo_t *info
)
{
5a2c2: 4e56 fff4 linkw %fp,#-12 <== NOT EXECUTED
5a2c6: 226e 0010 moveal %fp@(16),%a1 <== NOT EXECUTED
5a2ca: 48d7 040c moveml %d2-%d3/%a2,%sp@ <== NOT EXECUTED
5a2ce: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
5a2d2: 2002 movel %d2,%d0 <== NOT EXECUTED
5a2d4: 5380 subql #1,%d0 <== NOT EXECUTED
5a2d6: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
5a2da: e1a9 lsll %d0,%d1 <== NOT EXECUTED
/*
* Is the thread is specifically waiting for a signal?
*/
if ( _States_Is_interruptible_signal( the_thread->current_state ) ) {
5a2dc: 202a 0010 movel %a2@(16),%d0 <== NOT EXECUTED
5a2e0: 2600 movel %d0,%d3 <== NOT EXECUTED
5a2e2: 0283 1000 8000 andil #268468224,%d3 <== NOT EXECUTED
{
POSIX_API_Control *api;
sigset_t mask;
siginfo_t *the_info = NULL;
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
5a2e8: 206a 0102 moveal %a2@(258),%a0 <== NOT EXECUTED
/*
* Is the thread is specifically waiting for a signal?
*/
if ( _States_Is_interruptible_signal( the_thread->current_state ) ) {
5a2ec: 0c83 1000 8000 cmpil #268468224,%d3 <== NOT EXECUTED
5a2f2: 6650 bnes 5a344 <_POSIX_signals_Unblock_thread+0x84><== NOT EXECUTED
if ( (the_thread->Wait.option & mask) || (~api->signals_blocked & mask) ) {
5a2f4: 2001 movel %d1,%d0 <== NOT EXECUTED
5a2f6: c0aa 0030 andl %a2@(48),%d0 <== NOT EXECUTED
5a2fa: 660c bnes 5a308 <_POSIX_signals_Unblock_thread+0x48><== NOT EXECUTED
5a2fc: 2028 00d0 movel %a0@(208),%d0 <== NOT EXECUTED
5a300: 4680 notl %d0 <== NOT EXECUTED
5a302: c280 andl %d0,%d1 <== NOT EXECUTED
5a304: 6700 00a8 beqw 5a3ae <_POSIX_signals_Unblock_thread+0xee><== NOT EXECUTED
the_thread->Wait.return_code = EINTR;
5a308: 7004 moveq #4,%d0 <== NOT EXECUTED
the_info = (siginfo_t *) the_thread->Wait.return_argument;
5a30a: 206a 0028 moveal %a2@(40),%a0 <== NOT EXECUTED
*/
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;
5a30e: 2540 0034 movel %d0,%a2@(52) <== NOT EXECUTED
the_info = (siginfo_t *) the_thread->Wait.return_argument;
if ( !info ) {
5a312: 4a89 tstl %a1 <== NOT EXECUTED
5a314: 660e bnes 5a324 <_POSIX_signals_Unblock_thread+0x64><== NOT EXECUTED
the_info->si_signo = signo;
the_info->si_code = SI_USER;
5a316: 7201 moveq #1,%d1 <== NOT EXECUTED
the_thread->Wait.return_code = EINTR;
the_info = (siginfo_t *) the_thread->Wait.return_argument;
if ( !info ) {
the_info->si_signo = signo;
5a318: 2082 movel %d2,%a0@ <== NOT EXECUTED
the_info->si_code = SI_USER;
5a31a: 2141 0004 movel %d1,%a0@(4) <== NOT EXECUTED
the_info->si_value.sival_int = 0;
5a31e: 42a8 0008 clrl %a0@(8) <== NOT EXECUTED
5a322: 6012 bras 5a336 <_POSIX_signals_Unblock_thread+0x76><== NOT EXECUTED
} else {
*the_info = *info;
5a324: 4878 000c pea c <OPER1> <== NOT EXECUTED
5a328: 2f09 movel %a1,%sp@- <== NOT EXECUTED
5a32a: 2f08 movel %a0,%sp@- <== NOT EXECUTED
5a32c: 4eb9 0004 d200 jsr 4d200 <memcpy> <== NOT EXECUTED
5a332: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
}
_Thread_queue_Extract_with_proxy( the_thread );
5a336: 2f0a movel %a2,%sp@- <== NOT EXECUTED
5a338: 4eb9 0004 7dec jsr 47dec <_Thread_queue_Extract_with_proxy><== NOT EXECUTED
return true;
5a33e: 588f addql #4,%sp <== NOT EXECUTED
5a340: 7001 moveq #1,%d0 <== NOT EXECUTED
5a342: 606c bras 5a3b0 <_POSIX_signals_Unblock_thread+0xf0><== NOT EXECUTED
}
/*
* Thread is not waiting due to a sigwait.
*/
if ( ~api->signals_blocked & mask ) {
5a344: 2428 00d0 movel %a0@(208),%d2 <== NOT EXECUTED
5a348: 4682 notl %d2 <== NOT EXECUTED
5a34a: c282 andl %d2,%d1 <== NOT EXECUTED
5a34c: 6760 beqs 5a3ae <_POSIX_signals_Unblock_thread+0xee><== NOT EXECUTED
* 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 ) ) {
5a34e: 0800 001c btst #28,%d0 <== NOT EXECUTED
5a352: 673e beqs 5a392 <_POSIX_signals_Unblock_thread+0xd2><== NOT EXECUTED
the_thread->Wait.return_code = EINTR;
5a354: 7204 moveq #4,%d1 <== NOT EXECUTED
5a356: 2541 0034 movel %d1,%a2@(52) <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE bool _States_Is_waiting_on_thread_queue (
States_Control the_states
)
{
return (the_states & STATES_WAITING_ON_THREAD_QUEUE);
5a35a: 2200 movel %d0,%d1 <== NOT EXECUTED
5a35c: 0281 0003 bee0 andil #245472,%d1 <== 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) )
5a362: 670c beqs 5a370 <_POSIX_signals_Unblock_thread+0xb0><== NOT EXECUTED
_Thread_queue_Extract_with_proxy( the_thread );
5a364: 2f0a movel %a2,%sp@- <== NOT EXECUTED
5a366: 4eb9 0004 7dec jsr 47dec <_Thread_queue_Extract_with_proxy><== NOT EXECUTED
5a36c: 588f addql #4,%sp <== NOT EXECUTED
5a36e: 603e bras 5a3ae <_POSIX_signals_Unblock_thread+0xee><== NOT EXECUTED
else if ( _States_Is_delaying(the_thread->current_state) ) {
5a370: 44c0 movew %d0,%ccr <== NOT EXECUTED
5a372: 6a3a bpls 5a3ae <_POSIX_signals_Unblock_thread+0xee><== NOT EXECUTED
(void) _Watchdog_Remove( &the_thread->Timer );
5a374: 486a 0048 pea %a2@(72) <== NOT EXECUTED
5a378: 4eb9 0004 863c jsr 4863c <_Watchdog_Remove> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Thread_Unblock (
Thread_Control *the_thread
)
{
_Thread_Clear_state( the_thread, STATES_BLOCKED );
5a37e: 2f3c 1003 fff8 movel #268697592,%sp@- <== NOT EXECUTED
5a384: 2f0a movel %a2,%sp@- <== NOT EXECUTED
5a386: 4eb9 0004 7448 jsr 47448 <_Thread_Clear_state> <== NOT EXECUTED
5a38c: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
5a390: 601c bras 5a3ae <_POSIX_signals_Unblock_thread+0xee><== NOT EXECUTED
_Thread_Unblock( the_thread );
}
} else if ( the_thread->current_state == STATES_READY ) {
5a392: 4a80 tstl %d0 <== NOT EXECUTED
5a394: 6618 bnes 5a3ae <_POSIX_signals_Unblock_thread+0xee><== NOT EXECUTED
if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) )
5a396: 4ab9 0005 df92 tstl 5df92 <_Per_CPU_Information+0x8> <== NOT EXECUTED
5a39c: 6710 beqs 5a3ae <_POSIX_signals_Unblock_thread+0xee><== NOT EXECUTED
5a39e: b5f9 0005 df96 cmpal 5df96 <_Per_CPU_Information+0xc>,%a2 <== NOT EXECUTED
5a3a4: 6608 bnes 5a3ae <_POSIX_signals_Unblock_thread+0xee><== NOT EXECUTED
_Thread_Dispatch_necessary = true;
5a3a6: 7001 moveq #1,%d0 <== NOT EXECUTED
5a3a8: 13c0 0005 dfa2 moveb %d0,5dfa2 <_Per_CPU_Information+0x18> <== NOT EXECUTED
}
}
return false;
5a3ae: 4200 clrb %d0 <== NOT EXECUTED
}
5a3b0: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2 <== NOT EXECUTED
5a3b6: 4e5e unlk %fp <== NOT EXECUTED
...
00047254 <_Protected_heap_Extend>:
bool _Protected_heap_Extend(
Heap_Control *the_heap,
void *starting_address,
uintptr_t size
)
{
47254: 4e56 fff8 linkw %fp,#-8 <== NOT EXECUTED
bool extend_ok;
uintptr_t amount_extended;
_RTEMS_Lock_allocator();
47258: 2f39 0005 e204 movel 5e204 <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
4725e: 4eb9 0004 6238 jsr 46238 <_API_Mutex_Lock> <== NOT EXECUTED
extend_ok = _Heap_Extend(the_heap, starting_address, size, &amount_extended);
47264: 486e fffc pea %fp@(-4) <== NOT EXECUTED
47268: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
4726c: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
47270: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
47274: 4eb9 0004 afe8 jsr 4afe8 <_Heap_Extend> <== NOT EXECUTED
_RTEMS_Unlock_allocator();
4727a: 2f39 0005 e204 movel 5e204 <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
47280: 2d40 fff8 movel %d0,%fp@(-8) <== NOT EXECUTED
47284: 4eb9 0004 6298 jsr 46298 <_API_Mutex_Unlock> <== NOT EXECUTED
return extend_ok;
}
4728a: 202e fff8 movel %fp@(-8),%d0 <== NOT EXECUTED
4728e: 4e5e unlk %fp <== NOT EXECUTED
...
0004b33c <_Protected_heap_Get_free_information>:
bool _Protected_heap_Get_free_information(
Heap_Control *the_heap,
Heap_Information *info
)
{
4b33c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
/*
* TBD: _Heap_Get_free_information does not error check or return status.
*/
_RTEMS_Lock_allocator();
4b340: 2f39 0006 3464 movel 63464 <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
4b346: 4eb9 0004 9a2c jsr 49a2c <_API_Mutex_Lock> <== NOT EXECUTED
_Heap_Get_free_information( the_heap, info );
4b34c: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
4b350: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4b354: 4eb9 0004 f28c jsr 4f28c <_Heap_Get_free_information> <== NOT EXECUTED
_RTEMS_Unlock_allocator();
4b35a: 2f39 0006 3464 movel 63464 <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
4b360: 4eb9 0004 9a8c jsr 49a8c <_API_Mutex_Unlock> <== NOT EXECUTED
return true;
}
4b366: 7001 moveq #1,%d0 <== NOT EXECUTED
4b368: 4e5e unlk %fp <== NOT EXECUTED
00047614 <_Protected_heap_Get_information>:
bool _Protected_heap_Get_information(
Heap_Control *the_heap,
Heap_Information_block *the_info
)
{
47614: 4e56 0000 linkw %fp,#0
47618: 2f03 movel %d3,%sp@-
4761a: 262e 000c movel %fp@(12),%d3
4761e: 2f02 movel %d2,%sp@-
47620: 242e 0008 movel %fp@(8),%d2
if ( !the_heap )
47624: 672e beqs 47654 <_Protected_heap_Get_information+0x40><== NEVER TAKEN
return false;
if ( !the_info )
47626: 4a83 tstl %d3
47628: 672a beqs 47654 <_Protected_heap_Get_information+0x40><== NEVER TAKEN
return false;
_RTEMS_Lock_allocator();
4762a: 2f39 0005 e4e8 movel 5e4e8 <_RTEMS_Allocator_Mutex>,%sp@-
47630: 4eb9 0004 65c0 jsr 465c0 <_API_Mutex_Lock>
_Heap_Get_information( the_heap, the_info );
47636: 2f03 movel %d3,%sp@-
47638: 2f02 movel %d2,%sp@-
4763a: 4eb9 0004 b7b4 jsr 4b7b4 <_Heap_Get_information>
_RTEMS_Unlock_allocator();
47640: 2f39 0005 e4e8 movel 5e4e8 <_RTEMS_Allocator_Mutex>,%sp@-
47646: 4eb9 0004 6620 jsr 46620 <_API_Mutex_Unlock>
return true;
4764c: 4fef 0010 lea %sp@(16),%sp
47650: 7001 moveq #1,%d0
47652: 6002 bras 47656 <_Protected_heap_Get_information+0x42>
{
if ( !the_heap )
return false;
if ( !the_info )
return false;
47654: 4200 clrb %d0
_RTEMS_Lock_allocator();
_Heap_Get_information( the_heap, the_info );
_RTEMS_Unlock_allocator();
return true;
}
47656: 242e fff8 movel %fp@(-8),%d2
4765a: 262e fffc movel %fp@(-4),%d3
4765e: 4e5e unlk %fp
...
0005a4c4 <_Protected_heap_Resize_block>:
bool _Protected_heap_Resize_block(
Heap_Control *the_heap,
void *starting_address,
uintptr_t size
)
{
5a4c4: 4e56 fff8 linkw %fp,#-8 <== NOT EXECUTED
5a4c8: 2f02 movel %d2,%sp@- <== NOT EXECUTED
Heap_Resize_status status;
uintptr_t old_mem_size;
uintptr_t avail_mem_size;
_RTEMS_Lock_allocator();
5a4ca: 2f39 0005 dbc8 movel 5dbc8 <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
5a4d0: 4eb9 0004 5f24 jsr 45f24 <_API_Mutex_Lock> <== NOT EXECUTED
status = _Heap_Resize_block(
5a4d6: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
5a4da: 486e fffc pea %fp@(-4) <== NOT EXECUTED
5a4de: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
5a4e2: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
5a4e6: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
5a4ea: 4eb9 0005 a510 jsr 5a510 <_Heap_Resize_block> <== NOT EXECUTED
the_heap, starting_address, size, &old_mem_size, &avail_mem_size );
_RTEMS_Unlock_allocator();
5a4f0: 2f39 0005 dbc8 movel 5dbc8 <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
Heap_Resize_status status;
uintptr_t old_mem_size;
uintptr_t avail_mem_size;
_RTEMS_Lock_allocator();
status = _Heap_Resize_block(
5a4f6: 2400 movel %d0,%d2 <== NOT EXECUTED
the_heap, starting_address, size, &old_mem_size, &avail_mem_size );
_RTEMS_Unlock_allocator();
5a4f8: 4eb9 0004 5f84 jsr 45f84 <_API_Mutex_Unlock> <== NOT EXECUTED
return (status == HEAP_RESIZE_SUCCESSFUL);
5a4fe: 4fef 001c lea %sp@(28),%sp <== NOT EXECUTED
5a502: 4a82 tstl %d2 <== NOT EXECUTED
5a504: 57c0 seq %d0 <== NOT EXECUTED
}
5a506: 242e fff4 movel %fp@(-12),%d2 <== NOT EXECUTED
5a50a: 4480 negl %d0 <== NOT EXECUTED
5a50c: 4e5e unlk %fp <== NOT EXECUTED
0004b418 <_Protected_heap_Walk>:
bool _Protected_heap_Walk(
Heap_Control *the_heap,
int source,
bool do_dump
)
{
4b418: 4e56 fff0 linkw %fp,#-16 <== NOT EXECUTED
* then it is forbidden to lock a mutex. But since we are inside
* a critical section, it should be safe to walk it unlocked.
*
* NOTE: Dispatching is also disabled during initialization.
*/
if ( !_Thread_Dispatch_disable_level ) {
4b41c: 2039 0006 33a4 movel 633a4 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
bool _Protected_heap_Walk(
Heap_Control *the_heap,
int source,
bool do_dump
)
{
4b422: 48d7 001c moveml %d2-%d4,%sp@ <== NOT EXECUTED
4b426: 4284 clrl %d4 <== NOT EXECUTED
4b428: 182e 0013 moveb %fp@(19),%d4 <== NOT EXECUTED
4b42c: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
4b430: 262e 000c movel %fp@(12),%d3 <== NOT EXECUTED
* then it is forbidden to lock a mutex. But since we are inside
* a critical section, it should be safe to walk it unlocked.
*
* NOTE: Dispatching is also disabled during initialization.
*/
if ( !_Thread_Dispatch_disable_level ) {
4b434: 4a80 tstl %d0 <== NOT EXECUTED
4b436: 663a bnes 4b472 <_Protected_heap_Walk+0x5a> <== NOT EXECUTED
_RTEMS_Lock_allocator();
4b438: 2f39 0006 3464 movel 63464 <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
4b43e: 4eb9 0004 9a2c jsr 49a2c <_API_Mutex_Lock> <== NOT EXECUTED
status = _Heap_Walk( the_heap, source, do_dump );
4b444: 2f04 movel %d4,%sp@- <== NOT EXECUTED
4b446: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4b448: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4b44a: 4eb9 0004 a73a jsr 4a73a <_Heap_Walk> <== NOT EXECUTED
_RTEMS_Unlock_allocator();
4b450: 2f39 0006 3464 movel 63464 <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
4b456: 2d40 fffc movel %d0,%fp@(-4) <== NOT EXECUTED
4b45a: 4eb9 0004 9a8c jsr 49a8c <_API_Mutex_Unlock> <== NOT EXECUTED
} else {
status = _Heap_Walk( the_heap, source, do_dump );
}
return status;
}
4b460: 202e fffc movel %fp@(-4),%d0 <== NOT EXECUTED
* NOTE: Dispatching is also disabled during initialization.
*/
if ( !_Thread_Dispatch_disable_level ) {
_RTEMS_Lock_allocator();
status = _Heap_Walk( the_heap, source, do_dump );
_RTEMS_Unlock_allocator();
4b464: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
} else {
status = _Heap_Walk( the_heap, source, do_dump );
}
return status;
}
4b468: 4cee 001c fff0 moveml %fp@(-16),%d2-%d4 <== NOT EXECUTED
4b46e: 4e5e unlk %fp <== NOT EXECUTED
4b470: 4e75 rts <== NOT EXECUTED
if ( !_Thread_Dispatch_disable_level ) {
_RTEMS_Lock_allocator();
status = _Heap_Walk( the_heap, source, do_dump );
_RTEMS_Unlock_allocator();
} else {
status = _Heap_Walk( the_heap, source, do_dump );
4b472: 2d44 0010 movel %d4,%fp@(16) <== NOT EXECUTED
4b476: 2d43 000c movel %d3,%fp@(12) <== NOT EXECUTED
4b47a: 2d42 0008 movel %d2,%fp@(8) <== NOT EXECUTED
}
return status;
}
4b47e: 4cee 001c fff0 moveml %fp@(-16),%d2-%d4 <== NOT EXECUTED
4b484: 4e5e unlk %fp <== NOT EXECUTED
if ( !_Thread_Dispatch_disable_level ) {
_RTEMS_Lock_allocator();
status = _Heap_Walk( the_heap, source, do_dump );
_RTEMS_Unlock_allocator();
} else {
status = _Heap_Walk( the_heap, source, do_dump );
4b486: 4ef9 0004 a73a jmp 4a73a <_Heap_Walk> <== NOT EXECUTED
0004a8ec <_RTEMS_Tasks_Invoke_task_variable_dtor>:
void _RTEMS_Tasks_Invoke_task_variable_dtor(
Thread_Control *the_thread,
rtems_task_variable_t *tvp
)
{
4a8ec: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
void (*dtor)(void *);
void *value;
dtor = tvp->dtor;
if (_Thread_Is_executing(the_thread)) {
4a8f0: 2039 0005 df96 movel 5df96 <_Per_CPU_Information+0xc>,%d0 <== NOT EXECUTED
void _RTEMS_Tasks_Invoke_task_variable_dtor(
Thread_Control *the_thread,
rtems_task_variable_t *tvp
)
{
4a8f6: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4a8f8: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
void (*dtor)(void *);
void *value;
dtor = tvp->dtor;
4a8fc: 206a 0010 moveal %a2@(16),%a0 <== NOT EXECUTED
if (_Thread_Is_executing(the_thread)) {
4a900: b0ae 0008 cmpl %fp@(8),%d0 <== NOT EXECUTED
4a904: 660c bnes 4a912 <_RTEMS_Tasks_Invoke_task_variable_dtor+0x26><== NOT EXECUTED
value = *tvp->ptr;
4a906: 226a 0004 moveal %a2@(4),%a1 <== NOT EXECUTED
4a90a: 2011 movel %a1@,%d0 <== NOT EXECUTED
*tvp->ptr = tvp->gval;
4a90c: 22aa 0008 movel %a2@(8),%a1@ <== NOT EXECUTED
4a910: 6004 bras 4a916 <_RTEMS_Tasks_Invoke_task_variable_dtor+0x2a><== NOT EXECUTED
} else {
value = tvp->tval;
4a912: 202a 000c movel %a2@(12),%d0 <== NOT EXECUTED
}
if ( dtor )
4a916: 4a88 tstl %a0 <== NOT EXECUTED
4a918: 6706 beqs 4a920 <_RTEMS_Tasks_Invoke_task_variable_dtor+0x34><== NOT EXECUTED
(*dtor)(value);
4a91a: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4a91c: 4e90 jsr %a0@ <== NOT EXECUTED
4a91e: 588f addql #4,%sp <== NOT EXECUTED
_Workspace_Free(tvp);
4a920: 2d4a 0008 movel %a2,%fp@(8) <== NOT EXECUTED
}
4a924: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
4a928: 4e5e unlk %fp <== NOT EXECUTED
}
if ( dtor )
(*dtor)(value);
_Workspace_Free(tvp);
4a92a: 4ef9 0004 87b0 jmp 487b0 <_Workspace_Free> <== NOT EXECUTED
0004a82c <_RTEMS_tasks_Create_extension>:
bool _RTEMS_tasks_Create_extension(
Thread_Control *executing,
Thread_Control *created
)
{
4a82c: 4e56 0000 linkw %fp,#0
4a830: 2f0a movel %a2,%sp@-
4a832: 246e 000c moveal %fp@(12),%a2
/*
* Notepads must be the last entry in the structure and they
* can be left off if disabled in the configuration.
*/
to_allocate = sizeof( RTEMS_API_Control );
if ( !rtems_configuration_get_notepads_enabled() )
4a836: 4a39 0005 c224 tstb 5c224 <Configuration_RTEMS_API+0x4>
4a83c: 6704 beqs 4a842 <_RTEMS_tasks_Create_extension+0x16>
/*
* Notepads must be the last entry in the structure and they
* can be left off if disabled in the configuration.
*/
to_allocate = sizeof( RTEMS_API_Control );
4a83e: 705e moveq #94,%d0
4a840: 6002 bras 4a844 <_RTEMS_tasks_Create_extension+0x18>
if ( !rtems_configuration_get_notepads_enabled() )
to_allocate -= (RTEMS_NUMBER_NOTEPADS * sizeof(uint32_t));
4a842: 701e moveq #30,%d0
api = _Workspace_Allocate( to_allocate );
4a844: 2f00 movel %d0,%sp@-
4a846: 4eb9 0004 8794 jsr 48794 <_Workspace_Allocate>
if ( !api )
4a84c: 588f addql #4,%sp
*/
to_allocate = sizeof( RTEMS_API_Control );
if ( !rtems_configuration_get_notepads_enabled() )
to_allocate -= (RTEMS_NUMBER_NOTEPADS * sizeof(uint32_t));
api = _Workspace_Allocate( to_allocate );
4a84e: 2040 moveal %d0,%a0
if ( !api )
4a850: 4a80 tstl %d0
4a852: 673e beqs 4a892 <_RTEMS_tasks_Create_extension+0x66><== NEVER TAKEN
return false;
created->API_Extensions[ THREAD_API_RTEMS ] = api;
4a854: 2540 00fe movel %d0,%a2@(254)
*/
RTEMS_INLINE_ROUTINE void _ASR_Initialize (
ASR_Information *information
)
{
information->is_enabled = false;
4a858: 4200 clrb %d0
api->pending_events = EVENT_SETS_NONE_PENDING;
4a85a: 4290 clrl %a0@
4a85c: 1140 0008 moveb %d0,%a0@(8)
api->event_condition = 0;
4a860: 42a8 0004 clrl %a0@(4)
information->handler = NULL;
4a864: 42a8 000a clrl %a0@(10)
information->mode_set = RTEMS_DEFAULT_MODES;
4a868: 42a8 000e clrl %a0@(14)
information->signals_posted = 0;
4a86c: 42a8 0012 clrl %a0@(18)
information->signals_pending = 0;
4a870: 42a8 0016 clrl %a0@(22)
information->nest_level = 0;
4a874: 42a8 001a clrl %a0@(26)
_ASR_Initialize( &api->Signal );
created->task_variables = NULL;
4a878: 42aa 010a clrl %a2@(266)
if ( rtems_configuration_get_notepads_enabled() ) {
4a87c: 4a39 0005 c224 tstb 5c224 <Configuration_RTEMS_API+0x4>
4a882: 6712 beqs 4a896 <_RTEMS_tasks_Create_extension+0x6a>
* task is created via another API, then this routine is invoked
* and this API given the opportunity to initialize its extension
* area.
*/
bool _RTEMS_tasks_Create_extension(
4a884: 41e8 001e lea %a0@(30),%a0
4a888: 7010 moveq #16,%d0
_ASR_Initialize( &api->Signal );
created->task_variables = NULL;
if ( rtems_configuration_get_notepads_enabled() ) {
for (i=0; i < RTEMS_NUMBER_NOTEPADS; i++)
api->Notepads[i] = 0;
4a88a: 4298 clrl %a0@+
4a88c: 5380 subql #1,%d0
api->event_condition = 0;
_ASR_Initialize( &api->Signal );
created->task_variables = NULL;
if ( rtems_configuration_get_notepads_enabled() ) {
for (i=0; i < RTEMS_NUMBER_NOTEPADS; i++)
4a88e: 66fa bnes 4a88a <_RTEMS_tasks_Create_extension+0x5e>
4a890: 6004 bras 4a896 <_RTEMS_tasks_Create_extension+0x6a>
to_allocate -= (RTEMS_NUMBER_NOTEPADS * sizeof(uint32_t));
api = _Workspace_Allocate( to_allocate );
if ( !api )
return false;
4a892: 4200 clrb %d0 <== NOT EXECUTED
4a894: 6002 bras 4a898 <_RTEMS_tasks_Create_extension+0x6c><== NOT EXECUTED
if ( rtems_configuration_get_notepads_enabled() ) {
for (i=0; i < RTEMS_NUMBER_NOTEPADS; i++)
api->Notepads[i] = 0;
}
return true;
4a896: 7001 moveq #1,%d0
}
4a898: 246e fffc moveal %fp@(-4),%a2
4a89c: 4e5e unlk %fp <== NOT EXECUTED
0004a7e6 <_RTEMS_tasks_Delete_extension>:
void _RTEMS_tasks_Delete_extension(
Thread_Control *executing,
Thread_Control *deleted
)
{
4a7e6: 4e56 fff4 linkw %fp,#-12
4a7ea: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
4a7ee: 246e 000c moveal %fp@(12),%a2
tvp = deleted->task_variables;
deleted->task_variables = NULL;
while (tvp) {
next = (rtems_task_variable_t *)tvp->next;
_RTEMS_Tasks_Invoke_task_variable_dtor( deleted, tvp );
4a7f2: 47f9 0004 a8ec lea 4a8ec <_RTEMS_Tasks_Invoke_task_variable_dtor>,%a3
/*
* Free per task variable memory
*/
tvp = deleted->task_variables;
4a7f8: 206a 010a moveal %a2@(266),%a0
deleted->task_variables = NULL;
4a7fc: 42aa 010a clrl %a2@(266)
while (tvp) {
4a800: 600c bras 4a80e <_RTEMS_tasks_Delete_extension+0x28>
next = (rtems_task_variable_t *)tvp->next;
4a802: 2410 movel %a0@,%d2 <== NOT EXECUTED
_RTEMS_Tasks_Invoke_task_variable_dtor( deleted, tvp );
4a804: 2f08 movel %a0,%sp@- <== NOT EXECUTED
4a806: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4a808: 4e93 jsr %a3@ <== NOT EXECUTED
tvp = next;
4a80a: 508f addql #8,%sp <== NOT EXECUTED
4a80c: 2042 moveal %d2,%a0 <== NOT EXECUTED
* Free per task variable memory
*/
tvp = deleted->task_variables;
deleted->task_variables = NULL;
while (tvp) {
4a80e: 4a88 tstl %a0
4a810: 66f0 bnes 4a802 <_RTEMS_tasks_Delete_extension+0x1c><== NEVER TAKEN
/*
* Free API specific memory
*/
(void) _Workspace_Free( deleted->API_Extensions[ THREAD_API_RTEMS ] );
4a812: 2f2a 00fe movel %a2@(254),%sp@-
4a816: 4eb9 0004 87b0 jsr 487b0 <_Workspace_Free>
deleted->API_Extensions[ THREAD_API_RTEMS ] = NULL;
4a81c: 588f addql #4,%sp
4a81e: 42aa 00fe clrl %a2@(254)
}
4a822: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3
4a828: 4e5e unlk %fp <== NOT EXECUTED
0004a774 <_RTEMS_tasks_Post_switch_extension>:
*/
void _RTEMS_tasks_Post_switch_extension(
Thread_Control *executing
)
{
4a774: 4e56 ffec linkw %fp,#-20
RTEMS_API_Control *api;
ASR_Information *asr;
rtems_signal_set signal_set;
Modes_Control prev_mode;
api = executing->API_Extensions[ THREAD_API_RTEMS ];
4a778: 206e 0008 moveal %fp@(8),%a0
*/
void _RTEMS_tasks_Post_switch_extension(
Thread_Control *executing
)
{
4a77c: 48d7 0c0c moveml %d2-%d3/%a2-%a3,%sp@
RTEMS_API_Control *api;
ASR_Information *asr;
rtems_signal_set signal_set;
Modes_Control prev_mode;
api = executing->API_Extensions[ THREAD_API_RTEMS ];
4a780: 2468 00fe moveal %a0@(254),%a2
if ( !api )
4a784: 4a8a tstl %a2
4a786: 6754 beqs 4a7dc <_RTEMS_tasks_Post_switch_extension+0x68><== NEVER TAKEN
* Signal Processing
*/
asr = &api->Signal;
_ISR_Disable( level );
4a788: 203c 0000 0700 movel #1792,%d0
4a78e: 40c1 movew %sr,%d1
4a790: 8081 orl %d1,%d0
4a792: 46c0 movew %d0,%sr
signal_set = asr->signals_posted;
4a794: 262a 0012 movel %a2@(18),%d3
asr->signals_posted = 0;
4a798: 42aa 0012 clrl %a2@(18)
_ISR_Enable( level );
4a79c: 46c1 movew %d1,%sr
if ( !signal_set ) /* similar to _ASR_Are_signals_pending( asr ) */
4a79e: 4a83 tstl %d3
4a7a0: 673a beqs 4a7dc <_RTEMS_tasks_Post_switch_extension+0x68><== ALWAYS TAKEN
return;
asr->nest_level += 1;
4a7a2: 52aa 001a addql #1,%a2@(26) <== NOT EXECUTED
rtems_task_mode( asr->mode_set, RTEMS_ALL_MODE_MASKS, &prev_mode );
4a7a6: 240e movel %fp,%d2 <== NOT EXECUTED
4a7a8: 5982 subql #4,%d2 <== NOT EXECUTED
4a7aa: 47f9 0004 c4d4 lea 4c4d4 <rtems_task_mode>,%a3 <== NOT EXECUTED
4a7b0: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4a7b2: 2f3c 0000 ffff movel #65535,%sp@- <== NOT EXECUTED
4a7b8: 2f2a 000e movel %a2@(14),%sp@- <== NOT EXECUTED
4a7bc: 4e93 jsr %a3@ <== NOT EXECUTED
(*asr->handler)( signal_set );
4a7be: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4a7c0: 206a 000a moveal %a2@(10),%a0 <== NOT EXECUTED
4a7c4: 4e90 jsr %a0@ <== NOT EXECUTED
asr->nest_level -= 1;
4a7c6: 53aa 001a subql #1,%a2@(26) <== NOT EXECUTED
rtems_task_mode( prev_mode, RTEMS_ALL_MODE_MASKS, &prev_mode );
4a7ca: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4a7cc: 2f3c 0000 ffff movel #65535,%sp@- <== NOT EXECUTED
4a7d2: 2f2e fffc movel %fp@(-4),%sp@- <== NOT EXECUTED
4a7d6: 4e93 jsr %a3@ <== NOT EXECUTED
4a7d8: 4fef 001c lea %sp@(28),%sp <== NOT EXECUTED
}
4a7dc: 4cee 0c0c ffec moveml %fp@(-20),%d2-%d3/%a2-%a3
4a7e2: 4e5e unlk %fp <== NOT EXECUTED
0004a71e <_RTEMS_tasks_Switch_extension>:
void _RTEMS_tasks_Switch_extension(
Thread_Control *executing,
Thread_Control *heir
)
{
4a71e: 4e56 0000 linkw %fp,#0
/*
* Per Task Variables
*/
tvp = executing->task_variables;
4a722: 206e 0008 moveal %fp@(8),%a0
4a726: 2068 010a moveal %a0@(266),%a0
while (tvp) {
4a72a: 600e bras 4a73a <_RTEMS_tasks_Switch_extension+0x1c>
tvp->tval = *tvp->ptr;
4a72c: 2268 0004 moveal %a0@(4),%a1 <== NOT EXECUTED
4a730: 2151 000c movel %a1@,%a0@(12) <== NOT EXECUTED
*tvp->ptr = tvp->gval;
4a734: 22a8 0008 movel %a0@(8),%a1@ <== NOT EXECUTED
tvp = (rtems_task_variable_t *)tvp->next;
4a738: 2050 moveal %a0@,%a0 <== NOT EXECUTED
/*
* Per Task Variables
*/
tvp = executing->task_variables;
while (tvp) {
4a73a: 4a88 tstl %a0
4a73c: 66ee bnes 4a72c <_RTEMS_tasks_Switch_extension+0xe><== NEVER TAKEN
tvp->tval = *tvp->ptr;
*tvp->ptr = tvp->gval;
tvp = (rtems_task_variable_t *)tvp->next;
}
tvp = heir->task_variables;
4a73e: 206e 000c moveal %fp@(12),%a0
4a742: 2068 010a moveal %a0@(266),%a0
while (tvp) {
4a746: 600e bras 4a756 <_RTEMS_tasks_Switch_extension+0x38>
tvp->gval = *tvp->ptr;
4a748: 2268 0004 moveal %a0@(4),%a1 <== NOT EXECUTED
4a74c: 2151 0008 movel %a1@,%a0@(8) <== NOT EXECUTED
*tvp->ptr = tvp->tval;
4a750: 22a8 000c movel %a0@(12),%a1@ <== NOT EXECUTED
tvp = (rtems_task_variable_t *)tvp->next;
4a754: 2050 moveal %a0@,%a0 <== NOT EXECUTED
*tvp->ptr = tvp->gval;
tvp = (rtems_task_variable_t *)tvp->next;
}
tvp = heir->task_variables;
while (tvp) {
4a756: 4a88 tstl %a0
4a758: 66ee bnes 4a748 <_RTEMS_tasks_Switch_extension+0x2a><== NEVER TAKEN
tvp->gval = *tvp->ptr;
*tvp->ptr = tvp->tval;
tvp = (rtems_task_variable_t *)tvp->next;
}
}
4a75a: 4e5e unlk %fp <== NOT EXECUTED
00046120 <_Rate_monotonic_Get_status>:
bool _Rate_monotonic_Get_status(
Rate_monotonic_Control *the_period,
Rate_monotonic_Period_time_t *wall_since_last_period,
Thread_CPU_usage_t *cpu_since_last_period
)
{
46120: 4e56 ffd4 linkw %fp,#-44 <== NOT EXECUTED
46124: 48d7 1c0c moveml %d2-%d3/%a2-%a4,%sp@ <== NOT EXECUTED
46128: 266e 0008 moveal %fp@(8),%a3 <== NOT EXECUTED
/*
* Determine elapsed wall time since period initiated.
*/
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
_TOD_Get_uptime( &uptime );
4612c: 240e movel %fp,%d2 <== NOT EXECUTED
4612e: 5182 subql #8,%d2 <== NOT EXECUTED
_Timestamp_Subtract(
46130: 45f9 0004 998c lea 4998c <_Timespec_Subtract>,%a2 <== NOT EXECUTED
)
{
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
Timestamp_Control uptime;
#endif
Thread_Control *owning_thread = the_period->owner;
46136: 286b 0040 moveal %a3@(64),%a4 <== NOT EXECUTED
/*
* Determine elapsed wall time since period initiated.
*/
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
_TOD_Get_uptime( &uptime );
4613a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4613c: 4eb9 0004 78d0 jsr 478d0 <_TOD_Get_uptime> <== NOT EXECUTED
_Timestamp_Subtract(
46142: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
46146: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46148: 486b 004c pea %a3@(76) <== NOT EXECUTED
4614c: 4e92 jsr %a2@ <== NOT EXECUTED
* Determine cpu usage since period initiated.
*/
used = owning_thread->cpu_time_used;
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
if (owning_thread == _Thread_Executing) {
4614e: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
#endif
/*
* Determine cpu usage since period initiated.
*/
used = owning_thread->cpu_time_used;
46152: 202c 0082 movel %a4@(130),%d0 <== NOT EXECUTED
46156: 222c 0086 movel %a4@(134),%d1 <== NOT EXECUTED
4615a: 2d40 fff0 movel %d0,%fp@(-16) <== NOT EXECUTED
4615e: 2d41 fff4 movel %d1,%fp@(-12) <== NOT EXECUTED
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
if (owning_thread == _Thread_Executing) {
46162: b9f9 0005 fc10 cmpal 5fc10 <_Per_CPU_Information+0xc>,%a4 <== NOT EXECUTED
46168: 6644 bnes 461ae <_Rate_monotonic_Get_status+0x8e><== NOT EXECUTED
Thread_CPU_usage_t ran;
/* How much time time since last context switch */
_Timestamp_Subtract(
4616a: 260e movel %fp,%d3 <== NOT EXECUTED
4616c: 0683 ffff ffe8 addil #-24,%d3 <== NOT EXECUTED
/*
* The cpu usage info was reset while executing. Can't
* determine a status.
*/
if (_Timestamp_Less_than(&used, &the_period->cpu_usage_period_initiated))
46172: 47eb 0044 lea %a3@(68),%a3 <== NOT EXECUTED
if (owning_thread == _Thread_Executing) {
Thread_CPU_usage_t ran;
/* How much time time since last context switch */
_Timestamp_Subtract(
46176: 2f03 movel %d3,%sp@- <== NOT EXECUTED
46178: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4617a: 4879 0005 f84e pea 5f84e <_Thread_Time_of_last_context_switch><== NOT EXECUTED
&_Thread_Time_of_last_context_switch, &uptime, &ran
);
/* cpu usage += ran */
_Timestamp_Add_to( &used, &ran );
46180: 5182 subql #8,%d2 <== NOT EXECUTED
if (owning_thread == _Thread_Executing) {
Thread_CPU_usage_t ran;
/* How much time time since last context switch */
_Timestamp_Subtract(
46182: 4e92 jsr %a2@ <== NOT EXECUTED
&_Thread_Time_of_last_context_switch, &uptime, &ran
);
/* cpu usage += ran */
_Timestamp_Add_to( &used, &ran );
46184: 2f03 movel %d3,%sp@- <== NOT EXECUTED
46186: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46188: 4eb9 0004 9864 jsr 49864 <_Timespec_Add_to> <== NOT EXECUTED
/*
* The cpu usage info was reset while executing. Can't
* determine a status.
*/
if (_Timestamp_Less_than(&used, &the_period->cpu_usage_period_initiated))
4618e: 2f0b movel %a3,%sp@- <== NOT EXECUTED
46190: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46192: 4eb9 0004 995c jsr 4995c <_Timespec_Less_than> <== NOT EXECUTED
46198: 4fef 001c lea %sp@(28),%sp <== NOT EXECUTED
4619c: 4a00 tstb %d0 <== NOT EXECUTED
4619e: 6612 bnes 461b2 <_Rate_monotonic_Get_status+0x92><== NOT EXECUTED
return false;
/* used = current cpu usage - cpu usage at start of period */
_Timestamp_Subtract(
461a0: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
461a4: 2f02 movel %d2,%sp@- <== NOT EXECUTED
461a6: 2f0b movel %a3,%sp@- <== NOT EXECUTED
461a8: 4e92 jsr %a2@ <== NOT EXECUTED
461aa: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
if (used < the_period->cpu_usage_period_initiated)
return false;
*cpu_since_last_period = used - the_period->cpu_usage_period_initiated;
#endif
return true;
461ae: 7001 moveq #1,%d0 <== NOT EXECUTED
461b0: 6002 bras 461b4 <_Rate_monotonic_Get_status+0x94><== NOT EXECUTED
/*
* The cpu usage info was reset while executing. Can't
* determine a status.
*/
if (_Timestamp_Less_than(&used, &the_period->cpu_usage_period_initiated))
return false;
461b2: 4200 clrb %d0 <== NOT EXECUTED
return false;
*cpu_since_last_period = used - the_period->cpu_usage_period_initiated;
#endif
return true;
}
461b4: 4cee 1c0c ffd4 moveml %fp@(-44),%d2-%d3/%a2-%a4 <== NOT EXECUTED
461ba: 4e5e unlk %fp <== NOT EXECUTED
000461be <_Rate_monotonic_Initiate_statistics>:
void _Rate_monotonic_Initiate_statistics(
Rate_monotonic_Control *the_period
)
{
461be: 4e56 ffe0 linkw %fp,#-32 <== NOT EXECUTED
461c2: 48d7 0c0c moveml %d2-%d3/%a2-%a3,%sp@ <== NOT EXECUTED
461c6: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
* If using nanosecond statistics, we need to obtain the uptime.
*/
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
Timestamp_Control uptime;
_TOD_Get_uptime( &uptime );
461ca: 260e movel %fp,%d3 <== NOT EXECUTED
461cc: 5183 subql #8,%d3 <== NOT EXECUTED
void _Rate_monotonic_Initiate_statistics(
Rate_monotonic_Control *the_period
)
{
Thread_Control *owning_thread = the_period->owner;
461ce: 266a 0040 moveal %a2@(64),%a3 <== NOT EXECUTED
* If using nanosecond statistics, we need to obtain the uptime.
*/
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
Timestamp_Control uptime;
_TOD_Get_uptime( &uptime );
461d2: 2f03 movel %d3,%sp@- <== NOT EXECUTED
461d4: 4eb9 0004 78d0 jsr 478d0 <_TOD_Get_uptime> <== NOT EXECUTED
* routine is invoked from rtems_rate_monotonic_period, the owner will
* be the executing thread. When this routine is invoked from
* _Rate_monotonic_Timeout, it will not.
*/
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
if (owning_thread == _Thread_Executing) {
461da: 588f addql #4,%sp <== NOT EXECUTED
/*
* Set the starting point and the CPU time used for the statistics.
*/
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
the_period->time_period_initiated = uptime;
461dc: 202e fff8 movel %fp@(-8),%d0 <== NOT EXECUTED
461e0: 222e fffc movel %fp@(-4),%d1 <== NOT EXECUTED
461e4: 2540 004c movel %d0,%a2@(76) <== NOT EXECUTED
461e8: 2541 0050 movel %d1,%a2@(80) <== NOT EXECUTED
#else
the_period->time_period_initiated = _Watchdog_Ticks_since_boot;
#endif
the_period->cpu_usage_period_initiated = owning_thread->cpu_time_used;
461ec: 202b 0082 movel %a3@(130),%d0 <== NOT EXECUTED
461f0: 222b 0086 movel %a3@(134),%d1 <== NOT EXECUTED
461f4: 2540 0044 movel %d0,%a2@(68) <== NOT EXECUTED
461f8: 2541 0048 movel %d1,%a2@(72) <== NOT EXECUTED
* routine is invoked from rtems_rate_monotonic_period, the owner will
* be the executing thread. When this routine is invoked from
* _Rate_monotonic_Timeout, it will not.
*/
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
if (owning_thread == _Thread_Executing) {
461fc: b7f9 0005 fc10 cmpal 5fc10 <_Per_CPU_Information+0xc>,%a3 <== NOT EXECUTED
46202: 6628 bnes 4622c <_Rate_monotonic_Initiate_statistics+0x6e><== NOT EXECUTED
/*
* Adjust the CPU time used to account for the time since last
* context switch.
*/
_Timespec_Subtract(
&_Thread_Time_of_last_context_switch, &uptime, &ran
46204: 240e movel %fp,%d2 <== NOT EXECUTED
46206: 0682 ffff fff0 addil #-16,%d2 <== NOT EXECUTED
/*
* Adjust the CPU time used to account for the time since last
* context switch.
*/
_Timespec_Subtract(
4620c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4620e: 2f03 movel %d3,%sp@- <== NOT EXECUTED
46210: 4879 0005 f84e pea 5f84e <_Thread_Time_of_last_context_switch><== NOT EXECUTED
46216: 4eb9 0004 998c jsr 4998c <_Timespec_Subtract> <== NOT EXECUTED
&_Thread_Time_of_last_context_switch, &uptime, &ran
);
_Timespec_Add_to( &the_period->cpu_usage_period_initiated, &ran );
4621c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4621e: 486a 0044 pea %a2@(68) <== NOT EXECUTED
46222: 4eb9 0004 9864 jsr 49864 <_Timespec_Add_to> <== NOT EXECUTED
46228: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
}
#endif
}
4622c: 4cee 0c0c ffe0 moveml %fp@(-32),%d2-%d3/%a2-%a3 <== NOT EXECUTED
46232: 4e5e unlk %fp <== NOT EXECUTED
000466ec <_Rate_monotonic_Timeout>:
void _Rate_monotonic_Timeout(
Objects_Id id,
void *ignored
)
{
466ec: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
466f0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
466f2: 486e fffc pea %fp@(-4) <== NOT EXECUTED
466f6: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
466fa: 4879 0005 f68c pea 5f68c <_Rate_monotonic_Information> <== NOT EXECUTED
46700: 4eb9 0004 82fc jsr 482fc <_Objects_Get> <== NOT EXECUTED
/*
* When we get here, the Timer is already off the chain so we do not
* have to worry about that -- hence no _Watchdog_Remove().
*/
the_period = _Rate_monotonic_Get( id, &location );
switch ( location ) {
46706: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4670a: 2440 moveal %d0,%a2 <== NOT EXECUTED
4670c: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
46710: 6600 0096 bnew 467a8 <_Rate_monotonic_Timeout+0xbc> <== NOT EXECUTED
case OBJECTS_LOCAL:
the_thread = the_period->owner;
46714: 206a 0040 moveal %a2@(64),%a0 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE bool _States_Is_waiting_for_period (
States_Control the_states
)
{
return (the_states & STATES_WAITING_FOR_PERIOD);
46718: 2028 0010 movel %a0@(16),%d0 <== NOT EXECUTED
4671c: 0280 0000 4000 andil #16384,%d0 <== NOT EXECUTED
if ( _States_Is_waiting_for_period( the_thread->current_state ) &&
46722: 673c beqs 46760 <_Rate_monotonic_Timeout+0x74> <== NOT EXECUTED
46724: 202a 0008 movel %a2@(8),%d0 <== NOT EXECUTED
46728: b0a8 0020 cmpl %a0@(32),%d0 <== NOT EXECUTED
4672c: 6632 bnes 46760 <_Rate_monotonic_Timeout+0x74> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Thread_Unblock (
Thread_Control *the_thread
)
{
_Thread_Clear_state( the_thread, STATES_BLOCKED );
4672e: 2f3c 1003 fff8 movel #268697592,%sp@- <== NOT EXECUTED
46734: 2f08 movel %a0,%sp@- <== NOT EXECUTED
46736: 4eb9 0004 8a78 jsr 48a78 <_Thread_Clear_state> <== NOT EXECUTED
the_thread->Wait.id == the_period->Object.id ) {
_Thread_Unblock( the_thread );
_Rate_monotonic_Initiate_statistics( the_period );
4673c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4673e: 4eb9 0004 61be jsr 461be <_Rate_monotonic_Initiate_statistics><== NOT EXECUTED
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
46744: 256a 003c 001c movel %a2@(60),%a2@(28) <== NOT EXECUTED
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
4674a: 486a 0010 pea %a2@(16) <== NOT EXECUTED
4674e: 4879 0005 f862 pea 5f862 <_Watchdog_Ticks_chain> <== NOT EXECUTED
46754: 4eb9 0004 9c40 jsr 49c40 <_Watchdog_Insert> <== NOT EXECUTED
_Watchdog_Insert_ticks( &the_period->Timer, the_period->next_length );
4675a: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
4675e: 603a bras 4679a <_Rate_monotonic_Timeout+0xae> <== NOT EXECUTED
} else if ( the_period->state == RATE_MONOTONIC_OWNER_IS_BLOCKING ) {
46760: 7001 moveq #1,%d0 <== NOT EXECUTED
46762: b0aa 0038 cmpl %a2@(56),%d0 <== NOT EXECUTED
46766: 662c bnes 46794 <_Rate_monotonic_Timeout+0xa8> <== NOT EXECUTED
the_period->state = RATE_MONOTONIC_EXPIRED_WHILE_BLOCKING;
46768: 103c 0003 moveb #3,%d0 <== NOT EXECUTED
4676c: 2540 0038 movel %d0,%a2@(56) <== NOT EXECUTED
_Rate_monotonic_Initiate_statistics( the_period );
46770: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46772: 4eb9 0004 61be jsr 461be <_Rate_monotonic_Initiate_statistics><== NOT EXECUTED
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
46778: 256a 003c 001c movel %a2@(60),%a2@(28) <== NOT EXECUTED
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
4677e: 486a 0010 pea %a2@(16) <== NOT EXECUTED
46782: 4879 0005 f862 pea 5f862 <_Watchdog_Ticks_chain> <== NOT EXECUTED
46788: 4eb9 0004 9c40 jsr 49c40 <_Watchdog_Insert> <== NOT EXECUTED
4678e: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
46792: 6006 bras 4679a <_Rate_monotonic_Timeout+0xae> <== NOT EXECUTED
_Watchdog_Insert_ticks( &the_period->Timer, the_period->next_length );
} else
the_period->state = RATE_MONOTONIC_EXPIRED;
46794: 7004 moveq #4,%d0 <== NOT EXECUTED
46796: 2540 0038 movel %d0,%a2@(56) <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void )
{
RTEMS_COMPILER_MEMORY_BARRIER();
_Thread_Dispatch_disable_level -= 1;
4679a: 2039 0005 f782 movel 5f782 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
467a0: 5380 subql #1,%d0 <== NOT EXECUTED
467a2: 23c0 0005 f782 movel %d0,5f782 <_Thread_Dispatch_disable_level><== NOT EXECUTED
case OBJECTS_REMOTE: /* impossible */
#endif
case OBJECTS_ERROR:
break;
}
}
467a8: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
467ac: 4e5e unlk %fp <== NOT EXECUTED
00046236 <_Rate_monotonic_Update_statistics>:
* Update the counts.
*/
stats = &the_period->Statistics;
stats->count++;
if ( the_period->state == RATE_MONOTONIC_EXPIRED )
46236: 7004 moveq #4,%d0 <== NOT EXECUTED
}
void _Rate_monotonic_Update_statistics(
Rate_monotonic_Control *the_period
)
{
46238: 4e56 fff0 linkw %fp,#-16 <== NOT EXECUTED
4623c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4623e: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
46242: 2f02 movel %d2,%sp@- <== NOT EXECUTED
/*
* Update the counts.
*/
stats = &the_period->Statistics;
stats->count++;
46244: 52aa 0054 addql #1,%a2@(84) <== NOT EXECUTED
if ( the_period->state == RATE_MONOTONIC_EXPIRED )
46248: b0aa 0038 cmpl %a2@(56),%d0 <== NOT EXECUTED
4624c: 6604 bnes 46252 <_Rate_monotonic_Update_statistics+0x1c><== NOT EXECUTED
stats->missed_count++;
4624e: 52aa 0058 addql #1,%a2@(88) <== NOT EXECUTED
/*
* Grab status for time statistics.
*/
valid_status =
_Rate_monotonic_Get_status( the_period, &since_last_period, &executed );
46252: 240e movel %fp,%d2 <== NOT EXECUTED
46254: 5182 subql #8,%d2 <== NOT EXECUTED
stats->missed_count++;
/*
* Grab status for time statistics.
*/
valid_status =
46256: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46258: 486e fff0 pea %fp@(-16) <== NOT EXECUTED
4625c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4625e: 4eb9 0004 6120 jsr 46120 <_Rate_monotonic_Get_status> <== NOT EXECUTED
_Rate_monotonic_Get_status( the_period, &since_last_period, &executed );
if (!valid_status)
46264: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
46268: 4a00 tstb %d0 <== NOT EXECUTED
4626a: 6700 00b2 beqw 4631e <_Rate_monotonic_Update_statistics+0xe8><== NOT EXECUTED
/*
* Update CPU time
*/
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
_Timestamp_Add_to( &stats->total_cpu_time, &executed );
4626e: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46270: 486a 006c pea %a2@(108) <== NOT EXECUTED
46274: 4eb9 0004 9864 jsr 49864 <_Timespec_Add_to> <== NOT EXECUTED
if ( _Timestamp_Less_than( &executed, &stats->min_cpu_time ) )
4627a: 486a 005c pea %a2@(92) <== NOT EXECUTED
4627e: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46280: 4eb9 0004 995c jsr 4995c <_Timespec_Less_than> <== NOT EXECUTED
46286: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
4628a: 4a00 tstb %d0 <== NOT EXECUTED
4628c: 6710 beqs 4629e <_Rate_monotonic_Update_statistics+0x68><== NOT EXECUTED
stats->min_cpu_time = executed;
4628e: 202e fff8 movel %fp@(-8),%d0 <== NOT EXECUTED
46292: 222e fffc movel %fp@(-4),%d1 <== NOT EXECUTED
46296: 2540 005c movel %d0,%a2@(92) <== NOT EXECUTED
4629a: 2541 0060 movel %d1,%a2@(96) <== NOT EXECUTED
if ( _Timestamp_Greater_than( &executed, &stats->max_cpu_time ) )
4629e: 486a 0064 pea %a2@(100) <== NOT EXECUTED
462a2: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
462a6: 4eb9 0004 992c jsr 4992c <_Timespec_Greater_than> <== NOT EXECUTED
462ac: 508f addql #8,%sp <== NOT EXECUTED
462ae: 4a00 tstb %d0 <== NOT EXECUTED
462b0: 6710 beqs 462c2 <_Rate_monotonic_Update_statistics+0x8c><== NOT EXECUTED
stats->max_cpu_time = executed;
462b2: 202e fff8 movel %fp@(-8),%d0 <== NOT EXECUTED
462b6: 222e fffc movel %fp@(-4),%d1 <== NOT EXECUTED
462ba: 2540 0064 movel %d0,%a2@(100) <== NOT EXECUTED
462be: 2541 0068 movel %d1,%a2@(104) <== NOT EXECUTED
/*
* Update Wall time
*/
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
_Timestamp_Add_to( &stats->total_wall_time, &since_last_period );
462c2: 240e movel %fp,%d2 <== NOT EXECUTED
462c4: 0682 ffff fff0 addil #-16,%d2 <== NOT EXECUTED
462ca: 2f02 movel %d2,%sp@- <== NOT EXECUTED
462cc: 486a 0084 pea %a2@(132) <== NOT EXECUTED
462d0: 4eb9 0004 9864 jsr 49864 <_Timespec_Add_to> <== NOT EXECUTED
if ( _Timestamp_Less_than( &since_last_period, &stats->min_wall_time ) )
462d6: 486a 0074 pea %a2@(116) <== NOT EXECUTED
462da: 2f02 movel %d2,%sp@- <== NOT EXECUTED
462dc: 4eb9 0004 995c jsr 4995c <_Timespec_Less_than> <== NOT EXECUTED
462e2: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
462e6: 4a00 tstb %d0 <== NOT EXECUTED
462e8: 6710 beqs 462fa <_Rate_monotonic_Update_statistics+0xc4><== NOT EXECUTED
stats->min_wall_time = since_last_period;
462ea: 202e fff0 movel %fp@(-16),%d0 <== NOT EXECUTED
462ee: 222e fff4 movel %fp@(-12),%d1 <== NOT EXECUTED
462f2: 2540 0074 movel %d0,%a2@(116) <== NOT EXECUTED
462f6: 2541 0078 movel %d1,%a2@(120) <== NOT EXECUTED
if ( _Timestamp_Greater_than( &since_last_period, &stats->max_wall_time ) )
462fa: 486a 007c pea %a2@(124) <== NOT EXECUTED
462fe: 486e fff0 pea %fp@(-16) <== NOT EXECUTED
46302: 4eb9 0004 992c jsr 4992c <_Timespec_Greater_than> <== NOT EXECUTED
46308: 508f addql #8,%sp <== NOT EXECUTED
4630a: 4a00 tstb %d0 <== NOT EXECUTED
4630c: 6710 beqs 4631e <_Rate_monotonic_Update_statistics+0xe8><== NOT EXECUTED
stats->max_wall_time = since_last_period;
4630e: 202e fff0 movel %fp@(-16),%d0 <== NOT EXECUTED
46312: 222e fff4 movel %fp@(-12),%d1 <== NOT EXECUTED
46316: 2540 007c movel %d0,%a2@(124) <== NOT EXECUTED
4631a: 2541 0080 movel %d1,%a2@(128) <== NOT EXECUTED
stats->min_wall_time = since_last_period;
if ( since_last_period > stats->max_wall_time )
stats->max_wall_time = since_last_period;
#endif
}
4631e: 242e ffe8 movel %fp@(-24),%d2 <== NOT EXECUTED
46322: 246e ffec moveal %fp@(-20),%a2 <== NOT EXECUTED
46326: 4e5e unlk %fp <== NOT EXECUTED
00058050 <_Region_Process_queue>:
*/
void _Region_Process_queue(
Region_Control *the_region
)
{
58050: 4e56 ffe4 linkw %fp,#-28 <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
58054: 2039 0007 65ac movel 765ac <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
5805a: 5280 addql #1,%d0 <== NOT EXECUTED
5805c: 48d7 3c1c moveml %d2-%d4/%a2-%a5,%sp@ <== NOT EXECUTED
58060: 266e 0008 moveal %fp@(8),%a3 <== NOT EXECUTED
58064: 23c0 0007 65ac movel %d0,765ac <_Thread_Dispatch_disable_level><== NOT EXECUTED
* NOTE: Be sure to disable dispatching before unlocking the mutex
* since we do not want to open a window where a context
* switch could occur.
*/
_Thread_Disable_dispatch();
_RTEMS_Unlock_allocator();
5806a: 2f39 0007 666c movel 7666c <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
/*
* NOTE: The following loop is O(n) where n is the number of
* threads whose memory request is satisfied.
*/
for ( ; ; ) {
the_thread = _Thread_queue_First( &the_region->Wait_queue );
58070: 240b movel %a3,%d2 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void *_Region_Allocate_segment (
Region_Control *the_region,
uintptr_t size
)
{
return _Heap_Allocate( &the_region->Memory, size );
58072: 260b movel %a3,%d3 <== NOT EXECUTED
58074: 0682 0000 0010 addil #16,%d2 <== NOT EXECUTED
5807a: 0683 0000 0068 addil #104,%d3 <== NOT EXECUTED
58080: 4bf9 0005 3490 lea 53490 <_Heap_Allocate_aligned_with_boundary>,%a5<== NOT EXECUTED
if ( the_segment == NULL )
break;
*(void **)the_thread->Wait.return_argument = the_segment;
the_region->number_of_used_blocks += 1;
_Thread_queue_Extract( &the_region->Wait_queue, the_thread );
58086: 49f9 0005 87a0 lea 587a0 <_Thread_queue_Extract>,%a4 <== NOT EXECUTED
* NOTE: Be sure to disable dispatching before unlocking the mutex
* since we do not want to open a window where a context
* switch could occur.
*/
_Thread_Disable_dispatch();
_RTEMS_Unlock_allocator();
5808c: 4eb9 0005 2a14 jsr 52a14 <_API_Mutex_Unlock> <== NOT EXECUTED
58092: 588f addql #4,%sp <== NOT EXECUTED
/*
* NOTE: The following loop is O(n) where n is the number of
* threads whose memory request is satisfied.
*/
for ( ; ; ) {
the_thread = _Thread_queue_First( &the_region->Wait_queue );
58094: 283c 0005 88a4 movel #362660,%d4 <== NOT EXECUTED
5809a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
5809c: 2044 moveal %d4,%a0 <== NOT EXECUTED
5809e: 4e90 jsr %a0@ <== NOT EXECUTED
if ( the_thread == NULL )
580a0: 588f addql #4,%sp <== NOT EXECUTED
/*
* NOTE: The following loop is O(n) where n is the number of
* threads whose memory request is satisfied.
*/
for ( ; ; ) {
the_thread = _Thread_queue_First( &the_region->Wait_queue );
580a2: 2440 moveal %d0,%a2 <== NOT EXECUTED
if ( the_thread == NULL )
580a4: 4a80 tstl %d0 <== NOT EXECUTED
580a6: 672c beqs 580d4 <_Region_Process_queue+0x84> <== NOT EXECUTED
580a8: 42a7 clrl %sp@- <== NOT EXECUTED
580aa: 42a7 clrl %sp@- <== NOT EXECUTED
580ac: 2f2a 0024 movel %a2@(36),%sp@- <== NOT EXECUTED
580b0: 2f03 movel %d3,%sp@- <== NOT EXECUTED
580b2: 4e95 jsr %a5@ <== NOT EXECUTED
the_segment = (void **) _Region_Allocate_segment(
the_region,
the_thread->Wait.count
);
if ( the_segment == NULL )
580b4: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
580b8: 4a80 tstl %d0 <== NOT EXECUTED
580ba: 6718 beqs 580d4 <_Region_Process_queue+0x84> <== NOT EXECUTED
break;
*(void **)the_thread->Wait.return_argument = the_segment;
580bc: 206a 0028 moveal %a2@(40),%a0 <== NOT EXECUTED
580c0: 2080 movel %d0,%a0@ <== NOT EXECUTED
the_region->number_of_used_blocks += 1;
580c2: 52ab 0064 addql #1,%a3@(100) <== NOT EXECUTED
_Thread_queue_Extract( &the_region->Wait_queue, the_thread );
580c6: 2f0a movel %a2,%sp@- <== NOT EXECUTED
580c8: 2f02 movel %d2,%sp@- <== NOT EXECUTED
580ca: 4e94 jsr %a4@ <== NOT EXECUTED
the_thread->Wait.return_code = RTEMS_SUCCESSFUL;
}
580cc: 508f addql #8,%sp <== NOT EXECUTED
break;
*(void **)the_thread->Wait.return_argument = the_segment;
the_region->number_of_used_blocks += 1;
_Thread_queue_Extract( &the_region->Wait_queue, the_thread );
the_thread->Wait.return_code = RTEMS_SUCCESSFUL;
580ce: 42aa 0034 clrl %a2@(52) <== NOT EXECUTED
}
580d2: 60c6 bras 5809a <_Region_Process_queue+0x4a> <== NOT EXECUTED
_Thread_Enable_dispatch();
}
580d4: 4cee 3c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a5 <== NOT EXECUTED
580da: 4e5e unlk %fp <== NOT EXECUTED
*(void **)the_thread->Wait.return_argument = the_segment;
the_region->number_of_used_blocks += 1;
_Thread_queue_Extract( &the_region->Wait_queue, the_thread );
the_thread->Wait.return_code = RTEMS_SUCCESSFUL;
}
_Thread_Enable_dispatch();
580dc: 4ef9 0005 4eca jmp 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
...
0004ae7c <_Scheduler_priority_Block>:
void _Scheduler_priority_Block(
Scheduler_Control *the_scheduler,
Thread_Control *the_thread
)
{
4ae7c: 4e56 0000 linkw %fp,#0
4ae80: 226e 000c moveal %fp@(12),%a1
4ae84: 2f0a movel %a2,%sp@-
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_extract(
Thread_Control *the_thread
)
{
Chain_Control *ready = the_thread->scheduler.priority->ready_chain;
4ae86: 2069 008a moveal %a1@(138),%a0
4ae8a: 2050 moveal %a0@,%a0
if ( _Chain_Has_only_one_node( ready ) ) {
4ae8c: 2028 0008 movel %a0@(8),%d0
4ae90: b090 cmpl %a0@,%d0
4ae92: 6636 bnes 4aeca <_Scheduler_priority_Block+0x4e>
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
4ae94: 2008 movel %a0,%d0
4ae96: 5880 addql #4,%d0
head->next = tail;
head->previous = NULL;
4ae98: 42a8 0004 clrl %a0@(4)
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
4ae9c: 2080 movel %d0,%a0@
head->next = tail;
head->previous = NULL;
tail->previous = head;
4ae9e: 2148 0008 movel %a0,%a0@(8)
_Chain_Initialize_empty( ready );
_Priority_bit_map_Remove( &the_thread->scheduler.priority->Priority_map );
4aea2: 2069 008a moveal %a1@(138),%a0
RTEMS_INLINE_ROUTINE void _Priority_bit_map_Remove (
Priority_bit_map_Information *the_priority_map
)
{
*the_priority_map->minor &= the_priority_map->block_minor;
4aea6: 2468 0004 moveal %a0@(4),%a2
4aeaa: 3028 000e movew %a0@(14),%d0
4aeae: 3212 movew %a2@,%d1
4aeb0: c081 andl %d1,%d0
4aeb2: 3480 movew %d0,%a2@
if ( *the_priority_map->minor == 0 )
4aeb4: 6620 bnes 4aed6 <_Scheduler_priority_Block+0x5a>
_Priority_Major_bit_map &= the_priority_map->block_major;
4aeb6: 3039 0005 dfa4 movew 5dfa4 <_Priority_Major_bit_map>,%d0
4aebc: 3228 000c movew %a0@(12),%d1
4aec0: c081 andl %d1,%d0
4aec2: 33c0 0005 dfa4 movew %d0,5dfa4 <_Priority_Major_bit_map>
4aec8: 600c bras 4aed6 <_Scheduler_priority_Block+0x5a>
)
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
4aeca: 2451 moveal %a1@,%a2
previous = the_node->previous;
4aecc: 2069 0004 moveal %a1@(4),%a0
next->previous = previous;
4aed0: 2548 0004 movel %a0,%a2@(4)
previous->next = next;
4aed4: 208a movel %a2,%a0@
{
_Scheduler_priority_Ready_queue_extract(the_thread);
/* TODO: flash critical section */
if ( _Thread_Is_heir( the_thread ) )
4aed6: b3f9 0005 df9a cmpal 5df9a <_Per_CPU_Information+0x10>,%a1
4aedc: 6646 bnes 4af24 <_Scheduler_priority_Block+0xa8>
RTEMS_INLINE_ROUTINE Priority_Control _Priority_bit_map_Get_highest( void )
{
Priority_bit_map_Control minor;
Priority_bit_map_Control major;
_Bitfield_Find_first_bit( _Priority_Major_bit_map, major );
4aede: 3039 0005 dfa4 movew 5dfa4 <_Priority_Major_bit_map>,%d0
4aee4: 4840 swap %d0
4aee6: 04c0 ff1 %d0
_Bitfield_Find_first_bit( _Priority_Bit_map[major], minor );
4aee8: 41f9 0005 dfa8 lea 5dfa8 <_Priority_Bit_map>,%a0
4aeee: 0280 0000 ffff andil #65535,%d0
4aef4: 3230 0a00 movew %a0@(00000000,%d0:l:2),%d1
4aef8: 4841 swap %d1
4aefa: 04c1 ff1 %d1
_Scheduler_priority_Block_body(the_scheduler, the_thread);
}
4aefc: 206e 0008 moveal %fp@(8),%a0
return (_Priority_Bits_index( major ) << 4) +
4af00: 0281 0000 ffff andil #65535,%d1
4af06: e988 lsll #4,%d0
4af08: 2050 moveal %a0@,%a0
4af0a: d081 addl %d1,%d0
Chain_Control *the_ready_queue
)
{
Priority_Control index = _Priority_bit_map_Get_highest();
if ( !_Chain_Is_empty( &the_ready_queue[ index ] ) )
4af0c: 2200 movel %d0,%d1
4af0e: e988 lsll #4,%d0
4af10: e589 lsll #2,%d1
4af12: 9081 subl %d1,%d0
4af14: d1c0 addal %d0,%a0
4af16: 2018 movel %a0@+,%d0
4af18: b1c0 cmpal %d0,%a0
4af1a: 6602 bnes 4af1e <_Scheduler_priority_Block+0xa2> <== ALWAYS TAKEN
return (Thread_Control *) _Chain_First( &the_ready_queue[ index ] );
return NULL;
4af1c: 4280 clrl %d0 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Schedule_body(
Scheduler_Control *the_scheduler
)
{
_Thread_Heir = _Scheduler_priority_Ready_queue_first(
4af1e: 23c0 0005 df9a movel %d0,5df9a <_Per_CPU_Information+0x10>
/* TODO: flash critical section */
if ( _Thread_Is_heir( the_thread ) )
_Scheduler_priority_Schedule_body(the_scheduler);
if ( _Thread_Is_executing( the_thread ) )
4af24: b3f9 0005 df96 cmpal 5df96 <_Per_CPU_Information+0xc>,%a1
4af2a: 6608 bnes 4af34 <_Scheduler_priority_Block+0xb8>
_Thread_Dispatch_necessary = true;
4af2c: 7001 moveq #1,%d0
4af2e: 13c0 0005 dfa2 moveb %d0,5dfa2 <_Per_CPU_Information+0x18>
4af34: 245f moveal %sp@+,%a2
4af36: 4e5e unlk %fp
...
000470d4 <_Scheduler_priority_Schedule>:
*/
void _Scheduler_priority_Schedule(
Scheduler_Control *the_scheduler
)
{
470d4: 4e56 0000 linkw %fp,#0
RTEMS_INLINE_ROUTINE Priority_Control _Priority_bit_map_Get_highest( void )
{
Priority_bit_map_Control minor;
Priority_bit_map_Control major;
_Bitfield_Find_first_bit( _Priority_Major_bit_map, major );
470d8: 3039 0005 dfa4 movew 5dfa4 <_Priority_Major_bit_map>,%d0
470de: 4840 swap %d0
470e0: 04c0 ff1 %d0
_Bitfield_Find_first_bit( _Priority_Bit_map[major], minor );
470e2: 41f9 0005 dfa8 lea 5dfa8 <_Priority_Bit_map>,%a0
470e8: 0280 0000 ffff andil #65535,%d0
470ee: 3230 0a00 movew %a0@(00000000,%d0:l:2),%d1
470f2: 4841 swap %d1
470f4: 04c1 ff1 %d1
_Scheduler_priority_Schedule_body( the_scheduler );
}
470f6: 206e 0008 moveal %fp@(8),%a0
return (_Priority_Bits_index( major ) << 4) +
470fa: 0281 0000 ffff andil #65535,%d1
47100: e988 lsll #4,%d0
47102: 2050 moveal %a0@,%a0
47104: d081 addl %d1,%d0
Chain_Control *the_ready_queue
)
{
Priority_Control index = _Priority_bit_map_Get_highest();
if ( !_Chain_Is_empty( &the_ready_queue[ index ] ) )
47106: 2200 movel %d0,%d1
47108: e988 lsll #4,%d0
4710a: e589 lsll #2,%d1
4710c: 9081 subl %d1,%d0
4710e: d1c0 addal %d0,%a0
47110: 2018 movel %a0@+,%d0
47112: b1c0 cmpal %d0,%a0
47114: 6602 bnes 47118 <_Scheduler_priority_Schedule+0x44><== ALWAYS TAKEN
return (Thread_Control *) _Chain_First( &the_ready_queue[ index ] );
return NULL;
47116: 4280 clrl %d0 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Schedule_body(
Scheduler_Control *the_scheduler
)
{
_Thread_Heir = _Scheduler_priority_Ready_queue_first(
47118: 23c0 0005 df9a movel %d0,5df9a <_Per_CPU_Information+0x10>
4711e: 4e5e unlk %fp
...
00047140 <_Scheduler_priority_Thread_scheduler_free>:
void _Scheduler_priority_Thread_scheduler_free (
Scheduler_Control *the_scheduler __attribute__((unused)),
Thread_Control *the_thread
)
{
47140: 4e56 0000 linkw %fp,#0
_Workspace_Free( the_thread->scheduler.priority );
47144: 206e 000c moveal %fp@(12),%a0
47148: 2d68 008a 0008 movel %a0@(138),%fp@(8)
}
4714e: 4e5e unlk %fp
void _Scheduler_priority_Thread_scheduler_free (
Scheduler_Control *the_scheduler __attribute__((unused)),
Thread_Control *the_thread
)
{
_Workspace_Free( the_thread->scheduler.priority );
47150: 4ef9 0004 87b0 jmp 487b0 <_Workspace_Free>
...
000471c8 <_Scheduler_priority_Unblock>:
void _Scheduler_priority_Unblock (
Scheduler_Control *the_scheduler,
Thread_Control *the_thread
)
{
471c8: 4e56 0000 linkw %fp,#0
471cc: 206e 000c moveal %fp@(12),%a0
471d0: 2f0a movel %a2,%sp@-
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_enqueue(
Thread_Control *the_thread
)
{
_Priority_bit_map_Add( &the_thread->scheduler.priority->Priority_map );
471d2: 2268 008a moveal %a0@(138),%a1
RTEMS_INLINE_ROUTINE void _Priority_bit_map_Add (
Priority_bit_map_Information *the_priority_map
)
{
*the_priority_map->minor |= the_priority_map->ready_minor;
471d6: 2469 0004 moveal %a1@(4),%a2
471da: 3029 000a movew %a1@(10),%d0
471de: 3212 movew %a2@,%d1
471e0: 8081 orl %d1,%d0
471e2: 3480 movew %d0,%a2@
_Priority_Major_bit_map |= the_priority_map->ready_major;
471e4: 3229 0008 movew %a1@(8),%d1
471e8: 3039 0005 dfa4 movew 5dfa4 <_Priority_Major_bit_map>,%d0
_Chain_Append_unprotected( the_thread->scheduler.priority->ready_chain,
471ee: 2251 moveal %a1@,%a1
471f0: 8081 orl %d1,%d0
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
Chain_Node *old_last = tail->previous;
471f2: 2469 0008 moveal %a1@(8),%a2
471f6: 33c0 0005 dfa4 movew %d0,5dfa4 <_Priority_Major_bit_map>
RTEMS_INLINE_ROUTINE void _Chain_Append_unprotected(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
471fc: 2009 movel %a1,%d0
471fe: 5880 addql #4,%d0
Chain_Node *old_last = tail->previous;
the_node->next = tail;
tail->previous = the_node;
47200: 2348 0008 movel %a0,%a1@(8)
* a context switch.
* Pseudo-ISR case:
* Even if the thread isn't preemptible, if the new heir is
* a pseudo-ISR system task, we need to do a context switch.
*/
if ( the_thread->current_priority < _Thread_Heir->current_priority ) {
47204: 2279 0005 df9a moveal 5df9a <_Per_CPU_Information+0x10>,%a1
RTEMS_INLINE_ROUTINE void _Chain_Append_unprotected(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
4720a: 2080 movel %d0,%a0@
4720c: 2028 0014 movel %a0@(20),%d0
Chain_Node *old_last = tail->previous;
the_node->next = tail;
tail->previous = the_node;
old_last->next = the_node;
47210: 2488 movel %a0,%a2@
the_node->previous = old_last;
47212: 214a 0004 movel %a2,%a0@(4)
47216: b0a9 0014 cmpl %a1@(20),%d0
4721a: 641e bccs 4723a <_Scheduler_priority_Unblock+0x72>
_Thread_Heir = the_thread;
4721c: 23c8 0005 df9a movel %a0,5df9a <_Per_CPU_Information+0x10>
if ( _Thread_Executing->is_preemptible ||
47222: 2079 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a0
47228: 4a28 0074 tstb %a0@(116)
4722c: 6604 bnes 47232 <_Scheduler_priority_Unblock+0x6a>
4722e: 4a80 tstl %d0
47230: 6608 bnes 4723a <_Scheduler_priority_Unblock+0x72><== ALWAYS TAKEN
the_thread->current_priority == 0 )
_Thread_Dispatch_necessary = true;
47232: 7001 moveq #1,%d0
47234: 13c0 0005 dfa2 moveb %d0,5dfa2 <_Per_CPU_Information+0x18>
_Scheduler_priority_Unblock_body(the_scheduler, the_thread);
}
4723a: 245f moveal %sp@+,%a2
4723c: 4e5e unlk %fp <== NOT EXECUTED
00047240 <_Scheduler_priority_Yield>:
*/
void _Scheduler_priority_Yield(
Scheduler_Control *the_scheduler __attribute__((unused))
)
{
47240: 4e56 fff4 linkw %fp,#-12 <== NOT EXECUTED
ISR_Level level;
Thread_Control *executing;
Chain_Control *ready;
executing = _Thread_Executing;
47244: 2079 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
*/
void _Scheduler_priority_Yield(
Scheduler_Control *the_scheduler __attribute__((unused))
)
{
4724a: 48d7 0c04 moveml %d2/%a2-%a3,%sp@ <== NOT EXECUTED
Thread_Control *executing;
Chain_Control *ready;
executing = _Thread_Executing;
ready = executing->scheduler.priority->ready_chain;
_ISR_Disable( level );
4724e: 243c 0000 0700 movel #1792,%d2 <== NOT EXECUTED
47254: 2002 movel %d2,%d0 <== NOT EXECUTED
ISR_Level level;
Thread_Control *executing;
Chain_Control *ready;
executing = _Thread_Executing;
ready = executing->scheduler.priority->ready_chain;
47256: 2268 008a moveal %a0@(138),%a1 <== NOT EXECUTED
4725a: 2251 moveal %a1@,%a1 <== NOT EXECUTED
_ISR_Disable( level );
4725c: 40c1 movew %sr,%d1 <== NOT EXECUTED
4725e: 8081 orl %d1,%d0 <== NOT EXECUTED
47260: 46c0 movew %d0,%sr <== NOT EXECUTED
if ( !_Chain_Has_only_one_node( ready ) ) {
47262: 2029 0008 movel %a1@(8),%d0 <== NOT EXECUTED
47266: b091 cmpl %a1@,%d0 <== NOT EXECUTED
47268: 6738 beqs 472a2 <_Scheduler_priority_Yield+0x62> <== NOT EXECUTED
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
previous = the_node->previous;
4726a: 2468 0004 moveal %a0@(4),%a2 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Append_unprotected(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
4726e: 2009 movel %a1,%d0 <== NOT EXECUTED
47270: 5880 addql #4,%d0 <== NOT EXECUTED
)
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
47272: 2650 moveal %a0@,%a3 <== NOT EXECUTED
previous = the_node->previous;
next->previous = previous;
47274: 274a 0004 movel %a2,%a3@(4) <== NOT EXECUTED
previous->next = next;
47278: 248b movel %a3,%a2@ <== NOT EXECUTED
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
Chain_Node *old_last = tail->previous;
4727a: 2469 0008 moveal %a1@(8),%a2 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Append_unprotected(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
4727e: 2080 movel %d0,%a0@ <== NOT EXECUTED
Chain_Node *old_last = tail->previous;
the_node->next = tail;
tail->previous = the_node;
47280: 2348 0008 movel %a0,%a1@(8) <== NOT EXECUTED
old_last->next = the_node;
47284: 2488 movel %a0,%a2@ <== NOT EXECUTED
the_node->previous = old_last;
47286: 214a 0004 movel %a2,%a0@(4) <== NOT EXECUTED
_Chain_Extract_unprotected( &executing->Object.Node );
_Chain_Append_unprotected( ready, &executing->Object.Node );
_ISR_Flash( level );
4728a: 2002 movel %d2,%d0 <== NOT EXECUTED
4728c: 46c1 movew %d1,%sr <== NOT EXECUTED
4728e: 8081 orl %d1,%d0 <== NOT EXECUTED
47290: 46c0 movew %d0,%sr <== NOT EXECUTED
if ( _Thread_Is_heir( executing ) )
47292: b1f9 0005 df9a cmpal 5df9a <_Per_CPU_Information+0x10>,%a0 <== NOT EXECUTED
47298: 6610 bnes 472aa <_Scheduler_priority_Yield+0x6a> <== NOT EXECUTED
_Thread_Heir = (Thread_Control *) _Chain_First( ready );
4729a: 23d1 0005 df9a movel %a1@,5df9a <_Per_CPU_Information+0x10><== NOT EXECUTED
472a0: 6008 bras 472aa <_Scheduler_priority_Yield+0x6a> <== NOT EXECUTED
_Thread_Dispatch_necessary = true;
}
else if ( !_Thread_Is_heir( executing ) )
472a2: b1f9 0005 df9a cmpal 5df9a <_Per_CPU_Information+0x10>,%a0 <== NOT EXECUTED
472a8: 6708 beqs 472b2 <_Scheduler_priority_Yield+0x72> <== NOT EXECUTED
_Thread_Dispatch_necessary = true;
472aa: 7001 moveq #1,%d0 <== NOT EXECUTED
472ac: 13c0 0005 dfa2 moveb %d0,5dfa2 <_Per_CPU_Information+0x18> <== NOT EXECUTED
_ISR_Enable( level );
472b2: 46c1 movew %d1,%sr <== NOT EXECUTED
}
472b4: 4cd7 0c04 moveml %sp@,%d2/%a2-%a3 <== NOT EXECUTED
472b8: 4e5e unlk %fp <== NOT EXECUTED
0004579a <_Semaphore_Translate_core_semaphore_return_code>:
#if defined(RTEMS_DEBUG)
if ( status > CORE_SEMAPHORE_STATUS_LAST )
return RTEMS_INTERNAL_ERROR;
#endif
return _Semaphore_Translate_core_semaphore_return_code_[status];
}
4579a: 41f9 0005 b2fe lea 5b2fe <_Semaphore_Translate_core_semaphore_return_code_>,%a0<== NOT EXECUTED
};
rtems_status_code _Semaphore_Translate_core_semaphore_return_code (
uint32_t status
)
{
457a0: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( status > CORE_SEMAPHORE_STATUS_LAST )
return RTEMS_INTERNAL_ERROR;
#endif
return _Semaphore_Translate_core_semaphore_return_code_[status];
}
457a4: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
457a8: 4e5e unlk %fp <== NOT EXECUTED
457aa: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0 <== NOT EXECUTED
00046770 <_TOD_Get_uptime_as_timespec>:
*/
void _TOD_Get_uptime_as_timespec(
struct timespec *uptime
)
{
46770: 4e56 fff8 linkw %fp,#-8 <== NOT EXECUTED
Timestamp_Control uptime_ts;
/* assume time checked for NULL by caller */
_TOD_Get_uptime( &uptime_ts );
46774: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
46778: 4eb9 0004 af18 jsr 4af18 <_TOD_Get_uptime> <== NOT EXECUTED
_Timestamp_To_timespec( &uptime_ts, uptime );
4677e: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
46782: 588f addql #4,%sp <== NOT EXECUTED
46784: 202e fff8 movel %fp@(-8),%d0 <== NOT EXECUTED
46788: 222e fffc movel %fp@(-4),%d1 <== NOT EXECUTED
}
4678c: 4e5e unlk %fp <== NOT EXECUTED
{
Timestamp_Control uptime_ts;
/* assume time checked for NULL by caller */
_TOD_Get_uptime( &uptime_ts );
_Timestamp_To_timespec( &uptime_ts, uptime );
4678e: 2080 movel %d0,%a0@ <== NOT EXECUTED
46790: 2141 0004 movel %d1,%a0@(4) <== NOT EXECUTED
}
...
0004769c <_TOD_Set>:
*/
void _TOD_Set(
const struct timespec *time
)
{
4769c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
476a0: 2039 0006 79f8 movel 679f8 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
476a6: 5280 addql #1,%d0 <== NOT EXECUTED
476a8: 2f0a movel %a2,%sp@- <== NOT EXECUTED
476aa: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
476ae: 23c0 0006 79f8 movel %d0,679f8 <_Thread_Dispatch_disable_level><== NOT EXECUTED
long seconds;
_Thread_Disable_dispatch();
_TOD_Deactivate();
seconds = _TOD_Seconds_since_epoch();
476b4: 2039 0006 7aa2 movel 67aa2 <_TOD_Now>,%d0 <== NOT EXECUTED
476ba: 41f9 0004 9a2c lea 49a2c <_Watchdog_Adjust>,%a0 <== NOT EXECUTED
if ( time->tv_sec < seconds )
476c0: 2212 movel %a2@,%d1 <== NOT EXECUTED
476c2: b081 cmpl %d1,%d0 <== NOT EXECUTED
476c4: 6f0a bles 476d0 <_TOD_Set+0x34> <== NOT EXECUTED
Watchdog_Adjust_directions direction,
Watchdog_Interval units
)
{
_Watchdog_Adjust( &_Watchdog_Seconds_chain, direction, units );
476c6: 9081 subl %d1,%d0 <== NOT EXECUTED
476c8: 2f00 movel %d0,%sp@- <== NOT EXECUTED
476ca: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
476ce: 6006 bras 476d6 <_TOD_Set+0x3a> <== NOT EXECUTED
476d0: 9280 subl %d0,%d1 <== NOT EXECUTED
476d2: 2f01 movel %d1,%sp@- <== NOT EXECUTED
476d4: 42a7 clrl %sp@- <== NOT EXECUTED
476d6: 4879 0006 7acc pea 67acc <_Watchdog_Seconds_chain> <== NOT EXECUTED
476dc: 4e90 jsr %a0@ <== NOT EXECUTED
_Watchdog_Adjust_seconds( WATCHDOG_BACKWARD, seconds - time->tv_sec );
else
_Watchdog_Adjust_seconds( WATCHDOG_FORWARD, time->tv_sec - seconds );
/* POSIX format TOD (timespec) */
_Timestamp_Set( &_TOD_Now, time->tv_sec, time->tv_nsec );
476de: 23d2 0006 7aa2 movel %a2@,67aa2 <_TOD_Now> <== NOT EXECUTED
476e4: 588a addql #4,%a2 <== NOT EXECUTED
476e6: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
476ea: 23d2 0006 7aa6 movel %a2@,67aa6 <_TOD_Now+0x4> <== NOT EXECUTED
_TOD_Is_set = true;
_TOD_Activate();
_Thread_Enable_dispatch();
}
476f0: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
476f4: 4e5e unlk %fp <== NOT EXECUTED
else
_Watchdog_Adjust_seconds( WATCHDOG_FORWARD, time->tv_sec - seconds );
/* POSIX format TOD (timespec) */
_Timestamp_Set( &_TOD_Now, time->tv_sec, time->tv_nsec );
_TOD_Is_set = true;
476f6: 7001 moveq #1,%d0 <== NOT EXECUTED
476f8: 13c0 0006 7a08 moveb %d0,67a08 <_TOD_Is_set> <== NOT EXECUTED
_TOD_Activate();
_Thread_Enable_dispatch();
476fe: 4ef9 0004 8b4e jmp 48b4e <_Thread_Enable_dispatch> <== NOT EXECUTED
00046424 <_TOD_Tickle_ticks>:
{
Timestamp_Control tick;
uint32_t seconds;
/* Convert the tick quantum to a timestamp */
_Timestamp_Set( &tick, 0, rtems_configuration_get_nanoseconds_per_tick() );
46424: 223c 0000 03e8 movel #1000,%d1
*
* Output parameters: NONE
*/
void _TOD_Tickle_ticks( void )
{
4642a: 4e56 fff8 linkw %fp,#-8
Timestamp_Control tick;
uint32_t seconds;
/* Convert the tick quantum to a timestamp */
_Timestamp_Set( &tick, 0, rtems_configuration_get_nanoseconds_per_tick() );
4642e: 2039 0005 c260 movel 5c260 <Configuration+0xc>,%d0
46434: 4c01 0800 mulsl %d1,%d0
*
* Output parameters: NONE
*/
void _TOD_Tickle_ticks( void )
{
46438: 2f0a movel %a2,%sp@-
/* Update the counter of ticks since boot */
_Watchdog_Ticks_since_boot += 1;
/* Update the timespec format uptime */
_Timestamp_Add_to( &_TOD_Uptime, &tick );
4643a: 45f9 0004 8234 lea 48234 <_Timespec_Add_to>,%a2
*
* Output parameters: NONE
*/
void _TOD_Tickle_ticks( void )
{
46440: 2f02 movel %d2,%sp@-
/* Update the counter of ticks since boot */
_Watchdog_Ticks_since_boot += 1;
/* Update the timespec format uptime */
_Timestamp_Add_to( &_TOD_Uptime, &tick );
46442: 240e movel %fp,%d2
46444: 5182 subql #8,%d2
{
Timestamp_Control tick;
uint32_t seconds;
/* Convert the tick quantum to a timestamp */
_Timestamp_Set( &tick, 0, rtems_configuration_get_nanoseconds_per_tick() );
46446: 2d40 fffc movel %d0,%fp@(-4)
/* Update the counter of ticks since boot */
_Watchdog_Ticks_since_boot += 1;
4644a: 2039 0005 dc32 movel 5dc32 <_Watchdog_Ticks_since_boot>,%d0
46450: 5280 addql #1,%d0
/* Update the timespec format uptime */
_Timestamp_Add_to( &_TOD_Uptime, &tick );
46452: 2f02 movel %d2,%sp@-
46454: 4879 0005 db82 pea 5db82 <_TOD_Uptime>
{
Timestamp_Control tick;
uint32_t seconds;
/* Convert the tick quantum to a timestamp */
_Timestamp_Set( &tick, 0, rtems_configuration_get_nanoseconds_per_tick() );
4645a: 42ae fff8 clrl %fp@(-8)
/* Update the counter of ticks since boot */
_Watchdog_Ticks_since_boot += 1;
4645e: 23c0 0005 dc32 movel %d0,5dc32 <_Watchdog_Ticks_since_boot>
/* Update the timespec format uptime */
_Timestamp_Add_to( &_TOD_Uptime, &tick );
46464: 4e92 jsr %a2@
/* we do not care how much the uptime changed */
/* Update the timespec format TOD */
seconds = _Timestamp_Add_to_at_tick( &_TOD_Now, &tick );
46466: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46468: 4879 0005 dbb2 pea 5dbb2 <_TOD_Now> <== NOT EXECUTED
4646e: 4e92 jsr %a2@ <== NOT EXECUTED
while ( seconds ) {
46470: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Watchdog_Tickle_seconds( void )
{
_Watchdog_Tickle( &_Watchdog_Seconds_chain );
46474: 45f9 0004 86b8 lea 486b8 <_Watchdog_Tickle>,%a2 <== NOT EXECUTED
/* Update the timespec format uptime */
_Timestamp_Add_to( &_TOD_Uptime, &tick );
/* we do not care how much the uptime changed */
/* Update the timespec format TOD */
seconds = _Timestamp_Add_to_at_tick( &_TOD_Now, &tick );
4647a: 2400 movel %d0,%d2 <== NOT EXECUTED
while ( seconds ) {
4647c: 600c bras 4648a <_TOD_Tickle_ticks+0x66> <== NOT EXECUTED
4647e: 4879 0005 dbdc pea 5dbdc <_Watchdog_Seconds_chain> <== NOT EXECUTED
_Watchdog_Tickle_seconds();
seconds--;
46484: 5382 subql #1,%d2 <== NOT EXECUTED
46486: 4e92 jsr %a2@ <== NOT EXECUTED
46488: 588f addql #4,%sp <== NOT EXECUTED
_Timestamp_Add_to( &_TOD_Uptime, &tick );
/* we do not care how much the uptime changed */
/* Update the timespec format TOD */
seconds = _Timestamp_Add_to_at_tick( &_TOD_Now, &tick );
while ( seconds ) {
4648a: 4a82 tstl %d2 <== NOT EXECUTED
4648c: 66f0 bnes 4647e <_TOD_Tickle_ticks+0x5a> <== NOT EXECUTED
_Watchdog_Tickle_seconds();
seconds--;
}
}
4648e: 242e fff0 movel %fp@(-16),%d2 <== NOT EXECUTED
46492: 246e fff4 moveal %fp@(-12),%a2 <== NOT EXECUTED
46496: 4e5e unlk %fp <== NOT EXECUTED
...
00045f60 <_TOD_To_seconds>:
*/
uint32_t _TOD_To_seconds(
const rtems_time_of_day *the_tod
)
{
45f60: 43f9 0005 d2fa lea 5d2fa <_TOD_Days_to_date>,%a1 <== NOT EXECUTED
45f66: 4e56 fff4 linkw %fp,#-12 <== NOT EXECUTED
45f6a: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
45f6e: 48d7 040c moveml %d2-%d3/%a2,%sp@ <== NOT EXECUTED
uint32_t time;
uint32_t year_mod_4;
time = the_tod->day - 1;
year_mod_4 = the_tod->year & 3;
45f72: 2210 movel %a0@,%d1 <== NOT EXECUTED
45f74: 7403 moveq #3,%d2 <== NOT EXECUTED
)
{
uint32_t time;
uint32_t year_mod_4;
time = the_tod->day - 1;
45f76: 2028 0008 movel %a0@(8),%d0 <== NOT EXECUTED
45f7a: 5380 subql #1,%d0 <== NOT EXECUTED
year_mod_4 = the_tod->year & 3;
45f7c: c481 andl %d1,%d2 <== NOT EXECUTED
if ( year_mod_4 == 0 )
45f7e: 660c bnes 45f8c <_TOD_To_seconds+0x2c> <== NOT EXECUTED
time += _TOD_Days_to_date[ 1 ][ the_tod->month ];
45f80: 2628 0004 movel %a0@(4),%d3 <== NOT EXECUTED
45f84: 0683 0000 000d addil #13,%d3 <== NOT EXECUTED
45f8a: 6004 bras 45f90 <_TOD_To_seconds+0x30> <== NOT EXECUTED
else
time += _TOD_Days_to_date[ 0 ][ the_tod->month ];
45f8c: 2628 0004 movel %a0@(4),%d3 <== NOT EXECUTED
time += ( (the_tod->year - TOD_BASE_YEAR) / 4 ) *
( (TOD_DAYS_PER_YEAR * 4) + 1);
time += _TOD_Days_since_last_leap_year[ year_mod_4 ];
45f90: 45f9 0005 d32e lea 5d32e <_TOD_Days_since_last_leap_year>,%a2<== NOT EXECUTED
if ( year_mod_4 == 0 )
time += _TOD_Days_to_date[ 1 ][ the_tod->month ];
else
time += _TOD_Days_to_date[ 0 ][ the_tod->month ];
time += ( (the_tod->year - TOD_BASE_YEAR) / 4 ) *
45f96: 0681 ffff f83c addil #-1988,%d1 <== NOT EXECUTED
45f9c: e489 lsrl #2,%d1 <== NOT EXECUTED
year_mod_4 = the_tod->year & 3;
if ( year_mod_4 == 0 )
time += _TOD_Days_to_date[ 1 ][ the_tod->month ];
else
time += _TOD_Days_to_date[ 0 ][ the_tod->month ];
45f9e: 3631 3a00 movew %a1@(00000000,%d3:l:2),%d3 <== NOT EXECUTED
45fa2: 0283 0000 ffff andil #65535,%d3 <== NOT EXECUTED
45fa8: 2243 moveal %d3,%a1 <== NOT EXECUTED
45faa: d3c0 addal %d0,%a1 <== NOT EXECUTED
time += ( (the_tod->year - TOD_BASE_YEAR) / 4 ) *
( (TOD_DAYS_PER_YEAR * 4) + 1);
time += _TOD_Days_since_last_leap_year[ year_mod_4 ];
45fac: 4280 clrl %d0 <== NOT EXECUTED
45fae: 3032 2a00 movew %a2@(00000000,%d2:l:2),%d0 <== NOT EXECUTED
if ( year_mod_4 == 0 )
time += _TOD_Days_to_date[ 1 ][ the_tod->month ];
else
time += _TOD_Days_to_date[ 0 ][ the_tod->month ];
time += ( (the_tod->year - TOD_BASE_YEAR) / 4 ) *
45fb2: 243c 0000 05b5 movel #1461,%d2 <== NOT EXECUTED
45fb8: 4c02 1800 mulsl %d2,%d1 <== NOT EXECUTED
45fbc: d280 addl %d0,%d1 <== NOT EXECUTED
( (TOD_DAYS_PER_YEAR * 4) + 1);
time += _TOD_Days_since_last_leap_year[ year_mod_4 ];
45fbe: 2001 movel %d1,%d0 <== NOT EXECUTED
45fc0: d089 addl %a1,%d0 <== NOT EXECUTED
time *= TOD_SECONDS_PER_DAY;
45fc2: 223c 0001 5180 movel #86400,%d1 <== NOT EXECUTED
45fc8: 4c01 0800 mulsl %d1,%d0 <== NOT EXECUTED
time += ((the_tod->hour * TOD_MINUTES_PER_HOUR) + the_tod->minute)
45fcc: 2228 000c movel %a0@(12),%d1 <== NOT EXECUTED
45fd0: 2401 movel %d1,%d2 <== NOT EXECUTED
45fd2: ed89 lsll #6,%d1 <== NOT EXECUTED
45fd4: e58a lsll #2,%d2 <== NOT EXECUTED
45fd6: 2268 0014 moveal %a0@(20),%a1 <== NOT EXECUTED
45fda: 9282 subl %d2,%d1 <== NOT EXECUTED
45fdc: d2a8 0010 addl %a0@(16),%d1 <== NOT EXECUTED
45fe0: d3fc 21da e500 addal #567993600,%a1 <== NOT EXECUTED
* TOD_SECONDS_PER_MINUTE;
45fe6: 2401 movel %d1,%d2 <== NOT EXECUTED
45fe8: ed89 lsll #6,%d1 <== NOT EXECUTED
45fea: e58a lsll #2,%d2 <== NOT EXECUTED
45fec: 9282 subl %d2,%d1 <== NOT EXECUTED
time += the_tod->second;
45fee: d289 addl %a1,%d1 <== NOT EXECUTED
time += TOD_SECONDS_1970_THROUGH_1988;
return( time );
}
45ff0: d081 addl %d1,%d0 <== NOT EXECUTED
45ff2: 4cd7 040c moveml %sp@,%d2-%d3/%a2 <== NOT EXECUTED
45ff6: 4e5e unlk %fp <== NOT EXECUTED
...
00045ffc <_TOD_Validate>:
*/
bool _TOD_Validate(
const rtems_time_of_day *the_tod
)
{
45ffc: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
46000: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
46004: 2f03 movel %d3,%sp@- <== NOT EXECUTED
uint32_t days_in_month;
uint32_t ticks_per_second;
ticks_per_second = TOD_MICROSECONDS_PER_SECOND /
rtems_configuration_get_microseconds_per_tick();
46006: 2039 0005 e390 movel 5e390 <Configuration+0xc>,%d0 <== NOT EXECUTED
*/
bool _TOD_Validate(
const rtems_time_of_day *the_tod
)
{
4600c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
uint32_t days_in_month;
uint32_t ticks_per_second;
ticks_per_second = TOD_MICROSECONDS_PER_SECOND /
rtems_configuration_get_microseconds_per_tick();
if ((!the_tod) ||
4600e: 4a88 tstl %a0 <== NOT EXECUTED
46010: 6762 beqs 46074 <_TOD_Validate+0x78> <== NOT EXECUTED
)
{
uint32_t days_in_month;
uint32_t ticks_per_second;
ticks_per_second = TOD_MICROSECONDS_PER_SECOND /
46012: 243c 000f 4240 movel #1000000,%d2 <== NOT EXECUTED
46018: 4c40 2002 remul %d0,%d2,%d2 <== NOT EXECUTED
rtems_configuration_get_microseconds_per_tick();
if ((!the_tod) ||
4601c: b4a8 0018 cmpl %a0@(24),%d2 <== NOT EXECUTED
46020: 6352 blss 46074 <_TOD_Validate+0x78> <== NOT EXECUTED
(the_tod->ticks >= ticks_per_second) ||
46022: 763b moveq #59,%d3 <== NOT EXECUTED
46024: b6a8 0014 cmpl %a0@(20),%d3 <== NOT EXECUTED
46028: 654a bcss 46074 <_TOD_Validate+0x78> <== NOT EXECUTED
(the_tod->second >= TOD_SECONDS_PER_MINUTE) ||
4602a: b6a8 0010 cmpl %a0@(16),%d3 <== NOT EXECUTED
4602e: 6544 bcss 46074 <_TOD_Validate+0x78> <== NOT EXECUTED
(the_tod->minute >= TOD_MINUTES_PER_HOUR) ||
46030: 7017 moveq #23,%d0 <== NOT EXECUTED
46032: b0a8 000c cmpl %a0@(12),%d0 <== NOT EXECUTED
46036: 653c bcss 46074 <_TOD_Validate+0x78> <== NOT EXECUTED
(the_tod->hour >= TOD_HOURS_PER_DAY) ||
(the_tod->month == 0) ||
46038: 2028 0004 movel %a0@(4),%d0 <== NOT EXECUTED
rtems_configuration_get_microseconds_per_tick();
if ((!the_tod) ||
(the_tod->ticks >= ticks_per_second) ||
(the_tod->second >= TOD_SECONDS_PER_MINUTE) ||
(the_tod->minute >= TOD_MINUTES_PER_HOUR) ||
(the_tod->hour >= TOD_HOURS_PER_DAY) ||
4603c: 6736 beqs 46074 <_TOD_Validate+0x78> <== NOT EXECUTED
(the_tod->month == 0) ||
4603e: 720c moveq #12,%d1 <== NOT EXECUTED
46040: b280 cmpl %d0,%d1 <== NOT EXECUTED
46042: 6530 bcss 46074 <_TOD_Validate+0x78> <== NOT EXECUTED
(the_tod->month > TOD_MONTHS_PER_YEAR) ||
(the_tod->year < TOD_BASE_YEAR) ||
46044: 2410 movel %a0@,%d2 <== NOT EXECUTED
(the_tod->ticks >= ticks_per_second) ||
(the_tod->second >= TOD_SECONDS_PER_MINUTE) ||
(the_tod->minute >= TOD_MINUTES_PER_HOUR) ||
(the_tod->hour >= TOD_HOURS_PER_DAY) ||
(the_tod->month == 0) ||
(the_tod->month > TOD_MONTHS_PER_YEAR) ||
46046: 0c82 0000 07c3 cmpil #1987,%d2 <== NOT EXECUTED
4604c: 6326 blss 46074 <_TOD_Validate+0x78> <== NOT EXECUTED
(the_tod->year < TOD_BASE_YEAR) ||
(the_tod->day == 0) )
4604e: 2228 0008 movel %a0@(8),%d1 <== NOT EXECUTED
(the_tod->second >= TOD_SECONDS_PER_MINUTE) ||
(the_tod->minute >= TOD_MINUTES_PER_HOUR) ||
(the_tod->hour >= TOD_HOURS_PER_DAY) ||
(the_tod->month == 0) ||
(the_tod->month > TOD_MONTHS_PER_YEAR) ||
(the_tod->year < TOD_BASE_YEAR) ||
46052: 6720 beqs 46074 <_TOD_Validate+0x78> <== NOT EXECUTED
(the_tod->day == 0) )
return false;
if ( (the_tod->year % 4) == 0 )
46054: 163c 0003 moveb #3,%d3 <== NOT EXECUTED
46058: 41f9 0005 d336 lea 5d336 <_TOD_Days_per_month>,%a0 <== NOT EXECUTED
4605e: c483 andl %d3,%d2 <== NOT EXECUTED
46060: 6606 bnes 46068 <_TOD_Validate+0x6c> <== NOT EXECUTED
days_in_month = _TOD_Days_per_month[ 1 ][ the_tod->month ];
46062: 2030 0c34 movel %a0@(00000034,%d0:l:4),%d0 <== NOT EXECUTED
46066: 6004 bras 4606c <_TOD_Validate+0x70> <== NOT EXECUTED
else
days_in_month = _TOD_Days_per_month[ 0 ][ the_tod->month ];
46068: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0 <== NOT EXECUTED
* false - if the the_tod is invalid
*
* NOTE: This routine only works for leap-years through 2099.
*/
bool _TOD_Validate(
4606c: b081 cmpl %d1,%d0 <== NOT EXECUTED
4606e: 54c0 scc %d0 <== NOT EXECUTED
46070: 4480 negl %d0 <== NOT EXECUTED
46072: 6002 bras 46076 <_TOD_Validate+0x7a> <== NOT EXECUTED
(the_tod->hour >= TOD_HOURS_PER_DAY) ||
(the_tod->month == 0) ||
(the_tod->month > TOD_MONTHS_PER_YEAR) ||
(the_tod->year < TOD_BASE_YEAR) ||
(the_tod->day == 0) )
return false;
46074: 4200 clrb %d0 <== NOT EXECUTED
if ( the_tod->day > days_in_month )
return false;
return true;
}
46076: 241f movel %sp@+,%d2 <== NOT EXECUTED
46078: 261f movel %sp@+,%d3 <== NOT EXECUTED
4607a: 4e5e unlk %fp <== NOT EXECUTED
...
0004730c <_Thread_Change_priority>:
void _Thread_Change_priority(
Thread_Control *the_thread,
Priority_Control new_priority,
bool prepend_it
)
{
4730c: 4e56 fff0 linkw %fp,#-16
47310: 48d7 041c moveml %d2-%d4/%a2,%sp@
47314: 246e 0008 moveal %fp@(8),%a2
*/
/*
* Save original state
*/
original_state = the_thread->current_state;
47318: 282a 0010 movel %a2@(16),%d4
void _Thread_Change_priority(
Thread_Control *the_thread,
Priority_Control new_priority,
bool prepend_it
)
{
4731c: 242e 000c movel %fp@(12),%d2
/*
* Set a transient state for the thread so it is pulled off the Ready chains.
* This will prevent it from being scheduled no matter what happens in an
* ISR.
*/
_Thread_Set_transient( the_thread );
47320: 2f0a movel %a2,%sp@-
void _Thread_Change_priority(
Thread_Control *the_thread,
Priority_Control new_priority,
bool prepend_it
)
{
47322: 162e 0013 moveb %fp@(19),%d3
/*
* Set a transient state for the thread so it is pulled off the Ready chains.
* This will prevent it from being scheduled no matter what happens in an
* ISR.
*/
_Thread_Set_transient( the_thread );
47326: 4eb9 0004 7fc8 jsr 47fc8 <_Thread_Set_transient>
/*
* Do not bother recomputing all the priority related information if
* we are not REALLY changing priority.
*/
if ( the_thread->current_priority != new_priority )
4732c: 588f addql #4,%sp
4732e: b4aa 0014 cmpl %a2@(20),%d2
47332: 670c beqs 47340 <_Thread_Change_priority+0x34>
_Thread_Set_priority( the_thread, new_priority );
47334: 2f02 movel %d2,%sp@-
47336: 2f0a movel %a2,%sp@-
47338: 4eb9 0004 7f54 jsr 47f54 <_Thread_Set_priority>
4733e: 508f addql #8,%sp
_ISR_Disable( level );
47340: 203c 0000 0700 movel #1792,%d0
47346: 40c2 movew %sr,%d2
47348: 8082 orl %d2,%d0
4734a: 46c0 movew %d0,%sr
4734c: 7204 moveq #4,%d1
/*
* If the thread has more than STATES_TRANSIENT set, then it is blocked,
* If it is blocked on a thread queue, then we need to requeue it.
*/
state = the_thread->current_state;
4734e: 202a 0010 movel %a2@(16),%d0
47352: c284 andl %d4,%d1
if ( state != STATES_TRANSIENT ) {
47354: 7804 moveq #4,%d4
47356: b880 cmpl %d0,%d4
47358: 6730 beqs 4738a <_Thread_Change_priority+0x7e>
/* Only clear the transient state if it wasn't set already */
if ( ! _States_Is_transient( original_state ) )
4735a: 4a81 tstl %d1
4735c: 6608 bnes 47366 <_Thread_Change_priority+0x5a> <== NEVER TAKEN
RTEMS_INLINE_ROUTINE States_Control _States_Clear (
States_Control states_to_clear,
States_Control current_state
)
{
return (current_state & ~states_to_clear);
4735e: 72fb moveq #-5,%d1
47360: c280 andl %d0,%d1
47362: 2541 0010 movel %d1,%a2@(16)
the_thread->current_state = _States_Clear( STATES_TRANSIENT, state );
_ISR_Enable( level );
47366: 46c2 movew %d2,%sr
*/
RTEMS_INLINE_ROUTINE bool _States_Is_waiting_on_thread_queue (
States_Control the_states
)
{
return (the_states & STATES_WAITING_ON_THREAD_QUEUE);
47368: 0280 0003 bee0 andil #245472,%d0
if ( _States_Is_waiting_on_thread_queue( state ) ) {
4736e: 6700 00cc beqw 4743c <_Thread_Change_priority+0x130>
_Thread_queue_Requeue( the_thread->Wait.queue, the_thread );
47372: 2d4a 000c movel %a2,%fp@(12)
47376: 2d6a 0044 0008 movel %a2@(68),%fp@(8)
if ( !_Thread_Is_executing_also_the_heir() &&
_Thread_Executing->is_preemptible )
_Thread_Dispatch_necessary = true;
_ISR_Enable( level );
}
4737c: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2
47382: 4e5e unlk %fp
/* Only clear the transient state if it wasn't set already */
if ( ! _States_Is_transient( original_state ) )
the_thread->current_state = _States_Clear( STATES_TRANSIENT, state );
_ISR_Enable( level );
if ( _States_Is_waiting_on_thread_queue( state ) ) {
_Thread_queue_Requeue( the_thread->Wait.queue, the_thread );
47384: 4ef9 0004 7eb8 jmp 47eb8 <_Thread_queue_Requeue>
}
return;
}
/* Only clear the transient state if it wasn't set already */
if ( ! _States_Is_transient( original_state ) ) {
4738a: 4a81 tstl %d1
4738c: 6674 bnes 47402 <_Thread_Change_priority+0xf6> <== NEVER TAKEN
4738e: 206a 008a moveal %a2@(138),%a0
* Ready Queue with interrupts off.
*
* FIXME: hard-coded for priority scheduling. Might be ok since this
* function is specific to priority scheduling?
*/
the_thread->current_state = _States_Clear( STATES_TRANSIENT, state );
47392: 42aa 0010 clrl %a2@(16)
if ( prepend_it )
47396: 4a03 tstb %d3
47398: 6732 beqs 473cc <_Thread_Change_priority+0xc0>
RTEMS_INLINE_ROUTINE void _Priority_bit_map_Add (
Priority_bit_map_Information *the_priority_map
)
{
*the_priority_map->minor |= the_priority_map->ready_minor;
4739a: 2268 0004 moveal %a0@(4),%a1
4739e: 3028 000a movew %a0@(10),%d0
473a2: 3211 movew %a1@,%d1
473a4: 8081 orl %d1,%d0
473a6: 3280 movew %d0,%a1@
_Priority_Major_bit_map |= the_priority_map->ready_major;
473a8: 3228 0008 movew %a0@(8),%d1
473ac: 3039 0005 dfa4 movew 5dfa4 <_Priority_Major_bit_map>,%d0
Thread_Control *the_thread
)
{
_Priority_bit_map_Add( &the_thread->scheduler.priority->Priority_map );
_Chain_Prepend_unprotected( the_thread->scheduler.priority->ready_chain,
473b2: 2050 moveal %a0@,%a0
473b4: 8081 orl %d1,%d0
)
{
Chain_Node *before_node;
the_node->previous = after_node;
before_node = after_node->next;
473b6: 2250 moveal %a0@,%a1
473b8: 33c0 0005 dfa4 movew %d0,5dfa4 <_Priority_Major_bit_map>
Chain_Node *the_node
)
{
Chain_Node *before_node;
the_node->previous = after_node;
473be: 2548 0004 movel %a0,%a2@(4)
before_node = after_node->next;
after_node->next = the_node;
473c2: 208a movel %a2,%a0@
the_node->next = before_node;
before_node->previous = the_node;
473c4: 234a 0004 movel %a2,%a1@(4)
Chain_Node *before_node;
the_node->previous = after_node;
before_node = after_node->next;
after_node->next = the_node;
the_node->next = before_node;
473c8: 2489 movel %a1,%a2@
473ca: 6036 bras 47402 <_Thread_Change_priority+0xf6>
RTEMS_INLINE_ROUTINE void _Priority_bit_map_Add (
Priority_bit_map_Information *the_priority_map
)
{
*the_priority_map->minor |= the_priority_map->ready_minor;
473cc: 2268 0004 moveal %a0@(4),%a1
473d0: 3028 000a movew %a0@(10),%d0
473d4: 3211 movew %a1@,%d1
473d6: 8081 orl %d1,%d0
473d8: 3280 movew %d0,%a1@
_Priority_Major_bit_map |= the_priority_map->ready_major;
473da: 3228 0008 movew %a0@(8),%d1
473de: 3039 0005 dfa4 movew 5dfa4 <_Priority_Major_bit_map>,%d0
Thread_Control *the_thread
)
{
_Priority_bit_map_Add( &the_thread->scheduler.priority->Priority_map );
_Chain_Append_unprotected( the_thread->scheduler.priority->ready_chain,
473e4: 2050 moveal %a0@,%a0
RTEMS_INLINE_ROUTINE void _Chain_Append_unprotected(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
473e6: 2808 movel %a0,%d4
473e8: 5884 addql #4,%d4
473ea: 8081 orl %d1,%d0
Chain_Node *old_last = tail->previous;
473ec: 2268 0008 moveal %a0@(8),%a1
473f0: 33c0 0005 dfa4 movew %d0,5dfa4 <_Priority_Major_bit_map>
the_node->next = tail;
tail->previous = the_node;
473f6: 214a 0008 movel %a2,%a0@(8)
RTEMS_INLINE_ROUTINE void _Chain_Append_unprotected(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
473fa: 2484 movel %d4,%a2@
Chain_Node *old_last = tail->previous;
the_node->next = tail;
tail->previous = the_node;
old_last->next = the_node;
the_node->previous = old_last;
473fc: 2549 0004 movel %a1,%a2@(4)
Chain_Node *tail = _Chain_Tail( the_chain );
Chain_Node *old_last = tail->previous;
the_node->next = tail;
tail->previous = the_node;
old_last->next = the_node;
47400: 228a movel %a2,%a1@
_Scheduler_priority_Ready_queue_enqueue_first( the_thread );
else
_Scheduler_priority_Ready_queue_enqueue( the_thread );
}
_ISR_Flash( level );
47402: 203c 0000 0700 movel #1792,%d0
47408: 46c2 movew %d2,%sr
4740a: 8082 orl %d2,%d0
4740c: 46c0 movew %d0,%sr
*/
RTEMS_INLINE_ROUTINE void _Scheduler_Schedule(
Scheduler_Control *the_scheduler
)
{
the_scheduler->Operations.schedule( the_scheduler );
4740e: 4879 0005 db8e pea 5db8e <_Scheduler>
47414: 2079 0005 db92 moveal 5db92 <_Scheduler+0x4>,%a0
4741a: 4e90 jsr %a0@
* is also the heir thread, and false otherwise.
*/
RTEMS_INLINE_ROUTINE bool _Thread_Is_executing_also_the_heir( void )
{
return ( _Thread_Executing == _Thread_Heir );
4741c: 2079 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a0
* We altered the set of thread priorities. So let's figure out
* who is the heir and if we need to switch to them.
*/
_Scheduler_Schedule(&_Scheduler);
if ( !_Thread_Is_executing_also_the_heir() &&
47422: 588f addql #4,%sp
47424: b1f9 0005 df9a cmpal 5df9a <_Per_CPU_Information+0x10>,%a0
4742a: 670e beqs 4743a <_Thread_Change_priority+0x12e>
4742c: 4a28 0074 tstb %a0@(116)
47430: 6708 beqs 4743a <_Thread_Change_priority+0x12e> <== NEVER TAKEN
_Thread_Executing->is_preemptible )
_Thread_Dispatch_necessary = true;
47432: 7001 moveq #1,%d0
47434: 13c0 0005 dfa2 moveb %d0,5dfa2 <_Per_CPU_Information+0x18>
_ISR_Enable( level );
4743a: 46c2 movew %d2,%sr
}
4743c: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2
47442: 4e5e unlk %fp
...
00047448 <_Thread_Clear_state>:
)
{
ISR_Level level;
States_Control current_state;
_ISR_Disable( level );
47448: 223c 0000 0700 movel #1792,%d1
void _Thread_Clear_state(
Thread_Control *the_thread,
States_Control state
)
{
4744e: 4e56 0000 linkw %fp,#0
47452: 206e 0008 moveal %fp@(8),%a0
47456: 2f03 movel %d3,%sp@-
47458: 202e 000c movel %fp@(12),%d0
4745c: 2f02 movel %d2,%sp@-
ISR_Level level;
States_Control current_state;
_ISR_Disable( level );
4745e: 40c2 movew %sr,%d2
47460: 8282 orl %d2,%d1
47462: 46c1 movew %d1,%sr
current_state = the_thread->current_state;
47464: 2228 0010 movel %a0@(16),%d1
if ( current_state & state ) {
47468: 2600 movel %d0,%d3
4746a: c681 andl %d1,%d3
4746c: 671c beqs 4748a <_Thread_Clear_state+0x42> <== NEVER TAKEN
RTEMS_INLINE_ROUTINE States_Control _States_Clear (
States_Control states_to_clear,
States_Control current_state
)
{
return (current_state & ~states_to_clear);
4746e: 4680 notl %d0
47470: c081 andl %d1,%d0
current_state =
the_thread->current_state = _States_Clear( state, current_state );
47472: 2140 0010 movel %d0,%a0@(16)
if ( _States_Is_ready( current_state ) ) {
47476: 6612 bnes 4748a <_Thread_Clear_state+0x42> <== NEVER TAKEN
RTEMS_INLINE_ROUTINE void _Scheduler_Unblock(
Scheduler_Control *the_scheduler,
Thread_Control *the_thread
)
{
the_scheduler->Operations.unblock( the_scheduler, the_thread );
47478: 2f08 movel %a0,%sp@-
4747a: 4879 0005 db8e pea 5db8e <_Scheduler>
47480: 2079 0005 db9e moveal 5db9e <_Scheduler+0x10>,%a0
47486: 4e90 jsr %a0@
47488: 508f addql #8,%sp
_Scheduler_Unblock( &_Scheduler, the_thread);
}
}
_ISR_Enable( level );
4748a: 46c2 movew %d2,%sr
}
4748c: 242e fff8 movel %fp@(-8),%d2
47490: 262e fffc movel %fp@(-4),%d3
47494: 4e5e unlk %fp <== NOT EXECUTED
00047498 <_Thread_Close>:
RTEMS_INLINE_ROUTINE void _Objects_Invalidate_Id(
Objects_Information *information,
Objects_Control *the_object
)
{
_Objects_Set_local_object(
47498: 4280 clrl %d0
void _Thread_Close(
Objects_Information *information,
Thread_Control *the_thread
)
{
4749a: 4e56 0000 linkw %fp,#0
4749e: 2f0b movel %a3,%sp@-
474a0: 266e 0008 moveal %fp@(8),%a3
474a4: 2f0a movel %a2,%sp@-
474a6: 246e 000c moveal %fp@(12),%a2
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
474aa: 206b 0018 moveal %a3@(24),%a0
RTEMS_INLINE_ROUTINE void _Objects_Invalidate_Id(
Objects_Information *information,
Objects_Control *the_object
)
{
_Objects_Set_local_object(
474ae: 302a 000a movew %a2@(10),%d0
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
474b2: 42b0 0c00 clrl %a0@(00000000,%d0:l:4)
*/
RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void )
{
RTEMS_COMPILER_MEMORY_BARRIER();
_Thread_Dispatch_disable_level -= 1;
474b6: 2039 0005 db08 movel 5db08 <_Thread_Dispatch_disable_level>,%d0
474bc: 5380 subql #1,%d0
* disappear and set a transient state on it. So we temporarily
* unnest dispatching.
*/
_Thread_Unnest_dispatch();
_User_extensions_Thread_delete( the_thread );
474be: 2f0a movel %a2,%sp@-
474c0: 23c0 0005 db08 movel %d0,5db08 <_Thread_Dispatch_disable_level>
474c6: 4eb9 0004 8468 jsr 48468 <_User_extensions_Thread_delete>
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
474cc: 2039 0005 db08 movel 5db08 <_Thread_Dispatch_disable_level>,%d0
474d2: 5280 addql #1,%d0
474d4: 23c0 0005 db08 movel %d0,5db08 <_Thread_Dispatch_disable_level>
/*
* Now we are in a dispatching critical section again and we
* can take the thread OUT of the published set. It is invalid
* to use this thread's Id OR name after this call.
*/
_Objects_Close( information, &the_thread->Object );
474da: 2f0a movel %a2,%sp@-
474dc: 2f0b movel %a3,%sp@-
474de: 4eb9 0004 68f0 jsr 468f0 <_Objects_Close>
/*
* By setting the dormant state, the thread will not be considered
* for scheduling when we remove any blocking states.
*/
_Thread_Set_state( the_thread, STATES_DORMANT );
474e4: 4878 0001 pea 1 <ADD>
474e8: 2f0a movel %a2,%sp@-
474ea: 4eb9 0004 7f7c jsr 47f7c <_Thread_Set_state>
if ( !_Thread_queue_Extract_with_proxy( the_thread ) ) {
474f0: 2f0a movel %a2,%sp@-
474f2: 4eb9 0004 7dec jsr 47dec <_Thread_queue_Extract_with_proxy>
474f8: 4fef 0018 lea %sp@(24),%sp
474fc: 4a00 tstb %d0
474fe: 6614 bnes 47514 <_Thread_Close+0x7c> <== NEVER TAKEN
if ( _Watchdog_Is_active( &the_thread->Timer ) )
47500: 7002 moveq #2,%d0
47502: b0aa 0050 cmpl %a2@(80),%d0
47506: 660c bnes 47514 <_Thread_Close+0x7c> <== ALWAYS TAKEN
(void) _Watchdog_Remove( &the_thread->Timer );
47508: 486a 0048 pea %a2@(72) <== NOT EXECUTED
4750c: 4eb9 0004 863c jsr 4863c <_Watchdog_Remove> <== NOT EXECUTED
47512: 588f addql #4,%sp <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Scheduler_Thread_scheduler_free(
Scheduler_Control *the_scheduler,
Thread_Control *the_thread
)
{
return the_scheduler->Operations.scheduler_free( the_scheduler, the_thread );
47514: 2f0a movel %a2,%sp@-
47516: 4879 0005 db8e pea 5db8e <_Scheduler>
4751c: 2079 0005 dba6 moveal 5dba6 <_Scheduler+0x18>,%a0
47522: 4e90 jsr %a0@
/*
* The thread might have been FP. So deal with that.
*/
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
#if ( CPU_USE_DEFERRED_FP_SWITCH == TRUE )
if ( _Thread_Is_allocated_fp( the_thread ) )
47524: 508f addql #8,%sp
47526: b5f9 0005 db8a cmpal 5db8a <_Thread_Allocated_fp>,%a2
4752c: 6606 bnes 47534 <_Thread_Close+0x9c> <== ALWAYS TAKEN
*/
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
RTEMS_INLINE_ROUTINE void _Thread_Deallocate_fp( void )
{
_Thread_Allocated_fp = NULL;
4752e: 42b9 0005 db8a clrl 5db8a <_Thread_Allocated_fp> <== NOT EXECUTED
_Thread_Deallocate_fp();
#endif
the_thread->fp_context = NULL;
if ( the_thread->Start.fp_context )
47534: 202a 00ba movel %a2@(186),%d0
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
#if ( CPU_USE_DEFERRED_FP_SWITCH == TRUE )
if ( _Thread_Is_allocated_fp( the_thread ) )
_Thread_Deallocate_fp();
#endif
the_thread->fp_context = NULL;
47538: 42aa 00f6 clrl %a2@(246)
if ( the_thread->Start.fp_context )
4753c: 4a80 tstl %d0
4753e: 670a beqs 4754a <_Thread_Close+0xb2> <== ALWAYS TAKEN
(void) _Workspace_Free( the_thread->Start.fp_context );
47540: 2f00 movel %d0,%sp@- <== NOT EXECUTED
47542: 4eb9 0004 87b0 jsr 487b0 <_Workspace_Free> <== NOT EXECUTED
47548: 588f addql #4,%sp <== NOT EXECUTED
/*
* Free the rest of the memory associated with this task
* and set the associated pointers to NULL for safety.
*/
_Thread_Stack_Free( the_thread );
4754a: 2f0a movel %a2,%sp@-
4754c: 4eb9 0004 8098 jsr 48098 <_Thread_Stack_Free>
the_thread->Start.stack = NULL;
if ( the_thread->extensions )
47552: 202a 0106 movel %a2@(262),%d0
47556: 588f addql #4,%sp
/*
* Free the rest of the memory associated with this task
* and set the associated pointers to NULL for safety.
*/
_Thread_Stack_Free( the_thread );
the_thread->Start.stack = NULL;
47558: 42aa 00be clrl %a2@(190)
if ( the_thread->extensions )
4755c: 4a80 tstl %d0
4755e: 670a beqs 4756a <_Thread_Close+0xd2> <== ALWAYS TAKEN
(void) _Workspace_Free( the_thread->extensions );
47560: 2f00 movel %d0,%sp@- <== NOT EXECUTED
47562: 4eb9 0004 87b0 jsr 487b0 <_Workspace_Free> <== NOT EXECUTED
47568: 588f addql #4,%sp <== NOT EXECUTED
the_thread->extensions = NULL;
4756a: 42aa 0106 clrl %a2@(262)
}
4756e: 246e fff8 moveal %fp@(-8),%a2
47572: 266e fffc moveal %fp@(-4),%a3
47576: 4e5e unlk %fp
...
0004762c <_Thread_Delay_ended>:
void _Thread_Delay_ended(
Objects_Id id,
void *ignored __attribute__((unused))
)
{
4762c: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
Thread_Control *the_thread;
Objects_Locations location;
the_thread = _Thread_Get( id, &location );
47630: 486e fffc pea %fp@(-4) <== NOT EXECUTED
47634: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
47638: 4eb9 0004 77cc jsr 477cc <_Thread_Get> <== NOT EXECUTED
switch ( location ) {
4763e: 508f addql #8,%sp <== NOT EXECUTED
47640: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
47644: 661e bnes 47664 <_Thread_Delay_ended+0x38> <== NOT EXECUTED
#if defined(RTEMS_MULTIPROCESSING)
case OBJECTS_REMOTE: /* impossible */
#endif
break;
case OBJECTS_LOCAL:
_Thread_Clear_state(
47646: 2f3c 1000 0018 movel #268435480,%sp@- <== NOT EXECUTED
4764c: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4764e: 4eb9 0004 7448 jsr 47448 <_Thread_Clear_state> <== NOT EXECUTED
47654: 508f addql #8,%sp <== NOT EXECUTED
47656: 2039 0005 db08 movel 5db08 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
4765c: 5380 subql #1,%d0 <== NOT EXECUTED
4765e: 23c0 0005 db08 movel %d0,5db08 <_Thread_Dispatch_disable_level><== NOT EXECUTED
| STATES_INTERRUPTIBLE_BY_SIGNAL
);
_Thread_Unnest_dispatch();
break;
}
}
47664: 4e5e unlk %fp <== NOT EXECUTED
00040564 <_Thread_Disable_dispatch>:
*/
extern Heap_Control *RTEMS_Malloc_Heap;
#endif
RTEMS_INLINE_ROUTINE void _Thread_Disable_dispatch( void )
{
40564: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
40568: 2039 0006 33a4 movel 633a4 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
4056e: 5280 addql #1,%d0 <== NOT EXECUTED
40570: 23c0 0006 33a4 movel %d0,633a4 <_Thread_Dispatch_disable_level><== NOT EXECUTED
#if defined(RTEMS_HEAVY_MALLOC_DEBUG)
if ( _Thread_Dispatch_disable_level == 1 ) {
_Heap_Walk( RTEMS_Malloc_Heap,99, false );
}
#endif
}
40576: 4e5e unlk %fp <== NOT EXECUTED
00047668 <_Thread_Dispatch>:
* dispatch thread
* no dispatch thread
*/
void _Thread_Dispatch( void )
{
47668: 4e56 ffc8 linkw %fp,#-56
4766c: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@
Thread_Control *executing;
Thread_Control *heir;
ISR_Level level;
executing = _Thread_Executing;
_ISR_Disable( level );
47670: 283c 0000 0700 movel #1792,%d4
47676: 2204 movel %d4,%d1
{
Thread_Control *executing;
Thread_Control *heir;
ISR_Level level;
executing = _Thread_Executing;
47678: 2479 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a2
_ISR_Disable( level );
4767e: 40c0 movew %sr,%d0
47680: 8280 orl %d0,%d1
47682: 46c1 movew %d1,%sr
_ISR_Enable( level );
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
{
Timestamp_Control uptime, ran;
_TOD_Get_uptime( &uptime );
47684: 260e movel %fp,%d3
_Timestamp_Subtract(
47686: 240e movel %fp,%d2
_ISR_Enable( level );
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
{
Timestamp_Control uptime, ran;
_TOD_Get_uptime( &uptime );
47688: 5183 subql #8,%d3
_Timestamp_Subtract(
4768a: 0682 ffff fff0 addil #-16,%d2
&_Thread_Time_of_last_context_switch,
&uptime,
&ran
);
_Timestamp_Add_to( &executing->cpu_time_used, &ran );
47690: 2e3c 0004 8234 movel #295476,%d7
if ( _Thread_libc_reent ) {
executing->libc_reent = *_Thread_libc_reent;
*_Thread_libc_reent = heir->libc_reent;
}
_User_extensions_Thread_switch( executing, heir );
47696: 2c3c 0004 84e8 movel #296168,%d6
if ( executing->fp_context != NULL )
_Context_Save_fp( &executing->fp_context );
#endif
#endif
_Context_Switch( &executing->Registers, &heir->Registers );
4769c: 2a3c 0004 87fc movel #296956,%d5
#if ( CPU_USE_DEFERRED_FP_SWITCH == TRUE )
if ( (executing->fp_context != NULL) &&
!_Thread_Is_allocated_fp( executing ) ) {
if ( _Thread_Allocated_fp != NULL )
_Context_Save_fp( &_Thread_Allocated_fp->fp_context );
_Context_Restore_fp( &executing->fp_context );
476a2: 4bf9 0004 8964 lea 48964 <_CPU_Context_restore_fp>,%a5
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
#if ( CPU_USE_DEFERRED_FP_SWITCH == TRUE )
if ( (executing->fp_context != NULL) &&
!_Thread_Is_allocated_fp( executing ) ) {
if ( _Thread_Allocated_fp != NULL )
_Context_Save_fp( &_Thread_Allocated_fp->fp_context );
476a8: 49f9 0004 8942 lea 48942 <_CPU_Context_save_fp>,%a4
Thread_Control *heir;
ISR_Level level;
executing = _Thread_Executing;
_ISR_Disable( level );
while ( _Thread_Dispatch_necessary == true ) {
476ae: 6000 00d4 braw 47784 <_Thread_Dispatch+0x11c>
heir = _Thread_Heir;
_Thread_Dispatch_disable_level = 1;
476b2: 7201 moveq #1,%d1
476b4: 23c1 0005 db08 movel %d1,5db08 <_Thread_Dispatch_disable_level>
ISR_Level level;
executing = _Thread_Executing;
_ISR_Disable( level );
while ( _Thread_Dispatch_necessary == true ) {
heir = _Thread_Heir;
476ba: 2679 0005 df9a moveal 5df9a <_Per_CPU_Information+0x10>,%a3
_Thread_Dispatch_disable_level = 1;
_Thread_Dispatch_necessary = false;
476c0: 4201 clrb %d1
_Thread_Executing = heir;
476c2: 23cb 0005 df96 movel %a3,5df96 <_Per_CPU_Information+0xc>
executing = _Thread_Executing;
_ISR_Disable( level );
while ( _Thread_Dispatch_necessary == true ) {
heir = _Thread_Heir;
_Thread_Dispatch_disable_level = 1;
_Thread_Dispatch_necessary = false;
476c8: 13c1 0005 dfa2 moveb %d1,5dfa2 <_Per_CPU_Information+0x18>
/*
* When the heir and executing are the same, then we are being
* requested to do the post switch dispatching. This is normally
* done to dispatch signals.
*/
if ( heir == executing )
476ce: b5cb cmpal %a3,%a2
476d0: 6700 00bc beqw 4778e <_Thread_Dispatch+0x126>
*/
#if __RTEMS_ADA__
executing->rtems_ada_self = rtems_ada_self;
rtems_ada_self = heir->rtems_ada_self;
#endif
if ( heir->budget_algorithm == THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE )
476d4: 7201 moveq #1,%d1
476d6: b2ab 007a cmpl %a3@(122),%d1
476da: 660a bnes 476e6 <_Thread_Dispatch+0x7e> <== ALWAYS TAKEN
heir->cpu_time_budget = _Thread_Ticks_per_timeslice;
476dc: 41f9 0005 dac0 lea 5dac0 <_Thread_Ticks_per_timeslice>,%a0 <== NOT EXECUTED
476e2: 2750 0076 movel %a0@,%a3@(118) <== NOT EXECUTED
_ISR_Enable( level );
476e6: 46c0 movew %d0,%sr
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
{
Timestamp_Control uptime, ran;
_TOD_Get_uptime( &uptime );
476e8: 2f03 movel %d3,%sp@-
476ea: 4eb9 0004 ab00 jsr 4ab00 <_TOD_Get_uptime>
_Timestamp_Subtract(
476f0: 2f02 movel %d2,%sp@-
476f2: 2f03 movel %d3,%sp@-
476f4: 4879 0005 dbd4 pea 5dbd4 <_Thread_Time_of_last_context_switch>
476fa: 4eb9 0004 826c jsr 4826c <_Timespec_Subtract>
&_Thread_Time_of_last_context_switch,
&uptime,
&ran
);
_Timestamp_Add_to( &executing->cpu_time_used, &ran );
47700: 2047 moveal %d7,%a0
47702: 2f02 movel %d2,%sp@-
47704: 486a 0082 pea %a2@(130)
47708: 4e90 jsr %a0@
#endif
/*
* Switch libc's task specific data.
*/
if ( _Thread_libc_reent ) {
4770a: 2079 0005 dbae moveal 5dbae <_Thread_libc_reent>,%a0
47710: 4fef 0018 lea %sp@(24),%sp
&_Thread_Time_of_last_context_switch,
&uptime,
&ran
);
_Timestamp_Add_to( &executing->cpu_time_used, &ran );
_Thread_Time_of_last_context_switch = uptime;
47714: 202e fff8 movel %fp@(-8),%d0
47718: 222e fffc movel %fp@(-4),%d1
4771c: 23c0 0005 dbd4 movel %d0,5dbd4 <_Thread_Time_of_last_context_switch>
47722: 23c1 0005 dbd8 movel %d1,5dbd8 <_Thread_Time_of_last_context_switch+0x4>
#endif
/*
* Switch libc's task specific data.
*/
if ( _Thread_libc_reent ) {
47728: 4a88 tstl %a0
4772a: 6708 beqs 47734 <_Thread_Dispatch+0xcc> <== NEVER TAKEN
executing->libc_reent = *_Thread_libc_reent;
4772c: 2550 00fa movel %a0@,%a2@(250)
*_Thread_libc_reent = heir->libc_reent;
47730: 20ab 00fa movel %a3@(250),%a0@
}
_User_extensions_Thread_switch( executing, heir );
47734: 2f0b movel %a3,%sp@-
47736: 2046 moveal %d6,%a0
47738: 2f0a movel %a2,%sp@-
4773a: 4e90 jsr %a0@
if ( executing->fp_context != NULL )
_Context_Save_fp( &executing->fp_context );
#endif
#endif
_Context_Switch( &executing->Registers, &heir->Registers );
4773c: 486b 00c2 pea %a3@(194)
47740: 2045 moveal %d5,%a0
47742: 486a 00c2 pea %a2@(194)
47746: 4e90 jsr %a0@
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
#if ( CPU_USE_DEFERRED_FP_SWITCH == TRUE )
if ( (executing->fp_context != NULL) &&
47748: 4fef 0010 lea %sp@(16),%sp
4774c: 4aaa 00f6 tstl %a2@(246)
47750: 6724 beqs 47776 <_Thread_Dispatch+0x10e> <== ALWAYS TAKEN
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
RTEMS_INLINE_ROUTINE bool _Thread_Is_allocated_fp (
const Thread_Control *the_thread
)
{
return ( the_thread == _Thread_Allocated_fp );
47752: 2079 0005 db8a moveal 5db8a <_Thread_Allocated_fp>,%a0 <== NOT EXECUTED
47758: b1ca cmpal %a2,%a0 <== NOT EXECUTED
4775a: 671a beqs 47776 <_Thread_Dispatch+0x10e> <== NOT EXECUTED
!_Thread_Is_allocated_fp( executing ) ) {
if ( _Thread_Allocated_fp != NULL )
4775c: 4a88 tstl %a0 <== NOT EXECUTED
4775e: 6708 beqs 47768 <_Thread_Dispatch+0x100> <== NOT EXECUTED
_Context_Save_fp( &_Thread_Allocated_fp->fp_context );
47760: 4868 00f6 pea %a0@(246) <== NOT EXECUTED
47764: 4e94 jsr %a4@ <== NOT EXECUTED
47766: 588f addql #4,%sp <== NOT EXECUTED
_Context_Restore_fp( &executing->fp_context );
47768: 486a 00f6 pea %a2@(246) <== NOT EXECUTED
4776c: 4e95 jsr %a5@ <== NOT EXECUTED
_Thread_Allocated_fp = executing;
4776e: 588f addql #4,%sp <== NOT EXECUTED
47770: 23ca 0005 db8a movel %a2,5db8a <_Thread_Allocated_fp> <== NOT EXECUTED
if ( executing->fp_context != NULL )
_Context_Restore_fp( &executing->fp_context );
#endif
#endif
executing = _Thread_Executing;
47776: 2479 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a2
_ISR_Disable( level );
4777c: 2204 movel %d4,%d1
4777e: 40c0 movew %sr,%d0
47780: 8280 orl %d0,%d1
47782: 46c1 movew %d1,%sr
Thread_Control *heir;
ISR_Level level;
executing = _Thread_Executing;
_ISR_Disable( level );
while ( _Thread_Dispatch_necessary == true ) {
47784: 1239 0005 dfa2 moveb 5dfa2 <_Per_CPU_Information+0x18>,%d1
4778a: 6600 ff26 bnew 476b2 <_Thread_Dispatch+0x4a>
_ISR_Disable( level );
}
post_switch:
_Thread_Dispatch_disable_level = 0;
4778e: 42b9 0005 db08 clrl 5db08 <_Thread_Dispatch_disable_level>
_ISR_Enable( level );
47794: 46c0 movew %d0,%sr
_API_extensions_Run_postswitch();
47796: 4eb9 0004 5e88 jsr 45e88 <_API_extensions_Run_postswitch>
}
4779c: 4cee 3cfc ffc8 moveml %fp@(-56),%d2-%d7/%a2-%a5
477a2: 4e5e unlk %fp <== NOT EXECUTED
000477cc <_Thread_Get>:
*/
Thread_Control *_Thread_Get (
Objects_Id id,
Objects_Locations *location
)
{
477cc: 4e56 0000 linkw %fp,#0
477d0: 202e 0008 movel %fp@(8),%d0
477d4: 2f03 movel %d3,%sp@-
477d6: 206e 000c moveal %fp@(12),%a0
477da: 2f02 movel %d2,%sp@-
uint32_t the_class;
Objects_Information **api_information;
Objects_Information *information;
Thread_Control *tp = (Thread_Control *) 0;
if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ) {
477dc: 4a80 tstl %d0
477de: 6618 bnes 477f8 <_Thread_Get+0x2c>
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
477e0: 2039 0005 db08 movel 5db08 <_Thread_Dispatch_disable_level>,%d0
477e6: 5280 addql #1,%d0
477e8: 23c0 0005 db08 movel %d0,5db08 <_Thread_Dispatch_disable_level>
_Thread_Disable_dispatch();
*location = OBJECTS_LOCAL;
477ee: 4290 clrl %a0@
tp = _Thread_Executing;
477f0: 2039 0005 df96 movel 5df96 <_Per_CPU_Information+0xc>,%d0
goto done;
477f6: 6040 bras 47838 <_Thread_Get+0x6c>
*/
RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API(
Objects_Id id
)
{
return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS);
477f8: 7418 moveq #24,%d2
477fa: 2200 movel %d0,%d1
477fc: e4a9 lsrl %d2,%d1
477fe: 7607 moveq #7,%d3
*/
RTEMS_INLINE_ROUTINE bool _Objects_Is_api_valid(
uint32_t the_api
)
{
if ( !the_api || the_api > OBJECTS_APIS_LAST )
47800: 143c 0002 moveb #2,%d2
*/
RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API(
Objects_Id id
)
{
return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS);
47804: c283 andl %d3,%d1
*/
RTEMS_INLINE_ROUTINE bool _Objects_Is_api_valid(
uint32_t the_api
)
{
if ( !the_api || the_api > OBJECTS_APIS_LAST )
47806: 2241 moveal %d1,%a1
47808: 5389 subql #1,%a1
4780a: b489 cmpl %a1,%d2
4780c: 6436 bccs 47844 <_Thread_Get+0x78> <== ALWAYS TAKEN
4780e: 6010 bras 47820 <_Thread_Get+0x54> <== NOT EXECUTED
if ( the_class != 1 ) { /* threads are always first class :) */
*location = OBJECTS_ERROR;
goto done;
}
api_information = _Objects_Information_table[ the_api ];
47810: 43f9 0005 dac4 lea 5dac4 <_Objects_Information_table>,%a1
*location = OBJECTS_ERROR;
goto done;
}
#endif
information = api_information[ the_class ];
47816: 2271 1c00 moveal %a1@(00000000,%d1:l:4),%a1
4781a: 2229 0004 movel %a1@(4),%d1
if ( !information ) {
4781e: 6608 bnes 47828 <_Thread_Get+0x5c> <== ALWAYS TAKEN
*location = OBJECTS_ERROR;
47820: 7001 moveq #1,%d0 <== NOT EXECUTED
47822: 2080 movel %d0,%a0@ <== NOT EXECUTED
{
uint32_t the_api;
uint32_t the_class;
Objects_Information **api_information;
Objects_Information *information;
Thread_Control *tp = (Thread_Control *) 0;
47824: 4280 clrl %d0 <== NOT EXECUTED
#endif
information = api_information[ the_class ];
if ( !information ) {
*location = OBJECTS_ERROR;
goto done;
47826: 6010 bras 47838 <_Thread_Get+0x6c> <== NOT EXECUTED
}
tp = (Thread_Control *) _Objects_Get( information, id, location );
47828: 2f08 movel %a0,%sp@-
4782a: 2f00 movel %d0,%sp@-
4782c: 2f01 movel %d1,%sp@-
4782e: 4eb9 0004 6ccc jsr 46ccc <_Objects_Get>
47834: 4fef 000c lea %sp@(12),%sp
done:
return tp;
}
47838: 242e fff8 movel %fp@(-8),%d2
4783c: 262e fffc movel %fp@(-4),%d3
47840: 4e5e unlk %fp
47842: 4e75 rts
*/
RTEMS_INLINE_ROUTINE uint32_t _Objects_Get_class(
Objects_Id id
)
{
return (uint32_t)
47844: 761b moveq #27,%d3
47846: 2400 movel %d0,%d2
47848: e6aa lsrl %d3,%d2
*location = OBJECTS_ERROR;
goto done;
}
the_class = _Objects_Get_class( id );
if ( the_class != 1 ) { /* threads are always first class :) */
4784a: 163c 0001 moveb #1,%d3
4784e: b682 cmpl %d2,%d3
47850: 67be beqs 47810 <_Thread_Get+0x44> <== ALWAYS TAKEN
47852: 60cc bras 47820 <_Thread_Get+0x54> <== NOT EXECUTED
0004c76c <_Thread_Handler>:
*
* Output parameters: NONE
*/
void _Thread_Handler( void )
{
4c76c: 4e56 0000 linkw %fp,#0
4c770: 2f0a movel %a2,%sp@-
#if defined(EXECUTE_GLOBAL_CONSTRUCTORS)
static char doneConstructors;
char doneCons;
#endif
executing = _Thread_Executing;
4c772: 2479 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a2
*
* Output parameters: NONE
*/
void _Thread_Handler( void )
{
4c778: 2f02 movel %d2,%sp@-
/*
* have to put level into a register for those cpu's that use
* inline asm here
*/
level = executing->Start.isr_level;
4c77a: 222a 00a8 movel %a2@(168),%d1
_ISR_Set_level(level);
4c77e: 40c0 movew %sr,%d0
4c780: e189 lsll #8,%d1
4c782: 0280 0000 f8ff andil #63743,%d0
4c788: 8081 orl %d1,%d0
4c78a: 46c0 movew %d0,%sr
#if defined(EXECUTE_GLOBAL_CONSTRUCTORS)
doneCons = doneConstructors;
doneConstructors = 1;
4c78c: 7001 moveq #1,%d0
level = executing->Start.isr_level;
_ISR_Set_level(level);
#if defined(EXECUTE_GLOBAL_CONSTRUCTORS)
doneCons = doneConstructors;
4c78e: 1439 0005 d2c8 moveb 5d2c8 <doneConstructors.3366>,%d2
doneConstructors = 1;
4c794: 13c0 0005 d2c8 moveb %d0,5d2c8 <doneConstructors.3366>
#endif
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
#if ( CPU_USE_DEFERRED_FP_SWITCH == TRUE )
if ( (executing->fp_context != NULL) &&
4c79a: 4aaa 00f6 tstl %a2@(246)
4c79e: 6720 beqs 4c7c0 <_Thread_Handler+0x54>
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
RTEMS_INLINE_ROUTINE bool _Thread_Is_allocated_fp (
const Thread_Control *the_thread
)
{
return ( the_thread == _Thread_Allocated_fp );
4c7a0: 2079 0005 db8a moveal 5db8a <_Thread_Allocated_fp>,%a0
4c7a6: b1ca cmpal %a2,%a0
4c7a8: 6716 beqs 4c7c0 <_Thread_Handler+0x54> <== NEVER TAKEN
!_Thread_Is_allocated_fp( executing ) ) {
if ( _Thread_Allocated_fp != NULL )
4c7aa: 4a88 tstl %a0
4c7ac: 670c beqs 4c7ba <_Thread_Handler+0x4e> <== ALWAYS TAKEN
_Context_Save_fp( &_Thread_Allocated_fp->fp_context );
4c7ae: 4868 00f6 pea %a0@(246) <== NOT EXECUTED
4c7b2: 4eb9 0004 8942 jsr 48942 <_CPU_Context_save_fp> <== NOT EXECUTED
4c7b8: 588f addql #4,%sp <== NOT EXECUTED
_Thread_Allocated_fp = executing;
4c7ba: 23ca 0005 db8a movel %a2,5db8a <_Thread_Allocated_fp>
/*
* Take care that 'begin' extensions get to complete before
* 'switch' extensions can run. This means must keep dispatch
* disabled until all 'begin' extensions complete.
*/
_User_extensions_Thread_begin( executing );
4c7c0: 2f0a movel %a2,%sp@-
4c7c2: 4eb9 0004 8364 jsr 48364 <_User_extensions_Thread_begin>
/*
* At this point, the dispatch disable level BETTER be 1.
*/
_Thread_Enable_dispatch();
4c7c8: 4eb9 0004 77a6 jsr 477a6 <_Thread_Enable_dispatch>
/*
* _init could be a weak symbol and we SHOULD test it but it isn't
* in any configuration I know of and it generates a warning on every
* RTEMS target configuration. --joel (12 May 2007)
*/
if (!doneCons) /* && (volatile void *)_init) */ {
4c7ce: 588f addql #4,%sp
4c7d0: 4a02 tstb %d2
4c7d2: 6606 bnes 4c7da <_Thread_Handler+0x6e>
INIT_NAME ();
4c7d4: 4eb9 0005 a6f4 jsr 5a6f4 <_init>
}
#endif
if ( executing->Start.prototype == THREAD_START_NUMERIC ) {
4c7da: 202a 0092 movel %a2@(146),%d0
4c7de: 6606 bnes 4c7e6 <_Thread_Handler+0x7a>
executing->Wait.return_argument =
(*(Thread_Entry_numeric) executing->Start.entry_point)(
4c7e0: 2f2a 009a movel %a2@(154),%sp@-
4c7e4: 600a bras 4c7f0 <_Thread_Handler+0x84>
executing->Start.numeric_argument
);
}
#if defined(RTEMS_POSIX_API)
else if ( executing->Start.prototype == THREAD_START_POINTER ) {
4c7e6: 7201 moveq #1,%d1
4c7e8: b280 cmpl %d0,%d1
4c7ea: 6610 bnes 4c7fc <_Thread_Handler+0x90> <== NEVER TAKEN
executing->Wait.return_argument =
(*(Thread_Entry_pointer) executing->Start.entry_point)(
4c7ec: 2f2a 0096 movel %a2@(150),%sp@-
4c7f0: 206a 008e moveal %a2@(142),%a0
4c7f4: 4e90 jsr %a0@
executing->Start.numeric_argument
);
}
#if defined(RTEMS_POSIX_API)
else if ( executing->Start.prototype == THREAD_START_POINTER ) {
executing->Wait.return_argument =
4c7f6: 588f addql #4,%sp
4c7f8: 2540 0028 movel %d0,%a2@(40)
* was placed in return_argument. This assumed that if it returned
* anything (which is not supporting in all APIs), then it would be
* able to fit in a (void *).
*/
_User_extensions_Thread_exitted( executing );
4c7fc: 2f0a movel %a2,%sp@-
4c7fe: 4eb9 0004 839c jsr 4839c <_User_extensions_Thread_exitted>
_Internal_error_Occurred(
4c804: 4878 0005 pea 5 <COMPARE>
4c808: 4878 0001 pea 1 <ADD>
4c80c: 42a7 clrl %sp@-
4c80e: 4eb9 0004 67c0 jsr 467c0 <_Internal_error_Occurred>
00047854 <_Thread_Initialize>:
Thread_CPU_budget_algorithms budget_algorithm,
Thread_CPU_budget_algorithm_callout budget_callout,
uint32_t isr_level,
Objects_Name name
)
{
47854: 4e56 ffe8 linkw %fp,#-24
47858: 222e 0010 movel %fp@(16),%d1
4785c: 48d7 047c moveml %d2-%d6/%a2,%sp@
47860: 246e 000c moveal %fp@(12),%a2
47864: 242e 0014 movel %fp@(20),%d2
47868: 2a2e 001c movel %fp@(28),%d5
4786c: 282e 0024 movel %fp@(36),%d4
47870: 162e 001b moveb %fp@(27),%d3
47874: 1c2e 0023 moveb %fp@(35),%d6
/*
* Zero out all the allocated memory fields
*/
for ( i=0 ; i <= THREAD_API_LAST ; i++ )
the_thread->API_Extensions[i] = NULL;
47878: 42aa 00fe clrl %a2@(254)
4787c: 42aa 0102 clrl %a2@(258)
extensions_area = NULL;
the_thread->libc_reent = NULL;
47880: 42aa 00fa clrl %a2@(250)
if ( !actual_stack_size || actual_stack_size < stack_size )
return false; /* stack allocation failed */
stack = the_thread->Start.stack;
#else
if ( !stack_area ) {
47884: 4a81 tstl %d1
47886: 6624 bnes 478ac <_Thread_Initialize+0x58> <== NEVER TAKEN
actual_stack_size = _Thread_Stack_Allocate( the_thread, stack_size );
47888: 2f02 movel %d2,%sp@-
4788a: 2f0a movel %a2,%sp@-
4788c: 4eb9 0004 804c jsr 4804c <_Thread_Stack_Allocate>
if ( !actual_stack_size || actual_stack_size < stack_size )
47892: 508f addql #8,%sp
47894: 4a80 tstl %d0
47896: 6700 0188 beqw 47a20 <_Thread_Initialize+0x1cc>
4789a: b480 cmpl %d0,%d2
4789c: 6200 0182 bhiw 47a20 <_Thread_Initialize+0x1cc>
return false; /* stack allocation failed */
stack = the_thread->Start.stack;
478a0: 222a 00be movel %a2@(190),%d1
the_thread->Start.core_allocated_stack = true;
478a4: 7401 moveq #1,%d2
478a6: 1542 00b0 moveb %d2,%a2@(176)
478aa: 6008 bras 478b4 <_Thread_Initialize+0x60>
} else {
stack = stack_area;
actual_stack_size = stack_size;
the_thread->Start.core_allocated_stack = false;
478ac: 4200 clrb %d0 <== NOT EXECUTED
478ae: 1540 00b0 moveb %d0,%a2@(176) <== NOT EXECUTED
478b2: 2002 movel %d2,%d0 <== NOT EXECUTED
Stack_Control *the_stack,
void *starting_address,
size_t size
)
{
the_stack->area = starting_address;
478b4: 2541 00b6 movel %d1,%a2@(182)
the_stack->size = size;
478b8: 2540 00b2 movel %d0,%a2@(178)
/*
* Allocate the floating point area for this thread
*/
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
if ( is_fp ) {
478bc: 4a03 tstb %d3
478be: 6714 beqs 478d4 <_Thread_Initialize+0x80>
fp_area = _Workspace_Allocate( CONTEXT_FP_SIZE );
478c0: 4878 001c pea 1c <OPER2+0x8>
478c4: 4eb9 0004 8794 jsr 48794 <_Workspace_Allocate>
if ( !fp_area )
478ca: 588f addql #4,%sp
/*
* Allocate the floating point area for this thread
*/
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
if ( is_fp ) {
fp_area = _Workspace_Allocate( CONTEXT_FP_SIZE );
478cc: 2600 movel %d0,%d3
if ( !fp_area )
478ce: 6606 bnes 478d6 <_Thread_Initialize+0x82> <== ALWAYS TAKEN
478d0: 6000 00e6 braw 479b8 <_Thread_Initialize+0x164> <== NOT EXECUTED
extensions_area = NULL;
the_thread->libc_reent = NULL;
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
fp_area = NULL;
478d4: 4283 clrl %d3
#endif
/*
* Allocate the extensions area for this thread
*/
if ( _Thread_Maximum_extensions ) {
478d6: 2039 0005 dbba movel 5dbba <_Thread_Maximum_extensions>,%d0
fp_area = _Workspace_Allocate( CONTEXT_FP_SIZE );
if ( !fp_area )
goto failed;
fp_area = _Context_Fp_start( fp_area, 0 );
}
the_thread->fp_context = fp_area;
478dc: 2543 00f6 movel %d3,%a2@(246)
the_thread->Start.fp_context = fp_area;
478e0: 2543 00ba movel %d3,%a2@(186)
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
478e4: 42aa 0050 clrl %a2@(80)
the_watchdog->routine = routine;
478e8: 42aa 0064 clrl %a2@(100)
the_watchdog->id = id;
478ec: 42aa 0068 clrl %a2@(104)
the_watchdog->user_data = user_data;
478f0: 42aa 006c clrl %a2@(108)
#endif
/*
* Allocate the extensions area for this thread
*/
if ( _Thread_Maximum_extensions ) {
478f4: 4a80 tstl %d0
478f6: 6718 beqs 47910 <_Thread_Initialize+0xbc>
extensions_area = _Workspace_Allocate(
478f8: e588 lsll #2,%d0
478fa: 2040 moveal %d0,%a0
478fc: 4868 0004 pea %a0@(4)
47900: 4eb9 0004 8794 jsr 48794 <_Workspace_Allocate>
(_Thread_Maximum_extensions + 1) * sizeof( void * )
);
if ( !extensions_area )
47906: 588f addql #4,%sp
/*
* Allocate the extensions area for this thread
*/
if ( _Thread_Maximum_extensions ) {
extensions_area = _Workspace_Allocate(
47908: 2400 movel %d0,%d2
(_Thread_Maximum_extensions + 1) * sizeof( void * )
);
if ( !extensions_area )
4790a: 6606 bnes 47912 <_Thread_Initialize+0xbe> <== ALWAYS TAKEN
4790c: 6000 00ac braw 479ba <_Thread_Initialize+0x166> <== NOT EXECUTED
* Zero out all the allocated memory fields
*/
for ( i=0 ; i <= THREAD_API_LAST ; i++ )
the_thread->API_Extensions[i] = NULL;
extensions_area = NULL;
47910: 4282 clrl %d2
(_Thread_Maximum_extensions + 1) * sizeof( void * )
);
if ( !extensions_area )
goto failed;
}
the_thread->extensions = (void **) extensions_area;
47912: 2542 0106 movel %d2,%a2@(262)
* if they are linked to the thread. An extension user may
* create the extension long after tasks have been created
* so they cannot rely on the thread create user extension
* call.
*/
if ( the_thread->extensions ) {
47916: 6714 beqs 4792c <_Thread_Initialize+0xd8>
for ( i = 0; i <= _Thread_Maximum_extensions ; i++ )
47918: 2239 0005 dbba movel 5dbba <_Thread_Maximum_extensions>,%d1
4791e: 2042 moveal %d2,%a0
47920: 4280 clrl %d0
47922: 6004 bras 47928 <_Thread_Initialize+0xd4>
the_thread->extensions[i] = NULL;
47924: 4298 clrl %a0@+
* create the extension long after tasks have been created
* so they cannot rely on the thread create user extension
* call.
*/
if ( the_thread->extensions ) {
for ( i = 0; i <= _Thread_Maximum_extensions ; i++ )
47926: 5280 addql #1,%d0
47928: b280 cmpl %d0,%d1
4792a: 64f8 bccs 47924 <_Thread_Initialize+0xd0>
/*
* General initialization
*/
the_thread->Start.is_preemptible = is_preemptible;
the_thread->Start.budget_algorithm = budget_algorithm;
4792c: 2544 00a0 movel %d4,%a2@(160)
the_thread->Start.budget_callout = budget_callout;
switch ( budget_algorithm ) {
47930: 7002 moveq #2,%d0
/*
* General initialization
*/
the_thread->Start.is_preemptible = is_preemptible;
47932: 1546 009e moveb %d6,%a2@(158)
the_thread->Start.budget_algorithm = budget_algorithm;
the_thread->Start.budget_callout = budget_callout;
47936: 256e 0028 00a4 movel %fp@(40),%a2@(164)
switch ( budget_algorithm ) {
4793c: b084 cmpl %d4,%d0
4793e: 660a bnes 4794a <_Thread_Initialize+0xf6> <== ALWAYS TAKEN
case THREAD_CPU_BUDGET_ALGORITHM_NONE:
case THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE:
break;
#if defined(RTEMS_SCORE_THREAD_ENABLE_EXHAUST_TIMESLICE)
case THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE:
the_thread->cpu_time_budget = _Thread_Ticks_per_timeslice;
47940: 41f9 0005 dac0 lea 5dac0 <_Thread_Ticks_per_timeslice>,%a0 <== NOT EXECUTED
47946: 2550 0076 movel %a0@,%a2@(118) <== NOT EXECUTED
#endif
}
the_thread->Start.isr_level = isr_level;
the_thread->current_state = STATES_DORMANT;
4794a: 7001 moveq #1,%d0
case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT:
break;
#endif
}
the_thread->Start.isr_level = isr_level;
4794c: 256e 002c 00a8 movel %fp@(44),%a2@(168)
RTEMS_INLINE_ROUTINE void* _Scheduler_Thread_scheduler_allocate(
Scheduler_Control *the_scheduler,
Thread_Control *the_thread
)
{
return
47952: 2079 0005 dba2 moveal 5dba2 <_Scheduler+0x14>,%a0
the_thread->current_state = STATES_DORMANT;
47958: 2540 0010 movel %d0,%a2@(16)
the_thread->Wait.queue = NULL;
4795c: 42aa 0044 clrl %a2@(68)
the_thread->resource_count = 0;
47960: 42aa 001c clrl %a2@(28)
the_thread->real_priority = priority;
47964: 2545 0018 movel %d5,%a2@(24)
the_thread->Start.initial_priority = priority;
47968: 2545 00ac movel %d5,%a2@(172)
4796c: 2f0a movel %a2,%sp@-
4796e: 4879 0005 db8e pea 5db8e <_Scheduler>
47974: 4e90 jsr %a0@
sched =_Scheduler_Thread_scheduler_allocate( &_Scheduler, the_thread );
if ( !sched )
47976: 508f addql #8,%sp
47978: 2800 movel %d0,%d4
4797a: 6740 beqs 479bc <_Thread_Initialize+0x168> <== NEVER TAKEN
goto failed;
_Thread_Set_priority( the_thread, priority );
4797c: 2f05 movel %d5,%sp@-
4797e: 2f0a movel %a2,%sp@-
47980: 4eb9 0004 7f54 jsr 47f54 <_Thread_Set_priority>
_Thread_Stack_Free( the_thread );
return false;
}
47986: 206e 0008 moveal %fp@(8),%a0
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
4798a: 4280 clrl %d0
4798c: 2068 0018 moveal %a0@(24),%a0
47990: 302a 000a movew %a2@(10),%d0
/*
* Initialize the CPU usage statistics
*/
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
_Timestamp_Set_to_zero( &the_thread->cpu_time_used );
47994: 42aa 0082 clrl %a2@(130)
47998: 42aa 0086 clrl %a2@(134)
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
4799c: 218a 0c00 movel %a2,%a0@(00000000,%d0:l:4)
information,
_Objects_Get_index( the_object->id ),
the_object
);
the_object->name = name;
479a0: 256e 0030 000c movel %fp@(48),%a2@(12)
* enabled when we get here. We want to be able to run the
* user extensions with dispatching enabled. The Allocator
* Mutex provides sufficient protection to let the user extensions
* run safely.
*/
extension_status = _User_extensions_Thread_create( the_thread );
479a6: 2f0a movel %a2,%sp@-
479a8: 4eb9 0004 8420 jsr 48420 <_User_extensions_Thread_create>
if ( extension_status )
479ae: 4fef 000c lea %sp@(12),%sp
479b2: 4a00 tstb %d0
479b4: 6706 beqs 479bc <_Thread_Initialize+0x168> <== NEVER TAKEN
479b6: 606c bras 47a24 <_Thread_Initialize+0x1d0>
* Zero out all the allocated memory fields
*/
for ( i=0 ; i <= THREAD_API_LAST ; i++ )
the_thread->API_Extensions[i] = NULL;
extensions_area = NULL;
479b8: 4282 clrl %d2 <== NOT EXECUTED
size_t actual_stack_size = 0;
void *stack = NULL;
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
void *fp_area;
#endif
void *sched = NULL;
479ba: 4284 clrl %d4 <== NOT EXECUTED
extension_status = _User_extensions_Thread_create( the_thread );
if ( extension_status )
return true;
failed:
if ( the_thread->libc_reent )
479bc: 202a 00fa movel %a2@(250),%d0 <== NOT EXECUTED
479c0: 670a beqs 479cc <_Thread_Initialize+0x178> <== NOT EXECUTED
_Workspace_Free( the_thread->libc_reent );
479c2: 2f00 movel %d0,%sp@- <== NOT EXECUTED
479c4: 4eb9 0004 87b0 jsr 487b0 <_Workspace_Free> <== NOT EXECUTED
479ca: 588f addql #4,%sp <== NOT EXECUTED
for ( i=0 ; i <= THREAD_API_LAST ; i++ )
if ( the_thread->API_Extensions[i] )
479cc: 202a 00fe movel %a2@(254),%d0 <== NOT EXECUTED
479d0: 670a beqs 479dc <_Thread_Initialize+0x188> <== NOT EXECUTED
_Workspace_Free( the_thread->API_Extensions[i] );
479d2: 2f00 movel %d0,%sp@- <== NOT EXECUTED
479d4: 4eb9 0004 87b0 jsr 487b0 <_Workspace_Free> <== NOT EXECUTED
479da: 588f addql #4,%sp <== NOT EXECUTED
failed:
if ( the_thread->libc_reent )
_Workspace_Free( the_thread->libc_reent );
for ( i=0 ; i <= THREAD_API_LAST ; i++ )
if ( the_thread->API_Extensions[i] )
479dc: 202a 0102 movel %a2@(258),%d0 <== NOT EXECUTED
479e0: 670a beqs 479ec <_Thread_Initialize+0x198> <== NOT EXECUTED
_Workspace_Free( the_thread->API_Extensions[i] );
479e2: 2f00 movel %d0,%sp@- <== NOT EXECUTED
479e4: 4eb9 0004 87b0 jsr 487b0 <_Workspace_Free> <== NOT EXECUTED
479ea: 588f addql #4,%sp <== NOT EXECUTED
if ( extensions_area )
479ec: 4a82 tstl %d2 <== NOT EXECUTED
479ee: 670a beqs 479fa <_Thread_Initialize+0x1a6> <== NOT EXECUTED
(void) _Workspace_Free( extensions_area );
479f0: 2f02 movel %d2,%sp@- <== NOT EXECUTED
479f2: 4eb9 0004 87b0 jsr 487b0 <_Workspace_Free> <== NOT EXECUTED
479f8: 588f addql #4,%sp <== NOT EXECUTED
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
if ( fp_area )
479fa: 4a83 tstl %d3 <== NOT EXECUTED
479fc: 670a beqs 47a08 <_Thread_Initialize+0x1b4> <== NOT EXECUTED
(void) _Workspace_Free( fp_area );
479fe: 2f03 movel %d3,%sp@- <== NOT EXECUTED
47a00: 4eb9 0004 87b0 jsr 487b0 <_Workspace_Free> <== NOT EXECUTED
47a06: 588f addql #4,%sp <== NOT EXECUTED
#endif
if ( sched )
47a08: 4a84 tstl %d4 <== NOT EXECUTED
47a0a: 670a beqs 47a16 <_Thread_Initialize+0x1c2> <== NOT EXECUTED
(void) _Workspace_Free( sched );
47a0c: 2f04 movel %d4,%sp@- <== NOT EXECUTED
47a0e: 4eb9 0004 87b0 jsr 487b0 <_Workspace_Free> <== NOT EXECUTED
47a14: 588f addql #4,%sp <== NOT EXECUTED
_Thread_Stack_Free( the_thread );
47a16: 2f0a movel %a2,%sp@- <== NOT EXECUTED
47a18: 4eb9 0004 8098 jsr 48098 <_Thread_Stack_Free> <== NOT EXECUTED
return false;
47a1e: 588f addql #4,%sp <== NOT EXECUTED
stack = the_thread->Start.stack;
#else
if ( !stack_area ) {
actual_stack_size = _Thread_Stack_Allocate( the_thread, stack_size );
if ( !actual_stack_size || actual_stack_size < stack_size )
return false; /* stack allocation failed */
47a20: 4200 clrb %d0
47a22: 6002 bras 47a26 <_Thread_Initialize+0x1d2>
* Mutex provides sufficient protection to let the user extensions
* run safely.
*/
extension_status = _User_extensions_Thread_create( the_thread );
if ( extension_status )
return true;
47a24: 7001 moveq #1,%d0
_Thread_Stack_Free( the_thread );
return false;
}
47a26: 4cee 047c ffe8 moveml %fp@(-24),%d2-%d6/%a2
47a2c: 4e5e unlk %fp <== NOT EXECUTED
0004ba88 <_Thread_Reset>:
void _Thread_Reset(
Thread_Control *the_thread,
void *pointer_argument,
Thread_Entry_numeric_type numeric_argument
)
{
4ba88: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4ba8c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4ba8e: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
the_thread->resource_count = 0;
the_thread->is_preemptible = the_thread->Start.is_preemptible;
the_thread->budget_algorithm = the_thread->Start.budget_algorithm;
4ba92: 256a 00a0 007a movel %a2@(160),%a2@(122) <== NOT EXECUTED
the_thread->budget_callout = the_thread->Start.budget_callout;
4ba98: 256a 00a4 007e movel %a2@(164),%a2@(126) <== NOT EXECUTED
the_thread->Start.pointer_argument = pointer_argument;
4ba9e: 256e 000c 0096 movel %fp@(12),%a2@(150) <== NOT EXECUTED
the_thread->Start.numeric_argument = numeric_argument;
4baa4: 256e 0010 009a movel %fp@(16),%a2@(154) <== NOT EXECUTED
void *pointer_argument,
Thread_Entry_numeric_type numeric_argument
)
{
the_thread->resource_count = 0;
the_thread->is_preemptible = the_thread->Start.is_preemptible;
4baaa: 156a 009e 0074 moveb %a2@(158),%a2@(116) <== NOT EXECUTED
Thread_Control *the_thread,
void *pointer_argument,
Thread_Entry_numeric_type numeric_argument
)
{
the_thread->resource_count = 0;
4bab0: 42aa 001c clrl %a2@(28) <== NOT EXECUTED
the_thread->budget_callout = the_thread->Start.budget_callout;
the_thread->Start.pointer_argument = pointer_argument;
the_thread->Start.numeric_argument = numeric_argument;
if ( !_Thread_queue_Extract_with_proxy( the_thread ) ) {
4bab4: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4bab6: 4eb9 0004 85a4 jsr 485a4 <_Thread_queue_Extract_with_proxy><== NOT EXECUTED
4babc: 588f addql #4,%sp <== NOT EXECUTED
4babe: 4a00 tstb %d0 <== NOT EXECUTED
4bac0: 6614 bnes 4bad6 <_Thread_Reset+0x4e> <== NOT EXECUTED
if ( _Watchdog_Is_active( &the_thread->Timer ) )
4bac2: 7002 moveq #2,%d0 <== NOT EXECUTED
4bac4: b0aa 0050 cmpl %a2@(80),%d0 <== NOT EXECUTED
4bac8: 660c bnes 4bad6 <_Thread_Reset+0x4e> <== NOT EXECUTED
(void) _Watchdog_Remove( &the_thread->Timer );
4baca: 486a 0048 pea %a2@(72) <== NOT EXECUTED
4bace: 4eb9 0004 8eb8 jsr 48eb8 <_Watchdog_Remove> <== NOT EXECUTED
4bad4: 588f addql #4,%sp <== NOT EXECUTED
}
if ( the_thread->current_priority != the_thread->Start.initial_priority ) {
4bad6: 202a 00ac movel %a2@(172),%d0 <== NOT EXECUTED
4bada: b0aa 0014 cmpl %a2@(20),%d0 <== NOT EXECUTED
4bade: 6718 beqs 4baf8 <_Thread_Reset+0x70> <== NOT EXECUTED
the_thread->real_priority = the_thread->Start.initial_priority;
4bae0: 2540 0018 movel %d0,%a2@(24) <== NOT EXECUTED
_Thread_Set_priority( the_thread, the_thread->Start.initial_priority );
4bae4: 2d4a 0008 movel %a2,%fp@(8) <== NOT EXECUTED
}
}
4bae8: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
(void) _Watchdog_Remove( &the_thread->Timer );
}
if ( the_thread->current_priority != the_thread->Start.initial_priority ) {
the_thread->real_priority = the_thread->Start.initial_priority;
_Thread_Set_priority( the_thread, the_thread->Start.initial_priority );
4baec: 2d40 000c movel %d0,%fp@(12) <== NOT EXECUTED
}
}
4baf0: 4e5e unlk %fp <== NOT EXECUTED
(void) _Watchdog_Remove( &the_thread->Timer );
}
if ( the_thread->current_priority != the_thread->Start.initial_priority ) {
the_thread->real_priority = the_thread->Start.initial_priority;
_Thread_Set_priority( the_thread, the_thread->Start.initial_priority );
4baf2: 4ef9 0004 8790 jmp 48790 <_Thread_Set_priority> <== NOT EXECUTED
}
}
4baf8: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
4bafc: 4e5e unlk %fp <== NOT EXECUTED
0004870c <_Thread_Restart>:
*/
RTEMS_INLINE_ROUTINE bool _States_Is_dormant (
States_Control the_states
)
{
return (the_states & STATES_DORMANT);
4870c: 7001 moveq #1,%d0 <== NOT EXECUTED
bool _Thread_Restart(
Thread_Control *the_thread,
void *pointer_argument,
Thread_Entry_numeric_type numeric_argument
)
{
4870e: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
48712: 2f0a movel %a2,%sp@- <== NOT EXECUTED
48714: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
48718: c0aa 0010 andl %a2@(16),%d0 <== NOT EXECUTED
if ( !_States_Is_dormant( the_thread->current_state ) ) {
4871c: 6664 bnes 48782 <_Thread_Restart+0x76> <== NOT EXECUTED
_Thread_Set_transient( the_thread );
4871e: 2f0a movel %a2,%sp@- <== NOT EXECUTED
48720: 4eb9 0004 8804 jsr 48804 <_Thread_Set_transient> <== NOT EXECUTED
_Thread_Reset( the_thread, pointer_argument, numeric_argument );
48726: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
4872a: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
4872e: 2f0a movel %a2,%sp@- <== NOT EXECUTED
48730: 4eb9 0004 ba88 jsr 4ba88 <_Thread_Reset> <== NOT EXECUTED
_Thread_Load_environment( the_thread );
48736: 2f0a movel %a2,%sp@- <== NOT EXECUTED
48738: 4eb9 0004 b7b8 jsr 4b7b8 <_Thread_Load_environment> <== NOT EXECUTED
_Thread_Ready( the_thread );
4873e: 2f0a movel %a2,%sp@- <== NOT EXECUTED
48740: 4eb9 0004 ba50 jsr 4ba50 <_Thread_Ready> <== NOT EXECUTED
_User_extensions_Thread_restart( the_thread );
48746: 2f0a movel %a2,%sp@- <== NOT EXECUTED
48748: 4eb9 0004 8ce4 jsr 48ce4 <_User_extensions_Thread_restart> <== NOT EXECUTED
if ( _Thread_Is_executing ( the_thread ) )
4874e: 4fef 001c lea %sp@(28),%sp <== NOT EXECUTED
48752: b5f9 0005 eabe cmpal 5eabe <_Per_CPU_Information+0xc>,%a2 <== NOT EXECUTED
48758: 662c bnes 48786 <_Thread_Restart+0x7a> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Thread_Restart_self( void )
{
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
if ( _Thread_Executing->fp_context != NULL )
4875a: 4aaa 00f6 tstl %a2@(246) <== NOT EXECUTED
4875e: 670c beqs 4876c <_Thread_Restart+0x60> <== NOT EXECUTED
_Context_Restore_fp( &_Thread_Executing->fp_context );
48760: 486a 00f6 pea %a2@(246) <== NOT EXECUTED
48764: 4eb9 0004 91e0 jsr 491e0 <_CPU_Context_restore_fp> <== NOT EXECUTED
4876a: 588f addql #4,%sp <== NOT EXECUTED
#endif
_CPU_Context_Restart_self( &_Thread_Executing->Registers );
4876c: 2079 0005 eabe moveal 5eabe <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
48772: 41e8 00c2 lea %a0@(194),%a0 <== NOT EXECUTED
48776: 2f08 movel %a0,%sp@- <== NOT EXECUTED
48778: 4eb9 0004 908e jsr 4908e <_CPU_Context_Restart_self> <== NOT EXECUTED
4877e: 588f addql #4,%sp <== NOT EXECUTED
48780: 6004 bras 48786 <_Thread_Restart+0x7a> <== NOT EXECUTED
_Thread_Restart_self();
return true;
}
return false;
48782: 4200 clrb %d0 <== NOT EXECUTED
48784: 6002 bras 48788 <_Thread_Restart+0x7c> <== NOT EXECUTED
_User_extensions_Thread_restart( the_thread );
if ( _Thread_Is_executing ( the_thread ) )
_Thread_Restart_self();
return true;
48786: 7001 moveq #1,%d0 <== NOT EXECUTED
}
return false;
}
48788: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
4878c: 4e5e unlk %fp <== NOT EXECUTED
0004ad68 <_Thread_Resume>:
{
ISR_Level level;
States_Control current_state;
_ISR_Disable( level );
4ad68: 203c 0000 0700 movel #1792,%d0
void _Thread_Resume(
Thread_Control *the_thread,
bool force
)
{
4ad6e: 4e56 0000 linkw %fp,#0
4ad72: 206e 0008 moveal %fp@(8),%a0
4ad76: 2f02 movel %d2,%sp@-
ISR_Level level;
States_Control current_state;
_ISR_Disable( level );
4ad78: 40c2 movew %sr,%d2
4ad7a: 8082 orl %d2,%d0
4ad7c: 46c0 movew %d0,%sr
current_state = the_thread->current_state;
4ad7e: 2028 0010 movel %a0@(16),%d0
if ( current_state & STATES_SUSPENDED ) {
4ad82: 0800 0001 btst #1,%d0
4ad86: 671c beqs 4ada4 <_Thread_Resume+0x3c> <== NEVER TAKEN
RTEMS_INLINE_ROUTINE States_Control _States_Clear (
States_Control states_to_clear,
States_Control current_state
)
{
return (current_state & ~states_to_clear);
4ad88: 72fd moveq #-3,%d1
4ad8a: c081 andl %d1,%d0
current_state =
the_thread->current_state = _States_Clear(STATES_SUSPENDED, current_state);
4ad8c: 2140 0010 movel %d0,%a0@(16)
if ( _States_Is_ready( current_state ) ) {
4ad90: 6612 bnes 4ada4 <_Thread_Resume+0x3c> <== NEVER TAKEN
RTEMS_INLINE_ROUTINE void _Scheduler_Unblock(
Scheduler_Control *the_scheduler,
Thread_Control *the_thread
)
{
the_scheduler->Operations.unblock( the_scheduler, the_thread );
4ad92: 2f08 movel %a0,%sp@-
4ad94: 4879 0006 0f56 pea 60f56 <_Scheduler>
4ad9a: 2079 0006 0f66 moveal 60f66 <_Scheduler+0x10>,%a0
4ada0: 4e90 jsr %a0@
4ada2: 508f addql #8,%sp
_Scheduler_Unblock( &_Scheduler, the_thread );
}
}
_ISR_Enable( level );
4ada4: 46c2 movew %d2,%sr
}
4ada6: 242e fffc movel %fp@(-4),%d2
4adaa: 4e5e unlk %fp
...
00047f54 <_Thread_Set_priority>:
void _Thread_Set_priority(
Thread_Control *the_thread,
Priority_Control new_priority
)
{
47f54: 4e56 0000 linkw %fp,#0
RTEMS_INLINE_ROUTINE void _Scheduler_Thread_scheduler_update(
Scheduler_Control *the_scheduler,
Thread_Control *the_thread
)
{
the_scheduler->Operations.scheduler_update( the_scheduler, the_thread );
47f58: 203c 0005 db8e movel #383886,%d0
47f5e: 206e 0008 moveal %fp@(8),%a0
the_thread->current_priority = new_priority;
47f62: 216e 000c 0014 movel %fp@(12),%a0@(20)
47f68: 2279 0005 dbaa moveal 5dbaa <_Scheduler+0x1c>,%a1
47f6e: 2d48 000c movel %a0,%fp@(12)
47f72: 2d40 0008 movel %d0,%fp@(8)
_Scheduler_Thread_scheduler_update(&_Scheduler, the_thread);
}
47f76: 4e5e unlk %fp
47f78: 4ed1 jmp %a1@
...
00047f7c <_Thread_Set_state>:
States_Control state
)
{
ISR_Level level;
_ISR_Disable( level );
47f7c: 203c 0000 0700 movel #1792,%d0
void _Thread_Set_state(
Thread_Control *the_thread,
States_Control state
)
{
47f82: 4e56 0000 linkw %fp,#0
47f86: 206e 0008 moveal %fp@(8),%a0
47f8a: 2f02 movel %d2,%sp@-
47f8c: 222e 000c movel %fp@(12),%d1
ISR_Level level;
_ISR_Disable( level );
47f90: 40c2 movew %sr,%d2
47f92: 8082 orl %d2,%d0
47f94: 46c0 movew %d0,%sr
if ( !_States_Is_ready( the_thread->current_state ) ) {
47f96: 2028 0010 movel %a0@(16),%d0
47f9a: 670a beqs 47fa6 <_Thread_Set_state+0x2a> <== ALWAYS TAKEN
RTEMS_INLINE_ROUTINE States_Control _States_Set (
States_Control states_to_set,
States_Control current_state
)
{
return (current_state | states_to_set);
47f9c: 8280 orl %d0,%d1 <== NOT EXECUTED
47f9e: 2141 0010 movel %d1,%a0@(16) <== NOT EXECUTED
the_thread->current_state =
_States_Set( state, the_thread->current_state );
_ISR_Enable( level );
47fa2: 46c2 movew %d2,%sr <== NOT EXECUTED
return;
47fa4: 6018 bras 47fbe <_Thread_Set_state+0x42> <== NOT EXECUTED
}
the_thread->current_state = state;
47fa6: 2141 0010 movel %d1,%a0@(16)
RTEMS_INLINE_ROUTINE void _Scheduler_Block(
Scheduler_Control *the_scheduler,
Thread_Control *the_thread
)
{
the_scheduler->Operations.block( the_scheduler, the_thread );
47faa: 2f08 movel %a0,%sp@-
47fac: 4879 0005 db8e pea 5db8e <_Scheduler>
47fb2: 2079 0005 db9a moveal 5db9a <_Scheduler+0xc>,%a0
47fb8: 4e90 jsr %a0@
_Scheduler_Block( &_Scheduler, the_thread);
_ISR_Enable( level );
47fba: 46c2 movew %d2,%sr
47fbc: 508f addql #8,%sp
}
47fbe: 242e fffc movel %fp@(-4),%d2
47fc2: 4e5e unlk %fp
...
00047fc8 <_Thread_Set_transient>:
)
{
ISR_Level level;
uint32_t old_state;
_ISR_Disable( level );
47fc8: 203c 0000 0700 movel #1792,%d0
*/
void _Thread_Set_transient(
Thread_Control *the_thread
)
{
47fce: 4e56 0000 linkw %fp,#0
47fd2: 226e 0008 moveal %fp@(8),%a1
47fd6: 2f0a movel %a2,%sp@-
47fd8: 2f02 movel %d2,%sp@-
ISR_Level level;
uint32_t old_state;
_ISR_Disable( level );
47fda: 40c1 movew %sr,%d1
47fdc: 8081 orl %d1,%d0
47fde: 46c0 movew %d0,%sr
old_state = the_thread->current_state;
47fe0: 2029 0010 movel %a1@(16),%d0
47fe4: 7404 moveq #4,%d2
47fe6: 8480 orl %d0,%d2
47fe8: 2342 0010 movel %d2,%a1@(16)
the_thread->current_state = _States_Set( STATES_TRANSIENT, old_state );
/* FIXME: need to check which scheduler to use? */
if ( _States_Is_ready( old_state ) ) {
47fec: 4a80 tstl %d0
47fee: 6650 bnes 48040 <_Thread_Set_transient+0x78>
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_extract(
Thread_Control *the_thread
)
{
Chain_Control *ready = the_thread->scheduler.priority->ready_chain;
47ff0: 2069 008a moveal %a1@(138),%a0
47ff4: 2050 moveal %a0@,%a0
if ( _Chain_Has_only_one_node( ready ) ) {
47ff6: 2028 0008 movel %a0@(8),%d0
47ffa: b090 cmpl %a0@,%d0
47ffc: 6636 bnes 48034 <_Thread_Set_transient+0x6c> <== NEVER TAKEN
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
47ffe: 2408 movel %a0,%d2
48000: 5882 addql #4,%d2
head->next = tail;
head->previous = NULL;
48002: 42a8 0004 clrl %a0@(4)
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
48006: 2082 movel %d2,%a0@
head->next = tail;
head->previous = NULL;
tail->previous = head;
48008: 2148 0008 movel %a0,%a0@(8)
_Chain_Initialize_empty( ready );
_Priority_bit_map_Remove( &the_thread->scheduler.priority->Priority_map );
4800c: 2069 008a moveal %a1@(138),%a0
RTEMS_INLINE_ROUTINE void _Priority_bit_map_Remove (
Priority_bit_map_Information *the_priority_map
)
{
*the_priority_map->minor &= the_priority_map->block_minor;
48010: 2268 0004 moveal %a0@(4),%a1
48014: 3028 000e movew %a0@(14),%d0
48018: 3411 movew %a1@,%d2
4801a: c082 andl %d2,%d0
4801c: 3280 movew %d0,%a1@
if ( *the_priority_map->minor == 0 )
4801e: 6620 bnes 48040 <_Thread_Set_transient+0x78>
_Priority_Major_bit_map &= the_priority_map->block_major;
48020: 3039 0005 dfa4 movew 5dfa4 <_Priority_Major_bit_map>,%d0
48026: 3428 000c movew %a0@(12),%d2
4802a: c082 andl %d2,%d0
4802c: 33c0 0005 dfa4 movew %d0,5dfa4 <_Priority_Major_bit_map>
48032: 600c bras 48040 <_Thread_Set_transient+0x78>
)
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
48034: 2451 moveal %a1@,%a2 <== NOT EXECUTED
previous = the_node->previous;
48036: 2069 0004 moveal %a1@(4),%a0 <== NOT EXECUTED
next->previous = previous;
4803a: 2548 0004 movel %a0,%a2@(4) <== NOT EXECUTED
previous->next = next;
4803e: 208a movel %a2,%a0@ <== NOT EXECUTED
_Scheduler_priority_Ready_queue_extract( the_thread);
}
_ISR_Enable( level );
48040: 46c1 movew %d1,%sr
}
48042: 241f movel %sp@+,%d2
48044: 245f moveal %sp@+,%a2
48046: 4e5e unlk %fp
...
00048098 <_Thread_Stack_Free>:
*/
void _Thread_Stack_Free(
Thread_Control *the_thread
)
{
48098: 4e56 0000 linkw %fp,#0
4809c: 206e 0008 moveal %fp@(8),%a0
#if defined(RTEMS_SCORE_THREAD_ENABLE_USER_PROVIDED_STACK_VIA_API)
/*
* If the API provided the stack space, then don't free it.
*/
if ( !the_thread->Start.core_allocated_stack )
480a0: 4a28 00b0 tstb %a0@(176)
480a4: 6722 beqs 480c8 <_Thread_Stack_Free+0x30> <== NEVER TAKEN
* Call ONLY the CPU table stack free hook, or the
* the RTEMS workspace free. This is so the free
* routine properly matches the allocation of the stack.
*/
if ( Configuration.stack_free_hook )
480a6: 2279 0005 c27c moveal 5c27c <Configuration+0x28>,%a1
480ac: 4a89 tstl %a1
480ae: 670a beqs 480ba <_Thread_Stack_Free+0x22> <== ALWAYS TAKEN
(*Configuration.stack_free_hook)( the_thread->Start.Initial_stack.area );
480b0: 2d68 00b6 0008 movel %a0@(182),%fp@(8) <== NOT EXECUTED
else
_Workspace_Free( the_thread->Start.Initial_stack.area );
}
480b6: 4e5e unlk %fp <== NOT EXECUTED
* the RTEMS workspace free. This is so the free
* routine properly matches the allocation of the stack.
*/
if ( Configuration.stack_free_hook )
(*Configuration.stack_free_hook)( the_thread->Start.Initial_stack.area );
480b8: 4ed1 jmp %a1@ <== NOT EXECUTED
else
_Workspace_Free( the_thread->Start.Initial_stack.area );
480ba: 2d68 00b6 0008 movel %a0@(182),%fp@(8)
}
480c0: 4e5e unlk %fp
*/
if ( Configuration.stack_free_hook )
(*Configuration.stack_free_hook)( the_thread->Start.Initial_stack.area );
else
_Workspace_Free( the_thread->Start.Initial_stack.area );
480c2: 4ef9 0004 87b0 jmp 487b0 <_Workspace_Free>
}
480c8: 4e5e unlk %fp <== NOT EXECUTED
0004811c <_Thread_Start>:
*/
RTEMS_INLINE_ROUTINE bool _States_Is_dormant (
States_Control the_states
)
{
return (the_states & STATES_DORMANT);
4811c: 7001 moveq #1,%d0
Thread_Start_types the_prototype,
void *entry_point,
void *pointer_argument,
Thread_Entry_numeric_type numeric_argument
)
{
4811e: 4e56 0000 linkw %fp,#0
48122: 2f0a movel %a2,%sp@-
48124: 246e 0008 moveal %fp@(8),%a2
48128: c0aa 0010 andl %a2@(16),%d0
if ( _States_Is_dormant( the_thread->current_state ) ) {
4812c: 6738 beqs 48166 <_Thread_Start+0x4a> <== NEVER TAKEN
the_thread->Start.entry_point = (Thread_Entry) entry_point;
4812e: 256e 0010 008e movel %fp@(16),%a2@(142)
the_thread->Start.prototype = the_prototype;
48134: 256e 000c 0092 movel %fp@(12),%a2@(146)
the_thread->Start.pointer_argument = pointer_argument;
4813a: 256e 0014 0096 movel %fp@(20),%a2@(150)
the_thread->Start.numeric_argument = numeric_argument;
48140: 256e 0018 009a movel %fp@(24),%a2@(154)
_Thread_Load_environment( the_thread );
48146: 2f0a movel %a2,%sp@-
48148: 4eb9 0004 af3c jsr 4af3c <_Thread_Load_environment>
_Thread_Ready( the_thread );
4814e: 2f0a movel %a2,%sp@-
48150: 4eb9 0004 b1d4 jsr 4b1d4 <_Thread_Ready>
_User_extensions_Thread_start( the_thread );
48156: 2f0a movel %a2,%sp@-
48158: 4eb9 0004 84a8 jsr 484a8 <_User_extensions_Thread_start>
return true;
4815e: 4fef 000c lea %sp@(12),%sp
48162: 7001 moveq #1,%d0
48164: 6002 bras 48168 <_Thread_Start+0x4c>
}
return false;
48166: 4200 clrb %d0 <== NOT EXECUTED
}
48168: 246e fffc moveal %fp@(-4),%a2
4816c: 4e5e unlk %fp <== NOT EXECUTED
00048170 <_Thread_Suspend>:
Thread_Control *the_thread
)
{
ISR_Level level;
_ISR_Disable( level );
48170: 203c 0000 0700 movel #1792,%d0
*/
void _Thread_Suspend(
Thread_Control *the_thread
)
{
48176: 4e56 0000 linkw %fp,#0
4817a: 206e 0008 moveal %fp@(8),%a0
4817e: 2f02 movel %d2,%sp@-
ISR_Level level;
_ISR_Disable( level );
48180: 40c2 movew %sr,%d2
48182: 8082 orl %d2,%d0
48184: 46c0 movew %d0,%sr
if ( !_States_Is_ready( the_thread->current_state ) ) {
48186: 2028 0010 movel %a0@(16),%d0
4818a: 670c beqs 48198 <_Thread_Suspend+0x28> <== ALWAYS TAKEN
RTEMS_INLINE_ROUTINE States_Control _States_Set (
States_Control states_to_set,
States_Control current_state
)
{
return (current_state | states_to_set);
4818c: 7202 moveq #2,%d1 <== NOT EXECUTED
4818e: 8280 orl %d0,%d1 <== NOT EXECUTED
48190: 2141 0010 movel %d1,%a0@(16) <== NOT EXECUTED
the_thread->current_state =
_States_Set( STATES_SUSPENDED, the_thread->current_state );
_ISR_Enable( level );
48194: 46c2 movew %d2,%sr <== NOT EXECUTED
return;
48196: 601a bras 481b2 <_Thread_Suspend+0x42> <== NOT EXECUTED
}
the_thread->current_state = STATES_SUSPENDED;
48198: 7002 moveq #2,%d0
4819a: 2140 0010 movel %d0,%a0@(16)
4819e: 2f08 movel %a0,%sp@-
481a0: 4879 0005 db8e pea 5db8e <_Scheduler>
481a6: 2079 0005 db9a moveal 5db9a <_Scheduler+0xc>,%a0
481ac: 4e90 jsr %a0@
_Scheduler_Block(&_Scheduler, the_thread);
_ISR_Enable( level );
481ae: 46c2 movew %d2,%sr
481b0: 508f addql #8,%sp
}
481b2: 242e fffc movel %fp@(-4),%d2
481b6: 4e5e unlk %fp
...
000481bc <_Thread_Tickle_timeslice>:
*
* Output parameters: NONE
*/
void _Thread_Tickle_timeslice( void )
{
481bc: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
481c0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
Thread_Control *executing;
executing = _Thread_Executing;
481c2: 2479 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a2 <== NOT EXECUTED
/*
* If the thread is not preemptible or is not ready, then
* just return.
*/
if ( !executing->is_preemptible )
481c8: 4a2a 0074 tstb %a2@(116) <== NOT EXECUTED
481cc: 675e beqs 4822c <_Thread_Tickle_timeslice+0x70> <== NOT EXECUTED
return;
if ( !_States_Is_ready( executing->current_state ) )
481ce: 4aaa 0010 tstl %a2@(16) <== NOT EXECUTED
481d2: 6658 bnes 4822c <_Thread_Tickle_timeslice+0x70> <== NOT EXECUTED
/*
* The cpu budget algorithm determines what happens next.
*/
switch ( executing->budget_algorithm ) {
481d4: 202a 007a movel %a2@(122),%d0 <== NOT EXECUTED
481d8: 7201 moveq #1,%d1 <== NOT EXECUTED
481da: b280 cmpl %d0,%d1 <== NOT EXECUTED
481dc: 624e bhis 4822c <_Thread_Tickle_timeslice+0x70> <== NOT EXECUTED
481de: 123c 0002 moveb #2,%d1 <== NOT EXECUTED
481e2: b280 cmpl %d0,%d1 <== NOT EXECUTED
481e4: 640a bccs 481f0 <_Thread_Tickle_timeslice+0x34> <== NOT EXECUTED
481e6: 123c 0003 moveb #3,%d1 <== NOT EXECUTED
481ea: b280 cmpl %d0,%d1 <== NOT EXECUTED
481ec: 663e bnes 4822c <_Thread_Tickle_timeslice+0x70> <== NOT EXECUTED
481ee: 6026 bras 48216 <_Thread_Tickle_timeslice+0x5a> <== NOT EXECUTED
case THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE:
#if defined(RTEMS_SCORE_THREAD_ENABLE_EXHAUST_TIMESLICE)
case THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE:
#endif
if ( (int)(--executing->cpu_time_budget) <= 0 ) {
481f0: 202a 0076 movel %a2@(118),%d0 <== NOT EXECUTED
481f4: 5380 subql #1,%d0 <== NOT EXECUTED
481f6: 2540 0076 movel %d0,%a2@(118) <== NOT EXECUTED
481fa: 6e30 bgts 4822c <_Thread_Tickle_timeslice+0x70> <== NOT EXECUTED
* always operates on the scheduler that 'owns' the currently executing
* thread.
*/
RTEMS_INLINE_ROUTINE void _Scheduler_Yield( void )
{
_Scheduler.Operations.yield( &_Scheduler );
481fc: 4879 0005 db8e pea 5db8e <_Scheduler> <== NOT EXECUTED
48202: 2079 0005 db96 moveal 5db96 <_Scheduler+0x8>,%a0 <== NOT EXECUTED
48208: 4e90 jsr %a0@ <== NOT EXECUTED
* executing thread's timeslice is reset. Otherwise, the
* currently executing thread is placed at the rear of the
* FIFO for this priority and a new heir is selected.
*/
_Scheduler_Yield( );
executing->cpu_time_budget = _Thread_Ticks_per_timeslice;
4820a: 41f9 0005 dac0 lea 5dac0 <_Thread_Ticks_per_timeslice>,%a0 <== NOT EXECUTED
48210: 2550 0076 movel %a0@,%a2@(118) <== NOT EXECUTED
48214: 6014 bras 4822a <_Thread_Tickle_timeslice+0x6e> <== NOT EXECUTED
}
break;
#if defined(RTEMS_SCORE_THREAD_ENABLE_SCHEDULER_CALLOUT)
case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT:
if ( --executing->cpu_time_budget == 0 )
48216: 202a 0076 movel %a2@(118),%d0 <== NOT EXECUTED
4821a: 5380 subql #1,%d0 <== NOT EXECUTED
4821c: 2540 0076 movel %d0,%a2@(118) <== NOT EXECUTED
48220: 660a bnes 4822c <_Thread_Tickle_timeslice+0x70> <== NOT EXECUTED
(*executing->budget_callout)( executing );
48222: 2f0a movel %a2,%sp@- <== NOT EXECUTED
48224: 206a 007e moveal %a2@(126),%a0 <== NOT EXECUTED
48228: 4e90 jsr %a0@ <== NOT EXECUTED
4822a: 588f addql #4,%sp <== NOT EXECUTED
break;
#endif
}
}
4822c: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
48230: 4e5e unlk %fp <== NOT EXECUTED
000472bc <_Thread_blocking_operation_Cancel>:
/*
* If the sync state is timed out, this is very likely not needed.
* But better safe than sorry when it comes to critical sections.
*/
if ( _Watchdog_Is_active( &the_thread->Timer ) ) {
472bc: 7202 moveq #2,%d1 <== NOT EXECUTED
Thread_blocking_operation_States sync_state __attribute__((unused)),
#endif
Thread_Control *the_thread,
ISR_Level level
)
{
472be: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
472c2: 202e 0010 movel %fp@(16),%d0 <== NOT EXECUTED
472c6: 2f0a movel %a2,%sp@- <== NOT EXECUTED
472c8: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
#endif
/*
* The thread is not waiting on anything after this completes.
*/
the_thread->Wait.queue = NULL;
472cc: 42aa 0044 clrl %a2@(68) <== NOT EXECUTED
/*
* If the sync state is timed out, this is very likely not needed.
* But better safe than sorry when it comes to critical sections.
*/
if ( _Watchdog_Is_active( &the_thread->Timer ) ) {
472d0: b2aa 0050 cmpl %a2@(80),%d1 <== NOT EXECUTED
472d4: 6618 bnes 472ee <_Thread_blocking_operation_Cancel+0x32><== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate(
Watchdog_Control *the_watchdog
)
{
the_watchdog->state = WATCHDOG_REMOVE_IT;
472d6: 123c 0003 moveb #3,%d1 <== NOT EXECUTED
472da: 2541 0050 movel %d1,%a2@(80) <== NOT EXECUTED
_Watchdog_Deactivate( &the_thread->Timer );
_ISR_Enable( level );
472de: 46c0 movew %d0,%sr <== NOT EXECUTED
(void) _Watchdog_Remove( &the_thread->Timer );
472e0: 486a 0048 pea %a2@(72) <== NOT EXECUTED
472e4: 4eb9 0004 863c jsr 4863c <_Watchdog_Remove> <== NOT EXECUTED
472ea: 588f addql #4,%sp <== NOT EXECUTED
472ec: 6002 bras 472f0 <_Thread_blocking_operation_Cancel+0x34><== NOT EXECUTED
} else
_ISR_Enable( level );
472ee: 46c0 movew %d0,%sr <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Thread_Unblock (
Thread_Control *the_thread
)
{
_Thread_Clear_state( the_thread, STATES_BLOCKED );
472f0: 2d4a 0008 movel %a2,%fp@(8) <== NOT EXECUTED
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
_Thread_MP_Free_proxy( the_thread );
#endif
}
472f4: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
472f8: 203c 1003 fff8 movel #268697592,%d0 <== NOT EXECUTED
472fe: 2d40 000c movel %d0,%fp@(12) <== NOT EXECUTED
47302: 4e5e unlk %fp <== NOT EXECUTED
47304: 4ef9 0004 7448 jmp 47448 <_Thread_Clear_state> <== NOT EXECUTED
...
00047ac8 <_Thread_queue_Dequeue>:
Thread_blocking_operation_States sync_state;
if ( the_thread_queue->discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY )
dequeue_p = _Thread_queue_Dequeue_priority;
else /* must be THREAD_QUEUE_DISCIPLINE_FIFO */
dequeue_p = _Thread_queue_Dequeue_fifo;
47ac8: 41f9 0004 afb8 lea 4afb8 <_Thread_queue_Dequeue_fifo>,%a0
Thread_Control *(*dequeue_p)( Thread_queue_Control * );
Thread_Control *the_thread;
ISR_Level level;
Thread_blocking_operation_States sync_state;
if ( the_thread_queue->discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY )
47ace: 7001 moveq #1,%d0
*/
Thread_Control *_Thread_queue_Dequeue(
Thread_queue_Control *the_thread_queue
)
{
47ad0: 4e56 fff4 linkw %fp,#-12
47ad4: 48d7 040c moveml %d2-%d3/%a2,%sp@
47ad8: 246e 0008 moveal %fp@(8),%a2
Thread_Control *(*dequeue_p)( Thread_queue_Control * );
Thread_Control *the_thread;
ISR_Level level;
Thread_blocking_operation_States sync_state;
if ( the_thread_queue->discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY )
47adc: b0aa 0034 cmpl %a2@(52),%d0
47ae0: 6606 bnes 47ae8 <_Thread_queue_Dequeue+0x20>
dequeue_p = _Thread_queue_Dequeue_priority;
47ae2: 41f9 0004 7b24 lea 47b24 <_Thread_queue_Dequeue_priority>,%a0
else /* must be THREAD_QUEUE_DISCIPLINE_FIFO */
dequeue_p = _Thread_queue_Dequeue_fifo;
the_thread = (*dequeue_p)( the_thread_queue );
47ae8: 2f0a movel %a2,%sp@-
47aea: 4e90 jsr %a0@
_ISR_Disable( level );
47aec: 223c 0000 0700 movel #1792,%d1
47af2: 40c2 movew %sr,%d2
47af4: 8282 orl %d2,%d1
47af6: 46c1 movew %d1,%sr
if ( !the_thread ) {
47af8: 588f addql #4,%sp
47afa: 4a80 tstl %d0
47afc: 661a bnes 47b18 <_Thread_queue_Dequeue+0x50>
sync_state = the_thread_queue->sync_state;
if ( (sync_state == THREAD_BLOCKING_OPERATION_TIMEOUT) ||
47afe: 222a 0030 movel %a2@(48),%d1
47b02: 7601 moveq #1,%d3
47b04: 5381 subql #1,%d1
47b06: b681 cmpl %d1,%d3
47b08: 650e bcss 47b18 <_Thread_queue_Dequeue+0x50> <== ALWAYS TAKEN
(sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED) ) {
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SATISFIED;
47b0a: 103c 0003 moveb #3,%d0 <== NOT EXECUTED
47b0e: 2540 0030 movel %d0,%a2@(48) <== NOT EXECUTED
the_thread = _Thread_Executing;
47b12: 2039 0005 df96 movel 5df96 <_Per_CPU_Information+0xc>,%d0 <== NOT EXECUTED
}
}
_ISR_Enable( level );
47b18: 46c2 movew %d2,%sr
return the_thread;
}
47b1a: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2
47b20: 4e5e unlk %fp <== NOT EXECUTED
0004afb8 <_Thread_queue_Dequeue_fifo>:
)
{
ISR_Level level;
Thread_Control *the_thread;
_ISR_Disable( level );
4afb8: 223c 0000 0700 movel #1792,%d1
*/
Thread_Control *_Thread_queue_Dequeue_fifo(
Thread_queue_Control *the_thread_queue
)
{
4afbe: 4e56 fff4 linkw %fp,#-12
4afc2: 206e 0008 moveal %fp@(8),%a0
4afc6: 48d7 1c00 moveml %a2-%a4,%sp@
ISR_Level level;
Thread_Control *the_thread;
_ISR_Disable( level );
4afca: 40c0 movew %sr,%d0
4afcc: 8280 orl %d0,%d1
4afce: 46c1 movew %d1,%sr
return the_thread;
}
_ISR_Enable( level );
return NULL;
}
4afd0: 2248 moveal %a0,%a1
4afd2: 2459 moveal %a1@+,%a2
{
ISR_Level level;
Thread_Control *the_thread;
_ISR_Disable( level );
if ( !_Chain_Is_empty( &the_thread_queue->Queues.Fifo ) ) {
4afd4: b3ca cmpal %a2,%a1
4afd6: 674e beqs 4b026 <_Thread_queue_Dequeue_fifo+0x6e><== ALWAYS TAKEN
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *old_first = head->next;
Chain_Node *new_first = old_first->next;
4afd8: 2252 moveal %a2@,%a1 <== NOT EXECUTED
the_thread = (Thread_Control *)
4afda: 264a moveal %a2,%a3 <== NOT EXECUTED
4afdc: 49f9 0004 7448 lea 47448 <_Thread_Clear_state>,%a4 <== NOT EXECUTED
_Chain_Get_first_unprotected( &the_thread_queue->Queues.Fifo );
the_thread->Wait.queue = NULL;
if ( !_Watchdog_Is_active( &the_thread->Timer ) ) {
4afe2: 7202 moveq #2,%d1 <== NOT EXECUTED
head->next = new_first;
4afe4: 2089 movel %a1,%a0@ <== NOT EXECUTED
new_first->previous = head;
4afe6: 2348 0004 movel %a0,%a1@(4) <== NOT EXECUTED
if ( !_Chain_Is_empty( &the_thread_queue->Queues.Fifo ) ) {
the_thread = (Thread_Control *)
_Chain_Get_first_unprotected( &the_thread_queue->Queues.Fifo );
the_thread->Wait.queue = NULL;
4afea: 42aa 0044 clrl %a2@(68) <== NOT EXECUTED
if ( !_Watchdog_Is_active( &the_thread->Timer ) ) {
4afee: b2aa 0050 cmpl %a2@(80),%d1 <== NOT EXECUTED
4aff2: 6710 beqs 4b004 <_Thread_queue_Dequeue_fifo+0x4c><== NOT EXECUTED
_ISR_Enable( level );
4aff4: 46c0 movew %d0,%sr <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Thread_Unblock (
Thread_Control *the_thread
)
{
_Thread_Clear_state( the_thread, STATES_BLOCKED );
4aff6: 2f3c 1003 fff8 movel #268697592,%sp@- <== NOT EXECUTED
4affc: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4affe: 4e94 jsr %a4@ <== NOT EXECUTED
4b000: 508f addql #8,%sp <== NOT EXECUTED
4b002: 6026 bras 4b02a <_Thread_queue_Dequeue_fifo+0x72><== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate(
Watchdog_Control *the_watchdog
)
{
the_watchdog->state = WATCHDOG_REMOVE_IT;
4b004: 7203 moveq #3,%d1 <== NOT EXECUTED
4b006: 2541 0050 movel %d1,%a2@(80) <== NOT EXECUTED
_Thread_Unblock( the_thread );
} else {
_Watchdog_Deactivate( &the_thread->Timer );
_ISR_Enable( level );
4b00a: 46c0 movew %d0,%sr <== NOT EXECUTED
(void) _Watchdog_Remove( &the_thread->Timer );
4b00c: 486a 0048 pea %a2@(72) <== NOT EXECUTED
4b010: 4eb9 0004 863c jsr 4863c <_Watchdog_Remove> <== NOT EXECUTED
4b016: 2f3c 1003 fff8 movel #268697592,%sp@- <== NOT EXECUTED
4b01c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4b01e: 4e94 jsr %a4@ <== NOT EXECUTED
4b020: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4b024: 6004 bras 4b02a <_Thread_queue_Dequeue_fifo+0x72><== NOT EXECUTED
#endif
return the_thread;
}
_ISR_Enable( level );
4b026: 46c0 movew %d0,%sr
return NULL;
4b028: 97cb subal %a3,%a3
}
4b02a: 200b movel %a3,%d0
4b02c: 4cee 1c00 fff4 moveml %fp@(-12),%a2-%a4
4b032: 4e5e unlk %fp
...
00047b24 <_Thread_queue_Dequeue_priority>:
Chain_Node *new_second_node;
Chain_Node *last_node;
Chain_Node *next_node;
Chain_Node *previous_node;
_ISR_Disable( level );
47b24: 203c 0000 0700 movel #1792,%d0
*/
Thread_Control *_Thread_queue_Dequeue_priority(
Thread_queue_Control *the_thread_queue
)
{
47b2a: 4e56 ffe8 linkw %fp,#-24
47b2e: 226e 0008 moveal %fp@(8),%a1
47b32: 48d7 3c0c moveml %d2-%d3/%a2-%a5,%sp@
Chain_Node *new_second_node;
Chain_Node *last_node;
Chain_Node *next_node;
Chain_Node *previous_node;
_ISR_Disable( level );
47b36: 40c1 movew %sr,%d1
47b38: 8081 orl %d1,%d0
47b3a: 46c0 movew %d0,%sr
for( index=0 ;
47b3c: 4280 clrl %d0
Chain_Node *new_second_node;
Chain_Node *last_node;
Chain_Node *next_node;
Chain_Node *previous_node;
_ISR_Disable( level );
47b3e: 2049 moveal %a1,%a0
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
47b40: 2600 movel %d0,%d3
47b42: 2400 movel %d0,%d2
47b44: e58b lsll #2,%d3
47b46: e98a lsll #4,%d2
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
_Thread_MP_Free_proxy( the_thread );
#endif
return( the_thread );
}
47b48: 2450 moveal %a0@,%a2
47b4a: 9483 subl %d3,%d2
47b4c: 47f1 2804 lea %a1@(00000004,%d2:l),%a3
_ISR_Disable( level );
for( index=0 ;
index < TASK_QUEUE_DATA_NUMBER_OF_PRIORITY_HEADERS ;
index++ ) {
if ( !_Chain_Is_empty( &the_thread_queue->Queues.Priority[ index ] ) ) {
47b50: b7ca cmpal %a2,%a3
47b52: 671e beqs 47b72 <_Thread_queue_Dequeue_priority+0x4e>
47b54: 200a movel %a2,%d0
the_thread = (Thread_Control *) _Chain_First(
47b56: 240a movel %a2,%d2
47b58: 0680 0000 003c addil #60,%d0
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
_Thread_MP_Free_proxy( the_thread );
#endif
return( the_thread );
}
47b5e: 206a 0038 moveal %a2@(56),%a0
dequeue:
the_thread->Wait.queue = NULL;
new_first_node = _Chain_First( &the_thread->Wait.Block2n );
new_first_thread = (Thread_Control *) new_first_node;
next_node = the_thread->Object.Node.next;
47b62: 2252 moveal %a2@,%a1
previous_node = the_thread->Object.Node.previous;
47b64: 266a 0004 moveal %a2@(4),%a3
*/
_ISR_Enable( level );
return NULL;
dequeue:
the_thread->Wait.queue = NULL;
47b68: 42aa 0044 clrl %a2@(68)
new_first_node = _Chain_First( &the_thread->Wait.Block2n );
new_first_thread = (Thread_Control *) new_first_node;
next_node = the_thread->Object.Node.next;
previous_node = the_thread->Object.Node.previous;
if ( !_Chain_Is_empty( &the_thread->Wait.Block2n ) ) {
47b6c: b088 cmpl %a0,%d0
47b6e: 6614 bnes 47b84 <_Thread_queue_Dequeue_priority+0x60><== NEVER TAKEN
47b70: 6046 bras 47bb8 <_Thread_queue_Dequeue_priority+0x94>
Chain_Node *previous_node;
_ISR_Disable( level );
for( index=0 ;
index < TASK_QUEUE_DATA_NUMBER_OF_PRIORITY_HEADERS ;
index++ ) {
47b72: 5280 addql #1,%d0
47b74: 41e8 000c lea %a0@(12),%a0
Chain_Node *last_node;
Chain_Node *next_node;
Chain_Node *previous_node;
_ISR_Disable( level );
for( index=0 ;
47b78: 7404 moveq #4,%d2
47b7a: b480 cmpl %d0,%d2
47b7c: 66c2 bnes 47b40 <_Thread_queue_Dequeue_priority+0x1c>
}
/*
* We did not find a thread to unblock.
*/
_ISR_Enable( level );
47b7e: 46c1 movew %d1,%sr
return NULL;
47b80: 4202 clrb %d2
47b82: 6078 bras 47bfc <_Thread_queue_Dequeue_priority+0xd8>
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
_Thread_MP_Free_proxy( the_thread );
#endif
return( the_thread );
}
47b84: 286a 0040 moveal %a2@(64),%a4 <== NOT EXECUTED
next_node = the_thread->Object.Node.next;
previous_node = the_thread->Object.Node.previous;
if ( !_Chain_Is_empty( &the_thread->Wait.Block2n ) ) {
last_node = _Chain_Last( &the_thread->Wait.Block2n );
new_second_node = new_first_node->next;
47b88: 2a50 moveal %a0@,%a5 <== NOT EXECUTED
previous_node->next = new_first_node;
next_node->previous = new_first_node;
47b8a: 2348 0004 movel %a0,%a1@(4) <== NOT EXECUTED
if ( !_Chain_Is_empty( &the_thread->Wait.Block2n ) ) {
last_node = _Chain_Last( &the_thread->Wait.Block2n );
new_second_node = new_first_node->next;
previous_node->next = new_first_node;
47b8e: 2688 movel %a0,%a3@ <== NOT EXECUTED
next_node->previous = new_first_node;
new_first_node->next = next_node;
new_first_node->previous = previous_node;
47b90: 214b 0004 movel %a3,%a0@(4) <== NOT EXECUTED
last_node = _Chain_Last( &the_thread->Wait.Block2n );
new_second_node = new_first_node->next;
previous_node->next = new_first_node;
next_node->previous = new_first_node;
new_first_node->next = next_node;
47b94: 2089 movel %a1,%a0@ <== NOT EXECUTED
new_first_node->previous = previous_node;
if ( !_Chain_Has_only_one_node( &the_thread->Wait.Block2n ) ) {
47b96: 226a 0040 moveal %a2@(64),%a1 <== NOT EXECUTED
47b9a: b3ea 0038 cmpal %a2@(56),%a1 <== NOT EXECUTED
47b9e: 671e beqs 47bbe <_Thread_queue_Dequeue_priority+0x9a><== NOT EXECUTED
/* > two threads on 2-n */
head = _Chain_Head( &new_first_thread->Wait.Block2n );
47ba0: 43e8 0038 lea %a0@(56),%a1 <== NOT EXECUTED
47ba4: 2b49 0004 movel %a1,%a5@(4) <== NOT EXECUTED
tail = _Chain_Tail( &new_first_thread->Wait.Block2n );
new_second_node->previous = head;
head->next = new_second_node;
47ba8: 214d 0038 movel %a5,%a0@(56) <== NOT EXECUTED
tail->previous = last_node;
47bac: 214c 0040 movel %a4,%a0@(64) <== NOT EXECUTED
new_first_node->previous = previous_node;
if ( !_Chain_Has_only_one_node( &the_thread->Wait.Block2n ) ) {
/* > two threads on 2-n */
head = _Chain_Head( &new_first_thread->Wait.Block2n );
tail = _Chain_Tail( &new_first_thread->Wait.Block2n );
47bb0: 41e8 003c lea %a0@(60),%a0 <== NOT EXECUTED
47bb4: 2888 movel %a0,%a4@ <== NOT EXECUTED
47bb6: 6006 bras 47bbe <_Thread_queue_Dequeue_priority+0x9a><== NOT EXECUTED
head->next = new_second_node;
tail->previous = last_node;
last_node->next = tail;
}
} else {
previous_node->next = next_node;
47bb8: 2689 movel %a1,%a3@
next_node->previous = previous_node;
47bba: 234b 0004 movel %a3,%a1@(4)
47bbe: 47f9 0004 7448 lea 47448 <_Thread_Clear_state>,%a3
}
if ( !_Watchdog_Is_active( &the_thread->Timer ) ) {
47bc4: 7002 moveq #2,%d0
47bc6: b0aa 0050 cmpl %a2@(80),%d0
47bca: 6710 beqs 47bdc <_Thread_queue_Dequeue_priority+0xb8><== NEVER TAKEN
_ISR_Enable( level );
47bcc: 46c1 movew %d1,%sr
RTEMS_INLINE_ROUTINE void _Thread_Unblock (
Thread_Control *the_thread
)
{
_Thread_Clear_state( the_thread, STATES_BLOCKED );
47bce: 2f3c 1003 fff8 movel #268697592,%sp@-
47bd4: 2f0a movel %a2,%sp@-
47bd6: 4e93 jsr %a3@
47bd8: 508f addql #8,%sp
47bda: 6020 bras 47bfc <_Thread_queue_Dequeue_priority+0xd8>
RTEMS_INLINE_ROUTINE void _Watchdog_Deactivate(
Watchdog_Control *the_watchdog
)
{
the_watchdog->state = WATCHDOG_REMOVE_IT;
47bdc: 7003 moveq #3,%d0 <== NOT EXECUTED
47bde: 2540 0050 movel %d0,%a2@(80) <== NOT EXECUTED
_Thread_Unblock( the_thread );
} else {
_Watchdog_Deactivate( &the_thread->Timer );
_ISR_Enable( level );
47be2: 46c1 movew %d1,%sr <== NOT EXECUTED
(void) _Watchdog_Remove( &the_thread->Timer );
47be4: 486a 0048 pea %a2@(72) <== NOT EXECUTED
47be8: 4eb9 0004 863c jsr 4863c <_Watchdog_Remove> <== NOT EXECUTED
47bee: 2f3c 1003 fff8 movel #268697592,%sp@- <== NOT EXECUTED
47bf4: 2f0a movel %a2,%sp@- <== NOT EXECUTED
47bf6: 4e93 jsr %a3@ <== NOT EXECUTED
47bf8: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
_Thread_MP_Free_proxy( the_thread );
#endif
return( the_thread );
}
47bfc: 2002 movel %d2,%d0
47bfe: 4cee 3c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a5
47c04: 4e5e unlk %fp <== NOT EXECUTED
0004b038 <_Thread_queue_Enqueue_fifo>:
)
{
Thread_blocking_operation_States sync_state;
ISR_Level level;
_ISR_Disable( level );
4b038: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
Thread_blocking_operation_States _Thread_queue_Enqueue_fifo (
Thread_queue_Control *the_thread_queue,
Thread_Control *the_thread,
ISR_Level *level_p
)
{
4b03e: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4b042: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4b046: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4b048: 226e 000c moveal %fp@(12),%a1 <== NOT EXECUTED
4b04c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
Thread_blocking_operation_States sync_state;
ISR_Level level;
_ISR_Disable( level );
4b04e: 40c1 movew %sr,%d1 <== NOT EXECUTED
4b050: 8081 orl %d1,%d0 <== NOT EXECUTED
4b052: 46c0 movew %d0,%sr <== NOT EXECUTED
sync_state = the_thread_queue->sync_state;
4b054: 2028 0030 movel %a0@(48),%d0 <== NOT EXECUTED
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
if (sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED) {
4b058: 7401 moveq #1,%d2 <== NOT EXECUTED
ISR_Level level;
_ISR_Disable( level );
sync_state = the_thread_queue->sync_state;
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
4b05a: 42a8 0030 clrl %a0@(48) <== NOT EXECUTED
if (sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED) {
4b05e: b480 cmpl %d0,%d2 <== NOT EXECUTED
4b060: 661c bnes 4b07e <_Thread_queue_Enqueue_fifo+0x46><== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Append_unprotected(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
4b062: 2408 movel %a0,%d2 <== NOT EXECUTED
4b064: 5882 addql #4,%d2 <== NOT EXECUTED
Chain_Node *old_last = tail->previous;
4b066: 2468 0008 moveal %a0@(8),%a2 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Append_unprotected(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
4b06a: 2282 movel %d2,%a1@ <== NOT EXECUTED
Chain_Node *old_last = tail->previous;
the_node->next = tail;
tail->previous = the_node;
4b06c: 2149 0008 movel %a1,%a0@(8) <== NOT EXECUTED
old_last->next = the_node;
4b070: 2489 movel %a1,%a2@ <== NOT EXECUTED
the_node->previous = old_last;
4b072: 234a 0004 movel %a2,%a1@(4) <== NOT EXECUTED
_Chain_Append_unprotected(
&the_thread_queue->Queues.Fifo,
&the_thread->Object.Node
);
the_thread->Wait.queue = the_thread_queue;
4b076: 2348 0044 movel %a0,%a1@(68) <== NOT EXECUTED
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
_ISR_Enable( level );
4b07a: 46c1 movew %d1,%sr <== NOT EXECUTED
return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
4b07c: 6006 bras 4b084 <_Thread_queue_Enqueue_fifo+0x4c><== NOT EXECUTED
* 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;
4b07e: 206e 0010 moveal %fp@(16),%a0 <== NOT EXECUTED
4b082: 2081 movel %d1,%a0@ <== NOT EXECUTED
return sync_state;
}
4b084: 241f movel %sp@+,%d2 <== NOT EXECUTED
4b086: 245f moveal %sp@+,%a2 <== NOT EXECUTED
4b088: 4e5e unlk %fp <== NOT EXECUTED
00047ca0 <_Thread_queue_Enqueue_priority>:
Thread_blocking_operation_States _Thread_queue_Enqueue_priority (
Thread_queue_Control *the_thread_queue,
Thread_Control *the_thread,
ISR_Level *level_p
)
{
47ca0: 4e56 ffe0 linkw %fp,#-32
47ca4: 206e 000c moveal %fp@(12),%a0
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
47ca8: 43e8 003c lea %a0@(60),%a1
47cac: 48d7 1c7c moveml %d2-%d6/%a2-%a4,%sp@
47cb0: 246e 0008 moveal %fp@(8),%a2
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
47cb4: 49e8 0038 lea %a0@(56),%a4
Priority_Control priority;
States_Control block_state;
_Chain_Initialize_empty( &the_thread->Wait.Block2n );
priority = the_thread->current_priority;
47cb8: 2028 0014 movel %a0@(20),%d0
RTEMS_INLINE_ROUTINE uint32_t _Thread_queue_Header_number (
Priority_Control the_priority
)
{
return (the_priority / TASK_QUEUE_DATA_PRIORITIES_PER_HEADER);
47cbc: 2200 movel %d0,%d1
47cbe: ec89 lsrl #6,%d1
header_index = _Thread_queue_Header_number( priority );
header = &the_thread_queue->Queues.Priority[ header_index ];
block_state = the_thread_queue->state;
47cc0: 2a2a 0038 movel %a2@(56),%d5
Chain_Node *tail = _Chain_Tail( the_chain );
47cc4: 2149 0038 movel %a1,%a0@(56)
head->next = tail;
head->previous = NULL;
47cc8: 42a8 003c clrl %a0@(60)
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
47ccc: 214c 0040 movel %a4,%a0@(64)
if ( _Thread_queue_Is_reverse_search( priority ) )
47cd0: 0800 0005 btst #5,%d0
47cd4: 6670 bnes 47d46 <_Thread_queue_Enqueue_priority+0xa6>
*
* WARNING! Returning with interrupts disabled!
*/
*level_p = level;
return the_thread_queue->sync_state;
}
47cd6: 2401 movel %d1,%d2
if ( _Thread_queue_Is_reverse_search( priority ) )
goto restart_reverse_search;
restart_forward_search:
search_priority = PRIORITY_MINIMUM - 1;
_ISR_Disable( level );
47cd8: 367c 0700 moveaw #1792,%a3
*
* WARNING! Returning with interrupts disabled!
*/
*level_p = level;
return the_thread_queue->sync_state;
}
47cdc: e58a lsll #2,%d2
47cde: e989 lsll #4,%d1
47ce0: 9282 subl %d2,%d1
RTEMS_INLINE_ROUTINE bool _Chain_Is_tail(
Chain_Control *the_chain,
const Chain_Node *the_node
)
{
return (the_node == _Chain_Tail(the_chain));
47ce2: 49f2 1804 lea %a2@(00000004,%d1:l),%a4
if ( _Thread_queue_Is_reverse_search( priority ) )
goto restart_reverse_search;
restart_forward_search:
search_priority = PRIORITY_MINIMUM - 1;
_ISR_Disable( level );
47ce6: 260b movel %a3,%d3
47ce8: 40c2 movew %sr,%d2
47cea: 8682 orl %d2,%d3
47cec: 46c3 movew %d3,%sr
47cee: 2602 movel %d2,%d3
search_thread = (Thread_Control *) _Chain_First( header );
47cf0: 2272 1800 moveal %a2@(00000000,%d1:l),%a1
if ( _Thread_queue_Is_reverse_search( priority ) )
goto restart_reverse_search;
restart_forward_search:
search_priority = PRIORITY_MINIMUM - 1;
47cf4: 78ff moveq #-1,%d4
_ISR_Disable( level );
search_thread = (Thread_Control *) _Chain_First( header );
while ( !_Chain_Is_tail( header, (Chain_Node *)search_thread ) ) {
47cf6: 601e bras 47d16 <_Thread_queue_Enqueue_priority+0x76>
search_priority = search_thread->current_priority;
47cf8: 2829 0014 movel %a1@(20),%d4
if ( priority <= search_priority )
47cfc: b880 cmpl %d0,%d4
47cfe: 641a bccs 47d1a <_Thread_queue_Enqueue_priority+0x7a>
break;
search_priority = search_thread->current_priority;
if ( priority <= search_priority )
break;
#endif
_ISR_Flash( level );
47d00: 2c0b movel %a3,%d6
47d02: 46c2 movew %d2,%sr
47d04: 8c82 orl %d2,%d6
47d06: 46c6 movew %d6,%sr
RTEMS_INLINE_ROUTINE bool _States_Are_set (
States_Control the_states,
States_Control mask
)
{
return ( (the_states & mask) != STATES_READY);
47d08: 2c05 movel %d5,%d6
47d0a: cca9 0010 andl %a1@(16),%d6
if ( !_States_Are_set( search_thread->current_state, block_state) ) {
47d0e: 6604 bnes 47d14 <_Thread_queue_Enqueue_priority+0x74><== ALWAYS TAKEN
_ISR_Enable( level );
47d10: 46c2 movew %d2,%sr <== NOT EXECUTED
goto restart_forward_search;
47d12: 60d2 bras 47ce6 <_Thread_queue_Enqueue_priority+0x46><== NOT EXECUTED
}
search_thread =
(Thread_Control *)search_thread->Object.Node.next;
47d14: 2251 moveal %a1@,%a1
restart_forward_search:
search_priority = PRIORITY_MINIMUM - 1;
_ISR_Disable( level );
search_thread = (Thread_Control *) _Chain_First( header );
while ( !_Chain_Is_tail( header, (Chain_Node *)search_thread ) ) {
47d16: b9c9 cmpal %a1,%a4
47d18: 66de bnes 47cf8 <_Thread_queue_Enqueue_priority+0x58>
}
search_thread =
(Thread_Control *)search_thread->Object.Node.next;
}
if ( the_thread_queue->sync_state !=
47d1a: 7201 moveq #1,%d1
47d1c: b2aa 0030 cmpl %a2@(48),%d1
47d20: 6600 00b8 bnew 47dda <_Thread_queue_Enqueue_priority+0x13a>
THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )
goto synchronize;
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
47d24: 42aa 0030 clrl %a2@(48)
if ( priority == search_priority )
47d28: b880 cmpl %d0,%d4
47d2a: 6700 0092 beqw 47dbe <_Thread_queue_Enqueue_priority+0x11e>
goto equal_priority;
search_node = (Chain_Node *) search_thread;
previous_node = search_node->previous;
47d2e: 2669 0004 moveal %a1@(4),%a3
the_node = (Chain_Node *) the_thread;
the_node->next = search_node;
47d32: 2089 movel %a1,%a0@
the_node->previous = previous_node;
47d34: 214b 0004 movel %a3,%a0@(4)
previous_node->next = the_node;
47d38: 2688 movel %a0,%a3@
search_node->previous = the_node;
47d3a: 2348 0004 movel %a0,%a1@(4)
the_thread->Wait.queue = the_thread_queue;
47d3e: 214a 0044 movel %a2,%a0@(68)
_ISR_Enable( level );
47d42: 46c2 movew %d2,%sr
47d44: 6074 bras 47dba <_Thread_queue_Enqueue_priority+0x11a>
*
* WARNING! Returning with interrupts disabled!
*/
*level_p = level;
return the_thread_queue->sync_state;
}
47d46: 2401 movel %d1,%d2
47d48: 280a movel %a2,%d4
return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
restart_reverse_search:
search_priority = PRIORITY_MAXIMUM + 1;
_ISR_Disable( level );
47d4a: 367c 0700 moveaw #1792,%a3
*
* WARNING! Returning with interrupts disabled!
*/
*level_p = level;
return the_thread_queue->sync_state;
}
47d4e: e58a lsll #2,%d2
47d50: e989 lsll #4,%d1
47d52: 9282 subl %d2,%d1
47d54: d881 addl %d1,%d4
47d56: 2844 moveal %d4,%a4
47d58: 508c addql #8,%a4
the_thread->Wait.queue = the_thread_queue;
_ISR_Enable( level );
return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
restart_reverse_search:
search_priority = PRIORITY_MAXIMUM + 1;
47d5a: 4282 clrl %d2
47d5c: 1439 0005 c252 moveb 5c252 <rtems_maximum_priority>,%d2
_ISR_Disable( level );
47d62: 260b movel %a3,%d3
the_thread->Wait.queue = the_thread_queue;
_ISR_Enable( level );
return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
restart_reverse_search:
search_priority = PRIORITY_MAXIMUM + 1;
47d64: 5282 addql #1,%d2
_ISR_Disable( level );
47d66: 40c1 movew %sr,%d1
47d68: 8681 orl %d1,%d3
47d6a: 46c3 movew %d3,%sr
47d6c: 2601 movel %d1,%d3
search_thread = (Thread_Control *) _Chain_Last( header );
47d6e: 2254 moveal %a4@,%a1
while ( !_Chain_Is_head( header, (Chain_Node *)search_thread ) ) {
47d70: 6020 bras 47d92 <_Thread_queue_Enqueue_priority+0xf2>
search_priority = search_thread->current_priority;
47d72: 2429 0014 movel %a1@(20),%d2
if ( priority >= search_priority )
47d76: b480 cmpl %d0,%d2
47d78: 631c blss 47d96 <_Thread_queue_Enqueue_priority+0xf6><== ALWAYS TAKEN
break;
search_priority = search_thread->current_priority;
if ( priority >= search_priority )
break;
#endif
_ISR_Flash( level );
47d7a: 2c0b movel %a3,%d6 <== NOT EXECUTED
47d7c: 46c1 movew %d1,%sr <== NOT EXECUTED
47d7e: 8c81 orl %d1,%d6 <== NOT EXECUTED
47d80: 46c6 movew %d6,%sr <== NOT EXECUTED
47d82: 2c05 movel %d5,%d6 <== NOT EXECUTED
47d84: cca9 0010 andl %a1@(16),%d6 <== NOT EXECUTED
if ( !_States_Are_set( search_thread->current_state, block_state) ) {
47d88: 6604 bnes 47d8e <_Thread_queue_Enqueue_priority+0xee><== NOT EXECUTED
_ISR_Enable( level );
47d8a: 46c1 movew %d1,%sr <== NOT EXECUTED
goto restart_reverse_search;
47d8c: 60cc bras 47d5a <_Thread_queue_Enqueue_priority+0xba><== NOT EXECUTED
}
search_thread = (Thread_Control *)
search_thread->Object.Node.previous;
47d8e: 2269 0004 moveal %a1@(4),%a1 <== NOT EXECUTED
restart_reverse_search:
search_priority = PRIORITY_MAXIMUM + 1;
_ISR_Disable( level );
search_thread = (Thread_Control *) _Chain_Last( header );
while ( !_Chain_Is_head( header, (Chain_Node *)search_thread ) ) {
47d92: b889 cmpl %a1,%d4
47d94: 66dc bnes 47d72 <_Thread_queue_Enqueue_priority+0xd2>
}
search_thread = (Thread_Control *)
search_thread->Object.Node.previous;
}
if ( the_thread_queue->sync_state !=
47d96: 7801 moveq #1,%d4
47d98: b8aa 0030 cmpl %a2@(48),%d4
47d9c: 663c bnes 47dda <_Thread_queue_Enqueue_priority+0x13a><== NEVER TAKEN
THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )
goto synchronize;
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
47d9e: 42aa 0030 clrl %a2@(48)
if ( priority == search_priority )
47da2: b480 cmpl %d0,%d2
47da4: 6718 beqs 47dbe <_Thread_queue_Enqueue_priority+0x11e><== NEVER TAKEN
goto equal_priority;
search_node = (Chain_Node *) search_thread;
next_node = search_node->next;
47da6: 2651 moveal %a1@,%a3
the_node = (Chain_Node *) the_thread;
the_node->next = next_node;
the_node->previous = search_node;
47da8: 2149 0004 movel %a1,%a0@(4)
search_node = (Chain_Node *) search_thread;
next_node = search_node->next;
the_node = (Chain_Node *) the_thread;
the_node->next = next_node;
47dac: 208b movel %a3,%a0@
the_node->previous = search_node;
search_node->next = the_node;
next_node->previous = the_node;
47dae: 2748 0004 movel %a0,%a3@(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;
47db2: 2288 movel %a0,%a1@
next_node->previous = the_node;
the_thread->Wait.queue = the_thread_queue;
47db4: 214a 0044 movel %a2,%a0@(68)
_ISR_Enable( level );
47db8: 46c1 movew %d1,%sr
return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
47dba: 7001 moveq #1,%d0
47dbc: 6026 bras 47de4 <_Thread_queue_Enqueue_priority+0x144>
equal_priority: /* add at end of priority group */
search_node = _Chain_Tail( &search_thread->Wait.Block2n );
47dbe: 49e9 003c lea %a1@(60),%a4 <== NOT EXECUTED
previous_node = search_node->previous;
47dc2: 2669 0040 moveal %a1@(64),%a3 <== NOT EXECUTED
the_thread->Wait.queue = the_thread_queue;
_ISR_Enable( level );
return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
equal_priority: /* add at end of priority group */
search_node = _Chain_Tail( &search_thread->Wait.Block2n );
47dc6: 208c movel %a4,%a0@ <== NOT EXECUTED
previous_node = search_node->previous;
the_node = (Chain_Node *) the_thread;
the_node->next = search_node;
the_node->previous = previous_node;
47dc8: 214b 0004 movel %a3,%a0@(4) <== NOT EXECUTED
previous_node->next = the_node;
47dcc: 2688 movel %a0,%a3@ <== NOT EXECUTED
search_node->previous = the_node;
47dce: 2348 0040 movel %a0,%a1@(64) <== NOT EXECUTED
the_thread->Wait.queue = the_thread_queue;
47dd2: 214a 0044 movel %a2,%a0@(68) <== NOT EXECUTED
_ISR_Enable( level );
47dd6: 46c3 movew %d3,%sr <== NOT EXECUTED
47dd8: 60e0 bras 47dba <_Thread_queue_Enqueue_priority+0x11a><== NOT EXECUTED
* 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;
47dda: 206e 0010 moveal %fp@(16),%a0 <== NOT EXECUTED
return the_thread_queue->sync_state;
47dde: 202a 0030 movel %a2@(48),%d0 <== NOT EXECUTED
* 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;
47de2: 2083 movel %d3,%a0@ <== NOT EXECUTED
return the_thread_queue->sync_state;
}
47de4: 4cd7 1c7c moveml %sp@,%d2-%d6/%a2-%a4
47de8: 4e5e unlk %fp <== NOT EXECUTED
00047c08 <_Thread_queue_Enqueue_with_handler>:
void _Thread_queue_Enqueue_with_handler(
Thread_queue_Control *the_thread_queue,
Watchdog_Interval timeout,
Thread_queue_Timeout_callout handler
)
{
47c08: 4e56 fff0 linkw %fp,#-16
47c0c: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
47c10: 266e 0008 moveal %fp@(8),%a3
else
#endif
/*
* Set the blocking state for this thread queue in the thread.
*/
_Thread_Set_state( the_thread, the_thread_queue->state );
47c14: 2f2b 0038 movel %a3@(56),%sp@-
Thread_queue_Control *,
Thread_Control *,
ISR_Level *
);
the_thread = _Thread_Executing;
47c18: 2479 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a2
void _Thread_queue_Enqueue_with_handler(
Thread_queue_Control *the_thread_queue,
Watchdog_Interval timeout,
Thread_queue_Timeout_callout handler
)
{
47c1e: 242e 000c movel %fp@(12),%d2
else
#endif
/*
* Set the blocking state for this thread queue in the thread.
*/
_Thread_Set_state( the_thread, the_thread_queue->state );
47c22: 2f0a movel %a2,%sp@-
47c24: 4eb9 0004 7f7c jsr 47f7c <_Thread_Set_state>
/*
* If the thread wants to timeout, then schedule its timer.
*/
if ( timeout ) {
47c2a: 508f addql #8,%sp
47c2c: 4a82 tstl %d2
47c2e: 672c beqs 47c5c <_Thread_queue_Enqueue_with_handler+0x54><== ALWAYS TAKEN
_Watchdog_Initialize(
47c30: 202a 0008 movel %a2@(8),%d0 <== NOT EXECUTED
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
the_watchdog->routine = routine;
47c34: 256e 0010 0064 movel %fp@(16),%a2@(100) <== NOT EXECUTED
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
47c3a: 42aa 0050 clrl %a2@(80) <== NOT EXECUTED
the_watchdog->routine = routine;
the_watchdog->id = id;
47c3e: 2540 0068 movel %d0,%a2@(104) <== NOT EXECUTED
the_watchdog->user_data = user_data;
47c42: 42aa 006c clrl %a2@(108) <== NOT EXECUTED
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
47c46: 2542 0054 movel %d2,%a2@(84) <== NOT EXECUTED
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
47c4a: 486a 0048 pea %a2@(72) <== NOT EXECUTED
47c4e: 4879 0005 dbe8 pea 5dbe8 <_Watchdog_Ticks_chain> <== NOT EXECUTED
47c54: 4eb9 0004 8520 jsr 48520 <_Watchdog_Insert> <== NOT EXECUTED
47c5a: 508f addql #8,%sp <== NOT EXECUTED
* Now enqueue the thread per the discipline for this thread queue.
*/
if ( the_thread_queue->discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY )
enqueue_p = _Thread_queue_Enqueue_priority;
else /* must be THREAD_QUEUE_DISCIPLINE_FIFO */
enqueue_p = _Thread_queue_Enqueue_fifo;
47c5c: 41f9 0004 b038 lea 4b038 <_Thread_queue_Enqueue_fifo>,%a0
}
/*
* Now enqueue the thread per the discipline for this thread queue.
*/
if ( the_thread_queue->discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY )
47c62: 7001 moveq #1,%d0
47c64: b0ab 0034 cmpl %a3@(52),%d0
47c68: 6606 bnes 47c70 <_Thread_queue_Enqueue_with_handler+0x68><== NEVER TAKEN
enqueue_p = _Thread_queue_Enqueue_priority;
47c6a: 41f9 0004 7ca0 lea 47ca0 <_Thread_queue_Enqueue_priority>,%a0
else /* must be THREAD_QUEUE_DISCIPLINE_FIFO */
enqueue_p = _Thread_queue_Enqueue_fifo;
sync_state = (*enqueue_p)( the_thread_queue, the_thread, &level );
47c70: 486e fffc pea %fp@(-4)
47c74: 2f0a movel %a2,%sp@-
47c76: 2f0b movel %a3,%sp@-
47c78: 4e90 jsr %a0@
if ( sync_state != THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )
47c7a: 4fef 000c lea %sp@(12),%sp
47c7e: 7201 moveq #1,%d1
47c80: b280 cmpl %d0,%d1
47c82: 6712 beqs 47c96 <_Thread_queue_Enqueue_with_handler+0x8e><== ALWAYS TAKEN
_Thread_blocking_operation_Cancel( sync_state, the_thread, level );
47c84: 2f2e fffc movel %fp@(-4),%sp@- <== NOT EXECUTED
47c88: 2f0a movel %a2,%sp@- <== NOT EXECUTED
47c8a: 2f00 movel %d0,%sp@- <== NOT EXECUTED
47c8c: 4eb9 0004 72bc jsr 472bc <_Thread_blocking_operation_Cancel><== NOT EXECUTED
47c92: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
}
47c96: 4cee 0c04 fff0 moveml %fp@(-16),%d2/%a2-%a3
47c9c: 4e5e unlk %fp <== NOT EXECUTED
0004b08c <_Thread_queue_Extract>:
{
/*
* Can not use indirect function pointer here since Extract priority
* is a macro and the underlying methods do not have the same signature.
*/
if ( the_thread_queue->discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY )
4b08c: 7201 moveq #1,%d1 <== NOT EXECUTED
void _Thread_queue_Extract(
Thread_queue_Control *the_thread_queue,
Thread_Control *the_thread
)
{
4b08e: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4b092: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4b096: 202e 000c movel %fp@(12),%d0 <== NOT EXECUTED
/*
* Can not use indirect function pointer here since Extract priority
* is a macro and the underlying methods do not have the same signature.
*/
if ( the_thread_queue->discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY )
4b09a: b2a8 0034 cmpl %a0@(52),%d1 <== NOT EXECUTED
4b09e: 6614 bnes 4b0b4 <_Thread_queue_Extract+0x28> <== NOT EXECUTED
_Thread_queue_Extract_priority( the_thread_queue, the_thread );
4b0a0: 42a7 clrl %sp@- <== NOT EXECUTED
4b0a2: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4b0a4: 2f08 movel %a0,%sp@- <== NOT EXECUTED
4b0a6: 4eb9 0004 b0c4 jsr 4b0c4 <_Thread_queue_Extract_priority_helper><== NOT EXECUTED
4b0ac: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
else /* must be THREAD_QUEUE_DISCIPLINE_FIFO */
_Thread_queue_Extract_fifo( the_thread_queue, the_thread );
}
4b0b0: 4e5e unlk %fp <== NOT EXECUTED
4b0b2: 4e75 rts <== NOT EXECUTED
* is a macro and the underlying methods do not have the same signature.
*/
if ( the_thread_queue->discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY )
_Thread_queue_Extract_priority( the_thread_queue, the_thread );
else /* must be THREAD_QUEUE_DISCIPLINE_FIFO */
_Thread_queue_Extract_fifo( the_thread_queue, the_thread );
4b0b4: 2d40 000c movel %d0,%fp@(12) <== NOT EXECUTED
4b0b8: 2d48 0008 movel %a0,%fp@(8) <== NOT EXECUTED
}
4b0bc: 4e5e unlk %fp <== NOT EXECUTED
* is a macro and the underlying methods do not have the same signature.
*/
if ( the_thread_queue->discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY )
_Thread_queue_Extract_priority( the_thread_queue, the_thread );
else /* must be THREAD_QUEUE_DISCIPLINE_FIFO */
_Thread_queue_Extract_fifo( the_thread_queue, the_thread );
4b0be: 4ef9 0004 c814 jmp 4c814 <_Thread_queue_Extract_fifo> <== NOT EXECUTED
0004c814 <_Thread_queue_Extract_fifo>:
Thread_Control *the_thread
)
{
ISR_Level level;
_ISR_Disable( level );
4c814: 223c 0000 0700 movel #1792,%d1 <== NOT EXECUTED
void _Thread_queue_Extract_fifo(
Thread_queue_Control *the_thread_queue __attribute__((unused)),
Thread_Control *the_thread
)
{
4c81a: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4c81e: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4c820: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
ISR_Level level;
_ISR_Disable( level );
4c824: 40c0 movew %sr,%d0 <== NOT EXECUTED
4c826: 8280 orl %d0,%d1 <== NOT EXECUTED
4c828: 46c1 movew %d1,%sr <== NOT EXECUTED
4c82a: 222a 0010 movel %a2@(16),%d1 <== NOT EXECUTED
4c82e: 0281 0003 bee0 andil #245472,%d1 <== NOT EXECUTED
if ( !_States_Is_waiting_on_thread_queue( the_thread->current_state ) ) {
4c834: 660a bnes 4c840 <_Thread_queue_Extract_fifo+0x2c><== NOT EXECUTED
_ISR_Enable( level );
4c836: 46c0 movew %d0,%sr <== NOT EXECUTED
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
_Thread_MP_Free_proxy( the_thread );
#endif
}
4c838: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
4c83c: 4e5e unlk %fp <== NOT EXECUTED
4c83e: 4e75 rts <== NOT EXECUTED
)
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
4c840: 2252 moveal %a2@,%a1 <== NOT EXECUTED
_Chain_Extract_unprotected( &the_thread->Object.Node );
the_thread->Wait.queue = NULL;
if ( !_Watchdog_Is_active( &the_thread->Timer ) ) {
4c842: 7202 moveq #2,%d1 <== NOT EXECUTED
previous = the_node->previous;
4c844: 206a 0004 moveal %a2@(4),%a0 <== NOT EXECUTED
next->previous = previous;
4c848: 2348 0004 movel %a0,%a1@(4) <== NOT EXECUTED
previous->next = next;
4c84c: 2089 movel %a1,%a0@ <== NOT EXECUTED
return;
}
_Chain_Extract_unprotected( &the_thread->Object.Node );
the_thread->Wait.queue = NULL;
4c84e: 42aa 0044 clrl %a2@(68) <== NOT EXECUTED
if ( !_Watchdog_Is_active( &the_thread->Timer ) ) {
4c852: b2aa 0050 cmpl %a2@(80),%d1 <== NOT EXECUTED
4c856: 6704 beqs 4c85c <_Thread_queue_Extract_fifo+0x48><== NOT EXECUTED
_ISR_Enable( level );
4c858: 46c0 movew %d0,%sr <== NOT EXECUTED
4c85a: 6014 bras 4c870 <_Thread_queue_Extract_fifo+0x5c><== NOT EXECUTED
4c85c: 7203 moveq #3,%d1 <== NOT EXECUTED
4c85e: 2541 0050 movel %d1,%a2@(80) <== NOT EXECUTED
} else {
_Watchdog_Deactivate( &the_thread->Timer );
_ISR_Enable( level );
4c862: 46c0 movew %d0,%sr <== NOT EXECUTED
(void) _Watchdog_Remove( &the_thread->Timer );
4c864: 486a 0048 pea %a2@(72) <== NOT EXECUTED
4c868: 4eb9 0004 863c jsr 4863c <_Watchdog_Remove> <== NOT EXECUTED
4c86e: 588f addql #4,%sp <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Thread_Unblock (
Thread_Control *the_thread
)
{
_Thread_Clear_state( the_thread, STATES_BLOCKED );
4c870: 2d4a 0008 movel %a2,%fp@(8) <== NOT EXECUTED
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
_Thread_MP_Free_proxy( the_thread );
#endif
}
4c874: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
4c878: 203c 1003 fff8 movel #268697592,%d0 <== NOT EXECUTED
4c87e: 2d40 000c movel %d0,%fp@(12) <== NOT EXECUTED
4c882: 4e5e unlk %fp <== NOT EXECUTED
4c884: 4ef9 0004 7448 jmp 47448 <_Thread_Clear_state> <== NOT EXECUTED
...
0004b0c4 <_Thread_queue_Extract_priority_helper>:
Chain_Node *new_first_node;
Chain_Node *new_second_node;
Chain_Node *last_node;
the_node = (Chain_Node *) the_thread;
_ISR_Disable( level );
4b0c4: 223c 0000 0700 movel #1792,%d1
void _Thread_queue_Extract_priority_helper(
Thread_queue_Control *the_thread_queue __attribute__((unused)),
Thread_Control *the_thread,
bool requeuing
)
{
4b0ca: 4e56 ffec linkw %fp,#-20
4b0ce: 48d7 3c04 moveml %d2/%a2-%a5,%sp@
4b0d2: 246e 000c moveal %fp@(12),%a2
4b0d6: 142e 0013 moveb %fp@(19),%d2
Chain_Node *new_first_node;
Chain_Node *new_second_node;
Chain_Node *last_node;
the_node = (Chain_Node *) the_thread;
_ISR_Disable( level );
4b0da: 40c0 movew %sr,%d0
4b0dc: 8280 orl %d0,%d1
4b0de: 46c1 movew %d1,%sr
*/
RTEMS_INLINE_ROUTINE bool _States_Is_waiting_on_thread_queue (
States_Control the_states
)
{
return (the_states & STATES_WAITING_ON_THREAD_QUEUE);
4b0e0: 222a 0010 movel %a2@(16),%d1
4b0e4: 0281 0003 bee0 andil #245472,%d1
if ( !_States_Is_waiting_on_thread_queue( the_thread->current_state ) ) {
4b0ea: 6606 bnes 4b0f2 <_Thread_queue_Extract_priority_helper+0x2e><== ALWAYS TAKEN
_ISR_Enable( level );
4b0ec: 46c0 movew %d0,%sr <== NOT EXECUTED
return;
4b0ee: 6000 0096 braw 4b186 <_Thread_queue_Extract_priority_helper+0xc2><== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
4b0f2: 220a movel %a2,%d1
4b0f4: 0681 0000 003c addil #60,%d1
/*
* The thread was actually waiting on a thread queue so let's remove it.
*/
next_node = the_node->next;
4b0fa: 2252 moveal %a2@,%a1
previous_node = the_node->previous;
4b0fc: 266a 0004 moveal %a2@(4),%a3
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
_Thread_MP_Free_proxy( the_thread );
#endif
}
4b100: 206a 0038 moveal %a2@(56),%a0
*/
next_node = the_node->next;
previous_node = the_node->previous;
if ( !_Chain_Is_empty( &the_thread->Wait.Block2n ) ) {
4b104: b288 cmpl %a0,%d1
4b106: 6734 beqs 4b13c <_Thread_queue_Extract_priority_helper+0x78><== ALWAYS TAKEN
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
_Thread_MP_Free_proxy( the_thread );
#endif
}
4b108: 286a 0040 moveal %a2@(64),%a4 <== NOT EXECUTED
if ( !_Chain_Is_empty( &the_thread->Wait.Block2n ) ) {
new_first_node = _Chain_First( &the_thread->Wait.Block2n );
new_first_thread = (Thread_Control *) new_first_node;
last_node = _Chain_Last( &the_thread->Wait.Block2n );
new_second_node = new_first_node->next;
4b10c: 2a50 moveal %a0@,%a5 <== NOT EXECUTED
previous_node->next = new_first_node;
next_node->previous = new_first_node;
4b10e: 2348 0004 movel %a0,%a1@(4) <== NOT EXECUTED
new_first_node = _Chain_First( &the_thread->Wait.Block2n );
new_first_thread = (Thread_Control *) new_first_node;
last_node = _Chain_Last( &the_thread->Wait.Block2n );
new_second_node = new_first_node->next;
previous_node->next = new_first_node;
4b112: 2688 movel %a0,%a3@ <== NOT EXECUTED
next_node->previous = new_first_node;
new_first_node->next = next_node;
new_first_node->previous = previous_node;
4b114: 214b 0004 movel %a3,%a0@(4) <== NOT EXECUTED
last_node = _Chain_Last( &the_thread->Wait.Block2n );
new_second_node = new_first_node->next;
previous_node->next = new_first_node;
next_node->previous = new_first_node;
new_first_node->next = next_node;
4b118: 2089 movel %a1,%a0@ <== NOT EXECUTED
new_first_node->previous = previous_node;
if ( !_Chain_Has_only_one_node( &the_thread->Wait.Block2n ) ) {
4b11a: 222a 0040 movel %a2@(64),%d1 <== NOT EXECUTED
4b11e: b2aa 0038 cmpl %a2@(56),%d1 <== NOT EXECUTED
4b122: 671e beqs 4b142 <_Thread_queue_Extract_priority_helper+0x7e><== NOT EXECUTED
/* > two threads on 2-n */
head = _Chain_Head( &new_first_thread->Wait.Block2n );
4b124: 43e8 0038 lea %a0@(56),%a1 <== NOT EXECUTED
4b128: 2b49 0004 movel %a1,%a5@(4) <== NOT EXECUTED
tail = _Chain_Tail( &new_first_thread->Wait.Block2n );
new_second_node->previous = head;
head->next = new_second_node;
4b12c: 214d 0038 movel %a5,%a0@(56) <== NOT EXECUTED
tail->previous = last_node;
4b130: 214c 0040 movel %a4,%a0@(64) <== NOT EXECUTED
new_first_node->previous = previous_node;
if ( !_Chain_Has_only_one_node( &the_thread->Wait.Block2n ) ) {
/* > two threads on 2-n */
head = _Chain_Head( &new_first_thread->Wait.Block2n );
tail = _Chain_Tail( &new_first_thread->Wait.Block2n );
4b134: 41e8 003c lea %a0@(60),%a0 <== NOT EXECUTED
4b138: 2888 movel %a0,%a4@ <== NOT EXECUTED
4b13a: 6006 bras 4b142 <_Thread_queue_Extract_priority_helper+0x7e><== NOT EXECUTED
head->next = new_second_node;
tail->previous = last_node;
last_node->next = tail;
}
} else {
previous_node->next = next_node;
4b13c: 2689 movel %a1,%a3@
next_node->previous = previous_node;
4b13e: 234b 0004 movel %a3,%a1@(4)
/*
* If we are not supposed to touch timers or the thread's state, return.
*/
if ( requeuing ) {
4b142: 4a02 tstb %d2
4b144: 6704 beqs 4b14a <_Thread_queue_Extract_priority_helper+0x86><== NEVER TAKEN
_ISR_Enable( level );
4b146: 46c0 movew %d0,%sr
4b148: 603c bras 4b186 <_Thread_queue_Extract_priority_helper+0xc2>
return;
}
if ( !_Watchdog_Is_active( &the_thread->Timer ) ) {
4b14a: 7202 moveq #2,%d1 <== NOT EXECUTED
4b14c: b2aa 0050 cmpl %a2@(80),%d1 <== NOT EXECUTED
4b150: 6704 beqs 4b156 <_Thread_queue_Extract_priority_helper+0x92><== NOT EXECUTED
_ISR_Enable( level );
4b152: 46c0 movew %d0,%sr <== NOT EXECUTED
4b154: 6014 bras 4b16a <_Thread_queue_Extract_priority_helper+0xa6><== NOT EXECUTED
4b156: 7203 moveq #3,%d1 <== NOT EXECUTED
4b158: 2541 0050 movel %d1,%a2@(80) <== NOT EXECUTED
} else {
_Watchdog_Deactivate( &the_thread->Timer );
_ISR_Enable( level );
4b15c: 46c0 movew %d0,%sr <== NOT EXECUTED
(void) _Watchdog_Remove( &the_thread->Timer );
4b15e: 486a 0048 pea %a2@(72) <== NOT EXECUTED
4b162: 4eb9 0004 863c jsr 4863c <_Watchdog_Remove> <== NOT EXECUTED
4b168: 588f addql #4,%sp <== NOT EXECUTED
4b16a: 2d4a 0008 movel %a2,%fp@(8) <== NOT EXECUTED
4b16e: 227c 1003 fff8 moveal #268697592,%a1 <== NOT EXECUTED
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
_Thread_MP_Free_proxy( the_thread );
#endif
}
4b174: 4cee 3c04 ffec moveml %fp@(-20),%d2/%a2-%a5 <== NOT EXECUTED
4b17a: 2d49 000c movel %a1,%fp@(12) <== NOT EXECUTED
4b17e: 4e5e unlk %fp <== NOT EXECUTED
4b180: 4ef9 0004 7448 jmp 47448 <_Thread_Clear_state> <== NOT EXECUTED
4b186: 4cee 3c04 ffec moveml %fp@(-20),%d2/%a2-%a5
4b18c: 4e5e unlk %fp <== NOT EXECUTED
00047dec <_Thread_queue_Extract_with_proxy>:
*/
bool _Thread_queue_Extract_with_proxy(
Thread_Control *the_thread
)
{
47dec: 4e56 0000 linkw %fp,#0
47df0: 206e 0008 moveal %fp@(8),%a0
*/
RTEMS_INLINE_ROUTINE bool _States_Is_waiting_on_thread_queue (
States_Control the_states
)
{
return (the_states & STATES_WAITING_ON_THREAD_QUEUE);
47df4: 2028 0010 movel %a0@(16),%d0
47df8: 0280 0003 bee0 andil #245472,%d0
States_Control state;
state = the_thread->current_state;
if ( _States_Is_waiting_on_thread_queue( state ) ) {
47dfe: 6712 beqs 47e12 <_Thread_queue_Extract_with_proxy+0x26><== ALWAYS TAKEN
if ( proxy_extract_callout )
(*proxy_extract_callout)( the_thread );
}
#endif
_Thread_queue_Extract( the_thread->Wait.queue, the_thread );
47e00: 2f08 movel %a0,%sp@- <== NOT EXECUTED
47e02: 2f28 0044 movel %a0@(68),%sp@- <== NOT EXECUTED
47e06: 4eb9 0004 b08c jsr 4b08c <_Thread_queue_Extract> <== NOT EXECUTED
return true;
47e0c: 508f addql #8,%sp <== NOT EXECUTED
47e0e: 7001 moveq #1,%d0 <== NOT EXECUTED
47e10: 6002 bras 47e14 <_Thread_queue_Extract_with_proxy+0x28><== NOT EXECUTED
}
return false;
47e12: 4200 clrb %d0
}
47e14: 4e5e unlk %fp <== NOT EXECUTED
00049a54 <_Thread_queue_First>:
Thread_Control * (*first_p)(Thread_queue_Control *);
if ( the_thread_queue->discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY )
first_p = _Thread_queue_First_priority;
else /* must be THREAD_QUEUE_DISCIPLINE_FIFO */
first_p = _Thread_queue_First_fifo;
49a54: 43f9 0004 ce84 lea 4ce84 <_Thread_queue_First_fifo>,%a1 <== NOT EXECUTED
Thread_queue_Control *the_thread_queue
)
{
Thread_Control * (*first_p)(Thread_queue_Control *);
if ( the_thread_queue->discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY )
49a5a: 7001 moveq #1,%d0 <== NOT EXECUTED
*/
Thread_Control *_Thread_queue_First(
Thread_queue_Control *the_thread_queue
)
{
49a5c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
49a60: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
Thread_Control * (*first_p)(Thread_queue_Control *);
if ( the_thread_queue->discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY )
49a64: b0a8 0034 cmpl %a0@(52),%d0 <== NOT EXECUTED
49a68: 6606 bnes 49a70 <_Thread_queue_First+0x1c> <== NOT EXECUTED
first_p = _Thread_queue_First_priority;
49a6a: 43f9 0004 9a78 lea 49a78 <_Thread_queue_First_priority>,%a1<== NOT EXECUTED
else /* must be THREAD_QUEUE_DISCIPLINE_FIFO */
first_p = _Thread_queue_First_fifo;
return (*first_p)( the_thread_queue );
49a70: 2d48 0008 movel %a0,%fp@(8) <== NOT EXECUTED
}
49a74: 4e5e unlk %fp <== NOT EXECUTED
if ( the_thread_queue->discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY )
first_p = _Thread_queue_First_priority;
else /* must be THREAD_QUEUE_DISCIPLINE_FIFO */
first_p = _Thread_queue_First_fifo;
return (*first_p)( the_thread_queue );
49a76: 4ed1 jmp %a1@ <== NOT EXECUTED
0004ce84 <_Thread_queue_First_fifo>:
*/
Thread_Control *_Thread_queue_First_fifo(
Thread_queue_Control *the_thread_queue
)
{
4ce84: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
if ( !_Chain_Is_empty( &the_thread_queue->Queues.Fifo ) )
return (Thread_Control *) _Chain_First( &the_thread_queue->Queues.Fifo );
return NULL;
}
4ce88: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4ce8c: 2018 movel %a0@+,%d0 <== NOT EXECUTED
Thread_Control *_Thread_queue_First_fifo(
Thread_queue_Control *the_thread_queue
)
{
if ( !_Chain_Is_empty( &the_thread_queue->Queues.Fifo ) )
4ce8e: b1c0 cmpal %d0,%a0 <== NOT EXECUTED
4ce90: 6602 bnes 4ce94 <_Thread_queue_First_fifo+0x10> <== NOT EXECUTED
return (Thread_Control *) _Chain_First( &the_thread_queue->Queues.Fifo );
return NULL;
4ce92: 4280 clrl %d0 <== NOT EXECUTED
}
4ce94: 4e5e unlk %fp <== NOT EXECUTED
00049a78 <_Thread_queue_First_priority>:
Thread_queue_Control *the_thread_queue
)
{
uint32_t index;
for( index=0 ;
49a78: 4281 clrl %d1 <== NOT EXECUTED
*/
Thread_Control *_Thread_queue_First_priority (
Thread_queue_Control *the_thread_queue
)
{
49a7a: 4e56 fff4 linkw %fp,#-12 <== NOT EXECUTED
49a7e: 226e 0008 moveal %fp@(8),%a1 <== NOT EXECUTED
if ( !_Chain_Is_empty( &the_thread_queue->Queues.Priority[ index ] ) )
return (Thread_Control *) _Chain_First(
&the_thread_queue->Queues.Priority[ index ]
);
}
return NULL;
49a82: 2049 moveal %a1,%a0 <== NOT EXECUTED
*/
Thread_Control *_Thread_queue_First_priority (
Thread_queue_Control *the_thread_queue
)
{
49a84: 48d7 040c moveml %d2-%d3/%a2,%sp@ <== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
49a88: 2601 movel %d1,%d3 <== NOT EXECUTED
49a8a: 2401 movel %d1,%d2 <== NOT EXECUTED
49a8c: e58b lsll #2,%d3 <== NOT EXECUTED
49a8e: e98a lsll #4,%d2 <== NOT EXECUTED
return (Thread_Control *) _Chain_First(
&the_thread_queue->Queues.Priority[ index ]
);
}
return NULL;
}
49a90: 2010 movel %a0@,%d0 <== NOT EXECUTED
49a92: 9483 subl %d3,%d2 <== NOT EXECUTED
49a94: 45f1 2804 lea %a1@(00000004,%d2:l),%a2 <== NOT EXECUTED
uint32_t index;
for( index=0 ;
index < TASK_QUEUE_DATA_NUMBER_OF_PRIORITY_HEADERS ;
index++ ) {
if ( !_Chain_Is_empty( &the_thread_queue->Queues.Priority[ index ] ) )
49a98: b5c0 cmpal %d0,%a2 <== NOT EXECUTED
49a9a: 660e bnes 49aaa <_Thread_queue_First_priority+0x32><== NOT EXECUTED
{
uint32_t index;
for( index=0 ;
index < TASK_QUEUE_DATA_NUMBER_OF_PRIORITY_HEADERS ;
index++ ) {
49a9c: 5281 addql #1,%d1 <== NOT EXECUTED
49a9e: 41e8 000c lea %a0@(12),%a0 <== NOT EXECUTED
Thread_queue_Control *the_thread_queue
)
{
uint32_t index;
for( index=0 ;
49aa2: 7004 moveq #4,%d0 <== NOT EXECUTED
49aa4: b081 cmpl %d1,%d0 <== NOT EXECUTED
49aa6: 66e0 bnes 49a88 <_Thread_queue_First_priority+0x10><== NOT EXECUTED
if ( !_Chain_Is_empty( &the_thread_queue->Queues.Priority[ index ] ) )
return (Thread_Control *) _Chain_First(
&the_thread_queue->Queues.Priority[ index ]
);
}
return NULL;
49aa8: 4200 clrb %d0 <== NOT EXECUTED
}
49aaa: 4cd7 040c moveml %sp@,%d2-%d3/%a2 <== NOT EXECUTED
49aae: 4e5e unlk %fp <== NOT EXECUTED
...
0004b190 <_Thread_queue_Process_timeout>:
#include <rtems/score/tqdata.h>
void _Thread_queue_Process_timeout(
Thread_Control *the_thread
)
{
4b190: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4b194: 226e 0008 moveal %fp@(8),%a1 <== NOT EXECUTED
Thread_queue_Control *the_thread_queue = the_thread->Wait.queue;
4b198: 2069 0044 moveal %a1@(68),%a0 <== NOT EXECUTED
* If it is not satisfied, then it is "nothing happened" and
* this is the "timeout" transition. After a request is satisfied,
* a timeout is not allowed to occur.
*/
if ( the_thread_queue->sync_state != THREAD_BLOCKING_OPERATION_SYNCHRONIZED &&
4b19c: 2028 0030 movel %a0@(48),%d0 <== NOT EXECUTED
4b1a0: 671c beqs 4b1be <_Thread_queue_Process_timeout+0x2e><== NOT EXECUTED
4b1a2: b3f9 0005 df96 cmpal 5df96 <_Per_CPU_Information+0xc>,%a1 <== NOT EXECUTED
4b1a8: 6614 bnes 4b1be <_Thread_queue_Process_timeout+0x2e><== NOT EXECUTED
_Thread_Is_executing( the_thread ) ) {
if ( the_thread_queue->sync_state != THREAD_BLOCKING_OPERATION_SATISFIED ) {
4b1aa: 7203 moveq #3,%d1 <== NOT EXECUTED
4b1ac: b280 cmpl %d0,%d1 <== NOT EXECUTED
4b1ae: 6720 beqs 4b1d0 <_Thread_queue_Process_timeout+0x40><== NOT EXECUTED
the_thread->Wait.return_code = the_thread->Wait.queue->timeout_status;
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_TIMEOUT;
4b1b0: 7002 moveq #2,%d0 <== NOT EXECUTED
*/
if ( the_thread_queue->sync_state != THREAD_BLOCKING_OPERATION_SYNCHRONIZED &&
_Thread_Is_executing( the_thread ) ) {
if ( the_thread_queue->sync_state != THREAD_BLOCKING_OPERATION_SATISFIED ) {
the_thread->Wait.return_code = the_thread->Wait.queue->timeout_status;
4b1b2: 2368 003c 0034 movel %a0@(60),%a1@(52) <== NOT EXECUTED
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_TIMEOUT;
4b1b8: 2140 0030 movel %d0,%a0@(48) <== NOT EXECUTED
4b1bc: 6012 bras 4b1d0 <_Thread_queue_Process_timeout+0x40><== NOT EXECUTED
}
} else {
the_thread->Wait.return_code = the_thread->Wait.queue->timeout_status;
4b1be: 2368 003c 0034 movel %a0@(60),%a1@(52) <== NOT EXECUTED
_Thread_queue_Extract( the_thread->Wait.queue, the_thread );
4b1c4: 2f09 movel %a1,%sp@- <== NOT EXECUTED
4b1c6: 2f08 movel %a0,%sp@- <== NOT EXECUTED
4b1c8: 4eb9 0004 b08c jsr 4b08c <_Thread_queue_Extract> <== NOT EXECUTED
4b1ce: 508f addql #8,%sp <== NOT EXECUTED
}
}
4b1d0: 4e5e unlk %fp <== NOT EXECUTED
00047eb8 <_Thread_queue_Requeue>:
void _Thread_queue_Requeue(
Thread_queue_Control *the_thread_queue,
Thread_Control *the_thread
)
{
47eb8: 4e56 fff0 linkw %fp,#-16
47ebc: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
47ec0: 246e 0008 moveal %fp@(8),%a2
47ec4: 266e 000c moveal %fp@(12),%a3
/*
* Just in case the thread really wasn't blocked on a thread queue
* when we get here.
*/
if ( !the_thread_queue )
47ec8: 4a8a tstl %a2
47eca: 6746 beqs 47f12 <_Thread_queue_Requeue+0x5a> <== NEVER TAKEN
/*
* If queueing by FIFO, there is nothing to do. This only applies to
* priority blocking discipline.
*/
if ( the_thread_queue->discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY ) {
47ecc: 7001 moveq #1,%d0
47ece: b0aa 0034 cmpl %a2@(52),%d0
47ed2: 663e bnes 47f12 <_Thread_queue_Requeue+0x5a> <== NEVER TAKEN
Thread_queue_Control *tq = the_thread_queue;
ISR_Level level;
ISR_Level level_ignored;
_ISR_Disable( level );
47ed4: 303c 0700 movew #1792,%d0
47ed8: 40c2 movew %sr,%d2
47eda: 8082 orl %d2,%d0
47edc: 46c0 movew %d0,%sr
47ede: 202b 0010 movel %a3@(16),%d0
47ee2: 0280 0003 bee0 andil #245472,%d0
if ( _States_Is_waiting_on_thread_queue( the_thread->current_state ) ) {
47ee8: 6726 beqs 47f10 <_Thread_queue_Requeue+0x58> <== NEVER TAKEN
RTEMS_INLINE_ROUTINE void _Thread_queue_Enter_critical_section (
Thread_queue_Control *the_thread_queue
)
{
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
47eea: 7001 moveq #1,%d0
47eec: 2540 0030 movel %d0,%a2@(48)
_Thread_queue_Enter_critical_section( tq );
_Thread_queue_Extract_priority_helper( tq, the_thread, true );
47ef0: 4878 0001 pea 1 <ADD>
47ef4: 2f0b movel %a3,%sp@-
47ef6: 2f0a movel %a2,%sp@-
47ef8: 4eb9 0004 b0c4 jsr 4b0c4 <_Thread_queue_Extract_priority_helper>
(void) _Thread_queue_Enqueue_priority( tq, the_thread, &level_ignored );
47efe: 486e fffc pea %fp@(-4)
47f02: 2f0b movel %a3,%sp@-
47f04: 2f0a movel %a2,%sp@-
47f06: 4eb9 0004 7ca0 jsr 47ca0 <_Thread_queue_Enqueue_priority>
47f0c: 4fef 0018 lea %sp@(24),%sp
}
_ISR_Enable( level );
47f10: 46c2 movew %d2,%sr
}
}
47f12: 4cee 0c04 fff0 moveml %fp@(-16),%d2/%a2-%a3
47f18: 4e5e unlk %fp <== NOT EXECUTED
00047f1c <_Thread_queue_Timeout>:
void _Thread_queue_Timeout(
Objects_Id id,
void *ignored __attribute__((unused))
)
{
47f1c: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
Thread_Control *the_thread;
Objects_Locations location;
the_thread = _Thread_Get( id, &location );
47f20: 486e fffc pea %fp@(-4) <== NOT EXECUTED
47f24: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
47f28: 4eb9 0004 77cc jsr 477cc <_Thread_Get> <== NOT EXECUTED
switch ( location ) {
47f2e: 508f addql #8,%sp <== NOT EXECUTED
47f30: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
47f34: 6618 bnes 47f4e <_Thread_queue_Timeout+0x32> <== NOT EXECUTED
#if defined(RTEMS_MULTIPROCESSING)
case OBJECTS_REMOTE: /* impossible */
#endif
break;
case OBJECTS_LOCAL:
_Thread_queue_Process_timeout( the_thread );
47f36: 2f00 movel %d0,%sp@- <== NOT EXECUTED
47f38: 4eb9 0004 b190 jsr 4b190 <_Thread_queue_Process_timeout> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Thread_Unnest_dispatch( void )
{
RTEMS_COMPILER_MEMORY_BARRIER();
_Thread_Dispatch_disable_level -= 1;
47f3e: 588f addql #4,%sp <== NOT EXECUTED
47f40: 2039 0005 db08 movel 5db08 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
47f46: 5380 subql #1,%d0 <== NOT EXECUTED
47f48: 23c0 0005 db08 movel %d0,5db08 <_Thread_Dispatch_disable_level><== NOT EXECUTED
_Thread_Unnest_dispatch();
break;
}
}
47f4e: 4e5e unlk %fp <== NOT EXECUTED
...
00051fa6 <_Timer_server_Body>:
* @a arg points to the corresponding timer server control block.
*/
static rtems_task _Timer_server_Body(
rtems_task_argument arg
)
{
51fa6: 4e56 ffb4 linkw %fp,#-76 <== NOT EXECUTED
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
51faa: 41ee ffec lea %fp@(-20),%a0 <== NOT EXECUTED
51fae: 200e movel %fp,%d0 <== NOT EXECUTED
51fb0: 220e movel %fp,%d1 <== NOT EXECUTED
51fb2: 5181 subql #8,%d1 <== NOT EXECUTED
51fb4: 0680 ffff fff4 addil #-12,%d0 <== NOT EXECUTED
51fba: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@ <== NOT EXECUTED
51fbe: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
51fc2: 260e movel %fp,%d3 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE const Chain_Node *_Chain_Immutable_tail(
const Chain_Control *the_chain
)
{
return &the_chain->Tail.Node;
51fc4: 2808 movel %a0,%d4 <== NOT EXECUTED
static void _Timer_server_Stop_tod_system_watchdog(
Timer_server_Control *ts
)
{
_Watchdog_Remove( &ts->TOD_watchdogs.System_watchdog );
51fc6: 2c0a movel %a2,%d6 <== NOT EXECUTED
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
51fc8: 0683 ffff ffe8 addil #-24,%d3 <== NOT EXECUTED
51fce: 0686 0000 0040 addil #64,%d6 <== NOT EXECUTED
*/
Watchdog_Interval delta = snapshot - watchdogs->last_snapshot;
watchdogs->last_snapshot = snapshot;
_Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );
51fd4: 2a0a movel %a2,%d5 <== NOT EXECUTED
/*
* 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 );
51fd6: 240a movel %a2,%d2 <== NOT EXECUTED
*/
Watchdog_Interval delta = snapshot - watchdogs->last_snapshot;
watchdogs->last_snapshot = snapshot;
_Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );
51fd8: 0685 0000 0030 addil #48,%d5 <== NOT EXECUTED
51fde: 47f9 0005 5e30 lea 55e30 <_Watchdog_Adjust_to_chain>,%a3 <== NOT EXECUTED
/*
* 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 );
51fe4: 0682 0000 0068 addil #104,%d2 <== NOT EXECUTED
51fea: 4bf9 0005 5db0 lea 55db0 <_Watchdog_Adjust>,%a5 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE const Chain_Node *_Chain_Immutable_tail(
const Chain_Control *the_chain
)
{
return &the_chain->Tail.Node;
51ff0: 2e01 movel %d1,%d7 <== NOT EXECUTED
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
51ff2: 2d48 ffe8 movel %a0,%fp@(-24) <== NOT EXECUTED
static void _Timer_server_Stop_interval_system_watchdog(
Timer_server_Control *ts
)
{
_Watchdog_Remove( &ts->Interval_watchdogs.System_watchdog );
51ff6: 41ea 0008 lea %a2@(8),%a0 <== NOT EXECUTED
51ffa: 2d41 fff4 movel %d1,%fp@(-12) <== NOT EXECUTED
head->previous = NULL;
51ffe: 42ae fff8 clrl %fp@(-8) <== NOT EXECUTED
tail->previous = head;
52002: 2d40 fffc movel %d0,%fp@(-4) <== NOT EXECUTED
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
head->previous = NULL;
52006: 42ae ffec clrl %fp@(-20) <== NOT EXECUTED
tail->previous = head;
5200a: 2d43 fff0 movel %d3,%fp@(-16) <== NOT EXECUTED
5200e: 2d48 ffe4 movel %a0,%fp@(-28) <== NOT EXECUTED
static void _Timer_server_Stop_tod_system_watchdog(
Timer_server_Control *ts
)
{
_Watchdog_Remove( &ts->TOD_watchdogs.System_watchdog );
52012: 2d46 ffe0 movel %d6,%fp@(-32) <== NOT EXECUTED
Chain_Control *tmp;
/*
* 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;
52016: 41ee fff4 lea %fp@(-12),%a0 <== NOT EXECUTED
)
{
if ( timer->the_class == TIMER_INTERVAL_ON_TASK ) {
_Watchdog_Insert( &ts->Interval_watchdogs.Chain, &timer->Ticker );
} else if ( timer->the_class == TIMER_TIME_OF_DAY_ON_TASK ) {
_Watchdog_Insert( &ts->TOD_watchdogs.Chain, &timer->Ticker );
5201a: 49f9 0005 5ec0 lea 55ec0 <_Watchdog_Insert>,%a4 <== NOT EXECUTED
Chain_Control *tmp;
/*
* 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;
52020: 2548 0078 movel %a0,%a2@(120) <== NOT EXECUTED
static void _Timer_server_Process_interval_watchdogs(
Timer_server_Watchdogs *watchdogs,
Chain_Control *fire_chain
)
{
Watchdog_Interval snapshot = _Watchdog_Ticks_since_boot;
52024: 2039 0007 66d6 movel 766d6 <_Watchdog_Ticks_since_boot>,%d0<== NOT EXECUTED
/*
* We assume adequate unsigned arithmetic here.
*/
Watchdog_Interval delta = snapshot - watchdogs->last_snapshot;
5202a: 222a 003c movel %a2@(60),%d1 <== NOT EXECUTED
watchdogs->last_snapshot = snapshot;
5202e: 2540 003c movel %d0,%a2@(60) <== NOT EXECUTED
_Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );
52032: 9081 subl %d1,%d0 <== NOT EXECUTED
52034: 2f03 movel %d3,%sp@- <== NOT EXECUTED
52036: 2f00 movel %d0,%sp@- <== NOT EXECUTED
52038: 2f05 movel %d5,%sp@- <== NOT EXECUTED
5203a: 4e93 jsr %a3@ <== NOT EXECUTED
static void _Timer_server_Process_tod_watchdogs(
Timer_server_Watchdogs *watchdogs,
Chain_Control *fire_chain
)
{
Watchdog_Interval snapshot = (Watchdog_Interval) _TOD_Seconds_since_epoch();
5203c: 2039 0007 6656 movel 76656 <_TOD_Now>,%d0 <== NOT EXECUTED
/*
* Process the seconds chain. Start by checking that the Time
* of Day (TOD) has not been set backwards. If it has then
* we want to adjust the watchdogs->Chain to indicate this.
*/
if ( snapshot > last_snapshot ) {
52042: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
Timer_server_Watchdogs *watchdogs,
Chain_Control *fire_chain
)
{
Watchdog_Interval snapshot = (Watchdog_Interval) _TOD_Seconds_since_epoch();
Watchdog_Interval last_snapshot = watchdogs->last_snapshot;
52046: 222a 0074 movel %a2@(116),%d1 <== NOT EXECUTED
/*
* Process the seconds chain. Start by checking that the Time
* of Day (TOD) has not been set backwards. If it has then
* we want to adjust the watchdogs->Chain to indicate this.
*/
if ( snapshot > last_snapshot ) {
5204a: b280 cmpl %d0,%d1 <== NOT EXECUTED
5204c: 6412 bccs 52060 <_Timer_server_Body+0xba> <== NOT EXECUTED
/*
* This path is for normal forward movement and cases where the
* TOD has been set forward.
*/
delta = snapshot - last_snapshot;
_Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );
5204e: 2f03 movel %d3,%sp@- <== NOT EXECUTED
52050: 2c00 movel %d0,%d6 <== NOT EXECUTED
52052: 9c81 subl %d1,%d6 <== NOT EXECUTED
52054: 2f06 movel %d6,%sp@- <== NOT EXECUTED
52056: 2d40 ffdc movel %d0,%fp@(-36) <== NOT EXECUTED
5205a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
5205c: 4e93 jsr %a3@ <== NOT EXECUTED
5205e: 6014 bras 52074 <_Timer_server_Body+0xce> <== NOT EXECUTED
} else if ( snapshot < last_snapshot ) {
52060: b280 cmpl %d0,%d1 <== NOT EXECUTED
52062: 6318 blss 5207c <_Timer_server_Body+0xd6> <== NOT EXECUTED
/*
* 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 );
52064: 9280 subl %d0,%d1 <== NOT EXECUTED
52066: 2f01 movel %d1,%sp@- <== NOT EXECUTED
52068: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
5206c: 2d40 ffdc movel %d0,%fp@(-36) <== NOT EXECUTED
52070: 2f02 movel %d2,%sp@- <== NOT EXECUTED
52072: 4e95 jsr %a5@ <== NOT EXECUTED
52074: 202e ffdc movel %fp@(-36),%d0 <== NOT EXECUTED
52078: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
}
watchdogs->last_snapshot = snapshot;
5207c: 2540 0074 movel %d0,%a2@(116) <== NOT EXECUTED
}
static void _Timer_server_Process_insertions( Timer_server_Control *ts )
{
while ( true ) {
Timer_Control *timer = (Timer_Control *) _Chain_Get( ts->insert_chain );
52080: 202a 0078 movel %a2@(120),%d0 <== NOT EXECUTED
52084: 2f00 movel %d0,%sp@- <== NOT EXECUTED
52086: 4eb9 0005 2aa8 jsr 52aa8 <_Chain_Get> <== NOT EXECUTED
if ( timer == NULL ) {
5208c: 588f addql #4,%sp <== NOT EXECUTED
}
static void _Timer_server_Process_insertions( Timer_server_Control *ts )
{
while ( true ) {
Timer_Control *timer = (Timer_Control *) _Chain_Get( ts->insert_chain );
5208e: 2040 moveal %d0,%a0 <== NOT EXECUTED
if ( timer == NULL ) {
52090: 4a80 tstl %d0 <== NOT EXECUTED
52092: 6724 beqs 520b8 <_Timer_server_Body+0x112> <== NOT EXECUTED
static void _Timer_server_Insert_timer(
Timer_server_Control *ts,
Timer_Control *timer
)
{
if ( timer->the_class == TIMER_INTERVAL_ON_TASK ) {
52094: 2028 0038 movel %a0@(56),%d0 <== NOT EXECUTED
52098: 7201 moveq #1,%d1 <== NOT EXECUTED
5209a: b280 cmpl %d0,%d1 <== NOT EXECUTED
5209c: 6608 bnes 520a6 <_Timer_server_Body+0x100> <== NOT EXECUTED
_Watchdog_Insert( &ts->Interval_watchdogs.Chain, &timer->Ticker );
5209e: 4868 0010 pea %a0@(16) <== NOT EXECUTED
520a2: 2f05 movel %d5,%sp@- <== NOT EXECUTED
520a4: 600c bras 520b2 <_Timer_server_Body+0x10c> <== NOT EXECUTED
} else if ( timer->the_class == TIMER_TIME_OF_DAY_ON_TASK ) {
520a6: 7c03 moveq #3,%d6 <== NOT EXECUTED
520a8: bc80 cmpl %d0,%d6 <== NOT EXECUTED
520aa: 66d4 bnes 52080 <_Timer_server_Body+0xda> <== NOT EXECUTED
_Watchdog_Insert( &ts->TOD_watchdogs.Chain, &timer->Ticker );
520ac: 4868 0010 pea %a0@(16) <== NOT EXECUTED
520b0: 2f02 movel %d2,%sp@- <== NOT EXECUTED
520b2: 4e94 jsr %a4@ <== NOT EXECUTED
520b4: 508f addql #8,%sp <== NOT EXECUTED
520b6: 60c8 bras 52080 <_Timer_server_Body+0xda> <== NOT EXECUTED
* of zero it will be processed in the next iteration of the timer server
* body loop.
*/
_Timer_server_Process_insertions( ts );
_ISR_Disable( level );
520b8: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
520be: 40c1 movew %sr,%d1 <== NOT EXECUTED
520c0: 8081 orl %d1,%d0 <== NOT EXECUTED
520c2: 46c0 movew %d0,%sr <== NOT EXECUTED
tmp = ts->insert_chain;
520c4: 202a 0078 movel %a2@(120),%d0 <== NOT EXECUTED
if ( _Chain_Is_empty( insert_chain ) ) {
520c8: beae fff4 cmpl %fp@(-12),%d7 <== NOT EXECUTED
520cc: 6608 bnes 520d6 <_Timer_server_Body+0x130> <== NOT EXECUTED
ts->insert_chain = NULL;
520ce: 42aa 0078 clrl %a2@(120) <== NOT EXECUTED
do_loop = false;
520d2: 4200 clrb %d0 <== NOT EXECUTED
520d4: 6002 bras 520d8 <_Timer_server_Body+0x132> <== NOT EXECUTED
*/
_Timer_server_Process_insertions( ts );
_ISR_Disable( level );
tmp = ts->insert_chain;
if ( _Chain_Is_empty( insert_chain ) ) {
520d6: 7001 moveq #1,%d0 <== NOT EXECUTED
ts->insert_chain = NULL;
do_loop = false;
}
_ISR_Enable( level );
520d8: 46c1 movew %d1,%sr <== NOT EXECUTED
* 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;
while ( do_loop ) {
520da: 4a00 tstb %d0 <== NOT EXECUTED
520dc: 6600 ff46 bnew 52024 <_Timer_server_Body+0x7e> <== NOT EXECUTED
_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 ) ) {
520e0: b8ae ffe8 cmpl %fp@(-24),%d4 <== NOT EXECUTED
520e4: 6742 beqs 52128 <_Timer_server_Body+0x182> <== 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 );
520e6: 2c3c 0000 0700 movel #1792,%d6 <== NOT EXECUTED
520ec: 2006 movel %d6,%d0 <== NOT EXECUTED
520ee: 40c1 movew %sr,%d1 <== NOT EXECUTED
520f0: 8081 orl %d1,%d0 <== NOT EXECUTED
520f2: 46c0 movew %d0,%sr <== NOT EXECUTED
initialized = false;
}
#endif
return status;
}
520f4: 206e ffe8 moveal %fp@(-24),%a0 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Get_unprotected(
Chain_Control *the_chain
)
{
if ( !_Chain_Is_empty(the_chain))
520f8: b888 cmpl %a0,%d4 <== NOT EXECUTED
520fa: 6726 beqs 52122 <_Timer_server_Body+0x17c> <== NOT EXECUTED
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *old_first = head->next;
Chain_Node *new_first = old_first->next;
520fc: 2250 moveal %a0@,%a1 <== NOT EXECUTED
head->next = new_first;
520fe: 2d49 ffe8 movel %a1,%fp@(-24) <== NOT EXECUTED
new_first->previous = head;
52102: 2343 0004 movel %d3,%a1@(4) <== 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 );
watchdog = (Watchdog_Control *) _Chain_Get_unprotected( &fire_chain );
if ( watchdog != NULL ) {
52106: 4a88 tstl %a0 <== NOT EXECUTED
52108: 6718 beqs 52122 <_Timer_server_Body+0x17c> <== NOT EXECUTED
watchdog->state = WATCHDOG_INACTIVE;
5210a: 42a8 0008 clrl %a0@(8) <== NOT EXECUTED
_ISR_Enable( level );
5210e: 46c1 movew %d1,%sr <== NOT EXECUTED
/*
* 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 );
52110: 2f28 0024 movel %a0@(36),%sp@- <== NOT EXECUTED
52114: 2f28 0020 movel %a0@(32),%sp@- <== NOT EXECUTED
52118: 2068 001c moveal %a0@(28),%a0 <== NOT EXECUTED
5211c: 4e90 jsr %a0@ <== NOT EXECUTED
}
5211e: 508f addql #8,%sp <== NOT EXECUTED
52120: 60ca bras 520ec <_Timer_server_Body+0x146> <== NOT EXECUTED
watchdog = (Watchdog_Control *) _Chain_Get_unprotected( &fire_chain );
if ( watchdog != NULL ) {
watchdog->state = WATCHDOG_INACTIVE;
_ISR_Enable( level );
} else {
_ISR_Enable( level );
52122: 46c1 movew %d1,%sr <== NOT EXECUTED
52124: 6000 fef0 braw 52016 <_Timer_server_Body+0x70> <== NOT EXECUTED
static void _Timer_server_Stop_interval_system_watchdog(
Timer_server_Control *ts
)
{
_Watchdog_Remove( &ts->Interval_watchdogs.System_watchdog );
52128: 49f9 0005 5fdc lea 55fdc <_Watchdog_Remove>,%a4 <== NOT EXECUTED
* the active flag of the timer server is true.
*/
(*watchdog->routine)( watchdog->id, watchdog->user_data );
}
} else {
ts->active = false;
5212e: 4200 clrb %d0 <== NOT EXECUTED
52130: 1540 007c moveb %d0,%a2@(124) <== NOT EXECUTED
/*
* Block until there is something to do.
*/
_Thread_Disable_dispatch();
52134: 4eba fd96 jsr %pc@(51ecc <_Thread_Disable_dispatch>) <== NOT EXECUTED
_Thread_Set_state( ts->thread, STATES_DELAYING );
52138: 4878 0008 pea 8 <DIVIDE_BY_ZERO> <== NOT EXECUTED
5213c: 2f12 movel %a2@,%sp@- <== NOT EXECUTED
5213e: 4eb9 0005 576c jsr 5576c <_Thread_Set_state> <== NOT EXECUTED
_Timer_server_Reset_interval_system_watchdog( ts );
52144: 2f0a movel %a2,%sp@- <== NOT EXECUTED
52146: 4eba fd9a jsr %pc@(51ee2 <_Timer_server_Reset_interval_system_watchdog>)<== NOT EXECUTED
_Timer_server_Reset_tod_system_watchdog( ts );
5214a: 2f0a movel %a2,%sp@- <== NOT EXECUTED
5214c: 4eba fdf4 jsr %pc@(51f42 <_Timer_server_Reset_tod_system_watchdog>)<== NOT EXECUTED
_Thread_Enable_dispatch();
52150: 4eb9 0005 4eca jsr 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
ts->active = true;
52156: 7201 moveq #1,%d1 <== NOT EXECUTED
52158: 1541 007c moveb %d1,%a2@(124) <== NOT EXECUTED
static void _Timer_server_Stop_interval_system_watchdog(
Timer_server_Control *ts
)
{
_Watchdog_Remove( &ts->Interval_watchdogs.System_watchdog );
5215c: 2f2e ffe4 movel %fp@(-28),%sp@- <== NOT EXECUTED
52160: 4e94 jsr %a4@ <== NOT EXECUTED
static void _Timer_server_Stop_tod_system_watchdog(
Timer_server_Control *ts
)
{
_Watchdog_Remove( &ts->TOD_watchdogs.System_watchdog );
52162: 2f2e ffe0 movel %fp@(-32),%sp@- <== NOT EXECUTED
52166: 4e94 jsr %a4@ <== NOT EXECUTED
52168: 4fef 0018 lea %sp@(24),%sp <== NOT EXECUTED
5216c: 6000 fea8 braw 52016 <_Timer_server_Body+0x70> <== NOT EXECUTED
00051ee2 <_Timer_server_Reset_interval_system_watchdog>:
}
static void _Timer_server_Reset_interval_system_watchdog(
Timer_server_Control *ts
)
{
51ee2: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
51ee6: 2f0a movel %a2,%sp@- <== NOT EXECUTED
51ee8: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
51eec: 2f02 movel %d2,%sp@- <== NOT EXECUTED
static void _Timer_server_Stop_interval_system_watchdog(
Timer_server_Control *ts
)
{
_Watchdog_Remove( &ts->Interval_watchdogs.System_watchdog );
51eee: 240a movel %a2,%d2 <== NOT EXECUTED
51ef0: 5082 addql #8,%d2 <== NOT EXECUTED
51ef2: 2f02 movel %d2,%sp@- <== NOT EXECUTED
51ef4: 4eb9 0005 5fdc jsr 55fdc <_Watchdog_Remove> <== NOT EXECUTED
{
ISR_Level level;
_Timer_server_Stop_interval_system_watchdog( ts );
_ISR_Disable( level );
51efa: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
51f00: 40c1 movew %sr,%d1 <== NOT EXECUTED
51f02: 8081 orl %d1,%d0 <== NOT EXECUTED
51f04: 46c0 movew %d0,%sr <== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
51f06: 200a movel %a2,%d0 <== NOT EXECUTED
51f08: 0680 0000 0034 addil #52,%d0 <== NOT EXECUTED
if ( !_Chain_Is_empty( &ts->Interval_watchdogs.Chain ) ) {
51f0e: 588f addql #4,%sp <== NOT EXECUTED
initialized = false;
}
#endif
return status;
}
51f10: 206a 0030 moveal %a2@(48),%a0 <== NOT EXECUTED
ISR_Level level;
_Timer_server_Stop_interval_system_watchdog( ts );
_ISR_Disable( level );
if ( !_Chain_Is_empty( &ts->Interval_watchdogs.Chain ) ) {
51f14: b088 cmpl %a0,%d0 <== NOT EXECUTED
51f16: 671c beqs 51f34 <_Timer_server_Reset_interval_system_watchdog+0x52><== NOT EXECUTED
Watchdog_Interval delta_interval =
51f18: 2028 0010 movel %a0@(16),%d0 <== NOT EXECUTED
_Watchdog_First( &ts->Interval_watchdogs.Chain )->delta_interval;
_ISR_Enable( level );
51f1c: 46c1 movew %d1,%sr <== NOT EXECUTED
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
51f1e: 2540 0014 movel %d0,%a2@(20) <== NOT EXECUTED
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
51f22: 2f02 movel %d2,%sp@- <== NOT EXECUTED
51f24: 4879 0007 668c pea 7668c <_Watchdog_Ticks_chain> <== NOT EXECUTED
51f2a: 4eb9 0005 5ec0 jsr 55ec0 <_Watchdog_Insert> <== NOT EXECUTED
51f30: 508f addql #8,%sp <== NOT EXECUTED
51f32: 6002 bras 51f36 <_Timer_server_Reset_interval_system_watchdog+0x54><== NOT EXECUTED
_Watchdog_Insert_ticks(
&ts->Interval_watchdogs.System_watchdog,
delta_interval
);
} else {
_ISR_Enable( level );
51f34: 46c1 movew %d1,%sr <== NOT EXECUTED
}
}
51f36: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
51f3a: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
51f3e: 4e5e unlk %fp <== NOT EXECUTED
00051f42 <_Timer_server_Reset_tod_system_watchdog>:
}
static void _Timer_server_Reset_tod_system_watchdog(
Timer_server_Control *ts
)
{
51f42: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
51f46: 2f0a movel %a2,%sp@- <== NOT EXECUTED
51f48: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
51f4c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
static void _Timer_server_Stop_tod_system_watchdog(
Timer_server_Control *ts
)
{
_Watchdog_Remove( &ts->TOD_watchdogs.System_watchdog );
51f4e: 240a movel %a2,%d2 <== NOT EXECUTED
51f50: 0682 0000 0040 addil #64,%d2 <== NOT EXECUTED
51f56: 2f02 movel %d2,%sp@- <== NOT EXECUTED
51f58: 4eb9 0005 5fdc jsr 55fdc <_Watchdog_Remove> <== NOT EXECUTED
{
ISR_Level level;
_Timer_server_Stop_tod_system_watchdog( ts );
_ISR_Disable( level );
51f5e: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
51f64: 40c1 movew %sr,%d1 <== NOT EXECUTED
51f66: 8081 orl %d1,%d0 <== NOT EXECUTED
51f68: 46c0 movew %d0,%sr <== NOT EXECUTED
51f6a: 200a movel %a2,%d0 <== NOT EXECUTED
51f6c: 0680 0000 006c addil #108,%d0 <== NOT EXECUTED
if ( !_Chain_Is_empty( &ts->TOD_watchdogs.Chain ) ) {
51f72: 588f addql #4,%sp <== NOT EXECUTED
initialized = false;
}
#endif
return status;
}
51f74: 206a 0068 moveal %a2@(104),%a0 <== NOT EXECUTED
ISR_Level level;
_Timer_server_Stop_tod_system_watchdog( ts );
_ISR_Disable( level );
if ( !_Chain_Is_empty( &ts->TOD_watchdogs.Chain ) ) {
51f78: b088 cmpl %a0,%d0 <== NOT EXECUTED
51f7a: 671c beqs 51f98 <_Timer_server_Reset_tod_system_watchdog+0x56><== NOT EXECUTED
Watchdog_Interval delta_interval =
51f7c: 2028 0010 movel %a0@(16),%d0 <== NOT EXECUTED
_Watchdog_First( &ts->TOD_watchdogs.Chain )->delta_interval;
_ISR_Enable( level );
51f80: 46c1 movew %d1,%sr <== NOT EXECUTED
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
51f82: 2540 004c movel %d0,%a2@(76) <== NOT EXECUTED
_Watchdog_Insert( &_Watchdog_Seconds_chain, the_watchdog );
51f86: 2f02 movel %d2,%sp@- <== NOT EXECUTED
51f88: 4879 0007 6680 pea 76680 <_Watchdog_Seconds_chain> <== NOT EXECUTED
51f8e: 4eb9 0005 5ec0 jsr 55ec0 <_Watchdog_Insert> <== NOT EXECUTED
51f94: 508f addql #8,%sp <== NOT EXECUTED
51f96: 6002 bras 51f9a <_Timer_server_Reset_tod_system_watchdog+0x58><== NOT EXECUTED
_Watchdog_Insert_seconds(
&ts->TOD_watchdogs.System_watchdog,
delta_interval
);
} else {
_ISR_Enable( level );
51f98: 46c1 movew %d1,%sr <== NOT EXECUTED
}
}
51f9a: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
51f9e: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
51fa2: 4e5e unlk %fp <== NOT EXECUTED
00052170 <_Timer_server_Schedule_operation_method>:
static void _Timer_server_Schedule_operation_method(
Timer_server_Control *ts,
Timer_Control *timer
)
{
52170: 4e56 fff0 linkw %fp,#-16 <== NOT EXECUTED
52174: 48d7 1c04 moveml %d2/%a2-%a4,%sp@ <== NOT EXECUTED
52178: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
5217c: 266e 000c moveal %fp@(12),%a3 <== NOT EXECUTED
if ( ts->insert_chain == NULL ) {
52180: 202a 0078 movel %a2@(120),%d0 <== NOT EXECUTED
52184: 6600 00ea bnew 52270 <_Timer_server_Schedule_operation_method+0x100><== NOT EXECUTED
* is the reference point for the delta chain. Thus if we do not update the
* reference point we have to add DT to the initial delta of the watchdog
* being inserted. This could result in an integer overflow.
*/
_Thread_Disable_dispatch();
52188: 4eba fd42 jsr %pc@(51ecc <_Thread_Disable_dispatch>) <== NOT EXECUTED
if ( timer->the_class == TIMER_INTERVAL_ON_TASK ) {
5218c: 202b 0038 movel %a3@(56),%d0 <== NOT EXECUTED
52190: 7201 moveq #1,%d1 <== NOT EXECUTED
52192: b280 cmpl %d0,%d1 <== NOT EXECUTED
52194: 665c bnes 521f2 <_Timer_server_Schedule_operation_method+0x82><== NOT EXECUTED
/*
* We have to advance the last known ticks value of the server and update
* the watchdog chain accordingly.
*/
_ISR_Disable( level );
52196: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
5219c: 40c2 movew %sr,%d2 <== NOT EXECUTED
5219e: 8082 orl %d2,%d0 <== NOT EXECUTED
521a0: 46c0 movew %d0,%sr <== NOT EXECUTED
snapshot = _Watchdog_Ticks_since_boot;
521a2: 2039 0007 66d6 movel 766d6 <_Watchdog_Ticks_since_boot>,%d0<== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
521a8: 43ea 0034 lea %a2@(52),%a1 <== NOT EXECUTED
last_snapshot = ts->Interval_watchdogs.last_snapshot;
521ac: 222a 003c movel %a2@(60),%d1 <== NOT EXECUTED
initialized = false;
}
#endif
return status;
}
521b0: 206a 0030 moveal %a2@(48),%a0 <== NOT EXECUTED
* the watchdog chain accordingly.
*/
_ISR_Disable( level );
snapshot = _Watchdog_Ticks_since_boot;
last_snapshot = ts->Interval_watchdogs.last_snapshot;
if ( !_Chain_Is_empty( &ts->Interval_watchdogs.Chain ) ) {
521b4: b3c8 cmpal %a0,%a1 <== NOT EXECUTED
521b6: 6716 beqs 521ce <_Timer_server_Schedule_operation_method+0x5e><== NOT EXECUTED
first_watchdog = _Watchdog_First( &ts->Interval_watchdogs.Chain );
/*
* We assume adequate unsigned arithmetic here.
*/
delta = snapshot - last_snapshot;
521b8: 2240 moveal %d0,%a1 <== NOT EXECUTED
521ba: 93c1 subal %d1,%a1 <== NOT EXECUTED
delta_interval = first_watchdog->delta_interval;
521bc: 2228 0010 movel %a0@(16),%d1 <== NOT EXECUTED
if (delta_interval > delta) {
521c0: b3c1 cmpal %d1,%a1 <== NOT EXECUTED
521c2: 6404 bccs 521c8 <_Timer_server_Schedule_operation_method+0x58><== NOT EXECUTED
delta_interval -= delta;
521c4: 9289 subl %a1,%d1 <== NOT EXECUTED
521c6: 6002 bras 521ca <_Timer_server_Schedule_operation_method+0x5a><== NOT EXECUTED
} else {
delta_interval = 0;
521c8: 4281 clrl %d1 <== NOT EXECUTED
}
first_watchdog->delta_interval = delta_interval;
521ca: 2141 0010 movel %d1,%a0@(16) <== NOT EXECUTED
}
ts->Interval_watchdogs.last_snapshot = snapshot;
521ce: 2540 003c movel %d0,%a2@(60) <== NOT EXECUTED
_ISR_Enable( level );
521d2: 46c2 movew %d2,%sr <== NOT EXECUTED
_Watchdog_Insert( &ts->Interval_watchdogs.Chain, &timer->Ticker );
521d4: 486b 0010 pea %a3@(16) <== NOT EXECUTED
521d8: 486a 0030 pea %a2@(48) <== NOT EXECUTED
521dc: 4eb9 0005 5ec0 jsr 55ec0 <_Watchdog_Insert> <== NOT EXECUTED
if ( !ts->active ) {
521e2: 508f addql #8,%sp <== NOT EXECUTED
521e4: 102a 007c moveb %a2@(124),%d0 <== NOT EXECUTED
521e8: 6678 bnes 52262 <_Timer_server_Schedule_operation_method+0xf2><== NOT EXECUTED
_Timer_server_Reset_interval_system_watchdog( ts );
521ea: 2f0a movel %a2,%sp@- <== NOT EXECUTED
521ec: 4eba fcf4 jsr %pc@(51ee2 <_Timer_server_Reset_interval_system_watchdog>)<== NOT EXECUTED
521f0: 606e bras 52260 <_Timer_server_Schedule_operation_method+0xf0><== NOT EXECUTED
}
} else if ( timer->the_class == TIMER_TIME_OF_DAY_ON_TASK ) {
521f2: 7203 moveq #3,%d1 <== NOT EXECUTED
521f4: b280 cmpl %d0,%d1 <== NOT EXECUTED
521f6: 666a bnes 52262 <_Timer_server_Schedule_operation_method+0xf2><== NOT EXECUTED
/*
* We have to advance the last known seconds value of the server and update
* the watchdog chain accordingly.
*/
_ISR_Disable( level );
521f8: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
521fe: 40c2 movew %sr,%d2 <== NOT EXECUTED
52200: 8082 orl %d2,%d0 <== NOT EXECUTED
52202: 46c0 movew %d0,%sr <== NOT EXECUTED
52204: 200a movel %a2,%d0 <== NOT EXECUTED
52206: 0680 0000 006c addil #108,%d0 <== NOT EXECUTED
snapshot = (Watchdog_Interval) _TOD_Seconds_since_epoch();
5220c: 2239 0007 6656 movel 76656 <_TOD_Now>,%d1 <== NOT EXECUTED
last_snapshot = ts->TOD_watchdogs.last_snapshot;
52212: 226a 0074 moveal %a2@(116),%a1 <== NOT EXECUTED
initialized = false;
}
#endif
return status;
}
52216: 206a 0068 moveal %a2@(104),%a0 <== NOT EXECUTED
* the watchdog chain accordingly.
*/
_ISR_Disable( level );
snapshot = (Watchdog_Interval) _TOD_Seconds_since_epoch();
last_snapshot = ts->TOD_watchdogs.last_snapshot;
if ( !_Chain_Is_empty( &ts->TOD_watchdogs.Chain ) ) {
5221a: b088 cmpl %a0,%d0 <== NOT EXECUTED
5221c: 6720 beqs 5223e <_Timer_server_Schedule_operation_method+0xce><== NOT EXECUTED
first_watchdog = _Watchdog_First( &ts->TOD_watchdogs.Chain );
delta_interval = first_watchdog->delta_interval;
5221e: 2028 0010 movel %a0@(16),%d0 <== NOT EXECUTED
if ( snapshot > last_snapshot ) {
52222: b3c1 cmpal %d1,%a1 <== NOT EXECUTED
52224: 640c bccs 52232 <_Timer_server_Schedule_operation_method+0xc2><== NOT EXECUTED
/*
* We advanced in time.
*/
delta = snapshot - last_snapshot;
52226: 2841 moveal %d1,%a4 <== NOT EXECUTED
52228: 99c9 subal %a1,%a4 <== NOT EXECUTED
if (delta_interval > delta) {
5222a: b9c0 cmpal %d0,%a4 <== NOT EXECUTED
5222c: 640a bccs 52238 <_Timer_server_Schedule_operation_method+0xc8><== NOT EXECUTED
delta_interval -= delta;
5222e: 908c subl %a4,%d0 <== NOT EXECUTED
52230: 6008 bras 5223a <_Timer_server_Schedule_operation_method+0xca><== NOT EXECUTED
}
} else {
/*
* Someone put us in the past.
*/
delta = last_snapshot - snapshot;
52232: d089 addl %a1,%d0 <== NOT EXECUTED
delta_interval += delta;
52234: 9081 subl %d1,%d0 <== NOT EXECUTED
52236: 6002 bras 5223a <_Timer_server_Schedule_operation_method+0xca><== NOT EXECUTED
*/
delta = snapshot - last_snapshot;
if (delta_interval > delta) {
delta_interval -= delta;
} else {
delta_interval = 0;
52238: 4280 clrl %d0 <== NOT EXECUTED
* Someone put us in the past.
*/
delta = last_snapshot - snapshot;
delta_interval += delta;
}
first_watchdog->delta_interval = delta_interval;
5223a: 2140 0010 movel %d0,%a0@(16) <== NOT EXECUTED
}
ts->TOD_watchdogs.last_snapshot = snapshot;
5223e: 2541 0074 movel %d1,%a2@(116) <== NOT EXECUTED
_ISR_Enable( level );
52242: 46c2 movew %d2,%sr <== NOT EXECUTED
_Watchdog_Insert( &ts->TOD_watchdogs.Chain, &timer->Ticker );
52244: 486b 0010 pea %a3@(16) <== NOT EXECUTED
52248: 486a 0068 pea %a2@(104) <== NOT EXECUTED
5224c: 4eb9 0005 5ec0 jsr 55ec0 <_Watchdog_Insert> <== NOT EXECUTED
if ( !ts->active ) {
52252: 508f addql #8,%sp <== NOT EXECUTED
52254: 102a 007c moveb %a2@(124),%d0 <== NOT EXECUTED
52258: 6608 bnes 52262 <_Timer_server_Schedule_operation_method+0xf2><== NOT EXECUTED
_Timer_server_Reset_tod_system_watchdog( ts );
5225a: 2f0a movel %a2,%sp@- <== NOT EXECUTED
5225c: 4eba fce4 jsr %pc@(51f42 <_Timer_server_Reset_tod_system_watchdog>)<== NOT EXECUTED
52260: 588f addql #4,%sp <== NOT EXECUTED
* critical section. We have to use the protected chain methods because
* we may be interrupted by a higher priority interrupt.
*/
_Chain_Append( ts->insert_chain, &timer->Object.Node );
}
}
52262: 4cee 1c04 fff0 moveml %fp@(-16),%d2/%a2-%a4 <== NOT EXECUTED
52268: 4e5e unlk %fp <== NOT EXECUTED
if ( !ts->active ) {
_Timer_server_Reset_tod_system_watchdog( ts );
}
}
_Thread_Enable_dispatch();
5226a: 4ef9 0005 4eca jmp 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
* server is not preemptible, so we must be in interrupt context here. No
* thread dispatch will happen until the timer server finishes its
* critical section. We have to use the protected chain methods because
* we may be interrupted by a higher priority interrupt.
*/
_Chain_Append( ts->insert_chain, &timer->Object.Node );
52270: 202a 0078 movel %a2@(120),%d0 <== NOT EXECUTED
52274: 2d4b 000c movel %a3,%fp@(12) <== NOT EXECUTED
}
}
52278: 4cee 1c04 fff0 moveml %fp@(-16),%d2/%a2-%a4 <== NOT EXECUTED
* server is not preemptible, so we must be in interrupt context here. No
* thread dispatch will happen until the timer server finishes its
* critical section. We have to use the protected chain methods because
* we may be interrupted by a higher priority interrupt.
*/
_Chain_Append( ts->insert_chain, &timer->Object.Node );
5227e: 2d40 0008 movel %d0,%fp@(8) <== NOT EXECUTED
}
}
52282: 4e5e unlk %fp <== NOT EXECUTED
* server is not preemptible, so we must be in interrupt context here. No
* thread dispatch will happen until the timer server finishes its
* critical section. We have to use the protected chain methods because
* we may be interrupted by a higher priority interrupt.
*/
_Chain_Append( ts->insert_chain, &timer->Object.Node );
52284: 4ef9 0005 2a48 jmp 52a48 <_Chain_Append> <== NOT EXECUTED
00048234 <_Timespec_Add_to>:
uint32_t _Timespec_Add_to(
struct timespec *time,
const struct timespec *add
)
{
48234: 4e56 0000 linkw %fp,#0
48238: 226e 000c moveal %fp@(12),%a1
4823c: 206e 0008 moveal %fp@(8),%a0
uint32_t seconds = add->tv_sec;
48240: 2011 movel %a1@,%d0
/* Add the basics */
time->tv_sec += add->tv_sec;
48242: d190 addl %d0,%a0@
time->tv_nsec += add->tv_nsec;
48244: 2229 0004 movel %a1@(4),%d1
48248: d3a8 0004 addl %d1,%a0@(4)
/* Now adjust it so nanoseconds is in range */
while ( time->tv_nsec >= TOD_NANOSECONDS_PER_SECOND ) {
4824c: 600e bras 4825c <_Timespec_Add_to+0x28>
time->tv_nsec -= TOD_NANOSECONDS_PER_SECOND;
time->tv_sec++;
4824e: 5290 addql #1,%a0@ <== NOT EXECUTED
time->tv_sec += add->tv_sec;
time->tv_nsec += add->tv_nsec;
/* Now adjust it so nanoseconds is in range */
while ( time->tv_nsec >= TOD_NANOSECONDS_PER_SECOND ) {
time->tv_nsec -= TOD_NANOSECONDS_PER_SECOND;
48250: 0681 c465 3600 addil #-1000000000,%d1 <== NOT EXECUTED
time->tv_sec++;
seconds++;
48256: 5280 addql #1,%d0 <== NOT EXECUTED
time->tv_sec += add->tv_sec;
time->tv_nsec += add->tv_nsec;
/* Now adjust it so nanoseconds is in range */
while ( time->tv_nsec >= TOD_NANOSECONDS_PER_SECOND ) {
time->tv_nsec -= TOD_NANOSECONDS_PER_SECOND;
48258: 2141 0004 movel %d1,%a0@(4) <== NOT EXECUTED
/* Add the basics */
time->tv_sec += add->tv_sec;
time->tv_nsec += add->tv_nsec;
/* Now adjust it so nanoseconds is in range */
while ( time->tv_nsec >= TOD_NANOSECONDS_PER_SECOND ) {
4825c: 2228 0004 movel %a0@(4),%d1
48260: 0c81 3b9a c9ff cmpil #999999999,%d1
48266: 62e6 bhis 4824e <_Timespec_Add_to+0x1a> <== NEVER TAKEN
time->tv_sec++;
seconds++;
}
return seconds;
}
48268: 4e5e unlk %fp <== NOT EXECUTED
0004965c <_Timespec_Divide>:
const struct timespec *lhs,
const struct timespec *rhs,
uint32_t *ival_percentage,
uint32_t *fval_percentage
)
{
4965c: 4e56 ffe0 linkw %fp,#-32 <== NOT EXECUTED
49660: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
49664: 48d7 3c3c moveml %d2-%d5/%a2-%a5,%sp@ <== NOT EXECUTED
/*
* For math simplicity just convert the timespec to nanoseconds
* in a 64-bit integer.
*/
left = lhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND;
49668: 2a10 movel %a0@,%d5 <== NOT EXECUTED
left += lhs->tv_nsec;
right = rhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND;
4966a: 49f9 0005 a164 lea 5a164 <__muldi3>,%a4 <== NOT EXECUTED
/*
* For math simplicity just convert the timespec to nanoseconds
* in a 64-bit integer.
*/
left = lhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND;
left += lhs->tv_nsec;
49670: 2828 0004 movel %a0@(4),%d4 <== NOT EXECUTED
right = rhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND;
49674: 2f3c 3b9a ca00 movel #1000000000,%sp@- <== NOT EXECUTED
const struct timespec *lhs,
const struct timespec *rhs,
uint32_t *ival_percentage,
uint32_t *fval_percentage
)
{
4967a: 2a6e 000c moveal %fp@(12),%a5 <== NOT EXECUTED
* For math simplicity just convert the timespec to nanoseconds
* in a 64-bit integer.
*/
left = lhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND;
left += lhs->tv_nsec;
right = rhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND;
4967e: 42a7 clrl %sp@- <== NOT EXECUTED
const struct timespec *lhs,
const struct timespec *rhs,
uint32_t *ival_percentage,
uint32_t *fval_percentage
)
{
49680: 266e 0010 moveal %fp@(16),%a3 <== NOT EXECUTED
* For math simplicity just convert the timespec to nanoseconds
* in a 64-bit integer.
*/
left = lhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND;
left += lhs->tv_nsec;
right = rhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND;
49684: 2f15 movel %a5@,%sp@- <== NOT EXECUTED
49686: 5bc0 smi %d0 <== NOT EXECUTED
49688: 49c0 extbl %d0 <== NOT EXECUTED
4968a: 2f00 movel %d0,%sp@- <== NOT EXECUTED
const struct timespec *lhs,
const struct timespec *rhs,
uint32_t *ival_percentage,
uint32_t *fval_percentage
)
{
4968c: 246e 0014 moveal %fp@(20),%a2 <== NOT EXECUTED
* For math simplicity just convert the timespec to nanoseconds
* in a 64-bit integer.
*/
left = lhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND;
left += lhs->tv_nsec;
right = rhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND;
49690: 4e94 jsr %a4@ <== NOT EXECUTED
49692: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
49696: 2040 moveal %d0,%a0 <== NOT EXECUTED
49698: 2241 moveal %d1,%a1 <== NOT EXECUTED
right += rhs->tv_nsec;
4969a: 262d 0004 movel %a5@(4),%d3 <== NOT EXECUTED
4969e: 5bc2 smi %d2 <== NOT EXECUTED
496a0: 49c2 extbl %d2 <== NOT EXECUTED
496a2: 2208 movel %a0,%d1 <== NOT EXECUTED
496a4: d689 addl %a1,%d3 <== NOT EXECUTED
496a6: d581 addxl %d1,%d2 <== NOT EXECUTED
if ( right == 0 ) {
496a8: 6606 bnes 496b0 <_Timespec_Divide+0x54> <== NOT EXECUTED
*ival_percentage = 0;
496aa: 4293 clrl %a3@ <== NOT EXECUTED
*fval_percentage = 0;
496ac: 4292 clrl %a2@ <== NOT EXECUTED
return;
496ae: 607a bras 4972a <_Timespec_Divide+0xce> <== NOT EXECUTED
/*
* For math simplicity just convert the timespec to nanoseconds
* in a 64-bit integer.
*/
left = lhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND;
496b0: 2f3c 3b9a ca00 movel #1000000000,%sp@- <== NOT EXECUTED
496b6: 42a7 clrl %sp@- <== NOT EXECUTED
496b8: 2f05 movel %d5,%sp@- <== NOT EXECUTED
496ba: 5bc1 smi %d1 <== NOT EXECUTED
496bc: 49c1 extbl %d1 <== NOT EXECUTED
496be: 2f01 movel %d1,%sp@- <== NOT EXECUTED
left += lhs->tv_nsec;
496c0: 2a04 movel %d4,%d5 <== NOT EXECUTED
496c2: 5bc4 smi %d4 <== NOT EXECUTED
496c4: 49c4 extbl %d4 <== NOT EXECUTED
/*
* For math simplicity just convert the timespec to nanoseconds
* in a 64-bit integer.
*/
left = lhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND;
496c6: 4e94 jsr %a4@ <== NOT EXECUTED
496c8: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
496cc: 2040 moveal %d0,%a0 <== NOT EXECUTED
496ce: 2241 moveal %d1,%a1 <== NOT EXECUTED
* Put it back in the timespec result.
*
* TODO: Rounding on the last digit of the fval.
*/
answer = (left * 100000) / right;
496d0: 2f3c 0001 86a0 movel #100000,%sp@- <== NOT EXECUTED
496d6: 2008 movel %a0,%d0 <== NOT EXECUTED
496d8: 2209 movel %a1,%d1 <== NOT EXECUTED
496da: 42a7 clrl %sp@- <== NOT EXECUTED
496dc: d285 addl %d5,%d1 <== NOT EXECUTED
496de: d184 addxl %d4,%d0 <== NOT EXECUTED
496e0: 2f01 movel %d1,%sp@- <== NOT EXECUTED
496e2: 2f00 movel %d0,%sp@- <== NOT EXECUTED
496e4: 4e94 jsr %a4@ <== NOT EXECUTED
496e6: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
496ea: 49f9 0005 a9b0 lea 5a9b0 <__udivdi3>,%a4 <== NOT EXECUTED
496f0: 2f03 movel %d3,%sp@- <== NOT EXECUTED
496f2: 2f02 movel %d2,%sp@- <== NOT EXECUTED
496f4: 2f01 movel %d1,%sp@- <== NOT EXECUTED
496f6: 2f00 movel %d0,%sp@- <== NOT EXECUTED
496f8: 4e94 jsr %a4@ <== NOT EXECUTED
496fa: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
496fe: 2400 movel %d0,%d2 <== NOT EXECUTED
*ival_percentage = answer / 1000;
49700: 4878 03e8 pea 3e8 <DBL_MANT_DIG+0x3b3> <== NOT EXECUTED
* Put it back in the timespec result.
*
* TODO: Rounding on the last digit of the fval.
*/
answer = (left * 100000) / right;
49704: 2601 movel %d1,%d3 <== NOT EXECUTED
*ival_percentage = answer / 1000;
49706: 42a7 clrl %sp@- <== NOT EXECUTED
49708: 2f01 movel %d1,%sp@- <== NOT EXECUTED
4970a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4970c: 4e94 jsr %a4@ <== NOT EXECUTED
4970e: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
49712: 2681 movel %d1,%a3@ <== NOT EXECUTED
*fval_percentage = answer % 1000;
49714: 4878 03e8 pea 3e8 <DBL_MANT_DIG+0x3b3> <== NOT EXECUTED
49718: 42a7 clrl %sp@- <== NOT EXECUTED
4971a: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4971c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4971e: 4eb9 0005 ad3c jsr 5ad3c <__umoddi3> <== NOT EXECUTED
49724: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
49728: 2481 movel %d1,%a2@ <== NOT EXECUTED
}
4972a: 4cee 3c3c ffe0 moveml %fp@(-32),%d2-%d5/%a2-%a5 <== NOT EXECUTED
49730: 4e5e unlk %fp <== NOT EXECUTED
0004989c <_Timespec_Divide_by_integer>:
void _Timespec_Divide_by_integer(
const struct timespec *time,
uint32_t iterations,
struct timespec *result
)
{
4989c: 4e56 fff0 linkw %fp,#-16 <== NOT EXECUTED
498a0: 48d7 0c0c moveml %d2-%d3/%a2-%a3,%sp@ <== NOT EXECUTED
/*
* For math simplicity just convert the timespec to nanoseconds
* in a 64-bit integer.
*/
t = time->tv_sec;
t *= TOD_NANOSECONDS_PER_SECOND;
498a4: 2f3c 3b9a ca00 movel #1000000000,%sp@- <== NOT EXECUTED
void _Timespec_Divide_by_integer(
const struct timespec *time,
uint32_t iterations,
struct timespec *result
)
{
498aa: 266e 0008 moveal %fp@(8),%a3 <== NOT EXECUTED
/*
* For math simplicity just convert the timespec to nanoseconds
* in a 64-bit integer.
*/
t = time->tv_sec;
t *= TOD_NANOSECONDS_PER_SECOND;
498ae: 42a7 clrl %sp@- <== NOT EXECUTED
void _Timespec_Divide_by_integer(
const struct timespec *time,
uint32_t iterations,
struct timespec *result
)
{
498b0: 246e 0010 moveal %fp@(16),%a2 <== NOT EXECUTED
/*
* For math simplicity just convert the timespec to nanoseconds
* in a 64-bit integer.
*/
t = time->tv_sec;
t *= TOD_NANOSECONDS_PER_SECOND;
498b4: 2f13 movel %a3@,%sp@- <== NOT EXECUTED
498b6: 5bc0 smi %d0 <== NOT EXECUTED
498b8: 49c0 extbl %d0 <== NOT EXECUTED
498ba: 2f00 movel %d0,%sp@- <== NOT EXECUTED
498bc: 4eb9 0005 9e3c jsr 59e3c <__muldi3> <== NOT EXECUTED
498c2: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
498c6: 2040 moveal %d0,%a0 <== NOT EXECUTED
498c8: 2241 moveal %d1,%a1 <== NOT EXECUTED
t += time->tv_nsec;
498ca: 222b 0004 movel %a3@(4),%d1 <== NOT EXECUTED
498ce: 5bc0 smi %d0 <== NOT EXECUTED
498d0: 49c0 extbl %d0 <== NOT EXECUTED
/*
* Divide to get nanoseconds per iteration
*/
t /= iterations;
498d2: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
498d6: 47f9 0005 a688 lea 5a688 <__udivdi3>,%a3 <== NOT EXECUTED
498dc: 2408 movel %a0,%d2 <== NOT EXECUTED
498de: 2609 movel %a1,%d3 <== NOT EXECUTED
498e0: 42a7 clrl %sp@- <== NOT EXECUTED
498e2: d681 addl %d1,%d3 <== NOT EXECUTED
498e4: d580 addxl %d0,%d2 <== NOT EXECUTED
498e6: 2f03 movel %d3,%sp@- <== NOT EXECUTED
498e8: 2f02 movel %d2,%sp@- <== NOT EXECUTED
498ea: 4e93 jsr %a3@ <== NOT EXECUTED
498ec: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
498f0: 2400 movel %d0,%d2 <== NOT EXECUTED
498f2: 2601 movel %d1,%d3 <== NOT EXECUTED
/*
* Put it back in the timespec result
*/
result->tv_sec = t / TOD_NANOSECONDS_PER_SECOND;
498f4: 2f3c 3b9a ca00 movel #1000000000,%sp@- <== NOT EXECUTED
498fa: 42a7 clrl %sp@- <== NOT EXECUTED
498fc: 2f01 movel %d1,%sp@- <== NOT EXECUTED
498fe: 2f02 movel %d2,%sp@- <== NOT EXECUTED
49900: 4e93 jsr %a3@ <== NOT EXECUTED
49902: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
49906: 2481 movel %d1,%a2@ <== NOT EXECUTED
result->tv_nsec = t % TOD_NANOSECONDS_PER_SECOND;
49908: 2f3c 3b9a ca00 movel #1000000000,%sp@- <== NOT EXECUTED
4990e: 42a7 clrl %sp@- <== NOT EXECUTED
49910: 2f03 movel %d3,%sp@- <== NOT EXECUTED
49912: 2f02 movel %d2,%sp@- <== NOT EXECUTED
49914: 4eb9 0005 aa14 jsr 5aa14 <__umoddi3> <== NOT EXECUTED
4991a: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
4991e: 2541 0004 movel %d1,%a2@(4) <== NOT EXECUTED
}
49922: 4cee 0c0c fff0 moveml %fp@(-16),%d2-%d3/%a2-%a3 <== NOT EXECUTED
49928: 4e5e unlk %fp <== NOT EXECUTED
0005ab68 <_Timespec_From_ticks>:
struct timespec *time
)
{
uint32_t usecs;
usecs = ticks * rtems_configuration_get_microseconds_per_tick();
5ab68: 43f9 0005 d0c0 lea 5d0c0 <Configuration+0xc>,%a1 <== NOT EXECUTED
void _Timespec_From_ticks(
uint32_t ticks,
struct timespec *time
)
{
5ab6e: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
uint32_t usecs;
usecs = ticks * rtems_configuration_get_microseconds_per_tick();
5ab72: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
5ab76: 4c11 0800 mulsl %a1@,%d0 <== NOT EXECUTED
void _Timespec_From_ticks(
uint32_t ticks,
struct timespec *time
)
{
5ab7a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
uint32_t usecs;
usecs = ticks * rtems_configuration_get_microseconds_per_tick();
time->tv_sec = usecs / TOD_MICROSECONDS_PER_SECOND;
5ab7c: 243c 000f 4240 movel #1000000,%d2 <== NOT EXECUTED
void _Timespec_From_ticks(
uint32_t ticks,
struct timespec *time
)
{
5ab82: 206e 000c moveal %fp@(12),%a0 <== NOT EXECUTED
uint32_t usecs;
usecs = ticks * rtems_configuration_get_microseconds_per_tick();
time->tv_sec = usecs / TOD_MICROSECONDS_PER_SECOND;
5ab86: 4c42 0001 remul %d2,%d1,%d0 <== NOT EXECUTED
5ab8a: 4c42 0000 remul %d2,%d0,%d0 <== NOT EXECUTED
time->tv_nsec = (usecs % TOD_MICROSECONDS_PER_SECOND) *
TOD_NANOSECONDS_PER_MICROSECOND;
}
5ab8e: 241f movel %sp@+,%d2 <== NOT EXECUTED
5ab90: 4e5e unlk %fp <== NOT EXECUTED
{
uint32_t usecs;
usecs = ticks * rtems_configuration_get_microseconds_per_tick();
time->tv_sec = usecs / TOD_MICROSECONDS_PER_SECOND;
5ab92: 2080 movel %d0,%a0@ <== NOT EXECUTED
time->tv_nsec = (usecs % TOD_MICROSECONDS_PER_SECOND) *
5ab94: 203c 0000 03e8 movel #1000,%d0 <== NOT EXECUTED
5ab9a: 4c01 0800 mulsl %d1,%d0 <== NOT EXECUTED
5ab9e: 2140 0004 movel %d0,%a0@(4) <== NOT EXECUTED
TOD_NANOSECONDS_PER_MICROSECOND;
}
000488e4 <_Timespec_Greater_than>:
bool _Timespec_Greater_than(
const struct timespec *lhs,
const struct timespec *rhs
)
{
488e4: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
488e8: 226e 0008 moveal %fp@(8),%a1 <== NOT EXECUTED
488ec: 206e 000c moveal %fp@(12),%a0 <== NOT EXECUTED
if ( lhs->tv_sec > rhs->tv_sec )
488f0: 2211 movel %a1@,%d1 <== NOT EXECUTED
488f2: 2010 movel %a0@,%d0 <== NOT EXECUTED
488f4: b081 cmpl %d1,%d0 <== NOT EXECUTED
488f6: 6d10 blts 48908 <_Timespec_Greater_than+0x24> <== NOT EXECUTED
return true;
if ( lhs->tv_sec < rhs->tv_sec )
488f8: 6e12 bgts 4890c <_Timespec_Greater_than+0x28> <== NOT EXECUTED
#include <rtems/system.h>
#include <rtems/score/timespec.h>
#include <rtems/score/tod.h>
bool _Timespec_Greater_than(
488fa: 2068 0004 moveal %a0@(4),%a0 <== NOT EXECUTED
488fe: b1e9 0004 cmpal %a1@(4),%a0 <== NOT EXECUTED
48902: 5dc0 slt %d0 <== NOT EXECUTED
48904: 4480 negl %d0 <== NOT EXECUTED
48906: 6006 bras 4890e <_Timespec_Greater_than+0x2a> <== NOT EXECUTED
const struct timespec *lhs,
const struct timespec *rhs
)
{
if ( lhs->tv_sec > rhs->tv_sec )
return true;
48908: 7001 moveq #1,%d0 <== NOT EXECUTED
4890a: 6002 bras 4890e <_Timespec_Greater_than+0x2a> <== NOT EXECUTED
if ( lhs->tv_sec < rhs->tv_sec )
return false;
4890c: 4200 clrb %d0 <== NOT EXECUTED
/* ASSERT: lhs->tv_sec == rhs->tv_sec */
if ( lhs->tv_nsec > rhs->tv_nsec )
return true;
return false;
}
4890e: 4e5e unlk %fp <== NOT EXECUTED
...
0005aba4 <_Timespec_Is_valid>:
#include <rtems/score/tod.h>
bool _Timespec_Is_valid(
const struct timespec *time
)
{
5aba4: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
5aba8: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
if ( !time )
5abac: 4a88 tstl %a0 <== NOT EXECUTED
5abae: 6716 beqs 5abc6 <_Timespec_Is_valid+0x22> <== NOT EXECUTED
return false;
if ( time->tv_sec < 0 )
5abb0: 4a90 tstl %a0@ <== NOT EXECUTED
5abb2: 6d12 blts 5abc6 <_Timespec_Is_valid+0x22> <== NOT EXECUTED
return false;
if ( time->tv_nsec < 0 )
5abb4: 2028 0004 movel %a0@(4),%d0 <== NOT EXECUTED
5abb8: 6d0c blts 5abc6 <_Timespec_Is_valid+0x22> <== NOT EXECUTED
#include <rtems/system.h>
#include <rtems/score/timespec.h>
#include <rtems/score/tod.h>
bool _Timespec_Is_valid(
5abba: 0c80 3b9a c9ff cmpil #999999999,%d0 <== NOT EXECUTED
5abc0: 53c0 sls %d0 <== NOT EXECUTED
5abc2: 4480 negl %d0 <== NOT EXECUTED
5abc4: 6002 bras 5abc8 <_Timespec_Is_valid+0x24> <== NOT EXECUTED
if ( time->tv_sec < 0 )
return false;
if ( time->tv_nsec < 0 )
return false;
5abc6: 4200 clrb %d0 <== NOT EXECUTED
if ( time->tv_nsec >= TOD_NANOSECONDS_PER_SECOND )
return false;
return true;
}
5abc8: 4e5e unlk %fp <== NOT EXECUTED
0004aea4 <_Timespec_Less_than>:
bool _Timespec_Less_than(
const struct timespec *lhs,
const struct timespec *rhs
)
{
4aea4: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4aea8: 226e 0008 moveal %fp@(8),%a1 <== NOT EXECUTED
4aeac: 206e 000c moveal %fp@(12),%a0 <== NOT EXECUTED
if ( lhs->tv_sec < rhs->tv_sec )
4aeb0: 2211 movel %a1@,%d1 <== NOT EXECUTED
4aeb2: 2010 movel %a0@,%d0 <== NOT EXECUTED
4aeb4: b081 cmpl %d1,%d0 <== NOT EXECUTED
4aeb6: 6e10 bgts 4aec8 <_Timespec_Less_than+0x24> <== NOT EXECUTED
return true;
if ( lhs->tv_sec > rhs->tv_sec )
4aeb8: 6d12 blts 4aecc <_Timespec_Less_than+0x28> <== NOT EXECUTED
#include <rtems/system.h>
#include <rtems/score/timespec.h>
#include <rtems/score/tod.h>
bool _Timespec_Less_than(
4aeba: 2068 0004 moveal %a0@(4),%a0 <== NOT EXECUTED
4aebe: b1e9 0004 cmpal %a1@(4),%a0 <== NOT EXECUTED
4aec2: 5ec0 sgt %d0 <== NOT EXECUTED
4aec4: 4480 negl %d0 <== NOT EXECUTED
4aec6: 6006 bras 4aece <_Timespec_Less_than+0x2a> <== NOT EXECUTED
const struct timespec *lhs,
const struct timespec *rhs
)
{
if ( lhs->tv_sec < rhs->tv_sec )
return true;
4aec8: 7001 moveq #1,%d0 <== NOT EXECUTED
4aeca: 6002 bras 4aece <_Timespec_Less_than+0x2a> <== NOT EXECUTED
if ( lhs->tv_sec > rhs->tv_sec )
return false;
4aecc: 4200 clrb %d0 <== NOT EXECUTED
/* ASSERT: lhs->tv_sec == rhs->tv_sec */
if ( lhs->tv_nsec < rhs->tv_nsec )
return true;
return false;
}
4aece: 4e5e unlk %fp <== NOT EXECUTED
...
0004826c <_Timespec_Subtract>:
void _Timespec_Subtract(
const struct timespec *start,
const struct timespec *end,
struct timespec *result
)
{
4826c: 4e56 0000 linkw %fp,#0
48270: 226e 0008 moveal %fp@(8),%a1
48274: 2f0a movel %a2,%sp@-
48276: 246e 000c moveal %fp@(12),%a2
4827a: 206e 0010 moveal %fp@(16),%a0
if (end->tv_nsec < start->tv_nsec) {
4827e: 222a 0004 movel %a2@(4),%d1
48282: 2029 0004 movel %a1@(4),%d0
void _Timespec_Subtract(
const struct timespec *start,
const struct timespec *end,
struct timespec *result
)
{
48286: 2f02 movel %d2,%sp@-
if (end->tv_nsec < start->tv_nsec) {
48288: b081 cmpl %d1,%d0
4828a: 6f10 bles 4829c <_Timespec_Subtract+0x30> <== ALWAYS TAKEN
result->tv_sec = end->tv_sec - start->tv_sec - 1;
4828c: 2452 moveal %a2@,%a2 <== NOT EXECUTED
4828e: 538a subql #1,%a2 <== NOT EXECUTED
48290: 95d1 subal %a1@,%a2 <== NOT EXECUTED
result->tv_nsec =
(TOD_NANOSECONDS_PER_SECOND - start->tv_nsec) + end->tv_nsec;
48292: 0681 3b9a ca00 addil #1000000000,%d1 <== NOT EXECUTED
struct timespec *result
)
{
if (end->tv_nsec < start->tv_nsec) {
result->tv_sec = end->tv_sec - start->tv_sec - 1;
48298: 208a movel %a2,%a0@ <== NOT EXECUTED
4829a: 6006 bras 482a2 <_Timespec_Subtract+0x36> <== NOT EXECUTED
result->tv_nsec =
(TOD_NANOSECONDS_PER_SECOND - start->tv_nsec) + end->tv_nsec;
} else {
result->tv_sec = end->tv_sec - start->tv_sec;
4829c: 2412 movel %a2@,%d2
4829e: 9491 subl %a1@,%d2
482a0: 2082 movel %d2,%a0@
result->tv_nsec = end->tv_nsec - start->tv_nsec;
}
}
482a2: 241f movel %sp@+,%d2
result->tv_sec = end->tv_sec - start->tv_sec - 1;
result->tv_nsec =
(TOD_NANOSECONDS_PER_SECOND - start->tv_nsec) + end->tv_nsec;
} else {
result->tv_sec = end->tv_sec - start->tv_sec;
result->tv_nsec = end->tv_nsec - start->tv_nsec;
482a4: 9280 subl %d0,%d1
}
}
482a6: 245f moveal %sp@+,%a2
482a8: 4e5e unlk %fp
result->tv_sec = end->tv_sec - start->tv_sec - 1;
result->tv_nsec =
(TOD_NANOSECONDS_PER_SECOND - start->tv_nsec) + end->tv_nsec;
} else {
result->tv_sec = end->tv_sec - start->tv_sec;
result->tv_nsec = end->tv_nsec - start->tv_nsec;
482aa: 2141 0004 movel %d1,%a0@(4)
}
}
0004b20c <_Timespec_To_ticks>:
*/
uint32_t _Timespec_To_ticks(
const struct timespec *time
)
{
4b20c: 4e56 fff4 linkw %fp,#-12 <== NOT EXECUTED
4b210: 48d7 040c moveml %d2-%d3/%a2,%sp@ <== NOT EXECUTED
4b214: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
uint32_t ticks;
if ( (time->tv_sec == 0) && (time->tv_nsec == 0) )
4b218: 2412 movel %a2@,%d2 <== NOT EXECUTED
4b21a: 6606 bnes 4b222 <_Timespec_To_ticks+0x16> <== NOT EXECUTED
4b21c: 4aaa 0004 tstl %a2@(4) <== NOT EXECUTED
4b220: 672c beqs 4b24e <_Timespec_To_ticks+0x42> <== NOT EXECUTED
return 0;
ticks = time->tv_sec * TOD_TICKS_PER_SECOND;
4b222: 4eb9 0004 c754 jsr 4c754 <TOD_TICKS_PER_SECOND_method> <== NOT EXECUTED
ticks += time->tv_nsec / rtems_configuration_get_nanoseconds_per_tick();
4b228: 2239 0005 c260 movel 5c260 <Configuration+0xc>,%d1 <== NOT EXECUTED
uint32_t ticks;
if ( (time->tv_sec == 0) && (time->tv_nsec == 0) )
return 0;
ticks = time->tv_sec * TOD_TICKS_PER_SECOND;
4b22e: 4c02 0800 mulsl %d2,%d0 <== NOT EXECUTED
ticks += time->tv_nsec / rtems_configuration_get_nanoseconds_per_tick();
4b232: 243c 0000 03e8 movel #1000,%d2 <== NOT EXECUTED
4b238: 4c02 1800 mulsl %d2,%d1 <== NOT EXECUTED
4b23c: 262a 0004 movel %a2@(4),%d3 <== NOT EXECUTED
4b240: 4c41 3003 remul %d1,%d3,%d3 <== NOT EXECUTED
4b244: d083 addl %d3,%d0 <== NOT EXECUTED
if (ticks)
4b246: 6608 bnes 4b250 <_Timespec_To_ticks+0x44> <== NOT EXECUTED
return ticks;
return 1;
4b248: 103c 0001 moveb #1,%d0 <== NOT EXECUTED
4b24c: 6002 bras 4b250 <_Timespec_To_ticks+0x44> <== NOT EXECUTED
)
{
uint32_t ticks;
if ( (time->tv_sec == 0) && (time->tv_nsec == 0) )
return 0;
4b24e: 4280 clrl %d0 <== NOT EXECUTED
if (ticks)
return ticks;
return 1;
}
4b250: 4cee 040c fff4 moveml %fp@(-12),%d2-%d3/%a2 <== NOT EXECUTED
4b256: 4e5e unlk %fp <== NOT EXECUTED
...
000483d6 <_User_extensions_Fatal>:
void _User_extensions_Fatal (
Internal_errors_Source the_source,
bool is_internal,
Internal_errors_t the_error
)
{
483d6: 4e56 fff0 linkw %fp,#-16
483da: 48d7 041c moveml %d2-%d4/%a2,%sp@
the_node = the_node->previous ) {
the_extension = (User_extensions_Control *) the_node;
if ( the_extension->Callouts.fatal != NULL )
(*the_extension->Callouts.fatal)( the_source, is_internal, the_error );
483de: 4282 clrl %d2
483e0: 142e 000f moveb %fp@(15),%d2
void _User_extensions_Fatal (
Internal_errors_Source the_source,
bool is_internal,
Internal_errors_t the_error
)
{
483e4: 282e 0008 movel %fp@(8),%d4
483e8: 262e 0010 movel %fp@(16),%d3
the_extension = (User_extensions_Control *) the_node;
if ( the_extension->Callouts.fatal != NULL )
(*the_extension->Callouts.fatal)( the_source, is_internal, the_error );
}
}
483ec: 2479 0005 dc84 moveal 5dc84 <_User_extensions_List+0x8>,%a2
)
{
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _Chain_Last( &_User_extensions_List );
483f2: 6018 bras 4840c <_User_extensions_Fatal+0x36>
!_Chain_Is_head( &_User_extensions_List, the_node ) ;
the_node = the_node->previous ) {
the_extension = (User_extensions_Control *) the_node;
if ( the_extension->Callouts.fatal != NULL )
483f4: 206a 0030 moveal %a2@(48),%a0
483f8: 4a88 tstl %a0
483fa: 670c beqs 48408 <_User_extensions_Fatal+0x32>
(*the_extension->Callouts.fatal)( the_source, is_internal, the_error );
483fc: 2f03 movel %d3,%sp@-
483fe: 2f02 movel %d2,%sp@-
48400: 2f04 movel %d4,%sp@-
48402: 4e90 jsr %a0@
48404: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _Chain_Last( &_User_extensions_List );
!_Chain_Is_head( &_User_extensions_List, the_node ) ;
the_node = the_node->previous ) {
48408: 246a 0004 moveal %a2@(4),%a2
)
{
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _Chain_Last( &_User_extensions_List );
4840c: b5fc 0005 dc7c cmpal #384124,%a2
48412: 66e0 bnes 483f4 <_User_extensions_Fatal+0x1e> <== ALWAYS TAKEN
the_extension = (User_extensions_Control *) the_node;
if ( the_extension->Callouts.fatal != NULL )
(*the_extension->Callouts.fatal)( the_source, is_internal, the_error );
}
}
48414: 4cee 041c fff0 moveml %fp@(-16),%d2-%d4/%a2 <== NOT EXECUTED
4841a: 4e5e unlk %fp <== NOT EXECUTED
...
000482b0 <_User_extensions_Handler_initialization>:
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <string.h>
void _User_extensions_Handler_initialization(void)
{
482b0: 4e56 ffe8 linkw %fp,#-24
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
482b4: 203c 0005 dc80 movel #384128,%d0
482ba: 23c0 0005 dc7c movel %d0,5dc7c <_User_extensions_List>
head->previous = NULL;
tail->previous = head;
482c0: 203c 0005 dc7c movel #384124,%d0
482c6: 23c0 0005 dc84 movel %d0,5dc84 <_User_extensions_List+0x8>
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
482cc: 203c 0005 db10 movel #383760,%d0
482d2: 23c0 0005 db0c movel %d0,5db0c <_User_extensions_Switches_list>
head->previous = NULL;
tail->previous = head;
482d8: 203c 0005 db0c movel #383756,%d0
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
head->previous = NULL;
482de: 42b9 0005 dc80 clrl 5dc80 <_User_extensions_List+0x4>
482e4: 48d7 1c1c moveml %d2-%d4/%a2-%a4,%sp@
User_extensions_Control *extension;
uint32_t i;
uint32_t number_of_extensions;
User_extensions_Table *initial_extensions;
number_of_extensions = Configuration.number_of_initial_extensions;
482e8: 2839 0005 c28e movel 5c28e <Configuration+0x3a>,%d4
initial_extensions = Configuration.User_extension_table;
482ee: 2639 0005 c292 movel 5c292 <Configuration+0x3e>,%d3
482f4: 42b9 0005 db10 clrl 5db10 <_User_extensions_Switches_list+0x4>
tail->previous = head;
482fa: 23c0 0005 db14 movel %d0,5db14 <_User_extensions_Switches_list+0x8>
_Chain_Initialize_empty( &_User_extensions_List );
_Chain_Initialize_empty( &_User_extensions_Switches_list );
if ( initial_extensions ) {
48300: 4a83 tstl %d3
48302: 6754 beqs 48358 <_User_extensions_Handler_initialization+0xa8><== NEVER TAKEN
extension = (User_extensions_Control *)
_Workspace_Allocate_or_fatal_error(
48304: 7434 moveq #52,%d2
48306: 4c04 2800 mulsl %d4,%d2
RTEMS_INLINE_ROUTINE void _User_extensions_Add_set_with_table(
User_extensions_Control *extension,
const User_extensions_Table *extension_table
)
{
extension->Callouts = *extension_table;
4830a: 49f9 0004 d200 lea 4d200 <memcpy>,%a4
_User_extensions_Add_set( extension );
48310: 47f9 0004 b25c lea 4b25c <_User_extensions_Add_set>,%a3
48316: 2f02 movel %d2,%sp@-
48318: 4eb9 0004 87c8 jsr 487c8 <_Workspace_Allocate_or_fatal_error>
4831e: 2440 moveal %d0,%a2
number_of_extensions * sizeof( User_extensions_Control )
);
memset (
48320: 2f02 movel %d2,%sp@-
extension,
0,
number_of_extensions * sizeof( User_extensions_Control )
);
for ( i = 0 ; i < number_of_extensions ; i++ ) {
48322: 4282 clrl %d2
extension = (User_extensions_Control *)
_Workspace_Allocate_or_fatal_error(
number_of_extensions * sizeof( User_extensions_Control )
);
memset (
48324: 42a7 clrl %sp@-
48326: 2f00 movel %d0,%sp@-
48328: 4eb9 0004 d270 jsr 4d270 <memset>
extension,
0,
number_of_extensions * sizeof( User_extensions_Control )
);
for ( i = 0 ; i < number_of_extensions ; i++ ) {
4832e: 4fef 0010 lea %sp@(16),%sp
48332: 6020 bras 48354 <_User_extensions_Handler_initialization+0xa4>
RTEMS_INLINE_ROUTINE void _User_extensions_Add_set_with_table(
User_extensions_Control *extension,
const User_extensions_Table *extension_table
)
{
extension->Callouts = *extension_table;
48334: 4878 0020 pea 20 <OPER2+0xc>
48338: 5282 addql #1,%d2
4833a: 2f03 movel %d3,%sp@-
4833c: 486a 0014 pea %a2@(20)
48340: 0683 0000 0020 addil #32,%d3
48346: 4e94 jsr %a4@
_User_extensions_Add_set( extension );
48348: 2f0a movel %a2,%sp@-
_User_extensions_Add_set_with_table (extension, &initial_extensions[i]);
extension++;
4834a: 45ea 0034 lea %a2@(52),%a2
4834e: 4e93 jsr %a3@
extension,
0,
number_of_extensions * sizeof( User_extensions_Control )
);
for ( i = 0 ; i < number_of_extensions ; i++ ) {
48350: 4fef 0010 lea %sp@(16),%sp
48354: b882 cmpl %d2,%d4
48356: 62dc bhis 48334 <_User_extensions_Handler_initialization+0x84>
_User_extensions_Add_set_with_table (extension, &initial_extensions[i]);
extension++;
}
}
}
48358: 4cee 1c1c ffe8 moveml %fp@(-24),%d2-%d4/%a2-%a4
4835e: 4e5e unlk %fp
...
00049444 <_User_extensions_Remove_set>:
#include <rtems/score/userext.h>
void _User_extensions_Remove_set (
User_extensions_Control *the_extension
)
{
49444: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
49448: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4944a: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
_Chain_Extract( &the_extension->Node );
4944e: 2f0a movel %a2,%sp@- <== NOT EXECUTED
49450: 4eb9 0004 7050 jsr 47050 <_Chain_Extract> <== NOT EXECUTED
/*
* If a switch handler is present, remove it.
*/
if ( the_extension->Callouts.thread_switch != NULL )
49456: 588f addql #4,%sp <== NOT EXECUTED
49458: 4aaa 0024 tstl %a2@(36) <== NOT EXECUTED
4945c: 6712 beqs 49470 <_User_extensions_Remove_set+0x2c><== NOT EXECUTED
_Chain_Extract( &the_extension->Switch.Node );
4945e: 508a addql #8,%a2 <== NOT EXECUTED
49460: 2d4a 0008 movel %a2,%fp@(8) <== NOT EXECUTED
}
49464: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
49468: 4e5e unlk %fp <== NOT EXECUTED
/*
* If a switch handler is present, remove it.
*/
if ( the_extension->Callouts.thread_switch != NULL )
_Chain_Extract( &the_extension->Switch.Node );
4946a: 4ef9 0004 7050 jmp 47050 <_Chain_Extract> <== NOT EXECUTED
}
49470: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
49474: 4e5e unlk %fp <== NOT EXECUTED
00048420 <_User_extensions_Thread_create>:
#include <rtems/score/userext.h>
bool _User_extensions_Thread_create (
Thread_Control *the_thread
)
{
48420: 4e56 0000 linkw %fp,#0
48424: 2f0a movel %a2,%sp@-
return false;
}
}
return true;
}
48426: 2479 0005 dc7c moveal 5dc7c <_User_extensions_List>,%a2
#include <rtems/score/userext.h>
bool _User_extensions_Thread_create (
Thread_Control *the_thread
)
{
4842c: 2f02 movel %d2,%sp@-
4842e: 242e 0008 movel %fp@(8),%d2
Chain_Node *the_node;
User_extensions_Control *the_extension;
bool status;
for ( the_node = _Chain_First( &_User_extensions_List );
48432: 601a bras 4844e <_User_extensions_Thread_create+0x2e>
!_Chain_Is_tail( &_User_extensions_List, the_node ) ;
the_node = the_node->next ) {
the_extension = (User_extensions_Control *) the_node;
if ( the_extension->Callouts.thread_create != NULL ) {
48434: 206a 0014 moveal %a2@(20),%a0
48438: 4a88 tstl %a0
4843a: 6710 beqs 4844c <_User_extensions_Thread_create+0x2c>
status = (*the_extension->Callouts.thread_create)(
4843c: 2f02 movel %d2,%sp@-
4843e: 2f39 0005 df96 movel 5df96 <_Per_CPU_Information+0xc>,%sp@-
48444: 4e90 jsr %a0@
_Thread_Executing,
the_thread
);
if ( !status )
48446: 508f addql #8,%sp
48448: 4a00 tstb %d0
4844a: 670e beqs 4845a <_User_extensions_Thread_create+0x3a><== NEVER TAKEN
User_extensions_Control *the_extension;
bool status;
for ( the_node = _Chain_First( &_User_extensions_List );
!_Chain_Is_tail( &_User_extensions_List, the_node ) ;
the_node = the_node->next ) {
4844c: 2452 moveal %a2@,%a2
{
Chain_Node *the_node;
User_extensions_Control *the_extension;
bool status;
for ( the_node = _Chain_First( &_User_extensions_List );
4844e: b5fc 0005 dc80 cmpal #384128,%a2
48454: 66de bnes 48434 <_User_extensions_Thread_create+0x14>
if ( !status )
return false;
}
}
return true;
48456: 7001 moveq #1,%d0
48458: 6002 bras 4845c <_User_extensions_Thread_create+0x3c>
status = (*the_extension->Callouts.thread_create)(
_Thread_Executing,
the_thread
);
if ( !status )
return false;
4845a: 4200 clrb %d0 <== NOT EXECUTED
}
}
return true;
}
4845c: 242e fff8 movel %fp@(-8),%d2
48460: 246e fffc moveal %fp@(-4),%a2
48464: 4e5e unlk %fp <== NOT EXECUTED
00048468 <_User_extensions_Thread_delete>:
#include <rtems/score/userext.h>
void _User_extensions_Thread_delete (
Thread_Control *the_thread
)
{
48468: 4e56 0000 linkw %fp,#0
4846c: 2f0a movel %a2,%sp@-
(*the_extension->Callouts.thread_delete)(
_Thread_Executing,
the_thread
);
}
}
4846e: 2479 0005 dc84 moveal 5dc84 <_User_extensions_List+0x8>,%a2
#include <rtems/score/userext.h>
void _User_extensions_Thread_delete (
Thread_Control *the_thread
)
{
48474: 2f02 movel %d2,%sp@-
48476: 242e 0008 movel %fp@(8),%d2
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _Chain_Last( &_User_extensions_List );
4847a: 6018 bras 48494 <_User_extensions_Thread_delete+0x2c>
!_Chain_Is_head( &_User_extensions_List, the_node ) ;
the_node = the_node->previous ) {
the_extension = (User_extensions_Control *) the_node;
if ( the_extension->Callouts.thread_delete != NULL )
4847c: 206a 0020 moveal %a2@(32),%a0
48480: 4a88 tstl %a0
48482: 670c beqs 48490 <_User_extensions_Thread_delete+0x28><== NEVER TAKEN
(*the_extension->Callouts.thread_delete)(
48484: 2f02 movel %d2,%sp@-
48486: 2f39 0005 df96 movel 5df96 <_Per_CPU_Information+0xc>,%sp@-
4848c: 4e90 jsr %a0@
4848e: 508f addql #8,%sp
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _Chain_Last( &_User_extensions_List );
!_Chain_Is_head( &_User_extensions_List, the_node ) ;
the_node = the_node->previous ) {
48490: 246a 0004 moveal %a2@(4),%a2
)
{
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _Chain_Last( &_User_extensions_List );
48494: b5fc 0005 dc7c cmpal #384124,%a2
4849a: 66e0 bnes 4847c <_User_extensions_Thread_delete+0x14>
(*the_extension->Callouts.thread_delete)(
_Thread_Executing,
the_thread
);
}
}
4849c: 242e fff8 movel %fp@(-8),%d2
484a0: 246e fffc moveal %fp@(-4),%a2
484a4: 4e5e unlk %fp <== NOT EXECUTED
00048ce4 <_User_extensions_Thread_restart>:
#include <rtems/score/userext.h>
void _User_extensions_Thread_restart (
Thread_Control *the_thread
)
{
48ce4: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
48ce8: 2f0a movel %a2,%sp@- <== NOT EXECUTED
(*the_extension->Callouts.thread_restart)(
_Thread_Executing,
the_thread
);
}
}
48cea: 2479 0005 e7a4 moveal 5e7a4 <_User_extensions_List>,%a2 <== NOT EXECUTED
#include <rtems/score/userext.h>
void _User_extensions_Thread_restart (
Thread_Control *the_thread
)
{
48cf0: 2f02 movel %d2,%sp@- <== NOT EXECUTED
48cf2: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _Chain_First( &_User_extensions_List );
48cf6: 6016 bras 48d0e <_User_extensions_Thread_restart+0x2a><== NOT EXECUTED
!_Chain_Is_tail( &_User_extensions_List, the_node ) ;
the_node = the_node->next ) {
the_extension = (User_extensions_Control *) the_node;
if ( the_extension->Callouts.thread_restart != NULL )
48cf8: 206a 001c moveal %a2@(28),%a0 <== NOT EXECUTED
48cfc: 4a88 tstl %a0 <== NOT EXECUTED
48cfe: 670c beqs 48d0c <_User_extensions_Thread_restart+0x28><== NOT EXECUTED
(*the_extension->Callouts.thread_restart)(
48d00: 2f02 movel %d2,%sp@- <== NOT EXECUTED
48d02: 2f39 0005 eabe movel 5eabe <_Per_CPU_Information+0xc>,%sp@-<== NOT EXECUTED
48d08: 4e90 jsr %a0@ <== NOT EXECUTED
48d0a: 508f addql #8,%sp <== NOT EXECUTED
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _Chain_First( &_User_extensions_List );
!_Chain_Is_tail( &_User_extensions_List, the_node ) ;
the_node = the_node->next ) {
48d0c: 2452 moveal %a2@,%a2 <== NOT EXECUTED
)
{
Chain_Node *the_node;
User_extensions_Control *the_extension;
for ( the_node = _Chain_First( &_User_extensions_List );
48d0e: b5fc 0005 e7a8 cmpal #386984,%a2 <== NOT EXECUTED
48d14: 66e2 bnes 48cf8 <_User_extensions_Thread_restart+0x14><== NOT EXECUTED
(*the_extension->Callouts.thread_restart)(
_Thread_Executing,
the_thread
);
}
}
48d16: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
48d1a: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
48d1e: 4e5e unlk %fp <== NOT EXECUTED
...
00049a2c <_Watchdog_Adjust>:
Watchdog_Interval units
)
{
ISR_Level level;
_ISR_Disable( level );
49a2c: 327c 0700 moveaw #1792,%a1 <== NOT EXECUTED
49a30: 2209 movel %a1,%d1 <== NOT EXECUTED
void _Watchdog_Adjust(
Chain_Control *header,
Watchdog_Adjust_directions direction,
Watchdog_Interval units
)
{
49a32: 4e56 ffe8 linkw %fp,#-24 <== NOT EXECUTED
49a36: 48d7 1c1c moveml %d2-%d4/%a2-%a4,%sp@ <== NOT EXECUTED
49a3a: 266e 0008 moveal %fp@(8),%a3 <== NOT EXECUTED
49a3e: 262e 000c movel %fp@(12),%d3 <== NOT EXECUTED
49a42: 242e 0010 movel %fp@(16),%d2 <== NOT EXECUTED
ISR_Level level;
_ISR_Disable( level );
49a46: 40c0 movew %sr,%d0 <== NOT EXECUTED
49a48: 8280 orl %d0,%d1 <== NOT EXECUTED
49a4a: 46c1 movew %d1,%sr <== NOT EXECUTED
}
}
_ISR_Enable( level );
}
49a4c: 244b moveal %a3,%a2 <== NOT EXECUTED
49a4e: 205a moveal %a2@+,%a0 <== NOT EXECUTED
* hence the compiler must not assume *header to remain
* unmodified across that call.
*
* Till Straumann, 7/2003
*/
if ( !_Chain_Is_empty( header ) ) {
49a50: b5c8 cmpal %a0,%a2 <== NOT EXECUTED
49a52: 674c beqs 49aa0 <_Watchdog_Adjust+0x74> <== NOT EXECUTED
switch ( direction ) {
49a54: 4a83 tstl %d3 <== NOT EXECUTED
49a56: 673c beqs 49a94 <_Watchdog_Adjust+0x68> <== NOT EXECUTED
49a58: 7201 moveq #1,%d1 <== NOT EXECUTED
49a5a: b283 cmpl %d3,%d1 <== NOT EXECUTED
49a5c: 6642 bnes 49aa0 <_Watchdog_Adjust+0x74> <== NOT EXECUTED
case WATCHDOG_BACKWARD:
_Watchdog_First( header )->delta_interval += units;
49a5e: d5a8 0010 addl %d2,%a0@(16) <== NOT EXECUTED
break;
49a62: 603c bras 49aa0 <_Watchdog_Adjust+0x74> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE Watchdog_Control *_Watchdog_First(
Chain_Control *header
)
{
return ( (Watchdog_Control *) _Chain_First( header ) );
49a64: 2053 moveal %a3@,%a0 <== NOT EXECUTED
case WATCHDOG_FORWARD:
while ( units ) {
if ( units < _Watchdog_First( header )->delta_interval ) {
49a66: 2628 0010 movel %a0@(16),%d3 <== NOT EXECUTED
49a6a: b682 cmpl %d2,%d3 <== NOT EXECUTED
49a6c: 6308 blss 49a76 <_Watchdog_Adjust+0x4a> <== NOT EXECUTED
_Watchdog_First( header )->delta_interval -= units;
49a6e: 9682 subl %d2,%d3 <== NOT EXECUTED
49a70: 2143 0010 movel %d3,%a0@(16) <== NOT EXECUTED
break;
49a74: 602a bras 49aa0 <_Watchdog_Adjust+0x74> <== NOT EXECUTED
} else {
units -= _Watchdog_First( header )->delta_interval;
_Watchdog_First( header )->delta_interval = 1;
49a76: 7201 moveq #1,%d1 <== NOT EXECUTED
49a78: 2141 0010 movel %d1,%a0@(16) <== NOT EXECUTED
_ISR_Enable( level );
49a7c: 46c0 movew %d0,%sr <== NOT EXECUTED
_Watchdog_Tickle( header );
49a7e: 2f0b movel %a3,%sp@- <== NOT EXECUTED
49a80: 4e94 jsr %a4@ <== NOT EXECUTED
_ISR_Disable( level );
49a82: 2204 movel %d4,%d1 <== NOT EXECUTED
49a84: 40c0 movew %sr,%d0 <== NOT EXECUTED
49a86: 8280 orl %d0,%d1 <== NOT EXECUTED
49a88: 46c1 movew %d1,%sr <== NOT EXECUTED
if ( _Chain_Is_empty( header ) )
49a8a: 588f addql #4,%sp <== NOT EXECUTED
49a8c: b5d3 cmpal %a3@,%a2 <== NOT EXECUTED
49a8e: 6710 beqs 49aa0 <_Watchdog_Adjust+0x74> <== NOT EXECUTED
while ( units ) {
if ( units < _Watchdog_First( header )->delta_interval ) {
_Watchdog_First( header )->delta_interval -= units;
break;
} else {
units -= _Watchdog_First( header )->delta_interval;
49a90: 9483 subl %d3,%d2 <== NOT EXECUTED
49a92: 6008 bras 49a9c <_Watchdog_Adjust+0x70> <== NOT EXECUTED
_Watchdog_First( header )->delta_interval = 1;
_ISR_Enable( level );
_Watchdog_Tickle( header );
49a94: 49f9 0004 9c44 lea 49c44 <_Watchdog_Tickle>,%a4 <== NOT EXECUTED
_ISR_Disable( level );
49a9a: 2809 movel %a1,%d4 <== NOT EXECUTED
switch ( direction ) {
case WATCHDOG_BACKWARD:
_Watchdog_First( header )->delta_interval += units;
break;
case WATCHDOG_FORWARD:
while ( units ) {
49a9c: 4a82 tstl %d2 <== NOT EXECUTED
49a9e: 66c4 bnes 49a64 <_Watchdog_Adjust+0x38> <== NOT EXECUTED
}
break;
}
}
_ISR_Enable( level );
49aa0: 46c0 movew %d0,%sr <== NOT EXECUTED
}
49aa2: 4cee 1c1c ffe8 moveml %fp@(-24),%d2-%d4/%a2-%a4 <== NOT EXECUTED
49aa8: 4e5e unlk %fp <== NOT EXECUTED
00055e30 <_Watchdog_Adjust_to_chain>:
Chain_Control *header,
Watchdog_Interval units_arg,
Chain_Control *to_fire
)
{
55e30: 4e56 ffe8 linkw %fp,#-24 <== NOT EXECUTED
55e34: 202e 000c movel %fp@(12),%d0 <== NOT EXECUTED
55e38: 48d7 1c1c moveml %d2-%d4/%a2-%a4,%sp@ <== NOT EXECUTED
55e3c: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
55e40: 266e 0010 moveal %fp@(16),%a3 <== NOT EXECUTED
Watchdog_Interval units = units_arg;
ISR_Level level;
Watchdog_Control *first;
if ( units <= 0 ) {
55e44: 4a80 tstl %d0 <== NOT EXECUTED
55e46: 6770 beqs 55eb8 <_Watchdog_Adjust_to_chain+0x88> <== NOT EXECUTED
return;
}
_ISR_Disable( level );
55e48: 307c 0700 moveaw #1792,%a0 <== NOT EXECUTED
55e4c: 2208 movel %a0,%d1 <== NOT EXECUTED
55e4e: 40c2 movew %sr,%d2 <== NOT EXECUTED
55e50: 8282 orl %d2,%d1 <== NOT EXECUTED
55e52: 46c1 movew %d1,%sr <== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
55e54: 260a movel %a2,%d3 <== NOT EXECUTED
55e56: 5883 addql #4,%d3 <== NOT EXECUTED
while ( 1 ) {
_Chain_Extract_unprotected( &first->Node );
_Chain_Append_unprotected( to_fire, &first->Node );
_ISR_Flash( level );
55e58: 2808 movel %a0,%d4 <== NOT EXECUTED
55e5a: 6004 bras 55e60 <_Watchdog_Adjust_to_chain+0x30> <== NOT EXECUTED
}
_ISR_Disable( level );
while ( 1 ) {
if ( units <= 0 ) {
55e5c: 4a80 tstl %d0 <== NOT EXECUTED
55e5e: 6756 beqs 55eb6 <_Watchdog_Adjust_to_chain+0x86> <== NOT EXECUTED
break;
}
}
_ISR_Enable( level );
}
55e60: 2252 moveal %a2@,%a1 <== NOT EXECUTED
while ( 1 ) {
if ( units <= 0 ) {
break;
}
if ( _Chain_Is_empty( header ) ) {
55e62: b689 cmpl %a1,%d3 <== NOT EXECUTED
55e64: 6750 beqs 55eb6 <_Watchdog_Adjust_to_chain+0x86> <== NOT EXECUTED
/*
* If it is longer than "units" until the first element on the chain
* fires, then bump it and quit.
*/
if ( units < first->delta_interval ) {
55e66: 2229 0010 movel %a1@(16),%d1 <== NOT EXECUTED
55e6a: 2049 moveal %a1,%a0 <== NOT EXECUTED
55e6c: b280 cmpl %d0,%d1 <== NOT EXECUTED
55e6e: 6308 blss 55e78 <_Watchdog_Adjust_to_chain+0x48> <== NOT EXECUTED
first->delta_interval -= units;
55e70: 9280 subl %d0,%d1 <== NOT EXECUTED
55e72: 2341 0010 movel %d1,%a1@(16) <== NOT EXECUTED
break;
55e76: 603e bras 55eb6 <_Watchdog_Adjust_to_chain+0x86> <== NOT EXECUTED
/*
* The first set happens in less than units, so take all of them
* off the chain and adjust units to reflect this.
*/
units -= first->delta_interval;
55e78: 9081 subl %d1,%d0 <== NOT EXECUTED
first->delta_interval = 0;
55e7a: 42a9 0010 clrl %a1@(16) <== NOT EXECUTED
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
previous = the_node->previous;
55e7e: 2268 0004 moveal %a0@(4),%a1 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Append_unprotected(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
55e82: 220b movel %a3,%d1 <== NOT EXECUTED
55e84: 5881 addql #4,%d1 <== NOT EXECUTED
)
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
55e86: 2850 moveal %a0@,%a4 <== NOT EXECUTED
previous = the_node->previous;
next->previous = previous;
previous->next = next;
55e88: 228c movel %a4,%a1@ <== NOT EXECUTED
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
previous = the_node->previous;
next->previous = previous;
55e8a: 2949 0004 movel %a1,%a4@(4) <== NOT EXECUTED
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
Chain_Node *old_last = tail->previous;
55e8e: 226b 0008 moveal %a3@(8),%a1 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Append_unprotected(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
Chain_Node *tail = _Chain_Tail( the_chain );
55e92: 2081 movel %d1,%a0@ <== NOT EXECUTED
Chain_Node *old_last = tail->previous;
the_node->next = tail;
tail->previous = the_node;
55e94: 2748 0008 movel %a0,%a3@(8) <== NOT EXECUTED
old_last->next = the_node;
55e98: 2288 movel %a0,%a1@ <== NOT EXECUTED
the_node->previous = old_last;
55e9a: 2149 0004 movel %a1,%a0@(4) <== NOT EXECUTED
while ( 1 ) {
_Chain_Extract_unprotected( &first->Node );
_Chain_Append_unprotected( to_fire, &first->Node );
_ISR_Flash( level );
55e9e: 2204 movel %d4,%d1 <== NOT EXECUTED
55ea0: 46c2 movew %d2,%sr <== NOT EXECUTED
55ea2: 8282 orl %d2,%d1 <== NOT EXECUTED
55ea4: 46c1 movew %d1,%sr <== NOT EXECUTED
break;
}
}
_ISR_Enable( level );
}
55ea6: 2212 movel %a2@,%d1 <== NOT EXECUTED
_Chain_Extract_unprotected( &first->Node );
_Chain_Append_unprotected( to_fire, &first->Node );
_ISR_Flash( level );
if ( _Chain_Is_empty( header ) )
55ea8: b681 cmpl %d1,%d3 <== NOT EXECUTED
55eaa: 67b0 beqs 55e5c <_Watchdog_Adjust_to_chain+0x2c> <== NOT EXECUTED
55eac: 2041 moveal %d1,%a0 <== NOT EXECUTED
break;
first = _Watchdog_First( header );
if ( first->delta_interval != 0 )
55eae: 4aa8 0010 tstl %a0@(16) <== NOT EXECUTED
55eb2: 67ca beqs 55e7e <_Watchdog_Adjust_to_chain+0x4e> <== NOT EXECUTED
55eb4: 60a6 bras 55e5c <_Watchdog_Adjust_to_chain+0x2c> <== NOT EXECUTED
break;
}
}
_ISR_Enable( level );
55eb6: 46c2 movew %d2,%sr <== NOT EXECUTED
}
55eb8: 4cd7 1c1c moveml %sp@,%d2-%d4/%a2-%a4 <== NOT EXECUTED
55ebc: 4e5e unlk %fp <== NOT EXECUTED
00048520 <_Watchdog_Insert>:
Watchdog_Interval delta_interval;
insert_isr_nest_level = _ISR_Nest_level;
_ISR_Disable( level );
48520: 327c 0700 moveaw #1792,%a1
48524: 2009 movel %a1,%d0
void _Watchdog_Insert(
Chain_Control *header,
Watchdog_Control *the_watchdog
)
{
48526: 4e56 ffec linkw %fp,#-20
4852a: 206e 000c moveal %fp@(12),%a0
4852e: 48d7 0c1c moveml %d2-%d4/%a2-%a3,%sp@
48532: 266e 0008 moveal %fp@(8),%a3
Watchdog_Control *after;
uint32_t insert_isr_nest_level;
Watchdog_Interval delta_interval;
insert_isr_nest_level = _ISR_Nest_level;
48536: 2439 0005 df92 movel 5df92 <_Per_CPU_Information+0x8>,%d2
_ISR_Disable( level );
4853c: 40c1 movew %sr,%d1
4853e: 8081 orl %d1,%d0
48540: 46c0 movew %d0,%sr
/*
* Check to see if the watchdog has just been inserted by a
* higher priority interrupt. If so, abandon this insert.
*/
if ( the_watchdog->state != WATCHDOG_INACTIVE ) {
48542: 4aa8 0008 tstl %a0@(8)
48546: 6706 beqs 4854e <_Watchdog_Insert+0x2e> <== ALWAYS TAKEN
_ISR_Enable( level );
48548: 46c1 movew %d1,%sr <== NOT EXECUTED
return;
4854a: 6000 009a braw 485e6 <_Watchdog_Insert+0xc6> <== NOT EXECUTED
}
the_watchdog->state = WATCHDOG_BEING_INSERTED;
4854e: 7001 moveq #1,%d0
break;
}
delta_interval -= after->delta_interval;
_ISR_Flash( level );
48550: 2449 moveal %a1,%a2
if ( the_watchdog->state != WATCHDOG_INACTIVE ) {
_ISR_Enable( level );
return;
}
the_watchdog->state = WATCHDOG_BEING_INSERTED;
48552: 2140 0008 movel %d0,%a0@(8)
_Watchdog_Sync_count++;
48556: 2039 0005 dc2e movel 5dc2e <_Watchdog_Sync_count>,%d0
4855c: 5280 addql #1,%d0
4855e: 23c0 0005 dc2e movel %d0,5dc2e <_Watchdog_Sync_count>
restart:
delta_interval = the_watchdog->initial;
48564: 2028 000c movel %a0@(12),%d0
RTEMS_INLINE_ROUTINE Watchdog_Control *_Watchdog_First(
Chain_Control *header
)
{
return ( (Watchdog_Control *) _Chain_First( header ) );
48568: 2253 moveal %a3@,%a1
for ( after = _Watchdog_First( header ) ;
;
after = _Watchdog_Next( after ) ) {
if ( delta_interval == 0 || !_Watchdog_Next( after ) )
4856a: 4a80 tstl %d0
4856c: 673c beqs 485aa <_Watchdog_Insert+0x8a> <== NEVER TAKEN
4856e: 4a91 tstl %a1@
48570: 6738 beqs 485aa <_Watchdog_Insert+0x8a> <== ALWAYS TAKEN
break;
if ( delta_interval < after->delta_interval ) {
48572: 2629 0010 movel %a1@(16),%d3 <== NOT EXECUTED
48576: b680 cmpl %d0,%d3 <== NOT EXECUTED
48578: 6308 blss 48582 <_Watchdog_Insert+0x62> <== NOT EXECUTED
after->delta_interval -= delta_interval;
4857a: 9680 subl %d0,%d3 <== NOT EXECUTED
4857c: 2343 0010 movel %d3,%a1@(16) <== NOT EXECUTED
break;
48580: 6028 bras 485aa <_Watchdog_Insert+0x8a> <== NOT EXECUTED
}
delta_interval -= after->delta_interval;
_ISR_Flash( level );
48582: 280a movel %a2,%d4 <== NOT EXECUTED
48584: 46c1 movew %d1,%sr <== NOT EXECUTED
48586: 8881 orl %d1,%d4 <== NOT EXECUTED
48588: 46c4 movew %d4,%sr <== NOT EXECUTED
if ( the_watchdog->state != WATCHDOG_BEING_INSERTED ) {
4858a: 7801 moveq #1,%d4 <== NOT EXECUTED
4858c: b8a8 0008 cmpl %a0@(8),%d4 <== NOT EXECUTED
48590: 663e bnes 485d0 <_Watchdog_Insert+0xb0> <== NOT EXECUTED
goto exit_insert;
}
if ( _Watchdog_Sync_level > insert_isr_nest_level ) {
48592: 2839 0005 dbcc movel 5dbcc <_Watchdog_Sync_level>,%d4 <== NOT EXECUTED
48598: b484 cmpl %d4,%d2 <== NOT EXECUTED
4859a: 6408 bccs 485a4 <_Watchdog_Insert+0x84> <== NOT EXECUTED
_Watchdog_Sync_level = insert_isr_nest_level;
4859c: 23c2 0005 dbcc movel %d2,5dbcc <_Watchdog_Sync_level> <== NOT EXECUTED
goto restart;
485a2: 60c0 bras 48564 <_Watchdog_Insert+0x44> <== NOT EXECUTED
exit_insert:
_Watchdog_Sync_level = insert_isr_nest_level;
_Watchdog_Sync_count--;
_ISR_Enable( level );
}
485a4: 2251 moveal %a1@,%a1 <== NOT EXECUTED
if ( delta_interval < after->delta_interval ) {
after->delta_interval -= delta_interval;
break;
}
delta_interval -= after->delta_interval;
485a6: 9083 subl %d3,%d0 <== NOT EXECUTED
if ( _Watchdog_Sync_level > insert_isr_nest_level ) {
_Watchdog_Sync_level = insert_isr_nest_level;
goto restart;
}
}
485a8: 60c0 bras 4856a <_Watchdog_Insert+0x4a> <== NOT EXECUTED
_Watchdog_Activate( the_watchdog );
the_watchdog->delta_interval = delta_interval;
_Chain_Insert_unprotected( after->Node.previous, &the_watchdog->Node );
485aa: 2269 0004 moveal %a1@(4),%a1
RTEMS_INLINE_ROUTINE void _Watchdog_Activate(
Watchdog_Control *the_watchdog
)
{
the_watchdog->state = WATCHDOG_ACTIVE;
485ae: 7602 moveq #2,%d3
)
{
Chain_Node *before_node;
the_node->previous = after_node;
before_node = after_node->next;
485b0: 2451 moveal %a1@,%a2
}
}
_Watchdog_Activate( the_watchdog );
the_watchdog->delta_interval = delta_interval;
485b2: 2140 0010 movel %d0,%a0@(16)
_Chain_Insert_unprotected( after->Node.previous, &the_watchdog->Node );
the_watchdog->start_time = _Watchdog_Ticks_since_boot;
485b6: 2039 0005 dc32 movel 5dc32 <_Watchdog_Ticks_since_boot>,%d0
485bc: 2143 0008 movel %d3,%a0@(8)
Chain_Node *the_node
)
{
Chain_Node *before_node;
the_node->previous = after_node;
485c0: 2149 0004 movel %a1,%a0@(4)
before_node = after_node->next;
after_node->next = the_node;
485c4: 2288 movel %a0,%a1@
the_node->next = before_node;
before_node->previous = the_node;
485c6: 2548 0004 movel %a0,%a2@(4)
Chain_Node *before_node;
the_node->previous = after_node;
before_node = after_node->next;
after_node->next = the_node;
the_node->next = before_node;
485ca: 208a movel %a2,%a0@
485cc: 2140 0014 movel %d0,%a0@(20)
exit_insert:
_Watchdog_Sync_level = insert_isr_nest_level;
485d0: 23c2 0005 dbcc movel %d2,5dbcc <_Watchdog_Sync_level>
_Watchdog_Sync_count--;
485d6: 2039 0005 dc2e movel 5dc2e <_Watchdog_Sync_count>,%d0
485dc: 5380 subql #1,%d0
485de: 23c0 0005 dc2e movel %d0,5dc2e <_Watchdog_Sync_count>
_ISR_Enable( level );
485e4: 46c1 movew %d1,%sr
}
485e6: 4cd7 0c1c moveml %sp@,%d2-%d4/%a2-%a3
485ea: 4e5e unlk %fp
...
0004863c <_Watchdog_Remove>:
{
ISR_Level level;
Watchdog_States previous_state;
Watchdog_Control *next_watchdog;
_ISR_Disable( level );
4863c: 203c 0000 0700 movel #1792,%d0
*/
Watchdog_States _Watchdog_Remove(
Watchdog_Control *the_watchdog
)
{
48642: 4e56 0000 linkw %fp,#0
48646: 206e 0008 moveal %fp@(8),%a0
4864a: 2f0a movel %a2,%sp@-
4864c: 2f02 movel %d2,%sp@-
ISR_Level level;
Watchdog_States previous_state;
Watchdog_Control *next_watchdog;
_ISR_Disable( level );
4864e: 40c1 movew %sr,%d1
48650: 8081 orl %d1,%d0
48652: 46c0 movew %d0,%sr
previous_state = the_watchdog->state;
48654: 2028 0008 movel %a0@(8),%d0
switch ( previous_state ) {
48658: 7401 moveq #1,%d2
4865a: b480 cmpl %d0,%d2
4865c: 670c beqs 4866a <_Watchdog_Remove+0x2e> <== NEVER TAKEN
4865e: 6242 bhis 486a2 <_Watchdog_Remove+0x66> <== NEVER TAKEN
48660: 143c 0003 moveb #3,%d2
48664: b480 cmpl %d0,%d2
48666: 653a bcss 486a2 <_Watchdog_Remove+0x66> <== NEVER TAKEN
48668: 6006 bras 48670 <_Watchdog_Remove+0x34>
/*
* It is not actually on the chain so just change the state and
* the Insert operation we interrupted will be aborted.
*/
the_watchdog->state = WATCHDOG_INACTIVE;
4866a: 42a8 0008 clrl %a0@(8) <== NOT EXECUTED
break;
4866e: 6032 bras 486a2 <_Watchdog_Remove+0x66> <== NOT EXECUTED
}
the_watchdog->stop_time = _Watchdog_Ticks_since_boot;
_ISR_Enable( level );
return( previous_state );
}
48670: 2250 moveal %a0@,%a1
break;
case WATCHDOG_ACTIVE:
case WATCHDOG_REMOVE_IT:
the_watchdog->state = WATCHDOG_INACTIVE;
48672: 42a8 0008 clrl %a0@(8)
next_watchdog = _Watchdog_Next( the_watchdog );
if ( _Watchdog_Next(next_watchdog) )
48676: 4a91 tstl %a1@
48678: 6708 beqs 48682 <_Watchdog_Remove+0x46> <== ALWAYS TAKEN
next_watchdog->delta_interval += the_watchdog->delta_interval;
4867a: 2428 0010 movel %a0@(16),%d2 <== NOT EXECUTED
4867e: d5a9 0010 addl %d2,%a1@(16) <== NOT EXECUTED
if ( _Watchdog_Sync_count )
48682: 2479 0005 dc2e moveal 5dc2e <_Watchdog_Sync_count>,%a2
48688: 4a8a tstl %a2
4868a: 670c beqs 48698 <_Watchdog_Remove+0x5c> <== ALWAYS TAKEN
_Watchdog_Sync_level = _ISR_Nest_level;
4868c: 45f9 0005 df92 lea 5df92 <_Per_CPU_Information+0x8>,%a2 <== NOT EXECUTED
48692: 23d2 0005 dbcc movel %a2@,5dbcc <_Watchdog_Sync_level> <== NOT EXECUTED
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
previous = the_node->previous;
48698: 2468 0004 moveal %a0@(4),%a2
next->previous = previous;
4869c: 234a 0004 movel %a2,%a1@(4)
previous->next = next;
486a0: 2489 movel %a1,%a2@
_Chain_Extract_unprotected( &the_watchdog->Node );
break;
}
the_watchdog->stop_time = _Watchdog_Ticks_since_boot;
486a2: 2279 0005 dc32 moveal 5dc32 <_Watchdog_Ticks_since_boot>,%a1
486a8: 2149 0018 movel %a1,%a0@(24)
_ISR_Enable( level );
486ac: 46c1 movew %d1,%sr
return( previous_state );
}
486ae: 241f movel %sp@+,%d2
486b0: 245f moveal %sp@+,%a2
486b2: 4e5e unlk %fp
...
000496a8 <_Watchdog_Report>:
void _Watchdog_Report(
const char *name,
Watchdog_Control *watch
)
{
496a8: 4e56 fff0 linkw %fp,#-16 <== NOT EXECUTED
printk(
496ac: 223c 0005 cd7d movel #380285,%d1 <== NOT EXECUTED
void _Watchdog_Report(
const char *name,
Watchdog_Control *watch
)
{
496b2: 206e 000c moveal %fp@(12),%a0 <== NOT EXECUTED
496b6: 48d7 003c moveml %d2-%d5,%sp@ <== NOT EXECUTED
496ba: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
printk(
496be: 2a28 0024 movel %a0@(36),%d5 <== NOT EXECUTED
496c2: 2828 0020 movel %a0@(32),%d4 <== NOT EXECUTED
496c6: 2628 001c movel %a0@(28),%d3 <== NOT EXECUTED
496ca: 2428 000c movel %a0@(12),%d2 <== NOT EXECUTED
496ce: 2268 0010 moveal %a0@(16),%a1 <== NOT EXECUTED
496d2: 4a80 tstl %d0 <== NOT EXECUTED
496d4: 6608 bnes 496de <_Watchdog_Report+0x36> <== NOT EXECUTED
496d6: 223c 0005 cd82 movel #380290,%d1 <== NOT EXECUTED
496dc: 2001 movel %d1,%d0 <== NOT EXECUTED
496de: 2f05 movel %d5,%sp@- <== NOT EXECUTED
496e0: 2f04 movel %d4,%sp@- <== NOT EXECUTED
496e2: 2f03 movel %d3,%sp@- <== NOT EXECUTED
496e4: 2f08 movel %a0,%sp@- <== NOT EXECUTED
496e6: 2f02 movel %d2,%sp@- <== NOT EXECUTED
496e8: 2f09 movel %a1,%sp@- <== NOT EXECUTED
496ea: 2f01 movel %d1,%sp@- <== NOT EXECUTED
496ec: 2f00 movel %d0,%sp@- <== NOT EXECUTED
496ee: 4879 0005 cf0c pea 5cf0c <C.0.4118+0x44> <== NOT EXECUTED
496f4: 4eb9 0004 3dec jsr 43dec <printk> <== NOT EXECUTED
496fa: 4fef 0024 lea %sp@(36),%sp <== NOT EXECUTED
watch,
watch->routine,
watch->id,
watch->user_data
);
}
496fe: 4cee 003c fff0 moveml %fp@(-16),%d2-%d5 <== NOT EXECUTED
49704: 4e5e unlk %fp <== NOT EXECUTED
00049634 <_Watchdog_Report_chain>:
)
{
ISR_Level level;
Chain_Node *node;
_ISR_Disable( level );
49634: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
void _Watchdog_Report_chain(
const char *name,
Chain_Control *header
)
{
4963a: 4e56 ffec linkw %fp,#-20 <== NOT EXECUTED
4963e: 48d7 1c0c moveml %d2-%d3/%a2-%a4,%sp@ <== NOT EXECUTED
49642: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
49646: 266e 000c moveal %fp@(12),%a3 <== NOT EXECUTED
ISR_Level level;
Chain_Node *node;
_ISR_Disable( level );
4964a: 40c3 movew %sr,%d3 <== NOT EXECUTED
4964c: 8083 orl %d3,%d0 <== NOT EXECUTED
4964e: 46c0 movew %d0,%sr <== NOT EXECUTED
printk( "Watchdog Chain: %s %p\n", name, header );
49650: 2f0b movel %a3,%sp@- <== NOT EXECUTED
49652: 49f9 0004 3dec lea 43dec <printk>,%a4 <== NOT EXECUTED
49658: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4965a: 4879 0005 ced6 pea 5ced6 <C.0.4118+0xe> <== NOT EXECUTED
49660: 4e94 jsr %a4@ <== NOT EXECUTED
printk( "== end of %s \n", name );
} else {
printk( "Chain is empty\n" );
}
_ISR_Enable( level );
}
49662: 245b moveal %a3@+,%a2 <== NOT EXECUTED
ISR_Level level;
Chain_Node *node;
_ISR_Disable( level );
printk( "Watchdog Chain: %s %p\n", name, header );
if ( !_Chain_Is_empty( header ) ) {
49664: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
49668: b7ca cmpal %a2,%a3 <== NOT EXECUTED
4966a: 6726 beqs 49692 <_Watchdog_Report_chain+0x5e> <== NOT EXECUTED
node != _Chain_Tail(header) ;
node = node->next )
{
Watchdog_Control *watch = (Watchdog_Control *) node;
_Watchdog_Report( NULL, watch );
4966c: 49f9 0004 96a8 lea 496a8 <_Watchdog_Report>,%a4 <== NOT EXECUTED
49672: 2f0a movel %a2,%sp@- <== NOT EXECUTED
49674: 42a7 clrl %sp@- <== NOT EXECUTED
49676: 4e94 jsr %a4@ <== NOT EXECUTED
_ISR_Disable( level );
printk( "Watchdog Chain: %s %p\n", name, header );
if ( !_Chain_Is_empty( header ) ) {
for ( node = _Chain_First( header ) ;
node != _Chain_Tail(header) ;
node = node->next )
49678: 2452 moveal %a2@,%a2 <== NOT EXECUTED
Chain_Node *node;
_ISR_Disable( level );
printk( "Watchdog Chain: %s %p\n", name, header );
if ( !_Chain_Is_empty( header ) ) {
for ( node = _Chain_First( header ) ;
4967a: 508f addql #8,%sp <== NOT EXECUTED
4967c: b7ca cmpal %a2,%a3 <== NOT EXECUTED
4967e: 66f2 bnes 49672 <_Watchdog_Report_chain+0x3e> <== NOT EXECUTED
{
Watchdog_Control *watch = (Watchdog_Control *) node;
_Watchdog_Report( NULL, watch );
}
printk( "== end of %s \n", name );
49680: 2f02 movel %d2,%sp@- <== NOT EXECUTED
49682: 4879 0005 ceed pea 5ceed <C.0.4118+0x25> <== NOT EXECUTED
49688: 4eb9 0004 3dec jsr 43dec <printk> <== NOT EXECUTED
4968e: 508f addql #8,%sp <== NOT EXECUTED
49690: 600a bras 4969c <_Watchdog_Report_chain+0x68> <== NOT EXECUTED
} else {
printk( "Chain is empty\n" );
49692: 4879 0005 cefc pea 5cefc <C.0.4118+0x34> <== NOT EXECUTED
49698: 4e94 jsr %a4@ <== NOT EXECUTED
4969a: 588f addql #4,%sp <== NOT EXECUTED
}
_ISR_Enable( level );
4969c: 46c3 movew %d3,%sr <== NOT EXECUTED
}
4969e: 4cee 1c0c ffec moveml %fp@(-20),%d2-%d3/%a2-%a4 <== NOT EXECUTED
496a4: 4e5e unlk %fp <== NOT EXECUTED
000486b8 <_Watchdog_Tickle>:
* See the comment in watchdoginsert.c and watchdogadjust.c
* about why it's safe not to declare header a pointer to
* volatile data - till, 2003/7
*/
_ISR_Disable( level );
486b8: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
*/
void _Watchdog_Tickle(
Chain_Control *header
)
{
486be: 4e56 ffe8 linkw %fp,#-24 <== NOT EXECUTED
486c2: 48d7 3c0c moveml %d2-%d3/%a2-%a5,%sp@ <== NOT EXECUTED
486c6: 286e 0008 moveal %fp@(8),%a4 <== NOT EXECUTED
* See the comment in watchdoginsert.c and watchdogadjust.c
* about why it's safe not to declare header a pointer to
* volatile data - till, 2003/7
*/
_ISR_Disable( level );
486ca: 40c2 movew %sr,%d2 <== NOT EXECUTED
486cc: 8082 orl %d2,%d0 <== NOT EXECUTED
486ce: 46c0 movew %d0,%sr <== NOT EXECUTED
} while ( !_Chain_Is_empty( header ) &&
(the_watchdog->delta_interval == 0) );
leave:
_ISR_Enable(level);
}
486d0: 264c moveal %a4,%a3 <== NOT EXECUTED
486d2: 245b moveal %a3@+,%a2 <== NOT EXECUTED
* volatile data - till, 2003/7
*/
_ISR_Disable( level );
if ( _Chain_Is_empty( header ) )
486d4: b7ca cmpal %a2,%a3 <== NOT EXECUTED
486d6: 674c beqs 48724 <_Watchdog_Tickle+0x6c> <== NOT EXECUTED
* to be inserted has already had its delta_interval adjusted to 0, and
* so is added to the head of the chain with a delta_interval of 0.
*
* Steven Johnson - 12/2005 (gcc-3.2.3 -O3 on powerpc)
*/
if (the_watchdog->delta_interval != 0) {
486d8: 202a 0010 movel %a2@(16),%d0 <== NOT EXECUTED
486dc: 6708 beqs 486e6 <_Watchdog_Tickle+0x2e> <== NOT EXECUTED
the_watchdog->delta_interval--;
486de: 5380 subql #1,%d0 <== NOT EXECUTED
486e0: 2540 0010 movel %d0,%a2@(16) <== NOT EXECUTED
if ( the_watchdog->delta_interval != 0 )
486e4: 663e bnes 48724 <_Watchdog_Tickle+0x6c> <== NOT EXECUTED
goto leave;
}
do {
watchdog_state = _Watchdog_Remove( the_watchdog );
486e6: 4bf9 0004 863c lea 4863c <_Watchdog_Remove>,%a5 <== NOT EXECUTED
case WATCHDOG_REMOVE_IT:
break;
}
_ISR_Disable( level );
486ec: 263c 0000 0700 movel #1792,%d3 <== NOT EXECUTED
if ( the_watchdog->delta_interval != 0 )
goto leave;
}
do {
watchdog_state = _Watchdog_Remove( the_watchdog );
486f2: 2f0a movel %a2,%sp@- <== NOT EXECUTED
486f4: 4e95 jsr %a5@ <== NOT EXECUTED
_ISR_Enable( level );
486f6: 46c2 movew %d2,%sr <== NOT EXECUTED
switch( watchdog_state ) {
486f8: 7202 moveq #2,%d1 <== NOT EXECUTED
486fa: 588f addql #4,%sp <== NOT EXECUTED
486fc: b280 cmpl %d0,%d1 <== NOT EXECUTED
486fe: 6610 bnes 48710 <_Watchdog_Tickle+0x58> <== NOT EXECUTED
case WATCHDOG_ACTIVE:
(*the_watchdog->routine)(
48700: 2f2a 0024 movel %a2@(36),%sp@- <== NOT EXECUTED
48704: 2f2a 0020 movel %a2@(32),%sp@- <== NOT EXECUTED
48708: 206a 001c moveal %a2@(28),%a0 <== NOT EXECUTED
4870c: 4e90 jsr %a0@ <== NOT EXECUTED
the_watchdog->id,
the_watchdog->user_data
);
break;
4870e: 508f addql #8,%sp <== NOT EXECUTED
case WATCHDOG_REMOVE_IT:
break;
}
_ISR_Disable( level );
48710: 2003 movel %d3,%d0 <== NOT EXECUTED
48712: 40c2 movew %sr,%d2 <== NOT EXECUTED
48714: 8082 orl %d2,%d0 <== NOT EXECUTED
48716: 46c0 movew %d0,%sr <== NOT EXECUTED
} while ( !_Chain_Is_empty( header ) &&
(the_watchdog->delta_interval == 0) );
leave:
_ISR_Enable(level);
}
48718: 2454 moveal %a4@,%a2 <== NOT EXECUTED
_ISR_Disable( level );
the_watchdog = _Watchdog_First( header );
} while ( !_Chain_Is_empty( header ) &&
(the_watchdog->delta_interval == 0) );
4871a: b7ca cmpal %a2,%a3 <== NOT EXECUTED
4871c: 6706 beqs 48724 <_Watchdog_Tickle+0x6c> <== NOT EXECUTED
}
_ISR_Disable( level );
the_watchdog = _Watchdog_First( header );
} while ( !_Chain_Is_empty( header ) &&
4871e: 4aaa 0010 tstl %a2@(16) <== NOT EXECUTED
48722: 67ce beqs 486f2 <_Watchdog_Tickle+0x3a> <== NOT EXECUTED
(the_watchdog->delta_interval == 0) );
leave:
_ISR_Enable(level);
48724: 46c2 movew %d2,%sr <== NOT EXECUTED
}
48726: 4cee 3c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a5 <== NOT EXECUTED
4872c: 4e5e unlk %fp <== NOT EXECUTED
0005aca8 <_execve>:
int _execve(
const char *path __attribute__((unused)),
char *const argv[] __attribute__((unused)),
char *const envp[] __attribute__((unused))
)
{
5aca8: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
5acac: 4eb9 0004 d1a4 jsr 4d1a4 <__errno> <== NOT EXECUTED
}
5acb2: 4e5e unlk %fp <== NOT EXECUTED
const char *path __attribute__((unused)),
char *const argv[] __attribute__((unused)),
char *const envp[] __attribute__((unused))
)
{
rtems_set_errno_and_return_minus_one( ENOSYS );
5acb4: 2040 moveal %d0,%a0 <== NOT EXECUTED
5acb6: 7058 moveq #88,%d0 <== NOT EXECUTED
5acb8: 2080 movel %d0,%a0@ <== NOT EXECUTED
}
5acba: 70ff moveq #-1,%d0 <== NOT EXECUTED
...
00059ef0 <_kill_r>:
int _kill_r(
struct _reent *ptr,
pid_t pid,
int sig
)
{
59ef0: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
59ef4: 202e 000c movel %fp@(12),%d0 <== NOT EXECUTED
59ef8: 222e 0010 movel %fp@(16),%d1 <== NOT EXECUTED
return killinfo( pid, sig, NULL );
59efc: 2d40 0008 movel %d0,%fp@(8) <== NOT EXECUTED
59f00: 42ae 0010 clrl %fp@(16) <== NOT EXECUTED
59f04: 2d41 000c movel %d1,%fp@(12) <== NOT EXECUTED
}
59f08: 4e5e unlk %fp <== NOT EXECUTED
struct _reent *ptr,
pid_t pid,
int sig
)
{
return killinfo( pid, sig, NULL );
59f0a: 4ef9 0005 a08c jmp 5a08c <killinfo> <== NOT EXECUTED
00045600 <adjtime>:
int adjtime(
struct timeval *delta,
struct timeval *olddelta
)
{
45600: 4e56 fff8 linkw %fp,#-8 <== NOT EXECUTED
45604: 2f0b movel %a3,%sp@- <== NOT EXECUTED
45606: 266e 000c moveal %fp@(12),%a3 <== NOT EXECUTED
4560a: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4560c: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
long adjustment;
/*
* Simple validations
*/
if ( !delta )
45610: 4a8a tstl %a2 <== NOT EXECUTED
45612: 670c beqs 45620 <adjtime+0x20> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
if ( delta->tv_usec >= TOD_MICROSECONDS_PER_SECOND )
45614: 203c 000f 423f movel #999999,%d0 <== NOT EXECUTED
4561a: b0aa 0004 cmpl %a2@(4),%d0 <== NOT EXECUTED
4561e: 6412 bccs 45632 <adjtime+0x32> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
45620: 4eb9 0004 d394 jsr 4d394 <__errno> <== NOT EXECUTED
45626: 2040 moveal %d0,%a0 <== NOT EXECUTED
45628: 7016 moveq #22,%d0 <== NOT EXECUTED
4562a: 2080 movel %d0,%a0@ <== NOT EXECUTED
4562c: 70ff moveq #-1,%d0 <== NOT EXECUTED
4562e: 6000 00ae braw 456de <adjtime+0xde> <== NOT EXECUTED
if ( olddelta ) {
45632: 4a8b tstl %a3 <== NOT EXECUTED
45634: 6706 beqs 4563c <adjtime+0x3c> <== NOT EXECUTED
olddelta->tv_sec = 0;
45636: 4293 clrl %a3@ <== NOT EXECUTED
olddelta->tv_usec = 0;
45638: 42ab 0004 clrl %a3@(4) <== NOT EXECUTED
}
/* convert delta to microseconds */
adjustment = (delta->tv_sec * TOD_MICROSECONDS_PER_SECOND);
4563c: 203c 000f 4240 movel #1000000,%d0 <== NOT EXECUTED
45642: 4c12 0800 mulsl %a2@,%d0 <== NOT EXECUTED
adjustment += delta->tv_usec;
45646: d0aa 0004 addl %a2@(4),%d0 <== NOT EXECUTED
/* too small to account for */
if ( adjustment < rtems_configuration_get_microseconds_per_tick() )
4564a: b0b9 0005 d710 cmpl 5d710 <Configuration+0xc>,%d0 <== NOT EXECUTED
45650: 6500 008a bcsw 456dc <adjtime+0xdc> <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
45654: 2039 0005 f0e0 movel 5f0e0 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
4565a: 5280 addql #1,%d0 <== NOT EXECUTED
4565c: 23c0 0005 f0e0 movel %d0,5f0e0 <_Thread_Dispatch_disable_level><== NOT EXECUTED
* This prevents context switches while we are adjusting the TOD
*/
_Thread_Disable_dispatch();
_TOD_Get( &ts );
45662: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
45666: 4eb9 0004 6cb0 jsr 46cb0 <_TOD_Get> <== NOT EXECUTED
ts.tv_sec += delta->tv_sec;
4566c: 2012 movel %a2@,%d0 <== NOT EXECUTED
4566e: d1ae fff8 addl %d0,%fp@(-8) <== NOT EXECUTED
ts.tv_nsec += delta->tv_usec * TOD_NANOSECONDS_PER_MICROSECOND;
45672: 223c 0000 03e8 movel #1000,%d1 <== NOT EXECUTED
/* if adjustment is too much positive */
while ( ts.tv_nsec >= TOD_NANOSECONDS_PER_SECOND ) {
45678: 588f addql #4,%sp <== NOT EXECUTED
_Thread_Disable_dispatch();
_TOD_Get( &ts );
ts.tv_sec += delta->tv_sec;
ts.tv_nsec += delta->tv_usec * TOD_NANOSECONDS_PER_MICROSECOND;
4567a: 202a 0004 movel %a2@(4),%d0 <== NOT EXECUTED
4567e: 4c01 0800 mulsl %d1,%d0 <== NOT EXECUTED
_Thread_Disable_dispatch();
_TOD_Get( &ts );
ts.tv_sec += delta->tv_sec;
45682: 206e fff8 moveal %fp@(-8),%a0 <== NOT EXECUTED
ts.tv_nsec += delta->tv_usec * TOD_NANOSECONDS_PER_MICROSECOND;
45686: d0ae fffc addl %fp@(-4),%d0 <== NOT EXECUTED
/* if adjustment is too much positive */
while ( ts.tv_nsec >= TOD_NANOSECONDS_PER_SECOND ) {
4568a: 6006 bras 45692 <adjtime+0x92> <== NOT EXECUTED
4568c: 0680 c465 3600 addil #-1000000000,%d0 <== NOT EXECUTED
45692: 2208 movel %a0,%d1 <== NOT EXECUTED
45694: 5288 addql #1,%a0 <== NOT EXECUTED
45696: 0c80 3b9a c9ff cmpil #999999999,%d0 <== NOT EXECUTED
4569c: 62ee bhis 4568c <adjtime+0x8c> <== NOT EXECUTED
4569e: 6006 bras 456a6 <adjtime+0xa6> <== NOT EXECUTED
456a0: 0680 3b9a ca00 addil #1000000000,%d0 <== NOT EXECUTED
456a6: 2041 moveal %d1,%a0 <== NOT EXECUTED
456a8: 5381 subql #1,%d1 <== NOT EXECUTED
ts.tv_nsec -= TOD_NANOSECONDS_PER_SECOND;
ts.tv_sec++;
}
/* if adjustment is too much negative */
while ( ts.tv_nsec <= (-1 * TOD_NANOSECONDS_PER_SECOND) ) {
456aa: 0c80 c465 3600 cmpil #-1000000000,%d0 <== NOT EXECUTED
456b0: 63ee blss 456a0 <adjtime+0xa0> <== NOT EXECUTED
ts.tv_nsec += TOD_NANOSECONDS_PER_SECOND;
ts.tv_sec--;
}
_TOD_Set( &ts );
456b2: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
ts.tv_nsec -= TOD_NANOSECONDS_PER_SECOND;
ts.tv_sec++;
}
/* if adjustment is too much negative */
while ( ts.tv_nsec <= (-1 * TOD_NANOSECONDS_PER_SECOND) ) {
456b6: 2d40 fffc movel %d0,%fp@(-4) <== NOT EXECUTED
456ba: 2d48 fff8 movel %a0,%fp@(-8) <== NOT EXECUTED
ts.tv_nsec += TOD_NANOSECONDS_PER_SECOND;
ts.tv_sec--;
}
_TOD_Set( &ts );
456be: 4eb9 0004 6d4c jsr 46d4c <_TOD_Set> <== NOT EXECUTED
_Thread_Enable_dispatch();
456c4: 4eb9 0004 80c2 jsr 480c2 <_Thread_Enable_dispatch> <== NOT EXECUTED
/* set the user's output */
if ( olddelta )
456ca: 588f addql #4,%sp <== NOT EXECUTED
456cc: 4a8b tstl %a3 <== NOT EXECUTED
456ce: 670c beqs 456dc <adjtime+0xdc> <== NOT EXECUTED
*olddelta = *delta;
456d0: 2012 movel %a2@,%d0 <== NOT EXECUTED
456d2: 222a 0004 movel %a2@(4),%d1 <== NOT EXECUTED
456d6: 2680 movel %d0,%a3@ <== NOT EXECUTED
456d8: 2741 0004 movel %d1,%a3@(4) <== NOT EXECUTED
return 0;
456dc: 4280 clrl %d0 <== NOT EXECUTED
}
456de: 246e fff0 moveal %fp@(-16),%a2 <== NOT EXECUTED
456e2: 266e fff4 moveal %fp@(-12),%a3 <== NOT EXECUTED
456e6: 4e5e unlk %fp <== NOT EXECUTED
...
00045d38 <aio_cancel>:
* operation(s) cannot be canceled
*/
int aio_cancel(int fildes, struct aiocb *aiocbp)
{
45d38: 4e56 fff0 linkw %fp,#-16 <== NOT EXECUTED
45d3c: 48d7 1c04 moveml %d2/%a2-%a4,%sp@ <== NOT EXECUTED
rtems_aio_request_chain *r_chain;
int result;
pthread_mutex_lock (&aio_request_queue.mutex);
45d40: 4879 0006 04a8 pea 604a8 <aio_request_queue> <== NOT EXECUTED
45d46: 49f9 0004 6e00 lea 46e00 <pthread_mutex_lock>,%a4 <== NOT EXECUTED
* operation(s) cannot be canceled
*/
int aio_cancel(int fildes, struct aiocb *aiocbp)
{
45d4c: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
45d50: 266e 000c moveal %fp@(12),%a3 <== NOT EXECUTED
rtems_aio_request_chain *r_chain;
int result;
pthread_mutex_lock (&aio_request_queue.mutex);
45d54: 4e94 jsr %a4@ <== NOT EXECUTED
if (aiocbp == NULL)
45d56: 588f addql #4,%sp <== NOT EXECUTED
45d58: 4a8b tstl %a3 <== NOT EXECUTED
45d5a: 6600 0110 bnew 45e6c <aio_cancel+0x134> <== NOT EXECUTED
{
if (fcntl (fildes, F_GETFL) < 0) {
45d5e: 4878 0003 pea 3 <DIVIDE> <== NOT EXECUTED
45d62: 2f02 movel %d2,%sp@- <== NOT EXECUTED
45d64: 4eb9 0004 c05c jsr 4c05c <fcntl> <== NOT EXECUTED
45d6a: 508f addql #8,%sp <== NOT EXECUTED
45d6c: 4a80 tstl %d0 <== NOT EXECUTED
45d6e: 6c1c bges 45d8c <aio_cancel+0x54> <== NOT EXECUTED
pthread_mutex_unlock(&aio_request_queue.mutex);
45d70: 4879 0006 04a8 pea 604a8 <aio_request_queue> <== NOT EXECUTED
45d76: 4eb9 0004 6e98 jsr 46e98 <pthread_mutex_unlock> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one (EBADF);
45d7c: 4eb9 0004 efc8 jsr 4efc8 <__errno> <== NOT EXECUTED
45d82: 7209 moveq #9,%d1 <== NOT EXECUTED
45d84: 2040 moveal %d0,%a0 <== NOT EXECUTED
45d86: 2081 movel %d1,%a0@ <== NOT EXECUTED
45d88: 6000 0100 braw 45e8a <aio_cancel+0x152> <== NOT EXECUTED
}
r_chain = rtems_aio_search_fd (&aio_request_queue.work_req,
45d8c: 42a7 clrl %sp@- <== NOT EXECUTED
45d8e: 47f9 0004 60e6 lea 460e6 <rtems_aio_search_fd>,%a3 <== NOT EXECUTED
45d94: 2f02 movel %d2,%sp@- <== NOT EXECUTED
45d96: 4879 0006 04f0 pea 604f0 <aio_request_queue+0x48> <== NOT EXECUTED
45d9c: 4e93 jsr %a3@ <== NOT EXECUTED
fildes,
0);
if (r_chain == NULL)
45d9e: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
if (fcntl (fildes, F_GETFL) < 0) {
pthread_mutex_unlock(&aio_request_queue.mutex);
rtems_set_errno_and_return_minus_one (EBADF);
}
r_chain = rtems_aio_search_fd (&aio_request_queue.work_req,
45da2: 2440 moveal %d0,%a2 <== NOT EXECUTED
fildes,
0);
if (r_chain == NULL)
45da4: 4a80 tstl %d0 <== NOT EXECUTED
45da6: 6600 008c bnew 45e34 <aio_cancel+0xfc> <== NOT EXECUTED
{
if (!rtems_chain_is_empty (&aio_request_queue.idle_req))
45daa: 203c 0006 0500 movel #394496,%d0 <== NOT EXECUTED
45db0: b0b9 0006 04fc cmpl 604fc <aio_request_queue+0x54>,%d0 <== NOT EXECUTED
45db6: 6768 beqs 45e20 <aio_cancel+0xe8> <== NOT EXECUTED
{
r_chain = rtems_aio_search_fd (&aio_request_queue.idle_req,
45db8: 42a7 clrl %sp@- <== NOT EXECUTED
45dba: 45f9 0004 6e98 lea 46e98 <pthread_mutex_unlock>,%a2 <== NOT EXECUTED
45dc0: 2f02 movel %d2,%sp@- <== NOT EXECUTED
45dc2: 4879 0006 04fc pea 604fc <aio_request_queue+0x54> <== NOT EXECUTED
45dc8: 4e93 jsr %a3@ <== NOT EXECUTED
fildes,
0);
if (r_chain == NULL) {
45dca: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
0);
if (r_chain == NULL)
{
if (!rtems_chain_is_empty (&aio_request_queue.idle_req))
{
r_chain = rtems_aio_search_fd (&aio_request_queue.idle_req,
45dce: 2400 movel %d0,%d2 <== NOT EXECUTED
fildes,
0);
if (r_chain == NULL) {
45dd0: 6612 bnes 45de4 <aio_cancel+0xac> <== NOT EXECUTED
pthread_mutex_unlock(&aio_request_queue.mutex);
45dd2: 4879 0006 04a8 pea 604a8 <aio_request_queue> <== NOT EXECUTED
return AIO_ALLDONE;
45dd8: 143c 0002 moveb #2,%d2 <== NOT EXECUTED
{
r_chain = rtems_aio_search_fd (&aio_request_queue.idle_req,
fildes,
0);
if (r_chain == NULL) {
pthread_mutex_unlock(&aio_request_queue.mutex);
45ddc: 4e92 jsr %a2@ <== NOT EXECUTED
return AIO_ALLDONE;
45dde: 588f addql #4,%sp <== NOT EXECUTED
45de0: 6000 0146 braw 45f28 <aio_cancel+0x1f0> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void rtems_chain_extract(
rtems_chain_node *the_node
)
{
_Chain_Extract( the_node );
45de4: 2f00 movel %d0,%sp@- <== NOT EXECUTED
}
rtems_chain_extract (&r_chain->next_fd);
rtems_aio_remove_fd (r_chain);
pthread_mutex_destroy (&r_chain->mutex);
45de6: 2642 moveal %d2,%a3 <== NOT EXECUTED
45de8: 47eb 001c lea %a3@(28),%a3 <== NOT EXECUTED
45dec: 4eb9 0004 865c jsr 4865c <_Chain_Extract> <== NOT EXECUTED
pthread_mutex_unlock(&aio_request_queue.mutex);
return AIO_ALLDONE;
}
rtems_chain_extract (&r_chain->next_fd);
rtems_aio_remove_fd (r_chain);
45df2: 2f02 movel %d2,%sp@- <== NOT EXECUTED
45df4: 4eb9 0004 643a jsr 4643a <rtems_aio_remove_fd> <== NOT EXECUTED
pthread_mutex_destroy (&r_chain->mutex);
45dfa: 2f0b movel %a3,%sp@- <== NOT EXECUTED
45dfc: 4eb9 0004 6bc8 jsr 46bc8 <pthread_mutex_destroy> <== NOT EXECUTED
pthread_cond_destroy (&r_chain->mutex);
45e02: 2f0b movel %a3,%sp@- <== NOT EXECUTED
45e04: 4eb9 0004 68c4 jsr 468c4 <pthread_cond_destroy> <== NOT EXECUTED
free (r_chain);
45e0a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
45e0c: 4eb9 0004 31fc jsr 431fc <free> <== NOT EXECUTED
pthread_mutex_unlock (&aio_request_queue.mutex);
45e12: 4879 0006 04a8 pea 604a8 <aio_request_queue> <== NOT EXECUTED
45e18: 4e92 jsr %a2@ <== NOT EXECUTED
return AIO_CANCELED;
45e1a: 4fef 0018 lea %sp@(24),%sp <== NOT EXECUTED
45e1e: 6046 bras 45e66 <aio_cancel+0x12e> <== NOT EXECUTED
}
pthread_mutex_unlock (&aio_request_queue.mutex);
45e20: 4879 0006 04a8 pea 604a8 <aio_request_queue> <== NOT EXECUTED
return AIO_ALLDONE;
45e26: 7402 moveq #2,%d2 <== NOT EXECUTED
pthread_mutex_unlock (&aio_request_queue.mutex);
return AIO_CANCELED;
}
pthread_mutex_unlock (&aio_request_queue.mutex);
45e28: 4eb9 0004 6e98 jsr 46e98 <pthread_mutex_unlock> <== NOT EXECUTED
return AIO_ALLDONE;
45e2e: 588f addql #4,%sp <== NOT EXECUTED
45e30: 6000 00f6 braw 45f28 <aio_cancel+0x1f0> <== NOT EXECUTED
}
pthread_mutex_lock (&r_chain->mutex);
45e34: 2400 movel %d0,%d2 <== NOT EXECUTED
45e36: 0682 0000 001c addil #28,%d2 <== NOT EXECUTED
45e3c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
45e3e: 4e94 jsr %a4@ <== NOT EXECUTED
45e40: 2f0a movel %a2,%sp@- <== NOT EXECUTED
45e42: 4eb9 0004 865c jsr 4865c <_Chain_Extract> <== NOT EXECUTED
rtems_chain_extract (&r_chain->next_fd);
rtems_aio_remove_fd (r_chain);
45e48: 2f0a movel %a2,%sp@- <== NOT EXECUTED
pthread_mutex_unlock (&r_chain->mutex);
45e4a: 45f9 0004 6e98 lea 46e98 <pthread_mutex_unlock>,%a2 <== NOT EXECUTED
return AIO_ALLDONE;
}
pthread_mutex_lock (&r_chain->mutex);
rtems_chain_extract (&r_chain->next_fd);
rtems_aio_remove_fd (r_chain);
45e50: 4eb9 0004 643a jsr 4643a <rtems_aio_remove_fd> <== NOT EXECUTED
pthread_mutex_unlock (&r_chain->mutex);
45e56: 2f02 movel %d2,%sp@- <== NOT EXECUTED
45e58: 4e92 jsr %a2@ <== NOT EXECUTED
pthread_mutex_unlock (&aio_request_queue.mutex);
45e5a: 4879 0006 04a8 pea 604a8 <aio_request_queue> <== NOT EXECUTED
45e60: 4e92 jsr %a2@ <== NOT EXECUTED
return AIO_CANCELED;
45e62: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
45e66: 4282 clrl %d2 <== NOT EXECUTED
45e68: 6000 00be braw 45f28 <aio_cancel+0x1f0> <== NOT EXECUTED
}
else
{
if (aiocbp->aio_fildes != fildes) {
45e6c: 2453 moveal %a3@,%a2 <== NOT EXECUTED
45e6e: b48a cmpl %a2,%d2 <== NOT EXECUTED
45e70: 6720 beqs 45e92 <aio_cancel+0x15a> <== NOT EXECUTED
pthread_mutex_unlock (&aio_request_queue.mutex);
45e72: 4879 0006 04a8 pea 604a8 <aio_request_queue> <== NOT EXECUTED
45e78: 4eb9 0004 6e98 jsr 46e98 <pthread_mutex_unlock> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one (EINVAL);
45e7e: 4eb9 0004 efc8 jsr 4efc8 <__errno> <== NOT EXECUTED
45e84: 2040 moveal %d0,%a0 <== NOT EXECUTED
45e86: 7016 moveq #22,%d0 <== NOT EXECUTED
45e88: 2080 movel %d0,%a0@ <== NOT EXECUTED
45e8a: 588f addql #4,%sp <== NOT EXECUTED
45e8c: 74ff moveq #-1,%d2 <== NOT EXECUTED
45e8e: 6000 0098 braw 45f28 <aio_cancel+0x1f0> <== NOT EXECUTED
}
r_chain = rtems_aio_search_fd (&aio_request_queue.work_req,
45e92: 42a7 clrl %sp@- <== NOT EXECUTED
45e94: 49f9 0004 60e6 lea 460e6 <rtems_aio_search_fd>,%a4 <== NOT EXECUTED
45e9a: 2f0a movel %a2,%sp@- <== NOT EXECUTED
45e9c: 4879 0006 04f0 pea 604f0 <aio_request_queue+0x48> <== NOT EXECUTED
45ea2: 4e94 jsr %a4@ <== NOT EXECUTED
fildes,
0);
if (r_chain == NULL)
45ea4: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
if (aiocbp->aio_fildes != fildes) {
pthread_mutex_unlock (&aio_request_queue.mutex);
rtems_set_errno_and_return_minus_one (EINVAL);
}
r_chain = rtems_aio_search_fd (&aio_request_queue.work_req,
45ea8: 2400 movel %d0,%d2 <== NOT EXECUTED
fildes,
0);
if (r_chain == NULL)
45eaa: 664c bnes 45ef8 <aio_cancel+0x1c0> <== NOT EXECUTED
if (!rtems_chain_is_empty (&aio_request_queue.idle_req))
45eac: 203c 0006 0500 movel #394496,%d0 <== NOT EXECUTED
45eb2: b0b9 0006 04fc cmpl 604fc <aio_request_queue+0x54>,%d0 <== NOT EXECUTED
45eb8: 673e beqs 45ef8 <aio_cancel+0x1c0> <== NOT EXECUTED
{
r_chain = rtems_aio_search_fd (&aio_request_queue.idle_req,
45eba: 42a7 clrl %sp@- <== NOT EXECUTED
45ebc: 2f0a movel %a2,%sp@- <== NOT EXECUTED
45ebe: 4879 0006 04fc pea 604fc <aio_request_queue+0x54> <== NOT EXECUTED
45ec4: 45f9 0004 6e98 lea 46e98 <pthread_mutex_unlock>,%a2 <== NOT EXECUTED
45eca: 4e94 jsr %a4@ <== NOT EXECUTED
fildes,
0);
if (r_chain == NULL)
45ecc: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
45ed0: 4a80 tstl %d0 <== NOT EXECUTED
45ed2: 660a bnes 45ede <aio_cancel+0x1a6> <== NOT EXECUTED
{
pthread_mutex_unlock (&aio_request_queue.mutex);
45ed4: 4879 0006 04a8 pea 604a8 <aio_request_queue> <== NOT EXECUTED
45eda: 4e92 jsr %a2@ <== NOT EXECUTED
45edc: 60a0 bras 45e7e <aio_cancel+0x146> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one (EINVAL);
}
result = rtems_aio_remove_req (&r_chain->next_fd, aiocbp);
45ede: 2f0b movel %a3,%sp@- <== NOT EXECUTED
45ee0: 2f00 movel %d0,%sp@- <== NOT EXECUTED
45ee2: 4eb9 0004 648c jsr 4648c <rtems_aio_remove_req> <== NOT EXECUTED
pthread_mutex_unlock (&aio_request_queue.mutex);
45ee8: 4879 0006 04a8 pea 604a8 <aio_request_queue> <== NOT EXECUTED
{
pthread_mutex_unlock (&aio_request_queue.mutex);
rtems_set_errno_and_return_minus_one (EINVAL);
}
result = rtems_aio_remove_req (&r_chain->next_fd, aiocbp);
45eee: 2400 movel %d0,%d2 <== NOT EXECUTED
pthread_mutex_unlock (&aio_request_queue.mutex);
45ef0: 4e92 jsr %a2@ <== NOT EXECUTED
return result;
45ef2: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
45ef6: 6030 bras 45f28 <aio_cancel+0x1f0> <== NOT EXECUTED
}
pthread_mutex_lock (&r_chain->mutex);
45ef8: 2442 moveal %d2,%a2 <== NOT EXECUTED
45efa: 45ea 001c lea %a2@(28),%a2 <== NOT EXECUTED
45efe: 2f0a movel %a2,%sp@- <== NOT EXECUTED
45f00: 4eb9 0004 6e00 jsr 46e00 <pthread_mutex_lock> <== NOT EXECUTED
result = rtems_aio_remove_req (&r_chain->next_fd, aiocbp);
45f06: 2f0b movel %a3,%sp@- <== NOT EXECUTED
45f08: 2f02 movel %d2,%sp@- <== NOT EXECUTED
45f0a: 4eb9 0004 648c jsr 4648c <rtems_aio_remove_req> <== NOT EXECUTED
45f10: 2400 movel %d0,%d2 <== NOT EXECUTED
pthread_mutex_unlock (&r_chain->mutex);
45f12: 2f0a movel %a2,%sp@- <== NOT EXECUTED
45f14: 45f9 0004 6e98 lea 46e98 <pthread_mutex_unlock>,%a2 <== NOT EXECUTED
45f1a: 4e92 jsr %a2@ <== NOT EXECUTED
pthread_mutex_unlock (&aio_request_queue.mutex);
45f1c: 4879 0006 04a8 pea 604a8 <aio_request_queue> <== NOT EXECUTED
45f22: 4e92 jsr %a2@ <== NOT EXECUTED
return result;
45f24: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
}
return AIO_ALLDONE;
}
45f28: 2002 movel %d2,%d0 <== NOT EXECUTED
45f2a: 4cee 1c04 fff0 moveml %fp@(-16),%d2/%a2-%a4 <== NOT EXECUTED
45f30: 4e5e unlk %fp <== NOT EXECUTED
00045f34 <aio_error>:
*/
int
aio_error (const struct aiocb *aiocbp)
{
45f34: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return aiocbp->error_code;
}
45f38: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
45f3c: 4e5e unlk %fp <== NOT EXECUTED
45f3e: 2028 0030 movel %a0@(48),%d0 <== NOT EXECUTED
00045f44 <aio_fsync>:
)
{
rtems_aio_request *req;
int mode;
if (op != O_SYNC)
45f44: 203c 0000 2000 movel #8192,%d0 <== NOT EXECUTED
int aio_fsync(
int op,
struct aiocb *aiocbp
)
{
45f4a: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
45f4e: 2f0a movel %a2,%sp@- <== NOT EXECUTED
45f50: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
rtems_aio_request *req;
int mode;
if (op != O_SYNC)
45f54: b0ae 0008 cmpl %fp@(8),%d0 <== NOT EXECUTED
45f58: 671a beqs 45f74 <aio_fsync+0x30> <== NOT EXECUTED
rtems_aio_set_errno_return_minus_one (EINVAL, aiocbp);
45f5a: 7216 moveq #22,%d1 <== NOT EXECUTED
45f5c: 70ff moveq #-1,%d0 <== NOT EXECUTED
45f5e: 2541 0030 movel %d1,%a2@(48) <== NOT EXECUTED
45f62: 2540 0034 movel %d0,%a2@(52) <== NOT EXECUTED
45f66: 4eb9 0004 efc8 jsr 4efc8 <__errno> <== NOT EXECUTED
45f6c: 2040 moveal %d0,%a0 <== NOT EXECUTED
45f6e: 7016 moveq #22,%d0 <== NOT EXECUTED
45f70: 2080 movel %d0,%a0@ <== NOT EXECUTED
45f72: 607e bras 45ff2 <aio_fsync+0xae> <== NOT EXECUTED
mode = fcntl (aiocbp->aio_fildes, F_GETFL);
45f74: 4878 0003 pea 3 <DIVIDE> <== NOT EXECUTED
45f78: 2f12 movel %a2@,%sp@- <== NOT EXECUTED
45f7a: 4eb9 0004 c05c jsr 4c05c <fcntl> <== NOT EXECUTED
if (!(((mode & O_ACCMODE) == O_WRONLY) || ((mode & O_ACCMODE) == O_RDWR)))
45f80: 508f addql #8,%sp <== NOT EXECUTED
45f82: 7203 moveq #3,%d1 <== NOT EXECUTED
45f84: c081 andl %d1,%d0 <== NOT EXECUTED
45f86: 123c 0001 moveb #1,%d1 <== NOT EXECUTED
45f8a: 5380 subql #1,%d0 <== NOT EXECUTED
45f8c: b280 cmpl %d0,%d1 <== NOT EXECUTED
45f8e: 641a bccs 45faa <aio_fsync+0x66> <== NOT EXECUTED
rtems_aio_set_errno_return_minus_one (EBADF, aiocbp);
45f90: 72ff moveq #-1,%d1 <== NOT EXECUTED
45f92: 7009 moveq #9,%d0 <== NOT EXECUTED
45f94: 2541 0034 movel %d1,%a2@(52) <== NOT EXECUTED
45f98: 2540 0030 movel %d0,%a2@(48) <== NOT EXECUTED
45f9c: 4eb9 0004 efc8 jsr 4efc8 <__errno> <== NOT EXECUTED
45fa2: 7209 moveq #9,%d1 <== NOT EXECUTED
45fa4: 2040 moveal %d0,%a0 <== NOT EXECUTED
45fa6: 2081 movel %d1,%a0@ <== NOT EXECUTED
45fa8: 6048 bras 45ff2 <aio_fsync+0xae> <== NOT EXECUTED
req = malloc (sizeof (rtems_aio_request));
45faa: 4878 0018 pea 18 <OPER2+0x4> <== NOT EXECUTED
45fae: 4eb9 0004 3724 jsr 43724 <malloc> <== NOT EXECUTED
if (req == NULL)
45fb4: 588f addql #4,%sp <== NOT EXECUTED
45fb6: 4a80 tstl %d0 <== NOT EXECUTED
45fb8: 661c bnes 45fd6 <aio_fsync+0x92> <== NOT EXECUTED
rtems_aio_set_errno_return_minus_one (EAGAIN, aiocbp);
45fba: 103c 000b moveb #11,%d0 <== NOT EXECUTED
45fbe: 72ff moveq #-1,%d1 <== NOT EXECUTED
45fc0: 2540 0030 movel %d0,%a2@(48) <== NOT EXECUTED
45fc4: 2541 0034 movel %d1,%a2@(52) <== NOT EXECUTED
45fc8: 4eb9 0004 efc8 jsr 4efc8 <__errno> <== NOT EXECUTED
45fce: 2040 moveal %d0,%a0 <== NOT EXECUTED
45fd0: 700b moveq #11,%d0 <== NOT EXECUTED
45fd2: 2080 movel %d0,%a0@ <== NOT EXECUTED
45fd4: 601c bras 45ff2 <aio_fsync+0xae> <== NOT EXECUTED
req->aiocbp = aiocbp;
45fd6: 2040 moveal %d0,%a0 <== NOT EXECUTED
req->aiocbp->aio_lio_opcode = LIO_SYNC;
45fd8: 7203 moveq #3,%d1 <== NOT EXECUTED
req = malloc (sizeof (rtems_aio_request));
if (req == NULL)
rtems_aio_set_errno_return_minus_one (EAGAIN, aiocbp);
req->aiocbp = aiocbp;
45fda: 214a 0014 movel %a2,%a0@(20) <== NOT EXECUTED
req->aiocbp->aio_lio_opcode = LIO_SYNC;
45fde: 2541 002c movel %d1,%a2@(44) <== NOT EXECUTED
return rtems_aio_enqueue (req);
}
45fe2: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
rtems_aio_set_errno_return_minus_one (EAGAIN, aiocbp);
req->aiocbp = aiocbp;
req->aiocbp->aio_lio_opcode = LIO_SYNC;
return rtems_aio_enqueue (req);
45fe6: 2d40 0008 movel %d0,%fp@(8) <== NOT EXECUTED
}
45fea: 4e5e unlk %fp <== NOT EXECUTED
rtems_aio_set_errno_return_minus_one (EAGAIN, aiocbp);
req->aiocbp = aiocbp;
req->aiocbp->aio_lio_opcode = LIO_SYNC;
return rtems_aio_enqueue (req);
45fec: 4ef9 0004 64de jmp 464de <rtems_aio_enqueue> <== NOT EXECUTED
}
45ff2: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
45ff6: 70ff moveq #-1,%d0 <== NOT EXECUTED
45ff8: 4e5e unlk %fp <== NOT EXECUTED
000466d8 <aio_read>:
* 0 - otherwise
*/
int
aio_read (struct aiocb *aiocbp)
{
466d8: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
466dc: 2f0a movel %a2,%sp@- <== NOT EXECUTED
rtems_aio_request *req;
int mode;
mode = fcntl (aiocbp->aio_fildes, F_GETFL);
466de: 4878 0003 pea 3 <DIVIDE> <== NOT EXECUTED
* 0 - otherwise
*/
int
aio_read (struct aiocb *aiocbp)
{
466e2: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
rtems_aio_request *req;
int mode;
mode = fcntl (aiocbp->aio_fildes, F_GETFL);
466e6: 2f12 movel %a2@,%sp@- <== NOT EXECUTED
466e8: 4eb9 0004 c05c jsr 4c05c <fcntl> <== NOT EXECUTED
if (!(((mode & O_ACCMODE) == O_RDONLY) || ((mode & O_ACCMODE) == O_RDWR)))
466ee: 508f addql #8,%sp <== NOT EXECUTED
466f0: 7203 moveq #3,%d1 <== NOT EXECUTED
466f2: c081 andl %d1,%d0 <== NOT EXECUTED
466f4: 6722 beqs 46718 <aio_read+0x40> <== NOT EXECUTED
466f6: 123c 0002 moveb #2,%d1 <== NOT EXECUTED
466fa: b280 cmpl %d0,%d1 <== NOT EXECUTED
466fc: 671a beqs 46718 <aio_read+0x40> <== NOT EXECUTED
rtems_aio_set_errno_return_minus_one (EBADF, aiocbp);
466fe: 7009 moveq #9,%d0 <== NOT EXECUTED
46700: 72ff moveq #-1,%d1 <== NOT EXECUTED
46702: 2540 0030 movel %d0,%a2@(48) <== NOT EXECUTED
46706: 2541 0034 movel %d1,%a2@(52) <== NOT EXECUTED
4670a: 4eb9 0004 efc8 jsr 4efc8 <__errno> <== NOT EXECUTED
46710: 2040 moveal %d0,%a0 <== NOT EXECUTED
46712: 7009 moveq #9,%d0 <== NOT EXECUTED
46714: 2080 movel %d0,%a0@ <== NOT EXECUTED
46716: 606e bras 46786 <aio_read+0xae> <== NOT EXECUTED
if (aiocbp->aio_reqprio < 0 || aiocbp->aio_reqprio > AIO_PRIO_DELTA_MAX)
46718: 4aaa 0014 tstl %a2@(20) <== NOT EXECUTED
4671c: 6606 bnes 46724 <aio_read+0x4c> <== NOT EXECUTED
rtems_aio_set_errno_return_minus_one (EINVAL, aiocbp);
if (aiocbp->aio_offset < 0)
4671e: 4aaa 0004 tstl %a2@(4) <== NOT EXECUTED
46722: 6a1a bpls 4673e <aio_read+0x66> <== NOT EXECUTED
rtems_aio_set_errno_return_minus_one (EINVAL, aiocbp);
46724: 72ff moveq #-1,%d1 <== NOT EXECUTED
46726: 7016 moveq #22,%d0 <== NOT EXECUTED
46728: 2541 0034 movel %d1,%a2@(52) <== NOT EXECUTED
4672c: 2540 0030 movel %d0,%a2@(48) <== NOT EXECUTED
46730: 4eb9 0004 efc8 jsr 4efc8 <__errno> <== NOT EXECUTED
46736: 7216 moveq #22,%d1 <== NOT EXECUTED
46738: 2040 moveal %d0,%a0 <== NOT EXECUTED
4673a: 2081 movel %d1,%a0@ <== NOT EXECUTED
4673c: 6048 bras 46786 <aio_read+0xae> <== NOT EXECUTED
req = malloc (sizeof (rtems_aio_request));
4673e: 4878 0018 pea 18 <OPER2+0x4> <== NOT EXECUTED
46742: 4eb9 0004 3724 jsr 43724 <malloc> <== NOT EXECUTED
if (req == NULL)
46748: 588f addql #4,%sp <== NOT EXECUTED
4674a: 4a80 tstl %d0 <== NOT EXECUTED
4674c: 661c bnes 4676a <aio_read+0x92> <== NOT EXECUTED
rtems_aio_set_errno_return_minus_one (EAGAIN, aiocbp);
4674e: 103c 000b moveb #11,%d0 <== NOT EXECUTED
46752: 72ff moveq #-1,%d1 <== NOT EXECUTED
46754: 2540 0030 movel %d0,%a2@(48) <== NOT EXECUTED
46758: 2541 0034 movel %d1,%a2@(52) <== NOT EXECUTED
4675c: 4eb9 0004 efc8 jsr 4efc8 <__errno> <== NOT EXECUTED
46762: 2040 moveal %d0,%a0 <== NOT EXECUTED
46764: 700b moveq #11,%d0 <== NOT EXECUTED
46766: 2080 movel %d0,%a0@ <== NOT EXECUTED
46768: 601c bras 46786 <aio_read+0xae> <== NOT EXECUTED
req->aiocbp = aiocbp;
4676a: 2040 moveal %d0,%a0 <== NOT EXECUTED
req->aiocbp->aio_lio_opcode = LIO_READ;
4676c: 7201 moveq #1,%d1 <== NOT EXECUTED
req = malloc (sizeof (rtems_aio_request));
if (req == NULL)
rtems_aio_set_errno_return_minus_one (EAGAIN, aiocbp);
req->aiocbp = aiocbp;
4676e: 214a 0014 movel %a2,%a0@(20) <== NOT EXECUTED
req->aiocbp->aio_lio_opcode = LIO_READ;
46772: 2541 002c movel %d1,%a2@(44) <== NOT EXECUTED
return rtems_aio_enqueue (req);
}
46776: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
rtems_aio_set_errno_return_minus_one (EAGAIN, aiocbp);
req->aiocbp = aiocbp;
req->aiocbp->aio_lio_opcode = LIO_READ;
return rtems_aio_enqueue (req);
4677a: 2d40 0008 movel %d0,%fp@(8) <== NOT EXECUTED
}
4677e: 4e5e unlk %fp <== NOT EXECUTED
rtems_aio_set_errno_return_minus_one (EAGAIN, aiocbp);
req->aiocbp = aiocbp;
req->aiocbp->aio_lio_opcode = LIO_READ;
return rtems_aio_enqueue (req);
46780: 4ef9 0004 64de jmp 464de <rtems_aio_enqueue> <== NOT EXECUTED
}
46786: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
4678a: 70ff moveq #-1,%d0 <== NOT EXECUTED
4678c: 4e5e unlk %fp <== NOT EXECUTED
00046790 <aio_return>:
* aiocbp->return_value
*/
ssize_t
aio_return (const struct aiocb *aiocbp)
{
46790: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return aiocbp->return_value;
}
46794: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
46798: 4e5e unlk %fp <== NOT EXECUTED
4679a: 2028 0034 movel %a0@(52),%d0 <== NOT EXECUTED
000453f4 <aio_suspend>:
int aio_suspend(
const struct aiocb * const list[] __attribute__((unused)),
int nent __attribute__((unused)),
const struct timespec *timeout __attribute__((unused))
)
{
453f4: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
453f8: 4eb9 0004 d1a4 jsr 4d1a4 <__errno> <== NOT EXECUTED
}
453fe: 4e5e unlk %fp <== NOT EXECUTED
const struct aiocb * const list[] __attribute__((unused)),
int nent __attribute__((unused)),
const struct timespec *timeout __attribute__((unused))
)
{
rtems_set_errno_and_return_minus_one( ENOSYS );
45400: 2040 moveal %d0,%a0 <== NOT EXECUTED
45402: 7058 moveq #88,%d0 <== NOT EXECUTED
45404: 2080 movel %d0,%a0@ <== NOT EXECUTED
}
45406: 70ff moveq #-1,%d0 <== NOT EXECUTED
...
000467a0 <aio_write>:
* 0 - otherwise
*/
int
aio_write (struct aiocb *aiocbp)
{
467a0: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
467a4: 2f0a movel %a2,%sp@- <== NOT EXECUTED
rtems_aio_request *req;
int mode;
mode = fcntl (aiocbp->aio_fildes, F_GETFL);
467a6: 4878 0003 pea 3 <DIVIDE> <== NOT EXECUTED
* 0 - otherwise
*/
int
aio_write (struct aiocb *aiocbp)
{
467aa: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
rtems_aio_request *req;
int mode;
mode = fcntl (aiocbp->aio_fildes, F_GETFL);
467ae: 2f12 movel %a2@,%sp@- <== NOT EXECUTED
467b0: 4eb9 0004 c05c jsr 4c05c <fcntl> <== NOT EXECUTED
if (!(((mode & O_ACCMODE) == O_WRONLY) || ((mode & O_ACCMODE) == O_RDWR)))
467b6: 508f addql #8,%sp <== NOT EXECUTED
467b8: 7203 moveq #3,%d1 <== NOT EXECUTED
467ba: c081 andl %d1,%d0 <== NOT EXECUTED
467bc: 123c 0001 moveb #1,%d1 <== NOT EXECUTED
467c0: 5380 subql #1,%d0 <== NOT EXECUTED
467c2: b280 cmpl %d0,%d1 <== NOT EXECUTED
467c4: 641a bccs 467e0 <aio_write+0x40> <== NOT EXECUTED
rtems_aio_set_errno_return_minus_one (EBADF, aiocbp);
467c6: 7009 moveq #9,%d0 <== NOT EXECUTED
467c8: 72ff moveq #-1,%d1 <== NOT EXECUTED
467ca: 2540 0030 movel %d0,%a2@(48) <== NOT EXECUTED
467ce: 2541 0034 movel %d1,%a2@(52) <== NOT EXECUTED
467d2: 4eb9 0004 efc8 jsr 4efc8 <__errno> <== NOT EXECUTED
467d8: 2040 moveal %d0,%a0 <== NOT EXECUTED
467da: 7009 moveq #9,%d0 <== NOT EXECUTED
467dc: 2080 movel %d0,%a0@ <== NOT EXECUTED
467de: 606e bras 4684e <aio_write+0xae> <== NOT EXECUTED
if (aiocbp->aio_reqprio < 0 || aiocbp->aio_reqprio > AIO_PRIO_DELTA_MAX)
467e0: 4aaa 0014 tstl %a2@(20) <== NOT EXECUTED
467e4: 6606 bnes 467ec <aio_write+0x4c> <== NOT EXECUTED
rtems_aio_set_errno_return_minus_one (EINVAL, aiocbp);
if (aiocbp->aio_offset < 0)
467e6: 4aaa 0004 tstl %a2@(4) <== NOT EXECUTED
467ea: 6a1a bpls 46806 <aio_write+0x66> <== NOT EXECUTED
rtems_aio_set_errno_return_minus_one (EINVAL, aiocbp);
467ec: 72ff moveq #-1,%d1 <== NOT EXECUTED
467ee: 7016 moveq #22,%d0 <== NOT EXECUTED
467f0: 2541 0034 movel %d1,%a2@(52) <== NOT EXECUTED
467f4: 2540 0030 movel %d0,%a2@(48) <== NOT EXECUTED
467f8: 4eb9 0004 efc8 jsr 4efc8 <__errno> <== NOT EXECUTED
467fe: 7216 moveq #22,%d1 <== NOT EXECUTED
46800: 2040 moveal %d0,%a0 <== NOT EXECUTED
46802: 2081 movel %d1,%a0@ <== NOT EXECUTED
46804: 6048 bras 4684e <aio_write+0xae> <== NOT EXECUTED
req = malloc (sizeof (rtems_aio_request));
46806: 4878 0018 pea 18 <OPER2+0x4> <== NOT EXECUTED
4680a: 4eb9 0004 3724 jsr 43724 <malloc> <== NOT EXECUTED
if (req == NULL)
46810: 588f addql #4,%sp <== NOT EXECUTED
46812: 4a80 tstl %d0 <== NOT EXECUTED
46814: 661c bnes 46832 <aio_write+0x92> <== NOT EXECUTED
rtems_aio_set_errno_return_minus_one (EAGAIN, aiocbp);
46816: 103c 000b moveb #11,%d0 <== NOT EXECUTED
4681a: 72ff moveq #-1,%d1 <== NOT EXECUTED
4681c: 2540 0030 movel %d0,%a2@(48) <== NOT EXECUTED
46820: 2541 0034 movel %d1,%a2@(52) <== NOT EXECUTED
46824: 4eb9 0004 efc8 jsr 4efc8 <__errno> <== NOT EXECUTED
4682a: 2040 moveal %d0,%a0 <== NOT EXECUTED
4682c: 700b moveq #11,%d0 <== NOT EXECUTED
4682e: 2080 movel %d0,%a0@ <== NOT EXECUTED
46830: 601c bras 4684e <aio_write+0xae> <== NOT EXECUTED
req->aiocbp = aiocbp;
46832: 2040 moveal %d0,%a0 <== NOT EXECUTED
req->aiocbp->aio_lio_opcode = LIO_WRITE;
46834: 7202 moveq #2,%d1 <== NOT EXECUTED
req = malloc (sizeof (rtems_aio_request));
if (req == NULL)
rtems_aio_set_errno_return_minus_one (EAGAIN, aiocbp);
req->aiocbp = aiocbp;
46836: 214a 0014 movel %a2,%a0@(20) <== NOT EXECUTED
req->aiocbp->aio_lio_opcode = LIO_WRITE;
4683a: 2541 002c movel %d1,%a2@(44) <== NOT EXECUTED
return rtems_aio_enqueue (req);
}
4683e: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
rtems_aio_set_errno_return_minus_one (EAGAIN, aiocbp);
req->aiocbp = aiocbp;
req->aiocbp->aio_lio_opcode = LIO_WRITE;
return rtems_aio_enqueue (req);
46842: 2d40 0008 movel %d0,%fp@(8) <== NOT EXECUTED
}
46846: 4e5e unlk %fp <== NOT EXECUTED
rtems_aio_set_errno_return_minus_one (EAGAIN, aiocbp);
req->aiocbp = aiocbp;
req->aiocbp->aio_lio_opcode = LIO_WRITE;
return rtems_aio_enqueue (req);
46848: 4ef9 0004 64de jmp 464de <rtems_aio_enqueue> <== NOT EXECUTED
}
4684e: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
46852: 70ff moveq #-1,%d0 <== NOT EXECUTED
46854: 4e5e unlk %fp <== NOT EXECUTED
00046dc8 <alarm>:
}
unsigned int alarm(
unsigned int seconds
)
{
46dc8: 4e56 fff4 linkw %fp,#-12 <== NOT EXECUTED
46dcc: 48d7 001c moveml %d2-%d4,%sp@ <== NOT EXECUTED
46dd0: 262e 0008 movel %fp@(8),%d3 <== NOT EXECUTED
/*
* Initialize the timer used to implement alarm().
*/
if ( !the_timer->routine ) {
46dd4: 4ab9 0006 1efc tstl 61efc <_POSIX_signals_Alarm_timer+0x1c><== NOT EXECUTED
46dda: 6620 bnes 46dfc <alarm+0x34> <== NOT EXECUTED
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
46ddc: 42b9 0006 1ee8 clrl 61ee8 <_POSIX_signals_Alarm_timer+0x8> <== NOT EXECUTED
the_watchdog->routine = routine;
46de2: 203c 0004 6dac movel #290220,%d0 <== NOT EXECUTED
the_watchdog->id = id;
46de8: 42b9 0006 1f00 clrl 61f00 <_POSIX_signals_Alarm_timer+0x20><== NOT EXECUTED
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
the_watchdog->routine = routine;
46dee: 23c0 0006 1efc movel %d0,61efc <_POSIX_signals_Alarm_timer+0x1c><== NOT EXECUTED
the_watchdog->id = id;
the_watchdog->user_data = user_data;
46df4: 42b9 0006 1f04 clrl 61f04 <_POSIX_signals_Alarm_timer+0x24><== NOT EXECUTED
46dfa: 6036 bras 46e32 <alarm+0x6a> <== NOT EXECUTED
_Watchdog_Initialize( the_timer, _POSIX_signals_Alarm_TSR, 0, NULL );
} else {
Watchdog_States state;
state = _Watchdog_Remove( the_timer );
46dfc: 4879 0006 1ee0 pea 61ee0 <_POSIX_signals_Alarm_timer> <== NOT EXECUTED
46e02: 4eb9 0004 b580 jsr 4b580 <_Watchdog_Remove> <== NOT EXECUTED
if ( (state == WATCHDOG_ACTIVE) || (state == WATCHDOG_REMOVE_IT) ) {
46e08: 588f addql #4,%sp <== NOT EXECUTED
46e0a: 7201 moveq #1,%d1 <== NOT EXECUTED
46e0c: 5580 subql #2,%d0 <== NOT EXECUTED
46e0e: b280 cmpl %d0,%d1 <== NOT EXECUTED
46e10: 6520 bcss 46e32 <alarm+0x6a> <== NOT EXECUTED
* boot. Since alarm() is dealing in seconds, we must account for
* this.
*/
remaining = the_timer->initial -
((the_timer->stop_time - the_timer->start_time) / TOD_TICKS_PER_SECOND);
46e12: 2839 0006 1ef8 movel 61ef8 <_POSIX_signals_Alarm_timer+0x18>,%d4<== NOT EXECUTED
46e18: 98b9 0006 1ef4 subl 61ef4 <_POSIX_signals_Alarm_timer+0x14>,%d4<== NOT EXECUTED
* The stop_time and start_time fields are snapshots of ticks since
* boot. Since alarm() is dealing in seconds, we must account for
* this.
*/
remaining = the_timer->initial -
46e1e: 2439 0006 1eec movel 61eec <_POSIX_signals_Alarm_timer+0xc>,%d2<== NOT EXECUTED
((the_timer->stop_time - the_timer->start_time) / TOD_TICKS_PER_SECOND);
46e24: 4eb9 0004 9300 jsr 49300 <TOD_TICKS_PER_SECOND_method> <== NOT EXECUTED
46e2a: 4c40 4004 remul %d0,%d4,%d4 <== NOT EXECUTED
* The stop_time and start_time fields are snapshots of ticks since
* boot. Since alarm() is dealing in seconds, we must account for
* this.
*/
remaining = the_timer->initial -
46e2e: 9484 subl %d4,%d2 <== NOT EXECUTED
46e30: 6002 bras 46e34 <alarm+0x6c> <== NOT EXECUTED
unsigned int alarm(
unsigned int seconds
)
{
unsigned int remaining = 0;
46e32: 4282 clrl %d2 <== NOT EXECUTED
remaining = the_timer->initial -
((the_timer->stop_time - the_timer->start_time) / TOD_TICKS_PER_SECOND);
}
}
if ( seconds )
46e34: 4a83 tstl %d3 <== NOT EXECUTED
46e36: 671a beqs 46e52 <alarm+0x8a> <== NOT EXECUTED
)
{
the_watchdog->initial = units;
_Watchdog_Insert( &_Watchdog_Seconds_chain, the_watchdog );
46e38: 4879 0006 1ee0 pea 61ee0 <_POSIX_signals_Alarm_timer> <== NOT EXECUTED
46e3e: 4879 0006 2244 pea 62244 <_Watchdog_Seconds_chain> <== NOT EXECUTED
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
46e44: 23c3 0006 1eec movel %d3,61eec <_POSIX_signals_Alarm_timer+0xc><== NOT EXECUTED
_Watchdog_Insert( &_Watchdog_Seconds_chain, the_watchdog );
46e4a: 4eb9 0004 b464 jsr 4b464 <_Watchdog_Insert> <== NOT EXECUTED
46e50: 508f addql #8,%sp <== NOT EXECUTED
_Watchdog_Insert_seconds( the_timer, seconds );
return remaining;
}
46e52: 2002 movel %d2,%d0 <== NOT EXECUTED
46e54: 4cee 001c fff4 moveml %fp@(-12),%d2-%d4 <== NOT EXECUTED
46e5a: 4e5e unlk %fp <== NOT EXECUTED
...
0004540c <clock_getcpuclockid>:
int clock_getcpuclockid(
pid_t pid,
clockid_t *clock_id
)
{
4540c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
45410: 4eb9 0004 d1a4 jsr 4d1a4 <__errno> <== NOT EXECUTED
}
45416: 4e5e unlk %fp <== NOT EXECUTED
int clock_getcpuclockid(
pid_t pid,
clockid_t *clock_id
)
{
rtems_set_errno_and_return_minus_one( ENOSYS );
45418: 2040 moveal %d0,%a0 <== NOT EXECUTED
4541a: 7058 moveq #88,%d0 <== NOT EXECUTED
4541c: 2080 movel %d0,%a0@ <== NOT EXECUTED
}
4541e: 70ff moveq #-1,%d0 <== NOT EXECUTED
...
00045424 <clock_getenable_attr>:
int clock_getenable_attr(
clockid_t clock_id,
int *attr
)
{
45424: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
45428: 4eb9 0004 d1a4 jsr 4d1a4 <__errno> <== NOT EXECUTED
}
4542e: 4e5e unlk %fp <== NOT EXECUTED
int clock_getenable_attr(
clockid_t clock_id,
int *attr
)
{
rtems_set_errno_and_return_minus_one( ENOSYS );
45430: 2040 moveal %d0,%a0 <== NOT EXECUTED
45432: 7058 moveq #88,%d0 <== NOT EXECUTED
45434: 2080 movel %d0,%a0@ <== NOT EXECUTED
}
45436: 70ff moveq #-1,%d0 <== NOT EXECUTED
...
00045920 <clock_getres>:
int clock_getres(
clockid_t clock_id,
struct timespec *res
)
{
45920: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
45924: 206e 000c moveal %fp@(12),%a0 <== NOT EXECUTED
45928: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4592a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
if ( !res )
4592c: 4a88 tstl %a0 <== NOT EXECUTED
4592e: 6732 beqs 45962 <clock_getres+0x42> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
switch ( clock_id ) {
45930: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
45934: 7202 moveq #2,%d1 <== NOT EXECUTED
45936: 5380 subql #1,%d0 <== NOT EXECUTED
45938: b280 cmpl %d0,%d1 <== NOT EXECUTED
4593a: 6526 bcss 45962 <clock_getres+0x42> <== NOT EXECUTED
case CLOCK_REALTIME:
case CLOCK_PROCESS_CPUTIME:
case CLOCK_THREAD_CPUTIME:
if ( res ) {
res->tv_sec = rtems_configuration_get_microseconds_per_tick() /
4593c: 2039 0005 e1c0 movel 5e1c0 <Configuration+0xc>,%d0 <== NOT EXECUTED
45942: 2400 movel %d0,%d2 <== NOT EXECUTED
45944: 263c 000f 4240 movel #1000000,%d3 <== NOT EXECUTED
4594a: 4c43 2002 remul %d3,%d2,%d2 <== NOT EXECUTED
TOD_MICROSECONDS_PER_SECOND;
res->tv_nsec = rtems_configuration_get_nanoseconds_per_tick();
4594e: 223c 0000 03e8 movel #1000,%d1 <== NOT EXECUTED
45954: 4c00 1800 mulsl %d0,%d1 <== NOT EXECUTED
default:
rtems_set_errno_and_return_minus_one( EINVAL );
}
return 0;
45958: 4280 clrl %d0 <== NOT EXECUTED
case CLOCK_REALTIME:
case CLOCK_PROCESS_CPUTIME:
case CLOCK_THREAD_CPUTIME:
if ( res ) {
res->tv_sec = rtems_configuration_get_microseconds_per_tick() /
4595a: 2082 movel %d2,%a0@ <== NOT EXECUTED
TOD_MICROSECONDS_PER_SECOND;
res->tv_nsec = rtems_configuration_get_nanoseconds_per_tick();
4595c: 2141 0004 movel %d1,%a0@(4) <== NOT EXECUTED
45960: 600e bras 45970 <clock_getres+0x50> <== NOT EXECUTED
}
break;
default:
rtems_set_errno_and_return_minus_one( EINVAL );
45962: 4eb9 0004 d65c jsr 4d65c <__errno> <== NOT EXECUTED
45968: 2040 moveal %d0,%a0 <== NOT EXECUTED
4596a: 7016 moveq #22,%d0 <== NOT EXECUTED
4596c: 2080 movel %d0,%a0@ <== NOT EXECUTED
4596e: 70ff moveq #-1,%d0 <== NOT EXECUTED
}
return 0;
}
45970: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
45974: 262e fffc movel %fp@(-4),%d3 <== NOT EXECUTED
45978: 4e5e unlk %fp <== NOT EXECUTED
00045470 <clock_gettime>:
int clock_gettime(
clockid_t clock_id,
struct timespec *tp
)
{
45470: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
45474: 222e 0008 movel %fp@(8),%d1 <== NOT EXECUTED
45478: 202e 000c movel %fp@(12),%d0 <== NOT EXECUTED
4547c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
if ( !tp )
4547e: 4a80 tstl %d0 <== NOT EXECUTED
45480: 6608 bnes 4548a <clock_gettime+0x1a> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
45482: 4eb9 0004 d7e4 jsr 4d7e4 <__errno> <== NOT EXECUTED
45488: 6042 bras 454cc <clock_gettime+0x5c> <== NOT EXECUTED
if ( clock_id == CLOCK_REALTIME ) {
4548a: 7401 moveq #1,%d2 <== NOT EXECUTED
4548c: b481 cmpl %d1,%d2 <== NOT EXECUTED
4548e: 660a bnes 4549a <clock_gettime+0x2a> <== NOT EXECUTED
_TOD_Get(tp);
45490: 2f00 movel %d0,%sp@- <== NOT EXECUTED
45492: 4eb9 0004 70f8 jsr 470f8 <_TOD_Get> <== NOT EXECUTED
45498: 6014 bras 454ae <clock_gettime+0x3e> <== NOT EXECUTED
return 0;
}
#ifdef CLOCK_MONOTONIC
if ( clock_id == CLOCK_MONOTONIC ) {
4549a: 7404 moveq #4,%d2 <== NOT EXECUTED
4549c: b481 cmpl %d1,%d2 <== NOT EXECUTED
4549e: 6706 beqs 454a6 <clock_gettime+0x36> <== NOT EXECUTED
return 0;
}
#endif
#ifdef _POSIX_CPUTIME
if ( clock_id == CLOCK_PROCESS_CPUTIME ) {
454a0: 7402 moveq #2,%d2 <== NOT EXECUTED
454a2: b481 cmpl %d1,%d2 <== NOT EXECUTED
454a4: 660e bnes 454b4 <clock_gettime+0x44> <== NOT EXECUTED
_TOD_Get_uptime_as_timespec( tp );
454a6: 2f00 movel %d0,%sp@- <== NOT EXECUTED
454a8: 4eb9 0004 7164 jsr 47164 <_TOD_Get_uptime_as_timespec> <== NOT EXECUTED
return 0;
454ae: 588f addql #4,%sp <== NOT EXECUTED
454b0: 4280 clrl %d0 <== NOT EXECUTED
454b2: 6020 bras 454d4 <clock_gettime+0x64> <== NOT EXECUTED
454b4: 41f9 0004 d7e4 lea 4d7e4 <__errno>,%a0 <== NOT EXECUTED
}
#endif
#ifdef _POSIX_THREAD_CPUTIME
if ( clock_id == CLOCK_THREAD_CPUTIME )
454ba: 7003 moveq #3,%d0 <== NOT EXECUTED
454bc: b081 cmpl %d1,%d0 <== NOT EXECUTED
454be: 660a bnes 454ca <clock_gettime+0x5a> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
454c0: 4e90 jsr %a0@ <== NOT EXECUTED
454c2: 7258 moveq #88,%d1 <== NOT EXECUTED
454c4: 2040 moveal %d0,%a0 <== NOT EXECUTED
454c6: 2081 movel %d1,%a0@ <== NOT EXECUTED
454c8: 6008 bras 454d2 <clock_gettime+0x62> <== NOT EXECUTED
#endif
rtems_set_errno_and_return_minus_one( EINVAL );
454ca: 4e90 jsr %a0@ <== NOT EXECUTED
454cc: 2040 moveal %d0,%a0 <== NOT EXECUTED
454ce: 7016 moveq #22,%d0 <== NOT EXECUTED
454d0: 2080 movel %d0,%a0@ <== NOT EXECUTED
454d2: 70ff moveq #-1,%d0 <== NOT EXECUTED
return 0;
}
454d4: 242e fffc movel %fp@(-4),%d2 <== NOT EXECUTED
454d8: 4e5e unlk %fp <== NOT EXECUTED
0004543c <clock_setenable_attr>:
int clock_setenable_attr(
clockid_t clock_id,
int attr
)
{
4543c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
45440: 4eb9 0004 d1a4 jsr 4d1a4 <__errno> <== NOT EXECUTED
}
45446: 4e5e unlk %fp <== NOT EXECUTED
int clock_setenable_attr(
clockid_t clock_id,
int attr
)
{
rtems_set_errno_and_return_minus_one( ENOSYS );
45448: 2040 moveal %d0,%a0 <== NOT EXECUTED
4544a: 7058 moveq #88,%d0 <== NOT EXECUTED
4544c: 2080 movel %d0,%a0@ <== NOT EXECUTED
}
4544e: 70ff moveq #-1,%d0 <== NOT EXECUTED
...
000454dc <clock_settime>:
int clock_settime(
clockid_t clock_id,
const struct timespec *tp
)
{
454dc: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
454e0: 222e 0008 movel %fp@(8),%d1 <== NOT EXECUTED
454e4: 206e 000c moveal %fp@(12),%a0 <== NOT EXECUTED
if ( !tp )
454e8: 4a88 tstl %a0 <== NOT EXECUTED
454ea: 6710 beqs 454fc <clock_settime+0x20> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
if ( clock_id == CLOCK_REALTIME ) {
454ec: 7001 moveq #1,%d0 <== NOT EXECUTED
454ee: b081 cmpl %d1,%d0 <== NOT EXECUTED
454f0: 6634 bnes 45526 <clock_settime+0x4a> <== NOT EXECUTED
if ( tp->tv_sec < TOD_SECONDS_1970_THROUGH_1988 )
454f2: 203c 21da e4ff movel #567993599,%d0 <== NOT EXECUTED
454f8: b090 cmpl %a0@,%d0 <== NOT EXECUTED
454fa: 6508 bcss 45504 <clock_settime+0x28> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
454fc: 4eb9 0004 d7e4 jsr 4d7e4 <__errno> <== NOT EXECUTED
45502: 6048 bras 4554c <clock_settime+0x70> <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
45504: 2039 0005 f7b8 movel 5f7b8 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
4550a: 5280 addql #1,%d0 <== NOT EXECUTED
4550c: 23c0 0005 f7b8 movel %d0,5f7b8 <_Thread_Dispatch_disable_level><== NOT EXECUTED
_Thread_Disable_dispatch();
_TOD_Set( tp );
45512: 2f08 movel %a0,%sp@- <== NOT EXECUTED
45514: 4eb9 0004 71bc jsr 471bc <_TOD_Set> <== NOT EXECUTED
_Thread_Enable_dispatch();
4551a: 4eb9 0004 8532 jsr 48532 <_Thread_Enable_dispatch> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
#endif
else
rtems_set_errno_and_return_minus_one( EINVAL );
return 0;
45520: 588f addql #4,%sp <== NOT EXECUTED
45522: 4280 clrl %d0 <== NOT EXECUTED
45524: 602e bras 45554 <clock_settime+0x78> <== NOT EXECUTED
_Thread_Disable_dispatch();
_TOD_Set( tp );
_Thread_Enable_dispatch();
}
#ifdef _POSIX_CPUTIME
else if ( clock_id == CLOCK_PROCESS_CPUTIME )
45526: 7002 moveq #2,%d0 <== NOT EXECUTED
45528: b081 cmpl %d1,%d0 <== NOT EXECUTED
4552a: 6608 bnes 45534 <clock_settime+0x58> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
4552c: 4eb9 0004 d7e4 jsr 4d7e4 <__errno> <== NOT EXECUTED
45532: 600e bras 45542 <clock_settime+0x66> <== NOT EXECUTED
45534: 41f9 0004 d7e4 lea 4d7e4 <__errno>,%a0 <== NOT EXECUTED
#endif
#ifdef _POSIX_THREAD_CPUTIME
else if ( clock_id == CLOCK_THREAD_CPUTIME )
4553a: 7003 moveq #3,%d0 <== NOT EXECUTED
4553c: b081 cmpl %d1,%d0 <== NOT EXECUTED
4553e: 660a bnes 4554a <clock_settime+0x6e> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
45540: 4e90 jsr %a0@ <== NOT EXECUTED
45542: 2040 moveal %d0,%a0 <== NOT EXECUTED
45544: 7258 moveq #88,%d1 <== NOT EXECUTED
45546: 2081 movel %d1,%a0@ <== NOT EXECUTED
45548: 6008 bras 45552 <clock_settime+0x76> <== NOT EXECUTED
#endif
else
rtems_set_errno_and_return_minus_one( EINVAL );
4554a: 4e90 jsr %a0@ <== NOT EXECUTED
4554c: 2040 moveal %d0,%a0 <== NOT EXECUTED
4554e: 7016 moveq #22,%d0 <== NOT EXECUTED
45550: 2080 movel %d0,%a0@ <== NOT EXECUTED
45552: 70ff moveq #-1,%d0 <== NOT EXECUTED
return 0;
}
45554: 4e5e unlk %fp <== NOT EXECUTED
00045454 <fork>:
#include <sys/types.h>
#include <errno.h>
#include <rtems/seterr.h>
int fork( void )
{
45454: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
45458: 4eb9 0004 d1a4 jsr 4d1a4 <__errno> <== NOT EXECUTED
}
4545e: 4e5e unlk %fp <== NOT EXECUTED
#include <errno.h>
#include <rtems/seterr.h>
int fork( void )
{
rtems_set_errno_and_return_minus_one( ENOSYS );
45460: 2040 moveal %d0,%a0 <== NOT EXECUTED
45462: 7058 moveq #88,%d0 <== NOT EXECUTED
45464: 2080 movel %d0,%a0@ <== NOT EXECUTED
}
45466: 70ff moveq #-1,%d0 <== NOT EXECUTED
...
0004528c <getitimer>:
int getitimer(
int which,
struct itimerval *value
)
{
4528c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
if ( !value )
45290: 4aae 000c tstl %fp@(12) <== NOT EXECUTED
45294: 660e bnes 452a4 <getitimer+0x18> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EFAULT );
45296: 4eb9 0004 cf58 jsr 4cf58 <__errno> <== NOT EXECUTED
4529c: 2040 moveal %d0,%a0 <== NOT EXECUTED
4529e: 700e moveq #14,%d0 <== NOT EXECUTED
452a0: 2080 movel %d0,%a0@ <== NOT EXECUTED
452a2: 6020 bras 452c4 <getitimer+0x38> <== NOT EXECUTED
452a4: 41f9 0004 cf58 lea 4cf58 <__errno>,%a0 <== NOT EXECUTED
switch ( which ) {
452aa: 7002 moveq #2,%d0 <== NOT EXECUTED
452ac: b0ae 0008 cmpl %fp@(8),%d0 <== NOT EXECUTED
452b0: 650a bcss 452bc <getitimer+0x30> <== NOT EXECUTED
case ITIMER_REAL:
case ITIMER_VIRTUAL:
case ITIMER_PROF:
rtems_set_errno_and_return_minus_one( ENOSYS );
452b2: 4e90 jsr %a0@ <== NOT EXECUTED
452b4: 7258 moveq #88,%d1 <== NOT EXECUTED
452b6: 2040 moveal %d0,%a0 <== NOT EXECUTED
452b8: 2081 movel %d1,%a0@ <== NOT EXECUTED
452ba: 6008 bras 452c4 <getitimer+0x38> <== NOT EXECUTED
default:
break;
}
rtems_set_errno_and_return_minus_one( EINVAL );
452bc: 4e90 jsr %a0@ <== NOT EXECUTED
452be: 2040 moveal %d0,%a0 <== NOT EXECUTED
452c0: 7016 moveq #22,%d0 <== NOT EXECUTED
452c2: 2080 movel %d0,%a0@ <== NOT EXECUTED
}
452c4: 70ff moveq #-1,%d0 <== NOT EXECUTED
452c6: 4e5e unlk %fp <== NOT EXECUTED
...
0004582c <kill>:
int kill(
pid_t pid,
int sig
)
{
4582c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return killinfo( pid, sig, NULL );
45830: 42a7 clrl %sp@- <== NOT EXECUTED
45832: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
45836: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4583a: 4eb9 0004 b138 jsr 4b138 <killinfo> <== NOT EXECUTED
}
45840: 4e5e unlk %fp <== NOT EXECUTED
0005a08c <killinfo>:
int killinfo(
pid_t pid,
int sig,
const union sigval *value
)
{
5a08c: 4e56 ffd0 linkw %fp,#-48 <== NOT EXECUTED
5a090: 48d7 1cfc moveml %d2-%d7/%a2-%a4,%sp@ <== NOT EXECUTED
5a094: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
5a098: 246e 0010 moveal %fp@(16),%a2 <== NOT EXECUTED
POSIX_signals_Siginfo_node *psiginfo;
/*
* Only supported for the "calling process" (i.e. this node).
*/
if ( pid != getpid() )
5a09c: 4eb9 0005 9cb0 jsr 59cb0 <getpid> <== NOT EXECUTED
5a0a2: b0ae 0008 cmpl %fp@(8),%d0 <== NOT EXECUTED
5a0a6: 6710 beqs 5a0b8 <killinfo+0x2c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ESRCH );
5a0a8: 4eb9 0004 c954 jsr 4c954 <__errno> <== NOT EXECUTED
5a0ae: 7403 moveq #3,%d2 <== NOT EXECUTED
5a0b0: 2040 moveal %d0,%a0 <== NOT EXECUTED
5a0b2: 2082 movel %d2,%a0@ <== NOT EXECUTED
5a0b4: 6000 01ae braw 5a264 <killinfo+0x1d8> <== NOT EXECUTED
/*
* Validate the signal passed.
*/
if ( !sig )
5a0b8: 4a82 tstl %d2 <== NOT EXECUTED
5a0ba: 670a beqs 5a0c6 <killinfo+0x3a> <== NOT EXECUTED
static inline bool is_valid_signo(
int signo
)
{
return ((signo) >= 1 && (signo) <= 32 );
5a0bc: 2202 movel %d2,%d1 <== NOT EXECUTED
5a0be: 5381 subql #1,%d1 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
if ( !is_valid_signo(sig) )
5a0c0: 701f moveq #31,%d0 <== NOT EXECUTED
5a0c2: b081 cmpl %d1,%d0 <== NOT EXECUTED
5a0c4: 6410 bccs 5a0d6 <killinfo+0x4a> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
5a0c6: 4eb9 0004 c954 jsr 4c954 <__errno> <== NOT EXECUTED
5a0cc: 7216 moveq #22,%d1 <== NOT EXECUTED
5a0ce: 2040 moveal %d0,%a0 <== NOT EXECUTED
5a0d0: 2081 movel %d1,%a0@ <== NOT EXECUTED
5a0d2: 6000 0190 braw 5a264 <killinfo+0x1d8> <== NOT EXECUTED
/*
* If the signal is being ignored, then we are out of here.
*/
if ( _POSIX_signals_Vectors[ sig ].sa_handler == SIG_IGN )
5a0d6: 2602 movel %d2,%d3 <== NOT EXECUTED
5a0d8: 2002 movel %d2,%d0 <== NOT EXECUTED
5a0da: e58b lsll #2,%d3 <== NOT EXECUTED
5a0dc: e988 lsll #4,%d0 <== NOT EXECUTED
5a0de: 9083 subl %d3,%d0 <== NOT EXECUTED
5a0e0: 0680 0005 dfd0 addil #384976,%d0 <== NOT EXECUTED
5a0e6: 7601 moveq #1,%d3 <== NOT EXECUTED
5a0e8: 2040 moveal %d0,%a0 <== NOT EXECUTED
5a0ea: b690 cmpl %a0@,%d3 <== NOT EXECUTED
5a0ec: 6700 01a6 beqw 5a294 <killinfo+0x208> <== NOT EXECUTED
/*
* P1003.1c/Draft 10, p. 33 says that certain signals should always
* be directed to the executing thread such as those caused by hardware
* faults.
*/
if ( (sig == SIGFPE) || (sig == SIGILL) || (sig == SIGSEGV ) )
5a0f0: 7008 moveq #8,%d0 <== NOT EXECUTED
5a0f2: b082 cmpl %d2,%d0 <== NOT EXECUTED
5a0f4: 6710 beqs 5a106 <killinfo+0x7a> <== NOT EXECUTED
5a0f6: 163c 0004 moveb #4,%d3 <== NOT EXECUTED
5a0fa: b682 cmpl %d2,%d3 <== NOT EXECUTED
5a0fc: 6708 beqs 5a106 <killinfo+0x7a> <== NOT EXECUTED
5a0fe: 103c 000b moveb #11,%d0 <== NOT EXECUTED
5a102: b082 cmpl %d2,%d0 <== NOT EXECUTED
5a104: 6616 bnes 5a11c <killinfo+0x90> <== NOT EXECUTED
return pthread_kill( pthread_self(), sig );
5a106: 4eb9 0005 a474 jsr 5a474 <pthread_self> <== NOT EXECUTED
5a10c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
5a10e: 2f00 movel %d0,%sp@- <== NOT EXECUTED
5a110: 4eb9 0005 a3bc jsr 5a3bc <pthread_kill> <== NOT EXECUTED
5a116: 508f addql #8,%sp <== NOT EXECUTED
5a118: 6000 017c braw 5a296 <killinfo+0x20a> <== NOT EXECUTED
static inline sigset_t signo_to_mask(
uint32_t sig
)
{
return 1u << (sig - 1);
5a11c: 7601 moveq #1,%d3 <== NOT EXECUTED
/*
* Build up a siginfo structure
*/
siginfo = &siginfo_struct;
siginfo->si_signo = sig;
siginfo->si_code = SI_USER;
5a11e: 7001 moveq #1,%d0 <== NOT EXECUTED
5a120: e3ab lsll %d1,%d3 <== NOT EXECUTED
/*
* Build up a siginfo structure
*/
siginfo = &siginfo_struct;
siginfo->si_signo = sig;
5a122: 2d42 fff4 movel %d2,%fp@(-12) <== NOT EXECUTED
siginfo->si_code = SI_USER;
5a126: 2d40 fff8 movel %d0,%fp@(-8) <== NOT EXECUTED
if ( !value ) {
5a12a: 4a8a tstl %a2 <== NOT EXECUTED
5a12c: 6606 bnes 5a134 <killinfo+0xa8> <== NOT EXECUTED
siginfo->si_value.sival_int = 0;
5a12e: 42ae fffc clrl %fp@(-4) <== NOT EXECUTED
5a132: 6004 bras 5a138 <killinfo+0xac> <== NOT EXECUTED
} else {
siginfo->si_value = *value;
5a134: 2d52 fffc movel %a2@,%fp@(-4) <== NOT EXECUTED
5a138: 2039 0005 db08 movel 5db08 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
5a13e: 5280 addql #1,%d0 <== NOT EXECUTED
5a140: 23c0 0005 db08 movel %d0,5db08 <_Thread_Dispatch_disable_level><== NOT EXECUTED
/*
* Is the currently executing thread interested? If so then it will
* get it an execute it as soon as the dispatcher executes.
*/
the_thread = _Thread_Executing;
5a146: 2079 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
if ( _POSIX_signals_Is_interested( api, mask ) ) {
5a14c: 2268 0102 moveal %a0@(258),%a1 <== NOT EXECUTED
5a150: 2029 00d0 movel %a1@(208),%d0 <== NOT EXECUTED
5a154: 4680 notl %d0 <== NOT EXECUTED
5a156: c083 andl %d3,%d0 <== NOT EXECUTED
5a158: 6600 00ae bnew 5a208 <killinfo+0x17c> <== NOT EXECUTED
}
DEBUG_STEP("\n");
_Thread_Enable_dispatch();
return 0;
}
5a15c: 2279 0005 e154 moveal 5e154 <_POSIX_signals_Wait_queue>,%a1<== NOT EXECUTED
/* XXX violation of visibility -- need to define thread queue support */
the_chain = &_POSIX_signals_Wait_queue.Queues.Fifo;
for ( the_node = _Chain_First( the_chain );
5a162: 601e bras 5a182 <killinfo+0xf6> <== NOT EXECUTED
#endif
/*
* Is this thread is actually blocked waiting for the signal?
*/
if (the_thread->Wait.option & mask)
5a164: 2003 movel %d3,%d0 <== NOT EXECUTED
for ( the_node = _Chain_First( the_chain );
!_Chain_Is_tail( the_chain, the_node ) ;
the_node = the_node->next ) {
the_thread = (Thread_Control *)the_node;
5a166: 2049 moveal %a1,%a0 <== NOT EXECUTED
#endif
/*
* Is this thread is actually blocked waiting for the signal?
*/
if (the_thread->Wait.option & mask)
5a168: c0a9 0030 andl %a1@(48),%d0 <== NOT EXECUTED
for ( the_node = _Chain_First( the_chain );
!_Chain_Is_tail( the_chain, the_node ) ;
the_node = the_node->next ) {
the_thread = (Thread_Control *)the_node;
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
5a16c: 2469 0102 moveal %a1@(258),%a2 <== NOT EXECUTED
#endif
/*
* Is this thread is actually blocked waiting for the signal?
*/
if (the_thread->Wait.option & mask)
5a170: 6600 0096 bnew 5a208 <killinfo+0x17c> <== NOT EXECUTED
/*
* Is this thread is blocked waiting for another signal but has
* not blocked this one?
*/
if (~api->signals_blocked & mask)
5a174: 202a 00d0 movel %a2@(208),%d0 <== NOT EXECUTED
5a178: 4680 notl %d0 <== NOT EXECUTED
5a17a: c083 andl %d3,%d0 <== NOT EXECUTED
5a17c: 6600 008a bnew 5a208 <killinfo+0x17c> <== NOT EXECUTED
the_chain = &_POSIX_signals_Wait_queue.Queues.Fifo;
for ( the_node = _Chain_First( the_chain );
!_Chain_Is_tail( the_chain, the_node ) ;
the_node = the_node->next ) {
5a180: 2251 moveal %a1@,%a1 <== NOT EXECUTED
/* XXX violation of visibility -- need to define thread queue support */
the_chain = &_POSIX_signals_Wait_queue.Queues.Fifo;
for ( the_node = _Chain_First( the_chain );
5a182: b3fc 0005 e158 cmpal #385368,%a1 <== NOT EXECUTED
5a188: 66da bnes 5a164 <killinfo+0xd8> <== NOT EXECUTED
* NOTES:
*
* + rtems internal threads do not receive signals.
*/
interested = NULL;
interested_priority = PRIORITY_MAXIMUM + 1;
5a18a: 4280 clrl %d0 <== NOT EXECUTED
5a18c: 1039 0005 c252 moveb 5c252 <rtems_maximum_priority>,%d0 <== NOT EXECUTED
5a192: 45f9 0005 dacc lea 5dacc <_Objects_Information_table+0x8>,%a2<== NOT EXECUTED
5a198: 5280 addql #1,%d0 <== NOT EXECUTED
*
* NOTES:
*
* + rtems internal threads do not receive signals.
*/
interested = NULL;
5a19a: 91c8 subal %a0,%a0 <== NOT EXECUTED
for (the_api = OBJECTS_CLASSIC_API; the_api <= OBJECTS_APIS_LAST; the_api++) {
/*
* This can occur when no one is interested and an API is not configured.
*/
if ( !_Objects_Information_table[ the_api ] )
5a19c: 225a moveal %a2@+,%a1 <== NOT EXECUTED
5a19e: 4a89 tstl %a1 <== NOT EXECUTED
5a1a0: 675a beqs 5a1fc <killinfo+0x170> <== NOT EXECUTED
continue;
the_info = _Objects_Information_table[ the_api ][ 1 ];
5a1a2: 2269 0004 moveal %a1@(4),%a1 <== NOT EXECUTED
*/
if ( !the_info )
continue;
#endif
maximum = the_info->maximum;
5a1a6: 4287 clrl %d7 <== NOT EXECUTED
object_table = the_info->local_table;
for ( index = 1 ; index <= maximum ; index++ ) {
5a1a8: 7801 moveq #1,%d4 <== NOT EXECUTED
*/
#define _POSIX_signals_Is_interested( _api, _mask ) \
( ~(_api)->signals_blocked & (_mask) )
int killinfo(
5a1aa: 2669 0018 moveal %a1@(24),%a3 <== NOT EXECUTED
5a1ae: 588b addql #4,%a3 <== NOT EXECUTED
*/
if ( !the_info )
continue;
#endif
maximum = the_info->maximum;
5a1b0: 3e29 000e movew %a1@(14),%d7 <== NOT EXECUTED
object_table = the_info->local_table;
for ( index = 1 ; index <= maximum ; index++ ) {
5a1b4: 6042 bras 5a1f8 <killinfo+0x16c> <== NOT EXECUTED
the_thread = (Thread_Control *) object_table[ index ];
5a1b6: 225b moveal %a3@+,%a1 <== NOT EXECUTED
if ( !the_thread )
5a1b8: 4a89 tstl %a1 <== NOT EXECUTED
5a1ba: 673a beqs 5a1f6 <killinfo+0x16a> <== NOT EXECUTED
/*
* If this thread is of lower priority than the interested thread,
* go on to the next thread.
*/
if ( the_thread->current_priority > interested_priority )
5a1bc: 2229 0014 movel %a1@(20),%d1 <== NOT EXECUTED
5a1c0: b081 cmpl %d1,%d0 <== NOT EXECUTED
5a1c2: 6532 bcss 5a1f6 <killinfo+0x16a> <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( !api )
continue;
#endif
if ( !_POSIX_signals_Is_interested( api, mask ) )
5a1c4: 2869 0102 moveal %a1@(258),%a4 <== NOT EXECUTED
5a1c8: 2a2c 00d0 movel %a4@(208),%d5 <== NOT EXECUTED
5a1cc: 4685 notl %d5 <== NOT EXECUTED
5a1ce: ca83 andl %d3,%d5 <== NOT EXECUTED
5a1d0: 6724 beqs 5a1f6 <killinfo+0x16a> <== NOT EXECUTED
*
* NOTE: We initialized interested_priority to PRIORITY_MAXIMUM + 1
* so we never have to worry about deferencing a NULL
* interested thread.
*/
if ( the_thread->current_priority < interested_priority ) {
5a1d2: b081 cmpl %d1,%d0 <== NOT EXECUTED
5a1d4: 621c bhis 5a1f2 <killinfo+0x166> <== NOT EXECUTED
* and blocking interruptibutable by signal.
*
* If the interested thread is ready, don't think about changing.
*/
if ( interested && !_States_Is_ready( interested->current_state ) ) {
5a1d6: 4a88 tstl %a0 <== NOT EXECUTED
5a1d8: 671c beqs 5a1f6 <killinfo+0x16a> <== NOT EXECUTED
5a1da: 2c28 0010 movel %a0@(16),%d6 <== NOT EXECUTED
5a1de: 6716 beqs 5a1f6 <killinfo+0x16a> <== NOT EXECUTED
/* preferred ready over blocked */
DEBUG_STEP("5");
if ( _States_Is_ready( the_thread->current_state ) ) {
5a1e0: 2a29 0010 movel %a1@(16),%d5 <== NOT EXECUTED
5a1e4: 670c beqs 5a1f2 <killinfo+0x166> <== NOT EXECUTED
continue;
}
DEBUG_STEP("6");
/* prefer blocked/interruptible over blocked/not interruptible */
if ( !_States_Is_interruptible_by_signal(interested->current_state) ) {
5a1e6: 0806 001c btst #28,%d6 <== NOT EXECUTED
5a1ea: 660a bnes 5a1f6 <killinfo+0x16a> <== NOT EXECUTED
DEBUG_STEP("7");
if ( _States_Is_interruptible_by_signal(the_thread->current_state) ) {
5a1ec: 0805 001c btst #28,%d5 <== NOT EXECUTED
5a1f0: 6704 beqs 5a1f6 <killinfo+0x16a> <== NOT EXECUTED
*/
if ( interested && !_States_Is_ready( interested->current_state ) ) {
/* preferred ready over blocked */
DEBUG_STEP("5");
if ( _States_Is_ready( the_thread->current_state ) ) {
5a1f2: 2001 movel %d1,%d0 <== NOT EXECUTED
5a1f4: 2049 moveal %a1,%a0 <== NOT EXECUTED
#endif
maximum = the_info->maximum;
object_table = the_info->local_table;
for ( index = 1 ; index <= maximum ; index++ ) {
5a1f6: 5284 addql #1,%d4 <== NOT EXECUTED
5a1f8: be84 cmpl %d4,%d7 <== NOT EXECUTED
5a1fa: 64ba bccs 5a1b6 <killinfo+0x12a> <== NOT EXECUTED
* + rtems internal threads do not receive signals.
*/
interested = NULL;
interested_priority = PRIORITY_MAXIMUM + 1;
for (the_api = OBJECTS_CLASSIC_API; the_api <= OBJECTS_APIS_LAST; the_api++) {
5a1fc: b5fc 0005 dad4 cmpal #383700,%a2 <== NOT EXECUTED
5a202: 6698 bnes 5a19c <killinfo+0x110> <== NOT EXECUTED
}
}
}
}
if ( interested ) {
5a204: 4a88 tstl %a0 <== NOT EXECUTED
5a206: 6716 beqs 5a21e <killinfo+0x192> <== NOT EXECUTED
/*
* Returns true if the signal was synchronously given to a thread
* blocked waiting for the signal.
*/
if ( _POSIX_signals_Unblock_thread( the_thread, sig, siginfo ) ) {
5a208: 486e fff4 pea %fp@(-12) <== NOT EXECUTED
5a20c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
5a20e: 2f08 movel %a0,%sp@- <== NOT EXECUTED
5a210: 4eb9 0005 a2c0 jsr 5a2c0 <_POSIX_signals_Unblock_thread> <== NOT EXECUTED
5a216: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
5a21a: 4a00 tstb %d0 <== NOT EXECUTED
5a21c: 6670 bnes 5a28e <killinfo+0x202> <== NOT EXECUTED
/*
* We may have woken up a thread but we definitely need to post the
* signal to the process wide information set.
*/
_POSIX_signals_Set_process_signals( mask );
5a21e: 2f03 movel %d3,%sp@- <== NOT EXECUTED
if ( _POSIX_signals_Vectors[ sig ].sa_flags == SA_SIGINFO ) {
5a220: 7602 moveq #2,%d3 <== NOT EXECUTED
/*
* We may have woken up a thread but we definitely need to post the
* signal to the process wide information set.
*/
_POSIX_signals_Set_process_signals( mask );
5a222: 4eb9 0005 a2a0 jsr 5a2a0 <_POSIX_signals_Set_process_signals><== NOT EXECUTED
if ( _POSIX_signals_Vectors[ sig ].sa_flags == SA_SIGINFO ) {
5a228: 588f addql #4,%sp <== NOT EXECUTED
5a22a: 2002 movel %d2,%d0 <== NOT EXECUTED
5a22c: 41f9 0005 dfc8 lea 5dfc8 <_POSIX_signals_Vectors>,%a0 <== NOT EXECUTED
5a232: e588 lsll #2,%d0 <== NOT EXECUTED
5a234: e98a lsll #4,%d2 <== NOT EXECUTED
5a236: 9480 subl %d0,%d2 <== NOT EXECUTED
5a238: b6b0 2800 cmpl %a0@(00000000,%d2:l),%d3 <== NOT EXECUTED
5a23c: 6650 bnes 5a28e <killinfo+0x202> <== NOT EXECUTED
psiginfo = (POSIX_signals_Siginfo_node *)
_Chain_Get( &_POSIX_signals_Inactive_siginfo );
5a23e: 4879 0005 e148 pea 5e148 <_POSIX_signals_Inactive_siginfo> <== NOT EXECUTED
5a244: 4eb9 0004 6018 jsr 46018 <_Chain_Get> <== NOT EXECUTED
if ( !psiginfo ) {
5a24a: 588f addql #4,%sp <== NOT EXECUTED
_POSIX_signals_Set_process_signals( mask );
if ( _POSIX_signals_Vectors[ sig ].sa_flags == SA_SIGINFO ) {
psiginfo = (POSIX_signals_Siginfo_node *)
_Chain_Get( &_POSIX_signals_Inactive_siginfo );
5a24c: 2440 moveal %d0,%a2 <== NOT EXECUTED
if ( !psiginfo ) {
5a24e: 4a80 tstl %d0 <== NOT EXECUTED
5a250: 6616 bnes 5a268 <killinfo+0x1dc> <== NOT EXECUTED
_Thread_Enable_dispatch();
5a252: 4eb9 0004 77a6 jsr 477a6 <_Thread_Enable_dispatch> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EAGAIN );
5a258: 4eb9 0004 c954 jsr 4c954 <__errno> <== NOT EXECUTED
5a25e: 2040 moveal %d0,%a0 <== NOT EXECUTED
5a260: 700b moveq #11,%d0 <== NOT EXECUTED
5a262: 2080 movel %d0,%a0@ <== NOT EXECUTED
5a264: 70ff moveq #-1,%d0 <== NOT EXECUTED
5a266: 602e bras 5a296 <killinfo+0x20a> <== NOT EXECUTED
}
psiginfo->Info = *siginfo;
5a268: 4878 000c pea c <OPER1> <== NOT EXECUTED
_Chain_Append( &_POSIX_signals_Siginfo[ sig ], &psiginfo->Node );
5a26c: 0682 0005 e1c0 addil #385472,%d2 <== NOT EXECUTED
if ( !psiginfo ) {
_Thread_Enable_dispatch();
rtems_set_errno_and_return_minus_one( EAGAIN );
}
psiginfo->Info = *siginfo;
5a272: 486e fff4 pea %fp@(-12) <== NOT EXECUTED
5a276: 486a 0008 pea %a2@(8) <== NOT EXECUTED
5a27a: 4eb9 0004 d200 jsr 4d200 <memcpy> <== NOT EXECUTED
_Chain_Append( &_POSIX_signals_Siginfo[ sig ], &psiginfo->Node );
5a280: 2f0a movel %a2,%sp@- <== NOT EXECUTED
5a282: 2f02 movel %d2,%sp@- <== NOT EXECUTED
5a284: 4eb9 0004 5fb8 jsr 45fb8 <_Chain_Append> <== NOT EXECUTED
5a28a: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
}
DEBUG_STEP("\n");
_Thread_Enable_dispatch();
5a28e: 4eb9 0004 77a6 jsr 477a6 <_Thread_Enable_dispatch> <== NOT EXECUTED
/*
* If the signal is being ignored, then we are out of here.
*/
if ( _POSIX_signals_Vectors[ sig ].sa_handler == SIG_IGN )
return 0;
5a294: 4280 clrl %d0 <== NOT EXECUTED
}
DEBUG_STEP("\n");
_Thread_Enable_dispatch();
return 0;
}
5a296: 4cee 1cfc ffd0 moveml %fp@(-48),%d2-%d7/%a2-%a4 <== NOT EXECUTED
5a29c: 4e5e unlk %fp <== NOT EXECUTED
0004546c <lio_listio>:
int mode __attribute__((unused)),
struct aiocb * const list[] __attribute__((unused)),
int nent __attribute__((unused)),
struct sigevent *sig __attribute__((unused))
)
{
4546c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
45470: 4eb9 0004 d1a4 jsr 4d1a4 <__errno> <== NOT EXECUTED
}
45476: 4e5e unlk %fp <== NOT EXECUTED
struct aiocb * const list[] __attribute__((unused)),
int nent __attribute__((unused)),
struct sigevent *sig __attribute__((unused))
)
{
rtems_set_errno_and_return_minus_one( ENOSYS );
45478: 2040 moveal %d0,%a0 <== NOT EXECUTED
4547a: 7058 moveq #88,%d0 <== NOT EXECUTED
4547c: 2080 movel %d0,%a0@ <== NOT EXECUTED
}
4547e: 70ff moveq #-1,%d0 <== NOT EXECUTED
...
00045484 <mprotect>:
const void *addr __attribute__((unused)),
size_t len __attribute__((unused)),
int prot __attribute__((unused)) )
{
return 0;
}
45484: 4280 clrl %d0 <== NOT EXECUTED
int mprotect(
const void *addr __attribute__((unused)),
size_t len __attribute__((unused)),
int prot __attribute__((unused)) )
{
45486: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return 0;
}
4548a: 4e5e unlk %fp <== NOT EXECUTED
...
000498f0 <mq_close>:
*/
int mq_close(
mqd_t mqdes
)
{
498f0: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
498f4: 2f0a movel %a2,%sp@- <== NOT EXECUTED
RTEMS_INLINE_ROUTINE POSIX_Message_queue_Control_fd *_POSIX_Message_queue_Get_fd (
mqd_t id,
Objects_Locations *location
)
{
return (POSIX_Message_queue_Control_fd *) _Objects_Get(
498f6: 486e fffc pea %fp@(-4) <== NOT EXECUTED
498fa: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
498fe: 4879 0006 6160 pea 66160 <_POSIX_Message_queue_Information_fds><== NOT EXECUTED
49904: 4eb9 0004 ca30 jsr 4ca30 <_Objects_Get> <== NOT EXECUTED
POSIX_Message_queue_Control *the_mq;
POSIX_Message_queue_Control_fd *the_mq_fd;
Objects_Locations location;
the_mq_fd = _POSIX_Message_queue_Get_fd( mqdes, &location );
if ( location == OBJECTS_LOCAL ) {
4990a: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4990e: 2440 moveal %d0,%a2 <== NOT EXECUTED
49910: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
49914: 663a bnes 49950 <mq_close+0x60> <== NOT EXECUTED
* First update the actual message queue to reflect this descriptor
* being disassociated. This may result in the queue being really
* deleted.
*/
the_mq = the_mq_fd->Queue;
49916: 206a 0010 moveal %a2@(16),%a0 <== NOT EXECUTED
the_mq->open_count -= 1;
4991a: 53a8 0016 subql #1,%a0@(22) <== NOT EXECUTED
_POSIX_Message_queue_Delete( the_mq );
4991e: 2f08 movel %a0,%sp@- <== NOT EXECUTED
49920: 4eb9 0004 9968 jsr 49968 <_POSIX_Message_queue_Delete> <== NOT EXECUTED
/*
* Now close this file descriptor.
*/
_Objects_Close(
49926: 2f0a movel %a2,%sp@- <== NOT EXECUTED
49928: 4879 0006 6160 pea 66160 <_POSIX_Message_queue_Information_fds><== NOT EXECUTED
4992e: 4eb9 0004 c654 jsr 4c654 <_Objects_Close> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _POSIX_Message_queue_Free_fd (
POSIX_Message_queue_Control_fd *the_mq_fd
)
{
_Objects_Free( &_POSIX_Message_queue_Information_fds, &the_mq_fd->Object );
49934: 2f0a movel %a2,%sp@- <== NOT EXECUTED
49936: 4879 0006 6160 pea 66160 <_POSIX_Message_queue_Information_fds><== NOT EXECUTED
4993c: 4eb9 0004 c8cc jsr 4c8cc <_Objects_Free> <== NOT EXECUTED
&_POSIX_Message_queue_Information_fds, &the_mq_fd->Object );
_POSIX_Message_queue_Free_fd( the_mq_fd );
_Thread_Enable_dispatch();
49942: 4eb9 0004 d516 jsr 4d516 <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
49948: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
4994c: 4280 clrl %d0 <== NOT EXECUTED
4994e: 600e bras 4995e <mq_close+0x6e> <== NOT EXECUTED
/*
* OBJECTS_REMOTE:
* OBJECTS_ERROR:
*/
rtems_set_errno_and_return_minus_one( EBADF );
49950: 4eb9 0005 2dd8 jsr 52dd8 <__errno> <== NOT EXECUTED
49956: 2040 moveal %d0,%a0 <== NOT EXECUTED
49958: 7009 moveq #9,%d0 <== NOT EXECUTED
4995a: 2080 movel %d0,%a0@ <== NOT EXECUTED
4995c: 70ff moveq #-1,%d0 <== NOT EXECUTED
}
4995e: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
49962: 4e5e unlk %fp <== NOT EXECUTED
...
000499b8 <mq_getattr>:
int mq_getattr(
mqd_t mqdes,
struct mq_attr *mqstat
)
{
499b8: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
499bc: 2f0a movel %a2,%sp@- <== NOT EXECUTED
499be: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
POSIX_Message_queue_Control *the_mq;
POSIX_Message_queue_Control_fd *the_mq_fd;
Objects_Locations location;
CORE_message_queue_Attributes *the_mq_attr;
if ( !mqstat )
499c2: 4a8a tstl %a2 <== NOT EXECUTED
499c4: 660e bnes 499d4 <mq_getattr+0x1c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
499c6: 4eb9 0005 2dd8 jsr 52dd8 <__errno> <== NOT EXECUTED
499cc: 7216 moveq #22,%d1 <== NOT EXECUTED
499ce: 2040 moveal %d0,%a0 <== NOT EXECUTED
499d0: 2081 movel %d1,%a0@ <== NOT EXECUTED
499d2: 6050 bras 49a24 <mq_getattr+0x6c> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE POSIX_Message_queue_Control_fd *_POSIX_Message_queue_Get_fd (
mqd_t id,
Objects_Locations *location
)
{
return (POSIX_Message_queue_Control_fd *) _Objects_Get(
499d4: 486e fffc pea %fp@(-4) <== NOT EXECUTED
499d8: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
499dc: 4879 0006 6160 pea 66160 <_POSIX_Message_queue_Information_fds><== NOT EXECUTED
499e2: 4eb9 0004 ca30 jsr 4ca30 <_Objects_Get> <== NOT EXECUTED
the_mq_fd = _POSIX_Message_queue_Get_fd( mqdes, &location );
switch ( location ) {
499e8: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
499ec: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
499f0: 6626 bnes 49a18 <mq_getattr+0x60> <== NOT EXECUTED
case OBJECTS_LOCAL:
the_mq = the_mq_fd->Queue;
499f2: 2240 moveal %d0,%a1 <== NOT EXECUTED
499f4: 2069 0010 moveal %a1@(16),%a0 <== NOT EXECUTED
* Return the old values.
*/
the_mq_attr = &the_mq->Message_queue.Attributes;
mqstat->mq_flags = the_mq_fd->oflag;
499f8: 24a9 0014 movel %a1@(20),%a2@ <== NOT EXECUTED
mqstat->mq_msgsize = the_mq->Message_queue.maximum_message_size;
499fc: 2568 0066 0008 movel %a0@(102),%a2@(8) <== NOT EXECUTED
mqstat->mq_maxmsg = the_mq->Message_queue.maximum_pending_messages;
49a02: 2568 005e 0004 movel %a0@(94),%a2@(4) <== NOT EXECUTED
mqstat->mq_curmsgs = the_mq->Message_queue.number_of_pending_messages;
49a08: 2568 0062 000c movel %a0@(98),%a2@(12) <== NOT EXECUTED
_Thread_Enable_dispatch();
49a0e: 4eb9 0004 d516 jsr 4d516 <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
49a14: 4280 clrl %d0 <== NOT EXECUTED
49a16: 600e bras 49a26 <mq_getattr+0x6e> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
rtems_set_errno_and_return_minus_one( EBADF );
49a18: 4eb9 0005 2dd8 jsr 52dd8 <__errno> <== NOT EXECUTED
49a1e: 2040 moveal %d0,%a0 <== NOT EXECUTED
49a20: 7009 moveq #9,%d0 <== NOT EXECUTED
49a22: 2080 movel %d0,%a0@ <== NOT EXECUTED
49a24: 70ff moveq #-1,%d0 <== NOT EXECUTED
}
49a26: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
49a2a: 4e5e unlk %fp <== NOT EXECUTED
...
00049a66 <mq_notify>:
int mq_notify(
mqd_t mqdes,
const struct sigevent *notification
)
{
49a66: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
49a6a: 2f0a movel %a2,%sp@- <== NOT EXECUTED
49a6c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
49a6e: 486e fffc pea %fp@(-4) <== NOT EXECUTED
49a72: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
49a76: 4879 0006 6160 pea 66160 <_POSIX_Message_queue_Information_fds><== NOT EXECUTED
49a7c: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
49a80: 4eb9 0004 ca30 jsr 4ca30 <_Objects_Get> <== NOT EXECUTED
POSIX_Message_queue_Control *the_mq;
POSIX_Message_queue_Control_fd *the_mq_fd;
Objects_Locations location;
the_mq_fd = _POSIX_Message_queue_Get_fd( mqdes, &location );
switch ( location ) {
49a86: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
49a8a: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
49a8e: 665e bnes 49aee <mq_notify+0x88> <== NOT EXECUTED
case OBJECTS_LOCAL:
the_mq = the_mq_fd->Queue;
49a90: 2040 moveal %d0,%a0 <== NOT EXECUTED
49a92: 2468 0010 moveal %a0@(16),%a2 <== NOT EXECUTED
if ( notification ) {
49a96: 4a82 tstl %d2 <== NOT EXECUTED
49a98: 6742 beqs 49adc <mq_notify+0x76> <== NOT EXECUTED
if ( _CORE_message_queue_Is_notify_enabled( &the_mq->Message_queue ) ) {
49a9a: 4aaa 007a tstl %a2@(122) <== NOT EXECUTED
49a9e: 6714 beqs 49ab4 <mq_notify+0x4e> <== NOT EXECUTED
_Thread_Enable_dispatch();
49aa0: 4eb9 0004 d516 jsr 4d516 <_Thread_Enable_dispatch> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EBUSY );
49aa6: 4eb9 0005 2dd8 jsr 52dd8 <__errno> <== NOT EXECUTED
49aac: 7210 moveq #16,%d1 <== NOT EXECUTED
49aae: 2040 moveal %d0,%a0 <== NOT EXECUTED
49ab0: 2081 movel %d1,%a0@ <== NOT EXECUTED
49ab2: 6046 bras 49afa <mq_notify+0x94> <== NOT EXECUTED
49ab4: 42aa 007e clrl %a2@(126) <== NOT EXECUTED
}
_CORE_message_queue_Set_notify( &the_mq->Message_queue, NULL, NULL );
the_mq->notification = *notification;
49ab8: 4878 0014 pea 14 <OPER2> <== NOT EXECUTED
49abc: 2f02 movel %d2,%sp@- <== NOT EXECUTED
49abe: 486a 008e pea %a2@(142) <== NOT EXECUTED
49ac2: 4eb9 0005 369c jsr 5369c <memcpy> <== NOT EXECUTED
49ac8: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
CORE_message_queue_Control *the_message_queue,
CORE_message_queue_Notify_Handler the_handler,
void *the_argument
)
{
the_message_queue->notify_handler = the_handler;
49acc: 203c 0004 9a30 movel #301616,%d0 <== NOT EXECUTED
the_message_queue->notify_argument = the_argument;
49ad2: 254a 007e movel %a2,%a2@(126) <== NOT EXECUTED
CORE_message_queue_Control *the_message_queue,
CORE_message_queue_Notify_Handler the_handler,
void *the_argument
)
{
the_message_queue->notify_handler = the_handler;
49ad6: 2540 007a movel %d0,%a2@(122) <== NOT EXECUTED
49ada: 6008 bras 49ae4 <mq_notify+0x7e> <== NOT EXECUTED
49adc: 42aa 007a clrl %a2@(122) <== NOT EXECUTED
the_message_queue->notify_argument = the_argument;
49ae0: 42aa 007e clrl %a2@(126) <== NOT EXECUTED
_CORE_message_queue_Set_notify( &the_mq->Message_queue, NULL, NULL );
}
_Thread_Enable_dispatch();
49ae4: 4eb9 0004 d516 jsr 4d516 <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
49aea: 4280 clrl %d0 <== NOT EXECUTED
49aec: 600e bras 49afc <mq_notify+0x96> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
rtems_set_errno_and_return_minus_one( EBADF );
49aee: 4eb9 0005 2dd8 jsr 52dd8 <__errno> <== NOT EXECUTED
49af4: 2040 moveal %d0,%a0 <== NOT EXECUTED
49af6: 7009 moveq #9,%d0 <== NOT EXECUTED
49af8: 2080 movel %d0,%a0@ <== NOT EXECUTED
49afa: 70ff moveq #-1,%d0 <== NOT EXECUTED
}
49afc: 242e fff4 movel %fp@(-12),%d2 <== NOT EXECUTED
49b00: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
49b04: 4e5e unlk %fp <== NOT EXECUTED
00049b08 <mq_open>:
int oflag,
...
/* mode_t mode, */
/* struct mq_attr attr */
)
{
49b08: 4e56 ffdc linkw %fp,#-36 <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
49b0c: 2039 0006 5d44 movel 65d44 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
49b12: 5280 addql #1,%d0 <== NOT EXECUTED
49b14: 48d7 0c3c moveml %d2-%d5/%a2-%a3,%sp@ <== NOT EXECUTED
49b18: 262e 0008 movel %fp@(8),%d3 <== NOT EXECUTED
49b1c: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
49b20: 23c0 0006 5d44 movel %d0,65d44 <_Thread_Dispatch_disable_level><== NOT EXECUTED
POSIX_Message_queue_Control_fd *the_mq_fd;
Objects_Locations location;
_Thread_Disable_dispatch();
if ( oflag & O_CREAT ) {
49b26: 2a02 movel %d2,%d5 <== NOT EXECUTED
49b28: 0285 0000 0200 andil #512,%d5 <== NOT EXECUTED
49b2e: 6706 beqs 49b36 <mq_open+0x2e> <== NOT EXECUTED
va_start(arg, oflag);
mode = (mode_t) va_arg( arg, unsigned int );
attr = (struct mq_attr *) va_arg( arg, struct mq_attr * );
49b30: 282e 0014 movel %fp@(20),%d4 <== NOT EXECUTED
49b34: 6002 bras 49b38 <mq_open+0x30> <== NOT EXECUTED
/* struct mq_attr attr */
)
{
va_list arg;
mode_t mode;
struct mq_attr *attr = NULL;
49b36: 4284 clrl %d4 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE POSIX_Message_queue_Control_fd *
_POSIX_Message_queue_Allocate_fd( void )
{
return (POSIX_Message_queue_Control_fd *)
_Objects_Allocate( &_POSIX_Message_queue_Information_fds );
49b38: 4879 0006 6160 pea 66160 <_POSIX_Message_queue_Information_fds><== NOT EXECUTED
49b3e: 4eb9 0004 c5d8 jsr 4c5d8 <_Objects_Allocate> <== NOT EXECUTED
attr = (struct mq_attr *) va_arg( arg, struct mq_attr * );
va_end(arg);
}
the_mq_fd = _POSIX_Message_queue_Allocate_fd();
if ( !the_mq_fd ) {
49b44: 588f addql #4,%sp <== NOT EXECUTED
49b46: 2440 moveal %d0,%a2 <== NOT EXECUTED
49b48: 4a80 tstl %d0 <== NOT EXECUTED
49b4a: 6614 bnes 49b60 <mq_open+0x58> <== NOT EXECUTED
_Thread_Enable_dispatch();
49b4c: 4eb9 0004 d516 jsr 4d516 <_Thread_Enable_dispatch> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENFILE );
49b52: 4eb9 0005 2dd8 jsr 52dd8 <__errno> <== NOT EXECUTED
49b58: 7217 moveq #23,%d1 <== NOT EXECUTED
49b5a: 2040 moveal %d0,%a0 <== NOT EXECUTED
49b5c: 2081 movel %d1,%a0@ <== NOT EXECUTED
49b5e: 6044 bras 49ba4 <mq_open+0x9c> <== NOT EXECUTED
}
the_mq_fd->oflag = oflag;
49b60: 2542 0014 movel %d2,%a2@(20) <== NOT EXECUTED
status = _POSIX_Message_queue_Name_to_id( name, &the_mq_id );
49b64: 486e fffc pea %fp@(-4) <== NOT EXECUTED
49b68: 2f03 movel %d3,%sp@- <== NOT EXECUTED
49b6a: 4eb9 0004 fe40 jsr 4fe40 <_POSIX_Message_queue_Name_to_id> <== NOT EXECUTED
* If the name to id translation worked, then the message queue exists
* and we can just return a pointer to the id. Otherwise we may
* need to check to see if this is a "message queue does not exist"
* or some other miscellaneous error on the name.
*/
if ( status ) {
49b70: 508f addql #8,%sp <== NOT EXECUTED
_Thread_Enable_dispatch();
rtems_set_errno_and_return_minus_one( ENFILE );
}
the_mq_fd->oflag = oflag;
status = _POSIX_Message_queue_Name_to_id( name, &the_mq_id );
49b72: 2640 moveal %d0,%a3 <== NOT EXECUTED
* If the name to id translation worked, then the message queue exists
* and we can just return a pointer to the id. Otherwise we may
* need to check to see if this is a "message queue does not exist"
* or some other miscellaneous error on the name.
*/
if ( status ) {
49b74: 4a80 tstl %d0 <== NOT EXECUTED
49b76: 6732 beqs 49baa <mq_open+0xa2> <== NOT EXECUTED
/*
* Unless provided a valid name that did not already exist
* and we are willing to create then it is an error.
*/
if ( !( status == ENOENT && (oflag & O_CREAT) ) ) {
49b78: 7002 moveq #2,%d0 <== NOT EXECUTED
49b7a: b08b cmpl %a3,%d0 <== NOT EXECUTED
49b7c: 6606 bnes 49b84 <mq_open+0x7c> <== NOT EXECUTED
49b7e: 4a85 tstl %d5 <== NOT EXECUTED
49b80: 6600 009e bnew 49c20 <mq_open+0x118> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _POSIX_Message_queue_Free_fd (
POSIX_Message_queue_Control_fd *the_mq_fd
)
{
_Objects_Free( &_POSIX_Message_queue_Information_fds, &the_mq_fd->Object );
49b84: 2f0a movel %a2,%sp@- <== NOT EXECUTED
49b86: 4879 0006 6160 pea 66160 <_POSIX_Message_queue_Information_fds><== NOT EXECUTED
49b8c: 4eb9 0004 c8cc jsr 4c8cc <_Objects_Free> <== NOT EXECUTED
_POSIX_Message_queue_Free_fd( the_mq_fd );
_Thread_Enable_dispatch();
49b92: 4eb9 0004 d516 jsr 4d516 <_Thread_Enable_dispatch> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one_cast( status, mqd_t );
49b98: 4eb9 0005 2dd8 jsr 52dd8 <__errno> <== NOT EXECUTED
49b9e: 2040 moveal %d0,%a0 <== NOT EXECUTED
49ba0: 208b movel %a3,%a0@ <== NOT EXECUTED
49ba2: 508f addql #8,%sp <== NOT EXECUTED
49ba4: 70ff moveq #-1,%d0 <== NOT EXECUTED
49ba6: 6000 00ce braw 49c76 <mq_open+0x16e> <== NOT EXECUTED
49baa: 47f9 0004 d516 lea 4d516 <_Thread_Enable_dispatch>,%a3 <== NOT EXECUTED
} else { /* name -> ID translation succeeded */
/*
* Check for existence with creation.
*/
if ( (oflag & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL) ) {
49bb0: 0282 0000 0a00 andil #2560,%d2 <== NOT EXECUTED
49bb6: 0c82 0000 0a00 cmpil #2560,%d2 <== NOT EXECUTED
49bbc: 661e bnes 49bdc <mq_open+0xd4> <== NOT EXECUTED
49bbe: 2f0a movel %a2,%sp@- <== NOT EXECUTED
49bc0: 4879 0006 6160 pea 66160 <_POSIX_Message_queue_Information_fds><== NOT EXECUTED
49bc6: 4eb9 0004 c8cc jsr 4c8cc <_Objects_Free> <== NOT EXECUTED
_POSIX_Message_queue_Free_fd( the_mq_fd );
_Thread_Enable_dispatch();
49bcc: 4e93 jsr %a3@ <== NOT EXECUTED
rtems_set_errno_and_return_minus_one_cast( EEXIST, mqd_t );
49bce: 4eb9 0005 2dd8 jsr 52dd8 <__errno> <== NOT EXECUTED
49bd4: 2040 moveal %d0,%a0 <== NOT EXECUTED
49bd6: 7011 moveq #17,%d0 <== NOT EXECUTED
49bd8: 2080 movel %d0,%a0@ <== NOT EXECUTED
49bda: 60c6 bras 49ba2 <mq_open+0x9a> <== NOT EXECUTED
Objects_Id id,
Objects_Locations *location
)
{
return (POSIX_Message_queue_Control *)
_Objects_Get( &_POSIX_Message_queue_Information, id, location );
49bdc: 486e fff4 pea %fp@(-12) <== NOT EXECUTED
49be0: 2f2e fffc movel %fp@(-4),%sp@- <== NOT EXECUTED
49be4: 4879 0006 5ff2 pea 65ff2 <_POSIX_Message_queue_Information><== NOT EXECUTED
49bea: 4eb9 0004 ca30 jsr 4ca30 <_Objects_Get> <== NOT EXECUTED
/*
* In this case we need to do an ID->pointer conversion to
* check the mode.
*/
the_mq = _POSIX_Message_queue_Get( the_mq_id, &location );
the_mq->open_count += 1;
49bf0: 2040 moveal %d0,%a0 <== NOT EXECUTED
49bf2: 52a8 0016 addql #1,%a0@(22) <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
49bf6: 2079 0006 6178 moveal 66178 <_POSIX_Message_queue_Information_fds+0x18>,%a0<== NOT EXECUTED
/*
* In this case we need to do an ID->pointer conversion to
* check the mode.
*/
the_mq = _POSIX_Message_queue_Get( the_mq_id, &location );
49bfc: 2d40 fff8 movel %d0,%fp@(-8) <== NOT EXECUTED
the_mq->open_count += 1;
the_mq_fd->Queue = the_mq;
49c00: 2540 0010 movel %d0,%a2@(16) <== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
const char *name
)
{
_Objects_Set_local_object(
49c04: 4280 clrl %d0 <== NOT EXECUTED
49c06: 302a 000a movew %a2@(10),%d0 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
49c0a: 218a 0c00 movel %a2,%a0@(00000000,%d0:l:4) <== NOT EXECUTED
the_object
);
#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
/* ASSERT: information->is_string */
the_object->name.name_p = name;
49c0e: 42aa 000c clrl %a2@(12) <== NOT EXECUTED
_Objects_Open_string(
&_POSIX_Message_queue_Information_fds,
&the_mq_fd->Object,
NULL
);
_Thread_Enable_dispatch();
49c12: 4e93 jsr %a3@ <== NOT EXECUTED
_Thread_Enable_dispatch();
49c14: 4e93 jsr %a3@ <== NOT EXECUTED
return (mqd_t)the_mq_fd->Object.id;
49c16: 202a 0008 movel %a2@(8),%d0 <== NOT EXECUTED
49c1a: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
49c1e: 6056 bras 49c76 <mq_open+0x16e> <== NOT EXECUTED
/*
* At this point, the message queue does not exist and everything has been
* checked. We should go ahead and create a message queue.
*/
status = _POSIX_Message_queue_Create_support(
49c20: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
49c24: 47f9 0004 d516 lea 4d516 <_Thread_Enable_dispatch>,%a3 <== NOT EXECUTED
49c2a: 2f04 movel %d4,%sp@- <== NOT EXECUTED
49c2c: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
49c30: 2f03 movel %d3,%sp@- <== NOT EXECUTED
49c32: 4eb9 0004 fcf0 jsr 4fcf0 <_POSIX_Message_queue_Create_support><== NOT EXECUTED
);
/*
* errno was set by Create_support, so don't set it again.
*/
if ( status == -1 ) {
49c38: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
49c3c: 72ff moveq #-1,%d1 <== NOT EXECUTED
49c3e: b280 cmpl %d0,%d1 <== NOT EXECUTED
49c40: 6614 bnes 49c56 <mq_open+0x14e> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _POSIX_Message_queue_Free_fd (
POSIX_Message_queue_Control_fd *the_mq_fd
)
{
_Objects_Free( &_POSIX_Message_queue_Information_fds, &the_mq_fd->Object );
49c42: 2f0a movel %a2,%sp@- <== NOT EXECUTED
49c44: 4879 0006 6160 pea 66160 <_POSIX_Message_queue_Information_fds><== NOT EXECUTED
49c4a: 4eb9 0004 c8cc jsr 4c8cc <_Objects_Free> <== NOT EXECUTED
_POSIX_Message_queue_Free_fd( the_mq_fd );
_Thread_Enable_dispatch();
49c50: 4e93 jsr %a3@ <== NOT EXECUTED
49c52: 6000 ff4e braw 49ba2 <mq_open+0x9a> <== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
const char *name
)
{
_Objects_Set_local_object(
49c56: 4280 clrl %d0 <== NOT EXECUTED
return (mqd_t) -1;
}
the_mq_fd->Queue = the_mq;
49c58: 256e fff8 0010 movel %fp@(-8),%a2@(16) <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
49c5e: 2079 0006 6178 moveal 66178 <_POSIX_Message_queue_Information_fds+0x18>,%a0<== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
const char *name
)
{
_Objects_Set_local_object(
49c64: 302a 000a movew %a2@(10),%d0 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
49c68: 218a 0c00 movel %a2,%a0@(00000000,%d0:l:4) <== NOT EXECUTED
the_object
);
#if defined(RTEMS_SCORE_OBJECT_ENABLE_STRING_NAMES)
/* ASSERT: information->is_string */
the_object->name.name_p = name;
49c6c: 42aa 000c clrl %a2@(12) <== NOT EXECUTED
&_POSIX_Message_queue_Information_fds,
&the_mq_fd->Object,
NULL
);
_Thread_Enable_dispatch();
49c70: 4e93 jsr %a3@ <== NOT EXECUTED
return (mqd_t) the_mq_fd->Object.id;
49c72: 202a 0008 movel %a2@(8),%d0 <== NOT EXECUTED
}
49c76: 4cee 0c3c ffdc moveml %fp@(-36),%d2-%d5/%a2-%a3 <== NOT EXECUTED
49c7c: 4e5e unlk %fp <== NOT EXECUTED
00049c80 <mq_receive>:
mqd_t mqdes,
char *msg_ptr,
size_t msg_len,
unsigned int *msg_prio
)
{
49c80: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return _POSIX_Message_queue_Receive_support(
49c84: 42a7 clrl %sp@- <== NOT EXECUTED
49c86: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
49c8a: 2f2e 0014 movel %fp@(20),%sp@- <== NOT EXECUTED
49c8e: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
49c92: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
49c96: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
49c9a: 4eb9 0004 9ca4 jsr 49ca4 <_POSIX_Message_queue_Receive_support><== NOT EXECUTED
msg_len,
msg_prio,
true,
THREAD_QUEUE_WAIT_FOREVER
);
}
49ca0: 4e5e unlk %fp <== NOT EXECUTED
00049da8 <mq_send>:
mqd_t mqdes,
const char *msg_ptr,
size_t msg_len,
unsigned int msg_prio
)
{
49da8: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return _POSIX_Message_queue_Send_support(
49dac: 42a7 clrl %sp@- <== NOT EXECUTED
49dae: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
49db2: 2f2e 0014 movel %fp@(20),%sp@- <== NOT EXECUTED
49db6: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
49dba: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
49dbe: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
49dc2: 4eb9 0004 9dcc jsr 49dcc <_POSIX_Message_queue_Send_support><== NOT EXECUTED
msg_len,
msg_prio,
true,
THREAD_QUEUE_WAIT_FOREVER
);
}
49dc8: 4e5e unlk %fp <== NOT EXECUTED
00049eb8 <mq_setattr>:
int mq_setattr(
mqd_t mqdes,
const struct mq_attr *mqstat,
struct mq_attr *omqstat
)
{
49eb8: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
49ebc: 2f0b movel %a3,%sp@- <== NOT EXECUTED
49ebe: 266e 000c moveal %fp@(12),%a3 <== NOT EXECUTED
49ec2: 2f0a movel %a2,%sp@- <== NOT EXECUTED
49ec4: 246e 0010 moveal %fp@(16),%a2 <== NOT EXECUTED
POSIX_Message_queue_Control_fd *the_mq_fd;
CORE_message_queue_Control *the_core_mq;
Objects_Locations location;
if ( !mqstat )
49ec8: 4a8b tstl %a3 <== NOT EXECUTED
49eca: 660e bnes 49eda <mq_setattr+0x22> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
49ecc: 4eb9 0005 2dd8 jsr 52dd8 <__errno> <== NOT EXECUTED
49ed2: 7216 moveq #22,%d1 <== NOT EXECUTED
49ed4: 2040 moveal %d0,%a0 <== NOT EXECUTED
49ed6: 2081 movel %d1,%a0@ <== NOT EXECUTED
49ed8: 6058 bras 49f32 <mq_setattr+0x7a> <== NOT EXECUTED
49eda: 486e fffc pea %fp@(-4) <== NOT EXECUTED
49ede: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
49ee2: 4879 0006 6160 pea 66160 <_POSIX_Message_queue_Information_fds><== NOT EXECUTED
49ee8: 4eb9 0004 ca30 jsr 4ca30 <_Objects_Get> <== NOT EXECUTED
the_mq_fd = _POSIX_Message_queue_Get_fd( mqdes, &location );
switch ( location ) {
49eee: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
49ef2: 2040 moveal %d0,%a0 <== NOT EXECUTED
49ef4: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
49ef8: 662c bnes 49f26 <mq_setattr+0x6e> <== NOT EXECUTED
case OBJECTS_LOCAL:
the_core_mq = &the_mq_fd->Queue->Message_queue;
49efa: 2268 0010 moveal %a0@(16),%a1 <== NOT EXECUTED
/*
* Return the old values.
*/
if ( omqstat ) {
49efe: 4a8a tstl %a2 <== NOT EXECUTED
49f00: 6716 beqs 49f18 <mq_setattr+0x60> <== NOT EXECUTED
omqstat->mq_flags = the_mq_fd->oflag;
49f02: 24a8 0014 movel %a0@(20),%a2@ <== NOT EXECUTED
omqstat->mq_msgsize = the_core_mq->maximum_message_size;
49f06: 2569 0066 0008 movel %a1@(102),%a2@(8) <== NOT EXECUTED
omqstat->mq_maxmsg = the_core_mq->maximum_pending_messages;
49f0c: 2569 005e 0004 movel %a1@(94),%a2@(4) <== NOT EXECUTED
omqstat->mq_curmsgs = the_core_mq->number_of_pending_messages;
49f12: 2569 0062 000c movel %a1@(98),%a2@(12) <== NOT EXECUTED
}
the_mq_fd->oflag = mqstat->mq_flags;
49f18: 2153 0014 movel %a3@,%a0@(20) <== NOT EXECUTED
_Thread_Enable_dispatch();
49f1c: 4eb9 0004 d516 jsr 4d516 <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
49f22: 4280 clrl %d0 <== NOT EXECUTED
49f24: 600e bras 49f34 <mq_setattr+0x7c> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
rtems_set_errno_and_return_minus_one( EBADF );
49f26: 4eb9 0005 2dd8 jsr 52dd8 <__errno> <== NOT EXECUTED
49f2c: 2040 moveal %d0,%a0 <== NOT EXECUTED
49f2e: 7009 moveq #9,%d0 <== NOT EXECUTED
49f30: 2080 movel %d0,%a0@ <== NOT EXECUTED
49f32: 70ff moveq #-1,%d0 <== NOT EXECUTED
}
49f34: 246e fff4 moveal %fp@(-12),%a2 <== NOT EXECUTED
49f38: 266e fff8 moveal %fp@(-8),%a3 <== NOT EXECUTED
49f3c: 4e5e unlk %fp <== NOT EXECUTED
00049f40 <mq_timedreceive>:
char *msg_ptr,
size_t msg_len,
unsigned int *msg_prio,
const struct timespec *abstime
)
{
49f40: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
*
* If the status is POSIX_ABSOLUTE_TIMEOUT_INVALID,
* POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST, or POSIX_ABSOLUTE_TIMEOUT_IS_NOW,
* then we should not wait.
*/
status = _POSIX_Absolute_timeout_to_ticks( abstime, &ticks );
49f44: 486e fffc pea %fp@(-4) <== NOT EXECUTED
49f48: 2f2e 0018 movel %fp@(24),%sp@- <== NOT EXECUTED
49f4c: 4eb9 0004 a050 jsr 4a050 <_POSIX_Absolute_timeout_to_ticks><== NOT EXECUTED
if ( status != POSIX_ABSOLUTE_TIMEOUT_IS_IN_FUTURE )
do_wait = false;
return _POSIX_Message_queue_Receive_support(
49f52: 2f2e fffc movel %fp@(-4),%sp@- <== NOT EXECUTED
49f56: 7203 moveq #3,%d1 <== NOT EXECUTED
49f58: b280 cmpl %d0,%d1 <== NOT EXECUTED
49f5a: 57c0 seq %d0 <== NOT EXECUTED
49f5c: 49c0 extbl %d0 <== NOT EXECUTED
49f5e: 4480 negl %d0 <== NOT EXECUTED
49f60: 2f00 movel %d0,%sp@- <== NOT EXECUTED
49f62: 2f2e 0014 movel %fp@(20),%sp@- <== NOT EXECUTED
49f66: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
49f6a: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
49f6e: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
49f72: 4eb9 0004 9ca4 jsr 49ca4 <_POSIX_Message_queue_Receive_support><== NOT EXECUTED
msg_len,
msg_prio,
do_wait,
ticks
);
}
49f78: 4e5e unlk %fp <== NOT EXECUTED
00049f7c <mq_timedsend>:
const char *msg_ptr,
size_t msg_len,
unsigned int msg_prio,
const struct timespec *abstime
)
{
49f7c: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
*
* If the status is POSIX_ABSOLUTE_TIMEOUT_INVALID,
* POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST, or POSIX_ABSOLUTE_TIMEOUT_IS_NOW,
* then we should not wait.
*/
status = _POSIX_Absolute_timeout_to_ticks( abstime, &ticks );
49f80: 486e fffc pea %fp@(-4) <== NOT EXECUTED
49f84: 2f2e 0018 movel %fp@(24),%sp@- <== NOT EXECUTED
49f88: 4eb9 0004 a050 jsr 4a050 <_POSIX_Absolute_timeout_to_ticks><== NOT EXECUTED
if ( status != POSIX_ABSOLUTE_TIMEOUT_IS_IN_FUTURE )
do_wait = false;
return _POSIX_Message_queue_Send_support(
49f8e: 2f2e fffc movel %fp@(-4),%sp@- <== NOT EXECUTED
49f92: 7203 moveq #3,%d1 <== NOT EXECUTED
49f94: b280 cmpl %d0,%d1 <== NOT EXECUTED
49f96: 57c0 seq %d0 <== NOT EXECUTED
49f98: 49c0 extbl %d0 <== NOT EXECUTED
49f9a: 4480 negl %d0 <== NOT EXECUTED
49f9c: 2f00 movel %d0,%sp@- <== NOT EXECUTED
49f9e: 2f2e 0014 movel %fp@(20),%sp@- <== NOT EXECUTED
49fa2: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
49fa6: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
49faa: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
49fae: 4eb9 0004 9dcc jsr 49dcc <_POSIX_Message_queue_Send_support><== NOT EXECUTED
msg_len,
msg_prio,
do_wait,
ticks
);
}
49fb4: 4e5e unlk %fp <== NOT EXECUTED
00049fd0 <mq_unlink>:
*/
int mq_unlink(
const char *name
)
{
49fd0: 4e56 fff0 linkw %fp,#-16 <== NOT EXECUTED
49fd4: 2039 0006 5d44 movel 65d44 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
49fda: 5280 addql #1,%d0 <== NOT EXECUTED
49fdc: 48d7 0c04 moveml %d2/%a2-%a3,%sp@ <== NOT EXECUTED
49fe0: 23c0 0006 5d44 movel %d0,65d44 <_Thread_Dispatch_disable_level><== NOT EXECUTED
register POSIX_Message_queue_Control *the_mq;
Objects_Id the_mq_id;
_Thread_Disable_dispatch();
status = _POSIX_Message_queue_Name_to_id( name, &the_mq_id );
49fe6: 486e fffc pea %fp@(-4) <== NOT EXECUTED
49fea: 47f9 0004 d516 lea 4d516 <_Thread_Enable_dispatch>,%a3 <== NOT EXECUTED
49ff0: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
49ff4: 4eb9 0004 fe40 jsr 4fe40 <_POSIX_Message_queue_Name_to_id> <== NOT EXECUTED
if ( status != 0 ) {
49ffa: 508f addql #8,%sp <== NOT EXECUTED
register POSIX_Message_queue_Control *the_mq;
Objects_Id the_mq_id;
_Thread_Disable_dispatch();
status = _POSIX_Message_queue_Name_to_id( name, &the_mq_id );
49ffc: 2400 movel %d0,%d2 <== NOT EXECUTED
if ( status != 0 ) {
49ffe: 6710 beqs 4a010 <mq_unlink+0x40> <== NOT EXECUTED
_Thread_Enable_dispatch();
4a000: 4e93 jsr %a3@ <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( status );
4a002: 4eb9 0005 2dd8 jsr 52dd8 <__errno> <== NOT EXECUTED
4a008: 2040 moveal %d0,%a0 <== NOT EXECUTED
4a00a: 70ff moveq #-1,%d0 <== NOT EXECUTED
4a00c: 2082 movel %d2,%a0@ <== NOT EXECUTED
4a00e: 6034 bras 4a044 <mq_unlink+0x74> <== NOT EXECUTED
*/
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return NULL;
#endif
return information->local_table[ index ];
4a010: 4280 clrl %d0 <== NOT EXECUTED
4a012: 2079 0006 600a moveal 6600a <_POSIX_Message_queue_Information+0x18>,%a0<== NOT EXECUTED
4a018: 302e fffe movew %fp@(-2),%d0 <== NOT EXECUTED
}
the_mq = (POSIX_Message_queue_Control *) _Objects_Get_local_object(
4a01c: 2470 0c00 moveal %a0@(00000000,%d0:l:4),%a2 <== NOT EXECUTED
&_POSIX_Message_queue_Information,
_Objects_Get_index( the_mq_id )
);
the_mq->linked = false;
4a020: 4200 clrb %d0 <== NOT EXECUTED
4a022: 1540 0015 moveb %d0,%a2@(21) <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _POSIX_Message_queue_Namespace_remove (
POSIX_Message_queue_Control *the_mq
)
{
_Objects_Namespace_remove(
4a026: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4a028: 4879 0006 5ff2 pea 65ff2 <_POSIX_Message_queue_Information><== NOT EXECUTED
4a02e: 4eb9 0004 cb8c jsr 4cb8c <_Objects_Namespace_remove> <== NOT EXECUTED
_POSIX_Message_queue_Namespace_remove( the_mq );
_POSIX_Message_queue_Delete( the_mq );
4a034: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4a036: 4eb9 0004 9968 jsr 49968 <_POSIX_Message_queue_Delete> <== NOT EXECUTED
_Thread_Enable_dispatch();
4a03c: 4e93 jsr %a3@ <== NOT EXECUTED
return 0;
4a03e: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4a042: 4280 clrl %d0 <== NOT EXECUTED
}
4a044: 4cee 0c04 fff0 moveml %fp@(-16),%d2/%a2-%a3 <== NOT EXECUTED
4a04a: 4e5e unlk %fp <== NOT EXECUTED
...
0005aa6e <nanosleep>:
int nanosleep(
const struct timespec *rqtp,
struct timespec *rmtp
)
{
5aa6e: 4e56 fff4 linkw %fp,#-12 <== NOT EXECUTED
5aa72: 48d7 0c04 moveml %d2/%a2-%a3,%sp@ <== NOT EXECUTED
5aa76: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
5aa7a: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
* Return EINVAL if the delay interval is negative.
*
* NOTE: This behavior is beyond the POSIX specification.
* FSU and GNU/Linux pthreads shares this behavior.
*/
if ( !_Timespec_Is_valid( rqtp ) )
5aa7e: 2f02 movel %d2,%sp@- <== NOT EXECUTED
5aa80: 4eb9 0005 aba4 jsr 5aba4 <_Timespec_Is_valid> <== NOT EXECUTED
5aa86: 588f addql #4,%sp <== NOT EXECUTED
5aa88: 4a00 tstb %d0 <== NOT EXECUTED
5aa8a: 6610 bnes 5aa9c <nanosleep+0x2e> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
5aa8c: 4eb9 0004 cd90 jsr 4cd90 <__errno> <== NOT EXECUTED
5aa92: 7216 moveq #22,%d1 <== NOT EXECUTED
5aa94: 2040 moveal %d0,%a0 <== NOT EXECUTED
5aa96: 2081 movel %d1,%a0@ <== NOT EXECUTED
5aa98: 6000 00bc braw 5ab56 <nanosleep+0xe8> <== NOT EXECUTED
ticks = _Timespec_To_ticks( rqtp );
5aa9c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
5aa9e: 47f9 0004 7b3e lea 47b3e <_Thread_Enable_dispatch>,%a3 <== NOT EXECUTED
5aaa4: 4eb9 0004 b624 jsr 4b624 <_Timespec_To_ticks> <== NOT EXECUTED
* A nanosleep for zero time is implemented as a yield.
* This behavior is also beyond the POSIX specification but is
* consistent with the RTEMS API and yields desirable behavior.
*/
if ( !ticks ) {
5aaaa: 588f addql #4,%sp <== NOT EXECUTED
5aaac: 41fa ffaa lea %pc@(5aa58 <_Thread_Disable_dispatch>),%a0<== NOT EXECUTED
* FSU and GNU/Linux pthreads shares this behavior.
*/
if ( !_Timespec_Is_valid( rqtp ) )
rtems_set_errno_and_return_minus_one( EINVAL );
ticks = _Timespec_To_ticks( rqtp );
5aab0: 2400 movel %d0,%d2 <== NOT EXECUTED
* A nanosleep for zero time is implemented as a yield.
* This behavior is also beyond the POSIX specification but is
* consistent with the RTEMS API and yields desirable behavior.
*/
if ( !ticks ) {
5aab2: 6624 bnes 5aad8 <nanosleep+0x6a> <== NOT EXECUTED
_Thread_Disable_dispatch();
5aab4: 4e90 jsr %a0@ <== NOT EXECUTED
* always operates on the scheduler that 'owns' the currently executing
* thread.
*/
RTEMS_INLINE_ROUTINE void _Scheduler_Yield( void )
{
_Scheduler.Operations.yield( &_Scheduler );
5aab6: 4879 0005 ea56 pea 5ea56 <_Scheduler> <== NOT EXECUTED
5aabc: 2079 0005 ea5e moveal 5ea5e <_Scheduler+0x8>,%a0 <== NOT EXECUTED
5aac2: 4e90 jsr %a0@ <== NOT EXECUTED
_Scheduler_Yield();
_Thread_Enable_dispatch();
5aac4: 4e93 jsr %a3@ <== NOT EXECUTED
if ( rmtp ) {
5aac6: 588f addql #4,%sp <== NOT EXECUTED
5aac8: 4a8a tstl %a2 <== NOT EXECUTED
5aaca: 6700 008e beqw 5ab5a <nanosleep+0xec> <== NOT EXECUTED
rmtp->tv_sec = 0;
5aace: 4292 clrl %a2@ <== NOT EXECUTED
rmtp->tv_nsec = 0;
5aad0: 42aa 0004 clrl %a2@(4) <== NOT EXECUTED
5aad4: 6000 0084 braw 5ab5a <nanosleep+0xec> <== NOT EXECUTED
}
/*
* Block for the desired amount of time
*/
_Thread_Disable_dispatch();
5aad8: 4e90 jsr %a0@ <== NOT EXECUTED
_Thread_Set_state(
5aada: 2f3c 1000 0008 movel #268435464,%sp@- <== NOT EXECUTED
5aae0: 2f39 0005 ee5e movel 5ee5e <_Per_CPU_Information+0xc>,%sp@-<== NOT EXECUTED
5aae6: 4eb9 0004 8314 jsr 48314 <_Thread_Set_state> <== NOT EXECUTED
STATES_DELAYING | STATES_INTERRUPTIBLE_BY_SIGNAL
);
_Watchdog_Initialize(
&_Thread_Executing->Timer,
_Thread_Delay_ended,
_Thread_Executing->Object.id,
5aaec: 2079 0005 ee5e moveal 5ee5e <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
the_watchdog->routine = routine;
5aaf2: 223c 0004 79c4 movel #293316,%d1 <== NOT EXECUTED
_Thread_Disable_dispatch();
_Thread_Set_state(
_Thread_Executing,
STATES_DELAYING | STATES_INTERRUPTIBLE_BY_SIGNAL
);
_Watchdog_Initialize(
5aaf8: 2028 0008 movel %a0@(8),%d0 <== NOT EXECUTED
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
5aafc: 42a8 0050 clrl %a0@(80) <== NOT EXECUTED
the_watchdog->routine = routine;
5ab00: 2141 0064 movel %d1,%a0@(100) <== NOT EXECUTED
the_watchdog->id = id;
5ab04: 2140 0068 movel %d0,%a0@(104) <== NOT EXECUTED
the_watchdog->user_data = user_data;
5ab08: 42a8 006c clrl %a0@(108) <== NOT EXECUTED
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
5ab0c: 2142 0054 movel %d2,%a0@(84) <== NOT EXECUTED
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
5ab10: 4868 0048 pea %a0@(72) <== NOT EXECUTED
5ab14: 4879 0005 eab0 pea 5eab0 <_Watchdog_Ticks_chain> <== NOT EXECUTED
5ab1a: 4eb9 0004 8938 jsr 48938 <_Watchdog_Insert> <== NOT EXECUTED
_Thread_Delay_ended,
_Thread_Executing->Object.id,
NULL
);
_Watchdog_Insert_ticks( &_Thread_Executing->Timer, ticks );
_Thread_Enable_dispatch();
5ab20: 4e93 jsr %a3@ <== NOT EXECUTED
/* calculate time remaining */
if ( rmtp ) {
5ab22: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
5ab26: 4a8a tstl %a2 <== NOT EXECUTED
5ab28: 6730 beqs 5ab5a <nanosleep+0xec> <== NOT EXECUTED
ticks -=
_Thread_Executing->Timer.stop_time - _Thread_Executing->Timer.start_time;
5ab2a: 2079 0005 ee5e moveal 5ee5e <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
5ab30: 2028 005c movel %a0@(92),%d0 <== NOT EXECUTED
5ab34: 90a8 0060 subl %a0@(96),%d0 <== NOT EXECUTED
_Thread_Enable_dispatch();
/* calculate time remaining */
if ( rmtp ) {
ticks -=
5ab38: d480 addl %d0,%d2 <== NOT EXECUTED
_Thread_Executing->Timer.stop_time - _Thread_Executing->Timer.start_time;
_Timespec_From_ticks( ticks, rmtp );
5ab3a: 2f0a movel %a2,%sp@- <== NOT EXECUTED
5ab3c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
5ab3e: 4eb9 0005 ab68 jsr 5ab68 <_Timespec_From_ticks> <== NOT EXECUTED
*/
#if defined(RTEMS_POSIX_API)
/*
* If there is time remaining, then we were interrupted by a signal.
*/
if ( ticks )
5ab44: 508f addql #8,%sp <== NOT EXECUTED
5ab46: 4a82 tstl %d2 <== NOT EXECUTED
5ab48: 6710 beqs 5ab5a <nanosleep+0xec> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINTR );
5ab4a: 4eb9 0004 cd90 jsr 4cd90 <__errno> <== NOT EXECUTED
5ab50: 2040 moveal %d0,%a0 <== NOT EXECUTED
5ab52: 7004 moveq #4,%d0 <== NOT EXECUTED
5ab54: 2080 movel %d0,%a0@ <== NOT EXECUTED
5ab56: 70ff moveq #-1,%d0 <== NOT EXECUTED
5ab58: 6002 bras 5ab5c <nanosleep+0xee> <== NOT EXECUTED
#endif
}
return 0;
5ab5a: 4280 clrl %d0 <== NOT EXECUTED
}
5ab5c: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3 <== NOT EXECUTED
5ab62: 4e5e unlk %fp <== NOT EXECUTED
...
00046ef4 <pause>:
/*
* 3.4.2 Suspend Process Execution, P1003.1b-1993, p. 81
*/
int pause( void )
{
46ef4: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
46ef8: 2f02 movel %d2,%sp@- <== NOT EXECUTED
sigset_t all_signals;
int status;
(void) sigfillset( &all_signals );
46efa: 240e movel %fp,%d2 <== NOT EXECUTED
46efc: 5982 subql #4,%d2 <== NOT EXECUTED
46efe: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46f00: 4eb9 0004 7af8 jsr 47af8 <sigfillset> <== NOT EXECUTED
status = sigtimedwait( &all_signals, NULL, NULL );
46f06: 42a7 clrl %sp@- <== NOT EXECUTED
46f08: 42a7 clrl %sp@- <== NOT EXECUTED
46f0a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46f0c: 4eb9 0004 7c68 jsr 47c68 <sigtimedwait> <== NOT EXECUTED
return status;
}
46f12: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
46f16: 4e5e unlk %fp <== NOT EXECUTED
...
00045490 <pthread_atfork>:
int pthread_atfork(
void (*prepare)(void) __attribute__((unused)),
void (*parent)(void) __attribute__((unused)),
void (*child)(void) __attribute__((unused))
)
{
45490: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
45494: 4eb9 0004 d1a4 jsr 4d1a4 <__errno> <== NOT EXECUTED
}
4549a: 4e5e unlk %fp <== NOT EXECUTED
void (*prepare)(void) __attribute__((unused)),
void (*parent)(void) __attribute__((unused)),
void (*child)(void) __attribute__((unused))
)
{
rtems_set_errno_and_return_minus_one( ENOSYS );
4549c: 2040 moveal %d0,%a0 <== NOT EXECUTED
4549e: 7058 moveq #88,%d0 <== NOT EXECUTED
454a0: 2080 movel %d0,%a0@ <== NOT EXECUTED
}
454a2: 70ff moveq #-1,%d0 <== NOT EXECUTED
...
0004a088 <pthread_attr_destroy>:
#include <rtems/system.h>
int pthread_attr_destroy(
pthread_attr_t *attr
)
{
4a088: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4a08c: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
if ( !attr || !attr->is_initialized )
4a090: 4a88 tstl %a0 <== NOT EXECUTED
4a092: 670a beqs 4a09e <pthread_attr_destroy+0x16> <== NOT EXECUTED
4a094: 4a90 tstl %a0@ <== NOT EXECUTED
4a096: 6706 beqs 4a09e <pthread_attr_destroy+0x16> <== NOT EXECUTED
return EINVAL;
attr->is_initialized = false;
4a098: 4290 clrl %a0@ <== NOT EXECUTED
return 0;
4a09a: 4280 clrl %d0 <== NOT EXECUTED
4a09c: 6002 bras 4a0a0 <pthread_attr_destroy+0x18> <== NOT EXECUTED
int pthread_attr_destroy(
pthread_attr_t *attr
)
{
if ( !attr || !attr->is_initialized )
return EINVAL;
4a09e: 7016 moveq #22,%d0 <== NOT EXECUTED
attr->is_initialized = false;
return 0;
}
4a0a0: 4e5e unlk %fp <== NOT EXECUTED
0004a6ac <pthread_attr_getcputime>:
int pthread_attr_getcputime(
pthread_attr_t *attr,
int *clock_allowed
)
{
4a6ac: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4a6b0: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4a6b4: 226e 000c moveal %fp@(12),%a1 <== NOT EXECUTED
if ( !attr || !attr->is_initialized || !clock_allowed )
4a6b8: 4a88 tstl %a0 <== NOT EXECUTED
4a6ba: 6710 beqs 4a6cc <pthread_attr_getcputime+0x20> <== NOT EXECUTED
4a6bc: 4a90 tstl %a0@ <== NOT EXECUTED
4a6be: 670c beqs 4a6cc <pthread_attr_getcputime+0x20> <== NOT EXECUTED
4a6c0: 4a89 tstl %a1 <== NOT EXECUTED
4a6c2: 6708 beqs 4a6cc <pthread_attr_getcputime+0x20> <== NOT EXECUTED
return EINVAL;
*clock_allowed = attr->cputime_clock_allowed;
4a6c4: 22a8 0038 movel %a0@(56),%a1@ <== NOT EXECUTED
return 0;
4a6c8: 4280 clrl %d0 <== NOT EXECUTED
4a6ca: 6002 bras 4a6ce <pthread_attr_getcputime+0x22> <== NOT EXECUTED
pthread_attr_t *attr,
int *clock_allowed
)
{
if ( !attr || !attr->is_initialized || !clock_allowed )
return EINVAL;
4a6cc: 7016 moveq #22,%d0 <== NOT EXECUTED
*clock_allowed = attr->cputime_clock_allowed;
return 0;
}
4a6ce: 4e5e unlk %fp <== NOT EXECUTED
...
0004a0a4 <pthread_attr_getdetachstate>:
int pthread_attr_getdetachstate(
const pthread_attr_t *attr,
int *detachstate
)
{
4a0a4: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4a0a8: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4a0ac: 226e 000c moveal %fp@(12),%a1 <== NOT EXECUTED
if ( !attr || !attr->is_initialized || !detachstate )
4a0b0: 4a88 tstl %a0 <== NOT EXECUTED
4a0b2: 6710 beqs 4a0c4 <pthread_attr_getdetachstate+0x20><== NOT EXECUTED
4a0b4: 4a90 tstl %a0@ <== NOT EXECUTED
4a0b6: 670c beqs 4a0c4 <pthread_attr_getdetachstate+0x20><== NOT EXECUTED
4a0b8: 4a89 tstl %a1 <== NOT EXECUTED
4a0ba: 6708 beqs 4a0c4 <pthread_attr_getdetachstate+0x20><== NOT EXECUTED
return EINVAL;
*detachstate = attr->detachstate;
4a0bc: 22a8 003c movel %a0@(60),%a1@ <== NOT EXECUTED
return 0;
4a0c0: 4280 clrl %d0 <== NOT EXECUTED
4a0c2: 6002 bras 4a0c6 <pthread_attr_getdetachstate+0x22><== NOT EXECUTED
const pthread_attr_t *attr,
int *detachstate
)
{
if ( !attr || !attr->is_initialized || !detachstate )
return EINVAL;
4a0c4: 7016 moveq #22,%d0 <== NOT EXECUTED
*detachstate = attr->detachstate;
return 0;
}
4a0c6: 4e5e unlk %fp <== NOT EXECUTED
...
0004a0cc <pthread_attr_getguardsize>:
int pthread_attr_getguardsize(
const pthread_attr_t *attr,
size_t *guardsize
)
{
4a0cc: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4a0d0: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4a0d4: 226e 000c moveal %fp@(12),%a1 <== NOT EXECUTED
if ( !attr || !attr->is_initialized || !guardsize )
4a0d8: 4a88 tstl %a0 <== NOT EXECUTED
4a0da: 6710 beqs 4a0ec <pthread_attr_getguardsize+0x20> <== NOT EXECUTED
4a0dc: 4a90 tstl %a0@ <== NOT EXECUTED
4a0de: 670c beqs 4a0ec <pthread_attr_getguardsize+0x20> <== NOT EXECUTED
4a0e0: 4a89 tstl %a1 <== NOT EXECUTED
4a0e2: 6708 beqs 4a0ec <pthread_attr_getguardsize+0x20> <== NOT EXECUTED
return EINVAL;
*guardsize = attr->guardsize;
4a0e4: 22a8 0034 movel %a0@(52),%a1@ <== NOT EXECUTED
return 0;
4a0e8: 4280 clrl %d0 <== NOT EXECUTED
4a0ea: 6002 bras 4a0ee <pthread_attr_getguardsize+0x22> <== NOT EXECUTED
const pthread_attr_t *attr,
size_t *guardsize
)
{
if ( !attr || !attr->is_initialized || !guardsize )
return EINVAL;
4a0ec: 7016 moveq #22,%d0 <== NOT EXECUTED
*guardsize = attr->guardsize;
return 0;
}
4a0ee: 4e5e unlk %fp <== NOT EXECUTED
...
0004a0f4 <pthread_attr_getinheritsched>:
int pthread_attr_getinheritsched(
const pthread_attr_t *attr,
int *inheritsched
)
{
4a0f4: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4a0f8: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4a0fc: 226e 000c moveal %fp@(12),%a1 <== NOT EXECUTED
if ( !attr || !attr->is_initialized || !inheritsched )
4a100: 4a88 tstl %a0 <== NOT EXECUTED
4a102: 6710 beqs 4a114 <pthread_attr_getinheritsched+0x20><== NOT EXECUTED
4a104: 4a90 tstl %a0@ <== NOT EXECUTED
4a106: 670c beqs 4a114 <pthread_attr_getinheritsched+0x20><== NOT EXECUTED
4a108: 4a89 tstl %a1 <== NOT EXECUTED
4a10a: 6708 beqs 4a114 <pthread_attr_getinheritsched+0x20><== NOT EXECUTED
return EINVAL;
*inheritsched = attr->inheritsched;
4a10c: 22a8 0010 movel %a0@(16),%a1@ <== NOT EXECUTED
return 0;
4a110: 4280 clrl %d0 <== NOT EXECUTED
4a112: 6002 bras 4a116 <pthread_attr_getinheritsched+0x22><== NOT EXECUTED
const pthread_attr_t *attr,
int *inheritsched
)
{
if ( !attr || !attr->is_initialized || !inheritsched )
return EINVAL;
4a114: 7016 moveq #22,%d0 <== NOT EXECUTED
*inheritsched = attr->inheritsched;
return 0;
}
4a116: 4e5e unlk %fp <== NOT EXECUTED
...
0004a11c <pthread_attr_getschedparam>:
int pthread_attr_getschedparam(
const pthread_attr_t *attr,
struct sched_param *param
)
{
4a11c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4a120: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4a124: 202e 000c movel %fp@(12),%d0 <== NOT EXECUTED
if ( !attr || !attr->is_initialized || !param )
4a128: 4a88 tstl %a0 <== NOT EXECUTED
4a12a: 6720 beqs 4a14c <pthread_attr_getschedparam+0x30><== NOT EXECUTED
4a12c: 4a90 tstl %a0@ <== NOT EXECUTED
4a12e: 671c beqs 4a14c <pthread_attr_getschedparam+0x30><== NOT EXECUTED
4a130: 4a80 tstl %d0 <== NOT EXECUTED
4a132: 6718 beqs 4a14c <pthread_attr_getschedparam+0x30><== NOT EXECUTED
return EINVAL;
*param = attr->schedparam;
4a134: 4878 001c pea 1c <OPER2+0x8> <== NOT EXECUTED
4a138: 4868 0018 pea %a0@(24) <== NOT EXECUTED
4a13c: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4a13e: 4eb9 0005 2c10 jsr 52c10 <memcpy> <== NOT EXECUTED
return 0;
4a144: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4a148: 4280 clrl %d0 <== NOT EXECUTED
4a14a: 6002 bras 4a14e <pthread_attr_getschedparam+0x32><== NOT EXECUTED
const pthread_attr_t *attr,
struct sched_param *param
)
{
if ( !attr || !attr->is_initialized || !param )
return EINVAL;
4a14c: 7016 moveq #22,%d0 <== NOT EXECUTED
*param = attr->schedparam;
return 0;
}
4a14e: 4e5e unlk %fp <== NOT EXECUTED
...
0004a154 <pthread_attr_getschedpolicy>:
int pthread_attr_getschedpolicy(
const pthread_attr_t *attr,
int *policy
)
{
4a154: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4a158: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4a15c: 226e 000c moveal %fp@(12),%a1 <== NOT EXECUTED
if ( !attr || !attr->is_initialized || !policy )
4a160: 4a88 tstl %a0 <== NOT EXECUTED
4a162: 6710 beqs 4a174 <pthread_attr_getschedpolicy+0x20><== NOT EXECUTED
4a164: 4a90 tstl %a0@ <== NOT EXECUTED
4a166: 670c beqs 4a174 <pthread_attr_getschedpolicy+0x20><== NOT EXECUTED
4a168: 4a89 tstl %a1 <== NOT EXECUTED
4a16a: 6708 beqs 4a174 <pthread_attr_getschedpolicy+0x20><== NOT EXECUTED
return EINVAL;
*policy = attr->schedpolicy;
4a16c: 22a8 0014 movel %a0@(20),%a1@ <== NOT EXECUTED
return 0;
4a170: 4280 clrl %d0 <== NOT EXECUTED
4a172: 6002 bras 4a176 <pthread_attr_getschedpolicy+0x22><== NOT EXECUTED
const pthread_attr_t *attr,
int *policy
)
{
if ( !attr || !attr->is_initialized || !policy )
return EINVAL;
4a174: 7016 moveq #22,%d0 <== NOT EXECUTED
*policy = attr->schedpolicy;
return 0;
}
4a176: 4e5e unlk %fp <== NOT EXECUTED
...
0004a17c <pthread_attr_getscope>:
int pthread_attr_getscope(
const pthread_attr_t *attr,
int *contentionscope
)
{
4a17c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4a180: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4a184: 226e 000c moveal %fp@(12),%a1 <== NOT EXECUTED
if ( !attr || !attr->is_initialized || !contentionscope )
4a188: 4a88 tstl %a0 <== NOT EXECUTED
4a18a: 6710 beqs 4a19c <pthread_attr_getscope+0x20> <== NOT EXECUTED
4a18c: 4a90 tstl %a0@ <== NOT EXECUTED
4a18e: 670c beqs 4a19c <pthread_attr_getscope+0x20> <== NOT EXECUTED
4a190: 4a89 tstl %a1 <== NOT EXECUTED
4a192: 6708 beqs 4a19c <pthread_attr_getscope+0x20> <== NOT EXECUTED
return EINVAL;
*contentionscope = attr->contentionscope;
4a194: 22a8 000c movel %a0@(12),%a1@ <== NOT EXECUTED
return 0;
4a198: 4280 clrl %d0 <== NOT EXECUTED
4a19a: 6002 bras 4a19e <pthread_attr_getscope+0x22> <== NOT EXECUTED
const pthread_attr_t *attr,
int *contentionscope
)
{
if ( !attr || !attr->is_initialized || !contentionscope )
return EINVAL;
4a19c: 7016 moveq #22,%d0 <== NOT EXECUTED
*contentionscope = attr->contentionscope;
return 0;
}
4a19e: 4e5e unlk %fp <== NOT EXECUTED
...
0004a1cc <pthread_attr_getstack>:
int pthread_attr_getstack(
const pthread_attr_t *attr,
void **stackaddr,
size_t *stacksize
)
{
4a1cc: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4a1d0: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4a1d4: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4a1d6: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
4a1da: 226e 0010 moveal %fp@(16),%a1 <== NOT EXECUTED
if ( !attr || !attr->is_initialized || !stackaddr || !stacksize )
4a1de: 4a88 tstl %a0 <== NOT EXECUTED
4a1e0: 6718 beqs 4a1fa <pthread_attr_getstack+0x2e> <== NOT EXECUTED
4a1e2: 4a90 tstl %a0@ <== NOT EXECUTED
4a1e4: 6714 beqs 4a1fa <pthread_attr_getstack+0x2e> <== NOT EXECUTED
4a1e6: 4a8a tstl %a2 <== NOT EXECUTED
4a1e8: 6710 beqs 4a1fa <pthread_attr_getstack+0x2e> <== NOT EXECUTED
4a1ea: 4a89 tstl %a1 <== NOT EXECUTED
4a1ec: 670c beqs 4a1fa <pthread_attr_getstack+0x2e> <== NOT EXECUTED
return EINVAL;
*stackaddr = attr->stackaddr;
4a1ee: 24a8 0004 movel %a0@(4),%a2@ <== NOT EXECUTED
*stacksize = attr->stacksize;
return 0;
4a1f2: 4280 clrl %d0 <== NOT EXECUTED
{
if ( !attr || !attr->is_initialized || !stackaddr || !stacksize )
return EINVAL;
*stackaddr = attr->stackaddr;
*stacksize = attr->stacksize;
4a1f4: 22a8 0008 movel %a0@(8),%a1@ <== NOT EXECUTED
return 0;
4a1f8: 6002 bras 4a1fc <pthread_attr_getstack+0x30> <== NOT EXECUTED
void **stackaddr,
size_t *stacksize
)
{
if ( !attr || !attr->is_initialized || !stackaddr || !stacksize )
return EINVAL;
4a1fa: 7016 moveq #22,%d0 <== NOT EXECUTED
*stackaddr = attr->stackaddr;
*stacksize = attr->stacksize;
return 0;
}
4a1fc: 245f moveal %sp@+,%a2 <== NOT EXECUTED
4a1fe: 4e5e unlk %fp <== NOT EXECUTED
...
0004a1a4 <pthread_attr_getstackaddr>:
int pthread_attr_getstackaddr(
const pthread_attr_t *attr,
void **stackaddr
)
{
4a1a4: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4a1a8: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4a1ac: 226e 000c moveal %fp@(12),%a1 <== NOT EXECUTED
if ( !attr || !attr->is_initialized || !stackaddr )
4a1b0: 4a88 tstl %a0 <== NOT EXECUTED
4a1b2: 6710 beqs 4a1c4 <pthread_attr_getstackaddr+0x20> <== NOT EXECUTED
4a1b4: 4a90 tstl %a0@ <== NOT EXECUTED
4a1b6: 670c beqs 4a1c4 <pthread_attr_getstackaddr+0x20> <== NOT EXECUTED
4a1b8: 4a89 tstl %a1 <== NOT EXECUTED
4a1ba: 6708 beqs 4a1c4 <pthread_attr_getstackaddr+0x20> <== NOT EXECUTED
return EINVAL;
*stackaddr = attr->stackaddr;
4a1bc: 22a8 0004 movel %a0@(4),%a1@ <== NOT EXECUTED
return 0;
4a1c0: 4280 clrl %d0 <== NOT EXECUTED
4a1c2: 6002 bras 4a1c6 <pthread_attr_getstackaddr+0x22> <== NOT EXECUTED
const pthread_attr_t *attr,
void **stackaddr
)
{
if ( !attr || !attr->is_initialized || !stackaddr )
return EINVAL;
4a1c4: 7016 moveq #22,%d0 <== NOT EXECUTED
*stackaddr = attr->stackaddr;
return 0;
}
4a1c6: 4e5e unlk %fp <== NOT EXECUTED
...
0004a204 <pthread_attr_getstacksize>:
int pthread_attr_getstacksize(
const pthread_attr_t *attr,
size_t *stacksize
)
{
4a204: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4a208: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4a20c: 226e 000c moveal %fp@(12),%a1 <== NOT EXECUTED
if ( !attr || !attr->is_initialized || !stacksize )
4a210: 4a88 tstl %a0 <== NOT EXECUTED
4a212: 6710 beqs 4a224 <pthread_attr_getstacksize+0x20> <== NOT EXECUTED
4a214: 4a90 tstl %a0@ <== NOT EXECUTED
4a216: 670c beqs 4a224 <pthread_attr_getstacksize+0x20> <== NOT EXECUTED
4a218: 4a89 tstl %a1 <== NOT EXECUTED
4a21a: 6708 beqs 4a224 <pthread_attr_getstacksize+0x20> <== NOT EXECUTED
return EINVAL;
*stacksize = attr->stacksize;
4a21c: 22a8 0008 movel %a0@(8),%a1@ <== NOT EXECUTED
return 0;
4a220: 4280 clrl %d0 <== NOT EXECUTED
4a222: 6002 bras 4a226 <pthread_attr_getstacksize+0x22> <== NOT EXECUTED
const pthread_attr_t *attr,
size_t *stacksize
)
{
if ( !attr || !attr->is_initialized || !stacksize )
return EINVAL;
4a224: 7016 moveq #22,%d0 <== NOT EXECUTED
*stacksize = attr->stacksize;
return 0;
}
4a226: 4e5e unlk %fp <== NOT EXECUTED
...
0004b33c <pthread_attr_init>:
#include <rtems/posix/pthread.h>
int pthread_attr_init(
pthread_attr_t *attr
)
{
4b33c: 4e56 0000 linkw %fp,#0
4b340: 202e 0008 movel %fp@(8),%d0
if ( !attr )
4b344: 671a beqs 4b360 <pthread_attr_init+0x24> <== NEVER TAKEN
return EINVAL;
*attr = _POSIX_Threads_Default_attributes;
4b346: 4878 0040 pea 40 <DBL_MANT_DIG+0xb>
4b34a: 4879 0005 c30e pea 5c30e <_POSIX_Threads_Default_attributes>
4b350: 2f00 movel %d0,%sp@-
4b352: 4eb9 0004 ddc4 jsr 4ddc4 <memcpy>
return 0;
4b358: 4fef 000c lea %sp@(12),%sp
4b35c: 4280 clrl %d0
4b35e: 6002 bras 4b362 <pthread_attr_init+0x26>
int pthread_attr_init(
pthread_attr_t *attr
)
{
if ( !attr )
return EINVAL;
4b360: 7016 moveq #22,%d0
*attr = _POSIX_Threads_Default_attributes;
return 0;
}
4b362: 4e5e unlk %fp
...
0004ab5c <pthread_attr_setcputime>:
int pthread_attr_setcputime(
pthread_attr_t *attr,
int clock_allowed
)
{
4ab5c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4ab60: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4ab64: 202e 000c movel %fp@(12),%d0 <== NOT EXECUTED
if ( !attr || !attr->is_initialized )
4ab68: 4a88 tstl %a0 <== NOT EXECUTED
4ab6a: 6712 beqs 4ab7e <pthread_attr_setcputime+0x22> <== NOT EXECUTED
4ab6c: 4a90 tstl %a0@ <== NOT EXECUTED
4ab6e: 670e beqs 4ab7e <pthread_attr_setcputime+0x22> <== NOT EXECUTED
return EINVAL;
switch ( clock_allowed ) {
4ab70: 7201 moveq #1,%d1 <== NOT EXECUTED
4ab72: b280 cmpl %d0,%d1 <== NOT EXECUTED
4ab74: 6508 bcss 4ab7e <pthread_attr_setcputime+0x22> <== NOT EXECUTED
case CLOCK_ENABLED:
case CLOCK_DISABLED:
attr->cputime_clock_allowed = clock_allowed;
4ab76: 2140 0038 movel %d0,%a0@(56) <== NOT EXECUTED
return 0;
4ab7a: 4280 clrl %d0 <== NOT EXECUTED
4ab7c: 6002 bras 4ab80 <pthread_attr_setcputime+0x24> <== NOT EXECUTED
default:
return EINVAL;
4ab7e: 7016 moveq #22,%d0 <== NOT EXECUTED
}
}
4ab80: 4e5e unlk %fp <== NOT EXECUTED
0004a258 <pthread_attr_setdetachstate>:
int pthread_attr_setdetachstate(
pthread_attr_t *attr,
int detachstate
)
{
4a258: 4e56 0000 linkw %fp,#0
4a25c: 206e 0008 moveal %fp@(8),%a0
4a260: 202e 000c movel %fp@(12),%d0
if ( !attr || !attr->is_initialized )
4a264: 4a88 tstl %a0
4a266: 6712 beqs 4a27a <pthread_attr_setdetachstate+0x22><== NEVER TAKEN
4a268: 4a90 tstl %a0@
4a26a: 670e beqs 4a27a <pthread_attr_setdetachstate+0x22><== NEVER TAKEN
return EINVAL;
switch ( detachstate ) {
4a26c: 7201 moveq #1,%d1
4a26e: b280 cmpl %d0,%d1
4a270: 6508 bcss 4a27a <pthread_attr_setdetachstate+0x22><== NEVER TAKEN
case PTHREAD_CREATE_DETACHED:
case PTHREAD_CREATE_JOINABLE:
attr->detachstate = detachstate;
4a272: 2140 003c movel %d0,%a0@(60)
return 0;
4a276: 4280 clrl %d0
4a278: 6002 bras 4a27c <pthread_attr_setdetachstate+0x24>
default:
return EINVAL;
4a27a: 7016 moveq #22,%d0 <== NOT EXECUTED
}
}
4a27c: 4e5e unlk %fp <== NOT EXECUTED
0004a280 <pthread_attr_setguardsize>:
int pthread_attr_setguardsize(
pthread_attr_t *attr,
size_t guardsize
)
{
4a280: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4a284: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
if ( !attr || !attr->is_initialized )
4a288: 4a88 tstl %a0 <== NOT EXECUTED
4a28a: 670e beqs 4a29a <pthread_attr_setguardsize+0x1a> <== NOT EXECUTED
4a28c: 4a90 tstl %a0@ <== NOT EXECUTED
4a28e: 670a beqs 4a29a <pthread_attr_setguardsize+0x1a> <== NOT EXECUTED
return EINVAL;
attr->guardsize = guardsize;
return 0;
4a290: 4280 clrl %d0 <== NOT EXECUTED
)
{
if ( !attr || !attr->is_initialized )
return EINVAL;
attr->guardsize = guardsize;
4a292: 216e 000c 0034 movel %fp@(12),%a0@(52) <== NOT EXECUTED
return 0;
4a298: 6002 bras 4a29c <pthread_attr_setguardsize+0x1c> <== NOT EXECUTED
pthread_attr_t *attr,
size_t guardsize
)
{
if ( !attr || !attr->is_initialized )
return EINVAL;
4a29a: 7016 moveq #22,%d0 <== NOT EXECUTED
attr->guardsize = guardsize;
return 0;
}
4a29c: 4e5e unlk %fp <== NOT EXECUTED
0004b368 <pthread_attr_setinheritsched>:
int pthread_attr_setinheritsched(
pthread_attr_t *attr,
int inheritsched
)
{
4b368: 4e56 0000 linkw %fp,#0
4b36c: 206e 0008 moveal %fp@(8),%a0
4b370: 222e 000c movel %fp@(12),%d1
4b374: 2f02 movel %d2,%sp@-
if ( !attr || !attr->is_initialized )
4b376: 4a88 tstl %a0
4b378: 671c beqs 4b396 <pthread_attr_setinheritsched+0x2e><== NEVER TAKEN
4b37a: 4a90 tstl %a0@
4b37c: 6718 beqs 4b396 <pthread_attr_setinheritsched+0x2e><== NEVER TAKEN
return EINVAL;
switch ( inheritsched ) {
4b37e: 2241 moveal %d1,%a1
4b380: 5389 subql #1,%a1
case PTHREAD_EXPLICIT_SCHED:
attr->inheritsched = inheritsched;
return 0;
default:
return ENOTSUP;
4b382: 203c 0000 0086 movel #134,%d0
)
{
if ( !attr || !attr->is_initialized )
return EINVAL;
switch ( inheritsched ) {
4b388: 7401 moveq #1,%d2
4b38a: b489 cmpl %a1,%d2
4b38c: 650a bcss 4b398 <pthread_attr_setinheritsched+0x30><== NEVER TAKEN
case PTHREAD_INHERIT_SCHED:
case PTHREAD_EXPLICIT_SCHED:
attr->inheritsched = inheritsched;
4b38e: 2141 0010 movel %d1,%a0@(16)
return 0;
4b392: 4200 clrb %d0
4b394: 6002 bras 4b398 <pthread_attr_setinheritsched+0x30>
pthread_attr_t *attr,
int inheritsched
)
{
if ( !attr || !attr->is_initialized )
return EINVAL;
4b396: 7016 moveq #22,%d0 <== NOT EXECUTED
return 0;
default:
return ENOTSUP;
}
}
4b398: 241f movel %sp@+,%d2
4b39a: 4e5e unlk %fp
...
0004a2d8 <pthread_attr_setschedparam>:
int pthread_attr_setschedparam(
pthread_attr_t *attr,
const struct sched_param *param
)
{
4a2d8: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4a2dc: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4a2e0: 202e 000c movel %fp@(12),%d0 <== NOT EXECUTED
if ( !attr || !attr->is_initialized || !param )
4a2e4: 4a88 tstl %a0 <== NOT EXECUTED
4a2e6: 6720 beqs 4a308 <pthread_attr_setschedparam+0x30><== NOT EXECUTED
4a2e8: 4a90 tstl %a0@ <== NOT EXECUTED
4a2ea: 671c beqs 4a308 <pthread_attr_setschedparam+0x30><== NOT EXECUTED
4a2ec: 4a80 tstl %d0 <== NOT EXECUTED
4a2ee: 6718 beqs 4a308 <pthread_attr_setschedparam+0x30><== NOT EXECUTED
return EINVAL;
attr->schedparam = *param;
4a2f0: 4878 001c pea 1c <OPER2+0x8> <== NOT EXECUTED
4a2f4: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4a2f6: 4868 0018 pea %a0@(24) <== NOT EXECUTED
4a2fa: 4eb9 0005 2c10 jsr 52c10 <memcpy> <== NOT EXECUTED
return 0;
4a300: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4a304: 4280 clrl %d0 <== NOT EXECUTED
4a306: 6002 bras 4a30a <pthread_attr_setschedparam+0x32><== NOT EXECUTED
pthread_attr_t *attr,
const struct sched_param *param
)
{
if ( !attr || !attr->is_initialized || !param )
return EINVAL;
4a308: 7016 moveq #22,%d0 <== NOT EXECUTED
attr->schedparam = *param;
return 0;
}
4a30a: 4e5e unlk %fp <== NOT EXECUTED
...
0004a310 <pthread_attr_setschedpolicy>:
int pthread_attr_setschedpolicy(
pthread_attr_t *attr,
int policy
)
{
4a310: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4a314: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4a318: 222e 000c movel %fp@(12),%d1 <== NOT EXECUTED
4a31c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
if ( !attr || !attr->is_initialized )
4a31e: 4a88 tstl %a0 <== NOT EXECUTED
4a320: 671e beqs 4a340 <pthread_attr_setschedpolicy+0x30><== NOT EXECUTED
4a322: 4a90 tstl %a0@ <== NOT EXECUTED
4a324: 671a beqs 4a340 <pthread_attr_setschedpolicy+0x30><== NOT EXECUTED
return EINVAL;
switch ( policy ) {
4a326: 7004 moveq #4,%d0 <== NOT EXECUTED
4a328: b081 cmpl %d1,%d0 <== NOT EXECUTED
4a32a: 6518 bcss 4a344 <pthread_attr_setschedpolicy+0x34><== NOT EXECUTED
4a32c: 103c 0001 moveb #1,%d0 <== NOT EXECUTED
4a330: 7417 moveq #23,%d2 <== NOT EXECUTED
4a332: e3a8 lsll %d1,%d0 <== NOT EXECUTED
4a334: c082 andl %d2,%d0 <== NOT EXECUTED
4a336: 670c beqs 4a344 <pthread_attr_setschedpolicy+0x34><== NOT EXECUTED
case SCHED_OTHER:
case SCHED_FIFO:
case SCHED_RR:
case SCHED_SPORADIC:
attr->schedpolicy = policy;
4a338: 2141 0014 movel %d1,%a0@(20) <== NOT EXECUTED
return 0;
4a33c: 4280 clrl %d0 <== NOT EXECUTED
4a33e: 600a bras 4a34a <pthread_attr_setschedpolicy+0x3a><== NOT EXECUTED
pthread_attr_t *attr,
int policy
)
{
if ( !attr || !attr->is_initialized )
return EINVAL;
4a340: 7016 moveq #22,%d0 <== NOT EXECUTED
4a342: 6006 bras 4a34a <pthread_attr_setschedpolicy+0x3a><== NOT EXECUTED
case SCHED_SPORADIC:
attr->schedpolicy = policy;
return 0;
default:
return ENOTSUP;
4a344: 203c 0000 0086 movel #134,%d0 <== NOT EXECUTED
}
}
4a34a: 241f movel %sp@+,%d2 <== NOT EXECUTED
4a34c: 4e5e unlk %fp <== NOT EXECUTED
0004a350 <pthread_attr_setscope>:
int pthread_attr_setscope(
pthread_attr_t *attr,
int contentionscope
)
{
4a350: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4a354: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4a358: 222e 000c movel %fp@(12),%d1 <== NOT EXECUTED
4a35c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
if ( !attr || !attr->is_initialized )
4a35e: 4a88 tstl %a0 <== NOT EXECUTED
4a360: 671e beqs 4a380 <pthread_attr_setscope+0x30> <== NOT EXECUTED
4a362: 4a90 tstl %a0@ <== NOT EXECUTED
4a364: 671a beqs 4a380 <pthread_attr_setscope+0x30> <== NOT EXECUTED
return EINVAL;
switch ( contentionscope ) {
4a366: 4a81 tstl %d1 <== NOT EXECUTED
4a368: 670e beqs 4a378 <pthread_attr_setscope+0x28> <== NOT EXECUTED
case PTHREAD_SCOPE_PROCESS:
attr->contentionscope = contentionscope;
return 0;
case PTHREAD_SCOPE_SYSTEM:
return ENOTSUP;
4a36a: 203c 0000 0086 movel #134,%d0 <== NOT EXECUTED
)
{
if ( !attr || !attr->is_initialized )
return EINVAL;
switch ( contentionscope ) {
4a370: 7401 moveq #1,%d2 <== NOT EXECUTED
4a372: b481 cmpl %d1,%d2 <== NOT EXECUTED
4a374: 660a bnes 4a380 <pthread_attr_setscope+0x30> <== NOT EXECUTED
4a376: 600a bras 4a382 <pthread_attr_setscope+0x32> <== NOT EXECUTED
case PTHREAD_SCOPE_PROCESS:
attr->contentionscope = contentionscope;
4a378: 42a8 000c clrl %a0@(12) <== NOT EXECUTED
return 0;
4a37c: 4280 clrl %d0 <== NOT EXECUTED
4a37e: 6002 bras 4a382 <pthread_attr_setscope+0x32> <== NOT EXECUTED
case PTHREAD_SCOPE_SYSTEM:
return ENOTSUP;
default:
return EINVAL;
4a380: 7016 moveq #22,%d0 <== NOT EXECUTED
}
}
4a382: 241f movel %sp@+,%d2 <== NOT EXECUTED
4a384: 4e5e unlk %fp <== NOT EXECUTED
0004a3a8 <pthread_attr_setstack>:
int pthread_attr_setstack(
pthread_attr_t *attr,
void *stackaddr,
size_t stacksize
)
{
4a3a8: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4a3ac: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4a3b0: 222e 0010 movel %fp@(16),%d1 <== NOT EXECUTED
if ( !attr || !attr->is_initialized )
4a3b4: 4a88 tstl %a0 <== NOT EXECUTED
4a3b6: 6724 beqs 4a3dc <pthread_attr_setstack+0x34> <== NOT EXECUTED
4a3b8: 4a90 tstl %a0@ <== NOT EXECUTED
4a3ba: 6720 beqs 4a3dc <pthread_attr_setstack+0x34> <== NOT EXECUTED
return EINVAL;
if (stacksize < PTHREAD_MINIMUM_STACK_SIZE)
4a3bc: 2039 0006 4c72 movel 64c72 <rtems_minimum_stack_size>,%d0 <== NOT EXECUTED
4a3c2: d080 addl %d0,%d0 <== NOT EXECUTED
4a3c4: b081 cmpl %d1,%d0 <== NOT EXECUTED
4a3c6: 6306 blss 4a3ce <pthread_attr_setstack+0x26> <== NOT EXECUTED
attr->stacksize = PTHREAD_MINIMUM_STACK_SIZE;
4a3c8: 2140 0008 movel %d0,%a0@(8) <== NOT EXECUTED
4a3cc: 6004 bras 4a3d2 <pthread_attr_setstack+0x2a> <== NOT EXECUTED
else
attr->stacksize = stacksize;
4a3ce: 2141 0008 movel %d1,%a0@(8) <== NOT EXECUTED
attr->stackaddr = stackaddr;
return 0;
4a3d2: 4280 clrl %d0 <== NOT EXECUTED
if (stacksize < PTHREAD_MINIMUM_STACK_SIZE)
attr->stacksize = PTHREAD_MINIMUM_STACK_SIZE;
else
attr->stacksize = stacksize;
attr->stackaddr = stackaddr;
4a3d4: 216e 000c 0004 movel %fp@(12),%a0@(4) <== NOT EXECUTED
return 0;
4a3da: 6002 bras 4a3de <pthread_attr_setstack+0x36> <== NOT EXECUTED
void *stackaddr,
size_t stacksize
)
{
if ( !attr || !attr->is_initialized )
return EINVAL;
4a3dc: 7016 moveq #22,%d0 <== NOT EXECUTED
else
attr->stacksize = stacksize;
attr->stackaddr = stackaddr;
return 0;
}
4a3de: 4e5e unlk %fp <== NOT EXECUTED
...
0004a388 <pthread_attr_setstackaddr>:
int pthread_attr_setstackaddr(
pthread_attr_t *attr,
void *stackaddr
)
{
4a388: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4a38c: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
if ( !attr || !attr->is_initialized )
4a390: 4a88 tstl %a0 <== NOT EXECUTED
4a392: 670e beqs 4a3a2 <pthread_attr_setstackaddr+0x1a> <== NOT EXECUTED
4a394: 4a90 tstl %a0@ <== NOT EXECUTED
4a396: 670a beqs 4a3a2 <pthread_attr_setstackaddr+0x1a> <== NOT EXECUTED
return EINVAL;
attr->stackaddr = stackaddr;
return 0;
4a398: 4280 clrl %d0 <== NOT EXECUTED
)
{
if ( !attr || !attr->is_initialized )
return EINVAL;
attr->stackaddr = stackaddr;
4a39a: 216e 000c 0004 movel %fp@(12),%a0@(4) <== NOT EXECUTED
return 0;
4a3a0: 6002 bras 4a3a4 <pthread_attr_setstackaddr+0x1c> <== NOT EXECUTED
pthread_attr_t *attr,
void *stackaddr
)
{
if ( !attr || !attr->is_initialized )
return EINVAL;
4a3a2: 7016 moveq #22,%d0 <== NOT EXECUTED
attr->stackaddr = stackaddr;
return 0;
}
4a3a4: 4e5e unlk %fp <== NOT EXECUTED
0004b3a0 <pthread_attr_setstacksize>:
int pthread_attr_setstacksize(
pthread_attr_t *attr,
size_t stacksize
)
{
4b3a0: 4e56 0000 linkw %fp,#0
4b3a4: 206e 0008 moveal %fp@(8),%a0
4b3a8: 222e 000c movel %fp@(12),%d1
if ( !attr || !attr->is_initialized )
4b3ac: 4a88 tstl %a0
4b3ae: 671e beqs 4b3ce <pthread_attr_setstacksize+0x2e> <== NEVER TAKEN
4b3b0: 4a90 tstl %a0@
4b3b2: 671a beqs 4b3ce <pthread_attr_setstacksize+0x2e> <== NEVER TAKEN
return EINVAL;
if (stacksize < PTHREAD_MINIMUM_STACK_SIZE)
4b3b4: 2039 0005 d2a2 movel 5d2a2 <rtems_minimum_stack_size>,%d0
4b3ba: d080 addl %d0,%d0
4b3bc: b081 cmpl %d1,%d0
4b3be: 6306 blss 4b3c6 <pthread_attr_setstacksize+0x26>
attr->stacksize = PTHREAD_MINIMUM_STACK_SIZE;
4b3c0: 2140 0008 movel %d0,%a0@(8)
4b3c4: 6004 bras 4b3ca <pthread_attr_setstacksize+0x2a>
else
attr->stacksize = stacksize;
4b3c6: 2141 0008 movel %d1,%a0@(8)
return 0;
4b3ca: 4280 clrl %d0
4b3cc: 6002 bras 4b3d0 <pthread_attr_setstacksize+0x30>
pthread_attr_t *attr,
size_t stacksize
)
{
if ( !attr || !attr->is_initialized )
return EINVAL;
4b3ce: 7016 moveq #22,%d0 <== NOT EXECUTED
if (stacksize < PTHREAD_MINIMUM_STACK_SIZE)
attr->stacksize = PTHREAD_MINIMUM_STACK_SIZE;
else
attr->stacksize = stacksize;
return 0;
}
4b3d0: 4e5e unlk %fp <== NOT EXECUTED
0004593c <pthread_barrier_destroy>:
*/
int pthread_barrier_destroy(
pthread_barrier_t *barrier
)
{
4593c: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
45940: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
45944: 2f0b movel %a3,%sp@- <== NOT EXECUTED
45946: 2f0a movel %a2,%sp@- <== NOT EXECUTED
POSIX_Barrier_Control *the_barrier = NULL;
Objects_Locations location;
if ( !barrier )
45948: 4a88 tstl %a0 <== NOT EXECUTED
4594a: 6756 beqs 459a2 <pthread_barrier_destroy+0x66> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE POSIX_Barrier_Control *_POSIX_Barrier_Get (
pthread_barrier_t *barrier,
Objects_Locations *location
)
{
return (POSIX_Barrier_Control *) _Objects_Get(
4594c: 486e fffc pea %fp@(-4) <== NOT EXECUTED
45950: 2f10 movel %a0@,%sp@- <== NOT EXECUTED
45952: 4879 0005 f41e pea 5f41e <_POSIX_Barrier_Information> <== NOT EXECUTED
45958: 4eb9 0004 7d30 jsr 47d30 <_Objects_Get> <== NOT EXECUTED
return EINVAL;
the_barrier = _POSIX_Barrier_Get( barrier, &location );
switch ( location ) {
4595e: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
45962: 2440 moveal %d0,%a2 <== NOT EXECUTED
45964: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
45968: 6638 bnes 459a2 <pthread_barrier_destroy+0x66> <== NOT EXECUTED
4596a: 47f9 0004 8796 lea 48796 <_Thread_Enable_dispatch>,%a3 <== NOT EXECUTED
case OBJECTS_LOCAL:
if ( the_barrier->Barrier.number_of_waiting_threads != 0 ) {
45970: 4aaa 0058 tstl %a2@(88) <== NOT EXECUTED
45974: 6706 beqs 4597c <pthread_barrier_destroy+0x40> <== NOT EXECUTED
_Thread_Enable_dispatch();
45976: 4e93 jsr %a3@ <== NOT EXECUTED
return EBUSY;
45978: 7010 moveq #16,%d0 <== NOT EXECUTED
4597a: 6028 bras 459a4 <pthread_barrier_destroy+0x68> <== NOT EXECUTED
}
_Objects_Close( &_POSIX_Barrier_Information, &the_barrier->Object );
4597c: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4597e: 4879 0005 f41e pea 5f41e <_POSIX_Barrier_Information> <== NOT EXECUTED
45984: 4eb9 0004 7954 jsr 47954 <_Objects_Close> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _POSIX_Barrier_Free (
POSIX_Barrier_Control *the_barrier
)
{
_Objects_Free( &_POSIX_Barrier_Information, &the_barrier->Object );
4598a: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4598c: 4879 0005 f41e pea 5f41e <_POSIX_Barrier_Information> <== NOT EXECUTED
45992: 4eb9 0004 7bcc jsr 47bcc <_Objects_Free> <== NOT EXECUTED
_POSIX_Barrier_Free( the_barrier );
_Thread_Enable_dispatch();
45998: 4e93 jsr %a3@ <== NOT EXECUTED
return 0;
4599a: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
4599e: 4280 clrl %d0 <== NOT EXECUTED
459a0: 6002 bras 459a4 <pthread_barrier_destroy+0x68> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
459a2: 7016 moveq #22,%d0 <== NOT EXECUTED
}
459a4: 246e fff4 moveal %fp@(-12),%a2 <== NOT EXECUTED
459a8: 266e fff8 moveal %fp@(-8),%a3 <== NOT EXECUTED
459ac: 4e5e unlk %fp <== NOT EXECUTED
000459b0 <pthread_barrier_init>:
int pthread_barrier_init(
pthread_barrier_t *barrier,
const pthread_barrierattr_t *attr,
unsigned int count
)
{
459b0: 4e56 ffdc linkw %fp,#-36 <== NOT EXECUTED
459b4: 206e 000c moveal %fp@(12),%a0 <== NOT EXECUTED
459b8: 48d7 1c0c moveml %d2-%d3/%a2-%a4,%sp@ <== NOT EXECUTED
459bc: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
459c0: 242e 0010 movel %fp@(16),%d2 <== NOT EXECUTED
const pthread_barrierattr_t *the_attr;
/*
* Error check parameters
*/
if ( !barrier )
459c4: 4a8a tstl %a2 <== NOT EXECUTED
459c6: 6700 008e beqw 45a56 <pthread_barrier_init+0xa6> <== NOT EXECUTED
return EINVAL;
if ( count == 0 )
459ca: 4a82 tstl %d2 <== NOT EXECUTED
459cc: 6700 0088 beqw 45a56 <pthread_barrier_init+0xa6> <== NOT EXECUTED
return EINVAL;
/*
* If the user passed in NULL, use the default attributes
*/
if ( attr ) {
459d0: 4a88 tstl %a0 <== NOT EXECUTED
459d2: 6614 bnes 459e8 <pthread_barrier_init+0x38> <== NOT EXECUTED
the_attr = attr;
} else {
(void) pthread_barrierattr_init( &my_attr );
459d4: 260e movel %fp,%d3 <== NOT EXECUTED
459d6: 0683 ffff fff0 addil #-16,%d3 <== NOT EXECUTED
459dc: 2f03 movel %d3,%sp@- <== NOT EXECUTED
459de: 4eb9 0004 58f4 jsr 458f4 <pthread_barrierattr_init> <== NOT EXECUTED
459e4: 588f addql #4,%sp <== NOT EXECUTED
the_attr = &my_attr;
459e6: 2043 moveal %d3,%a0 <== NOT EXECUTED
}
/*
* Now start error checking the attributes that we are going to use
*/
if ( !the_attr->is_initialized )
459e8: 4a90 tstl %a0@ <== NOT EXECUTED
459ea: 676a beqs 45a56 <pthread_barrier_init+0xa6> <== NOT EXECUTED
return EINVAL;
switch ( the_attr->process_shared ) {
459ec: 4aa8 0004 tstl %a0@(4) <== NOT EXECUTED
459f0: 6664 bnes 45a56 <pthread_barrier_init+0xa6> <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
459f2: 2039 0005 f0fc movel 5f0fc <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
459f8: 5280 addql #1,%d0 <== NOT EXECUTED
}
/*
* Convert from POSIX attributes to Core Barrier attributes
*/
the_attributes.discipline = CORE_BARRIER_AUTOMATIC_RELEASE;
459fa: 42ae fff8 clrl %fp@(-8) <== NOT EXECUTED
the_attributes.maximum_count = count;
459fe: 2d42 fffc movel %d2,%fp@(-4) <== NOT EXECUTED
45a02: 23c0 0005 f0fc movel %d0,5f0fc <_Thread_Dispatch_disable_level><== NOT EXECUTED
* the inactive chain of free barrier control blocks.
*/
RTEMS_INLINE_ROUTINE POSIX_Barrier_Control *_POSIX_Barrier_Allocate( void )
{
return (POSIX_Barrier_Control *)
_Objects_Allocate( &_POSIX_Barrier_Information );
45a08: 4879 0005 f41e pea 5f41e <_POSIX_Barrier_Information> <== NOT EXECUTED
45a0e: 49f9 0004 8796 lea 48796 <_Thread_Enable_dispatch>,%a4 <== NOT EXECUTED
45a14: 4eb9 0004 78d8 jsr 478d8 <_Objects_Allocate> <== NOT EXECUTED
*/
_Thread_Disable_dispatch(); /* prevents deletion */
the_barrier = _POSIX_Barrier_Allocate();
if ( !the_barrier ) {
45a1a: 588f addql #4,%sp <== NOT EXECUTED
45a1c: 2640 moveal %d0,%a3 <== NOT EXECUTED
45a1e: 4a80 tstl %d0 <== NOT EXECUTED
45a20: 6606 bnes 45a28 <pthread_barrier_init+0x78> <== NOT EXECUTED
_Thread_Enable_dispatch();
45a22: 4e94 jsr %a4@ <== NOT EXECUTED
return EAGAIN;
45a24: 700b moveq #11,%d0 <== NOT EXECUTED
45a26: 6030 bras 45a58 <pthread_barrier_init+0xa8> <== NOT EXECUTED
}
_CORE_barrier_Initialize( &the_barrier->Barrier, &the_attributes );
45a28: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
45a2c: 486b 0010 pea %a3@(16) <== NOT EXECUTED
45a30: 4eb9 0004 6fe0 jsr 46fe0 <_CORE_barrier_Initialize> <== NOT EXECUTED
uint32_t name
)
{
_Objects_Set_local_object(
information,
_Objects_Get_index( the_object->id ),
45a36: 202b 0008 movel %a3@(8),%d0 <== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
uint32_t name
)
{
_Objects_Set_local_object(
45a3a: 4281 clrl %d1 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
45a3c: 2079 0005 f436 moveal 5f436 <_POSIX_Barrier_Information+0x18>,%a0<== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
uint32_t name
)
{
_Objects_Set_local_object(
45a42: 3200 movew %d0,%d1 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
45a44: 218b 1c00 movel %a3,%a0@(00000000,%d1:l:4) <== NOT EXECUTED
_Objects_Get_index( the_object->id ),
the_object
);
/* ASSERT: information->is_string == false */
the_object->name.name_u32 = name;
45a48: 42ab 000c clrl %a3@(12) <== NOT EXECUTED
);
/*
* Exit the critical section and return the user an operational barrier
*/
*barrier = the_barrier->Object.id;
45a4c: 2480 movel %d0,%a2@ <== NOT EXECUTED
_Thread_Enable_dispatch();
45a4e: 4e94 jsr %a4@ <== NOT EXECUTED
return 0;
45a50: 508f addql #8,%sp <== NOT EXECUTED
45a52: 4280 clrl %d0 <== NOT EXECUTED
45a54: 6002 bras 45a58 <pthread_barrier_init+0xa8> <== NOT EXECUTED
switch ( the_attr->process_shared ) {
case PTHREAD_PROCESS_PRIVATE: /* only supported values */
break;
case PTHREAD_PROCESS_SHARED:
default:
return EINVAL;
45a56: 7016 moveq #22,%d0 <== NOT EXECUTED
* Exit the critical section and return the user an operational barrier
*/
*barrier = the_barrier->Object.id;
_Thread_Enable_dispatch();
return 0;
}
45a58: 4cee 1c0c ffdc moveml %fp@(-36),%d2-%d3/%a2-%a4 <== NOT EXECUTED
45a5e: 4e5e unlk %fp <== NOT EXECUTED
...
00045a64 <pthread_barrier_wait>:
*/
int pthread_barrier_wait(
pthread_barrier_t *barrier
)
{
45a64: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
45a68: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
POSIX_Barrier_Control *the_barrier = NULL;
Objects_Locations location;
if ( !barrier )
45a6c: 4a88 tstl %a0 <== NOT EXECUTED
45a6e: 6750 beqs 45ac0 <pthread_barrier_wait+0x5c> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE POSIX_Barrier_Control *_POSIX_Barrier_Get (
pthread_barrier_t *barrier,
Objects_Locations *location
)
{
return (POSIX_Barrier_Control *) _Objects_Get(
45a70: 486e fffc pea %fp@(-4) <== NOT EXECUTED
45a74: 2f10 movel %a0@,%sp@- <== NOT EXECUTED
45a76: 4879 0005 f41e pea 5f41e <_POSIX_Barrier_Information> <== NOT EXECUTED
45a7c: 4eb9 0004 7d30 jsr 47d30 <_Objects_Get> <== NOT EXECUTED
return EINVAL;
the_barrier = _POSIX_Barrier_Get( barrier, &location );
switch ( location ) {
45a82: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
45a86: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
45a8a: 6634 bnes 45ac0 <pthread_barrier_wait+0x5c> <== NOT EXECUTED
case OBJECTS_LOCAL:
_CORE_barrier_Wait(
45a8c: 42a7 clrl %sp@- <== NOT EXECUTED
45a8e: 2040 moveal %d0,%a0 <== NOT EXECUTED
45a90: 42a7 clrl %sp@- <== NOT EXECUTED
45a92: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
45a96: 2f28 0008 movel %a0@(8),%sp@- <== NOT EXECUTED
45a9a: 4868 0010 pea %a0@(16) <== NOT EXECUTED
45a9e: 4eb9 0004 701c jsr 4701c <_CORE_barrier_Wait> <== NOT EXECUTED
the_barrier->Object.id,
true,
0,
NULL
);
_Thread_Enable_dispatch();
45aa4: 4eb9 0004 8796 jsr 48796 <_Thread_Enable_dispatch> <== NOT EXECUTED
return _POSIX_Barrier_Translate_core_barrier_return_code(
_Thread_Executing->Wait.return_code );
45aaa: 2079 0005 f58a moveal 5f58a <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
true,
0,
NULL
);
_Thread_Enable_dispatch();
return _POSIX_Barrier_Translate_core_barrier_return_code(
45ab0: 2f28 0034 movel %a0@(52),%sp@- <== NOT EXECUTED
45ab4: 4eb9 0004 afe0 jsr 4afe0 <_POSIX_Barrier_Translate_core_barrier_return_code><== NOT EXECUTED
45aba: 4fef 0018 lea %sp@(24),%sp <== NOT EXECUTED
45abe: 6002 bras 45ac2 <pthread_barrier_wait+0x5e> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
45ac0: 7016 moveq #22,%d0 <== NOT EXECUTED
}
45ac2: 4e5e unlk %fp <== NOT EXECUTED
...
000458b4 <pthread_barrierattr_destroy>:
*/
int pthread_barrierattr_destroy(
pthread_barrierattr_t *attr
)
{
458b4: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
458b8: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
if ( !attr || attr->is_initialized == false )
458bc: 4a88 tstl %a0 <== NOT EXECUTED
458be: 670a beqs 458ca <pthread_barrierattr_destroy+0x16><== NOT EXECUTED
458c0: 4a90 tstl %a0@ <== NOT EXECUTED
458c2: 6706 beqs 458ca <pthread_barrierattr_destroy+0x16><== NOT EXECUTED
return EINVAL;
attr->is_initialized = false;
458c4: 4290 clrl %a0@ <== NOT EXECUTED
return 0;
458c6: 4280 clrl %d0 <== NOT EXECUTED
458c8: 6002 bras 458cc <pthread_barrierattr_destroy+0x18><== NOT EXECUTED
int pthread_barrierattr_destroy(
pthread_barrierattr_t *attr
)
{
if ( !attr || attr->is_initialized == false )
return EINVAL;
458ca: 7016 moveq #22,%d0 <== NOT EXECUTED
attr->is_initialized = false;
return 0;
}
458cc: 4e5e unlk %fp <== NOT EXECUTED
000458d0 <pthread_barrierattr_getpshared>:
int pthread_barrierattr_getpshared(
const pthread_barrierattr_t *attr,
int *pshared
)
{
458d0: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
458d4: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
if ( !attr )
458d8: 4a88 tstl %a0 <== NOT EXECUTED
458da: 6710 beqs 458ec <pthread_barrierattr_getpshared+0x1c><== NOT EXECUTED
return EINVAL;
if ( !attr->is_initialized )
458dc: 4a90 tstl %a0@ <== NOT EXECUTED
458de: 670c beqs 458ec <pthread_barrierattr_getpshared+0x1c><== NOT EXECUTED
return EINVAL;
*pshared = attr->process_shared;
458e0: 226e 000c moveal %fp@(12),%a1 <== NOT EXECUTED
return 0;
458e4: 4280 clrl %d0 <== NOT EXECUTED
return EINVAL;
if ( !attr->is_initialized )
return EINVAL;
*pshared = attr->process_shared;
458e6: 22a8 0004 movel %a0@(4),%a1@ <== NOT EXECUTED
return 0;
458ea: 6002 bras 458ee <pthread_barrierattr_getpshared+0x1e><== NOT EXECUTED
{
if ( !attr )
return EINVAL;
if ( !attr->is_initialized )
return EINVAL;
458ec: 7016 moveq #22,%d0 <== NOT EXECUTED
*pshared = attr->process_shared;
return 0;
}
458ee: 4e5e unlk %fp <== NOT EXECUTED
...
000458f4 <pthread_barrierattr_init>:
*/
int pthread_barrierattr_init(
pthread_barrierattr_t *attr
)
{
458f4: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
458f8: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
if ( !attr )
458fc: 4a88 tstl %a0 <== NOT EXECUTED
458fe: 670c beqs 4590c <pthread_barrierattr_init+0x18> <== NOT EXECUTED
return EINVAL;
attr->is_initialized = true;
45900: 7001 moveq #1,%d0 <== NOT EXECUTED
attr->process_shared = PTHREAD_PROCESS_PRIVATE;
45902: 42a8 0004 clrl %a0@(4) <== NOT EXECUTED
)
{
if ( !attr )
return EINVAL;
attr->is_initialized = true;
45906: 2080 movel %d0,%a0@ <== NOT EXECUTED
attr->process_shared = PTHREAD_PROCESS_PRIVATE;
return 0;
45908: 4280 clrl %d0 <== NOT EXECUTED
4590a: 6002 bras 4590e <pthread_barrierattr_init+0x1a> <== NOT EXECUTED
int pthread_barrierattr_init(
pthread_barrierattr_t *attr
)
{
if ( !attr )
return EINVAL;
4590c: 7016 moveq #22,%d0 <== NOT EXECUTED
attr->is_initialized = true;
attr->process_shared = PTHREAD_PROCESS_PRIVATE;
return 0;
}
4590e: 4e5e unlk %fp <== NOT EXECUTED
...
00045914 <pthread_barrierattr_setpshared>:
int pthread_barrierattr_setpshared(
pthread_barrierattr_t *attr,
int pshared
)
{
45914: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
45918: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4591c: 202e 000c movel %fp@(12),%d0 <== NOT EXECUTED
if ( !attr )
45920: 4a88 tstl %a0 <== NOT EXECUTED
45922: 6712 beqs 45936 <pthread_barrierattr_setpshared+0x22><== NOT EXECUTED
return EINVAL;
if ( !attr->is_initialized )
45924: 4a90 tstl %a0@ <== NOT EXECUTED
45926: 670e beqs 45936 <pthread_barrierattr_setpshared+0x22><== NOT EXECUTED
return EINVAL;
switch ( pshared ) {
45928: 7201 moveq #1,%d1 <== NOT EXECUTED
4592a: b280 cmpl %d0,%d1 <== NOT EXECUTED
4592c: 6508 bcss 45936 <pthread_barrierattr_setpshared+0x22><== NOT EXECUTED
case PTHREAD_PROCESS_SHARED:
case PTHREAD_PROCESS_PRIVATE:
attr->process_shared = pshared;
4592e: 2140 0004 movel %d0,%a0@(4) <== NOT EXECUTED
return 0;
45932: 4280 clrl %d0 <== NOT EXECUTED
45934: 6002 bras 45938 <pthread_barrierattr_setpshared+0x24><== NOT EXECUTED
default:
return EINVAL;
45936: 7016 moveq #22,%d0 <== NOT EXECUTED
}
}
45938: 4e5e unlk %fp <== NOT EXECUTED
00045148 <pthread_cancel>:
*/
int pthread_cancel(
pthread_t thread
)
{
45148: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
/*
* Don't even think about deleting a resource from an ISR.
*/
if ( _ISR_Is_in_progress() )
4514c: 4ab9 0005 e606 tstl 5e606 <_Per_CPU_Information+0x8> <== NOT EXECUTED
45152: 6638 bnes 4518c <pthread_cancel+0x44> <== NOT EXECUTED
pthread_t id,
Objects_Locations *location
)
{
return (Thread_Control *)
_Objects_Get( &_POSIX_Threads_Information, (Objects_Id)id, location );
45154: 486e fffc pea %fp@(-4) <== NOT EXECUTED
45158: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4515c: 4879 0005 e342 pea 5e342 <_POSIX_Threads_Information> <== NOT EXECUTED
45162: 4eb9 0004 7064 jsr 47064 <_Objects_Get> <== NOT EXECUTED
return EPROTO;
the_thread = _POSIX_Threads_Get( thread, &location );
switch ( location ) {
45168: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4516c: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
45170: 661e bnes 45190 <pthread_cancel+0x48> <== NOT EXECUTED
case OBJECTS_LOCAL:
thread_support = the_thread->API_Extensions[ THREAD_API_POSIX ];
thread_support->cancelation_requested = 1;
45172: 2240 moveal %d0,%a1 <== NOT EXECUTED
45174: 7201 moveq #1,%d1 <== NOT EXECUTED
45176: 2069 0102 moveal %a1@(258),%a0 <== NOT EXECUTED
4517a: 2141 00e0 movel %d1,%a0@(224) <== NOT EXECUTED
/* This enables dispatch implicitly */
_POSIX_Thread_Evaluate_cancellation_and_enable_dispatch( the_thread );
4517e: 2f00 movel %d0,%sp@- <== NOT EXECUTED
45180: 4eb9 0004 a040 jsr 4a040 <_POSIX_Thread_Evaluate_cancellation_and_enable_dispatch><== NOT EXECUTED
return 0;
45186: 588f addql #4,%sp <== NOT EXECUTED
45188: 4280 clrl %d0 <== NOT EXECUTED
4518a: 6006 bras 45192 <pthread_cancel+0x4a> <== NOT EXECUTED
/*
* Don't even think about deleting a resource from an ISR.
*/
if ( _ISR_Is_in_progress() )
return EPROTO;
4518c: 7047 moveq #71,%d0 <== NOT EXECUTED
4518e: 6002 bras 45192 <pthread_cancel+0x4a> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
45190: 7016 moveq #22,%d0 <== NOT EXECUTED
}
45192: 4e5e unlk %fp <== NOT EXECUTED
...
00044fc4 <pthread_cleanup_pop>:
*/
void pthread_cleanup_pop(
int execute
)
{
44fc4: 4e56 ffec linkw %fp,#-20 <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
44fc8: 2039 0005 ddd0 movel 5ddd0 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
44fce: 5280 addql #1,%d0 <== NOT EXECUTED
POSIX_Cancel_Handler_control tmp_handler;
Chain_Control *handler_stack;
POSIX_API_Control *thread_support;
ISR_Level level;
thread_support = _Thread_Executing->API_Extensions[ THREAD_API_POSIX ];
44fd0: 2079 0005 e25e moveal 5e25e <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
*/
void pthread_cleanup_pop(
int execute
)
{
44fd6: 48d7 0c1c moveml %d2-%d4/%a2-%a3,%sp@ <== NOT EXECUTED
44fda: 282e 0008 movel %fp@(8),%d4 <== NOT EXECUTED
POSIX_Cancel_Handler_control tmp_handler;
Chain_Control *handler_stack;
POSIX_API_Control *thread_support;
ISR_Level level;
thread_support = _Thread_Executing->API_Extensions[ THREAD_API_POSIX ];
44fde: 2068 0102 moveal %a0@(258),%a0 <== NOT EXECUTED
44fe2: 23c0 0005 ddd0 movel %d0,5ddd0 <_Thread_Dispatch_disable_level><== NOT EXECUTED
* ensure that we do not get prempted and deleted while we are holding
* memory that needs to be freed.
*/
_Thread_Disable_dispatch();
_ISR_Disable( level );
44fe8: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
44fee: 40c2 movew %sr,%d2 <== NOT EXECUTED
44ff0: 8082 orl %d2,%d0 <== NOT EXECUTED
44ff2: 46c0 movew %d0,%sr <== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
44ff4: 2008 movel %a0,%d0 <== NOT EXECUTED
44ff6: 0680 0000 00e8 addil #232,%d0 <== NOT EXECUTED
44ffc: 45f9 0004 77f2 lea 477f2 <_Thread_Enable_dispatch>,%a2 <== NOT EXECUTED
if ( _Chain_Is_empty( handler_stack ) ) {
45002: b0a8 00e4 cmpl %a0@(228),%d0 <== NOT EXECUTED
45006: 6606 bnes 4500e <pthread_cleanup_pop+0x4a> <== NOT EXECUTED
_Thread_Enable_dispatch();
45008: 4e92 jsr %a2@ <== NOT EXECUTED
_ISR_Enable( level );
4500a: 46c2 movew %d2,%sr <== NOT EXECUTED
return;
4500c: 603a bras 45048 <pthread_cleanup_pop+0x84> <== NOT EXECUTED
}
handler = (POSIX_Cancel_Handler_control *)
4500e: 2068 00ec moveal %a0@(236),%a0 <== NOT EXECUTED
)
{
Chain_Node *next;
Chain_Node *previous;
next = the_node->next;
45012: 2650 moveal %a0@,%a3 <== NOT EXECUTED
previous = the_node->previous;
45014: 2268 0004 moveal %a0@(4),%a1 <== NOT EXECUTED
next->previous = previous;
45018: 2749 0004 movel %a1,%a3@(4) <== NOT EXECUTED
previous->next = next;
4501c: 228b movel %a3,%a1@ <== NOT EXECUTED
_Chain_Tail( handler_stack )->previous;
_Chain_Extract_unprotected( &handler->Node );
_ISR_Enable( level );
4501e: 46c2 movew %d2,%sr <== NOT EXECUTED
45020: 2428 0008 movel %a0@(8),%d2 <== NOT EXECUTED
45024: 2628 000c movel %a0@(12),%d3 <== NOT EXECUTED
tmp_handler = *handler;
_Workspace_Free( handler );
45028: 2f08 movel %a0,%sp@- <== NOT EXECUTED
4502a: 4eb9 0004 87fc jsr 487fc <_Workspace_Free> <== NOT EXECUTED
_Thread_Enable_dispatch();
45030: 4e92 jsr %a2@ <== NOT EXECUTED
if ( execute )
45032: 588f addql #4,%sp <== NOT EXECUTED
45034: 4a84 tstl %d4 <== NOT EXECUTED
45036: 6710 beqs 45048 <pthread_cleanup_pop+0x84> <== NOT EXECUTED
(*tmp_handler.routine)( tmp_handler.arg );
45038: 2242 moveal %d2,%a1 <== NOT EXECUTED
4503a: 2d43 0008 movel %d3,%fp@(8) <== NOT EXECUTED
}
4503e: 4cee 0c1c ffec moveml %fp@(-20),%d2-%d4/%a2-%a3 <== NOT EXECUTED
45044: 4e5e unlk %fp <== NOT EXECUTED
_Workspace_Free( handler );
_Thread_Enable_dispatch();
if ( execute )
(*tmp_handler.routine)( tmp_handler.arg );
45046: 4ed1 jmp %a1@ <== NOT EXECUTED
}
45048: 4cee 0c1c ffec moveml %fp@(-20),%d2-%d4/%a2-%a3 <== NOT EXECUTED
4504e: 4e5e unlk %fp <== NOT EXECUTED
...
000453dc <pthread_cleanup_push>:
void pthread_cleanup_push(
void (*routine)( void * ),
void *arg
)
{
453dc: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
453e0: 2f03 movel %d3,%sp@- <== NOT EXECUTED
453e2: 262e 000c movel %fp@(12),%d3 <== NOT EXECUTED
453e6: 2f02 movel %d2,%sp@- <== NOT EXECUTED
453e8: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
/*
* The POSIX standard does not address what to do when the routine
* is NULL. It also does not address what happens when we cannot
* allocate memory or anything else bad happens.
*/
if ( !routine )
453ec: 6754 beqs 45442 <pthread_cleanup_push+0x66> <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
453ee: 2039 0005 ea42 movel 5ea42 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
453f4: 5280 addql #1,%d0 <== NOT EXECUTED
453f6: 23c0 0005 ea42 movel %d0,5ea42 <_Thread_Dispatch_disable_level><== NOT EXECUTED
return;
_Thread_Disable_dispatch();
handler = _Workspace_Allocate( sizeof( POSIX_Cancel_Handler_control ) );
453fc: 4878 0010 pea 10 <INVALID_OPERATION> <== NOT EXECUTED
45400: 4eb9 0004 9284 jsr 49284 <_Workspace_Allocate> <== NOT EXECUTED
if ( handler ) {
45406: 588f addql #4,%sp <== NOT EXECUTED
45408: 4a80 tstl %d0 <== NOT EXECUTED
4540a: 6726 beqs 45432 <pthread_cleanup_push+0x56> <== NOT EXECUTED
thread_support = _Thread_Executing->API_Extensions[ THREAD_API_POSIX ];
4540c: 2079 0005 eed0 moveal 5eed0 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
handler_stack = &thread_support->Cancellation_Handlers;
45412: 2228 0102 movel %a0@(258),%d1 <== NOT EXECUTED
handler->routine = routine;
45416: 2040 moveal %d0,%a0 <== NOT EXECUTED
handler = _Workspace_Allocate( sizeof( POSIX_Cancel_Handler_control ) );
if ( handler ) {
thread_support = _Thread_Executing->API_Extensions[ THREAD_API_POSIX ];
handler_stack = &thread_support->Cancellation_Handlers;
45418: 0681 0000 00e4 addil #228,%d1 <== NOT EXECUTED
handler->routine = routine;
4541e: 2142 0008 movel %d2,%a0@(8) <== NOT EXECUTED
handler->arg = arg;
45422: 2143 000c movel %d3,%a0@(12) <== NOT EXECUTED
_Chain_Append( handler_stack, &handler->Node );
45426: 2f00 movel %d0,%sp@- <== NOT EXECUTED
45428: 2f01 movel %d1,%sp@- <== NOT EXECUTED
4542a: 4eb9 0004 6a88 jsr 46a88 <_Chain_Append> <== NOT EXECUTED
45430: 508f addql #8,%sp <== NOT EXECUTED
}
_Thread_Enable_dispatch();
}
45432: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
45436: 262e fffc movel %fp@(-4),%d3 <== NOT EXECUTED
4543a: 4e5e unlk %fp <== NOT EXECUTED
handler->routine = routine;
handler->arg = arg;
_Chain_Append( handler_stack, &handler->Node );
}
_Thread_Enable_dispatch();
4543c: 4ef9 0004 8202 jmp 48202 <_Thread_Enable_dispatch> <== NOT EXECUTED
}
45442: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
45446: 262e fffc movel %fp@(-4),%d3 <== NOT EXECUTED
4544a: 4e5e unlk %fp <== NOT EXECUTED
...
0004601c <pthread_cond_broadcast>:
*/
int pthread_cond_broadcast(
pthread_cond_t *cond
)
{
4601c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return _POSIX_Condition_variables_Signal_support( cond, true );
46020: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
46024: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
46028: 4eb9 0004 61b0 jsr 461b0 <_POSIX_Condition_variables_Signal_support><== NOT EXECUTED
}
4602e: 4e5e unlk %fp <== NOT EXECUTED
...
00046034 <pthread_cond_destroy>:
*/
int pthread_cond_destroy(
pthread_cond_t *cond
)
{
46034: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
46038: 2f0b movel %a3,%sp@- <== NOT EXECUTED
4603a: 2f0a movel %a2,%sp@- <== NOT EXECUTED
POSIX_Condition_variables_Control *the_cond;
Objects_Locations location;
the_cond = _POSIX_Condition_variables_Get( cond, &location );
4603c: 486e fffc pea %fp@(-4) <== NOT EXECUTED
46040: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
46044: 4eb9 0004 60a4 jsr 460a4 <_POSIX_Condition_variables_Get> <== NOT EXECUTED
switch ( location ) {
4604a: 508f addql #8,%sp <== NOT EXECUTED
)
{
POSIX_Condition_variables_Control *the_cond;
Objects_Locations location;
the_cond = _POSIX_Condition_variables_Get( cond, &location );
4604c: 2440 moveal %d0,%a2 <== NOT EXECUTED
switch ( location ) {
4604e: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
46052: 6642 bnes 46096 <pthread_cond_destroy+0x62> <== NOT EXECUTED
case OBJECTS_LOCAL:
if ( _Thread_queue_First( &the_cond->Wait_queue ) ) {
46054: 486a 0018 pea %a2@(24) <== NOT EXECUTED
46058: 47f9 0004 93e2 lea 493e2 <_Thread_Enable_dispatch>,%a3 <== NOT EXECUTED
4605e: 4eb9 0004 9a54 jsr 49a54 <_Thread_queue_First> <== NOT EXECUTED
46064: 588f addql #4,%sp <== NOT EXECUTED
46066: 4a80 tstl %d0 <== NOT EXECUTED
46068: 6706 beqs 46070 <pthread_cond_destroy+0x3c> <== NOT EXECUTED
_Thread_Enable_dispatch();
4606a: 4e93 jsr %a3@ <== NOT EXECUTED
return EBUSY;
4606c: 7010 moveq #16,%d0 <== NOT EXECUTED
4606e: 6028 bras 46098 <pthread_cond_destroy+0x64> <== NOT EXECUTED
}
_Objects_Close(
46070: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46072: 4879 0006 03c6 pea 603c6 <_POSIX_Condition_variables_Information><== NOT EXECUTED
46078: 4eb9 0004 85a0 jsr 485a0 <_Objects_Close> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _POSIX_Condition_variables_Free (
POSIX_Condition_variables_Control *the_condition_variable
)
{
_Objects_Free(
4607e: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46080: 4879 0006 03c6 pea 603c6 <_POSIX_Condition_variables_Information><== NOT EXECUTED
46086: 4eb9 0004 8818 jsr 48818 <_Objects_Free> <== NOT EXECUTED
&_POSIX_Condition_variables_Information,
&the_cond->Object
);
_POSIX_Condition_variables_Free( the_cond );
_Thread_Enable_dispatch();
4608c: 4e93 jsr %a3@ <== NOT EXECUTED
return 0;
4608e: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
46092: 4280 clrl %d0 <== NOT EXECUTED
46094: 6002 bras 46098 <pthread_cond_destroy+0x64> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
46096: 7016 moveq #22,%d0 <== NOT EXECUTED
}
46098: 246e fff4 moveal %fp@(-12),%a2 <== NOT EXECUTED
4609c: 266e fff8 moveal %fp@(-8),%a3 <== NOT EXECUTED
460a0: 4e5e unlk %fp <== NOT EXECUTED
000460f8 <pthread_cond_init>:
int pthread_cond_init(
pthread_cond_t *cond,
const pthread_condattr_t *attr
)
{
460f8: 4e56 fff4 linkw %fp,#-12
460fc: 48d7 1c00 moveml %a2-%a4,%sp@
46100: 246e 000c moveal %fp@(12),%a2
POSIX_Condition_variables_Control *the_cond;
const pthread_condattr_t *the_attr;
if ( attr ) the_attr = attr;
46104: 4a8a tstl %a2
46106: 6606 bnes 4610e <pthread_cond_init+0x16> <== NEVER TAKEN
else the_attr = &_POSIX_Condition_variables_Default_attributes;
46108: 45f9 0005 d7ce lea 5d7ce <_POSIX_Condition_variables_Default_attributes>,%a2
/*
* Be careful about attributes when global!!!
*/
if ( the_attr->process_shared == PTHREAD_PROCESS_SHARED )
4610e: 7001 moveq #1,%d0
46110: b0aa 0004 cmpl %a2@(4),%d0
46114: 6778 beqs 4618e <pthread_cond_init+0x96> <== NEVER TAKEN
return EINVAL;
if ( !the_attr->is_initialized )
46116: 4a92 tstl %a2@
46118: 6774 beqs 4618e <pthread_cond_init+0x96> <== NEVER TAKEN
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
4611a: 2039 0006 0018 movel 60018 <_Thread_Dispatch_disable_level>,%d0
46120: 5280 addql #1,%d0
46122: 23c0 0006 0018 movel %d0,60018 <_Thread_Dispatch_disable_level>
RTEMS_INLINE_ROUTINE POSIX_Condition_variables_Control
*_POSIX_Condition_variables_Allocate( void )
{
return (POSIX_Condition_variables_Control *)
_Objects_Allocate( &_POSIX_Condition_variables_Information );
46128: 4879 0006 03c6 pea 603c6 <_POSIX_Condition_variables_Information>
4612e: 49f9 0004 93e2 lea 493e2 <_Thread_Enable_dispatch>,%a4
46134: 4eb9 0004 8524 jsr 48524 <_Objects_Allocate>
_Thread_Disable_dispatch();
the_cond = _POSIX_Condition_variables_Allocate();
if ( !the_cond ) {
4613a: 588f addql #4,%sp
4613c: 2640 moveal %d0,%a3
4613e: 4a80 tstl %d0
46140: 6606 bnes 46148 <pthread_cond_init+0x50> <== ALWAYS TAKEN
_Thread_Enable_dispatch();
46142: 4e94 jsr %a4@ <== NOT EXECUTED
return ENOMEM;
46144: 700c moveq #12,%d0 <== NOT EXECUTED
46146: 6048 bras 46190 <pthread_cond_init+0x98> <== NOT EXECUTED
}
the_cond->process_shared = the_attr->process_shared;
46148: 276a 0004 0010 movel %a2@(4),%a3@(16)
the_cond->Mutex = POSIX_CONDITION_VARIABLES_NO_MUTEX;
4614e: 42ab 0014 clrl %a3@(20)
_Thread_queue_Initialize(
46152: 4878 0074 pea 74 <DBL_MANT_DIG+0x3f>
46156: 2f3c 1000 0800 movel #268437504,%sp@-
4615c: 42a7 clrl %sp@-
4615e: 486b 0018 pea %a3@(24)
46162: 4eb9 0004 9ae8 jsr 49ae8 <_Thread_queue_Initialize>
uint32_t name
)
{
_Objects_Set_local_object(
information,
_Objects_Get_index( the_object->id ),
46168: 202b 0008 movel %a3@(8),%d0
Objects_Information *information,
Objects_Control *the_object,
uint32_t name
)
{
_Objects_Set_local_object(
4616c: 4281 clrl %d1
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
4616e: 2079 0006 03de moveal 603de <_POSIX_Condition_variables_Information+0x18>,%a0
Objects_Information *information,
Objects_Control *the_object,
uint32_t name
)
{
_Objects_Set_local_object(
46174: 3200 movew %d0,%d1
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
46176: 218b 1c00 movel %a3,%a0@(00000000,%d1:l:4)
&_POSIX_Condition_variables_Information,
&the_cond->Object,
0
);
*cond = the_cond->Object.id;
4617a: 206e 0008 moveal %fp@(8),%a0
_Objects_Get_index( the_object->id ),
the_object
);
/* ASSERT: information->is_string == false */
the_object->name.name_u32 = name;
4617e: 42ab 000c clrl %a3@(12)
46182: 2080 movel %d0,%a0@
_Thread_Enable_dispatch();
46184: 4e94 jsr %a4@
return 0;
46186: 4fef 0010 lea %sp@(16),%sp
4618a: 4280 clrl %d0
4618c: 6002 bras 46190 <pthread_cond_init+0x98>
*/
if ( the_attr->process_shared == PTHREAD_PROCESS_SHARED )
return EINVAL;
if ( !the_attr->is_initialized )
return EINVAL;
4618e: 7016 moveq #22,%d0 <== NOT EXECUTED
*cond = the_cond->Object.id;
_Thread_Enable_dispatch();
return 0;
}
46190: 4cee 1c00 fff4 moveml %fp@(-12),%a2-%a4
46196: 4e5e unlk %fp
...
0004619c <pthread_cond_signal>:
*/
int pthread_cond_signal(
pthread_cond_t *cond
)
{
4619c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return _POSIX_Condition_variables_Signal_support( cond, false );
461a0: 42a7 clrl %sp@- <== NOT EXECUTED
461a2: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
461a6: 4eb9 0004 61b0 jsr 461b0 <_POSIX_Condition_variables_Signal_support><== NOT EXECUTED
}
461ac: 4e5e unlk %fp <== NOT EXECUTED
00046210 <pthread_cond_timedwait>:
int pthread_cond_timedwait(
pthread_cond_t *cond,
pthread_mutex_t *mutex,
const struct timespec *abstime
)
{
46210: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
* is valid or not. If it isn't correct and in the future,
* then we do a polling operation and convert the UNSATISFIED
* status into the appropriate error.
*/
already_timedout = false;
status = _POSIX_Absolute_timeout_to_ticks(abstime, &ticks);
46214: 486e fffc pea %fp@(-4) <== NOT EXECUTED
46218: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
4621c: 4eb9 0004 6674 jsr 46674 <_POSIX_Absolute_timeout_to_ticks><== NOT EXECUTED
if ( status == POSIX_ABSOLUTE_TIMEOUT_INVALID )
46222: 508f addql #8,%sp <== NOT EXECUTED
46224: 4a80 tstl %d0 <== NOT EXECUTED
46226: 6726 beqs 4624e <pthread_cond_timedwait+0x3e> <== NOT EXECUTED
if ( status == POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST ||
status == POSIX_ABSOLUTE_TIMEOUT_IS_NOW )
already_timedout = true;
return _POSIX_Condition_variables_Wait_support(
46228: 7201 moveq #1,%d1 <== NOT EXECUTED
already_timedout = false;
status = _POSIX_Absolute_timeout_to_ticks(abstime, &ticks);
if ( status == POSIX_ABSOLUTE_TIMEOUT_INVALID )
return EINVAL;
if ( status == POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST ||
4622a: 5380 subql #1,%d0 <== NOT EXECUTED
status == POSIX_ABSOLUTE_TIMEOUT_IS_NOW )
already_timedout = true;
return _POSIX_Condition_variables_Wait_support(
4622c: b280 cmpl %d0,%d1 <== NOT EXECUTED
4622e: 54c0 scc %d0 <== NOT EXECUTED
46230: 49c0 extbl %d0 <== NOT EXECUTED
46232: 4480 negl %d0 <== NOT EXECUTED
46234: 2f00 movel %d0,%sp@- <== NOT EXECUTED
46236: 2f2e fffc movel %fp@(-4),%sp@- <== NOT EXECUTED
4623a: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
4623e: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
46242: 4eb9 0004 6270 jsr 46270 <_POSIX_Condition_variables_Wait_support><== NOT EXECUTED
46248: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
4624c: 6002 bras 46250 <pthread_cond_timedwait+0x40> <== NOT EXECUTED
* status into the appropriate error.
*/
already_timedout = false;
status = _POSIX_Absolute_timeout_to_ticks(abstime, &ticks);
if ( status == POSIX_ABSOLUTE_TIMEOUT_INVALID )
return EINVAL;
4624e: 7016 moveq #22,%d0 <== NOT EXECUTED
cond,
mutex,
ticks,
already_timedout
);
}
46250: 4e5e unlk %fp <== NOT EXECUTED
00046254 <pthread_cond_wait>:
int pthread_cond_wait(
pthread_cond_t *cond,
pthread_mutex_t *mutex
)
{
46254: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return _POSIX_Condition_variables_Wait_support(
46258: 42a7 clrl %sp@- <== NOT EXECUTED
4625a: 42a7 clrl %sp@- <== NOT EXECUTED
4625c: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
46260: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
46264: 4eb9 0004 6270 jsr 46270 <_POSIX_Condition_variables_Wait_support><== NOT EXECUTED
cond,
mutex,
THREAD_QUEUE_WAIT_FOREVER,
false
);
}
4626a: 4e5e unlk %fp <== NOT EXECUTED
...
00045f94 <pthread_condattr_destroy>:
*/
int pthread_condattr_destroy(
pthread_condattr_t *attr
)
{
45f94: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
45f98: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
if ( !attr || attr->is_initialized == false )
45f9c: 4a88 tstl %a0 <== NOT EXECUTED
45f9e: 670a beqs 45faa <pthread_condattr_destroy+0x16> <== NOT EXECUTED
45fa0: 4a90 tstl %a0@ <== NOT EXECUTED
45fa2: 6706 beqs 45faa <pthread_condattr_destroy+0x16> <== NOT EXECUTED
return EINVAL;
attr->is_initialized = false;
45fa4: 4290 clrl %a0@ <== NOT EXECUTED
return 0;
45fa6: 4280 clrl %d0 <== NOT EXECUTED
45fa8: 6002 bras 45fac <pthread_condattr_destroy+0x18> <== NOT EXECUTED
int pthread_condattr_destroy(
pthread_condattr_t *attr
)
{
if ( !attr || attr->is_initialized == false )
return EINVAL;
45faa: 7016 moveq #22,%d0 <== NOT EXECUTED
attr->is_initialized = false;
return 0;
}
45fac: 4e5e unlk %fp <== NOT EXECUTED
00045fb0 <pthread_condattr_getpshared>:
int pthread_condattr_getpshared(
const pthread_condattr_t *attr,
int *pshared
)
{
45fb0: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
45fb4: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
if ( !attr )
45fb8: 4a88 tstl %a0 <== NOT EXECUTED
45fba: 670c beqs 45fc8 <pthread_condattr_getpshared+0x18><== NOT EXECUTED
return EINVAL;
*pshared = attr->process_shared;
45fbc: 226e 000c moveal %fp@(12),%a1 <== NOT EXECUTED
return 0;
45fc0: 4280 clrl %d0 <== NOT EXECUTED
)
{
if ( !attr )
return EINVAL;
*pshared = attr->process_shared;
45fc2: 22a8 0004 movel %a0@(4),%a1@ <== NOT EXECUTED
return 0;
45fc6: 6002 bras 45fca <pthread_condattr_getpshared+0x1a><== NOT EXECUTED
const pthread_condattr_t *attr,
int *pshared
)
{
if ( !attr )
return EINVAL;
45fc8: 7016 moveq #22,%d0 <== NOT EXECUTED
*pshared = attr->process_shared;
return 0;
}
45fca: 4e5e unlk %fp <== NOT EXECUTED
...
00045fd0 <pthread_condattr_init>:
*/
int pthread_condattr_init(
pthread_condattr_t *attr
)
{
45fd0: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
45fd4: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
if ( !attr )
45fd8: 4a88 tstl %a0 <== NOT EXECUTED
45fda: 6716 beqs 45ff2 <pthread_condattr_init+0x22> <== NOT EXECUTED
return EINVAL;
*attr = _POSIX_Condition_variables_Default_attributes;
45fdc: 2039 0005 d7ce movel 5d7ce <_POSIX_Condition_variables_Default_attributes>,%d0<== NOT EXECUTED
45fe2: 2239 0005 d7d2 movel 5d7d2 <_POSIX_Condition_variables_Default_attributes+0x4>,%d1<== NOT EXECUTED
45fe8: 2080 movel %d0,%a0@ <== NOT EXECUTED
45fea: 2141 0004 movel %d1,%a0@(4) <== NOT EXECUTED
return 0;
45fee: 4280 clrl %d0 <== NOT EXECUTED
45ff0: 6002 bras 45ff4 <pthread_condattr_init+0x24> <== NOT EXECUTED
int pthread_condattr_init(
pthread_condattr_t *attr
)
{
if ( !attr )
return EINVAL;
45ff2: 7016 moveq #22,%d0 <== NOT EXECUTED
*attr = _POSIX_Condition_variables_Default_attributes;
return 0;
}
45ff4: 4e5e unlk %fp <== NOT EXECUTED
00045ff8 <pthread_condattr_setpshared>:
int pthread_condattr_setpshared(
pthread_condattr_t *attr,
int pshared
)
{
45ff8: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
45ffc: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
46000: 202e 000c movel %fp@(12),%d0 <== NOT EXECUTED
if ( !attr )
46004: 4a88 tstl %a0 <== NOT EXECUTED
46006: 670e beqs 46016 <pthread_condattr_setpshared+0x1e><== NOT EXECUTED
return EINVAL;
switch ( pshared ) {
46008: 7201 moveq #1,%d1 <== NOT EXECUTED
4600a: b280 cmpl %d0,%d1 <== NOT EXECUTED
4600c: 6508 bcss 46016 <pthread_condattr_setpshared+0x1e><== NOT EXECUTED
case PTHREAD_PROCESS_SHARED:
case PTHREAD_PROCESS_PRIVATE:
attr->process_shared = pshared;
4600e: 2140 0004 movel %d0,%a0@(4) <== NOT EXECUTED
return 0;
46012: 4280 clrl %d0 <== NOT EXECUTED
46014: 6002 bras 46018 <pthread_condattr_setpshared+0x20><== NOT EXECUTED
default:
return EINVAL;
46016: 7016 moveq #22,%d0 <== NOT EXECUTED
}
}
46018: 4e5e unlk %fp <== NOT EXECUTED
00045704 <pthread_create>:
pthread_t *thread,
const pthread_attr_t *attr,
void *(*start_routine)( void * ),
void *arg
)
{
45704: 4e56 ffbc linkw %fp,#-68
45708: 48d7 3c3c moveml %d2-%d5/%a2-%a5,%sp@
4570c: 246e 000c moveal %fp@(12),%a2
45710: 282e 0010 movel %fp@(16),%d4
int schedpolicy = SCHED_RR;
struct sched_param schedparam;
Objects_Name name;
int rc;
if ( !start_routine )
45714: 6700 01e4 beqw 458fa <pthread_create+0x1f6>
return EFAULT;
the_attr = (attr) ? attr : &_POSIX_Threads_Default_attributes;
45718: 4a8a tstl %a2
4571a: 6606 bnes 45722 <pthread_create+0x1e> <== ALWAYS TAKEN
4571c: 45f9 0005 c30e lea 5c30e <_POSIX_Threads_Default_attributes>,%a2<== NOT EXECUTED
if ( !the_attr->is_initialized )
45722: 4a92 tstl %a2@
45724: 6700 01d8 beqw 458fe <pthread_create+0x1fa>
* stack space if it is allowed to allocate it itself.
*
* NOTE: If the user provides the stack we will let it drop below
* twice the minimum.
*/
if ( the_attr->stackaddr && !_Stack_Is_enough(the_attr->stacksize) )
45728: 4aaa 0004 tstl %a2@(4)
4572c: 670e beqs 4573c <pthread_create+0x38> <== ALWAYS TAKEN
4572e: 2039 0005 d2a2 movel 5d2a2 <rtems_minimum_stack_size>,%d0 <== NOT EXECUTED
45734: b0aa 0008 cmpl %a2@(8),%d0 <== NOT EXECUTED
45738: 6200 01c4 bhiw 458fe <pthread_create+0x1fa> <== NOT EXECUTED
* If inheritsched is set to PTHREAD_INHERIT_SCHED, then this thread
* inherits scheduling attributes from the creating thread. If it is
* PTHREAD_EXPLICIT_SCHED, then scheduling parameters come from the
* attributes structure.
*/
switch ( the_attr->inheritsched ) {
4573c: 202a 0010 movel %a2@(16),%d0
45740: 7201 moveq #1,%d1
45742: b280 cmpl %d0,%d1
45744: 670c beqs 45752 <pthread_create+0x4e> <== NEVER TAKEN
45746: 123c 0002 moveb #2,%d1
4574a: b280 cmpl %d0,%d1
4574c: 6600 01b0 bnew 458fe <pthread_create+0x1fa>
45750: 6018 bras 4576a <pthread_create+0x66>
case PTHREAD_INHERIT_SCHED:
api = _Thread_Executing->API_Extensions[ THREAD_API_POSIX ];
45752: 2079 0005 efb6 moveal 5efb6 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
45758: 2068 0102 moveal %a0@(258),%a0 <== NOT EXECUTED
schedpolicy = api->schedpolicy;
4575c: 2628 0084 movel %a0@(132),%d3 <== NOT EXECUTED
schedparam = api->schedparam;
45760: 4878 001c pea 1c <OPER2+0x8> <== NOT EXECUTED
45764: 4868 0088 pea %a0@(136) <== NOT EXECUTED
45768: 600c bras 45776 <pthread_create+0x72> <== NOT EXECUTED
break;
case PTHREAD_EXPLICIT_SCHED:
schedpolicy = the_attr->schedpolicy;
4576a: 262a 0014 movel %a2@(20),%d3
schedparam = the_attr->schedparam;
4576e: 4878 001c pea 1c <OPER2+0x8>
45772: 486a 0018 pea %a2@(24)
45776: 486e ffdc pea %fp@(-36)
/*
* Check the contentionscope since rtems only supports PROCESS wide
* contention (i.e. no system wide contention).
*/
if ( the_attr->contentionscope != PTHREAD_SCOPE_PROCESS )
return ENOTSUP;
4577a: 243c 0000 0086 movel #134,%d2
schedparam = api->schedparam;
break;
case PTHREAD_EXPLICIT_SCHED:
schedpolicy = the_attr->schedpolicy;
schedparam = the_attr->schedparam;
45780: 4eb9 0004 ddc4 jsr 4ddc4 <memcpy>
break;
45786: 4fef 000c lea %sp@(12),%sp
/*
* Check the contentionscope since rtems only supports PROCESS wide
* contention (i.e. no system wide contention).
*/
if ( the_attr->contentionscope != PTHREAD_SCOPE_PROCESS )
4578a: 4aaa 000c tstl %a2@(12)
4578e: 6600 0170 bnew 45900 <pthread_create+0x1fc>
return ENOTSUP;
/*
* Interpret the scheduling parameters.
*/
if ( !_POSIX_Priority_Is_valid( schedparam.sched_priority ) )
45792: 2f2e ffdc movel %fp@(-36),%sp@-
45796: 4eb9 0004 b26c jsr 4b26c <_POSIX_Priority_Is_valid>
4579c: 588f addql #4,%sp
4579e: 4a00 tstb %d0
457a0: 6700 015c beqw 458fe <pthread_create+0x1fa>
core_priority = _POSIX_Priority_To_core( schedparam.sched_priority );
/*
* Set the core scheduling policy information.
*/
rc = _POSIX_Thread_Translate_sched_param(
457a4: 486e fff8 pea %fp@(-8)
457a8: 486e fffc pea %fp@(-4)
457ac: 486e ffdc pea %fp@(-36)
* Interpret the scheduling parameters.
*/
if ( !_POSIX_Priority_Is_valid( schedparam.sched_priority ) )
return EINVAL;
core_priority = _POSIX_Priority_To_core( schedparam.sched_priority );
457b0: 266e ffdc moveal %fp@(-36),%a3
/*
* Set the core scheduling policy information.
*/
rc = _POSIX_Thread_Translate_sched_param(
457b4: 2f03 movel %d3,%sp@-
RTEMS_INLINE_ROUTINE Priority_Control _POSIX_Priority_To_core(
int priority
)
{
return (Priority_Control) (POSIX_SCHEDULER_MAXIMUM_PRIORITY - priority + 1);
457b6: 1a39 0005 d2a6 moveb 5d2a6 <rtems_maximum_priority>,%d5
457bc: 4eb9 0004 b290 jsr 4b290 <_POSIX_Thread_Translate_sched_param>
schedpolicy,
&schedparam,
&budget_algorithm,
&budget_callout
);
if ( rc )
457c2: 4fef 0010 lea %sp@(16),%sp
core_priority = _POSIX_Priority_To_core( schedparam.sched_priority );
/*
* Set the core scheduling policy information.
*/
rc = _POSIX_Thread_Translate_sched_param(
457c6: 2400 movel %d0,%d2
schedpolicy,
&schedparam,
&budget_algorithm,
&budget_callout
);
if ( rc )
457c8: 6600 0136 bnew 45900 <pthread_create+0x1fc>
#endif
/*
* Lock the allocator mutex for protection
*/
_RTEMS_Lock_allocator();
457cc: 2f39 0005 ebe8 movel 5ebe8 <_RTEMS_Allocator_Mutex>,%sp@-
457d2: 4eb9 0004 6e44 jsr 46e44 <_API_Mutex_Lock>
* _POSIX_Threads_Allocate
*/
RTEMS_INLINE_ROUTINE Thread_Control *_POSIX_Threads_Allocate( void )
{
return (Thread_Control *) _Objects_Allocate( &_POSIX_Threads_Information );
457d8: 4879 0005 ecee pea 5ecee <_POSIX_Threads_Information>
457de: 4eb9 0004 7794 jsr 47794 <_Objects_Allocate>
* Allocate the thread control block.
*
* NOTE: Global threads are not currently supported.
*/
the_thread = _POSIX_Threads_Allocate();
if ( !the_thread ) {
457e4: 508f addql #8,%sp
457e6: 2840 moveal %d0,%a4
457e8: 4a80 tstl %d0
457ea: 6616 bnes 45802 <pthread_create+0xfe> <== ALWAYS TAKEN
_RTEMS_Unlock_allocator();
457ec: 2f39 0005 ebe8 movel 5ebe8 <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
return EAGAIN;
457f2: 143c 000b moveb #11,%d2 <== NOT EXECUTED
*
* NOTE: Global threads are not currently supported.
*/
the_thread = _POSIX_Threads_Allocate();
if ( !the_thread ) {
_RTEMS_Unlock_allocator();
457f6: 4eb9 0004 6ea4 jsr 46ea4 <_API_Mutex_Unlock> <== NOT EXECUTED
return EAGAIN;
457fc: 588f addql #4,%sp <== NOT EXECUTED
457fe: 6000 0100 braw 45900 <pthread_create+0x1fc> <== NOT EXECUTED
static inline size_t _POSIX_Threads_Ensure_minimum_stack (
size_t size
)
{
if ( size >= PTHREAD_MINIMUM_STACK_SIZE )
45802: 2039 0005 d2a2 movel 5d2a2 <rtems_minimum_stack_size>,%d0
45808: d080 addl %d0,%d0
/*
* Initialize the core thread for this task.
*/
name.name_p = NULL; /* posix threads don't have a name by default */
status = _Thread_Initialize(
4580a: 226e fff8 moveal %fp@(-8),%a1
4580e: 206e fffc moveal %fp@(-4),%a0
45812: 222a 0008 movel %a2@(8),%d1
45816: b280 cmpl %d0,%d1
45818: 6302 blss 4581c <pthread_create+0x118>
4581a: 2001 movel %d1,%d0
4581c: 42a7 clrl %sp@-
4581e: 0285 0000 00ff andil #255,%d5
45824: 42a7 clrl %sp@-
45826: 9a8b subl %a3,%d5
45828: 2f09 movel %a1,%sp@-
4582a: 2f08 movel %a0,%sp@-
4582c: 4878 0001 pea 1 <ADD>
45830: 2f05 movel %d5,%sp@-
45832: 4878 0001 pea 1 <ADD>
45836: 2f00 movel %d0,%sp@-
45838: 2f2a 0004 movel %a2@(4),%sp@-
4583c: 2f0c movel %a4,%sp@-
4583e: 4879 0005 ecee pea 5ecee <_POSIX_Threads_Information>
45844: 4eb9 0004 8700 jsr 48700 <_Thread_Initialize>
budget_callout,
0, /* isr level */
name /* posix threads don't have a name */
);
if ( !status ) {
4584a: 4fef 002c lea %sp@(44),%sp
4584e: 4a00 tstb %d0
45850: 6624 bnes 45876 <pthread_create+0x172>
RTEMS_INLINE_ROUTINE void _POSIX_Threads_Free (
Thread_Control *the_pthread
)
{
_Objects_Free( &_POSIX_Threads_Information, &the_pthread->Object );
45852: 2f0c movel %a4,%sp@-
45854: 4879 0005 ecee pea 5ecee <_POSIX_Threads_Information>
_POSIX_Threads_Free( the_thread );
_RTEMS_Unlock_allocator();
return EAGAIN;
4585a: 740b moveq #11,%d2
4585c: 4eb9 0004 7a88 jsr 47a88 <_Objects_Free>
name /* posix threads don't have a name */
);
if ( !status ) {
_POSIX_Threads_Free( the_thread );
_RTEMS_Unlock_allocator();
45862: 2f39 0005 ebe8 movel 5ebe8 <_RTEMS_Allocator_Mutex>,%sp@-
45868: 4eb9 0004 6ea4 jsr 46ea4 <_API_Mutex_Unlock>
return EAGAIN;
4586e: 4fef 000c lea %sp@(12),%sp
45872: 6000 008c braw 45900 <pthread_create+0x1fc>
}
/*
* finish initializing the per API structure
*/
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
45876: 266c 0102 moveal %a4@(258),%a3
api->Attributes = *the_attr;
4587a: 4878 0040 pea 40 <DBL_MANT_DIG+0xb>
4587e: 4bf9 0004 ddc4 lea 4ddc4 <memcpy>,%a5
45884: 2f0a movel %a2,%sp@-
45886: 2f0b movel %a3,%sp@-
45888: 4e95 jsr %a5@
api->detachstate = the_attr->detachstate;
4588a: 276a 003c 0040 movel %a2@(60),%a3@(64)
api->schedpolicy = schedpolicy;
45890: 2743 0084 movel %d3,%a3@(132)
api->schedparam = schedparam;
45894: 4878 001c pea 1c <OPER2+0x8>
45898: 486e ffdc pea %fp@(-36)
4589c: 486b 0088 pea %a3@(136)
458a0: 4e95 jsr %a5@
/*
* POSIX threads are allocated and started in one operation.
*/
status = _Thread_Start(
458a2: 42a7 clrl %sp@-
458a4: 2f2e 0014 movel %fp@(20),%sp@-
458a8: 2f04 movel %d4,%sp@-
458aa: 4878 0001 pea 1 <ADD>
458ae: 2f0c movel %a4,%sp@-
458b0: 4eb9 0004 8fc8 jsr 48fc8 <_Thread_Start>
_RTEMS_Unlock_allocator();
return EINVAL;
}
#endif
if ( schedpolicy == SCHED_SPORADIC ) {
458b6: 4fef 002c lea %sp@(44),%sp
458ba: 7004 moveq #4,%d0
458bc: b083 cmpl %d3,%d0
458be: 6622 bnes 458e2 <pthread_create+0x1de> <== ALWAYS TAKEN
_Watchdog_Insert_ticks(
458c0: 486b 0090 pea %a3@(144) <== NOT EXECUTED
458c4: 4eb9 0004 9198 jsr 49198 <_Timespec_To_ticks> <== NOT EXECUTED
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
458ca: 2740 00b4 movel %d0,%a3@(180) <== NOT EXECUTED
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
458ce: 486b 00a8 pea %a3@(168) <== NOT EXECUTED
458d2: 4879 0005 ec08 pea 5ec08 <_Watchdog_Ticks_chain> <== NOT EXECUTED
458d8: 4eb9 0004 949c jsr 4949c <_Watchdog_Insert> <== NOT EXECUTED
458de: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
}
/*
* Return the id and indicate we successfully created the thread
*/
*thread = the_thread->Object.id;
458e2: 206e 0008 moveal %fp@(8),%a0
458e6: 20ac 0008 movel %a4@(8),%a0@
_RTEMS_Unlock_allocator();
458ea: 2f39 0005 ebe8 movel 5ebe8 <_RTEMS_Allocator_Mutex>,%sp@-
458f0: 4eb9 0004 6ea4 jsr 46ea4 <_API_Mutex_Unlock>
return 0;
458f6: 588f addql #4,%sp
458f8: 6006 bras 45900 <pthread_create+0x1fc>
struct sched_param schedparam;
Objects_Name name;
int rc;
if ( !start_routine )
return EFAULT;
458fa: 740e moveq #14,%d2
458fc: 6002 bras 45900 <pthread_create+0x1fc>
/*
* Interpret the scheduling parameters.
*/
if ( !_POSIX_Priority_Is_valid( schedparam.sched_priority ) )
return EINVAL;
458fe: 7416 moveq #22,%d2 <== NOT EXECUTED
*/
*thread = the_thread->Object.id;
_RTEMS_Unlock_allocator();
return 0;
}
45900: 2002 movel %d2,%d0
45902: 4cee 3c3c ffbc moveml %fp@(-68),%d2-%d5/%a2-%a5
45908: 4e5e unlk %fp <== NOT EXECUTED
000457a0 <pthread_detach>:
#include <rtems/posix/pthread.h>
int pthread_detach(
pthread_t thread
)
{
457a0: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
pthread_t id,
Objects_Locations *location
)
{
return (Thread_Control *)
_Objects_Get( &_POSIX_Threads_Information, (Objects_Id)id, location );
457a4: 486e fffc pea %fp@(-4) <== NOT EXECUTED
457a8: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
457ac: 4879 0005 f91e pea 5f91e <_POSIX_Threads_Information> <== NOT EXECUTED
457b2: 4eb9 0004 7914 jsr 47914 <_Objects_Get> <== NOT EXECUTED
register Thread_Control *the_thread;
POSIX_API_Control *api;
Objects_Locations location;
the_thread = _POSIX_Threads_Get( thread, &location );
switch ( location ) {
457b8: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
457bc: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
457c0: 6614 bnes 457d6 <pthread_detach+0x36> <== NOT EXECUTED
case OBJECTS_LOCAL:
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
api->detachstate = PTHREAD_CREATE_DETACHED;
457c2: 2240 moveal %d0,%a1 <== NOT EXECUTED
457c4: 2069 0102 moveal %a1@(258),%a0 <== NOT EXECUTED
457c8: 42a8 0040 clrl %a0@(64) <== NOT EXECUTED
_Thread_Enable_dispatch();
457cc: 4eb9 0004 837a jsr 4837a <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
457d2: 4280 clrl %d0 <== NOT EXECUTED
457d4: 6002 bras 457d8 <pthread_detach+0x38> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return ESRCH;
457d6: 7003 moveq #3,%d0 <== NOT EXECUTED
}
457d8: 4e5e unlk %fp <== NOT EXECUTED
0004590c <pthread_equal>:
int pthread_equal(
pthread_t t1,
pthread_t t2
)
{
4590c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
* can to insure that both ids are valid. Otherwise, we will do the
* cheapest possible thing to determine if they are equal.
*/
#ifndef RTEMS_DEBUG
return _Objects_Are_ids_equal( t1, t2 );
45910: 202e 000c movel %fp@(12),%d0 <== NOT EXECUTED
45914: b0ae 0008 cmpl %fp@(8),%d0 <== NOT EXECUTED
45918: 57c0 seq %d0 <== NOT EXECUTED
break;
}
return status;
#endif
}
4591a: 4e5e unlk %fp <== NOT EXECUTED
* can to insure that both ids are valid. Otherwise, we will do the
* cheapest possible thing to determine if they are equal.
*/
#ifndef RTEMS_DEBUG
return _Objects_Are_ids_equal( t1, t2 );
4591c: 49c0 extbl %d0 <== NOT EXECUTED
break;
}
return status;
#endif
}
4591e: 4480 negl %d0 <== NOT EXECUTED
...
0004c4b8 <pthread_exit>:
}
void pthread_exit(
void *value_ptr
)
{
4c4b8: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
_POSIX_Thread_Exit( _Thread_Executing, value_ptr );
4c4bc: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4c4c0: 2f39 0005 df96 movel 5df96 <_Per_CPU_Information+0xc>,%sp@-<== NOT EXECUTED
4c4c6: 4eb9 0004 c448 jsr 4c448 <_POSIX_Thread_Exit> <== NOT EXECUTED
4c4cc: 508f addql #8,%sp <== NOT EXECUTED
}
4c4ce: 4e5e unlk %fp <== NOT EXECUTED
...
000454a8 <pthread_getcpuclockid>:
int pthread_getcpuclockid(
pthread_t pid,
clockid_t *clock_id
)
{
454a8: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
454ac: 4eb9 0004 d1a4 jsr 4d1a4 <__errno> <== NOT EXECUTED
}
454b2: 4e5e unlk %fp <== NOT EXECUTED
int pthread_getcpuclockid(
pthread_t pid,
clockid_t *clock_id
)
{
rtems_set_errno_and_return_minus_one( ENOSYS );
454b4: 2040 moveal %d0,%a0 <== NOT EXECUTED
454b6: 7058 moveq #88,%d0 <== NOT EXECUTED
454b8: 2080 movel %d0,%a0@ <== NOT EXECUTED
}
454ba: 70ff moveq #-1,%d0 <== NOT EXECUTED
...
00047784 <pthread_getschedparam>:
int pthread_getschedparam(
pthread_t thread,
int *policy,
struct sched_param *param
)
{
47784: 4e56 fff0 linkw %fp,#-16 <== NOT EXECUTED
47788: 48d7 1c00 moveml %a2-%a4,%sp@ <== NOT EXECUTED
4778c: 286e 000c moveal %fp@(12),%a4 <== NOT EXECUTED
47790: 246e 0010 moveal %fp@(16),%a2 <== NOT EXECUTED
Objects_Locations location;
POSIX_API_Control *api;
register Thread_Control *the_thread;
if ( !policy || !param )
47794: 4a8c tstl %a4 <== NOT EXECUTED
47796: 6758 beqs 477f0 <pthread_getschedparam+0x6c> <== NOT EXECUTED
47798: 4a8a tstl %a2 <== NOT EXECUTED
4779a: 6754 beqs 477f0 <pthread_getschedparam+0x6c> <== NOT EXECUTED
pthread_t id,
Objects_Locations *location
)
{
return (Thread_Control *)
_Objects_Get( &_POSIX_Threads_Information, (Objects_Id)id, location );
4779c: 486e fffc pea %fp@(-4) <== NOT EXECUTED
477a0: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
477a4: 4879 0006 283e pea 6283e <_POSIX_Threads_Information> <== NOT EXECUTED
477aa: 4eb9 0004 9950 jsr 49950 <_Objects_Get> <== NOT EXECUTED
return EINVAL;
the_thread = _POSIX_Threads_Get( thread, &location );
switch ( location ) {
477b0: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
477b4: 2640 moveal %d0,%a3 <== NOT EXECUTED
477b6: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
477ba: 6638 bnes 477f4 <pthread_getschedparam+0x70> <== NOT EXECUTED
case OBJECTS_LOCAL:
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
477bc: 206b 0102 moveal %a3@(258),%a0 <== NOT EXECUTED
if ( policy )
*policy = api->schedpolicy;
477c0: 28a8 0084 movel %a0@(132),%a4@ <== NOT EXECUTED
if ( param ) {
*param = api->schedparam;
477c4: 4878 001c pea 1c <OPER2+0x8> <== NOT EXECUTED
477c8: 4868 0088 pea %a0@(136) <== NOT EXECUTED
477cc: 2f0a movel %a2,%sp@- <== NOT EXECUTED
477ce: 4eb9 0004 fccc jsr 4fccc <memcpy> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE int _POSIX_Priority_From_core(
Priority_Control priority
)
{
return (POSIX_SCHEDULER_MAXIMUM_PRIORITY - priority + 1);
477d4: 4280 clrl %d0 <== NOT EXECUTED
477d6: 1039 0006 0d96 moveb 60d96 <rtems_maximum_priority>,%d0 <== NOT EXECUTED
477dc: 90ab 0014 subl %a3@(20),%d0 <== NOT EXECUTED
477e0: 2480 movel %d0,%a2@ <== NOT EXECUTED
param->sched_priority =
_POSIX_Priority_From_core( the_thread->current_priority );
}
_Thread_Enable_dispatch();
477e2: 4eb9 0004 a3b6 jsr 4a3b6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
477e8: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
477ec: 4280 clrl %d0 <== NOT EXECUTED
477ee: 6006 bras 477f6 <pthread_getschedparam+0x72> <== NOT EXECUTED
Objects_Locations location;
POSIX_API_Control *api;
register Thread_Control *the_thread;
if ( !policy || !param )
return EINVAL;
477f0: 7016 moveq #22,%d0 <== NOT EXECUTED
477f2: 6002 bras 477f6 <pthread_getschedparam+0x72> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return ESRCH;
477f4: 7003 moveq #3,%d0 <== NOT EXECUTED
}
477f6: 4cee 1c00 fff0 moveml %fp@(-16),%a2-%a4 <== NOT EXECUTED
477fc: 4e5e unlk %fp <== NOT EXECUTED
000456f8 <pthread_getspecific>:
*/
void *pthread_getspecific(
pthread_key_t key
)
{
456f8: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
456fc: 2f03 movel %d3,%sp@- <== NOT EXECUTED
456fe: 2f02 movel %d2,%sp@- <== NOT EXECUTED
pthread_key_t id,
Objects_Locations *location
)
{
return (POSIX_Keys_Control *)
_Objects_Get( &_POSIX_Keys_Information, (Objects_Id) id, location );
45700: 486e fffc pea %fp@(-4) <== NOT EXECUTED
45704: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
45708: 4879 0005 fbac pea 5fbac <_POSIX_Keys_Information> <== NOT EXECUTED
4570e: 4eb9 0004 7a6c jsr 47a6c <_Objects_Get> <== NOT EXECUTED
uint32_t index;
Objects_Locations location;
void *key_data;
the_key = _POSIX_Keys_Get( key, &location );
switch ( location ) {
45714: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
45718: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4571c: 662e bnes 4574c <pthread_getspecific+0x54> <== NOT EXECUTED
case OBJECTS_LOCAL:
api = _Objects_Get_API( _Thread_Executing->Object.id );
4571e: 2079 0005 fcc6 moveal 5fcc6 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API(
Objects_Id id
)
{
return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS);
45724: 7618 moveq #24,%d3 <== NOT EXECUTED
index = _Objects_Get_index( _Thread_Executing->Object.id );
key_data = (void *) the_key->Values[ api ][ index ];
45726: 2240 moveal %d0,%a1 <== NOT EXECUTED
the_key = _POSIX_Keys_Get( key, &location );
switch ( location ) {
case OBJECTS_LOCAL:
api = _Objects_Get_API( _Thread_Executing->Object.id );
45728: 2428 0008 movel %a0@(8),%d2 <== NOT EXECUTED
4572c: 2202 movel %d2,%d1 <== NOT EXECUTED
4572e: e6a9 lsrl %d3,%d1 <== NOT EXECUTED
45730: 163c 0007 moveb #7,%d3 <== NOT EXECUTED
45734: c283 andl %d3,%d1 <== NOT EXECUTED
index = _Objects_Get_index( _Thread_Executing->Object.id );
45736: 0282 0000 ffff andil #65535,%d2 <== NOT EXECUTED
key_data = (void *) the_key->Values[ api ][ index ];
4573c: 2071 1c14 moveal %a1@(00000014,%d1:l:4),%a0 <== NOT EXECUTED
45740: 2430 2c00 movel %a0@(00000000,%d2:l:4),%d2 <== NOT EXECUTED
_Thread_Enable_dispatch();
45744: 4eb9 0004 84d2 jsr 484d2 <_Thread_Enable_dispatch> <== NOT EXECUTED
return key_data;
4574a: 6002 bras 4574e <pthread_getspecific+0x56> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return NULL;
4574c: 4282 clrl %d2 <== NOT EXECUTED
}
4574e: 2002 movel %d2,%d0 <== NOT EXECUTED
45750: 242e fff4 movel %fp@(-12),%d2 <== NOT EXECUTED
45754: 262e fff8 movel %fp@(-8),%d3 <== NOT EXECUTED
45758: 4e5e unlk %fp <== NOT EXECUTED
0004a7dc <pthread_join>:
int pthread_join(
pthread_t thread,
void **value_ptr
)
{
4a7dc: 4e56 fff8 linkw %fp,#-8 <== NOT EXECUTED
4a7e0: 2f0b movel %a3,%sp@- <== NOT EXECUTED
4a7e2: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4a7e4: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4a7e8: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4a7ec: 4879 0006 670a pea 6670a <_POSIX_Threads_Information> <== NOT EXECUTED
4a7f2: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
4a7f6: 4eb9 0004 c960 jsr 4c960 <_Objects_Get> <== NOT EXECUTED
POSIX_API_Control *api;
Objects_Locations location;
void *return_pointer;
the_thread = _POSIX_Threads_Get( thread, &location );
switch ( location ) {
4a7fc: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4a800: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4a804: 665c bnes 4a862 <pthread_join+0x86> <== NOT EXECUTED
case OBJECTS_LOCAL:
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
4a806: 2240 moveal %d0,%a1 <== NOT EXECUTED
4a808: 2069 0102 moveal %a1@(258),%a0 <== NOT EXECUTED
if ( api->detachstate == PTHREAD_CREATE_DETACHED ) {
4a80c: 4aa8 0040 tstl %a0@(64) <== NOT EXECUTED
4a810: 660a bnes 4a81c <pthread_join+0x40> <== NOT EXECUTED
_Thread_Enable_dispatch();
4a812: 4eb9 0004 d3c6 jsr 4d3c6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return EINVAL;
4a818: 7016 moveq #22,%d0 <== NOT EXECUTED
4a81a: 604c bras 4a868 <pthread_join+0x8c> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _Thread_Is_executing (
const Thread_Control *the_thread
)
{
return ( the_thread == _Thread_Executing );
4a81c: 2279 0006 69d2 moveal 669d2 <_Per_CPU_Information+0xc>,%a1 <== NOT EXECUTED
4a822: 47f9 0004 d3c6 lea 4d3c6 <_Thread_Enable_dispatch>,%a3 <== NOT EXECUTED
}
if ( _Thread_Is_executing( the_thread ) ) {
4a828: b3c0 cmpal %d0,%a1 <== NOT EXECUTED
4a82a: 6606 bnes 4a832 <pthread_join+0x56> <== NOT EXECUTED
_Thread_Enable_dispatch();
4a82c: 4e93 jsr %a3@ <== NOT EXECUTED
return EDEADLK;
4a82e: 702d moveq #45,%d0 <== NOT EXECUTED
4a830: 6036 bras 4a868 <pthread_join+0x8c> <== NOT EXECUTED
/*
* Put ourself on the threads join list
*/
_Thread_Executing->Wait.return_argument = &return_pointer;
4a832: 200e movel %fp,%d0 <== NOT EXECUTED
4a834: 5180 subql #8,%d0 <== NOT EXECUTED
4a836: 2340 0028 movel %d0,%a1@(40) <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Thread_queue_Enter_critical_section (
Thread_queue_Control *the_thread_queue
)
{
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
4a83a: 7001 moveq #1,%d0 <== NOT EXECUTED
4a83c: 2140 0074 movel %d0,%a0@(116) <== NOT EXECUTED
_Thread_queue_Enter_critical_section( &api->Join_List );
_Thread_queue_Enqueue( &api->Join_List, WATCHDOG_NO_TIMEOUT );
4a840: 4879 0004 db3c pea 4db3c <_Thread_queue_Timeout> <== NOT EXECUTED
4a846: 42a7 clrl %sp@- <== NOT EXECUTED
4a848: 4868 0044 pea %a0@(68) <== NOT EXECUTED
4a84c: 4eb9 0004 d828 jsr 4d828 <_Thread_queue_Enqueue_with_handler><== NOT EXECUTED
_Thread_Enable_dispatch();
4a852: 4e93 jsr %a3@ <== NOT EXECUTED
if ( value_ptr )
4a854: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4a858: 4a8a tstl %a2 <== NOT EXECUTED
4a85a: 670a beqs 4a866 <pthread_join+0x8a> <== NOT EXECUTED
*value_ptr = return_pointer;
4a85c: 24ae fff8 movel %fp@(-8),%a2@ <== NOT EXECUTED
4a860: 6004 bras 4a866 <pthread_join+0x8a> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return ESRCH;
4a862: 7003 moveq #3,%d0 <== NOT EXECUTED
4a864: 6002 bras 4a868 <pthread_join+0x8c> <== NOT EXECUTED
_Thread_Enable_dispatch();
if ( value_ptr )
*value_ptr = return_pointer;
return 0;
4a866: 4280 clrl %d0 <== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
return ESRCH;
}
4a868: 246e fff0 moveal %fp@(-16),%a2 <== NOT EXECUTED
4a86c: 266e fff4 moveal %fp@(-12),%a3 <== NOT EXECUTED
4a870: 4e5e unlk %fp <== NOT EXECUTED
0004558c <pthread_key_create>:
int pthread_key_create(
pthread_key_t *key,
void (*destructor)( void * )
)
{
4558c: 4e56 ffe8 linkw %fp,#-24 <== NOT EXECUTED
45590: 2039 0005 f838 movel 5f838 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
45596: 5280 addql #1,%d0 <== NOT EXECUTED
45598: 48d7 3c0c moveml %d2-%d3/%a2-%a5,%sp@ <== NOT EXECUTED
4559c: 23c0 0005 f838 movel %d0,5f838 <_Thread_Dispatch_disable_level><== NOT EXECUTED
* the inactive chain of free keys control blocks.
*/
RTEMS_INLINE_ROUTINE POSIX_Keys_Control *_POSIX_Keys_Allocate( void )
{
return (POSIX_Keys_Control *) _Objects_Allocate( &_POSIX_Keys_Information );
455a2: 4879 0005 fbac pea 5fbac <_POSIX_Keys_Information> <== NOT EXECUTED
455a8: 4eb9 0004 7614 jsr 47614 <_Objects_Allocate> <== NOT EXECUTED
_Thread_Disable_dispatch();
the_key = _POSIX_Keys_Allocate();
if ( !the_key ) {
455ae: 588f addql #4,%sp <== NOT EXECUTED
455b0: 2440 moveal %d0,%a2 <== NOT EXECUTED
455b2: 4a80 tstl %d0 <== NOT EXECUTED
455b4: 660c bnes 455c2 <pthread_key_create+0x36> <== NOT EXECUTED
_Thread_Enable_dispatch();
455b6: 4eb9 0004 84d2 jsr 484d2 <_Thread_Enable_dispatch> <== NOT EXECUTED
return EAGAIN;
455bc: 700b moveq #11,%d0 <== NOT EXECUTED
455be: 6000 009a braw 4565a <pthread_key_create+0xce> <== NOT EXECUTED
}
the_key->destructor = destructor;
455c2: 49f9 0005 f7f8 lea 5f7f8 <_Objects_Information_table+0x4>,%a4<== NOT EXECUTED
int _EXFUN(pthread_once,
(pthread_once_t *__once_control, void (*__init_routine)(void)));
/* Thread-Specific Data Key Create, P1003.1c/Draft 10, p. 163 */
int _EXFUN(pthread_key_create,
455c8: 47ea 0018 lea %a2@(24),%a3 <== NOT EXECUTED
_Thread_Enable_dispatch();
return ENOMEM;
}
the_key->Values[ the_api ] = table;
memset( table, '\0', bytes_to_allocate );
455cc: 4bf9 0004 de24 lea 4de24 <memset>,%a5 <== NOT EXECUTED
if ( !the_key ) {
_Thread_Enable_dispatch();
return EAGAIN;
}
the_key->destructor = destructor;
455d2: 256e 000c 0010 movel %fp@(12),%a2@(16) <== NOT EXECUTED
);
#endif
bytes_to_allocate = sizeof( void * ) *
(_Objects_Information_table[ the_api ][ 1 ]->maximum + 1);
table = _Workspace_Allocate( bytes_to_allocate );
455d8: 263c 0004 95d4 movel #300500,%d3 <== NOT EXECUTED
INTERNAL_ERROR_IMPLEMENTATION_KEY_CREATE_INCONSISTENCY
);
#endif
bytes_to_allocate = sizeof( void * ) *
(_Objects_Information_table[ the_api ][ 1 ]->maximum + 1);
455de: 205c moveal %a4@+,%a0 <== NOT EXECUTED
455e0: 4282 clrl %d2 <== NOT EXECUTED
455e2: 2068 0004 moveal %a0@(4),%a0 <== NOT EXECUTED
455e6: 3428 000e movew %a0@(14),%d2 <== NOT EXECUTED
* APIs are optional.
*
* NOTE: Currently RTEMS Classic API tasks are always enabled.
*/
for ( the_api = 1; the_api <= OBJECTS_APIS_LAST; the_api++ ) {
the_key->Values[ the_api ] = NULL;
455ea: 4293 clrl %a3@ <== NOT EXECUTED
);
#endif
bytes_to_allocate = sizeof( void * ) *
(_Objects_Information_table[ the_api ][ 1 ]->maximum + 1);
table = _Workspace_Allocate( bytes_to_allocate );
455ec: 2043 moveal %d3,%a0 <== NOT EXECUTED
INTERNAL_ERROR_IMPLEMENTATION_KEY_CREATE_INCONSISTENCY
);
#endif
bytes_to_allocate = sizeof( void * ) *
(_Objects_Information_table[ the_api ][ 1 ]->maximum + 1);
455ee: 5282 addql #1,%d2 <== NOT EXECUTED
true,
INTERNAL_ERROR_IMPLEMENTATION_KEY_CREATE_INCONSISTENCY
);
#endif
bytes_to_allocate = sizeof( void * ) *
455f0: e58a lsll #2,%d2 <== NOT EXECUTED
(_Objects_Information_table[ the_api ][ 1 ]->maximum + 1);
table = _Workspace_Allocate( bytes_to_allocate );
455f2: 2f02 movel %d2,%sp@- <== NOT EXECUTED
455f4: 4e90 jsr %a0@ <== NOT EXECUTED
if ( !table ) {
455f6: 588f addql #4,%sp <== NOT EXECUTED
455f8: 4a80 tstl %d0 <== NOT EXECUTED
455fa: 6624 bnes 45620 <pthread_key_create+0x94> <== NOT EXECUTED
_POSIX_Keys_Free_memory( the_key );
455fc: 2f0a movel %a2,%sp@- <== NOT EXECUTED
455fe: 4eb9 0004 56c8 jsr 456c8 <_POSIX_Keys_Free_memory> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _POSIX_Keys_Free (
POSIX_Keys_Control *the_key
)
{
_Objects_Free( &_POSIX_Keys_Information, &the_key->Object );
45604: 2f0a movel %a2,%sp@- <== NOT EXECUTED
45606: 4879 0005 fbac pea 5fbac <_POSIX_Keys_Information> <== NOT EXECUTED
4560c: 4eb9 0004 7908 jsr 47908 <_Objects_Free> <== NOT EXECUTED
_POSIX_Keys_Free( the_key );
_Thread_Enable_dispatch();
45612: 4eb9 0004 84d2 jsr 484d2 <_Thread_Enable_dispatch> <== NOT EXECUTED
return ENOMEM;
45618: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4561c: 700c moveq #12,%d0 <== NOT EXECUTED
4561e: 603a bras 4565a <pthread_key_create+0xce> <== NOT EXECUTED
}
the_key->Values[ the_api ] = table;
45620: 26c0 movel %d0,%a3@+ <== NOT EXECUTED
memset( table, '\0', bytes_to_allocate );
45622: 2f02 movel %d2,%sp@- <== NOT EXECUTED
45624: 42a7 clrl %sp@- <== NOT EXECUTED
45626: 2f00 movel %d0,%sp@- <== NOT EXECUTED
45628: 4e95 jsr %a5@ <== NOT EXECUTED
* This is a bit more complex than one might initially expect because
* APIs are optional.
*
* NOTE: Currently RTEMS Classic API tasks are always enabled.
*/
for ( the_api = 1; the_api <= OBJECTS_APIS_LAST; the_api++ ) {
4562a: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4562e: b9fc 0005 f804 cmpal #391172,%a4 <== NOT EXECUTED
45634: 66a8 bnes 455de <pthread_key_create+0x52> <== NOT EXECUTED
uint32_t name
)
{
_Objects_Set_local_object(
information,
_Objects_Get_index( the_object->id ),
45636: 202a 0008 movel %a2@(8),%d0 <== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
uint32_t name
)
{
_Objects_Set_local_object(
4563a: 4281 clrl %d1 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
4563c: 2079 0005 fbc4 moveal 5fbc4 <_POSIX_Keys_Information+0x18>,%a0<== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
uint32_t name
)
{
_Objects_Set_local_object(
45642: 3200 movew %d0,%d1 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
45644: 218a 1c00 movel %a2,%a0@(00000000,%d1:l:4) <== NOT EXECUTED
the_key->Values[ the_api ] = table;
memset( table, '\0', bytes_to_allocate );
}
_Objects_Open_u32( &_POSIX_Keys_Information, &the_key->Object, 0 );
*key = the_key->Object.id;
45648: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
_Objects_Get_index( the_object->id ),
the_object
);
/* ASSERT: information->is_string == false */
the_object->name.name_u32 = name;
4564c: 42aa 000c clrl %a2@(12) <== NOT EXECUTED
45650: 2080 movel %d0,%a0@ <== NOT EXECUTED
_Thread_Enable_dispatch();
45652: 4eb9 0004 84d2 jsr 484d2 <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
45658: 4280 clrl %d0 <== NOT EXECUTED
}
4565a: 4cee 3c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a5 <== NOT EXECUTED
45660: 4e5e unlk %fp <== NOT EXECUTED
00045664 <pthread_key_delete>:
* 17.1.3 Thread-Specific Data Key Deletion, P1003.1c/Draft 10, p. 167
*/
int pthread_key_delete(
pthread_key_t key
)
{
45664: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
45668: 2f02 movel %d2,%sp@- <== NOT EXECUTED
pthread_key_t id,
Objects_Locations *location
)
{
return (POSIX_Keys_Control *)
_Objects_Get( &_POSIX_Keys_Information, (Objects_Id) id, location );
4566a: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4566e: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
45672: 4879 0005 fbac pea 5fbac <_POSIX_Keys_Information> <== NOT EXECUTED
45678: 4eb9 0004 7a6c jsr 47a6c <_Objects_Get> <== NOT EXECUTED
POSIX_Keys_Control *the_key;
Objects_Locations location;
the_key = _POSIX_Keys_Get( key, &location );
switch ( location ) {
4567e: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
45682: 2400 movel %d0,%d2 <== NOT EXECUTED
45684: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
45688: 6632 bnes 456bc <pthread_key_delete+0x58> <== NOT EXECUTED
case OBJECTS_LOCAL:
_Objects_Close( &_POSIX_Keys_Information, &the_key->Object );
4568a: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4568c: 4879 0005 fbac pea 5fbac <_POSIX_Keys_Information> <== NOT EXECUTED
45692: 4eb9 0004 7690 jsr 47690 <_Objects_Close> <== NOT EXECUTED
_POSIX_Keys_Free_memory( the_key );
45698: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4569a: 4eb9 0004 56c8 jsr 456c8 <_POSIX_Keys_Free_memory> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _POSIX_Keys_Free (
POSIX_Keys_Control *the_key
)
{
_Objects_Free( &_POSIX_Keys_Information, &the_key->Object );
456a0: 2f02 movel %d2,%sp@- <== NOT EXECUTED
456a2: 4879 0005 fbac pea 5fbac <_POSIX_Keys_Information> <== NOT EXECUTED
456a8: 4eb9 0004 7908 jsr 47908 <_Objects_Free> <== NOT EXECUTED
/*
* NOTE: The destructor is not called and it is the responsibility
* of the application to free the memory.
*/
_POSIX_Keys_Free( the_key );
_Thread_Enable_dispatch();
456ae: 4eb9 0004 84d2 jsr 484d2 <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
456b4: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
456b8: 4280 clrl %d0 <== NOT EXECUTED
456ba: 6002 bras 456be <pthread_key_delete+0x5a> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
456bc: 7016 moveq #22,%d0 <== NOT EXECUTED
}
456be: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
456c2: 4e5e unlk %fp <== NOT EXECUTED
...
0005a3bc <pthread_kill>:
int pthread_kill(
pthread_t thread,
int sig
)
{
5a3bc: 4e56 fff0 linkw %fp,#-16 <== NOT EXECUTED
5a3c0: 48d7 040c moveml %d2-%d3/%a2,%sp@ <== NOT EXECUTED
5a3c4: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
POSIX_API_Control *api;
Thread_Control *the_thread;
Objects_Locations location;
if ( !sig )
5a3c8: 670a beqs 5a3d4 <pthread_kill+0x18> <== NOT EXECUTED
static inline bool is_valid_signo(
int signo
)
{
return ((signo) >= 1 && (signo) <= 32 );
5a3ca: 2602 movel %d2,%d3 <== NOT EXECUTED
5a3cc: 5383 subql #1,%d3 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
if ( !is_valid_signo(sig) )
5a3ce: 701f moveq #31,%d0 <== NOT EXECUTED
5a3d0: b083 cmpl %d3,%d0 <== NOT EXECUTED
5a3d2: 6410 bccs 5a3e4 <pthread_kill+0x28> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
5a3d4: 4eb9 0004 c954 jsr 4c954 <__errno> <== NOT EXECUTED
5a3da: 7216 moveq #22,%d1 <== NOT EXECUTED
5a3dc: 2040 moveal %d0,%a0 <== NOT EXECUTED
5a3de: 2081 movel %d1,%a0@ <== NOT EXECUTED
5a3e0: 6000 0084 braw 5a466 <pthread_kill+0xaa> <== NOT EXECUTED
pthread_t id,
Objects_Locations *location
)
{
return (Thread_Control *)
_Objects_Get( &_POSIX_Threads_Information, (Objects_Id)id, location );
5a3e4: 486e fffc pea %fp@(-4) <== NOT EXECUTED
5a3e8: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
5a3ec: 4879 0005 dcce pea 5dcce <_POSIX_Threads_Information> <== NOT EXECUTED
5a3f2: 4eb9 0004 6ccc jsr 46ccc <_Objects_Get> <== NOT EXECUTED
the_thread = _POSIX_Threads_Get( thread, &location );
switch ( location ) {
5a3f8: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
5a3fc: 2440 moveal %d0,%a2 <== NOT EXECUTED
5a3fe: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
5a402: 6656 bnes 5a45a <pthread_kill+0x9e> <== NOT EXECUTED
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
if ( sig ) {
if ( _POSIX_signals_Vectors[ sig ].sa_handler == SIG_IGN ) {
5a404: 2202 movel %d2,%d1 <== NOT EXECUTED
5a406: 2002 movel %d2,%d0 <== NOT EXECUTED
5a408: e589 lsll #2,%d1 <== NOT EXECUTED
5a40a: e988 lsll #4,%d0 <== NOT EXECUTED
case OBJECTS_LOCAL:
/*
* If sig == 0 then just validate arguments
*/
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
5a40c: 206a 0102 moveal %a2@(258),%a0 <== NOT EXECUTED
if ( sig ) {
if ( _POSIX_signals_Vectors[ sig ].sa_handler == SIG_IGN ) {
5a410: 9081 subl %d1,%d0 <== NOT EXECUTED
5a412: 0680 0005 dfd0 addil #384976,%d0 <== NOT EXECUTED
5a418: 7201 moveq #1,%d1 <== NOT EXECUTED
5a41a: 2240 moveal %d0,%a1 <== NOT EXECUTED
5a41c: b291 cmpl %a1@,%d1 <== NOT EXECUTED
5a41e: 6730 beqs 5a450 <pthread_kill+0x94> <== NOT EXECUTED
static inline sigset_t signo_to_mask(
uint32_t sig
)
{
return 1u << (sig - 1);
5a420: 7001 moveq #1,%d0 <== NOT EXECUTED
5a422: e7a8 lsll %d3,%d0 <== NOT EXECUTED
return 0;
}
/* XXX critical section */
api->signals_pending |= signo_to_mask( sig );
5a424: 81a8 00d4 orl %d0,%a0@(212) <== NOT EXECUTED
(void) _POSIX_signals_Unblock_thread( the_thread, sig, NULL );
5a428: 42a7 clrl %sp@- <== NOT EXECUTED
5a42a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
5a42c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
5a42e: 4eb9 0005 a2c0 jsr 5a2c0 <_POSIX_signals_Unblock_thread> <== NOT EXECUTED
if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) )
5a434: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
5a438: 4ab9 0005 df92 tstl 5df92 <_Per_CPU_Information+0x8> <== NOT EXECUTED
5a43e: 6710 beqs 5a450 <pthread_kill+0x94> <== NOT EXECUTED
5a440: b5f9 0005 df96 cmpal 5df96 <_Per_CPU_Information+0xc>,%a2 <== NOT EXECUTED
5a446: 6608 bnes 5a450 <pthread_kill+0x94> <== NOT EXECUTED
_Thread_Dispatch_necessary = true;
5a448: 7001 moveq #1,%d0 <== NOT EXECUTED
5a44a: 13c0 0005 dfa2 moveb %d0,5dfa2 <_Per_CPU_Information+0x18> <== NOT EXECUTED
}
_Thread_Enable_dispatch();
5a450: 4eb9 0004 77a6 jsr 477a6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
5a456: 4280 clrl %d0 <== NOT EXECUTED
5a458: 600e bras 5a468 <pthread_kill+0xac> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
rtems_set_errno_and_return_minus_one( ESRCH );
5a45a: 4eb9 0004 c954 jsr 4c954 <__errno> <== NOT EXECUTED
5a460: 2040 moveal %d0,%a0 <== NOT EXECUTED
5a462: 7003 moveq #3,%d0 <== NOT EXECUTED
5a464: 2080 movel %d0,%a0@ <== NOT EXECUTED
5a466: 70ff moveq #-1,%d0 <== NOT EXECUTED
}
5a468: 4cee 040c fff0 moveml %fp@(-16),%d2-%d3/%a2 <== NOT EXECUTED
5a46e: 4e5e unlk %fp <== NOT EXECUTED
...
00046fd8 <pthread_mutex_destroy>:
*/
int pthread_mutex_destroy(
pthread_mutex_t *mutex
)
{
46fd8: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
46fdc: 2f0b movel %a3,%sp@- <== NOT EXECUTED
46fde: 2f0a movel %a2,%sp@- <== NOT EXECUTED
register POSIX_Mutex_Control *the_mutex;
Objects_Locations location;
the_mutex = _POSIX_Mutex_Get( mutex, &location );
46fe0: 486e fffc pea %fp@(-4) <== NOT EXECUTED
46fe4: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
46fe8: 4eb9 0004 7050 jsr 47050 <_POSIX_Mutex_Get> <== NOT EXECUTED
switch ( location ) {
46fee: 508f addql #8,%sp <== NOT EXECUTED
)
{
register POSIX_Mutex_Control *the_mutex;
Objects_Locations location;
the_mutex = _POSIX_Mutex_Get( mutex, &location );
46ff0: 2440 moveal %d0,%a2 <== NOT EXECUTED
switch ( location ) {
46ff2: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
46ff6: 6648 bnes 47040 <pthread_mutex_destroy+0x68> <== NOT EXECUTED
46ff8: 47f9 0004 a3b6 lea 4a3b6 <_Thread_Enable_dispatch>,%a3 <== NOT EXECUTED
/*
* XXX: There is an error for the mutex being locked
* or being in use by a condition variable.
*/
if ( _CORE_mutex_Is_locked( &the_mutex->Mutex ) ) {
46ffe: 4aaa 0062 tstl %a2@(98) <== NOT EXECUTED
47002: 6606 bnes 4700a <pthread_mutex_destroy+0x32> <== NOT EXECUTED
_Thread_Enable_dispatch();
47004: 4e93 jsr %a3@ <== NOT EXECUTED
return EBUSY;
47006: 7010 moveq #16,%d0 <== NOT EXECUTED
47008: 6038 bras 47042 <pthread_mutex_destroy+0x6a> <== NOT EXECUTED
}
_Objects_Close( &_POSIX_Mutex_Information, &the_mutex->Object );
4700a: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4700c: 4879 0006 2960 pea 62960 <_POSIX_Mutex_Information> <== NOT EXECUTED
47012: 4eb9 0004 9574 jsr 49574 <_Objects_Close> <== NOT EXECUTED
_CORE_mutex_Flush( &the_mutex->Mutex, NULL, EINVAL );
47018: 4878 0016 pea 16 <OPER2+0x2> <== NOT EXECUTED
4701c: 42a7 clrl %sp@- <== NOT EXECUTED
4701e: 486a 0014 pea %a2@(20) <== NOT EXECUTED
47022: 4eb9 0004 8c68 jsr 48c68 <_CORE_mutex_Flush> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _POSIX_Mutex_Free (
POSIX_Mutex_Control *the_mutex
)
{
_Objects_Free( &_POSIX_Mutex_Information, &the_mutex->Object );
47028: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4702a: 4879 0006 2960 pea 62960 <_POSIX_Mutex_Information> <== NOT EXECUTED
47030: 4eb9 0004 97ec jsr 497ec <_Objects_Free> <== NOT EXECUTED
_POSIX_Mutex_Free( the_mutex );
_Thread_Enable_dispatch();
47036: 4e93 jsr %a3@ <== NOT EXECUTED
return 0;
47038: 4fef 001c lea %sp@(28),%sp <== NOT EXECUTED
4703c: 4280 clrl %d0 <== NOT EXECUTED
4703e: 6002 bras 47042 <pthread_mutex_destroy+0x6a> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
47040: 7016 moveq #22,%d0 <== NOT EXECUTED
}
47042: 246e fff4 moveal %fp@(-12),%a2 <== NOT EXECUTED
47046: 266e fff8 moveal %fp@(-8),%a3 <== NOT EXECUTED
4704a: 4e5e unlk %fp <== NOT EXECUTED
...
000470f8 <pthread_mutex_getprioceiling>:
int pthread_mutex_getprioceiling(
pthread_mutex_t *mutex,
int *prioceiling
)
{
470f8: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
470fc: 2f0a movel %a2,%sp@- <== NOT EXECUTED
470fe: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
register POSIX_Mutex_Control *the_mutex;
Objects_Locations location;
if ( !prioceiling )
47102: 4a8a tstl %a2 <== NOT EXECUTED
47104: 6730 beqs 47136 <pthread_mutex_getprioceiling+0x3e><== NOT EXECUTED
return EINVAL;
the_mutex = _POSIX_Mutex_Get( mutex, &location );
47106: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4710a: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4710e: 4eb9 0004 7050 jsr 47050 <_POSIX_Mutex_Get> <== NOT EXECUTED
switch ( location ) {
47114: 508f addql #8,%sp <== NOT EXECUTED
47116: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4711a: 661a bnes 47136 <pthread_mutex_getprioceiling+0x3e><== NOT EXECUTED
RTEMS_INLINE_ROUTINE int _POSIX_Priority_From_core(
Priority_Control priority
)
{
return (POSIX_SCHEDULER_MAXIMUM_PRIORITY - priority + 1);
4711c: 4281 clrl %d1 <== NOT EXECUTED
4711e: 1239 0006 0d96 moveb 60d96 <rtems_maximum_priority>,%d1 <== NOT EXECUTED
47124: 2040 moveal %d0,%a0 <== NOT EXECUTED
47126: 92a8 005e subl %a0@(94),%d1 <== NOT EXECUTED
4712a: 2481 movel %d1,%a2@ <== NOT EXECUTED
case OBJECTS_LOCAL:
*prioceiling = _POSIX_Priority_From_core(
the_mutex->Mutex.Attributes.priority_ceiling
);
_Thread_Enable_dispatch();
4712c: 4eb9 0004 a3b6 jsr 4a3b6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
47132: 4280 clrl %d0 <== NOT EXECUTED
47134: 6002 bras 47138 <pthread_mutex_getprioceiling+0x40><== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
47136: 7016 moveq #22,%d0 <== NOT EXECUTED
}
47138: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
4713c: 4e5e unlk %fp <== NOT EXECUTED
00047140 <pthread_mutex_init>:
int pthread_mutex_init(
pthread_mutex_t *mutex,
const pthread_mutexattr_t *attr
)
{
47140: 4e56 fff0 linkw %fp,#-16
47144: 48d7 1c04 moveml %d2/%a2-%a4,%sp@
47148: 286e 0008 moveal %fp@(8),%a4
4714c: 266e 000c moveal %fp@(12),%a3
POSIX_Mutex_Control *the_mutex;
CORE_mutex_Attributes *the_mutex_attr;
const pthread_mutexattr_t *the_attr;
CORE_mutex_Disciplines the_discipline;
if ( attr ) the_attr = attr;
47150: 4a8b tstl %a3
47152: 6606 bnes 4715a <pthread_mutex_init+0x1a> <== NEVER TAKEN
else the_attr = &_POSIX_Mutex_Default_attributes;
47154: 47f9 0006 29d4 lea 629d4 <_POSIX_Mutex_Default_attributes>,%a3
/* Check for NULL mutex */
if ( !mutex )
4715a: 4a8c tstl %a4
4715c: 6700 00ec beqw 4724a <pthread_mutex_init+0x10a>
}
}
}
#endif
if ( !the_attr->is_initialized )
47160: 4a93 tstl %a3@
47162: 6700 00e6 beqw 4724a <pthread_mutex_init+0x10a>
return EINVAL;
/*
* We only support process private mutexes.
*/
if ( the_attr->process_shared == PTHREAD_PROCESS_SHARED )
47166: 202b 0004 movel %a3@(4),%d0
4716a: 7201 moveq #1,%d1
4716c: b280 cmpl %d0,%d1
4716e: 6700 00d6 beqw 47246 <pthread_mutex_init+0x106>
return ENOSYS;
if ( the_attr->process_shared != PTHREAD_PROCESS_PRIVATE )
47172: 4a80 tstl %d0
47174: 6600 00d4 bnew 4724a <pthread_mutex_init+0x10a>
return EINVAL;
/*
* Determine the discipline of the mutex
*/
switch ( the_attr->protocol ) {
47178: 202b 000c movel %a3@(12),%d0
4717c: b280 cmpl %d0,%d1
4717e: 6716 beqs 47196 <pthread_mutex_init+0x56> <== NEVER TAKEN
47180: 123c 0002 moveb #2,%d1
47184: b280 cmpl %d0,%d1
47186: 670a beqs 47192 <pthread_mutex_init+0x52> <== NEVER TAKEN
47188: 4a80 tstl %d0
4718a: 6600 00be bnew 4724a <pthread_mutex_init+0x10a>
case PTHREAD_PRIO_NONE:
the_discipline = CORE_MUTEX_DISCIPLINES_FIFO;
4718e: 4282 clrl %d2
47190: 6006 bras 47198 <pthread_mutex_init+0x58>
break;
case PTHREAD_PRIO_INHERIT:
the_discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT;
break;
case PTHREAD_PRIO_PROTECT:
the_discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING;
47192: 7403 moveq #3,%d2 <== NOT EXECUTED
break;
47194: 6002 bras 47198 <pthread_mutex_init+0x58> <== NOT EXECUTED
switch ( the_attr->protocol ) {
case PTHREAD_PRIO_NONE:
the_discipline = CORE_MUTEX_DISCIPLINES_FIFO;
break;
case PTHREAD_PRIO_INHERIT:
the_discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT;
47196: 7402 moveq #2,%d2 <== NOT EXECUTED
}
/*
* Validate the priority ceiling field -- should always be valid.
*/
if ( !_POSIX_Priority_Is_valid( the_attr->prio_ceiling ) )
47198: 2f2b 0008 movel %a3@(8),%sp@-
4719c: 4eb9 0004 74cc jsr 474cc <_POSIX_Priority_Is_valid>
471a2: 588f addql #4,%sp
471a4: 4a00 tstb %d0
471a6: 6700 00a2 beqw 4724a <pthread_mutex_init+0x10a>
#if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES)
/*
* Validate the mutex type and set appropriate SuperCore mutex
* attributes.
*/
switch ( the_attr->type ) {
471aa: 7003 moveq #3,%d0
471ac: b0ab 0010 cmpl %a3@(16),%d0
471b0: 6500 0098 bcsw 4724a <pthread_mutex_init+0x10a>
471b4: 2039 0006 2678 movel 62678 <_Thread_Dispatch_disable_level>,%d0
471ba: 5280 addql #1,%d0
471bc: 23c0 0006 2678 movel %d0,62678 <_Thread_Dispatch_disable_level>
* _POSIX_Mutex_Allocate
*/
RTEMS_INLINE_ROUTINE POSIX_Mutex_Control *_POSIX_Mutex_Allocate( void )
{
return (POSIX_Mutex_Control *) _Objects_Allocate( &_POSIX_Mutex_Information );
471c2: 4879 0006 2960 pea 62960 <_POSIX_Mutex_Information>
471c8: 4eb9 0004 94f8 jsr 494f8 <_Objects_Allocate>
*/
_Thread_Disable_dispatch();
the_mutex = _POSIX_Mutex_Allocate();
if ( !the_mutex ) {
471ce: 588f addql #4,%sp
471d0: 2440 moveal %d0,%a2
471d2: 4a80 tstl %d0
471d4: 660a bnes 471e0 <pthread_mutex_init+0xa0> <== ALWAYS TAKEN
_Thread_Enable_dispatch();
471d6: 4eb9 0004 a3b6 jsr 4a3b6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return EAGAIN;
471dc: 700b moveq #11,%d0 <== NOT EXECUTED
471de: 606c bras 4724c <pthread_mutex_init+0x10c> <== NOT EXECUTED
the_mutex->process_shared = the_attr->process_shared;
the_mutex_attr = &the_mutex->Mutex.Attributes;
if ( the_attr->recursive )
the_mutex_attr->lock_nesting_behavior = CORE_MUTEX_NESTING_ACQUIRES;
471e0: 4aab 0014 tstl %a3@(20)
471e4: 57c0 seq %d0
if ( !the_mutex ) {
_Thread_Enable_dispatch();
return EAGAIN;
}
the_mutex->process_shared = the_attr->process_shared;
471e6: 256b 0004 0010 movel %a3@(4),%a2@(16)
the_mutex_attr = &the_mutex->Mutex.Attributes;
if ( the_attr->recursive )
the_mutex_attr->lock_nesting_behavior = CORE_MUTEX_NESTING_ACQUIRES;
471ec: 49c0 extbl %d0
471ee: 4480 negl %d0
else
the_mutex_attr->lock_nesting_behavior = CORE_MUTEX_NESTING_IS_ERROR;
the_mutex_attr->only_owner_release = true;
471f0: 7201 moveq #1,%d1
the_mutex->process_shared = the_attr->process_shared;
the_mutex_attr = &the_mutex->Mutex.Attributes;
if ( the_attr->recursive )
the_mutex_attr->lock_nesting_behavior = CORE_MUTEX_NESTING_ACQUIRES;
471f2: 2540 0054 movel %d0,%a2@(84)
RTEMS_INLINE_ROUTINE Priority_Control _POSIX_Priority_To_core(
int priority
)
{
return (Priority_Control) (POSIX_SCHEDULER_MAXIMUM_PRIORITY - priority + 1);
471f6: 4280 clrl %d0
else
the_mutex_attr->lock_nesting_behavior = CORE_MUTEX_NESTING_IS_ERROR;
the_mutex_attr->only_owner_release = true;
471f8: 1541 0058 moveb %d1,%a2@(88)
471fc: 1039 0006 0d96 moveb 60d96 <rtems_maximum_priority>,%d0
47202: 90ab 0008 subl %a3@(8),%d0
the_mutex_attr->priority_ceiling =
_POSIX_Priority_To_core( the_attr->prio_ceiling );
the_mutex_attr->discipline = the_discipline;
47206: 2542 005a movel %d2,%a2@(90)
4720a: 2540 005e movel %d0,%a2@(94)
/*
* Must be initialized to unlocked.
*/
_CORE_mutex_Initialize(
4720e: 4878 0001 pea 1 <ADD>
47212: 486a 0054 pea %a2@(84)
47216: 486a 0014 pea %a2@(20)
4721a: 4eb9 0004 8c74 jsr 48c74 <_CORE_mutex_Initialize>
uint32_t name
)
{
_Objects_Set_local_object(
information,
_Objects_Get_index( the_object->id ),
47220: 202a 0008 movel %a2@(8),%d0
Objects_Information *information,
Objects_Control *the_object,
uint32_t name
)
{
_Objects_Set_local_object(
47224: 4281 clrl %d1
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
47226: 2079 0006 2978 moveal 62978 <_POSIX_Mutex_Information+0x18>,%a0
Objects_Information *information,
Objects_Control *the_object,
uint32_t name
)
{
_Objects_Set_local_object(
4722c: 3200 movew %d0,%d1
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
4722e: 218a 1c00 movel %a2,%a0@(00000000,%d1:l:4)
_Objects_Get_index( the_object->id ),
the_object
);
/* ASSERT: information->is_string == false */
the_object->name.name_u32 = name;
47232: 42aa 000c clrl %a2@(12)
CORE_MUTEX_UNLOCKED
);
_Objects_Open_u32( &_POSIX_Mutex_Information, &the_mutex->Object, 0 );
*mutex = the_mutex->Object.id;
47236: 2880 movel %d0,%a4@
_Thread_Enable_dispatch();
47238: 4eb9 0004 a3b6 jsr 4a3b6 <_Thread_Enable_dispatch>
return 0;
4723e: 4fef 000c lea %sp@(12),%sp
47242: 4280 clrl %d0
47244: 6006 bras 4724c <pthread_mutex_init+0x10c>
/*
* We only support process private mutexes.
*/
if ( the_attr->process_shared == PTHREAD_PROCESS_SHARED )
return ENOSYS;
47246: 7058 moveq #88,%d0 <== NOT EXECUTED
47248: 6002 bras 4724c <pthread_mutex_init+0x10c> <== NOT EXECUTED
case PTHREAD_MUTEX_ERRORCHECK:
case PTHREAD_MUTEX_DEFAULT:
break;
default:
return EINVAL;
4724a: 7016 moveq #22,%d0 <== NOT EXECUTED
*mutex = the_mutex->Object.id;
_Thread_Enable_dispatch();
return 0;
}
4724c: 4cee 1c04 fff0 moveml %fp@(-16),%d2/%a2-%a4
47252: 4e5e unlk %fp
...
00047258 <pthread_mutex_lock>:
*/
int pthread_mutex_lock(
pthread_mutex_t *mutex
)
{
47258: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return _POSIX_Mutex_Lock_support( mutex, true, THREAD_QUEUE_WAIT_FOREVER );
4725c: 42a7 clrl %sp@- <== NOT EXECUTED
4725e: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
47262: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
47266: 4eb9 0004 7270 jsr 47270 <_POSIX_Mutex_Lock_support> <== NOT EXECUTED
}
4726c: 4e5e unlk %fp <== NOT EXECUTED
000472d8 <pthread_mutex_setprioceiling>:
int pthread_mutex_setprioceiling(
pthread_mutex_t *mutex,
int prioceiling,
int *old_ceiling
)
{
472d8: 4e56 ffec linkw %fp,#-20 <== NOT EXECUTED
472dc: 48d7 041c moveml %d2-%d4/%a2,%sp@ <== NOT EXECUTED
472e0: 262e 0008 movel %fp@(8),%d3 <== NOT EXECUTED
472e4: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
472e8: 246e 0010 moveal %fp@(16),%a2 <== NOT EXECUTED
register POSIX_Mutex_Control *the_mutex;
Objects_Locations location;
Priority_Control the_priority;
if ( !old_ceiling )
472ec: 4a8a tstl %a2 <== NOT EXECUTED
472ee: 676c beqs 4735c <pthread_mutex_setprioceiling+0x84><== NOT EXECUTED
return EINVAL;
if ( !_POSIX_Priority_Is_valid( prioceiling ) )
472f0: 2f02 movel %d2,%sp@- <== NOT EXECUTED
472f2: 4eb9 0004 74cc jsr 474cc <_POSIX_Priority_Is_valid> <== NOT EXECUTED
472f8: 588f addql #4,%sp <== NOT EXECUTED
472fa: 4a00 tstb %d0 <== NOT EXECUTED
472fc: 675e beqs 4735c <pthread_mutex_setprioceiling+0x84><== NOT EXECUTED
/*
* Must acquire the mutex before we can change it's ceiling.
* POSIX says block until we acquire it.
*/
(void) pthread_mutex_lock( mutex );
472fe: 2f03 movel %d3,%sp@- <== NOT EXECUTED
47300: 1839 0006 0d96 moveb 60d96 <rtems_maximum_priority>,%d4 <== NOT EXECUTED
47306: 4eb9 0004 7258 jsr 47258 <pthread_mutex_lock> <== NOT EXECUTED
* operations.
*
* NOTE: This makes it easier to get 100% binary coverage since the
* bad Id case is handled by the switch.
*/
the_mutex = _POSIX_Mutex_Get( mutex, &location );
4730c: 486e fffc pea %fp@(-4) <== NOT EXECUTED
47310: 2f03 movel %d3,%sp@- <== NOT EXECUTED
47312: 4eb9 0004 7050 jsr 47050 <_POSIX_Mutex_Get> <== NOT EXECUTED
switch ( location ) {
47318: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
* operations.
*
* NOTE: This makes it easier to get 100% binary coverage since the
* bad Id case is handled by the switch.
*/
the_mutex = _POSIX_Mutex_Get( mutex, &location );
4731c: 2040 moveal %d0,%a0 <== NOT EXECUTED
switch ( location ) {
4731e: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
47322: 6638 bnes 4735c <pthread_mutex_setprioceiling+0x84><== NOT EXECUTED
RTEMS_INLINE_ROUTINE int _POSIX_Priority_From_core(
Priority_Control priority
)
{
return (POSIX_SCHEDULER_MAXIMUM_PRIORITY - priority + 1);
47324: 4280 clrl %d0 <== NOT EXECUTED
47326: 1039 0006 0d96 moveb 60d96 <rtems_maximum_priority>,%d0 <== NOT EXECUTED
4732c: 90a8 005e subl %a0@(94),%d0 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE Priority_Control _POSIX_Priority_To_core(
int priority
)
{
return (Priority_Control) (POSIX_SCHEDULER_MAXIMUM_PRIORITY - priority + 1);
47330: 0284 0000 00ff andil #255,%d4 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE int _POSIX_Priority_From_core(
Priority_Control priority
)
{
return (POSIX_SCHEDULER_MAXIMUM_PRIORITY - priority + 1);
47336: 2480 movel %d0,%a2@ <== NOT EXECUTED
RTEMS_INLINE_ROUTINE Priority_Control _POSIX_Priority_To_core(
int priority
)
{
return (Priority_Control) (POSIX_SCHEDULER_MAXIMUM_PRIORITY - priority + 1);
47338: 9882 subl %d2,%d4 <== NOT EXECUTED
4733a: 2144 005e movel %d4,%a0@(94) <== NOT EXECUTED
);
the_mutex->Mutex.Attributes.priority_ceiling = the_priority;
/*
* We are required to unlock the mutex before we return.
*/
_CORE_mutex_Surrender(
4733e: 42a7 clrl %sp@- <== NOT EXECUTED
47340: 2f28 0008 movel %a0@(8),%sp@- <== NOT EXECUTED
47344: 4868 0014 pea %a0@(20) <== NOT EXECUTED
47348: 4eb9 0004 8e24 jsr 48e24 <_CORE_mutex_Surrender> <== NOT EXECUTED
&the_mutex->Mutex,
the_mutex->Object.id,
NULL
);
_Thread_Enable_dispatch();
4734e: 4eb9 0004 a3b6 jsr 4a3b6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
47354: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
47358: 4280 clrl %d0 <== NOT EXECUTED
4735a: 6002 bras 4735e <pthread_mutex_setprioceiling+0x86><== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
4735c: 7016 moveq #22,%d0 <== NOT EXECUTED
}
4735e: 4cee 041c ffec moveml %fp@(-20),%d2-%d4/%a2 <== NOT EXECUTED
47364: 4e5e unlk %fp <== NOT EXECUTED
00047368 <pthread_mutex_timedlock>:
int pthread_mutex_timedlock(
pthread_mutex_t *mutex,
const struct timespec *abstime
)
{
47368: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
4736c: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4736e: 2f02 movel %d2,%sp@- <== NOT EXECUTED
*
* If the status is POSIX_ABSOLUTE_TIMEOUT_INVALID,
* POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST, or POSIX_ABSOLUTE_TIMEOUT_IS_NOW,
* then we should not wait.
*/
status = _POSIX_Absolute_timeout_to_ticks( abstime, &ticks );
47370: 486e fffc pea %fp@(-4) <== NOT EXECUTED
47374: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
47378: 4eb9 0004 7450 jsr 47450 <_POSIX_Absolute_timeout_to_ticks><== NOT EXECUTED
int _EXFUN(pthread_mutex_trylock, (pthread_mutex_t *__mutex));
int _EXFUN(pthread_mutex_unlock, (pthread_mutex_t *__mutex));
#if defined(_POSIX_TIMEOUTS)
int _EXFUN(pthread_mutex_timedlock,
4737e: 508f addql #8,%sp <== NOT EXECUTED
47380: 2400 movel %d0,%d2 <== NOT EXECUTED
47382: 7003 moveq #3,%d0 <== NOT EXECUTED
47384: b082 cmpl %d2,%d0 <== NOT EXECUTED
47386: 57c3 seq %d3 <== NOT EXECUTED
if ( status != POSIX_ABSOLUTE_TIMEOUT_IS_IN_FUTURE )
do_wait = false;
lock_status = _POSIX_Mutex_Lock_support( mutex, do_wait, ticks );
47388: 2f2e fffc movel %fp@(-4),%sp@- <== NOT EXECUTED
4738c: 4483 negl %d3 <== NOT EXECUTED
4738e: 4280 clrl %d0 <== NOT EXECUTED
47390: 1003 moveb %d3,%d0 <== NOT EXECUTED
47392: 2f00 movel %d0,%sp@- <== NOT EXECUTED
47394: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
47398: 4eb9 0004 7270 jsr 47270 <_POSIX_Mutex_Lock_support> <== NOT EXECUTED
* This service only gives us the option to block. We used a polling
* attempt to lock if the abstime was not in the future. If we did
* not obtain the mutex, then not look at the status immediately,
* make sure the right reason is returned.
*/
if ( !do_wait && (lock_status == EBUSY) ) {
4739e: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
473a2: 4a03 tstb %d3 <== NOT EXECUTED
473a4: 661c bnes 473c2 <pthread_mutex_timedlock+0x5a> <== NOT EXECUTED
473a6: 7210 moveq #16,%d1 <== NOT EXECUTED
473a8: b280 cmpl %d0,%d1 <== NOT EXECUTED
473aa: 6616 bnes 473c2 <pthread_mutex_timedlock+0x5a> <== NOT EXECUTED
if ( status == POSIX_ABSOLUTE_TIMEOUT_INVALID )
473ac: 4a82 tstl %d2 <== NOT EXECUTED
473ae: 670c beqs 473bc <pthread_mutex_timedlock+0x54> <== NOT EXECUTED
return EINVAL;
if ( status == POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST ||
473b0: 5382 subql #1,%d2 <== NOT EXECUTED
473b2: 123c 0001 moveb #1,%d1 <== NOT EXECUTED
473b6: b282 cmpl %d2,%d1 <== NOT EXECUTED
473b8: 6508 bcss 473c2 <pthread_mutex_timedlock+0x5a> <== NOT EXECUTED
473ba: 6004 bras 473c0 <pthread_mutex_timedlock+0x58> <== NOT EXECUTED
* not obtain the mutex, then not look at the status immediately,
* make sure the right reason is returned.
*/
if ( !do_wait && (lock_status == EBUSY) ) {
if ( status == POSIX_ABSOLUTE_TIMEOUT_INVALID )
return EINVAL;
473bc: 7016 moveq #22,%d0 <== NOT EXECUTED
473be: 6002 bras 473c2 <pthread_mutex_timedlock+0x5a> <== NOT EXECUTED
if ( status == POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST ||
status == POSIX_ABSOLUTE_TIMEOUT_IS_NOW )
return ETIMEDOUT;
473c0: 7074 moveq #116,%d0 <== NOT EXECUTED
}
return lock_status;
}
473c2: 242e fff4 movel %fp@(-12),%d2 <== NOT EXECUTED
473c6: 262e fff8 movel %fp@(-8),%d3 <== NOT EXECUTED
473ca: 4e5e unlk %fp <== NOT EXECUTED
...
000473e8 <pthread_mutex_trylock>:
*/
int pthread_mutex_trylock(
pthread_mutex_t *mutex
)
{
473e8: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return _POSIX_Mutex_Lock_support( mutex, false, THREAD_QUEUE_WAIT_FOREVER );
473ec: 42a7 clrl %sp@- <== NOT EXECUTED
473ee: 42a7 clrl %sp@- <== NOT EXECUTED
473f0: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
473f4: 4eb9 0004 7270 jsr 47270 <_POSIX_Mutex_Lock_support> <== NOT EXECUTED
}
473fa: 4e5e unlk %fp <== NOT EXECUTED
...
00047400 <pthread_mutex_unlock>:
*/
int pthread_mutex_unlock(
pthread_mutex_t *mutex
)
{
47400: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
47404: 2f02 movel %d2,%sp@- <== NOT EXECUTED
register POSIX_Mutex_Control *the_mutex;
Objects_Locations location;
CORE_mutex_Status status;
the_mutex = _POSIX_Mutex_Get( mutex, &location );
47406: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4740a: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4740e: 4eb9 0004 7050 jsr 47050 <_POSIX_Mutex_Get> <== NOT EXECUTED
switch ( location ) {
47414: 508f addql #8,%sp <== NOT EXECUTED
47416: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4741a: 6628 bnes 47444 <pthread_mutex_unlock+0x44> <== NOT EXECUTED
case OBJECTS_LOCAL:
status = _CORE_mutex_Surrender(
4741c: 2040 moveal %d0,%a0 <== NOT EXECUTED
4741e: 42a7 clrl %sp@- <== NOT EXECUTED
47420: 2f28 0008 movel %a0@(8),%sp@- <== NOT EXECUTED
47424: 4868 0014 pea %a0@(20) <== NOT EXECUTED
47428: 4eb9 0004 8e24 jsr 48e24 <_CORE_mutex_Surrender> <== NOT EXECUTED
4742e: 2400 movel %d0,%d2 <== NOT EXECUTED
&the_mutex->Mutex,
the_mutex->Object.id,
NULL
);
_Thread_Enable_dispatch();
47430: 4eb9 0004 a3b6 jsr 4a3b6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return _POSIX_Mutex_Translate_core_mutex_return_code( status );
47436: 2f02 movel %d2,%sp@- <== NOT EXECUTED
47438: 4eb9 0004 73d0 jsr 473d0 <_POSIX_Mutex_Translate_core_mutex_return_code><== NOT EXECUTED
4743e: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
47442: 6002 bras 47446 <pthread_mutex_unlock+0x46> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
47444: 7016 moveq #22,%d0 <== NOT EXECUTED
}
47446: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
4744a: 4e5e unlk %fp <== NOT EXECUTED
...
00046e8c <pthread_mutexattr_destroy>:
*/
int pthread_mutexattr_destroy(
pthread_mutexattr_t *attr
)
{
46e8c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
46e90: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
if ( !attr || !attr->is_initialized )
46e94: 4a88 tstl %a0 <== NOT EXECUTED
46e96: 670a beqs 46ea2 <pthread_mutexattr_destroy+0x16> <== NOT EXECUTED
46e98: 4a90 tstl %a0@ <== NOT EXECUTED
46e9a: 6706 beqs 46ea2 <pthread_mutexattr_destroy+0x16> <== NOT EXECUTED
return EINVAL;
attr->is_initialized = false;
46e9c: 4290 clrl %a0@ <== NOT EXECUTED
return 0;
46e9e: 4280 clrl %d0 <== NOT EXECUTED
46ea0: 6002 bras 46ea4 <pthread_mutexattr_destroy+0x18> <== NOT EXECUTED
int pthread_mutexattr_destroy(
pthread_mutexattr_t *attr
)
{
if ( !attr || !attr->is_initialized )
return EINVAL;
46ea2: 7016 moveq #22,%d0 <== NOT EXECUTED
attr->is_initialized = false;
return 0;
}
46ea4: 4e5e unlk %fp <== NOT EXECUTED
00046ea8 <pthread_mutexattr_getprioceiling>:
int pthread_mutexattr_getprioceiling(
const pthread_mutexattr_t *attr,
int *prioceiling
)
{
46ea8: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
46eac: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
46eb0: 226e 000c moveal %fp@(12),%a1 <== NOT EXECUTED
if ( !attr || !attr->is_initialized || !prioceiling )
46eb4: 4a88 tstl %a0 <== NOT EXECUTED
46eb6: 6710 beqs 46ec8 <pthread_mutexattr_getprioceiling+0x20><== NOT EXECUTED
46eb8: 4a90 tstl %a0@ <== NOT EXECUTED
46eba: 670c beqs 46ec8 <pthread_mutexattr_getprioceiling+0x20><== NOT EXECUTED
46ebc: 4a89 tstl %a1 <== NOT EXECUTED
46ebe: 6708 beqs 46ec8 <pthread_mutexattr_getprioceiling+0x20><== NOT EXECUTED
return EINVAL;
*prioceiling = attr->prio_ceiling;
46ec0: 22a8 0008 movel %a0@(8),%a1@ <== NOT EXECUTED
return 0;
46ec4: 4280 clrl %d0 <== NOT EXECUTED
46ec6: 6002 bras 46eca <pthread_mutexattr_getprioceiling+0x22><== NOT EXECUTED
const pthread_mutexattr_t *attr,
int *prioceiling
)
{
if ( !attr || !attr->is_initialized || !prioceiling )
return EINVAL;
46ec8: 7016 moveq #22,%d0 <== NOT EXECUTED
*prioceiling = attr->prio_ceiling;
return 0;
}
46eca: 4e5e unlk %fp <== NOT EXECUTED
...
00046ed0 <pthread_mutexattr_getprotocol>:
int pthread_mutexattr_getprotocol(
const pthread_mutexattr_t *attr,
int *protocol
)
{
46ed0: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
46ed4: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
46ed8: 226e 000c moveal %fp@(12),%a1 <== NOT EXECUTED
if ( !attr || !attr->is_initialized || !protocol )
46edc: 4a88 tstl %a0 <== NOT EXECUTED
46ede: 6710 beqs 46ef0 <pthread_mutexattr_getprotocol+0x20><== NOT EXECUTED
46ee0: 4a90 tstl %a0@ <== NOT EXECUTED
46ee2: 670c beqs 46ef0 <pthread_mutexattr_getprotocol+0x20><== NOT EXECUTED
46ee4: 4a89 tstl %a1 <== NOT EXECUTED
46ee6: 6708 beqs 46ef0 <pthread_mutexattr_getprotocol+0x20><== NOT EXECUTED
return EINVAL;
*protocol = attr->protocol;
46ee8: 22a8 000c movel %a0@(12),%a1@ <== NOT EXECUTED
return 0;
46eec: 4280 clrl %d0 <== NOT EXECUTED
46eee: 6002 bras 46ef2 <pthread_mutexattr_getprotocol+0x22><== NOT EXECUTED
const pthread_mutexattr_t *attr,
int *protocol
)
{
if ( !attr || !attr->is_initialized || !protocol )
return EINVAL;
46ef0: 7016 moveq #22,%d0 <== NOT EXECUTED
*protocol = attr->protocol;
return 0;
}
46ef2: 4e5e unlk %fp <== NOT EXECUTED
...
00046ef8 <pthread_mutexattr_getpshared>:
int pthread_mutexattr_getpshared(
const pthread_mutexattr_t *attr,
int *pshared
)
{
46ef8: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
46efc: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
46f00: 226e 000c moveal %fp@(12),%a1 <== NOT EXECUTED
if ( !attr || !attr->is_initialized || !pshared )
46f04: 4a88 tstl %a0 <== NOT EXECUTED
46f06: 6710 beqs 46f18 <pthread_mutexattr_getpshared+0x20><== NOT EXECUTED
46f08: 4a90 tstl %a0@ <== NOT EXECUTED
46f0a: 670c beqs 46f18 <pthread_mutexattr_getpshared+0x20><== NOT EXECUTED
46f0c: 4a89 tstl %a1 <== NOT EXECUTED
46f0e: 6708 beqs 46f18 <pthread_mutexattr_getpshared+0x20><== NOT EXECUTED
return EINVAL;
*pshared = attr->process_shared;
46f10: 22a8 0004 movel %a0@(4),%a1@ <== NOT EXECUTED
return 0;
46f14: 4280 clrl %d0 <== NOT EXECUTED
46f16: 6002 bras 46f1a <pthread_mutexattr_getpshared+0x22><== NOT EXECUTED
const pthread_mutexattr_t *attr,
int *pshared
)
{
if ( !attr || !attr->is_initialized || !pshared )
return EINVAL;
46f18: 7016 moveq #22,%d0 <== NOT EXECUTED
*pshared = attr->process_shared;
return 0;
}
46f1a: 4e5e unlk %fp <== NOT EXECUTED
...
00045220 <pthread_mutexattr_gettype>:
#if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES)
int pthread_mutexattr_gettype(
const pthread_mutexattr_t *attr,
int *type
)
{
45220: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
45224: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
45228: 226e 000c moveal %fp@(12),%a1 <== NOT EXECUTED
if ( !attr )
4522c: 4a88 tstl %a0 <== NOT EXECUTED
4522e: 6710 beqs 45240 <pthread_mutexattr_gettype+0x20> <== NOT EXECUTED
return EINVAL;
if ( !attr->is_initialized )
45230: 4a90 tstl %a0@ <== NOT EXECUTED
45232: 670c beqs 45240 <pthread_mutexattr_gettype+0x20> <== NOT EXECUTED
return EINVAL;
if ( !type )
45234: 4a89 tstl %a1 <== NOT EXECUTED
45236: 6708 beqs 45240 <pthread_mutexattr_gettype+0x20> <== NOT EXECUTED
return EINVAL;
*type = attr->type;
45238: 22a8 0010 movel %a0@(16),%a1@ <== NOT EXECUTED
return 0;
4523c: 4280 clrl %d0 <== NOT EXECUTED
4523e: 6002 bras 45242 <pthread_mutexattr_gettype+0x22> <== NOT EXECUTED
if ( !attr->is_initialized )
return EINVAL;
if ( !type )
return EINVAL;
45240: 7016 moveq #22,%d0 <== NOT EXECUTED
*type = attr->type;
return 0;
}
45242: 4e5e unlk %fp <== NOT EXECUTED
...
00046f20 <pthread_mutexattr_init>:
*/
int pthread_mutexattr_init(
pthread_mutexattr_t *attr
)
{
46f20: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
46f24: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
if ( !attr )
46f28: 671a beqs 46f44 <pthread_mutexattr_init+0x24> <== NOT EXECUTED
return EINVAL;
*attr = _POSIX_Mutex_Default_attributes;
46f2a: 4878 0018 pea 18 <OPER2+0x4> <== NOT EXECUTED
46f2e: 4879 0006 29d4 pea 629d4 <_POSIX_Mutex_Default_attributes> <== NOT EXECUTED
46f34: 2f00 movel %d0,%sp@- <== NOT EXECUTED
46f36: 4eb9 0004 fccc jsr 4fccc <memcpy> <== NOT EXECUTED
return 0;
46f3c: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
46f40: 4280 clrl %d0 <== NOT EXECUTED
46f42: 6002 bras 46f46 <pthread_mutexattr_init+0x26> <== NOT EXECUTED
int pthread_mutexattr_init(
pthread_mutexattr_t *attr
)
{
if ( !attr )
return EINVAL;
46f44: 7016 moveq #22,%d0 <== NOT EXECUTED
*attr = _POSIX_Mutex_Default_attributes;
return 0;
}
46f46: 4e5e unlk %fp <== NOT EXECUTED
...
00046f4c <pthread_mutexattr_setprioceiling>:
int pthread_mutexattr_setprioceiling(
pthread_mutexattr_t *attr,
int prioceiling
)
{
46f4c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
46f50: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46f52: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
46f56: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46f58: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
if ( !attr || !attr->is_initialized )
46f5c: 4a8a tstl %a2 <== NOT EXECUTED
46f5e: 671a beqs 46f7a <pthread_mutexattr_setprioceiling+0x2e><== NOT EXECUTED
46f60: 4a92 tstl %a2@ <== NOT EXECUTED
46f62: 6716 beqs 46f7a <pthread_mutexattr_setprioceiling+0x2e><== NOT EXECUTED
return EINVAL;
if ( !_POSIX_Priority_Is_valid( prioceiling ) )
46f64: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46f66: 4eb9 0004 74cc jsr 474cc <_POSIX_Priority_Is_valid> <== NOT EXECUTED
46f6c: 588f addql #4,%sp <== NOT EXECUTED
46f6e: 4a00 tstb %d0 <== NOT EXECUTED
46f70: 6708 beqs 46f7a <pthread_mutexattr_setprioceiling+0x2e><== NOT EXECUTED
return EINVAL;
attr->prio_ceiling = prioceiling;
46f72: 2542 0008 movel %d2,%a2@(8) <== NOT EXECUTED
return 0;
46f76: 4280 clrl %d0 <== NOT EXECUTED
46f78: 6002 bras 46f7c <pthread_mutexattr_setprioceiling+0x30><== NOT EXECUTED
{
if ( !attr || !attr->is_initialized )
return EINVAL;
if ( !_POSIX_Priority_Is_valid( prioceiling ) )
return EINVAL;
46f7a: 7016 moveq #22,%d0 <== NOT EXECUTED
attr->prio_ceiling = prioceiling;
return 0;
}
46f7c: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
46f80: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
46f84: 4e5e unlk %fp <== NOT EXECUTED
00046f88 <pthread_mutexattr_setprotocol>:
int pthread_mutexattr_setprotocol(
pthread_mutexattr_t *attr,
int protocol
)
{
46f88: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
46f8c: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
46f90: 202e 000c movel %fp@(12),%d0 <== NOT EXECUTED
if ( !attr || !attr->is_initialized )
46f94: 4a88 tstl %a0 <== NOT EXECUTED
46f96: 6712 beqs 46faa <pthread_mutexattr_setprotocol+0x22><== NOT EXECUTED
46f98: 4a90 tstl %a0@ <== NOT EXECUTED
46f9a: 670e beqs 46faa <pthread_mutexattr_setprotocol+0x22><== NOT EXECUTED
return EINVAL;
switch ( protocol ) {
46f9c: 7202 moveq #2,%d1 <== NOT EXECUTED
46f9e: b280 cmpl %d0,%d1 <== NOT EXECUTED
46fa0: 6508 bcss 46faa <pthread_mutexattr_setprotocol+0x22><== NOT EXECUTED
case PTHREAD_PRIO_NONE:
case PTHREAD_PRIO_INHERIT:
case PTHREAD_PRIO_PROTECT:
attr->protocol = protocol;
46fa2: 2140 000c movel %d0,%a0@(12) <== NOT EXECUTED
return 0;
46fa6: 4280 clrl %d0 <== NOT EXECUTED
46fa8: 6002 bras 46fac <pthread_mutexattr_setprotocol+0x24><== NOT EXECUTED
default:
return EINVAL;
46faa: 7016 moveq #22,%d0 <== NOT EXECUTED
}
}
46fac: 4e5e unlk %fp <== NOT EXECUTED
00046fb0 <pthread_mutexattr_setpshared>:
int pthread_mutexattr_setpshared(
pthread_mutexattr_t *attr,
int pshared
)
{
46fb0: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
46fb4: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
46fb8: 202e 000c movel %fp@(12),%d0 <== NOT EXECUTED
if ( !attr || !attr->is_initialized )
46fbc: 4a88 tstl %a0 <== NOT EXECUTED
46fbe: 6712 beqs 46fd2 <pthread_mutexattr_setpshared+0x22><== NOT EXECUTED
46fc0: 4a90 tstl %a0@ <== NOT EXECUTED
46fc2: 670e beqs 46fd2 <pthread_mutexattr_setpshared+0x22><== NOT EXECUTED
return EINVAL;
switch ( pshared ) {
46fc4: 7201 moveq #1,%d1 <== NOT EXECUTED
46fc6: b280 cmpl %d0,%d1 <== NOT EXECUTED
46fc8: 6508 bcss 46fd2 <pthread_mutexattr_setpshared+0x22><== NOT EXECUTED
case PTHREAD_PROCESS_SHARED:
case PTHREAD_PROCESS_PRIVATE:
attr->process_shared = pshared;
46fca: 2140 0004 movel %d0,%a0@(4) <== NOT EXECUTED
return 0;
46fce: 4280 clrl %d0 <== NOT EXECUTED
46fd0: 6002 bras 46fd4 <pthread_mutexattr_setpshared+0x24><== NOT EXECUTED
default:
return EINVAL;
46fd2: 7016 moveq #22,%d0 <== NOT EXECUTED
}
}
46fd4: 4e5e unlk %fp <== NOT EXECUTED
00045274 <pthread_mutexattr_settype>:
#if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES)
int pthread_mutexattr_settype(
pthread_mutexattr_t *attr,
int type
)
{
45274: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
45278: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
4527c: 202e 000c movel %fp@(12),%d0 <== NOT EXECUTED
if ( !attr || !attr->is_initialized )
45280: 4a88 tstl %a0 <== NOT EXECUTED
45282: 6712 beqs 45296 <pthread_mutexattr_settype+0x22> <== NOT EXECUTED
45284: 4a90 tstl %a0@ <== NOT EXECUTED
45286: 670e beqs 45296 <pthread_mutexattr_settype+0x22> <== NOT EXECUTED
return EINVAL;
switch ( type ) {
45288: 7203 moveq #3,%d1 <== NOT EXECUTED
4528a: b280 cmpl %d0,%d1 <== NOT EXECUTED
4528c: 6508 bcss 45296 <pthread_mutexattr_settype+0x22> <== NOT EXECUTED
case PTHREAD_MUTEX_NORMAL:
case PTHREAD_MUTEX_RECURSIVE:
case PTHREAD_MUTEX_ERRORCHECK:
case PTHREAD_MUTEX_DEFAULT:
attr->type = type;
4528e: 2140 0010 movel %d0,%a0@(16) <== NOT EXECUTED
return 0;
45292: 4280 clrl %d0 <== NOT EXECUTED
45294: 6002 bras 45298 <pthread_mutexattr_settype+0x24> <== NOT EXECUTED
default:
return EINVAL;
45296: 7016 moveq #22,%d0 <== NOT EXECUTED
}
}
45298: 4e5e unlk %fp <== NOT EXECUTED
00045d10 <pthread_once>:
int pthread_once(
pthread_once_t *once_control,
void (*init_routine)(void)
)
{
45d10: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
45d14: 2f0b movel %a3,%sp@- <== NOT EXECUTED
45d16: 266e 000c moveal %fp@(12),%a3 <== NOT EXECUTED
45d1a: 2f0a movel %a2,%sp@- <== NOT EXECUTED
45d1c: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
if ( !once_control || !init_routine )
45d20: 4a8a tstl %a2 <== NOT EXECUTED
45d22: 674a beqs 45d6e <pthread_once+0x5e> <== NOT EXECUTED
45d24: 4a8b tstl %a3 <== NOT EXECUTED
45d26: 6746 beqs 45d6e <pthread_once+0x5e> <== NOT EXECUTED
return EINVAL;
if ( !once_control->init_executed ) {
45d28: 4aaa 0004 tstl %a2@(4) <== NOT EXECUTED
45d2c: 6644 bnes 45d72 <pthread_once+0x62> <== NOT EXECUTED
rtems_mode saveMode;
rtems_task_mode(RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &saveMode);
45d2e: 486e fffc pea %fp@(-4) <== NOT EXECUTED
45d32: 4878 0100 pea 100 <DBL_MANT_DIG+0xcb> <== NOT EXECUTED
45d36: 4878 0100 pea 100 <DBL_MANT_DIG+0xcb> <== NOT EXECUTED
45d3a: 4eb9 0004 6820 jsr 46820 <rtems_task_mode> <== NOT EXECUTED
if ( !once_control->init_executed ) {
45d40: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
45d44: 4aaa 0004 tstl %a2@(4) <== NOT EXECUTED
45d48: 660c bnes 45d56 <pthread_once+0x46> <== NOT EXECUTED
once_control->is_initialized = true;
45d4a: 7001 moveq #1,%d0 <== NOT EXECUTED
45d4c: 2480 movel %d0,%a2@ <== NOT EXECUTED
once_control->init_executed = true;
45d4e: 7001 moveq #1,%d0 <== NOT EXECUTED
45d50: 2540 0004 movel %d0,%a2@(4) <== NOT EXECUTED
(*init_routine)();
45d54: 4e93 jsr %a3@ <== NOT EXECUTED
}
rtems_task_mode(saveMode, RTEMS_PREEMPT_MASK, &saveMode);
45d56: 486e fffc pea %fp@(-4) <== NOT EXECUTED
45d5a: 4878 0100 pea 100 <DBL_MANT_DIG+0xcb> <== NOT EXECUTED
45d5e: 2f2e fffc movel %fp@(-4),%sp@- <== NOT EXECUTED
45d62: 4eb9 0004 6820 jsr 46820 <rtems_task_mode> <== NOT EXECUTED
45d68: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
45d6c: 6004 bras 45d72 <pthread_once+0x62> <== NOT EXECUTED
pthread_once_t *once_control,
void (*init_routine)(void)
)
{
if ( !once_control || !init_routine )
return EINVAL;
45d6e: 7016 moveq #22,%d0 <== NOT EXECUTED
45d70: 6002 bras 45d74 <pthread_once+0x64> <== NOT EXECUTED
once_control->init_executed = true;
(*init_routine)();
}
rtems_task_mode(saveMode, RTEMS_PREEMPT_MASK, &saveMode);
}
return 0;
45d72: 4280 clrl %d0 <== NOT EXECUTED
}
45d74: 246e fff4 moveal %fp@(-12),%a2 <== NOT EXECUTED
45d78: 266e fff8 moveal %fp@(-8),%a3 <== NOT EXECUTED
45d7c: 4e5e unlk %fp <== NOT EXECUTED
0004646c <pthread_rwlock_destroy>:
*/
int pthread_rwlock_destroy(
pthread_rwlock_t *rwlock
)
{
4646c: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
46470: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
46474: 2f0b movel %a3,%sp@- <== NOT EXECUTED
46476: 2f0a movel %a2,%sp@- <== NOT EXECUTED
POSIX_RWLock_Control *the_rwlock = NULL;
Objects_Locations location;
if ( !rwlock )
46478: 4a88 tstl %a0 <== NOT EXECUTED
4647a: 6760 beqs 464dc <pthread_rwlock_destroy+0x70> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE POSIX_RWLock_Control *_POSIX_RWLock_Get (
pthread_rwlock_t *RWLock,
Objects_Locations *location
)
{
return (POSIX_RWLock_Control *) _Objects_Get(
4647c: 486e fffc pea %fp@(-4) <== NOT EXECUTED
46480: 2f10 movel %a0@,%sp@- <== NOT EXECUTED
46482: 4879 0006 08f8 pea 608f8 <_POSIX_RWLock_Information> <== NOT EXECUTED
46488: 4eb9 0004 8d90 jsr 48d90 <_Objects_Get> <== NOT EXECUTED
return EINVAL;
the_rwlock = _POSIX_RWLock_Get( rwlock, &location );
switch ( location ) {
4648e: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
46492: 2440 moveal %d0,%a2 <== NOT EXECUTED
46494: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
46498: 6642 bnes 464dc <pthread_rwlock_destroy+0x70> <== NOT EXECUTED
case OBJECTS_LOCAL:
/*
* If there is at least one thread waiting, then do not delete it.
*/
if ( _Thread_queue_First( &the_rwlock->RWLock.Wait_queue ) != NULL ) {
4649a: 486a 0010 pea %a2@(16) <== NOT EXECUTED
4649e: 47f9 0004 97f6 lea 497f6 <_Thread_Enable_dispatch>,%a3 <== NOT EXECUTED
464a4: 4eb9 0004 9f6c jsr 49f6c <_Thread_queue_First> <== NOT EXECUTED
464aa: 588f addql #4,%sp <== NOT EXECUTED
464ac: 4a80 tstl %d0 <== NOT EXECUTED
464ae: 6706 beqs 464b6 <pthread_rwlock_destroy+0x4a> <== NOT EXECUTED
_Thread_Enable_dispatch();
464b0: 4e93 jsr %a3@ <== NOT EXECUTED
return EBUSY;
464b2: 7010 moveq #16,%d0 <== NOT EXECUTED
464b4: 6028 bras 464de <pthread_rwlock_destroy+0x72> <== NOT EXECUTED
/*
* POSIX doesn't require behavior when it is locked.
*/
_Objects_Close( &_POSIX_RWLock_Information, &the_rwlock->Object );
464b6: 2f0a movel %a2,%sp@- <== NOT EXECUTED
464b8: 4879 0006 08f8 pea 608f8 <_POSIX_RWLock_Information> <== NOT EXECUTED
464be: 4eb9 0004 89b4 jsr 489b4 <_Objects_Close> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _POSIX_RWLock_Free (
POSIX_RWLock_Control *the_RWLock
)
{
_Objects_Free( &_POSIX_RWLock_Information, &the_RWLock->Object );
464c4: 2f0a movel %a2,%sp@- <== NOT EXECUTED
464c6: 4879 0006 08f8 pea 608f8 <_POSIX_RWLock_Information> <== NOT EXECUTED
464cc: 4eb9 0004 8c2c jsr 48c2c <_Objects_Free> <== NOT EXECUTED
_POSIX_RWLock_Free( the_rwlock );
_Thread_Enable_dispatch();
464d2: 4e93 jsr %a3@ <== NOT EXECUTED
return 0;
464d4: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
464d8: 4280 clrl %d0 <== NOT EXECUTED
464da: 6002 bras 464de <pthread_rwlock_destroy+0x72> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
464dc: 7016 moveq #22,%d0 <== NOT EXECUTED
}
464de: 246e fff4 moveal %fp@(-12),%a2 <== NOT EXECUTED
464e2: 266e fff8 moveal %fp@(-8),%a3 <== NOT EXECUTED
464e6: 4e5e unlk %fp <== NOT EXECUTED
...
000464ec <pthread_rwlock_init>:
int pthread_rwlock_init(
pthread_rwlock_t *rwlock,
const pthread_rwlockattr_t *attr
)
{
464ec: 4e56 ffe4 linkw %fp,#-28 <== NOT EXECUTED
464f0: 206e 000c moveal %fp@(12),%a0 <== NOT EXECUTED
464f4: 48d7 1c04 moveml %d2/%a2-%a4,%sp@ <== NOT EXECUTED
464f8: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
const pthread_rwlockattr_t *the_attr;
/*
* Error check parameters
*/
if ( !rwlock )
464fc: 4a8a tstl %a2 <== NOT EXECUTED
464fe: 6700 0084 beqw 46584 <pthread_rwlock_init+0x98> <== NOT EXECUTED
return EINVAL;
/*
* If the user passed in NULL, use the default attributes
*/
if ( attr ) {
46502: 4a88 tstl %a0 <== NOT EXECUTED
46504: 6614 bnes 4651a <pthread_rwlock_init+0x2e> <== NOT EXECUTED
the_attr = attr;
} else {
(void) pthread_rwlockattr_init( &default_attr );
46506: 240e movel %fp,%d2 <== NOT EXECUTED
46508: 0682 ffff fff4 addil #-12,%d2 <== NOT EXECUTED
4650e: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46510: 4eb9 0004 6e08 jsr 46e08 <pthread_rwlockattr_init> <== NOT EXECUTED
46516: 588f addql #4,%sp <== NOT EXECUTED
the_attr = &default_attr;
46518: 2042 moveal %d2,%a0 <== NOT EXECUTED
}
/*
* Now start error checking the attributes that we are going to use
*/
if ( !the_attr->is_initialized )
4651a: 4a90 tstl %a0@ <== NOT EXECUTED
4651c: 6766 beqs 46584 <pthread_rwlock_init+0x98> <== NOT EXECUTED
return EINVAL;
switch ( the_attr->process_shared ) {
4651e: 4aa8 0004 tstl %a0@(4) <== NOT EXECUTED
46522: 6660 bnes 46584 <pthread_rwlock_init+0x98> <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
46524: 2039 0006 076c movel 6076c <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
4652a: 5280 addql #1,%d0 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _CORE_RWLock_Initialize_attributes(
CORE_RWLock_Attributes *the_attributes
)
{
the_attributes->XXX = 0;
4652c: 42ae fffc clrl %fp@(-4) <== NOT EXECUTED
46530: 23c0 0006 076c movel %d0,6076c <_Thread_Dispatch_disable_level><== NOT EXECUTED
* the inactive chain of free RWLock control blocks.
*/
RTEMS_INLINE_ROUTINE POSIX_RWLock_Control *_POSIX_RWLock_Allocate( void )
{
return (POSIX_RWLock_Control *)
_Objects_Allocate( &_POSIX_RWLock_Information );
46536: 4879 0006 08f8 pea 608f8 <_POSIX_RWLock_Information> <== NOT EXECUTED
4653c: 49f9 0004 97f6 lea 497f6 <_Thread_Enable_dispatch>,%a4 <== NOT EXECUTED
46542: 4eb9 0004 8938 jsr 48938 <_Objects_Allocate> <== NOT EXECUTED
*/
_Thread_Disable_dispatch(); /* prevents deletion */
the_rwlock = _POSIX_RWLock_Allocate();
if ( !the_rwlock ) {
46548: 588f addql #4,%sp <== NOT EXECUTED
4654a: 2640 moveal %d0,%a3 <== NOT EXECUTED
4654c: 4a80 tstl %d0 <== NOT EXECUTED
4654e: 6606 bnes 46556 <pthread_rwlock_init+0x6a> <== NOT EXECUTED
_Thread_Enable_dispatch();
46550: 4e94 jsr %a4@ <== NOT EXECUTED
return EAGAIN;
46552: 700b moveq #11,%d0 <== NOT EXECUTED
46554: 6030 bras 46586 <pthread_rwlock_init+0x9a> <== NOT EXECUTED
}
_CORE_RWLock_Initialize( &the_rwlock->RWLock, &the_attributes );
46556: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4655a: 486b 0010 pea %a3@(16) <== NOT EXECUTED
4655e: 4eb9 0004 812c jsr 4812c <_CORE_RWLock_Initialize> <== NOT EXECUTED
uint32_t name
)
{
_Objects_Set_local_object(
information,
_Objects_Get_index( the_object->id ),
46564: 202b 0008 movel %a3@(8),%d0 <== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
uint32_t name
)
{
_Objects_Set_local_object(
46568: 4281 clrl %d1 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
4656a: 2079 0006 0910 moveal 60910 <_POSIX_RWLock_Information+0x18>,%a0<== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
uint32_t name
)
{
_Objects_Set_local_object(
46570: 3200 movew %d0,%d1 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
46572: 218b 1c00 movel %a3,%a0@(00000000,%d1:l:4) <== NOT EXECUTED
_Objects_Get_index( the_object->id ),
the_object
);
/* ASSERT: information->is_string == false */
the_object->name.name_u32 = name;
46576: 42ab 000c clrl %a3@(12) <== NOT EXECUTED
&_POSIX_RWLock_Information,
&the_rwlock->Object,
0
);
*rwlock = the_rwlock->Object.id;
4657a: 2480 movel %d0,%a2@ <== NOT EXECUTED
_Thread_Enable_dispatch();
4657c: 4e94 jsr %a4@ <== NOT EXECUTED
return 0;
4657e: 508f addql #8,%sp <== NOT EXECUTED
46580: 4280 clrl %d0 <== NOT EXECUTED
46582: 6002 bras 46586 <pthread_rwlock_init+0x9a> <== NOT EXECUTED
switch ( the_attr->process_shared ) {
case PTHREAD_PROCESS_PRIVATE: /* only supported values */
break;
case PTHREAD_PROCESS_SHARED:
default:
return EINVAL;
46584: 7016 moveq #22,%d0 <== NOT EXECUTED
*rwlock = the_rwlock->Object.id;
_Thread_Enable_dispatch();
return 0;
}
46586: 4cee 1c04 ffe4 moveml %fp@(-28),%d2/%a2-%a4 <== NOT EXECUTED
4658c: 4e5e unlk %fp <== NOT EXECUTED
00046590 <pthread_rwlock_rdlock>:
*/
int pthread_rwlock_rdlock(
pthread_rwlock_t *rwlock
)
{
46590: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
46594: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46596: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
POSIX_RWLock_Control *the_rwlock;
Objects_Locations location;
if ( !rwlock )
4659a: 4a8a tstl %a2 <== NOT EXECUTED
4659c: 674e beqs 465ec <pthread_rwlock_rdlock+0x5c> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE POSIX_RWLock_Control *_POSIX_RWLock_Get (
pthread_rwlock_t *RWLock,
Objects_Locations *location
)
{
return (POSIX_RWLock_Control *) _Objects_Get(
4659e: 486e fffc pea %fp@(-4) <== NOT EXECUTED
465a2: 2f12 movel %a2@,%sp@- <== NOT EXECUTED
465a4: 4879 0006 08f8 pea 608f8 <_POSIX_RWLock_Information> <== NOT EXECUTED
465aa: 4eb9 0004 8d90 jsr 48d90 <_Objects_Get> <== NOT EXECUTED
return EINVAL;
the_rwlock = _POSIX_RWLock_Get( rwlock, &location );
switch ( location ) {
465b0: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
465b4: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
465b8: 6632 bnes 465ec <pthread_rwlock_rdlock+0x5c> <== NOT EXECUTED
case OBJECTS_LOCAL:
_CORE_RWLock_Obtain_for_reading(
465ba: 42a7 clrl %sp@- <== NOT EXECUTED
465bc: 2040 moveal %d0,%a0 <== NOT EXECUTED
465be: 42a7 clrl %sp@- <== NOT EXECUTED
465c0: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
465c4: 2f12 movel %a2@,%sp@- <== NOT EXECUTED
465c6: 4868 0010 pea %a0@(16) <== NOT EXECUTED
465ca: 4eb9 0004 8160 jsr 48160 <_CORE_RWLock_Obtain_for_reading> <== NOT EXECUTED
true, /* we are willing to wait forever */
0,
NULL
);
_Thread_Enable_dispatch();
465d0: 4eb9 0004 97f6 jsr 497f6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return _POSIX_RWLock_Translate_core_RWLock_return_code(
(CORE_RWLock_Status) _Thread_Executing->Wait.return_code
465d6: 2079 0006 0bfa moveal 60bfa <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
0,
NULL
);
_Thread_Enable_dispatch();
return _POSIX_RWLock_Translate_core_RWLock_return_code(
465dc: 2f28 0034 movel %a0@(52),%sp@- <== NOT EXECUTED
465e0: 4eb9 0004 6750 jsr 46750 <_POSIX_RWLock_Translate_core_RWLock_return_code><== NOT EXECUTED
465e6: 4fef 0018 lea %sp@(24),%sp <== NOT EXECUTED
465ea: 6002 bras 465ee <pthread_rwlock_rdlock+0x5e> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
465ec: 7016 moveq #22,%d0 <== NOT EXECUTED
}
465ee: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
465f2: 4e5e unlk %fp <== NOT EXECUTED
...
000465f8 <pthread_rwlock_timedrdlock>:
int pthread_rwlock_timedrdlock(
pthread_rwlock_t *rwlock,
const struct timespec *abstime
)
{
465f8: 4e56 ffec linkw %fp,#-20 <== NOT EXECUTED
465fc: 48d7 040c moveml %d2-%d3/%a2,%sp@ <== NOT EXECUTED
46600: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
Objects_Locations location;
Watchdog_Interval ticks;
bool do_wait = true;
POSIX_Absolute_timeout_conversion_results_t status;
if ( !rwlock )
46604: 4a8a tstl %a2 <== NOT EXECUTED
46606: 6700 008c beqw 46694 <pthread_rwlock_timedrdlock+0x9c><== NOT EXECUTED
*
* If the status is POSIX_ABSOLUTE_TIMEOUT_INVALID,
* POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST, or POSIX_ABSOLUTE_TIMEOUT_IS_NOW,
* then we should not wait.
*/
status = _POSIX_Absolute_timeout_to_ticks( abstime, &ticks );
4660a: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
4660e: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
46612: 4eb9 0004 c1e8 jsr 4c1e8 <_POSIX_Absolute_timeout_to_ticks><== NOT EXECUTED
46618: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4661c: 2400 movel %d0,%d2 <== NOT EXECUTED
4661e: 2f12 movel %a2@,%sp@- <== NOT EXECUTED
46620: 4879 0006 08f8 pea 608f8 <_POSIX_RWLock_Information> <== NOT EXECUTED
46626: 4eb9 0004 8d90 jsr 48d90 <_Objects_Get> <== NOT EXECUTED
if ( status != POSIX_ABSOLUTE_TIMEOUT_IS_IN_FUTURE )
do_wait = false;
the_rwlock = _POSIX_RWLock_Get( rwlock, &location );
switch ( location ) {
4662c: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
46630: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
46634: 665e bnes 46694 <pthread_rwlock_timedrdlock+0x9c><== NOT EXECUTED
int _EXFUN(pthread_rwlock_init,
(pthread_rwlock_t *__rwlock, _CONST pthread_rwlockattr_t *__attr));
int _EXFUN(pthread_rwlock_destroy, (pthread_rwlock_t *__rwlock));
int _EXFUN(pthread_rwlock_rdlock,(pthread_rwlock_t *__rwlock));
int _EXFUN(pthread_rwlock_tryrdlock,(pthread_rwlock_t *__rwlock));
int _EXFUN(pthread_rwlock_timedrdlock,
46636: 7203 moveq #3,%d1 <== NOT EXECUTED
46638: b282 cmpl %d2,%d1 <== NOT EXECUTED
4663a: 57c3 seq %d3 <== NOT EXECUTED
case OBJECTS_LOCAL:
_CORE_RWLock_Obtain_for_reading(
4663c: 42a7 clrl %sp@- <== NOT EXECUTED
4663e: 2f2e fff8 movel %fp@(-8),%sp@- <== NOT EXECUTED
46642: 4483 negl %d3 <== NOT EXECUTED
46644: 4281 clrl %d1 <== NOT EXECUTED
46646: 1203 moveb %d3,%d1 <== NOT EXECUTED
46648: 2040 moveal %d0,%a0 <== NOT EXECUTED
4664a: 2f01 movel %d1,%sp@- <== NOT EXECUTED
4664c: 2f12 movel %a2@,%sp@- <== NOT EXECUTED
4664e: 4868 0010 pea %a0@(16) <== NOT EXECUTED
46652: 4eb9 0004 8160 jsr 48160 <_CORE_RWLock_Obtain_for_reading> <== NOT EXECUTED
do_wait,
ticks,
NULL
);
_Thread_Enable_dispatch();
46658: 4eb9 0004 97f6 jsr 497f6 <_Thread_Enable_dispatch> <== NOT EXECUTED
if ( !do_wait ) {
4665e: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
46662: 4a03 tstb %d3 <== NOT EXECUTED
46664: 661a bnes 46680 <pthread_rwlock_timedrdlock+0x88><== NOT EXECUTED
if ( _Thread_Executing->Wait.return_code == CORE_RWLOCK_UNAVAILABLE ) {
46666: 2079 0006 0bfa moveal 60bfa <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
4666c: 7002 moveq #2,%d0 <== NOT EXECUTED
4666e: b0a8 0034 cmpl %a0@(52),%d0 <== NOT EXECUTED
46672: 660c bnes 46680 <pthread_rwlock_timedrdlock+0x88><== NOT EXECUTED
if ( status == POSIX_ABSOLUTE_TIMEOUT_INVALID )
46674: 4a82 tstl %d2 <== NOT EXECUTED
46676: 671c beqs 46694 <pthread_rwlock_timedrdlock+0x9c><== NOT EXECUTED
return EINVAL;
if ( status == POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST ||
46678: 5382 subql #1,%d2 <== NOT EXECUTED
4667a: 7201 moveq #1,%d1 <== NOT EXECUTED
4667c: b282 cmpl %d2,%d1 <== NOT EXECUTED
4667e: 6418 bccs 46698 <pthread_rwlock_timedrdlock+0xa0><== NOT EXECUTED
return ETIMEDOUT;
}
}
return _POSIX_RWLock_Translate_core_RWLock_return_code(
(CORE_RWLock_Status) _Thread_Executing->Wait.return_code
46680: 2079 0006 0bfa moveal 60bfa <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
status == POSIX_ABSOLUTE_TIMEOUT_IS_NOW )
return ETIMEDOUT;
}
}
return _POSIX_RWLock_Translate_core_RWLock_return_code(
46686: 2f28 0034 movel %a0@(52),%sp@- <== NOT EXECUTED
4668a: 4eb9 0004 6750 jsr 46750 <_POSIX_RWLock_Translate_core_RWLock_return_code><== NOT EXECUTED
46690: 588f addql #4,%sp <== NOT EXECUTED
46692: 6006 bras 4669a <pthread_rwlock_timedrdlock+0xa2><== NOT EXECUTED
_Thread_Enable_dispatch();
if ( !do_wait ) {
if ( _Thread_Executing->Wait.return_code == CORE_RWLOCK_UNAVAILABLE ) {
if ( status == POSIX_ABSOLUTE_TIMEOUT_INVALID )
return EINVAL;
46694: 7016 moveq #22,%d0 <== NOT EXECUTED
46696: 6002 bras 4669a <pthread_rwlock_timedrdlock+0xa2><== NOT EXECUTED
if ( status == POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST ||
status == POSIX_ABSOLUTE_TIMEOUT_IS_NOW )
return ETIMEDOUT;
46698: 7074 moveq #116,%d0 <== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
return EINVAL;
}
4669a: 4cee 040c ffec moveml %fp@(-20),%d2-%d3/%a2 <== NOT EXECUTED
466a0: 4e5e unlk %fp <== NOT EXECUTED
000466a4 <pthread_rwlock_timedwrlock>:
int pthread_rwlock_timedwrlock(
pthread_rwlock_t *rwlock,
const struct timespec *abstime
)
{
466a4: 4e56 ffec linkw %fp,#-20 <== NOT EXECUTED
466a8: 48d7 040c moveml %d2-%d3/%a2,%sp@ <== NOT EXECUTED
466ac: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
Objects_Locations location;
Watchdog_Interval ticks;
bool do_wait = true;
POSIX_Absolute_timeout_conversion_results_t status;
if ( !rwlock )
466b0: 4a8a tstl %a2 <== NOT EXECUTED
466b2: 6700 008c beqw 46740 <pthread_rwlock_timedwrlock+0x9c><== NOT EXECUTED
*
* If the status is POSIX_ABSOLUTE_TIMEOUT_INVALID,
* POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST, or POSIX_ABSOLUTE_TIMEOUT_IS_NOW,
* then we should not wait.
*/
status = _POSIX_Absolute_timeout_to_ticks( abstime, &ticks );
466b6: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
466ba: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
466be: 4eb9 0004 c1e8 jsr 4c1e8 <_POSIX_Absolute_timeout_to_ticks><== NOT EXECUTED
466c4: 486e fffc pea %fp@(-4) <== NOT EXECUTED
466c8: 2400 movel %d0,%d2 <== NOT EXECUTED
466ca: 2f12 movel %a2@,%sp@- <== NOT EXECUTED
466cc: 4879 0006 08f8 pea 608f8 <_POSIX_RWLock_Information> <== NOT EXECUTED
466d2: 4eb9 0004 8d90 jsr 48d90 <_Objects_Get> <== NOT EXECUTED
if ( status != POSIX_ABSOLUTE_TIMEOUT_IS_IN_FUTURE )
do_wait = false;
the_rwlock = _POSIX_RWLock_Get( rwlock, &location );
switch ( location ) {
466d8: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
466dc: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
466e0: 665e bnes 46740 <pthread_rwlock_timedwrlock+0x9c><== NOT EXECUTED
(pthread_rwlock_t *__rwlock, _CONST struct timespec *__abstime));
int _EXFUN(pthread_rwlock_unlock,(pthread_rwlock_t *__rwlock));
int _EXFUN(pthread_rwlock_wrlock,(pthread_rwlock_t *__rwlock));
int _EXFUN(pthread_rwlock_trywrlock,(pthread_rwlock_t *__rwlock));
int _EXFUN(pthread_rwlock_timedwrlock,
466e2: 7203 moveq #3,%d1 <== NOT EXECUTED
466e4: b282 cmpl %d2,%d1 <== NOT EXECUTED
466e6: 57c3 seq %d3 <== NOT EXECUTED
case OBJECTS_LOCAL:
_CORE_RWLock_Obtain_for_writing(
466e8: 42a7 clrl %sp@- <== NOT EXECUTED
466ea: 2f2e fff8 movel %fp@(-8),%sp@- <== NOT EXECUTED
466ee: 4483 negl %d3 <== NOT EXECUTED
466f0: 4281 clrl %d1 <== NOT EXECUTED
466f2: 1203 moveb %d3,%d1 <== NOT EXECUTED
466f4: 2040 moveal %d0,%a0 <== NOT EXECUTED
466f6: 2f01 movel %d1,%sp@- <== NOT EXECUTED
466f8: 2f12 movel %a2@,%sp@- <== NOT EXECUTED
466fa: 4868 0010 pea %a0@(16) <== NOT EXECUTED
466fe: 4eb9 0004 8210 jsr 48210 <_CORE_RWLock_Obtain_for_writing> <== NOT EXECUTED
do_wait,
ticks,
NULL
);
_Thread_Enable_dispatch();
46704: 4eb9 0004 97f6 jsr 497f6 <_Thread_Enable_dispatch> <== NOT EXECUTED
if ( !do_wait &&
4670a: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
4670e: 4a03 tstb %d3 <== NOT EXECUTED
46710: 661a bnes 4672c <pthread_rwlock_timedwrlock+0x88><== NOT EXECUTED
(_Thread_Executing->Wait.return_code == CORE_RWLOCK_UNAVAILABLE) ) {
46712: 2079 0006 0bfa moveal 60bfa <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
ticks,
NULL
);
_Thread_Enable_dispatch();
if ( !do_wait &&
46718: 7002 moveq #2,%d0 <== NOT EXECUTED
4671a: b0a8 0034 cmpl %a0@(52),%d0 <== NOT EXECUTED
4671e: 660c bnes 4672c <pthread_rwlock_timedwrlock+0x88><== NOT EXECUTED
(_Thread_Executing->Wait.return_code == CORE_RWLOCK_UNAVAILABLE) ) {
if ( status == POSIX_ABSOLUTE_TIMEOUT_INVALID )
46720: 4a82 tstl %d2 <== NOT EXECUTED
46722: 671c beqs 46740 <pthread_rwlock_timedwrlock+0x9c><== NOT EXECUTED
return EINVAL;
if ( status == POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST ||
46724: 5382 subql #1,%d2 <== NOT EXECUTED
46726: 7201 moveq #1,%d1 <== NOT EXECUTED
46728: b282 cmpl %d2,%d1 <== NOT EXECUTED
4672a: 6418 bccs 46744 <pthread_rwlock_timedwrlock+0xa0><== NOT EXECUTED
status == POSIX_ABSOLUTE_TIMEOUT_IS_NOW )
return ETIMEDOUT;
}
return _POSIX_RWLock_Translate_core_RWLock_return_code(
(CORE_RWLock_Status) _Thread_Executing->Wait.return_code
4672c: 2079 0006 0bfa moveal 60bfa <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
if ( status == POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST ||
status == POSIX_ABSOLUTE_TIMEOUT_IS_NOW )
return ETIMEDOUT;
}
return _POSIX_RWLock_Translate_core_RWLock_return_code(
46732: 2f28 0034 movel %a0@(52),%sp@- <== NOT EXECUTED
46736: 4eb9 0004 6750 jsr 46750 <_POSIX_RWLock_Translate_core_RWLock_return_code><== NOT EXECUTED
4673c: 588f addql #4,%sp <== NOT EXECUTED
4673e: 6006 bras 46746 <pthread_rwlock_timedwrlock+0xa2><== NOT EXECUTED
_Thread_Enable_dispatch();
if ( !do_wait &&
(_Thread_Executing->Wait.return_code == CORE_RWLOCK_UNAVAILABLE) ) {
if ( status == POSIX_ABSOLUTE_TIMEOUT_INVALID )
return EINVAL;
46740: 7016 moveq #22,%d0 <== NOT EXECUTED
46742: 6002 bras 46746 <pthread_rwlock_timedwrlock+0xa2><== NOT EXECUTED
if ( status == POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST ||
status == POSIX_ABSOLUTE_TIMEOUT_IS_NOW )
return ETIMEDOUT;
46744: 7074 moveq #116,%d0 <== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
return EINVAL;
}
46746: 4cee 040c ffec moveml %fp@(-20),%d2-%d3/%a2 <== NOT EXECUTED
4674c: 4e5e unlk %fp <== NOT EXECUTED
00046768 <pthread_rwlock_tryrdlock>:
*/
int pthread_rwlock_tryrdlock(
pthread_rwlock_t *rwlock
)
{
46768: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
4676c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4676e: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
POSIX_RWLock_Control *the_rwlock;
Objects_Locations location;
if ( !rwlock )
46772: 4a8a tstl %a2 <== NOT EXECUTED
46774: 674c beqs 467c2 <pthread_rwlock_tryrdlock+0x5a> <== NOT EXECUTED
46776: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4677a: 2f12 movel %a2@,%sp@- <== NOT EXECUTED
4677c: 4879 0006 08f8 pea 608f8 <_POSIX_RWLock_Information> <== NOT EXECUTED
46782: 4eb9 0004 8d90 jsr 48d90 <_Objects_Get> <== NOT EXECUTED
return EINVAL;
the_rwlock = _POSIX_RWLock_Get( rwlock, &location );
switch ( location ) {
46788: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4678c: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
46790: 6630 bnes 467c2 <pthread_rwlock_tryrdlock+0x5a> <== NOT EXECUTED
case OBJECTS_LOCAL:
_CORE_RWLock_Obtain_for_reading(
46792: 42a7 clrl %sp@- <== NOT EXECUTED
46794: 2040 moveal %d0,%a0 <== NOT EXECUTED
46796: 42a7 clrl %sp@- <== NOT EXECUTED
46798: 42a7 clrl %sp@- <== NOT EXECUTED
4679a: 2f12 movel %a2@,%sp@- <== NOT EXECUTED
4679c: 4868 0010 pea %a0@(16) <== NOT EXECUTED
467a0: 4eb9 0004 8160 jsr 48160 <_CORE_RWLock_Obtain_for_reading> <== NOT EXECUTED
0,
NULL
);
_Thread_Enable_dispatch();
467a6: 4eb9 0004 97f6 jsr 497f6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return _POSIX_RWLock_Translate_core_RWLock_return_code(
(CORE_RWLock_Status) _Thread_Executing->Wait.return_code
467ac: 2079 0006 0bfa moveal 60bfa <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
NULL
);
_Thread_Enable_dispatch();
return _POSIX_RWLock_Translate_core_RWLock_return_code(
467b2: 2f28 0034 movel %a0@(52),%sp@- <== NOT EXECUTED
467b6: 4eb9 0004 6750 jsr 46750 <_POSIX_RWLock_Translate_core_RWLock_return_code><== NOT EXECUTED
467bc: 4fef 0018 lea %sp@(24),%sp <== NOT EXECUTED
467c0: 6002 bras 467c4 <pthread_rwlock_tryrdlock+0x5c> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
467c2: 7016 moveq #22,%d0 <== NOT EXECUTED
}
467c4: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
467c8: 4e5e unlk %fp <== NOT EXECUTED
000467cc <pthread_rwlock_trywrlock>:
*/
int pthread_rwlock_trywrlock(
pthread_rwlock_t *rwlock
)
{
467cc: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
467d0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
467d2: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
POSIX_RWLock_Control *the_rwlock;
Objects_Locations location;
if ( !rwlock )
467d6: 4a8a tstl %a2 <== NOT EXECUTED
467d8: 674c beqs 46826 <pthread_rwlock_trywrlock+0x5a> <== NOT EXECUTED
467da: 486e fffc pea %fp@(-4) <== NOT EXECUTED
467de: 2f12 movel %a2@,%sp@- <== NOT EXECUTED
467e0: 4879 0006 08f8 pea 608f8 <_POSIX_RWLock_Information> <== NOT EXECUTED
467e6: 4eb9 0004 8d90 jsr 48d90 <_Objects_Get> <== NOT EXECUTED
return EINVAL;
the_rwlock = _POSIX_RWLock_Get( rwlock, &location );
switch ( location ) {
467ec: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
467f0: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
467f4: 6630 bnes 46826 <pthread_rwlock_trywrlock+0x5a> <== NOT EXECUTED
case OBJECTS_LOCAL:
_CORE_RWLock_Obtain_for_writing(
467f6: 42a7 clrl %sp@- <== NOT EXECUTED
467f8: 2040 moveal %d0,%a0 <== NOT EXECUTED
467fa: 42a7 clrl %sp@- <== NOT EXECUTED
467fc: 42a7 clrl %sp@- <== NOT EXECUTED
467fe: 2f12 movel %a2@,%sp@- <== NOT EXECUTED
46800: 4868 0010 pea %a0@(16) <== NOT EXECUTED
46804: 4eb9 0004 8210 jsr 48210 <_CORE_RWLock_Obtain_for_writing> <== NOT EXECUTED
false, /* we are not willing to wait */
0,
NULL
);
_Thread_Enable_dispatch();
4680a: 4eb9 0004 97f6 jsr 497f6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return _POSIX_RWLock_Translate_core_RWLock_return_code(
(CORE_RWLock_Status) _Thread_Executing->Wait.return_code
46810: 2079 0006 0bfa moveal 60bfa <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
0,
NULL
);
_Thread_Enable_dispatch();
return _POSIX_RWLock_Translate_core_RWLock_return_code(
46816: 2f28 0034 movel %a0@(52),%sp@- <== NOT EXECUTED
4681a: 4eb9 0004 6750 jsr 46750 <_POSIX_RWLock_Translate_core_RWLock_return_code><== NOT EXECUTED
46820: 4fef 0018 lea %sp@(24),%sp <== NOT EXECUTED
46824: 6002 bras 46828 <pthread_rwlock_trywrlock+0x5c> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
46826: 7016 moveq #22,%d0 <== NOT EXECUTED
}
46828: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
4682c: 4e5e unlk %fp <== NOT EXECUTED
00046830 <pthread_rwlock_unlock>:
*/
int pthread_rwlock_unlock(
pthread_rwlock_t *rwlock
)
{
46830: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
46834: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
46838: 2f02 movel %d2,%sp@- <== NOT EXECUTED
POSIX_RWLock_Control *the_rwlock;
Objects_Locations location;
CORE_RWLock_Status status;
if ( !rwlock )
4683a: 4a88 tstl %a0 <== NOT EXECUTED
4683c: 673c beqs 4687a <pthread_rwlock_unlock+0x4a> <== NOT EXECUTED
4683e: 486e fffc pea %fp@(-4) <== NOT EXECUTED
46842: 2f10 movel %a0@,%sp@- <== NOT EXECUTED
46844: 4879 0006 08f8 pea 608f8 <_POSIX_RWLock_Information> <== NOT EXECUTED
4684a: 4eb9 0004 8d90 jsr 48d90 <_Objects_Get> <== NOT EXECUTED
return EINVAL;
the_rwlock = _POSIX_RWLock_Get( rwlock, &location );
switch ( location ) {
46850: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
46854: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
46858: 6620 bnes 4687a <pthread_rwlock_unlock+0x4a> <== NOT EXECUTED
case OBJECTS_LOCAL:
status = _CORE_RWLock_Release( &the_rwlock->RWLock );
4685a: 2040 moveal %d0,%a0 <== NOT EXECUTED
4685c: 4868 0010 pea %a0@(16) <== NOT EXECUTED
46860: 4eb9 0004 829c jsr 4829c <_CORE_RWLock_Release> <== NOT EXECUTED
46866: 2400 movel %d0,%d2 <== NOT EXECUTED
_Thread_Enable_dispatch();
46868: 4eb9 0004 97f6 jsr 497f6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return _POSIX_RWLock_Translate_core_RWLock_return_code( status );
4686e: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46870: 4eb9 0004 6750 jsr 46750 <_POSIX_RWLock_Translate_core_RWLock_return_code><== NOT EXECUTED
46876: 508f addql #8,%sp <== NOT EXECUTED
46878: 6002 bras 4687c <pthread_rwlock_unlock+0x4c> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
4687a: 7016 moveq #22,%d0 <== NOT EXECUTED
}
4687c: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
46880: 4e5e unlk %fp <== NOT EXECUTED
00046884 <pthread_rwlock_wrlock>:
*/
int pthread_rwlock_wrlock(
pthread_rwlock_t *rwlock
)
{
46884: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
46888: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4688a: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
POSIX_RWLock_Control *the_rwlock;
Objects_Locations location;
if ( !rwlock )
4688e: 4a8a tstl %a2 <== NOT EXECUTED
46890: 674e beqs 468e0 <pthread_rwlock_wrlock+0x5c> <== NOT EXECUTED
46892: 486e fffc pea %fp@(-4) <== NOT EXECUTED
46896: 2f12 movel %a2@,%sp@- <== NOT EXECUTED
46898: 4879 0006 08f8 pea 608f8 <_POSIX_RWLock_Information> <== NOT EXECUTED
4689e: 4eb9 0004 8d90 jsr 48d90 <_Objects_Get> <== NOT EXECUTED
return EINVAL;
the_rwlock = _POSIX_RWLock_Get( rwlock, &location );
switch ( location ) {
468a4: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
468a8: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
468ac: 6632 bnes 468e0 <pthread_rwlock_wrlock+0x5c> <== NOT EXECUTED
case OBJECTS_LOCAL:
_CORE_RWLock_Obtain_for_writing(
468ae: 42a7 clrl %sp@- <== NOT EXECUTED
468b0: 2040 moveal %d0,%a0 <== NOT EXECUTED
468b2: 42a7 clrl %sp@- <== NOT EXECUTED
468b4: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
468b8: 2f12 movel %a2@,%sp@- <== NOT EXECUTED
468ba: 4868 0010 pea %a0@(16) <== NOT EXECUTED
468be: 4eb9 0004 8210 jsr 48210 <_CORE_RWLock_Obtain_for_writing> <== NOT EXECUTED
true, /* do not timeout -- wait forever */
0,
NULL
);
_Thread_Enable_dispatch();
468c4: 4eb9 0004 97f6 jsr 497f6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return _POSIX_RWLock_Translate_core_RWLock_return_code(
(CORE_RWLock_Status) _Thread_Executing->Wait.return_code
468ca: 2079 0006 0bfa moveal 60bfa <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
0,
NULL
);
_Thread_Enable_dispatch();
return _POSIX_RWLock_Translate_core_RWLock_return_code(
468d0: 2f28 0034 movel %a0@(52),%sp@- <== NOT EXECUTED
468d4: 4eb9 0004 6750 jsr 46750 <_POSIX_RWLock_Translate_core_RWLock_return_code><== NOT EXECUTED
468da: 4fef 0018 lea %sp@(24),%sp <== NOT EXECUTED
468de: 6002 bras 468e2 <pthread_rwlock_wrlock+0x5e> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
468e0: 7016 moveq #22,%d0 <== NOT EXECUTED
}
468e2: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
468e6: 4e5e unlk %fp <== NOT EXECUTED
...
00046dc8 <pthread_rwlockattr_destroy>:
*/
int pthread_rwlockattr_destroy(
pthread_rwlockattr_t *attr
)
{
46dc8: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
46dcc: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
if ( !attr || attr->is_initialized == false )
46dd0: 4a88 tstl %a0 <== NOT EXECUTED
46dd2: 670a beqs 46dde <pthread_rwlockattr_destroy+0x16><== NOT EXECUTED
46dd4: 4a90 tstl %a0@ <== NOT EXECUTED
46dd6: 6706 beqs 46dde <pthread_rwlockattr_destroy+0x16><== NOT EXECUTED
return EINVAL;
attr->is_initialized = false;
46dd8: 4290 clrl %a0@ <== NOT EXECUTED
return 0;
46dda: 4280 clrl %d0 <== NOT EXECUTED
46ddc: 6002 bras 46de0 <pthread_rwlockattr_destroy+0x18><== NOT EXECUTED
int pthread_rwlockattr_destroy(
pthread_rwlockattr_t *attr
)
{
if ( !attr || attr->is_initialized == false )
return EINVAL;
46dde: 7016 moveq #22,%d0 <== NOT EXECUTED
attr->is_initialized = false;
return 0;
}
46de0: 4e5e unlk %fp <== NOT EXECUTED
00046de4 <pthread_rwlockattr_getpshared>:
int pthread_rwlockattr_getpshared(
const pthread_rwlockattr_t *attr,
int *pshared
)
{
46de4: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
46de8: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
if ( !attr )
46dec: 4a88 tstl %a0 <== NOT EXECUTED
46dee: 6710 beqs 46e00 <pthread_rwlockattr_getpshared+0x1c><== NOT EXECUTED
return EINVAL;
if ( !attr->is_initialized )
46df0: 4a90 tstl %a0@ <== NOT EXECUTED
46df2: 670c beqs 46e00 <pthread_rwlockattr_getpshared+0x1c><== NOT EXECUTED
return EINVAL;
*pshared = attr->process_shared;
46df4: 226e 000c moveal %fp@(12),%a1 <== NOT EXECUTED
return 0;
46df8: 4280 clrl %d0 <== NOT EXECUTED
return EINVAL;
if ( !attr->is_initialized )
return EINVAL;
*pshared = attr->process_shared;
46dfa: 22a8 0004 movel %a0@(4),%a1@ <== NOT EXECUTED
return 0;
46dfe: 6002 bras 46e02 <pthread_rwlockattr_getpshared+0x1e><== NOT EXECUTED
{
if ( !attr )
return EINVAL;
if ( !attr->is_initialized )
return EINVAL;
46e00: 7016 moveq #22,%d0 <== NOT EXECUTED
*pshared = attr->process_shared;
return 0;
}
46e02: 4e5e unlk %fp <== NOT EXECUTED
...
00046e08 <pthread_rwlockattr_init>:
*/
int pthread_rwlockattr_init(
pthread_rwlockattr_t *attr
)
{
46e08: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
46e0c: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
if ( !attr )
46e10: 4a88 tstl %a0 <== NOT EXECUTED
46e12: 670c beqs 46e20 <pthread_rwlockattr_init+0x18> <== NOT EXECUTED
return EINVAL;
attr->is_initialized = true;
46e14: 7001 moveq #1,%d0 <== NOT EXECUTED
attr->process_shared = PTHREAD_PROCESS_PRIVATE;
46e16: 42a8 0004 clrl %a0@(4) <== NOT EXECUTED
)
{
if ( !attr )
return EINVAL;
attr->is_initialized = true;
46e1a: 2080 movel %d0,%a0@ <== NOT EXECUTED
attr->process_shared = PTHREAD_PROCESS_PRIVATE;
return 0;
46e1c: 4280 clrl %d0 <== NOT EXECUTED
46e1e: 6002 bras 46e22 <pthread_rwlockattr_init+0x1a> <== NOT EXECUTED
int pthread_rwlockattr_init(
pthread_rwlockattr_t *attr
)
{
if ( !attr )
return EINVAL;
46e20: 7016 moveq #22,%d0 <== NOT EXECUTED
attr->is_initialized = true;
attr->process_shared = PTHREAD_PROCESS_PRIVATE;
return 0;
}
46e22: 4e5e unlk %fp <== NOT EXECUTED
...
00046e28 <pthread_rwlockattr_setpshared>:
int pthread_rwlockattr_setpshared(
pthread_rwlockattr_t *attr,
int pshared
)
{
46e28: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
46e2c: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
46e30: 202e 000c movel %fp@(12),%d0 <== NOT EXECUTED
if ( !attr )
46e34: 4a88 tstl %a0 <== NOT EXECUTED
46e36: 6712 beqs 46e4a <pthread_rwlockattr_setpshared+0x22><== NOT EXECUTED
return EINVAL;
if ( !attr->is_initialized )
46e38: 4a90 tstl %a0@ <== NOT EXECUTED
46e3a: 670e beqs 46e4a <pthread_rwlockattr_setpshared+0x22><== NOT EXECUTED
return EINVAL;
switch ( pshared ) {
46e3c: 7201 moveq #1,%d1 <== NOT EXECUTED
46e3e: b280 cmpl %d0,%d1 <== NOT EXECUTED
46e40: 6508 bcss 46e4a <pthread_rwlockattr_setpshared+0x22><== NOT EXECUTED
case PTHREAD_PROCESS_SHARED:
case PTHREAD_PROCESS_PRIVATE:
attr->process_shared = pshared;
46e42: 2140 0004 movel %d0,%a0@(4) <== NOT EXECUTED
return 0;
46e46: 4280 clrl %d0 <== NOT EXECUTED
46e48: 6002 bras 46e4c <pthread_rwlockattr_setpshared+0x24><== NOT EXECUTED
default:
return EINVAL;
46e4a: 7016 moveq #22,%d0 <== NOT EXECUTED
}
}
46e4c: 4e5e unlk %fp <== NOT EXECUTED
0005a474 <pthread_self>:
#include <rtems/system.h>
#include <rtems/score/thread.h>
pthread_t pthread_self( void )
{
5a474: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return _Thread_Executing->Object.id;
}
5a478: 2079 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
5a47e: 4e5e unlk %fp <== NOT EXECUTED
5a480: 2028 0008 movel %a0@(8),%d0 <== NOT EXECUTED
...
00045238 <pthread_setcancelstate>:
int pthread_setcancelstate(
int state,
int *oldstate
)
{
45238: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4523c: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
45240: 226e 000c moveal %fp@(12),%a1 <== NOT EXECUTED
* Don't even think about deleting a resource from an ISR.
* Besides this request is supposed to be for _Thread_Executing
* and the ISR context is not a thread.
*/
if ( _ISR_Is_in_progress() )
45244: 4ab9 0005 e606 tstl 5e606 <_Per_CPU_Information+0x8> <== NOT EXECUTED
4524a: 663c bnes 45288 <pthread_setcancelstate+0x50> <== NOT EXECUTED
return EPROTO;
if ( !oldstate )
4524c: 4a89 tstl %a1 <== NOT EXECUTED
4524e: 673c beqs 4528c <pthread_setcancelstate+0x54> <== NOT EXECUTED
return EINVAL;
if ( state != PTHREAD_CANCEL_ENABLE && state != PTHREAD_CANCEL_DISABLE )
45250: 7201 moveq #1,%d1 <== NOT EXECUTED
45252: b280 cmpl %d0,%d1 <== NOT EXECUTED
45254: 6536 bcss 4528c <pthread_setcancelstate+0x54> <== NOT EXECUTED
return EINVAL;
thread_support = _Thread_Executing->API_Extensions[ THREAD_API_POSIX ];
45256: 2079 0005 e60a moveal 5e60a <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
4525c: 2239 0005 e17c movel 5e17c <_Thread_Dispatch_disable_level>,%d1<== NOT EXECUTED
45262: 5281 addql #1,%d1 <== NOT EXECUTED
45264: 2068 0102 moveal %a0@(258),%a0 <== NOT EXECUTED
45268: 23c1 0005 e17c movel %d1,5e17c <_Thread_Dispatch_disable_level><== NOT EXECUTED
_Thread_Disable_dispatch();
*oldstate = thread_support->cancelability_state;
4526e: 22a8 00d8 movel %a0@(216),%a1@ <== NOT EXECUTED
thread_support->cancelability_state = state;
45272: 2140 00d8 movel %d0,%a0@(216) <== NOT EXECUTED
_POSIX_Thread_Evaluate_cancellation_and_enable_dispatch(_Thread_Executing);
45276: 2f39 0005 e60a movel 5e60a <_Per_CPU_Information+0xc>,%sp@-<== NOT EXECUTED
4527c: 4eb9 0004 a040 jsr 4a040 <_POSIX_Thread_Evaluate_cancellation_and_enable_dispatch><== NOT EXECUTED
/*
* _Thread_Enable_dispatch is invoked by above call.
*/
return 0;
45282: 588f addql #4,%sp <== NOT EXECUTED
45284: 4280 clrl %d0 <== NOT EXECUTED
45286: 6006 bras 4528e <pthread_setcancelstate+0x56> <== NOT EXECUTED
* Besides this request is supposed to be for _Thread_Executing
* and the ISR context is not a thread.
*/
if ( _ISR_Is_in_progress() )
return EPROTO;
45288: 7047 moveq #71,%d0 <== NOT EXECUTED
4528a: 6002 bras 4528e <pthread_setcancelstate+0x56> <== NOT EXECUTED
if ( !oldstate )
return EINVAL;
if ( state != PTHREAD_CANCEL_ENABLE && state != PTHREAD_CANCEL_DISABLE )
return EINVAL;
4528c: 7016 moveq #22,%d0 <== NOT EXECUTED
/*
* _Thread_Enable_dispatch is invoked by above call.
*/
return 0;
}
4528e: 4e5e unlk %fp <== NOT EXECUTED
...
00045294 <pthread_setcanceltype>:
int pthread_setcanceltype(
int type,
int *oldtype
)
{
45294: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
45298: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
4529c: 226e 000c moveal %fp@(12),%a1 <== NOT EXECUTED
* Don't even think about deleting a resource from an ISR.
* Besides this request is supposed to be for _Thread_Executing
* and the ISR context is not a thread.
*/
if ( _ISR_Is_in_progress() )
452a0: 4ab9 0005 e606 tstl 5e606 <_Per_CPU_Information+0x8> <== NOT EXECUTED
452a6: 663c bnes 452e4 <pthread_setcanceltype+0x50> <== NOT EXECUTED
return EPROTO;
if ( !oldtype )
452a8: 4a89 tstl %a1 <== NOT EXECUTED
452aa: 673c beqs 452e8 <pthread_setcanceltype+0x54> <== NOT EXECUTED
return EINVAL;
if ( type != PTHREAD_CANCEL_DEFERRED && type != PTHREAD_CANCEL_ASYNCHRONOUS )
452ac: 7201 moveq #1,%d1 <== NOT EXECUTED
452ae: b280 cmpl %d0,%d1 <== NOT EXECUTED
452b0: 6536 bcss 452e8 <pthread_setcanceltype+0x54> <== NOT EXECUTED
return EINVAL;
thread_support = _Thread_Executing->API_Extensions[ THREAD_API_POSIX ];
452b2: 2079 0005 e60a moveal 5e60a <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
452b8: 2239 0005 e17c movel 5e17c <_Thread_Dispatch_disable_level>,%d1<== NOT EXECUTED
452be: 5281 addql #1,%d1 <== NOT EXECUTED
452c0: 2068 0102 moveal %a0@(258),%a0 <== NOT EXECUTED
452c4: 23c1 0005 e17c movel %d1,5e17c <_Thread_Dispatch_disable_level><== NOT EXECUTED
_Thread_Disable_dispatch();
*oldtype = thread_support->cancelability_type;
452ca: 22a8 00dc movel %a0@(220),%a1@ <== NOT EXECUTED
thread_support->cancelability_type = type;
452ce: 2140 00dc movel %d0,%a0@(220) <== NOT EXECUTED
_POSIX_Thread_Evaluate_cancellation_and_enable_dispatch(_Thread_Executing);
452d2: 2f39 0005 e60a movel 5e60a <_Per_CPU_Information+0xc>,%sp@-<== NOT EXECUTED
452d8: 4eb9 0004 a040 jsr 4a040 <_POSIX_Thread_Evaluate_cancellation_and_enable_dispatch><== NOT EXECUTED
/*
* _Thread_Enable_dispatch is invoked by above call.
*/
return 0;
452de: 588f addql #4,%sp <== NOT EXECUTED
452e0: 4280 clrl %d0 <== NOT EXECUTED
452e2: 6006 bras 452ea <pthread_setcanceltype+0x56> <== NOT EXECUTED
* Besides this request is supposed to be for _Thread_Executing
* and the ISR context is not a thread.
*/
if ( _ISR_Is_in_progress() )
return EPROTO;
452e4: 7047 moveq #71,%d0 <== NOT EXECUTED
452e6: 6002 bras 452ea <pthread_setcanceltype+0x56> <== NOT EXECUTED
if ( !oldtype )
return EINVAL;
if ( type != PTHREAD_CANCEL_DEFERRED && type != PTHREAD_CANCEL_ASYNCHRONOUS )
return EINVAL;
452e8: 7016 moveq #22,%d0 <== NOT EXECUTED
/*
* _Thread_Enable_dispatch is invoked by above call.
*/
return 0;
}
452ea: 4e5e unlk %fp <== NOT EXECUTED
...
00047b74 <pthread_setschedparam>:
int pthread_setschedparam(
pthread_t thread,
int policy,
struct sched_param *param
)
{
47b74: 4e56 ffe0 linkw %fp,#-32 <== NOT EXECUTED
47b78: 48d7 0c1c moveml %d2-%d4/%a2-%a3,%sp@ <== NOT EXECUTED
47b7c: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
47b80: 282e 0010 movel %fp@(16),%d4 <== NOT EXECUTED
int rc;
/*
* Check all the parameters
*/
if ( !param )
47b84: 6700 00e0 beqw 47c66 <pthread_setschedparam+0xf2> <== NOT EXECUTED
return EINVAL;
rc = _POSIX_Thread_Translate_sched_param(
47b88: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
47b8c: 486e fffc pea %fp@(-4) <== NOT EXECUTED
47b90: 2f04 movel %d4,%sp@- <== NOT EXECUTED
47b92: 2f02 movel %d2,%sp@- <== NOT EXECUTED
47b94: 4eb9 0004 d06c jsr 4d06c <_POSIX_Thread_Translate_sched_param><== NOT EXECUTED
policy,
param,
&budget_algorithm,
&budget_callout
);
if ( rc )
47b9a: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
* Check all the parameters
*/
if ( !param )
return EINVAL;
rc = _POSIX_Thread_Translate_sched_param(
47b9e: 2600 movel %d0,%d3 <== NOT EXECUTED
policy,
param,
&budget_algorithm,
&budget_callout
);
if ( rc )
47ba0: 6600 00ca bnew 47c6c <pthread_setschedparam+0xf8> <== NOT EXECUTED
47ba4: 486e fff4 pea %fp@(-12) <== NOT EXECUTED
47ba8: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
47bac: 4879 0006 283e pea 6283e <_POSIX_Threads_Information> <== NOT EXECUTED
47bb2: 4eb9 0004 9950 jsr 49950 <_Objects_Get> <== NOT EXECUTED
/*
* Actually change the scheduling policy and parameters
*/
the_thread = _POSIX_Threads_Get( thread, &location );
switch ( location ) {
47bb8: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
47bbc: 2640 moveal %d0,%a3 <== NOT EXECUTED
47bbe: 4aae fff4 tstl %fp@(-12) <== NOT EXECUTED
47bc2: 6600 00a6 bnew 47c6a <pthread_setschedparam+0xf6> <== NOT EXECUTED
case OBJECTS_LOCAL:
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
47bc6: 246b 0102 moveal %a3@(258),%a2 <== NOT EXECUTED
if ( api->schedpolicy == SCHED_SPORADIC )
47bca: 7004 moveq #4,%d0 <== NOT EXECUTED
47bcc: b0aa 0084 cmpl %a2@(132),%d0 <== NOT EXECUTED
47bd0: 660c bnes 47bde <pthread_setschedparam+0x6a> <== NOT EXECUTED
(void) _Watchdog_Remove( &api->Sporadic_timer );
47bd2: 486a 00a8 pea %a2@(168) <== NOT EXECUTED
47bd6: 4eb9 0004 b3b8 jsr 4b3b8 <_Watchdog_Remove> <== NOT EXECUTED
47bdc: 588f addql #4,%sp <== NOT EXECUTED
api->schedpolicy = policy;
47bde: 2542 0084 movel %d2,%a2@(132) <== NOT EXECUTED
api->schedparam = *param;
47be2: 4878 001c pea 1c <OPER2+0x8> <== NOT EXECUTED
47be6: 2f04 movel %d4,%sp@- <== NOT EXECUTED
47be8: 486a 0088 pea %a2@(136) <== NOT EXECUTED
47bec: 4eb9 0004 fccc jsr 4fccc <memcpy> <== NOT EXECUTED
the_thread->budget_algorithm = budget_algorithm;
47bf2: 276e fffc 007a movel %fp@(-4),%a3@(122) <== NOT EXECUTED
the_thread->budget_callout = budget_callout;
switch ( api->schedpolicy ) {
47bf8: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
(void) _Watchdog_Remove( &api->Sporadic_timer );
api->schedpolicy = policy;
api->schedparam = *param;
the_thread->budget_algorithm = budget_algorithm;
the_thread->budget_callout = budget_callout;
47bfc: 276e fff8 007e movel %fp@(-8),%a3@(126) <== NOT EXECUTED
switch ( api->schedpolicy ) {
47c02: 4a82 tstl %d2 <== NOT EXECUTED
47c04: 6d58 blts 47c5e <pthread_setschedparam+0xea> <== NOT EXECUTED
47c06: 7002 moveq #2,%d0 <== NOT EXECUTED
47c08: b082 cmpl %d2,%d0 <== NOT EXECUTED
47c0a: 6c0a bges 47c16 <pthread_setschedparam+0xa2> <== NOT EXECUTED
47c0c: 103c 0004 moveb #4,%d0 <== NOT EXECUTED
47c10: b082 cmpl %d2,%d0 <== NOT EXECUTED
47c12: 664a bnes 47c5e <pthread_setschedparam+0xea> <== NOT EXECUTED
47c14: 602a bras 47c40 <pthread_setschedparam+0xcc> <== NOT EXECUTED
47c16: 4280 clrl %d0 <== NOT EXECUTED
47c18: 1039 0006 0d96 moveb 60d96 <rtems_maximum_priority>,%d0 <== NOT EXECUTED
case SCHED_OTHER:
case SCHED_FIFO:
case SCHED_RR:
the_thread->cpu_time_budget = _Thread_Ticks_per_timeslice;
47c1e: 41f9 0006 2630 lea 62630 <_Thread_Ticks_per_timeslice>,%a0 <== NOT EXECUTED
47c24: 90aa 0088 subl %a2@(136),%d0 <== NOT EXECUTED
47c28: 2750 0076 movel %a0@,%a3@(118) <== NOT EXECUTED
the_thread->real_priority =
47c2c: 2740 0018 movel %d0,%a3@(24) <== NOT EXECUTED
_POSIX_Priority_To_core( api->schedparam.sched_priority );
_Thread_Change_priority(
47c30: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
47c34: 2f00 movel %d0,%sp@- <== NOT EXECUTED
47c36: 2f0b movel %a3,%sp@- <== NOT EXECUTED
47c38: 4eb9 0004 9f1c jsr 49f1c <_Thread_Change_priority> <== NOT EXECUTED
47c3e: 601a bras 47c5a <pthread_setschedparam+0xe6> <== NOT EXECUTED
true
);
break;
case SCHED_SPORADIC:
api->ss_high_priority = api->schedparam.sched_priority;
47c40: 256a 0088 00a4 movel %a2@(136),%a2@(164) <== NOT EXECUTED
_Watchdog_Remove( &api->Sporadic_timer );
47c46: 486a 00a8 pea %a2@(168) <== NOT EXECUTED
47c4a: 4eb9 0004 b3b8 jsr 4b3b8 <_Watchdog_Remove> <== NOT EXECUTED
_POSIX_Threads_Sporadic_budget_TSR( 0, the_thread );
47c50: 2f0b movel %a3,%sp@- <== NOT EXECUTED
47c52: 42a7 clrl %sp@- <== NOT EXECUTED
47c54: 4eb9 0004 7a50 jsr 47a50 <_POSIX_Threads_Sporadic_budget_TSR><== NOT EXECUTED
break;
47c5a: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
}
_Thread_Enable_dispatch();
47c5e: 4eb9 0004 a3b6 jsr 4a3b6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
47c64: 6006 bras 47c6c <pthread_setschedparam+0xf8> <== NOT EXECUTED
/*
* Check all the parameters
*/
if ( !param )
return EINVAL;
47c66: 7616 moveq #22,%d3 <== NOT EXECUTED
47c68: 6002 bras 47c6c <pthread_setschedparam+0xf8> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return ESRCH;
47c6a: 7603 moveq #3,%d3 <== NOT EXECUTED
}
47c6c: 2003 movel %d3,%d0 <== NOT EXECUTED
47c6e: 4cee 0c1c ffe0 moveml %fp@(-32),%d2-%d4/%a2-%a3 <== NOT EXECUTED
47c74: 4e5e unlk %fp <== NOT EXECUTED
0004575c <pthread_setspecific>:
int pthread_setspecific(
pthread_key_t key,
const void *value
)
{
4575c: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
45760: 2f03 movel %d3,%sp@- <== NOT EXECUTED
45762: 2f02 movel %d2,%sp@- <== NOT EXECUTED
45764: 486e fffc pea %fp@(-4) <== NOT EXECUTED
45768: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4576c: 4879 0005 fbac pea 5fbac <_POSIX_Keys_Information> <== NOT EXECUTED
45772: 4eb9 0004 7a6c jsr 47a6c <_Objects_Get> <== NOT EXECUTED
uint32_t api;
uint32_t index;
Objects_Locations location;
the_key = _POSIX_Keys_Get( key, &location );
switch ( location ) {
45778: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4577c: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
45780: 6634 bnes 457b6 <pthread_setspecific+0x5a> <== NOT EXECUTED
case OBJECTS_LOCAL:
api = _Objects_Get_API( _Thread_Executing->Object.id );
45782: 2079 0005 fcc6 moveal 5fcc6 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
45788: 7618 moveq #24,%d3 <== NOT EXECUTED
index = _Objects_Get_index( _Thread_Executing->Object.id );
the_key->Values[ api ][ index ] = (void *) value;
4578a: 2240 moveal %d0,%a1 <== NOT EXECUTED
the_key = _POSIX_Keys_Get( key, &location );
switch ( location ) {
case OBJECTS_LOCAL:
api = _Objects_Get_API( _Thread_Executing->Object.id );
4578c: 2428 0008 movel %a0@(8),%d2 <== NOT EXECUTED
45790: 2202 movel %d2,%d1 <== NOT EXECUTED
45792: e6a9 lsrl %d3,%d1 <== NOT EXECUTED
45794: 163c 0007 moveb #7,%d3 <== NOT EXECUTED
45798: c283 andl %d3,%d1 <== NOT EXECUTED
index = _Objects_Get_index( _Thread_Executing->Object.id );
4579a: 0282 0000 ffff andil #65535,%d2 <== NOT EXECUTED
the_key->Values[ api ][ index ] = (void *) value;
457a0: 2071 1c14 moveal %a1@(00000014,%d1:l:4),%a0 <== NOT EXECUTED
457a4: 43ee 000c lea %fp@(12),%a1 <== NOT EXECUTED
457a8: 2191 2c00 movel %a1@,%a0@(00000000,%d2:l:4) <== NOT EXECUTED
_Thread_Enable_dispatch();
457ac: 4eb9 0004 84d2 jsr 484d2 <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
457b2: 4280 clrl %d0 <== NOT EXECUTED
457b4: 6002 bras 457b8 <pthread_setspecific+0x5c> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
457b6: 7016 moveq #22,%d0 <== NOT EXECUTED
}
457b8: 242e fff4 movel %fp@(-12),%d2 <== NOT EXECUTED
457bc: 262e fff8 movel %fp@(-8),%d3 <== NOT EXECUTED
457c0: 4e5e unlk %fp <== NOT EXECUTED
0004b540 <pthread_sigmask>:
int pthread_sigmask(
int how,
const sigset_t *set,
sigset_t *oset
)
{
4b540: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4b544: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
4b548: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4b54a: 226e 000c moveal %fp@(12),%a1 <== NOT EXECUTED
4b54e: 246e 0010 moveal %fp@(16),%a2 <== NOT EXECUTED
POSIX_API_Control *api;
if ( !set && !oset )
4b552: 4a89 tstl %a1 <== NOT EXECUTED
4b554: 6604 bnes 4b55a <pthread_sigmask+0x1a> <== NOT EXECUTED
4b556: 4a8a tstl %a2 <== NOT EXECUTED
4b558: 6742 beqs 4b59c <pthread_sigmask+0x5c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
api = _Thread_Executing->API_Extensions[ THREAD_API_POSIX ];
4b55a: 2079 0005 fc46 moveal 5fc46 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
4b560: 2068 0102 moveal %a0@(258),%a0 <== NOT EXECUTED
if ( oset )
4b564: 4a8a tstl %a2 <== NOT EXECUTED
4b566: 6704 beqs 4b56c <pthread_sigmask+0x2c> <== NOT EXECUTED
*oset = api->signals_blocked;
4b568: 24a8 00d0 movel %a0@(208),%a2@ <== NOT EXECUTED
if ( !set )
4b56c: 4a89 tstl %a1 <== NOT EXECUTED
4b56e: 6756 beqs 4b5c6 <pthread_sigmask+0x86> <== NOT EXECUTED
return 0;
switch ( how ) {
4b570: 7201 moveq #1,%d1 <== NOT EXECUTED
4b572: b280 cmpl %d0,%d1 <== NOT EXECUTED
4b574: 670e beqs 4b584 <pthread_sigmask+0x44> <== NOT EXECUTED
4b576: 123c 0002 moveb #2,%d1 <== NOT EXECUTED
4b57a: b280 cmpl %d0,%d1 <== NOT EXECUTED
4b57c: 670e beqs 4b58c <pthread_sigmask+0x4c> <== NOT EXECUTED
4b57e: 4a80 tstl %d0 <== NOT EXECUTED
4b580: 6714 beqs 4b596 <pthread_sigmask+0x56> <== NOT EXECUTED
4b582: 6018 bras 4b59c <pthread_sigmask+0x5c> <== NOT EXECUTED
case SIG_BLOCK:
api->signals_blocked |= *set;
4b584: 2011 movel %a1@,%d0 <== NOT EXECUTED
4b586: 81a8 00d0 orl %d0,%a0@(208) <== NOT EXECUTED
break;
4b58a: 6020 bras 4b5ac <pthread_sigmask+0x6c> <== NOT EXECUTED
case SIG_UNBLOCK:
api->signals_blocked &= ~*set;
4b58c: 2011 movel %a1@,%d0 <== NOT EXECUTED
4b58e: 4680 notl %d0 <== NOT EXECUTED
4b590: c1a8 00d0 andl %d0,%a0@(208) <== NOT EXECUTED
break;
4b594: 6016 bras 4b5ac <pthread_sigmask+0x6c> <== NOT EXECUTED
case SIG_SETMASK:
api->signals_blocked = *set;
4b596: 2151 00d0 movel %a1@,%a0@(208) <== NOT EXECUTED
break;
4b59a: 6010 bras 4b5ac <pthread_sigmask+0x6c> <== NOT EXECUTED
default:
rtems_set_errno_and_return_minus_one( EINVAL );
4b59c: 4eb9 0004 d7e4 jsr 4d7e4 <__errno> <== NOT EXECUTED
4b5a2: 2040 moveal %d0,%a0 <== NOT EXECUTED
4b5a4: 7016 moveq #22,%d0 <== NOT EXECUTED
4b5a6: 2080 movel %d0,%a0@ <== NOT EXECUTED
4b5a8: 70ff moveq #-1,%d0 <== NOT EXECUTED
4b5aa: 601c bras 4b5c8 <pthread_sigmask+0x88> <== NOT EXECUTED
/* XXX are there critical section problems here? */
/* XXX evaluate the new set */
if ( ~api->signals_blocked &
(api->signals_pending | _POSIX_signals_Pending) ) {
4b5ac: 2039 0005 fe6c movel 5fe6c <_POSIX_signals_Pending>,%d0 <== NOT EXECUTED
/* XXX are there critical section problems here? */
/* XXX evaluate the new set */
if ( ~api->signals_blocked &
4b5b2: 2228 00d0 movel %a0@(208),%d1 <== NOT EXECUTED
4b5b6: 4681 notl %d1 <== NOT EXECUTED
(api->signals_pending | _POSIX_signals_Pending) ) {
4b5b8: 80a8 00d4 orl %a0@(212),%d0 <== NOT EXECUTED
/* XXX are there critical section problems here? */
/* XXX evaluate the new set */
if ( ~api->signals_blocked &
4b5bc: c081 andl %d1,%d0 <== NOT EXECUTED
4b5be: 6706 beqs 4b5c6 <pthread_sigmask+0x86> <== NOT EXECUTED
(api->signals_pending | _POSIX_signals_Pending) ) {
_Thread_Dispatch();
4b5c0: 4eb9 0004 83f4 jsr 483f4 <_Thread_Dispatch> <== NOT EXECUTED
}
return 0;
4b5c6: 4280 clrl %d0 <== NOT EXECUTED
}
4b5c8: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
4b5cc: 4e5e unlk %fp <== NOT EXECUTED
000456f4 <pthread_spin_destroy>:
*/
int pthread_spin_destroy(
pthread_spinlock_t *spinlock
)
{
456f4: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
456f8: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
456fc: 2f0b movel %a3,%sp@- <== NOT EXECUTED
456fe: 2f0a movel %a2,%sp@- <== NOT EXECUTED
POSIX_Spinlock_Control *the_spinlock = NULL;
Objects_Locations location;
if ( !spinlock )
45700: 4a88 tstl %a0 <== NOT EXECUTED
45702: 6756 beqs 4575a <pthread_spin_destroy+0x66> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE POSIX_Spinlock_Control *_POSIX_Spinlock_Get (
pthread_spinlock_t *spinlock,
Objects_Locations *location
)
{
return (POSIX_Spinlock_Control *) _Objects_Get(
45704: 486e fffc pea %fp@(-4) <== NOT EXECUTED
45708: 2f10 movel %a0@,%sp@- <== NOT EXECUTED
4570a: 4879 0005 ece8 pea 5ece8 <_POSIX_Spinlock_Information> <== NOT EXECUTED
45710: 4eb9 0004 76e8 jsr 476e8 <_Objects_Get> <== NOT EXECUTED
return EINVAL;
the_spinlock = _POSIX_Spinlock_Get( spinlock, &location );
switch ( location ) {
45716: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4571a: 2440 moveal %d0,%a2 <== NOT EXECUTED
4571c: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
45720: 6638 bnes 4575a <pthread_spin_destroy+0x66> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE bool _CORE_spinlock_Is_busy(
CORE_spinlock_Control *the_spinlock
)
{
return (the_spinlock->users != 0);
45722: 202a 0018 movel %a2@(24),%d0 <== NOT EXECUTED
45726: 47f9 0004 814e lea 4814e <_Thread_Enable_dispatch>,%a3 <== NOT EXECUTED
case OBJECTS_LOCAL:
if ( _CORE_spinlock_Is_busy( &the_spinlock->Spinlock ) ) {
4572c: 6706 beqs 45734 <pthread_spin_destroy+0x40> <== NOT EXECUTED
_Thread_Enable_dispatch();
4572e: 4e93 jsr %a3@ <== NOT EXECUTED
return EBUSY;
45730: 7010 moveq #16,%d0 <== NOT EXECUTED
45732: 6028 bras 4575c <pthread_spin_destroy+0x68> <== NOT EXECUTED
}
_Objects_Close( &_POSIX_Spinlock_Information, &the_spinlock->Object );
45734: 2f0a movel %a2,%sp@- <== NOT EXECUTED
45736: 4879 0005 ece8 pea 5ece8 <_POSIX_Spinlock_Information> <== NOT EXECUTED
4573c: 4eb9 0004 730c jsr 4730c <_Objects_Close> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _POSIX_Spinlock_Free (
POSIX_Spinlock_Control *the_spinlock
)
{
_Objects_Free( &_POSIX_Spinlock_Information, &the_spinlock->Object );
45742: 2f0a movel %a2,%sp@- <== NOT EXECUTED
45744: 4879 0005 ece8 pea 5ece8 <_POSIX_Spinlock_Information> <== NOT EXECUTED
4574a: 4eb9 0004 7584 jsr 47584 <_Objects_Free> <== NOT EXECUTED
_POSIX_Spinlock_Free( the_spinlock );
_Thread_Enable_dispatch();
45750: 4e93 jsr %a3@ <== NOT EXECUTED
return 0;
45752: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
45756: 4280 clrl %d0 <== NOT EXECUTED
45758: 6002 bras 4575c <pthread_spin_destroy+0x68> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
4575a: 7016 moveq #22,%d0 <== NOT EXECUTED
}
4575c: 246e fff4 moveal %fp@(-12),%a2 <== NOT EXECUTED
45760: 266e fff8 moveal %fp@(-8),%a3 <== NOT EXECUTED
45764: 4e5e unlk %fp <== NOT EXECUTED
00045768 <pthread_spin_init>:
int pthread_spin_init(
pthread_spinlock_t *spinlock,
int pshared
)
{
45768: 4e56 fff0 linkw %fp,#-16 <== NOT EXECUTED
4576c: 48d7 1c00 moveml %a2-%a4,%sp@ <== NOT EXECUTED
45770: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
POSIX_Spinlock_Control *the_spinlock;
CORE_spinlock_Attributes attributes;
if ( !spinlock )
45774: 4a8a tstl %a2 <== NOT EXECUTED
45776: 6764 beqs 457dc <pthread_spin_init+0x74> <== NOT EXECUTED
return EINVAL;
switch ( pshared ) {
45778: 4aae 000c tstl %fp@(12) <== NOT EXECUTED
4577c: 665e bnes 457dc <pthread_spin_init+0x74> <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
4577e: 2039 0005 eae8 movel 5eae8 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
45784: 5280 addql #1,%d0 <== NOT EXECUTED
45786: 23c0 0005 eae8 movel %d0,5eae8 <_Thread_Dispatch_disable_level><== NOT EXECUTED
* the inactive chain of free spinlock control blocks.
*/
RTEMS_INLINE_ROUTINE POSIX_Spinlock_Control *_POSIX_Spinlock_Allocate( void )
{
return (POSIX_Spinlock_Control *)
_Objects_Allocate( &_POSIX_Spinlock_Information );
4578c: 4879 0005 ece8 pea 5ece8 <_POSIX_Spinlock_Information> <== NOT EXECUTED
45792: 49f9 0004 814e lea 4814e <_Thread_Enable_dispatch>,%a4 <== NOT EXECUTED
45798: 4eb9 0004 7290 jsr 47290 <_Objects_Allocate> <== NOT EXECUTED
_Thread_Disable_dispatch(); /* prevents deletion */
the_spinlock = _POSIX_Spinlock_Allocate();
if ( !the_spinlock ) {
4579e: 588f addql #4,%sp <== NOT EXECUTED
457a0: 2640 moveal %d0,%a3 <== NOT EXECUTED
457a2: 4a80 tstl %d0 <== NOT EXECUTED
457a4: 6606 bnes 457ac <pthread_spin_init+0x44> <== NOT EXECUTED
_Thread_Enable_dispatch();
457a6: 4e94 jsr %a4@ <== NOT EXECUTED
return EAGAIN;
457a8: 700b moveq #11,%d0 <== NOT EXECUTED
457aa: 6032 bras 457de <pthread_spin_init+0x76> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _CORE_spinlock_Initialize_attributes(
CORE_spinlock_Attributes *the_attributes
)
{
the_attributes->XXX = 0;
457ac: 204e moveal %fp,%a0 <== NOT EXECUTED
457ae: 42a0 clrl %a0@- <== NOT EXECUTED
}
_CORE_spinlock_Initialize_attributes( &attributes );
_CORE_spinlock_Initialize( &the_spinlock->Spinlock, &attributes );
457b0: 2f08 movel %a0,%sp@- <== NOT EXECUTED
457b2: 486b 0010 pea %a3@(16) <== NOT EXECUTED
457b6: 4eb9 0004 6c84 jsr 46c84 <_CORE_spinlock_Initialize> <== NOT EXECUTED
uint32_t name
)
{
_Objects_Set_local_object(
information,
_Objects_Get_index( the_object->id ),
457bc: 202b 0008 movel %a3@(8),%d0 <== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
uint32_t name
)
{
_Objects_Set_local_object(
457c0: 4281 clrl %d1 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
457c2: 2079 0005 ed00 moveal 5ed00 <_POSIX_Spinlock_Information+0x18>,%a0<== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
uint32_t name
)
{
_Objects_Set_local_object(
457c8: 3200 movew %d0,%d1 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
457ca: 218b 1c00 movel %a3,%a0@(00000000,%d1:l:4) <== NOT EXECUTED
_Objects_Get_index( the_object->id ),
the_object
);
/* ASSERT: information->is_string == false */
the_object->name.name_u32 = name;
457ce: 42ab 000c clrl %a3@(12) <== NOT EXECUTED
_Objects_Open_u32( &_POSIX_Spinlock_Information, &the_spinlock->Object, 0 );
*spinlock = the_spinlock->Object.id;
457d2: 2480 movel %d0,%a2@ <== NOT EXECUTED
_Thread_Enable_dispatch();
457d4: 4e94 jsr %a4@ <== NOT EXECUTED
return 0;
457d6: 508f addql #8,%sp <== NOT EXECUTED
457d8: 4280 clrl %d0 <== NOT EXECUTED
457da: 6002 bras 457de <pthread_spin_init+0x76> <== NOT EXECUTED
switch ( pshared ) {
case PTHREAD_PROCESS_PRIVATE: /* only supported values */
break;
case PTHREAD_PROCESS_SHARED:
default:
return EINVAL;
457dc: 7016 moveq #22,%d0 <== NOT EXECUTED
*spinlock = the_spinlock->Object.id;
_Thread_Enable_dispatch();
return 0;
}
457de: 4cee 1c00 fff0 moveml %fp@(-16),%a2-%a4 <== NOT EXECUTED
457e4: 4e5e unlk %fp <== NOT EXECUTED
000457e8 <pthread_spin_lock>:
*/
int pthread_spin_lock(
pthread_spinlock_t *spinlock
)
{
457e8: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
457ec: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
457f0: 2f02 movel %d2,%sp@- <== NOT EXECUTED
POSIX_Spinlock_Control *the_spinlock = NULL;
Objects_Locations location;
CORE_spinlock_Status status;
if ( !spinlock )
457f2: 4a88 tstl %a0 <== NOT EXECUTED
457f4: 6744 beqs 4583a <pthread_spin_lock+0x52> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE POSIX_Spinlock_Control *_POSIX_Spinlock_Get (
pthread_spinlock_t *spinlock,
Objects_Locations *location
)
{
return (POSIX_Spinlock_Control *) _Objects_Get(
457f6: 486e fffc pea %fp@(-4) <== NOT EXECUTED
457fa: 2f10 movel %a0@,%sp@- <== NOT EXECUTED
457fc: 4879 0005 ece8 pea 5ece8 <_POSIX_Spinlock_Information> <== NOT EXECUTED
45802: 4eb9 0004 76e8 jsr 476e8 <_Objects_Get> <== NOT EXECUTED
return EINVAL;
the_spinlock = _POSIX_Spinlock_Get( spinlock, &location );
switch ( location ) {
45808: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4580c: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
45810: 6628 bnes 4583a <pthread_spin_lock+0x52> <== NOT EXECUTED
case OBJECTS_LOCAL:
status = _CORE_spinlock_Wait( &the_spinlock->Spinlock, true, 0 );
45812: 42a7 clrl %sp@- <== NOT EXECUTED
45814: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
45818: 2040 moveal %d0,%a0 <== NOT EXECUTED
4581a: 4868 0010 pea %a0@(16) <== NOT EXECUTED
4581e: 4eb9 0004 6cf4 jsr 46cf4 <_CORE_spinlock_Wait> <== NOT EXECUTED
45824: 2400 movel %d0,%d2 <== NOT EXECUTED
_Thread_Enable_dispatch();
45826: 4eb9 0004 814e jsr 4814e <_Thread_Enable_dispatch> <== NOT EXECUTED
return _POSIX_Spinlock_Translate_core_spinlock_return_code( status );
4582c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4582e: 4eb9 0004 5844 jsr 45844 <_POSIX_Spinlock_Translate_core_spinlock_return_code><== NOT EXECUTED
45834: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
45838: 6002 bras 4583c <pthread_spin_lock+0x54> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
4583a: 7016 moveq #22,%d0 <== NOT EXECUTED
}
4583c: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
45840: 4e5e unlk %fp <== NOT EXECUTED
0004585c <pthread_spin_trylock>:
*/
int pthread_spin_trylock(
pthread_spinlock_t *spinlock
)
{
4585c: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
45860: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
45864: 2f02 movel %d2,%sp@- <== NOT EXECUTED
POSIX_Spinlock_Control *the_spinlock = NULL;
Objects_Locations location;
CORE_spinlock_Status status;
if ( !spinlock )
45866: 4a88 tstl %a0 <== NOT EXECUTED
45868: 6742 beqs 458ac <pthread_spin_trylock+0x50> <== NOT EXECUTED
4586a: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4586e: 2f10 movel %a0@,%sp@- <== NOT EXECUTED
45870: 4879 0005 ece8 pea 5ece8 <_POSIX_Spinlock_Information> <== NOT EXECUTED
45876: 4eb9 0004 76e8 jsr 476e8 <_Objects_Get> <== NOT EXECUTED
return EINVAL;
the_spinlock = _POSIX_Spinlock_Get( spinlock, &location );
switch ( location ) {
4587c: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
45880: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
45884: 6626 bnes 458ac <pthread_spin_trylock+0x50> <== NOT EXECUTED
case OBJECTS_LOCAL:
status = _CORE_spinlock_Wait( &the_spinlock->Spinlock, false, 0 );
45886: 42a7 clrl %sp@- <== NOT EXECUTED
45888: 2040 moveal %d0,%a0 <== NOT EXECUTED
4588a: 42a7 clrl %sp@- <== NOT EXECUTED
4588c: 4868 0010 pea %a0@(16) <== NOT EXECUTED
45890: 4eb9 0004 6cf4 jsr 46cf4 <_CORE_spinlock_Wait> <== NOT EXECUTED
45896: 2400 movel %d0,%d2 <== NOT EXECUTED
_Thread_Enable_dispatch();
45898: 4eb9 0004 814e jsr 4814e <_Thread_Enable_dispatch> <== NOT EXECUTED
return _POSIX_Spinlock_Translate_core_spinlock_return_code( status );
4589e: 2f02 movel %d2,%sp@- <== NOT EXECUTED
458a0: 4eb9 0004 5844 jsr 45844 <_POSIX_Spinlock_Translate_core_spinlock_return_code><== NOT EXECUTED
458a6: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
458aa: 6002 bras 458ae <pthread_spin_trylock+0x52> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
458ac: 7016 moveq #22,%d0 <== NOT EXECUTED
}
458ae: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
458b2: 4e5e unlk %fp <== NOT EXECUTED
...
000458b8 <pthread_spin_unlock>:
*/
int pthread_spin_unlock(
pthread_spinlock_t *spinlock
)
{
458b8: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
458bc: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
458c0: 2f02 movel %d2,%sp@- <== NOT EXECUTED
POSIX_Spinlock_Control *the_spinlock = NULL;
Objects_Locations location;
CORE_spinlock_Status status;
if ( !spinlock )
458c2: 4a88 tstl %a0 <== NOT EXECUTED
458c4: 673c beqs 45902 <pthread_spin_unlock+0x4a> <== NOT EXECUTED
458c6: 486e fffc pea %fp@(-4) <== NOT EXECUTED
458ca: 2f10 movel %a0@,%sp@- <== NOT EXECUTED
458cc: 4879 0005 ece8 pea 5ece8 <_POSIX_Spinlock_Information> <== NOT EXECUTED
458d2: 4eb9 0004 76e8 jsr 476e8 <_Objects_Get> <== NOT EXECUTED
return EINVAL;
the_spinlock = _POSIX_Spinlock_Get( spinlock, &location );
switch ( location ) {
458d8: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
458dc: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
458e0: 6620 bnes 45902 <pthread_spin_unlock+0x4a> <== NOT EXECUTED
case OBJECTS_LOCAL:
status = _CORE_spinlock_Release( &the_spinlock->Spinlock );
458e2: 2040 moveal %d0,%a0 <== NOT EXECUTED
458e4: 4868 0010 pea %a0@(16) <== NOT EXECUTED
458e8: 4eb9 0004 6ca4 jsr 46ca4 <_CORE_spinlock_Release> <== NOT EXECUTED
458ee: 2400 movel %d0,%d2 <== NOT EXECUTED
_Thread_Enable_dispatch();
458f0: 4eb9 0004 814e jsr 4814e <_Thread_Enable_dispatch> <== NOT EXECUTED
return _POSIX_Spinlock_Translate_core_spinlock_return_code( status );
458f6: 2f02 movel %d2,%sp@- <== NOT EXECUTED
458f8: 4eb9 0004 5844 jsr 45844 <_POSIX_Spinlock_Translate_core_spinlock_return_code><== NOT EXECUTED
458fe: 508f addql #8,%sp <== NOT EXECUTED
45900: 6002 bras 45904 <pthread_spin_unlock+0x4c> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return EINVAL;
45902: 7016 moveq #22,%d0 <== NOT EXECUTED
}
45904: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
45908: 4e5e unlk %fp <== NOT EXECUTED
00045b08 <pthread_testcancel>:
*
* 18.2.2 Setting Cancelability State, P1003.1c/Draft 10, p. 183
*/
void pthread_testcancel( void )
{
45b08: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
45b0c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
* Don't even think about deleting a resource from an ISR.
* Besides this request is supposed to be for _Thread_Executing
* and the ISR context is not a thread.
*/
if ( _ISR_Is_in_progress() )
45b0e: 4ab9 0005 eecc tstl 5eecc <_Per_CPU_Information+0x8> <== NOT EXECUTED
45b14: 6646 bnes 45b5c <pthread_testcancel+0x54> <== NOT EXECUTED
return;
thread_support = _Thread_Executing->API_Extensions[ THREAD_API_POSIX ];
45b16: 2079 0005 eed0 moveal 5eed0 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
45b1c: 2039 0005 ea42 movel 5ea42 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
45b22: 5280 addql #1,%d0 <== NOT EXECUTED
45b24: 2068 0102 moveal %a0@(258),%a0 <== NOT EXECUTED
45b28: 23c0 0005 ea42 movel %d0,5ea42 <_Thread_Dispatch_disable_level><== NOT EXECUTED
_Thread_Disable_dispatch();
if ( thread_support->cancelability_state == PTHREAD_CANCEL_ENABLE &&
45b2e: 4aa8 00d8 tstl %a0@(216) <== NOT EXECUTED
45b32: 660a bnes 45b3e <pthread_testcancel+0x36> <== NOT EXECUTED
/* Setting Cancelability State, P1003.1c/Draft 10, p. 183 */
int _EXFUN(pthread_setcancelstate, (int __state, int *__oldstate));
int _EXFUN(pthread_setcanceltype, (int __type, int *__oldtype));
void _EXFUN(pthread_testcancel, (void));
45b34: 4aa8 00e0 tstl %a0@(224) <== NOT EXECUTED
45b38: 56c2 sne %d2 <== NOT EXECUTED
45b3a: 4482 negl %d2 <== NOT EXECUTED
45b3c: 6002 bras 45b40 <pthread_testcancel+0x38> <== NOT EXECUTED
*/
void pthread_testcancel( void )
{
POSIX_API_Control *thread_support;
bool cancel = false;
45b3e: 4202 clrb %d2 <== NOT EXECUTED
_Thread_Disable_dispatch();
if ( thread_support->cancelability_state == PTHREAD_CANCEL_ENABLE &&
thread_support->cancelation_requested )
cancel = true;
_Thread_Enable_dispatch();
45b40: 4eb9 0004 8202 jsr 48202 <_Thread_Enable_dispatch> <== NOT EXECUTED
if ( cancel )
45b46: 4a02 tstb %d2 <== NOT EXECUTED
45b48: 6712 beqs 45b5c <pthread_testcancel+0x54> <== NOT EXECUTED
_POSIX_Thread_Exit( _Thread_Executing, PTHREAD_CANCELED );
45b4a: 4878 ffff pea ffffffff <LESS> <== NOT EXECUTED
45b4e: 2f39 0005 eed0 movel 5eed0 <_Per_CPU_Information+0xc>,%sp@-<== NOT EXECUTED
45b54: 4eb9 0004 af90 jsr 4af90 <_POSIX_Thread_Exit> <== NOT EXECUTED
45b5a: 508f addql #8,%sp <== NOT EXECUTED
}
45b5c: 242e fffc movel %fp@(-4),%d2 <== NOT EXECUTED
45b60: 4e5e unlk %fp <== NOT EXECUTED
000464de <rtems_aio_enqueue>:
* errno - otherwise
*/
int
rtems_aio_enqueue (rtems_aio_request *req)
{
464de: 4e56 ffc0 linkw %fp,#-64 <== NOT EXECUTED
464e2: 48d7 3c1c moveml %d2-%d4/%a2-%a5,%sp@ <== NOT EXECUTED
struct sched_param param;
/* The queue should be initialized */
AIO_assert (aio_request_queue.initialized == AIO_QUEUE_INITIALIZED);
result = pthread_mutex_lock (&aio_request_queue.mutex);
464e6: 4879 0006 04a8 pea 604a8 <aio_request_queue> <== NOT EXECUTED
464ec: 4bf9 0004 6e00 lea 46e00 <pthread_mutex_lock>,%a5 <== NOT EXECUTED
* errno - otherwise
*/
int
rtems_aio_enqueue (rtems_aio_request *req)
{
464f2: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
struct sched_param param;
/* The queue should be initialized */
AIO_assert (aio_request_queue.initialized == AIO_QUEUE_INITIALIZED);
result = pthread_mutex_lock (&aio_request_queue.mutex);
464f6: 4e95 jsr %a5@ <== NOT EXECUTED
if (result != 0) {
464f8: 588f addql #4,%sp <== NOT EXECUTED
struct sched_param param;
/* The queue should be initialized */
AIO_assert (aio_request_queue.initialized == AIO_QUEUE_INITIALIZED);
result = pthread_mutex_lock (&aio_request_queue.mutex);
464fa: 2400 movel %d0,%d2 <== NOT EXECUTED
if (result != 0) {
464fc: 670c beqs 4650a <rtems_aio_enqueue+0x2c> <== NOT EXECUTED
free (req);
464fe: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46500: 4eb9 0004 31fc jsr 431fc <free> <== NOT EXECUTED
46506: 6000 01c2 braw 466ca <rtems_aio_enqueue+0x1ec> <== NOT EXECUTED
return result;
}
/* _POSIX_PRIORITIZED_IO and _POSIX_PRIORITY_SCHEDULING are defined,
we can use aio_reqprio to lower the priority of the request */
pthread_getschedparam (pthread_self(), &policy, ¶m);
4650a: 47f9 0004 75dc lea 475dc <pthread_self>,%a3 <== NOT EXECUTED
46510: 4e93 jsr %a3@ <== NOT EXECUTED
46512: 486e ffdc pea %fp@(-36) <== NOT EXECUTED
46516: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
4651a: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4651c: 4eb9 0004 7200 jsr 47200 <pthread_getschedparam> <== NOT EXECUTED
req->caller_thread = pthread_self ();
46522: 4e93 jsr %a3@ <== NOT EXECUTED
req->priority = param.sched_priority - req->aiocbp->aio_reqprio;
46524: 206a 0014 moveal %a2@(20),%a0 <== NOT EXECUTED
req->policy = policy;
req->aiocbp->error_code = EINPROGRESS;
46528: 7277 moveq #119,%d1 <== NOT EXECUTED
req->aiocbp->return_value = 0;
if ((aio_request_queue.idle_threads == 0) &&
4652a: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
/* _POSIX_PRIORITIZED_IO and _POSIX_PRIORITY_SCHEDULING are defined,
we can use aio_reqprio to lower the priority of the request */
pthread_getschedparam (pthread_self(), &policy, ¶m);
req->caller_thread = pthread_self ();
4652e: 2540 0010 movel %d0,%a2@(16) <== NOT EXECUTED
req->priority = param.sched_priority - req->aiocbp->aio_reqprio;
46532: 202e ffdc movel %fp@(-36),%d0 <== NOT EXECUTED
46536: 90a8 0014 subl %a0@(20),%d0 <== NOT EXECUTED
req->policy = policy;
4653a: 256e fff8 0008 movel %fp@(-8),%a2@(8) <== NOT EXECUTED
/* _POSIX_PRIORITIZED_IO and _POSIX_PRIORITY_SCHEDULING are defined,
we can use aio_reqprio to lower the priority of the request */
pthread_getschedparam (pthread_self(), &policy, ¶m);
req->caller_thread = pthread_self ();
req->priority = param.sched_priority - req->aiocbp->aio_reqprio;
46540: 2540 000c movel %d0,%a2@(12) <== NOT EXECUTED
req->policy = policy;
req->aiocbp->error_code = EINPROGRESS;
46544: 2141 0030 movel %d1,%a0@(48) <== NOT EXECUTED
req->aiocbp->return_value = 0;
46548: 42a8 0034 clrl %a0@(52) <== NOT EXECUTED
if ((aio_request_queue.idle_threads == 0) &&
4654c: 4ab9 0006 0510 tstl 60510 <aio_request_queue+0x68> <== NOT EXECUTED
46552: 6600 00ae bnew 46602 <rtems_aio_enqueue+0x124> <== NOT EXECUTED
46556: 7004 moveq #4,%d0 <== NOT EXECUTED
46558: b0b9 0006 050c cmpl 6050c <aio_request_queue+0x64>,%d0 <== NOT EXECUTED
4655e: 6d00 00a2 bltw 46602 <rtems_aio_enqueue+0x124> <== NOT EXECUTED
aio_request_queue.active_threads < AIO_MAX_THREADS)
/* we still have empty places on the active_threads chain */
{
chain = &aio_request_queue.work_req;
r_chain = rtems_aio_search_fd (chain, req->aiocbp->aio_fildes, 1);
46562: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
46566: 2f10 movel %a0@,%sp@- <== NOT EXECUTED
46568: 4879 0006 04f0 pea 604f0 <aio_request_queue+0x48> <== NOT EXECUTED
4656e: 4eb9 0004 60e6 jsr 460e6 <rtems_aio_search_fd> <== NOT EXECUTED
if (r_chain->new_fd == 1) {
46574: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
46578: 7201 moveq #1,%d1 <== NOT EXECUTED
if ((aio_request_queue.idle_threads == 0) &&
aio_request_queue.active_threads < AIO_MAX_THREADS)
/* we still have empty places on the active_threads chain */
{
chain = &aio_request_queue.work_req;
r_chain = rtems_aio_search_fd (chain, req->aiocbp->aio_fildes, 1);
4657a: 2640 moveal %d0,%a3 <== NOT EXECUTED
4657c: 2800 movel %d0,%d4 <== NOT EXECUTED
4657e: 2600 movel %d0,%d3 <== NOT EXECUTED
46580: 5084 addql #8,%d4 <== NOT EXECUTED
46582: 0683 0000 001c addil #28,%d3 <== NOT EXECUTED
46588: 49eb 0020 lea %a3@(32),%a4 <== NOT EXECUTED
if (r_chain->new_fd == 1) {
4658c: b2ab 0018 cmpl %a3@(24),%d1 <== NOT EXECUTED
46590: 665e bnes 465f0 <rtems_aio_enqueue+0x112> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Prepend(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
_Chain_Insert(_Chain_Head(the_chain), the_node);
46592: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46594: 2f04 movel %d4,%sp@- <== NOT EXECUTED
46596: 4eb9 0004 86b8 jsr 486b8 <_Chain_Insert> <== NOT EXECUTED
rtems_chain_prepend (&r_chain->perfd, &req->next_prio);
r_chain->new_fd = 0;
4659c: 42ab 0018 clrl %a3@(24) <== NOT EXECUTED
pthread_mutex_init (&r_chain->mutex, NULL);
465a0: 42a7 clrl %sp@- <== NOT EXECUTED
465a2: 2f03 movel %d3,%sp@- <== NOT EXECUTED
465a4: 4eb9 0004 6ce8 jsr 46ce8 <pthread_mutex_init> <== NOT EXECUTED
pthread_cond_init (&r_chain->cond, NULL);
465aa: 42a7 clrl %sp@- <== NOT EXECUTED
465ac: 2f0c movel %a4,%sp@- <== NOT EXECUTED
465ae: 4eb9 0004 6988 jsr 46988 <pthread_cond_init> <== NOT EXECUTED
AIO_printf ("New thread \n");
result = pthread_create (&thid, &aio_request_queue.attr,
465b4: 2f0b movel %a3,%sp@- <== NOT EXECUTED
465b6: 487a fbc0 pea %pc@(46178 <rtems_aio_handle>) <== NOT EXECUTED
465ba: 4879 0006 04b0 pea 604b0 <aio_request_queue+0x8> <== NOT EXECUTED
465c0: 486e fffc pea %fp@(-4) <== NOT EXECUTED
465c4: 4eb9 0004 6ff8 jsr 46ff8 <pthread_create> <== NOT EXECUTED
rtems_aio_handle, (void *) r_chain);
if (result != 0) {
465ca: 4fef 0028 lea %sp@(40),%sp <== NOT EXECUTED
r_chain->new_fd = 0;
pthread_mutex_init (&r_chain->mutex, NULL);
pthread_cond_init (&r_chain->cond, NULL);
AIO_printf ("New thread \n");
result = pthread_create (&thid, &aio_request_queue.attr,
465ce: 2600 movel %d0,%d3 <== NOT EXECUTED
rtems_aio_handle, (void *) r_chain);
if (result != 0) {
465d0: 6714 beqs 465e6 <rtems_aio_enqueue+0x108> <== NOT EXECUTED
pthread_mutex_unlock (&aio_request_queue.mutex);
465d2: 4879 0006 04a8 pea 604a8 <aio_request_queue> <== NOT EXECUTED
return result;
465d8: 2403 movel %d3,%d2 <== NOT EXECUTED
AIO_printf ("New thread \n");
result = pthread_create (&thid, &aio_request_queue.attr,
rtems_aio_handle, (void *) r_chain);
if (result != 0) {
pthread_mutex_unlock (&aio_request_queue.mutex);
465da: 4eb9 0004 6e98 jsr 46e98 <pthread_mutex_unlock> <== NOT EXECUTED
return result;
465e0: 588f addql #4,%sp <== NOT EXECUTED
465e2: 6000 00e8 braw 466cc <rtems_aio_enqueue+0x1ee> <== NOT EXECUTED
}
++aio_request_queue.active_threads;
465e6: 52b9 0006 050c addql #1,6050c <aio_request_queue+0x64> <== NOT EXECUTED
465ec: 6000 00d0 braw 466be <rtems_aio_enqueue+0x1e0> <== NOT EXECUTED
}
else {
/* put request in the fd chain it belongs to */
pthread_mutex_lock (&r_chain->mutex);
465f0: 2f03 movel %d3,%sp@- <== NOT EXECUTED
465f2: 4e95 jsr %a5@ <== NOT EXECUTED
rtems_aio_insert_prio (&r_chain->perfd, req);
465f4: 2f0a movel %a2,%sp@- <== NOT EXECUTED
465f6: 2f04 movel %d4,%sp@- <== NOT EXECUTED
465f8: 4eb9 0004 63e8 jsr 463e8 <rtems_aio_insert_prio> <== NOT EXECUTED
pthread_cond_signal (&r_chain->cond);
465fe: 2f0c movel %a4,%sp@- <== NOT EXECUTED
46600: 603c bras 4663e <rtems_aio_enqueue+0x160> <== NOT EXECUTED
else
{
/* the maximum number of threads has been already created
even though some of them might be idle.
The request belongs to one of the active fd chain */
r_chain = rtems_aio_search_fd (&aio_request_queue.work_req,
46602: 42a7 clrl %sp@- <== NOT EXECUTED
46604: 2f10 movel %a0@,%sp@- <== NOT EXECUTED
46606: 49f9 0004 60e6 lea 460e6 <rtems_aio_search_fd>,%a4 <== NOT EXECUTED
4660c: 4879 0006 04f0 pea 604f0 <aio_request_queue+0x48> <== NOT EXECUTED
46612: 4e94 jsr %a4@ <== NOT EXECUTED
req->aiocbp->aio_fildes, 0);
if (r_chain != NULL)
46614: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
else
{
/* the maximum number of threads has been already created
even though some of them might be idle.
The request belongs to one of the active fd chain */
r_chain = rtems_aio_search_fd (&aio_request_queue.work_req,
46618: 2640 moveal %d0,%a3 <== NOT EXECUTED
req->aiocbp->aio_fildes, 0);
if (r_chain != NULL)
4661a: 4a80 tstl %d0 <== NOT EXECUTED
4661c: 6734 beqs 46652 <rtems_aio_enqueue+0x174> <== NOT EXECUTED
{
pthread_mutex_lock (&r_chain->mutex);
4661e: 2600 movel %d0,%d3 <== NOT EXECUTED
46620: 0683 0000 001c addil #28,%d3 <== NOT EXECUTED
46626: 2f03 movel %d3,%sp@- <== NOT EXECUTED
46628: 4eb9 0004 6e00 jsr 46e00 <pthread_mutex_lock> <== NOT EXECUTED
rtems_aio_insert_prio (&r_chain->perfd, req);
4662e: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46630: 486b 0008 pea %a3@(8) <== NOT EXECUTED
46634: 4eb9 0004 63e8 jsr 463e8 <rtems_aio_insert_prio> <== NOT EXECUTED
pthread_cond_signal (&r_chain->cond);
4663a: 486b 0020 pea %a3@(32) <== NOT EXECUTED
4663e: 4eb9 0004 6a2c jsr 46a2c <pthread_cond_signal> <== NOT EXECUTED
pthread_mutex_unlock (&r_chain->mutex);
46644: 2f03 movel %d3,%sp@- <== NOT EXECUTED
46646: 4eb9 0004 6e98 jsr 46e98 <pthread_mutex_unlock> <== NOT EXECUTED
4664c: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
46650: 606c bras 466be <rtems_aio_enqueue+0x1e0> <== NOT EXECUTED
} else {
/* or to the idle chain */
chain = &aio_request_queue.idle_req;
r_chain = rtems_aio_search_fd (chain, req->aiocbp->aio_fildes, 1);
46652: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
46656: 206a 0014 moveal %a2@(20),%a0 <== NOT EXECUTED
4665a: 2f10 movel %a0@,%sp@- <== NOT EXECUTED
4665c: 4879 0006 04fc pea 604fc <aio_request_queue+0x54> <== NOT EXECUTED
46662: 4e94 jsr %a4@ <== NOT EXECUTED
if (r_chain->new_fd == 1) {
46664: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
46668: 7201 moveq #1,%d1 <== NOT EXECUTED
} else {
/* or to the idle chain */
chain = &aio_request_queue.idle_req;
r_chain = rtems_aio_search_fd (chain, req->aiocbp->aio_fildes, 1);
4666a: 2640 moveal %d0,%a3 <== NOT EXECUTED
4666c: 5080 addql #8,%d0 <== NOT EXECUTED
if (r_chain->new_fd == 1) {
4666e: b2ab 0018 cmpl %a3@(24),%d1 <== NOT EXECUTED
46672: 663e bnes 466b2 <rtems_aio_enqueue+0x1d4> <== NOT EXECUTED
46674: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46676: 2f00 movel %d0,%sp@- <== NOT EXECUTED
46678: 4eb9 0004 86b8 jsr 486b8 <_Chain_Insert> <== NOT EXECUTED
/* If this is a new fd chain we signal the idle threads that
might be waiting for requests */
AIO_printf (" New chain on waiting queue \n ");
rtems_chain_prepend (&r_chain->perfd, &req->next_prio);
r_chain->new_fd = 0;
4667e: 42ab 0018 clrl %a3@(24) <== NOT EXECUTED
pthread_mutex_init (&r_chain->mutex, NULL);
46682: 42a7 clrl %sp@- <== NOT EXECUTED
46684: 486b 001c pea %a3@(28) <== NOT EXECUTED
46688: 4eb9 0004 6ce8 jsr 46ce8 <pthread_mutex_init> <== NOT EXECUTED
pthread_cond_init (&r_chain->cond, NULL);
4668e: 42a7 clrl %sp@- <== NOT EXECUTED
46690: 486b 0020 pea %a3@(32) <== NOT EXECUTED
46694: 4eb9 0004 6988 jsr 46988 <pthread_cond_init> <== NOT EXECUTED
pthread_cond_signal (&aio_request_queue.new_req);
4669a: 4879 0006 04ac pea 604ac <aio_request_queue+0x4> <== NOT EXECUTED
466a0: 4eb9 0004 6a2c jsr 46a2c <pthread_cond_signal> <== NOT EXECUTED
++aio_request_queue.idle_threads;
466a6: 4fef 001c lea %sp@(28),%sp <== NOT EXECUTED
466aa: 52b9 0006 0510 addql #1,60510 <aio_request_queue+0x68> <== NOT EXECUTED
466b0: 600c bras 466be <rtems_aio_enqueue+0x1e0> <== NOT EXECUTED
} else
/* just insert the request in the existing fd chain */
rtems_aio_insert_prio (&r_chain->perfd, req);
466b2: 2f0a movel %a2,%sp@- <== NOT EXECUTED
466b4: 2f00 movel %d0,%sp@- <== NOT EXECUTED
466b6: 4eb9 0004 63e8 jsr 463e8 <rtems_aio_insert_prio> <== NOT EXECUTED
466bc: 508f addql #8,%sp <== NOT EXECUTED
}
}
pthread_mutex_unlock (&aio_request_queue.mutex);
466be: 4879 0006 04a8 pea 604a8 <aio_request_queue> <== NOT EXECUTED
466c4: 4eb9 0004 6e98 jsr 46e98 <pthread_mutex_unlock> <== NOT EXECUTED
return 0;
466ca: 588f addql #4,%sp <== NOT EXECUTED
}
466cc: 2002 movel %d2,%d0 <== NOT EXECUTED
466ce: 4cee 3c1c ffc0 moveml %fp@(-64),%d2-%d4/%a2-%a5 <== NOT EXECUTED
466d4: 4e5e unlk %fp <== NOT EXECUTED
00046178 <rtems_aio_handle>:
* NULL - if error
*/
static void *
rtems_aio_handle (void *arg)
{
46178: 4e56 ffa8 linkw %fp,#-88 <== NOT EXECUTED
4617c: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@ <== NOT EXECUTED
pthread_mutex_unlock (&r_chain->mutex);
pthread_mutex_lock (&aio_request_queue.mutex);
if (rtems_chain_is_empty (chain))
{
clock_gettime (CLOCK_REALTIME, &timeout);
46180: 240e movel %fp,%d2 <== NOT EXECUTED
node = rtems_chain_first (chain);
req = (rtems_aio_request *) node;
/* See _POSIX_PRIORITIZE_IO and _POSIX_PRIORITY_SCHEDULING
discussion in rtems_aio_enqueue () */
pthread_getschedparam (pthread_self(), &policy, ¶m);
46182: 280e movel %fp,%d4 <== NOT EXECUTED
/* acquire the mutex of the current fd chain.
we don't need to lock the queue mutex since we can
add requests to idle fd chains or even active ones
if the working request has been extracted from the
chain */
result = pthread_mutex_lock (&r_chain->mutex);
46184: 2e3c 0004 6e00 movel #290304,%d7 <== NOT EXECUTED
4618a: 4bf9 0004 6e98 lea 46e98 <pthread_mutex_unlock>,%a5 <== NOT EXECUTED
pthread_mutex_unlock (&r_chain->mutex);
pthread_mutex_lock (&aio_request_queue.mutex);
if (rtems_chain_is_empty (chain))
{
clock_gettime (CLOCK_REALTIME, &timeout);
46190: 0682 ffff fff4 addil #-12,%d2 <== NOT EXECUTED
46196: 2c3c 0004 6858 movel #288856,%d6 <== NOT EXECUTED
timeout.tv_sec += 3;
timeout.tv_nsec = 0;
result = pthread_cond_timedwait (&r_chain->cond,
4619c: 2a3c 0004 6aa0 movel #289440,%d5 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void rtems_chain_extract(
rtems_chain_node *the_node
)
{
_Chain_Extract( the_node );
461a2: 49f9 0004 865c lea 4865c <_Chain_Extract>,%a4 <== NOT EXECUTED
node = rtems_chain_first (chain);
req = (rtems_aio_request *) node;
/* See _POSIX_PRIORITIZE_IO and _POSIX_PRIORITY_SCHEDULING
discussion in rtems_aio_enqueue () */
pthread_getschedparam (pthread_self(), &policy, ¶m);
461a8: 0684 ffff ffd8 addil #-40,%d4 <== NOT EXECUTED
static void *
rtems_aio_handle (void *arg)
{
rtems_aio_request_chain *r_chain = arg;
461ae: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
/* acquire the mutex of the current fd chain.
we don't need to lock the queue mutex since we can
add requests to idle fd chains or even active ones
if the working request has been extracted from the
chain */
result = pthread_mutex_lock (&r_chain->mutex);
461b2: 260a movel %a2,%d3 <== NOT EXECUTED
461b4: 0683 0000 001c addil #28,%d3 <== NOT EXECUTED
461ba: 2047 moveal %d7,%a0 <== NOT EXECUTED
461bc: 2f03 movel %d3,%sp@- <== NOT EXECUTED
461be: 4e90 jsr %a0@ <== NOT EXECUTED
if (result != 0)
461c0: 588f addql #4,%sp <== NOT EXECUTED
461c2: 4a80 tstl %d0 <== NOT EXECUTED
461c4: 6600 0216 bnew 463dc <rtems_aio_handle+0x264> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
461c8: 200a movel %a2,%d0 <== NOT EXECUTED
461ca: 0680 0000 000c addil #12,%d0 <== NOT EXECUTED
}
AIO_printf ("Thread finished\n");
return NULL;
}
461d0: 266a 0008 moveal %a2@(8),%a3 <== NOT EXECUTED
/* If the locked chain is not empty, take the first
request extract it, unlock the chain and process
the request, in this way the user can supply more
requests to this fd chain */
if (!rtems_chain_is_empty (chain)) {
461d4: b08b cmpl %a3,%d0 <== NOT EXECUTED
461d6: 6700 00da beqw 462b2 <rtems_aio_handle+0x13a> <== NOT EXECUTED
node = rtems_chain_first (chain);
req = (rtems_aio_request *) node;
/* See _POSIX_PRIORITIZE_IO and _POSIX_PRIORITY_SCHEDULING
discussion in rtems_aio_enqueue () */
pthread_getschedparam (pthread_self(), &policy, ¶m);
461da: 41f9 0004 75dc lea 475dc <pthread_self>,%a0 <== NOT EXECUTED
461e0: 2d48 ffd0 movel %a0,%fp@(-48) <== NOT EXECUTED
461e4: 4e90 jsr %a0@ <== NOT EXECUTED
461e6: 2f04 movel %d4,%sp@- <== NOT EXECUTED
461e8: 486e fffc pea %fp@(-4) <== NOT EXECUTED
461ec: 2f00 movel %d0,%sp@- <== NOT EXECUTED
461ee: 4eb9 0004 7200 jsr 47200 <pthread_getschedparam> <== NOT EXECUTED
param.sched_priority = req->priority;
pthread_setschedparam (pthread_self(), req->policy, ¶m);
461f4: 202b 0008 movel %a3@(8),%d0 <== NOT EXECUTED
req = (rtems_aio_request *) node;
/* See _POSIX_PRIORITIZE_IO and _POSIX_PRIORITY_SCHEDULING
discussion in rtems_aio_enqueue () */
pthread_getschedparam (pthread_self(), &policy, ¶m);
param.sched_priority = req->priority;
461f8: 2d6b 000c ffd8 movel %a3@(12),%fp@(-40) <== NOT EXECUTED
pthread_setschedparam (pthread_self(), req->policy, ¶m);
461fe: 206e ffd0 moveal %fp@(-48),%a0 <== NOT EXECUTED
46202: 2d40 ffd4 movel %d0,%fp@(-44) <== NOT EXECUTED
46206: 4e90 jsr %a0@ <== NOT EXECUTED
46208: 2f04 movel %d4,%sp@- <== NOT EXECUTED
4620a: 2f2e ffd4 movel %fp@(-44),%sp@- <== NOT EXECUTED
4620e: 2f00 movel %d0,%sp@- <== NOT EXECUTED
46210: 4eb9 0004 75f0 jsr 475f0 <pthread_setschedparam> <== NOT EXECUTED
46216: 2f0b movel %a3,%sp@- <== NOT EXECUTED
46218: 4e94 jsr %a4@ <== NOT EXECUTED
rtems_chain_extract (node);
pthread_mutex_unlock (&r_chain->mutex);
4621a: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4621c: 4e95 jsr %a5@ <== NOT EXECUTED
switch (req->aiocbp->aio_lio_opcode) {
4621e: 206b 0014 moveal %a3@(20),%a0 <== NOT EXECUTED
46222: 4fef 0020 lea %sp@(32),%sp <== NOT EXECUTED
46226: 7202 moveq #2,%d1 <== NOT EXECUTED
46228: 2028 002c movel %a0@(44),%d0 <== NOT EXECUTED
4622c: b280 cmpl %d0,%d1 <== NOT EXECUTED
4622e: 672a beqs 4625a <rtems_aio_handle+0xe2> <== NOT EXECUTED
46230: 123c 0003 moveb #3,%d1 <== NOT EXECUTED
46234: b280 cmpl %d0,%d1 <== NOT EXECUTED
46236: 6740 beqs 46278 <rtems_aio_handle+0x100> <== NOT EXECUTED
46238: 123c 0001 moveb #1,%d1 <== NOT EXECUTED
4623c: b280 cmpl %d0,%d1 <== NOT EXECUTED
4623e: 6648 bnes 46288 <rtems_aio_handle+0x110> <== NOT EXECUTED
case LIO_READ:
result = pread (req->aiocbp->aio_fildes,
46240: 2f28 0008 movel %a0@(8),%sp@- <== NOT EXECUTED
46244: 2f28 0004 movel %a0@(4),%sp@- <== NOT EXECUTED
46248: 2f28 0010 movel %a0@(16),%sp@- <== NOT EXECUTED
4624c: 2f28 000c movel %a0@(12),%sp@- <== NOT EXECUTED
46250: 2f10 movel %a0@,%sp@- <== NOT EXECUTED
46252: 4eb9 0004 fa6c jsr 4fa6c <pread> <== NOT EXECUTED
46258: 6018 bras 46272 <rtems_aio_handle+0xfa> <== NOT EXECUTED
(void *) req->aiocbp->aio_buf,
req->aiocbp->aio_nbytes, req->aiocbp->aio_offset);
break;
case LIO_WRITE:
result = pwrite (req->aiocbp->aio_fildes,
4625a: 2f28 0008 movel %a0@(8),%sp@- <== NOT EXECUTED
4625e: 2f28 0004 movel %a0@(4),%sp@- <== NOT EXECUTED
46262: 2f28 0010 movel %a0@(16),%sp@- <== NOT EXECUTED
46266: 2f28 000c movel %a0@(12),%sp@- <== NOT EXECUTED
4626a: 2f10 movel %a0@,%sp@- <== NOT EXECUTED
4626c: 4eb9 0004 fb30 jsr 4fb30 <pwrite> <== NOT EXECUTED
(void *) req->aiocbp->aio_buf,
req->aiocbp->aio_nbytes, req->aiocbp->aio_offset);
break;
46272: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
46276: 600a bras 46282 <rtems_aio_handle+0x10a> <== NOT EXECUTED
case LIO_SYNC:
result = fsync (req->aiocbp->aio_fildes);
46278: 2f10 movel %a0@,%sp@- <== NOT EXECUTED
4627a: 4eb9 0004 c1e4 jsr 4c1e4 <fsync> <== NOT EXECUTED
break;
46280: 588f addql #4,%sp <== NOT EXECUTED
default:
result = -1;
}
if (result == -1) {
46282: 72ff moveq #-1,%d1 <== NOT EXECUTED
46284: b280 cmpl %d0,%d1 <== NOT EXECUTED
46286: 661a bnes 462a2 <rtems_aio_handle+0x12a> <== NOT EXECUTED
req->aiocbp->return_value = -1;
46288: 266b 0014 moveal %a3@(20),%a3 <== NOT EXECUTED
4628c: 70ff moveq #-1,%d0 <== NOT EXECUTED
4628e: 2740 0034 movel %d0,%a3@(52) <== NOT EXECUTED
req->aiocbp->error_code = errno;
46292: 4eb9 0004 efc8 jsr 4efc8 <__errno> <== NOT EXECUTED
46298: 2040 moveal %d0,%a0 <== NOT EXECUTED
4629a: 2750 0030 movel %a0@,%a3@(48) <== NOT EXECUTED
4629e: 6000 ff12 braw 461b2 <rtems_aio_handle+0x3a> <== NOT EXECUTED
} else {
req->aiocbp->return_value = result;
462a2: 206b 0014 moveal %a3@(20),%a0 <== NOT EXECUTED
462a6: 2140 0034 movel %d0,%a0@(52) <== NOT EXECUTED
req->aiocbp->error_code = 0;
462aa: 42a8 0030 clrl %a0@(48) <== NOT EXECUTED
462ae: 6000 ff02 braw 461b2 <rtems_aio_handle+0x3a> <== NOT EXECUTED
wait for a signal on chain, this will unlock the queue.
The fd chain is already unlocked */
struct timespec timeout;
pthread_mutex_unlock (&r_chain->mutex);
462b2: 2f03 movel %d3,%sp@- <== NOT EXECUTED
462b4: 4e95 jsr %a5@ <== NOT EXECUTED
pthread_mutex_lock (&aio_request_queue.mutex);
462b6: 4879 0006 04a8 pea 604a8 <aio_request_queue> <== NOT EXECUTED
462bc: 2047 moveal %d7,%a0 <== NOT EXECUTED
462be: 4e90 jsr %a0@ <== NOT EXECUTED
if (rtems_chain_is_empty (chain))
462c0: 508f addql #8,%sp <== NOT EXECUTED
462c2: b7ea 0008 cmpal %a2@(8),%a3 <== NOT EXECUTED
462c6: 6600 feea bnew 461b2 <rtems_aio_handle+0x3a> <== NOT EXECUTED
{
clock_gettime (CLOCK_REALTIME, &timeout);
462ca: 2f02 movel %d2,%sp@- <== NOT EXECUTED
462cc: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
462d0: 2046 moveal %d6,%a0 <== NOT EXECUTED
timeout.tv_sec += 3;
timeout.tv_nsec = 0;
result = pthread_cond_timedwait (&r_chain->cond,
462d2: 47ea 0020 lea %a2@(32),%a3 <== NOT EXECUTED
pthread_mutex_unlock (&r_chain->mutex);
pthread_mutex_lock (&aio_request_queue.mutex);
if (rtems_chain_is_empty (chain))
{
clock_gettime (CLOCK_REALTIME, &timeout);
462d6: 4e90 jsr %a0@ <== NOT EXECUTED
timeout.tv_sec += 3;
462d8: 56ae fff4 addql #3,%fp@(-12) <== NOT EXECUTED
timeout.tv_nsec = 0;
result = pthread_cond_timedwait (&r_chain->cond,
462dc: 2045 moveal %d5,%a0 <== NOT EXECUTED
462de: 2f02 movel %d2,%sp@- <== NOT EXECUTED
462e0: 4879 0006 04a8 pea 604a8 <aio_request_queue> <== NOT EXECUTED
pthread_mutex_lock (&aio_request_queue.mutex);
if (rtems_chain_is_empty (chain))
{
clock_gettime (CLOCK_REALTIME, &timeout);
timeout.tv_sec += 3;
timeout.tv_nsec = 0;
462e6: 42ae fff8 clrl %fp@(-8) <== NOT EXECUTED
result = pthread_cond_timedwait (&r_chain->cond,
462ea: 2f0b movel %a3,%sp@- <== NOT EXECUTED
462ec: 4e90 jsr %a0@ <== NOT EXECUTED
&aio_request_queue.mutex, &timeout);
/* If no requests were added to the chain we delete the fd chain from
the queue and start working with idle fd chains */
if (result == ETIMEDOUT) {
462ee: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
462f2: 7274 moveq #116,%d1 <== NOT EXECUTED
462f4: b280 cmpl %d0,%d1 <== NOT EXECUTED
462f6: 6600 feba bnew 461b2 <rtems_aio_handle+0x3a> <== NOT EXECUTED
462fa: 2f0a movel %a2,%sp@- <== NOT EXECUTED
462fc: 4e94 jsr %a4@ <== NOT EXECUTED
rtems_chain_extract (&r_chain->next_fd);
pthread_mutex_destroy (&r_chain->mutex);
462fe: 2f03 movel %d3,%sp@- <== NOT EXECUTED
46300: 4eb9 0004 6bc8 jsr 46bc8 <pthread_mutex_destroy> <== NOT EXECUTED
pthread_cond_destroy (&r_chain->cond);
46306: 2f0b movel %a3,%sp@- <== NOT EXECUTED
46308: 4eb9 0004 68c4 jsr 468c4 <pthread_cond_destroy> <== NOT EXECUTED
free (r_chain);
4630e: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46310: 4eb9 0004 31fc jsr 431fc <free> <== NOT EXECUTED
/* If the idle chain is empty sleep for 3 seconds and wait for a
signal. The thread now becomes idle. */
if (rtems_chain_is_empty (&aio_request_queue.idle_req)) {
46316: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
4631a: 41f9 0006 0500 lea 60500 <aio_request_queue+0x58>,%a0 <== NOT EXECUTED
46320: b1f9 0006 04fc cmpal 604fc <aio_request_queue+0x54>,%a0 <== NOT EXECUTED
46326: 6600 00a6 bnew 463ce <rtems_aio_handle+0x256> <== NOT EXECUTED
++aio_request_queue.idle_threads;
clock_gettime (CLOCK_REALTIME, &timeout);
4632a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4632c: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
free (r_chain);
/* If the idle chain is empty sleep for 3 seconds and wait for a
signal. The thread now becomes idle. */
if (rtems_chain_is_empty (&aio_request_queue.idle_req)) {
++aio_request_queue.idle_threads;
46330: 52b9 0006 0510 addql #1,60510 <aio_request_queue+0x68> <== NOT EXECUTED
clock_gettime (CLOCK_REALTIME, &timeout);
46336: 2046 moveal %d6,%a0 <== NOT EXECUTED
46338: 4e90 jsr %a0@ <== NOT EXECUTED
timeout.tv_sec += 3;
4633a: 56ae fff4 addql #3,%fp@(-12) <== NOT EXECUTED
timeout.tv_nsec = 0;
result = pthread_cond_timedwait (&aio_request_queue.new_req,
4633e: 2045 moveal %d5,%a0 <== NOT EXECUTED
46340: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46342: 4879 0006 04a8 pea 604a8 <aio_request_queue> <== NOT EXECUTED
46348: 4879 0006 04ac pea 604ac <aio_request_queue+0x4> <== NOT EXECUTED
signal. The thread now becomes idle. */
if (rtems_chain_is_empty (&aio_request_queue.idle_req)) {
++aio_request_queue.idle_threads;
clock_gettime (CLOCK_REALTIME, &timeout);
timeout.tv_sec += 3;
timeout.tv_nsec = 0;
4634e: 42ae fff8 clrl %fp@(-8) <== NOT EXECUTED
result = pthread_cond_timedwait (&aio_request_queue.new_req,
46352: 4e90 jsr %a0@ <== NOT EXECUTED
&aio_request_queue.mutex,
&timeout);
/* If no new fd chain was added in the idle requests
then this thread is finished */
if (result == ETIMEDOUT) {
46354: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
46358: 7274 moveq #116,%d1 <== NOT EXECUTED
4635a: b280 cmpl %d0,%d1 <== NOT EXECUTED
4635c: 6610 bnes 4636e <rtems_aio_handle+0x1f6> <== NOT EXECUTED
pthread_mutex_unlock (&aio_request_queue.mutex);
4635e: 4879 0006 04a8 pea 604a8 <aio_request_queue> <== NOT EXECUTED
46364: 4eb9 0004 6e98 jsr 46e98 <pthread_mutex_unlock> <== NOT EXECUTED
return NULL;
4636a: 588f addql #4,%sp <== NOT EXECUTED
4636c: 606e bras 463dc <rtems_aio_handle+0x264> <== NOT EXECUTED
}
AIO_printf ("Thread finished\n");
return NULL;
}
4636e: 2679 0006 04fc moveal 604fc <aio_request_queue+0x54>,%a3 <== NOT EXECUTED
return NULL;
}
/* Otherwise move this chain to the working chain and
start the loop all over again */
--aio_request_queue.idle_threads;
46374: 53b9 0006 0510 subql #1,60510 <aio_request_queue+0x68> <== NOT EXECUTED
4637a: 2f0b movel %a3,%sp@- <== NOT EXECUTED
4637c: 4e94 jsr %a4@ <== NOT EXECUTED
node = rtems_chain_first (&aio_request_queue.idle_req);
rtems_chain_extract (node);
r_chain = rtems_aio_search_fd (&aio_request_queue.work_req,
4637e: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
46382: 2f2b 0014 movel %a3@(20),%sp@- <== NOT EXECUTED
46386: 4879 0006 04f0 pea 604f0 <aio_request_queue+0x48> <== NOT EXECUTED
4638c: 4eb9 0004 60e6 jsr 460e6 <rtems_aio_search_fd> <== NOT EXECUTED
46392: 2440 moveal %d0,%a2 <== NOT EXECUTED
((rtems_aio_request_chain *)node)->fildes,
1);
r_chain->new_fd = 0;
46394: 42aa 0018 clrl %a2@(24) <== NOT EXECUTED
pthread_mutex_init (&r_chain->mutex, NULL);
46398: 42a7 clrl %sp@- <== NOT EXECUTED
4639a: 486a 001c pea %a2@(28) <== NOT EXECUTED
4639e: 4eb9 0004 6ce8 jsr 46ce8 <pthread_mutex_init> <== NOT EXECUTED
pthread_cond_init (&r_chain->cond, NULL);
463a4: 42a7 clrl %sp@- <== NOT EXECUTED
463a6: 486a 0020 pea %a2@(32) <== NOT EXECUTED
463aa: 4eb9 0004 6988 jsr 46988 <pthread_cond_init> <== NOT EXECUTED
r_chain->perfd = ((rtems_aio_request_chain *)node)->perfd;
463b0: 4fef 0020 lea %sp@(32),%sp <== NOT EXECUTED
463b4: 4878 000c pea c <OPER1> <== NOT EXECUTED
463b8: 486b 0008 pea %a3@(8) <== NOT EXECUTED
463bc: 486a 0008 pea %a2@(8) <== NOT EXECUTED
463c0: 4eb9 0004 f8f4 jsr 4f8f4 <memcpy> <== NOT EXECUTED
463c6: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
463ca: 6000 fde6 braw 461b2 <rtems_aio_handle+0x3a> <== NOT EXECUTED
}
else
/* If there was a request added in the initial fd chain then release
the mutex and process it */
pthread_mutex_unlock (&aio_request_queue.mutex);
463ce: 4879 0006 04a8 pea 604a8 <aio_request_queue> <== NOT EXECUTED
463d4: 4e95 jsr %a5@ <== NOT EXECUTED
463d6: 588f addql #4,%sp <== NOT EXECUTED
463d8: 6000 fdd8 braw 461b2 <rtems_aio_handle+0x3a> <== NOT EXECUTED
}
AIO_printf ("Thread finished\n");
return NULL;
}
463dc: 4280 clrl %d0 <== NOT EXECUTED
463de: 4cee 3cfc ffa8 moveml %fp@(-88),%d2-%d7/%a2-%a5 <== NOT EXECUTED
463e4: 4e5e unlk %fp <== NOT EXECUTED
00045ffc <rtems_aio_init>:
* 0 - if initialization succeeded
*/
int
rtems_aio_init (void)
{
45ffc: 4e56 0000 linkw %fp,#0
46000: 2f02 movel %d2,%sp@-
int result = 0;
result = pthread_attr_init (&aio_request_queue.attr);
46002: 4879 0006 04b0 pea 604b0 <aio_request_queue+0x8>
46008: 4eb9 0004 6fa4 jsr 46fa4 <pthread_attr_init>
if (result != 0)
4600e: 588f addql #4,%sp
int
rtems_aio_init (void)
{
int result = 0;
result = pthread_attr_init (&aio_request_queue.attr);
46010: 2400 movel %d0,%d2
if (result != 0)
46012: 6600 00c8 bnew 460dc <rtems_aio_init+0xe0>
return result;
result =
46016: 42a7 clrl %sp@-
46018: 4879 0006 04b0 pea 604b0 <aio_request_queue+0x8>
4601e: 4eb9 0004 6fd0 jsr 46fd0 <pthread_attr_setdetachstate>
pthread_attr_setdetachstate (&aio_request_queue.attr,
PTHREAD_CREATE_DETACHED);
if (result != 0)
46024: 508f addql #8,%sp
46026: 4a80 tstl %d0
46028: 670e beqs 46038 <rtems_aio_init+0x3c> <== ALWAYS TAKEN
pthread_attr_destroy (&aio_request_queue.attr);
4602a: 4879 0006 04b0 pea 604b0 <aio_request_queue+0x8> <== NOT EXECUTED
46030: 4eb9 0004 6f88 jsr 46f88 <pthread_attr_destroy> <== NOT EXECUTED
46036: 588f addql #4,%sp <== NOT EXECUTED
result = pthread_mutex_init (&aio_request_queue.mutex, NULL);
46038: 42a7 clrl %sp@-
4603a: 4879 0006 04a8 pea 604a8 <aio_request_queue>
46040: 4eb9 0004 6ce8 jsr 46ce8 <pthread_mutex_init>
if (result != 0)
46046: 508f addql #8,%sp
46048: 4a80 tstl %d0
4604a: 670e beqs 4605a <rtems_aio_init+0x5e> <== ALWAYS TAKEN
pthread_attr_destroy (&aio_request_queue.attr);
4604c: 4879 0006 04b0 pea 604b0 <aio_request_queue+0x8> <== NOT EXECUTED
46052: 4eb9 0004 6f88 jsr 46f88 <pthread_attr_destroy> <== NOT EXECUTED
46058: 588f addql #4,%sp <== NOT EXECUTED
result = pthread_cond_init (&aio_request_queue.new_req, NULL);
4605a: 42a7 clrl %sp@-
4605c: 4879 0006 04ac pea 604ac <aio_request_queue+0x4>
46062: 4eb9 0004 6988 jsr 46988 <pthread_cond_init>
if (result != 0) {
46068: 508f addql #8,%sp
result = pthread_mutex_init (&aio_request_queue.mutex, NULL);
if (result != 0)
pthread_attr_destroy (&aio_request_queue.attr);
result = pthread_cond_init (&aio_request_queue.new_req, NULL);
4606a: 2400 movel %d0,%d2
if (result != 0) {
4606c: 671a beqs 46088 <rtems_aio_init+0x8c> <== ALWAYS TAKEN
pthread_mutex_destroy (&aio_request_queue.mutex);
4606e: 4879 0006 04a8 pea 604a8 <aio_request_queue> <== NOT EXECUTED
46074: 4eb9 0004 6bc8 jsr 46bc8 <pthread_mutex_destroy> <== NOT EXECUTED
pthread_attr_destroy (&aio_request_queue.attr);
4607a: 4879 0006 04b0 pea 604b0 <aio_request_queue+0x8> <== NOT EXECUTED
46080: 4eb9 0004 6f88 jsr 46f88 <pthread_attr_destroy> <== NOT EXECUTED
46086: 508f addql #8,%sp <== NOT EXECUTED
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
head->previous = NULL;
46088: 42b9 0006 04f4 clrl 604f4 <aio_request_queue+0x4c>
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
4608e: 203c 0006 04f4 movel #394484,%d0
46094: 23c0 0006 04f0 movel %d0,604f0 <aio_request_queue+0x48>
head->previous = NULL;
tail->previous = head;
4609a: 203c 0006 04f0 movel #394480,%d0
460a0: 23c0 0006 04f8 movel %d0,604f8 <aio_request_queue+0x50>
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
460a6: 203c 0006 0500 movel #394496,%d0
460ac: 23c0 0006 04fc movel %d0,604fc <aio_request_queue+0x54>
head->previous = NULL;
tail->previous = head;
460b2: 203c 0006 04fc movel #394492,%d0
460b8: 23c0 0006 0504 movel %d0,60504 <aio_request_queue+0x5c>
rtems_chain_initialize_empty (&aio_request_queue.work_req);
rtems_chain_initialize_empty (&aio_request_queue.idle_req);
aio_request_queue.active_threads = 0;
aio_request_queue.idle_threads = 0;
aio_request_queue.initialized = AIO_QUEUE_INITIALIZED;
460be: 203c 0000 b00b movel #45067,%d0
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
head->previous = NULL;
460c4: 42b9 0006 0500 clrl 60500 <aio_request_queue+0x58>
}
rtems_chain_initialize_empty (&aio_request_queue.work_req);
rtems_chain_initialize_empty (&aio_request_queue.idle_req);
aio_request_queue.active_threads = 0;
460ca: 42b9 0006 050c clrl 6050c <aio_request_queue+0x64>
aio_request_queue.idle_threads = 0;
460d0: 42b9 0006 0510 clrl 60510 <aio_request_queue+0x68>
aio_request_queue.initialized = AIO_QUEUE_INITIALIZED;
460d6: 23c0 0006 0508 movel %d0,60508 <aio_request_queue+0x60>
return result;
}
460dc: 2002 movel %d2,%d0
460de: 242e fffc movel %fp@(-4),%d2
460e2: 4e5e unlk %fp <== NOT EXECUTED
000463e8 <rtems_aio_insert_prio>:
* NONE
*/
void
rtems_aio_insert_prio (rtems_chain_control *chain, rtems_aio_request *req)
{
463e8: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
463ec: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
}
AIO_printf ("Thread finished\n");
return NULL;
}
463f0: 2240 moveal %d0,%a1 <== NOT EXECUTED
* NONE
*/
void
rtems_aio_insert_prio (rtems_chain_control *chain, rtems_aio_request *req)
{
463f2: 2f0b movel %a3,%sp@- <== NOT EXECUTED
463f4: 2f0a movel %a2,%sp@- <== NOT EXECUTED
463f6: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
}
AIO_printf ("Thread finished\n");
return NULL;
}
463fa: 2059 moveal %a1@+,%a0 <== NOT EXECUTED
rtems_chain_node *node;
AIO_printf ("FD exists \n");
node = rtems_chain_first (chain);
if (rtems_chain_is_empty (chain)) {
463fc: b3c8 cmpal %a0,%a1 <== NOT EXECUTED
463fe: 672e beqs 4642e <rtems_aio_insert_prio+0x46> <== NOT EXECUTED
AIO_printf ("First in chain \n");
rtems_chain_prepend (chain, &req->next_prio);
} else {
AIO_printf ("Add by priority \n");
int prio = ((rtems_aio_request *) node)->aiocbp->aio_reqprio;
46400: 2668 0014 moveal %a0@(20),%a3 <== NOT EXECUTED
46404: 202b 0014 movel %a3@(20),%d0 <== NOT EXECUTED
while (req->aiocbp->aio_reqprio > prio &&
46408: 266a 0014 moveal %a2@(20),%a3 <== NOT EXECUTED
4640c: 222b 0014 movel %a3@(20),%d1 <== NOT EXECUTED
46410: 600a bras 4641c <rtems_aio_insert_prio+0x34> <== NOT EXECUTED
}
AIO_printf ("Thread finished\n");
return NULL;
}
46412: 2050 moveal %a0@,%a0 <== NOT EXECUTED
int prio = ((rtems_aio_request *) node)->aiocbp->aio_reqprio;
while (req->aiocbp->aio_reqprio > prio &&
!rtems_chain_is_tail (chain, node)) {
node = rtems_chain_next (node);
prio = ((rtems_aio_request *) node)->aiocbp->aio_reqprio;
46414: 2668 0014 moveal %a0@(20),%a3 <== NOT EXECUTED
46418: 202b 0014 movel %a3@(20),%d0 <== NOT EXECUTED
rtems_chain_prepend (chain, &req->next_prio);
} else {
AIO_printf ("Add by priority \n");
int prio = ((rtems_aio_request *) node)->aiocbp->aio_reqprio;
while (req->aiocbp->aio_reqprio > prio &&
4641c: b081 cmpl %d1,%d0 <== NOT EXECUTED
4641e: 6c04 bges 46424 <rtems_aio_insert_prio+0x3c> <== NOT EXECUTED
46420: b3c8 cmpal %a0,%a1 <== NOT EXECUTED
46422: 66ee bnes 46412 <rtems_aio_insert_prio+0x2a> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void rtems_chain_insert(
rtems_chain_node *after_node,
rtems_chain_node *the_node
)
{
_Chain_Insert( after_node, the_node );
46424: 2d4a 000c movel %a2,%fp@(12) <== NOT EXECUTED
46428: 2d68 0004 0008 movel %a0@(4),%fp@(8) <== NOT EXECUTED
}
rtems_chain_insert (node->previous, &req->next_prio);
}
}
4642e: 245f moveal %sp@+,%a2 <== NOT EXECUTED
46430: 265f moveal %sp@+,%a3 <== NOT EXECUTED
46432: 4e5e unlk %fp <== NOT EXECUTED
46434: 4ef9 0004 86b8 jmp 486b8 <_Chain_Insert> <== NOT EXECUTED
0004643a <rtems_aio_remove_fd>:
* Output parameters:
* NONE
*/
void rtems_aio_remove_fd (rtems_aio_request_chain *r_chain)
{
4643a: 4e56 fff0 linkw %fp,#-16 <== NOT EXECUTED
4643e: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
46442: 48d7 1c04 moveml %d2/%a2-%a4,%sp@ <== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _Chain_Is_tail(
Chain_Control *the_chain,
const Chain_Node *the_node
)
{
return (the_node == _Chain_Tail(the_chain));
46446: 2408 movel %a0,%d2 <== NOT EXECUTED
46448: 0682 0000 000c addil #12,%d2 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void rtems_chain_extract(
rtems_chain_node *the_node
)
{
_Chain_Extract( the_node );
4644e: 49f9 0004 865c lea 4865c <_Chain_Extract>,%a4 <== NOT EXECUTED
{
rtems_chain_extract (node);
rtems_aio_request *req = (rtems_aio_request *) node;
req->aiocbp->error_code = ECANCELED;
req->aiocbp->return_value = -1;
free (req);
46454: 47f9 0004 31fc lea 431fc <free>,%a3 <== NOT EXECUTED
}
AIO_printf ("Thread finished\n");
return NULL;
}
4645a: 2468 0008 moveal %a0@(8),%a2 <== NOT EXECUTED
rtems_chain_node *node;
chain = &r_chain->perfd;
node = rtems_chain_first (chain);
while (!rtems_chain_is_tail (chain, node))
4645e: 601e bras 4647e <rtems_aio_remove_fd+0x44> <== NOT EXECUTED
46460: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46462: 4e94 jsr %a4@ <== NOT EXECUTED
{
rtems_chain_extract (node);
rtems_aio_request *req = (rtems_aio_request *) node;
req->aiocbp->error_code = ECANCELED;
46464: 226a 0014 moveal %a2@(20),%a1 <== NOT EXECUTED
46468: 203c 0000 008c movel #140,%d0 <== NOT EXECUTED
4646e: 2340 0030 movel %d0,%a1@(48) <== NOT EXECUTED
req->aiocbp->return_value = -1;
46472: 70ff moveq #-1,%d0 <== NOT EXECUTED
46474: 2340 0034 movel %d0,%a1@(52) <== NOT EXECUTED
free (req);
46478: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4647a: 4e93 jsr %a3@ <== NOT EXECUTED
4647c: 508f addql #8,%sp <== NOT EXECUTED
rtems_chain_node *node;
chain = &r_chain->perfd;
node = rtems_chain_first (chain);
while (!rtems_chain_is_tail (chain, node))
4647e: b48a cmpl %a2,%d2 <== NOT EXECUTED
46480: 66de bnes 46460 <rtems_aio_remove_fd+0x26> <== NOT EXECUTED
rtems_aio_request *req = (rtems_aio_request *) node;
req->aiocbp->error_code = ECANCELED;
req->aiocbp->return_value = -1;
free (req);
}
}
46482: 4cee 1c04 fff0 moveml %fp@(-16),%d2/%a2-%a4 <== NOT EXECUTED
46488: 4e5e unlk %fp <== NOT EXECUTED
0004648c <rtems_aio_remove_req>:
* AIO_NOTCANCELED - if request was not canceled
* AIO_CANCELED - if request was canceled
*/
int rtems_aio_remove_req (rtems_chain_control *chain, struct aiocb *aiocbp)
{
4648c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
}
AIO_printf ("Thread finished\n");
return NULL;
}
46490: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
* AIO_NOTCANCELED - if request was not canceled
* AIO_CANCELED - if request was canceled
*/
int rtems_aio_remove_req (rtems_chain_control *chain, struct aiocb *aiocbp)
{
46494: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46496: 202e 000c movel %fp@(12),%d0 <== NOT EXECUTED
}
AIO_printf ("Thread finished\n");
return NULL;
}
4649a: 2458 moveal %a0@+,%a2 <== NOT EXECUTED
rtems_chain_node *node = rtems_chain_first (chain);
rtems_aio_request *current;
current = (rtems_aio_request *) node;
while (!rtems_chain_is_tail (chain, node) && current->aiocbp != aiocbp) {
4649c: 6002 bras 464a0 <rtems_aio_remove_req+0x14> <== NOT EXECUTED
}
AIO_printf ("Thread finished\n");
return NULL;
}
4649e: 2452 moveal %a2@,%a2 <== NOT EXECUTED
rtems_chain_node *node = rtems_chain_first (chain);
rtems_aio_request *current;
current = (rtems_aio_request *) node;
while (!rtems_chain_is_tail (chain, node) && current->aiocbp != aiocbp) {
464a0: b1ca cmpal %a2,%a0 <== NOT EXECUTED
464a2: 6730 beqs 464d4 <rtems_aio_remove_req+0x48> <== NOT EXECUTED
464a4: b0aa 0014 cmpl %a2@(20),%d0 <== NOT EXECUTED
464a8: 66f4 bnes 4649e <rtems_aio_remove_req+0x12> <== NOT EXECUTED
464aa: 2f0a movel %a2,%sp@- <== NOT EXECUTED
464ac: 4eb9 0004 865c jsr 4865c <_Chain_Extract> <== NOT EXECUTED
if (rtems_chain_is_tail (chain, node))
return AIO_NOTCANCELED;
else
{
rtems_chain_extract (node);
current->aiocbp->error_code = ECANCELED;
464b2: 206a 0014 moveal %a2@(20),%a0 <== NOT EXECUTED
464b6: 203c 0000 008c movel #140,%d0 <== NOT EXECUTED
464bc: 2140 0030 movel %d0,%a0@(48) <== NOT EXECUTED
current->aiocbp->return_value = -1;
464c0: 70ff moveq #-1,%d0 <== NOT EXECUTED
464c2: 2140 0034 movel %d0,%a0@(52) <== NOT EXECUTED
free (current);
464c6: 2f0a movel %a2,%sp@- <== NOT EXECUTED
464c8: 4eb9 0004 31fc jsr 431fc <free> <== NOT EXECUTED
}
return AIO_CANCELED;
464ce: 508f addql #8,%sp <== NOT EXECUTED
464d0: 4280 clrl %d0 <== NOT EXECUTED
464d2: 6002 bras 464d6 <rtems_aio_remove_req+0x4a> <== NOT EXECUTED
node = rtems_chain_next (node);
current = (rtems_aio_request *) node;
}
if (rtems_chain_is_tail (chain, node))
return AIO_NOTCANCELED;
464d4: 7001 moveq #1,%d0 <== NOT EXECUTED
current->aiocbp->return_value = -1;
free (current);
}
return AIO_CANCELED;
}
464d6: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
464da: 4e5e unlk %fp <== NOT EXECUTED
000460e6 <rtems_aio_search_fd>:
*
*/
rtems_aio_request_chain *
rtems_aio_search_fd (rtems_chain_control *chain, int fildes, int create)
{
460e6: 4e56 ffec linkw %fp,#-20 <== NOT EXECUTED
460ea: 48d7 1c0c moveml %d2-%d3/%a2-%a4,%sp@ <== NOT EXECUTED
460ee: 266e 0008 moveal %fp@(8),%a3 <== NOT EXECUTED
}
AIO_printf ("Thread finished\n");
return NULL;
}
460f2: 204b moveal %a3,%a0 <== NOT EXECUTED
*
*/
rtems_aio_request_chain *
rtems_aio_search_fd (rtems_chain_control *chain, int fildes, int create)
{
460f4: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
}
AIO_printf ("Thread finished\n");
return NULL;
}
460f8: 2458 moveal %a0@+,%a2 <== NOT EXECUTED
460fa: 6002 bras 460fe <rtems_aio_search_fd+0x18> <== NOT EXECUTED
460fc: 2452 moveal %a2@,%a2 <== NOT EXECUTED
rtems_chain_node *node;
node = rtems_chain_first (chain);
r_chain = (rtems_aio_request_chain *) node;
while (r_chain->fildes < fildes && !rtems_chain_is_tail (chain, node)) {
460fe: 202a 0014 movel %a2@(20),%d0 <== NOT EXECUTED
node = rtems_chain_next (node);
r_chain = (rtems_aio_request_chain *) node;
46102: 260a movel %a2,%d3 <== NOT EXECUTED
rtems_chain_node *node;
node = rtems_chain_first (chain);
r_chain = (rtems_aio_request_chain *) node;
while (r_chain->fildes < fildes && !rtems_chain_is_tail (chain, node)) {
46104: b480 cmpl %d0,%d2 <== NOT EXECUTED
46106: 6e04 bgts 4610c <rtems_aio_search_fd+0x26> <== NOT EXECUTED
node = rtems_chain_next (node);
r_chain = (rtems_aio_request_chain *) node;
}
if (r_chain->fildes == fildes)
46108: 6708 beqs 46112 <rtems_aio_search_fd+0x2c> <== NOT EXECUTED
4610a: 600c bras 46118 <rtems_aio_search_fd+0x32> <== NOT EXECUTED
rtems_chain_node *node;
node = rtems_chain_first (chain);
r_chain = (rtems_aio_request_chain *) node;
while (r_chain->fildes < fildes && !rtems_chain_is_tail (chain, node)) {
4610c: b1ca cmpal %a2,%a0 <== NOT EXECUTED
4610e: 66ec bnes 460fc <rtems_aio_search_fd+0x16> <== NOT EXECUTED
46110: 6006 bras 46118 <rtems_aio_search_fd+0x32> <== NOT EXECUTED
node = rtems_chain_next (node);
r_chain = (rtems_aio_request_chain *) node;
}
if (r_chain->fildes == fildes)
r_chain->new_fd = 0;
46112: 42aa 0018 clrl %a2@(24) <== NOT EXECUTED
46116: 6054 bras 4616c <rtems_aio_search_fd+0x86> <== NOT EXECUTED
else {
if (create == 0)
46118: 4aae 0010 tstl %fp@(16) <== NOT EXECUTED
4611c: 674c beqs 4616a <rtems_aio_search_fd+0x84> <== NOT EXECUTED
r_chain = NULL;
else {
r_chain = malloc (sizeof (rtems_aio_request_chain));
4611e: 4878 0024 pea 24 <OPER2+0x10> <== NOT EXECUTED
46122: 4eb9 0004 3724 jsr 43724 <malloc> <== NOT EXECUTED
rtems_chain_initialize_empty (&r_chain->perfd);
if (rtems_chain_is_empty (chain))
46128: 588f addql #4,%sp <== NOT EXECUTED
r_chain->new_fd = 0;
else {
if (create == 0)
r_chain = NULL;
else {
r_chain = malloc (sizeof (rtems_aio_request_chain));
4612a: 2840 moveal %d0,%a4 <== NOT EXECUTED
4612c: 2600 movel %d0,%d3 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
4612e: 5080 addql #8,%d0 <== NOT EXECUTED
Chain_Node *tail = _Chain_Tail( the_chain );
46130: 41ec 000c lea %a4@(12),%a0 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
46134: 2940 0010 movel %d0,%a4@(16) <== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
const Chain_Control *the_chain
)
{
return _Chain_Immutable_first( the_chain )
== _Chain_Immutable_tail( the_chain );
46138: 200b movel %a3,%d0 <== NOT EXECUTED
4613a: 5880 addql #4,%d0 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
4613c: 2948 0008 movel %a0,%a4@(8) <== NOT EXECUTED
46140: 41f9 0004 86b8 lea 486b8 <_Chain_Insert>,%a0 <== NOT EXECUTED
head->next = tail;
head->previous = NULL;
46146: 42ac 000c clrl %a4@(12) <== NOT EXECUTED
rtems_chain_initialize_empty (&r_chain->perfd);
if (rtems_chain_is_empty (chain))
4614a: b093 cmpl %a3@,%d0 <== NOT EXECUTED
4614c: 6606 bnes 46154 <rtems_aio_search_fd+0x6e> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Prepend(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
_Chain_Insert(_Chain_Head(the_chain), the_node);
4614e: 2f0c movel %a4,%sp@- <== NOT EXECUTED
46150: 2f0b movel %a3,%sp@- <== NOT EXECUTED
46152: 6006 bras 4615a <rtems_aio_search_fd+0x74> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void rtems_chain_insert(
rtems_chain_node *after_node,
rtems_chain_node *the_node
)
{
_Chain_Insert( after_node, the_node );
46154: 2f0c movel %a4,%sp@- <== NOT EXECUTED
46156: 2f2a 0004 movel %a2@(4),%sp@- <== NOT EXECUTED
4615a: 4e90 jsr %a0@ <== NOT EXECUTED
4615c: 508f addql #8,%sp <== NOT EXECUTED
rtems_chain_prepend (chain, &r_chain->next_fd);
else
rtems_chain_insert (rtems_chain_previous (node), &r_chain->next_fd);
r_chain->new_fd = 1;
4615e: 7001 moveq #1,%d0 <== NOT EXECUTED
r_chain->fildes = fildes;
46160: 2942 0014 movel %d2,%a4@(20) <== NOT EXECUTED
if (rtems_chain_is_empty (chain))
rtems_chain_prepend (chain, &r_chain->next_fd);
else
rtems_chain_insert (rtems_chain_previous (node), &r_chain->next_fd);
r_chain->new_fd = 1;
46164: 2940 0018 movel %d0,%a4@(24) <== NOT EXECUTED
46168: 6002 bras 4616c <rtems_aio_search_fd+0x86> <== NOT EXECUTED
if (r_chain->fildes == fildes)
r_chain->new_fd = 0;
else {
if (create == 0)
r_chain = NULL;
4616a: 4283 clrl %d3 <== NOT EXECUTED
r_chain->new_fd = 1;
r_chain->fildes = fildes;
}
}
return r_chain;
}
4616c: 2003 movel %d3,%d0 <== NOT EXECUTED
4616e: 4cee 1c0c ffec moveml %fp@(-20),%d2-%d3/%a2-%a4 <== NOT EXECUTED
46174: 4e5e unlk %fp <== NOT EXECUTED
0004cc60 <rtems_barrier_create>:
rtems_name name,
rtems_attribute attribute_set,
uint32_t maximum_waiters,
rtems_id *id
)
{
4cc60: 4e56 ffe4 linkw %fp,#-28
4cc64: 202e 0010 movel %fp@(16),%d0
4cc68: 48d7 1c0c moveml %d2-%d3/%a2-%a4,%sp@
4cc6c: 242e 0008 movel %fp@(8),%d2
4cc70: 262e 000c movel %fp@(12),%d3
4cc74: 246e 0014 moveal %fp@(20),%a2
Barrier_Control *the_barrier;
CORE_barrier_Attributes the_attributes;
if ( !rtems_is_name_valid( name ) )
4cc78: 4a82 tstl %d2
4cc7a: 677e beqs 4ccfa <rtems_barrier_create+0x9a> <== NEVER TAKEN
return RTEMS_INVALID_NAME;
if ( !id )
4cc7c: 4a8a tstl %a2
4cc7e: 677e beqs 4ccfe <rtems_barrier_create+0x9e> <== NEVER TAKEN
return RTEMS_INVALID_ADDRESS;
/* Initialize core barrier attributes */
if ( _Attributes_Is_barrier_automatic( attribute_set ) ) {
4cc80: 0803 0004 btst #4,%d3
4cc84: 670a beqs 4cc90 <rtems_barrier_create+0x30> <== NEVER TAKEN
the_attributes.discipline = CORE_BARRIER_AUTOMATIC_RELEASE;
4cc86: 42ae fff8 clrl %fp@(-8)
if ( maximum_waiters == 0 )
4cc8a: 4a80 tstl %d0
4cc8c: 6608 bnes 4cc96 <rtems_barrier_create+0x36> <== ALWAYS TAKEN
4cc8e: 6072 bras 4cd02 <rtems_barrier_create+0xa2> <== NOT EXECUTED
return RTEMS_INVALID_NUMBER;
} else
the_attributes.discipline = CORE_BARRIER_MANUAL_RELEASE;
4cc90: 7201 moveq #1,%d1 <== NOT EXECUTED
4cc92: 2d41 fff8 movel %d1,%fp@(-8) <== NOT EXECUTED
the_attributes.maximum_count = maximum_waiters;
4cc96: 2d40 fffc movel %d0,%fp@(-4)
4cc9a: 2039 0005 feac movel 5feac <_Thread_Dispatch_disable_level>,%d0
4cca0: 5280 addql #1,%d0
4cca2: 23c0 0005 feac movel %d0,5feac <_Thread_Dispatch_disable_level>
* This function allocates a barrier control block from
* the inactive chain of free barrier control blocks.
*/
RTEMS_INLINE_ROUTINE Barrier_Control *_Barrier_Allocate( void )
{
return (Barrier_Control *) _Objects_Allocate( &_Barrier_Information );
4cca8: 4879 0006 070c pea 6070c <_Barrier_Information>
4ccae: 49f9 0004 9456 lea 49456 <_Thread_Enable_dispatch>,%a4
4ccb4: 4eb9 0004 8568 jsr 48568 <_Objects_Allocate>
_Thread_Disable_dispatch(); /* prevents deletion */
the_barrier = _Barrier_Allocate();
if ( !the_barrier ) {
4ccba: 588f addql #4,%sp
4ccbc: 2640 moveal %d0,%a3
4ccbe: 4a80 tstl %d0
4ccc0: 6606 bnes 4ccc8 <rtems_barrier_create+0x68> <== ALWAYS TAKEN
_Thread_Enable_dispatch();
4ccc2: 4e94 jsr %a4@ <== NOT EXECUTED
return RTEMS_TOO_MANY;
4ccc4: 7005 moveq #5,%d0 <== NOT EXECUTED
4ccc6: 603c bras 4cd04 <rtems_barrier_create+0xa4> <== NOT EXECUTED
}
the_barrier->attribute_set = attribute_set;
4ccc8: 2743 0010 movel %d3,%a3@(16)
_CORE_barrier_Initialize( &the_barrier->Barrier, &the_attributes );
4cccc: 486e fff8 pea %fp@(-8)
4ccd0: 486b 0014 pea %a3@(20)
4ccd4: 4eb9 0004 d434 jsr 4d434 <_CORE_barrier_Initialize>
Objects_Name name
)
{
_Objects_Set_local_object(
information,
_Objects_Get_index( the_object->id ),
4ccda: 202b 0008 movel %a3@(8),%d0
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
4ccde: 4281 clrl %d1
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
4cce0: 2079 0006 0724 moveal 60724 <_Barrier_Information+0x18>,%a0
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
4cce6: 3200 movew %d0,%d1
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
4cce8: 218b 1c00 movel %a3,%a0@(00000000,%d1:l:4)
information,
_Objects_Get_index( the_object->id ),
the_object
);
the_object->name = name;
4ccec: 2742 000c movel %d2,%a3@(12)
&_Barrier_Information,
&the_barrier->Object,
(Objects_Name) name
);
*id = the_barrier->Object.id;
4ccf0: 2480 movel %d0,%a2@
_Thread_Enable_dispatch();
4ccf2: 4e94 jsr %a4@
return RTEMS_SUCCESSFUL;
4ccf4: 508f addql #8,%sp
4ccf6: 4280 clrl %d0
4ccf8: 600a bras 4cd04 <rtems_barrier_create+0xa4>
{
Barrier_Control *the_barrier;
CORE_barrier_Attributes the_attributes;
if ( !rtems_is_name_valid( name ) )
return RTEMS_INVALID_NAME;
4ccfa: 7003 moveq #3,%d0 <== NOT EXECUTED
4ccfc: 6006 bras 4cd04 <rtems_barrier_create+0xa4> <== NOT EXECUTED
if ( !id )
return RTEMS_INVALID_ADDRESS;
4ccfe: 7009 moveq #9,%d0 <== NOT EXECUTED
4cd00: 6002 bras 4cd04 <rtems_barrier_create+0xa4> <== NOT EXECUTED
/* Initialize core barrier attributes */
if ( _Attributes_Is_barrier_automatic( attribute_set ) ) {
the_attributes.discipline = CORE_BARRIER_AUTOMATIC_RELEASE;
if ( maximum_waiters == 0 )
return RTEMS_INVALID_NUMBER;
4cd02: 700a moveq #10,%d0 <== NOT EXECUTED
*id = the_barrier->Object.id;
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
4cd04: 4cee 1c0c ffe4 moveml %fp@(-28),%d2-%d3/%a2-%a4
4cd0a: 4e5e unlk %fp
...
0004cd10 <rtems_barrier_delete>:
*/
rtems_status_code rtems_barrier_delete(
rtems_id id
)
{
4cd10: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
4cd14: 2f0a movel %a2,%sp@- <== NOT EXECUTED
Objects_Id id,
Objects_Locations *location
)
{
return (Barrier_Control *)
_Objects_Get( &_Barrier_Information, id, location );
4cd16: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4cd1a: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4cd1e: 4879 0006 070c pea 6070c <_Barrier_Information> <== NOT EXECUTED
4cd24: 4eb9 0004 89c0 jsr 489c0 <_Objects_Get> <== NOT EXECUTED
Barrier_Control *the_barrier;
Objects_Locations location;
the_barrier = _Barrier_Get( id, &location );
switch ( location ) {
4cd2a: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4cd2e: 2440 moveal %d0,%a2 <== NOT EXECUTED
4cd30: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4cd34: 663a bnes 4cd70 <rtems_barrier_delete+0x60> <== NOT EXECUTED
case OBJECTS_LOCAL:
_CORE_barrier_Flush(
4cd36: 4878 0002 pea 2 <DOUBLE_FLOAT> <== NOT EXECUTED
4cd3a: 42a7 clrl %sp@- <== NOT EXECUTED
4cd3c: 486a 0014 pea %a2@(20) <== NOT EXECUTED
4cd40: 4eb9 0004 9ac8 jsr 49ac8 <_Thread_queue_Flush> <== NOT EXECUTED
&the_barrier->Barrier,
NULL,
CORE_BARRIER_WAS_DELETED
);
_Objects_Close( &_Barrier_Information, &the_barrier->Object );
4cd46: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4cd48: 4879 0006 070c pea 6070c <_Barrier_Information> <== NOT EXECUTED
4cd4e: 4eb9 0004 85e4 jsr 485e4 <_Objects_Close> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Barrier_Free (
Barrier_Control *the_barrier
)
{
_Objects_Free( &_Barrier_Information, &the_barrier->Object );
4cd54: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4cd56: 4879 0006 070c pea 6070c <_Barrier_Information> <== NOT EXECUTED
4cd5c: 4eb9 0004 885c jsr 4885c <_Objects_Free> <== NOT EXECUTED
_Barrier_Free( the_barrier );
_Thread_Enable_dispatch();
4cd62: 4eb9 0004 9456 jsr 49456 <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
4cd68: 4fef 001c lea %sp@(28),%sp <== NOT EXECUTED
4cd6c: 4280 clrl %d0 <== NOT EXECUTED
4cd6e: 6002 bras 4cd72 <rtems_barrier_delete+0x62> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4cd70: 7004 moveq #4,%d0 <== NOT EXECUTED
}
4cd72: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
4cd76: 4e5e unlk %fp <== NOT EXECUTED
...
00045db0 <rtems_barrier_ident>:
rtems_status_code rtems_barrier_ident(
rtems_name name,
rtems_id *id
)
{
45db0: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
Objects_Name_or_id_lookup_errors status;
status = _Objects_Name_to_id_u32(
45db4: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
45db8: 2f3c 7fff ffff movel #2147483647,%sp@- <== NOT EXECUTED
45dbe: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
45dc2: 4879 0005 efc8 pea 5efc8 <_Barrier_Information> <== NOT EXECUTED
45dc8: 4eb9 0004 7df0 jsr 47df0 <_Objects_Name_to_id_u32> <== NOT EXECUTED
OBJECTS_SEARCH_LOCAL_NODE,
id
);
return _Status_Object_name_errors_to_status[ status ];
}
45dce: 41f9 0005 c8be lea 5c8be <_Status_Object_name_errors_to_status>,%a0<== NOT EXECUTED
45dd4: 4e5e unlk %fp <== NOT EXECUTED
45dd6: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0 <== NOT EXECUTED
0004cdac <rtems_barrier_release>:
rtems_status_code rtems_barrier_release(
rtems_id id,
uint32_t *released
)
{
4cdac: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
4cdb0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4cdb2: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
4cdb6: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4cdb8: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
Barrier_Control *the_barrier;
Objects_Locations location;
if ( !released )
4cdbc: 4a8a tstl %a2 <== NOT EXECUTED
4cdbe: 673c beqs 4cdfc <rtems_barrier_release+0x50> <== NOT EXECUTED
Objects_Id id,
Objects_Locations *location
)
{
return (Barrier_Control *)
_Objects_Get( &_Barrier_Information, id, location );
4cdc0: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4cdc4: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4cdc6: 4879 0006 070c pea 6070c <_Barrier_Information> <== NOT EXECUTED
4cdcc: 4eb9 0004 89c0 jsr 489c0 <_Objects_Get> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
the_barrier = _Barrier_Get( id, &location );
switch ( location ) {
4cdd2: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4cdd6: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4cdda: 6624 bnes 4ce00 <rtems_barrier_release+0x54> <== NOT EXECUTED
case OBJECTS_LOCAL:
*released = _CORE_barrier_Release( &the_barrier->Barrier, id, NULL );
4cddc: 42a7 clrl %sp@- <== NOT EXECUTED
4cdde: 2040 moveal %d0,%a0 <== NOT EXECUTED
4cde0: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4cde2: 4868 0014 pea %a0@(20) <== NOT EXECUTED
4cde6: 4eb9 0004 d470 jsr 4d470 <_CORE_barrier_Release> <== NOT EXECUTED
4cdec: 2480 movel %d0,%a2@ <== NOT EXECUTED
_Thread_Enable_dispatch();
4cdee: 4eb9 0004 9456 jsr 49456 <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
4cdf4: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4cdf8: 4280 clrl %d0 <== NOT EXECUTED
4cdfa: 6006 bras 4ce02 <rtems_barrier_release+0x56> <== NOT EXECUTED
{
Barrier_Control *the_barrier;
Objects_Locations location;
if ( !released )
return RTEMS_INVALID_ADDRESS;
4cdfc: 7009 moveq #9,%d0 <== NOT EXECUTED
4cdfe: 6002 bras 4ce02 <rtems_barrier_release+0x56> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4ce00: 7004 moveq #4,%d0 <== NOT EXECUTED
}
4ce02: 242e fff4 movel %fp@(-12),%d2 <== NOT EXECUTED
4ce06: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
4ce0a: 4e5e unlk %fp <== NOT EXECUTED
...
0004ce10 <rtems_barrier_wait>:
rtems_status_code rtems_barrier_wait(
rtems_id id,
rtems_interval timeout
)
{
4ce10: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
4ce14: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4ce16: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4ce1a: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
4ce1e: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4ce20: 4879 0006 070c pea 6070c <_Barrier_Information> <== NOT EXECUTED
4ce26: 4eb9 0004 89c0 jsr 489c0 <_Objects_Get> <== NOT EXECUTED
Barrier_Control *the_barrier;
Objects_Locations location;
the_barrier = _Barrier_Get( id, &location );
switch ( location ) {
4ce2c: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4ce30: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4ce34: 6634 bnes 4ce6a <rtems_barrier_wait+0x5a> <== NOT EXECUTED
case OBJECTS_LOCAL:
_CORE_barrier_Wait(
4ce36: 42a7 clrl %sp@- <== NOT EXECUTED
4ce38: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
4ce3c: 2040 moveal %d0,%a0 <== NOT EXECUTED
4ce3e: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
4ce42: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4ce44: 4868 0014 pea %a0@(20) <== NOT EXECUTED
4ce48: 4eb9 0004 d4a4 jsr 4d4a4 <_CORE_barrier_Wait> <== NOT EXECUTED
id,
true,
timeout,
NULL
);
_Thread_Enable_dispatch();
4ce4e: 4eb9 0004 9456 jsr 49456 <_Thread_Enable_dispatch> <== NOT EXECUTED
return _Barrier_Translate_core_barrier_return_code(
_Thread_Executing->Wait.return_code );
4ce54: 2079 0006 033a moveal 6033a <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
true,
timeout,
NULL
);
_Thread_Enable_dispatch();
return _Barrier_Translate_core_barrier_return_code(
4ce5a: 2f28 0034 movel %a0@(52),%sp@- <== NOT EXECUTED
4ce5e: 4eb9 0004 e5b4 jsr 4e5b4 <_Barrier_Translate_core_barrier_return_code><== NOT EXECUTED
4ce64: 4fef 0018 lea %sp@(24),%sp <== NOT EXECUTED
4ce68: 6002 bras 4ce6c <rtems_barrier_wait+0x5c> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4ce6a: 7004 moveq #4,%d0 <== NOT EXECUTED
}
4ce6c: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
4ce70: 4e5e unlk %fp <== NOT EXECUTED
00046b60 <rtems_build_id>:
uint32_t api,
uint32_t class,
uint32_t node,
uint32_t index
)
{
46b60: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
46b64: 202e 000c movel %fp@(12),%d0 <== NOT EXECUTED
46b68: 2f03 movel %d3,%sp@- <== NOT EXECUTED
uint32_t node,
uint32_t index
)
{
return (( (Objects_Id) the_api ) << OBJECTS_API_START_BIT) |
(( (Objects_Id) the_class ) << OBJECTS_CLASS_START_BIT) |
46b6a: 761b moveq #27,%d3 <== NOT EXECUTED
46b6c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46b6e: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
46b72: e7a8 lsll %d3,%d0 <== NOT EXECUTED
uint32_t the_class,
uint32_t node,
uint32_t index
)
{
return (( (Objects_Id) the_api ) << OBJECTS_API_START_BIT) |
46b74: 163c 0018 moveb #24,%d3 <== NOT EXECUTED
46b78: e7aa lsll %d3,%d2 <== NOT EXECUTED
46b7a: 222e 0010 movel %fp@(16),%d1 <== NOT EXECUTED
46b7e: 8082 orl %d2,%d0 <== NOT EXECUTED
return _Objects_Build_id( api, class, node, index );
}
46b80: 241f movel %sp@+,%d2 <== NOT EXECUTED
(( (Objects_Id) the_class ) << OBJECTS_CLASS_START_BIT) |
46b82: 80ae 0014 orl %fp@(20),%d0 <== NOT EXECUTED
#if !defined(RTEMS_USE_16_BIT_OBJECT)
(( (Objects_Id) node ) << OBJECTS_NODE_START_BIT) |
46b86: 4841 swap %d1 <== NOT EXECUTED
46b88: 4241 clrw %d1 <== NOT EXECUTED
46b8a: 261f movel %sp@+,%d3 <== NOT EXECUTED
46b8c: 4e5e unlk %fp <== NOT EXECUTED
46b8e: 8081 orl %d1,%d0 <== NOT EXECUTED
...
00046b94 <rtems_build_name>:
char C1,
char C2,
char C3,
char C4
)
{
46b94: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return _Objects_Build_name( C1, C2, C3, C4 );
46b98: 102e 000f moveb %fp@(15),%d0 <== NOT EXECUTED
46b9c: 122e 000b moveb %fp@(11),%d1 <== NOT EXECUTED
char C1,
char C2,
char C3,
char C4
)
{
46ba0: 2f02 movel %d2,%sp@- <== NOT EXECUTED
return _Objects_Build_name( C1, C2, C3, C4 );
46ba2: 7418 moveq #24,%d2 <== NOT EXECUTED
46ba4: 49c0 extbl %d0 <== NOT EXECUTED
46ba6: 49c1 extbl %d1 <== NOT EXECUTED
46ba8: 4840 swap %d0 <== NOT EXECUTED
46baa: 4240 clrw %d0 <== NOT EXECUTED
46bac: e5a9 lsll %d2,%d1 <== NOT EXECUTED
}
46bae: 241f movel %sp@+,%d2 <== NOT EXECUTED
char C2,
char C3,
char C4
)
{
return _Objects_Build_name( C1, C2, C3, C4 );
46bb0: 8081 orl %d1,%d0 <== NOT EXECUTED
46bb2: 122e 0013 moveb %fp@(19),%d1 <== NOT EXECUTED
46bb6: 49c1 extbl %d1 <== NOT EXECUTED
46bb8: e189 lsll #8,%d1 <== NOT EXECUTED
46bba: 8081 orl %d1,%d0 <== NOT EXECUTED
46bbc: 122e 0017 moveb %fp@(23),%d1 <== NOT EXECUTED
}
46bc0: 4e5e unlk %fp <== NOT EXECUTED
char C2,
char C3,
char C4
)
{
return _Objects_Build_name( C1, C2, C3, C4 );
46bc2: 49c1 extbl %d1 <== NOT EXECUTED
}
46bc4: 8081 orl %d1,%d0 <== NOT EXECUTED
000460e0 <rtems_chain_append_with_notification>:
rtems_chain_control *chain,
rtems_chain_node *node,
rtems_id task,
rtems_event_set events
)
{
460e0: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
460e4: 2f03 movel %d3,%sp@- <== NOT EXECUTED
460e6: 262e 0014 movel %fp@(20),%d3 <== NOT EXECUTED
460ea: 2f02 movel %d2,%sp@- <== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool rtems_chain_append_with_empty_check(
rtems_chain_control *chain,
rtems_chain_node *node
)
{
return _Chain_Append_with_empty_check( chain, node );
460ec: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
460f0: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
460f4: 242e 0010 movel %fp@(16),%d2 <== NOT EXECUTED
460f8: 4eb9 0004 6674 jsr 46674 <_Chain_Append_with_empty_check> <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
bool was_empty = rtems_chain_append_with_empty_check( chain, node );
if ( was_empty ) {
460fe: 508f addql #8,%sp <== NOT EXECUTED
46100: 4a00 tstb %d0 <== NOT EXECUTED
46102: 6718 beqs 4611c <rtems_chain_append_with_notification+0x3c><== NOT EXECUTED
sc = rtems_event_send( task, events );
46104: 2d43 000c movel %d3,%fp@(12) <== NOT EXECUTED
}
return sc;
}
46108: 262e fffc movel %fp@(-4),%d3 <== NOT EXECUTED
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
bool was_empty = rtems_chain_append_with_empty_check( chain, node );
if ( was_empty ) {
sc = rtems_event_send( task, events );
4610c: 2d42 0008 movel %d2,%fp@(8) <== NOT EXECUTED
}
return sc;
}
46110: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
46114: 4e5e unlk %fp <== NOT EXECUTED
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
bool was_empty = rtems_chain_append_with_empty_check( chain, node );
if ( was_empty ) {
sc = rtems_event_send( task, events );
46116: 4ef9 0004 5764 jmp 45764 <rtems_event_send> <== NOT EXECUTED
}
return sc;
}
4611c: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
46120: 4280 clrl %d0 <== NOT EXECUTED
46122: 262e fffc movel %fp@(-4),%d3 <== NOT EXECUTED
46126: 4e5e unlk %fp <== NOT EXECUTED
...
0004612c <rtems_chain_get_with_notification>:
rtems_chain_control *chain,
rtems_id task,
rtems_event_set events,
rtems_chain_node **node
)
{
4612c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
46130: 2f03 movel %d3,%sp@- <== NOT EXECUTED
46132: 262e 0010 movel %fp@(16),%d3 <== NOT EXECUTED
46136: 2f02 movel %d2,%sp@- <== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool rtems_chain_get_with_empty_check(
rtems_chain_control *chain,
rtems_chain_node **node
)
{
return _Chain_Get_with_empty_check( chain, node );
46138: 2f2e 0014 movel %fp@(20),%sp@- <== NOT EXECUTED
4613c: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
46140: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
46144: 4eb9 0004 6714 jsr 46714 <_Chain_Get_with_empty_check> <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
bool is_empty = rtems_chain_get_with_empty_check( chain, node );
if ( is_empty ) {
4614a: 508f addql #8,%sp <== NOT EXECUTED
4614c: 4a00 tstb %d0 <== NOT EXECUTED
4614e: 6718 beqs 46168 <rtems_chain_get_with_notification+0x3c><== NOT EXECUTED
sc = rtems_event_send( task, events );
46150: 2d43 000c movel %d3,%fp@(12) <== NOT EXECUTED
}
return sc;
}
46154: 262e fffc movel %fp@(-4),%d3 <== NOT EXECUTED
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
bool is_empty = rtems_chain_get_with_empty_check( chain, node );
if ( is_empty ) {
sc = rtems_event_send( task, events );
46158: 2d42 0008 movel %d2,%fp@(8) <== NOT EXECUTED
}
return sc;
}
4615c: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
46160: 4e5e unlk %fp <== NOT EXECUTED
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
bool is_empty = rtems_chain_get_with_empty_check( chain, node );
if ( is_empty ) {
sc = rtems_event_send( task, events );
46162: 4ef9 0004 5764 jmp 45764 <rtems_event_send> <== NOT EXECUTED
}
return sc;
}
46168: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
4616c: 4280 clrl %d0 <== NOT EXECUTED
4616e: 262e fffc movel %fp@(-4),%d3 <== NOT EXECUTED
46172: 4e5e unlk %fp <== NOT EXECUTED
...
00046178 <rtems_chain_get_with_wait>:
rtems_chain_control *chain,
rtems_event_set events,
rtems_interval timeout,
rtems_chain_node **node_ptr
)
{
46178: 4e56 ffe0 linkw %fp,#-32 <== NOT EXECUTED
4617c: 48d7 0c7c moveml %d2-%d6/%a2-%a3,%sp@ <== NOT EXECUTED
while (
sc == RTEMS_SUCCESSFUL
&& (node = rtems_chain_get( chain )) == NULL
) {
rtems_event_set out;
sc = rtems_event_receive(
46180: 260e movel %fp,%d3 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE rtems_chain_node *rtems_chain_get(
rtems_chain_control *the_chain
)
{
return _Chain_Get( the_chain );
46182: 47f9 0004 675c lea 4675c <_Chain_Get>,%a3 <== NOT EXECUTED
46188: 5983 subql #4,%d3 <== NOT EXECUTED
4618a: 45f9 0004 5600 lea 45600 <rtems_event_receive>,%a2 <== NOT EXECUTED
rtems_chain_control *chain,
rtems_event_set events,
rtems_interval timeout,
rtems_chain_node **node_ptr
)
{
46190: 2c2e 0008 movel %fp@(8),%d6 <== NOT EXECUTED
46194: 2a2e 000c movel %fp@(12),%d5 <== NOT EXECUTED
46198: 282e 0010 movel %fp@(16),%d4 <== NOT EXECUTED
4619c: 6012 bras 461b0 <rtems_chain_get_with_wait+0x38> <== NOT EXECUTED
while (
sc == RTEMS_SUCCESSFUL
&& (node = rtems_chain_get( chain )) == NULL
) {
rtems_event_set out;
sc = rtems_event_receive(
4619e: 2f03 movel %d3,%sp@- <== NOT EXECUTED
461a0: 2f04 movel %d4,%sp@- <== NOT EXECUTED
461a2: 42a7 clrl %sp@- <== NOT EXECUTED
461a4: 2f05 movel %d5,%sp@- <== NOT EXECUTED
461a6: 4e92 jsr %a2@ <== NOT EXECUTED
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_chain_node *node = NULL;
while (
461a8: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
461ac: 4a80 tstl %d0 <== NOT EXECUTED
461ae: 660c bnes 461bc <rtems_chain_get_with_wait+0x44> <== NOT EXECUTED
461b0: 2f06 movel %d6,%sp@- <== NOT EXECUTED
461b2: 4e93 jsr %a3@ <== NOT EXECUTED
sc == RTEMS_SUCCESSFUL
&& (node = rtems_chain_get( chain )) == NULL
461b4: 588f addql #4,%sp <== NOT EXECUTED
461b6: 2400 movel %d0,%d2 <== NOT EXECUTED
461b8: 67e4 beqs 4619e <rtems_chain_get_with_wait+0x26> <== NOT EXECUTED
461ba: 4280 clrl %d0 <== NOT EXECUTED
timeout,
&out
);
}
*node_ptr = node;
461bc: 206e 0014 moveal %fp@(20),%a0 <== NOT EXECUTED
461c0: 2082 movel %d2,%a0@ <== NOT EXECUTED
return sc;
}
461c2: 4cee 0c7c ffe0 moveml %fp@(-32),%d2-%d6/%a2-%a3 <== NOT EXECUTED
461c8: 4e5e unlk %fp <== NOT EXECUTED
000461cc <rtems_chain_prepend_with_notification>:
rtems_chain_control *chain,
rtems_chain_node *node,
rtems_id task,
rtems_event_set events
)
{
461cc: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
461d0: 2f03 movel %d3,%sp@- <== NOT EXECUTED
461d2: 262e 0014 movel %fp@(20),%d3 <== NOT EXECUTED
461d6: 2f02 movel %d2,%sp@- <== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool rtems_chain_prepend_with_empty_check(
rtems_chain_control *chain,
rtems_chain_node *node
)
{
return _Chain_Prepend_with_empty_check( chain, node );
461d8: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
461dc: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
461e0: 242e 0010 movel %fp@(16),%d2 <== NOT EXECUTED
461e4: 4eb9 0004 67c0 jsr 467c0 <_Chain_Prepend_with_empty_check> <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
bool was_empty = rtems_chain_prepend_with_empty_check( chain, node );
if (was_empty) {
461ea: 508f addql #8,%sp <== NOT EXECUTED
461ec: 4a00 tstb %d0 <== NOT EXECUTED
461ee: 6718 beqs 46208 <rtems_chain_prepend_with_notification+0x3c><== NOT EXECUTED
sc = rtems_event_send( task, events );
461f0: 2d43 000c movel %d3,%fp@(12) <== NOT EXECUTED
}
return sc;
}
461f4: 262e fffc movel %fp@(-4),%d3 <== NOT EXECUTED
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
bool was_empty = rtems_chain_prepend_with_empty_check( chain, node );
if (was_empty) {
sc = rtems_event_send( task, events );
461f8: 2d42 0008 movel %d2,%fp@(8) <== NOT EXECUTED
}
return sc;
}
461fc: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
46200: 4e5e unlk %fp <== NOT EXECUTED
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
bool was_empty = rtems_chain_prepend_with_empty_check( chain, node );
if (was_empty) {
sc = rtems_event_send( task, events );
46202: 4ef9 0004 5764 jmp 45764 <rtems_event_send> <== NOT EXECUTED
}
return sc;
}
46208: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
4620c: 4280 clrl %d0 <== NOT EXECUTED
4620e: 262e fffc movel %fp@(-4),%d3 <== NOT EXECUTED
46212: 4e5e unlk %fp <== NOT EXECUTED
...
0004ef44 <rtems_clock_get>:
rtems_status_code rtems_clock_get(
rtems_clock_get_options option,
void *time_buffer
)
{
4ef44: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4ef48: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
4ef4c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4ef4e: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
if ( !time_buffer )
4ef52: 4a8a tstl %a2 <== NOT EXECUTED
4ef54: 6760 beqs 4efb6 <rtems_clock_get+0x72> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
if ( option == RTEMS_CLOCK_GET_TOD )
4ef56: 4a80 tstl %d0 <== NOT EXECUTED
4ef58: 6610 bnes 4ef6a <rtems_clock_get+0x26> <== NOT EXECUTED
return rtems_clock_get_tod( (rtems_time_of_day *)time_buffer );
4ef5a: 2d4a 0008 movel %a2,%fp@(8) <== NOT EXECUTED
if ( option == RTEMS_CLOCK_GET_TIME_VALUE )
return rtems_clock_get_tod_timeval( (struct timeval *)time_buffer );
return RTEMS_INVALID_NUMBER;
}
4ef5e: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
4ef62: 4e5e unlk %fp <== NOT EXECUTED
{
if ( !time_buffer )
return RTEMS_INVALID_ADDRESS;
if ( option == RTEMS_CLOCK_GET_TOD )
return rtems_clock_get_tod( (rtems_time_of_day *)time_buffer );
4ef64: 4ef9 0004 f014 jmp 4f014 <rtems_clock_get_tod> <== NOT EXECUTED
if ( option == RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH )
4ef6a: 7201 moveq #1,%d1 <== NOT EXECUTED
4ef6c: b280 cmpl %d0,%d1 <== NOT EXECUTED
4ef6e: 6610 bnes 4ef80 <rtems_clock_get+0x3c> <== NOT EXECUTED
return rtems_clock_get_seconds_since_epoch((rtems_interval *)time_buffer);
4ef70: 2d4a 0008 movel %a2,%fp@(8) <== NOT EXECUTED
if ( option == RTEMS_CLOCK_GET_TIME_VALUE )
return rtems_clock_get_tod_timeval( (struct timeval *)time_buffer );
return RTEMS_INVALID_NUMBER;
}
4ef74: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
4ef78: 4e5e unlk %fp <== NOT EXECUTED
if ( option == RTEMS_CLOCK_GET_TOD )
return rtems_clock_get_tod( (rtems_time_of_day *)time_buffer );
if ( option == RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH )
return rtems_clock_get_seconds_since_epoch((rtems_interval *)time_buffer);
4ef7a: 4ef9 0004 efc4 jmp 4efc4 <rtems_clock_get_seconds_since_epoch><== NOT EXECUTED
if ( option == RTEMS_CLOCK_GET_TICKS_SINCE_BOOT ) {
4ef80: 7202 moveq #2,%d1 <== NOT EXECUTED
4ef82: b280 cmpl %d0,%d1 <== NOT EXECUTED
4ef84: 6608 bnes 4ef8e <rtems_clock_get+0x4a> <== NOT EXECUTED
rtems_interval *interval = (rtems_interval *)time_buffer;
*interval = rtems_clock_get_ticks_since_boot();
4ef86: 4eb9 0004 f004 jsr 4f004 <rtems_clock_get_ticks_since_boot><== NOT EXECUTED
4ef8c: 600c bras 4ef9a <rtems_clock_get+0x56> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
}
if ( option == RTEMS_CLOCK_GET_TICKS_PER_SECOND ) {
4ef8e: 7203 moveq #3,%d1 <== NOT EXECUTED
4ef90: b280 cmpl %d0,%d1 <== NOT EXECUTED
4ef92: 660c bnes 4efa0 <rtems_clock_get+0x5c> <== NOT EXECUTED
rtems_interval *interval = (rtems_interval *)time_buffer;
*interval = rtems_clock_get_ticks_per_second();
4ef94: 4eb9 0004 efec jsr 4efec <rtems_clock_get_ticks_per_second><== NOT EXECUTED
4ef9a: 2480 movel %d0,%a2@ <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
4ef9c: 4280 clrl %d0 <== NOT EXECUTED
4ef9e: 601c bras 4efbc <rtems_clock_get+0x78> <== NOT EXECUTED
}
if ( option == RTEMS_CLOCK_GET_TIME_VALUE )
4efa0: 7204 moveq #4,%d1 <== NOT EXECUTED
4efa2: b280 cmpl %d0,%d1 <== NOT EXECUTED
4efa4: 6614 bnes 4efba <rtems_clock_get+0x76> <== NOT EXECUTED
return rtems_clock_get_tod_timeval( (struct timeval *)time_buffer );
4efa6: 2d4a 0008 movel %a2,%fp@(8) <== NOT EXECUTED
return RTEMS_INVALID_NUMBER;
}
4efaa: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
4efae: 4e5e unlk %fp <== NOT EXECUTED
*interval = rtems_clock_get_ticks_per_second();
return RTEMS_SUCCESSFUL;
}
if ( option == RTEMS_CLOCK_GET_TIME_VALUE )
return rtems_clock_get_tod_timeval( (struct timeval *)time_buffer );
4efb0: 4ef9 0004 f0c8 jmp 4f0c8 <rtems_clock_get_tod_timeval> <== NOT EXECUTED
rtems_clock_get_options option,
void *time_buffer
)
{
if ( !time_buffer )
return RTEMS_INVALID_ADDRESS;
4efb6: 7009 moveq #9,%d0 <== NOT EXECUTED
4efb8: 6002 bras 4efbc <rtems_clock_get+0x78> <== NOT EXECUTED
}
if ( option == RTEMS_CLOCK_GET_TIME_VALUE )
return rtems_clock_get_tod_timeval( (struct timeval *)time_buffer );
return RTEMS_INVALID_NUMBER;
4efba: 700a moveq #10,%d0 <== NOT EXECUTED
}
4efbc: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
4efc0: 4e5e unlk %fp <== NOT EXECUTED
00045d8c <rtems_clock_get_seconds_since_epoch>:
#include <rtems/score/watchdog.h>
rtems_status_code rtems_clock_get_seconds_since_epoch(
rtems_interval *the_interval
)
{
45d8c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
45d90: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
if ( !the_interval )
45d94: 4a88 tstl %a0 <== NOT EXECUTED
45d96: 6712 beqs 45daa <rtems_clock_get_seconds_since_epoch+0x1e><== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
if ( !_TOD_Is_set )
45d98: 4a39 0006 7a08 tstb 67a08 <_TOD_Is_set> <== NOT EXECUTED
45d9e: 670e beqs 45dae <rtems_clock_get_seconds_since_epoch+0x22><== NOT EXECUTED
return RTEMS_NOT_DEFINED;
*the_interval = _TOD_Seconds_since_epoch();
45da0: 20b9 0006 7aa2 movel 67aa2 <_TOD_Now>,%a0@ <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
45da6: 4280 clrl %d0 <== NOT EXECUTED
45da8: 6006 bras 45db0 <rtems_clock_get_seconds_since_epoch+0x24><== NOT EXECUTED
rtems_status_code rtems_clock_get_seconds_since_epoch(
rtems_interval *the_interval
)
{
if ( !the_interval )
return RTEMS_INVALID_ADDRESS;
45daa: 7009 moveq #9,%d0 <== NOT EXECUTED
45dac: 6002 bras 45db0 <rtems_clock_get_seconds_since_epoch+0x24><== NOT EXECUTED
if ( !_TOD_Is_set )
return RTEMS_NOT_DEFINED;
45dae: 700b moveq #11,%d0 <== NOT EXECUTED
*the_interval = _TOD_Seconds_since_epoch();
return RTEMS_SUCCESSFUL;
}
45db0: 4e5e unlk %fp <== NOT EXECUTED
00044fc4 <rtems_clock_get_ticks_per_second>:
rtems_interval rtems_clock_get_ticks_per_second(void)
{
return TOD_MICROSECONDS_PER_SECOND /
rtems_configuration_get_microseconds_per_tick();
}
44fc4: 41f9 0005 c260 lea 5c260 <Configuration+0xc>,%a0 <== NOT EXECUTED
#include <rtems/score/thread.h>
#include <rtems/score/tod.h>
#include <rtems/score/watchdog.h>
rtems_interval rtems_clock_get_ticks_per_second(void)
{
44fca: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return TOD_MICROSECONDS_PER_SECOND /
rtems_configuration_get_microseconds_per_tick();
}
44fce: 203c 000f 4240 movel #1000000,%d0 <== NOT EXECUTED
44fd4: 4e5e unlk %fp <== NOT EXECUTED
44fd6: 4c50 0000 remul %a0@,%d0,%d0 <== NOT EXECUTED
00044fdc <rtems_clock_get_ticks_since_boot>:
#include <rtems/score/thread.h>
#include <rtems/score/tod.h>
#include <rtems/score/watchdog.h>
rtems_interval rtems_clock_get_ticks_since_boot(void)
{
44fdc: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return _Watchdog_Ticks_since_boot;
44fe0: 2039 0005 dc32 movel 5dc32 <_Watchdog_Ticks_since_boot>,%d0<== NOT EXECUTED
}
44fe6: 4e5e unlk %fp <== NOT EXECUTED
...
00045ddc <rtems_clock_get_tod>:
#include <rtems/score/watchdog.h>
rtems_status_code rtems_clock_get_tod(
rtems_time_of_day *time_buffer
)
{
45ddc: 4e56 ffcc linkw %fp,#-52 <== NOT EXECUTED
45de0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
45de2: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
45de6: 2f02 movel %d2,%sp@- <== NOT EXECUTED
rtems_time_of_day *tmbuf = time_buffer;
struct tm time;
struct timeval now;
if ( !time_buffer )
45de8: 4a8a tstl %a2 <== NOT EXECUTED
45dea: 6700 0090 beqw 45e7c <rtems_clock_get_tod+0xa0> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
if ( !_TOD_Is_set )
45dee: 4a39 0006 7a08 tstb 67a08 <_TOD_Is_set> <== NOT EXECUTED
45df4: 6700 008a beqw 45e80 <rtems_clock_get_tod+0xa4> <== NOT EXECUTED
{
ISR_Level level;
struct timespec now;
suseconds_t useconds;
_ISR_Disable(level);
45df8: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
45dfe: 40c2 movew %sr,%d2 <== NOT EXECUTED
45e00: 8082 orl %d2,%d0 <== NOT EXECUTED
45e02: 46c0 movew %d0,%sr <== NOT EXECUTED
_TOD_Get( &now );
45e04: 486e fff0 pea %fp@(-16) <== NOT EXECUTED
45e08: 4eb9 0004 7594 jsr 47594 <_TOD_Get> <== NOT EXECUTED
_ISR_Enable(level);
45e0e: 46c2 movew %d2,%sr <== NOT EXECUTED
useconds = (suseconds_t)now.tv_nsec;
useconds /= (suseconds_t)TOD_NANOSECONDS_PER_MICROSECOND;
time->tv_sec = now.tv_sec;
time->tv_usec = useconds;
45e10: 243c 0000 03e8 movel #1000,%d2 <== NOT EXECUTED
/* Obtain the current time */
_TOD_Get_timeval( &now );
/* Split it into a closer format */
gmtime_r( &now.tv_sec, &time );
45e16: 486e ffcc pea %fp@(-52) <== NOT EXECUTED
_ISR_Disable(level);
_TOD_Get( &now );
_ISR_Enable(level);
useconds = (suseconds_t)now.tv_nsec;
45e1a: 202e fff4 movel %fp@(-12),%d0 <== NOT EXECUTED
45e1e: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
useconds /= (suseconds_t)TOD_NANOSECONDS_PER_MICROSECOND;
time->tv_sec = now.tv_sec;
45e22: 2d6e fff0 fff8 movel %fp@(-16),%fp@(-8) <== NOT EXECUTED
time->tv_usec = useconds;
45e28: 4c42 0800 remsl %d2,%d0,%d0 <== NOT EXECUTED
45e2c: 2d40 fffc movel %d0,%fp@(-4) <== NOT EXECUTED
45e30: 4eb9 0004 e5b0 jsr 4e5b0 <gmtime_r> <== NOT EXECUTED
/* Now adjust it to the RTEMS format */
tmbuf->year = time.tm_year + 1900;
45e36: 206e ffe0 moveal %fp@(-32),%a0 <== NOT EXECUTED
45e3a: 41e8 076c lea %a0@(1900),%a0 <== NOT EXECUTED
tmbuf->minute = time.tm_min;
tmbuf->second = time.tm_sec;
tmbuf->ticks = now.tv_usec /
rtems_configuration_get_microseconds_per_tick();
return RTEMS_SUCCESSFUL;
45e3e: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
/* Split it into a closer format */
gmtime_r( &now.tv_sec, &time );
/* Now adjust it to the RTEMS format */
tmbuf->year = time.tm_year + 1900;
tmbuf->month = time.tm_mon + 1;
45e42: 202e ffdc movel %fp@(-36),%d0 <== NOT EXECUTED
45e46: 5280 addql #1,%d0 <== NOT EXECUTED
/* Split it into a closer format */
gmtime_r( &now.tv_sec, &time );
/* Now adjust it to the RTEMS format */
tmbuf->year = time.tm_year + 1900;
45e48: 2488 movel %a0,%a2@ <== NOT EXECUTED
tmbuf->month = time.tm_mon + 1;
tmbuf->day = time.tm_mday;
tmbuf->hour = time.tm_hour;
tmbuf->minute = time.tm_min;
tmbuf->second = time.tm_sec;
tmbuf->ticks = now.tv_usec /
45e4a: 222e fffc movel %fp@(-4),%d1 <== NOT EXECUTED
45e4e: 41f9 0005 e390 lea 5e390 <Configuration+0xc>,%a0 <== NOT EXECUTED
/* Split it into a closer format */
gmtime_r( &now.tv_sec, &time );
/* Now adjust it to the RTEMS format */
tmbuf->year = time.tm_year + 1900;
tmbuf->month = time.tm_mon + 1;
45e54: 2540 0004 movel %d0,%a2@(4) <== NOT EXECUTED
tmbuf->day = time.tm_mday;
45e58: 256e ffd8 0008 movel %fp@(-40),%a2@(8) <== NOT EXECUTED
tmbuf->hour = time.tm_hour;
45e5e: 256e ffd4 000c movel %fp@(-44),%a2@(12) <== NOT EXECUTED
tmbuf->minute = time.tm_min;
45e64: 256e ffd0 0010 movel %fp@(-48),%a2@(16) <== NOT EXECUTED
tmbuf->second = time.tm_sec;
45e6a: 256e ffcc 0014 movel %fp@(-52),%a2@(20) <== NOT EXECUTED
tmbuf->ticks = now.tv_usec /
45e70: 4c50 1001 remul %a0@,%d1,%d1 <== NOT EXECUTED
rtems_configuration_get_microseconds_per_tick();
return RTEMS_SUCCESSFUL;
45e74: 4280 clrl %d0 <== NOT EXECUTED
tmbuf->month = time.tm_mon + 1;
tmbuf->day = time.tm_mday;
tmbuf->hour = time.tm_hour;
tmbuf->minute = time.tm_min;
tmbuf->second = time.tm_sec;
tmbuf->ticks = now.tv_usec /
45e76: 2541 0018 movel %d1,%a2@(24) <== NOT EXECUTED
rtems_configuration_get_microseconds_per_tick();
return RTEMS_SUCCESSFUL;
45e7a: 6006 bras 45e82 <rtems_clock_get_tod+0xa6> <== NOT EXECUTED
rtems_time_of_day *tmbuf = time_buffer;
struct tm time;
struct timeval now;
if ( !time_buffer )
return RTEMS_INVALID_ADDRESS;
45e7c: 7009 moveq #9,%d0 <== NOT EXECUTED
45e7e: 6002 bras 45e82 <rtems_clock_get_tod+0xa6> <== NOT EXECUTED
if ( !_TOD_Is_set )
return RTEMS_NOT_DEFINED;
45e80: 700b moveq #11,%d0 <== NOT EXECUTED
tmbuf->second = time.tm_sec;
tmbuf->ticks = now.tv_usec /
rtems_configuration_get_microseconds_per_tick();
return RTEMS_SUCCESSFUL;
}
45e82: 242e ffc4 movel %fp@(-60),%d2 <== NOT EXECUTED
45e86: 246e ffc8 moveal %fp@(-56),%a2 <== NOT EXECUTED
45e8a: 4e5e unlk %fp <== NOT EXECUTED
...
0004f0c8 <rtems_clock_get_tod_timeval>:
#include <rtems/score/watchdog.h>
rtems_status_code rtems_clock_get_tod_timeval(
struct timeval *time
)
{
4f0c8: 4e56 fff8 linkw %fp,#-8 <== NOT EXECUTED
4f0cc: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4f0ce: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
4f0d2: 2f02 movel %d2,%sp@- <== NOT EXECUTED
if ( !time )
4f0d4: 4a8a tstl %a2 <== NOT EXECUTED
4f0d6: 673c beqs 4f114 <rtems_clock_get_tod_timeval+0x4c><== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
if ( !_TOD_Is_set )
4f0d8: 4a39 0007 65bc tstb 765bc <_TOD_Is_set> <== NOT EXECUTED
4f0de: 6738 beqs 4f118 <rtems_clock_get_tod_timeval+0x50><== NOT EXECUTED
{
ISR_Level level;
struct timespec now;
suseconds_t useconds;
_ISR_Disable(level);
4f0e0: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
4f0e6: 40c2 movew %sr,%d2 <== NOT EXECUTED
4f0e8: 8082 orl %d2,%d0 <== NOT EXECUTED
4f0ea: 46c0 movew %d0,%sr <== NOT EXECUTED
_TOD_Get( &now );
4f0ec: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
4f0f0: 4eb9 0005 3280 jsr 53280 <_TOD_Get> <== NOT EXECUTED
_ISR_Enable(level);
4f0f6: 46c2 movew %d2,%sr <== NOT EXECUTED
useconds = (suseconds_t)now.tv_nsec;
useconds /= (suseconds_t)TOD_NANOSECONDS_PER_MICROSECOND;
time->tv_sec = now.tv_sec;
time->tv_usec = useconds;
4f0f8: 243c 0000 03e8 movel #1000,%d2 <== NOT EXECUTED
return RTEMS_NOT_DEFINED;
_TOD_Get_timeval( time );
return RTEMS_SUCCESSFUL;
4f0fe: 588f addql #4,%sp <== NOT EXECUTED
_ISR_Disable(level);
_TOD_Get( &now );
_ISR_Enable(level);
useconds = (suseconds_t)now.tv_nsec;
4f100: 202e fffc movel %fp@(-4),%d0 <== NOT EXECUTED
useconds /= (suseconds_t)TOD_NANOSECONDS_PER_MICROSECOND;
time->tv_sec = now.tv_sec;
time->tv_usec = useconds;
4f104: 4c42 0800 remsl %d2,%d0,%d0 <== NOT EXECUTED
_ISR_Enable(level);
useconds = (suseconds_t)now.tv_nsec;
useconds /= (suseconds_t)TOD_NANOSECONDS_PER_MICROSECOND;
time->tv_sec = now.tv_sec;
4f108: 24ae fff8 movel %fp@(-8),%a2@ <== NOT EXECUTED
time->tv_usec = useconds;
4f10c: 2540 0004 movel %d0,%a2@(4) <== NOT EXECUTED
4f110: 4280 clrl %d0 <== NOT EXECUTED
4f112: 6006 bras 4f11a <rtems_clock_get_tod_timeval+0x52><== NOT EXECUTED
rtems_status_code rtems_clock_get_tod_timeval(
struct timeval *time
)
{
if ( !time )
return RTEMS_INVALID_ADDRESS;
4f114: 7009 moveq #9,%d0 <== NOT EXECUTED
4f116: 6002 bras 4f11a <rtems_clock_get_tod_timeval+0x52><== NOT EXECUTED
if ( !_TOD_Is_set )
return RTEMS_NOT_DEFINED;
4f118: 700b moveq #11,%d0 <== NOT EXECUTED
_TOD_Get_timeval( time );
return RTEMS_SUCCESSFUL;
}
4f11a: 242e fff0 movel %fp@(-16),%d2 <== NOT EXECUTED
4f11e: 246e fff4 moveal %fp@(-12),%a2 <== NOT EXECUTED
4f122: 4e5e unlk %fp <== NOT EXECUTED
...
000451fc <rtems_clock_get_uptime>:
* error code - if unsuccessful
*/
rtems_status_code rtems_clock_get_uptime(
struct timespec *uptime
)
{
451fc: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
45200: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
if ( !uptime )
45204: 670e beqs 45214 <rtems_clock_get_uptime+0x18> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
_TOD_Get_uptime_as_timespec( uptime );
45206: 2f00 movel %d0,%sp@- <== NOT EXECUTED
45208: 4eb9 0004 6770 jsr 46770 <_TOD_Get_uptime_as_timespec> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
4520e: 588f addql #4,%sp <== NOT EXECUTED
45210: 4280 clrl %d0 <== NOT EXECUTED
45212: 6002 bras 45216 <rtems_clock_get_uptime+0x1a> <== NOT EXECUTED
rtems_status_code rtems_clock_get_uptime(
struct timespec *uptime
)
{
if ( !uptime )
return RTEMS_INVALID_ADDRESS;
45214: 7009 moveq #9,%d0 <== NOT EXECUTED
_TOD_Get_uptime_as_timespec( uptime );
return RTEMS_SUCCESSFUL;
}
45216: 4e5e unlk %fp <== NOT EXECUTED
...
00045eac <rtems_clock_set>:
*/
rtems_status_code rtems_clock_set(
rtems_time_of_day *time_buffer
)
{
45eac: 4e56 fff8 linkw %fp,#-8 <== NOT EXECUTED
45eb0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
45eb2: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
struct timespec newtime;
if ( !time_buffer )
45eb6: 4a8a tstl %a2 <== NOT EXECUTED
45eb8: 675a beqs 45f14 <rtems_clock_set+0x68> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
if ( _TOD_Validate( time_buffer ) ) {
45eba: 2f0a movel %a2,%sp@- <== NOT EXECUTED
45ebc: 4eb9 0004 5ffc jsr 45ffc <_TOD_Validate> <== NOT EXECUTED
45ec2: 588f addql #4,%sp <== NOT EXECUTED
45ec4: 4a00 tstb %d0 <== NOT EXECUTED
45ec6: 6750 beqs 45f18 <rtems_clock_set+0x6c> <== NOT EXECUTED
newtime.tv_sec = _TOD_To_seconds( time_buffer );
45ec8: 2f0a movel %a2,%sp@- <== NOT EXECUTED
45eca: 4eb9 0004 5f60 jsr 45f60 <_TOD_To_seconds> <== NOT EXECUTED
newtime.tv_nsec = time_buffer->ticks *
45ed0: 41f9 0005 e390 lea 5e390 <Configuration+0xc>,%a0 <== NOT EXECUTED
45ed6: 223c 0000 03e8 movel #1000,%d1 <== NOT EXECUTED
if ( !time_buffer )
return RTEMS_INVALID_ADDRESS;
if ( _TOD_Validate( time_buffer ) ) {
newtime.tv_sec = _TOD_To_seconds( time_buffer );
45edc: 2d40 fff8 movel %d0,%fp@(-8) <== NOT EXECUTED
newtime.tv_nsec = time_buffer->ticks *
45ee0: 202a 0018 movel %a2@(24),%d0 <== NOT EXECUTED
45ee4: 4c10 0800 mulsl %a0@,%d0 <== NOT EXECUTED
45ee8: 4c00 1800 mulsl %d0,%d1 <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
45eec: 2039 0006 79f8 movel 679f8 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
45ef2: 5280 addql #1,%d0 <== NOT EXECUTED
45ef4: 2d41 fffc movel %d1,%fp@(-4) <== NOT EXECUTED
45ef8: 23c0 0006 79f8 movel %d0,679f8 <_Thread_Dispatch_disable_level><== NOT EXECUTED
rtems_configuration_get_nanoseconds_per_tick();
_Thread_Disable_dispatch();
_TOD_Set( &newtime );
45efe: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
45f02: 4eb9 0004 769c jsr 4769c <_TOD_Set> <== NOT EXECUTED
_Thread_Enable_dispatch();
45f08: 4eb9 0004 8b4e jsr 48b4e <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
45f0e: 508f addql #8,%sp <== NOT EXECUTED
45f10: 4280 clrl %d0 <== NOT EXECUTED
45f12: 6006 bras 45f1a <rtems_clock_set+0x6e> <== NOT EXECUTED
)
{
struct timespec newtime;
if ( !time_buffer )
return RTEMS_INVALID_ADDRESS;
45f14: 7009 moveq #9,%d0 <== NOT EXECUTED
45f16: 6002 bras 45f1a <rtems_clock_set+0x6e> <== NOT EXECUTED
_Thread_Disable_dispatch();
_TOD_Set( &newtime );
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
return RTEMS_INVALID_CLOCK;
45f18: 7014 moveq #20,%d0 <== NOT EXECUTED
}
45f1a: 246e fff4 moveal %fp@(-12),%a2 <== NOT EXECUTED
45f1e: 4e5e unlk %fp <== NOT EXECUTED
...
00044fec <rtems_clock_set_nanoseconds_extension>:
* error code - if unsuccessful
*/
rtems_status_code rtems_clock_set_nanoseconds_extension(
rtems_nanoseconds_extension_routine routine
)
{
44fec: 4e56 0000 linkw %fp,#0
44ff0: 202e 0008 movel %fp@(8),%d0
if ( !routine )
44ff4: 670a beqs 45000 <rtems_clock_set_nanoseconds_extension+0x14><== NEVER TAKEN
return RTEMS_INVALID_ADDRESS;
_Watchdog_Nanoseconds_since_tick_handler = routine;
44ff6: 23c0 0005 dc78 movel %d0,5dc78 <_Watchdog_Nanoseconds_since_tick_handler>
return RTEMS_SUCCESSFUL;
44ffc: 4280 clrl %d0
44ffe: 6002 bras 45002 <rtems_clock_set_nanoseconds_extension+0x16>
rtems_status_code rtems_clock_set_nanoseconds_extension(
rtems_nanoseconds_extension_routine routine
)
{
if ( !routine )
return RTEMS_INVALID_ADDRESS;
45000: 7009 moveq #9,%d0 <== NOT EXECUTED
_Watchdog_Nanoseconds_since_tick_handler = routine;
return RTEMS_SUCCESSFUL;
}
45002: 4e5e unlk %fp
...
00045008 <rtems_clock_tick>:
*
* NOTE: This routine only works for leap-years through 2099.
*/
rtems_status_code rtems_clock_tick( void )
{
45008: 4e56 0000 linkw %fp,#0
_TOD_Tickle_ticks();
4500c: 4eb9 0004 6424 jsr 46424 <_TOD_Tickle_ticks>
*/
RTEMS_INLINE_ROUTINE void _Watchdog_Tickle_ticks( void )
{
_Watchdog_Tickle( &_Watchdog_Ticks_chain );
45012: 4879 0005 dbe8 pea 5dbe8 <_Watchdog_Ticks_chain> <== NOT EXECUTED
45018: 4eb9 0004 86b8 jsr 486b8 <_Watchdog_Tickle> <== NOT EXECUTED
_Watchdog_Tickle_ticks();
_Thread_Tickle_timeslice();
4501e: 4eb9 0004 81bc jsr 481bc <_Thread_Tickle_timeslice> <== NOT EXECUTED
if ( _Thread_Is_context_switch_necessary() &&
45024: 588f addql #4,%sp <== NOT EXECUTED
* otherwise.
*/
RTEMS_INLINE_ROUTINE bool _Thread_Is_context_switch_necessary( void )
{
return ( _Thread_Dispatch_necessary );
45026: 1039 0005 dfa2 moveb 5dfa2 <_Per_CPU_Information+0x18>,%d0 <== NOT EXECUTED
4502c: 670e beqs 4503c <rtems_clock_tick+0x34> <== NOT EXECUTED
* otherwise.
*/
RTEMS_INLINE_ROUTINE bool _Thread_Is_dispatching_enabled( void )
{
return ( _Thread_Dispatch_disable_level == 0 );
4502e: 2039 0005 db08 movel 5db08 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
45034: 6606 bnes 4503c <rtems_clock_tick+0x34> <== NOT EXECUTED
_Thread_Is_dispatching_enabled() )
_Thread_Dispatch();
45036: 4eb9 0004 7668 jsr 47668 <_Thread_Dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
}
4503c: 4280 clrl %d0 <== NOT EXECUTED
4503e: 4e5e unlk %fp <== NOT EXECUTED
...
0004a930 <rtems_debug_enable>:
* rtems_debug_enable
*/
void rtems_debug_enable (
rtems_debug_control to_be_enabled
)
{
4a930: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
_Debug_Level |= to_be_enabled;
4a934: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
}
4a938: 4e5e unlk %fp <== NOT EXECUTED
*/
void rtems_debug_enable (
rtems_debug_control to_be_enabled
)
{
_Debug_Level |= to_be_enabled;
4a93a: 81b9 0005 dbd0 orl %d0,5dbd0 <_Debug_Level> <== NOT EXECUTED
}
0004a96a <rtems_debug_is_enabled>:
* rtems_debug_is_enabled
*/
bool rtems_debug_is_enabled(
rtems_debug_control level
)
{
4a96a: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return (_Debug_Level & level) ? true : false;
4a96e: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
}
4a972: 4e5e unlk %fp <== NOT EXECUTED
*/
bool rtems_debug_is_enabled(
rtems_debug_control level
)
{
return (_Debug_Level & level) ? true : false;
4a974: c0b9 0005 dbd0 andl 5dbd0 <_Debug_Level>,%d0 <== NOT EXECUTED
4a97a: 56c0 sne %d0 <== NOT EXECUTED
}
4a97c: 4480 negl %d0 <== NOT EXECUTED
00045044 <rtems_event_receive>:
rtems_event_set event_in,
rtems_option option_set,
rtems_interval ticks,
rtems_event_set *event_out
)
{
45044: 4e56 0000 linkw %fp,#0
45048: 202e 0008 movel %fp@(8),%d0
4504c: 206e 0014 moveal %fp@(20),%a0
RTEMS_API_Control *api;
if ( !event_out )
45050: 4a88 tstl %a0
45052: 6748 beqs 4509c <rtems_event_receive+0x58> <== NEVER TAKEN
return RTEMS_INVALID_ADDRESS;
api = _Thread_Executing->API_Extensions[ THREAD_API_RTEMS ];
45054: 2279 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a1
4505a: 2269 00fe moveal %a1@(254),%a1
if ( _Event_sets_Is_empty( event_in ) ) {
4505e: 4a80 tstl %d0
45060: 6604 bnes 45066 <rtems_event_receive+0x22> <== ALWAYS TAKEN
*event_out = api->pending_events;
45062: 2091 movel %a1@,%a0@ <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
45064: 6038 bras 4509e <rtems_event_receive+0x5a> <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
45066: 2239 0005 db08 movel 5db08 <_Thread_Dispatch_disable_level>,%d1
4506c: 5281 addql #1,%d1
4506e: 23c1 0005 db08 movel %d1,5db08 <_Thread_Dispatch_disable_level>
}
_Thread_Disable_dispatch();
_Event_Seize( event_in, option_set, ticks, event_out );
45074: 2f08 movel %a0,%sp@-
45076: 2f2e 0010 movel %fp@(16),%sp@-
4507a: 2f2e 000c movel %fp@(12),%sp@-
4507e: 2f00 movel %d0,%sp@-
45080: 4eb9 0004 50a4 jsr 450a4 <_Event_Seize>
_Thread_Enable_dispatch();
45086: 4eb9 0004 77a6 jsr 477a6 <_Thread_Enable_dispatch>
return( _Thread_Executing->Wait.return_code );
4508c: 2079 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a0
45092: 4fef 0010 lea %sp@(16),%sp
45096: 2028 0034 movel %a0@(52),%d0
4509a: 6002 bras 4509e <rtems_event_receive+0x5a>
)
{
RTEMS_API_Control *api;
if ( !event_out )
return RTEMS_INVALID_ADDRESS;
4509c: 7009 moveq #9,%d0 <== NOT EXECUTED
_Thread_Disable_dispatch();
_Event_Seize( event_in, option_set, ticks, event_out );
_Thread_Enable_dispatch();
return( _Thread_Executing->Wait.return_code );
}
4509e: 4e5e unlk %fp
...
000451a8 <rtems_event_send>:
rtems_status_code rtems_event_send(
rtems_id id,
rtems_event_set event_in
)
{
451a8: 4e56 fffc linkw %fp,#-4
451ac: 2f02 movel %d2,%sp@-
register Thread_Control *the_thread;
Objects_Locations location;
RTEMS_API_Control *api;
the_thread = _Thread_Get( id, &location );
451ae: 486e fffc pea %fp@(-4)
451b2: 2f2e 0008 movel %fp@(8),%sp@-
451b6: 4eb9 0004 77cc jsr 477cc <_Thread_Get>
switch ( location ) {
451bc: 508f addql #8,%sp
451be: 4aae fffc tstl %fp@(-4)
451c2: 662e bnes 451f2 <rtems_event_send+0x4a> <== NEVER TAKEN
case OBJECTS_LOCAL:
api = the_thread->API_Extensions[ THREAD_API_RTEMS ];
451c4: 2240 moveal %d0,%a1
rtems_event_set *the_event_set
)
{
ISR_Level level;
_ISR_Disable( level );
451c6: 223c 0000 0700 movel #1792,%d1
451cc: 2069 00fe moveal %a1@(254),%a0
451d0: 40c2 movew %sr,%d2
451d2: 8282 orl %d2,%d1
451d4: 46c1 movew %d1,%sr
*the_event_set |= the_new_events;
451d6: 222e 000c movel %fp@(12),%d1
451da: 8390 orl %d1,%a0@
_ISR_Enable( level );
451dc: 46c2 movew %d2,%sr
_Event_sets_Post( event_in, &api->pending_events );
_Event_Surrender( the_thread );
451de: 2f00 movel %d0,%sp@-
451e0: 4eb9 0004 51fc jsr 451fc <_Event_Surrender>
_Thread_Enable_dispatch();
451e6: 4eb9 0004 77a6 jsr 477a6 <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
451ec: 588f addql #4,%sp
451ee: 4280 clrl %d0
451f0: 6002 bras 451f4 <rtems_event_send+0x4c>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
451f2: 7004 moveq #4,%d0 <== NOT EXECUTED
}
451f4: 242e fff8 movel %fp@(-8),%d2
451f8: 4e5e unlk %fp <== NOT EXECUTED
00046dec <rtems_extension_create>:
rtems_status_code rtems_extension_create(
rtems_name name,
const rtems_extensions_table *extension_table,
rtems_id *id
)
{
46dec: 4e56 fff0 linkw %fp,#-16 <== NOT EXECUTED
46df0: 48d7 1c04 moveml %d2/%a2-%a4,%sp@ <== NOT EXECUTED
46df4: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
46df8: 286e 0010 moveal %fp@(16),%a4 <== NOT EXECUTED
Extension_Control *the_extension;
if ( !id )
46dfc: 4a8c tstl %a4 <== NOT EXECUTED
46dfe: 6770 beqs 46e70 <rtems_extension_create+0x84> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
if ( !rtems_is_name_valid( name ) )
46e00: 4a82 tstl %d2 <== NOT EXECUTED
46e02: 6770 beqs 46e74 <rtems_extension_create+0x88> <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
46e04: 2039 0006 79f8 movel 679f8 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
46e0a: 5280 addql #1,%d0 <== NOT EXECUTED
46e0c: 23c0 0006 79f8 movel %d0,679f8 <_Thread_Dispatch_disable_level><== NOT EXECUTED
#ifndef __EXTENSION_MANAGER_inl
#define __EXTENSION_MANAGER_inl
RTEMS_INLINE_ROUTINE Extension_Control *_Extension_Allocate( void )
{
return (Extension_Control *) _Objects_Allocate( &_Extension_Information );
46e12: 4879 0006 7b84 pea 67b84 <_Extension_Information> <== NOT EXECUTED
46e18: 47f9 0004 8b4e lea 48b4e <_Thread_Enable_dispatch>,%a3 <== NOT EXECUTED
46e1e: 4eb9 0004 7ba8 jsr 47ba8 <_Objects_Allocate> <== NOT EXECUTED
_Thread_Disable_dispatch(); /* to prevent deletion */
the_extension = _Extension_Allocate();
if ( !the_extension ) {
46e24: 588f addql #4,%sp <== NOT EXECUTED
46e26: 2440 moveal %d0,%a2 <== NOT EXECUTED
46e28: 4a80 tstl %d0 <== NOT EXECUTED
46e2a: 6606 bnes 46e32 <rtems_extension_create+0x46> <== NOT EXECUTED
_Thread_Enable_dispatch();
46e2c: 4e93 jsr %a3@ <== NOT EXECUTED
return RTEMS_TOO_MANY;
46e2e: 7005 moveq #5,%d0 <== NOT EXECUTED
46e30: 6044 bras 46e76 <rtems_extension_create+0x8a> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _User_extensions_Add_set_with_table(
User_extensions_Control *extension,
const User_extensions_Table *extension_table
)
{
extension->Callouts = *extension_table;
46e32: 4878 0020 pea 20 <OPER2+0xc> <== NOT EXECUTED
46e36: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
46e3a: 486a 0024 pea %a2@(36) <== NOT EXECUTED
46e3e: 4eb9 0004 e5cc jsr 4e5cc <memcpy> <== NOT EXECUTED
_User_extensions_Add_set( extension );
46e44: 486a 0010 pea %a2@(16) <== NOT EXECUTED
46e48: 4eb9 0004 9778 jsr 49778 <_User_extensions_Add_set> <== NOT EXECUTED
Objects_Name name
)
{
_Objects_Set_local_object(
information,
_Objects_Get_index( the_object->id ),
46e4e: 202a 0008 movel %a2@(8),%d0 <== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
46e52: 4281 clrl %d1 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
46e54: 2079 0006 7b9c moveal 67b9c <_Extension_Information+0x18>,%a0<== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
46e5a: 3200 movew %d0,%d1 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
46e5c: 218a 1c00 movel %a2,%a0@(00000000,%d1:l:4) <== NOT EXECUTED
information,
_Objects_Get_index( the_object->id ),
the_object
);
the_object->name = name;
46e60: 2542 000c movel %d2,%a2@(12) <== NOT EXECUTED
&_Extension_Information,
&the_extension->Object,
(Objects_Name) name
);
*id = the_extension->Object.id;
46e64: 2880 movel %d0,%a4@ <== NOT EXECUTED
_Thread_Enable_dispatch();
46e66: 4e93 jsr %a3@ <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
46e68: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
46e6c: 4280 clrl %d0 <== NOT EXECUTED
46e6e: 6006 bras 46e76 <rtems_extension_create+0x8a> <== NOT EXECUTED
)
{
Extension_Control *the_extension;
if ( !id )
return RTEMS_INVALID_ADDRESS;
46e70: 7009 moveq #9,%d0 <== NOT EXECUTED
46e72: 6002 bras 46e76 <rtems_extension_create+0x8a> <== NOT EXECUTED
if ( !rtems_is_name_valid( name ) )
return RTEMS_INVALID_NAME;
46e74: 7003 moveq #3,%d0 <== NOT EXECUTED
);
*id = the_extension->Object.id;
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
46e76: 4cee 1c04 fff0 moveml %fp@(-16),%d2/%a2-%a4 <== NOT EXECUTED
46e7c: 4e5e unlk %fp <== NOT EXECUTED
00046c70 <rtems_extension_delete>:
#include <rtems/extension.h>
rtems_status_code rtems_extension_delete(
rtems_id id
)
{
46c70: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
46c74: 2f0a movel %a2,%sp@- <== NOT EXECUTED
Objects_Id id,
Objects_Locations *location
)
{
return (Extension_Control *)
_Objects_Get( &_Extension_Information, id, location );
46c76: 486e fffc pea %fp@(-4) <== NOT EXECUTED
46c7a: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
46c7e: 4879 0006 7504 pea 67504 <_Extension_Information> <== NOT EXECUTED
46c84: 4eb9 0004 7d94 jsr 47d94 <_Objects_Get> <== NOT EXECUTED
Extension_Control *the_extension;
Objects_Locations location;
the_extension = _Extension_Get( id, &location );
switch ( location ) {
46c8a: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
46c8e: 2440 moveal %d0,%a2 <== NOT EXECUTED
46c90: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
46c94: 6634 bnes 46cca <rtems_extension_delete+0x5a> <== NOT EXECUTED
case OBJECTS_LOCAL:
_User_extensions_Remove_set( &the_extension->Extension );
46c96: 486a 0010 pea %a2@(16) <== NOT EXECUTED
46c9a: 4eb9 0004 9444 jsr 49444 <_User_extensions_Remove_set> <== NOT EXECUTED
_Objects_Close( &_Extension_Information, &the_extension->Object );
46ca0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46ca2: 4879 0006 7504 pea 67504 <_Extension_Information> <== NOT EXECUTED
46ca8: 4eb9 0004 79b8 jsr 479b8 <_Objects_Close> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Extension_Free (
Extension_Control *the_extension
)
{
_Objects_Free( &_Extension_Information, &the_extension->Object );
46cae: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46cb0: 4879 0006 7504 pea 67504 <_Extension_Information> <== NOT EXECUTED
46cb6: 4eb9 0004 7c30 jsr 47c30 <_Objects_Free> <== NOT EXECUTED
_Extension_Free( the_extension );
_Thread_Enable_dispatch();
46cbc: 4eb9 0004 87fa jsr 487fa <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
46cc2: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
46cc6: 4280 clrl %d0 <== NOT EXECUTED
46cc8: 6002 bras 46ccc <rtems_extension_delete+0x5c> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
46cca: 7004 moveq #4,%d0 <== NOT EXECUTED
}
46ccc: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
46cd0: 4e5e unlk %fp <== NOT EXECUTED
00047678 <rtems_extension_ident>:
rtems_status_code rtems_extension_ident(
rtems_name name,
rtems_id *id
)
{
47678: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
Objects_Name_or_id_lookup_errors status;
status = _Objects_Name_to_id_u32(
4767c: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
47680: 2f3c 7fff ffff movel #2147483647,%sp@- <== NOT EXECUTED
47686: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4768a: 4879 0006 06a4 pea 606a4 <_Extension_Information> <== NOT EXECUTED
47690: 4eb9 0004 8888 jsr 48888 <_Objects_Name_to_id_u32> <== NOT EXECUTED
OBJECTS_SEARCH_LOCAL_NODE,
id
);
return _Status_Object_name_errors_to_status[ status ];
}
47696: 41f9 0005 dafa lea 5dafa <_Status_Object_name_errors_to_status>,%a0<== NOT EXECUTED
4769c: 4e5e unlk %fp <== NOT EXECUTED
4769e: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0 <== NOT EXECUTED
00047740 <rtems_get_version_string>:
#endif
#include <rtems/system.h>
const char *rtems_get_version_string(void)
{
47740: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return _RTEMS_version;
}
47744: 203c 0005 ec78 movel #388216,%d0 <== NOT EXECUTED
4774a: 4e5e unlk %fp <== NOT EXECUTED
...
00045380 <rtems_interrupt_catch>:
rtems_status_code rtems_interrupt_catch(
rtems_isr_entry new_isr_handler,
rtems_vector_number vector,
rtems_isr_entry *old_isr_handler
)
{
45380: 4e56 0000 linkw %fp,#0
45384: 222e 0008 movel %fp@(8),%d1
45388: 202e 000c movel %fp@(12),%d0
4538c: 206e 0010 moveal %fp@(16),%a0
if ( !_ISR_Is_vector_number_valid( vector ) )
45390: 0c80 0000 00ff cmpil #255,%d0
45396: 621c bhis 453b4 <rtems_interrupt_catch+0x34> <== NEVER TAKEN
return RTEMS_INVALID_NUMBER;
if ( !_ISR_Is_valid_user_handler( (void *) new_isr_handler ) )
45398: 4a81 tstl %d1
4539a: 671c beqs 453b8 <rtems_interrupt_catch+0x38> <== NEVER TAKEN
return RTEMS_INVALID_ADDRESS;
if ( !_ISR_Is_valid_user_handler( (void *) old_isr_handler ) )
4539c: 4a88 tstl %a0
4539e: 6718 beqs 453b8 <rtems_interrupt_catch+0x38> <== NEVER TAKEN
return RTEMS_INVALID_ADDRESS;
_ISR_Install_vector(
453a0: 2f08 movel %a0,%sp@-
453a2: 2f01 movel %d1,%sp@-
453a4: 2f00 movel %d0,%sp@-
453a6: 4eb9 0004 88ea jsr 488ea <_CPU_ISR_install_vector>
vector, (proc_ptr)new_isr_handler, (proc_ptr *)old_isr_handler );
return RTEMS_SUCCESSFUL;
453ac: 4fef 000c lea %sp@(12),%sp
453b0: 4280 clrl %d0
453b2: 6006 bras 453ba <rtems_interrupt_catch+0x3a>
rtems_vector_number vector,
rtems_isr_entry *old_isr_handler
)
{
if ( !_ISR_Is_vector_number_valid( vector ) )
return RTEMS_INVALID_NUMBER;
453b4: 700a moveq #10,%d0 <== NOT EXECUTED
453b6: 6002 bras 453ba <rtems_interrupt_catch+0x3a> <== NOT EXECUTED
if ( !_ISR_Is_valid_user_handler( (void *) new_isr_handler ) )
return RTEMS_INVALID_ADDRESS;
if ( !_ISR_Is_valid_user_handler( (void *) old_isr_handler ) )
return RTEMS_INVALID_ADDRESS;
453b8: 7009 moveq #9,%d0 <== NOT EXECUTED
_ISR_Install_vector(
vector, (proc_ptr)new_isr_handler, (proc_ptr *)old_isr_handler );
return RTEMS_SUCCESSFUL;
}
453ba: 4e5e unlk %fp
...
00045f18 <rtems_interrupt_disable>:
rtems_interrupt_level rtems_interrupt_disable( void )
{
rtems_interrupt_level previous_level;
_ISR_Disable( previous_level );
45f18: 223c 0000 0700 movel #1792,%d1 <== NOT EXECUTED
*/
#undef rtems_interrupt_disable
rtems_interrupt_level rtems_interrupt_disable( void )
{
45f1e: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
rtems_interrupt_level previous_level;
_ISR_Disable( previous_level );
45f22: 40c0 movew %sr,%d0 <== NOT EXECUTED
45f24: 8280 orl %d0,%d1 <== NOT EXECUTED
45f26: 46c1 movew %d1,%sr <== NOT EXECUTED
return previous_level;
}
45f28: 4e5e unlk %fp <== NOT EXECUTED
00045f2c <rtems_interrupt_enable>:
#undef rtems_interrupt_enable
void rtems_interrupt_enable(
rtems_interrupt_level previous_level
)
{
45f2c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
_ISR_Enable( previous_level );
45f30: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
45f34: 46c0 movew %d0,%sr <== NOT EXECUTED
}
45f36: 4e5e unlk %fp <== NOT EXECUTED
00045f3a <rtems_interrupt_flash>:
#undef rtems_interrupt_flash
void rtems_interrupt_flash(
rtems_interrupt_level previous_level
)
{
45f3a: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
_ISR_Flash( previous_level );
45f3e: 222e 0008 movel %fp@(8),%d1 <== NOT EXECUTED
45f42: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
45f48: 46c1 movew %d1,%sr <== NOT EXECUTED
45f4a: 8081 orl %d1,%d0 <== NOT EXECUTED
45f4c: 46c0 movew %d0,%sr <== NOT EXECUTED
}
45f4e: 4e5e unlk %fp <== NOT EXECUTED
00045f52 <rtems_interrupt_is_in_progress>:
*/
#undef rtems_interrupt_is_in_progress
bool rtems_interrupt_is_in_progress( void )
{
45f52: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return _ISR_Is_in_progress();
45f56: 4ab9 0005 f192 tstl 5f192 <_Per_CPU_Information+0x8> <== NOT EXECUTED
45f5c: 56c0 sne %d0 <== NOT EXECUTED
}
45f5e: 4e5e unlk %fp <== NOT EXECUTED
45f60: 4480 negl %d0 <== NOT EXECUTED
000459b4 <rtems_interrupt_level_attribute>:
rtems_attribute rtems_interrupt_level_attribute(
uint32_t level
)
{
return RTEMS_INTERRUPT_LEVEL(level);
}
459b4: 7007 moveq #7,%d0 <== NOT EXECUTED
uint32_t rtems_interrupt_mask = RTEMS_INTERRUPT_MASK;
rtems_attribute rtems_interrupt_level_attribute(
uint32_t level
)
{
459b6: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return RTEMS_INTERRUPT_LEVEL(level);
}
459ba: c0ae 0008 andl %fp@(8),%d0 <== NOT EXECUTED
459be: 4e5e unlk %fp <== NOT EXECUTED
...
0004c600 <rtems_io_close>:
rtems_status_code rtems_io_close(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *argument
)
{
4c600: 4e56 0000 linkw %fp,#0
4c604: 202e 0008 movel %fp@(8),%d0
4c608: 2f03 movel %d3,%sp@-
4c60a: 2f02 movel %d2,%sp@-
rtems_device_driver_entry callout;
if ( major >= _IO_Number_of_drivers )
4c60c: b0b9 0005 e3a6 cmpl 5e3a6 <_IO_Number_of_drivers>,%d0
4c612: 6420 bccs 4c634 <rtems_io_close+0x34> <== NEVER TAKEN
return RTEMS_INVALID_NUMBER;
callout = _IO_Driver_address_table[major].close_entry;
4c614: 2600 movel %d0,%d3
4c616: 2200 movel %d0,%d1
4c618: e78b lsll #3,%d3
4c61a: eb89 lsll #5,%d1
4c61c: 2279 0005 e3aa moveal 5e3aa <_IO_Driver_address_table>,%a1
4c622: 9283 subl %d3,%d1
4c624: 2271 1808 moveal %a1@(00000008,%d1:l),%a1
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
4c628: 4a89 tstl %a1
4c62a: 670c beqs 4c638 <rtems_io_close+0x38> <== NEVER TAKEN
}
4c62c: 241f movel %sp@+,%d2
4c62e: 261f movel %sp@+,%d3
4c630: 4e5e unlk %fp
if ( major >= _IO_Number_of_drivers )
return RTEMS_INVALID_NUMBER;
callout = _IO_Driver_address_table[major].close_entry;
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
4c632: 4ed1 jmp %a1@
)
{
rtems_device_driver_entry callout;
if ( major >= _IO_Number_of_drivers )
return RTEMS_INVALID_NUMBER;
4c634: 700a moveq #10,%d0 <== NOT EXECUTED
4c636: 6002 bras 4c63a <rtems_io_close+0x3a> <== NOT EXECUTED
callout = _IO_Driver_address_table[major].close_entry;
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
4c638: 4280 clrl %d0 <== NOT EXECUTED
}
4c63a: 241f movel %sp@+,%d2 <== NOT EXECUTED
4c63c: 261f movel %sp@+,%d3 <== NOT EXECUTED
4c63e: 4e5e unlk %fp <== NOT EXECUTED
...
0004c644 <rtems_io_control>:
rtems_status_code rtems_io_control(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *argument
)
{
4c644: 4e56 0000 linkw %fp,#0
4c648: 202e 0008 movel %fp@(8),%d0
4c64c: 2f03 movel %d3,%sp@-
4c64e: 2f02 movel %d2,%sp@-
rtems_device_driver_entry callout;
if ( major >= _IO_Number_of_drivers )
4c650: b0b9 0005 e3a6 cmpl 5e3a6 <_IO_Number_of_drivers>,%d0
4c656: 6420 bccs 4c678 <rtems_io_control+0x34> <== NEVER TAKEN
return RTEMS_INVALID_NUMBER;
callout = _IO_Driver_address_table[major].control_entry;
4c658: 2600 movel %d0,%d3
4c65a: 2200 movel %d0,%d1
4c65c: e78b lsll #3,%d3
4c65e: eb89 lsll #5,%d1
4c660: 2279 0005 e3aa moveal 5e3aa <_IO_Driver_address_table>,%a1
4c666: 9283 subl %d3,%d1
4c668: 2271 1814 moveal %a1@(00000014,%d1:l),%a1
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
4c66c: 4a89 tstl %a1
4c66e: 670c beqs 4c67c <rtems_io_control+0x38> <== NEVER TAKEN
}
4c670: 241f movel %sp@+,%d2
4c672: 261f movel %sp@+,%d3
4c674: 4e5e unlk %fp
if ( major >= _IO_Number_of_drivers )
return RTEMS_INVALID_NUMBER;
callout = _IO_Driver_address_table[major].control_entry;
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
4c676: 4ed1 jmp %a1@
)
{
rtems_device_driver_entry callout;
if ( major >= _IO_Number_of_drivers )
return RTEMS_INVALID_NUMBER;
4c678: 700a moveq #10,%d0 <== NOT EXECUTED
4c67a: 6002 bras 4c67e <rtems_io_control+0x3a> <== NOT EXECUTED
callout = _IO_Driver_address_table[major].control_entry;
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
4c67c: 4280 clrl %d0 <== NOT EXECUTED
}
4c67e: 241f movel %sp@+,%d2 <== NOT EXECUTED
4c680: 261f movel %sp@+,%d3 <== NOT EXECUTED
4c682: 4e5e unlk %fp <== NOT EXECUTED
...
0004a980 <rtems_io_initialize>:
rtems_status_code rtems_io_initialize(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *argument
)
{
4a980: 4e56 0000 linkw %fp,#0
4a984: 202e 0008 movel %fp@(8),%d0
4a988: 2f03 movel %d3,%sp@-
4a98a: 2f02 movel %d2,%sp@-
rtems_device_driver_entry callout;
if ( major >= _IO_Number_of_drivers )
4a98c: b0b9 0005 e3a6 cmpl 5e3a6 <_IO_Number_of_drivers>,%d0
4a992: 6420 bccs 4a9b4 <rtems_io_initialize+0x34> <== NEVER TAKEN
return RTEMS_INVALID_NUMBER;
callout = _IO_Driver_address_table[major].initialization_entry;
4a994: 2600 movel %d0,%d3
4a996: 2400 movel %d0,%d2
4a998: e78b lsll #3,%d3
4a99a: 2279 0005 e3aa moveal 5e3aa <_IO_Driver_address_table>,%a1
4a9a0: 93c3 subal %d3,%a1
4a9a2: eb8a lsll #5,%d2
4a9a4: 2271 2800 moveal %a1@(00000000,%d2:l),%a1
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
4a9a8: 4a89 tstl %a1
4a9aa: 670c beqs 4a9b8 <rtems_io_initialize+0x38>
}
4a9ac: 241f movel %sp@+,%d2
4a9ae: 261f movel %sp@+,%d3
4a9b0: 4e5e unlk %fp
if ( major >= _IO_Number_of_drivers )
return RTEMS_INVALID_NUMBER;
callout = _IO_Driver_address_table[major].initialization_entry;
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
4a9b2: 4ed1 jmp %a1@
)
{
rtems_device_driver_entry callout;
if ( major >= _IO_Number_of_drivers )
return RTEMS_INVALID_NUMBER;
4a9b4: 700a moveq #10,%d0 <== NOT EXECUTED
4a9b6: 6002 bras 4a9ba <rtems_io_initialize+0x3a> <== NOT EXECUTED
callout = _IO_Driver_address_table[major].initialization_entry;
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
4a9b8: 4280 clrl %d0
}
4a9ba: 241f movel %sp@+,%d2
4a9bc: 261f movel %sp@+,%d3
4a9be: 4e5e unlk %fp
...
0004c688 <rtems_io_open>:
rtems_status_code rtems_io_open(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *argument
)
{
4c688: 4e56 0000 linkw %fp,#0
4c68c: 202e 0008 movel %fp@(8),%d0
4c690: 2f03 movel %d3,%sp@-
4c692: 2f02 movel %d2,%sp@-
rtems_device_driver_entry callout;
if ( major >= _IO_Number_of_drivers )
4c694: b0b9 0005 e3a6 cmpl 5e3a6 <_IO_Number_of_drivers>,%d0
4c69a: 6420 bccs 4c6bc <rtems_io_open+0x34> <== NEVER TAKEN
return RTEMS_INVALID_NUMBER;
callout = _IO_Driver_address_table[major].open_entry;
4c69c: 2600 movel %d0,%d3
4c69e: 2200 movel %d0,%d1
4c6a0: e78b lsll #3,%d3
4c6a2: eb89 lsll #5,%d1
4c6a4: 2279 0005 e3aa moveal 5e3aa <_IO_Driver_address_table>,%a1
4c6aa: 9283 subl %d3,%d1
4c6ac: 2271 1804 moveal %a1@(00000004,%d1:l),%a1
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
4c6b0: 4a89 tstl %a1
4c6b2: 670c beqs 4c6c0 <rtems_io_open+0x38> <== NEVER TAKEN
}
4c6b4: 241f movel %sp@+,%d2
4c6b6: 261f movel %sp@+,%d3
4c6b8: 4e5e unlk %fp
if ( major >= _IO_Number_of_drivers )
return RTEMS_INVALID_NUMBER;
callout = _IO_Driver_address_table[major].open_entry;
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
4c6ba: 4ed1 jmp %a1@
)
{
rtems_device_driver_entry callout;
if ( major >= _IO_Number_of_drivers )
return RTEMS_INVALID_NUMBER;
4c6bc: 700a moveq #10,%d0 <== NOT EXECUTED
4c6be: 6002 bras 4c6c2 <rtems_io_open+0x3a> <== NOT EXECUTED
callout = _IO_Driver_address_table[major].open_entry;
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
4c6c0: 4280 clrl %d0 <== NOT EXECUTED
}
4c6c2: 241f movel %sp@+,%d2 <== NOT EXECUTED
4c6c4: 261f movel %sp@+,%d3 <== NOT EXECUTED
4c6c6: 4e5e unlk %fp <== NOT EXECUTED
...
0004c6cc <rtems_io_read>:
rtems_status_code rtems_io_read(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *argument
)
{
4c6cc: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4c6d0: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
4c6d4: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4c6d6: 2f02 movel %d2,%sp@- <== NOT EXECUTED
rtems_device_driver_entry callout;
if ( major >= _IO_Number_of_drivers )
4c6d8: b0b9 0005 e3a6 cmpl 5e3a6 <_IO_Number_of_drivers>,%d0 <== NOT EXECUTED
4c6de: 6420 bccs 4c700 <rtems_io_read+0x34> <== NOT EXECUTED
return RTEMS_INVALID_NUMBER;
callout = _IO_Driver_address_table[major].read_entry;
4c6e0: 2600 movel %d0,%d3 <== NOT EXECUTED
4c6e2: 2200 movel %d0,%d1 <== NOT EXECUTED
4c6e4: e78b lsll #3,%d3 <== NOT EXECUTED
4c6e6: eb89 lsll #5,%d1 <== NOT EXECUTED
4c6e8: 2279 0005 e3aa moveal 5e3aa <_IO_Driver_address_table>,%a1 <== NOT EXECUTED
4c6ee: 9283 subl %d3,%d1 <== NOT EXECUTED
4c6f0: 2271 180c moveal %a1@(0000000c,%d1:l),%a1 <== NOT EXECUTED
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
4c6f4: 4a89 tstl %a1 <== NOT EXECUTED
4c6f6: 670c beqs 4c704 <rtems_io_read+0x38> <== NOT EXECUTED
}
4c6f8: 241f movel %sp@+,%d2 <== NOT EXECUTED
4c6fa: 261f movel %sp@+,%d3 <== NOT EXECUTED
4c6fc: 4e5e unlk %fp <== NOT EXECUTED
if ( major >= _IO_Number_of_drivers )
return RTEMS_INVALID_NUMBER;
callout = _IO_Driver_address_table[major].read_entry;
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
4c6fe: 4ed1 jmp %a1@ <== NOT EXECUTED
)
{
rtems_device_driver_entry callout;
if ( major >= _IO_Number_of_drivers )
return RTEMS_INVALID_NUMBER;
4c700: 700a moveq #10,%d0 <== NOT EXECUTED
4c702: 6002 bras 4c706 <rtems_io_read+0x3a> <== NOT EXECUTED
callout = _IO_Driver_address_table[major].read_entry;
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
4c704: 4280 clrl %d0 <== NOT EXECUTED
}
4c706: 241f movel %sp@+,%d2 <== NOT EXECUTED
4c708: 261f movel %sp@+,%d3 <== NOT EXECUTED
4c70a: 4e5e unlk %fp <== NOT EXECUTED
...
00046c00 <rtems_io_register_driver>:
rtems_status_code rtems_io_register_driver(
rtems_device_major_number major,
const rtems_driver_address_table *driver_table,
rtems_device_major_number *registered_major
)
{
46c00: 4e56 0000 linkw %fp,#0
46c04: 206e 000c moveal %fp@(12),%a0
46c08: 2f0a movel %a2,%sp@-
46c0a: 226e 0010 moveal %fp@(16),%a1
46c0e: 2f02 movel %d2,%sp@-
46c10: 242e 0008 movel %fp@(8),%d2
rtems_device_major_number major_limit = _IO_Number_of_drivers;
46c14: 2039 0006 1a3e movel 61a3e <_IO_Number_of_drivers>,%d0
if ( rtems_interrupt_is_in_progress() )
46c1a: 4ab9 0006 162a tstl 6162a <_Per_CPU_Information+0x8>
46c20: 6600 00d8 bnew 46cfa <rtems_io_register_driver+0xfa>
return RTEMS_CALLED_FROM_ISR;
if ( registered_major == NULL )
46c24: 4a89 tstl %a1
46c26: 6700 00d6 beqw 46cfe <rtems_io_register_driver+0xfe>
return RTEMS_INVALID_ADDRESS;
/* Set it to an invalid value */
*registered_major = major_limit;
46c2a: 2280 movel %d0,%a1@
if ( driver_table == NULL )
46c2c: 4a88 tstl %a0
46c2e: 6700 00ce beqw 46cfe <rtems_io_register_driver+0xfe>
static inline bool rtems_io_is_empty_table(
const rtems_driver_address_table *table
)
{
return table->initialization_entry == NULL && table->open_entry == NULL;
46c32: 4a90 tstl %a0@
46c34: 6600 00da bnew 46d10 <rtems_io_register_driver+0x110>
46c38: 4aa8 0004 tstl %a0@(4)
46c3c: 6600 00d2 bnew 46d10 <rtems_io_register_driver+0x110>
46c40: 6000 00bc braw 46cfe <rtems_io_register_driver+0xfe> <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
46c44: 2039 0006 11a0 movel 611a0 <_Thread_Dispatch_disable_level>,%d0
46c4a: 5280 addql #1,%d0
46c4c: 23c0 0006 11a0 movel %d0,611a0 <_Thread_Dispatch_disable_level>
if ( major >= major_limit )
return RTEMS_INVALID_NUMBER;
_Thread_Disable_dispatch();
if ( major == 0 ) {
46c52: 4a82 tstl %d2
46c54: 662c bnes 46c82 <rtems_io_register_driver+0x82> <== NEVER TAKEN
static rtems_status_code rtems_io_obtain_major_number(
rtems_device_major_number *major
)
{
rtems_device_major_number n = _IO_Number_of_drivers;
46c56: 2039 0006 1a3e movel 61a3e <_IO_Number_of_drivers>,%d0
46c5c: 2479 0006 1a42 moveal 61a42 <_IO_Driver_address_table>,%a2
46c62: 6010 bras 46c74 <rtems_io_register_driver+0x74>
static inline bool rtems_io_is_empty_table(
const rtems_driver_address_table *table
)
{
return table->initialization_entry == NULL && table->open_entry == NULL;
46c64: 4a92 tstl %a2@
46c66: 6600 00b0 bnew 46d18 <rtems_io_register_driver+0x118>
46c6a: 4aaa 0004 tstl %a2@(4)
46c6e: 6600 00a8 bnew 46d18 <rtems_io_register_driver+0x118>
46c72: 6004 bras 46c78 <rtems_io_register_driver+0x78>
rtems_device_major_number n = _IO_Number_of_drivers;
rtems_device_major_number m = 0;
/* major is error checked by caller */
for ( m = 0; m < n; ++m ) {
46c74: b082 cmpl %d2,%d0
46c76: 62ec bhis 46c64 <rtems_io_register_driver+0x64> <== ALWAYS TAKEN
if ( rtems_io_is_empty_table( table ) )
break;
}
/* Assigns invalid value in case of failure */
*major = m;
46c78: 2282 movel %d2,%a1@
if ( m != n )
46c7a: b082 cmpl %d2,%d0
46c7c: 6638 bnes 46cb6 <rtems_io_register_driver+0xb6> <== ALWAYS TAKEN
46c7e: 6000 00a2 braw 46d22 <rtems_io_register_driver+0x122> <== NOT EXECUTED
_Thread_Enable_dispatch();
return sc;
}
major = *registered_major;
} else {
rtems_driver_address_table *const table = _IO_Driver_address_table + major;
46c82: 2202 movel %d2,%d1 <== NOT EXECUTED
46c84: 2002 movel %d2,%d0 <== NOT EXECUTED
46c86: e789 lsll #3,%d1 <== NOT EXECUTED
46c88: eb88 lsll #5,%d0 <== NOT EXECUTED
46c8a: 2479 0006 1a42 moveal 61a42 <_IO_Driver_address_table>,%a2 <== NOT EXECUTED
46c90: 9081 subl %d1,%d0 <== NOT EXECUTED
46c92: d5c0 addal %d0,%a2 <== NOT EXECUTED
static inline bool rtems_io_is_empty_table(
const rtems_driver_address_table *table
)
{
return table->initialization_entry == NULL && table->open_entry == NULL;
46c94: 4a92 tstl %a2@ <== NOT EXECUTED
46c96: 660c bnes 46ca4 <rtems_io_register_driver+0xa4> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
return RTEMS_TOO_MANY;
}
rtems_status_code rtems_io_register_driver(
46c98: 4aaa 0004 tstl %a2@(4) <== NOT EXECUTED
46c9c: 57c0 seq %d0 <== NOT EXECUTED
46c9e: 49c0 extbl %d0 <== NOT EXECUTED
46ca0: 4480 negl %d0 <== NOT EXECUTED
46ca2: 6002 bras 46ca6 <rtems_io_register_driver+0xa6> <== NOT EXECUTED
static inline bool rtems_io_is_empty_table(
const rtems_driver_address_table *table
)
{
return table->initialization_entry == NULL && table->open_entry == NULL;
46ca4: 4280 clrl %d0 <== NOT EXECUTED
}
major = *registered_major;
} else {
rtems_driver_address_table *const table = _IO_Driver_address_table + major;
if ( !rtems_io_is_empty_table( table ) ) {
46ca6: 4a00 tstb %d0 <== NOT EXECUTED
46ca8: 660a bnes 46cb4 <rtems_io_register_driver+0xb4> <== NOT EXECUTED
_Thread_Enable_dispatch();
46caa: 4eb9 0004 87c2 jsr 487c2 <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_RESOURCE_IN_USE;
46cb0: 700c moveq #12,%d0 <== NOT EXECUTED
46cb2: 6050 bras 46d04 <rtems_io_register_driver+0x104> <== NOT EXECUTED
}
*registered_major = major;
46cb4: 2282 movel %d2,%a1@ <== NOT EXECUTED
}
_IO_Driver_address_table [major] = *driver_table;
46cb6: 2202 movel %d2,%d1
46cb8: 2002 movel %d2,%d0
46cba: 4878 0018 pea 18 <OPER2+0x4>
46cbe: e789 lsll #3,%d1
46cc0: eb88 lsll #5,%d0
46cc2: 2f08 movel %a0,%sp@-
46cc4: 9081 subl %d1,%d0
46cc6: d0b9 0006 1a42 addl 61a42 <_IO_Driver_address_table>,%d0
46ccc: 2f00 movel %d0,%sp@-
46cce: 4eb9 0005 09c0 jsr 509c0 <memcpy>
_Thread_Enable_dispatch();
46cd4: 4eb9 0004 87c2 jsr 487c2 <_Thread_Enable_dispatch>
return rtems_io_initialize( major, 0, NULL );
}
46cda: 246e fffc moveal %fp@(-4),%a2
_IO_Driver_address_table [major] = *driver_table;
_Thread_Enable_dispatch();
return rtems_io_initialize( major, 0, NULL );
46cde: 4fef 000c lea %sp@(12),%sp
46ce2: 2d42 0008 movel %d2,%fp@(8)
}
46ce6: 242e fff8 movel %fp@(-8),%d2
_IO_Driver_address_table [major] = *driver_table;
_Thread_Enable_dispatch();
return rtems_io_initialize( major, 0, NULL );
46cea: 42ae 0010 clrl %fp@(16)
46cee: 42ae 000c clrl %fp@(12)
}
46cf2: 4e5e unlk %fp
_IO_Driver_address_table [major] = *driver_table;
_Thread_Enable_dispatch();
return rtems_io_initialize( major, 0, NULL );
46cf4: 4ef9 0004 e0ec jmp 4e0ec <rtems_io_initialize>
)
{
rtems_device_major_number major_limit = _IO_Number_of_drivers;
if ( rtems_interrupt_is_in_progress() )
return RTEMS_CALLED_FROM_ISR;
46cfa: 7012 moveq #18,%d0 <== NOT EXECUTED
46cfc: 6006 bras 46d04 <rtems_io_register_driver+0x104> <== NOT EXECUTED
if ( driver_table == NULL )
return RTEMS_INVALID_ADDRESS;
if ( rtems_io_is_empty_table( driver_table ) )
return RTEMS_INVALID_ADDRESS;
46cfe: 7009 moveq #9,%d0 <== NOT EXECUTED
46d00: 6002 bras 46d04 <rtems_io_register_driver+0x104> <== NOT EXECUTED
if ( major >= major_limit )
return RTEMS_INVALID_NUMBER;
46d02: 700a moveq #10,%d0 <== NOT EXECUTED
_IO_Driver_address_table [major] = *driver_table;
_Thread_Enable_dispatch();
return rtems_io_initialize( major, 0, NULL );
}
46d04: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
46d08: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
46d0c: 4e5e unlk %fp <== NOT EXECUTED
46d0e: 4e75 rts <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
if ( rtems_io_is_empty_table( driver_table ) )
return RTEMS_INVALID_ADDRESS;
if ( major >= major_limit )
46d10: b082 cmpl %d2,%d0
46d12: 6200 ff30 bhiw 46c44 <rtems_io_register_driver+0x44>
46d16: 60ea bras 46d02 <rtems_io_register_driver+0x102> <== NOT EXECUTED
rtems_device_major_number n = _IO_Number_of_drivers;
rtems_device_major_number m = 0;
/* major is error checked by caller */
for ( m = 0; m < n; ++m ) {
46d18: 5282 addql #1,%d2
46d1a: 45ea 0018 lea %a2@(24),%a2
46d1e: 6000 ff54 braw 46c74 <rtems_io_register_driver+0x74>
if ( major == 0 ) {
rtems_status_code sc = rtems_io_obtain_major_number( registered_major );
if ( sc != RTEMS_SUCCESSFUL ) {
_Thread_Enable_dispatch();
46d22: 4eb9 0004 87c2 jsr 487c2 <_Thread_Enable_dispatch> <== NOT EXECUTED
*major = m;
if ( m != n )
return RTEMS_SUCCESSFUL;
return RTEMS_TOO_MANY;
46d28: 7005 moveq #5,%d0 <== NOT EXECUTED
if ( major == 0 ) {
rtems_status_code sc = rtems_io_obtain_major_number( registered_major );
if ( sc != RTEMS_SUCCESSFUL ) {
_Thread_Enable_dispatch();
return sc;
46d2a: 60d8 bras 46d04 <rtems_io_register_driver+0x104> <== NOT EXECUTED
00046d2c <rtems_io_unregister_driver>:
*/
rtems_status_code rtems_io_unregister_driver(
rtems_device_major_number major
)
{
46d2c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
46d30: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
if ( rtems_interrupt_is_in_progress() )
46d34: 4ab9 0006 162a tstl 6162a <_Per_CPU_Information+0x8> <== NOT EXECUTED
46d3a: 6640 bnes 46d7c <rtems_io_unregister_driver+0x50><== NOT EXECUTED
return RTEMS_CALLED_FROM_ISR;
if ( major < _IO_Number_of_drivers ) {
46d3c: b0b9 0006 1a3e cmpl 61a3e <_IO_Number_of_drivers>,%d0 <== NOT EXECUTED
46d42: 643c bccs 46d80 <rtems_io_unregister_driver+0x54><== NOT EXECUTED
46d44: 2239 0006 11a0 movel 611a0 <_Thread_Dispatch_disable_level>,%d1<== NOT EXECUTED
46d4a: 5281 addql #1,%d1 <== NOT EXECUTED
46d4c: 23c1 0006 11a0 movel %d1,611a0 <_Thread_Dispatch_disable_level><== NOT EXECUTED
_Thread_Disable_dispatch();
memset(
&_IO_Driver_address_table[major],
46d52: 2200 movel %d0,%d1 <== NOT EXECUTED
if ( rtems_interrupt_is_in_progress() )
return RTEMS_CALLED_FROM_ISR;
if ( major < _IO_Number_of_drivers ) {
_Thread_Disable_dispatch();
memset(
46d54: 4878 0018 pea 18 <OPER2+0x4> <== NOT EXECUTED
&_IO_Driver_address_table[major],
46d58: e789 lsll #3,%d1 <== NOT EXECUTED
46d5a: eb88 lsll #5,%d0 <== NOT EXECUTED
if ( rtems_interrupt_is_in_progress() )
return RTEMS_CALLED_FROM_ISR;
if ( major < _IO_Number_of_drivers ) {
_Thread_Disable_dispatch();
memset(
46d5c: 42a7 clrl %sp@- <== NOT EXECUTED
&_IO_Driver_address_table[major],
46d5e: 9081 subl %d1,%d0 <== NOT EXECUTED
if ( rtems_interrupt_is_in_progress() )
return RTEMS_CALLED_FROM_ISR;
if ( major < _IO_Number_of_drivers ) {
_Thread_Disable_dispatch();
memset(
46d60: d0b9 0006 1a42 addl 61a42 <_IO_Driver_address_table>,%d0 <== NOT EXECUTED
46d66: 2f00 movel %d0,%sp@- <== NOT EXECUTED
46d68: 4eb9 0005 0a30 jsr 50a30 <memset> <== NOT EXECUTED
&_IO_Driver_address_table[major],
0,
sizeof( rtems_driver_address_table )
);
_Thread_Enable_dispatch();
46d6e: 4eb9 0004 87c2 jsr 487c2 <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
46d74: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
46d78: 4280 clrl %d0 <== NOT EXECUTED
46d7a: 6006 bras 46d82 <rtems_io_unregister_driver+0x56><== NOT EXECUTED
rtems_status_code rtems_io_unregister_driver(
rtems_device_major_number major
)
{
if ( rtems_interrupt_is_in_progress() )
return RTEMS_CALLED_FROM_ISR;
46d7c: 7012 moveq #18,%d0 <== NOT EXECUTED
46d7e: 6002 bras 46d82 <rtems_io_unregister_driver+0x56><== NOT EXECUTED
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
return RTEMS_UNSATISFIED;
46d80: 700d moveq #13,%d0 <== NOT EXECUTED
}
46d82: 4e5e unlk %fp <== NOT EXECUTED
...
0004c710 <rtems_io_write>:
rtems_status_code rtems_io_write(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *argument
)
{
4c710: 4e56 0000 linkw %fp,#0
4c714: 202e 0008 movel %fp@(8),%d0
4c718: 2f03 movel %d3,%sp@-
4c71a: 2f02 movel %d2,%sp@-
rtems_device_driver_entry callout;
if ( major >= _IO_Number_of_drivers )
4c71c: b0b9 0005 e3a6 cmpl 5e3a6 <_IO_Number_of_drivers>,%d0
4c722: 6420 bccs 4c744 <rtems_io_write+0x34> <== NEVER TAKEN
return RTEMS_INVALID_NUMBER;
callout = _IO_Driver_address_table[major].write_entry;
4c724: 2600 movel %d0,%d3
4c726: 2200 movel %d0,%d1
4c728: e78b lsll #3,%d3
4c72a: eb89 lsll #5,%d1
4c72c: 2279 0005 e3aa moveal 5e3aa <_IO_Driver_address_table>,%a1
4c732: 9283 subl %d3,%d1
4c734: 2271 1810 moveal %a1@(00000010,%d1:l),%a1
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
4c738: 4a89 tstl %a1
4c73a: 670c beqs 4c748 <rtems_io_write+0x38> <== NEVER TAKEN
}
4c73c: 241f movel %sp@+,%d2
4c73e: 261f movel %sp@+,%d3
4c740: 4e5e unlk %fp
if ( major >= _IO_Number_of_drivers )
return RTEMS_INVALID_NUMBER;
callout = _IO_Driver_address_table[major].write_entry;
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
4c742: 4ed1 jmp %a1@
)
{
rtems_device_driver_entry callout;
if ( major >= _IO_Number_of_drivers )
return RTEMS_INVALID_NUMBER;
4c744: 700a moveq #10,%d0 <== NOT EXECUTED
4c746: 6002 bras 4c74a <rtems_io_write+0x3a> <== NOT EXECUTED
callout = _IO_Driver_address_table[major].write_entry;
return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL;
4c748: 4280 clrl %d0 <== NOT EXECUTED
}
4c74a: 241f movel %sp@+,%d2 <== NOT EXECUTED
4c74c: 261f movel %sp@+,%d3 <== NOT EXECUTED
4c74e: 4e5e unlk %fp <== NOT EXECUTED
...
00047b54 <rtems_iterate_over_all_threads>:
#include <rtems/system.h>
#include <rtems/score/thread.h>
void rtems_iterate_over_all_threads(rtems_per_thread_routine routine)
{
47b54: 4e56 fff0 linkw %fp,#-16 <== NOT EXECUTED
47b58: 48d7 1c04 moveml %d2/%a2-%a4,%sp@ <== NOT EXECUTED
47b5c: 286e 0008 moveal %fp@(8),%a4 <== NOT EXECUTED
uint32_t i;
uint32_t api_index;
Thread_Control *the_thread;
Objects_Information *information;
if ( !routine )
47b60: 4a8c tstl %a4 <== NOT EXECUTED
47b62: 6738 beqs 47b9c <rtems_iterate_over_all_threads+0x48><== NOT EXECUTED
47b64: 45f9 0006 79b8 lea 679b8 <_Objects_Information_table+0x4>,%a2<== NOT EXECUTED
#if !defined(RTEMS_POSIX_API) || defined(RTEMS_DEBUG)
if ( !_Objects_Information_table[ api_index ] )
continue;
#endif
information = _Objects_Information_table[ api_index ][ 1 ];
47b6a: 205a moveal %a2@+,%a0 <== NOT EXECUTED
47b6c: 2668 0004 moveal %a0@(4),%a3 <== NOT EXECUTED
if ( !information )
47b70: 4a8b tstl %a3 <== NOT EXECUTED
47b72: 6720 beqs 47b94 <rtems_iterate_over_all_threads+0x40><== NOT EXECUTED
47b74: 7401 moveq #1,%d2 <== NOT EXECUTED
47b76: 6012 bras 47b8a <rtems_iterate_over_all_threads+0x36><== NOT EXECUTED
continue;
for ( i=1 ; i <= information->maximum ; i++ ) {
the_thread = (Thread_Control *)information->local_table[ i ];
47b78: 206b 0018 moveal %a3@(24),%a0 <== NOT EXECUTED
47b7c: 2030 2c00 movel %a0@(00000000,%d2:l:4),%d0 <== NOT EXECUTED
if ( !the_thread )
47b80: 6706 beqs 47b88 <rtems_iterate_over_all_threads+0x34><== NOT EXECUTED
continue;
(*routine)(the_thread);
47b82: 2f00 movel %d0,%sp@- <== NOT EXECUTED
47b84: 4e94 jsr %a4@ <== NOT EXECUTED
47b86: 588f addql #4,%sp <== NOT EXECUTED
information = _Objects_Information_table[ api_index ][ 1 ];
if ( !information )
continue;
for ( i=1 ; i <= information->maximum ; i++ ) {
47b88: 5282 addql #1,%d2 <== NOT EXECUTED
47b8a: 4280 clrl %d0 <== NOT EXECUTED
47b8c: 302b 000e movew %a3@(14),%d0 <== NOT EXECUTED
47b90: b082 cmpl %d2,%d0 <== NOT EXECUTED
47b92: 64e4 bccs 47b78 <rtems_iterate_over_all_threads+0x24><== NOT EXECUTED
Objects_Information *information;
if ( !routine )
return;
for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; api_index++ ) {
47b94: b5fc 0006 79c4 cmpal #424388,%a2 <== NOT EXECUTED
47b9a: 66ce bnes 47b6a <rtems_iterate_over_all_threads+0x16><== NOT EXECUTED
(*routine)(the_thread);
}
}
}
47b9c: 4cee 1c04 fff0 moveml %fp@(-16),%d2/%a2-%a4 <== NOT EXECUTED
47ba2: 4e5e unlk %fp <== NOT EXECUTED
...
0004f8a0 <rtems_message_queue_broadcast>:
rtems_id id,
const void *buffer,
size_t size,
uint32_t *count
)
{
4f8a0: 4e56 fff0 linkw %fp,#-16 <== NOT EXECUTED
4f8a4: 48d7 001c moveml %d2-%d4,%sp@ <== NOT EXECUTED
4f8a8: 262e 0008 movel %fp@(8),%d3 <== NOT EXECUTED
4f8ac: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
4f8b0: 282e 0014 movel %fp@(20),%d4 <== NOT EXECUTED
register Message_queue_Control *the_message_queue;
Objects_Locations location;
CORE_message_queue_Status core_status;
if ( !buffer )
4f8b4: 4a82 tstl %d2 <== NOT EXECUTED
4f8b6: 674e beqs 4f906 <rtems_message_queue_broadcast+0x66><== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
if ( !count )
4f8b8: 4a84 tstl %d4 <== NOT EXECUTED
4f8ba: 674a beqs 4f906 <rtems_message_queue_broadcast+0x66><== NOT EXECUTED
Objects_Id id,
Objects_Locations *location
)
{
return (Message_queue_Control *)
_Objects_Get( &_Message_queue_Information, id, location );
4f8bc: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4f8c0: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4f8c2: 4879 0007 6e18 pea 76e18 <_Message_queue_Information> <== NOT EXECUTED
4f8c8: 4eb9 0005 43f0 jsr 543f0 <_Objects_Get> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
the_message_queue = _Message_queue_Get( id, &location );
switch ( location ) {
4f8ce: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4f8d2: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4f8d6: 6632 bnes 4f90a <rtems_message_queue_broadcast+0x6a><== NOT EXECUTED
case OBJECTS_LOCAL:
core_status = _CORE_message_queue_Broadcast(
4f8d8: 2f04 movel %d4,%sp@- <== NOT EXECUTED
4f8da: 2040 moveal %d0,%a0 <== NOT EXECUTED
4f8dc: 42a7 clrl %sp@- <== NOT EXECUTED
4f8de: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4f8e0: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
4f8e4: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4f8e6: 4868 0014 pea %a0@(20) <== NOT EXECUTED
4f8ea: 4eb9 0005 2b20 jsr 52b20 <_CORE_message_queue_Broadcast> <== NOT EXECUTED
4f8f0: 2400 movel %d0,%d2 <== NOT EXECUTED
NULL,
#endif
count
);
_Thread_Enable_dispatch();
4f8f2: 4eb9 0005 4eca jsr 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
return
4f8f8: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4f8fa: 4eb9 0004 fc24 jsr 4fc24 <_Message_queue_Translate_core_message_queue_return_code><== NOT EXECUTED
4f900: 4fef 001c lea %sp@(28),%sp <== NOT EXECUTED
4f904: 6006 bras 4f90c <rtems_message_queue_broadcast+0x6c><== NOT EXECUTED
if ( !buffer )
return RTEMS_INVALID_ADDRESS;
if ( !count )
return RTEMS_INVALID_ADDRESS;
4f906: 7009 moveq #9,%d0 <== NOT EXECUTED
4f908: 6002 bras 4f90c <rtems_message_queue_broadcast+0x6c><== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4f90a: 7004 moveq #4,%d0 <== NOT EXECUTED
}
4f90c: 4cee 001c fff0 moveml %fp@(-16),%d2-%d4 <== NOT EXECUTED
4f912: 4e5e unlk %fp <== NOT EXECUTED
...
0004cc58 <rtems_message_queue_create>:
uint32_t count,
size_t max_message_size,
rtems_attribute attribute_set,
rtems_id *id
)
{
4cc58: 4e56 ffe4 linkw %fp,#-28 <== NOT EXECUTED
4cc5c: 48d7 1c1c moveml %d2-%d4/%a2-%a4,%sp@ <== NOT EXECUTED
4cc60: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
4cc64: 266e 000c moveal %fp@(12),%a3 <== NOT EXECUTED
4cc68: 262e 0010 movel %fp@(16),%d3 <== NOT EXECUTED
4cc6c: 282e 0014 movel %fp@(20),%d4 <== NOT EXECUTED
4cc70: 286e 0018 moveal %fp@(24),%a4 <== NOT EXECUTED
CORE_message_queue_Attributes the_msgq_attributes;
#if defined(RTEMS_MULTIPROCESSING)
bool is_global;
#endif
if ( !rtems_is_name_valid( name ) )
4cc74: 4a82 tstl %d2 <== NOT EXECUTED
4cc76: 6700 009a beqw 4cd12 <rtems_message_queue_create+0xba><== NOT EXECUTED
return RTEMS_INVALID_NAME;
if ( !id )
4cc7a: 4a8c tstl %a4 <== NOT EXECUTED
4cc7c: 6700 0098 beqw 4cd16 <rtems_message_queue_create+0xbe><== NOT EXECUTED
if ( (is_global = _Attributes_Is_global( attribute_set ) ) &&
!_System_state_Is_multiprocessing )
return RTEMS_MP_NOT_CONFIGURED;
#endif
if ( count == 0 )
4cc80: 4a8b tstl %a3 <== NOT EXECUTED
4cc82: 6700 0096 beqw 4cd1a <rtems_message_queue_create+0xc2><== NOT EXECUTED
return RTEMS_INVALID_NUMBER;
if ( max_message_size == 0 )
4cc86: 4a83 tstl %d3 <== NOT EXECUTED
4cc88: 6700 0094 beqw 4cd1e <rtems_message_queue_create+0xc6><== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
4cc8c: 2039 0006 6770 movel 66770 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
4cc92: 5280 addql #1,%d0 <== NOT EXECUTED
4cc94: 23c0 0006 6770 movel %d0,66770 <_Thread_Dispatch_disable_level><== NOT EXECUTED
#endif
#endif
_Thread_Disable_dispatch(); /* protects object pointer */
the_message_queue = _Message_queue_Allocate();
4cc9a: 4eb9 0005 2778 jsr 52778 <_Message_queue_Allocate> <== NOT EXECUTED
4cca0: 2440 moveal %d0,%a2 <== NOT EXECUTED
if ( !the_message_queue ) {
4cca2: 4a80 tstl %d0 <== NOT EXECUTED
4cca4: 660a bnes 4ccb0 <rtems_message_queue_create+0x58><== NOT EXECUTED
_Thread_Enable_dispatch();
4cca6: 4eb9 0004 f912 jsr 4f912 <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_TOO_MANY;
4ccac: 7005 moveq #5,%d0 <== NOT EXECUTED
4ccae: 6070 bras 4cd20 <rtems_message_queue_create+0xc8><== NOT EXECUTED
#endif
the_message_queue->attribute_set = attribute_set;
if (_Attributes_Is_priority( attribute_set ) )
the_msgq_attributes.discipline = CORE_MESSAGE_QUEUE_DISCIPLINES_PRIORITY;
4ccb0: 204e moveal %fp,%a0 <== NOT EXECUTED
4ccb2: 44c4 movew %d4,%ccr <== NOT EXECUTED
4ccb4: 56c0 sne %d0 <== NOT EXECUTED
_Thread_Enable_dispatch();
return RTEMS_TOO_MANY;
}
#endif
the_message_queue->attribute_set = attribute_set;
4ccb6: 2544 0010 movel %d4,%a2@(16) <== NOT EXECUTED
if (_Attributes_Is_priority( attribute_set ) )
the_msgq_attributes.discipline = CORE_MESSAGE_QUEUE_DISCIPLINES_PRIORITY;
4ccba: 49c0 extbl %d0 <== NOT EXECUTED
4ccbc: 5280 addql #1,%d0 <== NOT EXECUTED
4ccbe: 2100 movel %d0,%a0@- <== NOT EXECUTED
else
the_msgq_attributes.discipline = CORE_MESSAGE_QUEUE_DISCIPLINES_FIFO;
if ( ! _CORE_message_queue_Initialize(
4ccc0: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4ccc2: 2f0b movel %a3,%sp@- <== NOT EXECUTED
4ccc4: 47f9 0004 f912 lea 4f912 <_Thread_Enable_dispatch>,%a3 <== NOT EXECUTED
4ccca: 2f08 movel %a0,%sp@- <== NOT EXECUTED
4cccc: 486a 0014 pea %a2@(20) <== NOT EXECUTED
4ccd0: 4eb9 0004 de34 jsr 4de34 <_CORE_message_queue_Initialize> <== NOT EXECUTED
4ccd6: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
4ccda: 4a00 tstb %d0 <== NOT EXECUTED
4ccdc: 6616 bnes 4ccf4 <rtems_message_queue_create+0x9c><== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Message_queue_Free (
Message_queue_Control *the_message_queue
)
{
_Objects_Free( &_Message_queue_Information, &the_message_queue->Object );
4ccde: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4cce0: 4879 0006 6fd4 pea 66fd4 <_Message_queue_Information> <== NOT EXECUTED
4cce6: 4eb9 0004 ec4c jsr 4ec4c <_Objects_Free> <== NOT EXECUTED
_Objects_MP_Close(
&_Message_queue_Information, the_message_queue->Object.id);
#endif
_Message_queue_Free( the_message_queue );
_Thread_Enable_dispatch();
4ccec: 4e93 jsr %a3@ <== NOT EXECUTED
return RTEMS_UNSATISFIED;
4ccee: 508f addql #8,%sp <== NOT EXECUTED
4ccf0: 700d moveq #13,%d0 <== NOT EXECUTED
4ccf2: 602c bras 4cd20 <rtems_message_queue_create+0xc8><== NOT EXECUTED
Objects_Name name
)
{
_Objects_Set_local_object(
information,
_Objects_Get_index( the_object->id ),
4ccf4: 202a 0008 movel %a2@(8),%d0 <== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
4ccf8: 4281 clrl %d1 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
4ccfa: 2079 0006 6fec moveal 66fec <_Message_queue_Information+0x18>,%a0<== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
4cd00: 3200 movew %d0,%d1 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
4cd02: 218a 1c00 movel %a2,%a0@(00000000,%d1:l:4) <== NOT EXECUTED
information,
_Objects_Get_index( the_object->id ),
the_object
);
the_object->name = name;
4cd06: 2542 000c movel %d2,%a2@(12) <== NOT EXECUTED
&_Message_queue_Information,
&the_message_queue->Object,
(Objects_Name) name
);
*id = the_message_queue->Object.id;
4cd0a: 2880 movel %d0,%a4@ <== NOT EXECUTED
name,
0
);
#endif
_Thread_Enable_dispatch();
4cd0c: 4e93 jsr %a3@ <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
4cd0e: 4280 clrl %d0 <== NOT EXECUTED
4cd10: 600e bras 4cd20 <rtems_message_queue_create+0xc8><== NOT EXECUTED
#if defined(RTEMS_MULTIPROCESSING)
bool is_global;
#endif
if ( !rtems_is_name_valid( name ) )
return RTEMS_INVALID_NAME;
4cd12: 7003 moveq #3,%d0 <== NOT EXECUTED
4cd14: 600a bras 4cd20 <rtems_message_queue_create+0xc8><== NOT EXECUTED
if ( !id )
return RTEMS_INVALID_ADDRESS;
4cd16: 7009 moveq #9,%d0 <== NOT EXECUTED
4cd18: 6006 bras 4cd20 <rtems_message_queue_create+0xc8><== NOT EXECUTED
!_System_state_Is_multiprocessing )
return RTEMS_MP_NOT_CONFIGURED;
#endif
if ( count == 0 )
return RTEMS_INVALID_NUMBER;
4cd1a: 700a moveq #10,%d0 <== NOT EXECUTED
4cd1c: 6002 bras 4cd20 <rtems_message_queue_create+0xc8><== NOT EXECUTED
if ( max_message_size == 0 )
return RTEMS_INVALID_SIZE;
4cd1e: 7008 moveq #8,%d0 <== NOT EXECUTED
);
#endif
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
4cd20: 4cee 1c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a4 <== NOT EXECUTED
4cd26: 4e5e unlk %fp <== NOT EXECUTED
...
0004f9ec <rtems_message_queue_delete>:
*/
rtems_status_code rtems_message_queue_delete(
rtems_id id
)
{
4f9ec: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
4f9f0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
Objects_Id id,
Objects_Locations *location
)
{
return (Message_queue_Control *)
_Objects_Get( &_Message_queue_Information, id, location );
4f9f2: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4f9f6: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4f9fa: 4879 0007 6e18 pea 76e18 <_Message_queue_Information> <== NOT EXECUTED
4fa00: 4eb9 0005 43f0 jsr 543f0 <_Objects_Get> <== NOT EXECUTED
register Message_queue_Control *the_message_queue;
Objects_Locations location;
the_message_queue = _Message_queue_Get( id, &location );
switch ( location ) {
4fa06: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4fa0a: 2440 moveal %d0,%a2 <== NOT EXECUTED
4fa0c: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4fa10: 663a bnes 4fa4c <rtems_message_queue_delete+0x60><== NOT EXECUTED
case OBJECTS_LOCAL:
_Objects_Close( &_Message_queue_Information,
4fa12: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4fa14: 4879 0007 6e18 pea 76e18 <_Message_queue_Information> <== NOT EXECUTED
4fa1a: 4eb9 0005 3fdc jsr 53fdc <_Objects_Close> <== NOT EXECUTED
&the_message_queue->Object );
_CORE_message_queue_Close(
4fa20: 4878 0005 pea 5 <COMPARE> <== NOT EXECUTED
4fa24: 42a7 clrl %sp@- <== NOT EXECUTED
4fa26: 486a 0014 pea %a2@(20) <== NOT EXECUTED
4fa2a: 4eb9 0005 2b90 jsr 52b90 <_CORE_message_queue_Close> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Message_queue_Free (
Message_queue_Control *the_message_queue
)
{
_Objects_Free( &_Message_queue_Information, &the_message_queue->Object );
4fa30: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4fa32: 4879 0007 6e18 pea 76e18 <_Message_queue_Information> <== NOT EXECUTED
4fa38: 4eb9 0005 4254 jsr 54254 <_Objects_Free> <== NOT EXECUTED
0, /* Not used */
0
);
}
#endif
_Thread_Enable_dispatch();
4fa3e: 4eb9 0005 4eca jsr 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
4fa44: 4fef 001c lea %sp@(28),%sp <== NOT EXECUTED
4fa48: 4280 clrl %d0 <== NOT EXECUTED
4fa4a: 6002 bras 4fa4e <rtems_message_queue_delete+0x62><== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4fa4c: 7004 moveq #4,%d0 <== NOT EXECUTED
}
4fa4e: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
4fa52: 4e5e unlk %fp <== NOT EXECUTED
...
0004fa58 <rtems_message_queue_flush>:
rtems_status_code rtems_message_queue_flush(
rtems_id id,
uint32_t *count
)
{
4fa58: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
4fa5c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4fa5e: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
register Message_queue_Control *the_message_queue;
Objects_Locations location;
if ( !count )
4fa62: 4a8a tstl %a2 <== NOT EXECUTED
4fa64: 6738 beqs 4fa9e <rtems_message_queue_flush+0x46> <== NOT EXECUTED
Objects_Id id,
Objects_Locations *location
)
{
return (Message_queue_Control *)
_Objects_Get( &_Message_queue_Information, id, location );
4fa66: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4fa6a: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4fa6e: 4879 0007 6e18 pea 76e18 <_Message_queue_Information> <== NOT EXECUTED
4fa74: 4eb9 0005 43f0 jsr 543f0 <_Objects_Get> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
the_message_queue = _Message_queue_Get( id, &location );
switch ( location ) {
4fa7a: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4fa7e: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4fa82: 661e bnes 4faa2 <rtems_message_queue_flush+0x4a> <== NOT EXECUTED
case OBJECTS_LOCAL:
*count = _CORE_message_queue_Flush( &the_message_queue->message_queue );
4fa84: 2040 moveal %d0,%a0 <== NOT EXECUTED
4fa86: 4868 0014 pea %a0@(20) <== NOT EXECUTED
4fa8a: 4eb9 0005 2bd0 jsr 52bd0 <_CORE_message_queue_Flush> <== NOT EXECUTED
4fa90: 2480 movel %d0,%a2@ <== NOT EXECUTED
_Thread_Enable_dispatch();
4fa92: 4eb9 0005 4eca jsr 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
4fa98: 588f addql #4,%sp <== NOT EXECUTED
4fa9a: 4280 clrl %d0 <== NOT EXECUTED
4fa9c: 6006 bras 4faa4 <rtems_message_queue_flush+0x4c> <== NOT EXECUTED
{
register Message_queue_Control *the_message_queue;
Objects_Locations location;
if ( !count )
return RTEMS_INVALID_ADDRESS;
4fa9e: 7009 moveq #9,%d0 <== NOT EXECUTED
4faa0: 6002 bras 4faa4 <rtems_message_queue_flush+0x4c> <== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4faa2: 7004 moveq #4,%d0 <== NOT EXECUTED
}
4faa4: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
4faa8: 4e5e unlk %fp <== NOT EXECUTED
0004faac <rtems_message_queue_get_number_pending>:
rtems_status_code rtems_message_queue_get_number_pending(
rtems_id id,
uint32_t *count
)
{
4faac: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
4fab0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4fab2: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
register Message_queue_Control *the_message_queue;
Objects_Locations location;
if ( !count )
4fab6: 4a8a tstl %a2 <== NOT EXECUTED
4fab8: 672e beqs 4fae8 <rtems_message_queue_get_number_pending+0x3c><== NOT EXECUTED
4faba: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4fabe: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4fac2: 4879 0007 6e18 pea 76e18 <_Message_queue_Information> <== NOT EXECUTED
4fac8: 4eb9 0005 43f0 jsr 543f0 <_Objects_Get> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
the_message_queue = _Message_queue_Get( id, &location );
switch ( location ) {
4face: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4fad2: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4fad6: 6614 bnes 4faec <rtems_message_queue_get_number_pending+0x40><== NOT EXECUTED
case OBJECTS_LOCAL:
*count = the_message_queue->message_queue.number_of_pending_messages;
4fad8: 2040 moveal %d0,%a0 <== NOT EXECUTED
4fada: 24a8 005c movel %a0@(92),%a2@ <== NOT EXECUTED
_Thread_Enable_dispatch();
4fade: 4eb9 0005 4eca jsr 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
4fae4: 4280 clrl %d0 <== NOT EXECUTED
4fae6: 6006 bras 4faee <rtems_message_queue_get_number_pending+0x42><== NOT EXECUTED
{
register Message_queue_Control *the_message_queue;
Objects_Locations location;
if ( !count )
return RTEMS_INVALID_ADDRESS;
4fae8: 7009 moveq #9,%d0 <== NOT EXECUTED
4faea: 6002 bras 4faee <rtems_message_queue_get_number_pending+0x42><== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4faec: 7004 moveq #4,%d0 <== NOT EXECUTED
}
4faee: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
4faf2: 4e5e unlk %fp <== NOT EXECUTED
...
0004cd2c <rtems_message_queue_ident>:
rtems_status_code rtems_message_queue_ident(
rtems_name name,
uint32_t node,
rtems_id *id
)
{
4cd2c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
Objects_Name_or_id_lookup_errors status;
status = _Objects_Name_to_id_u32(
4cd30: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
4cd34: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
4cd38: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4cd3c: 4879 0006 6fd4 pea 66fd4 <_Message_queue_Information> <== NOT EXECUTED
4cd42: 4eb9 0004 ef3c jsr 4ef3c <_Objects_Name_to_id_u32> <== NOT EXECUTED
node,
id
);
return _Status_Object_name_errors_to_status[ status ];
}
4cd48: 41f9 0006 3e4a lea 63e4a <_Status_Object_name_errors_to_status>,%a0<== NOT EXECUTED
4cd4e: 4e5e unlk %fp <== NOT EXECUTED
4cd50: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0 <== NOT EXECUTED
...
0004cd58 <rtems_message_queue_receive>:
void *buffer,
size_t *size,
rtems_option option_set,
rtems_interval timeout
)
{
4cd58: 4e56 fff0 linkw %fp,#-16 <== NOT EXECUTED
4cd5c: 48d7 001c moveml %d2-%d4,%sp@ <== NOT EXECUTED
4cd60: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
4cd64: 262e 0010 movel %fp@(16),%d3 <== NOT EXECUTED
register Message_queue_Control *the_message_queue;
Objects_Locations location;
bool wait;
if ( !buffer )
4cd68: 4a82 tstl %d2 <== NOT EXECUTED
4cd6a: 6762 beqs 4cdce <rtems_message_queue_receive+0x76><== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
if ( !size )
4cd6c: 4a83 tstl %d3 <== NOT EXECUTED
4cd6e: 675e beqs 4cdce <rtems_message_queue_receive+0x76><== NOT EXECUTED
Objects_Id id,
Objects_Locations *location
)
{
return (Message_queue_Control *)
_Objects_Get( &_Message_queue_Information, id, location );
4cd70: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4cd74: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4cd78: 4879 0006 6fd4 pea 66fd4 <_Message_queue_Information> <== NOT EXECUTED
4cd7e: 4eb9 0004 edb0 jsr 4edb0 <_Objects_Get> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
the_message_queue = _Message_queue_Get( id, &location );
switch ( location ) {
4cd84: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4cd88: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4cd8c: 6644 bnes 4cdd2 <rtems_message_queue_receive+0x7a><== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE bool _Options_Is_no_wait (
rtems_option option_set
)
{
return (option_set & RTEMS_NO_WAIT) ? true : false;
4cd8e: 7201 moveq #1,%d1 <== NOT EXECUTED
if ( _Options_Is_no_wait( option_set ) )
wait = false;
else
wait = true;
_CORE_message_queue_Seize(
4cd90: 7801 moveq #1,%d4 <== NOT EXECUTED
4cd92: 2040 moveal %d0,%a0 <== NOT EXECUTED
4cd94: c2ae 0014 andl %fp@(20),%d1 <== NOT EXECUTED
4cd98: 2f2e 0018 movel %fp@(24),%sp@- <== NOT EXECUTED
4cd9c: b384 eorl %d1,%d4 <== NOT EXECUTED
4cd9e: 2f04 movel %d4,%sp@- <== NOT EXECUTED
4cda0: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4cda2: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4cda4: 2f28 0008 movel %a0@(8),%sp@- <== NOT EXECUTED
4cda8: 4868 0014 pea %a0@(20) <== NOT EXECUTED
4cdac: 4eb9 0004 def0 jsr 4def0 <_CORE_message_queue_Seize> <== NOT EXECUTED
buffer,
size,
wait,
timeout
);
_Thread_Enable_dispatch();
4cdb2: 4eb9 0004 f912 jsr 4f912 <_Thread_Enable_dispatch> <== NOT EXECUTED
return _Message_queue_Translate_core_message_queue_return_code(
_Thread_Executing->Wait.return_code
4cdb8: 2079 0006 6bfe moveal 66bfe <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
size,
wait,
timeout
);
_Thread_Enable_dispatch();
return _Message_queue_Translate_core_message_queue_return_code(
4cdbe: 2f28 0034 movel %a0@(52),%sp@- <== NOT EXECUTED
4cdc2: 4eb9 0004 ce58 jsr 4ce58 <_Message_queue_Translate_core_message_queue_return_code><== NOT EXECUTED
4cdc8: 4fef 001c lea %sp@(28),%sp <== NOT EXECUTED
4cdcc: 6006 bras 4cdd4 <rtems_message_queue_receive+0x7c><== NOT EXECUTED
if ( !buffer )
return RTEMS_INVALID_ADDRESS;
if ( !size )
return RTEMS_INVALID_ADDRESS;
4cdce: 7009 moveq #9,%d0 <== NOT EXECUTED
4cdd0: 6002 bras 4cdd4 <rtems_message_queue_receive+0x7c><== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4cdd2: 7004 moveq #4,%d0 <== NOT EXECUTED
}
4cdd4: 4cee 001c fff0 moveml %fp@(-16),%d2-%d4 <== NOT EXECUTED
4cdda: 4e5e unlk %fp <== NOT EXECUTED
...
0004cde0 <rtems_message_queue_send>:
rtems_status_code rtems_message_queue_send(
rtems_id id,
const void *buffer,
size_t size
)
{
4cde0: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
4cde4: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4cde6: 262e 0008 movel %fp@(8),%d3 <== NOT EXECUTED
4cdea: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4cdec: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
register Message_queue_Control *the_message_queue;
Objects_Locations location;
CORE_message_queue_Status status;
if ( !buffer )
4cdf0: 6754 beqs 4ce46 <rtems_message_queue_send+0x66> <== NOT EXECUTED
4cdf2: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4cdf6: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4cdf8: 4879 0006 6fd4 pea 66fd4 <_Message_queue_Information> <== NOT EXECUTED
4cdfe: 4eb9 0004 edb0 jsr 4edb0 <_Objects_Get> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
the_message_queue = _Message_queue_Get( id, &location );
switch ( location ) {
4ce04: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4ce08: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4ce0c: 663c bnes 4ce4a <rtems_message_queue_send+0x6a> <== NOT EXECUTED
CORE_message_queue_API_mp_support_callout api_message_queue_mp_support,
bool wait,
Watchdog_Interval timeout
)
{
return _CORE_message_queue_Submit(
4ce0e: 42a7 clrl %sp@- <== NOT EXECUTED
4ce10: 2040 moveal %d0,%a0 <== NOT EXECUTED
4ce12: 42a7 clrl %sp@- <== NOT EXECUTED
4ce14: 2f3c 7fff ffff movel #2147483647,%sp@- <== NOT EXECUTED
4ce1a: 42a7 clrl %sp@- <== NOT EXECUTED
4ce1c: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4ce1e: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
4ce22: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4ce24: 4868 0014 pea %a0@(20) <== NOT EXECUTED
4ce28: 4eb9 0004 e02c jsr 4e02c <_CORE_message_queue_Submit> <== NOT EXECUTED
MESSAGE_QUEUE_MP_HANDLER,
false, /* sender does not block */
0 /* no timeout */
);
_Thread_Enable_dispatch();
4ce2e: 4fef 0020 lea %sp@(32),%sp <== NOT EXECUTED
4ce32: 2400 movel %d0,%d2 <== NOT EXECUTED
4ce34: 4eb9 0004 f912 jsr 4f912 <_Thread_Enable_dispatch> <== NOT EXECUTED
/*
* Since this API does not allow for blocking sends, we can directly
* return the returned status.
*/
return _Message_queue_Translate_core_message_queue_return_code(status);
4ce3a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4ce3c: 4eb9 0004 ce58 jsr 4ce58 <_Message_queue_Translate_core_message_queue_return_code><== NOT EXECUTED
4ce42: 588f addql #4,%sp <== NOT EXECUTED
4ce44: 6006 bras 4ce4c <rtems_message_queue_send+0x6c> <== NOT EXECUTED
register Message_queue_Control *the_message_queue;
Objects_Locations location;
CORE_message_queue_Status status;
if ( !buffer )
return RTEMS_INVALID_ADDRESS;
4ce46: 7009 moveq #9,%d0 <== NOT EXECUTED
4ce48: 6002 bras 4ce4c <rtems_message_queue_send+0x6c> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4ce4a: 7004 moveq #4,%d0 <== NOT EXECUTED
}
4ce4c: 242e fff4 movel %fp@(-12),%d2 <== NOT EXECUTED
4ce50: 262e fff8 movel %fp@(-8),%d3 <== NOT EXECUTED
4ce54: 4e5e unlk %fp <== NOT EXECUTED
0004fc3c <rtems_message_queue_urgent>:
rtems_status_code rtems_message_queue_urgent(
rtems_id id,
const void *buffer,
size_t size
)
{
4fc3c: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
4fc40: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4fc42: 262e 0008 movel %fp@(8),%d3 <== NOT EXECUTED
4fc46: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4fc48: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
register Message_queue_Control *the_message_queue;
Objects_Locations location;
CORE_message_queue_Status status;
if ( !buffer )
4fc4c: 6754 beqs 4fca2 <rtems_message_queue_urgent+0x66><== NOT EXECUTED
4fc4e: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4fc52: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4fc54: 4879 0007 6e18 pea 76e18 <_Message_queue_Information> <== NOT EXECUTED
4fc5a: 4eb9 0005 43f0 jsr 543f0 <_Objects_Get> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
the_message_queue = _Message_queue_Get( id, &location );
switch ( location ) {
4fc60: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4fc64: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4fc68: 663c bnes 4fca6 <rtems_message_queue_urgent+0x6a><== NOT EXECUTED
CORE_message_queue_API_mp_support_callout api_message_queue_mp_support,
bool wait,
Watchdog_Interval timeout
)
{
return _CORE_message_queue_Submit(
4fc6a: 42a7 clrl %sp@- <== NOT EXECUTED
4fc6c: 2040 moveal %d0,%a0 <== NOT EXECUTED
4fc6e: 42a7 clrl %sp@- <== NOT EXECUTED
4fc70: 2f3c 8000 0000 movel #-2147483648,%sp@- <== NOT EXECUTED
4fc76: 42a7 clrl %sp@- <== NOT EXECUTED
4fc78: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4fc7a: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
4fc7e: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4fc80: 4868 0014 pea %a0@(20) <== NOT EXECUTED
4fc84: 4eb9 0005 2e40 jsr 52e40 <_CORE_message_queue_Submit> <== NOT EXECUTED
id,
MESSAGE_QUEUE_MP_HANDLER,
false, /* sender does not block */
0 /* no timeout */
);
_Thread_Enable_dispatch();
4fc8a: 4fef 0020 lea %sp@(32),%sp <== NOT EXECUTED
4fc8e: 2400 movel %d0,%d2 <== NOT EXECUTED
4fc90: 4eb9 0005 4eca jsr 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
/*
* Since this API does not allow for blocking sends, we can directly
* return the returned status.
*/
return _Message_queue_Translate_core_message_queue_return_code(status);
4fc96: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4fc98: 4eb9 0004 fc24 jsr 4fc24 <_Message_queue_Translate_core_message_queue_return_code><== NOT EXECUTED
4fc9e: 588f addql #4,%sp <== NOT EXECUTED
4fca0: 6006 bras 4fca8 <rtems_message_queue_urgent+0x6c><== NOT EXECUTED
register Message_queue_Control *the_message_queue;
Objects_Locations location;
CORE_message_queue_Status status;
if ( !buffer )
return RTEMS_INVALID_ADDRESS;
4fca2: 7009 moveq #9,%d0 <== NOT EXECUTED
4fca4: 6002 bras 4fca8 <rtems_message_queue_urgent+0x6c><== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4fca6: 7004 moveq #4,%d0 <== NOT EXECUTED
}
4fca8: 242e fff4 movel %fp@(-12),%d2 <== NOT EXECUTED
4fcac: 262e fff8 movel %fp@(-8),%d3 <== NOT EXECUTED
4fcb0: 4e5e unlk %fp <== NOT EXECUTED
00045644 <rtems_object_api_maximum_class>:
#include <rtems/rtems/types.h>
int rtems_object_api_maximum_class(
int api
)
{
45644: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return _Objects_API_maximum_class(api);
}
45648: 4e5e unlk %fp <== NOT EXECUTED
int rtems_object_api_maximum_class(
int api
)
{
return _Objects_API_maximum_class(api);
4564a: 4ef9 0004 6bd0 jmp 46bd0 <_Objects_API_maximum_class> <== NOT EXECUTED
00045650 <rtems_object_api_minimum_class>:
uint32_t api
)
{
if ( _Objects_Is_api_valid( api ) )
return 1;
return -1;
45650: 7203 moveq #3,%d1 <== NOT EXECUTED
#include <rtems/rtems/types.h>
uint32_t rtems_object_api_minimum_class(
uint32_t api
)
{
45652: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE bool _Objects_Is_api_valid(
uint32_t the_api
)
{
if ( !the_api || the_api > OBJECTS_APIS_LAST )
45656: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
4565a: 5380 subql #1,%d0 <== NOT EXECUTED
if ( _Objects_Is_api_valid( api ) )
return 1;
return -1;
4565c: b280 cmpl %d0,%d1 <== NOT EXECUTED
4565e: 53c0 sls %d0 <== NOT EXECUTED
45660: 49c0 extbl %d0 <== NOT EXECUTED
}
45662: 123c 0001 moveb #1,%d1 <== NOT EXECUTED
45666: 4e5e unlk %fp <== NOT EXECUTED
45668: 8081 orl %d1,%d0 <== NOT EXECUTED
0004566c <rtems_object_get_api_class_name>:
)
{
const rtems_assoc_t *api_assoc;
const rtems_assoc_t *class_assoc;
if ( the_api == OBJECTS_INTERNAL_API )
4566c: 7001 moveq #1,%d0 <== NOT EXECUTED
const char *rtems_object_get_api_class_name(
int the_api,
int the_class
)
{
4566e: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
45672: 222e 0008 movel %fp@(8),%d1 <== NOT EXECUTED
45676: 2f02 movel %d2,%sp@- <== NOT EXECUTED
const rtems_assoc_t *api_assoc;
const rtems_assoc_t *class_assoc;
if ( the_api == OBJECTS_INTERNAL_API )
45678: b081 cmpl %d1,%d0 <== NOT EXECUTED
4567a: 671c beqs 45698 <rtems_object_get_api_class_name+0x2c><== NOT EXECUTED
api_assoc = rtems_object_api_internal_assoc;
else if ( the_api == OBJECTS_CLASSIC_API )
4567c: 7402 moveq #2,%d2 <== NOT EXECUTED
4567e: b481 cmpl %d1,%d2 <== NOT EXECUTED
45680: 671e beqs 456a0 <rtems_object_get_api_class_name+0x34><== NOT EXECUTED
api_assoc = rtems_object_api_classic_assoc;
#ifdef RTEMS_POSIX_API
else if ( the_api == OBJECTS_POSIX_API )
45682: 143c 0003 moveb #3,%d2 <== NOT EXECUTED
api_assoc = rtems_object_api_posix_assoc;
#endif
else
return "BAD API";
45686: 203c 0005 bb72 movel #375666,%d0 <== NOT EXECUTED
if ( the_api == OBJECTS_INTERNAL_API )
api_assoc = rtems_object_api_internal_assoc;
else if ( the_api == OBJECTS_CLASSIC_API )
api_assoc = rtems_object_api_classic_assoc;
#ifdef RTEMS_POSIX_API
else if ( the_api == OBJECTS_POSIX_API )
4568c: b481 cmpl %d1,%d2 <== NOT EXECUTED
4568e: 6632 bnes 456c2 <rtems_object_get_api_class_name+0x56><== NOT EXECUTED
api_assoc = rtems_object_api_posix_assoc;
45690: 203c 0005 cdc8 movel #380360,%d0 <== NOT EXECUTED
45696: 600e bras 456a6 <rtems_object_get_api_class_name+0x3a><== NOT EXECUTED
{
const rtems_assoc_t *api_assoc;
const rtems_assoc_t *class_assoc;
if ( the_api == OBJECTS_INTERNAL_API )
api_assoc = rtems_object_api_internal_assoc;
45698: 203c 0005 cd38 movel #380216,%d0 <== NOT EXECUTED
4569e: 6006 bras 456a6 <rtems_object_get_api_class_name+0x3a><== NOT EXECUTED
else if ( the_api == OBJECTS_CLASSIC_API )
api_assoc = rtems_object_api_classic_assoc;
456a0: 203c 0005 cd50 movel #380240,%d0 <== NOT EXECUTED
else if ( the_api == OBJECTS_POSIX_API )
api_assoc = rtems_object_api_posix_assoc;
#endif
else
return "BAD API";
class_assoc = rtems_assoc_ptr_by_local( api_assoc, the_class );
456a6: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
456aa: 2f00 movel %d0,%sp@- <== NOT EXECUTED
456ac: 4eb9 0004 9ab0 jsr 49ab0 <rtems_assoc_ptr_by_local> <== NOT EXECUTED
if ( class_assoc )
456b2: 508f addql #8,%sp <== NOT EXECUTED
else if ( the_api == OBJECTS_POSIX_API )
api_assoc = rtems_object_api_posix_assoc;
#endif
else
return "BAD API";
class_assoc = rtems_assoc_ptr_by_local( api_assoc, the_class );
456b4: 2040 moveal %d0,%a0 <== NOT EXECUTED
if ( class_assoc )
return class_assoc->name;
return "BAD CLASS";
456b6: 203c 0005 bb7a movel #375674,%d0 <== NOT EXECUTED
api_assoc = rtems_object_api_posix_assoc;
#endif
else
return "BAD API";
class_assoc = rtems_assoc_ptr_by_local( api_assoc, the_class );
if ( class_assoc )
456bc: 4a88 tstl %a0 <== NOT EXECUTED
456be: 6702 beqs 456c2 <rtems_object_get_api_class_name+0x56><== NOT EXECUTED
return class_assoc->name;
456c0: 2010 movel %a0@,%d0 <== NOT EXECUTED
return "BAD CLASS";
}
456c2: 242e fffc movel %fp@(-4),%d2 <== NOT EXECUTED
456c6: 4e5e unlk %fp <== NOT EXECUTED
...
000456cc <rtems_object_get_api_name>:
};
const char *rtems_object_get_api_name(
int api
)
{
456cc: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
const rtems_assoc_t *api_assoc;
api_assoc = rtems_assoc_ptr_by_local( rtems_objects_api_assoc, api );
456d0: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
456d4: 4879 0005 ce58 pea 5ce58 <rtems_objects_api_assoc> <== NOT EXECUTED
456da: 4eb9 0004 9ab0 jsr 49ab0 <rtems_assoc_ptr_by_local> <== NOT EXECUTED
if ( api_assoc )
456e0: 508f addql #8,%sp <== NOT EXECUTED
int api
)
{
const rtems_assoc_t *api_assoc;
api_assoc = rtems_assoc_ptr_by_local( rtems_objects_api_assoc, api );
456e2: 2040 moveal %d0,%a0 <== NOT EXECUTED
if ( api_assoc )
return api_assoc->name;
return "BAD CLASS";
456e4: 203c 0005 bb7a movel #375674,%d0 <== NOT EXECUTED
)
{
const rtems_assoc_t *api_assoc;
api_assoc = rtems_assoc_ptr_by_local( rtems_objects_api_assoc, api );
if ( api_assoc )
456ea: 4a88 tstl %a0 <== NOT EXECUTED
456ec: 6702 beqs 456f0 <rtems_object_get_api_name+0x24> <== NOT EXECUTED
return api_assoc->name;
456ee: 2010 movel %a0@,%d0 <== NOT EXECUTED
return "BAD CLASS";
}
456f0: 4e5e unlk %fp <== NOT EXECUTED
00046cb0 <rtems_object_get_class_information>:
rtems_status_code rtems_object_get_class_information(
int the_api,
int the_class,
rtems_object_api_class_information *info
)
{
46cb0: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
46cb4: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46cb6: 246e 0010 moveal %fp@(16),%a2 <== NOT EXECUTED
46cba: 2f02 movel %d2,%sp@- <== NOT EXECUTED
int i;
/*
* Validate parameters and look up information structure.
*/
if ( !info )
46cbc: 4a8a tstl %a2 <== NOT EXECUTED
46cbe: 6752 beqs 46d12 <rtems_object_get_class_information+0x62><== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
obj_info = _Objects_Get_information( the_api, the_class );
46cc0: 3f2e 000e movew %fp@(14),%sp@- <== NOT EXECUTED
46cc4: 4267 clrw %sp@- <== NOT EXECUTED
46cc6: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
46cca: 4eb9 0004 86d4 jsr 486d4 <_Objects_Get_information> <== NOT EXECUTED
if ( !obj_info )
46cd0: 508f addql #8,%sp <== NOT EXECUTED
* Validate parameters and look up information structure.
*/
if ( !info )
return RTEMS_INVALID_ADDRESS;
obj_info = _Objects_Get_information( the_api, the_class );
46cd2: 2040 moveal %d0,%a0 <== NOT EXECUTED
if ( !obj_info )
46cd4: 4a80 tstl %d0 <== NOT EXECUTED
46cd6: 673e beqs 46d16 <rtems_object_get_class_information+0x66><== NOT EXECUTED
return RTEMS_INVALID_NUMBER;
/*
* Return information about this object class to the user.
*/
info->minimum_id = obj_info->minimum_id;
46cd8: 24a8 0006 movel %a0@(6),%a2@ <== NOT EXECUTED
info->maximum_id = obj_info->maximum_id;
info->auto_extend = obj_info->auto_extend;
info->maximum = obj_info->maximum;
46cdc: 4282 clrl %d2 <== NOT EXECUTED
for ( unallocated=0, i=1 ; i <= info->maximum ; i++ )
46cde: 7001 moveq #1,%d0 <== NOT EXECUTED
46ce0: 4281 clrl %d1 <== NOT EXECUTED
/*
* Return information about this object class to the user.
*/
info->minimum_id = obj_info->minimum_id;
info->maximum_id = obj_info->maximum_id;
46ce2: 2568 000a 0004 movel %a0@(10),%a2@(4) <== NOT EXECUTED
info->auto_extend = obj_info->auto_extend;
info->maximum = obj_info->maximum;
46ce8: 3428 000e movew %a0@(14),%d2 <== NOT EXECUTED
/*
* Return information about this object class to the user.
*/
info->minimum_id = obj_info->minimum_id;
info->maximum_id = obj_info->maximum_id;
info->auto_extend = obj_info->auto_extend;
46cec: 1568 0010 000c moveb %a0@(16),%a2@(12) <== NOT EXECUTED
info->maximum = obj_info->maximum;
46cf2: 2542 0008 movel %d2,%a2@(8) <== NOT EXECUTED
for ( unallocated=0, i=1 ; i <= info->maximum ; i++ )
46cf6: 600e bras 46d06 <rtems_object_get_class_information+0x56><== NOT EXECUTED
if ( !obj_info->local_table[i] )
46cf8: 2268 0018 moveal %a0@(24),%a1 <== NOT EXECUTED
46cfc: 4ab1 0c00 tstl %a1@(00000000,%d0:l:4) <== NOT EXECUTED
46d00: 6602 bnes 46d04 <rtems_object_get_class_information+0x54><== NOT EXECUTED
unallocated++;
46d02: 5281 addql #1,%d1 <== NOT EXECUTED
info->minimum_id = obj_info->minimum_id;
info->maximum_id = obj_info->maximum_id;
info->auto_extend = obj_info->auto_extend;
info->maximum = obj_info->maximum;
for ( unallocated=0, i=1 ; i <= info->maximum ; i++ )
46d04: 5280 addql #1,%d0 <== NOT EXECUTED
46d06: b480 cmpl %d0,%d2 <== NOT EXECUTED
46d08: 64ee bccs 46cf8 <rtems_object_get_class_information+0x48><== NOT EXECUTED
if ( !obj_info->local_table[i] )
unallocated++;
info->unallocated = unallocated;
46d0a: 2541 000e movel %d1,%a2@(14) <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
46d0e: 4280 clrl %d0 <== NOT EXECUTED
46d10: 6006 bras 46d18 <rtems_object_get_class_information+0x68><== NOT EXECUTED
/*
* Validate parameters and look up information structure.
*/
if ( !info )
return RTEMS_INVALID_ADDRESS;
46d12: 7009 moveq #9,%d0 <== NOT EXECUTED
46d14: 6002 bras 46d18 <rtems_object_get_class_information+0x68><== NOT EXECUTED
obj_info = _Objects_Get_information( the_api, the_class );
if ( !obj_info )
return RTEMS_INVALID_NUMBER;
46d16: 700a moveq #10,%d0 <== NOT EXECUTED
unallocated++;
info->unallocated = unallocated;
return RTEMS_SUCCESSFUL;
}
46d18: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
46d1c: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
46d20: 4e5e unlk %fp <== NOT EXECUTED
000461d0 <rtems_object_get_classic_name>:
rtems_status_code rtems_object_get_classic_name(
rtems_id id,
rtems_name *name
)
{
461d0: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
461d4: 2f0a movel %a2,%sp@- <== NOT EXECUTED
461d6: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
Objects_Name_or_id_lookup_errors status;
Objects_Name name_u;
if ( !name )
461da: 4a8a tstl %a2 <== NOT EXECUTED
461dc: 6720 beqs 461fe <rtems_object_get_classic_name+0x2e><== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
status = _Objects_Id_to_name( id, &name_u );
461de: 486e fffc pea %fp@(-4) <== NOT EXECUTED
461e2: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
461e6: 4eb9 0004 7bf8 jsr 47bf8 <_Objects_Id_to_name> <== NOT EXECUTED
*name = name_u.name_u32;
461ec: 24ae fffc movel %fp@(-4),%a2@ <== NOT EXECUTED
return _Status_Object_name_errors_to_status[ status ];
461f0: 41f9 0005 c7f0 lea 5c7f0 <_Status_Object_name_errors_to_status>,%a0<== NOT EXECUTED
461f6: 508f addql #8,%sp <== NOT EXECUTED
461f8: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0 <== NOT EXECUTED
461fc: 6002 bras 46200 <rtems_object_get_classic_name+0x30><== NOT EXECUTED
{
Objects_Name_or_id_lookup_errors status;
Objects_Name name_u;
if ( !name )
return RTEMS_INVALID_ADDRESS;
461fe: 7009 moveq #9,%d0 <== NOT EXECUTED
status = _Objects_Id_to_name( id, &name_u );
*name = name_u.name_u32;
return _Status_Object_name_errors_to_status[ status ];
}
46200: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
46204: 4e5e unlk %fp <== NOT EXECUTED
000463fc <rtems_object_get_name>:
char *rtems_object_get_name(
Objects_Id id,
size_t length,
char *name
)
{
463fc: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return _Objects_Get_name_as_string( id, length, name );
}
46400: 4e5e unlk %fp <== NOT EXECUTED
Objects_Id id,
size_t length,
char *name
)
{
return _Objects_Get_name_as_string( id, length, name );
46402: 4ef9 0004 8000 jmp 48000 <_Objects_Get_name_as_string> <== NOT EXECUTED
00046d30 <rtems_object_id_api_maximum>:
#undef rtems_object_id_api_maximum
int rtems_object_id_api_maximum(void)
{
return OBJECTS_APIS_LAST;
}
46d30: 7003 moveq #3,%d0 <== NOT EXECUTED
#include <rtems/score/object.h>
#include <rtems/rtems/types.h>
#undef rtems_object_id_api_maximum
int rtems_object_id_api_maximum(void)
{
46d32: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return OBJECTS_APIS_LAST;
}
46d36: 4e5e unlk %fp <== NOT EXECUTED
...
00046d3c <rtems_object_id_api_minimum>:
#undef rtems_object_id_api_minimum
int rtems_object_id_api_minimum(void)
{
return OBJECTS_INTERNAL_API;
}
46d3c: 7001 moveq #1,%d0 <== NOT EXECUTED
#include <rtems/score/object.h>
#include <rtems/rtems/types.h>
#undef rtems_object_id_api_minimum
int rtems_object_id_api_minimum(void)
{
46d3e: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return OBJECTS_INTERNAL_API;
}
46d42: 4e5e unlk %fp <== NOT EXECUTED
...
00046d48 <rtems_object_id_get_api>:
*/
RTEMS_INLINE_ROUTINE Objects_APIs _Objects_Get_API(
Objects_Id id
)
{
return (Objects_APIs) ((id >> OBJECTS_API_START_BIT) & OBJECTS_API_VALID_BITS);
46d48: 4280 clrl %d0 <== NOT EXECUTED
int rtems_object_id_get_api(
rtems_id id
)
{
return _Objects_Get_API( id );
}
46d4a: 7207 moveq #7,%d1 <== NOT EXECUTED
#undef rtems_object_id_get_api
int rtems_object_id_get_api(
rtems_id id
)
{
46d4c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
46d50: 102e 0008 moveb %fp@(8),%d0 <== NOT EXECUTED
return _Objects_Get_API( id );
}
46d54: 4e5e unlk %fp <== NOT EXECUTED
46d56: c081 andl %d1,%d0 <== NOT EXECUTED
...
00046d5c <rtems_object_id_get_class>:
int rtems_object_id_get_class(
rtems_id id
)
{
return _Objects_Get_class( id );
}
46d5c: 721b moveq #27,%d1 <== NOT EXECUTED
#undef rtems_object_id_get_class
int rtems_object_id_get_class(
rtems_id id
)
{
46d5e: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return _Objects_Get_class( id );
}
46d62: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
46d66: 4e5e unlk %fp <== NOT EXECUTED
46d68: e2a8 lsrl %d1,%d0 <== NOT EXECUTED
00046d6c <rtems_object_id_get_index>:
int rtems_object_id_get_index(
rtems_id id
)
{
return _Objects_Get_index( id );
}
46d6c: 4280 clrl %d0 <== NOT EXECUTED
#undef rtems_object_id_get_index
int rtems_object_id_get_index(
rtems_id id
)
{
46d6e: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return _Objects_Get_index( id );
}
46d72: 302e 000a movew %fp@(10),%d0 <== NOT EXECUTED
46d76: 4e5e unlk %fp <== NOT EXECUTED
...
00046d7c <rtems_object_id_get_node>:
int rtems_object_id_get_node(
rtems_id id
)
{
return _Objects_Get_node( id );
}
46d7c: 4280 clrl %d0 <== NOT EXECUTED
#undef rtems_object_id_get_node
int rtems_object_id_get_node(
rtems_id id
)
{
46d7e: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return _Objects_Get_node( id );
}
46d82: 102e 0009 moveb %fp@(9),%d0 <== NOT EXECUTED
46d86: 4e5e unlk %fp <== NOT EXECUTED
...
00045700 <rtems_object_set_name>:
*/
rtems_status_code rtems_object_set_name(
rtems_id id,
const char *name
)
{
45700: 4e56 fff0 linkw %fp,#-16 <== NOT EXECUTED
45704: 48d7 001c moveml %d2-%d4,%sp@ <== NOT EXECUTED
45708: 262e 0008 movel %fp@(8),%d3 <== NOT EXECUTED
4570c: 282e 000c movel %fp@(12),%d4 <== NOT EXECUTED
Objects_Information *information;
Objects_Locations location;
Objects_Control *the_object;
Objects_Id tmpId;
if ( !name )
45710: 674e beqs 45760 <rtems_object_set_name+0x60> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
tmpId = (id == OBJECTS_ID_OF_SELF) ? _Thread_Executing->Object.id : id;
45712: 4a83 tstl %d3 <== NOT EXECUTED
45714: 660a bnes 45720 <rtems_object_set_name+0x20> <== NOT EXECUTED
45716: 2079 0005 ea1e moveal 5ea1e <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
4571c: 2628 0008 movel %a0@(8),%d3 <== NOT EXECUTED
information = _Objects_Get_information_id( tmpId );
45720: 2f03 movel %d3,%sp@- <== NOT EXECUTED
45722: 4eb9 0004 6ef0 jsr 46ef0 <_Objects_Get_information_id> <== NOT EXECUTED
if ( !information )
45728: 588f addql #4,%sp <== NOT EXECUTED
if ( !name )
return RTEMS_INVALID_ADDRESS;
tmpId = (id == OBJECTS_ID_OF_SELF) ? _Thread_Executing->Object.id : id;
information = _Objects_Get_information_id( tmpId );
4572a: 2400 movel %d0,%d2 <== NOT EXECUTED
if ( !information )
4572c: 6736 beqs 45764 <rtems_object_set_name+0x64> <== NOT EXECUTED
return RTEMS_INVALID_ID;
the_object = _Objects_Get( information, tmpId, &location );
4572e: 486e fffc pea %fp@(-4) <== NOT EXECUTED
45732: 2f03 movel %d3,%sp@- <== NOT EXECUTED
45734: 2f00 movel %d0,%sp@- <== NOT EXECUTED
45736: 4eb9 0004 70b8 jsr 470b8 <_Objects_Get> <== NOT EXECUTED
switch ( location ) {
4573c: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
45740: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
45744: 661e bnes 45764 <rtems_object_set_name+0x64> <== NOT EXECUTED
case OBJECTS_LOCAL:
_Objects_Set_name( information, the_object, name );
45746: 2f04 movel %d4,%sp@- <== NOT EXECUTED
45748: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4574a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4574c: 4eb9 0004 7244 jsr 47244 <_Objects_Set_name> <== NOT EXECUTED
_Thread_Enable_dispatch();
45752: 4eb9 0004 7bee jsr 47bee <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
45758: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4575c: 4280 clrl %d0 <== NOT EXECUTED
4575e: 6006 bras 45766 <rtems_object_set_name+0x66> <== NOT EXECUTED
Objects_Locations location;
Objects_Control *the_object;
Objects_Id tmpId;
if ( !name )
return RTEMS_INVALID_ADDRESS;
45760: 7009 moveq #9,%d0 <== NOT EXECUTED
45762: 6002 bras 45766 <rtems_object_set_name+0x66> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
45764: 7004 moveq #4,%d0 <== NOT EXECUTED
}
45766: 4cee 001c fff0 moveml %fp@(-16),%d2-%d4 <== NOT EXECUTED
4576c: 4e5e unlk %fp <== NOT EXECUTED
0004fcb4 <rtems_partition_create>:
uint32_t length,
uint32_t buffer_size,
rtems_attribute attribute_set,
rtems_id *id
)
{
4fcb4: 4e56 ffe4 linkw %fp,#-28 <== NOT EXECUTED
4fcb8: 48d7 1c3c moveml %d2-%d5/%a2-%a4,%sp@ <== NOT EXECUTED
4fcbc: 2a2e 0008 movel %fp@(8),%d5 <== NOT EXECUTED
4fcc0: 282e 000c movel %fp@(12),%d4 <== NOT EXECUTED
4fcc4: 262e 0010 movel %fp@(16),%d3 <== NOT EXECUTED
4fcc8: 242e 0014 movel %fp@(20),%d2 <== NOT EXECUTED
4fccc: 246e 001c moveal %fp@(28),%a2 <== NOT EXECUTED
register Partition_Control *the_partition;
if ( !rtems_is_name_valid( name ) )
4fcd0: 4a85 tstl %d5 <== NOT EXECUTED
4fcd2: 6700 00ac beqw 4fd80 <rtems_partition_create+0xcc> <== NOT EXECUTED
return RTEMS_INVALID_NAME;
if ( !starting_address )
4fcd6: 4a84 tstl %d4 <== NOT EXECUTED
4fcd8: 6700 00ae beqw 4fd88 <rtems_partition_create+0xd4> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
if ( !id )
4fcdc: 4a8a tstl %a2 <== NOT EXECUTED
4fcde: 6700 00a8 beqw 4fd88 <rtems_partition_create+0xd4> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
if ( length == 0 || buffer_size == 0 || length < buffer_size ||
4fce2: 4a83 tstl %d3 <== NOT EXECUTED
4fce4: 6700 009e beqw 4fd84 <rtems_partition_create+0xd0> <== NOT EXECUTED
4fce8: 4a82 tstl %d2 <== NOT EXECUTED
4fcea: 6700 0098 beqw 4fd84 <rtems_partition_create+0xd0> <== NOT EXECUTED
4fcee: b483 cmpl %d3,%d2 <== NOT EXECUTED
4fcf0: 6200 0092 bhiw 4fd84 <rtems_partition_create+0xd0> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE bool _Partition_Is_buffer_size_aligned (
uint32_t buffer_size
)
{
return ((buffer_size % CPU_PARTITION_ALIGNMENT) == 0);
4fcf4: 7003 moveq #3,%d0 <== NOT EXECUTED
4fcf6: c082 andl %d2,%d0 <== NOT EXECUTED
4fcf8: 6600 008a bnew 4fd84 <rtems_partition_create+0xd0> <== NOT EXECUTED
)
{
#if (CPU_ALIGNMENT == 0)
return true;
#else
return (((uintptr_t)address % CPU_ALIGNMENT) == 0);
4fcfc: 103c 0003 moveb #3,%d0 <== NOT EXECUTED
4fd00: c084 andl %d4,%d0 <== NOT EXECUTED
!_Partition_Is_buffer_size_aligned( buffer_size ) )
return RTEMS_INVALID_SIZE;
if ( !_Addresses_Is_aligned( starting_address ) )
4fd02: 6600 0084 bnew 4fd88 <rtems_partition_create+0xd4> <== NOT EXECUTED
4fd06: 2039 0007 65ac movel 765ac <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
4fd0c: 5280 addql #1,%d0 <== NOT EXECUTED
4fd0e: 23c0 0007 65ac movel %d0,765ac <_Thread_Dispatch_disable_level><== NOT EXECUTED
* This function allocates a partition control block from
* the inactive chain of free partition control blocks.
*/
RTEMS_INLINE_ROUTINE Partition_Control *_Partition_Allocate ( void )
{
return (Partition_Control *) _Objects_Allocate( &_Partition_Information );
4fd14: 4879 0007 6442 pea 76442 <_Partition_Information> <== NOT EXECUTED
4fd1a: 49f9 0005 4eca lea 54eca <_Thread_Enable_dispatch>,%a4 <== NOT EXECUTED
4fd20: 4eb9 0005 3f60 jsr 53f60 <_Objects_Allocate> <== NOT EXECUTED
_Thread_Disable_dispatch(); /* prevents deletion */
the_partition = _Partition_Allocate();
if ( !the_partition ) {
4fd26: 588f addql #4,%sp <== NOT EXECUTED
4fd28: 2640 moveal %d0,%a3 <== NOT EXECUTED
4fd2a: 4a80 tstl %d0 <== NOT EXECUTED
4fd2c: 6606 bnes 4fd34 <rtems_partition_create+0x80> <== NOT EXECUTED
_Thread_Enable_dispatch();
4fd2e: 4e94 jsr %a4@ <== NOT EXECUTED
return RTEMS_TOO_MANY;
4fd30: 7005 moveq #5,%d0 <== NOT EXECUTED
4fd32: 6056 bras 4fd8a <rtems_partition_create+0xd6> <== NOT EXECUTED
return RTEMS_TOO_MANY;
}
#endif
the_partition->starting_address = starting_address;
the_partition->length = length;
4fd34: 2743 0014 movel %d3,%a3@(20) <== NOT EXECUTED
the_partition->buffer_size = buffer_size;
the_partition->attribute_set = attribute_set;
4fd38: 276e 0018 001c movel %fp@(24),%a3@(28) <== NOT EXECUTED
the_partition->number_of_used_blocks = 0;
_Chain_Initialize( &the_partition->Memory, starting_address,
4fd3e: 4c42 3003 remul %d2,%d3,%d3 <== NOT EXECUTED
_Thread_Enable_dispatch();
return RTEMS_TOO_MANY;
}
#endif
the_partition->starting_address = starting_address;
4fd42: 2744 0010 movel %d4,%a3@(16) <== NOT EXECUTED
the_partition->length = length;
the_partition->buffer_size = buffer_size;
4fd46: 2742 0018 movel %d2,%a3@(24) <== NOT EXECUTED
the_partition->attribute_set = attribute_set;
the_partition->number_of_used_blocks = 0;
4fd4a: 42ab 0020 clrl %a3@(32) <== NOT EXECUTED
_Chain_Initialize( &the_partition->Memory, starting_address,
4fd4e: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4fd50: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4fd52: 2f04 movel %d4,%sp@- <== NOT EXECUTED
4fd54: 486b 0024 pea %a3@(36) <== NOT EXECUTED
4fd58: 4eb9 0005 2adc jsr 52adc <_Chain_Initialize> <== NOT EXECUTED
Objects_Name name
)
{
_Objects_Set_local_object(
information,
_Objects_Get_index( the_object->id ),
4fd5e: 202b 0008 movel %a3@(8),%d0 <== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
4fd62: 4281 clrl %d1 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
4fd64: 2079 0007 645a moveal 7645a <_Partition_Information+0x18>,%a0<== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
4fd6a: 3200 movew %d0,%d1 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
4fd6c: 218b 1c00 movel %a3,%a0@(00000000,%d1:l:4) <== NOT EXECUTED
information,
_Objects_Get_index( the_object->id ),
the_object
);
the_object->name = name;
4fd70: 2745 000c movel %d5,%a3@(12) <== NOT EXECUTED
&_Partition_Information,
&the_partition->Object,
(Objects_Name) name
);
*id = the_partition->Object.id;
4fd74: 2480 movel %d0,%a2@ <== NOT EXECUTED
name,
0 /* Not used */
);
#endif
_Thread_Enable_dispatch();
4fd76: 4e94 jsr %a4@ <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
4fd78: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
4fd7c: 4280 clrl %d0 <== NOT EXECUTED
4fd7e: 600a bras 4fd8a <rtems_partition_create+0xd6> <== NOT EXECUTED
)
{
register Partition_Control *the_partition;
if ( !rtems_is_name_valid( name ) )
return RTEMS_INVALID_NAME;
4fd80: 7003 moveq #3,%d0 <== NOT EXECUTED
4fd82: 6006 bras 4fd8a <rtems_partition_create+0xd6> <== NOT EXECUTED
if ( !id )
return RTEMS_INVALID_ADDRESS;
if ( length == 0 || buffer_size == 0 || length < buffer_size ||
!_Partition_Is_buffer_size_aligned( buffer_size ) )
return RTEMS_INVALID_SIZE;
4fd84: 7008 moveq #8,%d0 <== NOT EXECUTED
4fd86: 6002 bras 4fd8a <rtems_partition_create+0xd6> <== NOT EXECUTED
if ( !_Addresses_Is_aligned( starting_address ) )
return RTEMS_INVALID_ADDRESS;
4fd88: 7009 moveq #9,%d0 <== NOT EXECUTED
);
#endif
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
4fd8a: 4cee 1c3c ffe4 moveml %fp@(-28),%d2-%d5/%a2-%a4 <== NOT EXECUTED
4fd90: 4e5e unlk %fp <== NOT EXECUTED
0004fd94 <rtems_partition_delete>:
*/
rtems_status_code rtems_partition_delete(
rtems_id id
)
{
4fd94: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
4fd98: 2f0b movel %a3,%sp@- <== NOT EXECUTED
4fd9a: 2f0a movel %a2,%sp@- <== NOT EXECUTED
Objects_Id id,
Objects_Locations *location
)
{
return (Partition_Control *)
_Objects_Get( &_Partition_Information, id, location );
4fd9c: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4fda0: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4fda4: 4879 0007 6442 pea 76442 <_Partition_Information> <== NOT EXECUTED
4fdaa: 4eb9 0005 43f0 jsr 543f0 <_Objects_Get> <== NOT EXECUTED
register Partition_Control *the_partition;
Objects_Locations location;
the_partition = _Partition_Get( id, &location );
switch ( location ) {
4fdb0: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4fdb4: 2440 moveal %d0,%a2 <== NOT EXECUTED
4fdb6: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4fdba: 6638 bnes 4fdf4 <rtems_partition_delete+0x60> <== NOT EXECUTED
4fdbc: 47f9 0005 4eca lea 54eca <_Thread_Enable_dispatch>,%a3 <== NOT EXECUTED
case OBJECTS_LOCAL:
if ( the_partition->number_of_used_blocks == 0 ) {
4fdc2: 4aaa 0020 tstl %a2@(32) <== NOT EXECUTED
4fdc6: 6626 bnes 4fdee <rtems_partition_delete+0x5a> <== NOT EXECUTED
_Objects_Close( &_Partition_Information, &the_partition->Object );
4fdc8: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4fdca: 4879 0007 6442 pea 76442 <_Partition_Information> <== NOT EXECUTED
4fdd0: 4eb9 0005 3fdc jsr 53fdc <_Objects_Close> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Partition_Free (
Partition_Control *the_partition
)
{
_Objects_Free( &_Partition_Information, &the_partition->Object );
4fdd6: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4fdd8: 4879 0007 6442 pea 76442 <_Partition_Information> <== NOT EXECUTED
4fdde: 4eb9 0005 4254 jsr 54254 <_Objects_Free> <== NOT EXECUTED
0 /* Not used */
);
}
#endif
_Thread_Enable_dispatch();
4fde4: 4e93 jsr %a3@ <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
4fde6: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
4fdea: 4280 clrl %d0 <== NOT EXECUTED
4fdec: 6008 bras 4fdf6 <rtems_partition_delete+0x62> <== NOT EXECUTED
}
_Thread_Enable_dispatch();
4fdee: 4e93 jsr %a3@ <== NOT EXECUTED
return RTEMS_RESOURCE_IN_USE;
4fdf0: 700c moveq #12,%d0 <== NOT EXECUTED
4fdf2: 6002 bras 4fdf6 <rtems_partition_delete+0x62> <== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4fdf4: 7004 moveq #4,%d0 <== NOT EXECUTED
}
4fdf6: 246e fff4 moveal %fp@(-12),%a2 <== NOT EXECUTED
4fdfa: 266e fff8 moveal %fp@(-8),%a3 <== NOT EXECUTED
4fdfe: 4e5e unlk %fp <== NOT EXECUTED
...
0004fe04 <rtems_partition_get_buffer>:
rtems_status_code rtems_partition_get_buffer(
rtems_id id,
void **buffer
)
{
4fe04: 4e56 fff0 linkw %fp,#-16 <== NOT EXECUTED
4fe08: 48d7 0c04 moveml %d2/%a2-%a3,%sp@ <== NOT EXECUTED
4fe0c: 266e 000c moveal %fp@(12),%a3 <== NOT EXECUTED
register Partition_Control *the_partition;
Objects_Locations location;
void *the_buffer;
if ( !buffer )
4fe10: 4a8b tstl %a3 <== NOT EXECUTED
4fe12: 6748 beqs 4fe5c <rtems_partition_get_buffer+0x58><== NOT EXECUTED
Objects_Id id,
Objects_Locations *location
)
{
return (Partition_Control *)
_Objects_Get( &_Partition_Information, id, location );
4fe14: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4fe18: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4fe1c: 4879 0007 6442 pea 76442 <_Partition_Information> <== NOT EXECUTED
4fe22: 4eb9 0005 43f0 jsr 543f0 <_Objects_Get> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
the_partition = _Partition_Get( id, &location );
switch ( location ) {
4fe28: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4fe2c: 2440 moveal %d0,%a2 <== NOT EXECUTED
4fe2e: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4fe32: 662c bnes 4fe60 <rtems_partition_get_buffer+0x5c><== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void *_Partition_Allocate_buffer (
Partition_Control *the_partition
)
{
return _Chain_Get( &the_partition->Memory );
4fe34: 486a 0024 pea %a2@(36) <== NOT EXECUTED
4fe38: 4eb9 0005 2aa8 jsr 52aa8 <_Chain_Get> <== NOT EXECUTED
case OBJECTS_LOCAL:
the_buffer = _Partition_Allocate_buffer( the_partition );
if ( the_buffer ) {
4fe3e: 588f addql #4,%sp <== NOT EXECUTED
4fe40: 41f9 0005 4eca lea 54eca <_Thread_Enable_dispatch>,%a0 <== NOT EXECUTED
4fe46: 2400 movel %d0,%d2 <== NOT EXECUTED
4fe48: 670c beqs 4fe56 <rtems_partition_get_buffer+0x52><== NOT EXECUTED
the_partition->number_of_used_blocks += 1;
4fe4a: 52aa 0020 addql #1,%a2@(32) <== NOT EXECUTED
_Thread_Enable_dispatch();
4fe4e: 4e90 jsr %a0@ <== NOT EXECUTED
*buffer = the_buffer;
return RTEMS_SUCCESSFUL;
4fe50: 4280 clrl %d0 <== NOT EXECUTED
case OBJECTS_LOCAL:
the_buffer = _Partition_Allocate_buffer( the_partition );
if ( the_buffer ) {
the_partition->number_of_used_blocks += 1;
_Thread_Enable_dispatch();
*buffer = the_buffer;
4fe52: 2682 movel %d2,%a3@ <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
4fe54: 600c bras 4fe62 <rtems_partition_get_buffer+0x5e><== NOT EXECUTED
}
_Thread_Enable_dispatch();
4fe56: 4e90 jsr %a0@ <== NOT EXECUTED
return RTEMS_UNSATISFIED;
4fe58: 700d moveq #13,%d0 <== NOT EXECUTED
4fe5a: 6006 bras 4fe62 <rtems_partition_get_buffer+0x5e><== NOT EXECUTED
register Partition_Control *the_partition;
Objects_Locations location;
void *the_buffer;
if ( !buffer )
return RTEMS_INVALID_ADDRESS;
4fe5c: 7009 moveq #9,%d0 <== NOT EXECUTED
4fe5e: 6002 bras 4fe62 <rtems_partition_get_buffer+0x5e><== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4fe60: 7004 moveq #4,%d0 <== NOT EXECUTED
}
4fe62: 4cee 0c04 fff0 moveml %fp@(-16),%d2/%a2-%a3 <== NOT EXECUTED
4fe68: 4e5e unlk %fp <== NOT EXECUTED
0004fe6c <rtems_partition_ident>:
rtems_status_code rtems_partition_ident(
rtems_name name,
uint32_t node,
rtems_id *id
)
{
4fe6c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
Objects_Name_or_id_lookup_errors status;
status = _Objects_Name_to_id_u32( &_Partition_Information, name, node, id );
4fe70: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
4fe74: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
4fe78: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4fe7c: 4879 0007 6442 pea 76442 <_Partition_Information> <== NOT EXECUTED
4fe82: 4eb9 0005 457c jsr 5457c <_Objects_Name_to_id_u32> <== NOT EXECUTED
return _Status_Object_name_errors_to_status[ status ];
}
4fe88: 41f9 0006 f980 lea 6f980 <_Status_Object_name_errors_to_status>,%a0<== NOT EXECUTED
4fe8e: 4e5e unlk %fp <== NOT EXECUTED
4fe90: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0 <== NOT EXECUTED
...
0004fe98 <rtems_partition_return_buffer>:
rtems_status_code rtems_partition_return_buffer(
rtems_id id,
void *buffer
)
{
4fe98: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
4fe9c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4fe9e: 2f02 movel %d2,%sp@- <== NOT EXECUTED
Objects_Id id,
Objects_Locations *location
)
{
return (Partition_Control *)
_Objects_Get( &_Partition_Information, id, location );
4fea0: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4fea4: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4fea8: 4879 0007 6442 pea 76442 <_Partition_Information> <== NOT EXECUTED
4feae: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
4feb2: 4eb9 0005 43f0 jsr 543f0 <_Objects_Get> <== NOT EXECUTED
register Partition_Control *the_partition;
Objects_Locations location;
the_partition = _Partition_Get( id, &location );
switch ( location ) {
4feb8: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4febc: 2440 moveal %d0,%a2 <== NOT EXECUTED
4febe: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4fec2: 663e bnes 4ff02 <rtems_partition_return_buffer+0x6a><== NOT EXECUTED
)
{
void *starting;
void *ending;
starting = the_partition->starting_address;
4fec4: 202a 0010 movel %a2@(16),%d0 <== NOT EXECUTED
ending = _Addresses_Add_offset( starting, the_partition->length );
4fec8: 222a 0014 movel %a2@(20),%d1 <== NOT EXECUTED
const void *address,
const void *base,
const void *limit
)
{
return (address >= base && address <= limit);
4fecc: b082 cmpl %d2,%d0 <== NOT EXECUTED
4fece: 6240 bhis 4ff10 <rtems_partition_return_buffer+0x78><== NOT EXECUTED
RTEMS_INLINE_ROUTINE void *_Addresses_Add_offset (
const void *base,
uintptr_t offset
)
{
return (void *)((uintptr_t)base + offset);
4fed0: d280 addl %d0,%d1 <== NOT EXECUTED
const void *address,
const void *base,
const void *limit
)
{
return (address >= base && address <= limit);
4fed2: b282 cmpl %d2,%d1 <== NOT EXECUTED
4fed4: 653a bcss 4ff10 <rtems_partition_return_buffer+0x78><== NOT EXECUTED
RTEMS_INLINE_ROUTINE int32_t _Addresses_Subtract (
const void *left,
const void *right
)
{
return (int32_t) ((const char *) left - (const char *) right);
4fed6: 2202 movel %d2,%d1 <== NOT EXECUTED
4fed8: 9280 subl %d0,%d1 <== NOT EXECUTED
4feda: 2001 movel %d1,%d0 <== NOT EXECUTED
offset = (uint32_t) _Addresses_Subtract(
the_buffer,
the_partition->starting_address
);
return ((offset % the_partition->buffer_size) == 0);
4fedc: 4c6a 0001 0018 remul %a2@(24),%d1,%d0 <== NOT EXECUTED
starting = the_partition->starting_address;
ending = _Addresses_Add_offset( starting, the_partition->length );
return (
_Addresses_Is_in_range( the_buffer, starting, ending ) &&
4fee2: 4a81 tstl %d1 <== NOT EXECUTED
4fee4: 662a bnes 4ff10 <rtems_partition_return_buffer+0x78><== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Partition_Free_buffer (
Partition_Control *the_partition,
Chain_Node *the_buffer
)
{
_Chain_Append( &the_partition->Memory, the_buffer );
4fee6: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4fee8: 486a 0024 pea %a2@(36) <== NOT EXECUTED
4feec: 4eb9 0005 2a48 jsr 52a48 <_Chain_Append> <== NOT EXECUTED
case OBJECTS_LOCAL:
if ( _Partition_Is_buffer_valid( buffer, the_partition ) ) {
_Partition_Free_buffer( the_partition, buffer );
the_partition->number_of_used_blocks -= 1;
4fef2: 53aa 0020 subql #1,%a2@(32) <== NOT EXECUTED
_Thread_Enable_dispatch();
4fef6: 4eb9 0005 4eca jsr 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
4fefc: 508f addql #8,%sp <== NOT EXECUTED
4fefe: 4280 clrl %d0 <== NOT EXECUTED
4ff00: 6002 bras 4ff04 <rtems_partition_return_buffer+0x6c><== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4ff02: 7004 moveq #4,%d0 <== NOT EXECUTED
}
4ff04: 242e fff4 movel %fp@(-12),%d2 <== NOT EXECUTED
4ff08: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
4ff0c: 4e5e unlk %fp <== NOT EXECUTED
4ff0e: 4e75 rts <== NOT EXECUTED
_Partition_Free_buffer( the_partition, buffer );
the_partition->number_of_used_blocks -= 1;
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
_Thread_Enable_dispatch();
4ff10: 4eb9 0005 4eca jsr 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
4ff16: 7009 moveq #9,%d0 <== NOT EXECUTED
4ff18: 60ea bras 4ff04 <rtems_partition_return_buffer+0x6c><== NOT EXECUTED
...
0004f338 <rtems_port_create>:
void *internal_start,
void *external_start,
uint32_t length,
rtems_id *id
)
{
4f338: 4e56 ffec linkw %fp,#-20 <== NOT EXECUTED
4f33c: 48d7 0c1c moveml %d2-%d4/%a2-%a3,%sp@ <== NOT EXECUTED
4f340: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
4f344: 282e 000c movel %fp@(12),%d4 <== NOT EXECUTED
4f348: 262e 0010 movel %fp@(16),%d3 <== NOT EXECUTED
4f34c: 246e 0018 moveal %fp@(24),%a2 <== NOT EXECUTED
register Dual_ported_memory_Control *the_port;
if ( !rtems_is_name_valid( name ) )
4f350: 4a82 tstl %d2 <== NOT EXECUTED
4f352: 676c beqs 4f3c0 <rtems_port_create+0x88> <== NOT EXECUTED
return RTEMS_INVALID_NAME;
if ( !id )
4f354: 4a8a tstl %a2 <== NOT EXECUTED
4f356: 676c beqs 4f3c4 <rtems_port_create+0x8c> <== NOT EXECUTED
* id - port id
* RTEMS_SUCCESSFUL - if successful
* error code - if unsuccessful
*/
rtems_status_code rtems_port_create(
4f358: 2003 movel %d3,%d0 <== NOT EXECUTED
4f35a: 7203 moveq #3,%d1 <== NOT EXECUTED
4f35c: 8084 orl %d4,%d0 <== NOT EXECUTED
4f35e: c081 andl %d1,%d0 <== NOT EXECUTED
return RTEMS_INVALID_NAME;
if ( !id )
return RTEMS_INVALID_ADDRESS;
if ( !_Addresses_Is_aligned( internal_start ) ||
4f360: 6662 bnes 4f3c4 <rtems_port_create+0x8c> <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
4f362: 2039 0007 65ac movel 765ac <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
4f368: 5280 addql #1,%d0 <== NOT EXECUTED
4f36a: 23c0 0007 65ac movel %d0,765ac <_Thread_Dispatch_disable_level><== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Dual_ported_memory_Control
*_Dual_ported_memory_Allocate ( void )
{
return (Dual_ported_memory_Control *)
_Objects_Allocate( &_Dual_ported_memory_Information );
4f370: 4879 0007 6408 pea 76408 <_Dual_ported_memory_Information> <== NOT EXECUTED
4f376: 4eb9 0005 3f60 jsr 53f60 <_Objects_Allocate> <== NOT EXECUTED
_Thread_Disable_dispatch(); /* to prevent deletion */
the_port = _Dual_ported_memory_Allocate();
if ( !the_port ) {
4f37c: 588f addql #4,%sp <== NOT EXECUTED
4f37e: 43f9 0005 4eca lea 54eca <_Thread_Enable_dispatch>,%a1 <== NOT EXECUTED
4f384: 2040 moveal %d0,%a0 <== NOT EXECUTED
4f386: 4a80 tstl %d0 <== NOT EXECUTED
4f388: 6606 bnes 4f390 <rtems_port_create+0x58> <== NOT EXECUTED
_Thread_Enable_dispatch();
4f38a: 4e91 jsr %a1@ <== NOT EXECUTED
return RTEMS_TOO_MANY;
4f38c: 7005 moveq #5,%d0 <== NOT EXECUTED
4f38e: 6036 bras 4f3c6 <rtems_port_create+0x8e> <== NOT EXECUTED
}
the_port->internal_base = internal_start;
the_port->external_base = external_start;
the_port->length = length - 1;
4f390: 202e 0014 movel %fp@(20),%d0 <== NOT EXECUTED
4f394: 5380 subql #1,%d0 <== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
4f396: 4281 clrl %d1 <== NOT EXECUTED
4f398: 2140 0018 movel %d0,%a0@(24) <== NOT EXECUTED
information,
_Objects_Get_index( the_object->id ),
4f39c: 2028 0008 movel %a0@(8),%d0 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
4f3a0: 2679 0007 6420 moveal 76420 <_Dual_ported_memory_Information+0x18>,%a3<== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
4f3a6: 3200 movew %d0,%d1 <== NOT EXECUTED
if ( !the_port ) {
_Thread_Enable_dispatch();
return RTEMS_TOO_MANY;
}
the_port->internal_base = internal_start;
4f3a8: 2144 0010 movel %d4,%a0@(16) <== NOT EXECUTED
the_port->external_base = external_start;
4f3ac: 2143 0014 movel %d3,%a0@(20) <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
4f3b0: 2788 1c00 movel %a0,%a3@(00000000,%d1:l:4) <== NOT EXECUTED
information,
_Objects_Get_index( the_object->id ),
the_object
);
the_object->name = name;
4f3b4: 2142 000c movel %d2,%a0@(12) <== NOT EXECUTED
&_Dual_ported_memory_Information,
&the_port->Object,
(Objects_Name) name
);
*id = the_port->Object.id;
4f3b8: 2480 movel %d0,%a2@ <== NOT EXECUTED
_Thread_Enable_dispatch();
4f3ba: 4e91 jsr %a1@ <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
4f3bc: 4280 clrl %d0 <== NOT EXECUTED
4f3be: 6006 bras 4f3c6 <rtems_port_create+0x8e> <== NOT EXECUTED
)
{
register Dual_ported_memory_Control *the_port;
if ( !rtems_is_name_valid( name ) )
return RTEMS_INVALID_NAME;
4f3c0: 7003 moveq #3,%d0 <== NOT EXECUTED
4f3c2: 6002 bras 4f3c6 <rtems_port_create+0x8e> <== NOT EXECUTED
if ( !id )
return RTEMS_INVALID_ADDRESS;
if ( !_Addresses_Is_aligned( internal_start ) ||
!_Addresses_Is_aligned( external_start ) )
return RTEMS_INVALID_ADDRESS;
4f3c4: 7009 moveq #9,%d0 <== NOT EXECUTED
);
*id = the_port->Object.id;
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
4f3c6: 4cee 0c1c ffec moveml %fp@(-20),%d2-%d4/%a2-%a3 <== NOT EXECUTED
4f3cc: 4e5e unlk %fp <== NOT EXECUTED
0004f3d0 <rtems_port_delete>:
*/
rtems_status_code rtems_port_delete(
rtems_id id
)
{
4f3d0: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
4f3d4: 2f02 movel %d2,%sp@- <== NOT EXECUTED
Objects_Id id,
Objects_Locations *location
)
{
return (Dual_ported_memory_Control *)
_Objects_Get( &_Dual_ported_memory_Information, id, location );
4f3d6: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4f3da: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4f3de: 4879 0007 6408 pea 76408 <_Dual_ported_memory_Information> <== NOT EXECUTED
4f3e4: 4eb9 0005 43f0 jsr 543f0 <_Objects_Get> <== NOT EXECUTED
register Dual_ported_memory_Control *the_port;
Objects_Locations location;
the_port = _Dual_ported_memory_Get( id, &location );
switch ( location ) {
4f3ea: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4f3ee: 2400 movel %d0,%d2 <== NOT EXECUTED
4f3f0: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4f3f4: 662a bnes 4f420 <rtems_port_delete+0x50> <== NOT EXECUTED
case OBJECTS_LOCAL:
_Objects_Close( &_Dual_ported_memory_Information, &the_port->Object );
4f3f6: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4f3f8: 4879 0007 6408 pea 76408 <_Dual_ported_memory_Information> <== NOT EXECUTED
4f3fe: 4eb9 0005 3fdc jsr 53fdc <_Objects_Close> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Dual_ported_memory_Free (
Dual_ported_memory_Control *the_port
)
{
_Objects_Free( &_Dual_ported_memory_Information, &the_port->Object );
4f404: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4f406: 4879 0007 6408 pea 76408 <_Dual_ported_memory_Information> <== NOT EXECUTED
4f40c: 4eb9 0005 4254 jsr 54254 <_Objects_Free> <== NOT EXECUTED
_Dual_ported_memory_Free( the_port );
_Thread_Enable_dispatch();
4f412: 4eb9 0005 4eca jsr 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
4f418: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
4f41c: 4280 clrl %d0 <== NOT EXECUTED
4f41e: 6002 bras 4f422 <rtems_port_delete+0x52> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4f420: 7004 moveq #4,%d0 <== NOT EXECUTED
}
4f422: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
4f426: 4e5e unlk %fp <== NOT EXECUTED
...
0004f42c <rtems_port_external_to_internal>:
rtems_status_code rtems_port_external_to_internal(
rtems_id id,
void *external,
void **internal
)
{
4f42c: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
4f430: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4f432: 246e 0010 moveal %fp@(16),%a2 <== NOT EXECUTED
4f436: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4f438: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
register Dual_ported_memory_Control *the_port;
Objects_Locations location;
uint32_t ending;
if ( !internal )
4f43c: 4a8a tstl %a2 <== NOT EXECUTED
4f43e: 6740 beqs 4f480 <rtems_port_external_to_internal+0x54><== NOT EXECUTED
Objects_Id id,
Objects_Locations *location
)
{
return (Dual_ported_memory_Control *)
_Objects_Get( &_Dual_ported_memory_Information, id, location );
4f440: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4f444: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4f448: 4879 0007 6408 pea 76408 <_Dual_ported_memory_Information> <== NOT EXECUTED
4f44e: 4eb9 0005 43f0 jsr 543f0 <_Objects_Get> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
the_port = _Dual_ported_memory_Get( id, &location );
switch ( location ) {
4f454: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4f458: 2040 moveal %d0,%a0 <== NOT EXECUTED
4f45a: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4f45e: 6624 bnes 4f484 <rtems_port_external_to_internal+0x58><== NOT EXECUTED
RTEMS_INLINE_ROUTINE int32_t _Addresses_Subtract (
const void *left,
const void *right
)
{
return (int32_t) ((const char *) left - (const char *) right);
4f460: 2002 movel %d2,%d0 <== NOT EXECUTED
4f462: 90a8 0014 subl %a0@(20),%d0 <== NOT EXECUTED
case OBJECTS_LOCAL:
ending = _Addresses_Subtract( external, the_port->external_base );
if ( ending > the_port->length )
4f466: b0a8 0018 cmpl %a0@(24),%d0 <== NOT EXECUTED
4f46a: 6304 blss 4f470 <rtems_port_external_to_internal+0x44><== NOT EXECUTED
*internal = external;
4f46c: 2482 movel %d2,%a2@ <== NOT EXECUTED
4f46e: 6006 bras 4f476 <rtems_port_external_to_internal+0x4a><== NOT EXECUTED
RTEMS_INLINE_ROUTINE void *_Addresses_Add_offset (
const void *base,
uintptr_t offset
)
{
return (void *)((uintptr_t)base + offset);
4f470: d0a8 0010 addl %a0@(16),%d0 <== NOT EXECUTED
4f474: 2480 movel %d0,%a2@ <== NOT EXECUTED
else
*internal = _Addresses_Add_offset( the_port->internal_base,
ending );
_Thread_Enable_dispatch();
4f476: 4eb9 0005 4eca jsr 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
4f47c: 4280 clrl %d0 <== NOT EXECUTED
4f47e: 6006 bras 4f486 <rtems_port_external_to_internal+0x5a><== NOT EXECUTED
register Dual_ported_memory_Control *the_port;
Objects_Locations location;
uint32_t ending;
if ( !internal )
return RTEMS_INVALID_ADDRESS;
4f480: 7009 moveq #9,%d0 <== NOT EXECUTED
4f482: 6002 bras 4f486 <rtems_port_external_to_internal+0x5a><== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4f484: 7004 moveq #4,%d0 <== NOT EXECUTED
}
4f486: 242e fff4 movel %fp@(-12),%d2 <== NOT EXECUTED
4f48a: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
4f48e: 4e5e unlk %fp <== NOT EXECUTED
...
0004f494 <rtems_port_ident>:
rtems_status_code rtems_port_ident(
rtems_name name,
rtems_id *id
)
{
4f494: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
Objects_Name_or_id_lookup_errors status;
status = _Objects_Name_to_id_u32(
4f498: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
4f49c: 42a7 clrl %sp@- <== NOT EXECUTED
4f49e: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4f4a2: 4879 0007 6408 pea 76408 <_Dual_ported_memory_Information> <== NOT EXECUTED
4f4a8: 4eb9 0005 457c jsr 5457c <_Objects_Name_to_id_u32> <== NOT EXECUTED
OBJECTS_SEARCH_ALL_NODES,
id
);
return _Status_Object_name_errors_to_status[ status ];
}
4f4ae: 41f9 0006 f980 lea 6f980 <_Status_Object_name_errors_to_status>,%a0<== NOT EXECUTED
4f4b4: 4e5e unlk %fp <== NOT EXECUTED
4f4b6: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0 <== NOT EXECUTED
0004f4bc <rtems_port_internal_to_external>:
rtems_status_code rtems_port_internal_to_external(
rtems_id id,
void *internal,
void **external
)
{
4f4bc: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
4f4c0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4f4c2: 246e 0010 moveal %fp@(16),%a2 <== NOT EXECUTED
4f4c6: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4f4c8: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
register Dual_ported_memory_Control *the_port;
Objects_Locations location;
uint32_t ending;
if ( !external )
4f4cc: 4a8a tstl %a2 <== NOT EXECUTED
4f4ce: 6740 beqs 4f510 <rtems_port_internal_to_external+0x54><== NOT EXECUTED
4f4d0: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4f4d4: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4f4d8: 4879 0007 6408 pea 76408 <_Dual_ported_memory_Information> <== NOT EXECUTED
4f4de: 4eb9 0005 43f0 jsr 543f0 <_Objects_Get> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
the_port = _Dual_ported_memory_Get( id, &location );
switch ( location ) {
4f4e4: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4f4e8: 2040 moveal %d0,%a0 <== NOT EXECUTED
4f4ea: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4f4ee: 6624 bnes 4f514 <rtems_port_internal_to_external+0x58><== NOT EXECUTED
RTEMS_INLINE_ROUTINE int32_t _Addresses_Subtract (
const void *left,
const void *right
)
{
return (int32_t) ((const char *) left - (const char *) right);
4f4f0: 2002 movel %d2,%d0 <== NOT EXECUTED
4f4f2: 90a8 0010 subl %a0@(16),%d0 <== NOT EXECUTED
case OBJECTS_LOCAL:
ending = _Addresses_Subtract( internal, the_port->internal_base );
if ( ending > the_port->length )
4f4f6: b0a8 0018 cmpl %a0@(24),%d0 <== NOT EXECUTED
4f4fa: 6304 blss 4f500 <rtems_port_internal_to_external+0x44><== NOT EXECUTED
*external = internal;
4f4fc: 2482 movel %d2,%a2@ <== NOT EXECUTED
4f4fe: 6006 bras 4f506 <rtems_port_internal_to_external+0x4a><== NOT EXECUTED
RTEMS_INLINE_ROUTINE void *_Addresses_Add_offset (
const void *base,
uintptr_t offset
)
{
return (void *)((uintptr_t)base + offset);
4f500: d0a8 0014 addl %a0@(20),%d0 <== NOT EXECUTED
4f504: 2480 movel %d0,%a2@ <== NOT EXECUTED
else
*external = _Addresses_Add_offset( the_port->external_base,
ending );
_Thread_Enable_dispatch();
4f506: 4eb9 0005 4eca jsr 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
4f50c: 4280 clrl %d0 <== NOT EXECUTED
4f50e: 6006 bras 4f516 <rtems_port_internal_to_external+0x5a><== NOT EXECUTED
register Dual_ported_memory_Control *the_port;
Objects_Locations location;
uint32_t ending;
if ( !external )
return RTEMS_INVALID_ADDRESS;
4f510: 7009 moveq #9,%d0 <== NOT EXECUTED
4f512: 6002 bras 4f516 <rtems_port_internal_to_external+0x5a><== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4f514: 7004 moveq #4,%d0 <== NOT EXECUTED
}
4f516: 242e fff4 movel %fp@(-12),%d2 <== NOT EXECUTED
4f51a: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
4f51e: 4e5e unlk %fp <== NOT EXECUTED
...
0004ff1c <rtems_rate_monotonic_cancel>:
*/
rtems_status_code rtems_rate_monotonic_cancel(
rtems_id id
)
{
4ff1c: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
4ff20: 2f0b movel %a3,%sp@- <== NOT EXECUTED
4ff22: 2f0a movel %a2,%sp@- <== NOT EXECUTED
Objects_Id id,
Objects_Locations *location
)
{
return (Rate_monotonic_Control *)
_Objects_Get( &_Rate_monotonic_Information, id, location );
4ff24: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4ff28: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4ff2c: 4879 0007 647c pea 7647c <_Rate_monotonic_Information> <== NOT EXECUTED
4ff32: 4eb9 0005 43f0 jsr 543f0 <_Objects_Get> <== NOT EXECUTED
Rate_monotonic_Control *the_period;
Objects_Locations location;
the_period = _Rate_monotonic_Get( id, &location );
switch ( location ) {
4ff38: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4ff3c: 2440 moveal %d0,%a2 <== NOT EXECUTED
4ff3e: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4ff42: 662e bnes 4ff72 <rtems_rate_monotonic_cancel+0x56><== NOT EXECUTED
case OBJECTS_LOCAL:
if ( !_Thread_Is_executing( the_period->owner ) ) {
4ff44: 2039 0007 6a42 movel 76a42 <_Per_CPU_Information+0xc>,%d0 <== NOT EXECUTED
4ff4a: 47f9 0005 4eca lea 54eca <_Thread_Enable_dispatch>,%a3 <== NOT EXECUTED
4ff50: b0aa 0040 cmpl %a2@(64),%d0 <== NOT EXECUTED
4ff54: 6706 beqs 4ff5c <rtems_rate_monotonic_cancel+0x40><== NOT EXECUTED
_Thread_Enable_dispatch();
4ff56: 4e93 jsr %a3@ <== NOT EXECUTED
return RTEMS_NOT_OWNER_OF_RESOURCE;
4ff58: 7017 moveq #23,%d0 <== NOT EXECUTED
4ff5a: 6018 bras 4ff74 <rtems_rate_monotonic_cancel+0x58><== NOT EXECUTED
}
(void) _Watchdog_Remove( &the_period->Timer );
4ff5c: 486a 0010 pea %a2@(16) <== NOT EXECUTED
4ff60: 4eb9 0005 5fdc jsr 55fdc <_Watchdog_Remove> <== NOT EXECUTED
the_period->state = RATE_MONOTONIC_INACTIVE;
4ff66: 42aa 0038 clrl %a2@(56) <== NOT EXECUTED
_Thread_Enable_dispatch();
4ff6a: 4e93 jsr %a3@ <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
4ff6c: 588f addql #4,%sp <== NOT EXECUTED
4ff6e: 4280 clrl %d0 <== NOT EXECUTED
4ff70: 6002 bras 4ff74 <rtems_rate_monotonic_cancel+0x58><== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4ff72: 7004 moveq #4,%d0 <== NOT EXECUTED
}
4ff74: 246e fff4 moveal %fp@(-12),%a2 <== NOT EXECUTED
4ff78: 266e fff8 moveal %fp@(-8),%a3 <== NOT EXECUTED
4ff7c: 4e5e unlk %fp <== NOT EXECUTED
00046034 <rtems_rate_monotonic_create>:
rtems_status_code rtems_rate_monotonic_create(
rtems_name name,
rtems_id *id
)
{
46034: 4e56 fff0 linkw %fp,#-16 <== NOT EXECUTED
46038: 48d7 1c04 moveml %d2/%a2-%a4,%sp@ <== NOT EXECUTED
4603c: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
46040: 286e 000c moveal %fp@(12),%a4 <== NOT EXECUTED
Rate_monotonic_Control *the_period;
if ( !rtems_is_name_valid( name ) )
46044: 6700 009c beqw 460e2 <rtems_rate_monotonic_create+0xae><== NOT EXECUTED
return RTEMS_INVALID_NAME;
if ( !id )
46048: 4a8c tstl %a4 <== NOT EXECUTED
4604a: 6700 009a beqw 460e6 <rtems_rate_monotonic_create+0xb2><== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
4604e: 2039 0005 f782 movel 5f782 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
46054: 5280 addql #1,%d0 <== NOT EXECUTED
46056: 23c0 0005 f782 movel %d0,5f782 <_Thread_Dispatch_disable_level><== NOT EXECUTED
* the inactive chain of free period control blocks.
*/
RTEMS_INLINE_ROUTINE Rate_monotonic_Control *_Rate_monotonic_Allocate( void )
{
return (Rate_monotonic_Control *)
_Objects_Allocate( &_Rate_monotonic_Information );
4605c: 4879 0005 f68c pea 5f68c <_Rate_monotonic_Information> <== NOT EXECUTED
46062: 47f9 0004 8dd6 lea 48dd6 <_Thread_Enable_dispatch>,%a3 <== NOT EXECUTED
46068: 4eb9 0004 7dbc jsr 47dbc <_Objects_Allocate> <== NOT EXECUTED
_Thread_Disable_dispatch(); /* to prevent deletion */
the_period = _Rate_monotonic_Allocate();
if ( !the_period ) {
4606e: 588f addql #4,%sp <== NOT EXECUTED
46070: 2440 moveal %d0,%a2 <== NOT EXECUTED
46072: 4a80 tstl %d0 <== NOT EXECUTED
46074: 6606 bnes 4607c <rtems_rate_monotonic_create+0x48><== NOT EXECUTED
_Thread_Enable_dispatch();
46076: 4e93 jsr %a3@ <== NOT EXECUTED
return RTEMS_TOO_MANY;
46078: 7005 moveq #5,%d0 <== NOT EXECUTED
4607a: 606c bras 460e8 <rtems_rate_monotonic_create+0xb4><== NOT EXECUTED
}
the_period->owner = _Thread_Executing;
4607c: 41f9 0005 fc10 lea 5fc10 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
46082: 2550 0040 movel %a0@,%a2@(64) <== NOT EXECUTED
the_period->state = RATE_MONOTONIC_INACTIVE;
46086: 42aa 0038 clrl %a2@(56) <== NOT EXECUTED
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
4608a: 42aa 0018 clrl %a2@(24) <== NOT EXECUTED
the_watchdog->routine = routine;
4608e: 42aa 002c clrl %a2@(44) <== NOT EXECUTED
the_watchdog->id = id;
46092: 42aa 0030 clrl %a2@(48) <== NOT EXECUTED
the_watchdog->user_data = user_data;
46096: 42aa 0034 clrl %a2@(52) <== NOT EXECUTED
_Watchdog_Initialize( &the_period->Timer, NULL, 0, NULL );
_Rate_monotonic_Reset_statistics( the_period );
4609a: 4878 0038 pea 38 <DBL_MANT_DIG+0x3> <== NOT EXECUTED
4609e: 42a7 clrl %sp@- <== NOT EXECUTED
460a0: 486a 0054 pea %a2@(84) <== NOT EXECUTED
460a4: 4eb9 0004 e974 jsr 4e974 <memset> <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
460aa: 2079 0005 f6a4 moveal 5f6a4 <_Rate_monotonic_Information+0x18>,%a0<== NOT EXECUTED
460b0: 203c 7fff ffff movel #2147483647,%d0 <== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
460b6: 4281 clrl %d1 <== NOT EXECUTED
460b8: 2540 005c movel %d0,%a2@(92) <== NOT EXECUTED
460bc: 2540 0060 movel %d0,%a2@(96) <== NOT EXECUTED
460c0: 2540 0074 movel %d0,%a2@(116) <== NOT EXECUTED
460c4: 2540 0078 movel %d0,%a2@(120) <== NOT EXECUTED
information,
_Objects_Get_index( the_object->id ),
460c8: 202a 0008 movel %a2@(8),%d0 <== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
460cc: 3200 movew %d0,%d1 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
460ce: 218a 1c00 movel %a2,%a0@(00000000,%d1:l:4) <== NOT EXECUTED
information,
_Objects_Get_index( the_object->id ),
the_object
);
the_object->name = name;
460d2: 2542 000c movel %d2,%a2@(12) <== NOT EXECUTED
&_Rate_monotonic_Information,
&the_period->Object,
(Objects_Name) name
);
*id = the_period->Object.id;
460d6: 2880 movel %d0,%a4@ <== NOT EXECUTED
_Thread_Enable_dispatch();
460d8: 4e93 jsr %a3@ <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
460da: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
460de: 4280 clrl %d0 <== NOT EXECUTED
460e0: 6006 bras 460e8 <rtems_rate_monotonic_create+0xb4><== NOT EXECUTED
)
{
Rate_monotonic_Control *the_period;
if ( !rtems_is_name_valid( name ) )
return RTEMS_INVALID_NAME;
460e2: 7003 moveq #3,%d0 <== NOT EXECUTED
460e4: 6002 bras 460e8 <rtems_rate_monotonic_create+0xb4><== NOT EXECUTED
if ( !id )
return RTEMS_INVALID_ADDRESS;
460e6: 7009 moveq #9,%d0 <== NOT EXECUTED
);
*id = the_period->Object.id;
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
460e8: 4cee 1c04 fff0 moveml %fp@(-16),%d2/%a2-%a4 <== NOT EXECUTED
460ee: 4e5e unlk %fp <== NOT EXECUTED
...
00050040 <rtems_rate_monotonic_delete>:
*/
rtems_status_code rtems_rate_monotonic_delete(
rtems_id id
)
{
50040: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
50044: 2f0a movel %a2,%sp@- <== NOT EXECUTED
Objects_Id id,
Objects_Locations *location
)
{
return (Rate_monotonic_Control *)
_Objects_Get( &_Rate_monotonic_Information, id, location );
50046: 486e fffc pea %fp@(-4) <== NOT EXECUTED
5004a: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
5004e: 4879 0007 647c pea 7647c <_Rate_monotonic_Information> <== NOT EXECUTED
50054: 4eb9 0005 43f0 jsr 543f0 <_Objects_Get> <== NOT EXECUTED
Rate_monotonic_Control *the_period;
Objects_Locations location;
the_period = _Rate_monotonic_Get( id, &location );
switch ( location ) {
5005a: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
5005e: 2440 moveal %d0,%a2 <== NOT EXECUTED
50060: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
50064: 6638 bnes 5009e <rtems_rate_monotonic_delete+0x5e><== NOT EXECUTED
case OBJECTS_LOCAL:
_Objects_Close( &_Rate_monotonic_Information, &the_period->Object );
50066: 2f00 movel %d0,%sp@- <== NOT EXECUTED
50068: 4879 0007 647c pea 7647c <_Rate_monotonic_Information> <== NOT EXECUTED
5006e: 4eb9 0005 3fdc jsr 53fdc <_Objects_Close> <== NOT EXECUTED
(void) _Watchdog_Remove( &the_period->Timer );
50074: 486a 0010 pea %a2@(16) <== NOT EXECUTED
50078: 4eb9 0005 5fdc jsr 55fdc <_Watchdog_Remove> <== NOT EXECUTED
the_period->state = RATE_MONOTONIC_INACTIVE;
5007e: 42aa 0038 clrl %a2@(56) <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Rate_monotonic_Free (
Rate_monotonic_Control *the_period
)
{
_Objects_Free( &_Rate_monotonic_Information, &the_period->Object );
50082: 2f0a movel %a2,%sp@- <== NOT EXECUTED
50084: 4879 0007 647c pea 7647c <_Rate_monotonic_Information> <== NOT EXECUTED
5008a: 4eb9 0005 4254 jsr 54254 <_Objects_Free> <== NOT EXECUTED
_Rate_monotonic_Free( the_period );
_Thread_Enable_dispatch();
50090: 4eb9 0005 4eca jsr 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
50096: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
5009a: 4280 clrl %d0 <== NOT EXECUTED
5009c: 6002 bras 500a0 <rtems_rate_monotonic_delete+0x60><== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
5009e: 7004 moveq #4,%d0 <== NOT EXECUTED
}
500a0: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
500a4: 4e5e unlk %fp <== NOT EXECUTED
0004bd74 <rtems_rate_monotonic_get_statistics>:
rtems_status_code rtems_rate_monotonic_get_statistics(
rtems_id id,
rtems_rate_monotonic_period_statistics *statistics
)
{
4bd74: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
4bd78: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4bd7a: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
Objects_Locations location;
Rate_monotonic_Control *the_period;
rtems_rate_monotonic_period_statistics *dst;
Rate_monotonic_Statistics *src;
if ( !statistics )
4bd7e: 4a8a tstl %a2 <== NOT EXECUTED
4bd80: 6700 0096 beqw 4be18 <rtems_rate_monotonic_get_statistics+0xa4><== NOT EXECUTED
4bd84: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4bd88: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4bd8c: 4879 0005 f68c pea 5f68c <_Rate_monotonic_Information> <== NOT EXECUTED
4bd92: 4eb9 0004 82fc jsr 482fc <_Objects_Get> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
the_period = _Rate_monotonic_Get( id, &location );
switch ( location ) {
4bd98: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4bd9c: 2040 moveal %d0,%a0 <== NOT EXECUTED
4bd9e: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4bda2: 6678 bnes 4be1c <rtems_rate_monotonic_get_statistics+0xa8><== NOT EXECUTED
case OBJECTS_LOCAL:
dst = statistics;
src = &the_period->Statistics;
dst->count = src->count;
4bda4: 24a8 0054 movel %a0@(84),%a2@ <== NOT EXECUTED
dst->missed_count = src->missed_count;
4bda8: 2568 0058 0004 movel %a0@(88),%a2@(4) <== NOT EXECUTED
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
_Timestamp_To_timespec( &src->min_cpu_time, &dst->min_cpu_time );
4bdae: 2028 005c movel %a0@(92),%d0 <== NOT EXECUTED
4bdb2: 2228 0060 movel %a0@(96),%d1 <== NOT EXECUTED
4bdb6: 2540 0008 movel %d0,%a2@(8) <== NOT EXECUTED
4bdba: 2541 000c movel %d1,%a2@(12) <== NOT EXECUTED
_Timestamp_To_timespec( &src->max_cpu_time, &dst->max_cpu_time );
4bdbe: 2028 0064 movel %a0@(100),%d0 <== NOT EXECUTED
4bdc2: 2228 0068 movel %a0@(104),%d1 <== NOT EXECUTED
4bdc6: 2540 0010 movel %d0,%a2@(16) <== NOT EXECUTED
4bdca: 2541 0014 movel %d1,%a2@(20) <== NOT EXECUTED
_Timestamp_To_timespec( &src->total_cpu_time, &dst->total_cpu_time );
4bdce: 2028 006c movel %a0@(108),%d0 <== NOT EXECUTED
4bdd2: 2228 0070 movel %a0@(112),%d1 <== NOT EXECUTED
4bdd6: 2540 0018 movel %d0,%a2@(24) <== NOT EXECUTED
4bdda: 2541 001c movel %d1,%a2@(28) <== NOT EXECUTED
_Timestamp_To_timespec( &src->min_wall_time, &dst->min_wall_time );
4bdde: 2028 0074 movel %a0@(116),%d0 <== NOT EXECUTED
4bde2: 2228 0078 movel %a0@(120),%d1 <== NOT EXECUTED
4bde6: 2540 0020 movel %d0,%a2@(32) <== NOT EXECUTED
4bdea: 2541 0024 movel %d1,%a2@(36) <== NOT EXECUTED
_Timestamp_To_timespec( &src->max_wall_time, &dst->max_wall_time );
4bdee: 2028 007c movel %a0@(124),%d0 <== NOT EXECUTED
4bdf2: 2228 0080 movel %a0@(128),%d1 <== NOT EXECUTED
4bdf6: 2540 0028 movel %d0,%a2@(40) <== NOT EXECUTED
4bdfa: 2541 002c movel %d1,%a2@(44) <== NOT EXECUTED
_Timestamp_To_timespec( &src->total_wall_time, &dst->total_wall_time );
4bdfe: 2028 0084 movel %a0@(132),%d0 <== NOT EXECUTED
4be02: 2228 0088 movel %a0@(136),%d1 <== NOT EXECUTED
4be06: 2540 0030 movel %d0,%a2@(48) <== NOT EXECUTED
4be0a: 2541 0034 movel %d1,%a2@(52) <== NOT EXECUTED
dst->min_wall_time = src->min_wall_time;
dst->max_wall_time = src->max_wall_time;
dst->total_wall_time = src->total_wall_time;
#endif
_Thread_Enable_dispatch();
4be0e: 4eb9 0004 8dd6 jsr 48dd6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
4be14: 4280 clrl %d0 <== NOT EXECUTED
4be16: 6006 bras 4be1e <rtems_rate_monotonic_get_statistics+0xaa><== NOT EXECUTED
Rate_monotonic_Control *the_period;
rtems_rate_monotonic_period_statistics *dst;
Rate_monotonic_Statistics *src;
if ( !statistics )
return RTEMS_INVALID_ADDRESS;
4be18: 7009 moveq #9,%d0 <== NOT EXECUTED
4be1a: 6002 bras 4be1e <rtems_rate_monotonic_get_statistics+0xaa><== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4be1c: 7004 moveq #4,%d0 <== NOT EXECUTED
}
4be1e: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
4be22: 4e5e unlk %fp <== NOT EXECUTED
...
0004be28 <rtems_rate_monotonic_get_status>:
rtems_status_code rtems_rate_monotonic_get_status(
rtems_id id,
rtems_rate_monotonic_period_status *status
)
{
4be28: 4e56 ffec linkw %fp,#-20 <== NOT EXECUTED
4be2c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4be2e: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
Objects_Locations location;
Rate_monotonic_Period_time_t since_last_period;
Rate_monotonic_Control *the_period;
bool valid_status;
if ( !status )
4be32: 4a8a tstl %a2 <== NOT EXECUTED
4be34: 6700 0092 beqw 4bec8 <rtems_rate_monotonic_get_status+0xa0><== NOT EXECUTED
4be38: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4be3c: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4be40: 4879 0005 f68c pea 5f68c <_Rate_monotonic_Information> <== NOT EXECUTED
4be46: 4eb9 0004 82fc jsr 482fc <_Objects_Get> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
the_period = _Rate_monotonic_Get( id, &location );
switch ( location ) {
4be4c: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4be50: 2040 moveal %d0,%a0 <== NOT EXECUTED
4be52: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4be56: 6674 bnes 4becc <rtems_rate_monotonic_get_status+0xa4><== NOT EXECUTED
case OBJECTS_LOCAL:
status->owner = the_period->owner->Object.id;
4be58: 2268 0040 moveal %a0@(64),%a1 <== NOT EXECUTED
4be5c: 24a9 0008 movel %a1@(8),%a2@ <== NOT EXECUTED
status->state = the_period->state;
4be60: 2028 0038 movel %a0@(56),%d0 <== NOT EXECUTED
4be64: 2540 0004 movel %d0,%a2@(4) <== NOT EXECUTED
/*
* If the period is inactive, there is no information.
*/
if ( status->state == RATE_MONOTONIC_INACTIVE ) {
4be68: 6612 bnes 4be7c <rtems_rate_monotonic_get_status+0x54><== NOT EXECUTED
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
_Timespec_Set_to_zero( &status->since_last_period );
4be6a: 42aa 0008 clrl %a2@(8) <== NOT EXECUTED
4be6e: 42aa 000c clrl %a2@(12) <== NOT EXECUTED
_Timespec_Set_to_zero( &status->executed_since_last_period );
4be72: 42aa 0010 clrl %a2@(16) <== NOT EXECUTED
4be76: 42aa 0014 clrl %a2@(20) <== NOT EXECUTED
4be7a: 6042 bras 4bebe <rtems_rate_monotonic_get_status+0x96><== NOT EXECUTED
} else {
/*
* Grab the current status.
*/
valid_status =
4be7c: 486e fff4 pea %fp@(-12) <== NOT EXECUTED
4be80: 486e ffec pea %fp@(-20) <== NOT EXECUTED
4be84: 2f08 movel %a0,%sp@- <== NOT EXECUTED
4be86: 4eb9 0004 6120 jsr 46120 <_Rate_monotonic_Get_status> <== NOT EXECUTED
_Rate_monotonic_Get_status(
the_period, &since_last_period, &executed
);
if (!valid_status) {
4be8c: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4be90: 4a00 tstb %d0 <== NOT EXECUTED
4be92: 660a bnes 4be9e <rtems_rate_monotonic_get_status+0x76><== NOT EXECUTED
_Thread_Enable_dispatch();
4be94: 4eb9 0004 8dd6 jsr 48dd6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_NOT_DEFINED;
4be9a: 700b moveq #11,%d0 <== NOT EXECUTED
4be9c: 6030 bras 4bece <rtems_rate_monotonic_get_status+0xa6><== NOT EXECUTED
}
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
_Timestamp_To_timespec(
4be9e: 202e ffec movel %fp@(-20),%d0 <== NOT EXECUTED
4bea2: 222e fff0 movel %fp@(-16),%d1 <== NOT EXECUTED
4bea6: 2540 0008 movel %d0,%a2@(8) <== NOT EXECUTED
4beaa: 2541 000c movel %d1,%a2@(12) <== NOT EXECUTED
&since_last_period, &status->since_last_period
);
_Timestamp_To_timespec(
4beae: 202e fff4 movel %fp@(-12),%d0 <== NOT EXECUTED
4beb2: 222e fff8 movel %fp@(-8),%d1 <== NOT EXECUTED
4beb6: 2540 0010 movel %d0,%a2@(16) <== NOT EXECUTED
4beba: 2541 0014 movel %d1,%a2@(20) <== NOT EXECUTED
status->since_last_period = since_last_period;
status->executed_since_last_period = executed;
#endif
}
_Thread_Enable_dispatch();
4bebe: 4eb9 0004 8dd6 jsr 48dd6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
4bec4: 4280 clrl %d0 <== NOT EXECUTED
4bec6: 6006 bras 4bece <rtems_rate_monotonic_get_status+0xa6><== NOT EXECUTED
Rate_monotonic_Period_time_t since_last_period;
Rate_monotonic_Control *the_period;
bool valid_status;
if ( !status )
return RTEMS_INVALID_ADDRESS;
4bec8: 7009 moveq #9,%d0 <== NOT EXECUTED
4beca: 6002 bras 4bece <rtems_rate_monotonic_get_status+0xa6><== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4becc: 7004 moveq #4,%d0 <== NOT EXECUTED
}
4bece: 246e ffe8 moveal %fp@(-24),%a2 <== NOT EXECUTED
4bed2: 4e5e unlk %fp <== NOT EXECUTED
...
000460f4 <rtems_rate_monotonic_ident>:
rtems_status_code rtems_rate_monotonic_ident(
rtems_name name,
rtems_id *id
)
{
460f4: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
Objects_Name_or_id_lookup_errors status;
status = _Objects_Name_to_id_u32(
460f8: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
460fc: 2f3c 7fff ffff movel #2147483647,%sp@- <== NOT EXECUTED
46102: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
46106: 4879 0005 f68c pea 5f68c <_Rate_monotonic_Information> <== NOT EXECUTED
4610c: 4eb9 0004 8488 jsr 48488 <_Objects_Name_to_id_u32> <== NOT EXECUTED
OBJECTS_SEARCH_LOCAL_NODE,
id
);
return _Status_Object_name_errors_to_status[ status ];
}
46112: 41f9 0005 cef6 lea 5cef6 <_Status_Object_name_errors_to_status>,%a0<== NOT EXECUTED
46118: 4e5e unlk %fp <== NOT EXECUTED
4611a: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0 <== NOT EXECUTED
0004632a <rtems_rate_monotonic_period>:
rtems_status_code rtems_rate_monotonic_period(
rtems_id id,
rtems_interval length
)
{
4632a: 4e56 ffec linkw %fp,#-20 <== NOT EXECUTED
4632e: 48d7 041c moveml %d2-%d4/%a2,%sp@ <== NOT EXECUTED
Objects_Id id,
Objects_Locations *location
)
{
return (Rate_monotonic_Control *)
_Objects_Get( &_Rate_monotonic_Information, id, location );
46332: 486e fffc pea %fp@(-4) <== NOT EXECUTED
46336: 262e 0008 movel %fp@(8),%d3 <== NOT EXECUTED
4633a: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4633c: 4879 0005 f68c pea 5f68c <_Rate_monotonic_Information> <== NOT EXECUTED
46342: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
46346: 4eb9 0004 82fc jsr 482fc <_Objects_Get> <== NOT EXECUTED
rtems_rate_monotonic_period_states local_state;
ISR_Level level;
the_period = _Rate_monotonic_Get( id, &location );
switch ( location ) {
4634c: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
46350: 2440 moveal %d0,%a2 <== NOT EXECUTED
46352: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
46356: 6600 0148 bnew 464a0 <rtems_rate_monotonic_period+0x176><== NOT EXECUTED
case OBJECTS_LOCAL:
if ( !_Thread_Is_executing( the_period->owner ) ) {
4635a: 2039 0005 fc10 movel 5fc10 <_Per_CPU_Information+0xc>,%d0 <== NOT EXECUTED
46360: b0aa 0040 cmpl %a2@(64),%d0 <== NOT EXECUTED
46364: 670c beqs 46372 <rtems_rate_monotonic_period+0x48><== NOT EXECUTED
_Thread_Enable_dispatch();
46366: 4eb9 0004 8dd6 jsr 48dd6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_NOT_OWNER_OF_RESOURCE;
4636c: 7417 moveq #23,%d2 <== NOT EXECUTED
4636e: 6000 0132 braw 464a2 <rtems_rate_monotonic_period+0x178><== NOT EXECUTED
}
if ( length == RTEMS_PERIOD_STATUS ) {
46372: 4a82 tstl %d2 <== NOT EXECUTED
46374: 6622 bnes 46398 <rtems_rate_monotonic_period+0x6e><== NOT EXECUTED
switch ( the_period->state ) {
46376: 202a 0038 movel %a2@(56),%d0 <== NOT EXECUTED
4637a: 7204 moveq #4,%d1 <== NOT EXECUTED
4637c: b280 cmpl %d0,%d1 <== NOT EXECUTED
4637e: 650c bcss 4638c <rtems_rate_monotonic_period+0x62><== NOT EXECUTED
46380: 41f9 0005 cd16 lea 5cd16 <CSWTCH.2>,%a0 <== NOT EXECUTED
46386: 2430 0c00 movel %a0@(00000000,%d0:l:4),%d2 <== NOT EXECUTED
4638a: 6002 bras 4638e <rtems_rate_monotonic_period+0x64><== NOT EXECUTED
4638c: 4282 clrl %d2 <== NOT EXECUTED
case RATE_MONOTONIC_ACTIVE:
default: /* unreached -- only to remove warnings */
return_value = RTEMS_SUCCESSFUL;
break;
}
_Thread_Enable_dispatch();
4638e: 4eb9 0004 8dd6 jsr 48dd6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return( return_value );
46394: 6000 010c braw 464a2 <rtems_rate_monotonic_period+0x178><== NOT EXECUTED
}
_ISR_Disable( level );
46398: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
4639e: 40c4 movew %sr,%d4 <== NOT EXECUTED
463a0: 8084 orl %d4,%d0 <== NOT EXECUTED
463a2: 46c0 movew %d0,%sr <== NOT EXECUTED
if ( the_period->state == RATE_MONOTONIC_INACTIVE ) {
463a4: 202a 0038 movel %a2@(56),%d0 <== NOT EXECUTED
463a8: 664a bnes 463f4 <rtems_rate_monotonic_period+0xca><== NOT EXECUTED
_ISR_Enable( level );
463aa: 46c4 movew %d4,%sr <== NOT EXECUTED
/*
* Baseline statistics information for the beginning of a period.
*/
_Rate_monotonic_Initiate_statistics( the_period );
463ac: 2f0a movel %a2,%sp@- <== NOT EXECUTED
463ae: 4eb9 0004 61be jsr 461be <_Rate_monotonic_Initiate_statistics><== NOT EXECUTED
the_period->state = RATE_MONOTONIC_ACTIVE;
463b4: 7002 moveq #2,%d0 <== NOT EXECUTED
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
the_watchdog->routine = routine;
463b6: 223c 0004 66ec movel #288492,%d1 <== NOT EXECUTED
463bc: 2540 0038 movel %d0,%a2@(56) <== NOT EXECUTED
463c0: 2541 002c movel %d1,%a2@(44) <== NOT EXECUTED
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
463c4: 42aa 0018 clrl %a2@(24) <== NOT EXECUTED
the_watchdog->routine = routine;
the_watchdog->id = id;
463c8: 2543 0030 movel %d3,%a2@(48) <== NOT EXECUTED
the_watchdog->user_data = user_data;
463cc: 42aa 0034 clrl %a2@(52) <== NOT EXECUTED
_Rate_monotonic_Timeout,
id,
NULL
);
the_period->next_length = length;
463d0: 2542 003c movel %d2,%a2@(60) <== NOT EXECUTED
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
463d4: 2542 001c movel %d2,%a2@(28) <== NOT EXECUTED
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
463d8: 486a 0010 pea %a2@(16) <== NOT EXECUTED
463dc: 4879 0005 f862 pea 5f862 <_Watchdog_Ticks_chain> <== NOT EXECUTED
463e2: 4eb9 0004 9c40 jsr 49c40 <_Watchdog_Insert> <== NOT EXECUTED
_Watchdog_Insert_ticks( &the_period->Timer, length );
_Thread_Enable_dispatch();
463e8: 4eb9 0004 8dd6 jsr 48dd6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
463ee: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
463f2: 606c bras 46460 <rtems_rate_monotonic_period+0x136><== NOT EXECUTED
}
if ( the_period->state == RATE_MONOTONIC_ACTIVE ) {
463f4: 7202 moveq #2,%d1 <== NOT EXECUTED
463f6: b280 cmpl %d0,%d1 <== NOT EXECUTED
463f8: 666a bnes 46464 <rtems_rate_monotonic_period+0x13a><== NOT EXECUTED
/*
* Update statistics from the concluding period.
*/
_Rate_monotonic_Update_statistics( the_period );
463fa: 2f0a movel %a2,%sp@- <== NOT EXECUTED
463fc: 4eb9 0004 6236 jsr 46236 <_Rate_monotonic_Update_statistics><== NOT EXECUTED
/*
* This tells the _Rate_monotonic_Timeout that this task is
* in the process of blocking on the period and that we
* may be changing the length of the next period.
*/
the_period->state = RATE_MONOTONIC_OWNER_IS_BLOCKING;
46402: 7001 moveq #1,%d0 <== NOT EXECUTED
the_period->next_length = length;
46404: 2542 003c movel %d2,%a2@(60) <== NOT EXECUTED
/*
* This tells the _Rate_monotonic_Timeout that this task is
* in the process of blocking on the period and that we
* may be changing the length of the next period.
*/
the_period->state = RATE_MONOTONIC_OWNER_IS_BLOCKING;
46408: 2540 0038 movel %d0,%a2@(56) <== NOT EXECUTED
the_period->next_length = length;
_ISR_Enable( level );
4640c: 46c4 movew %d4,%sr <== NOT EXECUTED
_Thread_Executing->Wait.id = the_period->Object.id;
4640e: 2079 0005 fc10 moveal 5fc10 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
46414: 216a 0008 0020 movel %a2@(8),%a0@(32) <== NOT EXECUTED
_Thread_Set_state( _Thread_Executing, STATES_WAITING_FOR_PERIOD );
4641a: 4878 4000 pea 4000 <D_MAX_EXP+0x3801> <== NOT EXECUTED
4641e: 2f08 movel %a0,%sp@- <== NOT EXECUTED
46420: 4eb9 0004 95ac jsr 495ac <_Thread_Set_state> <== NOT EXECUTED
/*
* Did the watchdog timer expire while we were actually blocking
* on it?
*/
_ISR_Disable( level );
46426: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
4642c: 40c1 movew %sr,%d1 <== NOT EXECUTED
4642e: 8081 orl %d1,%d0 <== NOT EXECUTED
46430: 46c0 movew %d0,%sr <== NOT EXECUTED
local_state = the_period->state;
the_period->state = RATE_MONOTONIC_ACTIVE;
46432: 7402 moveq #2,%d2 <== NOT EXECUTED
/*
* Did the watchdog timer expire while we were actually blocking
* on it?
*/
_ISR_Disable( level );
local_state = the_period->state;
46434: 202a 0038 movel %a2@(56),%d0 <== NOT EXECUTED
the_period->state = RATE_MONOTONIC_ACTIVE;
46438: 2542 0038 movel %d2,%a2@(56) <== NOT EXECUTED
_ISR_Enable( level );
4643c: 46c1 movew %d1,%sr <== NOT EXECUTED
/*
* If it did, then we want to unblock ourself and continue as
* if nothing happen. The period was reset in the timeout routine.
*/
if ( local_state == RATE_MONOTONIC_EXPIRED_WHILE_BLOCKING )
4643e: 7203 moveq #3,%d1 <== NOT EXECUTED
46440: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
46444: b280 cmpl %d0,%d1 <== NOT EXECUTED
46446: 6612 bnes 4645a <rtems_rate_monotonic_period+0x130><== NOT EXECUTED
_Thread_Clear_state( _Thread_Executing, STATES_WAITING_FOR_PERIOD );
46448: 4878 4000 pea 4000 <D_MAX_EXP+0x3801> <== NOT EXECUTED
4644c: 2f39 0005 fc10 movel 5fc10 <_Per_CPU_Information+0xc>,%sp@-<== NOT EXECUTED
46452: 4eb9 0004 8a78 jsr 48a78 <_Thread_Clear_state> <== NOT EXECUTED
46458: 508f addql #8,%sp <== NOT EXECUTED
_Thread_Enable_dispatch();
4645a: 4eb9 0004 8dd6 jsr 48dd6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
46460: 4282 clrl %d2 <== NOT EXECUTED
46462: 603e bras 464a2 <rtems_rate_monotonic_period+0x178><== NOT EXECUTED
}
if ( the_period->state == RATE_MONOTONIC_EXPIRED ) {
46464: 7204 moveq #4,%d1 <== NOT EXECUTED
46466: b280 cmpl %d0,%d1 <== NOT EXECUTED
46468: 6636 bnes 464a0 <rtems_rate_monotonic_period+0x176><== NOT EXECUTED
/*
* Update statistics from the concluding period
*/
_Rate_monotonic_Update_statistics( the_period );
4646a: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4646c: 4eb9 0004 6236 jsr 46236 <_Rate_monotonic_Update_statistics><== NOT EXECUTED
_ISR_Enable( level );
46472: 46c4 movew %d4,%sr <== NOT EXECUTED
the_period->state = RATE_MONOTONIC_ACTIVE;
46474: 7002 moveq #2,%d0 <== NOT EXECUTED
the_period->next_length = length;
46476: 2542 003c movel %d2,%a2@(60) <== NOT EXECUTED
*/
_Rate_monotonic_Update_statistics( the_period );
_ISR_Enable( level );
the_period->state = RATE_MONOTONIC_ACTIVE;
4647a: 2540 0038 movel %d0,%a2@(56) <== NOT EXECUTED
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
4647e: 2542 001c movel %d2,%a2@(28) <== NOT EXECUTED
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
46482: 486a 0010 pea %a2@(16) <== NOT EXECUTED
the_period->next_length = length;
_Watchdog_Insert_ticks( &the_period->Timer, length );
_Thread_Enable_dispatch();
return RTEMS_TIMEOUT;
46486: 7406 moveq #6,%d2 <== NOT EXECUTED
46488: 4879 0005 f862 pea 5f862 <_Watchdog_Ticks_chain> <== NOT EXECUTED
4648e: 4eb9 0004 9c40 jsr 49c40 <_Watchdog_Insert> <== NOT EXECUTED
the_period->state = RATE_MONOTONIC_ACTIVE;
the_period->next_length = length;
_Watchdog_Insert_ticks( &the_period->Timer, length );
_Thread_Enable_dispatch();
46494: 4eb9 0004 8dd6 jsr 48dd6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_TIMEOUT;
4649a: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4649e: 6002 bras 464a2 <rtems_rate_monotonic_period+0x178><== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
464a0: 7404 moveq #4,%d2 <== NOT EXECUTED
}
464a2: 2002 movel %d2,%d0 <== NOT EXECUTED
464a4: 4cee 041c ffec moveml %fp@(-20),%d2-%d4/%a2 <== NOT EXECUTED
464aa: 4e5e unlk %fp <== NOT EXECUTED
...
0004662c <rtems_rate_monotonic_report_statistics>:
void rtems_rate_monotonic_report_statistics( void )
{
4662c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
rtems_rate_monotonic_report_statistics_with_plugin( NULL, printk_plugin );
46630: 4879 0004 b3ec pea 4b3ec <printk_plugin> <== NOT EXECUTED
46636: 42a7 clrl %sp@- <== NOT EXECUTED
46638: 4eb9 0004 64b0 jsr 464b0 <rtems_rate_monotonic_report_statistics_with_plugin><== NOT EXECUTED
4663e: 508f addql #8,%sp <== NOT EXECUTED
}
46640: 4e5e unlk %fp <== NOT EXECUTED
000464b0 <rtems_rate_monotonic_report_statistics_with_plugin>:
*/
void rtems_rate_monotonic_report_statistics_with_plugin(
void *context,
rtems_printk_plugin_t print
)
{
464b0: 4e56 ff78 linkw %fp,#-136 <== NOT EXECUTED
464b4: 48d7 3cfc moveml %d2-%d7/%a2-%a5,%sp@ <== NOT EXECUTED
464b8: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
464bc: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
rtems_id id;
rtems_rate_monotonic_period_statistics the_stats;
rtems_rate_monotonic_period_status the_status;
char name[5];
if ( !print )
464c0: 4a8a tstl %a2 <== NOT EXECUTED
464c2: 6700 015e beqw 46622 <rtems_rate_monotonic_report_statistics_with_plugin+0x172><== NOT EXECUTED
return;
(*print)( context, "Period information by period\n" );
464c6: 4879 0005 cd2a pea 5cd2a <CSWTCH.2+0x14> <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
status = rtems_rate_monotonic_get_status( id, &the_status );
if ( status != RTEMS_SUCCESSFUL )
continue;
#else
(void) rtems_rate_monotonic_get_status( id, &the_status );
464cc: 2e0e movel %fp,%d7 <== NOT EXECUTED
#endif
rtems_object_get_name( the_status.owner, sizeof(name), name );
464ce: 2a0e movel %fp,%d5 <== NOT EXECUTED
struct timespec cpu_average;
struct timespec *min_cpu = &the_stats.min_cpu_time;
struct timespec *max_cpu = &the_stats.max_cpu_time;
struct timespec *total_cpu = &the_stats.total_cpu_time;
_Timespec_Divide_by_integer( total_cpu, the_stats.count, &cpu_average );
464d0: 280e movel %fp,%d4 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
status = rtems_rate_monotonic_get_status( id, &the_status );
if ( status != RTEMS_SUCCESSFUL )
continue;
#else
(void) rtems_rate_monotonic_get_status( id, &the_status );
464d2: 0687 ffff ffda addil #-38,%d7 <== NOT EXECUTED
464d8: 4bf9 0004 be28 lea 4be28 <rtems_rate_monotonic_get_status>,%a5<== NOT EXECUTED
#endif
rtems_object_get_name( the_status.owner, sizeof(name), name );
464de: 5b85 subql #5,%d5 <== NOT EXECUTED
464e0: 49f9 0004 67b0 lea 467b0 <rtems_object_get_name>,%a4 <== NOT EXECUTED
struct timespec cpu_average;
struct timespec *min_cpu = &the_stats.min_cpu_time;
struct timespec *max_cpu = &the_stats.max_cpu_time;
struct timespec *total_cpu = &the_stats.total_cpu_time;
_Timespec_Divide_by_integer( total_cpu, the_stats.count, &cpu_average );
464e6: 0684 ffff fff2 addil #-14,%d4 <== NOT EXECUTED
464ec: 47f9 0004 989c lea 4989c <_Timespec_Divide_by_integer>,%a3 <== NOT EXECUTED
char name[5];
if ( !print )
return;
(*print)( context, "Period information by period\n" );
464f2: 2f02 movel %d2,%sp@- <== NOT EXECUTED
464f4: 4e92 jsr %a2@ <== NOT EXECUTED
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
(*print)( context, "--- CPU times are in seconds ---\n" );
464f6: 4879 0005 cd48 pea 5cd48 <CSWTCH.2+0x32> <== NOT EXECUTED
464fc: 2f02 movel %d2,%sp@- <== NOT EXECUTED
464fe: 4e92 jsr %a2@ <== NOT EXECUTED
(*print)( context, "--- Wall times are in seconds ---\n" );
46500: 4879 0005 cd6a pea 5cd6a <CSWTCH.2+0x54> <== NOT EXECUTED
46506: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46508: 4e92 jsr %a2@ <== NOT EXECUTED
Be sure to test the various cases.
(*print)( context,"\
1234567890123456789012345678901234567890123456789012345678901234567890123456789\
\n");
*/
(*print)( context, " ID OWNER COUNT MISSED "
4650a: 4879 0005 cd8d pea 5cd8d <CSWTCH.2+0x77> <== NOT EXECUTED
46510: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46512: 4e92 jsr %a2@ <== NOT EXECUTED
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
" "
#endif
" WALL TIME\n"
);
(*print)( context, " "
46514: 4fef 001c lea %sp@(28),%sp <== NOT EXECUTED
46518: 2ebc 0005 cdd8 movel #380376,%sp@ <== NOT EXECUTED
4651e: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46520: 4e92 jsr %a2@ <== NOT EXECUTED
/*
* Cycle through all possible ids and try to report on each one. If it
* is a period that is inactive, we just get an error back. No big deal.
*/
for ( id=_Rate_monotonic_Information.minimum_id ;
46522: 2639 0005 f692 movel 5f692 <_Rate_monotonic_Information+0x6>,%d3<== NOT EXECUTED
46528: 508f addql #8,%sp <== NOT EXECUTED
4652a: 6000 00ec braw 46618 <rtems_rate_monotonic_report_statistics_with_plugin+0x168><== NOT EXECUTED
id <= _Rate_monotonic_Information.maximum_id ;
id++ ) {
status = rtems_rate_monotonic_get_statistics( id, &the_stats );
4652e: 486e ffa2 pea %fp@(-94) <== NOT EXECUTED
46532: 2f03 movel %d3,%sp@- <== NOT EXECUTED
46534: 4eb9 0004 bd74 jsr 4bd74 <rtems_rate_monotonic_get_statistics><== NOT EXECUTED
if ( status != RTEMS_SUCCESSFUL )
4653a: 508f addql #8,%sp <== NOT EXECUTED
4653c: 4a80 tstl %d0 <== NOT EXECUTED
4653e: 6600 00d6 bnew 46616 <rtems_rate_monotonic_report_statistics_with_plugin+0x166><== NOT EXECUTED
#if defined(RTEMS_DEBUG)
status = rtems_rate_monotonic_get_status( id, &the_status );
if ( status != RTEMS_SUCCESSFUL )
continue;
#else
(void) rtems_rate_monotonic_get_status( id, &the_status );
46542: 2f07 movel %d7,%sp@- <== NOT EXECUTED
46544: 2f03 movel %d3,%sp@- <== NOT EXECUTED
46546: 4e95 jsr %a5@ <== NOT EXECUTED
#endif
rtems_object_get_name( the_status.owner, sizeof(name), name );
46548: 2f05 movel %d5,%sp@- <== NOT EXECUTED
4654a: 4878 0005 pea 5 <COMPARE> <== NOT EXECUTED
4654e: 2f2e ffda movel %fp@(-38),%sp@- <== NOT EXECUTED
46552: 4e94 jsr %a4@ <== NOT EXECUTED
/*
* Print part of report line that is not dependent on granularity
*/
(*print)( context,
46554: 2f2e ffa6 movel %fp@(-90),%sp@- <== NOT EXECUTED
46558: 2f2e ffa2 movel %fp@(-94),%sp@- <== NOT EXECUTED
4655c: 2f05 movel %d5,%sp@- <== NOT EXECUTED
4655e: 2f03 movel %d3,%sp@- <== NOT EXECUTED
46560: 4879 0005 ce24 pea 5ce24 <CSWTCH.2+0x10e> <== NOT EXECUTED
46566: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46568: 4e92 jsr %a2@ <== NOT EXECUTED
);
/*
* If the count is zero, don't print statistics
*/
if (the_stats.count == 0) {
4656a: 202e ffa2 movel %fp@(-94),%d0 <== NOT EXECUTED
4656e: 4fef 002c lea %sp@(44),%sp <== NOT EXECUTED
46572: 6610 bnes 46584 <rtems_rate_monotonic_report_statistics_with_plugin+0xd4><== NOT EXECUTED
(*print)( context, "\n" );
46574: 4879 0005 cc4e pea 5cc4e <rtems_status_assoc+0x19e> <== NOT EXECUTED
4657a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4657c: 4e92 jsr %a2@ <== NOT EXECUTED
continue;
4657e: 508f addql #8,%sp <== NOT EXECUTED
46580: 6000 0094 braw 46616 <rtems_rate_monotonic_report_statistics_with_plugin+0x166><== NOT EXECUTED
struct timespec cpu_average;
struct timespec *min_cpu = &the_stats.min_cpu_time;
struct timespec *max_cpu = &the_stats.max_cpu_time;
struct timespec *total_cpu = &the_stats.total_cpu_time;
_Timespec_Divide_by_integer( total_cpu, the_stats.count, &cpu_average );
46584: 2f04 movel %d4,%sp@- <== NOT EXECUTED
46586: 2f00 movel %d0,%sp@- <== NOT EXECUTED
46588: 486e ffba pea %fp@(-70) <== NOT EXECUTED
4658c: 4e93 jsr %a3@ <== NOT EXECUTED
(*print)( context,
4658e: 202e fff6 movel %fp@(-10),%d0 <== NOT EXECUTED
46592: 223c 0000 03e8 movel #1000,%d1 <== NOT EXECUTED
46598: 4c41 0800 remsl %d1,%d0,%d0 <== NOT EXECUTED
4659c: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4659e: 202e ffb6 movel %fp@(-74),%d0 <== NOT EXECUTED
465a2: 2f2e fff2 movel %fp@(-14),%sp@- <== NOT EXECUTED
465a6: 4c41 0800 remsl %d1,%d0,%d0 <== NOT EXECUTED
465aa: 2f00 movel %d0,%sp@- <== NOT EXECUTED
465ac: 202e ffae movel %fp@(-82),%d0 <== NOT EXECUTED
465b0: 2f2e ffb2 movel %fp@(-78),%sp@- <== NOT EXECUTED
465b4: 4c41 0800 remsl %d1,%d0,%d0 <== NOT EXECUTED
465b8: 2f00 movel %d0,%sp@- <== NOT EXECUTED
465ba: 2f2e ffaa movel %fp@(-86),%sp@- <== NOT EXECUTED
465be: 4879 0005 ce3b pea 5ce3b <CSWTCH.2+0x125> <== NOT EXECUTED
465c4: 2f02 movel %d2,%sp@- <== NOT EXECUTED
465c6: 4e92 jsr %a2@ <== NOT EXECUTED
struct timespec wall_average;
struct timespec *min_wall = &the_stats.min_wall_time;
struct timespec *max_wall = &the_stats.max_wall_time;
struct timespec *total_wall = &the_stats.total_wall_time;
_Timespec_Divide_by_integer(total_wall, the_stats.count, &wall_average);
465c8: 4fef 0028 lea %sp@(40),%sp <== NOT EXECUTED
465cc: 2e84 movel %d4,%sp@ <== NOT EXECUTED
465ce: 2f2e ffa2 movel %fp@(-94),%sp@- <== NOT EXECUTED
465d2: 486e ffd2 pea %fp@(-46) <== NOT EXECUTED
465d6: 4e93 jsr %a3@ <== NOT EXECUTED
(*print)( context,
465d8: 202e fff6 movel %fp@(-10),%d0 <== NOT EXECUTED
465dc: 223c 0000 03e8 movel #1000,%d1 <== NOT EXECUTED
465e2: 4c41 0800 remsl %d1,%d0,%d0 <== NOT EXECUTED
465e6: 2f00 movel %d0,%sp@- <== NOT EXECUTED
465e8: 202e ffce movel %fp@(-50),%d0 <== NOT EXECUTED
465ec: 2f2e fff2 movel %fp@(-14),%sp@- <== NOT EXECUTED
465f0: 4c41 0800 remsl %d1,%d0,%d0 <== NOT EXECUTED
465f4: 2f00 movel %d0,%sp@- <== NOT EXECUTED
465f6: 202e ffc6 movel %fp@(-58),%d0 <== NOT EXECUTED
465fa: 2f2e ffca movel %fp@(-54),%sp@- <== NOT EXECUTED
465fe: 4c41 0800 remsl %d1,%d0,%d0 <== NOT EXECUTED
46602: 2f00 movel %d0,%sp@- <== NOT EXECUTED
46604: 2f2e ffc2 movel %fp@(-62),%sp@- <== NOT EXECUTED
46608: 4879 0005 ce5a pea 5ce5a <CSWTCH.2+0x144> <== NOT EXECUTED
4660e: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46610: 4e92 jsr %a2@ <== NOT EXECUTED
46612: 4fef 002c lea %sp@(44),%sp <== NOT EXECUTED
* Cycle through all possible ids and try to report on each one. If it
* is a period that is inactive, we just get an error back. No big deal.
*/
for ( id=_Rate_monotonic_Information.minimum_id ;
id <= _Rate_monotonic_Information.maximum_id ;
id++ ) {
46616: 5283 addql #1,%d3 <== NOT EXECUTED
/*
* Cycle through all possible ids and try to report on each one. If it
* is a period that is inactive, we just get an error back. No big deal.
*/
for ( id=_Rate_monotonic_Information.minimum_id ;
46618: b6b9 0005 f696 cmpl 5f696 <_Rate_monotonic_Information+0xa>,%d3<== NOT EXECUTED
4661e: 6300 ff0e blsw 4652e <rtems_rate_monotonic_report_statistics_with_plugin+0x7e><== NOT EXECUTED
the_stats.min_wall_time, the_stats.max_wall_time, ival_wall, fval_wall
);
#endif
}
}
}
46622: 4cee 3cfc ff78 moveml %fp@(-136),%d2-%d7/%a2-%a5 <== NOT EXECUTED
46628: 4e5e unlk %fp <== NOT EXECUTED
00046644 <rtems_rate_monotonic_reset_all_statistics>:
/*
* rtems_rate_monotonic_reset_all_statistics
*/
void rtems_rate_monotonic_reset_all_statistics( void )
{
46644: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
46648: 2039 0005 f782 movel 5f782 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
4664e: 5280 addql #1,%d0 <== NOT EXECUTED
46650: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46652: 23c0 0005 f782 movel %d0,5f782 <_Thread_Dispatch_disable_level><== NOT EXECUTED
46658: 2f02 movel %d2,%sp@- <== NOT EXECUTED
/*
* Cycle through all possible ids and try to reset each one. If it
* is a period that is inactive, we just get an error back. No big deal.
*/
for ( id=_Rate_monotonic_Information.minimum_id ;
4665a: 2439 0005 f692 movel 5f692 <_Rate_monotonic_Information+0x6>,%d2<== NOT EXECUTED
id <= _Rate_monotonic_Information.maximum_id ;
id++ ) {
(void) rtems_rate_monotonic_reset_statistics( id );
46660: 45f9 0004 6688 lea 46688 <rtems_rate_monotonic_reset_statistics>,%a2<== NOT EXECUTED
/*
* Cycle through all possible ids and try to reset each one. If it
* is a period that is inactive, we just get an error back. No big deal.
*/
for ( id=_Rate_monotonic_Information.minimum_id ;
46666: 6008 bras 46670 <rtems_rate_monotonic_reset_all_statistics+0x2c><== NOT EXECUTED
id <= _Rate_monotonic_Information.maximum_id ;
id++ ) {
(void) rtems_rate_monotonic_reset_statistics( id );
46668: 2f02 movel %d2,%sp@- <== NOT EXECUTED
* Cycle through all possible ids and try to reset each one. If it
* is a period that is inactive, we just get an error back. No big deal.
*/
for ( id=_Rate_monotonic_Information.minimum_id ;
id <= _Rate_monotonic_Information.maximum_id ;
id++ ) {
4666a: 5282 addql #1,%d2 <== NOT EXECUTED
(void) rtems_rate_monotonic_reset_statistics( id );
4666c: 4e92 jsr %a2@ <== NOT EXECUTED
* Cycle through all possible ids and try to reset each one. If it
* is a period that is inactive, we just get an error back. No big deal.
*/
for ( id=_Rate_monotonic_Information.minimum_id ;
id <= _Rate_monotonic_Information.maximum_id ;
id++ ) {
4666e: 588f addql #4,%sp <== NOT EXECUTED
/*
* Cycle through all possible ids and try to reset each one. If it
* is a period that is inactive, we just get an error back. No big deal.
*/
for ( id=_Rate_monotonic_Information.minimum_id ;
46670: b4b9 0005 f696 cmpl 5f696 <_Rate_monotonic_Information+0xa>,%d2<== NOT EXECUTED
46676: 63f0 blss 46668 <rtems_rate_monotonic_reset_all_statistics+0x24><== NOT EXECUTED
/*
* Done so exit thread dispatching disabled critical section.
*/
_Thread_Enable_dispatch();
}
46678: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
4667c: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
46680: 4e5e unlk %fp <== NOT EXECUTED
}
/*
* Done so exit thread dispatching disabled critical section.
*/
_Thread_Enable_dispatch();
46682: 4ef9 0004 8dd6 jmp 48dd6 <_Thread_Enable_dispatch> <== NOT EXECUTED
00046688 <rtems_rate_monotonic_reset_statistics>:
*/
rtems_status_code rtems_rate_monotonic_reset_statistics(
rtems_id id
)
{
46688: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
4668c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4668e: 486e fffc pea %fp@(-4) <== NOT EXECUTED
46692: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
46696: 4879 0005 f68c pea 5f68c <_Rate_monotonic_Information> <== NOT EXECUTED
4669c: 4eb9 0004 82fc jsr 482fc <_Objects_Get> <== NOT EXECUTED
Objects_Locations location;
Rate_monotonic_Control *the_period;
the_period = _Rate_monotonic_Get( id, &location );
switch ( location ) {
466a2: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
466a6: 2440 moveal %d0,%a2 <== NOT EXECUTED
466a8: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
466ac: 6634 bnes 466e2 <rtems_rate_monotonic_reset_statistics+0x5a><== NOT EXECUTED
case OBJECTS_LOCAL:
_Rate_monotonic_Reset_statistics( the_period );
466ae: 4878 0038 pea 38 <DBL_MANT_DIG+0x3> <== NOT EXECUTED
466b2: 42a7 clrl %sp@- <== NOT EXECUTED
466b4: 486a 0054 pea %a2@(84) <== NOT EXECUTED
466b8: 4eb9 0004 e974 jsr 4e974 <memset> <== NOT EXECUTED
466be: 203c 7fff ffff movel #2147483647,%d0 <== NOT EXECUTED
466c4: 2540 005c movel %d0,%a2@(92) <== NOT EXECUTED
466c8: 2540 0060 movel %d0,%a2@(96) <== NOT EXECUTED
466cc: 2540 0074 movel %d0,%a2@(116) <== NOT EXECUTED
466d0: 2540 0078 movel %d0,%a2@(120) <== NOT EXECUTED
_Thread_Enable_dispatch();
466d4: 4eb9 0004 8dd6 jsr 48dd6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
466da: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
466de: 4280 clrl %d0 <== NOT EXECUTED
466e0: 6002 bras 466e4 <rtems_rate_monotonic_reset_statistics+0x5c><== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
466e2: 7004 moveq #4,%d0 <== NOT EXECUTED
}
466e4: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
466e8: 4e5e unlk %fp <== NOT EXECUTED
0005068c <rtems_region_create>:
uintptr_t length,
uintptr_t page_size,
rtems_attribute attribute_set,
rtems_id *id
)
{
5068c: 4e56 ffe4 linkw %fp,#-28 <== NOT EXECUTED
50690: 48d7 0c7c moveml %d2-%d6/%a2-%a3,%sp@ <== NOT EXECUTED
50694: 262e 0008 movel %fp@(8),%d3 <== NOT EXECUTED
50698: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
5069c: 2c2e 0010 movel %fp@(16),%d6 <== NOT EXECUTED
506a0: 2a2e 0014 movel %fp@(20),%d5 <== NOT EXECUTED
506a4: 282e 0018 movel %fp@(24),%d4 <== NOT EXECUTED
506a8: 266e 001c moveal %fp@(28),%a3 <== NOT EXECUTED
rtems_status_code return_status;
Region_Control *the_region;
if ( !rtems_is_name_valid( name ) )
506ac: 4a83 tstl %d3 <== NOT EXECUTED
506ae: 6700 00be beqw 5076e <rtems_region_create+0xe2> <== NOT EXECUTED
return RTEMS_INVALID_NAME;
if ( !starting_address )
506b2: 4a82 tstl %d2 <== NOT EXECUTED
506b4: 6700 00bc beqw 50772 <rtems_region_create+0xe6> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
if ( !id )
506b8: 4a8b tstl %a3 <== NOT EXECUTED
506ba: 6700 00b6 beqw 50772 <rtems_region_create+0xe6> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
_RTEMS_Lock_allocator(); /* to prevent deletion */
506be: 2f39 0007 666c movel 7666c <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
506c4: 4eb9 0005 29b4 jsr 529b4 <_API_Mutex_Lock> <== NOT EXECUTED
* This function allocates a region control block from
* the inactive chain of free region control blocks.
*/
RTEMS_INLINE_ROUTINE Region_Control *_Region_Allocate( void )
{
return (Region_Control *) _Objects_Allocate( &_Region_Information );
506ca: 4879 0007 64b6 pea 764b6 <_Region_Information> <== NOT EXECUTED
506d0: 4eb9 0005 3f60 jsr 53f60 <_Objects_Allocate> <== NOT EXECUTED
the_region = _Region_Allocate();
if ( !the_region )
506d6: 508f addql #8,%sp <== NOT EXECUTED
506d8: 2440 moveal %d0,%a2 <== NOT EXECUTED
506da: 4a80 tstl %d0 <== NOT EXECUTED
506dc: 677e beqs 5075c <rtems_region_create+0xd0> <== NOT EXECUTED
return_status = RTEMS_TOO_MANY;
else {
the_region->maximum_segment_size = _Heap_Initialize(
506de: 2f05 movel %d5,%sp@- <== NOT EXECUTED
506e0: 2f06 movel %d6,%sp@- <== NOT EXECUTED
506e2: 2f02 movel %d2,%sp@- <== NOT EXECUTED
506e4: 486a 0068 pea %a2@(104) <== NOT EXECUTED
506e8: 4eb9 0005 3b6c jsr 53b6c <_Heap_Initialize> <== NOT EXECUTED
&the_region->Memory, starting_address, length, page_size
);
if ( !the_region->maximum_segment_size ) {
506ee: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
if ( !the_region )
return_status = RTEMS_TOO_MANY;
else {
the_region->maximum_segment_size = _Heap_Initialize(
506f2: 2540 005c movel %d0,%a2@(92) <== NOT EXECUTED
&the_region->Memory, starting_address, length, page_size
);
if ( !the_region->maximum_segment_size ) {
506f6: 6614 bnes 5070c <rtems_region_create+0x80> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Region_Free (
Region_Control *the_region
)
{
_Objects_Free( &_Region_Information, &the_region->Object );
506f8: 2f0a movel %a2,%sp@- <== NOT EXECUTED
506fa: 4879 0007 64b6 pea 764b6 <_Region_Information> <== NOT EXECUTED
_Region_Free( the_region );
return_status = RTEMS_INVALID_SIZE;
50700: 7408 moveq #8,%d2 <== NOT EXECUTED
50702: 4eb9 0005 4254 jsr 54254 <_Objects_Free> <== NOT EXECUTED
50708: 508f addql #8,%sp <== NOT EXECUTED
5070a: 6052 bras 5075e <rtems_region_create+0xd2> <== NOT EXECUTED
}
else {
the_region->starting_address = starting_address;
5070c: 2542 0050 movel %d2,%a2@(80) <== NOT EXECUTED
&the_region->Object,
(Objects_Name) name
);
*id = the_region->Object.id;
return_status = RTEMS_SUCCESSFUL;
50710: 4282 clrl %d2 <== NOT EXECUTED
}
else {
the_region->starting_address = starting_address;
the_region->length = length;
50712: 2546 0054 movel %d6,%a2@(84) <== NOT EXECUTED
the_region->page_size = page_size;
the_region->attribute_set = attribute_set;
the_region->number_of_used_blocks = 0;
_Thread_queue_Initialize(
50716: 44c4 movew %d4,%ccr <== NOT EXECUTED
50718: 57c0 seq %d0 <== NOT EXECUTED
else {
the_region->starting_address = starting_address;
the_region->length = length;
the_region->page_size = page_size;
5071a: 2545 0058 movel %d5,%a2@(88) <== NOT EXECUTED
the_region->attribute_set = attribute_set;
the_region->number_of_used_blocks = 0;
_Thread_queue_Initialize(
5071e: 49c0 extbl %d0 <== NOT EXECUTED
50720: 4480 negl %d0 <== NOT EXECUTED
else {
the_region->starting_address = starting_address;
the_region->length = length;
the_region->page_size = page_size;
the_region->attribute_set = attribute_set;
50722: 2544 0060 movel %d4,%a2@(96) <== NOT EXECUTED
the_region->number_of_used_blocks = 0;
50726: 42aa 0064 clrl %a2@(100) <== NOT EXECUTED
_Thread_queue_Initialize(
5072a: 4878 0006 pea 6 <EXTENDSFDF> <== NOT EXECUTED
5072e: 4878 0040 pea 40 <DBL_MANT_DIG+0xb> <== NOT EXECUTED
50732: 2f00 movel %d0,%sp@- <== NOT EXECUTED
50734: 486a 0010 pea %a2@(16) <== NOT EXECUTED
50738: 4eb9 0005 5570 jsr 55570 <_Thread_queue_Initialize> <== NOT EXECUTED
Objects_Name name
)
{
_Objects_Set_local_object(
information,
_Objects_Get_index( the_object->id ),
5073e: 202a 0008 movel %a2@(8),%d0 <== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
50742: 4281 clrl %d1 <== NOT EXECUTED
&_Region_Information,
&the_region->Object,
(Objects_Name) name
);
*id = the_region->Object.id;
50744: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
50748: 2079 0007 64ce moveal 764ce <_Region_Information+0x18>,%a0 <== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
5074e: 3200 movew %d0,%d1 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
50750: 218a 1c00 movel %a2,%a0@(00000000,%d1:l:4) <== NOT EXECUTED
information,
_Objects_Get_index( the_object->id ),
the_object
);
the_object->name = name;
50754: 2543 000c movel %d3,%a2@(12) <== NOT EXECUTED
50758: 2680 movel %d0,%a3@ <== NOT EXECUTED
5075a: 6002 bras 5075e <rtems_region_create+0xd2> <== NOT EXECUTED
_RTEMS_Lock_allocator(); /* to prevent deletion */
the_region = _Region_Allocate();
if ( !the_region )
return_status = RTEMS_TOO_MANY;
5075c: 7405 moveq #5,%d2 <== NOT EXECUTED
*id = the_region->Object.id;
return_status = RTEMS_SUCCESSFUL;
}
}
_RTEMS_Unlock_allocator();
5075e: 2f39 0007 666c movel 7666c <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
50764: 4eb9 0005 2a14 jsr 52a14 <_API_Mutex_Unlock> <== NOT EXECUTED
return return_status;
5076a: 588f addql #4,%sp <== NOT EXECUTED
5076c: 6006 bras 50774 <rtems_region_create+0xe8> <== NOT EXECUTED
{
rtems_status_code return_status;
Region_Control *the_region;
if ( !rtems_is_name_valid( name ) )
return RTEMS_INVALID_NAME;
5076e: 7403 moveq #3,%d2 <== NOT EXECUTED
50770: 6002 bras 50774 <rtems_region_create+0xe8> <== NOT EXECUTED
if ( !starting_address )
return RTEMS_INVALID_ADDRESS;
if ( !id )
return RTEMS_INVALID_ADDRESS;
50772: 7409 moveq #9,%d2 <== NOT EXECUTED
}
}
_RTEMS_Unlock_allocator();
return return_status;
}
50774: 2002 movel %d2,%d0 <== NOT EXECUTED
50776: 4cee 0c7c ffe4 moveml %fp@(-28),%d2-%d6/%a2-%a3 <== NOT EXECUTED
5077c: 4e5e unlk %fp <== NOT EXECUTED
00050780 <rtems_region_delete>:
*/
rtems_status_code rtems_region_delete(
rtems_id id
)
{
50780: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
50784: 2f0a movel %a2,%sp@- <== NOT EXECUTED
50786: 2f02 movel %d2,%sp@- <== NOT EXECUTED
Objects_Locations location;
rtems_status_code return_status;
Region_Control *the_region;
_RTEMS_Lock_allocator();
50788: 2f39 0007 666c movel 7666c <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
5078e: 4eb9 0005 29b4 jsr 529b4 <_API_Mutex_Lock> <== NOT EXECUTED
Objects_Id id,
Objects_Locations *location
)
{
return (Region_Control *)
_Objects_Get_no_protection( &_Region_Information, id, location );
50794: 486e fffc pea %fp@(-4) <== NOT EXECUTED
50798: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
5079c: 4879 0007 64b6 pea 764b6 <_Region_Information> <== NOT EXECUTED
507a2: 4eb9 0005 43b8 jsr 543b8 <_Objects_Get_no_protection> <== NOT EXECUTED
the_region = _Region_Get( id, &location );
switch ( location ) {
507a8: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
507ac: 2440 moveal %d0,%a2 <== NOT EXECUTED
507ae: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
507b2: 662a bnes 507de <rtems_region_delete+0x5e> <== NOT EXECUTED
case OBJECTS_LOCAL:
_Region_Debug_Walk( the_region, 5 );
if ( the_region->number_of_used_blocks != 0 )
507b4: 4aaa 0064 tstl %a2@(100) <== NOT EXECUTED
507b8: 6628 bnes 507e2 <rtems_region_delete+0x62> <== NOT EXECUTED
return_status = RTEMS_RESOURCE_IN_USE;
else {
_Objects_Close( &_Region_Information, &the_region->Object );
507ba: 2f00 movel %d0,%sp@- <== NOT EXECUTED
507bc: 4879 0007 64b6 pea 764b6 <_Region_Information> <== NOT EXECUTED
_Region_Free( the_region );
return_status = RTEMS_SUCCESSFUL;
507c2: 4282 clrl %d2 <== NOT EXECUTED
case OBJECTS_LOCAL:
_Region_Debug_Walk( the_region, 5 );
if ( the_region->number_of_used_blocks != 0 )
return_status = RTEMS_RESOURCE_IN_USE;
else {
_Objects_Close( &_Region_Information, &the_region->Object );
507c4: 4eb9 0005 3fdc jsr 53fdc <_Objects_Close> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Region_Free (
Region_Control *the_region
)
{
_Objects_Free( &_Region_Information, &the_region->Object );
507ca: 2f0a movel %a2,%sp@- <== NOT EXECUTED
507cc: 4879 0007 64b6 pea 764b6 <_Region_Information> <== NOT EXECUTED
507d2: 4eb9 0005 4254 jsr 54254 <_Objects_Free> <== NOT EXECUTED
507d8: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
507dc: 6006 bras 507e4 <rtems_region_delete+0x64> <== NOT EXECUTED
break;
#endif
case OBJECTS_ERROR:
default:
return_status = RTEMS_INVALID_ID;
507de: 7404 moveq #4,%d2 <== NOT EXECUTED
507e0: 6002 bras 507e4 <rtems_region_delete+0x64> <== NOT EXECUTED
switch ( location ) {
case OBJECTS_LOCAL:
_Region_Debug_Walk( the_region, 5 );
if ( the_region->number_of_used_blocks != 0 )
return_status = RTEMS_RESOURCE_IN_USE;
507e2: 740c moveq #12,%d2 <== NOT EXECUTED
default:
return_status = RTEMS_INVALID_ID;
break;
}
_RTEMS_Unlock_allocator();
507e4: 2f39 0007 666c movel 7666c <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
507ea: 4eb9 0005 2a14 jsr 52a14 <_API_Mutex_Unlock> <== NOT EXECUTED
return return_status;
}
507f0: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
507f4: 2002 movel %d2,%d0 <== NOT EXECUTED
507f6: 242e fff4 movel %fp@(-12),%d2 <== NOT EXECUTED
507fa: 4e5e unlk %fp <== NOT EXECUTED
...
00050800 <rtems_region_extend>:
rtems_status_code rtems_region_extend(
rtems_id id,
void *starting_address,
uintptr_t length
)
{
50800: 4e56 fff8 linkw %fp,#-8 <== NOT EXECUTED
50804: 2f0a movel %a2,%sp@- <== NOT EXECUTED
50806: 2f02 movel %d2,%sp@- <== NOT EXECUTED
50808: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
bool extend_ok;
Objects_Locations location;
rtems_status_code return_status;
Region_Control *the_region;
if ( !starting_address )
5080c: 676e beqs 5087c <rtems_region_extend+0x7c> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
_RTEMS_Lock_allocator(); /* to prevent deletion */
5080e: 2f39 0007 666c movel 7666c <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
50814: 4eb9 0005 29b4 jsr 529b4 <_API_Mutex_Lock> <== NOT EXECUTED
Objects_Id id,
Objects_Locations *location
)
{
return (Region_Control *)
_Objects_Get_no_protection( &_Region_Information, id, location );
5081a: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
5081e: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
50822: 4879 0007 64b6 pea 764b6 <_Region_Information> <== NOT EXECUTED
50828: 4eb9 0005 43b8 jsr 543b8 <_Objects_Get_no_protection> <== NOT EXECUTED
the_region = _Region_Get( id, &location );
switch ( location ) {
5082e: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
50832: 2440 moveal %d0,%a2 <== NOT EXECUTED
50834: 4aae fff8 tstl %fp@(-8) <== NOT EXECUTED
50838: 662c bnes 50866 <rtems_region_extend+0x66> <== NOT EXECUTED
case OBJECTS_LOCAL:
extend_ok = _Heap_Extend(
5083a: 486e fffc pea %fp@(-4) <== NOT EXECUTED
5083e: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
50842: 2f02 movel %d2,%sp@- <== NOT EXECUTED
50844: 486a 0068 pea %a2@(104) <== NOT EXECUTED
50848: 4eb9 0005 362c jsr 5362c <_Heap_Extend> <== NOT EXECUTED
starting_address,
length,
&amount_extended
);
if ( extend_ok ) {
5084e: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
50852: 4a00 tstb %d0 <== NOT EXECUTED
50854: 6714 beqs 5086a <rtems_region_extend+0x6a> <== NOT EXECUTED
the_region->length += amount_extended;
50856: 202e fffc movel %fp@(-4),%d0 <== NOT EXECUTED
5085a: d1aa 0054 addl %d0,%a2@(84) <== NOT EXECUTED
the_region->maximum_segment_size += amount_extended;
return_status = RTEMS_SUCCESSFUL;
5085e: 4282 clrl %d2 <== NOT EXECUTED
&amount_extended
);
if ( extend_ok ) {
the_region->length += amount_extended;
the_region->maximum_segment_size += amount_extended;
50860: d1aa 005c addl %d0,%a2@(92) <== NOT EXECUTED
50864: 6006 bras 5086c <rtems_region_extend+0x6c> <== NOT EXECUTED
break;
#endif
case OBJECTS_ERROR:
default:
return_status = RTEMS_INVALID_ID;
50866: 7404 moveq #4,%d2 <== NOT EXECUTED
50868: 6002 bras 5086c <rtems_region_extend+0x6c> <== NOT EXECUTED
if ( extend_ok ) {
the_region->length += amount_extended;
the_region->maximum_segment_size += amount_extended;
return_status = RTEMS_SUCCESSFUL;
} else {
return_status = RTEMS_INVALID_ADDRESS;
5086a: 7409 moveq #9,%d2 <== NOT EXECUTED
default:
return_status = RTEMS_INVALID_ID;
break;
}
_RTEMS_Unlock_allocator();
5086c: 2f39 0007 666c movel 7666c <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
50872: 4eb9 0005 2a14 jsr 52a14 <_API_Mutex_Unlock> <== NOT EXECUTED
return return_status;
50878: 588f addql #4,%sp <== NOT EXECUTED
5087a: 6002 bras 5087e <rtems_region_extend+0x7e> <== NOT EXECUTED
Objects_Locations location;
rtems_status_code return_status;
Region_Control *the_region;
if ( !starting_address )
return RTEMS_INVALID_ADDRESS;
5087c: 7409 moveq #9,%d2 <== NOT EXECUTED
break;
}
_RTEMS_Unlock_allocator();
return return_status;
}
5087e: 2002 movel %d2,%d0 <== NOT EXECUTED
50880: 242e fff0 movel %fp@(-16),%d2 <== NOT EXECUTED
50884: 246e fff4 moveal %fp@(-12),%a2 <== NOT EXECUTED
50888: 4e5e unlk %fp <== NOT EXECUTED
0005088c <rtems_region_get_free_information>:
rtems_status_code rtems_region_get_free_information(
rtems_id id,
Heap_Information_block *the_info
)
{
5088c: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
50890: 2f0a movel %a2,%sp@- <== NOT EXECUTED
50892: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
Objects_Locations location;
rtems_status_code return_status;
register Region_Control *the_region;
if ( !the_info )
50896: 4a8a tstl %a2 <== NOT EXECUTED
50898: 675e beqs 508f8 <rtems_region_get_free_information+0x6c><== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
_RTEMS_Lock_allocator();
5089a: 2f39 0007 666c movel 7666c <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
508a0: 4eb9 0005 29b4 jsr 529b4 <_API_Mutex_Lock> <== NOT EXECUTED
508a6: 486e fffc pea %fp@(-4) <== NOT EXECUTED
508aa: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
508ae: 4879 0007 64b6 pea 764b6 <_Region_Information> <== NOT EXECUTED
508b4: 4eb9 0005 43b8 jsr 543b8 <_Objects_Get_no_protection> <== NOT EXECUTED
the_region = _Region_Get( id, &location );
switch ( location ) {
508ba: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
508be: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
508c2: 6620 bnes 508e4 <rtems_region_get_free_information+0x58><== NOT EXECUTED
case OBJECTS_LOCAL:
the_info->Used.number = 0;
508c4: 42aa 000c clrl %a2@(12) <== NOT EXECUTED
the_info->Used.total = 0;
the_info->Used.largest = 0;
_Heap_Get_free_information( &the_region->Memory, &the_info->Free );
508c8: 2040 moveal %d0,%a0 <== NOT EXECUTED
switch ( location ) {
case OBJECTS_LOCAL:
the_info->Used.number = 0;
the_info->Used.total = 0;
508ca: 42aa 0014 clrl %a2@(20) <== NOT EXECUTED
the_info->Used.largest = 0;
508ce: 42aa 0010 clrl %a2@(16) <== NOT EXECUTED
_Heap_Get_free_information( &the_region->Memory, &the_info->Free );
508d2: 2f0a movel %a2,%sp@- <== NOT EXECUTED
508d4: 4868 0068 pea %a0@(104) <== NOT EXECUTED
return_status = RTEMS_SUCCESSFUL;
508d8: 95ca subal %a2,%a2 <== NOT EXECUTED
the_info->Used.number = 0;
the_info->Used.total = 0;
the_info->Used.largest = 0;
_Heap_Get_free_information( &the_region->Memory, &the_info->Free );
508da: 4eb9 0005 398c jsr 5398c <_Heap_Get_free_information> <== NOT EXECUTED
return_status = RTEMS_SUCCESSFUL;
break;
508e0: 508f addql #8,%sp <== NOT EXECUTED
508e2: 6004 bras 508e8 <rtems_region_get_free_information+0x5c><== NOT EXECUTED
break;
#endif
case OBJECTS_ERROR:
default:
return_status = RTEMS_INVALID_ID;
508e4: 347c 0004 moveaw #4,%a2 <== NOT EXECUTED
break;
}
_RTEMS_Unlock_allocator();
508e8: 2f39 0007 666c movel 7666c <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
508ee: 4eb9 0005 2a14 jsr 52a14 <_API_Mutex_Unlock> <== NOT EXECUTED
return return_status;
508f4: 588f addql #4,%sp <== NOT EXECUTED
508f6: 6004 bras 508fc <rtems_region_get_free_information+0x70><== NOT EXECUTED
Objects_Locations location;
rtems_status_code return_status;
register Region_Control *the_region;
if ( !the_info )
return RTEMS_INVALID_ADDRESS;
508f8: 347c 0009 moveaw #9,%a2 <== NOT EXECUTED
break;
}
_RTEMS_Unlock_allocator();
return return_status;
}
508fc: 200a movel %a2,%d0 <== NOT EXECUTED
508fe: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
50902: 4e5e unlk %fp <== NOT EXECUTED
...
00050908 <rtems_region_get_information>:
rtems_status_code rtems_region_get_information(
rtems_id id,
Heap_Information_block *the_info
)
{
50908: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
5090c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
5090e: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
Objects_Locations location;
rtems_status_code return_status;
register Region_Control *the_region;
if ( !the_info )
50912: 6750 beqs 50964 <rtems_region_get_information+0x5c><== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
_RTEMS_Lock_allocator();
50914: 2f39 0007 666c movel 7666c <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
5091a: 4eb9 0005 29b4 jsr 529b4 <_API_Mutex_Lock> <== NOT EXECUTED
50920: 486e fffc pea %fp@(-4) <== NOT EXECUTED
50924: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
50928: 4879 0007 64b6 pea 764b6 <_Region_Information> <== NOT EXECUTED
5092e: 4eb9 0005 43b8 jsr 543b8 <_Objects_Get_no_protection> <== NOT EXECUTED
the_region = _Region_Get( id, &location );
switch ( location ) {
50934: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
50938: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
5093c: 6614 bnes 50952 <rtems_region_get_information+0x4a><== NOT EXECUTED
case OBJECTS_LOCAL:
_Heap_Get_information( &the_region->Memory, the_info );
5093e: 2f02 movel %d2,%sp@- <== NOT EXECUTED
50940: 2040 moveal %d0,%a0 <== NOT EXECUTED
50942: 4868 0068 pea %a0@(104) <== NOT EXECUTED
return_status = RTEMS_SUCCESSFUL;
50946: 4282 clrl %d2 <== NOT EXECUTED
the_region = _Region_Get( id, &location );
switch ( location ) {
case OBJECTS_LOCAL:
_Heap_Get_information( &the_region->Memory, the_info );
50948: 4eb9 0005 39d0 jsr 539d0 <_Heap_Get_information> <== NOT EXECUTED
return_status = RTEMS_SUCCESSFUL;
break;
5094e: 508f addql #8,%sp <== NOT EXECUTED
50950: 6002 bras 50954 <rtems_region_get_information+0x4c><== NOT EXECUTED
break;
#endif
case OBJECTS_ERROR:
default:
return_status = RTEMS_INVALID_ID;
50952: 7404 moveq #4,%d2 <== NOT EXECUTED
break;
}
_RTEMS_Unlock_allocator();
50954: 2f39 0007 666c movel 7666c <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
5095a: 4eb9 0005 2a14 jsr 52a14 <_API_Mutex_Unlock> <== NOT EXECUTED
return return_status;
50960: 588f addql #4,%sp <== NOT EXECUTED
50962: 6002 bras 50966 <rtems_region_get_information+0x5e><== NOT EXECUTED
Objects_Locations location;
rtems_status_code return_status;
register Region_Control *the_region;
if ( !the_info )
return RTEMS_INVALID_ADDRESS;
50964: 7409 moveq #9,%d2 <== NOT EXECUTED
break;
}
_RTEMS_Unlock_allocator();
return return_status;
}
50966: 2002 movel %d2,%d0 <== NOT EXECUTED
50968: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
5096c: 4e5e unlk %fp <== NOT EXECUTED
00050970 <rtems_region_get_segment>:
uintptr_t size,
rtems_option option_set,
rtems_interval timeout,
void **segment
)
{
50970: 4e56 ffe8 linkw %fp,#-24 <== NOT EXECUTED
50974: 48d7 1c0c moveml %d2-%d3/%a2-%a4,%sp@ <== NOT EXECUTED
50978: 262e 0008 movel %fp@(8),%d3 <== NOT EXECUTED
5097c: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
50980: 286e 0018 moveal %fp@(24),%a4 <== NOT EXECUTED
Objects_Locations location;
rtems_status_code return_status;
Region_Control *the_region;
void *the_segment;
if ( !segment )
50984: 4a8c tstl %a4 <== NOT EXECUTED
50986: 6700 00e4 beqw 50a6c <rtems_region_get_segment+0xfc> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
*segment = NULL;
5098a: 4294 clrl %a4@ <== NOT EXECUTED
if ( size == 0 )
5098c: 4a82 tstl %d2 <== NOT EXECUTED
5098e: 6700 00e0 beqw 50a70 <rtems_region_get_segment+0x100> <== NOT EXECUTED
return RTEMS_INVALID_SIZE;
_RTEMS_Lock_allocator();
50992: 2f39 0007 666c movel 7666c <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
50998: 4eb9 0005 29b4 jsr 529b4 <_API_Mutex_Lock> <== NOT EXECUTED
5099e: 486e fffc pea %fp@(-4) <== NOT EXECUTED
509a2: 2f03 movel %d3,%sp@- <== NOT EXECUTED
509a4: 4879 0007 64b6 pea 764b6 <_Region_Information> <== NOT EXECUTED
executing = _Thread_Executing;
509aa: 2679 0007 6a42 moveal 76a42 <_Per_CPU_Information+0xc>,%a3 <== NOT EXECUTED
509b0: 4eb9 0005 43b8 jsr 543b8 <_Objects_Get_no_protection> <== NOT EXECUTED
the_region = _Region_Get( id, &location );
switch ( location ) {
509b6: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
509ba: 2440 moveal %d0,%a2 <== NOT EXECUTED
509bc: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
509c0: 6600 0090 bnew 50a52 <rtems_region_get_segment+0xe2> <== NOT EXECUTED
case OBJECTS_LOCAL:
if ( size > the_region->maximum_segment_size )
509c4: b4aa 005c cmpl %a2@(92),%d2 <== NOT EXECUTED
509c8: 6200 008c bhiw 50a56 <rtems_region_get_segment+0xe6> <== NOT EXECUTED
* @brief See _Heap_Allocate_aligned_with_boundary() with alignment and
* boundary equals zero.
*/
RTEMS_INLINE_ROUTINE void *_Heap_Allocate( Heap_Control *heap, uintptr_t size )
{
return _Heap_Allocate_aligned_with_boundary( heap, size, 0, 0 );
509cc: 42a7 clrl %sp@- <== NOT EXECUTED
509ce: 42a7 clrl %sp@- <== NOT EXECUTED
509d0: 2f02 movel %d2,%sp@- <== NOT EXECUTED
509d2: 486a 0068 pea %a2@(104) <== NOT EXECUTED
509d6: 4eb9 0005 3490 jsr 53490 <_Heap_Allocate_aligned_with_boundary><== NOT EXECUTED
the_segment = _Region_Allocate_segment( the_region, size );
_Region_Debug_Walk( the_region, 2 );
if ( the_segment ) {
509dc: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
509e0: 4a80 tstl %d0 <== NOT EXECUTED
509e2: 670a beqs 509ee <rtems_region_get_segment+0x7e> <== NOT EXECUTED
the_region->number_of_used_blocks += 1;
509e4: 52aa 0064 addql #1,%a2@(100) <== NOT EXECUTED
*segment = the_segment;
return_status = RTEMS_SUCCESSFUL;
509e8: 4282 clrl %d2 <== NOT EXECUTED
_Region_Debug_Walk( the_region, 2 );
if ( the_segment ) {
the_region->number_of_used_blocks += 1;
*segment = the_segment;
509ea: 2880 movel %d0,%a4@ <== NOT EXECUTED
509ec: 606e bras 50a5c <rtems_region_get_segment+0xec> <== NOT EXECUTED
return_status = RTEMS_SUCCESSFUL;
} else if ( _Options_Is_no_wait( option_set ) ) {
509ee: 202e 0010 movel %fp@(16),%d0 <== NOT EXECUTED
509f2: 0800 0000 btst #0,%d0 <== NOT EXECUTED
509f6: 6662 bnes 50a5a <rtems_region_get_segment+0xea> <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
509f8: 2039 0007 65ac movel 765ac <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
509fe: 5280 addql #1,%d0 <== NOT EXECUTED
50a00: 23c0 0007 65ac movel %d0,765ac <_Thread_Dispatch_disable_level><== NOT EXECUTED
* Switch from using the memory allocation mutex to using a
* dispatching disabled critical section. We have to do this
* because this thread is going to block.
*/
_Thread_Disable_dispatch();
_RTEMS_Unlock_allocator();
50a06: 2f39 0007 666c movel 7666c <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
50a0c: 4eb9 0005 2a14 jsr 52a14 <_API_Mutex_Unlock> <== NOT EXECUTED
executing->Wait.queue = &the_region->Wait_queue;
50a12: 200a movel %a2,%d0 <== NOT EXECUTED
50a14: 0680 0000 0010 addil #16,%d0 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Thread_queue_Enter_critical_section (
Thread_queue_Control *the_thread_queue
)
{
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
50a1a: 7201 moveq #1,%d1 <== NOT EXECUTED
50a1c: 2740 0044 movel %d0,%a3@(68) <== NOT EXECUTED
executing->Wait.id = id;
executing->Wait.count = size;
50a20: 2742 0024 movel %d2,%a3@(36) <== NOT EXECUTED
*/
_Thread_Disable_dispatch();
_RTEMS_Unlock_allocator();
executing->Wait.queue = &the_region->Wait_queue;
executing->Wait.id = id;
50a24: 2743 0020 movel %d3,%a3@(32) <== NOT EXECUTED
executing->Wait.count = size;
executing->Wait.return_argument = segment;
50a28: 274c 0028 movel %a4,%a3@(40) <== NOT EXECUTED
50a2c: 2541 0040 movel %d1,%a2@(64) <== NOT EXECUTED
_Thread_queue_Enter_critical_section( &the_region->Wait_queue );
_Thread_queue_Enqueue( &the_region->Wait_queue, timeout );
50a30: 4879 0005 5640 pea 55640 <_Thread_queue_Timeout> <== NOT EXECUTED
50a36: 2f2e 0014 movel %fp@(20),%sp@- <== NOT EXECUTED
50a3a: 2f00 movel %d0,%sp@- <== NOT EXECUTED
50a3c: 4eb9 0005 532c jsr 5532c <_Thread_queue_Enqueue_with_handler><== NOT EXECUTED
_Thread_Enable_dispatch();
50a42: 4eb9 0005 4eca jsr 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
return (rtems_status_code) executing->Wait.return_code;
50a48: 242b 0034 movel %a3@(52),%d2 <== NOT EXECUTED
50a4c: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
50a50: 6020 bras 50a72 <rtems_region_get_segment+0x102> <== NOT EXECUTED
break;
#endif
case OBJECTS_ERROR:
default:
return_status = RTEMS_INVALID_ID;
50a52: 7404 moveq #4,%d2 <== NOT EXECUTED
50a54: 6006 bras 50a5c <rtems_region_get_segment+0xec> <== NOT EXECUTED
the_region = _Region_Get( id, &location );
switch ( location ) {
case OBJECTS_LOCAL:
if ( size > the_region->maximum_segment_size )
return_status = RTEMS_INVALID_SIZE;
50a56: 7408 moveq #8,%d2 <== NOT EXECUTED
50a58: 6002 bras 50a5c <rtems_region_get_segment+0xec> <== NOT EXECUTED
if ( the_segment ) {
the_region->number_of_used_blocks += 1;
*segment = the_segment;
return_status = RTEMS_SUCCESSFUL;
} else if ( _Options_Is_no_wait( option_set ) ) {
return_status = RTEMS_UNSATISFIED;
50a5a: 740d moveq #13,%d2 <== NOT EXECUTED
default:
return_status = RTEMS_INVALID_ID;
break;
}
_RTEMS_Unlock_allocator();
50a5c: 2f39 0007 666c movel 7666c <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
50a62: 4eb9 0005 2a14 jsr 52a14 <_API_Mutex_Unlock> <== NOT EXECUTED
return return_status;
50a68: 588f addql #4,%sp <== NOT EXECUTED
50a6a: 6006 bras 50a72 <rtems_region_get_segment+0x102> <== NOT EXECUTED
rtems_status_code return_status;
Region_Control *the_region;
void *the_segment;
if ( !segment )
return RTEMS_INVALID_ADDRESS;
50a6c: 7409 moveq #9,%d2 <== NOT EXECUTED
50a6e: 6002 bras 50a72 <rtems_region_get_segment+0x102> <== NOT EXECUTED
*segment = NULL;
if ( size == 0 )
return RTEMS_INVALID_SIZE;
50a70: 7408 moveq #8,%d2 <== NOT EXECUTED
break;
}
_RTEMS_Unlock_allocator();
return return_status;
}
50a72: 2002 movel %d2,%d0 <== NOT EXECUTED
50a74: 4cee 1c0c ffe8 moveml %fp@(-24),%d2-%d3/%a2-%a4 <== NOT EXECUTED
50a7a: 4e5e unlk %fp <== NOT EXECUTED
...
00050a80 <rtems_region_get_segment_size>:
rtems_status_code rtems_region_get_segment_size(
rtems_id id,
void *segment,
uintptr_t *size
)
{
50a80: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
50a84: 2f03 movel %d3,%sp@- <== NOT EXECUTED
50a86: 262e 0010 movel %fp@(16),%d3 <== NOT EXECUTED
50a8a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
50a8c: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
Objects_Locations location;
rtems_status_code return_status = RTEMS_SUCCESSFUL;
register Region_Control *the_region;
if ( !segment )
50a90: 6768 beqs 50afa <rtems_region_get_segment_size+0x7a><== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
if ( !size )
50a92: 4a83 tstl %d3 <== NOT EXECUTED
50a94: 6764 beqs 50afa <rtems_region_get_segment_size+0x7a><== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
_RTEMS_Lock_allocator();
50a96: 2f39 0007 666c movel 7666c <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
50a9c: 4eb9 0005 29b4 jsr 529b4 <_API_Mutex_Lock> <== NOT EXECUTED
50aa2: 486e fffc pea %fp@(-4) <== NOT EXECUTED
50aa6: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
50aaa: 4879 0007 64b6 pea 764b6 <_Region_Information> <== NOT EXECUTED
50ab0: 4eb9 0005 43b8 jsr 543b8 <_Objects_Get_no_protection> <== NOT EXECUTED
the_region = _Region_Get( id, &location );
switch ( location ) {
50ab6: 222e fffc movel %fp@(-4),%d1 <== NOT EXECUTED
50aba: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
50abe: 6708 beqs 50ac8 <rtems_region_get_segment_size+0x48><== NOT EXECUTED
50ac0: 7001 moveq #1,%d0 <== NOT EXECUTED
50ac2: b081 cmpl %d1,%d0 <== NOT EXECUTED
50ac4: 661a bnes 50ae0 <rtems_region_get_segment_size+0x60><== NOT EXECUTED
50ac6: 601c bras 50ae4 <rtems_region_get_segment_size+0x64><== NOT EXECUTED
case OBJECTS_LOCAL:
if ( !_Heap_Size_of_alloc_area( &the_region->Memory, segment, size ) )
50ac8: 2f03 movel %d3,%sp@- <== NOT EXECUTED
50aca: 2040 moveal %d0,%a0 <== NOT EXECUTED
50acc: 2f02 movel %d2,%sp@- <== NOT EXECUTED
50ace: 4868 0068 pea %a0@(104) <== NOT EXECUTED
50ad2: 4eb9 0005 3e34 jsr 53e34 <_Heap_Size_of_alloc_area> <== NOT EXECUTED
50ad8: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
50adc: 4a00 tstb %d0 <== NOT EXECUTED
50ade: 6708 beqs 50ae8 <rtems_region_get_segment_size+0x68><== NOT EXECUTED
void *segment,
uintptr_t *size
)
{
Objects_Locations location;
rtems_status_code return_status = RTEMS_SUCCESSFUL;
50ae0: 4282 clrl %d2 <== NOT EXECUTED
50ae2: 6006 bras 50aea <rtems_region_get_segment_size+0x6a><== NOT EXECUTED
case OBJECTS_REMOTE: /* this error cannot be returned */
break;
#endif
case OBJECTS_ERROR:
return_status = RTEMS_INVALID_ID;
50ae4: 7404 moveq #4,%d2 <== NOT EXECUTED
50ae6: 6002 bras 50aea <rtems_region_get_segment_size+0x6a><== NOT EXECUTED
the_region = _Region_Get( id, &location );
switch ( location ) {
case OBJECTS_LOCAL:
if ( !_Heap_Size_of_alloc_area( &the_region->Memory, segment, size ) )
return_status = RTEMS_INVALID_ADDRESS;
50ae8: 7409 moveq #9,%d2 <== NOT EXECUTED
case OBJECTS_ERROR:
return_status = RTEMS_INVALID_ID;
break;
}
_RTEMS_Unlock_allocator();
50aea: 2f39 0007 666c movel 7666c <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
50af0: 4eb9 0005 2a14 jsr 52a14 <_API_Mutex_Unlock> <== NOT EXECUTED
return return_status;
50af6: 588f addql #4,%sp <== NOT EXECUTED
50af8: 6002 bras 50afc <rtems_region_get_segment_size+0x7c><== NOT EXECUTED
if ( !segment )
return RTEMS_INVALID_ADDRESS;
if ( !size )
return RTEMS_INVALID_ADDRESS;
50afa: 7409 moveq #9,%d2 <== NOT EXECUTED
break;
}
_RTEMS_Unlock_allocator();
return return_status;
}
50afc: 2002 movel %d2,%d0 <== NOT EXECUTED
50afe: 242e fff4 movel %fp@(-12),%d2 <== NOT EXECUTED
50b02: 262e fff8 movel %fp@(-8),%d3 <== NOT EXECUTED
50b06: 4e5e unlk %fp <== NOT EXECUTED
...
00050b0c <rtems_region_ident>:
rtems_status_code rtems_region_ident(
rtems_name name,
rtems_id *id
)
{
50b0c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
Objects_Name_or_id_lookup_errors status;
status = _Objects_Name_to_id_u32(
50b10: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
50b14: 2f3c 7fff ffff movel #2147483647,%sp@- <== NOT EXECUTED
50b1a: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
50b1e: 4879 0007 64b6 pea 764b6 <_Region_Information> <== NOT EXECUTED
50b24: 4eb9 0005 457c jsr 5457c <_Objects_Name_to_id_u32> <== NOT EXECUTED
OBJECTS_SEARCH_LOCAL_NODE,
id
);
return _Status_Object_name_errors_to_status[ status ];
}
50b2a: 41f9 0006 f980 lea 6f980 <_Status_Object_name_errors_to_status>,%a0<== NOT EXECUTED
50b30: 4e5e unlk %fp <== NOT EXECUTED
50b32: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0 <== NOT EXECUTED
00050b38 <rtems_region_resize_segment>:
rtems_id id,
void *segment,
uintptr_t size,
uintptr_t *old_size
)
{
50b38: 4e56 ffe8 linkw %fp,#-24 <== NOT EXECUTED
50b3c: 48d7 0c04 moveml %d2/%a2-%a3,%sp@ <== NOT EXECUTED
50b40: 266e 0014 moveal %fp@(20),%a3 <== NOT EXECUTED
uintptr_t osize;
rtems_status_code return_status;
Heap_Resize_status status;
register Region_Control *the_region;
if ( !old_size )
50b44: 4a8b tstl %a3 <== NOT EXECUTED
50b46: 6700 008e beqw 50bd6 <rtems_region_resize_segment+0x9e><== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
_RTEMS_Lock_allocator();
50b4a: 2f39 0007 666c movel 7666c <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
50b50: 4eb9 0005 29b4 jsr 529b4 <_API_Mutex_Lock> <== NOT EXECUTED
50b56: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
50b5a: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
50b5e: 4879 0007 64b6 pea 764b6 <_Region_Information> <== NOT EXECUTED
50b64: 4eb9 0005 43b8 jsr 543b8 <_Objects_Get_no_protection> <== NOT EXECUTED
the_region = _Region_Get( id, &location );
switch ( location ) {
50b6a: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
50b6e: 2440 moveal %d0,%a2 <== NOT EXECUTED
50b70: 4aae fff8 tstl %fp@(-8) <== NOT EXECUTED
50b74: 664e bnes 50bc4 <rtems_region_resize_segment+0x8c><== NOT EXECUTED
case OBJECTS_LOCAL:
_Region_Debug_Walk( the_region, 7 );
status = _Heap_Resize_block(
50b76: 486e fffc pea %fp@(-4) <== NOT EXECUTED
50b7a: 486e fff4 pea %fp@(-12) <== NOT EXECUTED
50b7e: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
50b82: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
50b86: 486a 0068 pea %a2@(104) <== NOT EXECUTED
50b8a: 4eb9 0005 3d5c jsr 53d5c <_Heap_Resize_block> <== NOT EXECUTED
segment,
(uint32_t) size,
&osize,
&avail_size
);
*old_size = (uint32_t) osize;
50b90: 26ae fff4 movel %fp@(-12),%a3@ <== NOT EXECUTED
case OBJECTS_LOCAL:
_Region_Debug_Walk( the_region, 7 );
status = _Heap_Resize_block(
50b94: 2400 movel %d0,%d2 <== NOT EXECUTED
);
*old_size = (uint32_t) osize;
_Region_Debug_Walk( the_region, 8 );
if ( status == HEAP_RESIZE_SUCCESSFUL )
50b96: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
50b9a: 660e bnes 50baa <rtems_region_resize_segment+0x72><== NOT EXECUTED
_Region_Process_queue( the_region ); /* unlocks allocator */
50b9c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
50b9e: 4eb9 0005 8050 jsr 58050 <_Region_Process_queue> <== NOT EXECUTED
50ba4: 588f addql #4,%sp <== NOT EXECUTED
else
_RTEMS_Unlock_allocator();
if (status == HEAP_RESIZE_SUCCESSFUL)
return RTEMS_SUCCESSFUL;
50ba6: 4280 clrl %d0 <== NOT EXECUTED
50ba8: 602e bras 50bd8 <rtems_region_resize_segment+0xa0><== NOT EXECUTED
_Region_Debug_Walk( the_region, 8 );
if ( status == HEAP_RESIZE_SUCCESSFUL )
_Region_Process_queue( the_region ); /* unlocks allocator */
else
_RTEMS_Unlock_allocator();
50baa: 2f39 0007 666c movel 7666c <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
50bb0: 4eb9 0005 2a14 jsr 52a14 <_API_Mutex_Unlock> <== NOT EXECUTED
if (status == HEAP_RESIZE_SUCCESSFUL)
return RTEMS_SUCCESSFUL;
if (status == HEAP_RESIZE_UNSATISFIED)
50bb6: 588f addql #4,%sp <== NOT EXECUTED
50bb8: 7001 moveq #1,%d0 <== NOT EXECUTED
50bba: b082 cmpl %d2,%d0 <== NOT EXECUTED
50bbc: 6618 bnes 50bd6 <rtems_region_resize_segment+0x9e><== NOT EXECUTED
return RTEMS_UNSATISFIED;
50bbe: 103c 000d moveb #13,%d0 <== NOT EXECUTED
50bc2: 6014 bras 50bd8 <rtems_region_resize_segment+0xa0><== NOT EXECUTED
default:
return_status = RTEMS_INVALID_ID;
break;
}
_RTEMS_Unlock_allocator();
50bc4: 2f39 0007 666c movel 7666c <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
50bca: 4eb9 0005 2a14 jsr 52a14 <_API_Mutex_Unlock> <== NOT EXECUTED
return return_status;
50bd0: 588f addql #4,%sp <== NOT EXECUTED
50bd2: 7004 moveq #4,%d0 <== NOT EXECUTED
50bd4: 6002 bras 50bd8 <rtems_region_resize_segment+0xa0><== NOT EXECUTED
if (status == HEAP_RESIZE_SUCCESSFUL)
return RTEMS_SUCCESSFUL;
if (status == HEAP_RESIZE_UNSATISFIED)
return RTEMS_UNSATISFIED;
return RTEMS_INVALID_ADDRESS;
50bd6: 7009 moveq #9,%d0 <== NOT EXECUTED
break;
}
_RTEMS_Unlock_allocator();
return return_status;
}
50bd8: 4cee 0c04 ffe8 moveml %fp@(-24),%d2/%a2-%a3 <== NOT EXECUTED
50bde: 4e5e unlk %fp <== NOT EXECUTED
...
00050be4 <rtems_region_return_segment>:
rtems_status_code rtems_region_return_segment(
rtems_id id,
void *segment
)
{
50be4: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
50be8: 2f0a movel %a2,%sp@- <== NOT EXECUTED
uint32_t size;
#endif
int status;
register Region_Control *the_region;
_RTEMS_Lock_allocator();
50bea: 2f39 0007 666c movel 7666c <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
50bf0: 4eb9 0005 29b4 jsr 529b4 <_API_Mutex_Lock> <== NOT EXECUTED
50bf6: 486e fffc pea %fp@(-4) <== NOT EXECUTED
50bfa: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
50bfe: 4879 0007 64b6 pea 764b6 <_Region_Information> <== NOT EXECUTED
50c04: 4eb9 0005 43b8 jsr 543b8 <_Objects_Get_no_protection> <== NOT EXECUTED
the_region = _Region_Get( id, &location );
switch ( location ) {
50c0a: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
50c0e: 2440 moveal %d0,%a2 <== NOT EXECUTED
50c10: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
50c14: 6626 bnes 50c3c <rtems_region_return_segment+0x58><== NOT EXECUTED
RTEMS_INLINE_ROUTINE bool _Region_Free_segment (
Region_Control *the_region,
void *the_segment
)
{
return _Heap_Free( &the_region->Memory, the_segment );
50c16: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
50c1a: 486a 0068 pea %a2@(104) <== NOT EXECUTED
50c1e: 4eb9 0005 3820 jsr 53820 <_Heap_Free> <== NOT EXECUTED
#endif
status = _Region_Free_segment( the_region, segment );
_Region_Debug_Walk( the_region, 4 );
if ( !status )
50c24: 508f addql #8,%sp <== NOT EXECUTED
50c26: 4a00 tstb %d0 <== NOT EXECUTED
50c28: 6718 beqs 50c42 <rtems_region_return_segment+0x5e><== NOT EXECUTED
return_status = RTEMS_INVALID_ADDRESS;
else {
the_region->number_of_used_blocks -= 1;
50c2a: 53aa 0064 subql #1,%a2@(100) <== NOT EXECUTED
_Region_Process_queue(the_region); /* unlocks allocator */
50c2e: 2f0a movel %a2,%sp@- <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
50c30: 95ca subal %a2,%a2 <== NOT EXECUTED
if ( !status )
return_status = RTEMS_INVALID_ADDRESS;
else {
the_region->number_of_used_blocks -= 1;
_Region_Process_queue(the_region); /* unlocks allocator */
50c32: 4eb9 0005 8050 jsr 58050 <_Region_Process_queue> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
50c38: 588f addql #4,%sp <== NOT EXECUTED
50c3a: 6018 bras 50c54 <rtems_region_return_segment+0x70><== NOT EXECUTED
break;
#endif
case OBJECTS_ERROR:
default:
return_status = RTEMS_INVALID_ID;
50c3c: 347c 0004 moveaw #4,%a2 <== NOT EXECUTED
50c40: 6004 bras 50c46 <rtems_region_return_segment+0x62><== NOT EXECUTED
status = _Region_Free_segment( the_region, segment );
_Region_Debug_Walk( the_region, 4 );
if ( !status )
return_status = RTEMS_INVALID_ADDRESS;
50c42: 347c 0009 moveaw #9,%a2 <== NOT EXECUTED
default:
return_status = RTEMS_INVALID_ID;
break;
}
_RTEMS_Unlock_allocator();
50c46: 2f39 0007 666c movel 7666c <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
50c4c: 4eb9 0005 2a14 jsr 52a14 <_API_Mutex_Unlock> <== NOT EXECUTED
return return_status;
50c52: 588f addql #4,%sp <== NOT EXECUTED
}
50c54: 200a movel %a2,%d0 <== NOT EXECUTED
50c56: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
50c5a: 4e5e unlk %fp <== NOT EXECUTED
...
000453c0 <rtems_semaphore_create>:
uint32_t count,
rtems_attribute attribute_set,
rtems_task_priority priority_ceiling,
rtems_id *id
)
{
453c0: 4e56 ffd0 linkw %fp,#-48
453c4: 48d7 0c3c moveml %d2-%d5/%a2-%a3,%sp@
453c8: 2a2e 0008 movel %fp@(8),%d5
453cc: 262e 000c movel %fp@(12),%d3
453d0: 242e 0010 movel %fp@(16),%d2
453d4: 266e 0018 moveal %fp@(24),%a3
register Semaphore_Control *the_semaphore;
CORE_mutex_Attributes the_mutex_attr;
CORE_semaphore_Attributes the_semaphore_attr;
CORE_mutex_Status mutex_status;
if ( !rtems_is_name_valid( name ) )
453d8: 4a85 tstl %d5
453da: 6700 0166 beqw 45542 <rtems_semaphore_create+0x182>
return RTEMS_INVALID_NAME;
if ( !id )
453de: 4a8b tstl %a3
453e0: 6700 0164 beqw 45546 <rtems_semaphore_create+0x186>
* id - semaphore id
* RTEMS_SUCCESSFUL - if successful
* error code - if unsuccessful
*/
rtems_status_code rtems_semaphore_create(
453e4: 2002 movel %d2,%d0
453e6: 0280 0000 00c0 andil #192,%d0
return RTEMS_NOT_DEFINED;
} else
#endif
if ( _Attributes_Is_inherit_priority( attribute_set ) ||
453ec: 671c beqs 4540a <rtems_semaphore_create+0x4a>
*/
RTEMS_INLINE_ROUTINE bool _Attributes_Is_binary_semaphore(
rtems_attribute attribute_set
)
{
return ((attribute_set & RTEMS_SEMAPHORE_CLASS) == RTEMS_BINARY_SEMAPHORE);
453ee: 7230 moveq #48,%d1
_Attributes_Is_priority_ceiling( attribute_set ) ) {
if ( ! (_Attributes_Is_binary_semaphore( attribute_set ) &&
453f0: 7810 moveq #16,%d4
453f2: c282 andl %d2,%d1
453f4: b881 cmpl %d1,%d4
453f6: 6600 0152 bnew 4554a <rtems_semaphore_create+0x18a>
453fa: 44c2 movew %d2,%ccr
453fc: 6600 014c bnew 4554a <rtems_semaphore_create+0x18a>
_Attributes_Is_priority( attribute_set ) ) )
return RTEMS_NOT_DEFINED;
}
if ( _Attributes_Is_inherit_priority( attribute_set ) &&
45400: 0c80 0000 00c0 cmpil #192,%d0
45406: 6700 0142 beqw 4554a <rtems_semaphore_create+0x18a>
*/
RTEMS_INLINE_ROUTINE bool _Attributes_Is_counting_semaphore(
rtems_attribute attribute_set
)
{
return ((attribute_set & RTEMS_SEMAPHORE_CLASS) == RTEMS_COUNTING_SEMAPHORE);
4540a: 7830 moveq #48,%d4
4540c: c882 andl %d2,%d4
_Attributes_Is_priority_ceiling( attribute_set ) )
return RTEMS_NOT_DEFINED;
if ( !_Attributes_Is_counting_semaphore( attribute_set ) && ( count > 1 ) )
4540e: 6708 beqs 45418 <rtems_semaphore_create+0x58>
45410: 7001 moveq #1,%d0
45412: b083 cmpl %d3,%d0
45414: 6500 0138 bcsw 4554e <rtems_semaphore_create+0x18e>
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
45418: 2039 0005 db08 movel 5db08 <_Thread_Dispatch_disable_level>,%d0
4541e: 5280 addql #1,%d0
45420: 23c0 0005 db08 movel %d0,5db08 <_Thread_Dispatch_disable_level>
* This function allocates a semaphore control block from
* the inactive chain of free semaphore control blocks.
*/
RTEMS_INLINE_ROUTINE Semaphore_Control *_Semaphore_Allocate( void )
{
return (Semaphore_Control *) _Objects_Allocate( &_Semaphore_Information );
45426: 4879 0005 da4c pea 5da4c <_Semaphore_Information>
4542c: 4eb9 0004 6874 jsr 46874 <_Objects_Allocate>
_Thread_Disable_dispatch(); /* prevents deletion */
the_semaphore = _Semaphore_Allocate();
if ( !the_semaphore ) {
45432: 588f addql #4,%sp
45434: 2440 moveal %d0,%a2
45436: 4a80 tstl %d0
45438: 660c bnes 45446 <rtems_semaphore_create+0x86>
_Thread_Enable_dispatch();
4543a: 4eb9 0004 77a6 jsr 477a6 <_Thread_Enable_dispatch>
return RTEMS_TOO_MANY;
45440: 7005 moveq #5,%d0
45442: 6000 010c braw 45550 <rtems_semaphore_create+0x190>
45446: 7004 moveq #4,%d0
_Thread_Enable_dispatch();
return RTEMS_TOO_MANY;
}
#endif
the_semaphore->attribute_set = attribute_set;
45448: 2542 0010 movel %d2,%a2@(16)
4544c: c082 andl %d2,%d0
/*
* Initialize it as a counting semaphore.
*/
if ( _Attributes_Is_counting_semaphore( attribute_set ) ) {
4544e: 4a84 tstl %d4
45450: 6632 bnes 45484 <rtems_semaphore_create+0xc4>
* This effectively disables limit checking.
*/
the_semaphore_attr.maximum_count = 0xFFFFFFFF;
if ( _Attributes_Is_priority( attribute_set ) )
the_semaphore_attr.discipline = CORE_SEMAPHORE_DISCIPLINES_PRIORITY;
45452: 4a80 tstl %d0
45454: 57c0 seq %d0
* The following are just to make Purify happy.
*/
the_mutex_attr.lock_nesting_behavior = CORE_MUTEX_NESTING_ACQUIRES;
the_mutex_attr.priority_ceiling = PRIORITY_MINIMUM;
_CORE_semaphore_Initialize(
45456: 2f03 movel %d3,%sp@-
45458: 486e fff8 pea %fp@(-8)
* This effectively disables limit checking.
*/
the_semaphore_attr.maximum_count = 0xFFFFFFFF;
if ( _Attributes_Is_priority( attribute_set ) )
the_semaphore_attr.discipline = CORE_SEMAPHORE_DISCIPLINES_PRIORITY;
4545c: 49c0 extbl %d0
*/
if ( _Attributes_Is_counting_semaphore( attribute_set ) ) {
/*
* This effectively disables limit checking.
*/
the_semaphore_attr.maximum_count = 0xFFFFFFFF;
4545e: 72ff moveq #-1,%d1
if ( _Attributes_Is_priority( attribute_set ) )
the_semaphore_attr.discipline = CORE_SEMAPHORE_DISCIPLINES_PRIORITY;
45460: 5280 addql #1,%d0
* The following are just to make Purify happy.
*/
the_mutex_attr.lock_nesting_behavior = CORE_MUTEX_NESTING_ACQUIRES;
the_mutex_attr.priority_ceiling = PRIORITY_MINIMUM;
_CORE_semaphore_Initialize(
45462: 486a 0014 pea %a2@(20)
*/
if ( _Attributes_Is_counting_semaphore( attribute_set ) ) {
/*
* This effectively disables limit checking.
*/
the_semaphore_attr.maximum_count = 0xFFFFFFFF;
45466: 2d41 fff8 movel %d1,%fp@(-8)
if ( _Attributes_Is_priority( attribute_set ) )
the_semaphore_attr.discipline = CORE_SEMAPHORE_DISCIPLINES_PRIORITY;
4546a: 2d40 fffc movel %d0,%fp@(-4)
the_semaphore_attr.discipline = CORE_SEMAPHORE_DISCIPLINES_FIFO;
/*
* The following are just to make Purify happy.
*/
the_mutex_attr.lock_nesting_behavior = CORE_MUTEX_NESTING_ACQUIRES;
4546e: 42ae ffea clrl %fp@(-22)
the_mutex_attr.priority_ceiling = PRIORITY_MINIMUM;
45472: 42ae fff4 clrl %fp@(-12)
_CORE_semaphore_Initialize(
45476: 4eb9 0004 62f8 jsr 462f8 <_CORE_semaphore_Initialize>
4547c: 4fef 000c lea %sp@(12),%sp
45480: 6000 009e braw 45520 <rtems_semaphore_create+0x160>
/*
* It is either simple binary semaphore or a more powerful mutex
* style binary semaphore. This is the mutex style.
*/
if ( _Attributes_Is_priority( attribute_set ) )
the_mutex_attr.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY;
45484: 4a80 tstl %d0
45486: 57c0 seq %d0
45488: 49c0 extbl %d0
4548a: 5280 addql #1,%d0
4548c: 2d40 fff0 movel %d0,%fp@(-16)
else
the_mutex_attr.discipline = CORE_MUTEX_DISCIPLINES_FIFO;
if ( _Attributes_Is_binary_semaphore( attribute_set ) ) {
45490: 7010 moveq #16,%d0
45492: b084 cmpl %d4,%d0
45494: 6640 bnes 454d6 <rtems_semaphore_create+0x116>
the_mutex_attr.priority_ceiling = priority_ceiling;
the_mutex_attr.lock_nesting_behavior = CORE_MUTEX_NESTING_ACQUIRES;
45496: 42ae ffea clrl %fp@(-22)
the_mutex_attr.only_owner_release = false;
if ( the_mutex_attr.discipline == CORE_MUTEX_DISCIPLINES_PRIORITY ) {
4549a: 7801 moveq #1,%d4
the_mutex_attr.discipline = CORE_MUTEX_DISCIPLINES_FIFO;
if ( _Attributes_Is_binary_semaphore( attribute_set ) ) {
the_mutex_attr.priority_ceiling = priority_ceiling;
the_mutex_attr.lock_nesting_behavior = CORE_MUTEX_NESTING_ACQUIRES;
the_mutex_attr.only_owner_release = false;
4549c: 4201 clrb %d1
the_mutex_attr.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY;
else
the_mutex_attr.discipline = CORE_MUTEX_DISCIPLINES_FIFO;
if ( _Attributes_Is_binary_semaphore( attribute_set ) ) {
the_mutex_attr.priority_ceiling = priority_ceiling;
4549e: 2d6e 0014 fff4 movel %fp@(20),%fp@(-12)
the_mutex_attr.lock_nesting_behavior = CORE_MUTEX_NESTING_ACQUIRES;
the_mutex_attr.only_owner_release = false;
454a4: 1d41 ffee moveb %d1,%fp@(-18)
if ( the_mutex_attr.discipline == CORE_MUTEX_DISCIPLINES_PRIORITY ) {
454a8: b8ae fff0 cmpl %fp@(-16),%d4
454ac: 6634 bnes 454e2 <rtems_semaphore_create+0x122>
if ( _Attributes_Is_inherit_priority( attribute_set ) ) {
454ae: 0802 0006 btst #6,%d2
454b2: 6710 beqs 454c4 <rtems_semaphore_create+0x104> <== NEVER TAKEN
the_mutex_attr.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT;
454b4: 103c 0002 moveb #2,%d0
the_mutex_attr.only_owner_release = true;
454b8: 7201 moveq #1,%d1
the_mutex_attr.lock_nesting_behavior = CORE_MUTEX_NESTING_ACQUIRES;
the_mutex_attr.only_owner_release = false;
if ( the_mutex_attr.discipline == CORE_MUTEX_DISCIPLINES_PRIORITY ) {
if ( _Attributes_Is_inherit_priority( attribute_set ) ) {
the_mutex_attr.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT;
454ba: 2d40 fff0 movel %d0,%fp@(-16)
the_mutex_attr.only_owner_release = true;
454be: 1d41 ffee moveb %d1,%fp@(-18)
454c2: 601e bras 454e2 <rtems_semaphore_create+0x122>
} else if ( _Attributes_Is_priority_ceiling( attribute_set ) ) {
454c4: 4a02 tstb %d2 <== NOT EXECUTED
454c6: 6c1a bges 454e2 <rtems_semaphore_create+0x122> <== NOT EXECUTED
the_mutex_attr.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING;
454c8: 7803 moveq #3,%d4 <== NOT EXECUTED
the_mutex_attr.only_owner_release = true;
454ca: 7001 moveq #1,%d0 <== NOT EXECUTED
if ( the_mutex_attr.discipline == CORE_MUTEX_DISCIPLINES_PRIORITY ) {
if ( _Attributes_Is_inherit_priority( attribute_set ) ) {
the_mutex_attr.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT;
the_mutex_attr.only_owner_release = true;
} else if ( _Attributes_Is_priority_ceiling( attribute_set ) ) {
the_mutex_attr.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING;
454cc: 2d44 fff0 movel %d4,%fp@(-16) <== NOT EXECUTED
the_mutex_attr.only_owner_release = true;
454d0: 1d40 ffee moveb %d0,%fp@(-18) <== NOT EXECUTED
454d4: 600c bras 454e2 <rtems_semaphore_create+0x122> <== NOT EXECUTED
}
}
} else /* must be simple binary semaphore */ {
the_mutex_attr.lock_nesting_behavior = CORE_MUTEX_NESTING_BLOCKS;
454d6: 7202 moveq #2,%d1
the_mutex_attr.only_owner_release = false;
454d8: 4204 clrb %d4
the_mutex_attr.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING;
the_mutex_attr.only_owner_release = true;
}
}
} else /* must be simple binary semaphore */ {
the_mutex_attr.lock_nesting_behavior = CORE_MUTEX_NESTING_BLOCKS;
454da: 2d41 ffea movel %d1,%fp@(-22)
the_mutex_attr.only_owner_release = false;
454de: 1d44 ffee moveb %d4,%fp@(-18)
}
mutex_status = _CORE_mutex_Initialize(
454e2: 7001 moveq #1,%d0
454e4: b083 cmpl %d3,%d0
454e6: 57c0 seq %d0
454e8: 49c0 extbl %d0
454ea: 4480 negl %d0
454ec: 2f00 movel %d0,%sp@-
454ee: 486e ffea pea %fp@(-22)
454f2: 486a 0014 pea %a2@(20)
454f6: 4eb9 0004 6058 jsr 46058 <_CORE_mutex_Initialize>
&the_semaphore->Core_control.mutex,
&the_mutex_attr,
(count == 1) ? CORE_MUTEX_UNLOCKED : CORE_MUTEX_LOCKED
);
if ( mutex_status == CORE_MUTEX_STATUS_CEILING_VIOLATED ) {
454fc: 4fef 000c lea %sp@(12),%sp
45500: 7206 moveq #6,%d1
45502: b280 cmpl %d0,%d1
45504: 661a bnes 45520 <rtems_semaphore_create+0x160> <== ALWAYS TAKEN
*/
RTEMS_INLINE_ROUTINE void _Semaphore_Free (
Semaphore_Control *the_semaphore
)
{
_Objects_Free( &_Semaphore_Information, &the_semaphore->Object );
45506: 2f0a movel %a2,%sp@- <== NOT EXECUTED
45508: 4879 0005 da4c pea 5da4c <_Semaphore_Information> <== NOT EXECUTED
4550e: 4eb9 0004 6b68 jsr 46b68 <_Objects_Free> <== NOT EXECUTED
_Semaphore_Free( the_semaphore );
_Thread_Enable_dispatch();
45514: 4eb9 0004 77a6 jsr 477a6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_INVALID_PRIORITY;
4551a: 508f addql #8,%sp <== NOT EXECUTED
4551c: 7013 moveq #19,%d0 <== NOT EXECUTED
4551e: 6030 bras 45550 <rtems_semaphore_create+0x190> <== NOT EXECUTED
Objects_Name name
)
{
_Objects_Set_local_object(
information,
_Objects_Get_index( the_object->id ),
45520: 202a 0008 movel %a2@(8),%d0
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
45524: 4281 clrl %d1
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
45526: 2079 0005 da64 moveal 5da64 <_Semaphore_Information+0x18>,%a0
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
4552c: 3200 movew %d0,%d1
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
4552e: 218a 1c00 movel %a2,%a0@(00000000,%d1:l:4)
information,
_Objects_Get_index( the_object->id ),
the_object
);
the_object->name = name;
45532: 2545 000c movel %d5,%a2@(12)
&_Semaphore_Information,
&the_semaphore->Object,
(Objects_Name) name
);
*id = the_semaphore->Object.id;
45536: 2680 movel %d0,%a3@
the_semaphore->Object.id,
name,
0 /* Not used */
);
#endif
_Thread_Enable_dispatch();
45538: 4eb9 0004 77a6 jsr 477a6 <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
4553e: 4280 clrl %d0
45540: 600e bras 45550 <rtems_semaphore_create+0x190>
CORE_mutex_Attributes the_mutex_attr;
CORE_semaphore_Attributes the_semaphore_attr;
CORE_mutex_Status mutex_status;
if ( !rtems_is_name_valid( name ) )
return RTEMS_INVALID_NAME;
45542: 7003 moveq #3,%d0 <== NOT EXECUTED
45544: 600a bras 45550 <rtems_semaphore_create+0x190> <== NOT EXECUTED
if ( !id )
return RTEMS_INVALID_ADDRESS;
45546: 7009 moveq #9,%d0 <== NOT EXECUTED
45548: 6006 bras 45550 <rtems_semaphore_create+0x190> <== NOT EXECUTED
}
if ( _Attributes_Is_inherit_priority( attribute_set ) &&
_Attributes_Is_priority_ceiling( attribute_set ) )
return RTEMS_NOT_DEFINED;
4554a: 700b moveq #11,%d0 <== NOT EXECUTED
4554c: 6002 bras 45550 <rtems_semaphore_create+0x190> <== NOT EXECUTED
if ( !_Attributes_Is_counting_semaphore( attribute_set ) && ( count > 1 ) )
return RTEMS_INVALID_NUMBER;
4554e: 700a moveq #10,%d0 <== NOT EXECUTED
0 /* Not used */
);
#endif
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
45550: 4cee 0c3c ffd0 moveml %fp@(-48),%d2-%d5/%a2-%a3
45556: 4e5e unlk %fp
...
0004555c <rtems_semaphore_delete>:
#endif
rtems_status_code rtems_semaphore_delete(
rtems_id id
)
{
4555c: 4e56 fffc linkw %fp,#-4
45560: 2f0a movel %a2,%sp@-
Objects_Id id,
Objects_Locations *location
)
{
return (Semaphore_Control *)
_Objects_Get( &_Semaphore_Information, id, location );
45562: 486e fffc pea %fp@(-4)
45566: 2f2e 0008 movel %fp@(8),%sp@-
4556a: 4879 0005 da4c pea 5da4c <_Semaphore_Information>
45570: 4eb9 0004 6ccc jsr 46ccc <_Objects_Get>
register Semaphore_Control *the_semaphore;
Objects_Locations location;
the_semaphore = _Semaphore_Get( id, &location );
switch ( location ) {
45576: 4fef 000c lea %sp@(12),%sp
4557a: 2440 moveal %d0,%a2
4557c: 4aae fffc tstl %fp@(-4)
45580: 666c bnes 455ee <rtems_semaphore_delete+0x92> <== NEVER TAKEN
45582: 7030 moveq #48,%d0
45584: c0aa 0010 andl %a2@(16),%d0
case OBJECTS_LOCAL:
if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) {
45588: 6728 beqs 455b2 <rtems_semaphore_delete+0x56>
if ( _CORE_mutex_Is_locked( &the_semaphore->Core_control.mutex ) &&
4558a: 4aaa 0062 tstl %a2@(98)
4558e: 6610 bnes 455a0 <rtems_semaphore_delete+0x44>
45590: 7220 moveq #32,%d1
45592: b280 cmpl %d0,%d1
45594: 670a beqs 455a0 <rtems_semaphore_delete+0x44> <== ALWAYS TAKEN
!_Attributes_Is_simple_binary_semaphore(
the_semaphore->attribute_set ) ) {
_Thread_Enable_dispatch();
45596: 4eb9 0004 77a6 jsr 477a6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_RESOURCE_IN_USE;
4559c: 700c moveq #12,%d0 <== NOT EXECUTED
4559e: 6050 bras 455f0 <rtems_semaphore_delete+0x94> <== NOT EXECUTED
}
_CORE_mutex_Flush(
455a0: 4878 0004 pea 4 <CONTEXT_ARG>
455a4: 42a7 clrl %sp@-
455a6: 486a 0014 pea %a2@(20)
455aa: 4eb9 0004 604c jsr 4604c <_CORE_mutex_Flush>
455b0: 6010 bras 455c2 <rtems_semaphore_delete+0x66>
&the_semaphore->Core_control.mutex,
SEMAPHORE_MP_OBJECT_WAS_DELETED,
CORE_MUTEX_WAS_DELETED
);
} else {
_CORE_semaphore_Flush(
455b2: 4878 0002 pea 2 <DOUBLE_FLOAT>
455b6: 42a7 clrl %sp@-
455b8: 486a 0014 pea %a2@(20)
455bc: 4eb9 0004 62ec jsr 462ec <_CORE_semaphore_Flush>
SEMAPHORE_MP_OBJECT_WAS_DELETED,
CORE_SEMAPHORE_WAS_DELETED
);
}
_Objects_Close( &_Semaphore_Information, &the_semaphore->Object );
455c2: 508f addql #8,%sp
455c4: 2e8a movel %a2,%sp@
455c6: 4879 0005 da4c pea 5da4c <_Semaphore_Information>
455cc: 4eb9 0004 68f0 jsr 468f0 <_Objects_Close>
*/
RTEMS_INLINE_ROUTINE void _Semaphore_Free (
Semaphore_Control *the_semaphore
)
{
_Objects_Free( &_Semaphore_Information, &the_semaphore->Object );
455d2: 2f0a movel %a2,%sp@-
455d4: 4879 0005 da4c pea 5da4c <_Semaphore_Information>
455da: 4eb9 0004 6b68 jsr 46b68 <_Objects_Free>
0, /* Not used */
0 /* Not used */
);
}
#endif
_Thread_Enable_dispatch();
455e0: 4eb9 0004 77a6 jsr 477a6 <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
455e6: 4fef 0010 lea %sp@(16),%sp
455ea: 4280 clrl %d0
455ec: 6002 bras 455f0 <rtems_semaphore_delete+0x94>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
455ee: 7004 moveq #4,%d0 <== NOT EXECUTED
}
455f0: 246e fff8 moveal %fp@(-8),%a2
455f4: 4e5e unlk %fp <== NOT EXECUTED
0004dc9c <rtems_semaphore_flush>:
#endif
rtems_status_code rtems_semaphore_flush(
rtems_id id
)
{
4dc9c: 4e56 fffc linkw %fp,#-4
4dca0: 486e fffc pea %fp@(-4)
4dca4: 2f2e 0008 movel %fp@(8),%sp@-
4dca8: 4879 0006 10e4 pea 610e4 <_Semaphore_Information>
4dcae: 4eb9 0004 7cd4 jsr 47cd4 <_Objects_Get>
register Semaphore_Control *the_semaphore;
Objects_Locations location;
the_semaphore = _Semaphore_Get( id, &location );
switch ( location ) {
4dcb4: 4fef 000c lea %sp@(12),%sp
4dcb8: 4aae fffc tstl %fp@(-4)
4dcbc: 663c bnes 4dcfa <rtems_semaphore_flush+0x5e> <== NEVER TAKEN
4dcbe: 2040 moveal %d0,%a0
4dcc0: 7230 moveq #48,%d1
4dcc2: 0680 0000 0014 addil #20,%d0
4dcc8: c2a8 0010 andl %a0@(16),%d1
case OBJECTS_LOCAL:
if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) {
4dccc: 6710 beqs 4dcde <rtems_semaphore_flush+0x42> <== NEVER TAKEN
_CORE_mutex_Flush(
4dcce: 4878 0001 pea 1 <ADD>
4dcd2: 42a7 clrl %sp@-
4dcd4: 2f00 movel %d0,%sp@-
4dcd6: 4eb9 0004 7054 jsr 47054 <_CORE_mutex_Flush>
4dcdc: 600e bras 4dcec <rtems_semaphore_flush+0x50>
&the_semaphore->Core_control.mutex,
SEND_OBJECT_WAS_DELETED,
CORE_MUTEX_STATUS_UNSATISFIED_NOWAIT
);
} else {
_CORE_semaphore_Flush(
4dcde: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
4dce2: 42a7 clrl %sp@- <== NOT EXECUTED
4dce4: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4dce6: 4eb9 0004 72f4 jsr 472f4 <_CORE_semaphore_Flush> <== NOT EXECUTED
4dcec: 4fef 000c lea %sp@(12),%sp
&the_semaphore->Core_control.semaphore,
SEND_OBJECT_WAS_DELETED,
CORE_SEMAPHORE_STATUS_UNSATISFIED_NOWAIT
);
}
_Thread_Enable_dispatch();
4dcf0: 4eb9 0004 87c2 jsr 487c2 <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
4dcf6: 4280 clrl %d0
4dcf8: 6002 bras 4dcfc <rtems_semaphore_flush+0x60>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
4dcfa: 7004 moveq #4,%d0
}
4dcfc: 4e5e unlk %fp <== NOT EXECUTED
00050efc <rtems_semaphore_ident>:
rtems_status_code rtems_semaphore_ident(
rtems_name name,
uint32_t node,
rtems_id *id
)
{
50efc: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
Objects_Name_or_id_lookup_errors status;
status = _Objects_Name_to_id_u32( &_Semaphore_Information, name, node, id );
50f00: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
50f04: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
50f08: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
50f0c: 4879 0007 64f0 pea 764f0 <_Semaphore_Information> <== NOT EXECUTED
50f12: 4eb9 0005 457c jsr 5457c <_Objects_Name_to_id_u32> <== NOT EXECUTED
return _Status_Object_name_errors_to_status[ status ];
}
50f18: 41f9 0006 f980 lea 6f980 <_Status_Object_name_errors_to_status>,%a0<== NOT EXECUTED
50f1e: 4e5e unlk %fp <== NOT EXECUTED
50f20: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0 <== NOT EXECUTED
...
000455f8 <rtems_semaphore_obtain>:
rtems_status_code rtems_semaphore_obtain(
rtems_id id,
rtems_option option_set,
rtems_interval timeout
)
{
455f8: 4e56 ffec linkw %fp,#-20
455fc: 48d7 001c moveml %d2-%d4,%sp@
Objects_Locations *location,
ISR_Level *level
)
{
return (Semaphore_Control *)
_Objects_Get_isr_disable( &_Semaphore_Information, id, location, level );
45600: 486e fff8 pea %fp@(-8)
45604: 486e fffc pea %fp@(-4)
45608: 242e 0008 movel %fp@(8),%d2
4560c: 2f02 movel %d2,%sp@-
4560e: 4879 0005 da4c pea 5da4c <_Semaphore_Information>
45614: 282e 000c movel %fp@(12),%d4
45618: 262e 0010 movel %fp@(16),%d3
4561c: 4eb9 0004 6c74 jsr 46c74 <_Objects_Get_isr_disable>
register Semaphore_Control *the_semaphore;
Objects_Locations location;
ISR_Level level;
the_semaphore = _Semaphore_Get_interrupt_disable( id, &location, &level );
switch ( location ) {
45622: 4fef 0010 lea %sp@(16),%sp
45626: 2040 moveal %d0,%a0
45628: 4aae fffc tstl %fp@(-4)
4562c: 6600 00c4 bnew 456f2 <rtems_semaphore_obtain+0xfa>
45630: 7030 moveq #48,%d0
45632: c0a8 0010 andl %a0@(16),%d0
case OBJECTS_LOCAL:
if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) {
45636: 6732 beqs 4566a <rtems_semaphore_obtain+0x72> <== NEVER TAKEN
_CORE_mutex_Seize(
45638: 2f2e fff8 movel %fp@(-8),%sp@-
*/
RTEMS_INLINE_ROUTINE bool _Options_Is_no_wait (
rtems_option option_set
)
{
return (option_set & RTEMS_NO_WAIT) ? true : false;
4563c: 7001 moveq #1,%d0
4563e: c880 andl %d0,%d4
45640: 2f03 movel %d3,%sp@-
45642: b980 eorl %d4,%d0
45644: 2f00 movel %d0,%sp@-
45646: 2f02 movel %d2,%sp@-
45648: 4868 0014 pea %a0@(20)
4564c: 4eb9 0004 6164 jsr 46164 <_CORE_mutex_Seize>
((_Options_Is_no_wait( option_set )) ? false : true),
timeout,
level
);
return _Semaphore_Translate_core_mutex_return_code(
_Thread_Executing->Wait.return_code );
45652: 2079 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a0
id,
((_Options_Is_no_wait( option_set )) ? false : true),
timeout,
level
);
return _Semaphore_Translate_core_mutex_return_code(
45658: 2f28 0034 movel %a0@(52),%sp@-
4565c: 4eb9 0004 5784 jsr 45784 <_Semaphore_Translate_core_mutex_return_code>
45662: 4fef 0018 lea %sp@(24),%sp
45666: 6000 008c braw 456f4 <rtems_semaphore_obtain+0xfc>
{
Thread_Control *executing;
/* disabled when you get here */
executing = _Thread_Executing;
4566a: 2279 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a1 <== NOT EXECUTED
executing->Wait.return_code = CORE_SEMAPHORE_STATUS_SUCCESSFUL;
if ( the_semaphore->count != 0 ) {
45670: 2028 005c movel %a0@(92),%d0 <== NOT EXECUTED
Thread_Control *executing;
/* disabled when you get here */
executing = _Thread_Executing;
executing->Wait.return_code = CORE_SEMAPHORE_STATUS_SUCCESSFUL;
45674: 42a9 0034 clrl %a1@(52) <== NOT EXECUTED
if ( the_semaphore->count != 0 ) {
45678: 4a80 tstl %d0 <== NOT EXECUTED
4567a: 670e beqs 4568a <rtems_semaphore_obtain+0x92> <== NOT EXECUTED
the_semaphore->count -= 1;
4567c: 5380 subql #1,%d0 <== NOT EXECUTED
4567e: 2140 005c movel %d0,%a0@(92) <== NOT EXECUTED
_ISR_Enable( *level_p );
45682: 202e fff8 movel %fp@(-8),%d0 <== NOT EXECUTED
45686: 46c0 movew %d0,%sr <== NOT EXECUTED
45688: 6054 bras 456de <rtems_semaphore_obtain+0xe6> <== NOT EXECUTED
return;
}
if ( !wait ) {
4568a: 0804 0000 btst #0,%d4 <== NOT EXECUTED
4568e: 670e beqs 4569e <rtems_semaphore_obtain+0xa6> <== NOT EXECUTED
_ISR_Enable( *level_p );
45690: 202e fff8 movel %fp@(-8),%d0 <== NOT EXECUTED
45694: 46c0 movew %d0,%sr <== NOT EXECUTED
executing->Wait.return_code = CORE_SEMAPHORE_STATUS_UNSATISFIED_NOWAIT;
45696: 7001 moveq #1,%d0 <== NOT EXECUTED
45698: 2340 0034 movel %d0,%a1@(52) <== NOT EXECUTED
4569c: 6040 bras 456de <rtems_semaphore_obtain+0xe6> <== NOT EXECUTED
4569e: 2039 0005 db08 movel 5db08 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
456a4: 5280 addql #1,%d0 <== NOT EXECUTED
456a6: 23c0 0005 db08 movel %d0,5db08 <_Thread_Dispatch_disable_level><== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Thread_queue_Enter_critical_section (
Thread_queue_Control *the_thread_queue
)
{
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
456ac: 7001 moveq #1,%d0 <== NOT EXECUTED
456ae: 2140 0044 movel %d0,%a0@(68) <== NOT EXECUTED
return;
}
_Thread_Disable_dispatch();
_Thread_queue_Enter_critical_section( &the_semaphore->Wait_queue );
executing->Wait.queue = &the_semaphore->Wait_queue;
456b2: 41e8 0014 lea %a0@(20),%a0 <== NOT EXECUTED
executing->Wait.id = id;
456b6: 2342 0020 movel %d2,%a1@(32) <== NOT EXECUTED
return;
}
_Thread_Disable_dispatch();
_Thread_queue_Enter_critical_section( &the_semaphore->Wait_queue );
executing->Wait.queue = &the_semaphore->Wait_queue;
456ba: 2348 0044 movel %a0,%a1@(68) <== NOT EXECUTED
executing->Wait.id = id;
_ISR_Enable( *level_p );
456be: 202e fff8 movel %fp@(-8),%d0 <== NOT EXECUTED
456c2: 46c0 movew %d0,%sr <== NOT EXECUTED
_Thread_queue_Enqueue( &the_semaphore->Wait_queue, timeout );
456c4: 4879 0004 7f1c pea 47f1c <_Thread_queue_Timeout> <== NOT EXECUTED
456ca: 2f03 movel %d3,%sp@- <== NOT EXECUTED
456cc: 2f08 movel %a0,%sp@- <== NOT EXECUTED
456ce: 4eb9 0004 7c08 jsr 47c08 <_Thread_queue_Enqueue_with_handler><== NOT EXECUTED
_Thread_Enable_dispatch();
456d4: 4eb9 0004 77a6 jsr 477a6 <_Thread_Enable_dispatch> <== NOT EXECUTED
456da: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
((_Options_Is_no_wait( option_set )) ? false : true),
timeout,
&level
);
return _Semaphore_Translate_core_semaphore_return_code(
_Thread_Executing->Wait.return_code );
456de: 2079 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
id,
((_Options_Is_no_wait( option_set )) ? false : true),
timeout,
&level
);
return _Semaphore_Translate_core_semaphore_return_code(
456e4: 2f28 0034 movel %a0@(52),%sp@- <== NOT EXECUTED
456e8: 4eb9 0004 579a jsr 4579a <_Semaphore_Translate_core_semaphore_return_code><== NOT EXECUTED
456ee: 588f addql #4,%sp <== NOT EXECUTED
456f0: 6002 bras 456f4 <rtems_semaphore_obtain+0xfc> <== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
456f2: 7004 moveq #4,%d0 <== NOT EXECUTED
}
456f4: 4cee 001c ffec moveml %fp@(-20),%d2-%d4
456fa: 4e5e unlk %fp
...
00045700 <rtems_semaphore_release>:
#endif
rtems_status_code rtems_semaphore_release(
rtems_id id
)
{
45700: 4e56 fffc linkw %fp,#-4
45704: 2f0a movel %a2,%sp@-
45706: 2f02 movel %d2,%sp@-
Objects_Id id,
Objects_Locations *location
)
{
return (Semaphore_Control *)
_Objects_Get( &_Semaphore_Information, id, location );
45708: 486e fffc pea %fp@(-4)
4570c: 242e 0008 movel %fp@(8),%d2
45710: 2f02 movel %d2,%sp@-
45712: 4879 0005 da4c pea 5da4c <_Semaphore_Information>
45718: 4eb9 0004 6ccc jsr 46ccc <_Objects_Get>
Objects_Locations location;
CORE_mutex_Status mutex_status;
CORE_semaphore_Status semaphore_status;
the_semaphore = _Semaphore_Get( id, &location );
switch ( location ) {
4571e: 4fef 000c lea %sp@(12),%sp
45722: 4aae fffc tstl %fp@(-4)
45726: 664e bnes 45776 <rtems_semaphore_release+0x76> <== NEVER TAKEN
45728: 2040 moveal %d0,%a0
4572a: 7230 moveq #48,%d1
4572c: 0680 0000 0014 addil #20,%d0
45732: 45f9 0004 77a6 lea 477a6 <_Thread_Enable_dispatch>,%a2
45738: c2a8 0010 andl %a0@(16),%d1
case OBJECTS_LOCAL:
if ( !_Attributes_Is_counting_semaphore(the_semaphore->attribute_set) ) {
4573c: 671a beqs 45758 <rtems_semaphore_release+0x58> <== NEVER TAKEN
mutex_status = _CORE_mutex_Surrender(
4573e: 42a7 clrl %sp@-
45740: 2f02 movel %d2,%sp@-
45742: 2f00 movel %d0,%sp@-
45744: 4eb9 0004 6208 jsr 46208 <_CORE_mutex_Surrender>
4574a: 2400 movel %d0,%d2
&the_semaphore->Core_control.mutex,
id,
MUTEX_MP_SUPPORT
);
_Thread_Enable_dispatch();
4574c: 4e92 jsr %a2@
return _Semaphore_Translate_core_mutex_return_code( mutex_status );
4574e: 2f02 movel %d2,%sp@-
45750: 4eb9 0004 5784 jsr 45784 <_Semaphore_Translate_core_mutex_return_code>
45756: 6018 bras 45770 <rtems_semaphore_release+0x70>
} else {
semaphore_status = _CORE_semaphore_Surrender(
45758: 42a7 clrl %sp@- <== NOT EXECUTED
4575a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4575c: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4575e: 4eb9 0004 6340 jsr 46340 <_CORE_semaphore_Surrender> <== NOT EXECUTED
45764: 2400 movel %d0,%d2 <== NOT EXECUTED
&the_semaphore->Core_control.semaphore,
id,
MUTEX_MP_SUPPORT
);
_Thread_Enable_dispatch();
45766: 4e92 jsr %a2@ <== NOT EXECUTED
return
45768: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4576a: 4eb9 0004 579a jsr 4579a <_Semaphore_Translate_core_semaphore_return_code><== NOT EXECUTED
45770: 4fef 0010 lea %sp@(16),%sp
45774: 6002 bras 45778 <rtems_semaphore_release+0x78>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
45776: 7004 moveq #4,%d0 <== NOT EXECUTED
}
45778: 242e fff4 movel %fp@(-12),%d2
4577c: 246e fff8 moveal %fp@(-8),%a2
45780: 4e5e unlk %fp <== NOT EXECUTED
00045c3c <rtems_shutdown_executive>:
void rtems_shutdown_executive(
uint32_t result
)
{
if ( _System_state_Is_up( _System_state_Get() ) ) {
45c3c: 7003 moveq #3,%d0
*/
void rtems_shutdown_executive(
uint32_t result
)
{
45c3e: 4e56 0000 linkw %fp,#0
if ( _System_state_Is_up( _System_state_Get() ) ) {
45c42: b0b9 0005 dc74 cmpl 5dc74 <_System_state_Current>,%d0
45c48: 6618 bnes 45c62 <rtems_shutdown_executive+0x26>
45c4a: 103c 0004 moveb #4,%d0
* if we were running within the same context, it would work.
*
* And we will not return to this thread, so there is no point of
* saving the context.
*/
_Context_Restart_self( &_Thread_BSP_context );
45c4e: 4879 0005 dad4 pea 5dad4 <_Thread_BSP_context>
45c54: 23c0 0005 dc74 movel %d0,5dc74 <_System_state_Current>
45c5a: 4eb9 0004 8812 jsr 48812 <_CPU_Context_Restart_self>
45c60: 588f addql #4,%sp <== NOT EXECUTED
_System_state_Set( SYSTEM_STATE_SHUTDOWN );
_Thread_Stop_multitasking();
}
_Internal_error_Occurred(
45c62: 4878 0014 pea 14 <OPER2>
45c66: 4878 0001 pea 1 <ADD>
45c6a: 42a7 clrl %sp@-
45c6c: 4eb9 0004 67c0 jsr 467c0 <_Internal_error_Occurred>
...
00046568 <rtems_signal_catch>:
rtems_status_code rtems_signal_catch(
rtems_asr_entry asr_handler,
rtems_mode mode_set
)
{
46568: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4656c: 2239 0005 ef30 movel 5ef30 <_Thread_Dispatch_disable_level>,%d1<== NOT EXECUTED
46572: 5281 addql #1,%d1 <== NOT EXECUTED
RTEMS_API_Control *api;
ASR_Information *asr;
/* XXX normalize mode */
executing = _Thread_Executing;
api = (RTEMS_API_Control*)executing->API_Extensions[ THREAD_API_RTEMS ];
46574: 2079 0005 f3be moveal 5f3be <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
rtems_status_code rtems_signal_catch(
rtems_asr_entry asr_handler,
rtems_mode mode_set
)
{
4657a: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
RTEMS_API_Control *api;
ASR_Information *asr;
/* XXX normalize mode */
executing = _Thread_Executing;
api = (RTEMS_API_Control*)executing->API_Extensions[ THREAD_API_RTEMS ];
4657e: 2068 00fe moveal %a0@(254),%a0 <== NOT EXECUTED
46582: 23c1 0005 ef30 movel %d1,5ef30 <_Thread_Dispatch_disable_level><== NOT EXECUTED
asr = &api->Signal;
_Thread_Disable_dispatch(); /* cannot reschedule while */
/* the thread is inconsistent */
if ( !_ASR_Is_null_handler( asr_handler ) ) {
46588: 4a80 tstl %d0 <== NOT EXECUTED
4658a: 670c beqs 46598 <rtems_signal_catch+0x30> <== NOT EXECUTED
asr->mode_set = mode_set;
asr->handler = asr_handler;
4658c: 2140 000a movel %d0,%a0@(10) <== NOT EXECUTED
_Thread_Disable_dispatch(); /* cannot reschedule while */
/* the thread is inconsistent */
if ( !_ASR_Is_null_handler( asr_handler ) ) {
asr->mode_set = mode_set;
46590: 216e 000c 000e movel %fp@(12),%a0@(14) <== NOT EXECUTED
46596: 601a bras 465b2 <rtems_signal_catch+0x4a> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _ASR_Initialize (
ASR_Information *information
)
{
information->is_enabled = false;
information->handler = NULL;
46598: 42a8 000a clrl %a0@(10) <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _ASR_Initialize (
ASR_Information *information
)
{
information->is_enabled = false;
4659c: 4200 clrb %d0 <== NOT EXECUTED
information->handler = NULL;
information->mode_set = RTEMS_DEFAULT_MODES;
4659e: 42a8 000e clrl %a0@(14) <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _ASR_Initialize (
ASR_Information *information
)
{
information->is_enabled = false;
465a2: 1140 0008 moveb %d0,%a0@(8) <== NOT EXECUTED
information->handler = NULL;
information->mode_set = RTEMS_DEFAULT_MODES;
information->signals_posted = 0;
465a6: 42a8 0012 clrl %a0@(18) <== NOT EXECUTED
information->signals_pending = 0;
465aa: 42a8 0016 clrl %a0@(22) <== NOT EXECUTED
information->nest_level = 0;
465ae: 42a8 001a clrl %a0@(26) <== NOT EXECUTED
asr->handler = asr_handler;
}
else
_ASR_Initialize( asr );
_Thread_Enable_dispatch();
465b2: 4eb9 0004 87fa jsr 487fa <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
}
465b8: 4280 clrl %d0 <== NOT EXECUTED
465ba: 4e5e unlk %fp <== NOT EXECUTED
...
000510e0 <rtems_signal_send>:
rtems_status_code rtems_signal_send(
rtems_id id,
rtems_signal_set signal_set
)
{
510e0: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
510e4: 2f03 movel %d3,%sp@- <== NOT EXECUTED
510e6: 2f02 movel %d2,%sp@- <== NOT EXECUTED
510e8: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
register Thread_Control *the_thread;
Objects_Locations location;
RTEMS_API_Control *api;
ASR_Information *asr;
if ( !signal_set )
510ec: 677a beqs 51168 <rtems_signal_send+0x88> <== NOT EXECUTED
return RTEMS_INVALID_NUMBER;
the_thread = _Thread_Get( id, &location );
510ee: 486e fffc pea %fp@(-4) <== NOT EXECUTED
510f2: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
510f6: 4eb9 0005 4ef0 jsr 54ef0 <_Thread_Get> <== NOT EXECUTED
switch ( location ) {
510fc: 508f addql #8,%sp <== NOT EXECUTED
510fe: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
51102: 6668 bnes 5116c <rtems_signal_send+0x8c> <== NOT EXECUTED
case OBJECTS_LOCAL:
api = the_thread->API_Extensions[ THREAD_API_RTEMS ];
51104: 2240 moveal %d0,%a1 <== NOT EXECUTED
51106: 2069 00fe moveal %a1@(254),%a0 <== NOT EXECUTED
asr = &api->Signal;
if ( ! _ASR_Is_null_handler( asr->handler ) ) {
5110a: 4aa8 000a tstl %a0@(10) <== NOT EXECUTED
5110e: 674e beqs 5115e <rtems_signal_send+0x7e> <== NOT EXECUTED
if ( asr->is_enabled ) {
51110: 4a28 0008 tstb %a0@(8) <== NOT EXECUTED
51114: 672c beqs 51142 <rtems_signal_send+0x62> <== NOT EXECUTED
rtems_signal_set *signal_set
)
{
ISR_Level _level;
_ISR_Disable( _level );
51116: 223c 0000 0700 movel #1792,%d1 <== NOT EXECUTED
5111c: 40c3 movew %sr,%d3 <== NOT EXECUTED
5111e: 8283 orl %d3,%d1 <== NOT EXECUTED
51120: 46c1 movew %d1,%sr <== NOT EXECUTED
*signal_set |= signals;
51122: 85a8 0012 orl %d2,%a0@(18) <== NOT EXECUTED
_ISR_Enable( _level );
51126: 46c3 movew %d3,%sr <== NOT EXECUTED
_ASR_Post_signals( signal_set, &asr->signals_posted );
if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) )
51128: 4ab9 0007 6a3e tstl 76a3e <_Per_CPU_Information+0x8> <== NOT EXECUTED
5112e: 6724 beqs 51154 <rtems_signal_send+0x74> <== NOT EXECUTED
51130: b0b9 0007 6a42 cmpl 76a42 <_Per_CPU_Information+0xc>,%d0 <== NOT EXECUTED
51136: 661c bnes 51154 <rtems_signal_send+0x74> <== NOT EXECUTED
_Thread_Dispatch_necessary = true;
51138: 7001 moveq #1,%d0 <== NOT EXECUTED
5113a: 13c0 0007 6a4e moveb %d0,76a4e <_Per_CPU_Information+0x18> <== NOT EXECUTED
51140: 6012 bras 51154 <rtems_signal_send+0x74> <== NOT EXECUTED
rtems_signal_set *signal_set
)
{
ISR_Level _level;
_ISR_Disable( _level );
51142: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
51148: 40c1 movew %sr,%d1 <== NOT EXECUTED
5114a: 8081 orl %d1,%d0 <== NOT EXECUTED
5114c: 46c0 movew %d0,%sr <== NOT EXECUTED
*signal_set |= signals;
5114e: 85a8 0016 orl %d2,%a0@(22) <== NOT EXECUTED
_ISR_Enable( _level );
51152: 46c1 movew %d1,%sr <== NOT EXECUTED
} else {
_ASR_Post_signals( signal_set, &asr->signals_pending );
}
_Thread_Enable_dispatch();
51154: 4eb9 0005 4eca jsr 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
5115a: 4280 clrl %d0 <== NOT EXECUTED
5115c: 6010 bras 5116e <rtems_signal_send+0x8e> <== NOT EXECUTED
}
_Thread_Enable_dispatch();
5115e: 4eb9 0005 4eca jsr 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_NOT_DEFINED;
51164: 700b moveq #11,%d0 <== NOT EXECUTED
51166: 6006 bras 5116e <rtems_signal_send+0x8e> <== NOT EXECUTED
Objects_Locations location;
RTEMS_API_Control *api;
ASR_Information *asr;
if ( !signal_set )
return RTEMS_INVALID_NUMBER;
51168: 700a moveq #10,%d0 <== NOT EXECUTED
5116a: 6002 bras 5116e <rtems_signal_send+0x8e> <== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
5116c: 7004 moveq #4,%d0 <== NOT EXECUTED
}
5116e: 242e fff4 movel %fp@(-12),%d2 <== NOT EXECUTED
51172: 262e fff8 movel %fp@(-8),%d3 <== NOT EXECUTED
51176: 4e5e unlk %fp <== NOT EXECUTED
...
000457b0 <rtems_task_create>:
size_t stack_size,
rtems_mode initial_modes,
rtems_attribute attribute_set,
rtems_id *id
)
{
457b0: 4e56 ffe8 linkw %fp,#-24
457b4: 48d7 1c1c moveml %d2-%d4/%a2-%a4,%sp@
457b8: 266e 0008 moveal %fp@(8),%a3
457bc: 262e 000c movel %fp@(12),%d3
457c0: 242e 0014 movel %fp@(20),%d2
457c4: 282e 0018 movel %fp@(24),%d4
457c8: 286e 001c moveal %fp@(28),%a4
Priority_Control core_priority;
RTEMS_API_Control *api;
ASR_Information *asr;
if ( !id )
457cc: 4a8c tstl %a4
457ce: 6700 00f0 beqw 458c0 <rtems_task_create+0x110>
return RTEMS_INVALID_ADDRESS;
if ( !rtems_is_name_valid( name ) )
457d2: 4a8b tstl %a3
457d4: 6700 00ee beqw 458c4 <rtems_task_create+0x114>
/*
* Validate the RTEMS API priority and convert it to the core priority range.
*/
if ( !_Attributes_Is_system_task( the_attribute_set ) ) {
457d8: 4a44 tstw %d4
457da: 6d1e blts 457fa <rtems_task_create+0x4a> <== NEVER TAKEN
*/
RTEMS_INLINE_ROUTINE bool _RTEMS_tasks_Priority_is_valid (
rtems_task_priority the_priority
)
{
return ( ( the_priority >= RTEMS_MINIMUM_PRIORITY ) &&
457dc: 4a83 tstl %d3
457de: 6712 beqs 457f2 <rtems_task_create+0x42> <== NEVER TAKEN
( the_priority <= RTEMS_MAXIMUM_PRIORITY ) );
457e0: 4280 clrl %d0
457e2: 1039 0005 c252 moveb 5c252 <rtems_maximum_priority>,%d0
*/
RTEMS_INLINE_ROUTINE bool _RTEMS_tasks_Priority_is_valid (
rtems_task_priority the_priority
)
{
return ( ( the_priority >= RTEMS_MINIMUM_PRIORITY ) &&
457e8: b083 cmpl %d3,%d0
457ea: 54c0 scc %d0
457ec: 49c0 extbl %d0
457ee: 4480 negl %d0
457f0: 6002 bras 457f4 <rtems_task_create+0x44>
457f2: 4280 clrl %d0 <== NOT EXECUTED
if ( !_RTEMS_tasks_Priority_is_valid( initial_priority ) )
457f4: 4a00 tstb %d0
457f6: 6700 00d0 beqw 458c8 <rtems_task_create+0x118>
*/
/*
* Lock the allocator mutex for protection
*/
_RTEMS_Lock_allocator();
457fa: 2f39 0005 dbc8 movel 5dbc8 <_RTEMS_Allocator_Mutex>,%sp@-
45800: 4eb9 0004 5f24 jsr 45f24 <_API_Mutex_Lock>
* This function allocates a task control block from
* the inactive chain of free task control blocks.
*/
RTEMS_INLINE_ROUTINE Thread_Control *_RTEMS_tasks_Allocate( void )
{
return (Thread_Control *) _Objects_Allocate( &_RTEMS_tasks_Information );
45806: 4879 0005 da86 pea 5da86 <_RTEMS_tasks_Information>
4580c: 4eb9 0004 6874 jsr 46874 <_Objects_Allocate>
* the event of an error.
*/
the_thread = _RTEMS_tasks_Allocate();
if ( !the_thread ) {
45812: 508f addql #8,%sp
45814: 2440 moveal %d0,%a2
45816: 4a80 tstl %d0
45818: 6614 bnes 4582e <rtems_task_create+0x7e> <== ALWAYS TAKEN
_RTEMS_Unlock_allocator();
4581a: 2f39 0005 dbc8 movel 5dbc8 <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
45820: 4eb9 0004 5f84 jsr 45f84 <_API_Mutex_Unlock> <== NOT EXECUTED
return RTEMS_TOO_MANY;
45826: 588f addql #4,%sp <== NOT EXECUTED
45828: 7005 moveq #5,%d0 <== NOT EXECUTED
4582a: 6000 009e braw 458ca <rtems_task_create+0x11a> <== NOT EXECUTED
/*
* Initialize the core thread for this task.
*/
status = _Thread_Initialize(
4582e: 7007 moveq #7,%d0
45830: 2f0b movel %a3,%sp@-
45832: 47f9 0004 5f84 lea 45f84 <_API_Mutex_Unlock>,%a3
45838: c082 andl %d2,%d0
4583a: 2f00 movel %d0,%sp@-
4583c: 0802 0009 btst #9,%d2
45840: 56c0 sne %d0
45842: 42a7 clrl %sp@-
45844: 49c0 extbl %d0
45846: 4480 negl %d0
45848: 2f00 movel %d0,%sp@-
4584a: 0802 0008 btst #8,%d2
4584e: 57c0 seq %d0
45850: 49c0 extbl %d0
45852: 4480 negl %d0
45854: 2f00 movel %d0,%sp@-
45856: 7001 moveq #1,%d0
45858: 2f03 movel %d3,%sp@-
4585a: c084 andl %d4,%d0
4585c: 2f00 movel %d0,%sp@-
4585e: 2f2e 0010 movel %fp@(16),%sp@-
45862: 42a7 clrl %sp@-
45864: 2f0a movel %a2,%sp@-
45866: 4879 0005 da86 pea 5da86 <_RTEMS_tasks_Information>
4586c: 4eb9 0004 7854 jsr 47854 <_Thread_Initialize>
NULL, /* no budget algorithm callout */
_Modes_Get_interrupt_level(initial_modes),
(Objects_Name) name
);
if ( !status ) {
45872: 4fef 002c lea %sp@(44),%sp
45876: 4a00 tstb %d0
45878: 6624 bnes 4589e <rtems_task_create+0xee>
*/
RTEMS_INLINE_ROUTINE void _RTEMS_tasks_Free (
Thread_Control *the_task
)
{
_Objects_Free(
4587a: 2f2a 0008 movel %a2@(8),%sp@-
4587e: 4eb9 0004 6bec jsr 46bec <_Objects_Get_information_id>
45884: 2f0a movel %a2,%sp@-
45886: 2f00 movel %d0,%sp@-
45888: 4eb9 0004 6b68 jsr 46b68 <_Objects_Free>
#if defined(RTEMS_MULTIPROCESSING)
if ( is_global )
_Objects_MP_Free_global_object( the_global_object );
#endif
_RTEMS_tasks_Free( the_thread );
_RTEMS_Unlock_allocator();
4588e: 2f39 0005 dbc8 movel 5dbc8 <_RTEMS_Allocator_Mutex>,%sp@-
45894: 4e93 jsr %a3@
return RTEMS_UNSATISFIED;
45896: 4fef 0010 lea %sp@(16),%sp
4589a: 700d moveq #13,%d0
4589c: 602c bras 458ca <rtems_task_create+0x11a>
}
api = the_thread->API_Extensions[ THREAD_API_RTEMS ];
asr = &api->Signal;
4589e: 206a 00fe moveal %a2@(254),%a0
* id - thread id
* RTEMS_SUCCESSFUL - if successful
* error code - if unsuccessful
*/
rtems_status_code rtems_task_create(
458a2: 0802 000a btst #10,%d2
458a6: 57c0 seq %d0
458a8: 4480 negl %d0
}
api = the_thread->API_Extensions[ THREAD_API_RTEMS ];
asr = &api->Signal;
asr->is_enabled = _Modes_Is_asr_disabled(initial_modes) ? false : true;
458aa: 1140 0008 moveb %d0,%a0@(8)
*id = the_thread->Object.id;
458ae: 28aa 0008 movel %a2@(8),%a4@
);
}
#endif
_RTEMS_Unlock_allocator();
458b2: 2f39 0005 dbc8 movel 5dbc8 <_RTEMS_Allocator_Mutex>,%sp@-
458b8: 4e93 jsr %a3@
return RTEMS_SUCCESSFUL;
458ba: 588f addql #4,%sp
458bc: 4280 clrl %d0
458be: 600a bras 458ca <rtems_task_create+0x11a>
RTEMS_API_Control *api;
ASR_Information *asr;
if ( !id )
return RTEMS_INVALID_ADDRESS;
458c0: 7009 moveq #9,%d0 <== NOT EXECUTED
458c2: 6006 bras 458ca <rtems_task_create+0x11a> <== NOT EXECUTED
if ( !rtems_is_name_valid( name ) )
return RTEMS_INVALID_NAME;
458c4: 7003 moveq #3,%d0 <== NOT EXECUTED
458c6: 6002 bras 458ca <rtems_task_create+0x11a> <== NOT EXECUTED
* Validate the RTEMS API priority and convert it to the core priority range.
*/
if ( !_Attributes_Is_system_task( the_attribute_set ) ) {
if ( !_RTEMS_tasks_Priority_is_valid( initial_priority ) )
return RTEMS_INVALID_PRIORITY;
458c8: 7013 moveq #19,%d0 <== NOT EXECUTED
}
#endif
_RTEMS_Unlock_allocator();
return RTEMS_SUCCESSFUL;
}
458ca: 4cee 1c1c ffe8 moveml %fp@(-24),%d2-%d4/%a2-%a4
458d0: 4e5e unlk %fp <== NOT EXECUTED
000458d4 <rtems_task_delete>:
*/
rtems_status_code rtems_task_delete(
rtems_id id
)
{
458d4: 4e56 fff0 linkw %fp,#-16
458d8: 48d7 1c00 moveml %a2-%a4,%sp@
register Thread_Control *the_thread;
Objects_Locations location;
Objects_Information *the_information;
_RTEMS_Lock_allocator();
458dc: 2f39 0005 dbc8 movel 5dbc8 <_RTEMS_Allocator_Mutex>,%sp@-
458e2: 47f9 0004 5f84 lea 45f84 <_API_Mutex_Unlock>,%a3
458e8: 4eb9 0004 5f24 jsr 45f24 <_API_Mutex_Lock>
the_thread = _Thread_Get( id, &location );
458ee: 486e fffc pea %fp@(-4)
458f2: 2f2e 0008 movel %fp@(8),%sp@-
458f6: 4eb9 0004 77cc jsr 477cc <_Thread_Get>
switch ( location ) {
458fc: 4fef 000c lea %sp@(12),%sp
Objects_Locations location;
Objects_Information *the_information;
_RTEMS_Lock_allocator();
the_thread = _Thread_Get( id, &location );
45900: 2440 moveal %d0,%a2
switch ( location ) {
45902: 4aae fffc tstl %fp@(-4)
45906: 663c bnes 45944 <rtems_task_delete+0x70> <== NEVER TAKEN
case OBJECTS_LOCAL:
the_information = _Objects_Get_information_id( the_thread->Object.id );
45908: 2f2a 0008 movel %a2@(8),%sp@-
4590c: 49f9 0004 6bec lea 46bec <_Objects_Get_information_id>,%a4
45912: 4e94 jsr %a4@
0 /* Not used */
);
}
#endif
_Thread_Close( the_information, the_thread );
45914: 2f0a movel %a2,%sp@-
45916: 2f00 movel %d0,%sp@-
45918: 4eb9 0004 7498 jsr 47498 <_Thread_Close>
4591e: 2f2a 0008 movel %a2@(8),%sp@-
45922: 4e94 jsr %a4@
45924: 2f0a movel %a2,%sp@-
45926: 2f00 movel %d0,%sp@-
45928: 4eb9 0004 6b68 jsr 46b68 <_Objects_Free>
_RTEMS_tasks_Free( the_thread );
_RTEMS_Unlock_allocator();
4592e: 2f39 0005 dbc8 movel 5dbc8 <_RTEMS_Allocator_Mutex>,%sp@-
45934: 4e93 jsr %a3@
_Thread_Enable_dispatch();
45936: 4eb9 0004 77a6 jsr 477a6 <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
4593c: 4fef 001c lea %sp@(28),%sp <== NOT EXECUTED
45940: 4280 clrl %d0 <== NOT EXECUTED
45942: 600c bras 45950 <rtems_task_delete+0x7c> <== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
_RTEMS_Unlock_allocator();
45944: 2f39 0005 dbc8 movel 5dbc8 <_RTEMS_Allocator_Mutex>,%sp@- <== NOT EXECUTED
4594a: 4e93 jsr %a3@ <== NOT EXECUTED
return RTEMS_INVALID_ID;
4594c: 588f addql #4,%sp <== NOT EXECUTED
4594e: 7004 moveq #4,%d0 <== NOT EXECUTED
}
45950: 4cee 1c00 fff0 moveml %fp@(-16),%a2-%a4 <== NOT EXECUTED
45956: 4e5e unlk %fp <== NOT EXECUTED
...
000470cc <rtems_task_get_note>:
rtems_status_code rtems_task_get_note(
rtems_id id,
uint32_t notepad,
uint32_t *note
)
{
470cc: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
470d0: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
470d4: 2f0a movel %a2,%sp@- <== NOT EXECUTED
470d6: 246e 0010 moveal %fp@(16),%a2 <== NOT EXECUTED
470da: 2f02 movel %d2,%sp@- <== NOT EXECUTED
470dc: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
register Thread_Control *the_thread;
Objects_Locations location;
RTEMS_API_Control *api;
if ( !rtems_configuration_get_notepads_enabled() )
470e0: 4a39 0005 e9c4 tstb 5e9c4 <Configuration_RTEMS_API+0x4> <== NOT EXECUTED
470e6: 6752 beqs 4713a <rtems_task_get_note+0x6e> <== NOT EXECUTED
return RTEMS_NOT_CONFIGURED;
if ( !note )
470e8: 4a8a tstl %a2 <== NOT EXECUTED
470ea: 6752 beqs 4713e <rtems_task_get_note+0x72> <== NOT EXECUTED
/*
* NOTE: There is no check for < RTEMS_NOTEPAD_FIRST because that would
* be checking an unsigned number for being negative.
*/
if ( notepad > RTEMS_NOTEPAD_LAST )
470ec: 720f moveq #15,%d1 <== NOT EXECUTED
470ee: b282 cmpl %d2,%d1 <== NOT EXECUTED
470f0: 6550 bcss 47142 <rtems_task_get_note+0x76> <== NOT EXECUTED
/*
* Optimize the most likely case to avoid the Thread_Dispatch.
*/
if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ||
470f2: 4a80 tstl %d0 <== NOT EXECUTED
470f4: 670c beqs 47102 <rtems_task_get_note+0x36> <== NOT EXECUTED
_Objects_Are_ids_equal( id, _Thread_Executing->Object.id ) ) {
470f6: 2079 0006 09e0 moveal 609e0 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
/*
* Optimize the most likely case to avoid the Thread_Dispatch.
*/
if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ||
470fc: b0a8 0008 cmpl %a0@(8),%d0 <== NOT EXECUTED
47100: 6610 bnes 47112 <rtems_task_get_note+0x46> <== NOT EXECUTED
_Objects_Are_ids_equal( id, _Thread_Executing->Object.id ) ) {
api = _Thread_Executing->API_Extensions[ THREAD_API_RTEMS ];
47102: 2079 0006 09e0 moveal 609e0 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
*note = api->Notepads[ notepad ];
47108: 2068 00fe moveal %a0@(254),%a0 <== NOT EXECUTED
4710c: 24b0 2c1e movel %a0@(0000001e,%d2:l:4),%a2@ <== NOT EXECUTED
47110: 6024 bras 47136 <rtems_task_get_note+0x6a> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
}
the_thread = _Thread_Get( id, &location );
47112: 486e fffc pea %fp@(-4) <== NOT EXECUTED
47116: 2f00 movel %d0,%sp@- <== NOT EXECUTED
47118: 4eb9 0004 91fc jsr 491fc <_Thread_Get> <== NOT EXECUTED
switch ( location ) {
4711e: 508f addql #8,%sp <== NOT EXECUTED
47120: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
47124: 6620 bnes 47146 <rtems_task_get_note+0x7a> <== NOT EXECUTED
case OBJECTS_LOCAL:
api = the_thread->API_Extensions[ THREAD_API_RTEMS ];
*note = api->Notepads[ notepad ];
47126: 2240 moveal %d0,%a1 <== NOT EXECUTED
47128: 2069 00fe moveal %a1@(254),%a0 <== NOT EXECUTED
4712c: 24b0 2c1e movel %a0@(0000001e,%d2:l:4),%a2@ <== NOT EXECUTED
_Thread_Enable_dispatch();
47130: 4eb9 0004 91d6 jsr 491d6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
47136: 4280 clrl %d0 <== NOT EXECUTED
47138: 600e bras 47148 <rtems_task_get_note+0x7c> <== NOT EXECUTED
register Thread_Control *the_thread;
Objects_Locations location;
RTEMS_API_Control *api;
if ( !rtems_configuration_get_notepads_enabled() )
return RTEMS_NOT_CONFIGURED;
4713a: 7016 moveq #22,%d0 <== NOT EXECUTED
4713c: 600a bras 47148 <rtems_task_get_note+0x7c> <== NOT EXECUTED
if ( !note )
return RTEMS_INVALID_ADDRESS;
4713e: 7009 moveq #9,%d0 <== NOT EXECUTED
47140: 6006 bras 47148 <rtems_task_get_note+0x7c> <== NOT EXECUTED
* NOTE: There is no check for < RTEMS_NOTEPAD_FIRST because that would
* be checking an unsigned number for being negative.
*/
if ( notepad > RTEMS_NOTEPAD_LAST )
return RTEMS_INVALID_NUMBER;
47142: 700a moveq #10,%d0 <== NOT EXECUTED
47144: 6002 bras 47148 <rtems_task_get_note+0x7c> <== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
47146: 7004 moveq #4,%d0 <== NOT EXECUTED
}
47148: 242e fff4 movel %fp@(-12),%d2 <== NOT EXECUTED
4714c: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
47150: 4e5e unlk %fp <== NOT EXECUTED
0004595c <rtems_task_ident>:
rtems_status_code rtems_task_ident(
rtems_name name,
uint32_t node,
rtems_id *id
)
{
4595c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
45960: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
45964: 206e 0010 moveal %fp@(16),%a0 <== NOT EXECUTED
Objects_Name_or_id_lookup_errors status;
if ( !id )
45968: 4a88 tstl %a0 <== NOT EXECUTED
4596a: 6734 beqs 459a0 <rtems_task_ident+0x44> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
if ( name == OBJECTS_ID_OF_SELF ) {
4596c: 4a80 tstl %d0 <== NOT EXECUTED
4596e: 660c bnes 4597c <rtems_task_ident+0x20> <== NOT EXECUTED
*id = _Thread_Executing->Object.id;
45970: 2279 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a1 <== NOT EXECUTED
45976: 20a9 0008 movel %a1@(8),%a0@ <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
4597a: 6026 bras 459a2 <rtems_task_ident+0x46> <== NOT EXECUTED
}
status = _Objects_Name_to_id_u32( &_RTEMS_tasks_Information, name, node, id );
4597c: 2f08 movel %a0,%sp@- <== NOT EXECUTED
4597e: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
45982: 2f00 movel %d0,%sp@- <== NOT EXECUTED
45984: 4879 0005 da86 pea 5da86 <_RTEMS_tasks_Information> <== NOT EXECUTED
4598a: 4eb9 0004 6e58 jsr 46e58 <_Objects_Name_to_id_u32> <== NOT EXECUTED
return _Status_Object_name_errors_to_status[ status ];
45990: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
45994: 41f9 0005 b35e lea 5b35e <_Status_Object_name_errors_to_status>,%a0<== NOT EXECUTED
4599a: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0 <== NOT EXECUTED
4599e: 6002 bras 459a2 <rtems_task_ident+0x46> <== NOT EXECUTED
)
{
Objects_Name_or_id_lookup_errors status;
if ( !id )
return RTEMS_INVALID_ADDRESS;
459a0: 7009 moveq #9,%d0 <== NOT EXECUTED
}
status = _Objects_Name_to_id_u32( &_RTEMS_tasks_Information, name, node, id );
return _Status_Object_name_errors_to_status[ status ];
}
459a2: 4e5e unlk %fp <== NOT EXECUTED
...
00051480 <rtems_task_is_suspended>:
*/
rtems_status_code rtems_task_is_suspended(
rtems_id id
)
{
51480: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
register Thread_Control *the_thread;
Objects_Locations location;
the_thread = _Thread_Get( id, &location );
51484: 486e fffc pea %fp@(-4) <== NOT EXECUTED
51488: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
5148c: 4eb9 0005 4ef0 jsr 54ef0 <_Thread_Get> <== NOT EXECUTED
switch ( location ) {
51492: 508f addql #8,%sp <== NOT EXECUTED
51494: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
51498: 661c bnes 514b6 <rtems_task_is_suspended+0x36> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE bool _States_Is_suspended (
States_Control the_states
)
{
return (the_states & STATES_SUSPENDED);
5149a: 2040 moveal %d0,%a0 <== NOT EXECUTED
5149c: 7202 moveq #2,%d1 <== NOT EXECUTED
5149e: c2a8 0010 andl %a0@(16),%d1 <== NOT EXECUTED
514a2: 41f9 0005 4eca lea 54eca <_Thread_Enable_dispatch>,%a0 <== NOT EXECUTED
case OBJECTS_LOCAL:
if ( !_States_Is_suspended( the_thread->current_state ) ) {
514a8: 6606 bnes 514b0 <rtems_task_is_suspended+0x30> <== NOT EXECUTED
_Thread_Enable_dispatch();
514aa: 4e90 jsr %a0@ <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
514ac: 4280 clrl %d0 <== NOT EXECUTED
514ae: 6008 bras 514b8 <rtems_task_is_suspended+0x38> <== NOT EXECUTED
}
_Thread_Enable_dispatch();
514b0: 4e90 jsr %a0@ <== NOT EXECUTED
return RTEMS_ALREADY_SUSPENDED;
514b2: 700f moveq #15,%d0 <== NOT EXECUTED
514b4: 6002 bras 514b8 <rtems_task_is_suspended+0x38> <== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
514b6: 7004 moveq #4,%d0 <== NOT EXECUTED
}
514b8: 4e5e unlk %fp <== NOT EXECUTED
0004c4d4 <rtems_task_mode>:
rtems_status_code rtems_task_mode(
rtems_mode mode_set,
rtems_mode mask,
rtems_mode *previous_mode_set
)
{
4c4d4: 4e56 ffe4 linkw %fp,#-28
4c4d8: 48d7 1c3c moveml %d2-%d5/%a2-%a4,%sp@
4c4dc: 262e 0008 movel %fp@(8),%d3
4c4e0: 282e 000c movel %fp@(12),%d4
4c4e4: 286e 0010 moveal %fp@(16),%a4
ASR_Information *asr;
bool is_asr_enabled = false;
bool needs_asr_dispatching = false;
rtems_mode old_mode;
if ( !previous_mode_set )
4c4e8: 4a8c tstl %a4
4c4ea: 6700 0104 beqw 4c5f0 <rtems_task_mode+0x11c>
return RTEMS_INVALID_ADDRESS;
executing = _Thread_Executing;
4c4ee: 2679 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a3
api = executing->API_Extensions[ THREAD_API_RTEMS ];
asr = &api->Signal;
old_mode = (executing->is_preemptible) ? RTEMS_PREEMPT : RTEMS_NO_PREEMPT;
4c4f4: 4a2b 0074 tstb %a3@(116)
4c4f8: 57c2 seq %d2
if ( !previous_mode_set )
return RTEMS_INVALID_ADDRESS;
executing = _Thread_Executing;
api = executing->API_Extensions[ THREAD_API_RTEMS ];
4c4fa: 246b 00fe moveal %a3@(254),%a2
asr = &api->Signal;
old_mode = (executing->is_preemptible) ? RTEMS_PREEMPT : RTEMS_NO_PREEMPT;
4c4fe: 49c2 extbl %d2
4c500: 0282 0000 0100 andil #256,%d2
if ( executing->budget_algorithm == THREAD_CPU_BUDGET_ALGORITHM_NONE )
4c506: 4aab 007a tstl %a3@(122)
4c50a: 6704 beqs 4c510 <rtems_task_mode+0x3c> <== ALWAYS TAKEN
old_mode |= RTEMS_NO_TIMESLICE;
else
old_mode |= RTEMS_TIMESLICE;
4c50c: 08c2 0009 bset #9,%d2 <== NOT EXECUTED
old_mode |= (asr->is_enabled) ? RTEMS_ASR : RTEMS_NO_ASR;
4c510: 4a2a 0008 tstb %a2@(8)
4c514: 57c5 seq %d5
old_mode |= _ISR_Get_level();
4c516: 4eb9 0004 88b8 jsr 488b8 <_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;
4c51c: 49c5 extbl %d5
4c51e: 0285 0000 0400 andil #1024,%d5
4c524: 8085 orl %d5,%d0
old_mode |= _ISR_Get_level();
4c526: 8082 orl %d2,%d0
4c528: 2880 movel %d0,%a4@
*previous_mode_set = old_mode;
/*
* These are generic thread scheduling characteristics.
*/
if ( mask & RTEMS_PREEMPT_MASK )
4c52a: 0804 0008 btst #8,%d4
4c52e: 670c beqs 4c53c <rtems_task_mode+0x68> <== NEVER TAKEN
executing->is_preemptible = _Modes_Is_preempt(mode_set) ? true : false;
4c530: 0803 0008 btst #8,%d3
4c534: 57c0 seq %d0
4c536: 4480 negl %d0
4c538: 1740 0074 moveb %d0,%a3@(116)
if ( mask & RTEMS_TIMESLICE_MASK ) {
4c53c: 0804 0009 btst #9,%d4
4c540: 671c beqs 4c55e <rtems_task_mode+0x8a>
if ( _Modes_Is_timeslice(mode_set) ) {
4c542: 0803 0009 btst #9,%d3
4c546: 6712 beqs 4c55a <rtems_task_mode+0x86> <== ALWAYS TAKEN
executing->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE;
executing->cpu_time_budget = _Thread_Ticks_per_timeslice;
4c548: 41f9 0005 dac0 lea 5dac0 <_Thread_Ticks_per_timeslice>,%a0 <== NOT EXECUTED
if ( mask & RTEMS_PREEMPT_MASK )
executing->is_preemptible = _Modes_Is_preempt(mode_set) ? true : false;
if ( mask & RTEMS_TIMESLICE_MASK ) {
if ( _Modes_Is_timeslice(mode_set) ) {
executing->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE;
4c54e: 7001 moveq #1,%d0 <== NOT EXECUTED
executing->cpu_time_budget = _Thread_Ticks_per_timeslice;
4c550: 2750 0076 movel %a0@,%a3@(118) <== NOT EXECUTED
if ( mask & RTEMS_PREEMPT_MASK )
executing->is_preemptible = _Modes_Is_preempt(mode_set) ? true : false;
if ( mask & RTEMS_TIMESLICE_MASK ) {
if ( _Modes_Is_timeslice(mode_set) ) {
executing->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE;
4c554: 2740 007a movel %d0,%a3@(122) <== NOT EXECUTED
4c558: 6004 bras 4c55e <rtems_task_mode+0x8a> <== NOT EXECUTED
executing->cpu_time_budget = _Thread_Ticks_per_timeslice;
} else
executing->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_NONE;
4c55a: 42ab 007a clrl %a3@(122)
}
/*
* Set the new interrupt level
*/
if ( mask & RTEMS_INTERRUPT_MASK )
4c55e: 7007 moveq #7,%d0
4c560: c084 andl %d4,%d0
4c562: 6712 beqs 4c576 <rtems_task_mode+0xa2>
*/
RTEMS_INLINE_ROUTINE void _Modes_Set_interrupt_level (
Modes_Control mode_set
)
{
_ISR_Set_level( _Modes_Get_interrupt_level( mode_set ) );
4c564: 40c0 movew %sr,%d0
*/
RTEMS_INLINE_ROUTINE ISR_Level _Modes_Get_interrupt_level (
Modes_Control mode_set
)
{
return ( mode_set & RTEMS_INTERRUPT_MASK );
4c566: 7207 moveq #7,%d1
4c568: c283 andl %d3,%d1
*/
RTEMS_INLINE_ROUTINE void _Modes_Set_interrupt_level (
Modes_Control mode_set
)
{
_ISR_Set_level( _Modes_Get_interrupt_level( mode_set ) );
4c56a: 0280 0000 f8ff andil #63743,%d0
4c570: e189 lsll #8,%d1
4c572: 8081 orl %d1,%d0
4c574: 46c0 movew %d0,%sr
* This is specific to the RTEMS API
*/
is_asr_enabled = false;
needs_asr_dispatching = false;
if ( mask & RTEMS_ASR_MASK ) {
4c576: 0804 000a btst #10,%d4
4c57a: 6740 beqs 4c5bc <rtems_task_mode+0xe8>
is_asr_enabled = _Modes_Is_asr_disabled( mode_set ) ? false : true;
if ( is_asr_enabled != asr->is_enabled ) {
4c57c: 4281 clrl %d1
4c57e: 122a 0008 moveb %a2@(8),%d1
4c582: 4282 clrl %d2
* Output:
* *previous_mode_set - previous mode set
* always return RTEMS_SUCCESSFUL;
*/
rtems_status_code rtems_task_mode(
4c584: 0803 000a btst #10,%d3
4c588: 57c0 seq %d0
4c58a: 4480 negl %d0
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 ) {
4c58c: 1400 moveb %d0,%d2
4c58e: b282 cmpl %d2,%d1
4c590: 672a beqs 4c5bc <rtems_task_mode+0xe8> <== ALWAYS TAKEN
asr->is_enabled = is_asr_enabled;
4c592: 1540 0008 moveb %d0,%a2@(8) <== NOT EXECUTED
)
{
rtems_signal_set _signals;
ISR_Level _level;
_ISR_Disable( _level );
4c596: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
4c59c: 40c1 movew %sr,%d1 <== NOT EXECUTED
4c59e: 8081 orl %d1,%d0 <== NOT EXECUTED
4c5a0: 46c0 movew %d0,%sr <== NOT EXECUTED
_signals = information->signals_pending;
4c5a2: 202a 0016 movel %a2@(22),%d0 <== NOT EXECUTED
information->signals_pending = information->signals_posted;
4c5a6: 256a 0012 0016 movel %a2@(18),%a2@(22) <== NOT EXECUTED
information->signals_posted = _signals;
4c5ac: 2540 0012 movel %d0,%a2@(18) <== NOT EXECUTED
_ISR_Enable( _level );
4c5b0: 46c1 movew %d1,%sr <== NOT EXECUTED
/*
* This is specific to the RTEMS API
*/
is_asr_enabled = false;
needs_asr_dispatching = false;
4c5b2: 4aaa 0012 tstl %a2@(18) <== NOT EXECUTED
4c5b6: 56c0 sne %d0 <== NOT EXECUTED
4c5b8: 4480 negl %d0 <== NOT EXECUTED
4c5ba: 6002 bras 4c5be <rtems_task_mode+0xea> <== NOT EXECUTED
4c5bc: 4200 clrb %d0
needs_asr_dispatching = true;
}
}
}
if ( _System_state_Is_up( _System_state_Get() ) ) {
4c5be: 7203 moveq #3,%d1
4c5c0: b2b9 0005 dc74 cmpl 5dc74 <_System_state_Current>,%d1
4c5c6: 662c bnes 4c5f4 <rtems_task_mode+0x120> <== NEVER TAKEN
bool are_signals_pending
)
{
Thread_Control *executing;
executing = _Thread_Executing;
4c5c8: 2079 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a0
if ( are_signals_pending ||
4c5ce: 4a00 tstb %d0
4c5d0: 660e bnes 4c5e0 <rtems_task_mode+0x10c> <== NEVER TAKEN
4c5d2: b1f9 0005 df9a cmpal 5df9a <_Per_CPU_Information+0x10>,%a0
4c5d8: 671a beqs 4c5f4 <rtems_task_mode+0x120> <== ALWAYS TAKEN
(!_Thread_Is_heir( executing ) && executing->is_preemptible) ) {
4c5da: 4a28 0074 tstb %a0@(116) <== NOT EXECUTED
4c5de: 6714 beqs 4c5f4 <rtems_task_mode+0x120> <== NOT EXECUTED
_Thread_Dispatch_necessary = true;
4c5e0: 7001 moveq #1,%d0 <== NOT EXECUTED
4c5e2: 13c0 0005 dfa2 moveb %d0,5dfa2 <_Per_CPU_Information+0x18> <== NOT EXECUTED
if (_Thread_Evaluate_is_dispatch_needed( needs_asr_dispatching ) )
_Thread_Dispatch();
4c5e8: 4eb9 0004 7668 jsr 47668 <_Thread_Dispatch> <== NOT EXECUTED
4c5ee: 6004 bras 4c5f4 <rtems_task_mode+0x120> <== NOT EXECUTED
bool is_asr_enabled = false;
bool needs_asr_dispatching = false;
rtems_mode old_mode;
if ( !previous_mode_set )
return RTEMS_INVALID_ADDRESS;
4c5f0: 7009 moveq #9,%d0 <== NOT EXECUTED
4c5f2: 6002 bras 4c5f6 <rtems_task_mode+0x122> <== NOT EXECUTED
if ( _System_state_Is_up( _System_state_Get() ) ) {
if (_Thread_Evaluate_is_dispatch_needed( needs_asr_dispatching ) )
_Thread_Dispatch();
}
return RTEMS_SUCCESSFUL;
4c5f4: 4280 clrl %d0
}
4c5f6: 4cee 1c3c ffe4 moveml %fp@(-28),%d2-%d5/%a2-%a4
4c5fc: 4e5e unlk %fp <== NOT EXECUTED
0004618c <rtems_task_restart>:
rtems_status_code rtems_task_restart(
rtems_id id,
uint32_t argument
)
{
4618c: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
register Thread_Control *the_thread;
Objects_Locations location;
the_thread = _Thread_Get( id, &location );
46190: 486e fffc pea %fp@(-4) <== NOT EXECUTED
46194: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
46198: 4eb9 0004 7f84 jsr 47f84 <_Thread_Get> <== NOT EXECUTED
switch ( location ) {
4619e: 508f addql #8,%sp <== NOT EXECUTED
461a0: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
461a4: 6628 bnes 461ce <rtems_task_restart+0x42> <== NOT EXECUTED
case OBJECTS_LOCAL:
if ( _Thread_Restart( the_thread, NULL, argument ) ) {
461a6: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
461aa: 42a7 clrl %sp@- <== NOT EXECUTED
461ac: 2f00 movel %d0,%sp@- <== NOT EXECUTED
461ae: 4eb9 0004 870c jsr 4870c <_Thread_Restart> <== NOT EXECUTED
461b4: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
461b8: 41f9 0004 7f5e lea 47f5e <_Thread_Enable_dispatch>,%a0 <== NOT EXECUTED
461be: 4a00 tstb %d0 <== NOT EXECUTED
461c0: 6706 beqs 461c8 <rtems_task_restart+0x3c> <== NOT EXECUTED
_Thread_Enable_dispatch();
461c2: 4e90 jsr %a0@ <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
461c4: 4280 clrl %d0 <== NOT EXECUTED
461c6: 6008 bras 461d0 <rtems_task_restart+0x44> <== NOT EXECUTED
}
_Thread_Enable_dispatch();
461c8: 4e90 jsr %a0@ <== NOT EXECUTED
return RTEMS_INCORRECT_STATE;
461ca: 700e moveq #14,%d0 <== NOT EXECUTED
461cc: 6002 bras 461d0 <rtems_task_restart+0x44> <== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
461ce: 7004 moveq #4,%d0 <== NOT EXECUTED
}
461d0: 4e5e unlk %fp <== NOT EXECUTED
00048798 <rtems_task_resume>:
*/
rtems_status_code rtems_task_resume(
rtems_id id
)
{
48798: 4e56 fffc linkw %fp,#-4
4879c: 2f0a movel %a2,%sp@-
register Thread_Control *the_thread;
Objects_Locations location;
the_thread = _Thread_Get( id, &location );
4879e: 486e fffc pea %fp@(-4)
487a2: 2f2e 0008 movel %fp@(8),%sp@-
487a6: 4eb9 0004 a5e0 jsr 4a5e0 <_Thread_Get>
switch ( location ) {
487ac: 508f addql #8,%sp
487ae: 4aae fffc tstl %fp@(-4)
487b2: 662a bnes 487de <rtems_task_resume+0x46> <== NEVER TAKEN
*/
RTEMS_INLINE_ROUTINE bool _States_Is_suspended (
States_Control the_states
)
{
return (the_states & STATES_SUSPENDED);
487b4: 7202 moveq #2,%d1
487b6: 2040 moveal %d0,%a0
487b8: 45f9 0004 a5ba lea 4a5ba <_Thread_Enable_dispatch>,%a2
487be: c2a8 0010 andl %a0@(16),%d1
case OBJECTS_LOCAL:
if ( _States_Is_suspended( the_thread->current_state ) ) {
487c2: 6714 beqs 487d8 <rtems_task_resume+0x40> <== NEVER TAKEN
_Thread_Resume( the_thread, true );
487c4: 4878 0001 pea 1 <ADD>
487c8: 2f00 movel %d0,%sp@-
487ca: 4eb9 0004 ad68 jsr 4ad68 <_Thread_Resume>
_Thread_Enable_dispatch();
487d0: 4e92 jsr %a2@
return RTEMS_SUCCESSFUL;
487d2: 508f addql #8,%sp
487d4: 4280 clrl %d0
487d6: 6008 bras 487e0 <rtems_task_resume+0x48>
}
_Thread_Enable_dispatch();
487d8: 4e92 jsr %a2@
return RTEMS_INCORRECT_STATE;
487da: 700e moveq #14,%d0
487dc: 6002 bras 487e0 <rtems_task_resume+0x48>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
487de: 7004 moveq #4,%d0 <== NOT EXECUTED
}
487e0: 246e fff8 moveal %fp@(-8),%a2
487e4: 4e5e unlk %fp <== NOT EXECUTED
00047234 <rtems_task_set_note>:
rtems_status_code rtems_task_set_note(
rtems_id id,
uint32_t notepad,
uint32_t note
)
{
47234: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
47238: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
4723c: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4723e: 262e 0010 movel %fp@(16),%d3 <== NOT EXECUTED
47242: 2f02 movel %d2,%sp@- <== NOT EXECUTED
47244: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
register Thread_Control *the_thread;
Objects_Locations location;
RTEMS_API_Control *api;
if ( !rtems_configuration_get_notepads_enabled() )
47248: 4a39 0005 e9c4 tstb 5e9c4 <Configuration_RTEMS_API+0x4> <== NOT EXECUTED
4724e: 674e beqs 4729e <rtems_task_set_note+0x6a> <== NOT EXECUTED
/*
* NOTE: There is no check for < RTEMS_NOTEPAD_FIRST because that would
* be checking an unsigned number for being negative.
*/
if ( notepad > RTEMS_NOTEPAD_LAST )
47250: 720f moveq #15,%d1 <== NOT EXECUTED
47252: b282 cmpl %d2,%d1 <== NOT EXECUTED
47254: 654c bcss 472a2 <rtems_task_set_note+0x6e> <== NOT EXECUTED
/*
* Optimize the most likely case to avoid the Thread_Dispatch.
*/
if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ||
47256: 4a80 tstl %d0 <== NOT EXECUTED
47258: 670c beqs 47266 <rtems_task_set_note+0x32> <== NOT EXECUTED
_Objects_Are_ids_equal( id, _Thread_Executing->Object.id ) ) {
4725a: 2079 0006 09e0 moveal 609e0 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
/*
* Optimize the most likely case to avoid the Thread_Dispatch.
*/
if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ||
47260: b0a8 0008 cmpl %a0@(8),%d0 <== NOT EXECUTED
47264: 6610 bnes 47276 <rtems_task_set_note+0x42> <== NOT EXECUTED
_Objects_Are_ids_equal( id, _Thread_Executing->Object.id ) ) {
api = _Thread_Executing->API_Extensions[ THREAD_API_RTEMS ];
47266: 2079 0006 09e0 moveal 609e0 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
api->Notepads[ notepad ] = note;
4726c: 2068 00fe moveal %a0@(254),%a0 <== NOT EXECUTED
47270: 2183 2c1e movel %d3,%a0@(0000001e,%d2:l:4) <== NOT EXECUTED
47274: 6024 bras 4729a <rtems_task_set_note+0x66> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
}
the_thread = _Thread_Get( id, &location );
47276: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4727a: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4727c: 4eb9 0004 91fc jsr 491fc <_Thread_Get> <== NOT EXECUTED
switch ( location ) {
47282: 508f addql #8,%sp <== NOT EXECUTED
47284: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
47288: 661c bnes 472a6 <rtems_task_set_note+0x72> <== NOT EXECUTED
case OBJECTS_LOCAL:
api = the_thread->API_Extensions[ THREAD_API_RTEMS ];
api->Notepads[ notepad ] = note;
4728a: 2240 moveal %d0,%a1 <== NOT EXECUTED
4728c: 2069 00fe moveal %a1@(254),%a0 <== NOT EXECUTED
47290: 2183 2c1e movel %d3,%a0@(0000001e,%d2:l:4) <== NOT EXECUTED
_Thread_Enable_dispatch();
47294: 4eb9 0004 91d6 jsr 491d6 <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
4729a: 4280 clrl %d0 <== NOT EXECUTED
4729c: 600a bras 472a8 <rtems_task_set_note+0x74> <== NOT EXECUTED
register Thread_Control *the_thread;
Objects_Locations location;
RTEMS_API_Control *api;
if ( !rtems_configuration_get_notepads_enabled() )
return RTEMS_NOT_CONFIGURED;
4729e: 7016 moveq #22,%d0 <== NOT EXECUTED
472a0: 6006 bras 472a8 <rtems_task_set_note+0x74> <== NOT EXECUTED
* NOTE: There is no check for < RTEMS_NOTEPAD_FIRST because that would
* be checking an unsigned number for being negative.
*/
if ( notepad > RTEMS_NOTEPAD_LAST )
return RTEMS_INVALID_NUMBER;
472a2: 700a moveq #10,%d0 <== NOT EXECUTED
472a4: 6002 bras 472a8 <rtems_task_set_note+0x74> <== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
472a6: 7004 moveq #4,%d0 <== NOT EXECUTED
}
472a8: 242e fff4 movel %fp@(-12),%d2 <== NOT EXECUTED
472ac: 262e fff8 movel %fp@(-8),%d3 <== NOT EXECUTED
472b0: 4e5e unlk %fp <== NOT EXECUTED
000492d4 <rtems_task_set_priority>:
rtems_status_code rtems_task_set_priority(
rtems_id id,
rtems_task_priority new_priority,
rtems_task_priority *old_priority
)
{
492d4: 4e56 fffc linkw %fp,#-4
492d8: 2f0a movel %a2,%sp@-
492da: 246e 0010 moveal %fp@(16),%a2
492de: 2f02 movel %d2,%sp@-
492e0: 242e 000c movel %fp@(12),%d2
register Thread_Control *the_thread;
Objects_Locations location;
if ( new_priority != RTEMS_CURRENT_PRIORITY &&
492e4: 670c beqs 492f2 <rtems_task_set_priority+0x1e> <== NEVER TAKEN
RTEMS_INLINE_ROUTINE bool _RTEMS_tasks_Priority_is_valid (
rtems_task_priority the_priority
)
{
return ( ( the_priority >= RTEMS_MINIMUM_PRIORITY ) &&
( the_priority <= RTEMS_MAXIMUM_PRIORITY ) );
492e6: 4280 clrl %d0
492e8: 1039 0005 fb82 moveb 5fb82 <rtems_maximum_priority>,%d0
492ee: b082 cmpl %d2,%d0
492f0: 654e bcss 49340 <rtems_task_set_priority+0x6c> <== NEVER TAKEN
!_RTEMS_tasks_Priority_is_valid( new_priority ) )
return RTEMS_INVALID_PRIORITY;
if ( !old_priority )
492f2: 4a8a tstl %a2
492f4: 674e beqs 49344 <rtems_task_set_priority+0x70> <== NEVER TAKEN
return RTEMS_INVALID_ADDRESS;
the_thread = _Thread_Get( id, &location );
492f6: 486e fffc pea %fp@(-4)
492fa: 2f2e 0008 movel %fp@(8),%sp@-
492fe: 4eb9 0004 b268 jsr 4b268 <_Thread_Get>
switch ( location ) {
49304: 508f addql #8,%sp
return RTEMS_INVALID_PRIORITY;
if ( !old_priority )
return RTEMS_INVALID_ADDRESS;
the_thread = _Thread_Get( id, &location );
49306: 2040 moveal %d0,%a0
switch ( location ) {
49308: 4aae fffc tstl %fp@(-4)
4930c: 663a bnes 49348 <rtems_task_set_priority+0x74> <== NEVER TAKEN
case OBJECTS_LOCAL:
/* XXX need helper to "convert" from core priority */
*old_priority = the_thread->current_priority;
4930e: 24a8 0014 movel %a0@(20),%a2@
if ( new_priority != RTEMS_CURRENT_PRIORITY ) {
49312: 4a82 tstl %d2
49314: 6720 beqs 49336 <rtems_task_set_priority+0x62> <== NEVER TAKEN
the_thread->real_priority = new_priority;
49316: 2142 0018 movel %d2,%a0@(24)
if ( the_thread->resource_count == 0 ||
4931a: 4aa8 001c tstl %a0@(28)
4931e: 6706 beqs 49326 <rtems_task_set_priority+0x52> <== ALWAYS TAKEN
49320: b4a8 0014 cmpl %a0@(20),%d2 <== NOT EXECUTED
49324: 6410 bccs 49336 <rtems_task_set_priority+0x62> <== NOT EXECUTED
the_thread->current_priority > new_priority )
_Thread_Change_priority( the_thread, new_priority, false );
49326: 42a7 clrl %sp@-
49328: 2f02 movel %d2,%sp@-
4932a: 2f08 movel %a0,%sp@-
4932c: 4eb9 0004 ada8 jsr 4ada8 <_Thread_Change_priority>
49332: 4fef 000c lea %sp@(12),%sp
}
_Thread_Enable_dispatch();
49336: 4eb9 0004 b242 jsr 4b242 <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
4933c: 4280 clrl %d0
4933e: 600a bras 4934a <rtems_task_set_priority+0x76>
register Thread_Control *the_thread;
Objects_Locations location;
if ( new_priority != RTEMS_CURRENT_PRIORITY &&
!_RTEMS_tasks_Priority_is_valid( new_priority ) )
return RTEMS_INVALID_PRIORITY;
49340: 7013 moveq #19,%d0 <== NOT EXECUTED
49342: 6006 bras 4934a <rtems_task_set_priority+0x76> <== NOT EXECUTED
if ( !old_priority )
return RTEMS_INVALID_ADDRESS;
49344: 7009 moveq #9,%d0 <== NOT EXECUTED
49346: 6002 bras 4934a <rtems_task_set_priority+0x76> <== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
49348: 7004 moveq #4,%d0 <== NOT EXECUTED
}
4934a: 242e fff4 movel %fp@(-12),%d2
4934e: 246e fff8 moveal %fp@(-8),%a2
49352: 4e5e unlk %fp
...
00045a2c <rtems_task_start>:
rtems_status_code rtems_task_start(
rtems_id id,
rtems_task_entry entry_point,
rtems_task_argument argument
)
{
45a2c: 4e56 fffc linkw %fp,#-4
45a30: 2f02 movel %d2,%sp@-
45a32: 242e 000c movel %fp@(12),%d2
register Thread_Control *the_thread;
Objects_Locations location;
if ( entry_point == NULL )
45a36: 6742 beqs 45a7a <rtems_task_start+0x4e>
return RTEMS_INVALID_ADDRESS;
the_thread = _Thread_Get( id, &location );
45a38: 486e fffc pea %fp@(-4)
45a3c: 2f2e 0008 movel %fp@(8),%sp@-
45a40: 4eb9 0004 77cc jsr 477cc <_Thread_Get>
switch ( location ) {
45a46: 508f addql #8,%sp
45a48: 4aae fffc tstl %fp@(-4)
45a4c: 6630 bnes 45a7e <rtems_task_start+0x52> <== NEVER TAKEN
case OBJECTS_LOCAL:
if ( _Thread_Start(
45a4e: 2f2e 0010 movel %fp@(16),%sp@-
45a52: 42a7 clrl %sp@-
45a54: 2f02 movel %d2,%sp@-
45a56: 42a7 clrl %sp@-
45a58: 2f00 movel %d0,%sp@-
45a5a: 4eb9 0004 811c jsr 4811c <_Thread_Start>
45a60: 4fef 0014 lea %sp@(20),%sp
45a64: 41f9 0004 77a6 lea 477a6 <_Thread_Enable_dispatch>,%a0
45a6a: 4a00 tstb %d0
45a6c: 6706 beqs 45a74 <rtems_task_start+0x48> <== NEVER TAKEN
the_thread, THREAD_START_NUMERIC, entry_point, NULL, argument ) ) {
_Thread_Enable_dispatch();
45a6e: 4e90 jsr %a0@
return RTEMS_SUCCESSFUL;
45a70: 4280 clrl %d0
45a72: 600c bras 45a80 <rtems_task_start+0x54>
}
_Thread_Enable_dispatch();
45a74: 4e90 jsr %a0@ <== NOT EXECUTED
return RTEMS_INCORRECT_STATE;
45a76: 700e moveq #14,%d0 <== NOT EXECUTED
45a78: 6006 bras 45a80 <rtems_task_start+0x54> <== NOT EXECUTED
{
register Thread_Control *the_thread;
Objects_Locations location;
if ( entry_point == NULL )
return RTEMS_INVALID_ADDRESS;
45a7a: 7009 moveq #9,%d0
45a7c: 6002 bras 45a80 <rtems_task_start+0x54>
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
45a7e: 7004 moveq #4,%d0 <== NOT EXECUTED
}
45a80: 242e fff8 movel %fp@(-8),%d2
45a84: 4e5e unlk %fp <== NOT EXECUTED
00045a88 <rtems_task_suspend>:
*/
rtems_status_code rtems_task_suspend(
rtems_id id
)
{
45a88: 4e56 fffc linkw %fp,#-4
45a8c: 2f0a movel %a2,%sp@-
register Thread_Control *the_thread;
Objects_Locations location;
the_thread = _Thread_Get( id, &location );
45a8e: 486e fffc pea %fp@(-4)
45a92: 2f2e 0008 movel %fp@(8),%sp@-
45a96: 4eb9 0004 77cc jsr 477cc <_Thread_Get>
switch ( location ) {
45a9c: 508f addql #8,%sp
45a9e: 4aae fffc tstl %fp@(-4)
45aa2: 6626 bnes 45aca <rtems_task_suspend+0x42> <== NEVER TAKEN
*/
RTEMS_INLINE_ROUTINE bool _States_Is_suspended (
States_Control the_states
)
{
return (the_states & STATES_SUSPENDED);
45aa4: 7202 moveq #2,%d1
45aa6: 2040 moveal %d0,%a0
45aa8: 45f9 0004 77a6 lea 477a6 <_Thread_Enable_dispatch>,%a2
45aae: c2a8 0010 andl %a0@(16),%d1
case OBJECTS_LOCAL:
if ( !_States_Is_suspended( the_thread->current_state ) ) {
45ab2: 6610 bnes 45ac4 <rtems_task_suspend+0x3c> <== NEVER TAKEN
_Thread_Suspend( the_thread );
45ab4: 2f00 movel %d0,%sp@-
45ab6: 4eb9 0004 8170 jsr 48170 <_Thread_Suspend>
_Thread_Enable_dispatch();
45abc: 4e92 jsr %a2@
return RTEMS_SUCCESSFUL;
45abe: 588f addql #4,%sp
45ac0: 4280 clrl %d0
45ac2: 6008 bras 45acc <rtems_task_suspend+0x44>
}
_Thread_Enable_dispatch();
45ac4: 4e92 jsr %a2@ <== NOT EXECUTED
return RTEMS_ALREADY_SUSPENDED;
45ac6: 700f moveq #15,%d0 <== NOT EXECUTED
45ac8: 6002 bras 45acc <rtems_task_suspend+0x44> <== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
45aca: 7004 moveq #4,%d0 <== NOT EXECUTED
}
45acc: 246e fff8 moveal %fp@(-8),%a2
45ad0: 4e5e unlk %fp <== NOT EXECUTED
0004656c <rtems_task_variable_add>:
rtems_status_code rtems_task_variable_add(
rtems_id tid,
void **ptr,
void (*dtor)(void *)
)
{
4656c: 4e56 fff0 linkw %fp,#-16
46570: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
46574: 246e 000c moveal %fp@(12),%a2
46578: 242e 0010 movel %fp@(16),%d2
Thread_Control *the_thread;
Objects_Locations location;
rtems_task_variable_t *tvp, *new;
if ( !ptr )
4657c: 4a8a tstl %a2
4657e: 676e beqs 465ee <rtems_task_variable_add+0x82>
return RTEMS_INVALID_ADDRESS;
the_thread = _Thread_Get (tid, &location);
46580: 486e fffc pea %fp@(-4) <== NOT EXECUTED
46584: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
46588: 4eb9 0004 83a4 jsr 483a4 <_Thread_Get> <== NOT EXECUTED
switch (location) {
4658e: 508f addql #8,%sp <== NOT EXECUTED
rtems_task_variable_t *tvp, *new;
if ( !ptr )
return RTEMS_INVALID_ADDRESS;
the_thread = _Thread_Get (tid, &location);
46590: 2640 moveal %d0,%a3 <== NOT EXECUTED
switch (location) {
46592: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
46596: 665a bnes 465f2 <rtems_task_variable_add+0x86> <== NOT EXECUTED
case OBJECTS_LOCAL:
/*
* Figure out if the variable is already in this task's list.
*/
tvp = the_thread->task_variables;
46598: 206b 010a moveal %a3@(266),%a0 <== NOT EXECUTED
while (tvp) {
4659c: 6014 bras 465b2 <rtems_task_variable_add+0x46> <== NOT EXECUTED
if (tvp->ptr == ptr) {
4659e: b5e8 0004 cmpal %a0@(4),%a2 <== NOT EXECUTED
465a2: 660c bnes 465b0 <rtems_task_variable_add+0x44> <== NOT EXECUTED
tvp->dtor = dtor;
465a4: 2142 0010 movel %d2,%a0@(16) <== NOT EXECUTED
_Thread_Enable_dispatch();
465a8: 4eb9 0004 837e jsr 4837e <_Thread_Enable_dispatch> <== NOT EXECUTED
465ae: 603a bras 465ea <rtems_task_variable_add+0x7e> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
}
tvp = (rtems_task_variable_t *)tvp->next;
465b0: 2050 moveal %a0@,%a0 <== NOT EXECUTED
case OBJECTS_LOCAL:
/*
* Figure out if the variable is already in this task's list.
*/
tvp = the_thread->task_variables;
while (tvp) {
465b2: 4a88 tstl %a0 <== NOT EXECUTED
465b4: 66e8 bnes 4659e <rtems_task_variable_add+0x32> <== NOT EXECUTED
/*
* Now allocate memory for this task variable.
*/
new = (rtems_task_variable_t *)
_Workspace_Allocate(sizeof(rtems_task_variable_t));
465b6: 4878 0014 pea 14 <OPER2> <== NOT EXECUTED
465ba: 4eb9 0004 936c jsr 4936c <_Workspace_Allocate> <== NOT EXECUTED
if (new == NULL) {
465c0: 588f addql #4,%sp <== NOT EXECUTED
465c2: 43f9 0004 837e lea 4837e <_Thread_Enable_dispatch>,%a1 <== NOT EXECUTED
/*
* Now allocate memory for this task variable.
*/
new = (rtems_task_variable_t *)
_Workspace_Allocate(sizeof(rtems_task_variable_t));
465c8: 2040 moveal %d0,%a0 <== NOT EXECUTED
if (new == NULL) {
465ca: 4a80 tstl %d0 <== NOT EXECUTED
465cc: 6606 bnes 465d4 <rtems_task_variable_add+0x68> <== NOT EXECUTED
_Thread_Enable_dispatch();
465ce: 4e91 jsr %a1@ <== NOT EXECUTED
return RTEMS_NO_MEMORY;
465d0: 701a moveq #26,%d0 <== NOT EXECUTED
465d2: 6020 bras 465f4 <rtems_task_variable_add+0x88> <== NOT EXECUTED
}
new->gval = *ptr;
465d4: 2152 0008 movel %a2@,%a0@(8) <== NOT EXECUTED
new->ptr = ptr;
new->dtor = dtor;
new->next = (struct rtems_task_variable_tt *)the_thread->task_variables;
465d8: 20ab 010a movel %a3@(266),%a0@ <== NOT EXECUTED
if (new == NULL) {
_Thread_Enable_dispatch();
return RTEMS_NO_MEMORY;
}
new->gval = *ptr;
new->ptr = ptr;
465dc: 214a 0004 movel %a2,%a0@(4) <== NOT EXECUTED
new->dtor = dtor;
465e0: 2142 0010 movel %d2,%a0@(16) <== NOT EXECUTED
new->next = (struct rtems_task_variable_tt *)the_thread->task_variables;
the_thread->task_variables = new;
465e4: 2740 010a movel %d0,%a3@(266) <== NOT EXECUTED
_Thread_Enable_dispatch();
465e8: 4e91 jsr %a1@ <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
465ea: 4280 clrl %d0 <== NOT EXECUTED
465ec: 6006 bras 465f4 <rtems_task_variable_add+0x88> <== NOT EXECUTED
Thread_Control *the_thread;
Objects_Locations location;
rtems_task_variable_t *tvp, *new;
if ( !ptr )
return RTEMS_INVALID_ADDRESS;
465ee: 7009 moveq #9,%d0
465f0: 6002 bras 465f4 <rtems_task_variable_add+0x88>
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
465f2: 7004 moveq #4,%d0 <== NOT EXECUTED
}
465f4: 4cee 0c04 fff0 moveml %fp@(-16),%d2/%a2-%a3
465fa: 4e5e unlk %fp
...
00046600 <rtems_task_variable_delete>:
rtems_status_code rtems_task_variable_delete(
rtems_id tid,
void **ptr
)
{
46600: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
46604: 2f02 movel %d2,%sp@- <== NOT EXECUTED
46606: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
Thread_Control *the_thread;
Objects_Locations location;
rtems_task_variable_t *tvp, *prev;
if ( !ptr )
4660a: 6758 beqs 46664 <rtems_task_variable_delete+0x64><== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
prev = NULL;
the_thread = _Thread_Get (tid, &location);
4660c: 486e fffc pea %fp@(-4) <== NOT EXECUTED
46610: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
46614: 4eb9 0004 83a4 jsr 483a4 <_Thread_Get> <== NOT EXECUTED
switch (location) {
4661a: 508f addql #8,%sp <== NOT EXECUTED
4661c: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
46620: 6646 bnes 46668 <rtems_task_variable_delete+0x68><== NOT EXECUTED
case OBJECTS_LOCAL:
tvp = the_thread->task_variables;
46622: 2240 moveal %d0,%a1 <== NOT EXECUTED
46624: 2069 010a moveal %a1@(266),%a0 <== NOT EXECUTED
rtems_task_variable_t *tvp, *prev;
if ( !ptr )
return RTEMS_INVALID_ADDRESS;
prev = NULL;
46628: 93c9 subal %a1,%a1 <== NOT EXECUTED
the_thread = _Thread_Get (tid, &location);
switch (location) {
case OBJECTS_LOCAL:
tvp = the_thread->task_variables;
while (tvp) {
4662a: 602e bras 4665a <rtems_task_variable_delete+0x5a><== NOT EXECUTED
if (tvp->ptr == ptr) {
4662c: b4a8 0004 cmpl %a0@(4),%d2 <== NOT EXECUTED
46630: 6624 bnes 46656 <rtems_task_variable_delete+0x56><== NOT EXECUTED
if (prev)
46632: 4a89 tstl %a1 <== NOT EXECUTED
46634: 6704 beqs 4663a <rtems_task_variable_delete+0x3a><== NOT EXECUTED
prev->next = tvp->next;
46636: 2290 movel %a0@,%a1@ <== NOT EXECUTED
46638: 6006 bras 46640 <rtems_task_variable_delete+0x40><== NOT EXECUTED
else
the_thread->task_variables = (rtems_task_variable_t *)tvp->next;
4663a: 2240 moveal %d0,%a1 <== NOT EXECUTED
4663c: 2350 010a movel %a0@,%a1@(266) <== NOT EXECUTED
_RTEMS_Tasks_Invoke_task_variable_dtor( the_thread, tvp );
46640: 2f08 movel %a0,%sp@- <== NOT EXECUTED
46642: 2f00 movel %d0,%sp@- <== NOT EXECUTED
46644: 4eb9 0004 66dc jsr 466dc <_RTEMS_Tasks_Invoke_task_variable_dtor><== NOT EXECUTED
_Thread_Enable_dispatch();
4664a: 4eb9 0004 837e jsr 4837e <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
46650: 508f addql #8,%sp <== NOT EXECUTED
46652: 4280 clrl %d0 <== NOT EXECUTED
46654: 6014 bras 4666a <rtems_task_variable_delete+0x6a><== NOT EXECUTED
}
prev = tvp;
tvp = (rtems_task_variable_t *)tvp->next;
46656: 2248 moveal %a0,%a1 <== NOT EXECUTED
46658: 2050 moveal %a0@,%a0 <== NOT EXECUTED
the_thread = _Thread_Get (tid, &location);
switch (location) {
case OBJECTS_LOCAL:
tvp = the_thread->task_variables;
while (tvp) {
4665a: 4a88 tstl %a0 <== NOT EXECUTED
4665c: 66ce bnes 4662c <rtems_task_variable_delete+0x2c><== NOT EXECUTED
return RTEMS_SUCCESSFUL;
}
prev = tvp;
tvp = (rtems_task_variable_t *)tvp->next;
}
_Thread_Enable_dispatch();
4665e: 4eb9 0004 837e jsr 4837e <_Thread_Enable_dispatch> <== NOT EXECUTED
Thread_Control *the_thread;
Objects_Locations location;
rtems_task_variable_t *tvp, *prev;
if ( !ptr )
return RTEMS_INVALID_ADDRESS;
46664: 7009 moveq #9,%d0 <== NOT EXECUTED
46666: 6002 bras 4666a <rtems_task_variable_delete+0x6a><== NOT EXECUTED
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
46668: 7004 moveq #4,%d0 <== NOT EXECUTED
}
4666a: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
4666e: 4e5e unlk %fp <== NOT EXECUTED
...
00046674 <rtems_task_variable_get>:
rtems_status_code rtems_task_variable_get(
rtems_id tid,
void **ptr,
void **result
)
{
46674: 4e56 fffc linkw %fp,#-4
46678: 2f0a movel %a2,%sp@-
4667a: 246e 0010 moveal %fp@(16),%a2
4667e: 2f02 movel %d2,%sp@-
46680: 242e 000c movel %fp@(12),%d2
Thread_Control *the_thread;
Objects_Locations location;
rtems_task_variable_t *tvp;
if ( !ptr )
46684: 6742 beqs 466c8 <rtems_task_variable_get+0x54> <== ALWAYS TAKEN
return RTEMS_INVALID_ADDRESS;
if ( !result )
46686: 4a8a tstl %a2 <== NOT EXECUTED
46688: 673e beqs 466c8 <rtems_task_variable_get+0x54> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
the_thread = _Thread_Get (tid, &location);
4668a: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4668e: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
46692: 4eb9 0004 83a4 jsr 483a4 <_Thread_Get> <== NOT EXECUTED
switch (location) {
46698: 508f addql #8,%sp <== NOT EXECUTED
4669a: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4669e: 662c bnes 466cc <rtems_task_variable_get+0x58> <== NOT EXECUTED
case OBJECTS_LOCAL:
/*
* Figure out if the variable is in this task's list.
*/
tvp = the_thread->task_variables;
466a0: 2240 moveal %d0,%a1 <== NOT EXECUTED
466a2: 2069 010a moveal %a1@(266),%a0 <== NOT EXECUTED
while (tvp) {
466a6: 6016 bras 466be <rtems_task_variable_get+0x4a> <== NOT EXECUTED
if (tvp->ptr == ptr) {
466a8: b4a8 0004 cmpl %a0@(4),%d2 <== NOT EXECUTED
466ac: 660e bnes 466bc <rtems_task_variable_get+0x48> <== NOT EXECUTED
/*
* Should this return the current (i.e not the
* saved) value if `tid' is the current task?
*/
*result = tvp->tval;
466ae: 24a8 000c movel %a0@(12),%a2@ <== NOT EXECUTED
_Thread_Enable_dispatch();
466b2: 4eb9 0004 837e jsr 4837e <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
466b8: 4280 clrl %d0 <== NOT EXECUTED
466ba: 6012 bras 466ce <rtems_task_variable_get+0x5a> <== NOT EXECUTED
}
tvp = (rtems_task_variable_t *)tvp->next;
466bc: 2050 moveal %a0@,%a0 <== NOT EXECUTED
case OBJECTS_LOCAL:
/*
* Figure out if the variable is in this task's list.
*/
tvp = the_thread->task_variables;
while (tvp) {
466be: 4a88 tstl %a0 <== NOT EXECUTED
466c0: 66e6 bnes 466a8 <rtems_task_variable_get+0x34> <== NOT EXECUTED
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
tvp = (rtems_task_variable_t *)tvp->next;
}
_Thread_Enable_dispatch();
466c2: 4eb9 0004 837e jsr 4837e <_Thread_Enable_dispatch> <== NOT EXECUTED
if ( !ptr )
return RTEMS_INVALID_ADDRESS;
if ( !result )
return RTEMS_INVALID_ADDRESS;
466c8: 7009 moveq #9,%d0
466ca: 6002 bras 466ce <rtems_task_variable_get+0x5a>
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
466cc: 7004 moveq #4,%d0
}
466ce: 242e fff4 movel %fp@(-12),%d2
466d2: 246e fff8 moveal %fp@(-8),%a2
466d6: 4e5e unlk %fp
...
00045ad4 <rtems_task_wake_after>:
*/
rtems_status_code rtems_task_wake_after(
rtems_interval ticks
)
{
45ad4: 4e56 0000 linkw %fp,#0
45ad8: 2039 0005 db08 movel 5db08 <_Thread_Dispatch_disable_level>,%d0
45ade: 5280 addql #1,%d0
45ae0: 2f02 movel %d2,%sp@-
45ae2: 242e 0008 movel %fp@(8),%d2
45ae6: 23c0 0005 db08 movel %d0,5db08 <_Thread_Dispatch_disable_level>
_Thread_Disable_dispatch();
if ( ticks == 0 ) {
45aec: 4a82 tstl %d2
45aee: 6612 bnes 45b02 <rtems_task_wake_after+0x2e> <== ALWAYS TAKEN
* always operates on the scheduler that 'owns' the currently executing
* thread.
*/
RTEMS_INLINE_ROUTINE void _Scheduler_Yield( void )
{
_Scheduler.Operations.yield( &_Scheduler );
45af0: 4879 0005 db8e pea 5db8e <_Scheduler> <== NOT EXECUTED
45af6: 2079 0005 db96 moveal 5db96 <_Scheduler+0x8>,%a0 <== NOT EXECUTED
45afc: 4e90 jsr %a0@ <== NOT EXECUTED
45afe: 588f addql #4,%sp <== NOT EXECUTED
45b00: 6048 bras 45b4a <rtems_task_wake_after+0x76> <== NOT EXECUTED
_Scheduler_Yield();
} else {
_Thread_Set_state( _Thread_Executing, STATES_DELAYING );
45b02: 4878 0008 pea 8 <DIVIDE_BY_ZERO>
45b06: 2f39 0005 df96 movel 5df96 <_Per_CPU_Information+0xc>,%sp@-
45b0c: 4eb9 0004 7f7c jsr 47f7c <_Thread_Set_state>
_Watchdog_Initialize(
&_Thread_Executing->Timer,
_Thread_Delay_ended,
_Thread_Executing->Object.id,
45b12: 2079 0005 df96 moveal 5df96 <_Per_CPU_Information+0xc>,%a0
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
the_watchdog->routine = routine;
45b18: 223c 0004 762c movel #292396,%d1
_Thread_Disable_dispatch();
if ( ticks == 0 ) {
_Scheduler_Yield();
} else {
_Thread_Set_state( _Thread_Executing, STATES_DELAYING );
_Watchdog_Initialize(
45b1e: 2028 0008 movel %a0@(8),%d0
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
45b22: 42a8 0050 clrl %a0@(80)
the_watchdog->routine = routine;
45b26: 2141 0064 movel %d1,%a0@(100)
the_watchdog->id = id;
45b2a: 2140 0068 movel %d0,%a0@(104)
the_watchdog->user_data = user_data;
45b2e: 42a8 006c clrl %a0@(108)
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
45b32: 2142 0054 movel %d2,%a0@(84)
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
45b36: 4868 0048 pea %a0@(72)
45b3a: 4879 0005 dbe8 pea 5dbe8 <_Watchdog_Ticks_chain>
45b40: 4eb9 0004 8520 jsr 48520 <_Watchdog_Insert>
45b46: 4fef 0010 lea %sp@(16),%sp
_Thread_Executing->Object.id,
NULL
);
_Watchdog_Insert_ticks( &_Thread_Executing->Timer, ticks );
}
_Thread_Enable_dispatch();
45b4a: 4eb9 0004 77a6 jsr 477a6 <_Thread_Enable_dispatch>
return RTEMS_SUCCESSFUL;
}
45b50: 242e fffc movel %fp@(-4),%d2 <== NOT EXECUTED
45b54: 4280 clrl %d0 <== NOT EXECUTED
45b56: 4e5e unlk %fp <== NOT EXECUTED
...
000466d4 <rtems_task_wake_when>:
*/
rtems_status_code rtems_task_wake_when(
rtems_time_of_day *time_buffer
)
{
466d4: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
466d8: 2f0a movel %a2,%sp@- <== NOT EXECUTED
466da: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
Watchdog_Interval seconds;
if ( !_TOD_Is_set )
466de: 4a39 0005 f0c0 tstb 5f0c0 <_TOD_Is_set> <== NOT EXECUTED
466e4: 6700 0096 beqw 4677c <rtems_task_wake_when+0xa8> <== NOT EXECUTED
return RTEMS_NOT_DEFINED;
if ( !time_buffer )
466e8: 4a8a tstl %a2 <== NOT EXECUTED
466ea: 6700 0094 beqw 46780 <rtems_task_wake_when+0xac> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
time_buffer->ticks = 0;
466ee: 42aa 0018 clrl %a2@(24) <== NOT EXECUTED
if ( !_TOD_Validate( time_buffer ) )
466f2: 2f0a movel %a2,%sp@- <== NOT EXECUTED
466f4: 4eb9 0004 5b84 jsr 45b84 <_TOD_Validate> <== NOT EXECUTED
466fa: 588f addql #4,%sp <== NOT EXECUTED
466fc: 4a00 tstb %d0 <== NOT EXECUTED
466fe: 6700 0084 beqw 46784 <rtems_task_wake_when+0xb0> <== NOT EXECUTED
return RTEMS_INVALID_CLOCK;
seconds = _TOD_To_seconds( time_buffer );
46702: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46704: 4eb9 0004 5ae8 jsr 45ae8 <_TOD_To_seconds> <== NOT EXECUTED
if ( seconds <= _TOD_Seconds_since_epoch() )
4670a: 588f addql #4,%sp <== NOT EXECUTED
time_buffer->ticks = 0;
if ( !_TOD_Validate( time_buffer ) )
return RTEMS_INVALID_CLOCK;
seconds = _TOD_To_seconds( time_buffer );
4670c: 2440 moveal %d0,%a2 <== NOT EXECUTED
if ( seconds <= _TOD_Seconds_since_epoch() )
4670e: b0b9 0005 f15a cmpl 5f15a <_TOD_Now>,%d0 <== NOT EXECUTED
46714: 636e blss 46784 <rtems_task_wake_when+0xb0> <== NOT EXECUTED
46716: 2039 0005 f0b0 movel 5f0b0 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
4671c: 5280 addql #1,%d0 <== NOT EXECUTED
4671e: 23c0 0005 f0b0 movel %d0,5f0b0 <_Thread_Dispatch_disable_level><== NOT EXECUTED
return RTEMS_INVALID_CLOCK;
_Thread_Disable_dispatch();
_Thread_Set_state( _Thread_Executing, STATES_WAITING_FOR_TIME );
46724: 4878 0010 pea 10 <INVALID_OPERATION> <== NOT EXECUTED
46728: 2f39 0005 f53e movel 5f53e <_Per_CPU_Information+0xc>,%sp@-<== NOT EXECUTED
4672e: 4eb9 0004 8ba4 jsr 48ba4 <_Thread_Set_state> <== NOT EXECUTED
_Watchdog_Initialize(
&_Thread_Executing->Timer,
_Thread_Delay_ended,
_Thread_Executing->Object.id,
46734: 2079 0005 f53e moveal 5f53e <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
NULL
);
_Watchdog_Insert_seconds(
4673a: 95f9 0005 f15a subal 5f15a <_TOD_Now>,%a2 <== NOT EXECUTED
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
the_watchdog->routine = routine;
46740: 223c 0004 8254 movel #295508,%d1 <== NOT EXECUTED
if ( seconds <= _TOD_Seconds_since_epoch() )
return RTEMS_INVALID_CLOCK;
_Thread_Disable_dispatch();
_Thread_Set_state( _Thread_Executing, STATES_WAITING_FOR_TIME );
_Watchdog_Initialize(
46746: 2028 0008 movel %a0@(8),%d0 <== NOT EXECUTED
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
4674a: 42a8 0050 clrl %a0@(80) <== NOT EXECUTED
the_watchdog->routine = routine;
the_watchdog->id = id;
4674e: 2140 0068 movel %d0,%a0@(104) <== NOT EXECUTED
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
the_watchdog->routine = routine;
46752: 2141 0064 movel %d1,%a0@(100) <== NOT EXECUTED
the_watchdog->id = id;
the_watchdog->user_data = user_data;
46756: 42a8 006c clrl %a0@(108) <== NOT EXECUTED
&_Thread_Executing->Timer,
_Thread_Delay_ended,
_Thread_Executing->Object.id,
NULL
);
_Watchdog_Insert_seconds(
4675a: 214a 0054 movel %a2,%a0@(84) <== NOT EXECUTED
)
{
the_watchdog->initial = units;
_Watchdog_Insert( &_Watchdog_Seconds_chain, the_watchdog );
4675e: 4868 0048 pea %a0@(72) <== NOT EXECUTED
46762: 4879 0005 f184 pea 5f184 <_Watchdog_Seconds_chain> <== NOT EXECUTED
46768: 4eb9 0004 91c8 jsr 491c8 <_Watchdog_Insert> <== NOT EXECUTED
&_Thread_Executing->Timer,
seconds - _TOD_Seconds_since_epoch()
);
_Thread_Enable_dispatch();
4676e: 4eb9 0004 83ce jsr 483ce <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
46774: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
46778: 4280 clrl %d0 <== NOT EXECUTED
4677a: 600a bras 46786 <rtems_task_wake_when+0xb2> <== NOT EXECUTED
)
{
Watchdog_Interval seconds;
if ( !_TOD_Is_set )
return RTEMS_NOT_DEFINED;
4677c: 700b moveq #11,%d0 <== NOT EXECUTED
4677e: 6006 bras 46786 <rtems_task_wake_when+0xb2> <== NOT EXECUTED
if ( !time_buffer )
return RTEMS_INVALID_ADDRESS;
46780: 7009 moveq #9,%d0 <== NOT EXECUTED
46782: 6002 bras 46786 <rtems_task_wake_when+0xb2> <== NOT EXECUTED
return RTEMS_INVALID_CLOCK;
seconds = _TOD_To_seconds( time_buffer );
if ( seconds <= _TOD_Seconds_since_epoch() )
return RTEMS_INVALID_CLOCK;
46784: 7014 moveq #20,%d0 <== NOT EXECUTED
&_Thread_Executing->Timer,
seconds - _TOD_Seconds_since_epoch()
);
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
46786: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
4678a: 4e5e unlk %fp <== NOT EXECUTED
...
00051970 <rtems_timer_cancel>:
*/
rtems_status_code rtems_timer_cancel(
rtems_id id
)
{
51970: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
Objects_Id id,
Objects_Locations *location
)
{
return (Timer_Control *)
_Objects_Get( &_Timer_Information, id, location );
51974: 486e fffc pea %fp@(-4) <== NOT EXECUTED
51978: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
5197c: 4879 0007 6e52 pea 76e52 <_Timer_Information> <== NOT EXECUTED
51982: 4eb9 0005 43f0 jsr 543f0 <_Objects_Get> <== NOT EXECUTED
Timer_Control *the_timer;
Objects_Locations location;
the_timer = _Timer_Get( id, &location );
switch ( location ) {
51988: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
5198c: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
51990: 6620 bnes 519b2 <rtems_timer_cancel+0x42> <== NOT EXECUTED
case OBJECTS_LOCAL:
if ( !_Timer_Is_dormant_class( the_timer->the_class ) )
51992: 7204 moveq #4,%d1 <== NOT EXECUTED
51994: 2040 moveal %d0,%a0 <== NOT EXECUTED
51996: b2a8 0038 cmpl %a0@(56),%d1 <== NOT EXECUTED
5199a: 670c beqs 519a8 <rtems_timer_cancel+0x38> <== NOT EXECUTED
(void) _Watchdog_Remove( &the_timer->Ticker );
5199c: 4868 0010 pea %a0@(16) <== NOT EXECUTED
519a0: 4eb9 0005 5fdc jsr 55fdc <_Watchdog_Remove> <== NOT EXECUTED
519a6: 588f addql #4,%sp <== NOT EXECUTED
_Thread_Enable_dispatch();
519a8: 4eb9 0005 4eca jsr 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
519ae: 4280 clrl %d0 <== NOT EXECUTED
519b0: 6002 bras 519b4 <rtems_timer_cancel+0x44> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
519b2: 7004 moveq #4,%d0 <== NOT EXECUTED
}
519b4: 4e5e unlk %fp <== NOT EXECUTED
00045cb0 <rtems_timer_create>:
rtems_status_code rtems_timer_create(
rtems_name name,
rtems_id *id
)
{
45cb0: 4e56 fff4 linkw %fp,#-12
45cb4: 48d7 0c04 moveml %d2/%a2-%a3,%sp@
45cb8: 242e 0008 movel %fp@(8),%d2
45cbc: 246e 000c moveal %fp@(12),%a2
Timer_Control *the_timer;
if ( !rtems_is_name_valid( name ) )
45cc0: 6766 beqs 45d28 <rtems_timer_create+0x78> <== NEVER TAKEN
return RTEMS_INVALID_NAME;
if ( !id )
45cc2: 4a8a tstl %a2
45cc4: 6766 beqs 45d2c <rtems_timer_create+0x7c> <== NEVER TAKEN
45cc6: 2039 0005 dd6a movel 5dd6a <_Thread_Dispatch_disable_level>,%d0
45ccc: 5280 addql #1,%d0
45cce: 23c0 0005 dd6a movel %d0,5dd6a <_Thread_Dispatch_disable_level>
* This function allocates a timer control block from
* the inactive chain of free timer control blocks.
*/
RTEMS_INLINE_ROUTINE Timer_Control *_Timer_Allocate( void )
{
return (Timer_Control *) _Objects_Allocate( &_Timer_Information );
45cd4: 4879 0005 e5d0 pea 5e5d0 <_Timer_Information>
45cda: 4eb9 0004 6b04 jsr 46b04 <_Objects_Allocate>
_Thread_Disable_dispatch(); /* to prevent deletion */
the_timer = _Timer_Allocate();
if ( !the_timer ) {
45ce0: 588f addql #4,%sp
45ce2: 43f9 0004 79c2 lea 479c2 <_Thread_Enable_dispatch>,%a1
45ce8: 2040 moveal %d0,%a0
45cea: 4a80 tstl %d0
45cec: 6606 bnes 45cf4 <rtems_timer_create+0x44> <== ALWAYS TAKEN
_Thread_Enable_dispatch();
45cee: 4e91 jsr %a1@ <== NOT EXECUTED
return RTEMS_TOO_MANY;
45cf0: 7005 moveq #5,%d0 <== NOT EXECUTED
45cf2: 603a bras 45d2e <rtems_timer_create+0x7e> <== NOT EXECUTED
}
the_timer->the_class = TIMER_DORMANT;
45cf4: 7004 moveq #4,%d0
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
45cf6: 4281 clrl %d1
45cf8: 2140 0038 movel %d0,%a0@(56)
information,
_Objects_Get_index( the_object->id ),
45cfc: 2028 0008 movel %a0@(8),%d0
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
45d00: 2679 0005 e5e8 moveal 5e5e8 <_Timer_Information+0x18>,%a3
Objects_Information *information,
Objects_Control *the_object,
Objects_Name name
)
{
_Objects_Set_local_object(
45d06: 3200 movew %d0,%d1
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
45d08: 42a8 0018 clrl %a0@(24)
the_watchdog->routine = routine;
45d0c: 42a8 002c clrl %a0@(44)
the_watchdog->id = id;
45d10: 42a8 0030 clrl %a0@(48)
the_watchdog->user_data = user_data;
45d14: 42a8 0034 clrl %a0@(52)
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
45d18: 2788 1c00 movel %a0,%a3@(00000000,%d1:l:4)
information,
_Objects_Get_index( the_object->id ),
the_object
);
the_object->name = name;
45d1c: 2142 000c movel %d2,%a0@(12)
&_Timer_Information,
&the_timer->Object,
(Objects_Name) name
);
*id = the_timer->Object.id;
45d20: 2480 movel %d0,%a2@
_Thread_Enable_dispatch();
45d22: 4e91 jsr %a1@
return RTEMS_SUCCESSFUL;
45d24: 4280 clrl %d0
45d26: 6006 bras 45d2e <rtems_timer_create+0x7e>
)
{
Timer_Control *the_timer;
if ( !rtems_is_name_valid( name ) )
return RTEMS_INVALID_NAME;
45d28: 7003 moveq #3,%d0 <== NOT EXECUTED
45d2a: 6002 bras 45d2e <rtems_timer_create+0x7e> <== NOT EXECUTED
if ( !id )
return RTEMS_INVALID_ADDRESS;
45d2c: 7009 moveq #9,%d0 <== NOT EXECUTED
);
*id = the_timer->Object.id;
_Thread_Enable_dispatch();
return RTEMS_SUCCESSFUL;
}
45d2e: 4cee 0c04 fff4 moveml %fp@(-12),%d2/%a2-%a3
45d34: 4e5e unlk %fp <== NOT EXECUTED
00051a40 <rtems_timer_delete>:
*/
rtems_status_code rtems_timer_delete(
rtems_id id
)
{
51a40: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
51a44: 2f0a movel %a2,%sp@- <== NOT EXECUTED
Objects_Id id,
Objects_Locations *location
)
{
return (Timer_Control *)
_Objects_Get( &_Timer_Information, id, location );
51a46: 486e fffc pea %fp@(-4) <== NOT EXECUTED
51a4a: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
51a4e: 4879 0007 6e52 pea 76e52 <_Timer_Information> <== NOT EXECUTED
51a54: 4eb9 0005 43f0 jsr 543f0 <_Objects_Get> <== NOT EXECUTED
Timer_Control *the_timer;
Objects_Locations location;
the_timer = _Timer_Get( id, &location );
switch ( location ) {
51a5a: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
51a5e: 2440 moveal %d0,%a2 <== NOT EXECUTED
51a60: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
51a64: 6634 bnes 51a9a <rtems_timer_delete+0x5a> <== NOT EXECUTED
case OBJECTS_LOCAL:
_Objects_Close( &_Timer_Information, &the_timer->Object );
51a66: 2f00 movel %d0,%sp@- <== NOT EXECUTED
51a68: 4879 0007 6e52 pea 76e52 <_Timer_Information> <== NOT EXECUTED
51a6e: 4eb9 0005 3fdc jsr 53fdc <_Objects_Close> <== NOT EXECUTED
(void) _Watchdog_Remove( &the_timer->Ticker );
51a74: 486a 0010 pea %a2@(16) <== NOT EXECUTED
51a78: 4eb9 0005 5fdc jsr 55fdc <_Watchdog_Remove> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Timer_Free (
Timer_Control *the_timer
)
{
_Objects_Free( &_Timer_Information, &the_timer->Object );
51a7e: 2f0a movel %a2,%sp@- <== NOT EXECUTED
51a80: 4879 0007 6e52 pea 76e52 <_Timer_Information> <== NOT EXECUTED
51a86: 4eb9 0005 4254 jsr 54254 <_Objects_Free> <== NOT EXECUTED
_Timer_Free( the_timer );
_Thread_Enable_dispatch();
51a8c: 4eb9 0005 4eca jsr 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
51a92: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
51a96: 4280 clrl %d0 <== NOT EXECUTED
51a98: 6002 bras 51a9c <rtems_timer_delete+0x5c> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
51a9a: 7004 moveq #4,%d0 <== NOT EXECUTED
}
51a9c: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
51aa0: 4e5e unlk %fp <== NOT EXECUTED
00045d38 <rtems_timer_fire_after>:
rtems_id id,
rtems_interval ticks,
rtems_timer_service_routine_entry routine,
void *user_data
)
{
45d38: 4e56 ffe4 linkw %fp,#-28 <== NOT EXECUTED
45d3c: 48d7 0c3c moveml %d2-%d5/%a2-%a3,%sp@ <== NOT EXECUTED
45d40: 282e 0008 movel %fp@(8),%d4 <== NOT EXECUTED
45d44: 262e 000c movel %fp@(12),%d3 <== NOT EXECUTED
45d48: 2a2e 0010 movel %fp@(16),%d5 <== NOT EXECUTED
Timer_Control *the_timer;
Objects_Locations location;
ISR_Level level;
if ( ticks == 0 )
45d4c: 4a83 tstl %d3 <== NOT EXECUTED
45d4e: 6700 0088 beqw 45dd8 <rtems_timer_fire_after+0xa0> <== NOT EXECUTED
return RTEMS_INVALID_NUMBER;
if ( !routine )
45d52: 4a85 tstl %d5 <== NOT EXECUTED
45d54: 6700 0086 beqw 45ddc <rtems_timer_fire_after+0xa4> <== NOT EXECUTED
Objects_Id id,
Objects_Locations *location
)
{
return (Timer_Control *)
_Objects_Get( &_Timer_Information, id, location );
45d58: 486e fffc pea %fp@(-4) <== NOT EXECUTED
45d5c: 2f04 movel %d4,%sp@- <== NOT EXECUTED
45d5e: 4879 0005 e5d0 pea 5e5d0 <_Timer_Information> <== NOT EXECUTED
45d64: 4eb9 0004 6f5c jsr 46f5c <_Objects_Get> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
the_timer = _Timer_Get( id, &location );
switch ( location ) {
45d6a: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
45d6e: 2440 moveal %d0,%a2 <== NOT EXECUTED
45d70: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
45d74: 666a bnes 45de0 <rtems_timer_fire_after+0xa8> <== NOT EXECUTED
case OBJECTS_LOCAL:
(void) _Watchdog_Remove( &the_timer->Ticker );
45d76: 2400 movel %d0,%d2 <== NOT EXECUTED
45d78: 0682 0000 0010 addil #16,%d2 <== NOT EXECUTED
45d7e: 2f02 movel %d2,%sp@- <== NOT EXECUTED
45d80: 4eb9 0004 8858 jsr 48858 <_Watchdog_Remove> <== NOT EXECUTED
_ISR_Disable( level );
45d86: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
45d8c: 40c1 movew %sr,%d1 <== NOT EXECUTED
45d8e: 8081 orl %d1,%d0 <== NOT EXECUTED
45d90: 46c0 movew %d0,%sr <== NOT EXECUTED
45d92: 47f9 0004 79c2 lea 479c2 <_Thread_Enable_dispatch>,%a3 <== NOT EXECUTED
/*
* Check to see if the watchdog has just been inserted by a
* higher priority interrupt. If so, abandon this insert.
*/
if ( the_timer->Ticker.state != WATCHDOG_INACTIVE ) {
45d98: 588f addql #4,%sp <== NOT EXECUTED
45d9a: 4aaa 0018 tstl %a2@(24) <== NOT EXECUTED
45d9e: 6706 beqs 45da6 <rtems_timer_fire_after+0x6e> <== NOT EXECUTED
_ISR_Enable( level );
45da0: 46c1 movew %d1,%sr <== NOT EXECUTED
_Thread_Enable_dispatch();
45da2: 4e93 jsr %a3@ <== NOT EXECUTED
45da4: 602e bras 45dd4 <rtems_timer_fire_after+0x9c> <== NOT EXECUTED
/*
* OK. Now we now the timer was not rescheduled by an interrupt
* so we can atomically initialize it as in use.
*/
the_timer->the_class = TIMER_INTERVAL;
45da6: 42aa 0038 clrl %a2@(56) <== NOT EXECUTED
45daa: 256e 0014 0034 movel %fp@(20),%a2@(52) <== NOT EXECUTED
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
45db0: 42aa 0018 clrl %a2@(24) <== NOT EXECUTED
the_watchdog->routine = routine;
45db4: 2545 002c movel %d5,%a2@(44) <== NOT EXECUTED
the_watchdog->id = id;
45db8: 2544 0030 movel %d4,%a2@(48) <== NOT EXECUTED
_Watchdog_Initialize( &the_timer->Ticker, routine, id, user_data );
_ISR_Enable( level );
45dbc: 46c1 movew %d1,%sr <== NOT EXECUTED
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
45dbe: 2543 001c movel %d3,%a2@(28) <== NOT EXECUTED
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
45dc2: 2f02 movel %d2,%sp@- <== NOT EXECUTED
45dc4: 4879 0005 de4a pea 5de4a <_Watchdog_Ticks_chain> <== NOT EXECUTED
45dca: 4eb9 0004 873c jsr 4873c <_Watchdog_Insert> <== NOT EXECUTED
_Watchdog_Insert_ticks( &the_timer->Ticker, ticks );
_Thread_Enable_dispatch();
45dd0: 4e93 jsr %a3@ <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
45dd2: 508f addql #8,%sp <== NOT EXECUTED
45dd4: 4280 clrl %d0 <== NOT EXECUTED
45dd6: 600a bras 45de2 <rtems_timer_fire_after+0xaa> <== NOT EXECUTED
Timer_Control *the_timer;
Objects_Locations location;
ISR_Level level;
if ( ticks == 0 )
return RTEMS_INVALID_NUMBER;
45dd8: 700a moveq #10,%d0 <== NOT EXECUTED
45dda: 6006 bras 45de2 <rtems_timer_fire_after+0xaa> <== NOT EXECUTED
if ( !routine )
return RTEMS_INVALID_ADDRESS;
45ddc: 7009 moveq #9,%d0 <== NOT EXECUTED
45dde: 6002 bras 45de2 <rtems_timer_fire_after+0xaa> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
45de0: 7004 moveq #4,%d0 <== NOT EXECUTED
}
45de2: 4cee 0c3c ffe4 moveml %fp@(-28),%d2-%d5/%a2-%a3 <== NOT EXECUTED
45de8: 4e5e unlk %fp <== NOT EXECUTED
00051b58 <rtems_timer_fire_when>:
rtems_id id,
rtems_time_of_day *wall_time,
rtems_timer_service_routine_entry routine,
void *user_data
)
{
51b58: 4e56 ffe8 linkw %fp,#-24 <== NOT EXECUTED
51b5c: 48d7 043c moveml %d2-%d5/%a2,%sp@ <== NOT EXECUTED
51b60: 282e 0008 movel %fp@(8),%d4 <== NOT EXECUTED
51b64: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
51b68: 2a2e 0010 movel %fp@(16),%d5 <== NOT EXECUTED
Timer_Control *the_timer;
Objects_Locations location;
rtems_interval seconds;
if ( !_TOD_Is_set )
51b6c: 4a39 0007 65bc tstb 765bc <_TOD_Is_set> <== NOT EXECUTED
51b72: 6700 0098 beqw 51c0c <rtems_timer_fire_when+0xb4> <== NOT EXECUTED
return RTEMS_NOT_DEFINED;
if ( !_TOD_Validate( wall_time ) )
51b76: 2f02 movel %d2,%sp@- <== NOT EXECUTED
51b78: 4eb9 0004 f2b4 jsr 4f2b4 <_TOD_Validate> <== NOT EXECUTED
51b7e: 588f addql #4,%sp <== NOT EXECUTED
51b80: 4a00 tstb %d0 <== NOT EXECUTED
51b82: 6700 0090 beqw 51c14 <rtems_timer_fire_when+0xbc> <== NOT EXECUTED
return RTEMS_INVALID_CLOCK;
if ( !routine )
51b86: 4a85 tstl %d5 <== NOT EXECUTED
51b88: 6700 0086 beqw 51c10 <rtems_timer_fire_when+0xb8> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
seconds = _TOD_To_seconds( wall_time );
51b8c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
51b8e: 4eb9 0004 f218 jsr 4f218 <_TOD_To_seconds> <== NOT EXECUTED
if ( seconds <= _TOD_Seconds_since_epoch() )
51b94: 588f addql #4,%sp <== NOT EXECUTED
return RTEMS_INVALID_CLOCK;
if ( !routine )
return RTEMS_INVALID_ADDRESS;
seconds = _TOD_To_seconds( wall_time );
51b96: 2600 movel %d0,%d3 <== NOT EXECUTED
if ( seconds <= _TOD_Seconds_since_epoch() )
51b98: b0b9 0007 6656 cmpl 76656 <_TOD_Now>,%d0 <== NOT EXECUTED
51b9e: 6374 blss 51c14 <rtems_timer_fire_when+0xbc> <== NOT EXECUTED
51ba0: 486e fffc pea %fp@(-4) <== NOT EXECUTED
51ba4: 2f04 movel %d4,%sp@- <== NOT EXECUTED
51ba6: 4879 0007 6e52 pea 76e52 <_Timer_Information> <== NOT EXECUTED
51bac: 4eb9 0005 43f0 jsr 543f0 <_Objects_Get> <== NOT EXECUTED
return RTEMS_INVALID_CLOCK;
the_timer = _Timer_Get( id, &location );
switch ( location ) {
51bb2: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
51bb6: 2440 moveal %d0,%a2 <== NOT EXECUTED
51bb8: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
51bbc: 665a bnes 51c18 <rtems_timer_fire_when+0xc0> <== NOT EXECUTED
case OBJECTS_LOCAL:
(void) _Watchdog_Remove( &the_timer->Ticker );
51bbe: 2400 movel %d0,%d2 <== NOT EXECUTED
51bc0: 0682 0000 0010 addil #16,%d2 <== NOT EXECUTED
51bc6: 2f02 movel %d2,%sp@- <== NOT EXECUTED
51bc8: 4eb9 0005 5fdc jsr 55fdc <_Watchdog_Remove> <== NOT EXECUTED
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
the_watchdog->routine = routine;
the_watchdog->id = id;
the_watchdog->user_data = user_data;
51bce: 256e 0014 0034 movel %fp@(20),%a2@(52) <== NOT EXECUTED
the_timer->the_class = TIMER_TIME_OF_DAY;
_Watchdog_Initialize( &the_timer->Ticker, routine, id, user_data );
_Watchdog_Insert_seconds(
51bd4: 96b9 0007 6656 subl 76656 <_TOD_Now>,%d3 <== NOT EXECUTED
the_timer = _Timer_Get( id, &location );
switch ( location ) {
case OBJECTS_LOCAL:
(void) _Watchdog_Remove( &the_timer->Ticker );
the_timer->the_class = TIMER_TIME_OF_DAY;
51bda: 7002 moveq #2,%d0 <== NOT EXECUTED
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
51bdc: 42aa 0018 clrl %a2@(24) <== NOT EXECUTED
51be0: 2540 0038 movel %d0,%a2@(56) <== NOT EXECUTED
the_watchdog->routine = routine;
51be4: 2545 002c movel %d5,%a2@(44) <== NOT EXECUTED
the_watchdog->id = id;
51be8: 2544 0030 movel %d4,%a2@(48) <== NOT EXECUTED
_Watchdog_Initialize( &the_timer->Ticker, routine, id, user_data );
_Watchdog_Insert_seconds(
51bec: 2543 001c movel %d3,%a2@(28) <== NOT EXECUTED
)
{
the_watchdog->initial = units;
_Watchdog_Insert( &_Watchdog_Seconds_chain, the_watchdog );
51bf0: 2f02 movel %d2,%sp@- <== NOT EXECUTED
51bf2: 4879 0007 6680 pea 76680 <_Watchdog_Seconds_chain> <== NOT EXECUTED
51bf8: 4eb9 0005 5ec0 jsr 55ec0 <_Watchdog_Insert> <== NOT EXECUTED
&the_timer->Ticker,
seconds - _TOD_Seconds_since_epoch()
);
_Thread_Enable_dispatch();
51bfe: 4eb9 0005 4eca jsr 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
51c04: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
51c08: 4280 clrl %d0 <== NOT EXECUTED
51c0a: 600e bras 51c1a <rtems_timer_fire_when+0xc2> <== NOT EXECUTED
Timer_Control *the_timer;
Objects_Locations location;
rtems_interval seconds;
if ( !_TOD_Is_set )
return RTEMS_NOT_DEFINED;
51c0c: 700b moveq #11,%d0 <== NOT EXECUTED
51c0e: 600a bras 51c1a <rtems_timer_fire_when+0xc2> <== NOT EXECUTED
if ( !_TOD_Validate( wall_time ) )
return RTEMS_INVALID_CLOCK;
if ( !routine )
return RTEMS_INVALID_ADDRESS;
51c10: 7009 moveq #9,%d0 <== NOT EXECUTED
51c12: 6006 bras 51c1a <rtems_timer_fire_when+0xc2> <== NOT EXECUTED
seconds = _TOD_To_seconds( wall_time );
if ( seconds <= _TOD_Seconds_since_epoch() )
return RTEMS_INVALID_CLOCK;
51c14: 7014 moveq #20,%d0 <== NOT EXECUTED
51c16: 6002 bras 51c1a <rtems_timer_fire_when+0xc2> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
51c18: 7004 moveq #4,%d0 <== NOT EXECUTED
}
51c1a: 4cee 043c ffe8 moveml %fp@(-24),%d2-%d5/%a2 <== NOT EXECUTED
51c20: 4e5e unlk %fp <== NOT EXECUTED
00051c24 <rtems_timer_get_information>:
rtems_status_code rtems_timer_get_information(
rtems_id id,
rtems_timer_information *the_info
)
{
51c24: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
51c28: 2f0a movel %a2,%sp@- <== NOT EXECUTED
51c2a: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
Timer_Control *the_timer;
Objects_Locations location;
if ( !the_info )
51c2e: 4a8a tstl %a2 <== NOT EXECUTED
51c30: 6740 beqs 51c72 <rtems_timer_get_information+0x4e><== NOT EXECUTED
51c32: 486e fffc pea %fp@(-4) <== NOT EXECUTED
51c36: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
51c3a: 4879 0007 6e52 pea 76e52 <_Timer_Information> <== NOT EXECUTED
51c40: 4eb9 0005 43f0 jsr 543f0 <_Objects_Get> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
the_timer = _Timer_Get( id, &location );
switch ( location ) {
51c46: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
51c4a: 2040 moveal %d0,%a0 <== NOT EXECUTED
51c4c: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
51c50: 6624 bnes 51c76 <rtems_timer_get_information+0x52><== NOT EXECUTED
case OBJECTS_LOCAL:
the_info->the_class = the_timer->the_class;
51c52: 24a8 0038 movel %a0@(56),%a2@ <== NOT EXECUTED
the_info->initial = the_timer->Ticker.initial;
51c56: 2568 001c 0004 movel %a0@(28),%a2@(4) <== NOT EXECUTED
the_info->start_time = the_timer->Ticker.start_time;
51c5c: 2568 0024 0008 movel %a0@(36),%a2@(8) <== NOT EXECUTED
the_info->stop_time = the_timer->Ticker.stop_time;
51c62: 2568 0028 000c movel %a0@(40),%a2@(12) <== NOT EXECUTED
_Thread_Enable_dispatch();
51c68: 4eb9 0005 4eca jsr 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
51c6e: 4280 clrl %d0 <== NOT EXECUTED
51c70: 6006 bras 51c78 <rtems_timer_get_information+0x54><== NOT EXECUTED
{
Timer_Control *the_timer;
Objects_Locations location;
if ( !the_info )
return RTEMS_INVALID_ADDRESS;
51c72: 7009 moveq #9,%d0 <== NOT EXECUTED
51c74: 6002 bras 51c78 <rtems_timer_get_information+0x54><== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
51c76: 7004 moveq #4,%d0 <== NOT EXECUTED
}
51c78: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
51c7c: 4e5e unlk %fp <== NOT EXECUTED
00051c80 <rtems_timer_ident>:
rtems_status_code rtems_timer_ident(
rtems_name name,
rtems_id *id
)
{
51c80: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
Objects_Name_or_id_lookup_errors status;
status = _Objects_Name_to_id_u32(
51c84: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
51c88: 2f3c 7fff ffff movel #2147483647,%sp@- <== NOT EXECUTED
51c8e: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
51c92: 4879 0007 6e52 pea 76e52 <_Timer_Information> <== NOT EXECUTED
51c98: 4eb9 0005 457c jsr 5457c <_Objects_Name_to_id_u32> <== NOT EXECUTED
OBJECTS_SEARCH_LOCAL_NODE,
id
);
return _Status_Object_name_errors_to_status[ status ];
}
51c9e: 41f9 0006 f980 lea 6f980 <_Status_Object_name_errors_to_status>,%a0<== NOT EXECUTED
51ca4: 4e5e unlk %fp <== NOT EXECUTED
51ca6: 2030 0c00 movel %a0@(00000000,%d0:l:4),%d0 <== NOT EXECUTED
0005228a <rtems_timer_initiate_server>:
rtems_status_code rtems_timer_initiate_server(
uint32_t priority,
uint32_t stack_size,
rtems_attribute attribute_set
)
{
5228a: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
5228e: 202e 0008 movel %fp@(8),%d0 <== NOT EXECUTED
52292: 2f03 movel %d3,%sp@- <== NOT EXECUTED
52294: 2f02 movel %d2,%sp@- <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE bool _RTEMS_tasks_Priority_is_valid (
rtems_task_priority the_priority
)
{
return ( ( the_priority >= RTEMS_MINIMUM_PRIORITY ) &&
52296: 4a80 tstl %d0 <== NOT EXECUTED
52298: 6712 beqs 522ac <rtems_timer_initiate_server+0x22><== NOT EXECUTED
( the_priority <= RTEMS_MAXIMUM_PRIORITY ) );
5229a: 4281 clrl %d1 <== NOT EXECUTED
5229c: 1239 0007 0942 moveb 70942 <rtems_maximum_priority>,%d1 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE bool _RTEMS_tasks_Priority_is_valid (
rtems_task_priority the_priority
)
{
return ( ( the_priority >= RTEMS_MINIMUM_PRIORITY ) &&
522a2: b280 cmpl %d0,%d1 <== NOT EXECUTED
522a4: 54c1 scc %d1 <== NOT EXECUTED
522a6: 49c1 extbl %d1 <== NOT EXECUTED
522a8: 4481 negl %d1 <== NOT EXECUTED
522aa: 6002 bras 522ae <rtems_timer_initiate_server+0x24><== NOT EXECUTED
522ac: 4281 clrl %d1 <== NOT EXECUTED
* Make sure the requested priority is valid. The if is
* structured so we check it is invalid before looking for
* a specific invalid value as the default.
*/
_priority = priority;
if ( !_RTEMS_tasks_Priority_is_valid( priority ) ) {
522ae: 4a01 tstb %d1 <== NOT EXECUTED
522b0: 660c bnes 522be <rtems_timer_initiate_server+0x34><== NOT EXECUTED
if ( priority != RTEMS_TIMER_SERVER_DEFAULT_PRIORITY )
522b2: 72ff moveq #-1,%d1 <== NOT EXECUTED
522b4: b280 cmpl %d0,%d1 <== NOT EXECUTED
522b6: 6600 013a bnew 523f2 <rtems_timer_initiate_server+0x168><== NOT EXECUTED
return RTEMS_INVALID_PRIORITY;
_priority = 0;
522ba: 4282 clrl %d2 <== NOT EXECUTED
522bc: 6002 bras 522c0 <rtems_timer_initiate_server+0x36><== NOT EXECUTED
* Make sure the requested priority is valid. The if is
* structured so we check it is invalid before looking for
* a specific invalid value as the default.
*/
_priority = priority;
if ( !_RTEMS_tasks_Priority_is_valid( priority ) ) {
522be: 2400 movel %d0,%d2 <== NOT EXECUTED
}
/*
* Just to make sure this is only called once.
*/
_Thread_Disable_dispatch();
522c0: 4eba fc0a jsr %pc@(51ecc <_Thread_Disable_dispatch>) <== NOT EXECUTED
tmpInitialized = initialized;
initialized = true;
522c4: 7001 moveq #1,%d0 <== NOT EXECUTED
/*
* Just to make sure this is only called once.
*/
_Thread_Disable_dispatch();
tmpInitialized = initialized;
522c6: 1639 0007 1a8a moveb 71a8a <initialized.3675>,%d3 <== NOT EXECUTED
initialized = true;
522cc: 13c0 0007 1a8a moveb %d0,71a8a <initialized.3675> <== NOT EXECUTED
_Thread_Enable_dispatch();
522d2: 4eb9 0005 4eca jsr 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
if ( tmpInitialized )
522d8: 4a03 tstb %d3 <== NOT EXECUTED
522da: 6600 011a bnew 523f6 <rtems_timer_initiate_server+0x16c><== NOT EXECUTED
* other library rules. For example, if using a TSR written in Ada the
* Server should run at the same priority as the priority Ada task.
* Otherwise, the priority ceiling for the mutex used to protect the
* GNAT run-time is violated.
*/
status = rtems_task_create(
522de: 222e 0010 movel %fp@(16),%d1 <== NOT EXECUTED
522e2: 486e fffc pea %fp@(-4) <== NOT EXECUTED
522e6: 08c1 000f bset #15,%d1 <== NOT EXECUTED
522ea: 2f01 movel %d1,%sp@- <== NOT EXECUTED
522ec: 4878 0100 pea 100 <DBL_MANT_DIG+0xcb> <== NOT EXECUTED
522f0: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
522f4: 2f02 movel %d2,%sp@- <== NOT EXECUTED
522f6: 2f3c 5449 4d45 movel #1414090053,%sp@- <== NOT EXECUTED
522fc: 4eb9 0005 117c jsr 5117c <rtems_task_create> <== NOT EXECUTED
/* user may want floating point but we need */
/* system task specified for 0 priority */
attribute_set | RTEMS_SYSTEM_TASK,
&id /* get the id back */
);
if (status) {
52302: 4fef 0018 lea %sp@(24),%sp <== NOT EXECUTED
52306: 4a80 tstl %d0 <== NOT EXECUTED
52308: 670c beqs 52316 <rtems_timer_initiate_server+0x8c><== NOT EXECUTED
initialized = false;
5230a: 4201 clrb %d1 <== NOT EXECUTED
5230c: 13c1 0007 1a8a moveb %d1,71a8a <initialized.3675> <== NOT EXECUTED
return status;
52312: 6000 00e4 braw 523f8 <rtems_timer_initiate_server+0x16e><== NOT EXECUTED
* We work with the TCB pointer, not the ID, so we need to convert
* to a TCB pointer from here out.
*/
ts->thread = (Thread_Control *)_Objects_Get_local_object(
&_RTEMS_tasks_Information,
_Objects_Get_index(id)
52316: 202e fffc movel %fp@(-4),%d0 <== NOT EXECUTED
*/
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return NULL;
#endif
return information->local_table[ index ];
5231a: 4281 clrl %d1 <== NOT EXECUTED
5231c: 2079 0007 6542 moveal 76542 <_RTEMS_tasks_Information+0x18>,%a0<== NOT EXECUTED
52322: 3200 movew %d0,%d1 <== NOT EXECUTED
/*
* We work with the TCB pointer, not the ID, so we need to convert
* to a TCB pointer from here out.
*/
ts->thread = (Thread_Control *)_Objects_Get_local_object(
52324: 41f0 1c00 lea %a0@(00000000,%d1:l:4),%a0 <== NOT EXECUTED
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
head->previous = NULL;
tail->previous = head;
52328: 223c 0007 1a3c movel #465468,%d1 <== NOT EXECUTED
5232e: 23d0 0007 1a0c movel %a0@,71a0c <_Timer_server_Default> <== NOT EXECUTED
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
52334: 41f9 0007 1a40 lea 71a40 <_Timer_server_Default+0x34>,%a0 <== NOT EXECUTED
head->previous = NULL;
tail->previous = head;
5233a: 23c1 0007 1a44 movel %d1,71a44 <_Timer_server_Default+0x38><== NOT EXECUTED
52340: 223c 0007 1a74 movel #465524,%d1 <== NOT EXECUTED
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
52346: 23c8 0007 1a3c movel %a0,71a3c <_Timer_server_Default+0x30><== NOT EXECUTED
5234c: 41f9 0007 1a78 lea 71a78 <_Timer_server_Default+0x6c>,%a0 <== NOT EXECUTED
head->previous = NULL;
tail->previous = head;
52352: 23c1 0007 1a7c movel %d1,71a7c <_Timer_server_Default+0x70><== NOT EXECUTED
/*
* Initialize the pointer to the timer schedule method so applications that
* do not use the Timer Server do not have to pull it in.
*/
ts->schedule_operation = _Timer_server_Schedule_operation_method;
52358: 223c 0005 2170 movel #336240,%d1 <== NOT EXECUTED
)
{
Chain_Node *head = _Chain_Head( the_chain );
Chain_Node *tail = _Chain_Tail( the_chain );
head->next = tail;
5235e: 23c8 0007 1a74 movel %a0,71a74 <_Timer_server_Default+0x68><== NOT EXECUTED
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
the_watchdog->routine = routine;
52364: 41f9 0005 4d50 lea 54d50 <_Thread_Delay_ended>,%a0 <== NOT EXECUTED
5236a: 23c1 0007 1a10 movel %d1,71a10 <_Timer_server_Default+0x4> <== NOT EXECUTED
ts->Interval_watchdogs.last_snapshot = _Watchdog_Ticks_since_boot;
52370: 2239 0007 66d6 movel 766d6 <_Watchdog_Ticks_since_boot>,%d1<== NOT EXECUTED
52376: 23c8 0007 1a30 movel %a0,71a30 <_Timer_server_Default+0x24><== NOT EXECUTED
5237c: 23c8 0007 1a68 movel %a0,71a68 <_Timer_server_Default+0x5c><== NOT EXECUTED
ts->TOD_watchdogs.last_snapshot = (Watchdog_Interval) _TOD_Seconds_since_epoch();
52382: 41f9 0007 6656 lea 76656 <_TOD_Now>,%a0 <== NOT EXECUTED
* Initialize the pointer to the timer schedule method so applications that
* do not use the Timer Server do not have to pull it in.
*/
ts->schedule_operation = _Timer_server_Schedule_operation_method;
ts->Interval_watchdogs.last_snapshot = _Watchdog_Ticks_since_boot;
52388: 23c1 0007 1a48 movel %d1,71a48 <_Timer_server_Default+0x3c><== NOT EXECUTED
ts->TOD_watchdogs.last_snapshot = (Watchdog_Interval) _TOD_Seconds_since_epoch();
5238e: 23d0 0007 1a80 movel %a0@,71a80 <_Timer_server_Default+0x74><== NOT EXECUTED
ts->active = false;
/*
* The default timer server is now available.
*/
_Timer_server = ts;
52394: 41f9 0007 1a0c lea 71a0c <_Timer_server_Default>,%a0 <== NOT EXECUTED
ts->Interval_watchdogs.last_snapshot = _Watchdog_Ticks_since_boot;
ts->TOD_watchdogs.last_snapshot = (Watchdog_Interval) _TOD_Seconds_since_epoch();
ts->insert_chain = NULL;
ts->active = false;
5239a: 4201 clrb %d1 <== NOT EXECUTED
_Timer_server = ts;
/*
* Start the timer server
*/
status = rtems_task_start(
5239c: 2f08 movel %a0,%sp@- <== NOT EXECUTED
5239e: 487a fc06 pea %pc@(51fa6 <_Timer_server_Body>) <== NOT EXECUTED
ts->schedule_operation = _Timer_server_Schedule_operation_method;
ts->Interval_watchdogs.last_snapshot = _Watchdog_Ticks_since_boot;
ts->TOD_watchdogs.last_snapshot = (Watchdog_Interval) _TOD_Seconds_since_epoch();
ts->insert_chain = NULL;
523a2: 42b9 0007 1a84 clrl 71a84 <_Timer_server_Default+0x78> <== NOT EXECUTED
ts->active = false;
523a8: 13c1 0007 1a88 moveb %d1,71a88 <_Timer_server_Default+0x7c><== NOT EXECUTED
_Timer_server = ts;
/*
* Start the timer server
*/
status = rtems_task_start(
523ae: 2f00 movel %d0,%sp@- <== NOT EXECUTED
head->previous = NULL;
523b0: 42b9 0007 1a40 clrl 71a40 <_Timer_server_Default+0x34> <== NOT EXECUTED
523b6: 42b9 0007 1a78 clrl 71a78 <_Timer_server_Default+0x6c> <== NOT EXECUTED
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
523bc: 42b9 0007 1a1c clrl 71a1c <_Timer_server_Default+0x10> <== NOT EXECUTED
the_watchdog->routine = routine;
the_watchdog->id = id;
523c2: 23c0 0007 1a34 movel %d0,71a34 <_Timer_server_Default+0x28><== NOT EXECUTED
the_watchdog->user_data = user_data;
523c8: 42b9 0007 1a38 clrl 71a38 <_Timer_server_Default+0x2c> <== NOT EXECUTED
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
523ce: 42b9 0007 1a54 clrl 71a54 <_Timer_server_Default+0x48> <== NOT EXECUTED
the_watchdog->routine = routine;
the_watchdog->id = id;
523d4: 23c0 0007 1a6c movel %d0,71a6c <_Timer_server_Default+0x60><== NOT EXECUTED
the_watchdog->user_data = user_data;
523da: 42b9 0007 1a70 clrl 71a70 <_Timer_server_Default+0x64> <== NOT EXECUTED
ts->active = false;
/*
* The default timer server is now available.
*/
_Timer_server = ts;
523e0: 23c8 0007 6e8c movel %a0,76e8c <_Timer_server> <== NOT EXECUTED
/*
* Start the timer server
*/
status = rtems_task_start(
523e6: 4eb9 0005 1784 jsr 51784 <rtems_task_start> <== NOT EXECUTED
if (status) {
initialized = false;
}
#endif
return status;
523ec: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
523f0: 6006 bras 523f8 <rtems_timer_initiate_server+0x16e><== NOT EXECUTED
* a specific invalid value as the default.
*/
_priority = priority;
if ( !_RTEMS_tasks_Priority_is_valid( priority ) ) {
if ( priority != RTEMS_TIMER_SERVER_DEFAULT_PRIORITY )
return RTEMS_INVALID_PRIORITY;
523f2: 7013 moveq #19,%d0 <== NOT EXECUTED
523f4: 6002 bras 523f8 <rtems_timer_initiate_server+0x16e><== NOT EXECUTED
tmpInitialized = initialized;
initialized = true;
_Thread_Enable_dispatch();
if ( tmpInitialized )
return RTEMS_INCORRECT_STATE;
523f6: 700e moveq #14,%d0 <== NOT EXECUTED
initialized = false;
}
#endif
return status;
}
523f8: 242e fff4 movel %fp@(-12),%d2 <== NOT EXECUTED
523fc: 262e fff8 movel %fp@(-8),%d3 <== NOT EXECUTED
52400: 4e5e unlk %fp <== NOT EXECUTED
00051cac <rtems_timer_reset>:
*/
rtems_status_code rtems_timer_reset(
rtems_id id
)
{
51cac: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
51cb0: 2f0b movel %a3,%sp@- <== NOT EXECUTED
51cb2: 2f0a movel %a2,%sp@- <== NOT EXECUTED
51cb4: 486e fffc pea %fp@(-4) <== NOT EXECUTED
51cb8: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
51cbc: 4879 0007 6e52 pea 76e52 <_Timer_Information> <== NOT EXECUTED
51cc2: 4eb9 0005 43f0 jsr 543f0 <_Objects_Get> <== NOT EXECUTED
Timer_Control *the_timer;
Objects_Locations location;
rtems_status_code status = RTEMS_SUCCESSFUL;
the_timer = _Timer_Get( id, &location );
switch ( location ) {
51cc8: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
51ccc: 2440 moveal %d0,%a2 <== NOT EXECUTED
51cce: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
51cd2: 6656 bnes 51d2a <rtems_timer_reset+0x7e> <== NOT EXECUTED
case OBJECTS_LOCAL:
if ( the_timer->the_class == TIMER_INTERVAL ) {
51cd4: 202a 0038 movel %a2@(56),%d0 <== NOT EXECUTED
51cd8: 661c bnes 51cf6 <rtems_timer_reset+0x4a> <== NOT EXECUTED
_Watchdog_Remove( &the_timer->Ticker );
51cda: 45ea 0010 lea %a2@(16),%a2 <== NOT EXECUTED
51cde: 2f0a movel %a2,%sp@- <== NOT EXECUTED
51ce0: 4eb9 0005 5fdc jsr 55fdc <_Watchdog_Remove> <== NOT EXECUTED
_Watchdog_Insert( &_Watchdog_Ticks_chain, &the_timer->Ticker );
51ce6: 2f0a movel %a2,%sp@- <== NOT EXECUTED
51ce8: 4879 0007 668c pea 7668c <_Watchdog_Ticks_chain> <== NOT EXECUTED
51cee: 4eb9 0005 5ec0 jsr 55ec0 <_Watchdog_Insert> <== NOT EXECUTED
51cf4: 6020 bras 51d16 <rtems_timer_reset+0x6a> <== NOT EXECUTED
} else if ( the_timer->the_class == TIMER_INTERVAL_ON_TASK ) {
51cf6: 7201 moveq #1,%d1 <== NOT EXECUTED
51cf8: b280 cmpl %d0,%d1 <== NOT EXECUTED
51cfa: 6622 bnes 51d1e <rtems_timer_reset+0x72> <== NOT EXECUTED
if ( !timer_server ) {
_Thread_Enable_dispatch();
return RTEMS_INCORRECT_STATE;
}
#endif
_Watchdog_Remove( &the_timer->Ticker );
51cfc: 486a 0010 pea %a2@(16) <== NOT EXECUTED
case OBJECTS_LOCAL:
if ( the_timer->the_class == TIMER_INTERVAL ) {
_Watchdog_Remove( &the_timer->Ticker );
_Watchdog_Insert( &_Watchdog_Ticks_chain, &the_timer->Ticker );
} else if ( the_timer->the_class == TIMER_INTERVAL_ON_TASK ) {
Timer_server_Control *timer_server = _Timer_server;
51d00: 2679 0007 6e8c moveal 76e8c <_Timer_server>,%a3 <== NOT EXECUTED
if ( !timer_server ) {
_Thread_Enable_dispatch();
return RTEMS_INCORRECT_STATE;
}
#endif
_Watchdog_Remove( &the_timer->Ticker );
51d06: 4eb9 0005 5fdc jsr 55fdc <_Watchdog_Remove> <== NOT EXECUTED
(*timer_server->schedule_operation)( timer_server, the_timer );
51d0c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
51d0e: 2f0b movel %a3,%sp@- <== NOT EXECUTED
51d10: 206b 0004 moveal %a3@(4),%a0 <== NOT EXECUTED
51d14: 4e90 jsr %a0@ <== NOT EXECUTED
51d16: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
rtems_id id
)
{
Timer_Control *the_timer;
Objects_Locations location;
rtems_status_code status = RTEMS_SUCCESSFUL;
51d1a: 95ca subal %a2,%a2 <== NOT EXECUTED
51d1c: 6004 bras 51d22 <rtems_timer_reset+0x76> <== NOT EXECUTED
/*
* Must be dormant or time of day timer (e.g. TIMER_DORMANT,
* TIMER_TIME_OF_DAY, or TIMER_TIME_OF_DAY_ON_TASK). We
* can only reset active interval timers.
*/
status = RTEMS_NOT_DEFINED;
51d1e: 347c 000b moveaw #11,%a2 <== NOT EXECUTED
}
_Thread_Enable_dispatch();
51d22: 4eb9 0005 4eca jsr 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
return status;
51d28: 6004 bras 51d2e <rtems_timer_reset+0x82> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
51d2a: 347c 0004 moveaw #4,%a2 <== NOT EXECUTED
}
51d2e: 200a movel %a2,%d0 <== NOT EXECUTED
51d30: 246e fff4 moveal %fp@(-12),%a2 <== NOT EXECUTED
51d34: 266e fff8 moveal %fp@(-8),%a3 <== NOT EXECUTED
51d38: 4e5e unlk %fp <== NOT EXECUTED
00051d3c <rtems_timer_server_fire_after>:
rtems_id id,
rtems_interval ticks,
rtems_timer_service_routine_entry routine,
void *user_data
)
{
51d3c: 4e56 ffe4 linkw %fp,#-28 <== NOT EXECUTED
51d40: 48d7 1c1c moveml %d2-%d4/%a2-%a4,%sp@ <== NOT EXECUTED
51d44: 262e 0008 movel %fp@(8),%d3 <== NOT EXECUTED
51d48: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
51d4c: 282e 0010 movel %fp@(16),%d4 <== NOT EXECUTED
Timer_Control *the_timer;
Objects_Locations location;
ISR_Level level;
Timer_server_Control *timer_server = _Timer_server;
51d50: 2679 0007 6e8c moveal 76e8c <_Timer_server>,%a3 <== NOT EXECUTED
if ( !timer_server )
51d56: 4a8b tstl %a3 <== NOT EXECUTED
51d58: 6700 0086 beqw 51de0 <rtems_timer_server_fire_after+0xa4><== NOT EXECUTED
return RTEMS_INCORRECT_STATE;
if ( !routine )
51d5c: 4a84 tstl %d4 <== NOT EXECUTED
51d5e: 6700 0084 beqw 51de4 <rtems_timer_server_fire_after+0xa8><== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
if ( ticks == 0 )
51d62: 4a82 tstl %d2 <== NOT EXECUTED
51d64: 6700 0082 beqw 51de8 <rtems_timer_server_fire_after+0xac><== NOT EXECUTED
51d68: 486e fffc pea %fp@(-4) <== NOT EXECUTED
51d6c: 2f03 movel %d3,%sp@- <== NOT EXECUTED
51d6e: 4879 0007 6e52 pea 76e52 <_Timer_Information> <== NOT EXECUTED
51d74: 4eb9 0005 43f0 jsr 543f0 <_Objects_Get> <== NOT EXECUTED
return RTEMS_INVALID_NUMBER;
the_timer = _Timer_Get( id, &location );
switch ( location ) {
51d7a: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
51d7e: 2440 moveal %d0,%a2 <== NOT EXECUTED
51d80: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
51d84: 6666 bnes 51dec <rtems_timer_server_fire_after+0xb0><== NOT EXECUTED
case OBJECTS_LOCAL:
(void) _Watchdog_Remove( &the_timer->Ticker );
51d86: 486a 0010 pea %a2@(16) <== NOT EXECUTED
51d8a: 4eb9 0005 5fdc jsr 55fdc <_Watchdog_Remove> <== NOT EXECUTED
_ISR_Disable( level );
51d90: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
51d96: 40c1 movew %sr,%d1 <== NOT EXECUTED
51d98: 8081 orl %d1,%d0 <== NOT EXECUTED
51d9a: 46c0 movew %d0,%sr <== NOT EXECUTED
51d9c: 49f9 0005 4eca lea 54eca <_Thread_Enable_dispatch>,%a4 <== NOT EXECUTED
/*
* Check to see if the watchdog has just been inserted by a
* higher priority interrupt. If so, abandon this insert.
*/
if ( the_timer->Ticker.state != WATCHDOG_INACTIVE ) {
51da2: 588f addql #4,%sp <== NOT EXECUTED
51da4: 4aaa 0018 tstl %a2@(24) <== NOT EXECUTED
51da8: 6706 beqs 51db0 <rtems_timer_server_fire_after+0x74><== NOT EXECUTED
_ISR_Enable( level );
51daa: 46c1 movew %d1,%sr <== NOT EXECUTED
_Thread_Enable_dispatch();
51dac: 4e94 jsr %a4@ <== NOT EXECUTED
51dae: 602c bras 51ddc <rtems_timer_server_fire_after+0xa0><== NOT EXECUTED
/*
* OK. Now we now the timer was not rescheduled by an interrupt
* so we can atomically initialize it as in use.
*/
the_timer->the_class = TIMER_INTERVAL_ON_TASK;
51db0: 7001 moveq #1,%d0 <== NOT EXECUTED
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
the_watchdog->routine = routine;
the_watchdog->id = id;
the_watchdog->user_data = user_data;
51db2: 256e 0014 0034 movel %fp@(20),%a2@(52) <== NOT EXECUTED
51db8: 2540 0038 movel %d0,%a2@(56) <== NOT EXECUTED
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
51dbc: 42aa 0018 clrl %a2@(24) <== NOT EXECUTED
the_watchdog->routine = routine;
51dc0: 2544 002c movel %d4,%a2@(44) <== NOT EXECUTED
the_watchdog->id = id;
51dc4: 2543 0030 movel %d3,%a2@(48) <== NOT EXECUTED
_Watchdog_Initialize( &the_timer->Ticker, routine, id, user_data );
the_timer->Ticker.initial = ticks;
51dc8: 2542 001c movel %d2,%a2@(28) <== NOT EXECUTED
_ISR_Enable( level );
51dcc: 46c1 movew %d1,%sr <== NOT EXECUTED
(*timer_server->schedule_operation)( timer_server, the_timer );
51dce: 2f0a movel %a2,%sp@- <== NOT EXECUTED
51dd0: 2f0b movel %a3,%sp@- <== NOT EXECUTED
51dd2: 206b 0004 moveal %a3@(4),%a0 <== NOT EXECUTED
51dd6: 4e90 jsr %a0@ <== NOT EXECUTED
_Thread_Enable_dispatch();
51dd8: 4e94 jsr %a4@ <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
51dda: 508f addql #8,%sp <== NOT EXECUTED
51ddc: 4280 clrl %d0 <== NOT EXECUTED
51dde: 600e bras 51dee <rtems_timer_server_fire_after+0xb2><== NOT EXECUTED
Objects_Locations location;
ISR_Level level;
Timer_server_Control *timer_server = _Timer_server;
if ( !timer_server )
return RTEMS_INCORRECT_STATE;
51de0: 700e moveq #14,%d0 <== NOT EXECUTED
51de2: 600a bras 51dee <rtems_timer_server_fire_after+0xb2><== NOT EXECUTED
if ( !routine )
return RTEMS_INVALID_ADDRESS;
51de4: 7009 moveq #9,%d0 <== NOT EXECUTED
51de6: 6006 bras 51dee <rtems_timer_server_fire_after+0xb2><== NOT EXECUTED
if ( ticks == 0 )
return RTEMS_INVALID_NUMBER;
51de8: 700a moveq #10,%d0 <== NOT EXECUTED
51dea: 6002 bras 51dee <rtems_timer_server_fire_after+0xb2><== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
51dec: 7004 moveq #4,%d0 <== NOT EXECUTED
}
51dee: 4cee 1c1c ffe4 moveml %fp@(-28),%d2-%d4/%a2-%a4 <== NOT EXECUTED
51df4: 4e5e unlk %fp <== NOT EXECUTED
00051df8 <rtems_timer_server_fire_when>:
rtems_id id,
rtems_time_of_day *wall_time,
rtems_timer_service_routine_entry routine,
void *user_data
)
{
51df8: 4e56 ffe8 linkw %fp,#-24 <== NOT EXECUTED
51dfc: 48d7 0c1c moveml %d2-%d4/%a2-%a3,%sp@ <== NOT EXECUTED
51e00: 262e 0008 movel %fp@(8),%d3 <== NOT EXECUTED
51e04: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
51e08: 282e 0010 movel %fp@(16),%d4 <== NOT EXECUTED
Timer_Control *the_timer;
Objects_Locations location;
rtems_interval seconds;
Timer_server_Control *timer_server = _Timer_server;
51e0c: 2679 0007 6e8c moveal 76e8c <_Timer_server>,%a3 <== NOT EXECUTED
if ( !timer_server )
51e12: 4a8b tstl %a3 <== NOT EXECUTED
51e14: 6700 0098 beqw 51eae <rtems_timer_server_fire_when+0xb6><== NOT EXECUTED
return RTEMS_INCORRECT_STATE;
if ( !_TOD_Is_set )
51e18: 4a39 0007 65bc tstb 765bc <_TOD_Is_set> <== NOT EXECUTED
51e1e: 6700 0092 beqw 51eb2 <rtems_timer_server_fire_when+0xba><== NOT EXECUTED
return RTEMS_NOT_DEFINED;
if ( !routine )
51e22: 4a84 tstl %d4 <== NOT EXECUTED
51e24: 6700 0090 beqw 51eb6 <rtems_timer_server_fire_when+0xbe><== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
if ( !_TOD_Validate( wall_time ) )
51e28: 2f02 movel %d2,%sp@- <== NOT EXECUTED
51e2a: 4eb9 0004 f2b4 jsr 4f2b4 <_TOD_Validate> <== NOT EXECUTED
51e30: 588f addql #4,%sp <== NOT EXECUTED
51e32: 4a00 tstb %d0 <== NOT EXECUTED
51e34: 6700 0084 beqw 51eba <rtems_timer_server_fire_when+0xc2><== NOT EXECUTED
return RTEMS_INVALID_CLOCK;
seconds = _TOD_To_seconds( wall_time );
51e38: 2f02 movel %d2,%sp@- <== NOT EXECUTED
51e3a: 4eb9 0004 f218 jsr 4f218 <_TOD_To_seconds> <== NOT EXECUTED
if ( seconds <= _TOD_Seconds_since_epoch() )
51e40: 588f addql #4,%sp <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
if ( !_TOD_Validate( wall_time ) )
return RTEMS_INVALID_CLOCK;
seconds = _TOD_To_seconds( wall_time );
51e42: 2400 movel %d0,%d2 <== NOT EXECUTED
if ( seconds <= _TOD_Seconds_since_epoch() )
51e44: b0b9 0007 6656 cmpl 76656 <_TOD_Now>,%d0 <== NOT EXECUTED
51e4a: 636e blss 51eba <rtems_timer_server_fire_when+0xc2><== NOT EXECUTED
51e4c: 486e fffc pea %fp@(-4) <== NOT EXECUTED
51e50: 2f03 movel %d3,%sp@- <== NOT EXECUTED
51e52: 4879 0007 6e52 pea 76e52 <_Timer_Information> <== NOT EXECUTED
51e58: 4eb9 0005 43f0 jsr 543f0 <_Objects_Get> <== NOT EXECUTED
return RTEMS_INVALID_CLOCK;
the_timer = _Timer_Get( id, &location );
switch ( location ) {
51e5e: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
51e62: 2440 moveal %d0,%a2 <== NOT EXECUTED
51e64: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
51e68: 6654 bnes 51ebe <rtems_timer_server_fire_when+0xc6><== NOT EXECUTED
case OBJECTS_LOCAL:
(void) _Watchdog_Remove( &the_timer->Ticker );
51e6a: 486a 0010 pea %a2@(16) <== NOT EXECUTED
51e6e: 4eb9 0005 5fdc jsr 55fdc <_Watchdog_Remove> <== NOT EXECUTED
the_watchdog->user_data = user_data;
51e74: 256e 0014 0034 movel %fp@(20),%a2@(52) <== NOT EXECUTED
the_timer->the_class = TIMER_TIME_OF_DAY_ON_TASK;
_Watchdog_Initialize( &the_timer->Ticker, routine, id, user_data );
the_timer->Ticker.initial = seconds - _TOD_Seconds_since_epoch();
51e7a: 94b9 0007 6656 subl 76656 <_TOD_Now>,%d2 <== NOT EXECUTED
the_timer = _Timer_Get( id, &location );
switch ( location ) {
case OBJECTS_LOCAL:
(void) _Watchdog_Remove( &the_timer->Ticker );
the_timer->the_class = TIMER_TIME_OF_DAY_ON_TASK;
51e80: 7003 moveq #3,%d0 <== NOT EXECUTED
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
51e82: 42aa 0018 clrl %a2@(24) <== NOT EXECUTED
51e86: 2540 0038 movel %d0,%a2@(56) <== NOT EXECUTED
the_watchdog->routine = routine;
51e8a: 2544 002c movel %d4,%a2@(44) <== NOT EXECUTED
the_watchdog->id = id;
51e8e: 2543 0030 movel %d3,%a2@(48) <== NOT EXECUTED
_Watchdog_Initialize( &the_timer->Ticker, routine, id, user_data );
the_timer->Ticker.initial = seconds - _TOD_Seconds_since_epoch();
51e92: 2542 001c movel %d2,%a2@(28) <== NOT EXECUTED
(*timer_server->schedule_operation)( timer_server, the_timer );
51e96: 2f0a movel %a2,%sp@- <== NOT EXECUTED
51e98: 2f0b movel %a3,%sp@- <== NOT EXECUTED
51e9a: 206b 0004 moveal %a3@(4),%a0 <== NOT EXECUTED
51e9e: 4e90 jsr %a0@ <== NOT EXECUTED
_Thread_Enable_dispatch();
51ea0: 4eb9 0005 4eca jsr 54eca <_Thread_Enable_dispatch> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
51ea6: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
51eaa: 4280 clrl %d0 <== NOT EXECUTED
51eac: 6012 bras 51ec0 <rtems_timer_server_fire_when+0xc8><== NOT EXECUTED
Objects_Locations location;
rtems_interval seconds;
Timer_server_Control *timer_server = _Timer_server;
if ( !timer_server )
return RTEMS_INCORRECT_STATE;
51eae: 700e moveq #14,%d0 <== NOT EXECUTED
51eb0: 600e bras 51ec0 <rtems_timer_server_fire_when+0xc8><== NOT EXECUTED
if ( !_TOD_Is_set )
return RTEMS_NOT_DEFINED;
51eb2: 700b moveq #11,%d0 <== NOT EXECUTED
51eb4: 600a bras 51ec0 <rtems_timer_server_fire_when+0xc8><== NOT EXECUTED
if ( !routine )
return RTEMS_INVALID_ADDRESS;
51eb6: 7009 moveq #9,%d0 <== NOT EXECUTED
51eb8: 6006 bras 51ec0 <rtems_timer_server_fire_when+0xc8><== NOT EXECUTED
if ( !_TOD_Validate( wall_time ) )
return RTEMS_INVALID_CLOCK;
seconds = _TOD_To_seconds( wall_time );
if ( seconds <= _TOD_Seconds_since_epoch() )
return RTEMS_INVALID_CLOCK;
51eba: 7014 moveq #20,%d0 <== NOT EXECUTED
51ebc: 6002 bras 51ec0 <rtems_timer_server_fire_when+0xc8><== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
return RTEMS_INVALID_ID;
51ebe: 7004 moveq #4,%d0 <== NOT EXECUTED
}
51ec0: 4cee 0c1c ffe8 moveml %fp@(-24),%d2-%d4/%a2-%a3 <== NOT EXECUTED
51ec6: 4e5e unlk %fp <== NOT EXECUTED
...
0004608e <rtems_workspace_allocate>:
*/
bool rtems_workspace_allocate(
uintptr_t bytes,
void **pointer
)
{
4608e: 4e56 0000 linkw %fp,#0
46092: 202e 0008 movel %fp@(8),%d0
46096: 2f0a movel %a2,%sp@-
46098: 246e 000c moveal %fp@(12),%a2
void *ptr;
/*
* check the arguments
*/
if ( !pointer )
4609c: 4a8a tstl %a2
4609e: 6724 beqs 460c4 <rtems_workspace_allocate+0x36> <== NEVER TAKEN
return false;
if ( !bytes )
460a0: 4a80 tstl %d0
460a2: 6720 beqs 460c4 <rtems_workspace_allocate+0x36> <== NEVER TAKEN
RTEMS_INLINE_ROUTINE void *_Protected_heap_Allocate(
Heap_Control *heap,
uintptr_t size
)
{
return _Protected_heap_Allocate_aligned_with_boundary( heap, size, 0, 0 );
460a4: 42a7 clrl %sp@-
460a6: 42a7 clrl %sp@-
460a8: 2f00 movel %d0,%sp@-
460aa: 4879 0005 e446 pea 5e446 <_Workspace_Area>
460b0: 4eb9 0004 759c jsr 4759c <_Protected_heap_Allocate_aligned_with_boundary>
/*
* Allocate the memory
*/
ptr = _Protected_heap_Allocate( &_Workspace_Area, (intptr_t) bytes );
if (!ptr)
460b6: 4fef 0010 lea %sp@(16),%sp
460ba: 4a80 tstl %d0
460bc: 6706 beqs 460c4 <rtems_workspace_allocate+0x36> <== NEVER TAKEN
return false;
*pointer = ptr;
460be: 2480 movel %d0,%a2@
return true;
460c0: 7001 moveq #1,%d0
460c2: 6002 bras 460c6 <rtems_workspace_allocate+0x38>
/*
* Allocate the memory
*/
ptr = _Protected_heap_Allocate( &_Workspace_Area, (intptr_t) bytes );
if (!ptr)
return false;
460c4: 4200 clrb %d0
*pointer = ptr;
return true;
}
460c6: 246e fffc moveal %fp@(-4),%a2
460ca: 4e5e unlk %fp <== NOT EXECUTED
000460ce <rtems_workspace_free>:
* _Workspace_Allocate
*/
bool rtems_workspace_free(
void *pointer
)
{
460ce: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return _Protected_heap_Free( &_Workspace_Area, pointer );
460d2: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
460d6: 4879 0005 e446 pea 5e446 <_Workspace_Area> <== NOT EXECUTED
460dc: 4eb9 0004 75dc jsr 475dc <_Protected_heap_Free> <== NOT EXECUTED
}
460e2: 4e5e unlk %fp <== NOT EXECUTED
...
0004606c <rtems_workspace_get_information>:
#include <string.h> /* for memset */
bool rtems_workspace_get_information(
Heap_Information_block *the_info
)
{
4606c: 4e56 0000 linkw %fp,#0
46070: 202e 0008 movel %fp@(8),%d0
if ( !the_info )
46074: 6712 beqs 46088 <rtems_workspace_get_information+0x1c><== NEVER TAKEN
return false;
return _Protected_heap_Get_information( &_Workspace_Area, the_info );
46076: 2f00 movel %d0,%sp@-
46078: 4879 0005 e446 pea 5e446 <_Workspace_Area>
4607e: 4eb9 0004 7614 jsr 47614 <_Protected_heap_Get_information>
46084: 508f addql #8,%sp
46086: 6002 bras 4608a <rtems_workspace_get_information+0x1e>
bool rtems_workspace_get_information(
Heap_Information_block *the_info
)
{
if ( !the_info )
return false;
46088: 4200 clrb %d0
return _Protected_heap_Get_information( &_Workspace_Area, the_info );
}
4608a: 4e5e unlk %fp <== NOT EXECUTED
00045d94 <sched_get_priority_max>:
int sched_get_priority_max(
int policy
)
{
switch ( policy ) {
45d94: 7004 moveq #4,%d0 <== NOT EXECUTED
#include <rtems/posix/priority.h>
int sched_get_priority_max(
int policy
)
{
45d96: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
45d9a: 222e 0008 movel %fp@(8),%d1 <== NOT EXECUTED
switch ( policy ) {
45d9e: b081 cmpl %d1,%d0 <== NOT EXECUTED
45da0: 650c bcss 45dae <sched_get_priority_max+0x1a> <== NOT EXECUTED
45da2: 103c 0001 moveb #1,%d0 <== NOT EXECUTED
45da6: e3a8 lsll %d1,%d0 <== NOT EXECUTED
45da8: 7217 moveq #23,%d1 <== NOT EXECUTED
45daa: c081 andl %d1,%d0 <== NOT EXECUTED
45dac: 6610 bnes 45dbe <sched_get_priority_max+0x2a> <== NOT EXECUTED
case SCHED_RR:
case SCHED_SPORADIC:
break;
default:
rtems_set_errno_and_return_minus_one( EINVAL );
45dae: 4eb9 0004 d518 jsr 4d518 <__errno> <== NOT EXECUTED
45db4: 2040 moveal %d0,%a0 <== NOT EXECUTED
45db6: 7016 moveq #22,%d0 <== NOT EXECUTED
45db8: 2080 movel %d0,%a0@ <== NOT EXECUTED
45dba: 70ff moveq #-1,%d0 <== NOT EXECUTED
45dbc: 600a bras 45dc8 <sched_get_priority_max+0x34> <== NOT EXECUTED
}
return POSIX_SCHEDULER_MAXIMUM_PRIORITY;
45dbe: 4280 clrl %d0 <== NOT EXECUTED
45dc0: 1039 0005 d2a6 moveb 5d2a6 <rtems_maximum_priority>,%d0 <== NOT EXECUTED
45dc6: 5380 subql #1,%d0 <== NOT EXECUTED
}
45dc8: 4e5e unlk %fp <== NOT EXECUTED
00045dcc <sched_get_priority_min>:
int sched_get_priority_min(
int policy
)
{
switch ( policy ) {
45dcc: 7004 moveq #4,%d0 <== NOT EXECUTED
#include <rtems/posix/priority.h>
int sched_get_priority_min(
int policy
)
{
45dce: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
45dd2: 222e 0008 movel %fp@(8),%d1 <== NOT EXECUTED
switch ( policy ) {
45dd6: b081 cmpl %d1,%d0 <== NOT EXECUTED
45dd8: 650c bcss 45de6 <sched_get_priority_min+0x1a> <== NOT EXECUTED
45dda: 103c 0001 moveb #1,%d0 <== NOT EXECUTED
45dde: e3a8 lsll %d1,%d0 <== NOT EXECUTED
45de0: 7217 moveq #23,%d1 <== NOT EXECUTED
45de2: c081 andl %d1,%d0 <== NOT EXECUTED
45de4: 6610 bnes 45df6 <sched_get_priority_min+0x2a> <== NOT EXECUTED
case SCHED_RR:
case SCHED_SPORADIC:
break;
default:
rtems_set_errno_and_return_minus_one( EINVAL );
45de6: 4eb9 0004 d518 jsr 4d518 <__errno> <== NOT EXECUTED
45dec: 2040 moveal %d0,%a0 <== NOT EXECUTED
45dee: 7016 moveq #22,%d0 <== NOT EXECUTED
45df0: 2080 movel %d0,%a0@ <== NOT EXECUTED
45df2: 70ff moveq #-1,%d0 <== NOT EXECUTED
45df4: 6002 bras 45df8 <sched_get_priority_min+0x2c> <== NOT EXECUTED
}
return POSIX_SCHEDULER_MINIMUM_PRIORITY;
45df6: 7001 moveq #1,%d0 <== NOT EXECUTED
}
45df8: 4e5e unlk %fp <== NOT EXECUTED
0004554c <sched_getparam>:
int sched_getparam(
pid_t pid __attribute__((unused)),
struct sched_param *param __attribute__((unused))
)
{
4554c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
45550: 4eb9 0004 d1a4 jsr 4d1a4 <__errno> <== NOT EXECUTED
}
45556: 4e5e unlk %fp <== NOT EXECUTED
int sched_getparam(
pid_t pid __attribute__((unused)),
struct sched_param *param __attribute__((unused))
)
{
rtems_set_errno_and_return_minus_one( ENOSYS );
45558: 2040 moveal %d0,%a0 <== NOT EXECUTED
4555a: 7058 moveq #88,%d0 <== NOT EXECUTED
4555c: 2080 movel %d0,%a0@ <== NOT EXECUTED
}
4555e: 70ff moveq #-1,%d0 <== NOT EXECUTED
...
00045564 <sched_getscheduler>:
#include <rtems/posix/time.h>
int sched_getscheduler(
pid_t pid __attribute__((unused))
)
{
45564: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
45568: 4eb9 0004 d1a4 jsr 4d1a4 <__errno> <== NOT EXECUTED
}
4556e: 4e5e unlk %fp <== NOT EXECUTED
int sched_getscheduler(
pid_t pid __attribute__((unused))
)
{
rtems_set_errno_and_return_minus_one( ENOSYS );
45570: 2040 moveal %d0,%a0 <== NOT EXECUTED
45572: 7058 moveq #88,%d0 <== NOT EXECUTED
45574: 2080 movel %d0,%a0@ <== NOT EXECUTED
}
45576: 70ff moveq #-1,%d0 <== NOT EXECUTED
...
00045dfc <sched_rr_get_interval>:
int sched_rr_get_interval(
pid_t pid,
struct timespec *interval
)
{
45dfc: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
45e00: 2f03 movel %d3,%sp@- <== NOT EXECUTED
45e02: 262e 0008 movel %fp@(8),%d3 <== NOT EXECUTED
45e06: 2f02 movel %d2,%sp@- <== NOT EXECUTED
45e08: 242e 000c movel %fp@(12),%d2 <== NOT EXECUTED
/*
* Only supported for the "calling process" (i.e. this node).
*/
if ( pid && pid != getpid() )
45e0c: 4a83 tstl %d3 <== NOT EXECUTED
45e0e: 6718 beqs 45e28 <sched_rr_get_interval+0x2c> <== NOT EXECUTED
45e10: 4eb9 0004 2ec8 jsr 42ec8 <getpid> <== NOT EXECUTED
45e16: b083 cmpl %d3,%d0 <== NOT EXECUTED
45e18: 670e beqs 45e28 <sched_rr_get_interval+0x2c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ESRCH );
45e1a: 4eb9 0004 d518 jsr 4d518 <__errno> <== NOT EXECUTED
45e20: 7203 moveq #3,%d1 <== NOT EXECUTED
45e22: 2040 moveal %d0,%a0 <== NOT EXECUTED
45e24: 2081 movel %d1,%a0@ <== NOT EXECUTED
45e26: 6010 bras 45e38 <sched_rr_get_interval+0x3c> <== NOT EXECUTED
if ( !interval )
45e28: 4a82 tstl %d2 <== NOT EXECUTED
45e2a: 6610 bnes 45e3c <sched_rr_get_interval+0x40> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
45e2c: 4eb9 0004 d518 jsr 4d518 <__errno> <== NOT EXECUTED
45e32: 2040 moveal %d0,%a0 <== NOT EXECUTED
45e34: 7016 moveq #22,%d0 <== NOT EXECUTED
45e36: 2080 movel %d0,%a0@ <== NOT EXECUTED
45e38: 70ff moveq #-1,%d0 <== NOT EXECUTED
45e3a: 6012 bras 45e4e <sched_rr_get_interval+0x52> <== NOT EXECUTED
_Timespec_From_ticks( _Thread_Ticks_per_timeslice, interval );
45e3c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
45e3e: 2f39 0005 eae0 movel 5eae0 <_Thread_Ticks_per_timeslice>,%sp@-<== NOT EXECUTED
45e44: 4eb9 0004 9118 jsr 49118 <_Timespec_From_ticks> <== NOT EXECUTED
return 0;
45e4a: 508f addql #8,%sp <== NOT EXECUTED
45e4c: 4280 clrl %d0 <== NOT EXECUTED
}
45e4e: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
45e52: 262e fffc movel %fp@(-4),%d3 <== NOT EXECUTED
45e56: 4e5e unlk %fp <== NOT EXECUTED
...
0004557c <sched_setparam>:
int sched_setparam(
pid_t pid __attribute__((unused)),
const struct sched_param *param __attribute__((unused))
)
{
4557c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
45580: 4eb9 0004 d1a4 jsr 4d1a4 <__errno> <== NOT EXECUTED
}
45586: 4e5e unlk %fp <== NOT EXECUTED
int sched_setparam(
pid_t pid __attribute__((unused)),
const struct sched_param *param __attribute__((unused))
)
{
rtems_set_errno_and_return_minus_one( ENOSYS );
45588: 2040 moveal %d0,%a0 <== NOT EXECUTED
4558a: 7058 moveq #88,%d0 <== NOT EXECUTED
4558c: 2080 movel %d0,%a0@ <== NOT EXECUTED
}
4558e: 70ff moveq #-1,%d0 <== NOT EXECUTED
...
00045594 <sched_setscheduler>:
int sched_setscheduler(
pid_t pid __attribute__((unused)),
int policy __attribute__((unused)),
const struct sched_param *param __attribute__((unused))
)
{
45594: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
45598: 4eb9 0004 d1a4 jsr 4d1a4 <__errno> <== NOT EXECUTED
}
4559e: 4e5e unlk %fp <== NOT EXECUTED
pid_t pid __attribute__((unused)),
int policy __attribute__((unused)),
const struct sched_param *param __attribute__((unused))
)
{
rtems_set_errno_and_return_minus_one( ENOSYS );
455a0: 2040 moveal %d0,%a0 <== NOT EXECUTED
455a2: 7058 moveq #88,%d0 <== NOT EXECUTED
455a4: 2080 movel %d0,%a0@ <== NOT EXECUTED
}
455a6: 70ff moveq #-1,%d0 <== NOT EXECUTED
...
00045e5c <sched_yield>:
#include <rtems/seterr.h>
#include <rtems/posix/priority.h>
#include <rtems/posix/time.h>
int sched_yield( void )
{
45e5c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
45e60: 2039 0005 eb28 movel 5eb28 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
45e66: 5280 addql #1,%d0 <== NOT EXECUTED
45e68: 23c0 0005 eb28 movel %d0,5eb28 <_Thread_Dispatch_disable_level><== NOT EXECUTED
* always operates on the scheduler that 'owns' the currently executing
* thread.
*/
RTEMS_INLINE_ROUTINE void _Scheduler_Yield( void )
{
_Scheduler.Operations.yield( &_Scheduler );
45e6e: 4879 0005 ebae pea 5ebae <_Scheduler> <== NOT EXECUTED
45e74: 2079 0005 ebb6 moveal 5ebb6 <_Scheduler+0x8>,%a0 <== NOT EXECUTED
45e7a: 4e90 jsr %a0@ <== NOT EXECUTED
_Thread_Disable_dispatch();
_Scheduler_Yield();
_Thread_Enable_dispatch();
45e7c: 4eb9 0004 8652 jsr 48652 <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
}
45e82: 4280 clrl %d0 <== NOT EXECUTED
45e84: 4e5e unlk %fp <== NOT EXECUTED
000482f0 <sem_close>:
*/
int sem_close(
sem_t *sem
)
{
482f0: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
sem_t *id,
Objects_Locations *location
)
{
return (POSIX_Semaphore_Control *)
_Objects_Get( &_POSIX_Semaphore_Information, (Objects_Id)*id, location );
482f4: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
482f8: 486e fffc pea %fp@(-4) <== NOT EXECUTED
482fc: 2f10 movel %a0@,%sp@- <== NOT EXECUTED
482fe: 4879 0006 2cae pea 62cae <_POSIX_Semaphore_Information> <== NOT EXECUTED
48304: 4eb9 0004 a308 jsr 4a308 <_Objects_Get> <== NOT EXECUTED
register POSIX_Semaphore_Control *the_semaphore;
Objects_Locations location;
the_semaphore = _POSIX_Semaphore_Get( sem, &location );
switch ( location ) {
4830a: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4830e: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
48312: 661a bnes 4832e <sem_close+0x3e> <== NOT EXECUTED
case OBJECTS_LOCAL:
the_semaphore->open_count -= 1;
48314: 2040 moveal %d0,%a0 <== NOT EXECUTED
48316: 53a8 0016 subql #1,%a0@(22) <== NOT EXECUTED
_POSIX_Semaphore_Delete( the_semaphore );
4831a: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4831c: 4eb9 0004 df6c jsr 4df6c <_POSIX_Semaphore_Delete> <== NOT EXECUTED
_Thread_Enable_dispatch();
48322: 4eb9 0004 adee jsr 4adee <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
48328: 588f addql #4,%sp <== NOT EXECUTED
4832a: 4280 clrl %d0 <== NOT EXECUTED
4832c: 600e bras 4833c <sem_close+0x4c> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
rtems_set_errno_and_return_minus_one( EINVAL );
4832e: 4eb9 0005 07c0 jsr 507c0 <__errno> <== NOT EXECUTED
48334: 2040 moveal %d0,%a0 <== NOT EXECUTED
48336: 7016 moveq #22,%d0 <== NOT EXECUTED
48338: 2080 movel %d0,%a0@ <== NOT EXECUTED
4833a: 70ff moveq #-1,%d0 <== NOT EXECUTED
}
4833c: 4e5e unlk %fp <== NOT EXECUTED
00048340 <sem_destroy>:
*/
int sem_destroy(
sem_t *sem
)
{
48340: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
48344: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
48348: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4834a: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4834e: 2f10 movel %a0@,%sp@- <== NOT EXECUTED
48350: 4879 0006 2cae pea 62cae <_POSIX_Semaphore_Information> <== NOT EXECUTED
48356: 4eb9 0004 a308 jsr 4a308 <_Objects_Get> <== NOT EXECUTED
register POSIX_Semaphore_Control *the_semaphore;
Objects_Locations location;
the_semaphore = _POSIX_Semaphore_Get( sem, &location );
switch ( location ) {
4835c: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
48360: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
48364: 6622 bnes 48388 <sem_destroy+0x48> <== NOT EXECUTED
48366: 45f9 0004 adee lea 4adee <_Thread_Enable_dispatch>,%a2 <== NOT EXECUTED
case OBJECTS_LOCAL:
/*
* Undefined operation on a named semaphore.
*/
if ( the_semaphore->named == true ) {
4836c: 2040 moveal %d0,%a0 <== NOT EXECUTED
4836e: 4a28 0014 tstb %a0@(20) <== NOT EXECUTED
48372: 6704 beqs 48378 <sem_destroy+0x38> <== NOT EXECUTED
_Thread_Enable_dispatch();
48374: 4e92 jsr %a2@ <== NOT EXECUTED
48376: 6010 bras 48388 <sem_destroy+0x48> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
}
_POSIX_Semaphore_Delete( the_semaphore );
48378: 2f00 movel %d0,%sp@- <== NOT EXECUTED
4837a: 4eb9 0004 df6c jsr 4df6c <_POSIX_Semaphore_Delete> <== NOT EXECUTED
_Thread_Enable_dispatch();
48380: 4e92 jsr %a2@ <== NOT EXECUTED
return 0;
48382: 588f addql #4,%sp <== NOT EXECUTED
48384: 4280 clrl %d0 <== NOT EXECUTED
48386: 600e bras 48396 <sem_destroy+0x56> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
rtems_set_errno_and_return_minus_one( EINVAL );
48388: 4eb9 0005 07c0 jsr 507c0 <__errno> <== NOT EXECUTED
4838e: 2040 moveal %d0,%a0 <== NOT EXECUTED
48390: 7016 moveq #22,%d0 <== NOT EXECUTED
48392: 2080 movel %d0,%a0@ <== NOT EXECUTED
48394: 70ff moveq #-1,%d0 <== NOT EXECUTED
}
48396: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
4839a: 4e5e unlk %fp <== NOT EXECUTED
...
000483a0 <sem_getvalue>:
int sem_getvalue(
sem_t *sem,
int *sval
)
{
483a0: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
483a4: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
483a8: 486e fffc pea %fp@(-4) <== NOT EXECUTED
483ac: 2f10 movel %a0@,%sp@- <== NOT EXECUTED
483ae: 4879 0006 2cae pea 62cae <_POSIX_Semaphore_Information> <== NOT EXECUTED
483b4: 4eb9 0004 a308 jsr 4a308 <_Objects_Get> <== NOT EXECUTED
register POSIX_Semaphore_Control *the_semaphore;
Objects_Locations location;
the_semaphore = _POSIX_Semaphore_Get( sem, &location );
switch ( location ) {
483ba: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
483be: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
483c2: 6614 bnes 483d8 <sem_getvalue+0x38> <== NOT EXECUTED
case OBJECTS_LOCAL:
*sval = _CORE_semaphore_Get_count( &the_semaphore->Semaphore );
483c4: 206e 000c moveal %fp@(12),%a0 <== NOT EXECUTED
483c8: 2240 moveal %d0,%a1 <== NOT EXECUTED
483ca: 20a9 0062 movel %a1@(98),%a0@ <== NOT EXECUTED
_Thread_Enable_dispatch();
483ce: 4eb9 0004 adee jsr 4adee <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
483d4: 4280 clrl %d0 <== NOT EXECUTED
483d6: 600e bras 483e6 <sem_getvalue+0x46> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
rtems_set_errno_and_return_minus_one( EINVAL );
483d8: 4eb9 0005 07c0 jsr 507c0 <__errno> <== NOT EXECUTED
483de: 2040 moveal %d0,%a0 <== NOT EXECUTED
483e0: 7016 moveq #22,%d0 <== NOT EXECUTED
483e2: 2080 movel %d0,%a0@ <== NOT EXECUTED
483e4: 70ff moveq #-1,%d0 <== NOT EXECUTED
}
483e6: 4e5e unlk %fp <== NOT EXECUTED
...
000483ec <sem_init>:
int sem_init(
sem_t *sem,
int pshared,
unsigned int value
)
{
483ec: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
483f0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
483f2: 246e 0008 moveal %fp@(8),%a2 <== NOT EXECUTED
int status;
POSIX_Semaphore_Control *the_semaphore;
if ( !sem )
483f6: 4a8a tstl %a2 <== NOT EXECUTED
483f8: 6610 bnes 4840a <sem_init+0x1e> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
483fa: 4eb9 0005 07c0 jsr 507c0 <__errno> <== NOT EXECUTED
48400: 2040 moveal %d0,%a0 <== NOT EXECUTED
48402: 7016 moveq #22,%d0 <== NOT EXECUTED
48404: 2080 movel %d0,%a0@ <== NOT EXECUTED
48406: 70ff moveq #-1,%d0 <== NOT EXECUTED
48408: 6026 bras 48430 <sem_init+0x44> <== NOT EXECUTED
status = _POSIX_Semaphore_Create_support(
4840a: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4840e: 2f2e 0010 movel %fp@(16),%sp@- <== NOT EXECUTED
48412: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
48416: 42a7 clrl %sp@- <== NOT EXECUTED
48418: 4eb9 0004 de78 jsr 4de78 <_POSIX_Semaphore_Create_support> <== NOT EXECUTED
pshared,
value,
&the_semaphore
);
if ( status != -1 )
4841e: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
48422: 72ff moveq #-1,%d1 <== NOT EXECUTED
48424: b280 cmpl %d0,%d1 <== NOT EXECUTED
48426: 6708 beqs 48430 <sem_init+0x44> <== NOT EXECUTED
*sem = the_semaphore->Object.id;
48428: 206e fffc moveal %fp@(-4),%a0 <== NOT EXECUTED
4842c: 24a8 0008 movel %a0@(8),%a2@ <== NOT EXECUTED
return status;
}
48430: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
48434: 4e5e unlk %fp <== NOT EXECUTED
00048438 <sem_open>:
int oflag,
...
/* mode_t mode, */
/* unsigned int value */
)
{
48438: 4e56 ffe0 linkw %fp,#-32 <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
4843c: 2039 0006 2a74 movel 62a74 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
48442: 5280 addql #1,%d0 <== NOT EXECUTED
48444: 48d7 043c moveml %d2-%d5/%a2,%sp@ <== NOT EXECUTED
48448: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
4844c: 282e 000c movel %fp@(12),%d4 <== NOT EXECUTED
48450: 23c0 0006 2a74 movel %d0,62a74 <_Thread_Dispatch_disable_level><== NOT EXECUTED
POSIX_Semaphore_Control *the_semaphore;
Objects_Locations location;
_Thread_Disable_dispatch();
if ( oflag & O_CREAT ) {
48456: 2a04 movel %d4,%d5 <== NOT EXECUTED
48458: 0285 0000 0200 andil #512,%d5 <== NOT EXECUTED
4845e: 6706 beqs 48466 <sem_open+0x2e> <== NOT EXECUTED
va_start(arg, oflag);
mode = (mode_t) va_arg( arg, unsigned int );
value = va_arg( arg, unsigned int );
48460: 262e 0014 movel %fp@(20),%d3 <== NOT EXECUTED
48464: 6002 bras 48468 <sem_open+0x30> <== NOT EXECUTED
/* unsigned int value */
)
{
va_list arg;
mode_t mode;
unsigned int value = 0;
48466: 4283 clrl %d3 <== NOT EXECUTED
mode = (mode_t) va_arg( arg, unsigned int );
value = va_arg( arg, unsigned int );
va_end(arg);
}
status = _POSIX_Semaphore_Name_to_id( name, &the_semaphore_id );
48468: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4846c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4846e: 4eb9 0004 dfbc jsr 4dfbc <_POSIX_Semaphore_Name_to_id> <== NOT EXECUTED
* and we can just return a pointer to the id. Otherwise we may
* need to check to see if this is a "semaphore does not exist"
* or some other miscellaneous error on the name.
*/
if ( status ) {
48474: 508f addql #8,%sp <== NOT EXECUTED
mode = (mode_t) va_arg( arg, unsigned int );
value = va_arg( arg, unsigned int );
va_end(arg);
}
status = _POSIX_Semaphore_Name_to_id( name, &the_semaphore_id );
48476: 2440 moveal %d0,%a2 <== NOT EXECUTED
* and we can just return a pointer to the id. Otherwise we may
* need to check to see if this is a "semaphore does not exist"
* or some other miscellaneous error on the name.
*/
if ( status ) {
48478: 4a80 tstl %d0 <== NOT EXECUTED
4847a: 671c beqs 48498 <sem_open+0x60> <== NOT EXECUTED
/*
* Unless provided a valid name that did not already exist
* and we are willing to create then it is an error.
*/
if ( !( status == ENOENT && (oflag & O_CREAT) ) ) {
4847c: 7002 moveq #2,%d0 <== NOT EXECUTED
4847e: b08a cmpl %a2,%d0 <== NOT EXECUTED
48480: 6604 bnes 48486 <sem_open+0x4e> <== NOT EXECUTED
48482: 4a85 tstl %d5 <== NOT EXECUTED
48484: 665e bnes 484e4 <sem_open+0xac> <== NOT EXECUTED
_Thread_Enable_dispatch();
48486: 4eb9 0004 adee jsr 4adee <_Thread_Enable_dispatch> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one_cast( status, sem_t * );
4848c: 4eb9 0005 07c0 jsr 507c0 <__errno> <== NOT EXECUTED
48492: 2040 moveal %d0,%a0 <== NOT EXECUTED
48494: 208a movel %a2,%a0@ <== NOT EXECUTED
48496: 6076 bras 4850e <sem_open+0xd6> <== NOT EXECUTED
48498: 45f9 0004 adee lea 4adee <_Thread_Enable_dispatch>,%a2 <== NOT EXECUTED
/*
* Check for existence with creation.
*/
if ( (oflag & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL) ) {
4849e: 0284 0000 0a00 andil #2560,%d4 <== NOT EXECUTED
484a4: 0c84 0000 0a00 cmpil #2560,%d4 <== NOT EXECUTED
484aa: 6610 bnes 484bc <sem_open+0x84> <== NOT EXECUTED
_Thread_Enable_dispatch();
484ac: 4e92 jsr %a2@ <== NOT EXECUTED
rtems_set_errno_and_return_minus_one_cast( EEXIST, sem_t * );
484ae: 4eb9 0005 07c0 jsr 507c0 <__errno> <== NOT EXECUTED
484b4: 2040 moveal %d0,%a0 <== NOT EXECUTED
484b6: 7011 moveq #17,%d0 <== NOT EXECUTED
484b8: 2080 movel %d0,%a0@ <== NOT EXECUTED
484ba: 6052 bras 4850e <sem_open+0xd6> <== NOT EXECUTED
484bc: 486e fff4 pea %fp@(-12) <== NOT EXECUTED
484c0: 2f2e fffc movel %fp@(-4),%sp@- <== NOT EXECUTED
484c4: 4879 0006 2cae pea 62cae <_POSIX_Semaphore_Information> <== NOT EXECUTED
484ca: 4eb9 0004 a308 jsr 4a308 <_Objects_Get> <== NOT EXECUTED
}
the_semaphore = _POSIX_Semaphore_Get( &the_semaphore_id, &location );
the_semaphore->open_count += 1;
484d0: 2040 moveal %d0,%a0 <== NOT EXECUTED
484d2: 52a8 0016 addql #1,%a0@(22) <== NOT EXECUTED
if ( (oflag & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL) ) {
_Thread_Enable_dispatch();
rtems_set_errno_and_return_minus_one_cast( EEXIST, sem_t * );
}
the_semaphore = _POSIX_Semaphore_Get( &the_semaphore_id, &location );
484d6: 2d40 fff8 movel %d0,%fp@(-8) <== NOT EXECUTED
the_semaphore->open_count += 1;
_Thread_Enable_dispatch();
484da: 4e92 jsr %a2@ <== NOT EXECUTED
_Thread_Enable_dispatch();
484dc: 4e92 jsr %a2@ <== NOT EXECUTED
goto return_id;
484de: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
484e2: 6022 bras 48506 <sem_open+0xce> <== NOT EXECUTED
/*
* At this point, the semaphore does not exist and everything has been
* checked. We should go ahead and create a semaphore.
*/
status =_POSIX_Semaphore_Create_support(
484e4: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
484e8: 2f03 movel %d3,%sp@- <== NOT EXECUTED
484ea: 42a7 clrl %sp@- <== NOT EXECUTED
484ec: 2f02 movel %d2,%sp@- <== NOT EXECUTED
484ee: 4eb9 0004 de78 jsr 4de78 <_POSIX_Semaphore_Create_support> <== NOT EXECUTED
484f4: 2400 movel %d0,%d2 <== NOT EXECUTED
/*
* errno was set by Create_support, so don't set it again.
*/
_Thread_Enable_dispatch();
484f6: 4eb9 0004 adee jsr 4adee <_Thread_Enable_dispatch> <== NOT EXECUTED
if ( status == -1 )
484fc: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
48500: 70ff moveq #-1,%d0 <== NOT EXECUTED
48502: b082 cmpl %d2,%d0 <== NOT EXECUTED
48504: 6708 beqs 4850e <sem_open+0xd6> <== NOT EXECUTED
return_id:
#if defined(RTEMS_USE_16_BIT_OBJECT)
the_semaphore->Semaphore_id = the_semaphore->Object.id;
id = &the_semaphore->Semaphore_id;
#else
id = (sem_t *)&the_semaphore->Object.id;
48506: 202e fff8 movel %fp@(-8),%d0 <== NOT EXECUTED
4850a: 5080 addql #8,%d0 <== NOT EXECUTED
#endif
return id;
4850c: 6002 bras 48510 <sem_open+0xd8> <== NOT EXECUTED
*/
_Thread_Enable_dispatch();
if ( status == -1 )
return SEM_FAILED;
4850e: 70ff moveq #-1,%d0 <== NOT EXECUTED
id = &the_semaphore->Semaphore_id;
#else
id = (sem_t *)&the_semaphore->Object.id;
#endif
return id;
}
48510: 4cee 043c ffe0 moveml %fp@(-32),%d2-%d5/%a2 <== NOT EXECUTED
48516: 4e5e unlk %fp <== NOT EXECUTED
...
0004851c <sem_post>:
*/
int sem_post(
sem_t *sem
)
{
4851c: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
48520: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
48524: 486e fffc pea %fp@(-4) <== NOT EXECUTED
48528: 2f10 movel %a0@,%sp@- <== NOT EXECUTED
4852a: 4879 0006 2cae pea 62cae <_POSIX_Semaphore_Information> <== NOT EXECUTED
48530: 4eb9 0004 a308 jsr 4a308 <_Objects_Get> <== NOT EXECUTED
register POSIX_Semaphore_Control *the_semaphore;
Objects_Locations location;
the_semaphore = _POSIX_Semaphore_Get( sem, &location );
switch ( location ) {
48536: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4853a: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
4853e: 6620 bnes 48560 <sem_post+0x44> <== NOT EXECUTED
case OBJECTS_LOCAL:
_CORE_semaphore_Surrender(
48540: 2040 moveal %d0,%a0 <== NOT EXECUTED
48542: 42a7 clrl %sp@- <== NOT EXECUTED
48544: 2f28 0008 movel %a0@(8),%sp@- <== NOT EXECUTED
48548: 4868 001a pea %a0@(26) <== NOT EXECUTED
4854c: 4eb9 0004 997c jsr 4997c <_CORE_semaphore_Surrender> <== NOT EXECUTED
NULL /* XXX need to define a routine to handle this case */
#else
NULL
#endif
);
_Thread_Enable_dispatch();
48552: 4eb9 0004 adee jsr 4adee <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
48558: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4855c: 4280 clrl %d0 <== NOT EXECUTED
4855e: 600e bras 4856e <sem_post+0x52> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
rtems_set_errno_and_return_minus_one( EINVAL );
48560: 4eb9 0005 07c0 jsr 507c0 <__errno> <== NOT EXECUTED
48566: 2040 moveal %d0,%a0 <== NOT EXECUTED
48568: 7016 moveq #22,%d0 <== NOT EXECUTED
4856a: 2080 movel %d0,%a0@ <== NOT EXECUTED
4856c: 70ff moveq #-1,%d0 <== NOT EXECUTED
}
4856e: 4e5e unlk %fp <== NOT EXECUTED
...
00048574 <sem_timedwait>:
int sem_timedwait(
sem_t *sem,
const struct timespec *abstime
)
{
48574: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
*
* If the status is POSIX_ABSOLUTE_TIMEOUT_INVALID,
* POSIX_ABSOLUTE_TIMEOUT_IS_IN_PAST, or POSIX_ABSOLUTE_TIMEOUT_IS_NOW,
* then we should not wait.
*/
status = _POSIX_Absolute_timeout_to_ticks( abstime, &ticks );
48578: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4857c: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
48580: 4eb9 0004 d4c0 jsr 4d4c0 <_POSIX_Absolute_timeout_to_ticks><== NOT EXECUTED
if ( status != POSIX_ABSOLUTE_TIMEOUT_IS_IN_FUTURE )
do_wait = false;
lock_status = _POSIX_Semaphore_Wait_support( sem, do_wait, ticks );
48586: 2f2e fffc movel %fp@(-4),%sp@- <== NOT EXECUTED
4858a: 7203 moveq #3,%d1 <== NOT EXECUTED
4858c: b280 cmpl %d0,%d1 <== NOT EXECUTED
4858e: 57c0 seq %d0 <== NOT EXECUTED
48590: 49c0 extbl %d0 <== NOT EXECUTED
48592: 4480 negl %d0 <== NOT EXECUTED
48594: 2f00 movel %d0,%sp@- <== NOT EXECUTED
48596: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4859a: 4eb9 0004 e030 jsr 4e030 <_POSIX_Semaphore_Wait_support> <== NOT EXECUTED
lock_status == POSIX_ABSOLUTE_TIMEOUT_IS_NOW )
rtems_set_errno_and_return_minus_one( ETIMEDOUT );
}
return lock_status;
}
485a0: 4e5e unlk %fp <== NOT EXECUTED
000485a4 <sem_trywait>:
*/
int sem_trywait(
sem_t *sem
)
{
485a4: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return _POSIX_Semaphore_Wait_support(sem, false, THREAD_QUEUE_WAIT_FOREVER);
485a8: 42a7 clrl %sp@- <== NOT EXECUTED
485aa: 42a7 clrl %sp@- <== NOT EXECUTED
485ac: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
485b0: 4eb9 0004 e030 jsr 4e030 <_POSIX_Semaphore_Wait_support> <== NOT EXECUTED
}
485b6: 4e5e unlk %fp <== NOT EXECUTED
...
000485bc <sem_unlink>:
*/
int sem_unlink(
const char *name
)
{
485bc: 4e56 fff0 linkw %fp,#-16 <== NOT EXECUTED
485c0: 2039 0006 2a74 movel 62a74 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
485c6: 5280 addql #1,%d0 <== NOT EXECUTED
485c8: 48d7 0c04 moveml %d2/%a2-%a3,%sp@ <== NOT EXECUTED
485cc: 23c0 0006 2a74 movel %d0,62a74 <_Thread_Dispatch_disable_level><== NOT EXECUTED
register POSIX_Semaphore_Control *the_semaphore;
sem_t the_semaphore_id;
_Thread_Disable_dispatch();
status = _POSIX_Semaphore_Name_to_id( name, &the_semaphore_id );
485d2: 486e fffc pea %fp@(-4) <== NOT EXECUTED
485d6: 47f9 0004 adee lea 4adee <_Thread_Enable_dispatch>,%a3 <== NOT EXECUTED
485dc: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
485e0: 4eb9 0004 dfbc jsr 4dfbc <_POSIX_Semaphore_Name_to_id> <== NOT EXECUTED
if ( status != 0 ) {
485e6: 508f addql #8,%sp <== NOT EXECUTED
register POSIX_Semaphore_Control *the_semaphore;
sem_t the_semaphore_id;
_Thread_Disable_dispatch();
status = _POSIX_Semaphore_Name_to_id( name, &the_semaphore_id );
485e8: 2400 movel %d0,%d2 <== NOT EXECUTED
if ( status != 0 ) {
485ea: 6710 beqs 485fc <sem_unlink+0x40> <== NOT EXECUTED
_Thread_Enable_dispatch();
485ec: 4e93 jsr %a3@ <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( status );
485ee: 4eb9 0005 07c0 jsr 507c0 <__errno> <== NOT EXECUTED
485f4: 2040 moveal %d0,%a0 <== NOT EXECUTED
485f6: 70ff moveq #-1,%d0 <== NOT EXECUTED
485f8: 2082 movel %d2,%a0@ <== NOT EXECUTED
485fa: 6034 bras 48630 <sem_unlink+0x74> <== NOT EXECUTED
*/
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return NULL;
#endif
return information->local_table[ index ];
485fc: 4280 clrl %d0 <== NOT EXECUTED
485fe: 2079 0006 2cc6 moveal 62cc6 <_POSIX_Semaphore_Information+0x18>,%a0<== NOT EXECUTED
48604: 302e fffe movew %fp@(-2),%d0 <== NOT EXECUTED
}
the_semaphore = (POSIX_Semaphore_Control *) _Objects_Get_local_object(
48608: 2470 0c00 moveal %a0@(00000000,%d0:l:4),%a2 <== NOT EXECUTED
&_POSIX_Semaphore_Information,
_Objects_Get_index( the_semaphore_id )
);
the_semaphore->linked = false;
4860c: 4200 clrb %d0 <== NOT EXECUTED
4860e: 1540 0015 moveb %d0,%a2@(21) <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _POSIX_Semaphore_Namespace_remove (
POSIX_Semaphore_Control *the_semaphore
)
{
_Objects_Namespace_remove(
48612: 2f0a movel %a2,%sp@- <== NOT EXECUTED
48614: 4879 0006 2cae pea 62cae <_POSIX_Semaphore_Information> <== NOT EXECUTED
4861a: 4eb9 0004 a464 jsr 4a464 <_Objects_Namespace_remove> <== NOT EXECUTED
_POSIX_Semaphore_Namespace_remove( the_semaphore );
_POSIX_Semaphore_Delete( the_semaphore );
48620: 2f0a movel %a2,%sp@- <== NOT EXECUTED
48622: 4eb9 0004 df6c jsr 4df6c <_POSIX_Semaphore_Delete> <== NOT EXECUTED
_Thread_Enable_dispatch();
48628: 4e93 jsr %a3@ <== NOT EXECUTED
return 0;
4862a: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4862e: 4280 clrl %d0 <== NOT EXECUTED
}
48630: 4cee 0c04 fff0 moveml %fp@(-16),%d2/%a2-%a3 <== NOT EXECUTED
48636: 4e5e unlk %fp <== NOT EXECUTED
...
0004863c <sem_wait>:
*/
int sem_wait(
sem_t *sem
)
{
4863c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return _POSIX_Semaphore_Wait_support( sem, true, THREAD_QUEUE_WAIT_FOREVER );
48640: 42a7 clrl %sp@- <== NOT EXECUTED
48642: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
48646: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4864a: 4eb9 0004 e030 jsr 4e030 <_POSIX_Semaphore_Wait_support> <== NOT EXECUTED
}
48650: 4e5e unlk %fp <== NOT EXECUTED
00045358 <setitimer>:
int setitimer(
int which,
const struct itimerval *value,
struct itimerval *ovalue
)
{
45358: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
if ( !value )
4535c: 4aae 000c tstl %fp@(12) <== NOT EXECUTED
45360: 6706 beqs 45368 <setitimer+0x10> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EFAULT );
if ( !ovalue )
45362: 4aae 0010 tstl %fp@(16) <== NOT EXECUTED
45366: 660e bnes 45376 <setitimer+0x1e> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EFAULT );
45368: 4eb9 0004 cf58 jsr 4cf58 <__errno> <== NOT EXECUTED
4536e: 2040 moveal %d0,%a0 <== NOT EXECUTED
45370: 700e moveq #14,%d0 <== NOT EXECUTED
45372: 2080 movel %d0,%a0@ <== NOT EXECUTED
45374: 6020 bras 45396 <setitimer+0x3e> <== NOT EXECUTED
45376: 41f9 0004 cf58 lea 4cf58 <__errno>,%a0 <== NOT EXECUTED
switch ( which ) {
4537c: 7002 moveq #2,%d0 <== NOT EXECUTED
4537e: b0ae 0008 cmpl %fp@(8),%d0 <== NOT EXECUTED
45382: 650a bcss 4538e <setitimer+0x36> <== NOT EXECUTED
case ITIMER_REAL:
case ITIMER_VIRTUAL:
case ITIMER_PROF:
rtems_set_errno_and_return_minus_one( ENOSYS );
45384: 4e90 jsr %a0@ <== NOT EXECUTED
45386: 7258 moveq #88,%d1 <== NOT EXECUTED
45388: 2040 moveal %d0,%a0 <== NOT EXECUTED
4538a: 2081 movel %d1,%a0@ <== NOT EXECUTED
4538c: 6008 bras 45396 <setitimer+0x3e> <== NOT EXECUTED
default:
break;
}
rtems_set_errno_and_return_minus_one( EINVAL );
4538e: 4e90 jsr %a0@ <== NOT EXECUTED
45390: 2040 moveal %d0,%a0 <== NOT EXECUTED
45392: 7016 moveq #22,%d0 <== NOT EXECUTED
45394: 2080 movel %d0,%a0@ <== NOT EXECUTED
}
45396: 70ff moveq #-1,%d0 <== NOT EXECUTED
45398: 4e5e unlk %fp <== NOT EXECUTED
00045c9c <sigaction>:
int sigaction(
int sig,
const struct sigaction *act,
struct sigaction *oact
)
{
45c9c: 4e56 ffec linkw %fp,#-20 <== NOT EXECUTED
45ca0: 222e 0010 movel %fp@(16),%d1 <== NOT EXECUTED
45ca4: 48d7 0c1c moveml %d2-%d4/%a2-%a3,%sp@ <== NOT EXECUTED
45ca8: 242e 0008 movel %fp@(8),%d2 <== NOT EXECUTED
45cac: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
ISR_Level level;
if ( oact )
45cb0: 4a81 tstl %d1 <== NOT EXECUTED
45cb2: 6722 beqs 45cd6 <sigaction+0x3a> <== NOT EXECUTED
*oact = _POSIX_signals_Vectors[ sig ];
45cb4: 2602 movel %d2,%d3 <== NOT EXECUTED
45cb6: 2002 movel %d2,%d0 <== NOT EXECUTED
45cb8: 4878 000c pea c <OPER1> <== NOT EXECUTED
45cbc: e58b lsll #2,%d3 <== NOT EXECUTED
45cbe: e988 lsll #4,%d0 <== NOT EXECUTED
45cc0: 9083 subl %d3,%d0 <== NOT EXECUTED
45cc2: 0680 0005 fc78 addil #392312,%d0 <== NOT EXECUTED
45cc8: 2f00 movel %d0,%sp@- <== NOT EXECUTED
45cca: 2f01 movel %d1,%sp@- <== NOT EXECUTED
45ccc: 4eb9 0004 e0a8 jsr 4e0a8 <memcpy> <== NOT EXECUTED
45cd2: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
if ( !sig )
45cd6: 4a82 tstl %d2 <== NOT EXECUTED
45cd8: 6710 beqs 45cea <sigaction+0x4e> <== NOT EXECUTED
static inline bool is_valid_signo(
int signo
)
{
return ((signo) >= 1 && (signo) <= 32 );
45cda: 2002 movel %d2,%d0 <== NOT EXECUTED
45cdc: 5380 subql #1,%d0 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
if ( !is_valid_signo(sig) )
45cde: 721f moveq #31,%d1 <== NOT EXECUTED
45ce0: b280 cmpl %d0,%d1 <== NOT EXECUTED
45ce2: 6506 bcss 45cea <sigaction+0x4e> <== NOT EXECUTED
*
* NOTE: Solaris documentation claims to "silently enforce" this which
* contradicts the POSIX specification.
*/
if ( sig == SIGKILL )
45ce4: 7009 moveq #9,%d0 <== NOT EXECUTED
45ce6: b082 cmpl %d2,%d0 <== NOT EXECUTED
45ce8: 6610 bnes 45cfa <sigaction+0x5e> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
45cea: 4eb9 0004 d7e4 jsr 4d7e4 <__errno> <== NOT EXECUTED
45cf0: 2040 moveal %d0,%a0 <== NOT EXECUTED
45cf2: 7016 moveq #22,%d0 <== NOT EXECUTED
45cf4: 2080 movel %d0,%a0@ <== NOT EXECUTED
45cf6: 70ff moveq #-1,%d0 <== NOT EXECUTED
45cf8: 6060 bras 45d5a <sigaction+0xbe> <== NOT EXECUTED
/*
* Evaluate the new action structure and set the global signal vector
* appropriately.
*/
if ( act ) {
45cfa: 4a8a tstl %a2 <== NOT EXECUTED
45cfc: 675a beqs 45d58 <sigaction+0xbc> <== NOT EXECUTED
/*
* Unless the user is installing the default signal actions, then
* we can just copy the provided sigaction structure into the vectors.
*/
_ISR_Disable( level );
45cfe: 203c 0000 0700 movel #1792,%d0 <== NOT EXECUTED
45d04: 40c3 movew %sr,%d3 <== NOT EXECUTED
45d06: 8083 orl %d3,%d0 <== NOT EXECUTED
45d08: 46c0 movew %d0,%sr <== NOT EXECUTED
45d0a: 780c moveq #12,%d4 <== NOT EXECUTED
45d0c: 4c02 4800 mulsl %d2,%d4 <== NOT EXECUTED
45d10: 47f9 0004 e0a8 lea 4e0a8 <memcpy>,%a3 <== NOT EXECUTED
if ( act->sa_handler == SIG_DFL ) {
45d16: 4aaa 0008 tstl %a2@(8) <== NOT EXECUTED
45d1a: 661e bnes 45d3a <sigaction+0x9e> <== NOT EXECUTED
_POSIX_signals_Vectors[ sig ] = _POSIX_signals_Default_vectors[ sig ];
45d1c: 4878 000c pea c <OPER1> <== NOT EXECUTED
45d20: 2004 movel %d4,%d0 <== NOT EXECUTED
45d22: 0680 0005 d1f0 addil #381424,%d0 <== NOT EXECUTED
45d28: 2f00 movel %d0,%sp@- <== NOT EXECUTED
45d2a: 0684 0005 fc78 addil #392312,%d4 <== NOT EXECUTED
45d30: 2f04 movel %d4,%sp@- <== NOT EXECUTED
45d32: 4e93 jsr %a3@ <== NOT EXECUTED
45d34: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
45d38: 601c bras 45d56 <sigaction+0xba> <== NOT EXECUTED
} else {
_POSIX_signals_Clear_process_signals( sig );
45d3a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
_POSIX_signals_Vectors[ sig ] = *act;
45d3c: 0684 0005 fc78 addil #392312,%d4 <== NOT EXECUTED
_ISR_Disable( level );
if ( act->sa_handler == SIG_DFL ) {
_POSIX_signals_Vectors[ sig ] = _POSIX_signals_Default_vectors[ sig ];
} else {
_POSIX_signals_Clear_process_signals( sig );
45d42: 4eb9 0004 ae94 jsr 4ae94 <_POSIX_signals_Clear_process_signals><== NOT EXECUTED
_POSIX_signals_Vectors[ sig ] = *act;
45d48: 4878 000c pea c <OPER1> <== NOT EXECUTED
45d4c: 2f0a movel %a2,%sp@- <== NOT EXECUTED
45d4e: 2f04 movel %d4,%sp@- <== NOT EXECUTED
45d50: 4e93 jsr %a3@ <== NOT EXECUTED
45d52: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
}
_ISR_Enable( level );
45d56: 46c3 movew %d3,%sr <== NOT EXECUTED
* 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;
45d58: 4280 clrl %d0 <== NOT EXECUTED
}
45d5a: 4cee 0c1c ffec moveml %fp@(-20),%d2-%d4/%a2-%a3 <== NOT EXECUTED
45d60: 4e5e unlk %fp <== NOT EXECUTED
00045d64 <sigaddset>:
int sigaddset(
sigset_t *set,
int signo
)
{
45d64: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
45d68: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
45d6c: 222e 000c movel %fp@(12),%d1 <== NOT EXECUTED
if ( !set )
45d70: 4a88 tstl %a0 <== NOT EXECUTED
45d72: 670c beqs 45d80 <sigaddset+0x1c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
if ( !signo )
45d74: 4a81 tstl %d1 <== NOT EXECUTED
45d76: 6708 beqs 45d80 <sigaddset+0x1c> <== NOT EXECUTED
45d78: 5381 subql #1,%d1 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
if ( !is_valid_signo(signo) )
45d7a: 701f moveq #31,%d0 <== NOT EXECUTED
45d7c: b081 cmpl %d1,%d0 <== NOT EXECUTED
45d7e: 6410 bccs 45d90 <sigaddset+0x2c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
45d80: 4eb9 0004 d7e4 jsr 4d7e4 <__errno> <== NOT EXECUTED
45d86: 2040 moveal %d0,%a0 <== NOT EXECUTED
45d88: 7016 moveq #22,%d0 <== NOT EXECUTED
45d8a: 2080 movel %d0,%a0@ <== NOT EXECUTED
45d8c: 70ff moveq #-1,%d0 <== NOT EXECUTED
45d8e: 6008 bras 45d98 <sigaddset+0x34> <== NOT EXECUTED
static inline sigset_t signo_to_mask(
uint32_t sig
)
{
return 1u << (sig - 1);
45d90: 7001 moveq #1,%d0 <== NOT EXECUTED
45d92: e3a8 lsll %d1,%d0 <== NOT EXECUTED
*set |= signo_to_mask(signo);
45d94: 8190 orl %d0,%a0@ <== NOT EXECUTED
return 0;
45d96: 4280 clrl %d0 <== NOT EXECUTED
}
45d98: 4e5e unlk %fp <== NOT EXECUTED
00047a98 <sigdelset>:
int sigdelset(
sigset_t *set,
int signo
)
{
47a98: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
47a9c: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
47aa0: 222e 000c movel %fp@(12),%d1 <== NOT EXECUTED
if ( !set )
47aa4: 4a88 tstl %a0 <== NOT EXECUTED
47aa6: 670c beqs 47ab4 <sigdelset+0x1c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
if ( !signo )
47aa8: 4a81 tstl %d1 <== NOT EXECUTED
47aaa: 6720 beqs 47acc <sigdelset+0x34> <== NOT EXECUTED
static inline bool is_valid_signo(
int signo
)
{
return ((signo) >= 1 && (signo) <= 32 );
47aac: 5381 subql #1,%d1 <== NOT EXECUTED
return 0;
if ( !is_valid_signo(signo) )
47aae: 701f moveq #31,%d0 <== NOT EXECUTED
47ab0: b081 cmpl %d1,%d0 <== NOT EXECUTED
47ab2: 6410 bccs 47ac4 <sigdelset+0x2c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
47ab4: 4eb9 0004 f590 jsr 4f590 <__errno> <== NOT EXECUTED
47aba: 2040 moveal %d0,%a0 <== NOT EXECUTED
47abc: 7016 moveq #22,%d0 <== NOT EXECUTED
47abe: 2080 movel %d0,%a0@ <== NOT EXECUTED
47ac0: 70ff moveq #-1,%d0 <== NOT EXECUTED
47ac2: 600a bras 47ace <sigdelset+0x36> <== NOT EXECUTED
static inline sigset_t signo_to_mask(
uint32_t sig
)
{
return 1u << (sig - 1);
47ac4: 7001 moveq #1,%d0 <== NOT EXECUTED
47ac6: e3a8 lsll %d1,%d0 <== NOT EXECUTED
*set &= ~signo_to_mask(signo);
47ac8: 4680 notl %d0 <== NOT EXECUTED
47aca: c190 andl %d0,%a0@ <== NOT EXECUTED
{
if ( !set )
rtems_set_errno_and_return_minus_one( EINVAL );
if ( !signo )
return 0;
47acc: 4280 clrl %d0 <== NOT EXECUTED
if ( !is_valid_signo(signo) )
rtems_set_errno_and_return_minus_one( EINVAL );
*set &= ~signo_to_mask(signo);
return 0;
}
47ace: 4e5e unlk %fp <== NOT EXECUTED
...
0004a548 <sigemptyset>:
#include <rtems/seterr.h>
int sigemptyset(
sigset_t *set
)
{
4a548: 4e56 0000 linkw %fp,#0
4a54c: 206e 0008 moveal %fp@(8),%a0
if ( !set )
4a550: 4a88 tstl %a0
4a552: 6610 bnes 4a564 <sigemptyset+0x1c> <== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one( EINVAL );
4a554: 4eb9 0004 c954 jsr 4c954 <__errno> <== NOT EXECUTED
4a55a: 2040 moveal %d0,%a0 <== NOT EXECUTED
4a55c: 7016 moveq #22,%d0 <== NOT EXECUTED
4a55e: 2080 movel %d0,%a0@ <== NOT EXECUTED
4a560: 70ff moveq #-1,%d0 <== NOT EXECUTED
4a562: 6004 bras 4a568 <sigemptyset+0x20> <== NOT EXECUTED
*set = 0;
4a564: 4290 clrl %a0@
return 0;
4a566: 4280 clrl %d0
}
4a568: 4e5e unlk %fp <== NOT EXECUTED
00047af8 <sigfillset>:
#include <rtems/seterr.h>
int sigfillset(
sigset_t *set
)
{
47af8: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
47afc: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
if ( !set )
47b00: 4a88 tstl %a0 <== NOT EXECUTED
47b02: 6610 bnes 47b14 <sigfillset+0x1c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
47b04: 4eb9 0004 f590 jsr 4f590 <__errno> <== NOT EXECUTED
47b0a: 7216 moveq #22,%d1 <== NOT EXECUTED
47b0c: 2040 moveal %d0,%a0 <== NOT EXECUTED
47b0e: 70ff moveq #-1,%d0 <== NOT EXECUTED
47b10: 2081 movel %d1,%a0@ <== NOT EXECUTED
47b12: 6006 bras 47b1a <sigfillset+0x22> <== NOT EXECUTED
*set = SIGNAL_ALL_MASK;
47b14: 70ff moveq #-1,%d0 <== NOT EXECUTED
47b16: 2080 movel %d0,%a0@ <== NOT EXECUTED
return 0;
47b18: 4280 clrl %d0 <== NOT EXECUTED
}
47b1a: 4e5e unlk %fp <== NOT EXECUTED
...
00047b20 <sigismember>:
int sigismember(
const sigset_t *set,
int signo
)
{
47b20: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
47b24: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
47b28: 222e 000c movel %fp@(12),%d1 <== NOT EXECUTED
if ( !set )
47b2c: 4a88 tstl %a0 <== NOT EXECUTED
47b2e: 670c beqs 47b3c <sigismember+0x1c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
if ( !signo )
47b30: 4a81 tstl %d1 <== NOT EXECUTED
47b32: 6726 beqs 47b5a <sigismember+0x3a> <== NOT EXECUTED
static inline bool is_valid_signo(
int signo
)
{
return ((signo) >= 1 && (signo) <= 32 );
47b34: 5381 subql #1,%d1 <== NOT EXECUTED
return 0;
if ( !is_valid_signo(signo) )
47b36: 701f moveq #31,%d0 <== NOT EXECUTED
47b38: b081 cmpl %d1,%d0 <== NOT EXECUTED
47b3a: 6410 bccs 47b4c <sigismember+0x2c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
47b3c: 4eb9 0004 f590 jsr 4f590 <__errno> <== NOT EXECUTED
47b42: 2040 moveal %d0,%a0 <== NOT EXECUTED
47b44: 7016 moveq #22,%d0 <== NOT EXECUTED
47b46: 2080 movel %d0,%a0@ <== NOT EXECUTED
47b48: 70ff moveq #-1,%d0 <== NOT EXECUTED
47b4a: 6010 bras 47b5c <sigismember+0x3c> <== NOT EXECUTED
static inline sigset_t signo_to_mask(
uint32_t sig
)
{
return 1u << (sig - 1);
47b4c: 7001 moveq #1,%d0 <== NOT EXECUTED
47b4e: e3a8 lsll %d1,%d0 <== NOT EXECUTED
if ( *set & signo_to_mask(signo) )
47b50: c090 andl %a0@,%d0 <== NOT EXECUTED
const sigset_t *set,
int signo
)
{
if ( !set )
rtems_set_errno_and_return_minus_one( EINVAL );
47b52: 56c0 sne %d0 <== NOT EXECUTED
47b54: 49c0 extbl %d0 <== NOT EXECUTED
47b56: 4480 negl %d0 <== NOT EXECUTED
47b58: 6002 bras 47b5c <sigismember+0x3c> <== NOT EXECUTED
if ( !signo )
return 0;
47b5a: 4280 clrl %d0 <== NOT EXECUTED
if ( *set & signo_to_mask(signo) )
return 1;
return 0;
}
47b5c: 4e5e unlk %fp <== NOT EXECUTED
00045ce0 <signal>:
sighandler_t signal(
int signum,
sighandler_t handler
)
{
45ce0: 4e56 ffe8 linkw %fp,#-24 <== NOT EXECUTED
struct sigaction s;
struct sigaction old;
s.sa_handler = handler ;
45ce4: 2d6e 000c fffc movel %fp@(12),%fp@(-4) <== NOT EXECUTED
sigemptyset(&s.sa_mask);
45cea: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
45cee: 4eb9 0004 5cbc jsr 45cbc <sigemptyset> <== NOT EXECUTED
s.sa_flags = SA_RESTART;
#else
s.sa_flags = 0;
#endif
sigaction( signum, &s, &old );
45cf4: 486e ffe8 pea %fp@(-24) <== NOT EXECUTED
45cf8: 486e fff4 pea %fp@(-12) <== NOT EXECUTED
45cfc: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
s.sa_flags = SA_RESTART | SA_INTERRUPT | SA_NOMASK;
s.sa_restorer= NULL ;
#elif defined(signal_like_SVR4)
s.sa_flags = SA_RESTART;
#else
s.sa_flags = 0;
45d00: 42ae fff4 clrl %fp@(-12) <== NOT EXECUTED
#endif
sigaction( signum, &s, &old );
45d04: 4eb9 0004 5bbc jsr 45bbc <sigaction> <== NOT EXECUTED
return (sighandler_t) old.sa_handler;
}
45d0a: 202e fff0 movel %fp@(-16),%d0 <== NOT EXECUTED
45d0e: 4e5e unlk %fp <== NOT EXECUTED
...
00045dc0 <sigpending>:
#include <rtems/seterr.h>
int sigpending(
sigset_t *set
)
{
45dc0: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
45dc4: 206e 0008 moveal %fp@(8),%a0 <== NOT EXECUTED
POSIX_API_Control *api;
if ( !set )
45dc8: 4a88 tstl %a0 <== NOT EXECUTED
45dca: 6610 bnes 45ddc <sigpending+0x1c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
45dcc: 4eb9 0004 d7e4 jsr 4d7e4 <__errno> <== NOT EXECUTED
45dd2: 2040 moveal %d0,%a0 <== NOT EXECUTED
45dd4: 7016 moveq #22,%d0 <== NOT EXECUTED
45dd6: 2080 movel %d0,%a0@ <== NOT EXECUTED
45dd8: 70ff moveq #-1,%d0 <== NOT EXECUTED
45dda: 6018 bras 45df4 <sigpending+0x34> <== NOT EXECUTED
api = _Thread_Executing->API_Extensions[ THREAD_API_POSIX ];
45ddc: 2279 0005 fc46 moveal 5fc46 <_Per_CPU_Information+0xc>,%a1 <== NOT EXECUTED
*set = api->signals_pending | _POSIX_signals_Pending;
45de2: 2039 0005 fe6c movel 5fe6c <_POSIX_signals_Pending>,%d0 <== NOT EXECUTED
45de8: 2269 0102 moveal %a1@(258),%a1 <== NOT EXECUTED
45dec: 80a9 00d4 orl %a1@(212),%d0 <== NOT EXECUTED
45df0: 2080 movel %d0,%a0@ <== NOT EXECUTED
return 0;
45df2: 4280 clrl %d0 <== NOT EXECUTED
}
45df4: 4e5e unlk %fp <== NOT EXECUTED
00045df8 <sigprocmask>:
int sigprocmask(
int how,
const sigset_t *set,
sigset_t *oset
)
{
45df8: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
#if defined(RTEMS_POSIX_API)
return pthread_sigmask( how, set, oset );
#else
return -1;
#endif
}
45dfc: 4e5e unlk %fp <== NOT EXECUTED
/*
* P1003.1c/Draft 10, p. 38 maps sigprocmask to pthread_sigmask.
*/
#if defined(RTEMS_POSIX_API)
return pthread_sigmask( how, set, oset );
45dfe: 4ef9 0004 b540 jmp 4b540 <pthread_sigmask> <== NOT EXECUTED
00047ba4 <sigqueue>:
int sigqueue(
pid_t pid,
int signo,
const union sigval value
)
{
47ba4: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return killinfo( pid, signo, &value );
47ba8: 486e 0010 pea %fp@(16) <== NOT EXECUTED
47bac: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
47bb0: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
47bb4: 4eb9 0004 cdac jsr 4cdac <killinfo> <== NOT EXECUTED
}
47bba: 4e5e unlk %fp <== NOT EXECUTED
...
00047bc0 <sigsuspend>:
#include <rtems/seterr.h>
int sigsuspend(
const sigset_t *sigmask
)
{
47bc0: 4e56 ffec linkw %fp,#-20 <== NOT EXECUTED
47bc4: 48d7 0c04 moveml %d2/%a2-%a3,%sp@ <== NOT EXECUTED
/*
* We use SIG_BLOCK and not SIG_SETMASK because there may be
* signals which might be pending, which might get caught here.
* We want the signals to be caught inside sigtimedwait.
*/
status = sigprocmask( SIG_BLOCK, sigmask, &saved_signals_blocked );
47bc8: 240e movel %fp,%d2 <== NOT EXECUTED
47bca: 5982 subql #4,%d2 <== NOT EXECUTED
47bcc: 45f9 0004 7b98 lea 47b98 <sigprocmask>,%a2 <== NOT EXECUTED
47bd2: 2f02 movel %d2,%sp@- <== NOT EXECUTED
#include <rtems/seterr.h>
int sigsuspend(
const sigset_t *sigmask
)
{
47bd4: 266e 0008 moveal %fp@(8),%a3 <== NOT EXECUTED
/*
* We use SIG_BLOCK and not SIG_SETMASK because there may be
* signals which might be pending, which might get caught here.
* We want the signals to be caught inside sigtimedwait.
*/
status = sigprocmask( SIG_BLOCK, sigmask, &saved_signals_blocked );
47bd8: 2f0b movel %a3,%sp@- <== NOT EXECUTED
47bda: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
47bde: 4e92 jsr %a2@ <== NOT EXECUTED
current_unblocked_signals = ~(*sigmask);
47be0: 2013 movel %a3@,%d0 <== NOT EXECUTED
47be2: 4680 notl %d0 <== NOT EXECUTED
status = sigtimedwait( ¤t_unblocked_signals, NULL, NULL );
47be4: 42a7 clrl %sp@- <== NOT EXECUTED
47be6: 42a7 clrl %sp@- <== NOT EXECUTED
47be8: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
* signals which might be pending, which might get caught here.
* We want the signals to be caught inside sigtimedwait.
*/
status = sigprocmask( SIG_BLOCK, sigmask, &saved_signals_blocked );
current_unblocked_signals = ~(*sigmask);
47bec: 2d40 fff8 movel %d0,%fp@(-8) <== NOT EXECUTED
status = sigtimedwait( ¤t_unblocked_signals, NULL, NULL );
47bf0: 4eb9 0004 7c68 jsr 47c68 <sigtimedwait> <== NOT EXECUTED
(void) sigprocmask( SIG_SETMASK, &saved_signals_blocked, NULL );
47bf6: 42a7 clrl %sp@- <== NOT EXECUTED
47bf8: 2f02 movel %d2,%sp@- <== NOT EXECUTED
47bfa: 42a7 clrl %sp@- <== NOT EXECUTED
47bfc: 4e92 jsr %a2@ <== NOT EXECUTED
*/
#if defined(RTEMS_DEBUG)
assert( status != -1 );
#endif
rtems_set_errno_and_return_minus_one( EINTR );
47bfe: 4fef 0024 lea %sp@(36),%sp <== NOT EXECUTED
47c02: 4eb9 0004 f590 jsr 4f590 <__errno> <== NOT EXECUTED
}
47c08: 4cee 0c04 ffec moveml %fp@(-20),%d2/%a2-%a3 <== NOT EXECUTED
*/
#if defined(RTEMS_DEBUG)
assert( status != -1 );
#endif
rtems_set_errno_and_return_minus_one( EINTR );
47c0e: 2040 moveal %d0,%a0 <== NOT EXECUTED
47c10: 7004 moveq #4,%d0 <== NOT EXECUTED
}
47c12: 4e5e unlk %fp <== NOT EXECUTED
*/
#if defined(RTEMS_DEBUG)
assert( status != -1 );
#endif
rtems_set_errno_and_return_minus_one( EINTR );
47c14: 2080 movel %d0,%a0@ <== NOT EXECUTED
}
47c16: 70ff moveq #-1,%d0 <== NOT EXECUTED
...
00046080 <sigtimedwait>:
int sigtimedwait(
const sigset_t *set,
siginfo_t *info,
const struct timespec *timeout
)
{
46080: 4e56 ffd8 linkw %fp,#-40 <== NOT EXECUTED
46084: 48d7 3c1c moveml %d2-%d4/%a2-%a5,%sp@ <== NOT EXECUTED
46088: 266e 0008 moveal %fp@(8),%a3 <== NOT EXECUTED
4608c: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
46090: 242e 0010 movel %fp@(16),%d2 <== NOT EXECUTED
ISR_Level level;
/*
* Error check parameters before disabling interrupts.
*/
if ( !set )
46094: 4a8b tstl %a3 <== NOT EXECUTED
46096: 6730 beqs 460c8 <sigtimedwait+0x48> <== NOT EXECUTED
/* NOTE: This is very specifically a RELATIVE not ABSOLUTE time
* in the Open Group specification.
*/
interval = 0;
if ( timeout ) {
46098: 4a82 tstl %d2 <== NOT EXECUTED
4609a: 673c beqs 460d8 <sigtimedwait+0x58> <== NOT EXECUTED
if ( !_Timespec_Is_valid( timeout ) )
4609c: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4609e: 4eb9 0004 9400 jsr 49400 <_Timespec_Is_valid> <== NOT EXECUTED
460a4: 588f addql #4,%sp <== NOT EXECUTED
460a6: 4a00 tstb %d0 <== NOT EXECUTED
460a8: 6610 bnes 460ba <sigtimedwait+0x3a> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
460aa: 4eb9 0004 dd58 jsr 4dd58 <__errno> <== NOT EXECUTED
460b0: 7616 moveq #22,%d3 <== NOT EXECUTED
460b2: 2240 moveal %d0,%a1 <== NOT EXECUTED
460b4: 2283 movel %d3,%a1@ <== NOT EXECUTED
460b6: 6000 0144 braw 461fc <sigtimedwait+0x17c> <== NOT EXECUTED
interval = _Timespec_To_ticks( timeout );
460ba: 2f02 movel %d2,%sp@- <== NOT EXECUTED
460bc: 4eb9 0004 946c jsr 4946c <_Timespec_To_ticks> <== NOT EXECUTED
if ( !interval )
460c2: 588f addql #4,%sp <== NOT EXECUTED
460c4: 4a80 tstl %d0 <== NOT EXECUTED
460c6: 6612 bnes 460da <sigtimedwait+0x5a> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
460c8: 4eb9 0004 dd58 jsr 4dd58 <__errno> <== NOT EXECUTED
460ce: 7416 moveq #22,%d2 <== NOT EXECUTED
460d0: 2040 moveal %d0,%a0 <== NOT EXECUTED
460d2: 2082 movel %d2,%a0@ <== NOT EXECUTED
460d4: 6000 0126 braw 461fc <sigtimedwait+0x17c> <== NOT EXECUTED
/* NOTE: This is very specifically a RELATIVE not ABSOLUTE time
* in the Open Group specification.
*/
interval = 0;
460d8: 4280 clrl %d0 <== NOT EXECUTED
/*
* Initialize local variables.
*/
the_info = ( info ) ? info : &signal_information;
460da: 4a8a tstl %a2 <== NOT EXECUTED
460dc: 6604 bnes 460e2 <sigtimedwait+0x62> <== NOT EXECUTED
460de: 45ee fff4 lea %fp@(-12),%a2 <== NOT EXECUTED
the_thread = _Thread_Executing;
460e2: 2079 0006 0006 moveal 60006 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
* What if they are already pending?
*/
/* API signals pending? */
_ISR_Disable( level );
460e8: 223c 0000 0700 movel #1792,%d1 <== NOT EXECUTED
the_info = ( info ) ? info : &signal_information;
the_thread = _Thread_Executing;
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
460ee: 2868 0102 moveal %a0@(258),%a4 <== NOT EXECUTED
* What if they are already pending?
*/
/* API signals pending? */
_ISR_Disable( level );
460f2: 40c3 movew %sr,%d3 <== NOT EXECUTED
460f4: 8283 orl %d3,%d1 <== NOT EXECUTED
460f6: 46c1 movew %d1,%sr <== NOT EXECUTED
if ( *set & api->signals_pending ) {
460f8: 2413 movel %a3@,%d2 <== NOT EXECUTED
460fa: 2802 movel %d2,%d4 <== NOT EXECUTED
460fc: 222c 00d4 movel %a4@(212),%d1 <== NOT EXECUTED
46100: c881 andl %d1,%d4 <== NOT EXECUTED
46102: 672a beqs 4612e <sigtimedwait+0xae> <== NOT EXECUTED
/* XXX real info later */
the_info->si_signo = _POSIX_signals_Get_lowest( api->signals_pending );
46104: 2f01 movel %d1,%sp@- <== NOT EXECUTED
46106: 4eb9 0004 6034 jsr 46034 <_POSIX_signals_Get_lowest> <== NOT EXECUTED
4610c: 2480 movel %d0,%a2@ <== NOT EXECUTED
_POSIX_signals_Clear_signals(
4610e: 4297 clrl %sp@ <== NOT EXECUTED
46110: 42a7 clrl %sp@- <== NOT EXECUTED
46112: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46114: 2f00 movel %d0,%sp@- <== NOT EXECUTED
46116: 2f0c movel %a4,%sp@- <== NOT EXECUTED
46118: 4eb9 0004 b4d0 jsr 4b4d0 <_POSIX_signals_Clear_signals> <== NOT EXECUTED
the_info->si_signo,
the_info,
false,
false
);
_ISR_Enable( level );
4611e: 46c3 movew %d3,%sr <== NOT EXECUTED
the_info->si_code = SI_USER;
46120: 7001 moveq #1,%d0 <== NOT EXECUTED
the_info->si_value.sival_int = 0;
46122: 42aa 0008 clrl %a2@(8) <== NOT EXECUTED
return the_info->si_signo;
46126: 2412 movel %a2@,%d2 <== NOT EXECUTED
false,
false
);
_ISR_Enable( level );
the_info->si_code = SI_USER;
46128: 2540 0004 movel %d0,%a2@(4) <== NOT EXECUTED
4612c: 6036 bras 46164 <sigtimedwait+0xe4> <== NOT EXECUTED
return the_info->si_signo;
}
/* Process pending signals? */
if ( *set & _POSIX_signals_Pending ) {
4612e: 2239 0006 022c movel 6022c <_POSIX_signals_Pending>,%d1 <== NOT EXECUTED
46134: 4bf9 0004 b4d0 lea 4b4d0 <_POSIX_signals_Clear_signals>,%a5<== NOT EXECUTED
4613a: c481 andl %d1,%d2 <== NOT EXECUTED
4613c: 672e beqs 4616c <sigtimedwait+0xec> <== NOT EXECUTED
signo = _POSIX_signals_Get_lowest( _POSIX_signals_Pending );
4613e: 2f01 movel %d1,%sp@- <== NOT EXECUTED
46140: 4eb9 0004 6034 jsr 46034 <_POSIX_signals_Get_lowest> <== NOT EXECUTED
46146: 2400 movel %d0,%d2 <== NOT EXECUTED
_POSIX_signals_Clear_signals( api, signo, the_info, true, false );
46148: 4297 clrl %sp@ <== NOT EXECUTED
4614a: 4878 0001 pea 1 <ADD> <== NOT EXECUTED
4614e: 2f0a movel %a2,%sp@- <== NOT EXECUTED
46150: 2f00 movel %d0,%sp@- <== NOT EXECUTED
46152: 2f0c movel %a4,%sp@- <== NOT EXECUTED
46154: 4e95 jsr %a5@ <== NOT EXECUTED
_ISR_Enable( level );
46156: 46c3 movew %d3,%sr <== NOT EXECUTED
the_info->si_signo = signo;
the_info->si_code = SI_USER;
46158: 7201 moveq #1,%d1 <== NOT EXECUTED
if ( *set & _POSIX_signals_Pending ) {
signo = _POSIX_signals_Get_lowest( _POSIX_signals_Pending );
_POSIX_signals_Clear_signals( api, signo, the_info, true, false );
_ISR_Enable( level );
the_info->si_signo = signo;
4615a: 2482 movel %d2,%a2@ <== NOT EXECUTED
the_info->si_code = SI_USER;
4615c: 2541 0004 movel %d1,%a2@(4) <== NOT EXECUTED
the_info->si_value.sival_int = 0;
46160: 42aa 0008 clrl %a2@(8) <== NOT EXECUTED
return signo;
46164: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
46168: 6000 0094 braw 461fe <sigtimedwait+0x17e> <== NOT EXECUTED
}
the_info->si_signo = -1;
4616c: 72ff moveq #-1,%d1 <== NOT EXECUTED
4616e: 2481 movel %d1,%a2@ <== NOT EXECUTED
46170: 2239 0005 fb78 movel 5fb78 <_Thread_Dispatch_disable_level>,%d1<== NOT EXECUTED
46176: 5281 addql #1,%d1 <== NOT EXECUTED
46178: 23c1 0005 fb78 movel %d1,5fb78 <_Thread_Dispatch_disable_level><== NOT EXECUTED
_Thread_Disable_dispatch();
the_thread->Wait.queue = &_POSIX_signals_Wait_queue;
the_thread->Wait.return_code = EINTR;
4617e: 7204 moveq #4,%d1 <== NOT EXECUTED
}
the_info->si_signo = -1;
_Thread_Disable_dispatch();
the_thread->Wait.queue = &_POSIX_signals_Wait_queue;
46180: 43f9 0006 01c4 lea 601c4 <_POSIX_signals_Wait_queue>,%a1 <== NOT EXECUTED
the_thread->Wait.return_code = EINTR;
46186: 2141 0034 movel %d1,%a0@(52) <== NOT EXECUTED
the_thread->Wait.option = *set;
4618a: 2153 0030 movel %a3@,%a0@(48) <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Thread_queue_Enter_critical_section (
Thread_queue_Control *the_thread_queue
)
{
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
4618e: 123c 0001 moveb #1,%d1 <== NOT EXECUTED
the_thread->Wait.return_argument = the_info;
46192: 214a 0028 movel %a2,%a0@(40) <== NOT EXECUTED
}
the_info->si_signo = -1;
_Thread_Disable_dispatch();
the_thread->Wait.queue = &_POSIX_signals_Wait_queue;
46196: 2149 0044 movel %a1,%a0@(68) <== NOT EXECUTED
4619a: 23c1 0006 01f4 movel %d1,601f4 <_POSIX_signals_Wait_queue+0x30><== NOT EXECUTED
the_thread->Wait.return_code = EINTR;
the_thread->Wait.option = *set;
the_thread->Wait.return_argument = the_info;
_Thread_queue_Enter_critical_section( &_POSIX_signals_Wait_queue );
_ISR_Enable( level );
461a0: 46c3 movew %d3,%sr <== NOT EXECUTED
_Thread_queue_Enqueue( &_POSIX_signals_Wait_queue, interval );
461a2: 4879 0004 90b0 pea 490b0 <_Thread_queue_Timeout> <== NOT EXECUTED
461a8: 2f00 movel %d0,%sp@- <== NOT EXECUTED
461aa: 4879 0006 01c4 pea 601c4 <_POSIX_signals_Wait_queue> <== NOT EXECUTED
461b0: 4eb9 0004 8d9c jsr 48d9c <_Thread_queue_Enqueue_with_handler><== NOT EXECUTED
_Thread_Enable_dispatch();
461b6: 4eb9 0004 893a jsr 4893a <_Thread_Enable_dispatch> <== NOT EXECUTED
/*
* When the thread is set free by a signal, it is need to eliminate
* the signal.
*/
_POSIX_signals_Clear_signals( api, the_info->si_signo, the_info, false, false );
461bc: 42a7 clrl %sp@- <== NOT EXECUTED
461be: 42a7 clrl %sp@- <== NOT EXECUTED
461c0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
461c2: 2f12 movel %a2@,%sp@- <== NOT EXECUTED
461c4: 2f0c movel %a4,%sp@- <== NOT EXECUTED
461c6: 4e95 jsr %a5@ <== NOT EXECUTED
/* Set errno only if return code is not EINTR or
* if EINTR was caused by a signal being caught, which
* was not in our set.
*/
if ( (_Thread_Executing->Wait.return_code != EINTR)
461c8: 2079 0006 0006 moveal 60006 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
461ce: 4fef 0020 lea %sp@(32),%sp <== NOT EXECUTED
461d2: 7004 moveq #4,%d0 <== NOT EXECUTED
461d4: b0a8 0034 cmpl %a0@(52),%d0 <== NOT EXECUTED
461d8: 6610 bnes 461ea <sigtimedwait+0x16a> <== NOT EXECUTED
|| !(*set & signo_to_mask( the_info->si_signo )) ) {
461da: 2412 movel %a2@,%d2 <== NOT EXECUTED
461dc: 2202 movel %d2,%d1 <== NOT EXECUTED
461de: 5381 subql #1,%d1 <== NOT EXECUTED
461e0: 103c 0001 moveb #1,%d0 <== NOT EXECUTED
461e4: e3a8 lsll %d1,%d0 <== NOT EXECUTED
461e6: c093 andl %a3@,%d0 <== NOT EXECUTED
461e8: 6614 bnes 461fe <sigtimedwait+0x17e> <== NOT EXECUTED
errno = _Thread_Executing->Wait.return_code;
461ea: 4eb9 0004 dd58 jsr 4dd58 <__errno> <== NOT EXECUTED
461f0: 2079 0006 0006 moveal 60006 <_Per_CPU_Information+0xc>,%a0 <== NOT EXECUTED
461f6: 2240 moveal %d0,%a1 <== NOT EXECUTED
461f8: 22a8 0034 movel %a0@(52),%a1@ <== NOT EXECUTED
return -1;
461fc: 74ff moveq #-1,%d2 <== NOT EXECUTED
}
return the_info->si_signo;
}
461fe: 2002 movel %d2,%d0 <== NOT EXECUTED
46200: 4cee 3c1c ffd8 moveml %fp@(-40),%d2-%d4/%a2-%a5 <== NOT EXECUTED
46206: 4e5e unlk %fp <== NOT EXECUTED
...
00047e0c <sigwait>:
int sigwait(
const sigset_t *set,
int *sig
)
{
47e0c: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
47e10: 2f0a movel %a2,%sp@- <== NOT EXECUTED
47e12: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
int status;
status = sigtimedwait( set, NULL, NULL );
47e16: 42a7 clrl %sp@- <== NOT EXECUTED
47e18: 42a7 clrl %sp@- <== NOT EXECUTED
47e1a: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
47e1e: 4eb9 0004 7c68 jsr 47c68 <sigtimedwait> <== NOT EXECUTED
if ( status != -1 ) {
47e24: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
47e28: 72ff moveq #-1,%d1 <== NOT EXECUTED
47e2a: b280 cmpl %d0,%d1 <== NOT EXECUTED
47e2c: 6708 beqs 47e36 <sigwait+0x2a> <== NOT EXECUTED
if ( sig )
47e2e: 4a8a tstl %a2 <== NOT EXECUTED
47e30: 6710 beqs 47e42 <sigwait+0x36> <== NOT EXECUTED
*sig = status;
47e32: 2480 movel %d0,%a2@ <== NOT EXECUTED
47e34: 600c bras 47e42 <sigwait+0x36> <== NOT EXECUTED
return 0;
}
return errno;
47e36: 4eb9 0004 f590 jsr 4f590 <__errno> <== NOT EXECUTED
47e3c: 2040 moveal %d0,%a0 <== NOT EXECUTED
47e3e: 2010 movel %a0@,%d0 <== NOT EXECUTED
47e40: 6002 bras 47e44 <sigwait+0x38> <== NOT EXECUTED
status = sigtimedwait( set, NULL, NULL );
if ( status != -1 ) {
if ( sig )
*sig = status;
return 0;
47e42: 4280 clrl %d0 <== NOT EXECUTED
}
return errno;
}
47e44: 246e fffc moveal %fp@(-4),%a2 <== NOT EXECUTED
47e48: 4e5e unlk %fp <== NOT EXECUTED
00047df4 <sigwaitinfo>:
int sigwaitinfo(
const sigset_t *set,
siginfo_t *info
)
{
47df4: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return sigtimedwait( set, info, NULL );
47df8: 42a7 clrl %sp@- <== NOT EXECUTED
47dfa: 2f2e 000c movel %fp@(12),%sp@- <== NOT EXECUTED
47dfe: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
47e02: 4eb9 0004 7c68 jsr 47c68 <sigtimedwait> <== NOT EXECUTED
}
47e08: 4e5e unlk %fp <== NOT EXECUTED
000451f4 <sysconf>:
long sysconf(
int name
)
{
if ( name == _SC_CLK_TCK )
451f4: 7002 moveq #2,%d0 <== NOT EXECUTED
*/
long sysconf(
int name
)
{
451f6: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
451fa: 222e 0008 movel %fp@(8),%d1 <== NOT EXECUTED
451fe: 2f02 movel %d2,%sp@- <== NOT EXECUTED
if ( name == _SC_CLK_TCK )
45200: b081 cmpl %d1,%d0 <== NOT EXECUTED
45202: 6612 bnes 45216 <sysconf+0x22> <== NOT EXECUTED
return (TOD_MICROSECONDS_PER_SECOND /
45204: 41f9 0005 c7b4 lea 5c7b4 <Configuration+0xc>,%a0 <== NOT EXECUTED
4520a: 203c 000f 4240 movel #1000000,%d0 <== NOT EXECUTED
45210: 4c50 0000 remul %a0@,%d0,%d0 <== NOT EXECUTED
45214: 6034 bras 4524a <sysconf+0x56> <== NOT EXECUTED
rtems_configuration_get_microseconds_per_tick());
if ( name == _SC_OPEN_MAX )
45216: 7004 moveq #4,%d0 <== NOT EXECUTED
45218: b081 cmpl %d1,%d0 <== NOT EXECUTED
4521a: 6608 bnes 45224 <sysconf+0x30> <== NOT EXECUTED
return rtems_libio_number_iops;
4521c: 2039 0005 c6d4 movel 5c6d4 <rtems_libio_number_iops>,%d0 <== NOT EXECUTED
45222: 6026 bras 4524a <sysconf+0x56> <== NOT EXECUTED
if ( name == _SC_GETPW_R_SIZE_MAX )
return 1024;
45224: 203c 0000 0400 movel #1024,%d0 <== NOT EXECUTED
rtems_configuration_get_microseconds_per_tick());
if ( name == _SC_OPEN_MAX )
return rtems_libio_number_iops;
if ( name == _SC_GETPW_R_SIZE_MAX )
4522a: 7433 moveq #51,%d2 <== NOT EXECUTED
4522c: b481 cmpl %d1,%d2 <== NOT EXECUTED
4522e: 671a beqs 4524a <sysconf+0x56> <== NOT EXECUTED
return 1024;
if ( name == _SC_PAGESIZE )
45230: 143c 0008 moveb #8,%d2 <== NOT EXECUTED
return PAGE_SIZE;
45234: 303c 1000 movew #4096,%d0 <== NOT EXECUTED
return rtems_libio_number_iops;
if ( name == _SC_GETPW_R_SIZE_MAX )
return 1024;
if ( name == _SC_PAGESIZE )
45238: b481 cmpl %d1,%d2 <== NOT EXECUTED
4523a: 670e beqs 4524a <sysconf+0x56> <== NOT EXECUTED
#if defined(__sparc__)
if ( name == 515 ) /* Solaris _SC_STACK_PROT */
return 0;
#endif
rtems_set_errno_and_return_minus_one( EINVAL );
4523c: 4eb9 0004 ce10 jsr 4ce10 <__errno> <== NOT EXECUTED
45242: 2040 moveal %d0,%a0 <== NOT EXECUTED
45244: 7016 moveq #22,%d0 <== NOT EXECUTED
45246: 2080 movel %d0,%a0@ <== NOT EXECUTED
45248: 70ff moveq #-1,%d0 <== NOT EXECUTED
}
4524a: 242e fffc movel %fp@(-4),%d2 <== NOT EXECUTED
4524e: 4e5e unlk %fp <== NOT EXECUTED
...
00045298 <timer_create>:
timer_t *timerid
)
{
POSIX_Timer_Control *ptimer;
if ( clock_id != CLOCK_REALTIME )
45298: 7001 moveq #1,%d0 <== NOT EXECUTED
int timer_create(
clockid_t clock_id,
struct sigevent *evp,
timer_t *timerid
)
{
4529a: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
4529e: 2f0b movel %a3,%sp@- <== NOT EXECUTED
452a0: 266e 0010 moveal %fp@(16),%a3 <== NOT EXECUTED
452a4: 2f0a movel %a2,%sp@- <== NOT EXECUTED
452a6: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
POSIX_Timer_Control *ptimer;
if ( clock_id != CLOCK_REALTIME )
452aa: b0ae 0008 cmpl %fp@(8),%d0 <== NOT EXECUTED
452ae: 6620 bnes 452d0 <timer_create+0x38> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
if ( !timerid )
452b0: 4a8b tstl %a3 <== NOT EXECUTED
452b2: 671c beqs 452d0 <timer_create+0x38> <== NOT EXECUTED
/*
* The data of the structure evp are checked in order to verify if they
* are coherent.
*/
if (evp != NULL) {
452b4: 4a8a tstl %a2 <== NOT EXECUTED
452b6: 6726 beqs 452de <timer_create+0x46> <== NOT EXECUTED
/* The structure has data */
if ( ( evp->sigev_notify != SIGEV_NONE ) &&
452b8: 2012 movel %a2@,%d0 <== NOT EXECUTED
452ba: 7201 moveq #1,%d1 <== NOT EXECUTED
452bc: 5380 subql #1,%d0 <== NOT EXECUTED
452be: b280 cmpl %d0,%d1 <== NOT EXECUTED
452c0: 650e bcss 452d0 <timer_create+0x38> <== NOT EXECUTED
( evp->sigev_notify != SIGEV_SIGNAL ) ) {
/* The value of the field sigev_notify is not valid */
rtems_set_errno_and_return_minus_one( EINVAL );
}
if ( !evp->sigev_signo )
452c2: 202a 0004 movel %a2@(4),%d0 <== NOT EXECUTED
452c6: 6708 beqs 452d0 <timer_create+0x38> <== NOT EXECUTED
static inline bool is_valid_signo(
int signo
)
{
return ((signo) >= 1 && (signo) <= 32 );
452c8: 5380 subql #1,%d0 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
if ( !is_valid_signo(evp->sigev_signo) )
452ca: 721f moveq #31,%d1 <== NOT EXECUTED
452cc: b280 cmpl %d0,%d1 <== NOT EXECUTED
452ce: 640e bccs 452de <timer_create+0x46> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
452d0: 4eb9 0004 d244 jsr 4d244 <__errno> <== NOT EXECUTED
452d6: 7216 moveq #22,%d1 <== NOT EXECUTED
452d8: 2040 moveal %d0,%a0 <== NOT EXECUTED
452da: 2081 movel %d1,%a0@ <== NOT EXECUTED
452dc: 6034 bras 45312 <timer_create+0x7a> <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
452de: 2039 0005 e688 movel 5e688 <_Thread_Dispatch_disable_level>,%d0<== NOT EXECUTED
452e4: 5280 addql #1,%d0 <== NOT EXECUTED
452e6: 23c0 0005 e688 movel %d0,5e688 <_Thread_Dispatch_disable_level><== NOT EXECUTED
* the inactive chain of free timer control blocks.
*/
RTEMS_INLINE_ROUTINE POSIX_Timer_Control *_POSIX_Timer_Allocate( void )
{
return (POSIX_Timer_Control *) _Objects_Allocate( &_POSIX_Timer_Information );
452ec: 4879 0005 e8fc pea 5e8fc <_POSIX_Timer_Information> <== NOT EXECUTED
452f2: 4eb9 0004 6f60 jsr 46f60 <_Objects_Allocate> <== NOT EXECUTED
/*
* Allocate a timer
*/
ptimer = _POSIX_Timer_Allocate();
if ( !ptimer ) {
452f8: 588f addql #4,%sp <== NOT EXECUTED
452fa: 2040 moveal %d0,%a0 <== NOT EXECUTED
452fc: 4a80 tstl %d0 <== NOT EXECUTED
452fe: 6616 bnes 45316 <timer_create+0x7e> <== NOT EXECUTED
_Thread_Enable_dispatch();
45300: 4eb9 0004 7e1e jsr 47e1e <_Thread_Enable_dispatch> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EAGAIN );
45306: 4eb9 0004 d244 jsr 4d244 <__errno> <== NOT EXECUTED
4530c: 2040 moveal %d0,%a0 <== NOT EXECUTED
4530e: 700b moveq #11,%d0 <== NOT EXECUTED
45310: 2080 movel %d0,%a0@ <== NOT EXECUTED
45312: 70ff moveq #-1,%d0 <== NOT EXECUTED
45314: 606a bras 45380 <timer_create+0xe8> <== NOT EXECUTED
}
/* The data of the created timer are stored to use them later */
ptimer->state = POSIX_TIMER_STATE_CREATE_NEW;
45316: 7002 moveq #2,%d0 <== NOT EXECUTED
45318: 1140 003c moveb %d0,%a0@(60) <== NOT EXECUTED
ptimer->thread_id = _Thread_Executing->Object.id;
4531c: 2279 0005 eb16 moveal 5eb16 <_Per_CPU_Information+0xc>,%a1 <== NOT EXECUTED
45322: 2169 0008 0038 movel %a1@(8),%a0@(56) <== NOT EXECUTED
if ( evp != NULL ) {
45328: 4a8a tstl %a2 <== NOT EXECUTED
4532a: 6710 beqs 4533c <timer_create+0xa4> <== NOT EXECUTED
ptimer->inf.sigev_notify = evp->sigev_notify;
4532c: 2152 003e movel %a2@,%a0@(62) <== NOT EXECUTED
ptimer->inf.sigev_signo = evp->sigev_signo;
45330: 216a 0004 0042 movel %a2@(4),%a0@(66) <== NOT EXECUTED
ptimer->inf.sigev_value = evp->sigev_value;
45336: 216a 0008 0046 movel %a2@(8),%a0@(70) <== NOT EXECUTED
uint32_t name
)
{
_Objects_Set_local_object(
information,
_Objects_Get_index( the_object->id ),
4533c: 2028 0008 movel %a0@(8),%d0 <== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
uint32_t name
)
{
_Objects_Set_local_object(
45340: 4281 clrl %d1 <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
45342: 2279 0005 e914 moveal 5e914 <_POSIX_Timer_Information+0x18>,%a1<== NOT EXECUTED
Objects_Information *information,
Objects_Control *the_object,
uint32_t name
)
{
_Objects_Set_local_object(
45348: 3200 movew %d0,%d1 <== NOT EXECUTED
}
ptimer->overrun = 0;
4534a: 42a8 0066 clrl %a0@(102) <== NOT EXECUTED
ptimer->timer_data.it_value.tv_sec = 0;
4534e: 42a8 005a clrl %a0@(90) <== NOT EXECUTED
ptimer->timer_data.it_value.tv_nsec = 0;
45352: 42a8 005e clrl %a0@(94) <== NOT EXECUTED
ptimer->timer_data.it_interval.tv_sec = 0;
45356: 42a8 0052 clrl %a0@(82) <== NOT EXECUTED
ptimer->timer_data.it_interval.tv_nsec = 0;
4535a: 42a8 0056 clrl %a0@(86) <== NOT EXECUTED
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
4535e: 42a8 0018 clrl %a0@(24) <== NOT EXECUTED
the_watchdog->routine = routine;
45362: 42a8 002c clrl %a0@(44) <== NOT EXECUTED
the_watchdog->id = id;
45366: 42a8 0030 clrl %a0@(48) <== NOT EXECUTED
the_watchdog->user_data = user_data;
4536a: 42a8 0034 clrl %a0@(52) <== NOT EXECUTED
#if defined(RTEMS_DEBUG)
if ( index > information->maximum )
return;
#endif
information->local_table[ index ] = the_object;
4536e: 2388 1c00 movel %a0,%a1@(00000000,%d1:l:4) <== NOT EXECUTED
_Objects_Get_index( the_object->id ),
the_object
);
/* ASSERT: information->is_string == false */
the_object->name.name_u32 = name;
45372: 42a8 000c clrl %a0@(12) <== NOT EXECUTED
_Watchdog_Initialize( &ptimer->Timer, NULL, 0, NULL );
_Objects_Open_u32(&_POSIX_Timer_Information, &ptimer->Object, 0);
*timerid = ptimer->Object.id;
45376: 2680 movel %d0,%a3@ <== NOT EXECUTED
_Thread_Enable_dispatch();
45378: 4eb9 0004 7e1e jsr 47e1e <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
4537e: 4280 clrl %d0 <== NOT EXECUTED
}
45380: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
45384: 266e fffc moveal %fp@(-4),%a3 <== NOT EXECUTED
45388: 4e5e unlk %fp <== NOT EXECUTED
00045bc4 <timer_delete>:
int timer_delete(
timer_t timerid
)
{
45bc4: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
45bc8: 2f0a movel %a2,%sp@- <== NOT EXECUTED
timer_t id,
Objects_Locations *location
)
{
return (POSIX_Timer_Control *)
_Objects_Get( &_POSIX_Timer_Information, (Objects_Id) id, location );
45bca: 486e fffc pea %fp@(-4) <== NOT EXECUTED
45bce: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
45bd2: 4879 0005 f2f4 pea 5f2f4 <_POSIX_Timer_Information> <== NOT EXECUTED
45bd8: 4eb9 0004 7b98 jsr 47b98 <_Objects_Get> <== NOT EXECUTED
*/
POSIX_Timer_Control *ptimer;
Objects_Locations location;
ptimer = _POSIX_Timer_Get( timerid, &location );
switch ( location ) {
45bde: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
45be2: 2440 moveal %d0,%a2 <== NOT EXECUTED
45be4: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
45be8: 663a bnes 45c24 <timer_delete+0x60> <== NOT EXECUTED
case OBJECTS_LOCAL:
_Objects_Close( &_POSIX_Timer_Information, &ptimer->Object );
45bea: 2f00 movel %d0,%sp@- <== NOT EXECUTED
45bec: 4879 0005 f2f4 pea 5f2f4 <_POSIX_Timer_Information> <== NOT EXECUTED
45bf2: 4eb9 0004 77bc jsr 477bc <_Objects_Close> <== NOT EXECUTED
ptimer->state = POSIX_TIMER_STATE_FREE;
45bf8: 7001 moveq #1,%d0 <== NOT EXECUTED
45bfa: 1540 003c moveb %d0,%a2@(60) <== NOT EXECUTED
(void) _Watchdog_Remove( &ptimer->Timer );
45bfe: 486a 0010 pea %a2@(16) <== NOT EXECUTED
45c02: 4eb9 0004 9578 jsr 49578 <_Watchdog_Remove> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _POSIX_Timer_Free (
POSIX_Timer_Control *the_timer
)
{
_Objects_Free( &_POSIX_Timer_Information, &the_timer->Object );
45c08: 2f0a movel %a2,%sp@- <== NOT EXECUTED
45c0a: 4879 0005 f2f4 pea 5f2f4 <_POSIX_Timer_Information> <== NOT EXECUTED
45c10: 4eb9 0004 7a34 jsr 47a34 <_Objects_Free> <== NOT EXECUTED
_POSIX_Timer_Free( ptimer );
_Thread_Enable_dispatch();
45c16: 4eb9 0004 85fe jsr 485fe <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
45c1c: 4fef 0014 lea %sp@(20),%sp <== NOT EXECUTED
45c20: 4280 clrl %d0 <== NOT EXECUTED
45c22: 600e bras 45c32 <timer_delete+0x6e> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
rtems_set_errno_and_return_minus_one( EINVAL );
45c24: 4eb9 0004 ddd0 jsr 4ddd0 <__errno> <== NOT EXECUTED
45c2a: 2040 moveal %d0,%a0 <== NOT EXECUTED
45c2c: 7016 moveq #22,%d0 <== NOT EXECUTED
45c2e: 2080 movel %d0,%a0@ <== NOT EXECUTED
45c30: 70ff moveq #-1,%d0 <== NOT EXECUTED
}
45c32: 246e fff8 moveal %fp@(-8),%a2 <== NOT EXECUTED
45c36: 4e5e unlk %fp <== NOT EXECUTED
...
00046664 <timer_getoverrun>:
* its execution, _POSIX_Timer_TSR will have to set this counter to 0.
*/
int timer_getoverrun(
timer_t timerid
)
{
46664: 4e56 fffc linkw %fp,#-4 <== NOT EXECUTED
46668: 2f02 movel %d2,%sp@- <== NOT EXECUTED
timer_t id,
Objects_Locations *location
)
{
return (POSIX_Timer_Control *)
_Objects_Get( &_POSIX_Timer_Information, (Objects_Id) id, location );
4666a: 486e fffc pea %fp@(-4) <== NOT EXECUTED
4666e: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
46672: 4879 0006 0710 pea 60710 <_POSIX_Timer_Information> <== NOT EXECUTED
46678: 4eb9 0004 85c0 jsr 485c0 <_Objects_Get> <== NOT EXECUTED
int overrun;
POSIX_Timer_Control *ptimer;
Objects_Locations location;
ptimer = _POSIX_Timer_Get( timerid, &location );
switch ( location ) {
4667e: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
46682: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
46686: 6612 bnes 4669a <timer_getoverrun+0x36> <== NOT EXECUTED
case OBJECTS_LOCAL:
overrun = ptimer->overrun;
46688: 2040 moveal %d0,%a0 <== NOT EXECUTED
4668a: 2428 0066 movel %a0@(102),%d2 <== NOT EXECUTED
ptimer->overrun = 0;
4668e: 42a8 0066 clrl %a0@(102) <== NOT EXECUTED
_Thread_Enable_dispatch();
46692: 4eb9 0004 9026 jsr 49026 <_Thread_Enable_dispatch> <== NOT EXECUTED
return overrun;
46698: 600e bras 466a8 <timer_getoverrun+0x44> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
rtems_set_errno_and_return_minus_one( EINVAL );
4669a: 4eb9 0004 e4b8 jsr 4e4b8 <__errno> <== NOT EXECUTED
466a0: 74ff moveq #-1,%d2 <== NOT EXECUTED
466a2: 2040 moveal %d0,%a0 <== NOT EXECUTED
466a4: 7016 moveq #22,%d0 <== NOT EXECUTED
466a6: 2080 movel %d0,%a0@ <== NOT EXECUTED
}
466a8: 2002 movel %d2,%d0 <== NOT EXECUTED
466aa: 242e fff8 movel %fp@(-8),%d2 <== NOT EXECUTED
466ae: 4e5e unlk %fp <== NOT EXECUTED
...
000466b4 <timer_gettime>:
int timer_gettime(
timer_t timerid,
struct itimerspec *value
)
{
466b4: 4e56 fff4 linkw %fp,#-12 <== NOT EXECUTED
466b8: 2f0b movel %a3,%sp@- <== NOT EXECUTED
466ba: 2f0a movel %a2,%sp@- <== NOT EXECUTED
466bc: 246e 000c moveal %fp@(12),%a2 <== NOT EXECUTED
POSIX_Timer_Control *ptimer;
Objects_Locations location;
struct timespec current_time;
Watchdog_Interval left;
if ( !value )
466c0: 4a8a tstl %a2 <== NOT EXECUTED
466c2: 6760 beqs 46724 <timer_gettime+0x70> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
/* Reads the current time */
_TOD_Get( ¤t_time );
466c4: 486e fff4 pea %fp@(-12) <== NOT EXECUTED
466c8: 4eb9 0004 7c54 jsr 47c54 <_TOD_Get> <== NOT EXECUTED
466ce: 486e fffc pea %fp@(-4) <== NOT EXECUTED
466d2: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
466d6: 4879 0006 0710 pea 60710 <_POSIX_Timer_Information> <== NOT EXECUTED
466dc: 4eb9 0004 85c0 jsr 485c0 <_Objects_Get> <== NOT EXECUTED
ptimer = _POSIX_Timer_Get( timerid, &location );
switch ( location ) {
466e2: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
466e6: 2640 moveal %d0,%a3 <== NOT EXECUTED
466e8: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
466ec: 6636 bnes 46724 <timer_gettime+0x70> <== NOT EXECUTED
left =
(ptimer->Timer.start_time + ptimer->Timer.initial) - /* expire */
_Watchdog_Ticks_since_boot; /* now */
_Timespec_From_ticks( left, &value->it_value );
466ee: 486a 0008 pea %a2@(8) <== NOT EXECUTED
case OBJECTS_LOCAL:
/* Calculates the time left before the timer finishes */
left =
(ptimer->Timer.start_time + ptimer->Timer.initial) - /* expire */
466f2: 222b 001c movel %a3@(28),%d1 <== NOT EXECUTED
466f6: d2ab 0024 addl %a3@(36),%d1 <== NOT EXECUTED
466fa: 2039 0006 05c6 movel 605c6 <_Watchdog_Ticks_since_boot>,%d0<== NOT EXECUTED
_Watchdog_Ticks_since_boot; /* now */
_Timespec_From_ticks( left, &value->it_value );
46700: 9280 subl %d0,%d1 <== NOT EXECUTED
46702: 2f01 movel %d1,%sp@- <== NOT EXECUTED
46704: 4eb9 0004 9aec jsr 49aec <_Timespec_From_ticks> <== NOT EXECUTED
value->it_interval = ptimer->timer_data.it_interval;
4670a: 202b 0052 movel %a3@(82),%d0 <== NOT EXECUTED
4670e: 222b 0056 movel %a3@(86),%d1 <== NOT EXECUTED
46712: 2480 movel %d0,%a2@ <== NOT EXECUTED
46714: 2541 0004 movel %d1,%a2@(4) <== NOT EXECUTED
_Thread_Enable_dispatch();
46718: 4eb9 0004 9026 jsr 49026 <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
4671e: 508f addql #8,%sp <== NOT EXECUTED
46720: 4280 clrl %d0 <== NOT EXECUTED
46722: 600e bras 46732 <timer_gettime+0x7e> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
rtems_set_errno_and_return_minus_one( EINVAL );
46724: 4eb9 0004 e4b8 jsr 4e4b8 <__errno> <== NOT EXECUTED
4672a: 2040 moveal %d0,%a0 <== NOT EXECUTED
4672c: 7016 moveq #22,%d0 <== NOT EXECUTED
4672e: 2080 movel %d0,%a0@ <== NOT EXECUTED
46730: 70ff moveq #-1,%d0 <== NOT EXECUTED
}
46732: 246e ffec moveal %fp@(-20),%a2 <== NOT EXECUTED
46736: 266e fff0 moveal %fp@(-16),%a3 <== NOT EXECUTED
4673a: 4e5e unlk %fp <== NOT EXECUTED
...
0004538c <timer_settime>:
timer_t timerid,
int flags,
const struct itimerspec *value,
struct itimerspec *ovalue
)
{
4538c: 4e56 ffd4 linkw %fp,#-44 <== NOT EXECUTED
45390: 48d7 0c0c moveml %d2-%d3/%a2-%a3,%sp@ <== NOT EXECUTED
45394: 262e 000c movel %fp@(12),%d3 <== NOT EXECUTED
45398: 266e 0010 moveal %fp@(16),%a3 <== NOT EXECUTED
4539c: 242e 0014 movel %fp@(20),%d2 <== NOT EXECUTED
Objects_Locations location;
bool activated;
uint32_t initial_period;
struct itimerspec normalize;
if ( !value )
453a0: 4a8b tstl %a3 <== NOT EXECUTED
453a2: 6700 017c beqw 45520 <timer_settime+0x194> <== NOT EXECUTED
/*
* First, it verifies if the structure "value" is correct
* if the number of nanoseconds is not correct return EINVAL
*/
if ( !_Timespec_Is_valid( &(value->it_value) ) ) {
453a6: 486b 0008 pea %a3@(8) <== NOT EXECUTED
453aa: 45f9 0004 8914 lea 48914 <_Timespec_Is_valid>,%a2 <== NOT EXECUTED
453b0: 4e92 jsr %a2@ <== NOT EXECUTED
453b2: 588f addql #4,%sp <== NOT EXECUTED
453b4: 4a00 tstb %d0 <== NOT EXECUTED
453b6: 6700 0168 beqw 45520 <timer_settime+0x194> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
}
if ( !_Timespec_Is_valid( &(value->it_interval) ) ) {
453ba: 2f0b movel %a3,%sp@- <== NOT EXECUTED
453bc: 4e92 jsr %a2@ <== NOT EXECUTED
453be: 588f addql #4,%sp <== NOT EXECUTED
453c0: 4a00 tstb %d0 <== NOT EXECUTED
453c2: 6700 015c beqw 45520 <timer_settime+0x194> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
}
if ( flags != TIMER_ABSTIME && flags != POSIX_TIMER_RELATIVE ) {
453c6: 7004 moveq #4,%d0 <== NOT EXECUTED
453c8: b083 cmpl %d3,%d0 <== NOT EXECUTED
453ca: 6706 beqs 453d2 <timer_settime+0x46> <== NOT EXECUTED
453cc: 4a83 tstl %d3 <== NOT EXECUTED
453ce: 6600 0150 bnew 45520 <timer_settime+0x194> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
}
normalize = *value;
453d2: 4878 0010 pea 10 <INVALID_OPERATION> <== NOT EXECUTED
453d6: 2f0b movel %a3,%sp@- <== NOT EXECUTED
453d8: 486e ffe4 pea %fp@(-28) <== NOT EXECUTED
453dc: 4eb9 0004 daf0 jsr 4daf0 <memcpy> <== NOT EXECUTED
/* Convert absolute to relative time */
if (flags == TIMER_ABSTIME) {
453e2: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
453e6: 7004 moveq #4,%d0 <== NOT EXECUTED
453e8: b083 cmpl %d3,%d0 <== NOT EXECUTED
453ea: 6638 bnes 45424 <timer_settime+0x98> <== NOT EXECUTED
struct timespec now;
_TOD_Get( &now );
453ec: 45ee fff4 lea %fp@(-12),%a2 <== NOT EXECUTED
/* Check for seconds in the past */
if ( _Timespec_Greater_than( &now, &normalize.it_value ) )
453f0: 260e movel %fp,%d3 <== NOT EXECUTED
453f2: 0683 ffff ffec addil #-20,%d3 <== NOT EXECUTED
normalize = *value;
/* Convert absolute to relative time */
if (flags == TIMER_ABSTIME) {
struct timespec now;
_TOD_Get( &now );
453f8: 2f0a movel %a2,%sp@- <== NOT EXECUTED
453fa: 4eb9 0004 6a74 jsr 46a74 <_TOD_Get> <== NOT EXECUTED
/* Check for seconds in the past */
if ( _Timespec_Greater_than( &now, &normalize.it_value ) )
45400: 2f03 movel %d3,%sp@- <== NOT EXECUTED
45402: 2f0a movel %a2,%sp@- <== NOT EXECUTED
45404: 4eb9 0004 88e4 jsr 488e4 <_Timespec_Greater_than> <== NOT EXECUTED
4540a: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4540e: 4a00 tstb %d0 <== NOT EXECUTED
45410: 6600 010e bnew 45520 <timer_settime+0x194> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
_Timespec_Subtract( &now, &normalize.it_value, &normalize.it_value );
45414: 2f03 movel %d3,%sp@- <== NOT EXECUTED
45416: 2f03 movel %d3,%sp@- <== NOT EXECUTED
45418: 2f0a movel %a2,%sp@- <== NOT EXECUTED
4541a: 4eb9 0004 893c jsr 4893c <_Timespec_Subtract> <== NOT EXECUTED
45420: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
timer_t id,
Objects_Locations *location
)
{
return (POSIX_Timer_Control *)
_Objects_Get( &_POSIX_Timer_Information, (Objects_Id) id, location );
45424: 486e fffc pea %fp@(-4) <== NOT EXECUTED
45428: 2f2e 0008 movel %fp@(8),%sp@- <== NOT EXECUTED
4542c: 4879 0005 e8fc pea 5e8fc <_POSIX_Timer_Information> <== NOT EXECUTED
45432: 4eb9 0004 73b8 jsr 473b8 <_Objects_Get> <== NOT EXECUTED
* something with the structure of times of the timer: to stop, start
* or start it again
*/
ptimer = _POSIX_Timer_Get( timerid, &location );
switch ( location ) {
45438: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
4543c: 2440 moveal %d0,%a2 <== NOT EXECUTED
4543e: 4aae fffc tstl %fp@(-4) <== NOT EXECUTED
45442: 6600 00dc bnew 45520 <timer_settime+0x194> <== NOT EXECUTED
case OBJECTS_LOCAL:
/* First, it verifies if the timer must be stopped */
if ( normalize.it_value.tv_sec == 0 && normalize.it_value.tv_nsec == 0 ) {
45446: 4aae ffec tstl %fp@(-20) <== NOT EXECUTED
4544a: 6650 bnes 4549c <timer_settime+0x110> <== NOT EXECUTED
4544c: 4aae fff0 tstl %fp@(-16) <== NOT EXECUTED
45450: 664a bnes 4549c <timer_settime+0x110> <== NOT EXECUTED
/* Stop the timer */
(void) _Watchdog_Remove( &ptimer->Timer );
45452: 486a 0010 pea %a2@(16) <== NOT EXECUTED
45456: 4eb9 0004 8d5c jsr 48d5c <_Watchdog_Remove> <== NOT EXECUTED
/* The old data of the timer are returned */
if ( ovalue )
4545c: 588f addql #4,%sp <== NOT EXECUTED
4545e: 4a82 tstl %d2 <== NOT EXECUTED
45460: 6714 beqs 45476 <timer_settime+0xea> <== NOT EXECUTED
*ovalue = ptimer->timer_data;
45462: 4878 0010 pea 10 <INVALID_OPERATION> <== NOT EXECUTED
45466: 486a 0052 pea %a2@(82) <== NOT EXECUTED
4546a: 2f02 movel %d2,%sp@- <== NOT EXECUTED
4546c: 4eb9 0004 daf0 jsr 4daf0 <memcpy> <== NOT EXECUTED
45472: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
/* The new data are set */
ptimer->timer_data = normalize;
45476: 4878 0010 pea 10 <INVALID_OPERATION> <== NOT EXECUTED
4547a: 486e ffe4 pea %fp@(-28) <== NOT EXECUTED
4547e: 486a 0052 pea %a2@(82) <== NOT EXECUTED
45482: 4eb9 0004 daf0 jsr 4daf0 <memcpy> <== NOT EXECUTED
/* Indicates that the timer is created and stopped */
ptimer->state = POSIX_TIMER_STATE_CREATE_STOP;
45488: 7004 moveq #4,%d0 <== NOT EXECUTED
4548a: 1540 003c moveb %d0,%a2@(60) <== NOT EXECUTED
/* Returns with success */
_Thread_Enable_dispatch();
4548e: 4eb9 0004 7e1e jsr 47e1e <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
45494: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
45498: 6000 0082 braw 4551c <timer_settime+0x190> <== NOT EXECUTED
}
/* Convert from seconds and nanoseconds to ticks */
ptimer->ticks = _Timespec_To_ticks( &value->it_interval );
4549c: 2f0b movel %a3,%sp@- <== NOT EXECUTED
4549e: 47f9 0004 8980 lea 48980 <_Timespec_To_ticks>,%a3 <== NOT EXECUTED
454a4: 4e93 jsr %a3@ <== NOT EXECUTED
454a6: 2540 0062 movel %d0,%a2@(98) <== NOT EXECUTED
initial_period = _Timespec_To_ticks( &normalize.it_value );
454aa: 486e ffec pea %fp@(-20) <== NOT EXECUTED
454ae: 4e93 jsr %a3@ <== NOT EXECUTED
activated = _POSIX_Timer_Insert_helper(
454b0: 2f0a movel %a2,%sp@- <== NOT EXECUTED
454b2: 4879 0004 5538 pea 45538 <_POSIX_Timer_TSR> <== NOT EXECUTED
454b8: 2f2a 0008 movel %a2@(8),%sp@- <== NOT EXECUTED
454bc: 2f00 movel %d0,%sp@- <== NOT EXECUTED
454be: 486a 0010 pea %a2@(16) <== NOT EXECUTED
454c2: 4eb9 0004 ad44 jsr 4ad44 <_POSIX_Timer_Insert_helper> <== NOT EXECUTED
initial_period,
ptimer->Object.id,
_POSIX_Timer_TSR,
ptimer
);
if ( !activated ) {
454c8: 4fef 001c lea %sp@(28),%sp <== NOT EXECUTED
454cc: 4a00 tstb %d0 <== NOT EXECUTED
454ce: 6608 bnes 454d8 <timer_settime+0x14c> <== NOT EXECUTED
_Thread_Enable_dispatch();
454d0: 4eb9 0004 7e1e jsr 47e1e <_Thread_Enable_dispatch> <== NOT EXECUTED
454d6: 6044 bras 4551c <timer_settime+0x190> <== NOT EXECUTED
/*
* The timer has been started and is running. So we return the
* old ones in "ovalue"
*/
if ( ovalue )
454d8: 4a82 tstl %d2 <== NOT EXECUTED
454da: 6714 beqs 454f0 <timer_settime+0x164> <== NOT EXECUTED
*ovalue = ptimer->timer_data;
454dc: 4878 0010 pea 10 <INVALID_OPERATION> <== NOT EXECUTED
454e0: 486a 0052 pea %a2@(82) <== NOT EXECUTED
454e4: 2f02 movel %d2,%sp@- <== NOT EXECUTED
454e6: 4eb9 0004 daf0 jsr 4daf0 <memcpy> <== NOT EXECUTED
454ec: 4fef 000c lea %sp@(12),%sp <== NOT EXECUTED
ptimer->timer_data = normalize;
454f0: 4878 0010 pea 10 <INVALID_OPERATION> <== NOT EXECUTED
454f4: 486e ffe4 pea %fp@(-28) <== NOT EXECUTED
454f8: 486a 0052 pea %a2@(82) <== NOT EXECUTED
454fc: 4eb9 0004 daf0 jsr 4daf0 <memcpy> <== NOT EXECUTED
/* Indicate that the time is running */
ptimer->state = POSIX_TIMER_STATE_CREATE_RUN;
45502: 7003 moveq #3,%d0 <== NOT EXECUTED
45504: 1540 003c moveb %d0,%a2@(60) <== NOT EXECUTED
_TOD_Get( &ptimer->time );
45508: 486a 006a pea %a2@(106) <== NOT EXECUTED
4550c: 4eb9 0004 6a74 jsr 46a74 <_TOD_Get> <== NOT EXECUTED
_Thread_Enable_dispatch();
45512: 4eb9 0004 7e1e jsr 47e1e <_Thread_Enable_dispatch> <== NOT EXECUTED
return 0;
45518: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
4551c: 4280 clrl %d0 <== NOT EXECUTED
4551e: 600e bras 4552e <timer_settime+0x1a2> <== NOT EXECUTED
#endif
case OBJECTS_ERROR:
break;
}
rtems_set_errno_and_return_minus_one( EINVAL );
45520: 4eb9 0004 d244 jsr 4d244 <__errno> <== NOT EXECUTED
45526: 2040 moveal %d0,%a0 <== NOT EXECUTED
45528: 7016 moveq #22,%d0 <== NOT EXECUTED
4552a: 2080 movel %d0,%a0@ <== NOT EXECUTED
4552c: 70ff moveq #-1,%d0 <== NOT EXECUTED
}
4552e: 4cee 0c0c ffd4 moveml %fp@(-44),%d2-%d3/%a2-%a3 <== NOT EXECUTED
45534: 4e5e unlk %fp <== NOT EXECUTED
0004545e <ualarm>:
useconds_t ualarm(
useconds_t useconds,
useconds_t interval
)
{
4545e: 4e56 ffe8 linkw %fp,#-24 <== NOT EXECUTED
45462: 48d7 041c moveml %d2-%d4/%a2,%sp@ <== NOT EXECUTED
45466: 262e 0008 movel %fp@(8),%d3 <== NOT EXECUTED
/*
* Initialize the timer used to implement alarm().
*/
if ( !the_timer->routine ) {
4546a: 4ab9 0005 fb3c tstl 5fb3c <_POSIX_signals_Ualarm_timer+0x1c><== NOT EXECUTED
45470: 6620 bnes 45492 <ualarm+0x34> <== NOT EXECUTED
Watchdog_Service_routine_entry routine,
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
45472: 42b9 0005 fb28 clrl 5fb28 <_POSIX_signals_Ualarm_timer+0x8><== NOT EXECUTED
the_watchdog->routine = routine;
45478: 203c 0004 541c movel #283676,%d0 <== NOT EXECUTED
the_watchdog->id = id;
4547e: 42b9 0005 fb40 clrl 5fb40 <_POSIX_signals_Ualarm_timer+0x20><== NOT EXECUTED
Objects_Id id,
void *user_data
)
{
the_watchdog->state = WATCHDOG_INACTIVE;
the_watchdog->routine = routine;
45484: 23c0 0005 fb3c movel %d0,5fb3c <_POSIX_signals_Ualarm_timer+0x1c><== NOT EXECUTED
the_watchdog->id = id;
the_watchdog->user_data = user_data;
4548a: 42b9 0005 fb44 clrl 5fb44 <_POSIX_signals_Ualarm_timer+0x24><== NOT EXECUTED
45490: 6056 bras 454e8 <ualarm+0x8a> <== NOT EXECUTED
_Watchdog_Initialize( the_timer, _POSIX_signals_Ualarm_TSR, 0, NULL );
} else {
Watchdog_States state;
state = _Watchdog_Remove( the_timer );
45492: 4879 0005 fb20 pea 5fb20 <_POSIX_signals_Ualarm_timer> <== NOT EXECUTED
45498: 4eb9 0004 8bf0 jsr 48bf0 <_Watchdog_Remove> <== NOT EXECUTED
if ( (state == WATCHDOG_ACTIVE) || (state == WATCHDOG_REMOVE_IT) ) {
4549e: 588f addql #4,%sp <== NOT EXECUTED
454a0: 7201 moveq #1,%d1 <== NOT EXECUTED
454a2: 5580 subql #2,%d0 <== NOT EXECUTED
454a4: b280 cmpl %d0,%d1 <== NOT EXECUTED
454a6: 6540 bcss 454e8 <ualarm+0x8a> <== NOT EXECUTED
* boot. Since alarm() is dealing in seconds, we must account for
* this.
*/
ticks = the_timer->initial;
ticks -= (the_timer->stop_time - the_timer->start_time);
454a8: 2039 0005 fb34 movel 5fb34 <_POSIX_signals_Ualarm_timer+0x14>,%d0<== NOT EXECUTED
454ae: d0b9 0005 fb2c addl 5fb2c <_POSIX_signals_Ualarm_timer+0xc>,%d0<== NOT EXECUTED
/* remaining is now in ticks */
_Timespec_From_ticks( ticks, &tp );
454b4: 486e fff8 pea %fp@(-8) <== NOT EXECUTED
454b8: 90b9 0005 fb38 subl 5fb38 <_POSIX_signals_Ualarm_timer+0x18>,%d0<== NOT EXECUTED
remaining = tp.tv_sec * TOD_MICROSECONDS_PER_SECOND;
454be: 283c 000f 4240 movel #1000000,%d4 <== NOT EXECUTED
ticks = the_timer->initial;
ticks -= (the_timer->stop_time - the_timer->start_time);
/* remaining is now in ticks */
_Timespec_From_ticks( ticks, &tp );
454c4: 2f00 movel %d0,%sp@- <== NOT EXECUTED
454c6: 4eb9 0004 8714 jsr 48714 <_Timespec_From_ticks> <== NOT EXECUTED
remaining = tp.tv_sec * TOD_MICROSECONDS_PER_SECOND;
454cc: 202e fff8 movel %fp@(-8),%d0 <== NOT EXECUTED
454d0: 4c04 0800 mulsl %d4,%d0 <== NOT EXECUTED
remaining += tp.tv_nsec / 1000;
454d4: 283c 0000 03e8 movel #1000,%d4 <== NOT EXECUTED
454da: 508f addql #8,%sp <== NOT EXECUTED
454dc: 242e fffc movel %fp@(-4),%d2 <== NOT EXECUTED
454e0: 4c44 2802 remsl %d4,%d2,%d2 <== NOT EXECUTED
454e4: d480 addl %d0,%d2 <== NOT EXECUTED
454e6: 6002 bras 454ea <ualarm+0x8c> <== NOT EXECUTED
useconds_t ualarm(
useconds_t useconds,
useconds_t interval
)
{
useconds_t remaining = 0;
454e8: 4282 clrl %d2 <== NOT EXECUTED
/*
* If useconds is non-zero, then the caller wants to schedule
* the alarm repeatedly at that interval. If the interval is
* less than a single clock tick, then fudge it to a clock tick.
*/
if ( useconds ) {
454ea: 4a83 tstl %d3 <== NOT EXECUTED
454ec: 674e beqs 4553c <ualarm+0xde> <== NOT EXECUTED
Watchdog_Interval ticks;
tp.tv_sec = useconds / TOD_MICROSECONDS_PER_SECOND;
tp.tv_nsec = (useconds % TOD_MICROSECONDS_PER_SECOND) * 1000;
454ee: 283c 0000 03e8 movel #1000,%d4 <== NOT EXECUTED
ticks = _Timespec_To_ticks( &tp );
454f4: 45f9 0004 8794 lea 48794 <_Timespec_To_ticks>,%a2 <== NOT EXECUTED
* less than a single clock tick, then fudge it to a clock tick.
*/
if ( useconds ) {
Watchdog_Interval ticks;
tp.tv_sec = useconds / TOD_MICROSECONDS_PER_SECOND;
454fa: 223c 000f 4240 movel #1000000,%d1 <== NOT EXECUTED
45500: 4c41 3000 remul %d1,%d0,%d3 <== NOT EXECUTED
45504: 4c41 3003 remul %d1,%d3,%d3 <== NOT EXECUTED
45508: 2d43 fff8 movel %d3,%fp@(-8) <== NOT EXECUTED
tp.tv_nsec = (useconds % TOD_MICROSECONDS_PER_SECOND) * 1000;
4550c: 4c00 4800 mulsl %d0,%d4 <== NOT EXECUTED
ticks = _Timespec_To_ticks( &tp );
45510: 260e movel %fp,%d3 <== NOT EXECUTED
45512: 5183 subql #8,%d3 <== NOT EXECUTED
*/
if ( useconds ) {
Watchdog_Interval ticks;
tp.tv_sec = useconds / TOD_MICROSECONDS_PER_SECOND;
tp.tv_nsec = (useconds % TOD_MICROSECONDS_PER_SECOND) * 1000;
45514: 2d44 fffc movel %d4,%fp@(-4) <== NOT EXECUTED
ticks = _Timespec_To_ticks( &tp );
45518: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4551a: 4e92 jsr %a2@ <== NOT EXECUTED
if ( ticks == 0 )
ticks = 1;
_Watchdog_Insert_ticks( the_timer, _Timespec_To_ticks( &tp ) );
4551c: 2f03 movel %d3,%sp@- <== NOT EXECUTED
4551e: 4e92 jsr %a2@ <== NOT EXECUTED
)
{
the_watchdog->initial = units;
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
45520: 4879 0005 fb20 pea 5fb20 <_POSIX_signals_Ualarm_timer> <== NOT EXECUTED
45526: 4879 0005 f3c8 pea 5f3c8 <_Watchdog_Ticks_chain> <== NOT EXECUTED
Watchdog_Control *the_watchdog,
Watchdog_Interval units
)
{
the_watchdog->initial = units;
4552c: 23c0 0005 fb2c movel %d0,5fb2c <_POSIX_signals_Ualarm_timer+0xc><== NOT EXECUTED
_Watchdog_Insert( &_Watchdog_Ticks_chain, the_watchdog );
45532: 4eb9 0004 8ad4 jsr 48ad4 <_Watchdog_Insert> <== NOT EXECUTED
45538: 4fef 0010 lea %sp@(16),%sp <== NOT EXECUTED
}
return remaining;
}
4553c: 2002 movel %d2,%d0 <== NOT EXECUTED
4553e: 4cee 041c ffe8 moveml %fp@(-24),%d2-%d4/%a2 <== NOT EXECUTED
45544: 4e5e unlk %fp <== NOT EXECUTED
000455ac <vfork>:
#include <unistd.h>
pid_t vfork(void)
{
return -1;
}
455ac: 70ff moveq #-1,%d0 <== NOT EXECUTED
#include <sys/types.h>
#include <unistd.h>
pid_t vfork(void)
{
455ae: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
return -1;
}
455b2: 4e5e unlk %fp <== NOT EXECUTED
...
000455b8 <wait>:
#include <rtems/seterr.h>
int wait(
int *stat_loc
)
{
455b8: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
455bc: 4eb9 0004 d1a4 jsr 4d1a4 <__errno> <== NOT EXECUTED
}
455c2: 4e5e unlk %fp <== NOT EXECUTED
int wait(
int *stat_loc
)
{
rtems_set_errno_and_return_minus_one( ENOSYS );
455c4: 2040 moveal %d0,%a0 <== NOT EXECUTED
455c6: 7058 moveq #88,%d0 <== NOT EXECUTED
455c8: 2080 movel %d0,%a0@ <== NOT EXECUTED
}
455ca: 70ff moveq #-1,%d0 <== NOT EXECUTED
...
000455d0 <waitpid>:
int waitpid(
pid_t pid,
int *stat_loc,
int options
)
{
455d0: 4e56 0000 linkw %fp,#0 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSYS );
455d4: 4eb9 0004 d1a4 jsr 4d1a4 <__errno> <== NOT EXECUTED
}
455da: 4e5e unlk %fp <== NOT EXECUTED
pid_t pid,
int *stat_loc,
int options
)
{
rtems_set_errno_and_return_minus_one( ENOSYS );
455dc: 2040 moveal %d0,%a0 <== NOT EXECUTED
455de: 7058 moveq #88,%d0 <== NOT EXECUTED
455e0: 2080 movel %d0,%a0@ <== NOT EXECUTED
}
455e2: 70ff moveq #-1,%d0 <== NOT EXECUTED
...