gcc 4.9.2 stack unwinding issue on Solaris Sparc

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

 



We encountered some stack unwinding issue on Solaris 10/11 Sparc and it is
only when building the code (an odbc driver) in debug mode. We build gcc in
debug mode for investigation and found the instruction pointer (ip) did not
hit any call-site entry in eh_personality.cc (line 481 - 504 with code
copied below). The comments below that part of code says:

// If ip is not present in the table, call terminate. This is for // a
destructor inside a cleanup, or a library routine the compiler // was not
expecting to throw.

But it does not look like we have any destructor involved that will throw.
Does anyone have any insight on this case (strangely the release version
works)?

code from eh_personality.cpp:

// Search the call-site table for the action associated with this IP.
  while (p < info.action_table)
    {
      _Unwind_Ptr cs_start, cs_len, cs_lp;
      _uleb128_t cs_action;

      // Note that all call-site encodings are "absolute" displacements.
      p = read_encoded_value (0, info.call_site_encoding, p, &cs_start);
      p = read_encoded_value (0, info.call_site_encoding, p, &cs_len);
      p = read_encoded_value (0, info.call_site_encoding, p, &cs_lp);
      p = read_uleb128 (p, &cs_action);

      // The table is sorted, so if we've passed the ip, stop.
      if (ip < info.Start + cs_start)
    p = info.action_table;
      else if (ip < info.Start + cs_start + cs_len)
    {
      if (cs_lp)
        landing_pad = info.LPStart + cs_lp;
      if (cs_action)
        action_record = info.action_table + cs_action - 1;
      goto found_something;
    }
    }



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux