This is the mail archive of the binutils@sourceware.cygnus.com mailing list for the binutils project.


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

SuperH PIC Support


Hi all,

We're trying to build GNU/Linux system on Hitachi SuperH (See: our
page http://www.m17n.org/linux-sh/).  Linux Kernel boots successfully
now.

Currently, we're thinking of PIC support for SuperH.  Reportedly,
(from the source of Hitachi's compiler development) Hitachi's compiler
doesn't support PIC too, and we have no definition about the ABI yet.

Although I'm newbie for GNU Binutils, I for myself have designed a
little.  Here are two candidates of PLT implementation.  We use GBR
for GOT.

32-bit version:
--------------------------
.PLTn:	mov.l	1f,r0
	mov.l	@(r0,gbr),r0
	jmp	@r0
	 nop
1:	.long	nameN@GOT
0:	mov.l	@(2,gbr),r0	! dynamic linker address
	mov.l	@(1,gbr),r1	! identity
	jmp	@r0
	 mov.l	2f,r2		! argument to the linker
2:	.long	relocation-table-offset
--------------------------

16-bit version:
--------------------------
.PLTn:	mov.l	1f,r0
9:	mov.l	@(r0,gbr),r0
 	jmp	@r0
0:	 mov	#2,r0	
	bra	9b
	 mov.l	2f,r2		! argument to the linker
1:	.word	nameN@GOT
2:	.word	entry-number-of-relocation-table
--------------------------

32-bit version is simple and straightforward, while 16-bit version is
somewhat tricky.  My personal opinion is 16-bit version is better as
"smaller is better".

But 16-bit version has the 64K limit for GOT size and the number of
entries for relocation table.

So, here is my question.  Is the 64K limit resonable?

I've done a little research on my Intel GNU/Linux box (which has 2136
binaries).

------------------------  GOT size (listed only >0800)
00003398	/usr/lib/libsp.so.1.0.3
00002d80	/usr/lib/libstyle.so.1.0.3
00001790	/usr/lib/libguilegtk-1.2.so.0.0.0
00001718	/usr/lib/libguile.so.4.0.0
00001508	/usr/lib/libgtk-1.2.so.0.2.1
000013cc	/usr/lib/libgnomeui.so.32.10.0
00001278	/usr/X11R6/LessTif/Motif2.0/lib/libXm.so.2.0.0
000011e8	/usr/lib/python1.5/site-packages/_gtkmodule.so
00001150	/usr/X11R6/LessTif/Motif1.2/lib/libXm.so.1.0.2
00000fbc	/usr/lib/libobgtk.so.1.2.1
00000f9c	/usr/lib/perl5/5.00502/i486-linux/CORE/libperl.so
00000ce4	/usr/X11R6/lib/libMesaGL.so.3.0
00000c84	/usr/bin/gmc
00000bf4	/usr/lib/libtk8.0.so
00000bdc	/usr/bin/plain-gmc
00000bb8	/usr/lib/libkaffevm.so.1.00
00000b80	/usr/libexec/apache/libphp3.so
00000b20	/usr/X11R6/lib/libMagick.so.4.0.26
00000b18	/usr/X11R6/lib/libX11.so.6.1
00000a5c	/usr/bin/gimp
00000a5c	/lib/libc-2.1.2.so
000009c0	/usr/X11R6/lib/modules/pex5.so
00000944	/usr/bin/gnumeric-bonobo
00000934	/usr/lib/libbonobo.so.0.0.0
000008f8	/usr/lib/python1.5/site-packages/_gnomeuimodule.so
00000870	/usr/lib/libspgrove.so.1.0.3
00000840	/usr/lib/libtcl8.0.so
00000834	/usr/bin/balsa

------------------------  Number of relocation entries (listed only >4096)
36040	/usr/lib/libstyle.so.1.0.3
24348	/usr/lib/libsp.so.1.0.3
18463	/usr/lib/libcgicc.so.0.0.2
12484	/usr/lib/libgoose-containers.so.10.0.0
12408	/usr/lib/libplot.so.0.1.0
9747	/usr/X11R6/lib/libMagick.so.4.0.26
8247	/usr/lib/perl5/site_perl/5.005/i486-linux/auto/Image/Magick/Magick.so
8173	/usr/X11R6/LessTif/Motif2.0/lib/libXm.so.2.0.0
8044	/usr/lib/libstdc++-3-libc6.1-2-2.10.0.so
7507	/usr/lib/libobgtk.so.1.2.1
7497	/usr/lib/libgoose-stats.so.10.0.0
7122	/usr/X11R6/LessTif/Motif1.2/lib/libXm.so.1.0.2
5293	/usr/lib/libspgrove.so.1.0.3
5227	/usr/lib/libgoose-guile.so.0.0.0
4155	/lib/libncurses.so.4.2


Then, I found that C++ binaries have bigger GOT.  I checked
mozilla-M9:

