This is the mail archive of the gdb@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Possible improvement to i386 function prologue analysis.


Hi,

This is in reference to GDB's function prologue analysis (and updation of its internal register cache therefrom) on the x86 architecture.
GDB file: gdb/i386-tdep.c


i386_analyze_frame_setup() takes care of
"Check for some special instructions that might be migrated by
        GCC into the prologue and skip them.  At this point in the
        prologue, code should only touch the scratch registers %eax,
        %ecx and %edx,.."

Instances have been observed when GCC generates these instructions between the prologue "push" instructions; for example, the following from the objdump of gdb:

0807a380 <captured_main>:
807a380:       55                      push   %ebp
807a381:       31 c0                   xor    %eax,%eax
807a383:       89 e5                   mov    %esp,%ebp
807a385:       57                      push   %edi
807a386:       31 d2                   xor    %edx,%edx
807a388:       31 c9                   xor    %ecx,%ecx
807a38a:       56                      push   %esi
807a38b:       53                      push   %ebx
807a38c:       81 ec 4c 01 00 00       sub    $0x14c,%esp

In the above instance, the function "i386_analyze_register_saves()", which takes care of populating the frame cache, will fail after reading the first register %edi.

Please suggest if it would be worthwhile to work on a similar check for special instructions within the for loop in i386_analyze_register_saves().
This will enable it to continue reading saved registers over such occurances.
I could work on a possible patch if you agree.


Thanks,
Ashish Mittal.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]