This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

How to support 64-bit PowerPC -mcmodel=medium?


Hello,

it seems that the -mcmodel=small was not the right default for RTEMS applications, since I get

relocation truncated to fit: R_PPC64_TOC16_DS against `.got'+118

errors quite quickly.

So, I try to add the -mcmodel option. However, some piece is missing:

/build/git-build/b-gcc-git-powerpc-rtems4.12/./gcc/xgcc -B/build/git-build/b-gcc-git-powerpc-rtems4.12/./gcc/ -nostdinc -B/build/git-build/b-gcc-git-powerpc-rtems4.12/powerpc-rtems4.12/me6500/m64/newlib/ -isystem /build/git-build/b-gcc-git-powerpc-rtems4.12/powerpc-rtems4.12/me6500/m64/newlib/targ-include -isystem /home/EB/sebastian_h/archive/gcc-git/newlib/libc/include -B/opt/rtems-4.12/powerpc-rtems4.12/bin/ -B/opt/rtems-4.12/powerpc-rtems4.12/lib/ -isystem /opt/rtems-4.12/powerpc-rtems4.12/include -isystem /opt/rtems-4.12/powerpc-rtems4.12/sys-include -mcpu=e6500 -m64 -g -O2 -O2 -g -O2 -DIN_GCC -DCROSS_DIRECTORY_STRUCTURE -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -isystem ./include -I. -I. -I../../../.././gcc -I/home/EB/sebastian_h/archive/gcc-git/libgcc -I/home/EB/sebastian_h/archive/gcc-git/libgcc/. -I/home/EB/sebastian_h/archive/gcc-git/libgcc/../gcc -I/home/EB/sebastian_h/archive/gcc-git/libgcc/../include -g0 -finhibit-size-directive -fno-inline -fno-exceptions -fno-zero-initialized-in-bss -fno-toplevel-reorder -fno-tree-vectorize -fbuilding-libgcc -fno-stack-protector -Dinhibit_libc -I. -I. -I../../../.././gcc -I/home/EB/sebastian_h/archive/gcc-git/libgcc -I/home/EB/sebastian_h/archive/gcc-git/libgcc/. -I/home/EB/sebastian_h/archive/gcc-git/libgcc/../gcc -I/home/EB/sebastian_h/archive/gcc-git/libgcc/../include -o crtbeginS.o -MT crtbeginS.o -MD -MP -MF crtbeginS.dep -msdata=none -O2 -c /home/EB/sebastian_h/archive/gcc-git/libgcc/crtstuff.c -DCRT_BEGIN -DCRTSTUFFS_O -fPIC -mcmodel=medium -save-temps
crtstuff.s: Assembler messages:
crtstuff.s:44: Error: can't resolve `.tm_clone_table' {.tm_clone_table section} - `.LCTOC1' {.toc1 section} crtstuff.s:45: Error: can't resolve `__TMC_END__' {*UND* section} - `.LCTOC1' {.toc1 section} crtstuff.s:82: Error: can't resolve `.tm_clone_table' {.tm_clone_table section} - `.LCTOC1' {.toc1 section} crtstuff.s:83: Error: can't resolve `__TMC_END__' {*UND* section} - `.LCTOC1' {.toc1 section} crtstuff.s:131: Error: can't resolve `.bss' {.bss section} - `.LCTOC1' {.toc1 section} crtstuff.s:143: Error: can't resolve `__dso_handle' {.sdata section} - `.LCTOC1' {.toc1 section} crtstuff.s:149: Error: can't resolve `__DTOR_END__' {*UND* section} - `.LCTOC1' {.toc1 section} crtstuff.s:150: Error: can't resolve `.dtors' {.dtors section} - `.LCTOC1' {.toc1 section} crtstuff.s:153: Error: can't resolve `.bss' {.bss section} - `.LCTOC1' {.toc1 section} crtstuff.s:157: Error: can't resolve `.dtors' {.dtors section} - `.LCTOC1' {.toc1 section} crtstuff.s:162: Error: can't resolve `.bss' {.bss section} - `.LCTOC1' {.toc1 section} crtstuff.s:185: Error: can't resolve `.eh_frame' {.eh_frame section} - `.LCTOC1' {.toc1 section} crtstuff.s:192: Error: can't resolve `.bss' {.bss section} - `.LCTOC1' {.toc1 section} crtstuff.s:226: Error: can't resolve `.bss' {.bss section} - `.LCTOC1' {.toc1 section} crtstuff.s:227: Error: can't resolve `.eh_frame' {.eh_frame section} - `.LCTOC1' {.toc1 section}

The code generation works with -mcmodel=small and -mcmodel=large.

--
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber@embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.

>From 7d2b18f303cc7cf62d29328b362e645027884270 Mon Sep 17 00:00:00 2001
From: Sebastian Huber <sebastian.huber@embedded-brains.de>
Date: Fri, 11 Aug 2017 11:26:19 +0200
Subject: [PATCH] PowerPC/RTEMS: Enable -mcmodel option

---
 gcc/config.gcc            |  2 +-
 gcc/config/rs6000/rtems.h | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 48 insertions(+), 1 deletion(-)

diff --git a/gcc/config.gcc b/gcc/config.gcc
index a9196cd26d9..593631849bb 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -2416,7 +2416,7 @@ powerpc-*-eabi*)
 	;;
 powerpc-*-rtems*)
 	tm_file="rs6000/biarch64.h ${tm_file} dbxelf.h elfos.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/e500.h rs6000/rtems.h rtems.h"
-	extra_options="${extra_options} rs6000/sysv4.opt"
+	extra_options="${extra_options} rs6000/sysv4.opt rs6000/linux64.opt"
 	tmake_file="${tmake_file} rs6000/t-fprules rs6000/t-rtems rs6000/t-ppccomm"
 	;;
 powerpc*-*-linux*)
diff --git a/gcc/config/rs6000/rtems.h b/gcc/config/rs6000/rtems.h
index 8a62fdcbaf3..40940c1dfe6 100644
--- a/gcc/config/rs6000/rtems.h
+++ b/gcc/config/rs6000/rtems.h
@@ -37,6 +37,11 @@
 #undef	TARGET_AIX
 #define	TARGET_AIX TARGET_64BIT
 
+/* Copy and paste from linux64.h and freebsd64.h */
+#undef TARGET_CMODEL
+#define TARGET_CMODEL rs6000_current_cmodel
+#define SET_CMODEL(opt) rs6000_current_cmodel = opt
+
 #undef TARGET_OS_CPP_BUILTINS
 #define TARGET_OS_CPP_BUILTINS()			\
   do							\
@@ -95,6 +100,24 @@
 	      rs6000_isa_flags |= OPTION_MASK_POWERPC64;	\
 	      error ("-m64 requires a PowerPC64 cpu");		\
 	    }							\
+	  if ((rs6000_isa_flags_explicit			\
+		& OPTION_MASK_MINIMAL_TOC) != 0)		\
+	    {							\
+	      if (global_options_set.x_rs6000_current_cmodel	\
+		  && rs6000_current_cmodel != CMODEL_SMALL)	\
+		error ("-mcmodel incompatible with other toc options"); \
+	      SET_CMODEL (CMODEL_SMALL);			\
+	    }							\
+	  else							\
+	    {							\
+	      if (!global_options_set.x_rs6000_current_cmodel)	\
+		SET_CMODEL (CMODEL_MEDIUM);			\
+	      if (rs6000_current_cmodel != CMODEL_SMALL)	\
+		{						\
+		  TARGET_NO_FP_IN_TOC = 0;			\
+		  TARGET_NO_SUM_IN_TOC = 0;			\
+		}						\
+	    }							\
 	}							\
     }								\
   while (0)
@@ -141,6 +164,30 @@
 #define RESTORE_FP_SUFFIX ""
 
 /* Copy and paste from linux64.h and freebsd64.h */
