Mercurial > hg > aboriginal
changeset 1823:1d233a893085 draft
Switch sh4 to musl.
author | Rob Landley <rob@landley.net> |
---|---|
date | Tue, 01 Dec 2015 20:50:53 -0600 |
parents | 4927c8b8de1b |
children | 893e70efe047 |
files | sources/patches/binutils-shpcrel.patch sources/patches/gcc-core-weakbugs.patch sources/targets/sh4 |
diffstat | 3 files changed, 78 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sources/patches/binutils-shpcrel.patch Tue Dec 01 20:50:53 2015 -0600 @@ -0,0 +1,13 @@ +Teach gas to understand a thing musl's assembly uses. + +--- binutils-397a64b3.orig//gas/config/tc-sh.c 2015-08-11 01:29:26.000000000 +0000 ++++ binutils-397a64b3/gas/config/tc-sh.c 2015-11-02 23:17:03.931462591 +0000 +@@ -4491,6 +4496,8 @@ sh_parse_name (char const *name, + reloc_type = BFD_RELOC_SH_TLS_LE_32; + else if ((next_end = sh_end_of_match (next + 1, "DTPOFF"))) + reloc_type = BFD_RELOC_SH_TLS_LDO_32; ++ else if ((next_end = sh_end_of_match (next + 1, "PCREL"))) ++ reloc_type = BFD_RELOC_32_PCREL; + else + goto no_suffix; +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sources/patches/gcc-core-weakbugs.patch Tue Dec 01 20:50:53 2015 -0600 @@ -0,0 +1,65 @@ +Another musl patch, it's unhappy with how weak signals are handled. +No actual explanation about what or test case, but since it's a clear bugfix... + +diff --git a/gcc/cgraph.c b/gcc/cgraph.c +index fcdc02e..db04afd 100644 +--- a/gcc/cgraph.c ++++ b/gcc/cgraph.c +@@ -1169,7 +1169,7 @@ cgraph_function_body_availability (struct cgraph_node *node) + inline and offline) having same side effect characteristics as + good optimization is what this optimization is about. */ + +- else if (!(*targetm.binds_local_p) (node->decl) ++ else if ((DECL_WEAK (node->decl) || !(*targetm.binds_local_p) (node->decl)) + && !DECL_COMDAT (node->decl) && !DECL_EXTERNAL (node->decl)) + avail = AVAIL_OVERWRITABLE; + else avail = AVAIL_AVAILABLE; +@@ -1190,7 +1190,8 @@ cgraph_variable_initializer_availability (struct cgraph_varpool_node *node) + /* If the variable can be overwritten, return OVERWRITABLE. Takes + care of at least two notable extensions - the COMDAT variables + used to share template instantiations in C++. */ +- if (!(*targetm.binds_local_p) (node->decl) && !DECL_COMDAT (node->decl)) ++ if ((DECL_WEAK (node->decl) || !(*targetm.binds_local_p) (node->decl)) ++ && !DECL_COMDAT (node->decl)) + return AVAIL_OVERWRITABLE; + return AVAIL_AVAILABLE; + } +diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c +index 84ef830..73d9fcc 100644 +--- a/gcc/ipa-inline.c ++++ b/gcc/ipa-inline.c +@@ -300,7 +300,7 @@ cgraph_default_inline_p (struct cgraph_node *n, const char **reason) + + if (n->inline_decl) + decl = n->inline_decl; +- if (!DECL_INLINE (decl)) ++ if (!DECL_INLINE (decl) || DECL_WEAK (decl)) + { + if (reason) + *reason = N_("function not inlinable"); +diff --git a/gcc/ipa-pure-const.c b/gcc/ipa-pure-const.c +index fdaff50..1bfd577 100644 +--- a/gcc/ipa-pure-const.c ++++ b/gcc/ipa-pure-const.c +@@ -512,7 +512,7 @@ analyze_function (struct cgraph_node *fn) + /* If this function does not return normally or does not bind local, + do not touch this unless it has been marked as const or pure by the + front end. */ +- if (TREE_THIS_VOLATILE (decl) ++ if (TREE_THIS_VOLATILE (decl) || DECL_WEAK (decl) + || !targetm.binds_local_p (decl)) + { + l->pure_const_state = IPA_NEITHER; +diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c +index 1c0b79b..5a3ba7e 100644 +--- a/gcc/tree-inline.c ++++ b/gcc/tree-inline.c +@@ -1522,6 +1522,8 @@ inlinable_function_p (tree fn) + else if (!DECL_INLINE (fn) && !flag_unit_at_a_time) + inlinable = false; + ++ else if (DECL_WEAK (fn)) ++ inlinable = false; + else if (inline_forbidden_p (fn)) + { + /* See if we should warn about uninlinable functions. Previously,
--- a/sources/targets/sh4 Mon Nov 30 16:06:00 2015 -0600 +++ b/sources/targets/sh4 Tue Dec 01 20:50:53 2015 -0600 @@ -15,12 +15,6 @@ CONSOLE="ttySC1 noiotrap" -UCLIBC_CONFIG=" -TARGET_sh=y -ARCH_WANTS_LITTLE_ENDIAN=y -UCLIBC_HAS_FPU=y -" - # This needs some massive cleanup, but part of the problem is arch/sh4/Kconfig forces on EXPERT # which requies re-selecting a bunch of standard features. Apparently sh is not meant to be # used by normal people, it's "special".