mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-26 23:24:34 +00:00
add llvm-mc support for parsing the .subsections_via_symbols directive.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75500 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -89,6 +89,11 @@ namespace llvm {
|
|||||||
// symbol section in the constructor and initialize it here?
|
// symbol section in the constructor and initialize it here?
|
||||||
virtual void EmitLabel(MCSymbol *Symbol) = 0;
|
virtual void EmitLabel(MCSymbol *Symbol) = 0;
|
||||||
|
|
||||||
|
/// SubsectionsViaSymbols - Note in the output that the conventions used in
|
||||||
|
/// in the assembly file allows the bytes of a section to be divided up at
|
||||||
|
/// the boundaries of the symbols by a link editor for processing as atoms.
|
||||||
|
virtual void SubsectionsViaSymbols(void) = 0;
|
||||||
|
|
||||||
/// EmitAssignment - Emit an assignment of @param Value to @param Symbol.
|
/// EmitAssignment - Emit an assignment of @param Value to @param Symbol.
|
||||||
///
|
///
|
||||||
/// This corresponds to an assembler statement such as:
|
/// This corresponds to an assembler statement such as:
|
||||||
|
@ -38,6 +38,8 @@ namespace {
|
|||||||
|
|
||||||
virtual void EmitLabel(MCSymbol *Symbol);
|
virtual void EmitLabel(MCSymbol *Symbol);
|
||||||
|
|
||||||
|
virtual void SubsectionsViaSymbols(void);
|
||||||
|
|
||||||
virtual void EmitAssignment(MCSymbol *Symbol, const MCValue &Value,
|
virtual void EmitAssignment(MCSymbol *Symbol, const MCValue &Value,
|
||||||
bool MakeAbsolute = false);
|
bool MakeAbsolute = false);
|
||||||
|
|
||||||
@ -117,6 +119,10 @@ void MCAsmStreamer::EmitLabel(MCSymbol *Symbol) {
|
|||||||
Symbol->setExternal(false);
|
Symbol->setExternal(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MCAsmStreamer::SubsectionsViaSymbols(void) {
|
||||||
|
OS << ".subsections_via_symbols\n";
|
||||||
|
}
|
||||||
|
|
||||||
void MCAsmStreamer::EmitAssignment(MCSymbol *Symbol, const MCValue &Value,
|
void MCAsmStreamer::EmitAssignment(MCSymbol *Symbol, const MCValue &Value,
|
||||||
bool MakeAbsolute) {
|
bool MakeAbsolute) {
|
||||||
assert(!Symbol->getSection() && "Cannot assign to a label!");
|
assert(!Symbol->getSection() && "Cannot assign to a label!");
|
||||||
|
6
test/MC/AsmParser/directive_subsections_via_symbols.s
Normal file
6
test/MC/AsmParser/directive_subsections_via_symbols.s
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# RUN: llvm-mc %s | FileCheck %s
|
||||||
|
|
||||||
|
# CHECK: TEST0:
|
||||||
|
# CHECK: .subsections_via_symbols
|
||||||
|
TEST0:
|
||||||
|
.subsections_via_symbols
|
@ -527,6 +527,9 @@ bool AsmParser::ParseStatement() {
|
|||||||
if (!strcmp(IDVal, ".zerofill"))
|
if (!strcmp(IDVal, ".zerofill"))
|
||||||
return ParseDirectiveDarwinZerofill();
|
return ParseDirectiveDarwinZerofill();
|
||||||
|
|
||||||
|
if (!strcmp(IDVal, ".subsections_via_symbols"))
|
||||||
|
return ParseDirectiveDarwinSubsectionsViaSymbols();
|
||||||
|
|
||||||
Warning(IDLoc, "ignoring directive for now");
|
Warning(IDLoc, "ignoring directive for now");
|
||||||
EatToEndOfStatement();
|
EatToEndOfStatement();
|
||||||
return false;
|
return false;
|
||||||
@ -1052,3 +1055,16 @@ bool AsmParser::ParseDirectiveDarwinZerofill() {
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// ParseDirectiveDarwinSubsectionsViaSymbols
|
||||||
|
/// ::= .subsections_via_symbols
|
||||||
|
bool AsmParser::ParseDirectiveDarwinSubsectionsViaSymbols() {
|
||||||
|
if (Lexer.isNot(asmtok::EndOfStatement))
|
||||||
|
return TokError("unexpected token in '.subsections_via_symbols' directive");
|
||||||
|
|
||||||
|
Lexer.Lex();
|
||||||
|
|
||||||
|
Out.SubsectionsViaSymbols();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
@ -112,6 +112,9 @@ private:
|
|||||||
|
|
||||||
bool ParseDirectiveComm(bool IsLocal); // ".comm" and ".lcomm"
|
bool ParseDirectiveComm(bool IsLocal); // ".comm" and ".lcomm"
|
||||||
bool ParseDirectiveDarwinZerofill(); // Darwin specific ".zerofill"
|
bool ParseDirectiveDarwinZerofill(); // Darwin specific ".zerofill"
|
||||||
|
|
||||||
|
// Darwin specific ".subsections_via_symbols"
|
||||||
|
bool ParseDirectiveDarwinSubsectionsViaSymbols();
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace llvm
|
} // end namespace llvm
|
||||||
|
Reference in New Issue
Block a user