Re: -pie is broken on hppa

"John David Anglin" <[email protected]>
Newsgroups gmane.linux.ports.hppa,gmane.linux.debian.ports.hppa
Message-ID <[email protected]>
> This is what I see when I do a gcc_update:
> dave@mx3210:~/gnu/gcc-4.3/gcc$ contrib/gcc_update
> Updating SVN tree
> At revision 125275.
> svn: Can't read directory '.': Partial results are valid but processing is incomplete

I spent the day trying to debug why libjava fails to build on this system
with the new glibc.  It seems that scandir is broken on 64-bit kernels.
There seems to be an off by one error in copying dirent structs.  Either
the define in <dirent.h> for _D_ALLOC_NAMLEN is wrong or the kernel
sometimes returns a value for d_reclen that is sometimes too small.  The
code in fs/readdir.c suggests that sys_parisc32.c needs fixing.

The enclosed seems to fix both the libjava build and the svn problem.
Kyle's branch uses ALIGN instead of ROUND_UP.

Dave
-- 
J. David Anglin                                  [email protected]
National Research Council of Canada              (613) 990-0752 (FAX: 952-6602)

diff --git a/arch/parisc/kernel/sys_parisc32.c b/arch/parisc/kernel/sys_parisc32.c
index 29be437..44400e0 100644
--- a/arch/parisc/kernel/sys_parisc32.c
+++ b/arch/parisc/kernel/sys_parisc32.c
@@ -318,7 +318,7 @@ static int filldir32 (void *__buf, const char *name, int namlen,
 {
 	struct linux32_dirent __user * dirent;
 	struct getdents32_callback * buf = (struct getdents32_callback *) __buf;
-	int reclen = ROUND_UP(NAME_OFFSET(dirent) + namlen + 1, 4);
+	int reclen = ROUND_UP(NAME_OFFSET(dirent) + namlen + 2, 4);
 	u32 d_ino;
 
 	buf->error = -EINVAL;	/* only used if we fail.. */
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.