Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc86eae3

Browse files
committed
pg_attribute_no_sanitize_alignment() macro
Modern gcc and clang compilers offer alignment sanitizers, which help to detectpointer misalignment. However, our codebase already contains x86-specificcrc32 computation code, which uses unalignment access. Thankfully, thosecompilers also support the attribute, which disables alignment sanitizers atthe function level. This commit adds pg_attribute_no_sanitize_alignment(),which wraps this attribute, and applies it to pg_comp_crc32c_sse42() function.Back-patch of commits 993bdb9f9 and ad2ad698a, to enable doingalignment testing in all supported branches.Discussion:https://postgr.es/m/CAPpHfdsne3%3DT%3DfMNU45PtxdhSL_J2PjLTeS8rwKnJzUR4YNd4w%40mail.gmail.comDiscussion:https://postgr.es/m/475514.1612745257%40sss.pgh.pa.usAuthor: Alexander Korotkov, revised by Tom LaneReviewed-by: Tom Lane
1 parentbcd5e95 commitc86eae3

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

‎src/include/c.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,18 @@
110110
#definepg_attribute_unused()
111111
#endif
112112

113+
/*
114+
* Place this macro before functions that should be allowed to make misaligned
115+
* accesses. Think twice before using it on non-x86-specific code!
116+
* Testing can be done with "-fsanitize=alignment -fsanitize-trap=alignment"
117+
* on clang, or "-fsanitize=alignment -fno-sanitize-recover=alignment" on gcc.
118+
*/
119+
#if__clang_major__ >=7||__GNUC__ >=8
120+
#definepg_attribute_no_sanitize_alignment() __attribute__((no_sanitize("alignment")))
121+
#else
122+
#definepg_attribute_no_sanitize_alignment()
123+
#endif
124+
113125
/*
114126
* Append PG_USED_FOR_ASSERTS_ONLY to definitions of variables that are only
115127
* used in assert-enabled builds, to avoid compiler warnings about unused

‎src/port/pg_crc32c_sse42.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
#include"port/pg_crc32c.h"
2020

21+
pg_attribute_no_sanitize_alignment()
2122
pg_crc32c
2223
pg_comp_crc32c_sse42(pg_crc32ccrc,constvoid*data,size_tlen)
2324
{

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp