| Index: src/trusted/validator_arm/ncvalidate.cc
|
| diff --git a/src/trusted/validator_arm/ncvalidate.cc b/src/trusted/validator_arm/ncvalidate.cc
|
| index 666747f638a4060a9d661b60eb89147e85bcd17f..8bb1cde5d770cd8b42c40bd232c39c9055b2e96a 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,
|
| + uint8_t 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;
|
| @@ -70,12 +75,13 @@ NaClValidationStatus NACL_SUBARCH_NAME(ApplyValidator, arm, 32) (
|
| uint8_t *data,
|
| size_t size,
|
| int bundle_size,
|
| - Bool local_cpu) {
|
| + Bool local_cpu,
|
| + uint8_t thumb) {
|
| NaClValidationStatus status = NaClValidationFailedNotImplemented;
|
| UNREFERENCED_PARAMETER(local_cpu);
|
| if (bundle_size == 16) {
|
| if (kind == NaClApplyCodeValidation) {
|
| - status = ((0 == NCValidateSegment(data, guest_addr, size))
|
| + status = ((0 == NCValidateSegment(data, guest_addr, size, thumb))
|
| ? NaClValidationSucceeded : NaClValidationFailed);
|
| }
|
| }
|
| @@ -87,12 +93,14 @@ NaClValidationStatus NACL_SUBARCH_NAME(ApplyValidatorCodeReplacement, arm, 32)
|
| uint8_t *data_old,
|
| uint8_t *data_new,
|
| size_t size,
|
| - int bundle_size) {
|
| + int bundle_size,
|
| + uint8_t thumb) {
|
| UNREFERENCED_PARAMETER(guest_addr);
|
| UNREFERENCED_PARAMETER(data_old);
|
| UNREFERENCED_PARAMETER(data_new);
|
| UNREFERENCED_PARAMETER(size);
|
| UNREFERENCED_PARAMETER(bundle_size);
|
| + UNREFERENCED_PARAMETER(thumb);
|
| return NaClValidationFailedNotImplemented;
|
| }
|
|
|
| @@ -101,12 +109,14 @@ NaClValidationStatus NACL_SUBARCH_NAME(ApplyValidatorCopy, arm, 32)
|
| uint8_t *data_old,
|
| uint8_t *data_new,
|
| size_t size,
|
| - int bundle_size) {
|
| + int bundle_size,
|
| + uint8_t thumb) {
|
| UNREFERENCED_PARAMETER(guest_addr);
|
| UNREFERENCED_PARAMETER(data_old);
|
| UNREFERENCED_PARAMETER(data_new);
|
| UNREFERENCED_PARAMETER(size);
|
| UNREFERENCED_PARAMETER(bundle_size);
|
| + UNREFERENCED_PARAMETER(thumb);
|
| return NaClValidationFailedNotImplemented;
|
| }
|
|
|
|
|