diff options
author | joseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2013-07-02 00:11:45 +0000 |
---|---|---|
committer | joseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2013-07-02 00:11:45 +0000 |
commit | 94ba134cf6431dad0aaece271a16761bc793d490 (patch) | |
tree | b2b77be695fb5add3d132101bf25f2be915f3139 /libc/elf/dl-profile.c | |
parent | f42fd2771adb82cb5f34ba9e80a607975111da48 (diff) |
Merge changes between r23363 and r23421 from /fsf/trunk.
git-svn-id: svn://svn.eglibc.org/trunk@23422 7b3dc134-2b1b-0410-93df-9e9f96275f8d
Diffstat (limited to 'libc/elf/dl-profile.c')
-rw-r--r-- | libc/elf/dl-profile.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/libc/elf/dl-profile.c b/libc/elf/dl-profile.c index 823f3d709..8fa6efca4 100644 --- a/libc/elf/dl-profile.c +++ b/libc/elf/dl-profile.c @@ -131,7 +131,18 @@ struct here_cg_arc_record { uintptr_t from_pc; uintptr_t self_pc; - uint32_t count __attribute__((aligned(__alignof__(uint32_t)))); + /* 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; |