String constant const-ness changes to placate g++ 4.2.
authorSteve Reinhardt <stever@gmail.com>
Thu, 1 Nov 2007 01:04:22 +0000 (18:04 -0700)
committerSteve Reinhardt <stever@gmail.com>
Thu, 1 Nov 2007 01:04:22 +0000 (18:04 -0700)
Also some bug fixes in MIPS ISA uncovered by g++ warnings
(Python string compares don't work in C++!).

--HG--
extra : convert_revision : b347cc0108f23890e9b73b3ee96059f0cea96cf6

14 files changed:
src/arch/mips/isa/base.isa
src/arch/mips/isa/formats/branch.isa
src/arch/mips/isa/formats/int.isa
src/arch/mips/isa/formats/mt.isa
src/arch/sparc/isa/base.isa
src/arch/x86/insts/static_inst.cc
src/base/hostinfo.cc
src/base/hostinfo.hh
src/base/inifile.cc
src/cpu/legiontrace.cc
src/kern/linux/printk.cc
src/kern/tru64/printf.cc
src/python/swig/pyobject.cc
src/sim/main.cc

index 7c042f16f2dfae9c05eab41da0779d65a518954f..e8e1c856e4212ed954a043981114bed7747146cb 100644 (file)
@@ -82,7 +82,7 @@ output decoder {{
         // Need to find standard way to not print
         // this info. Maybe add bool variable to
         // class?
-        if (mnemonic != "syscall") {
+        if (strcmp(mnemonic, "syscall") != 0) {
             if(_numDestRegs > 0){
                 printReg(ss, _destRegIdx[0]);
             }
@@ -100,7 +100,7 @@ output decoder {{
 
         // Should we define a separate inst. class
         // just for two insts?
-        if(mnemonic == "sll" || mnemonic == "sra"){
+        if (strcmp(mnemonic, "sll") == 0 || strcmp(mnemonic, "sra") == 0) {
             ccprintf(ss,", %d",SA);
         }
 
index e959e4c1bea0e5cae4b7521e894a3e281bc30e78..e786b3d9fb0464c0ee5d301e4b6e0004dd824234 100644 (file)
@@ -196,7 +196,7 @@ output decoder {{
 
         ccprintf(ss, "%-10s ", mnemonic);
 
-        if ( mnemonic == "jal" ) {
+        if (strcmp(mnemonic, "jal") == 0) {
             Addr npc = pc + 4;
             ccprintf(ss,"0x%x",(npc & 0xF0000000) | disp);
         } else if (_numSrcRegs == 0) {
index 7fa8e481764ec2b2bd17b68b2a0298b36389572a..f23c4cbf6ec2014eb11576bb96af4ee9f2c7d654 100644 (file)
@@ -119,7 +119,7 @@ output header {{
                 {
                     //If Bit 15 is 1 then Sign Extend
                     int32_t temp = sextImm & 0x00008000;
-                    if (temp > 0 && mnemonic != "lui") {
+                    if (temp > 0 && strcmp(mnemonic, "lui") != 0) {
                         sextImm |= 0xFFFF0000;
                     }
                 }
@@ -313,7 +313,7 @@ output decoder {{
                 ss << ", ";
             }
 
-            if( mnemonic == "lui")
+            if (strcmp(mnemonic, "lui") == 0)
                 ccprintf(ss, "0x%x ", sextImm);
             else
                 ss << (int) sextImm;
index b3520050a2dd0fcafaddc3e3947a009df80e7cb7..d4c37f812f500984b93b137daa3ef9068a660b83 100644 (file)
@@ -72,9 +72,9 @@ output decoder {{
     {
         std::stringstream ss;
 
-        if (mnemonic == "mttc0" || mnemonic == "mftc0") {
+        if (strcmp(mnemonic, "mttc0") == 0 || strcmp(mnemonic, "mftc0") == 0) {
             ccprintf(ss, "%-10s r%d, r%d, %d", mnemonic, RT, RD, SEL);
-        } else if (mnemonic == "mftgpr") {
+        } else if (strcmp(mnemonic, "mftgpr") == 0) {
             ccprintf(ss, "%-10s r%d, r%d", mnemonic, RD, RT);
         } else {
             ccprintf(ss, "%-10s r%d, r%d", mnemonic, RT, RD);
index 4339003e075a114376565c3da9c530bc363312e1..ce063bcdc1fe6e1c7ac449cb68bf67df864fdba6 100644 (file)
@@ -87,7 +87,7 @@ output header {{
             FOrdered=0xF
         };
 
-        extern char * CondTestAbbrev[];
+        extern const char *CondTestAbbrev[];
 
         /**
          * Base class for all SPARC static instructions.
@@ -126,7 +126,7 @@ output header {{
 
 output decoder {{
 
-        char * CondTestAbbrev[] =
+        const char *CondTestAbbrev[] =
         {
             "nev", //Never
             "e", //Equal
index 510295157b87f4d54478f15a92b146e14c495584..d2ec8878c98e967b1f35ce5f3143fb85759821ad 100644 (file)
@@ -126,7 +126,7 @@ namespace X86ISA
             {"", "t%db", "t%dw", "", "t%dd", "", "", "", "t%d"};
 
         if (reg < FP_Base_DepTag) {
-            char * suffix = "";
+            const char * suffix = "";
             bool fold = reg & (1 << 6);
             reg &= ~(1 << 6);
 
index 7cc07c11e169512a591c1113da7ce707ee762933..ef64feeb4aa84c17e2b04dd7f8639bd12442cae9 100644 (file)
@@ -60,7 +60,7 @@ hostname()
 }
 
 uint64_t
-procInfo(char *filename, char *target)
+procInfo(const char *filename, const char *target)
 {
     int  done = 0;
     char line[80];
index b6663ea69133eb7835034dd8fbaed698038ac380..70cd19203c28e42b38e6c1af01062d03f075d16a 100644 (file)
@@ -37,7 +37,7 @@
 
 std::string &hostname();
 
-uint64_t procInfo(char *filename, char *target);
+uint64_t procInfo(const char *filename, const char *target);
 
 inline uint64_t memUsage()
 { return procInfo("/proc/self/status", "VmSize:"); }
index 4d504d04f7b20ddd36c7854daf7460923ec4a3b4..809cbe172c521ea1bf9bab9472044dffcec05feb 100644 (file)
@@ -111,7 +111,7 @@ IniFile::loadCPP(const string &file, vector<char *> &cppArgs)
 
         int arg_count = cppArgs.size();
 
-        char **args = new char *[arg_count + 20];
+        const char **args = new const char *[arg_count + 20];
 
         int nextArg = 0;
         args[nextArg++] = "g++";
@@ -136,7 +136,9 @@ IniFile::loadCPP(const string &file, vector<char *> &cppArgs)
         if (dup2(tmp_fd, STDOUT_FILENO) == -1)
             exit(1);
 
-        execvp("g++", args);
+        // execvp signature is intentionally broken wrt const-ness for
+        // backwards compatibility... see man page
+        execvp("g++", const_cast<char * const *>(args));
 
         exit(0);
     }
index d303430256455817c7a3291a160485065382e98b..0ca02eeecbc52ebcf063f7dbe851c368ace77ccf 100644 (file)
@@ -100,7 +100,7 @@ setupSharedData()
 //  Utility methods for pretty printing a report about a difference
 //
 
-inline char * genCenteredLabel(int length, char * buffer, char * label)
+inline char * genCenteredLabel(int length, char * buffer, const char * label)
 {
     int labelLength = strlen(label);
     assert(labelLength <= length);
@@ -127,7 +127,7 @@ inline void printColumnLabels(ostream & os)
     ccprintf(os, "--------------------+-----------------------+-----------------------\n");
 }
 
-inline void printSectionHeader(ostream & os, char * name)
+inline void printSectionHeader(ostream & os, const char * name)
 {
     char sectionString[70];
     genCenteredLabel(69, sectionString, name);
index 24e28e666547480dd37ef89f7ee9da4e394978f3..577245f95a75da29b4b48a47d3ec15cce8af56e4 100644 (file)
@@ -168,7 +168,7 @@ Printk(stringstream &out, Arguments args)
                   break;
 
                 case 's': {
-                    char *s = (char *)args;
+                    const char *s = (const char *)args;
                     if (!s)
                         s = "<NULL>";
 
index ce77efa83227a627a0faba47f7443bbf7b0c43c5..8b706c25097f89f6c7907ffe53f0cbdf1fed56fc 100644 (file)
@@ -176,7 +176,7 @@ Printf(Arguments args)
                   break;
 
                 case 's': {
-                    char *s = (char *)args;
+                    const char *s = (const char *)args;
                     if (!s)
                         s = "<NULL>";
 
index c682b0fd7be266c1a0e474051b08d69c1a0a5db1..eaa8baa8bbf731f83138f289c9708b21f89c8bed 100644 (file)
@@ -147,20 +147,28 @@ inifile()
  */
 extern "C" SimObject *convertSwigSimObjectPtr(PyObject *);
 
+// Python.h is notoriously not const-correct (for 2.4, anyway)... make
+// a little define here to reduce the noise and make it easier to
+// #ifdef away if Python.h gets fixed.  Note there are a couple of
+// these in sim/main.cc as well that are handled without this define.
+#define PCC(s)  const_cast<char *>(s)
+
+
 SimObject *
 resolveSimObject(const string &name)
 {
-    PyObject *module = PyImport_ImportModule("m5.SimObject");
+    PyObject *module = PyImport_ImportModule(PCC("m5.SimObject"));
     if (module == NULL)
         panic("Could not import m5.SimObject");
 
-    PyObject *resolver = PyObject_GetAttrString(module, "resolveSimObject");
+    PyObject *resolver =
+        PyObject_GetAttrString(module, PCC("resolveSimObject"));
     if (resolver == NULL) {
         PyErr_Print();
         panic("resolveSimObject: failed to find resolveSimObject");
     }
 
-    PyObject *ptr = PyObject_CallFunction(resolver, "(s)", name.c_str());
+    PyObject *ptr = PyObject_CallFunction(resolver, PCC("(s)"), name.c_str());
     if (ptr == NULL) {
         PyErr_Print();
         panic("resolveSimObject: failure on call to Python for %s", name);
index 62ab9445b3a32fa2f13249ad6337e64faa18c307..baca556a0c5d18c25f68f92e9d2209602fc337bc 100644 (file)
@@ -82,7 +82,7 @@ python_main()
     PyObject *dict;
     PyObject *result;
 
-    module = PyImport_AddModule("__main__");
+    module = PyImport_AddModule(const_cast<char*>("__main__"));
     if (module == NULL)
         fatal("Could not import __main__");
 
@@ -135,10 +135,10 @@ main(int argc, char **argv)
     if (setenv("PYTHONPATH", pythonpath.c_str(), true) == -1)
         fatal("setenv: %s\n", strerror(errno));
 
-    char *python_home = getenv("PYTHONHOME");
+    const char *python_home = getenv("PYTHONHOME");
     if (!python_home)
         python_home = PYTHONHOME;
-    Py_SetPythonHome(python_home);
+    Py_SetPythonHome(const_cast<char*>(python_home));
 
     // initialize embedded Python interpreter
     Py_Initialize();