これだとだめというところまでわかった。

at_exitがテスト開始前におきてしまう。わかってないなぁ。>俺

Index: test/fiddle/helper.rb
===================================================================
--- test/fiddle/helper.rb       (revision 27776)
+++ test/fiddle/helper.rb       (working copy)
@@ -38,6 +38,30 @@
 when /bsd|dragonfly/
   libc_so = "/usr/lib/libc.so"
   libm_so = "/usr/lib/libm.so"
+when /aix/
+  require 'tmpdir'
+  tmpdir=Dir.mktmpdir
+  at_exit {FileUtils.remove_entry_secure tmpdir}
+  cobjs=%w!strcpy.o!
+  mobjs=%w!floats.o sin.o!
+  funcs=%w!sin sinf strcpy!
+  pwd=Dir.pwd
+  Dir.chdir tmpdir
+  %x!ar x /usr/lib/libc.a #{cobjs.join(' ')}!
+  %x!ar x /usr/lib/libm.a #{mobjs.join(' ')}!
+  %x!echo "#{funcs.join("\n")}\n" > dltest.exp!
+  require 'rbconfig'
+  if RbConfig::CONFIG["GCC"] = 'yes'
+    lflag='-Wl,'
+  else
+    lflag=''
+  end
+  flags="#{lflag}-bE:dltest.exp #{lflag}-bnoentry -lm"
+  objs=cobjs+mobjs
+  %x!#{RbConfig::CONFIG["LDSHARED"]} -o #{tmpdir}/libdltest.so #{objs.join(' ')} #{flags}!
+  Dir.chdir pwd
+
+  libc_so = libm_so = "#{tmpdir}/libdltest.so"
 else
   libc_so = ARGV[0] if ARGV[0] && ARGV[0][0] == ?/
   libm_so = ARGV[1] if ARGV[1] && ARGV[1][0] == ?/

かみさんが入院して明日は遠足のつきそいのため、今日はここまで。