Skip to content
  1. May 24, 2013
    • Ahmed Bougacha's avatar
      Add MCSymbolizer for symbolic/annotated disassembly. · ad1084de
      Ahmed Bougacha authored
      This is a basic first step towards symbolization of disassembled
      instructions. This used to be done using externally provided (C API)
      callbacks. This patch introduces:
      - the MCSymbolizer class, that mimics the same functions that were used
        in the X86 and ARM disassemblers to symbolize immediate operands and
        to annotate loads based off PC (for things like c string literals).
      - the MCExternalSymbolizer class, which implements the old C API.
      - the MCRelocationInfo class, which provides a way for targets to
        translate relocations (either object::RelocationRef, or disassembler
        C API VariantKinds) to MCExprs.
      - the MCObjectSymbolizer class, which does symbolization using what it
        finds in an object::ObjectFile. This makes simple symbolization (with
        no fancy relocation stuff) work for all object formats!
      - x86-64 Mach-O and ELF MCRelocationInfos.
      - A basic ARM Mach-O MCRelocationInfo, that provides just enough to
        support the C API VariantKinds.
      
      Most of what works in otool (the only user of the old symbolization API
      that I know of) for x86-64 symbolic disassembly (-tvV) works, namely:
      - symbol references: call _foo; jmp 15 <_foo+50>
      - relocations:       call _foo-_bar; call _foo-4
      - __cf?string:       leaq 193(%rip), %rax ## literal pool for "hello"
      Stub support is the main missing part (because libObject doesn't know,
      among other things, about mach-o indirect symbols).
      
      As for the MCSymbolizer API, instead of relying on the disassemblers
      to call the tryAdding* methods, maybe this could be done automagically
      using InstrInfo? For instance, even though PC-relative LEAs are used
      to get the address of string literals in a typical Mach-O file, a MOV
      would be used in an ELF file. And right now, the explicit symbolization
      only recognizes PC-relative LEAs. InstrInfo should have already have
      most of what is needed to know what to symbolize, so this can
      definitely be improved.
      
      I'd also like to remove object::RelocationRef::getValueString (it seems
      only used by relocation printing in objdump), as simply printing the
      created MCExpr is definitely enough (and cleaner than string concats).
      
      llvm-svn: 182625
      ad1084de
    • Richard Smith's avatar
      Fix crash-on-invalid if list-initialization works, but we bail out when · cd09065e
      Richard Smith authored
      building the resulting expression because it invokes a deleted constructor.
      
      llvm-svn: 182624
      cd09065e
    • Bill Wendling's avatar
      48143175
    • Filipe Cabecinhas's avatar
      Adds PT_TLS and PT_GNU_EH_FRAME names to DumpELFProgramHeaders · 477d86d8
      Filipe Cabecinhas authored
      llvm-svn: 182619
      477d86d8
    • Ulrich Weigand's avatar
      · 99485469
      Ulrich Weigand authored
      [PowerPC] Remove symbolLo/symbolHi instruction operand types
      
      Now that there is no longer any distinction between symbolLo
      and symbolHi operands in either printing, encoding, or parsing,
      the operand types can be removed in favor of simply using
      s16imm.
      
      This completes the patch series to decouple lo/hi operand part
      processing from the particular instruction whose operand it is.
      
      No change in code generation expected from this patch.
      
      llvm-svn: 182618
      99485469
    • Daniel Malea's avatar
      Re-implement DebugIR in a way that does not subclass AssemblyWriter: · fddddbea
      Daniel Malea authored
      - move AsmWriter.h from public headers into lib
      - marked all AssemblyWriter functions as non-virtual; no need to override them
      - DebugIR now "plugs into" AssemblyWriter with an AssemblyAnnotationWriter helper
      - exposed flags to control hiding of a) debug metadata b) debug intrinsic calls
      
      C/R: Paul Redmond
      
      llvm-svn: 182617
      fddddbea
    • Ulrich Weigand's avatar
      · 41789de1
      Ulrich Weigand authored
      [PowerPC] Clean up generation of ha16() / lo16() markers
      
      When targeting the Darwin assembler, we need to generate markers ha16() and
      lo16() to designate the high and low parts of a (symbolic) immediate.  This
      is necessary not just for plain symbols, but also for certain symbolic
      expression, typically along the lines of ha16(A - B).  The latter doesn't
      work when simply using VariantKind flags on the symbol reference.
      This is why the current back-end uses hacks (explicitly called out as such
      via multiple FIXMEs) in the symbolLo/symbolHi print methods.
      
      This patch uses target-defined MCExpr codes to represent the Darwin
      ha16/lo16 constructs, following along the lines of the equivalent solution
      used by the ARM back end to handle their :upper16: / :lower16: markers.
      This allows us to get rid of special handling both in the symbolLo/symbolHi
      print method and in the common code MCExpr::print routine.  Instead, the
      ha16 / lo16 markers are printed simply in a custom print routine for the
      target MCExpr types.  (As a result, the symbolLo/symbolHi print methods
      can now replaced by a single printS16ImmOperand routine that also handles
      symbolic operands.)
      
      The patch also provides a EvaluateAsRelocatableImpl routine to handle
      ha16/lo16 constructs.  This is not actually used at the moment by any
      in-tree code, but is provided as it makes merging into David Fang's
      out-of-tree Mach-O object writer simpler.
      
      Since there is no longer any need to treat VK_PPC_GAS_HA16 and
      VK_PPC_DARWIN_HA16 differently, they are merged into a single
      VK_PPC_ADDR16_HA (and likewise for the _LO16 types).
      
      llvm-svn: 182616
      41789de1
  2. May 23, 2013
Loading