com.cmpware.elf
Class Dwarf2Location

java.lang.Object
  extended by com.cmpware.elf.Dwarf2Location

public class Dwarf2Location
extends java.lang.Object

This class is used to convert DWARF2 Location Expressions to addresses.

Copyright (c) 2005 Cmpware, Inc. All Rights Reserved.

Author:
SAG

Field Summary
static java.lang.String copyright
          Copyright string
static int DW_OP_abs
           
static int DW_OP_addr
           
static int DW_OP_and
           
static int DW_OP_bra
           
static int DW_OP_breg0
           
static int DW_OP_breg1
           
static int DW_OP_breg10
           
static int DW_OP_breg11
           
static int DW_OP_breg12
           
static int DW_OP_breg13
           
static int DW_OP_breg14
           
static int DW_OP_breg15
           
static int DW_OP_breg16
           
static int DW_OP_breg17
           
static int DW_OP_breg18
           
static int DW_OP_breg19
           
static int DW_OP_breg2
           
static int DW_OP_breg20
           
static int DW_OP_breg21
           
static int DW_OP_breg22
           
static int DW_OP_breg23
           
static int DW_OP_breg24
           
static int DW_OP_breg25
           
static int DW_OP_breg26
           
static int DW_OP_breg27
           
static int DW_OP_breg28
           
static int DW_OP_breg29
           
static int DW_OP_breg3
           
static int DW_OP_breg30
           
static int DW_OP_breg31
           
static int DW_OP_breg4
           
static int DW_OP_breg5
           
static int DW_OP_breg6
           
static int DW_OP_breg7
           
static int DW_OP_breg8
           
static int DW_OP_breg9
           
static int DW_OP_bregx
           
static int DW_OP_const1s
           
static int DW_OP_const1u
           
static int DW_OP_const2s
           
static int DW_OP_const2u
           
static int DW_OP_const4s
           
static int DW_OP_const4u
           
static int DW_OP_const8s
           
static int DW_OP_const8u
           
static int DW_OP_consts
           
static int DW_OP_constu
           
static int DW_OP_deref
           
static int DW_OP_deref_size
           
static int DW_OP_div
           
static int DW_OP_drop
           
static int DW_OP_dup
           
static int DW_OP_eq
           
static int DW_OP_fbreg
           
static int DW_OP_ge
           
static int DW_OP_gt
           
static int DW_OP_hi_user
           
static int DW_OP_le
           
static int DW_OP_lit0
           
static int DW_OP_lit1
           
static int DW_OP_lit10
           
static int DW_OP_lit11
           
static int DW_OP_lit12
           
static int DW_OP_lit13
           
static int DW_OP_lit14
           
static int DW_OP_lit15
           
static int DW_OP_lit16
           
static int DW_OP_lit17
           
static int DW_OP_lit18
           
static int DW_OP_lit19
           
static int DW_OP_lit2
           
static int DW_OP_lit20
           
static int DW_OP_lit21
           
static int DW_OP_lit22
           
static int DW_OP_lit23
           
static int DW_OP_lit24
           
static int DW_OP_lit25
           
static int DW_OP_lit26
           
static int DW_OP_lit27
           
static int DW_OP_lit28
           
static int DW_OP_lit29
           
static int DW_OP_lit3
           
static int DW_OP_lit30
           
static int DW_OP_lit31
           
static int DW_OP_lit4
           
static int DW_OP_lit5
           
static int DW_OP_lit6
           
static int DW_OP_lit7
           
static int DW_OP_lit8
           
static int DW_OP_lit9
           
static int DW_OP_lo_user
           
static int DW_OP_lt
           
static int DW_OP_minus
           
static int DW_OP_mod
           
static int DW_OP_mul
           
static int DW_OP_ne
           
static int DW_OP_neg
           
static int DW_OP_nop
           
static int DW_OP_not
           
static int DW_OP_or
           
static int DW_OP_over
           
static int DW_OP_pick
           
static int DW_OP_piece
           
static int DW_OP_plus
           
static int DW_OP_plus_uconst
           
static int DW_OP_reg0
           
static int DW_OP_reg1
           
static int DW_OP_reg10
           
static int DW_OP_reg11
           
static int DW_OP_reg12
           
static int DW_OP_reg13
           
static int DW_OP_reg14
           
static int DW_OP_reg15
           
static int DW_OP_reg16
           
