All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ben Hutchings <ben@decadent.org.uk>
To: linux-ia64@vger.kernel.org
Subject: [RFC][PATCH] [ia64] Raise minimum binutils version and remove
Date: Mon, 04 Oct 2010 02:20:23 +0000	[thread overview]
Message-ID: <1286158823.3916.227.camel@localhost> (raw)

I believe all these bugs were fixed by 2.16, and that's old enough
now that it seems reasonable to require it as a minimum version.

This is an RFC only for now since I'm not really familiar with ia64.  In
Debian we've been patching these checks out for a while so that they
don't run when building OOT modules.

Ben.
---
 Documentation/Changes                |    2 +-
 arch/ia64/Makefile                   |   17 +--------
 arch/ia64/include/asm/asmmacro.h     |   20 ++---------
 arch/ia64/include/asm/gcc_intrin.h   |    9 +----
 arch/ia64/include/asm/percpu.h       |    4 +--
 arch/ia64/kernel/paravirt.c          |    4 --
 arch/ia64/scripts/check-gas          |   15 --------
 arch/ia64/scripts/check-gas-asm.S    |    2 -
 arch/ia64/scripts/check-model.c      |    1 -
 arch/ia64/scripts/check-segrel.S     |    4 --
 arch/ia64/scripts/check-segrel.lds   |   12 ------
 arch/ia64/scripts/check-serialize.S  |    2 -
 arch/ia64/scripts/check-text-align.S |    6 ---
 arch/ia64/scripts/toolchain-flags    |   53 ----------------------------
 arch/ia64/scripts/unwcheck.py        |   64 ----------------------------------
 15 files changed, 8 insertions(+), 207 deletions(-)
 delete mode 100755 arch/ia64/scripts/check-gas
 delete mode 100644 arch/ia64/scripts/check-gas-asm.S
 delete mode 100644 arch/ia64/scripts/check-model.c
 delete mode 100644 arch/ia64/scripts/check-segrel.S
 delete mode 100644 arch/ia64/scripts/check-segrel.lds
 delete mode 100644 arch/ia64/scripts/check-serialize.S
 delete mode 100644 arch/ia64/scripts/check-text-align.S
 delete mode 100755 arch/ia64/scripts/toolchain-flags
 delete mode 100644 arch/ia64/scripts/unwcheck.py

diff --git a/Documentation/Changes b/Documentation/Changes
index 4fb88f1..23fc499 100644
--- a/Documentation/Changes
+++ b/Documentation/Changes
@@ -30,7 +30,7 @@ isdn4k-utils.
 
 o  Gnu C                  3.2                     # gcc --version
 o  Gnu make               3.80                    # make --version
-o  binutils               2.12                    # ld -v
+o  binutils               2.12 (2.16 for ia64)    # ld -v
 o  util-linux             2.10o                   # fdformat --version
 o  module-init-tools      0.9.10                  # depmod -V
 o  e2fsprogs              1.41.4                  # e2fsck -V
diff --git a/arch/ia64/Makefile b/arch/ia64/Makefile
index be7bfa1..9feddc4 100644
--- a/arch/ia64/Makefile
+++ b/arch/ia64/Makefile
@@ -30,17 +30,6 @@ cflags-y	:= -pipe $(EXTRA) -ffixed-r13 -mfixed-rangeñ2-f15,f32-f127 \
 		   -falign-functions2 -frename-registers -fno-optimize-sibling-calls
 KBUILD_CFLAGS_KERNEL := -mconstant-gp
 
