Sorry - I know nothing about building GCC. I have previously come across a problem with eh_frame that was caused by a bug in the linker script, but I didn't understand the solution so that does not help. You might be better off asking on a GCC forum.
Regards.
No worries... will do. If I find a solution I shall report back so that others here may benefit.
Okay... after a bit of investigation, it seems this is a known bug in GCC that has been fixed in recent releases.
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40521 is the bug report on GCC Bugzilla.
http://www.codesourcery.com/archives/arm-gnu/msg03167.html is my query to CodeSourcery regarding the issue, where the aforementioned bug was discussed.
One way around it that avoids having to recompile everything is to run:
find . -type f -name \*.o -exec arm-stellaris-eabi-strip -R .eh_frame {} \;
in the top-level FreeRTOS directory. This ditches the .eh_frame section that's causing the issue. A second approach is to build the binaries with the -fno-dwarf2-cfi-asm option. The third approach I am investigating now -- that is adjusting the build environment when compiling gcc. I will have an updated Makefile if this works.
Regards,
Stuart Longland
Finally nailed this issue... if you recompile gcc and still strike this issue, chances are it's the C library that's hiding the last remnants of the .eh_frames. You need to then recompile and reinstall newlib. The following is the Makefile I use to generate a toolchain from CodeSourcery sources. I've been using it successfully on a mipsel-unknown-linux-gnu host for a while now, and it builds many of the examples just fine, so I shall share it with everyone.
Hopefully this site doesn't mangle it too much! :-)
# CodeSourcery Toolchain version
CS_VER=2009q3-68
# Target for toolchain
TARGET=arm-stellaris-eabi
# Build host type -- this automatically detects the local host type
# use CROSS_COMPILE=foo- to set the build toolchain to use.
BUILD=$(shell $(CROSS_COMPILE)gcc -dumpmachine)
HOST=$(BUILD)
# Source tarball directory ... assumed to be same dir as Makefile
SRCDIR=$(PWD)
# Unpack directory
UNPACKDIR=$(PWD)/unpack
# Build working directory
WORKDIR=$(PWD)/build
# Toolchain prefix directory -- all components will be installed here
PREFIX=/usr/local
# Build Library Prefix -- libraries will be built here
BLPREFIX=$(PWD)/buildlibs
# Build Library Prefix -- libraries will be built here
BLPREFIX=$(PWD)/buildlibs
# Superuser access command... if needed
SUDO=
# Package naming to use (DO NOT brand your custom toolchain as "CodeSourcery")
PKGVERSION="Luminary Micro Stellaris Toolchain; Eze Corp Build"
BUGURL=http://a64/wiki/
# Package directory names
BINUTILS=binutils-stable
CLOOG=cloog-0.15
EXPAT=expat-mirror
GCC=gcc-4.4
GDB=gdb-stable
MPFR=mpfr-stable
NEWLIB=newlib-stable
PPL=ppl-0.10.2
##### Tasks begin here #####
.PHONY: all
all: $(WORKDIR)/gdb/.install
%/.md:
-mkdir $(@D)
[ -f $@ ] || touch $@
$(UNPACKDIR)/$(MPFR)/.unpacked: $(SRCDIR)/mpfr-$(CS_VER).tar.bz2 $(UNPACKDIR)/.md
tar -C $(UNPACKDIR) -xjvf $<
[ -f $@ ] || touch $@
$(UNPACKDIR)/$(PPL)/.unpacked: $(SRCDIR)/ppl-$(CS_VER).tar.bz2 $(UNPACKDIR)/.md
tar -C $(UNPACKDIR) -xjvf $<
[ -f $@ ] || touch $@
$(UNPACKDIR)/$(CLOOG)/.unpacked: $(SRCDIR)/cloog-$(CS_VER).tar.bz2 $(UNPACKDIR)/.md
tar -C $(UNPACKDIR) -xjvf $<
[ -f $@ ] || touch $@
$(UNPACKDIR)/$(BINUTILS)/.unpacked: $(SRCDIR)/binutils-$(CS_VER).tar.bz2 $(UNPACKDIR)/.md
tar -C $(UNPACKDIR) -xjvf $<
[ -f $@ ] || touch $@
$(UNPACKDIR)/$(GCC)/.unpacked: $(SRCDIR)/gcc-$(CS_VER).tar.bz2 $(UNPACKDIR)/.md
tar -C $(UNPACKDIR) -xjvf $<
[ -f $@ ] || touch $@
$(UNPACKDIR)/$(NEWLIB)/.unpacked: $(SRCDIR)/newlib-$(CS_VER).tar.bz2 $(UNPACKDIR)/.md
tar -C $(UNPACKDIR) -xjvf $<
[ -f $@ ] || touch $@
$(UNPACKDIR)/$(EXPAT)/.unpacked: $(SRCDIR)/expat-$(CS_VER).tar.bz2 $(UNPACKDIR)/.md
tar -C $(UNPACKDIR) -xjvf $<
[ -f $@ ] || touch $@
$(UNPACKDIR)/$(GDB)/.unpacked: $(SRCDIR)/gdb-$(CS_VER).tar.bz2 $(UNPACKDIR)/.md
tar -C $(UNPACKDIR) -xjvf $<
[ -f $@ ] || touch $@
$(WORKDIR)/mpfr/.md: $(WORKDIR)/.md
$(WORKDIR)/mpfr.deps-installed:
touch $@
$(WORKDIR)/mpfr/.config: $(UNPACKDIR)/$(MPFR) $(WORKDIR)/mpfr/.md $(BLPREFIX)/.md $(WORKDIR)/mpfr.deps-installed
cd $(@D) ; \
CC_FOR_BUILD=$(CROSS_COMPILE)gcc \
CC=$(CROSS_COMPILE)gcc \
AR=$(CROSS_COMPILE)ar \
RANLIB=$(CROSS_COMPILE)ranlib \
$(UNPACKDIR)/$(MPFR)/configure \
--build=$(BUILD) \
--target=$(TARGET) \
--host=$(HOST) \
--prefix=$(BLPREFIX) \
--disable-shared
touch $@
$(WORKDIR)/ppl/.md: $(WORKDIR)/.md
$(WORKDIR)/ppl.deps-installed:
touch $@
$(WORKDIR)/ppl/.config: $(UNPACKDIR)/$(PPL)/.unpacked $(WORKDIR)/ppl/.md $(BLPREFIX)/.md $(WORKDIR)/ppl.deps-installed
cd $(@D) ; \
CC_FOR_BUILD=$(CROSS_COMPILE)gcc \
CC=$(CROSS_COMPILE)gcc \
AR=$(CROSS_COMPILE)ar \
RANLIB=$(CROSS_COMPILE)ranlib \
$(UNPACKDIR)/$(PPL)/configure \
--build=$(BUILD) \
--target=$(TARGET) \
--host=$(HOST) \
--prefix=$(BLPREFIX) \
--disable-shared \
--disable-nls
touch $@
$(WORKDIR)/cloog/.md: $(WORKDIR)/.md
$(WORKDIR)/cloog.deps-installed:$(WORKDIR)/ppl/.install
touch $@
$(WORKDIR)/cloog/.config: $(UNPACKDIR)/$(CLOOG)/.unpacked $(WORKDIR)/cloog/.md $(BLPREFIX)/.md $(WORKDIR)/cloog.deps-installed
cd $(@D) ; \
CC_FOR_BUILD=$(CROSS_COMPILE)gcc \
CC=$(CROSS_COMPILE)gcc \
AR=$(CROSS_COMPILE)ar \
RANLIB=$(CROSS_COMPILE)ranlib \
$(UNPACKDIR)/$(CLOOG)/configure \
--build=$(BUILD) \
--target=$(TARGET) \
--host=$(HOST) \
--prefix=$(BLPREFIX) \
--disable-shared \
--disable-nls \
--with-ppl=$(BLPREFIX)
touch $@
$(WORKDIR)/binutils/.md: $(WORKDIR)/.md
$(WORKDIR)/binutils.deps-installed: $(WORKDIR)/mpfr/.install $(WORKDIR)/ppl/.install $(WORKDIR)/cloog/.install
touch $@
$(WORKDIR)/binutils/.config: $(UNPACKDIR)/$(BINUTILS)/.unpacked $(WORKDIR)/binutils/.md $(WORKDIR)/binutils.deps-installed
cd $(@D) ; \
CC_FOR_BUILD=$(CROSS_COMPILE)gcc \
CC=$(CROSS_COMPILE)gcc \
AR=$(CROSS_COMPILE)ar \
RANLIB=$(CROSS_COMPILE)ranlib \
$(UNPACKDIR)/$(BINUTILS)/configure \
--build=$(BUILD) \
--target=$(TARGET) \
--prefix=$(PREFIX) \
--host=$(HOST) \
--with-pkgversion=$(PKGVERSION) \
--with-bugurl=$(BUGURL) \
--with-mpfr=$(BLPREFIX) \
--with-ppl=$(BLPREFIX) \
--with-cloog=$(BLPREFIX) \
--disable-nls
touch $@
$(WORKDIR)/binutils/.install: $(WORKDIR)/binutils/.build
sudo $(MAKE) -C $(@D) \
installdirs \
install-host \
install-target
touch $@
# task [055/174] /$(CROSS_COMPILE)/toolchain/gcc_first/configure
$(WORKDIR)/gcc-s1/.md: $(WORKDIR)/.md
$(WORKDIR)/gcc-s1.deps-installed: $(WORKDIR)/binutils/.install $(WORKDIR)/mpfr/.install $(WORKDIR)/ppl/.install $(WORKDIR)/cloog/.install
touch $@
$(WORKDIR)/gcc-s1/.config: $(UNPACKDIR)/$(GCC)/.unpacked $(WORKDIR)/gcc-s1/.md $(WORKDIR)/gcc-s1.deps-installed
cd $(@D) ; \
CC_FOR_BUILD=$(CROSS_COMPILE)gcc \
CC=$(CROSS_COMPILE)gcc \
AR=$(CROSS_COMPILE)ar \
RANLIB=$(CROSS_COMPILE)ranlib \
AR_FOR_TARGET=arm-none-eabi-ar \
NM_FOR_TARGET=arm-none-eabi-nm \
OBJDUMP_FOR_TARET=arm-none-eabi-objdump \
STRIP_FOR_TARGET=arm-none-eabi-strip \
gcc_cv_as_cfi_directive=no \
$(UNPACKDIR)/$(GCC)/configure \
--build=$(BUILD) \
--host=$(HOST) \
--target=$(TARGET) \
--disable-libmudflap \
--disable-libstdcxx-pch \
--enable-extra-sgxxlite-multilibs \
--with-gnu-as \
--with-gnu-ld \
'--with-specs=%{O2:%{!fno-remove-local-statics: -fremove-local-statics}} %{O*:%{O|O0|O1|O2|Os:;:%{!fno-remove-local-statics: -fremove-local-statics}}}' \
--disable-lto \
--with-newlib \
--with-pkgversion=$(PKGVERSION) \
--with-bugurl=$(BUGURL) \
--disable-nls \
--prefix=$(PREFIX) \
--disable-shared \
--disable-threads \
--disable-libssp \
--disable-libgomp \
--without-headers \
--with-newlib \
--disable-decimal-float \
--disable-libffi \
--enable-languages=c \
--with-mpfr=$(PREFIX) \
--with-ppl=$(PREFIX) \
'--with-host-libstdcxx=-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' \
--with-cloog=$(PREFIX) \
--disable-libgomp
touch $@
$(WORKDIR)/gcc-s1/.build: $(WORKDIR)/gcc-s1/.config
gcc_cv_as_cfi_directive=no \
$(MAKE) -C $(WORKDIR)/gcc-s1 all-gcc
touch $@
$(WORKDIR)/gcc-s1/.install: $(WORKDIR)/gcc-s1/.build
sudo $(MAKE) -C $(@D)/gcc \
install-common \
install-cpp \
install- \
install-driver
touch $@
# task [059/174] /$(CROSS_COMPILE)/toolchain/newlib/configure
$(WORKDIR)/newlib/.md: $(WORKDIR)/.md
$(WORKDIR)/newlib.deps-installed: $(WORKDIR)/gcc-s1/.install
touch $@
$(WORKDIR)/newlib/.config: $(UNPACKDIR)/$(NEWLIB)/.unpacked $(WORKDIR)/newlib/.md $(WORKDIR)/newlib.deps-installed
cd $(@D) ; \
CC_FOR_BUILD=$(CROSS_COMPILE)gcc \
CC=$(CROSS_COMPILE)gcc \
AR=$(CROSS_COMPILE)ar \
RANLIB=$(CROSS_COMPILE)ranlib \
CFLAGS_FOR_TARGET='-g -O2 -fno-unroll-loops -fno-dwarf2-cfi-asm' \
$(UNPACKDIR)/$(NEWLIB)/configure \
--build=$(BUILD) \
--target=$(TARGET) \
--prefix=$(PREFIX) \
--host=$(HOST) \
--enable-newlib-io-long-long \
--disable-newlib-supplied-syscalls \
--disable-libgloss \
--disable-newlib-supplied-syscalls \
--disable-nls
touch $@
# task [063/174] /$(CROSS_COMPILE)/toolchain/gcc_final/configure
$(WORKDIR)/gcc-s2/.md: $(WORKDIR)/.md
$(WORKDIR)/gcc-s2.deps-installed: $(WORKDIR)/newlib/.install
touch $@
$(WORKDIR)/gcc-s2/.config: $(UNPACKDIR)/$(GCC)/.unpacked $(WORKDIR)/gcc-s2/.md $(WORKDIR)/gcc-s2.deps-installed
cd $(@D) ; \
CC_FOR_BUILD=$(CROSS_COMPILE)gcc \
CC=$(CROSS_COMPILE)gcc \
AR=$(CROSS_COMPILE)ar \
RANLIB=$(CROSS_COMPILE)ranlib \
AR_FOR_TARGET=arm-none-eabi-ar \
NM_FOR_TARGET=arm-none-eabi-nm \
OBJDUMP_FOR_TARET=arm-none-eabi-objdump \
STRIP_FOR_TARGET=arm-none-eabi-strip \
gcc_cv_as_cfi_directive=no \
$(UNPACKDIR)/$(GCC)/configure \
--build=$(BUILD) \
--host=$(HOST) \
--target=$(TARGET) \
--enable-threads \
--disable-libmudflap \
--disable-libssp \
--disable-libstdcxx-pch \
--enable-extra-sgxxlite-multilibs \
--with-gnu-as \
--with-gnu-ld \
'--with-specs=%{O2:%{!fno-remove-local-statics: -fremove-local-statics}} %{O*:%{O|O0|O1|O2|Os:;:%{!fno-remove-local-statics: -fremove-local-statics}}}' \
--enable-languages=c,c++ \
--disable-shared \
--disable-lto \
--with-newlib \
--with-pkgversion=$(PKGVERSION) \
--with-bugurl=$(BUGURL) \
--disable-nls \
--prefix=$(PREFIX) \
--with-headers=yes \
--with-mpfr=$(PREFIX) \
--with-ppl=$(PREFIX) \
'--with-host-libstdcxx=-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' \
--with-cloog=$(PREFIX) \
--disable-libgomp
touch $@
$(WORKDIR)/gcc-s2/.build: $(WORKDIR)/gcc-s2/.config
gcc_cv_as_cfi_directive=no \
$(MAKE) -C $(WORKDIR)/gcc-s2 all-gcc
touch $@
$(WORKDIR)/gcc-s2/.install: $(WORKDIR)/gcc-s2/.build
sudo $(MAKE) -C $(@D)/gcc \
install-common \
install-cpp \
install- \
install-driver
touch $@
# task [071/174] /$(CROSS_COMPILE)/toolchain/expat/0/configure
$(WORKDIR)/expat/.md: $(WORKDIR)/.md
$(WORKDIR)/expat.deps-installed: $(WORKDIR)/gcc-s2/.install
touch $@
$(WORKDIR)/expat/.config: $(UNPACKDIR)/$(EXPAT)/.unpacked $(WORKDIR)/expat/.md $(WORKDIR)/expat.deps-installed
cd $(@D) ; \
CC_FOR_BUILD=$(CROSS_COMPILE)gcc \
CC=$(CROSS_COMPILE)gcc \
AR=$(CROSS_COMPILE)ar \
RANLIB=$(CROSS_COMPILE)ranlib \
$(UNPACKDIR)/$(EXPAT)/configure \
--build=$(BUILD) \
--target=$(TARGET) \
--prefix=$(PREFIX) \
--disable-shared \
--host=$(HOST) \
--disable-nls
touch $@
# task [075/174] /$(CROSS_COMPILE)/toolchain/gdb/0/configure
$(WORKDIR)/gdb/.md: $(WORKDIR)/.md
$(WORKDIR)/gdb.deps-installed: $(WORKDIR)/expat/.install
touch $@
$(WORKDIR)/gdb/.config: $(UNPACKDIR)/$(GDB)/.unpacked $(WORKDIR)/gdb/.md $(WORKDIR)/gdb.deps-installed
cd $(@D) ; \
CC_FOR_BUILD=$(CROSS_COMPILE)gcc \
CC=$(CROSS_COMPILE)gcc \
AR=$(CROSS_COMPILE)ar \
RANLIB=$(CROSS_COMPILE)ranlib \
$(UNPACKDIR)/$(GDB)/configure \
--build=$(BUILD) \
--target=$(TARGET) \
--prefix=$(PREFIX) \
--host=$(HOST) \
--with-pkgversion=$(PKGVERSION) \
--with-bugurl=$(BUGURL) \
--disable-nls \
--with-libexpat-prefix=$(PREFIX)
touch $@
$(WORKDIR)/gdb/.install: $(WORKDIR)/gdb/.build
sudo $(MAKE) -C $(@D) \
install-host
$(WORKDIR)/%/.build: $(WORKDIR)/%/.config $(WORKDIR)/%.deps-installed
$(MAKE) -C $(@D)
touch $@
$(WORKDIR)/%/.install: $(WORKDIR)/%/.build
CC_FOR_BUILD=$(CROSS_COMPILE)gcc \
CC=$(CROSS_COMPILE)gcc \
AR=$(CROSS_COMPILE)ar \
RANLIB=$(CROSS_COMPILE)ranlib \
$(SUDO) $(MAKE) -C $(@D) install
touch $@