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 carmelo.amor...@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.k...@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 000..dab3637
 --- /dev/null
 +++ b/libubacktrace/arm/Makefile.arch
 @@ -0,0 +1,21 @@
 +# Makefile for uClibc (libubacktrace)
 +#
 +# Author: Khem Raj raj.k...@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

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


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

 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 peppe.cavall...@st.com
 + * - Initial implementation for glibc
 + *
 + * Author(s): Carmelo Amoroso carmelo.amor...@st.com
 + * - 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 remove old authorship

 + * Author(s): Khem Raj 

Re: [PATCH] libubacktrace: Add arm implementation

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


 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 peppe.cavall...@st.com
 + * - Initial implementation for glibc
 + *
 + * Author(s): Carmelo Amoroso carmelo.amor...@st.com
 + * - Reworked for uClibc
 + *   - use dlsym/dlopen from libdl
 + *   - rewrite