+#undef	ASM_PREFERRED_EH_DATA_FORMAT
+#define	ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \
+  (TARGET_64BIT || flag_pic						\
+   ? (((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel		\
+      | (TARGET_64BIT ? DW_EH_PE_udata8 : DW_EH_PE_sdata4))		\
+   : DW_EH_PE_absptr)
+
+/* Copy and paste from linux64.h and freebsd64.h */
+#undef  TOC_SECTION_ASM_OP
+#define TOC_SECTION_ASM_OP \
+  (TARGET_64BIT						\
+   ? "\t.section\t\".toc\",\"aw\""			\
+   : "\t.section\t\".got\",\"aw\"")
+
+/* Copy and paste from linux64.h and freebsd64.h */
+#undef  MINIMAL_TOC_SECTION_ASM_OP
+#define MINIMAL_TOC_SECTION_ASM_OP \
+  (TARGET_64BIT						\
+   ? "\t.section\t\".toc1\",\"aw\""			\
+   : (flag_pic						\
+      ? "\t.section\t\".got2\",\"aw\""			\
+      : "\t.section\t\".got1\",\"aw\""))
+
+/* Copy and paste from linux64.h and freebsd64.h */
 #undef	ASM_DECLARE_FUNCTION_SIZE
 #define	ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL)			\
   do									\
-- 
2.12.3

	.file	"crtstuff.c"
	.abiversion 2
	.section	.ctors,"aw",@progbits
	.align 3
	.type	__CTOR_LIST__, @object
__CTOR_LIST__:
	.quad	-1
	.section	.dtors,"aw",@progbits
	.align 3
	.type	__DTOR_LIST__, @object
__DTOR_LIST__:
	.quad	-1
	.section	.eh_frame,"a",@progbits
	.align 2
	.type	__EH_FRAME_BEGIN__, @object
__EH_FRAME_BEGIN__:
	.section	.tm_clone_table,"aw",@progbits
	.align 3
	.type	__TMC_LIST__, @object
__TMC_LIST__:
	.section	".toc","aw"
	.align 3
.LCTOC0:
	.tc .LCTOC1[TC],.LCTOC1
	.section	".toc1","aw"
	.align 3
.LCTOC1 = .+32768
.LC0:
	.quad	_ITM_deregisterTMCloneTable
	.section	".text"
	.align 2
	.p2align 4,,15
	.type	deregister_tm_clones, @function
deregister_tm_clones:
.LCF0:
0:	addis 2,12,.TOC.-.LCF0@ha
	addi 2,2,.TOC.-.LCF0@l
	.localentry	deregister_tm_clones,.-deregister_tm_clones
	std 30,-16(1)
	ld 30,.LCTOC0@toc(2)
	stdu 1,-48(1)
	addis 3,30,__TMC_LIST__@toc@ha
	addis 9,30,__TMC_END__@toc@ha
	addi 3,3,__TMC_LIST__-.LCTOC1@l
	addi 9,9,__TMC_END__-.LCTOC1@l
	cmpd 7,9,3
	beq- 7,.L1
	addis 9,30,.LC0@toc@ha
	ld 9,.LC0-.LCTOC1@l(9)
	cmpdi 7,9,0
	beq- 7,.L1
	mflr 0
	std 2,24(1)
	std 0,64(1)
	mr 12,9
	mtctr 9
	bctrl
	ld 2,24(1)
	ld 0,64(1)
	mtlr 0
.L1:
	addi 1,1,48
	ld 30,-16(1)
	blr
	.section	".toc1","aw"
.LC1:
	.quad	_ITM_registerTMCloneTable
	.section	".text"
	.align 2
	.p2align 4,,15
	.type	register_tm_clones, @function
register_tm_clones:
.LCF1:
0:	addis 2,12,.TOC.-.LCF1@ha
	addi 2,2,.TOC.-.LCF1@l
	.localentry	register_tm_clones,.-register_tm_clones
	std 30,-16(1)
	ld 30,.LCTOC0@toc(2)
	stdu 1,-48(1)
	addis 3,30,__TMC_LIST__@toc@ha
	addis 4,30,__TMC_END__@toc@ha
	addi 3,3,__TMC_LIST__-.LCTOC1@l
	addi 4,4,__TMC_END__-.LCTOC1@l
	subf 4,3,4
	sradi 4,4,3
	sradi 4,4,1
	addze. 4,4
	beq- 0,.L8
	addis 9,30,.LC1@toc@ha
	ld 9,.LC1-.LCTOC1@l(9)
	cmpdi 7,9,0
	beq- 7,.L8
	mflr 0
	std 2,24(1)
	std 0,64(1)
	mr 12,9
	mtctr 9
	bctrl
	ld 2,24(1)
	ld 0,64(1)
	mtlr 0
.L8:
	addi 1,1,48
	ld 30,-16(1)
	blr
	.hidden	__dso_handle
	.globl __dso_handle
	.section	.sdata,"aw",@progbits
	.align 3
	.type	__dso_handle, @object
__dso_handle:
	.quad	__dso_handle
	.section	".toc1","aw"
.LC2:
	.quad	__cxa_finalize
.LC3:
	.quad	__deregister_frame_info
	.section	".text"
	.align 2
	.p2align 4,,15
	.type	__do_global_dtors_aux, @function
__do_global_dtors_aux:
.LCF2:
0:	addis 2,12,.TOC.-.LCF2@ha
	addi 2,2,.TOC.-.LCF2@l
	.localentry	__do_global_dtors_aux,.-__do_global_dtors_aux
	std 30,-16(1)
	ld 30,.LCTOC0@toc(2)
	stdu 1,-64(1)
	addis 9,30,completed.6203@toc@ha
	lbz 9,completed.6203-.LCTOC1@l(9)
	cmpwi 7,9,0
	bne- 7,.L17
	addis 9,30,.LC2@toc@ha
	mflr 0
	ld 9,.LC2-.LCTOC1@l(9)
	std 0,80(1)
	std 28,32(1)
	cmpdi 7,9,0
	std 31,56(1)
	beq- 7,.L19
	addis 9,30,__dso_handle@toc@ha
	ld 3,__dso_handle-.LCTOC1@l(9)
	bl __cxa_finalize
	nop
.L19:
	addis 9,30,__DTOR_END__@toc@ha
	addis 31,30,__DTOR_LIST__@toc@ha
	addi 9,9,__DTOR_END__-.LCTOC1@l
	addi 31,31,__DTOR_LIST__-.LCTOC1@l
	subf 31,31,9
	addis 9,30,dtor_idx.6205@toc@ha
	ld 9,dtor_idx.6205-.LCTOC1@l(9)
	sradi 31,31,3
	addi 31,31,-1
	addis 28,30,__DTOR_LIST__@toc@ha
	addi 28,28,__DTOR_LIST__-.LCTOC1@l
	cmpld 7,9,31
	bge- 7,.L20
	std 29,40(1)
	addis 29,30,dtor_idx.6205@toc@ha
	addi 29,29,dtor_idx.6205-.LCTOC1@l
	.p2align 4,,15
.L21:
	addi 9,9,1
	sldi 10,9,3
	std 9,0(29)
	ldx 9,28,10
	std 2,24(1)
	mr 12,9
	mtctr 9
	bctrl
	ld 2,24(1)
	ld 9,0(29)
	cmpld 7,9,31
	blt+ 7,.L21
	ld 29,40(1)
.L20:
	bl deregister_tm_clones
	addis 9,30,.LC3@toc@ha
	ld 9,.LC3-.LCTOC1@l(9)
	cmpdi 7,9,0
	beq- 7,.L22
	addis 3,30,__EH_FRAME_BEGIN__@toc@ha
	addi 3,3,__EH_FRAME_BEGIN__-.LCTOC1@l
	bl __deregister_frame_info
	nop
.L22:
	li 9,1
	addis 10,30,completed.6203@toc@ha
	ld 0,80(1)
	stb 9,completed.6203-.LCTOC1@l(10)
	ld 28,32(1)
	ld 31,56(1)
	mtlr 0
.L17:
	addi 1,1,64
	ld 30,-16(1)
	blr
	.section	".fini","ax"
	bl __do_global_dtors_aux
	nop
	.previous
	.section	".toc1","aw"
.LC4:
	.quad	__register_frame_info
	.section	".text"
	.align 2
	.p2align 4,,15
	.type	frame_dummy, @function
frame_dummy:
.LCF3:
0:	addis 2,12,.TOC.-.LCF3@ha
	addi 2,2,.TOC.-.LCF3@l
	.localentry	frame_dummy,.-frame_dummy
	std 30,-16(1)
	ld 30,.LCTOC0@toc(2)
	stdu 1,-48(1)
	addis 9,30,.LC4@toc@ha
	ld 9,.LC4-.LCTOC1@l(9)
	cmpdi 7,9,0
	beq- 7,.L32
	addis 4,30,object.6215@toc@ha
	addis 3,30,__EH_FRAME_BEGIN__@toc@ha
	mflr 0
	addi 4,4,object.6215-.LCTOC1@l
	addi 3,3,__EH_FRAME_BEGIN__-.LCTOC1@l
	std 0,64(1)
	bl __register_frame_info
	nop
	ld 0,64(1)
	mtlr 0
.L32:
	addi 1,1,48
	ld 30,-16(1)
	b register_tm_clones
	.section	".init","ax"
	bl frame_dummy
	nop
	.previous
	.lcomm	completed.6203,1,1
	.type	completed.6203, @object
	.lcomm	dtor_idx.6205,8,8
	.type	dtor_idx.6205, @object
	.lcomm	object.6215,48,8
	.type	object.6215, @object
	.weak	__register_frame_info
	.weak	__deregister_frame_info
	.weak	__cxa_finalize
	.weak	_ITM_registerTMCloneTable
	.weak	_ITM_deregisterTMCloneTable
	.hidden	__DTOR_END__
	.hidden	__TMC_END__
	.ident	"GCC: (GNU) 7.1.1 20170810 [gcc-7-branch revision e363899ddbf:1a4de6af07d:e943bd58a59a930f8708f844e1e352629a4a20f7]"
	.section	.note.GNU-stack,"",@progbits

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]