llvm-project/clang/lib
Bill Schmidt 4a2dcfe5ee This patch addresses a 64-bit PowerPC ELF ABI compatibility issue with
varargs parameter passing.

A strict reading of the ABI indicates that any argument with alignment greater
than 8 may require skipping doublewords in the parameter save area to align
the argument, and hence require skipping GPRs.  In practice, this is not done
by GCC.  The alignment restriction is used for internal alignment of a
structure, but a structure with 16-byte alignment, for example, is not
itself 16-byte aligned in the parameter save area.  Although this is messy,
it has become the de facto standard used in building existing libraries.

My initial varargs support followed the ABI language, but not the de facto
standard.  Running the GCC compatibility test suite exposed this issue, and
indeed showed that LLVM didn't pass parameters self-consistently with my
original logic.  Removing the additional alignment logic allows the affected
tests to now pass.

I modified the ppc64-varargs-struct.c test case to remove the existing test
for generation of alignment code, which is no longer appropriate.

Built and tested on powerpc64-unknown-linux-gnu with no new regressions.

llvm-svn: 166805
2012-10-26 19:59:03 +00:00
..
ARCMigrate Move PreprocessorOptions into the Lex library, and make it intrusively 2012-10-24 17:01:35 +00:00
AST Match up anonymous structs/unions in the ASTImporter. Previously, we'd 2012-10-26 16:45:11 +00:00
ASTMatchers Adds the possibility to run ASTMatchFinder over arbitrary AST nodes. 2012-10-24 14:47:44 +00:00
Analysis Fix potential null deference in CFG printer. 2012-10-12 22:56:31 +00:00
Basic Recommit Eric's code to validate ASM string's constraints and modifiers. 2012-10-25 23:28:48 +00:00
CodeGen This patch addresses a 64-bit PowerPC ELF ABI compatibility issue with 2012-10-26 19:59:03 +00:00
Driver [options] Fix mishandling of aliased options that was introduced in r166444. 2012-10-26 19:36:33 +00:00
Edit Change the representation of builtin functions in the AST 2012-08-31 00:14:07 +00:00
Frontend ASTUnit doesn't actually care about the predefines; don't record them. 2012-10-25 00:09:28 +00:00
FrontendTool Split library clangRewrite into clangRewriteCore and clangRewriteFrontend. 2012-09-01 05:09:24 +00:00
Headers X86 SSE Intrinsics: update header for sqrt_ss, rsqrt_ss and rcp_ss. 2012-10-26 00:25:10 +00:00
Lex Take into account that there may be a BOM at the beginning of the file, 2012-10-25 01:51:45 +00:00
Parse 'constexpr' and 'friend' are both declaration specifiers. Teach the parser this, for better error recovery. 2012-10-25 00:00:53 +00:00
Rewrite Make DiagnosticOptions intrusively reference-counted, and make sure 2012-10-23 22:26:28 +00:00
Sema Recommit Eric's code to validate ASM string's constraints and modifiers. 2012-10-25 23:28:48 +00:00
Serialization Remove the old predefines-buffer diffing code completely. It's been 2012-10-25 00:30:23 +00:00
StaticAnalyzer Add comments for RemoveRedundantMsgs, rename it to removeRedundantMsgs() per Jordan's feedback. 2012-10-26 16:02:36 +00:00
Tooling Make DiagnosticOptions intrusively reference-counted, and make sure 2012-10-23 22:26:28 +00:00
CMakeLists.txt Adds the AST Matcher library, which provides a in-C++ DSL to express 2012-07-06 05:48:52 +00:00
Makefile Adds the AST Matcher library, which provides a in-C++ DSL to express 2012-07-06 05:48:52 +00:00