Message ID | 20131104131518.GA582@atmel.com |
---|---|
State | New |
Headers | show |
As Senthil Kumar Selvaraj wrote:
> If ok, could someone commit please? I don't have commit access.
I don't have commit access either, but the changes look reasonable to me.
Ping! Regards Senthil On Mon, Nov 04, 2013 at 06:45:19PM +0530, Senthil Kumar Selvaraj wrote: > The AVR backend does not generate position independent code, yet it > happily accepts -fpic, -fPIC, -fpie and -fPIE. The generated code > doesn't change at all. Also, it accepts the -shared option to generate a > shared library, without really doing anything with it. > > This causes one of the regression tests > (gcc.dg/lto/pr54709 c_lto_pr54709_0.o-c_lto_pr54709_1.o link) to fail with > an 'undefined reference to main' error, when the test is trying to build > a shared object. > > The attached patch generates a warning if one of the -f{pic,PIC,pie,PIE} > options is provided, and an error if -shared is provided ( > config/mep/mep.c and config/s390/tpf.h already do something very similar). > > Regression tested with no new failures.Tests which exercise PIC now report as > unsupported. > > If ok, could someone commit please? I don't have commit access. > > Regards > Senthil > > gcc/ChangeLog > 2013-11-04 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com> > > * config/avr/avr.c (avr_option_override): Warn if asked to generate > position independent code. > * config/avr/avr.h: Modify LINK_SPEC to reject -shared. > > > diff --git gcc/config/avr/avr.c gcc/config/avr/avr.c > index e7e1c2f..cf4b8ca 100644 > --- gcc/config/avr/avr.c > +++ gcc/config/avr/avr.c > @@ -310,6 +310,15 @@ avr_option_override (void) > flag_omit_frame_pointer = 0; > } > > + if (flag_pic == 1) > + warning (OPT_fpic, "-fpic is not supported"); > + if (flag_pic == 2) > + warning (OPT_fPIC, "-fPIC is not supported"); > + if (flag_pie == 1) > + warning (OPT_fpie, "-fpie is not supported"); > + if (flag_pie == 2) > + warning (OPT_fPIE, "-fPIE is not supported"); > + > avr_current_device = &avr_mcu_types[avr_mcu_index]; > avr_current_arch = &avr_arch_types[avr_current_device->arch]; > > diff --git gcc/config/avr/avr.h gcc/config/avr/avr.h > index f223a61..1eff5be 100644 > --- gcc/config/avr/avr.h > +++ gcc/config/avr/avr.h > @@ -522,7 +522,8 @@ extern const char *avr_device_to_sp8 (int argc, const char **argv); > mmcu=at90can64*|\ > mmcu=at90usb64*:--pmem-wrap-around=64k}}}\ > %:device_to_ld(%{mmcu=*:%*})\ > -%:device_to_data_start(%{mmcu=*:%*})" > +%:device_to_data_start(%{mmcu=*:%*})\ > +%{shared:%eshared is not supported}" > > #define LIB_SPEC \ > "%{!mmcu=at90s1*:%{!mmcu=attiny11:%{!mmcu=attiny12:%{!mmcu=attiny15:%{!mmcu=attiny28: -lc }}}}}"
2013/11/18 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>: > Ping! > > Regards > Senthil > > On Mon, Nov 04, 2013 at 06:45:19PM +0530, Senthil Kumar Selvaraj wrote: >> The AVR backend does not generate position independent code, yet it >> happily accepts -fpic, -fPIC, -fpie and -fPIE. The generated code >> doesn't change at all. Also, it accepts the -shared option to generate a >> shared library, without really doing anything with it. >> >> This causes one of the regression tests >> (gcc.dg/lto/pr54709 c_lto_pr54709_0.o-c_lto_pr54709_1.o link) to fail with >> an 'undefined reference to main' error, when the test is trying to build >> a shared object. >> >> The attached patch generates a warning if one of the -f{pic,PIC,pie,PIE} >> options is provided, and an error if -shared is provided ( >> config/mep/mep.c and config/s390/tpf.h already do something very similar). >> >> Regression tested with no new failures.Tests which exercise PIC now report as >> unsupported. >> >> If ok, could someone commit please? I don't have commit access. >> >> Regards >> Senthil >> >> gcc/ChangeLog >> 2013-11-04 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com> >> >> * config/avr/avr.c (avr_option_override): Warn if asked to generate >> position independent code. >> * config/avr/avr.h: Modify LINK_SPEC to reject -shared. >> Sorry for delay. (I was on vacation) Committed. Denis.
diff --git gcc/config/avr/avr.c gcc/config/avr/avr.c index e7e1c2f..cf4b8ca 100644 --- gcc/config/avr/avr.c +++ gcc/config/avr/avr.c @@ -310,6 +310,15 @@ avr_option_override (void) flag_omit_frame_pointer = 0; } + if (flag_pic == 1) + warning (OPT_fpic, "-fpic is not supported"); + if (flag_pic == 2) + warning (OPT_fPIC, "-fPIC is not supported"); + if (flag_pie == 1) + warning (OPT_fpie, "-fpie is not supported"); + if (flag_pie == 2) + warning (OPT_fPIE, "-fPIE is not supported"); + avr_current_device = &avr_mcu_types[avr_mcu_index]; avr_current_arch = &avr_arch_types[avr_current_device->arch]; diff --git gcc/config/avr/avr.h gcc/config/avr/avr.h index f223a61..1eff5be 100644 --- gcc/config/avr/avr.h +++ gcc/config/avr/avr.h @@ -522,7 +522,8 @@ extern const char *avr_device_to_sp8 (int argc, const char **argv); mmcu=at90can64*|\ mmcu=at90usb64*:--pmem-wrap-around=64k}}}\ %:device_to_ld(%{mmcu=*:%*})\ -%:device_to_data_start(%{mmcu=*:%*})" +%:device_to_data_start(%{mmcu=*:%*})\ +%{shared:%eshared is not supported}" #define LIB_SPEC \ "%{!mmcu=at90s1*:%{!mmcu=attiny11:%{!mmcu=attiny12:%{!mmcu=attiny15:%{!mmcu=attiny28: -lc }}}}}"