Bug 135488
| Summary: | gdb internal error with incomplete type | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Product: | Red Hat Enterprise Linux 3 | Reporter: | Manish Singh <manish.singh> | ||||||
| Component: | gdb | Assignee: | Jan Kratochvil <jan.kratochvil> | ||||||
| Status: | CLOSED ERRATA | QA Contact: | Jay Turner <jturner> | ||||||
| Severity: | medium | Docs Contact: | |||||||
| Priority: | medium | ||||||||
| Version: | 3.0 | CC: | cagney, jan.kratochvil, jjohnstn, srevivo | ||||||
| Target Milestone: | --- | ||||||||
| Target Release: | --- | ||||||||
| Hardware: | i386 | ||||||||
| OS: | Linux | ||||||||
| Whiteboard: | |||||||||
| Fixed In Version: | RHSA-2007-0469 | Doc Type: | Bug Fix | ||||||
| Doc Text: | Story Points: | --- | |||||||
| Clone Of: | Environment: | ||||||||
| Last Closed: | 2007-06-11 17:50:52 UTC | Type: | --- | ||||||
| Regression: | --- | Mount Type: | --- | ||||||
| Documentation: | --- | CRM: | |||||||
| Verified Versions: | Category: | --- | |||||||
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |||||||
| Cloudforms Team: | --- | Target Upstream Version: | |||||||
| Embargoed: | |||||||||
| Bug Depends On: | |||||||||
| Bug Blocks: | 221026, 233716 | ||||||||
| Attachments: |
|
||||||||
Created attachment 105103 [details]
Simple workaround
Created attachment 144581 [details]
Reproducibility testcase (not gdb testsuite style).
Bug present on RHEL3U8.i386 and RHEL4U4.i386. But not present on RHEL5.i386. Testcase available; fix understood. An advisory has been issued which should help the problem described in this bug report. This report is therefore being closed with a resolution of ERRATA. For more information on the solution and/or where to find the updated files, please follow the link below. You may reopen this bug report if the solution does not work for you. http://rhn.redhat.com/errata/RHSA-2007-0469.html |
When attaching to a process and doing a backtrace, the following assertion failure occurs: internal-error: make_cv_type: Assertion `TYPE_OBJFILE (*typeptr) == TYPE_OBJFILE (type) || TYPE_STUB (*typeptr)' failed. This is due to code in gdbtypes.c:check_typedef: /* If this is a struct/class/union with no fields, then check whether a full definition exists somewhere else. This is for systems where a type definition with no fields is issued for such types, instead of identifying them as stub types in the first place */ if (TYPE_IS_OPAQUE (type) && opaque_type_resolution && !currently_reading_symtab) { char *name = type_name_no_tag (type); struct type *newtype; if (name == NULL) { stub_noname_complaint (); return type; } newtype = lookup_transparent_type (name); if (newtype) make_cv_type (is_const, is_volatile, newtype, &type); } What's happening is the type returned by lookup_transparent_type is from a shared library that the process loads, but the original incomplete type reference is from the application binary. So the objfile entries in the types differ, causing the assertion failure of TYPE_OBJFILE (*typeptr) == TYPE_OBJFILE (type). I can workaround this with the attached patch, but I'm not sure it's the right thing. This just forces the type to be treated as a STUB.