Commit 5a45da02cf040ae7eacc9da10f6e8e369a220863

Authored by Vineet Gupta
1 parent 05b016ecf5

ARC: Adjustments for gcc 4.8

* DWARF unwinder related
  + Force DWARF2 compliant .debug_frame (gcc 4.8 defaults to DWARF4
    which kernel unwinder can't grok).
  + Discard the additional .eh_frame generated
  + Discard the dwarf4 debug info generated by -gdwarf-2 for normal
    no debug case

* 4.8 already uses arc600 multilibs for -mno-mpy

* switch to using uclibc compiler (to get -mmedium-calls and -mno-sdata)
  and also since buildroot can only use 1 toolchain

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>

Showing 5 changed files with 35 additions and 19 deletions Side-by-side Diff

... ... @@ -9,7 +9,7 @@
9 9 UTS_MACHINE := arc
10 10  
11 11 ifeq ($(CROSS_COMPILE),)
12   -CROSS_COMPILE := arc-elf32-
  12 +CROSS_COMPILE := arc-linux-uclibc-
13 13 endif
14 14  
15 15 KBUILD_DEFCONFIG := fpga_defconfig
... ... @@ -25,7 +25,11 @@
25 25 LINUXINCLUDE += -include ${src}/arch/arc/include/asm/current.h
26 26 endif
27 27  
28   -atleast_gcc44 := $(call cc-ifversion, -gt, 0402, y)
  28 +upto_gcc42 := $(call cc-ifversion, -le, 0402, y)
  29 +upto_gcc44 := $(call cc-ifversion, -le, 0404, y)
  30 +atleast_gcc44 := $(call cc-ifversion, -ge, 0404, y)
  31 +atleast_gcc48 := $(call cc-ifversion, -ge, 0408, y)
  32 +
29 33 cflags-$(atleast_gcc44) += -fsection-anchors
30 34  
31 35 cflags-$(CONFIG_ARC_HAS_LLSC) += -mlock
... ... @@ -33,6 +37,11 @@
33 37 cflags-$(CONFIG_ARC_HAS_RTSC) += -mrtsc
34 38 cflags-$(CONFIG_ARC_DW2_UNWIND) += -fasynchronous-unwind-tables
35 39  
  40 +# By default gcc 4.8 generates dwarf4 which kernel unwinder can't grok
  41 +ifeq ($(atleast_gcc48),y)
  42 +cflags-$(CONFIG_ARC_DW2_UNWIND) += -gdwarf-2
  43 +endif
  44 +
36 45 ifndef CONFIG_CC_OPTIMIZE_FOR_SIZE
37 46 # Generic build system uses -O2, we want -O3
38 47 cflags-y += -O3
39 48  
... ... @@ -46,11 +55,10 @@
46 55 cflags-$(CONFIG_CPU_BIG_ENDIAN) += -mbig-endian
47 56 ldflags-$(CONFIG_CPU_BIG_ENDIAN) += -EB
48 57  
49   -# STAR 9000518362:
  58 +# STAR 9000518362: (fixed with binutils shipping with gcc 4.8)
50 59 # arc-linux-uclibc-ld (buildroot) or arceb-elf32-ld (EZChip) don't accept
51   -# --build-id w/o "-marclinux".
52   -# Default arc-elf32-ld is OK
53   -ldflags-y += -marclinux
  60 +# --build-id w/o "-marclinux". Default arc-elf32-ld is OK
  61 +ldflags-$(upto_gcc44) += -marclinux
54 62  
55 63 ARC_LIBGCC := -mA7
56 64 cflags-$(CONFIG_ARC_HAS_HW_MPY) += -multcost=16
... ... @@ -64,8 +72,8 @@
64 72 # With gcc 4.4.7, -mno-mpy is enough to make any other related adjustments,
65 73 # e.g. increased cost of MPY. With gcc 4.2.1 this had to be explicitly hinted
66 74  
67   - ARC_LIBGCC := -marc600
68   - ifneq ($(atleast_gcc44),y)
  75 + ifeq ($(upto_gcc42),y)
  76 + ARC_LIBGCC := -marc600
69 77 cflags-y += -multcost=30
70 78 endif
71 79 endif
arch/arc/configs/fpga_defconfig
1   -CONFIG_CROSS_COMPILE="arc-elf32-"
  1 +CONFIG_CROSS_COMPILE="arc-linux-uclibc-"
2 2 # CONFIG_LOCALVERSION_AUTO is not set
3 3 CONFIG_DEFAULT_HOSTNAME="ARCLinux"
4 4 # CONFIG_SWAP is not set
arch/arc/configs/nsimosci_defconfig
1   -CONFIG_CROSS_COMPILE="arc-elf32-"
  1 +CONFIG_CROSS_COMPILE="arc-linux-uclibc-"
2 2 # CONFIG_LOCALVERSION_AUTO is not set
3 3 CONFIG_DEFAULT_HOSTNAME="ARCLinux"
4 4 # CONFIG_SWAP is not set
arch/arc/configs/tb10x_defconfig
1   -CONFIG_CROSS_COMPILE="arc-elf32-"
  1 +CONFIG_CROSS_COMPILE="arc-linux-uclibc-"
2 2 # CONFIG_LOCALVERSION_AUTO is not set
3 3 CONFIG_DEFAULT_HOSTNAME="tb10x"
4 4 CONFIG_SYSVIPC=y
arch/arc/kernel/vmlinux.lds.S
... ... @@ -125,6 +125,11 @@
125 125 *(.debug_frame)
126 126 __end_unwind = .;
127 127 }
  128 + /*
  129 + * gcc 4.8 generates this for -fasynchonous-unwind-tables,
  130 + * while we still use the .debug_frame based unwinder
  131 + */
  132 + /DISCARD/ : { *(.eh_frame) }
128 133 #else
129 134 /DISCARD/ : { *(.debug_frame) }
130 135 #endif
131 136  
... ... @@ -142,15 +147,18 @@
142 147 *(.arcextmap.*)
143 148 }
144 149  
  150 +#ifndef CONFIG_DEBUG_INFO
145 151 /* open-coded because we need .debug_frame seperately for unwinding */
146   - .debug_aranges 0 : { *(.debug_aranges) }
147   - .debug_pubnames 0 : { *(.debug_pubnames) }
148   - .debug_info 0 : { *(.debug_info) }
149   - .debug_abbrev 0 : { *(.debug_abbrev) }
150   - .debug_line 0 : { *(.debug_line) }
151   - .debug_str 0 : { *(.debug_str) }
152   - .debug_loc 0 : { *(.debug_loc) }
153   - .debug_macinfo 0 : { *(.debug_macinfo) }
  152 + /DISCARD/ : { *(.debug_aranges) }
  153 + /DISCARD/ : { *(.debug_pubnames) }
  154 + /DISCARD/ : { *(.debug_info) }
  155 + /DISCARD/ : { *(.debug_abbrev) }
  156 + /DISCARD/ : { *(.debug_line) }
  157 + /DISCARD/ : { *(.debug_str) }
  158 + /DISCARD/ : { *(.debug_loc) }
  159 + /DISCARD/ : { *(.debug_macinfo) }
  160 + /DISCARD/ : { *(.debug_ranges) }
  161 +#endif
154 162  
155 163 #ifdef CONFIG_ARC_HAS_DCCM
156 164 . = CONFIG_ARC_DCCM_BASE;