This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PATCH: Correctly configure all big-endian ARM archs, not just arm*-*-linux-*.


On 20/02/13 23:21, Seth LaForge wrote:
On Fri, Feb 15, 2013 at 3:29 PM, Mike Stump <mikestump@comcast.net> wrote:
No. Counter proposal, let's handle the cases that don't work. So, you said in your original email that armeb-unknown-eabi doesn't work.

So, in the existing case statement for:

arm*-*-eabi*)

let's just add:

         case ${target} in
         armeb-*-eabi*)
           tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
         esac

Is this not exactly what you want? Doesn't this solve exactly what you stated was the problem?

OK, attached patch 0001-Add-TARGET_BIG_ENDIAN_DEFAULT-1-for-all-armeb-eabi-a.patch does as you describe, and works for my particular use-case.

I could inline the test into all
of the ARM cases below, but I don't like that approach since it's what
caused this problem in the first place (somebody adding BE support to
one ARM arch without adding it to the others).

And does it work on uclinux? Does it work on rtems? Does it work on every arm that every existed and will exist? If the answer is no, then it is less ideal than putting this in the config for eabi*).

Well, the current config is certainly broken when giving a big-endian spec for uclinux, rtems, and every other arm that ever existed or will exist. It's possible there are other issues with using a big-endian processor for uclinux, rtems, etc, but adding TARGET_BIG_ENDIAN_DEFAULT=1 certainly gets those targets closer to working.

If it always works, then moving the existing on up to the existing:

case ${target} in
i[34567]86-*-*)

would be the right approach. x86 uses this location already to set tm_defines="${tm_defines} USE_IX86_FRAME_POINTER=1" for example. The documentation above that group can state that this is the location for things that are cpu specific and os and vendor neutral.

I like that solution better. Following your suggested list of big-endian architectures, attached patch 0001-Add-TARGET_BIG_ENDIAN_DEFAULT-1-for-all-arm-big-endi.patch adds TARGET_BIG_ENDIAN_DEFAULT=1 for $target matching "armeb-* | armbe-* | armv[3-8]b-*". I left out xscaleeb, since config.sub canonicalizes xscaleeb-* to armeb-*.

Please, pick whichever patch pleases you most.  I prefer
0001-Add-TARGET_BIG_ENDIAN_DEFAULT-1-for-all-arm-big-endi.patch.

Changelog entry for
0001-Add-TARGET_BIG_ENDIAN_DEFAULT-1-for-all-arm-big-endi.patch:

gcc/
	* config.gcc: Add TARGET_BIG_ENDIAN_DEFAULT=1 for all arm big-endian archs.

Changelog entry for
0001-Add-TARGET_BIG_ENDIAN_DEFAULT-1-for-all-armeb-eabi-a.patch:

gcc/
	* config.gcc: Add TARGET_BIG_ENDIAN_DEFAULT=1 for all armeb-*-eabi* archs.


This is what I've put in. Which is a slight relaxation on your second version.


R.

Attachment: be.patch
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]