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
>
next 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