mirror of
https://github.com/sheumann/hush.git
synced 2024-12-21 23:29:34 +00:00
add info about gcc's sadistic alignment - and how to disable it
This commit is contained in:
parent
afa37cf508
commit
b8e72fdde1
@ -178,5 +178,29 @@ struct {
|
||||
char vc31[31] = { 1 }; // unaligned
|
||||
char vc32[32] = { 1 }; // aligned to 32 bytes
|
||||
|
||||
-fpack-struct=1 reduces alignment of s28 to 1 (but probably will break layout
|
||||
of many libc structs) but s32 and vc32 are still aligned to 32 bytes.
|
||||
-fpack-struct=1 reduces alignment of s28 to 1 (but probably
|
||||
will break layout of many libc structs) but s32 and vc32
|
||||
are still aligned to 32 bytes.
|
||||
|
||||
I will try to cook up a patch to add a gcc option for disabling it.
|
||||
Meanwhile, this is where it can be disabled in gcc source:
|
||||
|
||||
gcc/config/i386/i386.c
|
||||
int
|
||||
ix86_data_alignment (tree type, int align)
|
||||
{
|
||||
#if 0
|
||||
if (AGGREGATE_TYPE_P (type)
|
||||
&& TYPE_SIZE (type)
|
||||
&& TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
|
||||
&& (TREE_INT_CST_LOW (TYPE_SIZE (type)) >= 256
|
||||
|| TREE_INT_CST_HIGH (TYPE_SIZE (type))) && align < 256)
|
||||
return 256;
|
||||
#endif
|
||||
|
||||
Result (non-static busybox built against glibc):
|
||||
|
||||
# size /usr/srcdevel/bbox/fix/busybox.t0/busybox busybox
|
||||
text data bss dec hex filename
|
||||
634416 2736 23856 661008 a1610 busybox
|
||||
632580 2672 22944 658196 a0b14 busybox_noalign
|
||||
|
Loading…
Reference in New Issue
Block a user