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