Date: Friday, February 3, 2023 @ 18:46:02
Author: freswa
Revision: 468162
archrelease: copy trunk to staging-x86_64
Added:
glibc/repos/staging-x86_64/PKGBUILD
(from rev 468161, glibc/trunk/PKGBUILD)
glibc/repos/staging-x86_64/cve-2023-25139.patch
(from rev 468161, glibc/trunk/cve-2023-25139.patch)
glibc/repos/staging-x86_64/glibc.install
(from rev 468161, glibc/trunk/glibc.install)
glibc/repos/staging-x86_64/keys/
glibc/repos/staging-x86_64/lib32-glibc.conf
(from rev 468161, glibc/trunk/lib32-glibc.conf)
glibc/repos/staging-x86_64/locale-gen
(from rev 468161, glibc/trunk/locale-gen)
glibc/repos/staging-x86_64/locale.gen.txt
(from rev 468161, glibc/trunk/locale.gen.txt)
glibc/repos/staging-x86_64/reenable_DT_HASH.patch
(from rev 468161, glibc/trunk/reenable_DT_HASH.patch)
glibc/repos/staging-x86_64/sdt-config.h
(from rev 468161, glibc/trunk/sdt-config.h)
glibc/repos/staging-x86_64/sdt.h
(from rev 468161, glibc/trunk/sdt.h)
Deleted:
glibc/repos/staging-x86_64/PKGBUILD
glibc/repos/staging-x86_64/glibc.install
glibc/repos/staging-x86_64/keys/
glibc/repos/staging-x86_64/lib32-glibc.conf
glibc/repos/staging-x86_64/locale-gen
glibc/repos/staging-x86_64/locale.gen.txt
glibc/repos/staging-x86_64/reenable_DT_HASH.patch
glibc/repos/staging-x86_64/sdt-config.h
glibc/repos/staging-x86_64/sdt.h
------------------------+
PKGBUILD | 457 ++++++++++++------------
cve-2023-25139.patch | 81 ++++
glibc.install | 10
lib32-glibc.conf | 2
locale-gen | 84 ++--
locale.gen.txt | 34 -
reenable_DT_HASH.patch | 290 +++++++--------
sdt-config.h | 12
sdt.h | 860 +++++++++++++++++++++++------------------------
9 files changed, 959 insertions(+), 871 deletions(-)
Deleted: PKGBUILD
===================================================================
--- PKGBUILD 2023-02-03 18:45:56 UTC (rev 468161)
+++ PKGBUILD 2023-02-03 18:46:02 UTC (rev 468162)
@@ -1,225 +0,0 @@
-# Maintainer: Giancarlo Razzolini <[email protected]>
-# Maintainer: Frederik Schwan <freswa at archlinux dot org>
-# Contributor: Bartłomiej Piotrowski <[email protected]>
-# Contributor: Allan McRae <[email protected]>
-
-# toolchain build order:
linux-api-headers->glibc->binutils->gcc->glibc->binutils->gcc
-# NOTE: valgrind requires rebuilt with each major glibc version
-
-pkgbase=glibc
-pkgname=(glibc lib32-glibc)
-pkgver=2.37
-_commit=a704fd9a133bfb10510e18702f48a6a9c88dbbd5
-pkgrel=1
-arch=(x86_64)
-url='https://www.gnu.org/software/libc'
-license=(GPL LGPL)
-makedepends=(git gd lib32-gcc-libs python)
-options=(staticlibs !lto)
-source=(git+https://sourceware.org/git/glibc.git#commit=${_commit}
- locale.gen.txt
- locale-gen
- lib32-glibc.conf
- sdt.h sdt-config.h
- reenable_DT_HASH.patch
-)
-validpgpkeys=(7273542B39962DF7B299931416792B4EA25340F8 # Carlos O'Donell
- BC7C7372637EC10C57D7AA6579C43DFBF1CF2187) # Siddhesh Poyarekar
-b2sums=('SKIP'
-
'c859bf2dfd361754c9e3bbd89f10de31f8e81fd95dc67b77d10cb44e23834b096ba3caa65fbc1bd655a8696c6450dfd5a096c476b3abf5c7e125123f97ae1a72'
-
'04fbb3b0b28705f41ccc6c15ed5532faf0105370f22133a2b49867e790df0491f5a1255220ff6ebab91a462f088d0cf299491b3eb8ea53534cb8638a213e46e3'
-
'7c265e6d36a5c0dff127093580827d15519b6c7205c2e1300e82f0fb5b9dd00b6accb40c56581f18179c4fbbc95bd2bf1b900ace867a83accde0969f7b609f8a'
-
'a6a5e2f2a627cc0d13d11a82458cfd0aa75ec1c5a3c7647e5d5a3bb1d4c0770887a3909bfda1236803d5bc9801bfd6251e13483e9adf797e4725332cd0d91a0e'
-
'214e995e84b342fe7b2a7704ce011b7c7fc74c2971f98eeb3b4e677b99c860addc0a7d91b8dc0f0b8be7537782ee331999e02ba48f4ccc1c331b60f27d715678'
-
'5fdd133c367af2f5454ea1eea7907de12166fb95eb59dbe33eae16aa9e26209b6585972bc1c80e36a0af4bfb04296acaf940ee78cd624cdcbab9669dff46c051')
-
-prepare() {
- mkdir -p glibc-build lib32-glibc-build
-
- [[ -d glibc-$pkgver ]] && ln -s glibc-$pkgver glibc
- cd glibc
-
- # re-enable `--hash-style=both` for building shared objects due to issues
with EPIC's EAC
- # which relies on DT_HASH to be present in these libs.
- # reconsider 2023-01
- patch -Np1 -i "${srcdir}"/reenable_DT_HASH.patch
-}
-
-build() {
- local _configure_flags=(
- --prefix=/usr
- --with-headers=/usr/include
- --with-bugurl=https://bugs.archlinux.org/
- --enable-bind-now
- --enable-cet
- --enable-kernel=4.4
- --enable-multi-arch
- --enable-stack-protector=strong
- --enable-systemtap
- --disable-crypt
- --disable-profile
- --disable-werror
- )
-
- cd "${srcdir}"/glibc-build
-
- echo "slibdir=/usr/lib" >> configparms
- echo "rtlddir=/usr/lib" >> configparms
- echo "sbindir=/usr/bin" >> configparms
- echo "rootsbindir=/usr/bin" >> configparms
-
- # Credits @allanmcrae
- #
https://github.com/allanmcrae/toolchain/blob/f18604d70c5933c31b51a320978711e4e6791cf1/glibc/PKGBUILD
- # remove fortify for building libraries
- CFLAGS=${CFLAGS/-Wp,-D_FORTIFY_SOURCE=2/}
-
- "${srcdir}"/glibc/configure \
- --libdir=/usr/lib \
- --libexecdir=/usr/lib \
- "${_configure_flags[@]}"
-
- # build libraries with fortify disabled
- echo "build-programs=no" >> configparms
- make -O
-
- # re-enable fortify for programs
- sed -i "/build-programs=/s#no#yes#" configparms
- echo "CFLAGS += -Wp,-D_FORTIFY_SOURCE=2" >> configparms
- make -O
-
- # build info pages manually for reproducibility
- make info
-
- cd "${srcdir}"/lib32-glibc-build
- export CC="gcc -m32 -mstackrealign"
- export CXX="g++ -m32 -mstackrealign"
-
- echo "slibdir=/usr/lib32" >> configparms
- echo "rtlddir=/usr/lib32" >> configparms
- echo "sbindir=/usr/bin" >> configparms
- echo "rootsbindir=/usr/bin" >> configparms
-
- "${srcdir}"/glibc/configure \
- --host=i686-pc-linux-gnu \
- --libdir=/usr/lib32 \
- --libexecdir=/usr/lib32 \
- "${_configure_flags[@]}"
-
- # build libraries with fortify disabled
- echo "build-programs=no" >> configparms
- make -O
-
- # re-enable fortify for programs
- sed -i "/build-programs=/s#no#yes#" configparms
- echo "CFLAGS += -Wp,-D_FORTIFY_SOURCE=2" >> configparms
- make -O
-
- # pregenerate C.UTF-8 locale until it is built into glibc
- # (https://sourceware.org/glibc/wiki/Proposals/C.UTF-8, FS#74864)-
- elf/ld.so --library-path "$PWD" locale/localedef -c -f
../glibc/localedata/charmaps/UTF-8 -i ../glibc/localedata/locales/C ../C.UTF-8/
-}
-
-# Credits for skip_test() and check() @allanmcrae
-#
https://github.com/allanmcrae/toolchain/blob/f18604d70c5933c31b51a320978711e4e6791cf1/glibc/PKGBUILD
-skip_test() {
- test=${1}
- file=${2}
- sed -i "s/\b${test}\b//" "${srcdir}"/glibc/${file}
-}
-
-check() {
- cd glibc-build
-
- # adjust/remove buildflags that cause false-positive testsuite failures
- sed -i '/FORTIFY/d' configparms #
failure to build testsuite
- sed -i 's/-Werror=format-security/-Wformat-security/' config.make #
failure to build testsuite
- sed -i '/CFLAGS/s/-fno-plt//' config.make # 16
failures
- sed -i '/CFLAGS/s/-fexceptions//' config.make # 1
failure
- LDFLAGS=${LDFLAGS/,-z,now/} # 10
failures
-
- # The following tests fail due to restrictions in the Arch build system
- # The correct fix is to add the following to the systemd-nspawn call:
- # --system-call-filter="@clock @memlock @pkey"
- skip_test test-errno-linux sysdeps/unix/sysv/linux/Makefile
- skip_test tst-mlock2 sysdeps/unix/sysv/linux/Makefile
- skip_test tst-ntp_gettime sysdeps/unix/sysv/linux/Makefile
- skip_test tst-ntp_gettimex sysdeps/unix/sysv/linux/Makefile
- skip_test tst-pkey sysdeps/unix/sysv/linux/Makefile
- skip_test tst-process_mrelease sysdeps/unix/sysv/linux/Makefile
- skip_test tst-adjtime time/Makefile
- skip_test tst-clock2 time/Makefile
-
- make -O check
-}
-
-package_glibc() {
- pkgdesc='GNU C Library'
- depends=('linux-api-headers>=4.10' tzdata filesystem)
- optdepends=('gd: for memusagestat'
- 'perl: for mtrace')
- install=glibc.install
- backup=(etc/gai.conf
- etc/locale.gen
- etc/nscd.conf)
-
- make -C glibc-build install_root="${pkgdir}" install
- rm -f "${pkgdir}"/etc/ld.so.cache
-
- # Shipped in tzdata
- rm -f "${pkgdir}"/usr/bin/{tzselect,zdump,zic}
-
- cd glibc
-
- install -dm755 "${pkgdir}"/usr/lib/{locale,systemd/system,tmpfiles.d}
- install -m644 nscd/nscd.conf "${pkgdir}"/etc/nscd.conf
- install -m644 nscd/nscd.service "${pkgdir}"/usr/lib/systemd/system
- install -m644 nscd/nscd.tmpfiles "${pkgdir}"/usr/lib/tmpfiles.d/nscd.conf
- install -dm755 "${pkgdir}"/var/db/nscd
-
- install -m644 posix/gai.conf "${pkgdir}"/etc/gai.conf
-
- install -m755 "${srcdir}"/locale-gen "${pkgdir}"/usr/bin
-
- # Create /etc/locale.gen
- install -m644 "${srcdir}"/locale.gen.txt "${pkgdir}"/etc/locale.gen
- sed -e '1,3d' -e 's|/| |g' -e 's|\\| |g' -e 's|^|#|g' \
- "${srcdir}"/glibc/localedata/SUPPORTED >> "${pkgdir}"/etc/locale.gen
-
- # Add SUPPORTED file to pkg
- sed -e '1,3d' -e 's|/| |g' -e 's| \\||g' \
- "${srcdir}"/glibc/localedata/SUPPORTED >
"${pkgdir}"/usr/share/i18n/SUPPORTED
-
- # install C.UTF-8 so that it is always available
- install -dm755 "${pkgdir}"/usr/lib/locale
- cp -r "${srcdir}"/C.UTF-8 -t "${pkgdir}"/usr/lib/locale
- sed -i '/#C\.UTF-8 /d' "${pkgdir}"/etc/locale.gen
-
- # Provide tracing probes to libstdc++ for exceptions, possibly for other
- # libraries too. Useful for gdb's catch command.
- install -Dm644 "${srcdir}"/sdt.h "${pkgdir}"/usr/include/sys/sdt.h
- install -Dm644 "${srcdir}"/sdt-config.h
"${pkgdir}"/usr/include/sys/sdt-config.h
-}
-
-package_lib32-glibc() {
- pkgdesc='GNU C Library (32-bit)'
- depends=("glibc=$pkgver")
- options+=('!emptydirs')
-
- cd lib32-glibc-build
-
- make install_root="${pkgdir}" install
- rm -rf "${pkgdir}"/{etc,sbin,usr/{bin,sbin,share},var}
-
- # We need to keep 32 bit specific header files
- find "${pkgdir}"/usr/include -type f -not -name '*-32.h' -delete
-
- # Dynamic linker
- install -d "${pkgdir}"/usr/lib
- ln -s ../lib32/ld-linux.so.2 "${pkgdir}"/usr/lib/
-
- # Add lib32 paths to the default library search path
- install -Dm644 "${srcdir}"/lib32-glibc.conf
"${pkgdir}"/etc/ld.so.conf.d/lib32-glibc.conf
-
- # Symlink /usr/lib32/locale to /usr/lib/locale
- ln -s ../lib/locale "${pkgdir}"/usr/lib32/locale
-}
Copied: glibc/repos/staging-x86_64/PKGBUILD (from rev 468161,
glibc/trunk/PKGBUILD)
===================================================================
--- PKGBUILD (rev 0)
+++ PKGBUILD 2023-02-03 18:46:02 UTC (rev 468162)
@@ -0,0 +1,232 @@
+# Maintainer: Giancarlo Razzolini <[email protected]>
+# Maintainer: Frederik Schwan <freswa at archlinux dot org>
+# Contributor: Bartłomiej Piotrowski <[email protected]>
+# Contributor: Allan McRae <[email protected]>
+
+# toolchain build order:
linux-api-headers->glibc->binutils->gcc->glibc->binutils->gcc
+# NOTE: valgrind requires rebuilt with each major glibc version
+
+pkgbase=glibc
+pkgname=(glibc lib32-glibc)
+pkgver=2.37
+_commit=a704fd9a133bfb10510e18702f48a6a9c88dbbd5
+pkgrel=2
+arch=(x86_64)
+url='https://www.gnu.org/software/libc'
+license=(GPL LGPL)
+makedepends=(git gd lib32-gcc-libs python)
+options=(staticlibs !lto)
+source=(git+https://sourceware.org/git/glibc.git#commit=${_commit}
+ locale.gen.txt
+ locale-gen
+ lib32-glibc.conf
+ sdt.h sdt-config.h
+ reenable_DT_HASH.patch
+ cve-2023-25139.patch
+)
+validpgpkeys=(7273542B39962DF7B299931416792B4EA25340F8 # Carlos O'Donell
+ BC7C7372637EC10C57D7AA6579C43DFBF1CF2187) # Siddhesh Poyarekar
+b2sums=('SKIP'
+
'c859bf2dfd361754c9e3bbd89f10de31f8e81fd95dc67b77d10cb44e23834b096ba3caa65fbc1bd655a8696c6450dfd5a096c476b3abf5c7e125123f97ae1a72'
+
'04fbb3b0b28705f41ccc6c15ed5532faf0105370f22133a2b49867e790df0491f5a1255220ff6ebab91a462f088d0cf299491b3eb8ea53534cb8638a213e46e3'
+
'7c265e6d36a5c0dff127093580827d15519b6c7205c2e1300e82f0fb5b9dd00b6accb40c56581f18179c4fbbc95bd2bf1b900ace867a83accde0969f7b609f8a'
+
'a6a5e2f2a627cc0d13d11a82458cfd0aa75ec1c5a3c7647e5d5a3bb1d4c0770887a3909bfda1236803d5bc9801bfd6251e13483e9adf797e4725332cd0d91a0e'
+
'214e995e84b342fe7b2a7704ce011b7c7fc74c2971f98eeb3b4e677b99c860addc0a7d91b8dc0f0b8be7537782ee331999e02ba48f4ccc1c331b60f27d715678'
+
'5fdd133c367af2f5454ea1eea7907de12166fb95eb59dbe33eae16aa9e26209b6585972bc1c80e36a0af4bfb04296acaf940ee78cd624cdcbab9669dff46c051'
+
'917b876dbc2bc23d15ffedb56bfb51611f8c7a5b8321281a2cf488d442a45c38fc754e857573843042bf7cc3df87d4271bc723acd52aab4c8fc3c8f07d41456e')
+
+prepare() {
+ mkdir -p glibc-build lib32-glibc-build
+
+ [[ -d glibc-$pkgver ]] && ln -s glibc-$pkgver glibc
+ cd glibc
+
+ # Re-enable `--hash-style=both` for building shared objects due to issues
with EPIC's EAC
+ # which relies on DT_HASH to be present in these libs.
+ # reconsider 2023-01
+ patch -Np1 -i "${srcdir}"/reenable_DT_HASH.patch
+
+ # Add a temporary patch for cve 2023-25139 until a fix has been backported.
+ # Technical the fix itself is complete but the test cases aren't.
+ # See https://sourceware.org/bugzilla/show_bug.cgi?id=30068
+ patch -Np1 -i "${srcdir}"/cve-2023-25139.patch
+}
+
+build() {
+ local _configure_flags=(
+ --prefix=/usr
+ --with-headers=/usr/include
+ --with-bugurl=https://bugs.archlinux.org/
+ --enable-bind-now
+ --enable-cet
+ --enable-kernel=4.4
+ --enable-multi-arch
+ --enable-stack-protector=strong
+ --enable-systemtap
+ --disable-crypt
+ --disable-profile
+ --disable-werror
+ )
+
+ cd "${srcdir}"/glibc-build
+
+ echo "slibdir=/usr/lib" >> configparms
+ echo "rtlddir=/usr/lib" >> configparms
+ echo "sbindir=/usr/bin" >> configparms
+ echo "rootsbindir=/usr/bin" >> configparms
+
+ # Credits @allanmcrae
+ #
https://github.com/allanmcrae/toolchain/blob/f18604d70c5933c31b51a320978711e4e6791cf1/glibc/PKGBUILD
+ # remove fortify for building libraries
+ CFLAGS=${CFLAGS/-Wp,-D_FORTIFY_SOURCE=2/}
+
+ "${srcdir}"/glibc/configure \
+ --libdir=/usr/lib \
+ --libexecdir=/usr/lib \
+ "${_configure_flags[@]}"
+
+ # build libraries with fortify disabled
+ echo "build-programs=no" >> configparms
+ make -O
+
+ # re-enable fortify for programs
+ sed -i "/build-programs=/s#no#yes#" configparms
+ echo "CFLAGS += -Wp,-D_FORTIFY_SOURCE=2" >> configparms
+ make -O
+
+ # build info pages manually for reproducibility
+ make info
+
+ cd "${srcdir}"/lib32-glibc-build
+ export CC="gcc -m32 -mstackrealign"
+ export CXX="g++ -m32 -mstackrealign"
+
+ echo "slibdir=/usr/lib32" >> configparms
+ echo "rtlddir=/usr/lib32" >> configparms
+ echo "sbindir=/usr/bin" >> configparms
+ echo "rootsbindir=/usr/bin" >> configparms
+
+ "${srcdir}"/glibc/configure \
+ --host=i686-pc-linux-gnu \
+ --libdir=/usr/lib32 \
+ --libexecdir=/usr/lib32 \
+ "${_configure_flags[@]}"
+
+ # build libraries with fortify disabled
+ echo "build-programs=no" >> configparms
+ make -O
+
+ # re-enable fortify for programs
+ sed -i "/build-programs=/s#no#yes#" configparms
+ echo "CFLAGS += -Wp,-D_FORTIFY_SOURCE=2" >> configparms
+ make -O
+
+ # pregenerate C.UTF-8 locale until it is built into glibc
+ # (https://sourceware.org/glibc/wiki/Proposals/C.UTF-8, FS#74864)-
+ elf/ld.so --library-path "$PWD" locale/localedef -c -f
../glibc/localedata/charmaps/UTF-8 -i ../glibc/localedata/locales/C ../C.UTF-8/
+}
+
+# Credits for skip_test() and check() @allanmcrae
+#
https://github.com/allanmcrae/toolchain/blob/f18604d70c5933c31b51a320978711e4e6791cf1/glibc/PKGBUILD
+skip_test() {
+ test=${1}
+ file=${2}
+ sed -i "s/\b${test}\b//" "${srcdir}"/glibc/${file}
+}
+
+check() {
+ cd glibc-build
+
+ # adjust/remove buildflags that cause false-positive testsuite failures
+ sed -i '/FORTIFY/d' configparms #
failure to build testsuite
+ sed -i 's/-Werror=format-security/-Wformat-security/' config.make #
failure to build testsuite
+ sed -i '/CFLAGS/s/-fno-plt//' config.make # 16
failures
+ sed -i '/CFLAGS/s/-fexceptions//' config.make # 1
failure
+ LDFLAGS=${LDFLAGS/,-z,now/} # 10
failures
+
+ # The following tests fail due to restrictions in the Arch build system
+ # The correct fix is to add the following to the systemd-nspawn call:
+ # --system-call-filter="@clock @memlock @pkey"
+ skip_test test-errno-linux sysdeps/unix/sysv/linux/Makefile
+ skip_test tst-mlock2 sysdeps/unix/sysv/linux/Makefile
+ skip_test tst-ntp_gettime sysdeps/unix/sysv/linux/Makefile
+ skip_test tst-ntp_gettimex sysdeps/unix/sysv/linux/Makefile
+ skip_test tst-pkey sysdeps/unix/sysv/linux/Makefile
+ skip_test tst-process_mrelease sysdeps/unix/sysv/linux/Makefile
+ skip_test tst-adjtime time/Makefile
+ skip_test tst-clock2 time/Makefile
+
+ make -O check
+}
+
+package_glibc() {
+ pkgdesc='GNU C Library'
+ depends=('linux-api-headers>=4.10' tzdata filesystem)
+ optdepends=('gd: for memusagestat'
+ 'perl: for mtrace')
+ install=glibc.install
+ backup=(etc/gai.conf
+ etc/locale.gen
+ etc/nscd.conf)
+
+ make -C glibc-build install_root="${pkgdir}" install
+ rm -f "${pkgdir}"/etc/ld.so.cache
+
+ # Shipped in tzdata
+ rm -f "${pkgdir}"/usr/bin/{tzselect,zdump,zic}
+
+ cd glibc
+
+ install -dm755 "${pkgdir}"/usr/lib/{locale,systemd/system,tmpfiles.d}
+ install -m644 nscd/nscd.conf "${pkgdir}"/etc/nscd.conf
+ install -m644 nscd/nscd.service "${pkgdir}"/usr/lib/systemd/system
+ install -m644 nscd/nscd.tmpfiles "${pkgdir}"/usr/lib/tmpfiles.d/nscd.conf
+ install -dm755 "${pkgdir}"/var/db/nscd
+
+ install -m644 posix/gai.conf "${pkgdir}"/etc/gai.conf
+
+ install -m755 "${srcdir}"/locale-gen "${pkgdir}"/usr/bin
+
+ # Create /etc/locale.gen
+ install -m644 "${srcdir}"/locale.gen.txt "${pkgdir}"/etc/locale.gen
+ sed -e '1,3d' -e 's|/| |g' -e 's|\\| |g' -e 's|^|#|g' \
+ "${srcdir}"/glibc/localedata/SUPPORTED >> "${pkgdir}"/etc/locale.gen
+
+ # Add SUPPORTED file to pkg
+ sed -e '1,3d' -e 's|/| |g' -e 's| \\||g' \
+ "${srcdir}"/glibc/localedata/SUPPORTED >
"${pkgdir}"/usr/share/i18n/SUPPORTED
+
+ # install C.UTF-8 so that it is always available
+ install -dm755 "${pkgdir}"/usr/lib/locale
+ cp -r "${srcdir}"/C.UTF-8 -t "${pkgdir}"/usr/lib/locale
+ sed -i '/#C\.UTF-8 /d' "${pkgdir}"/etc/locale.gen
+
+ # Provide tracing probes to libstdc++ for exceptions, possibly for other
+ # libraries too. Useful for gdb's catch command.
+ install -Dm644 "${srcdir}"/sdt.h "${pkgdir}"/usr/include/sys/sdt.h
+ install -Dm644 "${srcdir}"/sdt-config.h
"${pkgdir}"/usr/include/sys/sdt-config.h
+}
+
+package_lib32-glibc() {
+ pkgdesc='GNU C Library (32-bit)'
+ depends=("glibc=$pkgver")
+ options+=('!emptydirs')
+
+ cd lib32-glibc-build
+
+ make install_root="${pkgdir}" install
+ rm -rf "${pkgdir}"/{etc,sbin,usr/{bin,sbin,share},var}
+
+ # We need to keep 32 bit specific header files
+ find "${pkgdir}"/usr/include -type f -not -name '*-32.h' -delete
+
+ # Dynamic linker
+ install -d "${pkgdir}"/usr/lib
+ ln -s ../lib32/ld-linux.so.2 "${pkgdir}"/usr/lib/
+
+ # Add lib32 paths to the default library search path
+ install -Dm644 "${srcdir}"/lib32-glibc.conf
"${pkgdir}"/etc/ld.so.conf.d/lib32-glibc.conf
+
+ # Symlink /usr/lib32/locale to /usr/lib/locale
+ ln -s ../lib/locale "${pkgdir}"/usr/lib32/locale
+}
Copied: glibc/repos/staging-x86_64/cve-2023-25139.patch (from rev 468161,
glibc/trunk/cve-2023-25139.patch)
===================================================================
--- cve-2023-25139.patch (rev 0)
+++ cve-2023-25139.patch 2023-02-03 18:46:02 UTC (rev 468162)
@@ -0,0 +1,81 @@
+This is a partial fix for mishandling of grouping when formatting
+integers. It properly computes the width in presence of grouping
+characteres when the precision is larger than the number of significant
+digits.
+---
+ stdio-common/Makefile | 1 +
+ stdio-common/tst-grouping3.c | 37 +++++++++++++++++++++++++++++
+ stdio-common/vfprintf-process-arg.c | 2 +-
+ 3 files changed, 39 insertions(+), 1 deletion(-)
+ create mode 100644 stdio-common/tst-grouping3.c
+
+diff --git a/stdio-common/Makefile b/stdio-common/Makefile
+index 6e9d104524..b46d932a20 100644
+--- a/stdio-common/Makefile
++++ b/stdio-common/Makefile
+@@ -195,6 +195,7 @@ tests := \
+ tst-gets \
+ tst-grouping \
+ tst-grouping2 \
++ tst-grouping3 \
+ tst-long-dbl-fphex \
+ tst-memstream-string \
+ tst-obprintf \
+diff --git a/stdio-common/tst-grouping3.c b/stdio-common/tst-grouping3.c
+new file mode 100644
+index 0000000000..0031ad4010
+--- /dev/null
++++ b/stdio-common/tst-grouping3.c
+@@ -0,0 +1,37 @@
++/* Test printf with grouping and padding (bug 23432)
++ Copyright (C) 2023 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 <locale.h>
++#include <stdio.h>
++#include <support/check.h>
++#include <support/support.h>
++
++static int
++do_test (void)
++{
++ char buf[80];
++
++ xsetlocale (LC_NUMERIC, "de_DE.UTF-8");
++
++ sprintf (buf, "%+-'13.9d", 1234567);
++ TEST_COMPARE_STRING (buf, "+001.234.567 ");
++
++ return 0;
++}
++
++#include <support/test-driver.c>
+diff --git a/stdio-common/vfprintf-process-arg.c
b/stdio-common/vfprintf-process-arg.c
+index 2c651946df..cd3eaf5c0c 100644
+--- a/stdio-common/vfprintf-process-arg.c
++++ b/stdio-common/vfprintf-process-arg.c
+@@ -257,7 +257,7 @@ LABEL (unsigned_number): /* Unsigned number of base
BASE. */
+ width -= 2;
+ }
+
+- width -= workend - string + prec;
++ width -= number_length + prec;
+
+ Xprintf_buffer_pad (buf, L_('0'), prec);
+
+--
+2.39.1
Deleted: glibc.install
===================================================================
--- glibc.install 2023-02-03 18:45:56 UTC (rev 468161)
+++ glibc.install 2023-02-03 18:46:02 UTC (rev 468162)
@@ -1,5 +0,0 @@
-post_upgrade() {
- locale-gen
-
- ldconfig -r .
-}
Copied: glibc/repos/staging-x86_64/glibc.install (from rev 468161,
glibc/trunk/glibc.install)
===================================================================
--- glibc.install (rev 0)
+++ glibc.install 2023-02-03 18:46:02 UTC (rev 468162)
@@ -0,0 +1,5 @@
+post_upgrade() {
+ locale-gen
+
+ ldconfig -r .
+}
Deleted: lib32-glibc.conf
===================================================================
--- lib32-glibc.conf 2023-02-03 18:45:56 UTC (rev 468161)
+++ lib32-glibc.conf 2023-02-03 18:46:02 UTC (rev 468162)
@@ -1 +0,0 @@
-/usr/lib32
Copied: glibc/repos/staging-x86_64/lib32-glibc.conf (from rev 468161,
glibc/trunk/lib32-glibc.conf)
===================================================================
--- lib32-glibc.conf (rev 0)
+++ lib32-glibc.conf 2023-02-03 18:46:02 UTC (rev 468162)
@@ -0,0 +1 @@
+/usr/lib32
Deleted: locale-gen
===================================================================
--- locale-gen 2023-02-03 18:45:56 UTC (rev 468161)
+++ locale-gen 2023-02-03 18:46:02 UTC (rev 468162)
@@ -1,42 +0,0 @@
-#!/bin/sh
-
-set -e
-
-LOCALEGEN=/etc/locale.gen
-LOCALES=/usr/share/i18n/locales
-if [ -n "$POSIXLY_CORRECT" ]; then
- unset POSIXLY_CORRECT
-fi
-
-
-[ -f $LOCALEGEN -a -s $LOCALEGEN ] || exit 0;
-
-# Remove all old locale dir and locale-archive before generating new
-# locale data.
-rm -rf /usr/lib/locale/locale-archive || true
-
-umask 022
-
-is_entry_ok() {
- if [ -n "$locale" -a -n "$charset" ] ; then
- true
- else
- echo "error: Bad entry '$locale $charset'"
- false
- fi
-}
-
-echo "Generating locales..."
-while read locale charset; do \
- case $locale in \#*) continue;; "") continue;; esac; \
- is_entry_ok || continue
- echo -n " `echo $locale | sed 's/\([^.\@]*\).*/\1/'`"; \
- echo -n ".$charset"; \
- echo -n `echo $locale | sed 's/\([^\@]*\)\(\@.*\)*/\2/'`; \
- echo -n '...'; \
- if [ -f $LOCALES/$locale ]; then input=$locale; else \
- input=`echo $locale | sed 's/\([^.]*\)[^@]*\(.*\)/\1\2/'`; fi; \
- localedef -i $input -c -f $charset -A /usr/share/locale/locale.alias
$locale; \
- echo ' done'; \
-done < $LOCALEGEN
-echo "Generation complete."
Copied: glibc/repos/staging-x86_64/locale-gen (from rev 468161,
glibc/trunk/locale-gen)
===================================================================
--- locale-gen (rev 0)
+++ locale-gen 2023-02-03 18:46:02 UTC (rev 468162)
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+set -e
+
+LOCALEGEN=/etc/locale.gen
+LOCALES=/usr/share/i18n/locales
+if [ -n "$POSIXLY_CORRECT" ]; then
+ unset POSIXLY_CORRECT
+fi
+
+
+[ -f $LOCALEGEN -a -s $LOCALEGEN ] || exit 0;
+
+# Remove all old locale dir and locale-archive before generating new
+# locale data.
+rm -rf /usr/lib/locale/locale-archive || true
+
+umask 022
+
+is_entry_ok() {
+ if [ -n "$locale" -a -n "$charset" ] ; then
+ true
+ else
+ echo "error: Bad entry '$locale $charset'"
+ false
+ fi
+}
+
+echo "Generating locales..."
+while read locale charset; do \
+ case $locale in \#*) continue;; "") continue;; esac; \
+ is_entry_ok || continue
+ echo -n " `echo $locale | sed 's/\([^.\@]*\).*/\1/'`"; \
+ echo -n ".$charset"; \
+ echo -n `echo $locale | sed 's/\([^\@]*\)\(\@.*\)*/\2/'`; \
+ echo -n '...'; \
+ if [ -f $LOCALES/$locale ]; then input=$locale; else \
+ input=`echo $locale | sed 's/\([^.]*\)[^@]*\(.*\)/\1\2/'`; fi; \
+ localedef -i $input -c -f $charset -A /usr/share/locale/locale.alias
$locale; \
+ echo ' done'; \
+done < $LOCALEGEN
+echo "Generation complete."
Deleted: locale.gen.txt
===================================================================
--- locale.gen.txt 2023-02-03 18:45:56 UTC (rev 468161)
+++ locale.gen.txt 2023-02-03 18:46:02 UTC (rev 468162)
@@ -1,17 +0,0 @@
-# Configuration file for locale-gen
-#
-# lists of locales that are to be generated by the locale-gen command.
-#
-# Each line is of the form:
-#
-# <locale> <charset>
-#
-# where <locale> is one of the locales given in /usr/share/i18n/locales
-# and <charset> is one of the character sets listed in
/usr/share/i18n/charmaps
-#
-# The locale-gen command will generate all the locales,
-# placing them in /usr/lib/locale.
-#
-# A list of supported locales is given in /usr/share/i18n/SUPPORTED
-# and is included in this file. Uncomment the needed locales below.
-#
Copied: glibc/repos/staging-x86_64/locale.gen.txt (from rev 468161,
glibc/trunk/locale.gen.txt)
===================================================================
--- locale.gen.txt (rev 0)
+++ locale.gen.txt 2023-02-03 18:46:02 UTC (rev 468162)
@@ -0,0 +1,17 @@
+# Configuration file for locale-gen
+#
+# lists of locales that are to be generated by the locale-gen command.
+#
+# Each line is of the form:
+#
+# <locale> <charset>
+#
+# where <locale> is one of the locales given in /usr/share/i18n/locales
+# and <charset> is one of the character sets listed in
/usr/share/i18n/charmaps
+#
+# The locale-gen command will generate all the locales,
+# placing them in /usr/lib/locale.
+#
+# A list of supported locales is given in /usr/share/i18n/SUPPORTED
+# and is included in this file. Uncomment the needed locales below.
+#
Deleted: reenable_DT_HASH.patch
===================================================================
--- reenable_DT_HASH.patch 2023-02-03 18:45:56 UTC (rev 468161)
+++ reenable_DT_HASH.patch 2023-02-03 18:46:02 UTC (rev 468162)
@@ -1,145 +0,0 @@
-From e47de5cb2d4dbecb58f569ed241e8e95c568f03c Mon Sep 17 00:00:00 2001
-From: Florian Weimer <[email protected]>
-Date: Fri, 29 Apr 2022 16:37:51 +0200
-Subject: [PATCH] Do not use --hash-style=both for building glibc shared
- objects
-
-The comment indicates that --hash-style=both was used to maintain
-compatibility with static dlopen, but we had many internal ABI
-changes since then, so this compatiblity does not add value anymore.
-
-Reviewed-by: Carlos O'Donell <[email protected]>
----
- Makeconfig | 9 +++++++++
- Makerules | 7 +++++++
- config.make.in | 1 +
- configure | 28 ++++++++++++++++++++++++++++
- configure.ac | 16 ++++++++++++++++
- 5 files changed, 61 insertions(+)
-
-diff --git b/Makeconfig a/Makeconfig
-index 760f14e92f..0aa5fb0099 100644
---- b/Makeconfig
-+++ a/Makeconfig
-@@ -362,6 +362,15 @@ relro-LDFLAGS = -Wl,-z,relro
- LDFLAGS.so += $(relro-LDFLAGS)
- LDFLAGS-rtld += $(relro-LDFLAGS)
-
-+ifeq (yes,$(have-hash-style))
-+# For the time being we unconditionally use 'both'. At some time we
-+# should declare statically linked code as 'out of luck' and compile
-+# with --hash-style=gnu only.
-+hashstyle-LDFLAGS = -Wl,--hash-style=both
-+LDFLAGS.so += $(hashstyle-LDFLAGS)
-+LDFLAGS-rtld += $(hashstyle-LDFLAGS)
-+endif
-+
- ifeq (no,$(build-pie-default))
- pie-default = $(no-pie-ccflag)
- else # build-pie-default
-diff --git b/Makerules a/Makerules
-index 354528b8c7..428464f092 100644
---- b/Makerules
-+++ a/Makerules
-@@ -557,6 +557,13 @@ $(common-objpfx)shlib.lds: $(common-objpfx)config.make
$(..)Makerules
- -Wl,--verbose 2>/dev/null | \
- sed > $@T \
- -e '/^=========/,/^=========/!d;/^=========/d' \
-+ $(if $(filter yes,$(have-hash-style)), \
-+ -e 's/^.*\.gnu\.hash[ ]*:.*$$/ .note.ABI-tag : {
*(.note.ABI-tag) } &/' \
-+ -e '/^[ ]*\.hash[ ]*:.*$$/{h;d;}' \
-+ -e '/DATA_SEGMENT_ALIGN/{H;g}' \
-+ , \
-+ -e 's/^.*\.hash[ ]*:.*$$/ .note.ABI-tag : {
*(.note.ABI-tag) } &/' \
-+ ) \
- -e 's/^.*\*(\.dynbss).*$$/& \
- PROVIDE(__start___libc_freeres_ptrs = .); \
- *(__libc_freeres_ptrs) \
-diff --git b/config.make.in a/config.make.in
-index fff4c78dd0..bf728c71c0 100644
---- b/config.make.in
-+++ a/config.make.in
-@@ -70,6 +70,7 @@ have-libcap = @have_libcap@
- have-cc-with-libunwind = @libc_cv_cc_with_libunwind@
- fno-unit-at-a-time = @fno_unit_at_a_time@
- bind-now = @bindnow@
-+have-hash-style = @libc_cv_hashstyle@
- use-default-link = @use_default_link@
- have-cxx-thread_local = @libc_cv_cxx_thread_local@
- have-loop-to-function = @libc_cv_cc_loop_to_function@
-diff --git b/configure a/configure
-index 716dc041b6..5a730dc5fc 100755
---- b/configure
-+++ a/configure
-@@ -622,6 +622,7 @@ libc_cv_cc_nofma
- libc_cv_mtls_dialect_gnu2
- fno_unit_at_a_time
- libc_cv_has_glob_dat
-+libc_cv_hashstyle
- libc_cv_fpie
- libc_cv_z_execstack
- ASFLAGS_config
-@@ -6193,6 +6194,33 @@ $as_echo "$libc_cv_fpie" >&6; }
-
-
-
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --hash-style option" >&5
-+$as_echo_n "checking for --hash-style option... " >&6; }
-+if ${libc_cv_hashstyle+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ cat > conftest.c <<EOF
-+int _start (void) { return 42; }
-+EOF
-+if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp
-+ -fPIC -shared -o conftest.so conftest.c
-+ -Wl,--hash-style=both -nostdlib 1>&5'
-+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+ test $ac_status = 0; }; }
-+then
-+ libc_cv_hashstyle=yes
-+else
-+ libc_cv_hashstyle=no
-+fi
-+rm -f conftest*
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_hashstyle" >&5
-+$as_echo "$libc_cv_hashstyle" >&6; }
-+
-+
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLOB_DAT reloc" >&5
- $as_echo_n "checking for GLOB_DAT reloc... " >&6; }
- if ${libc_cv_has_glob_dat+:} false; then :
-diff --git b/configure.ac a/configure.ac
-index d08ad4d64e..a045f6608e 100644
---- b/configure.ac
-+++ a/configure.ac
-@@ -1360,6 +1360,22 @@ LIBC_TRY_CC_OPTION([-fpie], [libc_cv_fpie=yes],
[libc_cv_fpie=no])
-
- AC_SUBST(libc_cv_fpie)
-
-+AC_CACHE_CHECK(for --hash-style option,
-+ libc_cv_hashstyle, [dnl
-+cat > conftest.c <<EOF
-+int _start (void) { return 42; }
-+EOF
-+if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp
-+ -fPIC -shared -o conftest.so conftest.c
-+ -Wl,--hash-style=both -nostdlib
1>&AS_MESSAGE_LOG_FD])
-+then
-+ libc_cv_hashstyle=yes
-+else
-+ libc_cv_hashstyle=no
-+fi
-+rm -f conftest*])
-+AC_SUBST(libc_cv_hashstyle)
-+
- AC_CACHE_CHECK(for GLOB_DAT reloc,
- libc_cv_has_glob_dat, [dnl
- cat > conftest.c <<EOF
---
-2.37.1
-
Copied: glibc/repos/staging-x86_64/reenable_DT_HASH.patch (from rev 468161,
glibc/trunk/reenable_DT_HASH.patch)
===================================================================
--- reenable_DT_HASH.patch (rev 0)
+++ reenable_DT_HASH.patch 2023-02-03 18:46:02 UTC (rev 468162)
@@ -0,0 +1,145 @@
+From e47de5cb2d4dbecb58f569ed241e8e95c568f03c Mon Sep 17 00:00:00 2001
+From: Florian Weimer <[email protected]>
+Date: Fri, 29 Apr 2022 16:37:51 +0200
+Subject: [PATCH] Do not use --hash-style=both for building glibc shared
+ objects
+
+The comment indicates that --hash-style=both was used to maintain
+compatibility with static dlopen, but we had many internal ABI
+changes since then, so this compatiblity does not add value anymore.
+
+Reviewed-by: Carlos O'Donell <[email protected]>
+---
+ Makeconfig | 9 +++++++++
+ Makerules | 7 +++++++
+ config.make.in | 1 +
+ configure | 28 ++++++++++++++++++++++++++++
+ configure.ac | 16 ++++++++++++++++
+ 5 files changed, 61 insertions(+)
+
+diff --git b/Makeconfig a/Makeconfig
+index 760f14e92f..0aa5fb0099 100644
+--- b/Makeconfig
++++ a/Makeconfig
+@@ -362,6 +362,15 @@ relro-LDFLAGS = -Wl,-z,relro
+ LDFLAGS.so += $(relro-LDFLAGS)
+ LDFLAGS-rtld += $(relro-LDFLAGS)
+
++ifeq (yes,$(have-hash-style))
++# For the time being we unconditionally use 'both'. At some time we
++# should declare statically linked code as 'out of luck' and compile
++# with --hash-style=gnu only.
++hashstyle-LDFLAGS = -Wl,--hash-style=both
++LDFLAGS.so += $(hashstyle-LDFLAGS)
++LDFLAGS-rtld += $(hashstyle-LDFLAGS)
++endif
++
+ ifeq (no,$(build-pie-default))
+ pie-default = $(no-pie-ccflag)
+ else # build-pie-default
+diff --git b/Makerules a/Makerules
+index 354528b8c7..428464f092 100644
+--- b/Makerules
++++ a/Makerules
+@@ -557,6 +557,13 @@ $(common-objpfx)shlib.lds: $(common-objpfx)config.make
$(..)Makerules
+ -Wl,--verbose 2>/dev/null | \
+ sed > $@T \
+ -e '/^=========/,/^=========/!d;/^=========/d' \
++ $(if $(filter yes,$(have-hash-style)), \
++ -e 's/^.*\.gnu\.hash[ ]*:.*$$/ .note.ABI-tag : {
*(.note.ABI-tag) } &/' \
++ -e '/^[ ]*\.hash[ ]*:.*$$/{h;d;}' \
++ -e '/DATA_SEGMENT_ALIGN/{H;g}' \
++ , \
++ -e 's/^.*\.hash[ ]*:.*$$/ .note.ABI-tag : {
*(.note.ABI-tag) } &/' \
++ ) \
+ -e 's/^.*\*(\.dynbss).*$$/& \
+ PROVIDE(__start___libc_freeres_ptrs = .); \
+ *(__libc_freeres_ptrs) \
+diff --git b/config.make.in a/config.make.in
+index fff4c78dd0..bf728c71c0 100644
+--- b/config.make.in
++++ a/config.make.in
+@@ -70,6 +70,7 @@ have-libcap = @have_libcap@
+ have-cc-with-libunwind = @libc_cv_cc_with_libunwind@
+ fno-unit-at-a-time = @fno_unit_at_a_time@
+ bind-now = @bindnow@
++have-hash-style = @libc_cv_hashstyle@
+ use-default-link = @use_default_link@
+ have-cxx-thread_local = @libc_cv_cxx_thread_local@
+ have-loop-to-function = @libc_cv_cc_loop_to_function@
+diff --git b/configure a/configure
+index 716dc041b6..5a730dc5fc 100755
+--- b/configure
++++ a/configure
+@@ -622,6 +622,7 @@ libc_cv_cc_nofma
+ libc_cv_mtls_dialect_gnu2
+ fno_unit_at_a_time
+ libc_cv_has_glob_dat
++libc_cv_hashstyle
+ libc_cv_fpie
+ libc_cv_z_execstack
+ ASFLAGS_config
+@@ -6193,6 +6194,33 @@ $as_echo "$libc_cv_fpie" >&6; }
+
+
+
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --hash-style option" >&5
++$as_echo_n "checking for --hash-style option... " >&6; }
++if ${libc_cv_hashstyle+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat > conftest.c <<EOF
++int _start (void) { return 42; }
++EOF
++if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp
++ -fPIC -shared -o conftest.so conftest.c
++ -Wl,--hash-style=both -nostdlib 1>&5'
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; }
++then
++ libc_cv_hashstyle=yes
++else
++ libc_cv_hashstyle=no
++fi
++rm -f conftest*
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_hashstyle" >&5
++$as_echo "$libc_cv_hashstyle" >&6; }
++
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLOB_DAT reloc" >&5
+ $as_echo_n "checking for GLOB_DAT reloc... " >&6; }
+ if ${libc_cv_has_glob_dat+:} false; then :
+diff --git b/configure.ac a/configure.ac
+index d08ad4d64e..a045f6608e 100644
+--- b/configure.ac
++++ a/configure.ac
+@@ -1360,6 +1360,22 @@ LIBC_TRY_CC_OPTION([-fpie], [libc_cv_fpie=yes],
[libc_cv_fpie=no])
+
+ AC_SUBST(libc_cv_fpie)
+
++AC_CACHE_CHECK(for --hash-style option,
++ libc_cv_hashstyle, [dnl
++cat > conftest.c <<EOF
++int _start (void) { return 42; }
++EOF
++if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp
++ -fPIC -shared -o conftest.so conftest.c
++ -Wl,--hash-style=both -nostdlib
1>&AS_MESSAGE_LOG_FD])
++then
++ libc_cv_hashstyle=yes
++else
++ libc_cv_hashstyle=no
++fi
++rm -f conftest*])
++AC_SUBST(libc_cv_hashstyle)
++
+ AC_CACHE_CHECK(for GLOB_DAT reloc,
+ libc_cv_has_glob_dat, [dnl
+ cat > conftest.c <<EOF
+--
+2.37.1
+
Deleted: sdt-config.h
===================================================================
--- sdt-config.h 2023-02-03 18:45:56 UTC (rev 468161)
+++ sdt-config.h 2023-02-03 18:46:02 UTC (rev 468162)
@@ -1,6 +0,0 @@
-/* includes/sys/sdt-config.h. Generated from sdt-config.h.in by configure.
-
- This file just defines _SDT_ASM_SECTION_AUTOGROUP_SUPPORT to 0 or 1 to
- indicate whether the assembler supports "?" in .pushsection directives. */
-
-#define _SDT_ASM_SECTION_AUTOGROUP_SUPPORT 1
Copied: glibc/repos/staging-x86_64/sdt-config.h (from rev 468161,
glibc/trunk/sdt-config.h)
===================================================================
--- sdt-config.h (rev 0)
+++ sdt-config.h 2023-02-03 18:46:02 UTC (rev 468162)
@@ -0,0 +1,6 @@
+/* includes/sys/sdt-config.h. Generated from sdt-config.h.in by configure.
+
+ This file just defines _SDT_ASM_SECTION_AUTOGROUP_SUPPORT to 0 or 1 to
+ indicate whether the assembler supports "?" in .pushsection directives. */
+
+#define _SDT_ASM_SECTION_AUTOGROUP_SUPPORT 1
Deleted: sdt.h
===================================================================
--- sdt.h 2023-02-03 18:45:56 UTC (rev 468161)
+++ sdt.h 2023-02-03 18:46:02 UTC (rev 468162)
@@ -1,430 +0,0 @@
-/* <sys/sdt.h> - Systemtap static probe definition macros.
-
- This file is dedicated to the public domain, pursuant to CC0
- (https://creativecommons.org/publicdomain/zero/1.0/)
-*/
-
-#ifndef _SYS_SDT_H
-#define _SYS_SDT_H 1
-
-/*
- This file defines a family of macros
-
- STAP_PROBEn(op1, ..., opn)
-
- that emit a nop into the instruction stream, and some data into an auxiliary
- note section. The data in the note section describes the operands, in terms
- of size and location. Each location is encoded as assembler operand string.
- Consumer tools such as gdb or systemtap insert breakpoints on top of
- the nop, and decode the location operand-strings, like an assembler,
- to find the values being passed.
-
- The operand strings are selected by the compiler for each operand.
- They are constrained by gcc inline-assembler codes. The default is:
-
- #define STAP_SDT_ARG_CONSTRAINT nor
-
- This is a good default if the operands tend to be integral and
- moderate in number (smaller than number of registers). In other
- cases, the compiler may report "'asm' requires impossible reload" or
- similar. In this case, consider simplifying the macro call (fewer
- and simpler operands), reduce optimization, or override the default
- constraints string via:
-
- #define STAP_SDT_ARG_CONSTRAINT g
- #include <sys/sdt.h>
-
- See also:
- https://sourceware.org/systemtap/wiki/UserSpaceProbeImplementation
- https://gcc.gnu.org/onlinedocs/gcc/Constraints.html
- */
-
-
-
-#ifdef __ASSEMBLER__
-# define _SDT_PROBE(provider, name, n, arglist) \
- _SDT_ASM_BODY(provider, name, _SDT_ASM_STRING_1, (_SDT_DEPAREN_##n arglist))
\
- _SDT_ASM_BASE
-# define _SDT_ASM_1(x) x;
-# define _SDT_ASM_2(a, b) a,b;
-# define _SDT_ASM_3(a, b, c) a,b,c;
-# define _SDT_ASM_5(a, b, c, d, e) a,b,c,d,e;
-# define _SDT_ASM_STRING_1(x) .asciz #x;
-# define _SDT_DEPAREN_0() /* empty */
-# define _SDT_DEPAREN_1(a) a
-# define _SDT_DEPAREN_2(a,b) a b
-# define _SDT_DEPAREN_3(a,b,c) a b c
-# define _SDT_DEPAREN_4(a,b,c,d) a b c d
-# define _SDT_DEPAREN_5(a,b,c,d,e) a b c d e
-# define _SDT_DEPAREN_6(a,b,c,d,e,f) a b c d e f
-# define _SDT_DEPAREN_7(a,b,c,d,e,f,g) a b c d e f g
-# define _SDT_DEPAREN_8(a,b,c,d,e,f,g,h) a b c d e f g h
-# define _SDT_DEPAREN_9(a,b,c,d,e,f,g,h,i) a b c d e f g h i
-# define _SDT_DEPAREN_10(a,b,c,d,e,f,g,h,i,j) a b c d e f g h i j
-# define _SDT_DEPAREN_11(a,b,c,d,e,f,g,h,i,j,k) a b c d e f g h
i j k
-# define _SDT_DEPAREN_12(a,b,c,d,e,f,g,h,i,j,k,l) a b c d e f g h i j k l
-#else
-# define _SDT_PROBE(provider, name, n, arglist) \
- do { \
- __asm__ __volatile__ (_SDT_ASM_BODY(provider, name, _SDT_ASM_ARGS, (n)) \
- :: _SDT_ASM_OPERANDS_##n arglist); \
- __asm__ __volatile__ (_SDT_ASM_BASE); \
- } while (0)
-# define _SDT_S(x) #x
-# define _SDT_ASM_1(x) _SDT_S(x) "\n"
-# define _SDT_ASM_2(a, b) _SDT_S(a) "," _SDT_S(b) "\n"
-# define _SDT_ASM_3(a, b, c) _SDT_S(a) "," _SDT_S(b) "," \
- _SDT_S(c) "\n"
-# define _SDT_ASM_5(a, b, c, d, e) _SDT_S(a) "," _SDT_S(b) "," \
- _SDT_S(c) "," _SDT_S(d) "," \
- _SDT_S(e) "\n"
-# define _SDT_ASM_ARGS(n) _SDT_ASM_STRING(_SDT_ASM_TEMPLATE_##n)
-# define _SDT_ASM_STRING_1(x) _SDT_ASM_1(.asciz #x)
-
-# define _SDT_ARGFMT(no) %n[_SDT_S##no]@_SDT_ARGTMPL(_SDT_A##no)
-
-# ifndef STAP_SDT_ARG_CONSTRAINT
-# if defined __powerpc__
-# define STAP_SDT_ARG_CONSTRAINT nZr
-# else
-# define STAP_SDT_ARG_CONSTRAINT nor
-# endif
-# endif
-
-# define _SDT_STRINGIFY(x) #x
-# define _SDT_ARG_CONSTRAINT_STRING(x) _SDT_STRINGIFY(x)
-# define _SDT_ARG(n, x) \
- [_SDT_S##n] "n" ((_SDT_ARGSIGNED (x) ? 1 : -1) * (int) _SDT_ARGSIZE (x)), \
- [_SDT_A##n] _SDT_ARG_CONSTRAINT_STRING (STAP_SDT_ARG_CONSTRAINT)
(_SDT_ARGVAL (x))
-#endif
-#define _SDT_ASM_STRING(x) _SDT_ASM_STRING_1(x)
-
-#define _SDT_ARGARRAY(x) (__builtin_classify_type (x) == 14 \
- || __builtin_classify_type (x) == 5)
-
-#ifdef __cplusplus
-# define _SDT_ARGSIGNED(x) (!_SDT_ARGARRAY (x) \
- && __sdt_type<__typeof (x)>::__sdt_signed)
-# define _SDT_ARGSIZE(x) (_SDT_ARGARRAY (x) \
- ? sizeof (void *) : sizeof (x))
-# define _SDT_ARGVAL(x) (x)
-
-# include <cstddef>
-
-template<typename __sdt_T>
-struct __sdt_type
-{
- static const bool __sdt_signed = false;
-};
-
-#define __SDT_ALWAYS_SIGNED(T) \
-template<> struct __sdt_type<T> { static const bool __sdt_signed = true; };
-#define __SDT_COND_SIGNED(T,CT)
\
-template<> struct __sdt_type<T> { static const bool __sdt_signed = ((CT)(-1) <
1); };
-__SDT_ALWAYS_SIGNED(signed char)
-__SDT_ALWAYS_SIGNED(short)
-__SDT_ALWAYS_SIGNED(int)
-__SDT_ALWAYS_SIGNED(long)
-__SDT_ALWAYS_SIGNED(long long)
-__SDT_ALWAYS_SIGNED(volatile signed char)
-__SDT_ALWAYS_SIGNED(volatile short)
-__SDT_ALWAYS_SIGNED(volatile int)
-__SDT_ALWAYS_SIGNED(volatile long)
-__SDT_ALWAYS_SIGNED(volatile long long)
-__SDT_ALWAYS_SIGNED(const signed char)
-__SDT_ALWAYS_SIGNED(const short)
-__SDT_ALWAYS_SIGNED(const int)
-__SDT_ALWAYS_SIGNED(const long)
-__SDT_ALWAYS_SIGNED(const long long)
-__SDT_ALWAYS_SIGNED(const volatile signed char)
-__SDT_ALWAYS_SIGNED(const volatile short)
-__SDT_ALWAYS_SIGNED(const volatile int)
-__SDT_ALWAYS_SIGNED(const volatile long)
-__SDT_ALWAYS_SIGNED(const volatile long long)
-__SDT_COND_SIGNED(char, char)
-__SDT_COND_SIGNED(wchar_t, wchar_t)
-__SDT_COND_SIGNED(volatile char, char)
-__SDT_COND_SIGNED(volatile wchar_t, wchar_t)
-__SDT_COND_SIGNED(const char, char)
-__SDT_COND_SIGNED(const wchar_t, wchar_t)
-__SDT_COND_SIGNED(const volatile char, char)
-__SDT_COND_SIGNED(const volatile wchar_t, wchar_t)
-#if defined (__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >=
4))
-/* __SDT_COND_SIGNED(char16_t) */
-/* __SDT_COND_SIGNED(char32_t) */
-#endif
-
-template<typename __sdt_E>
-struct __sdt_type<__sdt_E[]> : public __sdt_type<__sdt_E *> {};
-
-template<typename __sdt_E, size_t __sdt_N>
-struct __sdt_type<__sdt_E[__sdt_N]> : public __sdt_type<__sdt_E *> {};
-
-#elif !defined(__ASSEMBLER__)
-__extension__ extern unsigned long long __sdt_unsp;
-# define _SDT_ARGINTTYPE(x) \
- __typeof (__builtin_choose_expr (((__builtin_classify_type (x) \
- + 3) & -4) == 4, (x), 0U))
-# define _SDT_ARGSIGNED(x) \
- (!__extension__ \
- (__builtin_constant_p ((((unsigned long long) \
- (_SDT_ARGINTTYPE (x)) __sdt_unsp) \
- & ((unsigned long long)1 << (sizeof (unsigned long
long) \
- * __CHAR_BIT__ - 1))) == 0) \
- || (_SDT_ARGINTTYPE (x)) -1 > (_SDT_ARGINTTYPE (x)) 0))
-# define _SDT_ARGSIZE(x) \
- (_SDT_ARGARRAY (x) ? sizeof (void *) : sizeof (x))
-# define _SDT_ARGVAL(x) (x)
-#endif
-
-#if defined __powerpc__ || defined __powerpc64__
-# define _SDT_ARGTMPL(id) %I[id]%[id]
-#elif defined __i386__
-# define _SDT_ARGTMPL(id) %w[id] /* gcc.gnu.org/PR80115 */
-#else
-# define _SDT_ARGTMPL(id) %[id]
-#endif
-
-#ifdef __LP64__
-# define _SDT_ASM_ADDR .8byte
-#else
-# define _SDT_ASM_ADDR .4byte
-#endif
-
-/* The ia64 and s390 nop instructions take an argument. */
-#if defined(__ia64__) || defined(__s390__) || defined(__s390x__)
-#define _SDT_NOP nop 0
-#else
-#define _SDT_NOP nop
-#endif
-
-#define _SDT_NOTE_NAME "stapsdt"
-#define _SDT_NOTE_TYPE 3
-
-/* If the assembler supports the necessary feature, then we can play
- nice with code in COMDAT sections, which comes up in C++ code.
- Without that assembler support, some combinations of probe placements
- in certain kinds of C++ code may produce link-time errors. */
-#include "sdt-config.h"
-#if _SDT_ASM_SECTION_AUTOGROUP_SUPPORT
-# define _SDT_ASM_AUTOGROUP "?"
-#else
-# define _SDT_ASM_AUTOGROUP ""
-#endif
-
-#define _SDT_ASM_BODY(provider, name, pack_args, args) \
- _SDT_ASM_1(990: _SDT_NOP) \
- _SDT_ASM_3( .pushsection .note.stapsdt,_SDT_ASM_AUTOGROUP,"note") \
- _SDT_ASM_1( .balign 4) \
- _SDT_ASM_3( .4byte 992f-991f, 994f-993f, _SDT_NOTE_TYPE) \
- _SDT_ASM_1(991: .asciz _SDT_NOTE_NAME) \
- _SDT_ASM_1(992: .balign 4) \
- _SDT_ASM_1(993: _SDT_ASM_ADDR 990b) \
- _SDT_ASM_1( _SDT_ASM_ADDR _.stapsdt.base) \
- _SDT_SEMAPHORE(provider,name)
\
- _SDT_ASM_STRING(provider) \
- _SDT_ASM_STRING(name)
\
- pack_args args \
- _SDT_ASM_1(994: .balign 4) \
- _SDT_ASM_1( .popsection)
-
-#define _SDT_ASM_BASE \
- _SDT_ASM_1(.ifndef _.stapsdt.base) \
- _SDT_ASM_5( .pushsection .stapsdt.base,"aG","progbits", \
- .stapsdt.base,comdat) \
- _SDT_ASM_1( .weak _.stapsdt.base) \
- _SDT_ASM_1( .hidden _.stapsdt.base) \
- _SDT_ASM_1( _.stapsdt.base: .space 1) \
- _SDT_ASM_2( .size _.stapsdt.base, 1) \
- _SDT_ASM_1( .popsection) \
- _SDT_ASM_1(.endif)
-
-#if defined _SDT_HAS_SEMAPHORES
-#define _SDT_SEMAPHORE(p,n) _SDT_ASM_1( _SDT_ASM_ADDR
p##_##n##_semaphore)
-#else
-#define _SDT_SEMAPHORE(p,n) _SDT_ASM_1( _SDT_ASM_ADDR 0)
-#endif
-
-#define _SDT_ASM_TEMPLATE_0 /* no arguments */
-#define _SDT_ASM_TEMPLATE_1 _SDT_ARGFMT(1)
-#define _SDT_ASM_TEMPLATE_2 _SDT_ASM_TEMPLATE_1 _SDT_ARGFMT(2)
-#define _SDT_ASM_TEMPLATE_3 _SDT_ASM_TEMPLATE_2 _SDT_ARGFMT(3)
-#define _SDT_ASM_TEMPLATE_4 _SDT_ASM_TEMPLATE_3 _SDT_ARGFMT(4)
-#define _SDT_ASM_TEMPLATE_5 _SDT_ASM_TEMPLATE_4 _SDT_ARGFMT(5)
-#define _SDT_ASM_TEMPLATE_6 _SDT_ASM_TEMPLATE_5 _SDT_ARGFMT(6)
-#define _SDT_ASM_TEMPLATE_7 _SDT_ASM_TEMPLATE_6 _SDT_ARGFMT(7)
-#define _SDT_ASM_TEMPLATE_8 _SDT_ASM_TEMPLATE_7 _SDT_ARGFMT(8)
-#define _SDT_ASM_TEMPLATE_9 _SDT_ASM_TEMPLATE_8 _SDT_ARGFMT(9)
-#define _SDT_ASM_TEMPLATE_10 _SDT_ASM_TEMPLATE_9 _SDT_ARGFMT(10)
-#define _SDT_ASM_TEMPLATE_11 _SDT_ASM_TEMPLATE_10 _SDT_ARGFMT(11)
-#define _SDT_ASM_TEMPLATE_12 _SDT_ASM_TEMPLATE_11 _SDT_ARGFMT(12)
-#define _SDT_ASM_OPERANDS_0() [__sdt_dummy] "g" (0)
-#define _SDT_ASM_OPERANDS_1(arg1) _SDT_ARG(1, arg1)
-#define _SDT_ASM_OPERANDS_2(arg1, arg2) \
- _SDT_ASM_OPERANDS_1(arg1), _SDT_ARG(2, arg2)
-#define _SDT_ASM_OPERANDS_3(arg1, arg2, arg3) \
- _SDT_ASM_OPERANDS_2(arg1, arg2), _SDT_ARG(3, arg3)
-#define _SDT_ASM_OPERANDS_4(arg1, arg2, arg3, arg4) \
- _SDT_ASM_OPERANDS_3(arg1, arg2, arg3), _SDT_ARG(4, arg4)
-#define _SDT_ASM_OPERANDS_5(arg1, arg2, arg3, arg4, arg5) \
- _SDT_ASM_OPERANDS_4(arg1, arg2, arg3, arg4), _SDT_ARG(5, arg5)
-#define _SDT_ASM_OPERANDS_6(arg1, arg2, arg3, arg4, arg5, arg6) \
- _SDT_ASM_OPERANDS_5(arg1, arg2, arg3, arg4, arg5), _SDT_ARG(6, arg6)
-#define _SDT_ASM_OPERANDS_7(arg1, arg2, arg3, arg4, arg5, arg6, arg7) \
- _SDT_ASM_OPERANDS_6(arg1, arg2, arg3, arg4, arg5, arg6), _SDT_ARG(7, arg7)
-#define _SDT_ASM_OPERANDS_8(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) \
- _SDT_ASM_OPERANDS_7(arg1, arg2, arg3, arg4, arg5, arg6, arg7), \
- _SDT_ARG(8, arg8)
-#define _SDT_ASM_OPERANDS_9(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) \
- _SDT_ASM_OPERANDS_8(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8), \
- _SDT_ARG(9, arg9)
-#define
_SDT_ASM_OPERANDS_10(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10) \
- _SDT_ASM_OPERANDS_9(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9), \
- _SDT_ARG(10, arg10)
-#define
_SDT_ASM_OPERANDS_11(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11) \
- _SDT_ASM_OPERANDS_10(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9,
arg10), \
- _SDT_ARG(11, arg11)
-#define
_SDT_ASM_OPERANDS_12(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12)
\
- _SDT_ASM_OPERANDS_11(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9,
arg10, arg11), \
- _SDT_ARG(12, arg12)
-
-/* These macros can be used in C, C++, or assembly code.
- In assembly code the arguments should use normal assembly operand syntax.
*/
-
-#define STAP_PROBE(provider, name) \
- _SDT_PROBE(provider, name, 0, ())
-#define STAP_PROBE1(provider, name, arg1) \
- _SDT_PROBE(provider, name, 1, (arg1))
-#define STAP_PROBE2(provider, name, arg1, arg2) \
- _SDT_PROBE(provider, name, 2, (arg1, arg2))
-#define STAP_PROBE3(provider, name, arg1, arg2, arg3) \
- _SDT_PROBE(provider, name, 3, (arg1, arg2, arg3))
-#define STAP_PROBE4(provider, name, arg1, arg2, arg3, arg4) \
- _SDT_PROBE(provider, name, 4, (arg1, arg2, arg3, arg4))
-#define STAP_PROBE5(provider, name, arg1, arg2, arg3, arg4, arg5) \
- _SDT_PROBE(provider, name, 5, (arg1, arg2, arg3, arg4, arg5))
-#define STAP_PROBE6(provider, name, arg1, arg2, arg3, arg4, arg5, arg6)
\
- _SDT_PROBE(provider, name, 6, (arg1, arg2, arg3, arg4, arg5, arg6))
-#define STAP_PROBE7(provider, name, arg1, arg2, arg3, arg4, arg5, arg6, arg7) \
- _SDT_PROBE(provider, name, 7, (arg1, arg2, arg3, arg4, arg5, arg6, arg7))
-#define STAP_PROBE8(provider,name,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) \
- _SDT_PROBE(provider, name, 8, (arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8))
-#define
STAP_PROBE9(provider,name,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9)\
- _SDT_PROBE(provider, name, 9, (arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9))
-#define
STAP_PROBE10(provider,name,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10) \
- _SDT_PROBE(provider, name, 10, \
- (arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10))
-#define
STAP_PROBE11(provider,name,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11)
\
- _SDT_PROBE(provider, name, 11, \
- (arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11))
-#define
STAP_PROBE12(provider,name,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12)
\
- _SDT_PROBE(provider, name, 12, \
- (arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12))
-
-/* This STAP_PROBEV macro can be used in variadic scenarios, where the
- number of probe arguments is not known until compile time. Since
- variadic macro support may vary with compiler options, you must
- pre-#define SDT_USE_VARIADIC to enable this type of probe.
-
- The trick to count __VA_ARGS__ was inspired by this post by
- Laurent Deniau <[email protected]>:
- http://groups.google.com/group/comp.std.c/msg/346fc464319b1ee5
-
- Note that our _SDT_NARG is called with an extra 0 arg that's not
- counted, so we don't have to worry about the behavior of macros
- called without any arguments. */
-
-#ifdef SDT_USE_VARIADIC
-#define _SDT_NARG(...) __SDT_NARG(__VA_ARGS__, 12,11,10,9,8,7,6,5,4,3,2,1,0)
-#define __SDT_NARG(_0,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12, N, ...) N
-#define _SDT_PROBE_N(provider, name, N, ...) \
- _SDT_PROBE(provider, name, N, (__VA_ARGS__))
-#define STAP_PROBEV(provider, name, ...) \
- _SDT_PROBE_N(provider, name, _SDT_NARG(0, ##__VA_ARGS__), ##__VA_ARGS__)
-#endif
-
-/* These macros are for use in asm statements. You must compile
- with -std=gnu99 or -std=c99 to use the STAP_PROBE_ASM macro.
-
- The STAP_PROBE_ASM macro generates a quoted string to be used in the
- template portion of the asm statement, concatenated with strings that
- contain the actual assembly code around the probe site.
-
- For example:
-
- asm ("before\n"
- STAP_PROBE_ASM(provider, fooprobe, %eax 4(%esi))
- "after");
-
- emits the assembly code for "before\nafter", with a probe in between.
- The probe arguments are the %eax register, and the value of the memory
- word located 4 bytes past the address in the %esi register. Note that
- because this is a simple asm, not a GNU C extended asm statement, these
- % characters do not need to be doubled to generate literal %reg names.
-
- In a GNU C extended asm statement, the probe arguments can be specified
- using the macro STAP_PROBE_ASM_TEMPLATE(n) for n arguments. The paired
- macro STAP_PROBE_ASM_OPERANDS gives the C values of these probe arguments,
- and appears in the input operand list of the asm statement. For example:
-
- asm ("someinsn %0,%1\n" // %0 is output operand, %1 is input operand
- STAP_PROBE_ASM(provider, fooprobe, STAP_PROBE_ASM_TEMPLATE(3))
- "otherinsn %[namedarg]"
- : "r" (outvar)
- : "g" (some_value), [namedarg] "i" (1234),
- STAP_PROBE_ASM_OPERANDS(3, some_value, some_ptr->field, 1234));
-
- This is just like writing:
-
- STAP_PROBE3(provider, fooprobe, some_value, some_ptr->field, 1234));
-
- but the probe site is right between "someinsn" and "otherinsn".
-
- The probe arguments in STAP_PROBE_ASM can be given as assembly
- operands instead, even inside a GNU C extended asm statement.
- Note that these can use operand templates like %0 or %[name],
- and likewise they must write %%reg for a literal operand of %reg. */
-
-#if __STDC_VERSION__ >= 199901L
-# define STAP_PROBE_ASM(provider, name, ...) \
- _SDT_ASM_BODY(provider, name, _SDT_ASM_STRING, (__VA_ARGS__)) \
- _SDT_ASM_BASE
-# define STAP_PROBE_ASM_OPERANDS(n, ...) _SDT_ASM_OPERANDS_##n(__VA_ARGS__)
-#else
-# define STAP_PROBE_ASM(provider, name, args) \
- _SDT_ASM_BODY(provider, name, _SDT_ASM_STRING, (args)) \
- _SDT_ASM_BASE
-#endif
-#define STAP_PROBE_ASM_TEMPLATE(n) _SDT_ASM_TEMPLATE_##n
-
-
-/* DTrace compatible macro names. */
-#define DTRACE_PROBE(provider,probe) \
- STAP_PROBE(provider,probe)
-#define DTRACE_PROBE1(provider,probe,parm1) \
- STAP_PROBE1(provider,probe,parm1)
-#define DTRACE_PROBE2(provider,probe,parm1,parm2) \
- STAP_PROBE2(provider,probe,parm1,parm2)
-#define DTRACE_PROBE3(provider,probe,parm1,parm2,parm3) \
- STAP_PROBE3(provider,probe,parm1,parm2,parm3)
-#define DTRACE_PROBE4(provider,probe,parm1,parm2,parm3,parm4) \
- STAP_PROBE4(provider,probe,parm1,parm2,parm3,parm4)
-#define DTRACE_PROBE5(provider,probe,parm1,parm2,parm3,parm4,parm5) \
- STAP_PROBE5(provider,probe,parm1,parm2,parm3,parm4,parm5)
-#define DTRACE_PROBE6(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6) \
- STAP_PROBE6(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6)
-#define
DTRACE_PROBE7(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7) \
- STAP_PROBE7(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7)
-#define
DTRACE_PROBE8(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8) \
- STAP_PROBE8(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8)
-#define
DTRACE_PROBE9(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8,parm9)
\
-
STAP_PROBE9(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8,parm9)
-#define
DTRACE_PROBE10(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8,parm9,parm10)
\
-
STAP_PROBE10(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8,parm9,parm10)
-#define
DTRACE_PROBE11(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8,parm9,parm10,parm11)
\
-
STAP_PROBE11(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8,parm9,parm10,parm11)
-#define
DTRACE_PROBE12(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8,parm9,parm10,parm11,parm12)
\
-
STAP_PROBE12(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8,parm9,parm10,parm11,parm12)
-
-
-#endif /* sys/sdt.h */
Copied: glibc/repos/staging-x86_64/sdt.h (from rev 468161, glibc/trunk/sdt.h)
===================================================================
--- sdt.h (rev 0)
+++ sdt.h 2023-02-03 18:46:02 UTC (rev 468162)
@@ -0,0 +1,430 @@
+/* <sys/sdt.h> - Systemtap static probe definition macros.
+
+ This file is dedicated to the public domain, pursuant to CC0
+ (https://creativecommons.org/publicdomain/zero/1.0/)
+*/
+
+#ifndef _SYS_SDT_H
+#define _SYS_SDT_H 1
+
+/*
+ This file defines a family of macros
+
+ STAP_PROBEn(op1, ..., opn)
+
+ that emit a nop into the instruction stream, and some data into an auxiliary
+ note section. The data in the note section describes the operands, in terms
+ of size and location. Each location is encoded as assembler operand string.
+ Consumer tools such as gdb or systemtap insert breakpoints on top of
+ the nop, and decode the location operand-strings, like an assembler,
+ to find the values being passed.
+
+ The operand strings are selected by the compiler for each operand.
+ They are constrained by gcc inline-assembler codes. The default is:
+
+ #define STAP_SDT_ARG_CONSTRAINT nor
+
+ This is a good default if the operands tend to be integral and
+ moderate in number (smaller than number of registers). In other
+ cases, the compiler may report "'asm' requires impossible reload" or
+ similar. In this case, consider simplifying the macro call (fewer
+ and simpler operands), reduce optimization, or override the default
+ constraints string via:
+
+ #define STAP_SDT_ARG_CONSTRAINT g
+ #include <sys/sdt.h>
+
+ See also:
+ https://sourceware.org/systemtap/wiki/UserSpaceProbeImplementation
+ https://gcc.gnu.org/onlinedocs/gcc/Constraints.html
+ */
+
+
+
+#ifdef __ASSEMBLER__
+# define _SDT_PROBE(provider, name, n, arglist) \
+ _SDT_ASM_BODY(provider, name, _SDT_ASM_STRING_1, (_SDT_DEPAREN_##n arglist))
\
+ _SDT_ASM_BASE
+# define _SDT_ASM_1(x) x;
+# define _SDT_ASM_2(a, b) a,b;
+# define _SDT_ASM_3(a, b, c) a,b,c;
+# define _SDT_ASM_5(a, b, c, d, e) a,b,c,d,e;
+# define _SDT_ASM_STRING_1(x) .asciz #x;
+# define _SDT_DEPAREN_0() /* empty */
+# define _SDT_DEPAREN_1(a) a
+# define _SDT_DEPAREN_2(a,b) a b
+# define _SDT_DEPAREN_3(a,b,c) a b c
+# define _SDT_DEPAREN_4(a,b,c,d) a b c d
+# define _SDT_DEPAREN_5(a,b,c,d,e) a b c d e
+# define _SDT_DEPAREN_6(a,b,c,d,e,f) a b c d e f
+# define _SDT_DEPAREN_7(a,b,c,d,e,f,g) a b c d e f g
+# define _SDT_DEPAREN_8(a,b,c,d,e,f,g,h) a b c d e f g h
+# define _SDT_DEPAREN_9(a,b,c,d,e,f,g,h,i) a b c d e f g h i
+# define _SDT_DEPAREN_10(a,b,c,d,e,f,g,h,i,j) a b c d e f g h i j
+# define _SDT_DEPAREN_11(a,b,c,d,e,f,g,h,i,j,k) a b c d e f g h
i j k
+# define _SDT_DEPAREN_12(a,b,c,d,e,f,g,h,i,j,k,l) a b c d e f g h i j k l
+#else
+# define _SDT_PROBE(provider, name, n, arglist) \
+ do { \
+ __asm__ __volatile__ (_SDT_ASM_BODY(provider, name, _SDT_ASM_ARGS, (n)) \
+ :: _SDT_ASM_OPERANDS_##n arglist); \
+ __asm__ __volatile__ (_SDT_ASM_BASE); \
+ } while (0)
+# define _SDT_S(x) #x
+# define _SDT_ASM_1(x) _SDT_S(x) "\n"
+# define _SDT_ASM_2(a, b) _SDT_S(a) "," _SDT_S(b) "\n"
+# define _SDT_ASM_3(a, b, c) _SDT_S(a) "," _SDT_S(b) "," \
+ _SDT_S(c) "\n"
+# define _SDT_ASM_5(a, b, c, d, e) _SDT_S(a) "," _SDT_S(b) "," \
+ _SDT_S(c) "," _SDT_S(d) "," \
+ _SDT_S(e) "\n"
+# define _SDT_ASM_ARGS(n) _SDT_ASM_STRING(_SDT_ASM_TEMPLATE_##n)
+# define _SDT_ASM_STRING_1(x) _SDT_ASM_1(.asciz #x)
+
+# define _SDT_ARGFMT(no) %n[_SDT_S##no]@_SDT_ARGTMPL(_SDT_A##no)
+
+# ifndef STAP_SDT_ARG_CONSTRAINT
+# if defined __powerpc__
+# define STAP_SDT_ARG_CONSTRAINT nZr
+# else
+# define STAP_SDT_ARG_CONSTRAINT nor
+# endif
+# endif
+
+# define _SDT_STRINGIFY(x) #x
+# define _SDT_ARG_CONSTRAINT_STRING(x) _SDT_STRINGIFY(x)
+# define _SDT_ARG(n, x) \
+ [_SDT_S##n] "n" ((_SDT_ARGSIGNED (x) ? 1 : -1) * (int) _SDT_ARGSIZE (x)), \
+ [_SDT_A##n] _SDT_ARG_CONSTRAINT_STRING (STAP_SDT_ARG_CONSTRAINT)
(_SDT_ARGVAL (x))
+#endif
+#define _SDT_ASM_STRING(x) _SDT_ASM_STRING_1(x)
+
+#define _SDT_ARGARRAY(x) (__builtin_classify_type (x) == 14 \
+ || __builtin_classify_type (x) == 5)
+
+#ifdef __cplusplus
+# define _SDT_ARGSIGNED(x) (!_SDT_ARGARRAY (x) \
+ && __sdt_type<__typeof (x)>::__sdt_signed)
+# define _SDT_ARGSIZE(x) (_SDT_ARGARRAY (x) \
+ ? sizeof (void *) : sizeof (x))
+# define _SDT_ARGVAL(x) (x)
+
+# include <cstddef>
+
+template<typename __sdt_T>
+struct __sdt_type
+{
+ static const bool __sdt_signed = false;
+};
+
+#define __SDT_ALWAYS_SIGNED(T) \
+template<> struct __sdt_type<T> { static const bool __sdt_signed = true; };
+#define __SDT_COND_SIGNED(T,CT)
\
+template<> struct __sdt_type<T> { static const bool __sdt_signed = ((CT)(-1) <
1); };
+__SDT_ALWAYS_SIGNED(signed char)
+__SDT_ALWAYS_SIGNED(short)
+__SDT_ALWAYS_SIGNED(int)
+__SDT_ALWAYS_SIGNED(long)
+__SDT_ALWAYS_SIGNED(long long)
+__SDT_ALWAYS_SIGNED(volatile signed char)
+__SDT_ALWAYS_SIGNED(volatile short)
+__SDT_ALWAYS_SIGNED(volatile int)
+__SDT_ALWAYS_SIGNED(volatile long)
+__SDT_ALWAYS_SIGNED(volatile long long)
+__SDT_ALWAYS_SIGNED(const signed char)
+__SDT_ALWAYS_SIGNED(const short)
+__SDT_ALWAYS_SIGNED(const int)
+__SDT_ALWAYS_SIGNED(const long)
+__SDT_ALWAYS_SIGNED(const long long)
+__SDT_ALWAYS_SIGNED(const volatile signed char)
+__SDT_ALWAYS_SIGNED(const volatile short)
+__SDT_ALWAYS_SIGNED(const volatile int)
+__SDT_ALWAYS_SIGNED(const volatile long)
+__SDT_ALWAYS_SIGNED(const volatile long long)
+__SDT_COND_SIGNED(char, char)
+__SDT_COND_SIGNED(wchar_t, wchar_t)
+__SDT_COND_SIGNED(volatile char, char)
+__SDT_COND_SIGNED(volatile wchar_t, wchar_t)
+__SDT_COND_SIGNED(const char, char)
+__SDT_COND_SIGNED(const wchar_t, wchar_t)
+__SDT_COND_SIGNED(const volatile char, char)
+__SDT_COND_SIGNED(const volatile wchar_t, wchar_t)
+#if defined (__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >=
4))
+/* __SDT_COND_SIGNED(char16_t) */
+/* __SDT_COND_SIGNED(char32_t) */
+#endif
+
+template<typename __sdt_E>
+struct __sdt_type<__sdt_E[]> : public __sdt_type<__sdt_E *> {};
+
+template<typename __sdt_E, size_t __sdt_N>
+struct __sdt_type<__sdt_E[__sdt_N]> : public __sdt_type<__sdt_E *> {};
+
+#elif !defined(__ASSEMBLER__)
+__extension__ extern unsigned long long __sdt_unsp;
+# define _SDT_ARGINTTYPE(x) \
+ __typeof (__builtin_choose_expr (((__builtin_classify_type (x) \
+ + 3) & -4) == 4, (x), 0U))
+# define _SDT_ARGSIGNED(x) \
+ (!__extension__ \
+ (__builtin_constant_p ((((unsigned long long) \
+ (_SDT_ARGINTTYPE (x)) __sdt_unsp) \
+ & ((unsigned long long)1 << (sizeof (unsigned long
long) \
+ * __CHAR_BIT__ - 1))) == 0) \
+ || (_SDT_ARGINTTYPE (x)) -1 > (_SDT_ARGINTTYPE (x)) 0))
+# define _SDT_ARGSIZE(x) \
+ (_SDT_ARGARRAY (x) ? sizeof (void *) : sizeof (x))
+# define _SDT_ARGVAL(x) (x)
+#endif
+
+#if defined __powerpc__ || defined __powerpc64__
+# define _SDT_ARGTMPL(id) %I[id]%[id]
+#elif defined __i386__
+# define _SDT_ARGTMPL(id) %w[id] /* gcc.gnu.org/PR80115 */
+#else
+# define _SDT_ARGTMPL(id) %[id]
+#endif
+
+#ifdef __LP64__
+# define _SDT_ASM_ADDR .8byte
+#else
+# define _SDT_ASM_ADDR .4byte
+#endif
+
+/* The ia64 and s390 nop instructions take an argument. */
+#if defined(__ia64__) || defined(__s390__) || defined(__s390x__)
+#define _SDT_NOP nop 0
+#else
+#define _SDT_NOP nop
+#endif
+
+#define _SDT_NOTE_NAME "stapsdt"
+#define _SDT_NOTE_TYPE 3
+
+/* If the assembler supports the necessary feature, then we can play
+ nice with code in COMDAT sections, which comes up in C++ code.
+ Without that assembler support, some combinations of probe placements
+ in certain kinds of C++ code may produce link-time errors. */
+#include "sdt-config.h"
+#if _SDT_ASM_SECTION_AUTOGROUP_SUPPORT
+# define _SDT_ASM_AUTOGROUP "?"
+#else
+# define _SDT_ASM_AUTOGROUP ""
+#endif
+
+#define _SDT_ASM_BODY(provider, name, pack_args, args) \
+ _SDT_ASM_1(990: _SDT_NOP) \
+ _SDT_ASM_3( .pushsection .note.stapsdt,_SDT_ASM_AUTOGROUP,"note") \
+ _SDT_ASM_1( .balign 4) \
+ _SDT_ASM_3( .4byte 992f-991f, 994f-993f, _SDT_NOTE_TYPE) \
+ _SDT_ASM_1(991: .asciz _SDT_NOTE_NAME) \
+ _SDT_ASM_1(992: .balign 4) \
+ _SDT_ASM_1(993: _SDT_ASM_ADDR 990b) \
+ _SDT_ASM_1( _SDT_ASM_ADDR _.stapsdt.base) \
+ _SDT_SEMAPHORE(provider,name)
\
+ _SDT_ASM_STRING(provider) \
+ _SDT_ASM_STRING(name)
\
+ pack_args args \
+ _SDT_ASM_1(994: .balign 4) \
+ _SDT_ASM_1( .popsection)
+
+#define _SDT_ASM_BASE \
+ _SDT_ASM_1(.ifndef _.stapsdt.base) \
+ _SDT_ASM_5( .pushsection .stapsdt.base,"aG","progbits", \
+ .stapsdt.base,comdat) \
+ _SDT_ASM_1( .weak _.stapsdt.base) \
+ _SDT_ASM_1( .hidden _.stapsdt.base) \
+ _SDT_ASM_1( _.stapsdt.base: .space 1) \
+ _SDT_ASM_2( .size _.stapsdt.base, 1) \
+ _SDT_ASM_1( .popsection) \
+ _SDT_ASM_1(.endif)
+
+#if defined _SDT_HAS_SEMAPHORES
+#define _SDT_SEMAPHORE(p,n) _SDT_ASM_1( _SDT_ASM_ADDR
p##_##n##_semaphore)
+#else
+#define _SDT_SEMAPHORE(p,n) _SDT_ASM_1( _SDT_ASM_ADDR 0)
+#endif
+
+#define _SDT_ASM_TEMPLATE_0 /* no arguments */
+#define _SDT_ASM_TEMPLATE_1 _SDT_ARGFMT(1)
+#define _SDT_ASM_TEMPLATE_2 _SDT_ASM_TEMPLATE_1 _SDT_ARGFMT(2)
+#define _SDT_ASM_TEMPLATE_3 _SDT_ASM_TEMPLATE_2 _SDT_ARGFMT(3)
+#define _SDT_ASM_TEMPLATE_4 _SDT_ASM_TEMPLATE_3 _SDT_ARGFMT(4)
+#define _SDT_ASM_TEMPLATE_5 _SDT_ASM_TEMPLATE_4 _SDT_ARGFMT(5)
+#define _SDT_ASM_TEMPLATE_6 _SDT_ASM_TEMPLATE_5 _SDT_ARGFMT(6)
+#define _SDT_ASM_TEMPLATE_7 _SDT_ASM_TEMPLATE_6 _SDT_ARGFMT(7)
+#define _SDT_ASM_TEMPLATE_8 _SDT_ASM_TEMPLATE_7 _SDT_ARGFMT(8)
+#define _SDT_ASM_TEMPLATE_9 _SDT_ASM_TEMPLATE_8 _SDT_ARGFMT(9)
+#define _SDT_ASM_TEMPLATE_10 _SDT_ASM_TEMPLATE_9 _SDT_ARGFMT(10)
+#define _SDT_ASM_TEMPLATE_11 _SDT_ASM_TEMPLATE_10 _SDT_ARGFMT(11)
+#define _SDT_ASM_TEMPLATE_12 _SDT_ASM_TEMPLATE_11 _SDT_ARGFMT(12)
+#define _SDT_ASM_OPERANDS_0() [__sdt_dummy] "g" (0)
+#define _SDT_ASM_OPERANDS_1(arg1) _SDT_ARG(1, arg1)
+#define _SDT_ASM_OPERANDS_2(arg1, arg2) \
+ _SDT_ASM_OPERANDS_1(arg1), _SDT_ARG(2, arg2)
+#define _SDT_ASM_OPERANDS_3(arg1, arg2, arg3) \
+ _SDT_ASM_OPERANDS_2(arg1, arg2), _SDT_ARG(3, arg3)
+#define _SDT_ASM_OPERANDS_4(arg1, arg2, arg3, arg4) \
+ _SDT_ASM_OPERANDS_3(arg1, arg2, arg3), _SDT_ARG(4, arg4)
+#define _SDT_ASM_OPERANDS_5(arg1, arg2, arg3, arg4, arg5) \
+ _SDT_ASM_OPERANDS_4(arg1, arg2, arg3, arg4), _SDT_ARG(5, arg5)
+#define _SDT_ASM_OPERANDS_6(arg1, arg2, arg3, arg4, arg5, arg6) \
+ _SDT_ASM_OPERANDS_5(arg1, arg2, arg3, arg4, arg5), _SDT_ARG(6, arg6)
+#define _SDT_ASM_OPERANDS_7(arg1, arg2, arg3, arg4, arg5, arg6, arg7) \
+ _SDT_ASM_OPERANDS_6(arg1, arg2, arg3, arg4, arg5, arg6), _SDT_ARG(7, arg7)
+#define _SDT_ASM_OPERANDS_8(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) \
+ _SDT_ASM_OPERANDS_7(arg1, arg2, arg3, arg4, arg5, arg6, arg7), \
+ _SDT_ARG(8, arg8)
+#define _SDT_ASM_OPERANDS_9(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) \
+ _SDT_ASM_OPERANDS_8(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8), \
+ _SDT_ARG(9, arg9)
+#define
_SDT_ASM_OPERANDS_10(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10) \
+ _SDT_ASM_OPERANDS_9(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9), \
+ _SDT_ARG(10, arg10)
+#define
_SDT_ASM_OPERANDS_11(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11) \
+ _SDT_ASM_OPERANDS_10(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9,
arg10), \
+ _SDT_ARG(11, arg11)
+#define
_SDT_ASM_OPERANDS_12(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12)
\
+ _SDT_ASM_OPERANDS_11(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9,
arg10, arg11), \
+ _SDT_ARG(12, arg12)
+
+/* These macros can be used in C, C++, or assembly code.
+ In assembly code the arguments should use normal assembly operand syntax.
*/
+
+#define STAP_PROBE(provider, name) \
+ _SDT_PROBE(provider, name, 0, ())
+#define STAP_PROBE1(provider, name, arg1) \
+ _SDT_PROBE(provider, name, 1, (arg1))
+#define STAP_PROBE2(provider, name, arg1, arg2) \
+ _SDT_PROBE(provider, name, 2, (arg1, arg2))
+#define STAP_PROBE3(provider, name, arg1, arg2, arg3) \
+ _SDT_PROBE(provider, name, 3, (arg1, arg2, arg3))
+#define STAP_PROBE4(provider, name, arg1, arg2, arg3, arg4) \
+ _SDT_PROBE(provider, name, 4, (arg1, arg2, arg3, arg4))
+#define STAP_PROBE5(provider, name, arg1, arg2, arg3, arg4, arg5) \
+ _SDT_PROBE(provider, name, 5, (arg1, arg2, arg3, arg4, arg5))
+#define STAP_PROBE6(provider, name, arg1, arg2, arg3, arg4, arg5, arg6)
\
+ _SDT_PROBE(provider, name, 6, (arg1, arg2, arg3, arg4, arg5, arg6))
+#define STAP_PROBE7(provider, name, arg1, arg2, arg3, arg4, arg5, arg6, arg7) \
+ _SDT_PROBE(provider, name, 7, (arg1, arg2, arg3, arg4, arg5, arg6, arg7))
+#define STAP_PROBE8(provider,name,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) \
+ _SDT_PROBE(provider, name, 8, (arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8))
+#define
STAP_PROBE9(provider,name,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9)\
+ _SDT_PROBE(provider, name, 9, (arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9))
+#define
STAP_PROBE10(provider,name,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10) \
+ _SDT_PROBE(provider, name, 10, \
+ (arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10))
+#define
STAP_PROBE11(provider,name,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11)
\
+ _SDT_PROBE(provider, name, 11, \
+ (arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11))
+#define
STAP_PROBE12(provider,name,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12)
\
+ _SDT_PROBE(provider, name, 12, \
+ (arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12))
+
+/* This STAP_PROBEV macro can be used in variadic scenarios, where the
+ number of probe arguments is not known until compile time. Since
+ variadic macro support may vary with compiler options, you must
+ pre-#define SDT_USE_VARIADIC to enable this type of probe.
+
+ The trick to count __VA_ARGS__ was inspired by this post by
+ Laurent Deniau <[email protected]>:
+ http://groups.google.com/group/comp.std.c/msg/346fc464319b1ee5
+
+ Note that our _SDT_NARG is called with an extra 0 arg that's not
+ counted, so we don't have to worry about the behavior of macros
+ called without any arguments. */
+
+#ifdef SDT_USE_VARIADIC
+#define _SDT_NARG(...) __SDT_NARG(__VA_ARGS__, 12,11,10,9,8,7,6,5,4,3,2,1,0)
+#define __SDT_NARG(_0,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12, N, ...) N
+#define _SDT_PROBE_N(provider, name, N, ...) \
+ _SDT_PROBE(provider, name, N, (__VA_ARGS__))
+#define STAP_PROBEV(provider, name, ...) \
+ _SDT_PROBE_N(provider, name, _SDT_NARG(0, ##__VA_ARGS__), ##__VA_ARGS__)
+#endif
+
+/* These macros are for use in asm statements. You must compile
+ with -std=gnu99 or -std=c99 to use the STAP_PROBE_ASM macro.
+
+ The STAP_PROBE_ASM macro generates a quoted string to be used in the
+ template portion of the asm statement, concatenated with strings that
+ contain the actual assembly code around the probe site.
+
+ For example:
+
+ asm ("before\n"
+ STAP_PROBE_ASM(provider, fooprobe, %eax 4(%esi))
+ "after");
+
+ emits the assembly code for "before\nafter", with a probe in between.
+ The probe arguments are the %eax register, and the value of the memory
+ word located 4 bytes past the address in the %esi register. Note that
+ because this is a simple asm, not a GNU C extended asm statement, these
+ % characters do not need to be doubled to generate literal %reg names.
+
+ In a GNU C extended asm statement, the probe arguments can be specified
+ using the macro STAP_PROBE_ASM_TEMPLATE(n) for n arguments. The paired
+ macro STAP_PROBE_ASM_OPERANDS gives the C values of these probe arguments,
+ and appears in the input operand list of the asm statement. For example:
+
+ asm ("someinsn %0,%1\n" // %0 is output operand, %1 is input operand
+ STAP_PROBE_ASM(provider, fooprobe, STAP_PROBE_ASM_TEMPLATE(3))
+ "otherinsn %[namedarg]"
+ : "r" (outvar)
+ : "g" (some_value), [namedarg] "i" (1234),
+ STAP_PROBE_ASM_OPERANDS(3, some_value, some_ptr->field, 1234));
+
+ This is just like writing:
+
+ STAP_PROBE3(provider, fooprobe, some_value, some_ptr->field, 1234));
+
+ but the probe site is right between "someinsn" and "otherinsn".
+
+ The probe arguments in STAP_PROBE_ASM can be given as assembly
+ operands instead, even inside a GNU C extended asm statement.
+ Note that these can use operand templates like %0 or %[name],
+ and likewise they must write %%reg for a literal operand of %reg. */
+
+#if __STDC_VERSION__ >= 199901L
+# define STAP_PROBE_ASM(provider, name, ...) \
+ _SDT_ASM_BODY(provider, name, _SDT_ASM_STRING, (__VA_ARGS__)) \
+ _SDT_ASM_BASE
+# define STAP_PROBE_ASM_OPERANDS(n, ...) _SDT_ASM_OPERANDS_##n(__VA_ARGS__)
+#else
+# define STAP_PROBE_ASM(provider, name, args) \
+ _SDT_ASM_BODY(provider, name, _SDT_ASM_STRING, (args)) \
+ _SDT_ASM_BASE
+#endif
+#define STAP_PROBE_ASM_TEMPLATE(n) _SDT_ASM_TEMPLATE_##n
+
+
+/* DTrace compatible macro names. */
+#define DTRACE_PROBE(provider,probe) \
+ STAP_PROBE(provider,probe)
+#define DTRACE_PROBE1(provider,probe,parm1) \
+ STAP_PROBE1(provider,probe,parm1)
+#define DTRACE_PROBE2(provider,probe,parm1,parm2) \
+ STAP_PROBE2(provider,probe,parm1,parm2)
+#define DTRACE_PROBE3(provider,probe,parm1,parm2,parm3) \
+ STAP_PROBE3(provider,probe,parm1,parm2,parm3)
+#define DTRACE_PROBE4(provider,probe,parm1,parm2,parm3,parm4) \
+ STAP_PROBE4(provider,probe,parm1,parm2,parm3,parm4)
+#define DTRACE_PROBE5(provider,probe,parm1,parm2,parm3,parm4,parm5) \
+ STAP_PROBE5(provider,probe,parm1,parm2,parm3,parm4,parm5)
+#define DTRACE_PROBE6(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6) \
+ STAP_PROBE6(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6)
+#define
DTRACE_PROBE7(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7) \
+ STAP_PROBE7(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7)
+#define
DTRACE_PROBE8(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8) \
+ STAP_PROBE8(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8)
+#define
DTRACE_PROBE9(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8,parm9)
\
+
STAP_PROBE9(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8,parm9)
+#define
DTRACE_PROBE10(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8,parm9,parm10)
\
+
STAP_PROBE10(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8,parm9,parm10)
+#define
DTRACE_PROBE11(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8,parm9,parm10,parm11)
\
+
STAP_PROBE11(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8,parm9,parm10,parm11)
+#define
DTRACE_PROBE12(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8,parm9,parm10,parm11,parm12)
\
+
STAP_PROBE12(provider,probe,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8,parm9,parm10,parm11,parm12)
+
+
+#endif /* sys/sdt.h */