Bug 46125 - -mcmodel=large doesn't work
Summary: -mcmodel=large doesn't work
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: other (show other bugs)
Version: 4.5.1
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords: link-failure
Depends on:
Blocks:
 
Reported: 2010-10-22 01:53 UTC by Wei Li
Modified: 2012-06-21 15:27 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Wei Li 2010-10-22 01:53:23 UTC
Hi,

I am working on huge object files and I am glad to see that gcc
supports -mcmodel=large now. However, my experiment even doesn't work
because of relocation problem in crtbeginS.o

My Source file: t.c
#include <stdio.h>
extern int foo(int argc, char **argv);
void *pv1[1024]={(void*)foo,};
char aaaaa[2147483658] = {1, 2 };
char bbbbb[2147483658] = {2, 3 };
void *pv2[1024]={(void*)foo,};

int foo(int argc, char **argv)
{
    printf("%d", aaaaa[2147483657]);
    printf("%d", bbbbb[2147483657]);
    return 0;
}

Command line:
gcc -mcmodel=large -fPIC -shared t.c -o t.so

Error:
/gcc4.5.1/lib/gcc/x86_64-unknown-linux-gnu/4.5.1/crtbeginS.o: In
function `__do_global_dtors_aux':
crtstuff.c:(.text+0x3): relocation truncated to fit: R_X86_64_PC32
against `.bss'
crtstuff.c:(.text+0x37): relocation truncated to fit: R_X86_64_PC32
against `.bss'
crtstuff.c:(.text+0x57): relocation truncated to fit: R_X86_64_PC32
against `.bss'
crtstuff.c:(.text+0x62): relocation truncated to fit: R_X86_64_PC32
against `.bss'
crtstuff.c:(.text+0x6d): relocation truncated to fit: R_X86_64_PC32
against `.bss'

Could someone help me figure out the problem? I am using RH5 64bit. My gcc is compiled with all default configuration. 

Thanks,
Wei
Comment 1 Andrew Pinski 2010-10-27 20:37:54 UTC
As mentioned in the thread to the list you need to compile crtstuff.c with -mcmodel=large also.
Comment 2 Wei Li 2010-10-28 06:22:59 UTC
Thanks a lot.

I recompiled crtstuff.c with -mcmodel=large and the issue is solved.
Comment 3 Adrian Smith 2012-06-21 15:27:49 UTC
"As mentioned in the thread to the list you need to compile crtstuff.c with
-mcmodel=large also."

Can someone add a link to the thread? I have googled for it but this bug report keeps on coming up. I am not too familiar with gcc development so don't know which list is being talked about.

I too have a program which requires > 2GB of compiled code on x86-64 and get the errors from "crtstuff.c". But where is it, how do I recompile it?