151faada7SDouglas Raillard /* 251faada7SDouglas Raillard * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. 351faada7SDouglas Raillard * 482cb2c1aSdp-arm * SPDX-License-Identifier: BSD-3-Clause 551faada7SDouglas Raillard */ 6*09d40e0eSAntonio Nino Diaz 751faada7SDouglas Raillard #include <stdint.h> 851faada7SDouglas Raillard 9*09d40e0eSAntonio Nino Diaz #include <common/debug.h> 10*09d40e0eSAntonio Nino Diaz #include <plat/common/platform.h> 11*09d40e0eSAntonio Nino Diaz 1251faada7SDouglas Raillard /* 1351faada7SDouglas Raillard * Canary value used by the compiler runtime checks to detect stack corruption. 1451faada7SDouglas Raillard * 1551faada7SDouglas Raillard * Force the canary to be in .data to allow predictable memory layout relatively 1651faada7SDouglas Raillard * to the stacks. 1751faada7SDouglas Raillard */ 1851faada7SDouglas Raillard u_register_t __attribute__((section(".data.stack_protector_canary"))) 1951faada7SDouglas Raillard __stack_chk_guard = (u_register_t) 3288484550995823360ULL; 2051faada7SDouglas Raillard 2151faada7SDouglas Raillard /* 2251faada7SDouglas Raillard * Function called when the stack's canary check fails, which means the stack 2351faada7SDouglas Raillard * was corrupted. It must not return. 2451faada7SDouglas Raillard */ 2551faada7SDouglas Raillard void __dead2 __stack_chk_fail(void) 2651faada7SDouglas Raillard { 2751faada7SDouglas Raillard #if DEBUG 2851faada7SDouglas Raillard ERROR("Stack corruption detected\n"); 2951faada7SDouglas Raillard #endif 3051faada7SDouglas Raillard panic(); 3151faada7SDouglas Raillard } 3251faada7SDouglas Raillard 33