Blame view

buildroot/buildroot-2016.08.1/package/binutils/2.24/903-xtensa-fix-ld-segfault-when-linking-linux-modules.patch 1.87 KB
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
  From e7d17e71cdc10a2e81e454ce3b9637f1b2a587f2 Mon Sep 17 00:00:00 2001
  From: Max Filippov <jcmvbkbc@gmail.com>
  Date: Thu, 10 Jul 2014 01:47:33 +0400
  Subject: [PATCH] Fix xtensa ld segfault when linking linux modules
  
  is_inconsistent_linkonce_section makes an assumption that section name
  that starts with ".gnu.linkonce.prop." has one more dot in its suffix.
  However gas generates such section name by insertion of "prop." right
  after ".gnu.linkonce." part of the name of the original section. So, for
  section named ".gnu.linkonce.this_module" corresponding property section
  name does not satisfy the assumption. Such section names are common in
  linux modules. This bug was exposed by the patch "a35d5e8 Fix alignment
  for the first section frag on xtensa", that makes gas produce property
  section for each section that has ".align" directive in it.
  
  Use suffix that immediately follows ".gnu.linkonce.prop." when there are
  no more dots following it.
  
  2014-07-10  Max Filippov  <jcmvbkbc@gmail.com>
  
  ld/
      * emultempl/xtensaelf.em (is_inconsistent_linkonce_section):
      correctly handle missing dot in section name after
      ".gnu.linkonce.prop.".
  ---
  Backported from: e7d17e71cdc10a2e81e454ce3b9637f1b2a587f2
  Changes to ld/ChangeLog file are dropped.
  
   ld/emultempl/xtensaelf.em | 2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)
  
  diff --git a/ld/emultempl/xtensaelf.em b/ld/emultempl/xtensaelf.em
  index 151eea4..948d18d 100644
  --- a/ld/emultempl/xtensaelf.em
  +++ b/ld/emultempl/xtensaelf.em
  @@ -1310,7 +1310,7 @@ is_inconsistent_linkonce_section (asection *sec)
        for Tensilica's XCC compiler.  */
     name = sec_name + linkonce_len;
     if (CONST_STRNEQ (name, "prop."))
  -    name = strchr (name + 5, '.') + 1;
  +    name = strchr (name + 5, '.') ? strchr (name + 5, '.') + 1 : name + 5;
     else if (name[1] == '.'
   	   && (name[0] == 'p' || name[0] == 'e' || name[0] == 'h'))
       name += 2;
  -- 
  1.8.1.4