Skip to content

Commit 2e2c7ac

Browse files
committed
Implement __mspabi_func_epilog_N and some simulator-related options
1 parent 76196e8 commit 2e2c7ac

File tree

5 files changed

+47
-5
lines changed

5 files changed

+47
-5
lines changed

clang/include/clang/Driver/Options.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2252,6 +2252,7 @@ def municode : Joined<["-"], "municode">, Group<m_Group>, Flags<[DriverOption]>;
22522252
def mthreads : Joined<["-"], "mthreads">, Group<m_Group>, Flags<[DriverOption]>;
22532253
def mcpu_EQ : Joined<["-"], "mcpu=">, Group<m_Group>;
22542254
def mmcu_EQ : Joined<["-"], "mmcu=">, Group<m_Group>;
2255+
def msim : Joined<["-"], "msim">, Group<m_Group>;
22552256
def mdynamic_no_pic : Joined<["-"], "mdynamic-no-pic">, Group<m_Group>;
22562257
def mfix_and_continue : Flag<["-"], "mfix-and-continue">, Group<clang_ignored_m_Group>;
22572258
def mieee_fp : Flag<["-"], "mieee-fp">, Group<clang_ignored_m_Group>;

clang/lib/Driver/ToolChains/MSP430.cpp

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,17 @@ void msp430::Linker::ConstructJob(Compilation &C, const JobAction &JA,
196196
Args.AddAllArgs(CmdArgs, options::OPT_L);
197197
ToolChain.AddFilePathLibArgs(Args, CmdArgs);
198198

199+
// msp430gcc refs this symbol as part of epilogue of main()
200+
CmdArgs.push_back("--undefined=__crt0_call_exit");
201+
202+
if (!Args.hasArg(options::OPT_r, options::OPT_g_Group)) {
203+
CmdArgs.push_back("--gc-sections");
204+
}
205+
199206
if (!Args.hasArg(options::OPT_T)) {
200-
if (const Arg *MCUArg = Args.getLastArg(options::OPT_mmcu_EQ)) {
207+
if (Args.hasArg(options::OPT_msim))
208+
CmdArgs.push_back("-Tmsp430-sim.ld");
209+
else if (const Arg *MCUArg = Args.getLastArg(options::OPT_mmcu_EQ)) {
201210
SmallString<128> MCULinkerScriptPath(D.SysRoot);
202211
llvm::sys::path::append(MCULinkerScriptPath, "include");
203212
// -L because <mcu>.ld INCLUDEs <mcu>_symbols.ld
@@ -217,21 +226,24 @@ void msp430::Linker::ConstructJob(Compilation &C, const JobAction &JA,
217226

218227
AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs, JA);
219228

229+
// compiler-rt unit tests expect -lgcc can be disabled with -nodefaultlibs
220230
CmdArgs.push_back("--start-group");
221231
CmdArgs.push_back(Args.MakeArgString(getHWMultLib(Args)));
222-
AddRunTimeLibs(ToolChain, D, CmdArgs, Args);
223232
if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) {
224233
CmdArgs.push_back("-lc");
234+
AddRunTimeLibs(ToolChain, D, CmdArgs, Args);
225235
CmdArgs.push_back("-lcrt");
226-
CmdArgs.push_back("-lnosys");
236+
if (!Args.hasArg(options::OPT_msim))
237+
CmdArgs.push_back("-lnosys");
227238
}
239+
if (Args.hasArg(options::OPT_msim))
240+
CmdArgs.push_back("-lsim");
228241
CmdArgs.push_back("--end-group");
229242

230243
if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) {
231244
const char *crtend = Args.hasArg(options::OPT_fexceptions) ?
232245
"crtend.o" : "crtend_no_eh.o";
233246
CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crtend)));
234-
AddRunTimeLibs(ToolChain, D, CmdArgs, Args);
235247
}
236248
CmdArgs.push_back("-o");
237249
CmdArgs.push_back(Output.getFilename());

compiler-rt/lib/builtins/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -536,7 +536,10 @@ set(mips64_SOURCES ${GENERIC_TF_SOURCES}
536536
set(mips64el_SOURCES ${GENERIC_TF_SOURCES}
537537
${mips_SOURCES})
538538

539-
set(msp430_SOURCES ${GENERIC_SOURCES})
539+
set(msp430_SOURCES
540+
msp430/mspabi_func_epilog.S
541+
${GENERIC_SOURCES}
542+
)
540543

541544
set(powerpc64_SOURCES
542545
ppc/divtc3.c
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
.globl __mspabi_func_epilog_7
2+
__mspabi_func_epilog_7:
3+
pop r4
4+
.globl __mspabi_func_epilog_6
5+
__mspabi_func_epilog_6:
6+
pop r5
7+
.globl __mspabi_func_epilog_5
8+
__mspabi_func_epilog_5:
9+
pop r6
10+
.globl __mspabi_func_epilog_4
11+
__mspabi_func_epilog_4:
12+
pop r7
13+
.globl __mspabi_func_epilog_3
14+
__mspabi_func_epilog_3:
15+
pop r8
16+
.globl __mspabi_func_epilog_2
17+
__mspabi_func_epilog_2:
18+
pop r9
19+
.globl __mspabi_func_epilog_1
20+
__mspabi_func_epilog_1:
21+
pop r10
22+
ret

compiler-rt/test/builtins/Unit/lit.cfg.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ def get_required_attr(config, attr_name):
3232
elif config.host_os == 'Darwin':
3333
base_lib = os.path.join(config.compiler_rt_libdir, "libclang_rt.osx.a ")
3434
config.substitutions.append( ("%librt ", base_lib + ' -lSystem ') )
35+
if config.target_arch.startswith("msp430"):
36+
base_lib = os.path.join(config.compiler_rt_libdir, "libclang_rt.builtins%s.a"
37+
% config.target_suffix)
38+
config.substitutions.append( ("%librt ", "-mhwmult=none -Wl,--start-group " + base_lib + " -lc -lm -Wl,--end-group ") )
3539
else:
3640
base_lib = os.path.join(config.compiler_rt_libdir, "libclang_rt.builtins%s.a"
3741
% config.target_suffix)

0 commit comments

Comments
 (0)