[clang] [clang][driver] Add avr-libc's default linker script to lld (PR #68507)
https://github.com/benshi001 closed https://github.com/llvm/llvm-project/pull/68507 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver] Add avr-libc's default linker script to lld (PR #68507)
https://github.com/jacquesguan approved this pull request. LGTM https://github.com/llvm/llvm-project/pull/68507 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver] Add avr-libc's default linker script to lld (PR #68507)
https://github.com/benshi001 updated https://github.com/llvm/llvm-project/pull/68507 >From b2a442d6aca019a42baef45e1f245dc1ea5bd8a1 Mon Sep 17 00:00:00 2001 From: Ben Shi Date: Wed, 11 Oct 2023 14:05:14 +0800 Subject: [PATCH] [clang][driver] Add avr-libc's default linker script to lld If lld is specified but no user linker script is offered, we try to use avr-libc's default ones. This is unnecessary for GNU ld. --- clang/lib/Driver/ToolChains/AVR.cpp | 14 ++-- .../usr/lib/avr/lib/ldscripts/avrtiny.x | 0 .../usr/lib/avr/lib/ldscripts/avrxmega6.x | 0 clang/test/Driver/avr-ld.c| 22 +++ 4 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrtiny.x create mode 100644 clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrxmega6.x diff --git a/clang/lib/Driver/ToolChains/AVR.cpp b/clang/lib/Driver/ToolChains/AVR.cpp index e312fa155e11bf8..2e46b25aeba75ef 100644 --- a/clang/lib/Driver/ToolChains/AVR.cpp +++ b/clang/lib/Driver/ToolChains/AVR.cpp @@ -554,8 +554,18 @@ void AVR::Linker::ConstructJob(Compilation , const JobAction , CmdArgs.push_back("--end-group"); -// Add user specified linker script. -Args.AddAllArgs(CmdArgs, options::OPT_T); +// Add avr-libc's linker script to lld by default, if it exists. +if (!Args.hasArg(options::OPT_T) && +Linker.find("lld") != std::string::npos) { + std::string Path(*AVRLibcRoot + "/lib/ldscripts/"); + Path += *FamilyName; + Path += ".x"; + if (llvm::sys::fs::exists(Path)) +CmdArgs.push_back(Args.MakeArgString("-T" + Path)); +} +// Otherwise add user specified linker script to either avr-ld or lld. +else + Args.AddAllArgs(CmdArgs, options::OPT_T); if (Args.hasFlag(options::OPT_mrelax, options::OPT_mno_relax, true)) CmdArgs.push_back("--relax"); diff --git a/clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrtiny.x b/clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrtiny.x new file mode 100644 index 000..e69de29bb2d1d64 diff --git a/clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrxmega6.x b/clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrxmega6.x new file mode 100644 index 000..e69de29bb2d1d64 diff --git a/clang/test/Driver/avr-ld.c b/clang/test/Driver/avr-ld.c index 0f12607fe9d69eb..3e4114485332fcd 100644 --- a/clang/test/Driver/avr-ld.c +++ b/clang/test/Driver/avr-ld.c @@ -58,6 +58,28 @@ // LINKS: {{".*ld.*"}} {{.*}} "--defsym=__DATA_REGION_ORIGIN__=0x800100" "-plugin-opt=mcpu=atmega328" // LINKS-NOT: "-plugin-opt=thinlto" +// RUN: %clang -### --target=avr -mmcu=attiny40 -fuse-ld=lld --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINKT0 %s +// LINKT0: {{".*lld.*"}} {{.*}} {{"-T.*avrtiny.x"}} +// LINKT0-NOT: "-m + +// RUN: %clang -### --target=avr -mmcu=atxmega384c3 -fuse-ld=lld --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINKT1 %s +// LINKT1: {{".*lld.*"}} {{.*}} {{"-T.*avrxmega6.x"}} +// LINKT1-NOT: "-m + +// RUN: %clang -### --target=avr -mmcu=atmega328 -fuse-ld=lld --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINKT2 %s +// LINKT2: {{".*lld.*"}} {{.*}} "--start-group" {{.*}} "--end-group" +// LINKT2-NOT: "-T +// LINKT2-NOT: "-m + +// RUN: %clang -### --target=avr -mmcu=attiny40 --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINKT3 %s +// LINKT3: {{".*ld.*"}} {{.*}} "-mavrtiny" +// LINKT3-NOT: "-T + +// RUN: %clang -### --target=avr -mmcu=attiny40 --sysroot %S/Inputs/basic_avr_tree -fuse-ld=lld -T %S/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrxmega6.x %s 2>&1 | FileCheck -check-prefix LINKT4 %s +// LINKT4: {{".*lld.*"}} {{.*}} {{"-T.*avrxmega6.x"}} +// LINKT4-NOT: {{"-T.*avrtiny.x"}} +// LINKT4-NOT: "-m + // RUN: %clang -### -r --target=avr -mmcu=atmega328 --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck --check-prefix=LINKU %s // LINKU: {{".*ld.*"}} {{.*}} "-r" {{.*}} "-mavr5" // LINKU-NOT: "--gc-sections" ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver] Add avr-libc's default linker script to lld (PR #68507)
https://github.com/benshi001 updated https://github.com/llvm/llvm-project/pull/68507 >From f13fad7cfcfbf654052d595cf3dd985fbaefeb76 Mon Sep 17 00:00:00 2001 From: Ben Shi Date: Sun, 8 Oct 2023 15:00:32 +0800 Subject: [PATCH] [clang][driver] Add avr-libc's default linker script to lld If `-fuse-ld=lld` is specified but no user linker script is offered, we try to use avr-libc's default one for lld. (not needed for GNU ld) --- clang/lib/Driver/ToolChains/AVR.cpp | 14 +++-- .../usr/lib/avr/lib/ldscripts/avrtiny.x | 0 .../usr/lib/avr/lib/ldscripts/avrxmega6.x | 0 clang/test/Driver/avr-ld.c| 21 +++ 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrtiny.x create mode 100644 clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrxmega6.x diff --git a/clang/lib/Driver/ToolChains/AVR.cpp b/clang/lib/Driver/ToolChains/AVR.cpp index 81f501d417345d1..9b15b22ecb2218a 100644 --- a/clang/lib/Driver/ToolChains/AVR.cpp +++ b/clang/lib/Driver/ToolChains/AVR.cpp @@ -549,8 +549,18 @@ void AVR::Linker::ConstructJob(Compilation , const JobAction , CmdArgs.push_back("--end-group"); -// Add user specified linker script. -Args.AddAllArgs(CmdArgs, options::OPT_T); +// Add avr-libc's linker script to lld by default, if it exists. +if (!Args.hasArg(options::OPT_T) && +Linker.find("lld") != std::string::npos) { + std::string Path(*AVRLibcRoot + "/lib/ldscripts/"); + Path += *FamilyName; + Path += ".x"; + if (llvm::sys::fs::exists(Path)) +CmdArgs.push_back(Args.MakeArgString("-T" + Path)); +} +// Otherwise add user specified linker script to either avr-ld or lld. +else + Args.AddAllArgs(CmdArgs, options::OPT_T); if (Args.hasFlag(options::OPT_mrelax, options::OPT_mno_relax, true)) CmdArgs.push_back("--relax"); diff --git a/clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrtiny.x b/clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrtiny.x new file mode 100644 index 000..e69de29bb2d1d64 diff --git a/clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrxmega6.x b/clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrxmega6.x new file mode 100644 index 000..e69de29bb2d1d64 diff --git a/clang/test/Driver/avr-ld.c b/clang/test/Driver/avr-ld.c index 4042ecb89adf5f1..0019e46629ae52b 100644 --- a/clang/test/Driver/avr-ld.c +++ b/clang/test/Driver/avr-ld.c @@ -57,3 +57,24 @@ // RUN: %clang -### --target=avr -mmcu=atmega328 -fuse-ld=lld -flto --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINKS %s // LINKS: {{".*ld.*"}} {{.*}} "--defsym=__DATA_REGION_ORIGIN__=0x800100" "-plugin-opt=mcpu=atmega328" // LINKS-NOT: "-plugin-opt=thinlto" + +// RUN: %clang -### --target=avr -mmcu=attiny40 -fuse-ld=lld --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINKT0 %s +// LINKT0: {{".*lld.*"}} {{.*}} {{"-T.*avrtiny.x"}} +// LINKT0-NOT: "-mavrtiny" + +// RUN: %clang -### --target=avr -mmcu=atxmega384c3 -fuse-ld=lld --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINKT1 %s +// LINKT1: {{".*lld.*"}} {{.*}} {{"-T.*avrxmega6.x"}} +// LINKT1-NOT: {{"-m.*"}} + +// RUN: %clang -### --target=avr -mmcu=atmega328 -fuse-ld=lld --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINKT2 %s +// LINKT2: {{".*lld.*"}} +// LINKT2-NOT: {{"-T.*"}} + +// RUN: %clang -### --target=avr -mmcu=attiny40 --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINKT3 %s +// LINKT3: {{".*ld.*"}} {{.*}} "-mavrtiny" +// LINKT3-NOT: {{"-T.*"}} + +// RUN: %clang -### --target=avr -mmcu=attiny40 --sysroot %S/Inputs/basic_avr_tree -fuse-ld=lld -T %S/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrxmega6.x %s 2>&1 | FileCheck -check-prefix LINKT4 %s +// LINKT4: {{".*lld.*"}} {{.*}} {{"-T.*avrxmega6.x"}} +// LINKT4-NOT: {{"-T.*avrtiny.x"}} +// LINKT4-NOT: {{"-m.*"}} ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver] Add avr-libc's default linker script to lld (PR #68507)
llvmbot wrote: @llvm/pr-subscribers-clang Changes If `-fuse-ld=lld` is specified but no user linker script is offered, we try to use avr-libc's default one for lld. (not needed for GNU ld) --- Full diff: https://github.com/llvm/llvm-project/pull/68507.diff 4 Files Affected: - (modified) clang/lib/Driver/ToolChains/AVR.cpp (+12-2) - (added) clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrtiny.x () - (added) clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrxmega6.x () - (modified) clang/test/Driver/avr-ld.c (+21) ``diff diff --git a/clang/lib/Driver/ToolChains/AVR.cpp b/clang/lib/Driver/ToolChains/AVR.cpp index 81f501d417345d1..9b15b22ecb2218a 100644 --- a/clang/lib/Driver/ToolChains/AVR.cpp +++ b/clang/lib/Driver/ToolChains/AVR.cpp @@ -549,8 +549,18 @@ void AVR::Linker::ConstructJob(Compilation , const JobAction , CmdArgs.push_back("--end-group"); -// Add user specified linker script. -Args.AddAllArgs(CmdArgs, options::OPT_T); +// Add avr-libc's linker script to lld by default, if it exists. +if (!Args.hasArg(options::OPT_T) && +Linker.find("lld") != std::string::npos) { + std::string Path(*AVRLibcRoot + "/lib/ldscripts/"); + Path += *FamilyName; + Path += ".x"; + if (llvm::sys::fs::exists(Path)) +CmdArgs.push_back(Args.MakeArgString("-T" + Path)); +} +// Otherwise add user specified linker script to either avr-ld or lld. +else + Args.AddAllArgs(CmdArgs, options::OPT_T); if (Args.hasFlag(options::OPT_mrelax, options::OPT_mno_relax, true)) CmdArgs.push_back("--relax"); diff --git a/clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrtiny.x b/clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrtiny.x new file mode 100644 index 000..e69de29bb2d1d64 diff --git a/clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrxmega6.x b/clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrxmega6.x new file mode 100644 index 000..e69de29bb2d1d64 diff --git a/clang/test/Driver/avr-ld.c b/clang/test/Driver/avr-ld.c index 4042ecb89adf5f1..769eb8763caaf61 100644 --- a/clang/test/Driver/avr-ld.c +++ b/clang/test/Driver/avr-ld.c @@ -57,3 +57,24 @@ // RUN: %clang -### --target=avr -mmcu=atmega328 -fuse-ld=lld -flto --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINKS %s // LINKS: {{".*ld.*"}} {{.*}} "--defsym=__DATA_REGION_ORIGIN__=0x800100" "-plugin-opt=mcpu=atmega328" // LINKS-NOT: "-plugin-opt=thinlto" + +// RUN: %clang -### --target=avr -mmcu=attiny40 -fuse-ld=lld --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINKT0 %s +// LINKT0: {{".*lld.*"}} {{.*}} {{"-T.*avrtiny.x"}} +// LINKT0-NOT: "-mavrtiny" + +// RUN: %clang -### --target=avr -mmcu=atxmega384c3 -fuse-ld=lld --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINKT1 %s +// LINKT1: {{".*lld.*"}} {{.*}} {{"-T.*avrxmega6.x"}} +// LINKT1-NOT: "-mavrxmega6" + +// RUN: %clang -### --target=avr -mmcu=atmega328 -fuse-ld=lld --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINKT2 %s +// LINKT2: {{".*lld.*"}} +// LINKT2-NOT: {{"-T.*"}} + +// RUN: %clang -### --target=avr -mmcu=attiny40 --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINKT3 %s +// LINKT3: {{".*ld.*"}} {{.*}} "-mavrtiny" +// LINKT3-NOT: {{"-T.*"}} + +// RUN: %clang -### --target=avr -mmcu=attiny40 --sysroot %S/Inputs/basic_avr_tree -fuse-ld=lld -T %S/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrxmega6.x %s 2>&1 | FileCheck -check-prefix LINKT4 %s +// LINKT4: {{".*lld.*"}} {{.*}} {{"-T.*avrxmega6.x"}} +// LINKT4-NOT: {{"-T.*avrtiny.x"}} +// LINKT4-NOT: "-mavrtiny" `` https://github.com/llvm/llvm-project/pull/68507 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver] Add avr-libc's default linker script to lld (PR #68507)
https://github.com/benshi001 created https://github.com/llvm/llvm-project/pull/68507 If `-fuse-ld=lld` is specified but no user linker script is offered, we try to use avr-libc's default one for lld. (not needed for GNU ld) >From 2ac033cc4750ffda8f1aded4b896de93713047ad Mon Sep 17 00:00:00 2001 From: Ben Shi Date: Sun, 8 Oct 2023 15:00:32 +0800 Subject: [PATCH] [clang][driver] Add avr-libc's default linker script to lld If `-fuse-ld=lld` is specified but no user linker script is offered, we try to use avr-libc's default one for lld. (not needed for GNU ld) --- clang/lib/Driver/ToolChains/AVR.cpp | 14 +++-- .../usr/lib/avr/lib/ldscripts/avrtiny.x | 0 .../usr/lib/avr/lib/ldscripts/avrxmega6.x | 0 clang/test/Driver/avr-ld.c| 21 +++ 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrtiny.x create mode 100644 clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrxmega6.x diff --git a/clang/lib/Driver/ToolChains/AVR.cpp b/clang/lib/Driver/ToolChains/AVR.cpp index 81f501d417345d1..9b15b22ecb2218a 100644 --- a/clang/lib/Driver/ToolChains/AVR.cpp +++ b/clang/lib/Driver/ToolChains/AVR.cpp @@ -549,8 +549,18 @@ void AVR::Linker::ConstructJob(Compilation , const JobAction , CmdArgs.push_back("--end-group"); -// Add user specified linker script. -Args.AddAllArgs(CmdArgs, options::OPT_T); +// Add avr-libc's linker script to lld by default, if it exists. +if (!Args.hasArg(options::OPT_T) && +Linker.find("lld") != std::string::npos) { + std::string Path(*AVRLibcRoot + "/lib/ldscripts/"); + Path += *FamilyName; + Path += ".x"; + if (llvm::sys::fs::exists(Path)) +CmdArgs.push_back(Args.MakeArgString("-T" + Path)); +} +// Otherwise add user specified linker script to either avr-ld or lld. +else + Args.AddAllArgs(CmdArgs, options::OPT_T); if (Args.hasFlag(options::OPT_mrelax, options::OPT_mno_relax, true)) CmdArgs.push_back("--relax"); diff --git a/clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrtiny.x b/clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrtiny.x new file mode 100644 index 000..e69de29bb2d1d64 diff --git a/clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrxmega6.x b/clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrxmega6.x new file mode 100644 index 000..e69de29bb2d1d64 diff --git a/clang/test/Driver/avr-ld.c b/clang/test/Driver/avr-ld.c index 4042ecb89adf5f1..769eb8763caaf61 100644 --- a/clang/test/Driver/avr-ld.c +++ b/clang/test/Driver/avr-ld.c @@ -57,3 +57,24 @@ // RUN: %clang -### --target=avr -mmcu=atmega328 -fuse-ld=lld -flto --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINKS %s // LINKS: {{".*ld.*"}} {{.*}} "--defsym=__DATA_REGION_ORIGIN__=0x800100" "-plugin-opt=mcpu=atmega328" // LINKS-NOT: "-plugin-opt=thinlto" + +// RUN: %clang -### --target=avr -mmcu=attiny40 -fuse-ld=lld --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINKT0 %s +// LINKT0: {{".*lld.*"}} {{.*}} {{"-T.*avrtiny.x"}} +// LINKT0-NOT: "-mavrtiny" + +// RUN: %clang -### --target=avr -mmcu=atxmega384c3 -fuse-ld=lld --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINKT1 %s +// LINKT1: {{".*lld.*"}} {{.*}} {{"-T.*avrxmega6.x"}} +// LINKT1-NOT: "-mavrxmega6" + +// RUN: %clang -### --target=avr -mmcu=atmega328 -fuse-ld=lld --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINKT2 %s +// LINKT2: {{".*lld.*"}} +// LINKT2-NOT: {{"-T.*"}} + +// RUN: %clang -### --target=avr -mmcu=attiny40 --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINKT3 %s +// LINKT3: {{".*ld.*"}} {{.*}} "-mavrtiny" +// LINKT3-NOT: {{"-T.*"}} + +// RUN: %clang -### --target=avr -mmcu=attiny40 --sysroot %S/Inputs/basic_avr_tree -fuse-ld=lld -T %S/Inputs/basic_avr_tree/usr/lib/avr/lib/ldscripts/avrxmega6.x %s 2>&1 | FileCheck -check-prefix LINKT4 %s +// LINKT4: {{".*lld.*"}} {{.*}} {{"-T.*avrxmega6.x"}} +// LINKT4-NOT: {{"-T.*avrtiny.x"}} +// LINKT4-NOT: "-mavrtiny" ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits