All of lore.kernel.org
 help / color / mirror / Atom feed
From: Li Wang <liwang@redhat.com>
To: ltp-list@lists.sourceforge.net
Subject: Re: [LTP] How to compie a ltp-case into 32-bit on the 64bit system
Date: Fri, 31 Jul 2015 10:07:04 -0400 (EDT)	[thread overview]
Message-ID: <481838215.1118179.1438351624934.JavaMail.zimbra@redhat.com> (raw)
In-Reply-To: <1010625653.980528.1438323855616.JavaMail.zimbra@redhat.com>

The program is here.

msgrcv08.c
----------- 
/*
 * Copyright (c) 2015   Author: Gabriellla Schmidt <gsc@bruker.de>
 *                      Modify: Li Wang <liwang@redhat.com>
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it would be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *
 * you should have received a copy of the GNU General Public License along
 * with this program; if not, write the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */

/*
 * Description:
 *
 * A regression test for:
 * 	commit e7ca2552369c1dfe0216c626baf82c3d83ec36bb
 * 	Author: Mateusz Guzik <mguzik@redhat.com>
 *	Date:   Mon Jan 27 17:07:11 2014 -0800
 *
 *     		ipc: fix compat msgrcv with negative msgtyp
 *
 * Reproduce:
 *
 *	32-bit application using the msgrcv() system call
 *	gives the error message:
 *
 *		msgrcv: No message of desired type
 *
 *	If this progarm is compiled as 64-bit application it doesn't works.
 */

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include "test.h"

const char *TCID = "msgrcv08";
const int TST_TOTAL = 1;

struct msgbuf
{
	long mtype;     /* message type, must be > 0 */
	char mtext[16]; /* message data */
};

static void setup(void)
{
	tst_require_root(NULL);

	TEST_PAUSE;
}

static void cleanup(void)
{
}

static int msr(int msqid)
{
	struct msgbuf msbs;
	struct msgbuf msbr;
	ssize_t sret;
	long   mtype = 121;

	memset(&msbs, 0, sizeof(msbs));
	msbs.mtype = mtype;

	if (msgsnd(msqid, &msbs, sizeof(msbs.mtext), IPC_NOWAIT))
		tst_brkm(TBROK, NULL, "msgsnd error");

	sret = msgrcv(msqid, &msbr, sizeof(msbr.mtext), -mtype, IPC_NOWAIT | MSG_NOERROR);

	if (sret < 0) {
		tst_resm(TFAIL, "Bug: No message of desired type.");
		return -1;
	}

	if (msbr.mtype != mtype)
		tst_brkm(TBROK, NULL, "found mtype %ld, expected %ld\n", msbr.mtype, mtype);

	if ((size_t)sret != sizeof(msbs.mtext))
		tst_brkm(TBROK, NULL, "received %lu, expected %lu\n",
				(unsigned long)sret, (unsigned long)sizeof(msbs.mtext));

	return 0;
}

static void msgrcv_test(void)
{
	int ret;
	int msqid = msgget(IPC_PRIVATE, IPC_CREAT | IPC_EXCL | 0666);

	if (msqid < 0)
		tst_brkm(TBROK, NULL, "msgget error");

	ret = msr(msqid);

	if (msgctl(msqid, IPC_RMID, 0))
		tst_brkm(TBROK, NULL, "msgctl error");

	if (!ret)
		tst_resm(TPASS, "Hi, no regression found!");
}

int main(int argc, char *argv[])
{
	int lc;

	tst_parse_opts(argc, argv, NULL, NULL);

	setup();

	for (lc = 0; TEST_LOOPING(lc); lc++)
		msgrcv_test();

	cleanup();
	tst_exit();
}

-- 
Regards, 
Li Wang 
Email: liwang@redhat.com 


----- Original Message -----
> Hi all,
> 
> I am going to add a new testcase:
> ltp/testcases/kernel/syscalls/ipc/msgrcv/msgrcv08.c
> for regression test.
> 
> But the key point is that this program 'msgrcv08.c' should be compiled into
> 32-bit,
> if it is compiled as 64-bit application it doesn't work.
> 
> 
> So, I try to add one line in the .../ipc/msgrcv/Makefile:
> 
>   msgrcv08: CFLAGS+=-m32
> 
> and I get some compile errors like:
> -----
> # make
> make -C ../lib -f
> "/mnt/tests/kernel/distribution/ltp/generic/ltp-full-20150420/testcases/kernel/syscalls/ipc/msgrcv/../lib/Makefile"
> all
> make[1]: Entering directory
> `/mnt/tests/kernel/distribution/ltp/generic/ltp-full-20150420/testcases/kernel/syscalls/ipc/lib'
> make[1]: Nothing to be done for `all'.
> make[1]: Leaving directory
> `/mnt/tests/kernel/distribution/ltp/generic/ltp-full-20150420/testcases/kernel/syscalls/ipc/lib'
> gcc -g -O2 -g -O2 -fno-strict-aliasing -pipe -Wall -W -g -O2
> -Wold-style-definition -m32 -D_FORTIFY_SOURCE=2
> -I/mnt/tests/kernel/distribution/ltp/generic/ltp-full-20150420/testcases/kernel/include
> -I/mnt/tests/kernel/distribution/ltp/generic/ltp-full-20150420/testcases/kernel/syscalls/ipc/msgrcv/../lib
> -I../../../../../include -I../../../../../include
> -L/mnt/tests/kernel/distribution/ltp/generic/ltp-full-20150420/testcases/kernel/syscalls/ipc/msgrcv/../lib
> -L../../../../../lib  msgrcv08.c   -lltp -lipc -o msgrcv08
> /usr/bin/ld: skipping incompatible ../../../../../lib/libltp.a when searching
> for -lltp
> /usr/bin/ld: cannot find -lltp
> /usr/bin/ld: skipping incompatible
> /mnt/tests/kernel/distribution/ltp/generic/ltp-full-20150420/testcases/kernel/syscalls/ipc/msgrcv/../lib/libipc.a
> when searching for -lipc
> /usr/bin/ld: cannot find -lipc
> collect2: error: ld returned 1 exit status
> make: *** [msgrcv08] Error 1
> -----
> 
> these because the libltp.a is 64-bit.
> 
> 
> Then, I came up with a idea that I don't include the ltp-lib file in
> 'msgrcv08.c',
> and just add two lines in the .../ipc/msgrcv/Makefile:
> 
>   msgrcv08:
> 	gcc -g -O2 -Wall -m32 msgrcv08.c -o msgrcv08
> 
> It works for me, but I know it's not appropriate for LTP management.
> 
> What should I do? or, Is there any good way to solve this problem?
> 
> Thanks~
> 
> --
> Regards,
> Li Wang
> Email: liwang@redhat.com
> 
> 
> 
> ------------------------------------------------------------------------------
> _______________________________________________
> Ltp-list mailing list
> Ltp-list@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/ltp-list
> 

------------------------------------------------------------------------------
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

  reply	other threads:[~2015-07-31 14:07 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <751019010.974973.1438321471218.JavaMail.zimbra@redhat.com>
2015-07-31  6:24 ` [LTP] How to compie a ltp-case into 32-bit on the 64bit system Li Wang
2015-07-31 14:07   ` Li Wang [this message]
2015-08-01  1:18   ` Cui Bixuan
2015-08-03 10:08     ` Li Wang
2015-08-03  8:39   ` Cyril Hrubis
     [not found]     ` <CAEemH2dOo=3Gq=c4eLuYL=itfYHLZMqFMDh_88k7ttUikqLA9Q@mail.gmail.com>
2015-08-03 11:48       ` Cyril Hrubis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=481838215.1118179.1438351624934.JavaMail.zimbra@redhat.com \
    --to=liwang@redhat.com \
    --cc=ltp-list@lists.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.