static int DW_OP_reg17
           
static int DW_OP_reg18
           
static int DW_OP_reg19
           
static int DW_OP_reg2
           
static int DW_OP_reg20
           
static int DW_OP_reg21
           
static int DW_OP_reg22
           
static int DW_OP_reg23
           
static int DW_OP_reg24
           
static int DW_OP_reg25
           
static int DW_OP_reg26
           
static int DW_OP_reg27
           
static int DW_OP_reg28
           
static int DW_OP_reg29
           
static int DW_OP_reg3
           
static int DW_OP_reg30
           
static int DW_OP_reg31
           
static int DW_OP_reg4
           
static int DW_OP_reg5
           
static int DW_OP_reg6
           
static int DW_OP_reg7
           
static int DW_OP_reg8
           
static int DW_OP_reg9
           
static int DW_OP_regx
           
static int DW_OP_rot
           
static int DW_OP_shl
           
static int DW_OP_shr
           
static int DW_OP_shra
           
static int DW_OP_skip
           
static int DW_OP_swap
           
static int DW_OP_xderef
           
static int DW_OP_xderef_size
           
static int DW_OP_xor
           
 
Constructor Summary
Dwarf2Location()
           
 
Method Summary
static java.lang.String dasm(byte[] b, int addrBytes, boolean swapBytes)
          This method disassembles a DWARF2 location program.
static int getAddr(Processor p, byte[] loc, long frameBase)
          This static method returns the address value associated with a location program.
static long getData(Processor p, int addr, int size)
          This method returns a long integer representing the value of a data of the specified length at the specified address.
static boolean isScalar()
          This method returns true if a scalar value was returned in the last call to getAddr().
static boolean isScalar(int op)
          This method returns true if the operation results in a scalar being on top of the stack.
static java.lang.String opName(int op)
          This method returns a DWARF op name given the op code.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

copyright

public static final java.lang.String copyright
Copyright string

See Also:
Constant Field Values

DW_OP_addr

public static final int DW_OP_addr
See Also:
Constant Field Values

DW_OP_deref

public static final int DW_OP_deref
See Also:
Constant Field Values

DW_OP_const1u

public static final int DW_OP_const1u
See Also:
Constant Field Values

DW_OP_const1s

public static final int DW_OP_const1s
See Also:
Constant Field Values

DW_OP_const2u

public static final int DW_OP_const2u
See Also:
Constant Field Values

DW_OP_const2s

public static final int DW_OP_const2s
See Also:
Constant Field Values

DW_OP_const4u

public static final int DW_OP_const4u
See Also:
Constant Field Values

DW_OP_const4s

public static final int DW_OP_const4s
See Also:
Constant Field Values

DW_OP_const8u

public static final int DW_OP_const8u
See Also:
Constant Field Values

DW_OP_const8s

public static final int DW_OP_const8s
See Also:
Constant Field Values

DW_OP_constu

public static final int DW_OP_constu
See Also:
Constant Field Values

DW_OP_consts

public static final int DW_OP_consts
See Also:
Constant Field Values

DW_OP_dup

public static final int DW_OP_dup
See Also:
Constant Field Values

DW_OP_drop

public static final int DW_OP_drop
See Also:
Constant Field Values

DW_OP_over

public static final int DW_OP_over
See Also:
Constant Field Values

DW_OP_pick

public static final int DW_OP_pick
See Also:
Constant Field Values

DW_OP_swap

public static final int DW_OP_swap
See Also:
Constant Field Values

DW_OP_rot

public static final int DW_OP_rot
See Also:
Constant Field Values

DW_OP_xderef

public static final int DW_OP_xderef
See Also:
Constant Field Values

DW_OP_abs

public static final int DW_OP_abs
See Also:
Constant Field Values

DW_OP_and

public static final int DW_OP_and
See Also:
Constant Field Values

DW_OP_div

public static final int DW_OP_div
See Also:
Constant Field Values

DW_OP_minus

public static final int DW_OP_minus
See Also:
Constant Field Values

DW_OP_mod

public static final int DW_OP_mod
See Also:
Constant Field Values

DW_OP_mul

public static final int DW_OP_mul
See Also:
Constant Field Values

DW_OP_neg

public static final int DW_OP_neg
See Also:
Constant Field Values

DW_OP_not

public static final int DW_OP_not
See Also:
Constant Field Values

DW_OP_or

