public inbox for linux-ia64@vger.kernel.org
 help / color / mirror / Atom feed
From: "Hideki Yamamoto" <hideki@hpc.bs1.fc.nec.co.jp>
To: linux-ia64@vger.kernel.org
Subject: [Linux-ia64] Re: Pagesize is different between IA32 and IA64
Date: Mon, 12 Nov 2001 08:29:53 +0000	[thread overview]
Message-ID: <marc-linux-ia64-105590698805466@msgid-missing> (raw)

[-- Attachment #1: Type: text/plain, Size: 410 bytes --]


 I am sorry I forgot to say my opinion and attach sample
 program.

 I think the solution of this problem is which
 following them
  - __getpagesize function should returns the real pagesize
  - It needs to prepare the another function that
    returns real pagesize for malloc instead.

 I have confirmed this problem, the Kernel version is
 2.4.7 and the libc version is 2.2.4.

 This is a sample program.


[-- Attachment #2: d.c --]
[-- Type: application/octet-stream, Size: 2114 bytes --]

#include <unistd.h>

#define SIZE4K  (0x1000)
#define SIZE16K (0x4000)

//#define MORECORE (MORECORE)
#define MORECORE (sbrk)

main() {
    char *brk, *curbrk, *p, *adjust;
    int i, j;

    if((brk = (char *)MORECORE(0)) == (char *)-1) {
        printf("Morecore failed.\n");
        exit(1);
    }
    adjust = (char*)((((long)(char *)brk /SIZE16K)+1) *SIZE16K) ;
    if( (brk = (char *)MORECORE((char *)adjust - (char *)brk)) == (char *)-1 ) {
        printf("Morecore failed.\n");
        exit(1);
    }
        
    if( (curbrk = (char*)MORECORE(SIZE4K)) == (char*)-1 ) {
        printf("Morecore failed.\n");
        exit(1);
    }
    
    p = curbrk;
    printf("First MORECORE(It must be cleared) curbrk=0x%x\n", curbrk);
    for(i = 0; i < SIZE4K; i++ ) {
        if( *p != 0 ) { printf("It is dirty\n"); break; }
        *p++;
    }

    p = curbrk;
    for(i = 0; i < SIZE4K; i++ ) {
        *p = (char)0xff;
        p++;
    }

    if( (curbrk = (char*)MORECORE(SIZE4K)) == (char*)-1 ) {
        printf("Morecore failed.\n");
        exit(1);
    }
    
    p = curbrk;
    printf("Second MORECORE(It also must be cleared) curbrk=0x%x\n", curbrk);
    for(i = 0; i < SIZE4K; i++ ) {
        if( *p != 0 ) { printf("It is dirty\n"); break; }
        *p++;
    }
    p = curbrk;
    for(i = 0; i < SIZE4K; i++ ) {
        *p = (char)0xff;
        p++;
    }


    if( (curbrk = (char*)MORECORE(-SIZE4K)) == (char*)-1 ) {
        printf("Morecore failed.\n");
        exit(1);
    }
    
/*
    printf("Aftere MORECORE(-SIZE4K)\n");
    p = curbrk;
    for(i = 0; i < SIZE4K; i++ ) {
        if( *p != 0 ) { printf("It is dirty\n"); break; }
        p++;
    }
*/

    if( (curbrk = (char*)MORECORE(SIZE4K)) == (char*)-1 ) {
        printf("Morecore failed.\n");
        exit(1);
    }
    
    p = curbrk;
    printf("Third MORECORE curbrk = 0x%x\n", curbrk);
    for(i = 0; i < SIZE4K; i++ ) {
        if( *p != 0 ) { printf("It is dirty\n"); break; }
        p++;
    }

    if( (curbrk = (char*)MORECORE(-SIZE4K)) == (char*)-1 ) {
        printf("Morecore failed.\n");
        exit(1);
    }
    
}

[-- Attachment #3: Type: text/plain, Size: 918 bytes --]


> 
> 
>  Hello all.
> 
>  If this problem has already known, I am sorry.
> 
>  I am investigating the problem that calloc returns no
>  cleared area.
>  It was made on IA32 system and executes on IA64.
>  I think calloc expects to clear the memories sbrk
>  returned. But When the program made on IA32 is
>  executing on IA64 system, sbrk sometimes returns no
>  cleared area. 
>  Because the Kernel on IA64 alignes the memories 16K
>  bytes. However, when the progmam made on IA32 is
>  executing on IA64, the function __getpagesize returns
>  4Kbytes. At this case, if the memories that calloc
>  requests to return sbrk(-xxx) is smaller than
>  16Kbytes, the kernel do not unmap this memory.
>  (I think that the time that the memories clears 0 by
>  the kernel is when the kernel maps memories by the signal) 
> 
>  How do you think?
> 
> --
> Regards, 
> Hideki Yamamoto   (V).v.(V) # Empowered by Innovation
> 

             reply	other threads:[~2001-11-12  8:29 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-11-12  8:29 Hideki Yamamoto [this message]
2001-11-12  8:59 ` [Linux-ia64] Re: Pagesize is different between IA32 and IA64 nomura

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=marc-linux-ia64-105590698805466@msgid-missing \
    --to=hideki@hpc.bs1.fc.nec.co.jp \
    --cc=linux-ia64@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox