Revision: 22417
          http://gar.svn.sourceforge.net/gar/?rev=22417&view=rev
Author:   pfelecan
Date:     2013-11-06 11:38:12 +0000 (Wed, 06 Nov 2013)
Log Message:
-----------
avidemux/trunk: instead of NOPing the crash dump feature, implement
one for Solaris

Modified Paths:
--------------
    csw/mgar/pkg/avidemux/trunk/Makefile

Added Paths:
-----------
    csw/mgar/pkg/avidemux/trunk/files/0005-implement-solaris-crashdump.patch

Removed Paths:
-------------
    csw/mgar/pkg/avidemux/trunk/files/0005-make-crashdump-NOP.patch

Modified: csw/mgar/pkg/avidemux/trunk/Makefile
===================================================================
--- csw/mgar/pkg/avidemux/trunk/Makefile        2013-11-06 11:14:40 UTC (rev 
22416)
+++ csw/mgar/pkg/avidemux/trunk/Makefile        2013-11-06 11:38:12 UTC (rev 
22417)
@@ -21,7 +21,7 @@
 PATCHFILES             +=      0002-cmake-verbosity-management.patch
 PATCHFILES             +=      0003-use-not-as-needed-linker-option.patch
 PATCHFILES             +=      0004-fix-processors-cardinality-gathering.patch
-PATCHFILES             +=      0005-make-crashdump-NOP.patch
+PATCHFILES             +=      0005-implement-solaris-crashdump.patch
 PATCHFILES             +=      0006-abs-desabiguation.patch
 PATCHFILES             +=      0007-abs-desabiguation-2.patch
 PATCHFILES             +=      
0008-fix-text-relocation-remains-referenced.patch

Added: csw/mgar/pkg/avidemux/trunk/files/0005-implement-solaris-crashdump.patch
===================================================================
--- csw/mgar/pkg/avidemux/trunk/files/0005-implement-solaris-crashdump.patch    
                        (rev 0)
+++ csw/mgar/pkg/avidemux/trunk/files/0005-implement-solaris-crashdump.patch    
2013-11-06 11:38:12 UTC (rev 22417)
@@ -0,0 +1,192 @@
+From 3020afed1938e54ea5d142760e7946cd93bb4ad0 Mon Sep 17 00:00:00 2001
+From: Peter Felecan <[email protected]>
+Date: Wed, 6 Nov 2013 11:55:37 +0100
+Subject: [PATCH] implement solaris crashdump
+
+---
+ avidemux_core/ADM_core/src/ADM_crashdump_unix.cpp | 118 ++++++++++++++++++++--
+ 1 file changed, 111 insertions(+), 7 deletions(-)
+
+diff --git a/avidemux_core/ADM_core/src/ADM_crashdump_unix.cpp 
b/avidemux_core/ADM_core/src/ADM_crashdump_unix.cpp
+index 891325f..2ae15d9 100644
+--- a/avidemux_core/ADM_core/src/ADM_crashdump_unix.cpp
++++ b/avidemux_core/ADM_core/src/ADM_crashdump_unix.cpp
+@@ -21,7 +21,18 @@
+ #include <unistd.h>
+ #include <cxxabi.h>
+ #include <signal.h>
++#if defined(__sun__)
++#include <dlfcn.h>
++#include <strings.h>
++#include <ucontext.h>
++#include <sys/stack.h>
++#ifdef _LP64
++#define       _ELF64
++#endif
++#include <sys/machelf.h>
++#else
+ #include <execinfo.h>
++#endif
+ 
+ #include "ADM_default.h"
+ 
+@@ -54,15 +65,102 @@ void installSigHandler()
+ void sig_segfault_handler(int signo)
+ {
+      static int running=0;
+-      if(running) 
++      if(running)
+       {
+         signo=0;
+         exit(1);
+       }
+-      running=0; 
++      running=0;
+       ADM_backTrack("Segfault",0,"??");
+ }
+ 
++#if defined(__sun__)
++static const int maxSize = 2048;
++
++static void addr2sym(void* pc, char* buffer, int size)
++{
++      Dl_info info;
++      Sym* sym = (Sym*)0;
++      static size_t dsize = maxSize - 1;
++      static char demangled[maxSize];
++      int dstatus = 0;
++
++      if (dladdr1(pc, &info, (void**)&sym, RTLD_DL_SYMENT) == 0)
++      {
++              snprintf(buffer, size, "[0x%p]", pc);
++      }
++
++      if ((info.dli_fname != NULL && info.dli_sname != NULL) &&
++          (((uintptr_t)pc - (uintptr_t)info.dli_saddr) < sym->st_size))
++      {
++              
__cxxabiv1::__cxa_demangle(info.dli_sname,demangled,&dsize,&dstatus);
++              snprintf(buffer, size, "%s'%s+0x%x [0x%p]",
++                               info.dli_fname,
++                               demangled,
++                               (unsigned long)pc - (unsigned 
long)info.dli_saddr,
++                               pc);
++      }
++      else
++      {
++              snprintf(buffer, size, "%s'0x%p [0x%p]",
++                               info.dli_fname,
++                               (unsigned long)pc - (unsigned 
long)info.dli_fbase,
++                               pc);
++      }
++
++      return;
++}
++
++static void printFrame(int fd, const char* format, ...)
++{
++      va_list ap;
++      static char buffer[maxSize];
++
++      va_start(ap, format);
++      (void)vsnprintf(buffer, sizeof (buffer), format, ap);
++      va_end(ap);
++
++      (void)write(fd, buffer, strlen(buffer));
++}
++
++static int printStack(uintptr_t pc, int signo, void *arg)
++{
++
++      static char buffer[maxSize];
++      char sigbuf[SIG2STR_MAX];
++
++
++      int filenum = (intptr_t)arg;
++
++      addr2sym((void *)pc, buffer, sizeof (buffer));
++
++      if (signo) {
++              sigbuf[0] = '?';
++              sigbuf[1] = 0;
++
++              (void) sig2str(signo, sigbuf);
++
++              printFrame(filenum, "%s [Signal %d (%s)]\n",
++                  buffer, (ulong_t)signo, sigbuf);
++      } else
++              printFrame(filenum, "%s\n", buffer);
++
++      return (0);
++}
++
++static int backtrace(int fd)
++{
++      int rc = -1;
++      ucontext_t u;
++
++      if (getcontext(&u) >= 0)
++      {
++              rc = walkcontext(&u, printStack, (void*)(intptr_t)fd);
++      }
++      return(rc);
++}
++#endif /* : defined(__sun__) */
++
+ void ADM_backTrack(const char *info,int lineno,const char *file)
+ {
+       if(mysaveFunction)
+@@ -70,23 +168,27 @@ void ADM_backTrack(const char *info,int lineno,const char 
*file)
+ 
+ #if !defined(__HAIKU__)
+       char wholeStuff[2048];
++#if !defined(__sun__)
+     char buffer[4096];
+     char in[2048];
+       void *stack[20];
+       char **functions;
+       int count, i;
+-
++#endif
+       wholeStuff[0]=0;
+ 
+       printf("\n*********** BACKTRACK **************\n");
+ 
++#if !defined(__sun__)
+       count = backtrace(stack, 20);
+       functions = backtrace_symbols(stack, count);
++#endif
+       sprintf(wholeStuff,"%s\n at line %d, file %s",info,lineno,file);
++#if !defined(__sun__)
+     int status;
+     size_t size=2047;
+     // it looks like that xxxx (functionName+0x***) XXXX
+-      for (i=0; i < count; i++) 
++      for (i=0; i < count; i++)
+       {
+         char *s=strstr(functions[i],"(");
+         buffer[0]=0;
+@@ -94,16 +196,18 @@ void ADM_backTrack(const char *info,int lineno,const char 
*file)
+         {
+             strcpy(in,s+1);
+             char *e=strstr(in,"+");
+-            *e=0;                
++            *e=0;
+             __cxxabiv1::__cxa_demangle(in,buffer,&size,&status);
+             if(status) strcpy(buffer,in);
+-        }else       
++        }else
+             strcpy(buffer,functions[i]);
+         printf("%s:%d:<%s>:%d\n",functions[i],i,buffer,status);
+               strcat(wholeStuff,buffer);
+               strcat(wholeStuff,"\n");
+       }
+-
++#else
++      backtrace(fileno(stdout));
++#endif
+       printf("*********** BACKTRACK **************\n");
+ 
+       if(myFatalFunction)
+-- 
+1.8.4.1
+

