Build: be a bit more explicit about actions
authorPhil Miller <mille121@illinois.edu>
Wed, 21 Oct 2009 01:35:16 +0000 (01:35 +0000)
committerPhil Miller <mille121@illinois.edu>
Wed, 21 Oct 2009 01:35:16 +0000 (01:35 +0000)
build
src/arch/net-linux-x86_64/conv-mach.h
src/arch/net/charmrun/charmrun.c
src/conv-core/global-elfgot.C
src/conv-core/memory-charmdebug.c
src/xlat-i/xi-util.C

diff --git a/build b/build
index b90913775c7bb4319d21a71d00fd7ceb96e3ba84..6644c9a67918a5d63b224b8a87876599d6e64099 100755 (executable)
--- a/build
+++ b/build
@@ -565,12 +565,13 @@ printError()
        exit $MAKEEXIT
 }
 
-echo "Performing '$MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS"' in $VERSION/tmp"
+echo "Performing '$MAKE $MAKEOPTS basics OPTS="$OPTS"' in $VERSION/tmp"
 cd $DESTINATION/tmp 
 $MAKE $MAKEOPTS basics OPTS="$OPTS $BUILD_SHARED"
 MAKEEXIT=$?
 [ $MAKEEXIT -ne 0 ] && printError
 
+echo "Performing '$MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS"' in $VERSION/tmp"
 $MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS $BUILD_SHARED"
 MAKEEXIT=$?
 if [ $MAKEEXIT -eq 0 ]
index 016ce5091c95adc0d34821d662db09e6ea783c4a..323c488ddfb723e38e6719867699bc3361dc5cdd 100644 (file)
 
 #define CMK_TYPEDEF_INT2 short
 #define CMK_TYPEDEF_INT4 int
+#if CMK_LONG_LONG_DEFINED
 #define CMK_TYPEDEF_INT8 long long
+#define CMK_TYPEDEF_UINT8 unsigned long long
+#else
+#include <stdint.h>
+#define CMK_TYPEDEF_INT8 int64_t
+#define CMK_TYPEDEF_UINT8 uint64_t
+#endif
 #define CMK_TYPEDEF_UINT2 unsigned short
 #define CMK_TYPEDEF_UINT4 unsigned int
-#define CMK_TYPEDEF_UINT8 unsigned long long
 #define CMK_TYPEDEF_FLOAT4 float
 #define CMK_TYPEDEF_FLOAT8 double
 
index 8c1bd9221d1e48c8f0913034127885b445bcb2d8..aef54ee1d9cfd7aec3cc90abe95bde7f05ffd793 100644 (file)
@@ -2681,6 +2681,10 @@ void finish_nodes(void) {}
 /****************************************************************************/
 #include <sys/wait.h>
 
+#if CMK_HAS_ADDR_NO_RANDOMIZE
+#include <sys/personality.h>
+#endif
+
 extern char **environ;
 void removeEnv(const char *doomedEnv)
 { /*Remove a value from the environment list*/
@@ -2727,13 +2731,24 @@ int rsh_fork(int nodeno,const char *startScript)
   if (pid < 0) 
        { perror("ERROR> starting rsh"); exit(1); }
   if (pid == 0)
-  {/*Child process*/
+  {
+      /*Child process*/
       int i;
       int fdScript=open(startScript,O_RDONLY);
-  /**/  unlink(startScript); /**/
-      dup2(fdScript,0);/*Open script as standard input*/
+      unlink(startScript);
+      /*Open script as standard input*/
+      dup2(fdScript,0);
       //removeEnv("DISPLAY="); /*No DISPLAY disables ssh's slow X11 forwarding*/
       for(i=3; i<1024; i++) close(i);
+
+#if CMK_HAS_ADDR_NO_RANDOMIZE
+      /* Disable address space randomization where it exists and can
+        be disabled. */
+      int orig_persona = personality((unsigned long)-1);
+      personality(orig_persona|ADDR_NO_RANDOMIZE);
+      printf("Charmrun> Disabled address space layout randomization\n");
+#endif
+
       execvp(rshargv[0], rshargv);
       fprintf(stderr,"Charmrun> Couldn't find rsh program '%s'!\n",rshargv[0]);
       exit(1);
@@ -3264,6 +3279,15 @@ void start_nodes_local(char ** env)
       if (-1!=(fd = open("/dev/null", O_RDWR))) {
         dup2(fd, 0); dup2(fd, 1); dup2(fd, 2);
       }
+
+#if CMK_HAS_ADDR_NO_RANDOMIZE
+      /* Disable address space randomization where it exists and can
+        be disabled. */
+      int orig_persona = personality(0xffffffff);
+      personality(orig_persona|ADDR_NO_RANDOMIZE);
+      printf("Charmrun> Disabled address space layout randomization\n");
+#endif
+
       status = execve(pparam_argv[1], pparam_argv+1, envp);
       dup2(fd1, 1);
       printf("execve failed to start process \"%s\" with status: %d\n", pparam_argv[1], status);
index 6775fb3c7052971380b8d661f0de44ff8ccb8f30..0e2c94c6ced3b7dde6f1cba827c7a98dc1a080cd 100644 (file)
@@ -50,6 +50,7 @@ A more readable summary is at:
 #include <regex.h>
 #endif
 #include <vector>
+#include <list>
 #include <algorithm>
 #include "converse.h"
 #include "pup.h"
@@ -277,7 +278,7 @@ CtgGlobalList::CtgGlobalList() {
        }
     }
 
-    std::vector<global_rec> globals;
+    std::list<global_rec> globals;
 
     // Figure out which relocation data entries refer to global data:
     for(count = 0; count < relt_size; count ++) {
@@ -333,8 +334,9 @@ CtgGlobalList::CtgGlobalList() {
     // Potential optimization: pull small elements from the end to
     // fill in `padding' space where possible.
     size_t datalen2 = 0;
-    std::sort(globals.begin(), globals.end(), &compare_globals);
-    for (std::vector<global_rec>::iterator i = globals.begin(); i != globals.end(); ++i) {
+    //std::sort(globals.begin(), globals.end(), &compare_globals);
+    globals.sort(&compare_globals);
+    for (std::list<global_rec>::iterator i = globals.begin(); i != globals.end(); ++i) {
        short alignment = std::min(i->size, (unsigned long)16);
        size_t padding = (datalen2 + alignment) % alignment;
        size_t offset = datalen2 + padding;
index 18efde499ee145ab51e38405cb091035e4a50aea..e335d627560d113339f75ba3c9550030a547e791 100644 (file)
@@ -422,7 +422,8 @@ void check_memory_leaks(LeakSearchInfo *info) {
     //printf("scanning memory %p of size %d\n",sl,sl->userSize);
     /* scan through this memory and pick all the slots which are still leaking
        and add them to the inProgress list */
-    if (sl->extraStack != NULL && sl->extraStack->protectedMemory != NULL) mprotect(sl->extraStack->protectedMemory, sl->extraStack->protectedMemoryLength, PROT_READ);
+    if (sl->extraStack != NULL && sl->extraStack->protectedMemory != NULL)
+      mprotect(sl->extraStack->protectedMemory, sl->extraStack->protectedMemoryLength, PROT_READ);
     for (scanner = SlotToUser(sl); scanner < SlotToUser(sl)+sl->userSize-sizeof(char*)+1; scanner+=sizeof(char*)) {
       fnd = (Slot**)CkHashtableGet(table, scanner);
       //if (fnd != NULL) printf("scanning heap %p, %d\n",*fnd,isLeakSlot(*fnd));
@@ -435,7 +436,8 @@ void check_memory_leaks(LeakSearchInfo *info) {
         PCQueuePush(inProgress, (char*)found);
       }
     }
-    if (sl->extraStack != NULL && sl->extraStack->protectedMemory != NULL) mprotect(sl->extraStack->protectedMemory, sl->extraStack->protectedMemoryLength, PROT_NONE);
+    if (sl->extraStack != NULL && sl->extraStack->protectedMemory != NULL)
+      mprotect(sl->extraStack->protectedMemory, sl->extraStack->protectedMemoryLength, PROT_NONE);
   }
 
   // Step 4)
@@ -1007,6 +1009,11 @@ static void CpdMMAPhandler(int sig, siginfo_t *si, void *unused){
   CmiPrintStackTrace(0);
 }
 
+static void setMemProtection(Slot *cur, int prot) {
+  mprotect(cur->userData, cur->userSize+SLOTSPACE+cur->stackLen*sizeof(void*),
+          prot);
+}
+
 static void protectMemory() {
 #ifdef CPD_USE_MMAP
   Slot *cur;
@@ -1014,7 +1021,9 @@ static void protectMemory() {
   SLOT_ITERATE_START(cur)
     if (cur->chareID != memory_chare_id && cur->chareID > 0) {
       /*printf(" %p",cur->userData);*/
-      mprotect(cur->userData, cur->userSize+SLOTSPACE+cur->stackLen*sizeof(void*), PROT_READ);
+      setMemProtection(cur, PROT_READ);
+      /*mprotect(cur->userData,
+       cur->userSize+SLOTSPACE+cur->stackLen*sizeof(void*), PROT_READ); */
     } /*else printf(" (%p)",cur->userData);*/
   SLOT_ITERATE_END
   /*printf("\n");*/
@@ -1025,7 +1034,8 @@ static void unProtectMemory() {
 #ifdef CPD_USE_MMAP
   Slot *cur;
   SLOT_ITERATE_START(cur)
-    mprotect(cur->userData, cur->userSize+SLOTSPACE+cur->stackLen*sizeof(void*), PROT_READ|PROT_WRITE);
+    /*mprotect(cur->userData, cur->userSize+SLOTSPACE+cur->stackLen*sizeof(void*), PROT_READ|PROT_WRITE);*/
+    setMemProtection(cur, PROT_READ|PROT_WRITE);
   SLOT_ITERATE_END
   /*printf("unprotecting memory\n");*/
 #endif
@@ -1066,7 +1076,8 @@ void CpdSystemEnter() {
     if (CpdMprotect) {
       SLOT_ITERATE_START(cur)
         if (cur->chareID == 0) {
-          mprotect(cur, cur->userSize+SLOTSPACE+cur->stackLen*sizeof(void*), PROT_READ|PROT_WRITE);
+          /*mprotect(cur, cur->userSize+SLOTSPACE+cur->stackLen*sizeof(void*), PROT_READ|PROT_WRITE);*/
+         setMemProtection(cur, PROT_READ|PROT_WRITE);
         }
       SLOT_ITERATE_END
     }
@@ -1082,7 +1093,8 @@ void CpdSystemExit() {
     if (CpdMprotect) {
       SLOT_ITERATE_START(cur)
         if (cur->chareID == 0) {
-          mprotect(cur, cur->userSize+SLOTSPACE+cur->stackLen*sizeof(void*), PROT_READ);
+          /*mprotect(cur, cur->userSize+SLOTSPACE+cur->stackLen*sizeof(void*), PROT_READ);*/
+         setMemProtection(cur, PROT_READ);
         }
       SLOT_ITERATE_END
       /* unprotect the pages that have been unprotected by a signal SEGV */
index fb3fffef9f4b02ee02f2c12c032350fca4859267..2f31984ca1219c5d4e2b044624f9c5f72310b765 100644 (file)
@@ -54,7 +54,7 @@ XStr& XStr::operator << (int i) {
       sprintf(tmp, "%d", i); 
       append(tmp); 
       return *this;
-};
+}
 
 void XStr::line_append(const char c)
 {