diff options
author | Alexey Neyman <stilor@att.net> | 2017-07-13 07:38:03 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-13 07:38:03 (GMT) |
commit | 45c5bb0f484cba724be2c6105801dcce9a1a82d9 (patch) | |
tree | 8fd1c8eaa2ef203009d72b6ca6348611dcc5ee1c /packages/gcc/6.3.0/892-libgcc-mkmap-symver-support-skip_underscore.patch | |
parent | 8f8e131d566af1f577d8fb6e62e6f121b7955472 (diff) | |
parent | b32fcf7c1eea890a2bd3f88487f818ba241aabb1 (diff) |
Merge pull request #767 from stilor/packages
Packages
Diffstat (limited to 'packages/gcc/6.3.0/892-libgcc-mkmap-symver-support-skip_underscore.patch')
-rw-r--r-- | packages/gcc/6.3.0/892-libgcc-mkmap-symver-support-skip_underscore.patch | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/packages/gcc/6.3.0/892-libgcc-mkmap-symver-support-skip_underscore.patch b/packages/gcc/6.3.0/892-libgcc-mkmap-symver-support-skip_underscore.patch new file mode 100644 index 0000000..73ee6c5 --- /dev/null +++ b/packages/gcc/6.3.0/892-libgcc-mkmap-symver-support-skip_underscore.patch @@ -0,0 +1,60 @@ +From ae9c3e354440c4a0f105a9eabfb2f77be085ebc1 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> +Date: Thu, 18 Aug 2016 17:59:16 +0200 +Subject: [PATCH] libgcc/mkmap-symver: support skip_underscore + +Some platforms, such as Blackfin, have a special prefix for assembly +symbols as opposed to C symbols. For this reason, a function named +"foo()" in C will in fact be visible as a symbol called "_foo" in the +ELF binary. + +The current linker version script logic in libgcc doesn't take into +account this situation properly. The Blackfin specific +libgcc/config/bfin/libgcc-glibc.ver has an additional "_" in front of +every symbol so that it matches the output of "nm" (which gets parsed to +produce the final linker version script). But due to this additional +"_", ld no longer matches with the symbols since "ld" does the matching +with the original symbol name, not the one prefixed with "_". + +Due to this, none of the symbols in libgcc/config/bfin/libgcc-glibc.ver +are actually matched with symbols in libgcc. This causes all libgcc +symbols to be left as "LOCAL", which causes lots of "undefined +reference" whenever some C or C++ code that calls a function of libgcc +is compiled. + +To address this, this commit introduces a "skip_underscore" variable to +the mkmap-symver script. It tells mkmap-symver to ignore the leading +underscore from the "nm" output. + +Note that this new argument is different from the existing +"leading_underscore" argument, which *adds* an additional underscore to +the generated linker version script. + +Having this functionality paves the way to using the generic linker +version information for Blackfin, instead of using a custom one. + +Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> +--- + libgcc/mkmap-symver.awk | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/libgcc/mkmap-symver.awk b/libgcc/mkmap-symver.awk +index 266832a..30bb179 100644 +--- a/libgcc/mkmap-symver.awk ++++ b/libgcc/mkmap-symver.awk +@@ -47,7 +47,11 @@ state == "nm" && ($1 == "U" || $2 == "U") { + + state == "nm" && NF == 3 { + split ($3, s, "@") +- def[s[1]] = 1; ++ if (skip_underscore) ++ symname = substr(s[1], 2); ++ else ++ symname = s[1]; ++ def[symname] = 1; + sawsymbol = 1; + next; + } +-- +2.7.4 + |