The DW_CFA_GNU_args_size DWARF CFI instruction is used by GCC to track
the size of arguments pushed on the stack for exception handling
purposes.  It is not needed for stack tracing.

Signed-off-by: Jens Remus <[email protected]>
---

Notes (jremus):
    This patch could be squashed into "unwind_user/eh_frame: Add support for
    reading .eh_frame section".  Leaving separate for review.

 kernel/unwind/eh_frame.c | 11 +++++++++++
 kernel/unwind/eh_frame.h |  1 +
 2 files changed, 12 insertions(+)

diff --git a/kernel/unwind/eh_frame.c b/kernel/unwind/eh_frame.c
index 1ac7308814a1..d185187b0c34 100644
--- a/kernel/unwind/eh_frame.c
+++ b/kernel/unwind/eh_frame.c
@@ -980,6 +980,17 @@ static __always_inline int __do_cfi_insn(struct 
eh_frame_section *sec,
                        break;
                }
 
+               case DW_CFA_GNU_args_size: {
+                       unsigned long args_size;
+
+                       ret = read_uleb128(&cur, end, &args_size);
+                       if (ret)
+                               return ret;
+
+                       /* Ignore DW_CFA_GNU_args_size */
+                       break;
+               }
+
                case DW_CFA_remember_state:
                        if (ctx->stack_depth >= EH_FRAME_MAX_STATE_STACK)
                                return -EINVAL;
diff --git a/kernel/unwind/eh_frame.h b/kernel/unwind/eh_frame.h
index 9a0c71102742..a43560486283 100644
--- a/kernel/unwind/eh_frame.h
+++ b/kernel/unwind/eh_frame.h
@@ -29,6 +29,7 @@
 #define DW_CFA_val_offset              0x14
 #define DW_CFA_val_offset_sf           0x15
 #define DW_CFA_val_expression          0x16
+#define DW_CFA_GNU_args_size           0x2e
 
 /* Helpers for CFI opcodes */
 #define DW_CFA_opcode(insn)            ((insn) & 0xc0)
-- 
2.53.0


Reply via email to