Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #57123

Re: porting from 32-bit to 64-bit with fine-tooth comb?

From jt@toerring.de (Jens Thoms Toerring)
Newsgroups comp.lang.c
Subject Re: porting from 32-bit to 64-bit with fine-tooth comb?
Date 2015-02-08 00:59 +0000
Organization Freie Universitaet Berlin
Message-ID <cjnqn5Fbn5tU1@mid.uni-berlin.de> (permalink)
References <8c0baf78-2ed4-4012-8a87-df42391b5e75@googlegroups.com>

Show all headers | View raw


mbjorn@y7mail.com wrote:
> I got this in a mailing list for a FOSS package that I use:

> "Another thing to note when running old code on 64-bit platforms is to
> inspect the struct definitions that are used directly to store or read
> binary data. There's no standard way to guarantee compatibility but
> gcc has a "packed" pragma which should do the right thing combined
> with explicit padding where needed,"

> Is this a problem, that different word lengths can screw up 
> structures?  Can unsigned int, for example, change length going from
> a 32-bit system to 64?

There are at least three potential problems.

a) The size of on int on machine A (used for writing the file)
   may differ from the size of and an int (and any other types
   not explicit about their sizes) on machine B (used for rea-
   ding the file.

b) The endianess of machine A can differ from that of machine B.
   Thus, even if all the types have the exact same sizes, what
   gets read in on B can be quite different from what has been
   written on A.

c) Structure padding: the compiler is allowed to insert as
   much padding as it likes between members of the structure.
   Even the exact same compiler could, at least in principle,
   use different amounts pf padding dependent on the settings
   of some compiler switch - thus even a program on machine A,
   compiled with different settings or with a different compiler,
   may not be able to correctly read the file written on machine
   A itself.

   gcc's 'packed' flag may help in some situations (if machine A
   and B have the same sizes for all relevamt types and the same
   endianess and both programs are cpmpiled with gcc). But then
   you've still have to consider alignment issues - members of
   such a structure may need to be written to and read from by
   using memcpy() since an attempt to access a member that is
   now badly aligned due to the 'packed' attribute any other
   way may result in a bus error.

Morale: don't attempt to store structures an binary blobs in
a file if you want to be able to read that data back with any-
thing else than the exact same program that wrote it. Learned
it the hard way nearly 20 years ago;-)

                         Best regards, Jens
-- 
  \   Jens Thoms Toerring  ___      jt@toerring.de
   \__________________________      http://toerring.de

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

porting from 32-bit to 64-bit with fine-tooth comb? mbjorn@y7mail.com - 2015-02-07 15:33 -0800
  Re: porting from 32-bit to 64-bit with fine-tooth comb? wssimms@gmail.com - 2015-02-07 16:56 -0800
  Re: porting from 32-bit to 64-bit with fine-tooth comb? jt@toerring.de (Jens Thoms Toerring) - 2015-02-08 00:59 +0000
    Re: porting from 32-bit to 64-bit with fine-tooth comb? Keith Thompson <kst-u@mib.org> - 2015-02-07 17:22 -0800
      Re: porting from 32-bit to 64-bit with fine-tooth comb? jt@toerring.de (Jens Thoms Toerring) - 2015-02-08 01:43 +0000
        Re: porting from 32-bit to 64-bit with fine-tooth comb? raltbos@xs4all.nl (Richard Bos) - 2015-02-08 16:16 +0000
  Re: porting from 32-bit to 64-bit with fine-tooth comb? Richard Damon <Richard@Damon-Family.org> - 2015-02-07 20:02 -0500
  Re: porting from 32-bit to 64-bit with fine-tooth comb? glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-02-08 02:18 +0000
  Re: porting from 32-bit to 64-bit with fine-tooth comb? Bartc <bc@freeuk.com> - 2015-02-08 11:08 +0000
  Re: porting from 32-bit to 64-bit with fine-tooth comb? Jorgen Grahn <grahn+nntp@snipabacken.se> - 2015-02-09 21:20 +0000
  Re: porting from 32-bit to 64-bit with fine-tooth comb? Nobody <nobody@nowhere.invalid> - 2015-02-09 21:35 +0000
  Re: porting from 32-bit to 64-bit with fine-tooth comb? Lőrinczy Zsigmond <nospam@for.me> - 2015-04-03 16:07 +0200
    Re: porting from 32-bit to 64-bit with fine-tooth comb? James Kuyper <jameskuyper@verizon.net> - 2015-04-03 11:21 -0400
    Re: porting from 32-bit to 64-bit with fine-tooth comb? Barry Schwarz <schwarzb@dqel.com> - 2015-04-03 09:36 -0700
      Re: porting from 32-bit to 64-bit with fine-tooth comb? Lőrinczy Zsigmond <nospam@for.me> - 2015-04-03 19:10 +0200
  Re: porting from 32-bit to 64-bit with fine-tooth comb? Jorgen Grahn <grahn+nntp@snipabacken.se> - 2015-04-04 21:05 +0000
    Re: porting from 32-bit to 64-bit with fine-tooth comb? Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-04-04 23:13 -0700
      Re: porting from 32-bit to 64-bit with fine-tooth comb? Jorgen Grahn <grahn+nntp@snipabacken.se> - 2015-04-11 04:19 +0000
        Re: porting from 32-bit to 64-bit with fine-tooth comb? Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-04-10 23:53 -0700
          Re: porting from 32-bit to 64-bit with fine-tooth comb? Richard Damon <Richard@Damon-Family.org> - 2015-04-11 10:54 -0400
          Re: porting from 32-bit to 64-bit with fine-tooth comb? Jorgen Grahn <grahn+nntp@snipabacken.se> - 2015-04-11 15:59 +0000

csiph-web