Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Glob problem with memory



On  3 Jan, To: pws@xxxxxxxxxxxxxxxxxxxxxxxx wrote:
> On  1 Jan, Peter Stephenson wrote:
>> Felix Rosencrantz wrote:
>>> When attempting to do an "echo *(/)" or use other glob qualifiers,
>>> I've been getting a bus error with this stack trace on Solaris 5.6.
>>> I started seeing this problem in builds sometime after Dec 14th.
>>> I think it is related to the recently made memory changes.
>>> I don't see the problem if I replace the hcalloc on line glob.c:1312
>>> with a zcalloc, so the problem seems to be related to memory allocation.
>> 
>> We should check that the new mmap() memory things in mem.c always return
>> 64-bit aligned pointers where necessary, even on 32-bit machines.  I was
>> getting just this sort of problem with the old form of the zhalloc()
>> mechanism when I introduced 64-bit integer support and before I fixed the
>> alignment.  I'll have a look at this, but Sven might be able to trace it
>> more effectively when he gets back.  Meanwhile, changing the USE_MMAP
>> #define in mem.c to #undef USE_MMAP should fix things up for the time
>> being.
>> 
> Here on my IRIX box (it's 64 bit but I am using -n32 i.e. 32 bit code)
> I get the same bus error,
> BUT mem.c does NOT use mmap here, since my <sys/mman.h> doesn't define
> MAP_ANONYMOUS
> 
> So what can we do?
> Helmut.
> 
In addition I found out

sizeof(struct heap) == 20  here, so with the definition
#define arena(X) ((char *) (X) + sizeof(struct heap))
in mem.c line 324

return arena(h) + n - size;

is nearly guaranteed to be misaligned here.


-- 
Helmut Jarausch
Lehrstuhl fuer Numerische Mathematik
Institute of Technology, RWTH Aachen
D 52056 Aachen, Germany



Messages sorted by: Reverse Date, Date, Thread, Author