RE: Different old_mmap behavior between 2.4.5 and 2.4.8

From: Bao C. Ha (baoha@sensoria.com)
Date: Tue Sep 11 2001 - 13:31:22 EST


> On Mon, Sep 10, 2001 at 06:30:55PM -0700, Bao C. Ha wrote:
> > Is this supposed to be the correct behavior? What changes
> > make the newer kernels to return different pointers? We
> > are running on the sh4 architecture but I think these calls
> > come from malloc() which should be arch-independent.
>
> The result from earlier kernels is wrong. If your code
> requires that the same address is returned as was specified
> then you need to pass in the MAP_FIXED flag.

Unfortunately, it is the linuxthreads code that is broken
on the sh4 platform. It seems that the pointers are moved
due to cache aliasing. I am trying to raise awareness that
this is breaking pthreads applications on sh4-linux.

Following is the relevant segment of linuxthreads that is
broken:

In function pthread_allocate_stack(), file manager.c:
.......
# ifdef _STACK_GROWS_DOWN
      new_thread = default_new_thread;
      new_thread_bottom = (char *) (new_thread + 1) - stacksize;
      map_addr = new_thread_bottom - guardsize;
      res_addr = mmap(map_addr, stacksize + guardsize,
                      PROT_READ | PROT_WRITE | PROT_EXEC,
                      MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
      if (res_addr != map_addr)
        {
          /* Bad luck, this segment is already mapped. */
          if (res_addr != MAP_FAILED)
            munmap (res_addr, stacksize + guardsize);
          return -1;
        }
.......

We resort to patching the MAP_FIXED back to linuxthreads
until we get a resolution on this problem.

Thanks.
Bao

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sat Sep 15 2001 - 21:00:34 EST