Chromium Code Reviews| Index: src/trusted/validator_arm/ncvalidate.cc |
| diff --git a/src/trusted/validator_arm/ncvalidate.cc b/src/trusted/validator_arm/ncvalidate.cc |
| index 6601d7a77fe68142c79273c241cf5779b5118bf6..4697d90b1b12dfa5111fbe17ae73f3e35c5e5177 100644 |
| --- a/src/trusted/validator_arm/ncvalidate.cc |
| +++ b/src/trusted/validator_arm/ncvalidate.cc |
| @@ -46,14 +46,19 @@ class EarlyExitProblemSink : public nacl_arm_val::ProblemSink { |
| EXTERN_C_BEGIN |
| -int NCValidateSegment(uint8_t *mbase, uint32_t vbase, size_t size) { |
| +int NCValidateSegment(uint8_t *mbase, uint32_t vbase, size_t size, |
| + bool thumb) { |
|
Karl
2011/09/19 19:56:05
Thumb2?
|
| + nacl_arm_dec::RegisterList roRegs = Register(9); |
| + if (thumb) { |
| + roRegs = nacl_arm_dec::kRegisterListNothing; |
| + } |
| SfiValidator validator( |
| 16, // bytes per bundle |
| 1U * 1024 * 1024 * 1024, // bytes of code space |
| 1U * 1024 * 1024 * 1024, // bytes of data space |
| - Register(9), // read only register(s) |
| - kRegisterStack); // data addressing register(s) |
| - |
| + roRegs, // read only register(s) |
| + kRegisterStack, // data addressing register(s) |
| + thumb); |
| EarlyExitProblemSink sink; |
| vector<CodeSegment> segments; |
| @@ -74,10 +79,11 @@ NaClValidationStatus NACL_SUBARCH_NAME(ApplyValidator, arm, 32) ( |
| Bool local_cpu) { |
| NaClValidationStatus status = NaClValidationFailedNotImplemented; |
| UNREFERENCED_PARAMETER(local_cpu); |
| - UNREFERENCED_PARAMETER(sb_kind); |
| + |
| if (bundle_size == 16) { |
| if (kind == NaClApplyCodeValidation) { |
| - status = ((0 == NCValidateSegment(data, guest_addr, size)) |
| + status = ((0 == NCValidateSegment(data, guest_addr, size, |
| + sb_kind == NACL_SB_ARM_THUMB2)) |
| ? NaClValidationSucceeded : NaClValidationFailed); |
| } |
| } |