Browse Source
bfd/ 2010-12-15 H.J. Lu <hongjiu.lu@intel.com> * elf.c (_bfd_elf_new_section_hook): Special handling for .init_array/.fini_array output sections. ld/ 2010-12-15 H.J. Lu <hongjiu.lu@intel.com> * Makefile.am (GENSCRIPTS): Add @enable_initfini_array@. * NEWS: Mention SORT_BY_INIT_PRIORITY. * configure.in: Add AC_CANONICAL_BUILD. Add --enable-initfini-array. * genscripts.sh (ENABLE_INITFINI_ARRAY): New. * ld.h (sort_type): Add by_init_priority. * ld.texinfo: Document SORT_BY_INIT_PRIORITY. * ldgram.y (SORT_BY_INIT_PRIORITY): New. (wildcard_spec): Handle SORT_BY_INIT_PRIORITY. * ldlang.c (get_init_priority): New. (compare_section): Use get_init_priority for by_init_priority. * ldlex.l (SORT_BY_INIT_PRIORITY): New. * scripttempl/elf.sc: Support ENABLE_INITFINI_ARRAY. * Makefile.in: Regenerated. * aclocal.m4: Regenerated. * config.in: Likewise. * configure: Likewise. ld/testsuite/ 2010-12-15 H.J. Lu <hongjiu.lu@intel.com> * ld-elf/elf.exp (array_tests): Add init-mixed. (array_tests_static): Likewise. Also delete tmpdir/init-mixed. * ld-elf/init-mixed.c: New. * ld-elf/init-mixed.out: Likewise.gdb_7_3-branch
20 changed files with 334 additions and 14 deletions
@ -0,0 +1,98 @@ |
|||
#include <stdio.h> |
|||
#include <stdlib.h> |
|||
|
|||
#include "config.h" |
|||
|
|||
#ifdef HAVE_INITFINI_ARRAY |
|||
static int count; |
|||
|
|||
static void |
|||
init1005 () |
|||
{ |
|||
if (count != 0) |
|||
abort (); |
|||
count = 1005; |
|||
} |
|||
void (*const init_array1005[]) () |
|||
__attribute__ ((section (".init_array.01005"), aligned (sizeof (void *)))) |
|||
= { init1005 }; |
|||
static void |
|||
fini1005 () |
|||
{ |
|||
if (count != 1005) |
|||
abort (); |
|||
} |
|||
void (*const fini_array1005[]) () |
|||
__attribute__ ((section (".fini_array.01005"), aligned (sizeof (void *)))) |
|||
= { fini1005 }; |
|||
|
|||
static void |
|||
ctor1007 () |
|||
{ |
|||
if (count != 1005) |
|||
abort (); |
|||
count = 1007; |
|||
} |
|||
void (*const ctors1007[]) () |
|||
__attribute__ ((section (".ctors.64528"), aligned (sizeof (void *)))) |
|||
= { ctor1007 }; |
|||
static void |
|||
dtor1007 () |
|||
{ |
|||
if (count != 1007) |
|||
abort (); |
|||
count = 1005; |
|||
} |
|||
void (*const dtors1007[]) () |
|||
__attribute__ ((section (".dtors.64528"), aligned (sizeof (void *)))) |
|||
= { dtor1007 }; |
|||
|
|||
static void |
|||
init65530 () |
|||
{ |
|||
if (count != 1007) |
|||
abort (); |
|||
count = 65530; |
|||
} |
|||
void (*const init_array65530[]) () |
|||
__attribute__ ((section (".init_array.65530"), aligned (sizeof (void *)))) |
|||
= { init65530 }; |
|||
static void |
|||
fini65530 () |
|||
{ |
|||
if (count != 65530) |
|||
abort (); |
|||
count = 1007; |
|||
} |
|||
void (*const fini_array65530[]) () |
|||
__attribute__ ((section (".fini_array.65530"), aligned (sizeof (void *)))) |
|||
= { fini65530 }; |
|||
|
|||
static void |
|||
ctor65535 () |
|||
{ |
|||
if (count != 65530) |
|||
abort (); |
|||
count = 65535; |
|||
} |
|||
void (*const ctors65535[]) () |
|||
__attribute__ ((section (".ctors"), aligned (sizeof (void *)))) |
|||
= { ctor65535 }; |
|||
static void |
|||
dtor65535 () |
|||
{ |
|||
if (count != 65535) |
|||
abort (); |
|||
count = 65530; |
|||
} |
|||
void (*const dtors65535[]) () |
|||
__attribute__ ((section (".dtors"), aligned (sizeof (void *)))) |
|||
= { dtor65535 }; |
|||
#endif |
|||
|
|||
int |
|||
main () |
|||
{ |
|||
printf ("OK\n"); |
|||
return 0; |
|||
} |
|||
@ -0,0 +1 @@ |
|||
OK |
|||
Loading…
Reference in new issue