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