Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(669)

Unified Diff: src/trusted/validator_ragel/unreviewed/decoder-test.c

Issue 10031039: Add ragel validator to SCONS (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client/
Patch Set: Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/trusted/validator_ragel/unreviewed/decoder-test.c
===================================================================
--- src/trusted/validator_ragel/unreviewed/decoder-test.c (revision 8217)
+++ src/trusted/validator_ragel/unreviewed/decoder-test.c (working copy)
@@ -5,26 +5,39 @@
*/
#include <assert.h>
-#include <elf.h>
-#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include "decoder.h"
-#undef TRUE
-#define TRUE 1
+#include "native_client/src/include/elf32.h"
+#include "native_client/src/include/elf64.h"
+#include "native_client/src/shared/platform/nacl_check.h"
+#include "native_client/src/shared/utils/types.h"
+#include "native_client/src/trusted/validator_ragel/unreviewed/decoder.h"
-#undef FALSE
-#define FALSE 0
+/* This is a copy of NaClLog_Function from shared/platform/nacl_log.c to avoid
+ * linking in code in NaCl shared code in the unreviewed/Makefile and be able to
+ * use CHECK().
+ * TODO(khim): remove the copy of NaClLog_Function implementation as soon as
+ * unreviewed/Makefile is eliminated.
+ */
+void NaClLog_Function(int detail_level, char const *fmt, ...) {
+ va_list ap;
+
+ UNREFERENCED_PARAMETER(detail_level);
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ exit(1);
+}
+
static void CheckBounds(unsigned char *data, size_t data_size,
void *ptr, size_t inside_size) {
- assert(data <= (unsigned char *) ptr);
- assert((unsigned char *) ptr + inside_size <= data + data_size);
+ CHECK(data <= (unsigned char *) ptr);
+ CHECK((unsigned char *) ptr + inside_size <= data + data_size);
}
-void ReadFile(const char *filename, uint8_t **result, size_t *result_size) {
+void ReadImage(const char *filename, uint8_t **result, size_t *result_size) {
FILE *fp;
uint8_t *data;
size_t file_size;
@@ -76,7 +89,7 @@
int show_name_suffix = FALSE;
int empty_rex_prefix_ok = FALSE;
#define print_name(x) (printf((x)), shown_name += strlen((x)))
- int shown_name = 0;
+ size_t shown_name = 0;
int i, operand_type;
/* "fwait" is nasty: any number of them will be included in other X87
@@ -93,18 +106,18 @@
} else if (((struct DecodeState *)userdata)->fwait) {
if ((begin[0] < 0xd8) || (begin[0] > 0xdf)) {
while ((((struct DecodeState *)userdata)->fwait) < begin) {
- printf("%*zx:\t \tfwait\n",
+ printf("%*lx:\t \tfwait\n",
((struct DecodeState *)userdata)->width,
- ((((struct DecodeState *)userdata)->fwait++) -
- (((struct DecodeState *)userdata)->offset)));
+ (long)((((struct DecodeState *)userdata)->fwait++) -
+ (((struct DecodeState *)userdata)->offset)));
}
} else {
begin = ((struct DecodeState *)userdata)->fwait;
}
((struct DecodeState *)userdata)->fwait = FALSE;
}
- printf("%*zx:\t", ((struct DecodeState *)userdata)->width,
- (begin - (((struct DecodeState *)userdata)->offset)));
+ printf("%*lx:\t", ((struct DecodeState *)userdata)->width,
+ (long)(begin - (((struct DecodeState *)userdata)->offset)));
for (p = begin; p < begin + 7; ++p) {
if (p >= end) {
printf(" ");
@@ -530,7 +543,7 @@
if ((instruction->rm.base >= REG_R8) &&
(instruction->rm.base <= REG_R15)) {
++rex_bits;
- } else if ((instruction->rm.base == REG_NONE) ||
+ } else if ((instruction->rm.base == NO_REG) ||
(instruction->rm.base == REG_RIP)) {
++maybe_rex_bits;
}
@@ -776,11 +789,12 @@
}
}
{
+ size_t i;
/* Print branch hint suffixes for conditional jump instructions (Jcc). */
const char* jcc_jumps[] = {
"ja", "jae", "jbe", "jb", "je", "jg", "jge", "jle",
"jl", "jne", "jno", "jnp", "jns", "jo", "jp", "js", NULL};
- for (int i = 0; jcc_jumps[i] != NULL; ++i) {
+ for (i = 0; jcc_jumps[i] != NULL; ++i) {
if (!strcmp(instruction_name, jcc_jumps[i])) {
if (instruction->prefix.branch_not_taken) {
print_name(",pn");
@@ -1149,11 +1163,11 @@
break;
case REG_RM: {
if (instruction->rm.offset) {
- printf("0x%"PRIx64, instruction->rm.offset);
+ printf("0x%"NACL_PRIx64, instruction->rm.offset);
}
if (((struct DecodeState *)userdata)->ia32_mode) {
- if ((instruction->rm.base != REG_NONE) ||
- (instruction->rm.index != REG_NONE) ||
+ if ((instruction->rm.base != NO_REG) ||
+ (instruction->rm.index != NO_REG) ||
(instruction->rm.scale != 0)) {
printf("(");
}
@@ -1166,7 +1180,7 @@
case REG_RBP: printf("%%ebp"); break;
case REG_RSI: printf("%%esi"); break;
case REG_RDI: printf("%%edi"); break;
- case REG_NONE: break;
+ case NO_REG: break;
case REG_R8:
case REG_R9:
case REG_R10:
@@ -1201,7 +1215,7 @@
(instruction->rm.scale != 0))
printf(",%%eiz,%d",1<<instruction->rm.scale);
break;
- case REG_NONE: break;
+ case NO_REG: break;
case REG_R8:
case REG_R9:
case REG_R10:
@@ -1222,13 +1236,13 @@
case JMP_TO:
assert(FALSE);
}
- if ((instruction->rm.base != REG_NONE) ||
- (instruction->rm.index != REG_NONE) ||
+ if ((instruction->rm.base != NO_REG) ||
+ (instruction->rm.index != NO_REG) ||
(instruction->rm.scale != 0)) {
printf(")");
}
} else {
- if ((instruction->rm.base != REG_NONE) ||
+ if ((instruction->rm.base != NO_REG) ||
(instruction->rm.index != REG_RIZ) ||
(instruction->rm.scale != 0)) {
printf("(");
@@ -1251,7 +1265,7 @@
case REG_R14: printf("%%r14"); break;
case REG_R15: printf("%%r15"); break;
case REG_RIP: printf("%%rip"); print_rip = TRUE; break;
- case REG_NONE: break;
+ case NO_REG: break;
case REG_RM:
case REG_RIZ:
case REG_IMM:
@@ -1281,13 +1295,13 @@
case REG_R13: printf(",%%r13,%d",1<<instruction->rm.scale); break;
case REG_R14: printf(",%%r14,%d",1<<instruction->rm.scale); break;
case REG_R15: printf(",%%r15,%d",1<<instruction->rm.scale); break;
- case REG_RIZ: if (((instruction->rm.base != REG_NONE) &&
+ case REG_RIZ: if (((instruction->rm.base != NO_REG) &&
(instruction->rm.base != REG_RSP) &&
(instruction->rm.base != REG_R12)) ||
(instruction->rm.scale != 0))
printf(",%%riz,%d",1<<instruction->rm.scale);
break;
- case REG_NONE: break;
+ case NO_REG: break;
case REG_RM:
case REG_RIP:
case REG_IMM:
@@ -1300,7 +1314,7 @@
case JMP_TO:
assert(FALSE);
}
- if ((instruction->rm.base != REG_NONE) ||
+ if ((instruction->rm.base != NO_REG) ||
(instruction->rm.index != REG_RIZ) ||
(instruction->rm.scale != 0)) {
printf(")");
@@ -1309,11 +1323,11 @@
}
break;
case REG_IMM: {
- printf("$0x%"PRIx64,instruction->imm[0]);
+ printf("$0x%"NACL_PRIx64,instruction->imm[0]);
break;
}
case REG_IMM2: {
- printf("$0x%"PRIx64,instruction->imm[1]);
+ printf("$0x%"NACL_PRIx64,instruction->imm[1]);
break;
}
case REG_PORT_DX: printf("(%%dx)"); break;
@@ -1336,28 +1350,28 @@
}
break;
case JMP_TO: if (instruction->operands[0].type == OperandSize16bit)
- printf("0x%zx", ((end + instruction->rm.offset -
+ printf("0x%lx", (long)((end + instruction->rm.offset -
(((struct DecodeState *)userdata)->offset)) & 0xffff));
else
- printf("0x%zx", (end + instruction->rm.offset -
+ printf("0x%lx", (long)(end + instruction->rm.offset -
(((struct DecodeState *)userdata)->offset)));
break;
case REG_RIP:
case REG_RIZ:
- case REG_NONE:
+ case NO_REG:
assert(FALSE);
}
delimeter = ',';
}
if (print_rip) {
- printf(" # 0x%8"PRIx64,
+ printf(" # 0x%8"NACL_PRIx64,
(uint64_t) (end + instruction->rm.offset -
(((struct DecodeState *)userdata)->offset)));
}
printf("\n");
begin += 7;
while (begin < end) {
- printf("%*"PRIx64":\t", ((struct DecodeState *)userdata)->width,
+ printf("%*"NACL_PRIx64":\t", ((struct DecodeState *)userdata)->width,
(uint64_t) (begin - (((struct DecodeState *)userdata)->offset)));
for (p = begin; p < begin + 7; ++p) {
if (p >= end) {
@@ -1376,7 +1390,7 @@
}
void ProcessError (const uint8_t *ptr, void *userdata) {
- printf("rejected at %"PRIx64" (byte 0x%02"PRIx32")\n",
+ printf("rejected at %"NACL_PRIx64" (byte 0x%02"NACL_PRIx32")\n",
(uint64_t) (ptr - (((struct DecodeState *)userdata)->offset)),
*ptr);
}
@@ -1386,7 +1400,7 @@
uint8_t *data;
int count;
- ReadFile(filename, &data, &data_size);
+ ReadImage(filename, &data, &data_size);
if (data[4] == 1) {
for (count = 0; count < repeat_count; ++count) {
Elf32_Ehdr *header;
@@ -1423,8 +1437,8 @@
return res;
} else if (state.fwait) {
while (state.fwait < data + section->sh_offset + section->sh_size) {
- printf("%*zx:\t9b \tfwait\n",
- state.width, (state.fwait++ - state.offset));
+ printf("%*lx:\t9b \tfwait\n",
+ state.width, (long)(state.fwait++ - state.offset));
}
}
}
@@ -1461,15 +1475,16 @@
state.width = 16;
}
CheckBounds(data, data_size,
- data + section->sh_offset, section->sh_size);
- res = DecodeChunkAMD64(data + section->sh_offset, section->sh_size,
- ProcessInstruction, ProcessError, &state);
+ data + section->sh_offset, (size_t)section->sh_size);
+ res = DecodeChunkAMD64(data + section->sh_offset,
+ (size_t)section->sh_size,
+ ProcessInstruction, ProcessError, &state);
if (res != 0) {
return res;
} else if (state.fwait) {
while (state.fwait < data + section->sh_offset + section->sh_size) {
- printf("%*zx:\t9b \tfwait\n",
- state.width, (state.fwait++ - state.offset));
+ printf("%*lx:\t9b \tfwait\n",
+ state.width, (long)(state.fwait++ - state.offset));
}
}
}
« no previous file with comments | « src/trusted/validator_ragel/unreviewed/decoder.h ('k') | src/trusted/validator_ragel/unreviewed/decoder-x86_32.rl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698