Skip to content

Commit b4ec7d7

Browse files
committed
[lld][ELF] Add unit test based on data-commands2.test
1 parent e25a2b4 commit b4ec7d7

File tree

3 files changed

+105
-0
lines changed

3 files changed

+105
-0
lines changed

lld/ELF/LinkerScriptLexer.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,10 @@ LinkerScriptLexer::getTokenfromKeyword(llvm::StringRef keyword) const {
310310
KEYWORD(CONSTRUCTORS);
311311
KEYWORD(MAXPAGESIZE);
312312
KEYWORD(COMMONPAGESIZE);
313+
KEYWORD(BYTE);
314+
KEYWORD(SHORT);
315+
KEYWORD(LONG);
316+
KEYWORD(QUAD);
313317

314318
#undef KEYWORD
315319

lld/ELF/ScriptTokenizer.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,11 @@ enum class ScriptToken {
111111
LS_MAXPAGESIZE,
112112
LS_COMMONPAGESIZE,
113113

114+
LS_BYTE,
115+
LS_SHORT,
116+
LS_LONG,
117+
LS_QUAD,
118+
114119
LS_Local, // local
115120
LS_Global, // global
116121
LS_Extern, // extern

lld/unittests/ELF/LinkerScriptLexerTest.cpp

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,5 +384,101 @@ TEST_F(LinkerScriptLexerTest, checkCONSTRUCTORS) {
384384
lexAndCheckTokens(ExpectedTokens);
385385
}
386386

387+
TEST_F(LinkerScriptLexerTest, checkDataCommands) {
388+
// this test case comes from lld/test/ELF/linkerscript/data-commands2.test
389+
llvm::StringRef testRef = "MEMORY {\
390+
rom (rwx) : ORIGIN = 0x00, LENGTH = 2K\
391+
} \
392+
SECTIONS {\
393+
.foo : {\
394+
*(.foo.1) \
395+
BYTE(0x11)\
396+
*(.foo.2)\
397+
SHORT(0x1122)\
398+
*(.foo.3)\
399+
LONG(0x11223344)\
400+
*(.foo.4)\
401+
QUAD(0x1122334455667788)\
402+
} > rom \
403+
.bar : { \
404+
*(.bar.1) \
405+
BYTE(a + 1) \
406+
*(.bar.2) \
407+
SHORT(b) \
408+
*(.bar.3) \
409+
LONG(c + 2) \
410+
*(.bar.4) \
411+
QUAD(d) \
412+
} > rom}";
413+
414+
setupCallToLinkScriptLexer(testRef);
415+
llvm::SmallVector<ScriptToken> ExpectedTokens(
416+
{ScriptToken::LS_MEMORY, ScriptToken::CurlyBegin,
417+
ScriptToken::Identifier, ScriptToken::BracektBegin,
418+
ScriptToken::Identifier, ScriptToken::BracektEnd,
419+
ScriptToken::Colon, ScriptToken::LS_ORIGIN,
420+
ScriptToken::Assign, ScriptToken::Hexdecimal,
421+
ScriptToken::Comma, ScriptToken::LS_LENGTH,
422+
ScriptToken::Assign, ScriptToken::Decimal_K,
423+
ScriptToken::CurlyEnd,
424+
425+
ScriptToken::LS_SECTIONS, ScriptToken::CurlyBegin,
426+
ScriptToken::Identifier, ScriptToken::Colon,
427+
ScriptToken::CurlyBegin,
428+
429+
ScriptToken::Asterisk, ScriptToken::BracektBegin,
430+
ScriptToken::Identifier, ScriptToken::BracektEnd,
431+
ScriptToken::LS_BYTE, ScriptToken::BracektBegin,
432+
ScriptToken::Hexdecimal, ScriptToken::BracektEnd,
433+
434+
ScriptToken::Asterisk, ScriptToken::BracektBegin,
435+
ScriptToken::Identifier, ScriptToken::BracektEnd,
436+
ScriptToken::LS_SHORT, ScriptToken::BracektBegin,
437+
ScriptToken::Hexdecimal, ScriptToken::BracektEnd,
438+
439+
ScriptToken::Asterisk, ScriptToken::BracektBegin,
440+
ScriptToken::Identifier, ScriptToken::BracektEnd,
441+
ScriptToken::LS_LONG, ScriptToken::BracektBegin,
442+
ScriptToken::Hexdecimal, ScriptToken::BracektEnd,
443+
444+
ScriptToken::Asterisk, ScriptToken::BracektBegin,
445+
ScriptToken::Identifier, ScriptToken::BracektEnd,
446+
ScriptToken::LS_QUAD, ScriptToken::BracektBegin,
447+
ScriptToken::Hexdecimal, ScriptToken::BracektEnd,
448+
449+
ScriptToken::CurlyEnd, ScriptToken::Greater,
450+
ScriptToken::Identifier,
451+
452+
ScriptToken::Identifier, ScriptToken::Colon,
453+
ScriptToken::CurlyBegin,
454+
455+
ScriptToken::Asterisk, ScriptToken::BracektBegin,
456+
ScriptToken::Identifier, ScriptToken::BracektEnd,
457+
ScriptToken::LS_BYTE, ScriptToken::BracektBegin,
458+
ScriptToken::Identifier, ScriptToken::Plus,
459+
ScriptToken::Decimal, ScriptToken::BracektEnd,
460+
461+
ScriptToken::Asterisk, ScriptToken::BracektBegin,
462+
ScriptToken::Identifier, ScriptToken::BracektEnd,
463+
ScriptToken::LS_SHORT, ScriptToken::BracektBegin,
464+
ScriptToken::Identifier, ScriptToken::BracektEnd,
465+
466+
ScriptToken::Asterisk, ScriptToken::BracektBegin,
467+
ScriptToken::Identifier, ScriptToken::BracektEnd,
468+
ScriptToken::LS_LONG, ScriptToken::BracektBegin,
469+
ScriptToken::Identifier, ScriptToken::Plus,
470+
ScriptToken::Decimal, ScriptToken::BracektEnd,
471+
472+
ScriptToken::Asterisk, ScriptToken::BracektBegin,
473+
ScriptToken::Identifier, ScriptToken::BracektEnd,
474+
ScriptToken::LS_QUAD, ScriptToken::BracektBegin,
475+
ScriptToken::Identifier, ScriptToken::BracektEnd,
476+
477+
ScriptToken::CurlyEnd, ScriptToken::Greater,
478+
ScriptToken::Identifier, ScriptToken::CurlyEnd});
479+
480+
lexAndCheckTokens(ExpectedTokens);
481+
}
482+
387483
} // namespace elf
388484
} // namespace lld

0 commit comments

Comments
 (0)