From 8bc4539cec63fd747c923e79d1aa60221e4961ce Mon Sep 17 00:00:00 2001 From: Andy Ross Date: Tue, 7 Sep 2021 13:09:31 -0700 Subject: [PATCH] soc/intel_adsp: Correct linker syntax for ancient binutils Older binutils, like the (nine-year-old!) 2.23 version that powers many Cadence XCC toolchains, happen not to support the "~" operator to perform bitwise negation. And they generate an absolutely hilarious series of inscrutable error messages when they try to tell you this fairly simple fact. Just fold it into the constant. Signed-off-by: Andy Ross --- soc/xtensa/intel_adsp/cavs_v15/linker.ld | 4 +++- soc/xtensa/intel_adsp/cavs_v18/linker.ld | 4 +++- soc/xtensa/intel_adsp/cavs_v25/linker.ld | 3 ++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/soc/xtensa/intel_adsp/cavs_v15/linker.ld b/soc/xtensa/intel_adsp/cavs_v15/linker.ld index 2cf7b64f69b..e486dcacd18 100644 --- a/soc/xtensa/intel_adsp/cavs_v15/linker.ld +++ b/soc/xtensa/intel_adsp/cavs_v15/linker.ld @@ -42,9 +42,11 @@ PROVIDE(_MemErrorHandler = 0x00000000); * the output tooling ignores it, but it will cause the linker to emit * 512MB of unused data into the output file!) * + * (Note clumsy syntax because XCC doesn't understand the "~" operator) + * */ #define SEGSTART_CACHED (ALIGN(64) | 0x20000000) -#define SEGSTART_UNCACHED (ALIGN(64) & ~0x20000000) +#define SEGSTART_UNCACHED (ALIGN(64) & 0xdfffffff) /* == ~0x20000000 */ MEMORY { diff --git a/soc/xtensa/intel_adsp/cavs_v18/linker.ld b/soc/xtensa/intel_adsp/cavs_v18/linker.ld index 964fcbfea19..3fe01f9108e 100644 --- a/soc/xtensa/intel_adsp/cavs_v18/linker.ld +++ b/soc/xtensa/intel_adsp/cavs_v18/linker.ld @@ -42,9 +42,11 @@ PROVIDE(_MemErrorHandler = 0x00000000); * the output tooling ignores it, but it will cause the linker to emit * 512MB of unused data into the output file!) * + * (Note clumsy syntax because XCC doesn't understand the "~" operator) + * */ #define SEGSTART_CACHED (ALIGN(64) | 0x20000000) -#define SEGSTART_UNCACHED (ALIGN(64) & ~0x20000000) +#define SEGSTART_UNCACHED (ALIGN(64) & 0xdfffffff) /* == ~0x20000000 */ MEMORY { diff --git a/soc/xtensa/intel_adsp/cavs_v25/linker.ld b/soc/xtensa/intel_adsp/cavs_v25/linker.ld index 52baffb8da5..161d2ba5853 100644 --- a/soc/xtensa/intel_adsp/cavs_v25/linker.ld +++ b/soc/xtensa/intel_adsp/cavs_v25/linker.ld @@ -42,10 +42,11 @@ PROVIDE(_MemErrorHandler = 0x00000000); * the output tooling ignores it, but it will cause the linker to emit * 512MB of unused data into the output file!) * + * (Note clumsy syntax because XCC doesn't understand the "~" operator) */ #ifdef CONFIG_KERNEL_COHERENCE #define SEGSTART_CACHED (ALIGN(64) | 0x20000000) -#define SEGSTART_UNCACHED (ALIGN(64) & ~0x20000000) +#define SEGSTART_UNCACHED (ALIGN(64) & 0xdfffffff) /* == ~0x20000000 */ #else #define SEGSTART_CACHED /**/ #define SEGSTART_UNCACHED /**/