/
githubmirror
/
glibc
ОбзорДокументацияВойти
/
githubmirror
/
glibc
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
ДокументацияПоддержка
Политика конфиденциальностиПользовательское соглашениеПолитика использования «cookies»Согласие субъекта персональных данных
2026 ©
glibc/
manual/
..
examples

Update copyright dates with scripts/update-copyrights

7 месяцев назад
Makefile

Update copyright dates with scripts/update-copyrights

7 месяцев назад
README.pretty-printers

Remove support for lock elision.

9 месяцев назад
README.tunables

elf: Remove LD_HWCAP_MASK / tunable glibc.cpu.hwcap_mask

2 года назад
argp.texi

stdlib: Reinstate stable mergesort implementation on qsort

3 года назад
arith.texi

Change fromfp functions to return floating types following C23 (bug 28327)

9 месяцев назад
charset.texi

manual: __is_last is no longer part of iconv internals

2 года назад
check-deftype.sh

Update copyright dates with scripts/update-copyrights

7 месяцев назад
check-safety.sh

Update copyright dates with scripts/update-copyrights

7 месяцев назад
conf.texi

Modernize and fix doc’s “Date and Time” (BZ 31876)

2 года назад
contrib.texi

contrib.texi: Update

год назад
creature.texi

Add feature test macros for POSIX.1-2024.

9 месяцев назад
crypt.texi

crypt: Remove libcrypt support

3 года назад
ctype.texi

manual: Enhance documentation of the <ctype.h> functions

3 года назад
debug.texi

Add manual documentation for threads.h

8 лет назад
dir

..

21 год назад
dynlink.texi

aarch64: Add LD_DEBUG=security to log BTI and GCS warnings

7 месяцев назад
errno.texi

