ups and gcc 2.8.1 not working together?

From: Ladanyi (ladanyi_at_watson.ibm.com)
Date: Tue Jul 21 1998 - 22:46:16 BST


ups and gcc 2.8.1 does not seem to work together on linux (debian 1.3, based
on libc5). Below is what I have done and was able to reproduce the same
problem with ups 3.32 as well. 

Basically, I have compiled ups with gcc 2.7.2 with -g and then under this ups
I ran itself debugging x.C compiled with g++ 2.8.1. This caused ups to
segfault. (I had ups crashing with a gcc 2.8.1 compiled C code as well, but
couldn't isolate a the problem so easily as with C++.) Exact details are
below.

Could anybody help me to get ups correctly debug codes compiled with gcc 2.8.1?

Thanks in advance,
--Laci

=========

ups was compiled with gcc 2.7.2.1

galadriel# /usr/bin/gcc -v
Reading specs from /usr/lib/gcc-lib/i486-linux/2.7.2.1/specs
gcc version 2.7.2.1

To get ups to compile I had to change the following things. These shouldn't
matter.

galadriel# diff -w -r ups-3.31-RGA ups-3.31-RGA-orig
diff -w -r ups-3.31-RGA/Makefile ups-3.31-RGA-orig/Makefile
63,64c63,64
< RANLIB = ranlib
< SVR4_LINKFLAGS=-L/usr/X11R6/lib
---
> RANLIB = :
> SVR4_LINKFLAGS=-R/usr/openwin/lib -L/usr/openwin/lib
diff -w -r ups-3.31-RGA/lib/libmtrprog/failmesg.c ups-3.31-RGA-orig/lib/libmtrprog/failmesg.c
20,21c20
< /* extern const char *const sys_errlist[]; -- doescn't compile :-( -- LL. */
< extern char* sys_errlist[];
---
> extern const char *const sys_errlist[];
diff -w -r ups-3.31-RGA/lib/libukcprog/formf.c ups-3.31-RGA-orig/lib/libukcprog/formf.c
42,43c42
< /* extern const char *const sys_errlist[]; -- doescn't compile :-( -- LL. */
< extern char* sys_errlist[];
---
> extern const char *const sys_errlist[];
diff -w -r ups-3.31-RGA/lib/libukcprog/logf.c ups-3.31-RGA-orig/lib/libukcprog/logf.c
54,55c54
< /* extern const char *const sys_errlist[]; -- doescn't compile :-( -- LL. */
< extern char* sys_errlist[];
---
> extern const char *const sys_errlist[];
diff -w -r ups-3.31-RGA/lib/libx11wn/wn_init.c ups-3.31-RGA-orig/lib/libx11wn/wn_init.c
507,508c507
<    /* extern const char *const sys_errlist[]; --- doesn't compile :-( LL. */
< extern char* sys_errlist[];
---
> extern const char *const sys_errlist[];
diff -w -r ups-3.31-RGA/ups/obj_env.c ups-3.31-RGA-orig/ups/obj_env.c
31c31
< /* extern const char **environ; -- not needed. it's in stdlib.h -- LL. */
---
> extern const char **environ;
diff -w -r ups-3.31-RGA/ups/xc_builtins.c ups-3.31-RGA-orig/ups/xc_builtins.c
160,161c160
< /* extern const char *const sys_errlist[]; -- doescn't compile :-( -- LL. */
< extern char* sys_errlist[];
---
> extern const char *const sys_errlist[];

========== x.C : sample code that breaks ups ===============================
#include <vector>
#include <stdio.h>

int main(){
   vector<int> x;
   x.push_back(1);
   x.push_back(2);
   x.push_back(3);

   vector<int>::iterator i;
   for (i=x.begin(); i!=x.end(); i++)
      printf("%i\n", *i);

   return 0;
}
=========== compiling x.C with g++ v.2.8.1==============================
galadriel# g++ --version
2.8.1
galadriel# g++ -o x.o -c -g x.C 
galadriel# g++ -o x x.o           

=========================================
I put a breakpoint on the "for" line; when stops click on "i" to get its value.
ups then crashes and the stack trace is:

   Functions
      main                                                       ups.c:652
      ups                                                        ups.c:1028
      re_event_loop                                              reg.c:818
      source_window_event_handler                             ui_src.c:775
      do_var_selection                                        ui_src.c:436
      display_var_in_mangled_form                          obj_stack.c:1376
      match_name_end_in_func                               obj_stack.c:1323
      ao_get_fu_blocks                                    ao_symload.c:999
      get_fi_types                                        ao_symload.c:425
      Class                                              ao_symparse.c:742
      TypeId                                             ao_symparse.c:1033
      TypeDef                                            ao_symparse.c:1533
      Record                                             ao_symparse.c:1719
      Field                                              ao_symparse.c:1864
      TypeId                                             ao_symparse.c:1038
      tnum_to_type                                       ao_symparse.c:550
      get_type                                           ao_symparse.c:435
      get_def                                            ao_symparse.c:317
      -------------              SIGSEGV -------------

Variables:
         stf_t <stf{0}>                     *0x813d13c
            char <stf_name{0}>                 "x.C"
            language_t <stf_language>          LANG_CC
            Compiler_type <stf_compiler_type>  CT_GNU_CC
            symtab_t *<stf_symtab>             0x8139b34
            fil_t *<stf_fil>                   0x813d204
            int <stf_symno>                    1
            int <stf_symlim>                   975
            unsigned long <stf_addr>           134516024
            unsigned <stf_flags>               0
            char <stf_objpath_hint{0}>         *NULL
            char <stf_objname{0}>              *NULL
            long <stf_obj_mtime>               0
            char <stf_global_prefix{0}>        *NULL
            undefined struct symio_s *<stf_symio>             0x8139d24
            Addr_range <stf_range[0]>          *0x813d174
            snlist_t *<stf_snlist>             0x814217c
            Ftype *<stf_ftypes>                0x8153064
            hf_t <stf_fmap{0}{0}>              *0x813d234
            hf_t <stf_fmap{1}{0}>              *0x53535353
            hf_t <stf_fmap{2}{0}>              *0x81421ce
            hf_t <stf_fmap{3}{0}>              *0x1
            hf_t <stf_fmap{4}{0}>              *0x1
            hf_t <stf_fmap{5}{0}>              *0x8139b34
            hf_t <stf_fmap{6}{0}>              *0x8142274
            hf_t <stf_fmap{7}{0}>              *0x3cf
            hf_t <stf_fmap{8}{0}>              *0x410
            int <stf_mapsize>                  1
            int <stf_fnum>                     0
         ------- lines 224..343 --------
            ------- lines 288..335 --------
               int <fnum>                         8

(this is enough to crash it, stf_fmap{8} is bogus.)


This archive was generated by hypermail 2.1.4 : Wed Feb 13 2002 - 21:51:32 GMT