* elf32-ppc.c (apuinfo_set): New static var.
	(ppc_elf_begin_write_processing): Set it here, always create an
	APUinfo section if there were any in the inputs.
	(ppc_elf_write_section): Check apuinfo_set.
	(ppc_elf_final_write_processing): Likewise.

	ld/testsuite/
	* ld-powerpc/apuinfo-nul.rd: New.
	* ld-powerpc/apuinfo-nul1.s: New.
	* ld-powerpc/powerpc.exp: Add it.
This commit is contained in:
Nathan Sidwell 2010-04-01 10:02:28 +00:00
parent 4b544b6468
commit f2faa8006c
6 changed files with 46 additions and 9 deletions

View File

@ -1,3 +1,11 @@
2010-04-01 Nathan Sidwell <nathan@codesourcery.com>
* elf32-ppc.c (apuinfo_set): New static var.
(ppc_elf_begin_write_processing): Set it here, always create an
APUinfo section if there were any in the inputs.
(ppc_elf_write_section): Check apuinfo_set.
(ppc_elf_final_write_processing): Likewise.
2010-04-01 Tristan Gingold <gingold@adacore.com>
* vms.h: Include time.h. Add prototypes for vms_get_module_name,

View File

@ -2077,12 +2077,13 @@ typedef struct apuinfo_list
apuinfo_list;
static apuinfo_list *head;
static bfd_boolean apuinfo_set;
static void
apuinfo_list_init (void)
{
head = NULL;
apuinfo_set = FALSE;
}
static void
@ -2162,7 +2163,6 @@ ppc_elf_begin_write_processing (bfd *abfd, struct bfd_link_info *link_info)
char *buffer = NULL;
bfd_size_type largest_input_size = 0;
unsigned i;
unsigned num_entries;
unsigned long length;
const char *error_message = NULL;
@ -2185,6 +2185,7 @@ ppc_elf_begin_write_processing (bfd *abfd, struct bfd_link_info *link_info)
if (length < 20)
goto fail;
apuinfo_set = TRUE;
if (largest_input_size < asec->size)
{
if (buffer)
@ -2228,13 +2229,14 @@ ppc_elf_begin_write_processing (bfd *abfd, struct bfd_link_info *link_info)
error_message = NULL;
/* Compute the size of the output section. */
num_entries = apuinfo_list_length ();
if (num_entries)
if (apuinfo_set)
{
/* Compute the size of the output section. */
unsigned num_entries = apuinfo_list_length ();
/* Set the output section size, if it exists. */
asec = bfd_get_section_by_name (abfd, APUINFO_SECTION_NAME);
if (asec && ! bfd_set_section_size (abfd, asec, 20 + num_entries * 4))
{
ibfd = abfd;
@ -2259,8 +2261,7 @@ ppc_elf_write_section (bfd *abfd ATTRIBUTE_UNUSED,
asection *asec,
bfd_byte *contents ATTRIBUTE_UNUSED)
{
return (apuinfo_list_length ()
&& strcmp (asec->name, APUINFO_SECTION_NAME) == 0);
return apuinfo_set && strcmp (asec->name, APUINFO_SECTION_NAME) == 0;
}
/* Finally we can generate the output section. */
@ -2278,7 +2279,7 @@ ppc_elf_final_write_processing (bfd *abfd, bfd_boolean linker ATTRIBUTE_UNUSED)
if (asec == NULL)
return;
if (apuinfo_list_length () == 0)
if (!apuinfo_set)
return;
length = asec->size;

View File

@ -1,3 +1,9 @@
2010-04-01 Nathan Sidwell <nathan@codesourcery.com>
* ld-powerpc/apuinfo-nul.rd: New.
* ld-powerpc/apuinfo-nul1.s: New.
* ld-powerpc/powerpc.exp: Add it.
2010-03-31 Kai TIetz <kai.tietz@onevision.com>
* ld-pe//pe-compile.exp (run_basefile_test): Trim result of wc

View File

@ -0,0 +1,9 @@
#source: apuinfo-nul.s
#source: apuinfo-nul1.s
#as: -me500
#readelf: -x2
#target: powerpc-eabi*
Hex dump of section '.PPC.EMB.apuinfo':
0x00000000 00000008 00000000 00000002 41505569 ............APUi
0x00000010 6e666f00 nfo.

View File

@ -0,0 +1,10 @@
.text
_start: nop
# dummy empty apuinfo
# some other tools emit these
.section ".PPC.EMB.apuinfo"
.long 8
.long 0
.long 2
.asciz "APUinfo"

View File

@ -103,6 +103,9 @@ set ppcelftests {
{"APUinfo section processing" "-melf32ppc"
"-a32 -me500" {apuinfo1.s apuinfo-nul.s apuinfo2.s}
{{readelf -x2 apuinfo.rd}} "apuinfo"}
{"APUinfo NULL section processing" "-melf32ppc"
"-a32 -me500" {apuinfo-nul1.s apuinfo-nul.s}
{{readelf -x2 apuinfo-nul.rd}} "apuinfo"}
{"TLS32 static exec" "-melf32ppc" "-a32" {tls32.s tlslib32.s}
{{objdump -dr tls32.d} {objdump -sj.got tls32.g}
{objdump -sj.tdata tls32.t}}