/ components / esp_common / src / stack_check.c
stack_check.c
 1  // Copyright 2017 Espressif Systems (Shanghai) PTE LTD
 2  //
 3  // Licensed under the Apache License, Version 2.0 (the "License");
 4  // you may not use this file except in compliance with the License.
 5  // You may obtain a copy of the License at
 6  //
 7  //     http://www.apache.org/licenses/LICENSE-2.0
 8  //
 9  // Unless required by applicable law or agreed to in writing, software
10  // distributed under the License is distributed on an "AS IS" BASIS,
11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  // See the License for the specific language governing permissions and
13  // limitations under the License.
14  
15  #include "sdkconfig.h"
16  #include "esp_system.h"
17  #include "esp_rom_sys.h"
18  
19  #if CONFIG_COMPILER_STACK_CHECK
20  
21  #define LOG_LOCAL_LEVEL CONFIG_LOG_DEFAULT_LEVEL
22  #include "esp_log.h"
23  const static char *TAG = "stack_chk";
24  
25  void *__stack_chk_guard = NULL;
26  
27  static void __attribute__ ((constructor))
28  __esp_stack_guard_setup (void)
29  {
30      ESP_LOGD(TAG, "Intialize random stack guard");
31      __stack_chk_guard = (void *)esp_random();
32  }
33  
34  void __stack_chk_fail (void)
35  {
36      esp_rom_printf("\r\nStack smashing protect failure!\r\n\r\n");
37      abort();
38  }
39  
40  #endif