Microsoft X64 Mangling
Warren Hunt
whunt at google.com
Thu May 9 11:32:30 PDT 2013
I updated the white space.
Are these are the checks for pointers/references to functions that you were
looking for? (lines 128-134 of mangle-ms-arg-qualifiers.cpp)
void foo_p6ahxz(int x()) {}
// CHECK: "\01?foo_p6ahxz@@YAXP6AHXZ at Z"
// X64: "\01?foo_p6ahxz@@YAXP6AHXZ at Z"
void foo_a6ahxz(int (&x)()) {}
// CHECK: "\01?foo_a6ahxz@@YAXA6AHXZ at Z"
// X64: "\01?foo_a6ahxz@@YAXA6AHXZ at Z"
void foo_q6ahxz(int (&&x)()) {}
// CHECK: "\01?foo_q6ahxz@@YAX$$Q6AHXZ at Z"
// X64: "\01?foo_q6ahxz@@YAX$$Q6AHXZ at Z"
On Wed, May 8, 2013 at 3:39 PM, Richard Smith <richard at metafoo.co.uk> wrote:
> @@ -1277,6 +1284,8 @@ void
> MicrosoftCXXNameMangler::mangleFunctionClass(const FunctionDecl *FD) {
> else
> Out << 'Q';
> }
> + if (PointersAre64Bit && !MD->isStatic())
> + Out << 'E';
> } else
> Out << 'Y';
> }
>
> Needs more indentation.
>
> You have special cases for pointers/references to functions (where no E is
> added) but I don't see any test cases for that.
>
> The BNF comments should be updated in various places to indicate the
> presence of this specifier. It might also be useful to factor out the "if
> (PointersAre64Bit) Out << 'E';" code into a function, and make up a name
> for it to use in the BNF descriptions.
>
> On Wed, May 8, 2013 at 1:36 PM, Warren Hunt <whunt at google.com> wrote:
>
>> ping
>>
>>
>> On Fri, May 3, 2013 at 12:07 PM, Warren Hunt <whunt at google.com> wrote:
>>
>>> Sounds good. I added a local that caches the 64-bitness of pointers.
>>>
>>> -Warren
>>>
>>>
>>> On Thu, May 2, 2013 at 2:51 PM, Charles Davis <cdavis5x at gmail.com>wrote:
>>>
>>>>
>>>> On May 2, 2013, at 3:19 PM, Warren Hunt wrote:
>>>>
>>>> > I've put together a patch that fixes all of the issues I found with
>>>> Microsoft name mangling in 64-bit mode. Mostly it involves adding an 'E'
>>>> note to all pointers that are 64-bit (including 'this' pointers). This is
>>>> done in MicrosoftMangle.cpp. I've updated 3 of the mangling test files
>>>> with X64 tests, which provides some reasonable amount of coverage.
>>>> >
>>>> > Please review.
>>>> >
>>>> > Thanks,
>>>> > -Warren
>>>> >
>>>> > (Note: This is my first patch.)
>>>> Welcome to Clang development!
>>>>
>>>> > @@ -1277,6 +1278,9 @@ void
>>>> MicrosoftCXXNameMangler::mangleFunctionClass(const FunctionDecl *FD) {
>>>> > else
>>>> > Out << 'Q';
>>>> > }
>>>> > + if (getASTContext().getTargetInfo().getPointerWidth(0) == 64 &&
>>>> > + !MD->isStatic())
>>>> > + Out << 'E';
>>>> > } else
>>>> > Out << 'Y';
>>>> > }
>>>> The indentation on this looks wrong. (You can't tell from here, but
>>>> it's definitely wrong in the patch itself.) Also, I think we should handle
>>>> this where we mangle in the 'this' qualifiers--the 'E' is because the
>>>> 'this' pointer is Extended (__ptr64 instead of __ptr32). (The relevant line
>>>> is 1172.)
>>>>
>>>> > @@ -1390,6 +1394,8 @@ void
>>>> MicrosoftCXXNameMangler::mangleDecayedArrayType(const ArrayType *T,
>>>> > manglePointerQualifiers(T->getElementType().getQualifiers());
>>>> > } else {
>>>> > Out << 'Q';
>>>> > + if (getASTContext().getTargetInfo().getPointerWidth(0) == 64)
>>>> > + Out << 'E';
>>>> > }
>>>> > mangleType(T->getElementType(), SourceRange());
>>>> > }
>>>> Why only here? What does VC do in the global case?
>>>>
>>>> There's a lot of code duplication (i.e. checks against the pointer size
>>>> sprinkled throughout the code). Most of those can be collapsed into
>>>> mangleQualifiers().
>>>>
>>>> Someone else wrote a patch a while back. You can find it here:
>>>>
>>>> http://llvm-reviews.chandlerc.com/D101
>>>>
>>>> I didn't finish reviewing it because real life got in the way. :\. You
>>>> might find some ideas in there.
>>>>
>>>> Chip
>>>>
>>>>
>>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130509/fe037d36/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: x64mangle2.patch
Type: application/octet-stream
Size: 16394 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130509/fe037d36/attachment.obj>
More information about the cfe-commits
mailing list