[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
ld patch to prevent uninitialized data in TI COFF output
From: |
jnielsen |
Subject: |
ld patch to prevent uninitialized data in TI COFF output |
Date: |
Sat, 6 Dec 2008 14:43:32 +0100 |
The attached patches correct an issue that exists in ld when the object
code format is TI COFF.
The problem is that struct external_scnhdr in ti.h define two members,
s_reserved and s_page, which are not always set before the section header
is written to the output. The output file in TI COFF works nicely except
that subsequent ld invocations may produce files which are not identical.
I have for instance seen the length of the output file name affect the
resulting values of s_reserved and s_page.
Please consider these patches for future binutils releases.
I found the problem in an older version of binutils but have verified that
these members remain unset in the CVS head revisions. The patches are
relative to the CVS head revisions as of today, coffcode.h rev. 1.144 and
ti.h rev. 1.18.
Thanks,
Johan Olmutz Nielsen
--- coffcode.h.1.144 2008-12-06 12:45:12.393963200 +0100
+++ coffcode.h 2008-12-06 12:57:45.576987200 +0100
@@ -3528,6 +3528,8 @@
section.s_size = current->size;
#ifdef coff_get_section_load_page
section.s_page = coff_get_section_load_page (current);
+#else
+ section.s_page = 0;
#endif
#ifdef COFF_WITH_PE
--- ti.h.1.18 2008-12-06 12:51:52.609444800 +0100
+++ ti.h 2008-12-06 12:56:26.503284800 +0100
@@ -321,6 +321,16 @@
} \
while (0)
+/* The entire scnhdr may not be assigned.
+ Ensure that everything is initialized.
+ */
+#define COFF_ADJUST_SCNHDR_OUT_PRE(ABFD, INT, EXT) \
+ do \
+ { \
+ memset((EXT), 0, sizeof(SCNHDR)); \
+ } \
+ while (0)
+
/* The line number and reloc overflow checking in coff_swap_scnhdr_out in
coffswap.h doesn't use PUT_X for s_nlnno and s_nreloc.
Due to different sized v0/v1/v2 section headers, we have to re-write
these
This message is intended only for the use of the individual or entity to which
it is addressed. If the reader of this message is not the intended recipient,
or the employee or agent responsible for delivering the message to the intended
recipient, you are hereby notified that any dissemination, distribution or
copying of this message is strictly prohibited. If you have received this
communication in error, please notify us immediately by replying to the sender
of this E-Mail by return E-Mail or by telephone.
- ld patch to prevent uninitialized data in TI COFF output,
jnielsen <=