aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/pa/pa-hpux.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/pa/pa-hpux.h')
-rw-r--r--gcc/config/pa/pa-hpux.h25
1 files changed, 22 insertions, 3 deletions
diff --git a/gcc/config/pa/pa-hpux.h b/gcc/config/pa/pa-hpux.h
index 4ba244e..45ea1b2 100644
--- a/gcc/config/pa/pa-hpux.h
+++ b/gcc/config/pa/pa-hpux.h
@@ -48,6 +48,25 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
pretend they are `extern "C"'. */
#define NO_IMPLICIT_EXTERN_C
-/* The HPUX linker duplicates all text symbols when given -E; this confuses
- collect2. */
-#define COLLECT_SUPPRESS_OPTIONS "E"
+/* We need to use the vendor nm for collect, since GNU nm isn't clever
+ enough to distinguish between the duplicate symbols used with shared
+ libraries under HPUX. */
+#define REAL_NM_FILE_NAME "/bin/nm"
+
+/* To the hpux nm, -p means BSD-style output; we don't want that. */
+#define NM_FLAGS "-h"
+
+/* When dealing with shared libraries, the hpux ld can create duplicate
+ symbols. The fourth field of nm's output distinguishes between the real
+ one (type "code") and the fake one (type "entry"). */
+#define COLLECT_QUALIFY_MATCH \
+{ \
+ char *p = end; \
+ int cnt = 0; \
+ for (; *p != '\n';) \
+ if (*p++ == '|' \
+ && ++cnt == 3) \
+ break; \
+ if (*p != 'c') \
+ continue; \
+}