This Perl script merges the source code in a .s file generate by the compilation of a file with the following command:
[you@yourmachine ~]% gcc -g -S foo.c
Compilation with -g -S produce a file with the following notation:
foo: .LFB2: .file 1 "foo.c" .loc 1 4 0 stwu 1,-16(1) .LCFI0: stw 31,12(1) .LCFI1: mr 31,1 .LCFI2: .loc 1 5 0 li 0,42 .loc 1 6 0 mr 3,0 lwz 11,0(1) lwz 31,-4(11) mr 1,11 blr
The .loc 1 5 0 statement as the following meaning: "following lines are generated by file number 1 at line 5". The file which number is 1 is set with the statement .file 1 "foo.c"
mswasm acts as follow: it takes on standard input an assembly file generated with gcc -g -S and writes on standard output the assembly file with comments in place of .loc statements. In these comments mswasm puts the code from source file.
[you@yourmachine ~]% mswasm < foo.s>foo_out.s
The output for the previous assembly code is:
foo: .LFB2: .file 1 "foo.c" /* foo.c 3-4 */ /* int foo() * { */ stwu 1,-16(1) .LCFI0: stw 31,12(1) .LCFI1: mr 31,1 .LCFI2: /* foo.c 5 */ /* return 42; */ li 0,42 /* foo.c 6 */ /* } */ mr 3,0 lwz 11,0(1) lwz 31,-4(11) mr 1,11 blr