------------------------------	GOT size
00008c04	./components/libraptorhtml.so
000013b8	./components/libmsgimap.so
00001378	./components/librdf.so
00001154	./libxpcom.so
0000107c	./components/libmork.so
00000e14	./components/liblocalmail.so
00000dec	./libjsdom.so
00000cec	./components/libmsgnews.so
00000be0	./libwidget_gtk.so
00000b84	./libraptorhtmlpars.so
00000b20	./components/libmailnews.so
000009e0	./components/libender.so
000008e8	./components/libnsxpi.so
000008a8	./components/libmsgcompose.so
000007b8	./libmozjs.so
0000066c	./libmsgbaseutil.so
00000664	./libnsappshell.so
00000660	./components/libaddrbook.so
00000604	./libnspr3.so
000005c0	./components/libmime.so
00000514	./components/libxpconnect.so
00000504	./components/libucvlatin.so
00000498	./libappcores.so
0000046c	./components/libmsgdb.so
00000450	./libgfx_gtk.so
00000428	./libraptorwebwidget.so
00000424	./libraptorplugin.so
000003e0	./components/libuconv.so
000003d8	./components/libnecko.so
000003b4	./components/libwallet.so
0000039c	./components/libnecko_http.so
00000358	./libpref.so
0000032c	./viewer
00000300	./components/libbookmarks.so
000002e8	./libraptorgfx.so
00000294	./components/libcookie.so
0000028c	./components/libcaps.so
00000274	./components/libgfxps.so
0000026c	./components/libchardet.so
00000260	./components/libnecko_ftp.so
0000025c	./components/libvcard.so
00000240	./components/libhistory.so
00000210	./libraptorview.so
00000210	./components/libnslocale.so
000001f8	./libimg.so
000001ec	./components/libucvja.so
000001ec	./components/libmimeemitter.so
000001e4	./components/libtxtsvc.so
000001e0	./components/libnecko_file.so
000001dc	./components/librelated.so
000001dc	./components/libchrome.so
000001c8	./components/libucvtw2.so
000001b0	./components/libmozxfer.so
000001a8	./components/libprofile.so
00000180	./components/libucvtw.so
00000180	./components/libucvcn.so
00000174	./components/libucvko.so
00000148	./components/libjar50.so
0000013c	./xpidl
0000013c	./components/libstreamconv.so
00000138	./components/libprefwindow.so
00000114	./libxp.so
0000010c	./libmozdbm.so
0000010c	./components/libnsjpg.so
00000108	./components/libmozfind.so
000000fc	./components/libstrres.so
000000f4	./components/libtxmgr.so
000000ec	./libmozreg.so
000000e8	./components/libmimetype.so
000000e4	./components/libwalletviewers.so
000000e4	./apprunner
000000dc	./nsinstall
000000dc	./components/libnspng.so
000000cc	./components/liblwbrk.so
000000c0	./components/libunicharutil.so
000000c0	./components/libnecko_about.so
000000c0	./components/libjsurl.so
000000b4	./components/libmozucth.so
000000b0	./components/libnsgif.so
000000ac	./vreg
000000ac	./components/libnecko_resource.so
00000098	./libexpat.so
00000098	./components/libsample.so
00000094	./components/libprofileservices.so
00000090	./libxlibrgb.so
00000084	./xpt_link
00000074	./xpt_dump
00000070	./libsecfree.so
00000044	./regExport
00000038	./libmozutil.so
00000034	./libxmltok.so
00000028	./jscpucfg

------------------------------	Number of relocation entries
34137	./components/libraptorhtml.so
3721	./libjsdom.so
3381	./libwidget_gtk.so
3215	./components/librdf.so
2942	./libxpcom.so
2763	./components/libmsgimap.so
2554	./libraptorhtmlpars.so
2131	./components/libucvlatin.so
2046	./components/libmork.so
1705	./components/libender.so
1660	./components/libmailnews.so
1626	./components/liblocalmail.so
1580	./components/libmsgnews.so
1536	./libmozjs.so
1379	./libmsgbaseutil.so
1214	./components/libmsgcompose.so
1205	./components/libaddrbook.so
1133	./components/libnsxpi.so
1069	./libnsappshell.so
1066	./components/libmsgdb.so
924	./components/libxpconnect.so
907	./components/libgfxps.so
876	./libgfx_gtk.so
802	./libappcores.so
768	./libnspr3.so
735	./libraptorwebwidget.so
722	./components/libmime.so
657	./libraptorplugin.so
620	./libraptorview.so
618	./libraptorgfx.so
617	./components/libnecko.so
509	./components/libcaps.so
493	./components/libucvja.so
461	./components/libchardet.so
454	./libpref.so
450	./components/libnecko_http.so
444	./components/libuconv.so
442	./components/libucvtw2.so
399	./components/libvcard.so
373	./components/libwallet.so
307	./components/libucvko.so
304	./components/libucvcn.so
304	./components/libucvtw.so
297	./components/libnslocale.so
293	./components/libbookmarks.so
290	./components/libnecko_file.so
287	./components/libnecko_ftp.so
260	./components/libhistory.so
260	./components/libmimeemitter.so
244	./components/libcookie.so
220	./components/libchrome.so
204	./components/libprofile.so
204	./viewer
203	./components/libmozxfer.so
198	./components/libtxtsvc.so
197	./components/librelated.so
189	./libimg.so
185	./libxmltok.so
163	./components/libtxmgr.so
154	./components/libmozfind.so
139	./components/libjar50.so
125	./components/libwalletviewers.so
114	./components/libmimetype.so
114	./components/libprefwindow.so
112	./components/liblwbrk.so
109	./components/libunicharutil.so
104	./components/libnsjpg.so
103	./components/libstrres.so
101	./libplc3.so
95	./components/libstreamconv.so
92	./components/libnspng.so
87	./components/libjsurl.so
85	./components/libnsgif.so
81	./components/libmozucth.so
80	./xpidl
79	./components/libnecko_about.so
78	./components/libprofileservices.so
69	./components/libsample.so
67	./libxp.so
66	./libmozdbm.so
65	./components/libnecko_resource.so
58	./libexpat.so
58	./libmozreg.so
56	./apprunner
55	./nsinstall
53	./libplds3.so
41	./vreg
40	./libxlibrgb.so
32	./xpt_link
28	./xpt_dump
26	./libsecfree.so
14	./regExport
12	./libmozutil.so
7	./jscpucfg


As I don't have enough experience around this field, I don't know
16-bit limit is good or bad.  Any suggestions are welcome.

Regards, 
-- 
Niibe Yutaka

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