[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gcc-patches
Subject:    [[PATCH V9] 6/7] Enable BTF generation in the BPF backend
From:       "Jose E. Marchesi via Gcc-patches" <gcc-patches () gcc ! gnu ! org>
Date:       2021-05-31 16:58:01
Message-ID: 20210531165802.5686-7-jose.marchesi () oracle ! com
[Download RAW message or body]

This patch changes the BPF GCC backend in order to use the DWARF debug
hooks and therefore enables the user to generate BTF debugging
information with -gbtf.  Generating BTF is crucial when compiling BPF
programs, since the CO-RE (compile-once, run-everwhere) mechanism
used by the kernel BPF loader relies on it.

Note that since in eBPF it is not possible to unwind frames due to the
restrictive nature of the target architecture, we are disabling the
generation of CFA in this target.

2021-05-14  David Faust <david.faust@oracle.com>

	* config/bpf/bpf.c (bpf_expand_prologue): Do not mark insns as
	frame related.
	(bpf_expand_epilogue): Likewise.
	* config/bpf/bpf.h (DWARF2_FRAME_INFO): Define to 0.
	Do not define DBX_DEBUGGING_INFO.
---
 gcc/config/bpf/bpf.c |  4 ----
 gcc/config/bpf/bpf.h | 12 ++----------
 2 files changed, 2 insertions(+), 14 deletions(-)

diff --git a/gcc/config/bpf/bpf.c b/gcc/config/bpf/bpf.c
index 126d4a2798d..e635f9edb40 100644
--- a/gcc/config/bpf/bpf.c
+++ b/gcc/config/bpf/bpf.c
@@ -349,7 +349,6 @@ bpf_expand_prologue (void)
 						      hard_frame_pointer_rtx,
 						      fp_offset - 8));
 		  insn = emit_move_insn (mem, gen_rtx_REG (DImode, regno));
-		  RTX_FRAME_RELATED_P (insn) = 1;
 		  fp_offset -= 8;
 		}
 	    }
@@ -364,7 +363,6 @@ bpf_expand_prologue (void)
     {
       insn = emit_move_insn (stack_pointer_rtx,
 			     hard_frame_pointer_rtx);
-      RTX_FRAME_RELATED_P (insn) = 1;
 
       if (size > 0)
 	{
@@ -372,7 +370,6 @@ bpf_expand_prologue (void)
 					 gen_rtx_PLUS (Pmode,
 						       stack_pointer_rtx,
 						       GEN_INT (-size))));
-	  RTX_FRAME_RELATED_P (insn) = 1;
 	}
     }
 }
@@ -412,7 +409,6 @@ bpf_expand_epilogue (void)
 						      hard_frame_pointer_rtx,
 						      fp_offset - 8));
 		  insn = emit_move_insn (gen_rtx_REG (DImode, regno), mem);
-		  RTX_FRAME_RELATED_P (insn) = 1;
 		  fp_offset -= 8;
 		}
 	    }
diff --git a/gcc/config/bpf/bpf.h b/gcc/config/bpf/bpf.h
index 4c5b19e262b..55beecbcb36 100644
--- a/gcc/config/bpf/bpf.h
+++ b/gcc/config/bpf/bpf.h
@@ -235,17 +235,9 @@ enum reg_class
 
 /**** Debugging Info ****/
 
-/* We cannot support DWARF2 because of the limitations of eBPF.  */
+/* In eBPF it is not possible to unwind frames. Disable CFA.  */
 
-/* elfos.h insists in using DWARF.  Undo that here.  */
-#ifdef DWARF2_DEBUGGING_INFO
-# undef DWARF2_DEBUGGING_INFO
-#endif
-#ifdef PREFERRED_DEBUGGING_TYPE
-# undef PREFERRED_DEBUGGING_TYPE
-#endif
-
-#define DBX_DEBUGGING_INFO
+#define DWARF2_FRAME_INFO 0
 
 /**** Stack Layout and Calling Conventions.  */
 
-- 
2.25.0.2.g232378479e

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic