| Index: src/trusted/validator/x86/decoder/generator/ncdecode_st.c
 | 
| diff --git a/src/trusted/validator/x86/decoder/generator/ncdecode_st.c b/src/trusted/validator/x86/decoder/generator/ncdecode_st.c
 | 
| deleted file mode 100644
 | 
| index faecc029977f549aaa6331506bc0295440756b8b..0000000000000000000000000000000000000000
 | 
| --- a/src/trusted/validator/x86/decoder/generator/ncdecode_st.c
 | 
| +++ /dev/null
 | 
| @@ -1,196 +0,0 @@
 | 
| -/*
 | 
| - * Copyright (c) 2011 The Native Client Authors. All rights reserved.
 | 
| - * Use of this source code is governed by a BSD-style license that can be
 | 
| - * found in the LICENSE file.
 | 
| - */
 | 
| -
 | 
| -/*
 | 
| - * ncdecode_st.c - Implements nested symbol tables.
 | 
| - *
 | 
| - * Note: We use linear lists
 | 
| - */
 | 
| -
 | 
| -#ifndef NACL_TRUSTED_BUT_NOT_TCB
 | 
| -#error("This file is not meant for use in the TCB")
 | 
| -#endif
 | 
| -
 | 
| -#include <assert.h>
 | 
| -#include <stdlib.h>
 | 
| -#include <string.h>
 | 
| -
 | 
| -#include "native_client/src/trusted/validator/x86/decoder/generator/ncdecode_st.h"
 | 
| -
 | 
| -#include "native_client/src/include/nacl_macros.h"
 | 
| -#include "native_client/src/include/portability.h"
 | 
| -#include "native_client/src/shared/platform/nacl_log.h"
 | 
| -#include "native_client/src/trusted/validator/x86/decoder/generator/ncdecode_tablegen.h"
 | 
| -
 | 
| -/* To turn on debugging of instruction decoding, change value of
 | 
| - * DEBUGGING to 1.
 | 
| - */
 | 
| -#define DEBUGGING 0
 | 
| -
 | 
| -#include "native_client/src/shared/utils/debugging.h"
 | 
| -
 | 
| -const char* NaClStValueKindName(NaClStValueKind kind) {
 | 
| -  /*
 | 
| -   * See https://code.google.com/p/nativeclient/issues/detail?id=3750
 | 
| -   */
 | 
| -  switch (kind) {
 | 
| -    case nacl_byte:
 | 
| -      return "nacl_byte";
 | 
| -    case nacl_text:
 | 
| -      return "nacl_text";
 | 
| -    case nacl_int:
 | 
| -      return "nacl_int";
 | 
| -    case nacl_defop:
 | 
| -      return "nacl_defop";
 | 
| -  }
 | 
| -  return "???";  /* better not be DCE'd */
 | 
| -}
 | 
| -
 | 
| -void NaClStValueAssign(
 | 
| -    NaClStValue* lhs,
 | 
| -    NaClStValue* rhs) {
 | 
| -  memcpy(lhs, rhs, sizeof(NaClStValue));
 | 
| -}
 | 
| -
 | 
| -void NaClStValuePrint(struct Gio* g, NaClStValue* value) {
 | 
| -  gprintf(g, "<%s : ", NaClStValueKindName(value->kind));
 | 
| -  switch (value->kind) {
 | 
| -    case nacl_byte:
 | 
| -      gprintf(g, "0x%02"NACL_PRIx8, value->value.byte_value);
 | 
| -      break;
 | 
| -    case nacl_int:
 | 
| -      gprintf(g, "%d", value->value.int_value);
 | 
| -      break;
 | 
| -    case nacl_text:
 | 
| -      gprintf(g, "'%s'", value->value.text_value);
 | 
| -      break;
 | 
| -    case nacl_defop:
 | 
| -      gprintf(g, "<defop>");
 | 
| -      break;
 | 
| -    default:
 | 
| -      gprintf(g, "???");
 | 
| -      break;
 | 
| -  }
 | 
| -  gprintf(g, ">");
 | 
| -}
 | 
| -
 | 
| -/* Element in the symbol table. */
 | 
| -typedef struct NaClSymbolTablePair {
 | 
| -  const char* name;          /* The name of the symbol. */
 | 
| -  NaClStValue value;   /* The value associated with the symbol. */
 | 
| -} NaClSymbolTablePair;
 | 
| -
 | 
| -/* Simple implementation of a symbol table using an array of size capacity. */
 | 
| -typedef struct NaClSymbolTable {
 | 
| -  /* The calling context defines the outer scope for processing
 | 
| -   * nested scopes.
 | 
| -   */
 | 
| -  struct NaClSymbolTable* calling_context;
 | 
| -  /* The current size of the symbol table. */
 | 
| -  size_t size;
 | 
| -  /* The maximum size of the symbol table. */
 | 
| -  size_t capacity;
 | 
| -  /* The array holding the contents of the symbol table. */
 | 
| -  NaClSymbolTablePair* values;
 | 
| -} NaClSymbolTable;
 | 
| -
 | 
| -NaClSymbolTable* NaClSymbolTableCreate(
 | 
| -    size_t capacity,
 | 
| -    NaClSymbolTable* calling_context) {
 | 
| -  NaClSymbolTable* st = (NaClSymbolTable*) malloc(sizeof(NaClSymbolTable));
 | 
| -  assert(NULL != st);
 | 
| -  st->calling_context = calling_context;
 | 
| -  st->size = 0;
 | 
| -  st->capacity = capacity;
 | 
| -  st->values = (NaClSymbolTablePair*)
 | 
| -      calloc(capacity, sizeof(NaClSymbolTablePair));
 | 
| -  assert(NULL != st->values);
 | 
| -  DEBUG(NaClLog(LOG_INFO,
 | 
| -                "NaClSymbolTableCreate(%"NACL_PRIdS") = %p\n",
 | 
| -                capacity, (void*) st));
 | 
| -  return st;
 | 
| -}
 | 
| -
 | 
| -void NaClSymbolTableDestroy(NaClSymbolTable* st) {
 | 
| -  DEBUG(NaClLog(LOG_INFO, "NaClSymbolTableDestroy(%p)\n", (void*) st));
 | 
| -  free(st);
 | 
| -}
 | 
| -
 | 
| -void NaClSymbolTablePut(
 | 
| -    const char* name,
 | 
| -    struct NaClStValue* value,
 | 
| -    NaClSymbolTable* st) {
 | 
| -  size_t i;
 | 
| -  DEBUG(NaClLog(LOG_INFO,
 | 
| -                "NaClSymbolTablePut('%s', ", name);
 | 
| -        NaClStValuePrint(NaClLogGetGio(), value);
 | 
| -        gprintf(NaClLogGetGio(), ", %p)\n", (void*) st));
 | 
| -  /* First see if already in the symbol table. */
 | 
| -  for (i = 0; i < st->size; ++i) {
 | 
| -    if (0 == strcmp(name, st->values[i].name)) {
 | 
| -      NaClStValueAssign(&(st->values[i].value), value);
 | 
| -      return;
 | 
| -    }
 | 
| -  }
 | 
| -  /* If reached, not in symbol table, add. */
 | 
| -  assert(st->size < st->capacity);
 | 
| -  st->values[st->size].name = strdup(name);
 | 
| -  assert(NULL != st->values[st->size].name);
 | 
| -  NaClStValueAssign(&(st->values[st->size++].value), value);
 | 
| -}
 | 
| -
 | 
| -void NaClSymbolTablePutByte(const char* name,
 | 
| -                            uint8_t byte,
 | 
| -                            struct NaClSymbolTable* st) {
 | 
| -  NaClStValue value;
 | 
| -  value.kind = nacl_byte;
 | 
| -  value.value.byte_value = byte;
 | 
| -  NaClSymbolTablePut(name, &value, st);
 | 
| -}
 | 
| -
 | 
| -void NaClSymbolTablePutText(const char* name,
 | 
| -                            const char* text,
 | 
| -                            struct NaClSymbolTable* st) {
 | 
| -  NaClStValue value;
 | 
| -  value.kind = nacl_text;
 | 
| -  value.value.text_value = text;
 | 
| -  NaClSymbolTablePut(name, &value, st);
 | 
| -}
 | 
| -
 | 
| -void NaClSymbolTablePutInt(const char* name,
 | 
| -                           int ival,
 | 
| -                           struct NaClSymbolTable* st) {
 | 
| -  NaClStValue value;
 | 
| -  value.kind = nacl_int;
 | 
| -  value.value.int_value = ival;
 | 
| -  NaClSymbolTablePut(name, &value, st);
 | 
| -}
 | 
| -
 | 
| -struct NaClStValue* NaClSymbolTableGet(
 | 
| -    const char* name,
 | 
| -    struct NaClSymbolTable* st) {
 | 
| -  size_t i;
 | 
| -  NaClStValue* result;
 | 
| -  DEBUG(NaClLog(LOG_INFO,
 | 
| -                "-> NaClSymbolTableGet('%s', %p):\n", name, (void*) st));
 | 
| -  while (NULL != st) {
 | 
| -    /* First see if already in the symbol table. */
 | 
| -    for (i = 0; i < st->size; ++i) {
 | 
| -      if (0 == strcmp(name, st->values[i].name)) {
 | 
| -        result = &(st->values[i].value);
 | 
| -        DEBUG(NaClLog(LOG_INFO, "<- NaClSymbolTableGet = ");
 | 
| -              NaClStValuePrint(NaClLogGetGio(), result);
 | 
| -              gprintf(NaClLogGetGio(), ")\n"));
 | 
| -        return result;
 | 
| -      }
 | 
| -    }
 | 
| -    /* If reached, not in this symbol table. Try calling context. */
 | 
| -    st = st->calling_context;
 | 
| -  }
 | 
| -  /* If reached, not defined in any calling context. */
 | 
| -  DEBUG(NaClLog(LOG_INFO, "<- NaClSymbolTableGet = NULL\n"));
 | 
| -  return NULL;
 | 
| -}
 | 
| 
 |