[Crash-utility] Re: [PATCH] gdb: fix the "p" command incorrectly print the value of a global variable

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Lianbo,

On Wed, Apr 3, 2024 at 5:48 PM lijiang <lijiang@xxxxxxxxxx> wrote:
>
> Hi, Tao
> Thanks for the comments.
> On Wed, Apr 3, 2024 at 11:45 AM Tao Liu <ltao@xxxxxxxxxx> wrote:
>>
>> Hi Lianbo,
>>
>> On Wed, Mar 6, 2024 at 2:32 PM Lianbo Jiang <lijiang@xxxxxxxxxx> wrote:
>> >
>> > Some objects format may potentially support copy relocations, but
>> > currently the maybe_copied is always initialized to 0 in the symbol().
>> > And the type is 'mst_file_bss', not always the 'mst_bss' or 'mst_data'
>> > in the lookup_minimal_symbol_linkage(). For example:
>> >
>> > (gdb) p *msymbol
>> > $42 = {<general_symbol_info> = {m_name = 0x349812f "test_no_static", value = {ivalue = 8, block = 0x8,
>> >       bytes = 0x8 <error: Cannot access memory at address 0x8>, address = 8, common_block = 0x8, chain = 0x8}, language_specific = {
>> >       obstack = 0x0, demangled_name = 0x0}, m_language = language_auto, ada_mangled = 0, section = 20}, size = 4,
>> >   filename = 0x6db3440 "test_sanity.c", type = mst_file_bss, created_by_gdb = 0, target_flag_1 = 0, target_flag_2 = 0, has_size = 1,
>> >   maybe_copied = 0, name_set = 1, hash_next = 0x0, demangled_hash_next = 0x0}
>> >
>> The whole bug is around test_no_static, which is a static variable in
>> the ko. However the added code to lookup_minimal_symbol_linkage() is
>> mst_file_bss/mst_file_data. So I guess test_no_static's symbol type
>
>
> Just to be safe I added the type 'mst_file_data' check, because there might be a similar situation, but I can not prove it for the time being. Do you have any specific concerns about it?

Sorry, I re-read the output of "p *msymbol". The symbol you are
printing is "test_no_static", and it belongs to file "test_sanity.c",
and its type is "mst_file_bss", which makes sense. I thought you were
printing some symbol else instead of "test_no_static". Sorry about
that.

Thanks,
Tao Liu

>
>
>> should be one of the 2 right? If that is the case, I suggest printing
>> "test_no_static" instead of "test_sanity.c" for "p *msymbol", so it
>> can be clearer for the adding of mst_file_bss/mst_file_data.
>> Personally I think the symbol "test_sanity.c" doesn't make sense here.
>>
>
> The "test_sanity.c" is a module name, and the "test_no_static" is a static variable in this module.
>
> I just printed the debug info to help understand the current issue. In fact, the current issue happened in the productive environment, and the test module "test_sanity.c" is only used to help reproduce this issue.
>
> Hope this helps.
>
> Thanks
> Lianbo
>
>> Thanks,
>> Tao Liu
>>
>> > This causes a problem that the 'p' command can not work well as
>> > expected, and always gets an error:
>> >
>> >   crash> mod -s test_sanity /home/test_sanity.ko
>> >        MODULE       NAME                         BASE           SIZE  OBJECT FILE
>> >   ffffffffc1084040  test_sanity            ffffffffc1082000    16384  /home/test_sanity.ko
>> >   crash> p test_no_static
>> >   p: gdb request failed: p test_no_static
>> >   crash>
>> >
>> > With the patch:
>> >   crash> mod -s test_sanity /home/test_sanity.ko
>> >        MODULE       NAME                         BASE           SIZE  OBJECT FILE
>> >   ffffffffc1084040  test_sanity            ffffffffc1082000    16384  /home/test_sanity.ko
>> >   crash> p test_no_static
>> >   test_no_static = $1 = 5
>> >   crash>
>> >
>> > Signed-off-by: Lianbo Jiang <lijiang@xxxxxxxxxx>
>> > ---
>> > Here is the test case:
>> > #include <linux/kernel.h>
>> > #include <linux/module.h>
>> >
>> > int test_no = 0;
>> > static int test_no_static = 0;
>> >
>> > static int test_init(void)
>> > {
>> >        test_no += 5;
>> >        test_no_static += 5;
>> >        printk(KERN_INFO "%d static=%d\n", test_no, test_no_static);
>> >        return 0;
>> > }
>> > static void test_exit(void)
>> >
>> > {
>> >        test_no += 7;
>> >        test_no_static += 7;
>> >        printk(KERN_INFO "%d static=%d\n", test_no, test_no_static);
>> > }
>> > module_init(test_init);
>> > module_exit(test_exit);
>> > MODULE_LICENSE("GPL");
>> >
>> >
>> >  gdb-10.2.patch | 24 ++++++++++++++++++++++++
>> >  1 file changed, 24 insertions(+)
>> >
>> > diff --git a/gdb-10.2.patch b/gdb-10.2.patch
>> > index a7018a249118..35388ba03e25 100644
>> > --- a/gdb-10.2.patch
>> > +++ b/gdb-10.2.patch
>> > @@ -16057,3 +16057,27 @@ exit 0
>> >   m10200-dis.c
>> >   m10200-opc.c
>> >   m10300-dis.c
>> > +--- gdb-10.2/gdb/minsyms.c.orig
>> > ++++ gdb-10.2/gdb/minsyms.c
>> > +@@ -535,7 +535,9 @@ lookup_minimal_symbol_linkage (const char *name, struct objfile *objf)
>> > +       {
>> > +         if (strcmp (msymbol->linkage_name (), name) == 0
>> > +             && (MSYMBOL_TYPE (msymbol) == mst_data
>> > +-                || MSYMBOL_TYPE (msymbol) == mst_bss))
>> > ++                || MSYMBOL_TYPE (msymbol) == mst_bss
>> > ++                || MSYMBOL_TYPE (msymbol) == mst_file_bss
>> > ++                || MSYMBOL_TYPE (msymbol) == mst_file_data))
>> > +           return {msymbol, objfile};
>> > +       }
>> > +     }
>> > +--- gdb-10.2/gdb/symtab.h.orig
>> > ++++ gdb-10.2/gdb/symtab.h
>> > +@@ -1110,7 +1110,7 @@ struct symbol : public general_symbol_info, public allocate_on_obstack
>> > +       is_objfile_owned (1),
>> > +       is_argument (0),
>> > +       is_inlined (0),
>> > +-      maybe_copied (0),
>> > ++      maybe_copied (1),/* The objfile potentially supports copy relocations. */
>> > +       subclass (SYMBOL_NONE)
>> > +     {
>> > +       /* We can't use an initializer list for members of a base class, and
>> > --
>> > 2.41.0
>> > --
>> > Crash-utility mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxxxxxx
>> > To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxxxxxx
>> > https://${domain_name}/admin/lists/devel.lists.crash-utility.osci.io/
>> > Contribution Guidelines: https://github.com/crash-utility/crash/wiki
>>
--
Crash-utility mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxxxxxx
https://${domain_name}/admin/lists/devel.lists.crash-utility.osci.io/
Contribution Guidelines: https://github.com/crash-utility/crash/wiki




[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux