aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>1993-12-06 07:19:13 +0000
committerJeff Law <law@redhat.com>1993-12-06 07:19:13 +0000
commit42ecb40985feacfd0eaa23d6a049d1e9e188093e (patch)
tree9663e8ccd17e09aa51b3a5cce325d8a82fdb446e
parent9934dce825ce0fd6cc7bd530fed80f266433eef1 (diff)
downloadgdb-42ecb40985feacfd0eaa23d6a049d1e9e188093e.zip
gdb-42ecb40985feacfd0eaa23d6a049d1e9e188093e.tar.gz
gdb-42ecb40985feacfd0eaa23d6a049d1e9e188093e.tar.bz2
* config/obj-som.c (obj_read_begin_hook): Delete unused function.
* config/obj-som.h (obj_read_begin_hook): Provide dummy definition. (TARGET_SYMBOL_FIELDS): Delete. SOM isn't making use of them.
-rw-r--r--gas/ChangeLog4
-rw-r--r--gas/config/obj-som.c91
-rw-r--r--gas/config/obj-som.h8
3 files changed, 83 insertions, 20 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 527ddb46..64f6dcf 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,9 @@
Sun Dec 5 17:05:29 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+ * config/obj-som.c (obj_read_begin_hook): Delete unused function.
+ * config/obj-som.h (obj_read_begin_hook): Provide dummy definition.
+ (TARGET_SYMBOL_FIELDS): Delete. SOM isn't making use of them.
+
* config/tc-hppa.c (tc_gen_reloc, SOM version): Handle relocation
expansion due to rounding mode selectors. Handle R_[RDSN]_MODE
relocations for selecting the current rounding mode.
diff --git a/gas/config/obj-som.c b/gas/config/obj-som.c
index 9f6e4f3..fd8943a 100644
--- a/gas/config/obj-som.c
+++ b/gas/config/obj-som.c
@@ -32,13 +32,6 @@ const pseudo_typeS obj_pseudo_table[] =
{NULL}
};
-/* SOM does not use this. */
-
-void
-obj_read_begin_hook ()
-{
-}
-
/* Handle a .version directive. FIXME. We just parse the .version
directive and throw away the results!. */
@@ -46,7 +39,7 @@ void
obj_som_version (unused)
int unused;
{
- SKIP_WHITESPACE ()
+ SKIP_WHITESPACE ();
if (*input_line_pointer == '\"')
{
++input_line_pointer;
@@ -71,27 +64,91 @@ void
obj_som_init_stab_section (seg)
segT seg;
{
- segT saved_seg = now_seg, space;
+ segT saved_seg = now_seg;
+ segT space;
subsegT saved_subseg = now_subseg;
+ char *p, *file;
+ unsigned int stroff;
/* Make the space which will contain the debug subspaces. */
space = bfd_make_section_old_way (stdoutput, "$GDB_DEBUG$");
/* Set SOM specific attributes for the space. In particular we set
- the space "defined", "private", "sort_key", and "spnum" values. */
- obj_set_section_attributes (space, 1, 1, 255, 2);
+ the space "defined", "private", "sort_key", and "spnum" values.
+
+ Due to a bug in pxdb (called by hpux linker), the sort keys
+ of the various stabs spaces/subspaces need to be "small". We
+ reserve range 72/73 which appear to work well. */
+ obj_set_section_attributes (space, 1, 1, 72, 2);
+ bfd_set_section_alignment (stdoutput, space, 2);
/* Set the containing space for both stab sections to be $GDB_DEBUG$
(just created above). Also set some attributes which BFD does
not understand. In particular, access bits, sort keys, and load
quadrant. */
- obj_set_subsection_attributes (seg, space, 0x1f, 255, 0);
+ obj_set_subsection_attributes (seg, space, 0x1f, 73, 0);
+ bfd_set_section_alignment (stdoutput, seg, 2);
+
+ /* Make some space for the first stab entry which is special.
+ It contains information about the length of this file's
+ stab string and the like. Using it avoids the need to
+ relocate the stab strings.
+
+ The $GDB_STRINGS$ space will be created as a side effect of
+ the call to get_stab_string_offset. */
+ p = frag_more (12);
+ as_where (&file, (unsigned int *) NULL);
+ stroff = get_stab_string_offset (file, "$GDB_STRINGS$");
+ know (stroff == 1);
+ md_number_to_chars (p, stroff, 4);
+ seg_info (seg)->stabu.p = p;
- /* Likewise for the $GDB_STRINGS$ subspace. Note the section
- hasn't been created at the time of this call, so we create
- it now. */
- seg = subseg_new ("$GDB_STRINGS$", 0);
- obj_set_subsection_attributes (seg, space, 0x1f, 254, 0);
+ /* Set the containing space for both stab sections to be $GDB_DEBUG$
+ (just created above). Also set some attributes which BFD does
+ not understand. In particular, access bits, sort keys, and load
+ quadrant. */
+ seg = bfd_get_section_by_name (stdoutput, "$GDB_STRINGS$");
+ obj_set_subsection_attributes (seg, space, 0x1f, 72, 0);
+ bfd_set_section_alignment (stdoutput, seg, 2);
subseg_set (saved_seg, saved_subseg);
}
+
+/* Fill in the counts in the first entry in a .stabs section. */
+
+static void
+adjust_stab_sections (abfd, sec, xxx)
+ bfd *abfd;
+ asection *sec;
+ PTR xxx;
+{
+ asection *strsec;
+ char *p;
+ int strsz, nsyms;
+
+ if (strcmp ("$GDB_SYMBOLS$", sec->name))
+ return;
+
+ strsec = bfd_get_section_by_name (abfd, "$GDB_STRINGS$");
+ if (strsec)
+ strsz = bfd_section_size (abfd, strsec);
+ else
+ strsz = 0;
+ nsyms = bfd_section_size (abfd, sec) / 12 - 1;
+
+ p = seg_info (sec)->stabu.p;
+ assert (p != 0);
+
+ bfd_h_put_16 (abfd, (bfd_vma) nsyms, (bfd_byte *) p + 6);
+ bfd_h_put_32 (abfd, (bfd_vma) strsz, (bfd_byte *) p + 8);
+}
+
+/* Called late in the asssembly phase to adjust the special
+ stab entry. This is where any other late object-file dependent
+ processing which should happen. */
+
+void
+som_frob_file ()
+{
+ bfd_map_over_sections (stdoutput, adjust_stab_sections, (PTR) 0);
+}
diff --git a/gas/config/obj-som.h b/gas/config/obj-som.h
index 7834685..5d2bbf8 100644
--- a/gas/config/obj-som.h
+++ b/gas/config/obj-som.h
@@ -34,9 +34,6 @@
#define TRUE !FALSE
#endif
-#define TARGET_SYMBOL_FIELDS int local:1; unsigned long sy_name_offset;
-
-
/* should be conditional on address size! */
#define som_symbol(asymbol) ((som_symbol_type *)(&(asymbol)->the_bfd))
@@ -54,6 +51,7 @@ extern void obj_som_version PARAMS ((int));
extern void obj_som_init_stab_section PARAMS ((segT));
#define obj_symbol_new_hook(s) {;}
+#define obj_read_begin_hook() {;}
/* SOM has several attributes for spaces/subspaces which can not
be easily expressed in BFD. We use these macros to trigger calls
@@ -64,6 +62,10 @@ extern void obj_som_init_stab_section PARAMS ((segT));
/* Likewise for symbol types. */
#define obj_set_symbol_type bfd_som_set_symbol_type
+/* This is the trigger for calling a BFD routine to attach unwind
+ information to a function symbol. */
+#define obj_attach_unwind_info bfd_som_attach_unwind_info
+
/* Stabs go in a separate sections. GDB expects to find them in sections
with the names $GDB_SYMBOLS$ and $GDB_STRINGS$ rather than .stab and
.stabstr. */