aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2020-08-07 20:36:22 +0300
committerDenis Shienkov <denis.shienkov@gmail.com>2020-08-08 16:33:20 +0000
commit6eec3bde9860fdff2bd09b319d63f63e63d23cc1 (patch)
treed122e066555b39c280ea95437debe18cb3d82247
parent534794963986ca37d39461db6dbdafb94048a5e3 (diff)
baremetal: Fix linker MAP file generation for KEIL C51/C251/C166
1. We need to use the {NO}PRINT linker options: * https://www.keil.com/support/man/docs/bl51/bl51_noprint.htm 2. The KEIL C251 should generate the linker MAP file with the *.map extension. Change-Id: Ibc1f362c7010a1c2812c21382b617e246c81e100 Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
-rw-r--r--share/qbs/modules/cpp/keil.js17
-rw-r--r--tests/auto/blackbox/tst_blackboxbaremetal.cpp2
2 files changed, 15 insertions, 4 deletions
diff --git a/share/qbs/modules/cpp/keil.js b/share/qbs/modules/cpp/keil.js
index efbecb582..f66fd4bb2 100644
--- a/share/qbs/modules/cpp/keil.js
+++ b/share/qbs/modules/cpp/keil.js
@@ -39,8 +39,17 @@ var TemporaryDir = require("qbs.TemporaryDir");
var TextFile = require("qbs.TextFile");
var Utilities = require("qbs.Utilities");
+function isMcs51Architecture(architecture) {
+ return architecture === "mcs51";
+}
+
+function isMcs251Architecture(architecture) {
+ return architecture === "mcs251";
+}
+
function isMcsArchitecture(architecture) {
- return architecture === "mcs51" || architecture === "mcs251";
+ return isMcs51Architecture(architecture)
+ || isMcs251Architecture(architecture);
}
function isC166Architecture(architecture) {
@@ -156,7 +165,7 @@ function objectSuffix(qbs) {
function mapFileSuffix(qbs) {
var architecture = qbs.architecture;
- if (isMcsArchitecture(architecture))
+ if (isMcs51Architecture(architecture))
return ".m51";
if (isC166Architecture(architecture))
return ".m66";
@@ -1049,7 +1058,9 @@ function linkerFlags(project, product, inputs, outputs) {
// Map file generation flag.
if (!product.cpp.generateLinkerMapFile)
- args.push("NOMAP");
+ args.push("NOPRINT");
+ else
+ args.push("PRINT(" + FileInfo.toWindowsSeparators(outputs.mem_map[0].filePath) + ")");
} else if (isArmArchitecture(architecture)) {
// Inputs.
if (inputs.obj)
diff --git a/tests/auto/blackbox/tst_blackboxbaremetal.cpp b/tests/auto/blackbox/tst_blackboxbaremetal.cpp
index 50be987a2..969de6299 100644
--- a/tests/auto/blackbox/tst_blackboxbaremetal.cpp
+++ b/tests/auto/blackbox/tst_blackboxbaremetal.cpp
@@ -59,7 +59,7 @@ static QByteArray unsupportedToolsetMessage(const QByteArray &output)
static QString linkerMapFileExtension(const QByteArray &toolchain, const QByteArray &architecture)
{
if (toolchain == "keil") {
- if (architecture == "mcs51" || architecture == "mcs251")
+ if (architecture == "mcs51")
return QStringLiteral(".m51");
if (architecture == "c166")
return QStringLiteral(".m66");