Ah I see, that is good to know and handy in the right situation. But yes I
see how that could be abused. I guess your suggestions for the lax
alignment does make sense for better support. Maybe just throw in a
warning message about breaking the pci spec and call it a day.
On Sun, Jan 20, 2013 at 7:11 PM, David Woodhouse <[email protected]>wrote:
> On Sun, 2013-01-20 at 18:39 -0500, Joe Vernaci wrote:
> > AFAIK the __attribute__((packed)) only allows for unaligned member
> > accesses but assumes the root of the structure will be aligned.
>
> I have often wished that that were true (or at least for GCC to have a
> 'nopadding' attribute for which is *is* true), but unfortunately it's
> not:
>
> struct foo1 { int a; } __attribute__((packed));
> int retfoo1 (struct foo1 *p) { return p->a; }
>
> struct foo2 { int a; };
> int retfoo2 (struct foo2 *p) { return p->a; }
>
> [dwmw2@shinybook ~]$ arm-linux-gnu-gcc -O2 -c foo.c ;
> arm-linux-gnu-objdump -d foo.o
>
> foo.o: file format elf32-littlearm
>
>
> Disassembly of section .text:
>
> 00000000 <retfoo1>:
> 0: e5d03000 ldrb r3, [r0]
> 4: e5d01001 ldrb r1, [r0, #1]
> 8: e5d02002 ldrb r2, [r0, #2]
> c: e1833401 orr r3, r3, r1, lsl #8
> 10: e5d00003 ldrb r0, [r0, #3]
> 14: e1833802 orr r3, r3, r2, lsl #16
> 18: e1830c00 orr r0, r3, r0, lsl #24
> 1c: e12fff1e bx lr
>
> 00000020 <retfoo2>:
> 20: e5900000 ldr r0, [r0]
> 24: e12fff1e bx lr
>
>
> It's a pain, because people like to litter their structure definitions
> with __attribute__((packed)) just in *case* the compiler randomly
> decides to put padding into a structure which wouldn't naturally get it
> anyway. And this has a massively detrimental effect on performance for
> some targets. If we had __attribute__((nopadding)) that worked as you
> suggest (although you had four bytes between your ints in your example
> when I think you meant to have three), that would be very useful.
>
> But no, __attribute__((packed)) does do exactly what I intended it to do
> in *this* case. Except that it isn't portable to other toolchains, I
> suspect.
>
> --
> dwmw2
>
>
------------------------------------------------------------------------------
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. SALE $99.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122412
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel