All of lore.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.