[PowerPC] Support parsing GNU attributes in MC

This patch is the first step to enable support of GNU attribute in LLVM
PowerPC, enabling it for PowerPC targets, otherwise llvm-mc raises error
when seeing the attribute section.

Reviewed By: jsji

Differential Revision: https://reviews.llvm.org/D115854
This commit is contained in:
Qiu Chaofan 2022-01-22 23:29:34 +08:00
parent 8dedf9b58b
commit 00d68c3824
2 changed files with 23 additions and 0 deletions

View File

@ -121,6 +121,7 @@ class PPCAsmParser : public MCTargetAsmParser {
bool ParseDirectiveMachine(SMLoc L);
bool ParseDirectiveAbiVersion(SMLoc L);
bool ParseDirectiveLocalEntry(SMLoc L);
bool ParseGNUAttribute(SMLoc L);
bool MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode,
OperandVector &Operands, MCStreamer &Out,
@ -1605,6 +1606,8 @@ bool PPCAsmParser::ParseDirective(AsmToken DirectiveID) {
ParseDirectiveAbiVersion(DirectiveID.getLoc());
else if (IDVal == ".localentry")
ParseDirectiveLocalEntry(DirectiveID.getLoc());
else if (IDVal.startswith(".gnu_attribute"))
ParseGNUAttribute(DirectiveID.getLoc());
else
return true;
return false;
@ -1720,7 +1723,16 @@ bool PPCAsmParser::ParseDirectiveLocalEntry(SMLoc L) {
return false;
}
bool PPCAsmParser::ParseGNUAttribute(SMLoc L) {
int64_t Tag;
int64_t IntegerValue;
if (!getParser().parseGNUAttribute(L, Tag, IntegerValue))
return false;
getParser().getStreamer().emitGNUAttribute(Tag, IntegerValue);
return true;
}
/// Force static initialization.
extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializePowerPCAsmParser() {

View File

@ -0,0 +1,11 @@
# RUN: llvm-mc -triple powerpc64-unknown-linux-gnu < %s | FileCheck %s
# RUN: llvm-mc -triple powerpc64le-unknown-linux-gnu < %s | FileCheck %s
.text
add:
add 3, 4, 3
blr
.gnu_attribute 4, 13
# CHECK-LABEL: add:
# CHECK: .gnu_attribute 4, 13