pc386dx exception 6 was Re: 4.6.0pre2 and docs released
Steven Johnson
sjohnson at neurizon.net
Mon Apr 28 03:41:30 UTC 2003
Angelo,
Change LDFLAGS += to be
LDFLAGS += --gc-sections
Unless LD Flags is passed to gcc or g++ and not ld, in which case use:
LDFALGS += -Wl,'--gc-sections'
I don't actually use GNU Make. I Use JAM Instead. The Make File
(JamFile) is a lot cleaner, and I haven't used GNU Make files (other
than what comes with RTEMS and other stuff in our own development for a
long time, but this is where I would try. You will need to look at the
output of running Make to see if the link is perfromed with ld or gcc/g++.
Steven
Angelo Fraietta wrote:
> Steven Johnson wrote:
>
>> Angelo,
>>
>> You put it in your make file. If you link your final app with GCC, you
>> need to pass -Wl,'--gc-sections' to g++.
>>
>> It also doesn't do anything unless you link with -static. (Which I
>> would guess you would be doing anyway for a final link.)
>>
>> You will also need to put KEEP() around your .init section. (As well
>> as others potentially)
>> You put this in your link script for your program.
>>
>> Steven
>>
> My makefile looks like this
>
>
> # $Id: Makefile,v 1.18 2003/04/28 01:54:09 angelofraietta Exp $
> #
> # Templates/Makefile.leaf
> # Template leaf node Makefile
> #
>
> EXEC=smart.exe
> # C source names, if any, go here -- minus the .c
> C_PIECES=diags fsmount
> C_FILES=$(C_PIECES:%=%.c)
> C_O_FILES=$(C_PIECES:%=${ARCH}/%.o)
>
> # C++ source names, if any, go here -- minus the .cc
> CC_PIECES=rtems_init \
> midioutput \
> scheduler \
> rtems_simulator \
> commtasks
> CC_FILES=$(CC_PIECES:%=%.cpp)
> CC_O_FILES=$(CC_PIECES:%=${ARCH}/%.o)
>
> H_FILES=
>
> # Assembly source names, if any, go here -- minus the .S
> S_PIECES=
> S_FILES=$(S_PIECES:%=%.S)
> S_O_FILES=$(S_FILES:%.S=${ARCH}/%.o)
>
> SRCS=$(C_FILES) $(CC_FILES) $(H_FILES) $(S_FILES)
> OBJS=$(C_O_FILES) $(CC_O_FILES) $(S_O_FILES)
>
> PGMS=${ARCH}/$(EXEC) #${ARCH}/xxx-another-one
>
> # List of RTEMS managers to be included in the application goes here.
> # Use:
> # MANAGERS=all
> # to include all RTEMS managers in the application.
> MANAGERS=io event message rate_monotonic semaphore timer
>
> include $(RTEMS_MAKEFILE_PATH)/Makefile.inc
>
> include $(RTEMS_CUSTOM)
> include $(RTEMS_ROOT)/make/leaf.cfg
>
> #
> # (OPTIONAL) Add local stuff here using +=
> #
>
> DEFINES += -D_E_STL
> CPPFLAGS += -I ../../../estl
> CPPFLAGS += -I ../engine
> CPPFLAGS += -I ../engineinterface
> CPPFLAGS += -I ../hal_include
> CPPFLAGS += -I ../link_driver
> CPPFLAGS += -I ../../../threads/source
> CPPFLAGS += -I ../../../mididriver
> CPPFLAGS += -I ../../../mididriver/hal_rtems
>
> XCPPFLAGS +=
> CFLAGS +=
>
> #
> # CFLAGS_DEBUG_V are used when the `make debug' target is built.
> # To link your application with the non-optimized RTEMS routines,
> # uncomment the following line:
> # CFLAGS_DEBUG_V += -qrtems_debug
> #
>
> LD_PATHS += #xxx-your-EXTRA-library-paths-go-here, if any
>
> LD_LIBS += ../engine/$(ARCH)/sm_engine.a LD_LIBS +=
> ../engineinterface/$(ARCH)/sm_engineinterface.a LD_LIBS +=
> ../engine/$(ARCH)/sm_engine.a LD_LIBS +=
> ../link_driver/$(ARCH)/sm_link_driver.a LD_LIBS +=
> ../link_driver/hal_rtems/$(ARCH)/sm_comm.a LD_LIBS +=
> ../../../threads/source/$(ARCH)/sm_rtems_active.a LD_LIBS +=
> ../../../threads/source/hal_rtems/$(ARCH)/sm_rtems_thread.a LD_LIBS
> += ../../../mididriver/hal_rtems/$(ARCH)/rtems_midi.a
>
> LDFLAGS +=
>
> #
> # Add your list of files to delete here. The config files
> # already know how to delete some stuff, so you may want
> # to just run 'make clean' first to see what gets missed.
> # 'make clobber' already includes 'make clean'
> #
>
> CLEAN_ADDITIONS +=
> CLOBBER_ADDITIONS +=
>
> all: ${ARCH} $(SRCS) $(PGMS)
>
> ${ARCH}/$(EXEC): ${OBJS} ${LINK_FILES}
> $(make-cxx-exe)
>
> # Install the program(s), appending _g or _p as appropriate.
> # for include files, just use $(INSTALL_CHANGE)
> install: all
> $(INSTALL_VARIANT) -m 555 ${PGMS} ${PROJECT_RELEASE}/bin
>
>
>
> What ammendments would you make to remove all unnecessary code during
> the link.
>
>>
>>
>>
>> Angelo Fraietta wrote:
>>
>>>
>>>
>>> Steven Johnson wrote:
>>>
>>>> To remove anything that is not used, you need to pass --gc-sections
>>>> to linker. See ld manual for details. I don't think it removes
>>>> absolutely everything that isn't used, but it removes a lot. Also
>>>> look up KEEP directive for linker script as you may need this for
>>>> .init section.
>>>
>>>
>>>
>>>
>>> Is this something that I can do from my Makefile or is it something
>>> that needs to be done from within the BSP files.
>>>
>>
>>
>>
>
More information about the users
mailing list