Thread: find_typedef alternative that works on mainstream systems

find_typedef alternative that works on mainstream systems

From
Alvaro Herrera
Date:
Hi,

I just came across objdump -W which dumps the DWARF info from a object
file.  This is useful to build a typedef file for pgindent.  It can be
used like this:

objdump  -W $object_file | \
awk '/DW_TAG_/ { grab=0 } /DW_TAG_typedef/ { grab=1 } /DW_AT_name/ { if (grab) { print $0 } }' | \
sed -e 's/^.*: \([^ ]*\)/\1/' | \
sort | \
uniq

I am disappointed by the fact that our current find_typedef script only
works on Bruce's rare platforms -- and we stopped shipping a "standard"
typedef file, which makes the problem worse.

--
Alvaro Herrera                                http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

Re: find_typedef alternative that works on mainstream systems

From
Alvaro Herrera
Date:
Alvaro Herrera wrote:

> objdump  -W $object_file | \
> awk '/DW_TAG_/ { grab=0 } /DW_TAG_typedef/ { grab=1 } /DW_AT_name/ { if (grab) { print $0 } }' | \
> sed -e 's/^.*: \([^ ]*\)/\1/' | \
> sort | \
> uniq

I oversimplified the awk line, causing some garbage to appear at the end
:-(  The full awk line I am using is 

awk '
/^Contents of / { if (read) exit }
/^The section / { if (read) exit }
/^The section .debug_info contains:/ { read=1 }
/DW_TAG_/ { grab=0 }
/DW_TAG_typedef/ { grab=1 }
/DW_AT_name/ { if (read && grab) { print $0 } }
'

-- 
Alvaro Herrera                                http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support


Re: find_typedef alternative that works on mainstream systems

From
Bruce Momjian
Date:
Alvaro Herrera wrote:
> Alvaro Herrera wrote:
> 
> > objdump  -W $object_file | \
> > awk '/DW_TAG_/ { grab=0 } /DW_TAG_typedef/ { grab=1 } /DW_AT_name/ { if (grab) { print $0 } }' | \
> > sed -e 's/^.*: \([^ ]*\)/\1/' | \
> > sort | \
> > uniq
> 
> I oversimplified the awk line, causing some garbage to appear at the end
> :-(  The full awk line I am using is 
> 
> awk '
> /^Contents of / { if (read) exit }
> /^The section / { if (read) exit }
> /^The section .debug_info contains:/ { read=1 }
> /DW_TAG_/ { grab=0 }
> /DW_TAG_typedef/ { grab=1 }
> /DW_AT_name/ { if (read && grab) { print $0 } }
> '

objdump errors on the -W option here (returns -1) so put some
conditional logic in tools/find_typedef and we should be fine.

--  Bruce Momjian  <bruce@momjian.us>        http://momjian.us EnterpriseDB
http://postgres.enterprisedb.com
 + If your life is a hard drive, Christ can be your backup. +