예제 #1
0
int main(void) {
    NaClCPUFeaturesX86 fv;
    NaClCPUData cpu_data;
    int feature_id;
    NaClCPUDataGet(&cpu_data);

    NaClGetCurrentCPUFeaturesX86((NaClCPUFeatures *) &fv);
    if (NaClArchSupportedX86(&fv)) {
        printf("This is a native client %d-bit %s compatible computer\n",
               NACL_TARGET_SUBARCH, GetCPUIDString(&cpu_data));
    } else {
        if (!NaClGetCPUFeatureX86(&fv, NaClCPUFeatureX86_CPUIDSupported)) {
            printf("Computer doesn't support CPUID\n");
        }
        if (!NaClGetCPUFeatureX86(&fv, NaClCPUFeatureX86_CPUSupported)) {
            printf("Computer id %s is not supported\n", GetCPUIDString(&cpu_data));
        }
    }

    printf("This processor has:\n");
    for (feature_id = 0; feature_id < NaClCPUFeatureX86_Max; ++feature_id) {
        if (NaClGetCPUFeatureX86(&fv, feature_id))
            printf("        %s\n", NaClGetCPUFeatureX86Name(feature_id));
    }
    return 0;
}
예제 #2
0
/* Helper function to report unsupported features */
static INLINE void NaClCheckFeature(NaClCPUFeatureX86ID feature,
                                    struct NaClValidatorState* vstate,
                                    Bool* squash_me) {
  if (!NaClGetCPUFeatureX86(&vstate->cpu_features, feature)) {
    if (!NaClGetCPUFeatureX86(&vstate->cpu_checks.cpu_features, feature)) {
      NaClValidatorInstMessage(
          LOG_WARNING, vstate, vstate->cur_inst_state,
          "CPU model does not support %s instructions.\n",
          NaClGetCPUFeatureX86Name(feature));
      NaClSetCPUFeatureX86(&vstate->cpu_checks.cpu_features, feature, TRUE);
    }
    *squash_me = TRUE;
  }
}