Bug 52737 - [avr]: -mtiny-stack shall not influence multilib selection
Summary: [avr]: -mtiny-stack shall not influence multilib selection
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: target (show other bugs)
Version: 4.7.0
: P5 normal
Target Milestone: 4.7.1
Assignee: Georg-Johann Lay
URL:
Keywords:
Depends on:
Blocks: 51002 51345
  Show dependency treegraph
 
Reported: 2012-03-27 11:27 UTC by Georg-Johann Lay
Modified: 2012-03-28 10:27 UTC (History)
1 user (show)

See Also:
Host:
Target: avr
Build:
Known to work:
Known to fail: 4.7.0
Last reconfirmed: 2012-03-27 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Georg-Johann Lay 2012-03-27 11:27:08 UTC
The current (4.7.0) behaviour is:

-mtiny-stack acts as multilib-option for 16-bit SP targets in avr2 and avr25,
i.e. with that switch will trigger multi-lib from ./tiny-stack resp.
./avr25/tiny-stack

The problem is that the tiny-stack multilibs mix 16-bit SP targets that are
treated as 8-bit SP, and targets with 8-bit SP.

The currect implementation assumes SP.H = 0 in tiny-stack mlibs in order to
properly initialize the frame pointer, e.g. in __prologue_saves.

This is no good for 16-bit SP targets.

Solution:

Restore the behaviour for the 16-bit SP targets as was, i.e. -mtiny-stack does
not affect multilib selection for these targets, but if specified on the
command line, the resulting code will only change SP.L and assume SP.H never
changes.

For the 8-bit SP targets, -mtiny-stack should remain as in 4.7.0, i.e. used
internally to trigger tiny-stack multilibs. Specifying -mtiny-stack on the
command line will be redundant for these targets and have no effect.
Comment 1 Georg-Johann Lay 2012-03-28 08:31:46 UTC
Author: gjl
Date: Wed Mar 28 08:31:26 2012
New Revision: 185907

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=185907
Log:
	PR target/52737
	* contrib/gcc_update (files_and_dependencies):
	Remove gcc/config/avr/t-multilib from touch data.

gcc/
	PR target/52737
	* config.gcc (tm_file): Remove avr/multilib.h.

	* doc/invoke.texi (AVR Options): Adjust
	documentation of -mtiny-stack.

	* config/avr/genmultilib.awk: Remove code to generate multilib.h.
	(BEGIN): Use -msp8 as multilib option instead of -mtiny-stack.
	* config/avr/t-avr: Remove generation of multilib.h.
	* config/avr/t-multilib: Regenerate.
	* config/avr/multilib.h: Remove.
	* config/avr/avr.opt (-msp8): New option.
	(avr_sp8): New variable.
	* config/avr/driver-avr.c (avr_device_to_sp8): New function.
	* config/avr/avr.h (AVR_HAVE_SPH): New define.
	(AVR_HAVE_8BIT_SP): Also set by avr_sp8 i.e. -msp8.
	(avr_device_to_sp8): New prototype.
	(EXTRA_SPEC_FUNCTIONS): Add { "device_to_sp8", avr_device_to_sp8 }
	(DRIVER_SELF_SPECS): New define.
	* config/avr/avr-c.c (avr_cpu_cpp_builtins): New built-in defines:
	__AVR_SP8__, __AVR_HAVE_SPH__.
	* config/avr/avr.c (output_movhi): Use AVR_HAVE_SPH instead of
	AVR_HAVE_8BIT_SP to decide if SP_H is present.
	(avr_file_start): Ditto.
	
libgcc/
	PR target/52737
	* config/avr/lib1funcs.S: Use __AVR_HAVE_SPH__ for SP_H checks
	instead of __AVR_HAVE_8BIT_SP__.


Removed:
    trunk/gcc/config/avr/multilib.h
