<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'><div>ok, so this structure_size_boundary isn't entirely bogus.</div><div>In fact, as is typical, it might have been correct, but its</div><div>relevance has drastically declined as the targets have shifted.</div><div>Like so much of cm3, it is based closely on gcc.</div><div><br></div><div><br></div><div>It appears that</div><div><br></div><div><br></div><div> OpenBSD/68k rounds struct sizes up to a multiple of 2.</div><div> Other 68k targets do not.</div><div> Perhaps historical 68k targets did -- perhaps that is a lot of what cm3 was handling.</div><div> ARM sometimes rounds up to a multiple of 4, but sometimes not, depending on exact platform.</div><div> sh used to? and still optionally rounds up to a multiple of 4, but I think defaults to not?</div><div><br></div><div><br></div><div>The only non-8 case we had in cm3 was for HPPA and that was wrong seeming.</div><div><br></div><div><br></div><div>Getting this value wrong should only lead to a lack of C interop on unusual records.</div><div>i.e. if you have an array of records with an odd size, the adress of than the first</div><div>might mismatch.</div><div>It can have an affect in non-array-of-record cases too, if you use BYTESIZE.</div><div>Or, when the C backend does layout, possibly disagreeing with the frontend.</div><div><br></div><div><br></div><div>Maybe I'm naive but this all seems like a mistake.</div><div><br></div><div><br></div><div> sizeof(struct {char a;}) should be 1 for all targets. </div><div> sizeof(struct {char a[3];}) should be 3 for all targets. </div><div><br></div><div>but I guess various ABI developers have disagreed through the decades</div><div>and we are kinda somewhat stuck with it.</div><div><br></div><div><br></div><div>There is a gcc command line switch, at least for ARM, to vary the rounding.</div><div><br></div><div><br></div><div> - Jay</div><br><br><br><div><hr id="stopSpelling">From: jay.krell@cornell.edu<br>To: m3devel@elegosoft.com<br>Subject: Target.Structure_size_boundary?<br>Date: Fri, 14 Aug 2015 20:43:18 +0000<br><br>

<style><!--
.ExternalClass .ecxhmmessage P {
padding:0px;
}

.ExternalClass body.ecxhmmessage {
font-size:12pt;
font-family:Calibri;
}

--></style>
<div dir="ltr"><span style="font-size:12pt;">air:src jay$ grep -i boundary *</span><br><div><span style="font-size:12pt;">Target.i3:    boundary (i.e. (size + align - 1) DIV align * align).</span></div><div>Target.i3:  Structure_size_boundary: CARDINAL;</div><div>Target.i3-old:    boundary (i.e. (size + align - 1) DIV align * align).</div><div>Target.i3-old:  Structure_size_boundary: CARDINAL;</div><div>Target.m3:    Structure_size_boundary   := 8;</div><div>Target.m3:        Structure_size_boundary := 16;</div><div>Target.m3-old:    Structure_size_boundary   := 8;</div><div>Target.m3-old:                 Structure_size_boundary   := 16;</div><div>Target.m3-old:                 Structure_size_boundary   := 32;</div><div>Target.m3-old:                 Structure_size_boundary   := 16;</div><div>Target.m3-old:                 Structure_size_boundary   := 16;</div><div>Target.m3-old:                 Structure_size_boundary   := 16;</div><div>Target.m3-old:                 Structure_size_boundary   := 16;</div><div>Target.m3-old:                 Structure_size_boundary   := 32;</div><div>Target.m3-old:                 Structure_size_boundary   := 16;</div><div>Target.m3-old:                 Structure_size_boundary   := 32;</div><div>Target.m3-old:                 Structure_size_boundary   := 16;</div><div>TargetT.i3:  structure_size_boundary: CARDINAL;</div><div><br></div><div><br></div><div>Surely we can just consider this 8 and remove all of it uses?</div><div><br></div><div>Are all those old >8 uses even correct?</div><div><br></div><div> sizeof(struct {char a;}) really isn't always 1? </div><div><div> sizeof(struct {char a[3];}) really isn't always 3? </div></div><div><br></div><div><br></div><div>Actually we can verify this easily enough with a cross gcc w/o cross driver/linker/assembler/headers/libraries.</div><div>I'll do that later.</div><div><br></div><div><br></div><div>Plus, we can have the C code statically verify struct sizes agree</div><div><span style="font-size:12pt;">between front end backend, as long as they get encoded anywhere by frontend.</span></div><div><br></div><div><br></div><div>You know, I want to limit Target.m3 to endian and word size. Even those I wish I could remove.</div><div><br></div><div><br></div><div>Thanks,</div><div> - Jay</div>                                        </div></div>                                        </div></body>
</html>