From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id F25903857BA0 for ; Sat, 13 Jan 2024 11:35:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org F25903857BA0 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org F25903857BA0 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1705145750; cv=none; b=DqcCSOt84Mqft8p8E6swxC0suMZwjG209ASPII8FXqukyDsMjiii9QRFHPOF2G8/+poRjsi5DHrK8bCmBitGi79vpreY6rjXV1lZY/jx2WxsHL4TjEMeCWgwOC3HfjbQIOueK2dJtcDBZqR7qRtqSnj/DPH0vB34O624V+U5qRY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1705145750; c=relaxed/simple; bh=w/pW5S5xxQmkYq2tnEUh5cf/U+OoO4aNLnuvOR5qBNY=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=AqKimm2M7+gqvmKQSa5DXGst6PBCTqXtYIlf6XaGna8VLwRfsRp5klYKngeqV7bSBrPoC3MTbVMDSDqVjhBPg0Zc3vP+t+111ZufAoOqZz1xqFDicMLW98p6QK9apUy7Ys+5jFBHa4NzCBEnCVcrktURWrsPRHNPWFFO22qL42Q= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1705145747; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=1kSQV6EDG4Ph1kAWnBx+HwAavF/aEENw7CIz4l2M4WY=; b=adcNjPFDnSeQ3vI2FIan8xZcgjOlaXsAE+qdfa4SAutmDBa3bb72TKpYwxlJZ9eD7xREgj FMtXlccrYV/XuRpweWROqnyJRIMU/J54d0gEaxLHVqOx5rFVqIwDbJ5pDIwXcKnoGQPact OrKb+8nuS1ZfnsqYJEMjFMCUuJLiVgw= Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-19-NfipaZ5TPdiD261_uxxnCg-1; Sat, 13 Jan 2024 06:35:45 -0500 X-MC-Unique: NfipaZ5TPdiD261_uxxnCg-1 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-40d62d3ae0cso62811525e9.2 for ; Sat, 13 Jan 2024 03:35:45 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705145743; x=1705750543; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=1kSQV6EDG4Ph1kAWnBx+HwAavF/aEENw7CIz4l2M4WY=; b=lwhnGnS9hSS1sVjWQJl2+EKfuiedTEFf1meAiMzQoykWz4VD/hCQ7I4KA6feCO23bw xS0DcPmYJFZrOwQA/mrWQPJ2jWFpRHFqwyuwExQPVFsux+WlFUm61DrXX3us4pJOH3j9 37HpmiTGGHU5r1QtdjY6gMckXqAZVU3nrmmqUsNU0tAbs5WuUCT49uW17HxOLcFWOnuQ MzOhYZgx9piRwS72CmpK+9/1LeeyGegbAunEHJb77e14XwIjZRACeDVdsGtAE31hR68z 44BqG0yKYgtrtPdXkL7JwTbXlBtwChjTU16mMD+Ukrr7Xb3gNeNTp6UesANNUBiDUap6 q2tQ== X-Gm-Message-State: AOJu0YxxDqh5kYpxpisu/RZd8x0UuEbg3aAnikYx5AD1zdmtkIMv9S93 p3BcWvSDJ7McI8RYD3qNgB29ezRRZO/idAeDucqO7WSmIcgggPOauiXR7OArFrhkQB5tD0hMa/O 9zuFbVfVL13ynTbRWbUOx/xcy8sUQ7vAQBg== X-Received: by 2002:a05:600c:4da2:b0:40e:640c:3b67 with SMTP id v34-20020a05600c4da200b0040e640c3b67mr1492487wmp.138.1705145743246; Sat, 13 Jan 2024 03:35:43 -0800 (PST) X-Google-Smtp-Source: AGHT+IE2IxGtATJWaRlnbVtwufNel88tRCOFrBqEPvlxyuRtJQyB+sf4gHk8yvpsl1OPUtEXMhjusw== X-Received: by 2002:a05:600c:4da2:b0:40e:640c:3b67 with SMTP id v34-20020a05600c4da200b0040e640c3b67mr1492474wmp.138.1705145742723; Sat, 13 Jan 2024 03:35:42 -0800 (PST) Received: from localhost (92.40.184.39.threembb.co.uk. [92.40.184.39]) by smtp.gmail.com with ESMTPSA id m26-20020a7bca5a000000b0040e54381a85sm8786548wml.26.2024.01.13.03.35.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jan 2024 03:35:42 -0800 (PST) From: Andrew Burgess To: Tom Tromey , gdb-patches@sourceware.org Cc: gcc-patches@gcc.gnu.org, Tom Tromey Subject: Re: [PATCH] Pass GUILE down to subdirectories In-Reply-To: <20231230212103.973170-1-tom@tromey.com> References: <20231230212103.973170-1-tom@tromey.com> Date: Sat, 13 Jan 2024 11:35:41 +0000 Message-ID: <87edel79f6.fsf@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,RCVD_IN_SBL_CSS,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Tom Tromey writes: > When I enable cgen rebuilding in the binutils-gdb tree, the default is > to run cgen using 'guile'. However, on my host, guile is guile 2.2, > which doesn't work for me -- I have to use guile3.0. > > This patch arranges to pass "GUILE" down to subdirectories, so I can > use 'make GUILE=guile3.0'. > > ChangeLog > 2023-12-30 Tom Tromey > > * Makefile.in: Rebuild. > * Makefile.tpl (BASE_EXPORTS): Add GUILE. > (GUILE): New variable. > * Makefile.def (flags_to_pass): Add GUILE. > --- > ChangeLog | 7 +++++++ > Makefile.def | 1 + > Makefile.in | 8 ++++++-- > Makefile.tpl | 7 +++++-- > 4 files changed, 19 insertions(+), 4 deletions(-) > > diff --git a/Makefile.def b/Makefile.def > index 662e50fdc18..792919e561c 100644 > --- a/Makefile.def > +++ b/Makefile.def > @@ -310,6 +310,7 @@ flags_to_pass = { flag= GNATBIND ; }; > flags_to_pass = { flag= GNATMAKE ; }; > flags_to_pass = { flag= GDC ; }; > flags_to_pass = { flag= GDCFLAGS ; }; > +flags_to_pass = { flag= GUILE ; }; > > // Target tools > flags_to_pass = { flag= AR_FOR_TARGET ; }; > diff --git a/Makefile.in b/Makefile.in > index 48320bb549e..9a58d5a4f20 100644 > --- a/Makefile.in > +++ b/Makefile.in > @@ -3,7 +3,7 @@ > # > # Makefile for directory with subdirs to build. > # Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, > -# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 > +# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2023 > # Free Software Foundation > # > # This file is free software; you can redistribute it and/or modify > @@ -143,7 +143,8 @@ BASE_EXPORTS = \ > M4="$(M4)"; export M4; \ > SED="$(SED)"; export SED; \ > AWK="$(AWK)"; export AWK; \ > - MAKEINFO="$(MAKEINFO)"; export MAKEINFO; > + MAKEINFO="$(MAKEINFO)"; export MAKEINFO; \ > + GUILE="$(GUILE)"; export GUILE; > > # This is the list of variables to export in the environment when > # configuring subdirectories for the build system. > @@ -450,6 +451,8 @@ GM2FLAGS = $(CFLAGS) > > PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ > > +GUILE = guile Hi Tom, This change is causing some problems for me. One of my build machines has 2 versions of guile installed. One is guile 2.0.14 and the other is guile 2.2.21. When GDB configures itself the configure script figures out that it should use 2.2.21 to compile the guile libraries that GDB uses. However, when we actually build the guile libraries we do use guild2.2, but due to this 'GUILE = guile' line, guild2.2 uses guile 2.0.14 in order to perform the compile (I guess, I don't know the details of how guile compilation works). Unfortunately guile 2.0.14 compiles in a way which is not compatible with how GDB then tries to load the guile library. Maybe better to show you what's going on: $ pwd /tmp/binutils-gdb/build/gdb/data-directory/guile $ GUILE=guile /usr/bin/guild2.2 compile -Warity-mismatch -Wformat -Wunused-toplevel -L . -o ./gdb.go ./gdb.scm wrote `./gdb.go' $ file gdb.go gdb.go: Guile Object, little endian, 64bit, bytecode v2.0 $ GUILE=guile2.2 /usr/bin/guild2.2 compile -Warity-mismatch -Wformat -Wunused-toplevel -L . -o ./gdb.go ./gdb.scm wrote `./gdb.go' $ file gdb.go gdb.go: ELF 64-bit LSB shared object, no machine, version 1 (embedded), dynamically linked, with debug_info, not stripped The first compile uses GUILE=guile, so I use guile 2.0.14, which results in a non-ELF being generated. When I start GDB with this non-ELF in place, I see this: $ ./gdb/gdb --data-directory ./gdb/data-directory/ Exception caught while booting Guile. Error in function "load-thunk-from-memory": not an ELF file ./gdb/gdb: warning: Could not complete Guile gdb module initialization from: /tmp/binutils-gdb/build/gdb/data-directory/guile/gdb/boot.scm. Limited Guile support is available. Suggest passing --data-directory=/path/to/gdb/data-directory. GDB Version: 15.1 (gdb) The second compile, with GUILE=guile2.2 results in an ELF being generated, and with this in place GDB starts just fine. Now, clearly the obvious answer is: don't have such an old, out of date version of guile installed. But I think there's a bigger issue here. As guild version X will by default pick up the corresponding version of guile, shouldn't that be the default behaviour? My proposal would be that we change the line 'GUILE = guile' to instead be just 'GUILE ='. With this in place I can still override the choice of guile executable with: make GUILE=guileXXXX but, if I don't do this then instead of forcing 'guile' as the default, we allow the guild compiler to pick its own default, just as we did before. Thoughts? Thanks, Andrew --- commit 5230132e2a49ee6603d6713796fb72c418b83e30 Author: Andrew Burgess Date: Sat Jan 13 11:15:13 2024 +0000 don't force 'guile' as the default guile executable After commit: commit d006ec41c448d9f4a84df50391e87cbf0aa8c152 Date: Thu Dec 28 14:08:39 2023 -0700 Pass GUILE down to subdirectories I noticed a problem with GDB where 'guile' was now being used to compile GDB's guile libraries rather than 'guile2.2'. The previous choice of 'guile2.2' was made by the 'guild2.2' compiler as the GUILE environment variable was not set. After the above commit the environment variable GUILE was being set to 'guile' by default, which forced 'guild2.2' to use the 'guile' executable, which on my system happened to be guile 2.0.14, which creates libraries that are not compatible with how GDB expects to load the guile libraries. Aside: guile 2.0.14 creates files containing guile byte-code: $ file gdb.go gdb.go: Guile Object, little endian, 64bit, bytecode v2.0 while guile 2.2.6 creates ELF files: $ file gdb.go gdb.go: ELF 64-bit LSB shared object, no machine, version 1 (embedded), dynamically linked, with debug_info, not stripped Part of the problem here is that GDB looks for a working version of guile by checking different guile versions in this order: guile-3.0 guile-2.2 guile-2.0 On my system GDB finds a working guile-2.2, so links GDB against the guile-2.2 library, and uses guild2.2, and the only outlier is the default being forced on GDB by the top level Makefile. I suggest that we should not set the default to 'guile' at the top level. Instead we should leave the default empty. With this done 'guild' will select its appropriate default version of guile. We are still free to do 'make GUILE=guile3.0' if we want, in which case the empty default will be overridden. * Makefile.in: (GUILE): Clear default value. * Makefile.tpl: (GUILE): Likewise. diff --git a/Makefile.in b/Makefile.in index a1f64a2ab5a..c135c63dc9b 100644 --- a/Makefile.in +++ b/Makefile.in @@ -452,7 +452,7 @@ GM2FLAGS = $(CFLAGS) PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ -GUILE = guile +GUILE = # Pass additional PGO and LTO compiler options to the PGO build. BUILD_CFLAGS = $(PGO_BUILD_CFLAGS) $(PGO_BUILD_LTO_CFLAGS) diff --git a/Makefile.tpl b/Makefile.tpl index adbcbdd1d57..db35ee520f4 100644 --- a/Makefile.tpl +++ b/Makefile.tpl @@ -455,7 +455,7 @@ GM2FLAGS = $(CFLAGS) PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ -GUILE = guile +GUILE = # Pass additional PGO and LTO compiler options to the PGO build. BUILD_CFLAGS = $(PGO_BUILD_CFLAGS) $(PGO_BUILD_LTO_CFLAGS)