public static final int DW_OP_or
See Also:
Constant Field Values

DW_OP_plus

public static final int DW_OP_plus
See Also:
Constant Field Values

DW_OP_plus_uconst

public static final int DW_OP_plus_uconst
See Also:
Constant Field Values

DW_OP_shl

public static final int DW_OP_shl
See Also:
Constant Field Values

DW_OP_shr

public static final int DW_OP_shr
See Also:
Constant Field Values

DW_OP_shra

public static final int DW_OP_shra
See Also:
Constant Field Values

DW_OP_xor

public static final int DW_OP_xor
See Also:
Constant Field Values

DW_OP_skip

public static final int DW_OP_skip
See Also:
Constant Field Values

DW_OP_bra

public static final int DW_OP_bra
See Also:
Constant Field Values

DW_OP_eq

public static final int DW_OP_eq
See Also:
Constant Field Values

DW_OP_ge

public static final int DW_OP_ge
See Also:
Constant Field Values

DW_OP_gt

public static final int DW_OP_gt
See Also:
Constant Field Values

DW_OP_le

public static final int DW_OP_le
See Also:
Constant Field Values

DW_OP_lt

public static final int DW_OP_lt
See Also:
Constant Field Values

DW_OP_ne

public static final int DW_OP_ne
See Also:
Constant Field Values

DW_OP_lit0

public static final int DW_OP_lit0
See Also:
Constant Field Values

DW_OP_lit1

public static final int DW_OP_lit1
See Also:
Constant Field Values

DW_OP_lit2

public static final int DW_OP_lit2
See Also:
Constant Field Values

DW_OP_lit3

public static final int DW_OP_lit3
See Also:
Constant Field Values

DW_OP_lit4

public static final int DW_OP_lit4
See Also:
Constant Field Values

DW_OP_lit5

public static final int DW_OP_lit5
See Also:
Constant Field Values

DW_OP_lit6

public static final int DW_OP_lit6
See Also:
Constant Field Values

DW_OP_lit7

public static final int DW_OP_lit7
See Also:
Constant Field Values

DW_OP_lit8

public static final int DW_OP_lit8
See Also:
Constant Field Values

DW_OP_lit9

public static final int DW_OP_lit9
See Also:
Constant Field Values

DW_OP_lit10

public static final int DW_OP_lit10
See Also:
Constant Field Values

DW_OP_lit11

public static final int DW_OP_lit11
See Also:
Constant Field Values

DW_OP_lit12

public static final int DW_OP_lit12
See Also:
Constant Field Values

DW_OP_lit13

public static final int DW_OP_lit13
See Also:
Constant Field Values

DW_OP_lit14

public static final int DW_OP_lit14
See Also:
Constant Field Values

DW_OP_lit15

public static final int DW_OP_lit15
See Also:
Constant Field Values

DW_OP_lit16

public static final int DW_OP_lit16
See Also:
Constant Field Values

DW_OP_lit17

public static final int DW_OP_lit17
See Also:
Constant Field Values

DW_OP_lit18

public static final int DW_OP_lit18
See Also:
Constant Field Values

DW_OP_lit19

public static final int DW_OP_lit19
See Also:
Constant Field Values

DW_OP_lit20

public static final int DW_OP_lit20
See Also:
Constant Field Values

DW_OP_lit21

public static final int DW_OP_lit21
See Also:
Constant Field Values

DW_OP_lit22

public static final int DW_OP_lit22
See Also:
Constant Field Values

DW_OP_lit23

public static final int DW_OP_lit23
See Also:
Constant Field Values

DW_OP_lit24

public static final int DW_OP_lit24
See Also:
Constant Field Values

DW_OP_lit25

public static final int DW_OP_lit25
See Also:
Constant Field Values

DW_OP_lit26

public static final int DW_OP_lit26
See Also:
Constant Field Values

DW_OP_lit27

public static final int DW_OP_lit27
See Also:
Constant Field Values

DW_OP_lit28

public static final int DW_OP_lit28
See Also:
Constant Field Values

DW_OP_lit29

public static final int DW_OP_lit29
See Also:
Constant Field Values

DW_OP_lit30

public static final int DW_OP_lit30
See Also:
Constant Field Values

DW_OP_lit31

public static final int DW_OP_lit31
See Also:
Constant Field Values

DW_OP_reg0

public static final int DW_OP_reg0
See Also:
Constant Field Values

