Skip to content

Commit 2a0ddb8

Browse files
committed
fix clang build with glibc 2.42 re: struct termio
Upstream LLVM recently gained support for building with glibc 2.42: llvm/llvm-project@59978b2 llvm/llvm-project@c99b1bc Backport these fixes to this project's vendored copy of clang. This allows us to build Infer on Arch Linux, which recently upgraded its glibc to 2.42: https://gitlab.archlinux.org/archlinux/packaging/packages/glibc/-/commit/3543edc0a9e583f9c3880c197d83409c5e8d4020
1 parent fc237fb commit 2a0ddb8

File tree

3 files changed

+130
-0
lines changed

3 files changed

+130
-0
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
From 59978b21ad9c65276ee8e14f26759691b8a65763 Mon Sep 17 00:00:00 2001
2+
From: Tom Stellard <[email protected]>
3+
Date: Mon, 28 Apr 2025 13:45:11 -0700
4+
Subject: [PATCH] [sanitizer_common] Remove interceptors for deprecated struct
5+
termio (#137403)
6+
7+
This struct will be removed from glibc-2.42 and has been deprecated for
8+
a very long time.
9+
10+
Fixes #137321
11+
---
12+
.../sanitizer_common_interceptors_ioctl.inc | 8 --------
13+
.../sanitizer_common/sanitizer_platform_limits_posix.cpp | 3 ---
14+
.../sanitizer_common/sanitizer_platform_limits_posix.h | 1 -
15+
3 files changed, 12 deletions(-)
16+
17+
diff --git a/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc b/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
18+
index f88f914b1d149..bc8f02826c614 100644
19+
--- a/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
20+
+++ b/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
21+
@@ -342,17 +342,9 @@ static void ioctl_table_fill() {
22+
_(SOUND_PCM_WRITE_CHANNELS, WRITE, sizeof(int));
23+
_(SOUND_PCM_WRITE_FILTER, WRITE, sizeof(int));
24+
_(TCFLSH, NONE, 0);
25+
-#if SANITIZER_GLIBC
26+
- _(TCGETA, WRITE, struct_termio_sz);
27+
-#endif
28+
_(TCGETS, WRITE, struct_termios_sz);
29+
_(TCSBRK, NONE, 0);
30+
_(TCSBRKP, NONE, 0);
31+
-#if SANITIZER_GLIBC
32+
- _(TCSETA, READ, struct_termio_sz);
33+
- _(TCSETAF, READ, struct_termio_sz);
34+
- _(TCSETAW, READ, struct_termio_sz);
35+
-#endif
36+
_(TCSETS, READ, struct_termios_sz);
37+
_(TCSETSF, READ, struct_termios_sz);
38+
_(TCSETSW, READ, struct_termios_sz);
39+
diff --git a/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp b/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
40+
index b4d87ab6228e5..7a89bf1c74985 100644
41+
--- a/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
42+
+++ b/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
43+
@@ -494,9 +494,6 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
44+
unsigned struct_input_id_sz = sizeof(struct input_id);
45+
unsigned struct_mtpos_sz = sizeof(struct mtpos);
46+
unsigned struct_rtentry_sz = sizeof(struct rtentry);
47+
-#if SANITIZER_GLIBC || SANITIZER_ANDROID
48+
- unsigned struct_termio_sz = sizeof(struct termio);
49+
-#endif
50+
unsigned struct_vt_consize_sz = sizeof(struct vt_consize);
51+
unsigned struct_vt_sizes_sz = sizeof(struct vt_sizes);
52+
unsigned struct_vt_stat_sz = sizeof(struct vt_stat);
53+
diff --git a/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h b/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
54+
index 348bb4f27aec3..fdc52aa56c493 100644
55+
--- a/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
56+
+++ b/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
57+
@@ -1063,7 +1063,6 @@ extern unsigned struct_hd_geometry_sz;
58+
extern unsigned struct_input_absinfo_sz;
59+
extern unsigned struct_input_id_sz;
60+
extern unsigned struct_mtpos_sz;
61+
-extern unsigned struct_termio_sz;
62+
extern unsigned struct_vt_consize_sz;
63+
extern unsigned struct_vt_sizes_sz;
64+
extern unsigned struct_vt_stat_sz;
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
From c99b1bcd505064f2e086e6b1034ce0b0c91ea5b9 Mon Sep 17 00:00:00 2001
2+
From: Andreas Schwab <[email protected]>
3+
Date: Wed, 7 May 2025 10:06:10 +0200
4+
Subject: [PATCH] Remove reference to obsolete termio ioctls
5+
MIME-Version: 1.0
6+
Content-Type: text/plain; charset=UTF-8
7+
Content-Transfer-Encoding: 8bit
8+
9+
The termio ioctls are no longer used after commit 59978b21ad9c
10+
("[sanitizer_common] Remove interceptors for deprecated struct termio
11+
(#137403)"), remove them. Fixes this build error:
12+
13+
../../../../libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp:765:27: error: invalid application of ‘sizeof’ to incomplete type ‘__sanitizer::termio’
14+
765 | unsigned IOCTL_TCGETA = TCGETA;
15+
| ^~~~~~
16+
../../../../libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp:769:27: error: invalid application of ‘sizeof’ to incomplete type ‘__sanitizer::termio’
17+
769 | unsigned IOCTL_TCSETA = TCSETA;
18+
| ^~~~~~
19+
../../../../libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp:770:28: error: invalid application of ‘sizeof’ to incomplete type ‘__sanitizer::termio’
20+
770 | unsigned IOCTL_TCSETAF = TCSETAF;
21+
| ^~~~~~~
22+
../../../../libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp:771:28: error: invalid application of ‘sizeof’ to incomplete type ‘__sanitizer::termio’
23+
771 | unsigned IOCTL_TCSETAW = TCSETAW;
24+
| ^~~~~~~
25+
Part-of: https://github.com/llvm/llvm-project/pull/138822
26+
Closes: https://github.com/llvm/llvm-project/pull/138822
27+
---
28+
.../lib/sanitizer_common/sanitizer_platform_limits_posix.cpp | 4 ----
29+
.../lib/sanitizer_common/sanitizer_platform_limits_posix.h | 4 ----
30+
2 files changed, 8 deletions(-)
31+
32+
diff --git a/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp b/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
33+
index ef4b8a85d6634..ea8cc306268cb 100644
34+
--- a/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
35+
+++ b/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
36+
@@ -764,12 +764,8 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
37+
unsigned IOCTL_SOUND_PCM_WRITE_FILTER = SOUND_PCM_WRITE_FILTER;
38+
#endif // SOUND_VERSION
39+
unsigned IOCTL_TCFLSH = TCFLSH;
40+
- unsigned IOCTL_TCGETA = TCGETA;
41+
unsigned IOCTL_TCGETS = TCGETS;
42+
unsigned IOCTL_TCSBRK = TCSBRK;
43+
unsigned IOCTL_TCSBRKP = TCSBRKP;
44+
- unsigned IOCTL_TCSETA = TCSETA;
45+
- unsigned IOCTL_TCSETAF = TCSETAF;
46+
- unsigned IOCTL_TCSETAW = TCSETAW;
47+
unsigned IOCTL_TCSETS = TCSETS;
48+
unsigned IOCTL_TCSETSF = TCSETSF;
49+
diff --git a/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h b/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
50+
index 9e11dd9911d9d..24966523f3a02 100644
51+
--- a/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
52+
+++ b/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
53+
@@ -1289,11 +1289,7 @@ extern unsigned IOCTL_SNDCTL_COPR_SENDMSG;
54+
extern unsigned IOCTL_SNDCTL_COPR_WCODE;
55+
extern unsigned IOCTL_SNDCTL_COPR_WDATA;
56+
extern unsigned IOCTL_TCFLSH;
57+
-extern unsigned IOCTL_TCGETA;
58+
extern unsigned IOCTL_TCGETS;
59+
extern unsigned IOCTL_TCSBRK;
60+
extern unsigned IOCTL_TCSBRKP;
61+
-extern unsigned IOCTL_TCSETA;
62+
-extern unsigned IOCTL_TCSETAF;
63+
-extern unsigned IOCTL_TCSETAW;
64+
extern unsigned IOCTL_TCSETS;

facebook-clang-plugins/clang/src/prepare_clang_src.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ CLANG_PREBUILD_PATCHES=(
2121
"$SCRIPT_DIR/err_ret_local_block.patch"
2222
"$SCRIPT_DIR/mangle_suppress_errors.patch"
2323
"$SCRIPT_DIR/objc_method_decl.patch"
24+
"$SCRIPT_DIR/glibc_2.42_struct_termio_interceptors.patch"
25+
"$SCRIPT_DIR/glibc_2.42_struct_termio_references.patch"
2426
)
2527

2628
mkdir -p "${SCRIPT_DIR}/download"

0 commit comments

Comments
 (0)