xref: /openbmc/linux/arch/ia64/scripts/toolchain-flags (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
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