From 3026d7e1d330348d044e6c1f6b7a27f3c013b9a3 Mon Sep 17 00:00:00 2001 From: Yonghong Song Date: Mon, 31 Dec 2018 14:27:51 -0800 Subject: [PATCH] better error meessage for error "unknown opcode" fix issue #226 The unknown opcode typically happens if the bpf program has an external reference which does not get resolved. Note bcc does not even preform relocations for maps as map_id is directly used in bpf problem through bpf_pseudo_fd() intrinsic. Instead of the error: bpf: Failed to load program: Invalid argument unknown opcode 00 A little explanation is added like the below: HINT: The 'unknown opcode' can happen if you referencea global or static variable, or data in read only section. For example,'char *p = "hello"' will result in p referencing a read only section,and 'char p[] = "hello"' will have "hello" stored on the stack. Signed-off-by: Yonghong Song --- src/cc/libbpf.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/cc/libbpf.c b/src/cc/libbpf.c index f72a1249a831..cd2dee45af6d 100644 --- a/src/cc/libbpf.c +++ b/src/cc/libbpf.c @@ -344,6 +344,14 @@ static void bpf_print_hints(int ret, char *log) "you'll need to be explicit.\n\n"); } + // referencing global/static variables or read only data + if (strstr(log, "unknown opcode") != NULL) { + fprintf(stderr, "HINT: The 'unknown opcode' can happen if you reference" + "a global or static variable, or data in read only section. For example," + "'char *p = \"hello\"' will result in p referencing a read only section," + " and 'char p[] = \"hello\"' will have \"hello\" stored on the stack.\n\n"); + } + // helper function not found in kernel char *helper_str = strstr(log, "invalid func "); if (helper_str != NULL) {