diff options
Diffstat (limited to 'lib_arm')
-rw-r--r-- | lib_arm/Makefile | 15 | ||||
-rw-r--r-- | lib_arm/config.mk | 28 | ||||
-rw-r--r-- | lib_arm/eabi_compat.c | 18 |
3 files changed, 58 insertions, 3 deletions
diff --git a/lib_arm/Makefile b/lib_arm/Makefile index c37e2e0..0293348 100644 --- a/lib_arm/Makefile +++ b/lib_arm/Makefile @@ -51,12 +51,21 @@ OBJS := $(addprefix $(obj),$(SOBJS-y) $(COBJS-y)) LGOBJS := $(addprefix $(obj),$(GLSOBJS)) \ $(addprefix $(obj),$(GLCOBJS)) +# Always build libarm.a +TARGETS := $(LIB) + +# Build private libgcc only when asked for ifdef USE_PRIVATE_LIBGCC -all: $(LIB) $(LIBGCC) -else -all: $(LIB) +TARGETS += $(LIBGCC) +endif + +# For EABI conformant tool chains, provide eabi_compat() +ifneq (,$(findstring -mabi=aapcs-linux,$(PLATFORM_CPPFLAGS))) +TARGETS += $(obj)eabi_compat.o endif +all: $(TARGETS) + $(LIB): $(obj).depend $(OBJS) $(AR) $(ARFLAGS) $@ $(OBJS) diff --git a/lib_arm/config.mk b/lib_arm/config.mk index a13603e..705dfc3 100644 --- a/lib_arm/config.mk +++ b/lib_arm/config.mk @@ -25,4 +25,32 @@ CROSS_COMPILE ?= arm-linux- PLATFORM_CPPFLAGS += -DCONFIG_ARM -D__ARM__ +# Explicitly specifiy 32-bit ARM ISA since toolchain default can be -mthumb: +PLATFORM_CPPFLAGS += $(call cc-option,-marm,) + +# Try if EABI is supported, else fall back to old API, +# i. e. for example: +# - with ELDK 4.2 (EABI supported), use: +# -mabi=aapcs-linux -mno-thumb-interwork +# - with ELDK 4.1 (gcc 4.x, no EABI), use: +# -mabi=apcs-gnu -mno-thumb-interwork +# - with ELDK 3.1 (gcc 3.x), use: +# -mapcs-32 -mno-thumb-interwork +PLATFORM_CPPFLAGS += $(call cc-option,\ + -mabi=aapcs-linux -mno-thumb-interwork,\ + $(call cc-option,\ + -mapcs-32,\ + $(call cc-option,\ + -mabi=apcs-gnu,\ + )\ + ) $(call cc-option,-mno-thumb-interwork,)\ + ) + +# For EABI, make sure to provide raise() +ifneq (,$(findstring -mabi=aapcs-linux,$(PLATFORM_CPPFLAGS))) +# This file is parsed several times; make sure to add only once. +ifeq (,$(findstring lib_arm/eabi_compat.o,$(PLATFORM_LIBS))) +PLATFORM_LIBS += $(OBJTREE)/lib_arm/eabi_compat.o +endif +endif LDSCRIPT := $(SRCTREE)/cpu/$(CPU)/u-boot.lds diff --git a/lib_arm/eabi_compat.c b/lib_arm/eabi_compat.c new file mode 100644 index 0000000..86eacf1 --- /dev/null +++ b/lib_arm/eabi_compat.c @@ -0,0 +1,18 @@ +/* + * Utility functions needed for (some) EABI conformant tool chains. + * + * (C) Copyright 2009 Wolfgang Denk <wd@denx.de> + * + * This program 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 of the + * License, or (at your option) any later version. + */ + +#include <common.h> + +int raise (int signum) +{ + printf("raise: Signal # %d caught\n", signum); + return 0; +} |