From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Lance Taylor To: hjl@nynexst.com Cc: gas2@cygnus.com, eric@aib.com Subject: Re: Add -N support to ELF? Date: Mon, 20 Feb 1995 15:48:00 -0000 Message-id: <9502202348.AA06378@tweedledumb.cygnus.com> References: <9502202236.AA25617@titanic.nynexst.com> X-SW-Source: 1995/msg00030.html From: hjl@nynexst.com (H.J. Lu) Date: Mon, 20 Feb 95 17:42:10 EST I think it is wrong to put the writable section into the .text section. It will break any schemes which uses the .text section like const char * const foo = "You should die if you modify it."; >From the linker's point of view, there is nothing wrong with having a writable .text section. The current linker will handle it correctly, in the sense that it will produce a program segment which is marked writable. There must be a bug in somewhere else if ld dies. It is not my patch's fault. The bug is that given the standard ELF linker script in elf.sc, the linker has to know the number of program segments it is going to generate before it assigns addresses to any of the sections. This is because of the use of SIZEOF_HEADERS in elf.sc, which is used as is normal for an ELF target. Unfortunately, the GNU linker will ask the BFD backend for the size of the header information before it has fully sorted out the section layout of the input files. It has no mechanism for adjusting the header size based on the section layout. Therefore, the BFD backend will guess that only two segments are required. If more than two segments are required, the linker must abort. You are absolutely correct in saying that this bug is not related to your patch. However, look at it from my perspective. Right now, the linker will always work correctly given the script in elf.sc, and (thanks to some patches from Doug Evans) it will always work given a script which does not use SIZEOF_HEADERS. It will currently fail when given a script which uses SIZEOF_HEADERS which does not arrange the sections carefully. It will also sometimes allocate an unnecessary page of virtual address space. Your patch fixes the last problem. However, if your patch is applied, it will no longer be the case that the linker will always work correctly given the script in elf.sc. To my mind, that is too heavy a price to pay. The bug you are fixing is a rather theoretical one--I may misunderstand something, but I think I would find it difficult to construct a program which failed to run without your patch. If your patch were harmless, I would put it in. However, I believe that it is not harmless. I believe that the correct thing to do is to permit the linker to adjust SIZEOF_HEADERS based on the section layout. However, that may be a complicated task, I have very little time, and I am not aware of any person who has actually encountered the problem. If I receive patches to fix that problem, I will put your patch in at that time. Ian