aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2025-01-11 20:42:09 +0200
committerMartin Storsjö <martin@martin.st>2025-01-15 23:50:53 +0200
commitc2fe3b5642e94b6fc2f2a19e54b7d9f447c8a151 (patch)
tree19ea47d001bcc23e6a4cb5eba7a8f161c837e087
parent1c136b8ee9b9fb402b66957bd51e89e47b94a0f6 (diff)
downloadgdb-c2fe3b5642e94b6fc2f2a19e54b7d9f447c8a151.zip
gdb-c2fe3b5642e94b6fc2f2a19e54b7d9f447c8a151.tar.gz
gdb-c2fe3b5642e94b6fc2f2a19e54b7d9f447c8a151.tar.bz2
Add support for IMPORT_CONST in ILF (MSVC style) import libraries
This is a very strange and obsolete kind of import type; it is used for imported data just like IMPORT_DATA - but with an extra odd caveat. The behaviour is explained at [1]; generating such import libraries with current MSVC tools produces "warning LNK4087: CONSTANT keyword is obsolete; use DATA". While obsolete, some import libraries within the Microsoft WDK (Windows Driver Kit) do contain such symbols, which currently are ignored by binutils and produce warnings about "file format not recognized". For IMPORT_CONST for a DLL exported symbol "foo", we should provide the import library symbols "__imp_foo" and "foo". For IMPORT_DATA, we only provide "__imp_foo", and for IMPORT_CODE, "foo" points at a thunk. The odd/surprising thing for IMPORT_CONST is that the "foo" symbol also points at the same thing as "__imp_foo", i.e. directly at the IAT entry. [1] https://learn.microsoft.com/en-us/cpp/build/importing-using-def-files Signed-off-by: Martin Storsjö <martin@martin.st>
-rw-r--r--bfd/peicode.h13
1 files changed, 6 insertions, 7 deletions
diff --git a/bfd/peicode.h b/bfd/peicode.h
index c48953d..ad4f196 100644
--- a/bfd/peicode.h
+++ b/bfd/peicode.h
@@ -815,14 +815,8 @@ pe_ILF_build_a_bfd (bfd * abfd,
{
case IMPORT_CODE:
case IMPORT_DATA:
- break;
-
case IMPORT_CONST:
- /* XXX code yet to be written. */
- /* xgettext:c-format */
- _bfd_error_handler (_("%pB: unhandled import type; %x"),
- abfd, import_type);
- return false;
+ break;
default:
/* xgettext:c-format */
@@ -1082,6 +1076,7 @@ pe_ILF_build_a_bfd (bfd * abfd,
break;
case IMPORT_DATA:
+ case IMPORT_CONST:
break;
default:
@@ -1102,6 +1097,10 @@ pe_ILF_build_a_bfd (bfd * abfd,
/* Nothing to do here. */
break;
+ case IMPORT_CONST:
+ pe_ILF_make_a_symbol (&vars, "", symbol_name, id5, 0);
+ break;
+
default:
/* XXX code not yet written. */
abort ();