Subject: GCC 2.95

From: "Adam 'WeirdArms' Wiggins" <[email-masked]>
Date: Wed, 8 Sep 1999 02:46:47 +1000 (EST)

1. What patches (if any) are required and what do they fix?
	2. What binutils are needed for it (where can I get them)? does
2.9.1.0.25 work ok with gcc 2.95?

	Cheers Adam

unsubscribe: body of `unsubscribe linux-arm' to [email-masked]

---

From: Philip Blundell <[email-masked]>
Date: Tue, 07 Sep 1999 20:11:46 +0100

>2.9.1.0.25 work ok with gcc 2.95?

Use gcc 2.95.1, or even better the pre-2.95.2 sources from CVS.

There are some patches at <ftp://ftp.netwinder.org/users/p/philb/
gcc-2.95-diff-990730.gz>.  They are against the 2.95 release as the name 
suggests, but they should apply against 2.95.1 and probably 2.95.2 for the 
most part.  I will try to get around to updating them sometime soon.

Here's a brief summary of what each patch does, based on the ChangeLogs.

        * jump.c (duplicate_loop_exit_test): New parameter after_regscan.
        If true, call reg_scan_update when new registers might have been
        created.
        (jump_optimize_1): Pass after_regscan to above function.

This prevents a compiler crash under some circumstances.  This is already in 
the gcc mainline and might be in 2.95.2 also.  I don't think it is in 2.95.1.

        * reload1.c (reload_reg_free_for_value_p):  RELOAD_OTHER reloads with
        an earlyclobbered output conflict with RELOAD_INPUT reloads.
        * reload1.c (reload_reg_free_for_value_p): If two reloads overlap in
        their lifetimes, and one of them has an output, they conflict.

These two fix a problem which caused the compiler to try to generate invalid 
MUL instructions.  This is not in the gcc mainline or the 2.95 branch yet.

        * config/arm/arm.c (legitimize_pic_address): Handle LABEL_REF
        correctly.
        * config/arm/arm.h (LEGITIMATE_CONSTANT_P): Allow anything when
        generating PIC.
        (LEGITIMATE_PIC_OPERAND): Disallow references to labels.

Those fix various amusing breakages in PIC generation.  You need this for 
references to labels to work properly in PIC code (eg exception handling).

        (GO_IF_LEGITIMATE_INDEX): Fix handling of HImode values.

That one avoids a potential crash when generating 16-bit loads for ARMv3.

        * function.c (rtx_equal_for_addressof_p): New function.
        (purge_addressof_1): Use it instead of rtx_equal_p.

I don't remember all the details of that one, but it involves the compiler 
aborting in purge_addressof_1. 

The details of most of these are in the gcc mailing list archives if you want 
more information.  There are other things in the patch too but they are not 
really bug fixes.

p.