From: Andrew Walrond Date: 2004-09-17T19:24:45+09:00 Subject: Valgrind analysis of [BUG] unknown node type 0 --Boundary-00=_otrSBHsXIIkGK+5 Content-Type: Multipart/Mixed; boundary="Boundary-00=_otrSBHsXIIkGK+5" --Boundary-00=_otrSBHsXIIkGK+5 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Hello list, For a while now while developing a ruby application, I have occasionally seen [BUG] unknown node type 0 which I understand is gc related. The exact, unpredictable symtoms have been described on the ruby-talk ML thread starting at <200409041104.53545.andrew@walrond.org> Yesterday, when it started happening again, I build the latest stable snapshot with CFLAGS='-g -O0' and ran Valgrind 2.2.0 on my ruby script (rubyx): valgrind --tool=memcheck ruby ./rubyx I attach the full valgrind log, but in short, the result is some 28,000 hits in gc.c. While I am sure alot of the reports are false positives, the very first report does seem to indicate a simple uninitialized variable bug: ==28001== Conditional jump or move depends on uninitialised value(s) ==28001== at 0x806FF18: is_pointer_to_heap (gc.c:591) ==28001== by 0x806FEE1: mark_locations_array (gc.c:609) ==28001== by 0x80710F8: rb_gc (gc.c:1328) ==28001== by 0x806FBAC: rb_newobj (gc.c:376) The global static variables lomem and himem in gc.c do not seem to be initialised before use: $ grep -E \(lo\|hi\)mem gc.c static RVALUE *himem, *lomem; if (lomem == 0 || lomem > p) lomem = p; if (himem < pend) himem = pend; if (p < lomem || p > himem) return Qfalse; I assume the fix would be static RVALUE *himem=0, *lomem=0; I wonder if somebody familiar with gc.c might check my analysis, and perhaps also check the attached valgrind log for other potential problems? Hope this is useful Andrew Walrond --Boundary-00=_otrSBHsXIIkGK+5 Content-Type: application/x-bzip2; name="valgrind.log.bz2" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="valgrind.log.bz2" QlpoOTFBWSZTWbuEc6gAEy1fgEAQQOf/8j+X2iC////wYAbfD5X0MpJO93QBQFEUNUeqZDJ6R6jB NNAMQyYmjTQxDAak1NqZo0TJpghoMjRoxBkxBoBzTEwAJgAmAAEwABMGnqqfqgAAAAAAAAAAIpAT QmgTUahg0TDSNHpDAjI9QKVCIaUyYQymmp5IABkDI9TyajRkKt/piJxgruWBiphiwwsEpsppjHzx vqoy220FXmqsAqwFW3o/F9qX3j5J+RVwk/0i+Qmxr4W5DomFTCwJgphLjXy9LP4KIxSKz2Bfge8w TO65ymqH2wbjbs40N/951o+T0xncUx8ZfOdOG6/o5s99tra46hFIvJTgKYvxKAt3danTuKMKeam2 4Tb1eLxUdnlvnSQ1VPpsCu03Y95oIK4FI8HOI9USiIiXbN3cZAO4O4AAzIAZKgmZQElkUFhDZZwM Qgz8N6UIgaUooEJDUJ/h56SneRXBbttfLF8p5RUratqMsoJXpeYkJDMCn6mj4q5HNobSpe3boWOH /GXWZywfmCi+YIOOfLihvKIhHCDl1WlVH016FGWtxRUhoKMxRUgiGWGJzxb4mNwq5nVOMMo64HiF XI4cdbr0RbGUcxgZZYb4fBLYE0tFAEx3ETmZHcXgT9igCqUN2NpQbsSuvPu89MO82cJMHpYdOqN/ epU6bm3Ls7G2WGUPDfjOhxsN2eSNcsjZux17c+AItlYn3EjOYX1FDFChlpyGU2RBa9SbEpaoJFNJ RFiIMyRqJmUzMokBcdAznlKpngnawi9HXKTbpwaNdmV0E346irOxlVN8JZE7MFqOWeXLLXI8Ha6d iMiKwKKnWAK3limmdXXYjI2ASg3IJNRDmImZv1rBvSemCaQYTYISUXgmMjUGJEIh3MYwSrQ0089h wDDwDBYAIBrKuREcHGEYCJhvG6ZRLC4GAqcx0MLmQVY58TqAkyy0UpVAQNAgBDAgCowk4G++Me5E ewwlPaUqaUVP3FFTzSMG8gQeQHwodKAfwWeh4Y6uQPeLLj6vq6bOidUm3sdmc45bFXGDWDzo6ezI 04RdRlJgK5x8Xf92n4P6YfHPHjufF/vNRv+8q9on8D5kPomlF9hBofrOSZPtTi2v2PuU0+h8cFX+ Gmirbm/dyY3uafk6AX/Cr5lW/pqLgoZd4x+WNyUwyYf5UDZ95SskGai4+/qJ2LbJz1jWbuY9DCq+ jWbW5WlPITCn/lHl61OXco0o8taUxw6PWn4mG3mbdCr8NM7XH6fVoThRpkKXyE3pZt86G7WtjIfG cQNaZc0UJGI/1i5exL+xStJTKT3ufbxfWYbp+ZJ7mDRVu730+oTG3wz2W/l3FXanDXQqsck0VfX8 ut0KvJTmo9w6KehF2Y9OcZVDHo0pjxysCb/DOde5syVbMG96lFxnbaVeDHRyIMFXnjWM4U4UyJrl i5Zwpjaypq1lTZTkNblWCrZJbZTOsvFO8cUlxKO33JgtMUgU+QpAoO9JH6FcSsKf4W8XlnrkFN8K eCeBlT1nip4bJjv7PFviVhPr7ewq3CehyM7XkJm6fY6c0XPCobc3SaKuJue8yZxt7Unr13bM67VO anl47+d/RmCthOXtFCQK6/jOfPqFDoGpgJm3kOYK1Ky1xqFR4ViwmhFnMgFbwKWFB0Ev479nEOQK 9/ed4pR3Ar17EumZ2E0VqU5eLRiPU/qFWmniVcKU5YPn73fo6Ch/4u5IpwoSF3COdQA= --Boundary-00=_otrSBHsXIIkGK+5-- --Boundary-00=_otrSBHsXIIkGK+5--