Hello, > Hey, Jing, you broke the google/gcc-4_6 branch by checking the new > header file into the wrong directory. > > Fixed via r184386. >
google/gcc-4_6_2-mobile branch still has the same problem. Could please someone fix it? Thanks Ilya > Ollie > > On Fri, Feb 17, 2012 at 10:25 PM, Jing Yu <jin...@google.com> wrote: >> >> OK. Thanks for porting the patch. >> I will commit the patch into google/gcc-4_6_2-mobile for you. >> >> I would also like to commit it into google/gcc-4_6 branch if all tests >> pass. This patch is almost the same as Google Ref 47894. >> >> Thanks, >> Jing >> >> On Fri, Feb 17, 2012 at 5:20 PM, H.J. Lu <hongjiu...@intel.com> wrote: >> > Hi, >> > >> > This patch backports the fix from trunk: >> > >> > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46770 >> > >> > for google/gcc-4_6_2-mobile branch. This is needed to support C++ >> > global constructors/destructiors on Android/x86. OK for >> > google/gcc-4_6_2-mobile branch? >> > >> > Thanks. >> > >> > H.J. >> > --- >> > 2011-08-20 H.J. Lu <hongjiu...@intel.com> >> > >> > PR other/46770 >> > * config.gcc (tm_file): Add initfini-array.h if >> > .init_arrary/.fini_array are supported. >> > >> > * crtstuff.c: Don't generate .ctors nor .dtors sections if >> > USE_INITFINI_ARRAY is defined. >> > >> > * output.h (default_elf_init_array_asm_out_constructor): New. >> > (default_elf_fini_array_asm_out_destructor): Likewise. >> > * varasm.c (elf_init_array_section): Likewise. >> > (elf_fini_array_section): Likewise. >> > (get_elf_initfini_array_priority_section): Likewise. >> > (default_elf_init_array_asm_out_constructor): Likewise. >> > (default_elf_fini_array_asm_out_destructor): Likewise. >> > >> > * config/initfini-array.h: New. >> > >> > git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@177933 >> > 138bc75d-0d04-0410-961f-82ee72b054a4 >> > >> > Conflicts: >> > >> > gcc/ChangeLog >> > --- >> > gcc/ChangeLog.hjl | 21 +++++++++++++++ >> > gcc/config.gcc | 5 +++ >> > gcc/config/initfini-array.h | 37 +++++++++++++++++++++++++++ >> > gcc/crtstuff.c | 11 +++++++- >> > gcc/output.h | 2 + >> > gcc/varasm.c | 58 >> > +++++++++++++++++++++++++++++++++++++++++++ >> > 6 files changed, 133 insertions(+), 1 deletions(-) >> > create mode 100644 gcc/ChangeLog.hjl >> > create mode 100644 gcc/config/initfini-array.h >> > >> > diff --git a/gcc/ChangeLog.hjl b/gcc/ChangeLog.hjl >> > new file mode 100644 >> > index 0000000..3527b27 >> > --- /dev/null >> > +++ b/gcc/ChangeLog.hjl >> > @@ -0,0 +1,21 @@ >> > +2011-12-07 H.J. Lu <hongjiu...@intel.com> >> > + >> > + Backport from mainline >> > + 2011-08-20 H.J. Lu <hongjiu...@intel.com> >> > + >> > + PR other/46770 >> > + * config.gcc (tm_file): Add initfini-array.h if >> > + .init_arrary/.fini_array are supported. >> > + >> > + * crtstuff.c: Don't generate .ctors nor .dtors sections if >> > + USE_INITFINI_ARRAY is defined. >> > + >> > + * output.h (default_elf_init_array_asm_out_constructor): New. >> > + (default_elf_fini_array_asm_out_destructor): Likewise. >> > + * varasm.c (elf_init_array_section): Likewise. >> > + (elf_fini_array_section): Likewise. >> > + (get_elf_initfini_array_priority_section): Likewise. >> > + (default_elf_init_array_asm_out_constructor): Likewise. >> > + (default_elf_fini_array_asm_out_destructor): Likewise. >> > + >> > + * config/initfini-array.h: New. >> > diff --git a/gcc/config.gcc b/gcc/config.gcc >> > index d9ac0fa..b386424 100644 >> > --- a/gcc/config.gcc >> > +++ b/gcc/config.gcc >> > @@ -3176,6 +3176,11 @@ if test x$with_schedule = x; then >> > esac >> > fi >> > >> > +# Support --enable-initfini-array. >> > +if test x$enable_initfini_array = xyes; then >> > + tm_file="${tm_file} initfini-array.h" >> > +fi >> > + >> > # Validate and mark as valid any --with options supported >> > # by this target. In order to use a particular --with option >> > # you must list it in supported_defaults; validating the value >> > diff --git a/gcc/config/initfini-array.h b/gcc/config/initfini-array.h >> > new file mode 100644 >> > index 0000000..8aaadf6 >> > --- /dev/null >> > +++ b/gcc/config/initfini-array.h >> > @@ -0,0 +1,37 @@ >> > +/* Definitions for ELF systems with .init_array/.fini_array section >> > + support. >> > + Copyright (C) 2011 >> > + Free Software Foundation, Inc. >> > + >> > + This file is part of GCC. >> > + >> > + GCC is free software; you can redistribute it and/or modify it >> > + under the terms of the GNU General Public License as published >> > + by the Free Software Foundation; either version 3, or (at your >> > + option) any later version. >> > + >> > + GCC is distributed in the hope that it will be useful, but WITHOUT >> > + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY >> > + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public >> > + License for more details. >> > + >> > + You should have received a copy of the GNU General Public License >> > + along with GCC; see the file COPYING3. If not see >> > + <http://www.gnu.org/licenses/>. */ >> > + >> > +#define USE_INITFINI_ARRAY >> > + >> > +#undef INIT_SECTION_ASM_OP >> > +#undef FINI_SECTION_ASM_OP >> > + >> > +#undef INIT_ARRAY_SECTION_ASM_OP >> > +#define INIT_ARRAY_SECTION_ASM_OP >> > + >> > +#undef FINI_ARRAY_SECTION_ASM_OP >> > +#define FINI_ARRAY_SECTION_ASM_OP >> > + >> > +/* Use .init_array/.fini_array section for constructors and destructors. >> > */ >> > +#undef TARGET_ASM_CONSTRUCTOR >> > +#define TARGET_ASM_CONSTRUCTOR default_elf_init_array_asm_out_constructor >> > +#undef TARGET_ASM_DESTRUCTOR >> > +#define TARGET_ASM_DESTRUCTOR default_elf_fini_array_asm_out_destructor >> > diff --git a/gcc/crtstuff.c b/gcc/crtstuff.c >> > index b65f490..010d472 100644 >> > --- a/gcc/crtstuff.c >> > +++ b/gcc/crtstuff.c >> > @@ -1,7 +1,8 @@ >> > /* Specialized bits of code needed to support construction and >> > destruction of file-scope objects in C++ code. >> > Copyright (C) 1991, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 >> > - 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010 Free Software >> > Foundation, Inc. >> > + 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011 >> > + Free Software Foundation, Inc. >> > Contributed by Ron Guilmette (r...@monkeys.com). >> > >> > This file is part of GCC. >> > @@ -189,6 +190,9 @@ typedef void (*func_ptr) (void); >> > refer to only the __CTOR_END__ symbol in crtend.o and the __DTOR_LIST__ >> > symbol in crtbegin.o, where they are defined. */ >> > >> > +/* No need for .ctors/.dtors section if linker can place them in >> > + .init_array/.fini_array section. */ >> > +#ifndef USE_INITFINI_ARRAY >> > /* The -1 is a flag to __do_global_[cd]tors indicating that this table >> > does not start with a count of elements. */ >> > #ifdef CTOR_LIST_BEGIN >> > @@ -219,6 +223,7 @@ STATIC func_ptr __DTOR_LIST__[1] >> > __attribute__((section(".dtors"), aligned(sizeof(func_ptr)))) >> > = { (func_ptr) (-1) }; >> > #endif /* __DTOR_LIST__ alternatives */ >> > +#endif /* USE_INITFINI_ARRAY */ >> > >> > #ifdef USE_EH_FRAME_REGISTRY >> > /* Stick a label at the beginning of the frame unwind info so we can >> > register >> > @@ -489,6 +494,9 @@ __do_global_ctors_1(void) >> > >> > #elif defined(CRT_END) /* ! CRT_BEGIN */ >> > >> > +/* No need for .ctors/.dtors section if linker can place them in >> > + .init_array/.fini_array section. */ >> > +#ifndef USE_INITFINI_ARRAY >> > /* Put a word containing zero at the end of each of our two lists of >> > function >> > addresses. Note that the words defined here go into the .ctors and >> > .dtors >> > sections of the crtend.o file, and since that file is always linked in >> > @@ -534,6 +542,7 @@ STATIC func_ptr __DTOR_END__[1] >> > __attribute__((used, section(".dtors"), aligned(sizeof(func_ptr)))) >> > = { (func_ptr) 0 }; >> > #endif >> > +#endif /* USE_INITFINI_ARRAY */ >> > >> > #ifdef EH_FRAME_SECTION_NAME >> > /* Terminate the frame unwind info section with a 4byte 0 as a sentinel; >> > diff --git a/gcc/output.h b/gcc/output.h >> > index 7031b08..661b623 100644 >> > --- a/gcc/output.h >> > +++ b/gcc/output.h >> > @@ -655,6 +655,8 @@ extern void file_end_indicate_split_stack (void); >> > >> > extern void default_elf_asm_output_external (FILE *file, tree, >> > const char *); >> > +extern void default_elf_init_array_asm_out_constructor (rtx, int); >> > +extern void default_elf_fini_array_asm_out_destructor (rtx, int); >> > extern int maybe_assemble_visibility (tree); >> > >> > extern int default_address_cost (rtx, bool); >> > diff --git a/gcc/varasm.c b/gcc/varasm.c >> > index 40a8567..d15c278 100644 >> > --- a/gcc/varasm.c >> > +++ b/gcc/varasm.c >> > @@ -7397,4 +7397,62 @@ make_debug_expr_from_rtl (const_rtx exp) >> > return dval; >> > } >> > >> > +static GTY(()) section *elf_init_array_section; >> > +static GTY(()) section *elf_fini_array_section; >> > + >> > +static section * >> > +get_elf_initfini_array_priority_section (int priority, >> > + bool constructor_p) >> > +{ >> > + section *sec; >> > + if (priority != DEFAULT_INIT_PRIORITY) >> > + { >> > + char buf[18]; >> > + sprintf (buf, "%s.%.5u", >> > + constructor_p ? ".init_array" : ".fini_array", >> > + priority); >> > + sec = get_section (buf, SECTION_WRITE, NULL_TREE); >> > + } >> > + else >> > + { >> > + if (constructor_p) >> > + { >> > + if (elf_init_array_section == NULL) >> > + elf_init_array_section >> > + = get_unnamed_section (0, output_section_asm_op, >> > + "\t.section\t.init_array"); >> > + sec = elf_init_array_section; >> > + } >> > + else >> > + { >> > + if (elf_fini_array_section == NULL) >> > + elf_fini_array_section >> > + = get_unnamed_section (0, output_section_asm_op, >> > + "\t.section\t.fini_array"); >> > + sec = elf_fini_array_section; >> > + } >> > + } >> > + return sec; >> > +} >> > + >> > +/* Use .init_array section for constructors. */ >> > + >> > +void >> > +default_elf_init_array_asm_out_constructor (rtx symbol, int priority) >> > +{ >> > + section *sec = get_elf_initfini_array_priority_section (priority, >> > + true); >> > + assemble_addr_to_section (symbol, sec); >> > +} >> > + >> > +/* Use .fini_array section for destructors. */ >> > + >> > +void >> > +default_elf_fini_array_asm_out_destructor (rtx symbol, int priority) >> > +{ >> > + section *sec = get_elf_initfini_array_priority_section (priority, >> > + false); >> > + assemble_addr_to_section (symbol, sec); >> > +} >> > + >> > #include "gt-varasm.h" >> > -- >> > 1.7.6.5 >> >