Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15:Update
valgrind
Fix-access-to-time-base-register-to-return-64-b...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File Fix-access-to-time-base-register-to-return-64-bits.patch of Package valgrind
From 6a55b1e82ccda3f0d663d2cc89eb543ae2d096bf Mon Sep 17 00:00:00 2001 From: Carl Love <carll@us.ibm.com> Date: Tue, 31 Oct 2017 13:45:28 -0500 Subject: [PATCH] Fix access to time base register to return 64-bits. --- NEWS | 1 + VEX/priv/guest_ppc_toIR.c | 70 +++++++++++++++++++++++++++++++++++++---------- 2 files changed, 56 insertions(+), 15 deletions(-) --- valgrind-3.13.0/NEWS 2017-06-15 15:37:40.000000000 +0200 +++ valgrind-3.13.0/NEWS 2018-09-25 12:08:56.395509577 +0200 @@ -250,6 +250,7 @@ 380200 xtree generated callgrind files refer to files without directory name 380202 Assertion failure for cache line size (cls == 64) on aarch64. 380397 s390x: __GI_strcspn() replacement needed +386397 PPC64, valgrind truncates powerpc timebase to 32-bits. n-i-bz Fix pub_tool_basics.h build issue with g++ 4.4.7. (3.13.0.RC1: 2 June 2017, vex r3386, valgrind r16434) diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c index f63146e7e256..4ec37f5f994f 100644 --- a/VEX/priv/guest_ppc_toIR.c +++ b/VEX/priv/guest_ppc_toIR.c @@ -9419,26 +9419,60 @@ static Bool dis_proc_ctl ( const VexAbiInfo* vbi, UInt theInstr ) putIReg( rD_addr, getGST( PPC_GST_SPRG3_RO ) ); break; - /* Even a lowly PPC7400 can run the associated helper, so no - obvious need for feature testing at this point. */ - case 268 /* 0x10C */: - case 269 /* 0x10D */: { - UInt arg = SPR==268 ? 0 : 1; - IRTemp val = newTemp(Ity_I32); - IRExpr** args = mkIRExprVec_1( mkU32(arg) ); + case 268 /* 0x10C TB - 64 bit time base register */: + { + IRTemp val = newTemp(Ity_I64); + IRExpr** args = mkIRExprVec_0(); IRDirty* d = unsafeIRDirty_1_N( - val, - 0/*regparms*/, - "ppc32g_dirtyhelper_MFSPR_268_269", - fnptr_to_fnentry - (vbi, &ppc32g_dirtyhelper_MFSPR_268_269), - args - ); + val, + 0/*regparms*/, + "ppcg_dirtyhelper_MFTB", + fnptr_to_fnentry(vbi, + &ppcg_dirtyhelper_MFTB), + args ); + /* execute the dirty call, dumping the result in val. */ + stmt( IRStmt_Dirty(d) ); + putIReg( rD_addr, (mode64) ? mkexpr(val) : + unop(Iop_64to32, mkexpr(val)) ); + + break; + } + case 269 /* 0x10D TBU - upper 32-bits of time base register */: + { + DIP("mfspr r%u,%u", rD_addr, SPR); + IRTemp val = newTemp(Ity_I64); + IRExpr** args = mkIRExprVec_0(); + IRDirty* d = unsafeIRDirty_1_N( + val, + 0/*regparms*/, + "ppcg_dirtyhelper_MFTB", + fnptr_to_fnentry(vbi, + &ppcg_dirtyhelper_MFTB), + args ); /* execute the dirty call, dumping the result in val. */ stmt( IRStmt_Dirty(d) ); putIReg( rD_addr, - mkWidenFrom32(ty, mkexpr(val), False/*unsigned*/) ); + mkWidenFrom32(ty, unop(Iop_64HIto32, mkexpr(val)), + /* Signed */False) ); + break; + } + case 284 /* 0x1 TBL - lower 32-bits of time base register */: + { DIP("mfspr r%u,%u", rD_addr, SPR); + IRTemp val = newTemp(Ity_I64); + IRExpr** args = mkIRExprVec_0(); + IRDirty* d = unsafeIRDirty_1_N( + val, + 0/*regparms*/, + "ppcg_dirtyhelper_MFTB", + fnptr_to_fnentry(vbi, + &ppcg_dirtyhelper_MFTB), + args ); + /* execute the dirty call, dumping the result in val. */ + stmt( IRStmt_Dirty(d) ); + putIReg( rD_addr, + mkWidenFrom32(ty, unop(Iop_64to32, mkexpr(val)), + /* Signed */False) ); break; } @@ -9493,6 +9527,12 @@ static Bool dis_proc_ctl ( const VexAbiInfo* vbi, UInt theInstr ) putIReg( rD_addr, (mode64) ? mkexpr(val) : unop(Iop_64to32, mkexpr(val)) ); break; + case 284: + DIP("mftbl r%u", rD_addr); + putIReg( rD_addr, + mkWidenFrom32(ty, unop(Iop_64to32, mkexpr(val)), + /* Signed */False) ); + break; default: return False; /* illegal instruction */ } -- 2.13.7
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor