[avr] Emit diagnostics if -f{pic,PIC,pie,PIE} or -shared is passed

Submitted by Senthil Kumar Selvaraj on Nov. 4, 2013, 1:15 p.m.

Details

Message ID 20131104131518.GA582@atmel.com
State New
Headers show

Commit Message

Senthil Kumar Selvaraj Nov. 4, 2013, 1:15 p.m.
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.

Comments

Joerg Wunsch Nov. 4, 2013, 5:23 p.m.
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.
Senthil Kumar Selvaraj Nov. 18, 2013, 10:21 a.m.
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 }}}}}"
Denis Chertykov Dec. 3, 2013, 2:03 p.m.
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.

Patch hide | download patch | download mbox

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 }}}}}"