[llvm-commits] CVS: llvm/lib/CodeGen/DwarfWriter.cpp
Jim Laskey
jlaskey at apple.com
Fri Jan 20 13:02:48 PST 2006
Changes in directory llvm/lib/CodeGen:
DwarfWriter.cpp updated: 1.9 -> 1.10
---
Log message:
Right size integer values before emitting.
---
Diffs of the changes: (+24 -8)
DwarfWriter.cpp | 32 ++++++++++++++++++++++++--------
1 files changed, 24 insertions(+), 8 deletions(-)
Index: llvm/lib/CodeGen/DwarfWriter.cpp
diff -u llvm/lib/CodeGen/DwarfWriter.cpp:1.9 llvm/lib/CodeGen/DwarfWriter.cpp:1.10
--- llvm/lib/CodeGen/DwarfWriter.cpp:1.9 Fri Jan 20 14:34:06 2006
+++ llvm/lib/CodeGen/DwarfWriter.cpp Fri Jan 20 15:02:36 2006
@@ -673,10 +673,12 @@
///
void DIEInteger::EmitValue(const DwarfWriter &DW, unsigned Form) const {
switch (Form) {
- case DW_FORM_data1: // Fall thru
- case DW_FORM_flag: DW.EmitByte(Integer); break;
- case DW_FORM_data2: DW.EmitShort(Integer); break;
- case DW_FORM_data4: DW.EmitLong(Integer); break;
+ case DW_FORM_flag: // Fall thru
+ case DW_FORM_data1: DW.EmitByte(Integer); break;
+ case DW_FORM_data2: DW.EmitShort(Integer); break;
+ case DW_FORM_data4: DW.EmitLong(Integer); break;
+ case DW_FORM_udata: DW.EmitULEB128Bytes(Integer); break;
+ case DW_FORM_sdata: DW.EmitSLEB128Bytes(Integer); break;
default: assert(0 && "DIE Value form not supported yet"); break;
}
}
@@ -689,6 +691,8 @@
case DW_FORM_data1: return sizeof(int8_t);
case DW_FORM_data2: return sizeof(int16_t);
case DW_FORM_data4: return sizeof(int32_t);
+ case DW_FORM_udata: return DW.SizeULEB128(Integer);
+ case DW_FORM_sdata: return DW.SizeSLEB128(Integer);
default: assert(0 && "DIE Value form not supported yet"); break;
}
return 0;
@@ -705,7 +709,7 @@
/// SizeOf - Determine size of string value in bytes.
///
unsigned DIEString::SizeOf(const DwarfWriter &DW, unsigned Form) const {
- return String.size() + sizeof('\0');
+ return String.size() + sizeof(char); // sizeof('\0');
}
//===----------------------------------------------------------------------===//
@@ -792,7 +796,18 @@
/// AddInt - Add a simple integer attribute data and value.
///
void DIE::AddInt(unsigned Attribute, unsigned Form,
- int Integer) {
+ int Integer, bool IsSigned) {
+ if (Form == 0) {
+ if (IsSigned) {
+ if ((char)Integer == Integer) Form = DW_FORM_data1;
+ else if ((short)Integer == Integer) Form = DW_FORM_data2;
+ else Form = DW_FORM_data4;
+ } else {
+ if ((unsigned char)Integer == Integer) Form = DW_FORM_data1;
+ else if ((unsigned short)Integer == Integer) Form = DW_FORM_data2;
+ else Form = DW_FORM_data4;
+ }
+ }
Abbrev->AddAttribute(Attribute, Form);
Values.push_back(new DIEInteger(Integer));
}
@@ -892,10 +907,11 @@
assert(IsExternal && "Internal variables not handled yet");
Variable = new DIE(DW_TAG_variable, DW_CHILDREN_no);
Variable->AddString (DW_AT_name, DW_FORM_string, Name);
- Variable->AddInt (DW_AT_decl_file, DW_FORM_data1, SourceFileID);
- Variable->AddInt (DW_AT_decl_line, DW_FORM_data1, Line);
+ Variable->AddInt (DW_AT_decl_file, 0, SourceFileID);
+ Variable->AddInt (DW_AT_decl_line, 0, Line);
Variable->AddDIEntry (DW_AT_type, DW_FORM_ref4, Type);
Variable->AddInt (DW_AT_external, DW_FORM_flag, (int)IsExternal);
+ // FIXME - needs to be an expression.
Variable->AddAsIsLabel(DW_AT_location, DW_FORM_block1,
std::string("_")+Name+".b");
Variable->Complete(DW);
More information about the llvm-commits
mailing list