public inbox for linux-ia64@vger.kernel.org
 help / color / mirror / Atom feed
From: Dan Pop <Dan.Pop@cern.ch>
To: linux-ia64@vger.kernel.org
Subject: Re: [Linux-ia64] correct seg fault address on ia-64??
Date: Wed, 14 Nov 2001 16:49:22 +0000	[thread overview]
Message-ID: <marc-linux-ia64-105590698805509@msgid-missing> (raw)
In-Reply-To: <marc-linux-ia64-105590698805506@msgid-missing>


On Wed, 14 Nov 2001, Pereira, D LailaX E wrote:

>   x=(int*)malloc(2*page_size);
> 
>  /* Align to a multiple of page_size, assumed to be a power of two */
>   x = (int *)((long)(((int) (long)x + page_size-1) & ~(page_size-1)));
                        ^^^^^
This conversion is the WRONG thing: you are losing significant bits
from the 64-bit pointer's value!

>   printf("Address:  %x\n",x );

And this is the wrong way of displaying a pointer, which is not a
32-bit entity and definitely not an unsigned int.  The right way of
doing it is:

    printf("Address:  %p\n", (void *)x);

> .............
> However , when I ran the program thru gdb, I got the following:
> Reading symbols from a.out...done.
> (gdb) run ex3.c
> ......
> Pagesize : 16384 ,PID(471
> Address:  4000
> Page protection : NONE : try reading the page
>  segv should arise now ...
> 
> Program received signal SIGSEGV, Segmentation fault.
> 0x40000000000010e0 in main ()
> (gdb) where 
> #0  0x40000000000010e0 in main ()
> #1  0x20000000000906b0 in __libc_start_main (
>     main=0x40000000000013e8 <_fini+408>, argc=2, 
> ubp_av=0x80000fffffffb848, 
>     init=0x40000000000013b8 <_fini+360>, 
>     fini=0x200000000003db30 <_dl_debug_mask>, 
>     rtld_fini=0x20000000002581c8 <_dl_get_origin+632>, 
>     stack_end=0x80000fffffffb840) at ../sysdeps/generic/libc-start.c:129
> #2  0x40000000000010b0 in main ()
> (gdb)....
> 
> 
> So thru, gdb the seg fault address is "0x40000000000010e0" , is my
> interpretation right ?? 
> Why is that when I run the program on itanium , I get the address as "4000"
> and thru gdb as " 0x40000000000010e0". What is wrong?? Please let me know.

You're confusing data addresses and code addresses.  You're displaying
the value of a pointer, which is a (badly formed) data address, while
gdb is displaying the address of the instruction that generated the
fault, i.e. a code address.

Dan



  parent reply	other threads:[~2001-11-14 16:49 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-11-14 16:03 [Linux-ia64] correct seg fault address on ia-64?? Pereira, D LailaX E
2001-11-14 16:42 ` n0ano
2001-11-14 16:45 ` Andreas Schwab
2001-11-14 16:49 ` Dan Pop [this message]
2001-11-14 17:22 ` Rich Altmaier
2001-11-14 17:49 ` Christoph Hellwig
2001-11-14 18:02 ` n0ano
2001-11-14 18:51 ` Rok Sosic

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-105590698805509@msgid-missing \
    --to=dan.pop@cern.ch \
    --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