11da177e4SLinus Torvalds#!/bin/sh 2*b2441318SGreg Kroah-Hartman# SPDX-License-Identifier: GPL-2.0 31da177e4SLinus Torvalds# 41da177e4SLinus Torvalds# Check whether linker can handle cross-segment @segrel(): 51da177e4SLinus Torvalds# 61da177e4SLinus TorvaldsCPPFLAGS="" 71da177e4SLinus TorvaldsCC=$1 81da177e4SLinus TorvaldsOBJDUMP=$2 91da177e4SLinus TorvaldsREADELF=$3 101da177e4SLinus Torvaldsdir=$(dirname $0) 111da177e4SLinus Torvaldstmp=${TMPDIR:-/tmp} 121da177e4SLinus Torvaldsout=$tmp/out$$ 131da177e4SLinus Torvalds 141da177e4SLinus Torvalds# Check whether cross-segment segment-relative relocs work fine. We need 151da177e4SLinus Torvalds# that for building the gate DSO: 161da177e4SLinus Torvalds 171da177e4SLinus Torvalds$CC -nostdlib -static -Wl,-T$dir/check-segrel.lds $dir/check-segrel.S -o $out 181da177e4SLinus Torvaldsres=$($OBJDUMP --full --section .rodata $out | fgrep 000 | cut -f3 -d' ') 191da177e4SLinus Torvaldsrm -f $out 201da177e4SLinus Torvaldsif [ $res != 00000a00 ]; then 211da177e4SLinus Torvalds CPPFLAGS="$CPPFLAGS -DHAVE_BUGGY_SEGREL" 221da177e4SLinus Torvalds cat >&2 <<EOF 231da177e4SLinus Torvaldswarning: your linker cannot handle cross-segment segment-relative relocations. 241da177e4SLinus Torvalds please upgrade to a newer version (it is safe to use this linker, but 251da177e4SLinus Torvalds the kernel will be bigger than strictly necessary). 261da177e4SLinus TorvaldsEOF 271da177e4SLinus Torvaldsfi 281da177e4SLinus Torvalds 291da177e4SLinus Torvalds# Check whether .align inside a function works as expected. 301da177e4SLinus Torvalds 311da177e4SLinus Torvalds$CC -c $dir/check-text-align.S -o $out 321da177e4SLinus Torvalds$READELF -u $out | fgrep -q 'prologue(rlen=12)' 331da177e4SLinus Torvaldsres=$? 341da177e4SLinus Torvaldsrm -f $out 351da177e4SLinus Torvaldsif [ $res -eq 0 ]; then 361da177e4SLinus Torvalds CPPFLAGS="$CPPFLAGS -DHAVE_WORKING_TEXT_ALIGN" 371da177e4SLinus Torvaldsfi 381da177e4SLinus Torvalds 391da177e4SLinus Torvaldsif ! $CC -c $dir/check-model.c -o $out 2>&1 | grep __model__ | grep -q attrib 401da177e4SLinus Torvaldsthen 411da177e4SLinus Torvalds CPPFLAGS="$CPPFLAGS -DHAVE_MODEL_SMALL_ATTRIBUTE" 421da177e4SLinus Torvaldsfi 431da177e4SLinus Torvaldsrm -f $out 441da177e4SLinus Torvalds 451da177e4SLinus Torvalds# Check whether assembler supports .serialize.{data,instruction} directive. 461da177e4SLinus Torvalds 471da177e4SLinus Torvalds$CC -c $dir/check-serialize.S -o $out 2>/dev/null 481da177e4SLinus Torvaldsres=$? 491da177e4SLinus Torvaldsrm -f $out 501da177e4SLinus Torvaldsif [ $res -eq 0 ]; then 511da177e4SLinus Torvalds CPPFLAGS="$CPPFLAGS -DHAVE_SERIALIZE_DIRECTIVE" 521da177e4SLinus Torvaldsfi 531da177e4SLinus Torvalds 541da177e4SLinus Torvaldsecho $CPPFLAGS 55