From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1EPktw-0008B1-59 for mharc-grub-devel@gnu.org; Wed, 12 Oct 2005 14:00:28 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1EPktt-00089U-KY for grub-devel@gnu.org; Wed, 12 Oct 2005 14:00:25 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1EPktq-00088A-Ep for grub-devel@gnu.org; Wed, 12 Oct 2005 14:00:25 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1EPktq-000887-8s for grub-devel@gnu.org; Wed, 12 Oct 2005 14:00:22 -0400 Received: from [217.12.11.36] (helo=smtp005.mail.ukl.yahoo.com) by monty-python.gnu.org with smtp (Exim 4.34) id 1EPkto-0000yq-On for grub-devel@gnu.org; Wed, 12 Oct 2005 14:00:22 -0400 Received: (qmail 31358 invoked from network); 12 Oct 2005 17:53:19 -0000 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.fr; h=Received:Message-ID:Date:From:User-Agent:X-Accept-Language:MIME-Version:To:Subject:X-Enigmail-Version:Content-Type; b=PY8MhJY1GYnwwUDzHBe7eAZNrIpmIcc2d1OEkoJ7nXvWEqAoin5n1quD55fml5ncJIy6dkvv8a3akDVVChsVX+DcV56+QVY2HAbD+Au3am7SNMN+XJwJ2DU8xY3v3kpnQx9sxP1knuYlQa8hD4e4785bYDoV1S+OljZQ4Q6CfA8= ; Received: from unknown (HELO ?192.168.0.2?) (subdino2004@82.127.152.187 with plain) by smtp005.mail.ukl.yahoo.com with SMTP; 12 Oct 2005 17:53:18 -0000 Message-ID: <434D4D91.10207@yahoo.fr> Date: Wed, 12 Oct 2005 19:53:21 +0200 From: Vincent Pelletier User-Agent: Debian Thunderbird 1.0.7 (X11/20051010) X-Accept-Language: en-us, en MIME-Version: 1.0 To: The development of GRUB 2 X-Enigmail-Version: 0.92.0.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enigDE47E0D5F75BE1D71DC9CF5E" Subject: [PATCH] DL support on usparc & cls disabling when debugging X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Oct 2005 18:00:25 -0000 This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enigDE47E0D5F75BE1D71DC9CF5E Content-Type: multipart/mixed; boundary="------------000006070009080305080409" This is a multi-part message in MIME format. --------------000006070009080305080409 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Hi. Finally, I send this dl.c patch. I'll send a separate patch for the .mk & .rmk files, because I have a lot of dust in those files. I also joined a patch to disable cls when setting a debug level, and some changes to parse such arguments before any initialisation, so error messages won't get cleaned by a cls in early boot. 2005-10-12 Vincent Pelletier subdino2004@yahoo.fr * kern/sparc64/dl.c (grub_arch_dl_check_header): Use sparcv9 ELF header values. grub_arch_dl_relocate_symbols) : Implement 64 bits relocations. * kern/term.c (grub_cls): Return without clearing screen if debug is set. * kern/sparc64/ieee1275/init.c (grub_machine_init): Read environment variables before anything else. --------------000006070009080305080409 Content-Type: text/plain; name="dl.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="dl.diff" Index: kern/sparc64/dl.c =================================================================== RCS file: /cvsroot/grub/grub2/kern/sparc64/dl.c,v retrieving revision 1.1 diff -u -p -r1.1 dl.c --- kern/sparc64/dl.c 21 Aug 2005 18:42:55 -0000 1.1 +++ kern/sparc64/dl.c 12 Oct 2005 17:34:00 -0000 @@ -30,9 +30,9 @@ grub_arch_dl_check_header (void *ehdr) Elf64_Ehdr *e = ehdr; /* Check the magic numbers. */ - if (e->e_ident[EI_CLASS] != ELFCLASS32 + if (e->e_ident[EI_CLASS] != ELFCLASS64 || e->e_ident[EI_DATA] != ELFDATA2MSB - || e->e_machine != EM_PPC) + || e->e_machine != EM_SPARCV9) return grub_error (GRUB_ERR_BAD_OS, "invalid arch specific ELF magic"); return GRUB_ERR_NONE; @@ -83,53 +83,53 @@ grub_arch_dl_relocate_symbols (grub_dl_t rel < max; rel++) { - Elf64_Xword *addr; + Elf64_Word *addr; Elf64_Sym *sym; - grub_uint64_t value; + Elf64_Addr value; if (seg->size < rel->r_offset) return grub_error (GRUB_ERR_BAD_MODULE, "reloc offset is out of the segment"); - addr = (Elf64_Xword *) ((char *) seg->addr + rel->r_offset); + addr = (Elf64_Word *) ((char *) seg->addr + rel->r_offset); sym = (Elf64_Sym *) ((char *) symtab - + entsize * ELF32_R_SYM (rel->r_info)); - - /* On the PPC the value does not have an explicit - addend, add it. */ + + entsize * ELF64_R_SYM (rel->r_info)); + value = sym->st_value + rel->r_addend; - switch (ELF32_R_TYPE (rel->r_info)) + switch (ELF64_R_TYPE (rel->r_info)) { - case R_PPC_ADDR16_LO: - *(Elf64_Half *) addr = value; - break; - - case R_PPC_REL24: - { - Elf64_Sxword delta = value - (Elf64_Xword) addr; - - if (delta << 6 >> 6 != delta) - return grub_error (GRUB_ERR_BAD_MODULE, "Relocation overflow"); - *addr = (*addr & 0xfc000003) | (delta & 0x3fffffc); - break; - } - - case R_PPC_ADDR16_HA: - *(Elf64_Half *) addr = (value + 0x8000) >> 16; - break; - - case R_PPC_ADDR32: - *addr = value; - break; - - case R_PPC_REL32: - *addr = value - (Elf64_Xword) addr; - break; - + case R_SPARC_32: /* 3 V-word32 */ + if (value & 0xFFFFFFFF00000000) + return grub_error (GRUB_ERR_BAD_MODULE, + "Address out of 32 bits range"); + *addr = value; + break; + case R_SPARC_WDISP30: /* 7 V-disp30 */ + if (((value - (Elf64_Addr) addr) & 0xFFFFFFFF00000000) && + ((value - (Elf64_Addr) addr) & 0xFFFFFFFF00000000 + != 0xFFFFFFFF00000000)) + return grub_error (GRUB_ERR_BAD_MODULE, + "Displacement out of 30 bits range"); + *addr = (*addr & 0xC0000000) | + (((grub_int32_t) ((value - (Elf64_Addr) addr) >> 2)) & + 0x3FFFFFFF); + break; + case R_SPARC_HI22: /* 9 V-imm22 */ + if (((grub_int32_t) value) & 0xFF00000000) + return grub_error (GRUB_ERR_BAD_MODULE, + "High address out of 22 bits range"); + *addr = (*addr & 0xFFC00000) | ((value >> 10) & 0x3FFFFF); + break; + case R_SPARC_LO10: /* 12 T-simm13 */ + *addr = (*addr & 0xFFFFFC00) | (value & 0x3FF); + break; + case R_SPARC_64: /* 32 V-xwords64 */ + *(Elf64_Xword *) addr = value; + break; default: return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, "This relocation (%d) is not implemented yet", - ELF32_R_TYPE (rel->r_info)); + ELF64_R_TYPE (rel->r_info)); } } } --------------000006070009080305080409 Content-Type: text/plain; name="debug_cls.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="debug_cls.diff" Index: kern/term.c =================================================================== RCS file: /cvsroot/grub/grub2/kern/term.c,v retrieving revision 1.9 diff -u -p -r1.9 term.c --- kern/term.c 20 Aug 2005 05:26:51 -0000 1.9 +++ kern/term.c 12 Oct 2005 17:34:00 -0000 @@ -21,6 +21,7 @@ #include #include #include +#include /* The list of terminals. */ static grub_term_t grub_term_list; @@ -203,6 +204,9 @@ grub_gotoxy (grub_uint8_t x, grub_uint8_ void grub_cls (void) { + if (grub_env_get ("debug")) + return; + if (grub_cur_term->flags & GRUB_TERM_DUMB) { grub_putchar ('\n'); Index: kern/sparc64/ieee1275/init.c =================================================================== RCS file: /cvsroot/grub/grub2/kern/sparc64/ieee1275/init.c,v retrieving revision 1.1 diff -u -p -r1.1 init.c --- kern/sparc64/ieee1275/init.c 21 Aug 2005 18:42:55 -0000 1.1 +++ kern/sparc64/ieee1275/init.c 12 Oct 2005 17:34:00 -0000 @@ -163,10 +163,6 @@ grub_machine_init (void) grub_heap_len); grub_mm_init_region ((void *) grub_heap_start, grub_heap_len); - grub_set_prefix (); - - grub_ofdisk_init (); - /* Process commandline. */ if (grub_ieee1275_get_property_length (grub_ieee1275_chosen, "bootargs", &length) == 0 && @@ -205,11 +201,18 @@ grub_machine_init (void) } } + grub_set_prefix (); + + grub_ofdisk_init (); + } void --------------000006070009080305080409-- --------------enigDE47E0D5F75BE1D71DC9CF5E Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2 (GNU/Linux) iD8DBQFDTU2WFEQoKRQyjtURAtyQAJ9rBI/bLQDKao0+Ryqzz7YvT0EJ+QCghIGm nkEtAjfbF0Cv/yXouCGdxoo= =P34c -----END PGP SIGNATURE----- --------------enigDE47E0D5F75BE1D71DC9CF5E-- ___________________________________________________________________________ Appel audio GRATUIT partout dans le monde avec le nouveau Yahoo! Messenger Téléchargez cette version sur http://fr.messenger.yahoo.com