DW_OP_reg1

public static final int DW_OP_reg1
See Also:
Constant Field Values

DW_OP_reg2

public static final int DW_OP_reg2
See Also:
Constant Field Values

DW_OP_reg3

public static final int DW_OP_reg3
See Also:
Constant Field Values

DW_OP_reg4

public static final int DW_OP_reg4
See Also:
Constant Field Values

DW_OP_reg5

public static final int DW_OP_reg5
See Also:
Constant Field Values

DW_OP_reg6

public static final int DW_OP_reg6
See Also:
Constant Field Values

DW_OP_reg7

public static final int DW_OP_reg7
See Also:
Constant Field Values

DW_OP_reg8

public static final int DW_OP_reg8
See Also:
Constant Field Values

DW_OP_reg9

public static final int DW_OP_reg9
See Also:
Constant Field Values

DW_OP_reg10

public static final int DW_OP_reg10
See Also:
Constant Field Values

DW_OP_reg11

public static final int DW_OP_reg11
See Also:
Constant Field Values

DW_OP_reg12

public static final int DW_OP_reg12
See Also:
Constant Field Values

DW_OP_reg13

public static final int DW_OP_reg13
See Also:
Constant Field Values

DW_OP_reg14

public static final int DW_OP_reg14
See Also:
Constant Field Values

DW_OP_reg15

public static final int DW_OP_reg15
See Also:
Constant Field Values

DW_OP_reg16

public static final int DW_OP_reg16
See Also:
Constant Field Values

DW_OP_reg17

public static final int DW_OP_reg17
See Also:
Constant Field Values

DW_OP_reg18

public static final int DW_OP_reg18
See Also:
Constant Field Values

DW_OP_reg19

public static final int DW_OP_reg19
See Also:
Constant Field Values

DW_OP_reg20

public static final int DW_OP_reg20
See Also:
Constant Field Values

DW_OP_reg21

public static final int DW_OP_reg21
See Also:
Constant Field Values

DW_OP_reg22

public static final int DW_OP_reg22
See Also:
Constant Field Values

DW_OP_reg23

public static final int DW_OP_reg23
See Also:
Constant Field Values

DW_OP_reg24

public static final int DW_OP_reg24
See Also:
Constant Field Values

DW_OP_reg25

public static final int DW_OP_reg25
See Also:
Constant Field Values

DW_OP_reg26

public static final int DW_OP_reg26
See Also:
Constant Field Values

DW_OP_reg27

public static final int DW_OP_reg27
See Also:
Constant Field Values

DW_OP_reg28

public static final int DW_OP_reg28
See Also:
Constant Field Values

DW_OP_reg29

public static final int DW_OP_reg29
See Also:
Constant Field Values

DW_OP_reg30

public static final int DW_OP_reg30
See Also:
Constant Field Values

DW_OP_reg31

public static final int DW_OP_reg31
See Also:
Constant Field Values

DW_OP_breg0

public static final int DW_OP_breg0
See Also:
Constant Field Values

DW_OP_breg1

public static final int DW_OP_breg1
See Also:
Constant Field Values

DW_OP_breg2

public static final int DW_OP_breg2
See Also:
Constant Field Values

DW_OP_breg3

public static final int DW_OP_breg3
See Also:
Constant Field Values

DW_OP_breg4

public static final int DW_OP_breg4
See Also:
Constant Field Values

DW_OP_breg5

public static final int DW_OP_breg5
See Also:
Constant Field Values

DW_OP_breg6

public static final int DW_OP_breg6
See Also:
Constant Field Values

DW_OP_breg7

public static final int DW_OP_breg7
See Also:
Constant Field Values

DW_OP_breg8

public static final int DW_OP_breg8
See Also:
Constant Field Values

DW_OP_breg9

public static final int DW_OP_breg9
See Also:
Constant Field Values

DW_OP_breg10

public static final int DW_OP_breg10
See Also:
Constant Field Values

DW_OP_breg11

public static final int DW_OP_breg11
See Also:
Constant Field Values

DW_OP_breg12

public static final int DW_OP_breg12
See Also:
Constant Field Values

DW_OP_breg13

public static final int DW_OP_breg13
See Also:
Constant Field Values

DW_OP_breg14

public static final int DW_OP_breg14
See Also:
Constant Field Values

DW_OP_breg15

public static final int DW_OP_breg15
See Also:
Constant Field Values

DW_OP_breg16

public static final int DW_OP_breg16
See Also:
Constant Field Values

DW_OP_breg17

public static final int DW_OP_breg17
See Also:
Constant Field Values

DW_OP_breg18

public static final int DW_OP_breg18
See Also:
Constant Field Values

DW_OP_breg19

public static final int DW_OP_breg19
See Also:
Constant Field Values

DW_OP_breg20

public static final int DW_OP_breg20
See Also:
Constant Field Values

DW_OP_breg21

public static final int DW_OP_breg21
See Also:
Constant Field Values

DW_OP_breg22

public static final int DW_OP_breg22
See Also:
Constant Field Values

DW_OP_breg23

public static final int DW_OP_breg23
See Also:
Constant Field Values

DW_OP_breg24

public static final int DW_OP_breg24
See Also:
Constant Field Values

DW_OP_breg25

public static final int DW_OP_breg25
See Also:
Constant Field Values

DW_OP_breg26

public static final int DW_OP_breg26
See Also:
Constant Field Values

DW_OP_breg27

public static final int DW_OP_breg27
See Also:
Constant Field Values

DW_OP_breg28

public static final int DW_OP_breg28
See Also:
Constant Field Values

DW_OP_breg29

public static final int DW_OP_breg29
See Also:
Constant Field Values

DW_OP_breg30

public static final int DW_OP_breg30
See Also:
Constant Field Values

DW_OP_breg31

public static final int DW_OP_breg31
See Also:
Constant Field Values

DW_OP_regx

public static final int DW_OP_regx
See Also:
Constant Field Values

DW_OP_fbreg

public static final int DW_OP_fbreg
See Also:
Constant Field Values

DW_OP_bregx

public static final int DW_OP_bregx
See Also:
Constant Field Values

DW_OP_piece

public static final int DW_OP_piece
See Also:
Constant Field Values

DW_OP_deref_size

public static final int DW_OP_deref_size
See Also:
Constant Field Values

DW_OP_xderef_size

public static final int DW_OP_xderef_size
See Also:
Constant Field Values

DW_OP_nop

public static final int DW_OP_nop
See Also:
Constant Field Values

DW_OP_lo_user

public static final int DW_OP_lo_user
See Also:
Constant Field Values

DW_OP_hi_user

public static final int DW_OP_hi_user
See Also:
Constant Field Values
Constructor Detail

Dwarf2Location

public Dwarf2Location()
Method Detail

getAddr

public static int getAddr(Processor p,
                          byte[] loc,
                          long frameBase)
                   throws MemoryAccessException,
                          java.io.IOException
This static method returns the address value associated with a location program.

Parameters:
p - the current processor.
loc - the location program.
frameBase - the frame base address.
Returns:
This static method returns the address value associated with a location program.
Throws:
MemoryAccessException - if an illegal memory access occurs.
java.io.IOException - if an error reading the program data occurs.

isScalar

public static boolean isScalar()
This method returns true if a scalar value was returned in the last call to getAddr().

Returns:
This method returns true if a scalar value was returned in the last call to getAddr().

isScalar

public static boolean isScalar(int op)
This method returns true if the operation results in a scalar being on top of the stack. This is useful because not all DWARF programs produce addresses. Scalars, typically from registers can be returned.

Parameters:
op - The DWARF address program operation.
Returns:
This method returns true if the operation results in a scalar being on top of the stack.

dasm

public static java.lang.String dasm(byte[] b,
                                    int addrBytes,
                                    boolean swapBytes)
This method disassembles a DWARF2 location program.

Parameters:
b - The byte array containing the DWARF2 location program.
addrBytes - the number of bytes in an address. curretnly should be 4 or 8.
swapBytes - The byte swap flag from the ELF file.
Returns:
This method returns a string representing the disassembles a DWARF2 location program.

opName

public static java.lang.String opName(int op)
This method returns a DWARF op name given the op code. This is used primarily for debug.

Parameters:
op - The op code.
Returns:
This method returns a DWARF op name given the op code. This is used primarily for debug.

getData

public static long getData(Processor p,
                           int addr,
                           int size)
This method returns a long integer representing the value of a data of the specified length at the specified address.

Parameters:
p - The processor.
addr - The address of the data to be read.
size - The size in bytes of the data to be read.
Returns:
This method returns a long integer representing the value of a data of the specified length at the specified address.