Deleted: csw/mgar/pkg/avidemux/trunk/files/0005-make-crashdump-NOP.patch
===================================================================
--- csw/mgar/pkg/avidemux/trunk/files/0005-make-crashdump-NOP.patch     
2013-11-06 11:14:40 UTC (rev 22416)
+++ csw/mgar/pkg/avidemux/trunk/files/0005-make-crashdump-NOP.patch     
2013-11-06 11:38:12 UTC (rev 22417)
@@ -1,44 +0,0 @@
-From d7022be6a4b0de461934a3ae6bc1bd1fc6d10aba Mon Sep 17 00:00:00 2001
-From: Peter Felecan <[email protected]>
-Date: Sun, 27 Oct 2013 16:26:50 +0100
-Subject: [PATCH] make crashdump NOP
-
----
- avidemux_core/ADM_core/src/ADM_crashdump_unix.cpp | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/avidemux_core/ADM_core/src/ADM_crashdump_unix.cpp 
b/avidemux_core/ADM_core/src/ADM_crashdump_unix.cpp
-index 891325f..e81de25 100644
---- a/avidemux_core/ADM_core/src/ADM_crashdump_unix.cpp
-+++ b/avidemux_core/ADM_core/src/ADM_crashdump_unix.cpp
-@@ -21,7 +21,9 @@
- #include <unistd.h>
- #include <cxxabi.h>
- #include <signal.h>
-+#if !defined(__sun__)
- #include <execinfo.h>
-+#endif /* : !defined(__sun__) */
- 
- #include "ADM_default.h"
- 
-@@ -65,6 +67,7 @@ void sig_segfault_handler(int signo)
- 
- void ADM_backTrack(const char *info,int lineno,const char *file)
- {
-+#if !defined(__sun__)
-       if(mysaveFunction)
-               mysaveFunction();
- 
-@@ -111,5 +114,9 @@ void ADM_backTrack(const char *info,int lineno,const char 
*file)
- 
-       exit(-1); // _exit(1) ???
- #endif
-+#else /* : !defined(__sun__) */
-+        printf("crashed in %s at line %d\n", file, lineno);
-+        printf("crash backtrace not implemented for SUN Solaris!\n");
-+#endif /* : !defined(__sun__) */
- }
- //EOF
--- 
-1.8.3.4
-

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

Reply via email to