Browse Source

Add new ld option: --print-memory-usage

ld/
	* NEWS: Mention new option.
	* lexsup.c (parse_args): Handle --print-memory-usage.
	(ld_options): Add --print-memory-usage.
	* ldmain.c (main): Call lang_print_memory_usage.
	* ldlex.h (enum option_values): Add OPTION_PRINT_MEMORY_USAGE.
	* ldlang.h: Add prototype of lang_print_memory_usage.
	* ldlang.c (lang_print_memory_size, lang_print_memory_usage): New
	functions.
	* ld.texinfo (Options): Document --print-memory-usage.
	* ld.h (args_type): Add print_memory_usage field.

ld/testsuite/
	* ld-scripts/print-memory-usage-1.t,
	* ld-scripts/print-memory-usage-1.s,
	* ld-scripts/print-memory-usage-1.l,
	* ld-scripts/print-memory-usage-2.t,
	* ld-scripts/print-memory-usage-2.l,
	* ld-scripts/print-memory-usage-3.s,
	* ld-scripts/print-memory-usage-3.t,
	* ld-scripts/print-memory-usage-3.l,
	* ld-scripts/print-memory-usage.t: New tests.
	* ld-scripts/print-memory-usage.exp: Run them.
gdb-7.10-branch
Tristan Gingold 11 years ago
parent
commit
3604cb1f8c
  1. 13
      ld/ChangeLog
  2. 2
      ld/NEWS
  3. 3
      ld/ld.h
  4. 15
      ld/ld.texinfo
  5. 38
      ld/ldlang.c
  6. 3
      ld/ldlang.h
  7. 1
      ld/ldlex.h
  8. 2
      ld/ldmain.c
  9. 6
      ld/lexsup.c
  10. 13
      ld/testsuite/ChangeLog
  11. 3
      ld/testsuite/ld-scripts/print-memory-usage-1.l
  12. 8
      ld/testsuite/ld-scripts/print-memory-usage-1.s
  13. 5
      ld/testsuite/ld-scripts/print-memory-usage-1.t
  14. 1
      ld/testsuite/ld-scripts/print-memory-usage-2.l
  15. 14
      ld/testsuite/ld-scripts/print-memory-usage-2.t
  16. 3
      ld/testsuite/ld-scripts/print-memory-usage-3.l
  17. 8
      ld/testsuite/ld-scripts/print-memory-usage-3.s
  18. 5
      ld/testsuite/ld-scripts/print-memory-usage-3.t
  19. 69
      ld/testsuite/ld-scripts/print-memory-usage.exp
  20. 14
      ld/testsuite/ld-scripts/print-memory-usage.t

13
ld/ChangeLog

@ -1,3 +1,16 @@
2015-06-12 Tristan Gingold <gingold@adacore.com>
* NEWS: Mention new option.
* lexsup.c (parse_args): Handle --print-memory-usage.
(ld_options): Add --print-memory-usage.
* ldmain.c (main): Call lang_print_memory_usage.
* ldlex.h (enum option_values): Add OPTION_PRINT_MEMORY_USAGE.
* ldlang.h: Add prototype of lang_print_memory_usage.
* ldlang.c (lang_print_memory_size, lang_print_memory_usage): New
functions.
* ld.texinfo (Options): Document --print-memory-usage.
* ld.h (args_type): Add print_memory_usage field.
2015-06-08 Nick Clifton <nickc@redhat.com>
* po/fr.po: Updated French Translation.

2
ld/NEWS

@ -7,6 +7,8 @@
* Add support for LLVM plugin.
* Add --print-memory-usage option to report memory blocks usage.
Changes in 2.25:
* PE binaries now once again contain real timestamps by default. To disable

3
ld/ld.h

