From b4c61dc9000e402e5174c35c97cfffd06c23e875 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Mon, 18 May 1998 20:21:22 +0000 Subject: From Jason Merrill : * ldlang.c (wild_sort): Correct order of sort. * scripttempl/elf.sc: Put *crtbegin.o before other .ctors and .dtors. * scripttempl/elfd10v.sc: Likewise. start-sanitize-d30v * scripttempl/elfd30v.sc: Likewise. end-sanitize-d30v * scripttempl/elfppc.sc: Likewise. --- ld/scripttempl/elfppc.sc | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'ld/scripttempl') diff --git a/ld/scripttempl/elfppc.sc b/ld/scripttempl/elfppc.sc index 5671d56..61ef133 100644 --- a/ld/scripttempl/elfppc.sc +++ b/ld/scripttempl/elfppc.sc @@ -129,11 +129,26 @@ SECTIONS .got2 ${RELOCATING-0} : { *(.got2) } ${RELOCATING+PROVIDE (__CTOR_LIST__ = .);} - .ctors ${RELOCATING-0} : { *(SORT(.ctors.*)) *(.ctors) } + .ctors ${RELOCATING-0} : { + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + *crtbegin.o(.ctors) + *(SORT(.ctors.*)) + *(.ctors) } ${RELOCATING+PROVIDE (__CTOR_END__ = .);} ${RELOCATING+PROVIDE (__DTOR_LIST__ = .);} - .dtors ${RELOCATING-0} : { *(SORT(.dtors.*)) *(.dtors) } + .dtors ${RELOCATING-0} : { + *crtbegin.o(.dtors) + *(SORT(.dtors.*)) + *(.dtors) } ${RELOCATING+PROVIDE (__DTOR_END__ = .);} ${RELOCATING+PROVIDE (_FIXUP_START_ = .);} -- cgit v1.1