Re: Convert legacy m68k options to .opt aliases

2011-04-21 Thread Joseph S. Myers
On Thu, 14 Apr 2011, Gunther Nikl wrote:

 However, the link spec seems to be harder.
 
   %{m68020-*|m68040|m68060:-fl libm020}
 
 Do I have to replace every m680x0 option with a matching mcpu= (maybe
 even together with a march=) option?

Whatever options you want to match that spec should be replaced by their 
current versions.  That means m68020-*|mcpu=68040|mcpu=68060 (the 
-m68020-* options haven't been changed into aliases, since they correspond 
to multiple options rather than being equivalent to a single other 
option).

-- 
Joseph S. Myers
jos...@codesourcery.com


Re: Convert legacy m68k options to .opt aliases

2011-04-14 Thread Gunther Nikl
Joseph S. Myers wrote:
 
 m68k-aout was obsoleted in 4.4 and removed in 4.5 - while some OSes
 with various odd object file formats are still supported, various
 newer features such as LTO may not work so well with them.

I am aware that generic m68k-aout as target was deprecated and is gone
now. Apparently that didn't affect my target. I know that eg LTO will
never be available for a.out object files.

 Is with your change really no way to test/pass the original options
 to assembler/linker?
 
 You could write specs that check for the -mcpu= options and translate
 them back to old-style options acceptable to your assembler and linker.

Yes, that would work and the assembler part is easier that I expected.
The following is inspired by something I noticed in the alpha port:

  %{march=*:-m%*} %{mcpu=*:-m%*}

However, the link spec seems to be harder.

  %{m68020-*|m68040|m68060:-fl libm020}

Do I have to replace every m680x0 option with a matching mcpu= (maybe
even together with a march=) option?

 You won't be able to use the generic m68k.h ASM_CPU_SPEC, so all the 
 complexity of supporting old assemblers falls on your port, but it should 
 be possible - you just can't pass through the options without translating 
 them.

The port doesn't use the generic ASM_SPECs. AFAIK the port never used
the generic definitions and I kept it that way because I felt more
comfortable using custom definitions.

So problem (almost) solved thanks to the versatile SPEC machinery.

Regards,
Gunther


Re: Convert legacy m68k options to .opt aliases

2011-04-07 Thread Gunther Nikl
On Wed, Apr 06, 2011 at 10:04:37PM +, Joseph S. Myers wrote:
 Similar to http://gcc.gnu.org/ml/gcc-patches/2011-04/msg00265.html,
 this patch converts legacy m68k options for non-ColdFire CPUs into
 aliases for the corresponding -mcpu= options.  (Note that -mcpu32 is

While I agree with the CF change, I am sceptical with the m68k case.

 an alias for -mcpu=68332 rather than -mcpu=cpu32, to match the old
 code in m68k_handle_option.)  This significantly simplifies the
 multilibs code in t-mlibs, since it no longer needs to handle those
 old-style options (and all cases where two -mcpu= options get the same
 multilib are already handled by the generic logic there rather than
 needing to be listed specially).  The requirement for binutils 2.17 or
 later (to support these options to the assembler) is documented.

I am using m68k-amigos which is not part of the official sources. Since
this target is only about m68k it was no problem to use old(er) binutils
versions. Especially if a target cares only about m68k I would like to
see the legacy m68k options retained.

Regards,
Gunther Nikl



Re: Convert legacy m68k options to .opt aliases

2011-04-07 Thread Joseph S. Myers
On Thu, 7 Apr 2011, Gunther Nikl wrote:

  an alias for -mcpu=68332 rather than -mcpu=cpu32, to match the old
  code in m68k_handle_option.)  This significantly simplifies the
  multilibs code in t-mlibs, since it no longer needs to handle those
  old-style options (and all cases where two -mcpu= options get the same
  multilib are already handled by the generic logic there rather than
  needing to be listed specially).  The requirement for binutils 2.17 or
  later (to support these options to the assembler) is documented.
 
 I am using m68k-amigos which is not part of the official sources. Since
 this target is only about m68k it was no problem to use old(er) binutils
 versions. Especially if a target cares only about m68k I would like to
 see the legacy m68k options retained.

I don't see out-of-tree targets as providing a relevant case for blocking 
cleanups, and in any case I think GCC should require a reasonably recent 
binutils (more recent than 2.17) on all targets except where it is 
specifically supporting a native system assembler or linker (even there, 
I don't think system assembler support is particularly important except 
where the system tools have features missing from GNU binutils).  The 
legacy options still exist - it's just that they'll be passed to the 
assembler in the canonical -mcpu= form, so you need an assembler 
supporting that form (which any GNU assembler from the past five years 
will do - and I don't think supporting a five-year disparity between GCC 
and binutils versions is productive).

-- 
Joseph S. Myers
jos...@codesourcery.com


Convert legacy m68k options to .opt aliases

2011-04-06 Thread Joseph S. Myers
Similar to http://gcc.gnu.org/ml/gcc-patches/2011-04/msg00265.html,
this patch converts legacy m68k options for non-ColdFire CPUs into
aliases for the corresponding -mcpu= options.  (Note that -mcpu32 is
an alias for -mcpu=68332 rather than -mcpu=cpu32, to match the old
code in m68k_handle_option.)  This significantly simplifies the
multilibs code in t-mlibs, since it no longer needs to handle those
old-style options (and all cases where two -mcpu= options get the same
multilib are already handled by the generic logic there rather than
needing to be listed specially).  The requirement for binutils 2.17 or
later (to support these options to the assembler) is documented.

