From 61d416e3b2b67138dc2c51d954b321c6db15e30f Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Tue, 18 Mar 2008 22:45:11 +0000 Subject: [PATCH] Add Linux support to find_typedefs, with help from Alvaro. --- src/tools/find_typedef | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/tools/find_typedef b/src/tools/find_typedef index 1b0930ca35..26715777a3 100755 --- a/src/tools/find_typedef +++ b/src/tools/find_typedef @@ -1,6 +1,6 @@ #!/bin/sh -# $PostgreSQL: pgsql/src/tools/find_typedef,v 1.8 2007/12/21 21:02:41 momjian Exp $ +# $PostgreSQL: pgsql/src/tools/find_typedef,v 1.9 2008/03/18 22:45:11 momjian Exp $ # This script attempts to find all typedef's in the postgres binaries # by using 'nm' to report all typedef debugging symbols. @@ -8,7 +8,7 @@ # For this program to work, you must have compiled all binaries with # debugging symbols. # -# This is run on BSD/OS 4.0, so you may need to make changes. +# This is run on BSD/OS 4.0 or Linux, so you may need to make changes. # # Ignore the nm errors about a file not being a binary file. # @@ -37,10 +37,18 @@ fi for DIR do - objdump --stabs "$DIR"/* | - awk ' $2 == "LSYM" && $7 ~ /:[tT]/ {sub(":.*", "", $7); print $7}' | - grep -v ' ' # some typedefs have spaces, remove them + if [ `objdump -W 2>&1 | wc -l` -eq 1 ] + then # Linux + # unfortunately the Linux version doesn't show unreferenced typedefs + objdump -W "$DIR"/* | + egrep -A3 '(DW_TAG_typedef|DW_TAG_structure_type|DW_TAG_union_type)' | + awk ' $2 == "DW_AT_name" {print $NF}' + else # BSD/OS + objdump --stabs "$DIR"/* | + awk ' $2 == "LSYM" && $7 ~ /:[tT]/ {sub(":.*", "", $7); print $7}' + fi done | +grep -v ' ' | # some typedefs have spaces, remove them sort | uniq | # these are used both for typedefs and variable names -- 2.40.0