From: Pedro Alves <pedro_alves@portugalmail.pt>
To: Binutils <binutils@sourceware.org>
Cc: Danny Smith <dannysmith@clear.net.nz>,
Nick Clifton <nickc@redhat.com>,
Christopher Faylor <me@cgf.cx>
Subject: Re: [Patch/pe-coff] : Add native spelling of import lib names to dynamic lib search
Date: Sat, 24 Jun 2006 17:32:00 -0000 [thread overview]
Message-ID: <449D37EB.3030407@portugalmail.pt> (raw)
In-Reply-To: <449A9F15.500@redhat.com>
Hi all,
Nick Clifton wrote:
> Hi Danny,
>
>> 2006-06-19 Danny Smith <dannysmith@users.sourceforge.net>
>>
>> * emultempl/pe.em (gld_${EMULATION_NAME}_open_dynamic_archive):
>> Restructure. Add native "%s.lib" format to search list
>> * ld.texinfo (node WIN32): Update documentation on dynamic lib
>> search order. Add another reason for using import libs.
>
> Approved and applied.
>
> Note - I slightly changed the construction of the size passed to the
> xmalloc() function, so that instead of using sizeof on a separate
> string, it accesses the libname_fmt structure and pulls a string out
> of there. I felt that this made it more obvious as to why the value
> was being included in the computation of the amount of memory
> required. I also added a comment into the declaration of the
> libname_fmt structure to remind future coders to check and update the
> length if necessary.
This doesn't work correctly. The sizeof (libname_fmt.format) is sizeof
(const char*), not the sizeof the string.
Fixed with the following patch. Other possibilities would be to
s/sizeof/strlen/ or sizeof(*libname_fmt.format),
by I think this way makes the code clearer, and less surprising.
Cheers,
Pedro Alves
----
2006-06-24 Pedro Alves pedro_alves@portugalmail.pt
PR ld/2537
* emultempl/pe.em (gld_${EMULATION_NAME}_open_dynamic_archive): New member
fixed_len in libname_fmt, representing the length of the format string minus
the length of the formatters. Adjust xmalloc call to use the longest of the lengths.
--- pe.em.org 2006-06-24 13:18:22.000000000 +0100
+++ pe.em 2006-06-24 13:54:16.000000000 +0100
@@ -1697,52 +1697,60 @@ gld_${EMULATION_NAME}_open_dynamic_archi
static const struct
{
const char * format;
+ int fixed_len;
bfd_boolean use_prefix;
}
libname_fmt [] =
{
/* Preferred explicit import library for dll's. */
- { "lib%s.dll.a", FALSE },
+ { "lib%s.dll.a", 9, FALSE },
/* Alternate explicit import library for dll's. */
- { "%s.dll.a", FALSE },
+ { "%s.dll.a", 6, FALSE },
/* "libfoo.a" could be either an import lib or a static lib.
For backwards compatibility, libfoo.a needs to precede
libfoo.dll and foo.dll in the search. */
- { "lib%s.a", FALSE },
+ { "lib%s.a", 5, FALSE },
/* The 'native' spelling of an import lib name is "foo.lib". */
- { "%s.lib", FALSE },
+ { "%s.lib", 4, FALSE },
#ifdef DLL_SUPPORT
/* Try "<prefix>foo.dll" (preferred dll name, if specified). */
- { "%s%s.dll", TRUE },
+ { "%s%s.dll", 4, TRUE },
#endif
/* Try "libfoo.dll" (default preferred dll name). */
- { "lib%s.dll", FALSE },
+ { "lib%s.dll", 7, FALSE },
/* Finally try 'native' dll name "foo.dll". */
- { "%s.dll", FALSE },
- /* Note: If adding more formats to this table, make sure to check to
- see if their length is longer than libname_fmt[0].format, and if
- so, update the call to xmalloc() below. */
- { NULL, FALSE }
+ { "%s.dll", 4, FALSE },
+ { NULL, 0, FALSE }
};
const char * filename;
char * full_string;
char * base_string;
unsigned int i;
-
+ static int fixed_format_max_len = -1;
if (! entry->is_archive)
return FALSE;
+ if (fixed_format_max_len < 0)
+ {
+ fixed_format_max_len = 0;
+ for (i = 0; libname_fmt[i].format; i++)
+ {
+ if (fixed_format_max_len < libname_fmt[i].fixed_len)
+ fixed_format_max_len = libname_fmt[i].fixed_len;
+ }
+ }
+
filename = entry->filename;
full_string = xmalloc (strlen (search->name)
+ strlen (filename)
- /* Allow space for the characters in the format
- string. Also allow for the path separator that
- is appended after the search name. We actually
- allow 1 more byte than is strictly necessary,
- but this will not hurt. */
- + sizeof libname_fmt[0].format
+ /* Allow space for the fixed characters in the format
+ string. */
+ + fixed_format_max_len
+ /* Also allow for the path separator that
+ is appended after the search name. */
+ + sizeof ("/") - 1
#ifdef DLL_SUPPORT
+ (pe_dll_search_prefix
? strlen (pe_dll_search_prefix) : 0)
next prev parent reply other threads:[~2006-06-24 13:03 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-06-19 9:35 Danny Smith
2006-06-22 13:52 ` Nick Clifton
2006-06-24 17:32 ` Pedro Alves [this message]
2006-06-25 13:50 ` Pedro Alves
2006-06-26 12:32 ` Pedro Alves
2006-06-27 14:57 ` Nick Clifton
2006-06-20 7:39 Ross Ridge
2006-06-20 8:51 Danny Smith
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=449D37EB.3030407@portugalmail.pt \
--to=pedro_alves@portugalmail.pt \
--cc=binutils@sourceware.org \
--cc=dannysmith@clear.net.nz \
--cc=me@cgf.cx \
--cc=nickc@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).