This is the mail archive of the crossgcc@sources.redhat.com mailing list for the crossgcc project.
See the CrossGCC FAQ for lots more information.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Hi,
I am writing my own linker script to use instead of the one used by gcc. I am getting the following error when I compile a simple c file
/nfs/test/vsankara/gnuprosrc/gnupro-2.2/lib/gcc-lib/xscale-coff/3.1-xscale-021022/be/libgcc.a(__main.o): In function `__do_global_ctors':
/nfs/test/vsankara/gnuprosrc/build/gcc/../../src/gcc/libgcc2.c(.text+0xfc): undefined reference to `___CTOR_LIST__'
/nfs/test/vsankara/gnuprosrc/gnupro-2.2/lib/gcc-lib/xscale-coff/3.1-xscale-021022/be/libgcc.a(__main.o): In function `__do_global_dtors':
/nfs/test/vsankara/gnuprosrc/build/gcc/../../src/gcc/libgcc2.c(.data+0x0): undefined reference to `___DTOR_LIST__'
collect2: ld returned 1 exit status
I have used __CTOR_LIST__ and __DTOR_LIST__ in my linker script.
Here is my linker script.
ENTRY(_start)
OUTPUT_FORMAT("coff-arm-big","coff-arm-big","coff-arm-little")
SEARCH_DIR(/nfs/iadusr02/vsankara/board)
STARTUP(board-crt0.o)
SECTIONS
{
.boot 0x0 :
{
*(.boot)
}
.text 0x10000000 :
{
*(.text)
__CTOR_LIST__ = .;
LONG(-1) /* Linker script does not like LONG((__CTOR_END__ - __CTOR_LIST)/4 - 2) */
*(.ctors)
LONG(0)
__CTOR_END__ = .;
__DTOR_LIST__ = .;
LONG(-1) /* same as above */
*(.dtors)
LONG(0)
__DTOR_END__ = .;
_etext = .;
etext = .;
}
.data :
{
__data_start__ = . ;
*(.data*)
*(.gcc_exc*)
___EH_FRAME_BEGIN__ = . ;
*(.eh_fram*)
___EH_FRAME_END__ = . ;
LONG(0);
__data_end__ = . ;
edata = .;
_edata = .;
}
.bss SIZEOF(.data) + ADDR(.data) :
{
__bss_start__ = . ;
__stack_start__ = .;
azusa-crt0.o(.bss)
__stack_end__ = .;
*(.bss)
*(COMMON)
__bss_end__ = . ;
}
end = .;
_end = .;
__end__ = .;
.stab 0 (NOLOAD) :
{
[ .stab ]
}
.stabstr 0 (NOLOAD) :
{
[ .stabstr ]
}
}
__stack_size__ = __stack_end__ - __stack_start__;
__code_size__ = SIZEOF(.text);
__RAMSIZE__ = 0x800000;
__RAM_END_ADDR__ = ADDR(.text) + __RAMSIZE__ - 1;
I have used __CTOR_LIST__ and __DTOR_LIST__ above but it seems that __main.o is not able to see it. I tried declaring the two symbols EXTERN but still it does not work.
Also when I use the expession LONG((__CTOR_END__ - __CTOR_LIST__)/4 - 2), it looks that the parser does not like this. It keeps giving me errors as I have commented above.
Also what is .eh_frame for, I just put it in there because other linker scripts I have seen had it.
I would really appreciate it if you could answer my questions.
Thanks
Vish
------
Want more information? See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/
Want to unsubscribe? Send a note to crossgcc-unsubscribe@sources.redhat.com
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |