This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Gold] Question about the incorrect variable alignment if the alignment is greater than the page size


Hi,

I'm trying to compile and link (with Gold) the code for elf_i386,
which looks something like that:

__attribute__((aligned(8192))) int 8k_aligned_var;

int main()
{
  if( ( (((int)&8k_aligned_var) & 8191) == 0) {
       printf("passed\n");
    }
  else {
       printf("failed\n");
       return 1;
    }
    return 0;
}

And gold does not align "8k_aligned_var" correctly:

++ readelf -a test_gold.exe
++ grep 8k_aligned_var
    31: 0804d000     4 OBJECT  GLOBAL DEFAULT   19 8k_aligned_var

However, if we increase the page size using "-z max-page-size=0x4000"
then the test works:

++ readelf -a test_gold.exe
++ grep 8k_aligned_var
    31: 08052000     4 OBJECT  GLOBAL DEFAULT   19 8k_aligned_var

Also please note that the test works for bfd:

++ readelf -a test_bfd.exe
++ grep 8k_aligned_var
    34: 0804c000     4 OBJECT  GLOBAL DEFAULT   17 8k_aligned_var

Was that behavior made intentionally or it's just a bug?
I know that it's a pretty big alignment and that could be suspicious,
but we can at least warn the user that his code won't be linked the
way it was written.


thanks,
Alexander


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]