Sorry -- I will fix it in google/gcc-4_6_2-mobile. Thanks, Jing
On Mon, Feb 20, 2012 at 7:15 AM, Ilya Enkovich <enkovich....@gmail.com> wrote: > 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 >>> >