Add necessary sections for stack protection area and implement fill function
This commit is contained in:
		@@ -50,4 +50,8 @@ static inline uint32_t read_stack_pointer()
 | 
				
			|||||||
	return stack_pointer;
 | 
						return stack_pointer;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int stack_check_init_corruption_detect_area(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int stack_check_corruption_detect_area(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* __STACK_CHECK_H__ */
 | 
					#endif /* __STACK_CHECK_H__ */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,9 +20,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include <reflow-controller/stack-check.h>
 | 
					#include <reflow-controller/stack-check.h>
 | 
				
			||||||
#include <stdint.h>
 | 
					#include <stdint.h>
 | 
				
			||||||
 | 
					#include <stm-periph/rng.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern char __ld_top_of_stack;
 | 
					extern char __ld_top_of_stack;
 | 
				
			||||||
extern char __ld_eheap;
 | 
					extern char __ld_end_stack;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int32_t stack_check_get_usage()
 | 
					int32_t stack_check_get_usage()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -41,7 +42,45 @@ int32_t stack_check_get_free()
 | 
				
			|||||||
	uint32_t stack_ptr;
 | 
						uint32_t stack_ptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	stack_ptr = read_stack_pointer();
 | 
						stack_ptr = read_stack_pointer();
 | 
				
			||||||
	upper_heap_boundary = (uint32_t)&__ld_eheap;
 | 
						upper_heap_boundary = (uint32_t)&__ld_end_stack;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return stack_ptr - upper_heap_boundary;
 | 
						return stack_ptr - upper_heap_boundary;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern uint32_t __ld_start_stack_corruption_detect_area;
 | 
				
			||||||
 | 
					extern uint32_t __ld_end_stack_corruption_detect_area;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int stack_check_init_corruption_detect_area(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						volatile uint32_t *ptr = &__ld_start_stack_corruption_detect_area;
 | 
				
			||||||
 | 
						volatile uint32_t *end_ptr = &__ld_end_stack_corruption_detect_area;
 | 
				
			||||||
 | 
						enum random_number_error rng_stat;
 | 
				
			||||||
 | 
						uint32_t rng_number;
 | 
				
			||||||
 | 
						int ret = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						end_ptr--;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						random_number_gen_init(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						while (ptr < end_ptr) {
 | 
				
			||||||
 | 
							rng_stat = random_number_gen_get_number(&rng_number, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (rng_stat != RNG_ERROR_OK) {
 | 
				
			||||||
 | 
								ret = -1;
 | 
				
			||||||
 | 
								goto exit_deinit_rng;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							*ptr = rng_number;
 | 
				
			||||||
 | 
							ptr++;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exit_deinit_rng:
 | 
				
			||||||
 | 
						random_number_gen_deinit();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return ret;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int stack_check_corruption_detect_area(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,6 +25,7 @@
 | 
				
			|||||||
/* USER PARAMETERS */
 | 
					/* USER PARAMETERS */
 | 
				
			||||||
__ld_stack_size = 0x3000;
 | 
					__ld_stack_size = 0x3000;
 | 
				
			||||||
__ld_heap_size  = 0x2100;
 | 
					__ld_heap_size  = 0x2100;
 | 
				
			||||||
 | 
					__stack_corruption_area_size = 64;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* END OF USER PARAMETERS */
 | 
					/* END OF USER PARAMETERS */
 | 
				
			||||||
ENTRY(Reset_Handler)
 | 
					ENTRY(Reset_Handler)
 | 
				
			||||||
@@ -150,6 +151,12 @@ SECTIONS
 | 
				
			|||||||
		__ld_sheap = .;
 | 
							__ld_sheap = .;
 | 
				
			||||||
		. = . + __ld_heap_size;
 | 
							. = . + __ld_heap_size;
 | 
				
			||||||
		__ld_eheap = .;
 | 
							__ld_eheap = .;
 | 
				
			||||||
 | 
							. = ALIGN(4)
 | 
				
			||||||
 | 
							__ld_start_stack_corruption_detect_area = .;
 | 
				
			||||||
 | 
							. = . + __stack_corruption_area_size;
 | 
				
			||||||
 | 
							. = ALIGN(4);
 | 
				
			||||||
 | 
							__ld_end_stack_corruption_detect_area = .;
 | 
				
			||||||
 | 
							__ld_end_stack = .
 | 
				
			||||||
		. = . + __ld_stack_size;
 | 
							. = . + __ld_stack_size;
 | 
				
			||||||
		. = ALIGN(4);
 | 
							. = ALIGN(4);
 | 
				
			||||||
	} >RAM
 | 
						} >RAM
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user