[Bug libbacktrace/96971] New: libbacktrace identifies object format as pecoff instead of macho
fxcoudert at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Sep 8 10:30:48 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96971
Bug ID: 96971
Summary: libbacktrace identifies object format as pecoff
instead of macho
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libbacktrace
Assignee: unassigned at gcc dot gnu.org
Reporter: fxcoudert at gcc dot gnu.org
CC: ian at gcc dot gnu.org
Target Milestone: ---
This is happening on the current port of GCC to aarch64-apple-darwin20
(https://github.com/iains/gcc-darwin-arm64/issues/25) but I believe the issue
is more general.
The file format detection is done by running the libbacktrace/filetype.awk AWK
script on an object file, generated by the compiler. During a bootstrap on
aarch64-apple-darwin20, I see a weird behaviour:
../../ibin/libbacktrace/config.log:libbacktrace_cv_sys_filetype=pecoff
../../ibin/prev-libbacktrace/config.log:libbacktrace_cv_sys_filetype=macho
../../ibin/stage1-libbacktrace/config.log:libbacktrace_cv_sys_filetype=macho
so the stage 3 libbacktrace is getting pecoff instead of macho. Yet, it is a
correct macho object file, with the right signature:
$ xxd /tmp/conftest.17440.o
00000000: cffa edfe 0c00 0001 0000 0000 0100 0000 ................
00000010: 0400 0000 3804 0000 0020 0000 0000 0000 ....8.... ......
00000020: 1900 0000 b803 0000 0000 0000 0000 0000 ................
00000030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000040: 2c02 0000 0000 0000 5804 0000 0000 0000 ,.......X.......
00000050: 2802 0000 0000 0000 0700 0000 0700 0000 (...............
00000060: 0b00 0000 0000 0000 5f5f 7465 7874 0000 ........__text..
00000070: 0000 0000 0000 0000 5f5f 5445 5854 0000 ........__TEXT..
00000080: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000090: 0000 0000 0000 0000 5804 0000 0000 0000 ........X.......
000000a0: 0000 0000 0000 0000 0000 0080 0000 0000 ................
000000b0: 0000 0000 0000 0000 5f5f 7465 7874 5f73 ........__text_s
000000c0: 7461 7274 7570 0000 5f5f 5445 5854 0000 tartup..__TEXT..
000000d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000e0: 0800 0000 0000 0000 5804 0000 0400 0000 ........X.......
000000f0: 0000 0000 0000 0000 0004 0080 0000 0000 ................
00000100: 0000 0000 0000 0000 5f5f 636f 6d6d 6f6e ........__common
00000110: 0000 0000 0000 0000 5f5f 4441 5441 0000 ........__DATA..
00000120: 0000 0000 0000 0000 2802 0000 0000 0000 ........(.......
00000130: 0400 0000 0000 0000 0000 0000 0200 0000 ................
00000140: 0000 0000 0000 0000 0100 0000 0000 0000 ................
00000150: 0000 0000 0000 0000 5f5f 6465 6275 675f ........__debug_
00000160: 696e 666f 0000 0000 5f5f 4457 4152 4600 info....__DWARF.
00000170: 0000 0000 0000 0000 0800 0000 0000 0000 ................
00000180: ed00 0000 0000 0000 6004 0000 0000 0000 ........`.......
00000190: 8006 0000 0300 0000 0000 0002 0000 0000 ................
000001a0: 0000 0000 0000 0000 5f5f 6465 6275 675f ........__debug_
000001b0: 6162 6272 6576 0000 5f5f 4457 4152 4600 abbrev..__DWARF.
000001c0: 0000 0000 0000 0000 f500 0000 0000 0000 ................
000001d0: 5700 0000 0000 0000 4d05 0000 0000 0000 W.......M.......
000001e0: 0000 0000 0000 0000 0000 0002 0000 0000 ................
000001f0: 0000 0000 0000 0000 5f5f 6465 6275 675f ........__debug_
00000200: 7075 626e 616d 6573 5f5f 4457 4152 4600 pubnames__DWARF.
00000210: 0000 0000 0000 0000 4c01 0000 0000 0000 ........L.......
00000220: 2700 0000 0000 0000 a405 0000 0000 0000 '...............
00000230: 0000 0000 0000 0000 0000 0002 0000 0000 ................
00000240: 0000 0000 0000 0000 5f5f 6465 6275 675f ........__debug_
00000250: 7075 6274 7970 6573 5f5f 4457 4152 4600 pubtypes__DWARF.
00000260: 0000 0000 0000 0000 7301 0000 0000 0000 ........s.......
00000270: 1a00 0000 0000 0000 cb05 0000 0000 0000 ................
00000280: 0000 0000 0000 0000 0000 0002 0000 0000 ................
00000290: 0000 0000 0000 0000 5f5f 6465 6275 675f ........__debug_
000002a0: 6172 616e 6765 7300 5f5f 4457 4152 4600 aranges.__DWARF.
000002b0: 0000 0000 0000 0000 8d01 0000 0000 0000 ................
000002c0: 3000 0000 0000 0000 e505 0000 0000 0000 0...............
000002d0: 9806 0000 0100 0000 0000 0002 0000 0000 ................
000002e0: 0000 0000 0000 0000 5f5f 6465 6275 675f ........__debug_
000002f0: 6c69 6e65 0000 0000 5f5f 4457 4152 4600 line....__DWARF.
00000300: 0000 0000 0000 0000 bd01 0000 0000 0000 ................
00000310: 4a00 0000 0000 0000 1506 0000 0000 0000 J...............
00000320: a006 0000 0100 0000 0000 0002 0000 0000 ................
00000330: 0000 0000 0000 0000 5f5f 6465 6275 675f ........__debug_
00000340: 7374 7200 0000 0000 5f5f 4457 4152 4600 str.....__DWARF.
00000350: 0000 0000 0000 0000 0702 0000 0000 0000 ................
00000360: 0000 0000 0000 0000 5f06 0000 0000 0000 ........_.......
00000370: 0000 0000 0000 0000 0000 0002 0000 0000 ................
00000380: 0000 0000 0000 0000 5f5f 636f 6d70 6163 ........__compac
00000390: 745f 756e 7769 6e64 5f5f 4c44 0000 0000 t_unwind__LD....
000003a0: 0000 0000 0000 0000 0802 0000 0000 0000 ................
000003b0: 2000 0000 0000 0000 6006 0000 0300 0000 .......`.......
000003c0: a806 0000 0100 0000 0000 0002 0000 0000 ................
000003d0: 0000 0000 0000 0000 3200 0000 1800 0000 ........2.......
000003e0: 0100 0000 0000 0b00 0000 0000 0000 0000 ................
000003f0: 0200 0000 1800 0000 b006 0000 0900 0000 ................
00000400: 4007 0000 3400 0000 0b00 0000 5000 0000 @...4.......P...
00000410: 0000 0000 0700 0000 0700 0000 0200 0000 ................
00000420: 0900 0000 0000 0000 0000 0000 0000 0000 ................
00000430: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000440: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000450: 0000 0000 0000 0000 0000 8052 c003 5fd6 ...........R.._.
00000460: e900 0000 0200 0000 0000 0801 474e 5520 ............GNU
00000470: 4331 3720 3131 2e30 2e30 2032 3032 3030 C17 11.0.0 20200
00000480: 3930 3720 2865 7870 6572 696d 656e 7461 907 (experimenta
00000490: 6c29 202d 6650 4943 202d 6d6d 6163 6f73 l) -fPIC -mmacos
000004a0: 782d 7665 7273 696f 6e2d 6d69 6e3d 3131 x-version-min=11
000004b0: 2e30 2e30 202d 6d6c 6974 746c 652d 656e .0.0 -mlittle-en
000004c0: 6469 616e 202d 6d61 6269 3d6c 7036 3420 dian -mabi=lp64
000004d0: 2d67 202d 4f32 0001 636f 6e66 7465 7374 -g -O2..conftest
000004e0: 2e63 002f 5573 6572 732f 6678 2f69 6269 .c./Users/fx/ibi
000004f0: 6e2f 6c69 6262 6163 6b74 7261 6365 0001 n/libbacktrace..
00000500: 0000 0000 0269 0001 1d05 b900 0000 0109 .....i..........
00000510: 0328 0200 0000 0000 0003 0405 696e 7400 .(..........int.
00000520: 0401 6d61 696e 0001 1f01 b900 0000 0000 ..main..........
00000530: 0000 0000 0000 0800 0000 0000 0000 028f ................
00000540: 0005 6a00 0121 05b9 0000 0000 0001 1101 ..j..!..........
00000550: 2508 130b 0308 1b08 b442 0c10 0600 0002 %........B......
00000560: 3400 0308 3a0b 3b0b 390b 4913 3f0c 020a 4...:.;.9.I.?...
00000570: 0000 0324 000b 0b3e 0b03 0800 0004 2e01 ...$...>........
00000580: 3f0c 0308 3a0b 3b0b 390b 4913 1101 1201 ?...:.;.9.I.....
00000590: 400a 0000 0534 0003 083a 0b3b 0b39 0b49 @....4...:.;.9.I
000005a0: 1300 0000 2300 0000 0200 0000 0000 ed00 ....#...........
000005b0: 0000 a400 0000 6900 a400 0000 6900 c000 ......i.....i...
000005c0: 0000 6d61 696e 0000 0000 0016 0000 0002 ..main..........
000005d0: 0000 0000 00ed 0000 00b9 0000 0069 6e74 .............int
000005e0: 0000 0000 002c 0000 0002 0000 0000 0008 .....,..........
000005f0: 0000 0000 0000 0000 0000 0000 0008 0000 ................
00000600: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000610: 0000 0000 0046 0000 0004 0022 0000 0001 .....F....."....
00000620: 0101 fb0e 0d00 0101 0101 0000 0001 0000 ................
00000630: 0100 636f 6e66 7465 7374 2e63 0000 0000 ..conftest.c....
00000640: 0005 0100 0902 0000 0000 0000 0000 031f ................
00000650: 0113 0503 1313 0501 0613 0208 0001 0100 ................
00000660: 0000 0000 0000 0000 0800 0000 0000 0002 ................
00000670: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000680: d600 0000 0200 0006 ce00 0000 0200 0006 ................
00000690: b100 0000 0300 0006 1000 0000 0200 0006 ................
000006a0: 3100 0000 0200 0006 0000 0000 0200 0006 1...............
000006b0: 2e00 0000 0e01 0000 0000 0000 0000 0000 ................
000006c0: 2800 0000 0e02 0000 0000 0000 0000 0000 (...............
000006d0: 2200 0000 0e03 0000 2802 0000 0000 0000 ".......(.......
000006e0: 1c00 0000 0e06 0000 4c01 0000 0000 0000 ........L.......
000006f0: 1600 0000 0e07 0000 7301 0000 0000 0000 ........s.......
00000700: 1000 0000 0e08 0000 8d01 0000 0000 0000 ................
00000710: 0a00 0000 0e0b 0000 0802 0000 0000 0000 ................
00000720: 0700 0000 0f03 0000 2802 0000 0000 0000 ........(.......
00000730: 0100 0000 0f02 0000 0000 0000 0000 0000 ................
00000740: 005f 6d61 696e 005f 6900 6c74 6d70 3600 ._main._i.ltmp6.
00000750: 6c74 6d70 3500 6c74 6d70 3400 6c74 6d70 ltmp5.ltmp4.ltmp
00000760: 3300 6c74 6d70 3200 6c74 6d70 3100 6c74 3.ltmp2.ltmp1.lt
00000770: 6d70 3000 mp0.
but some bytes later in the file appear to be matching the PECOFF signature.
The filetype.awk script needs to be adapted, I see two possibilities:
- either the check for signatures is made to match only the beginning of the
file, with ^ at the beginning of each pattern
- or the macho tests are moved above the other ones, since their signature is
more specific (and less likely to happen by random in another object file)
I have tested the second solution, and it works fine:
diff --git a/libbacktrace/filetype.awk b/libbacktrace/filetype.awk
index 14d91581f7e..5cc31a07f46 100644
--- a/libbacktrace/filetype.awk
+++ b/libbacktrace/filetype.awk
@@ -1,13 +1,13 @@
# An awk script to determine the type of a file.
-/\177ELF\001/ { if (NR == 1) { print "elf32"; exit } }
-/\177ELF\002/ { if (NR == 1) { print "elf64"; exit } }
-/\114\001/ { if (NR == 1) { print "pecoff"; exit } }
-/\144\206/ { if (NR == 1) { print "pecoff"; exit } }
-/\001\337/ { if (NR == 1) { print "xcoff32"; exit } }
-/\001\367/ { if (NR == 1) { print "xcoff64"; exit } }
/\376\355\372\316/ { if (NR == 1) { print "macho"; exit } }
/\316\372\355\376/ { if (NR == 1) { print "macho"; exit } }
/\376\355\372\317/ { if (NR == 1) { print "macho"; exit } }
/\317\372\355\376/ { if (NR == 1) { print "macho"; exit } }
/\312\376\272\276/ { if (NR == 1) { print "macho"; exit } }
/\276\272\376\312/ { if (NR == 1) { print "macho"; exit } }
+/\177ELF\001/ { if (NR == 1) { print "elf32"; exit } }
+/\177ELF\002/ { if (NR == 1) { print "elf64"; exit } }
+/\114\001/ { if (NR == 1) { print "pecoff"; exit } }
+/\144\206/ { if (NR == 1) { print "pecoff"; exit } }
+/\001\337/ { if (NR == 1) { print "xcoff32"; exit } }
+/\001\367/ { if (NR == 1) { print "xcoff64"; exit } }
More information about the Gcc-bugs
mailing list