This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [Patch]: complete coff/rs6000.h
- From: Tristan Gingold <gingold at adacore dot com>
- To: Richard Sandiford <rdsandiford at googlemail dot com>
- Cc: binutils Development <binutils at sourceware dot org>
- Date: Tue, 3 May 2011 11:45:04 +0200
- Subject: Re: [Patch]: complete coff/rs6000.h
- References: <BB3EC980-9373-46F8-A942-05EC8D2BA877@adacore.com> <g4vcxsxju3.fsf@googlemail.com>
On May 3, 2011, at 10:35 AM, Richard Sandiford wrote:
> x_ftype applies to both name encodings, so something like the syment
> definition would seem better. (That'd mean changing the bfd code too,
> of course.)
[...]
> This part's OK though. Please add the corresponding 64-bit definition
> to rs6k64.h while you're there, to keep the two in sync.
Thank you for the review. Here is the updated version.
Simply checked by rebuilding binutils.
Ok for trunk ?
Tristan.
include/coff:
2011-04-28 Tristan Gingold <gingold@adacore.com>
* rs6000.h (union external_auxent): Add x_ftype field.
(struct external_exceptab): New struct.
(EXCEPTSZ): New macro.
* rs6k64.h: (struct external_exceptab): New struct.
(EXCEPTSZ): New macro.
bfd/
2011-04-28 Tristan Gingold <gingold@adacore.com>
coff-rs6000.c (_bfd_xcoff_swap_aux_in): Adjust for x_file.
(bfd_xcoff_swap_aux_out): Ditto.
diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c
index 41bec09..21da658 100644
--- a/bfd/coff-rs6000.c
+++ b/bfd/coff-rs6000.c
@@ -463,23 +463,23 @@ _bfd_xcoff_swap_aux_in (bfd *abfd, PTR ext1, int type, int in_class,
switch (in_class)
{
case C_FILE:
- if (ext->x_file.x_fname[0] == 0)
+ if (ext->x_file.x_n.x_fname[0] == 0)
{
in->x_file.x_n.x_zeroes = 0;
in->x_file.x_n.x_offset =
- H_GET_32 (abfd, ext->x_file.x_n.x_offset);
+ H_GET_32 (abfd, ext->x_file.x_n.x_n.x_offset);
}
else
{
if (numaux > 1)
{
if (indx == 0)
- memcpy (in->x_file.x_fname, ext->x_file.x_fname,
+ memcpy (in->x_file.x_fname, ext->x_file.x_n.x_fname,
numaux * sizeof (AUXENT));
}
else
{
- memcpy (in->x_file.x_fname, ext->x_file.x_fname, FILNMLEN);
+ memcpy (in->x_file.x_fname, ext->x_file.x_n.x_fname, FILNMLEN);
}
}
goto end;
@@ -578,12 +578,13 @@ _bfd_xcoff_swap_aux_out (bfd *abfd, PTR inp, int type, int in_class,
case C_FILE:
if (in->x_file.x_fname[0] == 0)
{
- H_PUT_32 (abfd, 0, ext->x_file.x_n.x_zeroes);
- H_PUT_32 (abfd, in->x_file.x_n.x_offset, ext->x_file.x_n.x_offset);
+ H_PUT_32 (abfd, 0, ext->x_file.x_n.x_n.x_zeroes);
+ H_PUT_32 (abfd, in->x_file.x_n.x_offset,
+ ext->x_file.x_n.x_n.x_offset);
}
else
{
- memcpy (ext->x_file.x_fname, in->x_file.x_fname, FILNMLEN);
+ memcpy (ext->x_file.x_n.x_fname, in->x_file.x_fname, FILNMLEN);
}
goto end;
diff --git a/include/coff/rs6000.h b/include/coff/rs6000.h
index 960dd32..d5b2af2 100644
--- a/include/coff/rs6000.h
+++ b/include/coff/rs6000.h
@@ -168,13 +168,16 @@ union external_auxent {
char x_tvndx[2]; /* tv index */
} x_sym;
- union {
- char x_fname[E_FILNMLEN];
- struct {
- char x_zeroes[4];
- char x_offset[4];
- } x_n;
- } x_file;
+ struct {
+ union {
+ char x_fname[E_FILNMLEN];
+ struct {
+ char x_zeroes[4];
+ char x_offset[4];
+ } x_n;
+ } x_n;
+ char x_ftype[1];
+ } x_file;
struct {
char x_scnlen[4]; /* section length */
@@ -276,3 +279,15 @@ struct external_ldrel
};
#define LDRELSZ (2 * 4 + 2 * 2)
+
+struct external_exceptab
+{
+ union {
+ bfd_byte e_symndx[4];
+ bfd_byte e_paddr[4];
+ } e_addr;
+ bfd_byte e_lang[1];
+ bfd_byte e_reason[1];
+};
+
+#define EXCEPTSZ (4 + 2)
diff --git a/include/coff/rs6k64.h b/include/coff/rs6k64.h
index 516758b..ef91db4 100644
--- a/include/coff/rs6k64.h
+++ b/include/coff/rs6k64.h
@@ -259,3 +259,15 @@ struct external_ldrel
};
#define LDRELSZ (16)
+
+struct external_exceptab
+{
+ union {
+ bfd_byte e_symndx[4];
+ bfd_byte e_paddr[8];
+ } e_addr;
+ bfd_byte e_lang[1];
+ bfd_byte e_reason[1];
+};
+
+#define EXCEPTSZ (10)