-GAS_STATUS	= $(shell $(srctree)/arch/ia64/scripts/check-gas "$(CC)" "$(OBJDUMP)")
-KBUILD_CPPFLAGS += $(shell $(srctree)/arch/ia64/scripts/toolchain-flags "$(CC)" "$(OBJDUMP)" "$(READELF)")
-
-ifeq ($(GAS_STATUS),buggy)
-$(error Sorry, you need a newer version of the assember, one that is built from	\
-	a source-tree that post-dates 18-Dec-2002.  You can find a pre-compiled	\
-	static binary of such an assembler at:					\
-										\
-		ftp://ftp.hpl.hp.com/pub/linux-ia64/gas-030124.tar.gz)
-endif
-
 KBUILD_CFLAGS += $(cflags-y)
 head-y := arch/ia64/kernel/head.o arch/ia64/kernel/init_task.o
 
@@ -68,7 +57,7 @@ boot := arch/ia64/hp/sim/boot
 
 PHONY += boot compressed check
 
-all: compressed unwcheck
+all: compressed
 
 compressed: vmlinux.gz
 
@@ -77,9 +66,6 @@ vmlinuz: vmlinux.gz
 vmlinux.gz: vmlinux
 	$(Q)$(MAKE) $(build)=$(boot) $@
 
-unwcheck: vmlinux
-	-$(Q)READELF=$(READELF) python $(srctree)/arch/ia64/scripts/unwcheck.py $<
-
 archclean:
 	$(Q)$(MAKE) $(clean)=$(boot)
 
@@ -95,7 +81,6 @@ define archhelp
   echo '* compressed	- Build compressed kernel image'
   echo '  install	- Install compressed kernel image'
   echo '  boot		- Build vmlinux and bootloader for Ski simulator'
-  echo '* unwcheck	- Check vmlinux for invalid unwind info'
 endef
 
 archprepare: make_nr_irqs_h FORCE
diff --git a/arch/ia64/include/asm/asmmacro.h b/arch/ia64/include/asm/asmmacro.h
index 3ab6d75..003106b 100644
--- a/arch/ia64/include/asm/asmmacro.h
+++ b/arch/ia64/include/asm/asmmacro.h
@@ -113,23 +113,9 @@ name:
 [1:]	adds reg=IA64_NUM_PHYS_STACK_REG*8+8,r0;	\
 	.xdata4 ".data..patch.phys_stack_reg", 1b-.
 
-/*
- * Up until early 2004, use of .align within a function caused bad unwind info.
- * TEXT_ALIGN(n) expands into ".align n" if a fixed GAS is available or into nothing
- * otherwise.
- */
-#ifdef HAVE_WORKING_TEXT_ALIGN
-# define TEXT_ALIGN(n)	.align n
-#else
-# define TEXT_ALIGN(n)
-#endif
+#define TEXT_ALIGN(n)	.align n
 
-#ifdef HAVE_SERIALIZE_DIRECTIVE
-# define dv_serialize_data		.serialize.data
-# define dv_serialize_instruction	.serialize.instruction
-#else
-# define dv_serialize_data
-# define dv_serialize_instruction
-#endif
+#define dv_serialize_data		.serialize.data
+#define dv_serialize_instruction	.serialize.instruction
 
 #endif /* _ASM_IA64_ASMMACRO_H */
diff --git a/arch/ia64/include/asm/gcc_intrin.h b/arch/ia64/include/asm/gcc_intrin.h
index 21ddee5..18f2efb 100644
--- a/arch/ia64/include/asm/gcc_intrin.h
+++ b/arch/ia64/include/asm/gcc_intrin.h
@@ -396,13 +396,8 @@ register unsigned long ia64_r13 asm ("r13") __used;
 #define ia64_srlz_i()	asm volatile (";; srlz.i ;;" ::: "memory")
 #define ia64_srlz_d()	asm volatile (";; srlz.d" ::: "memory");
 
-#ifdef HAVE_SERIALIZE_DIRECTIVE
-# define ia64_dv_serialize_data()		asm volatile (".serialize.data");
-# define ia64_dv_serialize_instruction()	asm volatile (".serialize.instruction");
-#else
-# define ia64_dv_serialize_data()
-# define ia64_dv_serialize_instruction()
-#endif
+#define ia64_dv_serialize_data()	asm volatile (".serialize.data");
+#define ia64_dv_serialize_instruction()	asm volatile (".serialize.instruction");
 
 #define ia64_nop(x)	asm volatile ("nop %0"::"i"(x));
 
diff --git a/arch/ia64/include/asm/percpu.h b/arch/ia64/include/asm/percpu.h
index 14aa1c5..59728d3 100644
--- a/arch/ia64/include/asm/percpu.h
+++ b/arch/ia64/include/asm/percpu.h
@@ -17,9 +17,7 @@
 
 #ifdef CONFIG_SMP
 
-#ifdef HAVE_MODEL_SMALL_ATTRIBUTE
-# define PER_CPU_ATTRIBUTES	__attribute__((__model__ (__small__)))
-#endif
+#define PER_CPU_ATTRIBUTES	__attribute__((__model__ (__small__)))
 
 #define __my_cpu_offset	__ia64_per_cpu_var(local_per_cpu_offset)
 
diff --git a/arch/ia64/kernel/paravirt.c b/arch/ia64/kernel/paravirt.c
index a21d7bb..e5c093a 100644
--- a/arch/ia64/kernel/paravirt.c
+++ b/arch/ia64/kernel/paravirt.c
@@ -488,9 +488,7 @@ __DEFINE_FUNC(setreg,
 	      "cmp.eq p6, p0 = r2, r9\n"
 	      ";;\n"
 	      "(p6) mov psr.l = r8\n"
-#ifdef HAVE_SERIALIZE_DIRECTIVE
 	      ".serialize.data\n"
-#endif
 	      "(p6) br.cond.sptk.many b6\n"
 	      __DEFINE_SET_REG(GP, gp)
 	      __DEFINE_SET_REG(SP, sp)
@@ -682,9 +680,7 @@ IA64_NATIVE_PATCH_DEFINE_GET_REG(tp, tp);
 __DEFINE_FUNC(set_psr_l,
 	      ";;\n"
 	      "mov psr.l = r8\n"
-#ifdef HAVE_SERIALIZE_DIRECTIVE
 	      ".serialize.data\n"
-#endif
 	      ";;\n");
 
 IA64_NATIVE_PATCH_DEFINE_REG(gp, gp);
diff --git a/arch/ia64/scripts/check-gas b/arch/ia64/scripts/check-gas
deleted file mode 100755
index 2499e0b..0000000
--- a/arch/ia64/scripts/check-gas
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-dir=$(dirname $0)
-CC=$1
-OBJDUMP=$2
-tmp=${TMPDIR:-/tmp}
-out=$tmp/out$$.o
-$CC -c $dir/check-gas-asm.S -o $out
-res=$($OBJDUMP -r --section .data $out | fgrep 00004 | tr -s ' ' |cut -f3 -d' ')
-rm -f $out
-if [ $res != ".text" ]; then
-	echo buggy
-else
-	echo good
-fi
-exit 0
diff --git a/arch/ia64/scripts/check-gas-asm.S b/arch/ia64/scripts/check-gas-asm.S
deleted file mode 100644
index 010e1d2..0000000
--- a/arch/ia64/scripts/check-gas-asm.S
+++ /dev/null
@@ -1,2 +0,0 @@
-[1:]	nop 0
-	.xdata4 ".data", 0, 1b-.
diff --git a/arch/ia64/scripts/check-model.c b/arch/ia64/scripts/check-model.c
deleted file mode 100644
index e1d4e86..0000000
--- a/arch/ia64/scripts/check-model.c
+++ /dev/null
@@ -1 +0,0 @@
-int __attribute__ ((__model__ (__small__))) x;
diff --git a/arch/ia64/scripts/check-segrel.S b/arch/ia64/scripts/check-segrel.S
deleted file mode 100644
index 3be4e3d..0000000
--- a/arch/ia64/scripts/check-segrel.S
+++ /dev/null
@@ -1,4 +0,0 @@
-	.rodata
-	data4 @segrel(start)
-	.data
-start:
diff --git a/arch/ia64/scripts/check-segrel.lds b/arch/ia64/scripts/check-segrel.lds
deleted file mode 100644
index 85a0d54..0000000
--- a/arch/ia64/scripts/check-segrel.lds
+++ /dev/null
@@ -1,12 +0,0 @@
-SECTIONS {
-	. = SIZEOF_HEADERS;
-	.rodata : { *(.rodata) } :ro
-	.note : { *(.note*) }
-	. = 0xa0000;
-	.data : { *(.data) } :dat
-	/DISCARD/ : { *(*) }
-}
-PHDRS {
-  ro PT_LOAD FILEHDR PHDRS;
-  dat PT_LOAD;
-}
diff --git a/arch/ia64/scripts/check-serialize.S b/arch/ia64/scripts/check-serialize.S
deleted file mode 100644
index 0400c10..0000000
--- a/arch/ia64/scripts/check-serialize.S
+++ /dev/null
@@ -1,2 +0,0 @@
-	.serialize.data
-	.serialize.instruction
diff --git a/arch/ia64/scripts/check-text-align.S b/arch/ia64/scripts/check-text-align.S
deleted file mode 100644
index 03f586a..0000000
--- a/arch/ia64/scripts/check-text-align.S
+++ /dev/null
@@ -1,6 +0,0 @@
-	.proc foo
-	.prologue
-foo:	.save rp, r2
-	nop 0
-	.align 64
-	.endp foo
diff --git a/arch/ia64/scripts/toolchain-flags b/arch/ia64/scripts/toolchain-flags
deleted file mode 100755
index 3f0c2ad..0000000
--- a/arch/ia64/scripts/toolchain-flags
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/sh
-#
-# Check whether linker can handle cross-segment @segrel():
-#
-CPPFLAGS=""
-CC=$1
-OBJDUMP=$2
-READELF=$3
-dir=$(dirname $0)
-tmp=${TMPDIR:-/tmp}
-out=$tmp/out$$
-
-# Check whether cross-segment segment-relative relocs work fine.  We need
-# that for building the gate DSO:
-
-$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
-    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
-
-# Check whether .align inside a function works as expected.
-
-$CC -c $dir/check-text-align.S -o $out
-$READELF -u $out | fgrep -q 'prologue(rlen\x12)'
-res=$?
-rm -f $out
-if [ $res -eq 0 ]; then
-    CPPFLAGS="$CPPFLAGS -DHAVE_WORKING_TEXT_ALIGN"
-fi
-
-if ! $CC -c $dir/check-model.c -o $out 2>&1 | grep  __model__ | grep -q attrib
-then
-    CPPFLAGS="$CPPFLAGS -DHAVE_MODEL_SMALL_ATTRIBUTE"
-fi
-rm -f $out
-
-# Check whether assembler supports .serialize.{data,instruction} directive.
-
-$CC -c $dir/check-serialize.S -o $out 2>/dev/null
-res=$?
-rm -f $out
-if [ $res -eq 0 ]; then
-    CPPFLAGS="$CPPFLAGS -DHAVE_SERIALIZE_DIRECTIVE"
-fi
-
-echo $CPPFLAGS
diff --git a/arch/ia64/scripts/unwcheck.py b/arch/ia64/scripts/unwcheck.py
deleted file mode 100644
index 2bfd941..0000000
--- a/arch/ia64/scripts/unwcheck.py
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/python
-#
-# Usage: unwcheck.py FILE
-#
-# This script checks the unwind info of each function in file FILE
-# and verifies that the sum of the region-lengths matches the total
-# length of the function.
-#
-# Based on a shell/awk script originally written by Harish Patil,
-# which was converted to Perl by Matthew Chapman, which was converted
-# to Python by David Mosberger.
-#
-import os
-import re
-import sys
-
-if len(sys.argv) != 2:
-    print "Usage: %s FILE" % sys.argv[0]
-    sys.exit(2)
-
-readelf = os.getenv("READELF", "readelf")
-
-start_pattern = re.compile("<([^>]*)>: \[0x([0-9a-f]+)-0x([0-9a-f]+)\]")
-rlen_pattern  = re.compile(".*rlen=([0-9]+)")
-
-def check_func (func, slots, rlen_sum):
-    if slots != rlen_sum:
-        global num_errors
-        num_errors += 1
-        if not func: func = "[%#x-%#x]" % (start, end)
-        print "ERROR: %s: %lu slots, total region length = %lu" % (func, slots, rlen_sum)
-    return
-
-num_funcs = 0
-num_errors = 0
-func = False
-slots = 0
-rlen_sum = 0
-for line in os.popen("%s -u %s" % (readelf, sys.argv[1])):
-    m = start_pattern.match(line)
-    if m:
-        check_func(func, slots, rlen_sum)
-
-        func  = m.group(1)
-        start = long(m.group(2), 16)
-        end   = long(m.group(3), 16)
-        slots = 3 * (end - start) / 16
-        rlen_sum = 0L
-        num_funcs += 1
-    else:
-        m = rlen_pattern.match(line)
-        if m:
-            rlen_sum += long(m.group(1))
-check_func(func, slots, rlen_sum)
-
-if num_errors = 0:
-    print "No errors detected in %u functions." % num_funcs
-else:
-    if num_errors > 1:
-        err="errors"
-    else:
-        err="error"
-    print "%u %s detected in %u functions." % (num_errors, err, num_funcs)
-    sys.exit(1)
-- 
1.7.1



             reply	other threads:[~2010-10-04  2:20 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-04  2:20 Ben Hutchings [this message]
2010-10-04 18:52 ` [RFC][PATCH] [ia64] Raise minimum binutils version and remove Tony Luck
2010-10-10 21:00 ` Ben Hutchings

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1286158823.3916.227.camel@localhost \
    --to=ben@decadent.org.uk \
    --cc=linux-ia64@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.