Skip to content

Commit c4e7a40

Browse files
committed
fix: suppress unaligned memory UBSan warnings if supported by arch
1 parent 830928c commit c4e7a40

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

src/crypto/x11/sph_types.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,19 @@ typedef int_fast64_t sph_s64;
327327
#error SPH_UPTR defined, but endianness is not known.
328328
#endif
329329

330+
#if defined(__clang__)
331+
#define SPH_NO_SANITIZE(...) __attribute__((no_sanitize(__VA_ARGS__)))
332+
#else
333+
#define SPH_NO_SANITIZE(...)
334+
#endif // __clang__
335+
336+
// Suppress unaligned memory access warnings if supported by hardware
337+
#if defined(SPH_UPTR) && SPH_UNALIGNED
338+
#define SPH_UNALIGNED_ATTRIBS SPH_NO_SANITIZE("alignment")
339+
#else
340+
#define SPH_UNALIGNED_ATTRIBS
341+
#endif // SPH_UPTR && SPH_UNALIGNED
342+
330343
#if SPH_I386_GCC && !SPH_NO_ASM
331344

332345
/*
@@ -469,6 +482,7 @@ sph_dec16le(const void *src)
469482
* @param val the 32-bit value to encode
470483
*/
471484
static SPH_INLINE void
485+
SPH_UNALIGNED_ATTRIBS
472486
sph_enc32be(void *dst, sph_u32 val)
473487
{
474488
#if defined SPH_UPTR
@@ -527,6 +541,7 @@ sph_enc32be_aligned(void *dst, sph_u32 val)
527541
* @return the decoded value
528542
*/
529543
static SPH_INLINE sph_u32
544+
SPH_UNALIGNED_ATTRIBS
530545
sph_dec32be(const void *src)
531546
{
532547
#if defined SPH_UPTR
@@ -587,6 +602,7 @@ sph_dec32be_aligned(const void *src)
587602
* @param val the 32-bit value to encode
588603
*/
589604
static SPH_INLINE void
605+
SPH_UNALIGNED_ATTRIBS
590606
sph_enc32le(void *dst, sph_u32 val)
591607
{
592608
#if defined SPH_UPTR
@@ -645,6 +661,7 @@ sph_enc32le_aligned(void *dst, sph_u32 val)
645661
* @return the decoded value
646662
*/
647663
static SPH_INLINE sph_u32
664+
SPH_UNALIGNED_ATTRIBS
648665
sph_dec32le(const void *src)
649666
{
650667
#if defined SPH_UPTR
@@ -726,6 +743,7 @@ sph_dec32le_aligned(const void *src)
726743
* @param val the 64-bit value to encode
727744
*/
728745
static SPH_INLINE void
746+
SPH_UNALIGNED_ATTRIBS
729747
sph_enc64be(void *dst, sph_u64 val)
730748
{
731749
#if defined SPH_UPTR
@@ -796,6 +814,7 @@ sph_enc64be_aligned(void *dst, sph_u64 val)
796814
* @return the decoded value
797815
*/
798816
static SPH_INLINE sph_u64
817+
SPH_UNALIGNED_ATTRIBS
799818
sph_dec64be(const void *src)
800819
{
801820
#if defined SPH_UPTR
@@ -868,6 +887,7 @@ sph_dec64be_aligned(const void *src)
868887
* @param val the 64-bit value to encode
869888
*/
870889
static SPH_INLINE void
890+
SPH_UNALIGNED_ATTRIBS
871891
sph_enc64le(void *dst, sph_u64 val)
872892
{
873893
#if defined SPH_UPTR
@@ -938,6 +958,7 @@ sph_enc64le_aligned(void *dst, sph_u64 val)
938958
* @return the decoded value
939959
*/
940960
static SPH_INLINE sph_u64
961+
SPH_UNALIGNED_ATTRIBS
941962
sph_dec64le(const void *src)
942963
{
943964
#if defined SPH_UPTR

0 commit comments

Comments
 (0)