From d6c653eb5fecbdeeb1fbc6182803dada29f55d1b Mon Sep 17 00:00:00 2001 From: Wolfgang Puffitsch <hausen@gmx.at> Date: Tue, 27 Aug 2013 14:45:14 +0200 Subject: [PATCH] Revise handling of memory mapping. --- include/clang/Driver/Options.td | 8 +++++--- lib/Driver/Tools.cpp | 34 +++++++++++++++++++++++++++++---- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td index 23e3f5d97f..6337aeb46f 100644 --- a/include/clang/Driver/Options.td +++ b/include/clang/Driver/Options.td @@ -1014,12 +1014,14 @@ def multi__module : Flag<["-"], "multi_module">; def multiply__defined__unused : Separate<["-"], "multiply_defined_unused">; def multiply__defined : Separate<["-"], "multiply_defined">; def mwarn_nonportable_cfstrings : Flag<["-"], "mwarn-nonportable-cfstrings">, Group<m_Group>; -def mpatmos_iomap_base : Joined<["-"], "mpatmos-iomap-base=">, Group<m_Patmos_Group>; def mpatmos_stack_base : Joined<["-"], "mpatmos-stack-base=">, Group<m_Patmos_Group>; def mpatmos_shadow_stack_base : Joined<["-"], "mpatmos-shadow-stack-base=">, Group<m_Patmos_Group>; def mpatmos_heap_end : Joined<["-"], "mpatmos-heap-end=">, Group<m_Patmos_Group>; -def mpatmos_uart_status_base : Joined<["-"], "mpatmos-uart-status-base=">, Group<m_Patmos_Group>; -def mpatmos_uart_data_base : Joined<["-"], "mpatmos-uart-data-base=">, Group<m_Patmos_Group>; +def mpatmos_iomap_base : Joined<["-"], "mpatmos-iomap-base=">, Group<m_Patmos_Group>; +def mpatmos_cpuinfo_offset : Joined<["-"], "mpatmos-cpuinfo-offset=">, Group<m_Patmos_Group>; +def mpatmos_excunit_offset : Joined<["-"], "mpatmos-excunit-offset=">, Group<m_Patmos_Group>; +def mpatmos_timer_offset : Joined<["-"], "mpatmos-timer-offset=">, Group<m_Patmos_Group>; +def mpatmos_uart_offset : Joined<["-"], "mpatmos-uart-offset=">, Group<m_Patmos_Group>; def m_Separate : Separate<["-"], "m">, Group<m_Group>; def m_Joined : Joined<["-"], "m">, Group<m_Group>; def no_canonical_prefixes : Flag<["-"], "no-canonical-prefixes">, Flags<[HelpHidden]>, diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index f290a86466..dd32d3c4ab 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -3944,6 +3944,26 @@ static void render_patmos_symbol(OptSpecifier Opt, const char* Symbol, Out.push_back(Args.MakeArgString(tmp)); } +/// render_patmos_iodev_symbol - check if a -mpatmos-<symbol> option +/// was given, if so render a --defsym to the out arguments list using +/// its value as offset from iomap_base. Otherwise, render a --defsym +/// using the default value os offset. +static void render_patmos_iodev_symbol(OptSpecifier Opt, const char* Symbol, + const ArgList &Args, const char *Default, + ArgStringList &Out) +{ + Out.push_back("--defsym"); + std::string tmp(Symbol); + tmp += "="; + tmp += "_iomap_base+"; + + // get option value + Arg *a = Args.getLastArg(Opt); + tmp += a ? a->getValue() : Default; + + Out.push_back(Args.MakeArgString(tmp)); +} + llvm::sys::LLVMFileType patmos::PatmosBaseTool::getFileType(std::string filename) const { llvm::sys::Path Pathname( filename ); @@ -4734,11 +4754,17 @@ void patmos::PatmosBaseTool::ConstructGoldJob(const Tool &Creator, render_patmos_symbol(options::OPT_mpatmos_iomap_base, "_iomap_base", Args, "0xF0000000", LDArgs); - render_patmos_symbol(options::OPT_mpatmos_uart_status_base, - "_uart_status_base", Args, "0xF0000100", LDArgs); + render_patmos_iodev_symbol(options::OPT_mpatmos_cpuinfo_offset, + "_cpuinfo_base", Args, "0x0000", LDArgs); + + render_patmos_iodev_symbol(options::OPT_mpatmos_excunit_offset, + "_excunit_base", Args, "0x0100", LDArgs); + + render_patmos_iodev_symbol(options::OPT_mpatmos_timer_offset, + "_timer_base", Args, "0x0200", LDArgs); - render_patmos_symbol(options::OPT_mpatmos_uart_data_base, - "_uart_data_base", Args, "0xF0000104", LDArgs); + render_patmos_iodev_symbol(options::OPT_mpatmos_uart_offset, + "_uart_base", Args, "0x0800", LDArgs); LDArgs.push_back("--defsym"); LDArgs.push_back("__heap_start=end"); -- GitLab