| Index: src/trusted/validator_arm/actual_classes.cc | 
| diff --git a/src/trusted/validator_arm/actual_classes.cc b/src/trusted/validator_arm/actual_classes.cc | 
| index 505a3ef94fb23f15d640083cde8993ecdd470aa7..f190e772ba9652496fdf6a572fd7a229acda02c9 100644 | 
| --- a/src/trusted/validator_arm/actual_classes.cc | 
| +++ b/src/trusted/validator_arm/actual_classes.cc | 
| @@ -528,22 +528,34 @@ RegisterList EffectiveNoOp::defs(Instruction i) const { | 
| return RegisterList(); | 
| } | 
|  | 
| -// Roadblock | 
| -SafetyLevel Roadblock::safety(Instruction i) const { | 
| -  UNREFERENCED_PARAMETER(i); | 
| -  return MAY_BE_SAFE; | 
| +// PermanentlyUndefined | 
| +SafetyLevel PermanentlyUndefined::safety(Instruction i) const { | 
| +  // Restrict UDF's encoding to values we've chosen as safe. | 
| +  if ((i.Bits(31, 0) == kHaltFill) || | 
| +      (i.Bits(31, 0) == kAbortNow)) | 
| +    return MAY_BE_SAFE; | 
| +  return FORBIDDEN_OPERANDS; | 
| } | 
|  | 
| -RegisterList Roadblock::defs(Instruction i) const { | 
| +RegisterList PermanentlyUndefined::defs(Instruction i) const { | 
| UNREFERENCED_PARAMETER(i); | 
| return RegisterList(); | 
| } | 
|  | 
| // Breakpoint | 
| SafetyLevel Breakpoint::safety(Instruction i) const { | 
| -  return i.GetCondition() == Instruction::AL | 
| -      ? MAY_BE_SAFE | 
| -      : UNPREDICTABLE; | 
| +  if (i.GetCondition() != Instruction::AL) | 
| +    return UNPREDICTABLE; | 
| +  // Restrict BKPT's encoding to values we've chosen as safe. | 
| +  if ((i.Bits(31, 0) == kLiteralPoolHeadInstruction) || | 
| +      (i.Bits(31, 0) == kBreakpoint)) | 
| +    return MAY_BE_SAFE; | 
| +  return FORBIDDEN_OPERANDS; | 
| +} | 
| + | 
| +RegisterList Breakpoint::defs(Instruction i) const { | 
| +  UNREFERENCED_PARAMETER(i); | 
| +  return RegisterList(); | 
| } | 
|  | 
| bool Breakpoint::is_literal_pool_head(const Instruction i) const { | 
|  |