Re: [PATCH] libubacktrace: Add arm implementation

2012-01-22 Thread Khem Raj
On Sun, Jan 22, 2012 at 1:38 AM, Carmelo Amoroso  wrote:
> On 21/01/12 20:42, Khem Raj wrote:
>> On Sat, Jan 21, 2012 at 6:47 AM, Carmelo AMOROSO  
>> 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 
 ---
  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 000..dab3637
 --- /dev/null
 +++ b/libubacktrace/arm/Makefile.arch
 @@ -0,0 +1,21 @@
 +# Makefile for uClibc (libubacktrace)
 +#
 +# Author: Khem Raj 
 +
 +# 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 ?

I havent really looked into yet.

>
> thanks,
> carmelo
>
> ___
> uClibc mailing list
> uClibc@uclibc.org
> http://lists.busybox

Re: [PATCH] libubacktrace: Add arm implementation

2012-01-22 Thread Carmelo Amoroso
On 21/01/12 20:42, Khem Raj wrote:
> On Sat, Jan 21, 2012 at 6:47 AM, Carmelo AMOROSO  
> 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 
>>> ---
>>>  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 000..dab3637
>>> --- /dev/null
>>> +++ b/libubacktrace/arm/Makefile.arch
>>> @@ -0,0 +1,21 @@
>>> +# Makefile for uClibc (libubacktrace)
>>> +#
>>> +# Author: Khem Raj 
>>> +
>>> +# 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

___
uClibc mailing list
uClibc@uclibc.org
http://lists.busybox.net/mailman/listinfo/uclibc


Re: [PATCH] libubacktrace: Add arm implementation

2012-01-21 Thread Khem Raj
On Sat, Jan 21, 2012 at 6:47 AM, Carmelo AMOROSO  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 
>> ---
>>  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 000..dab3637
>> --- /dev/null
>> +++ b/libubacktrace/arm/Makefile.arch
>> @@ -0,0 +1,21 @@
>> +# Makefile for uClibc (libubacktrace)
>> +#
>> +# Author: Khem Raj 
>> +
>> +# 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.

>
>> diff --git a/libubacktrace/arm/backtrace.c b/libubacktrace/arm/backtrace.c
>> new file mode 100644
>> index 000..8a18c6c
>> --- /dev/null
>> +++ b/libubacktrace/arm/backtrace.c
>> @@ -0,0 +1,104 @@
>> +/*
>> + * Perform stack unwinding by using the _Unwind_Backtrace.
>> + *
>> + * User application that wants to use backtrace needs to be
>> + * compiled with -fexceptions option and -rdynamic to get full
>> + * symbols printed.
>> + *
>> + * Copyright (C) 2009, 2010 STMicroelectronics Ltd.
>> + *
>> + * Author(s): Giuseppe Cavallaro 
>> + *

Re: [PATCH] libubacktrace: Add arm implementation

2012-01-21 Thread Carmelo AMOROSO
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 
> ---
>  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 000..dab3637
> --- /dev/null
> +++ b/libubacktrace/arm/Makefile.arch
> @@ -0,0 +1,21 @@
> +# Makefile for uClibc (libubacktrace)
> +#
> +# Author: Khem Raj 
> +
> +# 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.

> diff --git a/libubacktrace/arm/backtrace.c b/libubacktrace/arm/backtrace.c
> new file mode 100644
> index 000..8a18c6c
> --- /dev/null
> +++ b/libubacktrace/arm/backtrace.c
> @@ -0,0 +1,104 @@
> +/*
> + * Perform stack unwinding by using the _Unwind_Backtrace.
> + *
> + * User application that wants to use backtrace needs to be
> + * compiled with -fexceptions option and -rdynamic to get full
> + * symbols printed.
> + *
> + * Copyright (C) 2009, 2010 STMicroelectronics Ltd.
> + *
> + * Author(s): Giuseppe Cavallaro 
> + * - Initial implementation for glibc
> + *
> + * Author(s): Carmelo Amoroso 
> + * - Reworked for uClibc
> + *   - use dlsym/dlopen from libdl
> + *   - rewrite initialisation to not use libc_once
> + *   - make it available in static link too
> + *

fell free to remov

[PATCH] libubacktrace: Add arm implementation

2012-01-21 Thread Khem Raj
Arm has a different mechanism of getting
_Unwind_GetIP. Therefore we profile arch
specific backtrace file.

Signed-off-by: Khem Raj 
---
 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 000..dab3637
--- /dev/null
+++ b/libubacktrace/arm/Makefile.arch
@@ -0,0 +1,21 @@
+# Makefile for uClibc (libubacktrace)
+#
+# Author: Khem Raj 
+
+# 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
diff --git a/libubacktrace/arm/backtrace.c b/libubacktrace/arm/backtrace.c
new file mode 100644
index 000..8a18c6c
--- /dev/null
+++ b/libubacktrace/arm/backtrace.c
@@ -0,0 +1,104 @@
+/*
+ * Perform stack unwinding by using the _Unwind_Backtrace.
+ *
+ * User application that wants to use backtrace needs to be
+ * compiled with -fexceptions option and -rdynamic to get full
+ * symbols printed.
+ *
+ * Copyright (C) 2009, 2010 STMicroelectronics Ltd.
+ *
+ * Author(s): Giuseppe Cavallaro 
+ * - Initial implementation for glibc
+ *
+ * Author(s): Carmelo Amoroso 
+ * - Reworked for uClibc
+ *   - use dlsym/dlopen from libdl
+ *   - rewrite initialisation to not use libc_once
+ *   - make it available in static link too
+ *
+ * Author(s): Khem Raj 
+ * - Add arm specific implementation
+ *
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ *
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+struct trace_arg
+{
+  void **array;
+  int cnt, size;
+};
+
+static _Unwind_Reason_Code (*unwind_backtrace) (_Unwind_Trace_Fn, void *);
+static _Unwind_VRS_Result (*unwind_vrs_get) (_Unwind_Context