mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-17 16:05:56 +08:00
binutils/:
* objcopy.c (copy_main): Rewrite OPTION_ADD_SECTION code to work with non-ordinary files like /dev/null. binutils/testsuite/: * lib/utils-lib.exp (run_dump_test): Permit option values to use $srcdir to refer to the source directory. * binutils-all/add-section.d: New test. * binutils-all/add-empty-section.d: New test. * binutils-all/empty-file: New test input file. * binutils-all/objcopy.exp: Run new tests.
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
2010-01-19 Ian Lance Taylor <iant@google.com>
|
||||||
|
|
||||||
|
* objcopy.c (copy_main): Rewrite OPTION_ADD_SECTION code to work
|
||||||
|
with non-ordinary files like /dev/null.
|
||||||
|
|
||||||
2010-01-19 Daisuke Hatayama <d.hatayama@jp.fujitsu.com>
|
2010-01-19 Daisuke Hatayama <d.hatayama@jp.fujitsu.com>
|
||||||
Alan Modra <amodra@gmail.com>
|
Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
@ -3306,10 +3306,8 @@ copy_main (int argc, char *argv[])
|
|||||||
case OPTION_ADD_SECTION:
|
case OPTION_ADD_SECTION:
|
||||||
{
|
{
|
||||||
const char *s;
|
const char *s;
|
||||||
off_t size;
|
size_t off, alloc;
|
||||||
struct section_add *pa;
|
struct section_add *pa;
|
||||||
int len;
|
|
||||||
char *name;
|
|
||||||
FILE *f;
|
FILE *f;
|
||||||
|
|
||||||
s = strchr (optarg, '=');
|
s = strchr (optarg, '=');
|
||||||
@ -3317,34 +3315,40 @@ copy_main (int argc, char *argv[])
|
|||||||
if (s == NULL)
|
if (s == NULL)
|
||||||
fatal (_("bad format for %s"), "--add-section");
|
fatal (_("bad format for %s"), "--add-section");
|
||||||
|
|
||||||
size = get_file_size (s + 1);
|
|
||||||
if (size < 1)
|
|
||||||
{
|
|
||||||
status = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
pa = (struct section_add *) xmalloc (sizeof (struct section_add));
|
pa = (struct section_add *) xmalloc (sizeof (struct section_add));
|
||||||
|
pa->name = xstrndup (optarg, s - optarg);
|
||||||
len = s - optarg;
|
|
||||||
name = (char *) xmalloc (len + 1);
|
|
||||||
strncpy (name, optarg, len);
|
|
||||||
name[len] = '\0';
|
|
||||||
pa->name = name;
|
|
||||||
|
|
||||||
pa->filename = s + 1;
|
pa->filename = s + 1;
|
||||||
pa->size = size;
|
|
||||||
pa->contents = (bfd_byte *) xmalloc (size);
|
/* We don't use get_file_size so that we can do
|
||||||
|
--add-section .note.GNU_stack=/dev/null
|
||||||
|
get_file_size doesn't work on /dev/null. */
|
||||||
|
|
||||||
f = fopen (pa->filename, FOPEN_RB);
|
f = fopen (pa->filename, FOPEN_RB);
|
||||||
|
|
||||||
if (f == NULL)
|
if (f == NULL)
|
||||||
fatal (_("cannot open: %s: %s"),
|
fatal (_("cannot open: %s: %s"),
|
||||||
pa->filename, strerror (errno));
|
pa->filename, strerror (errno));
|
||||||
|
|
||||||
if (fread (pa->contents, 1, pa->size, f) == 0
|
off = 0;
|
||||||
|| ferror (f))
|
alloc = 4096;
|
||||||
fatal (_("%s: fread failed"), pa->filename);
|
pa->contents = (bfd_byte *) xmalloc (alloc);
|
||||||
|
while (!feof (f))
|
||||||
|
{
|
||||||
|
off_t got;
|
||||||
|
|
||||||
|
if (off == alloc)
|
||||||
|
{
|
||||||
|
alloc <<= 1;
|
||||||
|
pa->contents = (bfd_byte *) xrealloc (pa->contents, alloc);
|
||||||
|
}
|
||||||
|
|
||||||
|
got = fread (pa->contents + off, 1, alloc - off, f);
|
||||||
|
if (ferror (f))
|
||||||
|
fatal (_("%s: fread failed"), pa->filename);
|
||||||
|
|
||||||
|
off += got;
|
||||||
|
}
|
||||||
|
|
||||||
|
pa->size = off;
|
||||||
|
|
||||||
fclose (f);
|
fclose (f);
|
||||||
|
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
2010-01-19 Ian Lance Taylor <iant@google.com>
|
||||||
|
|
||||||
|
* lib/utils-lib.exp (run_dump_test): Permit option values to use
|
||||||
|
$srcdir to refer to the source directory.
|
||||||
|
* binutils-all/add-section.d: New test.
|
||||||
|
* binutils-all/add-empty-section.d: New test.
|
||||||
|
* binutils-all/empty-file: New test input file.
|
||||||
|
* binutils-all/objcopy.exp: Run new tests.
|
||||||
|
|
||||||
2010-01-08 H.J. Lu <hongjiu.lu@intel.com>
|
2010-01-08 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* binutils-all/elfedit-2.d: New.
|
* binutils-all/elfedit-2.d: New.
|
||||||
|
9
binutils/testsuite/binutils-all/add-empty-section.d
Normal file
9
binutils/testsuite/binutils-all/add-empty-section.d
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#PROG: objcopy
|
||||||
|
#name: objcopy add-empty-section
|
||||||
|
#source: empty.s
|
||||||
|
#objcopy: --add-section NEW=$srcdir/empty-file
|
||||||
|
#readelf: -S --wide
|
||||||
|
|
||||||
|
#...
|
||||||
|
\[[ 0-9]+\] NEW[ \t]+PROGBITS[ \t]+[0-9a-f]+[ \t]+[0-9a-f]+[ \t]+0+[ \t]+[ \t0-9a-f]+
|
||||||
|
#...
|
11
binutils/testsuite/binutils-all/add-section.d
Normal file
11
binutils/testsuite/binutils-all/add-section.d
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#PROG: objcopy
|
||||||
|
#name: objcopy add-section
|
||||||
|
#source: empty.s
|
||||||
|
#objcopy: --add-section NEW=$srcdir/empty.s
|
||||||
|
#objdump: -s -j NEW
|
||||||
|
|
||||||
|
.*: +file format .*
|
||||||
|
|
||||||
|
Contents of section NEW:
|
||||||
|
0000 2320416e 20656d70 74792066 696c652e # An empty file.
|
||||||
|
0010 0a .
|
0
binutils/testsuite/binutils-all/empty-file
Normal file
0
binutils/testsuite/binutils-all/empty-file
Normal file
@ -875,5 +875,8 @@ if [is_elf_format] {
|
|||||||
run_dump_test "localize-hidden-1"
|
run_dump_test "localize-hidden-1"
|
||||||
run_dump_test "testranges"
|
run_dump_test "testranges"
|
||||||
run_dump_test "testranges-ia64"
|
run_dump_test "testranges-ia64"
|
||||||
|
|
||||||
|
run_dump_test "add-section"
|
||||||
|
run_dump_test "add-empty-section"
|
||||||
}
|
}
|
||||||
run_dump_test "localize-hidden-2"
|
run_dump_test "localize-hidden-2"
|
||||||
|
@ -327,6 +327,11 @@ proc run_dump_test { name {extra_options {}} } {
|
|||||||
unresolved $subdir/$name
|
unresolved $subdir/$name
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Permit the option to use $srcdir to refer to the source
|
||||||
|
# directory.
|
||||||
|
regsub -all "\\\$srcdir" "$opt_val" "$srcdir/$subdir" opt_val
|
||||||
|
|
||||||
if [string length $opts($opt_name)] {
|
if [string length $opts($opt_name)] {
|
||||||
perror "option $opt_name multiply set in $file.d"
|
perror "option $opt_name multiply set in $file.d"
|
||||||
unresolved $subdir/$name
|
unresolved $subdir/$name
|
||||||
@ -343,6 +348,11 @@ proc run_dump_test { name {extra_options {}} } {
|
|||||||
unresolved $subdir/$name
|
unresolved $subdir/$name
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Permit the option to use $srcdir to refer to the source
|
||||||
|
# directory.
|
||||||
|
regsub -all "\\\$srcdir" "$opt_val" "$srcdir/$subdir" opt_val
|
||||||
|
|
||||||
# add extra option to end of existing option, adding space
|
# add extra option to end of existing option, adding space
|
||||||
# if necessary.
|
# if necessary.
|
||||||
if [string length $opts($opt_name)] {
|
if [string length $opts($opt_name)] {
|
||||||
|
Reference in New Issue
Block a user