* [Linux-ia64] Pointer to function has a bad value
@ 2001-03-08 9:07 Robboy, David G
2001-03-08 10:39 ` Andreas Schwab
2001-03-08 11:25 ` Doug Rabson
0 siblings, 2 replies; 3+ messages in thread
From: Robboy, David G @ 2001-03-08 9:07 UTC (permalink / raw)
To: linux-ia64
Is this a known bug or fixed in a later compiler? Using gcc version
2.9-ia64-000216-final, assigning the address of a function to a pointer
gives the wrong value. In the following program, the address of twiddle is
0x40000000000003f0, but the value of the pointer i is 0x4000000000078300.
void twiddle(void)
{
int i = 34;
}
main()
{
unsigned long i = (unsigned long)twiddle;
printf("i=%lx\n", i);
}
- David Robboy
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Linux-ia64] Pointer to function has a bad value
2001-03-08 9:07 [Linux-ia64] Pointer to function has a bad value Robboy, David G
@ 2001-03-08 10:39 ` Andreas Schwab
2001-03-08 11:25 ` Doug Rabson
1 sibling, 0 replies; 3+ messages in thread
From: Andreas Schwab @ 2001-03-08 10:39 UTC (permalink / raw)
To: linux-ia64
"Robboy, David G" <david.g.robboy@intel.com> writes:
|> Is this a known bug or fixed in a later compiler? Using gcc version
|> 2.9-ia64-000216-final, assigning the address of a function to a pointer
|> gives the wrong value. In the following program, the address of twiddle is
|> 0x40000000000003f0, but the value of the pointer i is 0x4000000000078300.
This is correct. The conversion from pointer to integer is implementation
defined, the only requirement is that if the integer type is wide enough
you'll get the same pointer when casting back to the original pointer
type.
Andreas.
--
Andreas Schwab "And now for something
SuSE Labs completely different."
Andreas.Schwab@suse.de
SuSE GmbH, Schanzäckerstr. 10, D-90443 Nürnberg
Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Linux-ia64] Pointer to function has a bad value
2001-03-08 9:07 [Linux-ia64] Pointer to function has a bad value Robboy, David G
2001-03-08 10:39 ` Andreas Schwab
@ 2001-03-08 11:25 ` Doug Rabson
1 sibling, 0 replies; 3+ messages in thread
From: Doug Rabson @ 2001-03-08 11:25 UTC (permalink / raw)
To: linux-ia64
On Thu, 8 Mar 2001, Robboy, David G wrote:
> Is this a known bug or fixed in a later compiler? Using gcc version
> 2.9-ia64-000216-final, assigning the address of a function to a pointer
> gives the wrong value. In the following program, the address of twiddle is
> 0x40000000000003f0, but the value of the pointer i is 0x4000000000078300.
For ia64, function pointers are actually pointers to function descriptors.
A function descriptor contains a pointer to the actual function's code and
the value which the 'gp' register should have for that function (this is
part of the ABI support for shared libraries).
A function descriptor looks like this:
struct ia64_fdesc {
uint64_t func;
uint64_t gp;
};
--
Doug Rabson Mail: dfr@nlsystems.com
Phone: +44 20 8348 6160
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2001-03-08 11:25 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-03-08 9:07 [Linux-ia64] Pointer to function has a bad value Robboy, David G
2001-03-08 10:39 ` Andreas Schwab
2001-03-08 11:25 ` Doug Rabson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox