### 7.5 Source and Machine Code

You can use the command `info line` to map source lines to program addresses (and vice versa), and the command `disassemble` to display a range of addresses as machine instructions. When run under gnu Emacs mode, the `info line` command causes the arrow to point to the line specified. Also, `info line` prints addresses in symbolic form as well as hex.

`info line` linespec
  Print the starting and ending addresses of the compiled code for source line linespec. You can specify source lines in any of the ways understood by the `list` command (see Printing Source Lines).

For example, we can use `info line` to discover the location of the object code for the first line of function `m4_changequote`:

         (gdb) info line m4_changequote
         Line 895 of "builtin.c" starts at pc 0x634c and ends at 0x6350.

We can also inquire (using `*`addr as the form for linespec) what source line covers a particular address:

         (gdb) info line *0x63ff
         Line 926 of "builtin.c" starts at pc 0x63e4 and ends at 0x6404.

After `info line`, the default address for the `x` command is changed to the starting address of the line, so that ``x/i`' is sufficient to begin examining the machine code (see Examining Memory). Also, this address is saved as the value of the convenience variable `$_` (see Convenience Variables).

`disassemble`
  This specialized command dumps a range of memory as machine instructions. The default memory range is the function surrounding the program counter of the selected frame. A single argument to this command is a program counter value; gdb dumps the function surrounding this value. Two arguments specify a range of addresses (first inclusive, second exclusive) to dump.

The following example shows the disassembly of a range of addresses of HP PA-RISC 2.0 code:

         (gdb) disas 0x32c4 0x32e4
         Dump of assembler code from 0x32c4 to 0x32e4:
         0x32c4 <main+204>:      addil 0,dp
         0x32c8 <main+208>:      ldw 0x22c(sr0,r1),r26
         0x32cc <main+212>:      ldil 0x3000,r31
         0x32d0 <main+216>:      ble 0x3f8(sr4,r31)
         0x32d4 <main+220>:      ldo 0(r31),rp
         0x32d8 <main+224>:      addil -0x800,dp
         0x32dc <main+228>:      ldo 0x588(r1),r26
         0x32e0 <main+232>:      ldil 0x3000,r31
         End of assembler dump.

Some architectures have more than one commonly-used set of instruction mnemonics or other syntax.

For programs that were dynamically linked and use shared libraries, instructions that call functions or branch to locations in the shared libraries might show a seemingly bogus location—it's actually a location of the relocation table. On some architectures, gdb might be able to resolve these to actual function names.

`set disassembly-flavor` instruction-set
  Select the instruction set to use when disassembling the program via the `disassemble` or `x/i` commands.

  Currently this command is only defined for the Intel x86 family. You can set instruction-set to either `intel` or `att`. The default is `att`, the AT&T flavor used by default by Unix assemblers for x86-based targets.

`show disassembly-flavor`
  Show the current setting of the disassembly flavor.