Remove the getpagesize system call from ia64

Jakub Jelinek jakub@redhat.com
Wed Jan 10 15:07:00 GMT 2001


On Wed, Jan 10, 2001 at 10:23:31AM -0800, H . J . Lu wrote:
> AT_PAGESZ works on the current ia64 kernel.

Unfortunately, not fully yet :(.

Consider statically linked:
#include <stdio.h>
#include <pwd.h>
#include <sys/types.h>
#include <unistd.h>

int main() {
        struct passwd *foo;
        foo=getpwuid(2166);
        printf("%d %d\n",foo->pw_uid,foo->pw_gid);
}
This will crash. Although _dl_pagesize is set properly in the main program,
when it dlopens libnss_files.so.2 which in turn drags in libc.so.6.1 and
ld-linux-ia64.so.2. Now when libnss_files.so.2 calls __getpagesize(), it
uses _dl_pagesize variable present in ld-linux-ia64.so.2 which has not been
initialized and thus it either crashes immediately or later on (if
-DNDEBUG=1). At least I believe this is happening from what Bill Nottingham
told me. I think one solution could be to have the getpagesize syscall for
this case, another one would be to have a list of ld.so variables which need
to be initialized to their static originals, like have something like:
{ "_dl_pagesize", &_dl_pagesize },
and during dlopen #ifndef SHARED go through that list and copy the content.

	Jakub


More information about the Libc-alpha mailing list