From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19188 invoked by alias); 10 Aug 2007 10:38:26 -0000 Received: (qmail 19010 invoked by uid 22791); 10 Aug 2007 10:38:26 -0000 X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (66.187.233.31) by sourceware.org (qpsmtpd/0.31) with ESMTP; Fri, 10 Aug 2007 10:38:21 +0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.1/8.13.1) with ESMTP id l7AAcG0W002123; Fri, 10 Aug 2007 06:38:16 -0400 Received: from pobox.fab.redhat.com (pobox.fab.redhat.com [10.33.63.12]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id l7AAcD2r031657; Fri, 10 Aug 2007 06:38:16 -0400 Received: from workshop.redhat.com (vpn-6-17.fab.redhat.com [10.33.6.17]) by pobox.fab.redhat.com (8.13.1/8.13.1) with ESMTP id l7AAcB00019245; Fri, 10 Aug 2007 06:38:12 -0400 To: ths@mips.com, ths@networkno.de Cc: gdb-patches@sourceware.org Subject: RFA: Make --memory-info work for MIPS simulators From: Nick Clifton Date: Fri, 10 Aug 2007 10:38:00 -0000 Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2007-08/txt/msg00203.txt.bz2 --=-=-= Content-length: 1728 Hi Thiemo, The --memory-info command line switch (and its alias --info-memory) do not work for the MIPS simulator because the memory regions are not set up until after the command line has been parsed. The attached patch fixes this by delaying the processing of --memory-info until after the regions have been initialized. The patch does have one slightly dubious component - it removes the mips specific command line options table from the linked list of options tables once the command line has been processed. It does this so that the real handler for --memory-info can be called via the sim_do_commandf() function. I think that this is safe, since there is no longer any need to process mips specific command line switches. Before the patch: % mips64vrel-elf-run --memory-info a.out Memory maps: After the patch: % mips64vrel-elf-run --memory-info a.out Memory maps: memory region 0x7fff8000,0x8000 memory alias 0xa0000000@0x1,0x20000000%0x800000,0x80000000@0x1 May I apply this patch please ? Cheers Nick PS. The sim/MAINTAINERS file has your email address as , judging from the ChangeLog though, I guessed that this was incorrect. sim/mips/ChangeLog 2007-08-10 Nick Clifton * interp.c (options enum): Add OPTION_INFO_MEMORY. (display_mem_info): New static variable. (mips_option_handler): Handle OPTION_INFO_MEMORY. (mips_options): Add info-memory and memory-info. (sim_open): After processing the command line and board specification, check display_mem_info. If it is set then call the real handler for the --memory-info command line switch. --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=interp.c.patch Content-length: 2902 Index: sim/mips/interp.c =================================================================== RCS file: /cvs/src/src/sim/mips/interp.c,v retrieving revision 1.23 diff -c -3 -p -r1.23 interp.c *** sim/mips/interp.c 19 Feb 2007 17:46:53 -0000 1.23 --- sim/mips/interp.c 10 Aug 2007 10:29:49 -0000 *************** enum { *** 180,188 **** --- 180,190 ---- OPTION_DINERO_TRACE = OPTION_START, OPTION_DINERO_FILE, OPTION_FIRMWARE, + OPTION_INFO_MEMORY, OPTION_BOARD }; + static int display_mem_info = 0; static SIM_RC mips_option_handler (sd, cpu, opt, arg, is_command) *************** Re-compile simulator with \"-DTRACE\" to *** 259,264 **** --- 261,270 ---- } return SIM_RC_OK; } + + case OPTION_INFO_MEMORY: + display_mem_info = 1; + break; } return SIM_RC_OK; *************** static const OPTION mips_options[] = *** 290,295 **** --- 296,315 ---- , "Customize simulation for a particular board.", mips_option_handler }, + /* These next two options have the same names as ones found in the + memory_options[] array in common/sim-memopt.c. This is because + the intention is to provide an alternative handler for those two + options. We need an alternative handler because the memory + regions are not set up until after the command line arguments + have been parsed, and so we cannot display the memory info whilst + processing the command line. There is a hack in sim_open to + remove these handlers when we want the real --memory-info option + to work. */ + { { "info-memory", no_argument, NULL, OPTION_INFO_MEMORY }, + '\0', NULL, "List configured memory regions", mips_option_handler }, + { { "memory-info", no_argument, NULL, OPTION_INFO_MEMORY }, + '\0', NULL, NULL, mips_option_handler }, + { {NULL, no_argument, NULL, 0}, '\0', NULL, NULL, NULL } }; *************** sim_open (kind, cb, abfd, argv) *** 587,592 **** --- 607,637 ---- } #endif + if (display_mem_info) + { + struct option_list * ol; + struct option_list * prev; + + /* This is a hack. We want to execute the real --memory-info command + line switch which is handled in common/sim-memopts.c, not the + override we have defined in this file. So we remove the + mips_options array from the state options list. This is safe + because we have now processed all of the command line. */ + for (ol = STATE_OPTIONS (sd), prev = NULL; + ol != NULL; + prev = ol, ol = ol->next) + if (ol->options == mips_options) + break; + + SIM_ASSERT (ol != NULL); + + if (prev == NULL) + STATE_OPTIONS (sd) = ol->next; + else + prev->next = ol->next; + + sim_do_commandf (sd, "memory-info"); + } /* check for/establish the a reference program image */ if (sim_analyze_program (sd, --=-=-=--