On Sun, 23 May 2021 07:08:38 -0700
[email protected] wrote:

> cc -O2 -pipe -D__BUILTIN_HACK -Wall -ggdb3 -I/usr/local/include  -MD -MP  
> -nostdinc -idirafter /usr/include -c backtrace.c -o backtrace.o
> error: return address can be determined only for current frame
> error: return address can be determined only for current frame
> 2 errors generated.

Does this diff help?  It avoids _builtin_frame_address(1), but I don't
know if it would fix your compiler error.

We pass -D__BUILTIN_HACK on mips64* | hppa | sh to disable most of the
backtrace code.  I don't have the hardware to check.

--George

Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/libexecinfo/Makefile,v
retrieving revision 1.26
diff -u -p -r1.26 Makefile
--- Makefile    3 Jan 2020 15:16:59 -0000       1.26
+++ Makefile    26 May 2021 00:46:48 -0000
@@ -9,7 +9,7 @@ GH_PROJECT=     backtrace
 DISTNAME =     ${GH_PROJECT}-${V}
 PKGNAME =      libexecinfo-$V
 EPOCH =                0
-REVISION =     2
+REVISION =     3
 CATEGORIES =   devel
 
 SHARED_LIBS =  execinfo        2.0
Index: patches/patch-libbacktrace_backtrace_c
===================================================================
RCS file: /cvs/ports/devel/libexecinfo/patches/patch-libbacktrace_backtrace_c,v
retrieving revision 1.4
diff -u -p -r1.4 patch-libbacktrace_backtrace_c
--- patches/patch-libbacktrace_backtrace_c      11 Mar 2016 19:46:13 -0000      
1.4
+++ patches/patch-libbacktrace_backtrace_c      26 May 2021 00:46:48 -0000
@@ -3,17 +3,22 @@ $OpenBSD: patch-libbacktrace_backtrace_c
 - __builtin_return_address() and __builtin_frame_address()
   may not always have a !0 argument.
 
---- libbacktrace/backtrace.c.orig      Thu Mar  3 10:15:09 2016
-+++ libbacktrace/backtrace.c   Thu Mar  3 10:15:38 2016
-@@ -65,6 +65,7 @@ bt_create_backtrace(void **buffer, int depth, int flag
+Index: libbacktrace/backtrace.c
+--- libbacktrace/backtrace.c.orig
++++ libbacktrace/backtrace.c
+@@ -64,7 +64,10 @@ bt_create_backtrace(void **buffer, int depth, int flag
+       do {
                /* number of HANDLE_FRAME must match BT_MAX_DEPTH */
                switch (i) {
-               HANDLE_FRAME(0, i, addr);
+-              HANDLE_FRAME(0, i, addr);
++              case 0:
++                      addr = __builtin_return_address(0);
++                      break;
 +#ifndef __BUILTIN_HACK
                HANDLE_FRAME(1, i, addr);
                HANDLE_FRAME(2, i, addr);
                HANDLE_FRAME(3, i, addr);
-@@ -192,6 +193,7 @@ bt_create_backtrace(void **buffer, int depth, int flag
+@@ -192,6 +195,7 @@ bt_create_backtrace(void **buffer, int depth, int flag
                HANDLE_FRAME(125, i, addr);
                HANDLE_FRAME(126, i, addr);
                HANDLE_FRAME(127, i, addr);

Reply via email to