1.3. The Generated Code

If you want to see the generated code, then use the option -Wa,-a. The first part (-Wa,) means pass the second part (-a) to the assembler. To get a listing that includes interleaved source code, use the options -g and -Wa,-ahld. See The M68K Ada Users Guide, for more information on assembler options.

Here is an example where we generate a machine code listing.

Example 1-7. Generating a Machine Code Listing

$ m68k-coff-gcc -c -O2 -Wa,-a hello.adb
   1                            .file   "hello.adb"
   2                    gcc2_compiled.:
   3                    __gnu_compiled_ada:
   4                            .section .rdata,"r"
   5                    .LC0:
   6 0000 4865 6C6C             .ascii "Hello World"
   6      6F20 576F
   6      726C 64
   7 000b 00                    .even
   8                    .LC1:
   9 000c 0000 0001             .long 1
  10 0010 0000 000B             .long 11
  11                            .text
  12                            .even
  13                    .globl _ada_hello
  14                    _ada_hello:
  15 0000 4E56 0000             link.w  %a6,#0
  16 0004 BBCF                  cmp.l   %sp,%a5
  17 0006 6B02                  bmi.b   .+4
  18 0008 4E45                  trap    #5
  19 000a 203C 0000             move.l  #.LC0,%d0
  19      0024
  20 0010 223C 0000             move.l  #.LC1,%d1
  20      0030
  21 0016 2F01                  move.l  %d1,-(%sp)
  22 0018 2F00                  move.l  %d0,-(%sp)
  23 001a 4EB9 0000             jsr     xgc__text_io__put_line$2
  23      0000
  24 0020 4E5E                  unlk    %a6
  25 0022 4E75                  rts
...

You could also use the object code dump utility m68k-coff-objdump to disassemble the generated code. If you compiled using the debug option -g then the disassembled instructions will be annotated with symbolic references.

Here is an example using the object code dump utility.

Example 1-8. Output from objdump

$ m68k-coff-objdump -d hello.o

hello.o:     file format coff-m68k

Disassembly of section .text:

00000000 <_ada_hello>:
   0:   4e56 0000       linkw   %fp,#0
   4:   bbcf            cmpal   %sp,%a5
   6:   6b02            bmis    a <_ada_hello+0xa>
   8:   4e45            trap    #5
   a:   203c 0000 0024  movel   #36,%d0
  10:   223c 0000 0030  movel   #48,%d1
  16:   2f01            movel   %d1,-(%sp)
  18:   2f00            movel   %d0,-(%sp)
  1a:   4eb9 0000 0000  jsr     0 <_ada_hello>
  20:   4e5e            unlk    %fp
  22:   4e75            rts
...

You can see how big your program is using the size command. The sizes are in bytes.

Example 1-9. Using the Size Command

$ m68k-coff-size hello.o
   text    data     bss     dec     hex filename
     56       0       0      56      38 hello.o
$ m68k-coff-size hello
   text    data     bss     dec     hex filename
  10352     420     604   11376    2c70 hello

To get more detail you can use the object code dump program, and ask for headers.

Example 1-10. Using the Object Code Dump Program

$ m68k-coff-objdump -h hello.o

hello.o:     file format coff-m68k

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000024  00000000  00000000  00000104  2**2
                  CONTENTS, ALLOC, LOAD, RELOC, CODE
  1 .data         00000000  00000024  00000024  00000000  2**2
                  ALLOC, LOAD, DATA
  2 .bss          00000000  00000024  00000024  00000000  2**2
                  ALLOC, NEVER_LOAD
  3 .stab         0000015c  00000024  00000024  00000128  2**2
                  CONTENTS, RELOC, DEBUGGING
  4 .stabstr      00000372  00000180  00000180  00000284  2**0
                  CONTENTS, DEBUGGING
  5 .rdata        00000014  000004f2  000004f2  000005f6  2**2
                  CONTENTS, ALLOC, LOAD, READONLY

1.3.1. Tracing Simulation

The simulator supports several options including the trace option (-t) and the statistics option (-s). Use the option --help for more information.

Example 1-11. Tracing Simulation

$ m68k-coff-run -t hello
 <__cold_start>
-----------------------
-- Instruction trace --
-----------------------

------------+-------+----+-+-----+--------+----------------------
CPU time in  pending ----psr-----            disassembled
microseconds 7654321 ttsm i xnzvc       pc   instruction
------------+-------+----+-+-----+--------+----------------------
       0.000           s  7       00000100:  braw    0x104
 <start>
       0.160           s  7       00000104:  movew   #112,%sr
       0.320           s  7       00000108:  moveal  #1310716,%sp
art0.S:777
       0.480           s  7       0000010E:  moveq   #0,%d0
       0.560           s  7   z   00000110:  movec   %d0,%cacr
       0.720           s  7   z   00000114:  movec   %d0,%dfc
       0.880           s  7   z   00000118:  movec   %d0,%dtt0
       1.040           s  7   z   0000011C:  movec   %d0,%dtt1
       1.200           s  7   z   00000120:  movec   %d0,%isp
       1.360           s  7   z   00000124:  movec   %d0,%itt0
       1.520           s  7   z   00000128:  movec   %d0,%itt1
       1.680           s  7   z   0000012C:  movec   %d0,%mmusr
       1.840           s  7   z   00000130:  movec   %d0,%msp
       2.000 Stopped at PC = 0x00000130: interrupted