Modified:
    trunk/ChangeLog
    trunk/contrib/gcc_update
    trunk/gcc/ChangeLog
    trunk/gcc/config.gcc
    trunk/gcc/config/avr/avr-c.c
    trunk/gcc/config/avr/avr.c
    trunk/gcc/config/avr/avr.h
    trunk/gcc/config/avr/avr.opt
    trunk/gcc/config/avr/driver-avr.c
    trunk/gcc/config/avr/genmultilib.awk
    trunk/gcc/config/avr/t-avr
    trunk/gcc/config/avr/t-multilib
    trunk/gcc/doc/invoke.texi
    trunk/libgcc/ChangeLog
    trunk/libgcc/config/avr/lib1funcs.S
Comment 2 Georg-Johann Lay 2012-03-28 09:04:49 UTC
Author: gjl
Date: Wed Mar 28 09:04:11 2012
New Revision: 185908

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=185908
Log:
	Backport from 2012-03-28 mainline r185907.

	PR target/52737
	* contrib/gcc_update (files_and_dependencies):
	Remove gcc/config/avr/t-multilib from touch data.

gcc/
	Backport from 2012-03-28 mainline r185907.

	PR target/52737
	* config.gcc (tm_file): Remove avr/multilib.h.

	* doc/invoke.texi (AVR Options): Adjust
	documentation of -mtiny-stack.

	* config/avr/genmultilib.awk: Remove code to generate multilib.h.
	(BEGIN): Use -msp8 as multilib option instead of -mtiny-stack.
	* config/avr/t-avr: Remove generation of multilib.h.
	* config/avr/t-multilib: Regenerate.
	* config/avr/multilib.h: Remove.
	* config/avr/avr.opt (-msp8): New option.
	(avr_sp8): New variable.
	* config/avr/driver-avr.c (avr_device_to_sp8): New function.
	* config/avr/avr.h (AVR_HAVE_SPH): New define.
	(AVR_HAVE_8BIT_SP): Also set by avr_sp8 i.e. -msp8.
	(avr_device_to_sp8): New prototype.
	(EXTRA_SPEC_FUNCTIONS): Add { "device_to_sp8", avr_device_to_sp8 }
	(DRIVER_SELF_SPECS): New define.
	* config/avr/avr-c.c (avr_cpu_cpp_builtins): New built-in defines:
	__AVR_SP8__, __AVR_HAVE_SPH__.
	* config/avr/avr.c (output_movhi): Use AVR_HAVE_SPH instead of
	AVR_HAVE_8BIT_SP to decide if SP_H is present.
	(avr_file_start): Ditto.
	
libgcc/
	Backport from 2012-03-28 mainline r185907.

	PR target/52737
	* config/avr/lib1funcs.S: Use __AVR_HAVE_SPH__ for SP_H checks
	instead of __AVR_HAVE_8BIT_SP__.


Removed:
    branches/gcc-4_7-branch/gcc/config/avr/multilib.h
Modified:
    branches/gcc-4_7-branch/ChangeLog
    branches/gcc-4_7-branch/contrib/gcc_update
    branches/gcc-4_7-branch/gcc/ChangeLog
    branches/gcc-4_7-branch/gcc/config.gcc
    branches/gcc-4_7-branch/gcc/config/avr/avr-c.c
    branches/gcc-4_7-branch/gcc/config/avr/avr.c
    branches/gcc-4_7-branch/gcc/config/avr/avr.h
    branches/gcc-4_7-branch/gcc/config/avr/avr.opt
    branches/gcc-4_7-branch/gcc/config/avr/driver-avr.c
    branches/gcc-4_7-branch/gcc/config/avr/genmultilib.awk
    branches/gcc-4_7-branch/gcc/config/avr/t-avr
    branches/gcc-4_7-branch/gcc/config/avr/t-multilib
    branches/gcc-4_7-branch/gcc/doc/invoke.texi
    branches/gcc-4_7-branch/libgcc/ChangeLog
    branches/gcc-4_7-branch/libgcc/config/avr/lib1funcs.S
Comment 3 Georg-Johann Lay 2012-03-28 10:27:36 UTC
Fixed in 4.7.1