Tested building cc1 and xgcc for cross to m68k-elf.  Will commit to
trunk in the absence of target maintainer objections.

2011-04-06  Joseph Myers  jos...@codesourcery.com

* config/m68k/m68k.c (m68k_handle_option): Don't handle
OPT_m68000, OPT_mc68000, OPT_m68010, OPT_m68020, OPT_mc68020,
OPT_m68030, OPT_m68040, OPT_m68060, OPT_m68302, OPT_m68332 and
OPT_mcpu32.
* config/m68k/m68k.h (OPTION_DEFAULT_SPECS, ASM_CPU_SPEC): Don't
handle -mc68000, -m68000, -m68302, -m68010, -mc68020, -m68020,
-m68030, -m68040, -m68060, -mcpu32 and -m68332.
* config/m68k/m68k.opt (m68000, m68010, m68020, m68030, m68040,
m68060, m68302, m68332, mc68000, mc68020, mcpu32): Use Alias.
* config/m68k/t-mlibs (CANONICALIZE_OPTIONS): Remove.
(MULTILIB_OPTIONS): Don't use $(CANONICALIZE_OPTIONS).
(MULTILIB_MATCHES): Map -march= options to corresponding -mcpu=
options.  Don't map other m68k options manually.  Don't handle
old-style options as canonical.
(MULTILIB_EXCEPTIONS): Don't use $(CANONICALIZE_OPTIONS).
* doc/install.texi (m68k-*-*): Document binutils version
requirement.

Index: gcc/doc/install.texi
===
--- gcc/doc/install.texi(revision 172035)
+++ gcc/doc/install.texi(working copy)
@@ -3773,6 +3773,8 @@ be a @option{-mcpu} argument or one of t
 @samp{m68000}, @samp{m68010}, @samp{m68020}, @samp{m68030},
 @samp{m68040}, @samp{m68060}, @samp{m68020-40} and @samp{m68020-60}.
 
+GCC requires at least binutils version 2.17 on these targets.
+
 @html
 hr /
 @end html
Index: gcc/config/m68k/t-mlibs
===
--- gcc/config/m68k/t-mlibs (revision 172035)
+++ gcc/config/m68k/t-mlibs (working copy)
@@ -45,15 +45,9 @@ ifeq ($(filter m$(M68K_MLIB_DEFAULT),$(M
 $(error Error default cpu '$(target_cpu_default)' is not in multilib set 
'$(M68K_MLIB_CPUS)')
 endif
 
-# Sed arguments that convert mcpu=* arguments into canonical forms.
-# We want to use the legacy m68* options instead of the new -mcpu=68*
-# options when compiling multilibs because the former are recognised
-# by older binutils.
-CANONICALIZE_OPTIONS = -e 's|mcpu=68|m68|g' -e 's|mcpu=cpu32|mcpu32|g'
-
 MULTILIB_DIRNAMES := $(filter-out m$(M68K_MLIB_DEFAULT),$(M68K_MLIB_CPUS))
 MULTILIB_OPTIONS := $(shell echo $(MULTILIB_DIRNAMES:m%=mcpu=%) \
- | sed -e 's| |/|g' $(CANONICALIZE_OPTIONS))
+ | sed -e 's| |/|g' )
 
 # Add subtarget specific options  dirs.
 MULTILIB_DIRNAMES += $(M68K_MLIB_DIRNAMES)
@@ -62,14 +56,13 @@ MULTILIB_OPTIONS += $(M68K_MLIB_OPTIONS)
 MULTILIB_MATCHES :=
 
 ifneq ($(M68K_ARCH),cf)
-# Map the new-style options to the legacy m68k ones.
-MULTILIB_MATCHES += m68000=mcpu?68000 m68000=march?68000 m68000=mc68000 \
-   m68000=m68302 \
-   m68020=mcpu?68020 m68020=march?68020 m68020=mc68020 \
-   m68030=mcpu?68030 m68030=march?68030 \
-   m68040=mcpu?68040 m68040=march?68040 \
-   m68060=mcpu?68060 m68060=march?68060 \
-   mcpu32=mcpu?cpu32 mcpu32=march?cpu32 mcpu32=m68332
+# Map -march=* options to the representative -mcpu=* option.
+MULTILIB_MATCHES += mcpu?68000=march?68000 \
+   mcpu?68020=march?68020 \
+   mcpu?68030=march?68030 \
+   mcpu?68040=march?68040 \
+   mcpu?68060=march?68060 \
+   mcpu?cpu32=march?cpu32
 endif
 
 ifneq ($(M68K_ARCH),m68k)
@@ -82,9 +75,7 @@ endif
 MULTILIB_MATCHES += \
   $(call M68K_AWK, \
 (CPU_NAME != MLIB) $(M68K_MLIB_CPU), \
-(match(MLIB, ^68) || MLIB == cpu32 \
- ? mMLIB=mcpu?CPU_NAME \
- : mcpu?MLIB=mcpu?CPU_NAME))
+(mcpu?MLIB=mcpu?CPU_NAME))
 
 MULTILIB_EXCEPTIONS :=
 
@@ -102,9 +93,5 @@ endif
 MULTILIB_EXCEPTIONS := \
$(patsubst mcpu=$(M68K_MLIB_DEFAULT)/%,%,$(MULTILIB_EXCEPTIONS))
 
-# Convert all options to canonical form.
-MULTILIB_EXCEPTIONS := $(shell echo $(MULTILIB_EXCEPTIONS) | \
-sed $(CANONICALIZE_OPTIONS))
-
 LIBGCC = stmp-multilib
 INSTALL_LIBGCC = install-multilib
Index: