Ignore:
Timestamp:
Feb 6, 2018, 9:50:08 PM (22 months ago)
Author:
matszpk
Message:

CLRadeonExtender: ROCm: change syntax of the pseudo-op '.md_symname'. initialize version of metadata to 1.0. fixed parsing of the '.arg' pseudo-op.
fixed string escaping in ROCm metadata. Escape ':' printf format in ROCm metadata. Use default symname if not supplied.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/amdbin/ROCmBinaries.cpp

    r3729 r3730  
    5959}
    6060
    61 void ROCmMetadata::initialize ()
    62 {
    63     version[0] = version[1] = 0;
     61void ROCmMetadata::initialize()
     62{
     63    version[0] = 1;
     64    version[1] = 0;
    6465}
    6566
     
    15161517        itocstrCStyle(values[i], numBuf, 24);
    15171518        output += numBuf;
    1518         output += (i+1<n) ? ", " : "]\n";
     1519        output += (i+1<n) ? ", " : " ]\n";
    15191520    }
    15201521}
     
    15321533    bool toEscape = false;
    15331534    const char* s;
    1534     bool nonDigit = false;
    15351535    for (s = input.c_str(); *s!=0; s++)
    15361536    {
     
    15381538        if (c < 0x20 || c >= 0x80 || c=='*' || c=='&' || c=='!' || c=='@' ||
    15391539            c=='\'' || c=='\"')
    1540         {
    15411540            toEscape = true;
    1542             break;
    1543         }
    1544         nonDigit |= isDigit(c);
    15451541    }
    15461542    // if spaces in begin and end
    1547     if (!nonDigit || isSpace(input[0]) || isDigit(input[0]) ||
     1543    if (isSpace(input[0]) || isDigit(input[0]) ||
    15481544        (!input.empty() && isSpace(s[-1])))
    15491545        toEscape = true;
     
    15571553    }
    15581554    return input.c_str();
     1555}
     1556
     1557static std::string escapePrintfFormat(const std::string& fmt)
     1558{
     1559    std::string out;
     1560    out.reserve(fmt.size());
     1561    for (char c: fmt)
     1562        if (c!=':')
     1563            out.push_back(c);
     1564        else
     1565            out += "\\72";
     1566    return out;
    15591567}
    15601568
     
    15971605        }
    15981606        // printf format
    1599         output += escapeStringCStyle(printfInfo.format);
     1607        std::string escapedFmt = escapeStringCStyle(printfInfo.format);
     1608        escapedFmt = escapePrintfFormat(escapedFmt);
     1609        output += escapedFmt;
    16001610        output += "'\n";
    16011611    }
     
    16091619        output += "  - Name:            ";
    16101620        output.append(kernel.name.c_str(), kernel.name.size());
    1611         output += "\n    SymbolName:      '";
    1612         output += escapeYAMLString(kernel.symbolName);
    1613         output += "'\n";
     1621        output += "\n    SymbolName:      ";
     1622        if (!kernel.symbolName.empty())
     1623            output += escapeYAMLString(kernel.symbolName);
     1624        else
     1625        {
     1626            // default is kernel name + '@kd'
     1627            std::string symName = kernel.name.c_str();
     1628            symName += "@kd";
     1629            output += escapeYAMLString(symName);
     1630        }
     1631        output += "\n";
    16141632        if (!kernel.language.empty())
    16151633        {
Note: See TracChangeset for help on using the changeset viewer.