LINUX.ORG.RU

История изменений

Исправление EXL, (текущая версия) :

на опыт других программистов.

По опыту знаю, что enum в некоторых случаях на embedded нужно было внимательно использовать.

На обычных системах всегда привычно что enum-значения это 4 байта и обычный int, а на embedded в целях экономии на спичках компилятору говорят чтобы он для enum-значений использовал 2 байта. Внимание, код SDK драйвера ATI Imageon GPU именитой корпорации ATI/AMD:

typedef enum _AhiRotation_t {
    AhiRotateNone = 0,
    AhiRotate90,
    AhiRotate180,
    AhiRotate270,
    AhiRotateNum,
    AhiRotateMax = 0x7FFFFFFF
} AhiRotation_t;

Соответственно вот эта вот дрянь 0x7FFFFFFF это грязный хак для компилятора, чтобы он enum этот 4-байтным сделал при флагах типа -fshort-enums в GCC, а в ADS каком-нибудь оно вроде и так 2 байта из коробки.

При реверсе драйвера я однажды забыл про этот 0x7FFFFFFF и по итогу структуры были неправильного размера и флаг оказывался чёрти-где, ничего не работало. А на отладку и выявление этой особенности ушло много времени.

Исходная версия EXL, :

на опыт других программистов.

По опыту знаю, что enum в некоторых случаях на embedded нужно было внимательно использовать.

На обычных системах всегда привычно что enum-значения это 4 байта и обычный int, а на embedded в целях экономии на спичках компилятору говорят чтобы он для enum-значений использовал 2 байта. Внимание, код SDK драйвера ATI Imageon GPU именитой корпорации ATI/AMD:

typedef enum _AhiRotation_t {
    AhiRotateNone = 0,
    AhiRotate90,
    AhiRotate180,
    AhiRotate270,
    AhiRotateNum,
    AhiRotateMax = 0x7FFFFFFF
} AhiRotation_t;

Соответственно вот эта вот дрянь 0x7FFFFFFF это грязный хак для компилятора, чтобы он enum этот 4-байтным сделал при флагах типа -fshort-enums в GCC, а в ADS каком-нибудь оно вроде и так 2 байта из коробки.

При реверсе драйвера я однажды забыл про этот 0x7FFFFFFF и по итогу структуры были неправильно размера и флаг оказывался чёрти-где, ничего не работало. А на отладку и выявление этой особенности ушло много времени.