[PATCH] libubacktrace: Add arm implementation

Carmelo Amoroso carmelo73 at gmail.com
Sun Jan 22 09:38:22 UTC 2012


On 21/01/12 20:42, Khem Raj wrote:
> On Sat, Jan 21, 2012 at 6:47 AM, Carmelo AMOROSO <carmelo.amoroso at st.com> wrote:
>> On 21/01/2012 15.08, Khem Raj wrote:
>>> Arm has a different mechanism of getting
>>> _Unwind_GetIP. Therefore we profile arch
>>> specific backtrace file.
>>>
>>> Signed-off-by: Khem Raj <raj.khem at gmail.com>
>>> ---
>>>  libubacktrace/Makefile.in       |   26 ++++++++--
>>>  libubacktrace/arm/Makefile.arch |   21 ++++++++
>>>  libubacktrace/arm/backtrace.c   |  104 +++++++++++++++++++++++++++++++++++++++
>>>  3 files changed, 145 insertions(+), 6 deletions(-)
>>>  create mode 100644 libubacktrace/arm/Makefile.arch
>>>  create mode 100644 libubacktrace/arm/backtrace.c
>>>
>>> diff --git a/libubacktrace/Makefile.in b/libubacktrace/Makefile.in
>>> index b18e3e6..f675bf5 100644
>>> --- a/libubacktrace/Makefile.in
>>> +++ b/libubacktrace/Makefile.in
>>> @@ -6,7 +6,7 @@
>>>  # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
>>>  #
>>>
>>> -subdirs += libubacktrace
>>> +subdirs += libubacktrace libubacktrace/$(TARGET_ARCH)
>>>
>>>  CFLAGS-libubacktrace := -DNOT_IN_libc -DIS_IN_libubacktrace $(SSP_ALL_CFLAGS)
>>>
>>> @@ -23,22 +23,36 @@ libubacktrace_FULL_NAME := libubacktrace-$(VERSION).so
>>>  libubacktrace_DIR := $(top_srcdir)libubacktrace
>>>  libubacktrace_OUT := $(top_builddir)libubacktrace
>>>
>>> +libubacktrace_ARCH_DIR:=$(libubacktrace_DIR)/$(TARGET_ARCH)
>>> +libubacktrace_ARCH_OUT:=$(libubacktrace_OUT)/$(TARGET_ARCH)
>>> +
>>> +-include $(libubacktrace_ARCH_DIR)/Makefile.arch
>>> +
>>>  libubacktrace_SRC-y :=
>>>  libubacktrace_SRC-$(UCLIBC_HAS_BACKTRACE) := backtrace.c backtracesyms.c backtracesymsfd.c
>>>
>>> +# remove generic sources, if arch specific version is present
>>> +ifneq ($(strip $(libubacktrace_ARCH_SRC-y)),)
>>> +libubacktrace_SRC-y := $(filter-out $(notdir $(libubacktrace_ARCH_SRC-y)),$(libubacktrace_SRC-y))
>>> +endif
>>> +
>>>  # -fasynchronous-unwind-tables is required for backtrace to work using dwarf2
>>>  CFLAGS-backtrace.c := -fasynchronous-unwind-tables
>>>
>>> +# pass common flags to arch dirs
>>> +ifneq ($(strip $(libubacktrace_ARCH_OBJS)),)
>>> +CFLAGS-libubacktrace/$(TARGET_ARCH)/ := $(CFLAGS-libubacktrace)
>>> +endif
>>>
>>> -libubacktrace_SRCS := $(addprefix $(libubacktrace_DIR)/,$(libubacktrace_SRC-y))
>>> +libubacktrace_SRCS := $(patsubst %.c,$(libubacktrace_DIR)/%.c,$(libubacktrace_SRC-y))
>>>  libubacktrace_OBJS := $(patsubst $(libubacktrace_DIR)/%.c,$(libubacktrace_OUT)/%.o,$(libubacktrace_SRCS))
>>>
>>>  ifeq ($(DOPIC),y)
>>> -libubacktrace-a-y := $(libubacktrace_OBJS:.o=.os)
>>> +libubacktrace-a-y += $(libubacktrace_OBJS:.o=.os)
>>>  else
>>> -libubacktrace-a-y := $(libubacktrace_OBJS)
>>> +libubacktrace-a-y += $(libubacktrace_OBJS)
>>>  endif
>>> -libubacktrace-so-y := $(libubacktrace_OBJS:.o=.os)
>>> +libubacktrace-so-y += $(libubacktrace_OBJS:.o=.os)
>>>
>>>  lib-a-$(UCLIBC_HAS_BACKTRACE) += $(top_builddir)lib/libubacktrace.a
>>>  lib-so-$(UCLIBC_HAS_BACKTRACE) += $(top_builddir)lib/libubacktrace.so
>>> @@ -61,7 +75,7 @@ $(libubacktrace_OUT)/libubacktrace_so.a: $(libubacktrace-so-y)
>>>       $(Q)$(RM) $@
>>>       $(do_ar)
>>>
>>> -$(libubacktrace_OUT)/libubacktrace.oS: $(libubacktrace_SRCS)
>>> +$(libubacktrace_OUT)/libubacktrace.oS: $(libubacktrace_SRCS) $(libubacktrace_ARCH_SRCS)
>>>       $(Q)$(RM) $@
>>>       $(compile-m)
>>>
>>> diff --git a/libubacktrace/arm/Makefile.arch b/libubacktrace/arm/Makefile.arch
>>> new file mode 100644
>>> index 0000000..dab3637
>>> --- /dev/null
>>> +++ b/libubacktrace/arm/Makefile.arch
>>> @@ -0,0 +1,21 @@
>>> +# Makefile for uClibc (libubacktrace)
>>> +#
>>> +# Author: Khem Raj <raj.khem at gmail.com>
>>> +
>>> +# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
>>> +#
>>> +
>>> +libubacktrace_ARCH_SRC-$(UCLIBC_HAS_BACKTRACE) := backtrace.c
>>> +libubacktrace_ARCH_SRCS := $(addprefix $(libubacktrace_ARCH_DIR)/,$(libubacktrace_ARCH_SRC-y))
>>> +libubacktrace_ARCH_OBJS := $(patsubst $(libubacktrace_ARCH_DIR)/%.c,$(libubacktrace_ARCH_OUT)/%.o,$(libubacktrace_ARCH_SRCS))
>>> +
>>> +ifeq ($(DOPIC),y)
>>> +libubacktrace-a-y+=$(libubacktrace_ARCH_OBJS:.o=.os)
>>> +else
>>> +libubacktrace-a-y+=$(libubacktrace_ARCH_OBJS)
>>> +endif
>>> +libubacktrace-so-y+=$(libubacktrace_ARCH_OBJS:.o=.os)
>>> +
>>> +ifeq ($(CONFIG_ARM_EABI),y)
>>> +LIBGCC += $(shell $(CC) -print-file-name=libgcc_eh.a)
>>> +endif
>> with my proposed patch to move __aeabi_unwind_cpp_pr in uclibc_shared.a
>> should not be needed.
> lets make this change after you have installed that patch. For now I will
> keep it.
>

so, do we agree on that patch ?

thanks,
carmelo



More information about the uClibc mailing list