From owner-freebsd-bugs@FreeBSD.ORG Sun Jan 9 00:30:05 2011 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B22D6106566B for ; Sun, 9 Jan 2011 00:30:05 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 8C5FD8FC1F for ; Sun, 9 Jan 2011 00:30:05 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.4/8.14.4) with ESMTP id p090U5wM000444 for ; Sun, 9 Jan 2011 00:30:05 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.4/8.14.4/Submit) id p090U52T000439; Sun, 9 Jan 2011 00:30:05 GMT (envelope-from gnats) Resent-Date: Sun, 9 Jan 2011 00:30:05 GMT Resent-Message-Id: <201101090030.p090U52T000439@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Gleb Kurtsou Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BE776106564A for ; Sun, 9 Jan 2011 00:23:36 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from red.freebsd.org (unknown [IPv6:2001:4f8:fff6::22]) by mx1.freebsd.org (Postfix) with ESMTP id AE7408FC0C for ; Sun, 9 Jan 2011 00:23:36 +0000 (UTC) Received: from red.freebsd.org (localhost [127.0.0.1]) by red.freebsd.org (8.14.4/8.14.4) with ESMTP id p090Na6l096166 for ; Sun, 9 Jan 2011 00:23:36 GMT (envelope-from nobody@red.freebsd.org) Received: (from nobody@localhost) by red.freebsd.org (8.14.4/8.14.4/Submit) id p090NaTe096165; Sun, 9 Jan 2011 00:23:36 GMT (envelope-from nobody) Message-Id: <201101090023.p090NaTe096165@red.freebsd.org> Date: Sun, 9 Jan 2011 00:23:36 GMT From: Gleb Kurtsou To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: bin/153801: [patch] btxld produces incorrect ELF binaries X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Jan 2011 00:30:05 -0000 >Number: 153801 >Category: bin >Synopsis: [patch] btxld produces incorrect ELF binaries >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sun Jan 09 00:30:05 UTC 2011 >Closed-Date: >Last-Modified: >Originator: Gleb Kurtsou >Release: >Organization: >Environment: FreeBSD 9.0-CURRENT #11 r216922+3950ba5 >Description: ELF binaries linked by btxld have invalid .data section virtual address. In a.out binaries .data section is aligned at page size, but it's not the case with ELF. btxldr expects kernel to be on next page (.data section): see sys/boot/i386/btx/btxldr.S: .set MEM_DATA,start+0x1000 # Data segment With the patch applied resulted binaries can be booted by grub (as well as a.out binaries). I didn't check if booting ELF loader is supported by FreeBSD boot2 code. >How-To-Repeat: >Fix: Patch attached with submission follows: diff --git a/usr.sbin/btxld/btxld.c b/usr.sbin/btxld/btxld.c index 1102b5c..7984c4c 100644 --- a/usr.sbin/btxld/btxld.c +++ b/usr.sbin/btxld/btxld.c @@ -426,7 +426,7 @@ puthdr(int fd, struct hdr *hdr) le32toh(eh.p[0].p_filesz)); eh.p[1].p_vaddr = eh.p[1].p_paddr = htole32(align(le32toh(eh.p[0].p_paddr) + le32toh(eh.p[0].p_memsz), - 4)); + 4096)); eh.p[1].p_filesz = eh.p[1].p_memsz = htole32(hdr->data); eh.sh[2].sh_addr = eh.p[0].p_vaddr; eh.sh[2].sh_offset = eh.p[0].p_offset; >Release-Note: >Audit-Trail: >Unformatted: