[Crash-utility] [PATCH] build sial with TARGET_CFLAGS

Luc Chouinard LChouinard at s2sys.com
Tue Mar 27 19:04:16 UTC 2012


Yes - the ABI flag is useless and should be decommissioned.
For now, go ahead and create a ABI_PPC definition to get it to build.
I'll see if I can clean this up in the next round of fixes.

The intent was to change the alignment of structure members based on the target abi.  There is little interest in runtime cross and the need to create types on the fly in Linux is non-existent if you have the -g dwarf info from vmlinux. It was more relevant in the days of Irix and how SGI released new kernels.


> -----Original Message-----
> From: Dave Anderson [mailto:anderson at redhat.com]
> Sent: Tuesday, March 27, 2012 2:20 PM
> To: Discussion list for crash utility usage, maintenance and development
> Cc: Luc Chouinard; rabin at rab.in
> Subject: Re: [Crash-utility] [PATCH] build sial with TARGET_CFLAGS
> 
> 
> 
> ----- Original Message -----
> >
> >
> > ----- Original Message -----
> > > ACK.
> > > This is the correct flow for these options.
> > > If someone targeting ppc64 can verify that would be great.
> >
> > I'll provision a ppc64 machine and verify the patch for both
> > 64- and 32-bit builds.  Presuming that works, queued for crash-6.0.6.
> >
> > Thanks,
> >   Dave
> 
> Well, as luck would have it, this patch does not work with 32-bit PPC:
> 
> $ make extensions
> gcc -Wall -nostartfiles -shared -rdynamic -o dminfo.so dminfo.c -fPIC -DPPC -
> m32 -D_FILE_OFFSET_BITS=64 -fPIC -DGDB_7_3_1 gcc -Wall -nostartfiles -
> shared -rdynamic -o echo.so echo.c -fPIC -DPPC -m32 -D_FILE_OFFSET_BITS=64
> -fPIC -DGDB_7_3_1 cd libsial && make bison -psial -v -t -d sial.y
> sial.y: conflicts: 252 shift/reduce, 20 reduce/reduce
> cc -O3 -g -fPIC -m32 -D_FILE_OFFSET_BITS=64 -fPIC   -c -o sial_util.o sial_util.c
> cc -O3 -g -fPIC -m32 -D_FILE_OFFSET_BITS=64 -fPIC   -c -o sial_node.o
> sial_node.c
> cc -O3 -g -fPIC -m32 -D_FILE_OFFSET_BITS=64 -fPIC   -c -o sial_var.o sial_var.c
> cc -O3 -g -fPIC -m32 -D_FILE_OFFSET_BITS=64 -fPIC   -c -o sial_func.o
> sial_func.c
> cc -O3 -g -fPIC -m32 -D_FILE_OFFSET_BITS=64 -fPIC   -c -o sial_str.o sial_str.c
> cc -O3 -g -fPIC -m32 -D_FILE_OFFSET_BITS=64 -fPIC   -c -o sial_op.o sial_op.c
> cc -O3 -g -fPIC -m32 -D_FILE_OFFSET_BITS=64 -fPIC   -c -o sial_num.o
> sial_num.c
> cc -O3 -g -fPIC -m32 -D_FILE_OFFSET_BITS=64 -fPIC   -c -o sial_stat.o sial_stat.c
> cc -O3 -g -fPIC -m32 -D_FILE_OFFSET_BITS=64 -fPIC   -c -o sial_builtin.o
> sial_builtin.c
> cc -O3 -g -fPIC -m32 -D_FILE_OFFSET_BITS=64 -fPIC   -c -o sial_type.o
> sial_type.c
> cc -O3 -g -fPIC -m32 -D_FILE_OFFSET_BITS=64 -fPIC   -c -o sial_case.o
> sial_case.c
> cc -O3 -g -fPIC -m32 -D_FILE_OFFSET_BITS=64 -fPIC   -c -o sial_api.o sial_api.c
> cc -O3 -g -fPIC -m32 -D_FILE_OFFSET_BITS=64 -fPIC   -c -o sial_member.o
> sial_member.c
> cc -O3 -g -fPIC -m32 -D_FILE_OFFSET_BITS=64 -fPIC   -c -o sial_alloc.o
> sial_alloc.c
> cc -O3 -g -fPIC -m32 -D_FILE_OFFSET_BITS=64 -fPIC   -c -o sial_define.o
> sial_define.c
> cc -O3 -g -fPIC -m32 -D_FILE_OFFSET_BITS=64 -fPIC   -c -o sial_input.o
> sial_input.c
> cc -O3 -g -fPIC -m32 -D_FILE_OFFSET_BITS=64 -fPIC   -c -o sial_print.o
> sial_print.c
> bison -psialpp -v -t -d sialpp.y
> sialpp.y: conflicts: 23 shift/reduce
> cc -O3 -g -fPIC -m32 -D_FILE_OFFSET_BITS=64 -fPIC -c sialpp.tab.c cc -O3 -g -
> fPIC -m32 -D_FILE_OFFSET_BITS=64 -fPIC -c sial.tab.c flex -L -Psial -t sial.l >
> lex.sial.c cc -O3 -g -fPIC -m32 -D_FILE_OFFSET_BITS=64 -fPIC -c lex.sial.c flex -
> Psialpp -t sialpp.l  > lex.sialpp.c cc -O3 -g -fPIC -m32 -D_FILE_OFFSET_BITS=64 -
> fPIC -c lex.sialpp.c cc -O3 -g -fPIC -m32 -D_FILE_OFFSET_BITS=64 -fPIC -o
> mkbaseop mkbaseop.c ./mkbaseop > baseops.c cc -O3 -g -fPIC -m32 -
> D_FILE_OFFSET_BITS=64 -fPIC -c baseops.c ar ccurl libsial.a sial_util.o
> sial_node.o sial_var.o sial_func.o sial_str.o sial_op.o sial_num.o sial_stat.o
> sial_builtin.o sial_type.o sial_case.o sial_api.o sial_member.o sial_alloc.o
> sial_define.o sial_input.o sial_print.o sialpp.tab.o sial.tab.o lex.sial.o lex.sialpp.o
> baseops.o gcc -g -I.. -Ilibsial -I../gdb-7.3.1/bfd -I../gdb-7.3.1/include -I../gdb-
> 7.3.1/gdb -I../gdb-7.3.1/gdb/config -I../gdb-7.3.1/gdb/common -I../gdb-7.3.1 -
> nostartfiles -shared -rdynamic -o sial.so sial.c -fPIC -DPPC -m32 -
> D_FILE_OFFSET_BITS=64 -fPIC -DGDB_7_3_1 -Llibsial -lsial
> sial.c:997:2: error: #error sial: Unkown ABI
> sial.c: In function ‘_init’:
> sial.c:1004: error: ‘SIAL_ABI’ undeclared (first use in this function)
> sial.c:1004: error: (Each undeclared identifier is reported only once
> sial.c:1004: error: for each function it appears in.)
> make[4]: [sial.so] Error 1 (ignored)
> gcc -Wall -I. -nostartfiles -shared -rdynamic -o snap.so snap.c -fPIC -DPPC -m32
> -D_FILE_OFFSET_BITS=64 -fPIC -DGDB_7_3_1 gcc -Wall -nostartfiles -shared -
> rdynamic -o trace.so trace.c -fPIC -DPPC -m32 -D_FILE_OFFSET_BITS=64 -fPIC -
> DGDB_7_3_1 $
> 
> I don't suppose it's as easy as just adding an ABI_PPC #define here in sial_api.h:
> 
>  /* abi values */
>  #define ABI_MIPS        1
>  #define ABI_INTEL_X86   2
>  #define ABI_INTEL_IA    3
>  #define ABI_S390        4
>  #define ABI_S390X       5
>  #define ABI_PPC64       6
> 
> and setting SIAL_ABI to it here in sial.c?:
> 
>  #ifdef i386
>  #define SIAL_ABI  ABI_INTEL_X86
>  #else
>  #ifdef __ia64__
>  #define SIAL_ABI  ABI_INTEL_IA
>  #else
>  #ifdef __x86_64__
>  #define SIAL_ABI  ABI_INTEL_IA
>  #else
>  #ifdef __s390__
>  #define SIAL_ABI  ABI_S390
>  #else
>  #ifdef __s390x__
>  #define SIAL_ABI  ABI_S390X
>  #else
>  #ifdef PPC64
>  #define SIAL_ABI  ABI_PPC64
>  #else
>  #error sial: Unkown ABI
>  #endif
>  #endif
>  #endif
>  #endif
>  #endif
>  #endif
> 
> And I'm not mistaken, SIAL_ABI is pretty much useless.  Aside from getting
> #define'd above, it's only used here:
> 
>   sial_apiset(&icops, SIAL_ABI, sizeof(long ), 0);
> 
> and that function apparently ignores it entirely:
> 
>   void
>   sial_apiset(apiops *o, int abi, int nbpw, int sign)
>   {
>   def_t *dt;
> 
>         sial_ops=o?o:&nullops;
>         sial_setdefbtype(nbpw, sign);
>         /* get the pre defines and push them. */
>         dt=API_GETDEFS();
>         while(dt) {
> 
>                 sial_newmac(dt->name, dt->val, 0, 0, 1);
>                 dt=dt->next;
>         }
>         /* add the sial define */
>         sial_newmac(sial_strdup("sial"), sial_strdup("1"), 0, 0, 1);
>   }
> 
> Or am I missing something?
> 
> But if I do add a new ABI_PPC #define, it builds, and shows this:
> 
>   # file ./extensions/snap.so
>   ./extensions/snap.so: ELF 32-bit MSB shared object, PowerPC or cisco 4500,
> version 1 (SYSV), dynamically linked, with unknown capability 0x41000000 =
> 0x13676e75, with unknown  capability 0x10000 = 0xb0401, not stripped
>   #
> 
> whereas the native PPC64 version shows this:
> 
>  # file extensions/sial.so
>  extensions/sial.so: ELF 64-bit MSB shared object, 64-bit PowerPC or cisco 7500,
> version 1 (SYSV), dynamically linked, not stripped  #
> 
> And it doesn't load the 32-bit version:
> 
>   crash> extend sial.so
>   extend: ./extensions/sial.so: not an ELF format object file
>   crash>
> 
> But that is probably a crash issue, because *none* of the extension modules
> built as 32-bit PPC objects will load:
> 
>   crash> extend snap.so
>   extend: ./extensions/snap.so: not an ELF format object file
>   crash> extend echo.so
>   extend: ./extensions/echo.so: not an ELF format object file
>   crash>
> 
> And "file" shows the additional baggage for them as well:
> 
>   # file extensions/snap.so
>   extensions/snap.so: ELF 32-bit MSB shared object, PowerPC or cisco 4500,
> version 1 (SYSV), dynamically linked, with unknown capability 0x41000000 =
> 0x13676e75, with unknown capability 0x10000 = 0xb0401, not stripped
>   #
> 
> So anyway, I'm going to leave the patch in place, wait for your answer re:
> creating an API_PPC #define, and also look into the reason behind the load
> failure.
> 
> Dave




More information about the Crash-utility mailing list