mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-13 23:18:58 +00:00
More long term solution
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30720 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
83e6c9925e
commit
0c0feb9d5f
@ -1259,17 +1259,27 @@ DIE *DwarfWriter::NewType(DIE *Context, TypeDesc *TyDesc, CompileUnit *Unit) {
|
||||
Unit->getDie()->AddChild(Die);
|
||||
return Die;
|
||||
}
|
||||
|
||||
|
||||
// Check for pre-existence.
|
||||
DIE *&Slot = Unit->getDieMapSlotFor(TyDesc);
|
||||
if (Slot) return Slot;
|
||||
|
||||
// Type DIE result.
|
||||
DIE *Ty = NULL;
|
||||
|
||||
// Short cut for handling subprogram types (not really a TyDesc.)
|
||||
if (SubprogramDesc *SubprogramTy = dyn_cast<SubprogramDesc>(TyDesc)) {
|
||||
Slot = Ty = new DIE(DW_TAG_pointer_type);
|
||||
Ty->AddUInt(DW_AT_byte_size, 0, TAI->getAddressSize());
|
||||
Ty->AddString(DW_AT_name, DW_FORM_string, SubprogramTy->getName());
|
||||
Context->AddChild(Ty);
|
||||
return Slot;
|
||||
}
|
||||
|
||||
// Get core information.
|
||||
const std::string &Name = TyDesc->getName();
|
||||
uint64_t Size = TyDesc->getSize() >> 3;
|
||||
|
||||
DIE *Ty = NULL;
|
||||
|
||||
if (BasicTypeDesc *BasicTy = dyn_cast<BasicTypeDesc>(TyDesc)) {
|
||||
// Fundamental types like int, float, bool
|
||||
Slot = Ty = new DIE(DW_TAG_base_type);
|
||||
@ -1526,14 +1536,8 @@ DIE *DwarfWriter::NewType(DIE *Context, TypeDesc *TyDesc, CompileUnit *Unit) {
|
||||
}
|
||||
default: break;
|
||||
}
|
||||
} else if (SubprogramDesc *SubprogramTy = dyn_cast<SubprogramDesc>(TyDesc)) {
|
||||
Slot = Ty = new DIE(DW_TAG_pointer_type);
|
||||
Ty->AddUInt(DW_AT_byte_size, 0, TAI->getAddressSize());
|
||||
Ty->AddString(DW_AT_name, DW_FORM_string, SubprogramTy->getName());
|
||||
Context->AddChild(Ty);
|
||||
return Slot;
|
||||
}
|
||||
|
||||
|
||||
assert(Ty && "Type not supported yet");
|
||||
|
||||
// Add size if non-zero (derived types don't have a size.)
|
||||
|
Loading…
Reference in New Issue
Block a user