Bug 22601 - Нет предупреждений о записи в программную память
Summary: Нет предупреждений о записи в программную память
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: avr-gcc (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: Grigory Milev
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-12-22 17:41 MSK by Dmitry A. Kharitonov
Modified: 2011-03-09 15:10 MSK (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Dmitry A. Kharitonov 2009-12-22 17:41:49 MSK
1  #include <avr/io.h>
     2  #include <avr/pgmspace.h>
     3
     4  int main() {
     5      prog_uint8_t p=44,t;      // ошибка пропущен обязательный модификатор static
     6      t=pgm_read_byte_near(&p); // будет прочитан не p
     7  }

В строке 5 переменные должны располагаться в программной памяти, но всё совсем криво и никаких ошибок или предупреждений не возникает.
Компилятор резервирует место в программной памяти, но значения туда не помещает. Значения туда копируются на этапе инициализации переменных, но тк программная память доступна только для чтения, данные в эту область фактически не копируются и там оказываются случайные данные.
В строке 6 происходит копирование данных в переменную, которая расположена в программной памяти, а фактически происходит копирование в озу, по тому же адресу, где в это время расположена совсем другая переменная.

При этом нет даже предупреждений (хотя бы о мнимом преобразовании типов).
Comment 1 Grigory Milev 2009-12-23 11:29:51 MSK
А какие варианты фикса имеются? Я не gcc писатель, если имеются готовые решения, я с радостью приложу патчик к пакету :)
Comment 2 Dmitry A. Kharitonov 2009-12-23 13:07:24 MSK
я, честно говоря, даже не в курсе где их искать, вернее не понятно по каким ключевым словам.
В первом приближении достаточно в <avr/pgmspace.h> во все типы программной памяти добавить модификатор static.
const добавлять не стоит (хотя очень хочется для строчки 6) -- будут проблемы с указателями и ссылками.

PS.: На днях сделаю тест для баги с обработкой логических операций в операторе if, надо только вспомнить в каком месте я с ним боролся.
Comment 3 Grigory Milev 2011-01-18 12:48:09 MSK
Если правки относятся к avr/pgmspace.h, то багу стоит перенести на avr-libc + проверить с последней сборкой avr-libc!
Comment 4 Grigory Milev 2011-03-09 15:08:19 MSK
Не воспроизводится с:
avr-gcc-4.5.1-alt2
avr-libc-1.7.0-alt2