@ -161,6 +161,9 @@ typedef struct {
/* If TRUE we'll just print the default output on stdout. */
bfd_boolean print_output_format;
/* If set, display the target memory usage (per memory region). */
bfd_boolean print_memory_usage;
/* Big or little endian as set on command line. */
enum endian_enum endian;

15
ld/ld.texinfo

@ -1472,6 +1472,21 @@ Print the name of the default output format (perhaps influenced by
other command-line options). This is the string that would appear
in an @code{OUTPUT_FORMAT} linker script command (@pxref{File Commands}).
@kindex --print-memory-usage
@cindex memory usage
@item --print-memory-usage
Print used size, total size and used size of memory regions created with
the @ref{MEMORY} command. This is useful on embedded targets to have a
quick view of amount of free memory. The format of the output has one
headline and one line per region. It is both human readable and easily
parsable by tools. Here is an example of an output:
@smallexample
Memory region Used Size Region Size %age Used
ROM: 256 KB 1 MB 25.00%
RAM: 32 B 2 GB 0.00%
@end smallexample
@cindex help
@cindex usage
@kindex --help

38
ld/ldlang.c

@ -8133,3 +8133,41 @@ lang_ld_feature (char *str)
p = q;
}
}
/* Pretty print memory amount. */
static void
lang_print_memory_size (bfd_vma sz)
{
if ((sz & 0x3fffffff) == 0)
printf ("%10" BFD_VMA_FMT "u GB", sz >> 30);
else if ((sz & 0xfffff) == 0)
printf ("%10" BFD_VMA_FMT "u MB", sz >> 20);
else if ((sz & 0x3ff) == 0)
printf ("%10" BFD_VMA_FMT "u KB", sz >> 10);
else
printf (" %10" BFD_VMA_FMT "u B", sz);
}
/* Implement --print-memory-usage: disply per region memory usage. */
void
lang_print_memory_usage (void)
{
lang_memory_region_type *r;
printf ("Memory region Used Size Region Size %%age Used\n");
for (r = lang_memory_region_list; r->next != NULL; r = r->next)
{
bfd_vma used_length = r->current - r->origin;
double percent;
printf ("%16s: ",r->name_list.name);
lang_print_memory_size (used_length);
lang_print_memory_size ((bfd_vma) r->length);
percent = used_length * 100.0 / r->length;
printf (" %6.2f%%\n", percent);
}
}

3
ld/ldlang.h

@ -688,4 +688,7 @@ ldlang_override_segment_assignment
extern void
lang_ld_feature (char *);
extern void
lang_print_memory_usage (void);
#endif

1
ld/ldlex.h

@ -142,6 +142,7 @@ enum option_values
OPTION_IGNORE_UNRESOLVED_SYMBOL,
OPTION_PUSH_STATE,
OPTION_POP_STATE,
OPTION_PRINT_MEMORY_USAGE,
};
/* The initial parser states. */

2
ld/ldmain.c

@ -440,6 +440,8 @@ main (int argc, char **argv)
output_cref (config.map_file != NULL ? config.map_file : stdout);
if (nocrossref_list != NULL)
check_nocrossrefs ();
if (command_line.print_memory_usage)
lang_print_memory_usage ();
#if 0
{
struct bfd_link_hash_entry * h;

6
ld/lexsup.c

@ -523,6 +523,8 @@ static const struct ld_option ld_options[] =
{ {"pop-state", no_argument, NULL, OPTION_POP_STATE},
'\0', NULL, N_("Pop state of flags governing input file handling"),
TWO_DASHES },
{ {"print-memory-usage", no_argument, NULL, OPTION_PRINT_MEMORY_USAGE},
'\0', NULL, N_("Report target memory usage"), TWO_DASHES },
};
#define OPTION_COUNT ARRAY_SIZE (ld_options)
@ -1490,6 +1492,10 @@ parse_args (unsigned argc, char **argv)
free (oldp);
}
break;
case OPTION_PRINT_MEMORY_USAGE:
command_line.print_memory_usage = TRUE;
break;
}
}

13
ld/testsuite/ChangeLog

@ -1,3 +1,16 @@
2015-06-12 Tristan Gingold <gingold@adacore.com>
* ld-scripts/print-memory-usage-1.t,
* ld-scripts/print-memory-usage-1.s,
* ld-scripts/print-memory-usage-1.l,
* ld-scripts/print-memory-usage-2.t,
* ld-scripts/print-memory-usage-2.l,
* ld-scripts/print-memory-usage-3.s,
* ld-scripts/print-memory-usage-3.t,
* ld-scripts/print-memory-usage-3.l,
* ld-scripts/print-memory-usage.t: New tests.
* ld-scripts/print-memory-usage.exp: Run them.
2015-06-05 Nick Clifton <nickc@redhat.com>
* ld-elf/compressed1d.d: Fix typo: iq200 -> iq2000.

