Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+35 -19
+16 -8
arch/arc/Makefile
··· 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 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 32 36 cflags-$(CONFIG_ARC_HAS_SWAPE) += -mswape 33 37 cflags-$(CONFIG_ARC_HAS_RTSC) += -mrtsc 34 38 cflags-$(CONFIG_ARC_DW2_UNWIND) += -fasynchronous-unwind-tables 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 35 44 36 45 ifndef CONFIG_CC_OPTIMIZE_FOR_SIZE 37 46 # Generic build system uses -O2, we want -O3 ··· 55 46 cflags-$(CONFIG_CPU_BIG_ENDIAN) += -mbig-endian 56 47 ldflags-$(CONFIG_CPU_BIG_ENDIAN) += -EB 57 48 58 - # STAR 9000518362: 49 + # STAR 9000518362: (fixed with binutils shipping with gcc 4.8) 59 50 # arc-linux-uclibc-ld (buildroot) or arceb-elf32-ld (EZChip) don't accept 60 - # --build-id w/o "-marclinux". 61 - # Default arc-elf32-ld is OK 62 - ldflags-y += -marclinux 51 + # --build-id w/o "-marclinux". Default arc-elf32-ld is OK 52 + ldflags-$(upto_gcc44) += -marclinux 63 53 64 54 ARC_LIBGCC := -mA7 65 55 cflags-$(CONFIG_ARC_HAS_HW_MPY) += -multcost=16 ··· 72 64 # With gcc 4.4.7, -mno-mpy is enough to make any other related adjustments, 73 65 # e.g. increased cost of MPY. With gcc 4.2.1 this had to be explicitly hinted 74 66 75 - ARC_LIBGCC := -marc600 76 - ifneq ($(atleast_gcc44),y) 67 + ifeq ($(upto_gcc42),y) 68 + ARC_LIBGCC := -marc600 77 69 cflags-y += -multcost=30 78 70 endif 79 71 endif
+1 -1
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
+1 -1
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
+1 -1
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
+16 -8
arch/arc/kernel/vmlinux.lds.S
··· 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 ··· 147 142 *(.arcextmap.*) 148 143 } 149 144 145 + #ifndef CONFIG_DEBUG_INFO 150 146 /* open-coded because we need .debug_frame seperately for unwinding */ 151 - .debug_aranges 0 : { *(.debug_aranges) } 152 - .debug_pubnames 0 : { *(.debug_pubnames) } 153 - .debug_info 0 : { *(.debug_info) } 154 - .debug_abbrev 0 : { *(.debug_abbrev) } 155 - .debug_line 0 : { *(.debug_line) } 156 - .debug_str 0 : { *(.debug_str) } 157 - .debug_loc 0 : { *(.debug_loc) } 158 - .debug_macinfo 0 : { *(.debug_macinfo) } 147 + /DISCARD/ : { *(.debug_aranges) } 148 + /DISCARD/ : { *(.debug_pubnames) } 149 + /DISCARD/ : { *(.debug_info) } 150 + /DISCARD/ : { *(.debug_abbrev) } 151 + /DISCARD/ : { *(.debug_line) } 152 + /DISCARD/ : { *(.debug_str) } 153 + /DISCARD/ : { *(.debug_loc) } 154 + /DISCARD/ : { *(.debug_macinfo) } 155 + /DISCARD/ : { *(.debug_ranges) } 156 + #endif 159 157 160 158 #ifdef CONFIG_ARC_HAS_DCCM 161 159 . = CONFIG_ARC_DCCM_BASE;