diff --git a/lib/Bytecode/Reader/ConstantReader.cpp b/lib/Bytecode/Reader/ConstantReader.cpp
index 0ad38b4..80c6fc3 100644
--- a/lib/Bytecode/Reader/ConstantReader.cpp
+++ b/lib/Bytecode/Reader/ConstantReader.cpp
@@ -13,8 +13,8 @@
 #include "llvm/Constants.h"
 #include <algorithm>
 
-const Type *BytecodeParser::parseTypeConstant(const uchar *&Buf,
-					      const uchar *EndBuf) {
+const Type *BytecodeParser::parseTypeConstant(const unsigned char *&Buf,
+					      const unsigned char *EndBuf) {
   unsigned PrimType;
   if (read_vbr(Buf, EndBuf, PrimType)) return 0;
 
@@ -131,7 +131,8 @@
 // with a new resolved concrete type.
 //
 void debug_type_tables();
-bool BytecodeParser::parseTypeConstants(const uchar *&Buf, const uchar *EndBuf,
+bool BytecodeParser::parseTypeConstants(const unsigned char *&Buf,
+                                        const unsigned char *EndBuf,
 					TypeValuesListTy &Tab,
 					unsigned NumEntries) {
   assert(Tab.size() == 0 && "should not have read type constants in before!");
@@ -173,7 +174,8 @@
 }
 
 
-bool BytecodeParser::parseConstantValue(const uchar *&Buf, const uchar *EndBuf,
+bool BytecodeParser::parseConstantValue(const unsigned char *&Buf,
+                                        const unsigned char *EndBuf,
                                         const Type *Ty, Constant *&V) {
 
   // We must check for a ConstantExpr before switching by type because
@@ -379,12 +381,14 @@
   return false;
 }
 
-bool BytecodeParser::ParseGlobalTypes(const uchar *&Buf, const uchar *EndBuf) {
+bool BytecodeParser::ParseGlobalTypes(const unsigned char *&Buf,
+                                      const unsigned char *EndBuf) {
   ValueTable T;
   return ParseConstantPool(Buf, EndBuf, T, ModuleTypeValues);
 }
 
-bool BytecodeParser::ParseConstantPool(const uchar *&Buf, const uchar *EndBuf,
+bool BytecodeParser::ParseConstantPool(const unsigned char *&Buf,
+                                       const unsigned char *EndBuf,
 				       ValueTable &Tab, 
 				       TypeValuesListTy &TypeTab) {
   while (Buf < EndBuf) {
diff --git a/lib/Bytecode/Reader/InstructionReader.cpp b/lib/Bytecode/Reader/InstructionReader.cpp
index 2fc52ad..d652af7 100644
--- a/lib/Bytecode/Reader/InstructionReader.cpp
+++ b/lib/Bytecode/Reader/InstructionReader.cpp
@@ -17,7 +17,8 @@
 #include "llvm/iPHINode.h"
 #include "llvm/iOther.h"
 
-bool BytecodeParser::ParseRawInst(const uchar *&Buf, const uchar *EndBuf, 
+bool BytecodeParser::ParseRawInst(const unsigned char *&Buf,
+                                  const unsigned char *EndBuf, 
 				  RawInst &Result) {
   unsigned Op, Typ;
   if (read(Buf, EndBuf, Op)) return true;
@@ -113,7 +114,8 @@
 }
 
 
-bool BytecodeParser::ParseInstruction(const uchar *&Buf, const uchar *EndBuf,
+bool BytecodeParser::ParseInstruction(const unsigned char *&Buf,
+                                      const unsigned char *EndBuf,
 				      Instruction *&Res,
                                       BasicBlock *BB /*HACK*/) {
   RawInst Raw;
diff --git a/lib/Bytecode/Reader/Reader.cpp b/lib/Bytecode/Reader/Reader.cpp
index fd4fd6f..7c0e6d4 100644
--- a/lib/Bytecode/Reader/Reader.cpp
+++ b/lib/Bytecode/Reader/Reader.cpp
@@ -215,7 +215,8 @@
   return Error;
 }
 
-bool BytecodeParser::ParseBasicBlock(const uchar *&Buf, const uchar *EndBuf, 
+bool BytecodeParser::ParseBasicBlock(const unsigned char *&Buf,
+                                     const unsigned char *EndBuf, 
 				     BasicBlock *&BB) {
   BB = new BasicBlock();
 
@@ -237,7 +238,8 @@
   return false;
 }
 
-bool BytecodeParser::ParseSymbolTable(const uchar *&Buf, const uchar *EndBuf,
+bool BytecodeParser::ParseSymbolTable(const unsigned char *&Buf,
+                                      const unsigned char *EndBuf,
 				      SymbolTable *ST) {
   while (Buf < EndBuf) {
     // Symtab block header: [num entries][type id number]
@@ -294,7 +296,8 @@
 }
 
 
-bool BytecodeParser::ParseFunction(const uchar *&Buf, const uchar *EndBuf) {
+bool BytecodeParser::ParseFunction(const unsigned char *&Buf,
+                                   const unsigned char *EndBuf) {
   // Clear out the local values table...
   if (FunctionSignatureList.empty()) {
     Error = "Function found, but FunctionSignatureList empty!";
@@ -390,7 +393,8 @@
   return false;
 }
 
-bool BytecodeParser::ParseModuleGlobalInfo(const uchar *&Buf, const uchar *End){
+bool BytecodeParser::ParseModuleGlobalInfo(const unsigned char *&Buf,
+                                           const unsigned char *End){
   if (!FunctionSignatureList.empty()) {
     Error = "Two ModuleGlobalInfo packets found!";
     return true;  // Two ModuleGlobal blocks?
@@ -488,7 +492,8 @@
   return false;
 }
 
-bool BytecodeParser::ParseVersionInfo(const uchar *&Buf, const uchar *EndBuf) {
+bool BytecodeParser::ParseVersionInfo(const unsigned char *&Buf,
+                                      const unsigned char *EndBuf) {
   unsigned Version;
   if (read_vbr(Buf, EndBuf, Version)) return true;
 
@@ -538,7 +543,8 @@
   return false;
 }
 
-bool BytecodeParser::ParseModule(const uchar *Buf, const uchar *EndBuf) {
+bool BytecodeParser::ParseModule(const unsigned char *Buf,
+                                 const unsigned char *EndBuf) {
   unsigned Type, Size;
   if (readBlock(Buf, EndBuf, Type, Size)) return true;
   if (Type != BytecodeFormat::Module || Buf+Size != EndBuf) {
@@ -625,7 +631,8 @@
   return 0;
 }
 
-Module *BytecodeParser::ParseBytecode(const uchar *Buf, const uchar *EndBuf,
+Module *BytecodeParser::ParseBytecode(const unsigned char *Buf,
+                                      const unsigned char *EndBuf,
                                       const std::string &ModuleID) {
   unsigned Sig;
   // Read and check signature...
@@ -703,7 +710,7 @@
     munmap((char*)Buffer, Length);
   } else {                              // Read from stdin
     int BlockSize;
-    uchar Buffer[4096*4];
+    unsigned char Buffer[4096*4];
     std::vector<unsigned char> FileData;
 
     // Read in all of the data from stdin, we cannot mmap stdin...
@@ -719,9 +726,10 @@
 
 #define ALIGN_PTRS 0
 #if ALIGN_PTRS
-    uchar *Buf = (uchar*)mmap(0, FileData.size(), PROT_READ|PROT_WRITE, 
-			      MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
-    assert((Buf != (uchar*)-1) && "mmap returned error!");
+    unsigned char *Buf =
+      (unsigned char*)mmap(0, FileData.size(), PROT_READ|PROT_WRITE, 
+                           MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
+    assert((Buf != (unsigned char*)-1) && "mmap returned error!");
     memcpy(Buf, &FileData[0], FileData.size());
 #else
     unsigned char *Buf = &FileData[0];
diff --git a/lib/Bytecode/Reader/ReaderInternals.h b/lib/Bytecode/Reader/ReaderInternals.h
index a8528e4..6709bc2 100644
--- a/lib/Bytecode/Reader/ReaderInternals.h
+++ b/lib/Bytecode/Reader/ReaderInternals.h
@@ -24,8 +24,6 @@
 #define BCR_TRACE(n, X)
 #endif
 
-typedef unsigned char uchar;
-
 struct RawInst {       // The raw fields out of the bytecode stream...
   unsigned NumOperands;
   unsigned Opcode;
@@ -52,7 +50,7 @@
     freeTable(ModuleValues);
   }
 
-  Module *ParseBytecode(const uchar *Buf, const uchar *EndBuf,
+  Module *ParseBytecode(const unsigned char *Buf, const unsigned char *EndBuf,
                         const std::string &ModuleID);
 
   std::string getError() const { return Error; }
@@ -128,24 +126,29 @@
     }
   }
 
-  bool ParseModule          (const uchar * Buf, const uchar *End);
-  bool ParseVersionInfo     (const uchar *&Buf, const uchar *End);
-  bool ParseModuleGlobalInfo(const uchar *&Buf, const uchar *End);
-  bool ParseSymbolTable   (const uchar *&Buf, const uchar *End, SymbolTable *);
-  bool ParseFunction      (const uchar *&Buf, const uchar *End);
-  bool ParseBasicBlock    (const uchar *&Buf, const uchar *End, BasicBlock *&);
-  bool ParseInstruction   (const uchar *&Buf, const uchar *End, Instruction *&,
-                           BasicBlock *BB /*HACK*/);
-  bool ParseRawInst       (const uchar *&Buf, const uchar *End, RawInst &);
+  bool ParseModule        (const unsigned char * Buf, const unsigned char *End);
+  bool ParseVersionInfo   (const unsigned char *&Buf, const unsigned char *End);
+  bool ParseModuleGlobalInfo(const unsigned char *&Buf, const unsigned char *E);
+  bool ParseSymbolTable   (const unsigned char *&Buf, const unsigned char *End,
+                           SymbolTable *);
+  bool ParseFunction      (const unsigned char *&Buf, const unsigned char *End);
+  bool ParseBasicBlock    (const unsigned char *&Buf, const unsigned char *End,
+                           BasicBlock *&);
+  bool ParseInstruction   (const unsigned char *&Buf, const unsigned char *End,
+                           Instruction *&, BasicBlock *BB /*HACK*/);
+  bool ParseRawInst       (const unsigned char *&Buf, const unsigned char *End,
+                           RawInst &);
 
-  bool ParseGlobalTypes(const uchar *&Buf, const uchar *EndBuf);
-  bool ParseConstantPool(const uchar *&Buf, const uchar *EndBuf,
+  bool ParseGlobalTypes(const unsigned char *&Buf, const unsigned char *EndBuf);
+  bool ParseConstantPool(const unsigned char *&Buf, const unsigned char *EndBuf,
 			 ValueTable &Tab, TypeValuesListTy &TypeTab);
-  bool parseConstantValue(const uchar *&Buf, const uchar *End,
+  bool parseConstantValue(const unsigned char *&Buf, const unsigned char *End,
                           const Type *Ty, Constant *&V);
-  bool parseTypeConstants(const uchar *&Buf, const uchar *EndBuf,
+  bool parseTypeConstants(const unsigned char *&Buf,
+                          const unsigned char *EndBuf,
 			  TypeValuesListTy &Tab, unsigned NumEntries);
-  const Type *parseTypeConstant(const uchar *&Buf, const uchar *EndBuf);
+  const Type *parseTypeConstant(const unsigned char *&Buf,
+                                const unsigned char *EndBuf);
 
   Value      *getValue(const Type *Ty, unsigned num, bool Create = true);
   const Type *getType(unsigned ID);
@@ -212,7 +215,8 @@
   }
 }
 
-static inline bool readBlock(const uchar *&Buf, const uchar *EndBuf, 
+static inline bool readBlock(const unsigned char *&Buf,
+                             const unsigned char *EndBuf, 
 			     unsigned &Type, unsigned &Size) {
 #if DEBUG_OUTPUT
   bool Result = read(Buf, EndBuf, Type) || read(Buf, EndBuf, Size);
