Skip to content
  1. Aug 07, 2010
  2. Jul 16, 2010
  3. Apr 15, 2010
  4. Sep 21, 2009
    • Reid Kleckner's avatar
      Implement the JIT side of the GDB JIT debugging interface. To enable this · 9a10db8c
      Reid Kleckner authored
      feature, either build the JIT in debug mode to enable it by default or pass
      -jit-emit-debug to lli.
      
      Right now, the only debug information that this communicates to GDB is call
      frame information, since it's already being generated to support exceptions in
      the JIT.  Eventually, when DWARF generation isn't tied so tightly to AsmPrinter,
      it will be easy to push that information to GDB through this interface.
      
      Here's a step-by-step breakdown of how the feature works:
      
      - The JIT generates the machine code and DWARF call frame info
        (.eh_frame/.debug_frame) for a function into memory.
      - The JIT copies that info into an in-memory ELF file with a symbol for the
        function.
      - The JIT creates a code entry pointing to the ELF buffer and adds it to a
        linked list hanging off of a global descriptor at a special symbol that GDB
        knows about.
      - The JIT calls a function marked noinline that GDB knows about and has put an
        internal breakpoint in.
      - GDB catches the breakpoint and reads the global descriptor to look for new
        code.
      - When sees there is new code, it reads the ELF from the inferior's memory and
        adds it to itself as an object file.
      - The JIT continues, and the next time we stop the program, we are able to
        produce a proper backtrace.
      
      Consider running the following program through the JIT:
      
      #include <stdio.h>
      void baz(short z) {
        long w = z + 1;
        printf("%d, %x\n", w, *((int*)NULL));  // SEGFAULT here
      }
      void bar(short y) {
        int z = y + 1;
        baz(z);
      }
      void foo(char x) {
        short y = x + 1;
        bar(y);
      }
      int main(int argc, char** argv) {
        char x = 1;
        foo(x);
      }
      
      Here is a backtrace before this patch:
      Program received signal SIGSEGV, Segmentation fault.
      [Switching to Thread 0x2aaaabdfbd10 (LWP 25476)]
      0x00002aaaabe7d1a8 in ?? ()
      (gdb) bt
      #0  0x00002aaaabe7d1a8 in ?? ()
      #1  0x0000000000000003 in ?? ()
      #2  0x0000000000000004 in ?? ()
      #3  0x00032aaaabe7cfd0 in ?? ()
      #4  0x00002aaaabe7d12c in ?? ()
      #5  0x00022aaa00000003 in ?? ()
      #6  0x00002aaaabe7d0aa in ?? ()
      #7  0x01000002abe7cff0 in ?? ()
      #8  0x00002aaaabe7d02c in ?? ()
      #9  0x0100000000000001 in ?? ()
      #10 0x00000000014388e0 in ?? ()
      #11 0x00007fff00000001 in ?? ()
      #12 0x0000000000b870a2 in llvm::JIT::runFunction (this=0x1405b70,
      F=0x14024e0, ArgValues=@0x7fffffffe050)
         at /home/rnk/llvm-gdb/lib/ExecutionEngine/JIT/JIT.cpp:395
      #13 0x0000000000baa4c5 in llvm::ExecutionEngine::runFunctionAsMain
      (this=0x1405b70, Fn=0x14024e0, argv=@0x13f06f8, envp=0x7fffffffe3b0)
         at /home/rnk/llvm-gdb/lib/ExecutionEngine/ExecutionEngine.cpp:377
      #14 0x00000000007ebd52 in main (argc=2, argv=0x7fffffffe398,
      envp=0x7fffffffe3b0) at /home/rnk/llvm-gdb/tools/lli/lli.cpp:208
      
      And a backtrace after this patch:
      Program received signal SIGSEGV, Segmentation fault.
      0x00002aaaabe7d1a8 in baz ()
      (gdb) bt
      #0  0x00002aaaabe7d1a8 in baz ()
      #1  0x00002aaaabe7d12c in bar ()
      #2  0x00002aaaabe7d0aa in foo ()
      #3  0x00002aaaabe7d02c in main ()
      #4  0x0000000000b870a2 in llvm::JIT::runFunction (this=0x1405b70,
      F=0x14024e0, ArgValues=...)
         at /home/rnk/llvm-gdb/lib/ExecutionEngine/JIT/JIT.cpp:395
      #5  0x0000000000baa4c5 in llvm::ExecutionEngine::runFunctionAsMain
      (this=0x1405b70, Fn=0x14024e0, argv=..., envp=0x7fffffffe3c0)
         at /home/rnk/llvm-gdb/lib/ExecutionEngine/ExecutionEngine.cpp:377
      #6  0x00000000007ebd52 in main (argc=2, argv=0x7fffffffe3a8,
      envp=0x7fffffffe3c0) at /home/rnk/llvm-gdb/tools/lli/lli.cpp:208
      
      llvm-svn: 82418
      9a10db8c
  5. Aug 22, 2009
  6. Aug 13, 2009
  7. Aug 10, 2009
  8. Aug 08, 2009
    • Bruno Cardoso Lopes's avatar
      ELF improvements: · 72dd2eef
      Bruno Cardoso Lopes authored
      Handle large integers, x86_fp80, ConstantAggregateZero, and two more ConstantExpr:
      GetElementPtr and IntToPtr
      Set SHF_MERGE bit for mergeable strings
      Avoid zero initialized strings to be classified as a bss symbol
      Don't allow common symbols to be classified as STB_WEAK
      Add a constant to be used as a global value offset in data relocations 
      
      llvm-svn: 78476
      72dd2eef
  9. Aug 05, 2009
    • Bruno Cardoso Lopes's avatar
      - Remove custom handling of jumptables by the elf writter (this was · 2b1dc9a7
      Bruno Cardoso Lopes authored
      a dirty hack and isn't need anymore since the last x86 code emitter patch)
      - Add a target-dependent modifier to addend calculation
      - Use R_X86_64_32S relocation for X86::reloc_absolute_word_sext
      - Use getELFSectionFlags whenever possible
      - fix getTextSection to use TLOF and emit the right text section 
      - Handle global emission for static ctors, dtors and Type::PointerTyID
      - Some minor fixes
      
      llvm-svn: 78176
      2b1dc9a7
  10. Jul 31, 2009
  11. Jul 27, 2009
  12. Jul 21, 2009
  13. Jul 20, 2009
  14. Jul 19, 2009
  15. Jul 18, 2009
  16. Jul 16, 2009
  17. Jul 15, 2009
  18. Jul 14, 2009
  19. Jul 13, 2009
  20. Jul 06, 2009
  21. Jul 03, 2009
  22. Jul 02, 2009
  23. Jun 25, 2009
  24. Jun 23, 2009
  25. Jun 22, 2009
  26. Jun 14, 2009
  27. Jun 11, 2009
    • Bruno Cardoso Lopes's avatar
      Support for ELF Visibility · 1656366e
      Bruno Cardoso Lopes authored
      Emission for globals, using the correct data sections
      Function alignment can be computed for each target using TargetELFWriterInfo
      Some small fixes
      
      llvm-svn: 73201
      1656366e
  28. Jun 07, 2009
  29. Jun 06, 2009
  30. Jun 05, 2009
  31. Aug 21, 2008
  32. Mar 22, 2008
  33. Dec 29, 2007
  34. Jul 05, 2007
  35. May 03, 2007
  36. May 02, 2007
Loading