Merge Fedora packaging changes from Fedora 24 gdb-7.11.1-83.fc24:

This commit is contained in:
Jan Kratochvil 2016-08-23 21:04:27 +02:00
commit 8cff818ba3
5 changed files with 317 additions and 5 deletions

3
.gitignore vendored
View File

@ -1,2 +1,3 @@
/gdb-libstdc++-v3-python-r225521.tar.xz
/gdb-libstdc++-v3-python-6.1.1-20160817.tar.xz
/v1.5.tar.gz
/gdb-7.11.90.20160807.tar.xz

222
gdb-linux_perf-bundle.patch Normal file
View File

@ -0,0 +1,222 @@
Index: gdb-7.11.1/gdb/nat/linux-btrace.h
===================================================================
--- gdb-7.11.1.orig/gdb/nat/linux-btrace.h 2016-02-10 04:19:39.000000000 +0100
+++ gdb-7.11.1/gdb/nat/linux-btrace.h 2016-08-19 20:49:18.735477251 +0200
@@ -28,6 +28,177 @@
# include <linux/perf_event.h>
#endif
+#ifdef PERF_ATTR_SIZE_VER5_BUNDLE
+#ifndef HAVE_LINUX_PERF_EVENT_H
+# error "PERF_ATTR_SIZE_VER5_BUNDLE && !HAVE_LINUX_PERF_EVENT_H"
+#endif
+#ifndef PERF_ATTR_SIZE_VER5
+#define PERF_ATTR_SIZE_VER5
+#define perf_event_mmap_page perf_event_mmap_page_bundle
+// kernel-headers-3.10.0-493.el7.x86_64/usr/include/linux/perf_event.h
+/*
+ * Structure of the page that can be mapped via mmap
+ */
+struct perf_event_mmap_page {
+ __u32 version; /* version number of this structure */
+ __u32 compat_version; /* lowest version this is compat with */
+
+ /*
+ * Bits needed to read the hw events in user-space.
+ *
+ * u32 seq, time_mult, time_shift, index, width;
+ * u64 count, enabled, running;
+ * u64 cyc, time_offset;
+ * s64 pmc = 0;
+ *
+ * do {
+ * seq = pc->lock;
+ * barrier()
+ *
+ * enabled = pc->time_enabled;
+ * running = pc->time_running;
+ *
+ * if (pc->cap_usr_time && enabled != running) {
+ * cyc = rdtsc();
+ * time_offset = pc->time_offset;
+ * time_mult = pc->time_mult;
+ * time_shift = pc->time_shift;
+ * }
+ *
+ * index = pc->index;
+ * count = pc->offset;
+ * if (pc->cap_user_rdpmc && index) {
+ * width = pc->pmc_width;
+ * pmc = rdpmc(index - 1);
+ * }
+ *
+ * barrier();
+ * } while (pc->lock != seq);
+ *
+ * NOTE: for obvious reason this only works on self-monitoring
+ * processes.
+ */
+ __u32 lock; /* seqlock for synchronization */
+ __u32 index; /* hardware event identifier */
+ __s64 offset; /* add to hardware event value */
+ __u64 time_enabled; /* time event active */
+ __u64 time_running; /* time event on cpu */
+ union {
+ __u64 capabilities;
+ struct {
+ __u64 cap_bit0 : 1, /* Always 0, deprecated, see commit 860f085b74e9 */
+ cap_bit0_is_deprecated : 1, /* Always 1, signals that bit 0 is zero */
+
+ cap_user_rdpmc : 1, /* The RDPMC instruction can be used to read counts */
+ cap_user_time : 1, /* The time_* fields are used */
+ cap_user_time_zero : 1, /* The time_zero field is used */
+ cap_____res : 59;
+ };
+ };
+
+ /*
+ * If cap_user_rdpmc this field provides the bit-width of the value
+ * read using the rdpmc() or equivalent instruction. This can be used
+ * to sign extend the result like:
+ *
+ * pmc <<= 64 - width;
+ * pmc >>= 64 - width; // signed shift right
+ * count += pmc;
+ */
+ __u16 pmc_width;
+
+ /*
+ * If cap_usr_time the below fields can be used to compute the time
+ * delta since time_enabled (in ns) using rdtsc or similar.
+ *
+ * u64 quot, rem;
+ * u64 delta;
+ *
+ * quot = (cyc >> time_shift);
+ * rem = cyc & (((u64)1 << time_shift) - 1);
+ * delta = time_offset + quot * time_mult +
+ * ((rem * time_mult) >> time_shift);
+ *
+ * Where time_offset,time_mult,time_shift and cyc are read in the
+ * seqcount loop described above. This delta can then be added to
+ * enabled and possible running (if index), improving the scaling:
+ *
+ * enabled += delta;
+ * if (index)
+ * running += delta;
+ *
+ * quot = count / running;
+ * rem = count % running;
+ * count = quot * enabled + (rem * enabled) / running;
+ */
+ __u16 time_shift;
+ __u32 time_mult;
+ __u64 time_offset;
+ /*
+ * If cap_usr_time_zero, the hardware clock (e.g. TSC) can be calculated
+ * from sample timestamps.
+ *
+ * time = timestamp - time_zero;
+ * quot = time / time_mult;
+ * rem = time % time_mult;
+ * cyc = (quot << time_shift) + (rem << time_shift) / time_mult;
+ *
+ * And vice versa:
+ *
+ * quot = cyc >> time_shift;
+ * rem = cyc & (((u64)1 << time_shift) - 1);
+ * timestamp = time_zero + quot * time_mult +
+ * ((rem * time_mult) >> time_shift);
+ */
+ __u64 time_zero;
+ __u32 size; /* Header size up to __reserved[] fields. */
+
+ /*
+ * Hole for extension of the self monitor capabilities
+ */
+
+ __u8 __reserved[118*8+4]; /* align to 1k. */
+
+ /*
+ * Control data for the mmap() data buffer.
+ *
+ * User-space reading the @data_head value should issue an smp_rmb(),
+ * after reading this value.
+ *
+ * When the mapping is PROT_WRITE the @data_tail value should be
+ * written by userspace to reflect the last read data, after issueing
+ * an smp_mb() to separate the data read from the ->data_tail store.
+ * In this case the kernel will not over-write unread data.
+ *
+ * See perf_output_put_handle() for the data ordering.
+ *
+ * data_{offset,size} indicate the location and size of the perf record
+ * buffer within the mmapped area.
+ */
+ __u64 data_head; /* head in the data section */
+ __u64 data_tail; /* user-space written tail */
+ __u64 data_offset; /* where the buffer starts */
+ __u64 data_size; /* data buffer size */
+
+ /*
+ * AUX area is defined by aux_{offset,size} fields that should be set
+ * by the userspace, so that
+ *
+ * aux_offset >= data_offset + data_size
+ *
+ * prior to mmap()ing it. Size of the mmap()ed area should be aux_size.
+ *
+ * Ring buffer pointers aux_{head,tail} have the same semantics as
+ * data_{head,tail} and same ordering rules apply.
+ */
+ __u64 aux_head;
+ __u64 aux_tail;
+ __u64 aux_offset;
+ __u64 aux_size;
+};
+#endif // PERF_ATTR_SIZE_VER5
+#endif // PERF_ATTR_SIZE_VER5_BUNDLE
+
struct target_ops;
#if HAVE_LINUX_PERF_EVENT_H
Index: gdb-7.11.1/gdb/configure
===================================================================
--- gdb-7.11.1.orig/gdb/configure 2016-08-19 20:47:11.488325144 +0200
+++ gdb-7.11.1/gdb/configure 2016-08-19 20:47:11.658326684 +0200
@@ -10635,7 +10635,7 @@
#include <linux/perf_event.h>
#ifndef PERF_ATTR_SIZE_VER5
-# error
+// error // PERF_ATTR_SIZE_VER5_BUNDLE is not available here - Fedora+RHEL
#endif
_ACEOF
Index: gdb-7.11.1/gdb/configure.ac
===================================================================
--- gdb-7.11.1.orig/gdb/configure.ac 2016-08-19 20:47:11.489325154 +0200
+++ gdb-7.11.1/gdb/configure.ac 2016-08-19 20:47:11.659326693 +0200
@@ -1452,7 +1452,7 @@
AC_PREPROC_IFELSE(AC_LANG_SOURCE([[
#include <linux/perf_event.h>
#ifndef PERF_ATTR_SIZE_VER5
-# error
+// error // PERF_ATTR_SIZE_VER5_BUNDLE is not available here - Fedora+RHEL
#endif
]]), [perf_event=yes], [perf_event=no])
if test "$perf_event" != yes; then
--- gdb-7.11.1/gdb/gdb.c-orig 2016-02-10 04:19:39.000000000 +0100
+++ gdb-7.11.1/gdb/gdb.c 2016-08-23 09:15:13.169650953 +0200
@@ -25,6 +25,11 @@ main (int argc, char **argv)
{
struct captured_main_args args;
+#ifdef PERF_ATTR_SIZE_VER5_BUNDLE
+ extern void __libipt_init(void);
+ __libipt_init();
+#endif
+
memset (&args, 0, sizeof args);
args.argc = argc;
args.argv = argv;

View File

@ -27,7 +27,7 @@ Version: 7.11.90.20160807
# The release always contains a leading reserved number, start it at 1.
# `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
Release: 5%{?dist}
Release: 6%{?dist}
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and BSD and Public Domain and GFDL
Group: Development/Debuggers
@ -122,12 +122,17 @@ Source3: gdb-gstack.man
Source4: gdbinit
# libstdc++ pretty printers from GCC SVN.
%global libstdcxxpython gdb-libstdc++-v3-python-r225521
%global libstdcxxpython gdb-libstdc++-v3-python-6.1.1-20160817
Source5: %{libstdcxxpython}.tar.xz
# Provide gdbtui for RHEL-5 and RHEL-6 as it is removed upstream (BZ 797664).
Source6: gdbtui
# libipt: Intel Processor Trace Decoder Library
%global libipt_version 1.5
Source7: v%{libipt_version}.tar.gz
Patch1142: v1.5-libipt-static.patch
# Work around out-of-date dejagnu that does not have KFAIL
#=drop: That dejagnu is too old to be supported.
Patch1: gdb-6.3-rh-dummykfail-20041202.patch
@ -576,6 +581,9 @@ Patch1120: gdb-testsuite-dw2-undefined-ret-addr.patch
# New test for Python "Cannot locate object file for block" (for RH BZ 1325795).
Patch1123: gdb-rhbz1325795-framefilters-test.patch
# [dts+el7] [x86*] Bundle linux_perf.h for libipt (RH BZ 1256513).
Patch1143: gdb-linux_perf-bundle.patch
%if 0%{!?rhel:1} || 0%{?rhel} > 6
# RL_STATE_FEDORA_GDB would not be found for:
# Patch642: gdb-readline62-ask-more-rh.patch
@ -617,12 +625,16 @@ BuildRequires: libbabeltrace-devel%{buildisa}
BuildRequires: guile-devel%{buildisa}
%endif
%global have_libipt 0
%if 0%{!?rhel:1} || 0%{?rhel} > 7
%if 0%{!?rhel:1} || 0%{?rhel} > 7 || (0%{?rhel} == 7 && 0%{?scl:1})
%ifarch %{ix86} x86_64
%global have_libipt 1
%if 0%{?el7:1} && 0%{?scl:1}
BuildRequires: cmake
%else
BuildRequires: libipt-devel%{buildisa}
%endif
%endif
%endif
%if 0%{?_with_testsuite:1}
@ -753,6 +765,14 @@ This package provides INFO, HTML and PDF user manual for GDB.
tar xJf %{SOURCE5}
%endif # 0%{?rhel:1} && 0%{?rhel} <= 7
%if 0%{have_libipt} && 0%{?el7:1} && 0%{?scl:1}
tar xzf %{SOURCE7}
(
cd processor-trace-%{libipt_version}
%patch1142 -p1
)
%endif
# Files have `# <number> <file>' statements breaking VPATH / find-debuginfo.sh .
(cd gdb;rm -fv $(perl -pe 's/\\\n/ /' <Makefile.in|sed -n 's/^YYFILES = //p'))
@ -902,6 +922,7 @@ done
%patch1118 -p1
%patch1120 -p1
%patch1123 -p1
%patch1143 -p1
%patch1075 -p1
%if 0%{?rhel:1} && 0%{?rhel} <= 7
@ -968,6 +989,11 @@ CFLAGS="$CFLAGS -DDNF_DEBUGINFO_INSTALL"
CFLAGS="$CFLAGS -DGDB_INDEX_VERIFY_VENDOR"
%endif
# [dts+el7] [x86*] Bundle linux_perf.h for libipt (RH BZ 1256513).
%if %{have_libipt} && 0%{?el7:1} && 0%{?scl:1}
CFLAGS="$CFLAGS -DPERF_ATTR_SIZE_VER5_BUNDLE"
%endif
# Patch642: gdb-readline62-ask-more-rh.patch
%if 0%{!?rhel:1} || 0%{?rhel} > 6
CFLAGS="$CFLAGS -DNEED_RL_STATE_FEDORA_GDB"
@ -981,6 +1007,25 @@ CFLAGS="$CFLAGS -DNEED_DETACH_SIGSTOP"
export CXXFLAGS="$CFLAGS"
%if 0%{have_libipt} && 0%{?el7:1} && 0%{?scl:1}
(
mkdir processor-trace-%{libipt_version}-root
mkdir processor-trace-%{libipt_version}-build
cd processor-trace-%{libipt_version}-build
# -DPTUNIT:BOOL=ON has no effect on ctest.
%cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DPTUNIT:BOOL=OFF \
-DDEVBUILD:BOOL=ON \
../../processor-trace-%{libipt_version}
make VERBOSE=1 %{?_smp_mflags}
ctest -V %{?_smp_mflags}
make install DESTDIR=../processor-trace-%{libipt_version}-root
)
# There is also: --with-libipt-prefix
CFLAGS="$CFLAGS -I$PWD/processor-trace-%{libipt_version}-root%{_includedir}"
LDFLAGS="$LDFLAGS -L$PWD/processor-trace-%{libipt_version}-root%{_libdir}"
%endif
# --htmldir and --pdfdir are not used as they are used from %{gdb_build}.
../configure \
--prefix=%{_prefix} \
@ -1424,6 +1469,27 @@ then
fi
%changelog
* Tue Aug 23 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.90.20160807-6.fc25
- Merge Fedora packaging changes from Fedora 24 gdb-7.11.1-83.fc24:
* Tue Aug 23 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.1-83.fc24
- [dts+el7] [x86*] Bundle libipt - fix#3 its initialization (RH BZ 1256513).
* Tue Aug 23 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.1-82.fc24
- [dts+el7] [x86*] Bundle libipt - fix#2 its initialization (RH BZ 1256513).
* Tue Aug 23 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.1-81.fc24
- [dts+el7] [x86*] Bundle libipt - fix its initialization (RH BZ 1256513).
* Mon Aug 22 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.1-80.fc24
- [dts] Upgrade libstdc++-v3-python to 6.1.1-20160817.
* Fri Aug 19 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.1-79.fc24
- [dts+el7] [x86*] Bundle linux_perf.h for libipt (RH BZ 1256513).
* Wed Aug 17 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.1-78.fc24
- [dts+el7] [x86*] Bundle libipt (RH BZ 1256513).
* Sun Aug 7 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.90.20160807-5.fc25
- Rebase to FSF GDB 7.11.90.20160807 (pre-7.12 branch snapshot).

View File

@ -1,2 +1,3 @@
7ad32d3894aaf90d00a4343a735c3e1c gdb-libstdc++-v3-python-r225521.tar.xz
131d0dfd20cd6014c168fbcab9be2c43 gdb-libstdc++-v3-python-6.1.1-20160817.tar.xz
29efc08219d9d6a0536d58f9807c8722 v1.5.tar.gz
2e52dd8b63eb0a459febbee01221fb10 gdb-7.11.90.20160807.tar.xz

22
v1.5-libipt-static.patch Normal file
View File

@ -0,0 +1,22 @@
--- processor-trace-1.5/libipt/CMakeLists.txt-orig 2016-04-07 08:52:14.000000000 +0200
+++ processor-trace-1.5/libipt/CMakeLists.txt 2016-08-17 23:12:23.241109244 +0200
@@ -81,7 +81,7 @@ endif (CMAKE_HOST_WIN32)
set(LIBIPT_FILES ${LIBIPT_FILES} ${LIBIPT_SECTION_FILES})
-add_library(libipt SHARED
+add_library(libipt STATIC
${LIBIPT_FILES}
)
--- processor-trace-1.5/libipt/src/posix/init.c-orig 2016-04-07 08:52:14.000000000 +0200
+++ processor-trace-1.5/libipt/src/posix/init.c 2016-08-23 09:04:11.540176668 +0200
@@ -29,7 +29,7 @@
#include "pt_ild.h"
-static void __attribute__((constructor)) init(void)
+void __libipt_init(void)
{
/* Initialize the Intel(R) Processor Trace instruction decoder. */
pt_ild_init();