| 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) {
|
| + 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);
|
| }
|
| }
|
|
|