Add valgrind-3.12.0-x86-gdt-and-ss.patch
This commit is contained in:
parent
44fb313166
commit
c088b45781
139
valgrind-3.12.0-x86-gdt-and-ss.patch
Normal file
139
valgrind-3.12.0-x86-gdt-and-ss.patch
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
commit c7bcd1f2ee2d466fb556bfc2b33c5ab039b0898d
|
||||||
|
Author: sewardj <sewardj@a5019735-40e9-0310-863c-91ae7b9d1cf9>
|
||||||
|
Date: Fri Jan 20 09:58:15 2017 +0000
|
||||||
|
|
||||||
|
x86-linux: Initialize x86 system GDT on first use. Bug 344139 comment 3.
|
||||||
|
Patch from Sebastian Lackner, sebastian@fds-team.de.
|
||||||
|
|
||||||
|
|
||||||
|
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16204 a5019735-40e9-0310-863c-91ae7b9d1cf9
|
||||||
|
|
||||||
|
diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c
|
||||||
|
index f8c4eb4..2f879d8 100644
|
||||||
|
--- a/coregrind/m_syswrap/syswrap-x86-linux.c
|
||||||
|
+++ b/coregrind/m_syswrap/syswrap-x86-linux.c
|
||||||
|
@@ -294,11 +294,37 @@ void translate_to_hw_format ( /* IN */ vki_modify_ldt_t* inn,
|
||||||
|
out->LdtEnt.Words.word2 = entry_2;
|
||||||
|
}
|
||||||
|
|
||||||
|
-/* Create a zeroed-out GDT. */
|
||||||
|
-static VexGuestX86SegDescr* alloc_zeroed_x86_GDT ( void )
|
||||||
|
+/* Create initial GDT. */
|
||||||
|
+static VexGuestX86SegDescr* alloc_system_x86_GDT ( void )
|
||||||
|
{
|
||||||
|
Int nbytes = VEX_GUEST_X86_GDT_NENT * sizeof(VexGuestX86SegDescr);
|
||||||
|
- return VG_(calloc)("di.syswrap-x86.azxG.1", nbytes, 1);
|
||||||
|
+ VexGuestX86SegDescr* gdt = VG_(calloc)("di.syswrap-x86.azxG.1", nbytes, 1);
|
||||||
|
+ vki_modify_ldt_t info;
|
||||||
|
+ UShort seg;
|
||||||
|
+
|
||||||
|
+ VG_(memset)(&info, 0, sizeof(info));
|
||||||
|
+ info.entry_number = 0;
|
||||||
|
+ info.base_addr = 0;
|
||||||
|
+ info.limit = 0xfffff;
|
||||||
|
+ info.seg_32bit = 1;
|
||||||
|
+ info.contents = 0;
|
||||||
|
+ info.read_exec_only = 0;
|
||||||
|
+ info.limit_in_pages = 1;
|
||||||
|
+ info.seg_not_present = 0;
|
||||||
|
+ info.useable = 0;
|
||||||
|
+ info.reserved = 0;
|
||||||
|
+
|
||||||
|
+ asm volatile("movw %%ds, %0" : : "m" (seg));
|
||||||
|
+ if (!(seg & 4)) translate_to_hw_format(&info, &gdt[seg >> 3], 0);
|
||||||
|
+ asm volatile("movw %%ss, %0" : : "m" (seg));
|
||||||
|
+ if (!(seg & 4)) translate_to_hw_format(&info, &gdt[seg >> 3], 0);
|
||||||
|
+
|
||||||
|
+ info.contents = 2;
|
||||||
|
+
|
||||||
|
+ asm volatile("movw %%cs, %0" : : "m" (seg));
|
||||||
|
+ if (!(seg & 4)) translate_to_hw_format(&info, &gdt[seg >> 3], 0);
|
||||||
|
+
|
||||||
|
+ return gdt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create a zeroed-out LDT. */
|
||||||
|
@@ -505,7 +531,7 @@ SysRes ML_(x86_sys_set_thread_area) ( ThreadId tid, vki_modify_ldt_t* info )
|
||||||
|
|
||||||
|
/* If the thread doesn't have a GDT, allocate it now. */
|
||||||
|
if (!gdt) {
|
||||||
|
- gdt = alloc_zeroed_x86_GDT();
|
||||||
|
+ gdt = alloc_system_x86_GDT();
|
||||||
|
VG_(threads)[tid].arch.vex.guest_GDT = (HWord)gdt;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -564,7 +590,7 @@ static SysRes sys_get_thread_area ( ThreadId tid, vki_modify_ldt_t* info )
|
||||||
|
|
||||||
|
/* If the thread doesn't have a GDT, allocate it now. */
|
||||||
|
if (!gdt) {
|
||||||
|
- gdt = alloc_zeroed_x86_GDT();
|
||||||
|
+ gdt = alloc_system_x86_GDT();
|
||||||
|
VG_(threads)[tid].arch.vex.guest_GDT = (HWord)gdt;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -616,7 +642,7 @@ void ML_(x86_setup_LDT_GDT) ( /*OUT*/ ThreadArchState *child,
|
||||||
|
child->vex.guest_GDT = (HWord)NULL;
|
||||||
|
|
||||||
|
if (parent->vex.guest_GDT != (HWord)NULL) {
|
||||||
|
- child->vex.guest_GDT = (HWord)alloc_zeroed_x86_GDT();
|
||||||
|
+ child->vex.guest_GDT = (HWord)alloc_system_x86_GDT();
|
||||||
|
copy_GDT_from_to( (VexGuestX86SegDescr*)parent->vex.guest_GDT,
|
||||||
|
(VexGuestX86SegDescr*)child->vex.guest_GDT );
|
||||||
|
}
|
||||||
|
commit 5f4041b376f7465cd108ad4d1696b0b8a603a175
|
||||||
|
Author: sewardj <sewardj@8f6e269a-dfd6-0310-a8e1-e2731360e62c>
|
||||||
|
Date: Fri Jan 20 10:01:42 2017 +0000
|
||||||
|
|
||||||
|
x86: Recognize the SS segment prefix on x86. Bug 344139 comment 4.
|
||||||
|
Patch from Sebastian Lackner, sebastian@fds-team.de.
|
||||||
|
|
||||||
|
|
||||||
|
git-svn-id: svn://svn.valgrind.org/vex/trunk@3299 8f6e269a-dfd6-0310-a8e1-e2731360e62c
|
||||||
|
|
||||||
|
diff --git a/VEX/priv/guest_x86_toIR.c b/VEX/priv/guest_x86_toIR.c
|
||||||
|
index de09d3a..234d68e 100644
|
||||||
|
--- a/VEX/priv/guest_x86_toIR.c
|
||||||
|
+++ b/VEX/priv/guest_x86_toIR.c
|
||||||
|
@@ -1409,6 +1409,7 @@ const HChar* sorbTxt ( UChar sorb )
|
||||||
|
case 0x26: return "%es:";
|
||||||
|
case 0x64: return "%fs:";
|
||||||
|
case 0x65: return "%gs:";
|
||||||
|
+ case 0x36: return "%ss:";
|
||||||
|
default: vpanic("sorbTxt(x86,guest)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -1433,6 +1434,7 @@ IRExpr* handleSegOverride ( UChar sorb, IRExpr* virtual )
|
||||||
|
case 0x26: sreg = R_ES; break;
|
||||||
|
case 0x64: sreg = R_FS; break;
|
||||||
|
case 0x65: sreg = R_GS; break;
|
||||||
|
+ case 0x36: sreg = R_SS; break;
|
||||||
|
default: vpanic("handleSegOverride(x86,guest)");
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -8101,7 +8103,7 @@ DisResult disInstr_X86_WRK (
|
||||||
|
Int sz = 4;
|
||||||
|
|
||||||
|
/* sorb holds the segment-override-prefix byte, if any. Zero if no
|
||||||
|
- prefix has been seen, else one of {0x26, 0x3E, 0x64, 0x65}
|
||||||
|
+ prefix has been seen, else one of {0x26, 0x36, 0x3E, 0x64, 0x65}
|
||||||
|
indicating the prefix. */
|
||||||
|
UChar sorb = 0;
|
||||||
|
|
||||||
|
@@ -8255,6 +8257,7 @@ DisResult disInstr_X86_WRK (
|
||||||
|
case 0x26: /* %ES: */
|
||||||
|
case 0x64: /* %FS: */
|
||||||
|
case 0x65: /* %GS: */
|
||||||
|
+ case 0x36: /* %SS: */
|
||||||
|
if (sorb != 0)
|
||||||
|
goto decode_failure; /* only one seg override allowed */
|
||||||
|
sorb = pre;
|
||||||
|
@@ -8274,9 +8277,6 @@ DisResult disInstr_X86_WRK (
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
- case 0x36: /* %SS: */
|
||||||
|
- /* SS override cases are not handled */
|
||||||
|
- goto decode_failure;
|
||||||
|
default:
|
||||||
|
goto not_a_prefix;
|
||||||
|
}
|
@ -101,6 +101,11 @@ Patch11: valgrind-3.12.0-exit_group.patch
|
|||||||
# KDE#373046 Stacks registered by core are never deregistered
|
# KDE#373046 Stacks registered by core are never deregistered
|
||||||
Patch12: valgrind-3.12.0-deregister-stack.patch
|
Patch12: valgrind-3.12.0-deregister-stack.patch
|
||||||
|
|
||||||
|
# KDE#344139
|
||||||
|
# Initialize x86 system GDT on first use.
|
||||||
|
# VEX: Recognize the SS segment prefix on x86.
|
||||||
|
Patch13: valgrind-3.12.0-x86-gdt-and-ss.patch
|
||||||
|
|
||||||
%if %{build_multilib}
|
%if %{build_multilib}
|
||||||
# Ensure glibc{,-devel} is installed for both multilib arches
|
# Ensure glibc{,-devel} is installed for both multilib arches
|
||||||
BuildRequires: /lib/libc.so.6 /usr/lib/libc.so /lib64/libc.so.6 /usr/lib64/libc.so
|
BuildRequires: /lib/libc.so.6 /usr/lib/libc.so /lib64/libc.so.6 /usr/lib64/libc.so
|
||||||
@ -222,6 +227,7 @@ Valgrind User Manual for details.
|
|||||||
%patch10 -p1
|
%patch10 -p1
|
||||||
%patch11 -p1
|
%patch11 -p1
|
||||||
%patch12 -p1
|
%patch12 -p1
|
||||||
|
%patch13 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
# We need to use the software collection compiler and binutils if available.
|
# We need to use the software collection compiler and binutils if available.
|
||||||
@ -422,6 +428,7 @@ echo ===============END TESTING===============
|
|||||||
- Add valgrind-3.12.0-quick-fatal-sigs.patch
|
- Add valgrind-3.12.0-quick-fatal-sigs.patch
|
||||||
- Add valgrind-3.12.0-exit_group.patch
|
- Add valgrind-3.12.0-exit_group.patch
|
||||||
- Add valgrind-3.12.0-deregister-stack.patch
|
- Add valgrind-3.12.0-deregister-stack.patch
|
||||||
|
- Add valgrind-3.12.0-x86-gdt-and-ss.patch
|
||||||
|
|
||||||
* Fri Feb 17 2017 Mark Wielaard <mjw@redhat.com> - 3.12.0-5
|
* Fri Feb 17 2017 Mark Wielaard <mjw@redhat.com> - 3.12.0-5
|
||||||
- Add valgrind-3.12.0-ppc64-r2.patch (#1424367)
|
- Add valgrind-3.12.0-ppc64-r2.patch (#1424367)
|
||||||
|
Loading…
Reference in New Issue
Block a user