mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-25 21:19:54 +00:00
enhance OEA behavior.
This commit is contained in:
parent
7453a7533f
commit
4f35cbffa6
@ -1,3 +1,16 @@
|
||||
Thu Sep 21 16:26:49 1995 Michael Meissner <meissner@tiktok.cygnus.com>
|
||||
|
||||
* std-config.h (WITH_TRACE): Default to 1 now.
|
||||
|
||||
* psim.c (write_stack_arguments): Don't write any stack arguments
|
||||
if OEA.
|
||||
|
||||
* main.c (main): Switch to using getopt. Make -p also set
|
||||
trace_semantics.
|
||||
|
||||
* device_tree.c (create_option_device_node): Assume a program is
|
||||
OEA if the start address is < 4096, not just == 0.
|
||||
|
||||
Wed Sep 20 13:36:06 1995 Ian Lance Taylor <ian@cygnus.com>
|
||||
|
||||
* Makefile.in (maintainer-clean): New synonym for realclean.
|
||||
|
@ -34,6 +34,12 @@
|
||||
|
||||
#include "bfd.h"
|
||||
|
||||
/* Any starting address less than this is assumed to be an OEA program
|
||||
rather than VEA. */
|
||||
#ifndef OEA_START_ADDRESS
|
||||
#define OEA_START_ADDRESS 4096
|
||||
#endif
|
||||
|
||||
enum { clayton_memory_size = 0x100000 };
|
||||
|
||||
/* insert the address into the device_nodes sorted list of addresses */
|
||||
@ -174,6 +180,8 @@ STATIC_INLINE_DEVICE_TREE device_node *
|
||||
create_option_device_node(device_node *root,
|
||||
bfd *image)
|
||||
{
|
||||
int oea = (bfd_get_start_address(image) < OEA_START_ADDRESS);
|
||||
int elf = (image->xvec->flavour == bfd_target_elf_flavour);
|
||||
device_node *option_node;
|
||||
|
||||
/* the option node and than its members */
|
||||
@ -200,9 +208,9 @@ create_option_device_node(device_node *root,
|
||||
"stack-pointer",
|
||||
integer_type_device,
|
||||
NULL,
|
||||
(void*)(bfd_get_start_address(image) == 0
|
||||
(void *)((oea)
|
||||
? clayton_memory_size /* OEA */
|
||||
: (image->xvec->flavour == bfd_target_elf_flavour
|
||||
: ((elf)
|
||||
? 0xe0000000 /* elf */
|
||||
: 0x20000000 /* xcoff */)));
|
||||
|
||||
@ -211,9 +219,7 @@ create_option_device_node(device_node *root,
|
||||
"vea?",
|
||||
boolean_type_device,
|
||||
NULL,
|
||||
(void*)(bfd_get_start_address(image) == 0
|
||||
? 0
|
||||
: -1));
|
||||
(void *)((oea) ? 0 : -1));
|
||||
|
||||
/* what type of binary */
|
||||
TRACE(trace_tbd, ("create_optioin_device_node() - TBD - NT/OpenBoot?\n"));
|
||||
@ -221,9 +227,7 @@ create_option_device_node(device_node *root,
|
||||
"elf?",
|
||||
boolean_type_device,
|
||||
NULL,
|
||||
(void*)(image->xvec->flavour == bfd_target_elf_flavour
|
||||
? -1 /* elf binary */
|
||||
: 0 /* probably aix binary */));
|
||||
(void *)((elf) ? -1 : 0));
|
||||
|
||||
/* must all memory transfers be naturally aligned? */
|
||||
device_node_create(option_node,
|
||||
@ -232,7 +236,7 @@ create_option_device_node(device_node *root,
|
||||
NULL,
|
||||
(void*)((WITH_ALIGNMENT == NONSTRICT_ALIGNMENT
|
||||
|| image->xvec->byteorder_big_p
|
||||
|| bfd_get_start_address(image) != 0)
|
||||
|| !oea)
|
||||
? 0
|
||||
: -1));
|
||||
|
||||
|
145
sim/ppc/main.c
Normal file
145
sim/ppc/main.c
Normal file
@ -0,0 +1,145 @@
|
||||
/* This file is part of the program psim.
|
||||
|
||||
Copyright (C) 1994-1995, Andrew Cagney <cagney@highland.com.au>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "psim.h"
|
||||
|
||||
extern char **environ;
|
||||
extern char *optarg;
|
||||
extern int optind;
|
||||
extern int optopt;
|
||||
extern int opterr;
|
||||
|
||||
void
|
||||
printf_filtered(char *msg, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, msg);
|
||||
vprintf(msg, ap);
|
||||
}
|
||||
|
||||
void
|
||||
error (char *msg, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, msg);
|
||||
vprintf(msg, ap);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
void *
|
||||
zalloc(long size)
|
||||
{
|
||||
void *memory = malloc(size);
|
||||
if (memory == NULL)
|
||||
error("zmalloc failed\n");
|
||||
bzero(memory, size);
|
||||
return memory;
|
||||
}
|
||||
|
||||
void
|
||||
zfree(void *chunk)
|
||||
{
|
||||
free(chunk);
|
||||
}
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
error ("Usage: psim [ -p -c -s -i -t ] <image> [ <image-args> ... ]\n");
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
psim *system;
|
||||
char **argp;
|
||||
const char *name_of_file;
|
||||
char *arg_;
|
||||
unsigned_word stack_pointer;
|
||||
psim_status status;
|
||||
int letter;
|
||||
|
||||
/* check for arguments - FIXME use getopt */
|
||||
while ((letter = getopt (argc, argv, "cipst")) != EOF)
|
||||
{
|
||||
switch (argp[0][1]) {
|
||||
case 'p':
|
||||
trace[trace_cpu] = trace[trace_semantics] = 1;
|
||||
break;
|
||||
case 'c':
|
||||
trace[trace_core] = 1;
|
||||
break;
|
||||
case 's':
|
||||
trace[trace_create_stack] = 1;
|
||||
break;
|
||||
case 'i':
|
||||
trace[trace_icu_device] = 1;
|
||||
break;
|
||||
case 't':
|
||||
trace[trace_device_tree] = 1;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
}
|
||||
}
|
||||
|
||||
if (argp >= argv+argc)
|
||||
usage();
|
||||
name_of_file = *argp;
|
||||
|
||||
/* create the simulator */
|
||||
system = psim_create(name_of_file, ((WITH_SMP > 0) ? WITH_SMP : 1));
|
||||
|
||||
/* fudge the environment so that _=prog-name */
|
||||
arg_ = (char*)zalloc(strlen(*argp) + strlen("_=") + 1);
|
||||
strcpy(arg_, "_=");
|
||||
strcat(arg_, *argp);
|
||||
putenv(arg_);
|
||||
|
||||
/* initialize it */
|
||||
psim_load(system);
|
||||
psim_stack(system, argp, environ);
|
||||
|
||||
psim_run(system);
|
||||
|
||||
/* why did we stop */
|
||||
status = psim_get_status(system);
|
||||
switch (status.reason) {
|
||||
case was_continuing:
|
||||
error("psim: continuing while stoped!\n");
|
||||
return 0;
|
||||
case was_trap:
|
||||
error("psim: no trap insn\n");
|
||||
return 0;
|
||||
case was_exited:
|
||||
return status.signal;
|
||||
case was_signalled:
|
||||
return status.signal;
|
||||
default:
|
||||
error("unknown halt condition\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user