1/**************************************************************************/
2/*                                                                        */
3/*       Copyright (c) Microsoft Corporation. All rights reserved.        */
4/*                                                                        */
5/*       This software is licensed under the Microsoft Software License   */
6/*       Terms for Microsoft Azure RTOS. Full text of the license can be  */
7/*       found in the LICENSE file at https://aka.ms/AzureRTOS_EULA       */
8/*       and in the root directory of this software.                      */
9/*                                                                        */
10/**************************************************************************/
11
12
13/**************************************************************************/
14/**************************************************************************/
15/**                                                                       */
16/** ThreadX Component                                                     */
17/**                                                                       */
18/**   ThreadX MISRA Compliance                                            */
19/**                                                                       */
20/**************************************************************************/
21/**************************************************************************/
22
23#ifdef TX_INCLUDE_USER_DEFINE_FILE
24#include "tx_user.h"
25#endif
26
27        #define SHT_PROGBITS 0x1
28
29        .global __aeabi_memset
30        .global _tx_thread_current_ptr
31        .global _tx_thread_interrupt_disable
32        .global _tx_thread_interrupt_restore
33        .global _tx_thread_stack_analyze
34        .global _tx_thread_stack_error_handler
35        .global _tx_thread_system_state
36#ifdef TX_ENABLE_EVENT_TRACE
37        .global _tx_trace_buffer_current_ptr
38        .global _tx_trace_buffer_end_ptr
39        .global _tx_trace_buffer_start_ptr
40        .global _tx_trace_event_enable_bits
41        .global _tx_trace_full_notify_function
42        .global _tx_trace_header_ptr
43#endif
44
45        .global _tx_misra_always_true
46        .global _tx_misra_block_pool_to_uchar_pointer_convert
47        .global _tx_misra_byte_pool_to_uchar_pointer_convert
48        .global _tx_misra_char_to_uchar_pointer_convert
49        .global _tx_misra_const_char_to_char_pointer_convert
50#ifdef TX_ENABLE_EVENT_TRACE
51        .global _tx_misra_entry_to_uchar_pointer_convert
52#endif
53        .global _tx_misra_indirect_void_to_uchar_pointer_convert
54        .global _tx_misra_memset
55        .global _tx_misra_message_copy
56#ifdef TX_ENABLE_EVENT_TRACE
57        .global _tx_misra_object_to_uchar_pointer_convert
58#endif
59        .global _tx_misra_pointer_to_ulong_convert
60        .global _tx_misra_status_get
61        .global _tx_misra_thread_stack_check
62#ifdef TX_ENABLE_EVENT_TRACE
63        .global _tx_misra_time_stamp_get
64#endif
65        .global _tx_misra_timer_indirect_to_void_pointer_convert
66        .global _tx_misra_timer_pointer_add
67        .global _tx_misra_timer_pointer_dif
68#ifdef TX_ENABLE_EVENT_TRACE
69        .global _tx_misra_trace_event_insert
70#endif
71        .global _tx_misra_uchar_pointer_add
72        .global _tx_misra_uchar_pointer_dif
73        .global _tx_misra_uchar_pointer_sub
74        .global _tx_misra_uchar_to_align_type_pointer_convert
75        .global _tx_misra_uchar_to_block_pool_pointer_convert
76#ifdef TX_ENABLE_EVENT_TRACE
77        .global _tx_misra_uchar_to_entry_pointer_convert
78        .global _tx_misra_uchar_to_header_pointer_convert
79#endif
80        .global _tx_misra_uchar_to_indirect_byte_pool_pointer_convert
81        .global _tx_misra_uchar_to_indirect_uchar_pointer_convert
82#ifdef TX_ENABLE_EVENT_TRACE
83        .global _tx_misra_uchar_to_object_pointer_convert
84#endif
85        .global _tx_misra_uchar_to_void_pointer_convert
86        .global _tx_misra_ulong_pointer_add
87        .global _tx_misra_ulong_pointer_dif
88        .global _tx_misra_ulong_pointer_sub
89        .global _tx_misra_ulong_to_pointer_convert
90        .global _tx_misra_ulong_to_thread_pointer_convert
91        .global _tx_misra_user_timer_pointer_get
92        .global _tx_misra_void_to_block_pool_pointer_convert
93        .global _tx_misra_void_to_byte_pool_pointer_convert
94        .global _tx_misra_void_to_event_flags_pointer_convert
95        .global _tx_misra_void_to_indirect_uchar_pointer_convert
96        .global _tx_misra_void_to_mutex_pointer_convert
97        .global _tx_misra_void_to_queue_pointer_convert
98        .global _tx_misra_void_to_semaphore_pointer_convert
99        .global _tx_misra_void_to_thread_pointer_convert
100        .global _tx_misra_void_to_uchar_pointer_convert
101        .global _tx_misra_void_to_ulong_pointer_convert
102        .global _tx_misra_ipsr_get
103        .global _tx_misra_control_get
104        .global _tx_misra_control_set
105#ifdef __ARM_FP
106        .global _tx_misra_fpccr_get
107        .global _tx_misra_vfp_touch
108#endif
109
110        .global _tx_misra_event_flags_group_not_used
111        .global _tx_misra_event_flags_set_notify_not_used
112        .global _tx_misra_queue_not_used
113        .global _tx_misra_queue_send_notify_not_used
114        .global _tx_misra_semaphore_not_used
115        .global _tx_misra_semaphore_put_notify_not_used
116        .global _tx_misra_thread_entry_exit_notify_not_used
117        .global _tx_misra_thread_not_used
118
119/**************************************************************************/
120/**************************************************************************/
121/**                                                                       */
122/**  VOID  _tx_misra_memset(VOID *ptr, UINT value, UINT size);            */
123/**                                                                       */
124/**************************************************************************/
125/**************************************************************************/
126
127        .text
128        .align 4
129        .syntax unified
130        .thumb_func
131_tx_misra_memset:
132        PUSH     {R4,LR}
133        MOVS     R4,R0
134        MOVS     R0,R2
135        MOVS     R2,R1
136        MOVS     R1,R0
137        MOVS     R0,R4
138        BL       __aeabi_memset
139        POP      {R4,PC}          // return
140
141/**************************************************************************/
142/**************************************************************************/
143/**                                                                       */
144/**  UCHAR  *_tx_misra_uchar_pointer_add(UCHAR *ptr, ULONG amount);       */
145/**                                                                       */
146/**************************************************************************/
147/**************************************************************************/
148
149        .text
150        .thumb_func
151_tx_misra_uchar_pointer_add:
152        ADD      R0,R0,R1
153        BX       LR               // return
154
155
156/**************************************************************************/
157/**************************************************************************/
158/**                                                                       */
159/**  UCHAR  *_tx_misra_uchar_pointer_sub(UCHAR *ptr, ULONG amount);       */
160/**                                                                       */
161/**************************************************************************/
162/**************************************************************************/
163
164        .text
165        .thumb_func
166_tx_misra_uchar_pointer_sub:
167        RSBS     R1,R1,#+0
168        ADD      R0,R0,R1
169        BX       LR               // return
170
171
172/**************************************************************************/
173/**************************************************************************/
174/**                                                                       */
175/**  ULONG  _tx_misra_uchar_pointer_dif(UCHAR *ptr1, UCHAR *ptr2);        */
176/**                                                                       */
177/**************************************************************************/
178/**************************************************************************/
179
180        .text
181        .thumb_func
182_tx_misra_uchar_pointer_dif:
183        SUBS     R0,R0,R1
184        BX       LR               // return
185
186
187/************************************************************************************************************************************/
188/************************************************************************************************************************************/
189/**                                                                                                                                 */
190/**  This single function serves all of the below prototypes.                                                                       */
191/**                                                                                                                                 */
192/**  ULONG  _tx_misra_pointer_to_ulong_convert(VOID *ptr);                                                                          */
193/**  VOID  *_tx_misra_ulong_to_pointer_convert(ULONG input);                                                                        */
194/**  UCHAR  **_tx_misra_indirect_void_to_uchar_pointer_convert(VOID **return_ptr);                                                  */
195/**  UCHAR  **_tx_misra_uchar_to_indirect_uchar_pointer_convert(UCHAR *pointer);                                                    */
196/**  UCHAR  *_tx_misra_block_pool_to_uchar_pointer_convert(TX_BLOCK_POOL *pool);                                                    */
197/**  TX_BLOCK_POOL  *_tx_misra_void_to_block_pool_pointer_convert(VOID *pointer);                                                   */
198/**  UCHAR  *_tx_misra_void_to_uchar_pointer_convert(VOID *pointer);                                                                */
199/**  TX_BLOCK_POOL *_tx_misra_uchar_to_block_pool_pointer_convert(UCHAR *pointer);                                                  */
200/**  UCHAR  **_tx_misra_void_to_indirect_uchar_pointer_convert(VOID *pointer);                                                      */
201/**  TX_BYTE_POOL  *_tx_misra_void_to_byte_pool_pointer_convert(VOID *pointer);                                                     */
202/**  UCHAR  *_tx_misra_byte_pool_to_uchar_pointer_convert(TX_BYTE_POOL *pool);                                                      */
203/**  ALIGN_TYPE  *_tx_misra_uchar_to_align_type_pointer_convert(UCHAR *pointer);                                                    */
204/**  TX_BYTE_POOL  **_tx_misra_uchar_to_indirect_byte_pool_pointer_convert(UCHAR *pointer);                                         */
205/**  TX_EVENT_FLAGS_GROUP  *_tx_misra_void_to_event_flags_pointer_convert(VOID *pointer);                                           */
206/**  ULONG  *_tx_misra_void_to_ulong_pointer_convert(VOID *pointer);                                                                */
207/**  TX_MUTEX  *_tx_misra_void_to_mutex_pointer_convert(VOID *pointer);                                                             */
208/**  TX_QUEUE  *_tx_misra_void_to_queue_pointer_convert(VOID *pointer);                                                             */
209/**  TX_SEMAPHORE  *_tx_misra_void_to_semaphore_pointer_convert(VOID *pointer);                                                     */
210/**  VOID  *_tx_misra_uchar_to_void_pointer_convert(UCHAR *pointer);                                                                */
211/**  TX_THREAD  *_tx_misra_ulong_to_thread_pointer_convert(ULONG value);                                                            */
212/**  VOID  *_tx_misra_timer_indirect_to_void_pointer_convert(TX_TIMER_INTERNAL **pointer);                                          */
213/**  CHAR  *_tx_misra_const_char_to_char_pointer_convert(const char *pointer);                                                      */
214/**  TX_THREAD  *_tx_misra_void_to_thread_pointer_convert(void *pointer);                                                           */
215/**  UCHAR  *_tx_misra_object_to_uchar_pointer_convert(TX_TRACE_OBJECT_ENTRY *pointer);                                             */
216/**  TX_TRACE_OBJECT_ENTRY  *_tx_misra_uchar_to_object_pointer_convert(UCHAR *pointer);                                             */
217/**  TX_TRACE_HEADER  *_tx_misra_uchar_to_header_pointer_convert(UCHAR *pointer);                                                   */
218/**  TX_TRACE_BUFFER_ENTRY  *_tx_misra_uchar_to_entry_pointer_convert(UCHAR *pointer);                                              */
219/**  UCHAR  *_tx_misra_entry_to_uchar_pointer_convert(TX_TRACE_BUFFER_ENTRY *pointer);                                              */
220/**  UCHAR  *_tx_misra_char_to_uchar_pointer_convert(CHAR *pointer);                                                                */
221/**  VOID    _tx_misra_event_flags_group_not_used(TX_EVENT_FLAGS_GROUP *group_ptr);                                                 */
222/**  VOID    _tx_misra_event_flags_set_notify_not_used(VOID (*events_set_notify)(TX_EVENT_FLAGS_GROUP *notify_group_ptr));          */
223/**  VOID    _tx_misra_queue_not_used(TX_QUEUE *queue_ptr);                                                                         */
224/**  VOID    _tx_misra_queue_send_notify_not_used(VOID (*queue_send_notify)(TX_QUEUE *notify_queue_ptr));                           */
225/**  VOID    _tx_misra_semaphore_not_used(TX_SEMAPHORE *semaphore_ptr);                                                             */
226/**  VOID    _tx_misra_semaphore_put_notify_not_used(VOID (*semaphore_put_notify)(TX_SEMAPHORE *notify_semaphore_ptr));             */
227/**  VOID    _tx_misra_thread_not_used(TX_THREAD *thread_ptr);                                                                      */
228/**  VOID    _tx_misra_thread_entry_exit_notify_not_used(VOID (*thread_entry_exit_notify)(TX_THREAD *notify_thread_ptr, UINT id));  */
229/**                                                                                                                                 */
230/************************************************************************************************************************************/
231/************************************************************************************************************************************/
232        .text
233        .thumb_func
234_tx_misra_pointer_to_ulong_convert:
235_tx_misra_ulong_to_pointer_convert:
236_tx_misra_indirect_void_to_uchar_pointer_convert:
237_tx_misra_uchar_to_indirect_uchar_pointer_convert:
238_tx_misra_block_pool_to_uchar_pointer_convert:
239_tx_misra_void_to_block_pool_pointer_convert:
240_tx_misra_void_to_uchar_pointer_convert:
241_tx_misra_uchar_to_block_pool_pointer_convert:
242_tx_misra_void_to_indirect_uchar_pointer_convert:
243_tx_misra_void_to_byte_pool_pointer_convert:
244_tx_misra_byte_pool_to_uchar_pointer_convert:
245_tx_misra_uchar_to_align_type_pointer_convert:
246_tx_misra_uchar_to_indirect_byte_pool_pointer_convert:
247_tx_misra_void_to_event_flags_pointer_convert:
248_tx_misra_void_to_ulong_pointer_convert:
249_tx_misra_void_to_mutex_pointer_convert:
250_tx_misra_void_to_queue_pointer_convert:
251_tx_misra_void_to_semaphore_pointer_convert:
252_tx_misra_uchar_to_void_pointer_convert:
253_tx_misra_ulong_to_thread_pointer_convert:
254_tx_misra_timer_indirect_to_void_pointer_convert:
255_tx_misra_const_char_to_char_pointer_convert:
256_tx_misra_void_to_thread_pointer_convert:
257#ifdef TX_ENABLE_EVENT_TRACE
258_tx_misra_object_to_uchar_pointer_convert:
259_tx_misra_uchar_to_object_pointer_convert:
260_tx_misra_uchar_to_header_pointer_convert:
261_tx_misra_uchar_to_entry_pointer_convert:
262_tx_misra_entry_to_uchar_pointer_convert:
263#endif
264_tx_misra_char_to_uchar_pointer_convert:
265_tx_misra_event_flags_group_not_used:
266_tx_misra_event_flags_set_notify_not_used:
267_tx_misra_queue_not_used:
268_tx_misra_queue_send_notify_not_used:
269_tx_misra_semaphore_not_used:
270_tx_misra_semaphore_put_notify_not_used:
271_tx_misra_thread_entry_exit_notify_not_used:
272_tx_misra_thread_not_used:
273
274        BX       LR               // return
275
276
277/**************************************************************************/
278/**************************************************************************/
279/**                                                                       */
280/**  ULONG  *_tx_misra_ulong_pointer_add(ULONG *ptr, ULONG amount);       */
281/**                                                                       */
282/**************************************************************************/
283/**************************************************************************/
284
285        .text
286        .thumb_func
287_tx_misra_ulong_pointer_add:
288        ADD      R0,R0,R1, LSL #+2
289        BX       LR               // return
290
291
292/**************************************************************************/
293/**************************************************************************/
294/**                                                                       */
295/**  ULONG  *_tx_misra_ulong_pointer_sub(ULONG *ptr, ULONG amount);       */
296/**                                                                       */
297/**************************************************************************/
298/**************************************************************************/
299
300        .text
301        .thumb_func
302_tx_misra_ulong_pointer_sub:
303        MVNS     R2,#+3
304        MULS     R1,R2,R1
305        ADD      R0,R0,R1
306        BX       LR               // return
307
308
309/**************************************************************************/
310/**************************************************************************/
311/**                                                                       */
312/**  ULONG  _tx_misra_ulong_pointer_dif(ULONG *ptr1, ULONG *ptr2);        */
313/**                                                                       */
314/**************************************************************************/
315/**************************************************************************/
316
317        .text
318        .thumb_func
319_tx_misra_ulong_pointer_dif:
320        SUBS     R0,R0,R1
321        ASRS     R0,R0,#+2
322        BX       LR               // return
323
324
325/**************************************************************************/
326/**************************************************************************/
327/**                                                                       */
328/**  VOID  _tx_misra_message_copy(ULONG **source, ULONG **destination,    */
329/**                                                           UINT size); */
330/**                                                                       */
331/**************************************************************************/
332/**************************************************************************/
333
334        .text
335        .thumb_func
336_tx_misra_message_copy:
337        PUSH     {R4,R5}
338        LDR      R3,[R0, #+0]
339        LDR      R4,[R1, #+0]
340        LDR      R5,[R3, #+0]
341        STR      R5,[R4, #+0]
342        ADDS     R4,R4,#+4
343        ADDS     R3,R3,#+4
344        CMP      R2,#+2
345        BCC.N    _tx_misra_message_copy_0
346        SUBS     R2,R2,#+1
347        B.N      _tx_misra_message_copy_1
348_tx_misra_message_copy_2:
349        LDR      R5,[R3, #+0]
350        STR      R5,[R4, #+0]
351        ADDS     R4,R4,#+4
352        ADDS     R3,R3,#+4
353        SUBS     R2,R2,#+1
354_tx_misra_message_copy_1:
355        CMP      R2,#+0
356        BNE.N    _tx_misra_message_copy_2
357_tx_misra_message_copy_0:
358        STR      R3,[R0, #+0]
359        STR      R4,[R1, #+0]
360        POP      {R4,R5}
361        BX       LR               // return
362
363
364/**************************************************************************/
365/**************************************************************************/
366/**                                                                       */
367/**  ULONG  _tx_misra_timer_pointer_dif(TX_TIMER_INTERNAL **ptr1,         */
368/**                                           TX_TIMER_INTERNAL **ptr2);  */
369/**                                                                       */
370/**************************************************************************/
371/**************************************************************************/
372
373        .text
374        .thumb_func
375_tx_misra_timer_pointer_dif:
376        SUBS     R0,R0,R1
377        ASRS     R0,R0,#+2
378        BX       LR               // return
379
380
381/**************************************************************************/
382/**************************************************************************/
383/**                                                                       */
384/**  TX_TIMER_INTERNAL **_tx_misra_timer_pointer_add(TX_TIMER_INTERNAL    */
385/**                                                  **ptr1, ULONG size); */
386/**                                                                       */
387/**************************************************************************/
388/**************************************************************************/
389
390        .text
391        .thumb_func
392_tx_misra_timer_pointer_add:
393        ADD      R0,R0,R1, LSL #+2
394        BX       LR               // return
395
396
397/**************************************************************************/
398/**************************************************************************/
399/**                                                                       */
400/**  VOID  _tx_misra_user_timer_pointer_get(TX_TIMER_INTERNAL             */
401/**                              *internal_timer, TX_TIMER **user_timer); */
402/**                                                                       */
403/**************************************************************************/
404/**************************************************************************/
405
406        .text
407        .thumb_func
408_tx_misra_user_timer_pointer_get:
409        SUBS    R0,#8
410        STR     R0,[R1, #+0]
411        BX      LR               // return
412
413
414/**************************************************************************/
415/**************************************************************************/
416/**                                                                       */
417/**  VOID  _tx_misra_thread_stack_check(TX_THREAD *thread_ptr,            */
418/**                                              VOID **highest_stack);   */
419/**                                                                       */
420/**************************************************************************/
421/**************************************************************************/
422
423        .text
424        .thumb_func
425_tx_misra_thread_stack_check:
426        PUSH     {R3-R5,LR}
427        MOVS     R4,R0
428        MOVS     R5,R1
429        BL       _tx_thread_interrupt_disable
430        CMP      R4,#+0
431        BEQ.N    _tx_misra_thread_stack_check_0
432        LDR      R1,[R4, #+0]
433        LDR      R2,=0x54485244
434        CMP      R1,R2
435        BNE.N    _tx_misra_thread_stack_check_0
436        LDR      R1,[R4, #+8]
437        LDR      R2,[R5, #+0]
438        CMP      R1,R2
439        BCS.N    _tx_misra_thread_stack_check_1
440        LDR      R1,[R4, #+8]
441        STR      R1,[R5, #+0]
442_tx_misra_thread_stack_check_1:
443        LDR      R1,[R4, #+12]
444        LDR      R1,[R1, #+0]
445        CMP      R1,#-269488145
446        BNE.N    _tx_misra_thread_stack_check_2
447        LDR      R1,[R4, #+16]
448        LDR      R1,[R1, #+1]
449        CMP      R1,#-269488145
450        BNE.N    _tx_misra_thread_stack_check_2
451        LDR      R1,[R5, #+0]
452        LDR      R2,[R4, #+12]
453        CMP      R1,R2
454        BCS.N    _tx_misra_thread_stack_check_3
455_tx_misra_thread_stack_check_2:
456        BL       _tx_thread_interrupt_restore
457        MOVS     R0,R4
458        BL       _tx_thread_stack_error_handler
459        BL       _tx_thread_interrupt_disable
460_tx_misra_thread_stack_check_3:
461        LDR      R1,[R5, #+0]
462        LDR      R1,[R1, #-4]
463        CMP      R1,#-269488145
464        BEQ.N    _tx_misra_thread_stack_check_0
465        BL       _tx_thread_interrupt_restore
466        MOVS     R0,R4
467        BL       _tx_thread_stack_analyze
468        BL       _tx_thread_interrupt_disable
469_tx_misra_thread_stack_check_0:
470        BL       _tx_thread_interrupt_restore
471        POP      {R0,R4,R5,PC}    // return
472
473#ifdef TX_ENABLE_EVENT_TRACE
474
475/**************************************************************************/
476/**************************************************************************/
477/**                                                                       */
478/**  VOID  _tx_misra_trace_event_insert(ULONG event_id,                   */
479/**           VOID *info_field_1, ULONG info_field_2, ULONG info_field_3, */
480/**           ULONG info_field_4, ULONG filter, ULONG time_stamp);        */
481/**                                                                       */
482/**************************************************************************/
483/**************************************************************************/
484
485        .text
486        .thumb_func
487_tx_misra_trace_event_insert:
488        PUSH     {R3-R7,LR}
489        LDR.N    R4,DataTable2_1
490        LDR      R4,[R4, #+0]
491        CMP      R4,#+0
492        BEQ.N    _tx_misra_trace_event_insert_0
493        LDR.N    R5,DataTable2_2
494        LDR      R5,[R5, #+0]
495        LDR      R6,[SP, #+28]
496        TST      R5,R6
497        BEQ.N    _tx_misra_trace_event_insert_0
498        LDR.N    R5,DataTable2_3
499        LDR      R5,[R5, #+0]
500        LDR.N    R6,DataTable2_4
501        LDR      R6,[R6, #+0]
502        CMP      R5,#+0
503        BNE.N    _tx_misra_trace_event_insert_1
504        LDR      R5,[R6, #+44]
505        LDR      R7,[R6, #+60]
506        LSLS     R7,R7,#+16
507        ORRS     R7,R7,#0x80000000
508        ORRS     R5,R7,R5
509        B.N      _tx_misra_trace_event_insert_2
510_tx_misra_trace_event_insert_1:
511        CMP      R5,#-252645136
512        BCS.N    _tx_misra_trace_event_insert_3
513        MOVS     R5,R6
514        MOVS     R6,#-1
515        B.N      _tx_misra_trace_event_insert_2
516_tx_misra_trace_event_insert_3:
517        MOVS     R6,#-252645136
518        MOVS     R5,#+0
519_tx_misra_trace_event_insert_2:
520        STR      R6,[R4, #+0]
521        STR      R5,[R4, #+4]
522        STR      R0,[R4, #+8]
523        LDR      R0,[SP, #+32]
524        STR      R0,[R4, #+12]
525        STR      R1,[R4, #+16]
526        STR      R2,[R4, #+20]
527        STR      R3,[R4, #+24]
528        LDR      R0,[SP, #+24]
529        STR      R0,[R4, #+28]
530        ADDS     R4,R4,#+32
531        LDR.N    R0,DataTable2_5
532        LDR      R0,[R0, #+0]
533        CMP      R4,R0
534        BCC.N    _tx_misra_trace_event_insert_4
535        LDR.N    R0,DataTable2_6
536        LDR      R4,[R0, #+0]
537        LDR.N    R0,DataTable2_1
538        STR      R4,[R0, #+0]
539        LDR.N    R0,DataTable2_7
540        LDR      R0,[R0, #+0]
541        STR      R4,[R0, #+32]
542        LDR.N    R0,DataTable2_8
543        LDR      R0,[R0, #+0]
544        CMP      R0,#+0
545        BEQ.N    _tx_misra_trace_event_insert_0
546        LDR.N    R0,DataTable2_7
547        LDR      R0,[R0, #+0]
548        LDR.N    R1,DataTable2_8
549        LDR      R1,[R1, #+0]
550        BLX      R1
551        B.N      _tx_misra_trace_event_insert_0
552_tx_misra_trace_event_insert_4:
553        LDR.N    R0,DataTable2_1
554        STR      R4,[R0, #+0]
555        LDR.N    R0,DataTable2_7
556        LDR      R0,[R0, #+0]
557        STR      R4,[R0, #+32]
558_tx_misra_trace_event_insert_0:
559        POP      {R0,R4-R7,PC}    // return
560
561
562        .data
563DataTable2_1:
564        .word     _tx_trace_buffer_current_ptr
565
566        .data
567DataTable2_2:
568        .word     _tx_trace_event_enable_bits
569
570        .data
571DataTable2_5:
572        .word     _tx_trace_buffer_end_ptr
573
574        .data
575DataTable2_6:
576        .word     _tx_trace_buffer_start_ptr
577
578        .data
579DataTable2_7:
580        .word     _tx_trace_header_ptr
581
582        .data
583DataTable2_8:
584        .word     _tx_trace_full_notify_function
585
586
587/**************************************************************************/
588/**************************************************************************/
589/**                                                                       */
590/**  ULONG  _tx_misra_time_stamp_get(VOID);                               */
591/**                                                                       */
592/**************************************************************************/
593/**************************************************************************/
594
595        .text
596        .thumb_func
597_tx_misra_time_stamp_get:
598        MOVS     R0,#+0
599        BX       LR               // return
600
601#endif
602
603        .data
604DataTable2_3:
605        .word     _tx_thread_system_state
606
607        .data
608DataTable2_4:
609        .word     _tx_thread_current_ptr
610
611
612/**************************************************************************/
613/**************************************************************************/
614/**                                                                       */
615/**  UINT  _tx_misra_always_true(void);                                   */
616/**                                                                       */
617/**************************************************************************/
618/**************************************************************************/
619
620        .text
621        .thumb_func
622_tx_misra_always_true:
623        MOVS     R0,#+1
624        BX       LR               // return
625
626
627/**************************************************************************/
628/**************************************************************************/
629/**                                                                       */
630/**  UINT  _tx_misra_status_get(UINT status);                             */
631/**                                                                       */
632/**************************************************************************/
633/**************************************************************************/
634
635        .text
636        .thumb_func
637_tx_misra_status_get:
638        MOVS     R0,#+0
639        BX       LR               // return
640
641
642/***********************************************************************************************/
643/***********************************************************************************************/
644/**                                                                                            */
645/**  ULONG  _tx_misra_ipsr_get(void);                                                          */
646/**                                                                                            */
647/***********************************************************************************************/
648/***********************************************************************************************/
649
650        .text
651        .thumb_func
652_tx_misra_ipsr_get:
653        MRS      R0, IPSR
654        BX       LR               // return
655
656
657/***********************************************************************************************/
658/***********************************************************************************************/
659/**                                                                                            */
660/**  ULONG  _tx_misra_control_get(void);                                                       */
661/**                                                                                            */
662/***********************************************************************************************/
663/***********************************************************************************************/
664
665        .text
666        .thumb_func
667_tx_misra_control_get:
668        MRS      R0, CONTROL
669        BX       LR               // return
670
671
672/***********************************************************************************************/
673/***********************************************************************************************/
674/**                                                                                            */
675/**  void   _tx_misra_control_set(ULONG value);                                                */
676/**                                                                                            */
677/***********************************************************************************************/
678/***********************************************************************************************/
679
680        .text
681        .thumb_func
682_tx_misra_control_set:
683        MSR      CONTROL, R0
684        BX       LR               // return
685
686
687#ifdef __ARM_FP
688
689/***********************************************************************************************/
690/***********************************************************************************************/
691/**                                                                                            */
692/**  ULONG  _tx_misra_fpccr_get(void);                                                         */
693/**                                                                                            */
694/***********************************************************************************************/
695/***********************************************************************************************/
696
697        .text
698        .thumb_func
699_tx_misra_fpccr_get:
700        LDR      r0, =0xE000EF34  // Build FPCCR address
701        LDR      r0, [r0]         // Load FPCCR value
702        BX       LR               // return
703
704
705/***********************************************************************************************/
706/***********************************************************************************************/
707/**                                                                                            */
708/**  void   _tx_misra_vfp_touch(void);                                                         */
709/**                                                                                            */
710/***********************************************************************************************/
711/***********************************************************************************************/
712
713        .text
714        .thumb_func
715_tx_misra_vfp_touch:
716        vmov.f32 s0, s0
717        BX       LR               // return
718
719#endif
720
721
722        .data
723        .word 0
724