NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/39897: sizeof(struct gpt_hdr);




On Nov 12, 2008, at 2:45 PM, David Laight wrote:

The following reply was made to PR kern/39897; it has been noted by GNATS.

From: David Laight <david%l8s.co.uk@localhost>
To: Jason Thorpe <thorpej%shagadelic.org@localhost>
Cc: gnats-bugs%NetBSD.org@localhost
Subject: Re: kern/39897: sizeof(struct gpt_hdr);
Date: Wed, 12 Nov 2008 22:40:39 +0000

On Tue, Nov 11, 2008 at 04:56:14PM -0800, Jason Thorpe wrote:

On Nov 11, 2008, at 3:55 PM, David Laight wrote:

On Tue, Nov 11, 2008 at 07:00:01PM +0000, jakllsch%kollasch.net@localhost wrote:
Synopsis:       sizeof(struct gpt_hdr); is "wrong" on amd64

Perhaps add a '__packed' attribute to the GPT structures.

There is a typedef for a 64bit int with 32bit alignment somewhere.
That is better than applying packed to the entire structure.

No, there's not.

The problem is likely due to the fact that the struct has 3 uint32_t's
at the end, rather than 2 or 4.

To get the entire structure to have 4-byte alignment, the uint64_t
fields need to be marked as having 4-byte alignment.
This is done in some of the compat code for i386.

Alignment is not the issue.  Padding at the end is.

The solution to this problem is trivial.  I have a patch to check in.



However I suspect the gpt_hdr never exists as an array, so the
overall size/padding should be handled differently.

Otherwise you get rather long code sequences if you have to access
the structure members on systems that can't perform misaligned transfers.

        David

--
David Laight: david%l8s.co.uk@localhost


-- thorpej



Home | Main Index | Thread Index | Old Index