From patchwork Tue Sep 9 02:49:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 119803 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3D3CC3858CD1 for ; Tue, 9 Sep 2025 02:50:27 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3D3CC3858CD1 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=ktijBlyo X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pg1-x536.google.com (mail-pg1-x536.google.com [IPv6:2607:f8b0:4864:20::536]) by sourceware.org (Postfix) with ESMTPS id 14EA23858D1E for ; Tue, 9 Sep 2025 02:49:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 14EA23858D1E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 14EA23858D1E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::536 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1757386172; cv=none; b=pKL+RlbdeXDpuNrU8fjETlCRvwuELqkUhTjc6Xm2OMB2K0jJiWXAR2vn7LBRH4aKxV+Vqg20XUtGBmYwS9APoq2gkggS/hgJ0z+vj9dzHKL741cGnWq6Hceigf77nUDgScxmYbQ1pbRcIzZ2bbx8hZTHTBjKECFWmHWeODl/94M= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1757386172; c=relaxed/simple; bh=eCEzvn7OyWG2YbTSWuU0AUga9AoMyIsSX9/5Sv27VCE=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=crCIERbjTgZA2A9EHM9CAm1g2TJIOuHpgV24JMLNegJIXlG8OfVzyLoLaJsfjordnACphM7RJI9+xGrMfUhMP3Jp89XwUDQwO+SQbrqNLIfFrbGPW8Nv0XZOlCBfDLQ3X2s/a/tFFEiGNZx+a7pYvebR7GeOqF5lO6j5IRQMmkI= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 14EA23858D1E Received: by mail-pg1-x536.google.com with SMTP id 41be03b00d2f7-b522fd4d855so1488616a12.1 for ; Mon, 08 Sep 2025 19:49:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757386171; x=1757990971; darn=sourceware.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=eS910o2z50iJ2ej5Bc+jaavn6z8eVOIgMKK/Z+LoNbE=; b=ktijBlyoySJjHf8yCM8FVacGDEdmkCBCgS9s6qkRtL0cmPRjNP8UP4+a3da933wWcc jZhEiRNky+4sZ0p0OAnGWWZ7q5VZn93oTqgrPG4JLVyYixRKKAowNvOcnqqxHtOa1AhM c//C3KVmDI3Ey5cS9kHZolv7thhTxEo8wEdcOxzRWveGLtuQutp7OTPjl8dwWbmfFBJn A69vu4Mj7YcK36hRs2DWrgUWTWO5tBM909SF5VCA1XjWH+NrE0OXxgUB1JGdIoYMCYQR GJyNOVcj9JUQuoWEuNC4ZnmLiGPtPdjQTSCGi+nyZIhfoleu5yrSLD93iwwx9PvKSpFA bTRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757386171; x=1757990971; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=eS910o2z50iJ2ej5Bc+jaavn6z8eVOIgMKK/Z+LoNbE=; b=ICcBvEoBzdGvQN+sftQBXpWnz/xdKzVHDzM5i8u2cYI0mR1xqVlw62A740+5BM9GqZ YAg3ctCi9+w1VktC+Pe6YT+LNvHu3hDGsC939UqrlZeT/1RrORg0xRrx4Bp8oskDDQ2A uo9k3q8lG0xXcstwImSRJXQPFOVi3Y+KzhLSVdJgHfb6vq+5zNY85vvjr10WmSD0vJhF O4SxN+/IsMduz1r3628V1/Njx0N3XvDoKJcm545IAINli0n1/+fx8te+KAZz3ng4XLad kK3ZCvsDQ7lt8lFADmr5Ea/OjDystNYIfpH8bE1EwQf7RGbEtsVZPtTxrzVK16qLMQMR CK1A== X-Gm-Message-State: AOJu0YxZgvRlYLTuegdB1MB0xLcaiD3Dwc9GafX0R6H+Tv210leMLAny GRDwvXcu2NiXXT1pBC/49/Ie6EMgALmsz+baMu0CHpfgyKXwd0v/TYOn X-Gm-Gg: ASbGncvpttLC/7aKcbXohdEgaIOWgGqO+yPlDAi2tPq1+l8n74Ii8jV8JUxDCS1+hIE Wf1ZLlstJfKQCS2TenftL6FC90XOqGIVzjbANXxo/c7QGVJLEvMrW0pph844e7qUCcEkT41Vg3R xvyjDcwbeXs+wmWpdc+rkw0PlfY65+eDzvYMZpHkp+9XWbowKLuK3I0iaAfI8muAsSQ3ajRS2bk RjwSMOFWbZyJeSpkyxk5rc/gwmdtn5ykBbQkHYJMtm5M/jBkFUYMXjA81jDWfppLpRwljWeFVPn L86ywYlz2MLEd+H2Zozwcdmv3Rsef4IKU/r7ZZMOLbL3SHycMTgIvBNp5Rbfp4QD90MKFSXqPk8 Ch378Qs7KR3t2WHZrxC413UsNvbTpaoDAwnP3OMOfb29eMQr50w== X-Google-Smtp-Source: AGHT+IEHyQxI3wgScoNaK2Gt7stY8awxKcI2Wicc24dlChZjjoYweT/qlB0iMbbQJ48tWIUwVpu/KA== X-Received: by 2002:a17:903:40cc:b0:250:6d0e:1e4c with SMTP id d9443c01a7336-25167b03c4fmr129368425ad.0.1757386170866; Mon, 08 Sep 2025 19:49:30 -0700 (PDT) Received: from gnu-cfl-3.localdomain ([172.59.160.12]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-24b15780a11sm186898655ad.93.2025.09.08.19.49.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Sep 2025 19:49:30 -0700 (PDT) Received: from gnu-cfl-3.localdomain (localhost [127.0.0.1]) by gnu-cfl-3.localdomain (Postfix) with ESMTP id 8C00874027C; Mon, 08 Sep 2025 19:49:29 -0700 (PDT) From: "H.J. Lu" To: libc-alpha@sourceware.org Cc: sam@gentoo.org Subject: [PATCH] x86: Include in dl-cacheinfo.h Date: Mon, 8 Sep 2025 19:49:24 -0700 Message-ID: <20250909024924.3175818-1-hjl.tools@gmail.com> X-Mailer: git-send-email 2.51.0 MIME-Version: 1.0 X-Spam-Status: No, score=-3012.6 required=5.0 tests=BAYES_50, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, POISEN_SPAM_PILL, POISEN_SPAM_PILL_1, POISEN_SPAM_PILL_3, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces~patchwork=sourceware.org@sourceware.org On x86-64, when glibc is configured with --enable-stack-protector=all and compiled with -Os, ld.so crashes very early: (gdb) r --direct Starting program: /export/build/gnu/tools-build/glibc-gitlab/build-x86_64-linux/string/test-memswap --direct Program received signal SIGSEGV, Segmentation fault. 0x00007ffff7f41b0a in bsearch (__key=__key@entry=0x7fffffffda28, __base=__base@entry=0x7ffff7fca140 , __nmemb=__nmemb@entry=68, __size=__size@entry=8, __compar=__compar@entry=0x7ffff7f3b691 ) at ../bits/stdlib-bsearch.h:22 22 { (gdb) disass Dump of assembler code for function bsearch: 0x00007ffff7f41af0 <+0>: push %r15 0x00007ffff7f41af2 <+2>: mov %rcx,%r15 0x00007ffff7f41af5 <+5>: push %r14 0x00007ffff7f41af7 <+7>: push %r13 0x00007ffff7f41af9 <+9>: mov %rsi,%r13 0x00007ffff7f41afc <+12>: push %r12 0x00007ffff7f41afe <+14>: mov %rdi,%r12 0x00007ffff7f41b01 <+17>: push %rbp 0x00007ffff7f41b02 <+18>: mov %rdx,%rbp 0x00007ffff7f41b05 <+21>: push %rbx 0x00007ffff7f41b06 <+22>: sub $0x18,%rsp => 0x00007ffff7f41b0a <+26>: mov %fs:0x28,%r14 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ We can't use stack protector at this point. 0x00007ffff7f41b13 <+35>: mov %r14,0x8(%rsp) 0x00007ffff7f41b18 <+40>: mov %r8,%r14 0x00007ffff7f41b1b <+43>: test %rbp,%rbp 0x00007ffff7f41b1e <+46>: je 0x7ffff7f41b48 0x00007ffff7f41b20 <+48>: mov %rbp,%rbx 0x00007ffff7f41b23 <+51>: mov %r12,%rdi 0x00007ffff7f41b26 <+54>: shr $1,%rbx 0x00007ffff7f41b29 <+57>: imul %r15,%rbx 0x00007ffff7f41b2d <+61>: add %r13,%rbx 0x00007ffff7f41b30 <+64>: mov %rbx,%rsi (gdb) bt #0 0x00007ffff7f41b0a in bsearch (__key=__key@entry=0x7fffffffda28, __base=__base@entry=0x7ffff7fca140 , __nmemb=__nmemb@entry=68, __size=__size@entry=8, __compar=__compar@entry=0x7ffff7f3b691 ) at ../bits/stdlib-bsearch.h:22 #1 0x00007ffff7f3c1be in intel_check_word (name=188, value=1979933440, has_level_2=has_level_2@entry=0x7fffffffda7f, no_level_2_or_3=no_level_2_or_3@entry=0x7fffffffda7e, cpu_features=) at ../sysdeps/x86/dl-cacheinfo.h:217 #2 0x00007ffff7f3c29f in handle_intel (name=name@entry=188, cpu_features=) at ../sysdeps/x86/dl-cacheinfo.h:279 #3 0x00007ffff7f3ccf9 in dl_init_cacheinfo (cpu_features=) at ../sysdeps/x86/dl-cacheinfo.h:852 #4 init_cpu_features (cpu_features=) at ../sysdeps/x86/cpu-features.c:1153 #5 0x00007ffff7f3d6f9 in __libc_start_main_impl (main=0x7ffff7f396dc
, argc=2, argv=0x7fffffffdbe8, init=, fini=, rtld_fini=0x0, stack_end=0x7fffffffdbd8) at ../csu/libc-start.c:269 #6 0x00007ffff7f39901 in _start () at ../sysdeps/x86_64/start.S:115 (gdb) The problem is that since __USE_EXTERN_INLINES isn't defined with -Os, the inline bsearch in isn't available and the external bsearch is compiled with stack protector. Include in dl-cacheinfo.h fixed BZ #33374. Signed-off-by: H.J. Lu Reviewed-by: Sam James --- sysdeps/x86/dl-cacheinfo.h | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/sysdeps/x86/dl-cacheinfo.h b/sysdeps/x86/dl-cacheinfo.h index 6f9bb08a19..b6520bddaa 100644 --- a/sysdeps/x86/dl-cacheinfo.h +++ b/sysdeps/x86/dl-cacheinfo.h @@ -16,6 +16,16 @@ License along with the GNU C Library; if not, see . */ +/* NB: When glibc is compiled with -Os, isn't + included by since __USE_EXTERN_INLINES isn't defined. + Include here since + may be included more than once, rename bsearch to __bsearch and + use __bsearch, instead of bsearch, in intel_check_word which may + be called very early during startup. */ +#define bsearch __bsearch +#include +#undef bsearch + static const struct intel_02_cache_info { unsigned char idx; @@ -214,8 +224,9 @@ intel_check_word (int name, unsigned int value, bool *has_level_2, struct intel_02_cache_info search; search.idx = byte; - found = bsearch (&search, intel_02_known, nintel_02_known, - sizeof (intel_02_known[0]), intel_02_known_compare); + found = __bsearch (&search, intel_02_known, nintel_02_known, + sizeof (intel_02_known[0]), + intel_02_known_compare); if (found != NULL) { if (found->rel_name == folded_rel_name)