Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 28 Oct 2005 01:04:37 +0300
From:      Ruslan Ermilov <ru@freebsd.org>
To:        Dag-Erling Sm?rgrav <des@des.no>
Cc:        cvs-src@freebsd.org, "Bjoern A. Zeeb" <bz@freebsd.org>, src-committers@freebsd.org, cvs-all@freebsd.org
Subject:   Re: cvs commit: src/sys/conf kern.post.mk kmod.mk
Message-ID:  <20051027220437.GA54382@ip.net.ua>
In-Reply-To: <86vezi1w6l.fsf@xps.des.no>
References:  <200510271424.j9REOkr8091913@repoman.freebsd.org> <Pine.BSF.4.53.0510271714530.91525@e0-0.zab2.int.zabbadoz.net> <20051027174042.GK68470@ip.net.ua> <864q723dqt.fsf@xps.des.no> <20051027204816.GX68470@ip.net.ua> <86vezi1w6l.fsf@xps.des.no>

next in thread | previous in thread | raw e-mail | index | archive | help

[-- Attachment #1 --]
On Thu, Oct 27, 2005 at 11:34:10PM +0200, Dag-Erling Sm?rgrav wrote:
> Ruslan Ermilov <ru@FreeBSD.org> writes:
> > sys/kern/link_elf_obj.c is what's used with current format module
> > objects on amd64.  Can you see a problem there?
> 
> Yes.  AFAICT, it should select sections based on the presence of the
> SHF_ALLOC bit in sh_flags.  See if the attached patch helps.
> 
Fantastic.  :-)

I was just about to test the following patch:

%%%
Index: link_elf_obj.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/link_elf_obj.c,v
retrieving revision 1.89
diff -u -p -r1.89 link_elf_obj.c
--- link_elf_obj.c	28 Aug 2005 05:38:40 -0000	1.89
+++ link_elf_obj.c	27 Oct 2005 22:00:00 -0000
@@ -228,6 +228,8 @@ link_elf_link_preload(linker_class_t cls
 		switch (shdr[i].sh_type) {
 		case SHT_PROGBITS:
 		case SHT_NOBITS:
+			if (!(shdr[i].sh_flags & SHF_ALLOC))
+				break;
 			ef->nprogtab++;
 			break;
 		case SHT_SYMTAB:
@@ -298,6 +300,8 @@ link_elf_link_preload(linker_class_t cls
 		switch (shdr[i].sh_type) {
 		case SHT_PROGBITS:
 		case SHT_NOBITS:
+			if (!(shdr[i].sh_flags & SHF_ALLOC))
+				break;
 			ef->progtab[pb].addr = (void *)shdr[i].sh_addr;
 			if (shdr[i].sh_type == SHT_PROGBITS)
 				ef->progtab[pb].name = "<<PROGBITS>>";
@@ -499,6 +503,8 @@ link_elf_load_file(linker_class_t cls, c
 		switch (shdr[i].sh_type) {
 		case SHT_PROGBITS:
 		case SHT_NOBITS:
+			if (!(shdr[i].sh_flags & SHF_ALLOC))
+				break;
 			ef->nprogtab++;
 			break;
 		case SHT_SYMTAB:
@@ -621,6 +627,8 @@ link_elf_load_file(linker_class_t cls, c
 		switch (shdr[i].sh_type) {
 		case SHT_PROGBITS:
 		case SHT_NOBITS:
+			if (!(shdr[i].sh_flags & SHF_ALLOC))
+				break;
 			alignmask = shdr[i].sh_addralign - 1;
 			mapsize += alignmask;
 			mapsize &= ~alignmask;
@@ -674,6 +682,8 @@ link_elf_load_file(linker_class_t cls, c
 		switch (shdr[i].sh_type) {
 		case SHT_PROGBITS:
 		case SHT_NOBITS:
+			if (!(shdr[i].sh_flags & SHF_ALLOC))
+				break;
 			alignmask = shdr[i].sh_addralign - 1;
 			mapbase += alignmask;
 			mapbase &= ~alignmask;
%%%


Cheers,
-- 
Ruslan Ermilov
ru@FreeBSD.org
FreeBSD committer

[-- Attachment #2 --]
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (FreeBSD)

iD8DBQFDYU71qRfpzJluFF4RAuPbAKCJPa7wUjR5G8u2dx9e7Tl+wyMx6QCfW1P7
f+kyBY+TVRZK7UKDrRQS/PA=
=VG7j
-----END PGP SIGNATURE-----

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20051027220437.GA54382>