diff --git a/src/tools/find_typedef b/src/tools/find_typedef
index 5ce2d1f23b166aec3ea7555d21a5289503ed424c..0474245ba695a25b61bd1506d1b0488fd2078e89 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.13 2009/06/10 15:13:45 momjian Exp $
+# $PostgreSQL: pgsql/src/tools/find_typedef,v 1.14 2009/06/11 03:14:08 momjian Exp $
 
 # This script attempts to find all typedef's in the postgres binaries
 # by using 'nm' to report all typedef debugging symbols.
@@ -47,6 +47,11 @@ do	# if objdump -W is recognized, only one line of error should appear
 		objdump -W "$DIR"/* |
 		egrep -A3 'DW_TAG_typedef' |
 		awk ' $2 == "DW_AT_name" {print $NF}'
+	elif [ `readelf -w 2>&1 | wc -l` -gt 1 ]
+	then	# FreeBSD, similar output to Linux
+		readelf -w "$DIR"/* |
+		egrep -A3 '\(DW_TAG_typedef\)' |
+		awk ' $1 == "DW_AT_name" {print $NF}'
 	else	# BSD/OS
 		objdump --stabs "$DIR"/* |
 		awk ' $2 == "LSYM" && $7 ~ /:t/ {sub(":.*", "", $7); print $7}'