From d0abbdf56e11ccc88447c1dc80caaf355c94be3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Tue, 19 Sep 2023 10:14:03 +0300 Subject: [PATCH] MDEV-31605 cmake/stack_direction.c does not work correctly on clang 16 According to commit ea56841997995283f04e85e957c8d7f3159c85b0 the stack normally grows downwards, except on HP PA-RISC where it grows upwards. Because determining the stack direction is not possible in a portable way, let us determine the default STACK_DIRECTION in CMake based on the ISA. On clang 16.0.6 running on and targeting AMD64, STACK_DIRECTION=1 is being incorrectly detected, causing the failure of a number of tests. --- cmake/stack_direction.c | 33 --------------------------------- configure.cmake | 24 +++++------------------- 2 files changed, 5 insertions(+), 52 deletions(-) delete mode 100644 cmake/stack_direction.c diff --git a/cmake/stack_direction.c b/cmake/stack_direction.c deleted file mode 100644 index 1f7a5d0b135..00000000000 --- a/cmake/stack_direction.c +++ /dev/null @@ -1,33 +0,0 @@ -/* - Copyright (c) 2009 Sun Microsystems, Inc. - Use is subject to license terms. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ - -/* Check stack direction (0-down, 1-up) */ -int f(int *a) -{ - int b; - return(&b > a)?1:0; -} -/* - Prevent compiler optimizations by calling function - through pointer. -*/ -volatile int (*ptr_f)(int *) = f; -int main() -{ - int a; - return ptr_f(&a); -} diff --git a/configure.cmake b/configure.cmake index 475fd250329..55affd756d3 100644 --- a/configure.cmake +++ b/configure.cmake @@ -672,25 +672,11 @@ int main() } " HAVE_PTHREAD_YIELD_ZERO_ARG) -IF(NOT STACK_DIRECTION) - IF(CMAKE_CROSSCOMPILING) - MESSAGE(FATAL_ERROR - "STACK_DIRECTION is not defined. Please specify -DSTACK_DIRECTION=1 " - "or -DSTACK_DIRECTION=-1 when calling cmake.") - ELSE() - TRY_RUN(STACKDIR_RUN_RESULT STACKDIR_COMPILE_RESULT - ${CMAKE_BINARY_DIR} - ${CMAKE_SOURCE_DIR}/cmake/stack_direction.c - ) - # Test program returns 0 (down) or 1 (up). - # Convert to -1 or 1 - IF(STACKDIR_RUN_RESULT EQUAL 0) - SET(STACK_DIRECTION -1 CACHE INTERNAL "Stack grows direction") - ELSE() - SET(STACK_DIRECTION 1 CACHE INTERNAL "Stack grows direction") - ENDIF() - MESSAGE(STATUS "Checking stack direction : ${STACK_DIRECTION}") - ENDIF() +IF(STACK_DIRECTION) +ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(parisc|hppa)") + SET(STACK_DIRECTION 1 CACHE INTERNAL "Stack grows direction") +ELSE() + SET(STACK_DIRECTION -1 CACHE INTERNAL "Stack grows direction") ENDIF() #