Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: src/trusted/validator_mips/validator.h

Issue 1535443005: [MIPS] Make validator allow only two load patterns via $t8 (Closed) Base URL: https://chromium.googlesource.com/native_client/src/native_client@master
Patch Set: Minor update. Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The Native Client Authors. All rights reserved. 2 * Copyright (c) 2012 The Native Client Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be 3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file. 4 * found in the LICENSE file.
5 */ 5 */
6 6
7 #ifndef NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_MIPS_VALIDATOR_H 7 #ifndef NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_MIPS_VALIDATOR_H
8 #define NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_MIPS_VALIDATOR_H 8 #define NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_MIPS_VALIDATOR_H
9 9
10 /* 10 /*
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 } 267 }
268 268
269 bool IsJmpReg() const { 269 bool IsJmpReg() const {
270 return decoder_->IsJmpReg(); 270 return decoder_->IsJmpReg();
271 } 271 }
272 272
273 bool IsLoadStore() const { 273 bool IsLoadStore() const {
274 return decoder_->IsLoadStore(); 274 return decoder_->IsLoadStore();
275 } 275 }
276 276
277 bool IsLoadWord() const {
278 return decoder_->IsLoadWord();
279 }
280
281 uint32_t GetImm() const {
282 return decoder_->GetImm(inst_);
283 }
284
277 bool IsDirectJump() const { 285 bool IsDirectJump() const {
278 return decoder_->IsDirectJump(); 286 return decoder_->IsDirectJump();
279 } 287 }
280 288
281 bool IsDestGprReg(nacl_mips_dec::RegisterList rl) const { 289 bool IsDestGprReg(nacl_mips_dec::RegisterList rl) const {
282 return rl.ContainsAny(nacl_mips_dec::RegisterList(DestGprReg())); 290 return rl.ContainsAny(nacl_mips_dec::RegisterList(DestGprReg()));
283 } 291 }
284 292
285 bool IsDataRegMask() const { 293 bool IsDataRegMask() const {
286 return IsMask(DestGprReg(), nacl_mips_dec::Register::LoadStoreMask()); 294 return IsMask(DestGprReg(), nacl_mips_dec::Register::LoadStoreMask());
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 */ 386 */
379 387
380 // An instruction is unsafe -- more information in the SafetyLevel. 388 // An instruction is unsafe -- more information in the SafetyLevel.
381 const char * const kProblemUnsafe = "kProblemUnsafe"; 389 const char * const kProblemUnsafe = "kProblemUnsafe";
382 // A branch would break a pseudo-operation pattern. 390 // A branch would break a pseudo-operation pattern.
383 const char * const kProblemBranchSplitsPattern = "kProblemBranchSplitsPattern"; 391 const char * const kProblemBranchSplitsPattern = "kProblemBranchSplitsPattern";
384 // A branch targets an invalid code address (out of segment). 392 // A branch targets an invalid code address (out of segment).
385 const char * const kProblemBranchInvalidDest = "kProblemBranchInvalidDest"; 393 const char * const kProblemBranchInvalidDest = "kProblemBranchInvalidDest";
386 // A load/store uses an unsafe (non-masked) base address. 394 // A load/store uses an unsafe (non-masked) base address.
387 const char * const kProblemUnsafeLoadStore = "kProblemUnsafeLoadStore"; 395 const char * const kProblemUnsafeLoadStore = "kProblemUnsafeLoadStore";
396 // A thread pointer load/store is unsafe.
397 const char * const kProblemUnsafeLoadStoreThreadPointer =
398 "kProblemUnsafeLoadStoreThreadPointer";
388 // An instruction updates a data-address register (e.g. SP) without masking. 399 // An instruction updates a data-address register (e.g. SP) without masking.
389 const char * const kProblemUnsafeDataWrite = "kProblemUnsafeDataWrite"; 400 const char * const kProblemUnsafeDataWrite = "kProblemUnsafeDataWrite";
390 // An instruction updates a read-only register (e.g. t6, t7, t8). 401 // An instruction updates a read-only register (e.g. t6, t7, t8).
391 const char * const kProblemReadOnlyRegister = "kProblemReadOnlyRegister"; 402 const char * const kProblemReadOnlyRegister = "kProblemReadOnlyRegister";
392 // A pseudo-op pattern crosses a bundle boundary. 403 // A pseudo-op pattern crosses a bundle boundary.
393 const char * const kProblemPatternCrossesBundle = 404 const char * const kProblemPatternCrossesBundle =
394 "kProblemPatternCrossesBundle"; 405 "kProblemPatternCrossesBundle";
395 // A linking branch instruction is not in the last bundle slot. 406 // A linking branch instruction is not in the last bundle slot.
396 const char * const kProblemMisalignedCall = "kProblemMisalignedCall"; 407 const char * const kProblemMisalignedCall = "kProblemMisalignedCall";
397 // A data register is found in a branch delay slot. 408 // A data register is found in a branch delay slot.
398 const char * const kProblemDataRegInDelaySlot = "kProblemDataRegInDelaySlot"; 409 const char * const kProblemDataRegInDelaySlot = "kProblemDataRegInDelaySlot";
399 // A jump to trampoline instruction which is not a start of a bundle. 410 // A jump to trampoline instruction which is not a start of a bundle.
400 const char * const kProblemUnalignedJumpToTrampoline = 411 const char * const kProblemUnalignedJumpToTrampoline =
401 "kProblemUnalignedJumpToTrampoline"; 412 "kProblemUnalignedJumpToTrampoline";
402 // A jump register instruction is not guarded. 413 // A jump register instruction is not guarded.
403 const char * const kProblemUnsafeJumpRegister = "kProblemUnsafeJumpRegister"; 414 const char * const kProblemUnsafeJumpRegister = "kProblemUnsafeJumpRegister";
404 // Two consecutive branches/jumps. Branch/jump in the delay slot. 415 // Two consecutive branches/jumps. Branch/jump in the delay slot.
405 const char * const kProblemBranchInDelaySlot = "kProblemBranchInDelaySlot"; 416 const char * const kProblemBranchInDelaySlot = "kProblemBranchInDelaySlot";
406 } // namespace nacl_mips_val 417 } // namespace nacl_mips_val
407 418
408 #endif // NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_MIPS_VALIDATOR_H 419 #endif // NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_MIPS_VALIDATOR_H
OLDNEW
« no previous file with comments | « src/trusted/validator_mips/validation-report.py ('k') | src/trusted/validator_mips/validator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698