diff options
author | Nathan Froyd <froydnj@codesourcery.com> | 2013-06-28 21:42:19 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2013-06-28 21:42:19 +0000 |
commit | ce61a2ad2e078a19454411832b167444b6c9ae66 (patch) | |
tree | cc2ca2f921b2a1dcaea9745fbce745c1615cfd6d | |
parent | ef65da39e62ecd49e2b65b0cb6e4c8f75a1ee096 (diff) | |
download | glibc-ce61a2ad2e078a19454411832b167444b6c9ae66.zip glibc-ce61a2ad2e078a19454411832b167444b6c9ae66.tar.gz glibc-ce61a2ad2e078a19454411832b167444b6c9ae66.tar.bz2 |
Mark packed structure element used with atomic operation aligned.
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | elf/dl-profile.c | 13 |
2 files changed, 18 insertions, 1 deletions
@@ -1,3 +1,9 @@ +2013-06-28 Nathan Froyd <froydnj@codesourcery.com> + Joseph Myers <joseph@codesourcery.com> + + * elf/dl-profile.c (struct here_cg_arc_record): Declare 'count' + as being properly aligned. + 2013-06-28 Maciej W. Rozycki <macro@codesourcery.com> * dlfcn/modstatic5.c: New file. diff --git a/elf/dl-profile.c b/elf/dl-profile.c index 9034be2..8fa6efc 100644 --- a/elf/dl-profile.c +++ b/elf/dl-profile.c @@ -131,7 +131,18 @@ struct here_cg_arc_record { uintptr_t from_pc; uintptr_t self_pc; - uint32_t count; + /* The count field is atomically incremented in _dl_mcount, which + requires it to be properly aligned for its type, and for this + alignment to be visible to the compiler. The amount of data + before an array of this structure is calculated as + expected_size in _dl_start_profile. Everything in that + calculation is a multiple of 4 bytes (in the case of + kcountsize, because it is derived from a subtraction of + page-aligned values, and the corresponding calculation in + __monstartup also ensures it is at least a multiple of the size + of u_long), so all copies of this field do in fact have the + appropriate alignment. */ + uint32_t count __attribute__ ((aligned (__alignof__ (uint32_t)))); } __attribute__ ((packed)); static struct here_cg_arc_record *data; |