From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25698 invoked by alias); 20 Jul 2011 15:21:42 -0000 Received: (qmail 25686 invoked by uid 22791); 20 Jul 2011 15:21:39 -0000 X-SWARE-Spam-Status: No, hits=-5.7 required=5.0 tests=AWL,BAYES_50,RCVD_IN_DNSWL_HI,RP_MATCHES_RCVD,SPF_HELO_PASS X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 20 Jul 2011 15:21:25 +0000 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p6KFLPvS022307 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 20 Jul 2011 11:21:25 -0400 Received: from host1.jankratochvil.net (ovpn-116-20.ams2.redhat.com [10.36.116.20]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id p6KFLMcI008712 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 20 Jul 2011 11:21:24 -0400 Received: from host1.jankratochvil.net (localhost [127.0.0.1]) by host1.jankratochvil.net (8.14.4/8.14.4) with ESMTP id p6KFLMpn024899; Wed, 20 Jul 2011 17:21:22 +0200 Received: (from jkratoch@localhost) by host1.jankratochvil.net (8.14.4/8.14.4/Submit) id p6KFLL0m024894; Wed, 20 Jul 2011 17:21:21 +0200 Date: Wed, 20 Jul 2011 15:55:00 -0000 From: Jan Kratochvil To: binutils@sourceware.org Cc: DJ Delorie Subject: [patch] coff-stgo32: Fix false format match Message-ID: <20110720152121.GA7004@host1.jankratochvil.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-IsSubscribed: yes Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org X-SW-Source: 2011-07/txt/msg00186.txt.bz2 Hello DJ, on fedora-rawhide-x86_64 with -m32 (not on fedora-rawhide-i386) GDB gets false: FAIL: gdb.base/solib-nodir.exp: running to main in runto (end of file) FAIL: gdb.base/solib-nodir.exp: library loaded because the ELF32 i386 file gets falsely matched as I386PTXMAGIC COFF file. BFD/GDB then crashes on trying to read that file; fix of that crash is outside of scope of this patch, it would not work with the COFF format anyway. No regressions x86_64-fedora16pre-linux-gnu --target=i386-unknown-go32. Thanks, Jan bfd/ 2011-07-20 Jan Kratochvil Fix false coff-go32-exe matches. * coff-i386.c (TARGET_SYM) <_bfd_check_format>: Conditionally use COFF_CHECK_FORMAT. * coff-stgo32.c (go32_check_format): New forward declaration. (COFF_CHECK_FORMAT): New defintion. (go32_check_format): New function. --- a/bfd/coff-i386.c +++ b/bfd/coff-i386.c @@ -671,8 +671,13 @@ const bfd_target bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */ /* Note that we allow an object file to be treated as a core file as well. */ - {_bfd_dummy_target, coff_object_p, /* bfd_check_format */ - bfd_generic_archive_p, coff_object_p}, + /* bfd_check_format */ +#ifdef COFF_CHECK_FORMAT + {_bfd_dummy_target, COFF_CHECK_FORMAT, + bfd_generic_archive_p, COFF_CHECK_FORMAT}, +#else + {_bfd_dummy_target, coff_object_p, bfd_generic_archive_p, coff_object_p}, +#endif {bfd_false, coff_mkobject, _bfd_generic_mkarchive, /* bfd_set_format */ bfd_false}, {bfd_false, coff_write_object_contents, /* bfd_write_contents */ --- a/bfd/coff-stgo32.c +++ b/bfd/coff-stgo32.c @@ -95,6 +95,10 @@ create_go32_stub PARAMS ((bfd *)); #define COFF_ADJUST_AUX_OUT_PRE adjust_aux_out_pre #define COFF_ADJUST_AUX_OUT_POST adjust_aux_out_post +static const bfd_target *go32_check_format (bfd *abfd); + +#define COFF_CHECK_FORMAT go32_check_format + static bfd_boolean go32_stubbed_coff_bfd_copy_private_bfd_data PARAMS ((bfd *, bfd *)); @@ -414,3 +418,23 @@ go32_stubbed_coff_bfd_copy_private_bfd_data (ibfd, obfd) return TRUE; } + +/* coff_object_p only checks 2 bytes F_MAGIC at GO32_STUBSIZE inside the file + which is too fragile. */ + +static const bfd_target * +go32_check_format (bfd *abfd) +{ + char mz[2]; + + if (bfd_bread (mz, 2, abfd) != 2 || mz[0] != 'M' || mz[1] != 'Z') + { + bfd_set_error (bfd_error_wrong_format); + return NULL; + } + + if (bfd_seek (abfd, 0, SEEK_SET) != 0) + return NULL; + + return coff_object_p (abfd); +} begin 755 solib-nodir.so.gz M'XL("+;O)DX"`W-O;&EB+6YO9&ER+G-O`)U7?6@41Q2?O;O$BSGC);U\:%(\ M6BF)K=LDFO@)YL,D:F-BD]A:0EPNV35W>G>KMQM)Q%KC58@-`:FA?[3_"$(+ M%HN@E!8I:).6]I\VM/8#2JG4#TX,&C$M1<3K>S.S=W/K^4<[Q[LW;]]OYLW. MO/=VWELM[:V2)!&K.>&'T@XG(:N!'U[`GJ\F?I)+*LFS9"E)HWG+882,>`G3 MHU#,R`,/?$"Y7.\`5@;ZLF)&,X01ZEV M9&GB_#[ZKH2T=>PDRXYM2ER__,IOG??J>O\X>_)8WH-SAYP_C7`[LJ/I^X7W#GQWL%=KL50O\Y0C+VSP_T MHDU^'W']@GZW#0];3&XXF%P$*T75L,N2/80H MRF!$CRJ&&8B9BD*44#1D$F4/,%`-#`>P&PB'#FE$V790Z=(&0X:IQ9K#`NY##\^[XK#N!`WM'IQ8\0\AX_)]D,GG\LIF3J,%IOL&_53`@/NWNG2(D M>0$W*WG&S>TES\">D2!V;U^#D]B=BD^[>W=W3<%]KL3,C5?3LW[ MQD]5H-4?S.+Q^"-F/W^"/COA6YZONFQBN63YV$L8ER''KE6B$,?=-- M3/?X*$;*G9S/>J`/&VPNF;B`W8F++]#UWW4E M9\9S03$TC^L4S\2`<8FIQS",[;]4[MQ0QGUC&*;`//0!\!X>M]1C#G41Z;!; M*O>X7&-2.@=L!!S&"6DLR=O/P] MX+5)*=!5!^M?=&!\LAP`;DI]''9%GW30]>FXECG@1T!^R.7_TS#G6FT%+&P] MT&:8K*VY>;V_$C)BE7^U7"_7^&NK:VJJZVO7^"N[--6_)6"RYRMKJIZ"75-3 M9\>NJK(E`%G5^H<&T7;7L8WE1#9&(F:@'[@98SQH]:*ZJ& M5$*E8,`($ED=B<)(QLT8TQS48D9(CV8("NAB6AAQK+,_;!*99CS9U(;AG^8] M60LJ>V*!B*8$U5A:(O*`J<<,,,/8W@%08IJC4\5T:C\0"0V`3=VD?\P`384R M9$*808]$M*A)5Z70EP^'HOO^PWF5\V^.P_9-M)KESQCV?X-?T.^KQ&@C]STB M?/O61?()=!Z>=W)^Q MCSZ-Y+?9Q:;R[ZN#Q\1%CA/?`V,C(N`PAI"L6%LHX`[R^7-Y["+)6?;O@(#S M.1E5VW!(AP4W.S[\B>?S_(1Q.VRQ0?2'=N=3\W-/%]+5RCX.+:C@'N8!2>E[DU\/1[F M@SCG2T+\YMGFZUE,R(CTY'SV)EE^0_N+XJ`&8'S"YD*S@<S>HGM8IED MR>QD>J1T/45X_F0R,WS$8>S.XK3D MA93O2,GYE%OW?R>/H,F4O(CR\RF9ER_%EKR8=I,PF+R%%4F;]LT3*K'>629GUUP8I ML][:)F765QU29GW5;9M?L8TWI,QZ"TJ@YI[.+J5]:WK7ULN#FJGL'U#,X%!TG]P_;"W9&OXD M9@`QJJ$KP4!4#4.=N/F-CL;M6YN)TM;>V=38KG2VMG:W]"@]C4WM+4JJ-,Q2 ?8C8TB`6AK3+%4I/6D!E%99::E)6P_P)C1HRJS1`````` ` end