From 296a868924f2c47865676a04515135b03c024bcc Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Mon, 19 May 2014 14:29:31 +0100 Subject: [PATCH] Extend the fix already created for PR 16858 so that it works with x86 PE targets as well. PR gas/16858 * config/tc-i386.c (md_apply_fix): Improve the detection of code symbols for 32-bit PE targets. --- gas/ChangeLog | 6 ++++++ gas/config/tc-i386.c | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/gas/ChangeLog b/gas/ChangeLog index 2243570..26cef7f 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2014-05-19 Nick Clifton + + PR gas/16858 + * config/tc-i386.c (md_apply_fix): Improve the detection of code + symbols for 32-bit PE targets. + 2014-05-18 Richard Sandiford * config/tc-mips.c (md_obj_begin): Delete. diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 707ce59..341d100 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -9151,6 +9151,16 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED) /* PR 16858: Do not modify weak function references. */ && ! fixP->fx_pcrel) { +#if !defined (TE_PEP) + /* For x86 PE weak function symbols are neither PC-relative + nor do they set S_IS_FUNCTION. So the only reliable way + to detect them is to check the flags of their containing + section. */ + if (S_GET_SEGMENT (fixP->fx_addsy) != NULL + && S_GET_SEGMENT (fixP->fx_addsy)->flags & SEC_CODE) + ; + else +#endif value -= S_GET_VALUE (fixP->fx_addsy); } #endif -- 2.7.4