public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/52505] New: [avr]: __memx address space reading unintentionally from RAM
@ 2012-03-06 11:26 gjl at gcc dot gnu.org
  2012-03-06 11:27 ` [Bug target/52505] " gjl at gcc dot gnu.org
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: gjl at gcc dot gnu.org @ 2012-03-06 11:26 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52505

             Bug #: 52505
           Summary: [avr]: __memx address space reading unintentionally
                    from RAM
    Classification: Unclassified
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: target
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: gjl@gcc.gnu.org
            Target: avr


The __memx address space reader must determine at runtime from what memory area
to read and what instruction to use. To read one byte, ine sequence might look
like:

    ld   r24,Z
    sbrs r25,7
    lpm  r24,Z

This is not correct because if the read is fram flash memory but the address
taken as RAM address points to the I/O area, the read might have an effect on
I/O register, for example clear a latch or buffer.


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug target/52505] [avr]: __memx address space reading unintentionally from RAM
  2012-03-06 11:26 [Bug target/52505] New: [avr]: __memx address space reading unintentionally from RAM gjl at gcc dot gnu.org
@ 2012-03-06 11:27 ` gjl at gcc dot gnu.org
  2012-03-07 10:36 ` gjl at gcc dot gnu.org
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: gjl at gcc dot gnu.org @ 2012-03-06 11:27 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52505

Georg-Johann Lay <gjl at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P3                          |P5
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2012-03-06
         AssignedTo|unassigned at gcc dot       |gjl at gcc dot gnu.org
                   |gnu.org                     |
   Target Milestone|---                         |4.7.1
     Ever Confirmed|0                           |1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug target/52505] [avr]: __memx address space reading unintentionally from RAM
  2012-03-06 11:26 [Bug target/52505] New: [avr]: __memx address space reading unintentionally from RAM gjl at gcc dot gnu.org
  2012-03-06 11:27 ` [Bug target/52505] " gjl at gcc dot gnu.org
