changeset 480:5c497d547c0b

*** empty log message ***
author kono
date Sat, 26 Nov 2005 09:55:49 +0900
parents 51c1b795b4f3
children 6445b419aef0
files Changes
diffstat 1 files changed, 41 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/Changes	Sat Nov 26 09:50:55 2005 +0900
+++ b/Changes	Sat Nov 26 09:55:49 2005 +0900
@@ -7266,4 +7266,44 @@
 
 と union だけdispが特別扱いのようですが... あんまりテストされてないなぁ。
 
-
+Sat Nov 26 09:53:48 JST 2005
+
+MIPS で、
+code segment 中の float/double conversion の後で大域変数にアクセスすると
+code dump する件ですが...
+
+      l.s $f12,16($11)
+      jal fptodp
+      sw $2,16($sp)
+      sw $3,20($sp)
+
+0x400ab0 in print_foo ()
+pc =00400ab0 fp =7ffff900 r2 =00000012 r3 =00000003 r4= 7ffff670 r5= 00000000
+r6 =00000012 r7 =00000000 r8 =00000c00 r9 =00000010 r10=00000000 r11=10000130
+0x400ab0 <print_foo+32>:        jalr    $t9
+(gdb) ni
+0x400ab8 in print_foo ()
+pc =00400ab8 fp =7ffff900 r2 =00000000 r3 =40100000 r4= 00000000 r5= 800fffff
+r6 =7fffffff r7 =00000000 r8 =00000000 r9 =00100000 r10=00000000 r11=00000401
+0x400ab8 <print_foo+40>:        lw      $gp,64($s8)
+(gdb) p (void*)((int)$gp)
+$3 = (void *) 0x10008030
+(gdb) si
+0x400abc in print_foo ()
+pc =00400abc fp =7ffff900 r2 =00000000 r3 =40100000 r4= 00000000 r5= 800fffff
+r6 =7fffffff r7 =00000000 r8 =00000000 r9 =00100000 r10=00000000 r11=00000401
+0x400abc <print_foo+44>:        sw      $v0,16($sp)
+(gdb) p (void*)((int)$gp)
+$4 = (void *) 0x0
+
+
+わかりました。code segment の中では jal じゃなくて 
+
+        la      $25,fptodp
+        jalr    $25
+        lw      $gp,$L_7($sp)
+
+しなきゃいけなかったんだ。なんでそうかは忘れた。($fp を使われちゃうからなのね)
+
+
+