+2010-11-26 Vladimir Serbinenko <phcoder@gmail.com>
+
+ Avoid using tricks for initialising endian variables.
+
+ * grub-core/partmap/gpt.c (grub_gpt_partition_type_bios_boot):
+ Make const.
+ (GRUB_MOD_INIT): Don't byte-swap.
+ * include/grub/gpt_partition.h (GRUB_GPT_PARTITION_TYPE_BIOS_BOOT):
+ Use grub_cpu_to_le16_compile_time and grub_cpu_to_le32_compile_time.
+ * include/grub/types.h (grub_swap_bytes16_compile_time): New macro.
+ (grub_swap_bytes32_compile_time): Likewise.
+ (grub_cpu_to_le32_compile_time): Likewise.
+ (grub_cpu_to_le16_compile_time): Likewise.
+
2010-11-26 Vladimir Serbinenko <phcoder@gmail.com>
* util/grub-setup.c (setup): Stop recommending --force. People who
static const grub_gpt_part_type_t grub_gpt_partition_type_empty = GRUB_GPT_PARTITION_TYPE_EMPTY;
#ifdef GRUB_UTIL
-static grub_gpt_part_type_t grub_gpt_partition_type_bios_boot = GRUB_GPT_PARTITION_TYPE_BIOS_BOOT;
+static const grub_gpt_part_type_t grub_gpt_partition_type_bios_boot = GRUB_GPT_PARTITION_TYPE_BIOS_BOOT;
#endif
/* 512 << 7 = 65536 byte sectors. */
GRUB_MOD_INIT(part_gpt)
{
grub_partition_map_register (&grub_gpt_partition_map);
-#ifdef GRUB_UTIL
- grub_gpt_partition_type_bios_boot.data1 =
- grub_cpu_to_le32 (grub_gpt_partition_type_bios_boot.data1);
- grub_gpt_partition_type_bios_boot.data2 =
- grub_cpu_to_le16 (grub_gpt_partition_type_bios_boot.data2);
- grub_gpt_partition_type_bios_boot.data3 =
- grub_cpu_to_le16 (grub_gpt_partition_type_bios_boot.data3);
-#endif
}
GRUB_MOD_FINI(part_gpt)
}
#define GRUB_GPT_PARTITION_TYPE_BIOS_BOOT \
- { 0x21686148, 0x6449, 0x6e6f, \
+ { grub_cpu_to_le32_compile_time (0x21686148), grub_cpu_to_le16_compile_time (0x6449), grub_cpu_to_le16_compile_time (0x6e6f), \
{ 0x74, 0x4e, 0x65, 0x65, 0x64, 0x45, 0x46, 0x49 } \
}
(grub_uint16_t) ((_x << 8) | (_x >> 8)); \
})
+#define grub_swap_bytes16_compile_time(x) ((((x) & 0xff) << 8) | (((x) & 0xff00) >> 8))
+#define grub_swap_bytes32_compile_time(x) ((((x) & 0xff) << 24) | (((x) & 0xff00) << 8) | (((x) & 0xff0000) >> 8) | (((x) & 0xff000000UL) >> 24))
+
#if defined(__GNUC__) && (__GNUC__ > 3) && (__GNUC__ > 4 || __GNUC_MINOR__ >= 3)
static inline grub_uint32_t grub_swap_bytes32(grub_uint32_t x)
{
# define grub_be_to_cpu16(x) ((grub_uint16_t) (x))
# define grub_be_to_cpu32(x) ((grub_uint32_t) (x))
# define grub_be_to_cpu64(x) ((grub_uint64_t) (x))
+# define grub_cpu_to_le32_compile_time(x) grub_swap_bytes32_compile_time(x)
+# define grub_cpu_to_le16_compile_time(x) grub_swap_bytes16_compile_time(x)
#else /* ! WORDS_BIGENDIAN */
# define grub_cpu_to_le16(x) ((grub_uint16_t) (x))
# define grub_cpu_to_le32(x) ((grub_uint32_t) (x))
# define grub_be_to_cpu16(x) grub_swap_bytes16(x)
# define grub_be_to_cpu32(x) grub_swap_bytes32(x)
# define grub_be_to_cpu64(x) grub_swap_bytes64(x)
+# define grub_cpu_to_le16_compile_time(x) ((grub_uint16_t) (x))
+# define grub_cpu_to_le32_compile_time(x) ((grub_uint32_t) (x))
#endif /* ! WORDS_BIGENDIAN */
#endif /* ! GRUB_TYPES_HEADER */