On Wed, Jan 28, 2004 at 12:57:41PM -0500, Gene C. wrote:
Do the cast warning messages I see when compiling previously 32 bit
applications on the amd64 really mean all that much?
It depends. They range from "hard to avoid noise" to "indicators of
killer bugs". You can tell only on a case-by-case basis.
Now I understand that you do not want to store an 8 byte pointer into a 4 byte
variable or get a 8 byte pointer from a 4 byte variable. If the code
underlying the calls does the "right thing" ...
If the code does really then "right thing" then you do not have a
warning; but sometimes it may be difficult to do that without
extensive rewrites.
That is, is it worth the pain to go fix things
so that the cast messages do not occur?
Usually yes, in my experience; to an extent. It helps immensly to
catch remaining bugs if a code is clean. Very often doing that just
simply fixes nasty bugs.
Some "fun" things to trip you include a global variable for which
some library provided only an 'int' storage but you are writing
'long' there. You will crash, or not, in an unrelated place
depending on what and when you overwrote in "other" four bytes.
Or things which change size in a way hard to notice across a
function call boundary, or places which rely implicitely and
silently on a sign extension which will not work the same in 32 and
64 bits. Or ... If you are using C++ then opportunities for various
size abuses, and difficulties of finding these, go up exponentially.
I went to some effort to clean up nessus so building it had no cast
messages.
But was it worth it.
Here you are. :-)
For example, you have a function which extracts
something from an array/table and may return a pointer sometimes and other
times an integer.
Then really union should have been used; but sources of X, for
example, are chock-full of such junk and that's life.
Michal