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@redhat.com]
Sent: Tuesday, March 27, 2012 2:20 PM
To: Discussion list for crash utility usage, maintenance and development
Cc: Luc Chouinard; rabin(a)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