* config/pa/tm-hppa.h: Define macro SMASH_TEXT_ADDRESS.
authorJim Kingdon <jkingdon@engr.sgi.com>
Fri, 28 Jan 1994 16:25:25 +0000 (16:25 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Fri, 28 Jan 1994 16:25:25 +0000 (16:25 +0000)
* elfread.c (record_minimal_symbol_and_info),
dwarfread.c (process_dies), paread.c (pa_symtab_read): Use it.

gdb/ChangeLog
gdb/config/pa/tm-hppa.h
gdb/dwarfread.c
gdb/elfread.c
gdb/paread.c

index 1ebe34a713bc9da053228950a7d7b6897ea9dc2a..831c121cb61690ae6bfb9c2987ecee7b95e822c4 100644 (file)
@@ -1,3 +1,9 @@
+Fri Jan 28 10:40:34 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       * config/pa/tm-hppa.h: Define macro SMASH_TEXT_ADDRESS.
+       * elfread.c (record_minimal_symbol_and_info),
+       dwarfread.c (process_dies), paread.c (pa_symtab_read): Use it.
+
 Thu Jan 27 15:12:23 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
 
        * i386-stub.c: Add ".text" right before "mem_fault:".
index f2afcc13973095c0e0a30bc6e307fe244440b449..4d970eacf06fa7b9a3e7228b2b18c4494703d4ab 100644 (file)
@@ -404,11 +404,14 @@ CORE_ADDR hppa_fix_call_dummy();
 
 #define PUSH_ARGUMENTS(nargs, args, sp, struct_return, struct_addr) \
     sp = hppa_push_arguments(nargs, args, sp, struct_return, struct_addr)
-
-/* Symbol files have two symbol tables.  Rather than do this right,
-   like the ELF symbol reading code, massive hackery was added
-   to dbxread.c and partial-stab.h.  This flag turns on that
-   hackery, which should all go away FIXME FIXME FIXME FIXME now.  */
+\f
+/* The low two bits of the PC on the PA contain the privilege level.  Some
+   genius implementing a (non-GCC) compiler apparently decided this means
+   that "addresses" in a text section therefore include a privilege level,
+   and thus symbol tables should contain these bits.  This seems like a
+   bonehead thing to do--anyway, it seems to work for our purposes to just
+   ignore those bits.  */
+#define SMASH_TEXT_ADDRESS(addr) ((addr) &= ~0x3)
 
 #define        GDB_TARGET_IS_HPPA
 
index 1d8931a3009d652250b38cf78a163fd77e505bb3..956fb7e6d59828c762d8bd16f5bfc10a86559746 100644 (file)
@@ -1989,6 +1989,11 @@ process_dies (thisdie, enddie, objfile)
            {
              nextdie = thisdie + di.die_length;
            }
+#ifdef SMASH_TEXT_ADDRESS
+         /* I think that these are always text, not data, addresses.  */
+         SMASH_TEXT_ADDRESS (di.at_low_pc);
+         SMASH_TEXT_ADDRESS (di.at_high_pc);
+#endif
          switch (di.die_tag)
            {
            case TAG_compile_unit:
index 9b5b34c56926636efea888040892539213d85b82..5e8292c67aedd3a5e77e38d347e72b7f937154c0 100644 (file)
@@ -190,6 +190,9 @@ record_minimal_symbol_and_info (name, address, ms_type, info, objfile)
     case mst_text:
     case mst_file_text:
       section = SECT_OFF_TEXT;
+#ifdef SMASH_TEXT_ADDRESS
+      SMASH_TEXT_ADDRESS (address);
+#endif
       break;
     case mst_data:
     case mst_file_data:
index 686bed6d0054cb757b650c8a7b545bd33a626306..3c4755d62d42ac1ba9eb28b6080f761684157826 100644 (file)
@@ -158,7 +158,9 @@ pa_symtab_read (abfd, addr, objfile)
            case ST_MILLICODE:
              symname = bufp->name.n_strx + stringtab;
              ms_type = mst_text;
-             bufp->symbol_value &= ~0x3; /* clear out permission bits */
+#ifdef SMASH_TEXT_ADDRESS
+             SMASH_TEXT_ADDRESS (bufp->symbol_value);
+#endif
              break;
            case ST_DATA:
              symname = bufp->name.n_strx + stringtab;
@@ -183,7 +185,9 @@ pa_symtab_read (abfd, addr, objfile)
            case ST_CODE:
              symname = bufp->name.n_strx + stringtab;
              ms_type = mst_file_text;
-             bufp->symbol_value &= ~0x3; /* clear out permission bits */
+#ifdef SMASH_TEXT_ADDRESS
+             SMASH_TEXT_ADDRESS (bufp->symbol_value);
+#endif
 
            check_strange_names:
              /* GAS leaves labels in .o files after assembling.  At
@@ -207,7 +211,9 @@ pa_symtab_read (abfd, addr, objfile)
            case ST_MILLICODE:
              symname = bufp->name.n_strx + stringtab;
              ms_type = mst_file_text;
-             bufp->symbol_value &= ~0x3; /* clear out permission bits */
+#ifdef SMASH_TEXT_ADDRESS
+             SMASH_TEXT_ADDRESS (bufp->symbol_value);
+#endif
              break;
 
            case ST_DATA: