Fix some casts that removed const-ness as pointed out by
GCC's -Wcast-qual.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13138 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/m_aspacemgr/aspacemgr-linux.c b/coregrind/m_aspacemgr/aspacemgr-linux.c
index 77d9d5f..fa9075b 100644
--- a/coregrind/m_aspacemgr/aspacemgr-linux.c
+++ b/coregrind/m_aspacemgr/aspacemgr-linux.c
@@ -1209,12 +1209,12 @@
 
 /* Given a pointer to a seg, tries to figure out which one it is in
    nsegments[..].  Very paranoid. */
-static Int segAddr_to_index ( NSegment* seg )
+static Int segAddr_to_index ( const NSegment* seg )
 {
    Int i;
    if (seg < &nsegments[0] || seg >= &nsegments[nsegments_used])
       return -1;
-   i = ((UChar*)seg - (UChar*)(&nsegments[0])) / sizeof(NSegment);
+   i = ((const UChar*)seg - (const UChar*)(&nsegments[0])) / sizeof(NSegment);
    if (i < 0 || i >= nsegments_used)
       return -1;
    if (seg == &nsegments[i])
@@ -1225,7 +1225,7 @@
 
 /* Find the next segment along from 'here', if it is a file/anon/resvn
    segment. */
-NSegment const * VG_(am_next_nsegment) ( NSegment* here, Bool fwds )
+NSegment const * VG_(am_next_nsegment) ( const NSegment* here, Bool fwds )
 {
    Int i = segAddr_to_index(here);
    if (i < 0 || i >= nsegments_used)
@@ -2732,7 +2732,7 @@
    (is-client-heap) flag for that area.  Otherwise do nothing.
    (Bizarre interface so that the same code works for both Linux and
    AIX and does not impose inefficiencies on the Linux version.) */
-void VG_(am_set_segment_isCH_if_SkAnonC)( NSegment* seg )
+void VG_(am_set_segment_isCH_if_SkAnonC)( const NSegment* seg )
 {
    Int i = segAddr_to_index( seg );
    aspacem_assert(i >= 0 && i < nsegments_used);
@@ -2746,7 +2746,7 @@
 /* Same idea as VG_(am_set_segment_isCH_if_SkAnonC), except set the
    segment's hasT bit (has-cached-code) if this is SkFileC or SkAnonC
    segment. */
-void VG_(am_set_segment_hasT_if_SkFileC_or_SkAnonC)( NSegment* seg )
+void VG_(am_set_segment_hasT_if_SkFileC_or_SkAnonC)( const NSegment* seg )
 {
    Int i = segAddr_to_index( seg );
    aspacem_assert(i >= 0 && i < nsegments_used);
@@ -2830,7 +2830,7 @@
    the reservation segment after the operation must be at least one
    page long. */
 
-Bool VG_(am_extend_into_adjacent_reservation_client) ( NSegment* seg, 
+Bool VG_(am_extend_into_adjacent_reservation_client) ( const NSegment* seg, 
                                                        SSizeT    delta )
 {
    Int    segA, segR;
@@ -2943,7 +2943,7 @@
    immediately discard translations from the new area. */
 
 Bool VG_(am_extend_map_client)( /*OUT*/Bool* need_discard,
-                                NSegment* seg, SizeT delta )
+                                const NSegment* seg, SizeT delta )
 {
    Addr     xStart;
    SysRes   sres;
diff --git a/coregrind/m_coredump/coredump-elf.c b/coregrind/m_coredump/coredump-elf.c
index 1f8f0c1..bc6b3f8 100644
--- a/coregrind/m_coredump/coredump-elf.c
+++ b/coregrind/m_coredump/coredump-elf.c
@@ -235,7 +235,7 @@
 			  const vki_siginfo_t *si)
 {
    struct vki_user_regs_struct *regs;
-   ThreadArchState* arch = (ThreadArchState*)&tst->arch;
+   const ThreadArchState* arch = &tst->arch;
 
    VG_(memset)(prs, 0, sizeof(*prs));
 
@@ -280,7 +280,7 @@
    regs->gs     = arch->vex.guest_GS;
 
 #elif defined(VGP_amd64_linux)
-   regs->eflags = LibVEX_GuestAMD64_get_rflags( &((ThreadArchState*)arch)->vex );
+   regs->eflags = LibVEX_GuestAMD64_get_rflags( &arch->vex );
    regs->rsp    = arch->vex.guest_RSP;
    regs->rip    = arch->vex.guest_RIP;
 
@@ -317,8 +317,8 @@
    regs->orig_gpr3 = arch->vex.guest_GPR3;
    regs->ctr = arch->vex.guest_CTR;
    regs->link = arch->vex.guest_LR;
-   regs->xer = LibVEX_GuestPPC32_get_XER( &((ThreadArchState*)arch)->vex );
-   regs->ccr = LibVEX_GuestPPC32_get_CR( &((ThreadArchState*)arch)->vex );
+   regs->xer = LibVEX_GuestPPC32_get_XER( &arch->vex );
+   regs->ccr = LibVEX_GuestPPC32_get_CR( &arch->vex );
    regs->mq = 0;
    regs->trap = 0;
    regs->dar = 0; /* should be fault address? */
@@ -338,8 +338,8 @@
    regs->orig_gpr3 = arch->vex.guest_GPR3;
    regs->ctr = arch->vex.guest_CTR;
    regs->link = arch->vex.guest_LR;
-   regs->xer = LibVEX_GuestPPC64_get_XER( &((ThreadArchState*)arch)->vex );
-   regs->ccr = LibVEX_GuestPPC64_get_CR( &((ThreadArchState*)arch)->vex );
+   regs->xer = LibVEX_GuestPPC64_get_XER( &arch->vex );
+   regs->ccr = LibVEX_GuestPPC64_get_CR( &arch->vex );
    /* regs->mq = 0; */
    regs->trap = 0;
    regs->dar = 0; /* should be fault address? */
@@ -363,7 +363,7 @@
    regs->ARM_sp   = arch->vex.guest_R13;
    regs->ARM_lr   = arch->vex.guest_R14;
    regs->ARM_pc   = arch->vex.guest_R15T;
-   regs->ARM_cpsr = LibVEX_GuestARM_get_cpsr( &((ThreadArchState*)arch)->vex );
+   regs->ARM_cpsr = LibVEX_GuestARM_get_cpsr( &arch->vex );
 
 #elif defined(VGP_s390x_linux)
 #  define DO(n)  regs->gprs[n] = arch->vex.guest_r##n
@@ -392,7 +392,7 @@
 static void fill_fpu(const ThreadState *tst, vki_elf_fpregset_t *fpu)
 {
    __attribute__((unused))
-   ThreadArchState* arch = (ThreadArchState*)&tst->arch;
+   const ThreadArchState* arch = &tst->arch;
 
 #if defined(VGP_x86_linux)
 //:: static void fill_fpu(vki_elf_fpregset_t *fpu, const HChar *from)
@@ -479,7 +479,7 @@
 #if defined(VGP_x86_linux) && !defined(VGPV_x86_linux_android)
 static void fill_xfpu(const ThreadState *tst, vki_elf_fpxregset_t *xfpu)
 {
-   ThreadArchState* arch = (ThreadArchState*)&tst->arch;
+   const ThreadArchState* arch = &tst->arch;
 
 //::    xfpu->cwd = ?;
 //::    xfpu->swd = ?;
diff --git a/coregrind/m_debuginfo/debuginfo.c b/coregrind/m_debuginfo/debuginfo.c
index 0e7d33e..59f920d 100644
--- a/coregrind/m_debuginfo/debuginfo.c
+++ b/coregrind/m_debuginfo/debuginfo.c
@@ -725,7 +725,7 @@
       return 0;
 
    /* If the file doesn't have a name, we're hosed.  Give up. */
-   filename = VG_(am_get_filename)( (NSegment*)seg );
+   filename = VG_(am_get_filename)( seg );
    if (!filename)
       return 0;
 
diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c
index ee79a16..d058ea9 100644
--- a/coregrind/m_debuginfo/readdwarf3.c
+++ b/coregrind/m_debuginfo/readdwarf3.c
@@ -3394,8 +3394,8 @@
 /*------------------------------------------------------------*/
 
 static Int cmp_TempVar_by_dioff ( const void* v1, const void* v2 ) {
-   const TempVar* t1 = *(const TempVar**)v1;
-   const TempVar* t2 = *(const TempVar**)v2;
+   const TempVar* t1 = *(const TempVar *const *)v1;
+   const TempVar* t2 = *(const TempVar *const *)v2;
    if (t1->dioff < t2->dioff) return -1;
    if (t1->dioff > t2->dioff) return 1;
    return 0;
diff --git a/coregrind/m_debuginfo/readpdb.c b/coregrind/m_debuginfo/readpdb.c
index cf54285..1b051d1 100644
--- a/coregrind/m_debuginfo/readpdb.c
+++ b/coregrind/m_debuginfo/readpdb.c
@@ -1525,16 +1525,16 @@
    //VG_(printf)("DEBUG_SnarfLinetab %p %p %p %d\n", di, sectp, linetab, size);
    Int                file_segcount;
    HChar              filename[WIN32_PATH_MAX];
-   UInt               * filetab;
-   UChar              * fn;
+   const UInt         * filetab;
+   const UChar        * fn;
    Int                i;
    Int                k;
-   UInt               * lt_ptr;
+   const UInt         * lt_ptr;
    Int                nfile;
    Int                nseg;
    union any_size     pnt;
    union any_size     pnt2;
-   struct startend    * start;
+   const struct startend * start;
    Int                this_seg;
 
    Bool  debug = di->trace_symtab;
@@ -1552,14 +1552,14 @@
    nfile = *pnt.s++;
    nseg  = *pnt.s++;
 
-   filetab = (unsigned int *) pnt.c;
+   filetab = pnt.ui;
 
    /*
     * Now count up the number of segments in the file.
     */
    nseg = 0;
    for (i = 0; i < nfile; i++) {
-     pnt2.c = (HChar *)linetab + filetab[i];
+      pnt2.c = (HChar *)linetab + filetab[i];
       nseg += *pnt2.s;
    }
 
@@ -1575,13 +1575,13 @@
       file_segcount = *pnt2.s;
 
       pnt2.ui++;
-      lt_ptr = (unsigned int *) pnt2.c;
-      start = (struct startend *) (lt_ptr + file_segcount);
+      lt_ptr = pnt2.ui;
+      start = (const struct startend *) (lt_ptr + file_segcount);
 
       /*
        * Now snarf the filename for all of the segments for this file.
        */
-      fn = (UChar*) (start + file_segcount);
+      fn = (const UChar*) (start + file_segcount);
       /* fn now points at a Pascal-style string, that is, the first
          byte is the length, and the remaining up to 255 (presumably)
          are the contents. */
@@ -1626,11 +1626,11 @@
                if (debug)
                   VG_(message)(Vg_UserMsg,
                      "  Adding line %d addr=%#lx end=%#lx\n", 
-                        ((unsigned short *)(pnt2.ui + linecount))[j],
+                        ((const unsigned short *)(pnt2.ui + linecount))[j],
                         startaddr, endaddr );
                   ML_(addLineInfo)(
                      di, fnmstr, dirstr, startaddr, endaddr,
-                     ((unsigned short *)(pnt2.ui + linecount))[j], j );
+                     ((const unsigned short *)(pnt2.ui + linecount))[j], j );
                   n_lines_read++;
                }
             }
diff --git a/coregrind/m_errormgr.c b/coregrind/m_errormgr.c
index b4fec57..c325148 100644
--- a/coregrind/m_errormgr.c
+++ b/coregrind/m_errormgr.c
@@ -1390,13 +1390,13 @@
    matching a sequence of Addrs against a pattern composed of a
    sequence of SuppLocs.
 */
-static Bool supploc_IsStar ( void* supplocV )
+static Bool supploc_IsStar ( const void* supplocV )
 {
-   SuppLoc* supploc = (SuppLoc*)supplocV;
+   const SuppLoc* supploc = supplocV;
    return supploc->ty == DotDotDot;
 }
 
-static Bool supploc_IsQuery ( void* supplocV )
+static Bool supploc_IsQuery ( const void* supplocV )
 {
    return False; /* there's no '?' equivalent in the supp syntax */
 }
@@ -1504,13 +1504,12 @@
    return ip2fo->names + (*offsets)[ixIP];
 }
 
-static Bool supp_pattEQinp ( void* supplocV, void* addrV,
+static Bool supp_pattEQinp ( const void* supplocV, const void* addrV,
                              void* inputCompleter, UWord ixAddrV )
 {
-   SuppLoc* supploc = (SuppLoc*)supplocV; /* PATTERN */
-   Addr     ip      = *(Addr*)addrV; /* INPUT */
-   IPtoFunOrObjCompleter* ip2fo 
-      = (IPtoFunOrObjCompleter*)inputCompleter;
+   const SuppLoc* supploc = supplocV; /* PATTERN */
+   Addr     ip      = *(const Addr*)addrV; /* INPUT */
+   IPtoFunOrObjCompleter* ip2fo = inputCompleter;
    HChar* funobj_name; // Fun or Obj name.
 
    /* So, does this IP address match this suppression-line? */
diff --git a/coregrind/m_gdbserver/regcache.c b/coregrind/m_gdbserver/regcache.c
index 477c208..6b3d54b 100644
--- a/coregrind/m_gdbserver/regcache.c
+++ b/coregrind/m_gdbserver/regcache.c
@@ -164,7 +164,7 @@
    convert_int_to_ascii (registers, buf, register_bytes);
 }
 
-void registers_from_string (char *buf)
+void registers_from_string (const char *buf)
 {
    int len = strlen (buf);
    unsigned char *registers = get_regcache (current_inferior, 1)->registers;
@@ -235,7 +235,7 @@
 {
    Bool new;
    unsigned char bytes_register[register_size (n)];
-   convert_ascii_to_int ((char *) buf, bytes_register, register_size (n));
+   convert_ascii_to_int (buf, bytes_register, register_size (n));
    VG_(dmemcpy) (register_data_for_supply (n, 0, &new), 
                  bytes_register, register_size (n), mod);
    if (new)
diff --git a/coregrind/m_gdbserver/regcache.h b/coregrind/m_gdbserver/regcache.h
index edf6a61..abd4eb7 100644
--- a/coregrind/m_gdbserver/regcache.h
+++ b/coregrind/m_gdbserver/regcache.h
@@ -44,7 +44,7 @@
 
 /* Convert a string to register values and fill our register cache.  */
 
-void registers_from_string (char *buf);
+void registers_from_string (const char *buf);
 
 /* Return the size in bytes of a string-encoded register packet.  */
 
diff --git a/coregrind/m_gdbserver/remote-utils.c b/coregrind/m_gdbserver/remote-utils.c
index a08aef7..8c5f2c1 100644
--- a/coregrind/m_gdbserver/remote-utils.c
+++ b/coregrind/m_gdbserver/remote-utils.c
@@ -929,7 +929,7 @@
    buf[3] = '\0';
 }
 
-void convert_int_to_ascii (unsigned char *from, char *to, int n)
+void convert_int_to_ascii (const unsigned char *from, char *to, int n)
 {
    int nib;
    int ch;
@@ -944,7 +944,7 @@
 }
 
 
-void convert_ascii_to_int (char *from, unsigned char *to, int n)
+void convert_ascii_to_int (const char *from, unsigned char *to, int n)
 {
    int nib1, nib2;
    while (n--) {
diff --git a/coregrind/m_gdbserver/server.h b/coregrind/m_gdbserver/server.h
index d0d8a9f..f68f11e 100644
--- a/coregrind/m_gdbserver/server.h
+++ b/coregrind/m_gdbserver/server.h
@@ -282,8 +282,8 @@
 void sync_gdb_connection (void);
 void write_ok (char *buf);
 void write_enn (char *buf);
-void convert_ascii_to_int (char *from, unsigned char *to, int n);
-void convert_int_to_ascii (unsigned char *from, char *to, int n);
+void convert_ascii_to_int (const char *from, unsigned char *to, int n);
+void convert_int_to_ascii (const unsigned char *from, char *to, int n);
 void prepare_resume_reply (char *buf, char status, unsigned char sig);
 
 void decode_address (CORE_ADDR *addrp, const char *start, int len);
diff --git a/coregrind/m_libcbase.c b/coregrind/m_libcbase.c
index 3567882..59396d7 100644
--- a/coregrind/m_libcbase.c
+++ b/coregrind/m_libcbase.c
@@ -303,8 +303,8 @@
 Int VG_(strcmp) ( const HChar* s1, const HChar* s2 )
 {
    while (True) {
-      if (*(UChar*)s1 < *(UChar*)s2) return -1;
-      if (*(UChar*)s1 > *(UChar*)s2) return 1;
+      if (*(const UChar*)s1 < *(const UChar*)s2) return -1;
+      if (*(const UChar*)s1 > *(const UChar*)s2) return 1;
 
       /* *s1 == *s2 */
       if (*s1 == 0) return 0;
@@ -333,8 +333,8 @@
    SizeT n = 0;
    while (True) {
       if (n >= nmax) return 0;
-      if (*(UChar*)s1 < *(UChar*)s2) return -1;
-      if (*(UChar*)s1 > *(UChar*)s2) return 1;
+      if (*(const UChar*)s1 < *(const UChar*)s2) return -1;
+      if (*(const UChar*)s1 > *(const UChar*)s2) return 1;
       
       /* *s1 == *s2 */
       if (*s1 == 0) return 0;
@@ -569,12 +569,12 @@
       return dest;
    if (dest < src) {
       for (i = 0; i < sz; i++) {
-         ((UChar*)dest)[i] = ((UChar*)src)[i];
+         ((UChar*)dest)[i] = ((const UChar*)src)[i];
       }
    }
    else if (dest > src) {
       for (i = 0; i < sz; i++) {
-         ((UChar*)dest)[sz-i-1] = ((UChar*)src)[sz-i-1];
+         ((UChar*)dest)[sz-i-1] = ((const UChar*)src)[sz-i-1];
       }
    }
    return dest;
diff --git a/coregrind/m_mallocfree.c b/coregrind/m_mallocfree.c
index 7f19e8c..023cf4a 100644
--- a/coregrind/m_mallocfree.c
+++ b/coregrind/m_mallocfree.c
@@ -810,9 +810,7 @@
       // Mark this segment as containing client heap.  The leak
       // checker needs to be able to identify such segments so as not
       // to use them as sources of roots during leak checks.
-      VG_(am_set_segment_isCH_if_SkAnonC)( 
-         (NSegment*) VG_(am_find_nsegment)( (Addr)sb )
-      );
+      VG_(am_set_segment_isCH_if_SkAnonC)( VG_(am_find_nsegment)( (Addr)sb ) );
    } else {
       // non-client allocation -- abort if it fails
       if (unsplittable)
@@ -1281,8 +1279,8 @@
 static AnCC anCCs[N_AN_CCS];
 
 static Int cmp_AnCC_by_vol ( const void* v1, const void* v2 ) {
-   AnCC* ancc1 = (AnCC*)v1;
-   AnCC* ancc2 = (AnCC*)v2;
+   const AnCC* ancc1 = v1;
+   const AnCC* ancc2 = v2;
    if (ancc1->nBytes < ancc2->nBytes) return -1;
    if (ancc1->nBytes > ancc2->nBytes) return 1;
    return 0;
diff --git a/coregrind/m_oset.c b/coregrind/m_oset.c
index 458a143..a2ad7d9 100644
--- a/coregrind/m_oset.c
+++ b/coregrind/m_oset.c
@@ -179,8 +179,8 @@
 // Compare the first word of each element.  Inlining is *crucial*.
 static inline Word fast_cmp(const void* k, const AvlNode* n)
 {
-   UWord w1 = *(UWord*)k;
-   UWord w2 = *(UWord*)elem_of_node(n);
+   UWord w1 = *(const UWord*)k;
+   UWord w2 = *(const UWord*)elem_of_node(n);
    // In previous versions, we tried to do this faster by doing
    // "return w1 - w2".  But it didn't work reliably, because the
    // complete result of subtracting two N-bit numbers is an N+1-bit
@@ -593,7 +593,7 @@
       // elem_of_node because it saves about 10% on lookup time.  This
       // shouldn't be very dangerous because each node will have been
       // checked on insertion.
-      UWord w1 = *(UWord*)k;
+      UWord w1 = *(const UWord*)k;
       UWord w2;
       while (True) {
          if (curr == NULL) return NULL;
diff --git a/coregrind/m_redir.c b/coregrind/m_redir.c
index 81f969e..40f6980 100644
--- a/coregrind/m_redir.c
+++ b/coregrind/m_redir.c
@@ -1615,8 +1615,8 @@
       if (ts->seginfo)
          VG_(message)(Vg_DebugMsg, 
                       "   TOPSPECS of soname %s filename %s\n",
-                      (HChar*)VG_(DebugInfo_get_soname)(ts->seginfo),
-                      (HChar*)VG_(DebugInfo_get_filename)(ts->seginfo));
+                      VG_(DebugInfo_get_soname)(ts->seginfo),
+                      VG_(DebugInfo_get_filename)(ts->seginfo));
       else
          VG_(message)(Vg_DebugMsg, 
                       "   TOPSPECS of soname (hardwired)\n");
diff --git a/coregrind/m_seqmatch.c b/coregrind/m_seqmatch.c
index d9afe4b..09db2d1 100644
--- a/coregrind/m_seqmatch.c
+++ b/coregrind/m_seqmatch.c
@@ -41,11 +41,11 @@
 /* See detailed comment in include/pub_tool_seqmatch.h about this. */
 Bool VG_(generic_match) ( 
         Bool matchAll,
-        void* patt,  SizeT szbPatt,  UWord nPatt,  UWord ixPatt,
-        void* input, SizeT szbInput, UWord nInput, UWord ixInput,
-        Bool (*pIsStar)(void*),
-        Bool (*pIsQuery)(void*),
-        Bool (*pattEQinp)(void*,void*,void*,UWord),
+        const void* patt,  SizeT szbPatt,  UWord nPatt,  UWord ixPatt,
+        const void* input, SizeT szbInput, UWord nInput, UWord ixInput,
+        Bool (*pIsStar)(const void*),
+        Bool (*pIsQuery)(const void*),
+        Bool (*pattEQinp)(const void*,const void*,void*,UWord),
         void* inputCompleter
      )
 {
@@ -65,7 +65,7 @@
       ma []       []     = True
    */
    Bool  havePatt, haveInput;
-   void  *currPatt, *currInput;
+   const HChar *currPatt, *currInput;
   tailcall:
    vg_assert(nPatt >= 0   && nPatt  < 1000000); /* arbitrary */
    vg_assert(nInput >= 0  && nInput < 1000000); /* arbitrary */
@@ -78,8 +78,8 @@
    /* No specific need to set NULL when !have{Patt,Input}, but guards
       against inadvertantly dereferencing an out of range pointer to
       the pattern or input arrays. */
-   currPatt  = havePatt  ? ((HChar*)patt) + szbPatt * ixPatt    : NULL;
-   currInput = haveInput ? ((HChar*)input) + szbInput * ixInput : NULL;
+   currPatt  = havePatt  ? ((const HChar*)patt) + szbPatt * ixPatt    : NULL;
+   currInput = haveInput ? ((const HChar*)input) + szbInput * ixInput : NULL;
 
    // Deal with the complex case first: wildcards.  Do frugal
    // matching.  When encountering a '*', first skip no characters
@@ -163,12 +163,12 @@
 /* And a parameterization of the above, to make it do
    string matching.
 */
-static Bool charIsStar  ( void* pV ) { return *(HChar*)pV == '*'; }
-static Bool charIsQuery ( void* pV ) { return *(HChar*)pV == '?'; }
-static Bool char_p_EQ_i ( void* pV, void* cV,
+static Bool charIsStar  ( const void* pV ) { return *(const HChar*)pV == '*'; }
+static Bool charIsQuery ( const void* pV ) { return *(const HChar*)pV == '?'; }
+static Bool char_p_EQ_i ( const void* pV, const void* cV,
                           void* null_completer, UWord ixcV ) {
-   HChar p = *(HChar*)pV;
-   HChar c = *(HChar*)cV;
+   HChar p = *(const HChar*)pV;
+   HChar c = *(const HChar*)cV;
    vg_assert(p != '*' && p != '?');
    return p == c;
 }
@@ -176,8 +176,8 @@
 {
    return VG_(generic_match)(
              True/* match-all */,
-             (void*)patt,  sizeof(HChar), VG_(strlen)(patt), 0,
-             (void*)input, sizeof(HChar), VG_(strlen)(input), 0,
+             patt,  sizeof(HChar), VG_(strlen)(patt), 0,
+             input, sizeof(HChar), VG_(strlen)(input), 0,
              charIsStar, charIsQuery, char_p_EQ_i,
              NULL
           );
diff --git a/coregrind/m_signals.c b/coregrind/m_signals.c
index e903054..052fcb4 100644
--- a/coregrind/m_signals.c
+++ b/coregrind/m_signals.c
@@ -2186,7 +2186,7 @@
    NSegment const* seg
       = VG_(am_find_nsegment)(addr);
    NSegment const* seg_next 
-      = seg ? VG_(am_next_nsegment)( (NSegment*)seg, True/*fwds*/ )
+      = seg ? VG_(am_next_nsegment)( seg, True/*fwds*/ )
             : NULL;
 
    if (seg && seg->kind == SkAnonC)
@@ -2209,7 +2209,7 @@
                     "extending a stack base 0x%llx down by %lld\n",
                     (ULong)seg_next->start, (ULong)udelta);
    if (! VG_(am_extend_into_adjacent_reservation_client)
-            ( (NSegment*)seg_next, -(SSizeT)udelta )) {
+            ( seg_next, -(SSizeT)udelta )) {
       VG_(debugLog)(1, "signals", "extending a stack base: FAILED\n");
       return False;
    }
@@ -2340,7 +2340,7 @@
    fault    = (Addr)info->VKI_SIGINFO_si_addr;
    esp      = VG_(get_SP)(tid);
    seg      = VG_(am_find_nsegment)(fault);
-   seg_next = seg ? VG_(am_next_nsegment)( (NSegment*)seg, True/*fwds*/ )
+   seg_next = seg ? VG_(am_next_nsegment)( seg, True/*fwds*/ )
                   : NULL;
 
    if (VG_(clo_trace_signals)) {
diff --git a/coregrind/m_syswrap/syswrap-generic.c b/coregrind/m_syswrap/syswrap-generic.c
index 2df0aa0..5e4426f 100644
--- a/coregrind/m_syswrap/syswrap-generic.c
+++ b/coregrind/m_syswrap/syswrap-generic.c
@@ -407,7 +407,7 @@
       ok = VG_(am_covered_by_single_free_segment) ( needA, needL );
    }
    if (ok && advised == needA) {
-      ok = VG_(am_extend_map_client)( &d, (NSegment*)old_seg, needL );
+      ok = VG_(am_extend_map_client)( &d, old_seg, needL );
       if (ok) {
          VG_TRACK( new_mem_mmap, needA, needL, 
                                  old_seg->hasR, 
@@ -463,7 +463,7 @@
    }
    if (!ok || advised != needA)
       goto eNOMEM;
-   ok = VG_(am_extend_map_client)( &d, (NSegment*)old_seg, needL );
+   ok = VG_(am_extend_map_client)( &d, old_seg, needL );
    if (!ok)
       goto eNOMEM;
    VG_TRACK( new_mem_mmap, needA, needL, 
@@ -1093,7 +1093,7 @@
       aseg = VG_(am_find_nsegment)( VG_(brk_limit)-1 );
    else
       aseg = VG_(am_find_nsegment)( VG_(brk_limit) );
-   rseg = VG_(am_next_nsegment)( (NSegment*)aseg, True/*forwards*/ );
+   rseg = VG_(am_next_nsegment)( aseg, True/*forwards*/ );
 
    /* These should be assured by setup_client_dataseg in m_main. */
    vg_assert(aseg);
@@ -1121,7 +1121,7 @@
    vg_assert(delta > 0);
    vg_assert(VG_IS_PAGE_ALIGNED(delta));
    
-   ok = VG_(am_extend_into_adjacent_reservation_client)( (NSegment*)aseg, delta );
+   ok = VG_(am_extend_into_adjacent_reservation_client)( aseg, delta );
    if (!ok) goto bad;
 
    VG_(brk_limit) = newbrk;
@@ -3508,7 +3508,7 @@
       vg_assert(aseg);
 
       if (grows == VKI_PROT_GROWSDOWN) {
-         rseg = VG_(am_next_nsegment)( (NSegment*)aseg, False/*backwards*/ );
+         rseg = VG_(am_next_nsegment)( aseg, False/*backwards*/ );
          if (rseg &&
              rseg->kind == SkResvn &&
              rseg->smode == SmUpper &&
@@ -3521,7 +3521,7 @@
             SET_STATUS_Failure( VKI_EINVAL );
          }
       } else if (grows == VKI_PROT_GROWSUP) {
-         rseg = VG_(am_next_nsegment)( (NSegment*)aseg, True/*forwards*/ );
+         rseg = VG_(am_next_nsegment)( aseg, True/*forwards*/ );
          if (rseg &&
              rseg->kind == SkResvn &&
              rseg->smode == SmLower &&
diff --git a/coregrind/m_translate.c b/coregrind/m_translate.c
index 762762f..26e6376 100644
--- a/coregrind/m_translate.c
+++ b/coregrind/m_translate.c
@@ -1575,14 +1575,14 @@
 
    vg_assert( vge.base[0] == (Addr64)addr );
    /* set 'translations taken from this segment' flag */
-   VG_(am_set_segment_hasT_if_SkFileC_or_SkAnonC)( (NSegment*)seg );
+   VG_(am_set_segment_hasT_if_SkFileC_or_SkAnonC)( seg );
    } /* END new scope specially for 'seg' */
 
    for (i = 1; i < vge.n_used; i++) {
       NSegment const* seg 
          = VG_(am_find_nsegment)( vge.base[i] );
       /* set 'translations taken from this segment' flag */
-      VG_(am_set_segment_hasT_if_SkFileC_or_SkAnonC)( (NSegment*)seg );
+      VG_(am_set_segment_hasT_if_SkFileC_or_SkAnonC)( seg );
    }
 
    /* Copy data at trans_addr into the translation cache. */
diff --git a/coregrind/m_ume/main.c b/coregrind/m_ume/main.c
index 679b106..ad61d6e 100644
--- a/coregrind/m_ume/main.c
+++ b/coregrind/m_ume/main.c
@@ -224,7 +224,7 @@
       info->interp_name = VG_(strdup)("ume.desf.1", default_interp_name);
       info->interp_args = NULL;
       if (info->argv && info->argv[0] != NULL)
-         info->argv[0] = (HChar *)exe_name;  // FIXME: can argv be const qualified ?
+         info->argv[0] = exe_name;
 
       ret = VG_(do_exec_inner)(info->interp_name, info);
 
diff --git a/coregrind/m_ume/script.c b/coregrind/m_ume/script.c
index bab8efe..4976126 100644
--- a/coregrind/m_ume/script.c
+++ b/coregrind/m_ume/script.c
@@ -134,7 +134,7 @@
    }
 
    if (info->argv && info->argv[0] != NULL)
-     info->argv[0] = (HChar *)name;   // FIXME: can argv be const qualified?
+     info->argv[0] = name;
 
    VG_(args_the_exename) = name;
 
diff --git a/coregrind/m_xarray.c b/coregrind/m_xarray.c
index e110dbd..2dbd90d 100644
--- a/coregrind/m_xarray.c
+++ b/coregrind/m_xarray.c
@@ -209,7 +209,7 @@
       ensureSpaceXA( xa );
       vg_assert(xa->usedsizeE < xa->totsizeE);
       vg_assert(xa->arr);
-      * (((UChar*)xa->arr) + xa->usedsizeE) = ((UChar*)bytesV)[i];
+      * (((UChar*)xa->arr) + xa->usedsizeE) = ((const UChar*)bytesV)[i];
       xa->usedsizeE++;
    }
    xa->sorted = False;
diff --git a/coregrind/pub_core_aspacemgr.h b/coregrind/pub_core_aspacemgr.h
index 0ed1c4a..17b33f6 100644
--- a/coregrind/pub_core_aspacemgr.h
+++ b/coregrind/pub_core_aspacemgr.h
@@ -73,7 +73,8 @@
 
 /* Find the next segment along from 'here', if it is a file/anon/resvn
    segment. */
-extern NSegment const* VG_(am_next_nsegment) ( NSegment* here, Bool fwds );
+extern NSegment const* VG_(am_next_nsegment) ( const NSegment* here,
+                                               Bool fwds );
 
 /* Is the area [start .. start+len-1] validly accessible by the 
    client with at least the permissions 'prot' ?  To find out
@@ -281,12 +282,12 @@
    (is-client-heap) flag for that area.  Otherwise do nothing.
    (Bizarre interface so that the same code works for both Linux and
    AIX and does not impose inefficiencies on the Linux version.) */
-extern void VG_(am_set_segment_isCH_if_SkAnonC)( NSegment* seg );
+extern void VG_(am_set_segment_isCH_if_SkAnonC)( const NSegment* seg );
 
 /* Same idea as VG_(am_set_segment_isCH_if_SkAnonC), except set the
    segment's hasT bit (has-cached-code) if this is SkFileC or SkAnonC
    segment. */
-extern void VG_(am_set_segment_hasT_if_SkFileC_or_SkAnonC)( NSegment* );
+extern void VG_(am_set_segment_hasT_if_SkFileC_or_SkAnonC)( const NSegment* );
 
 /* --- --- --- reservations --- --- --- */
 
@@ -312,7 +313,7 @@
    the reservation segment after the operation must be at least one
    page long. */
 extern Bool VG_(am_extend_into_adjacent_reservation_client) 
-   ( NSegment* seg, SSizeT delta );
+   ( const NSegment* seg, SSizeT delta );
 
 /* --- --- --- resizing/move a mapping --- --- --- */
 
@@ -324,7 +325,7 @@
    *need_discard is True after a successful return, the caller should
    immediately discard translations from the new area. */
 extern Bool VG_(am_extend_map_client)( /*OUT*/Bool* need_discard,
-                                       NSegment* seg, SizeT delta );
+                                       const NSegment* seg, SizeT delta );
 
 /* Remap the old address range to the new address range.  Fails if any
    parameter is not page aligned, if the either size is zero, if any
diff --git a/coregrind/pub_core_ume.h b/coregrind/pub_core_ume.h
index a9a438e..e1ab47b 100644
--- a/coregrind/pub_core_ume.h
+++ b/coregrind/pub_core_ume.h
@@ -44,7 +44,7 @@
 // inputs/outputs of do_exec().
 typedef
    struct {
-      HChar** argv;       // IN: the original argv
+      const HChar** argv;   // IN: the original argv
 
       Addr exe_base;     // INOUT: lowest (allowed) address of exe
       Addr exe_end;      // INOUT: highest (allowed) address
diff --git a/coregrind/vgdb.c b/coregrind/vgdb.c
index 160b71c..4b2b0af 100644
--- a/coregrind/vgdb.c
+++ b/coregrind/vgdb.c
@@ -362,7 +362,7 @@
    if (debuglevel >= 1) {
       DEBUG (1, "Writing ");
       for (i = 0; i < len; i++)
-         PDEBUG (1, "%02x", ((unsigned char*)myaddr)[i]);
+         PDEBUG (1, "%02x", ((const unsigned char*)myaddr)[i]);
       PDEBUG(1, " to %p\n", (void *) memaddr);
    }