diff -ur openssl.tmp//crypto/md5/asm/md5-586.pl openssl/crypto/md5/asm/md5-586.pl
--- openssl.tmp//crypto/md5/asm/md5-586.pl	2008-01-06 00:28:37.000000000 +0200
+++ openssl/crypto/md5/asm/md5-586.pl	2011-06-27 19:19:33.230470400 +0300
@@ -11,7 +11,7 @@
 push(@INC,"${dir}","${dir}../../perlasm");
 require "x86asm.pl";
 
-&asm_init($ARGV[0],$0);
+&asm_init($ARGV[0],"md5_block_asm_data_order");
 
 $A="eax";
 $B="ebx";
@@ -30,6 +30,7 @@
  0, 7, 14, 5, 12, 3, 10, 1, 8, 15, 6, 13, 4, 11, 2, 9,	# R3
  );
 
+&cfi_section(".debug_frame");
 &md5_block("md5_block_asm_data_order");
 &asm_finish();
 
@@ -178,18 +179,26 @@
 	# C	8
 	# D 	12
 
+	&cfi_start();
+	&fpo("(10, 6, 0, 5, 1, 0)");
 	&push("esi");
+	&cfi_def_offset("8");
 	 &push("edi");
+	&cfi_def_offset("12");
 	&mov($tmp1,	&wparam(0)); # edi
 	 &mov($X,	&wparam(1)); # esi
 	&mov($C,	&wparam(2));
 	 &push("ebp");
+	&cfi_def_offset("16");
+	&cfi_offset("-16", "ebp");
 	&shl($C,	6);
 	&push("ebx");
+	&cfi_def_offset("20");
 	 &add($C,	$X); # offset we end at
 	&sub($C,	64);
 	 &mov($A,	&DWP( 0,$tmp1,"",0));
 	&push($C);	# Put on the TOS
+	&cfi_def_offset("24");
 	 &mov($B,	&DWP( 4,$tmp1,"",0));
 	&mov($C,	&DWP( 8,$tmp1,"",0));
 	 &mov($D,	&DWP(12,$tmp1,"",0));
@@ -297,10 +306,16 @@
 	 &jae(&label("start")) unless $normal;
 
 	&pop("eax"); # pop the temp variable off the stack
+	&cfi_def_offset("20");
 	 &pop("ebx");
+	&cfi_def_offset("16");
 	&pop("ebp");
+	&cfi_def_offset("12");
 	 &pop("edi");
+	&cfi_def_offset("8");
 	&pop("esi");
+	&cfi_def_offset("4");
+        &cfi_end();
 	 &ret();
 	&function_end_B($name);
 	}
diff -ur openssl.tmp//crypto/perlasm/x86gas.pl openssl/crypto/perlasm/x86gas.pl
--- openssl.tmp//crypto/perlasm/x86gas.pl	2008-12-17 21:56:47.000000000 +0200
+++ openssl/crypto/perlasm/x86gas.pl	2011-06-27 19:19:33.234470700 +0300
@@ -52,6 +52,13 @@
 
   1;
 }
+sub ::cfi_section { &::emit(".cfi_sections",@_); }
+sub ::cfi_start { &::emit(".cfi_startproc"); }
+sub ::cfi_def_offset { &::emit(".cfi_def_cfa_offset",@_); }
+sub ::cfi_offset { &::emit(".cfi_offset",reverse(@_)); }
+sub ::cfi_end { &::emit(".cfi_endproc"); }
+sub ::fpo { }
+
 #
 # opcodes not covered by ::generic above, mostly inconsistent namings...
 #
diff -ur openssl.tmp//crypto/perlasm/x86masm.pl openssl/crypto/perlasm/x86masm.pl
--- openssl.tmp//crypto/perlasm/x86masm.pl	2009-11-22 14:52:18.000000000 +0200
+++ openssl/crypto/perlasm/x86masm.pl	2011-06-27 19:19:33.238470900 +0300
@@ -32,6 +32,13 @@
 sub ::call_ptr	{ &::emit("call",@_);	}
 sub ::jmp_ptr	{ &::emit("jmp",@_);	}
 
+sub ::cfi_section { }
+sub ::cfi_start { }
+sub ::cfi_def_offset { }
+sub ::cfi_offset { }
+sub ::cfi_end { }
+sub ::fpo { &::emit(".FPO",@_); }
+
 sub get_mem
 { my($size,$addr,$reg1,$reg2,$idx)=@_;
   my($post,$ret);
