This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
New C++/dwarf-1/optimize bootstrap failure
- To: egcs-bugs at egcs dot cygnus dot com
- Subject: New C++/dwarf-1/optimize bootstrap failure
- From: Robert Lipe <robertl at sco dot com>
- Date: Wed, 22 Dec 1999 11:48:39 -0600
During the last 10 days, i586-pc-sco3.2v5.0.5 stopped bootstrapping. It
aborts during the build of tinfo.cc. The ELF (but dwarf-1) code emits
references to nonexistent assembler labels. This is a problem that
has reared its head on this target before. I've reduced tinfo to the
attached y.cc file. Interestingly, removing the line number info from
the preprocessed file makes the problem go away, too.
If I build it (-O and -g are required to expose the failure) , it returns
$ ./xgcc --save-temps -B./ -c -dA -O -g y.cc
(EOF):undefined name: .L_E140
(EOF):undefined name: .L_E139
(EOF):undefined name: .L_E143
(EOF):undefined name: .L_E142
(EOF):undefined name: .L_E141
All the labels appear in the line after AT_abstract_origin and the
occurrence in the dwarf thingy is the only reference to that symbol.
For example, the first two look appear consecutively in the source like
this:
.L_D82:
.4byte .L_D82_e-.L_D82
.2byte 0x1d / TAG_inlined_subroutine
.2byte 0x12 / AT_sibling
.4byte .L_D86
.2byte 0x2b2 / AT_abstract_origin
.4byte .L_E139 / The first bad one
.2byte 0x111 / AT_low_pc
.4byte .L_B12
.2byte 0x121 / AT_high_pc
.4byte .L_B12_e
.L_D82_e:
.L_D87:
.4byte .L_D87_e-.L_D87
.2byte 0x5 / TAG_formal_parameter
.2byte 0x12 / AT_sibling
.4byte .L_D88
.2byte 0x2b2 / AT_abstract_origin
.4byte .L_E140 / The next bad one
.2byte 0x23 / AT_location
.2byte .L_l87_e-.L_l87
.L_l87:
.L_l87_e:
If there is more information I can provide to help track this down, please
let me know.
Thanx,
RJL
#pragma implementation "typeinfo"
typedef int ptrdiff_t;
typedef unsigned int size_t;
typedef unsigned int wint_t;
# 1 "include/typeinfo" 1 3
#pragma interface "typeinfo"
# 1 "include/exception" 1 3
#pragma interface "exception"
extern "C++" {
namespace std {
class exception {
public:
exception () { }
virtual ~exception () { }
virtual const char* what () const;
};
class bad_exception : public exception {
public:
bad_exception () { }
virtual ~bad_exception () { }
};
typedef void (*terminate_handler) ();
typedef void (*unexpected_handler) ();
terminate_handler set_terminate (terminate_handler);
void terminate () __attribute__ ((__noreturn__));
unexpected_handler set_unexpected (unexpected_handler);
void unexpected () __attribute__ ((__noreturn__));
bool uncaught_exception ();
}
}
# 9 "include/typeinfo" 2 3
extern "C++" {
namespace std {
class type_info {
private:
type_info& operator= (const type_info&);
type_info (const type_info&);
protected:
explicit type_info (const char *n): _name (n) { }
const char *_name;
public:
virtual ~type_info ();
bool before (const type_info& arg) const;
const char* name () const
{ return _name; }
bool operator== (const type_info& arg) const;
bool operator!= (const type_info& arg) const;
};
inline bool type_info::
operator!= (const type_info& arg) const
{
return !operator== (arg);
}
class bad_cast : public exception {
public:
bad_cast() { }
virtual ~bad_cast() { }
};
}
}