diff options
author | Nicholas Duffek <nsd@redhat.com> | 2001-05-01 19:36:11 +0000 |
---|---|---|
committer | Nicholas Duffek <nsd@redhat.com> | 2001-05-01 19:36:11 +0000 |
commit | 977adac5db461a0f8e7d7a5b2a82c6b81f015433 (patch) | |
tree | 782a5930b6c424ff820d5ceb72641965ba0163a2 /gdb/xcoffread.c | |
parent | f5a6fc0555d099b05ae64a9dcdd47661636885f7 (diff) | |
download | gdb-977adac5db461a0f8e7d7a5b2a82c6b81f015433.zip gdb-977adac5db461a0f8e7d7a5b2a82c6b81f015433.tar.gz gdb-977adac5db461a0f8e7d7a5b2a82c6b81f015433.tar.bz2 |
* config/rs6000/tm-rs6000.h (IN_SOLIB_RETURN_TRAMPOLINE): Define.
(rs6000_in_solib_return_trampoline): Declare.
* rs6000-tdep.c (rs6000_in_solib_return_trampoline): New
function.
(rs6000_skip_trampoline_code): Skip bigtoc fixup code.
* xcoffread.c (read_xcoff_symtab): Perform the ISFCN function
check after the CSECT check rather than before it. Allocate
separate symtabs for CSECTs whose names begin with '@'.
(scan_xcoff_symtab): Don't ignore symbols beginning with '@'.
Activate the misc_func_recorded mechanism for whose names begin
with '@'.
Diffstat (limited to 'gdb/xcoffread.c')
-rw-r--r-- | gdb/xcoffread.c | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index 586f258..6e52710 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -1081,14 +1081,6 @@ read_xcoff_symtab (struct partial_symtab *pst) /* done with all files, everything from here on is globals */ } - /* if explicitly specified as a function, treat is as one. */ - if (ISFCN (cs->c_type) && cs->c_sclass != C_TPDEF) - { - bfd_coff_swap_aux_in (abfd, raw_auxptr, cs->c_type, cs->c_sclass, - 0, cs->c_naux, &main_aux); - goto function_entry_point; - } - if ((cs->c_sclass == C_EXT || cs->c_sclass == C_HIDEXT) && cs->c_naux == 1) { @@ -1158,7 +1150,8 @@ read_xcoff_symtab (struct partial_symtab *pst) SECT_OFF_TEXT (objfile)); file_end_addr = file_start_addr + CSECT_LEN (&main_aux); - if (cs->c_name && cs->c_name[0] == '.') + if (cs->c_name && (cs->c_name[0] == '.' + || cs->c_name[0] == '@')) { last_csect_name = cs->c_name; last_csect_val = cs->c_value; @@ -1232,6 +1225,16 @@ read_xcoff_symtab (struct partial_symtab *pst) } } + /* If explicitly specified as a function, treat is as one. This check + evaluates to true for @FIX* bigtoc CSECT symbols, so it must occur + after the above CSECT check. */ + if (ISFCN (cs->c_type) && cs->c_sclass != C_TPDEF) + { + bfd_coff_swap_aux_in (abfd, raw_auxptr, cs->c_type, cs->c_sclass, + 0, cs->c_naux, &main_aux); + goto function_entry_point; + } + switch (cs->c_sclass) { @@ -2243,14 +2246,8 @@ scan_xcoff_symtab (struct objfile *objfile) else csect_aux = main_aux[0]; - /* If symbol name starts with ".$" or "$", ignore it. - - A symbol like "@FIX1" introduces a section for -bbigtoc jump - tables, which contain anonymous linker-generated code. - Ignore those sections to avoid "pc 0x... in read in psymtab, - but not in symtab" warnings from find_pc_sect_symtab. */ - - if (namestring[0] == '$' || namestring[0] == '@' + /* If symbol name starts with ".$" or "$", ignore it. */ + if (namestring[0] == '$' || (namestring[0] == '.' && namestring[1] == '$')) break; @@ -2296,7 +2293,11 @@ scan_xcoff_symtab (struct objfile *objfile) objfile->static_psymbols.next); } } - if (namestring && namestring[0] == '.') + /* Activate the misc_func_recorded mechanism for + compiler- and linker-generated CSECTs like ".strcmp" + and "@FIX1". */ + if (namestring && (namestring[0] == '.' + || namestring[0] == '@')) { last_csect_name = namestring; last_csect_val = symbol.n_value; |