diff options
author | dim <dim@FreeBSD.org> | 2014-11-24 18:43:37 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2014-11-24 18:43:37 +0000 |
commit | 82ca21468e7fe6a5112961ba86434579bed3f204 (patch) | |
tree | c2772f1f62ff857fee7802d46eb79f45d45d6d54 /contrib/llvm/patches/patch-r264826-llvm-r202188-variadic-fn-debug-info.diff | |
parent | 6148c19c738a92f344008aa3f88f4e008bada0ee (diff) | |
download | FreeBSD-src-82ca21468e7fe6a5112961ba86434579bed3f204.zip FreeBSD-src-82ca21468e7fe6a5112961ba86434579bed3f204.tar.gz |
Cleanup patch set, and update README.TXT. Add three new patches.
Diffstat (limited to 'contrib/llvm/patches/patch-r264826-llvm-r202188-variadic-fn-debug-info.diff')
-rw-r--r-- | contrib/llvm/patches/patch-r264826-llvm-r202188-variadic-fn-debug-info.diff | 176 |
1 files changed, 0 insertions, 176 deletions
diff --git a/contrib/llvm/patches/patch-r264826-llvm-r202188-variadic-fn-debug-info.diff b/contrib/llvm/patches/patch-r264826-llvm-r202188-variadic-fn-debug-info.diff deleted file mode 100644 index a91307b..0000000 --- a/contrib/llvm/patches/patch-r264826-llvm-r202188-variadic-fn-debug-info.diff +++ /dev/null @@ -1,176 +0,0 @@ -Merge LLVM r202188: - - Debug info: Support variadic functions. - Variadic functions have an unspecified parameter tag after the last - argument. In IR this is represented as an unspecified parameter in the - subroutine type. - - Paired commit with CFE r202185. - - rdar://problem/13690847 - - This re-applies r202184 + a bugfix in DwarfDebug's argument handling. - -This merge includes a change to use the LLVM 3.4 API in -lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp: - -DwarfUnit -> CompileUnit - -Sponsored by: DARPA, AFRL - -Introduced here: http://svnweb.freebsd.org/changeset/base/264826 - -Index: include/llvm/DIBuilder.h -=================================================================== ---- include/llvm/DIBuilder.h (revision 264825) -+++ include/llvm/DIBuilder.h (revision 264826) -@@ -439,7 +439,7 @@ - /// through debug info anchors. - void retainType(DIType T); - -- /// createUnspecifiedParameter - Create unspeicified type descriptor -+ /// createUnspecifiedParameter - Create unspecified type descriptor - /// for a subroutine type. - DIDescriptor createUnspecifiedParameter(); - -Index: lib/CodeGen/AsmPrinter/DwarfDebug.cpp -=================================================================== ---- lib/CodeGen/AsmPrinter/DwarfDebug.cpp (revision 264825) -+++ lib/CodeGen/AsmPrinter/DwarfDebug.cpp (revision 264826) -@@ -404,15 +404,21 @@ - DIArray Args = SPTy.getTypeArray(); - uint16_t SPTag = SPTy.getTag(); - if (SPTag == dwarf::DW_TAG_subroutine_type) -+ // FIXME: Use DwarfUnit::constructSubprogramArguments() here. - for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) { -- DIE *Arg = -+ DIType ATy(Args.getElement(i)); -+ if (ATy.isUnspecifiedParameter()) { -+ assert(i == N-1 && "ellipsis must be the last argument"); -+ SPCU->createAndAddDIE(dwarf::DW_TAG_unspecified_parameters, *SPDie); -+ } else { -+ DIE *Arg = - SPCU->createAndAddDIE(dwarf::DW_TAG_formal_parameter, *SPDie); -- DIType ATy(Args.getElement(i)); -- SPCU->addType(Arg, ATy); -- if (ATy.isArtificial()) -- SPCU->addFlag(Arg, dwarf::DW_AT_artificial); -- if (ATy.isObjectPointer()) -- SPCU->addDIEEntry(SPDie, dwarf::DW_AT_object_pointer, Arg); -+ SPCU->addType(Arg, ATy); -+ if (ATy.isArtificial()) -+ SPCU->addFlag(Arg, dwarf::DW_AT_artificial); -+ if (ATy.isObjectPointer()) -+ SPCU->addDIEEntry(SPDie, dwarf::DW_AT_object_pointer, Arg); -+ } - } - DIE *SPDeclDie = SPDie; - SPDie = -@@ -579,7 +585,7 @@ - DIE *ObjectPointer = NULL; - - // Collect arguments for current function. -- if (LScopes.isCurrentFunctionScope(Scope)) -+ if (LScopes.isCurrentFunctionScope(Scope)) { - for (unsigned i = 0, N = CurrentFnArguments.size(); i < N; ++i) - if (DbgVariable *ArgDV = CurrentFnArguments[i]) - if (DIE *Arg = -@@ -588,6 +594,16 @@ - if (ArgDV->isObjectPointer()) ObjectPointer = Arg; - } - -+ // Create the unspecified parameter that marks a function as variadic. -+ DISubprogram SP(Scope->getScopeNode()); -+ assert(SP.Verify()); -+ DIArray FnArgs = SP.getType().getTypeArray(); -+ if (FnArgs.getElement(FnArgs.getNumElements()-1).isUnspecifiedParameter()) { -+ DIE *Ellipsis = new DIE(dwarf::DW_TAG_unspecified_parameters); -+ Children.push_back(Ellipsis); -+ } -+ } -+ - // Collect lexical scope children first. - const SmallVectorImpl<DbgVariable *> &Variables =ScopeVariables.lookup(Scope); - for (unsigned i = 0, N = Variables.size(); i < N; ++i) -Index: lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp -=================================================================== ---- lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp (revision 264825) -+++ lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp (revision 264826) -@@ -1116,6 +1116,22 @@ - addSourceLine(&Buffer, DTy); - } - -+/// constructSubprogramArguments - Construct function argument DIEs. -+void CompileUnit::constructSubprogramArguments(DIE &Buffer, DIArray Args) { -+ for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) { -+ DIDescriptor Ty = Args.getElement(i); -+ if (Ty.isUnspecifiedParameter()) { -+ assert(i == N-1 && "ellipsis must be the last argument"); -+ createAndAddDIE(dwarf::DW_TAG_unspecified_parameters, Buffer); -+ } else { -+ DIE *Arg = createAndAddDIE(dwarf::DW_TAG_formal_parameter, Buffer); -+ addType(Arg, DIType(Ty)); -+ if (DIType(Ty).isArtificial()) -+ addFlag(Arg, dwarf::DW_AT_artificial); -+ } -+ } -+} -+ - /// Return true if the type is appropriately scoped to be contained inside - /// its own type unit. - static bool isTypeUnitScoped(DIType Ty, const DwarfDebug *DD) { -@@ -1170,19 +1186,12 @@ - addType(&Buffer, RTy); - - bool isPrototyped = true; -- // Add arguments. -- for (unsigned i = 1, N = Elements.getNumElements(); i < N; ++i) { -- DIDescriptor Ty = Elements.getElement(i); -- if (Ty.isUnspecifiedParameter()) { -- createAndAddDIE(dwarf::DW_TAG_unspecified_parameters, Buffer); -- isPrototyped = false; -- } else { -- DIE *Arg = createAndAddDIE(dwarf::DW_TAG_formal_parameter, Buffer); -- addType(Arg, DIType(Ty)); -- if (DIType(Ty).isArtificial()) -- addFlag(Arg, dwarf::DW_AT_artificial); -- } -- } -+ if (Elements.getNumElements() == 2 && -+ Elements.getElement(1).isUnspecifiedParameter()) -+ isPrototyped = false; -+ -+ constructSubprogramArguments(Buffer, Elements); -+ - // Add prototype flag if we're dealing with a C language and the - // function has been prototyped. - uint16_t Language = getLanguage(); -@@ -1475,13 +1484,7 @@ - - // Add arguments. Do not add arguments for subprogram definition. They will - // be handled while processing variables. -- for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) { -- DIE *Arg = createAndAddDIE(dwarf::DW_TAG_formal_parameter, *SPDie); -- DIType ATy(Args.getElement(i)); -- addType(Arg, ATy); -- if (ATy.isArtificial()) -- addFlag(Arg, dwarf::DW_AT_artificial); -- } -+ constructSubprogramArguments(*SPDie, Args); - } - - if (SP.isArtificial()) -Index: lib/CodeGen/AsmPrinter/DwarfCompileUnit.h -=================================================================== ---- lib/CodeGen/AsmPrinter/DwarfCompileUnit.h (revision 264825) -+++ lib/CodeGen/AsmPrinter/DwarfCompileUnit.h (revision 264826) -@@ -342,6 +342,9 @@ - void emitHeader(const MCSection *ASection, const MCSymbol *ASectionSym); - - private: -+ /// constructSubprogramArguments - Construct function argument DIEs. -+ void constructSubprogramArguments(DIE &Buffer, DIArray Args); -+ - /// constructTypeDIE - Construct basic type die from DIBasicType. - void constructTypeDIE(DIE &Buffer, DIBasicType BTy); - |