| 1376 | |
| 1377 | #if defined(ASMJIT_TEST) |
| 1378 | UNIT(code_holder) { |
| 1379 | CodeHolder code; |
| 1380 | |
| 1381 | INFO("Verifying CodeHolder::init()"); |
| 1382 | Environment env; |
| 1383 | env.init(Arch::kX86); |
| 1384 | |
| 1385 | code.init(env); |
| 1386 | EXPECT_EQ(code.arch(), Arch::kX86); |
| 1387 | |
| 1388 | INFO("Verifying named labels"); |
| 1389 | uint32_t dummy_id; |
| 1390 | uint32_t label_id1; |
| 1391 | uint32_t label_id2; |
| 1392 | |
| 1393 | // Anonymous labels can have no-name (this is basically like calling `code.new_label_id()`). |
| 1394 | EXPECT_EQ(code.new_named_label_id(Out(dummy_id), "", SIZE_MAX, LabelType::kAnonymous), Error::kOk); |
| 1395 | |
| 1396 | // Global labels must have a name - not providing one is an error. |
| 1397 | EXPECT_EQ(code.new_named_label_id(Out(dummy_id), "", SIZE_MAX, LabelType::kGlobal), Error::kInvalidLabelName); |
| 1398 | |
| 1399 | // A name of a global label cannot repeat. |
| 1400 | EXPECT_EQ(code.new_named_label_id(Out(label_id1), "NamedLabel1", SIZE_MAX, LabelType::kGlobal), Error::kOk); |
| 1401 | EXPECT_EQ(code.new_named_label_id(Out(dummy_id), "NamedLabel1", SIZE_MAX, LabelType::kGlobal), Error::kLabelAlreadyDefined); |
| 1402 | EXPECT_TRUE(code.is_label_valid(label_id1)); |
| 1403 | EXPECT_EQ(code.label_entry_of(label_id1).name_size(), 11u); |
| 1404 | EXPECT_EQ(strcmp(code.label_entry_of(label_id1).name(), "NamedLabel1"), 0); |
| 1405 | EXPECT_EQ(code.label_id_by_name("NamedLabel1"), label_id1); |
| 1406 | |
| 1407 | EXPECT_EQ(code.new_named_label_id(Out(label_id2), "NamedLabel2", SIZE_MAX, LabelType::kGlobal), Error::kOk); |
| 1408 | EXPECT_EQ(code.new_named_label_id(Out(dummy_id), "NamedLabel2", SIZE_MAX, LabelType::kGlobal), Error::kLabelAlreadyDefined); |
| 1409 | EXPECT_TRUE(code.is_label_valid(label_id2)); |
| 1410 | EXPECT_EQ(code.label_entry_of(label_id2).name_size(), 11u); |
| 1411 | EXPECT_EQ(strcmp(code.label_entry_of(label_id2).name(), "NamedLabel2"), 0); |
| 1412 | EXPECT_EQ(code.label_id_by_name("NamedLabel2"), label_id2); |
| 1413 | |
| 1414 | INFO("Verifying section ordering"); |
| 1415 | Section* section1; |
| 1416 | EXPECT_EQ(code.new_section(Out(section1), "high-priority", SIZE_MAX, SectionFlags::kNone, 1, -1), Error::kOk); |
| 1417 | EXPECT_EQ(code.sections()[1], section1); |
| 1418 | EXPECT_EQ(code.sections_by_order()[0], section1); |
| 1419 | |
| 1420 | Section* section0; |
| 1421 | EXPECT_EQ(code.new_section(Out(section0), "higher-priority", SIZE_MAX, SectionFlags::kNone, 1, -2), Error::kOk); |
| 1422 | EXPECT_EQ(code.sections()[2], section0); |
| 1423 | EXPECT_EQ(code.sections_by_order()[0], section0); |
| 1424 | EXPECT_EQ(code.sections_by_order()[1], section1); |
| 1425 | |
| 1426 | Section* section3; |
| 1427 | EXPECT_EQ(code.new_section(Out(section3), "low-priority", SIZE_MAX, SectionFlags::kNone, 1, 2), Error::kOk); |
| 1428 | EXPECT_EQ(code.sections()[3], section3); |
| 1429 | EXPECT_EQ(code.sections_by_order()[3], section3); |
| 1430 | } |
| 1431 | #endif |
| 1432 | |
| 1433 | ASMJIT_END_NAMESPACE |
nothing calls this directly
no test coverage detected