benshi001 updated this revision to Diff 493053. benshi001 edited the summary of this revision.
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D142595/new/ https://reviews.llvm.org/D142595 Files: clang/lib/Driver/ToolChains/AVR.cpp clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/avr35.lds clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/avr51.lds clang/test/Driver/avr-ld.c Index: clang/test/Driver/avr-ld.c =================================================================== --- clang/test/Driver/avr-ld.c +++ clang/test/Driver/avr-ld.c @@ -42,3 +42,11 @@ // RUN: %clang -### --target=avr -mmcu=atxmega128a1 --rtlib=libgcc --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINKO %s // LINKO: {{".*ld.*"}} {{.*}} {{"-L.*avrxmega7"}} {{.*}} "-Tdata=0x802000" "--start-group" {{.*}} "-latxmega128a1" {{.*}} "--end-group" "-mavrxmega7" + +// RUN: %clang -### --target=avr -mmcu=atmega8u2 --sysroot %S/Inputs/basic_avr_tree %s -T %S/Inputs/basic_avr_tree/usr/lib/avr/lib/avr35.lds 2>&1 | FileCheck -check-prefix LINKP %s +// LINKP: {{".*ld.*"}} {{.*}} {{"-L.*avr35"}} {{.*}} "--start-group" {{.*}} "-latmega8u2" {{.*}} "--end-group" "-T" {{".*avr35.lds"}} "-mavr35" +// LINKP-NOT: "-Tdata" + +// RUN: %clang -### --target=avr --sysroot %S/Inputs/basic_avr_tree %s -T %S/Inputs/basic_avr_tree/usr/lib/avr/lib/avr51.lds 2>&1 | FileCheck -check-prefix LINKQ %s +// LINKQ-NOT: "-Tdata" +// LINKQ-NOT: "warning:" {{.*}} "section address" Index: clang/lib/Driver/ToolChains/AVR.cpp =================================================================== --- clang/lib/Driver/ToolChains/AVR.cpp +++ clang/lib/Driver/ToolChains/AVR.cpp @@ -497,12 +497,17 @@ D.Diag(diag::warn_drv_avr_stdlib_not_linked); } - if (SectionAddressData) { - CmdArgs.push_back(Args.MakeArgString( - "-Tdata=0x" + Twine::utohexstr(*SectionAddressData))); - } else { - // We do not have an entry for this CPU in the address mapping table yet. - D.Diag(diag::warn_drv_avr_linker_section_addresses_not_implemented) << CPU; + // If user explicitly specifies a linker script, we should follow that. + // Otherwise we must add a default '-Tdata' option to the linker, according + // to each AVR device's specific memory layout. + if (!Args.hasArg(options::OPT_T)) { + if (SectionAddressData) { + CmdArgs.push_back(Args.MakeArgString( + "-Tdata=0x" + Twine::utohexstr(*SectionAddressData))); + } else { + // We do not have an entry for this CPU in the address mapping table yet. + D.Diag(diag::warn_drv_avr_linker_section_addresses_not_implemented) << CPU; + } } // If the family name is known, we can link with the device-specific libgcc.
Index: clang/test/Driver/avr-ld.c =================================================================== --- clang/test/Driver/avr-ld.c +++ clang/test/Driver/avr-ld.c @@ -42,3 +42,11 @@ // RUN: %clang -### --target=avr -mmcu=atxmega128a1 --rtlib=libgcc --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINKO %s // LINKO: {{".*ld.*"}} {{.*}} {{"-L.*avrxmega7"}} {{.*}} "-Tdata=0x802000" "--start-group" {{.*}} "-latxmega128a1" {{.*}} "--end-group" "-mavrxmega7" + +// RUN: %clang -### --target=avr -mmcu=atmega8u2 --sysroot %S/Inputs/basic_avr_tree %s -T %S/Inputs/basic_avr_tree/usr/lib/avr/lib/avr35.lds 2>&1 | FileCheck -check-prefix LINKP %s +// LINKP: {{".*ld.*"}} {{.*}} {{"-L.*avr35"}} {{.*}} "--start-group" {{.*}} "-latmega8u2" {{.*}} "--end-group" "-T" {{".*avr35.lds"}} "-mavr35" +// LINKP-NOT: "-Tdata" + +// RUN: %clang -### --target=avr --sysroot %S/Inputs/basic_avr_tree %s -T %S/Inputs/basic_avr_tree/usr/lib/avr/lib/avr51.lds 2>&1 | FileCheck -check-prefix LINKQ %s +// LINKQ-NOT: "-Tdata" +// LINKQ-NOT: "warning:" {{.*}} "section address" Index: clang/lib/Driver/ToolChains/AVR.cpp =================================================================== --- clang/lib/Driver/ToolChains/AVR.cpp +++ clang/lib/Driver/ToolChains/AVR.cpp @@ -497,12 +497,17 @@ D.Diag(diag::warn_drv_avr_stdlib_not_linked); } - if (SectionAddressData) { - CmdArgs.push_back(Args.MakeArgString( - "-Tdata=0x" + Twine::utohexstr(*SectionAddressData))); - } else { - // We do not have an entry for this CPU in the address mapping table yet. - D.Diag(diag::warn_drv_avr_linker_section_addresses_not_implemented) << CPU; + // If user explicitly specifies a linker script, we should follow that. + // Otherwise we must add a default '-Tdata' option to the linker, according + // to each AVR device's specific memory layout. + if (!Args.hasArg(options::OPT_T)) { + if (SectionAddressData) { + CmdArgs.push_back(Args.MakeArgString( + "-Tdata=0x" + Twine::utohexstr(*SectionAddressData))); + } else { + // We do not have an entry for this CPU in the address mapping table yet. + D.Diag(diag::warn_drv_avr_linker_section_addresses_not_implemented) << CPU; + } } // If the family name is known, we can link with the device-specific libgcc.
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits