From 7602d070dca35a848aff1d72cf0724f02df72f62 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Tue, 8 Oct 2013 00:14:08 +0000 Subject: [PATCH] Clean up locale file alignment handling. --- ChangeLog | 13 +++++++++++++ locale/loadlocale.c | 2 +- locale/programs/3level.h | 4 ++-- locale/programs/ld-collate.c | 2 ++ locale/programs/ld-ctype.c | 4 ++-- locale/programs/locfile.c | 4 ++-- 6 files changed, 22 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 211606b..5c8fef0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2013-10-07 Joseph Myers + + * locale/loadlocale.c (_nl_intern_locale_data): Use + LOCFILE_ALIGNED_P. + * locale/programs/3level.h (CONCAT(add_locale_,TABLE)): Use + LOCFILE_ALIGN_UP and LOCFILE_ALIGN. + * locale/programs/ld-collate.c (obstack_int32_grow): Assert that + obstack data is appropriately aligned. + (obstack_int32_grow_fast): Likewise. + * locale/programs/ld-ctype.c (ctype_output): Use LOCFILE_ALIGN. + * locale/programs/locfile.c (add_locale_uint32): Likewise. + (add_locale_uint32_array): Likewise. + 2013-10-07 Siddhesh Poyarekar * benchtests/Makefile: Remove ARGLIST and RET variables. diff --git a/locale/loadlocale.c b/locale/loadlocale.c index de7e3d0..45162f1 100644 --- a/locale/loadlocale.c +++ b/locale/loadlocale.c @@ -148,7 +148,7 @@ _nl_intern_locale_data (int category, const void *data, size_t datasize) newdata->values[cnt].string = newdata->filedata + idx; else { - if (idx % __alignof__ (u_int32_t) != 0) + if (!LOCFILE_ALIGNED_P (idx)) goto puntdata; newdata->values[cnt].word = *((const u_int32_t *) (newdata->filedata + idx)); diff --git a/locale/programs/3level.h b/locale/programs/3level.h index b8d6ca0..c5f024f 100644 --- a/locale/programs/3level.h +++ b/locale/programs/3level.h @@ -270,7 +270,7 @@ CONCAT(add_locale_,TABLE) (struct locale_file *file, struct TABLE *t) + t->level1_size * sizeof (uint32_t) + (t->level2_size << t->q) * sizeof (uint32_t) + (t->level3_size << t->p) * sizeof (ELEMENT); - t->result_size = (last_offset + 3) & ~3ul; + t->result_size = LOCFILE_ALIGN_UP (last_offset); level2_offset = 5 * sizeof (uint32_t) @@ -308,7 +308,7 @@ CONCAT(add_locale_,TABLE) (struct locale_file *file, struct TABLE *t) t->level3_size << t->p); else abort (); - align_locale_data (file, 4); + align_locale_data (file, LOCFILE_ALIGN); end_locale_structure (file); if (t->level1_alloc > 0) diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c index 31e2d05..d88a6de 100644 --- a/locale/programs/ld-collate.c +++ b/locale/programs/ld-collate.c @@ -44,6 +44,7 @@ static inline void __attribute ((always_inline)) obstack_int32_grow (struct obstack *obstack, int32_t data) { + assert (LOCFILE_ALIGNED_P (obstack_object_size (obstack))); data = maybe_swap_uint32 (data); if (sizeof (int32_t) == sizeof (int)) obstack_int_grow (obstack, data); @@ -55,6 +56,7 @@ static inline void __attribute ((always_inline)) obstack_int32_grow_fast (struct obstack *obstack, int32_t data) { + assert (LOCFILE_ALIGNED_P (obstack_object_size (obstack))); data = maybe_swap_uint32 (data); if (sizeof (int32_t) == sizeof (int)) obstack_int_grow_fast (obstack, data); diff --git a/locale/programs/ld-ctype.c b/locale/programs/ld-ctype.c index 1696294..e7e17b8 100644 --- a/locale/programs/ld-ctype.c +++ b/locale/programs/ld-ctype.c @@ -1032,7 +1032,7 @@ ctype_output (struct localedef_t *locale, const struct charmap_t *charmap, for (cnt = 0; cnt < ctype->nr_charclass; ++cnt) add_locale_string (&file, ctype->classnames[cnt]); add_locale_char (&file, 0); - align_locale_data (&file, 4); + align_locale_data (&file, LOCFILE_ALIGN); end_locale_structure (&file); break; @@ -1042,7 +1042,7 @@ ctype_output (struct localedef_t *locale, const struct charmap_t *charmap, for (cnt = 0; cnt < ctype->map_collection_nr; ++cnt) add_locale_string (&file, ctype->mapnames[cnt]); add_locale_char (&file, 0); - align_locale_data (&file, 4); + align_locale_data (&file, LOCFILE_ALIGN); end_locale_structure (&file); break; diff --git a/locale/programs/locfile.c b/locale/programs/locfile.c index 4969391..3e76ec9 100644 --- a/locale/programs/locfile.c +++ b/locale/programs/locfile.c @@ -627,7 +627,7 @@ add_locale_wstring (struct locale_file *file, const uint32_t *string) void add_locale_uint32 (struct locale_file *file, uint32_t value) { - align_locale_data (file, sizeof (uint32_t)); + align_locale_data (file, LOCFILE_ALIGN); record_offset (file); value = maybe_swap_uint32 (value); obstack_grow (&file->data, &value, sizeof (value)); @@ -639,7 +639,7 @@ void add_locale_uint32_array (struct locale_file *file, const uint32_t *data, size_t n_elems) { - align_locale_data (file, sizeof (uint32_t)); + align_locale_data (file, LOCFILE_ALIGN); record_offset (file); obstack_grow (&file->data, data, n_elems * sizeof (uint32_t)); maybe_swap_uint32_obstack (&file->data, n_elems); -- 2.7.4