This is the mail archive of the ecos-patches@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] add ftok() and getenv() functions to the synthetic target


On Sat, Nov 05, 2005 at 06:46:52PM +0100, Andrew Lunn wrote:
> > So how about cyg_hal_sys_ftok() ?
> 
> Im working on it, but it crashes horribly, becasue it corrupts the
> stack. 
> 
> It looks like your implementations of cyg_hal_sys_?stat() are passing
> the wrong structure to the kernel. So i first need to fix this before
> i can test your ftok() implementation.

Turns out to be more interesting than i expected.

First off i cleaned up the cyg_hal_sys_*stat functions. There was
various breaking of naming conventions going on to start with. There
are now two sets of functions: cyg_hal_sys_{old|new}*stat, which
correspond to the two sets of kernel system calls. Similarly there are
now struct cyg_hal_sys_{old|new}_stat structures. I've synchronised
these structures with the linux 2.6.14 kernel. Looking at
http://lxr.linux.no they might will also work OK with older kernels,
back to 2.0.40, but since i only have 2.6.14, thats all i've
tested. So please report any breakages to me...

Once stat worked i then went back to your ftok() implementation and
tested it. In the patch you can find my test program. On native linux
is produces:

ftok("/etc/passwd",0x12)) = 0x12052e51
ftok("/etc/passwd",0x72)) = 0x72052e51
ftok("/boot/vmlinuz",0x72)) = 0x7201001a
ftok("/boot/vmlinuz",0x12)) = 0x1201001a

Your implementation in eCos produced:

ftok("/etc/passwd",0x12)) = 0x12052e51
ftok("/etc/passwd",0x72)) = 0x72052e51
ftok("/boot/vmlinuz",0x72)) = 0x7201000d
ftok("/boot/vmlinuz",0x12)) = 0x1201000d

So the FreeBSD version is not compatible with the glibc version. I can
imagine people wanting a native Linux application to talk to an eCos
synthetic system using shared memory, semaphores, or message
queues. So the keys have to be compatible.

Playing around i bit more i fixed it. Doing various ls -i is became
obvious that linux uses the inode of what a symbolic link points to,
not the inode of the symbolic link. So changing *_lstat to *_stat and
it produced compatible values. 

Attached is the overall patch.

        Andrew

Attachment: ftok.diff
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]