Makefile.in (CRTSTUFF_CFLAGS): New.
* Makefile.in (CRTSTUFF_CFLAGS): New. (crtbegin.o, crtend.o, crtbeginS.o, crtendS.o, crtbeginT.o): Use it. * config.gcc (alpha-linux, alpha-freebsd, alpha-netbsd): Use plain crtstuff.c instead of alpha assembly version. * crtstuff.c (CRT_CALL_STATIC_FUNCTION): Rewrite to assume the entire dummy function sequence. Use FORCE_CODE_SECTION_ALIGN not FORCE_{INIT,FINI}_SECTION_ALIGN. (__do_global_dtors_aux): Mark used. (frame_dummy, __do_global_ctors_aux): Mark used. (fini_dummy, init_dummy): Remove. * config/alpha/crtbegin.asm: Remove file. * config/alpha/crtend.asm: Remove file. * config/alpha/t-crtbe: Remove file. * config/alpha/elf.h (CRT_CALL_STATIC_FUNCTION): New. (LINK_EH_SPEC): New. * config/cris/cris.h (CRT_CALL_STATIC_FUNCTION): Rewrite old FORCE_INIT_SECTION_ALIGN hack. Register __fini_start before calling constructors. * config/cris/linux.h (CRT_CALL_STATIC_FUNCTION): Undef. * config/i386/i386.h (CRT_CALL_STATIC_FUNCTION): New. * config/i386/linux.h (CRT_CALL_STATIC_FUNCTION): Replace old CRT_END_INIT_DUMMY hack. * config/i386/sol2.h (FORCE_CODE_SECTION_ALIGN): Replace FORCE_{INIT,FINI}_SECTION_ALIGN. * config/mcore/mcore-elf.h (FORCE_CODE_SECTION_ALIGN): Replace FORCE_{INIT,FINI}_SECTION_ALIGN. * config/s390/s390.h (CRT_CALL_STATIC_FUNCTION): Update for new invocation sequence. * config/sh/sh.h (CRT_CALL_STATIC_FUNCTION): Likewise. * doc/tm.texi (CRT_CALL_STATIC_FUNCTION): Update. (FORCE_CODE_SECTION_ALIGN): New. From-SVN: r49261
This commit is contained in:
parent
1f9131b7db
commit
cea3bd3e5a
|
@ -1,3 +1,43 @@
|
|||
2002-01-26 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* Makefile.in (CRTSTUFF_CFLAGS): New.
|
||||
(crtbegin.o, crtend.o, crtbeginS.o, crtendS.o, crtbeginT.o): Use it.
|
||||
* config.gcc (alpha-linux, alpha-freebsd, alpha-netbsd): Use plain
|
||||
crtstuff.c instead of alpha assembly version.
|
||||
* crtstuff.c (CRT_CALL_STATIC_FUNCTION): Rewrite to assume the
|
||||
entire dummy function sequence. Use FORCE_CODE_SECTION_ALIGN
|
||||
not FORCE_{INIT,FINI}_SECTION_ALIGN.
|
||||
(__do_global_dtors_aux): Mark used.
|
||||
(frame_dummy, __do_global_ctors_aux): Mark used.
|
||||
(fini_dummy, init_dummy): Remove.
|
||||
|
||||
* config/alpha/crtbegin.asm: Remove file.
|
||||
* config/alpha/crtend.asm: Remove file.
|
||||
* config/alpha/t-crtbe: Remove file.
|
||||
* config/alpha/elf.h (CRT_CALL_STATIC_FUNCTION): New.
|
||||
(LINK_EH_SPEC): New.
|
||||
|
||||
* config/cris/cris.h (CRT_CALL_STATIC_FUNCTION): Rewrite old
|
||||
FORCE_INIT_SECTION_ALIGN hack. Register __fini_start before
|
||||
calling constructors.
|
||||
* config/cris/linux.h (CRT_CALL_STATIC_FUNCTION): Undef.
|
||||
|
||||
* config/i386/i386.h (CRT_CALL_STATIC_FUNCTION): New.
|
||||
* config/i386/linux.h (CRT_CALL_STATIC_FUNCTION): Replace old
|
||||
CRT_END_INIT_DUMMY hack.
|
||||
* config/i386/sol2.h (FORCE_CODE_SECTION_ALIGN): Replace
|
||||
FORCE_{INIT,FINI}_SECTION_ALIGN.
|
||||
|
||||
* config/mcore/mcore-elf.h (FORCE_CODE_SECTION_ALIGN): Replace
|
||||
FORCE_{INIT,FINI}_SECTION_ALIGN.
|
||||
|
||||
* config/s390/s390.h (CRT_CALL_STATIC_FUNCTION): Update for new
|
||||
invocation sequence.
|
||||
* config/sh/sh.h (CRT_CALL_STATIC_FUNCTION): Likewise.
|
||||
|
||||
* doc/tm.texi (CRT_CALL_STATIC_FUNCTION): Update.
|
||||
(FORCE_CODE_SECTION_ALIGN): New.
|
||||
|
||||
2002-01-26 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* config/cris/cris.c (cris_print_operand): Handle 64-bit CONST_INT.
|
||||
|
|
|
@ -370,6 +370,10 @@ LIBGCC2_INCLUDES =
|
|||
# Additional target-dependent options for compiling libgcc2.a.
|
||||
TARGET_LIBGCC2_CFLAGS =
|
||||
|
||||
# Options to use when compiling crtbegin/end.
|
||||
CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
|
||||
-finhibit-size-directive -fno-inline-functions -fno-exceptions
|
||||
|
||||
# Additional sources to handle exceptions; overridden on ia64.
|
||||
LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \
|
||||
$(srcdir)/unwind-sjlj.c
|
||||
|
@ -1067,42 +1071,34 @@ stmp-multilib: $(LIBGCC_DEPS)
|
|||
# constructors.
|
||||
$(T)crtbegin.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
|
||||
gbl-ctors.h stmp-int-hdrs tsystem.h
|
||||
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
|
||||
-finhibit-size-directive -fno-inline-functions \
|
||||
-fno-exceptions $(CRTSTUFF_T_CFLAGS) @inhibit_libc@ \
|
||||
-c $(srcdir)/crtstuff.c -DCRT_BEGIN -o $(T)crtbegin$(objext)
|
||||
$(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS) \
|
||||
@inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_BEGIN \
|
||||
-o $(T)crtbegin$(objext)
|
||||
|
||||
$(T)crtend.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
|
||||
gbl-ctors.h stmp-int-hdrs tsystem.h
|
||||
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
|
||||
-finhibit-size-directive -fno-inline-functions \
|
||||
-fno-exceptions $(CRTSTUFF_T_CFLAGS) @inhibit_libc@ \
|
||||
-c $(srcdir)/crtstuff.c -DCRT_END -o $(T)crtend$(objext)
|
||||
$(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS) \
|
||||
@inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_END \
|
||||
-o $(T)crtend$(objext)
|
||||
|
||||
# These are versions of crtbegin and crtend for shared libraries.
|
||||
$(T)crtbeginS.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
|
||||
gbl-ctors.h stmp-int-hdrs tsystem.h
|
||||
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
|
||||
-finhibit-size-directive -fno-inline-functions \
|
||||
-fno-exceptions $(CRTSTUFF_T_CFLAGS_S) @inhibit_libc@ \
|
||||
-c $(srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFS_O \
|
||||
$(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS_S) \
|
||||
@inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFS_O \
|
||||
-o $(T)crtbeginS$(objext)
|
||||
|
||||
$(T)crtendS.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
|
||||
gbl-ctors.h stmp-int-hdrs tsystem.h
|
||||
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
|
||||
-finhibit-size-directive -fno-inline-functions \
|
||||
-fno-exceptions $(CRTSTUFF_T_CFLAGS_S) @inhibit_libc@ \
|
||||
-c $(srcdir)/crtstuff.c -DCRT_END -DCRTSTUFFS_O \
|
||||
$(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS_S) \
|
||||
@inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_END -DCRTSTUFFS_O \
|
||||
-o $(T)crtendS$(objext)
|
||||
|
||||
# This is a version of crtbegin for -static links.
|
||||
$(T)crtbeginT.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
|
||||
gbl-ctors.h stmp-int-hdrs tsystem.h
|
||||
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
|
||||
-finhibit-size-directive -fno-inline-functions \
|
||||
-fno-exceptions $(CRTSTUFF_T_CFLAGS) @inhibit_libc@ \
|
||||
-c $(srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFT_O \
|
||||
$(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS) \
|
||||
@inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFT_O \
|
||||
-o $(T)crtbeginT$(objext)
|
||||
|
||||
# Compile the start modules crt0.o and mcrt0.o that are linked with
|
||||
|
|
|
@ -461,7 +461,8 @@ alpha*-*-linux*ecoff*)
|
|||
alpha*-*-linux*libc1*)
|
||||
tm_file="${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h"
|
||||
target_cpu_default="MASK_GAS"
|
||||
tmake_file="t-slibgcc-elf-ver t-linux t-linux-gnulibc1 alpha/t-alpha alpha/t-crtbe alpha/t-crtfm alpha/t-ieee"
|
||||
tmake_file="t-slibgcc-elf-ver t-linux t-linux-gnulibc1 alpha/t-alpha alpha/t-crtfm alpha/t-ieee"
|
||||
extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o"
|
||||
gas=yes gnu_ld=yes
|
||||
if test x$enable_threads = xyes; then
|
||||
thread_file='posix'
|
||||
|
@ -470,7 +471,8 @@ alpha*-*-linux*libc1*)
|
|||
alpha*-*-linux*)
|
||||
tm_file="${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h"
|
||||
target_cpu_default="MASK_GAS"
|
||||
tmake_file="t-slibgcc-elf-ver t-linux alpha/t-crtbe alpha/t-crtfm alpha/t-alpha alpha/t-ieee"
|
||||
tmake_file="t-slibgcc-elf-ver t-linux alpha/t-crtfm alpha/t-alpha alpha/t-ieee"
|
||||
extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o"
|
||||
gas=yes gnu_ld=yes
|
||||
if test x$enable_threads = xyes; then
|
||||
thread_file='posix'
|
||||
|
@ -479,12 +481,14 @@ alpha*-*-linux*)
|
|||
alpha*-*-freebsd*)
|
||||
tm_file="${tm_file} ${fbsd_tm_file} alpha/elf.h alpha/freebsd.h"
|
||||
target_cpu_default="MASK_GAS"
|
||||
tmake_file="${tmake_file} alpha/t-crtbe alpha/t-crtfm alpha/t-alpha alpha/t-ieee"
|
||||
tmake_file="${tmake_file} alpha/t-crtfm alpha/t-alpha alpha/t-ieee"
|
||||
extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o"
|
||||
;;
|
||||
alpha*-*-netbsd*)
|
||||
tm_file="${tm_file} netbsd.h alpha/elf.h netbsd-elf.h alpha/netbsd.h"
|
||||
target_cpu_default="MASK_GAS"
|
||||
tmake_file="${tmake_file} alpha/t-alpha alpha/t-crtbe alpha/t-ieee"
|
||||
tmake_file="${tmake_file} alpha/t-alpha alpha/t-ieee"
|
||||
extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o"
|
||||
;;
|
||||
|
||||
alpha*-*-openbsd*)
|
||||
|
|
|
@ -1,228 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 1996, 1998, 2000 Free Software Foundation, Inc.
|
||||
* Contributed by Richard Henderson (rth@tamu.edu)
|
||||
*
|
||||
* This file 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 2, or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* In addition to the permissions in the GNU General Public License, the
|
||||
* Free Software Foundation gives you unlimited permission to link the
|
||||
* compiled version of this file with other programs, and to distribute
|
||||
* those programs without any restriction coming from the use of this
|
||||
* file. (The General Public License restrictions do apply in other
|
||||
* respects; for example, they cover modification of the file, and
|
||||
* distribution when not linked into another program.)
|
||||
*
|
||||
* This file 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 this program; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* As a special exception, if you link this library with files
|
||||
* compiled with GCC to produce an executable, this does not cause
|
||||
* the resulting executable to be covered by the GNU General Public License.
|
||||
* This exception does not however invalidate any other reasons why
|
||||
* the executable file might be covered by the GNU General Public License.
|
||||
*/
|
||||
|
||||
#include "auto-host.h"
|
||||
|
||||
|
||||
/*
|
||||
* Heads of the constructor/destructor lists.
|
||||
*/
|
||||
|
||||
/* The __*TOR_LIST__ symbols are not global because when this file is used
|
||||
in a shared library, we do not want the symbol to fall over to the
|
||||
application's lists. */
|
||||
|
||||
.section .ctors,"aw"
|
||||
.align 3
|
||||
__CTOR_LIST__:
|
||||
.quad -1
|
||||
|
||||
.section .dtors,"aw"
|
||||
.align 3
|
||||
__DTOR_LIST__:
|
||||
.quad -1
|
||||
|
||||
.section .jcr,"aw"
|
||||
.align 3
|
||||
__JCR_LIST__:
|
||||
|
||||
.section .eh_frame,"aw"
|
||||
__EH_FRAME_BEGIN__:
|
||||
|
||||
/*
|
||||
* Fragment of the ELF _fini routine that invokes our dtor cleanup.
|
||||
*/
|
||||
|
||||
.section .fini,"ax"
|
||||
|
||||
/* Since the bits of the _fini function are spread across many
|
||||
object files, each potentially with its own GP, we must
|
||||
assume we need to load ours. Further, our .fini section
|
||||
can easily be more than 4MB away from our .text bits so we
|
||||
can't use bsr. */
|
||||
|
||||
br $29,1f
|
||||
1: ldgp $29,0($29)
|
||||
jsr $26,__do_global_dtors_aux
|
||||
|
||||
/* Must match the alignment we got from crti.o else we get
|
||||
zero-filled holes in our _fini function and then SIGILL. */
|
||||
.align 3
|
||||
|
||||
/*
|
||||
* Fragment of the ELF _init routine that sets up the frame info.
|
||||
*/
|
||||
|
||||
.section .init,"ax"
|
||||
br $29,1f
|
||||
1: ldgp $29,0($29)
|
||||
jsr $26,__do_frame_setup
|
||||
.align 3
|
||||
|
||||
/*
|
||||
* Invoke our destructors in order.
|
||||
*/
|
||||
|
||||
.section .sdata
|
||||
|
||||
/* Support recursive calls to exit. */
|
||||
.type dtor_ptr,@object
|
||||
.size dtor_ptr,4
|
||||
dtor_ptr:
|
||||
.gprel32 __DTOR_LIST__ + 8
|
||||
|
||||
/* A globally unique widget for c++ local destructors to hang off.
|
||||
|
||||
This has a unique value in every dso; in the main program its
|
||||
value is zero. The object should be protected. This means the
|
||||
instance in any dso or the main program is not used in any other
|
||||
dso. The dynamic linker takes care of this. */
|
||||
|
||||
.global __dso_handle
|
||||
.type __dso_handle,@object
|
||||
.size __dso_handle,8
|
||||
#ifdef SHARED
|
||||
.section .data
|
||||
.align 3
|
||||
__dso_handle:
|
||||
.quad __dso_handle
|
||||
#else
|
||||
.section .bss
|
||||
.align 3
|
||||
__dso_handle:
|
||||
.zero 8
|
||||
#endif
|
||||
#ifdef HAVE_GAS_HIDDEN
|
||||
.hidden __dso_handle
|
||||
#endif
|
||||
|
||||
.text
|
||||
|
||||
.align 3
|
||||
.ent __do_global_dtors_aux
|
||||
|
||||
__do_global_dtors_aux:
|
||||
ldgp $29,0($27)
|
||||
lda $30,-16($30)
|
||||
.frame $30,16,$26,0
|
||||
stq $9,8($30)
|
||||
stq $26,0($30)
|
||||
.mask 0x4000200,-16
|
||||
.prologue 1
|
||||
|
||||
#ifdef SHARED
|
||||
/* Do c++ local destructors. */
|
||||
lda $1,__cxa_finalize
|
||||
beq $1,0f
|
||||
lda $16,__dso_handle
|
||||
jsr $26,__cxa_finalize
|
||||
ldgp $29,0($26)
|
||||
#endif
|
||||
|
||||
0: lda $9,dtor_ptr
|
||||
br 2f
|
||||
1: stl $1,0($9)
|
||||
jsr $26,($27)
|
||||
ldgp $29,0($26)
|
||||
2: ldl $1,0($9)
|
||||
addq $1,$29,$2
|
||||
ldq $27,0($2)
|
||||
addl $1,8,$1
|
||||
bne $27,1b
|
||||
|
||||
/* Remove our frame info. */
|
||||
lda $1,__deregister_frame_info
|
||||
beq $1,3f
|
||||
lda $16,__EH_FRAME_BEGIN__
|
||||
jsr $26,__deregister_frame_info
|
||||
ldgp $29,0($26)
|
||||
|
||||
3: ldq $26,0($30)
|
||||
ldq $9,8($30)
|
||||
lda $30,16($30)
|
||||
ret
|
||||
|
||||
.end __do_global_dtors_aux
|
||||
|
||||
/*
|
||||
* Install our frame info; register java classes, if any.
|
||||
*/
|
||||
|
||||
.section .bss
|
||||
.type frame_object,@object
|
||||
.size frame_object, 48
|
||||
.align 3
|
||||
frame_object:
|
||||
.zero 48
|
||||
|
||||
.text
|
||||
|
||||
.align 3
|
||||
.ent __do_frame_setup
|
||||
|
||||
__do_frame_setup:
|
||||
ldgp $29,0($27)
|
||||
lda $30,-16($30)
|
||||
.frame $30,16,$26,0
|
||||
stq $26,0($30)
|
||||
.mask 0x4000000,-16
|
||||
.prologue 1
|
||||
|
||||
lda $1,__register_frame_info
|
||||
beq $1,0f
|
||||
lda $16,__EH_FRAME_BEGIN__
|
||||
lda $17,frame_object
|
||||
jsr $26,__register_frame_info
|
||||
ldgp $29,0($26)
|
||||
|
||||
0: lda $1,_Jv_RegisterClasses
|
||||
lda $16,__JCR_LIST__
|
||||
beq $1,0f
|
||||
ldq $2,8($16)
|
||||
beq $2,0f
|
||||
jsr $26,_Jv_RegisterClasses
|
||||
ldgp $29,0($26)
|
||||
|
||||
0: ldq $26,0($30)
|
||||
lda $30,16($30)
|
||||
ret
|
||||
|
||||
.end __do_frame_setup
|
||||
|
||||
.weak __register_frame_info
|
||||
.weak __deregister_frame_info
|
||||
#ifdef SHARED
|
||||
.weak __cxa_finalize
|
||||
#endif
|
||||
.weak _Jv_RegisterClasses
|
|
@ -1,113 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 1996, 2000 Free Software Foundation, Inc.
|
||||
* Contributed by Richard Henderson (rth@tamu.edu)
|
||||
*
|
||||
* This file 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 2, or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* In addition to the permissions in the GNU General Public License, the
|
||||
* Free Software Foundation gives you unlimited permission to link the
|
||||
* compiled version of this file with other programs, and to distribute
|
||||
* those programs without any restriction coming from the use of this
|
||||
* file. (The General Public License restrictions do apply in other
|
||||
* respects; for example, they cover modification of the file, and
|
||||
* distribution when not linked into another program.)
|
||||
*
|
||||
* This file 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 this program; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* As a special exception, if you link this library with files
|
||||
* compiled with GCC to produce an executable, this does not cause
|
||||
* the resulting executable to be covered by the GNU General Public License.
|
||||
* This exception does not however invalidate any other reasons why
|
||||
* the executable file might be covered by the GNU General Public License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Tails of the constructor/destructor lists.
|
||||
*/
|
||||
|
||||
/* The __*TOR_END__ symbols are not global because when this file is used
|
||||
in a shared library, we do not want the symbol to fall over to the
|
||||
application's lists. */
|
||||
|
||||
.section .ctors,"aw"
|
||||
.align 3
|
||||
__CTOR_END__:
|
||||
.quad 0
|
||||
|
||||
.section .dtors,"aw"
|
||||
.align 3
|
||||
__DTOR_END__:
|
||||
.quad 0
|
||||
|
||||
.section .jcr,"aw"
|
||||
.align 3
|
||||
__JCR_END__:
|
||||
.quad 0
|
||||
|
||||
.section .eh_frame,"aw"
|
||||
__FRAME_END__:
|
||||
.quad 0
|
||||
|
||||
/*
|
||||
* Fragment of the ELF _init routine that invokes our ctor startup
|
||||
*/
|
||||
|
||||
.section .init,"ax"
|
||||
|
||||
/* Since the bits of the _init function are spread across many
|
||||
object files, each potentially with its own GP, we must
|
||||
assume we need to load ours. Further, our .init section
|
||||
can easily be more than 4MB away from our .text bits so we
|
||||
can't use bsr. */
|
||||
|
||||
br $29,1f
|
||||
1: ldgp $29,0($29)
|
||||
jsr $26,__do_global_ctors_aux
|
||||
|
||||
/* Must match the alignment we got from crti.o else we get
|
||||
zero-filled holes in our _init function and thense SIGILL. */
|
||||
.align 3
|
||||
|
||||
/*
|
||||
* Invoke our constructors in order.
|
||||
*/
|
||||
|
||||
.text
|
||||
|
||||
.align 3
|
||||
.ent __do_global_ctors_aux
|
||||
|
||||
__do_global_ctors_aux:
|
||||
ldgp $29,0($27)
|
||||
lda $30,-16($30)
|
||||
.frame $30,16,$26,0
|
||||
stq $9,8($30)
|
||||
stq $26,0($30)
|
||||
.mask 0x4000200,-16
|
||||
.prologue 1
|
||||
|
||||
lda $9,__CTOR_END__-8
|
||||
br 1f
|
||||
0: jsr $26,($27)
|
||||
1: ldq $27,0($9)
|
||||
subq $9,8,$9
|
||||
not $27,$0
|
||||
bne $0,0b
|
||||
|
||||
ldq $26,0($30)
|
||||
ldq $9,8($30)
|
||||
lda $30,16($30)
|
||||
ret
|
||||
|
||||
.end __do_global_ctors_aux
|
|
@ -1,5 +1,5 @@
|
|||
/* Definitions of target machine for GNU compiler, for DEC Alpha w/ELF.
|
||||
Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
|
||||
Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Richard Henderson (rth@tamu.edu).
|
||||
|
||||
|
@ -642,3 +642,25 @@ do { \
|
|||
alpha_this_gpdisp_sequence_number = 0)
|
||||
extern int alpha_this_literal_sequence_number;
|
||||
extern int alpha_this_gpdisp_sequence_number;
|
||||
|
||||
/* Since the bits of the _init and _fini function is spread across
|
||||
many object files, each potentially with its own GP, we must assume
|
||||
we need to load our GP. Further, the .init/.fini section can
|
||||
easily be more than 4MB away from the function to call so we can't
|
||||
use bsr. */
|
||||
#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
|
||||
asm (SECTION_OP "\n" \
|
||||
" br $29,1f\n" \
|
||||
"1: ldgp $29,0($29)\n" \
|
||||
" unop\n" \
|
||||
" jsr $26," USER_LABEL_PREFIX #FUNC "\n" \
|
||||
" .align 3\n" \
|
||||
" .previous");
|
||||
|
||||
/* If we have the capability create headers for efficient EH lookup.
|
||||
As of Jan 2002, only glibc 2.2.4 can actually make use of this, but
|
||||
I imagine that other systems will catch up. In the meantime, it
|
||||
doesn't harm to make sure that the data exists to be used later. */
|
||||
#if defined(HAVE_LD_EH_FRAME_HDR)
|
||||
#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
|
||||
#endif
|
||||
|
|
|
@ -1,14 +0,0 @@
|
|||
# Effectively disable the crtbegin/end rules using crtstuff.c
|
||||
T = disable
|
||||
|
||||
EXTRA_PARTS += crtbegin.o crtend.o crtbeginS.o crtendS.o
|
||||
|
||||
# Assemble startup files.
|
||||
crtbegin.o: $(srcdir)/config/alpha/crtbegin.asm $(GCC_PASSES)
|
||||
$(GCC_FOR_TARGET) -c -o crtbegin.o -x assembler-with-cpp -I. $(srcdir)/config/alpha/crtbegin.asm
|
||||
crtend.o: $(srcdir)/config/alpha/crtend.asm $(GCC_PASSES)
|
||||
$(GCC_FOR_TARGET) -c -o crtend.o -x assembler-with-cpp -I. $(srcdir)/config/alpha/crtend.asm
|
||||
crtbeginS.o: $(srcdir)/config/alpha/crtbegin.asm $(GCC_PASSES)
|
||||
$(GCC_FOR_TARGET) -DSHARED -c -o crtbeginS.o -x assembler-with-cpp -I. $(srcdir)/config/alpha/crtbegin.asm
|
||||
crtendS.o: $(srcdir)/config/alpha/crtend.asm $(GCC_PASSES)
|
||||
$(GCC_FOR_TARGET) -DSHARED -c -o crtendS.o -x assembler-with-cpp -I. $(srcdir)/config/alpha/crtend.asm
|
|
@ -1451,14 +1451,20 @@ struct cum_args {int regs;};
|
|||
/* We pull a little trick to register the _fini function with atexit,
|
||||
after (presumably) registering the eh frame info, since we don't handle
|
||||
_fini (a.k.a. ___fini_start) in crt0 or have a crti for "pure" ELF. */
|
||||
#ifdef CRT_BEGIN
|
||||
#define FORCE_INIT_SECTION_ALIGN \
|
||||
do \
|
||||
{ \
|
||||
extern void __fini__start (void); \
|
||||
atexit (__fini__start); \
|
||||
} \
|
||||
while (0)
|
||||
#ifdef CRT_END
|
||||
# define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
|
||||
static void __attribute__((__used__)) \
|
||||
call_ ## FUNC (void) \
|
||||
{ \
|
||||
asm (SECTION_OP); \
|
||||
if (__builtin_strcmp (#FUNC, "__do_global_ctors_aux") == 0) \
|
||||
{ \
|
||||
extern void __fini__start (void); \
|
||||
atexit (__fini__start); \
|
||||
} \
|
||||
FUNC (); \
|
||||
asm (TEXT_SECTION_ASM_OP); \
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Node: PIC */
|
||||
|
|
|
@ -102,8 +102,8 @@ Boston, MA 02111-1307, USA. */
|
|||
/* Node: Sections */
|
||||
|
||||
/* GNU/Linux has crti and crtn and does not need the
|
||||
FORCE_INIT_SECTION_ALIGN trick in cris.h. */
|
||||
#undef FORCE_INIT_SECTION_ALIGN
|
||||
CRT_CALL_STATIC_FUNCTION trick in cris.h. */
|
||||
#undef CRT_CALL_STATIC_FUNCTION
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
|
|
|
@ -2911,6 +2911,14 @@ extern int const svr4_dbx_register_map[FIRST_PSEUDO_REGISTER];
|
|||
|
||||
#define ASM_SIMPLIFY_DWARF_ADDR(X) \
|
||||
i386_simplify_dwarf_addr (X)
|
||||
|
||||
/* Switch to init or fini section via SECTION_OP, emit a call to FUNC,
|
||||
and switch back. For x86 we do this only to save a few bytes that
|
||||
would otherwise be unused in the text section. */
|
||||
#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
|
||||
asm (SECTION_OP "\n\t" \
|
||||
"call " USER_LABEL_PREFIX #FUNC "\n" \
|
||||
TEXT_SECTION_ASM_OP);
|
||||
|
||||
/* Print operand X (an rtx) in assembler syntax to file FILE.
|
||||
CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/* Definitions for Intel 386 running Linux-based GNU systems with ELF format.
|
||||
Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2001 Free Software Foundation, Inc.
|
||||
Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Eric Youngdale.
|
||||
Modified for stabs-in-ELF by H.J. Lu.
|
||||
|
||||
|
@ -167,20 +168,20 @@ Boston, MA 02111-1307, USA. */
|
|||
|
||||
#if defined(__PIC__) && defined (USE_GNULIBC_1)
|
||||
/* This is a kludge. The i386 GNU/Linux dynamic linker needs ___brk_addr,
|
||||
__environ and atexit (). We have to make sure they are in the .dynsym
|
||||
section. We accomplish it by making a dummy call here. This
|
||||
code is never reached. */
|
||||
|
||||
#define CRT_END_INIT_DUMMY \
|
||||
do \
|
||||
{ \
|
||||
extern void *___brk_addr; \
|
||||
extern char **__environ; \
|
||||
\
|
||||
___brk_addr = __environ; \
|
||||
atexit (0); \
|
||||
} \
|
||||
while (0)
|
||||
__environ and atexit. We have to make sure they are in the .dynsym
|
||||
section. We do this by forcing the assembler to create undefined
|
||||
references to these symbols in the object file. */
|
||||
#undef CRT_CALL_STATIC_FUNCTION
|
||||
#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
|
||||
asm (SECTION_OP "\n\t" \
|
||||
"call " USER_LABEL_PREFIX #FUNC "\n" \
|
||||
TEXT_SECTION_ASM_OP "\n\t" \
|
||||
".extern ___brk_addr\n\t" \
|
||||
".type ___brk_addr,@object\n\t" \
|
||||
".extern __environ\n\t" \
|
||||
".type __environ,@object\n\t" \
|
||||
".extern atexit\n\t" \
|
||||
".type atexit,@function");
|
||||
#endif
|
||||
|
||||
/* Handle special EH pointer encodings. Absolute, pc-relative, and
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Target definitions for GNU compiler for Intel 80386 running Solaris 2
|
||||
Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001
|
||||
Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Fred Fish (fnf@cygnus.com).
|
||||
|
||||
|
@ -56,9 +56,7 @@ Boston, MA 02111-1307, USA. */
|
|||
two 0x00000090 ints, which generates a segmentation violation when
|
||||
executed. This macro forces the assembler to do the padding, since
|
||||
it knows what it is doing. */
|
||||
|
||||
#define FORCE_INIT_SECTION_ALIGN asm (ALIGN_ASM_OP ## "16")
|
||||
#define FORCE_FINI_SECTION_ALIGN FORCE_INIT_SECTION_ALIGN
|
||||
#define FORCE_CODE_SECTION_ALIGN asm(ALIGN_ASM_OP "16");
|
||||
|
||||
/* Select a format to encode pointers in exception handling data. CODE
|
||||
is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Definitions of MCore target.
|
||||
Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
Contributed by Cygnus Solutions.
|
||||
|
||||
This file is part of GNU CC.
|
||||
|
@ -158,11 +158,9 @@ exports_section () \
|
|||
#undef ENDFILE_SPEC
|
||||
#define ENDFILE_SPEC "%{!mno-lsim:-lsim} crtend.o%s crtn.o%s"
|
||||
|
||||
|
||||
/* The subroutine calls in the .init and .fini sections create literal
|
||||
pools which must be jumped around... */
|
||||
#define FORCE_INIT_SECTION_ALIGN asm ("br 1f ; .literals ; 1:")
|
||||
#define FORCE_FINI_SECTION_ALIGN asm ("br 1f ; .literals ; 1:")
|
||||
#define FORCE_CODE_SECTION_ALIGN asm ("br 1f ; .literals ; 1:");
|
||||
|
||||
#undef CTORS_SECTION_ASM_OP
|
||||
#define CTORS_SECTION_ASM_OP "\t.section\t.ctors,\"aw\""
|
||||
|
|
|
@ -1299,15 +1299,13 @@ extern struct rtx_def *s390_compare_op0, *s390_compare_op1;
|
|||
/* S/390 constant pool breaks the devices in crtstuff.c to control section
|
||||
in where code resides. We have to write it as asm code. */
|
||||
#ifndef __s390x__
|
||||
#define CRT_CALL_STATIC_FUNCTION(func) \
|
||||
if (0) \
|
||||
func (); /* ... to avoid warnings. */ \
|
||||
else \
|
||||
asm \
|
||||
("bras\t%%r2,1f\n\
|
||||
0: .long\t" #func " - 0b\n\
|
||||
#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
|
||||
asm (SECTION_OP "\n\
|
||||
bras\t%%r2,1f\n\
|
||||
0: .long\t" USER_LABEL_PREFIX #FUNC " - 0b\n\
|
||||
1: l\t%%r3,0(%%r2)\n\
|
||||
bas\t%%r14,0(%%r3,%%r2)" : : : "2", "3", "cc", "memory");
|
||||
bas\t%%r14,0(%%r3,%%r2)\n\
|
||||
.previous");
|
||||
#endif
|
||||
|
||||
/* Constant Pool for all symbols operands which are changed with
|
||||
|
|
|
@ -2301,21 +2301,15 @@ extern struct rtx_def *fpscr_rtx;
|
|||
|
||||
/* SH constant pool breaks the devices in crtstuff.c to control section
|
||||
in where code resides. We have to write it as asm code. */
|
||||
#define CRT_CALL_STATIC_FUNCTION(func) \
|
||||
if (0) \
|
||||
/* This avoids warnings about the static function being unused. */ \
|
||||
func (); \
|
||||
else \
|
||||
/* We should be passing FUNC to the asm statement as an asm input \
|
||||
operand, but this breaks with -fPIC. FIXME. */ \
|
||||
asm \
|
||||
("mov.l 1f,r1\n\
|
||||
#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
|
||||
asm (SECTION_OP "\n\
|
||||
mov.l 1f,r1\n\
|
||||
mova 2f,r0\n\
|
||||
braf r1\n\
|
||||
lds r0,pr\n\
|
||||
0: .p2align 2\n\
|
||||
1: .long " USER_LABEL_PREFIX #func " - 0b\n\
|
||||
2:")
|
||||
1: .long " USER_LABEL_PREFIX #FUNC " - 0b\n\
|
||||
2:\n" TEXT_SECTION_ASM_OP);
|
||||
|
||||
#define ALLOCATE_INITIAL_VALUE(hard_reg) \
|
||||
(REGNO (hard_reg) == PR_REG \
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* 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 Free Software Foundation, Inc.
|
||||
1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
Contributed by Ron Guilmette (rfg@monkeys.com).
|
||||
|
||||
This file is part of GCC.
|
||||
|
@ -62,8 +62,20 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
|||
#include "tsystem.h"
|
||||
#include "unwind-dw2-fde.h"
|
||||
|
||||
#ifndef FORCE_CODE_SECTION_ALIGN
|
||||
# define FORCE_CODE_SECTION_ALIGN
|
||||
#endif
|
||||
|
||||
#ifndef CRT_CALL_STATIC_FUNCTION
|
||||
# define CRT_CALL_STATIC_FUNCTION(func) func ()
|
||||
# define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
|
||||
static void __attribute__((__used__)) \
|
||||
call_ ## FUNC (void) \
|
||||
{ \
|
||||
asm (SECTION_OP); \
|
||||
FUNC (); \
|
||||
FORCE_CODE_SECTION_ALIGN \
|
||||
asm (TEXT_SECTION_ASM_OP); \
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(OBJECT_FORMAT_ELF) && defined(HAVE_LD_EH_FRAME_HDR) \
|
||||
|
@ -237,11 +249,11 @@ extern void __cxa_finalize (void *) TARGET_ATTRIBUTE_WEAK;
|
|||
the list we left off processing, and we resume at that point,
|
||||
should we be re-invoked. */
|
||||
|
||||
static void
|
||||
static void __attribute__((used))
|
||||
__do_global_dtors_aux (void)
|
||||
{
|
||||
static func_ptr *p = __DTOR_LIST__ + 1;
|
||||
static int completed;
|
||||
static _Bool completed;
|
||||
func_ptr f;
|
||||
|
||||
if (__builtin_expect (completed, 0))
|
||||
|
@ -273,26 +285,15 @@ __do_global_dtors_aux (void)
|
|||
completed = 1;
|
||||
}
|
||||
|
||||
|
||||
/* Stick a call to __do_global_dtors_aux into the .fini section. */
|
||||
|
||||
static void __attribute__ ((__unused__))
|
||||
fini_dummy (void)
|
||||
{
|
||||
asm (FINI_SECTION_ASM_OP);
|
||||
CRT_CALL_STATIC_FUNCTION (__do_global_dtors_aux);
|
||||
#ifdef FORCE_FINI_SECTION_ALIGN
|
||||
FORCE_FINI_SECTION_ALIGN;
|
||||
#endif
|
||||
asm (TEXT_SECTION_ASM_OP);
|
||||
}
|
||||
CRT_CALL_STATIC_FUNCTION (FINI_SECTION_ASM_OP, __do_global_dtors_aux)
|
||||
|
||||
#if defined(USE_EH_FRAME_REGISTRY) || defined(JCR_SECTION_NAME)
|
||||
/* Stick a call to __register_frame_info into the .init section. For some
|
||||
reason calls with no arguments work more reliably in .init, so stick the
|
||||
call in another function. */
|
||||
|
||||
static void
|
||||
static void __attribute__((used))
|
||||
frame_dummy (void)
|
||||
{
|
||||
#ifdef USE_EH_FRAME_REGISTRY
|
||||
|
@ -322,16 +323,7 @@ frame_dummy (void)
|
|||
#endif /* JCR_SECTION_NAME */
|
||||
}
|
||||
|
||||
static void __attribute__ ((__unused__))
|
||||
init_dummy (void)
|
||||
{
|
||||
asm (INIT_SECTION_ASM_OP);
|
||||
CRT_CALL_STATIC_FUNCTION (frame_dummy);
|
||||
#ifdef FORCE_INIT_SECTION_ALIGN
|
||||
FORCE_INIT_SECTION_ALIGN;
|
||||
#endif
|
||||
asm (TEXT_SECTION_ASM_OP);
|
||||
}
|
||||
CRT_CALL_STATIC_FUNCTION (INIT_SECTION_ASM_OP, frame_dummy)
|
||||
#endif /* EH_FRAME_SECTION_NAME || JCR_SECTION_NAME */
|
||||
|
||||
#else /* OBJECT_FORMAT_ELF */
|
||||
|
@ -373,12 +365,10 @@ asm (INIT_SECTION_ASM_OP); /* cc1 doesn't know that we are switching! */
|
|||
such a thing) so that we can properly perform the construction of
|
||||
file-scope static-storage C++ objects within shared libraries. */
|
||||
|
||||
static void
|
||||
static void __attribute__((used))
|
||||
__do_global_ctors_aux (void) /* prologue goes in .init section */
|
||||
{
|
||||
#ifdef FORCE_INIT_SECTION_ALIGN
|
||||
FORCE_INIT_SECTION_ALIGN; /* Explicit align before switch to .text */
|
||||
#endif
|
||||
FORCE_CODE_SECTION_ALIGN /* explicit align before switch to .text */
|
||||
asm (TEXT_SECTION_ASM_OP); /* don't put epilogue and body in .init */
|
||||
DO_GLOBAL_CTORS_BODY;
|
||||
atexit (__do_global_dtors);
|
||||
|
@ -486,8 +476,7 @@ STATIC void *__JCR_END__[1]
|
|||
#ifdef INIT_SECTION_ASM_OP
|
||||
|
||||
#ifdef OBJECT_FORMAT_ELF
|
||||
|
||||
static void
|
||||
static void __attribute__((used))
|
||||
__do_global_ctors_aux (void)
|
||||
{
|
||||
func_ptr *p;
|
||||
|
@ -496,21 +485,7 @@ __do_global_ctors_aux (void)
|
|||
}
|
||||
|
||||
/* Stick a call to __do_global_ctors_aux into the .init section. */
|
||||
|
||||
static void __attribute__ ((__unused__))
|
||||
init_dummy (void)
|
||||
{
|
||||
asm (INIT_SECTION_ASM_OP);
|
||||
CRT_CALL_STATIC_FUNCTION (__do_global_ctors_aux);
|
||||
#ifdef FORCE_INIT_SECTION_ALIGN
|
||||
FORCE_INIT_SECTION_ALIGN;
|
||||
#endif
|
||||
asm (TEXT_SECTION_ASM_OP);
|
||||
#ifdef CRT_END_INIT_DUMMY
|
||||
CRT_END_INIT_DUMMY;
|
||||
#endif
|
||||
}
|
||||
|
||||
CRT_CALL_STATIC_FUNCTION (INIT_SECTION_ASM_OP, __do_global_ctors_aux)
|
||||
#else /* OBJECT_FORMAT_ELF */
|
||||
|
||||
/* Stick the real initialization code, followed by a normal sort of
|
||||
|
@ -542,10 +517,7 @@ __do_global_ctors_aux (void) /* prologue goes in .text section */
|
|||
atexit (__do_global_dtors);
|
||||
} /* epilogue and body go in .init section */
|
||||
|
||||
#ifdef FORCE_INIT_SECTION_ALIGN
|
||||
FORCE_INIT_SECTION_ALIGN;
|
||||
#endif
|
||||
|
||||
FORCE_CODE_SECTION_ALIGN
|
||||
asm (TEXT_SECTION_ASM_OP);
|
||||
|
||||
#endif /* OBJECT_FORMAT_ELF */
|
||||
|
|
|
@ -5458,16 +5458,24 @@ finalization code. If not defined, GCC will assume such a section does
|
|||
not exist.
|
||||
|
||||
@findex CRT_CALL_STATIC_FUNCTION
|
||||
@item CRT_CALL_STATIC_FUNCTION
|
||||
If defined, a C statement that calls the function named as the sole
|
||||
argument of this macro. This is used in @file{crtstuff.c} if
|
||||
@code{INIT_SECTION_ASM_OP} or @code{FINI_SECTION_ASM_OP} to calls to
|
||||
initialization and finalization functions from the init and fini
|
||||
sections. By default, this macro is a simple function call. Some
|
||||
@item CRT_CALL_STATIC_FUNCTION (@var{section_op}, @var{function})
|
||||
If defined, an ASM statement that switches to a different section
|
||||
via @var{section_op}, calls @var{function}, and switches back to
|
||||
the text section. This is used in @file{crtstuff.c} if
|
||||
@code{INIT_SECTION_ASM_OP} or @code{FINI_SECTION_ASM_OP} to calls
|
||||
to initialization and finalization functions from the init and fini
|
||||
sections. By default, this macro uses a simple function call. Some
|
||||
ports need hand-crafted assembly code to avoid dependencies on
|
||||
registers initialized in the function prologue or to ensure that
|
||||
constant pools don't end up too far way in the text section.
|
||||
|
||||
@findex FORCE_CODE_SECTION_ALIGN
|
||||
@item FORCE_CODE_SECTION_ALIGN
|
||||
If defined, an ASM statement that aligns a code section to some
|
||||
arbitrary boundary. This is used to force all fragments of the
|
||||
@code{.init} and @code{.fini} sections to have to same alignment
|
||||
and thus prevent the linker from having to add any padding.
|
||||
|
||||
@findex EXTRA_SECTIONS
|
||||
@findex in_text
|
||||
@findex in_data
|
||||
|
|
Loading…
Reference in New Issue