@ 2012-03-07 10:36 ` gjl at gcc dot gnu.org
  2012-03-22 15:15 ` gjl at gcc dot gnu.org
  2012-03-22 15:31 ` gjl at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: gjl at gcc dot gnu.org @ 2012-03-07 10:36 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52505

--- Comment #1 from Georg-Johann Lay <gjl at gcc dot gnu.org> 2012-03-07 10:36:34 UTC ---
Author: gjl
Date: Wed Mar  7 10:36:30 2012
New Revision: 185031

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=185031
Log:
libgcc/
    PR target/52505
    * config/avr/lib1funcs.S (__xload_1): Don't read unintentionally
    from RAM.

gcc/
    PR target/52505
    * config/avr/avr.c (avr_out_xload): Don't read unintentionally
    from RAM.
    * config/avr/avr.md (xload_8): Adjust insn length.


Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/avr/avr.c
    trunk/gcc/config/avr/avr.md
    trunk/libgcc/ChangeLog
    trunk/libgcc/config/avr/lib1funcs.S


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug target/52505] [avr]: __memx address space reading unintentionally from RAM
  2012-03-06 11:26 [Bug target/52505] New: [avr]: __memx address space reading unintentionally from RAM gjl at gcc dot gnu.org
  2012-03-06 11:27 ` [Bug target/52505] " gjl at gcc dot gnu.org
  2012-03-07 10:36 ` gjl at gcc dot gnu.org
@ 2012-03-22 15:15 ` gjl at gcc dot gnu.org
  2012-03-22 15:31 ` gjl at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: gjl at gcc dot gnu.org @ 2012-03-22 15:15 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52505

--- Comment #2 from Georg-Johann Lay <gjl at gcc dot gnu.org> 2012-03-22 15:07:13 UTC ---
Author: gjl
Date: Thu Mar 22 15:06:57 2012
New Revision: 185697

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=185697
Log:
libgcc/
    Backport from 2012-03-07 mainline r185033.

    PR target/52507
    * config/avr/lib1funcs.S (__movmemx_hi): Fix loop label in RAM-part.

    Backport from 2012-03-07 mainline r185031.

    PR target/52505
    * config/avr/lib1funcs.S (__xload_1): Don't read unintentionally
    from RAM.

    Backport from 2012-03-07 mainline r185030.

    PR target/52461
    PR target/52508
    * config/avr/lib1funcs.S (__do_copy_data): Clear RAMPZ after usage
    if RAMPZ affects reading from RAM.
    (__tablejump_elpm__): Ditto.
    (.xload): Ditto.
    (__movmemx_hi): Ditto.
    (__do_global_ctors): Right condition for RAMPZ usage is "have ELPM".
    (__do_global_dtors): Ditto.
    (__xload_1, __xload_2, __xload_3, __xload_4): Ditto.
    (__movmemx_hi): Ditto.

gcc/
    Backport from 2012-03-22 mainline r185692.

    PR target/52496
    * config/avr/avr.md (unspec): Remove UNSPEC_MEMORY_BARRIER.
    (unspecv): Add UNSPECV_MEMORY_BARRIER.
    (cli_sei): Use unspec_volatile instead of unspec for memory barrier.
    (delay_cycles_1, delay_cycles_2): Ditto.
    (delay_cycles_3, delay_cycles_4): Ditto.
    (nopv, *nopv): Ditto.
    (sleep, *sleep): Ditto.
    (wdr, *wdr): Ditto.

    Backport from 2012-03-21 mainline r185605.

    PR rtl-optimization/52543
    PR target/52461
    * config/avr/avr-protos.h (avr_load_lpm): New prototype.
    * config/avr/avr.c (avr_mode_dependent_address_p): New function.
    (TARGET_MODE_DEPENDENT_ADDRESS_P): New define.
    (avr_load_libgcc_p): Restrict to __flash loads.
    (avr_out_lpm): Only handle 1-byte loads from __flash.
    (avr_load_lpm): New function.
    (avr_find_unused_d_reg): Remove.
    (avr_out_lpm_no_lpmx): Remove.
    (adjust_insn_length): Handle ADJUST_LEN_LOAD_LPM.
    * config/avr/avr.md (unspec): Add UNSPEC_LPM.
    (load_<mode>_libgcc): Use UNSPEC_LPM instead of MEM.
    (load_<mode>, load_<mode>_clobber): New insns.
    (mov<mode>): For multi-byte move from non-generic
    16-bit address spaces: Expand to load_<mode> resp.
    load_<mode>_clobber.
    (load<mode>_libgcc): Remove expander.
    (split-lpmx): Remove split.

    Backport from 2012-03-13 mainline r185329.

    PR target/52488
    * config/avr/avr.c (avr_prologue_setup_frame): Cut down stack
    offset (size) to a value the insns can deal with.
    (expand_epilogue): Ditto.

    Backport from 2012-03-12 mainline r185256.

    PR target/52499
    * config/avr/avr.c (avr_mode_code_base_reg_class): Change return
    type from reg_class_t to enum reg_class.
    * config/avr/avr-protos.h (avr_mode_code_base_reg_class): Ditto.

    Backport from 2012-03-12 mainline r185253.

    PR target/52148
    * config/avr/avr.c (avr_out_movmem): Fix typo in output template
    for the case ADDR_SPACE_FLASH and AVR_HAVE_LPMX introduced in
    r184615 from 2012-02-28.

    Backport from 2012-03-08 mainline r185105.

    * config/avr/avr.md (*addhi3, addhi3_clobber): Add "w" alternative
    for constants in [-63,63].

    Backport from 2012-03-08 mainline r185100.

    PR target/52496
    * config/avr/avr.c (avr_mem_clobber): New static function.
    (avr_expand_delay_cycles): Add memory clobber operand to
    delay_cycles_1, delay_cycles_2, delay_cycles_3, delay_cycles_4.
    * config/avr/avr.md (unspec): Add UNSPEC_MEMORY_BARRIER.
    (enable_interrupt, disable_interrupt): New expander.
    (nopv, sleep, wdr): New expanders.
    (delay_cycles_1): Add memory clobber.
    (delay_cycles_2): Add memory clobber.
    (delay_cycles_3): Add memory clobber.
    (delay_cycles_4): Add memory clobber.
    (cli_sei): New insn from former "enable_interrupt",
    "disable_interrupt" with memory clobber.
    (*wdt): New insn from former "wdt" with memory clobber.
    (*nopv): Similar, but for "nopv".
    (*sleep): Similar, but for "sleep".

    Backport from 2012-03-07 mainline r185043.

    PR target/52484
    * config/avr/avr.md (xload<mode>_A): Add R22... to register footprint.

    Backport from 2012-03-07 mainline r185032.

    PR target/52506
    * gcc/config/avr/avr.c (expand_epilogue): Fix order of restoration
    to: RAMPZ, RAMPY, RAMPX, RAMPD.
    (expand_prologue): Only clear RAMPZ if it has effect on RAM-read.

    Backport from 2012-03-07 mainline r185031.

    PR target/52505
    * config/avr/avr.c (avr_out_xload): Don't read unintentionally
    from RAM.
    * config/avr/avr.md (xload_8): Adjust insn length.

    Backport from 2012-03-07 mainline r185030.

    PR target/52461
    * gcc/config/avr/avr.c (avr_out_lpm): Clear RAMPZ after usage
    if RAMPZ affects reading from RAM.

    Backport from 2012-03-05 mainline r184919.

    * config/avr/avr.md (*umaddqihi4.2): New insn-and-split.


Modified:
    branches/gcc-4_7-branch/gcc/ChangeLog
    branches/gcc-4_7-branch/gcc/config/avr/avr-protos.h
    branches/gcc-4_7-branch/gcc/config/avr/avr.c
    branches/gcc-4_7-branch/gcc/config/avr/avr.md
    branches/gcc-4_7-branch/libgcc/ChangeLog
    branches/gcc-4_7-branch/libgcc/config/avr/lib1funcs.S


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug target/52505] [avr]: __memx address space reading unintentionally from RAM
  2012-03-06 11:26 [Bug target/52505] New: [avr]: __memx address space reading unintentionally from RAM gjl at gcc dot gnu.org
                   ` (2 preceding siblings ...)
  2012-03-22 15:15 ` gjl at gcc dot gnu.org
@ 2012-03-22 15:31 ` gjl at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: gjl at gcc dot gnu.org @ 2012-03-22 15:31 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52505

Georg-Johann Lay <gjl at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED

--- Comment #3 from Georg-Johann Lay <gjl at gcc dot gnu.org> 2012-03-22 15:29:43 UTC ---
Fixed in 4.7.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-03-22 15:30 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-03-06 11:26 [Bug target/52505] New: [avr]: __memx address space reading unintentionally from RAM gjl at gcc dot gnu.org
2012-03-06 11:27 ` [Bug target/52505] " gjl at gcc dot gnu.org
2012-03-07 10:36 ` gjl at gcc dot gnu.org
2012-03-22 15:15 ` gjl at gcc dot gnu.org
2012-03-22 15:31 ` gjl at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).