4
0
mirror of git://sourceware.org/git/newlib-cygwin.git synced 2025-01-22 06:57:36 +08:00
Jozef Lawrynowicz f811485ffb MSP430: Make the inclusion of run_*_array fns depend on defined assembler symbols
Many of the MSP430 crt functions (e.g. to initialize bss) are linked
"dynamically", based on symbols defined in the program.
The GNU assembler defines the symbols corresponding to the crt
functions by examining the section names in the input file.

If GCC has been configured with --enable-initfini-array, then
.init_array and .fini_array will hold pointers to global
constructors/destructors. These sections can also hold functions that
need to be executed for other purposes.

The attached patch puts the __crt0_run_{preinit,init,fini}_array and
__crt0_run_array functions in their own object files, so they will
only be linked when needed.

Successfully regtested the DejaGNU GCC testsuite using the binutils and
newlib changes together with GCC trunk configured with
--enable-initfini-array.
2019-04-18 10:29:24 +02:00

186 lines
4.5 KiB
Makefile

# Copyright (c) 2008-2014 Red Hat, Inc. All rights reserved.
#
# This copyrighted material is made available to anyone wishing to use, modify,
# copy, or redistribute it subject to the terms and conditions of the BSD
# License. This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY expressed or implied, including the implied warranties
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. A copy of this license
# is available at http://www.opensource.org/licenses. Any Red Hat trademarks that
# are incorporated in the source code or documentation are not subject to the BSD
# License and may only be used or replicated with the express permission of
# Red Hat, Inc.
# Makefile for libgloss/msp430.
DESTDIR =
VPATH = @srcdir@
srcdir = @srcdir@
objdir = .
srcroot = $(srcdir)/../..
objroot = $(objdir)/../..
prefix = @prefix@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
target_alias = @target_alias@
bindir = @bindir@
libdir = @libdir@
tooldir = $(exec_prefix)/$(target_alias)
# Multilib support variables.
# TOP is used instead of MULTI{BUILD,SRC}TOP.
MULTIDIRS =
MULTISUBDIR =
MULTIDO = true
MULTICLEAN = true
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
SHELL = /bin/sh
CC = @CC@
AS = @AS@
AR = @AR@
LD = @LD@
RANLIB = @RANLIB@
AR_FLAGS = rc
OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \
then echo ${objroot}/../binutils/objdump ; \
else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi`
OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \
then echo ${objroot}/../binutils/objcopy ; \
else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi`
SCRIPTS = $(srcdir)/msp430-sim.ld
SCRIPTS += $(srcdir)/msp430xl-sim.ld
SCRIPTS += $(srcdir)/intr_vectors.ld
CRT = gcrt0.o crt0.o crt0-minrt.o crtn.o crtn-minrt.o
SIM_BSP = libsim.a
LIB_NOSYS = libnosys.a
LIB_CRT = libcrt.a
SIM_OBJS = syscalls.o \
cio.o \
write.o \
sbrk.o
NOSYS_OBJS = ciosyscalls.o \
cio.o \
write.o \
unlink.o \
sbrk.o
# Each crt_*.o is built from crt0.S using -DL*. crt0.o is built from
# crt0.s with -DL0 via the default rule below.
CRT_OBJS = \
crt_bss.o \
crt_high_bss.o \
crt_movedata.o \
crt_move_highdata.o \
crt_main.o \
crt_main_minrt.o \
crt_callexit.o \
crt_run_init_array.o \
crt_run_preinit_array.o \
crt_run_fini_array.o \
crt_run_array.o \
crt_init.o
#### Host specific Makefile fragment comes in here.
@host_makefile_frag@
all: $(CRT) $(SIM_BSP) $(LIB_NOSYS) $(LIB_CRT) copy_scripts_to_objdir
crt_%.o : crt0.S
$(CC) -DL$* -Wa,-gdwarf2 -Wa,-I$(srcdir) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -c $< -o $@
crt0-minrt.o : crt0.S
$(CC) -DL0 -DMINRT -Wa,-gdwarf2 -Wa,-I$(srcdir) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -c $< -o $@
crtn-minrt.o : crtn.S
$(CC) -DL0 -DMINRT -Wa,-gdwarf2 -Wa,-I$(srcdir) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -c $< -o $@
# Override .S.o rule to pass assembler debugging flags
.S.o:
$(CC) -DL0 -Wa,-gdwarf2 -Wa,-I$(srcdir) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -c $<
$(SIM_BSP): $(SIM_OBJS)
$(AR) $(ARFLAGS) $@ $?
$(RANLIB) $@
$(LIB_NOSYS): $(NOSYS_OBJS)
$(AR) $(ARFLAGS) $@ $?
$(RANLIB) $@
$(LIB_CRT): $(CRT_OBJS)
$(AR) $(ARFLAGS) $@ $?
$(RANLIB) $@
copy_scripts_to_objdir: $(SCRIPTS)
cp $(SCRIPTS) $(objdir)
# Dependencies
SDEPS = $(srcdir)/cio.h
abort.o : $(SDEPS)
argv.o : $(SDEPS)
argvlen.o : $(SDEPS)
chdir.o : $(SDEPS)
chmod.o : $(SDEPS)
close.o : $(SDEPS)
exit.o : $(SDEPS)
fstat.o : $(SDEPS)
getpid.o : $(SDEPS)
gettimeofday.o : $(SDEPS)
gcrt0.o: gcrt0.S crt0.S
kill.o : $(SDEPS)
link.o : $(SDEPS)
lseek.o : $(SDEPS)
mcount.o : $(SDEPS)
open.o : $(SDEPS)
read.o : $(SDEPS)
sigprocmask.o : $(SDEPS)
sleep.o : $(SDEPS)
stat.o : $(SDEPS)
time.o : $(SDEPS)
times.o : $(SDEPS)
unlink.o : $(SDEPS)
utime.o : $(SDEPS)
write.o : $(SDEPS)
install: $(CRT) $(SIM_BSP) $(LIB_NOSYS) $(LIB_CRT) $(SCRIPTS)
mkdir -p $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}
for c in $(CRT) $(SIM_BSP) $(LIB_NOSYS) $(LIB_CRT); do \
$(INSTALL_DATA) $$c $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$$c ;\
done
for c in $(SCRIPTS); do \
b=`basename $$c`; \
$(INSTALL_DATA) $$c $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$$b ;\
done
clean mostlyclean:
rm -f *.o *.a
distclean maintainer-clean realclean: clean
rm -f Makefile config.cache config.log config.status
.PHONY: info dvi doc install-info clean-info
info doc dvi:
install-info:
clean-info:
Makefile: Makefile.in config.status @host_makefile_frag_path@
$(SHELL) config.status
config.status: configure
$(SHELL) config.status --recheck