[llvm] [llvm-symbolizer] restore --[no-]use-symbol-table option (PR #71008)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 1 18:04:58 PDT 2023
https://github.com/quic-likaid created https://github.com/llvm/llvm-project/pull/71008
Linux kernel modules don't have section address set statically. During kernel fuzzing, we may get a fuction address but llvm-symbolizer ends up with a static variable, because in symbolizer's view, bss and text sections both starts from 0, and thus overlap.
The option was unintentionally removed by 593e196, and remained as a no-op since 3d54976. Adding back the option allows us to prevent the undesired behaviour.
>From 128db1ae2ac38ad7f2e0abda45d7bcb4048a1fd2 Mon Sep 17 00:00:00 2001
From: Kevin Ding <quic_likaid at quicinc.com>
Date: Tue, 31 Oct 2023 14:59:14 +0800
Subject: [PATCH] [llvm-symbolizer] restore --[no-]use-symbol-table option
Linux kernel modules don't have section address set statically. During
kernel fuzzing, we may get a fuction address but llvm-symbolizer ends
up with a static variable, because in symbolizer's view, bss and text
sections both starts from 0, and thus overlap.
The option was unintentionally removed by 593e196, and remained as a
no-op since 3d54976. Adding back the option allows us to prevent the
undesired behaviour.
---
llvm/docs/CommandGuide/llvm-symbolizer.rst | 10 ++++++++++
llvm/tools/llvm-symbolizer/Opts.td | 2 ++
llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp | 3 ++-
3 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/llvm/docs/CommandGuide/llvm-symbolizer.rst b/llvm/docs/CommandGuide/llvm-symbolizer.rst
index fe5df077b45664d..a85dbdfef47d408 100644
--- a/llvm/docs/CommandGuide/llvm-symbolizer.rst
+++ b/llvm/docs/CommandGuide/llvm-symbolizer.rst
@@ -303,6 +303,11 @@ OPTIONS
Don't print demangled function names.
+.. option:: --no-use-symbol-table
+
+ Don't prefer function names stored in symbol table to function names in debug
+ info sections.
+
.. option:: --obj <path>, --exe, -e
Path to object file to be symbolized. If ``-`` is specified, read the object
@@ -447,6 +452,11 @@ OPTIONS
of the absolute path. If the command-line to the compiler included
the full path, this will be the same as the default.
+.. option:: --use-symbol-table
+
+ Prefer function names stored in symbol table to function names in debug info
+ sections. This is the default.
+
.. option:: --verbose
Print verbose address, line and column information.
diff --git a/llvm/tools/llvm-symbolizer/Opts.td b/llvm/tools/llvm-symbolizer/Opts.td
index 6742e086d6ff954..29d376457a929b0 100644
--- a/llvm/tools/llvm-symbolizer/Opts.td
+++ b/llvm/tools/llvm-symbolizer/Opts.td
@@ -57,6 +57,8 @@ def relative_address : F<"relative-address", "Interpret addresses as addresses r
def relativenames : F<"relativenames", "Strip the compilation directory from paths">;
defm untag_addresses : B<"untag-addresses", "", "Remove memory tags from addresses before symbolization">;
def use_dia: F<"dia", "Use the DIA library to access symbols (Windows only)">;
+defm use_symbol_table : B<"use-symbol-table", "Prefer function names stored in symbol table",
+ "Don't prefer function names stored in symbol table">;
def verbose : F<"verbose", "Print verbose line info">;
def version : F<"version", "Display the version">;
diff --git a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
index 78a0e6772f3fb36..646bcd163e93c32 100644
--- a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
+++ b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
@@ -469,7 +469,8 @@ int llvm_symbolizer_main(int argc, char **argv, const llvm::ToolContext &) {
Opts.UseDIA = false;
}
#endif
- Opts.UseSymbolTable = true;
+ Opts.UseSymbolTable =
+ Args.hasFlag(OPT_use_symbol_table, OPT_no_use_symbol_table, true);
if (Args.hasArg(OPT_cache_size_EQ))
parseIntArg(Args, OPT_cache_size_EQ, Opts.MaxCacheSize);
Config.PrintAddress = Args.hasArg(OPT_addresses);
More information about the llvm-commits
mailing list