diff options
author | Rudy Y <rudyy.id@gmail.com> | 2016-12-01 14:43:36 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2016-12-01 14:43:36 +0000 |
commit | 4ee1d7e401a8c1aedfdc86aac7faa8267eab1e5c (patch) | |
tree | 0cfbbf1eb62cc0b015af081bda8dc8b9b888b2e4 /ld/pe-dll.c | |
parent | Fix calculation of synthetic symbol sizes (ppc64) (diff) | |
download | binutils-gdb-4ee1d7e401a8c1aedfdc86aac7faa8267eab1e5c.tar.gz binutils-gdb-4ee1d7e401a8c1aedfdc86aac7faa8267eab1e5c.tar.bz2 binutils-gdb-4ee1d7e401a8c1aedfdc86aac7faa8267eab1e5c.zip |
Fix generation of IDATA[6] for PE files.
PR ld/20880
* pe-dll.c (make_one): Use the hint if the ordinal is -1.
Diffstat (limited to 'ld/pe-dll.c')
-rw-r--r-- | ld/pe-dll.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/ld/pe-dll.c b/ld/pe-dll.c index 055a6cf32c0..9d87cd2306a 100644 --- a/ld/pe-dll.c +++ b/ld/pe-dll.c @@ -2266,6 +2266,8 @@ make_one (def_file_export *exp, bfd *parent, bfd_boolean include_jmp_stub) } else { + int ord; + /* { short, asciz } */ if (exp->its_name) len = 2 + strlen (exp->its_name) + 1; @@ -2277,8 +2279,13 @@ make_one (def_file_export *exp, bfd *parent, bfd_boolean include_jmp_stub) d6 = xmalloc (len); id6->contents = d6; memset (d6, 0, len); - d6[0] = exp->hint & 0xff; - d6[1] = exp->hint >> 8; + + /* PR 20880: Use exp->hint as a backup, just in case exp->ordinal + contains an invalid value (-1). */ + ord = (exp->ordinal >= 0) ? exp->ordinal : exp->hint; + d6[0] = ord; + d6[1] = ord >> 8; + if (exp->its_name) strcpy ((char*) d6 + 2, exp->its_name); else |