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.
This commit is contained in:
parent
76b688f100
commit
d0abbdf56e
@ -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);
|
||||
}
|
@ -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()
|
||||
|
||||
#
|
||||
|
Loading…
x
Reference in New Issue
Block a user