[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#227894: g++ exceptions thrown -> valgrind signals invalid read



Package: g++
Version: 3.3.3 20040110
Severity: serious

Every exception thrown is signaled by valgrind as a invalid read of 4
bytes. It seems there is something broken in the stack unrolling
mechanism.

On Debian testing, the code works as expected.

Example code:

#include <iostream>

int main(int argc, char** argv)
{
  int number = 5;
  
  try
  {
    throw number;
  }
  catch(...)
  {
    std::cout << "catched "<< &number << std::endl;
  }

  return 0;
}


Compiled with this options:
g++ -O0 -g -o testexception test_exception.cpp

valgrind reports:

valgrind -v ./testexception ==7242== Memcheck, a memory error detector
for x86-linux.
==7242== Copyright (C) 2002-2003, and GNU GPL'd, by Julian Seward.
==7242== Using valgrind-2.1.0, a program supervision framework for
x86-linux.
==7242== Copyright (C) 2000-2003, and GNU GPL'd, by Julian Seward.
==7242== Command line
==7242==    ./testexception
==7242== Startup, with flags:
==7242==    --suppressions=/usr/lib/valgrind/default.supp
==7242==    -v
==7242== Reading syms from
/home/glaure/Projects/svu_no_smart_pointer/src/testexception
==7242== Reading syms from /lib/ld-2.3.2.so
==7242==    object doesn't have a symbol table
==7242==    object doesn't have any debug info
==7242== Reading syms from /usr/lib/valgrind/vgskin_memcheck.so
==7242== Reading syms from /usr/lib/valgrind/valgrind.so
==7242== Reading syms from /usr/lib/libstdc++.so.5.0.5
==7242==    object doesn't have a symbol table
==7242==    object doesn't have any debug info
==7242== Reading syms from /usr/lib/debug/libm-2.3.2.so
==7242== Reading syms from /lib/libgcc_s.so.1
==7242==    object doesn't have a symbol table
==7242==    object doesn't have any debug info
==7242== Reading syms from /usr/lib/debug/libc-2.3.2.so
==7242== Reading suppressions file: /usr/lib/valgrind/default.supp
==7242== Estimated CPU clock rate is 1921 MHz
==7242==
==7242== Invalid read of size 4
==7242==    at 0x4032FB70: (within /lib/libgcc_s.so.1)
==7242==    by 0x4043A017: __dl_iterate_phdr (dl-iteratephdr.c:50)
==7242==    by 0x4032FF04: _Unwind_Find_FDE (in /lib/libgcc_s.so.1)
==7242==    by 0x4032DA44: (within /lib/libgcc_s.so.1)
==7242==  Address 0xFFFFE034 is not stack'd, malloc'd or free'd
==7242==
==7242== Invalid read of size 4
==7242==    at 0x4032FE48: (within /lib/libgcc_s.so.1)
==7242==    by 0x4043A017: __dl_iterate_phdr (dl-iteratephdr.c:50)
==7242==    by 0x4032FF04: _Unwind_Find_FDE (in /lib/libgcc_s.so.1)
==7242==    by 0x4032DA44: (within /lib/libgcc_s.so.1)
==7242==  Address 0xFFFFE03C is not stack'd, malloc'd or free'd
==7242==
==7242== ERROR SUMMARY: 12 errors from 2 contexts (suppressed: 0 from 0)
==7242==
==7242== 3 errors in context 1 of 2:
==7242== Invalid read of size 4
==7242==    at 0x4032FE48: (within /lib/libgcc_s.so.1)
==7242==    by 0x4043A017: __dl_iterate_phdr (dl-iteratephdr.c:50)
==7242==    by 0x4032FF04: _Unwind_Find_FDE (in /lib/libgcc_s.so.1)
==7242==    by 0x4032DA44: (within /lib/libgcc_s.so.1)
==7242==  Address 0xFFFFE03C is not stack'd, malloc'd or free'd
==7242==
==7242== 9 errors in context 2 of 2:
==7242== Invalid read of size 4
==7242==    at 0x4032FB70: (within /lib/libgcc_s.so.1)
==7242==    by 0x4043A017: __dl_iterate_phdr (dl-iteratephdr.c:50)
==7242==    by 0x4032FF04: _Unwind_Find_FDE (in /lib/libgcc_s.so.1)
==7242==    by 0x4032DA44: (within /lib/libgcc_s.so.1)
==7242==  Address 0xFFFFE034 is not stack'd, malloc'd or free'd
==7242== IN SUMMARY: 12 errors from 2 contexts (suppressed: 0 from 0)
==7242==
==7242== malloc/free: in use at exit: 4 bytes in 1 blocks.
==7242== malloc/free: 2 allocs, 1 frees, 88 bytes allocated.
==7242==
--7242--     TT/TC: 0 tc sectors discarded.
--7242--            1125 chainings, 0 unchainings.
--7242-- translate: new     2140 (33248 -> 425668; ratio 128:10)
--7242--            discard 0 (0 -> 0; ratio 0:10).
--7242--  dispatch: 0 jumps (bb entries), of which 5640 (564000%) were
unchained.
--7242--            2/2150 major/minor sched events.  2144 tt_fast
misses.
--7242-- reg-alloc: 299 t-req-spill, 79905+1892 orig+spill uis, 10399
total-reg-r.
--7242--    sanity: 3 cheap, 1 expensive checks.
--7242--    ccalls: 8593 C calls, 56% saves+restores avoided (28522
bytes)
--7242--            11675 args, avg 0.87 setup instrs each (2938 bytes)
--7242--            0% clear the stack (25779 bytes)
--7242--            3083 retvals, 34% of reg-reg movs avoided (2090
bytes)

Attachment: signature.asc
Description: This is a digitally signed message part


Reply to: