diff options
author | Florian Weimer <fweimer@redhat.com> | 2025-07-28 14:16:52 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2025-07-28 16:06:54 +0200 |
commit | 620f0730f311635cd0e175a3ae4d0fc700c76366 (patch) | |
tree | bdb9070fefa2585b703d4e6f3589481d4658cdcb | |
parent | c4ff6e666b3d1b56456b3d7ad9cb787ad1264983 (diff) | |
download | glibc-620f0730f311635cd0e175a3ae4d0fc700c76366.zip glibc-620f0730f311635cd0e175a3ae4d0fc700c76366.tar.gz glibc-620f0730f311635cd0e175a3ae4d0fc700c76366.tar.bz2 |
elf: Compile _dl_debug_state separately (bug 33224)
This ensures that the compiler will not inline it, so that
debuggers which do not use the Systemtap probes can reliably
set a breakpoint on it.
Reviewed-by: Andreas K. Huettel <dilfridge@gentoo.org>
Tested-by: Andreas K. Huettel <dilfridge@gentoo.org>
-rw-r--r-- | elf/Makefile | 1 | ||||
-rw-r--r-- | elf/dl-debug.c | 11 | ||||
-rw-r--r-- | elf/dl-debug_state.c | 30 |
3 files changed, 31 insertions, 11 deletions
diff --git a/elf/Makefile b/elf/Makefile index 44b9f19..48aa0b5 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -57,6 +57,7 @@ dl-routines = \ dl-close \ dl-debug \ dl-debug-symbols \ + dl-debug_state \ dl-deps \ dl-exception \ dl-execstack \ diff --git a/elf/dl-debug.c b/elf/dl-debug.c index 38a5b9a..7052f4a 100644 --- a/elf/dl-debug.c +++ b/elf/dl-debug.c @@ -167,14 +167,3 @@ _dl_debug_initialize (ElfW(Addr) ldbase, Lmid_t ns) return &r->base; } - - -/* This function exists solely to have a breakpoint set on it by the - debugger. The debugger is supposed to find this function's address by - examining the r_brk member of struct r_debug, but GDB 4.15 in fact looks - for this particular symbol name in the PT_INTERP file. */ -void -_dl_debug_state (void) -{ -} -rtld_hidden_def (_dl_debug_state) diff --git a/elf/dl-debug_state.c b/elf/dl-debug_state.c new file mode 100644 index 0000000..40c134a --- /dev/null +++ b/elf/dl-debug_state.c @@ -0,0 +1,30 @@ +/* Debugger hook called after dynamic linker updates. + Copyright (C) 1996-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <ldsodefs.h> + +/* This function exists solely to have a breakpoint set on it by the + debugger. The debugger is supposed to find this function's address by + examining the r_brk member of struct r_debug, but GDB 4.15 in fact looks + for this particular symbol name in the PT_INTERP file. Therefore, + this function must not be inlined. */ +void +_dl_debug_state (void) +{ +} +rtld_hidden_def (_dl_debug_state) |