5151 Commits

Author SHA1 Message Date
Mike Frysinger
20617191e4 sim: ppc: return register error when unhandled
We don't want to fallthru and use cooked_buf when we haven't initialized
it to anything.  Returning 0 indicates the register wasn't recognized.
2024-01-11 00:49:56 -05:00
Mike Frysinger
c3c79ac5c4 sim: m32r: enable warnings in traps.c
File should be clean now!
2024-01-10 22:37:04 -05:00
Mike Frysinger
08a7937f3a sim: m32r: fixup some of the int<->pointer casts
The m32r trap code was written for a 32-bit Linux host (and really, one
whose Linux ABI matched pretty exactly).  This has lead to conversions
between integers and pointers which breaks down hard on 64-bit hosts.

Clean up some of the functions where possible to avoid unnecessary
conversions, use uintptr_t to cast 32-bit target pointers to host
pointers in some places, and just stub out a few functions that can't
easily be salvaged currently when sizeof(void*) is not 32-bits.  This
is a bit ugly, but lets us enable warnings for the whole file.
2024-01-10 22:37:03 -05:00
Mike Frysinger
dbd4aebe5b sim: m32r: fix missing break statement
The ftime syscall should not fallthrough to the sync syscall.
Clearly the code was missing a break statement.
2024-01-10 22:31:56 -05:00
Mike Frysinger
b1f974faeb sim: m32r: migrate ftime() to clock_gettime()
The ftime() function has been deprecated since POSIX-1-2004, and
removed in POSIX.1-2008.  It's also been deprecated/removed in glibc
since 2.33.  POSIX has always said the function is not portable, and
its return value, timezone, and dstflag fields are unspecified.  Even
if Linux/glibc & m32r had defined behavior, those aren't the host for
the sim runtime.

So let's stop using the function and switch to clock_gettime.  gnulib
already has detection support for it, and it's been around since at
least POSIX-1-2004.
2024-01-10 22:31:54 -05:00
Mike Frysinger
c66061f403 sim: m32r: cleanup unused variables
We've been building this file with -Wno-error, so clean up unused
variable warnings.
2024-01-10 22:31:53 -05:00
Mike Frysinger
f0f0b063f0 sim: igen: add printf attributes to the prototypes too
While gcc propagates the printf attribute via the typedef, clang
doesn't seem to, so add it to the prototypes themselves too.  We
still keep it on the prototype for cases where it's used as a
variable.
2024-01-10 22:30:58 -05:00
Mike Frysinger
761ed61e7b gdbsupport: tighten up libiberty code a bit with dnl
No functional change here, just touch up generated output slightly.

Approved-By: Tom Tromey <tom@tromey.com>
2024-01-10 19:53:14 -05:00
Mike Frysinger
72d711c155 sim: build: switch to gdbsupport/libiberty.m4
Leverage this common logic to find all the libiberty settings rather
than duplicate it ourselves.
2024-01-10 19:53:10 -05:00
Mike Frysinger
0846ae35a1 sim: ppc: rework defines.h to handle HAVE symbols defined to 0
The HAVE_DECL_xxx defines are always defined to 0 or 1.  The current
defines.h logic assumes every HAVE_xxx symbol is only defined iff it's
defined to 1 which causes this to break.  Tweak the sed logic to only
match defines of 1.
2024-01-10 19:53:10 -05:00
Mike Frysinger
435ad222b3 sim: warnings: compile build tools with -Werror too
Add support for compiling build tools with various -Werror settings.
Since the tools don't compile cleanly with the same set of flags as
the rest of the sim code, we need to maintain & test a separate list.

Only bother when not cross-compiling so we don't have to test all the
flags against the build compiler.  This should be good enough for our
actual development flows.
2024-01-08 21:36:44 -05:00
Mike Frysinger
5048cb28f4 sim: igen: fix format-zero-length warnings
Fix warnings from calling printf functions with "" which normally
is useless.
2024-01-08 21:25:55 -05:00
Mike Frysinger
c6352113d2 sim: m68hc11: gencode: add printf markings 2024-01-08 21:25:22 -05:00
Mike Frysinger
916791c745 sim: m32c: fix declaration-after-statement warnings 2024-01-08 21:24:08 -05:00
Mike Frysinger
d2704ed59b sim: warnings: fix unused variable warnings
Leave the igen code in place as it's meant to be used with newer
(to-be-written) code ported from the ppc version.

The sh code isn't really necessary as the opcodes enums have been
maintained independently from here, and the lists are out-of-sync
already.
2024-01-08 21:21:58 -05:00
Mike Frysinger
f64e47a22c sim: warnings: mark local funcs/vars as static
These are only used in the respective files, so mark them as static.
This fixes missing prototype warnings at build time.
2024-01-08 21:20:05 -05:00
Mike Frysinger
7531822f10 sim: build: clean more generated outputs 2024-01-08 20:33:14 -05:00
Mike Frysinger
4c68f4e386 sim: mips: drop old clean workaround
This logic dates back to the original import, and seems to be for
handling systems where `rm -f` (i.e. no files) would error out.
None of that is relevant for us with current automake, so drop it.
2024-01-08 20:20:59 -05:00
Mike Frysinger
92bdeb2888 sim: ppc: workaround uninitialized variable compiler warnings
Some compilers don't understand the semctl API and think it's an input
argument even when it's used as an output, and then complains that it
is being used uninitialized.  Zero it out explicitly to workaround it.
This adds some runtime overhead, but should be fairly minor as it's a
small stack buffer, and shouldn't be that relevant relative to all the
other logic in these functions.
2024-01-08 20:13:22 -05:00
Mike Frysinger
9f17cdda31 sim: warnings: enable -Wshift-negative-value
Now that all the relevant sources are fixed, enable the warning.
2024-01-08 20:02:44 -05:00
Mike Frysinger
4223df94e0 sim: sh: avoid left shifting negative values
We just want to create a bitmask here, so cast the mask to unsigned
to avoid left shifting a negative value which is undefined behavior.
2024-01-08 20:02:29 -05:00
Mike Frysinger
b0c687b2ca sim: bfin: avoid left shifting negative values
We just want to create a bitmask here, so cast the mask to unsigned
to avoid left shifting a negative value which is undefined behavior.
2024-01-08 20:01:45 -05:00
Mike Frysinger
b2ea48df92 sim: cgen: rework DI macros to avoid signed left shifts
The cgen code uses DI as int64_t and UDI as uint64_t.  The DI macros
are used to construct 64-bit values from 32-bit values (for the low
and high parts).  The MAKEDI macro casts the high 32-bit value to a
signed 32-bit value before shifting.  If this created a negative
value, this would be undefined behavior according to the C standard.
All we care about is shifting the 32-bits as they are to the high
32-bits, not caring about sign extension (since there's nothing left
to shift into), and the low 32-bits being empty.  This is what we
get from shifting an unsigned value, so cast it to unsigned 32-bit
to avoid undefined behavior.

While we're here, change the SETLODI macro to truncate the lower
value to 32-bits before we set it.  If it was passing in a 64-bit
value, those high bits would get included too, and that's not what
we want.

Similarly, tweak the SETHIDI macro to cast the value to an unsigned
64-bit instead of a signed 64-bit.  If the value was only 32-bits,
the behavior would be the same.  If it happened to be signed 64-bit,
it would trigger the undefined behavior too.
2024-01-08 20:01:05 -05:00
Mike Frysinger
f6c714d65b sim: warnings: enable -Wshadow=local
This brings us in sync with current set of gdb warnings (for C).
2024-01-06 23:30:43 -05:00
Mike Frysinger
199b67ca04 sim: cris: change temp var name slightly to avoid shadowing
Rename the temp var to avoid shadowing another one:

.../sim/cris/semcrisv10f-switch.c:11032:22: error: declaration of ‘tmp_tmpb’ shadows a previous local [-Werror=shadow=compatible-local]
11032 |   tmp_tmpb = ({   SI tmp_tmpb;
      |                      ^~~~~~~~
.../sim/cris/semcrisv10f-switch.c:11031:24: note: shadowed declaration is here
11031 |   tmp_tmpres = ({   SI tmp_tmpb;
      |                        ^~~~~~~~
2024-01-06 23:30:43 -05:00
Mike Frysinger
012c1f072f sim: cris: add error fallbacks when decoding condition & swap codes
The condition & swap code decoder only checks known bits and sets
based on that.  If the variable is out of range, it ends up returning
uninitialized data.  Turn that case into a hard error.

This fixes build warnings like:
sim/cris/semcrisv10f-switch.c:13115:11: error:
	variable 'tmp_condres' is used uninitialized whenever 'if' condition is false [-Werror,-Wsometimes-uninitialized]
2024-01-06 23:30:43 -05:00
Mike Frysinger
086d7dbb2e sim: ppc: unify igen filter modules
The common igen code was forked from the ppc long ago.  The filter
module is still pretty similar in API, so we can unfork them with
a little bit of effort.

The filter.c module is still here because of the unique it_is API.
The common igen code doesn't seem to have an equiv API as this only
operates on two strings and not an actual filter object, and it's
easy enough to leave behind to unfork the rest.
2024-01-03 03:37:13 -05:00
Mike Frysinger
7811c75893 sim: ppc: unify igen line number output modules
The common igen code was forked from the ppc long ago.  The lf module
is still pretty similar in API, so we can unfork them with a little
bit of effort.

Some of the generated ppc code is now slightly different, but that's
because of fixes the common igen code has gained, but not the ppc igen
code (e.g. fixing of #line numbers).

The ppc code retains lf_print__c_code because the common igen code
rewrote the logic to a new table.c API.  Let's delay that in the ppc
code to at least unfork all this code.
2024-01-03 03:32:08 -05:00
Mike Frysinger
339e44f8c0 sim: igen: clean up headers a bit
Add standard multiple inclusion protection, and add a few missing
local includes when one header uses another.  This isn't complete,
but fixes some short comings seen when merging the ppc igen.
2024-01-03 03:13:47 -05:00
Mike Frysinger
b37a470842 sim: ppc: switch to common endian code
The common sim-endian is a forked & updated version of the ppc code.
Fortunately, they didn't diverge from the basic APIs, so they are
still compatible, which means we can just delete the ppc version now
that the build env is merged at the top-level.
2024-01-03 02:17:16 -05:00
Mike Frysinger
d4edfa1e2e sim: common: include sim-types.h in the endian header directly
This is a bit redundant for most ports as they go through sim-basics.h
which always includes sim-types.h before including sim-endian.h, but in
order to unify ppc's sim-endian code, we need this include here.  Plus,
it's the directly we generally want to go to get away from one header
that defines all APIs and causes hard to untangle dependencies.
2024-01-03 02:15:54 -05:00
Mike Frysinger
9c81c318f6 sim: ppc: rename local ALU SIGNED64 macros
The common/ code has macros with the same name but different behavior:
it's for declaring integer constants as 64-bit, not for casting them.
Rename ppc's local variant since it's only used in this file in order
to avoid conflicts.
2024-01-03 02:13:55 -05:00
Mike Frysinger
34cacf7d97 sim: ppc: sync WITH_TARGET_{ADDRESS,CELL}_BITSIZE with common/
This will make it easier to share common/ code that rely on these
additional defines.
2024-01-03 02:10:52 -05:00
Mike Frysinger
50399b3d9d sim: cr16: cleanup unused variable compiler warnings 2024-01-03 01:58:20 -05:00
Mike Frysinger
586cfe1a5d sim: configure: switch to m4_map
Minor reduction in boilerplate here.  No real functional changes.
2024-01-03 01:43:14 -05:00
Mike Frysinger
c67a81c92f sim: drop support for recursive makes entirely
Now that all ports have been merged to the top-level, we no longer need
this framework to pass settings down to sub-makefiles.  Delete it all.
2024-01-03 01:21:48 -05:00
Mike Frysinger
2c3bcf2537 sim: ppc: hoist compilation up to top-level
This removes all recursive makes from the ppc port.
2024-01-03 01:21:48 -05:00
Mike Frysinger
10e1edb737 sim: drop support for automatic subdir recursion
No port relies on this anymore, so we can scrub it all.
2024-01-03 01:21:48 -05:00
Mike Frysinger
01c2a7aa69 sim: ppc: move libsim.a creation to top-level
The objects are still compiled in the subdir, but the creation of the
archive itself is in the top-level.  This is a required step before we
can move compilation itself up, and makes it easier to review.

The downside is that each object compile is a recursive make instead of
a single one.  It adds some overhead, so it's not great, but it shouldn't
be a big deal.  This will go away once compilation is hoisted up.
2024-01-03 01:21:48 -05:00
Mike Frysinger
e0e9cd645f sim: ppc: move main.o compilation to top-level 2024-01-03 01:21:48 -05:00
Mike Frysinger
b22ee0e49b sim: ppc: hoist pk.h creation to top-level 2024-01-02 02:22:07 -05:00
Mike Frysinger
10f554512f sim: ppc: hoist hw.[ch] creation to top-level 2024-01-02 02:19:50 -05:00
Mike Frysinger
431d8a2ca4 sim: ppc: hoist igen execution to top-level
Invoke ppc's igen from the top-level like we do for all other ports.
2024-01-02 02:19:50 -05:00
Mike Frysinger
5f7e03a6bb sim: ppc: merge configure logic into top-level
Now that the ppc configure script is just namespaced options, we can
move it to ppc/acinclude.m4 and include it directly in the top-level
configure script and kill off the last subdir configure script.
2024-01-02 01:41:55 -05:00
Mike Frysinger
cc92657346 sim: ppc: scope configure options to --enable-sim-ppc-xxx
To prepare for moving these into the top-level configure, namespace
then with the port name like we do with all other ports.
2024-01-02 01:41:55 -05:00
Mike Frysinger
08e88f27c7 sim: ppc: standardize configure option processing
Switch from ad-hoc $silent checks & echo calls to standard
AC_MSG_CHECKING & AC_MSG_RESULT calls.  Also delete pointless
variable setting after calling AC_MSG_ERROR.
2024-01-02 01:41:55 -05:00
Mike Frysinger
0c53b9d697 sim: ppc: switch to AS_HELP_STRING for automatic formatting 2024-01-02 01:41:55 -05:00
Mike Frysinger
5b6d72c9a5 sim: ppc: drop now unused config.in 2024-01-02 01:41:55 -05:00
Mike Frysinger
93c0f1cf94 sim: ppc: move defines.h generation to the top-level
Since we rely on the top-level config.h now, the defines.h generation
step should live here too.
2024-01-02 00:35:59 -05:00
Mike Frysinger
82931068f4 sim: ppc: drop configure compiler checks
Now that the ppc script only checks configure options and sets up
variables in the Makefile from those, delete all the compile related
logic to greatly simplify the configure script.
2024-01-02 00:35:45 -05:00