[avr] Propagate -mrelax gcc driver flag to assembler

Message ID 20140515075503.GA30458@atmel.com
State New
Headers show

Commit Message

Senthil Kumar Selvaraj May 15, 2014, 7:55 a.m.
On Wed, May 14, 2014 at 12:56:54PM +0200, Rainer Orth wrote:
> Georg-Johann Lay <avr@gjlay.de> writes:
> 
> > Or what about simply that, which works for me:
> >
> >
> > Index: config/avr/avr.h
> > ===================================================================
> > --- config/avr/avr.h    (revision 210276)
> > +++ config/avr/avr.h    (working copy)
> > @@ -512,7 +512,11 @@ extern const char *avr_device_to_sp8 (in
> >      %{!fenforce-eh-specs:-fno-enforce-eh-specs} \
> >      %{!fexceptions:-fno-exceptions}"
> >
> > +#ifdef HAVE_AS_AVR_LINK_RELAX_OPTION
> > +#define ASM_SPEC "%:device_to_as(%{mmcu=*:%*}) %{mrelax:-mlink-relax} "
> > +#else
> >  #define ASM_SPEC "%:device_to_as(%{mmcu=*:%*}) "
> > +#endif
> >
> >  #define LINK_SPEC "\
> >  %{mrelax:--relax\
> 
> Better yet something like
> 
> #ifdef HAVE_AS_AVR_LINK_RELAX_OPTION
> #define LINK_RELAX_SPEC "%{mrelax:-mlink-relax} "
> #else
> #define LINK_RELAX_SPEC ""
> #endif
> 
> #define ASM_SPEC "%:device_to_as(%{mmcu=*:%*}) " LINK_RELAX_SPEC
> 

Does this look ok? I don't have commit access, so could someone commit
this please?

Regards
Senthil

2014-05-15  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>

	* config/avr/avr.h: Pass on mlink-relax to assembler.
	* configure.ac: Test for mlink-relax assembler support.
	* config.in: Regenerate.
	* configure: Likewise.

Comments

Georg-Johann Lay May 16, 2014, 10:02 a.m. | #1
Am 05/15/2014 09:55 AM, schrieb Senthil Kumar Selvaraj:
> On Wed, May 14, 2014 at 12:56:54PM +0200, Rainer Orth wrote:
>> Georg-Johann Lay <avr@gjlay.de> writes:
>>
>>> Or what about simply that, which works for me:
>>>
>>>
>>> Index: config/avr/avr.h
>>> ===================================================================
>>> --- config/avr/avr.h    (revision 210276)
>>> +++ config/avr/avr.h    (working copy)
>>> @@ -512,7 +512,11 @@ extern const char *avr_device_to_sp8 (in
>>>       %{!fenforce-eh-specs:-fno-enforce-eh-specs} \
>>>       %{!fexceptions:-fno-exceptions}"
>>>
>>> +#ifdef HAVE_AS_AVR_LINK_RELAX_OPTION
>>> +#define ASM_SPEC "%:device_to_as(%{mmcu=*:%*}) %{mrelax:-mlink-relax} "
>>> +#else
>>>   #define ASM_SPEC "%:device_to_as(%{mmcu=*:%*}) "
>>> +#endif
>>>
>>>   #define LINK_SPEC "\
>>>   %{mrelax:--relax\
>>
>> Better yet something like
>>
>> #ifdef HAVE_AS_AVR_LINK_RELAX_OPTION
>> #define LINK_RELAX_SPEC "%{mrelax:-mlink-relax} "
>> #else
>> #define LINK_RELAX_SPEC ""
>> #endif
>>
>> #define ASM_SPEC "%:device_to_as(%{mmcu=*:%*}) " LINK_RELAX_SPEC
>>
>
> Does this look ok? I don't have commit access, so could someone commit
> this please?

Hi, looks fine to me.  Thanks

Usually, changelogs are more descriptive w.r.t. to what objects are touched like:

	* config/avr/avr.h (LINK_RELAX_SPEC): Pass -mlink-relax to the
	assembler, depending on HAVE_AS_AVR_LINK_RELAX_OPTION.
	(ASM_SPEC): Use it.
	* configure.ac (HAVE_AVR_AS_LINK_RELAX_OPTION) [avr]: New define if
	assembler supports -mlink-relax.
	* config.in: Regenerate.
	* configure: Likewise.

>
> Regards
> Senthil
>
> 2014-05-15  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>
>
> 	* config/avr/avr.h: Pass on mlink-relax to assembler.
> 	* configure.ac: Test for mlink-relax assembler support.
> 	* config.in: Regenerate.
> 	* configure: Likewise.
>
> diff --git gcc/config.in gcc/config.in
> index c0ba36e..1738301 100644
> --- gcc/config.in
> +++ gcc/config.in
> @@ -575,6 +575,12 @@
>   #endif
>
>
> +/* Define if your assembler supports -mlink-relax option. */
> +#ifndef USED_FOR_TARGET
> +#undef HAVE_AVR_AS_LINK_RELAX_OPTION
> +#endif
> +
> +
>   /* Define to 1 if you have the `clearerr_unlocked' function. */
>   #ifndef USED_FOR_TARGET
>   #undef HAVE_CLEARERR_UNLOCKED
> diff --git gcc/config/avr/avr.h gcc/config/avr/avr.h
> index 9d34983..c59c54d 100644
> --- gcc/config/avr/avr.h
> +++ gcc/config/avr/avr.h
> @@ -512,8 +512,14 @@ extern const char *avr_device_to_sp8 (int argc, const char **argv);
>       %{!fenforce-eh-specs:-fno-enforce-eh-specs} \
>       %{!fexceptions:-fno-exceptions}"
>
> -#define ASM_SPEC "%:device_to_as(%{mmcu=*:%*}) "
> -
> +#ifdef HAVE_AVR_AS_LINK_RELAX_OPTION
> +#define ASM_RELAX_SPEC "%{mrelax:-mlink-relax}"
> +#else
> +#define ASM_RELAX_SPEC ""
> +#endif
> +
> +#define ASM_SPEC "%:device_to_as(%{mmcu=*:%*}) " ASM_RELAX_SPEC
> +
>   #define LINK_SPEC "\
>   %{mrelax:--relax\
>            %{mpmem-wrap-around:%{mmcu=at90usb8*:--pmem-wrap-around=8k}\
> diff --git gcc/configure gcc/configure
> index f4db0a0..2812cdb 100755
> --- gcc/configure
> +++ gcc/configure
> @@ -24014,6 +24014,39 @@ $as_echo "#define HAVE_AS_JSRDIRECT_RELOCS 1" >>confdefs.h
>   fi
>       ;;
>
> +  avr-*-*)
> +    { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for -mlink-relax option" >&5
> +$as_echo_n "checking assembler for -mlink-relax option... " >&6; }
> +if test "${gcc_cv_as_avr_relax+set}" = set; then :
> +  $as_echo_n "(cached) " >&6
> +else
> +  gcc_cv_as_avr_relax=no
> +  if test x$gcc_cv_as != x; then
> +    $as_echo '.text' > conftest.s
> +    if { ac_try='$gcc_cv_as $gcc_cv_as_flags -mlink-relax -o conftest.o conftest.s >&5'
> +  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
> +  (eval $ac_try) 2>&5
> +  ac_status=$?
> +  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
> +  test $ac_status = 0; }; }
> +    then
> +	gcc_cv_as_avr_relax=yes
> +    else
> +      echo "configure: failed program was" >&5
> +      cat conftest.s >&5
> +    fi
> +    rm -f conftest.o conftest.s
> +  fi
> +fi
> +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_avr_relax" >&5
> +$as_echo "$gcc_cv_as_avr_relax" >&6; }
> +if test $gcc_cv_as_avr_relax = yes; then
> +
> +$as_echo "#define HAVE_AVR_AS_LINK_RELAX_OPTION 1" >>confdefs.h
> +
> +fi
> +  ;;
> +
>     cris-*-*)
>       { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for -no-mul-bug-abort option" >&5
>   $as_echo_n "checking assembler for -no-mul-bug-abort option... " >&6; }
> diff --git gcc/configure.ac gcc/configure.ac
> index 8f17dfb..49a1f3d 100644
> --- gcc/configure.ac
> +++ gcc/configure.ac
> @@ -3510,6 +3510,13 @@ case "$target" in
>     [Define if your assembler supports the lituse_jsrdirect relocation.])])
>       ;;
>
> +  avr-*-*)
> +    gcc_GAS_CHECK_FEATURE([-mlink-relax option], gcc_cv_as_avr_relax,,
> +      [-mlink-relax], [.text],,
> +      [AC_DEFINE(HAVE_AVR_AS_LINK_RELAX_OPTION, 1,
> +		[Define if your assembler supports -mlink-relax option.])])
> +  ;;
> +
>     cris-*-*)
>       gcc_GAS_CHECK_FEATURE([-no-mul-bug-abort option],
>         gcc_cv_as_cris_no_mul_bug,[2,15,91],
>
Denis Chertykov May 19, 2014, 4:36 a.m. | #2
2014-05-16 14:02 GMT+04:00 Georg-Johann Lay <avr@gjlay.de>:
> Am 05/15/2014 09:55 AM, schrieb Senthil Kumar Selvaraj:
>
>> On Wed, May 14, 2014 at 12:56:54PM +0200, Rainer Orth wrote:
>>>
>>> Georg-Johann Lay <avr@gjlay.de> writes:
>>>
>>>> Or what about simply that, which works for me:
>>>>
>>>>
>>>> Index: config/avr/avr.h
>>>> ===================================================================
>>>> --- config/avr/avr.h    (revision 210276)
>>>> +++ config/avr/avr.h    (working copy)
>>>> @@ -512,7 +512,11 @@ extern const char *avr_device_to_sp8 (in
>>>>       %{!fenforce-eh-specs:-fno-enforce-eh-specs} \
>>>>       %{!fexceptions:-fno-exceptions}"
>>>>
>>>> +#ifdef HAVE_AS_AVR_LINK_RELAX_OPTION
>>>> +#define ASM_SPEC "%:device_to_as(%{mmcu=*:%*}) %{mrelax:-mlink-relax} "
>>>> +#else
>>>>   #define ASM_SPEC "%:device_to_as(%{mmcu=*:%*}) "
>>>> +#endif
>>>>
>>>>   #define LINK_SPEC "\
>>>>   %{mrelax:--relax\
>>>
>>>
>>> Better yet something like
>>>
>>> #ifdef HAVE_AS_AVR_LINK_RELAX_OPTION
>>> #define LINK_RELAX_SPEC "%{mrelax:-mlink-relax} "
>>> #else
>>> #define LINK_RELAX_SPEC ""
>>> #endif
>>>
>>> #define ASM_SPEC "%:device_to_as(%{mmcu=*:%*}) " LINK_RELAX_SPEC
>>>
>>
>> Does this look ok? I don't have commit access, so could someone commit
>> this please?
>
>
> Hi, looks fine to me.  Thanks


I'm on vacation until the 24-may.

Denis.
Senthil Kumar Selvaraj May 19, 2014, 4:55 a.m. | #3
On Fri, May 16, 2014 at 12:02:12PM +0200, Georg-Johann Lay wrote:
> Am 05/15/2014 09:55 AM, schrieb Senthil Kumar Selvaraj:
> >On Wed, May 14, 2014 at 12:56:54PM +0200, Rainer Orth wrote:
> >>Georg-Johann Lay <avr@gjlay.de> writes:
> >>
> >>>Or what about simply that, which works for me:
> >>>
> >>>
> >>>Index: config/avr/avr.h
> >>>===================================================================
> >>>--- config/avr/avr.h    (revision 210276)
> >>>+++ config/avr/avr.h    (working copy)
> >>>@@ -512,7 +512,11 @@ extern const char *avr_device_to_sp8 (in
> >>>      %{!fenforce-eh-specs:-fno-enforce-eh-specs} \
> >>>      %{!fexceptions:-fno-exceptions}"
> >>>
> >>>+#ifdef HAVE_AS_AVR_LINK_RELAX_OPTION
> >>>+#define ASM_SPEC "%:device_to_as(%{mmcu=*:%*}) %{mrelax:-mlink-relax} "
> >>>+#else
> >>>  #define ASM_SPEC "%:device_to_as(%{mmcu=*:%*}) "
> >>>+#endif
> >>>
> >>>  #define LINK_SPEC "\
> >>>  %{mrelax:--relax\
> >>
> >>Better yet something like
> >>
> >>#ifdef HAVE_AS_AVR_LINK_RELAX_OPTION
> >>#define LINK_RELAX_SPEC "%{mrelax:-mlink-relax} "
> >>#else
> >>#define LINK_RELAX_SPEC ""
> >>#endif
> >>
> >>#define ASM_SPEC "%:device_to_as(%{mmcu=*:%*}) " LINK_RELAX_SPEC
> >>
> >
> >Does this look ok? I don't have commit access, so could someone commit
> >this please?
> 
> Hi, looks fine to me.  Thanks
> 
> Usually, changelogs are more descriptive w.r.t. to what objects are touched like:

Ah ok. Will keep that in mind, thanks.

Regards
Senthil
> 
> 	* config/avr/avr.h (LINK_RELAX_SPEC): Pass -mlink-relax to the
> 	assembler, depending on HAVE_AS_AVR_LINK_RELAX_OPTION.
> 	(ASM_SPEC): Use it.
> 	* configure.ac (HAVE_AVR_AS_LINK_RELAX_OPTION) [avr]: New define if
> 	assembler supports -mlink-relax.
> 	* config.in: Regenerate.
> 	* configure: Likewise.
> 
> >
> >Regards
> >Senthil
> >
> >2014-05-15  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>
> >
> >	* config/avr/avr.h: Pass on mlink-relax to assembler.
> >	* configure.ac: Test for mlink-relax assembler support.
> >	* config.in: Regenerate.
> >	* configure: Likewise.
> >
> >diff --git gcc/config.in gcc/config.in
> >index c0ba36e..1738301 100644
> >--- gcc/config.in
> >+++ gcc/config.in
> >@@ -575,6 +575,12 @@
> >  #endif
> >
> >
> >+/* Define if your assembler supports -mlink-relax option. */
> >+#ifndef USED_FOR_TARGET
> >+#undef HAVE_AVR_AS_LINK_RELAX_OPTION
> >+#endif
> >+
> >+
> >  /* Define to 1 if you have the `clearerr_unlocked' function. */
> >  #ifndef USED_FOR_TARGET
> >  #undef HAVE_CLEARERR_UNLOCKED
> >diff --git gcc/config/avr/avr.h gcc/config/avr/avr.h
> >index 9d34983..c59c54d 100644
> >--- gcc/config/avr/avr.h
> >+++ gcc/config/avr/avr.h
> >@@ -512,8 +512,14 @@ extern const char *avr_device_to_sp8 (int argc, const char **argv);
> >      %{!fenforce-eh-specs:-fno-enforce-eh-specs} \
> >      %{!fexceptions:-fno-exceptions}"
> >
> >-#define ASM_SPEC "%:device_to_as(%{mmcu=*:%*}) "
> >-
> >+#ifdef HAVE_AVR_AS_LINK_RELAX_OPTION
> >+#define ASM_RELAX_SPEC "%{mrelax:-mlink-relax}"
> >+#else
> >+#define ASM_RELAX_SPEC ""
> >+#endif
> >+
> >+#define ASM_SPEC "%:device_to_as(%{mmcu=*:%*}) " ASM_RELAX_SPEC
> >+
> >  #define LINK_SPEC "\
> >  %{mrelax:--relax\
> >           %{mpmem-wrap-around:%{mmcu=at90usb8*:--pmem-wrap-around=8k}\
> >diff --git gcc/configure gcc/configure
> >index f4db0a0..2812cdb 100755
> >--- gcc/configure
> >+++ gcc/configure
> >@@ -24014,6 +24014,39 @@ $as_echo "#define HAVE_AS_JSRDIRECT_RELOCS 1" >>confdefs.h
> >  fi
> >      ;;
> >
> >+  avr-*-*)
> >+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for -mlink-relax option" >&5
> >+$as_echo_n "checking assembler for -mlink-relax option... " >&6; }
> >+if test "${gcc_cv_as_avr_relax+set}" = set; then :
> >+  $as_echo_n "(cached) " >&6
> >+else
> >+  gcc_cv_as_avr_relax=no
> >+  if test x$gcc_cv_as != x; then
> >+    $as_echo '.text' > conftest.s
> >+    if { ac_try='$gcc_cv_as $gcc_cv_as_flags -mlink-relax -o conftest.o conftest.s >&5'
> >+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
> >+  (eval $ac_try) 2>&5
> >+  ac_status=$?
> >+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
> >+  test $ac_status = 0; }; }
> >+    then
> >+	gcc_cv_as_avr_relax=yes
> >+    else
> >+      echo "configure: failed program was" >&5
> >+      cat conftest.s >&5
> >+    fi
> >+    rm -f conftest.o conftest.s
> >+  fi
> >+fi
> >+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_avr_relax" >&5
> >+$as_echo "$gcc_cv_as_avr_relax" >&6; }
> >+if test $gcc_cv_as_avr_relax = yes; then
> >+
> >+$as_echo "#define HAVE_AVR_AS_LINK_RELAX_OPTION 1" >>confdefs.h
> >+
> >+fi
> >+  ;;
> >+
> >    cris-*-*)
> >      { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for -no-mul-bug-abort option" >&5
> >  $as_echo_n "checking assembler for -no-mul-bug-abort option... " >&6; }
> >diff --git gcc/configure.ac gcc/configure.ac
> >index 8f17dfb..49a1f3d 100644
> >--- gcc/configure.ac
> >+++ gcc/configure.ac
> >@@ -3510,6 +3510,13 @@ case "$target" in
> >    [Define if your assembler supports the lituse_jsrdirect relocation.])])
> >      ;;
> >
> >+  avr-*-*)
> >+    gcc_GAS_CHECK_FEATURE([-mlink-relax option], gcc_cv_as_avr_relax,,
> >+      [-mlink-relax], [.text],,
> >+      [AC_DEFINE(HAVE_AVR_AS_LINK_RELAX_OPTION, 1,
> >+		[Define if your assembler supports -mlink-relax option.])])
> >+  ;;
> >+
> >    cris-*-*)
> >      gcc_GAS_CHECK_FEATURE([-no-mul-bug-abort option],
> >        gcc_cv_as_cris_no_mul_bug,[2,15,91],
> >
>

Patch

diff --git gcc/config.in gcc/config.in
index c0ba36e..1738301 100644
--- gcc/config.in
+++ gcc/config.in
@@ -575,6 +575,12 @@ 
 #endif
 
 
+/* Define if your assembler supports -mlink-relax option. */
+#ifndef USED_FOR_TARGET
+#undef HAVE_AVR_AS_LINK_RELAX_OPTION
+#endif
+
+
 /* Define to 1 if you have the `clearerr_unlocked' function. */
 #ifndef USED_FOR_TARGET
 #undef HAVE_CLEARERR_UNLOCKED
diff --git gcc/config/avr/avr.h gcc/config/avr/avr.h
index 9d34983..c59c54d 100644
--- gcc/config/avr/avr.h
+++ gcc/config/avr/avr.h
@@ -512,8 +512,14 @@  extern const char *avr_device_to_sp8 (int argc, const char **argv);
     %{!fenforce-eh-specs:-fno-enforce-eh-specs} \
     %{!fexceptions:-fno-exceptions}"
 
-#define ASM_SPEC "%:device_to_as(%{mmcu=*:%*}) "
-  
+#ifdef HAVE_AVR_AS_LINK_RELAX_OPTION
+#define ASM_RELAX_SPEC "%{mrelax:-mlink-relax}"
+#else
+#define ASM_RELAX_SPEC ""
+#endif
+
+#define ASM_SPEC "%:device_to_as(%{mmcu=*:%*}) " ASM_RELAX_SPEC 
+
 #define LINK_SPEC "\
 %{mrelax:--relax\
          %{mpmem-wrap-around:%{mmcu=at90usb8*:--pmem-wrap-around=8k}\
diff --git gcc/configure gcc/configure
index f4db0a0..2812cdb 100755
--- gcc/configure
+++ gcc/configure
@@ -24014,6 +24014,39 @@  $as_echo "#define HAVE_AS_JSRDIRECT_RELOCS 1" >>confdefs.h
 fi
     ;;
 
+  avr-*-*)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for -mlink-relax option" >&5
+$as_echo_n "checking assembler for -mlink-relax option... " >&6; }
+if test "${gcc_cv_as_avr_relax+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  gcc_cv_as_avr_relax=no
+  if test x$gcc_cv_as != x; then
+    $as_echo '.text' > conftest.s
+    if { ac_try='$gcc_cv_as $gcc_cv_as_flags -mlink-relax -o conftest.o conftest.s >&5'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }
+    then
+	gcc_cv_as_avr_relax=yes
+    else
+      echo "configure: failed program was" >&5
+      cat conftest.s >&5
+    fi
+    rm -f conftest.o conftest.s
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_avr_relax" >&5
+$as_echo "$gcc_cv_as_avr_relax" >&6; }
+if test $gcc_cv_as_avr_relax = yes; then
+
+$as_echo "#define HAVE_AVR_AS_LINK_RELAX_OPTION 1" >>confdefs.h
+
+fi
+  ;;
+
   cris-*-*)
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for -no-mul-bug-abort option" >&5
 $as_echo_n "checking assembler for -no-mul-bug-abort option... " >&6; }
diff --git gcc/configure.ac gcc/configure.ac
index 8f17dfb..49a1f3d 100644
--- gcc/configure.ac
+++ gcc/configure.ac
@@ -3510,6 +3510,13 @@  case "$target" in
   [Define if your assembler supports the lituse_jsrdirect relocation.])])
     ;;
 
+  avr-*-*)
+    gcc_GAS_CHECK_FEATURE([-mlink-relax option], gcc_cv_as_avr_relax,,
+      [-mlink-relax], [.text],,
+      [AC_DEFINE(HAVE_AVR_AS_LINK_RELAX_OPTION, 1,
+		[Define if your assembler supports -mlink-relax option.])])
+  ;;
+
   cris-*-*)
     gcc_GAS_CHECK_FEATURE([-no-mul-bug-abort option],
       gcc_cv_as_cris_no_mul_bug,[2,15,91],