title: The cfi_* are not clear to me
body: <h2>Update:</h2>
  <p>I could have parts of my answers there :
  <a href="http://www.x86-64.org/documentation/abi.pdf" rel="nofollow noreferrer">http://www.x86-64.org/documentation/abi.pdf</a></p>
  <p>page 58.
  Pffeeeew assembly is a tough language :)</p>
  <h3>Context:</h3>
  <p>Learning GAS assembly for 2-3 days now.
  Linux 64 bits.</p>
  <p>GCC 4.8.2</p>
  <p>Compilation with <strong>no optimization</strong> (-O0 -march=native) to see the basic assembly generated.</p>
  <h3>Question:</h3>
  <p><strong><em>Is my explanation (below) right ?</em></strong></p>
  <p>All my C converted code is composed the same way with</p>
  <pre><code>.cfi_startproc
  pushq   %rbp
  .cfi_def_cfa_offset 16
  .cfi_offset 6, -16
  movq    %rsp, %rbp
  .cfi_def_cfa_register 6
  subq    $16, %rsp
  
  #my code here
  
  movl    $0, %eax
  leave
  .cfi_def_cfa 7, 8
  ret
  .cfi_endproc
  </code></pre>
  <p>I try to explain the steps :</p>
  <p>1)</p>
  <p>I read that the <code>cfi_def_cfa_offset</code> <em>has</em> to be 16 on 64 bits arch. That is a rule (<strong>right ?</strong>).</p>
  <p>2)</p>
  <p><code>cfi_offset</code> and <code>cfi_def_cfa_register</code> are &quot;associated&quot; to the value 6. <strong>Why ??</strong></p>
  <p>3)</p>
  <p>I understand that we skip the cfi_def_cfa_offset 16 bytes with the <code>subq</code>.</p>
  <p>4)</p>
  <p>But <strong>why the <code>cfi_def_cfa 7, 8</code> in the end ?</strong> it doesn't make sense to me because 8 appears nowhere. Why not <code>cfi_def_cfa 15, 16</code> by the way ?</p>
  <p>Thanks</p>