LINUX.ORG.RU

Проблема с __attribute__ ((__packed__))

 ,


1

3

Всем привет. Столкнулся в проблемой в gcc 5.3

Есть проект, который собирался стареньким gcc 4.4. В нем сплошь и рядом используется атрибут __attribute__ ((__packed__)). При переходе на версию 5.3 этот атрибут вдруг стал по другому упаковывать структуры. Упаковка через #pragma pack(1) выдает нужный размер структуры, а через __attribute__ ((__packed__)) больше, чем было.

В чем дело? С чем это связано?



Последнее исправление: beastie (всего исправлений: 1)

#pragma pack(1) это вроде __attribute__((packed, aligned(1))). Документация пишет

The aligned attribute can only increase alignment.
Но всё равно можно попробовать указать aligned(1).

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

указал aligned(1), но к сожалению не помогает

Nilus
() автор топика

А что за структура? Можно потыкать https://gcc.godbolt.org/ , там есть все версии gcc с 4.4, понять в какой именно момент изменился sizeof и offsetof, и где именно появилась дырка.

trycatch ★★★
()

не внезапно, а в районе 4.7-4.8

__attribute__ ((__packed__)) - потенциальные ошибки на определенных архитектурах,

окай мы выключим эту опцию вовсе, эмбедщики до сих пор подбабахивают от этого изменения

но для совместимости с виндой мы оставим также потенциально ломающий на некоторых архитектурах #pragma pack

winodws win

hizel ★★★★★
()

а если убрать `__attribute__ ((__packed__))` структуры еще больше становятся или он вообще не работает?

pftBest ★★★★
()
Ответ на: комментарий от pftBest

Больше, но как он работает я не понимаю. перепробовал все значения в pragma pack(1..16) и не смог получить тот размер, который выдет `__attribute__ ((__packed__))`

Nilus
() автор топика
Ответ на: комментарий от hizel

я с разными архитектурами работала, с эмбеддедом, с мелкоконтроллерами, но pragma pack(1) вроде никогда не давал глюков, ни с одним из компиляторов. не припоминаю такого.

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 1)

В чем дело? С чем это связано?

А к чему применялись эти атрибуты? К индивидуальным полям или ко всей структуре?

kawaii_neko ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.