#c #gcc #attributes
#c #gcc #атрибуты
Вопрос:
Что означает GCC __attribute__(bitwise)
? Атрибут не упоминается на информационных страницах GCC-4.6. Я наткнулся на него open-iscsi-2.0.871/include/iscsi_proto.h
в исходном файле проекта Open-ISCSI, где он используется как
...
/*
* If running svn modules we may need to define these.
* This should not go upstream since this is already properly defined there
*/
#ifdef __CHECKER__
#define __bitwise__ __attribute__((bitwise))
#else
#define __bitwise__
#endif
#ifdef __CHECK_ENDIAN__
#define __bitwise __bitwise__
#else
#define __bitwise
#endif
/*! initiator tags; opaque for target */
typedef uint32_t __bitwise__ itt_t;
/*! below makes sense only for initiator that created this tag */
#define build_itt(itt, age) ((__force itt_t)
((itt) | ((age) << ISCSI_AGE_SHIFT)))
#define get_itt(itt) ((__force uint32_t)(itt_t)(itt) amp; ISCSI_ITT_MASK)
#define RESERVED_ITT ((__force itt_t)0xffffffff)
...
Я подозреваю что-то, связанное с порядком байтов, но я не могу понять смысл приведенного выше фрагмента.
Ответ №1:
По-видимому, это используется не GCC, а Sparse, семантическим анализатором языка Си, используемым ядром Linux. Это задокументировано в Documentation/dev-tools/sparse.txt .
Ответ №2:
Google говорит здесь, что побитовые значения больше ничего не значат.
Комментарии:
1. Это действительно что-то значит! Если вы пишете драйвер устройства Linux и работаете на устройстве с большим конечным порядком, но контроллер отправляет вам сообщения в нижнем конце, вам лучше убедиться, что вы используете правильные макросы __le_to_cpu( ) в соответствующих местах.