manual: fix some mistakes in the indices [BZ #24657]

10 месяцев назад
fdl-1.3.texi

Sync FDL from https://www.gnu.org/licenses/fdl-1.3.texi

6 лет назад
filesys.texi

fstat: add test and documentation for an edge case.

год назад
freemanuals.texi

Prefer https to http for gnu.org and fsf.org URLs

7 лет назад
getopt.texi

manual: Document getopt_long_only with single letter options (bug 32980)

год назад
header.texi

manual: Replace summary.awk with summary.pl.

9 лет назад
install-plain.texi

BZ #15941: Fix INSTALL file regeneration failure with makeinfo 5.x

13 лет назад
install.texi

INSTALL: Update newest tested binutils version

год назад
intro.texi

manual: Remove '.info' suffix in manual names passed to @ref [BZ #32962].

год назад
io.texi

manual/io: Fix swapped reading and writing phrase.

3 года назад
ipc.texi

manual: Consolidate POSIX Semaphores docs in Threads chapter

2 года назад
job.texi

manual/jobs.texi: Add missing @item EPERM for getpgid

3 года назад
lang.texi

manual: clarify defintions of floating point exponent bounds (bug 31518)

2 года назад
lgpl-2.1.texi

manual: don't use the FSF's old address in license text.

9 месяцев назад
libc-texinfo.sh

grep: egrep -> grep -E, fgrep -> grep -F

4 года назад
libc.texinfo

Update copyright dates with scripts/update-copyrights

7 месяцев назад
libcbook.texi

initial import

31 год назад
llio.texi

linux: Add openat2 (BZ 31664)

8 месяцев назад
locale.texi

stdlib: Reinstate stable mergesort implementation on qsort

3 года назад
macros.texi

manual: make @manpageurl more specific to each output

2 года назад
maint.texi

Implement C23 memset_explicit (bug 32378)

10 месяцев назад
math.texi

Better terminology for ‘long double’ in manual

7 месяцев назад
memory.texi

manual: Fix madvise typo in mseal documentation

8 месяцев назад
message.texi

manual: Refer to libc-alpha instead of a dead mailing list.

год назад
nss.texi

nss: Use "files dns" as the default for the hosts database (bug 28700)

5 лет назад
nsswitch.texi

Remove --enable-obsolete-nsl configure flag

6 лет назад
pattern.texi

manual: Document functions adopted by POSIX.1-2024.

год назад
pipe.texi

manual: Replace summary.awk with summary.pl.

9 лет назад
platform.texi

x86: Add support for AVX10 preset and vec size in cpu-features

3 года назад
probes.texi

elf: Add _dl_find_object function

5 лет назад
process.texi

manual: Document functions adopted by POSIX.1-2024.

год назад
resource.texi

manual: Fix duplicate 'consult' erratum

год назад
search.texi

Implement C23 const-preserving standard library macros

9 месяцев назад
setjmp.texi

manual: Fix missing reference to the mmap function [BZ #20473]

10 месяцев назад
signal.texi

manual: Document functions adopted by POSIX.1-2024.

год назад
socket.texi

manual: check the correct variable in SIOCATMARK example [BZ #33093]

10 месяцев назад
startup.texi

manual: describe syscall numbers not supported via syscall()

10 месяцев назад
stdbit.texi

manual: Fix up stdbit.texi

3 года назад
stdio-fp.c

update from main archive 970225

29 лет назад
stdio.texi

libio: null terminate the buffer upon initial allocation in getdelim

8 месяцев назад
string.texi

Implement C23 const-preserving standard library macros

9 месяцев назад
summary.pl

Update copyright dates with scripts/update-copyrights

7 месяцев назад
sysinfo.texi

manual: fix some mistakes in the indices [BZ #24657]

10 месяцев назад
syslog.texi

manual: Mark setlogmask as AS-unsafe and AC-unsafe.

год назад
terminal.texi

manual: Use @Theglibc{} at sentence start in terminal documentation

год назад
texinfo.tex

Update miscellaneous files from upstream sources.

8 лет назад
texis.awk

Correct close statement.

25 лет назад
threads.texi

stdlib: Do not define once_flag, ONCE_FLAG_INIT for C++

9 месяцев назад
time.texi

time: Add TIME_MONOTONIC, TIME_ACTIVE, and TIME_THREAD_ACTIVE

8 месяцев назад
tsort.awk

Update copyright dates with scripts/update-copyrights

7 месяцев назад
tunables.texi

aarch64: Support enforcing BTI on dependencies

8 месяцев назад
users.texi

crypt: Remove libcrypt support

3 года назад
xtract-typefun.awk

Make shebang interpreter directives consistent

11 лет назад
README.pretty-printers
README for the glibc Python pretty printers
===========================================
 
Pretty printers are gdb extensions that allow it to print useful, human-readable
information about a program's variables. For example, for a pthread_mutex_t
gdb would usually output something like this:
 
(gdb) print mutex
$1 = {
__data = {
__lock = 22020096,
__count = 0,
__owner = 0,
__nusers = 0,
__kind = 576,
__spins = 0,
__list = {
__prev = 0x0,
__next = 0x0
}
},
__size = "\000\000P\001", '\000' <repeats 12 times>, "@\002", '\000' <repeats 21 times>,
__align = 22020096
}
 
However, with a pretty printer gdb will output something like this:
 
(gdb) print mutex
$1 = pthread_mutex_t = {
Type = Normal,
Status = Not acquired,
Robust = No,
Shared = No,
Protocol = Priority protect,
Priority ceiling = 42
}
 
Before printing a value, gdb will first check if there's a pretty printer
registered for it. If there is, it'll use it, otherwise it'll print the value
as usual. Pretty printers can be registered in various ways; for our purposes
we register them for the current objfile by calling
gdb.printing.register_pretty_printer().
 
Currently our printers are based on gdb.RegexpCollectionPrettyPrinter, which
means they'll be triggered if the type of the variable we're printing matches
a given regular expression. For example, MutexPrinter will be triggered if
our variable's type matches the regexp '^pthread_mutex_t$'.
 
Besides the printers themselves, each module may have a constants file which the
printers will import. These constants are generated from C headers during the
build process, and need to be in the Python search path when loading the
printers.
 
 
Installing and loading
----------------------
 
The pretty printers and their constant files may be installed in different paths
for each distro, though gdb should be able to automatically load them by itself.
When in doubt, you can use the 'info pretty-printer' gdb command to list the
loaded pretty printers.
 
If the printers aren't automatically loaded for some reason, you should add the
following to your .gdbinit:
 
python
import sys
sys.path.insert(0, '/path/to/constants/file/directory')
end
 
source /path/to/printers.py
 
If you're building glibc manually, '/path/to/constants/file/directory' should be
'/path/to/glibc-build/submodule', where 'submodule' is e.g. nptl.
 
 
Testing
-------
 
The pretty printers come with a small test suite based on PExpect, which is a
Python module with Expect-like features for spawning and controlling interactive
programs. Each printer has a corresponding C program and a Python script
that uses PExpect to drive gdb through the program and compare its output to
the expected printer's.
 
The tests run on the glibc host, which is assumed to have both gdb and PExpect;
if any of those is absent the tests will fail with code 77 (UNSUPPORTED).
Native builds can be tested simply by doing 'make check'; cross builds must use
cross-test-ssh.sh as test-wrapper, like this:
 
make test-wrapper='/path/to/scripts/cross-test-ssh.sh user@host' check
 
(Remember to share the build system's filesystem with the glibc host's through
NFS or something similar).
 
Running 'make check' on a cross build will only compile the test programs,
without running the scripts.
 
 
Adding new pretty printers
--------------------------
 
Adding new pretty printers to glibc requires following these steps:
 
1. Identify which constants must be generated from C headers, and write the
corresponding .pysym file. See scripts/gen-as-const.py for more information
on how this works. The name of the .pysym file must be added to the
'gen-py-const-headers' variable in your submodule's Makefile (without the .pysym
extension).
 
2. Write the pretty printer code itself. For this you can follow the gdb
Python API documentation, and use the existing printers as examples. The printer
code must import the generated constants file (which will have the same name
as your .pysym file). The names of the pretty printer files must be added
to the 'pretty-printers' variable in your submodule's Makefile (without the .py
extension).
 
3. Write the unit tests for your pretty printers. The build system calls each
test script passing it the paths to the test program source, the test program
binary, and the printer files you added to 'pretty-printers' in the previous
step. The test scripts, in turn, must import scripts/test_printers_common
and call the init_test function passing it, among other things, the name of the
set of pretty printers to enable (as seen by running 'info pretty-printer').
You can use the existing unit tests as examples.
 
4. Add the names of the pretty printer tests to the 'tests-printers' variable
in your submodule's Makefile (without extensions). In addition, for each test
program you must define a corresponding CFLAGS-* and CPPFLAGS-* variable and
set it to $(CFLAGS-printers-tests) to ensure they're compiled correctly. For
example, test-foo-printer.c requires the following:
 
CFLAGS-test-foo-printer.c := $(CFLAGS-printers-tests)
CPPFLAGS-test-foo-printer.c := $(CFLAGS-printers-tests)
 
Finally, if your programs need to be linked with a specific library, you can add
its name to the 'tests-printers-libs' variable in your submodule's Makefile.
 
 
Known issues
------------
 
* Pretty printers are inherently coupled to the code they're targeting, thus
any changes to the target code must also update the corresponding printers.
On the plus side, the printer code itself may serve as a kind of documentation
for the target code.
 
* There's no guarantee that the information the pretty printers provide is
complete, i.e. some details might be left off. For example, the pthread_mutex_t
printers won't report whether a thread is spin-waiting in an attempt to acquire
the mutex.
 
* Older versions of the gdb Python API have a bug where
gdb.RegexpCollectionPrettyPrinter would not be able to get a value's real type
if it was typedef'd. This would cause gdb to ignore the pretty printers for
types like pthread_mutex_t, which is defined as:
 
typedef union
{
...
} pthread_mutex_t;
 
This was fixed in commit 1b588015839caafc608a6944a78aea170f5fb2f6, and released
as part of gdb 7.8. However, typedef'ing an already typedef'd type may cause
a similar issue, e.g.:
 
typedef pthread_mutex_t mutex;
mutex a_mutex;
 
Here, trying to print a_mutex won't trigger the pthread_mutex_t printer.
 
* The test programs must be compiled without optimizations. This is necessary
because the test scripts rely on the C code structure being preserved when
stepping through the programs. Things like aggressive instruction reordering
or optimizing variables out may make this kind of testing impossible.