OSDN Git Service

[AVR] Explicitly set the address of the data section when invoking the linker
authorDylan McKay <me@dylanmckay.io>
Sun, 17 May 2020 14:18:54 +0000 (02:18 +1200)
committerDylan McKay <me@dylanmckay.io>
Sun, 17 May 2020 14:24:51 +0000 (02:24 +1200)
This is required to get avr-gdb correctly showing values at the right
addresses. This problem was discovered by using debug symbols in an
external program to lookup values in an AVR simulator.

clang/lib/Driver/ToolChains/AVR.cpp

index 6405db1..04655d5 100644 (file)
@@ -120,6 +120,13 @@ void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA,
   Args.AddAllArgs(CmdArgs, options::OPT_L);
   getToolChain().AddFilePathLibArgs(Args, CmdArgs);
 
+  //   "Not [sic] that addr must be offset by adding 0x800000 the to
+  //    real SRAM address so that the linker knows that the address
+  //    is in the SRAM memory space."
+  //
+  //      - https://www.nongnu.org/avr-libc/user-manual/mem_sections.html
+  CmdArgs.push_back("-Tdata=0x800100");
+
   // If the family name is known, we can link with the device-specific libgcc.
   // Without it, libgcc will simply not be linked. This matches avr-gcc
   // behavior.