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

Appearance settings

Commit 993bdb9

Browse filesBrowse files
committed
pg_attribute_no_sanitize_alignment() macro
Modern gcc and clang compilers offer alignment sanitizers, which help to detect pointer misalignment. However, our codebase already contains x86-specific crc32 computation code, which uses unalignment access. Thankfully, those compilers also support the attribute, which disables alignment sanitizers at the function level. This commit adds pg_attribute_no_sanitize_alignment(), which wraps this attribute, and applies it to pg_comp_crc32c_sse42() function. Discussion: https://postgr.es/m/CAPpHfdsne3%3DT%3DfMNU45PtxdhSL_J2PjLTeS8rwKnJzUR4YNd4w%40mail.gmail.com Discussion: https://postgr.es/m/475514.1612745257%40sss.pgh.pa.us Author: Alexander Korotkov, revised by Tom Lane Reviewed-by: Tom Lane
1 parent c8b21b0 commit 993bdb9
Copy full SHA for 993bdb9

File tree

Expand file treeCollapse file tree

2 files changed

+13
-0
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+13
-0
lines changed

‎src/include/c.h

Copy file name to clipboardExpand all lines: src/include/c.h
+12Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,18 @@
132132
#define pg_nodiscard
133133
#endif
134134

135+
/*
136+
* Place this macro before functions that should be allowed to make misaligned
137+
* accesses. Think twice before using it on non-x86-specific code!
138+
* Testing can be done with "-fsanitize=alignment -fsanitize-trap=alignment"
139+
* on clang, or "-fsanitize=alignment -fno-sanitize-recover=alignment" on gcc.
140+
*/
141+
#if __clang_major__ >= 7 || __GNUC__ >= 5
142+
#define pg_attribute_no_sanitize_alignment() __attribute__((no_sanitize("alignment")))
143+
#else
144+
#define pg_attribute_no_sanitize_alignment()
145+
#endif
146+
135147
/*
136148
* Append PG_USED_FOR_ASSERTS_ONLY to definitions of variables that are only
137149
* used in assert-enabled builds, to avoid compiler warnings about unused

‎src/port/pg_crc32c_sse42.c

Copy file name to clipboardExpand all lines: src/port/pg_crc32c_sse42.c
+1Lines 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_crc32c crc, const void *data, size_t len)
2324
{

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.