Commit 900e7bd2 authored by David Mosberger's avatar David Mosberger

ia64: If the compiler supports it, use attribute (model (small)) to

	tell the compiler that per-CPU variables can be addressed
	with "addl".

	On the simulator kernel, this saves about 2776 bytes in the
	kernel image.  On a zx1 kernel, it saves about 5593 bytes.
	As per-CPU variables are used more, these savings will
	increase, of course.
parent 0f4f7d24
int __attribute__ ((__model__ (__small__))) x;
......@@ -2,6 +2,7 @@
#
# Check whether linker can handle cross-segment @segrel():
#
CPPFLAGS=""
CC=$1
OBJDUMP=$2
dir=$(dirname $0)
......@@ -11,10 +12,17 @@ $CC -nostdlib -static -Wl,-T$dir/check-segrel.lds $dir/check-segrel.S -o $out
res=$($OBJDUMP --full --section .rodata $out | fgrep 000 | cut -f3 -d' ')
rm -f $out
if [ $res != 00000a00 ]; then
echo " -DHAVE_BUGGY_SEGREL"
CPPFLAGS="$CPPFLAGS -DHAVE_BUGGY_SEGREL"
cat >&2 <<EOF
warning: your linker cannot handle cross-segment segment-relative relocations.
please upgrade to a newer version (it is safe to use this linker, but
the kernel will be bigger than strictly necessary).
EOF
fi
if ! $CC -c $dir/check-model.c -o $out | grep -q 'attribute directive ignored'
then
CPPFLAGS="$CPPFLAGS -DHAVE_MODEL_SMALL_ATTRIBUTE"
fi
rm -f $out
echo $CPPFLAGS
......@@ -16,11 +16,19 @@
#include <linux/threads.h>
#define DECLARE_PER_CPU(type, name) extern __typeof__(type) per_cpu__##name
#ifdef HAVE_MODEL_SMALL_ATTRIBUTE
# define __SMALL_ADDR_AREA __attribute__((__model__ (__small__)))
#else
# define __SMALL_ADDR_AREA
#endif
#define DECLARE_PER_CPU(type, name) \
extern __SMALL_ADDR_AREA __typeof__(type) per_cpu__##name
/* Separate out the type, so (int[3], foo) works. */
#define DEFINE_PER_CPU(type, name) \
__attribute__((__section__(".data.percpu"))) __typeof__(type) per_cpu__##name
#define DEFINE_PER_CPU(type, name) \
__attribute__((__section__(".data.percpu"))) \
__SMALL_ADDR_AREA __typeof__(type) per_cpu__##name
/*
* Pretty much a literal copy of asm-generic/percpu.h, except that percpu_modcopy() is an
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment