Problem with Linux PPC64 assembly output.

The latest binutils (2.21.2) assembler for the PPC64 complains about the .size
directive emitted by LLVM as not containing an absolute expression.

An example:
        .quad .L.__umodsi3,.TOC.@tocbase
        mflr 0
        mtlr 0
        .size __umodsi3, .Ltmp0-__umodsi3

The correct size expression should be .Ltmp0-.L.__umodsi3

The code which does this is in AsmPrinter.cpp:

  // If the target wants a .size directive for the size of the function, emit
  // it.
  if (MAI->hasDotTypeDotSizeDirective()) {
    // Create a symbol for the end of function, so we can get the size as
    // difference between the function label and the temp label.
    MCSymbol *FnEndLabel = OutContext.CreateTempSymbol();

    const MCExpr *SizeExp =
      MCBinaryExpr::CreateSub(MCSymbolRefExpr::Create(FnEndLabel, OutContext),
    OutStreamer.EmitELFSize(CurrentFnSym, SizeExp);

I've filed a bug for this:

This looks a little tricky to fix since there is no easy hook that I can find to
override how the .size directive is output.

Anyone have any suggestions, or have I missed something?