libcamera: base: Suppress clang-11 compile error on ARM32

Compiling backtrace.cpp for ARM32 produces the following error with the
clang-11 (and later) compiler:

--------------------
../src/libcamera/base/backtrace.cpp:195:12: error: use of SP or PC in the list is deprecated [-Werror,-Winline-asm]
        int ret = unw_getcontext(&uc);
                  ^
/usr/include/arm-linux-gnueabihf/libunwind-common.h:114:29: note: expanded from macro 'unw_getcontext'
                                        ^
/usr/include/arm-linux-gnueabihf/libunwind-arm.h:270:5: note: expanded from macro 'unw_tdep_getcontext'
    "stmia %[base], {r0-r15}"                                           \
    ^
<inline asm>:1:2: note: instantiated into assembly here
        stmia r0, {r0-r15}
--------------------

Suppress this compilation error with a clang-specific pragma around the
offending statements.

Further information about this error can be found at
https://github.com/dotnet/runtime/issues/38652

Bug: https://bugs.libcamera.org/show_bug.cgi?id=136
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Tested-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Naushir Patuck <naush@rasbperrypi.com>
Tested-by: Naushir Patuck <naush@rasbperrypi.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Naushir Patuck 2022-07-12 14:01:38 +01:00 committed by Laurent Pinchart
parent ba6435930f
commit 1fa2d579de

View file

@ -191,10 +191,22 @@ __attribute__((__noinline__))
bool Backtrace::unwindTrace()
{
#if HAVE_UNWIND
/*
* unw_getcontext() for ARM32 is an inline assembly function using the stmia
* instruction to store SP and PC. This is considered by clang-11 as deprecated,
* and generates a warning.
*/
#ifdef __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Winline-asm"
#endif
unw_context_t uc;
int ret = unw_getcontext(&uc);
if (ret)
return false;
#ifdef __clang__
#pragma clang diagnostic pop
#endif
unw_cursor_t cursor;
ret = unw_init_local(&cursor, &uc);