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:
parent
1696f399f7
commit
500ee42ee0
@ -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>
|
||||
Alan Modra <amodra@gmail.com>
|
||||
|
||||
|
@ -3306,10 +3306,8 @@ copy_main (int argc, char *argv[])
|
||||
case OPTION_ADD_SECTION:
|
||||
{
|
||||
const char *s;
|
||||
off_t size;
|
||||
size_t off, alloc;
|
||||
struct section_add *pa;
|
||||
int len;
|
||||
char *name;
|
||||
FILE *f;
|
||||
|
||||
s = strchr (optarg, '=');
|
||||
@ -3317,34 +3315,40 @@ copy_main (int argc, char *argv[])
|
||||
if (s == NULL)
|
||||
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));
|
||||
|
||||
len = s - optarg;
|
||||
name = (char *) xmalloc (len + 1);
|
||||
strncpy (name, optarg, len);
|
||||
name[len] = '\0';
|
||||
pa->name = name;
|
||||
|
||||
pa->name = xstrndup (optarg, s - optarg);
|
||||
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);
|
||||
|
||||
if (f == NULL)
|
||||
fatal (_("cannot open: %s: %s"),
|
||||
pa->filename, strerror (errno));
|
||||
|
||||
if (fread (pa->contents, 1, pa->size, f) == 0
|
||||
|| ferror (f))
|
||||
fatal (_("%s: fread failed"), pa->filename);
|
||||
off = 0;
|
||||
alloc = 4096;
|
||||
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);
|
||||
|
||||
|
@ -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>
|
||||
|
||||
* 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 "testranges"
|
||||
run_dump_test "testranges-ia64"
|
||||
|
||||
run_dump_test "add-section"
|
||||
run_dump_test "add-empty-section"
|
||||
}
|
||||
run_dump_test "localize-hidden-2"
|
||||
|
@ -327,6 +327,11 @@ proc run_dump_test { name {extra_options {}} } {
|
||||
unresolved $subdir/$name
|
||||
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)] {
|
||||
perror "option $opt_name multiply set in $file.d"
|
||||
unresolved $subdir/$name
|
||||
@ -343,6 +348,11 @@ proc run_dump_test { name {extra_options {}} } {
|
||||
unresolved $subdir/$name
|
||||
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
|
||||
# if necessary.
|
||||
if [string length $opts($opt_name)] {
|
||||
|
Loading…
Reference in New Issue
Block a user