diff mbox

[v2,3/4] gdb: enable simulator support for host build

Message ID 20160513121651.GA30939@waldemar-brodkorb.de
State Changes Requested
Headers show

Commit Message

Waldemar Brodkorb May 13, 2016, 12:16 p.m. UTC
Add an option to enable simulator support, so
it can be used to test some no-MMU systems.

Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
---
v1 -> v2:
  - no changes
---
 package/gdb/Config.in.host | 5 +++++
 package/gdb/gdb.mk         | 9 +++++++--
 2 files changed, 12 insertions(+), 2 deletions(-)

Comments

Thomas Petazzoni May 28, 2016, 1:49 p.m. UTC | #1
Hello,

On Fri, 13 May 2016 14:16:51 +0200, Waldemar Brodkorb wrote:
> Add an option to enable simulator support, so
> it can be used to test some no-MMU systems.
> 
> Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>

It doesn't seem to build on Blackfin for me. I'm not using the internal
toolchain support that you've added in PATCH 2/4, I'm using the
defconfig from your PATCH 4/4 with the Blackfin external toolchain. But
host-gdb is a host package, so the cross-compilation toolchain used
doesn't matter. And what I get is:

./../common/sim-model.c: In function ‘model_set’:
./../common/sim-model.c:108:3: warning: implicit declaration of function ‘CPU_MACH’ [-Wimplicit-function-declaration]
   CPU_MACH (cpu) = MODEL_MACH (model);
   ^
./../common/sim-model.c:108:18: error: lvalue required as left operand of assignment
   CPU_MACH (cpu) = MODEL_MACH (model);
                  ^
./../common/sim-model.c:109:3: warning: implicit declaration of function ‘CPU_MODEL’ [-Wimplicit-function-declaration]
   CPU_MODEL (cpu) = model;
   ^
./../common/sim-model.c:109:19: error: lvalue required as left operand of assignment
   CPU_MODEL (cpu) = model;
                   ^
In file included from /usr/include/string.h:630:0,
                 from ../common/sim-arange.c:32,
                 from ../common/sim-arange.h:82,
                 from ../common/sim-basics.h:141,
                 from ./sim-main.h:24,
                 from ./../common/sim-model.c:20:
./../common/sim-model.c: In function ‘sim_model_init’:
./../common/sim-model.h:80:30: error: invalid type argument of ‘->’ (have ‘int’)
 #define MACH_BFD_NAME(m) ((m)->bfd_name)
                              ^
./../common/sim-model.c:215:5: note: in expansion of macro ‘MACH_BFD_NAME’
     MACH_BFD_NAME (CPU_MACH (cpu))) != 0)
     ^
./../common/sim-model.h:80:30: error: invalid type argument of ‘->’ (have ‘int’)
 #define MACH_BFD_NAME(m) ((m)->bfd_name)
                              ^
./../common/sim-model.c:215:5: note: in expansion of macro ‘MACH_BFD_NAME’
     MACH_BFD_NAME (CPU_MACH (cpu))) != 0)
     ^
./../common/sim-model.h:80:30: error: invalid type argument of ‘->’ (have ‘int’)
 #define MACH_BFD_NAME(m) ((m)->bfd_name)
                              ^
./../common/sim-model.c:215:5: note: in expansion of macro ‘MACH_BFD_NAME’
     MACH_BFD_NAME (CPU_MACH (cpu))) != 0)
     ^
./../common/sim-model.h:80:30: error: invalid type argument of ‘->’ (have ‘int’)
 #define MACH_BFD_NAME(m) ((m)->bfd_name)
                              ^
./../common/sim-model.c:215:5: note: in expansion of macro ‘MACH_BFD_NAME’
     MACH_BFD_NAME (CPU_MACH (cpu))) != 0)
     ^
./../common/sim-model.h:80:30: error: invalid type argument of ‘->’ (have ‘int’)
 #define MACH_BFD_NAME(m) ((m)->bfd_name)
                              ^
./../common/sim-model.c:215:5: note: in expansion of macro ‘MACH_BFD_NAME’
     MACH_BFD_NAME (CPU_MACH (cpu))) != 0)
     ^
./../common/sim-model.h:80:30: error: invalid type argument of ‘->’ (have ‘int’)
 #define MACH_BFD_NAME(m) ((m)->bfd_name)
                              ^
./../common/sim-model.c:215:5: note: in expansion of macro ‘MACH_BFD_NAME’
     MACH_BFD_NAME (CPU_MACH (cpu))) != 0)
     ^
./../common/sim-model.h:80:30: error: invalid type argument of ‘->’ (have ‘int’)
 #define MACH_BFD_NAME(m) ((m)->bfd_name)
                              ^
./../common/sim-model.c:215:5: note: in expansion of macro ‘MACH_BFD_NAME’
     MACH_BFD_NAME (CPU_MACH (cpu))) != 0)
     ^
./../common/sim-model.h:80:30: error: invalid type argument of ‘->’ (have ‘int’)
 #define MACH_BFD_NAME(m) ((m)->bfd_name)
                              ^
./../common/sim-model.c:215:5: note: in expansion of macro ‘MACH_BFD_NAME’
     MACH_BFD_NAME (CPU_MACH (cpu))) != 0)
     ^
./../common/sim-model.h:80:30: error: invalid type argument of ‘->’ (have ‘int’)
 #define MACH_BFD_NAME(m) ((m)->bfd_name)
                              ^
./../common/sim-model.c:215:5: note: in expansion of macro ‘MACH_BFD_NAME’
     MACH_BFD_NAME (CPU_MACH (cpu))) != 0)
     ^
./../common/sim-model.h:80:30: error: invalid type argument of ‘->’ (have ‘int’)
 #define MACH_BFD_NAME(m) ((m)->bfd_name)
                              ^
./../common/sim-model.c:215:5: note: in expansion of macro ‘MACH_BFD_NAME’
     MACH_BFD_NAME (CPU_MACH (cpu))) != 0)
     ^
./../common/sim-model.h:80:30: error: invalid type argument of ‘->’ (have ‘int’)
 #define MACH_BFD_NAME(m) ((m)->bfd_name)
                              ^
./../common/sim-model.c:215:5: note: in expansion of macro ‘MACH_BFD_NAME’
     MACH_BFD_NAME (CPU_MACH (cpu))) != 0)
     ^
./../common/sim-model.h:80:30: error: invalid type argument of ‘->’ (have ‘int’)
 #define MACH_BFD_NAME(m) ((m)->bfd_name)
                              ^
./../common/sim-model.c:215:5: note: in expansion of macro ‘MACH_BFD_NAME’
     MACH_BFD_NAME (CPU_MACH (cpu))) != 0)
     ^
./../common/sim-model.h:80:30: error: invalid type argument of ‘->’ (have ‘int’)
 #define MACH_BFD_NAME(m) ((m)->bfd_name)
                              ^
./../common/sim-model.c:215:5: note: in expansion of macro ‘MACH_BFD_NAME’
     MACH_BFD_NAME (CPU_MACH (cpu))) != 0)
     ^
./../common/sim-model.h:80:30: error: invalid type argument of ‘->’ (have ‘int’)
 #define MACH_BFD_NAME(m) ((m)->bfd_name)
                              ^
./../common/sim-model.c:215:5: note: in expansion of macro ‘MACH_BFD_NAME’
     MACH_BFD_NAME (CPU_MACH (cpu))) != 0)
     ^
./../common/sim-model.h:80:30: error: invalid type argument of ‘->’ (have ‘int’)
 #define MACH_BFD_NAME(m) ((m)->bfd_name)
                              ^
./../common/sim-model.c:215:5: note: in expansion of macro ‘MACH_BFD_NAME’
     MACH_BFD_NAME (CPU_MACH (cpu))) != 0)
     ^
./../common/sim-model.h:80:30: error: invalid type argument of ‘->’ (have ‘int’)
 #define MACH_BFD_NAME(m) ((m)->bfd_name)
                              ^
./../common/sim-model.c:215:5: note: in expansion of macro ‘MACH_BFD_NAME’
     MACH_BFD_NAME (CPU_MACH (cpu))) != 0)
     ^
./../common/sim-model.h:80:30: error: invalid type argument of ‘->’ (have ‘int’)
 #define MACH_BFD_NAME(m) ((m)->bfd_name)
                              ^
./../common/sim-model.c:215:5: note: in expansion of macro ‘MACH_BFD_NAME’
     MACH_BFD_NAME (CPU_MACH (cpu))) != 0)
     ^
./../common/sim-model.h:80:30: error: invalid type argument of ‘->’ (have ‘int’)
 #define MACH_BFD_NAME(m) ((m)->bfd_name)
                              ^
./../common/sim-model.c:215:5: note: in expansion of macro ‘MACH_BFD_NAME’
     MACH_BFD_NAME (CPU_MACH (cpu))) != 0)
     ^
./../common/sim-model.h:80:30: error: invalid type argument of ‘->’ (have ‘int’)
 #define MACH_BFD_NAME(m) ((m)->bfd_name)
                              ^
./../common/sim-model.c:215:5: note: in expansion of macro ‘MACH_BFD_NAME’
     MACH_BFD_NAME (CPU_MACH (cpu))) != 0)
     ^
./../common/sim-model.h:80:30: error: invalid type argument of ‘->’ (have ‘int’)
 #define MACH_BFD_NAME(m) ((m)->bfd_name)
                              ^
./../common/sim-model.c:215:5: note: in expansion of macro ‘MACH_BFD_NAME’
     MACH_BFD_NAME (CPU_MACH (cpu))) != 0)
     ^
In file included from ./../common/sim-model.c:21:0:
./../common/sim-model.h:112:27: error: invalid type argument of ‘->’ (have ‘int’)
 #define MODEL_NAME(m) ((m)->name)
                           ^
./../common/sim-model.c:218:6: note: in expansion of macro ‘MODEL_NAME’
      MODEL_NAME (CPU_MODEL (cpu)),
      ^
./../common/sim-model.h:80:30: error: invalid type argument of ‘->’ (have ‘int’)
 #define MACH_BFD_NAME(m) ((m)->bfd_name)
                              ^
./../common/sim-model.c:239:48: note: in expansion of macro ‘MACH_BFD_NAME’
       STATE_ARCHITECTURE (sd) = bfd_scan_arch (MACH_BFD_NAME (CPU_MACH (cpu)));
                                                ^
Makefile:542: recipe for target 'sim-model.o' failed
make[5]: *** [sim-model.o] Error 1
make[5]: *** Waiting for unfinished jobs....
Makefile:129: recipe for target 'all' failed
make[4]: *** [all] Error 1
Makefile:8201: recipe for target 'all-sim' failed
make[3]: *** [all-sim] Error 2
Makefile:845: recipe for target 'all' failed
make[2]: *** [all] Error 2
package/pkg-generic.mk:195: recipe for target '/home/thomas/projets/buildroot/output/build/host-gdb-7.10.1/.stamp_built' failed
make[1]: *** [/home/thomas/projets/buildroot/output/build/host-gdb-7.10.1/.stamp_built] Error 2
Makefile:36: recipe for target '_all' failed
make: *** [_all] Error 2

Could you have a look?

Thanks!

Thomas
Waldemar Brodkorb May 28, 2016, 3:48 p.m. UTC | #2
Hi Thomas,
Thomas Petazzoni wrote,

> Hello,
> 
> On Fri, 13 May 2016 14:16:51 +0200, Waldemar Brodkorb wrote:
> > Add an option to enable simulator support, so
> > it can be used to test some no-MMU systems.
> > 
> > Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
> 
> It doesn't seem to build on Blackfin for me. I'm not using the internal
> toolchain support that you've added in PATCH 2/4, I'm using the
> defconfig from your PATCH 4/4 with the Blackfin external toolchain. But
> host-gdb is a host package, so the cross-compilation toolchain used
> doesn't matter. And what I get is:
> 
> ./../common/sim-model.c: In function ‘model_set’:
> ./../common/sim-model.c:108:3: warning: implicit declaration of function ‘CPU_MACH’ [-Wimplicit-function-declaration]
>    CPU_MACH (cpu) = MODEL_MACH (model);
>       MODEL_NAME (CPU_MODEL (cpu)),
> make[1]: *** [/home/thomas/projets/buildroot/output/build/host-gdb-7.10.1/.stamp_built] Error 2
> Makefile:36: recipe for target '_all' failed
> make: *** [_all] Error 2
> 
> Could you have a look?

I totally forgot about it. See here:
https://www.sourceware.org/ml/gdb/2015-12/msg00029.html

For newer GDB (7.10.1/7.11) we need to use out-of-tree builds. I
only tested with 7.9, I think it was the default by the time I
tested it or I changed it.

How would we change package/gdb to use out-of-tree building?

best regards
 Waldemar
Thomas Petazzoni May 28, 2016, 4:35 p.m. UTC | #3
Hello,

On Sat, 28 May 2016 17:48:11 +0200, Waldemar Brodkorb wrote:

> I totally forgot about it. See here:
> https://www.sourceware.org/ml/gdb/2015-12/msg00029.html
> 
> For newer GDB (7.10.1/7.11) we need to use out-of-tree builds. I
> only tested with 7.9, I think it was the default by the time I
> tested it or I changed it.
> 
> How would we change package/gdb to use out-of-tree building?

The fact that it doesn't work with in-tree build is really a bug, so
I'm not sure we should switch to out of tree build just for this
reason. We should probably instead backport the patches needed to fix
the in-tree build, or use the workaround proposed by Mike, at least for
the affected gdb versions. I've tested with gdb 7.10 only, not sure if
7.11 is affected or not.

Best regards,

Thomas
Waldemar Brodkorb May 28, 2016, 4:40 p.m. UTC | #4
Hi,
Thomas Petazzoni wrote,

> Hello,
> 
> On Sat, 28 May 2016 17:48:11 +0200, Waldemar Brodkorb wrote:
> 
> > I totally forgot about it. See here:
> > https://www.sourceware.org/ml/gdb/2015-12/msg00029.html
> > 
> > For newer GDB (7.10.1/7.11) we need to use out-of-tree builds. I
> > only tested with 7.9, I think it was the default by the time I
> > tested it or I changed it.
> > 
> > How would we change package/gdb to use out-of-tree building?
> 
> The fact that it doesn't work with in-tree build is really a bug, so
> I'm not sure we should switch to out of tree build just for this
> reason. We should probably instead backport the patches needed to fix
> the in-tree build, or use the workaround proposed by Mike, at least for
> the affected gdb versions. I've tested with gdb 7.10 only, not sure if
> 7.11 is affected or not.

7.11 is affected.
How do you understand his workaround? 
I never used it, I changed OpenADK to use out-of-tree builds for
GDB.

I think there are a lot of developers out there would saying
out-of-tree builds are good and in-tree might fail and we don't
care. (.. OpenBSD'ler.. )

best regards
 Waldemar
Thomas Petazzoni May 28, 2016, 5:24 p.m. UTC | #5
Hello,

On Sat, 28 May 2016 18:40:33 +0200, Waldemar Brodkorb wrote:

> 7.11 is affected.
> How do you understand his workaround? 

Apparently, Mike said that removing one file was enough. Maybe we could
try this?

> I think there are a lot of developers out there would saying
> out-of-tree builds are good and in-tree might fail and we don't
> care. (.. OpenBSD'ler.. )

out-of-tree builds are good, but it's not a reason to use them as a
workaround for a bug causing in-tree builds to fail.

Thomas
diff mbox

Patch

diff --git a/package/gdb/Config.in.host b/package/gdb/Config.in.host
index b213901..1748ab0 100644
--- a/package/gdb/Config.in.host
+++ b/package/gdb/Config.in.host
@@ -23,6 +23,11 @@  config BR2_PACKAGE_HOST_GDB_PYTHON
 	help
 	  This option enables the Python support in the cross gdb.
 
+config BR2_PACKAGE_HOST_GDB_SIM
+	bool "Simulator support"
+	help
+	  This option enables the simulator support in the cross gdb.
+
 choice
 	prompt "GDB debugger Version"
 	depends on !BR2_arc
diff --git a/package/gdb/gdb.mk b/package/gdb/gdb.mk
index 0a7af1e..3c64f1d 100644
--- a/package/gdb/gdb.mk
+++ b/package/gdb/gdb.mk
@@ -163,8 +163,7 @@  HOST_GDB_CONF_OPTS = \
 	--enable-threads \
 	--disable-werror \
 	--without-included-gettext \
-	$(GDB_DISABLE_BINUTILS_CONF_OPTS) \
-	--disable-sim
+	$(GDB_DISABLE_BINUTILS_CONF_OPTS)
 
 ifeq ($(BR2_PACKAGE_HOST_GDB_TUI),y)
 HOST_GDB_CONF_OPTS += --enable-tui
@@ -179,6 +178,12 @@  else
 HOST_GDB_CONF_OPTS += --without-python
 endif
 
+ifeq ($(BR2_PACKAGE_HOST_GDB_SIM),y)
+HOST_GDB_CONF_OPTS += --enable-sim
+else
+HOST_GDB_CONF_OPTS += --disable-sim
+endif
+
 # legacy $arch-linux-gdb symlink
 define HOST_GDB_ADD_SYMLINK
 	cd $(HOST_DIR)/usr/bin && \