libsframe asan: avoid generating misaligned loads
authorIndu Bhagat <indu.bhagat@oracle.com>
Thu, 15 Dec 2022 21:12:01 +0000 (13:12 -0800)
committerIndu Bhagat <indu.bhagat@oracle.com>
Thu, 15 Dec 2022 21:12:01 +0000 (13:12 -0800)
commit8c078abdc23238c2193136bf0edbf1d910615679
treef5d1ccc4a9b1608341b950d79999b7c1e56ea735
parent69de431392408c2fe25227908612e2bfe7b05036
libsframe asan: avoid generating misaligned loads

There are two places where unaligned loads were seen on aarch64:
  - #1. access to the SFrame FRE stack offsets in the in-memory
    representation/abstraction provided by libsframe.
  - #2. access to the SFrame FRE start address in the on-disk representation
    of the frame row entry.

For #1, we can fix this by reordering the struct members of
sframe_frame_row_entry in libsframe/sframe-api.h.

For #2, we need to default to using memcpy instead, and copy out the bytes
to a location for output.

SFrame format is an unaligned on-disk format. As such, there are other blobs
of memory in the on-disk SFrame FRE that are on not on their natural
boundaries.  But that does not pose further problems yet, because the users
are provided access to the on-disk SFrame FRE data via libsframe's
sframe_frame_row_entry, the latter has its' struct members aligned on their
respective natural boundaries (and initialized using memcpy).

PR 29856 libsframe asan: load misaligned at sframe.c:516

ChangeLog:

PR libsframe/29856
* bfd/elf64-x86-64.c: Adjust as the struct members have been
reordered.
* libsframe/sframe.c (sframe_decode_fre_start_address): Use
memcpy to perform 16-bit/32-bit reads.
* libsframe/testsuite/libsframe.encode/encode-1.c: Adjust as the
struct members have been reordered.

include/ChangeLog:

PR libsframe/29856
* sframe-api.h: Reorder fre_offsets for natural alignment.
bfd/elf64-x86-64.c
include/sframe-api.h
libsframe/sframe.c
libsframe/testsuite/libsframe.encode/encode-1.c