From: | Andres Freund <andres(at)anarazel(dot)de> |
---|---|
To: | Andrew Dunstan <andrew(at)dunslane(dot)net> |
Cc: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, pgsql-hackers(at)lists(dot)postgresql(dot)org |
Subject: | Re: buildfarm's typedefs list has gone completely nutso |
Date: | 2019-07-17 02:35:39 |
Message-ID: | 20190717023539.avdxldvt7cpw347l@alap3.anarazel.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi,
On 2019-07-10 17:24:41 -0700, Andres Freund wrote:
> Not yet sure what's actually going on, but there's something odd with
> debug information afaict:
>
> objdump -W spits out warnings for a few files, all static libraries:
>
> ../install/lib/libpgcommon.a
> objdump: Warning: Location list starting at offset 0x0 is not terminated.
> objdump: Warning: Hole and overlap detection requires adjacent view lists and loclists.
> objdump: Warning: There are 3411 unused bytes at the end of section .debug_loc
...
Interestingly, for the same files, readelf spits out correct
data. E.g. here's a short excerpt from libpq.a:
objdump -W src/interfaces/libpq/libpq.a
...
<0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
<c> DW_AT_producer : (indirect string, offset: 0x0): SYNC_FILE_RANGE_WRITE 2
<10> DW_AT_language : 12 (ANSI C99)
<11> DW_AT_name : (indirect string, offset: 0x0): SYNC_FILE_RANGE_WRITE 2
<15> DW_AT_comp_dir : (indirect string, offset: 0x0): SYNC_FILE_RANGE_WRITE 2
...
<1><31>: Abbrev Number: 2 (DW_TAG_typedef)
<32> DW_AT_name : Oid
<36> DW_AT_decl_file : 30
<37> DW_AT_decl_line : 31
<38> DW_AT_decl_column : 22
<39> DW_AT_type : <0x3d>
<1><3d>: Abbrev Number: 3 (DW_TAG_base_type)
<3e> DW_AT_byte_size : 4
<3f> DW_AT_encoding : 7 (unsigned)
<40> DW_AT_name : (indirect string, offset: 0x0): SYNC_FILE_RANGE_WRITE 2
<1><44>: Abbrev Number: 3 (DW_TAG_base_type)
<45> DW_AT_byte_size : 8
<46> DW_AT_encoding : 5 (signed)
<47> DW_AT_name : (indirect string, offset: 0x0): SYNC_FILE_RANGE_WRITE 2
<1><4b>: Abbrev Number: 4 (DW_TAG_typedef)
<4c> DW_AT_name : (indirect string, offset: 0x0): SYNC_FILE_RANGE_WRITE 2
<50> DW_AT_decl_file : 2
<51> DW_AT_decl_line : 216
<52> DW_AT_decl_column : 23
<53> DW_AT_type : <0x57>
...
readelf --debug-dump src/interfaces/libpq/libpq.a
...
<0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
<c> DW_AT_producer : (indirect string, offset: 0x29268): GNU C17 8.3.0 -march=skylake -mmmx -mno-3dnow -msse -msse2 -m
<10> DW_AT_language : 12 (ANSI C99)
<11> DW_AT_name : (indirect string, offset: 0x28ef3): /home/andres/src/postgresql/src/interfaces/libpq/fe-auth.c
<15> DW_AT_comp_dir : (indirect string, offset: 0xf800): /home/andres/build/postgres/dev-assert/vpath/src/interfaces/l
...
<1><31>: Abbrev Number: 2 (DW_TAG_typedef)
<32> DW_AT_name : Oid
<36> DW_AT_decl_file : 30
<37> DW_AT_decl_line : 31
<38> DW_AT_decl_column : 22
<39> DW_AT_type : <0x3d>
<1><3d>: Abbrev Number: 3 (DW_TAG_base_type)
<3e> DW_AT_byte_size : 4
<3f> DW_AT_encoding : 7 (unsigned)
<40> DW_AT_name : (indirect string, offset: 0x4f12f): unsigned int
<1><44>: Abbrev Number: 3 (DW_TAG_base_type)
<45> DW_AT_byte_size : 8
<46> DW_AT_encoding : 5 (signed)
<47> DW_AT_name : (indirect string, offset: 0x57deb): long int
<1><4b>: Abbrev Number: 4 (DW_TAG_typedef)
<4c> DW_AT_name : (indirect string, offset: 0x26129): size_t
<50> DW_AT_decl_file : 2
<51> DW_AT_decl_line : 216
<52> DW_AT_decl_column : 23
<53> DW_AT_type : <0x57>
...
so it seems that objdump mis-parses all indirect strings - which IIRC is
something like a pointer into a "global" string table, assuming the
offset to be 0. That then just returns the first table entry.
It doesn't happen with a slightly older version of binutils. Bisecting
now.
Greetings,
Andres Freund
From | Date | Subject | |
---|---|---|---|
Next Message | Matsumura, Ryo | 2019-07-17 02:40:20 | RE: Bug: ECPG: Cannot use CREATE AS EXECUTE statemnt |
Previous Message | Michael Paquier | 2019-07-17 01:51:44 | pg_stat_replication lag fields return non-NULL values even with NULL LSNs |