Dominique Leuenberger 2018-09-03 08:33:30 +00:00 committed by Git OBS Bridge
commit 3b4667582c
3 changed files with 124 additions and 16 deletions

View File

@ -0,0 +1,102 @@
From cb72566ac3af13889f7ae88068c3b3ee6a6b757b Mon Sep 17 00:00:00 2001
From: Mark Wielaard <mark@klomp.org>
Date: Thu, 12 Jul 2018 13:56:00 +0200
Subject: [PATCH] Accept read-only PT_LOAD segments and .rodata.
The new binutils ld -z separate-code option creates multiple read-only
PT_LOAD segments and might place .rodata in a non-executable segment.
Allow and keep track of separate read-only segments and allow a readonly
page with .rodata section.
Based on patches from Tom Hughes <tom@compton.nu> and
H.J. Lu <hjl.tools@gmail.com>.
https://bugs.kde.org/show_bug.cgi?id=395682
[sbruens] Backported to 3.13.0 release
---
coregrind/m_debuginfo/debuginfo.c | 2 --
coregrind/m_debuginfo/readelf.c | 34 +++++++++++++++++++++++--------
2 files changed, 26 insertions(+), 10 deletions(-)
diff --git a/coregrind/m_debuginfo/debuginfo.c b/coregrind/m_debuginfo/debuginfo.c
index 24814d8..2cf433a 100644
--- a/coregrind/m_debuginfo/debuginfo.c
+++ b/coregrind/m_debuginfo/debuginfo.c
@@ -957,9 +957,7 @@ ULong VG_(di_notify_mmap)( Addr a, Bool allow_SkFileV, Int use_fd )
# error "Unknown platform"
# endif
-# if defined(VGP_x86_darwin) && DARWIN_VERS >= DARWIN_10_7
is_ro_map = seg->hasR && !seg->hasW && !seg->hasX;
-# endif
# if defined(VGO_solaris)
is_rx_map = seg->hasR && seg->hasX && !seg->hasW;
diff --git a/coregrind/m_debuginfo/readelf.c b/coregrind/m_debuginfo/readelf.c
index 3c8e62b..34a40c9 100644
--- a/coregrind/m_debuginfo/readelf.c
+++ b/coregrind/m_debuginfo/readelf.c
@@ -1785,7 +1785,7 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
Bool loaded = False;
for (j = 0; j < VG_(sizeXA)(di->fsm.maps); j++) {
const DebugInfoMapping* map = VG_(indexXA)(di->fsm.maps, j);
- if ( (map->rx || map->rw)
+ if ( (map->rx || map->rw || map->ro)
&& map->size > 0 /* stay sane */
&& a_phdr.p_offset >= map->foff
&& a_phdr.p_offset < map->foff + map->size
@@ -1816,6 +1816,16 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
i, (UWord)item.bias);
loaded = True;
}
+ if (map->ro
+ && (a_phdr.p_flags & (PF_R | PF_W | PF_X))
+ == PF_R) {
+ item.exec = False;
+ VG_(addToXA)(svma_ranges, &item);
+ TRACE_SYMTAB(
+ "PT_LOAD[%ld]: acquired as ro, bias 0x%lx\n",
+ i, (UWord)item.bias);
+ loaded = True;
+ }
}
}
if (!loaded) {
@@ -2083,17 +2093,25 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
}
}
- /* Accept .rodata where mapped as rx (data), even if zero-sized */
+ /* Accept .rodata where mapped as rx or rw (data), even if zero-sized */
if (0 == VG_(strcmp)(name, ".rodata")) {
- if (inrx && !di->rodata_present) {
- di->rodata_present = True;
+ if (!di->rodata_present) {
di->rodata_svma = svma;
- di->rodata_avma = svma + inrx->bias;
+ di->rodata_avma = svma;
di->rodata_size = size;
- di->rodata_bias = inrx->bias;
di->rodata_debug_svma = svma;
- di->rodata_debug_bias = inrx->bias;
- /* NB was 'inrw' prior to r11794 */
+ if (inrx) {
+ di->rodata_avma += inrx->bias;
+ di->rodata_bias = inrx->bias;
+ di->rodata_debug_bias = inrx->bias;
+ } else if (inrw) {
+ di->rodata_avma += inrw->bias;
+ di->rodata_bias = inrw->bias;
+ di->rodata_debug_bias = inrw->bias;
+ } else {
+ BAD(".rodata");
+ }
+ di->rodata_present = True;
TRACE_SYMTAB("acquiring .rodata svma = %#lx .. %#lx\n",
di->rodata_svma,
di->rodata_svma + di->rodata_size - 1);
--
2.18.0

View File

@ -1,3 +1,16 @@
-------------------------------------------------------------------
Tue Aug 28 19:39:14 UTC 2018 - stefan.bruens@rwth-aachen.de
- Filter out -m64 from optflags, breaks build of 32 bit parts
- Cleanup, remove suse_version < 1100 conditionals
- Use %license for COPYING, COPYING.DOCS
-------------------------------------------------------------------
Mon Aug 27 22:22:17 UTC 2018 - stefan.bruens@rwth-aachen.de
- Fix missing debuginfo with current binutils, boo#1103239
0001-Accept-read-only-PT_LOAD-segments-and-.rodata.patch
------------------------------------------------------------------- -------------------------------------------------------------------
Fri Jun 8 08:07:03 UTC 2018 - mbrugger@suse.com Fri Jun 8 08:07:03 UTC 2018 - mbrugger@suse.com

View File

@ -19,11 +19,8 @@
# during building the major version of glibc is built into the suppression file # during building the major version of glibc is built into the suppression file
%define glibc_main_version %(getconf GNU_LIBC_VERSION | cut -d' ' -f2 | cut -d. -f1) %define glibc_main_version %(getconf GNU_LIBC_VERSION | cut -d' ' -f2 | cut -d. -f1)
%define glibc_major_version %(getconf GNU_LIBC_VERSION | cut -d' ' -f2 | cut -d. -f2) %define glibc_major_version %(getconf GNU_LIBC_VERSION | cut -d' ' -f2 | cut -d. -f2)
%if 0%{?suse_version} > 1100
%define building_docs 1 %define building_docs 1
%else
%define building_docs 0
%endif
Name: valgrind Name: valgrind
Version: 3.13.0 Version: 3.13.0
Release: 0 Release: 0
@ -39,6 +36,8 @@ Patch1: jit-register-unregister.diff
Patch2: armv6-support.diff Patch2: armv6-support.diff
Patch3: epoll-wait-fix.patch Patch3: epoll-wait-fix.patch
Patch4: Implement-emulated-system-registers.-Fixes-392146.patch Patch4: Implement-emulated-system-registers.-Fixes-392146.patch
# PATCH-FIX-UPSTREAM [backport] - https://sourceware.org/git/?p=valgrind.git;a=commit;h=64aa729bfae71561505a40c12755bd6b55bb3061
Patch5: 0001-Accept-read-only-PT_LOAD-segments-and-.rodata.patch
BuildRequires: automake BuildRequires: automake
BuildRequires: docbook-xsl-stylesheets BuildRequires: docbook-xsl-stylesheets
BuildRequires: docbook_4 BuildRequires: docbook_4
@ -56,9 +55,6 @@ ExclusiveArch: aarch64 %ix86 x86_64 ppc ppc64 ppc64le s390x armv7l armv7hl armv
BuildRequires: gcc-32bit BuildRequires: gcc-32bit
BuildRequires: glibc-devel-32bit BuildRequires: glibc-devel-32bit
%endif %endif
%if 0%{?suse_version} <= 1100
Provides: valgrind-devel = %{version}
%endif
%description %description
Valgrind checks all memory operations in an application, like read, Valgrind checks all memory operations in an application, like read,
@ -80,7 +76,6 @@ directory. A debugged application runs slower and needs much more
memory, but is usually still usable. Valgrind is still in development, memory, but is usually still usable. Valgrind is still in development,
but it has been successfully used to optimize several KDE applications. but it has been successfully used to optimize several KDE applications.
%if 0%{?suse_version} > 1100
%package devel %package devel
Summary: Memory Management Debugger Summary: Memory Management Debugger
Group: Development/Tools/Debuggers Group: Development/Tools/Debuggers
@ -106,7 +101,6 @@ directory. A debugged application runs slower and needs much more
memory, but is usually still usable. Valgrind is still in development, memory, but is usually still usable. Valgrind is still in development,
but it has been successfully used to optimize several KDE applications. but it has been successfully used to optimize several KDE applications.
%endif
%prep %prep
%setup -q %setup -q
@ -116,6 +110,7 @@ but it has been successfully used to optimize several KDE applications.
%patch2 %patch2
%patch3 %patch3
%patch4 -p1 %patch4 -p1
%patch5 -p1
%build %build
export FLAGS="%{optflags}" export FLAGS="%{optflags}"
@ -128,12 +123,13 @@ FLAGS=${FLAGS/-mthumb/-mthumb-interwork -marm}
FLAGS="${FLAGS/-D_FORTIFY_SOURCE=2/}" FLAGS="${FLAGS/-D_FORTIFY_SOURCE=2/}"
FLAGS="${FLAGS/-fstack-protector-strong/}" FLAGS="${FLAGS/-fstack-protector-strong/}"
FLAGS="${FLAGS/-fstack-protector/}" FLAGS="${FLAGS/-fstack-protector/}"
# -m64 / -m32 is set explicitly everywhere, do not override it
FLAGS="${FLAGS/-m64/}"
export CFLAGS="$FLAGS" export CFLAGS="$FLAGS"
export CXXFLAGS="$FLAGS" export CXXFLAGS="$FLAGS"
export FFLAGS="$FLAGS" export FFLAGS="$FLAGS"
%if 0%{?suse_version} > 1100
autoreconf -fi autoreconf -fi
%endif
export GDB=%{_bindir}/gdb export GDB=%{_bindir}/gdb
%configure \ %configure \
%ifarch aarch64 %ifarch aarch64
@ -156,10 +152,10 @@ if test -d %{buildroot}%{_datadir}/doc/valgrind; then
mv %{buildroot}%{_datadir}/doc/valgrind %{buildroot}/%{_defaultdocdir} mv %{buildroot}%{_datadir}/doc/valgrind %{buildroot}/%{_defaultdocdir}
fi fi
mkdir -p %{buildroot}%{_docdir}/%{name} mkdir -p %{buildroot}%{_docdir}/%{name}
cp -a README* NEWS AUTHORS COPYING COPYING.DOCS %{buildroot}/%{_defaultdocdir}/%{name} cp -a README* NEWS AUTHORS %{buildroot}/%{_defaultdocdir}/%{name}
%files %files
%defattr(-,root,root) %license COPYING COPYING.DOCS
%{_bindir}/* %{_bindir}/*
%doc %{_defaultdocdir}/%{name} %doc %{_defaultdocdir}/%{name}
%doc %{_mandir}/*/* %doc %{_mandir}/*/*
@ -265,10 +261,7 @@ cp -a README* NEWS AUTHORS COPYING COPYING.DOCS %{buildroot}/%{_defaultdocdir}/%
%{_libdir}/valgrind/s390x-linux64-valgrind-s*.xml %{_libdir}/valgrind/s390x-linux64-valgrind-s*.xml
%{_libdir}/valgrind/s390x-linux64.xml %{_libdir}/valgrind/s390x-linux64.xml
%if 0%{?suse_version} > 1100
%files devel %files devel
%defattr(-,root,root)
%endif
%{_libdir}/valgrind/lib*.a %{_libdir}/valgrind/lib*.a
%{_includedir}/valgrind %{_includedir}/valgrind
%{_libdir}/pkgconfig/valgrind.pc %{_libdir}/pkgconfig/valgrind.pc