3
ld/testsuite/ld-scripts/print-memory-usage-1.l

@ -0,0 +1,3 @@
Memory region Used Size Region Size %age Used
ROM: 32 B 1 KB 3.12%
RAM: 32 B 256 KB 0.01%

8
ld/testsuite/ld-scripts/print-memory-usage-1.s

@ -0,0 +1,8 @@
.text
.globl text_symbol
text_symbol:
.space 32
.data
.globl data_symbol
data_symbol:
.space 32

5
ld/testsuite/ld-scripts/print-memory-usage-1.t

@ -0,0 +1,5 @@
MEMORY
{
ROM (RX) : ORIGIN = 0x1000, LENGTH = 1K
RAM (W) : ORIGIN = 0x100000, LENGTH = 256K
}

1
ld/testsuite/ld-scripts/print-memory-usage-2.l

@ -0,0 +1 @@
Memory region Used Size Region Size %age Used

14
ld/testsuite/ld-scripts/print-memory-usage-2.t

@ -0,0 +1,14 @@
SECTIONS
{
.text 0x1000 :
{
*(.text)
*(.pr)
}
.data :
{
*(.data)
*(.rw)
}
}

3
ld/testsuite/ld-scripts/print-memory-usage-3.l

@ -0,0 +1,3 @@
Memory region Used Size Region Size %age Used
ROM: 256 KB 1 MB 25.00%
RAM: 32 B 2 GB 0.00%

8
ld/testsuite/ld-scripts/print-memory-usage-3.s

@ -0,0 +1,8 @@
.text
.globl text_symbol
text_symbol:
.space 256*1024
.data
.globl data_symbol
data_symbol:
.space 32

5
ld/testsuite/ld-scripts/print-memory-usage-3.t

@ -0,0 +1,5 @@
MEMORY
{
ROM (RX) : ORIGIN = 0x100000, LENGTH = 1M
RAM (W) : ORIGIN = 0x1000000, LENGTH = 2048M
}

69
ld/testsuite/ld-scripts/print-memory-usage.exp

@ -0,0 +1,69 @@
# Test --print-memory-usage linker functionality
# By Tristan Gingold, AdaCore
# Copyright (C) 2015 Free Software Foundation, Inc.
#
# This file is part of the GNU Binutils.
#
# 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
# MA 02110-1301, USA.
# Mips adds MIPS.abiflags section.
# Spu, pdp11 memory is too small.
# Tic30 needs a special linker script.
# Tic54x interpret space values in bits.
# XCOFF has garbage collection
if { [istarget mips*-*-*]
|| [istarget spu*-*-*]
|| [istarget pdp11*-*-*]
|| [istarget tic30*-*-*]
|| [istarget tic54x*-*-*]
|| [istarget *-*-aix*]
|| [istarget *-*-xcoff*] } {
return
}
run_ld_link_tests {
{
"print-memory-usage-1"
"-T print-memory-usage-1.t -T print-memory-usage.t --print-memory-usage"
""
""
{ "print-memory-usage-1.s" }
{ { ld "print-memory-usage-1.l" } }
"print-memory-usage-1"
}
{
"print-memory-usage-2"
"-T print-memory-usage-2.t --print-memory-usage"
""
""
{ "print-memory-usage-1.s" }
{ { ld "print-memory-usage-2.l" } }
"print-memory-usage-2"
}
{
"print-memory-usage-3"
"-T print-memory-usage-3.t -T print-memory-usage.t --print-memory-usage"
""
""
{ "print-memory-usage-3.s" }
{ { ld "print-memory-usage-3.l" } }
"print-memory-usage-3"
}
}

14
ld/testsuite/ld-scripts/print-memory-usage.t

@ -0,0 +1,14 @@
SECTIONS
{
.text :
{
*(.text)
*(.pr)
}
.data :
{
*(.data)
*(.rw)
}
}
Loading…
Cancel
Save